commit 5283373b5b39075782ec84f1332f7ab254cad57a Author: Billy <1015018684@qq.com> Date: Mon Jan 10 21:25:36 2022 +0800 基本搭建完毕 diff --git a/.browserslistrc b/.browserslistrc new file mode 100644 index 0000000..214388f --- /dev/null +++ b/.browserslistrc @@ -0,0 +1,3 @@ +> 1% +last 2 versions +not dead diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..d6a0dd9 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,38 @@ +/* + * @Author: Billy + * @Date: 2020-09-10 09:12:00 + * @LastEditors: Billy + * @LastEditTime: 2020-09-10 18:25:23 + * @Description: 请输入 + */ +module.exports = { + root: true, + env: { + node: true + }, + 'extends': [ + 'plugin:vue/essential', + 'eslint:recommended' + ], + parserOptions: { + parser: 'babel-eslint' + }, + rules: { + 'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off', + 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off', + 'no-unused-vars': process.env.NODE_ENV === 'production' ? 'warn' : 'off', + 'no-empty': process.env.NODE_ENV === 'production' ? 'warn' : 'warn', + 'vue/no-unused-components': process.env.NODE_ENV === 'production' ? 'warn' : 'warn', + 'no-control-regex': process.env.NODE_ENV === 'production' ? 'warn' : 'off', + 'no-useless-escape': process.env.NODE_ENV === 'production' ? 'warn' : 'off' + }, + overrides: [{ + files: [ + '**/__tests__/*.{j,t}s?(x)', + '**/tests/unit/**/*.spec.{j,t}s?(x)' + ], + env: { + mocha: true + } + }] +} \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..403adbc --- /dev/null +++ b/.gitignore @@ -0,0 +1,23 @@ +.DS_Store +node_modules +/dist + + +# local env files +.env.local +.env.*.local + +# Log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/README.md b/README.md new file mode 100644 index 0000000..e97613c --- /dev/null +++ b/README.md @@ -0,0 +1,11 @@ + + +## 后端文档 + +http://ty.y68.fun/sales-expo-saas/#/ \ No newline at end of file diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 0000000..e955840 --- /dev/null +++ b/babel.config.js @@ -0,0 +1,5 @@ +module.exports = { + presets: [ + '@vue/cli-plugin-babel/preset' + ] +} diff --git a/frontend-specification.md b/frontend-specification.md new file mode 100644 index 0000000..d3d9647 --- /dev/null +++ b/frontend-specification.md @@ -0,0 +1,58 @@ + + +## 前端项目目录结构 + +├─api // axios请求封装 +│ ├─Disk // 分类子文件夹 +│ ├─Rbac // 分类子文件夹 +│ ├─_AxiosInterceptors.js // Axios拦截器 +│ └─_ResponseHelper.js // 针对服务器返回值的处理方法 +├─assets // Vue静态资源 +├─biz // 如果一个常用业务需要用到多个api函数,建议在此封装 +│ └─Disk // 分类子文件夹 +├─components // Vue组件 +│ ├─Disk // 分类子文件夹(按大功能模块划分) +│ │ └─Recycle // 分类子子文件夹(按功能模块划分) +│ ├─Home // 分类子文件夹(按大功能模块划分) +│ └─_Common // 常用Vue组件,在此进行归类,可在其它Vue组件或Vue页面使用 +│ │ ├─Drag // 分类子文件夹 +│ │ └─Tree // 分类子文件夹 +├─entity // 对象实体类,与后端返回的对象有关 +│ ├─Disk // 分类子文件夹 +│ └─Rbac // 分类子文件夹 +├─router +│ ├─_index.js // 路由入口文件 +│ ├─disk.js // 路由子分类 +│ └─user-role-auth.js // 路由子分类 +├─scss +│ ├─HomeScreen // scss分类子文件夹 +│ ├─_globals.scss // 全局scss +│ └─_variables.scss // 常用的scss常量;原则上颜色都必须定义在此 +├─storage // 对localStorage或sessionStorage的操作的封装 +│ └─login-info.js // 针对登录的storage封装 +├─store // Vuex +├─svgicon +│ └─homescreen +├─sys +│ ├─SysCode.js // 信息码,与后端返回值的code对应 +│ └─SysError.js // 错误类 +├─util // 常用工具类的封装(先看有没有合适用的,没有再自己实现) +├─views // Vue页面 +│ ├─HomeSubViews // 业务类子页面 +│ │ ├─Disk // 子页面分类 +│ │ └─Rbac // 子页面分类 +│ └─SystemViews // 管理类子页面 +├─App.vue // 全局样式记在此 +├─const.js // 全局常量记在此 +├─main.js + +## 编码格式 +* 习惯性用“;”作为语句结尾 +* 单行注释文字前面加一个空格,如:// 注释 +* VUE 的 props 必须写明注释 \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..9d8c329 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,30459 @@ +{ + "name": "sales", + "version": "0.1.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "sales", + "version": "0.1.0", + "dependencies": { + "@tweenjs/tween.js": "^18.6.4", + "axios": "^0.21.4", + "ckeditor4-vue": "^1.3.2", + "core-js": "^3.6.5", + "element-ui": "^2.13.2", + "interactjs": "^1.10.11", + "jsonwebtoken": "^8.5.1", + "velocity-animate": "^1.5.2", + "vue": "^2.6.11", + "vue-page-split": "^1.2.2", + "vue-router": "^3.2.0", + "vuex": "^3.4.0" + }, + "devDependencies": { + "@vue/cli-plugin-babel": "~4.5.0", + "@vue/cli-plugin-eslint": "~4.5.0", + "@vue/cli-plugin-router": "~4.5.0", + "@vue/cli-plugin-unit-mocha": "~4.5.0", + "@vue/cli-plugin-vuex": "~4.5.0", + "@vue/cli-service": "~4.5.0", + "@vue/test-utils": "^1.0.3", + "babel-eslint": "^10.1.0", + "chai": "^4.1.2", + "eslint": "^6.7.2", + "eslint-plugin-vue": "^6.2.2", + "sass": "^1.26.5", + "sass-loader": "^8.0.2", + "svg-sprite-loader": "^6.0.9", + "vue-template-compiler": "^2.6.11" + } + }, + "node_modules/@ant-design-vue/babel-helper-vue-transform-on": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/@ant-design-vue/babel-helper-vue-transform-on/download/@ant-design-vue/babel-helper-vue-transform-on-1.0.1.tgz", + "integrity": "sha1-0hnZL04fxeet0hHDR8f6AAUYtiM=", + "dev": true + }, + "node_modules/@ant-design-vue/babel-plugin-jsx": { + "version": "1.0.0-rc.1", + "resolved": "https://registry.npm.taobao.org/@ant-design-vue/babel-plugin-jsx/download/@ant-design-vue/babel-plugin-jsx-1.0.0-rc.1.tgz", + "integrity": "sha1-rlbOy9qfCGkbz5Lf6Y4kFud9dYs=", + "dev": true, + "dependencies": { + "@ant-design-vue/babel-helper-vue-transform-on": "^1.0.0", + "@babel/helper-module-imports": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.0.0", + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "camelcase": "^6.0.0", + "html-tags": "^3.1.0", + "svg-tags": "^1.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.10.4.tgz?cache=0&sync_timestamp=1593522948158&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fcode-frame%2Fdownload%2F%40babel%2Fcode-frame-7.10.4.tgz", + "integrity": "sha1-Fo2ho26Q2miujUnA8bSMfGJJITo=", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.11.0", + "resolved": "https://registry.npm.taobao.org/@babel/compat-data/download/@babel/compat-data-7.11.0.tgz", + "integrity": "sha1-6fc+/gmvE1W3I6fzmxG61jfXyZw=", + "dev": true, + "dependencies": { + "browserslist": "^4.12.0", + "invariant": "^2.2.4", + "semver": "^5.5.0" + } + }, + "node_modules/@babel/core": { + "version": "7.11.6", + "resolved": "https://registry.npm.taobao.org/@babel/core/download/@babel/core-7.11.6.tgz?cache=0&sync_timestamp=1599146750684&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fcore%2Fdownload%2F%40babel%2Fcore-7.11.6.tgz", + "integrity": "sha1-OpRV3HOH/xusRXcGULwTugShVlE=", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.11.6", + "@babel/helper-module-transforms": "^7.11.0", + "@babel/helpers": "^7.10.4", + "@babel/parser": "^7.11.5", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.11.5", + "@babel/types": "^7.11.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.11.6", + "resolved": "https://registry.npm.taobao.org/@babel/generator/download/@babel/generator-7.11.6.tgz?cache=0&sync_timestamp=1599146753105&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fgenerator%2Fdownload%2F%40babel%2Fgenerator-7.11.6.tgz", + "integrity": "sha1-uGiQD4GxY7TUZOokVFxhy6xNxiA=", + "dev": true, + "dependencies": { + "@babel/types": "^7.11.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-annotate-as-pure/download/@babel/helper-annotate-as-pure-7.10.4.tgz?cache=0&sync_timestamp=1593521294951&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-annotate-as-pure%2Fdownload%2F%40babel%2Fhelper-annotate-as-pure-7.10.4.tgz", + "integrity": "sha1-W/DUlaP3V6w72ki1vzs7ownHK6M=", + "dev": true, + "dependencies": { + "@babel/types": "^7.10.4" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-builder-binary-assignment-operator-visitor/download/@babel/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz?cache=0&sync_timestamp=1593522960718&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-builder-binary-assignment-operator-visitor%2Fdownload%2F%40babel%2Fhelper-builder-binary-assignment-operator-visitor-7.10.4.tgz", + "integrity": "sha1-uwt18xv5jL+f8UPBrleLhydK4aM=", + "dev": true, + "dependencies": { + "@babel/helper-explode-assignable-expression": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-compilation-targets/download/@babel/helper-compilation-targets-7.10.4.tgz?cache=0&sync_timestamp=1593522816195&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-compilation-targets%2Fdownload%2F%40babel%2Fhelper-compilation-targets-7.10.4.tgz", + "integrity": "sha1-gEro4/BDdmB8x5G51H1UAnYzK9I=", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.10.4", + "browserslist": "^4.12.0", + "invariant": "^2.2.4", + "levenary": "^1.1.1", + "semver": "^5.5.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.10.5", + "resolved": "https://registry.npm.taobao.org/@babel/helper-create-class-features-plugin/download/@babel/helper-create-class-features-plugin-7.10.5.tgz", + "integrity": "sha1-n2FEa6gOgkCwpchcb9rIRZ1vJZ0=", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-member-expression-to-functions": "^7.10.5", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-create-regexp-features-plugin/download/@babel/helper-create-regexp-features-plugin-7.10.4.tgz?cache=0&sync_timestamp=1593522973297&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-create-regexp-features-plugin%2Fdownload%2F%40babel%2Fhelper-create-regexp-features-plugin-7.10.4.tgz", + "integrity": "sha1-/dYNiFJGWaC2lZwFeZJeQlcU87g=", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-regex": "^7.10.4", + "regexpu-core": "^4.7.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-map": { + "version": "7.10.5", + "resolved": "https://registry.npm.taobao.org/@babel/helper-define-map/download/@babel/helper-define-map-7.10.5.tgz?cache=0&sync_timestamp=1594750707541&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-define-map%2Fdownload%2F%40babel%2Fhelper-define-map-7.10.5.tgz", + "integrity": "sha1-tTwQ23imQIABUmkrEzkxR6y5uzA=", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.10.4", + "@babel/types": "^7.10.5", + "lodash": "^4.17.19" + } + }, + "node_modules/@babel/helper-explode-assignable-expression": { + "version": "7.11.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-explode-assignable-expression/download/@babel/helper-explode-assignable-expression-7.11.4.tgz?cache=0&sync_timestamp=1597948364953&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-explode-assignable-expression%2Fdownload%2F%40babel%2Fhelper-explode-assignable-expression-7.11.4.tgz", + "integrity": "sha1-LY40cCUswXq6kX7eeAPUp6J2pBs=", + "dev": true, + "dependencies": { + "@babel/types": "^7.10.4" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-function-name/download/@babel/helper-function-name-7.10.4.tgz?cache=0&sync_timestamp=1593522977138&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-function-name%2Fdownload%2F%40babel%2Fhelper-function-name-7.10.4.tgz", + "integrity": "sha1-0tOyDFmtjEcRL6fSqUvAnV74Lxo=", + "dev": true, + "dependencies": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "node_modules/@babel/helper-get-function-arity": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-get-function-arity/download/@babel/helper-get-function-arity-7.10.4.tgz?cache=0&sync_timestamp=1593521294451&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-get-function-arity%2Fdownload%2F%40babel%2Fhelper-get-function-arity-7.10.4.tgz", + "integrity": "sha1-mMHL6g4jMvM/mkZhuM4VBbLBm6I=", + "dev": true, + "dependencies": { + "@babel/types": "^7.10.4" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-hoist-variables/download/@babel/helper-hoist-variables-7.10.4.tgz?cache=0&sync_timestamp=1593521294715&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-hoist-variables%2Fdownload%2F%40babel%2Fhelper-hoist-variables-7.10.4.tgz", + "integrity": "sha1-1JsAHR1aaMpeZgTdoBpil/fJOB4=", + "dev": true, + "dependencies": { + "@babel/types": "^7.10.4" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.11.0", + "resolved": "https://registry.npm.taobao.org/@babel/helper-member-expression-to-functions/download/@babel/helper-member-expression-to-functions-7.11.0.tgz?cache=0&sync_timestamp=1596144430473&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-member-expression-to-functions%2Fdownload%2F%40babel%2Fhelper-member-expression-to-functions-7.11.0.tgz", + "integrity": "sha1-rmnIPYTugvS0L5bioJQQk1qPJt8=", + "dev": true, + "dependencies": { + "@babel/types": "^7.11.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-module-imports/download/@babel/helper-module-imports-7.10.4.tgz?cache=0&sync_timestamp=1593522965782&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-module-imports%2Fdownload%2F%40babel%2Fhelper-module-imports-7.10.4.tgz", + "integrity": "sha1-TFxUvgS9MWcKc4J5fXW5+i5bViA=", + "dev": true, + "dependencies": { + "@babel/types": "^7.10.4" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.11.0", + "resolved": "https://registry.npm.taobao.org/@babel/helper-module-transforms/download/@babel/helper-module-transforms-7.11.0.tgz", + "integrity": "sha1-sW8lAinkchGr3YSzS2RzfCqy01k=", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4", + "@babel/helper-simple-access": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/template": "^7.10.4", + "@babel/types": "^7.11.0", + "lodash": "^4.17.19" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-optimise-call-expression/download/@babel/helper-optimise-call-expression-7.10.4.tgz?cache=0&sync_timestamp=1593521296446&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-optimise-call-expression%2Fdownload%2F%40babel%2Fhelper-optimise-call-expression-7.10.4.tgz", + "integrity": "sha1-UNyWQT1ZT5lad5BZBbBYk813lnM=", + "dev": true, + "dependencies": { + "@babel/types": "^7.10.4" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-plugin-utils/download/@babel/helper-plugin-utils-7.10.4.tgz?cache=0&sync_timestamp=1593521082372&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-plugin-utils%2Fdownload%2F%40babel%2Fhelper-plugin-utils-7.10.4.tgz", + "integrity": "sha1-L3WoMSadT2d95JmG3/WZJ1M883U=", + "dev": true + }, + "node_modules/@babel/helper-regex": { + "version": "7.10.5", + "resolved": "https://registry.npm.taobao.org/@babel/helper-regex/download/@babel/helper-regex-7.10.5.tgz?cache=0&sync_timestamp=1594750677873&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-regex%2Fdownload%2F%40babel%2Fhelper-regex-7.10.5.tgz", + "integrity": "sha1-Mt+7eYmQc8QVVXBToZvQVarlCuA=", + "dev": true, + "dependencies": { + "lodash": "^4.17.19" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.11.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-remap-async-to-generator/download/@babel/helper-remap-async-to-generator-7.11.4.tgz?cache=0&sync_timestamp=1597948363357&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-remap-async-to-generator%2Fdownload%2F%40babel%2Fhelper-remap-async-to-generator-7.11.4.tgz", + "integrity": "sha1-RHTqn3Q48YV14wsMrHhARbQCoS0=", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-wrap-function": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-replace-supers/download/@babel/helper-replace-supers-7.10.4.tgz?cache=0&sync_timestamp=1593522959591&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-replace-supers%2Fdownload%2F%40babel%2Fhelper-replace-supers-7.10.4.tgz", + "integrity": "sha1-1YXNk4jqBuYDHkzUS2cTy+rZ5s8=", + "dev": true, + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.10.4", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-simple-access/download/@babel/helper-simple-access-7.10.4.tgz?cache=0&sync_timestamp=1593522975802&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-simple-access%2Fdownload%2F%40babel%2Fhelper-simple-access-7.10.4.tgz", + "integrity": "sha1-D1zNopRSd6KnotOoIeFTle3PNGE=", + "dev": true, + "dependencies": { + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.11.0", + "resolved": "https://registry.npm.taobao.org/@babel/helper-skip-transparent-expression-wrappers/download/@babel/helper-skip-transparent-expression-wrappers-7.11.0.tgz", + "integrity": "sha1-7sFi8RLC9Y068K8SXju1dmUUZyk=", + "dev": true, + "dependencies": { + "@babel/types": "^7.11.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.11.0", + "resolved": "https://registry.npm.taobao.org/@babel/helper-split-export-declaration/download/@babel/helper-split-export-declaration-7.11.0.tgz", + "integrity": "sha1-+KSRJErPamdhWKxCBykRuoOtCZ8=", + "dev": true, + "dependencies": { + "@babel/types": "^7.11.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-validator-identifier/download/@babel/helper-validator-identifier-7.10.4.tgz?cache=0&sync_timestamp=1593521083613&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-validator-identifier%2Fdownload%2F%40babel%2Fhelper-validator-identifier-7.10.4.tgz", + "integrity": "sha1-p4x6clHgH2FlEtMbEK3PUq2l4NI=", + "dev": true + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-wrap-function/download/@babel/helper-wrap-function-7.10.4.tgz?cache=0&sync_timestamp=1593522965325&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-wrap-function%2Fdownload%2F%40babel%2Fhelper-wrap-function-7.10.4.tgz", + "integrity": "sha1-im9wHqsP8592W1oc/vQJmQ5iS4c=", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "node_modules/@babel/helpers": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helpers/download/@babel/helpers-7.10.4.tgz?cache=0&sync_timestamp=1593522959913&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelpers%2Fdownload%2F%40babel%2Fhelpers-7.10.4.tgz", + "integrity": "sha1-Kr6w1yGv98Cpc3a54fb2XXpHUEQ=", + "dev": true, + "dependencies": { + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "node_modules/@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.10.4.tgz?cache=0&sync_timestamp=1593521095576&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhighlight%2Fdownload%2F%40babel%2Fhighlight-7.10.4.tgz", + "integrity": "sha1-fRvf1ldTU4+r5sOFls23bZrGAUM=", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.11.5", + "resolved": "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.11.5.tgz", + "integrity": "sha1-x/9jA99xCA7HpPW4wAPFjxz1EDc=", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.10.5", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-async-generator-functions/download/@babel/plugin-proposal-async-generator-functions-7.10.5.tgz?cache=0&sync_timestamp=1594750682516&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-async-generator-functions%2Fdownload%2F%40babel%2Fplugin-proposal-async-generator-functions-7.10.5.tgz", + "integrity": "sha1-NJHKvy98F5q4IGBs7Cf+0V4OhVg=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-remap-async-to-generator": "^7.10.4", + "@babel/plugin-syntax-async-generators": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-class-properties/download/@babel/plugin-proposal-class-properties-7.10.4.tgz?cache=0&sync_timestamp=1593522963242&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-class-properties%2Fdownload%2F%40babel%2Fplugin-proposal-class-properties-7.10.4.tgz", + "integrity": "sha1-ozv2Mto5ClnHqMVwBF0RFc13iAc=", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-decorators": { + "version": "7.10.5", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-decorators/download/@babel/plugin-proposal-decorators-7.10.5.tgz?cache=0&sync_timestamp=1594750722573&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-decorators%2Fdownload%2F%40babel%2Fplugin-proposal-decorators-7.10.5.tgz", + "integrity": "sha1-QomLukeLxLGuJCpwOpU6etNQ/7Q=", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.10.5", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-decorators": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-dynamic-import": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-dynamic-import/download/@babel/plugin-proposal-dynamic-import-7.10.4.tgz?cache=0&sync_timestamp=1593521093903&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-dynamic-import%2Fdownload%2F%40babel%2Fplugin-proposal-dynamic-import-7.10.4.tgz", + "integrity": "sha1-uleibLmLN3QenVvKG4sN34KR8X4=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-dynamic-import": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-export-namespace-from": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-export-namespace-from/download/@babel/plugin-proposal-export-namespace-from-7.10.4.tgz?cache=0&sync_timestamp=1593522820298&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-export-namespace-from%2Fdownload%2F%40babel%2Fplugin-proposal-export-namespace-from-7.10.4.tgz", + "integrity": "sha1-Vw2IO5EDFjez4pWO6jxDjmLAX1Q=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-json-strings": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-json-strings/download/@babel/plugin-proposal-json-strings-7.10.4.tgz?cache=0&sync_timestamp=1593521092651&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-json-strings%2Fdownload%2F%40babel%2Fplugin-proposal-json-strings-7.10.4.tgz", + "integrity": "sha1-WT5ZxjUoFgIzvTIbGuvgggwjQds=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.11.0", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-logical-assignment-operators/download/@babel/plugin-proposal-logical-assignment-operators-7.11.0.tgz", + "integrity": "sha1-n4DkgsAwg8hxJd7hACa1hSfqIMg=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-nullish-coalescing-operator/download/@babel/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz?cache=0&sync_timestamp=1593521087263&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-nullish-coalescing-operator%2Fdownload%2F%40babel%2Fplugin-proposal-nullish-coalescing-operator-7.10.4.tgz", + "integrity": "sha1-AqfpYfwy5tWy2wZJ4Bv4Dd7n4Eo=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-numeric-separator/download/@babel/plugin-proposal-numeric-separator-7.10.4.tgz?cache=0&sync_timestamp=1593522970329&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-numeric-separator%2Fdownload%2F%40babel%2Fplugin-proposal-numeric-separator-7.10.4.tgz", + "integrity": "sha1-zhWQ/wplrRKXCmCdeIVemkwa7wY=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.11.0", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-object-rest-spread/download/@babel/plugin-proposal-object-rest-spread-7.11.0.tgz", + "integrity": "sha1-vYH5Wh90Z2DqQ7bC09YrEXkK0K8=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-optional-catch-binding/download/@babel/plugin-proposal-optional-catch-binding-7.10.4.tgz?cache=0&sync_timestamp=1593521089386&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-optional-catch-binding%2Fdownload%2F%40babel%2Fplugin-proposal-optional-catch-binding-7.10.4.tgz", + "integrity": "sha1-Mck4MJ0kp4pJ1o/av/qoY3WFVN0=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.11.0", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-optional-chaining/download/@babel/plugin-proposal-optional-chaining-7.11.0.tgz", + "integrity": "sha1-3lhm0GRvav2quKVmOC/joiF1UHY=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-skip-transparent-expression-wrappers": "^7.11.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-private-methods/download/@babel/plugin-proposal-private-methods-7.10.4.tgz?cache=0&sync_timestamp=1593522970831&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-private-methods%2Fdownload%2F%40babel%2Fplugin-proposal-private-methods-7.10.4.tgz", + "integrity": "sha1-sWDZcrj9ulx9ERoUX8jEIfwqaQk=", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-unicode-property-regex/download/@babel/plugin-proposal-unicode-property-regex-7.10.4.tgz?cache=0&sync_timestamp=1593522975170&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-unicode-property-regex%2Fdownload%2F%40babel%2Fplugin-proposal-unicode-property-regex-7.10.4.tgz", + "integrity": "sha1-RIPNpTBBzjQTt/4vAAImZd36p10=", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-async-generators/download/@babel/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha1-qYP7Gusuw/btBCohD2QOkOeG/g0=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-class-properties/download/@babel/plugin-syntax-class-properties-7.10.4.tgz?cache=0&sync_timestamp=1593521086484&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-syntax-class-properties%2Fdownload%2F%40babel%2Fplugin-syntax-class-properties-7.10.4.tgz", + "integrity": "sha1-ZkTmoLqlWmH54yMfbJ7rbuRsEkw=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-decorators": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-decorators/download/@babel/plugin-syntax-decorators-7.10.4.tgz?cache=0&sync_timestamp=1593521097781&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-syntax-decorators%2Fdownload%2F%40babel%2Fplugin-syntax-decorators-7.10.4.tgz", + "integrity": "sha1-aFMIWyxCn50yLQL1pjUBjN6yNgw=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-dynamic-import/download/@babel/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha1-Yr+Ysto80h1iYVT8lu5bPLaOrLM=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-export-namespace-from/download/@babel/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha1-AolkqbqA28CUyRXEh618TnpmRlo=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-json-strings/download/@babel/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha1-AcohtmjNghjJ5kDLbdiMVBKyyWo=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-jsx/download/@babel/plugin-syntax-jsx-7.10.4.tgz", + "integrity": "sha1-Oauq48v3EMQ3PYQpSE5rohNAFmw=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-logical-assignment-operators/download/@babel/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha1-ypHvRjA1MESLkGZSusLp/plB9pk=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-nullish-coalescing-operator/download/@babel/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha1-Fn7XA2iIYIH3S1w2xlqIwDtm0ak=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-numeric-separator/download/@babel/plugin-syntax-numeric-separator-7.10.4.tgz?cache=0&sync_timestamp=1593521788128&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-syntax-numeric-separator%2Fdownload%2F%40babel%2Fplugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha1-ubBws+M1cM2f0Hun+pHA3Te5r5c=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-object-rest-spread/download/@babel/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha1-YOIl7cvZimQDMqLnLdPmbxr1WHE=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-optional-catch-binding/download/@babel/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha1-YRGiZbz7Ag6579D9/X0mQCue1sE=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-optional-chaining/download/@babel/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha1-T2nCq5UWfgGAzVM2YT+MV4j31Io=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-top-level-await/download/@babel/plugin-syntax-top-level-await-7.10.4.tgz", + "integrity": "sha1-S764kXtU/PdoNk4KgfVg4zo+9X0=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-arrow-functions/download/@babel/plugin-transform-arrow-functions-7.10.4.tgz?cache=0&sync_timestamp=1593521290488&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-arrow-functions%2Fdownload%2F%40babel%2Fplugin-transform-arrow-functions-7.10.4.tgz", + "integrity": "sha1-4ilg135pfHT0HFAdRNc9v4pqZM0=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-async-to-generator/download/@babel/plugin-transform-async-to-generator-7.10.4.tgz?cache=0&sync_timestamp=1593522968362&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-async-to-generator%2Fdownload%2F%40babel%2Fplugin-transform-async-to-generator-7.10.4.tgz", + "integrity": "sha1-QaUBfknrbzzak5KlHu8pQFskWjc=", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-remap-async-to-generator": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-block-scoped-functions/download/@babel/plugin-transform-block-scoped-functions-7.10.4.tgz?cache=0&sync_timestamp=1593522071341&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-block-scoped-functions%2Fdownload%2F%40babel%2Fplugin-transform-block-scoped-functions-7.10.4.tgz", + "integrity": "sha1-GvpZV0T3XkOpGvc7DZmOz+Trwug=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.11.1", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-block-scoping/download/@babel/plugin-transform-block-scoping-7.11.1.tgz", + "integrity": "sha1-W37+mIUr741lLAsoFEzZOp5LUhU=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-classes/download/@babel/plugin-transform-classes-7.10.4.tgz?cache=0&sync_timestamp=1593522971188&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-classes%2Fdownload%2F%40babel%2Fplugin-transform-classes-7.10.4.tgz", + "integrity": "sha1-QFE2rys+IYvEoZJiKLyRerGgrcc=", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-define-map": "^7.10.4", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4", + "globals": "^11.1.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-computed-properties/download/@babel/plugin-transform-computed-properties-7.10.4.tgz?cache=0&sync_timestamp=1593521290771&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-computed-properties%2Fdownload%2F%40babel%2Fplugin-transform-computed-properties-7.10.4.tgz", + "integrity": "sha1-ne2DqBboLe0o1S1LTsvdgQzfwOs=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-destructuring/download/@babel/plugin-transform-destructuring-7.10.4.tgz?cache=0&sync_timestamp=1593521291443&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-destructuring%2Fdownload%2F%40babel%2Fplugin-transform-destructuring-7.10.4.tgz", + "integrity": "sha1-cN3Ss9G+qD0BUJ6bsl3bOnT8heU=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-dotall-regex/download/@babel/plugin-transform-dotall-regex-7.10.4.tgz?cache=0&sync_timestamp=1593522977820&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-dotall-regex%2Fdownload%2F%40babel%2Fplugin-transform-dotall-regex-7.10.4.tgz", + "integrity": "sha1-RpwgYhBcHragQOr0+sS0iAeDle4=", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-duplicate-keys/download/@babel/plugin-transform-duplicate-keys-7.10.4.tgz?cache=0&sync_timestamp=1593521290312&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-duplicate-keys%2Fdownload%2F%40babel%2Fplugin-transform-duplicate-keys-7.10.4.tgz", + "integrity": "sha1-aX5Qyf7hQ4D+hD0fMGspVhdDHkc=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-exponentiation-operator/download/@babel/plugin-transform-exponentiation-operator-7.10.4.tgz?cache=0&sync_timestamp=1593522967206&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-exponentiation-operator%2Fdownload%2F%40babel%2Fplugin-transform-exponentiation-operator-7.10.4.tgz", + "integrity": "sha1-WuM4xX+M9AAb2zVgeuZrktZlry4=", + "dev": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-for-of/download/@babel/plugin-transform-for-of-7.10.4.tgz?cache=0&sync_timestamp=1593521291715&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-for-of%2Fdownload%2F%40babel%2Fplugin-transform-for-of-7.10.4.tgz", + "integrity": "sha1-wIiS6IGdOl2ykDGxFa9RHbv+uuk=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-function-name/download/@babel/plugin-transform-function-name-7.10.4.tgz?cache=0&sync_timestamp=1593522961117&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-function-name%2Fdownload%2F%40babel%2Fplugin-transform-function-name-7.10.4.tgz", + "integrity": "sha1-akZ4gOD8ljhRS6NpERgR3b4mRLc=", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-literals/download/@babel/plugin-transform-literals-7.10.4.tgz?cache=0&sync_timestamp=1593521291903&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-literals%2Fdownload%2F%40babel%2Fplugin-transform-literals-7.10.4.tgz", + "integrity": "sha1-n0K6CEEQChNfInEtDjkcRi9XHzw=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-member-expression-literals/download/@babel/plugin-transform-member-expression-literals-7.10.4.tgz?cache=0&sync_timestamp=1593521293070&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-member-expression-literals%2Fdownload%2F%40babel%2Fplugin-transform-member-expression-literals-7.10.4.tgz", + "integrity": "sha1-sexE/PGVr8uNssYs2OVRyIG6+Lc=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.10.5", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-modules-amd/download/@babel/plugin-transform-modules-amd-7.10.5.tgz?cache=0&sync_timestamp=1594750712546&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-modules-amd%2Fdownload%2F%40babel%2Fplugin-transform-modules-amd-7.10.5.tgz", + "integrity": "sha1-G5zdrwXZ6Is6rTOcs+RFxPAgqbE=", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.10.5", + "@babel/helper-plugin-utils": "^7.10.4", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-modules-commonjs/download/@babel/plugin-transform-modules-commonjs-7.10.4.tgz?cache=0&sync_timestamp=1593522963909&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-modules-commonjs%2Fdownload%2F%40babel%2Fplugin-transform-modules-commonjs-7.10.4.tgz", + "integrity": "sha1-ZmZ8Pu2h6/eJbUHx8WsXEFovvKA=", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-simple-access": "^7.10.4", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.10.5", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-modules-systemjs/download/@babel/plugin-transform-modules-systemjs-7.10.5.tgz?cache=0&sync_timestamp=1594750707592&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-modules-systemjs%2Fdownload%2F%40babel%2Fplugin-transform-modules-systemjs-7.10.5.tgz", + "integrity": "sha1-YnAJnIVAZmgbrp4F+H4bnK2+jIU=", + "dev": true, + "dependencies": { + "@babel/helper-hoist-variables": "^7.10.4", + "@babel/helper-module-transforms": "^7.10.5", + "@babel/helper-plugin-utils": "^7.10.4", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-modules-umd/download/@babel/plugin-transform-modules-umd-7.10.4.tgz?cache=0&sync_timestamp=1593522964232&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-modules-umd%2Fdownload%2F%40babel%2Fplugin-transform-modules-umd-7.10.4.tgz", + "integrity": "sha1-moSB/oG4JGVLOgtl2j34nz0hg54=", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-named-capturing-groups-regex/download/@babel/plugin-transform-named-capturing-groups-regex-7.10.4.tgz?cache=0&sync_timestamp=1593522978582&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-named-capturing-groups-regex%2Fdownload%2F%40babel%2Fplugin-transform-named-capturing-groups-regex-7.10.4.tgz", + "integrity": "sha1-eLTZeIELbzvPA/njGPL8DtQa7LY=", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-new-target/download/@babel/plugin-transform-new-target-7.10.4.tgz?cache=0&sync_timestamp=1593521292141&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-new-target%2Fdownload%2F%40babel%2Fplugin-transform-new-target-7.10.4.tgz", + "integrity": "sha1-kJfXU8t7Aky3OBo7LlLpUTqcaIg=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-object-super/download/@babel/plugin-transform-object-super-7.10.4.tgz?cache=0&sync_timestamp=1593522965761&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-object-super%2Fdownload%2F%40babel%2Fplugin-transform-object-super-7.10.4.tgz", + "integrity": "sha1-1xRsTROUM+emUm+IjGZ+MUoJOJQ=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.10.5", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-parameters/download/@babel/plugin-transform-parameters-7.10.5.tgz?cache=0&sync_timestamp=1594750687789&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-parameters%2Fdownload%2F%40babel%2Fplugin-transform-parameters-7.10.5.tgz", + "integrity": "sha1-WdM51Y0LGVBDX0BD504lEABeLEo=", + "dev": true, + "dependencies": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-property-literals/download/@babel/plugin-transform-property-literals-7.10.4.tgz?cache=0&sync_timestamp=1593521293406&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-property-literals%2Fdownload%2F%40babel%2Fplugin-transform-property-literals-7.10.4.tgz", + "integrity": "sha1-9v5UtlkDUimHhbg+3YFdIUxC48A=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-regenerator/download/@babel/plugin-transform-regenerator-7.10.4.tgz?cache=0&sync_timestamp=1593521089707&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-regenerator%2Fdownload%2F%40babel%2Fplugin-transform-regenerator-7.10.4.tgz", + "integrity": "sha1-IBXlnYOQdOdoON4hWdtCGWb9i2M=", + "dev": true, + "dependencies": { + "regenerator-transform": "^0.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-reserved-words/download/@babel/plugin-transform-reserved-words-7.10.4.tgz?cache=0&sync_timestamp=1593522978219&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-reserved-words%2Fdownload%2F%40babel%2Fplugin-transform-reserved-words-7.10.4.tgz", + "integrity": "sha1-jyaCvNzvntMn4bCGFYXXAT+KVN0=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.11.5", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-runtime/download/@babel/plugin-transform-runtime-7.11.5.tgz", + "integrity": "sha1-8Qi8jgzzPDfaAxwJfR30cLOik/w=", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "resolve": "^1.8.1", + "semver": "^5.5.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-shorthand-properties/download/@babel/plugin-transform-shorthand-properties-7.10.4.tgz?cache=0&sync_timestamp=1593521293679&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-shorthand-properties%2Fdownload%2F%40babel%2Fplugin-transform-shorthand-properties-7.10.4.tgz", + "integrity": "sha1-n9Jexc3VVbt/Rz5ebuHJce7eTdY=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.11.0", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-spread/download/@babel/plugin-transform-spread-7.11.0.tgz", + "integrity": "sha1-+oTTAPXk9XdS/kGm0bPFVPE/F8w=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-skip-transparent-expression-wrappers": "^7.11.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-sticky-regex/download/@babel/plugin-transform-sticky-regex-7.10.4.tgz?cache=0&sync_timestamp=1593521295131&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-sticky-regex%2Fdownload%2F%40babel%2Fplugin-transform-sticky-regex-7.10.4.tgz", + "integrity": "sha1-jziJ7oZXWBEwop2cyR18c7fEoo0=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-regex": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.10.5", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-template-literals/download/@babel/plugin-transform-template-literals-7.10.5.tgz?cache=0&sync_timestamp=1594750692589&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-template-literals%2Fdownload%2F%40babel%2Fplugin-transform-template-literals-7.10.5.tgz", + "integrity": "sha1-eLxdYmpmQtszEtnQ8AH152Of3ow=", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-typeof-symbol/download/@babel/plugin-transform-typeof-symbol-7.10.4.tgz?cache=0&sync_timestamp=1593522969066&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-typeof-symbol%2Fdownload%2F%40babel%2Fplugin-transform-typeof-symbol-7.10.4.tgz", + "integrity": "sha1-lQnxp+7DHE7b/+E3wWzDP/C8W/w=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-unicode-escapes/download/@babel/plugin-transform-unicode-escapes-7.10.4.tgz?cache=0&sync_timestamp=1593522967875&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-unicode-escapes%2Fdownload%2F%40babel%2Fplugin-transform-unicode-escapes-7.10.4.tgz", + "integrity": "sha1-/q5SM5HHZR3awRXa4KnQaFeJIAc=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-unicode-regex/download/@babel/plugin-transform-unicode-regex-7.10.4.tgz?cache=0&sync_timestamp=1593522975515&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-unicode-regex%2Fdownload%2F%40babel%2Fplugin-transform-unicode-regex-7.10.4.tgz", + "integrity": "sha1-5W1x+SgvrG2wnIJ0IFVXbV5tgKg=", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.11.5", + "resolved": "https://registry.npm.taobao.org/@babel/preset-env/download/@babel/preset-env-7.11.5.tgz", + "integrity": "sha1-GMtLk3nj6S/+qSwHRxqZopFOQnI=", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.11.0", + "@babel/helper-compilation-targets": "^7.10.4", + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-proposal-async-generator-functions": "^7.10.4", + "@babel/plugin-proposal-class-properties": "^7.10.4", + "@babel/plugin-proposal-dynamic-import": "^7.10.4", + "@babel/plugin-proposal-export-namespace-from": "^7.10.4", + "@babel/plugin-proposal-json-strings": "^7.10.4", + "@babel/plugin-proposal-logical-assignment-operators": "^7.11.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.4", + "@babel/plugin-proposal-numeric-separator": "^7.10.4", + "@babel/plugin-proposal-object-rest-spread": "^7.11.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.10.4", + "@babel/plugin-proposal-optional-chaining": "^7.11.0", + "@babel/plugin-proposal-private-methods": "^7.10.4", + "@babel/plugin-proposal-unicode-property-regex": "^7.10.4", + "@babel/plugin-syntax-async-generators": "^7.8.0", + "@babel/plugin-syntax-class-properties": "^7.10.4", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.0", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.0", + "@babel/plugin-syntax-top-level-await": "^7.10.4", + "@babel/plugin-transform-arrow-functions": "^7.10.4", + "@babel/plugin-transform-async-to-generator": "^7.10.4", + "@babel/plugin-transform-block-scoped-functions": "^7.10.4", + "@babel/plugin-transform-block-scoping": "^7.10.4", + "@babel/plugin-transform-classes": "^7.10.4", + "@babel/plugin-transform-computed-properties": "^7.10.4", + "@babel/plugin-transform-destructuring": "^7.10.4", + "@babel/plugin-transform-dotall-regex": "^7.10.4", + "@babel/plugin-transform-duplicate-keys": "^7.10.4", + "@babel/plugin-transform-exponentiation-operator": "^7.10.4", + "@babel/plugin-transform-for-of": "^7.10.4", + "@babel/plugin-transform-function-name": "^7.10.4", + "@babel/plugin-transform-literals": "^7.10.4", + "@babel/plugin-transform-member-expression-literals": "^7.10.4", + "@babel/plugin-transform-modules-amd": "^7.10.4", + "@babel/plugin-transform-modules-commonjs": "^7.10.4", + "@babel/plugin-transform-modules-systemjs": "^7.10.4", + "@babel/plugin-transform-modules-umd": "^7.10.4", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.10.4", + "@babel/plugin-transform-new-target": "^7.10.4", + "@babel/plugin-transform-object-super": "^7.10.4", + "@babel/plugin-transform-parameters": "^7.10.4", + "@babel/plugin-transform-property-literals": "^7.10.4", + "@babel/plugin-transform-regenerator": "^7.10.4", + "@babel/plugin-transform-reserved-words": "^7.10.4", + "@babel/plugin-transform-shorthand-properties": "^7.10.4", + "@babel/plugin-transform-spread": "^7.11.0", + "@babel/plugin-transform-sticky-regex": "^7.10.4", + "@babel/plugin-transform-template-literals": "^7.10.4", + "@babel/plugin-transform-typeof-symbol": "^7.10.4", + "@babel/plugin-transform-unicode-escapes": "^7.10.4", + "@babel/plugin-transform-unicode-regex": "^7.10.4", + "@babel/preset-modules": "^0.1.3", + "@babel/types": "^7.11.5", + "browserslist": "^4.12.0", + "core-js-compat": "^3.6.2", + "invariant": "^2.2.2", + "levenary": "^1.1.1", + "semver": "^5.5.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.4", + "resolved": "https://registry.npm.taobao.org/@babel/preset-modules/download/@babel/preset-modules-0.1.4.tgz?cache=0&sync_timestamp=1598549925898&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fpreset-modules%2Fdownload%2F%40babel%2Fpreset-modules-0.1.4.tgz", + "integrity": "sha1-Ni8raMZihClw/bXiVP/I/BwuQV4=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.11.2", + "resolved": "https://registry.npm.taobao.org/@babel/runtime/download/@babel/runtime-7.11.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fruntime%2Fdownload%2F%40babel%2Fruntime-7.11.2.tgz", + "integrity": "sha1-9UnBPHVMxAuHZEufqfCaapX+BzY=", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.13.4" + } + }, + "node_modules/@babel/runtime-corejs2": { + "version": "7.11.2", + "resolved": "https://registry.npm.taobao.org/@babel/runtime-corejs2/download/@babel/runtime-corejs2-7.11.2.tgz?cache=0&sync_timestamp=1596637846605&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fruntime-corejs2%2Fdownload%2F%40babel%2Fruntime-corejs2-7.11.2.tgz", + "integrity": "sha1-cAoDlF660NMbpmkPyKa8yQQPqkc=", + "dev": true, + "dependencies": { + "core-js": "^2.6.5", + "regenerator-runtime": "^0.13.4" + } + }, + "node_modules/@babel/runtime-corejs2/node_modules/core-js": { + "version": "2.6.11", + "resolved": "https://registry.npm.taobao.org/core-js/download/core-js-2.6.11.tgz?cache=0&sync_timestamp=1586450269267&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcore-js%2Fdownload%2Fcore-js-2.6.11.tgz", + "integrity": "sha1-OIMUafmSK97Y7iHJ3EaYXgOZMIw=", + "deprecated": "core-js@<3.4 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js.", + "dev": true, + "hasInstallScript": true + }, + "node_modules/@babel/template": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/template/download/@babel/template-7.10.4.tgz", + "integrity": "sha1-MlGZbEIA68cdGo/EBfupQPNrong=", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "node_modules/@babel/traverse": { + "version": "7.11.5", + "resolved": "https://registry.npm.taobao.org/@babel/traverse/download/@babel/traverse-7.11.5.tgz", + "integrity": "sha1-vnd7k7UY62127i4eodFD2qEeYcM=", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.11.5", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/parser": "^7.11.5", + "@babel/types": "^7.11.5", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" + } + }, + "node_modules/@babel/types": { + "version": "7.11.5", + "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.11.5.tgz?cache=0&sync_timestamp=1598904531412&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftypes%2Fdownload%2F%40babel%2Ftypes-7.11.5.tgz", + "integrity": "sha1-2d5XfQElLXfGgAzuA57mT691Zi0=", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "node_modules/@hapi/address": { + "version": "2.1.4", + "resolved": "https://registry.npm.taobao.org/@hapi/address/download/@hapi/address-2.1.4.tgz?cache=0&sync_timestamp=1593993895205&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40hapi%2Faddress%2Fdownload%2F%40hapi%2Faddress-2.1.4.tgz", + "integrity": "sha1-XWftQ/P9QaadS5/3tW58DR0KgeU=", + "deprecated": "Moved to 'npm install @sideway/address'", + "dev": true + }, + "node_modules/@hapi/bourne": { + "version": "1.3.2", + "resolved": "https://registry.npm.taobao.org/@hapi/bourne/download/@hapi/bourne-1.3.2.tgz?cache=0&sync_timestamp=1593915150444&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40hapi%2Fbourne%2Fdownload%2F%40hapi%2Fbourne-1.3.2.tgz", + "integrity": "sha1-CnCVreoGckPOMoPhtWuKj0U7JCo=", + "deprecated": "This version has been deprecated and is no longer supported or maintained", + "dev": true + }, + "node_modules/@hapi/hoek": { + "version": "8.5.1", + "resolved": "https://registry.npm.taobao.org/@hapi/hoek/download/@hapi/hoek-8.5.1.tgz?cache=0&sync_timestamp=1599008894201&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40hapi%2Fhoek%2Fdownload%2F%40hapi%2Fhoek-8.5.1.tgz", + "integrity": "sha1-/elgZMpEbeyMVajC8TCVewcMbgY=", + "deprecated": "This version has been deprecated and is no longer supported or maintained", + "dev": true + }, + "node_modules/@hapi/joi": { + "version": "15.1.1", + "resolved": "https://registry.npm.taobao.org/@hapi/joi/download/@hapi/joi-15.1.1.tgz", + "integrity": "sha1-xnW4pxKW8Cgz+NbSQ7NMV7jOGdc=", + "deprecated": "Switch to 'npm install joi'", + "dev": true, + "dependencies": { + "@hapi/address": "2.x.x", + "@hapi/bourne": "1.x.x", + "@hapi/hoek": "8.x.x", + "@hapi/topo": "3.x.x" + } + }, + "node_modules/@hapi/topo": { + "version": "3.1.6", + "resolved": "https://registry.npm.taobao.org/@hapi/topo/download/@hapi/topo-3.1.6.tgz?cache=0&sync_timestamp=1593916080558&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40hapi%2Ftopo%2Fdownload%2F%40hapi%2Ftopo-3.1.6.tgz", + "integrity": "sha1-aNk1+j6uf91asNf5U/MgXYsr/Ck=", + "deprecated": "This version has been deprecated and is no longer supported or maintained", + "dev": true, + "dependencies": { + "@hapi/hoek": "^8.3.0" + } + }, + "node_modules/@interactjs/types": { + "version": "1.10.11", + "resolved": "https://registry.npmjs.org/@interactjs/types/-/types-1.10.11.tgz", + "integrity": "sha512-YRsVFWjL8Gkkvlx3qnjeaxW4fnibSJ9791g8BA7Pv5ANByI64WmtR1vU7A2rXcrOn8XvyCEfY0ss1s8NhZP+MA==" + }, + "node_modules/@intervolga/optimize-cssnano-plugin": { + "version": "1.0.6", + "resolved": "https://registry.npm.taobao.org/@intervolga/optimize-cssnano-plugin/download/@intervolga/optimize-cssnano-plugin-1.0.6.tgz", + "integrity": "sha1-vnx4RhKLiPapsdEmGgrQbrXA/fg=", + "dev": true, + "dependencies": { + "cssnano": "^4.0.0", + "cssnano-preset-default": "^4.0.0", + "postcss": "^7.0.0" + }, + "peerDependencies": { + "webpack": "^4.0.0" + } + }, + "node_modules/@mrmlnc/readdir-enhanced": { + "version": "2.2.1", + "resolved": "https://registry.npm.taobao.org/@mrmlnc/readdir-enhanced/download/@mrmlnc/readdir-enhanced-2.2.1.tgz", + "integrity": "sha1-UkryQNGjYFJ7cwR17PoTRKpUDd4=", + "dev": true, + "dependencies": { + "call-me-maybe": "^1.0.1", + "glob-to-regexp": "^0.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.3", + "resolved": "https://registry.npm.taobao.org/@nodelib/fs.scandir/download/@nodelib/fs.scandir-2.1.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40nodelib%2Ffs.scandir%2Fdownload%2F%40nodelib%2Ffs.scandir-2.1.3.tgz", + "integrity": "sha1-Olgr21OATGum0UZXnEblITDPSjs=", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.3", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.scandir/node_modules/@nodelib/fs.stat": { + "version": "2.0.3", + "resolved": "https://registry.npm.taobao.org/@nodelib/fs.stat/download/@nodelib/fs.stat-2.0.3.tgz", + "integrity": "sha1-NNxfTKu8cg9OYPdadH5+zWwXW9M=", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "1.1.3", + "resolved": "https://registry.npm.taobao.org/@nodelib/fs.stat/download/@nodelib/fs.stat-1.1.3.tgz", + "integrity": "sha1-K1o6s/kYzKSKjHVMCBaOPwPrphs=", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.4", + "resolved": "https://registry.npm.taobao.org/@nodelib/fs.walk/download/@nodelib/fs.walk-1.2.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40nodelib%2Ffs.walk%2Fdownload%2F%40nodelib%2Ffs.walk-1.2.4.tgz", + "integrity": "sha1-ARuSAqcKY2bkNspcBlhEUoqwSXY=", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.3", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@soda/friendly-errors-webpack-plugin": { + "version": "1.7.1", + "resolved": "https://registry.npm.taobao.org/@soda/friendly-errors-webpack-plugin/download/@soda/friendly-errors-webpack-plugin-1.7.1.tgz", + "integrity": "sha1-cG9kvLSouWQrSK46zkRMcDNNYV0=", + "dev": true, + "dependencies": { + "chalk": "^1.1.3", + "error-stack-parser": "^2.0.0", + "string-width": "^2.0.0" + }, + "peerDependencies": { + "webpack": "^2.0.0 || ^3.0.0 || ^4.0.0" + } + }, + "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz?cache=0&sync_timestamp=1570188663907&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz?cache=0&sync_timestamp=1591687070184&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchalk%2Fdownload%2Fchalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-2.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring-width%2Fdownload%2Fstring-width-2.1.1.tgz", + "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=", + "dev": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/string-width/node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz?cache=0&sync_timestamp=1570188663907&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/string-width/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611709087&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@soda/get-current-script": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/@soda/get-current-script/download/@soda/get-current-script-1.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40soda%2Fget-current-script%2Fdownload%2F%40soda%2Fget-current-script-1.0.2.tgz", + "integrity": "sha1-pTUV2yXYA4N0OBtzryC7Ty5QjYc=", + "dev": true + }, + "node_modules/@tweenjs/tween.js": { + "version": "18.6.4", + "resolved": "https://registry.npmjs.org/@tweenjs/tween.js/-/tween.js-18.6.4.tgz", + "integrity": "sha512-lB9lMjuqjtuJrx7/kOkqQBtllspPIN+96OvTCeJ2j5FEzinoAXTdAMFnDAQT1KVPRlnYfBrqxtqP66vDM40xxQ==" + }, + "node_modules/@types/anymatch": { + "version": "1.3.1", + "resolved": "https://registry.npm.taobao.org/@types/anymatch/download/@types/anymatch-1.3.1.tgz", + "integrity": "sha1-M2utwb7sudrMOL6izzKt9ieoQho=", + "dev": true + }, + "node_modules/@types/body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npm.taobao.org/@types/body-parser/download/@types/body-parser-1.19.0.tgz", + "integrity": "sha1-BoWzxH6zAG/+0RfN1VFkth+AU48=", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/@types/color-name/download/@types/color-name-1.1.1.tgz", + "integrity": "sha1-HBJhu+qhCoBVu8XYq4S3sq/IRqA=", + "dev": true + }, + "node_modules/@types/connect": { + "version": "3.4.33", + "resolved": "https://registry.npm.taobao.org/@types/connect/download/@types/connect-3.4.33.tgz?cache=0&sync_timestamp=1596837850490&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fconnect%2Fdownload%2F%40types%2Fconnect-3.4.33.tgz", + "integrity": "sha1-MWEMkB7KVzuHE8MzCrxua59YhUY=", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.3.3", + "resolved": "https://registry.npm.taobao.org/@types/connect-history-api-fallback/download/@types/connect-history-api-fallback-1.3.3.tgz", + "integrity": "sha1-R3K3m4tTGF8PTJ3qsJI2uvdu47Q=", + "dev": true, + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/express": { + "version": "4.17.8", + "resolved": "https://registry.npm.taobao.org/@types/express/download/@types/express-4.17.8.tgz?cache=0&sync_timestamp=1598966318122&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fexpress%2Fdownload%2F%40types%2Fexpress-4.17.8.tgz", + "integrity": "sha1-PfQpMpMxfmHGATfSc6LpbNjV8no=", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "*", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.12", + "resolved": "https://registry.npm.taobao.org/@types/express-serve-static-core/download/@types/express-serve-static-core-4.17.12.tgz?cache=0&sync_timestamp=1598975574373&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fexpress-serve-static-core%2Fdownload%2F%40types%2Fexpress-serve-static-core-4.17.12.tgz", + "integrity": "sha1-mkh9p1dCXk8mfn0cVyAiavf4lZE=", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "node_modules/@types/glob": { + "version": "7.1.3", + "resolved": "https://registry.npm.taobao.org/@types/glob/download/@types/glob-7.1.3.tgz?cache=0&sync_timestamp=1596838206290&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fglob%2Fdownload%2F%40types%2Fglob-7.1.3.tgz", + "integrity": "sha1-5rqA82t9qtLGhazZJmOC5omFwYM=", + "dev": true, + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/@types/http-proxy": { + "version": "1.17.4", + "resolved": "https://registry.npm.taobao.org/@types/http-proxy/download/@types/http-proxy-1.17.4.tgz?cache=0&sync_timestamp=1596839386031&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fhttp-proxy%2Fdownload%2F%40types%2Fhttp-proxy-1.17.4.tgz", + "integrity": "sha1-58kuPb4+E6p5lED/QubToXqdBFs=", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/http-proxy-middleware": { + "version": "0.19.3", + "resolved": "https://registry.npm.taobao.org/@types/http-proxy-middleware/download/@types/http-proxy-middleware-0.19.3.tgz?cache=0&sync_timestamp=1596839386511&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fhttp-proxy-middleware%2Fdownload%2F%40types%2Fhttp-proxy-middleware-0.19.3.tgz", + "integrity": "sha1-suuW+8D5rHJQtdnExTqt4ElJfQM=", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/http-proxy": "*", + "@types/node": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.6", + "resolved": "https://registry.npm.taobao.org/@types/json-schema/download/@types/json-schema-7.0.6.tgz?cache=0&sync_timestamp=1598910403749&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fjson-schema%2Fdownload%2F%40types%2Fjson-schema-7.0.6.tgz", + "integrity": "sha1-9MfsQ+gbMZqYFRFQMXCfJph4kfA=", + "dev": true + }, + "node_modules/@types/mime": { + "version": "2.0.3", + "resolved": "https://registry.npm.taobao.org/@types/mime/download/@types/mime-2.0.3.tgz", + "integrity": "sha1-yJO3NyHbc2mZQ7/DZTsd63+qSjo=", + "dev": true + }, + "node_modules/@types/minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npm.taobao.org/@types/minimatch/download/@types/minimatch-3.0.3.tgz?cache=0&sync_timestamp=1596839141589&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fminimatch%2Fdownload%2F%40types%2Fminimatch-3.0.3.tgz", + "integrity": "sha1-PcoOPzOyAPx9ETnAzZbBJoyt/Z0=", + "dev": true + }, + "node_modules/@types/minimist": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/@types/minimist/download/@types/minimist-1.2.0.tgz", + "integrity": "sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY=", + "dev": true + }, + "node_modules/@types/node": { + "version": "14.6.4", + "resolved": "https://registry.npm.taobao.org/@types/node/download/@types/node-14.6.4.tgz?cache=0&sync_timestamp=1599568905640&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-14.6.4.tgz", + "integrity": "sha1-oUXMC7FO+cR3c2G3u6+lz446y1o=", + "dev": true + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npm.taobao.org/@types/normalize-package-data/download/@types/normalize-package-data-2.4.0.tgz?cache=0&sync_timestamp=1596839391651&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnormalize-package-data%2Fdownload%2F%40types%2Fnormalize-package-data-2.4.0.tgz", + "integrity": "sha1-5IbQ2XOW15vu3QpuM/RTT/a0lz4=", + "dev": true + }, + "node_modules/@types/q": { + "version": "1.5.4", + "resolved": "https://registry.npm.taobao.org/@types/q/download/@types/q-1.5.4.tgz", + "integrity": "sha1-FZJUFOCtLNdlv+9YhC9+JqesyyQ=", + "dev": true + }, + "node_modules/@types/qs": { + "version": "6.9.4", + "resolved": "https://registry.npm.taobao.org/@types/qs/download/@types/qs-6.9.4.tgz", + "integrity": "sha1-pZ6FHBuhbAUT6hI4MN1jmgoVy2o=", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.3", + "resolved": "https://registry.npm.taobao.org/@types/range-parser/download/@types/range-parser-1.2.3.tgz", + "integrity": "sha1-fuMwunyq+5gJC+zoal7kQRWQTCw=", + "dev": true + }, + "node_modules/@types/serve-static": { + "version": "1.13.5", + "resolved": "https://registry.npm.taobao.org/@types/serve-static/download/@types/serve-static-1.13.5.tgz?cache=0&sync_timestamp=1596840339942&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fserve-static%2Fdownload%2F%40types%2Fserve-static-1.13.5.tgz", + "integrity": "sha1-PSXZQaGEFdOrCS3vhG4TWgi7z1M=", + "dev": true, + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/mime": "*" + } + }, + "node_modules/@types/source-list-map": { + "version": "0.1.2", + "resolved": "https://registry.npm.taobao.org/@types/source-list-map/download/@types/source-list-map-0.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fsource-list-map%2Fdownload%2F%40types%2Fsource-list-map-0.1.2.tgz", + "integrity": "sha1-AHiDYGP/rxdBI0m7o2QIfgrALsk=", + "dev": true + }, + "node_modules/@types/tapable": { + "version": "1.0.6", + "resolved": "https://registry.npm.taobao.org/@types/tapable/download/@types/tapable-1.0.6.tgz", + "integrity": "sha1-qcpLcKGLJwzLK8Cqr+/R1Ia36nQ=", + "dev": true + }, + "node_modules/@types/uglify-js": { + "version": "3.9.3", + "resolved": "https://registry.npm.taobao.org/@types/uglify-js/download/@types/uglify-js-3.9.3.tgz?cache=0&sync_timestamp=1596841575547&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fuglify-js%2Fdownload%2F%40types%2Fuglify-js-3.9.3.tgz", + "integrity": "sha1-2U7WCOKVvFQkyWAOa4VlQHtrS2s=", + "dev": true, + "dependencies": { + "source-map": "^0.6.1" + } + }, + "node_modules/@types/uglify-js/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@types/webpack": { + "version": "4.41.22", + "resolved": "https://registry.npm.taobao.org/@types/webpack/download/@types/webpack-4.41.22.tgz", + "integrity": "sha1-/5dYoXxr1JnkWbkeeFOYSMMtBzE=", + "dev": true, + "dependencies": { + "@types/anymatch": "*", + "@types/node": "*", + "@types/tapable": "*", + "@types/uglify-js": "*", + "@types/webpack-sources": "*", + "source-map": "^0.6.0" + } + }, + "node_modules/@types/webpack-dev-server": { + "version": "3.11.0", + "resolved": "https://registry.npm.taobao.org/@types/webpack-dev-server/download/@types/webpack-dev-server-3.11.0.tgz?cache=0&sync_timestamp=1596841577349&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fwebpack-dev-server%2Fdownload%2F%40types%2Fwebpack-dev-server-3.11.0.tgz", + "integrity": "sha1-vMO4Xn3GrC2yUzBhBRPyIowvz7I=", + "dev": true, + "dependencies": { + "@types/connect-history-api-fallback": "*", + "@types/express": "*", + "@types/http-proxy-middleware": "*", + "@types/serve-static": "*", + "@types/webpack": "*" + } + }, + "node_modules/@types/webpack-sources": { + "version": "1.4.2", + "resolved": "https://registry.npm.taobao.org/@types/webpack-sources/download/@types/webpack-sources-1.4.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fwebpack-sources%2Fdownload%2F%40types%2Fwebpack-sources-1.4.2.tgz", + "integrity": "sha1-XT1N6gQAineakBNf+W+1wMnmKSw=", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/source-list-map": "*", + "source-map": "^0.7.3" + } + }, + "node_modules/@types/webpack-sources/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.7.3.tgz", + "integrity": "sha1-UwL4FpAxc1ImVECS5kmB91F1A4M=", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@types/webpack/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@vue/babel-helper-vue-jsx-merge-props": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/@vue/babel-helper-vue-jsx-merge-props/download/@vue/babel-helper-vue-jsx-merge-props-1.0.0.tgz", + "integrity": "sha1-BI/leZWNpAj7eosqPsBQtQpmEEA=", + "dev": true + }, + "node_modules/@vue/babel-plugin-transform-vue-jsx": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/@vue/babel-plugin-transform-vue-jsx/download/@vue/babel-plugin-transform-vue-jsx-1.1.2.tgz", + "integrity": "sha1-wKPm78Ai515CR7RIqPxrhvA+kcA=", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-helper-vue-jsx-merge-props": "^1.0.0", + "html-tags": "^2.0.0", + "lodash.kebabcase": "^4.1.1", + "svg-tags": "^1.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-plugin-transform-vue-jsx/node_modules/html-tags": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/html-tags/download/html-tags-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhtml-tags%2Fdownload%2Fhtml-tags-2.0.0.tgz", + "integrity": "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@vue/babel-preset-app": { + "version": "4.5.4", + "resolved": "https://registry.npm.taobao.org/@vue/babel-preset-app/download/@vue/babel-preset-app-4.5.4.tgz", + "integrity": "sha1-uxZOirVWc8Vh5ug1EWMe2hnv1+Q=", + "dev": true, + "dependencies": { + "@ant-design-vue/babel-plugin-jsx": "^1.0.0-0", + "@babel/core": "^7.11.0", + "@babel/helper-compilation-targets": "^7.9.6", + "@babel/helper-module-imports": "^7.8.3", + "@babel/plugin-proposal-class-properties": "^7.8.3", + "@babel/plugin-proposal-decorators": "^7.8.3", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-jsx": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.11.0", + "@babel/preset-env": "^7.11.0", + "@babel/runtime": "^7.11.0", + "@vue/babel-preset-jsx": "^1.1.2", + "babel-plugin-dynamic-import-node": "^2.3.3", + "core-js": "^3.6.5", + "core-js-compat": "^3.6.5", + "semver": "^6.1.0" + }, + "peerDependencies": { + "@babel/core": "*", + "core-js": "^3", + "vue": "^2 || ^3.0.0-0" + }, + "peerDependenciesMeta": { + "core-js": { + "optional": true + }, + "vue": { + "optional": true + } + } + }, + "node_modules/@vue/babel-preset-app/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz", + "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@vue/babel-preset-jsx": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/@vue/babel-preset-jsx/download/@vue/babel-preset-jsx-1.1.2.tgz?cache=0&sync_timestamp=1573270721644&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fbabel-preset-jsx%2Fdownload%2F%40vue%2Fbabel-preset-jsx-1.1.2.tgz", + "integrity": "sha1-LhaetMIE6jfKZsLqhaiAv8mdTyA=", + "dev": true, + "dependencies": { + "@vue/babel-helper-vue-jsx-merge-props": "^1.0.0", + "@vue/babel-plugin-transform-vue-jsx": "^1.1.2", + "@vue/babel-sugar-functional-vue": "^1.1.2", + "@vue/babel-sugar-inject-h": "^1.1.2", + "@vue/babel-sugar-v-model": "^1.1.2", + "@vue/babel-sugar-v-on": "^1.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-sugar-functional-vue": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/@vue/babel-sugar-functional-vue/download/@vue/babel-sugar-functional-vue-1.1.2.tgz", + "integrity": "sha1-9+JPugnm8e5wEEVgqICAV1VfGpo=", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-jsx": "^7.2.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-sugar-inject-h": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/@vue/babel-sugar-inject-h/download/@vue/babel-sugar-inject-h-1.1.2.tgz", + "integrity": "sha1-ilJ2ttji7Rb/yAeKrZQjYnTm7fA=", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-jsx": "^7.2.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-sugar-v-model": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/@vue/babel-sugar-v-model/download/@vue/babel-sugar-v-model-1.1.2.tgz", + "integrity": "sha1-H/b9G4ACI/ycsehNzrXlLXN6gZI=", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-helper-vue-jsx-merge-props": "^1.0.0", + "@vue/babel-plugin-transform-vue-jsx": "^1.1.2", + "camelcase": "^5.0.0", + "html-tags": "^2.0.0", + "svg-tags": "^1.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-sugar-v-model/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz", + "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@vue/babel-sugar-v-model/node_modules/html-tags": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/html-tags/download/html-tags-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhtml-tags%2Fdownload%2Fhtml-tags-2.0.0.tgz", + "integrity": "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@vue/babel-sugar-v-on": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/@vue/babel-sugar-v-on/download/@vue/babel-sugar-v-on-1.1.2.tgz?cache=0&sync_timestamp=1573270721318&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fbabel-sugar-v-on%2Fdownload%2F%40vue%2Fbabel-sugar-v-on-1.1.2.tgz", + "integrity": "sha1-su+ZuPL6sJ++rSWq1w70Lhz1sTs=", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-plugin-transform-vue-jsx": "^1.1.2", + "camelcase": "^5.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-sugar-v-on/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz", + "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@vue/cli-overlay": { + "version": "4.5.4", + "resolved": "https://registry.npm.taobao.org/@vue/cli-overlay/download/@vue/cli-overlay-4.5.4.tgz?cache=0&sync_timestamp=1597717221287&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fcli-overlay%2Fdownload%2F%40vue%2Fcli-overlay-4.5.4.tgz", + "integrity": "sha1-4H48zC5Ndw1P29Rc3ed31ZKCLBk=", + "dev": true + }, + "node_modules/@vue/cli-plugin-babel": { + "version": "4.5.4", + "resolved": "https://registry.npm.taobao.org/@vue/cli-plugin-babel/download/@vue/cli-plugin-babel-4.5.4.tgz", + "integrity": "sha1-oBzcs9RgZGdd2I1htkCtrcyFHis=", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.0", + "@vue/babel-preset-app": "^4.5.4", + "@vue/cli-shared-utils": "^4.5.4", + "babel-loader": "^8.1.0", + "cache-loader": "^4.1.0", + "thread-loader": "^2.1.3", + "webpack": "^4.0.0" + }, + "peerDependencies": { + "@vue/cli-service": "^3.0.0 || ^4.0.0-0" + } + }, + "node_modules/@vue/cli-plugin-eslint": { + "version": "4.5.4", + "resolved": "https://registry.npm.taobao.org/@vue/cli-plugin-eslint/download/@vue/cli-plugin-eslint-4.5.4.tgz", + "integrity": "sha1-Dx8wer/h5K1n3Ll2k2QJQrFfrnY=", + "dev": true, + "dependencies": { + "@vue/cli-shared-utils": "^4.5.4", + "eslint-loader": "^2.2.1", + "globby": "^9.2.0", + "inquirer": "^7.1.0", + "webpack": "^4.0.0", + "yorkie": "^2.0.0" + }, + "peerDependencies": { + "@vue/cli-service": "^3.0.0 || ^4.0.0-0", + "eslint": ">= 1.6.0" + } + }, + "node_modules/@vue/cli-plugin-router": { + "version": "4.5.4", + "resolved": "https://registry.npm.taobao.org/@vue/cli-plugin-router/download/@vue/cli-plugin-router-4.5.4.tgz", + "integrity": "sha1-BvIkCMftas7dv3MCy0eik7evQ0c=", + "dev": true, + "dependencies": { + "@vue/cli-shared-utils": "^4.5.4" + }, + "peerDependencies": { + "@vue/cli-service": "^3.0.0 || ^4.0.0-0" + } + }, + "node_modules/@vue/cli-plugin-unit-mocha": { + "version": "4.5.4", + "resolved": "https://registry.npm.taobao.org/@vue/cli-plugin-unit-mocha/download/@vue/cli-plugin-unit-mocha-4.5.4.tgz?cache=0&sync_timestamp=1597717304205&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fcli-plugin-unit-mocha%2Fdownload%2F%40vue%2Fcli-plugin-unit-mocha-4.5.4.tgz", + "integrity": "sha1-EazDx9SW/Y43T2CASewRyq/0Q/M=", + "dev": true, + "dependencies": { + "@vue/cli-shared-utils": "^4.5.4", + "jsdom": "^15.2.1", + "jsdom-global": "^3.0.2", + "mocha": "^6.2.2", + "mochapack": "^1.1.15" + }, + "peerDependencies": { + "@vue/cli-service": "^3.0.0 || ^4.0.0-0" + } + }, + "node_modules/@vue/cli-plugin-vuex": { + "version": "4.5.4", + "resolved": "https://registry.npm.taobao.org/@vue/cli-plugin-vuex/download/@vue/cli-plugin-vuex-4.5.4.tgz", + "integrity": "sha1-YpbjBziPYRMhF+CsAxiAE2UrDFU=", + "dev": true, + "peerDependencies": { + "@vue/cli-service": "^3.0.0 || ^4.0.0-0" + } + }, + "node_modules/@vue/cli-service": { + "version": "4.5.4", + "resolved": "https://registry.npm.taobao.org/@vue/cli-service/download/@vue/cli-service-4.5.4.tgz?cache=0&sync_timestamp=1597717222018&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fcli-service%2Fdownload%2F%40vue%2Fcli-service-4.5.4.tgz", + "integrity": "sha1-+QPt9VXRB0BGJN4v7VmW2oztxSQ=", + "dev": true, + "dependencies": { + "@intervolga/optimize-cssnano-plugin": "^1.0.5", + "@soda/friendly-errors-webpack-plugin": "^1.7.1", + "@soda/get-current-script": "^1.0.0", + "@types/minimist": "^1.2.0", + "@types/webpack": "^4.0.0", + "@types/webpack-dev-server": "^3.11.0", + "@vue/cli-overlay": "^4.5.4", + "@vue/cli-plugin-router": "^4.5.4", + "@vue/cli-plugin-vuex": "^4.5.4", + "@vue/cli-shared-utils": "^4.5.4", + "@vue/component-compiler-utils": "^3.1.2", + "@vue/preload-webpack-plugin": "^1.1.0", + "@vue/web-component-wrapper": "^1.2.0", + "acorn": "^7.4.0", + "acorn-walk": "^7.1.1", + "address": "^1.1.2", + "autoprefixer": "^9.8.6", + "browserslist": "^4.12.0", + "cache-loader": "^4.1.0", + "case-sensitive-paths-webpack-plugin": "^2.3.0", + "cli-highlight": "^2.1.4", + "clipboardy": "^2.3.0", + "cliui": "^6.0.0", + "copy-webpack-plugin": "^5.1.1", + "css-loader": "^3.5.3", + "cssnano": "^4.1.10", + "debug": "^4.1.1", + "default-gateway": "^5.0.5", + "dotenv": "^8.2.0", + "dotenv-expand": "^5.1.0", + "file-loader": "^4.2.0", + "fs-extra": "^7.0.1", + "globby": "^9.2.0", + "hash-sum": "^2.0.0", + "html-webpack-plugin": "^3.2.0", + "launch-editor-middleware": "^2.2.1", + "lodash.defaultsdeep": "^4.6.1", + "lodash.mapvalues": "^4.6.0", + "lodash.transform": "^4.6.0", + "mini-css-extract-plugin": "^0.9.0", + "minimist": "^1.2.5", + "pnp-webpack-plugin": "^1.6.4", + "portfinder": "^1.0.26", + "postcss-loader": "^3.0.0", + "ssri": "^7.1.0", + "terser-webpack-plugin": "^2.3.6", + "thread-loader": "^2.1.3", + "url-loader": "^2.2.0", + "vue-loader": "^15.9.2", + "vue-style-loader": "^4.1.2", + "webpack": "^4.0.0", + "webpack-bundle-analyzer": "^3.8.0", + "webpack-chain": "^6.4.0", + "webpack-dev-server": "^3.11.0", + "webpack-merge": "^4.2.2" + }, + "bin": { + "vue-cli-service": "bin/vue-cli-service.js" + }, + "engines": { + "node": ">=8" + }, + "optionalDependencies": { + "vue-loader-v16": "npm:vue-loader@^16.0.0-beta.3" + }, + "peerDependencies": { + "@vue/compiler-sfc": "^3.0.0-beta.14", + "vue-template-compiler": "^2.0.0" + }, + "peerDependenciesMeta": { + "@vue/compiler-sfc": { + "optional": true + }, + "less-loader": { + "optional": true + }, + "pug-plain-loader": { + "optional": true + }, + "raw-loader": { + "optional": true + }, + "sass-loader": { + "optional": true + }, + "stylus-loader": { + "optional": true + }, + "vue-template-compiler": { + "optional": true + } + } + }, + "node_modules/@vue/cli-service/node_modules/acorn": { + "version": "7.4.0", + "resolved": "https://registry.npm.taobao.org/acorn/download/acorn-7.4.0.tgz?cache=0&sync_timestamp=1597235774928&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn%2Fdownload%2Facorn-7.4.0.tgz", + "integrity": "sha1-4a1IbmxUUBY0xsOXxcEh2qODYHw=", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/@vue/cli-service/node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npm.taobao.org/acorn-walk/download/acorn-walk-7.2.0.tgz?cache=0&sync_timestamp=1597235855275&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn-walk%2Fdownload%2Facorn-walk-7.2.0.tgz", + "integrity": "sha1-DeiJpgEgOQmw++B7iTjcIdLpZ7w=", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/@vue/cli-service/node_modules/ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-4.2.1.tgz", + "integrity": "sha1-kK51xCTQCNJiTFvynq0xd+v881k=", + "dev": true, + "dependencies": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@vue/cli-service/node_modules/cacache": { + "version": "13.0.1", + "resolved": "https://registry.npm.taobao.org/cacache/download/cacache-13.0.1.tgz?cache=0&sync_timestamp=1594429684526&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcacache%2Fdownload%2Fcacache-13.0.1.tgz", + "integrity": "sha1-qAAMIWlwiQgvhSh6GuxuOCAkpxw=", + "dev": true, + "dependencies": { + "chownr": "^1.1.2", + "figgy-pudding": "^3.5.1", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.2", + "infer-owner": "^1.0.4", + "lru-cache": "^5.1.1", + "minipass": "^3.0.0", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "p-map": "^3.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^2.7.1", + "ssri": "^7.0.0", + "unique-filename": "^1.1.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@vue/cli-service/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npm.taobao.org/cliui/download/cliui-6.0.0.tgz?cache=0&sync_timestamp=1597608006561&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcliui%2Fdownload%2Fcliui-6.0.0.tgz", + "integrity": "sha1-UR1wLAxOQcoVbX0OlgIfI+EyJbE=", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/@vue/cli-service/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz?cache=0&sync_timestamp=1566248870121&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcolor-convert%2Fdownload%2Fcolor-convert-2.0.1.tgz", + "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@vue/cli-service/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz", + "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", + "dev": true + }, + "node_modules/@vue/cli-service/node_modules/find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-3.3.1.tgz", + "integrity": "sha1-ibM/rUpGcNqpT4Vff74x1thP6IA=", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/@vue/cli-service/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-4.1.0.tgz?cache=0&sync_timestamp=1597169842138&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-up%2Fdownload%2Ffind-up-4.1.0.tgz", + "integrity": "sha1-l6/n1s3AvFkoWEt8jXsW6KmqXRk=", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@vue/cli-service/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npm.taobao.org/locate-path/download/locate-path-5.0.0.tgz", + "integrity": "sha1-Gvujlq/WdqbUJQTQpno6frn2KqA=", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@vue/cli-service/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/make-dir/download/make-dir-3.1.0.tgz?cache=0&sync_timestamp=1587567572251&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmake-dir%2Fdownload%2Fmake-dir-3.1.0.tgz", + "integrity": "sha1-QV6WcEazp/HRhSd9hKpYIDcmoT8=", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@vue/cli-service/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/p-locate/download/p-locate-4.1.0.tgz", + "integrity": "sha1-o0KLtwiLOmApL2aRkni3wpetTwc=", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@vue/cli-service/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/path-exists/download/path-exists-4.0.0.tgz", + "integrity": "sha1-UTvb4tO5XXdi6METfvoZXGxhtbM=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@vue/cli-service/node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-4.2.0.tgz", + "integrity": "sha1-8JkTPfft5CLoHR2ESCcO6z5CYfM=", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@vue/cli-service/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz", + "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@vue/cli-service/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@vue/cli-service/node_modules/ssri": { + "version": "7.1.0", + "resolved": "https://registry.npm.taobao.org/ssri/download/ssri-7.1.0.tgz", + "integrity": "sha1-ksJBv23oI2W1x/tL126XVSLhKU0=", + "dev": true, + "dependencies": { + "figgy-pudding": "^3.5.1", + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@vue/cli-service/node_modules/terser-webpack-plugin": { + "version": "2.3.8", + "resolved": "https://registry.npm.taobao.org/terser-webpack-plugin/download/terser-webpack-plugin-2.3.8.tgz?cache=0&sync_timestamp=1597229593156&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fterser-webpack-plugin%2Fdownload%2Fterser-webpack-plugin-2.3.8.tgz", + "integrity": "sha1-iUdkoZsHQ/L3BOfCqEjFKDppZyQ=", + "dev": true, + "dependencies": { + "cacache": "^13.0.1", + "find-cache-dir": "^3.3.1", + "jest-worker": "^25.4.0", + "p-limit": "^2.3.0", + "schema-utils": "^2.6.6", + "serialize-javascript": "^4.0.0", + "source-map": "^0.6.1", + "terser": "^4.6.12", + "webpack-sources": "^1.4.3" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/@vue/cli-service/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-6.2.0.tgz", + "integrity": "sha1-6Tk7oHEC5skaOyIUePAlfNKFblM=", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@vue/cli-shared-utils": { + "version": "4.5.4", + "resolved": "https://registry.npm.taobao.org/@vue/cli-shared-utils/download/@vue/cli-shared-utils-4.5.4.tgz?cache=0&sync_timestamp=1597717221168&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fcli-shared-utils%2Fdownload%2F%40vue%2Fcli-shared-utils-4.5.4.tgz", + "integrity": "sha1-7Taylx3AJlP38q1OZrvpUQ4b1BQ=", + "dev": true, + "dependencies": { + "@hapi/joi": "^15.0.1", + "chalk": "^2.4.2", + "execa": "^1.0.0", + "launch-editor": "^2.2.1", + "lru-cache": "^5.1.1", + "node-ipc": "^9.1.1", + "open": "^6.3.0", + "ora": "^3.4.0", + "read-pkg": "^5.1.1", + "request": "^2.88.2", + "semver": "^6.1.0", + "strip-ansi": "^6.0.0" + } + }, + "node_modules/@vue/cli-shared-utils/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz", + "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@vue/component-compiler-utils": { + "version": "3.2.0", + "resolved": "https://registry.npm.taobao.org/@vue/component-compiler-utils/download/@vue/component-compiler-utils-3.2.0.tgz?cache=0&sync_timestamp=1595427628913&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fcomponent-compiler-utils%2Fdownload%2F%40vue%2Fcomponent-compiler-utils-3.2.0.tgz", + "integrity": "sha1-j4UYLO7Sjps8dTE95mn4MWbRHl0=", + "dev": true, + "dependencies": { + "consolidate": "^0.15.1", + "hash-sum": "^1.0.2", + "lru-cache": "^4.1.2", + "merge-source-map": "^1.1.0", + "postcss": "^7.0.14", + "postcss-selector-parser": "^6.0.2", + "source-map": "~0.6.1", + "vue-template-es2015-compiler": "^1.9.0" + }, + "optionalDependencies": { + "prettier": "^1.18.2" + } + }, + "node_modules/@vue/component-compiler-utils/node_modules/hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/hash-sum/download/hash-sum-1.0.2.tgz", + "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", + "dev": true + }, + "node_modules/@vue/component-compiler-utils/node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npm.taobao.org/lru-cache/download/lru-cache-4.1.5.tgz?cache=0&sync_timestamp=1594427582110&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flru-cache%2Fdownload%2Flru-cache-4.1.5.tgz", + "integrity": "sha1-i75Q6oW+1ZvJ4z3KuCNe6bz0Q80=", + "dev": true, + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/@vue/component-compiler-utils/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@vue/component-compiler-utils/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "node_modules/@vue/preload-webpack-plugin": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/@vue/preload-webpack-plugin/download/@vue/preload-webpack-plugin-1.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fpreload-webpack-plugin%2Fdownload%2F%40vue%2Fpreload-webpack-plugin-1.1.2.tgz", + "integrity": "sha1-zrkktOyzucQ4ccekKaAvhCPmIas=", + "dev": true, + "engines": { + "node": ">=6.0.0" + }, + "peerDependencies": { + "html-webpack-plugin": ">=2.26.0", + "webpack": ">=4.0.0" + } + }, + "node_modules/@vue/test-utils": { + "version": "1.0.5", + "resolved": "https://registry.npm.taobao.org/@vue/test-utils/download/@vue/test-utils-1.0.5.tgz", + "integrity": "sha1-Z24fmGu5PdyGnZxs8cggGD1k2S8=", + "dev": true, + "dependencies": { + "dom-event-types": "^1.0.0", + "lodash": "^4.17.15", + "pretty": "^2.0.0" + }, + "peerDependencies": { + "vue": "2.x", + "vue-template-compiler": "^2.x" + } + }, + "node_modules/@vue/web-component-wrapper": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/@vue/web-component-wrapper/download/@vue/web-component-wrapper-1.2.0.tgz", + "integrity": "sha1-uw5G8VhafiibTuYGfcxaauYvHdE=", + "dev": true + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/ast/download/@webassemblyjs/ast-1.9.0.tgz?cache=0&sync_timestamp=1580599461432&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fast%2Fdownload%2F%40webassemblyjs%2Fast-1.9.0.tgz", + "integrity": "sha1-vYUGBLQEJFmlpBzX0zjL7Wle2WQ=", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/floating-point-hex-parser/download/@webassemblyjs/floating-point-hex-parser-1.9.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Ffloating-point-hex-parser%2Fdownload%2F%40webassemblyjs%2Ffloating-point-hex-parser-1.9.0.tgz", + "integrity": "sha1-PD07Jxvd/ITesA9xNEQ4MR1S/7Q=", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-api-error/download/@webassemblyjs/helper-api-error-1.9.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fhelper-api-error%2Fdownload%2F%40webassemblyjs%2Fhelper-api-error-1.9.0.tgz", + "integrity": "sha1-ID9nbjM7lsnaLuqzzO8zxFkotqI=", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-buffer/download/@webassemblyjs/helper-buffer-1.9.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fhelper-buffer%2Fdownload%2F%40webassemblyjs%2Fhelper-buffer-1.9.0.tgz", + "integrity": "sha1-oUQtJpxf6yP8vJ73WdrDVH8p3gA=", + "dev": true + }, + "node_modules/@webassemblyjs/helper-code-frame": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-code-frame/download/@webassemblyjs/helper-code-frame-1.9.0.tgz", + "integrity": "sha1-ZH+Iks0gQ6gqwMjF51w28dkVnyc=", + "dev": true, + "dependencies": { + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "node_modules/@webassemblyjs/helper-fsm": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-fsm/download/@webassemblyjs/helper-fsm-1.9.0.tgz?cache=0&sync_timestamp=1580599471846&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fhelper-fsm%2Fdownload%2F%40webassemblyjs%2Fhelper-fsm-1.9.0.tgz", + "integrity": "sha1-wFJWtxJEIUZx9LCOwQitY7cO3bg=", + "dev": true + }, + "node_modules/@webassemblyjs/helper-module-context": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-module-context/download/@webassemblyjs/helper-module-context-1.9.0.tgz", + "integrity": "sha1-JdiIS3aDmHGgimxvgGw5ee9xLwc=", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-wasm-bytecode/download/@webassemblyjs/helper-wasm-bytecode-1.9.0.tgz?cache=0&sync_timestamp=1580600708901&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fhelper-wasm-bytecode%2Fdownload%2F%40webassemblyjs%2Fhelper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha1-T+2L6sm4wU+MWLcNEk1UndH+V5A=", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-wasm-section/download/@webassemblyjs/helper-wasm-section-1.9.0.tgz?cache=0&sync_timestamp=1580599464343&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fhelper-wasm-section%2Fdownload%2F%40webassemblyjs%2Fhelper-wasm-section-1.9.0.tgz", + "integrity": "sha1-WkE41aYpK6GLBMWuSXF+QWeWU0Y=", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/ieee754/download/@webassemblyjs/ieee754-1.9.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fieee754%2Fdownload%2F%40webassemblyjs%2Fieee754-1.9.0.tgz", + "integrity": "sha1-Fceg+6roP7JhQ7us9tbfFwKtOeQ=", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/leb128/download/@webassemblyjs/leb128-1.9.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fleb128%2Fdownload%2F%40webassemblyjs%2Fleb128-1.9.0.tgz", + "integrity": "sha1-8Zygt2ptxVYjoJz/p2noOPoeHJU=", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/utf8/download/@webassemblyjs/utf8-1.9.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Futf8%2Fdownload%2F%40webassemblyjs%2Futf8-1.9.0.tgz", + "integrity": "sha1-BNM7Y2945qaBMifoJAL3Y3tiKas=", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/wasm-edit/download/@webassemblyjs/wasm-edit-1.9.0.tgz?cache=0&sync_timestamp=1580599461044&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fwasm-edit%2Fdownload%2F%40webassemblyjs%2Fwasm-edit-1.9.0.tgz", + "integrity": "sha1-P+bXnT8PkiGDqoYALELdJWz+6c8=", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/wasm-gen/download/@webassemblyjs/wasm-gen-1.9.0.tgz?cache=0&sync_timestamp=1580600714947&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fwasm-gen%2Fdownload%2F%40webassemblyjs%2Fwasm-gen-1.9.0.tgz", + "integrity": "sha1-ULxw7Gje2OJ2OwGhQYv0NJGnpJw=", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/wasm-opt/download/@webassemblyjs/wasm-opt-1.9.0.tgz?cache=0&sync_timestamp=1580600719192&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fwasm-opt%2Fdownload%2F%40webassemblyjs%2Fwasm-opt-1.9.0.tgz", + "integrity": "sha1-IhEYHlsxMmRDzIES658LkChyGmE=", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/wasm-parser/download/@webassemblyjs/wasm-parser-1.9.0.tgz?cache=0&sync_timestamp=1580599463057&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fwasm-parser%2Fdownload%2F%40webassemblyjs%2Fwasm-parser-1.9.0.tgz", + "integrity": "sha1-nUjkSCbfSmWYKUqmyHRp1kL/9l4=", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wast-parser": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/wast-parser/download/@webassemblyjs/wast-parser-1.9.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fwast-parser%2Fdownload%2F%40webassemblyjs%2Fwast-parser-1.9.0.tgz", + "integrity": "sha1-MDERXXmsW9JhVWzsw/qQo+9FGRQ=", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/wast-printer/download/@webassemblyjs/wast-printer-1.9.0.tgz?cache=0&sync_timestamp=1580600723640&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fwast-printer%2Fdownload%2F%40webassemblyjs%2Fwast-printer-1.9.0.tgz", + "integrity": "sha1-STXVTIX+9jewDOn1I3dFHQDUeJk=", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/@xtuc/ieee754/download/@xtuc/ieee754-1.2.0.tgz", + "integrity": "sha1-7vAUoxRa5Hehy8AM0eVSM23Ot5A=", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npm.taobao.org/@xtuc/long/download/@xtuc/long-4.2.2.tgz", + "integrity": "sha1-0pHGpOl5ibXGHZrPOWrk/hM6cY0=", + "dev": true + }, + "node_modules/abab": { + "version": "2.0.4", + "resolved": "https://registry.npm.taobao.org/abab/download/abab-2.0.4.tgz?cache=0&sync_timestamp=1596256174952&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fabab%2Fdownload%2Fabab-2.0.4.tgz", + "integrity": "sha1-bfpXtBfKBtIbJHjw5jgwL5nCQFw=", + "dev": true + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/abbrev/download/abbrev-1.1.1.tgz", + "integrity": "sha1-+PLIh60Qv2f2NPAFtph/7TF5qsg=", + "dev": true + }, + "node_modules/accepts": { + "version": "1.3.7", + "resolved": "https://registry.npm.taobao.org/accepts/download/accepts-1.3.7.tgz", + "integrity": "sha1-UxvHJlF6OytB+FACHGzBXqq1B80=", + "dev": true, + "dependencies": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "6.4.1", + "resolved": "https://registry.npm.taobao.org/acorn/download/acorn-6.4.1.tgz?cache=0&sync_timestamp=1597235774928&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn%2Fdownload%2Facorn-6.4.1.tgz", + "integrity": "sha1-Ux5Yuj9RudrLmmZGyk3r9bFMpHQ=", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "4.3.4", + "resolved": "https://registry.npm.taobao.org/acorn-globals/download/acorn-globals-4.3.4.tgz", + "integrity": "sha1-n6GSat3BHJcwjE5m163Q1Awycuc=", + "dev": true, + "dependencies": { + "acorn": "^6.0.1", + "acorn-walk": "^6.0.1" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.1", + "resolved": "https://registry.npm.taobao.org/acorn-jsx/download/acorn-jsx-5.3.1.tgz?cache=0&sync_timestamp=1599499155970&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn-jsx%2Fdownload%2Facorn-jsx-5.3.1.tgz", + "integrity": "sha1-/IZh4Rt6wVOcR9v+oucrOvNNJns=", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "6.2.0", + "resolved": "https://registry.npm.taobao.org/acorn-walk/download/acorn-walk-6.2.0.tgz?cache=0&sync_timestamp=1597235855275&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn-walk%2Fdownload%2Facorn-walk-6.2.0.tgz", + "integrity": "sha1-Ejy487hMIXHx9/slJhWxx4prGow=", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/address": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/address/download/address-1.1.2.tgz", + "integrity": "sha1-vxEWycdYxRt6kz0pa3LCIe2UKLY=", + "dev": true, + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/aggregate-error/download/aggregate-error-3.1.0.tgz?cache=0&sync_timestamp=1598049717562&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Faggregate-error%2Fdownload%2Faggregate-error-3.1.0.tgz", + "integrity": "sha1-kmcP9Q9TWb23o+DUDQ7DDFc3aHo=", + "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.4", + "resolved": "https://registry.npm.taobao.org/ajv/download/ajv-6.12.4.tgz?cache=0&sync_timestamp=1597480759610&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv%2Fdownload%2Fajv-6.12.4.tgz", + "integrity": "sha1-BhT6zEUiEn+nE0Rca/0+vTduIjQ=", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/ajv-errors/download/ajv-errors-1.0.1.tgz", + "integrity": "sha1-81mGrOuRr63sQQL72FAUlQzvpk0=", + "dev": true, + "peerDependencies": { + "ajv": ">=5.0.0" + } + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npm.taobao.org/ajv-keywords/download/ajv-keywords-3.5.2.tgz?cache=0&sync_timestamp=1595907068314&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv-keywords%2Fdownload%2Fajv-keywords-3.5.2.tgz", + "integrity": "sha1-MfKdpatuANHC0yms97WSlhTVAU0=", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/alphanum-sort/download/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", + "dev": true + }, + "node_modules/ansi-colors": { + "version": "3.2.3", + "resolved": "https://registry.npm.taobao.org/ansi-colors/download/ansi-colors-3.2.3.tgz", + "integrity": "sha1-V9NbhoboUeLMBMQD8cACA5dqGBM=", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.1", + "resolved": "https://registry.npm.taobao.org/ansi-escapes/download/ansi-escapes-4.3.1.tgz", + "integrity": "sha1-pcR8xDGB8fOP/XB2g3cA05VSKmE=", + "dev": true, + "dependencies": { + "type-fest": "^0.11.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.11.0", + "resolved": "https://registry.npm.taobao.org/type-fest/download/type-fest-0.11.0.tgz", + "integrity": "sha1-l6vwhyMQ/tiKXEZrJWgVdhReM/E=", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npm.taobao.org/ansi-html/download/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz?cache=0&sync_timestamp=1570188663907&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-4.1.0.tgz", + "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz", + "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npm.taobao.org/any-promise/download/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", + "dev": true + }, + "node_modules/anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/anymatch/download/anymatch-3.1.1.tgz", + "integrity": "sha1-xV7PAhheJGklk5kxDBc84xIzsUI=", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/aproba": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/aproba/download/aproba-1.2.0.tgz", + "integrity": "sha1-aALmJk79GMeQobDVF/DyYnvyyUo=", + "dev": true + }, + "node_modules/arch": { + "version": "2.1.2", + "resolved": "https://registry.npm.taobao.org/arch/download/arch-2.1.2.tgz", + "integrity": "sha1-DFK75zRLtPomDEQ9LLrZwA/y8L8=", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npm.taobao.org/argparse/download/argparse-1.0.10.tgz?cache=0&sync_timestamp=1598649734444&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fargparse%2Fdownload%2Fargparse-1.0.10.tgz", + "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/arr-diff/download/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/arr-flatten/download/arr-flatten-1.1.0.tgz", + "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/arr-union/download/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-equal": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/array-equal/download/array-equal-1.0.0.tgz", + "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", + "dev": true + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/array-flatten/download/array-flatten-1.1.1.tgz?cache=0&sync_timestamp=1574313384951&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Farray-flatten%2Fdownload%2Farray-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "node_modules/array-union": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/array-union/download/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "dependencies": { + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/array-uniq/download/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npm.taobao.org/array-unique/download/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/asn1": { + "version": "0.2.4", + "resolved": "https://registry.npm.taobao.org/asn1/download/asn1-0.2.4.tgz", + "integrity": "sha1-jSR136tVO7M+d7VOWeiAu4ziMTY=", + "dev": true, + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npm.taobao.org/asn1.js/download/asn1.js-5.4.1.tgz", + "integrity": "sha1-EamAuE67kXgc41sP3C7ilON4Pwc=", + "dev": true, + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/asn1.js/node_modules/bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.11.9.tgz", + "integrity": "sha1-JtVWgpRY+dHoH8SJUkk9C6NQeCg=", + "dev": true + }, + "node_modules/assert": { + "version": "1.5.0", + "resolved": "https://registry.npm.taobao.org/assert/download/assert-1.5.0.tgz", + "integrity": "sha1-VcEJqvbgrv2z3EtxJAxwv1dLGOs=", + "dev": true, + "dependencies": { + "object-assign": "^4.1.1", + "util": "0.10.3" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/assert-plus/download/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/assert/node_modules/inherits": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.1.tgz?cache=0&sync_timestamp=1560975547815&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finherits%2Fdownload%2Finherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "node_modules/assert/node_modules/util": { + "version": "0.10.3", + "resolved": "https://registry.npm.taobao.org/util/download/util-0.10.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Futil%2Fdownload%2Futil-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "dependencies": { + "inherits": "2.0.1" + } + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/assertion-error/download/assertion-error-1.1.0.tgz", + "integrity": "sha1-5gtrDo8wG9l+U3UhW9pAbIURjAs=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/assign-symbols/download/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/astral-regex/download/astral-regex-1.0.0.tgz", + "integrity": "sha1-bIw/uCfdQ+45GPJ7gngqt2WKb9k=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/async": { + "version": "2.6.3", + "resolved": "https://registry.npm.taobao.org/async/download/async-2.6.3.tgz", + "integrity": "sha1-1yYl4jRKNlbjo61Pp0n6gymdgv8=", + "dev": true, + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/async-each": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/async-each/download/async-each-1.0.3.tgz", + "integrity": "sha1-tyfb+H12UWAvBvTUrDh/R9kbDL8=", + "dev": true + }, + "node_modules/async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/async-limiter/download/async-limiter-1.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fasync-limiter%2Fdownload%2Fasync-limiter-1.0.1.tgz", + "integrity": "sha1-3TeelPDbgxCwgpH51kwyCXZmF/0=", + "dev": true + }, + "node_modules/async-validator": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-1.8.5.tgz", + "integrity": "sha512-tXBM+1m056MAX0E8TL2iCjg8WvSyXu0Zc8LNtYqrVeyoL3+esHRZ4SieE9fKQyyU09uONjnMEjrNBMqT0mbvmA==", + "dependencies": { + "babel-runtime": "6.x" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npm.taobao.org/atob/download/atob-2.1.2.tgz", + "integrity": "sha1-bZUX654DDSQ2ZmZR6GvZ9vE1M8k=", + "dev": true, + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/autoprefixer": { + "version": "9.8.6", + "resolved": "https://registry.npm.taobao.org/autoprefixer/download/autoprefixer-9.8.6.tgz?cache=0&sync_timestamp=1596143120138&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fautoprefixer%2Fdownload%2Fautoprefixer-9.8.6.tgz", + "integrity": "sha1-O3NZTKG/kmYyDFrPFYjXTep0IQ8=", + "dev": true, + "dependencies": { + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001109", + "colorette": "^1.2.1", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npm.taobao.org/aws-sign2/download/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.10.1", + "resolved": "https://registry.npm.taobao.org/aws4/download/aws4-1.10.1.tgz?cache=0&sync_timestamp=1597236947743&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Faws4%2Fdownload%2Faws4-1.10.1.tgz", + "integrity": "sha1-4eguTz6Zniz9YbFhKA0WoRH4ZCg=", + "dev": true + }, + "node_modules/axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "dependencies": { + "follow-redirects": "^1.14.0" + } + }, + "node_modules/axios/node_modules/follow-redirects": { + "version": "1.14.4", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.4.tgz", + "integrity": "sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/babel-eslint": { + "version": "10.1.0", + "resolved": "https://registry.npm.taobao.org/babel-eslint/download/babel-eslint-10.1.0.tgz?cache=0&sync_timestamp=1582676223200&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-eslint%2Fdownload%2Fbabel-eslint-10.1.0.tgz", + "integrity": "sha1-aWjlaKkQt4+zd5zdi2rC9HmUMjI=", + "deprecated": "babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.7.0", + "@babel/traverse": "^7.7.0", + "@babel/types": "^7.7.0", + "eslint-visitor-keys": "^1.0.0", + "resolve": "^1.12.0" + }, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "eslint": ">= 4.12.1" + } + }, + "node_modules/babel-helper-vue-jsx-merge-props": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz", + "integrity": "sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg==" + }, + "node_modules/babel-loader": { + "version": "8.1.0", + "resolved": "https://registry.npm.taobao.org/babel-loader/download/babel-loader-8.1.0.tgz?cache=0&sync_timestamp=1584715910722&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-loader%2Fdownload%2Fbabel-loader-8.1.0.tgz", + "integrity": "sha1-xhHVESvVIJq+i5+oTD5NolJ18cM=", + "dev": true, + "dependencies": { + "find-cache-dir": "^2.1.0", + "loader-utils": "^1.4.0", + "mkdirp": "^0.5.3", + "pify": "^4.0.1", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 6.9" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" + } + }, + "node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npm.taobao.org/babel-plugin-dynamic-import-node/download/babel-plugin-dynamic-import-node-2.3.3.tgz?cache=0&sync_timestamp=1587495903478&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-plugin-dynamic-import-node%2Fdownload%2Fbabel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha1-hP2hnJduxcbe/vV/lCez3vZuF6M=", + "dev": true, + "dependencies": { + "object.assign": "^4.1.0" + } + }, + "node_modules/babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dependencies": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "node_modules/babel-runtime/node_modules/core-js": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", + "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==", + "deprecated": "core-js@<3.4 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js.", + "hasInstallScript": true + }, + "node_modules/babel-runtime/node_modules/regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + }, + "node_modules/balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "node_modules/base": { + "version": "0.11.2", + "resolved": "https://registry.npm.taobao.org/base/download/base-0.11.2.tgz", + "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=", + "dev": true, + "dependencies": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npm.taobao.org/base64-js/download/base64-js-1.3.1.tgz", + "integrity": "sha1-WOzoy3XdB+ce0IxzarxfrE2/jfE=", + "dev": true + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/batch/download/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/bfj": { + "version": "6.1.2", + "resolved": "https://registry.npm.taobao.org/bfj/download/bfj-6.1.2.tgz", + "integrity": "sha1-MlyGGoIryzWKQceKM7jm4ght3n8=", + "dev": true, + "dependencies": { + "bluebird": "^3.5.5", + "check-types": "^8.0.3", + "hoopy": "^0.1.4", + "tryer": "^1.0.1" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npm.taobao.org/big.js/download/big.js-5.2.2.tgz", + "integrity": "sha1-ZfCvOC9Xi83HQr2cKB6cstd2gyg=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-2.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbinary-extensions%2Fdownload%2Fbinary-extensions-2.1.0.tgz", + "integrity": "sha1-MPpAyef+B9vIlWeM0ocCTeokHdk=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npm.taobao.org/bindings/download/bindings-1.5.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbindings%2Fdownload%2Fbindings-1.5.0.tgz", + "integrity": "sha1-EDU8npRTNLwFEabZCzj7x8nFBN8=", + "dev": true, + "optional": true, + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npm.taobao.org/bluebird/download/bluebird-3.7.2.tgz", + "integrity": "sha1-nyKcFb4nJFT/qXOs4NvueaGww28=", + "dev": true + }, + "node_modules/bn.js": { + "version": "5.1.3", + "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-5.1.3.tgz", + "integrity": "sha1-vsoAVAj2Quvr6oCwQrTRjSrA7ms=", + "dev": true + }, + "node_modules/body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npm.taobao.org/body-parser/download/body-parser-1.19.0.tgz", + "integrity": "sha1-lrJwnlfJxOCab9Zqj9l5hE9p8Io=", + "dev": true, + "dependencies": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/body-parser/node_modules/qs": { + "version": "6.7.0", + "resolved": "https://registry.npm.taobao.org/qs/download/qs-6.7.0.tgz", + "integrity": "sha1-QdwaAV49WB8WIXdr4xr7KHapsbw=", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npm.taobao.org/bonjour/download/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dev": true, + "dependencies": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + } + }, + "node_modules/bonjour/node_modules/array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npm.taobao.org/array-flatten/download/array-flatten-2.1.2.tgz?cache=0&sync_timestamp=1574313384951&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Farray-flatten%2Fdownload%2Farray-flatten-2.1.2.tgz", + "integrity": "sha1-JO+AoowaiTYX4hSbDG0NeIKTsJk=", + "dev": true + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/boolbase/download/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.11.tgz", + "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npm.taobao.org/braces/download/braces-2.3.2.tgz", + "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", + "dev": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/brorand/download/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/browser-process-hrtime/download/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha1-PJtLfXgsgSHlbxAQbYTA0P/JRiY=", + "dev": true + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npm.taobao.org/browser-stdout/download/browser-stdout-1.3.1.tgz", + "integrity": "sha1-uqVZ7hTO1zRSIputcyZGfGH6vWA=", + "dev": true + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/browserify-aes/download/browserify-aes-1.2.0.tgz", + "integrity": "sha1-Mmc0ZC9APavDADIJhTu3CtQo70g=", + "dev": true, + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/browserify-cipher/download/browserify-cipher-1.0.1.tgz", + "integrity": "sha1-jWR0wbhwv9q807z8wZNKEOlPFfA=", + "dev": true, + "dependencies": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "node_modules/browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/browserify-des/download/browserify-des-1.0.2.tgz", + "integrity": "sha1-OvTx9Zg5QDVy8cZiBDdfen9wPpw=", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/browserify-rsa/download/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" + } + }, + "node_modules/browserify-rsa/node_modules/bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.11.9.tgz", + "integrity": "sha1-JtVWgpRY+dHoH8SJUkk9C6NQeCg=", + "dev": true + }, + "node_modules/browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npm.taobao.org/browserify-sign/download/browserify-sign-4.2.1.tgz?cache=0&sync_timestamp=1596557839219&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbrowserify-sign%2Fdownload%2Fbrowserify-sign-4.2.1.tgz", + "integrity": "sha1-6vSt1G3VS+O7OzbAzxWrvrp5VsM=", + "dev": true, + "dependencies": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + } + }, + "node_modules/browserify-sign/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.6.0.tgz?cache=0&sync_timestamp=1581624324274&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freadable-stream%2Fdownload%2Freadable-stream-3.6.0.tgz", + "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/browserify-sign/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.2.1.tgz", + "integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY=", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npm.taobao.org/browserify-zlib/download/browserify-zlib-0.2.0.tgz", + "integrity": "sha1-KGlFnZqjviRf6P4sofRuLn9U1z8=", + "dev": true, + "dependencies": { + "pako": "~1.0.5" + } + }, + "node_modules/browserslist": { + "version": "4.14.2", + "resolved": "https://registry.npm.taobao.org/browserslist/download/browserslist-4.14.2.tgz?cache=0&sync_timestamp=1599675648822&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbrowserslist%2Fdownload%2Fbrowserslist-4.14.2.tgz", + "integrity": "sha1-GzzsRYobqHWIzF6b5i8ZttSIE84=", + "dev": true, + "dependencies": { + "caniuse-lite": "^1.0.30001125", + "electron-to-chromium": "^1.3.564", + "escalade": "^3.0.2", + "node-releases": "^1.1.61" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + }, + "node_modules/buffer": { + "version": "4.9.2", + "resolved": "https://registry.npm.taobao.org/buffer/download/buffer-4.9.2.tgz?cache=0&sync_timestamp=1588706716358&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbuffer%2Fdownload%2Fbuffer-4.9.2.tgz", + "integrity": "sha1-Iw6tNEACmIZEhBqwJEr4xEu+Pvg=", + "dev": true, + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" + }, + "node_modules/buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/buffer-from/download/buffer-from-1.1.1.tgz", + "integrity": "sha1-MnE7wCj3XAL9txDXx7zsHyxgcO8=", + "dev": true + }, + "node_modules/buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/buffer-indexof/download/buffer-indexof-1.1.1.tgz", + "integrity": "sha1-Uvq8xqYG0aADAoAmSO9o9jnaJow=", + "dev": true + }, + "node_modules/buffer-json": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/buffer-json/download/buffer-json-2.0.0.tgz", + "integrity": "sha1-9z4TseQvGW/i/WfQAcfXEH7dfCM=", + "dev": true + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/buffer-xor/download/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "node_modules/builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/builtin-status-codes/download/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "node_modules/bytes": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/bytes/download/bytes-3.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbytes%2Fdownload%2Fbytes-3.1.0.tgz", + "integrity": "sha1-9s95M6Ng4FiPqf3oVlHNx/gF0fY=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "12.0.4", + "resolved": "https://registry.npm.taobao.org/cacache/download/cacache-12.0.4.tgz?cache=0&sync_timestamp=1594429684526&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcacache%2Fdownload%2Fcacache-12.0.4.tgz", + "integrity": "sha1-ZovL0QWutfHZL+JVcOyVJcj6pAw=", + "dev": true, + "dependencies": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "node_modules/cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/cache-base/download/cache-base-1.0.1.tgz", + "integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=", + "dev": true, + "dependencies": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cache-loader": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/cache-loader/download/cache-loader-4.1.0.tgz", + "integrity": "sha1-mUjK41OuwKH8ser9ojAIFuyFOH4=", + "dev": true, + "dependencies": { + "buffer-json": "^2.0.0", + "find-cache-dir": "^3.0.0", + "loader-utils": "^1.2.3", + "mkdirp": "^0.5.1", + "neo-async": "^2.6.1", + "schema-utils": "^2.0.0" + }, + "engines": { + "node": ">= 8.9.0" + }, + "peerDependencies": { + "webpack": "^4.0.0" + } + }, + "node_modules/cache-loader/node_modules/find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-3.3.1.tgz", + "integrity": "sha1-ibM/rUpGcNqpT4Vff74x1thP6IA=", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/cache-loader/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-4.1.0.tgz?cache=0&sync_timestamp=1597169842138&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-up%2Fdownload%2Ffind-up-4.1.0.tgz", + "integrity": "sha1-l6/n1s3AvFkoWEt8jXsW6KmqXRk=", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cache-loader/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npm.taobao.org/locate-path/download/locate-path-5.0.0.tgz", + "integrity": "sha1-Gvujlq/WdqbUJQTQpno6frn2KqA=", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cache-loader/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/make-dir/download/make-dir-3.1.0.tgz?cache=0&sync_timestamp=1587567572251&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmake-dir%2Fdownload%2Fmake-dir-3.1.0.tgz", + "integrity": "sha1-QV6WcEazp/HRhSd9hKpYIDcmoT8=", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cache-loader/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/p-locate/download/p-locate-4.1.0.tgz", + "integrity": "sha1-o0KLtwiLOmApL2aRkni3wpetTwc=", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cache-loader/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/path-exists/download/path-exists-4.0.0.tgz", + "integrity": "sha1-UTvb4tO5XXdi6METfvoZXGxhtbM=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cache-loader/node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-4.2.0.tgz", + "integrity": "sha1-8JkTPfft5CLoHR2ESCcO6z5CYfM=", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cache-loader/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz", + "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/call-me-maybe": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/call-me-maybe/download/call-me-maybe-1.0.1.tgz", + "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", + "dev": true + }, + "node_modules/caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/caller-callsite/download/caller-callsite-2.0.0.tgz?cache=0&sync_timestamp=1562668933683&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcaller-callsite%2Fdownload%2Fcaller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "dev": true, + "dependencies": { + "callsites": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/caller-path/download/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "dev": true, + "dependencies": { + "caller-callsite": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/callsites": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/callsites/download/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/camel-case/download/camel-case-3.0.0.tgz?cache=0&sync_timestamp=1576748709736&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcamel-case%2Fdownload%2Fcamel-case-3.0.0.tgz", + "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", + "dev": true, + "dependencies": { + "no-case": "^2.2.0", + "upper-case": "^1.1.1" + } + }, + "node_modules/camelcase": { + "version": "6.0.0", + "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-6.0.0.tgz", + "integrity": "sha1-Uln3ww414njxvcKk2RIws3ytmB4=", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/caniuse-api/download/caniuse-api-3.0.0.tgz", + "integrity": "sha1-Xk2Q4idJYdRikZl99Znj7QCO5MA=", + "dev": true, + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001125", + "resolved": "https://registry.npm.taobao.org/caniuse-lite/download/caniuse-lite-1.0.30001125.tgz?cache=0&sync_timestamp=1599631496545&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcaniuse-lite%2Fdownload%2Fcaniuse-lite-1.0.30001125.tgz", + "integrity": "sha1-KhpR7gRaCiIHR0sIb2KMNHJemXs=", + "dev": true + }, + "node_modules/case-sensitive-paths-webpack-plugin": { + "version": "2.3.0", + "resolved": "https://registry.npm.taobao.org/case-sensitive-paths-webpack-plugin/download/case-sensitive-paths-webpack-plugin-2.3.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcase-sensitive-paths-webpack-plugin%2Fdownload%2Fcase-sensitive-paths-webpack-plugin-2.3.0.tgz", + "integrity": "sha1-I6xhPMmoVuT4j/i7c7u16YmCXPc=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npm.taobao.org/caseless/download/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "node_modules/chai": { + "version": "4.2.0", + "resolved": "https://registry.npm.taobao.org/chai/download/chai-4.2.0.tgz", + "integrity": "sha1-dgqnLPION5XoSxKHfODoNzeqKeU=", + "dev": true, + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "pathval": "^1.1.0", + "type-detect": "^4.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz?cache=0&sync_timestamp=1591687070184&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchalk%2Fdownload%2Fchalk-2.4.2.tgz", + "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npm.taobao.org/chardet/download/chardet-0.7.0.tgz?cache=0&sync_timestamp=1594010664806&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchardet%2Fdownload%2Fchardet-0.7.0.tgz", + "integrity": "sha1-kAlISfCTfy7twkJdDSip5fDLrZ4=", + "dev": true + }, + "node_modules/check-error": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/check-error/download/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/check-types": { + "version": "8.0.3", + "resolved": "https://registry.npm.taobao.org/check-types/download/check-types-8.0.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcheck-types%2Fdownload%2Fcheck-types-8.0.3.tgz", + "integrity": "sha1-M1bMoZyIlUTy16le1JzlCKDs9VI=", + "dev": true + }, + "node_modules/chokidar": { + "version": "3.4.2", + "resolved": "https://registry.npm.taobao.org/chokidar/download/chokidar-3.4.2.tgz", + "integrity": "sha1-ONyOZY3sOAl0HrPve7Ckf+QkIy0=", + "dev": true, + "dependencies": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.4.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.1.2" + } + }, + "node_modules/chokidar/node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npm.taobao.org/braces/download/braces-3.0.2.tgz", + "integrity": "sha1-NFThpGLujVmeI23zNs2epPiv4Qc=", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar/node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npm.taobao.org/fill-range/download/fill-range-7.0.1.tgz", + "integrity": "sha1-GRmmp8df44ssfHflGYU12prN2kA=", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-7.0.0.tgz", + "integrity": "sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss=", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/chokidar/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-5.0.1.tgz", + "integrity": "sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ=", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npm.taobao.org/chownr/download/chownr-1.1.4.tgz?cache=0&sync_timestamp=1581476105370&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchownr%2Fdownload%2Fchownr-1.1.4.tgz", + "integrity": "sha1-b8nXtC0ypYNZYzdmbn0ICE2izGs=", + "dev": true + }, + "node_modules/chrome-trace-event": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/chrome-trace-event/download/chrome-trace-event-1.0.2.tgz", + "integrity": "sha1-I0CQ7pfH1K0aLEvq4nUF3v/GCKQ=", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "1.6.0", + "resolved": "https://registry.npm.taobao.org/ci-info/download/ci-info-1.6.0.tgz", + "integrity": "sha1-LKINu5zrMtRSSmgzAzE/AwSx5Jc=", + "dev": true + }, + "node_modules/cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/cipher-base/download/cipher-base-1.0.4.tgz", + "integrity": "sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94=", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/ckeditor4-integrations-common": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/ckeditor4-integrations-common/-/ckeditor4-integrations-common-0.2.0.tgz", + "integrity": "sha512-KkHztF0bkGOnTcifWFd55j5Y9SCR3uk12SGgS6L1mZNnBeIJFCcgTwZWEHtG2aDJF7aZob7cex1CShL+SrNuow==", + "dependencies": { + "load-script": "^1.0.0" + } + }, + "node_modules/ckeditor4-vue": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/ckeditor4-vue/-/ckeditor4-vue-1.3.2.tgz", + "integrity": "sha512-fke3mzWz/9GrBS/sfeJIRzkqDkfocY2hI268zgb5nwzfWMV87k5zXtbZgCn8vhNg48f69AFDdJ5Oh4/Wa5GTag==", + "dependencies": { + "ckeditor4-integrations-common": "^0.2.0" + }, + "engines": { + "node": ">=8.0.0", + "npm": ">=5.7.1" + }, + "peerDependencies": { + "vue": "^2.5.17" + } + }, + "node_modules/class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npm.taobao.org/class-utils/download/class-utils-0.3.6.tgz", + "integrity": "sha1-+TNprouafOAv1B+q0MqDAzGQxGM=", + "dev": true, + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clean-css": { + "version": "4.2.3", + "resolved": "https://registry.npm.taobao.org/clean-css/download/clean-css-4.2.3.tgz", + "integrity": "sha1-UHtd59l7SO5T2ErbAWD/YhY4D3g=", + "dev": true, + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/clean-css/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/clean-stack/download/clean-stack-2.2.0.tgz?cache=0&sync_timestamp=1592035524745&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fclean-stack%2Fdownload%2Fclean-stack-2.2.0.tgz", + "integrity": "sha1-7oRy27Ep5yezHooQpCfe6d/kAIs=", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/cli-cursor/download/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "dependencies": { + "restore-cursor": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cli-highlight": { + "version": "2.1.4", + "resolved": "https://registry.npm.taobao.org/cli-highlight/download/cli-highlight-2.1.4.tgz?cache=0&sync_timestamp=1573948719956&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcli-highlight%2Fdownload%2Fcli-highlight-2.1.4.tgz", + "integrity": "sha1-CYy2Qs8X9CrcHBFF4H+WDsTXUis=", + "dev": true, + "dependencies": { + "chalk": "^3.0.0", + "highlight.js": "^9.6.0", + "mz": "^2.4.0", + "parse5": "^5.1.1", + "parse5-htmlparser2-tree-adapter": "^5.1.1", + "yargs": "^15.0.0" + }, + "bin": { + "highlight": "bin/highlight" + }, + "engines": { + "node": ">=8.0.0", + "npm": ">=5.0.0" + } + }, + "node_modules/cli-highlight/node_modules/ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-4.2.1.tgz", + "integrity": "sha1-kK51xCTQCNJiTFvynq0xd+v881k=", + "dev": true, + "dependencies": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cli-highlight/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz", + "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-highlight/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-3.0.0.tgz?cache=0&sync_timestamp=1591687070184&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchalk%2Fdownload%2Fchalk-3.0.0.tgz", + "integrity": "sha1-P3PCv1JlkfV0zEksUeJFY0n4ROQ=", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-highlight/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npm.taobao.org/cliui/download/cliui-6.0.0.tgz?cache=0&sync_timestamp=1597608006561&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcliui%2Fdownload%2Fcliui-6.0.0.tgz", + "integrity": "sha1-UR1wLAxOQcoVbX0OlgIfI+EyJbE=", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/cli-highlight/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz?cache=0&sync_timestamp=1566248870121&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcolor-convert%2Fdownload%2Fcolor-convert-2.0.1.tgz", + "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/cli-highlight/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz", + "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", + "dev": true + }, + "node_modules/cli-highlight/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-4.1.0.tgz?cache=0&sync_timestamp=1597169842138&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-up%2Fdownload%2Ffind-up-4.1.0.tgz", + "integrity": "sha1-l6/n1s3AvFkoWEt8jXsW6KmqXRk=", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-highlight/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-4.0.0.tgz", + "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-highlight/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npm.taobao.org/locate-path/download/locate-path-5.0.0.tgz", + "integrity": "sha1-Gvujlq/WdqbUJQTQpno6frn2KqA=", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-highlight/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/p-locate/download/p-locate-4.1.0.tgz", + "integrity": "sha1-o0KLtwiLOmApL2aRkni3wpetTwc=", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-highlight/node_modules/parse5": { + "version": "5.1.1", + "resolved": "https://registry.npm.taobao.org/parse5/download/parse5-5.1.1.tgz?cache=0&sync_timestamp=1595850861876&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse5%2Fdownload%2Fparse5-5.1.1.tgz", + "integrity": "sha1-9o5OW6GFKsLK3AD0VV//bCq7YXg=", + "dev": true + }, + "node_modules/cli-highlight/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/path-exists/download/path-exists-4.0.0.tgz", + "integrity": "sha1-UTvb4tO5XXdi6METfvoZXGxhtbM=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-highlight/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1598611709087&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz", + "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-highlight/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-6.2.0.tgz", + "integrity": "sha1-6Tk7oHEC5skaOyIUePAlfNKFblM=", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-highlight/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npm.taobao.org/yargs/download/yargs-15.4.1.tgz?cache=0&sync_timestamp=1599673846782&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-15.4.1.tgz", + "integrity": "sha1-DYehbeAa7p2L7Cv7909nhRcw9Pg=", + "dev": true, + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-highlight/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-18.1.3.tgz?cache=0&sync_timestamp=1599672368427&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-18.1.3.tgz", + "integrity": "sha1-vmjEl1xrKr9GkjawyHA2L6sJp7A=", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-spinners": { + "version": "2.4.0", + "resolved": "https://registry.npm.taobao.org/cli-spinners/download/cli-spinners-2.4.0.tgz?cache=0&sync_timestamp=1595080377121&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcli-spinners%2Fdownload%2Fcli-spinners-2.4.0.tgz", + "integrity": "sha1-xiVtsha4eM+6RyDnGc7Hz3JoXX8=", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/cli-width/download/cli-width-3.0.0.tgz", + "integrity": "sha1-ovSEN6LKqaIkNueUvwceyeYc7fY=", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/clipboardy": { + "version": "2.3.0", + "resolved": "https://registry.npm.taobao.org/clipboardy/download/clipboardy-2.3.0.tgz", + "integrity": "sha1-PCkDZQxo5GqRs4iYW8J3QofbopA=", + "dev": true, + "dependencies": { + "arch": "^2.1.1", + "execa": "^1.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/clipboardy/node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/is-wsl/download/is-wsl-2.2.0.tgz", + "integrity": "sha1-dKTHbnfKn9P5MvKQwX6jJs0VcnE=", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npm.taobao.org/cliui/download/cliui-5.0.0.tgz?cache=0&sync_timestamp=1597608006561&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcliui%2Fdownload%2Fcliui-5.0.0.tgz", + "integrity": "sha1-3u/P2y6AB4SqNPRvoI4GhRx7u8U=", + "dev": true, + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-7.0.3.tgz", + "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY=", + "dev": true + }, + "node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/cliui/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-3.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring-width%2Fdownload%2Fstring-width-3.1.0.tgz", + "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz", + "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/clone/download/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/clone-deep/download/clone-deep-4.0.1.tgz", + "integrity": "sha1-wZ/Zvbv4WUK0/ZechNz31fB8I4c=", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/coa": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/coa/download/coa-2.0.2.tgz", + "integrity": "sha1-Q/bCEVG07yv1cYfbDXPeIp4+fsM=", + "dev": true, + "dependencies": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/collection-visit/download/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color": { + "version": "3.1.2", + "resolved": "https://registry.npm.taobao.org/color/download/color-3.1.2.tgz", + "integrity": "sha1-aBSOf4XUGtdknF+oyBBvCY0inhA=", + "dev": true, + "dependencies": { + "color-convert": "^1.9.1", + "color-string": "^1.5.2" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-1.9.3.tgz?cache=0&sync_timestamp=1566248870121&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcolor-convert%2Fdownload%2Fcolor-convert-1.9.3.tgz", + "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/color-string": { + "version": "1.5.3", + "resolved": "https://registry.npm.taobao.org/color-string/download/color-string-1.5.3.tgz", + "integrity": "sha1-ybvF8BtYtUkvPWhXRZy2WQziBMw=", + "dev": true, + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/colorette": { + "version": "1.2.1", + "resolved": "https://registry.npm.taobao.org/colorette/download/colorette-1.2.1.tgz?cache=0&sync_timestamp=1593955763917&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcolorette%2Fdownload%2Fcolorette-1.2.1.tgz", + "integrity": "sha1-TQuSEyXBT6+SYzCGpTbbbolWSxs=", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.8.tgz", + "integrity": "sha1-w9RaizT9cwYxoRCoolIGgrMdWn8=", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npm.taobao.org/commander/download/commander-2.20.3.tgz?cache=0&sync_timestamp=1598576116597&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-2.20.3.tgz", + "integrity": "sha1-/UhehMA+tIgcIHIrpIA16FMa6zM=", + "dev": true + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/commondir/download/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npm.taobao.org/component-emitter/download/component-emitter-1.3.0.tgz", + "integrity": "sha1-FuQHD7qK4ptnnyIVhT7hgasuq8A=", + "dev": true + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npm.taobao.org/compressible/download/compressible-2.0.18.tgz?cache=0&sync_timestamp=1578286264482&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcompressible%2Fdownload%2Fcompressible-2.0.18.tgz", + "integrity": "sha1-r1PMprBw1MPAdQ+9dyhqbXzEb7o=", + "dev": true, + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npm.taobao.org/compression/download/compression-1.7.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcompression%2Fdownload%2Fcompression-1.7.4.tgz", + "integrity": "sha1-lVI+/xcMpXwpoMpB5v4TH0Hlu48=", + "dev": true, + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/bytes/download/bytes-3.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbytes%2Fdownload%2Fbytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npm.taobao.org/concat-stream/download/concat-stream-1.6.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconcat-stream%2Fdownload%2Fconcat-stream-1.6.2.tgz", + "integrity": "sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ=", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/condense-newlines": { + "version": "0.2.1", + "resolved": "https://registry.npm.taobao.org/condense-newlines/download/condense-newlines-0.2.1.tgz", + "integrity": "sha1-PemFVTE5R10yUCyDsC9gaE0kxV8=", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-whitespace": "^0.3.0", + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/condense-newlines/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/condense-newlines/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/config-chain": { + "version": "1.1.12", + "resolved": "https://registry.npm.taobao.org/config-chain/download/config-chain-1.1.12.tgz", + "integrity": "sha1-D96NCRIA616AjK8l/mGMAvSOTvo=", + "dev": true, + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npm.taobao.org/connect-history-api-fallback/download/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha1-izIIk1kwjRERFdgcrT/Oq4iPl7w=", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/console-browserify/download/console-browserify-1.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconsole-browserify%2Fdownload%2Fconsole-browserify-1.2.0.tgz", + "integrity": "sha1-ZwY871fOts9Jk6KrOlWECujEkzY=", + "dev": true + }, + "node_modules/consolidate": { + "version": "0.15.1", + "resolved": "https://registry.npm.taobao.org/consolidate/download/consolidate-0.15.1.tgz?cache=0&sync_timestamp=1599596647062&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconsolidate%2Fdownload%2Fconsolidate-0.15.1.tgz", + "integrity": "sha1-IasEMjXHGgfUXZqtmFk7DbpWurc=", + "dev": true, + "dependencies": { + "bluebird": "^3.1.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/constants-browserify/download/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "node_modules/content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npm.taobao.org/content-disposition/download/content-disposition-0.5.3.tgz", + "integrity": "sha1-4TDK9+cnkIfFYWwgB9BIVpiYT70=", + "dev": true, + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/content-type/download/content-type-1.0.4.tgz", + "integrity": "sha1-4TjMdeBAxyexlm/l5fjJruJW/js=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npm.taobao.org/convert-source-map/download/convert-source-map-1.7.0.tgz?cache=0&sync_timestamp=1573003637425&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconvert-source-map%2Fdownload%2Fconvert-source-map-1.7.0.tgz", + "integrity": "sha1-F6LLiC1/d9NJBYXizmxSRCSjpEI=", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/cookie": { + "version": "0.4.0", + "resolved": "https://registry.npm.taobao.org/cookie/download/cookie-0.4.0.tgz?cache=0&sync_timestamp=1587525865178&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcookie%2Fdownload%2Fcookie-0.4.0.tgz", + "integrity": "sha1-vrQ35wIrO21JAZ0IhmUwPr6cFLo=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npm.taobao.org/cookie-signature/download/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "node_modules/copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npm.taobao.org/copy-concurrently/download/copy-concurrently-1.0.5.tgz", + "integrity": "sha1-kilzmMrjSTf8r9bsgTnBgFHwteA=", + "dev": true, + "dependencies": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + } + }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npm.taobao.org/copy-descriptor/download/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/copy-webpack-plugin": { + "version": "5.1.2", + "resolved": "https://registry.npm.taobao.org/copy-webpack-plugin/download/copy-webpack-plugin-5.1.2.tgz?cache=0&sync_timestamp=1598891385026&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcopy-webpack-plugin%2Fdownload%2Fcopy-webpack-plugin-5.1.2.tgz", + "integrity": "sha1-ioieHcr6bJHGzUvhrRWPHTgjuuI=", + "dev": true, + "dependencies": { + "cacache": "^12.0.3", + "find-cache-dir": "^2.1.0", + "glob-parent": "^3.1.0", + "globby": "^7.1.1", + "is-glob": "^4.0.1", + "loader-utils": "^1.2.3", + "minimatch": "^3.0.4", + "normalize-path": "^3.0.0", + "p-limit": "^2.2.1", + "schema-utils": "^1.0.0", + "serialize-javascript": "^4.0.0", + "webpack-log": "^2.0.0" + }, + "engines": { + "node": ">= 6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/glob-parent/download/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/globby": { + "version": "7.1.1", + "resolved": "https://registry.npm.taobao.org/globby/download/globby-7.1.1.tgz?cache=0&sync_timestamp=1591083783605&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobby%2Fdownload%2Fglobby-7.1.1.tgz", + "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", + "dev": true, + "dependencies": { + "array-union": "^1.0.1", + "dir-glob": "^2.0.0", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/copy-webpack-plugin/node_modules/ignore": { + "version": "3.3.10", + "resolved": "https://registry.npm.taobao.org/ignore/download/ignore-3.3.10.tgz?cache=0&sync_timestamp=1590809289115&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fignore%2Fdownload%2Fignore-3.3.10.tgz", + "integrity": "sha1-Cpf7h2mG6AgcYxFg+PnziRV/AEM=", + "dev": true + }, + "node_modules/copy-webpack-plugin/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz?cache=0&sync_timestamp=1581697613983&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpify%2Fdownload%2Fpify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/copy-webpack-plugin/node_modules/schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz?cache=0&sync_timestamp=1598871750711&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-1.0.0.tgz", + "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=", + "dev": true, + "dependencies": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/copy-webpack-plugin/node_modules/slash": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/slash/download/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/core-js": { + "version": "3.6.5", + "resolved": "https://registry.npm.taobao.org/core-js/download/core-js-3.6.5.tgz?cache=0&sync_timestamp=1586450269267&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcore-js%2Fdownload%2Fcore-js-3.6.5.tgz", + "integrity": "sha1-c5XcJzrzf7LlDpvT2f6EEoUjHRo=", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.6.5", + "resolved": "https://registry.npm.taobao.org/core-js-compat/download/core-js-compat-3.6.5.tgz", + "integrity": "sha1-KlHZpOJd/W5pAlGqgfmePAVIHxw=", + "dev": true, + "dependencies": { + "browserslist": "^4.8.5", + "semver": "7.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-7.0.0.tgz", + "integrity": "sha1-XzyjV2HkfgWyBsba/yz4FPAxa44=", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "node_modules/cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npm.taobao.org/cosmiconfig/download/cosmiconfig-5.2.1.tgz?cache=0&sync_timestamp=1596310819353&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcosmiconfig%2Fdownload%2Fcosmiconfig-5.2.1.tgz", + "integrity": "sha1-BA9yaAnFked6F8CjYmykW08Wixo=", + "dev": true, + "dependencies": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cosmiconfig/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/parse-json/download/parse-json-4.0.0.tgz?cache=0&sync_timestamp=1598129182781&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse-json%2Fdownload%2Fparse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npm.taobao.org/create-ecdh/download/create-ecdh-4.0.4.tgz", + "integrity": "sha1-1uf0v/pmc2CFoHYv06YyaE2rzE4=", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + } + }, + "node_modules/create-ecdh/node_modules/bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.11.9.tgz", + "integrity": "sha1-JtVWgpRY+dHoH8SJUkk9C6NQeCg=", + "dev": true + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/create-hash/download/create-hash-1.2.0.tgz", + "integrity": "sha1-iJB4rxGmN1a8+1m9IhmWvjqe8ZY=", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npm.taobao.org/create-hmac/download/create-hmac-1.1.7.tgz", + "integrity": "sha1-aRcMeLOrlXFHsriwRXLkfq0iQ/8=", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-6.0.5.tgz", + "integrity": "sha1-Sl7Hxk364iw6FBJNus3uhG2Ay8Q=", + "dev": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npm.taobao.org/crypto-browserify/download/crypto-browserify-3.12.0.tgz", + "integrity": "sha1-OWz58xN/A+S45TLFj2mCVOAPgOw=", + "dev": true, + "dependencies": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + }, + "engines": { + "node": "*" + } + }, + "node_modules/css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npm.taobao.org/css-color-names/download/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/css-declaration-sorter": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/css-declaration-sorter/download/css-declaration-sorter-4.0.1.tgz", + "integrity": "sha1-wZiUD2OnbX42wecQGLABchBUyyI=", + "dev": true, + "dependencies": { + "postcss": "^7.0.1", + "timsort": "^0.3.0" + }, + "engines": { + "node": ">4" + } + }, + "node_modules/css-loader": { + "version": "3.6.0", + "resolved": "https://registry.npm.taobao.org/css-loader/download/css-loader-3.6.0.tgz", + "integrity": "sha1-Lkssfm4tJ/jI8o9hv/zS5ske9kU=", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "cssesc": "^3.0.0", + "icss-utils": "^4.1.1", + "loader-utils": "^1.2.3", + "normalize-path": "^3.0.0", + "postcss": "^7.0.32", + "postcss-modules-extract-imports": "^2.0.0", + "postcss-modules-local-by-default": "^3.0.2", + "postcss-modules-scope": "^2.2.0", + "postcss-modules-values": "^3.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^2.7.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/css-loader/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz", + "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/css-loader/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz", + "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/css-select": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/css-select/download/css-select-2.1.0.tgz?cache=0&sync_timestamp=1573341911322&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss-select%2Fdownload%2Fcss-select-2.1.0.tgz", + "integrity": "sha1-ajRlM1ZjWTSoG6ymjQJVQyEF2+8=", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "node_modules/css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npm.taobao.org/css-select-base-adapter/download/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha1-Oy/0lyzDYquIVhUHqVQIoUMhNdc=", + "dev": true + }, + "node_modules/css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npm.taobao.org/css-tree/download/css-tree-1.0.0-alpha.37.tgz?cache=0&sync_timestamp=1575583846685&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss-tree%2Fdownload%2Fcss-tree-1.0.0-alpha.37.tgz", + "integrity": "sha1-mL69YsTB2flg7DQM+fdSLjBwmiI=", + "dev": true, + "dependencies": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/css-tree/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/css-what": { + "version": "3.3.0", + "resolved": "https://registry.npm.taobao.org/css-what/download/css-what-3.3.0.tgz?cache=0&sync_timestamp=1590961613221&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss-what%2Fdownload%2Fcss-what-3.3.0.tgz", + "integrity": "sha1-EP7Glqns4uWRrHctdZqsq6w4zTk=", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/cssesc/download/cssesc-3.0.0.tgz", + "integrity": "sha1-N3QZGZA7hoVl4cCep0dEXNGJg+4=", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "4.1.10", + "resolved": "https://registry.npm.taobao.org/cssnano/download/cssnano-4.1.10.tgz?cache=0&sync_timestamp=1599670118397&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcssnano%2Fdownload%2Fcssnano-4.1.10.tgz", + "integrity": "sha1-CsQfCxPRPUZUh+ERt3jULaYxuLI=", + "dev": true, + "dependencies": { + "cosmiconfig": "^5.0.0", + "cssnano-preset-default": "^4.0.7", + "is-resolvable": "^1.0.0", + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/cssnano-preset-default": { + "version": "4.0.7", + "resolved": "https://registry.npm.taobao.org/cssnano-preset-default/download/cssnano-preset-default-4.0.7.tgz?cache=0&sync_timestamp=1599670156743&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcssnano-preset-default%2Fdownload%2Fcssnano-preset-default-4.0.7.tgz", + "integrity": "sha1-UexmLM/KD4izltzZZ5zbkxvhf3Y=", + "dev": true, + "dependencies": { + "css-declaration-sorter": "^4.0.1", + "cssnano-util-raw-cache": "^4.0.1", + "postcss": "^7.0.0", + "postcss-calc": "^7.0.1", + "postcss-colormin": "^4.0.3", + "postcss-convert-values": "^4.0.1", + "postcss-discard-comments": "^4.0.2", + "postcss-discard-duplicates": "^4.0.2", + "postcss-discard-empty": "^4.0.1", + "postcss-discard-overridden": "^4.0.1", + "postcss-merge-longhand": "^4.0.11", + "postcss-merge-rules": "^4.0.3", + "postcss-minify-font-values": "^4.0.2", + "postcss-minify-gradients": "^4.0.2", + "postcss-minify-params": "^4.0.2", + "postcss-minify-selectors": "^4.0.2", + "postcss-normalize-charset": "^4.0.1", + "postcss-normalize-display-values": "^4.0.2", + "postcss-normalize-positions": "^4.0.2", + "postcss-normalize-repeat-style": "^4.0.2", + "postcss-normalize-string": "^4.0.2", + "postcss-normalize-timing-functions": "^4.0.2", + "postcss-normalize-unicode": "^4.0.1", + "postcss-normalize-url": "^4.0.1", + "postcss-normalize-whitespace": "^4.0.2", + "postcss-ordered-values": "^4.1.2", + "postcss-reduce-initial": "^4.0.3", + "postcss-reduce-transforms": "^4.0.2", + "postcss-svgo": "^4.0.2", + "postcss-unique-selectors": "^4.0.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/cssnano-util-get-arguments": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/cssnano-util-get-arguments/download/cssnano-util-get-arguments-4.0.0.tgz", + "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/cssnano-util-get-match": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/cssnano-util-get-match/download/cssnano-util-get-match-4.0.0.tgz", + "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/cssnano-util-raw-cache": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/cssnano-util-raw-cache/download/cssnano-util-raw-cache-4.0.1.tgz", + "integrity": "sha1-sm1f1fcqEd/np4RvtMZyYPlr8oI=", + "dev": true, + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/cssnano-util-same-parent": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/cssnano-util-same-parent/download/cssnano-util-same-parent-4.0.1.tgz", + "integrity": "sha1-V0CC+yhZ0ttDOFWDXZqEVuoYu/M=", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/csso": { + "version": "4.0.3", + "resolved": "https://registry.npm.taobao.org/csso/download/csso-4.0.3.tgz?cache=0&sync_timestamp=1585052130344&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcsso%2Fdownload%2Fcsso-4.0.3.tgz", + "integrity": "sha1-DZmF3IUsfMKyys+74QeQFNGo6QM=", + "dev": true, + "dependencies": { + "css-tree": "1.0.0-alpha.39" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "1.0.0-alpha.39", + "resolved": "https://registry.npm.taobao.org/css-tree/download/css-tree-1.0.0-alpha.39.tgz?cache=0&sync_timestamp=1575583846685&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss-tree%2Fdownload%2Fcss-tree-1.0.0-alpha.39.tgz", + "integrity": "sha1-K/8//huz93bPfu/ZHuXLp3oUnus=", + "dev": true, + "dependencies": { + "mdn-data": "2.0.6", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.6", + "resolved": "https://registry.npm.taobao.org/mdn-data/download/mdn-data-2.0.6.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmdn-data%2Fdownload%2Fmdn-data-2.0.6.tgz", + "integrity": "sha1-hS3GD8ql2qLoz2yRicRA7T4EKXg=", + "dev": true + }, + "node_modules/csso/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cssom": { + "version": "0.4.4", + "resolved": "https://registry.npm.taobao.org/cssom/download/cssom-0.4.4.tgz", + "integrity": "sha1-WmbPk9LQtmHYC/akT7ZfXC5OChA=", + "dev": true + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npm.taobao.org/cssstyle/download/cssstyle-2.3.0.tgz", + "integrity": "sha1-/2ZaDdvcMYZLCWR/NBY0Q9kLCFI=", + "dev": true, + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npm.taobao.org/cssom/download/cssom-0.3.8.tgz", + "integrity": "sha1-nxJ29bK0Y/IRTT8sdSUK+MGjb0o=", + "dev": true + }, + "node_modules/cyclist": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/cyclist/download/cyclist-1.0.1.tgz", + "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", + "dev": true + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npm.taobao.org/dashdash/download/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/data-urls": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/data-urls/download/data-urls-1.1.0.tgz", + "integrity": "sha1-Fe4Fgrql4iu1nHcUDaj5x2lju/4=", + "dev": true, + "dependencies": { + "abab": "^2.0.0", + "whatwg-mimetype": "^2.2.0", + "whatwg-url": "^7.0.0" + } + }, + "node_modules/de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/de-indent/download/de-indent-1.0.2.tgz", + "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=", + "dev": true + }, + "node_modules/debug": { + "version": "4.1.1", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.1.1.tgz", + "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=", + "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npm.taobao.org/decode-uri-component/download/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npm.taobao.org/deep-eql/download/deep-eql-3.0.1.tgz", + "integrity": "sha1-38lARACtHI/gI+faHfHBR8S0RN8=", + "dev": true, + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/deep-equal/download/deep-equal-1.1.1.tgz", + "integrity": "sha1-tcmMlCzv+vfLBR4k4UNKJaLmB2o=", + "dev": true, + "dependencies": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npm.taobao.org/deep-is/download/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "node_modules/deepmerge": { + "version": "1.5.2", + "resolved": "https://registry.npm.taobao.org/deepmerge/download/deepmerge-1.5.2.tgz?cache=0&sync_timestamp=1572279720382&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdeepmerge%2Fdownload%2Fdeepmerge-1.5.2.tgz", + "integrity": "sha1-EEmdhohEza1P7ghC34x/bwyVp1M=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-gateway": { + "version": "5.0.5", + "resolved": "https://registry.npm.taobao.org/default-gateway/download/default-gateway-5.0.5.tgz", + "integrity": "sha1-T9a9XShV05s0zFpZUFSG6ar8mxA=", + "dev": true, + "dependencies": { + "execa": "^3.3.0" + }, + "engines": { + "node": "^8.12.0 || >=9.7.0" + } + }, + "node_modules/default-gateway/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-7.0.3.tgz", + "integrity": "sha1-9zqFudXUHQRVUcF34ogtSshXKKY=", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/default-gateway/node_modules/execa": { + "version": "3.4.0", + "resolved": "https://registry.npm.taobao.org/execa/download/execa-3.4.0.tgz?cache=0&sync_timestamp=1594145085955&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexeca%2Fdownload%2Fexeca-3.4.0.tgz", + "integrity": "sha1-wI7UVQ72XYWPrCaf/IVyRG8364k=", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "p-finally": "^2.0.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": "^8.12.0 || >=9.7.0" + } + }, + "node_modules/default-gateway/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npm.taobao.org/get-stream/download/get-stream-5.2.0.tgz?cache=0&sync_timestamp=1597056502934&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-stream%2Fdownload%2Fget-stream-5.2.0.tgz", + "integrity": "sha1-SWaheV7lrOZecGxLe+txJX1uItM=", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-gateway/node_modules/is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/is-stream/download/is-stream-2.0.0.tgz", + "integrity": "sha1-venDJoDW+uBBKdasnZIc54FfeOM=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/default-gateway/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-2.1.0.tgz?cache=0&sync_timestamp=1596095644798&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmimic-fn%2Fdownload%2Fmimic-fn-2.1.0.tgz", + "integrity": "sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs=", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/default-gateway/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/npm-run-path/download/npm-run-path-4.0.1.tgz?cache=0&sync_timestamp=1577053500910&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnpm-run-path%2Fdownload%2Fnpm-run-path-4.0.1.tgz", + "integrity": "sha1-t+zR5e1T2o43pV4cImnguX7XSOo=", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/default-gateway/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npm.taobao.org/onetime/download/onetime-5.1.2.tgz?cache=0&sync_timestamp=1597005345612&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fonetime%2Fdownload%2Fonetime-5.1.2.tgz", + "integrity": "sha1-0Oluu1awdHbfHdnEgG5SN5hcpF4=", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-gateway/node_modules/p-finally": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/p-finally/download/p-finally-2.0.1.tgz", + "integrity": "sha1-vW/KqcVZoJa2gIBvTWV7Pw8kBWE=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/default-gateway/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/path-key/download/path-key-3.1.1.tgz", + "integrity": "sha1-WB9q3mWMu6ZaDTOA3ndTKVBU83U=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/default-gateway/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/shebang-command/download/shebang-command-2.0.0.tgz", + "integrity": "sha1-zNCvT4g1+9wmW4JGGq8MNmY/NOo=", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/default-gateway/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/shebang-regex/download/shebang-regex-3.0.0.tgz", + "integrity": "sha1-rhbxZE2HPsrYQ7AwexQzYtTEIXI=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/default-gateway/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/which/download/which-2.0.2.tgz?cache=0&sync_timestamp=1574116720213&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhich%2Fdownload%2Fwhich-2.0.2.tgz", + "integrity": "sha1-fGqN0KY2oDJ+ELWckobu6T8/UbE=", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/defaults": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/defaults/download/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + } + }, + "node_modules/define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npm.taobao.org/define-properties/download/define-properties-1.1.3.tgz", + "integrity": "sha1-z4jabL7ib+bbcJT2HYcMvYTO6fE=", + "dev": true, + "dependencies": { + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-2.0.2.tgz", + "integrity": "sha1-1Flono1lS6d+AqgX+HENcCyxbp0=", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del": { + "version": "4.1.1", + "resolved": "https://registry.npm.taobao.org/del/download/del-4.1.1.tgz", + "integrity": "sha1-no8RciLqRKMf86FWwEm5kFKp8LQ=", + "dev": true, + "dependencies": { + "@types/glob": "^7.1.1", + "globby": "^6.1.0", + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/del/node_modules/globby": { + "version": "6.1.0", + "resolved": "https://registry.npm.taobao.org/globby/download/globby-6.1.0.tgz?cache=0&sync_timestamp=1591083783605&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobby%2Fdownload%2Fglobby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "dependencies": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del/node_modules/globby/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz?cache=0&sync_timestamp=1581697613983&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpify%2Fdownload%2Fpify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del/node_modules/p-map": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/p-map/download/p-map-2.1.0.tgz", + "integrity": "sha1-MQko/u+cnsxltosXaTAYpmXOoXU=", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/depd/download/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/des.js": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/des.js/download/des.js-1.0.1.tgz", + "integrity": "sha1-U4IULhvcU/hdhtU+X0qn3rkeCEM=", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/destroy/download/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "node_modules/detect-node": { + "version": "2.0.4", + "resolved": "https://registry.npm.taobao.org/detect-node/download/detect-node-2.0.4.tgz", + "integrity": "sha1-AU7o+PZpxcWAI9pkuBecCDooxGw=", + "dev": true + }, + "node_modules/diff": { + "version": "3.5.0", + "resolved": "https://registry.npm.taobao.org/diff/download/diff-3.5.0.tgz?cache=0&sync_timestamp=1578890967183&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdiff%2Fdownload%2Fdiff-3.5.0.tgz", + "integrity": "sha1-gAwN0eCov7yVg1wgKtIg/jF+WhI=", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npm.taobao.org/diffie-hellman/download/diffie-hellman-5.0.3.tgz", + "integrity": "sha1-QOjumPVaIUlgcUaSHGPhrl89KHU=", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "node_modules/diffie-hellman/node_modules/bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.11.9.tgz", + "integrity": "sha1-JtVWgpRY+dHoH8SJUkk9C6NQeCg=", + "dev": true + }, + "node_modules/dir-glob": { + "version": "2.2.2", + "resolved": "https://registry.npm.taobao.org/dir-glob/download/dir-glob-2.2.2.tgz", + "integrity": "sha1-+gnwaUFTyJGLGLoN6vrpR2n8UMQ=", + "dev": true, + "dependencies": { + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/dns-equal/download/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true + }, + "node_modules/dns-packet": { + "version": "1.3.1", + "resolved": "https://registry.npm.taobao.org/dns-packet/download/dns-packet-1.3.1.tgz", + "integrity": "sha1-EqpCaYEHW+UAuRDu3NC0fdfe2lo=", + "dev": true, + "dependencies": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/dns-txt/download/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dev": true, + "dependencies": { + "buffer-indexof": "^1.0.0" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/doctrine/download/doctrine-3.0.0.tgz", + "integrity": "sha1-rd6+rXKmV023g2OdyHoSF3OXOWE=", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npm.taobao.org/dom-converter/download/dom-converter-0.2.0.tgz", + "integrity": "sha1-ZyGp2u4uKTaClVtq/kFncWJ7t2g=", + "dev": true, + "dependencies": { + "utila": "~0.4" + } + }, + "node_modules/dom-event-types": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/dom-event-types/download/dom-event-types-1.0.0.tgz", + "integrity": "sha1-WDCgop4b+Df+UKcM2ApZcjKBPK4=", + "dev": true + }, + "node_modules/dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npm.taobao.org/dom-serializer/download/dom-serializer-0.2.2.tgz", + "integrity": "sha1-GvuB9TNxcXXUeGVd68XjMtn5u1E=", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "node_modules/dom-serializer/node_modules/domelementtype": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/domelementtype/download/domelementtype-2.0.1.tgz", + "integrity": "sha1-H4vf6R9aeAYydOgDtL3O326U+U0=", + "dev": true + }, + "node_modules/domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/domain-browser/download/domain-browser-1.2.0.tgz?cache=0&sync_timestamp=1599393068432&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdomain-browser%2Fdownload%2Fdomain-browser-1.2.0.tgz", + "integrity": "sha1-PTH1AZGmdJ3RN1p/Ui6CPULlTto=", + "dev": true, + "engines": { + "node": ">=0.4", + "npm": ">=1.2" + } + }, + "node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npm.taobao.org/domelementtype/download/domelementtype-1.3.1.tgz", + "integrity": "sha1-0EjESzew0Qp/Kj1f7j9DM9eQSB8=", + "dev": true + }, + "node_modules/domexception": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/domexception/download/domexception-1.0.1.tgz", + "integrity": "sha1-k3RCZEymoxJh7zbj7Gd/6AVYLJA=", + "dev": true, + "dependencies": { + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npm.taobao.org/domhandler/download/domhandler-2.4.2.tgz?cache=0&sync_timestamp=1564708909977&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdomhandler%2Fdownload%2Fdomhandler-2.4.2.tgz", + "integrity": "sha1-iAUJfpM9ZehVRvcm1g9euItE+AM=", + "dev": true, + "dependencies": { + "domelementtype": "1" + } + }, + "node_modules/domready": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/domready/-/domready-1.0.8.tgz", + "integrity": "sha1-kfJS5Ze2Wvd+dFriTdAYXV4m1Yw=", + "dev": true + }, + "node_modules/domutils": { + "version": "1.7.0", + "resolved": "https://registry.npm.taobao.org/domutils/download/domutils-1.7.0.tgz?cache=0&sync_timestamp=1597680509643&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdomutils%2Fdownload%2Fdomutils-1.7.0.tgz", + "integrity": "sha1-Vuo0HoNOBuZ0ivehyyXaZ+qfjCo=", + "dev": true, + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npm.taobao.org/dot-prop/download/dot-prop-5.3.0.tgz", + "integrity": "sha1-kMzOcIzZzYLMTcjD3dmr3VWyDog=", + "dev": true, + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dotenv": { + "version": "8.2.0", + "resolved": "https://registry.npm.taobao.org/dotenv/download/dotenv-8.2.0.tgz?cache=0&sync_timestamp=1571190696472&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdotenv%2Fdownload%2Fdotenv-8.2.0.tgz", + "integrity": "sha1-l+YZJZradQ7qPk6j4mvO6lQksWo=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npm.taobao.org/dotenv-expand/download/dotenv-expand-5.1.0.tgz", + "integrity": "sha1-P7rwIL/XlIhAcuomsel5HUWmKfA=", + "dev": true + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npm.taobao.org/duplexer/download/duplexer-0.1.2.tgz", + "integrity": "sha1-Or5DrvODX4rgd9E23c4PJ2sEAOY=", + "dev": true + }, + "node_modules/duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npm.taobao.org/duplexify/download/duplexify-3.7.1.tgz", + "integrity": "sha1-Kk31MX9sz9kfhtb9JdjYoQO4gwk=", + "dev": true, + "dependencies": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "node_modules/easy-stack": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/easy-stack/download/easy-stack-1.0.0.tgz", + "integrity": "sha1-EskbMIWjfwuqM26UhurEv5Tj54g=", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npm.taobao.org/ecc-jsbn/download/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/editorconfig": { + "version": "0.15.3", + "resolved": "https://registry.npm.taobao.org/editorconfig/download/editorconfig-0.15.3.tgz", + "integrity": "sha1-vvhMTnX7jcsM5c7o79UcFZmb78U=", + "dev": true, + "dependencies": { + "commander": "^2.19.0", + "lru-cache": "^4.1.5", + "semver": "^5.6.0", + "sigmund": "^1.0.1" + }, + "bin": { + "editorconfig": "bin/editorconfig" + } + }, + "node_modules/editorconfig/node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npm.taobao.org/lru-cache/download/lru-cache-4.1.5.tgz?cache=0&sync_timestamp=1594427582110&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flru-cache%2Fdownload%2Flru-cache-4.1.5.tgz", + "integrity": "sha1-i75Q6oW+1ZvJ4z3KuCNe6bz0Q80=", + "dev": true, + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/editorconfig/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/ee-first/download/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "node_modules/ejs": { + "version": "2.7.4", + "resolved": "https://registry.npm.taobao.org/ejs/download/ejs-2.7.4.tgz?cache=0&sync_timestamp=1597678506855&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fejs%2Fdownload%2Fejs-2.7.4.tgz", + "integrity": "sha1-SGYSh1c9zFPjZsehrlLDoSDuybo=", + "dev": true, + "hasInstallScript": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.3.564", + "resolved": "https://registry.npm.taobao.org/electron-to-chromium/download/electron-to-chromium-1.3.564.tgz", + "integrity": "sha1-6cMZrkN7Pri78+O65L6tWiGUWWE=", + "dev": true + }, + "node_modules/element-ui": { + "version": "2.13.2", + "resolved": "https://registry.npmjs.org/element-ui/-/element-ui-2.13.2.tgz", + "integrity": "sha512-r761DRPssMPKDiJZWFlG+4e4vr0cRG/atKr3Eqr8Xi0tQMNbtmYU1QXvFnKiFPFFGkgJ6zS6ASkG+sellcoHlQ==", + "dependencies": { + "async-validator": "~1.8.1", + "babel-helper-vue-jsx-merge-props": "^2.0.0", + "deepmerge": "^1.2.0", + "normalize-wheel": "^1.0.1", + "resize-observer-polyfill": "^1.5.0", + "throttle-debounce": "^1.0.1" + }, + "peerDependencies": { + "vue": "^2.5.17" + } + }, + "node_modules/elliptic": { + "version": "6.5.3", + "resolved": "https://registry.npm.taobao.org/elliptic/download/elliptic-6.5.3.tgz", + "integrity": "sha1-y1nrLv2vc6C9eMzXAVpirW4Pk9Y=", + "dev": true, + "dependencies": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.11.9.tgz", + "integrity": "sha1-JtVWgpRY+dHoH8SJUkk9C6NQeCg=", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-8.0.0.tgz", + "integrity": "sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc=", + "dev": true + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/emojis-list/download/emojis-list-3.0.0.tgz", + "integrity": "sha1-VXBmIEatKeLpFucariYKvf9Pang=", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/encodeurl/download/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npm.taobao.org/end-of-stream/download/end-of-stream-1.4.4.tgz?cache=0&sync_timestamp=1569416367473&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fend-of-stream%2Fdownload%2Fend-of-stream-1.4.4.tgz", + "integrity": "sha1-WuZKX0UFe682JuwU2gyl5LJDHrA=", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "4.3.0", + "resolved": "https://registry.npm.taobao.org/enhanced-resolve/download/enhanced-resolve-4.3.0.tgz?cache=0&sync_timestamp=1594972208431&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fenhanced-resolve%2Fdownload%2Fenhanced-resolve-4.3.0.tgz", + "integrity": "sha1-O4BvO/r8HsfeaVUe+TzKRsFwQSY=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/enhanced-resolve/node_modules/memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npm.taobao.org/memory-fs/download/memory-fs-0.5.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmemory-fs%2Fdownload%2Fmemory-fs-0.5.0.tgz", + "integrity": "sha1-MkwBKIuIZSlm0WHbd4OHIIRajjw=", + "dev": true, + "dependencies": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + }, + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + } + }, + "node_modules/entities": { + "version": "2.0.3", + "resolved": "https://registry.npm.taobao.org/entities/download/entities-2.0.3.tgz", + "integrity": "sha1-XEh+V0Krk8Fau12iJ1m4WQ7AO38=", + "dev": true + }, + "node_modules/errno": { + "version": "0.1.7", + "resolved": "https://registry.npm.taobao.org/errno/download/errno-0.1.7.tgz", + "integrity": "sha1-RoTXF3mtOa8Xfj8AeZb3xnyFJhg=", + "dev": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npm.taobao.org/error-ex/download/error-ex-1.3.2.tgz", + "integrity": "sha1-tKxAZIEH/c3PriQvQovqihTU8b8=", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/error-stack-parser": { + "version": "2.0.6", + "resolved": "https://registry.npm.taobao.org/error-stack-parser/download/error-stack-parser-2.0.6.tgz?cache=0&sync_timestamp=1578288503034&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ferror-stack-parser%2Fdownload%2Ferror-stack-parser-2.0.6.tgz", + "integrity": "sha1-WpmnB716TFinl5AtSNgoA+3mqtg=", + "dev": true, + "dependencies": { + "stackframe": "^1.1.1" + } + }, + "node_modules/es-abstract": { + "version": "1.17.6", + "resolved": "https://registry.npm.taobao.org/es-abstract/download/es-abstract-1.17.6.tgz?cache=0&sync_timestamp=1597446082160&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fes-abstract%2Fdownload%2Fes-abstract-1.17.6.tgz", + "integrity": "sha1-kUIHFweFeyysx7iey2cDFsPi1So=", + "dev": true, + "dependencies": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.0", + "is-regex": "^1.1.0", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npm.taobao.org/es-to-primitive/download/es-to-primitive-1.2.1.tgz", + "integrity": "sha1-5VzUyc3BiLzvsDs2bHNjI/xciYo=", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escalade": { + "version": "3.0.2", + "resolved": "https://registry.npm.taobao.org/escalade/download/escalade-3.0.2.tgz?cache=0&sync_timestamp=1594742958135&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fescalade%2Fdownload%2Fescalade-3.0.2.tgz", + "integrity": "sha1-algNcO24eIDyK0yR0NVgeN9pYsQ=", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/escape-html/download/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npm.taobao.org/escodegen/download/escodegen-1.14.3.tgz?cache=0&sync_timestamp=1596669832613&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fescodegen%2Fdownload%2Fescodegen-1.14.3.tgz", + "integrity": "sha1-TnuB+6YVgdyXWC7XjKt/Do1j9QM=", + "dev": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=4.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint": { + "version": "6.8.0", + "resolved": "https://registry.npm.taobao.org/eslint/download/eslint-6.8.0.tgz?cache=0&sync_timestamp=1598991576538&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint%2Fdownload%2Feslint-6.8.0.tgz", + "integrity": "sha1-YiYtZylzn5J1cjgkMC+yJ8jJP/s=", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.10.0", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^1.4.3", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.1.2", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "inquirer": "^7.0.0", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.14", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.3", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "semver": "^6.1.2", + "strip-ansi": "^5.2.0", + "strip-json-comments": "^3.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-loader": { + "version": "2.2.1", + "resolved": "https://registry.npm.taobao.org/eslint-loader/download/eslint-loader-2.2.1.tgz", + "integrity": "sha1-KLnBLaVAV68IReKmEScBova/gzc=", + "deprecated": "This loader has been deprecated. Please use eslint-webpack-plugin", + "dev": true, + "dependencies": { + "loader-fs-cache": "^1.0.0", + "loader-utils": "^1.0.2", + "object-assign": "^4.0.1", + "object-hash": "^1.1.4", + "rimraf": "^2.6.1" + }, + "peerDependencies": { + "eslint": ">=1.6.0 <7.0.0", + "webpack": ">=2.0.0 <5.0.0" + } + }, + "node_modules/eslint-plugin-vue": { + "version": "6.2.2", + "resolved": "https://registry.npm.taobao.org/eslint-plugin-vue/download/eslint-plugin-vue-6.2.2.tgz?cache=0&sync_timestamp=1598607180295&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-plugin-vue%2Fdownload%2Feslint-plugin-vue-6.2.2.tgz", + "integrity": "sha1-J/7NmjokeJsPER7N1UCp5WGY4P4=", + "dev": true, + "dependencies": { + "natural-compare": "^1.4.0", + "semver": "^5.6.0", + "vue-eslint-parser": "^7.0.0" + }, + "engines": { + "node": ">=8.10" + }, + "peerDependencies": { + "eslint": "^5.0.0 || ^6.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npm.taobao.org/eslint-scope/download/eslint-scope-4.0.3.tgz?cache=0&sync_timestamp=1591269986906&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-scope%2Fdownload%2Feslint-scope-4.0.3.tgz", + "integrity": "sha1-ygODMxD2iJoyZHgaqC5j65z+eEg=", + "dev": true, + "dependencies": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "1.4.3", + "resolved": "https://registry.npm.taobao.org/eslint-utils/download/eslint-utils-1.4.3.tgz?cache=0&sync_timestamp=1592222145079&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-utils%2Fdownload%2Feslint-utils-1.4.3.tgz", + "integrity": "sha1-dP7HxU0Hdrb2fgJRBAtYBlZOmB8=", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npm.taobao.org/eslint-visitor-keys/download/eslint-visitor-keys-1.3.0.tgz?cache=0&sync_timestamp=1597435068105&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-visitor-keys%2Fdownload%2Feslint-visitor-keys-1.3.0.tgz", + "integrity": "sha1-MOvR73wv3/AcOk8VEESvJfqwUj4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "5.1.0", + "resolved": "https://registry.npm.taobao.org/eslint-scope/download/eslint-scope-5.1.0.tgz?cache=0&sync_timestamp=1591269986906&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-scope%2Fdownload%2Feslint-scope-5.1.0.tgz", + "integrity": "sha1-0Plx3+WcaeDK2mhLI9Sdv4JgDOU=", + "dev": true, + "dependencies": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "12.4.0", + "resolved": "https://registry.npm.taobao.org/globals/download/globals-12.4.0.tgz", + "integrity": "sha1-oYgTV2pBsAokqX5/gVkYwuGZJfg=", + "dev": true, + "dependencies": { + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/import-fresh": { + "version": "3.2.1", + "resolved": "https://registry.npm.taobao.org/import-fresh/download/import-fresh-3.2.1.tgz", + "integrity": "sha1-Yz/2GFBueTr1rJG/SLcmd+FcvmY=", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/resolve-from/download/resolve-from-4.0.0.tgz", + "integrity": "sha1-SrzYUq0y3Xuqv+m0DgCjbbXzkuY=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz", + "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz", + "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint/node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-3.1.1.tgz?cache=0&sync_timestamp=1594567532500&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-json-comments%2Fdownload%2Fstrip-json-comments-3.1.1.tgz", + "integrity": "sha1-MfEoGzgyYwQ0gxwxDAHMzajL4AY=", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npm.taobao.org/type-fest/download/type-fest-0.8.1.tgz", + "integrity": "sha1-CeJJ696FHTseSNJ8EFREZn8XuD0=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/espree": { + "version": "6.2.1", + "resolved": "https://registry.npm.taobao.org/espree/download/espree-6.2.1.tgz?cache=0&sync_timestamp=1598129987642&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fespree%2Fdownload%2Fespree-6.2.1.tgz", + "integrity": "sha1-d/xy4f10SiBSwg84pbV1gy6Cc0o=", + "dev": true, + "dependencies": { + "acorn": "^7.1.1", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/espree/node_modules/acorn": { + "version": "7.4.0", + "resolved": "https://registry.npm.taobao.org/acorn/download/acorn-7.4.0.tgz?cache=0&sync_timestamp=1597235774928&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn%2Fdownload%2Facorn-7.4.0.tgz", + "integrity": "sha1-4a1IbmxUUBY0xsOXxcEh2qODYHw=", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/esprima/download/esprima-4.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fesprima%2Fdownload%2Fesprima-4.0.1.tgz", + "integrity": "sha1-E7BM2z5sXRnfkatph6hpVhmwqnE=", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.3.1", + "resolved": "https://registry.npm.taobao.org/esquery/download/esquery-1.3.1.tgz?cache=0&sync_timestamp=1587061286348&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fesquery%2Fdownload%2Fesquery-1.3.1.tgz", + "integrity": "sha1-t4tYKKqOIU4p+3TE1bdS4cAz2lc=", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npm.taobao.org/estraverse/download/estraverse-5.2.0.tgz?cache=0&sync_timestamp=1596642998635&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Festraverse%2Fdownload%2Festraverse-5.2.0.tgz", + "integrity": "sha1-MH30JUfmzHMk088DwVXVzbjFOIA=", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npm.taobao.org/esrecurse/download/esrecurse-4.3.0.tgz?cache=0&sync_timestamp=1598898255610&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fesrecurse%2Fdownload%2Fesrecurse-4.3.0.tgz", + "integrity": "sha1-eteWTWeauyi+5yzsY3WLHF0smSE=", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npm.taobao.org/estraverse/download/estraverse-5.2.0.tgz?cache=0&sync_timestamp=1596642998635&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Festraverse%2Fdownload%2Festraverse-5.2.0.tgz", + "integrity": "sha1-MH30JUfmzHMk088DwVXVzbjFOIA=", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npm.taobao.org/estraverse/download/estraverse-4.3.0.tgz?cache=0&sync_timestamp=1596642998635&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Festraverse%2Fdownload%2Festraverse-4.3.0.tgz", + "integrity": "sha1-OYrT88WiSUi+dyXoPRGn3ijNvR0=", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npm.taobao.org/esutils/download/esutils-2.0.3.tgz", + "integrity": "sha1-dNLrTeC42hKTcRkQ1Qd1ubcQ72Q=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npm.taobao.org/etag/download/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-pubsub": { + "version": "4.3.0", + "resolved": "https://registry.npm.taobao.org/event-pubsub/download/event-pubsub-4.3.0.tgz", + "integrity": "sha1-9o2Ba8KfHsAsU53FjI3UDOcss24=", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npm.taobao.org/eventemitter3/download/eventemitter3-4.0.7.tgz?cache=0&sync_timestamp=1598517728928&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feventemitter3%2Fdownload%2Feventemitter3-4.0.7.tgz", + "integrity": "sha1-Lem2j2Uo1WRO9cWVJqG0oHMGFp8=", + "dev": true + }, + "node_modules/events": { + "version": "3.2.0", + "resolved": "https://registry.npm.taobao.org/events/download/events-3.2.0.tgz?cache=0&sync_timestamp=1595422577337&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fevents%2Fdownload%2Fevents-3.2.0.tgz", + "integrity": "sha1-k7h8GPjvzUICpGGuxN/AVWtjk3k=", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/eventsource": { + "version": "1.0.7", + "resolved": "https://registry.npm.taobao.org/eventsource/download/eventsource-1.0.7.tgz", + "integrity": "sha1-j7xyyT/NNAiAkLwKTmT0tc7m2NA=", + "dev": true, + "dependencies": { + "original": "^1.0.0" + }, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/evp_bytestokey/download/evp_bytestokey-1.0.3.tgz", + "integrity": "sha1-f8vbGY3HGVlDLv4ThCaE4FJaywI=", + "dev": true, + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/execa/download/execa-1.0.0.tgz?cache=0&sync_timestamp=1594145085955&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexeca%2Fdownload%2Fexeca-1.0.0.tgz", + "integrity": "sha1-xiNqW7TfbW8V6I5/AXeYIWdJ3dg=", + "dev": true, + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npm.taobao.org/expand-brackets/download/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "dependencies": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/express": { + "version": "4.17.1", + "resolved": "https://registry.npm.taobao.org/express/download/express-4.17.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexpress%2Fdownload%2Fexpress-4.17.1.tgz", + "integrity": "sha1-RJH8OGBc9R+GKdOcK10Cb5ikwTQ=", + "dev": true, + "dependencies": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/express/node_modules/qs": { + "version": "6.7.0", + "resolved": "https://registry.npm.taobao.org/qs/download/qs-6.7.0.tgz", + "integrity": "sha1-QdwaAV49WB8WIXdr4xr7KHapsbw=", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npm.taobao.org/extend/download/extend-3.0.2.tgz", + "integrity": "sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo=", + "dev": true + }, + "node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extend-shallow/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/is-extendable/download/is-extendable-1.0.1.tgz", + "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/external-editor/download/external-editor-3.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexternal-editor%2Fdownload%2Fexternal-editor-3.1.0.tgz", + "integrity": "sha1-ywP3QL764D6k0oPK7SdBqD8zVJU=", + "dev": true, + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npm.taobao.org/extglob/download/extglob-2.0.4.tgz", + "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=", + "dev": true, + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npm.taobao.org/extsprintf/download/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true, + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-3.1.3.tgz?cache=0&sync_timestamp=1591599697571&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-deep-equal%2Fdownload%2Ffast-deep-equal-3.1.3.tgz", + "integrity": "sha1-On1WtVnWy8PrUSMlJE5hmmXGxSU=", + "dev": true + }, + "node_modules/fast-glob": { + "version": "2.2.7", + "resolved": "https://registry.npm.taobao.org/fast-glob/download/fast-glob-2.2.7.tgz?cache=0&sync_timestamp=1592291968616&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-glob%2Fdownload%2Ffast-glob-2.2.7.tgz", + "integrity": "sha1-aVOFfDr6R1//ku5gFdUtpwpM050=", + "dev": true, + "dependencies": { + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.1.2", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.3", + "micromatch": "^3.1.10" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/glob-parent/download/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.1.0.tgz?cache=0&sync_timestamp=1576340291001&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-json-stable-stringify%2Fdownload%2Ffast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha1-h0v2nG9ATCtdmcSBNBOZ/VWJJjM=", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npm.taobao.org/fast-levenshtein/download/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "node_modules/fastq": { + "version": "1.8.0", + "resolved": "https://registry.npm.taobao.org/fastq/download/fastq-1.8.0.tgz?cache=0&sync_timestamp=1589280329638&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffastq%2Fdownload%2Ffastq-1.8.0.tgz", + "integrity": "sha1-VQ4fn1m7xl/hhctqm02VNXEH9IE=", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npm.taobao.org/faye-websocket/download/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/figgy-pudding": { + "version": "3.5.2", + "resolved": "https://registry.npm.taobao.org/figgy-pudding/download/figgy-pudding-3.5.2.tgz", + "integrity": "sha1-tO7oFIq7Adzx0aw0Nn1Z4S+mHW4=", + "dev": true + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npm.taobao.org/figures/download/figures-3.2.0.tgz?cache=0&sync_timestamp=1581865349068&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffigures%2Fdownload%2Ffigures-3.2.0.tgz", + "integrity": "sha1-YlwYvSk8YE3EqN2y/r8MiDQXRq8=", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npm.taobao.org/file-entry-cache/download/file-entry-cache-5.0.1.tgz", + "integrity": "sha1-yg9u+m3T1WEzP7FFFQZcL6/fQ5w=", + "dev": true, + "dependencies": { + "flat-cache": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/file-loader": { + "version": "4.3.0", + "resolved": "https://registry.npm.taobao.org/file-loader/download/file-loader-4.3.0.tgz?cache=0&sync_timestamp=1598876102788&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffile-loader%2Fdownload%2Ffile-loader-4.3.0.tgz", + "integrity": "sha1-eA8ED3KbPRgBnyBgX3I+hEuKWK8=", + "dev": true, + "dependencies": { + "loader-utils": "^1.2.3", + "schema-utils": "^2.5.0" + }, + "engines": { + "node": ">= 8.9.0" + }, + "peerDependencies": { + "webpack": "^4.0.0" + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/file-uri-to-path/download/file-uri-to-path-1.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffile-uri-to-path%2Fdownload%2Ffile-uri-to-path-1.0.0.tgz", + "integrity": "sha1-VTp7hEb/b2hDWcRF8eN6BdrMM90=", + "dev": true, + "optional": true + }, + "node_modules/filesize": { + "version": "3.6.1", + "resolved": "https://registry.npm.taobao.org/filesize/download/filesize-3.6.1.tgz?cache=0&sync_timestamp=1582340569604&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffilesize%2Fdownload%2Ffilesize-3.6.1.tgz", + "integrity": "sha1-CQuz7gG2+AGoqL6Z0xcQs0Irsxc=", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/fill-range/download/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/finalhandler/download/finalhandler-1.1.2.tgz", + "integrity": "sha1-t+fQAP/RGTjQ/bBTUG9uur6fWH0=", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-2.1.0.tgz", + "integrity": "sha1-jQ+UzRP+Q8bHwmGg2GEVypGMBfc=", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-3.0.0.tgz?cache=0&sync_timestamp=1597169842138&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-up%2Fdownload%2Ffind-up-3.0.0.tgz", + "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/flat": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/flat/download/flat-4.1.0.tgz", + "integrity": "sha1-CQvsiwXjnLowl0fx1YjwTbr5jbI=", + "deprecated": "Fixed a prototype pollution security issue in 4.1.0, please upgrade to ^4.1.1 or ^5.0.1.", + "dev": true, + "dependencies": { + "is-buffer": "~2.0.3" + }, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/flat-cache/download/flat-cache-2.0.1.tgz", + "integrity": "sha1-XSltbwS9pEpGMKMBQTvbwuwIXsA=", + "dev": true, + "dependencies": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/flat-cache/node_modules/rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npm.taobao.org/rimraf/download/rimraf-2.6.3.tgz", + "integrity": "sha1-stEE/g2Psnz54KHNqCYt04M8bKs=", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/flat/node_modules/is-buffer": { + "version": "2.0.4", + "resolved": "https://registry.npm.taobao.org/is-buffer/download/is-buffer-2.0.4.tgz?cache=0&sync_timestamp=1588707106955&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-buffer%2Fdownload%2Fis-buffer-2.0.4.tgz", + "integrity": "sha1-PlcvI8hBGlz9lVfISeNmXgspBiM=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/flatted": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/flatted/download/flatted-2.0.2.tgz", + "integrity": "sha1-RXWyHivO50NKqb5mL0t7X5wrUTg=", + "dev": true + }, + "node_modules/flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/flush-write-stream/download/flush-write-stream-1.1.1.tgz", + "integrity": "sha1-jdfYc6G6vCB9lOrQwuDkQnbr8ug=", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "node_modules/follow-redirects": { + "version": "1.13.0", + "resolved": "https://registry.npm.taobao.org/follow-redirects/download/follow-redirects-1.13.0.tgz?cache=0&sync_timestamp=1597057976909&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffollow-redirects%2Fdownload%2Ffollow-redirects-1.13.0.tgz", + "integrity": "sha1-tC6Nk6Kn7qXtiGM2dtZZe8jjhNs=", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/for-in/download/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/forever-agent/download/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npm.taobao.org/form-data/download/form-data-2.3.3.tgz", + "integrity": "sha1-3M5SwF9kTymManq5Nr1yTO/786Y=", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npm.taobao.org/forwarded/download/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npm.taobao.org/fragment-cache/download/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npm.taobao.org/fresh/download/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/from2": { + "version": "2.3.0", + "resolved": "https://registry.npm.taobao.org/from2/download/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npm.taobao.org/fs-extra/download/fs-extra-7.0.1.tgz", + "integrity": "sha1-TxicRKoSO4lfcigE9V6iPq3DSOk=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/fs-minipass/download/fs-minipass-2.1.0.tgz?cache=0&sync_timestamp=1579628575109&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffs-minipass%2Fdownload%2Ffs-minipass-2.1.0.tgz", + "integrity": "sha1-f1A2/b8SxjwWkZDL5BmchSJx+fs=", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npm.taobao.org/fs-write-stream-atomic/download/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/fs.realpath/download/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-2.1.3.tgz?cache=0&sync_timestamp=1588787369955&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffsevents%2Fdownload%2Ffsevents-2.1.3.tgz", + "integrity": "sha1-+3OHA66NL5/pAMM4Nt3r7ouX8j4=", + "deprecated": "\"Please update to latest v2.3 or v2.2\"", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz", + "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=", + "dev": true + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/functional-red-black-tree/download/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "node_modules/gensync": { + "version": "1.0.0-beta.1", + "resolved": "https://registry.npm.taobao.org/gensync/download/gensync-1.0.0-beta.1.tgz", + "integrity": "sha1-WPQ2H/mH5f9uHnohCCeqNx6qwmk=", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npm.taobao.org/get-caller-file/download/get-caller-file-2.0.5.tgz", + "integrity": "sha1-T5RBKoLbMvNuOwuXQfipf+sDH34=", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/get-func-name/download/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/get-stream/download/get-stream-4.1.0.tgz?cache=0&sync_timestamp=1597056502934&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-stream%2Fdownload%2Fget-stream-4.1.0.tgz", + "integrity": "sha1-wbJVV189wh1Zv8ec09K0axw6VLU=", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npm.taobao.org/get-value/download/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npm.taobao.org/getpass/download/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npm.taobao.org/glob/download/glob-7.1.6.tgz?cache=0&sync_timestamp=1573078121947&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglob%2Fdownload%2Fglob-7.1.6.tgz", + "integrity": "sha1-FB8zuBp8JJLhJVlDB0gMRmeSeKY=", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npm.taobao.org/glob-parent/download/glob-parent-5.1.1.tgz", + "integrity": "sha1-tsHvQXxOVmPqSY8cRa+saRa7wik=", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.3.0", + "resolved": "https://registry.npm.taobao.org/glob-to-regexp/download/glob-to-regexp-0.3.0.tgz", + "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", + "dev": true + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npm.taobao.org/globals/download/globals-11.12.0.tgz", + "integrity": "sha1-q4eVM4hooLq9hSV1gBjCp+uVxC4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "9.2.0", + "resolved": "https://registry.npm.taobao.org/globby/download/globby-9.2.0.tgz?cache=0&sync_timestamp=1591083783605&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobby%2Fdownload%2Fglobby-9.2.0.tgz", + "integrity": "sha1-/QKacGxwPSm90XD0tts6P3p8tj0=", + "dev": true, + "dependencies": { + "@types/glob": "^7.1.1", + "array-union": "^1.0.2", + "dir-glob": "^2.2.2", + "fast-glob": "^2.2.6", + "glob": "^7.1.3", + "ignore": "^4.0.3", + "pify": "^4.0.1", + "slash": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.2.4.tgz", + "integrity": "sha1-Ila94U02MpWMRl68ltxGfKB6Kfs=", + "dev": true + }, + "node_modules/growl": { + "version": "1.10.5", + "resolved": "https://registry.npm.taobao.org/growl/download/growl-1.10.5.tgz", + "integrity": "sha1-8nNdwig2dPpnR4sQGBBZNVw2nl4=", + "dev": true, + "engines": { + "node": ">=4.x" + } + }, + "node_modules/gzip-size": { + "version": "5.1.1", + "resolved": "https://registry.npm.taobao.org/gzip-size/download/gzip-size-5.1.1.tgz", + "integrity": "sha1-y5vuaS+HwGErIyhAqHOQTkwTUnQ=", + "dev": true, + "dependencies": { + "duplexer": "^0.1.1", + "pify": "^4.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/handle-thing/download/handle-thing-2.0.1.tgz", + "integrity": "sha1-hX95zjWVgMNA1DCBzGSJcNC7I04=", + "dev": true + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/har-schema/download/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/har-validator/download/har-validator-5.1.5.tgz?cache=0&sync_timestamp=1596082584903&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhar-validator%2Fdownload%2Fhar-validator-5.1.5.tgz", + "integrity": "sha1-HwgDufjLIMD6E4It8ezds2veHv0=", + "deprecated": "this library is no longer supported", + "dev": true, + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/has/download/has-1.0.3.tgz", + "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/has-ansi/download/has-ansi-2.0.0.tgz?cache=0&sync_timestamp=1568144533484&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhas-ansi%2Fdownload%2Fhas-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-ansi/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz?cache=0&sync_timestamp=1570188663907&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/has-symbols/download/has-symbols-1.0.1.tgz?cache=0&sync_timestamp=1573950719586&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhas-symbols%2Fdownload%2Fhas-symbols-1.0.1.tgz", + "integrity": "sha1-n1IUdYpEGWxAbZvXbOv4HsLdMeg=", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/has-value/download/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/has-values/download/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/hash-base/download/hash-base-3.1.0.tgz", + "integrity": "sha1-VcOB2eBuHSmXqIO0o/3f5/DTrzM=", + "dev": true, + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hash-base/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.6.0.tgz?cache=0&sync_timestamp=1581624324274&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freadable-stream%2Fdownload%2Freadable-stream-3.6.0.tgz", + "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/hash-base/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.2.1.tgz", + "integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY=", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/hash-sum": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/hash-sum/download/hash-sum-2.0.0.tgz", + "integrity": "sha1-gdAbtd6OpKIUrV1urRtSNGCwtFo=", + "dev": true + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npm.taobao.org/hash.js/download/hash.js-1.1.7.tgz", + "integrity": "sha1-C6vKU46NTuSg+JiNaIZlN6ADz0I=", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/he/download/he-1.2.0.tgz", + "integrity": "sha1-hK5l+n6vsWX922FWauFLrwVmTw8=", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/hex-color-regex": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/hex-color-regex/download/hex-color-regex-1.1.0.tgz", + "integrity": "sha1-TAb8y0YC/iYCs8k9+C1+fb8aio4=", + "dev": true + }, + "node_modules/highlight.js": { + "version": "9.18.3", + "resolved": "https://registry.npm.taobao.org/highlight.js/download/highlight.js-9.18.3.tgz", + "integrity": "sha1-oaCiAo1eMUniOA+Khl7oUWcD1jQ=", + "deprecated": "Version no longer supported. Upgrade to @latest", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/hmac-drbg/download/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/hoopy": { + "version": "0.1.4", + "resolved": "https://registry.npm.taobao.org/hoopy/download/hoopy-0.1.4.tgz", + "integrity": "sha1-YJIH1mEQADOpqUAq096mdzgcGx0=", + "dev": true, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.8", + "resolved": "https://registry.npm.taobao.org/hosted-git-info/download/hosted-git-info-2.8.8.tgz?cache=0&sync_timestamp=1594427993800&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhosted-git-info%2Fdownload%2Fhosted-git-info-2.8.8.tgz", + "integrity": "sha1-dTm9S8Hg4KiVgVouAmJCCxKFhIg=", + "dev": true + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npm.taobao.org/hpack.js/download/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/hsl-regex/download/hsl-regex-1.0.0.tgz", + "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", + "dev": true + }, + "node_modules/hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/hsla-regex/download/hsla-regex-1.0.0.tgz", + "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", + "dev": true + }, + "node_modules/html-comment-regex": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/html-comment-regex/download/html-comment-regex-1.1.2.tgz", + "integrity": "sha1-l9RoiutcgYhqNk+qDK0d2hTUM6c=", + "dev": true + }, + "node_modules/html-encoding-sniffer": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/html-encoding-sniffer/download/html-encoding-sniffer-1.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhtml-encoding-sniffer%2Fdownload%2Fhtml-encoding-sniffer-1.0.2.tgz", + "integrity": "sha1-5w2EuU2lOqN14R/jo1G+ZkLKRvg=", + "dev": true, + "dependencies": { + "whatwg-encoding": "^1.0.1" + } + }, + "node_modules/html-entities": { + "version": "1.3.1", + "resolved": "https://registry.npm.taobao.org/html-entities/download/html-entities-1.3.1.tgz", + "integrity": "sha1-+5oaS1sUxdq6gtPjTGrk/nAaDkQ=", + "dev": true + }, + "node_modules/html-minifier": { + "version": "3.5.21", + "resolved": "https://registry.npm.taobao.org/html-minifier/download/html-minifier-3.5.21.tgz", + "integrity": "sha1-0AQOBUcw41TbAIRjWTGUAVIS0gw=", + "dev": true, + "dependencies": { + "camel-case": "3.0.x", + "clean-css": "4.2.x", + "commander": "2.17.x", + "he": "1.2.x", + "param-case": "2.1.x", + "relateurl": "0.2.x", + "uglify-js": "3.4.x" + }, + "bin": { + "html-minifier": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/html-minifier/node_modules/commander": { + "version": "2.17.1", + "resolved": "https://registry.npm.taobao.org/commander/download/commander-2.17.1.tgz?cache=0&sync_timestamp=1598576116597&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-2.17.1.tgz", + "integrity": "sha1-vXerfebelCBc6sxy8XFtKfIKd78=", + "dev": true + }, + "node_modules/html-tags": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/html-tags/download/html-tags-3.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhtml-tags%2Fdownload%2Fhtml-tags-3.1.0.tgz", + "integrity": "sha1-e15vfmZen7QfMAB+2eDUHpf7IUA=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/html-webpack-plugin": { + "version": "3.2.0", + "resolved": "https://registry.npm.taobao.org/html-webpack-plugin/download/html-webpack-plugin-3.2.0.tgz", + "integrity": "sha1-sBq71yOsqqeze2r0SS69oD2d03s=", + "deprecated": "3.x is no longer supported", + "dev": true, + "dependencies": { + "html-minifier": "^3.2.3", + "loader-utils": "^0.2.16", + "lodash": "^4.17.3", + "pretty-error": "^2.0.2", + "tapable": "^1.0.0", + "toposort": "^1.0.0", + "util.promisify": "1.0.0" + }, + "engines": { + "node": ">=6.9" + }, + "peerDependencies": { + "webpack": "^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.0" + } + }, + "node_modules/html-webpack-plugin/node_modules/big.js": { + "version": "3.2.0", + "resolved": "https://registry.npm.taobao.org/big.js/download/big.js-3.2.0.tgz", + "integrity": "sha1-pfwpi4G54Nyi5FiCR4S2XFK6WI4=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/html-webpack-plugin/node_modules/emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/emojis-list/download/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/html-webpack-plugin/node_modules/json5": { + "version": "0.5.1", + "resolved": "https://registry.npm.taobao.org/json5/download/json5-0.5.1.tgz?cache=0&sync_timestamp=1586045700847&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson5%2Fdownload%2Fjson5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/html-webpack-plugin/node_modules/loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npm.taobao.org/loader-utils/download/loader-utils-0.2.17.tgz?cache=0&sync_timestamp=1584445207623&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Floader-utils%2Fdownload%2Floader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true, + "dependencies": { + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0", + "object-assign": "^4.0.1" + } + }, + "node_modules/html-webpack-plugin/node_modules/toposort": { + "version": "1.0.7", + "resolved": "https://registry.npm.taobao.org/toposort/download/toposort-1.0.7.tgz", + "integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=", + "dev": true + }, + "node_modules/html-webpack-plugin/node_modules/util.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/util.promisify/download/util.promisify-1.0.0.tgz", + "integrity": "sha1-RA9xZaRZyaFtwUXrjnLzVocJcDA=", + "dev": true, + "dependencies": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } + }, + "node_modules/htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npm.taobao.org/htmlparser2/download/htmlparser2-3.10.1.tgz", + "integrity": "sha1-vWedw/WYl7ajS7EHSchVu1OpOS8=", + "dev": true, + "dependencies": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + } + }, + "node_modules/htmlparser2/node_modules/entities": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/entities/download/entities-1.1.2.tgz", + "integrity": "sha1-vfpzUplmTfr9NFKe1PhSKidf6lY=", + "dev": true + }, + "node_modules/htmlparser2/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.6.0.tgz?cache=0&sync_timestamp=1581624324274&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freadable-stream%2Fdownload%2Freadable-stream-3.6.0.tgz", + "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npm.taobao.org/http-deceiver/download/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, + "node_modules/http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npm.taobao.org/http-errors/download/http-errors-1.7.2.tgz?cache=0&sync_timestamp=1593407858306&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-errors%2Fdownload%2Fhttp-errors-1.7.2.tgz", + "integrity": "sha1-T1ApzxMjnzEDblsuVSkrz7zIXI8=", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-errors/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz?cache=0&sync_timestamp=1560975547815&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finherits%2Fdownload%2Finherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npm.taobao.org/http-proxy/download/http-proxy-1.18.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-proxy%2Fdownload%2Fhttp-proxy-1.18.1.tgz", + "integrity": "sha1-QBVB8FNIhLv5UmAzTnL4juOXZUk=", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-middleware": { + "version": "0.19.1", + "resolved": "https://registry.npm.taobao.org/http-proxy-middleware/download/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha1-GDx9xKoUeRUDBkmMIQza+WCApDo=", + "dev": true, + "dependencies": { + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/http-signature/download/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/https-browserify/download/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/human-signals/download/human-signals-1.1.1.tgz?cache=0&sync_timestamp=1584198662293&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhuman-signals%2Fdownload%2Fhuman-signals-1.1.1.tgz", + "integrity": "sha1-xbHNFPUK6uCatsWf5jujOV/k36M=", + "dev": true, + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.24.tgz?cache=0&sync_timestamp=1594184264130&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ficonv-lite%2Fdownload%2Ficonv-lite-0.4.24.tgz", + "integrity": "sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "4.1.1", + "resolved": "https://registry.npm.taobao.org/icss-utils/download/icss-utils-4.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ficss-utils%2Fdownload%2Ficss-utils-4.1.1.tgz", + "integrity": "sha1-IRcLU3ie4nRHwvR91oMIFAP5pGc=", + "dev": true, + "dependencies": { + "postcss": "^7.0.14" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npm.taobao.org/ieee754/download/ieee754-1.1.13.tgz", + "integrity": "sha1-7BaFWOlaoYH9h9N/VcMrvLZwi4Q=", + "dev": true + }, + "node_modules/iferr": { + "version": "0.1.5", + "resolved": "https://registry.npm.taobao.org/iferr/download/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true + }, + "node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npm.taobao.org/ignore/download/ignore-4.0.6.tgz?cache=0&sync_timestamp=1590809289115&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fignore%2Fdownload%2Fignore-4.0.6.tgz", + "integrity": "sha1-dQ49tYYgh7RzfrrIIH/9HvJ7Jfw=", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", + "dev": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/import-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/import-cwd/download/import-cwd-2.1.0.tgz", + "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", + "dev": true, + "dependencies": { + "import-from": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/import-fresh/download/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "dev": true, + "dependencies": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-from": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/import-from/download/import-from-2.1.0.tgz", + "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", + "dev": true, + "dependencies": { + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-local": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/import-local/download/import-local-2.0.0.tgz", + "integrity": "sha1-VQcL44pZk88Y72236WH1vuXFoJ0=", + "dev": true, + "dependencies": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npm.taobao.org/imurmurhash/download/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/indent-string/download/indent-string-4.0.0.tgz", + "integrity": "sha1-Yk+PRJfWGbLZdoUx1Y9BIoVNclE=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/indexes-of/download/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", + "dev": true + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/infer-owner/download/infer-owner-1.0.4.tgz", + "integrity": "sha1-xM78qo5RBRwqQLos6KPScpWvlGc=", + "dev": true + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.4.tgz?cache=0&sync_timestamp=1560975547815&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finherits%2Fdownload%2Finherits-2.0.4.tgz", + "integrity": "sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=", + "dev": true + }, + "node_modules/ini": { + "version": "1.3.5", + "resolved": "https://registry.npm.taobao.org/ini/download/ini-1.3.5.tgz", + "integrity": "sha1-7uJfVtscnsYIXgwid4CD9Zar+Sc=", + "deprecated": "Please update to ini >=1.3.6 to avoid a prototype pollution issue", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npm.taobao.org/inquirer/download/inquirer-7.3.3.tgz?cache=0&sync_timestamp=1595471627485&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finquirer%2Fdownload%2Finquirer-7.3.3.tgz", + "integrity": "sha1-BNF2sq8Er8FXqD/XwQDpjuCq0AM=", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/inquirer/node_modules/ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-4.2.1.tgz", + "integrity": "sha1-kK51xCTQCNJiTFvynq0xd+v881k=", + "dev": true, + "dependencies": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-4.1.0.tgz?cache=0&sync_timestamp=1591687070184&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchalk%2Fdownload%2Fchalk-4.1.0.tgz", + "integrity": "sha1-ThSHCmGNni7dl92DRf2dncMVZGo=", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/cli-cursor/download/cli-cursor-3.1.0.tgz", + "integrity": "sha1-JkMFp65JDR0Dvwybp8kl0XU68wc=", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz?cache=0&sync_timestamp=1566248870121&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcolor-convert%2Fdownload%2Fcolor-convert-2.0.1.tgz", + "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/inquirer/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz", + "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", + "dev": true + }, + "node_modules/inquirer/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-4.0.0.tgz", + "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-2.1.0.tgz?cache=0&sync_timestamp=1596095644798&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmimic-fn%2Fdownload%2Fmimic-fn-2.1.0.tgz", + "integrity": "sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs=", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/inquirer/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npm.taobao.org/onetime/download/onetime-5.1.2.tgz?cache=0&sync_timestamp=1597005345612&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fonetime%2Fdownload%2Fonetime-5.1.2.tgz", + "integrity": "sha1-0Oluu1awdHbfHdnEgG5SN5hcpF4=", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/inquirer/node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/restore-cursor/download/restore-cursor-3.1.0.tgz", + "integrity": "sha1-OfZ8VLOnpYzqUjbZXPADQjljH34=", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1598611709087&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz", + "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/interactjs": { + "version": "1.10.11", + "resolved": "https://registry.npmjs.org/interactjs/-/interactjs-1.10.11.tgz", + "integrity": "sha512-VPUWsGAOPmrZe1YF7Fq/4AIBBZ+3FikZRS8bpzT6VsAfUuhxl/CKJY73IAiZHd3fz9p174CXErn0Qs81XEFICA==", + "dependencies": { + "@interactjs/types": "1.10.11" + } + }, + "node_modules/internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npm.taobao.org/internal-ip/download/internal-ip-4.3.0.tgz?cache=0&sync_timestamp=1596563037835&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finternal-ip%2Fdownload%2Finternal-ip-4.3.0.tgz", + "integrity": "sha1-hFRSuq2dLKO2nGNaE3rLmg2tCQc=", + "dev": true, + "dependencies": { + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/internal-ip/node_modules/default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npm.taobao.org/default-gateway/download/default-gateway-4.2.0.tgz", + "integrity": "sha1-FnEEx1AMIRX23WmwpTa7jtcgVSs=", + "dev": true, + "dependencies": { + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npm.taobao.org/interpret/download/interpret-1.4.0.tgz?cache=0&sync_timestamp=1591167206134&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finterpret%2Fdownload%2Finterpret-1.4.0.tgz", + "integrity": "sha1-Zlq4vE2iendKQFhOgS4+D6RbGh4=", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npm.taobao.org/invariant/download/invariant-2.2.4.tgz", + "integrity": "sha1-YQ88ksk1nOHbYW5TgAjSP/NRWOY=", + "dev": true, + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/ip": { + "version": "1.1.5", + "resolved": "https://registry.npm.taobao.org/ip/download/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "node_modules/ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/ip-regex/download/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npm.taobao.org/ipaddr.js/download/ipaddr.js-1.9.1.tgz", + "integrity": "sha1-v/OFQ+64mEglB5/zoqjmy9RngbM=", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/is-absolute-url/download/is-absolute-url-2.1.0.tgz?cache=0&sync_timestamp=1569736493122&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-absolute-url%2Fdownload%2Fis-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-arguments": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/is-arguments/download/is-arguments-1.0.4.tgz", + "integrity": "sha1-P6+WbHy6D/Q3+zH2JQCC/PBEjPM=", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-2.1.0.tgz", + "integrity": "sha1-6h9/O4DwZCNug0cPhsCcJU+0Wwk=", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz?cache=0&sync_timestamp=1588707106955&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-buffer%2Fdownload%2Fis-buffer-1.1.6.tgz", + "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=", + "dev": true + }, + "node_modules/is-callable": { + "version": "1.2.1", + "resolved": "https://registry.npm.taobao.org/is-callable/download/is-callable-1.2.1.tgz?cache=0&sync_timestamp=1599691619992&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-callable%2Fdownload%2Fis-callable-1.2.1.tgz", + "integrity": "sha1-TR4hpPQ3UJ0lzlX4GENQdxQhyW0=", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-ci": { + "version": "1.2.1", + "resolved": "https://registry.npm.taobao.org/is-ci/download/is-ci-1.2.1.tgz", + "integrity": "sha1-43ecjuF/zPQoSI9uKBGH8uYyhBw=", + "dev": true, + "dependencies": { + "ci-info": "^1.5.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/is-color-stop/download/is-color-stop-1.1.0.tgz", + "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", + "dev": true, + "dependencies": { + "css-color-names": "^0.0.4", + "hex-color-regex": "^1.1.0", + "hsl-regex": "^1.0.0", + "hsla-regex": "^1.0.0", + "rgb-regex": "^1.0.1", + "rgba-regex": "^1.0.0" + } + }, + "node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/is-date-object/download/is-date-object-1.0.2.tgz?cache=0&sync_timestamp=1576729165697&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-date-object%2Fdownload%2Fis-date-object-1.0.2.tgz", + "integrity": "sha1-vac28s2P0G0yhE53Q7+nSUw7/X4=", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-0.1.6.tgz", + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz", + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npm.taobao.org/is-directory/download/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-docker": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/is-docker/download/is-docker-2.1.1.tgz", + "integrity": "sha1-QSWojkTkUNOE4JBH7eca3C0UQVY=", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npm.taobao.org/is-extendable/download/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/is-extglob/download/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-4.0.1.tgz", + "integrity": "sha1-dWfb6fL14kZ7x3q4PEopSCQHpdw=", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/is-obj/download/is-obj-2.0.0.tgz", + "integrity": "sha1-Rz+wXZc3BeP9liBUUBjKjiLvSYI=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/is-path-cwd/download/is-path-cwd-2.2.0.tgz?cache=0&sync_timestamp=1562347283002&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-path-cwd%2Fdownload%2Fis-path-cwd-2.2.0.tgz", + "integrity": "sha1-Z9Q7gmZKe1GR/ZEZEn6zAASKn9s=", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-path-in-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/is-path-in-cwd/download/is-path-in-cwd-2.1.0.tgz?cache=0&sync_timestamp=1562347183080&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-path-in-cwd%2Fdownload%2Fis-path-in-cwd-2.1.0.tgz", + "integrity": "sha1-v+Lcomxp85cmWkAJljYCk1oFOss=", + "dev": true, + "dependencies": { + "is-path-inside": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/is-path-inside/download/is-path-inside-2.1.0.tgz", + "integrity": "sha1-fJgQWH1lmkDSe8201WFuqwWUlLI=", + "dev": true, + "dependencies": { + "path-is-inside": "^1.0.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/is-plain-obj/download/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npm.taobao.org/is-plain-object/download/is-plain-object-2.0.4.tgz", + "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/is-regex/download/is-regex-1.1.1.tgz?cache=0&sync_timestamp=1596555640677&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-regex%2Fdownload%2Fis-regex-1.1.1.tgz", + "integrity": "sha1-xvmKrMVG9s7FRooHt7FTq1ZKV7k=", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/is-resolvable/download/is-resolvable-1.1.0.tgz", + "integrity": "sha1-+xj4fOH+uSUWnJpAfBkxijIG7Yg=", + "dev": true + }, + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/is-stream/download/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-svg": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/is-svg/download/is-svg-3.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-svg%2Fdownload%2Fis-svg-3.0.0.tgz", + "integrity": "sha1-kyHb0pwhLlypnE+peUxxS8r6L3U=", + "dev": true, + "dependencies": { + "html-comment-regex": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/is-symbol/download/is-symbol-1.0.3.tgz", + "integrity": "sha1-OOEBS55jKb4N6dJKQU/XRB7GGTc=", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "node_modules/is-whitespace": { + "version": "0.3.0", + "resolved": "https://registry.npm.taobao.org/is-whitespace/download/is-whitespace-0.3.0.tgz", + "integrity": "sha1-Fjnssb4DauxppUy7QBz77XEUq38=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/is-windows/download/is-windows-1.0.2.tgz", + "integrity": "sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/is-wsl/download/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz?cache=0&sync_timestamp=1562592096220&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fisarray%2Fdownload%2Fisarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fisexe%2Fdownload%2Fisexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npm.taobao.org/isstream/download/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "node_modules/javascript-stringify": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/javascript-stringify/download/javascript-stringify-2.0.1.tgz?cache=0&sync_timestamp=1572948916758&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjavascript-stringify%2Fdownload%2Fjavascript-stringify-2.0.1.tgz", + "integrity": "sha1-bvNYA1MQ411mfGde1j0+t8GqGeU=", + "dev": true + }, + "node_modules/jest-worker": { + "version": "25.5.0", + "resolved": "https://registry.npm.taobao.org/jest-worker/download/jest-worker-25.5.0.tgz?cache=0&sync_timestamp=1597057499649&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-worker%2Fdownload%2Fjest-worker-25.5.0.tgz", + "integrity": "sha1-JhHQcbec6g9D7lej0RhZOsFUfbE=", + "dev": true, + "dependencies": { + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-4.0.0.tgz", + "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1598611709087&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz", + "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/js-base64": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz", + "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==", + "dev": true + }, + "node_modules/js-beautify": { + "version": "1.13.0", + "resolved": "https://registry.npm.taobao.org/js-beautify/download/js-beautify-1.13.0.tgz?cache=0&sync_timestamp=1597936806956&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-beautify%2Fdownload%2Fjs-beautify-1.13.0.tgz", + "integrity": "sha1-oFbV06z9SRhUmq46sDn588Ue67I=", + "dev": true, + "dependencies": { + "config-chain": "^1.1.12", + "editorconfig": "^0.15.3", + "glob": "^7.1.3", + "mkdirp": "^1.0.4", + "nopt": "^5.0.0" + }, + "bin": { + "css-beautify": "js/bin/css-beautify.js", + "html-beautify": "js/bin/html-beautify.js", + "js-beautify": "js/bin/js-beautify.js" + } + }, + "node_modules/js-beautify/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/mkdirp/download/mkdirp-1.0.4.tgz?cache=0&sync_timestamp=1587535418745&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmkdirp%2Fdownload%2Fmkdirp-1.0.4.tgz", + "integrity": "sha1-PrXtYmInVteaXw4qIh3+utdcL34=", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/js-message": { + "version": "1.0.5", + "resolved": "https://registry.npm.taobao.org/js-message/download/js-message-1.0.5.tgz", + "integrity": "sha1-IwDSSxrwjondCVvBpMnJz8uJLRU=", + "dev": true, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/js-queue": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/js-queue/download/js-queue-2.0.0.tgz", + "integrity": "sha1-NiITz4YPRo8BJfxslqvBdCUx+Ug=", + "dev": true, + "dependencies": { + "easy-stack": "^1.0.0" + }, + "engines": { + "node": ">=1.0.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/js-tokens/download/js-tokens-4.0.0.tgz?cache=0&sync_timestamp=1586796260005&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-tokens%2Fdownload%2Fjs-tokens-4.0.0.tgz", + "integrity": "sha1-GSA/tZmR35jjoocFDUZHzerzJJk=", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npm.taobao.org/js-yaml/download/js-yaml-3.13.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-yaml%2Fdownload%2Fjs-yaml-3.13.1.tgz", + "integrity": "sha1-r/FRswv9+o5J4F2iLnQV6d+jeEc=", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npm.taobao.org/jsbn/download/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "node_modules/jsdom": { + "version": "15.2.1", + "resolved": "https://registry.npm.taobao.org/jsdom/download/jsdom-15.2.1.tgz?cache=0&sync_timestamp=1596916084670&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjsdom%2Fdownload%2Fjsdom-15.2.1.tgz", + "integrity": "sha1-0v6xrvcYP4a+UhuMaDP/UpbQfsU=", + "dev": true, + "dependencies": { + "abab": "^2.0.0", + "acorn": "^7.1.0", + "acorn-globals": "^4.3.2", + "array-equal": "^1.0.0", + "cssom": "^0.4.1", + "cssstyle": "^2.0.0", + "data-urls": "^1.1.0", + "domexception": "^1.0.1", + "escodegen": "^1.11.1", + "html-encoding-sniffer": "^1.0.2", + "nwsapi": "^2.2.0", + "parse5": "5.1.0", + "pn": "^1.1.0", + "request": "^2.88.0", + "request-promise-native": "^1.0.7", + "saxes": "^3.1.9", + "symbol-tree": "^3.2.2", + "tough-cookie": "^3.0.1", + "w3c-hr-time": "^1.0.1", + "w3c-xmlserializer": "^1.1.2", + "webidl-conversions": "^4.0.2", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^7.0.0", + "ws": "^7.0.0", + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom-global": { + "version": "3.0.2", + "resolved": "https://registry.npm.taobao.org/jsdom-global/download/jsdom-global-3.0.2.tgz", + "integrity": "sha1-a9KZwTsMRiay2iwDk81DhdYGrLk=", + "dev": true, + "peerDependencies": { + "jsdom": ">=10.0.0" + } + }, + "node_modules/jsdom/node_modules/acorn": { + "version": "7.4.0", + "resolved": "https://registry.npm.taobao.org/acorn/download/acorn-7.4.0.tgz?cache=0&sync_timestamp=1597235774928&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn%2Fdownload%2Facorn-7.4.0.tgz", + "integrity": "sha1-4a1IbmxUUBY0xsOXxcEh2qODYHw=", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/jsdom/node_modules/tough-cookie": { + "version": "3.0.1", + "resolved": "https://registry.npm.taobao.org/tough-cookie/download/tough-cookie-3.0.1.tgz?cache=0&sync_timestamp=1584646121003&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftough-cookie%2Fdownload%2Ftough-cookie-3.0.1.tgz", + "integrity": "sha1-nfT1fnOcJpMKAYGEiH9K233Kc7I=", + "dev": true, + "dependencies": { + "ip-regex": "^2.1.0", + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npm.taobao.org/jsesc/download/jsesc-2.5.2.tgz", + "integrity": "sha1-gFZNLkg9rPbo7yCWUKZ98/DCg6Q=", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/json-parse-better-errors/download/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha1-u4Z8+zRQ5pEHwTHRxRS6s9yLyqk=", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npm.taobao.org/json-parse-even-better-errors/download/json-parse-even-better-errors-2.3.1.tgz?cache=0&sync_timestamp=1599064788298&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson-parse-even-better-errors%2Fdownload%2Fjson-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha1-fEeAWpQxmSjgV3dAXcEuH3pO4C0=", + "dev": true + }, + "node_modules/json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npm.taobao.org/json-schema/download/json-schema-0.2.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson-schema%2Fdownload%2Fjson-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz?cache=0&sync_timestamp=1599333856086&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson-schema-traverse%2Fdownload%2Fjson-schema-traverse-0.4.1.tgz", + "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/json-stable-stringify-without-jsonify/download/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "node_modules/json3": { + "version": "3.3.3", + "resolved": "https://registry.npm.taobao.org/json3/download/json3-3.3.3.tgz", + "integrity": "sha1-f8EON1/FrkLEcFpcwKpvYr4wW4E=", + "dev": true + }, + "node_modules/json5": { + "version": "2.1.3", + "resolved": "https://registry.npm.taobao.org/json5/download/json5-2.1.3.tgz?cache=0&sync_timestamp=1586045700847&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson5%2Fdownload%2Fjson5-2.1.3.tgz", + "integrity": "sha1-ybD3+pIzv+WAf+ZvzzpWF+1ZfUM=", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/jsonfile/download/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonwebtoken": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", + "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=4", + "npm": ">=1.4.28" + } + }, + "node_modules/jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npm.taobao.org/jsprim/download/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/killable": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/killable/download/killable-1.0.1.tgz", + "integrity": "sha1-TIzkQRh6Bhx0dPuHygjipjgZSJI=", + "dev": true + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-6.0.3.tgz", + "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/launch-editor": { + "version": "2.2.1", + "resolved": "https://registry.npm.taobao.org/launch-editor/download/launch-editor-2.2.1.tgz", + "integrity": "sha1-hxtaPuOdZoD8wm03kwtu7aidsMo=", + "dev": true, + "dependencies": { + "chalk": "^2.3.0", + "shell-quote": "^1.6.1" + } + }, + "node_modules/launch-editor-middleware": { + "version": "2.2.1", + "resolved": "https://registry.npm.taobao.org/launch-editor-middleware/download/launch-editor-middleware-2.2.1.tgz", + "integrity": "sha1-4UsH5scVSwpLhqD9NFeE5FgEwVc=", + "dev": true, + "dependencies": { + "launch-editor": "^2.2.1" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/leven/download/leven-3.1.0.tgz", + "integrity": "sha1-d4kd6DQGTMy6gq54QrtrFKE+1/I=", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/levenary": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/levenary/download/levenary-1.1.1.tgz", + "integrity": "sha1-hCqe6Y0gdap/ru2+MmeekgX0b3c=", + "dev": true, + "dependencies": { + "leven": "^3.1.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npm.taobao.org/levn/download/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npm.taobao.org/lines-and-columns/download/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true + }, + "node_modules/load-script": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/load-script/-/load-script-1.0.0.tgz", + "integrity": "sha1-BJGTngvuVkPuSUp+PaPSuscMbKQ=" + }, + "node_modules/loader-fs-cache": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/loader-fs-cache/download/loader-fs-cache-1.0.3.tgz", + "integrity": "sha1-8IZXZG1gcHi+LwoDL4vWndbyd9k=", + "dev": true, + "dependencies": { + "find-cache-dir": "^0.1.1", + "mkdirp": "^0.5.1" + } + }, + "node_modules/loader-fs-cache/node_modules/find-cache-dir": { + "version": "0.1.1", + "resolved": "https://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-0.1.1.tgz", + "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "mkdirp": "^0.5.1", + "pkg-dir": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/loader-fs-cache/node_modules/find-up": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-1.1.2.tgz?cache=0&sync_timestamp=1597169842138&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-up%2Fdownload%2Ffind-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "dependencies": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/loader-fs-cache/node_modules/path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/path-exists/download/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "dependencies": { + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/loader-fs-cache/node_modules/pkg-dir": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-1.0.0.tgz", + "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", + "dev": true, + "dependencies": { + "find-up": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/loader-runner": { + "version": "2.4.0", + "resolved": "https://registry.npm.taobao.org/loader-runner/download/loader-runner-2.4.0.tgz?cache=0&sync_timestamp=1593786221739&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Floader-runner%2Fdownload%2Floader-runner-2.4.0.tgz", + "integrity": "sha1-7UcGa/5TTX6ExMe5mYwqdWB9k1c=", + "dev": true, + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + } + }, + "node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npm.taobao.org/loader-utils/download/loader-utils-1.4.0.tgz?cache=0&sync_timestamp=1584445207623&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Floader-utils%2Fdownload%2Floader-utils-1.4.0.tgz", + "integrity": "sha1-xXm140yzSxp07cbB+za/o3HVphM=", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/loader-utils/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/json5/download/json5-1.0.1.tgz?cache=0&sync_timestamp=1586045700847&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson5%2Fdownload%2Fjson5-1.0.1.tgz", + "integrity": "sha1-d5+wAYYE+oVOrL9iUhgNg1Q+Pb4=", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/locate-path/download/locate-path-3.0.0.tgz", + "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/lodash": { + "version": "4.17.20", + "resolved": "https://registry.npm.taobao.org/lodash/download/lodash-4.17.20.tgz?cache=0&sync_timestamp=1597335994883&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash%2Fdownload%2Flodash-4.17.20.tgz", + "integrity": "sha1-tEqbYpe8tpjxxRo1RaKzs2jVnFI=", + "dev": true + }, + "node_modules/lodash.defaultsdeep": { + "version": "4.6.1", + "resolved": "https://registry.npm.taobao.org/lodash.defaultsdeep/download/lodash.defaultsdeep-4.6.1.tgz", + "integrity": "sha1-US6b1yHSctlOPTpjZT+hdRZ0HKY=", + "dev": true + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" + }, + "node_modules/lodash.kebabcase": { + "version": "4.1.1", + "resolved": "https://registry.npm.taobao.org/lodash.kebabcase/download/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha1-hImxyw0p/4gZXM7KRI/21swpXDY=", + "dev": true + }, + "node_modules/lodash.mapvalues": { + "version": "4.6.0", + "resolved": "https://registry.npm.taobao.org/lodash.mapvalues/download/lodash.mapvalues-4.6.0.tgz", + "integrity": "sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw=", + "dev": true + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npm.taobao.org/lodash.memoize/download/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" + }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npm.taobao.org/lodash.sortby/download/lodash.sortby-4.7.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash.sortby%2Fdownload%2Flodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true + }, + "node_modules/lodash.transform": { + "version": "4.6.0", + "resolved": "https://registry.npm.taobao.org/lodash.transform/download/lodash.transform-4.6.0.tgz", + "integrity": "sha1-EjBkIvYzJK7YSD0/ODMrX2cFR6A=", + "dev": true + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npm.taobao.org/lodash.uniq/download/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "node_modules/log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/log-symbols/download/log-symbols-2.2.0.tgz?cache=0&sync_timestamp=1587898912367&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flog-symbols%2Fdownload%2Flog-symbols-2.2.0.tgz", + "integrity": "sha1-V0Dhxdbw39pK2TI7UzIQfva0xAo=", + "dev": true, + "dependencies": { + "chalk": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/loglevel": { + "version": "1.7.0", + "resolved": "https://registry.npm.taobao.org/loglevel/download/loglevel-1.7.0.tgz", + "integrity": "sha1-coFmhVp0DVnTjbAc9G8ELKoEG7A=", + "dev": true, + "engines": { + "node": ">= 0.6.0" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/subscription/pkg/npm-loglevel?utm_medium=referral&utm_source=npm_fund" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npm.taobao.org/loose-envify/download/loose-envify-1.4.0.tgz", + "integrity": "sha1-ce5R+nvkyuwaY4OffmgtgTLTDK8=", + "dev": true, + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npm.taobao.org/lower-case/download/lower-case-1.1.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flower-case%2Fdownload%2Flower-case-1.1.4.tgz", + "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", + "dev": true + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npm.taobao.org/lru-cache/download/lru-cache-5.1.1.tgz?cache=0&sync_timestamp=1594427582110&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flru-cache%2Fdownload%2Flru-cache-5.1.1.tgz", + "integrity": "sha1-HaJ+ZxAnGUdpXa9oSOhH8B2EuSA=", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/make-dir/download/make-dir-2.1.0.tgz?cache=0&sync_timestamp=1587567572251&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmake-dir%2Fdownload%2Fmake-dir-2.1.0.tgz", + "integrity": "sha1-XwMQ4YuL6JjMBwCSlaMK5B6R5vU=", + "dev": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npm.taobao.org/map-cache/download/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/map-visit/download/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npm.taobao.org/md5.js/download/md5.js-1.3.5.tgz", + "integrity": "sha1-tdB7jjIW4+J81yjXL3DR5qNCAF8=", + "dev": true, + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npm.taobao.org/mdn-data/download/mdn-data-2.0.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmdn-data%2Fdownload%2Fmdn-data-2.0.4.tgz", + "integrity": "sha1-aZs8OKxvHXKAkaZGULZdOIUC/Vs=", + "dev": true + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npm.taobao.org/media-typer/download/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npm.taobao.org/memory-fs/download/memory-fs-0.4.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmemory-fs%2Fdownload%2Fmemory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "dependencies": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/merge-descriptors/download/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "node_modules/merge-options": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-1.0.1.tgz", + "integrity": "sha512-iuPV41VWKWBIOpBsjoxjDZw8/GbSfZ2mk7N1453bwMrfzdrIk7EzBd+8UVR6rkw67th7xnk9Dytl3J+lHPdxvg==", + "dev": true, + "dependencies": { + "is-plain-obj": "^1.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/merge-source-map": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/merge-source-map/download/merge-source-map-1.1.0.tgz", + "integrity": "sha1-L93n5gIJOfcJBqaPLXrmheTIxkY=", + "dev": true, + "dependencies": { + "source-map": "^0.6.1" + } + }, + "node_modules/merge-source-map/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/merge-stream/download/merge-stream-2.0.0.tgz", + "integrity": "sha1-UoI2KaFN0AyXcPtq1H3GMQ8sH2A=", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npm.taobao.org/merge2/download/merge2-1.4.1.tgz", + "integrity": "sha1-Q2iJL4hekHRVpv19xVwMnUBJkK4=", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/methods/download/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npm.taobao.org/micromatch/download/micromatch-3.1.10.tgz", + "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/miller-rabin/download/miller-rabin-4.0.1.tgz", + "integrity": "sha1-8IA1HIZbDcViqEYpZtqlNUPHik0=", + "dev": true, + "dependencies": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "bin": { + "miller-rabin": "bin/miller-rabin" + } + }, + "node_modules/miller-rabin/node_modules/bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.11.9.tgz", + "integrity": "sha1-JtVWgpRY+dHoH8SJUkk9C6NQeCg=", + "dev": true + }, + "node_modules/mime": { + "version": "2.4.6", + "resolved": "https://registry.npm.taobao.org/mime/download/mime-2.4.6.tgz?cache=0&sync_timestamp=1590596706367&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime%2Fdownload%2Fmime-2.4.6.tgz", + "integrity": "sha1-5bQHyQ20QvK+tbFiNz0Htpr/pNE=", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npm.taobao.org/mime-db/download/mime-db-1.44.0.tgz?cache=0&sync_timestamp=1587603342053&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime-db%2Fdownload%2Fmime-db-1.44.0.tgz", + "integrity": "sha1-+hHF6wrKEzS0Izy01S8QxaYnL5I=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npm.taobao.org/mime-types/download/mime-types-2.1.27.tgz", + "integrity": "sha1-R5SfmOJ56lMRn1ci4PNOUpvsAJ8=", + "dev": true, + "dependencies": { + "mime-db": "1.44.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-1.2.0.tgz?cache=0&sync_timestamp=1596095644798&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmimic-fn%2Fdownload%2Fmimic-fn-1.2.0.tgz", + "integrity": "sha1-ggyGo5M0ZA6ZUWkovQP8qIBX0CI=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "0.9.0", + "resolved": "https://registry.npm.taobao.org/mini-css-extract-plugin/download/mini-css-extract-plugin-0.9.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmini-css-extract-plugin%2Fdownload%2Fmini-css-extract-plugin-0.9.0.tgz", + "integrity": "sha1-R/LPB6oWWrNXM7H8l9TEbAVkM54=", + "dev": true, + "dependencies": { + "loader-utils": "^1.1.0", + "normalize-url": "1.9.1", + "schema-utils": "^1.0.0", + "webpack-sources": "^1.1.0" + }, + "engines": { + "node": ">= 6.9.0" + }, + "peerDependencies": { + "webpack": "^4.4.0" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/normalize-url": { + "version": "1.9.1", + "resolved": "https://registry.npm.taobao.org/normalize-url/download/normalize-url-1.9.1.tgz?cache=0&sync_timestamp=1596373165623&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnormalize-url%2Fdownload%2Fnormalize-url-1.9.1.tgz", + "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", + "dev": true, + "dependencies": { + "object-assign": "^4.0.1", + "prepend-http": "^1.0.0", + "query-string": "^4.1.0", + "sort-keys": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz?cache=0&sync_timestamp=1598871750711&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-1.0.0.tgz", + "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=", + "dev": true, + "dependencies": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/minimalistic-assert/download/minimalistic-assert-1.0.1.tgz", + "integrity": "sha1-LhlN4ERibUoQ5/f7wAznPoPk1cc=", + "dev": true + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/minimalistic-crypto-utils/download/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz", + "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npm.taobao.org/minimist/download/minimist-1.2.5.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fminimist%2Fdownload%2Fminimist-1.2.5.tgz", + "integrity": "sha1-Z9ZgFLZqaoqqDAg8X9WN9OTpdgI=", + "dev": true + }, + "node_modules/minipass": { + "version": "3.1.3", + "resolved": "https://registry.npm.taobao.org/minipass/download/minipass-3.1.3.tgz", + "integrity": "sha1-fUL/HzljVILhX5zbUxhN7r1YFf0=", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/minipass-collect/download/minipass-collect-1.0.2.tgz", + "integrity": "sha1-IrgTv3Rdxu26JXa5QAIq1u3Ixhc=", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npm.taobao.org/minipass-flush/download/minipass-flush-1.0.5.tgz", + "integrity": "sha1-gucTXX6JpQ/+ZGEKeHlTxMTLs3M=", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npm.taobao.org/minipass-pipeline/download/minipass-pipeline-1.2.4.tgz?cache=0&sync_timestamp=1595998621838&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fminipass-pipeline%2Fdownload%2Fminipass-pipeline-1.2.4.tgz", + "integrity": "sha1-aEcveXEcCEZXwGfFxq2Tzd6oIUw=", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/yallist/download/yallist-4.0.0.tgz", + "integrity": "sha1-m7knkNnA7/7GO+c1GeEaNQGaOnI=", + "dev": true + }, + "node_modules/mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/mississippi/download/mississippi-3.0.0.tgz", + "integrity": "sha1-6goykfl+C16HdrNj1fChLZTGcCI=", + "dev": true, + "dependencies": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mitt": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.1.2.tgz", + "integrity": "sha1-OA5hSA1qYVtmDwertg1R4KTkvtY=", + "dev": true + }, + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npm.taobao.org/mixin-deep/download/mixin-deep-1.3.2.tgz", + "integrity": "sha1-ESC0PcNZp4Xc5ltVuC4lfM9HlWY=", + "dev": true, + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mixin-deep/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/is-extendable/download/is-extendable-1.0.1.tgz", + "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.5.tgz?cache=0&sync_timestamp=1587535418745&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmkdirp%2Fdownload%2Fmkdirp-0.5.5.tgz", + "integrity": "sha1-2Rzv1i0UNsoPQWIOJRKI1CAJne8=", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mocha": { + "version": "6.2.3", + "resolved": "https://registry.npm.taobao.org/mocha/download/mocha-6.2.3.tgz?cache=0&sync_timestamp=1598655903293&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmocha%2Fdownload%2Fmocha-6.2.3.tgz", + "integrity": "sha1-5khDIYHYuZOTQQISZkRQpMHjGRI=", + "dev": true, + "dependencies": { + "ansi-colors": "3.2.3", + "browser-stdout": "1.3.1", + "debug": "3.2.6", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "find-up": "3.0.0", + "glob": "7.1.3", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "3.13.1", + "log-symbols": "2.2.0", + "minimatch": "3.0.4", + "mkdirp": "0.5.4", + "ms": "2.1.1", + "node-environment-flags": "1.0.5", + "object.assign": "4.1.0", + "strip-json-comments": "2.0.1", + "supports-color": "6.0.0", + "which": "1.3.1", + "wide-align": "1.1.3", + "yargs": "13.3.2", + "yargs-parser": "13.1.2", + "yargs-unparser": "1.6.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/mocha/node_modules/debug": { + "version": "3.2.6", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-3.2.6.tgz", + "integrity": "sha1-6D0X3hbYp++3cX7b5fsQE17uYps=", + "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/mocha/node_modules/glob": { + "version": "7.1.3", + "resolved": "https://registry.npm.taobao.org/glob/download/glob-7.1.3.tgz?cache=0&sync_timestamp=1573078121947&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglob%2Fdownload%2Fglob-7.1.3.tgz", + "integrity": "sha1-OWCDLT8VdBCDQtr9OmezMsCWnfE=", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mocha/node_modules/mkdirp": { + "version": "0.5.4", + "resolved": "https://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.4.tgz?cache=0&sync_timestamp=1587535418745&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmkdirp%2Fdownload%2Fmkdirp-0.5.4.tgz", + "integrity": "sha1-/QFQSmeX7Fyb6B/0PSBJYe1kpRI=", + "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mocha/node_modules/ms": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.1.tgz", + "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=", + "dev": true + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "6.0.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.0.0.tgz?cache=0&sync_timestamp=1598611709087&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.0.0.tgz", + "integrity": "sha1-ds/nQs8fQbubHCmtAwaMBbTA5Ao=", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/mochapack": { + "version": "1.1.15", + "resolved": "https://registry.npm.taobao.org/mochapack/download/mochapack-1.1.15.tgz", + "integrity": "sha1-Qmx5O4ce0AbHgRctorFfYS8R8tw=", + "dev": true, + "dependencies": { + "@babel/runtime-corejs2": "^7.0.0", + "chalk": "^2.4.2", + "chokidar": "^2.0.0", + "glob-parent": "5.1.0", + "globby": "^10.0.1", + "interpret": "^1.2.0", + "is-glob": "^4.0.1", + "loader-utils": "^1.2.3", + "lodash": "^4.17.15", + "memory-fs": "^0.4.1", + "minimatch": "^3.0.4", + "nodent-runtime": "^3.2.1", + "normalize-path": "^3.0.0", + "progress": "^2.0.3", + "source-map-support": "^0.5.13", + "toposort": "^2.0.2", + "yargs": "14.0.0" + }, + "bin": { + "mochapack": "bin/mochapack" + }, + "peerDependencies": { + "mocha": ">=4 <=7", + "webpack": "^4.0.0" + } + }, + "node_modules/mochapack/node_modules/@nodelib/fs.stat": { + "version": "2.0.3", + "resolved": "https://registry.npm.taobao.org/@nodelib/fs.stat/download/@nodelib/fs.stat-2.0.3.tgz", + "integrity": "sha1-NNxfTKu8cg9OYPdadH5+zWwXW9M=", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/mochapack/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/anymatch/download/anymatch-2.0.0.tgz", + "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=", + "dev": true, + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/mochapack/node_modules/anymatch/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mochapack/node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/array-union/download/array-union-2.1.0.tgz", + "integrity": "sha1-t5hCCtvrHego2ErNii4j0+/oXo0=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/mochapack/node_modules/binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-1.13.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbinary-extensions%2Fdownload%2Fbinary-extensions-1.13.1.tgz", + "integrity": "sha1-WYr+VHVbKGilMw0q/51Ou1Mgm2U=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mochapack/node_modules/chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npm.taobao.org/chokidar/download/chokidar-2.1.8.tgz", + "integrity": "sha1-gEs6e2qZNYw8XGHnHYco8EHP+Rc=", + "deprecated": "Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.", + "dev": true, + "dependencies": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + }, + "optionalDependencies": { + "fsevents": "^1.2.7" + } + }, + "node_modules/mochapack/node_modules/chokidar/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/glob-parent/download/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/mochapack/node_modules/chokidar/node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mochapack/node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npm.taobao.org/dir-glob/download/dir-glob-3.0.1.tgz", + "integrity": "sha1-Vtv3PZkqSpO6FYT0U0Bj/S5BcX8=", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mochapack/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-7.0.3.tgz", + "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY=", + "dev": true + }, + "node_modules/mochapack/node_modules/fast-glob": { + "version": "3.2.4", + "resolved": "https://registry.npm.taobao.org/fast-glob/download/fast-glob-3.2.4.tgz?cache=0&sync_timestamp=1592291968616&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-glob%2Fdownload%2Ffast-glob-3.2.4.tgz", + "integrity": "sha1-0grvv5lXk4Pn88xmUpFYybmFVNM=", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mochapack/node_modules/fast-glob/node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npm.taobao.org/braces/download/braces-3.0.2.tgz", + "integrity": "sha1-NFThpGLujVmeI23zNs2epPiv4Qc=", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mochapack/node_modules/fast-glob/node_modules/micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/micromatch/download/micromatch-4.0.2.tgz", + "integrity": "sha1-T8sJmb+fvC/L3SEvbWKbmlbDklk=", + "dev": true, + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mochapack/node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npm.taobao.org/fill-range/download/fill-range-7.0.1.tgz", + "integrity": "sha1-GRmmp8df44ssfHflGYU12prN2kA=", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mochapack/node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-1.2.13.tgz?cache=0&sync_timestamp=1588787369955&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffsevents%2Fdownload%2Ffsevents-1.2.13.tgz", + "integrity": "sha1-8yXLBFVZJCi88Rs4M3DvcOO/zDg=", + "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/mochapack/node_modules/glob-parent": { + "version": "5.1.0", + "resolved": "https://registry.npm.taobao.org/glob-parent/download/glob-parent-5.1.0.tgz", + "integrity": "sha1-X0wdHnSNMM1zrSlEs1d6gbCB6MI=", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/mochapack/node_modules/globby": { + "version": "10.0.2", + "resolved": "https://registry.npm.taobao.org/globby/download/globby-10.0.2.tgz?cache=0&sync_timestamp=1591083783605&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobby%2Fdownload%2Fglobby-10.0.2.tgz", + "integrity": "sha1-J3WT50WsqkZGw6tBEonsR6A5JUM=", + "dev": true, + "dependencies": { + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mochapack/node_modules/ignore": { + "version": "5.1.8", + "resolved": "https://registry.npm.taobao.org/ignore/download/ignore-5.1.8.tgz?cache=0&sync_timestamp=1590809289115&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fignore%2Fdownload%2Fignore-5.1.8.tgz", + "integrity": "sha1-8VCotQo0KJsz4i9YiavU2AFvDlc=", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/mochapack/node_modules/is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "dependencies": { + "binary-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mochapack/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/mochapack/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-7.0.0.tgz", + "integrity": "sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss=", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/mochapack/node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/path-type/download/path-type-4.0.0.tgz", + "integrity": "sha1-hO0BwKe6OAr+CdkKjBgNzZ0DBDs=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/mochapack/node_modules/readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npm.taobao.org/readdirp/download/readdirp-2.2.1.tgz", + "integrity": "sha1-DodiKjMlqjPokihcr4tOhGUppSU=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/mochapack/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/slash/download/slash-3.0.0.tgz", + "integrity": "sha1-ZTm+hwwWWtvVJAIg2+Nh8bxNRjQ=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/mochapack/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-3.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring-width%2Fdownload%2Fstring-width-3.1.0.tgz", + "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/mochapack/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz", + "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/mochapack/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-5.0.1.tgz", + "integrity": "sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ=", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/mochapack/node_modules/yargs": { + "version": "14.0.0", + "resolved": "https://registry.npm.taobao.org/yargs/download/yargs-14.0.0.tgz?cache=0&sync_timestamp=1599673846782&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-14.0.0.tgz", + "integrity": "sha1-ukysyAKzwLPjap55FyN2PVeoUGY=", + "dev": true, + "dependencies": { + "cliui": "^5.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.1" + } + }, + "node_modules/move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/move-concurrently/download/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "dev": true, + "dependencies": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.2.tgz", + "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=" + }, + "node_modules/multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npm.taobao.org/multicast-dns/download/multicast-dns-6.2.3.tgz", + "integrity": "sha1-oOx72QVcQoL3kMPIL04o2zsxsik=", + "dev": true, + "dependencies": { + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/multicast-dns-service-types/download/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", + "dev": true + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npm.taobao.org/mute-stream/download/mute-stream-0.0.8.tgz", + "integrity": "sha1-FjDEKyJR/4HiooPelqVJfqkuXg0=", + "dev": true + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npm.taobao.org/mz/download/mz-2.7.0.tgz", + "integrity": "sha1-lQCAV6Vsr63CvGPd5/n/aVWUjjI=", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nan": { + "version": "2.14.1", + "resolved": "https://registry.npm.taobao.org/nan/download/nan-2.14.1.tgz?cache=0&sync_timestamp=1587495810273&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnan%2Fdownload%2Fnan-2.14.1.tgz", + "integrity": "sha1-174036MQW5FJTDFHCJMV7/iHSwE=", + "dev": true, + "optional": true + }, + "node_modules/nanocolors": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/nanocolors/-/nanocolors-0.1.6.tgz", + "integrity": "sha512-2pvTw6vYRaBLGir2xR7MxaJtyWkrn+C53EpW8yPotG+pdAwBvt0Xwk4VJ6VHLY0aLthVZPvDfm9TdZvrvAm5UQ==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.1.25", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz", + "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npm.taobao.org/nanomatch/download/nanomatch-1.2.13.tgz", + "integrity": "sha1-uHqKpPwN6P5r6IiVs4mD/yZb0Rk=", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npm.taobao.org/natural-compare/download/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node_modules/negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npm.taobao.org/negotiator/download/negotiator-0.6.2.tgz", + "integrity": "sha1-/qz3zPUlp3rpY0Q2pkiD/+yjRvs=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npm.taobao.org/neo-async/download/neo-async-2.6.2.tgz?cache=0&sync_timestamp=1594317434347&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fneo-async%2Fdownload%2Fneo-async-2.6.2.tgz", + "integrity": "sha1-tKr7k+OustgXTKU88WOrfXMIMF8=", + "dev": true + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npm.taobao.org/nice-try/download/nice-try-1.0.5.tgz", + "integrity": "sha1-ozeKdpbOfSI+iPybdkvX7xCJ42Y=", + "dev": true + }, + "node_modules/no-case": { + "version": "2.3.2", + "resolved": "https://registry.npm.taobao.org/no-case/download/no-case-2.3.2.tgz?cache=0&sync_timestamp=1576721537540&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fno-case%2Fdownload%2Fno-case-2.3.2.tgz", + "integrity": "sha1-YLgTOWvjmz8SiKTB7V0efSi0ZKw=", + "dev": true, + "dependencies": { + "lower-case": "^1.1.1" + } + }, + "node_modules/node-environment-flags": { + "version": "1.0.5", + "resolved": "https://registry.npm.taobao.org/node-environment-flags/download/node-environment-flags-1.0.5.tgz", + "integrity": "sha1-+pMCdfW/Xa4YjWGSsktMi7rD12o=", + "dev": true, + "dependencies": { + "object.getownpropertydescriptors": "^2.0.3", + "semver": "^5.7.0" + } + }, + "node_modules/node-forge": { + "version": "0.9.0", + "resolved": "https://registry.npm.taobao.org/node-forge/download/node-forge-0.9.0.tgz?cache=0&sync_timestamp=1599010773454&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnode-forge%2Fdownload%2Fnode-forge-0.9.0.tgz", + "integrity": "sha1-1iQFDtu0SHStyhK7mlLsY8t4JXk=", + "dev": true, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/node-ipc": { + "version": "9.1.1", + "resolved": "https://registry.npm.taobao.org/node-ipc/download/node-ipc-9.1.1.tgz", + "integrity": "sha1-TiRe1pOOZRAOWV68XcNLFujdXWk=", + "dev": true, + "dependencies": { + "event-pubsub": "4.3.0", + "js-message": "1.0.5", + "js-queue": "2.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npm.taobao.org/node-libs-browser/download/node-libs-browser-2.2.1.tgz", + "integrity": "sha1-tk9RPRgzhiX5A0bSew0jXmMfZCU=", + "dev": true, + "dependencies": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" + } + }, + "node_modules/node-libs-browser/node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npm.taobao.org/punycode/download/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "node_modules/node-releases": { + "version": "1.1.61", + "resolved": "https://registry.npm.taobao.org/node-releases/download/node-releases-1.1.61.tgz?cache=0&sync_timestamp=1599612925853&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnode-releases%2Fdownload%2Fnode-releases-1.1.61.tgz", + "integrity": "sha1-cHsPypzk4ReDYSukovy6CQR68W4=", + "dev": true + }, + "node_modules/nodent-runtime": { + "version": "3.2.1", + "resolved": "https://registry.npm.taobao.org/nodent-runtime/download/nodent-runtime-3.2.1.tgz", + "integrity": "sha1-nidV2F4592Qojw1HUuvP4+VB4A4=", + "dev": true, + "hasInstallScript": true + }, + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npm.taobao.org/nopt/download/nopt-5.0.0.tgz?cache=0&sync_timestamp=1597649905420&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnopt%2Fdownload%2Fnopt-5.0.0.tgz", + "integrity": "sha1-UwlCu1ilEvzK/lP+IQ8TolNV3Ig=", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npm.taobao.org/normalize-package-data/download/normalize-package-data-2.5.0.tgz", + "integrity": "sha1-5m2xg4sgDB38IzIl0SyzZSDiNKg=", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-3.0.0.tgz", + "integrity": "sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npm.taobao.org/normalize-range/download/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "3.3.0", + "resolved": "https://registry.npm.taobao.org/normalize-url/download/normalize-url-3.3.0.tgz?cache=0&sync_timestamp=1596373165623&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnormalize-url%2Fdownload%2Fnormalize-url-3.3.0.tgz", + "integrity": "sha1-suHE3E98bVd0PfczpPWXjRhlBVk=", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/normalize-wheel": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/normalize-wheel/-/normalize-wheel-1.0.1.tgz", + "integrity": "sha1-rsiGr/2wRQcNhWRH32Ls+GFG7EU=" + }, + "node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/npm-run-path/download/npm-run-path-2.0.2.tgz?cache=0&sync_timestamp=1577053500910&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnpm-run-path%2Fdownload%2Fnpm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/nth-check/download/nth-check-1.0.2.tgz", + "integrity": "sha1-sr0pXDfj3VijvwcAN2Zjuk2c8Fw=", + "dev": true, + "dependencies": { + "boolbase": "~1.0.0" + } + }, + "node_modules/num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npm.taobao.org/num2fraction/download/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, + "node_modules/nwsapi": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/nwsapi/download/nwsapi-2.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnwsapi%2Fdownload%2Fnwsapi-2.2.0.tgz", + "integrity": "sha1-IEh5qePQaP8qVROcLHcngGgaOLc=", + "dev": true + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npm.taobao.org/oauth-sign/download/oauth-sign-0.9.0.tgz", + "integrity": "sha1-R6ewFrqmi1+g7PPe4IqFxnmsZFU=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npm.taobao.org/object-assign/download/object-assign-4.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-assign%2Fdownload%2Fobject-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npm.taobao.org/object-copy/download/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "1.3.1", + "resolved": "https://registry.npm.taobao.org/object-hash/download/object-hash-1.3.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-hash%2Fdownload%2Fobject-hash-1.3.1.tgz", + "integrity": "sha1-/eRSCYqVHLFF8Dm7fUVUSd3BJt8=", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.8.0", + "resolved": "https://registry.npm.taobao.org/object-inspect/download/object-inspect-1.8.0.tgz?cache=0&sync_timestamp=1592545231350&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-inspect%2Fdownload%2Fobject-inspect-1.8.0.tgz", + "integrity": "sha1-34B+Xs9TpgnMa/6T6sPMe+WzqdA=", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-is": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/object-is/download/object-is-1.1.2.tgz", + "integrity": "sha1-xdLof/nhGfeLegiEQVGeLuwVc7Y=", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/object-keys/download/object-keys-1.1.1.tgz", + "integrity": "sha1-HEfyct8nfzsdrwYWd9nILiMixg4=", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/object-visit/download/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/object.assign/download/object.assign-4.1.0.tgz", + "integrity": "sha1-lovxEA15Vrs8oIbwBvhGs7xACNo=", + "dev": true, + "dependencies": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/object.getownpropertydescriptors/download/object.getownpropertydescriptors-2.1.0.tgz", + "integrity": "sha1-Npvx+VktiridcS3O1cuBx8U1Jkk=", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npm.taobao.org/object.pick/download/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.values": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/object.values/download/object.values-1.1.1.tgz", + "integrity": "sha1-aKmezeNWt+kpWjxeDOMdyMlT3l4=", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1", + "has": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/obuf/download/obuf-1.1.2.tgz", + "integrity": "sha1-Cb6jND1BhZ69RGKS0RydTbYZCE4=", + "dev": true + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npm.taobao.org/on-finished/download/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/on-headers/download/on-headers-1.0.2.tgz", + "integrity": "sha1-dysK5qqlJcOZ5Imt+tkMQD6zwo8=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npm.taobao.org/once/download/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/onetime/download/onetime-2.0.1.tgz?cache=0&sync_timestamp=1597005345612&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fonetime%2Fdownload%2Fonetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "dependencies": { + "mimic-fn": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/open": { + "version": "6.4.0", + "resolved": "https://registry.npm.taobao.org/open/download/open-6.4.0.tgz?cache=0&sync_timestamp=1598611732360&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fopen%2Fdownload%2Fopen-6.4.0.tgz", + "integrity": "sha1-XBPpbQ3IlGhhZPGJZez+iJ7PyKk=", + "dev": true, + "dependencies": { + "is-wsl": "^1.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/opener": { + "version": "1.5.2", + "resolved": "https://registry.npm.taobao.org/opener/download/opener-1.5.2.tgz?cache=0&sync_timestamp=1598733244715&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fopener%2Fdownload%2Fopener-1.5.2.tgz", + "integrity": "sha1-XTfh81B3udysQwE3InGv3rKhNZg=", + "dev": true, + "bin": { + "opener": "bin/opener-bin.js" + } + }, + "node_modules/opn": { + "version": "5.5.0", + "resolved": "https://registry.npm.taobao.org/opn/download/opn-5.5.0.tgz", + "integrity": "sha1-/HFk+rVtI1kExRw7J9pnWMo7m/w=", + "dev": true, + "dependencies": { + "is-wsl": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npm.taobao.org/optionator/download/optionator-0.8.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Foptionator%2Fdownload%2Foptionator-0.8.3.tgz", + "integrity": "sha1-hPodA2/p08fiHZmIS2ARZ+yPtJU=", + "dev": true, + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ora": { + "version": "3.4.0", + "resolved": "https://registry.npm.taobao.org/ora/download/ora-3.4.0.tgz?cache=0&sync_timestamp=1599424857800&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fora%2Fdownload%2Fora-3.4.0.tgz", + "integrity": "sha1-vwdSSRBZo+8+1MhQl1Md6f280xg=", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-spinners": "^2.0.0", + "log-symbols": "^2.2.0", + "strip-ansi": "^5.2.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ora/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz", + "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/original": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/original/download/original-1.0.2.tgz", + "integrity": "sha1-5EKmHP/hxf0gpl8yYcJmY7MD8l8=", + "dev": true, + "dependencies": { + "url-parse": "^1.4.3" + } + }, + "node_modules/os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npm.taobao.org/os-browserify/download/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/os-tmpdir/download/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/p-finally/download/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npm.taobao.org/p-limit/download/p-limit-2.3.0.tgz?cache=0&sync_timestamp=1594559734248&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-limit%2Fdownload%2Fp-limit-2.3.0.tgz", + "integrity": "sha1-PdM8ZHohT9//2DWTPrCG2g3CHbE=", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/p-locate/download/p-locate-3.0.0.tgz", + "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-map": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/p-map/download/p-map-3.0.0.tgz", + "integrity": "sha1-1wTZr4orpoTiYA2aIVmD1BQal50=", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-retry": { + "version": "3.0.1", + "resolved": "https://registry.npm.taobao.org/p-retry/download/p-retry-3.0.1.tgz?cache=0&sync_timestamp=1572521210242&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-retry%2Fdownload%2Fp-retry-3.0.1.tgz", + "integrity": "sha1-MWtMiJPiyNwc+okfQGxLQivr8yg=", + "dev": true, + "dependencies": { + "retry": "^0.12.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/p-try/download/p-try-2.2.0.tgz", + "integrity": "sha1-yyhoVA4xPWHeWPr741zpAE1VQOY=", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npm.taobao.org/pako/download/pako-1.0.11.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpako%2Fdownload%2Fpako-1.0.11.tgz", + "integrity": "sha1-bJWZ00DVTf05RjgCUqNXBaa5kr8=", + "dev": true + }, + "node_modules/parallel-transform": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/parallel-transform/download/parallel-transform-1.2.0.tgz", + "integrity": "sha1-kEnKN9bLIYLDsdLHIL6U0UpYFPw=", + "dev": true, + "dependencies": { + "cyclist": "^1.0.1", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "node_modules/param-case": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/param-case/download/param-case-2.1.1.tgz?cache=0&sync_timestamp=1576721509342&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparam-case%2Fdownload%2Fparam-case-2.1.1.tgz", + "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", + "dev": true, + "dependencies": { + "no-case": "^2.2.0" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/parent-module/download/parent-module-1.0.1.tgz", + "integrity": "sha1-aR0nCeeMefrjoVZiJFLQB2LKqqI=", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parent-module/node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/callsites/download/callsites-3.1.0.tgz", + "integrity": "sha1-s2MKvYlDQy9Us/BRkjjjPNffL3M=", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npm.taobao.org/parse-asn1/download/parse-asn1-5.1.6.tgz?cache=0&sync_timestamp=1597167309380&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse-asn1%2Fdownload%2Fparse-asn1-5.1.6.tgz", + "integrity": "sha1-OFCAo+wTy2KmLTlAnLPoiETNrtQ=", + "dev": true, + "dependencies": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/parse-json": { + "version": "5.1.0", + "resolved": "https://registry.npm.taobao.org/parse-json/download/parse-json-5.1.0.tgz?cache=0&sync_timestamp=1598129182781&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse-json%2Fdownload%2Fparse-json-5.1.0.tgz", + "integrity": "sha1-+WCIzfJKj6qa6poAny2dlCyZlkY=", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse5": { + "version": "5.1.0", + "resolved": "https://registry.npm.taobao.org/parse5/download/parse5-5.1.0.tgz?cache=0&sync_timestamp=1595850861876&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse5%2Fdownload%2Fparse5-5.1.0.tgz", + "integrity": "sha1-xZNByXI/QUxFKXVWTHwApo1YrNI=", + "dev": true + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "5.1.1", + "resolved": "https://registry.npm.taobao.org/parse5-htmlparser2-tree-adapter/download/parse5-htmlparser2-tree-adapter-5.1.1.tgz?cache=0&sync_timestamp=1596089818598&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse5-htmlparser2-tree-adapter%2Fdownload%2Fparse5-htmlparser2-tree-adapter-5.1.1.tgz", + "integrity": "sha1-6MdD1OkhlNUpPs3isIvjHmdGHLw=", + "dev": true, + "dependencies": { + "parse5": "^5.1.1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { + "version": "5.1.1", + "resolved": "https://registry.npm.taobao.org/parse5/download/parse5-5.1.1.tgz?cache=0&sync_timestamp=1595850861876&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse5%2Fdownload%2Fparse5-5.1.1.tgz", + "integrity": "sha1-9o5OW6GFKsLK3AD0VV//bCq7YXg=", + "dev": true + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npm.taobao.org/parseurl/download/parseurl-1.3.3.tgz", + "integrity": "sha1-naGee+6NEt/wUT7Vt2lXeTvC6NQ=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npm.taobao.org/pascalcase/download/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npm.taobao.org/path-browserify/download/path-browserify-0.0.1.tgz", + "integrity": "sha1-5sTd1+06onxoogzE5Q4aTug7vEo=", + "dev": true + }, + "node_modules/path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/path-dirname/download/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/path-exists/download/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/path-is-inside/download/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/path-key/download/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npm.taobao.org/path-parse/download/path-parse-1.0.6.tgz", + "integrity": "sha1-1i27VnlAXXLEc37FhgDp3c8G0kw=", + "dev": true + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npm.taobao.org/path-to-regexp/download/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "node_modules/path-type": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/path-type/download/path-type-3.0.0.tgz", + "integrity": "sha1-zvMdyOCho7sNEFwM2Xzzv0f0428=", + "dev": true, + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/path-type/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz?cache=0&sync_timestamp=1581697613983&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpify%2Fdownload%2Fpify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/pathval": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/pathval/download/pathval-1.1.0.tgz", + "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/pbkdf2": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/pbkdf2/download/pbkdf2-3.1.1.tgz", + "integrity": "sha1-y4cksPramEWWhW0abrr9NYRlS5Q=", + "dev": true, + "dependencies": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npm.taobao.org/picomatch/download/picomatch-2.2.2.tgz?cache=0&sync_timestamp=1584790434095&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpicomatch%2Fdownload%2Fpicomatch-2.2.2.tgz", + "integrity": "sha1-IfMz6ba46v8CRo9RRupAbTRfTa0=", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/pify/download/pify-4.0.1.tgz?cache=0&sync_timestamp=1581697613983&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpify%2Fdownload%2Fpify-4.0.1.tgz", + "integrity": "sha1-SyzSXFDVmHNcUCkiJP2MbfQeMjE=", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npm.taobao.org/pinkie/download/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/pinkie-promise/download/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-3.0.0.tgz", + "integrity": "sha1-J0kCDyOe2ZCIGx9xIQ1R62UjvqM=", + "dev": true, + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pn": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/pn/download/pn-1.1.0.tgz", + "integrity": "sha1-4vTO8OIZ9GPBeas3Rj5OHs3Muvs=", + "dev": true + }, + "node_modules/pnp-webpack-plugin": { + "version": "1.6.4", + "resolved": "https://registry.npm.taobao.org/pnp-webpack-plugin/download/pnp-webpack-plugin-1.6.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpnp-webpack-plugin%2Fdownload%2Fpnp-webpack-plugin-1.6.4.tgz", + "integrity": "sha1-yXEaxNxIpoXauvyG+Lbdn434QUk=", + "dev": true, + "dependencies": { + "ts-pnp": "^1.1.6" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npm.taobao.org/portfinder/download/portfinder-1.0.28.tgz?cache=0&sync_timestamp=1596018176291&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fportfinder%2Fdownload%2Fportfinder-1.0.28.tgz", + "integrity": "sha1-Z8RiKFK9U3TdHdkA93n1NGL6x3g=", + "dev": true, + "dependencies": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/portfinder/node_modules/debug": { + "version": "3.2.6", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-3.2.6.tgz", + "integrity": "sha1-6D0X3hbYp++3cX7b5fsQE17uYps=", + "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npm.taobao.org/posix-character-classes/download/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss": { + "version": "7.0.32", + "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-7.0.32.tgz", + "integrity": "sha1-QxDW7jRwU9o0M9sr5JKIPWLOxZ0=", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + }, + "node_modules/postcss-calc": { + "version": "7.0.4", + "resolved": "https://registry.npm.taobao.org/postcss-calc/download/postcss-calc-7.0.4.tgz?cache=0&sync_timestamp=1598957838506&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-calc%2Fdownload%2Fpostcss-calc-7.0.4.tgz", + "integrity": "sha1-Xhd920FzQebUoZPF2f2K2nkJT4s=", + "dev": true, + "dependencies": { + "postcss": "^7.0.27", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.0.2" + } + }, + "node_modules/postcss-colormin": { + "version": "4.0.3", + "resolved": "https://registry.npm.taobao.org/postcss-colormin/download/postcss-colormin-4.0.3.tgz?cache=0&sync_timestamp=1599672034427&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-colormin%2Fdownload%2Fpostcss-colormin-4.0.3.tgz", + "integrity": "sha1-rgYLzpPteUrHEmTwgTLVUJVr04E=", + "dev": true, + "dependencies": { + "browserslist": "^4.0.0", + "color": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-colormin/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + }, + "node_modules/postcss-convert-values": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/postcss-convert-values/download/postcss-convert-values-4.0.1.tgz?cache=0&sync_timestamp=1599672034819&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-convert-values%2Fdownload%2Fpostcss-convert-values-4.0.1.tgz", + "integrity": "sha1-yjgT7U2g+BL51DcDWE5Enr4Ymn8=", + "dev": true, + "dependencies": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-convert-values/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + }, + "node_modules/postcss-discard-comments": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-discard-comments/download/postcss-discard-comments-4.0.2.tgz?cache=0&sync_timestamp=1599672035158&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-discard-comments%2Fdownload%2Fpostcss-discard-comments-4.0.2.tgz", + "integrity": "sha1-H7q9LCRr/2qq15l7KwkY9NevQDM=", + "dev": true, + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-discard-duplicates/download/postcss-discard-duplicates-4.0.2.tgz?cache=0&sync_timestamp=1599672035521&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-discard-duplicates%2Fdownload%2Fpostcss-discard-duplicates-4.0.2.tgz", + "integrity": "sha1-P+EzzTyCKC5VD8myORdqkge3hOs=", + "dev": true, + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-discard-empty": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/postcss-discard-empty/download/postcss-discard-empty-4.0.1.tgz?cache=0&sync_timestamp=1599672035856&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-discard-empty%2Fdownload%2Fpostcss-discard-empty-4.0.1.tgz", + "integrity": "sha1-yMlR6fc+2UKAGUWERKAq2Qu592U=", + "dev": true, + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/postcss-discard-overridden/download/postcss-discard-overridden-4.0.1.tgz?cache=0&sync_timestamp=1599672036180&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-discard-overridden%2Fdownload%2Fpostcss-discard-overridden-4.0.1.tgz", + "integrity": "sha1-ZSrvipZybwKfXj4AFG7npOdV/1c=", + "dev": true, + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-load-config": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/postcss-load-config/download/postcss-load-config-2.1.0.tgz", + "integrity": "sha1-yE1pK3u3tB3c7ZTuYuirMbQXsAM=", + "dev": true, + "dependencies": { + "cosmiconfig": "^5.0.0", + "import-cwd": "^2.0.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/postcss-loader": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/postcss-loader/download/postcss-loader-3.0.0.tgz?cache=0&sync_timestamp=1599584386697&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-loader%2Fdownload%2Fpostcss-loader-3.0.0.tgz", + "integrity": "sha1-a5eUPkfHLYRfqeA/Jzdz1OjdbC0=", + "dev": true, + "dependencies": { + "loader-utils": "^1.1.0", + "postcss": "^7.0.0", + "postcss-load-config": "^2.0.0", + "schema-utils": "^1.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss-loader/node_modules/schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz?cache=0&sync_timestamp=1598871750711&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-1.0.0.tgz", + "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=", + "dev": true, + "dependencies": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/postcss-merge-longhand": { + "version": "4.0.11", + "resolved": "https://registry.npm.taobao.org/postcss-merge-longhand/download/postcss-merge-longhand-4.0.11.tgz?cache=0&sync_timestamp=1599670256906&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-merge-longhand%2Fdownload%2Fpostcss-merge-longhand-4.0.11.tgz", + "integrity": "sha1-YvSaE+Sg7gTnuY9CuxYGLKJUniQ=", + "dev": true, + "dependencies": { + "css-color-names": "0.0.4", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "stylehacks": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-merge-longhand/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + }, + "node_modules/postcss-merge-rules": { + "version": "4.0.3", + "resolved": "https://registry.npm.taobao.org/postcss-merge-rules/download/postcss-merge-rules-4.0.3.tgz?cache=0&sync_timestamp=1599670257021&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-merge-rules%2Fdownload%2Fpostcss-merge-rules-4.0.3.tgz", + "integrity": "sha1-NivqT/Wh+Y5AdacTxsslrv75plA=", + "dev": true, + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "cssnano-util-same-parent": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0", + "vendors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-merge-rules/node_modules/postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npm.taobao.org/postcss-selector-parser/download/postcss-selector-parser-3.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-selector-parser%2Fdownload%2Fpostcss-selector-parser-3.1.2.tgz", + "integrity": "sha1-sxD1xMD9r3b5SQK7qjDbaqhPUnA=", + "dev": true, + "dependencies": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-minify-font-values/download/postcss-minify-font-values-4.0.2.tgz?cache=0&sync_timestamp=1599670257113&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-minify-font-values%2Fdownload%2Fpostcss-minify-font-values-4.0.2.tgz", + "integrity": "sha1-zUw0TM5HQ0P6xdgiBqssvLiv1aY=", + "dev": true, + "dependencies": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-minify-font-values/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + }, + "node_modules/postcss-minify-gradients": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-minify-gradients/download/postcss-minify-gradients-4.0.2.tgz?cache=0&sync_timestamp=1599670257199&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-minify-gradients%2Fdownload%2Fpostcss-minify-gradients-4.0.2.tgz", + "integrity": "sha1-k7KcL/UJnFNe7NpWxKpuZlpmNHE=", + "dev": true, + "dependencies": { + "cssnano-util-get-arguments": "^4.0.0", + "is-color-stop": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-minify-gradients/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + }, + "node_modules/postcss-minify-params": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-minify-params/download/postcss-minify-params-4.0.2.tgz?cache=0&sync_timestamp=1599670257293&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-minify-params%2Fdownload%2Fpostcss-minify-params-4.0.2.tgz", + "integrity": "sha1-a5zvAwwR41Jh+V9hjJADbWgNuHQ=", + "dev": true, + "dependencies": { + "alphanum-sort": "^1.0.0", + "browserslist": "^4.0.0", + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "uniqs": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-minify-params/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + }, + "node_modules/postcss-minify-selectors": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-minify-selectors/download/postcss-minify-selectors-4.0.2.tgz?cache=0&sync_timestamp=1599670257506&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-minify-selectors%2Fdownload%2Fpostcss-minify-selectors-4.0.2.tgz", + "integrity": "sha1-4uXrQL/uUA0M2SQ1APX46kJi+9g=", + "dev": true, + "dependencies": { + "alphanum-sort": "^1.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-minify-selectors/node_modules/postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npm.taobao.org/postcss-selector-parser/download/postcss-selector-parser-3.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-selector-parser%2Fdownload%2Fpostcss-selector-parser-3.1.2.tgz", + "integrity": "sha1-sxD1xMD9r3b5SQK7qjDbaqhPUnA=", + "dev": true, + "dependencies": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/postcss-modules-extract-imports/download/postcss-modules-extract-imports-2.0.0.tgz", + "integrity": "sha1-gYcZoa4doyX5gyRGsBE27rSTzX4=", + "dev": true, + "dependencies": { + "postcss": "^7.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "3.0.3", + "resolved": "https://registry.npm.taobao.org/postcss-modules-local-by-default/download/postcss-modules-local-by-default-3.0.3.tgz?cache=0&sync_timestamp=1595733620602&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-modules-local-by-default%2Fdownload%2Fpostcss-modules-local-by-default-3.0.3.tgz", + "integrity": "sha1-uxTgzHgnnVBNvcv9fgyiiZP/u7A=", + "dev": true, + "dependencies": { + "icss-utils": "^4.1.1", + "postcss": "^7.0.32", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss-modules-scope": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/postcss-modules-scope/download/postcss-modules-scope-2.2.0.tgz", + "integrity": "sha1-OFyuATzHdD9afXYC0Qc6iequYu4=", + "dev": true, + "dependencies": { + "postcss": "^7.0.6", + "postcss-selector-parser": "^6.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss-modules-values": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/postcss-modules-values/download/postcss-modules-values-3.0.0.tgz", + "integrity": "sha1-W1AA1uuuKbQlUwG0o6VFdEI+fxA=", + "dev": true, + "dependencies": { + "icss-utils": "^4.0.0", + "postcss": "^7.0.6" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/postcss-normalize-charset/download/postcss-normalize-charset-4.0.1.tgz?cache=0&sync_timestamp=1599670257383&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-normalize-charset%2Fdownload%2Fpostcss-normalize-charset-4.0.1.tgz", + "integrity": "sha1-izWt067oOhNrBHHg1ZvlilAoXdQ=", + "dev": true, + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-normalize-display-values/download/postcss-normalize-display-values-4.0.2.tgz?cache=0&sync_timestamp=1599670257599&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-normalize-display-values%2Fdownload%2Fpostcss-normalize-display-values-4.0.2.tgz", + "integrity": "sha1-Db4EpM6QY9RmftK+R2u4MMglk1o=", + "dev": true, + "dependencies": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-display-values/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + }, + "node_modules/postcss-normalize-positions": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-normalize-positions/download/postcss-normalize-positions-4.0.2.tgz?cache=0&sync_timestamp=1599670257682&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-normalize-positions%2Fdownload%2Fpostcss-normalize-positions-4.0.2.tgz", + "integrity": "sha1-BfdX+E8mBDc3g2ipH4ky1LECkX8=", + "dev": true, + "dependencies": { + "cssnano-util-get-arguments": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-positions/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-normalize-repeat-style/download/postcss-normalize-repeat-style-4.0.2.tgz?cache=0&sync_timestamp=1599670257873&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-normalize-repeat-style%2Fdownload%2Fpostcss-normalize-repeat-style-4.0.2.tgz", + "integrity": "sha1-xOu8KJ85kaAo1EdRy90RkYsXkQw=", + "dev": true, + "dependencies": { + "cssnano-util-get-arguments": "^4.0.0", + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-repeat-style/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + }, + "node_modules/postcss-normalize-string": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-normalize-string/download/postcss-normalize-string-4.0.2.tgz?cache=0&sync_timestamp=1599670257788&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-normalize-string%2Fdownload%2Fpostcss-normalize-string-4.0.2.tgz", + "integrity": "sha1-zUTECrB6DHo23F6Zqs4eyk7CaQw=", + "dev": true, + "dependencies": { + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-string/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-normalize-timing-functions/download/postcss-normalize-timing-functions-4.0.2.tgz?cache=0&sync_timestamp=1599670257997&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-normalize-timing-functions%2Fdownload%2Fpostcss-normalize-timing-functions-4.0.2.tgz", + "integrity": "sha1-jgCcoqOUnNr4rSPmtquZy159KNk=", + "dev": true, + "dependencies": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-timing-functions/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + }, + "node_modules/postcss-normalize-unicode": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/postcss-normalize-unicode/download/postcss-normalize-unicode-4.0.1.tgz?cache=0&sync_timestamp=1599670258081&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-normalize-unicode%2Fdownload%2Fpostcss-normalize-unicode-4.0.1.tgz", + "integrity": "sha1-hBvUj9zzAZrUuqdJOj02O1KuHPs=", + "dev": true, + "dependencies": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-unicode/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + }, + "node_modules/postcss-normalize-url": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/postcss-normalize-url/download/postcss-normalize-url-4.0.1.tgz?cache=0&sync_timestamp=1599670258196&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-normalize-url%2Fdownload%2Fpostcss-normalize-url-4.0.1.tgz", + "integrity": "sha1-EOQ3+GvHx+WPe5ZS7YeNqqlfquE=", + "dev": true, + "dependencies": { + "is-absolute-url": "^2.0.0", + "normalize-url": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-url/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + }, + "node_modules/postcss-normalize-whitespace": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-normalize-whitespace/download/postcss-normalize-whitespace-4.0.2.tgz?cache=0&sync_timestamp=1599670258290&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-normalize-whitespace%2Fdownload%2Fpostcss-normalize-whitespace-4.0.2.tgz", + "integrity": "sha1-vx1AcP5Pzqh9E0joJdjMDF+qfYI=", + "dev": true, + "dependencies": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-whitespace/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + }, + "node_modules/postcss-ordered-values": { + "version": "4.1.2", + "resolved": "https://registry.npm.taobao.org/postcss-ordered-values/download/postcss-ordered-values-4.1.2.tgz?cache=0&sync_timestamp=1599670258382&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-ordered-values%2Fdownload%2Fpostcss-ordered-values-4.1.2.tgz", + "integrity": "sha1-DPdcgg7H1cTSgBiVWeC1ceusDu4=", + "dev": true, + "dependencies": { + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-ordered-values/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + }, + "node_modules/postcss-prefix-selector": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/postcss-prefix-selector/-/postcss-prefix-selector-1.13.0.tgz", + "integrity": "sha512-cZtbe79XeClbrip8WODngB8PmF/FpaeYpt8IX1aefIHarjxfBYWO6sETlNopvp2u2c7XFGYQeUTEgF1onsNJ5A==", + "dev": true, + "dependencies": { + "postcss": "^8.3.6" + } + }, + "node_modules/postcss-prefix-selector/node_modules/postcss": { + "version": "8.3.7", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.7.tgz", + "integrity": "sha512-9SaY7nnyQ63/WittqZYAvkkYPyKxchMKH71UDzeTmWuLSvxTRpeEeABZAzlCi55cuGcoFyoV/amX2BdsafQidQ==", + "dev": true, + "dependencies": { + "nanocolors": "^0.1.5", + "nanoid": "^3.1.25", + "source-map-js": "^0.6.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "4.0.3", + "resolved": "https://registry.npm.taobao.org/postcss-reduce-initial/download/postcss-reduce-initial-4.0.3.tgz?cache=0&sync_timestamp=1599670258477&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-reduce-initial%2Fdownload%2Fpostcss-reduce-initial-4.0.3.tgz", + "integrity": "sha1-f9QuvqXpyBRgljniwuhK4nC6SN8=", + "dev": true, + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-reduce-transforms/download/postcss-reduce-transforms-4.0.2.tgz?cache=0&sync_timestamp=1599670258690&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-reduce-transforms%2Fdownload%2Fpostcss-reduce-transforms-4.0.2.tgz", + "integrity": "sha1-F++kBerMbge+NBSlyi0QdGgdTik=", + "dev": true, + "dependencies": { + "cssnano-util-get-match": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-reduce-transforms/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-selector-parser/download/postcss-selector-parser-6.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-selector-parser%2Fdownload%2Fpostcss-selector-parser-6.0.2.tgz", + "integrity": "sha1-k0z3mdAWyDQRhZ4J3Oyt4BKG7Fw=", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-svgo": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-svgo/download/postcss-svgo-4.0.2.tgz?cache=0&sync_timestamp=1599670258791&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-svgo%2Fdownload%2Fpostcss-svgo-4.0.2.tgz", + "integrity": "sha1-F7mXvHEbMzurFDqu07jT1uPTglg=", + "dev": true, + "dependencies": { + "is-svg": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "svgo": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-svgo/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + }, + "node_modules/postcss-unique-selectors": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/postcss-unique-selectors/download/postcss-unique-selectors-4.0.1.tgz?cache=0&sync_timestamp=1599670258883&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-unique-selectors%2Fdownload%2Fpostcss-unique-selectors-4.0.1.tgz", + "integrity": "sha1-lEaRHzKJv9ZMbWgPBzwDsfnuS6w=", + "dev": true, + "dependencies": { + "alphanum-sort": "^1.0.0", + "postcss": "^7.0.0", + "uniqs": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-4.1.0.tgz", + "integrity": "sha1-RD9qIM7WSBor2k+oUypuVdeJoss=", + "dev": true + }, + "node_modules/postcss/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&sync_timestamp=1598611709087&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/posthtml": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.9.2.tgz", + "integrity": "sha1-9MBtufZ7Yf0XxOJW5+PZUVv3Jv0=", + "dev": true, + "dependencies": { + "posthtml-parser": "^0.2.0", + "posthtml-render": "^1.0.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/posthtml-parser": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.2.1.tgz", + "integrity": "sha1-NdUw3jhnQMK6JP8usvrznM3ycd0=", + "dev": true, + "dependencies": { + "htmlparser2": "^3.8.3", + "isobject": "^2.1.0" + } + }, + "node_modules/posthtml-parser/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/posthtml-rename-id": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/posthtml-rename-id/-/posthtml-rename-id-1.0.12.tgz", + "integrity": "sha512-UKXf9OF/no8WZo9edRzvuMenb6AD5hDLzIepJW+a4oJT+T/Lx7vfMYWT4aWlGNQh0WMhnUx1ipN9OkZ9q+ddEw==", + "dev": true, + "dependencies": { + "escape-string-regexp": "1.0.5" + } + }, + "node_modules/posthtml-render": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-1.4.0.tgz", + "integrity": "sha512-W1779iVHGfq0Fvh2PROhCe2QhB8mEErgqzo1wpIt36tCgChafP+hbXIhLDOM8ePJrZcFs0vkNEtdibEWVqChqw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/posthtml-svg-mode": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/posthtml-svg-mode/-/posthtml-svg-mode-1.0.3.tgz", + "integrity": "sha512-hEqw9NHZ9YgJ2/0G7CECOeuLQKZi8HjWLkBaSVtOWjygQ9ZD8P7tqeowYs7WrFdKsWEKG7o+IlsPY8jrr0CJpQ==", + "dev": true, + "dependencies": { + "merge-options": "1.0.1", + "posthtml": "^0.9.2", + "posthtml-parser": "^0.2.1", + "posthtml-render": "^1.0.6" + } + }, + "node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/prelude-ls/download/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/prepend-http/download/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/prettier": { + "version": "1.19.1", + "resolved": "https://registry.npm.taobao.org/prettier/download/prettier-1.19.1.tgz?cache=0&sync_timestamp=1598414069360&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fprettier%2Fdownload%2Fprettier-1.19.1.tgz", + "integrity": "sha1-99f1/4qc2HKnvkyhQglZVqYHl8s=", + "dev": true, + "optional": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pretty": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/pretty/download/pretty-2.0.0.tgz", + "integrity": "sha1-rbx5YLe7/iiaVX3F9zdhmiINBqU=", + "dev": true, + "dependencies": { + "condense-newlines": "^0.2.1", + "extend-shallow": "^2.0.1", + "js-beautify": "^1.6.12" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pretty-error": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/pretty-error/download/pretty-error-2.1.1.tgz", + "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", + "dev": true, + "dependencies": { + "renderkid": "^2.0.1", + "utila": "~0.4" + } + }, + "node_modules/pretty/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npm.taobao.org/process/download/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-2.0.1.tgz", + "integrity": "sha1-eCDZsWEgzFXKmud5JoCufbptf+I=", + "dev": true + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npm.taobao.org/progress/download/progress-2.0.3.tgz", + "integrity": "sha1-foz42PW48jnBvGi+tOt4Vn1XLvg=", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/promise-inflight/download/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npm.taobao.org/proto-list/download/proto-list-1.2.4.tgz", + "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", + "dev": true + }, + "node_modules/proxy-addr": { + "version": "2.0.6", + "resolved": "https://registry.npm.taobao.org/proxy-addr/download/proxy-addr-2.0.6.tgz", + "integrity": "sha1-/cIzZQVEfT8vLGOO0nLK9hS7sr8=", + "dev": true, + "dependencies": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/prr/download/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/pseudomap/download/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "node_modules/psl": { + "version": "1.8.0", + "resolved": "https://registry.npm.taobao.org/psl/download/psl-1.8.0.tgz", + "integrity": "sha1-kyb4vPsBOtzABf3/BWrM4CDlHCQ=", + "dev": true + }, + "node_modules/public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npm.taobao.org/public-encrypt/download/public-encrypt-4.0.3.tgz", + "integrity": "sha1-T8ydd6B+SLp1J+fL4N4z0HATMeA=", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/public-encrypt/node_modules/bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.11.9.tgz", + "integrity": "sha1-JtVWgpRY+dHoH8SJUkk9C6NQeCg=", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/pump/download/pump-3.0.0.tgz", + "integrity": "sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ=", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npm.taobao.org/pumpify/download/pumpify-1.5.1.tgz", + "integrity": "sha1-NlE74karJ1cLGjdKXOJ4v9dDcM4=", + "dev": true, + "dependencies": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + } + }, + "node_modules/pumpify/node_modules/pump": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/pump/download/pump-2.0.1.tgz", + "integrity": "sha1-Ejma3W5M91Jtlzy8i1zi4pCLOQk=", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/punycode/download/punycode-2.1.1.tgz", + "integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew=", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/q": { + "version": "1.5.1", + "resolved": "https://registry.npm.taobao.org/q/download/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true, + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "node_modules/qs": { + "version": "6.5.2", + "resolved": "https://registry.npm.taobao.org/qs/download/qs-6.5.2.tgz", + "integrity": "sha1-yzroBuh0BERYTvFUzo7pjUA/PjY=", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/query-string": { + "version": "4.3.4", + "resolved": "https://registry.npm.taobao.org/query-string/download/query-string-4.3.4.tgz", + "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", + "dev": true, + "dependencies": { + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npm.taobao.org/querystring/download/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npm.taobao.org/querystring-es3/download/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/querystringify/download/querystringify-2.2.0.tgz?cache=0&sync_timestamp=1597686771604&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fquerystringify%2Fdownload%2Fquerystringify-2.2.0.tgz", + "integrity": "sha1-M0WUG0FTy50ILY7uTNogFqmu9/Y=", + "dev": true + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/randombytes/download/randombytes-2.1.0.tgz", + "integrity": "sha1-32+ENy8CcNxlzfYpE0mrekc9Tyo=", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/randomfill/download/randomfill-1.0.4.tgz", + "integrity": "sha1-ySGW/IarQr6YPxvzF3giSTHWFFg=", + "dev": true, + "dependencies": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npm.taobao.org/range-parser/download/range-parser-1.2.1.tgz", + "integrity": "sha1-PPNwI9GZ4cJNGlW4SADC8+ZGgDE=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npm.taobao.org/raw-body/download/raw-body-2.4.0.tgz", + "integrity": "sha1-oc5vucm8NWylLoklarWQWeE9AzI=", + "dev": true, + "dependencies": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npm.taobao.org/read-pkg/download/read-pkg-5.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fread-pkg%2Fdownload%2Fread-pkg-5.2.0.tgz", + "integrity": "sha1-e/KVQ4yloz5WzTDgU7NO5yUMk8w=", + "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.7.tgz?cache=0&sync_timestamp=1581624324274&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freadable-stream%2Fdownload%2Freadable-stream-2.3.7.tgz", + "integrity": "sha1-Hsoc9xGu+BTAT2IlKjamL2yyO1c=", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readdirp": { + "version": "3.4.0", + "resolved": "https://registry.npm.taobao.org/readdirp/download/readdirp-3.4.0.tgz", + "integrity": "sha1-n9zN+ekVWAVEkiGsZF6DA6tbmto=", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/regenerate": { + "version": "1.4.1", + "resolved": "https://registry.npm.taobao.org/regenerate/download/regenerate-1.4.1.tgz?cache=0&sync_timestamp=1591302331571&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerate%2Fdownload%2Fregenerate-1.4.1.tgz", + "integrity": "sha1-ytkq2Oa1kXc0hfvgWkhcr09Ffm8=", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "8.2.0", + "resolved": "https://registry.npm.taobao.org/regenerate-unicode-properties/download/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha1-5d5xEdZV57pgwFfb6f83yH5lzew=", + "dev": true, + "dependencies": { + "regenerate": "^1.4.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.13.7.tgz?cache=0&sync_timestamp=1595456311465&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.13.7.tgz", + "integrity": "sha1-ysLazIoepnX+qrrriugziYrkb1U=", + "dev": true + }, + "node_modules/regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npm.taobao.org/regenerator-transform/download/regenerator-transform-0.14.5.tgz", + "integrity": "sha1-yY2hVGg2ccnE3LFuznNlF+G3/rQ=", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/regex-not/download/regex-not-1.0.2.tgz", + "integrity": "sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw=", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.3.0", + "resolved": "https://registry.npm.taobao.org/regexp.prototype.flags/download/regexp.prototype.flags-1.3.0.tgz?cache=0&sync_timestamp=1576388141321&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregexp.prototype.flags%2Fdownload%2Fregexp.prototype.flags-1.3.0.tgz", + "integrity": "sha1-erqJs8E6ZFCdq888qNn7ub31y3U=", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/regexpp/download/regexpp-2.0.1.tgz", + "integrity": "sha1-jRnTHPYySCtYkEn4KB+T28uk0H8=", + "dev": true, + "engines": { + "node": ">=6.5.0" + } + }, + "node_modules/regexpu-core": { + "version": "4.7.0", + "resolved": "https://registry.npm.taobao.org/regexpu-core/download/regexpu-core-4.7.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregexpu-core%2Fdownload%2Fregexpu-core-4.7.0.tgz", + "integrity": "sha1-/L9FjFBDGwu3tF1pZ7gZLZHz2Tg=", + "dev": true, + "dependencies": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.2.0", + "regjsgen": "^0.5.1", + "regjsparser": "^0.6.4", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.5.2", + "resolved": "https://registry.npm.taobao.org/regjsgen/download/regjsgen-0.5.2.tgz", + "integrity": "sha1-kv8pX7He7L9uzaslQ9IH6RqjNzM=", + "dev": true + }, + "node_modules/regjsparser": { + "version": "0.6.4", + "resolved": "https://registry.npm.taobao.org/regjsparser/download/regjsparser-0.6.4.tgz", + "integrity": "sha1-p2n4aEMIQBpm6bUp0kNv9NBmYnI=", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npm.taobao.org/jsesc/download/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npm.taobao.org/relateurl/download/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/remove-trailing-separator/download/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "node_modules/renderkid": { + "version": "2.0.3", + "resolved": "https://registry.npm.taobao.org/renderkid/download/renderkid-2.0.3.tgz", + "integrity": "sha1-OAF5wv9a4TZcUivy/Pz/AcW3QUk=", + "dev": true, + "dependencies": { + "css-select": "^1.1.0", + "dom-converter": "^0.2", + "htmlparser2": "^3.3.0", + "strip-ansi": "^3.0.0", + "utila": "^0.4.0" + } + }, + "node_modules/renderkid/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz?cache=0&sync_timestamp=1570188663907&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/renderkid/node_modules/css-select": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/css-select/download/css-select-1.2.0.tgz?cache=0&sync_timestamp=1573341911322&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss-select%2Fdownload%2Fcss-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "dev": true, + "dependencies": { + "boolbase": "~1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "nth-check": "~1.0.1" + } + }, + "node_modules/renderkid/node_modules/css-what": { + "version": "2.1.3", + "resolved": "https://registry.npm.taobao.org/css-what/download/css-what-2.1.3.tgz?cache=0&sync_timestamp=1590961613221&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss-what%2Fdownload%2Fcss-what-2.1.3.tgz", + "integrity": "sha1-ptdgRXM2X+dGhsPzEcVlE9iChfI=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/renderkid/node_modules/domutils": { + "version": "1.5.1", + "resolved": "https://registry.npm.taobao.org/domutils/download/domutils-1.5.1.tgz?cache=0&sync_timestamp=1597680509643&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdomutils%2Fdownload%2Fdomutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dev": true, + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/renderkid/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npm.taobao.org/repeat-element/download/repeat-element-1.1.3.tgz", + "integrity": "sha1-eC4NglwMWjuzlzH4Tv7mt0Lmsc4=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npm.taobao.org/repeat-string/download/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npm.taobao.org/request/download/request-2.88.2.tgz", + "integrity": "sha1-1zyRhzHLWofaBH4gcjQUb2ZNErM=", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dev": true, + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request-promise-core": { + "version": "1.1.4", + "resolved": "https://registry.npm.taobao.org/request-promise-core/download/request-promise-core-1.1.4.tgz?cache=0&sync_timestamp=1595378681719&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frequest-promise-core%2Fdownload%2Frequest-promise-core-1.1.4.tgz", + "integrity": "sha1-Pu3UIjII1BmGe3jOgVFn0QWToi8=", + "dev": true, + "dependencies": { + "lodash": "^4.17.19" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "request": "^2.34" + } + }, + "node_modules/request-promise-native": { + "version": "1.0.9", + "resolved": "https://registry.npm.taobao.org/request-promise-native/download/request-promise-native-1.0.9.tgz", + "integrity": "sha1-5AcSBSal79yaObKKVnm/R7nZ3Cg=", + "deprecated": "request-promise-native has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142", + "dev": true, + "dependencies": { + "request-promise-core": "1.1.4", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + }, + "engines": { + "node": ">=0.12.0" + }, + "peerDependencies": { + "request": "^2.34" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/require-directory/download/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/require-main-filename/download/require-main-filename-2.0.0.tgz", + "integrity": "sha1-0LMp7MfMD2Fkn2IhW+aa9UqomJs=", + "dev": true + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/requires-port/download/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "node_modules/resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" + }, + "node_modules/resolve": { + "version": "1.17.0", + "resolved": "https://registry.npm.taobao.org/resolve/download/resolve-1.17.0.tgz", + "integrity": "sha1-sllBtUloIxzC0bt2p5y38sC/hEQ=", + "dev": true, + "dependencies": { + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/resolve-cwd/download/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "dependencies": { + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/resolve-from/download/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npm.taobao.org/resolve-url/download/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "deprecated": "https://github.com/lydell/resolve-url#deprecated", + "dev": true + }, + "node_modules/restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/restore-cursor/download/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "dependencies": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npm.taobao.org/ret/download/ret-0.1.15.tgz", + "integrity": "sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w=", + "dev": true, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npm.taobao.org/retry/download/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/reusify/download/reusify-1.0.4.tgz", + "integrity": "sha1-kNo4Kx4SbvwCFG6QhFqI2xKSXXY=", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rgb-regex": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/rgb-regex/download/rgb-regex-1.0.1.tgz", + "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=", + "dev": true + }, + "node_modules/rgba-regex": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/rgba-regex/download/rgba-regex-1.0.0.tgz", + "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", + "dev": true + }, + "node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npm.taobao.org/rimraf/download/rimraf-2.7.1.tgz", + "integrity": "sha1-NXl/E6f9rcVmFCwp1PB8ytSD4+w=", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/ripemd160/download/ripemd160-2.0.2.tgz", + "integrity": "sha1-ocGm9iR1FXe6XQeRTLyShQWFiQw=", + "dev": true, + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npm.taobao.org/run-async/download/run-async-2.4.1.tgz", + "integrity": "sha1-hEDsz5nqPnC9QJ1JqriOEMGJpFU=", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.1.9", + "resolved": "https://registry.npm.taobao.org/run-parallel/download/run-parallel-1.1.9.tgz", + "integrity": "sha1-yd06fPn0ssS2JE4XOm7YZuYd1nk=", + "dev": true + }, + "node_modules/run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/run-queue/download/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dev": true, + "dependencies": { + "aproba": "^1.1.1" + } + }, + "node_modules/rxjs": { + "version": "6.6.3", + "resolved": "https://registry.npm.taobao.org/rxjs/download/rxjs-6.6.3.tgz?cache=0&sync_timestamp=1599403171365&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frxjs%2Fdownload%2Frxjs-6.6.3.tgz", + "integrity": "sha1-jKhGNcTaqQDA05Z6buesYCce5VI=", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz", + "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=" + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/safe-regex/download/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npm.taobao.org/safer-buffer/download/safer-buffer-2.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsafer-buffer%2Fdownload%2Fsafer-buffer-2.1.2.tgz", + "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=", + "dev": true + }, + "node_modules/sass": { + "version": "1.26.10", + "resolved": "https://registry.npm.taobao.org/sass/download/sass-1.26.10.tgz", + "integrity": "sha1-hR0SYCHNyT3svyAdHsoqIO5DR2A=", + "dev": true, + "dependencies": { + "chokidar": ">=2.0.0 <4.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/sass-loader": { + "version": "8.0.2", + "resolved": "https://registry.npm.taobao.org/sass-loader/download/sass-loader-8.0.2.tgz?cache=0&sync_timestamp=1599136706605&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsass-loader%2Fdownload%2Fsass-loader-8.0.2.tgz", + "integrity": "sha1-3r7NjDziQ8dkVPLoKQSCFQOACQ0=", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "loader-utils": "^1.2.3", + "neo-async": "^2.6.1", + "schema-utils": "^2.6.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0", + "sass": "^1.3.0", + "webpack": "^4.36.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "node_modules/sass-loader/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz", + "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npm.taobao.org/sax/download/sax-1.2.4.tgz", + "integrity": "sha1-KBYjTiN4vdxOU1T6tcqold9xANk=", + "dev": true + }, + "node_modules/saxes": { + "version": "3.1.11", + "resolved": "https://registry.npm.taobao.org/saxes/download/saxes-3.1.11.tgz", + "integrity": "sha1-1Z0f0zLskq2YouCy7mRHAjhLHFs=", + "dev": true, + "dependencies": { + "xmlchars": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-2.7.1.tgz?cache=0&sync_timestamp=1598871750711&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-2.7.1.tgz", + "integrity": "sha1-HKTzLRskxZDCA7jnpQvw6kzTlNc=", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/select-hose/download/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "node_modules/selfsigned": { + "version": "1.10.7", + "resolved": "https://registry.npm.taobao.org/selfsigned/download/selfsigned-1.10.7.tgz", + "integrity": "sha1-2lgZ/QSdVXTyjoipvMbbxubzkGs=", + "dev": true, + "dependencies": { + "node-forge": "0.9.0" + } + }, + "node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz", + "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/send": { + "version": "0.17.1", + "resolved": "https://registry.npm.taobao.org/send/download/send-0.17.1.tgz", + "integrity": "sha1-wdiwWfeQD3Rm3Uk4vcROEd2zdsg=", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/send/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npm.taobao.org/mime/download/mime-1.6.0.tgz?cache=0&sync_timestamp=1590596706367&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime%2Fdownload%2Fmime-1.6.0.tgz", + "integrity": "sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.1.tgz", + "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=", + "dev": true + }, + "node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/serialize-javascript/download/serialize-javascript-4.0.0.tgz?cache=0&sync_timestamp=1599653071356&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fserialize-javascript%2Fdownload%2Fserialize-javascript-4.0.0.tgz", + "integrity": "sha1-tSXhI4SJpez8Qq+sw/6Z5mb0sao=", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npm.taobao.org/serve-index/download/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npm.taobao.org/http-errors/download/http-errors-1.6.3.tgz?cache=0&sync_timestamp=1593407858306&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-errors%2Fdownload%2Fhttp-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz?cache=0&sync_timestamp=1560975547815&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finherits%2Fdownload%2Finherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.0.tgz", + "integrity": "sha1-0L2FU2iHtv58DYGMuWLZ2RxU5lY=", + "dev": true + }, + "node_modules/serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npm.taobao.org/serve-static/download/serve-static-1.14.1.tgz", + "integrity": "sha1-Zm5jbcTwEPfvKZcKiKZ0MgiYsvk=", + "dev": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/set-blocking/download/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/set-value/download/set-value-2.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fset-value%2Fdownload%2Fset-value-2.0.1.tgz", + "integrity": "sha1-oY1AUw5vB95CKMfe/kInr4ytAFs=", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npm.taobao.org/setimmediate/download/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "node_modules/setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.1.tgz", + "integrity": "sha1-fpWsskqpL1iF4KvvW6ExMw1K5oM=", + "dev": true + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npm.taobao.org/sha.js/download/sha.js-2.4.11.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsha.js%2Fdownload%2Fsha.js-2.4.11.tgz", + "integrity": "sha1-N6XPC4HsvGlD3hCbopYNGyZYSuc=", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npm.taobao.org/shallow-clone/download/shallow-clone-3.0.1.tgz", + "integrity": "sha1-jymBrZJTH1UDWwH7IwdppA4C76M=", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/shebang-command/download/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/shebang-regex/download/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shell-quote": { + "version": "1.7.2", + "resolved": "https://registry.npm.taobao.org/shell-quote/download/shell-quote-1.7.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fshell-quote%2Fdownload%2Fshell-quote-1.7.2.tgz", + "integrity": "sha1-Z6fQLHbJ2iT5nSCAj8re0ODgS+I=", + "dev": true + }, + "node_modules/sigmund": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/sigmund/download/sigmund-1.0.1.tgz", + "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", + "dev": true + }, + "node_modules/signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.3.tgz", + "integrity": "sha1-oUEMLt2PB3sItOJTyOrPyvBXRhw=", + "dev": true + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npm.taobao.org/simple-swizzle/download/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "dev": true, + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.3.2.tgz", + "integrity": "sha1-RXSirlb3qyBolvtDHq7tBm/fjwM=", + "dev": true + }, + "node_modules/slash": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/slash/download/slash-2.0.0.tgz", + "integrity": "sha1-3lUoUaF1nfOo8gZTVEL17E3eq0Q=", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/slice-ansi/download/slice-ansi-2.1.0.tgz", + "integrity": "sha1-ys12k0YaY3pXiNkqfdT7oGjoFjY=", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npm.taobao.org/snapdragon/download/snapdragon-0.8.2.tgz", + "integrity": "sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0=", + "dev": true, + "dependencies": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/snapdragon-node/download/snapdragon-node-2.1.1.tgz", + "integrity": "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=", + "dev": true, + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npm.taobao.org/snapdragon-util/download/snapdragon-util-3.0.1.tgz", + "integrity": "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=", + "dev": true, + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/sockjs": { + "version": "0.3.20", + "resolved": "https://registry.npm.taobao.org/sockjs/download/sockjs-0.3.20.tgz", + "integrity": "sha1-smooPsVi74smh7RAM6Tuzqx12FU=", + "dev": true, + "dependencies": { + "faye-websocket": "^0.10.0", + "uuid": "^3.4.0", + "websocket-driver": "0.6.5" + } + }, + "node_modules/sockjs-client": { + "version": "1.4.0", + "resolved": "https://registry.npm.taobao.org/sockjs-client/download/sockjs-client-1.4.0.tgz?cache=0&sync_timestamp=1596410219305&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsockjs-client%2Fdownload%2Fsockjs-client-1.4.0.tgz", + "integrity": "sha1-yfJWjhnI/YFztJl+o0IOC7MGx9U=", + "dev": true, + "dependencies": { + "debug": "^3.2.5", + "eventsource": "^1.0.7", + "faye-websocket": "~0.11.1", + "inherits": "^2.0.3", + "json3": "^3.3.2", + "url-parse": "^1.4.3" + } + }, + "node_modules/sockjs-client/node_modules/debug": { + "version": "3.2.6", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-3.2.6.tgz", + "integrity": "sha1-6D0X3hbYp++3cX7b5fsQE17uYps=", + "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/sockjs-client/node_modules/faye-websocket": { + "version": "0.11.3", + "resolved": "https://registry.npm.taobao.org/faye-websocket/download/faye-websocket-0.11.3.tgz", + "integrity": "sha1-XA6aiWjokSwoZjn96XeosgnyUI4=", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/sort-keys/download/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "dev": true, + "dependencies": { + "is-plain-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/source-list-map/download/source-list-map-2.0.1.tgz", + "integrity": "sha1-OZO9hzv8SEecyp6jpUeDXHwVSzQ=", + "dev": true + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", + "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npm.taobao.org/source-map-resolve/download/source-map-resolve-0.5.3.tgz?cache=0&sync_timestamp=1584829515586&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map-resolve%2Fdownload%2Fsource-map-resolve-0.5.3.tgz", + "integrity": "sha1-GQhmvs51U+H48mei7oLGBrVQmho=", + "dev": true, + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npm.taobao.org/source-map-support/download/source-map-support-0.5.19.tgz?cache=0&sync_timestamp=1587719289626&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map-support%2Fdownload%2Fsource-map-support-0.5.19.tgz", + "integrity": "sha1-qYti+G3K9PZzmWSMCFKRq56P7WE=", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npm.taobao.org/source-map-url/download/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/spdx-correct/download/spdx-correct-3.1.1.tgz?cache=0&sync_timestamp=1590161967473&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fspdx-correct%2Fdownload%2Fspdx-correct-3.1.1.tgz", + "integrity": "sha1-3s6BrJweZxPl99G28X1Gj6U9iak=", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npm.taobao.org/spdx-exceptions/download/spdx-exceptions-2.3.0.tgz", + "integrity": "sha1-PyjOGnegA3JoPq3kpDMYNSeiFj0=", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npm.taobao.org/spdx-expression-parse/download/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha1-z3D1BILu/cmOPOCmgz5KU87rpnk=", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.5", + "resolved": "https://registry.npm.taobao.org/spdx-license-ids/download/spdx-license-ids-3.0.5.tgz?cache=0&sync_timestamp=1562834220236&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fspdx-license-ids%2Fdownload%2Fspdx-license-ids-3.0.5.tgz", + "integrity": "sha1-NpS1gEVnpFjTyARYQqY1hjL2JlQ=", + "dev": true + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/spdy/download/spdy-4.0.2.tgz?cache=0&sync_timestamp=1585970491493&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fspdy%2Fdownload%2Fspdy-4.0.2.tgz", + "integrity": "sha1-t09GYgOj7aRSwCSSuR+56EonZ3s=", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/spdy-transport/download/spdy-transport-3.0.0.tgz", + "integrity": "sha1-ANSGOmQArXXfkzYaFghgXl3NzzE=", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/spdy-transport/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.6.0.tgz?cache=0&sync_timestamp=1581624324274&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freadable-stream%2Fdownload%2Freadable-stream-3.6.0.tgz", + "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/split-string/download/split-string-3.1.0.tgz", + "integrity": "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.0.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsprintf-js%2Fdownload%2Fsprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "node_modules/sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npm.taobao.org/sshpk/download/sshpk-1.16.1.tgz", + "integrity": "sha1-+2YcC+8ps520B2nuOfpwCT1vaHc=", + "dev": true, + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ssri": { + "version": "6.0.1", + "resolved": "https://registry.npm.taobao.org/ssri/download/ssri-6.0.1.tgz", + "integrity": "sha1-KjxBso3UW2K2Nnbst0ABJlrp7dg=", + "dev": true, + "dependencies": { + "figgy-pudding": "^3.5.1" + } + }, + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npm.taobao.org/stable/download/stable-0.1.8.tgz", + "integrity": "sha1-g26zyDgv4pNv6vVEYxAXzn1Ho88=", + "dev": true + }, + "node_modules/stackframe": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/stackframe/download/stackframe-1.2.0.tgz?cache=0&sync_timestamp=1590854108362&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstackframe%2Fdownload%2Fstackframe-1.2.0.tgz", + "integrity": "sha1-UkKUktY8YuuYmATBFVLj0i53kwM=", + "dev": true + }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npm.taobao.org/static-extend/download/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npm.taobao.org/statuses/download/statuses-1.5.0.tgz?cache=0&sync_timestamp=1587327902535&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstatuses%2Fdownload%2Fstatuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/stealthy-require/download/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/stream-browserify/download/stream-browserify-2.0.2.tgz?cache=0&sync_timestamp=1587041194718&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstream-browserify%2Fdownload%2Fstream-browserify-2.0.2.tgz", + "integrity": "sha1-h1IdOKRKp+6RzhzSpH3wy0ndZgs=", + "dev": true, + "dependencies": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "node_modules/stream-each": { + "version": "1.2.3", + "resolved": "https://registry.npm.taobao.org/stream-each/download/stream-each-1.2.3.tgz", + "integrity": "sha1-6+J6DDibBPvMIzZClS4Qcxr6m64=", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "node_modules/stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npm.taobao.org/stream-http/download/stream-http-2.8.3.tgz", + "integrity": "sha1-stJCRpKIpaJ+xP6JM6z2I95lFPw=", + "dev": true, + "dependencies": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "node_modules/stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/stream-shift/download/stream-shift-1.0.1.tgz?cache=0&sync_timestamp=1576147168429&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstream-shift%2Fdownload%2Fstream-shift-1.0.1.tgz", + "integrity": "sha1-1wiCgVWasneEJCebCHfaPDktWj0=", + "dev": true + }, + "node_modules/strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/strict-uri-encode/download/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/string_decoder/download/string_decoder-1.1.1.tgz?cache=0&sync_timestamp=1565170823020&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring_decoder%2Fdownload%2Fstring_decoder-1.1.1.tgz", + "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-width": { + "version": "4.2.0", + "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-4.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring-width%2Fdownload%2Fstring-width-4.2.0.tgz", + "integrity": "sha1-lSGCxGzHssMT0VluYjmSvRY7crU=", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/string.prototype.trimend/download/string.prototype.trimend-1.0.1.tgz?cache=0&sync_timestamp=1586465374694&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring.prototype.trimend%2Fdownload%2Fstring.prototype.trimend-1.0.1.tgz", + "integrity": "sha1-hYEqa4R6wAInD1gIFGBkyZX7aRM=", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/string.prototype.trimstart/download/string.prototype.trimstart-1.0.1.tgz?cache=0&sync_timestamp=1586465375114&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring.prototype.trimstart%2Fdownload%2Fstring.prototype.trimstart-1.0.1.tgz", + "integrity": "sha1-FK9tnzSwU/fPyJty+PLuFLkDmlQ=", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-6.0.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-6.0.0.tgz", + "integrity": "sha1-CxVx3XZpzNTz4G4U7x7tJiJa5TI=", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-5.0.0.tgz?cache=0&sync_timestamp=1570188663907&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-5.0.0.tgz", + "integrity": "sha1-OIU59VF5vzkznIGvMKZU1p+Hy3U=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/strip-eof/download/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/strip-final-newline/download/strip-final-newline-2.0.0.tgz", + "integrity": "sha1-ibhS+y/L6Tb29LMYevsKEsGrWK0=", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-indent": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/strip-indent/download/strip-indent-2.0.0.tgz", + "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-2.0.1.tgz?cache=0&sync_timestamp=1594567532500&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-json-comments%2Fdownload%2Fstrip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stylehacks": { + "version": "4.0.3", + "resolved": "https://registry.npm.taobao.org/stylehacks/download/stylehacks-4.0.3.tgz?cache=0&sync_timestamp=1599672034713&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstylehacks%2Fdownload%2Fstylehacks-4.0.3.tgz", + "integrity": "sha1-Zxj8r00eB9ihMYaQiB6NlnJqcdU=", + "dev": true, + "dependencies": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/stylehacks/node_modules/postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npm.taobao.org/postcss-selector-parser/download/postcss-selector-parser-3.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-selector-parser%2Fdownload%2Fpostcss-selector-parser-3.1.2.tgz", + "integrity": "sha1-sxD1xMD9r3b5SQK7qjDbaqhPUnA=", + "dev": true, + "dependencies": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz?cache=0&sync_timestamp=1598611709087&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-5.5.0.tgz", + "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/svg-baker": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/svg-baker/-/svg-baker-1.7.0.tgz", + "integrity": "sha512-nibslMbkXOIkqKVrfcncwha45f97fGuAOn1G99YwnwTj8kF9YiM6XexPcUso97NxOm6GsP0SIvYVIosBis1xLg==", + "dev": true, + "dependencies": { + "bluebird": "^3.5.0", + "clone": "^2.1.1", + "he": "^1.1.1", + "image-size": "^0.5.1", + "loader-utils": "^1.1.0", + "merge-options": "1.0.1", + "micromatch": "3.1.0", + "postcss": "^5.2.17", + "postcss-prefix-selector": "^1.6.0", + "posthtml-rename-id": "^1.0", + "posthtml-svg-mode": "^1.0.3", + "query-string": "^4.3.2", + "traverse": "^0.6.6" + } + }, + "node_modules/svg-baker-runtime": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/svg-baker-runtime/-/svg-baker-runtime-1.4.7.tgz", + "integrity": "sha512-Zorfwwj5+lWjk/oxwSMsRdS2sPQQdTmmsvaSpzU+i9ZWi3zugHLt6VckWfnswphQP0LmOel3nggpF5nETbt6xw==", + "dev": true, + "dependencies": { + "deepmerge": "1.3.2", + "mitt": "1.1.2", + "svg-baker": "^1.7.0" + } + }, + "node_modules/svg-baker-runtime/node_modules/deepmerge": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.3.2.tgz", + "integrity": "sha1-FmNpFinU2/42T6EqKk8KqGqjoFA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/chalk/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/svg-baker/node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/svg-baker/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/is-descriptor/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/micromatch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.0.tgz", + "integrity": "sha512-3StSelAE+hnRvMs8IdVW7Uhk8CVed5tp+kLLGlBP6WiRAXS21GPGu/Nat4WNPXj2Eoc24B02SaeoyozPMfj0/g==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.2.2", + "define-property": "^1.0.0", + "extend-shallow": "^2.0.1", + "extglob": "^2.0.2", + "fragment-cache": "^0.2.1", + "kind-of": "^5.0.2", + "nanomatch": "^1.2.1", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "dependencies": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/svg-baker/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "dependencies": { + "has-flag": "^1.0.0" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/svg-sprite-loader": { + "version": "6.0.9", + "resolved": "https://registry.npmjs.org/svg-sprite-loader/-/svg-sprite-loader-6.0.9.tgz", + "integrity": "sha512-V/F3iI1J/xWeO0cRXkEFvhujvBQ3deAPFlhip+AW00Hs+9gighu619mblucIWdRPmDMfcSWJD/ZuXf6HldIskw==", + "dev": true, + "dependencies": { + "bluebird": "^3.5.0", + "deepmerge": "1.3.2", + "domready": "1.0.8", + "escape-string-regexp": "1.0.5", + "loader-utils": "^1.1.0", + "svg-baker": "^1.5.0", + "svg-baker-runtime": "^1.4.7", + "url-slug": "2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/svg-sprite-loader/node_modules/deepmerge": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.3.2.tgz", + "integrity": "sha1-FmNpFinU2/42T6EqKk8KqGqjoFA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/svg-tags/download/svg-tags-1.0.0.tgz", + "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=", + "dev": true + }, + "node_modules/svgo": { + "version": "1.3.2", + "resolved": "https://registry.npm.taobao.org/svgo/download/svgo-1.3.2.tgz?cache=0&sync_timestamp=1572433263159&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsvgo%2Fdownload%2Fsvgo-1.3.2.tgz", + "integrity": "sha1-ttxRHAYzRsnkFbgeQ0ARRbltQWc=", + "deprecated": "This SVGO version is no longer supported. Upgrade to v2.x.x.", + "dev": true, + "dependencies": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npm.taobao.org/symbol-tree/download/symbol-tree-3.2.4.tgz", + "integrity": "sha1-QwY30ki6d+B4iDlR+5qg7tfGP6I=", + "dev": true + }, + "node_modules/table": { + "version": "5.4.6", + "resolved": "https://registry.npm.taobao.org/table/download/table-5.4.6.tgz", + "integrity": "sha1-EpLRlQDOP4YFOwXw6Ofko7shB54=", + "dev": true, + "dependencies": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/table/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-7.0.3.tgz", + "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY=", + "dev": true + }, + "node_modules/table/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/table/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-3.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring-width%2Fdownload%2Fstring-width-3.1.0.tgz", + "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/table/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz", + "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tapable": { + "version": "1.1.3", + "resolved": "https://registry.npm.taobao.org/tapable/download/tapable-1.1.3.tgz?cache=0&sync_timestamp=1589549570189&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftapable%2Fdownload%2Ftapable-1.1.3.tgz", + "integrity": "sha1-ofzMBrWNth/XpF2i2kT186Pme6I=", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "4.8.0", + "resolved": "https://registry.npm.taobao.org/terser/download/terser-4.8.0.tgz?cache=0&sync_timestamp=1599141092640&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fterser%2Fdownload%2Fterser-4.8.0.tgz", + "integrity": "sha1-YwVjQ9fHC7KfOvZlhlpG/gOg3xc=", + "dev": true, + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "1.4.5", + "resolved": "https://registry.npm.taobao.org/terser-webpack-plugin/download/terser-webpack-plugin-1.4.5.tgz?cache=0&sync_timestamp=1597229593156&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fterser-webpack-plugin%2Fdownload%2Fterser-webpack-plugin-1.4.5.tgz", + "integrity": "sha1-oheu+uozDnNP+sthIOwfoxLWBAs=", + "dev": true, + "dependencies": { + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^4.0.0", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" + }, + "engines": { + "node": ">= 6.9.0" + }, + "peerDependencies": { + "webpack": "^4.0.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz?cache=0&sync_timestamp=1598871750711&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-1.0.0.tgz", + "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=", + "dev": true, + "dependencies": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/terser-webpack-plugin/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/terser/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npm.taobao.org/text-table/download/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/thenify/download/thenify-3.3.1.tgz", + "integrity": "sha1-iTLmhqQGYDigFt2eLKRq3Zg4qV8=", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npm.taobao.org/thenify-all/download/thenify-all-1.6.0.tgz", + "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", + "dev": true, + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/thread-loader": { + "version": "2.1.3", + "resolved": "https://registry.npm.taobao.org/thread-loader/download/thread-loader-2.1.3.tgz", + "integrity": "sha1-y9LBOfwrLebp0o9iKGq3cMGsvdo=", + "dev": true, + "dependencies": { + "loader-runner": "^2.3.1", + "loader-utils": "^1.1.0", + "neo-async": "^2.6.0" + }, + "engines": { + "node": ">= 6.9.0 <7.0.0 || >= 8.9.0" + }, + "peerDependencies": { + "webpack": "^2.0.0 || ^3.0.0 || ^4.0.0" + } + }, + "node_modules/throttle-debounce": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-1.1.0.tgz", + "integrity": "sha512-XH8UiPCQcWNuk2LYePibW/4qL97+ZQ1AN3FNXwZRBNPPowo/NRU5fAlDCSNBJIYCKbioZfuYtMhG4quqoJhVzg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npm.taobao.org/through/download/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npm.taobao.org/through2/download/through2-2.0.5.tgz", + "integrity": "sha1-AcHjnrMdB8t9A6lqcIIyYLIxMs0=", + "dev": true, + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/thunky/download/thunky-1.1.0.tgz?cache=0&sync_timestamp=1571043401546&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fthunky%2Fdownload%2Fthunky-1.1.0.tgz", + "integrity": "sha1-Wrr3FKlAXbBQRzK7zNLO3Z75U30=", + "dev": true + }, + "node_modules/timers-browserify": { + "version": "2.0.11", + "resolved": "https://registry.npm.taobao.org/timers-browserify/download/timers-browserify-2.0.11.tgz", + "integrity": "sha1-gAsfPu4nLlvFPuRloE0OgEwxIR8=", + "dev": true, + "dependencies": { + "setimmediate": "^1.0.4" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/timsort": { + "version": "0.3.0", + "resolved": "https://registry.npm.taobao.org/timsort/download/timsort-0.3.0.tgz", + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", + "dev": true + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npm.taobao.org/tmp/download/tmp-0.0.33.tgz?cache=0&sync_timestamp=1588178571895&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftmp%2Fdownload%2Ftmp-0.0.33.tgz", + "integrity": "sha1-bTQzWIl2jSGyvNoKonfO07G/rfk=", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/to-arraybuffer/download/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/to-fast-properties/download/to-fast-properties-2.0.0.tgz?cache=0&sync_timestamp=1580550317222&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fto-fast-properties%2Fdownload%2Fto-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npm.taobao.org/to-object-path/download/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npm.taobao.org/to-regex/download/to-regex-3.0.2.tgz", + "integrity": "sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4=", + "dev": true, + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/toidentifier/download/toidentifier-1.0.0.tgz", + "integrity": "sha1-fhvjRw8ed5SLxD2Uo8j013UrpVM=", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/toposort": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/toposort/download/toposort-2.0.2.tgz", + "integrity": "sha1-riF2gXXRVZ1IvvNUILL0li8JwzA=", + "dev": true + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npm.taobao.org/tough-cookie/download/tough-cookie-2.5.0.tgz?cache=0&sync_timestamp=1584646121003&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftough-cookie%2Fdownload%2Ftough-cookie-2.5.0.tgz", + "integrity": "sha1-zZ+yoKodWhK0c72fuW+j3P9lreI=", + "dev": true, + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/tr46/download/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/traverse": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", + "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=", + "dev": true + }, + "node_modules/tryer": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/tryer/download/tryer-1.0.1.tgz", + "integrity": "sha1-8shUBoALmw90yfdGW4HqrSQSUvg=", + "dev": true + }, + "node_modules/ts-pnp": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/ts-pnp/download/ts-pnp-1.2.0.tgz", + "integrity": "sha1-pQCtCEsHmPHDBxrzkeZZEshrypI=", + "dev": true, + "engines": { + "node": ">=6" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/tslib": { + "version": "1.13.0", + "resolved": "https://registry.npm.taobao.org/tslib/download/tslib-1.13.0.tgz?cache=0&sync_timestamp=1596753875166&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftslib%2Fdownload%2Ftslib-1.13.0.tgz", + "integrity": "sha1-yIHhPMcBWJTtkUhi0nZDb6mkcEM=", + "dev": true + }, + "node_modules/tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npm.taobao.org/tty-browserify/download/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npm.taobao.org/tunnel-agent/download/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npm.taobao.org/tweetnacl/download/tweetnacl-0.14.5.tgz?cache=0&sync_timestamp=1581364203962&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftweetnacl%2Fdownload%2Ftweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npm.taobao.org/type-check/download/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npm.taobao.org/type-detect/download/type-detect-4.0.8.tgz", + "integrity": "sha1-dkb7XxiHHPu3dJ5pvTmmOI63RQw=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npm.taobao.org/type-fest/download/type-fest-0.6.0.tgz", + "integrity": "sha1-jSojcNPfiG61yQraHFv2GIrPg4s=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npm.taobao.org/type-is/download/type-is-1.6.18.tgz", + "integrity": "sha1-TlUs0F3wlGfcvE73Od6J8s83wTE=", + "dev": true, + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npm.taobao.org/typedarray/download/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "node_modules/uglify-js": { + "version": "3.4.10", + "resolved": "https://registry.npm.taobao.org/uglify-js/download/uglify-js-3.4.10.tgz?cache=0&sync_timestamp=1599412871908&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fuglify-js%2Fdownload%2Fuglify-js-3.4.10.tgz", + "integrity": "sha1-mtlWPY6zrN+404WX0q8dgV9qdV8=", + "dev": true, + "dependencies": { + "commander": "~2.19.0", + "source-map": "~0.6.1" + }, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/uglify-js/node_modules/commander": { + "version": "2.19.0", + "resolved": "https://registry.npm.taobao.org/commander/download/commander-2.19.0.tgz?cache=0&sync_timestamp=1598576116597&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-2.19.0.tgz", + "integrity": "sha1-9hmKqE5bg8RgVLlN3tv+1e6f8So=", + "dev": true + }, + "node_modules/uglify-js/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/unicode-canonical-property-names-ecmascript/download/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha1-JhmADEyCWADv3YNDr33Zkzy+KBg=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/unicode-match-property-ecmascript/download/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha1-jtKjJWmWG86SJ9Cc0/+7j+1fAgw=", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/unicode-match-property-value-ecmascript/download/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha1-DZH2AO7rMJaqlisdb8iIduZOpTE=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/unicode-property-aliases-ecmascript/download/unicode-property-aliases-ecmascript-1.1.0.tgz?cache=0&sync_timestamp=1583945910569&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funicode-property-aliases-ecmascript%2Fdownload%2Funicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha1-3Vepn2IHvt/0Yoq++5TFDblByPQ=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unidecode": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/unidecode/-/unidecode-0.1.8.tgz", + "integrity": "sha1-77swFTi8RSRqmsjFWdcvAVMFBT4=", + "dev": true, + "engines": { + "node": ">= 0.4.12" + } + }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/union-value/download/union-value-1.0.1.tgz", + "integrity": "sha1-C2/nuDWuzaYcbqTU8CwUIh4QmEc=", + "dev": true, + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/uniq": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/uniq/download/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", + "dev": true + }, + "node_modules/uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/uniqs/download/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", + "dev": true + }, + "node_modules/unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/unique-filename/download/unique-filename-1.1.1.tgz", + "integrity": "sha1-HWl2k2mtoFgxA6HmrodoG1ZXMjA=", + "dev": true, + "dependencies": { + "unique-slug": "^2.0.0" + } + }, + "node_modules/unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/unique-slug/download/unique-slug-2.0.2.tgz", + "integrity": "sha1-uqvOkQg/xk6UWw861hPiZPfNTmw=", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npm.taobao.org/universalify/download/universalify-0.1.2.tgz?cache=0&sync_timestamp=1583530825899&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funiversalify%2Fdownload%2Funiversalify-0.1.2.tgz", + "integrity": "sha1-tkb2m+OULavOzJ1mOcgNwQXvqmY=", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/unpipe/download/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unquote": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/unquote/download/unquote-1.1.1.tgz", + "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", + "dev": true + }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/unset-value/download/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npm.taobao.org/has-value/download/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/isobject/download/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npm.taobao.org/has-values/download/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/upath/download/upath-1.2.0.tgz?cache=0&sync_timestamp=1567457281208&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fupath%2Fdownload%2Fupath-1.2.0.tgz", + "integrity": "sha1-j2bbzVWog6za5ECK+LA1pQRMGJQ=", + "dev": true, + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npm.taobao.org/upper-case/download/upper-case-1.1.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fupper-case%2Fdownload%2Fupper-case-1.1.3.tgz", + "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", + "dev": true + }, + "node_modules/uri-js": { + "version": "4.4.0", + "resolved": "https://registry.npm.taobao.org/uri-js/download/uri-js-4.4.0.tgz?cache=0&sync_timestamp=1598814377097&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Furi-js%2Fdownload%2Furi-js-4.4.0.tgz", + "integrity": "sha1-qnFCYd55PoqCNHp7zJznTobyhgI=", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npm.taobao.org/urix/download/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "deprecated": "Please see https://github.com/lydell/urix#deprecated", + "dev": true + }, + "node_modules/url": { + "version": "0.11.0", + "resolved": "https://registry.npm.taobao.org/url/download/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/url-loader": { + "version": "2.3.0", + "resolved": "https://registry.npm.taobao.org/url-loader/download/url-loader-2.3.0.tgz", + "integrity": "sha1-4OLvZY8APvuMpBsPP/v3a6uIZYs=", + "dev": true, + "dependencies": { + "loader-utils": "^1.2.3", + "mime": "^2.4.4", + "schema-utils": "^2.5.0" + }, + "engines": { + "node": ">= 8.9.0" + }, + "peerDependencies": { + "file-loader": "*", + "webpack": "^4.0.0" + }, + "peerDependenciesMeta": { + "file-loader": { + "optional": true + } + } + }, + "node_modules/url-parse": { + "version": "1.4.7", + "resolved": "https://registry.npm.taobao.org/url-parse/download/url-parse-1.4.7.tgz", + "integrity": "sha1-qKg1NejACjFuQDpdtKwbm4U64ng=", + "dev": true, + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/url-slug": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/url-slug/-/url-slug-2.0.0.tgz", + "integrity": "sha1-p4nVrtSZXA2VrzM3etHVxo1NcCc=", + "dev": true, + "dependencies": { + "unidecode": "0.1.8" + } + }, + "node_modules/url/node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npm.taobao.org/punycode/download/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + }, + "node_modules/use": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/use/download/use-3.1.1.tgz", + "integrity": "sha1-1QyMrHmhn7wg8pEfVuuXP04QBw8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/util": { + "version": "0.11.1", + "resolved": "https://registry.npm.taobao.org/util/download/util-0.11.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Futil%2Fdownload%2Futil-0.11.1.tgz", + "integrity": "sha1-MjZzNyDsZLsn9uJvQhqqLhtYjWE=", + "dev": true, + "dependencies": { + "inherits": "2.0.3" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "node_modules/util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/util.promisify/download/util.promisify-1.0.1.tgz", + "integrity": "sha1-a693dLgO6w91INi4HQeYKlmruu4=", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/util/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz?cache=0&sync_timestamp=1560975547815&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finherits%2Fdownload%2Finherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "node_modules/utila": { + "version": "0.4.0", + "resolved": "https://registry.npm.taobao.org/utila/download/utila-0.4.0.tgz", + "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", + "dev": true + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/utils-merge/download/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npm.taobao.org/uuid/download/uuid-3.4.0.tgz?cache=0&sync_timestamp=1595885088251&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fuuid%2Fdownload%2Fuuid-3.4.0.tgz", + "integrity": "sha1-sj5DWK+oogL+ehAK8fX4g/AgB+4=", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "dev": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/v8-compile-cache/download/v8-compile-cache-2.1.1.tgz", + "integrity": "sha1-VLw83UMxe8qR413K8wWxpyN950U=", + "dev": true + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npm.taobao.org/validate-npm-package-license/download/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha1-/JH2uce6FchX9MssXe/uw51PQQo=", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/vary/download/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/velocity-animate": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/velocity-animate/-/velocity-animate-1.5.2.tgz", + "integrity": "sha512-m6EXlCAMetKztO1ppBhGU1/1MR3IiEevO6ESq6rcrSQ3Q77xYSW13jkfXW88o4xMrkXJhy/U7j4wFR/twMB0Eg==" + }, + "node_modules/vendors": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/vendors/download/vendors-1.0.4.tgz?cache=0&sync_timestamp=1579857147055&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvendors%2Fdownload%2Fvendors-1.0.4.tgz", + "integrity": "sha1-4rgApT56Kbk1BsPPQRANFsTErY4=", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npm.taobao.org/verror/download/verror-1.10.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fverror%2Fdownload%2Fverror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/vm-browserify/download/vm-browserify-1.1.2.tgz?cache=0&sync_timestamp=1572870717730&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvm-browserify%2Fdownload%2Fvm-browserify-1.1.2.tgz", + "integrity": "sha1-eGQcSIuObKkadfUR56OzKobl3aA=", + "dev": true + }, + "node_modules/vue": { + "version": "2.6.12", + "resolved": "https://registry.npm.taobao.org/vue/download/vue-2.6.12.tgz", + "integrity": "sha1-9evU+mvShpQD4pqJau1JBEVskSM=" + }, + "node_modules/vue-eslint-parser": { + "version": "7.1.0", + "resolved": "https://registry.npm.taobao.org/vue-eslint-parser/download/vue-eslint-parser-7.1.0.tgz?cache=0&sync_timestamp=1589566521118&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-eslint-parser%2Fdownload%2Fvue-eslint-parser-7.1.0.tgz", + "integrity": "sha1-nNvMgj5lawh1B6GRFzK4Z6wQHoM=", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "eslint-scope": "^5.0.0", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.2.1", + "esquery": "^1.0.1", + "lodash": "^4.17.15" + }, + "engines": { + "node": ">=8.10" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5.0.0" + } + }, + "node_modules/vue-eslint-parser/node_modules/eslint-scope": { + "version": "5.1.0", + "resolved": "https://registry.npm.taobao.org/eslint-scope/download/eslint-scope-5.1.0.tgz?cache=0&sync_timestamp=1591269986906&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-scope%2Fdownload%2Feslint-scope-5.1.0.tgz", + "integrity": "sha1-0Plx3+WcaeDK2mhLI9Sdv4JgDOU=", + "dev": true, + "dependencies": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/vue-hot-reload-api": { + "version": "2.3.4", + "resolved": "https://registry.npm.taobao.org/vue-hot-reload-api/download/vue-hot-reload-api-2.3.4.tgz?cache=0&sync_timestamp=1568190386192&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-hot-reload-api%2Fdownload%2Fvue-hot-reload-api-2.3.4.tgz", + "integrity": "sha1-UylVzB6yCKPZkLOp+acFdGV+CPI=", + "dev": true + }, + "node_modules/vue-loader": { + "version": "15.9.3", + "resolved": "https://registry.npm.taobao.org/vue-loader/download/vue-loader-15.9.3.tgz?cache=0&sync_timestamp=1599639283575&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-loader%2Fdownload%2Fvue-loader-15.9.3.tgz", + "integrity": "sha1-DeNdnlVdPtU5aVFsrFziVTEpndo=", + "dev": true, + "dependencies": { + "@vue/component-compiler-utils": "^3.1.0", + "hash-sum": "^1.0.2", + "loader-utils": "^1.1.0", + "vue-hot-reload-api": "^2.3.0", + "vue-style-loader": "^4.1.0" + }, + "peerDependencies": { + "css-loader": "*", + "webpack": "^3.0.0 || ^4.1.0 || ^5.0.0-0" + }, + "peerDependenciesMeta": { + "cache-loader": { + "optional": true + }, + "vue-template-compiler": { + "optional": true + } + } + }, + "node_modules/vue-loader-v16": { + "name": "vue-loader", + "version": "16.8.3", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.8.3.tgz", + "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==", + "dev": true, + "optional": true, + "dependencies": { + "chalk": "^4.1.0", + "hash-sum": "^2.0.0", + "loader-utils": "^2.0.0" + } + }, + "node_modules/vue-loader-v16/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "optional": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/vue-loader-v16/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "optional": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/vue-loader-v16/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "optional": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/vue-loader-v16/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "optional": true + }, + "node_modules/vue-loader-v16/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/vue-loader-v16/node_modules/loader-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "dev": true, + "optional": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/vue-loader-v16/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "optional": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/vue-loader/node_modules/hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/hash-sum/download/hash-sum-1.0.2.tgz", + "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", + "dev": true + }, + "node_modules/vue-page-split": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/vue-page-split/-/vue-page-split-1.2.2.tgz", + "integrity": "sha512-GQF/j6buQGALl+zaCAw/4byV/6F0KB3jZga7zgiDOhfz/78rxrpCOrf2RAdB300rjt0+WK6JmmVx0GLQxuUHHQ==", + "dependencies": { + "core-js": "^3.6.5", + "vue": "^2.6.11" + } + }, + "node_modules/vue-router": { + "version": "3.4.3", + "resolved": "https://registry.npm.taobao.org/vue-router/download/vue-router-3.4.3.tgz", + "integrity": "sha1-+pN2hhbuM4qhdPFgrJZRZ/pXL/o=" + }, + "node_modules/vue-style-loader": { + "version": "4.1.2", + "resolved": "https://registry.npm.taobao.org/vue-style-loader/download/vue-style-loader-4.1.2.tgz", + "integrity": "sha1-3t80mAbyXOtOZPOtfApE+6c1/Pg=", + "dev": true, + "dependencies": { + "hash-sum": "^1.0.2", + "loader-utils": "^1.0.2" + } + }, + "node_modules/vue-style-loader/node_modules/hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/hash-sum/download/hash-sum-1.0.2.tgz", + "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", + "dev": true + }, + "node_modules/vue-template-compiler": { + "version": "2.6.12", + "resolved": "https://registry.npm.taobao.org/vue-template-compiler/download/vue-template-compiler-2.6.12.tgz?cache=0&sync_timestamp=1597927407682&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-template-compiler%2Fdownload%2Fvue-template-compiler-2.6.12.tgz", + "integrity": "sha1-lH7XGWdEyKUoXr4SM/6WBDf8xX4=", + "dev": true, + "dependencies": { + "de-indent": "^1.0.2", + "he": "^1.1.0" + } + }, + "node_modules/vue-template-es2015-compiler": { + "version": "1.9.1", + "resolved": "https://registry.npm.taobao.org/vue-template-es2015-compiler/download/vue-template-es2015-compiler-1.9.1.tgz", + "integrity": "sha1-HuO8mhbsv1EYvjNLsV+cRvgvWCU=", + "dev": true + }, + "node_modules/vuex": { + "version": "3.5.1", + "resolved": "https://registry.npm.taobao.org/vuex/download/vuex-3.5.1.tgz", + "integrity": "sha1-8bjc6mSbwlJUz09DWAgdv12hiz0=", + "peerDependencies": { + "vue": "^2.0.0" + } + }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/w3c-hr-time/download/w3c-hr-time-1.0.2.tgz?cache=0&sync_timestamp=1583455604765&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fw3c-hr-time%2Fdownload%2Fw3c-hr-time-1.0.2.tgz", + "integrity": "sha1-ConN9cwVgi35w2BUNnaWPgzDCM0=", + "dev": true, + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/w3c-xmlserializer/download/w3c-xmlserializer-1.1.2.tgz", + "integrity": "sha1-MEhcp9cKb9BSQgo9Ev2Q5jOc55Q=", + "dev": true, + "dependencies": { + "domexception": "^1.0.1", + "webidl-conversions": "^4.0.2", + "xml-name-validator": "^3.0.0" + } + }, + "node_modules/watchpack": { + "version": "1.7.4", + "resolved": "https://registry.npm.taobao.org/watchpack/download/watchpack-1.7.4.tgz?cache=0&sync_timestamp=1598569379663&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwatchpack%2Fdownload%2Fwatchpack-1.7.4.tgz", + "integrity": "sha1-bp2lOzyAuy1lCBiPWyAEEIZs0ws=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" + }, + "optionalDependencies": { + "chokidar": "^3.4.1", + "watchpack-chokidar2": "^2.0.0" + } + }, + "node_modules/watchpack-chokidar2": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/watchpack-chokidar2/download/watchpack-chokidar2-2.0.0.tgz", + "integrity": "sha1-mUihhmy71suCTeoTp+1pH2yN3/A=", + "dev": true, + "optional": true, + "dependencies": { + "chokidar": "^2.1.8" + }, + "engines": { + "node": "<8.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/anymatch/download/anymatch-2.0.0.tgz", + "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=", + "dev": true, + "optional": true, + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/watchpack-chokidar2/node_modules/anymatch/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "optional": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-1.13.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbinary-extensions%2Fdownload%2Fbinary-extensions-1.13.1.tgz", + "integrity": "sha1-WYr+VHVbKGilMw0q/51Ou1Mgm2U=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npm.taobao.org/chokidar/download/chokidar-2.1.8.tgz", + "integrity": "sha1-gEs6e2qZNYw8XGHnHYco8EHP+Rc=", + "deprecated": "Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.", + "dev": true, + "optional": true, + "dependencies": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + }, + "optionalDependencies": { + "fsevents": "^1.2.7" + } + }, + "node_modules/watchpack-chokidar2/node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-1.2.13.tgz?cache=0&sync_timestamp=1588787369955&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffsevents%2Fdownload%2Ffsevents-1.2.13.tgz", + "integrity": "sha1-8yXLBFVZJCi88Rs4M3DvcOO/zDg=", + "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/glob-parent/download/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "optional": true, + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "optional": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "optional": true, + "dependencies": { + "binary-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npm.taobao.org/readdirp/download/readdirp-2.2.1.tgz", + "integrity": "sha1-DodiKjMlqjPokihcr4tOhGUppSU=", + "dev": true, + "optional": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npm.taobao.org/wbuf/download/wbuf-1.7.3.tgz", + "integrity": "sha1-wdjRSTFtPqhShIiVy2oL/oh7h98=", + "dev": true, + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/wcwidth/download/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/webidl-conversions/download/webidl-conversions-4.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebidl-conversions%2Fdownload%2Fwebidl-conversions-4.0.2.tgz", + "integrity": "sha1-qFWYCx8LazWbodXZ+zmulB+qY60=", + "dev": true + }, + "node_modules/webpack": { + "version": "4.44.1", + "resolved": "https://registry.npm.taobao.org/webpack/download/webpack-4.44.1.tgz?cache=0&sync_timestamp=1598642642485&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack%2Fdownload%2Fwebpack-4.44.1.tgz", + "integrity": "sha1-F+af/58yG48RfR/acU7fwLk5zCE=", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "acorn": "^6.4.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^4.3.0", + "eslint-scope": "^4.0.3", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.3", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", + "schema-utils": "^1.0.0", + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.3", + "watchpack": "^1.7.4", + "webpack-sources": "^1.4.1" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=6.11.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + }, + "webpack-command": { + "optional": true + } + } + }, + "node_modules/webpack-bundle-analyzer": { + "version": "3.8.0", + "resolved": "https://registry.npm.taobao.org/webpack-bundle-analyzer/download/webpack-bundle-analyzer-3.8.0.tgz?cache=0&sync_timestamp=1589893683541&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-bundle-analyzer%2Fdownload%2Fwebpack-bundle-analyzer-3.8.0.tgz", + "integrity": "sha1-zms/kI2vBp/R9yZvaSy7O97ZuhY=", + "dev": true, + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1", + "bfj": "^6.1.1", + "chalk": "^2.4.1", + "commander": "^2.18.0", + "ejs": "^2.6.1", + "express": "^4.16.3", + "filesize": "^3.6.1", + "gzip-size": "^5.0.0", + "lodash": "^4.17.15", + "mkdirp": "^0.5.1", + "opener": "^1.5.1", + "ws": "^6.0.0" + }, + "bin": { + "webpack-bundle-analyzer": "lib/bin/analyzer.js" + }, + "engines": { + "node": ">= 6.14.4" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/acorn": { + "version": "7.4.0", + "resolved": "https://registry.npm.taobao.org/acorn/download/acorn-7.4.0.tgz?cache=0&sync_timestamp=1597235774928&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn%2Fdownload%2Facorn-7.4.0.tgz", + "integrity": "sha1-4a1IbmxUUBY0xsOXxcEh2qODYHw=", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npm.taobao.org/acorn-walk/download/acorn-walk-7.2.0.tgz?cache=0&sync_timestamp=1597235855275&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn-walk%2Fdownload%2Facorn-walk-7.2.0.tgz", + "integrity": "sha1-DeiJpgEgOQmw++B7iTjcIdLpZ7w=", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/ws": { + "version": "6.2.1", + "resolved": "https://registry.npm.taobao.org/ws/download/ws-6.2.1.tgz?cache=0&sync_timestamp=1593925481882&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fws%2Fdownload%2Fws-6.2.1.tgz", + "integrity": "sha1-RC/fCkftZPWbal2P8TD0dI7VJPs=", + "dev": true, + "dependencies": { + "async-limiter": "~1.0.0" + } + }, + "node_modules/webpack-chain": { + "version": "6.5.1", + "resolved": "https://registry.npm.taobao.org/webpack-chain/download/webpack-chain-6.5.1.tgz?cache=0&sync_timestamp=1595814928534&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-chain%2Fdownload%2Fwebpack-chain-6.5.1.tgz", + "integrity": "sha1-TycoTLu2N+PI+970Pu9YjU2GEgY=", + "dev": true, + "dependencies": { + "deepmerge": "^1.5.2", + "javascript-stringify": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/webpack-dev-middleware": { + "version": "3.7.2", + "resolved": "https://registry.npm.taobao.org/webpack-dev-middleware/download/webpack-dev-middleware-3.7.2.tgz?cache=0&sync_timestamp=1594744455919&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-dev-middleware%2Fdownload%2Fwebpack-dev-middleware-3.7.2.tgz", + "integrity": "sha1-ABnD23FuP6XOy/ZPKriKdLqzMfM=", + "dev": true, + "dependencies": { + "memory-fs": "^0.4.1", + "mime": "^2.4.4", + "mkdirp": "^0.5.1", + "range-parser": "^1.2.1", + "webpack-log": "^2.0.0" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "webpack": "^4.0.0" + } + }, + "node_modules/webpack-dev-server": { + "version": "3.11.0", + "resolved": "https://registry.npm.taobao.org/webpack-dev-server/download/webpack-dev-server-3.11.0.tgz", + "integrity": "sha1-jxVKO84bz9HMYY705wMniFXn/4w=", + "dev": true, + "dependencies": { + "ansi-html": "0.0.7", + "bonjour": "^3.5.0", + "chokidar": "^2.1.8", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "debug": "^4.1.1", + "del": "^4.1.1", + "express": "^4.17.1", + "html-entities": "^1.3.1", + "http-proxy-middleware": "0.19.1", + "import-local": "^2.0.0", + "internal-ip": "^4.3.0", + "ip": "^1.1.5", + "is-absolute-url": "^3.0.3", + "killable": "^1.0.1", + "loglevel": "^1.6.8", + "opn": "^5.5.0", + "p-retry": "^3.0.1", + "portfinder": "^1.0.26", + "schema-utils": "^1.0.0", + "selfsigned": "^1.10.7", + "semver": "^6.3.0", + "serve-index": "^1.9.1", + "sockjs": "0.3.20", + "sockjs-client": "1.4.0", + "spdy": "^4.0.2", + "strip-ansi": "^3.0.1", + "supports-color": "^6.1.0", + "url": "^0.11.0", + "webpack-dev-middleware": "^3.7.2", + "webpack-log": "^2.0.0", + "ws": "^6.2.1", + "yargs": "^13.3.2" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 6.11.5" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz?cache=0&sync_timestamp=1570188663907&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/anymatch/download/anymatch-2.0.0.tgz", + "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=", + "dev": true, + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/webpack-dev-server/node_modules/anymatch/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-1.13.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbinary-extensions%2Fdownload%2Fbinary-extensions-1.13.1.tgz", + "integrity": "sha1-WYr+VHVbKGilMw0q/51Ou1Mgm2U=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npm.taobao.org/chokidar/download/chokidar-2.1.8.tgz", + "integrity": "sha1-gEs6e2qZNYw8XGHnHYco8EHP+Rc=", + "deprecated": "Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.", + "dev": true, + "dependencies": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + }, + "optionalDependencies": { + "fsevents": "^1.2.7" + } + }, + "node_modules/webpack-dev-server/node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-1.2.13.tgz?cache=0&sync_timestamp=1588787369955&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffsevents%2Fdownload%2Ffsevents-1.2.13.tgz", + "integrity": "sha1-8yXLBFVZJCi88Rs4M3DvcOO/zDg=", + "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/webpack-dev-server/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/glob-parent/download/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/webpack-dev-server/node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npm.taobao.org/is-absolute-url/download/is-absolute-url-3.0.3.tgz?cache=0&sync_timestamp=1569736493122&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-absolute-url%2Fdownload%2Fis-absolute-url-3.0.3.tgz", + "integrity": "sha1-lsaiK2ojkpsR6gr7GDbDatSl1pg=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/webpack-dev-server/node_modules/is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "dependencies": { + "binary-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npm.taobao.org/readdirp/download/readdirp-2.2.1.tgz", + "integrity": "sha1-DodiKjMlqjPokihcr4tOhGUppSU=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/webpack-dev-server/node_modules/schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz?cache=0&sync_timestamp=1598871750711&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-1.0.0.tgz", + "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=", + "dev": true, + "dependencies": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/webpack-dev-server/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz", + "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/webpack-dev-server/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&sync_timestamp=1598611709087&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "6.2.1", + "resolved": "https://registry.npm.taobao.org/ws/download/ws-6.2.1.tgz?cache=0&sync_timestamp=1593925481882&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fws%2Fdownload%2Fws-6.2.1.tgz", + "integrity": "sha1-RC/fCkftZPWbal2P8TD0dI7VJPs=", + "dev": true, + "dependencies": { + "async-limiter": "~1.0.0" + } + }, + "node_modules/webpack-log": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/webpack-log/download/webpack-log-2.0.0.tgz?cache=0&sync_timestamp=1564684667159&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-log%2Fdownload%2Fwebpack-log-2.0.0.tgz", + "integrity": "sha1-W3ko4GN1k/EZ0y9iJ8HgrDHhtH8=", + "dev": true, + "dependencies": { + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/webpack-merge": { + "version": "4.2.2", + "resolved": "https://registry.npm.taobao.org/webpack-merge/download/webpack-merge-4.2.2.tgz?cache=0&sync_timestamp=1599634565482&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-merge%2Fdownload%2Fwebpack-merge-4.2.2.tgz", + "integrity": "sha1-onxS6ng9E5iv0gh/VH17nS9DY00=", + "dev": true, + "dependencies": { + "lodash": "^4.17.15" + } + }, + "node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npm.taobao.org/webpack-sources/download/webpack-sources-1.4.3.tgz?cache=0&sync_timestamp=1598284464979&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-sources%2Fdownload%2Fwebpack-sources-1.4.3.tgz", + "integrity": "sha1-7t2OwLko+/HL/plOItLYkPMwqTM=", + "dev": true, + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "node_modules/webpack-sources/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz?cache=0&sync_timestamp=1598871750711&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-1.0.0.tgz", + "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=", + "dev": true, + "dependencies": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/websocket-driver": { + "version": "0.6.5", + "resolved": "https://registry.npm.taobao.org/websocket-driver/download/websocket-driver-0.6.5.tgz?cache=0&sync_timestamp=1591288600527&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebsocket-driver%2Fdownload%2Fwebsocket-driver-0.6.5.tgz", + "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", + "dev": true, + "dependencies": { + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npm.taobao.org/websocket-extensions/download/websocket-extensions-0.1.4.tgz?cache=0&sync_timestamp=1591103014229&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebsocket-extensions%2Fdownload%2Fwebsocket-extensions-0.1.4.tgz", + "integrity": "sha1-f4RzvIOd/YdgituV1+sHUhFXikI=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npm.taobao.org/whatwg-encoding/download/whatwg-encoding-1.0.5.tgz", + "integrity": "sha1-WrrPd3wyFmpR0IXWtPPn0nET3bA=", + "dev": true, + "dependencies": { + "iconv-lite": "0.4.24" + } + }, + "node_modules/whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npm.taobao.org/whatwg-mimetype/download/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha1-PUseAxLSB5h5+Cav8Y2+7KWWD78=", + "dev": true + }, + "node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npm.taobao.org/whatwg-url/download/whatwg-url-7.1.0.tgz?cache=0&sync_timestamp=1599418911601&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhatwg-url%2Fdownload%2Fwhatwg-url-7.1.0.tgz", + "integrity": "sha1-wsSS8eymEpiO/T0iZr4bn8YXDQY=", + "dev": true, + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npm.taobao.org/which/download/which-1.3.1.tgz?cache=0&sync_timestamp=1574116720213&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhich%2Fdownload%2Fwhich-1.3.1.tgz", + "integrity": "sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/which-module/download/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "node_modules/wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npm.taobao.org/wide-align/download/wide-align-1.1.3.tgz", + "integrity": "sha1-rgdOa9wMFKQx6ATmJFScYzsABFc=", + "dev": true, + "dependencies": { + "string-width": "^1.0.2 || 2" + } + }, + "node_modules/wide-align/node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz?cache=0&sync_timestamp=1570188663907&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/wide-align/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/wide-align/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-2.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring-width%2Fdownload%2Fstring-width-2.1.1.tgz", + "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=", + "dev": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/wide-align/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npm.taobao.org/word-wrap/download/word-wrap-1.2.3.tgz", + "integrity": "sha1-YQY29rH3A4kb00dxzLF/uTtHB5w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/worker-farm": { + "version": "1.7.0", + "resolved": "https://registry.npm.taobao.org/worker-farm/download/worker-farm-1.7.0.tgz", + "integrity": "sha1-JqlMU5G7ypJhUgAvabhKS/dy5ag=", + "dev": true, + "dependencies": { + "errno": "~0.1.7" + } + }, + "node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-5.1.0.tgz", + "integrity": "sha1-H9H2cjXVttD+54EFYAG/tpTAOwk=", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-7.0.3.tgz", + "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY=", + "dev": true + }, + "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-3.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring-width%2Fdownload%2Fstring-width-3.1.0.tgz", + "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz", + "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/write": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/write/download/write-1.0.3.tgz", + "integrity": "sha1-CADhRSO5I6OH5BUSPIZWFqrg9cM=", + "dev": true, + "dependencies": { + "mkdirp": "^0.5.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ws": { + "version": "7.3.1", + "resolved": "https://registry.npm.taobao.org/ws/download/ws-7.3.1.tgz?cache=0&sync_timestamp=1593925481882&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fws%2Fdownload%2Fws-7.3.1.tgz", + "integrity": "sha1-0FR79n985PEqct/jEmLGjX3FUcg=", + "dev": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/xml-name-validator/download/xml-name-validator-3.0.0.tgz", + "integrity": "sha1-auc+Bt5NjG5H+fsYH3jWSK1FfGo=", + "dev": true + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/xmlchars/download/xmlchars-2.2.0.tgz", + "integrity": "sha1-Bg/hvLf5x2/ioX24apvDq4lCEMs=", + "dev": true + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/xtend/download/xtend-4.0.2.tgz", + "integrity": "sha1-u3J3n1+kZRhrH0OPZ0+jR/2121Q=", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/y18n/download/y18n-4.0.0.tgz?cache=0&sync_timestamp=1599348540827&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fy18n%2Fdownload%2Fy18n-4.0.0.tgz", + "integrity": "sha1-le+U+F7MgdAHwmThkKEg8KPIVms=", + "dev": true + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/yallist/download/yallist-3.1.1.tgz", + "integrity": "sha1-27fa+b/YusmrRev2ArjLrQ1dCP0=", + "dev": true + }, + "node_modules/yargs": { + "version": "13.3.2", + "resolved": "https://registry.npm.taobao.org/yargs/download/yargs-13.3.2.tgz?cache=0&sync_timestamp=1599673846782&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-13.3.2.tgz", + "integrity": "sha1-rX/+/sGqWVZayRX4Lcyzipwxot0=", + "dev": true, + "dependencies": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "node_modules/yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-13.1.2.tgz?cache=0&sync_timestamp=1599672368427&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-13.1.2.tgz", + "integrity": "sha1-Ew8JcC667vJlDVTObj5XBvek+zg=", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "node_modules/yargs-parser/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz", + "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs-unparser": { + "version": "1.6.0", + "resolved": "https://registry.npm.taobao.org/yargs-unparser/download/yargs-unparser-1.6.0.tgz?cache=0&sync_timestamp=1592366192647&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-unparser%2Fdownload%2Fyargs-unparser-1.6.0.tgz", + "integrity": "sha1-7yXCx2n/a9CeSw+dfGBfsnhG6p8=", + "dev": true, + "dependencies": { + "flat": "^4.1.0", + "lodash": "^4.17.15", + "yargs": "^13.3.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-7.0.3.tgz", + "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY=", + "dev": true + }, + "node_modules/yargs/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-3.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring-width%2Fdownload%2Fstring-width-3.1.0.tgz", + "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz", + "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yorkie": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/yorkie/download/yorkie-2.0.0.tgz", + "integrity": "sha1-kkEZEtQ1IU4SxRwq4Qk+VLa7g9k=", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "execa": "^0.8.0", + "is-ci": "^1.0.10", + "normalize-path": "^1.0.0", + "strip-indent": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/yorkie/node_modules/cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "dependencies": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "node_modules/yorkie/node_modules/execa": { + "version": "0.8.0", + "resolved": "https://registry.npm.taobao.org/execa/download/execa-0.8.0.tgz?cache=0&sync_timestamp=1594145085955&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexeca%2Fdownload%2Fexeca-0.8.0.tgz", + "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=", + "dev": true, + "dependencies": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/yorkie/node_modules/get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/get-stream/download/get-stream-3.0.0.tgz?cache=0&sync_timestamp=1597056502934&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-stream%2Fdownload%2Fget-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/yorkie/node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npm.taobao.org/lru-cache/download/lru-cache-4.1.5.tgz?cache=0&sync_timestamp=1594427582110&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flru-cache%2Fdownload%2Flru-cache-4.1.5.tgz", + "integrity": "sha1-i75Q6oW+1ZvJ4z3KuCNe6bz0Q80=", + "dev": true, + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/yorkie/node_modules/normalize-path": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-1.0.0.tgz", + "integrity": "sha1-MtDkcvkf80VwHBWoMRAY07CpA3k=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yorkie/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + } + }, + "dependencies": { + "@ant-design-vue/babel-helper-vue-transform-on": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/@ant-design-vue/babel-helper-vue-transform-on/download/@ant-design-vue/babel-helper-vue-transform-on-1.0.1.tgz", + "integrity": "sha1-0hnZL04fxeet0hHDR8f6AAUYtiM=", + "dev": true + }, + "@ant-design-vue/babel-plugin-jsx": { + "version": "1.0.0-rc.1", + "resolved": "https://registry.npm.taobao.org/@ant-design-vue/babel-plugin-jsx/download/@ant-design-vue/babel-plugin-jsx-1.0.0-rc.1.tgz", + "integrity": "sha1-rlbOy9qfCGkbz5Lf6Y4kFud9dYs=", + "dev": true, + "requires": { + "@ant-design-vue/babel-helper-vue-transform-on": "^1.0.0", + "@babel/helper-module-imports": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.0.0", + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "camelcase": "^6.0.0", + "html-tags": "^3.1.0", + "svg-tags": "^1.0.0" + } + }, + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.10.4.tgz?cache=0&sync_timestamp=1593522948158&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fcode-frame%2Fdownload%2F%40babel%2Fcode-frame-7.10.4.tgz", + "integrity": "sha1-Fo2ho26Q2miujUnA8bSMfGJJITo=", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/compat-data": { + "version": "7.11.0", + "resolved": "https://registry.npm.taobao.org/@babel/compat-data/download/@babel/compat-data-7.11.0.tgz", + "integrity": "sha1-6fc+/gmvE1W3I6fzmxG61jfXyZw=", + "dev": true, + "requires": { + "browserslist": "^4.12.0", + "invariant": "^2.2.4", + "semver": "^5.5.0" + } + }, + "@babel/core": { + "version": "7.11.6", + "resolved": "https://registry.npm.taobao.org/@babel/core/download/@babel/core-7.11.6.tgz?cache=0&sync_timestamp=1599146750684&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fcore%2Fdownload%2F%40babel%2Fcore-7.11.6.tgz", + "integrity": "sha1-OpRV3HOH/xusRXcGULwTugShVlE=", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.11.6", + "@babel/helper-module-transforms": "^7.11.0", + "@babel/helpers": "^7.10.4", + "@babel/parser": "^7.11.5", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.11.5", + "@babel/types": "^7.11.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + } + }, + "@babel/generator": { + "version": "7.11.6", + "resolved": "https://registry.npm.taobao.org/@babel/generator/download/@babel/generator-7.11.6.tgz?cache=0&sync_timestamp=1599146753105&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fgenerator%2Fdownload%2F%40babel%2Fgenerator-7.11.6.tgz", + "integrity": "sha1-uGiQD4GxY7TUZOokVFxhy6xNxiA=", + "dev": true, + "requires": { + "@babel/types": "^7.11.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-annotate-as-pure/download/@babel/helper-annotate-as-pure-7.10.4.tgz?cache=0&sync_timestamp=1593521294951&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-annotate-as-pure%2Fdownload%2F%40babel%2Fhelper-annotate-as-pure-7.10.4.tgz", + "integrity": "sha1-W/DUlaP3V6w72ki1vzs7ownHK6M=", + "dev": true, + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-builder-binary-assignment-operator-visitor/download/@babel/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz?cache=0&sync_timestamp=1593522960718&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-builder-binary-assignment-operator-visitor%2Fdownload%2F%40babel%2Fhelper-builder-binary-assignment-operator-visitor-7.10.4.tgz", + "integrity": "sha1-uwt18xv5jL+f8UPBrleLhydK4aM=", + "dev": true, + "requires": { + "@babel/helper-explode-assignable-expression": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-compilation-targets/download/@babel/helper-compilation-targets-7.10.4.tgz?cache=0&sync_timestamp=1593522816195&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-compilation-targets%2Fdownload%2F%40babel%2Fhelper-compilation-targets-7.10.4.tgz", + "integrity": "sha1-gEro4/BDdmB8x5G51H1UAnYzK9I=", + "dev": true, + "requires": { + "@babel/compat-data": "^7.10.4", + "browserslist": "^4.12.0", + "invariant": "^2.2.4", + "levenary": "^1.1.1", + "semver": "^5.5.0" + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.10.5", + "resolved": "https://registry.npm.taobao.org/@babel/helper-create-class-features-plugin/download/@babel/helper-create-class-features-plugin-7.10.5.tgz", + "integrity": "sha1-n2FEa6gOgkCwpchcb9rIRZ1vJZ0=", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-member-expression-to-functions": "^7.10.5", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-create-regexp-features-plugin/download/@babel/helper-create-regexp-features-plugin-7.10.4.tgz?cache=0&sync_timestamp=1593522973297&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-create-regexp-features-plugin%2Fdownload%2F%40babel%2Fhelper-create-regexp-features-plugin-7.10.4.tgz", + "integrity": "sha1-/dYNiFJGWaC2lZwFeZJeQlcU87g=", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-regex": "^7.10.4", + "regexpu-core": "^4.7.0" + } + }, + "@babel/helper-define-map": { + "version": "7.10.5", + "resolved": "https://registry.npm.taobao.org/@babel/helper-define-map/download/@babel/helper-define-map-7.10.5.tgz?cache=0&sync_timestamp=1594750707541&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-define-map%2Fdownload%2F%40babel%2Fhelper-define-map-7.10.5.tgz", + "integrity": "sha1-tTwQ23imQIABUmkrEzkxR6y5uzA=", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.10.4", + "@babel/types": "^7.10.5", + "lodash": "^4.17.19" + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.11.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-explode-assignable-expression/download/@babel/helper-explode-assignable-expression-7.11.4.tgz?cache=0&sync_timestamp=1597948364953&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-explode-assignable-expression%2Fdownload%2F%40babel%2Fhelper-explode-assignable-expression-7.11.4.tgz", + "integrity": "sha1-LY40cCUswXq6kX7eeAPUp6J2pBs=", + "dev": true, + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-function-name/download/@babel/helper-function-name-7.10.4.tgz?cache=0&sync_timestamp=1593522977138&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-function-name%2Fdownload%2F%40babel%2Fhelper-function-name-7.10.4.tgz", + "integrity": "sha1-0tOyDFmtjEcRL6fSqUvAnV74Lxo=", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-get-function-arity/download/@babel/helper-get-function-arity-7.10.4.tgz?cache=0&sync_timestamp=1593521294451&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-get-function-arity%2Fdownload%2F%40babel%2Fhelper-get-function-arity-7.10.4.tgz", + "integrity": "sha1-mMHL6g4jMvM/mkZhuM4VBbLBm6I=", + "dev": true, + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-hoist-variables/download/@babel/helper-hoist-variables-7.10.4.tgz?cache=0&sync_timestamp=1593521294715&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-hoist-variables%2Fdownload%2F%40babel%2Fhelper-hoist-variables-7.10.4.tgz", + "integrity": "sha1-1JsAHR1aaMpeZgTdoBpil/fJOB4=", + "dev": true, + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.11.0", + "resolved": "https://registry.npm.taobao.org/@babel/helper-member-expression-to-functions/download/@babel/helper-member-expression-to-functions-7.11.0.tgz?cache=0&sync_timestamp=1596144430473&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-member-expression-to-functions%2Fdownload%2F%40babel%2Fhelper-member-expression-to-functions-7.11.0.tgz", + "integrity": "sha1-rmnIPYTugvS0L5bioJQQk1qPJt8=", + "dev": true, + "requires": { + "@babel/types": "^7.11.0" + } + }, + "@babel/helper-module-imports": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-module-imports/download/@babel/helper-module-imports-7.10.4.tgz?cache=0&sync_timestamp=1593522965782&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-module-imports%2Fdownload%2F%40babel%2Fhelper-module-imports-7.10.4.tgz", + "integrity": "sha1-TFxUvgS9MWcKc4J5fXW5+i5bViA=", + "dev": true, + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-module-transforms": { + "version": "7.11.0", + "resolved": "https://registry.npm.taobao.org/@babel/helper-module-transforms/download/@babel/helper-module-transforms-7.11.0.tgz", + "integrity": "sha1-sW8lAinkchGr3YSzS2RzfCqy01k=", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4", + "@babel/helper-simple-access": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/template": "^7.10.4", + "@babel/types": "^7.11.0", + "lodash": "^4.17.19" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-optimise-call-expression/download/@babel/helper-optimise-call-expression-7.10.4.tgz?cache=0&sync_timestamp=1593521296446&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-optimise-call-expression%2Fdownload%2F%40babel%2Fhelper-optimise-call-expression-7.10.4.tgz", + "integrity": "sha1-UNyWQT1ZT5lad5BZBbBYk813lnM=", + "dev": true, + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-plugin-utils/download/@babel/helper-plugin-utils-7.10.4.tgz?cache=0&sync_timestamp=1593521082372&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-plugin-utils%2Fdownload%2F%40babel%2Fhelper-plugin-utils-7.10.4.tgz", + "integrity": "sha1-L3WoMSadT2d95JmG3/WZJ1M883U=", + "dev": true + }, + "@babel/helper-regex": { + "version": "7.10.5", + "resolved": "https://registry.npm.taobao.org/@babel/helper-regex/download/@babel/helper-regex-7.10.5.tgz?cache=0&sync_timestamp=1594750677873&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-regex%2Fdownload%2F%40babel%2Fhelper-regex-7.10.5.tgz", + "integrity": "sha1-Mt+7eYmQc8QVVXBToZvQVarlCuA=", + "dev": true, + "requires": { + "lodash": "^4.17.19" + } + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.11.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-remap-async-to-generator/download/@babel/helper-remap-async-to-generator-7.11.4.tgz?cache=0&sync_timestamp=1597948363357&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-remap-async-to-generator%2Fdownload%2F%40babel%2Fhelper-remap-async-to-generator-7.11.4.tgz", + "integrity": "sha1-RHTqn3Q48YV14wsMrHhARbQCoS0=", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-wrap-function": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-replace-supers": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-replace-supers/download/@babel/helper-replace-supers-7.10.4.tgz?cache=0&sync_timestamp=1593522959591&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-replace-supers%2Fdownload%2F%40babel%2Fhelper-replace-supers-7.10.4.tgz", + "integrity": "sha1-1YXNk4jqBuYDHkzUS2cTy+rZ5s8=", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.10.4", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-simple-access": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-simple-access/download/@babel/helper-simple-access-7.10.4.tgz?cache=0&sync_timestamp=1593522975802&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-simple-access%2Fdownload%2F%40babel%2Fhelper-simple-access-7.10.4.tgz", + "integrity": "sha1-D1zNopRSd6KnotOoIeFTle3PNGE=", + "dev": true, + "requires": { + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.11.0", + "resolved": "https://registry.npm.taobao.org/@babel/helper-skip-transparent-expression-wrappers/download/@babel/helper-skip-transparent-expression-wrappers-7.11.0.tgz", + "integrity": "sha1-7sFi8RLC9Y068K8SXju1dmUUZyk=", + "dev": true, + "requires": { + "@babel/types": "^7.11.0" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.11.0", + "resolved": "https://registry.npm.taobao.org/@babel/helper-split-export-declaration/download/@babel/helper-split-export-declaration-7.11.0.tgz", + "integrity": "sha1-+KSRJErPamdhWKxCBykRuoOtCZ8=", + "dev": true, + "requires": { + "@babel/types": "^7.11.0" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-validator-identifier/download/@babel/helper-validator-identifier-7.10.4.tgz?cache=0&sync_timestamp=1593521083613&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-validator-identifier%2Fdownload%2F%40babel%2Fhelper-validator-identifier-7.10.4.tgz", + "integrity": "sha1-p4x6clHgH2FlEtMbEK3PUq2l4NI=", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-wrap-function/download/@babel/helper-wrap-function-7.10.4.tgz?cache=0&sync_timestamp=1593522965325&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-wrap-function%2Fdownload%2F%40babel%2Fhelper-wrap-function-7.10.4.tgz", + "integrity": "sha1-im9wHqsP8592W1oc/vQJmQ5iS4c=", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helpers": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helpers/download/@babel/helpers-7.10.4.tgz?cache=0&sync_timestamp=1593522959913&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelpers%2Fdownload%2F%40babel%2Fhelpers-7.10.4.tgz", + "integrity": "sha1-Kr6w1yGv98Cpc3a54fb2XXpHUEQ=", + "dev": true, + "requires": { + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.10.4.tgz?cache=0&sync_timestamp=1593521095576&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhighlight%2Fdownload%2F%40babel%2Fhighlight-7.10.4.tgz", + "integrity": "sha1-fRvf1ldTU4+r5sOFls23bZrGAUM=", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.11.5", + "resolved": "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.11.5.tgz", + "integrity": "sha1-x/9jA99xCA7HpPW4wAPFjxz1EDc=", + "dev": true + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.10.5", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-async-generator-functions/download/@babel/plugin-proposal-async-generator-functions-7.10.5.tgz?cache=0&sync_timestamp=1594750682516&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-async-generator-functions%2Fdownload%2F%40babel%2Fplugin-proposal-async-generator-functions-7.10.5.tgz", + "integrity": "sha1-NJHKvy98F5q4IGBs7Cf+0V4OhVg=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-remap-async-to-generator": "^7.10.4", + "@babel/plugin-syntax-async-generators": "^7.8.0" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-class-properties/download/@babel/plugin-proposal-class-properties-7.10.4.tgz?cache=0&sync_timestamp=1593522963242&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-class-properties%2Fdownload%2F%40babel%2Fplugin-proposal-class-properties-7.10.4.tgz", + "integrity": "sha1-ozv2Mto5ClnHqMVwBF0RFc13iAc=", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-proposal-decorators": { + "version": "7.10.5", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-decorators/download/@babel/plugin-proposal-decorators-7.10.5.tgz?cache=0&sync_timestamp=1594750722573&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-decorators%2Fdownload%2F%40babel%2Fplugin-proposal-decorators-7.10.5.tgz", + "integrity": "sha1-QomLukeLxLGuJCpwOpU6etNQ/7Q=", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.10.5", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-decorators": "^7.10.4" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-dynamic-import/download/@babel/plugin-proposal-dynamic-import-7.10.4.tgz?cache=0&sync_timestamp=1593521093903&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-dynamic-import%2Fdownload%2F%40babel%2Fplugin-proposal-dynamic-import-7.10.4.tgz", + "integrity": "sha1-uleibLmLN3QenVvKG4sN34KR8X4=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-dynamic-import": "^7.8.0" + } + }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-export-namespace-from/download/@babel/plugin-proposal-export-namespace-from-7.10.4.tgz?cache=0&sync_timestamp=1593522820298&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-export-namespace-from%2Fdownload%2F%40babel%2Fplugin-proposal-export-namespace-from-7.10.4.tgz", + "integrity": "sha1-Vw2IO5EDFjez4pWO6jxDjmLAX1Q=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-json-strings/download/@babel/plugin-proposal-json-strings-7.10.4.tgz?cache=0&sync_timestamp=1593521092651&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-json-strings%2Fdownload%2F%40babel%2Fplugin-proposal-json-strings-7.10.4.tgz", + "integrity": "sha1-WT5ZxjUoFgIzvTIbGuvgggwjQds=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.0" + } + }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.11.0", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-logical-assignment-operators/download/@babel/plugin-proposal-logical-assignment-operators-7.11.0.tgz", + "integrity": "sha1-n4DkgsAwg8hxJd7hACa1hSfqIMg=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-nullish-coalescing-operator/download/@babel/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz?cache=0&sync_timestamp=1593521087263&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-nullish-coalescing-operator%2Fdownload%2F%40babel%2Fplugin-proposal-nullish-coalescing-operator-7.10.4.tgz", + "integrity": "sha1-AqfpYfwy5tWy2wZJ4Bv4Dd7n4Eo=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-numeric-separator/download/@babel/plugin-proposal-numeric-separator-7.10.4.tgz?cache=0&sync_timestamp=1593522970329&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-numeric-separator%2Fdownload%2F%40babel%2Fplugin-proposal-numeric-separator-7.10.4.tgz", + "integrity": "sha1-zhWQ/wplrRKXCmCdeIVemkwa7wY=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.11.0", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-object-rest-spread/download/@babel/plugin-proposal-object-rest-spread-7.11.0.tgz", + "integrity": "sha1-vYH5Wh90Z2DqQ7bC09YrEXkK0K8=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.10.4" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-optional-catch-binding/download/@babel/plugin-proposal-optional-catch-binding-7.10.4.tgz?cache=0&sync_timestamp=1593521089386&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-optional-catch-binding%2Fdownload%2F%40babel%2Fplugin-proposal-optional-catch-binding-7.10.4.tgz", + "integrity": "sha1-Mck4MJ0kp4pJ1o/av/qoY3WFVN0=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.11.0", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-optional-chaining/download/@babel/plugin-proposal-optional-chaining-7.11.0.tgz", + "integrity": "sha1-3lhm0GRvav2quKVmOC/joiF1UHY=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-skip-transparent-expression-wrappers": "^7.11.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.0" + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-private-methods/download/@babel/plugin-proposal-private-methods-7.10.4.tgz?cache=0&sync_timestamp=1593522970831&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-private-methods%2Fdownload%2F%40babel%2Fplugin-proposal-private-methods-7.10.4.tgz", + "integrity": "sha1-sWDZcrj9ulx9ERoUX8jEIfwqaQk=", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-unicode-property-regex/download/@babel/plugin-proposal-unicode-property-regex-7.10.4.tgz?cache=0&sync_timestamp=1593522975170&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-unicode-property-regex%2Fdownload%2F%40babel%2Fplugin-proposal-unicode-property-regex-7.10.4.tgz", + "integrity": "sha1-RIPNpTBBzjQTt/4vAAImZd36p10=", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-async-generators/download/@babel/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha1-qYP7Gusuw/btBCohD2QOkOeG/g0=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-class-properties/download/@babel/plugin-syntax-class-properties-7.10.4.tgz?cache=0&sync_timestamp=1593521086484&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-syntax-class-properties%2Fdownload%2F%40babel%2Fplugin-syntax-class-properties-7.10.4.tgz", + "integrity": "sha1-ZkTmoLqlWmH54yMfbJ7rbuRsEkw=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-decorators": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-decorators/download/@babel/plugin-syntax-decorators-7.10.4.tgz?cache=0&sync_timestamp=1593521097781&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-syntax-decorators%2Fdownload%2F%40babel%2Fplugin-syntax-decorators-7.10.4.tgz", + "integrity": "sha1-aFMIWyxCn50yLQL1pjUBjN6yNgw=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-dynamic-import/download/@babel/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha1-Yr+Ysto80h1iYVT8lu5bPLaOrLM=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-export-namespace-from/download/@babel/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha1-AolkqbqA28CUyRXEh618TnpmRlo=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-json-strings/download/@babel/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha1-AcohtmjNghjJ5kDLbdiMVBKyyWo=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-jsx/download/@babel/plugin-syntax-jsx-7.10.4.tgz", + "integrity": "sha1-Oauq48v3EMQ3PYQpSE5rohNAFmw=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-logical-assignment-operators/download/@babel/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha1-ypHvRjA1MESLkGZSusLp/plB9pk=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-nullish-coalescing-operator/download/@babel/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha1-Fn7XA2iIYIH3S1w2xlqIwDtm0ak=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-numeric-separator/download/@babel/plugin-syntax-numeric-separator-7.10.4.tgz?cache=0&sync_timestamp=1593521788128&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-syntax-numeric-separator%2Fdownload%2F%40babel%2Fplugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha1-ubBws+M1cM2f0Hun+pHA3Te5r5c=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-object-rest-spread/download/@babel/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha1-YOIl7cvZimQDMqLnLdPmbxr1WHE=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-optional-catch-binding/download/@babel/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha1-YRGiZbz7Ag6579D9/X0mQCue1sE=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-optional-chaining/download/@babel/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha1-T2nCq5UWfgGAzVM2YT+MV4j31Io=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-top-level-await/download/@babel/plugin-syntax-top-level-await-7.10.4.tgz", + "integrity": "sha1-S764kXtU/PdoNk4KgfVg4zo+9X0=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-arrow-functions/download/@babel/plugin-transform-arrow-functions-7.10.4.tgz?cache=0&sync_timestamp=1593521290488&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-arrow-functions%2Fdownload%2F%40babel%2Fplugin-transform-arrow-functions-7.10.4.tgz", + "integrity": "sha1-4ilg135pfHT0HFAdRNc9v4pqZM0=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-async-to-generator/download/@babel/plugin-transform-async-to-generator-7.10.4.tgz?cache=0&sync_timestamp=1593522968362&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-async-to-generator%2Fdownload%2F%40babel%2Fplugin-transform-async-to-generator-7.10.4.tgz", + "integrity": "sha1-QaUBfknrbzzak5KlHu8pQFskWjc=", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-remap-async-to-generator": "^7.10.4" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-block-scoped-functions/download/@babel/plugin-transform-block-scoped-functions-7.10.4.tgz?cache=0&sync_timestamp=1593522071341&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-block-scoped-functions%2Fdownload%2F%40babel%2Fplugin-transform-block-scoped-functions-7.10.4.tgz", + "integrity": "sha1-GvpZV0T3XkOpGvc7DZmOz+Trwug=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.11.1", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-block-scoping/download/@babel/plugin-transform-block-scoping-7.11.1.tgz", + "integrity": "sha1-W37+mIUr741lLAsoFEzZOp5LUhU=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-classes/download/@babel/plugin-transform-classes-7.10.4.tgz?cache=0&sync_timestamp=1593522971188&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-classes%2Fdownload%2F%40babel%2Fplugin-transform-classes-7.10.4.tgz", + "integrity": "sha1-QFE2rys+IYvEoZJiKLyRerGgrcc=", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-define-map": "^7.10.4", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-computed-properties/download/@babel/plugin-transform-computed-properties-7.10.4.tgz?cache=0&sync_timestamp=1593521290771&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-computed-properties%2Fdownload%2F%40babel%2Fplugin-transform-computed-properties-7.10.4.tgz", + "integrity": "sha1-ne2DqBboLe0o1S1LTsvdgQzfwOs=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-destructuring/download/@babel/plugin-transform-destructuring-7.10.4.tgz?cache=0&sync_timestamp=1593521291443&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-destructuring%2Fdownload%2F%40babel%2Fplugin-transform-destructuring-7.10.4.tgz", + "integrity": "sha1-cN3Ss9G+qD0BUJ6bsl3bOnT8heU=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-dotall-regex/download/@babel/plugin-transform-dotall-regex-7.10.4.tgz?cache=0&sync_timestamp=1593522977820&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-dotall-regex%2Fdownload%2F%40babel%2Fplugin-transform-dotall-regex-7.10.4.tgz", + "integrity": "sha1-RpwgYhBcHragQOr0+sS0iAeDle4=", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-duplicate-keys/download/@babel/plugin-transform-duplicate-keys-7.10.4.tgz?cache=0&sync_timestamp=1593521290312&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-duplicate-keys%2Fdownload%2F%40babel%2Fplugin-transform-duplicate-keys-7.10.4.tgz", + "integrity": "sha1-aX5Qyf7hQ4D+hD0fMGspVhdDHkc=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-exponentiation-operator/download/@babel/plugin-transform-exponentiation-operator-7.10.4.tgz?cache=0&sync_timestamp=1593522967206&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-exponentiation-operator%2Fdownload%2F%40babel%2Fplugin-transform-exponentiation-operator-7.10.4.tgz", + "integrity": "sha1-WuM4xX+M9AAb2zVgeuZrktZlry4=", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-for-of/download/@babel/plugin-transform-for-of-7.10.4.tgz?cache=0&sync_timestamp=1593521291715&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-for-of%2Fdownload%2F%40babel%2Fplugin-transform-for-of-7.10.4.tgz", + "integrity": "sha1-wIiS6IGdOl2ykDGxFa9RHbv+uuk=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-function-name/download/@babel/plugin-transform-function-name-7.10.4.tgz?cache=0&sync_timestamp=1593522961117&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-function-name%2Fdownload%2F%40babel%2Fplugin-transform-function-name-7.10.4.tgz", + "integrity": "sha1-akZ4gOD8ljhRS6NpERgR3b4mRLc=", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-literals/download/@babel/plugin-transform-literals-7.10.4.tgz?cache=0&sync_timestamp=1593521291903&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-literals%2Fdownload%2F%40babel%2Fplugin-transform-literals-7.10.4.tgz", + "integrity": "sha1-n0K6CEEQChNfInEtDjkcRi9XHzw=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-member-expression-literals/download/@babel/plugin-transform-member-expression-literals-7.10.4.tgz?cache=0&sync_timestamp=1593521293070&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-member-expression-literals%2Fdownload%2F%40babel%2Fplugin-transform-member-expression-literals-7.10.4.tgz", + "integrity": "sha1-sexE/PGVr8uNssYs2OVRyIG6+Lc=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.10.5", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-modules-amd/download/@babel/plugin-transform-modules-amd-7.10.5.tgz?cache=0&sync_timestamp=1594750712546&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-modules-amd%2Fdownload%2F%40babel%2Fplugin-transform-modules-amd-7.10.5.tgz", + "integrity": "sha1-G5zdrwXZ6Is6rTOcs+RFxPAgqbE=", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.10.5", + "@babel/helper-plugin-utils": "^7.10.4", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-modules-commonjs/download/@babel/plugin-transform-modules-commonjs-7.10.4.tgz?cache=0&sync_timestamp=1593522963909&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-modules-commonjs%2Fdownload%2F%40babel%2Fplugin-transform-modules-commonjs-7.10.4.tgz", + "integrity": "sha1-ZmZ8Pu2h6/eJbUHx8WsXEFovvKA=", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-simple-access": "^7.10.4", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.10.5", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-modules-systemjs/download/@babel/plugin-transform-modules-systemjs-7.10.5.tgz?cache=0&sync_timestamp=1594750707592&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-modules-systemjs%2Fdownload%2F%40babel%2Fplugin-transform-modules-systemjs-7.10.5.tgz", + "integrity": "sha1-YnAJnIVAZmgbrp4F+H4bnK2+jIU=", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.10.4", + "@babel/helper-module-transforms": "^7.10.5", + "@babel/helper-plugin-utils": "^7.10.4", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-modules-umd/download/@babel/plugin-transform-modules-umd-7.10.4.tgz?cache=0&sync_timestamp=1593522964232&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-modules-umd%2Fdownload%2F%40babel%2Fplugin-transform-modules-umd-7.10.4.tgz", + "integrity": "sha1-moSB/oG4JGVLOgtl2j34nz0hg54=", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-named-capturing-groups-regex/download/@babel/plugin-transform-named-capturing-groups-regex-7.10.4.tgz?cache=0&sync_timestamp=1593522978582&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-named-capturing-groups-regex%2Fdownload%2F%40babel%2Fplugin-transform-named-capturing-groups-regex-7.10.4.tgz", + "integrity": "sha1-eLTZeIELbzvPA/njGPL8DtQa7LY=", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.10.4" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-new-target/download/@babel/plugin-transform-new-target-7.10.4.tgz?cache=0&sync_timestamp=1593521292141&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-new-target%2Fdownload%2F%40babel%2Fplugin-transform-new-target-7.10.4.tgz", + "integrity": "sha1-kJfXU8t7Aky3OBo7LlLpUTqcaIg=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-object-super/download/@babel/plugin-transform-object-super-7.10.4.tgz?cache=0&sync_timestamp=1593522965761&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-object-super%2Fdownload%2F%40babel%2Fplugin-transform-object-super-7.10.4.tgz", + "integrity": "sha1-1xRsTROUM+emUm+IjGZ+MUoJOJQ=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.10.5", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-parameters/download/@babel/plugin-transform-parameters-7.10.5.tgz?cache=0&sync_timestamp=1594750687789&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-parameters%2Fdownload%2F%40babel%2Fplugin-transform-parameters-7.10.5.tgz", + "integrity": "sha1-WdM51Y0LGVBDX0BD504lEABeLEo=", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-property-literals/download/@babel/plugin-transform-property-literals-7.10.4.tgz?cache=0&sync_timestamp=1593521293406&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-property-literals%2Fdownload%2F%40babel%2Fplugin-transform-property-literals-7.10.4.tgz", + "integrity": "sha1-9v5UtlkDUimHhbg+3YFdIUxC48A=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-regenerator/download/@babel/plugin-transform-regenerator-7.10.4.tgz?cache=0&sync_timestamp=1593521089707&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-regenerator%2Fdownload%2F%40babel%2Fplugin-transform-regenerator-7.10.4.tgz", + "integrity": "sha1-IBXlnYOQdOdoON4hWdtCGWb9i2M=", + "dev": true, + "requires": { + "regenerator-transform": "^0.14.2" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-reserved-words/download/@babel/plugin-transform-reserved-words-7.10.4.tgz?cache=0&sync_timestamp=1593522978219&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-reserved-words%2Fdownload%2F%40babel%2Fplugin-transform-reserved-words-7.10.4.tgz", + "integrity": "sha1-jyaCvNzvntMn4bCGFYXXAT+KVN0=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.11.5", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-runtime/download/@babel/plugin-transform-runtime-7.11.5.tgz", + "integrity": "sha1-8Qi8jgzzPDfaAxwJfR30cLOik/w=", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "resolve": "^1.8.1", + "semver": "^5.5.1" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-shorthand-properties/download/@babel/plugin-transform-shorthand-properties-7.10.4.tgz?cache=0&sync_timestamp=1593521293679&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-shorthand-properties%2Fdownload%2F%40babel%2Fplugin-transform-shorthand-properties-7.10.4.tgz", + "integrity": "sha1-n9Jexc3VVbt/Rz5ebuHJce7eTdY=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.11.0", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-spread/download/@babel/plugin-transform-spread-7.11.0.tgz", + "integrity": "sha1-+oTTAPXk9XdS/kGm0bPFVPE/F8w=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-skip-transparent-expression-wrappers": "^7.11.0" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-sticky-regex/download/@babel/plugin-transform-sticky-regex-7.10.4.tgz?cache=0&sync_timestamp=1593521295131&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-sticky-regex%2Fdownload%2F%40babel%2Fplugin-transform-sticky-regex-7.10.4.tgz", + "integrity": "sha1-jziJ7oZXWBEwop2cyR18c7fEoo0=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-regex": "^7.10.4" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.10.5", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-template-literals/download/@babel/plugin-transform-template-literals-7.10.5.tgz?cache=0&sync_timestamp=1594750692589&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-template-literals%2Fdownload%2F%40babel%2Fplugin-transform-template-literals-7.10.5.tgz", + "integrity": "sha1-eLxdYmpmQtszEtnQ8AH152Of3ow=", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-typeof-symbol/download/@babel/plugin-transform-typeof-symbol-7.10.4.tgz?cache=0&sync_timestamp=1593522969066&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-typeof-symbol%2Fdownload%2F%40babel%2Fplugin-transform-typeof-symbol-7.10.4.tgz", + "integrity": "sha1-lQnxp+7DHE7b/+E3wWzDP/C8W/w=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-unicode-escapes/download/@babel/plugin-transform-unicode-escapes-7.10.4.tgz?cache=0&sync_timestamp=1593522967875&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-unicode-escapes%2Fdownload%2F%40babel%2Fplugin-transform-unicode-escapes-7.10.4.tgz", + "integrity": "sha1-/q5SM5HHZR3awRXa4KnQaFeJIAc=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-unicode-regex/download/@babel/plugin-transform-unicode-regex-7.10.4.tgz?cache=0&sync_timestamp=1593522975515&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-unicode-regex%2Fdownload%2F%40babel%2Fplugin-transform-unicode-regex-7.10.4.tgz", + "integrity": "sha1-5W1x+SgvrG2wnIJ0IFVXbV5tgKg=", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/preset-env": { + "version": "7.11.5", + "resolved": "https://registry.npm.taobao.org/@babel/preset-env/download/@babel/preset-env-7.11.5.tgz", + "integrity": "sha1-GMtLk3nj6S/+qSwHRxqZopFOQnI=", + "dev": true, + "requires": { + "@babel/compat-data": "^7.11.0", + "@babel/helper-compilation-targets": "^7.10.4", + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-proposal-async-generator-functions": "^7.10.4", + "@babel/plugin-proposal-class-properties": "^7.10.4", + "@babel/plugin-proposal-dynamic-import": "^7.10.4", + "@babel/plugin-proposal-export-namespace-from": "^7.10.4", + "@babel/plugin-proposal-json-strings": "^7.10.4", + "@babel/plugin-proposal-logical-assignment-operators": "^7.11.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.4", + "@babel/plugin-proposal-numeric-separator": "^7.10.4", + "@babel/plugin-proposal-object-rest-spread": "^7.11.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.10.4", + "@babel/plugin-proposal-optional-chaining": "^7.11.0", + "@babel/plugin-proposal-private-methods": "^7.10.4", + "@babel/plugin-proposal-unicode-property-regex": "^7.10.4", + "@babel/plugin-syntax-async-generators": "^7.8.0", + "@babel/plugin-syntax-class-properties": "^7.10.4", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.0", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.0", + "@babel/plugin-syntax-top-level-await": "^7.10.4", + "@babel/plugin-transform-arrow-functions": "^7.10.4", + "@babel/plugin-transform-async-to-generator": "^7.10.4", + "@babel/plugin-transform-block-scoped-functions": "^7.10.4", + "@babel/plugin-transform-block-scoping": "^7.10.4", + "@babel/plugin-transform-classes": "^7.10.4", + "@babel/plugin-transform-computed-properties": "^7.10.4", + "@babel/plugin-transform-destructuring": "^7.10.4", + "@babel/plugin-transform-dotall-regex": "^7.10.4", + "@babel/plugin-transform-duplicate-keys": "^7.10.4", + "@babel/plugin-transform-exponentiation-operator": "^7.10.4", + "@babel/plugin-transform-for-of": "^7.10.4", + "@babel/plugin-transform-function-name": "^7.10.4", + "@babel/plugin-transform-literals": "^7.10.4", + "@babel/plugin-transform-member-expression-literals": "^7.10.4", + "@babel/plugin-transform-modules-amd": "^7.10.4", + "@babel/plugin-transform-modules-commonjs": "^7.10.4", + "@babel/plugin-transform-modules-systemjs": "^7.10.4", + "@babel/plugin-transform-modules-umd": "^7.10.4", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.10.4", + "@babel/plugin-transform-new-target": "^7.10.4", + "@babel/plugin-transform-object-super": "^7.10.4", + "@babel/plugin-transform-parameters": "^7.10.4", + "@babel/plugin-transform-property-literals": "^7.10.4", + "@babel/plugin-transform-regenerator": "^7.10.4", + "@babel/plugin-transform-reserved-words": "^7.10.4", + "@babel/plugin-transform-shorthand-properties": "^7.10.4", + "@babel/plugin-transform-spread": "^7.11.0", + "@babel/plugin-transform-sticky-regex": "^7.10.4", + "@babel/plugin-transform-template-literals": "^7.10.4", + "@babel/plugin-transform-typeof-symbol": "^7.10.4", + "@babel/plugin-transform-unicode-escapes": "^7.10.4", + "@babel/plugin-transform-unicode-regex": "^7.10.4", + "@babel/preset-modules": "^0.1.3", + "@babel/types": "^7.11.5", + "browserslist": "^4.12.0", + "core-js-compat": "^3.6.2", + "invariant": "^2.2.2", + "levenary": "^1.1.1", + "semver": "^5.5.0" + } + }, + "@babel/preset-modules": { + "version": "0.1.4", + "resolved": "https://registry.npm.taobao.org/@babel/preset-modules/download/@babel/preset-modules-0.1.4.tgz?cache=0&sync_timestamp=1598549925898&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fpreset-modules%2Fdownload%2F%40babel%2Fpreset-modules-0.1.4.tgz", + "integrity": "sha1-Ni8raMZihClw/bXiVP/I/BwuQV4=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/runtime": { + "version": "7.11.2", + "resolved": "https://registry.npm.taobao.org/@babel/runtime/download/@babel/runtime-7.11.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fruntime%2Fdownload%2F%40babel%2Fruntime-7.11.2.tgz", + "integrity": "sha1-9UnBPHVMxAuHZEufqfCaapX+BzY=", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/runtime-corejs2": { + "version": "7.11.2", + "resolved": "https://registry.npm.taobao.org/@babel/runtime-corejs2/download/@babel/runtime-corejs2-7.11.2.tgz?cache=0&sync_timestamp=1596637846605&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fruntime-corejs2%2Fdownload%2F%40babel%2Fruntime-corejs2-7.11.2.tgz", + "integrity": "sha1-cAoDlF660NMbpmkPyKa8yQQPqkc=", + "dev": true, + "requires": { + "core-js": "^2.6.5", + "regenerator-runtime": "^0.13.4" + }, + "dependencies": { + "core-js": { + "version": "2.6.11", + "resolved": "https://registry.npm.taobao.org/core-js/download/core-js-2.6.11.tgz?cache=0&sync_timestamp=1586450269267&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcore-js%2Fdownload%2Fcore-js-2.6.11.tgz", + "integrity": "sha1-OIMUafmSK97Y7iHJ3EaYXgOZMIw=", + "dev": true + } + } + }, + "@babel/template": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/template/download/@babel/template-7.10.4.tgz", + "integrity": "sha1-MlGZbEIA68cdGo/EBfupQPNrong=", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/traverse": { + "version": "7.11.5", + "resolved": "https://registry.npm.taobao.org/@babel/traverse/download/@babel/traverse-7.11.5.tgz", + "integrity": "sha1-vnd7k7UY62127i4eodFD2qEeYcM=", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.11.5", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/parser": "^7.11.5", + "@babel/types": "^7.11.5", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" + } + }, + "@babel/types": { + "version": "7.11.5", + "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.11.5.tgz?cache=0&sync_timestamp=1598904531412&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftypes%2Fdownload%2F%40babel%2Ftypes-7.11.5.tgz", + "integrity": "sha1-2d5XfQElLXfGgAzuA57mT691Zi0=", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "@hapi/address": { + "version": "2.1.4", + "resolved": "https://registry.npm.taobao.org/@hapi/address/download/@hapi/address-2.1.4.tgz?cache=0&sync_timestamp=1593993895205&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40hapi%2Faddress%2Fdownload%2F%40hapi%2Faddress-2.1.4.tgz", + "integrity": "sha1-XWftQ/P9QaadS5/3tW58DR0KgeU=", + "dev": true + }, + "@hapi/bourne": { + "version": "1.3.2", + "resolved": "https://registry.npm.taobao.org/@hapi/bourne/download/@hapi/bourne-1.3.2.tgz?cache=0&sync_timestamp=1593915150444&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40hapi%2Fbourne%2Fdownload%2F%40hapi%2Fbourne-1.3.2.tgz", + "integrity": "sha1-CnCVreoGckPOMoPhtWuKj0U7JCo=", + "dev": true + }, + "@hapi/hoek": { + "version": "8.5.1", + "resolved": "https://registry.npm.taobao.org/@hapi/hoek/download/@hapi/hoek-8.5.1.tgz?cache=0&sync_timestamp=1599008894201&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40hapi%2Fhoek%2Fdownload%2F%40hapi%2Fhoek-8.5.1.tgz", + "integrity": "sha1-/elgZMpEbeyMVajC8TCVewcMbgY=", + "dev": true + }, + "@hapi/joi": { + "version": "15.1.1", + "resolved": "https://registry.npm.taobao.org/@hapi/joi/download/@hapi/joi-15.1.1.tgz", + "integrity": "sha1-xnW4pxKW8Cgz+NbSQ7NMV7jOGdc=", + "dev": true, + "requires": { + "@hapi/address": "2.x.x", + "@hapi/bourne": "1.x.x", + "@hapi/hoek": "8.x.x", + "@hapi/topo": "3.x.x" + } + }, + "@hapi/topo": { + "version": "3.1.6", + "resolved": "https://registry.npm.taobao.org/@hapi/topo/download/@hapi/topo-3.1.6.tgz?cache=0&sync_timestamp=1593916080558&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40hapi%2Ftopo%2Fdownload%2F%40hapi%2Ftopo-3.1.6.tgz", + "integrity": "sha1-aNk1+j6uf91asNf5U/MgXYsr/Ck=", + "dev": true, + "requires": { + "@hapi/hoek": "^8.3.0" + } + }, + "@interactjs/types": { + "version": "1.10.11", + "resolved": "https://registry.npmjs.org/@interactjs/types/-/types-1.10.11.tgz", + "integrity": "sha512-YRsVFWjL8Gkkvlx3qnjeaxW4fnibSJ9791g8BA7Pv5ANByI64WmtR1vU7A2rXcrOn8XvyCEfY0ss1s8NhZP+MA==" + }, + "@intervolga/optimize-cssnano-plugin": { + "version": "1.0.6", + "resolved": "https://registry.npm.taobao.org/@intervolga/optimize-cssnano-plugin/download/@intervolga/optimize-cssnano-plugin-1.0.6.tgz", + "integrity": "sha1-vnx4RhKLiPapsdEmGgrQbrXA/fg=", + "dev": true, + "requires": { + "cssnano": "^4.0.0", + "cssnano-preset-default": "^4.0.0", + "postcss": "^7.0.0" + } + }, + "@mrmlnc/readdir-enhanced": { + "version": "2.2.1", + "resolved": "https://registry.npm.taobao.org/@mrmlnc/readdir-enhanced/download/@mrmlnc/readdir-enhanced-2.2.1.tgz", + "integrity": "sha1-UkryQNGjYFJ7cwR17PoTRKpUDd4=", + "dev": true, + "requires": { + "call-me-maybe": "^1.0.1", + "glob-to-regexp": "^0.3.0" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.3", + "resolved": "https://registry.npm.taobao.org/@nodelib/fs.scandir/download/@nodelib/fs.scandir-2.1.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40nodelib%2Ffs.scandir%2Fdownload%2F%40nodelib%2Ffs.scandir-2.1.3.tgz", + "integrity": "sha1-Olgr21OATGum0UZXnEblITDPSjs=", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.3", + "run-parallel": "^1.1.9" + }, + "dependencies": { + "@nodelib/fs.stat": { + "version": "2.0.3", + "resolved": "https://registry.npm.taobao.org/@nodelib/fs.stat/download/@nodelib/fs.stat-2.0.3.tgz", + "integrity": "sha1-NNxfTKu8cg9OYPdadH5+zWwXW9M=", + "dev": true + } + } + }, + "@nodelib/fs.stat": { + "version": "1.1.3", + "resolved": "https://registry.npm.taobao.org/@nodelib/fs.stat/download/@nodelib/fs.stat-1.1.3.tgz", + "integrity": "sha1-K1o6s/kYzKSKjHVMCBaOPwPrphs=", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.4", + "resolved": "https://registry.npm.taobao.org/@nodelib/fs.walk/download/@nodelib/fs.walk-1.2.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40nodelib%2Ffs.walk%2Fdownload%2F%40nodelib%2Ffs.walk-1.2.4.tgz", + "integrity": "sha1-ARuSAqcKY2bkNspcBlhEUoqwSXY=", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.3", + "fastq": "^1.6.0" + } + }, + "@soda/friendly-errors-webpack-plugin": { + "version": "1.7.1", + "resolved": "https://registry.npm.taobao.org/@soda/friendly-errors-webpack-plugin/download/@soda/friendly-errors-webpack-plugin-1.7.1.tgz", + "integrity": "sha1-cG9kvLSouWQrSK46zkRMcDNNYV0=", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "error-stack-parser": "^2.0.0", + "string-width": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz?cache=0&sync_timestamp=1570188663907&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz?cache=0&sync_timestamp=1591687070184&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchalk%2Fdownload%2Fchalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-2.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring-width%2Fdownload%2Fstring-width-2.1.1.tgz", + "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz?cache=0&sync_timestamp=1570188663907&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1598611709087&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "@soda/get-current-script": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/@soda/get-current-script/download/@soda/get-current-script-1.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40soda%2Fget-current-script%2Fdownload%2F%40soda%2Fget-current-script-1.0.2.tgz", + "integrity": "sha1-pTUV2yXYA4N0OBtzryC7Ty5QjYc=", + "dev": true + }, + "@tweenjs/tween.js": { + "version": "18.6.4", + "resolved": "https://registry.npmjs.org/@tweenjs/tween.js/-/tween.js-18.6.4.tgz", + "integrity": "sha512-lB9lMjuqjtuJrx7/kOkqQBtllspPIN+96OvTCeJ2j5FEzinoAXTdAMFnDAQT1KVPRlnYfBrqxtqP66vDM40xxQ==" + }, + "@types/anymatch": { + "version": "1.3.1", + "resolved": "https://registry.npm.taobao.org/@types/anymatch/download/@types/anymatch-1.3.1.tgz", + "integrity": "sha1-M2utwb7sudrMOL6izzKt9ieoQho=", + "dev": true + }, + "@types/body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npm.taobao.org/@types/body-parser/download/@types/body-parser-1.19.0.tgz", + "integrity": "sha1-BoWzxH6zAG/+0RfN1VFkth+AU48=", + "dev": true, + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/@types/color-name/download/@types/color-name-1.1.1.tgz", + "integrity": "sha1-HBJhu+qhCoBVu8XYq4S3sq/IRqA=", + "dev": true + }, + "@types/connect": { + "version": "3.4.33", + "resolved": "https://registry.npm.taobao.org/@types/connect/download/@types/connect-3.4.33.tgz?cache=0&sync_timestamp=1596837850490&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fconnect%2Fdownload%2F%40types%2Fconnect-3.4.33.tgz", + "integrity": "sha1-MWEMkB7KVzuHE8MzCrxua59YhUY=", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/connect-history-api-fallback": { + "version": "1.3.3", + "resolved": "https://registry.npm.taobao.org/@types/connect-history-api-fallback/download/@types/connect-history-api-fallback-1.3.3.tgz", + "integrity": "sha1-R3K3m4tTGF8PTJ3qsJI2uvdu47Q=", + "dev": true, + "requires": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "@types/express": { + "version": "4.17.8", + "resolved": "https://registry.npm.taobao.org/@types/express/download/@types/express-4.17.8.tgz?cache=0&sync_timestamp=1598966318122&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fexpress%2Fdownload%2F%40types%2Fexpress-4.17.8.tgz", + "integrity": "sha1-PfQpMpMxfmHGATfSc6LpbNjV8no=", + "dev": true, + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "*", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.17.12", + "resolved": "https://registry.npm.taobao.org/@types/express-serve-static-core/download/@types/express-serve-static-core-4.17.12.tgz?cache=0&sync_timestamp=1598975574373&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fexpress-serve-static-core%2Fdownload%2F%40types%2Fexpress-serve-static-core-4.17.12.tgz", + "integrity": "sha1-mkh9p1dCXk8mfn0cVyAiavf4lZE=", + "dev": true, + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "@types/glob": { + "version": "7.1.3", + "resolved": "https://registry.npm.taobao.org/@types/glob/download/@types/glob-7.1.3.tgz?cache=0&sync_timestamp=1596838206290&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fglob%2Fdownload%2F%40types%2Fglob-7.1.3.tgz", + "integrity": "sha1-5rqA82t9qtLGhazZJmOC5omFwYM=", + "dev": true, + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/http-proxy": { + "version": "1.17.4", + "resolved": "https://registry.npm.taobao.org/@types/http-proxy/download/@types/http-proxy-1.17.4.tgz?cache=0&sync_timestamp=1596839386031&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fhttp-proxy%2Fdownload%2F%40types%2Fhttp-proxy-1.17.4.tgz", + "integrity": "sha1-58kuPb4+E6p5lED/QubToXqdBFs=", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/http-proxy-middleware": { + "version": "0.19.3", + "resolved": "https://registry.npm.taobao.org/@types/http-proxy-middleware/download/@types/http-proxy-middleware-0.19.3.tgz?cache=0&sync_timestamp=1596839386511&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fhttp-proxy-middleware%2Fdownload%2F%40types%2Fhttp-proxy-middleware-0.19.3.tgz", + "integrity": "sha1-suuW+8D5rHJQtdnExTqt4ElJfQM=", + "dev": true, + "requires": { + "@types/connect": "*", + "@types/http-proxy": "*", + "@types/node": "*" + } + }, + "@types/json-schema": { + "version": "7.0.6", + "resolved": "https://registry.npm.taobao.org/@types/json-schema/download/@types/json-schema-7.0.6.tgz?cache=0&sync_timestamp=1598910403749&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fjson-schema%2Fdownload%2F%40types%2Fjson-schema-7.0.6.tgz", + "integrity": "sha1-9MfsQ+gbMZqYFRFQMXCfJph4kfA=", + "dev": true + }, + "@types/mime": { + "version": "2.0.3", + "resolved": "https://registry.npm.taobao.org/@types/mime/download/@types/mime-2.0.3.tgz", + "integrity": "sha1-yJO3NyHbc2mZQ7/DZTsd63+qSjo=", + "dev": true + }, + "@types/minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npm.taobao.org/@types/minimatch/download/@types/minimatch-3.0.3.tgz?cache=0&sync_timestamp=1596839141589&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fminimatch%2Fdownload%2F%40types%2Fminimatch-3.0.3.tgz", + "integrity": "sha1-PcoOPzOyAPx9ETnAzZbBJoyt/Z0=", + "dev": true + }, + "@types/minimist": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/@types/minimist/download/@types/minimist-1.2.0.tgz", + "integrity": "sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY=", + "dev": true + }, + "@types/node": { + "version": "14.6.4", + "resolved": "https://registry.npm.taobao.org/@types/node/download/@types/node-14.6.4.tgz?cache=0&sync_timestamp=1599568905640&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-14.6.4.tgz", + "integrity": "sha1-oUXMC7FO+cR3c2G3u6+lz446y1o=", + "dev": true + }, + "@types/normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npm.taobao.org/@types/normalize-package-data/download/@types/normalize-package-data-2.4.0.tgz?cache=0&sync_timestamp=1596839391651&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnormalize-package-data%2Fdownload%2F%40types%2Fnormalize-package-data-2.4.0.tgz", + "integrity": "sha1-5IbQ2XOW15vu3QpuM/RTT/a0lz4=", + "dev": true + }, + "@types/q": { + "version": "1.5.4", + "resolved": "https://registry.npm.taobao.org/@types/q/download/@types/q-1.5.4.tgz", + "integrity": "sha1-FZJUFOCtLNdlv+9YhC9+JqesyyQ=", + "dev": true + }, + "@types/qs": { + "version": "6.9.4", + "resolved": "https://registry.npm.taobao.org/@types/qs/download/@types/qs-6.9.4.tgz", + "integrity": "sha1-pZ6FHBuhbAUT6hI4MN1jmgoVy2o=", + "dev": true + }, + "@types/range-parser": { + "version": "1.2.3", + "resolved": "https://registry.npm.taobao.org/@types/range-parser/download/@types/range-parser-1.2.3.tgz", + "integrity": "sha1-fuMwunyq+5gJC+zoal7kQRWQTCw=", + "dev": true + }, + "@types/serve-static": { + "version": "1.13.5", + "resolved": "https://registry.npm.taobao.org/@types/serve-static/download/@types/serve-static-1.13.5.tgz?cache=0&sync_timestamp=1596840339942&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fserve-static%2Fdownload%2F%40types%2Fserve-static-1.13.5.tgz", + "integrity": "sha1-PSXZQaGEFdOrCS3vhG4TWgi7z1M=", + "dev": true, + "requires": { + "@types/express-serve-static-core": "*", + "@types/mime": "*" + } + }, + "@types/source-list-map": { + "version": "0.1.2", + "resolved": "https://registry.npm.taobao.org/@types/source-list-map/download/@types/source-list-map-0.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fsource-list-map%2Fdownload%2F%40types%2Fsource-list-map-0.1.2.tgz", + "integrity": "sha1-AHiDYGP/rxdBI0m7o2QIfgrALsk=", + "dev": true + }, + "@types/tapable": { + "version": "1.0.6", + "resolved": "https://registry.npm.taobao.org/@types/tapable/download/@types/tapable-1.0.6.tgz", + "integrity": "sha1-qcpLcKGLJwzLK8Cqr+/R1Ia36nQ=", + "dev": true + }, + "@types/uglify-js": { + "version": "3.9.3", + "resolved": "https://registry.npm.taobao.org/@types/uglify-js/download/@types/uglify-js-3.9.3.tgz?cache=0&sync_timestamp=1596841575547&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fuglify-js%2Fdownload%2F%40types%2Fuglify-js-3.9.3.tgz", + "integrity": "sha1-2U7WCOKVvFQkyWAOa4VlQHtrS2s=", + "dev": true, + "requires": { + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + } + } + }, + "@types/webpack": { + "version": "4.41.22", + "resolved": "https://registry.npm.taobao.org/@types/webpack/download/@types/webpack-4.41.22.tgz", + "integrity": "sha1-/5dYoXxr1JnkWbkeeFOYSMMtBzE=", + "dev": true, + "requires": { + "@types/anymatch": "*", + "@types/node": "*", + "@types/tapable": "*", + "@types/uglify-js": "*", + "@types/webpack-sources": "*", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + } + } + }, + "@types/webpack-dev-server": { + "version": "3.11.0", + "resolved": "https://registry.npm.taobao.org/@types/webpack-dev-server/download/@types/webpack-dev-server-3.11.0.tgz?cache=0&sync_timestamp=1596841577349&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fwebpack-dev-server%2Fdownload%2F%40types%2Fwebpack-dev-server-3.11.0.tgz", + "integrity": "sha1-vMO4Xn3GrC2yUzBhBRPyIowvz7I=", + "dev": true, + "requires": { + "@types/connect-history-api-fallback": "*", + "@types/express": "*", + "@types/http-proxy-middleware": "*", + "@types/serve-static": "*", + "@types/webpack": "*" + } + }, + "@types/webpack-sources": { + "version": "1.4.2", + "resolved": "https://registry.npm.taobao.org/@types/webpack-sources/download/@types/webpack-sources-1.4.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fwebpack-sources%2Fdownload%2F%40types%2Fwebpack-sources-1.4.2.tgz", + "integrity": "sha1-XT1N6gQAineakBNf+W+1wMnmKSw=", + "dev": true, + "requires": { + "@types/node": "*", + "@types/source-list-map": "*", + "source-map": "^0.7.3" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.7.3.tgz", + "integrity": "sha1-UwL4FpAxc1ImVECS5kmB91F1A4M=", + "dev": true + } + } + }, + "@vue/babel-helper-vue-jsx-merge-props": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/@vue/babel-helper-vue-jsx-merge-props/download/@vue/babel-helper-vue-jsx-merge-props-1.0.0.tgz", + "integrity": "sha1-BI/leZWNpAj7eosqPsBQtQpmEEA=", + "dev": true + }, + "@vue/babel-plugin-transform-vue-jsx": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/@vue/babel-plugin-transform-vue-jsx/download/@vue/babel-plugin-transform-vue-jsx-1.1.2.tgz", + "integrity": "sha1-wKPm78Ai515CR7RIqPxrhvA+kcA=", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-helper-vue-jsx-merge-props": "^1.0.0", + "html-tags": "^2.0.0", + "lodash.kebabcase": "^4.1.1", + "svg-tags": "^1.0.0" + }, + "dependencies": { + "html-tags": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/html-tags/download/html-tags-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhtml-tags%2Fdownload%2Fhtml-tags-2.0.0.tgz", + "integrity": "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=", + "dev": true + } + } + }, + "@vue/babel-preset-app": { + "version": "4.5.4", + "resolved": "https://registry.npm.taobao.org/@vue/babel-preset-app/download/@vue/babel-preset-app-4.5.4.tgz", + "integrity": "sha1-uxZOirVWc8Vh5ug1EWMe2hnv1+Q=", + "dev": true, + "requires": { + "@ant-design-vue/babel-plugin-jsx": "^1.0.0-0", + "@babel/core": "^7.11.0", + "@babel/helper-compilation-targets": "^7.9.6", + "@babel/helper-module-imports": "^7.8.3", + "@babel/plugin-proposal-class-properties": "^7.8.3", + "@babel/plugin-proposal-decorators": "^7.8.3", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-jsx": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.11.0", + "@babel/preset-env": "^7.11.0", + "@babel/runtime": "^7.11.0", + "@vue/babel-preset-jsx": "^1.1.2", + "babel-plugin-dynamic-import-node": "^2.3.3", + "core-js": "^3.6.5", + "core-js-compat": "^3.6.5", + "semver": "^6.1.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz", + "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=", + "dev": true + } + } + }, + "@vue/babel-preset-jsx": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/@vue/babel-preset-jsx/download/@vue/babel-preset-jsx-1.1.2.tgz?cache=0&sync_timestamp=1573270721644&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fbabel-preset-jsx%2Fdownload%2F%40vue%2Fbabel-preset-jsx-1.1.2.tgz", + "integrity": "sha1-LhaetMIE6jfKZsLqhaiAv8mdTyA=", + "dev": true, + "requires": { + "@vue/babel-helper-vue-jsx-merge-props": "^1.0.0", + "@vue/babel-plugin-transform-vue-jsx": "^1.1.2", + "@vue/babel-sugar-functional-vue": "^1.1.2", + "@vue/babel-sugar-inject-h": "^1.1.2", + "@vue/babel-sugar-v-model": "^1.1.2", + "@vue/babel-sugar-v-on": "^1.1.2" + } + }, + "@vue/babel-sugar-functional-vue": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/@vue/babel-sugar-functional-vue/download/@vue/babel-sugar-functional-vue-1.1.2.tgz", + "integrity": "sha1-9+JPugnm8e5wEEVgqICAV1VfGpo=", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@vue/babel-sugar-inject-h": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/@vue/babel-sugar-inject-h/download/@vue/babel-sugar-inject-h-1.1.2.tgz", + "integrity": "sha1-ilJ2ttji7Rb/yAeKrZQjYnTm7fA=", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@vue/babel-sugar-v-model": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/@vue/babel-sugar-v-model/download/@vue/babel-sugar-v-model-1.1.2.tgz", + "integrity": "sha1-H/b9G4ACI/ycsehNzrXlLXN6gZI=", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-helper-vue-jsx-merge-props": "^1.0.0", + "@vue/babel-plugin-transform-vue-jsx": "^1.1.2", + "camelcase": "^5.0.0", + "html-tags": "^2.0.0", + "svg-tags": "^1.0.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz", + "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=", + "dev": true + }, + "html-tags": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/html-tags/download/html-tags-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhtml-tags%2Fdownload%2Fhtml-tags-2.0.0.tgz", + "integrity": "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=", + "dev": true + } + } + }, + "@vue/babel-sugar-v-on": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/@vue/babel-sugar-v-on/download/@vue/babel-sugar-v-on-1.1.2.tgz?cache=0&sync_timestamp=1573270721318&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fbabel-sugar-v-on%2Fdownload%2F%40vue%2Fbabel-sugar-v-on-1.1.2.tgz", + "integrity": "sha1-su+ZuPL6sJ++rSWq1w70Lhz1sTs=", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-plugin-transform-vue-jsx": "^1.1.2", + "camelcase": "^5.0.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz", + "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=", + "dev": true + } + } + }, + "@vue/cli-overlay": { + "version": "4.5.4", + "resolved": "https://registry.npm.taobao.org/@vue/cli-overlay/download/@vue/cli-overlay-4.5.4.tgz?cache=0&sync_timestamp=1597717221287&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fcli-overlay%2Fdownload%2F%40vue%2Fcli-overlay-4.5.4.tgz", + "integrity": "sha1-4H48zC5Ndw1P29Rc3ed31ZKCLBk=", + "dev": true + }, + "@vue/cli-plugin-babel": { + "version": "4.5.4", + "resolved": "https://registry.npm.taobao.org/@vue/cli-plugin-babel/download/@vue/cli-plugin-babel-4.5.4.tgz", + "integrity": "sha1-oBzcs9RgZGdd2I1htkCtrcyFHis=", + "dev": true, + "requires": { + "@babel/core": "^7.11.0", + "@vue/babel-preset-app": "^4.5.4", + "@vue/cli-shared-utils": "^4.5.4", + "babel-loader": "^8.1.0", + "cache-loader": "^4.1.0", + "thread-loader": "^2.1.3", + "webpack": "^4.0.0" + } + }, + "@vue/cli-plugin-eslint": { + "version": "4.5.4", + "resolved": "https://registry.npm.taobao.org/@vue/cli-plugin-eslint/download/@vue/cli-plugin-eslint-4.5.4.tgz", + "integrity": "sha1-Dx8wer/h5K1n3Ll2k2QJQrFfrnY=", + "dev": true, + "requires": { + "@vue/cli-shared-utils": "^4.5.4", + "eslint-loader": "^2.2.1", + "globby": "^9.2.0", + "inquirer": "^7.1.0", + "webpack": "^4.0.0", + "yorkie": "^2.0.0" + } + }, + "@vue/cli-plugin-router": { + "version": "4.5.4", + "resolved": "https://registry.npm.taobao.org/@vue/cli-plugin-router/download/@vue/cli-plugin-router-4.5.4.tgz", + "integrity": "sha1-BvIkCMftas7dv3MCy0eik7evQ0c=", + "dev": true, + "requires": { + "@vue/cli-shared-utils": "^4.5.4" + } + }, + "@vue/cli-plugin-unit-mocha": { + "version": "4.5.4", + "resolved": "https://registry.npm.taobao.org/@vue/cli-plugin-unit-mocha/download/@vue/cli-plugin-unit-mocha-4.5.4.tgz?cache=0&sync_timestamp=1597717304205&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fcli-plugin-unit-mocha%2Fdownload%2F%40vue%2Fcli-plugin-unit-mocha-4.5.4.tgz", + "integrity": "sha1-EazDx9SW/Y43T2CASewRyq/0Q/M=", + "dev": true, + "requires": { + "@vue/cli-shared-utils": "^4.5.4", + "jsdom": "^15.2.1", + "jsdom-global": "^3.0.2", + "mocha": "^6.2.2", + "mochapack": "^1.1.15" + } + }, + "@vue/cli-plugin-vuex": { + "version": "4.5.4", + "resolved": "https://registry.npm.taobao.org/@vue/cli-plugin-vuex/download/@vue/cli-plugin-vuex-4.5.4.tgz", + "integrity": "sha1-YpbjBziPYRMhF+CsAxiAE2UrDFU=", + "dev": true, + "requires": {} + }, + "@vue/cli-service": { + "version": "4.5.4", + "resolved": "https://registry.npm.taobao.org/@vue/cli-service/download/@vue/cli-service-4.5.4.tgz?cache=0&sync_timestamp=1597717222018&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fcli-service%2Fdownload%2F%40vue%2Fcli-service-4.5.4.tgz", + "integrity": "sha1-+QPt9VXRB0BGJN4v7VmW2oztxSQ=", + "dev": true, + "requires": { + "@intervolga/optimize-cssnano-plugin": "^1.0.5", + "@soda/friendly-errors-webpack-plugin": "^1.7.1", + "@soda/get-current-script": "^1.0.0", + "@types/minimist": "^1.2.0", + "@types/webpack": "^4.0.0", + "@types/webpack-dev-server": "^3.11.0", + "@vue/cli-overlay": "^4.5.4", + "@vue/cli-plugin-router": "^4.5.4", + "@vue/cli-plugin-vuex": "^4.5.4", + "@vue/cli-shared-utils": "^4.5.4", + "@vue/component-compiler-utils": "^3.1.2", + "@vue/preload-webpack-plugin": "^1.1.0", + "@vue/web-component-wrapper": "^1.2.0", + "acorn": "^7.4.0", + "acorn-walk": "^7.1.1", + "address": "^1.1.2", + "autoprefixer": "^9.8.6", + "browserslist": "^4.12.0", + "cache-loader": "^4.1.0", + "case-sensitive-paths-webpack-plugin": "^2.3.0", + "cli-highlight": "^2.1.4", + "clipboardy": "^2.3.0", + "cliui": "^6.0.0", + "copy-webpack-plugin": "^5.1.1", + "css-loader": "^3.5.3", + "cssnano": "^4.1.10", + "debug": "^4.1.1", + "default-gateway": "^5.0.5", + "dotenv": "^8.2.0", + "dotenv-expand": "^5.1.0", + "file-loader": "^4.2.0", + "fs-extra": "^7.0.1", + "globby": "^9.2.0", + "hash-sum": "^2.0.0", + "html-webpack-plugin": "^3.2.0", + "launch-editor-middleware": "^2.2.1", + "lodash.defaultsdeep": "^4.6.1", + "lodash.mapvalues": "^4.6.0", + "lodash.transform": "^4.6.0", + "mini-css-extract-plugin": "^0.9.0", + "minimist": "^1.2.5", + "pnp-webpack-plugin": "^1.6.4", + "portfinder": "^1.0.26", + "postcss-loader": "^3.0.0", + "ssri": "^7.1.0", + "terser-webpack-plugin": "^2.3.6", + "thread-loader": "^2.1.3", + "url-loader": "^2.2.0", + "vue-loader": "^15.9.2", + "vue-loader-v16": "npm:vue-loader@^16.0.0-beta.3", + "vue-style-loader": "^4.1.2", + "webpack": "^4.0.0", + "webpack-bundle-analyzer": "^3.8.0", + "webpack-chain": "^6.4.0", + "webpack-dev-server": "^3.11.0", + "webpack-merge": "^4.2.2" + }, + "dependencies": { + "acorn": { + "version": "7.4.0", + "resolved": "https://registry.npm.taobao.org/acorn/download/acorn-7.4.0.tgz?cache=0&sync_timestamp=1597235774928&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn%2Fdownload%2Facorn-7.4.0.tgz", + "integrity": "sha1-4a1IbmxUUBY0xsOXxcEh2qODYHw=", + "dev": true + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npm.taobao.org/acorn-walk/download/acorn-walk-7.2.0.tgz?cache=0&sync_timestamp=1597235855275&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn-walk%2Fdownload%2Facorn-walk-7.2.0.tgz", + "integrity": "sha1-DeiJpgEgOQmw++B7iTjcIdLpZ7w=", + "dev": true + }, + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-4.2.1.tgz", + "integrity": "sha1-kK51xCTQCNJiTFvynq0xd+v881k=", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "cacache": { + "version": "13.0.1", + "resolved": "https://registry.npm.taobao.org/cacache/download/cacache-13.0.1.tgz?cache=0&sync_timestamp=1594429684526&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcacache%2Fdownload%2Fcacache-13.0.1.tgz", + "integrity": "sha1-qAAMIWlwiQgvhSh6GuxuOCAkpxw=", + "dev": true, + "requires": { + "chownr": "^1.1.2", + "figgy-pudding": "^3.5.1", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.2", + "infer-owner": "^1.0.4", + "lru-cache": "^5.1.1", + "minipass": "^3.0.0", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "p-map": "^3.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^2.7.1", + "ssri": "^7.0.0", + "unique-filename": "^1.1.1" + } + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npm.taobao.org/cliui/download/cliui-6.0.0.tgz?cache=0&sync_timestamp=1597608006561&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcliui%2Fdownload%2Fcliui-6.0.0.tgz", + "integrity": "sha1-UR1wLAxOQcoVbX0OlgIfI+EyJbE=", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz?cache=0&sync_timestamp=1566248870121&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcolor-convert%2Fdownload%2Fcolor-convert-2.0.1.tgz", + "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz", + "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", + "dev": true + }, + "find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-3.3.1.tgz", + "integrity": "sha1-ibM/rUpGcNqpT4Vff74x1thP6IA=", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-4.1.0.tgz?cache=0&sync_timestamp=1597169842138&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-up%2Fdownload%2Ffind-up-4.1.0.tgz", + "integrity": "sha1-l6/n1s3AvFkoWEt8jXsW6KmqXRk=", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npm.taobao.org/locate-path/download/locate-path-5.0.0.tgz", + "integrity": "sha1-Gvujlq/WdqbUJQTQpno6frn2KqA=", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/make-dir/download/make-dir-3.1.0.tgz?cache=0&sync_timestamp=1587567572251&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmake-dir%2Fdownload%2Fmake-dir-3.1.0.tgz", + "integrity": "sha1-QV6WcEazp/HRhSd9hKpYIDcmoT8=", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/p-locate/download/p-locate-4.1.0.tgz", + "integrity": "sha1-o0KLtwiLOmApL2aRkni3wpetTwc=", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/path-exists/download/path-exists-4.0.0.tgz", + "integrity": "sha1-UTvb4tO5XXdi6METfvoZXGxhtbM=", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-4.2.0.tgz", + "integrity": "sha1-8JkTPfft5CLoHR2ESCcO6z5CYfM=", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz", + "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + }, + "ssri": { + "version": "7.1.0", + "resolved": "https://registry.npm.taobao.org/ssri/download/ssri-7.1.0.tgz", + "integrity": "sha1-ksJBv23oI2W1x/tL126XVSLhKU0=", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1", + "minipass": "^3.1.1" + } + }, + "terser-webpack-plugin": { + "version": "2.3.8", + "resolved": "https://registry.npm.taobao.org/terser-webpack-plugin/download/terser-webpack-plugin-2.3.8.tgz?cache=0&sync_timestamp=1597229593156&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fterser-webpack-plugin%2Fdownload%2Fterser-webpack-plugin-2.3.8.tgz", + "integrity": "sha1-iUdkoZsHQ/L3BOfCqEjFKDppZyQ=", + "dev": true, + "requires": { + "cacache": "^13.0.1", + "find-cache-dir": "^3.3.1", + "jest-worker": "^25.4.0", + "p-limit": "^2.3.0", + "schema-utils": "^2.6.6", + "serialize-javascript": "^4.0.0", + "source-map": "^0.6.1", + "terser": "^4.6.12", + "webpack-sources": "^1.4.3" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-6.2.0.tgz", + "integrity": "sha1-6Tk7oHEC5skaOyIUePAlfNKFblM=", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } + } + }, + "@vue/cli-shared-utils": { + "version": "4.5.4", + "resolved": "https://registry.npm.taobao.org/@vue/cli-shared-utils/download/@vue/cli-shared-utils-4.5.4.tgz?cache=0&sync_timestamp=1597717221168&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fcli-shared-utils%2Fdownload%2F%40vue%2Fcli-shared-utils-4.5.4.tgz", + "integrity": "sha1-7Taylx3AJlP38q1OZrvpUQ4b1BQ=", + "dev": true, + "requires": { + "@hapi/joi": "^15.0.1", + "chalk": "^2.4.2", + "execa": "^1.0.0", + "launch-editor": "^2.2.1", + "lru-cache": "^5.1.1", + "node-ipc": "^9.1.1", + "open": "^6.3.0", + "ora": "^3.4.0", + "read-pkg": "^5.1.1", + "request": "^2.88.2", + "semver": "^6.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz", + "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=", + "dev": true + } + } + }, + "@vue/component-compiler-utils": { + "version": "3.2.0", + "resolved": "https://registry.npm.taobao.org/@vue/component-compiler-utils/download/@vue/component-compiler-utils-3.2.0.tgz?cache=0&sync_timestamp=1595427628913&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fcomponent-compiler-utils%2Fdownload%2F%40vue%2Fcomponent-compiler-utils-3.2.0.tgz", + "integrity": "sha1-j4UYLO7Sjps8dTE95mn4MWbRHl0=", + "dev": true, + "requires": { + "consolidate": "^0.15.1", + "hash-sum": "^1.0.2", + "lru-cache": "^4.1.2", + "merge-source-map": "^1.1.0", + "postcss": "^7.0.14", + "postcss-selector-parser": "^6.0.2", + "prettier": "^1.18.2", + "source-map": "~0.6.1", + "vue-template-es2015-compiler": "^1.9.0" + }, + "dependencies": { + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/hash-sum/download/hash-sum-1.0.2.tgz", + "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", + "dev": true + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npm.taobao.org/lru-cache/download/lru-cache-4.1.5.tgz?cache=0&sync_timestamp=1594427582110&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flru-cache%2Fdownload%2Flru-cache-4.1.5.tgz", + "integrity": "sha1-i75Q6oW+1ZvJ4z3KuCNe6bz0Q80=", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + } + } + }, + "@vue/preload-webpack-plugin": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/@vue/preload-webpack-plugin/download/@vue/preload-webpack-plugin-1.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fpreload-webpack-plugin%2Fdownload%2F%40vue%2Fpreload-webpack-plugin-1.1.2.tgz", + "integrity": "sha1-zrkktOyzucQ4ccekKaAvhCPmIas=", + "dev": true, + "requires": {} + }, + "@vue/test-utils": { + "version": "1.0.5", + "resolved": "https://registry.npm.taobao.org/@vue/test-utils/download/@vue/test-utils-1.0.5.tgz", + "integrity": "sha1-Z24fmGu5PdyGnZxs8cggGD1k2S8=", + "dev": true, + "requires": { + "dom-event-types": "^1.0.0", + "lodash": "^4.17.15", + "pretty": "^2.0.0" + } + }, + "@vue/web-component-wrapper": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/@vue/web-component-wrapper/download/@vue/web-component-wrapper-1.2.0.tgz", + "integrity": "sha1-uw5G8VhafiibTuYGfcxaauYvHdE=", + "dev": true + }, + "@webassemblyjs/ast": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/ast/download/@webassemblyjs/ast-1.9.0.tgz?cache=0&sync_timestamp=1580599461432&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fast%2Fdownload%2F%40webassemblyjs%2Fast-1.9.0.tgz", + "integrity": "sha1-vYUGBLQEJFmlpBzX0zjL7Wle2WQ=", + "dev": true, + "requires": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/floating-point-hex-parser/download/@webassemblyjs/floating-point-hex-parser-1.9.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Ffloating-point-hex-parser%2Fdownload%2F%40webassemblyjs%2Ffloating-point-hex-parser-1.9.0.tgz", + "integrity": "sha1-PD07Jxvd/ITesA9xNEQ4MR1S/7Q=", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-api-error/download/@webassemblyjs/helper-api-error-1.9.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fhelper-api-error%2Fdownload%2F%40webassemblyjs%2Fhelper-api-error-1.9.0.tgz", + "integrity": "sha1-ID9nbjM7lsnaLuqzzO8zxFkotqI=", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-buffer/download/@webassemblyjs/helper-buffer-1.9.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fhelper-buffer%2Fdownload%2F%40webassemblyjs%2Fhelper-buffer-1.9.0.tgz", + "integrity": "sha1-oUQtJpxf6yP8vJ73WdrDVH8p3gA=", + "dev": true + }, + "@webassemblyjs/helper-code-frame": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-code-frame/download/@webassemblyjs/helper-code-frame-1.9.0.tgz", + "integrity": "sha1-ZH+Iks0gQ6gqwMjF51w28dkVnyc=", + "dev": true, + "requires": { + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "@webassemblyjs/helper-fsm": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-fsm/download/@webassemblyjs/helper-fsm-1.9.0.tgz?cache=0&sync_timestamp=1580599471846&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fhelper-fsm%2Fdownload%2F%40webassemblyjs%2Fhelper-fsm-1.9.0.tgz", + "integrity": "sha1-wFJWtxJEIUZx9LCOwQitY7cO3bg=", + "dev": true + }, + "@webassemblyjs/helper-module-context": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-module-context/download/@webassemblyjs/helper-module-context-1.9.0.tgz", + "integrity": "sha1-JdiIS3aDmHGgimxvgGw5ee9xLwc=", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-wasm-bytecode/download/@webassemblyjs/helper-wasm-bytecode-1.9.0.tgz?cache=0&sync_timestamp=1580600708901&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fhelper-wasm-bytecode%2Fdownload%2F%40webassemblyjs%2Fhelper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha1-T+2L6sm4wU+MWLcNEk1UndH+V5A=", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-wasm-section/download/@webassemblyjs/helper-wasm-section-1.9.0.tgz?cache=0&sync_timestamp=1580599464343&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fhelper-wasm-section%2Fdownload%2F%40webassemblyjs%2Fhelper-wasm-section-1.9.0.tgz", + "integrity": "sha1-WkE41aYpK6GLBMWuSXF+QWeWU0Y=", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/ieee754/download/@webassemblyjs/ieee754-1.9.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fieee754%2Fdownload%2F%40webassemblyjs%2Fieee754-1.9.0.tgz", + "integrity": "sha1-Fceg+6roP7JhQ7us9tbfFwKtOeQ=", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/leb128/download/@webassemblyjs/leb128-1.9.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fleb128%2Fdownload%2F%40webassemblyjs%2Fleb128-1.9.0.tgz", + "integrity": "sha1-8Zygt2ptxVYjoJz/p2noOPoeHJU=", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/utf8/download/@webassemblyjs/utf8-1.9.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Futf8%2Fdownload%2F%40webassemblyjs%2Futf8-1.9.0.tgz", + "integrity": "sha1-BNM7Y2945qaBMifoJAL3Y3tiKas=", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/wasm-edit/download/@webassemblyjs/wasm-edit-1.9.0.tgz?cache=0&sync_timestamp=1580599461044&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fwasm-edit%2Fdownload%2F%40webassemblyjs%2Fwasm-edit-1.9.0.tgz", + "integrity": "sha1-P+bXnT8PkiGDqoYALELdJWz+6c8=", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/wasm-gen/download/@webassemblyjs/wasm-gen-1.9.0.tgz?cache=0&sync_timestamp=1580600714947&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fwasm-gen%2Fdownload%2F%40webassemblyjs%2Fwasm-gen-1.9.0.tgz", + "integrity": "sha1-ULxw7Gje2OJ2OwGhQYv0NJGnpJw=", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/wasm-opt/download/@webassemblyjs/wasm-opt-1.9.0.tgz?cache=0&sync_timestamp=1580600719192&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fwasm-opt%2Fdownload%2F%40webassemblyjs%2Fwasm-opt-1.9.0.tgz", + "integrity": "sha1-IhEYHlsxMmRDzIES658LkChyGmE=", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/wasm-parser/download/@webassemblyjs/wasm-parser-1.9.0.tgz?cache=0&sync_timestamp=1580599463057&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fwasm-parser%2Fdownload%2F%40webassemblyjs%2Fwasm-parser-1.9.0.tgz", + "integrity": "sha1-nUjkSCbfSmWYKUqmyHRp1kL/9l4=", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "@webassemblyjs/wast-parser": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/wast-parser/download/@webassemblyjs/wast-parser-1.9.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fwast-parser%2Fdownload%2F%40webassemblyjs%2Fwast-parser-1.9.0.tgz", + "integrity": "sha1-MDERXXmsW9JhVWzsw/qQo+9FGRQ=", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/wast-printer/download/@webassemblyjs/wast-printer-1.9.0.tgz?cache=0&sync_timestamp=1580600723640&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fwast-printer%2Fdownload%2F%40webassemblyjs%2Fwast-printer-1.9.0.tgz", + "integrity": "sha1-STXVTIX+9jewDOn1I3dFHQDUeJk=", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/@xtuc/ieee754/download/@xtuc/ieee754-1.2.0.tgz", + "integrity": "sha1-7vAUoxRa5Hehy8AM0eVSM23Ot5A=", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npm.taobao.org/@xtuc/long/download/@xtuc/long-4.2.2.tgz", + "integrity": "sha1-0pHGpOl5ibXGHZrPOWrk/hM6cY0=", + "dev": true + }, + "abab": { + "version": "2.0.4", + "resolved": "https://registry.npm.taobao.org/abab/download/abab-2.0.4.tgz?cache=0&sync_timestamp=1596256174952&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fabab%2Fdownload%2Fabab-2.0.4.tgz", + "integrity": "sha1-bfpXtBfKBtIbJHjw5jgwL5nCQFw=", + "dev": true + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/abbrev/download/abbrev-1.1.1.tgz", + "integrity": "sha1-+PLIh60Qv2f2NPAFtph/7TF5qsg=", + "dev": true + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npm.taobao.org/accepts/download/accepts-1.3.7.tgz", + "integrity": "sha1-UxvHJlF6OytB+FACHGzBXqq1B80=", + "dev": true, + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "acorn": { + "version": "6.4.1", + "resolved": "https://registry.npm.taobao.org/acorn/download/acorn-6.4.1.tgz?cache=0&sync_timestamp=1597235774928&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn%2Fdownload%2Facorn-6.4.1.tgz", + "integrity": "sha1-Ux5Yuj9RudrLmmZGyk3r9bFMpHQ=", + "dev": true + }, + "acorn-globals": { + "version": "4.3.4", + "resolved": "https://registry.npm.taobao.org/acorn-globals/download/acorn-globals-4.3.4.tgz", + "integrity": "sha1-n6GSat3BHJcwjE5m163Q1Awycuc=", + "dev": true, + "requires": { + "acorn": "^6.0.1", + "acorn-walk": "^6.0.1" + } + }, + "acorn-jsx": { + "version": "5.3.1", + "resolved": "https://registry.npm.taobao.org/acorn-jsx/download/acorn-jsx-5.3.1.tgz?cache=0&sync_timestamp=1599499155970&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn-jsx%2Fdownload%2Facorn-jsx-5.3.1.tgz", + "integrity": "sha1-/IZh4Rt6wVOcR9v+oucrOvNNJns=", + "dev": true, + "requires": {} + }, + "acorn-walk": { + "version": "6.2.0", + "resolved": "https://registry.npm.taobao.org/acorn-walk/download/acorn-walk-6.2.0.tgz?cache=0&sync_timestamp=1597235855275&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn-walk%2Fdownload%2Facorn-walk-6.2.0.tgz", + "integrity": "sha1-Ejy487hMIXHx9/slJhWxx4prGow=", + "dev": true + }, + "address": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/address/download/address-1.1.2.tgz", + "integrity": "sha1-vxEWycdYxRt6kz0pa3LCIe2UKLY=", + "dev": true + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/aggregate-error/download/aggregate-error-3.1.0.tgz?cache=0&sync_timestamp=1598049717562&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Faggregate-error%2Fdownload%2Faggregate-error-3.1.0.tgz", + "integrity": "sha1-kmcP9Q9TWb23o+DUDQ7DDFc3aHo=", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "6.12.4", + "resolved": "https://registry.npm.taobao.org/ajv/download/ajv-6.12.4.tgz?cache=0&sync_timestamp=1597480759610&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv%2Fdownload%2Fajv-6.12.4.tgz", + "integrity": "sha1-BhT6zEUiEn+nE0Rca/0+vTduIjQ=", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/ajv-errors/download/ajv-errors-1.0.1.tgz", + "integrity": "sha1-81mGrOuRr63sQQL72FAUlQzvpk0=", + "dev": true, + "requires": {} + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npm.taobao.org/ajv-keywords/download/ajv-keywords-3.5.2.tgz?cache=0&sync_timestamp=1595907068314&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv-keywords%2Fdownload%2Fajv-keywords-3.5.2.tgz", + "integrity": "sha1-MfKdpatuANHC0yms97WSlhTVAU0=", + "dev": true, + "requires": {} + }, + "alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/alphanum-sort/download/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", + "dev": true + }, + "ansi-colors": { + "version": "3.2.3", + "resolved": "https://registry.npm.taobao.org/ansi-colors/download/ansi-colors-3.2.3.tgz", + "integrity": "sha1-V9NbhoboUeLMBMQD8cACA5dqGBM=", + "dev": true + }, + "ansi-escapes": { + "version": "4.3.1", + "resolved": "https://registry.npm.taobao.org/ansi-escapes/download/ansi-escapes-4.3.1.tgz", + "integrity": "sha1-pcR8xDGB8fOP/XB2g3cA05VSKmE=", + "dev": true, + "requires": { + "type-fest": "^0.11.0" + }, + "dependencies": { + "type-fest": { + "version": "0.11.0", + "resolved": "https://registry.npm.taobao.org/type-fest/download/type-fest-0.11.0.tgz", + "integrity": "sha1-l6vwhyMQ/tiKXEZrJWgVdhReM/E=", + "dev": true + } + } + }, + "ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npm.taobao.org/ansi-html/download/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "dev": true + }, + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz?cache=0&sync_timestamp=1570188663907&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-4.1.0.tgz", + "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz", + "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npm.taobao.org/any-promise/download/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", + "dev": true + }, + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/anymatch/download/anymatch-3.1.1.tgz", + "integrity": "sha1-xV7PAhheJGklk5kxDBc84xIzsUI=", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/aproba/download/aproba-1.2.0.tgz", + "integrity": "sha1-aALmJk79GMeQobDVF/DyYnvyyUo=", + "dev": true + }, + "arch": { + "version": "2.1.2", + "resolved": "https://registry.npm.taobao.org/arch/download/arch-2.1.2.tgz", + "integrity": "sha1-DFK75zRLtPomDEQ9LLrZwA/y8L8=", + "dev": true + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npm.taobao.org/argparse/download/argparse-1.0.10.tgz?cache=0&sync_timestamp=1598649734444&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fargparse%2Fdownload%2Fargparse-1.0.10.tgz", + "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/arr-diff/download/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/arr-flatten/download/arr-flatten-1.1.0.tgz", + "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/arr-union/download/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-equal": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/array-equal/download/array-equal-1.0.0.tgz", + "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", + "dev": true + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/array-flatten/download/array-flatten-1.1.1.tgz?cache=0&sync_timestamp=1574313384951&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Farray-flatten%2Fdownload%2Farray-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/array-union/download/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/array-uniq/download/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npm.taobao.org/array-unique/download/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npm.taobao.org/asn1/download/asn1-0.2.4.tgz", + "integrity": "sha1-jSR136tVO7M+d7VOWeiAu4ziMTY=", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npm.taobao.org/asn1.js/download/asn1.js-5.4.1.tgz", + "integrity": "sha1-EamAuE67kXgc41sP3C7ilON4Pwc=", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.11.9.tgz", + "integrity": "sha1-JtVWgpRY+dHoH8SJUkk9C6NQeCg=", + "dev": true + } + } + }, + "assert": { + "version": "1.5.0", + "resolved": "https://registry.npm.taobao.org/assert/download/assert-1.5.0.tgz", + "integrity": "sha1-VcEJqvbgrv2z3EtxJAxwv1dLGOs=", + "dev": true, + "requires": { + "object-assign": "^4.1.1", + "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.1.tgz?cache=0&sync_timestamp=1560975547815&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finherits%2Fdownload%2Finherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npm.taobao.org/util/download/util-0.10.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Futil%2Fdownload%2Futil-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + } + } + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/assert-plus/download/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/assertion-error/download/assertion-error-1.1.0.tgz", + "integrity": "sha1-5gtrDo8wG9l+U3UhW9pAbIURjAs=", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/assign-symbols/download/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/astral-regex/download/astral-regex-1.0.0.tgz", + "integrity": "sha1-bIw/uCfdQ+45GPJ7gngqt2WKb9k=", + "dev": true + }, + "async": { + "version": "2.6.3", + "resolved": "https://registry.npm.taobao.org/async/download/async-2.6.3.tgz", + "integrity": "sha1-1yYl4jRKNlbjo61Pp0n6gymdgv8=", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/async-each/download/async-each-1.0.3.tgz", + "integrity": "sha1-tyfb+H12UWAvBvTUrDh/R9kbDL8=", + "dev": true + }, + "async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/async-limiter/download/async-limiter-1.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fasync-limiter%2Fdownload%2Fasync-limiter-1.0.1.tgz", + "integrity": "sha1-3TeelPDbgxCwgpH51kwyCXZmF/0=", + "dev": true + }, + "async-validator": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-1.8.5.tgz", + "integrity": "sha512-tXBM+1m056MAX0E8TL2iCjg8WvSyXu0Zc8LNtYqrVeyoL3+esHRZ4SieE9fKQyyU09uONjnMEjrNBMqT0mbvmA==", + "requires": { + "babel-runtime": "6.x" + } + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npm.taobao.org/atob/download/atob-2.1.2.tgz", + "integrity": "sha1-bZUX654DDSQ2ZmZR6GvZ9vE1M8k=", + "dev": true + }, + "autoprefixer": { + "version": "9.8.6", + "resolved": "https://registry.npm.taobao.org/autoprefixer/download/autoprefixer-9.8.6.tgz?cache=0&sync_timestamp=1596143120138&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fautoprefixer%2Fdownload%2Fautoprefixer-9.8.6.tgz", + "integrity": "sha1-O3NZTKG/kmYyDFrPFYjXTep0IQ8=", + "dev": true, + "requires": { + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001109", + "colorette": "^1.2.1", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" + } + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npm.taobao.org/aws-sign2/download/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.10.1", + "resolved": "https://registry.npm.taobao.org/aws4/download/aws4-1.10.1.tgz?cache=0&sync_timestamp=1597236947743&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Faws4%2Fdownload%2Faws4-1.10.1.tgz", + "integrity": "sha1-4eguTz6Zniz9YbFhKA0WoRH4ZCg=", + "dev": true + }, + "axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "requires": { + "follow-redirects": "^1.14.0" + }, + "dependencies": { + "follow-redirects": { + "version": "1.14.4", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.4.tgz", + "integrity": "sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g==" + } + } + }, + "babel-eslint": { + "version": "10.1.0", + "resolved": "https://registry.npm.taobao.org/babel-eslint/download/babel-eslint-10.1.0.tgz?cache=0&sync_timestamp=1582676223200&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-eslint%2Fdownload%2Fbabel-eslint-10.1.0.tgz", + "integrity": "sha1-aWjlaKkQt4+zd5zdi2rC9HmUMjI=", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.7.0", + "@babel/traverse": "^7.7.0", + "@babel/types": "^7.7.0", + "eslint-visitor-keys": "^1.0.0", + "resolve": "^1.12.0" + } + }, + "babel-helper-vue-jsx-merge-props": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz", + "integrity": "sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg==" + }, + "babel-loader": { + "version": "8.1.0", + "resolved": "https://registry.npm.taobao.org/babel-loader/download/babel-loader-8.1.0.tgz?cache=0&sync_timestamp=1584715910722&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-loader%2Fdownload%2Fbabel-loader-8.1.0.tgz", + "integrity": "sha1-xhHVESvVIJq+i5+oTD5NolJ18cM=", + "dev": true, + "requires": { + "find-cache-dir": "^2.1.0", + "loader-utils": "^1.4.0", + "mkdirp": "^0.5.3", + "pify": "^4.0.1", + "schema-utils": "^2.6.5" + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npm.taobao.org/babel-plugin-dynamic-import-node/download/babel-plugin-dynamic-import-node-2.3.3.tgz?cache=0&sync_timestamp=1587495903478&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-plugin-dynamic-import-node%2Fdownload%2Fbabel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha1-hP2hnJduxcbe/vV/lCez3vZuF6M=", + "dev": true, + "requires": { + "object.assign": "^4.1.0" + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + }, + "dependencies": { + "core-js": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", + "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==" + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + } + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npm.taobao.org/base/download/base-0.11.2.tgz", + "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npm.taobao.org/base64-js/download/base64-js-1.3.1.tgz", + "integrity": "sha1-WOzoy3XdB+ce0IxzarxfrE2/jfE=", + "dev": true + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/batch/download/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "bfj": { + "version": "6.1.2", + "resolved": "https://registry.npm.taobao.org/bfj/download/bfj-6.1.2.tgz", + "integrity": "sha1-MlyGGoIryzWKQceKM7jm4ght3n8=", + "dev": true, + "requires": { + "bluebird": "^3.5.5", + "check-types": "^8.0.3", + "hoopy": "^0.1.4", + "tryer": "^1.0.1" + } + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npm.taobao.org/big.js/download/big.js-5.2.2.tgz", + "integrity": "sha1-ZfCvOC9Xi83HQr2cKB6cstd2gyg=", + "dev": true + }, + "binary-extensions": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-2.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbinary-extensions%2Fdownload%2Fbinary-extensions-2.1.0.tgz", + "integrity": "sha1-MPpAyef+B9vIlWeM0ocCTeokHdk=", + "dev": true + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npm.taobao.org/bindings/download/bindings-1.5.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbindings%2Fdownload%2Fbindings-1.5.0.tgz", + "integrity": "sha1-EDU8npRTNLwFEabZCzj7x8nFBN8=", + "dev": true, + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npm.taobao.org/bluebird/download/bluebird-3.7.2.tgz", + "integrity": "sha1-nyKcFb4nJFT/qXOs4NvueaGww28=", + "dev": true + }, + "bn.js": { + "version": "5.1.3", + "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-5.1.3.tgz", + "integrity": "sha1-vsoAVAj2Quvr6oCwQrTRjSrA7ms=", + "dev": true + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npm.taobao.org/body-parser/download/body-parser-1.19.0.tgz", + "integrity": "sha1-lrJwnlfJxOCab9Zqj9l5hE9p8Io=", + "dev": true, + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npm.taobao.org/qs/download/qs-6.7.0.tgz", + "integrity": "sha1-QdwaAV49WB8WIXdr4xr7KHapsbw=", + "dev": true + } + } + }, + "bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npm.taobao.org/bonjour/download/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dev": true, + "requires": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + }, + "dependencies": { + "array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npm.taobao.org/array-flatten/download/array-flatten-2.1.2.tgz?cache=0&sync_timestamp=1574313384951&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Farray-flatten%2Fdownload%2Farray-flatten-2.1.2.tgz", + "integrity": "sha1-JO+AoowaiTYX4hSbDG0NeIKTsJk=", + "dev": true + } + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/boolbase/download/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.11.tgz", + "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npm.taobao.org/braces/download/braces-2.3.2.tgz", + "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/brorand/download/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/browser-process-hrtime/download/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha1-PJtLfXgsgSHlbxAQbYTA0P/JRiY=", + "dev": true + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npm.taobao.org/browser-stdout/download/browser-stdout-1.3.1.tgz", + "integrity": "sha1-uqVZ7hTO1zRSIputcyZGfGH6vWA=", + "dev": true + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/browserify-aes/download/browserify-aes-1.2.0.tgz", + "integrity": "sha1-Mmc0ZC9APavDADIJhTu3CtQo70g=", + "dev": true, + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/browserify-cipher/download/browserify-cipher-1.0.1.tgz", + "integrity": "sha1-jWR0wbhwv9q807z8wZNKEOlPFfA=", + "dev": true, + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/browserify-des/download/browserify-des-1.0.2.tgz", + "integrity": "sha1-OvTx9Zg5QDVy8cZiBDdfen9wPpw=", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/browserify-rsa/download/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.11.9.tgz", + "integrity": "sha1-JtVWgpRY+dHoH8SJUkk9C6NQeCg=", + "dev": true + } + } + }, + "browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npm.taobao.org/browserify-sign/download/browserify-sign-4.2.1.tgz?cache=0&sync_timestamp=1596557839219&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbrowserify-sign%2Fdownload%2Fbrowserify-sign-4.2.1.tgz", + "integrity": "sha1-6vSt1G3VS+O7OzbAzxWrvrp5VsM=", + "dev": true, + "requires": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.6.0.tgz?cache=0&sync_timestamp=1581624324274&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freadable-stream%2Fdownload%2Freadable-stream-3.6.0.tgz", + "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.2.1.tgz", + "integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY=", + "dev": true + } + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npm.taobao.org/browserify-zlib/download/browserify-zlib-0.2.0.tgz", + "integrity": "sha1-KGlFnZqjviRf6P4sofRuLn9U1z8=", + "dev": true, + "requires": { + "pako": "~1.0.5" + } + }, + "browserslist": { + "version": "4.14.2", + "resolved": "https://registry.npm.taobao.org/browserslist/download/browserslist-4.14.2.tgz?cache=0&sync_timestamp=1599675648822&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbrowserslist%2Fdownload%2Fbrowserslist-4.14.2.tgz", + "integrity": "sha1-GzzsRYobqHWIzF6b5i8ZttSIE84=", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001125", + "electron-to-chromium": "^1.3.564", + "escalade": "^3.0.2", + "node-releases": "^1.1.61" + } + }, + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npm.taobao.org/buffer/download/buffer-4.9.2.tgz?cache=0&sync_timestamp=1588706716358&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbuffer%2Fdownload%2Fbuffer-4.9.2.tgz", + "integrity": "sha1-Iw6tNEACmIZEhBqwJEr4xEu+Pvg=", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/buffer-from/download/buffer-from-1.1.1.tgz", + "integrity": "sha1-MnE7wCj3XAL9txDXx7zsHyxgcO8=", + "dev": true + }, + "buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/buffer-indexof/download/buffer-indexof-1.1.1.tgz", + "integrity": "sha1-Uvq8xqYG0aADAoAmSO9o9jnaJow=", + "dev": true + }, + "buffer-json": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/buffer-json/download/buffer-json-2.0.0.tgz", + "integrity": "sha1-9z4TseQvGW/i/WfQAcfXEH7dfCM=", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/buffer-xor/download/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/builtin-status-codes/download/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/bytes/download/bytes-3.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbytes%2Fdownload%2Fbytes-3.1.0.tgz", + "integrity": "sha1-9s95M6Ng4FiPqf3oVlHNx/gF0fY=", + "dev": true + }, + "cacache": { + "version": "12.0.4", + "resolved": "https://registry.npm.taobao.org/cacache/download/cacache-12.0.4.tgz?cache=0&sync_timestamp=1594429684526&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcacache%2Fdownload%2Fcacache-12.0.4.tgz", + "integrity": "sha1-ZovL0QWutfHZL+JVcOyVJcj6pAw=", + "dev": true, + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/cache-base/download/cache-base-1.0.1.tgz", + "integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "cache-loader": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/cache-loader/download/cache-loader-4.1.0.tgz", + "integrity": "sha1-mUjK41OuwKH8ser9ojAIFuyFOH4=", + "dev": true, + "requires": { + "buffer-json": "^2.0.0", + "find-cache-dir": "^3.0.0", + "loader-utils": "^1.2.3", + "mkdirp": "^0.5.1", + "neo-async": "^2.6.1", + "schema-utils": "^2.0.0" + }, + "dependencies": { + "find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-3.3.1.tgz", + "integrity": "sha1-ibM/rUpGcNqpT4Vff74x1thP6IA=", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-4.1.0.tgz?cache=0&sync_timestamp=1597169842138&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-up%2Fdownload%2Ffind-up-4.1.0.tgz", + "integrity": "sha1-l6/n1s3AvFkoWEt8jXsW6KmqXRk=", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npm.taobao.org/locate-path/download/locate-path-5.0.0.tgz", + "integrity": "sha1-Gvujlq/WdqbUJQTQpno6frn2KqA=", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/make-dir/download/make-dir-3.1.0.tgz?cache=0&sync_timestamp=1587567572251&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmake-dir%2Fdownload%2Fmake-dir-3.1.0.tgz", + "integrity": "sha1-QV6WcEazp/HRhSd9hKpYIDcmoT8=", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/p-locate/download/p-locate-4.1.0.tgz", + "integrity": "sha1-o0KLtwiLOmApL2aRkni3wpetTwc=", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/path-exists/download/path-exists-4.0.0.tgz", + "integrity": "sha1-UTvb4tO5XXdi6METfvoZXGxhtbM=", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-4.2.0.tgz", + "integrity": "sha1-8JkTPfft5CLoHR2ESCcO6z5CYfM=", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz", + "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=", + "dev": true + } + } + }, + "call-me-maybe": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/call-me-maybe/download/call-me-maybe-1.0.1.tgz", + "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", + "dev": true + }, + "caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/caller-callsite/download/caller-callsite-2.0.0.tgz?cache=0&sync_timestamp=1562668933683&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcaller-callsite%2Fdownload%2Fcaller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "dev": true, + "requires": { + "callsites": "^2.0.0" + } + }, + "caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/caller-path/download/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "dev": true, + "requires": { + "caller-callsite": "^2.0.0" + } + }, + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/callsites/download/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "dev": true + }, + "camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/camel-case/download/camel-case-3.0.0.tgz?cache=0&sync_timestamp=1576748709736&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcamel-case%2Fdownload%2Fcamel-case-3.0.0.tgz", + "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", + "dev": true, + "requires": { + "no-case": "^2.2.0", + "upper-case": "^1.1.1" + } + }, + "camelcase": { + "version": "6.0.0", + "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-6.0.0.tgz", + "integrity": "sha1-Uln3ww414njxvcKk2RIws3ytmB4=", + "dev": true + }, + "caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/caniuse-api/download/caniuse-api-3.0.0.tgz", + "integrity": "sha1-Xk2Q4idJYdRikZl99Znj7QCO5MA=", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "caniuse-lite": { + "version": "1.0.30001125", + "resolved": "https://registry.npm.taobao.org/caniuse-lite/download/caniuse-lite-1.0.30001125.tgz?cache=0&sync_timestamp=1599631496545&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcaniuse-lite%2Fdownload%2Fcaniuse-lite-1.0.30001125.tgz", + "integrity": "sha1-KhpR7gRaCiIHR0sIb2KMNHJemXs=", + "dev": true + }, + "case-sensitive-paths-webpack-plugin": { + "version": "2.3.0", + "resolved": "https://registry.npm.taobao.org/case-sensitive-paths-webpack-plugin/download/case-sensitive-paths-webpack-plugin-2.3.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcase-sensitive-paths-webpack-plugin%2Fdownload%2Fcase-sensitive-paths-webpack-plugin-2.3.0.tgz", + "integrity": "sha1-I6xhPMmoVuT4j/i7c7u16YmCXPc=", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npm.taobao.org/caseless/download/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "chai": { + "version": "4.2.0", + "resolved": "https://registry.npm.taobao.org/chai/download/chai-4.2.0.tgz", + "integrity": "sha1-dgqnLPION5XoSxKHfODoNzeqKeU=", + "dev": true, + "requires": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "pathval": "^1.1.0", + "type-detect": "^4.0.5" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz?cache=0&sync_timestamp=1591687070184&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchalk%2Fdownload%2Fchalk-2.4.2.tgz", + "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npm.taobao.org/chardet/download/chardet-0.7.0.tgz?cache=0&sync_timestamp=1594010664806&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchardet%2Fdownload%2Fchardet-0.7.0.tgz", + "integrity": "sha1-kAlISfCTfy7twkJdDSip5fDLrZ4=", + "dev": true + }, + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/check-error/download/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "dev": true + }, + "check-types": { + "version": "8.0.3", + "resolved": "https://registry.npm.taobao.org/check-types/download/check-types-8.0.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcheck-types%2Fdownload%2Fcheck-types-8.0.3.tgz", + "integrity": "sha1-M1bMoZyIlUTy16le1JzlCKDs9VI=", + "dev": true + }, + "chokidar": { + "version": "3.4.2", + "resolved": "https://registry.npm.taobao.org/chokidar/download/chokidar-3.4.2.tgz", + "integrity": "sha1-ONyOZY3sOAl0HrPve7Ckf+QkIy0=", + "dev": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.4.0" + }, + "dependencies": { + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npm.taobao.org/braces/download/braces-3.0.2.tgz", + "integrity": "sha1-NFThpGLujVmeI23zNs2epPiv4Qc=", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npm.taobao.org/fill-range/download/fill-range-7.0.1.tgz", + "integrity": "sha1-GRmmp8df44ssfHflGYU12prN2kA=", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-7.0.0.tgz", + "integrity": "sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss=", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-5.0.1.tgz", + "integrity": "sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ=", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npm.taobao.org/chownr/download/chownr-1.1.4.tgz?cache=0&sync_timestamp=1581476105370&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchownr%2Fdownload%2Fchownr-1.1.4.tgz", + "integrity": "sha1-b8nXtC0ypYNZYzdmbn0ICE2izGs=", + "dev": true + }, + "chrome-trace-event": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/chrome-trace-event/download/chrome-trace-event-1.0.2.tgz", + "integrity": "sha1-I0CQ7pfH1K0aLEvq4nUF3v/GCKQ=", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "ci-info": { + "version": "1.6.0", + "resolved": "https://registry.npm.taobao.org/ci-info/download/ci-info-1.6.0.tgz", + "integrity": "sha1-LKINu5zrMtRSSmgzAzE/AwSx5Jc=", + "dev": true + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/cipher-base/download/cipher-base-1.0.4.tgz", + "integrity": "sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "ckeditor4-integrations-common": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/ckeditor4-integrations-common/-/ckeditor4-integrations-common-0.2.0.tgz", + "integrity": "sha512-KkHztF0bkGOnTcifWFd55j5Y9SCR3uk12SGgS6L1mZNnBeIJFCcgTwZWEHtG2aDJF7aZob7cex1CShL+SrNuow==", + "requires": { + "load-script": "^1.0.0" + } + }, + "ckeditor4-vue": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/ckeditor4-vue/-/ckeditor4-vue-1.3.2.tgz", + "integrity": "sha512-fke3mzWz/9GrBS/sfeJIRzkqDkfocY2hI268zgb5nwzfWMV87k5zXtbZgCn8vhNg48f69AFDdJ5Oh4/Wa5GTag==", + "requires": { + "ckeditor4-integrations-common": "^0.2.0" + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npm.taobao.org/class-utils/download/class-utils-0.3.6.tgz", + "integrity": "sha1-+TNprouafOAv1B+q0MqDAzGQxGM=", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "clean-css": { + "version": "4.2.3", + "resolved": "https://registry.npm.taobao.org/clean-css/download/clean-css-4.2.3.tgz", + "integrity": "sha1-UHtd59l7SO5T2ErbAWD/YhY4D3g=", + "dev": true, + "requires": { + "source-map": "~0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + } + } + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/clean-stack/download/clean-stack-2.2.0.tgz?cache=0&sync_timestamp=1592035524745&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fclean-stack%2Fdownload%2Fclean-stack-2.2.0.tgz", + "integrity": "sha1-7oRy27Ep5yezHooQpCfe6d/kAIs=", + "dev": true + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/cli-cursor/download/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "cli-highlight": { + "version": "2.1.4", + "resolved": "https://registry.npm.taobao.org/cli-highlight/download/cli-highlight-2.1.4.tgz?cache=0&sync_timestamp=1573948719956&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcli-highlight%2Fdownload%2Fcli-highlight-2.1.4.tgz", + "integrity": "sha1-CYy2Qs8X9CrcHBFF4H+WDsTXUis=", + "dev": true, + "requires": { + "chalk": "^3.0.0", + "highlight.js": "^9.6.0", + "mz": "^2.4.0", + "parse5": "^5.1.1", + "parse5-htmlparser2-tree-adapter": "^5.1.1", + "yargs": "^15.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-4.2.1.tgz", + "integrity": "sha1-kK51xCTQCNJiTFvynq0xd+v881k=", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz", + "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=", + "dev": true + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-3.0.0.tgz?cache=0&sync_timestamp=1591687070184&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchalk%2Fdownload%2Fchalk-3.0.0.tgz", + "integrity": "sha1-P3PCv1JlkfV0zEksUeJFY0n4ROQ=", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npm.taobao.org/cliui/download/cliui-6.0.0.tgz?cache=0&sync_timestamp=1597608006561&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcliui%2Fdownload%2Fcliui-6.0.0.tgz", + "integrity": "sha1-UR1wLAxOQcoVbX0OlgIfI+EyJbE=", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz?cache=0&sync_timestamp=1566248870121&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcolor-convert%2Fdownload%2Fcolor-convert-2.0.1.tgz", + "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz", + "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", + "dev": true + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-4.1.0.tgz?cache=0&sync_timestamp=1597169842138&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-up%2Fdownload%2Ffind-up-4.1.0.tgz", + "integrity": "sha1-l6/n1s3AvFkoWEt8jXsW6KmqXRk=", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-4.0.0.tgz", + "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npm.taobao.org/locate-path/download/locate-path-5.0.0.tgz", + "integrity": "sha1-Gvujlq/WdqbUJQTQpno6frn2KqA=", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/p-locate/download/p-locate-4.1.0.tgz", + "integrity": "sha1-o0KLtwiLOmApL2aRkni3wpetTwc=", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "parse5": { + "version": "5.1.1", + "resolved": "https://registry.npm.taobao.org/parse5/download/parse5-5.1.1.tgz?cache=0&sync_timestamp=1595850861876&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse5%2Fdownload%2Fparse5-5.1.1.tgz", + "integrity": "sha1-9o5OW6GFKsLK3AD0VV//bCq7YXg=", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/path-exists/download/path-exists-4.0.0.tgz", + "integrity": "sha1-UTvb4tO5XXdi6METfvoZXGxhtbM=", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1598611709087&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz", + "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-6.2.0.tgz", + "integrity": "sha1-6Tk7oHEC5skaOyIUePAlfNKFblM=", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.npm.taobao.org/yargs/download/yargs-15.4.1.tgz?cache=0&sync_timestamp=1599673846782&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-15.4.1.tgz", + "integrity": "sha1-DYehbeAa7p2L7Cv7909nhRcw9Pg=", + "dev": true, + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-18.1.3.tgz?cache=0&sync_timestamp=1599672368427&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-18.1.3.tgz", + "integrity": "sha1-vmjEl1xrKr9GkjawyHA2L6sJp7A=", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "cli-spinners": { + "version": "2.4.0", + "resolved": "https://registry.npm.taobao.org/cli-spinners/download/cli-spinners-2.4.0.tgz?cache=0&sync_timestamp=1595080377121&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcli-spinners%2Fdownload%2Fcli-spinners-2.4.0.tgz", + "integrity": "sha1-xiVtsha4eM+6RyDnGc7Hz3JoXX8=", + "dev": true + }, + "cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/cli-width/download/cli-width-3.0.0.tgz", + "integrity": "sha1-ovSEN6LKqaIkNueUvwceyeYc7fY=", + "dev": true + }, + "clipboardy": { + "version": "2.3.0", + "resolved": "https://registry.npm.taobao.org/clipboardy/download/clipboardy-2.3.0.tgz", + "integrity": "sha1-PCkDZQxo5GqRs4iYW8J3QofbopA=", + "dev": true, + "requires": { + "arch": "^2.1.1", + "execa": "^1.0.0", + "is-wsl": "^2.1.1" + }, + "dependencies": { + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/is-wsl/download/is-wsl-2.2.0.tgz", + "integrity": "sha1-dKTHbnfKn9P5MvKQwX6jJs0VcnE=", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + } + } + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npm.taobao.org/cliui/download/cliui-5.0.0.tgz?cache=0&sync_timestamp=1597608006561&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcliui%2Fdownload%2Fcliui-5.0.0.tgz", + "integrity": "sha1-3u/P2y6AB4SqNPRvoI4GhRx7u8U=", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + }, + "dependencies": { + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-7.0.3.tgz", + "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-3.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring-width%2Fdownload%2Fstring-width-3.1.0.tgz", + "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz", + "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/clone/download/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true + }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/clone-deep/download/clone-deep-4.0.1.tgz", + "integrity": "sha1-wZ/Zvbv4WUK0/ZechNz31fB8I4c=", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, + "coa": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/coa/download/coa-2.0.2.tgz", + "integrity": "sha1-Q/bCEVG07yv1cYfbDXPeIp4+fsM=", + "dev": true, + "requires": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + } + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/collection-visit/download/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color": { + "version": "3.1.2", + "resolved": "https://registry.npm.taobao.org/color/download/color-3.1.2.tgz", + "integrity": "sha1-aBSOf4XUGtdknF+oyBBvCY0inhA=", + "dev": true, + "requires": { + "color-convert": "^1.9.1", + "color-string": "^1.5.2" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-1.9.3.tgz?cache=0&sync_timestamp=1566248870121&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcolor-convert%2Fdownload%2Fcolor-convert-1.9.3.tgz", + "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "color-string": { + "version": "1.5.3", + "resolved": "https://registry.npm.taobao.org/color-string/download/color-string-1.5.3.tgz", + "integrity": "sha1-ybvF8BtYtUkvPWhXRZy2WQziBMw=", + "dev": true, + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "colorette": { + "version": "1.2.1", + "resolved": "https://registry.npm.taobao.org/colorette/download/colorette-1.2.1.tgz?cache=0&sync_timestamp=1593955763917&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcolorette%2Fdownload%2Fcolorette-1.2.1.tgz", + "integrity": "sha1-TQuSEyXBT6+SYzCGpTbbbolWSxs=", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.8.tgz", + "integrity": "sha1-w9RaizT9cwYxoRCoolIGgrMdWn8=", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npm.taobao.org/commander/download/commander-2.20.3.tgz?cache=0&sync_timestamp=1598576116597&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-2.20.3.tgz", + "integrity": "sha1-/UhehMA+tIgcIHIrpIA16FMa6zM=", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/commondir/download/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npm.taobao.org/component-emitter/download/component-emitter-1.3.0.tgz", + "integrity": "sha1-FuQHD7qK4ptnnyIVhT7hgasuq8A=", + "dev": true + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npm.taobao.org/compressible/download/compressible-2.0.18.tgz?cache=0&sync_timestamp=1578286264482&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcompressible%2Fdownload%2Fcompressible-2.0.18.tgz", + "integrity": "sha1-r1PMprBw1MPAdQ+9dyhqbXzEb7o=", + "dev": true, + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npm.taobao.org/compression/download/compression-1.7.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcompression%2Fdownload%2Fcompression-1.7.4.tgz", + "integrity": "sha1-lVI+/xcMpXwpoMpB5v4TH0Hlu48=", + "dev": true, + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/bytes/download/bytes-3.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbytes%2Fdownload%2Fbytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npm.taobao.org/concat-stream/download/concat-stream-1.6.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconcat-stream%2Fdownload%2Fconcat-stream-1.6.2.tgz", + "integrity": "sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ=", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "condense-newlines": { + "version": "0.2.1", + "resolved": "https://registry.npm.taobao.org/condense-newlines/download/condense-newlines-0.2.1.tgz", + "integrity": "sha1-PemFVTE5R10yUCyDsC9gaE0kxV8=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-whitespace": "^0.3.0", + "kind-of": "^3.0.2" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "config-chain": { + "version": "1.1.12", + "resolved": "https://registry.npm.taobao.org/config-chain/download/config-chain-1.1.12.tgz", + "integrity": "sha1-D96NCRIA616AjK8l/mGMAvSOTvo=", + "dev": true, + "requires": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npm.taobao.org/connect-history-api-fallback/download/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha1-izIIk1kwjRERFdgcrT/Oq4iPl7w=", + "dev": true + }, + "console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/console-browserify/download/console-browserify-1.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconsole-browserify%2Fdownload%2Fconsole-browserify-1.2.0.tgz", + "integrity": "sha1-ZwY871fOts9Jk6KrOlWECujEkzY=", + "dev": true + }, + "consolidate": { + "version": "0.15.1", + "resolved": "https://registry.npm.taobao.org/consolidate/download/consolidate-0.15.1.tgz?cache=0&sync_timestamp=1599596647062&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconsolidate%2Fdownload%2Fconsolidate-0.15.1.tgz", + "integrity": "sha1-IasEMjXHGgfUXZqtmFk7DbpWurc=", + "dev": true, + "requires": { + "bluebird": "^3.1.1" + } + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/constants-browserify/download/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npm.taobao.org/content-disposition/download/content-disposition-0.5.3.tgz", + "integrity": "sha1-4TDK9+cnkIfFYWwgB9BIVpiYT70=", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/content-type/download/content-type-1.0.4.tgz", + "integrity": "sha1-4TjMdeBAxyexlm/l5fjJruJW/js=", + "dev": true + }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npm.taobao.org/convert-source-map/download/convert-source-map-1.7.0.tgz?cache=0&sync_timestamp=1573003637425&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconvert-source-map%2Fdownload%2Fconvert-source-map-1.7.0.tgz", + "integrity": "sha1-F6LLiC1/d9NJBYXizmxSRCSjpEI=", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npm.taobao.org/cookie/download/cookie-0.4.0.tgz?cache=0&sync_timestamp=1587525865178&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcookie%2Fdownload%2Fcookie-0.4.0.tgz", + "integrity": "sha1-vrQ35wIrO21JAZ0IhmUwPr6cFLo=", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npm.taobao.org/cookie-signature/download/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npm.taobao.org/copy-concurrently/download/copy-concurrently-1.0.5.tgz", + "integrity": "sha1-kilzmMrjSTf8r9bsgTnBgFHwteA=", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npm.taobao.org/copy-descriptor/download/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "copy-webpack-plugin": { + "version": "5.1.2", + "resolved": "https://registry.npm.taobao.org/copy-webpack-plugin/download/copy-webpack-plugin-5.1.2.tgz?cache=0&sync_timestamp=1598891385026&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcopy-webpack-plugin%2Fdownload%2Fcopy-webpack-plugin-5.1.2.tgz", + "integrity": "sha1-ioieHcr6bJHGzUvhrRWPHTgjuuI=", + "dev": true, + "requires": { + "cacache": "^12.0.3", + "find-cache-dir": "^2.1.0", + "glob-parent": "^3.1.0", + "globby": "^7.1.1", + "is-glob": "^4.0.1", + "loader-utils": "^1.2.3", + "minimatch": "^3.0.4", + "normalize-path": "^3.0.0", + "p-limit": "^2.2.1", + "schema-utils": "^1.0.0", + "serialize-javascript": "^4.0.0", + "webpack-log": "^2.0.0" + }, + "dependencies": { + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/glob-parent/download/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "globby": { + "version": "7.1.1", + "resolved": "https://registry.npm.taobao.org/globby/download/globby-7.1.1.tgz?cache=0&sync_timestamp=1591083783605&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobby%2Fdownload%2Fglobby-7.1.1.tgz", + "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "dir-glob": "^2.0.0", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" + } + }, + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npm.taobao.org/ignore/download/ignore-3.3.10.tgz?cache=0&sync_timestamp=1590809289115&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fignore%2Fdownload%2Fignore-3.3.10.tgz", + "integrity": "sha1-Cpf7h2mG6AgcYxFg+PnziRV/AEM=", + "dev": true + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz?cache=0&sync_timestamp=1581697613983&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpify%2Fdownload%2Fpify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz?cache=0&sync_timestamp=1598871750711&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-1.0.0.tgz", + "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/slash/download/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + } + } + }, + "core-js": { + "version": "3.6.5", + "resolved": "https://registry.npm.taobao.org/core-js/download/core-js-3.6.5.tgz?cache=0&sync_timestamp=1586450269267&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcore-js%2Fdownload%2Fcore-js-3.6.5.tgz", + "integrity": "sha1-c5XcJzrzf7LlDpvT2f6EEoUjHRo=" + }, + "core-js-compat": { + "version": "3.6.5", + "resolved": "https://registry.npm.taobao.org/core-js-compat/download/core-js-compat-3.6.5.tgz", + "integrity": "sha1-KlHZpOJd/W5pAlGqgfmePAVIHxw=", + "dev": true, + "requires": { + "browserslist": "^4.8.5", + "semver": "7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-7.0.0.tgz", + "integrity": "sha1-XzyjV2HkfgWyBsba/yz4FPAxa44=", + "dev": true + } + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npm.taobao.org/cosmiconfig/download/cosmiconfig-5.2.1.tgz?cache=0&sync_timestamp=1596310819353&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcosmiconfig%2Fdownload%2Fcosmiconfig-5.2.1.tgz", + "integrity": "sha1-BA9yaAnFked6F8CjYmykW08Wixo=", + "dev": true, + "requires": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + }, + "dependencies": { + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/parse-json/download/parse-json-4.0.0.tgz?cache=0&sync_timestamp=1598129182781&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse-json%2Fdownload%2Fparse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + } + } + }, + "create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npm.taobao.org/create-ecdh/download/create-ecdh-4.0.4.tgz", + "integrity": "sha1-1uf0v/pmc2CFoHYv06YyaE2rzE4=", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.11.9.tgz", + "integrity": "sha1-JtVWgpRY+dHoH8SJUkk9C6NQeCg=", + "dev": true + } + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/create-hash/download/create-hash-1.2.0.tgz", + "integrity": "sha1-iJB4rxGmN1a8+1m9IhmWvjqe8ZY=", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npm.taobao.org/create-hmac/download/create-hmac-1.1.7.tgz", + "integrity": "sha1-aRcMeLOrlXFHsriwRXLkfq0iQ/8=", + "dev": true, + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-6.0.5.tgz", + "integrity": "sha1-Sl7Hxk364iw6FBJNus3uhG2Ay8Q=", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npm.taobao.org/crypto-browserify/download/crypto-browserify-3.12.0.tgz", + "integrity": "sha1-OWz58xN/A+S45TLFj2mCVOAPgOw=", + "dev": true, + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, + "css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npm.taobao.org/css-color-names/download/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "dev": true + }, + "css-declaration-sorter": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/css-declaration-sorter/download/css-declaration-sorter-4.0.1.tgz", + "integrity": "sha1-wZiUD2OnbX42wecQGLABchBUyyI=", + "dev": true, + "requires": { + "postcss": "^7.0.1", + "timsort": "^0.3.0" + } + }, + "css-loader": { + "version": "3.6.0", + "resolved": "https://registry.npm.taobao.org/css-loader/download/css-loader-3.6.0.tgz", + "integrity": "sha1-Lkssfm4tJ/jI8o9hv/zS5ske9kU=", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "cssesc": "^3.0.0", + "icss-utils": "^4.1.1", + "loader-utils": "^1.2.3", + "normalize-path": "^3.0.0", + "postcss": "^7.0.32", + "postcss-modules-extract-imports": "^2.0.0", + "postcss-modules-local-by-default": "^3.0.2", + "postcss-modules-scope": "^2.2.0", + "postcss-modules-values": "^3.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^2.7.0", + "semver": "^6.3.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz", + "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz", + "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=", + "dev": true + } + } + }, + "css-select": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/css-select/download/css-select-2.1.0.tgz?cache=0&sync_timestamp=1573341911322&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss-select%2Fdownload%2Fcss-select-2.1.0.tgz", + "integrity": "sha1-ajRlM1ZjWTSoG6ymjQJVQyEF2+8=", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npm.taobao.org/css-select-base-adapter/download/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha1-Oy/0lyzDYquIVhUHqVQIoUMhNdc=", + "dev": true + }, + "css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npm.taobao.org/css-tree/download/css-tree-1.0.0-alpha.37.tgz?cache=0&sync_timestamp=1575583846685&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss-tree%2Fdownload%2Fcss-tree-1.0.0-alpha.37.tgz", + "integrity": "sha1-mL69YsTB2flg7DQM+fdSLjBwmiI=", + "dev": true, + "requires": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + } + } + }, + "css-what": { + "version": "3.3.0", + "resolved": "https://registry.npm.taobao.org/css-what/download/css-what-3.3.0.tgz?cache=0&sync_timestamp=1590961613221&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss-what%2Fdownload%2Fcss-what-3.3.0.tgz", + "integrity": "sha1-EP7Glqns4uWRrHctdZqsq6w4zTk=", + "dev": true + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/cssesc/download/cssesc-3.0.0.tgz", + "integrity": "sha1-N3QZGZA7hoVl4cCep0dEXNGJg+4=", + "dev": true + }, + "cssnano": { + "version": "4.1.10", + "resolved": "https://registry.npm.taobao.org/cssnano/download/cssnano-4.1.10.tgz?cache=0&sync_timestamp=1599670118397&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcssnano%2Fdownload%2Fcssnano-4.1.10.tgz", + "integrity": "sha1-CsQfCxPRPUZUh+ERt3jULaYxuLI=", + "dev": true, + "requires": { + "cosmiconfig": "^5.0.0", + "cssnano-preset-default": "^4.0.7", + "is-resolvable": "^1.0.0", + "postcss": "^7.0.0" + } + }, + "cssnano-preset-default": { + "version": "4.0.7", + "resolved": "https://registry.npm.taobao.org/cssnano-preset-default/download/cssnano-preset-default-4.0.7.tgz?cache=0&sync_timestamp=1599670156743&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcssnano-preset-default%2Fdownload%2Fcssnano-preset-default-4.0.7.tgz", + "integrity": "sha1-UexmLM/KD4izltzZZ5zbkxvhf3Y=", + "dev": true, + "requires": { + "css-declaration-sorter": "^4.0.1", + "cssnano-util-raw-cache": "^4.0.1", + "postcss": "^7.0.0", + "postcss-calc": "^7.0.1", + "postcss-colormin": "^4.0.3", + "postcss-convert-values": "^4.0.1", + "postcss-discard-comments": "^4.0.2", + "postcss-discard-duplicates": "^4.0.2", + "postcss-discard-empty": "^4.0.1", + "postcss-discard-overridden": "^4.0.1", + "postcss-merge-longhand": "^4.0.11", + "postcss-merge-rules": "^4.0.3", + "postcss-minify-font-values": "^4.0.2", + "postcss-minify-gradients": "^4.0.2", + "postcss-minify-params": "^4.0.2", + "postcss-minify-selectors": "^4.0.2", + "postcss-normalize-charset": "^4.0.1", + "postcss-normalize-display-values": "^4.0.2", + "postcss-normalize-positions": "^4.0.2", + "postcss-normalize-repeat-style": "^4.0.2", + "postcss-normalize-string": "^4.0.2", + "postcss-normalize-timing-functions": "^4.0.2", + "postcss-normalize-unicode": "^4.0.1", + "postcss-normalize-url": "^4.0.1", + "postcss-normalize-whitespace": "^4.0.2", + "postcss-ordered-values": "^4.1.2", + "postcss-reduce-initial": "^4.0.3", + "postcss-reduce-transforms": "^4.0.2", + "postcss-svgo": "^4.0.2", + "postcss-unique-selectors": "^4.0.1" + } + }, + "cssnano-util-get-arguments": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/cssnano-util-get-arguments/download/cssnano-util-get-arguments-4.0.0.tgz", + "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=", + "dev": true + }, + "cssnano-util-get-match": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/cssnano-util-get-match/download/cssnano-util-get-match-4.0.0.tgz", + "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=", + "dev": true + }, + "cssnano-util-raw-cache": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/cssnano-util-raw-cache/download/cssnano-util-raw-cache-4.0.1.tgz", + "integrity": "sha1-sm1f1fcqEd/np4RvtMZyYPlr8oI=", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "cssnano-util-same-parent": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/cssnano-util-same-parent/download/cssnano-util-same-parent-4.0.1.tgz", + "integrity": "sha1-V0CC+yhZ0ttDOFWDXZqEVuoYu/M=", + "dev": true + }, + "csso": { + "version": "4.0.3", + "resolved": "https://registry.npm.taobao.org/csso/download/csso-4.0.3.tgz?cache=0&sync_timestamp=1585052130344&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcsso%2Fdownload%2Fcsso-4.0.3.tgz", + "integrity": "sha1-DZmF3IUsfMKyys+74QeQFNGo6QM=", + "dev": true, + "requires": { + "css-tree": "1.0.0-alpha.39" + }, + "dependencies": { + "css-tree": { + "version": "1.0.0-alpha.39", + "resolved": "https://registry.npm.taobao.org/css-tree/download/css-tree-1.0.0-alpha.39.tgz?cache=0&sync_timestamp=1575583846685&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss-tree%2Fdownload%2Fcss-tree-1.0.0-alpha.39.tgz", + "integrity": "sha1-K/8//huz93bPfu/ZHuXLp3oUnus=", + "dev": true, + "requires": { + "mdn-data": "2.0.6", + "source-map": "^0.6.1" + } + }, + "mdn-data": { + "version": "2.0.6", + "resolved": "https://registry.npm.taobao.org/mdn-data/download/mdn-data-2.0.6.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmdn-data%2Fdownload%2Fmdn-data-2.0.6.tgz", + "integrity": "sha1-hS3GD8ql2qLoz2yRicRA7T4EKXg=", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + } + } + }, + "cssom": { + "version": "0.4.4", + "resolved": "https://registry.npm.taobao.org/cssom/download/cssom-0.4.4.tgz", + "integrity": "sha1-WmbPk9LQtmHYC/akT7ZfXC5OChA=", + "dev": true + }, + "cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npm.taobao.org/cssstyle/download/cssstyle-2.3.0.tgz", + "integrity": "sha1-/2ZaDdvcMYZLCWR/NBY0Q9kLCFI=", + "dev": true, + "requires": { + "cssom": "~0.3.6" + }, + "dependencies": { + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npm.taobao.org/cssom/download/cssom-0.3.8.tgz", + "integrity": "sha1-nxJ29bK0Y/IRTT8sdSUK+MGjb0o=", + "dev": true + } + } + }, + "cyclist": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/cyclist/download/cyclist-1.0.1.tgz", + "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", + "dev": true + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npm.taobao.org/dashdash/download/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "data-urls": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/data-urls/download/data-urls-1.1.0.tgz", + "integrity": "sha1-Fe4Fgrql4iu1nHcUDaj5x2lju/4=", + "dev": true, + "requires": { + "abab": "^2.0.0", + "whatwg-mimetype": "^2.2.0", + "whatwg-url": "^7.0.0" + } + }, + "de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/de-indent/download/de-indent-1.0.2.tgz", + "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=", + "dev": true + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.1.1.tgz", + "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npm.taobao.org/decode-uri-component/download/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npm.taobao.org/deep-eql/download/deep-eql-3.0.1.tgz", + "integrity": "sha1-38lARACtHI/gI+faHfHBR8S0RN8=", + "dev": true, + "requires": { + "type-detect": "^4.0.0" + } + }, + "deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/deep-equal/download/deep-equal-1.1.1.tgz", + "integrity": "sha1-tcmMlCzv+vfLBR4k4UNKJaLmB2o=", + "dev": true, + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npm.taobao.org/deep-is/download/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "deepmerge": { + "version": "1.5.2", + "resolved": "https://registry.npm.taobao.org/deepmerge/download/deepmerge-1.5.2.tgz?cache=0&sync_timestamp=1572279720382&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdeepmerge%2Fdownload%2Fdeepmerge-1.5.2.tgz", + "integrity": "sha1-EEmdhohEza1P7ghC34x/bwyVp1M=" + }, + "default-gateway": { + "version": "5.0.5", + "resolved": "https://registry.npm.taobao.org/default-gateway/download/default-gateway-5.0.5.tgz", + "integrity": "sha1-T9a9XShV05s0zFpZUFSG6ar8mxA=", + "dev": true, + "requires": { + "execa": "^3.3.0" + }, + "dependencies": { + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-7.0.3.tgz", + "integrity": "sha1-9zqFudXUHQRVUcF34ogtSshXKKY=", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "execa": { + "version": "3.4.0", + "resolved": "https://registry.npm.taobao.org/execa/download/execa-3.4.0.tgz?cache=0&sync_timestamp=1594145085955&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexeca%2Fdownload%2Fexeca-3.4.0.tgz", + "integrity": "sha1-wI7UVQ72XYWPrCaf/IVyRG8364k=", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "p-finally": "^2.0.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npm.taobao.org/get-stream/download/get-stream-5.2.0.tgz?cache=0&sync_timestamp=1597056502934&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-stream%2Fdownload%2Fget-stream-5.2.0.tgz", + "integrity": "sha1-SWaheV7lrOZecGxLe+txJX1uItM=", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/is-stream/download/is-stream-2.0.0.tgz", + "integrity": "sha1-venDJoDW+uBBKdasnZIc54FfeOM=", + "dev": true + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-2.1.0.tgz?cache=0&sync_timestamp=1596095644798&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmimic-fn%2Fdownload%2Fmimic-fn-2.1.0.tgz", + "integrity": "sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs=", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/npm-run-path/download/npm-run-path-4.0.1.tgz?cache=0&sync_timestamp=1577053500910&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnpm-run-path%2Fdownload%2Fnpm-run-path-4.0.1.tgz", + "integrity": "sha1-t+zR5e1T2o43pV4cImnguX7XSOo=", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npm.taobao.org/onetime/download/onetime-5.1.2.tgz?cache=0&sync_timestamp=1597005345612&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fonetime%2Fdownload%2Fonetime-5.1.2.tgz", + "integrity": "sha1-0Oluu1awdHbfHdnEgG5SN5hcpF4=", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "p-finally": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/p-finally/download/p-finally-2.0.1.tgz", + "integrity": "sha1-vW/KqcVZoJa2gIBvTWV7Pw8kBWE=", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/path-key/download/path-key-3.1.1.tgz", + "integrity": "sha1-WB9q3mWMu6ZaDTOA3ndTKVBU83U=", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/shebang-command/download/shebang-command-2.0.0.tgz", + "integrity": "sha1-zNCvT4g1+9wmW4JGGq8MNmY/NOo=", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/shebang-regex/download/shebang-regex-3.0.0.tgz", + "integrity": "sha1-rhbxZE2HPsrYQ7AwexQzYtTEIXI=", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/which/download/which-2.0.2.tgz?cache=0&sync_timestamp=1574116720213&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhich%2Fdownload%2Fwhich-2.0.2.tgz", + "integrity": "sha1-fGqN0KY2oDJ+ELWckobu6T8/UbE=", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/defaults/download/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "requires": { + "clone": "^1.0.2" + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npm.taobao.org/define-properties/download/define-properties-1.1.3.tgz", + "integrity": "sha1-z4jabL7ib+bbcJT2HYcMvYTO6fE=", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-2.0.2.tgz", + "integrity": "sha1-1Flono1lS6d+AqgX+HENcCyxbp0=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "del": { + "version": "4.1.1", + "resolved": "https://registry.npm.taobao.org/del/download/del-4.1.1.tgz", + "integrity": "sha1-no8RciLqRKMf86FWwEm5kFKp8LQ=", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "globby": "^6.1.0", + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" + }, + "dependencies": { + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npm.taobao.org/globby/download/globby-6.1.0.tgz?cache=0&sync_timestamp=1591083783605&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobby%2Fdownload%2Fglobby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz?cache=0&sync_timestamp=1581697613983&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpify%2Fdownload%2Fpify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "p-map": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/p-map/download/p-map-2.1.0.tgz", + "integrity": "sha1-MQko/u+cnsxltosXaTAYpmXOoXU=", + "dev": true + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/depd/download/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "des.js": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/des.js/download/des.js-1.0.1.tgz", + "integrity": "sha1-U4IULhvcU/hdhtU+X0qn3rkeCEM=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/destroy/download/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "detect-node": { + "version": "2.0.4", + "resolved": "https://registry.npm.taobao.org/detect-node/download/detect-node-2.0.4.tgz", + "integrity": "sha1-AU7o+PZpxcWAI9pkuBecCDooxGw=", + "dev": true + }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npm.taobao.org/diff/download/diff-3.5.0.tgz?cache=0&sync_timestamp=1578890967183&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdiff%2Fdownload%2Fdiff-3.5.0.tgz", + "integrity": "sha1-gAwN0eCov7yVg1wgKtIg/jF+WhI=", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npm.taobao.org/diffie-hellman/download/diffie-hellman-5.0.3.tgz", + "integrity": "sha1-QOjumPVaIUlgcUaSHGPhrl89KHU=", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.11.9.tgz", + "integrity": "sha1-JtVWgpRY+dHoH8SJUkk9C6NQeCg=", + "dev": true + } + } + }, + "dir-glob": { + "version": "2.2.2", + "resolved": "https://registry.npm.taobao.org/dir-glob/download/dir-glob-2.2.2.tgz", + "integrity": "sha1-+gnwaUFTyJGLGLoN6vrpR2n8UMQ=", + "dev": true, + "requires": { + "path-type": "^3.0.0" + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/dns-equal/download/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true + }, + "dns-packet": { + "version": "1.3.1", + "resolved": "https://registry.npm.taobao.org/dns-packet/download/dns-packet-1.3.1.tgz", + "integrity": "sha1-EqpCaYEHW+UAuRDu3NC0fdfe2lo=", + "dev": true, + "requires": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } + }, + "dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/dns-txt/download/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dev": true, + "requires": { + "buffer-indexof": "^1.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/doctrine/download/doctrine-3.0.0.tgz", + "integrity": "sha1-rd6+rXKmV023g2OdyHoSF3OXOWE=", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npm.taobao.org/dom-converter/download/dom-converter-0.2.0.tgz", + "integrity": "sha1-ZyGp2u4uKTaClVtq/kFncWJ7t2g=", + "dev": true, + "requires": { + "utila": "~0.4" + } + }, + "dom-event-types": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/dom-event-types/download/dom-event-types-1.0.0.tgz", + "integrity": "sha1-WDCgop4b+Df+UKcM2ApZcjKBPK4=", + "dev": true + }, + "dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npm.taobao.org/dom-serializer/download/dom-serializer-0.2.2.tgz", + "integrity": "sha1-GvuB9TNxcXXUeGVd68XjMtn5u1E=", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/domelementtype/download/domelementtype-2.0.1.tgz", + "integrity": "sha1-H4vf6R9aeAYydOgDtL3O326U+U0=", + "dev": true + } + } + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/domain-browser/download/domain-browser-1.2.0.tgz?cache=0&sync_timestamp=1599393068432&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdomain-browser%2Fdownload%2Fdomain-browser-1.2.0.tgz", + "integrity": "sha1-PTH1AZGmdJ3RN1p/Ui6CPULlTto=", + "dev": true + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npm.taobao.org/domelementtype/download/domelementtype-1.3.1.tgz", + "integrity": "sha1-0EjESzew0Qp/Kj1f7j9DM9eQSB8=", + "dev": true + }, + "domexception": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/domexception/download/domexception-1.0.1.tgz", + "integrity": "sha1-k3RCZEymoxJh7zbj7Gd/6AVYLJA=", + "dev": true, + "requires": { + "webidl-conversions": "^4.0.2" + } + }, + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npm.taobao.org/domhandler/download/domhandler-2.4.2.tgz?cache=0&sync_timestamp=1564708909977&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdomhandler%2Fdownload%2Fdomhandler-2.4.2.tgz", + "integrity": "sha1-iAUJfpM9ZehVRvcm1g9euItE+AM=", + "dev": true, + "requires": { + "domelementtype": "1" + } + }, + "domready": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/domready/-/domready-1.0.8.tgz", + "integrity": "sha1-kfJS5Ze2Wvd+dFriTdAYXV4m1Yw=", + "dev": true + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npm.taobao.org/domutils/download/domutils-1.7.0.tgz?cache=0&sync_timestamp=1597680509643&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdomutils%2Fdownload%2Fdomutils-1.7.0.tgz", + "integrity": "sha1-Vuo0HoNOBuZ0ivehyyXaZ+qfjCo=", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npm.taobao.org/dot-prop/download/dot-prop-5.3.0.tgz", + "integrity": "sha1-kMzOcIzZzYLMTcjD3dmr3VWyDog=", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } + }, + "dotenv": { + "version": "8.2.0", + "resolved": "https://registry.npm.taobao.org/dotenv/download/dotenv-8.2.0.tgz?cache=0&sync_timestamp=1571190696472&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdotenv%2Fdownload%2Fdotenv-8.2.0.tgz", + "integrity": "sha1-l+YZJZradQ7qPk6j4mvO6lQksWo=", + "dev": true + }, + "dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npm.taobao.org/dotenv-expand/download/dotenv-expand-5.1.0.tgz", + "integrity": "sha1-P7rwIL/XlIhAcuomsel5HUWmKfA=", + "dev": true + }, + "duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npm.taobao.org/duplexer/download/duplexer-0.1.2.tgz", + "integrity": "sha1-Or5DrvODX4rgd9E23c4PJ2sEAOY=", + "dev": true + }, + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npm.taobao.org/duplexify/download/duplexify-3.7.1.tgz", + "integrity": "sha1-Kk31MX9sz9kfhtb9JdjYoQO4gwk=", + "dev": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "easy-stack": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/easy-stack/download/easy-stack-1.0.0.tgz", + "integrity": "sha1-EskbMIWjfwuqM26UhurEv5Tj54g=", + "dev": true + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npm.taobao.org/ecc-jsbn/download/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "editorconfig": { + "version": "0.15.3", + "resolved": "https://registry.npm.taobao.org/editorconfig/download/editorconfig-0.15.3.tgz", + "integrity": "sha1-vvhMTnX7jcsM5c7o79UcFZmb78U=", + "dev": true, + "requires": { + "commander": "^2.19.0", + "lru-cache": "^4.1.5", + "semver": "^5.6.0", + "sigmund": "^1.0.1" + }, + "dependencies": { + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npm.taobao.org/lru-cache/download/lru-cache-4.1.5.tgz?cache=0&sync_timestamp=1594427582110&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flru-cache%2Fdownload%2Flru-cache-4.1.5.tgz", + "integrity": "sha1-i75Q6oW+1ZvJ4z3KuCNe6bz0Q80=", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + } + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/ee-first/download/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "ejs": { + "version": "2.7.4", + "resolved": "https://registry.npm.taobao.org/ejs/download/ejs-2.7.4.tgz?cache=0&sync_timestamp=1597678506855&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fejs%2Fdownload%2Fejs-2.7.4.tgz", + "integrity": "sha1-SGYSh1c9zFPjZsehrlLDoSDuybo=", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.564", + "resolved": "https://registry.npm.taobao.org/electron-to-chromium/download/electron-to-chromium-1.3.564.tgz", + "integrity": "sha1-6cMZrkN7Pri78+O65L6tWiGUWWE=", + "dev": true + }, + "element-ui": { + "version": "2.13.2", + "resolved": "https://registry.npmjs.org/element-ui/-/element-ui-2.13.2.tgz", + "integrity": "sha512-r761DRPssMPKDiJZWFlG+4e4vr0cRG/atKr3Eqr8Xi0tQMNbtmYU1QXvFnKiFPFFGkgJ6zS6ASkG+sellcoHlQ==", + "requires": { + "async-validator": "~1.8.1", + "babel-helper-vue-jsx-merge-props": "^2.0.0", + "deepmerge": "^1.2.0", + "normalize-wheel": "^1.0.1", + "resize-observer-polyfill": "^1.5.0", + "throttle-debounce": "^1.0.1" + } + }, + "elliptic": { + "version": "6.5.3", + "resolved": "https://registry.npm.taobao.org/elliptic/download/elliptic-6.5.3.tgz", + "integrity": "sha1-y1nrLv2vc6C9eMzXAVpirW4Pk9Y=", + "dev": true, + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.11.9.tgz", + "integrity": "sha1-JtVWgpRY+dHoH8SJUkk9C6NQeCg=", + "dev": true + } + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-8.0.0.tgz", + "integrity": "sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc=", + "dev": true + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/emojis-list/download/emojis-list-3.0.0.tgz", + "integrity": "sha1-VXBmIEatKeLpFucariYKvf9Pang=", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/encodeurl/download/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npm.taobao.org/end-of-stream/download/end-of-stream-1.4.4.tgz?cache=0&sync_timestamp=1569416367473&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fend-of-stream%2Fdownload%2Fend-of-stream-1.4.4.tgz", + "integrity": "sha1-WuZKX0UFe682JuwU2gyl5LJDHrA=", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "enhanced-resolve": { + "version": "4.3.0", + "resolved": "https://registry.npm.taobao.org/enhanced-resolve/download/enhanced-resolve-4.3.0.tgz?cache=0&sync_timestamp=1594972208431&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fenhanced-resolve%2Fdownload%2Fenhanced-resolve-4.3.0.tgz", + "integrity": "sha1-O4BvO/r8HsfeaVUe+TzKRsFwQSY=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + }, + "dependencies": { + "memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npm.taobao.org/memory-fs/download/memory-fs-0.5.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmemory-fs%2Fdownload%2Fmemory-fs-0.5.0.tgz", + "integrity": "sha1-MkwBKIuIZSlm0WHbd4OHIIRajjw=", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + } + } + }, + "entities": { + "version": "2.0.3", + "resolved": "https://registry.npm.taobao.org/entities/download/entities-2.0.3.tgz", + "integrity": "sha1-XEh+V0Krk8Fau12iJ1m4WQ7AO38=", + "dev": true + }, + "errno": { + "version": "0.1.7", + "resolved": "https://registry.npm.taobao.org/errno/download/errno-0.1.7.tgz", + "integrity": "sha1-RoTXF3mtOa8Xfj8AeZb3xnyFJhg=", + "dev": true, + "requires": { + "prr": "~1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npm.taobao.org/error-ex/download/error-ex-1.3.2.tgz", + "integrity": "sha1-tKxAZIEH/c3PriQvQovqihTU8b8=", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "error-stack-parser": { + "version": "2.0.6", + "resolved": "https://registry.npm.taobao.org/error-stack-parser/download/error-stack-parser-2.0.6.tgz?cache=0&sync_timestamp=1578288503034&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ferror-stack-parser%2Fdownload%2Ferror-stack-parser-2.0.6.tgz", + "integrity": "sha1-WpmnB716TFinl5AtSNgoA+3mqtg=", + "dev": true, + "requires": { + "stackframe": "^1.1.1" + } + }, + "es-abstract": { + "version": "1.17.6", + "resolved": "https://registry.npm.taobao.org/es-abstract/download/es-abstract-1.17.6.tgz?cache=0&sync_timestamp=1597446082160&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fes-abstract%2Fdownload%2Fes-abstract-1.17.6.tgz", + "integrity": "sha1-kUIHFweFeyysx7iey2cDFsPi1So=", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.0", + "is-regex": "^1.1.0", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npm.taobao.org/es-to-primitive/download/es-to-primitive-1.2.1.tgz", + "integrity": "sha1-5VzUyc3BiLzvsDs2bHNjI/xciYo=", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escalade": { + "version": "3.0.2", + "resolved": "https://registry.npm.taobao.org/escalade/download/escalade-3.0.2.tgz?cache=0&sync_timestamp=1594742958135&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fescalade%2Fdownload%2Fescalade-3.0.2.tgz", + "integrity": "sha1-algNcO24eIDyK0yR0NVgeN9pYsQ=", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/escape-html/download/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npm.taobao.org/escodegen/download/escodegen-1.14.3.tgz?cache=0&sync_timestamp=1596669832613&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fescodegen%2Fdownload%2Fescodegen-1.14.3.tgz", + "integrity": "sha1-TnuB+6YVgdyXWC7XjKt/Do1j9QM=", + "dev": true, + "requires": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true, + "optional": true + } + } + }, + "eslint": { + "version": "6.8.0", + "resolved": "https://registry.npm.taobao.org/eslint/download/eslint-6.8.0.tgz?cache=0&sync_timestamp=1598991576538&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint%2Fdownload%2Feslint-6.8.0.tgz", + "integrity": "sha1-YiYtZylzn5J1cjgkMC+yJ8jJP/s=", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.10.0", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^1.4.3", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.1.2", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "inquirer": "^7.0.0", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.14", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.3", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "semver": "^6.1.2", + "strip-ansi": "^5.2.0", + "strip-json-comments": "^3.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "eslint-scope": { + "version": "5.1.0", + "resolved": "https://registry.npm.taobao.org/eslint-scope/download/eslint-scope-5.1.0.tgz?cache=0&sync_timestamp=1591269986906&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-scope%2Fdownload%2Feslint-scope-5.1.0.tgz", + "integrity": "sha1-0Plx3+WcaeDK2mhLI9Sdv4JgDOU=", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npm.taobao.org/globals/download/globals-12.4.0.tgz", + "integrity": "sha1-oYgTV2pBsAokqX5/gVkYwuGZJfg=", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "import-fresh": { + "version": "3.2.1", + "resolved": "https://registry.npm.taobao.org/import-fresh/download/import-fresh-3.2.1.tgz", + "integrity": "sha1-Yz/2GFBueTr1rJG/SLcmd+FcvmY=", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/resolve-from/download/resolve-from-4.0.0.tgz", + "integrity": "sha1-SrzYUq0y3Xuqv+m0DgCjbbXzkuY=", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz", + "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz", + "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-3.1.1.tgz?cache=0&sync_timestamp=1594567532500&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-json-comments%2Fdownload%2Fstrip-json-comments-3.1.1.tgz", + "integrity": "sha1-MfEoGzgyYwQ0gxwxDAHMzajL4AY=", + "dev": true + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npm.taobao.org/type-fest/download/type-fest-0.8.1.tgz", + "integrity": "sha1-CeJJ696FHTseSNJ8EFREZn8XuD0=", + "dev": true + } + } + }, + "eslint-loader": { + "version": "2.2.1", + "resolved": "https://registry.npm.taobao.org/eslint-loader/download/eslint-loader-2.2.1.tgz", + "integrity": "sha1-KLnBLaVAV68IReKmEScBova/gzc=", + "dev": true, + "requires": { + "loader-fs-cache": "^1.0.0", + "loader-utils": "^1.0.2", + "object-assign": "^4.0.1", + "object-hash": "^1.1.4", + "rimraf": "^2.6.1" + } + }, + "eslint-plugin-vue": { + "version": "6.2.2", + "resolved": "https://registry.npm.taobao.org/eslint-plugin-vue/download/eslint-plugin-vue-6.2.2.tgz?cache=0&sync_timestamp=1598607180295&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-plugin-vue%2Fdownload%2Feslint-plugin-vue-6.2.2.tgz", + "integrity": "sha1-J/7NmjokeJsPER7N1UCp5WGY4P4=", + "dev": true, + "requires": { + "natural-compare": "^1.4.0", + "semver": "^5.6.0", + "vue-eslint-parser": "^7.0.0" + } + }, + "eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npm.taobao.org/eslint-scope/download/eslint-scope-4.0.3.tgz?cache=0&sync_timestamp=1591269986906&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-scope%2Fdownload%2Feslint-scope-4.0.3.tgz", + "integrity": "sha1-ygODMxD2iJoyZHgaqC5j65z+eEg=", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "1.4.3", + "resolved": "https://registry.npm.taobao.org/eslint-utils/download/eslint-utils-1.4.3.tgz?cache=0&sync_timestamp=1592222145079&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-utils%2Fdownload%2Feslint-utils-1.4.3.tgz", + "integrity": "sha1-dP7HxU0Hdrb2fgJRBAtYBlZOmB8=", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npm.taobao.org/eslint-visitor-keys/download/eslint-visitor-keys-1.3.0.tgz?cache=0&sync_timestamp=1597435068105&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-visitor-keys%2Fdownload%2Feslint-visitor-keys-1.3.0.tgz", + "integrity": "sha1-MOvR73wv3/AcOk8VEESvJfqwUj4=", + "dev": true + }, + "espree": { + "version": "6.2.1", + "resolved": "https://registry.npm.taobao.org/espree/download/espree-6.2.1.tgz?cache=0&sync_timestamp=1598129987642&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fespree%2Fdownload%2Fespree-6.2.1.tgz", + "integrity": "sha1-d/xy4f10SiBSwg84pbV1gy6Cc0o=", + "dev": true, + "requires": { + "acorn": "^7.1.1", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "acorn": { + "version": "7.4.0", + "resolved": "https://registry.npm.taobao.org/acorn/download/acorn-7.4.0.tgz?cache=0&sync_timestamp=1597235774928&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn%2Fdownload%2Facorn-7.4.0.tgz", + "integrity": "sha1-4a1IbmxUUBY0xsOXxcEh2qODYHw=", + "dev": true + } + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/esprima/download/esprima-4.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fesprima%2Fdownload%2Fesprima-4.0.1.tgz", + "integrity": "sha1-E7BM2z5sXRnfkatph6hpVhmwqnE=", + "dev": true + }, + "esquery": { + "version": "1.3.1", + "resolved": "https://registry.npm.taobao.org/esquery/download/esquery-1.3.1.tgz?cache=0&sync_timestamp=1587061286348&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fesquery%2Fdownload%2Fesquery-1.3.1.tgz", + "integrity": "sha1-t4tYKKqOIU4p+3TE1bdS4cAz2lc=", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npm.taobao.org/estraverse/download/estraverse-5.2.0.tgz?cache=0&sync_timestamp=1596642998635&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Festraverse%2Fdownload%2Festraverse-5.2.0.tgz", + "integrity": "sha1-MH30JUfmzHMk088DwVXVzbjFOIA=", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npm.taobao.org/esrecurse/download/esrecurse-4.3.0.tgz?cache=0&sync_timestamp=1598898255610&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fesrecurse%2Fdownload%2Fesrecurse-4.3.0.tgz", + "integrity": "sha1-eteWTWeauyi+5yzsY3WLHF0smSE=", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npm.taobao.org/estraverse/download/estraverse-5.2.0.tgz?cache=0&sync_timestamp=1596642998635&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Festraverse%2Fdownload%2Festraverse-5.2.0.tgz", + "integrity": "sha1-MH30JUfmzHMk088DwVXVzbjFOIA=", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npm.taobao.org/estraverse/download/estraverse-4.3.0.tgz?cache=0&sync_timestamp=1596642998635&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Festraverse%2Fdownload%2Festraverse-4.3.0.tgz", + "integrity": "sha1-OYrT88WiSUi+dyXoPRGn3ijNvR0=", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npm.taobao.org/esutils/download/esutils-2.0.3.tgz", + "integrity": "sha1-dNLrTeC42hKTcRkQ1Qd1ubcQ72Q=", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npm.taobao.org/etag/download/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "event-pubsub": { + "version": "4.3.0", + "resolved": "https://registry.npm.taobao.org/event-pubsub/download/event-pubsub-4.3.0.tgz", + "integrity": "sha1-9o2Ba8KfHsAsU53FjI3UDOcss24=", + "dev": true + }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npm.taobao.org/eventemitter3/download/eventemitter3-4.0.7.tgz?cache=0&sync_timestamp=1598517728928&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feventemitter3%2Fdownload%2Feventemitter3-4.0.7.tgz", + "integrity": "sha1-Lem2j2Uo1WRO9cWVJqG0oHMGFp8=", + "dev": true + }, + "events": { + "version": "3.2.0", + "resolved": "https://registry.npm.taobao.org/events/download/events-3.2.0.tgz?cache=0&sync_timestamp=1595422577337&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fevents%2Fdownload%2Fevents-3.2.0.tgz", + "integrity": "sha1-k7h8GPjvzUICpGGuxN/AVWtjk3k=", + "dev": true + }, + "eventsource": { + "version": "1.0.7", + "resolved": "https://registry.npm.taobao.org/eventsource/download/eventsource-1.0.7.tgz", + "integrity": "sha1-j7xyyT/NNAiAkLwKTmT0tc7m2NA=", + "dev": true, + "requires": { + "original": "^1.0.0" + } + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/evp_bytestokey/download/evp_bytestokey-1.0.3.tgz", + "integrity": "sha1-f8vbGY3HGVlDLv4ThCaE4FJaywI=", + "dev": true, + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/execa/download/execa-1.0.0.tgz?cache=0&sync_timestamp=1594145085955&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexeca%2Fdownload%2Fexeca-1.0.0.tgz", + "integrity": "sha1-xiNqW7TfbW8V6I5/AXeYIWdJ3dg=", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npm.taobao.org/expand-brackets/download/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npm.taobao.org/express/download/express-4.17.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexpress%2Fdownload%2Fexpress-4.17.1.tgz", + "integrity": "sha1-RJH8OGBc9R+GKdOcK10Cb5ikwTQ=", + "dev": true, + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npm.taobao.org/qs/download/qs-6.7.0.tgz", + "integrity": "sha1-QdwaAV49WB8WIXdr4xr7KHapsbw=", + "dev": true + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npm.taobao.org/extend/download/extend-3.0.2.tgz", + "integrity": "sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo=", + "dev": true + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/is-extendable/download/is-extendable-1.0.1.tgz", + "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/external-editor/download/external-editor-3.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexternal-editor%2Fdownload%2Fexternal-editor-3.1.0.tgz", + "integrity": "sha1-ywP3QL764D6k0oPK7SdBqD8zVJU=", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npm.taobao.org/extglob/download/extglob-2.0.4.tgz", + "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npm.taobao.org/extsprintf/download/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-3.1.3.tgz?cache=0&sync_timestamp=1591599697571&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-deep-equal%2Fdownload%2Ffast-deep-equal-3.1.3.tgz", + "integrity": "sha1-On1WtVnWy8PrUSMlJE5hmmXGxSU=", + "dev": true + }, + "fast-glob": { + "version": "2.2.7", + "resolved": "https://registry.npm.taobao.org/fast-glob/download/fast-glob-2.2.7.tgz?cache=0&sync_timestamp=1592291968616&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-glob%2Fdownload%2Ffast-glob-2.2.7.tgz", + "integrity": "sha1-aVOFfDr6R1//ku5gFdUtpwpM050=", + "dev": true, + "requires": { + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.1.2", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.3", + "micromatch": "^3.1.10" + }, + "dependencies": { + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/glob-parent/download/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + } + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.1.0.tgz?cache=0&sync_timestamp=1576340291001&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-json-stable-stringify%2Fdownload%2Ffast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha1-h0v2nG9ATCtdmcSBNBOZ/VWJJjM=", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npm.taobao.org/fast-levenshtein/download/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fastq": { + "version": "1.8.0", + "resolved": "https://registry.npm.taobao.org/fastq/download/fastq-1.8.0.tgz?cache=0&sync_timestamp=1589280329638&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffastq%2Fdownload%2Ffastq-1.8.0.tgz", + "integrity": "sha1-VQ4fn1m7xl/hhctqm02VNXEH9IE=", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npm.taobao.org/faye-websocket/download/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "figgy-pudding": { + "version": "3.5.2", + "resolved": "https://registry.npm.taobao.org/figgy-pudding/download/figgy-pudding-3.5.2.tgz", + "integrity": "sha1-tO7oFIq7Adzx0aw0Nn1Z4S+mHW4=", + "dev": true + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npm.taobao.org/figures/download/figures-3.2.0.tgz?cache=0&sync_timestamp=1581865349068&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffigures%2Fdownload%2Ffigures-3.2.0.tgz", + "integrity": "sha1-YlwYvSk8YE3EqN2y/r8MiDQXRq8=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npm.taobao.org/file-entry-cache/download/file-entry-cache-5.0.1.tgz", + "integrity": "sha1-yg9u+m3T1WEzP7FFFQZcL6/fQ5w=", + "dev": true, + "requires": { + "flat-cache": "^2.0.1" + } + }, + "file-loader": { + "version": "4.3.0", + "resolved": "https://registry.npm.taobao.org/file-loader/download/file-loader-4.3.0.tgz?cache=0&sync_timestamp=1598876102788&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffile-loader%2Fdownload%2Ffile-loader-4.3.0.tgz", + "integrity": "sha1-eA8ED3KbPRgBnyBgX3I+hEuKWK8=", + "dev": true, + "requires": { + "loader-utils": "^1.2.3", + "schema-utils": "^2.5.0" + } + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/file-uri-to-path/download/file-uri-to-path-1.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffile-uri-to-path%2Fdownload%2Ffile-uri-to-path-1.0.0.tgz", + "integrity": "sha1-VTp7hEb/b2hDWcRF8eN6BdrMM90=", + "dev": true, + "optional": true + }, + "filesize": { + "version": "3.6.1", + "resolved": "https://registry.npm.taobao.org/filesize/download/filesize-3.6.1.tgz?cache=0&sync_timestamp=1582340569604&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffilesize%2Fdownload%2Ffilesize-3.6.1.tgz", + "integrity": "sha1-CQuz7gG2+AGoqL6Z0xcQs0Irsxc=", + "dev": true + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/fill-range/download/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/finalhandler/download/finalhandler-1.1.2.tgz", + "integrity": "sha1-t+fQAP/RGTjQ/bBTUG9uur6fWH0=", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-2.1.0.tgz", + "integrity": "sha1-jQ+UzRP+Q8bHwmGg2GEVypGMBfc=", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-3.0.0.tgz?cache=0&sync_timestamp=1597169842138&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-up%2Fdownload%2Ffind-up-3.0.0.tgz", + "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "flat": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/flat/download/flat-4.1.0.tgz", + "integrity": "sha1-CQvsiwXjnLowl0fx1YjwTbr5jbI=", + "dev": true, + "requires": { + "is-buffer": "~2.0.3" + }, + "dependencies": { + "is-buffer": { + "version": "2.0.4", + "resolved": "https://registry.npm.taobao.org/is-buffer/download/is-buffer-2.0.4.tgz?cache=0&sync_timestamp=1588707106955&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-buffer%2Fdownload%2Fis-buffer-2.0.4.tgz", + "integrity": "sha1-PlcvI8hBGlz9lVfISeNmXgspBiM=", + "dev": true + } + } + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/flat-cache/download/flat-cache-2.0.1.tgz", + "integrity": "sha1-XSltbwS9pEpGMKMBQTvbwuwIXsA=", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + }, + "dependencies": { + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npm.taobao.org/rimraf/download/rimraf-2.6.3.tgz", + "integrity": "sha1-stEE/g2Psnz54KHNqCYt04M8bKs=", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "flatted": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/flatted/download/flatted-2.0.2.tgz", + "integrity": "sha1-RXWyHivO50NKqb5mL0t7X5wrUTg=", + "dev": true + }, + "flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/flush-write-stream/download/flush-write-stream-1.1.1.tgz", + "integrity": "sha1-jdfYc6G6vCB9lOrQwuDkQnbr8ug=", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "follow-redirects": { + "version": "1.13.0", + "resolved": "https://registry.npm.taobao.org/follow-redirects/download/follow-redirects-1.13.0.tgz?cache=0&sync_timestamp=1597057976909&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffollow-redirects%2Fdownload%2Ffollow-redirects-1.13.0.tgz", + "integrity": "sha1-tC6Nk6Kn7qXtiGM2dtZZe8jjhNs=", + "dev": true + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/for-in/download/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/forever-agent/download/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npm.taobao.org/form-data/download/form-data-2.3.3.tgz", + "integrity": "sha1-3M5SwF9kTymManq5Nr1yTO/786Y=", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npm.taobao.org/forwarded/download/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npm.taobao.org/fragment-cache/download/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npm.taobao.org/fresh/download/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npm.taobao.org/from2/download/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npm.taobao.org/fs-extra/download/fs-extra-7.0.1.tgz", + "integrity": "sha1-TxicRKoSO4lfcigE9V6iPq3DSOk=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/fs-minipass/download/fs-minipass-2.1.0.tgz?cache=0&sync_timestamp=1579628575109&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffs-minipass%2Fdownload%2Ffs-minipass-2.1.0.tgz", + "integrity": "sha1-f1A2/b8SxjwWkZDL5BmchSJx+fs=", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npm.taobao.org/fs-write-stream-atomic/download/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/fs.realpath/download/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-2.1.3.tgz?cache=0&sync_timestamp=1588787369955&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffsevents%2Fdownload%2Ffsevents-2.1.3.tgz", + "integrity": "sha1-+3OHA66NL5/pAMM4Nt3r7ouX8j4=", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz", + "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/functional-red-black-tree/download/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "gensync": { + "version": "1.0.0-beta.1", + "resolved": "https://registry.npm.taobao.org/gensync/download/gensync-1.0.0-beta.1.tgz", + "integrity": "sha1-WPQ2H/mH5f9uHnohCCeqNx6qwmk=", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npm.taobao.org/get-caller-file/download/get-caller-file-2.0.5.tgz", + "integrity": "sha1-T5RBKoLbMvNuOwuXQfipf+sDH34=", + "dev": true + }, + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/get-func-name/download/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "dev": true + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/get-stream/download/get-stream-4.1.0.tgz?cache=0&sync_timestamp=1597056502934&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-stream%2Fdownload%2Fget-stream-4.1.0.tgz", + "integrity": "sha1-wbJVV189wh1Zv8ec09K0axw6VLU=", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npm.taobao.org/get-value/download/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npm.taobao.org/getpass/download/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npm.taobao.org/glob/download/glob-7.1.6.tgz?cache=0&sync_timestamp=1573078121947&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglob%2Fdownload%2Fglob-7.1.6.tgz", + "integrity": "sha1-FB8zuBp8JJLhJVlDB0gMRmeSeKY=", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npm.taobao.org/glob-parent/download/glob-parent-5.1.1.tgz", + "integrity": "sha1-tsHvQXxOVmPqSY8cRa+saRa7wik=", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "glob-to-regexp": { + "version": "0.3.0", + "resolved": "https://registry.npm.taobao.org/glob-to-regexp/download/glob-to-regexp-0.3.0.tgz", + "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", + "dev": true + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npm.taobao.org/globals/download/globals-11.12.0.tgz", + "integrity": "sha1-q4eVM4hooLq9hSV1gBjCp+uVxC4=", + "dev": true + }, + "globby": { + "version": "9.2.0", + "resolved": "https://registry.npm.taobao.org/globby/download/globby-9.2.0.tgz?cache=0&sync_timestamp=1591083783605&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobby%2Fdownload%2Fglobby-9.2.0.tgz", + "integrity": "sha1-/QKacGxwPSm90XD0tts6P3p8tj0=", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "array-union": "^1.0.2", + "dir-glob": "^2.2.2", + "fast-glob": "^2.2.6", + "glob": "^7.1.3", + "ignore": "^4.0.3", + "pify": "^4.0.1", + "slash": "^2.0.0" + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.2.4.tgz", + "integrity": "sha1-Ila94U02MpWMRl68ltxGfKB6Kfs=", + "dev": true + }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npm.taobao.org/growl/download/growl-1.10.5.tgz", + "integrity": "sha1-8nNdwig2dPpnR4sQGBBZNVw2nl4=", + "dev": true + }, + "gzip-size": { + "version": "5.1.1", + "resolved": "https://registry.npm.taobao.org/gzip-size/download/gzip-size-5.1.1.tgz", + "integrity": "sha1-y5vuaS+HwGErIyhAqHOQTkwTUnQ=", + "dev": true, + "requires": { + "duplexer": "^0.1.1", + "pify": "^4.0.1" + } + }, + "handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/handle-thing/download/handle-thing-2.0.1.tgz", + "integrity": "sha1-hX95zjWVgMNA1DCBzGSJcNC7I04=", + "dev": true + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/har-schema/download/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/har-validator/download/har-validator-5.1.5.tgz?cache=0&sync_timestamp=1596082584903&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhar-validator%2Fdownload%2Fhar-validator-5.1.5.tgz", + "integrity": "sha1-HwgDufjLIMD6E4It8ezds2veHv0=", + "dev": true, + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/has/download/has-1.0.3.tgz", + "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/has-ansi/download/has-ansi-2.0.0.tgz?cache=0&sync_timestamp=1568144533484&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhas-ansi%2Fdownload%2Fhas-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz?cache=0&sync_timestamp=1570188663907&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + } + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/has-symbols/download/has-symbols-1.0.1.tgz?cache=0&sync_timestamp=1573950719586&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhas-symbols%2Fdownload%2Fhas-symbols-1.0.1.tgz", + "integrity": "sha1-n1IUdYpEGWxAbZvXbOv4HsLdMeg=", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/has-value/download/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/has-values/download/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/hash-base/download/hash-base-3.1.0.tgz", + "integrity": "sha1-VcOB2eBuHSmXqIO0o/3f5/DTrzM=", + "dev": true, + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.6.0.tgz?cache=0&sync_timestamp=1581624324274&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freadable-stream%2Fdownload%2Freadable-stream-3.6.0.tgz", + "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.2.1.tgz", + "integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY=", + "dev": true + } + } + }, + "hash-sum": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/hash-sum/download/hash-sum-2.0.0.tgz", + "integrity": "sha1-gdAbtd6OpKIUrV1urRtSNGCwtFo=", + "dev": true + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npm.taobao.org/hash.js/download/hash.js-1.1.7.tgz", + "integrity": "sha1-C6vKU46NTuSg+JiNaIZlN6ADz0I=", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/he/download/he-1.2.0.tgz", + "integrity": "sha1-hK5l+n6vsWX922FWauFLrwVmTw8=", + "dev": true + }, + "hex-color-regex": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/hex-color-regex/download/hex-color-regex-1.1.0.tgz", + "integrity": "sha1-TAb8y0YC/iYCs8k9+C1+fb8aio4=", + "dev": true + }, + "highlight.js": { + "version": "9.18.3", + "resolved": "https://registry.npm.taobao.org/highlight.js/download/highlight.js-9.18.3.tgz", + "integrity": "sha1-oaCiAo1eMUniOA+Khl7oUWcD1jQ=", + "dev": true + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/hmac-drbg/download/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "hoopy": { + "version": "0.1.4", + "resolved": "https://registry.npm.taobao.org/hoopy/download/hoopy-0.1.4.tgz", + "integrity": "sha1-YJIH1mEQADOpqUAq096mdzgcGx0=", + "dev": true + }, + "hosted-git-info": { + "version": "2.8.8", + "resolved": "https://registry.npm.taobao.org/hosted-git-info/download/hosted-git-info-2.8.8.tgz?cache=0&sync_timestamp=1594427993800&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhosted-git-info%2Fdownload%2Fhosted-git-info-2.8.8.tgz", + "integrity": "sha1-dTm9S8Hg4KiVgVouAmJCCxKFhIg=", + "dev": true + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npm.taobao.org/hpack.js/download/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/hsl-regex/download/hsl-regex-1.0.0.tgz", + "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", + "dev": true + }, + "hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/hsla-regex/download/hsla-regex-1.0.0.tgz", + "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", + "dev": true + }, + "html-comment-regex": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/html-comment-regex/download/html-comment-regex-1.1.2.tgz", + "integrity": "sha1-l9RoiutcgYhqNk+qDK0d2hTUM6c=", + "dev": true + }, + "html-encoding-sniffer": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/html-encoding-sniffer/download/html-encoding-sniffer-1.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhtml-encoding-sniffer%2Fdownload%2Fhtml-encoding-sniffer-1.0.2.tgz", + "integrity": "sha1-5w2EuU2lOqN14R/jo1G+ZkLKRvg=", + "dev": true, + "requires": { + "whatwg-encoding": "^1.0.1" + } + }, + "html-entities": { + "version": "1.3.1", + "resolved": "https://registry.npm.taobao.org/html-entities/download/html-entities-1.3.1.tgz", + "integrity": "sha1-+5oaS1sUxdq6gtPjTGrk/nAaDkQ=", + "dev": true + }, + "html-minifier": { + "version": "3.5.21", + "resolved": "https://registry.npm.taobao.org/html-minifier/download/html-minifier-3.5.21.tgz", + "integrity": "sha1-0AQOBUcw41TbAIRjWTGUAVIS0gw=", + "dev": true, + "requires": { + "camel-case": "3.0.x", + "clean-css": "4.2.x", + "commander": "2.17.x", + "he": "1.2.x", + "param-case": "2.1.x", + "relateurl": "0.2.x", + "uglify-js": "3.4.x" + }, + "dependencies": { + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npm.taobao.org/commander/download/commander-2.17.1.tgz?cache=0&sync_timestamp=1598576116597&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-2.17.1.tgz", + "integrity": "sha1-vXerfebelCBc6sxy8XFtKfIKd78=", + "dev": true + } + } + }, + "html-tags": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/html-tags/download/html-tags-3.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhtml-tags%2Fdownload%2Fhtml-tags-3.1.0.tgz", + "integrity": "sha1-e15vfmZen7QfMAB+2eDUHpf7IUA=", + "dev": true + }, + "html-webpack-plugin": { + "version": "3.2.0", + "resolved": "https://registry.npm.taobao.org/html-webpack-plugin/download/html-webpack-plugin-3.2.0.tgz", + "integrity": "sha1-sBq71yOsqqeze2r0SS69oD2d03s=", + "dev": true, + "requires": { + "html-minifier": "^3.2.3", + "loader-utils": "^0.2.16", + "lodash": "^4.17.3", + "pretty-error": "^2.0.2", + "tapable": "^1.0.0", + "toposort": "^1.0.0", + "util.promisify": "1.0.0" + }, + "dependencies": { + "big.js": { + "version": "3.2.0", + "resolved": "https://registry.npm.taobao.org/big.js/download/big.js-3.2.0.tgz", + "integrity": "sha1-pfwpi4G54Nyi5FiCR4S2XFK6WI4=", + "dev": true + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/emojis-list/download/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npm.taobao.org/json5/download/json5-0.5.1.tgz?cache=0&sync_timestamp=1586045700847&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson5%2Fdownload%2Fjson5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npm.taobao.org/loader-utils/download/loader-utils-0.2.17.tgz?cache=0&sync_timestamp=1584445207623&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Floader-utils%2Fdownload%2Floader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true, + "requires": { + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0", + "object-assign": "^4.0.1" + } + }, + "toposort": { + "version": "1.0.7", + "resolved": "https://registry.npm.taobao.org/toposort/download/toposort-1.0.7.tgz", + "integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=", + "dev": true + }, + "util.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/util.promisify/download/util.promisify-1.0.0.tgz", + "integrity": "sha1-RA9xZaRZyaFtwUXrjnLzVocJcDA=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } + } + } + }, + "htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npm.taobao.org/htmlparser2/download/htmlparser2-3.10.1.tgz", + "integrity": "sha1-vWedw/WYl7ajS7EHSchVu1OpOS8=", + "dev": true, + "requires": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + }, + "dependencies": { + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/entities/download/entities-1.1.2.tgz", + "integrity": "sha1-vfpzUplmTfr9NFKe1PhSKidf6lY=", + "dev": true + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.6.0.tgz?cache=0&sync_timestamp=1581624324274&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freadable-stream%2Fdownload%2Freadable-stream-3.6.0.tgz", + "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npm.taobao.org/http-deceiver/download/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npm.taobao.org/http-errors/download/http-errors-1.7.2.tgz?cache=0&sync_timestamp=1593407858306&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-errors%2Fdownload%2Fhttp-errors-1.7.2.tgz", + "integrity": "sha1-T1ApzxMjnzEDblsuVSkrz7zIXI8=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz?cache=0&sync_timestamp=1560975547815&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finherits%2Fdownload%2Finherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npm.taobao.org/http-proxy/download/http-proxy-1.18.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-proxy%2Fdownload%2Fhttp-proxy-1.18.1.tgz", + "integrity": "sha1-QBVB8FNIhLv5UmAzTnL4juOXZUk=", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-middleware": { + "version": "0.19.1", + "resolved": "https://registry.npm.taobao.org/http-proxy-middleware/download/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha1-GDx9xKoUeRUDBkmMIQza+WCApDo=", + "dev": true, + "requires": { + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/http-signature/download/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/https-browserify/download/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/human-signals/download/human-signals-1.1.1.tgz?cache=0&sync_timestamp=1584198662293&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhuman-signals%2Fdownload%2Fhuman-signals-1.1.1.tgz", + "integrity": "sha1-xbHNFPUK6uCatsWf5jujOV/k36M=", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.24.tgz?cache=0&sync_timestamp=1594184264130&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ficonv-lite%2Fdownload%2Ficonv-lite-0.4.24.tgz", + "integrity": "sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "icss-utils": { + "version": "4.1.1", + "resolved": "https://registry.npm.taobao.org/icss-utils/download/icss-utils-4.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ficss-utils%2Fdownload%2Ficss-utils-4.1.1.tgz", + "integrity": "sha1-IRcLU3ie4nRHwvR91oMIFAP5pGc=", + "dev": true, + "requires": { + "postcss": "^7.0.14" + } + }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npm.taobao.org/ieee754/download/ieee754-1.1.13.tgz", + "integrity": "sha1-7BaFWOlaoYH9h9N/VcMrvLZwi4Q=", + "dev": true + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npm.taobao.org/iferr/download/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npm.taobao.org/ignore/download/ignore-4.0.6.tgz?cache=0&sync_timestamp=1590809289115&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fignore%2Fdownload%2Fignore-4.0.6.tgz", + "integrity": "sha1-dQ49tYYgh7RzfrrIIH/9HvJ7Jfw=", + "dev": true + }, + "image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", + "dev": true + }, + "import-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/import-cwd/download/import-cwd-2.1.0.tgz", + "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", + "dev": true, + "requires": { + "import-from": "^2.1.0" + } + }, + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/import-fresh/download/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "dev": true, + "requires": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + } + }, + "import-from": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/import-from/download/import-from-2.1.0.tgz", + "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + } + }, + "import-local": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/import-local/download/import-local-2.0.0.tgz", + "integrity": "sha1-VQcL44pZk88Y72236WH1vuXFoJ0=", + "dev": true, + "requires": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npm.taobao.org/imurmurhash/download/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/indent-string/download/indent-string-4.0.0.tgz", + "integrity": "sha1-Yk+PRJfWGbLZdoUx1Y9BIoVNclE=", + "dev": true + }, + "indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/indexes-of/download/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", + "dev": true + }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/infer-owner/download/infer-owner-1.0.4.tgz", + "integrity": "sha1-xM78qo5RBRwqQLos6KPScpWvlGc=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.4.tgz?cache=0&sync_timestamp=1560975547815&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finherits%2Fdownload%2Finherits-2.0.4.tgz", + "integrity": "sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=", + "dev": true + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npm.taobao.org/ini/download/ini-1.3.5.tgz", + "integrity": "sha1-7uJfVtscnsYIXgwid4CD9Zar+Sc=", + "dev": true + }, + "inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npm.taobao.org/inquirer/download/inquirer-7.3.3.tgz?cache=0&sync_timestamp=1595471627485&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finquirer%2Fdownload%2Finquirer-7.3.3.tgz", + "integrity": "sha1-BNF2sq8Er8FXqD/XwQDpjuCq0AM=", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-4.2.1.tgz", + "integrity": "sha1-kK51xCTQCNJiTFvynq0xd+v881k=", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-4.1.0.tgz?cache=0&sync_timestamp=1591687070184&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchalk%2Fdownload%2Fchalk-4.1.0.tgz", + "integrity": "sha1-ThSHCmGNni7dl92DRf2dncMVZGo=", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/cli-cursor/download/cli-cursor-3.1.0.tgz", + "integrity": "sha1-JkMFp65JDR0Dvwybp8kl0XU68wc=", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz?cache=0&sync_timestamp=1566248870121&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcolor-convert%2Fdownload%2Fcolor-convert-2.0.1.tgz", + "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz", + "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-4.0.0.tgz", + "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", + "dev": true + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-2.1.0.tgz?cache=0&sync_timestamp=1596095644798&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmimic-fn%2Fdownload%2Fmimic-fn-2.1.0.tgz", + "integrity": "sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs=", + "dev": true + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npm.taobao.org/onetime/download/onetime-5.1.2.tgz?cache=0&sync_timestamp=1597005345612&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fonetime%2Fdownload%2Fonetime-5.1.2.tgz", + "integrity": "sha1-0Oluu1awdHbfHdnEgG5SN5hcpF4=", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/restore-cursor/download/restore-cursor-3.1.0.tgz", + "integrity": "sha1-OfZ8VLOnpYzqUjbZXPADQjljH34=", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1598611709087&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz", + "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "interactjs": { + "version": "1.10.11", + "resolved": "https://registry.npmjs.org/interactjs/-/interactjs-1.10.11.tgz", + "integrity": "sha512-VPUWsGAOPmrZe1YF7Fq/4AIBBZ+3FikZRS8bpzT6VsAfUuhxl/CKJY73IAiZHd3fz9p174CXErn0Qs81XEFICA==", + "requires": { + "@interactjs/types": "1.10.11" + } + }, + "internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npm.taobao.org/internal-ip/download/internal-ip-4.3.0.tgz?cache=0&sync_timestamp=1596563037835&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finternal-ip%2Fdownload%2Finternal-ip-4.3.0.tgz", + "integrity": "sha1-hFRSuq2dLKO2nGNaE3rLmg2tCQc=", + "dev": true, + "requires": { + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" + }, + "dependencies": { + "default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npm.taobao.org/default-gateway/download/default-gateway-4.2.0.tgz", + "integrity": "sha1-FnEEx1AMIRX23WmwpTa7jtcgVSs=", + "dev": true, + "requires": { + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + } + } + } + }, + "interpret": { + "version": "1.4.0", + "resolved": "https://registry.npm.taobao.org/interpret/download/interpret-1.4.0.tgz?cache=0&sync_timestamp=1591167206134&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finterpret%2Fdownload%2Finterpret-1.4.0.tgz", + "integrity": "sha1-Zlq4vE2iendKQFhOgS4+D6RbGh4=", + "dev": true + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npm.taobao.org/invariant/download/invariant-2.2.4.tgz", + "integrity": "sha1-YQ88ksk1nOHbYW5TgAjSP/NRWOY=", + "dev": true, + "requires": { + "loose-envify": "^1.0.0" + } + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npm.taobao.org/ip/download/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/ip-regex/download/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", + "dev": true + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npm.taobao.org/ipaddr.js/download/ipaddr.js-1.9.1.tgz", + "integrity": "sha1-v/OFQ+64mEglB5/zoqjmy9RngbM=", + "dev": true + }, + "is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/is-absolute-url/download/is-absolute-url-2.1.0.tgz?cache=0&sync_timestamp=1569736493122&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-absolute-url%2Fdownload%2Fis-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-arguments": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/is-arguments/download/is-arguments-1.0.4.tgz", + "integrity": "sha1-P6+WbHy6D/Q3+zH2JQCC/PBEjPM=", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-2.1.0.tgz", + "integrity": "sha1-6h9/O4DwZCNug0cPhsCcJU+0Wwk=", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz?cache=0&sync_timestamp=1588707106955&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-buffer%2Fdownload%2Fis-buffer-1.1.6.tgz", + "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=", + "dev": true + }, + "is-callable": { + "version": "1.2.1", + "resolved": "https://registry.npm.taobao.org/is-callable/download/is-callable-1.2.1.tgz?cache=0&sync_timestamp=1599691619992&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-callable%2Fdownload%2Fis-callable-1.2.1.tgz", + "integrity": "sha1-TR4hpPQ3UJ0lzlX4GENQdxQhyW0=", + "dev": true + }, + "is-ci": { + "version": "1.2.1", + "resolved": "https://registry.npm.taobao.org/is-ci/download/is-ci-1.2.1.tgz", + "integrity": "sha1-43ecjuF/zPQoSI9uKBGH8uYyhBw=", + "dev": true, + "requires": { + "ci-info": "^1.5.0" + } + }, + "is-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/is-color-stop/download/is-color-stop-1.1.0.tgz", + "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", + "dev": true, + "requires": { + "css-color-names": "^0.0.4", + "hex-color-regex": "^1.1.0", + "hsl-regex": "^1.0.0", + "hsla-regex": "^1.0.0", + "rgb-regex": "^1.0.1", + "rgba-regex": "^1.0.0" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/is-date-object/download/is-date-object-1.0.2.tgz?cache=0&sync_timestamp=1576729165697&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-date-object%2Fdownload%2Fis-date-object-1.0.2.tgz", + "integrity": "sha1-vac28s2P0G0yhE53Q7+nSUw7/X4=", + "dev": true + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-0.1.6.tgz", + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz", + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", + "dev": true + } + } + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npm.taobao.org/is-directory/download/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true + }, + "is-docker": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/is-docker/download/is-docker-2.1.1.tgz", + "integrity": "sha1-QSWojkTkUNOE4JBH7eca3C0UQVY=", + "dev": true + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npm.taobao.org/is-extendable/download/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/is-extglob/download/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0=", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-4.0.1.tgz", + "integrity": "sha1-dWfb6fL14kZ7x3q4PEopSCQHpdw=", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/is-obj/download/is-obj-2.0.0.tgz", + "integrity": "sha1-Rz+wXZc3BeP9liBUUBjKjiLvSYI=", + "dev": true + }, + "is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/is-path-cwd/download/is-path-cwd-2.2.0.tgz?cache=0&sync_timestamp=1562347283002&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-path-cwd%2Fdownload%2Fis-path-cwd-2.2.0.tgz", + "integrity": "sha1-Z9Q7gmZKe1GR/ZEZEn6zAASKn9s=", + "dev": true + }, + "is-path-in-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/is-path-in-cwd/download/is-path-in-cwd-2.1.0.tgz?cache=0&sync_timestamp=1562347183080&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-path-in-cwd%2Fdownload%2Fis-path-in-cwd-2.1.0.tgz", + "integrity": "sha1-v+Lcomxp85cmWkAJljYCk1oFOss=", + "dev": true, + "requires": { + "is-path-inside": "^2.1.0" + } + }, + "is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/is-path-inside/download/is-path-inside-2.1.0.tgz", + "integrity": "sha1-fJgQWH1lmkDSe8201WFuqwWUlLI=", + "dev": true, + "requires": { + "path-is-inside": "^1.0.2" + } + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/is-plain-obj/download/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npm.taobao.org/is-plain-object/download/is-plain-object-2.0.4.tgz", + "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/is-regex/download/is-regex-1.1.1.tgz?cache=0&sync_timestamp=1596555640677&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-regex%2Fdownload%2Fis-regex-1.1.1.tgz", + "integrity": "sha1-xvmKrMVG9s7FRooHt7FTq1ZKV7k=", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/is-resolvable/download/is-resolvable-1.1.0.tgz", + "integrity": "sha1-+xj4fOH+uSUWnJpAfBkxijIG7Yg=", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/is-stream/download/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-svg": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/is-svg/download/is-svg-3.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-svg%2Fdownload%2Fis-svg-3.0.0.tgz", + "integrity": "sha1-kyHb0pwhLlypnE+peUxxS8r6L3U=", + "dev": true, + "requires": { + "html-comment-regex": "^1.1.0" + } + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/is-symbol/download/is-symbol-1.0.3.tgz", + "integrity": "sha1-OOEBS55jKb4N6dJKQU/XRB7GGTc=", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-whitespace": { + "version": "0.3.0", + "resolved": "https://registry.npm.taobao.org/is-whitespace/download/is-whitespace-0.3.0.tgz", + "integrity": "sha1-Fjnssb4DauxppUy7QBz77XEUq38=", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/is-windows/download/is-windows-1.0.2.tgz", + "integrity": "sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0=", + "dev": true + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/is-wsl/download/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz?cache=0&sync_timestamp=1562592096220&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fisarray%2Fdownload%2Fisarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fisexe%2Fdownload%2Fisexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npm.taobao.org/isstream/download/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "javascript-stringify": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/javascript-stringify/download/javascript-stringify-2.0.1.tgz?cache=0&sync_timestamp=1572948916758&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjavascript-stringify%2Fdownload%2Fjavascript-stringify-2.0.1.tgz", + "integrity": "sha1-bvNYA1MQ411mfGde1j0+t8GqGeU=", + "dev": true + }, + "jest-worker": { + "version": "25.5.0", + "resolved": "https://registry.npm.taobao.org/jest-worker/download/jest-worker-25.5.0.tgz?cache=0&sync_timestamp=1597057499649&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-worker%2Fdownload%2Fjest-worker-25.5.0.tgz", + "integrity": "sha1-JhHQcbec6g9D7lej0RhZOsFUfbE=", + "dev": true, + "requires": { + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-4.0.0.tgz", + "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1598611709087&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz", + "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "js-base64": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz", + "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==", + "dev": true + }, + "js-beautify": { + "version": "1.13.0", + "resolved": "https://registry.npm.taobao.org/js-beautify/download/js-beautify-1.13.0.tgz?cache=0&sync_timestamp=1597936806956&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-beautify%2Fdownload%2Fjs-beautify-1.13.0.tgz", + "integrity": "sha1-oFbV06z9SRhUmq46sDn588Ue67I=", + "dev": true, + "requires": { + "config-chain": "^1.1.12", + "editorconfig": "^0.15.3", + "glob": "^7.1.3", + "mkdirp": "^1.0.4", + "nopt": "^5.0.0" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/mkdirp/download/mkdirp-1.0.4.tgz?cache=0&sync_timestamp=1587535418745&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmkdirp%2Fdownload%2Fmkdirp-1.0.4.tgz", + "integrity": "sha1-PrXtYmInVteaXw4qIh3+utdcL34=", + "dev": true + } + } + }, + "js-message": { + "version": "1.0.5", + "resolved": "https://registry.npm.taobao.org/js-message/download/js-message-1.0.5.tgz", + "integrity": "sha1-IwDSSxrwjondCVvBpMnJz8uJLRU=", + "dev": true + }, + "js-queue": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/js-queue/download/js-queue-2.0.0.tgz", + "integrity": "sha1-NiITz4YPRo8BJfxslqvBdCUx+Ug=", + "dev": true, + "requires": { + "easy-stack": "^1.0.0" + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/js-tokens/download/js-tokens-4.0.0.tgz?cache=0&sync_timestamp=1586796260005&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-tokens%2Fdownload%2Fjs-tokens-4.0.0.tgz", + "integrity": "sha1-GSA/tZmR35jjoocFDUZHzerzJJk=", + "dev": true + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npm.taobao.org/js-yaml/download/js-yaml-3.13.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-yaml%2Fdownload%2Fjs-yaml-3.13.1.tgz", + "integrity": "sha1-r/FRswv9+o5J4F2iLnQV6d+jeEc=", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npm.taobao.org/jsbn/download/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "jsdom": { + "version": "15.2.1", + "resolved": "https://registry.npm.taobao.org/jsdom/download/jsdom-15.2.1.tgz?cache=0&sync_timestamp=1596916084670&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjsdom%2Fdownload%2Fjsdom-15.2.1.tgz", + "integrity": "sha1-0v6xrvcYP4a+UhuMaDP/UpbQfsU=", + "dev": true, + "requires": { + "abab": "^2.0.0", + "acorn": "^7.1.0", + "acorn-globals": "^4.3.2", + "array-equal": "^1.0.0", + "cssom": "^0.4.1", + "cssstyle": "^2.0.0", + "data-urls": "^1.1.0", + "domexception": "^1.0.1", + "escodegen": "^1.11.1", + "html-encoding-sniffer": "^1.0.2", + "nwsapi": "^2.2.0", + "parse5": "5.1.0", + "pn": "^1.1.0", + "request": "^2.88.0", + "request-promise-native": "^1.0.7", + "saxes": "^3.1.9", + "symbol-tree": "^3.2.2", + "tough-cookie": "^3.0.1", + "w3c-hr-time": "^1.0.1", + "w3c-xmlserializer": "^1.1.2", + "webidl-conversions": "^4.0.2", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^7.0.0", + "ws": "^7.0.0", + "xml-name-validator": "^3.0.0" + }, + "dependencies": { + "acorn": { + "version": "7.4.0", + "resolved": "https://registry.npm.taobao.org/acorn/download/acorn-7.4.0.tgz?cache=0&sync_timestamp=1597235774928&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn%2Fdownload%2Facorn-7.4.0.tgz", + "integrity": "sha1-4a1IbmxUUBY0xsOXxcEh2qODYHw=", + "dev": true + }, + "tough-cookie": { + "version": "3.0.1", + "resolved": "https://registry.npm.taobao.org/tough-cookie/download/tough-cookie-3.0.1.tgz?cache=0&sync_timestamp=1584646121003&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftough-cookie%2Fdownload%2Ftough-cookie-3.0.1.tgz", + "integrity": "sha1-nfT1fnOcJpMKAYGEiH9K233Kc7I=", + "dev": true, + "requires": { + "ip-regex": "^2.1.0", + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + } + } + }, + "jsdom-global": { + "version": "3.0.2", + "resolved": "https://registry.npm.taobao.org/jsdom-global/download/jsdom-global-3.0.2.tgz", + "integrity": "sha1-a9KZwTsMRiay2iwDk81DhdYGrLk=", + "dev": true, + "requires": {} + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npm.taobao.org/jsesc/download/jsesc-2.5.2.tgz", + "integrity": "sha1-gFZNLkg9rPbo7yCWUKZ98/DCg6Q=", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/json-parse-better-errors/download/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha1-u4Z8+zRQ5pEHwTHRxRS6s9yLyqk=", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npm.taobao.org/json-parse-even-better-errors/download/json-parse-even-better-errors-2.3.1.tgz?cache=0&sync_timestamp=1599064788298&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson-parse-even-better-errors%2Fdownload%2Fjson-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha1-fEeAWpQxmSjgV3dAXcEuH3pO4C0=", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npm.taobao.org/json-schema/download/json-schema-0.2.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson-schema%2Fdownload%2Fjson-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz?cache=0&sync_timestamp=1599333856086&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson-schema-traverse%2Fdownload%2Fjson-schema-traverse-0.4.1.tgz", + "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/json-stable-stringify-without-jsonify/download/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json3": { + "version": "3.3.3", + "resolved": "https://registry.npm.taobao.org/json3/download/json3-3.3.3.tgz", + "integrity": "sha1-f8EON1/FrkLEcFpcwKpvYr4wW4E=", + "dev": true + }, + "json5": { + "version": "2.1.3", + "resolved": "https://registry.npm.taobao.org/json5/download/json5-2.1.3.tgz?cache=0&sync_timestamp=1586045700847&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson5%2Fdownload%2Fjson5-2.1.3.tgz", + "integrity": "sha1-ybD3+pIzv+WAf+ZvzzpWF+1ZfUM=", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/jsonfile/download/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsonwebtoken": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", + "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", + "requires": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^5.6.0" + } + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npm.taobao.org/jsprim/download/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "requires": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "killable": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/killable/download/killable-1.0.1.tgz", + "integrity": "sha1-TIzkQRh6Bhx0dPuHygjipjgZSJI=", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-6.0.3.tgz", + "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=", + "dev": true + }, + "launch-editor": { + "version": "2.2.1", + "resolved": "https://registry.npm.taobao.org/launch-editor/download/launch-editor-2.2.1.tgz", + "integrity": "sha1-hxtaPuOdZoD8wm03kwtu7aidsMo=", + "dev": true, + "requires": { + "chalk": "^2.3.0", + "shell-quote": "^1.6.1" + } + }, + "launch-editor-middleware": { + "version": "2.2.1", + "resolved": "https://registry.npm.taobao.org/launch-editor-middleware/download/launch-editor-middleware-2.2.1.tgz", + "integrity": "sha1-4UsH5scVSwpLhqD9NFeE5FgEwVc=", + "dev": true, + "requires": { + "launch-editor": "^2.2.1" + } + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/leven/download/leven-3.1.0.tgz", + "integrity": "sha1-d4kd6DQGTMy6gq54QrtrFKE+1/I=", + "dev": true + }, + "levenary": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/levenary/download/levenary-1.1.1.tgz", + "integrity": "sha1-hCqe6Y0gdap/ru2+MmeekgX0b3c=", + "dev": true, + "requires": { + "leven": "^3.1.0" + } + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npm.taobao.org/levn/download/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npm.taobao.org/lines-and-columns/download/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true + }, + "load-script": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/load-script/-/load-script-1.0.0.tgz", + "integrity": "sha1-BJGTngvuVkPuSUp+PaPSuscMbKQ=" + }, + "loader-fs-cache": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/loader-fs-cache/download/loader-fs-cache-1.0.3.tgz", + "integrity": "sha1-8IZXZG1gcHi+LwoDL4vWndbyd9k=", + "dev": true, + "requires": { + "find-cache-dir": "^0.1.1", + "mkdirp": "^0.5.1" + }, + "dependencies": { + "find-cache-dir": { + "version": "0.1.1", + "resolved": "https://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-0.1.1.tgz", + "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "mkdirp": "^0.5.1", + "pkg-dir": "^1.0.0" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-1.1.2.tgz?cache=0&sync_timestamp=1597169842138&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-up%2Fdownload%2Ffind-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/path-exists/download/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "pkg-dir": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-1.0.0.tgz", + "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", + "dev": true, + "requires": { + "find-up": "^1.0.0" + } + } + } + }, + "loader-runner": { + "version": "2.4.0", + "resolved": "https://registry.npm.taobao.org/loader-runner/download/loader-runner-2.4.0.tgz?cache=0&sync_timestamp=1593786221739&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Floader-runner%2Fdownload%2Floader-runner-2.4.0.tgz", + "integrity": "sha1-7UcGa/5TTX6ExMe5mYwqdWB9k1c=", + "dev": true + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npm.taobao.org/loader-utils/download/loader-utils-1.4.0.tgz?cache=0&sync_timestamp=1584445207623&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Floader-utils%2Fdownload%2Floader-utils-1.4.0.tgz", + "integrity": "sha1-xXm140yzSxp07cbB+za/o3HVphM=", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/json5/download/json5-1.0.1.tgz?cache=0&sync_timestamp=1586045700847&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson5%2Fdownload%2Fjson5-1.0.1.tgz", + "integrity": "sha1-d5+wAYYE+oVOrL9iUhgNg1Q+Pb4=", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + } + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/locate-path/download/locate-path-3.0.0.tgz", + "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npm.taobao.org/lodash/download/lodash-4.17.20.tgz?cache=0&sync_timestamp=1597335994883&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash%2Fdownload%2Flodash-4.17.20.tgz", + "integrity": "sha1-tEqbYpe8tpjxxRo1RaKzs2jVnFI=", + "dev": true + }, + "lodash.defaultsdeep": { + "version": "4.6.1", + "resolved": "https://registry.npm.taobao.org/lodash.defaultsdeep/download/lodash.defaultsdeep-4.6.1.tgz", + "integrity": "sha1-US6b1yHSctlOPTpjZT+hdRZ0HKY=", + "dev": true + }, + "lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" + }, + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" + }, + "lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" + }, + "lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" + }, + "lodash.kebabcase": { + "version": "4.1.1", + "resolved": "https://registry.npm.taobao.org/lodash.kebabcase/download/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha1-hImxyw0p/4gZXM7KRI/21swpXDY=", + "dev": true + }, + "lodash.mapvalues": { + "version": "4.6.0", + "resolved": "https://registry.npm.taobao.org/lodash.mapvalues/download/lodash.mapvalues-4.6.0.tgz", + "integrity": "sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw=", + "dev": true + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npm.taobao.org/lodash.memoize/download/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" + }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npm.taobao.org/lodash.sortby/download/lodash.sortby-4.7.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash.sortby%2Fdownload%2Flodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true + }, + "lodash.transform": { + "version": "4.6.0", + "resolved": "https://registry.npm.taobao.org/lodash.transform/download/lodash.transform-4.6.0.tgz", + "integrity": "sha1-EjBkIvYzJK7YSD0/ODMrX2cFR6A=", + "dev": true + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npm.taobao.org/lodash.uniq/download/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/log-symbols/download/log-symbols-2.2.0.tgz?cache=0&sync_timestamp=1587898912367&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flog-symbols%2Fdownload%2Flog-symbols-2.2.0.tgz", + "integrity": "sha1-V0Dhxdbw39pK2TI7UzIQfva0xAo=", + "dev": true, + "requires": { + "chalk": "^2.0.1" + } + }, + "loglevel": { + "version": "1.7.0", + "resolved": "https://registry.npm.taobao.org/loglevel/download/loglevel-1.7.0.tgz", + "integrity": "sha1-coFmhVp0DVnTjbAc9G8ELKoEG7A=", + "dev": true + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npm.taobao.org/loose-envify/download/loose-envify-1.4.0.tgz", + "integrity": "sha1-ce5R+nvkyuwaY4OffmgtgTLTDK8=", + "dev": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npm.taobao.org/lower-case/download/lower-case-1.1.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flower-case%2Fdownload%2Flower-case-1.1.4.tgz", + "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", + "dev": true + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npm.taobao.org/lru-cache/download/lru-cache-5.1.1.tgz?cache=0&sync_timestamp=1594427582110&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flru-cache%2Fdownload%2Flru-cache-5.1.1.tgz", + "integrity": "sha1-HaJ+ZxAnGUdpXa9oSOhH8B2EuSA=", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/make-dir/download/make-dir-2.1.0.tgz?cache=0&sync_timestamp=1587567572251&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmake-dir%2Fdownload%2Fmake-dir-2.1.0.tgz", + "integrity": "sha1-XwMQ4YuL6JjMBwCSlaMK5B6R5vU=", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npm.taobao.org/map-cache/download/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/map-visit/download/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npm.taobao.org/md5.js/download/md5.js-1.3.5.tgz", + "integrity": "sha1-tdB7jjIW4+J81yjXL3DR5qNCAF8=", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npm.taobao.org/mdn-data/download/mdn-data-2.0.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmdn-data%2Fdownload%2Fmdn-data-2.0.4.tgz", + "integrity": "sha1-aZs8OKxvHXKAkaZGULZdOIUC/Vs=", + "dev": true + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npm.taobao.org/media-typer/download/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npm.taobao.org/memory-fs/download/memory-fs-0.4.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmemory-fs%2Fdownload%2Fmemory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/merge-descriptors/download/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "merge-options": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-1.0.1.tgz", + "integrity": "sha512-iuPV41VWKWBIOpBsjoxjDZw8/GbSfZ2mk7N1453bwMrfzdrIk7EzBd+8UVR6rkw67th7xnk9Dytl3J+lHPdxvg==", + "dev": true, + "requires": { + "is-plain-obj": "^1.1" + } + }, + "merge-source-map": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/merge-source-map/download/merge-source-map-1.1.0.tgz", + "integrity": "sha1-L93n5gIJOfcJBqaPLXrmheTIxkY=", + "dev": true, + "requires": { + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + } + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/merge-stream/download/merge-stream-2.0.0.tgz", + "integrity": "sha1-UoI2KaFN0AyXcPtq1H3GMQ8sH2A=", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npm.taobao.org/merge2/download/merge2-1.4.1.tgz", + "integrity": "sha1-Q2iJL4hekHRVpv19xVwMnUBJkK4=", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/methods/download/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npm.taobao.org/micromatch/download/micromatch-3.1.10.tgz", + "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/miller-rabin/download/miller-rabin-4.0.1.tgz", + "integrity": "sha1-8IA1HIZbDcViqEYpZtqlNUPHik0=", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.11.9.tgz", + "integrity": "sha1-JtVWgpRY+dHoH8SJUkk9C6NQeCg=", + "dev": true + } + } + }, + "mime": { + "version": "2.4.6", + "resolved": "https://registry.npm.taobao.org/mime/download/mime-2.4.6.tgz?cache=0&sync_timestamp=1590596706367&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime%2Fdownload%2Fmime-2.4.6.tgz", + "integrity": "sha1-5bQHyQ20QvK+tbFiNz0Htpr/pNE=", + "dev": true + }, + "mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npm.taobao.org/mime-db/download/mime-db-1.44.0.tgz?cache=0&sync_timestamp=1587603342053&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime-db%2Fdownload%2Fmime-db-1.44.0.tgz", + "integrity": "sha1-+hHF6wrKEzS0Izy01S8QxaYnL5I=", + "dev": true + }, + "mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npm.taobao.org/mime-types/download/mime-types-2.1.27.tgz", + "integrity": "sha1-R5SfmOJ56lMRn1ci4PNOUpvsAJ8=", + "dev": true, + "requires": { + "mime-db": "1.44.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-1.2.0.tgz?cache=0&sync_timestamp=1596095644798&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmimic-fn%2Fdownload%2Fmimic-fn-1.2.0.tgz", + "integrity": "sha1-ggyGo5M0ZA6ZUWkovQP8qIBX0CI=", + "dev": true + }, + "mini-css-extract-plugin": { + "version": "0.9.0", + "resolved": "https://registry.npm.taobao.org/mini-css-extract-plugin/download/mini-css-extract-plugin-0.9.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmini-css-extract-plugin%2Fdownload%2Fmini-css-extract-plugin-0.9.0.tgz", + "integrity": "sha1-R/LPB6oWWrNXM7H8l9TEbAVkM54=", + "dev": true, + "requires": { + "loader-utils": "^1.1.0", + "normalize-url": "1.9.1", + "schema-utils": "^1.0.0", + "webpack-sources": "^1.1.0" + }, + "dependencies": { + "normalize-url": { + "version": "1.9.1", + "resolved": "https://registry.npm.taobao.org/normalize-url/download/normalize-url-1.9.1.tgz?cache=0&sync_timestamp=1596373165623&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnormalize-url%2Fdownload%2Fnormalize-url-1.9.1.tgz", + "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", + "dev": true, + "requires": { + "object-assign": "^4.0.1", + "prepend-http": "^1.0.0", + "query-string": "^4.1.0", + "sort-keys": "^1.0.0" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz?cache=0&sync_timestamp=1598871750711&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-1.0.0.tgz", + "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + } + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/minimalistic-assert/download/minimalistic-assert-1.0.1.tgz", + "integrity": "sha1-LhlN4ERibUoQ5/f7wAznPoPk1cc=", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/minimalistic-crypto-utils/download/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz", + "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npm.taobao.org/minimist/download/minimist-1.2.5.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fminimist%2Fdownload%2Fminimist-1.2.5.tgz", + "integrity": "sha1-Z9ZgFLZqaoqqDAg8X9WN9OTpdgI=", + "dev": true + }, + "minipass": { + "version": "3.1.3", + "resolved": "https://registry.npm.taobao.org/minipass/download/minipass-3.1.3.tgz", + "integrity": "sha1-fUL/HzljVILhX5zbUxhN7r1YFf0=", + "dev": true, + "requires": { + "yallist": "^4.0.0" + }, + "dependencies": { + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/yallist/download/yallist-4.0.0.tgz", + "integrity": "sha1-m7knkNnA7/7GO+c1GeEaNQGaOnI=", + "dev": true + } + } + }, + "minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/minipass-collect/download/minipass-collect-1.0.2.tgz", + "integrity": "sha1-IrgTv3Rdxu26JXa5QAIq1u3Ixhc=", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npm.taobao.org/minipass-flush/download/minipass-flush-1.0.5.tgz", + "integrity": "sha1-gucTXX6JpQ/+ZGEKeHlTxMTLs3M=", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npm.taobao.org/minipass-pipeline/download/minipass-pipeline-1.2.4.tgz?cache=0&sync_timestamp=1595998621838&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fminipass-pipeline%2Fdownload%2Fminipass-pipeline-1.2.4.tgz", + "integrity": "sha1-aEcveXEcCEZXwGfFxq2Tzd6oIUw=", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/mississippi/download/mississippi-3.0.0.tgz", + "integrity": "sha1-6goykfl+C16HdrNj1fChLZTGcCI=", + "dev": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, + "mitt": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.1.2.tgz", + "integrity": "sha1-OA5hSA1qYVtmDwertg1R4KTkvtY=", + "dev": true + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npm.taobao.org/mixin-deep/download/mixin-deep-1.3.2.tgz", + "integrity": "sha1-ESC0PcNZp4Xc5ltVuC4lfM9HlWY=", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/is-extendable/download/is-extendable-1.0.1.tgz", + "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.5.tgz?cache=0&sync_timestamp=1587535418745&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmkdirp%2Fdownload%2Fmkdirp-0.5.5.tgz", + "integrity": "sha1-2Rzv1i0UNsoPQWIOJRKI1CAJne8=", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "mocha": { + "version": "6.2.3", + "resolved": "https://registry.npm.taobao.org/mocha/download/mocha-6.2.3.tgz?cache=0&sync_timestamp=1598655903293&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmocha%2Fdownload%2Fmocha-6.2.3.tgz", + "integrity": "sha1-5khDIYHYuZOTQQISZkRQpMHjGRI=", + "dev": true, + "requires": { + "ansi-colors": "3.2.3", + "browser-stdout": "1.3.1", + "debug": "3.2.6", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "find-up": "3.0.0", + "glob": "7.1.3", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "3.13.1", + "log-symbols": "2.2.0", + "minimatch": "3.0.4", + "mkdirp": "0.5.4", + "ms": "2.1.1", + "node-environment-flags": "1.0.5", + "object.assign": "4.1.0", + "strip-json-comments": "2.0.1", + "supports-color": "6.0.0", + "which": "1.3.1", + "wide-align": "1.1.3", + "yargs": "13.3.2", + "yargs-parser": "13.1.2", + "yargs-unparser": "1.6.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-3.2.6.tgz", + "integrity": "sha1-6D0X3hbYp++3cX7b5fsQE17uYps=", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npm.taobao.org/glob/download/glob-7.1.3.tgz?cache=0&sync_timestamp=1573078121947&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglob%2Fdownload%2Fglob-7.1.3.tgz", + "integrity": "sha1-OWCDLT8VdBCDQtr9OmezMsCWnfE=", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "mkdirp": { + "version": "0.5.4", + "resolved": "https://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.4.tgz?cache=0&sync_timestamp=1587535418745&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmkdirp%2Fdownload%2Fmkdirp-0.5.4.tgz", + "integrity": "sha1-/QFQSmeX7Fyb6B/0PSBJYe1kpRI=", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.1.tgz", + "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=", + "dev": true + }, + "supports-color": { + "version": "6.0.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.0.0.tgz?cache=0&sync_timestamp=1598611709087&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.0.0.tgz", + "integrity": "sha1-ds/nQs8fQbubHCmtAwaMBbTA5Ao=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "mochapack": { + "version": "1.1.15", + "resolved": "https://registry.npm.taobao.org/mochapack/download/mochapack-1.1.15.tgz", + "integrity": "sha1-Qmx5O4ce0AbHgRctorFfYS8R8tw=", + "dev": true, + "requires": { + "@babel/runtime-corejs2": "^7.0.0", + "chalk": "^2.4.2", + "chokidar": "^2.0.0", + "glob-parent": "5.1.0", + "globby": "^10.0.1", + "interpret": "^1.2.0", + "is-glob": "^4.0.1", + "loader-utils": "^1.2.3", + "lodash": "^4.17.15", + "memory-fs": "^0.4.1", + "minimatch": "^3.0.4", + "nodent-runtime": "^3.2.1", + "normalize-path": "^3.0.0", + "progress": "^2.0.3", + "source-map-support": "^0.5.13", + "toposort": "^2.0.2", + "yargs": "14.0.0" + }, + "dependencies": { + "@nodelib/fs.stat": { + "version": "2.0.3", + "resolved": "https://registry.npm.taobao.org/@nodelib/fs.stat/download/@nodelib/fs.stat-2.0.3.tgz", + "integrity": "sha1-NNxfTKu8cg9OYPdadH5+zWwXW9M=", + "dev": true + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/anymatch/download/anymatch-2.0.0.tgz", + "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/array-union/download/array-union-2.1.0.tgz", + "integrity": "sha1-t5hCCtvrHego2ErNii4j0+/oXo0=", + "dev": true + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-1.13.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbinary-extensions%2Fdownload%2Fbinary-extensions-1.13.1.tgz", + "integrity": "sha1-WYr+VHVbKGilMw0q/51Ou1Mgm2U=", + "dev": true + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npm.taobao.org/chokidar/download/chokidar-2.1.8.tgz", + "integrity": "sha1-gEs6e2qZNYw8XGHnHYco8EHP+Rc=", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + }, + "dependencies": { + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/glob-parent/download/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + } + } + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npm.taobao.org/dir-glob/download/dir-glob-3.0.1.tgz", + "integrity": "sha1-Vtv3PZkqSpO6FYT0U0Bj/S5BcX8=", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-7.0.3.tgz", + "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY=", + "dev": true + }, + "fast-glob": { + "version": "3.2.4", + "resolved": "https://registry.npm.taobao.org/fast-glob/download/fast-glob-3.2.4.tgz?cache=0&sync_timestamp=1592291968616&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-glob%2Fdownload%2Ffast-glob-3.2.4.tgz", + "integrity": "sha1-0grvv5lXk4Pn88xmUpFYybmFVNM=", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" + }, + "dependencies": { + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npm.taobao.org/braces/download/braces-3.0.2.tgz", + "integrity": "sha1-NFThpGLujVmeI23zNs2epPiv4Qc=", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/micromatch/download/micromatch-4.0.2.tgz", + "integrity": "sha1-T8sJmb+fvC/L3SEvbWKbmlbDklk=", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + } + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npm.taobao.org/fill-range/download/fill-range-7.0.1.tgz", + "integrity": "sha1-GRmmp8df44ssfHflGYU12prN2kA=", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-1.2.13.tgz?cache=0&sync_timestamp=1588787369955&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffsevents%2Fdownload%2Ffsevents-1.2.13.tgz", + "integrity": "sha1-8yXLBFVZJCi88Rs4M3DvcOO/zDg=", + "dev": true, + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + }, + "glob-parent": { + "version": "5.1.0", + "resolved": "https://registry.npm.taobao.org/glob-parent/download/glob-parent-5.1.0.tgz", + "integrity": "sha1-X0wdHnSNMM1zrSlEs1d6gbCB6MI=", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globby": { + "version": "10.0.2", + "resolved": "https://registry.npm.taobao.org/globby/download/globby-10.0.2.tgz?cache=0&sync_timestamp=1591083783605&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobby%2Fdownload%2Fglobby-10.0.2.tgz", + "integrity": "sha1-J3WT50WsqkZGw6tBEonsR6A5JUM=", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" + } + }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npm.taobao.org/ignore/download/ignore-5.1.8.tgz?cache=0&sync_timestamp=1590809289115&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fignore%2Fdownload%2Fignore-5.1.8.tgz", + "integrity": "sha1-8VCotQo0KJsz4i9YiavU2AFvDlc=", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-7.0.0.tgz", + "integrity": "sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss=", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/path-type/download/path-type-4.0.0.tgz", + "integrity": "sha1-hO0BwKe6OAr+CdkKjBgNzZ0DBDs=", + "dev": true + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npm.taobao.org/readdirp/download/readdirp-2.2.1.tgz", + "integrity": "sha1-DodiKjMlqjPokihcr4tOhGUppSU=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/slash/download/slash-3.0.0.tgz", + "integrity": "sha1-ZTm+hwwWWtvVJAIg2+Nh8bxNRjQ=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-3.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring-width%2Fdownload%2Fstring-width-3.1.0.tgz", + "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz", + "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-5.0.1.tgz", + "integrity": "sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ=", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "yargs": { + "version": "14.0.0", + "resolved": "https://registry.npm.taobao.org/yargs/download/yargs-14.0.0.tgz?cache=0&sync_timestamp=1599673846782&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-14.0.0.tgz", + "integrity": "sha1-ukysyAKzwLPjap55FyN2PVeoUGY=", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.1" + } + } + } + }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/move-concurrently/download/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.2.tgz", + "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=" + }, + "multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npm.taobao.org/multicast-dns/download/multicast-dns-6.2.3.tgz", + "integrity": "sha1-oOx72QVcQoL3kMPIL04o2zsxsik=", + "dev": true, + "requires": { + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" + } + }, + "multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/multicast-dns-service-types/download/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", + "dev": true + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npm.taobao.org/mute-stream/download/mute-stream-0.0.8.tgz", + "integrity": "sha1-FjDEKyJR/4HiooPelqVJfqkuXg0=", + "dev": true + }, + "mz": { + "version": "2.7.0", + "resolved": "https://registry.npm.taobao.org/mz/download/mz-2.7.0.tgz", + "integrity": "sha1-lQCAV6Vsr63CvGPd5/n/aVWUjjI=", + "dev": true, + "requires": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "nan": { + "version": "2.14.1", + "resolved": "https://registry.npm.taobao.org/nan/download/nan-2.14.1.tgz?cache=0&sync_timestamp=1587495810273&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnan%2Fdownload%2Fnan-2.14.1.tgz", + "integrity": "sha1-174036MQW5FJTDFHCJMV7/iHSwE=", + "dev": true, + "optional": true + }, + "nanocolors": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/nanocolors/-/nanocolors-0.1.6.tgz", + "integrity": "sha512-2pvTw6vYRaBLGir2xR7MxaJtyWkrn+C53EpW8yPotG+pdAwBvt0Xwk4VJ6VHLY0aLthVZPvDfm9TdZvrvAm5UQ==", + "dev": true + }, + "nanoid": { + "version": "3.1.25", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz", + "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==", + "dev": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npm.taobao.org/nanomatch/download/nanomatch-1.2.13.tgz", + "integrity": "sha1-uHqKpPwN6P5r6IiVs4mD/yZb0Rk=", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npm.taobao.org/natural-compare/download/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npm.taobao.org/negotiator/download/negotiator-0.6.2.tgz", + "integrity": "sha1-/qz3zPUlp3rpY0Q2pkiD/+yjRvs=", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npm.taobao.org/neo-async/download/neo-async-2.6.2.tgz?cache=0&sync_timestamp=1594317434347&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fneo-async%2Fdownload%2Fneo-async-2.6.2.tgz", + "integrity": "sha1-tKr7k+OustgXTKU88WOrfXMIMF8=", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npm.taobao.org/nice-try/download/nice-try-1.0.5.tgz", + "integrity": "sha1-ozeKdpbOfSI+iPybdkvX7xCJ42Y=", + "dev": true + }, + "no-case": { + "version": "2.3.2", + "resolved": "https://registry.npm.taobao.org/no-case/download/no-case-2.3.2.tgz?cache=0&sync_timestamp=1576721537540&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fno-case%2Fdownload%2Fno-case-2.3.2.tgz", + "integrity": "sha1-YLgTOWvjmz8SiKTB7V0efSi0ZKw=", + "dev": true, + "requires": { + "lower-case": "^1.1.1" + } + }, + "node-environment-flags": { + "version": "1.0.5", + "resolved": "https://registry.npm.taobao.org/node-environment-flags/download/node-environment-flags-1.0.5.tgz", + "integrity": "sha1-+pMCdfW/Xa4YjWGSsktMi7rD12o=", + "dev": true, + "requires": { + "object.getownpropertydescriptors": "^2.0.3", + "semver": "^5.7.0" + } + }, + "node-forge": { + "version": "0.9.0", + "resolved": "https://registry.npm.taobao.org/node-forge/download/node-forge-0.9.0.tgz?cache=0&sync_timestamp=1599010773454&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnode-forge%2Fdownload%2Fnode-forge-0.9.0.tgz", + "integrity": "sha1-1iQFDtu0SHStyhK7mlLsY8t4JXk=", + "dev": true + }, + "node-ipc": { + "version": "9.1.1", + "resolved": "https://registry.npm.taobao.org/node-ipc/download/node-ipc-9.1.1.tgz", + "integrity": "sha1-TiRe1pOOZRAOWV68XcNLFujdXWk=", + "dev": true, + "requires": { + "event-pubsub": "4.3.0", + "js-message": "1.0.5", + "js-queue": "2.0.0" + } + }, + "node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npm.taobao.org/node-libs-browser/download/node-libs-browser-2.2.1.tgz", + "integrity": "sha1-tk9RPRgzhiX5A0bSew0jXmMfZCU=", + "dev": true, + "requires": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npm.taobao.org/punycode/download/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + } + } + }, + "node-releases": { + "version": "1.1.61", + "resolved": "https://registry.npm.taobao.org/node-releases/download/node-releases-1.1.61.tgz?cache=0&sync_timestamp=1599612925853&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnode-releases%2Fdownload%2Fnode-releases-1.1.61.tgz", + "integrity": "sha1-cHsPypzk4ReDYSukovy6CQR68W4=", + "dev": true + }, + "nodent-runtime": { + "version": "3.2.1", + "resolved": "https://registry.npm.taobao.org/nodent-runtime/download/nodent-runtime-3.2.1.tgz", + "integrity": "sha1-nidV2F4592Qojw1HUuvP4+VB4A4=", + "dev": true + }, + "nopt": { + "version": "5.0.0", + "resolved": "https://registry.npm.taobao.org/nopt/download/nopt-5.0.0.tgz?cache=0&sync_timestamp=1597649905420&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnopt%2Fdownload%2Fnopt-5.0.0.tgz", + "integrity": "sha1-UwlCu1ilEvzK/lP+IQ8TolNV3Ig=", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npm.taobao.org/normalize-package-data/download/normalize-package-data-2.5.0.tgz", + "integrity": "sha1-5m2xg4sgDB38IzIl0SyzZSDiNKg=", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-3.0.0.tgz", + "integrity": "sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU=", + "dev": true + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npm.taobao.org/normalize-range/download/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true + }, + "normalize-url": { + "version": "3.3.0", + "resolved": "https://registry.npm.taobao.org/normalize-url/download/normalize-url-3.3.0.tgz?cache=0&sync_timestamp=1596373165623&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnormalize-url%2Fdownload%2Fnormalize-url-3.3.0.tgz", + "integrity": "sha1-suHE3E98bVd0PfczpPWXjRhlBVk=", + "dev": true + }, + "normalize-wheel": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/normalize-wheel/-/normalize-wheel-1.0.1.tgz", + "integrity": "sha1-rsiGr/2wRQcNhWRH32Ls+GFG7EU=" + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/npm-run-path/download/npm-run-path-2.0.2.tgz?cache=0&sync_timestamp=1577053500910&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnpm-run-path%2Fdownload%2Fnpm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/nth-check/download/nth-check-1.0.2.tgz", + "integrity": "sha1-sr0pXDfj3VijvwcAN2Zjuk2c8Fw=", + "dev": true, + "requires": { + "boolbase": "~1.0.0" + } + }, + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npm.taobao.org/num2fraction/download/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, + "nwsapi": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/nwsapi/download/nwsapi-2.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnwsapi%2Fdownload%2Fnwsapi-2.2.0.tgz", + "integrity": "sha1-IEh5qePQaP8qVROcLHcngGgaOLc=", + "dev": true + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npm.taobao.org/oauth-sign/download/oauth-sign-0.9.0.tgz", + "integrity": "sha1-R6ewFrqmi1+g7PPe4IqFxnmsZFU=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npm.taobao.org/object-assign/download/object-assign-4.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-assign%2Fdownload%2Fobject-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npm.taobao.org/object-copy/download/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-hash": { + "version": "1.3.1", + "resolved": "https://registry.npm.taobao.org/object-hash/download/object-hash-1.3.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-hash%2Fdownload%2Fobject-hash-1.3.1.tgz", + "integrity": "sha1-/eRSCYqVHLFF8Dm7fUVUSd3BJt8=", + "dev": true + }, + "object-inspect": { + "version": "1.8.0", + "resolved": "https://registry.npm.taobao.org/object-inspect/download/object-inspect-1.8.0.tgz?cache=0&sync_timestamp=1592545231350&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-inspect%2Fdownload%2Fobject-inspect-1.8.0.tgz", + "integrity": "sha1-34B+Xs9TpgnMa/6T6sPMe+WzqdA=", + "dev": true + }, + "object-is": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/object-is/download/object-is-1.1.2.tgz", + "integrity": "sha1-xdLof/nhGfeLegiEQVGeLuwVc7Y=", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/object-keys/download/object-keys-1.1.1.tgz", + "integrity": "sha1-HEfyct8nfzsdrwYWd9nILiMixg4=", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/object-visit/download/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/object.assign/download/object.assign-4.1.0.tgz", + "integrity": "sha1-lovxEA15Vrs8oIbwBvhGs7xACNo=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "object.getownpropertydescriptors": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/object.getownpropertydescriptors/download/object.getownpropertydescriptors-2.1.0.tgz", + "integrity": "sha1-Npvx+VktiridcS3O1cuBx8U1Jkk=", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npm.taobao.org/object.pick/download/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "object.values": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/object.values/download/object.values-1.1.1.tgz", + "integrity": "sha1-aKmezeNWt+kpWjxeDOMdyMlT3l4=", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1", + "has": "^1.0.3" + } + }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/obuf/download/obuf-1.1.2.tgz", + "integrity": "sha1-Cb6jND1BhZ69RGKS0RydTbYZCE4=", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npm.taobao.org/on-finished/download/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/on-headers/download/on-headers-1.0.2.tgz", + "integrity": "sha1-dysK5qqlJcOZ5Imt+tkMQD6zwo8=", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npm.taobao.org/once/download/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/onetime/download/onetime-2.0.1.tgz?cache=0&sync_timestamp=1597005345612&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fonetime%2Fdownload%2Fonetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "open": { + "version": "6.4.0", + "resolved": "https://registry.npm.taobao.org/open/download/open-6.4.0.tgz?cache=0&sync_timestamp=1598611732360&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fopen%2Fdownload%2Fopen-6.4.0.tgz", + "integrity": "sha1-XBPpbQ3IlGhhZPGJZez+iJ7PyKk=", + "dev": true, + "requires": { + "is-wsl": "^1.1.0" + } + }, + "opener": { + "version": "1.5.2", + "resolved": "https://registry.npm.taobao.org/opener/download/opener-1.5.2.tgz?cache=0&sync_timestamp=1598733244715&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fopener%2Fdownload%2Fopener-1.5.2.tgz", + "integrity": "sha1-XTfh81B3udysQwE3InGv3rKhNZg=", + "dev": true + }, + "opn": { + "version": "5.5.0", + "resolved": "https://registry.npm.taobao.org/opn/download/opn-5.5.0.tgz", + "integrity": "sha1-/HFk+rVtI1kExRw7J9pnWMo7m/w=", + "dev": true, + "requires": { + "is-wsl": "^1.1.0" + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npm.taobao.org/optionator/download/optionator-0.8.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Foptionator%2Fdownload%2Foptionator-0.8.3.tgz", + "integrity": "sha1-hPodA2/p08fiHZmIS2ARZ+yPtJU=", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "ora": { + "version": "3.4.0", + "resolved": "https://registry.npm.taobao.org/ora/download/ora-3.4.0.tgz?cache=0&sync_timestamp=1599424857800&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fora%2Fdownload%2Fora-3.4.0.tgz", + "integrity": "sha1-vwdSSRBZo+8+1MhQl1Md6f280xg=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-spinners": "^2.0.0", + "log-symbols": "^2.2.0", + "strip-ansi": "^5.2.0", + "wcwidth": "^1.0.1" + }, + "dependencies": { + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz", + "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "original": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/original/download/original-1.0.2.tgz", + "integrity": "sha1-5EKmHP/hxf0gpl8yYcJmY7MD8l8=", + "dev": true, + "requires": { + "url-parse": "^1.4.3" + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npm.taobao.org/os-browserify/download/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/os-tmpdir/download/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/p-finally/download/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npm.taobao.org/p-limit/download/p-limit-2.3.0.tgz?cache=0&sync_timestamp=1594559734248&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-limit%2Fdownload%2Fp-limit-2.3.0.tgz", + "integrity": "sha1-PdM8ZHohT9//2DWTPrCG2g3CHbE=", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/p-locate/download/p-locate-3.0.0.tgz", + "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-map": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/p-map/download/p-map-3.0.0.tgz", + "integrity": "sha1-1wTZr4orpoTiYA2aIVmD1BQal50=", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "p-retry": { + "version": "3.0.1", + "resolved": "https://registry.npm.taobao.org/p-retry/download/p-retry-3.0.1.tgz?cache=0&sync_timestamp=1572521210242&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-retry%2Fdownload%2Fp-retry-3.0.1.tgz", + "integrity": "sha1-MWtMiJPiyNwc+okfQGxLQivr8yg=", + "dev": true, + "requires": { + "retry": "^0.12.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/p-try/download/p-try-2.2.0.tgz", + "integrity": "sha1-yyhoVA4xPWHeWPr741zpAE1VQOY=", + "dev": true + }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npm.taobao.org/pako/download/pako-1.0.11.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpako%2Fdownload%2Fpako-1.0.11.tgz", + "integrity": "sha1-bJWZ00DVTf05RjgCUqNXBaa5kr8=", + "dev": true + }, + "parallel-transform": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/parallel-transform/download/parallel-transform-1.2.0.tgz", + "integrity": "sha1-kEnKN9bLIYLDsdLHIL6U0UpYFPw=", + "dev": true, + "requires": { + "cyclist": "^1.0.1", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "param-case": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/param-case/download/param-case-2.1.1.tgz?cache=0&sync_timestamp=1576721509342&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparam-case%2Fdownload%2Fparam-case-2.1.1.tgz", + "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", + "dev": true, + "requires": { + "no-case": "^2.2.0" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/parent-module/download/parent-module-1.0.1.tgz", + "integrity": "sha1-aR0nCeeMefrjoVZiJFLQB2LKqqI=", + "dev": true, + "requires": { + "callsites": "^3.0.0" + }, + "dependencies": { + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/callsites/download/callsites-3.1.0.tgz", + "integrity": "sha1-s2MKvYlDQy9Us/BRkjjjPNffL3M=", + "dev": true + } + } + }, + "parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npm.taobao.org/parse-asn1/download/parse-asn1-5.1.6.tgz?cache=0&sync_timestamp=1597167309380&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse-asn1%2Fdownload%2Fparse-asn1-5.1.6.tgz", + "integrity": "sha1-OFCAo+wTy2KmLTlAnLPoiETNrtQ=", + "dev": true, + "requires": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "parse-json": { + "version": "5.1.0", + "resolved": "https://registry.npm.taobao.org/parse-json/download/parse-json-5.1.0.tgz?cache=0&sync_timestamp=1598129182781&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse-json%2Fdownload%2Fparse-json-5.1.0.tgz", + "integrity": "sha1-+WCIzfJKj6qa6poAny2dlCyZlkY=", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "parse5": { + "version": "5.1.0", + "resolved": "https://registry.npm.taobao.org/parse5/download/parse5-5.1.0.tgz?cache=0&sync_timestamp=1595850861876&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse5%2Fdownload%2Fparse5-5.1.0.tgz", + "integrity": "sha1-xZNByXI/QUxFKXVWTHwApo1YrNI=", + "dev": true + }, + "parse5-htmlparser2-tree-adapter": { + "version": "5.1.1", + "resolved": "https://registry.npm.taobao.org/parse5-htmlparser2-tree-adapter/download/parse5-htmlparser2-tree-adapter-5.1.1.tgz?cache=0&sync_timestamp=1596089818598&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse5-htmlparser2-tree-adapter%2Fdownload%2Fparse5-htmlparser2-tree-adapter-5.1.1.tgz", + "integrity": "sha1-6MdD1OkhlNUpPs3isIvjHmdGHLw=", + "dev": true, + "requires": { + "parse5": "^5.1.1" + }, + "dependencies": { + "parse5": { + "version": "5.1.1", + "resolved": "https://registry.npm.taobao.org/parse5/download/parse5-5.1.1.tgz?cache=0&sync_timestamp=1595850861876&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse5%2Fdownload%2Fparse5-5.1.1.tgz", + "integrity": "sha1-9o5OW6GFKsLK3AD0VV//bCq7YXg=", + "dev": true + } + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npm.taobao.org/parseurl/download/parseurl-1.3.3.tgz", + "integrity": "sha1-naGee+6NEt/wUT7Vt2lXeTvC6NQ=", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npm.taobao.org/pascalcase/download/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npm.taobao.org/path-browserify/download/path-browserify-0.0.1.tgz", + "integrity": "sha1-5sTd1+06onxoogzE5Q4aTug7vEo=", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/path-dirname/download/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/path-exists/download/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/path-is-inside/download/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/path-key/download/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npm.taobao.org/path-parse/download/path-parse-1.0.6.tgz", + "integrity": "sha1-1i27VnlAXXLEc37FhgDp3c8G0kw=", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npm.taobao.org/path-to-regexp/download/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/path-type/download/path-type-3.0.0.tgz", + "integrity": "sha1-zvMdyOCho7sNEFwM2Xzzv0f0428=", + "dev": true, + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz?cache=0&sync_timestamp=1581697613983&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpify%2Fdownload%2Fpify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "pathval": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/pathval/download/pathval-1.1.0.tgz", + "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", + "dev": true + }, + "pbkdf2": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/pbkdf2/download/pbkdf2-3.1.1.tgz", + "integrity": "sha1-y4cksPramEWWhW0abrr9NYRlS5Q=", + "dev": true, + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npm.taobao.org/picomatch/download/picomatch-2.2.2.tgz?cache=0&sync_timestamp=1584790434095&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpicomatch%2Fdownload%2Fpicomatch-2.2.2.tgz", + "integrity": "sha1-IfMz6ba46v8CRo9RRupAbTRfTa0=", + "dev": true + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/pify/download/pify-4.0.1.tgz?cache=0&sync_timestamp=1581697613983&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpify%2Fdownload%2Fpify-4.0.1.tgz", + "integrity": "sha1-SyzSXFDVmHNcUCkiJP2MbfQeMjE=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npm.taobao.org/pinkie/download/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/pinkie-promise/download/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-3.0.0.tgz", + "integrity": "sha1-J0kCDyOe2ZCIGx9xIQ1R62UjvqM=", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "pn": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/pn/download/pn-1.1.0.tgz", + "integrity": "sha1-4vTO8OIZ9GPBeas3Rj5OHs3Muvs=", + "dev": true + }, + "pnp-webpack-plugin": { + "version": "1.6.4", + "resolved": "https://registry.npm.taobao.org/pnp-webpack-plugin/download/pnp-webpack-plugin-1.6.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpnp-webpack-plugin%2Fdownload%2Fpnp-webpack-plugin-1.6.4.tgz", + "integrity": "sha1-yXEaxNxIpoXauvyG+Lbdn434QUk=", + "dev": true, + "requires": { + "ts-pnp": "^1.1.6" + } + }, + "portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npm.taobao.org/portfinder/download/portfinder-1.0.28.tgz?cache=0&sync_timestamp=1596018176291&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fportfinder%2Fdownload%2Fportfinder-1.0.28.tgz", + "integrity": "sha1-Z8RiKFK9U3TdHdkA93n1NGL6x3g=", + "dev": true, + "requires": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-3.2.6.tgz", + "integrity": "sha1-6D0X3hbYp++3cX7b5fsQE17uYps=", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npm.taobao.org/posix-character-classes/download/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "postcss": { + "version": "7.0.32", + "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-7.0.32.tgz", + "integrity": "sha1-QxDW7jRwU9o0M9sr5JKIPWLOxZ0=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&sync_timestamp=1598611709087&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-calc": { + "version": "7.0.4", + "resolved": "https://registry.npm.taobao.org/postcss-calc/download/postcss-calc-7.0.4.tgz?cache=0&sync_timestamp=1598957838506&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-calc%2Fdownload%2Fpostcss-calc-7.0.4.tgz", + "integrity": "sha1-Xhd920FzQebUoZPF2f2K2nkJT4s=", + "dev": true, + "requires": { + "postcss": "^7.0.27", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.0.2" + } + }, + "postcss-colormin": { + "version": "4.0.3", + "resolved": "https://registry.npm.taobao.org/postcss-colormin/download/postcss-colormin-4.0.3.tgz?cache=0&sync_timestamp=1599672034427&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-colormin%2Fdownload%2Fpostcss-colormin-4.0.3.tgz", + "integrity": "sha1-rgYLzpPteUrHEmTwgTLVUJVr04E=", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "color": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + } + } + }, + "postcss-convert-values": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/postcss-convert-values/download/postcss-convert-values-4.0.1.tgz?cache=0&sync_timestamp=1599672034819&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-convert-values%2Fdownload%2Fpostcss-convert-values-4.0.1.tgz", + "integrity": "sha1-yjgT7U2g+BL51DcDWE5Enr4Ymn8=", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + } + } + }, + "postcss-discard-comments": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-discard-comments/download/postcss-discard-comments-4.0.2.tgz?cache=0&sync_timestamp=1599672035158&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-discard-comments%2Fdownload%2Fpostcss-discard-comments-4.0.2.tgz", + "integrity": "sha1-H7q9LCRr/2qq15l7KwkY9NevQDM=", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-duplicates": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-discard-duplicates/download/postcss-discard-duplicates-4.0.2.tgz?cache=0&sync_timestamp=1599672035521&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-discard-duplicates%2Fdownload%2Fpostcss-discard-duplicates-4.0.2.tgz", + "integrity": "sha1-P+EzzTyCKC5VD8myORdqkge3hOs=", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-empty": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/postcss-discard-empty/download/postcss-discard-empty-4.0.1.tgz?cache=0&sync_timestamp=1599672035856&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-discard-empty%2Fdownload%2Fpostcss-discard-empty-4.0.1.tgz", + "integrity": "sha1-yMlR6fc+2UKAGUWERKAq2Qu592U=", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-overridden": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/postcss-discard-overridden/download/postcss-discard-overridden-4.0.1.tgz?cache=0&sync_timestamp=1599672036180&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-discard-overridden%2Fdownload%2Fpostcss-discard-overridden-4.0.1.tgz", + "integrity": "sha1-ZSrvipZybwKfXj4AFG7npOdV/1c=", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-load-config": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/postcss-load-config/download/postcss-load-config-2.1.0.tgz", + "integrity": "sha1-yE1pK3u3tB3c7ZTuYuirMbQXsAM=", + "dev": true, + "requires": { + "cosmiconfig": "^5.0.0", + "import-cwd": "^2.0.0" + } + }, + "postcss-loader": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/postcss-loader/download/postcss-loader-3.0.0.tgz?cache=0&sync_timestamp=1599584386697&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-loader%2Fdownload%2Fpostcss-loader-3.0.0.tgz", + "integrity": "sha1-a5eUPkfHLYRfqeA/Jzdz1OjdbC0=", + "dev": true, + "requires": { + "loader-utils": "^1.1.0", + "postcss": "^7.0.0", + "postcss-load-config": "^2.0.0", + "schema-utils": "^1.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz?cache=0&sync_timestamp=1598871750711&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-1.0.0.tgz", + "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + } + } + }, + "postcss-merge-longhand": { + "version": "4.0.11", + "resolved": "https://registry.npm.taobao.org/postcss-merge-longhand/download/postcss-merge-longhand-4.0.11.tgz?cache=0&sync_timestamp=1599670256906&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-merge-longhand%2Fdownload%2Fpostcss-merge-longhand-4.0.11.tgz", + "integrity": "sha1-YvSaE+Sg7gTnuY9CuxYGLKJUniQ=", + "dev": true, + "requires": { + "css-color-names": "0.0.4", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "stylehacks": "^4.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + } + } + }, + "postcss-merge-rules": { + "version": "4.0.3", + "resolved": "https://registry.npm.taobao.org/postcss-merge-rules/download/postcss-merge-rules-4.0.3.tgz?cache=0&sync_timestamp=1599670257021&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-merge-rules%2Fdownload%2Fpostcss-merge-rules-4.0.3.tgz", + "integrity": "sha1-NivqT/Wh+Y5AdacTxsslrv75plA=", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "cssnano-util-same-parent": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0", + "vendors": "^1.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npm.taobao.org/postcss-selector-parser/download/postcss-selector-parser-3.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-selector-parser%2Fdownload%2Fpostcss-selector-parser-3.1.2.tgz", + "integrity": "sha1-sxD1xMD9r3b5SQK7qjDbaqhPUnA=", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "postcss-minify-font-values": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-minify-font-values/download/postcss-minify-font-values-4.0.2.tgz?cache=0&sync_timestamp=1599670257113&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-minify-font-values%2Fdownload%2Fpostcss-minify-font-values-4.0.2.tgz", + "integrity": "sha1-zUw0TM5HQ0P6xdgiBqssvLiv1aY=", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + } + } + }, + "postcss-minify-gradients": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-minify-gradients/download/postcss-minify-gradients-4.0.2.tgz?cache=0&sync_timestamp=1599670257199&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-minify-gradients%2Fdownload%2Fpostcss-minify-gradients-4.0.2.tgz", + "integrity": "sha1-k7KcL/UJnFNe7NpWxKpuZlpmNHE=", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "is-color-stop": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + } + } + }, + "postcss-minify-params": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-minify-params/download/postcss-minify-params-4.0.2.tgz?cache=0&sync_timestamp=1599670257293&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-minify-params%2Fdownload%2Fpostcss-minify-params-4.0.2.tgz", + "integrity": "sha1-a5zvAwwR41Jh+V9hjJADbWgNuHQ=", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "browserslist": "^4.0.0", + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "uniqs": "^2.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + } + } + }, + "postcss-minify-selectors": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-minify-selectors/download/postcss-minify-selectors-4.0.2.tgz?cache=0&sync_timestamp=1599670257506&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-minify-selectors%2Fdownload%2Fpostcss-minify-selectors-4.0.2.tgz", + "integrity": "sha1-4uXrQL/uUA0M2SQ1APX46kJi+9g=", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npm.taobao.org/postcss-selector-parser/download/postcss-selector-parser-3.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-selector-parser%2Fdownload%2Fpostcss-selector-parser-3.1.2.tgz", + "integrity": "sha1-sxD1xMD9r3b5SQK7qjDbaqhPUnA=", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "postcss-modules-extract-imports": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/postcss-modules-extract-imports/download/postcss-modules-extract-imports-2.0.0.tgz", + "integrity": "sha1-gYcZoa4doyX5gyRGsBE27rSTzX4=", + "dev": true, + "requires": { + "postcss": "^7.0.5" + } + }, + "postcss-modules-local-by-default": { + "version": "3.0.3", + "resolved": "https://registry.npm.taobao.org/postcss-modules-local-by-default/download/postcss-modules-local-by-default-3.0.3.tgz?cache=0&sync_timestamp=1595733620602&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-modules-local-by-default%2Fdownload%2Fpostcss-modules-local-by-default-3.0.3.tgz", + "integrity": "sha1-uxTgzHgnnVBNvcv9fgyiiZP/u7A=", + "dev": true, + "requires": { + "icss-utils": "^4.1.1", + "postcss": "^7.0.32", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-modules-scope": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/postcss-modules-scope/download/postcss-modules-scope-2.2.0.tgz", + "integrity": "sha1-OFyuATzHdD9afXYC0Qc6iequYu4=", + "dev": true, + "requires": { + "postcss": "^7.0.6", + "postcss-selector-parser": "^6.0.0" + } + }, + "postcss-modules-values": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/postcss-modules-values/download/postcss-modules-values-3.0.0.tgz", + "integrity": "sha1-W1AA1uuuKbQlUwG0o6VFdEI+fxA=", + "dev": true, + "requires": { + "icss-utils": "^4.0.0", + "postcss": "^7.0.6" + } + }, + "postcss-normalize-charset": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/postcss-normalize-charset/download/postcss-normalize-charset-4.0.1.tgz?cache=0&sync_timestamp=1599670257383&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-normalize-charset%2Fdownload%2Fpostcss-normalize-charset-4.0.1.tgz", + "integrity": "sha1-izWt067oOhNrBHHg1ZvlilAoXdQ=", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-normalize-display-values": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-normalize-display-values/download/postcss-normalize-display-values-4.0.2.tgz?cache=0&sync_timestamp=1599670257599&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-normalize-display-values%2Fdownload%2Fpostcss-normalize-display-values-4.0.2.tgz", + "integrity": "sha1-Db4EpM6QY9RmftK+R2u4MMglk1o=", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + } + } + }, + "postcss-normalize-positions": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-normalize-positions/download/postcss-normalize-positions-4.0.2.tgz?cache=0&sync_timestamp=1599670257682&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-normalize-positions%2Fdownload%2Fpostcss-normalize-positions-4.0.2.tgz", + "integrity": "sha1-BfdX+E8mBDc3g2ipH4ky1LECkX8=", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + } + } + }, + "postcss-normalize-repeat-style": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-normalize-repeat-style/download/postcss-normalize-repeat-style-4.0.2.tgz?cache=0&sync_timestamp=1599670257873&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-normalize-repeat-style%2Fdownload%2Fpostcss-normalize-repeat-style-4.0.2.tgz", + "integrity": "sha1-xOu8KJ85kaAo1EdRy90RkYsXkQw=", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + } + } + }, + "postcss-normalize-string": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-normalize-string/download/postcss-normalize-string-4.0.2.tgz?cache=0&sync_timestamp=1599670257788&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-normalize-string%2Fdownload%2Fpostcss-normalize-string-4.0.2.tgz", + "integrity": "sha1-zUTECrB6DHo23F6Zqs4eyk7CaQw=", + "dev": true, + "requires": { + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + } + } + }, + "postcss-normalize-timing-functions": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-normalize-timing-functions/download/postcss-normalize-timing-functions-4.0.2.tgz?cache=0&sync_timestamp=1599670257997&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-normalize-timing-functions%2Fdownload%2Fpostcss-normalize-timing-functions-4.0.2.tgz", + "integrity": "sha1-jgCcoqOUnNr4rSPmtquZy159KNk=", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + } + } + }, + "postcss-normalize-unicode": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/postcss-normalize-unicode/download/postcss-normalize-unicode-4.0.1.tgz?cache=0&sync_timestamp=1599670258081&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-normalize-unicode%2Fdownload%2Fpostcss-normalize-unicode-4.0.1.tgz", + "integrity": "sha1-hBvUj9zzAZrUuqdJOj02O1KuHPs=", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + } + } + }, + "postcss-normalize-url": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/postcss-normalize-url/download/postcss-normalize-url-4.0.1.tgz?cache=0&sync_timestamp=1599670258196&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-normalize-url%2Fdownload%2Fpostcss-normalize-url-4.0.1.tgz", + "integrity": "sha1-EOQ3+GvHx+WPe5ZS7YeNqqlfquE=", + "dev": true, + "requires": { + "is-absolute-url": "^2.0.0", + "normalize-url": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + } + } + }, + "postcss-normalize-whitespace": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-normalize-whitespace/download/postcss-normalize-whitespace-4.0.2.tgz?cache=0&sync_timestamp=1599670258290&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-normalize-whitespace%2Fdownload%2Fpostcss-normalize-whitespace-4.0.2.tgz", + "integrity": "sha1-vx1AcP5Pzqh9E0joJdjMDF+qfYI=", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + } + } + }, + "postcss-ordered-values": { + "version": "4.1.2", + "resolved": "https://registry.npm.taobao.org/postcss-ordered-values/download/postcss-ordered-values-4.1.2.tgz?cache=0&sync_timestamp=1599670258382&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-ordered-values%2Fdownload%2Fpostcss-ordered-values-4.1.2.tgz", + "integrity": "sha1-DPdcgg7H1cTSgBiVWeC1ceusDu4=", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + } + } + }, + "postcss-prefix-selector": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/postcss-prefix-selector/-/postcss-prefix-selector-1.13.0.tgz", + "integrity": "sha512-cZtbe79XeClbrip8WODngB8PmF/FpaeYpt8IX1aefIHarjxfBYWO6sETlNopvp2u2c7XFGYQeUTEgF1onsNJ5A==", + "dev": true, + "requires": { + "postcss": "^8.3.6" + }, + "dependencies": { + "postcss": { + "version": "8.3.7", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.7.tgz", + "integrity": "sha512-9SaY7nnyQ63/WittqZYAvkkYPyKxchMKH71UDzeTmWuLSvxTRpeEeABZAzlCi55cuGcoFyoV/amX2BdsafQidQ==", + "dev": true, + "requires": { + "nanocolors": "^0.1.5", + "nanoid": "^3.1.25", + "source-map-js": "^0.6.2" + } + } + } + }, + "postcss-reduce-initial": { + "version": "4.0.3", + "resolved": "https://registry.npm.taobao.org/postcss-reduce-initial/download/postcss-reduce-initial-4.0.3.tgz?cache=0&sync_timestamp=1599670258477&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-reduce-initial%2Fdownload%2Fpostcss-reduce-initial-4.0.3.tgz", + "integrity": "sha1-f9QuvqXpyBRgljniwuhK4nC6SN8=", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0" + } + }, + "postcss-reduce-transforms": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-reduce-transforms/download/postcss-reduce-transforms-4.0.2.tgz?cache=0&sync_timestamp=1599670258690&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-reduce-transforms%2Fdownload%2Fpostcss-reduce-transforms-4.0.2.tgz", + "integrity": "sha1-F++kBerMbge+NBSlyi0QdGgdTik=", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + } + } + }, + "postcss-selector-parser": { + "version": "6.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-selector-parser/download/postcss-selector-parser-6.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-selector-parser%2Fdownload%2Fpostcss-selector-parser-6.0.2.tgz", + "integrity": "sha1-k0z3mdAWyDQRhZ4J3Oyt4BKG7Fw=", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "postcss-svgo": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-svgo/download/postcss-svgo-4.0.2.tgz?cache=0&sync_timestamp=1599670258791&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-svgo%2Fdownload%2Fpostcss-svgo-4.0.2.tgz", + "integrity": "sha1-F7mXvHEbMzurFDqu07jT1uPTglg=", + "dev": true, + "requires": { + "is-svg": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "svgo": "^1.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + } + } + }, + "postcss-unique-selectors": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/postcss-unique-selectors/download/postcss-unique-selectors-4.0.1.tgz?cache=0&sync_timestamp=1599670258883&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-unique-selectors%2Fdownload%2Fpostcss-unique-selectors-4.0.1.tgz", + "integrity": "sha1-lEaRHzKJv9ZMbWgPBzwDsfnuS6w=", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "postcss": "^7.0.0", + "uniqs": "^2.0.0" + } + }, + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-4.1.0.tgz", + "integrity": "sha1-RD9qIM7WSBor2k+oUypuVdeJoss=", + "dev": true + }, + "posthtml": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.9.2.tgz", + "integrity": "sha1-9MBtufZ7Yf0XxOJW5+PZUVv3Jv0=", + "dev": true, + "requires": { + "posthtml-parser": "^0.2.0", + "posthtml-render": "^1.0.5" + } + }, + "posthtml-parser": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.2.1.tgz", + "integrity": "sha1-NdUw3jhnQMK6JP8usvrznM3ycd0=", + "dev": true, + "requires": { + "htmlparser2": "^3.8.3", + "isobject": "^2.1.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "posthtml-rename-id": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/posthtml-rename-id/-/posthtml-rename-id-1.0.12.tgz", + "integrity": "sha512-UKXf9OF/no8WZo9edRzvuMenb6AD5hDLzIepJW+a4oJT+T/Lx7vfMYWT4aWlGNQh0WMhnUx1ipN9OkZ9q+ddEw==", + "dev": true, + "requires": { + "escape-string-regexp": "1.0.5" + } + }, + "posthtml-render": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-1.4.0.tgz", + "integrity": "sha512-W1779iVHGfq0Fvh2PROhCe2QhB8mEErgqzo1wpIt36tCgChafP+hbXIhLDOM8ePJrZcFs0vkNEtdibEWVqChqw==", + "dev": true + }, + "posthtml-svg-mode": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/posthtml-svg-mode/-/posthtml-svg-mode-1.0.3.tgz", + "integrity": "sha512-hEqw9NHZ9YgJ2/0G7CECOeuLQKZi8HjWLkBaSVtOWjygQ9ZD8P7tqeowYs7WrFdKsWEKG7o+IlsPY8jrr0CJpQ==", + "dev": true, + "requires": { + "merge-options": "1.0.1", + "posthtml": "^0.9.2", + "posthtml-parser": "^0.2.1", + "posthtml-render": "^1.0.6" + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/prelude-ls/download/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/prepend-http/download/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true + }, + "prettier": { + "version": "1.19.1", + "resolved": "https://registry.npm.taobao.org/prettier/download/prettier-1.19.1.tgz?cache=0&sync_timestamp=1598414069360&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fprettier%2Fdownload%2Fprettier-1.19.1.tgz", + "integrity": "sha1-99f1/4qc2HKnvkyhQglZVqYHl8s=", + "dev": true, + "optional": true + }, + "pretty": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/pretty/download/pretty-2.0.0.tgz", + "integrity": "sha1-rbx5YLe7/iiaVX3F9zdhmiINBqU=", + "dev": true, + "requires": { + "condense-newlines": "^0.2.1", + "extend-shallow": "^2.0.1", + "js-beautify": "^1.6.12" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "pretty-error": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/pretty-error/download/pretty-error-2.1.1.tgz", + "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", + "dev": true, + "requires": { + "renderkid": "^2.0.1", + "utila": "~0.4" + } + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npm.taobao.org/process/download/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-2.0.1.tgz", + "integrity": "sha1-eCDZsWEgzFXKmud5JoCufbptf+I=", + "dev": true + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npm.taobao.org/progress/download/progress-2.0.3.tgz", + "integrity": "sha1-foz42PW48jnBvGi+tOt4Vn1XLvg=", + "dev": true + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/promise-inflight/download/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npm.taobao.org/proto-list/download/proto-list-1.2.4.tgz", + "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", + "dev": true + }, + "proxy-addr": { + "version": "2.0.6", + "resolved": "https://registry.npm.taobao.org/proxy-addr/download/proxy-addr-2.0.6.tgz", + "integrity": "sha1-/cIzZQVEfT8vLGOO0nLK9hS7sr8=", + "dev": true, + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.1" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/prr/download/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/pseudomap/download/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npm.taobao.org/psl/download/psl-1.8.0.tgz", + "integrity": "sha1-kyb4vPsBOtzABf3/BWrM4CDlHCQ=", + "dev": true + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npm.taobao.org/public-encrypt/download/public-encrypt-4.0.3.tgz", + "integrity": "sha1-T8ydd6B+SLp1J+fL4N4z0HATMeA=", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.11.9.tgz", + "integrity": "sha1-JtVWgpRY+dHoH8SJUkk9C6NQeCg=", + "dev": true + } + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/pump/download/pump-3.0.0.tgz", + "integrity": "sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ=", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npm.taobao.org/pumpify/download/pumpify-1.5.1.tgz", + "integrity": "sha1-NlE74karJ1cLGjdKXOJ4v9dDcM4=", + "dev": true, + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/pump/download/pump-2.0.1.tgz", + "integrity": "sha1-Ejma3W5M91Jtlzy8i1zi4pCLOQk=", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/punycode/download/punycode-2.1.1.tgz", + "integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew=", + "dev": true + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npm.taobao.org/q/download/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npm.taobao.org/qs/download/qs-6.5.2.tgz", + "integrity": "sha1-yzroBuh0BERYTvFUzo7pjUA/PjY=", + "dev": true + }, + "query-string": { + "version": "4.3.4", + "resolved": "https://registry.npm.taobao.org/query-string/download/query-string-4.3.4.tgz", + "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", + "dev": true, + "requires": { + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npm.taobao.org/querystring/download/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npm.taobao.org/querystring-es3/download/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true + }, + "querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/querystringify/download/querystringify-2.2.0.tgz?cache=0&sync_timestamp=1597686771604&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fquerystringify%2Fdownload%2Fquerystringify-2.2.0.tgz", + "integrity": "sha1-M0WUG0FTy50ILY7uTNogFqmu9/Y=", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/randombytes/download/randombytes-2.1.0.tgz", + "integrity": "sha1-32+ENy8CcNxlzfYpE0mrekc9Tyo=", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/randomfill/download/randomfill-1.0.4.tgz", + "integrity": "sha1-ySGW/IarQr6YPxvzF3giSTHWFFg=", + "dev": true, + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npm.taobao.org/range-parser/download/range-parser-1.2.1.tgz", + "integrity": "sha1-PPNwI9GZ4cJNGlW4SADC8+ZGgDE=", + "dev": true + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npm.taobao.org/raw-body/download/raw-body-2.4.0.tgz", + "integrity": "sha1-oc5vucm8NWylLoklarWQWeE9AzI=", + "dev": true, + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npm.taobao.org/read-pkg/download/read-pkg-5.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fread-pkg%2Fdownload%2Fread-pkg-5.2.0.tgz", + "integrity": "sha1-e/KVQ4yloz5WzTDgU7NO5yUMk8w=", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.7.tgz?cache=0&sync_timestamp=1581624324274&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freadable-stream%2Fdownload%2Freadable-stream-2.3.7.tgz", + "integrity": "sha1-Hsoc9xGu+BTAT2IlKjamL2yyO1c=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "3.4.0", + "resolved": "https://registry.npm.taobao.org/readdirp/download/readdirp-3.4.0.tgz", + "integrity": "sha1-n9zN+ekVWAVEkiGsZF6DA6tbmto=", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "regenerate": { + "version": "1.4.1", + "resolved": "https://registry.npm.taobao.org/regenerate/download/regenerate-1.4.1.tgz?cache=0&sync_timestamp=1591302331571&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerate%2Fdownload%2Fregenerate-1.4.1.tgz", + "integrity": "sha1-ytkq2Oa1kXc0hfvgWkhcr09Ffm8=", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "8.2.0", + "resolved": "https://registry.npm.taobao.org/regenerate-unicode-properties/download/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha1-5d5xEdZV57pgwFfb6f83yH5lzew=", + "dev": true, + "requires": { + "regenerate": "^1.4.0" + } + }, + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.13.7.tgz?cache=0&sync_timestamp=1595456311465&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.13.7.tgz", + "integrity": "sha1-ysLazIoepnX+qrrriugziYrkb1U=", + "dev": true + }, + "regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npm.taobao.org/regenerator-transform/download/regenerator-transform-0.14.5.tgz", + "integrity": "sha1-yY2hVGg2ccnE3LFuznNlF+G3/rQ=", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/regex-not/download/regex-not-1.0.2.tgz", + "integrity": "sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw=", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regexp.prototype.flags": { + "version": "1.3.0", + "resolved": "https://registry.npm.taobao.org/regexp.prototype.flags/download/regexp.prototype.flags-1.3.0.tgz?cache=0&sync_timestamp=1576388141321&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregexp.prototype.flags%2Fdownload%2Fregexp.prototype.flags-1.3.0.tgz", + "integrity": "sha1-erqJs8E6ZFCdq888qNn7ub31y3U=", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + } + }, + "regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/regexpp/download/regexpp-2.0.1.tgz", + "integrity": "sha1-jRnTHPYySCtYkEn4KB+T28uk0H8=", + "dev": true + }, + "regexpu-core": { + "version": "4.7.0", + "resolved": "https://registry.npm.taobao.org/regexpu-core/download/regexpu-core-4.7.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregexpu-core%2Fdownload%2Fregexpu-core-4.7.0.tgz", + "integrity": "sha1-/L9FjFBDGwu3tF1pZ7gZLZHz2Tg=", + "dev": true, + "requires": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.2.0", + "regjsgen": "^0.5.1", + "regjsparser": "^0.6.4", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.2.0" + } + }, + "regjsgen": { + "version": "0.5.2", + "resolved": "https://registry.npm.taobao.org/regjsgen/download/regjsgen-0.5.2.tgz", + "integrity": "sha1-kv8pX7He7L9uzaslQ9IH6RqjNzM=", + "dev": true + }, + "regjsparser": { + "version": "0.6.4", + "resolved": "https://registry.npm.taobao.org/regjsparser/download/regjsparser-0.6.4.tgz", + "integrity": "sha1-p2n4aEMIQBpm6bUp0kNv9NBmYnI=", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npm.taobao.org/jsesc/download/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npm.taobao.org/relateurl/download/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "dev": true + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/remove-trailing-separator/download/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "renderkid": { + "version": "2.0.3", + "resolved": "https://registry.npm.taobao.org/renderkid/download/renderkid-2.0.3.tgz", + "integrity": "sha1-OAF5wv9a4TZcUivy/Pz/AcW3QUk=", + "dev": true, + "requires": { + "css-select": "^1.1.0", + "dom-converter": "^0.2", + "htmlparser2": "^3.3.0", + "strip-ansi": "^3.0.0", + "utila": "^0.4.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz?cache=0&sync_timestamp=1570188663907&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "css-select": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/css-select/download/css-select-1.2.0.tgz?cache=0&sync_timestamp=1573341911322&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss-select%2Fdownload%2Fcss-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "dev": true, + "requires": { + "boolbase": "~1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "nth-check": "~1.0.1" + } + }, + "css-what": { + "version": "2.1.3", + "resolved": "https://registry.npm.taobao.org/css-what/download/css-what-2.1.3.tgz?cache=0&sync_timestamp=1590961613221&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss-what%2Fdownload%2Fcss-what-2.1.3.tgz", + "integrity": "sha1-ptdgRXM2X+dGhsPzEcVlE9iChfI=", + "dev": true + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npm.taobao.org/domutils/download/domutils-1.5.1.tgz?cache=0&sync_timestamp=1597680509643&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdomutils%2Fdownload%2Fdomutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npm.taobao.org/repeat-element/download/repeat-element-1.1.3.tgz", + "integrity": "sha1-eC4NglwMWjuzlzH4Tv7mt0Lmsc4=", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npm.taobao.org/repeat-string/download/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npm.taobao.org/request/download/request-2.88.2.tgz", + "integrity": "sha1-1zyRhzHLWofaBH4gcjQUb2ZNErM=", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } + }, + "request-promise-core": { + "version": "1.1.4", + "resolved": "https://registry.npm.taobao.org/request-promise-core/download/request-promise-core-1.1.4.tgz?cache=0&sync_timestamp=1595378681719&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frequest-promise-core%2Fdownload%2Frequest-promise-core-1.1.4.tgz", + "integrity": "sha1-Pu3UIjII1BmGe3jOgVFn0QWToi8=", + "dev": true, + "requires": { + "lodash": "^4.17.19" + } + }, + "request-promise-native": { + "version": "1.0.9", + "resolved": "https://registry.npm.taobao.org/request-promise-native/download/request-promise-native-1.0.9.tgz", + "integrity": "sha1-5AcSBSal79yaObKKVnm/R7nZ3Cg=", + "dev": true, + "requires": { + "request-promise-core": "1.1.4", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/require-directory/download/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/require-main-filename/download/require-main-filename-2.0.0.tgz", + "integrity": "sha1-0LMp7MfMD2Fkn2IhW+aa9UqomJs=", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/requires-port/download/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" + }, + "resolve": { + "version": "1.17.0", + "resolved": "https://registry.npm.taobao.org/resolve/download/resolve-1.17.0.tgz", + "integrity": "sha1-sllBtUloIxzC0bt2p5y38sC/hEQ=", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/resolve-cwd/download/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/resolve-from/download/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npm.taobao.org/resolve-url/download/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/restore-cursor/download/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npm.taobao.org/ret/download/ret-0.1.15.tgz", + "integrity": "sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w=", + "dev": true + }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npm.taobao.org/retry/download/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/reusify/download/reusify-1.0.4.tgz", + "integrity": "sha1-kNo4Kx4SbvwCFG6QhFqI2xKSXXY=", + "dev": true + }, + "rgb-regex": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/rgb-regex/download/rgb-regex-1.0.1.tgz", + "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=", + "dev": true + }, + "rgba-regex": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/rgba-regex/download/rgba-regex-1.0.0.tgz", + "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", + "dev": true + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npm.taobao.org/rimraf/download/rimraf-2.7.1.tgz", + "integrity": "sha1-NXl/E6f9rcVmFCwp1PB8ytSD4+w=", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/ripemd160/download/ripemd160-2.0.2.tgz", + "integrity": "sha1-ocGm9iR1FXe6XQeRTLyShQWFiQw=", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "run-async": { + "version": "2.4.1", + "resolved": "https://registry.npm.taobao.org/run-async/download/run-async-2.4.1.tgz", + "integrity": "sha1-hEDsz5nqPnC9QJ1JqriOEMGJpFU=", + "dev": true + }, + "run-parallel": { + "version": "1.1.9", + "resolved": "https://registry.npm.taobao.org/run-parallel/download/run-parallel-1.1.9.tgz", + "integrity": "sha1-yd06fPn0ssS2JE4XOm7YZuYd1nk=", + "dev": true + }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/run-queue/download/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dev": true, + "requires": { + "aproba": "^1.1.1" + } + }, + "rxjs": { + "version": "6.6.3", + "resolved": "https://registry.npm.taobao.org/rxjs/download/rxjs-6.6.3.tgz?cache=0&sync_timestamp=1599403171365&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frxjs%2Fdownload%2Frxjs-6.6.3.tgz", + "integrity": "sha1-jKhGNcTaqQDA05Z6buesYCce5VI=", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz", + "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=" + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/safe-regex/download/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npm.taobao.org/safer-buffer/download/safer-buffer-2.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsafer-buffer%2Fdownload%2Fsafer-buffer-2.1.2.tgz", + "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=", + "dev": true + }, + "sass": { + "version": "1.26.10", + "resolved": "https://registry.npm.taobao.org/sass/download/sass-1.26.10.tgz", + "integrity": "sha1-hR0SYCHNyT3svyAdHsoqIO5DR2A=", + "dev": true, + "requires": { + "chokidar": ">=2.0.0 <4.0.0" + } + }, + "sass-loader": { + "version": "8.0.2", + "resolved": "https://registry.npm.taobao.org/sass-loader/download/sass-loader-8.0.2.tgz?cache=0&sync_timestamp=1599136706605&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsass-loader%2Fdownload%2Fsass-loader-8.0.2.tgz", + "integrity": "sha1-3r7NjDziQ8dkVPLoKQSCFQOACQ0=", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "loader-utils": "^1.2.3", + "neo-async": "^2.6.1", + "schema-utils": "^2.6.1", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz", + "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=", + "dev": true + } + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npm.taobao.org/sax/download/sax-1.2.4.tgz", + "integrity": "sha1-KBYjTiN4vdxOU1T6tcqold9xANk=", + "dev": true + }, + "saxes": { + "version": "3.1.11", + "resolved": "https://registry.npm.taobao.org/saxes/download/saxes-3.1.11.tgz", + "integrity": "sha1-1Z0f0zLskq2YouCy7mRHAjhLHFs=", + "dev": true, + "requires": { + "xmlchars": "^2.1.1" + } + }, + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-2.7.1.tgz?cache=0&sync_timestamp=1598871750711&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-2.7.1.tgz", + "integrity": "sha1-HKTzLRskxZDCA7jnpQvw6kzTlNc=", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + } + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/select-hose/download/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "selfsigned": { + "version": "1.10.7", + "resolved": "https://registry.npm.taobao.org/selfsigned/download/selfsigned-1.10.7.tgz", + "integrity": "sha1-2lgZ/QSdVXTyjoipvMbbxubzkGs=", + "dev": true, + "requires": { + "node-forge": "0.9.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz", + "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=" + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npm.taobao.org/send/download/send-0.17.1.tgz", + "integrity": "sha1-wdiwWfeQD3Rm3Uk4vcROEd2zdsg=", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npm.taobao.org/mime/download/mime-1.6.0.tgz?cache=0&sync_timestamp=1590596706367&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime%2Fdownload%2Fmime-1.6.0.tgz", + "integrity": "sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=", + "dev": true + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.1.tgz", + "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=", + "dev": true + } + } + }, + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/serialize-javascript/download/serialize-javascript-4.0.0.tgz?cache=0&sync_timestamp=1599653071356&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fserialize-javascript%2Fdownload%2Fserialize-javascript-4.0.0.tgz", + "integrity": "sha1-tSXhI4SJpez8Qq+sw/6Z5mb0sao=", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npm.taobao.org/serve-index/download/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npm.taobao.org/http-errors/download/http-errors-1.6.3.tgz?cache=0&sync_timestamp=1593407858306&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-errors%2Fdownload%2Fhttp-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz?cache=0&sync_timestamp=1560975547815&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finherits%2Fdownload%2Finherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.0.tgz", + "integrity": "sha1-0L2FU2iHtv58DYGMuWLZ2RxU5lY=", + "dev": true + } + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npm.taobao.org/serve-static/download/serve-static-1.14.1.tgz", + "integrity": "sha1-Zm5jbcTwEPfvKZcKiKZ0MgiYsvk=", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/set-blocking/download/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/set-value/download/set-value-2.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fset-value%2Fdownload%2Fset-value-2.0.1.tgz", + "integrity": "sha1-oY1AUw5vB95CKMfe/kInr4ytAFs=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npm.taobao.org/setimmediate/download/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.1.tgz", + "integrity": "sha1-fpWsskqpL1iF4KvvW6ExMw1K5oM=", + "dev": true + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npm.taobao.org/sha.js/download/sha.js-2.4.11.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsha.js%2Fdownload%2Fsha.js-2.4.11.tgz", + "integrity": "sha1-N6XPC4HsvGlD3hCbopYNGyZYSuc=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npm.taobao.org/shallow-clone/download/shallow-clone-3.0.1.tgz", + "integrity": "sha1-jymBrZJTH1UDWwH7IwdppA4C76M=", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/shebang-command/download/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/shebang-regex/download/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "shell-quote": { + "version": "1.7.2", + "resolved": "https://registry.npm.taobao.org/shell-quote/download/shell-quote-1.7.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fshell-quote%2Fdownload%2Fshell-quote-1.7.2.tgz", + "integrity": "sha1-Z6fQLHbJ2iT5nSCAj8re0ODgS+I=", + "dev": true + }, + "sigmund": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/sigmund/download/sigmund-1.0.1.tgz", + "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", + "dev": true + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.3.tgz", + "integrity": "sha1-oUEMLt2PB3sItOJTyOrPyvBXRhw=", + "dev": true + }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npm.taobao.org/simple-swizzle/download/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "dev": true, + "requires": { + "is-arrayish": "^0.3.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.3.2.tgz", + "integrity": "sha1-RXSirlb3qyBolvtDHq7tBm/fjwM=", + "dev": true + } + } + }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/slash/download/slash-2.0.0.tgz", + "integrity": "sha1-3lUoUaF1nfOo8gZTVEL17E3eq0Q=", + "dev": true + }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/slice-ansi/download/slice-ansi-2.1.0.tgz", + "integrity": "sha1-ys12k0YaY3pXiNkqfdT7oGjoFjY=", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + } + } + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npm.taobao.org/snapdragon/download/snapdragon-0.8.2.tgz", + "integrity": "sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0=", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/snapdragon-node/download/snapdragon-node-2.1.1.tgz", + "integrity": "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npm.taobao.org/snapdragon-util/download/snapdragon-util-3.0.1.tgz", + "integrity": "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "sockjs": { + "version": "0.3.20", + "resolved": "https://registry.npm.taobao.org/sockjs/download/sockjs-0.3.20.tgz", + "integrity": "sha1-smooPsVi74smh7RAM6Tuzqx12FU=", + "dev": true, + "requires": { + "faye-websocket": "^0.10.0", + "uuid": "^3.4.0", + "websocket-driver": "0.6.5" + } + }, + "sockjs-client": { + "version": "1.4.0", + "resolved": "https://registry.npm.taobao.org/sockjs-client/download/sockjs-client-1.4.0.tgz?cache=0&sync_timestamp=1596410219305&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsockjs-client%2Fdownload%2Fsockjs-client-1.4.0.tgz", + "integrity": "sha1-yfJWjhnI/YFztJl+o0IOC7MGx9U=", + "dev": true, + "requires": { + "debug": "^3.2.5", + "eventsource": "^1.0.7", + "faye-websocket": "~0.11.1", + "inherits": "^2.0.3", + "json3": "^3.3.2", + "url-parse": "^1.4.3" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-3.2.6.tgz", + "integrity": "sha1-6D0X3hbYp++3cX7b5fsQE17uYps=", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "faye-websocket": { + "version": "0.11.3", + "resolved": "https://registry.npm.taobao.org/faye-websocket/download/faye-websocket-0.11.3.tgz", + "integrity": "sha1-XA6aiWjokSwoZjn96XeosgnyUI4=", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + } + } + }, + "sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/sort-keys/download/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "dev": true, + "requires": { + "is-plain-obj": "^1.0.0" + } + }, + "source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/source-list-map/download/source-list-map-2.0.1.tgz", + "integrity": "sha1-OZO9hzv8SEecyp6jpUeDXHwVSzQ=", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", + "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npm.taobao.org/source-map-resolve/download/source-map-resolve-0.5.3.tgz?cache=0&sync_timestamp=1584829515586&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map-resolve%2Fdownload%2Fsource-map-resolve-0.5.3.tgz", + "integrity": "sha1-GQhmvs51U+H48mei7oLGBrVQmho=", + "dev": true, + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npm.taobao.org/source-map-support/download/source-map-support-0.5.19.tgz?cache=0&sync_timestamp=1587719289626&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map-support%2Fdownload%2Fsource-map-support-0.5.19.tgz", + "integrity": "sha1-qYti+G3K9PZzmWSMCFKRq56P7WE=", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + } + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npm.taobao.org/source-map-url/download/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/spdx-correct/download/spdx-correct-3.1.1.tgz?cache=0&sync_timestamp=1590161967473&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fspdx-correct%2Fdownload%2Fspdx-correct-3.1.1.tgz", + "integrity": "sha1-3s6BrJweZxPl99G28X1Gj6U9iak=", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npm.taobao.org/spdx-exceptions/download/spdx-exceptions-2.3.0.tgz", + "integrity": "sha1-PyjOGnegA3JoPq3kpDMYNSeiFj0=", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npm.taobao.org/spdx-expression-parse/download/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha1-z3D1BILu/cmOPOCmgz5KU87rpnk=", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.5", + "resolved": "https://registry.npm.taobao.org/spdx-license-ids/download/spdx-license-ids-3.0.5.tgz?cache=0&sync_timestamp=1562834220236&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fspdx-license-ids%2Fdownload%2Fspdx-license-ids-3.0.5.tgz", + "integrity": "sha1-NpS1gEVnpFjTyARYQqY1hjL2JlQ=", + "dev": true + }, + "spdy": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/spdy/download/spdy-4.0.2.tgz?cache=0&sync_timestamp=1585970491493&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fspdy%2Fdownload%2Fspdy-4.0.2.tgz", + "integrity": "sha1-t09GYgOj7aRSwCSSuR+56EonZ3s=", + "dev": true, + "requires": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + } + }, + "spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/spdy-transport/download/spdy-transport-3.0.0.tgz", + "integrity": "sha1-ANSGOmQArXXfkzYaFghgXl3NzzE=", + "dev": true, + "requires": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.6.0.tgz?cache=0&sync_timestamp=1581624324274&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freadable-stream%2Fdownload%2Freadable-stream-3.6.0.tgz", + "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/split-string/download/split-string-3.1.0.tgz", + "integrity": "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.0.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsprintf-js%2Fdownload%2Fsprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npm.taobao.org/sshpk/download/sshpk-1.16.1.tgz", + "integrity": "sha1-+2YcC+8ps520B2nuOfpwCT1vaHc=", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "ssri": { + "version": "6.0.1", + "resolved": "https://registry.npm.taobao.org/ssri/download/ssri-6.0.1.tgz", + "integrity": "sha1-KjxBso3UW2K2Nnbst0ABJlrp7dg=", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npm.taobao.org/stable/download/stable-0.1.8.tgz", + "integrity": "sha1-g26zyDgv4pNv6vVEYxAXzn1Ho88=", + "dev": true + }, + "stackframe": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/stackframe/download/stackframe-1.2.0.tgz?cache=0&sync_timestamp=1590854108362&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstackframe%2Fdownload%2Fstackframe-1.2.0.tgz", + "integrity": "sha1-UkKUktY8YuuYmATBFVLj0i53kwM=", + "dev": true + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npm.taobao.org/static-extend/download/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npm.taobao.org/statuses/download/statuses-1.5.0.tgz?cache=0&sync_timestamp=1587327902535&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstatuses%2Fdownload%2Fstatuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + }, + "stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/stealthy-require/download/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", + "dev": true + }, + "stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/stream-browserify/download/stream-browserify-2.0.2.tgz?cache=0&sync_timestamp=1587041194718&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstream-browserify%2Fdownload%2Fstream-browserify-2.0.2.tgz", + "integrity": "sha1-h1IdOKRKp+6RzhzSpH3wy0ndZgs=", + "dev": true, + "requires": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "stream-each": { + "version": "1.2.3", + "resolved": "https://registry.npm.taobao.org/stream-each/download/stream-each-1.2.3.tgz", + "integrity": "sha1-6+J6DDibBPvMIzZClS4Qcxr6m64=", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npm.taobao.org/stream-http/download/stream-http-2.8.3.tgz", + "integrity": "sha1-stJCRpKIpaJ+xP6JM6z2I95lFPw=", + "dev": true, + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/stream-shift/download/stream-shift-1.0.1.tgz?cache=0&sync_timestamp=1576147168429&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstream-shift%2Fdownload%2Fstream-shift-1.0.1.tgz", + "integrity": "sha1-1wiCgVWasneEJCebCHfaPDktWj0=", + "dev": true + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/strict-uri-encode/download/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/string_decoder/download/string_decoder-1.1.1.tgz?cache=0&sync_timestamp=1565170823020&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring_decoder%2Fdownload%2Fstring_decoder-1.1.1.tgz", + "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-4.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring-width%2Fdownload%2Fstring-width-4.2.0.tgz", + "integrity": "sha1-lSGCxGzHssMT0VluYjmSvRY7crU=", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "string.prototype.trimend": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/string.prototype.trimend/download/string.prototype.trimend-1.0.1.tgz?cache=0&sync_timestamp=1586465374694&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring.prototype.trimend%2Fdownload%2Fstring.prototype.trimend-1.0.1.tgz", + "integrity": "sha1-hYEqa4R6wAInD1gIFGBkyZX7aRM=", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "string.prototype.trimstart": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/string.prototype.trimstart/download/string.prototype.trimstart-1.0.1.tgz?cache=0&sync_timestamp=1586465375114&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring.prototype.trimstart%2Fdownload%2Fstring.prototype.trimstart-1.0.1.tgz", + "integrity": "sha1-FK9tnzSwU/fPyJty+PLuFLkDmlQ=", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-6.0.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-6.0.0.tgz", + "integrity": "sha1-CxVx3XZpzNTz4G4U7x7tJiJa5TI=", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-5.0.0.tgz?cache=0&sync_timestamp=1570188663907&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-5.0.0.tgz", + "integrity": "sha1-OIU59VF5vzkznIGvMKZU1p+Hy3U=", + "dev": true + } + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/strip-eof/download/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/strip-final-newline/download/strip-final-newline-2.0.0.tgz", + "integrity": "sha1-ibhS+y/L6Tb29LMYevsKEsGrWK0=", + "dev": true + }, + "strip-indent": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/strip-indent/download/strip-indent-2.0.0.tgz", + "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", + "dev": true + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-2.0.1.tgz?cache=0&sync_timestamp=1594567532500&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-json-comments%2Fdownload%2Fstrip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "stylehacks": { + "version": "4.0.3", + "resolved": "https://registry.npm.taobao.org/stylehacks/download/stylehacks-4.0.3.tgz?cache=0&sync_timestamp=1599672034713&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstylehacks%2Fdownload%2Fstylehacks-4.0.3.tgz", + "integrity": "sha1-Zxj8r00eB9ihMYaQiB6NlnJqcdU=", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npm.taobao.org/postcss-selector-parser/download/postcss-selector-parser-3.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-selector-parser%2Fdownload%2Fpostcss-selector-parser-3.1.2.tgz", + "integrity": "sha1-sxD1xMD9r3b5SQK7qjDbaqhPUnA=", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz?cache=0&sync_timestamp=1598611709087&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-5.5.0.tgz", + "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "svg-baker": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/svg-baker/-/svg-baker-1.7.0.tgz", + "integrity": "sha512-nibslMbkXOIkqKVrfcncwha45f97fGuAOn1G99YwnwTj8kF9YiM6XexPcUso97NxOm6GsP0SIvYVIosBis1xLg==", + "dev": true, + "requires": { + "bluebird": "^3.5.0", + "clone": "^2.1.1", + "he": "^1.1.1", + "image-size": "^0.5.1", + "loader-utils": "^1.1.0", + "merge-options": "1.0.1", + "micromatch": "3.1.0", + "postcss": "^5.2.17", + "postcss-prefix-selector": "^1.6.0", + "posthtml-rename-id": "^1.0", + "posthtml-svg-mode": "^1.0.3", + "query-string": "^4.3.2", + "traverse": "^0.6.6" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "dev": true + }, + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + }, + "dependencies": { + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + } + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + }, + "dependencies": { + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + } + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + } + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + }, + "micromatch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.0.tgz", + "integrity": "sha512-3StSelAE+hnRvMs8IdVW7Uhk8CVed5tp+kLLGlBP6WiRAXS21GPGu/Nat4WNPXj2Eoc24B02SaeoyozPMfj0/g==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.2.2", + "define-property": "^1.0.0", + "extend-shallow": "^2.0.1", + "extglob": "^2.0.2", + "fragment-cache": "^0.2.1", + "kind-of": "^5.0.2", + "nanomatch": "^1.2.1", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "svg-baker-runtime": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/svg-baker-runtime/-/svg-baker-runtime-1.4.7.tgz", + "integrity": "sha512-Zorfwwj5+lWjk/oxwSMsRdS2sPQQdTmmsvaSpzU+i9ZWi3zugHLt6VckWfnswphQP0LmOel3nggpF5nETbt6xw==", + "dev": true, + "requires": { + "deepmerge": "1.3.2", + "mitt": "1.1.2", + "svg-baker": "^1.7.0" + }, + "dependencies": { + "deepmerge": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.3.2.tgz", + "integrity": "sha1-FmNpFinU2/42T6EqKk8KqGqjoFA=", + "dev": true + } + } + }, + "svg-sprite-loader": { + "version": "6.0.9", + "resolved": "https://registry.npmjs.org/svg-sprite-loader/-/svg-sprite-loader-6.0.9.tgz", + "integrity": "sha512-V/F3iI1J/xWeO0cRXkEFvhujvBQ3deAPFlhip+AW00Hs+9gighu619mblucIWdRPmDMfcSWJD/ZuXf6HldIskw==", + "dev": true, + "requires": { + "bluebird": "^3.5.0", + "deepmerge": "1.3.2", + "domready": "1.0.8", + "escape-string-regexp": "1.0.5", + "loader-utils": "^1.1.0", + "svg-baker": "^1.5.0", + "svg-baker-runtime": "^1.4.7", + "url-slug": "2.0.0" + }, + "dependencies": { + "deepmerge": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.3.2.tgz", + "integrity": "sha1-FmNpFinU2/42T6EqKk8KqGqjoFA=", + "dev": true + } + } + }, + "svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/svg-tags/download/svg-tags-1.0.0.tgz", + "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=", + "dev": true + }, + "svgo": { + "version": "1.3.2", + "resolved": "https://registry.npm.taobao.org/svgo/download/svgo-1.3.2.tgz?cache=0&sync_timestamp=1572433263159&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsvgo%2Fdownload%2Fsvgo-1.3.2.tgz", + "integrity": "sha1-ttxRHAYzRsnkFbgeQ0ARRbltQWc=", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + } + }, + "symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npm.taobao.org/symbol-tree/download/symbol-tree-3.2.4.tgz", + "integrity": "sha1-QwY30ki6d+B4iDlR+5qg7tfGP6I=", + "dev": true + }, + "table": { + "version": "5.4.6", + "resolved": "https://registry.npm.taobao.org/table/download/table-5.4.6.tgz", + "integrity": "sha1-EpLRlQDOP4YFOwXw6Ofko7shB54=", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "dependencies": { + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-7.0.3.tgz", + "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-3.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring-width%2Fdownload%2Fstring-width-3.1.0.tgz", + "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz", + "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npm.taobao.org/tapable/download/tapable-1.1.3.tgz?cache=0&sync_timestamp=1589549570189&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftapable%2Fdownload%2Ftapable-1.1.3.tgz", + "integrity": "sha1-ofzMBrWNth/XpF2i2kT186Pme6I=", + "dev": true + }, + "terser": { + "version": "4.8.0", + "resolved": "https://registry.npm.taobao.org/terser/download/terser-4.8.0.tgz?cache=0&sync_timestamp=1599141092640&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fterser%2Fdownload%2Fterser-4.8.0.tgz", + "integrity": "sha1-YwVjQ9fHC7KfOvZlhlpG/gOg3xc=", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + } + } + }, + "terser-webpack-plugin": { + "version": "1.4.5", + "resolved": "https://registry.npm.taobao.org/terser-webpack-plugin/download/terser-webpack-plugin-1.4.5.tgz?cache=0&sync_timestamp=1597229593156&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fterser-webpack-plugin%2Fdownload%2Fterser-webpack-plugin-1.4.5.tgz", + "integrity": "sha1-oheu+uozDnNP+sthIOwfoxLWBAs=", + "dev": true, + "requires": { + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^4.0.0", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" + }, + "dependencies": { + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz?cache=0&sync_timestamp=1598871750711&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-1.0.0.tgz", + "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npm.taobao.org/text-table/download/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "thenify": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/thenify/download/thenify-3.3.1.tgz", + "integrity": "sha1-iTLmhqQGYDigFt2eLKRq3Zg4qV8=", + "dev": true, + "requires": { + "any-promise": "^1.0.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npm.taobao.org/thenify-all/download/thenify-all-1.6.0.tgz", + "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", + "dev": true, + "requires": { + "thenify": ">= 3.1.0 < 4" + } + }, + "thread-loader": { + "version": "2.1.3", + "resolved": "https://registry.npm.taobao.org/thread-loader/download/thread-loader-2.1.3.tgz", + "integrity": "sha1-y9LBOfwrLebp0o9iKGq3cMGsvdo=", + "dev": true, + "requires": { + "loader-runner": "^2.3.1", + "loader-utils": "^1.1.0", + "neo-async": "^2.6.0" + } + }, + "throttle-debounce": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-1.1.0.tgz", + "integrity": "sha512-XH8UiPCQcWNuk2LYePibW/4qL97+ZQ1AN3FNXwZRBNPPowo/NRU5fAlDCSNBJIYCKbioZfuYtMhG4quqoJhVzg==" + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npm.taobao.org/through/download/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npm.taobao.org/through2/download/through2-2.0.5.tgz", + "integrity": "sha1-AcHjnrMdB8t9A6lqcIIyYLIxMs0=", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "thunky": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/thunky/download/thunky-1.1.0.tgz?cache=0&sync_timestamp=1571043401546&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fthunky%2Fdownload%2Fthunky-1.1.0.tgz", + "integrity": "sha1-Wrr3FKlAXbBQRzK7zNLO3Z75U30=", + "dev": true + }, + "timers-browserify": { + "version": "2.0.11", + "resolved": "https://registry.npm.taobao.org/timers-browserify/download/timers-browserify-2.0.11.tgz", + "integrity": "sha1-gAsfPu4nLlvFPuRloE0OgEwxIR8=", + "dev": true, + "requires": { + "setimmediate": "^1.0.4" + } + }, + "timsort": { + "version": "0.3.0", + "resolved": "https://registry.npm.taobao.org/timsort/download/timsort-0.3.0.tgz", + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", + "dev": true + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npm.taobao.org/tmp/download/tmp-0.0.33.tgz?cache=0&sync_timestamp=1588178571895&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftmp%2Fdownload%2Ftmp-0.0.33.tgz", + "integrity": "sha1-bTQzWIl2jSGyvNoKonfO07G/rfk=", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/to-arraybuffer/download/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/to-fast-properties/download/to-fast-properties-2.0.0.tgz?cache=0&sync_timestamp=1580550317222&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fto-fast-properties%2Fdownload%2Fto-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npm.taobao.org/to-object-path/download/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npm.taobao.org/to-regex/download/to-regex-3.0.2.tgz", + "integrity": "sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4=", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/toidentifier/download/toidentifier-1.0.0.tgz", + "integrity": "sha1-fhvjRw8ed5SLxD2Uo8j013UrpVM=", + "dev": true + }, + "toposort": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/toposort/download/toposort-2.0.2.tgz", + "integrity": "sha1-riF2gXXRVZ1IvvNUILL0li8JwzA=", + "dev": true + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npm.taobao.org/tough-cookie/download/tough-cookie-2.5.0.tgz?cache=0&sync_timestamp=1584646121003&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftough-cookie%2Fdownload%2Ftough-cookie-2.5.0.tgz", + "integrity": "sha1-zZ+yoKodWhK0c72fuW+j3P9lreI=", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/tr46/download/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "traverse": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", + "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=", + "dev": true + }, + "tryer": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/tryer/download/tryer-1.0.1.tgz", + "integrity": "sha1-8shUBoALmw90yfdGW4HqrSQSUvg=", + "dev": true + }, + "ts-pnp": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/ts-pnp/download/ts-pnp-1.2.0.tgz", + "integrity": "sha1-pQCtCEsHmPHDBxrzkeZZEshrypI=", + "dev": true + }, + "tslib": { + "version": "1.13.0", + "resolved": "https://registry.npm.taobao.org/tslib/download/tslib-1.13.0.tgz?cache=0&sync_timestamp=1596753875166&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftslib%2Fdownload%2Ftslib-1.13.0.tgz", + "integrity": "sha1-yIHhPMcBWJTtkUhi0nZDb6mkcEM=", + "dev": true + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npm.taobao.org/tty-browserify/download/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npm.taobao.org/tunnel-agent/download/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npm.taobao.org/tweetnacl/download/tweetnacl-0.14.5.tgz?cache=0&sync_timestamp=1581364203962&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftweetnacl%2Fdownload%2Ftweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npm.taobao.org/type-check/download/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npm.taobao.org/type-detect/download/type-detect-4.0.8.tgz", + "integrity": "sha1-dkb7XxiHHPu3dJ5pvTmmOI63RQw=", + "dev": true + }, + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npm.taobao.org/type-fest/download/type-fest-0.6.0.tgz", + "integrity": "sha1-jSojcNPfiG61yQraHFv2GIrPg4s=", + "dev": true + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npm.taobao.org/type-is/download/type-is-1.6.18.tgz", + "integrity": "sha1-TlUs0F3wlGfcvE73Od6J8s83wTE=", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npm.taobao.org/typedarray/download/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "uglify-js": { + "version": "3.4.10", + "resolved": "https://registry.npm.taobao.org/uglify-js/download/uglify-js-3.4.10.tgz?cache=0&sync_timestamp=1599412871908&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fuglify-js%2Fdownload%2Fuglify-js-3.4.10.tgz", + "integrity": "sha1-mtlWPY6zrN+404WX0q8dgV9qdV8=", + "dev": true, + "requires": { + "commander": "~2.19.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "commander": { + "version": "2.19.0", + "resolved": "https://registry.npm.taobao.org/commander/download/commander-2.19.0.tgz?cache=0&sync_timestamp=1598576116597&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-2.19.0.tgz", + "integrity": "sha1-9hmKqE5bg8RgVLlN3tv+1e6f8So=", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + } + } + }, + "unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/unicode-canonical-property-names-ecmascript/download/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha1-JhmADEyCWADv3YNDr33Zkzy+KBg=", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/unicode-match-property-ecmascript/download/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha1-jtKjJWmWG86SJ9Cc0/+7j+1fAgw=", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/unicode-match-property-value-ecmascript/download/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha1-DZH2AO7rMJaqlisdb8iIduZOpTE=", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/unicode-property-aliases-ecmascript/download/unicode-property-aliases-ecmascript-1.1.0.tgz?cache=0&sync_timestamp=1583945910569&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funicode-property-aliases-ecmascript%2Fdownload%2Funicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha1-3Vepn2IHvt/0Yoq++5TFDblByPQ=", + "dev": true + }, + "unidecode": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/unidecode/-/unidecode-0.1.8.tgz", + "integrity": "sha1-77swFTi8RSRqmsjFWdcvAVMFBT4=", + "dev": true + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/union-value/download/union-value-1.0.1.tgz", + "integrity": "sha1-C2/nuDWuzaYcbqTU8CwUIh4QmEc=", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/uniq/download/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", + "dev": true + }, + "uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/uniqs/download/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", + "dev": true + }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/unique-filename/download/unique-filename-1.1.1.tgz", + "integrity": "sha1-HWl2k2mtoFgxA6HmrodoG1ZXMjA=", + "dev": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/unique-slug/download/unique-slug-2.0.2.tgz", + "integrity": "sha1-uqvOkQg/xk6UWw861hPiZPfNTmw=", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npm.taobao.org/universalify/download/universalify-0.1.2.tgz?cache=0&sync_timestamp=1583530825899&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funiversalify%2Fdownload%2Funiversalify-0.1.2.tgz", + "integrity": "sha1-tkb2m+OULavOzJ1mOcgNwQXvqmY=", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/unpipe/download/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "unquote": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/unquote/download/unquote-1.1.1.tgz", + "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/unset-value/download/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npm.taobao.org/has-value/download/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/isobject/download/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npm.taobao.org/has-values/download/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + } + } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/upath/download/upath-1.2.0.tgz?cache=0&sync_timestamp=1567457281208&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fupath%2Fdownload%2Fupath-1.2.0.tgz", + "integrity": "sha1-j2bbzVWog6za5ECK+LA1pQRMGJQ=", + "dev": true + }, + "upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npm.taobao.org/upper-case/download/upper-case-1.1.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fupper-case%2Fdownload%2Fupper-case-1.1.3.tgz", + "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", + "dev": true + }, + "uri-js": { + "version": "4.4.0", + "resolved": "https://registry.npm.taobao.org/uri-js/download/uri-js-4.4.0.tgz?cache=0&sync_timestamp=1598814377097&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Furi-js%2Fdownload%2Furi-js-4.4.0.tgz", + "integrity": "sha1-qnFCYd55PoqCNHp7zJznTobyhgI=", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npm.taobao.org/urix/download/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npm.taobao.org/url/download/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npm.taobao.org/punycode/download/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } + } + }, + "url-loader": { + "version": "2.3.0", + "resolved": "https://registry.npm.taobao.org/url-loader/download/url-loader-2.3.0.tgz", + "integrity": "sha1-4OLvZY8APvuMpBsPP/v3a6uIZYs=", + "dev": true, + "requires": { + "loader-utils": "^1.2.3", + "mime": "^2.4.4", + "schema-utils": "^2.5.0" + } + }, + "url-parse": { + "version": "1.4.7", + "resolved": "https://registry.npm.taobao.org/url-parse/download/url-parse-1.4.7.tgz", + "integrity": "sha1-qKg1NejACjFuQDpdtKwbm4U64ng=", + "dev": true, + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "url-slug": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/url-slug/-/url-slug-2.0.0.tgz", + "integrity": "sha1-p4nVrtSZXA2VrzM3etHVxo1NcCc=", + "dev": true, + "requires": { + "unidecode": "0.1.8" + } + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/use/download/use-3.1.1.tgz", + "integrity": "sha1-1QyMrHmhn7wg8pEfVuuXP04QBw8=", + "dev": true + }, + "util": { + "version": "0.11.1", + "resolved": "https://registry.npm.taobao.org/util/download/util-0.11.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Futil%2Fdownload%2Futil-0.11.1.tgz", + "integrity": "sha1-MjZzNyDsZLsn9uJvQhqqLhtYjWE=", + "dev": true, + "requires": { + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz?cache=0&sync_timestamp=1560975547815&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finherits%2Fdownload%2Finherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/util.promisify/download/util.promisify-1.0.1.tgz", + "integrity": "sha1-a693dLgO6w91INi4HQeYKlmruu4=", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" + } + }, + "utila": { + "version": "0.4.0", + "resolved": "https://registry.npm.taobao.org/utila/download/utila-0.4.0.tgz", + "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/utils-merge/download/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npm.taobao.org/uuid/download/uuid-3.4.0.tgz?cache=0&sync_timestamp=1595885088251&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fuuid%2Fdownload%2Fuuid-3.4.0.tgz", + "integrity": "sha1-sj5DWK+oogL+ehAK8fX4g/AgB+4=", + "dev": true + }, + "v8-compile-cache": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/v8-compile-cache/download/v8-compile-cache-2.1.1.tgz", + "integrity": "sha1-VLw83UMxe8qR413K8wWxpyN950U=", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npm.taobao.org/validate-npm-package-license/download/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha1-/JH2uce6FchX9MssXe/uw51PQQo=", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/vary/download/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "velocity-animate": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/velocity-animate/-/velocity-animate-1.5.2.tgz", + "integrity": "sha512-m6EXlCAMetKztO1ppBhGU1/1MR3IiEevO6ESq6rcrSQ3Q77xYSW13jkfXW88o4xMrkXJhy/U7j4wFR/twMB0Eg==" + }, + "vendors": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/vendors/download/vendors-1.0.4.tgz?cache=0&sync_timestamp=1579857147055&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvendors%2Fdownload%2Fvendors-1.0.4.tgz", + "integrity": "sha1-4rgApT56Kbk1BsPPQRANFsTErY4=", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npm.taobao.org/verror/download/verror-1.10.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fverror%2Fdownload%2Fverror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/vm-browserify/download/vm-browserify-1.1.2.tgz?cache=0&sync_timestamp=1572870717730&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvm-browserify%2Fdownload%2Fvm-browserify-1.1.2.tgz", + "integrity": "sha1-eGQcSIuObKkadfUR56OzKobl3aA=", + "dev": true + }, + "vue": { + "version": "2.6.12", + "resolved": "https://registry.npm.taobao.org/vue/download/vue-2.6.12.tgz", + "integrity": "sha1-9evU+mvShpQD4pqJau1JBEVskSM=" + }, + "vue-eslint-parser": { + "version": "7.1.0", + "resolved": "https://registry.npm.taobao.org/vue-eslint-parser/download/vue-eslint-parser-7.1.0.tgz?cache=0&sync_timestamp=1589566521118&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-eslint-parser%2Fdownload%2Fvue-eslint-parser-7.1.0.tgz", + "integrity": "sha1-nNvMgj5lawh1B6GRFzK4Z6wQHoM=", + "dev": true, + "requires": { + "debug": "^4.1.1", + "eslint-scope": "^5.0.0", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.2.1", + "esquery": "^1.0.1", + "lodash": "^4.17.15" + }, + "dependencies": { + "eslint-scope": { + "version": "5.1.0", + "resolved": "https://registry.npm.taobao.org/eslint-scope/download/eslint-scope-5.1.0.tgz?cache=0&sync_timestamp=1591269986906&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-scope%2Fdownload%2Feslint-scope-5.1.0.tgz", + "integrity": "sha1-0Plx3+WcaeDK2mhLI9Sdv4JgDOU=", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + } + } + }, + "vue-hot-reload-api": { + "version": "2.3.4", + "resolved": "https://registry.npm.taobao.org/vue-hot-reload-api/download/vue-hot-reload-api-2.3.4.tgz?cache=0&sync_timestamp=1568190386192&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-hot-reload-api%2Fdownload%2Fvue-hot-reload-api-2.3.4.tgz", + "integrity": "sha1-UylVzB6yCKPZkLOp+acFdGV+CPI=", + "dev": true + }, + "vue-loader": { + "version": "15.9.3", + "resolved": "https://registry.npm.taobao.org/vue-loader/download/vue-loader-15.9.3.tgz?cache=0&sync_timestamp=1599639283575&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-loader%2Fdownload%2Fvue-loader-15.9.3.tgz", + "integrity": "sha1-DeNdnlVdPtU5aVFsrFziVTEpndo=", + "dev": true, + "requires": { + "@vue/component-compiler-utils": "^3.1.0", + "hash-sum": "^1.0.2", + "loader-utils": "^1.1.0", + "vue-hot-reload-api": "^2.3.0", + "vue-style-loader": "^4.1.0" + }, + "dependencies": { + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/hash-sum/download/hash-sum-1.0.2.tgz", + "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", + "dev": true + } + } + }, + "vue-loader-v16": { + "version": "npm:vue-loader@16.8.3", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.8.3.tgz", + "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==", + "dev": true, + "optional": true, + "requires": { + "chalk": "^4.1.0", + "hash-sum": "^2.0.0", + "loader-utils": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "optional": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "optional": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "optional": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "optional": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "optional": true + }, + "loader-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "dev": true, + "optional": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "optional": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "vue-page-split": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/vue-page-split/-/vue-page-split-1.2.2.tgz", + "integrity": "sha512-GQF/j6buQGALl+zaCAw/4byV/6F0KB3jZga7zgiDOhfz/78rxrpCOrf2RAdB300rjt0+WK6JmmVx0GLQxuUHHQ==", + "requires": { + "core-js": "^3.6.5", + "vue": "^2.6.11" + } + }, + "vue-router": { + "version": "3.4.3", + "resolved": "https://registry.npm.taobao.org/vue-router/download/vue-router-3.4.3.tgz", + "integrity": "sha1-+pN2hhbuM4qhdPFgrJZRZ/pXL/o=" + }, + "vue-style-loader": { + "version": "4.1.2", + "resolved": "https://registry.npm.taobao.org/vue-style-loader/download/vue-style-loader-4.1.2.tgz", + "integrity": "sha1-3t80mAbyXOtOZPOtfApE+6c1/Pg=", + "dev": true, + "requires": { + "hash-sum": "^1.0.2", + "loader-utils": "^1.0.2" + }, + "dependencies": { + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/hash-sum/download/hash-sum-1.0.2.tgz", + "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", + "dev": true + } + } + }, + "vue-template-compiler": { + "version": "2.6.12", + "resolved": "https://registry.npm.taobao.org/vue-template-compiler/download/vue-template-compiler-2.6.12.tgz?cache=0&sync_timestamp=1597927407682&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-template-compiler%2Fdownload%2Fvue-template-compiler-2.6.12.tgz", + "integrity": "sha1-lH7XGWdEyKUoXr4SM/6WBDf8xX4=", + "dev": true, + "requires": { + "de-indent": "^1.0.2", + "he": "^1.1.0" + } + }, + "vue-template-es2015-compiler": { + "version": "1.9.1", + "resolved": "https://registry.npm.taobao.org/vue-template-es2015-compiler/download/vue-template-es2015-compiler-1.9.1.tgz", + "integrity": "sha1-HuO8mhbsv1EYvjNLsV+cRvgvWCU=", + "dev": true + }, + "vuex": { + "version": "3.5.1", + "resolved": "https://registry.npm.taobao.org/vuex/download/vuex-3.5.1.tgz", + "integrity": "sha1-8bjc6mSbwlJUz09DWAgdv12hiz0=", + "requires": {} + }, + "w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/w3c-hr-time/download/w3c-hr-time-1.0.2.tgz?cache=0&sync_timestamp=1583455604765&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fw3c-hr-time%2Fdownload%2Fw3c-hr-time-1.0.2.tgz", + "integrity": "sha1-ConN9cwVgi35w2BUNnaWPgzDCM0=", + "dev": true, + "requires": { + "browser-process-hrtime": "^1.0.0" + } + }, + "w3c-xmlserializer": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/w3c-xmlserializer/download/w3c-xmlserializer-1.1.2.tgz", + "integrity": "sha1-MEhcp9cKb9BSQgo9Ev2Q5jOc55Q=", + "dev": true, + "requires": { + "domexception": "^1.0.1", + "webidl-conversions": "^4.0.2", + "xml-name-validator": "^3.0.0" + } + }, + "watchpack": { + "version": "1.7.4", + "resolved": "https://registry.npm.taobao.org/watchpack/download/watchpack-1.7.4.tgz?cache=0&sync_timestamp=1598569379663&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwatchpack%2Fdownload%2Fwatchpack-1.7.4.tgz", + "integrity": "sha1-bp2lOzyAuy1lCBiPWyAEEIZs0ws=", + "dev": true, + "requires": { + "chokidar": "^3.4.1", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0", + "watchpack-chokidar2": "^2.0.0" + } + }, + "watchpack-chokidar2": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/watchpack-chokidar2/download/watchpack-chokidar2-2.0.0.tgz", + "integrity": "sha1-mUihhmy71suCTeoTp+1pH2yN3/A=", + "dev": true, + "optional": true, + "requires": { + "chokidar": "^2.1.8" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/anymatch/download/anymatch-2.0.0.tgz", + "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=", + "dev": true, + "optional": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "optional": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-1.13.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbinary-extensions%2Fdownload%2Fbinary-extensions-1.13.1.tgz", + "integrity": "sha1-WYr+VHVbKGilMw0q/51Ou1Mgm2U=", + "dev": true, + "optional": true + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npm.taobao.org/chokidar/download/chokidar-2.1.8.tgz", + "integrity": "sha1-gEs6e2qZNYw8XGHnHYco8EHP+Rc=", + "dev": true, + "optional": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-1.2.13.tgz?cache=0&sync_timestamp=1588787369955&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffsevents%2Fdownload%2Ffsevents-1.2.13.tgz", + "integrity": "sha1-8yXLBFVZJCi88Rs4M3DvcOO/zDg=", + "dev": true, + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/glob-parent/download/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "optional": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "optional": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "optional": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npm.taobao.org/readdirp/download/readdirp-2.2.1.tgz", + "integrity": "sha1-DodiKjMlqjPokihcr4tOhGUppSU=", + "dev": true, + "optional": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + } + } + }, + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npm.taobao.org/wbuf/download/wbuf-1.7.3.tgz", + "integrity": "sha1-wdjRSTFtPqhShIiVy2oL/oh7h98=", + "dev": true, + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/wcwidth/download/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dev": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/webidl-conversions/download/webidl-conversions-4.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebidl-conversions%2Fdownload%2Fwebidl-conversions-4.0.2.tgz", + "integrity": "sha1-qFWYCx8LazWbodXZ+zmulB+qY60=", + "dev": true + }, + "webpack": { + "version": "4.44.1", + "resolved": "https://registry.npm.taobao.org/webpack/download/webpack-4.44.1.tgz?cache=0&sync_timestamp=1598642642485&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack%2Fdownload%2Fwebpack-4.44.1.tgz", + "integrity": "sha1-F+af/58yG48RfR/acU7fwLk5zCE=", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "acorn": "^6.4.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^4.3.0", + "eslint-scope": "^4.0.3", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.3", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", + "schema-utils": "^1.0.0", + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.3", + "watchpack": "^1.7.4", + "webpack-sources": "^1.4.1" + }, + "dependencies": { + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz?cache=0&sync_timestamp=1598871750711&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-1.0.0.tgz", + "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + } + } + }, + "webpack-bundle-analyzer": { + "version": "3.8.0", + "resolved": "https://registry.npm.taobao.org/webpack-bundle-analyzer/download/webpack-bundle-analyzer-3.8.0.tgz?cache=0&sync_timestamp=1589893683541&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-bundle-analyzer%2Fdownload%2Fwebpack-bundle-analyzer-3.8.0.tgz", + "integrity": "sha1-zms/kI2vBp/R9yZvaSy7O97ZuhY=", + "dev": true, + "requires": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1", + "bfj": "^6.1.1", + "chalk": "^2.4.1", + "commander": "^2.18.0", + "ejs": "^2.6.1", + "express": "^4.16.3", + "filesize": "^3.6.1", + "gzip-size": "^5.0.0", + "lodash": "^4.17.15", + "mkdirp": "^0.5.1", + "opener": "^1.5.1", + "ws": "^6.0.0" + }, + "dependencies": { + "acorn": { + "version": "7.4.0", + "resolved": "https://registry.npm.taobao.org/acorn/download/acorn-7.4.0.tgz?cache=0&sync_timestamp=1597235774928&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn%2Fdownload%2Facorn-7.4.0.tgz", + "integrity": "sha1-4a1IbmxUUBY0xsOXxcEh2qODYHw=", + "dev": true + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npm.taobao.org/acorn-walk/download/acorn-walk-7.2.0.tgz?cache=0&sync_timestamp=1597235855275&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn-walk%2Fdownload%2Facorn-walk-7.2.0.tgz", + "integrity": "sha1-DeiJpgEgOQmw++B7iTjcIdLpZ7w=", + "dev": true + }, + "ws": { + "version": "6.2.1", + "resolved": "https://registry.npm.taobao.org/ws/download/ws-6.2.1.tgz?cache=0&sync_timestamp=1593925481882&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fws%2Fdownload%2Fws-6.2.1.tgz", + "integrity": "sha1-RC/fCkftZPWbal2P8TD0dI7VJPs=", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } + } + } + }, + "webpack-chain": { + "version": "6.5.1", + "resolved": "https://registry.npm.taobao.org/webpack-chain/download/webpack-chain-6.5.1.tgz?cache=0&sync_timestamp=1595814928534&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-chain%2Fdownload%2Fwebpack-chain-6.5.1.tgz", + "integrity": "sha1-TycoTLu2N+PI+970Pu9YjU2GEgY=", + "dev": true, + "requires": { + "deepmerge": "^1.5.2", + "javascript-stringify": "^2.0.1" + } + }, + "webpack-dev-middleware": { + "version": "3.7.2", + "resolved": "https://registry.npm.taobao.org/webpack-dev-middleware/download/webpack-dev-middleware-3.7.2.tgz?cache=0&sync_timestamp=1594744455919&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-dev-middleware%2Fdownload%2Fwebpack-dev-middleware-3.7.2.tgz", + "integrity": "sha1-ABnD23FuP6XOy/ZPKriKdLqzMfM=", + "dev": true, + "requires": { + "memory-fs": "^0.4.1", + "mime": "^2.4.4", + "mkdirp": "^0.5.1", + "range-parser": "^1.2.1", + "webpack-log": "^2.0.0" + } + }, + "webpack-dev-server": { + "version": "3.11.0", + "resolved": "https://registry.npm.taobao.org/webpack-dev-server/download/webpack-dev-server-3.11.0.tgz", + "integrity": "sha1-jxVKO84bz9HMYY705wMniFXn/4w=", + "dev": true, + "requires": { + "ansi-html": "0.0.7", + "bonjour": "^3.5.0", + "chokidar": "^2.1.8", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "debug": "^4.1.1", + "del": "^4.1.1", + "express": "^4.17.1", + "html-entities": "^1.3.1", + "http-proxy-middleware": "0.19.1", + "import-local": "^2.0.0", + "internal-ip": "^4.3.0", + "ip": "^1.1.5", + "is-absolute-url": "^3.0.3", + "killable": "^1.0.1", + "loglevel": "^1.6.8", + "opn": "^5.5.0", + "p-retry": "^3.0.1", + "portfinder": "^1.0.26", + "schema-utils": "^1.0.0", + "selfsigned": "^1.10.7", + "semver": "^6.3.0", + "serve-index": "^1.9.1", + "sockjs": "0.3.20", + "sockjs-client": "1.4.0", + "spdy": "^4.0.2", + "strip-ansi": "^3.0.1", + "supports-color": "^6.1.0", + "url": "^0.11.0", + "webpack-dev-middleware": "^3.7.2", + "webpack-log": "^2.0.0", + "ws": "^6.2.1", + "yargs": "^13.3.2" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz?cache=0&sync_timestamp=1570188663907&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/anymatch/download/anymatch-2.0.0.tgz", + "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-1.13.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbinary-extensions%2Fdownload%2Fbinary-extensions-1.13.1.tgz", + "integrity": "sha1-WYr+VHVbKGilMw0q/51Ou1Mgm2U=", + "dev": true + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npm.taobao.org/chokidar/download/chokidar-2.1.8.tgz", + "integrity": "sha1-gEs6e2qZNYw8XGHnHYco8EHP+Rc=", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-1.2.13.tgz?cache=0&sync_timestamp=1588787369955&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffsevents%2Fdownload%2Ffsevents-1.2.13.tgz", + "integrity": "sha1-8yXLBFVZJCi88Rs4M3DvcOO/zDg=", + "dev": true, + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/glob-parent/download/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npm.taobao.org/is-absolute-url/download/is-absolute-url-3.0.3.tgz?cache=0&sync_timestamp=1569736493122&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-absolute-url%2Fdownload%2Fis-absolute-url-3.0.3.tgz", + "integrity": "sha1-lsaiK2ojkpsR6gr7GDbDatSl1pg=", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npm.taobao.org/readdirp/download/readdirp-2.2.1.tgz", + "integrity": "sha1-DodiKjMlqjPokihcr4tOhGUppSU=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz?cache=0&sync_timestamp=1598871750711&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-1.0.0.tgz", + "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz", + "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&sync_timestamp=1598611709087&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "ws": { + "version": "6.2.1", + "resolved": "https://registry.npm.taobao.org/ws/download/ws-6.2.1.tgz?cache=0&sync_timestamp=1593925481882&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fws%2Fdownload%2Fws-6.2.1.tgz", + "integrity": "sha1-RC/fCkftZPWbal2P8TD0dI7VJPs=", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } + } + } + }, + "webpack-log": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/webpack-log/download/webpack-log-2.0.0.tgz?cache=0&sync_timestamp=1564684667159&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-log%2Fdownload%2Fwebpack-log-2.0.0.tgz", + "integrity": "sha1-W3ko4GN1k/EZ0y9iJ8HgrDHhtH8=", + "dev": true, + "requires": { + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" + } + }, + "webpack-merge": { + "version": "4.2.2", + "resolved": "https://registry.npm.taobao.org/webpack-merge/download/webpack-merge-4.2.2.tgz?cache=0&sync_timestamp=1599634565482&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-merge%2Fdownload%2Fwebpack-merge-4.2.2.tgz", + "integrity": "sha1-onxS6ng9E5iv0gh/VH17nS9DY00=", + "dev": true, + "requires": { + "lodash": "^4.17.15" + } + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npm.taobao.org/webpack-sources/download/webpack-sources-1.4.3.tgz?cache=0&sync_timestamp=1598284464979&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-sources%2Fdownload%2Fwebpack-sources-1.4.3.tgz", + "integrity": "sha1-7t2OwLko+/HL/plOItLYkPMwqTM=", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + } + } + }, + "websocket-driver": { + "version": "0.6.5", + "resolved": "https://registry.npm.taobao.org/websocket-driver/download/websocket-driver-0.6.5.tgz?cache=0&sync_timestamp=1591288600527&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebsocket-driver%2Fdownload%2Fwebsocket-driver-0.6.5.tgz", + "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", + "dev": true, + "requires": { + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npm.taobao.org/websocket-extensions/download/websocket-extensions-0.1.4.tgz?cache=0&sync_timestamp=1591103014229&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebsocket-extensions%2Fdownload%2Fwebsocket-extensions-0.1.4.tgz", + "integrity": "sha1-f4RzvIOd/YdgituV1+sHUhFXikI=", + "dev": true + }, + "whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npm.taobao.org/whatwg-encoding/download/whatwg-encoding-1.0.5.tgz", + "integrity": "sha1-WrrPd3wyFmpR0IXWtPPn0nET3bA=", + "dev": true, + "requires": { + "iconv-lite": "0.4.24" + } + }, + "whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npm.taobao.org/whatwg-mimetype/download/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha1-PUseAxLSB5h5+Cav8Y2+7KWWD78=", + "dev": true + }, + "whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npm.taobao.org/whatwg-url/download/whatwg-url-7.1.0.tgz?cache=0&sync_timestamp=1599418911601&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhatwg-url%2Fdownload%2Fwhatwg-url-7.1.0.tgz", + "integrity": "sha1-wsSS8eymEpiO/T0iZr4bn8YXDQY=", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npm.taobao.org/which/download/which-1.3.1.tgz?cache=0&sync_timestamp=1574116720213&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhich%2Fdownload%2Fwhich-1.3.1.tgz", + "integrity": "sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/which-module/download/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npm.taobao.org/wide-align/download/wide-align-1.1.3.tgz", + "integrity": "sha1-rgdOa9wMFKQx6ATmJFScYzsABFc=", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz?cache=0&sync_timestamp=1570188663907&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-regex%2Fdownload%2Fansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-2.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring-width%2Fdownload%2Fstring-width-2.1.1.tgz", + "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npm.taobao.org/word-wrap/download/word-wrap-1.2.3.tgz", + "integrity": "sha1-YQY29rH3A4kb00dxzLF/uTtHB5w=", + "dev": true + }, + "worker-farm": { + "version": "1.7.0", + "resolved": "https://registry.npm.taobao.org/worker-farm/download/worker-farm-1.7.0.tgz", + "integrity": "sha1-JqlMU5G7ypJhUgAvabhKS/dy5ag=", + "dev": true, + "requires": { + "errno": "~0.1.7" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-5.1.0.tgz", + "integrity": "sha1-H9H2cjXVttD+54EFYAG/tpTAOwk=", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "dependencies": { + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-7.0.3.tgz", + "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-3.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring-width%2Fdownload%2Fstring-width-3.1.0.tgz", + "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz", + "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/write/download/write-1.0.3.tgz", + "integrity": "sha1-CADhRSO5I6OH5BUSPIZWFqrg9cM=", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } + }, + "ws": { + "version": "7.3.1", + "resolved": "https://registry.npm.taobao.org/ws/download/ws-7.3.1.tgz?cache=0&sync_timestamp=1593925481882&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fws%2Fdownload%2Fws-7.3.1.tgz", + "integrity": "sha1-0FR79n985PEqct/jEmLGjX3FUcg=", + "dev": true, + "requires": {} + }, + "xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/xml-name-validator/download/xml-name-validator-3.0.0.tgz", + "integrity": "sha1-auc+Bt5NjG5H+fsYH3jWSK1FfGo=", + "dev": true + }, + "xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/xmlchars/download/xmlchars-2.2.0.tgz", + "integrity": "sha1-Bg/hvLf5x2/ioX24apvDq4lCEMs=", + "dev": true + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/xtend/download/xtend-4.0.2.tgz", + "integrity": "sha1-u3J3n1+kZRhrH0OPZ0+jR/2121Q=", + "dev": true + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/y18n/download/y18n-4.0.0.tgz?cache=0&sync_timestamp=1599348540827&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fy18n%2Fdownload%2Fy18n-4.0.0.tgz", + "integrity": "sha1-le+U+F7MgdAHwmThkKEg8KPIVms=", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/yallist/download/yallist-3.1.1.tgz", + "integrity": "sha1-27fa+b/YusmrRev2ArjLrQ1dCP0=", + "dev": true + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npm.taobao.org/yargs/download/yargs-13.3.2.tgz?cache=0&sync_timestamp=1599673846782&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-13.3.2.tgz", + "integrity": "sha1-rX/+/sGqWVZayRX4Lcyzipwxot0=", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + }, + "dependencies": { + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-7.0.3.tgz", + "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-3.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring-width%2Fdownload%2Fstring-width-3.1.0.tgz", + "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz", + "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-13.1.2.tgz?cache=0&sync_timestamp=1599672368427&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-13.1.2.tgz", + "integrity": "sha1-Ew8JcC667vJlDVTObj5XBvek+zg=", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz", + "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=", + "dev": true + } + } + }, + "yargs-unparser": { + "version": "1.6.0", + "resolved": "https://registry.npm.taobao.org/yargs-unparser/download/yargs-unparser-1.6.0.tgz?cache=0&sync_timestamp=1592366192647&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-unparser%2Fdownload%2Fyargs-unparser-1.6.0.tgz", + "integrity": "sha1-7yXCx2n/a9CeSw+dfGBfsnhG6p8=", + "dev": true, + "requires": { + "flat": "^4.1.0", + "lodash": "^4.17.15", + "yargs": "^13.3.0" + } + }, + "yorkie": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/yorkie/download/yorkie-2.0.0.tgz", + "integrity": "sha1-kkEZEtQ1IU4SxRwq4Qk+VLa7g9k=", + "dev": true, + "requires": { + "execa": "^0.8.0", + "is-ci": "^1.0.10", + "normalize-path": "^1.0.0", + "strip-indent": "^2.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "0.8.0", + "resolved": "https://registry.npm.taobao.org/execa/download/execa-0.8.0.tgz?cache=0&sync_timestamp=1594145085955&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexeca%2Fdownload%2Fexeca-0.8.0.tgz", + "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=", + "dev": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/get-stream/download/get-stream-3.0.0.tgz?cache=0&sync_timestamp=1597056502934&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-stream%2Fdownload%2Fget-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npm.taobao.org/lru-cache/download/lru-cache-4.1.5.tgz?cache=0&sync_timestamp=1594427582110&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flru-cache%2Fdownload%2Flru-cache-4.1.5.tgz", + "integrity": "sha1-i75Q6oW+1ZvJ4z3KuCNe6bz0Q80=", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "normalize-path": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-1.0.0.tgz", + "integrity": "sha1-MtDkcvkf80VwHBWoMRAY07CpA3k=", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + } + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..5017cf8 --- /dev/null +++ b/package.json @@ -0,0 +1,42 @@ +{ + "name": "example2", + "version": "0.1.0", + "private": true, + "scripts": { + "serve": "vue-cli-service serve", + "build": "vue-cli-service build", + "test:unit": "vue-cli-service test:unit", + "lint": "vue-cli-service lint" + }, + "dependencies": { + "@tweenjs/tween.js": "^18.6.4", + "axios": "^0.21.4", + "ckeditor4-vue": "^1.3.2", + "core-js": "^3.6.5", + "element-ui": "^2.13.2", + "interactjs": "^1.10.11", + "jsonwebtoken": "^8.5.1", + "velocity-animate": "^1.5.2", + "vue": "^2.6.11", + "vue-page-split": "^1.2.2", + "vue-router": "^3.2.0", + "vuex": "^3.4.0" + }, + "devDependencies": { + "@vue/cli-plugin-babel": "~4.5.0", + "@vue/cli-plugin-eslint": "~4.5.0", + "@vue/cli-plugin-router": "~4.5.0", + "@vue/cli-plugin-unit-mocha": "~4.5.0", + "@vue/cli-plugin-vuex": "~4.5.0", + "@vue/cli-service": "~4.5.0", + "@vue/test-utils": "^1.0.3", + "babel-eslint": "^10.1.0", + "chai": "^4.1.2", + "eslint": "^6.7.2", + "eslint-plugin-vue": "^6.2.2", + "sass": "^1.26.5", + "sass-loader": "^8.0.2", + "svg-sprite-loader": "^6.0.9", + "vue-template-compiler": "^2.6.11" + } +} diff --git a/public/3d-viewer/iframe-viewer-eim-0225.html b/public/3d-viewer/iframe-viewer-eim-0225.html new file mode 100644 index 0000000..5cbf86d --- /dev/null +++ b/public/3d-viewer/iframe-viewer-eim-0225.html @@ -0,0 +1,186 @@ + + + + + + + + + + + I3V_EIM_3D + + + + + + + + + + + +
+ 联系我们 +
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/eim-0225/EIMMODEL.js b/public/eim-0225/EIMMODEL.js new file mode 100644 index 0000000..99c4905 --- /dev/null +++ b/public/eim-0225/EIMMODEL.js @@ -0,0 +1,98403 @@ +/*!!** + * EIMMODEL V1.0.0 + * A WebGL-based 3D Viewer for threejs + * http://www.i3vsoft.com/ + * Built on 2021-2-25 7:24:06 PM + * commitHash 2611d22d + + * Copyright 2021, 广州君和信息技术有限公司 + ***/ +!function(A, e) { + "object" == typeof exports && "undefined" != typeof module ? e(exports) : "function" == typeof define && define.amd ? define(["exports"], e) : e((A = A || self).EIMMODEL = {}) +}(this, (function(A) { + "use strict"; + console.log("EIMMODEL Version: 1.0.0"); + var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self ? self : {}; + !function(A, e) { + A(e = { + exports: {} + }, e.exports) + }((function(A) { + !function(e, t) { + var i = function() { + function A(A) { + return "[object Array]" === Object.prototype.toString.call(A) + } + function e(A, e) { + for (var t in e) + e.hasOwnProperty(t) && (A[t] = e[t]) + } + function t(A) { + if (!(this instanceof t)) + throw new TypeError(this + "is not a promise"); + if ("function" != typeof A) + throw new TypeError("Promise resolver " + A + " is not a function"); + var e = new i; + this._resolver = e; + try { + A((function(A) { + e.resolve(A) + } + ), (function(A) { + e.reject(A) + } + )) + } catch (A) { + e.reject(A) + } + } + function i() { + this._callbacks = [], + this._errbacks = [], + this._status = "pending", + this._result = null + } + return e(t.prototype, { + then: function(A, e) { + var i, o, n = new this.constructor((function(A, e) { + i = A, + o = e + } + )); + return this._resolver._addCallbacks("function" == typeof A ? t._makeCallback(n, i, o, A) : i, "function" == typeof e ? t._makeCallback(n, i, o, e) : o), + n + }, + catch: function(A) { + return this.then(void 0, A) + } + }), + t._makeCallback = function(A, e, t, i) { + return function(o) { + var n; + try { + n = i(o) + } catch (A) { + return void t(A) + } + n !== A ? e(n) : t(new TypeError("Cannot resolve a promise with itself")) + } + } + , + t.resolve = function(A) { + return A && A.constructor === this ? A : new this((function(e) { + e(A) + } + )) + } + , + t.reject = function(A) { + var e = new this((function() {} + )); + return e._resolver._result = A, + e._resolver._status = "rejected", + e + } + , + t.all = function(e) { + var t = this; + return new t((function(i, o) { + if (A(e)) { + var n = e.length + , r = 0 + , a = e.length + , s = []; + if (1 > a) + return i(s); + for (; a > r; r++) + t.resolve(e[r]).then(l(r), o) + } else + o(new TypeError("Promise.all expects an array of values or promises")); + function l(A) { + return function(e) { + s[A] = e, + --n || i(s) + } + } + } + )) + } + , + t.race = function(e) { + var t = this; + return new t((function(i, o) { + if (A(e)) + for (var n = 0, r = e.length; r > n; n++) + t.resolve(e[n]).then(i, o); + else + o(new TypeError("Promise.race expects an array of values or promises")) + } + )) + } + , + t.async = "undefined" != typeof setImmediate ? function(A) { + setImmediate(A) + } + : "undefined" != typeof process && process.nextTick ? process.nextTick : function(A) { + setTimeout(A, 0) + } + , + e(i.prototype, { + fulfill: function(A) { + var e = this._status; + "pending" !== e && "accepted" !== e || (this._result = A, + this._status = "fulfilled"), + "fulfilled" === this._status && (this._notify(this._callbacks, this._result), + this._callbacks = [], + this._errbacks = null) + }, + reject: function(A) { + var e = this._status; + "pending" !== e && "accepted" !== e || (this._result = A, + this._status = "rejected"), + "rejected" === this._status && (this._notify(this._errbacks, this._result), + this._callbacks = null, + this._errbacks = []) + }, + resolve: function(A) { + "pending" === this._status && (this._status = "accepted", + this._value = A, + (this._callbacks && this._callbacks.length || this._errbacks && this._errbacks.length) && this._unwrap(this._value)) + }, + _unwrap: function(A) { + var e, t = this, i = !1; + if (!A || "object" != typeof A && "function" != typeof A) + t.fulfill(A); + else + try { + "function" == typeof (e = A.then) ? e.call(A, (function(A) { + i || (i = !0, + t._unwrap(A)) + } + ), (function(A) { + i || (i = !0, + t.reject(A)) + } + )) : t.fulfill(A) + } catch (A) { + i || t.reject(A) + } + }, + _addCallbacks: function(A, e) { + var t = this._callbacks + , i = this._errbacks; + switch (t && t.push(A), + i && i.push(e), + this._status) { + case "accepted": + this._unwrap(this._value); + break; + case "fulfilled": + this.fulfill(this._result); + break; + case "rejected": + this.reject(this._result) + } + }, + _notify: function(A, e) { + A.length && t.async((function() { + var t, i; + for (t = 0, + i = A.length; i > t; ++t) + A[t](e) + } + )) + } + }), + t.Resolver = i, + t + }(); + A && (A.exports = i), + (e = e || self).PromisePolyfill = i, + e.Promise || (e.Promise = i) + }(e) + } + )); + void 0 === Number.EPSILON && (Number.EPSILON = Math.pow(2, -52)), + void 0 === Number.isInteger && (Number.isInteger = function(A) { + return "number" == typeof A && isFinite(A) && Math.floor(A) === A + } + ), + void 0 === Math.sign && (Math.sign = function(A) { + return 0 > A ? -1 : A > 0 ? 1 : +A + } + ), + "name"in Function.prototype == !1 && Object.defineProperty(Function.prototype, "name", { + get: function() { + return this.toString().match(/^\s*function\s*([^\(\s]*)/)[1] + } + }), + void 0 === Object.assign && (Object.assign = function(A) { + if (null == A) + throw new TypeError("Cannot convert undefined or null to object"); + for (var e = Object(A), t = 1; arguments.length > t; t++) { + var i = arguments[t]; + if (null != i) + for (var o in i) + Object.prototype.hasOwnProperty.call(i, o) && (e[o] = i[o]) + } + return e + } + ); + var t = { + LEFT: 0, + MIDDLE: 1, + RIGHT: 2, + ROTATE: 0, + DOLLY: 1, + PAN: 2 + }; + function i() {} + Object.assign(i.prototype, { + addEventListener: function(A, e) { + void 0 === this._listeners && (this._listeners = {}); + var t = this._listeners; + void 0 === t[A] && (t[A] = []), + -1 === t[A].indexOf(e) && t[A].push(e) + }, + hasEventListener: function(A, e) { + if (void 0 === this._listeners) + return !1; + var t = this._listeners; + return void 0 !== t[A] && -1 !== t[A].indexOf(e) + }, + removeEventListener: function(A, e) { + if (void 0 !== this._listeners) { + var t = this._listeners[A]; + if (void 0 !== t) { + var i = t.indexOf(e); + -1 !== i && t.splice(i, 1) + } + } + }, + dispatchEvent: function(A) { + if (void 0 !== this._listeners) { + var e = this._listeners[A.type]; + if (void 0 !== e) { + A.target = this; + for (var t = e.slice(0), i = 0, o = t.length; o > i; i++) + t[i].call(this, A) + } + } + } + }); + for (var o = [], n = 0; 256 > n; n++) + o[n] = (16 > n ? "0" : "") + n.toString(16); + var r, a = { + DEG2RAD: Math.PI / 180, + RAD2DEG: 180 / Math.PI, + generateUUID: function() { + var A = 4294967295 * Math.random() | 0 + , e = 4294967295 * Math.random() | 0 + , t = 4294967295 * Math.random() | 0 + , i = 4294967295 * Math.random() | 0; + return (o[255 & A] + o[A >> 8 & 255] + o[A >> 16 & 255] + o[A >> 24 & 255] + "-" + o[255 & e] + o[e >> 8 & 255] + "-" + o[e >> 16 & 15 | 64] + o[e >> 24 & 255] + "-" + o[63 & t | 128] + o[t >> 8 & 255] + "-" + o[t >> 16 & 255] + o[t >> 24 & 255] + o[255 & i] + o[i >> 8 & 255] + o[i >> 16 & 255] + o[i >> 24 & 255]).toUpperCase() + }, + clamp: function(A, e, t) { + return Math.max(e, Math.min(t, A)) + }, + euclideanModulo: function(A, e) { + return (A % e + e) % e + }, + mapLinear: function(A, e, t, i, o) { + return i + (A - e) * (o - i) / (t - e) + }, + lerp: function(A, e, t) { + return (1 - t) * A + t * e + }, + smoothstep: function(A, e, t) { + return A > e ? t > A ? (A = (A - e) / (t - e)) * A * (3 - 2 * A) : 1 : 0 + }, + smootherstep: function(A, e, t) { + return A > e ? t > A ? (A = (A - e) / (t - e)) * A * A * (A * (6 * A - 15) + 10) : 1 : 0 + }, + randInt: function(A, e) { + return A + Math.floor(Math.random() * (e - A + 1)) + }, + randFloat: function(A, e) { + return A + Math.random() * (e - A) + }, + randFloatSpread: function(A) { + return A * (.5 - Math.random()) + }, + degToRad: function(A) { + return A * a.DEG2RAD + }, + radToDeg: function(A) { + return A * a.RAD2DEG + }, + isPowerOfTwo: function(A) { + return 0 == (A & A - 1) && 0 !== A + }, + ceilPowerOfTwo: function(A) { + return Math.pow(2, Math.ceil(Math.log(A) / Math.LN2)) + }, + floorPowerOfTwo: function(A) { + return Math.pow(2, Math.floor(Math.log(A) / Math.LN2)) + }, + setQuaternionFromProperEuler: function(A, e, t, i, o) { + var n = Math.cos + , r = Math.sin + , a = n(t / 2) + , s = r(t / 2) + , l = n((e + i) / 2) + , c = r((e + i) / 2) + , h = n((e - i) / 2) + , d = r((e - i) / 2) + , p = n((i - e) / 2) + , g = r((i - e) / 2); + "XYX" === o ? A.set(a * c, s * h, s * d, a * l) : "YZY" === o ? A.set(s * d, a * c, s * h, a * l) : "ZXZ" === o ? A.set(s * h, s * d, a * c, a * l) : "XZX" === o ? A.set(a * c, s * g, s * p, a * l) : "YXY" === o ? A.set(s * p, a * c, s * g, a * l) : "ZYZ" === o ? A.set(s * g, s * p, a * c, a * l) : console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order.") + } + }; + function s(A, e) { + this.x = A || 0, + this.y = e || 0 + } + function l() { + this.elements = [1, 0, 0, 0, 1, 0, 0, 0, 1], + arguments.length > 0 && console.error("THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.") + } + Object.defineProperties(s.prototype, { + width: { + get: function() { + return this.x + }, + set: function(A) { + this.x = A + } + }, + height: { + get: function() { + return this.y + }, + set: function(A) { + this.y = A + } + } + }), + Object.assign(s.prototype, { + isVector2: !0, + set: function(A, e) { + return this.x = A, + this.y = e, + this + }, + setScalar: function(A) { + return this.x = A, + this.y = A, + this + }, + setX: function(A) { + return this.x = A, + this + }, + setY: function(A) { + return this.y = A, + this + }, + setComponent: function(A, e) { + switch (A) { + case 0: + this.x = e; + break; + case 1: + this.y = e; + break; + default: + throw new Error("index is out of range: " + A) + } + return this + }, + getComponent: function(A) { + switch (A) { + case 0: + return this.x; + case 1: + return this.y; + default: + throw new Error("index is out of range: " + A) + } + }, + clone: function() { + return new this.constructor(this.x,this.y) + }, + copy: function(A) { + return this.x = A.x, + this.y = A.y, + this + }, + add: function(A, e) { + return void 0 !== e ? (console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."), + this.addVectors(A, e)) : (this.x += A.x, + this.y += A.y, + this) + }, + addScalar: function(A) { + return this.x += A, + this.y += A, + this + }, + addVectors: function(A, e) { + return this.x = A.x + e.x, + this.y = A.y + e.y, + this + }, + addScaledVector: function(A, e) { + return this.x += A.x * e, + this.y += A.y * e, + this + }, + sub: function(A, e) { + return void 0 !== e ? (console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."), + this.subVectors(A, e)) : (this.x -= A.x, + this.y -= A.y, + this) + }, + subScalar: function(A) { + return this.x -= A, + this.y -= A, + this + }, + subVectors: function(A, e) { + return this.x = A.x - e.x, + this.y = A.y - e.y, + this + }, + multiply: function(A) { + return this.x *= A.x, + this.y *= A.y, + this + }, + multiplyScalar: function(A) { + return this.x *= A, + this.y *= A, + this + }, + divide: function(A) { + return this.x /= A.x, + this.y /= A.y, + this + }, + divideScalar: function(A) { + return this.multiplyScalar(1 / A) + }, + applyMatrix3: function(A) { + var e = this.x + , t = this.y + , i = A.elements; + return this.x = i[0] * e + i[3] * t + i[6], + this.y = i[1] * e + i[4] * t + i[7], + this + }, + min: function(A) { + return this.x = Math.min(this.x, A.x), + this.y = Math.min(this.y, A.y), + this + }, + max: function(A) { + return this.x = Math.max(this.x, A.x), + this.y = Math.max(this.y, A.y), + this + }, + clamp: function(A, e) { + return this.x = Math.max(A.x, Math.min(e.x, this.x)), + this.y = Math.max(A.y, Math.min(e.y, this.y)), + this + }, + clampScalar: function(A, e) { + return this.x = Math.max(A, Math.min(e, this.x)), + this.y = Math.max(A, Math.min(e, this.y)), + this + }, + clampLength: function(A, e) { + var t = this.length(); + return this.divideScalar(t || 1).multiplyScalar(Math.max(A, Math.min(e, t))) + }, + floor: function() { + return this.x = Math.floor(this.x), + this.y = Math.floor(this.y), + this + }, + ceil: function() { + return this.x = Math.ceil(this.x), + this.y = Math.ceil(this.y), + this + }, + round: function() { + return this.x = Math.round(this.x), + this.y = Math.round(this.y), + this + }, + roundToZero: function() { + return this.x = 0 > this.x ? Math.ceil(this.x) : Math.floor(this.x), + this.y = 0 > this.y ? Math.ceil(this.y) : Math.floor(this.y), + this + }, + negate: function() { + return this.x = -this.x, + this.y = -this.y, + this + }, + dot: function(A) { + return this.x * A.x + this.y * A.y + }, + cross: function(A) { + return this.x * A.y - this.y * A.x + }, + lengthSq: function() { + return this.x * this.x + this.y * this.y + }, + length: function() { + return Math.sqrt(this.x * this.x + this.y * this.y) + }, + manhattanLength: function() { + return Math.abs(this.x) + Math.abs(this.y) + }, + normalize: function() { + return this.divideScalar(this.length() || 1) + }, + angle: function() { + return Math.atan2(-this.y, -this.x) + Math.PI + }, + distanceTo: function(A) { + return Math.sqrt(this.distanceToSquared(A)) + }, + distanceToSquared: function(A) { + var e = this.x - A.x + , t = this.y - A.y; + return e * e + t * t + }, + manhattanDistanceTo: function(A) { + return Math.abs(this.x - A.x) + Math.abs(this.y - A.y) + }, + setLength: function(A) { + return this.normalize().multiplyScalar(A) + }, + lerp: function(A, e) { + return this.x += (A.x - this.x) * e, + this.y += (A.y - this.y) * e, + this + }, + lerpVectors: function(A, e, t) { + return this.subVectors(e, A).multiplyScalar(t).add(A) + }, + equals: function(A) { + return A.x === this.x && A.y === this.y + }, + fromArray: function(A, e) { + return void 0 === e && (e = 0), + this.x = A[e], + this.y = A[e + 1], + this + }, + toArray: function(A, e) { + return void 0 === A && (A = []), + void 0 === e && (e = 0), + A[e] = this.x, + A[e + 1] = this.y, + A + }, + fromBufferAttribute: function(A, e, t) { + return void 0 !== t && console.warn("THREE.Vector2: offset has been removed from .fromBufferAttribute()."), + this.x = A.getX(e), + this.y = A.getY(e), + this + }, + rotateAround: function(A, e) { + var t = Math.cos(e) + , i = Math.sin(e) + , o = this.x - A.x + , n = this.y - A.y; + return this.x = o * t - n * i + A.x, + this.y = o * i + n * t + A.y, + this + } + }), + Object.assign(l.prototype, { + isMatrix3: !0, + set: function(A, e, t, i, o, n, r, a, s) { + var l = this.elements; + return l[0] = A, + l[1] = i, + l[2] = r, + l[3] = e, + l[4] = o, + l[5] = a, + l[6] = t, + l[7] = n, + l[8] = s, + this + }, + identity: function() { + return this.set(1, 0, 0, 0, 1, 0, 0, 0, 1), + this + }, + clone: function() { + return (new this.constructor).fromArray(this.elements) + }, + copy: function(A) { + var e = this.elements + , t = A.elements; + return e[0] = t[0], + e[1] = t[1], + e[2] = t[2], + e[3] = t[3], + e[4] = t[4], + e[5] = t[5], + e[6] = t[6], + e[7] = t[7], + e[8] = t[8], + this + }, + extractBasis: function(A, e, t) { + return A.setFromMatrix3Column(this, 0), + e.setFromMatrix3Column(this, 1), + t.setFromMatrix3Column(this, 2), + this + }, + setFromMatrix4: function(A) { + var e = A.elements; + return this.set(e[0], e[4], e[8], e[1], e[5], e[9], e[2], e[6], e[10]), + this + }, + multiply: function(A) { + return this.multiplyMatrices(this, A) + }, + premultiply: function(A) { + return this.multiplyMatrices(A, this) + }, + multiplyMatrices: function(A, e) { + var t = A.elements + , i = e.elements + , o = this.elements + , n = t[0] + , r = t[3] + , a = t[6] + , s = t[1] + , l = t[4] + , c = t[7] + , h = t[2] + , d = t[5] + , p = t[8] + , g = i[0] + , u = i[3] + , f = i[6] + , m = i[1] + , C = i[4] + , y = i[7] + , v = i[2] + , I = i[5] + , E = i[8]; + return o[0] = n * g + r * m + a * v, + o[3] = n * u + r * C + a * I, + o[6] = n * f + r * y + a * E, + o[1] = s * g + l * m + c * v, + o[4] = s * u + l * C + c * I, + o[7] = s * f + l * y + c * E, + o[2] = h * g + d * m + p * v, + o[5] = h * u + d * C + p * I, + o[8] = h * f + d * y + p * E, + this + }, + multiplyScalar: function(A) { + var e = this.elements; + return e[0] *= A, + e[3] *= A, + e[6] *= A, + e[1] *= A, + e[4] *= A, + e[7] *= A, + e[2] *= A, + e[5] *= A, + e[8] *= A, + this + }, + determinant: function() { + var A = this.elements + , e = A[0] + , t = A[1] + , i = A[2] + , o = A[3] + , n = A[4] + , r = A[5] + , a = A[6] + , s = A[7] + , l = A[8]; + return e * n * l - e * r * s - t * o * l + t * r * a + i * o * s - i * n * a + }, + getInverse: function(A, e) { + void 0 !== e && console.warn("THREE.Matrix3: .getInverse() can no longer be configured to throw on degenerate."); + var t = A.elements + , i = this.elements + , o = t[0] + , n = t[1] + , r = t[2] + , a = t[3] + , s = t[4] + , l = t[5] + , c = t[6] + , h = t[7] + , d = t[8] + , p = d * s - l * h + , g = l * c - d * a + , u = h * a - s * c + , f = o * p + n * g + r * u; + if (0 === f) + return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0); + var m = 1 / f; + return i[0] = p * m, + i[1] = (r * h - d * n) * m, + i[2] = (l * n - r * s) * m, + i[3] = g * m, + i[4] = (d * o - r * c) * m, + i[5] = (r * a - l * o) * m, + i[6] = u * m, + i[7] = (n * c - h * o) * m, + i[8] = (s * o - n * a) * m, + this + }, + transpose: function() { + var A, e = this.elements; + return A = e[1], + e[1] = e[3], + e[3] = A, + A = e[2], + e[2] = e[6], + e[6] = A, + A = e[5], + e[5] = e[7], + e[7] = A, + this + }, + getNormalMatrix: function(A) { + return this.setFromMatrix4(A).getInverse(this).transpose() + }, + transposeIntoArray: function(A) { + var e = this.elements; + return A[0] = e[0], + A[1] = e[3], + A[2] = e[6], + A[3] = e[1], + A[4] = e[4], + A[5] = e[7], + A[6] = e[2], + A[7] = e[5], + A[8] = e[8], + this + }, + setUvTransform: function(A, e, t, i, o, n, r) { + var a = Math.cos(o) + , s = Math.sin(o); + this.set(t * a, t * s, -t * (a * n + s * r) + n + A, -i * s, i * a, -i * (-s * n + a * r) + r + e, 0, 0, 1) + }, + scale: function(A, e) { + var t = this.elements; + return t[0] *= A, + t[3] *= A, + t[6] *= A, + t[1] *= e, + t[4] *= e, + t[7] *= e, + this + }, + rotate: function(A) { + var e = Math.cos(A) + , t = Math.sin(A) + , i = this.elements + , o = i[0] + , n = i[3] + , r = i[6] + , a = i[1] + , s = i[4] + , l = i[7]; + return i[0] = e * o + t * a, + i[3] = e * n + t * s, + i[6] = e * r + t * l, + i[1] = -t * o + e * a, + i[4] = -t * n + e * s, + i[7] = -t * r + e * l, + this + }, + translate: function(A, e) { + var t = this.elements; + return t[0] += A * t[2], + t[3] += A * t[5], + t[6] += A * t[8], + t[1] += e * t[2], + t[4] += e * t[5], + t[7] += e * t[8], + this + }, + equals: function(A) { + for (var e = this.elements, t = A.elements, i = 0; 9 > i; i++) + if (e[i] !== t[i]) + return !1; + return !0 + }, + fromArray: function(A, e) { + void 0 === e && (e = 0); + for (var t = 0; 9 > t; t++) + this.elements[t] = A[t + e]; + return this + }, + toArray: function(A, e) { + void 0 === A && (A = []), + void 0 === e && (e = 0); + var t = this.elements; + return A[e] = t[0], + A[e + 1] = t[1], + A[e + 2] = t[2], + A[e + 3] = t[3], + A[e + 4] = t[4], + A[e + 5] = t[5], + A[e + 6] = t[6], + A[e + 7] = t[7], + A[e + 8] = t[8], + A + } + }); + var c = { + getDataURL: function(A) { + var e; + if ("undefined" == typeof HTMLCanvasElement) + return A.src; + if (A instanceof HTMLCanvasElement) + e = A; + else { + void 0 === r && (r = document.createElementNS("http://www.w3.org/1999/xhtml", "canvas")), + r.width = A.width, + r.height = A.height; + var t = r.getContext("2d"); + A instanceof ImageData ? t.putImageData(A, 0, 0) : t.drawImage(A, 0, 0, A.width, A.height), + e = r + } + return e.width > 2048 || e.height > 2048 ? e.toDataURL("image/jpeg", .6) : e.toDataURL("image/png") + } + } + , h = 0; + function d(A, e, t, i, o, n, r, c, p, g) { + Object.defineProperty(this, "id", { + value: h++ + }), + this.uuid = a.generateUUID(), + this.name = "", + this.image = void 0 !== A ? A : d.DEFAULT_IMAGE, + this.mipmaps = [], + this.mapping = void 0 !== e ? e : d.DEFAULT_MAPPING, + this.wrapS = void 0 !== t ? t : 1001, + this.wrapT = void 0 !== i ? i : 1001, + this.magFilter = void 0 !== o ? o : 1006, + this.minFilter = void 0 !== n ? n : 1008, + this.anisotropy = void 0 !== p ? p : 1, + this.format = void 0 !== r ? r : 1023, + this.internalFormat = null, + this.type = void 0 !== c ? c : 1009, + this.offset = new s(0,0), + this.repeat = new s(1,1), + this.center = new s(0,0), + this.rotation = 0, + this.matrixAutoUpdate = !0, + this.matrix = new l, + this.generateMipmaps = !0, + this.premultiplyAlpha = !1, + this.flipY = !0, + this.unpackAlignment = 4, + this.encoding = void 0 !== g ? g : 3e3, + this.version = 0, + this.onUpdate = null + } + function p(A, e, t, i) { + this.x = A || 0, + this.y = e || 0, + this.z = t || 0, + this.w = void 0 !== i ? i : 1 + } + function g(A, e, t) { + this.width = A, + this.height = e, + this.scissor = new p(0,0,A,e), + this.scissorTest = !1, + this.viewport = new p(0,0,A,e), + this.texture = new d(void 0,(t = t || {}).mapping,t.wrapS,t.wrapT,t.magFilter,t.minFilter,t.format,t.type,t.anisotropy,t.encoding), + this.texture.image = {}, + this.texture.image.width = A, + this.texture.image.height = e, + this.texture.generateMipmaps = void 0 !== t.generateMipmaps && t.generateMipmaps, + this.texture.minFilter = void 0 !== t.minFilter ? t.minFilter : 1006, + this.depthBuffer = void 0 === t.depthBuffer || t.depthBuffer, + this.stencilBuffer = void 0 === t.stencilBuffer || t.stencilBuffer, + this.depthTexture = void 0 !== t.depthTexture ? t.depthTexture : null + } + function u(A, e, t) { + g.call(this, A, e, t), + this.samples = 4 + } + function f(A, e, t, i) { + this._x = A || 0, + this._y = e || 0, + this._z = t || 0, + this._w = void 0 !== i ? i : 1 + } + d.DEFAULT_IMAGE = void 0, + d.DEFAULT_MAPPING = 300, + d.prototype = Object.assign(Object.create(i.prototype), { + constructor: d, + isTexture: !0, + updateMatrix: function() { + this.matrix.setUvTransform(this.offset.x, this.offset.y, this.repeat.x, this.repeat.y, this.rotation, this.center.x, this.center.y) + }, + clone: function() { + return (new this.constructor).copy(this) + }, + copy: function(A) { + return this.name = A.name, + this.image = A.image, + this.mipmaps = A.mipmaps.slice(0), + this.mapping = A.mapping, + this.wrapS = A.wrapS, + this.wrapT = A.wrapT, + this.magFilter = A.magFilter, + this.minFilter = A.minFilter, + this.anisotropy = A.anisotropy, + this.format = A.format, + this.internalFormat = A.internalFormat, + this.type = A.type, + this.offset.copy(A.offset), + this.repeat.copy(A.repeat), + this.center.copy(A.center), + this.rotation = A.rotation, + this.matrixAutoUpdate = A.matrixAutoUpdate, + this.matrix.copy(A.matrix), + this.generateMipmaps = A.generateMipmaps, + this.premultiplyAlpha = A.premultiplyAlpha, + this.flipY = A.flipY, + this.unpackAlignment = A.unpackAlignment, + this.encoding = A.encoding, + this + }, + toJSON: function(A) { + var e = void 0 === A || "string" == typeof A; + if (!e && void 0 !== A.textures[this.uuid]) + return A.textures[this.uuid]; + var t = { + metadata: { + version: 4.5, + type: "Texture", + generator: "Texture.toJSON" + }, + uuid: this.uuid, + name: this.name, + mapping: this.mapping, + repeat: [this.repeat.x, this.repeat.y], + offset: [this.offset.x, this.offset.y], + center: [this.center.x, this.center.y], + rotation: this.rotation, + wrap: [this.wrapS, this.wrapT], + format: this.format, + type: this.type, + encoding: this.encoding, + minFilter: this.minFilter, + magFilter: this.magFilter, + anisotropy: this.anisotropy, + flipY: this.flipY, + premultiplyAlpha: this.premultiplyAlpha, + unpackAlignment: this.unpackAlignment + }; + if (void 0 !== this.image) { + var i = this.image; + if (void 0 === i.uuid && (i.uuid = a.generateUUID()), + !e && void 0 === A.images[i.uuid]) { + var o; + if (Array.isArray(i)) { + o = []; + for (var n = 0, r = i.length; r > n; n++) + o.push(c.getDataURL(i[n])) + } else + o = c.getDataURL(i); + A.images[i.uuid] = { + uuid: i.uuid, + url: o + } + } + t.image = i.uuid + } + return e || (A.textures[this.uuid] = t), + t + }, + dispose: function() { + this.dispatchEvent({ + type: "dispose" + }) + }, + transformUv: function(A) { + if (300 !== this.mapping) + return A; + if (A.applyMatrix3(this.matrix), + 0 > A.x || A.x > 1) + switch (this.wrapS) { + case 1e3: + A.x = A.x - Math.floor(A.x); + break; + case 1001: + A.x = 0 > A.x ? 0 : 1; + break; + case 1002: + A.x = 1 === Math.abs(Math.floor(A.x) % 2) ? Math.ceil(A.x) - A.x : A.x - Math.floor(A.x) + } + if (0 > A.y || A.y > 1) + switch (this.wrapT) { + case 1e3: + A.y = A.y - Math.floor(A.y); + break; + case 1001: + A.y = 0 > A.y ? 0 : 1; + break; + case 1002: + A.y = 1 === Math.abs(Math.floor(A.y) % 2) ? Math.ceil(A.y) - A.y : A.y - Math.floor(A.y) + } + return this.flipY && (A.y = 1 - A.y), + A + } + }), + Object.defineProperty(d.prototype, "needsUpdate", { + set: function(A) { + !0 === A && this.version++ + } + }), + Object.defineProperties(p.prototype, { + width: { + get: function() { + return this.z + }, + set: function(A) { + this.z = A + } + }, + height: { + get: function() { + return this.w + }, + set: function(A) { + this.w = A + } + } + }), + Object.assign(p.prototype, { + isVector4: !0, + set: function(A, e, t, i) { + return this.x = A, + this.y = e, + this.z = t, + this.w = i, + this + }, + setScalar: function(A) { + return this.x = A, + this.y = A, + this.z = A, + this.w = A, + this + }, + setX: function(A) { + return this.x = A, + this + }, + setY: function(A) { + return this.y = A, + this + }, + setZ: function(A) { + return this.z = A, + this + }, + setW: function(A) { + return this.w = A, + this + }, + setComponent: function(A, e) { + switch (A) { + case 0: + this.x = e; + break; + case 1: + this.y = e; + break; + case 2: + this.z = e; + break; + case 3: + this.w = e; + break; + default: + throw new Error("index is out of range: " + A) + } + return this + }, + getComponent: function(A) { + switch (A) { + case 0: + return this.x; + case 1: + return this.y; + case 2: + return this.z; + case 3: + return this.w; + default: + throw new Error("index is out of range: " + A) + } + }, + clone: function() { + return new this.constructor(this.x,this.y,this.z,this.w) + }, + copy: function(A) { + return this.x = A.x, + this.y = A.y, + this.z = A.z, + this.w = void 0 !== A.w ? A.w : 1, + this + }, + add: function(A, e) { + return void 0 !== e ? (console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."), + this.addVectors(A, e)) : (this.x += A.x, + this.y += A.y, + this.z += A.z, + this.w += A.w, + this) + }, + addScalar: function(A) { + return this.x += A, + this.y += A, + this.z += A, + this.w += A, + this + }, + addVectors: function(A, e) { + return this.x = A.x + e.x, + this.y = A.y + e.y, + this.z = A.z + e.z, + this.w = A.w + e.w, + this + }, + addScaledVector: function(A, e) { + return this.x += A.x * e, + this.y += A.y * e, + this.z += A.z * e, + this.w += A.w * e, + this + }, + sub: function(A, e) { + return void 0 !== e ? (console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."), + this.subVectors(A, e)) : (this.x -= A.x, + this.y -= A.y, + this.z -= A.z, + this.w -= A.w, + this) + }, + subScalar: function(A) { + return this.x -= A, + this.y -= A, + this.z -= A, + this.w -= A, + this + }, + subVectors: function(A, e) { + return this.x = A.x - e.x, + this.y = A.y - e.y, + this.z = A.z - e.z, + this.w = A.w - e.w, + this + }, + multiplyScalar: function(A) { + return this.x *= A, + this.y *= A, + this.z *= A, + this.w *= A, + this + }, + applyMatrix4: function(A) { + var e = this.x + , t = this.y + , i = this.z + , o = this.w + , n = A.elements; + return this.x = n[0] * e + n[4] * t + n[8] * i + n[12] * o, + this.y = n[1] * e + n[5] * t + n[9] * i + n[13] * o, + this.z = n[2] * e + n[6] * t + n[10] * i + n[14] * o, + this.w = n[3] * e + n[7] * t + n[11] * i + n[15] * o, + this + }, + divideScalar: function(A) { + return this.multiplyScalar(1 / A) + }, + setAxisAngleFromQuaternion: function(A) { + this.w = 2 * Math.acos(A.w); + var e = Math.sqrt(1 - A.w * A.w); + return 1e-4 > e ? (this.x = 1, + this.y = 0, + this.z = 0) : (this.x = A.x / e, + this.y = A.y / e, + this.z = A.z / e), + this + }, + setAxisAngleFromRotationMatrix: function(A) { + var e, t, i, o, n = A.elements, r = n[0], a = n[4], s = n[8], l = n[1], c = n[5], h = n[9], d = n[2], p = n[6], g = n[10]; + if (.01 > Math.abs(a - l) && .01 > Math.abs(s - d) && .01 > Math.abs(h - p)) { + if (.1 > Math.abs(a + l) && .1 > Math.abs(s + d) && .1 > Math.abs(h + p) && .1 > Math.abs(r + c + g - 3)) + return this.set(1, 0, 0, 0), + this; + e = Math.PI; + var u = (r + 1) / 2 + , f = (c + 1) / 2 + , m = (g + 1) / 2 + , C = (a + l) / 4 + , y = (s + d) / 4 + , v = (h + p) / 4; + return u > f && u > m ? .01 > u ? (t = 0, + i = .707106781, + o = .707106781) : (i = C / (t = Math.sqrt(u)), + o = y / t) : f > m ? .01 > f ? (t = .707106781, + i = 0, + o = .707106781) : (t = C / (i = Math.sqrt(f)), + o = v / i) : .01 > m ? (t = .707106781, + i = .707106781, + o = 0) : (t = y / (o = Math.sqrt(m)), + i = v / o), + this.set(t, i, o, e), + this + } + var I = Math.sqrt((p - h) * (p - h) + (s - d) * (s - d) + (l - a) * (l - a)); + return .001 > Math.abs(I) && (I = 1), + this.x = (p - h) / I, + this.y = (s - d) / I, + this.z = (l - a) / I, + this.w = Math.acos((r + c + g - 1) / 2), + this + }, + min: function(A) { + return this.x = Math.min(this.x, A.x), + this.y = Math.min(this.y, A.y), + this.z = Math.min(this.z, A.z), + this.w = Math.min(this.w, A.w), + this + }, + max: function(A) { + return this.x = Math.max(this.x, A.x), + this.y = Math.max(this.y, A.y), + this.z = Math.max(this.z, A.z), + this.w = Math.max(this.w, A.w), + this + }, + clamp: function(A, e) { + return this.x = Math.max(A.x, Math.min(e.x, this.x)), + this.y = Math.max(A.y, Math.min(e.y, this.y)), + this.z = Math.max(A.z, Math.min(e.z, this.z)), + this.w = Math.max(A.w, Math.min(e.w, this.w)), + this + }, + clampScalar: function(A, e) { + return this.x = Math.max(A, Math.min(e, this.x)), + this.y = Math.max(A, Math.min(e, this.y)), + this.z = Math.max(A, Math.min(e, this.z)), + this.w = Math.max(A, Math.min(e, this.w)), + this + }, + clampLength: function(A, e) { + var t = this.length(); + return this.divideScalar(t || 1).multiplyScalar(Math.max(A, Math.min(e, t))) + }, + floor: function() { + return this.x = Math.floor(this.x), + this.y = Math.floor(this.y), + this.z = Math.floor(this.z), + this.w = Math.floor(this.w), + this + }, + ceil: function() { + return this.x = Math.ceil(this.x), + this.y = Math.ceil(this.y), + this.z = Math.ceil(this.z), + this.w = Math.ceil(this.w), + this + }, + round: function() { + return this.x = Math.round(this.x), + this.y = Math.round(this.y), + this.z = Math.round(this.z), + this.w = Math.round(this.w), + this + }, + roundToZero: function() { + return this.x = 0 > this.x ? Math.ceil(this.x) : Math.floor(this.x), + this.y = 0 > this.y ? Math.ceil(this.y) : Math.floor(this.y), + this.z = 0 > this.z ? Math.ceil(this.z) : Math.floor(this.z), + this.w = 0 > this.w ? Math.ceil(this.w) : Math.floor(this.w), + this + }, + negate: function() { + return this.x = -this.x, + this.y = -this.y, + this.z = -this.z, + this.w = -this.w, + this + }, + dot: function(A) { + return this.x * A.x + this.y * A.y + this.z * A.z + this.w * A.w + }, + lengthSq: function() { + return this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w + }, + length: function() { + return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w) + }, + manhattanLength: function() { + return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z) + Math.abs(this.w) + }, + normalize: function() { + return this.divideScalar(this.length() || 1) + }, + setLength: function(A) { + return this.normalize().multiplyScalar(A) + }, + lerp: function(A, e) { + return this.x += (A.x - this.x) * e, + this.y += (A.y - this.y) * e, + this.z += (A.z - this.z) * e, + this.w += (A.w - this.w) * e, + this + }, + lerpVectors: function(A, e, t) { + return this.subVectors(e, A).multiplyScalar(t).add(A) + }, + equals: function(A) { + return A.x === this.x && A.y === this.y && A.z === this.z && A.w === this.w + }, + fromArray: function(A, e) { + return void 0 === e && (e = 0), + this.x = A[e], + this.y = A[e + 1], + this.z = A[e + 2], + this.w = A[e + 3], + this + }, + toArray: function(A, e) { + return void 0 === A && (A = []), + void 0 === e && (e = 0), + A[e] = this.x, + A[e + 1] = this.y, + A[e + 2] = this.z, + A[e + 3] = this.w, + A + }, + fromBufferAttribute: function(A, e, t) { + return void 0 !== t && console.warn("THREE.Vector4: offset has been removed from .fromBufferAttribute()."), + this.x = A.getX(e), + this.y = A.getY(e), + this.z = A.getZ(e), + this.w = A.getW(e), + this + } + }), + g.prototype = Object.assign(Object.create(i.prototype), { + constructor: g, + isWebGLRenderTarget: !0, + setSize: function(A, e) { + this.width === A && this.height === e || (this.width = A, + this.height = e, + this.texture.image.width = A, + this.texture.image.height = e, + this.dispose()), + this.viewport.set(0, 0, A, e), + this.scissor.set(0, 0, A, e) + }, + clone: function() { + return (new this.constructor).copy(this) + }, + copy: function(A) { + return this.width = A.width, + this.height = A.height, + this.viewport.copy(A.viewport), + this.texture = A.texture.clone(), + this.depthBuffer = A.depthBuffer, + this.stencilBuffer = A.stencilBuffer, + this.depthTexture = A.depthTexture, + this + }, + dispose: function() { + this.dispatchEvent({ + type: "dispose" + }) + } + }), + u.prototype = Object.assign(Object.create(g.prototype), { + constructor: u, + isWebGLMultisampleRenderTarget: !0, + copy: function(A) { + return g.prototype.copy.call(this, A), + this.samples = A.samples, + this + } + }), + Object.assign(f, { + slerp: function(A, e, t, i) { + return t.copy(A).slerp(e, i) + }, + slerpFlat: function(A, e, t, i, o, n, r) { + var a = t[i + 0] + , s = t[i + 1] + , l = t[i + 2] + , c = t[i + 3] + , h = o[n + 0] + , d = o[n + 1] + , p = o[n + 2] + , g = o[n + 3]; + if (c !== g || a !== h || s !== d || l !== p) { + var u = 1 - r + , f = a * h + s * d + l * p + c * g + , m = 0 > f ? -1 : 1 + , C = 1 - f * f; + if (C > Number.EPSILON) { + var y = Math.sqrt(C) + , v = Math.atan2(y, f * m); + u = Math.sin(u * v) / y, + r = Math.sin(r * v) / y + } + var I = r * m; + if (a = a * u + h * I, + s = s * u + d * I, + l = l * u + p * I, + c = c * u + g * I, + u === 1 - r) { + var E = 1 / Math.sqrt(a * a + s * s + l * l + c * c); + a *= E, + s *= E, + l *= E, + c *= E + } + } + A[e] = a, + A[e + 1] = s, + A[e + 2] = l, + A[e + 3] = c + } + }), + Object.defineProperties(f.prototype, { + x: { + get: function() { + return this._x + }, + set: function(A) { + this._x = A, + this._onChangeCallback() + } + }, + y: { + get: function() { + return this._y + }, + set: function(A) { + this._y = A, + this._onChangeCallback() + } + }, + z: { + get: function() { + return this._z + }, + set: function(A) { + this._z = A, + this._onChangeCallback() + } + }, + w: { + get: function() { + return this._w + }, + set: function(A) { + this._w = A, + this._onChangeCallback() + } + } + }), + Object.assign(f.prototype, { + isQuaternion: !0, + set: function(A, e, t, i) { + return this._x = A, + this._y = e, + this._z = t, + this._w = i, + this._onChangeCallback(), + this + }, + clone: function() { + return new this.constructor(this._x,this._y,this._z,this._w) + }, + copy: function(A) { + return this._x = A.x, + this._y = A.y, + this._z = A.z, + this._w = A.w, + this._onChangeCallback(), + this + }, + setFromEuler: function(A, e) { + if (!A || !A.isEuler) + throw new Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order."); + var t = A._x + , i = A._y + , o = A._z + , n = A.order + , r = Math.cos + , a = Math.sin + , s = r(t / 2) + , l = r(i / 2) + , c = r(o / 2) + , h = a(t / 2) + , d = a(i / 2) + , p = a(o / 2); + return "XYZ" === n ? (this._x = h * l * c + s * d * p, + this._y = s * d * c - h * l * p, + this._z = s * l * p + h * d * c, + this._w = s * l * c - h * d * p) : "YXZ" === n ? (this._x = h * l * c + s * d * p, + this._y = s * d * c - h * l * p, + this._z = s * l * p - h * d * c, + this._w = s * l * c + h * d * p) : "ZXY" === n ? (this._x = h * l * c - s * d * p, + this._y = s * d * c + h * l * p, + this._z = s * l * p + h * d * c, + this._w = s * l * c - h * d * p) : "ZYX" === n ? (this._x = h * l * c - s * d * p, + this._y = s * d * c + h * l * p, + this._z = s * l * p - h * d * c, + this._w = s * l * c + h * d * p) : "YZX" === n ? (this._x = h * l * c + s * d * p, + this._y = s * d * c + h * l * p, + this._z = s * l * p - h * d * c, + this._w = s * l * c - h * d * p) : "XZY" === n && (this._x = h * l * c - s * d * p, + this._y = s * d * c - h * l * p, + this._z = s * l * p + h * d * c, + this._w = s * l * c + h * d * p), + !1 !== e && this._onChangeCallback(), + this + }, + setFromAxisAngle: function(A, e) { + var t = e / 2 + , i = Math.sin(t); + return this._x = A.x * i, + this._y = A.y * i, + this._z = A.z * i, + this._w = Math.cos(t), + this._onChangeCallback(), + this + }, + setFromRotationMatrix: function(A) { + var e, t = A.elements, i = t[0], o = t[4], n = t[8], r = t[1], a = t[5], s = t[9], l = t[2], c = t[6], h = t[10], d = i + a + h; + return d > 0 ? (e = .5 / Math.sqrt(d + 1), + this._w = .25 / e, + this._x = (c - s) * e, + this._y = (n - l) * e, + this._z = (r - o) * e) : i > a && i > h ? (e = 2 * Math.sqrt(1 + i - a - h), + this._w = (c - s) / e, + this._x = .25 * e, + this._y = (o + r) / e, + this._z = (n + l) / e) : a > h ? (e = 2 * Math.sqrt(1 + a - i - h), + this._w = (n - l) / e, + this._x = (o + r) / e, + this._y = .25 * e, + this._z = (s + c) / e) : (e = 2 * Math.sqrt(1 + h - i - a), + this._w = (r - o) / e, + this._x = (n + l) / e, + this._y = (s + c) / e, + this._z = .25 * e), + this._onChangeCallback(), + this + }, + setFromUnitVectors: function(A, e) { + var t = A.dot(e) + 1; + return 1e-6 > t ? (t = 0, + Math.abs(A.x) > Math.abs(A.z) ? (this._x = -A.y, + this._y = A.x, + this._z = 0, + this._w = t) : (this._x = 0, + this._y = -A.z, + this._z = A.y, + this._w = t)) : (this._x = A.y * e.z - A.z * e.y, + this._y = A.z * e.x - A.x * e.z, + this._z = A.x * e.y - A.y * e.x, + this._w = t), + this.normalize() + }, + angleTo: function(A) { + return 2 * Math.acos(Math.abs(a.clamp(this.dot(A), -1, 1))) + }, + rotateTowards: function(A, e) { + var t = this.angleTo(A); + if (0 === t) + return this; + var i = Math.min(1, e / t); + return this.slerp(A, i), + this + }, + inverse: function() { + return this.conjugate() + }, + conjugate: function() { + return this._x *= -1, + this._y *= -1, + this._z *= -1, + this._onChangeCallback(), + this + }, + dot: function(A) { + return this._x * A._x + this._y * A._y + this._z * A._z + this._w * A._w + }, + lengthSq: function() { + return this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w + }, + length: function() { + return Math.sqrt(this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w) + }, + normalize: function() { + var A = this.length(); + return 0 === A ? (this._x = 0, + this._y = 0, + this._z = 0, + this._w = 1) : (this._x = this._x * (A = 1 / A), + this._y = this._y * A, + this._z = this._z * A, + this._w = this._w * A), + this._onChangeCallback(), + this + }, + multiply: function(A, e) { + return void 0 !== e ? (console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."), + this.multiplyQuaternions(A, e)) : this.multiplyQuaternions(this, A) + }, + premultiply: function(A) { + return this.multiplyQuaternions(A, this) + }, + multiplyQuaternions: function(A, e) { + var t = A._x + , i = A._y + , o = A._z + , n = A._w + , r = e._x + , a = e._y + , s = e._z + , l = e._w; + return this._x = t * l + n * r + i * s - o * a, + this._y = i * l + n * a + o * r - t * s, + this._z = o * l + n * s + t * a - i * r, + this._w = n * l - t * r - i * a - o * s, + this._onChangeCallback(), + this + }, + slerp: function(A, e) { + if (0 === e) + return this; + if (1 === e) + return this.copy(A); + var t = this._x + , i = this._y + , o = this._z + , n = this._w + , r = n * A._w + t * A._x + i * A._y + o * A._z; + if (0 > r ? (this._w = -A._w, + this._x = -A._x, + this._y = -A._y, + this._z = -A._z, + r = -r) : this.copy(A), + r >= 1) + return this._w = n, + this._x = t, + this._y = i, + this._z = o, + this; + var a = 1 - r * r; + if (Number.EPSILON >= a) { + var s = 1 - e; + return this._w = s * n + e * this._w, + this._x = s * t + e * this._x, + this._y = s * i + e * this._y, + this._z = s * o + e * this._z, + this.normalize(), + this._onChangeCallback(), + this + } + var l = Math.sqrt(a) + , c = Math.atan2(l, r) + , h = Math.sin((1 - e) * c) / l + , d = Math.sin(e * c) / l; + return this._w = n * h + this._w * d, + this._x = t * h + this._x * d, + this._y = i * h + this._y * d, + this._z = o * h + this._z * d, + this._onChangeCallback(), + this + }, + equals: function(A) { + return A._x === this._x && A._y === this._y && A._z === this._z && A._w === this._w + }, + fromArray: function(A, e) { + return void 0 === e && (e = 0), + this._x = A[e], + this._y = A[e + 1], + this._z = A[e + 2], + this._w = A[e + 3], + this._onChangeCallback(), + this + }, + toArray: function(A, e) { + return void 0 === A && (A = []), + void 0 === e && (e = 0), + A[e] = this._x, + A[e + 1] = this._y, + A[e + 2] = this._z, + A[e + 3] = this._w, + A + }, + fromBufferAttribute: function(A, e) { + return this._x = A.getX(e), + this._y = A.getY(e), + this._z = A.getZ(e), + this._w = A.getW(e), + this + }, + _onChange: function(A) { + return this._onChangeCallback = A, + this + }, + _onChangeCallback: function() {} + }); + var m = new y + , C = new f; + function y(A, e, t) { + this.x = A || 0, + this.y = e || 0, + this.z = t || 0 + } + Object.assign(y.prototype, { + isVector3: !0, + set: function(A, e, t) { + return this.x = A, + this.y = e, + this.z = t, + this + }, + setScalar: function(A) { + return this.x = A, + this.y = A, + this.z = A, + this + }, + setX: function(A) { + return this.x = A, + this + }, + setY: function(A) { + return this.y = A, + this + }, + setZ: function(A) { + return this.z = A, + this + }, + setComponent: function(A, e) { + switch (A) { + case 0: + this.x = e; + break; + case 1: + this.y = e; + break; + case 2: + this.z = e; + break; + default: + throw new Error("index is out of range: " + A) + } + return this + }, + getComponent: function(A) { + switch (A) { + case 0: + return this.x; + case 1: + return this.y; + case 2: + return this.z; + default: + throw new Error("index is out of range: " + A) + } + }, + clone: function() { + return new this.constructor(this.x,this.y,this.z) + }, + copy: function(A) { + return this.x = A.x, + this.y = A.y, + this.z = A.z, + this + }, + add: function(A, e) { + return void 0 !== e ? (console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."), + this.addVectors(A, e)) : (this.x += A.x, + this.y += A.y, + this.z += A.z, + this) + }, + addScalar: function(A) { + return this.x += A, + this.y += A, + this.z += A, + this + }, + addVectors: function(A, e) { + return this.x = A.x + e.x, + this.y = A.y + e.y, + this.z = A.z + e.z, + this + }, + addScaledVector: function(A, e) { + return this.x += A.x * e, + this.y += A.y * e, + this.z += A.z * e, + this + }, + sub: function(A, e) { + return void 0 !== e ? (console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."), + this.subVectors(A, e)) : (this.x -= A.x, + this.y -= A.y, + this.z -= A.z, + this) + }, + subScalar: function(A) { + return this.x -= A, + this.y -= A, + this.z -= A, + this + }, + subVectors: function(A, e) { + return this.x = A.x - e.x, + this.y = A.y - e.y, + this.z = A.z - e.z, + this + }, + multiply: function(A, e) { + return void 0 !== e ? (console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."), + this.multiplyVectors(A, e)) : (this.x *= A.x, + this.y *= A.y, + this.z *= A.z, + this) + }, + multiplyScalar: function(A) { + return this.x *= A, + this.y *= A, + this.z *= A, + this + }, + multiplyVectors: function(A, e) { + return this.x = A.x * e.x, + this.y = A.y * e.y, + this.z = A.z * e.z, + this + }, + applyEuler: function(A) { + return A && A.isEuler || console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order."), + this.applyQuaternion(C.setFromEuler(A)) + }, + applyAxisAngle: function(A, e) { + return this.applyQuaternion(C.setFromAxisAngle(A, e)) + }, + applyMatrix3: function(A) { + var e = this.x + , t = this.y + , i = this.z + , o = A.elements; + return this.x = o[0] * e + o[3] * t + o[6] * i, + this.y = o[1] * e + o[4] * t + o[7] * i, + this.z = o[2] * e + o[5] * t + o[8] * i, + this + }, + applyNormalMatrix: function(A) { + return this.applyMatrix3(A).normalize() + }, + applyMatrix4: function(A) { + var e = this.x + , t = this.y + , i = this.z + , o = A.elements + , n = 1 / (o[3] * e + o[7] * t + o[11] * i + o[15]); + return this.x = (o[0] * e + o[4] * t + o[8] * i + o[12]) * n, + this.y = (o[1] * e + o[5] * t + o[9] * i + o[13]) * n, + this.z = (o[2] * e + o[6] * t + o[10] * i + o[14]) * n, + this + }, + applyQuaternion: function(A) { + var e = this.x + , t = this.y + , i = this.z + , o = A.x + , n = A.y + , r = A.z + , a = A.w + , s = a * e + n * i - r * t + , l = a * t + r * e - o * i + , c = a * i + o * t - n * e + , h = -o * e - n * t - r * i; + return this.x = s * a + h * -o + l * -r - c * -n, + this.y = l * a + h * -n + c * -o - s * -r, + this.z = c * a + h * -r + s * -n - l * -o, + this + }, + project: function(A) { + return this.applyMatrix4(A.matrixWorldInverse).applyMatrix4(A.projectionMatrix) + }, + unproject: function(A) { + return this.applyMatrix4(A.projectionMatrixInverse).applyMatrix4(A.matrixWorld) + }, + transformDirection: function(A) { + var e = this.x + , t = this.y + , i = this.z + , o = A.elements; + return this.x = o[0] * e + o[4] * t + o[8] * i, + this.y = o[1] * e + o[5] * t + o[9] * i, + this.z = o[2] * e + o[6] * t + o[10] * i, + this.normalize() + }, + divide: function(A) { + return this.x /= A.x, + this.y /= A.y, + this.z /= A.z, + this + }, + divideScalar: function(A) { + return this.multiplyScalar(1 / A) + }, + min: function(A) { + return this.x = Math.min(this.x, A.x), + this.y = Math.min(this.y, A.y), + this.z = Math.min(this.z, A.z), + this + }, + max: function(A) { + return this.x = Math.max(this.x, A.x), + this.y = Math.max(this.y, A.y), + this.z = Math.max(this.z, A.z), + this + }, + clamp: function(A, e) { + return this.x = Math.max(A.x, Math.min(e.x, this.x)), + this.y = Math.max(A.y, Math.min(e.y, this.y)), + this.z = Math.max(A.z, Math.min(e.z, this.z)), + this + }, + clampScalar: function(A, e) { + return this.x = Math.max(A, Math.min(e, this.x)), + this.y = Math.max(A, Math.min(e, this.y)), + this.z = Math.max(A, Math.min(e, this.z)), + this + }, + clampLength: function(A, e) { + var t = this.length(); + return this.divideScalar(t || 1).multiplyScalar(Math.max(A, Math.min(e, t))) + }, + floor: function() { + return this.x = Math.floor(this.x), + this.y = Math.floor(this.y), + this.z = Math.floor(this.z), + this + }, + ceil: function() { + return this.x = Math.ceil(this.x), + this.y = Math.ceil(this.y), + this.z = Math.ceil(this.z), + this + }, + round: function() { + return this.x = Math.round(this.x), + this.y = Math.round(this.y), + this.z = Math.round(this.z), + this + }, + roundToZero: function() { + return this.x = 0 > this.x ? Math.ceil(this.x) : Math.floor(this.x), + this.y = 0 > this.y ? Math.ceil(this.y) : Math.floor(this.y), + this.z = 0 > this.z ? Math.ceil(this.z) : Math.floor(this.z), + this + }, + negate: function() { + return this.x = -this.x, + this.y = -this.y, + this.z = -this.z, + this + }, + dot: function(A) { + return this.x * A.x + this.y * A.y + this.z * A.z + }, + lengthSq: function() { + return this.x * this.x + this.y * this.y + this.z * this.z + }, + length: function() { + return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z) + }, + manhattanLength: function() { + return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z) + }, + normalize: function() { + return this.divideScalar(this.length() || 1) + }, + setLength: function(A) { + return this.normalize().multiplyScalar(A) + }, + lerp: function(A, e) { + return this.x += (A.x - this.x) * e, + this.y += (A.y - this.y) * e, + this.z += (A.z - this.z) * e, + this + }, + lerpVectors: function(A, e, t) { + return this.subVectors(e, A).multiplyScalar(t).add(A) + }, + cross: function(A, e) { + return void 0 !== e ? (console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."), + this.crossVectors(A, e)) : this.crossVectors(this, A) + }, + crossVectors: function(A, e) { + var t = A.x + , i = A.y + , o = A.z + , n = e.x + , r = e.y + , a = e.z; + return this.x = i * a - o * r, + this.y = o * n - t * a, + this.z = t * r - i * n, + this + }, + projectOnVector: function(A) { + var e = A.lengthSq(); + if (0 === e) + return this.set(0, 0, 0); + var t = A.dot(this) / e; + return this.copy(A).multiplyScalar(t) + }, + projectOnPlane: function(A) { + return m.copy(this).projectOnVector(A), + this.sub(m) + }, + reflect: function(A) { + return this.sub(m.copy(A).multiplyScalar(2 * this.dot(A))) + }, + angleTo: function(A) { + var e = Math.sqrt(this.lengthSq() * A.lengthSq()); + if (0 === e) + return Math.PI / 2; + var t = this.dot(A) / e; + return Math.acos(a.clamp(t, -1, 1)) + }, + distanceTo: function(A) { + return Math.sqrt(this.distanceToSquared(A)) + }, + distanceToSquared: function(A) { + var e = this.x - A.x + , t = this.y - A.y + , i = this.z - A.z; + return e * e + t * t + i * i + }, + manhattanDistanceTo: function(A) { + return Math.abs(this.x - A.x) + Math.abs(this.y - A.y) + Math.abs(this.z - A.z) + }, + setFromSpherical: function(A) { + return this.setFromSphericalCoords(A.radius, A.phi, A.theta) + }, + setFromSphericalCoords: function(A, e, t) { + var i = Math.sin(e) * A; + return this.x = i * Math.sin(t), + this.y = Math.cos(e) * A, + this.z = i * Math.cos(t), + this + }, + setFromCylindrical: function(A) { + return this.setFromCylindricalCoords(A.radius, A.theta, A.y) + }, + setFromCylindricalCoords: function(A, e, t) { + return this.x = A * Math.sin(e), + this.y = t, + this.z = A * Math.cos(e), + this + }, + setFromMatrixPosition: function(A) { + var e = A.elements; + return this.x = e[12], + this.y = e[13], + this.z = e[14], + this + }, + setFromMatrixScale: function(A) { + var e = this.setFromMatrixColumn(A, 0).length() + , t = this.setFromMatrixColumn(A, 1).length() + , i = this.setFromMatrixColumn(A, 2).length(); + return this.x = e, + this.y = t, + this.z = i, + this + }, + setFromMatrixColumn: function(A, e) { + return this.fromArray(A.elements, 4 * e) + }, + setFromMatrix3Column: function(A, e) { + return this.fromArray(A.elements, 3 * e) + }, + equals: function(A) { + return A.x === this.x && A.y === this.y && A.z === this.z + }, + fromArray: function(A, e) { + return void 0 === e && (e = 0), + this.x = A[e], + this.y = A[e + 1], + this.z = A[e + 2], + this + }, + toArray: function(A, e) { + return void 0 === A && (A = []), + void 0 === e && (e = 0), + A[e] = this.x, + A[e + 1] = this.y, + A[e + 2] = this.z, + A + }, + fromBufferAttribute: function(A, e, t) { + return void 0 !== t && console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute()."), + this.x = A.getX(e), + this.y = A.getY(e), + this.z = A.getZ(e), + this + } + }); + var v = new y + , I = new M + , E = new y(0,0,0) + , B = new y(1,1,1) + , x = new y + , S = new y + , w = new y; + function M() { + this.elements = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], + arguments.length > 0 && console.error("THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.") + } + Object.assign(M.prototype, { + isMatrix4: !0, + set: function(A, e, t, i, o, n, r, a, s, l, c, h, d, p, g, u) { + var f = this.elements; + return f[0] = A, + f[4] = e, + f[8] = t, + f[12] = i, + f[1] = o, + f[5] = n, + f[9] = r, + f[13] = a, + f[2] = s, + f[6] = l, + f[10] = c, + f[14] = h, + f[3] = d, + f[7] = p, + f[11] = g, + f[15] = u, + this + }, + identity: function() { + return this.set(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1), + this + }, + clone: function() { + return (new M).fromArray(this.elements) + }, + copy: function(A) { + var e = this.elements + , t = A.elements; + return e[0] = t[0], + e[1] = t[1], + e[2] = t[2], + e[3] = t[3], + e[4] = t[4], + e[5] = t[5], + e[6] = t[6], + e[7] = t[7], + e[8] = t[8], + e[9] = t[9], + e[10] = t[10], + e[11] = t[11], + e[12] = t[12], + e[13] = t[13], + e[14] = t[14], + e[15] = t[15], + this + }, + copyPosition: function(A) { + var e = this.elements + , t = A.elements; + return e[12] = t[12], + e[13] = t[13], + e[14] = t[14], + this + }, + extractBasis: function(A, e, t) { + return A.setFromMatrixColumn(this, 0), + e.setFromMatrixColumn(this, 1), + t.setFromMatrixColumn(this, 2), + this + }, + makeBasis: function(A, e, t) { + return this.set(A.x, e.x, t.x, 0, A.y, e.y, t.y, 0, A.z, e.z, t.z, 0, 0, 0, 0, 1), + this + }, + extractRotation: function(A) { + var e = this.elements + , t = A.elements + , i = 1 / v.setFromMatrixColumn(A, 0).length() + , o = 1 / v.setFromMatrixColumn(A, 1).length() + , n = 1 / v.setFromMatrixColumn(A, 2).length(); + return e[0] = t[0] * i, + e[1] = t[1] * i, + e[2] = t[2] * i, + e[3] = 0, + e[4] = t[4] * o, + e[5] = t[5] * o, + e[6] = t[6] * o, + e[7] = 0, + e[8] = t[8] * n, + e[9] = t[9] * n, + e[10] = t[10] * n, + e[11] = 0, + e[12] = 0, + e[13] = 0, + e[14] = 0, + e[15] = 1, + this + }, + makeRotationFromEuler: function(A) { + A && A.isEuler || console.error("THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order."); + var e = this.elements + , t = A.x + , i = A.y + , o = A.z + , n = Math.cos(t) + , r = Math.sin(t) + , a = Math.cos(i) + , s = Math.sin(i) + , l = Math.cos(o) + , c = Math.sin(o); + if ("XYZ" === A.order) { + var h = n * l + , d = n * c + , p = r * l + , g = r * c; + e[0] = a * l, + e[4] = -a * c, + e[8] = s, + e[1] = d + p * s, + e[5] = h - g * s, + e[9] = -r * a, + e[2] = g - h * s, + e[6] = p + d * s, + e[10] = n * a + } else if ("YXZ" === A.order) { + var u = a * c + , f = s * l; + e[0] = (m = a * l) + (C = s * c) * r, + e[4] = f * r - u, + e[8] = n * s, + e[1] = n * c, + e[5] = n * l, + e[9] = -r, + e[2] = u * r - f, + e[6] = C + m * r, + e[10] = n * a + } else if ("ZXY" === A.order) { + var m, C; + u = a * c, + f = s * l; + e[0] = (m = a * l) - (C = s * c) * r, + e[4] = -n * c, + e[8] = f + u * r, + e[1] = u + f * r, + e[5] = n * l, + e[9] = C - m * r, + e[2] = -n * s, + e[6] = r, + e[10] = n * a + } else if ("ZYX" === A.order) { + h = n * l, + d = n * c, + p = r * l, + g = r * c; + e[0] = a * l, + e[4] = p * s - d, + e[8] = h * s + g, + e[1] = a * c, + e[5] = g * s + h, + e[9] = d * s - p, + e[2] = -s, + e[6] = r * a, + e[10] = n * a + } else if ("YZX" === A.order) { + var y = n * a + , v = n * s + , I = r * a + , E = r * s; + e[0] = a * l, + e[4] = E - y * c, + e[8] = I * c + v, + e[1] = c, + e[5] = n * l, + e[9] = -r * l, + e[2] = -s * l, + e[6] = v * c + I, + e[10] = y - E * c + } else if ("XZY" === A.order) { + y = n * a, + v = n * s, + I = r * a, + E = r * s; + e[0] = a * l, + e[4] = -c, + e[8] = s * l, + e[1] = y * c + E, + e[5] = n * l, + e[9] = v * c - I, + e[2] = I * c - v, + e[6] = r * l, + e[10] = E * c + y + } + return e[3] = 0, + e[7] = 0, + e[11] = 0, + e[12] = 0, + e[13] = 0, + e[14] = 0, + e[15] = 1, + this + }, + makeRotationFromQuaternion: function(A) { + return this.compose(E, A, B) + }, + lookAt: function(A, e, t) { + var i = this.elements; + return w.subVectors(A, e), + 0 === w.lengthSq() && (w.z = 1), + w.normalize(), + x.crossVectors(t, w), + 0 === x.lengthSq() && (1 === Math.abs(t.z) ? w.x += 1e-4 : w.z += 1e-4, + w.normalize(), + x.crossVectors(t, w)), + x.normalize(), + S.crossVectors(w, x), + i[0] = x.x, + i[4] = S.x, + i[8] = w.x, + i[1] = x.y, + i[5] = S.y, + i[9] = w.y, + i[2] = x.z, + i[6] = S.z, + i[10] = w.z, + this + }, + multiply: function(A, e) { + return void 0 !== e ? (console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."), + this.multiplyMatrices(A, e)) : this.multiplyMatrices(this, A) + }, + premultiply: function(A) { + return this.multiplyMatrices(A, this) + }, + multiplyMatrices: function(A, e) { + var t = A.elements + , i = e.elements + , o = this.elements + , n = t[0] + , r = t[4] + , a = t[8] + , s = t[12] + , l = t[1] + , c = t[5] + , h = t[9] + , d = t[13] + , p = t[2] + , g = t[6] + , u = t[10] + , f = t[14] + , m = t[3] + , C = t[7] + , y = t[11] + , v = t[15] + , I = i[0] + , E = i[4] + , B = i[8] + , x = i[12] + , S = i[1] + , w = i[5] + , M = i[9] + , b = i[13] + , U = i[2] + , F = i[6] + , K = i[10] + , Q = i[14] + , R = i[3] + , T = i[7] + , k = i[11] + , D = i[15]; + return o[0] = n * I + r * S + a * U + s * R, + o[4] = n * E + r * w + a * F + s * T, + o[8] = n * B + r * M + a * K + s * k, + o[12] = n * x + r * b + a * Q + s * D, + o[1] = l * I + c * S + h * U + d * R, + o[5] = l * E + c * w + h * F + d * T, + o[9] = l * B + c * M + h * K + d * k, + o[13] = l * x + c * b + h * Q + d * D, + o[2] = p * I + g * S + u * U + f * R, + o[6] = p * E + g * w + u * F + f * T, + o[10] = p * B + g * M + u * K + f * k, + o[14] = p * x + g * b + u * Q + f * D, + o[3] = m * I + C * S + y * U + v * R, + o[7] = m * E + C * w + y * F + v * T, + o[11] = m * B + C * M + y * K + v * k, + o[15] = m * x + C * b + y * Q + v * D, + this + }, + multiplyScalar: function(A) { + var e = this.elements; + return e[0] *= A, + e[4] *= A, + e[8] *= A, + e[12] *= A, + e[1] *= A, + e[5] *= A, + e[9] *= A, + e[13] *= A, + e[2] *= A, + e[6] *= A, + e[10] *= A, + e[14] *= A, + e[3] *= A, + e[7] *= A, + e[11] *= A, + e[15] *= A, + this + }, + determinant: function() { + var A = this.elements + , e = A[0] + , t = A[4] + , i = A[8] + , o = A[12] + , n = A[1] + , r = A[5] + , a = A[9] + , s = A[13] + , l = A[2] + , c = A[6] + , h = A[10] + , d = A[14]; + return A[3] * (+o * a * c - i * s * c - o * r * h + t * s * h + i * r * d - t * a * d) + A[7] * (+e * a * d - e * s * h + o * n * h - i * n * d + i * s * l - o * a * l) + A[11] * (+e * s * c - e * r * d - o * n * c + t * n * d + o * r * l - t * s * l) + A[15] * (-i * r * l - e * a * c + e * r * h + i * n * c - t * n * h + t * a * l) + }, + transpose: function() { + var A, e = this.elements; + return A = e[1], + e[1] = e[4], + e[4] = A, + A = e[2], + e[2] = e[8], + e[8] = A, + A = e[6], + e[6] = e[9], + e[9] = A, + A = e[3], + e[3] = e[12], + e[12] = A, + A = e[7], + e[7] = e[13], + e[13] = A, + A = e[11], + e[11] = e[14], + e[14] = A, + this + }, + setPosition: function(A, e, t) { + var i = this.elements; + return A.isVector3 ? (i[12] = A.x, + i[13] = A.y, + i[14] = A.z) : (i[12] = A, + i[13] = e, + i[14] = t), + this + }, + getInverse: function(A, e) { + void 0 !== e && console.warn("THREE.Matrix4: .getInverse() can no longer be configured to throw on degenerate."); + var t = this.elements + , i = A.elements + , o = i[0] + , n = i[1] + , r = i[2] + , a = i[3] + , s = i[4] + , l = i[5] + , c = i[6] + , h = i[7] + , d = i[8] + , p = i[9] + , g = i[10] + , u = i[11] + , f = i[12] + , m = i[13] + , C = i[14] + , y = i[15] + , v = p * C * h - m * g * h + m * c * u - l * C * u - p * c * y + l * g * y + , I = f * g * h - d * C * h - f * c * u + s * C * u + d * c * y - s * g * y + , E = d * m * h - f * p * h + f * l * u - s * m * u - d * l * y + s * p * y + , B = f * p * c - d * m * c - f * l * g + s * m * g + d * l * C - s * p * C + , x = o * v + n * I + r * E + a * B; + if (0 === x) + return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); + var S = 1 / x; + return t[0] = v * S, + t[1] = (m * g * a - p * C * a - m * r * u + n * C * u + p * r * y - n * g * y) * S, + t[2] = (l * C * a - m * c * a + m * r * h - n * C * h - l * r * y + n * c * y) * S, + t[3] = (p * c * a - l * g * a - p * r * h + n * g * h + l * r * u - n * c * u) * S, + t[4] = I * S, + t[5] = (d * C * a - f * g * a + f * r * u - o * C * u - d * r * y + o * g * y) * S, + t[6] = (f * c * a - s * C * a - f * r * h + o * C * h + s * r * y - o * c * y) * S, + t[7] = (s * g * a - d * c * a + d * r * h - o * g * h - s * r * u + o * c * u) * S, + t[8] = E * S, + t[9] = (f * p * a - d * m * a - f * n * u + o * m * u + d * n * y - o * p * y) * S, + t[10] = (s * m * a - f * l * a + f * n * h - o * m * h - s * n * y + o * l * y) * S, + t[11] = (d * l * a - s * p * a - d * n * h + o * p * h + s * n * u - o * l * u) * S, + t[12] = B * S, + t[13] = (d * m * r - f * p * r + f * n * g - o * m * g - d * n * C + o * p * C) * S, + t[14] = (f * l * r - s * m * r - f * n * c + o * m * c + s * n * C - o * l * C) * S, + t[15] = (s * p * r - d * l * r + d * n * c - o * p * c - s * n * g + o * l * g) * S, + this + }, + scale: function(A) { + var e = this.elements + , t = A.x + , i = A.y + , o = A.z; + return e[0] *= t, + e[4] *= i, + e[8] *= o, + e[1] *= t, + e[5] *= i, + e[9] *= o, + e[2] *= t, + e[6] *= i, + e[10] *= o, + e[3] *= t, + e[7] *= i, + e[11] *= o, + this + }, + getMaxScaleOnAxis: function() { + var A = this.elements; + return Math.sqrt(Math.max(A[0] * A[0] + A[1] * A[1] + A[2] * A[2], A[4] * A[4] + A[5] * A[5] + A[6] * A[6], A[8] * A[8] + A[9] * A[9] + A[10] * A[10])) + }, + makeTranslation: function(A, e, t) { + return this.set(1, 0, 0, A, 0, 1, 0, e, 0, 0, 1, t, 0, 0, 0, 1), + this + }, + makeRotationX: function(A) { + var e = Math.cos(A) + , t = Math.sin(A); + return this.set(1, 0, 0, 0, 0, e, -t, 0, 0, t, e, 0, 0, 0, 0, 1), + this + }, + makeRotationY: function(A) { + var e = Math.cos(A) + , t = Math.sin(A); + return this.set(e, 0, t, 0, 0, 1, 0, 0, -t, 0, e, 0, 0, 0, 0, 1), + this + }, + makeRotationZ: function(A) { + var e = Math.cos(A) + , t = Math.sin(A); + return this.set(e, -t, 0, 0, t, e, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1), + this + }, + makeRotationAxis: function(A, e) { + var t = Math.cos(e) + , i = Math.sin(e) + , o = 1 - t + , n = A.x + , r = A.y + , a = A.z + , s = o * n + , l = o * r; + return this.set(s * n + t, s * r - i * a, s * a + i * r, 0, s * r + i * a, l * r + t, l * a - i * n, 0, s * a - i * r, l * a + i * n, o * a * a + t, 0, 0, 0, 0, 1), + this + }, + makeScale: function(A, e, t) { + return this.set(A, 0, 0, 0, 0, e, 0, 0, 0, 0, t, 0, 0, 0, 0, 1), + this + }, + makeShear: function(A, e, t) { + return this.set(1, e, t, 0, A, 1, t, 0, A, e, 1, 0, 0, 0, 0, 1), + this + }, + compose: function(A, e, t) { + var i = this.elements + , o = e._x + , n = e._y + , r = e._z + , a = e._w + , s = o + o + , l = n + n + , c = r + r + , h = o * s + , d = o * l + , p = o * c + , g = n * l + , u = n * c + , f = r * c + , m = a * s + , C = a * l + , y = a * c + , v = t.x + , I = t.y + , E = t.z; + return i[0] = (1 - (g + f)) * v, + i[1] = (d + y) * v, + i[2] = (p - C) * v, + i[3] = 0, + i[4] = (d - y) * I, + i[5] = (1 - (h + f)) * I, + i[6] = (u + m) * I, + i[7] = 0, + i[8] = (p + C) * E, + i[9] = (u - m) * E, + i[10] = (1 - (h + g)) * E, + i[11] = 0, + i[12] = A.x, + i[13] = A.y, + i[14] = A.z, + i[15] = 1, + this + }, + decompose: function(A, e, t) { + var i = this.elements + , o = v.set(i[0], i[1], i[2]).length() + , n = v.set(i[4], i[5], i[6]).length() + , r = v.set(i[8], i[9], i[10]).length(); + 0 > this.determinant() && (o = -o), + A.x = i[12], + A.y = i[13], + A.z = i[14], + I.copy(this); + var a = 1 / o + , s = 1 / n + , l = 1 / r; + return I.elements[0] *= a, + I.elements[1] *= a, + I.elements[2] *= a, + I.elements[4] *= s, + I.elements[5] *= s, + I.elements[6] *= s, + I.elements[8] *= l, + I.elements[9] *= l, + I.elements[10] *= l, + e.setFromRotationMatrix(I), + t.x = o, + t.y = n, + t.z = r, + this + }, + makePerspective: function(A, e, t, i, o, n) { + void 0 === n && console.warn("THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs."); + var r = this.elements + , a = 2 * o / (t - i) + , s = (e + A) / (e - A) + , l = (t + i) / (t - i) + , c = -(n + o) / (n - o) + , h = -2 * n * o / (n - o); + return r[0] = 2 * o / (e - A), + r[4] = 0, + r[8] = s, + r[12] = 0, + r[1] = 0, + r[5] = a, + r[9] = l, + r[13] = 0, + r[2] = 0, + r[6] = 0, + r[10] = c, + r[14] = h, + r[3] = 0, + r[7] = 0, + r[11] = -1, + r[15] = 0, + this + }, + makeOrthographic: function(A, e, t, i, o, n) { + var r = this.elements + , a = 1 / (e - A) + , s = 1 / (t - i) + , l = 1 / (n - o) + , c = (e + A) * a + , h = (t + i) * s + , d = (n + o) * l; + return r[0] = 2 * a, + r[4] = 0, + r[8] = 0, + r[12] = -c, + r[1] = 0, + r[5] = 2 * s, + r[9] = 0, + r[13] = -h, + r[2] = 0, + r[6] = 0, + r[10] = -2 * l, + r[14] = -d, + r[3] = 0, + r[7] = 0, + r[11] = 0, + r[15] = 1, + this + }, + equals: function(A) { + for (var e = this.elements, t = A.elements, i = 0; 16 > i; i++) + if (e[i] !== t[i]) + return !1; + return !0 + }, + fromArray: function(A, e) { + void 0 === e && (e = 0); + for (var t = 0; 16 > t; t++) + this.elements[t] = A[t + e]; + return this + }, + toArray: function(A, e) { + void 0 === A && (A = []), + void 0 === e && (e = 0); + var t = this.elements; + return A[e] = t[0], + A[e + 1] = t[1], + A[e + 2] = t[2], + A[e + 3] = t[3], + A[e + 4] = t[4], + A[e + 5] = t[5], + A[e + 6] = t[6], + A[e + 7] = t[7], + A[e + 8] = t[8], + A[e + 9] = t[9], + A[e + 10] = t[10], + A[e + 11] = t[11], + A[e + 12] = t[12], + A[e + 13] = t[13], + A[e + 14] = t[14], + A[e + 15] = t[15], + A + } + }); + var b = new M + , U = new f; + function F(A, e, t, i) { + this._x = A || 0, + this._y = e || 0, + this._z = t || 0, + this._order = i || F.DefaultOrder + } + function K() { + this.mask = 1 + } + F.RotationOrders = ["XYZ", "YZX", "ZXY", "XZY", "YXZ", "ZYX"], + F.DefaultOrder = "XYZ", + Object.defineProperties(F.prototype, { + x: { + get: function() { + return this._x + }, + set: function(A) { + this._x = A, + this._onChangeCallback() + } + }, + y: { + get: function() { + return this._y + }, + set: function(A) { + this._y = A, + this._onChangeCallback() + } + }, + z: { + get: function() { + return this._z + }, + set: function(A) { + this._z = A, + this._onChangeCallback() + } + }, + order: { + get: function() { + return this._order + }, + set: function(A) { + this._order = A, + this._onChangeCallback() + } + } + }), + Object.assign(F.prototype, { + isEuler: !0, + set: function(A, e, t, i) { + return this._x = A, + this._y = e, + this._z = t, + this._order = i || this._order, + this._onChangeCallback(), + this + }, + clone: function() { + return new this.constructor(this._x,this._y,this._z,this._order) + }, + copy: function(A) { + return this._x = A._x, + this._y = A._y, + this._z = A._z, + this._order = A._order, + this._onChangeCallback(), + this + }, + setFromRotationMatrix: function(A, e, t) { + var i = a.clamp + , o = A.elements + , n = o[0] + , r = o[4] + , s = o[8] + , l = o[1] + , c = o[5] + , h = o[9] + , d = o[2] + , p = o[6] + , g = o[10]; + return "XYZ" === (e = e || this._order) ? (this._y = Math.asin(i(s, -1, 1)), + .9999999 > Math.abs(s) ? (this._x = Math.atan2(-h, g), + this._z = Math.atan2(-r, n)) : (this._x = Math.atan2(p, c), + this._z = 0)) : "YXZ" === e ? (this._x = Math.asin(-i(h, -1, 1)), + .9999999 > Math.abs(h) ? (this._y = Math.atan2(s, g), + this._z = Math.atan2(l, c)) : (this._y = Math.atan2(-d, n), + this._z = 0)) : "ZXY" === e ? (this._x = Math.asin(i(p, -1, 1)), + .9999999 > Math.abs(p) ? (this._y = Math.atan2(-d, g), + this._z = Math.atan2(-r, c)) : (this._y = 0, + this._z = Math.atan2(l, n))) : "ZYX" === e ? (this._y = Math.asin(-i(d, -1, 1)), + .9999999 > Math.abs(d) ? (this._x = Math.atan2(p, g), + this._z = Math.atan2(l, n)) : (this._x = 0, + this._z = Math.atan2(-r, c))) : "YZX" === e ? (this._z = Math.asin(i(l, -1, 1)), + .9999999 > Math.abs(l) ? (this._x = Math.atan2(-h, c), + this._y = Math.atan2(-d, n)) : (this._x = 0, + this._y = Math.atan2(s, g))) : "XZY" === e ? (this._z = Math.asin(-i(r, -1, 1)), + .9999999 > Math.abs(r) ? (this._x = Math.atan2(p, c), + this._y = Math.atan2(s, n)) : (this._x = Math.atan2(-h, g), + this._y = 0)) : console.warn("THREE.Euler: .setFromRotationMatrix() given unsupported order: " + e), + this._order = e, + !1 !== t && this._onChangeCallback(), + this + }, + setFromQuaternion: function(A, e, t) { + return b.makeRotationFromQuaternion(A), + this.setFromRotationMatrix(b, e, t) + }, + setFromVector3: function(A, e) { + return this.set(A.x, A.y, A.z, e || this._order) + }, + reorder: function(A) { + return U.setFromEuler(this), + this.setFromQuaternion(U, A) + }, + equals: function(A) { + return A._x === this._x && A._y === this._y && A._z === this._z && A._order === this._order + }, + fromArray: function(A) { + return this._x = A[0], + this._y = A[1], + this._z = A[2], + void 0 !== A[3] && (this._order = A[3]), + this._onChangeCallback(), + this + }, + toArray: function(A, e) { + return void 0 === A && (A = []), + void 0 === e && (e = 0), + A[e] = this._x, + A[e + 1] = this._y, + A[e + 2] = this._z, + A[e + 3] = this._order, + A + }, + toVector3: function(A) { + return A ? A.set(this._x, this._y, this._z) : new y(this._x,this._y,this._z) + }, + _onChange: function(A) { + return this._onChangeCallback = A, + this + }, + _onChangeCallback: function() {} + }), + Object.assign(K.prototype, { + set: function(A) { + this.mask = 1 << A | 0 + }, + enable: function(A) { + this.mask |= 1 << A | 0 + }, + enableAll: function() { + this.mask = -1 + }, + toggle: function(A) { + this.mask ^= 1 << A | 0 + }, + disable: function(A) { + this.mask &= ~(1 << A | 0) + }, + disableAll: function() { + this.mask = 0 + }, + test: function(A) { + return 0 != (this.mask & A.mask) + } + }); + var Q = 0 + , R = new y + , T = new f + , k = new M + , D = new y + , L = new y + , N = new y + , O = new f + , V = new y(1,0,0) + , G = new y(0,1,0) + , P = new y(0,0,1) + , q = { + type: "added" + } + , j = { + type: "removed" + }; + function H() { + Object.defineProperty(this, "id", { + value: Q++ + }), + this.uuid = a.generateUUID(), + this.name = "", + this.type = "Object3D", + this.parent = null, + this.children = [], + this.up = H.DefaultUp.clone(); + var A = new y + , e = new F + , t = new f + , i = new y(1,1,1); + e._onChange((function() { + t.setFromEuler(e, !1) + } + )), + t._onChange((function() { + e.setFromQuaternion(t, void 0, !1) + } + )), + Object.defineProperties(this, { + position: { + configurable: !0, + enumerable: !0, + value: A + }, + rotation: { + configurable: !0, + enumerable: !0, + value: e + }, + quaternion: { + configurable: !0, + enumerable: !0, + value: t + }, + scale: { + configurable: !0, + enumerable: !0, + value: i + }, + modelViewMatrix: { + value: new M + }, + normalMatrix: { + value: new l + } + }), + this.matrix = new M, + this.matrixWorld = new M, + this.matrixAutoUpdate = H.DefaultMatrixAutoUpdate, + this.matrixWorldNeedsUpdate = !1, + this.layers = new K, + this.visible = !0, + this.castShadow = !1, + this.receiveShadow = !1, + this.frustumCulled = !0, + this.renderOrder = 0, + this.userData = {} + } + function Y() { + H.call(this), + this.type = "Scene", + this.background = null, + this.environment = null, + this.fog = null, + this.overrideMaterial = null, + this.autoUpdate = !0, + "undefined" != typeof __THREE_DEVTOOLS__ && __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{ + detail: this + })) + } + H.DefaultUp = new y(0,1,0), + H.DefaultMatrixAutoUpdate = !0, + H.prototype = Object.assign(Object.create(i.prototype), { + constructor: H, + isObject3D: !0, + onBeforeRender: function() {}, + onAfterRender: function() {}, + applyMatrix4: function(A) { + this.matrixAutoUpdate && this.updateMatrix(), + this.matrix.premultiply(A), + this.matrix.decompose(this.position, this.quaternion, this.scale) + }, + applyQuaternion: function(A) { + return this.quaternion.premultiply(A), + this + }, + setRotationFromAxisAngle: function(A, e) { + this.quaternion.setFromAxisAngle(A, e) + }, + setRotationFromEuler: function(A) { + this.quaternion.setFromEuler(A, !0) + }, + setRotationFromMatrix: function(A) { + this.quaternion.setFromRotationMatrix(A) + }, + setRotationFromQuaternion: function(A) { + this.quaternion.copy(A) + }, + rotateOnAxis: function(A, e) { + return T.setFromAxisAngle(A, e), + this.quaternion.multiply(T), + this + }, + rotateOnWorldAxis: function(A, e) { + return T.setFromAxisAngle(A, e), + this.quaternion.premultiply(T), + this + }, + rotateX: function(A) { + return this.rotateOnAxis(V, A) + }, + rotateY: function(A) { + return this.rotateOnAxis(G, A) + }, + rotateZ: function(A) { + return this.rotateOnAxis(P, A) + }, + translateOnAxis: function(A, e) { + return R.copy(A).applyQuaternion(this.quaternion), + this.position.add(R.multiplyScalar(e)), + this + }, + translateX: function(A) { + return this.translateOnAxis(V, A) + }, + translateY: function(A) { + return this.translateOnAxis(G, A) + }, + translateZ: function(A) { + return this.translateOnAxis(P, A) + }, + localToWorld: function(A) { + return A.applyMatrix4(this.matrixWorld) + }, + worldToLocal: function(A) { + return A.applyMatrix4(k.getInverse(this.matrixWorld)) + }, + lookAt: function(A, e, t) { + A.isVector3 ? D.copy(A) : D.set(A, e, t); + var i = this.parent; + this.updateWorldMatrix(!0, !1), + L.setFromMatrixPosition(this.matrixWorld), + this.isCamera || this.isLight ? k.lookAt(L, D, this.up) : k.lookAt(D, L, this.up), + this.quaternion.setFromRotationMatrix(k), + i && (k.extractRotation(i.matrixWorld), + T.setFromRotationMatrix(k), + this.quaternion.premultiply(T.inverse())) + }, + add: function(A) { + if (arguments.length > 1) { + for (var e = 0; arguments.length > e; e++) + this.add(arguments[e]); + return this + } + return A === this ? (console.error("THREE.Object3D.add: object can't be added as a child of itself.", A), + this) : (A && A.isObject3D ? (null !== A.parent && A.parent.remove(A), + A.parent = this, + this.children.push(A), + A.dispatchEvent(q)) : console.error("THREE.Object3D.add: object not an instance of THREE.Object3D.", A), + this) + }, + remove: function(A) { + if (arguments.length > 1) { + for (var e = 0; arguments.length > e; e++) + this.remove(arguments[e]); + return this + } + var t = this.children.indexOf(A); + return -1 !== t && (A.parent = null, + this.children.splice(t, 1), + A.dispatchEvent(j)), + this + }, + attach: function(A) { + return this.updateWorldMatrix(!0, !1), + k.getInverse(this.matrixWorld), + null !== A.parent && (A.parent.updateWorldMatrix(!0, !1), + k.multiply(A.parent.matrixWorld)), + A.applyMatrix4(k), + A.updateWorldMatrix(!1, !1), + this.add(A), + this + }, + getObjectById: function(A) { + return this.getObjectByProperty("id", A) + }, + getObjectByName: function(A) { + return this.getObjectByProperty("name", A) + }, + getObjectByProperty: function(A, e) { + if (this[A] === e) + return this; + for (var t = 0, i = this.children.length; i > t; t++) { + var o = this.children[t].getObjectByProperty(A, e); + if (void 0 !== o) + return o + } + }, + getWorldPosition: function(A) { + return void 0 === A && (console.warn("THREE.Object3D: .getWorldPosition() target is now required"), + A = new y), + this.updateMatrixWorld(!0), + A.setFromMatrixPosition(this.matrixWorld) + }, + getWorldQuaternion: function(A) { + return void 0 === A && (console.warn("THREE.Object3D: .getWorldQuaternion() target is now required"), + A = new f), + this.updateMatrixWorld(!0), + this.matrixWorld.decompose(L, A, N), + A + }, + getWorldScale: function(A) { + return void 0 === A && (console.warn("THREE.Object3D: .getWorldScale() target is now required"), + A = new y), + this.updateMatrixWorld(!0), + this.matrixWorld.decompose(L, O, A), + A + }, + getWorldDirection: function(A) { + void 0 === A && (console.warn("THREE.Object3D: .getWorldDirection() target is now required"), + A = new y), + this.updateMatrixWorld(!0); + var e = this.matrixWorld.elements; + return A.set(e[8], e[9], e[10]).normalize() + }, + raycast: function() {}, + traverse: function(A) { + A(this); + for (var e = this.children, t = 0, i = e.length; i > t; t++) + e[t].traverse(A) + }, + traverseVisible: function(A) { + if (!1 !== this.visible) { + A(this); + for (var e = this.children, t = 0, i = e.length; i > t; t++) + e[t].traverseVisible(A) + } + }, + traverseAncestors: function(A) { + var e = this.parent; + null !== e && (A(e), + e.traverseAncestors(A)) + }, + updateMatrix: function() { + this.matrix.compose(this.position, this.quaternion, this.scale), + this.matrixWorldNeedsUpdate = !0 + }, + updateMatrixWorld: function(A) { + this.matrixAutoUpdate && this.updateMatrix(), + (this.matrixWorldNeedsUpdate || A) && (null === this.parent ? this.matrixWorld.copy(this.matrix) : this.matrixWorld.multiplyMatrices(this.parent.matrixWorld, this.matrix), + this.matrixWorldNeedsUpdate = !1, + A = !0); + for (var e = this.children, t = 0, i = e.length; i > t; t++) + e[t].updateMatrixWorld(A) + }, + updateWorldMatrix: function(A, e) { + var t = this.parent; + if (!0 === A && null !== t && t.updateWorldMatrix(!0, !1), + this.matrixAutoUpdate && this.updateMatrix(), + null === this.parent ? this.matrixWorld.copy(this.matrix) : this.matrixWorld.multiplyMatrices(this.parent.matrixWorld, this.matrix), + !0 === e) + for (var i = this.children, o = 0, n = i.length; n > o; o++) + i[o].updateWorldMatrix(!1, !0) + }, + toJSON: function(A) { + var e = void 0 === A || "string" == typeof A + , t = {}; + e && (A = { + geometries: {}, + materials: {}, + textures: {}, + images: {}, + shapes: {} + }, + t.metadata = { + version: 4.5, + type: "Object", + generator: "Object3D.toJSON" + }); + var i = {}; + function o(e, t) { + return void 0 === e[t.uuid] && (e[t.uuid] = t.toJSON(A)), + t.uuid + } + if (i.uuid = this.uuid, + i.type = this.type, + "" !== this.name && (i.name = this.name), + !0 === this.castShadow && (i.castShadow = !0), + !0 === this.receiveShadow && (i.receiveShadow = !0), + !1 === this.visible && (i.visible = !1), + !1 === this.frustumCulled && (i.frustumCulled = !1), + 0 !== this.renderOrder && (i.renderOrder = this.renderOrder), + "{}" !== JSON.stringify(this.userData) && (i.userData = this.userData), + i.layers = this.layers.mask, + i.matrix = this.matrix.toArray(), + !1 === this.matrixAutoUpdate && (i.matrixAutoUpdate = !1), + this.isInstancedMesh && (i.type = "InstancedMesh", + i.count = this.count, + i.instanceMatrix = this.instanceMatrix.toJSON()), + this.isMesh || this.isLine || this.isPoints) { + i.geometry = o(A.geometries, this.geometry); + var n = this.geometry.parameters; + if (void 0 !== n && void 0 !== n.shapes) { + var r = n.shapes; + if (Array.isArray(r)) + for (var a = 0, s = r.length; s > a; a++) { + o(A.shapes, r[a]) + } + else + o(A.shapes, r) + } + } + if (void 0 !== this.material) + if (Array.isArray(this.material)) { + var l = []; + for (a = 0, + s = this.material.length; s > a; a++) + l.push(o(A.materials, this.material[a])); + i.material = l + } else + i.material = o(A.materials, this.material); + if (this.children.length > 0) { + i.children = []; + for (a = 0; this.children.length > a; a++) + i.children.push(this.children[a].toJSON(A).object) + } + if (e) { + var c = g(A.geometries) + , h = g(A.materials) + , d = g(A.textures) + , p = g(A.images); + r = g(A.shapes); + c.length > 0 && (t.geometries = c), + h.length > 0 && (t.materials = h), + d.length > 0 && (t.textures = d), + p.length > 0 && (t.images = p), + r.length > 0 && (t.shapes = r) + } + return t.object = i, + t; + function g(A) { + var e = []; + for (var t in A) { + var i = A[t]; + delete i.metadata, + e.push(i) + } + return e + } + }, + clone: function(A) { + return (new this.constructor).copy(this, A) + }, + copy: function(A, e) { + if (void 0 === e && (e = !0), + this.name = A.name, + this.up.copy(A.up), + this.position.copy(A.position), + this.quaternion.copy(A.quaternion), + this.scale.copy(A.scale), + this.matrix.copy(A.matrix), + this.matrixWorld.copy(A.matrixWorld), + this.matrixAutoUpdate = A.matrixAutoUpdate, + this.matrixWorldNeedsUpdate = A.matrixWorldNeedsUpdate, + this.layers.mask = A.layers.mask, + this.visible = A.visible, + this.castShadow = A.castShadow, + this.receiveShadow = A.receiveShadow, + this.frustumCulled = A.frustumCulled, + this.renderOrder = A.renderOrder, + this.userData = JSON.parse(JSON.stringify(A.userData)), + !0 === e) + for (var t = 0; A.children.length > t; t++) { + this.add(A.children[t].clone()) + } + return this + } + }), + Y.prototype = Object.assign(Object.create(H.prototype), { + constructor: Y, + isScene: !0, + copy: function(A, e) { + return H.prototype.copy.call(this, A, e), + null !== A.background && (this.background = A.background.clone()), + null !== A.environment && (this.environment = A.environment.clone()), + null !== A.fog && (this.fog = A.fog.clone()), + null !== A.overrideMaterial && (this.overrideMaterial = A.overrideMaterial.clone()), + this.autoUpdate = A.autoUpdate, + this.matrixAutoUpdate = A.matrixAutoUpdate, + this + }, + toJSON: function(A) { + var e = H.prototype.toJSON.call(this, A); + return null !== this.background && (e.object.background = this.background.toJSON(A)), + null !== this.environment && (e.object.environment = this.environment.toJSON(A)), + null !== this.fog && (e.object.fog = this.fog.toJSON()), + e + }, + dispose: function() { + this.dispatchEvent({ + type: "dispose" + }) + } + }); + var W = [new y, new y, new y, new y, new y, new y, new y, new y] + , J = new y + , z = new aA + , Z = new y + , X = new y + , _ = new y + , AA = new y + , eA = new y + , tA = new y + , iA = new y + , oA = new y + , nA = new y + , rA = new y; + function aA(A, e) { + this.min = void 0 !== A ? A : new y(1 / 0,1 / 0,1 / 0), + this.max = void 0 !== e ? e : new y(-1 / 0,-1 / 0,-1 / 0) + } + function sA(A, e, t, i, o) { + var n, r; + for (n = 0, + r = A.length - 3; r >= n; n += 3) { + rA.fromArray(A, n); + var a = o.x * Math.abs(rA.x) + o.y * Math.abs(rA.y) + o.z * Math.abs(rA.z) + , s = e.dot(rA) + , l = t.dot(rA) + , c = i.dot(rA); + if (Math.max(-Math.max(s, l, c), Math.min(s, l, c)) > a) + return !1 + } + return !0 + } + Object.assign(aA.prototype, { + isBox3: !0, + set: function(A, e) { + return this.min.copy(A), + this.max.copy(e), + this + }, + setFromArray: function(A) { + for (var e = 1 / 0, t = 1 / 0, i = 1 / 0, o = -1 / 0, n = -1 / 0, r = -1 / 0, a = 0, s = A.length; s > a; a += 3) { + var l = A[a] + , c = A[a + 1] + , h = A[a + 2]; + e > l && (e = l), + t > c && (t = c), + i > h && (i = h), + l > o && (o = l), + c > n && (n = c), + h > r && (r = h) + } + return this.min.set(e, t, i), + this.max.set(o, n, r), + this + }, + setFromBufferAttribute: function(A) { + for (var e = 1 / 0, t = 1 / 0, i = 1 / 0, o = -1 / 0, n = -1 / 0, r = -1 / 0, a = 0, s = A.count; s > a; a++) { + var l = A.getX(a) + , c = A.getY(a) + , h = A.getZ(a); + e > l && (e = l), + t > c && (t = c), + i > h && (i = h), + l > o && (o = l), + c > n && (n = c), + h > r && (r = h) + } + return this.min.set(e, t, i), + this.max.set(o, n, r), + this + }, + setFromPoints: function(A) { + this.makeEmpty(); + for (var e = 0, t = A.length; t > e; e++) + this.expandByPoint(A[e]); + return this + }, + setFromCenterAndSize: function(A, e) { + var t = J.copy(e).multiplyScalar(.5); + return this.min.copy(A).sub(t), + this.max.copy(A).add(t), + this + }, + setFromObject: function(A) { + return this.makeEmpty(), + this.expandByObject(A) + }, + clone: function() { + return (new this.constructor).copy(this) + }, + copy: function(A) { + return this.min.copy(A.min), + this.max.copy(A.max), + this + }, + makeEmpty: function() { + return this.min.x = this.min.y = this.min.z = 1 / 0, + this.max.x = this.max.y = this.max.z = -1 / 0, + this + }, + isEmpty: function() { + return this.min.x > this.max.x || this.min.y > this.max.y || this.min.z > this.max.z + }, + getCenter: function(A) { + return void 0 === A && (console.warn("THREE.Box3: .getCenter() target is now required"), + A = new y), + this.isEmpty() ? A.set(0, 0, 0) : A.addVectors(this.min, this.max).multiplyScalar(.5) + }, + getSize: function(A) { + return void 0 === A && (console.warn("THREE.Box3: .getSize() target is now required"), + A = new y), + this.isEmpty() ? A.set(0, 0, 0) : A.subVectors(this.max, this.min) + }, + expandByPoint: function(A) { + return this.min.min(A), + this.max.max(A), + this + }, + expandByVector: function(A) { + return this.min.sub(A), + this.max.add(A), + this + }, + expandByScalar: function(A) { + return this.min.addScalar(-A), + this.max.addScalar(A), + this + }, + expandByObject: function(A) { + A.updateWorldMatrix(!1, !1); + var e = A.geometry; + void 0 !== e && (null === e.boundingBox && e.computeBoundingBox(), + z.copy(e.boundingBox), + z.applyMatrix4(A.matrixWorld), + this.union(z)); + for (var t = A.children, i = 0, o = t.length; o > i; i++) + this.expandByObject(t[i]); + return this + }, + containsPoint: function(A) { + return !(this.min.x > A.x || A.x > this.max.x || this.min.y > A.y || A.y > this.max.y || this.min.z > A.z || A.z > this.max.z) + }, + containsBox: function(A) { + return !(this.min.x > A.min.x || A.max.x > this.max.x || this.min.y > A.min.y || A.max.y > this.max.y || this.min.z > A.min.z || A.max.z > this.max.z) + }, + getParameter: function(A, e) { + return void 0 === e && (console.warn("THREE.Box3: .getParameter() target is now required"), + e = new y), + e.set((A.x - this.min.x) / (this.max.x - this.min.x), (A.y - this.min.y) / (this.max.y - this.min.y), (A.z - this.min.z) / (this.max.z - this.min.z)) + }, + intersectsBox: function(A) { + return !(this.min.x > A.max.x || A.min.x > this.max.x || this.min.y > A.max.y || A.min.y > this.max.y || this.min.z > A.max.z || A.min.z > this.max.z) + }, + intersectsSphere: function(A) { + return this.clampPoint(A.center, J), + J.distanceToSquared(A.center) <= A.radius * A.radius + }, + intersectsPlane: function(A) { + var e, t; + return A.normal.x > 0 ? (e = A.normal.x * this.min.x, + t = A.normal.x * this.max.x) : (e = A.normal.x * this.max.x, + t = A.normal.x * this.min.x), + A.normal.y > 0 ? (e += A.normal.y * this.min.y, + t += A.normal.y * this.max.y) : (e += A.normal.y * this.max.y, + t += A.normal.y * this.min.y), + A.normal.z > 0 ? (e += A.normal.z * this.min.z, + t += A.normal.z * this.max.z) : (e += A.normal.z * this.max.z, + t += A.normal.z * this.min.z), + -A.constant >= e && t >= -A.constant + }, + intersectsTriangle: function(A) { + if (this.isEmpty()) + return !1; + this.getCenter(iA), + oA.subVectors(this.max, iA), + Z.subVectors(A.a, iA), + X.subVectors(A.b, iA), + _.subVectors(A.c, iA), + AA.subVectors(X, Z), + eA.subVectors(_, X), + tA.subVectors(Z, _); + var e = [0, -AA.z, AA.y, 0, -eA.z, eA.y, 0, -tA.z, tA.y, AA.z, 0, -AA.x, eA.z, 0, -eA.x, tA.z, 0, -tA.x, -AA.y, AA.x, 0, -eA.y, eA.x, 0, -tA.y, tA.x, 0]; + return !!sA(e, Z, X, _, oA) && (!!sA(e = [1, 0, 0, 0, 1, 0, 0, 0, 1], Z, X, _, oA) && (nA.crossVectors(AA, eA), + sA(e = [nA.x, nA.y, nA.z], Z, X, _, oA))) + }, + clampPoint: function(A, e) { + return void 0 === e && (console.warn("THREE.Box3: .clampPoint() target is now required"), + e = new y), + e.copy(A).clamp(this.min, this.max) + }, + distanceToPoint: function(A) { + return J.copy(A).clamp(this.min, this.max).sub(A).length() + }, + getBoundingSphere: function(A) { + return void 0 === A && console.error("THREE.Box3: .getBoundingSphere() target is now required"), + this.getCenter(A.center), + A.radius = .5 * this.getSize(J).length(), + A + }, + intersect: function(A) { + return this.min.max(A.min), + this.max.min(A.max), + this.isEmpty() && this.makeEmpty(), + this + }, + union: function(A) { + return this.min.min(A.min), + this.max.max(A.max), + this + }, + applyMatrix4: function(A) { + return this.isEmpty() || (W[0].set(this.min.x, this.min.y, this.min.z).applyMatrix4(A), + W[1].set(this.min.x, this.min.y, this.max.z).applyMatrix4(A), + W[2].set(this.min.x, this.max.y, this.min.z).applyMatrix4(A), + W[3].set(this.min.x, this.max.y, this.max.z).applyMatrix4(A), + W[4].set(this.max.x, this.min.y, this.min.z).applyMatrix4(A), + W[5].set(this.max.x, this.min.y, this.max.z).applyMatrix4(A), + W[6].set(this.max.x, this.max.y, this.min.z).applyMatrix4(A), + W[7].set(this.max.x, this.max.y, this.max.z).applyMatrix4(A), + this.setFromPoints(W)), + this + }, + translate: function(A) { + return this.min.add(A), + this.max.add(A), + this + }, + equals: function(A) { + return A.min.equals(this.min) && A.max.equals(this.max) + } + }); + var lA = new aA; + function cA(A, e) { + this.center = void 0 !== A ? A : new y, + this.radius = void 0 !== e ? e : 0 + } + Object.assign(cA.prototype, { + set: function(A, e) { + return this.center.copy(A), + this.radius = e, + this + }, + setFromPoints: function(A, e) { + var t = this.center; + void 0 !== e ? t.copy(e) : lA.setFromPoints(A).getCenter(t); + for (var i = 0, o = 0, n = A.length; n > o; o++) + i = Math.max(i, t.distanceToSquared(A[o])); + return this.radius = Math.sqrt(i), + this + }, + clone: function() { + return (new this.constructor).copy(this) + }, + copy: function(A) { + return this.center.copy(A.center), + this.radius = A.radius, + this + }, + empty: function() { + return 0 >= this.radius + }, + containsPoint: function(A) { + return A.distanceToSquared(this.center) <= this.radius * this.radius + }, + distanceToPoint: function(A) { + return A.distanceTo(this.center) - this.radius + }, + intersectsSphere: function(A) { + var e = this.radius + A.radius; + return A.center.distanceToSquared(this.center) <= e * e + }, + intersectsBox: function(A) { + return A.intersectsSphere(this) + }, + intersectsPlane: function(A) { + return Math.abs(A.distanceToPoint(this.center)) <= this.radius + }, + clampPoint: function(A, e) { + var t = this.center.distanceToSquared(A); + return void 0 === e && (console.warn("THREE.Sphere: .clampPoint() target is now required"), + e = new y), + e.copy(A), + t > this.radius * this.radius && (e.sub(this.center).normalize(), + e.multiplyScalar(this.radius).add(this.center)), + e + }, + getBoundingBox: function(A) { + return void 0 === A && (console.warn("THREE.Sphere: .getBoundingBox() target is now required"), + A = new aA), + A.set(this.center, this.center), + A.expandByScalar(this.radius), + A + }, + applyMatrix4: function(A) { + return this.center.applyMatrix4(A), + this.radius = this.radius * A.getMaxScaleOnAxis(), + this + }, + translate: function(A) { + return this.center.add(A), + this + }, + equals: function(A) { + return A.center.equals(this.center) && A.radius === this.radius + } + }); + var hA = new y + , dA = new y + , pA = new y + , gA = new y + , uA = new y + , fA = new y + , mA = new y; + function CA(A, e) { + this.origin = void 0 !== A ? A : new y, + this.direction = void 0 !== e ? e : new y(0,0,-1) + } + Object.assign(CA.prototype, { + set: function(A, e) { + return this.origin.copy(A), + this.direction.copy(e), + this + }, + clone: function() { + return (new this.constructor).copy(this) + }, + copy: function(A) { + return this.origin.copy(A.origin), + this.direction.copy(A.direction), + this + }, + at: function(A, e) { + return void 0 === e && (console.warn("THREE.Ray: .at() target is now required"), + e = new y), + e.copy(this.direction).multiplyScalar(A).add(this.origin) + }, + lookAt: function(A) { + return this.direction.copy(A).sub(this.origin).normalize(), + this + }, + recast: function(A) { + return this.origin.copy(this.at(A, hA)), + this + }, + closestPointToPoint: function(A, e) { + void 0 === e && (console.warn("THREE.Ray: .closestPointToPoint() target is now required"), + e = new y), + e.subVectors(A, this.origin); + var t = e.dot(this.direction); + return 0 > t ? e.copy(this.origin) : e.copy(this.direction).multiplyScalar(t).add(this.origin) + }, + distanceToPoint: function(A) { + return Math.sqrt(this.distanceSqToPoint(A)) + }, + distanceSqToPoint: function(A) { + var e = hA.subVectors(A, this.origin).dot(this.direction); + return 0 > e ? this.origin.distanceToSquared(A) : (hA.copy(this.direction).multiplyScalar(e).add(this.origin), + hA.distanceToSquared(A)) + }, + distanceSqToSegment: function(A, e, t, i) { + dA.copy(A).add(e).multiplyScalar(.5), + pA.copy(e).sub(A).normalize(), + gA.copy(this.origin).sub(dA); + var o, n, r, a, s = .5 * A.distanceTo(e), l = -this.direction.dot(pA), c = gA.dot(this.direction), h = -gA.dot(pA), d = gA.lengthSq(), p = Math.abs(1 - l * l); + if (p > 0) + if (n = l * c - h, + a = s * p, + 0 > (o = l * h - c)) + n > -a ? n > a ? r = -(o = Math.max(0, -(l * s + c))) * o + (n = o > 0 ? s : Math.min(Math.max(-s, -h), s)) * (n + 2 * h) + d : (o = 0, + r = (n = Math.min(Math.max(-s, -h), s)) * (n + 2 * h) + d) : r = -(o = Math.max(0, -(-l * s + c))) * o + (n = o > 0 ? -s : Math.min(Math.max(-s, -h), s)) * (n + 2 * h) + d; + else if (n < -a) + n = -s, + r = -(o = Math.max(0, -(l * n + c))) * o + n * (n + 2 * h) + d; + else if (a < n) + n = s, + r = -(o = Math.max(0, -(l * n + c))) * o + n * (n + 2 * h) + d; + else { + var g = 1 / p; + r = (o *= g) * (o + l * (n *= g) + 2 * c) + n * (l * o + n + 2 * h) + d + } + else + n = l > 0 ? -s : s, + r = -(o = Math.max(0, -(l * n + c))) * o + n * (n + 2 * h) + d; + return t && t.copy(this.direction).multiplyScalar(o).add(this.origin), + i && i.copy(pA).multiplyScalar(n).add(dA), + r + }, + intersectSphere: function(A, e) { + hA.subVectors(A.center, this.origin); + var t = hA.dot(this.direction) + , i = hA.dot(hA) - t * t + , o = A.radius * A.radius; + if (i > o) + return null; + var n = Math.sqrt(o - i) + , r = t - n + , a = t + n; + return 0 > r && 0 > a ? null : this.at(0 > r ? a : r, e) + }, + intersectsSphere: function(A) { + return this.distanceSqToPoint(A.center) <= A.radius * A.radius + }, + distanceToPlane: function(A) { + var e = A.normal.dot(this.direction); + if (0 === e) + return 0 === A.distanceToPoint(this.origin) ? 0 : null; + var t = -(this.origin.dot(A.normal) + A.constant) / e; + return 0 > t ? null : t + }, + intersectPlane: function(A, e) { + var t = this.distanceToPlane(A); + return null === t ? null : this.at(t, e) + }, + intersectsPlane: function(A) { + var e = A.distanceToPoint(this.origin); + return 0 === e || 0 > A.normal.dot(this.direction) * e + }, + intersectBox: function(A, e) { + var t, i, o, n, r, a, s = 1 / this.direction.x, l = 1 / this.direction.y, c = 1 / this.direction.z, h = this.origin; + return 0 > s ? (t = (A.max.x - h.x) * s, + i = (A.min.x - h.x) * s) : (t = (A.min.x - h.x) * s, + i = (A.max.x - h.x) * s), + 0 > l ? (o = (A.max.y - h.y) * l, + n = (A.min.y - h.y) * l) : (o = (A.min.y - h.y) * l, + n = (A.max.y - h.y) * l), + t > n || o > i ? null : ((o > t || t != t) && (t = o), + (i > n || i != i) && (i = n), + 0 > c ? (r = (A.max.z - h.z) * c, + a = (A.min.z - h.z) * c) : (r = (A.min.z - h.z) * c, + a = (A.max.z - h.z) * c), + t > a || r > i ? null : ((r > t || t != t) && (t = r), + (i > a || i != i) && (i = a), + 0 > i ? null : this.at(0 > t ? i : t, e))) + }, + intersectsBox: function(A) { + return null !== this.intersectBox(A, hA) + }, + intersectTriangle: function(A, e, t, i, o) { + uA.subVectors(e, A), + fA.subVectors(t, A), + mA.crossVectors(uA, fA); + var n, r = this.direction.dot(mA); + if (r > 0) { + if (i) + return null; + n = 1 + } else { + if (r >= 0) + return null; + n = -1, + r = -r + } + gA.subVectors(this.origin, A); + var a = n * this.direction.dot(fA.crossVectors(gA, fA)); + if (0 > a) + return null; + var s = n * this.direction.dot(uA.cross(gA)); + if (0 > s) + return null; + if (a + s > r) + return null; + var l = -n * gA.dot(mA); + return 0 > l ? null : this.at(l / r, o) + }, + applyMatrix4: function(A) { + return this.origin.applyMatrix4(A), + this.direction.transformDirection(A), + this + }, + equals: function(A) { + return A.origin.equals(this.origin) && A.direction.equals(this.direction) + } + }); + var yA = new y + , vA = new y + , IA = new l; + function EA(A, e) { + this.normal = void 0 !== A ? A : new y(1,0,0), + this.constant = void 0 !== e ? e : 0 + } + Object.assign(EA.prototype, { + isPlane: !0, + set: function(A, e) { + return this.normal.copy(A), + this.constant = e, + this + }, + setComponents: function(A, e, t, i) { + return this.normal.set(A, e, t), + this.constant = i, + this + }, + setFromNormalAndCoplanarPoint: function(A, e) { + return this.normal.copy(A), + this.constant = -e.dot(this.normal), + this + }, + setFromCoplanarPoints: function(A, e, t) { + var i = yA.subVectors(t, e).cross(vA.subVectors(A, e)).normalize(); + return this.setFromNormalAndCoplanarPoint(i, A), + this + }, + clone: function() { + return (new this.constructor).copy(this) + }, + copy: function(A) { + return this.normal.copy(A.normal), + this.constant = A.constant, + this + }, + normalize: function() { + var A = 1 / this.normal.length(); + return this.normal.multiplyScalar(A), + this.constant *= A, + this + }, + negate: function() { + return this.constant *= -1, + this.normal.negate(), + this + }, + distanceToPoint: function(A) { + return this.normal.dot(A) + this.constant + }, + distanceToSphere: function(A) { + return this.distanceToPoint(A.center) - A.radius + }, + projectPoint: function(A, e) { + return void 0 === e && (console.warn("THREE.Plane: .projectPoint() target is now required"), + e = new y), + e.copy(this.normal).multiplyScalar(-this.distanceToPoint(A)).add(A) + }, + intersectLine: function(A, e) { + void 0 === e && (console.warn("THREE.Plane: .intersectLine() target is now required"), + e = new y); + var t = A.delta(yA) + , i = this.normal.dot(t); + if (0 === i) + return 0 === this.distanceToPoint(A.start) ? e.copy(A.start) : void 0; + var o = -(A.start.dot(this.normal) + this.constant) / i; + return 0 > o || o > 1 ? void 0 : e.copy(t).multiplyScalar(o).add(A.start) + }, + intersectsLine: function(A) { + var e = this.distanceToPoint(A.start) + , t = this.distanceToPoint(A.end); + return 0 > e && t > 0 || 0 > t && e > 0 + }, + intersectsBox: function(A) { + return A.intersectsPlane(this) + }, + intersectsSphere: function(A) { + return A.intersectsPlane(this) + }, + coplanarPoint: function(A) { + return void 0 === A && (console.warn("THREE.Plane: .coplanarPoint() target is now required"), + A = new y), + A.copy(this.normal).multiplyScalar(-this.constant) + }, + applyMatrix4: function(A, e) { + var t = e || IA.getNormalMatrix(A) + , i = this.coplanarPoint(yA).applyMatrix4(A) + , o = this.normal.applyMatrix3(t).normalize(); + return this.constant = -i.dot(o), + this + }, + translate: function(A) { + return this.constant -= A.dot(this.normal), + this + }, + equals: function(A) { + return A.normal.equals(this.normal) && A.constant === this.constant + } + }); + var BA = new y + , xA = new y + , SA = new y + , wA = new y + , MA = new y + , bA = new y + , UA = new y + , FA = new y + , KA = new y + , QA = new y; + function RA(A, e, t) { + this.a = void 0 !== A ? A : new y, + this.b = void 0 !== e ? e : new y, + this.c = void 0 !== t ? t : new y + } + Object.assign(RA, { + getNormal: function(A, e, t, i) { + void 0 === i && (console.warn("THREE.Triangle: .getNormal() target is now required"), + i = new y), + i.subVectors(t, e), + BA.subVectors(A, e), + i.cross(BA); + var o = i.lengthSq(); + return o > 0 ? i.multiplyScalar(1 / Math.sqrt(o)) : i.set(0, 0, 0) + }, + getBarycoord: function(A, e, t, i, o) { + BA.subVectors(i, e), + xA.subVectors(t, e), + SA.subVectors(A, e); + var n = BA.dot(BA) + , r = BA.dot(xA) + , a = BA.dot(SA) + , s = xA.dot(xA) + , l = xA.dot(SA) + , c = n * s - r * r; + if (void 0 === o && (console.warn("THREE.Triangle: .getBarycoord() target is now required"), + o = new y), + 0 === c) + return o.set(-2, -1, -1); + var h = 1 / c + , d = (s * a - r * l) * h + , p = (n * l - r * a) * h; + return o.set(1 - d - p, p, d) + }, + containsPoint: function(A, e, t, i) { + return RA.getBarycoord(A, e, t, i, wA), + wA.x >= 0 && wA.y >= 0 && 1 >= wA.x + wA.y + }, + getUV: function(A, e, t, i, o, n, r, a) { + return this.getBarycoord(A, e, t, i, wA), + a.set(0, 0), + a.addScaledVector(o, wA.x), + a.addScaledVector(n, wA.y), + a.addScaledVector(r, wA.z), + a + }, + isFrontFacing: function(A, e, t, i) { + return BA.subVectors(t, e), + xA.subVectors(A, e), + 0 > BA.cross(xA).dot(i) + } + }), + Object.assign(RA.prototype, { + set: function(A, e, t) { + return this.a.copy(A), + this.b.copy(e), + this.c.copy(t), + this + }, + setFromPointsAndIndices: function(A, e, t, i) { + return this.a.copy(A[e]), + this.b.copy(A[t]), + this.c.copy(A[i]), + this + }, + clone: function() { + return (new this.constructor).copy(this) + }, + copy: function(A) { + return this.a.copy(A.a), + this.b.copy(A.b), + this.c.copy(A.c), + this + }, + getArea: function() { + return BA.subVectors(this.c, this.b), + xA.subVectors(this.a, this.b), + .5 * BA.cross(xA).length() + }, + getMidpoint: function(A) { + return void 0 === A && (console.warn("THREE.Triangle: .getMidpoint() target is now required"), + A = new y), + A.addVectors(this.a, this.b).add(this.c).multiplyScalar(1 / 3) + }, + getNormal: function(A) { + return RA.getNormal(this.a, this.b, this.c, A) + }, + getPlane: function(A) { + return void 0 === A && (console.warn("THREE.Triangle: .getPlane() target is now required"), + A = new EA), + A.setFromCoplanarPoints(this.a, this.b, this.c) + }, + getBarycoord: function(A, e) { + return RA.getBarycoord(A, this.a, this.b, this.c, e) + }, + getUV: function(A, e, t, i, o) { + return RA.getUV(A, this.a, this.b, this.c, e, t, i, o) + }, + containsPoint: function(A) { + return RA.containsPoint(A, this.a, this.b, this.c) + }, + isFrontFacing: function(A) { + return RA.isFrontFacing(this.a, this.b, this.c, A) + }, + intersectsBox: function(A) { + return A.intersectsTriangle(this) + }, + closestPointToPoint: function(A, e) { + void 0 === e && (console.warn("THREE.Triangle: .closestPointToPoint() target is now required"), + e = new y); + var t, i, o = this.a, n = this.b, r = this.c; + MA.subVectors(n, o), + bA.subVectors(r, o), + FA.subVectors(A, o); + var a = MA.dot(FA) + , s = bA.dot(FA); + if (0 >= a && 0 >= s) + return e.copy(o); + KA.subVectors(A, n); + var l = MA.dot(KA) + , c = bA.dot(KA); + if (l >= 0 && l >= c) + return e.copy(n); + var h = a * c - l * s; + if (0 >= h && a >= 0 && 0 >= l) + return t = a / (a - l), + e.copy(o).addScaledVector(MA, t); + QA.subVectors(A, r); + var d = MA.dot(QA) + , p = bA.dot(QA); + if (p >= 0 && p >= d) + return e.copy(r); + var g = d * s - a * p; + if (0 >= g && s >= 0 && 0 >= p) + return i = s / (s - p), + e.copy(o).addScaledVector(bA, i); + var u = l * p - d * c; + if (0 >= u && c - l >= 0 && d - p >= 0) + return UA.subVectors(r, n), + i = (c - l) / (c - l + (d - p)), + e.copy(n).addScaledVector(UA, i); + var f = 1 / (u + g + h); + return t = g * f, + i = h * f, + e.copy(o).addScaledVector(MA, t).addScaledVector(bA, i) + }, + equals: function(A) { + return A.a.equals(this.a) && A.b.equals(this.b) && A.c.equals(this.c) + } + }); + var TA = { + aliceblue: 15792383, + antiquewhite: 16444375, + aqua: 65535, + aquamarine: 8388564, + azure: 15794175, + beige: 16119260, + bisque: 16770244, + black: 0, + blanchedalmond: 16772045, + blue: 255, + blueviolet: 9055202, + brown: 10824234, + burlywood: 14596231, + cadetblue: 6266528, + chartreuse: 8388352, + chocolate: 13789470, + coral: 16744272, + cornflowerblue: 6591981, + cornsilk: 16775388, + crimson: 14423100, + cyan: 65535, + darkblue: 139, + darkcyan: 35723, + darkgoldenrod: 12092939, + darkgray: 11119017, + darkgreen: 25600, + darkgrey: 11119017, + darkkhaki: 12433259, + darkmagenta: 9109643, + darkolivegreen: 5597999, + darkorange: 16747520, + darkorchid: 10040012, + darkred: 9109504, + darksalmon: 15308410, + darkseagreen: 9419919, + darkslateblue: 4734347, + darkslategray: 3100495, + darkslategrey: 3100495, + darkturquoise: 52945, + darkviolet: 9699539, + deeppink: 16716947, + deepskyblue: 49151, + dimgray: 6908265, + dimgrey: 6908265, + dodgerblue: 2003199, + firebrick: 11674146, + floralwhite: 16775920, + forestgreen: 2263842, + fuchsia: 16711935, + gainsboro: 14474460, + ghostwhite: 16316671, + gold: 16766720, + goldenrod: 14329120, + gray: 8421504, + green: 32768, + greenyellow: 11403055, + grey: 8421504, + honeydew: 15794160, + hotpink: 16738740, + indianred: 13458524, + indigo: 4915330, + ivory: 16777200, + khaki: 15787660, + lavender: 15132410, + lavenderblush: 16773365, + lawngreen: 8190976, + lemonchiffon: 16775885, + lightblue: 11393254, + lightcoral: 15761536, + lightcyan: 14745599, + lightgoldenrodyellow: 16448210, + lightgray: 13882323, + lightgreen: 9498256, + lightgrey: 13882323, + lightpink: 16758465, + lightsalmon: 16752762, + lightseagreen: 2142890, + lightskyblue: 8900346, + lightslategray: 7833753, + lightslategrey: 7833753, + lightsteelblue: 11584734, + lightyellow: 16777184, + lime: 65280, + limegreen: 3329330, + linen: 16445670, + magenta: 16711935, + maroon: 8388608, + mediumaquamarine: 6737322, + mediumblue: 205, + mediumorchid: 12211667, + mediumpurple: 9662683, + mediumseagreen: 3978097, + mediumslateblue: 8087790, + mediumspringgreen: 64154, + mediumturquoise: 4772300, + mediumvioletred: 13047173, + midnightblue: 1644912, + mintcream: 16121850, + mistyrose: 16770273, + moccasin: 16770229, + navajowhite: 16768685, + navy: 128, + oldlace: 16643558, + olive: 8421376, + olivedrab: 7048739, + orange: 16753920, + orangered: 16729344, + orchid: 14315734, + palegoldenrod: 15657130, + palegreen: 10025880, + paleturquoise: 11529966, + palevioletred: 14381203, + papayawhip: 16773077, + peachpuff: 16767673, + peru: 13468991, + pink: 16761035, + plum: 14524637, + powderblue: 11591910, + purple: 8388736, + rebeccapurple: 6697881, + red: 16711680, + rosybrown: 12357519, + royalblue: 4286945, + saddlebrown: 9127187, + salmon: 16416882, + sandybrown: 16032864, + seagreen: 3050327, + seashell: 16774638, + sienna: 10506797, + silver: 12632256, + skyblue: 8900331, + slateblue: 6970061, + slategray: 7372944, + slategrey: 7372944, + snow: 16775930, + springgreen: 65407, + steelblue: 4620980, + tan: 13808780, + teal: 32896, + thistle: 14204888, + tomato: 16737095, + turquoise: 4251856, + violet: 15631086, + wheat: 16113331, + white: 16777215, + whitesmoke: 16119285, + yellow: 16776960, + yellowgreen: 10145074 + } + , kA = { + h: 0, + s: 0, + l: 0 + } + , DA = { + h: 0, + s: 0, + l: 0 + }; + function LA(A, e, t) { + return void 0 === e && void 0 === t ? this.set(A) : this.setRGB(A, e, t) + } + function NA(A, e, t) { + return 0 > t && (t += 1), + t > 1 && (t -= 1), + 1 / 6 > t ? A + 6 * (e - A) * t : .5 > t ? e : 2 / 3 > t ? A + 6 * (e - A) * (2 / 3 - t) : A + } + function OA(A) { + return .04045 > A ? .0773993808 * A : Math.pow(.9478672986 * A + .0521327014, 2.4) + } + function VA(A) { + return .0031308 > A ? 12.92 * A : 1.055 * Math.pow(A, .41666) - .055 + } + function GA(A, e, t, i, o, n) { + this.a = A, + this.b = e, + this.c = t, + this.normal = i && i.isVector3 ? i : new y, + this.vertexNormals = Array.isArray(i) ? i : [], + this.color = o && o.isColor ? o : new LA, + this.vertexColors = Array.isArray(o) ? o : [], + this.materialIndex = void 0 !== n ? n : 0 + } + Object.assign(LA.prototype, { + isColor: !0, + r: 1, + g: 1, + b: 1, + set: function(A) { + return A && A.isColor ? this.copy(A) : "number" == typeof A ? this.setHex(A) : "string" == typeof A && this.setStyle(A), + this + }, + setScalar: function(A) { + return this.r = A, + this.g = A, + this.b = A, + this + }, + setHex: function(A) { + return A = Math.floor(A), + this.r = (A >> 16 & 255) / 255, + this.g = (A >> 8 & 255) / 255, + this.b = (255 & A) / 255, + this + }, + setRGB: function(A, e, t) { + return this.r = A, + this.g = e, + this.b = t, + this + }, + setHSL: function(A, e, t) { + if (A = a.euclideanModulo(A, 1), + e = a.clamp(e, 0, 1), + t = a.clamp(t, 0, 1), + 0 === e) + this.r = this.g = this.b = t; + else { + var i = t > .5 ? t + e - t * e : t * (1 + e) + , o = 2 * t - i; + this.r = NA(o, i, A + 1 / 3), + this.g = NA(o, i, A), + this.b = NA(o, i, A - 1 / 3) + } + return this + }, + setStyle: function(A) { + function e(e) { + void 0 !== e && 1 > parseFloat(e) && console.warn("THREE.Color: Alpha component of " + A + " will be ignored.") + } + var t; + if (t = /^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec(A)) { + var i, o = t[2]; + switch (t[1]) { + case "rgb": + case "rgba": + if (i = /^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(o)) + return this.r = Math.min(255, parseInt(i[1], 10)) / 255, + this.g = Math.min(255, parseInt(i[2], 10)) / 255, + this.b = Math.min(255, parseInt(i[3], 10)) / 255, + e(i[5]), + this; + if (i = /^(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(o)) + return this.r = Math.min(100, parseInt(i[1], 10)) / 100, + this.g = Math.min(100, parseInt(i[2], 10)) / 100, + this.b = Math.min(100, parseInt(i[3], 10)) / 100, + e(i[5]), + this; + break; + case "hsl": + case "hsla": + if (i = /^([0-9]*\.?[0-9]+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(o)) { + var n = parseFloat(i[1]) / 360 + , r = parseInt(i[2], 10) / 100 + , a = parseInt(i[3], 10) / 100; + return e(i[5]), + this.setHSL(n, r, a) + } + } + } else if (t = /^\#([A-Fa-f0-9]+)$/.exec(A)) { + var s = t[1] + , l = s.length; + if (3 === l) + return this.r = parseInt(s.charAt(0) + s.charAt(0), 16) / 255, + this.g = parseInt(s.charAt(1) + s.charAt(1), 16) / 255, + this.b = parseInt(s.charAt(2) + s.charAt(2), 16) / 255, + this; + if (6 === l) + return this.r = parseInt(s.charAt(0) + s.charAt(1), 16) / 255, + this.g = parseInt(s.charAt(2) + s.charAt(3), 16) / 255, + this.b = parseInt(s.charAt(4) + s.charAt(5), 16) / 255, + this + } + return A && A.length > 0 ? this.setColorName(A) : this + }, + setColorName: function(A) { + var e = TA[A]; + return void 0 !== e ? this.setHex(e) : console.warn("THREE.Color: Unknown color " + A), + this + }, + clone: function() { + return new this.constructor(this.r,this.g,this.b) + }, + copy: function(A) { + return this.r = A.r, + this.g = A.g, + this.b = A.b, + this + }, + copyGammaToLinear: function(A, e) { + return void 0 === e && (e = 2), + this.r = Math.pow(A.r, e), + this.g = Math.pow(A.g, e), + this.b = Math.pow(A.b, e), + this + }, + copyLinearToGamma: function(A, e) { + void 0 === e && (e = 2); + var t = e > 0 ? 1 / e : 1; + return this.r = Math.pow(A.r, t), + this.g = Math.pow(A.g, t), + this.b = Math.pow(A.b, t), + this + }, + convertGammaToLinear: function(A) { + return this.copyGammaToLinear(this, A), + this + }, + convertLinearToGamma: function(A) { + return this.copyLinearToGamma(this, A), + this + }, + copySRGBToLinear: function(A) { + return this.r = OA(A.r), + this.g = OA(A.g), + this.b = OA(A.b), + this + }, + copyLinearToSRGB: function(A) { + return this.r = VA(A.r), + this.g = VA(A.g), + this.b = VA(A.b), + this + }, + convertSRGBToLinear: function() { + return this.copySRGBToLinear(this), + this + }, + convertLinearToSRGB: function() { + return this.copyLinearToSRGB(this), + this + }, + getHex: function() { + return 255 * this.r << 16 ^ 255 * this.g << 8 ^ 255 * this.b << 0 + }, + getHexString: function() { + return ("000000" + this.getHex().toString(16)).slice(-6) + }, + getHSL: function(A) { + void 0 === A && (console.warn("THREE.Color: .getHSL() target is now required"), + A = { + h: 0, + s: 0, + l: 0 + }); + var e, t, i = this.r, o = this.g, n = this.b, r = Math.max(i, o, n), a = Math.min(i, o, n), s = (a + r) / 2; + if (a === r) + e = 0, + t = 0; + else { + var l = r - a; + switch (t = s > .5 ? l / (2 - r - a) : l / (r + a), + r) { + case i: + e = (o - n) / l + (n > o ? 6 : 0); + break; + case o: + e = (n - i) / l + 2; + break; + case n: + e = (i - o) / l + 4 + } + e /= 6 + } + return A.h = e, + A.s = t, + A.l = s, + A + }, + getStyle: function() { + return "rgb(" + (255 * this.r | 0) + "," + (255 * this.g | 0) + "," + (255 * this.b | 0) + ")" + }, + offsetHSL: function(A, e, t) { + return this.getHSL(kA), + kA.h += A, + kA.s += e, + kA.l += t, + this.setHSL(kA.h, kA.s, kA.l), + this + }, + add: function(A) { + return this.r += A.r, + this.g += A.g, + this.b += A.b, + this + }, + addColors: function(A, e) { + return this.r = A.r + e.r, + this.g = A.g + e.g, + this.b = A.b + e.b, + this + }, + addScalar: function(A) { + return this.r += A, + this.g += A, + this.b += A, + this + }, + sub: function(A) { + return this.r = Math.max(0, this.r - A.r), + this.g = Math.max(0, this.g - A.g), + this.b = Math.max(0, this.b - A.b), + this + }, + multiply: function(A) { + return this.r *= A.r, + this.g *= A.g, + this.b *= A.b, + this + }, + multiplyScalar: function(A) { + return this.r *= A, + this.g *= A, + this.b *= A, + this + }, + lerp: function(A, e) { + return this.r += (A.r - this.r) * e, + this.g += (A.g - this.g) * e, + this.b += (A.b - this.b) * e, + this + }, + lerpHSL: function(A, e) { + this.getHSL(kA), + A.getHSL(DA); + var t = a.lerp(kA.h, DA.h, e) + , i = a.lerp(kA.s, DA.s, e) + , o = a.lerp(kA.l, DA.l, e); + return this.setHSL(t, i, o), + this + }, + equals: function(A) { + return A.r === this.r && A.g === this.g && A.b === this.b + }, + fromArray: function(A, e) { + return void 0 === e && (e = 0), + this.r = A[e], + this.g = A[e + 1], + this.b = A[e + 2], + this + }, + toArray: function(A, e) { + return void 0 === A && (A = []), + void 0 === e && (e = 0), + A[e] = this.r, + A[e + 1] = this.g, + A[e + 2] = this.b, + A + }, + toJSON: function() { + return this.getHex() + } + }), + LA.NAMES = TA, + Object.assign(GA.prototype, { + clone: function() { + return (new this.constructor).copy(this) + }, + copy: function(A) { + this.a = A.a, + this.b = A.b, + this.c = A.c, + this.normal.copy(A.normal), + this.color.copy(A.color), + this.materialIndex = A.materialIndex; + for (var e = 0, t = A.vertexNormals.length; t > e; e++) + this.vertexNormals[e] = A.vertexNormals[e].clone(); + for (e = 0, + t = A.vertexColors.length; t > e; e++) + this.vertexColors[e] = A.vertexColors[e].clone(); + return this + } + }); + var PA = 0; + function qA() { + Object.defineProperty(this, "id", { + value: PA++ + }), + this.uuid = a.generateUUID(), + this.name = "", + this.type = "Material", + this.fog = !0, + this.blending = 1, + this.side = 0, + this.flatShading = !1, + this.vertexColors = !1, + this.opacity = 1, + this.transparent = !1, + this.blendSrc = 204, + this.blendDst = 205, + this.blendEquation = 100, + this.blendSrcAlpha = null, + this.blendDstAlpha = null, + this.blendEquationAlpha = null, + this.depthFunc = 3, + this.depthTest = !0, + this.depthWrite = !0, + this.stencilWriteMask = 255, + this.stencilFunc = 519, + this.stencilRef = 0, + this.stencilFuncMask = 255, + this.stencilFail = 7680, + this.stencilZFail = 7680, + this.stencilZPass = 7680, + this.stencilWrite = !1, + this.clippingPlanes = null, + this.clipIntersection = !1, + this.clipShadows = !1, + this.shadowSide = null, + this.colorWrite = !0, + this.precision = null, + this.polygonOffset = !1, + this.polygonOffsetFactor = 0, + this.polygonOffsetUnits = 0, + this.dithering = !1, + this.alphaTest = 0, + this.premultipliedAlpha = !1, + this.visible = !0, + this.toneMapped = !0, + this.userData = {}, + this.version = 0 + } + function jA(A) { + qA.call(this), + this.type = "MeshBasicMaterial", + this.color = new LA(16777215), + this.map = null, + this.lightMap = null, + this.lightMapIntensity = 1, + this.aoMap = null, + this.aoMapIntensity = 1, + this.specularMap = null, + this.alphaMap = null, + this.envMap = null, + this.combine = 0, + this.reflectivity = 1, + this.refractionRatio = .98, + this.wireframe = !1, + this.wireframeLinewidth = 1, + this.wireframeLinecap = "round", + this.wireframeLinejoin = "round", + this.skinning = !1, + this.morphTargets = !1, + this.setValues(A) + } + qA.prototype = Object.assign(Object.create(i.prototype), { + constructor: qA, + isMaterial: !0, + onBeforeCompile: function() {}, + setValues: function(A) { + if (void 0 !== A) + for (var e in A) { + var t = A[e]; + if (void 0 !== t) + if ("shading" !== e) { + var i = this[e]; + void 0 !== i ? i && i.isColor ? i.set(t) : i && i.isVector3 && t && t.isVector3 ? i.copy(t) : this[e] = t : console.warn("THREE." + this.type + ": '" + e + "' is not a property of this material.") + } else + console.warn("THREE." + this.type + ": .shading has been removed. Use the boolean .flatShading instead."), + this.flatShading = 1 === t; + else + console.warn("THREE.Material: '" + e + "' parameter is undefined.") + } + }, + toJSON: function(A) { + var e = void 0 === A || "string" == typeof A; + e && (A = { + textures: {}, + images: {} + }); + var t = { + metadata: { + version: 4.5, + type: "Material", + generator: "Material.toJSON" + } + }; + function i(A) { + var e = []; + for (var t in A) { + var i = A[t]; + delete i.metadata, + e.push(i) + } + return e + } + if (t.uuid = this.uuid, + t.type = this.type, + "" !== this.name && (t.name = this.name), + this.color && this.color.isColor && (t.color = this.color.getHex()), + void 0 !== this.roughness && (t.roughness = this.roughness), + void 0 !== this.metalness && (t.metalness = this.metalness), + this.sheen && this.sheen.isColor && (t.sheen = this.sheen.getHex()), + this.emissive && this.emissive.isColor && (t.emissive = this.emissive.getHex()), + this.emissiveIntensity && 1 !== this.emissiveIntensity && (t.emissiveIntensity = this.emissiveIntensity), + this.specular && this.specular.isColor && (t.specular = this.specular.getHex()), + void 0 !== this.shininess && (t.shininess = this.shininess), + void 0 !== this.clearcoat && (t.clearcoat = this.clearcoat), + void 0 !== this.clearcoatRoughness && (t.clearcoatRoughness = this.clearcoatRoughness), + this.clearcoatMap && this.clearcoatMap.isTexture && (t.clearcoatMap = this.clearcoatMap.toJSON(A).uuid), + this.clearcoatRoughnessMap && this.clearcoatRoughnessMap.isTexture && (t.clearcoatRoughnessMap = this.clearcoatRoughnessMap.toJSON(A).uuid), + this.clearcoatNormalMap && this.clearcoatNormalMap.isTexture && (t.clearcoatNormalMap = this.clearcoatNormalMap.toJSON(A).uuid, + t.clearcoatNormalScale = this.clearcoatNormalScale.toArray()), + this.map && this.map.isTexture && (t.map = this.map.toJSON(A).uuid), + this.matcap && this.matcap.isTexture && (t.matcap = this.matcap.toJSON(A).uuid), + this.alphaMap && this.alphaMap.isTexture && (t.alphaMap = this.alphaMap.toJSON(A).uuid), + this.lightMap && this.lightMap.isTexture && (t.lightMap = this.lightMap.toJSON(A).uuid), + this.aoMap && this.aoMap.isTexture && (t.aoMap = this.aoMap.toJSON(A).uuid, + t.aoMapIntensity = this.aoMapIntensity), + this.bumpMap && this.bumpMap.isTexture && (t.bumpMap = this.bumpMap.toJSON(A).uuid, + t.bumpScale = this.bumpScale), + this.normalMap && this.normalMap.isTexture && (t.normalMap = this.normalMap.toJSON(A).uuid, + t.normalMapType = this.normalMapType, + t.normalScale = this.normalScale.toArray()), + this.displacementMap && this.displacementMap.isTexture && (t.displacementMap = this.displacementMap.toJSON(A).uuid, + t.displacementScale = this.displacementScale, + t.displacementBias = this.displacementBias), + this.roughnessMap && this.roughnessMap.isTexture && (t.roughnessMap = this.roughnessMap.toJSON(A).uuid), + this.metalnessMap && this.metalnessMap.isTexture && (t.metalnessMap = this.metalnessMap.toJSON(A).uuid), + this.emissiveMap && this.emissiveMap.isTexture && (t.emissiveMap = this.emissiveMap.toJSON(A).uuid), + this.specularMap && this.specularMap.isTexture && (t.specularMap = this.specularMap.toJSON(A).uuid), + this.envMap && this.envMap.isTexture && (t.envMap = this.envMap.toJSON(A).uuid, + t.reflectivity = this.reflectivity, + t.refractionRatio = this.refractionRatio, + void 0 !== this.combine && (t.combine = this.combine), + void 0 !== this.envMapIntensity && (t.envMapIntensity = this.envMapIntensity)), + this.gradientMap && this.gradientMap.isTexture && (t.gradientMap = this.gradientMap.toJSON(A).uuid), + void 0 !== this.size && (t.size = this.size), + void 0 !== this.sizeAttenuation && (t.sizeAttenuation = this.sizeAttenuation), + 1 !== this.blending && (t.blending = this.blending), + !0 === this.flatShading && (t.flatShading = this.flatShading), + 0 !== this.side && (t.side = this.side), + this.vertexColors && (t.vertexColors = !0), + 1 > this.opacity && (t.opacity = this.opacity), + !0 === this.transparent && (t.transparent = this.transparent), + t.depthFunc = this.depthFunc, + t.depthTest = this.depthTest, + t.depthWrite = this.depthWrite, + t.stencilWrite = this.stencilWrite, + t.stencilWriteMask = this.stencilWriteMask, + t.stencilFunc = this.stencilFunc, + t.stencilRef = this.stencilRef, + t.stencilFuncMask = this.stencilFuncMask, + t.stencilFail = this.stencilFail, + t.stencilZFail = this.stencilZFail, + t.stencilZPass = this.stencilZPass, + this.rotation && 0 !== this.rotation && (t.rotation = this.rotation), + !0 === this.polygonOffset && (t.polygonOffset = !0), + 0 !== this.polygonOffsetFactor && (t.polygonOffsetFactor = this.polygonOffsetFactor), + 0 !== this.polygonOffsetUnits && (t.polygonOffsetUnits = this.polygonOffsetUnits), + this.linewidth && 1 !== this.linewidth && (t.linewidth = this.linewidth), + void 0 !== this.dashSize && (t.dashSize = this.dashSize), + void 0 !== this.gapSize && (t.gapSize = this.gapSize), + void 0 !== this.scale && (t.scale = this.scale), + !0 === this.dithering && (t.dithering = !0), + this.alphaTest > 0 && (t.alphaTest = this.alphaTest), + !0 === this.premultipliedAlpha && (t.premultipliedAlpha = this.premultipliedAlpha), + !0 === this.wireframe && (t.wireframe = this.wireframe), + this.wireframeLinewidth > 1 && (t.wireframeLinewidth = this.wireframeLinewidth), + "round" !== this.wireframeLinecap && (t.wireframeLinecap = this.wireframeLinecap), + "round" !== this.wireframeLinejoin && (t.wireframeLinejoin = this.wireframeLinejoin), + !0 === this.morphTargets && (t.morphTargets = !0), + !0 === this.morphNormals && (t.morphNormals = !0), + !0 === this.skinning && (t.skinning = !0), + !1 === this.visible && (t.visible = !1), + !1 === this.toneMapped && (t.toneMapped = !1), + "{}" !== JSON.stringify(this.userData) && (t.userData = this.userData), + e) { + var o = i(A.textures) + , n = i(A.images); + o.length > 0 && (t.textures = o), + n.length > 0 && (t.images = n) + } + return t + }, + clone: function() { + return (new this.constructor).copy(this) + }, + copy: function(A) { + this.name = A.name, + this.fog = A.fog, + this.blending = A.blending, + this.side = A.side, + this.flatShading = A.flatShading, + this.vertexColors = A.vertexColors, + this.opacity = A.opacity, + this.transparent = A.transparent, + this.blendSrc = A.blendSrc, + this.blendDst = A.blendDst, + this.blendEquation = A.blendEquation, + this.blendSrcAlpha = A.blendSrcAlpha, + this.blendDstAlpha = A.blendDstAlpha, + this.blendEquationAlpha = A.blendEquationAlpha, + this.depthFunc = A.depthFunc, + this.depthTest = A.depthTest, + this.depthWrite = A.depthWrite, + this.stencilWriteMask = A.stencilWriteMask, + this.stencilFunc = A.stencilFunc, + this.stencilRef = A.stencilRef, + this.stencilFuncMask = A.stencilFuncMask, + this.stencilFail = A.stencilFail, + this.stencilZFail = A.stencilZFail, + this.stencilZPass = A.stencilZPass, + this.stencilWrite = A.stencilWrite; + var e = A.clippingPlanes + , t = null; + if (null !== e) { + var i = e.length; + t = new Array(i); + for (var o = 0; o !== i; ++o) + t[o] = e[o].clone() + } + return this.clippingPlanes = t, + this.clipIntersection = A.clipIntersection, + this.clipShadows = A.clipShadows, + this.shadowSide = A.shadowSide, + this.colorWrite = A.colorWrite, + this.precision = A.precision, + this.polygonOffset = A.polygonOffset, + this.polygonOffsetFactor = A.polygonOffsetFactor, + this.polygonOffsetUnits = A.polygonOffsetUnits, + this.dithering = A.dithering, + this.alphaTest = A.alphaTest, + this.premultipliedAlpha = A.premultipliedAlpha, + this.visible = A.visible, + this.toneMapped = A.toneMapped, + this.userData = JSON.parse(JSON.stringify(A.userData)), + this + }, + dispose: function() { + this.dispatchEvent({ + type: "dispose" + }) + } + }), + Object.defineProperty(qA.prototype, "needsUpdate", { + set: function(A) { + !0 === A && this.version++ + } + }), + (jA.prototype = Object.create(qA.prototype)).constructor = jA, + jA.prototype.isMeshBasicMaterial = !0, + jA.prototype.copy = function(A) { + return qA.prototype.copy.call(this, A), + this.color.copy(A.color), + this.map = A.map, + this.lightMap = A.lightMap, + this.lightMapIntensity = A.lightMapIntensity, + this.aoMap = A.aoMap, + this.aoMapIntensity = A.aoMapIntensity, + this.specularMap = A.specularMap, + this.alphaMap = A.alphaMap, + this.envMap = A.envMap, + this.combine = A.combine, + this.reflectivity = A.reflectivity, + this.refractionRatio = A.refractionRatio, + this.wireframe = A.wireframe, + this.wireframeLinewidth = A.wireframeLinewidth, + this.wireframeLinecap = A.wireframeLinecap, + this.wireframeLinejoin = A.wireframeLinejoin, + this.skinning = A.skinning, + this.morphTargets = A.morphTargets, + this + } + ; + var HA = new y; + function YA(A, e, t) { + if (Array.isArray(A)) + throw new TypeError("THREE.BufferAttribute: array should be a Typed Array."); + this.name = "", + this.array = A, + this.itemSize = e, + this.count = void 0 !== A ? A.length / e : 0, + this.normalized = !0 === t, + this.usage = 35044, + this.updateRange = { + offset: 0, + count: -1 + }, + this.version = 0 + } + function WA(A, e, t) { + YA.call(this, new Int8Array(A), e, t) + } + function JA(A, e, t) { + YA.call(this, new Uint8Array(A), e, t) + } + function zA(A, e, t) { + YA.call(this, new Uint8ClampedArray(A), e, t) + } + function ZA(A, e, t) { + YA.call(this, new Int16Array(A), e, t) + } + function XA(A, e, t) { + YA.call(this, new Uint16Array(A), e, t) + } + function _A(A, e, t) { + YA.call(this, new Int32Array(A), e, t) + } + function $A(A, e, t) { + YA.call(this, new Uint32Array(A), e, t) + } + function Ae(A, e, t) { + YA.call(this, new Float32Array(A), e, t) + } + function ee(A, e, t) { + YA.call(this, new Float64Array(A), e, t) + } + function te() { + this.vertices = [], + this.normals = [], + this.colors = [], + this.uvs = [], + this.uvs2 = [], + this.groups = [], + this.morphTargets = {}, + this.skinWeights = [], + this.skinIndices = [], + this.boundingBox = null, + this.boundingSphere = null, + this.verticesNeedUpdate = !1, + this.normalsNeedUpdate = !1, + this.colorsNeedUpdate = !1, + this.uvsNeedUpdate = !1, + this.groupsNeedUpdate = !1 + } + function ie(A) { + if (0 === A.length) + return -1 / 0; + for (var e = A[0], t = 1, i = A.length; i > t; ++t) + A[t] > e && (e = A[t]); + return e + } + Object.defineProperty(YA.prototype, "needsUpdate", { + set: function(A) { + !0 === A && this.version++ + } + }), + Object.assign(YA.prototype, { + isBufferAttribute: !0, + onUploadCallback: function() {}, + setUsage: function(A) { + return this.usage = A, + this + }, + copy: function(A) { + return this.name = A.name, + this.array = new A.array.constructor(A.array), + this.itemSize = A.itemSize, + this.count = A.count, + this.normalized = A.normalized, + this.usage = A.usage, + this + }, + copyAt: function(A, e, t) { + A *= this.itemSize, + t *= e.itemSize; + for (var i = 0, o = this.itemSize; o > i; i++) + this.array[A + i] = e.array[t + i]; + return this + }, + copyArray: function(A) { + return this.array.set(A), + this + }, + copyColorsArray: function(A) { + for (var e = this.array, t = 0, i = 0, o = A.length; o > i; i++) { + var n = A[i]; + void 0 === n && (console.warn("THREE.BufferAttribute.copyColorsArray(): color is undefined", i), + n = new LA), + e[t++] = n.r, + e[t++] = n.g, + e[t++] = n.b + } + return this + }, + copyVector2sArray: function(A) { + for (var e = this.array, t = 0, i = 0, o = A.length; o > i; i++) { + var n = A[i]; + void 0 === n && (console.warn("THREE.BufferAttribute.copyVector2sArray(): vector is undefined", i), + n = new s), + e[t++] = n.x, + e[t++] = n.y + } + return this + }, + copyVector3sArray: function(A) { + for (var e = this.array, t = 0, i = 0, o = A.length; o > i; i++) { + var n = A[i]; + void 0 === n && (console.warn("THREE.BufferAttribute.copyVector3sArray(): vector is undefined", i), + n = new y), + e[t++] = n.x, + e[t++] = n.y, + e[t++] = n.z + } + return this + }, + copyVector4sArray: function(A) { + for (var e = this.array, t = 0, i = 0, o = A.length; o > i; i++) { + var n = A[i]; + void 0 === n && (console.warn("THREE.BufferAttribute.copyVector4sArray(): vector is undefined", i), + n = new p), + e[t++] = n.x, + e[t++] = n.y, + e[t++] = n.z, + e[t++] = n.w + } + return this + }, + applyMatrix3: function(A) { + for (var e = 0, t = this.count; t > e; e++) + HA.x = this.getX(e), + HA.y = this.getY(e), + HA.z = this.getZ(e), + HA.applyMatrix3(A), + this.setXYZ(e, HA.x, HA.y, HA.z); + return this + }, + applyMatrix4: function(A) { + for (var e = 0, t = this.count; t > e; e++) + HA.x = this.getX(e), + HA.y = this.getY(e), + HA.z = this.getZ(e), + HA.applyMatrix4(A), + this.setXYZ(e, HA.x, HA.y, HA.z); + return this + }, + applyNormalMatrix: function(A) { + for (var e = 0, t = this.count; t > e; e++) + HA.x = this.getX(e), + HA.y = this.getY(e), + HA.z = this.getZ(e), + HA.applyNormalMatrix(A), + this.setXYZ(e, HA.x, HA.y, HA.z); + return this + }, + transformDirection: function(A) { + for (var e = 0, t = this.count; t > e; e++) + HA.x = this.getX(e), + HA.y = this.getY(e), + HA.z = this.getZ(e), + HA.transformDirection(A), + this.setXYZ(e, HA.x, HA.y, HA.z); + return this + }, + set: function(A, e) { + return void 0 === e && (e = 0), + this.array.set(A, e), + this + }, + getX: function(A) { + return this.array[A * this.itemSize] + }, + setX: function(A, e) { + return this.array[A * this.itemSize] = e, + this + }, + getY: function(A) { + return this.array[A * this.itemSize + 1] + }, + setY: function(A, e) { + return this.array[A * this.itemSize + 1] = e, + this + }, + getZ: function(A) { + return this.array[A * this.itemSize + 2] + }, + setZ: function(A, e) { + return this.array[A * this.itemSize + 2] = e, + this + }, + getW: function(A) { + return this.array[A * this.itemSize + 3] + }, + setW: function(A, e) { + return this.array[A * this.itemSize + 3] = e, + this + }, + setXY: function(A, e, t) { + return this.array[(A *= this.itemSize) + 0] = e, + this.array[A + 1] = t, + this + }, + setXYZ: function(A, e, t, i) { + return this.array[(A *= this.itemSize) + 0] = e, + this.array[A + 1] = t, + this.array[A + 2] = i, + this + }, + setXYZW: function(A, e, t, i, o) { + return this.array[(A *= this.itemSize) + 0] = e, + this.array[A + 1] = t, + this.array[A + 2] = i, + this.array[A + 3] = o, + this + }, + onUpload: function(A) { + return this.onUploadCallback = A, + this + }, + clone: function() { + return new this.constructor(this.array,this.itemSize).copy(this) + }, + toJSON: function() { + return { + itemSize: this.itemSize, + type: this.array.constructor.name, + array: Array.prototype.slice.call(this.array), + normalized: this.normalized + } + } + }), + (WA.prototype = Object.create(YA.prototype)).constructor = WA, + (JA.prototype = Object.create(YA.prototype)).constructor = JA, + (zA.prototype = Object.create(YA.prototype)).constructor = zA, + (ZA.prototype = Object.create(YA.prototype)).constructor = ZA, + (XA.prototype = Object.create(YA.prototype)).constructor = XA, + (_A.prototype = Object.create(YA.prototype)).constructor = _A, + ($A.prototype = Object.create(YA.prototype)).constructor = $A, + (Ae.prototype = Object.create(YA.prototype)).constructor = Ae, + (ee.prototype = Object.create(YA.prototype)).constructor = ee, + Object.assign(te.prototype, { + computeGroups: function(A) { + for (var e, t = [], i = void 0, o = A.faces, n = 0; o.length > n; n++) { + var r = o[n]; + r.materialIndex !== i && (i = r.materialIndex, + void 0 !== e && (e.count = 3 * n - e.start, + t.push(e)), + e = { + start: 3 * n, + materialIndex: i + }) + } + void 0 !== e && (e.count = 3 * n - e.start, + t.push(e)), + this.groups = t + }, + fromGeometry: function(A) { + var e, t = A.faces, i = A.vertices, o = A.faceVertexUvs, n = o[0] && o[0].length > 0, r = o[1] && o[1].length > 0, a = A.morphTargets, l = a.length; + if (l > 0) { + e = []; + for (var c = 0; l > c; c++) + e[c] = { + name: a[c].name, + data: [] + }; + this.morphTargets.position = e + } + var h, d = A.morphNormals, p = d.length; + if (p > 0) { + h = []; + for (c = 0; p > c; c++) + h[c] = { + name: d[c].name, + data: [] + }; + this.morphTargets.normal = h + } + var g = A.skinIndices + , u = A.skinWeights + , f = g.length === i.length + , m = u.length === i.length; + i.length > 0 && 0 === t.length && console.error("THREE.DirectGeometry: Faceless geometries are not supported."); + for (c = 0; t.length > c; c++) { + var C = t[c]; + this.vertices.push(i[C.a], i[C.b], i[C.c]); + var y = C.vertexNormals; + if (3 === y.length) + this.normals.push(y[0], y[1], y[2]); + else { + var v = C.normal; + this.normals.push(v, v, v) + } + var I, E = C.vertexColors; + if (3 === E.length) + this.colors.push(E[0], E[1], E[2]); + else { + var B = C.color; + this.colors.push(B, B, B) + } + if (!0 === n) + void 0 !== (I = o[0][c]) ? this.uvs.push(I[0], I[1], I[2]) : (console.warn("THREE.DirectGeometry.fromGeometry(): Undefined vertexUv ", c), + this.uvs.push(new s, new s, new s)); + if (!0 === r) + void 0 !== (I = o[1][c]) ? this.uvs2.push(I[0], I[1], I[2]) : (console.warn("THREE.DirectGeometry.fromGeometry(): Undefined vertexUv2 ", c), + this.uvs2.push(new s, new s, new s)); + for (var x = 0; l > x; x++) { + var S = a[x].vertices; + e[x].data.push(S[C.a], S[C.b], S[C.c]) + } + for (x = 0; p > x; x++) { + var w = d[x].vertexNormals[c]; + h[x].data.push(w.a, w.b, w.c) + } + f && this.skinIndices.push(g[C.a], g[C.b], g[C.c]), + m && this.skinWeights.push(u[C.a], u[C.b], u[C.c]) + } + return this.computeGroups(A), + this.verticesNeedUpdate = A.verticesNeedUpdate, + this.normalsNeedUpdate = A.normalsNeedUpdate, + this.colorsNeedUpdate = A.colorsNeedUpdate, + this.uvsNeedUpdate = A.uvsNeedUpdate, + this.groupsNeedUpdate = A.groupsNeedUpdate, + null !== A.boundingSphere && (this.boundingSphere = A.boundingSphere.clone()), + null !== A.boundingBox && (this.boundingBox = A.boundingBox.clone()), + this + } + }); + var oe = 1 + , ne = new M + , re = new H + , ae = new y + , se = new aA + , le = new aA + , ce = new y; + function he() { + Object.defineProperty(this, "id", { + value: oe += 2 + }), + this.uuid = a.generateUUID(), + this.name = "", + this.type = "BufferGeometry", + this.index = null, + this.attributes = {}, + this.morphAttributes = {}, + this.morphTargetsRelative = !1, + this.groups = [], + this.boundingBox = null, + this.boundingSphere = null, + this.drawRange = { + start: 0, + count: 1 / 0 + }, + this.userData = {} + } + he.prototype = Object.assign(Object.create(i.prototype), { + constructor: he, + isBufferGeometry: !0, + getIndex: function() { + return this.index + }, + setIndex: function(A) { + this.index = Array.isArray(A) ? new (ie(A) > 65535 ? $A : XA)(A,1) : A + }, + getAttribute: function(A) { + return this.attributes[A] + }, + setAttribute: function(A, e) { + return this.attributes[A] = e, + this + }, + deleteAttribute: function(A) { + return delete this.attributes[A], + this + }, + addGroup: function(A, e, t) { + this.groups.push({ + start: A, + count: e, + materialIndex: void 0 !== t ? t : 0 + }) + }, + clearGroups: function() { + this.groups = [] + }, + setDrawRange: function(A, e) { + this.drawRange.start = A, + this.drawRange.count = e + }, + applyMatrix4: function(A) { + var e = this.attributes.position; + void 0 !== e && (e.applyMatrix4(A), + e.needsUpdate = !0); + var t = this.attributes.normal; + if (void 0 !== t) { + var i = (new l).getNormalMatrix(A); + t.applyNormalMatrix(i), + t.needsUpdate = !0 + } + var o = this.attributes.tangent; + return void 0 !== o && (o.transformDirection(A), + o.needsUpdate = !0), + null !== this.boundingBox && this.computeBoundingBox(), + null !== this.boundingSphere && this.computeBoundingSphere(), + this + }, + rotateX: function(A) { + return ne.makeRotationX(A), + this.applyMatrix4(ne), + this + }, + rotateY: function(A) { + return ne.makeRotationY(A), + this.applyMatrix4(ne), + this + }, + rotateZ: function(A) { + return ne.makeRotationZ(A), + this.applyMatrix4(ne), + this + }, + translate: function(A, e, t) { + return ne.makeTranslation(A, e, t), + this.applyMatrix4(ne), + this + }, + scale: function(A, e, t) { + return ne.makeScale(A, e, t), + this.applyMatrix4(ne), + this + }, + lookAt: function(A) { + return re.lookAt(A), + re.updateMatrix(), + this.applyMatrix4(re.matrix), + this + }, + center: function() { + return this.computeBoundingBox(), + this.boundingBox.getCenter(ae).negate(), + this.translate(ae.x, ae.y, ae.z), + this + }, + setFromObject: function(A) { + var e = A.geometry; + if (A.isPoints || A.isLine) { + var t = new Ae(3 * e.vertices.length,3) + , i = new Ae(3 * e.colors.length,3); + if (this.setAttribute("position", t.copyVector3sArray(e.vertices)), + this.setAttribute("color", i.copyColorsArray(e.colors)), + e.lineDistances && e.lineDistances.length === e.vertices.length) { + var o = new Ae(e.lineDistances.length,1); + this.setAttribute("lineDistance", o.copyArray(e.lineDistances)) + } + null !== e.boundingSphere && (this.boundingSphere = e.boundingSphere.clone()), + null !== e.boundingBox && (this.boundingBox = e.boundingBox.clone()) + } else + A.isMesh && e && e.isGeometry && this.fromGeometry(e); + return this + }, + setFromPoints: function(A) { + for (var e = [], t = 0, i = A.length; i > t; t++) { + var o = A[t]; + e.push(o.x, o.y, o.z || 0) + } + return this.setAttribute("position", new Ae(e,3)), + this + }, + updateFromObject: function(A) { + var e, t = A.geometry; + if (A.isMesh) { + var i = t.__directGeometry; + if (!0 === t.elementsNeedUpdate && (i = void 0, + t.elementsNeedUpdate = !1), + void 0 === i) + return this.fromGeometry(t); + i.verticesNeedUpdate = t.verticesNeedUpdate, + i.normalsNeedUpdate = t.normalsNeedUpdate, + i.colorsNeedUpdate = t.colorsNeedUpdate, + i.uvsNeedUpdate = t.uvsNeedUpdate, + i.groupsNeedUpdate = t.groupsNeedUpdate, + t.verticesNeedUpdate = !1, + t.normalsNeedUpdate = !1, + t.colorsNeedUpdate = !1, + t.uvsNeedUpdate = !1, + t.groupsNeedUpdate = !1, + t = i + } + return !0 === t.verticesNeedUpdate && (void 0 !== (e = this.attributes.position) && (e.copyVector3sArray(t.vertices), + e.needsUpdate = !0), + t.verticesNeedUpdate = !1), + !0 === t.normalsNeedUpdate && (void 0 !== (e = this.attributes.normal) && (e.copyVector3sArray(t.normals), + e.needsUpdate = !0), + t.normalsNeedUpdate = !1), + !0 === t.colorsNeedUpdate && (void 0 !== (e = this.attributes.color) && (e.copyColorsArray(t.colors), + e.needsUpdate = !0), + t.colorsNeedUpdate = !1), + t.uvsNeedUpdate && (void 0 !== (e = this.attributes.uv) && (e.copyVector2sArray(t.uvs), + e.needsUpdate = !0), + t.uvsNeedUpdate = !1), + t.lineDistancesNeedUpdate && (void 0 !== (e = this.attributes.lineDistance) && (e.copyArray(t.lineDistances), + e.needsUpdate = !0), + t.lineDistancesNeedUpdate = !1), + t.groupsNeedUpdate && (t.computeGroups(A.geometry), + this.groups = t.groups, + t.groupsNeedUpdate = !1), + this + }, + fromGeometry: function(A) { + return A.__directGeometry = (new te).fromGeometry(A), + this.fromDirectGeometry(A.__directGeometry) + }, + fromDirectGeometry: function(A) { + var e = new Float32Array(3 * A.vertices.length); + if (this.setAttribute("position", new YA(e,3).copyVector3sArray(A.vertices)), + A.normals.length > 0) { + var t = new Float32Array(3 * A.normals.length); + this.setAttribute("normal", new YA(t,3).copyVector3sArray(A.normals)) + } + if (A.colors.length > 0) { + var i = new Float32Array(3 * A.colors.length); + this.setAttribute("color", new YA(i,3).copyColorsArray(A.colors)) + } + if (A.uvs.length > 0) { + var o = new Float32Array(2 * A.uvs.length); + this.setAttribute("uv", new YA(o,2).copyVector2sArray(A.uvs)) + } + if (A.uvs2.length > 0) { + var n = new Float32Array(2 * A.uvs2.length); + this.setAttribute("uv2", new YA(n,2).copyVector2sArray(A.uvs2)) + } + for (var r in this.groups = A.groups, + A.morphTargets) { + for (var a = [], s = A.morphTargets[r], l = 0, c = s.length; c > l; l++) { + var h = s[l] + , d = new Ae(3 * h.data.length,3); + d.name = h.name, + a.push(d.copyVector3sArray(h.data)) + } + this.morphAttributes[r] = a + } + if (A.skinIndices.length > 0) { + var p = new Ae(4 * A.skinIndices.length,4); + this.setAttribute("skinIndex", p.copyVector4sArray(A.skinIndices)) + } + if (A.skinWeights.length > 0) { + var g = new Ae(4 * A.skinWeights.length,4); + this.setAttribute("skinWeight", g.copyVector4sArray(A.skinWeights)) + } + return null !== A.boundingSphere && (this.boundingSphere = A.boundingSphere.clone()), + null !== A.boundingBox && (this.boundingBox = A.boundingBox.clone()), + this + }, + computeBoundingBox: function() { + null === this.boundingBox && (this.boundingBox = new aA); + var A = this.attributes.position + , e = this.morphAttributes.position; + if (void 0 !== A) { + if (this.boundingBox.setFromBufferAttribute(A), + e) + for (var t = 0, i = e.length; i > t; t++) { + se.setFromBufferAttribute(e[t]), + this.morphTargetsRelative ? (ce.addVectors(this.boundingBox.min, se.min), + this.boundingBox.expandByPoint(ce), + ce.addVectors(this.boundingBox.max, se.max), + this.boundingBox.expandByPoint(ce)) : (this.boundingBox.expandByPoint(se.min), + this.boundingBox.expandByPoint(se.max)) + } + } else + this.boundingBox.makeEmpty(); + (isNaN(this.boundingBox.min.x) || isNaN(this.boundingBox.min.y) || isNaN(this.boundingBox.min.z)) && console.error('THREE.BufferGeometry.computeBoundingBox: Computed min/max have NaN values. The "position" attribute is likely to have NaN values.', this) + }, + computeBoundingSphere: function() { + null === this.boundingSphere && (this.boundingSphere = new cA); + var A = this.attributes.position + , e = this.morphAttributes.position; + if (A) { + var t = this.boundingSphere.center; + if (se.setFromBufferAttribute(A), + e) + for (var i = 0, o = e.length; o > i; i++) { + le.setFromBufferAttribute(r = e[i]), + this.morphTargetsRelative ? (ce.addVectors(se.min, le.min), + se.expandByPoint(ce), + ce.addVectors(se.max, le.max), + se.expandByPoint(ce)) : (se.expandByPoint(le.min), + se.expandByPoint(le.max)) + } + se.getCenter(t); + var n = 0; + for (i = 0, + o = A.count; o > i; i++) + ce.fromBufferAttribute(A, i), + n = Math.max(n, t.distanceToSquared(ce)); + if (e) + for (i = 0, + o = e.length; o > i; i++) + for (var r, a = this.morphTargetsRelative, s = 0, l = (r = e[i]).count; l > s; s++) + ce.fromBufferAttribute(r, s), + a && (ae.fromBufferAttribute(A, s), + ce.add(ae)), + n = Math.max(n, t.distanceToSquared(ce)); + this.boundingSphere.radius = Math.sqrt(n), + isNaN(this.boundingSphere.radius) && console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.', this) + } + }, + computeFaceNormals: function() {}, + computeVertexNormals: function() { + var A = this.index + , e = this.attributes; + if (e.position) { + var t = e.position.array; + if (void 0 === e.normal) + this.setAttribute("normal", new YA(new Float32Array(t.length),3)); + else + for (var i = e.normal.array, o = 0, n = i.length; n > o; o++) + i[o] = 0; + var r, a, s, l = e.normal.array, c = new y, h = new y, d = new y, p = new y, g = new y; + if (A) { + var u = A.array; + for (o = 0, + n = A.count; n > o; o += 3) + a = 3 * u[o + 1], + s = 3 * u[o + 2], + c.fromArray(t, r = 3 * u[o + 0]), + h.fromArray(t, a), + d.fromArray(t, s), + p.subVectors(d, h), + g.subVectors(c, h), + p.cross(g), + l[r] += p.x, + l[r + 1] += p.y, + l[r + 2] += p.z, + l[a] += p.x, + l[a + 1] += p.y, + l[a + 2] += p.z, + l[s] += p.x, + l[s + 1] += p.y, + l[s + 2] += p.z + } else + for (o = 0, + n = t.length; n > o; o += 9) + c.fromArray(t, o), + h.fromArray(t, o + 3), + d.fromArray(t, o + 6), + p.subVectors(d, h), + g.subVectors(c, h), + p.cross(g), + l[o] = p.x, + l[o + 1] = p.y, + l[o + 2] = p.z, + l[o + 3] = p.x, + l[o + 4] = p.y, + l[o + 5] = p.z, + l[o + 6] = p.x, + l[o + 7] = p.y, + l[o + 8] = p.z; + this.normalizeNormals(), + e.normal.needsUpdate = !0 + } + }, + merge: function(A, e) { + if (A && A.isBufferGeometry) { + void 0 === e && (e = 0, + console.warn("THREE.BufferGeometry.merge(): Overwriting original geometry, starting at offset=0. Use BufferGeometryUtils.mergeBufferGeometries() for lossless merge.")); + var t = this.attributes; + for (var i in t) + if (void 0 !== A.attributes[i]) + for (var o = t[i].array, n = A.attributes[i], r = n.array, a = n.itemSize * e, s = Math.min(r.length, o.length - a), l = 0, c = a; s > l; l++, + c++) + o[c] = r[l]; + return this + } + console.error("THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.", A) + }, + normalizeNormals: function() { + for (var A = this.attributes.normal, e = 0, t = A.count; t > e; e++) + ce.x = A.getX(e), + ce.y = A.getY(e), + ce.z = A.getZ(e), + ce.normalize(), + A.setXYZ(e, ce.x, ce.y, ce.z) + }, + toNonIndexed: function() { + function A(A, e) { + for (var t = A.array, i = A.itemSize, o = new t.constructor(e.length * i), n = 0, r = 0, a = 0, s = e.length; s > a; a++) { + n = e[a] * i; + for (var l = 0; i > l; l++) + o[r++] = t[n++] + } + return new YA(o,i) + } + if (null === this.index) + return console.warn("THREE.BufferGeometry.toNonIndexed(): Geometry is already non-indexed."), + this; + var e = new he + , t = this.index.array + , i = this.attributes; + for (var o in i) { + var n = A(i[o], t); + e.setAttribute(o, n) + } + var r = this.morphAttributes; + for (o in r) { + for (var a = [], s = r[o], l = 0, c = s.length; c > l; l++) { + n = A(s[l], t); + a.push(n) + } + e.morphAttributes[o] = a + } + e.morphTargetsRelative = this.morphTargetsRelative; + for (var h = this.groups, d = (l = 0, + h.length); d > l; l++) { + var p = h[l]; + e.addGroup(p.start, p.count, p.materialIndex) + } + return e + }, + toJSON: function() { + var A = { + metadata: { + version: 4.5, + type: "BufferGeometry", + generator: "BufferGeometry.toJSON" + } + }; + if (A.uuid = this.uuid, + A.type = this.type, + "" !== this.name && (A.name = this.name), + Object.keys(this.userData).length > 0 && (A.userData = this.userData), + void 0 !== this.parameters) { + var e = this.parameters; + for (var t in e) + void 0 !== e[t] && (A[t] = e[t]); + return A + } + A.data = { + attributes: {} + }; + var i = this.index; + null !== i && (A.data.index = { + type: i.array.constructor.name, + array: Array.prototype.slice.call(i.array) + }); + var o = this.attributes; + for (var t in o) { + var n = (d = o[t]).toJSON(); + "" !== d.name && (n.name = d.name), + A.data.attributes[t] = n + } + var r = {} + , a = !1; + for (var t in this.morphAttributes) { + for (var s = this.morphAttributes[t], l = [], c = 0, h = s.length; h > c; c++) { + var d; + n = (d = s[c]).toJSON(); + "" !== d.name && (n.name = d.name), + l.push(n) + } + l.length > 0 && (r[t] = l, + a = !0) + } + a && (A.data.morphAttributes = r, + A.data.morphTargetsRelative = this.morphTargetsRelative); + var p = this.groups; + p.length > 0 && (A.data.groups = JSON.parse(JSON.stringify(p))); + var g = this.boundingSphere; + return null !== g && (A.data.boundingSphere = { + center: g.center.toArray(), + radius: g.radius + }), + A + }, + clone: function() { + return (new he).copy(this) + }, + copy: function(A) { + var e, t, i; + this.index = null, + this.attributes = {}, + this.morphAttributes = {}, + this.groups = [], + this.boundingBox = null, + this.boundingSphere = null, + this.name = A.name; + var o = A.index; + null !== o && this.setIndex(o.clone()); + var n = A.attributes; + for (e in n) { + this.setAttribute(e, n[e].clone()) + } + var r = A.morphAttributes; + for (e in r) { + var a = [] + , s = r[e]; + for (t = 0, + i = s.length; i > t; t++) + a.push(s[t].clone()); + this.morphAttributes[e] = a + } + this.morphTargetsRelative = A.morphTargetsRelative; + var l = A.groups; + for (t = 0, + i = l.length; i > t; t++) { + var c = l[t]; + this.addGroup(c.start, c.count, c.materialIndex) + } + var h = A.boundingBox; + null !== h && (this.boundingBox = h.clone()); + var d = A.boundingSphere; + return null !== d && (this.boundingSphere = d.clone()), + this.drawRange.start = A.drawRange.start, + this.drawRange.count = A.drawRange.count, + this.userData = A.userData, + this + }, + dispose: function() { + this.dispatchEvent({ + type: "dispose" + }) + } + }); + var de = new M + , pe = new CA + , ge = new cA + , ue = new y + , fe = new y + , me = new y + , Ce = new y + , ye = new y + , ve = new y + , Ie = new y + , Ee = new y + , Be = new y + , xe = new s + , Se = new s + , we = new s + , Me = new y + , be = new y; + function Ue(A, e) { + H.call(this), + this.type = "Mesh", + this.geometry = void 0 !== A ? A : new he, + this.material = void 0 !== e ? e : new jA, + this.updateMorphTargets() + } + function Fe(A, e, t, i, o, n, r, a) { + if (null === (1 === e.side ? i.intersectTriangle(r, n, o, !0, a) : i.intersectTriangle(o, n, r, 2 !== e.side, a))) + return null; + be.copy(a), + be.applyMatrix4(A.matrixWorld); + var s = t.ray.origin.distanceTo(be); + return t.near > s || s > t.far ? null : { + distance: s, + point: be.clone(), + object: A + } + } + function Ke(A, e, t, i, o, n, r, a, l, c, h, d) { + ue.fromBufferAttribute(o, c), + fe.fromBufferAttribute(o, h), + me.fromBufferAttribute(o, d); + var p = A.morphTargetInfluences; + if (e.morphTargets && n && p) { + Ie.set(0, 0, 0), + Ee.set(0, 0, 0), + Be.set(0, 0, 0); + for (var g = 0, u = n.length; u > g; g++) { + var f = p[g] + , m = n[g]; + 0 !== f && (Ce.fromBufferAttribute(m, c), + ye.fromBufferAttribute(m, h), + ve.fromBufferAttribute(m, d), + r ? (Ie.addScaledVector(Ce, f), + Ee.addScaledVector(ye, f), + Be.addScaledVector(ve, f)) : (Ie.addScaledVector(Ce.sub(ue), f), + Ee.addScaledVector(ye.sub(fe), f), + Be.addScaledVector(ve.sub(me), f))) + } + ue.add(Ie), + fe.add(Ee), + me.add(Be) + } + var C = Fe(A, e, t, i, ue, fe, me, Me); + if (C) { + a && (xe.fromBufferAttribute(a, c), + Se.fromBufferAttribute(a, h), + we.fromBufferAttribute(a, d), + C.uv = RA.getUV(Me, ue, fe, me, xe, Se, we, new s)), + l && (xe.fromBufferAttribute(l, c), + Se.fromBufferAttribute(l, h), + we.fromBufferAttribute(l, d), + C.uv2 = RA.getUV(Me, ue, fe, me, xe, Se, we, new s)); + var y = new GA(c,h,d); + RA.getNormal(ue, fe, me, y.normal), + C.face = y + } + return C + } + Ue.prototype = Object.assign(Object.create(H.prototype), { + constructor: Ue, + isMesh: !0, + copy: function(A) { + return H.prototype.copy.call(this, A), + void 0 !== A.morphTargetInfluences && (this.morphTargetInfluences = A.morphTargetInfluences.slice()), + void 0 !== A.morphTargetDictionary && (this.morphTargetDictionary = Object.assign({}, A.morphTargetDictionary)), + this + }, + updateMorphTargets: function() { + var A, e, t, i = this.geometry; + if (i.isBufferGeometry) { + var o = i.morphAttributes + , n = Object.keys(o); + if (n.length > 0) { + var r = o[n[0]]; + if (void 0 !== r) + for (this.morphTargetInfluences = [], + this.morphTargetDictionary = {}, + A = 0, + e = r.length; e > A; A++) + t = r[A].name || String(A), + this.morphTargetInfluences.push(0), + this.morphTargetDictionary[t] = A + } + } else { + var a = i.morphTargets; + void 0 !== a && a.length > 0 && console.error("THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.") + } + }, + raycast: function(A, e) { + var t, i = this.geometry, o = this.material, n = this.matrixWorld; + if (void 0 !== o && (null === i.boundingSphere && i.computeBoundingSphere(), + ge.copy(i.boundingSphere), + ge.applyMatrix4(n), + !1 !== A.ray.intersectsSphere(ge) && (de.getInverse(n), + pe.copy(A.ray).applyMatrix4(de), + null === i.boundingBox || !1 !== pe.intersectsBox(i.boundingBox)))) + if (i.isBufferGeometry) { + var r, a, l, c, h, d, p, g, u, f = i.index, m = i.attributes.position, C = i.morphAttributes.position, y = i.morphTargetsRelative, v = i.attributes.uv, I = i.attributes.uv2, E = i.groups, B = i.drawRange; + if (null !== f) + if (Array.isArray(o)) { + for (c = 0, + d = E.length; d > c; c++) + if (u = o[(g = E[c]).materialIndex]) + for (h = Math.max(g.start, B.start), + p = Math.min(g.start + g.count, B.start + B.count); p > h; h += 3) + r = f.getX(h), + a = f.getX(h + 1), + l = f.getX(h + 2), + (t = Ke(this, u, A, pe, m, C, y, v, I, r, a, l)) && (t.faceIndex = Math.floor(h / 3), + t.face.materialIndex = g.materialIndex, + e.push(t)) + } else + for (c = Math.max(0, B.start), + d = Math.min(f.count, B.start + B.count); d > c; c += 3) + r = f.getX(c), + a = f.getX(c + 1), + l = f.getX(c + 2), + (t = Ke(this, o, A, pe, m, C, y, v, I, r, a, l)) && (t.faceIndex = Math.floor(c / 3), + e.push(t)); + else if (void 0 !== m) + if (Array.isArray(o)) + for (c = 0, + d = E.length; d > c; c++) + for (u = o[(g = E[c]).materialIndex], + h = Math.max(g.start, B.start), + p = Math.min(g.start + g.count, B.start + B.count); p > h; h += 3) + (t = Ke(this, u, A, pe, m, C, y, v, I, r = h, a = h + 1, l = h + 2)) && (t.faceIndex = Math.floor(h / 3), + t.face.materialIndex = g.materialIndex, + e.push(t)); + else + for (c = Math.max(0, B.start), + d = Math.min(m.count, B.start + B.count); d > c; c += 3) + (t = Ke(this, o, A, pe, m, C, y, v, I, r = c, a = c + 1, l = c + 2)) && (t.faceIndex = Math.floor(c / 3), + e.push(t)) + } else if (i.isGeometry) { + var x, S, w, M, b = Array.isArray(o), U = i.vertices, F = i.faces, K = i.faceVertexUvs[0]; + K.length > 0 && (M = K); + for (var Q = 0, R = F.length; R > Q; Q++) { + var T = F[Q] + , k = b ? o[T.materialIndex] : o; + if (void 0 !== k && (t = Fe(this, k, A, pe, x = U[T.a], S = U[T.b], w = U[T.c], Me))) { + if (M && M[Q]) { + var D = M[Q]; + xe.copy(D[0]), + Se.copy(D[1]), + we.copy(D[2]), + t.uv = RA.getUV(Me, x, S, w, xe, Se, we, new s) + } + t.face = T, + t.faceIndex = Q, + e.push(t) + } + } + } + }, + clone: function() { + return new this.constructor(this.geometry,this.material).copy(this) + } + }); + var Qe = 0 + , Re = new M + , Te = new H + , ke = new y; + function De() { + Object.defineProperty(this, "id", { + value: Qe += 2 + }), + this.uuid = a.generateUUID(), + this.name = "", + this.type = "Geometry", + this.vertices = [], + this.colors = [], + this.faces = [], + this.faceVertexUvs = [[]], + this.morphTargets = [], + this.morphNormals = [], + this.skinWeights = [], + this.skinIndices = [], + this.lineDistances = [], + this.boundingBox = null, + this.boundingSphere = null, + this.elementsNeedUpdate = !1, + this.verticesNeedUpdate = !1, + this.uvsNeedUpdate = !1, + this.normalsNeedUpdate = !1, + this.colorsNeedUpdate = !1, + this.lineDistancesNeedUpdate = !1, + this.groupsNeedUpdate = !1 + } + De.prototype = Object.assign(Object.create(i.prototype), { + constructor: De, + isGeometry: !0, + applyMatrix4: function(A) { + for (var e = (new l).getNormalMatrix(A), t = 0, i = this.vertices.length; i > t; t++) { + this.vertices[t].applyMatrix4(A) + } + for (t = 0, + i = this.faces.length; i > t; t++) { + var o = this.faces[t]; + o.normal.applyMatrix3(e).normalize(); + for (var n = 0, r = o.vertexNormals.length; r > n; n++) + o.vertexNormals[n].applyMatrix3(e).normalize() + } + return null !== this.boundingBox && this.computeBoundingBox(), + null !== this.boundingSphere && this.computeBoundingSphere(), + this.verticesNeedUpdate = !0, + this.normalsNeedUpdate = !0, + this + }, + rotateX: function(A) { + return Re.makeRotationX(A), + this.applyMatrix4(Re), + this + }, + rotateY: function(A) { + return Re.makeRotationY(A), + this.applyMatrix4(Re), + this + }, + rotateZ: function(A) { + return Re.makeRotationZ(A), + this.applyMatrix4(Re), + this + }, + translate: function(A, e, t) { + return Re.makeTranslation(A, e, t), + this.applyMatrix4(Re), + this + }, + scale: function(A, e, t) { + return Re.makeScale(A, e, t), + this.applyMatrix4(Re), + this + }, + lookAt: function(A) { + return Te.lookAt(A), + Te.updateMatrix(), + this.applyMatrix4(Te.matrix), + this + }, + fromBufferGeometry: function(A) { + var e = this + , t = null !== A.index ? A.index.array : void 0 + , i = A.attributes; + if (void 0 === i.position) + return console.error("THREE.Geometry.fromBufferGeometry(): Position attribute required for conversion."), + this; + var o = i.position.array + , n = void 0 !== i.normal ? i.normal.array : void 0 + , r = void 0 !== i.color ? i.color.array : void 0 + , a = void 0 !== i.uv ? i.uv.array : void 0 + , l = void 0 !== i.uv2 ? i.uv2.array : void 0; + void 0 !== l && (this.faceVertexUvs[1] = []); + for (var c = 0; o.length > c; c += 3) + e.vertices.push((new y).fromArray(o, c)), + void 0 !== r && e.colors.push((new LA).fromArray(r, c)); + function h(A, t, i, o) { + var c = void 0 === r ? [] : [e.colors[A].clone(), e.colors[t].clone(), e.colors[i].clone()] + , h = new GA(A,t,i,void 0 === n ? [] : [(new y).fromArray(n, 3 * A), (new y).fromArray(n, 3 * t), (new y).fromArray(n, 3 * i)],c,o); + e.faces.push(h), + void 0 !== a && e.faceVertexUvs[0].push([(new s).fromArray(a, 2 * A), (new s).fromArray(a, 2 * t), (new s).fromArray(a, 2 * i)]), + void 0 !== l && e.faceVertexUvs[1].push([(new s).fromArray(l, 2 * A), (new s).fromArray(l, 2 * t), (new s).fromArray(l, 2 * i)]) + } + var d = A.groups; + if (d.length > 0) + for (c = 0; d.length > c; c++) + for (var p = d[c], g = p.start, u = g, f = g + p.count; f > u; u += 3) + void 0 !== t ? h(t[u], t[u + 1], t[u + 2], p.materialIndex) : h(u, u + 1, u + 2, p.materialIndex); + else if (void 0 !== t) + for (c = 0; t.length > c; c += 3) + h(t[c], t[c + 1], t[c + 2]); + else + for (c = 0; o.length / 3 > c; c += 3) + h(c, c + 1, c + 2); + return this.computeFaceNormals(), + null !== A.boundingBox && (this.boundingBox = A.boundingBox.clone()), + null !== A.boundingSphere && (this.boundingSphere = A.boundingSphere.clone()), + this + }, + center: function() { + return this.computeBoundingBox(), + this.boundingBox.getCenter(ke).negate(), + this.translate(ke.x, ke.y, ke.z), + this + }, + normalize: function() { + this.computeBoundingSphere(); + var A = this.boundingSphere.center + , e = this.boundingSphere.radius + , t = 0 === e ? 1 : 1 / e + , i = new M; + return i.set(t, 0, 0, -t * A.x, 0, t, 0, -t * A.y, 0, 0, t, -t * A.z, 0, 0, 0, 1), + this.applyMatrix4(i), + this + }, + computeFaceNormals: function() { + for (var A = new y, e = new y, t = 0, i = this.faces.length; i > t; t++) { + var o = this.faces[t] + , n = this.vertices[o.a] + , r = this.vertices[o.b]; + A.subVectors(this.vertices[o.c], r), + e.subVectors(n, r), + A.cross(e), + A.normalize(), + o.normal.copy(A) + } + }, + computeVertexNormals: function(A) { + var e, t, i, o, n, r; + for (void 0 === A && (A = !0), + r = new Array(this.vertices.length), + e = 0, + t = this.vertices.length; t > e; e++) + r[e] = new y; + if (A) { + var a, s, l = new y, c = new y; + for (i = 0, + o = this.faces.length; o > i; i++) + a = this.vertices[(n = this.faces[i]).a], + l.subVectors(this.vertices[n.c], s = this.vertices[n.b]), + c.subVectors(a, s), + l.cross(c), + r[n.a].add(l), + r[n.b].add(l), + r[n.c].add(l) + } else + for (this.computeFaceNormals(), + i = 0, + o = this.faces.length; o > i; i++) + r[(n = this.faces[i]).a].add(n.normal), + r[n.b].add(n.normal), + r[n.c].add(n.normal); + for (e = 0, + t = this.vertices.length; t > e; e++) + r[e].normalize(); + for (i = 0, + o = this.faces.length; o > i; i++) { + var h = (n = this.faces[i]).vertexNormals; + 3 === h.length ? (h[0].copy(r[n.a]), + h[1].copy(r[n.b]), + h[2].copy(r[n.c])) : (h[0] = r[n.a].clone(), + h[1] = r[n.b].clone(), + h[2] = r[n.c].clone()) + } + this.faces.length > 0 && (this.normalsNeedUpdate = !0) + }, + computeFlatVertexNormals: function() { + var A, e, t; + for (this.computeFaceNormals(), + A = 0, + e = this.faces.length; e > A; A++) { + var i = (t = this.faces[A]).vertexNormals; + 3 === i.length ? (i[0].copy(t.normal), + i[1].copy(t.normal), + i[2].copy(t.normal)) : (i[0] = t.normal.clone(), + i[1] = t.normal.clone(), + i[2] = t.normal.clone()) + } + this.faces.length > 0 && (this.normalsNeedUpdate = !0) + }, + computeMorphNormals: function() { + var A, e, t, i, o; + for (t = 0, + i = this.faces.length; i > t; t++) + for ((o = this.faces[t]).__originalFaceNormal ? o.__originalFaceNormal.copy(o.normal) : o.__originalFaceNormal = o.normal.clone(), + o.__originalVertexNormals || (o.__originalVertexNormals = []), + A = 0, + e = o.vertexNormals.length; e > A; A++) + o.__originalVertexNormals[A] ? o.__originalVertexNormals[A].copy(o.vertexNormals[A]) : o.__originalVertexNormals[A] = o.vertexNormals[A].clone(); + var n = new De; + for (n.faces = this.faces, + A = 0, + e = this.morphTargets.length; e > A; A++) { + if (!this.morphNormals[A]) { + this.morphNormals[A] = {}, + this.morphNormals[A].faceNormals = [], + this.morphNormals[A].vertexNormals = []; + var r = this.morphNormals[A].faceNormals + , a = this.morphNormals[A].vertexNormals; + for (t = 0, + i = this.faces.length; i > t; t++) + s = new y, + l = { + a: new y, + b: new y, + c: new y + }, + r.push(s), + a.push(l) + } + var s, l, c = this.morphNormals[A]; + for (n.vertices = this.morphTargets[A].vertices, + n.computeFaceNormals(), + n.computeVertexNormals(), + t = 0, + i = this.faces.length; i > t; t++) + l = c.vertexNormals[t], + (s = c.faceNormals[t]).copy((o = this.faces[t]).normal), + l.a.copy(o.vertexNormals[0]), + l.b.copy(o.vertexNormals[1]), + l.c.copy(o.vertexNormals[2]) + } + for (t = 0, + i = this.faces.length; i > t; t++) + (o = this.faces[t]).normal = o.__originalFaceNormal, + o.vertexNormals = o.__originalVertexNormals + }, + computeBoundingBox: function() { + null === this.boundingBox && (this.boundingBox = new aA), + this.boundingBox.setFromPoints(this.vertices) + }, + computeBoundingSphere: function() { + null === this.boundingSphere && (this.boundingSphere = new cA), + this.boundingSphere.setFromPoints(this.vertices) + }, + merge: function(A, e, t) { + if (A && A.isGeometry) { + var i, o = this.vertices.length, n = this.vertices, r = A.vertices, a = this.faces, s = A.faces, c = this.colors, h = A.colors; + void 0 === t && (t = 0), + void 0 !== e && (i = (new l).getNormalMatrix(e)); + for (var d = 0, p = r.length; p > d; d++) { + var g = r[d].clone(); + void 0 !== e && g.applyMatrix4(e), + n.push(g) + } + for (d = 0, + p = h.length; p > d; d++) + c.push(h[d].clone()); + for (d = 0, + p = s.length; p > d; d++) { + var u, f, m = s[d], C = m.vertexNormals, y = m.vertexColors; + (u = new GA(m.a + o,m.b + o,m.c + o)).normal.copy(m.normal), + void 0 !== i && u.normal.applyMatrix3(i).normalize(); + for (var v = 0, I = C.length; I > v; v++) + f = C[v].clone(), + void 0 !== i && f.applyMatrix3(i).normalize(), + u.vertexNormals.push(f); + u.color.copy(m.color); + for (v = 0, + I = y.length; I > v; v++) + u.vertexColors.push(y[v].clone()); + u.materialIndex = m.materialIndex + t, + a.push(u) + } + for (d = 0, + p = A.faceVertexUvs.length; p > d; d++) { + var E = A.faceVertexUvs[d]; + void 0 === this.faceVertexUvs[d] && (this.faceVertexUvs[d] = []); + for (v = 0, + I = E.length; I > v; v++) { + for (var B = E[v], x = [], S = 0, w = B.length; w > S; S++) + x.push(B[S].clone()); + this.faceVertexUvs[d].push(x) + } + } + } else + console.error("THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.", A) + }, + mergeMesh: function(A) { + A && A.isMesh ? (A.matrixAutoUpdate && A.updateMatrix(), + this.merge(A.geometry, A.matrix)) : console.error("THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.", A) + }, + mergeVertices: function() { + var A, e, t, i, o, n, r, a, s = {}, l = [], c = [], h = Math.pow(10, 4); + for (t = 0, + i = this.vertices.length; i > t; t++) + A = this.vertices[t], + void 0 === s[e = Math.round(A.x * h) + "_" + Math.round(A.y * h) + "_" + Math.round(A.z * h)] ? (s[e] = t, + l.push(this.vertices[t]), + c[t] = l.length - 1) : c[t] = c[s[e]]; + var d = []; + for (t = 0, + i = this.faces.length; i > t; t++) { + (o = this.faces[t]).a = c[o.a], + o.b = c[o.b], + o.c = c[o.c], + n = [o.a, o.b, o.c]; + for (var p = 0; 3 > p; p++) + if (n[p] === n[(p + 1) % 3]) { + d.push(t); + break + } + } + for (t = d.length - 1; t >= 0; t--) { + var g = d[t]; + for (this.faces.splice(g, 1), + r = 0, + a = this.faceVertexUvs.length; a > r; r++) + this.faceVertexUvs[r].splice(g, 1) + } + var u = this.vertices.length - l.length; + return this.vertices = l, + u + }, + setFromPoints: function(A) { + this.vertices = []; + for (var e = 0, t = A.length; t > e; e++) { + var i = A[e]; + this.vertices.push(new y(i.x,i.y,i.z || 0)) + } + return this + }, + sortFacesByMaterialIndex: function() { + for (var A = this.faces, e = A.length, t = 0; e > t; t++) + A[t]._id = t; + A.sort((function(A, e) { + return A.materialIndex - e.materialIndex + } + )); + var i, o, n = this.faceVertexUvs[0], r = this.faceVertexUvs[1]; + n && n.length === e && (i = []), + r && r.length === e && (o = []); + for (t = 0; e > t; t++) { + var a = A[t]._id; + i && i.push(n[a]), + o && o.push(r[a]) + } + i && (this.faceVertexUvs[0] = i), + o && (this.faceVertexUvs[1] = o) + }, + toJSON: function() { + var A = { + metadata: { + version: 4.5, + type: "Geometry", + generator: "Geometry.toJSON" + } + }; + if (A.uuid = this.uuid, + A.type = this.type, + "" !== this.name && (A.name = this.name), + void 0 !== this.parameters) { + var e = this.parameters; + for (var t in e) + void 0 !== e[t] && (A[t] = e[t]); + return A + } + for (var i = [], o = 0; this.vertices.length > o; o++) { + var n = this.vertices[o]; + i.push(n.x, n.y, n.z) + } + var r = [] + , a = [] + , s = {} + , l = [] + , c = {} + , h = [] + , d = {}; + for (o = 0; this.faces.length > o; o++) { + var p = this.faces[o] + , g = void 0 !== this.faceVertexUvs[0][o] + , u = p.normal.length() > 0 + , f = p.vertexNormals.length > 0 + , m = 1 !== p.color.r || 1 !== p.color.g || 1 !== p.color.b + , C = p.vertexColors.length > 0 + , y = 0; + if (y = B(y, 0, 0), + y = B(y, 1, !0), + y = B(y, 2, !1), + y = B(y, 3, g), + y = B(y, 4, u), + y = B(y, 5, f), + y = B(y, 6, m), + y = B(y, 7, C), + r.push(y), + r.push(p.a, p.b, p.c), + r.push(p.materialIndex), + g) { + var v = this.faceVertexUvs[0][o]; + r.push(w(v[0]), w(v[1]), w(v[2])) + } + if (u && r.push(x(p.normal)), + f) { + var I = p.vertexNormals; + r.push(x(I[0]), x(I[1]), x(I[2])) + } + if (m && r.push(S(p.color)), + C) { + var E = p.vertexColors; + r.push(S(E[0]), S(E[1]), S(E[2])) + } + } + function B(A, e, t) { + return t ? A | 1 << e : A & ~(1 << e) + } + function x(A) { + var e = A.x.toString() + A.y.toString() + A.z.toString(); + return void 0 !== s[e] || (s[e] = a.length / 3, + a.push(A.x, A.y, A.z)), + s[e] + } + function S(A) { + var e = A.r.toString() + A.g.toString() + A.b.toString(); + return void 0 !== c[e] || (c[e] = l.length, + l.push(A.getHex())), + c[e] + } + function w(A) { + var e = A.x.toString() + A.y.toString(); + return void 0 !== d[e] || (d[e] = h.length / 2, + h.push(A.x, A.y)), + d[e] + } + return A.data = {}, + A.data.vertices = i, + A.data.normals = a, + l.length > 0 && (A.data.colors = l), + h.length > 0 && (A.data.uvs = [h]), + A.data.faces = r, + A + }, + clone: function() { + return (new De).copy(this) + }, + copy: function(A) { + var e, t, i, o, n, r; + this.vertices = [], + this.colors = [], + this.faces = [], + this.faceVertexUvs = [[]], + this.morphTargets = [], + this.morphNormals = [], + this.skinWeights = [], + this.skinIndices = [], + this.lineDistances = [], + this.boundingBox = null, + this.boundingSphere = null, + this.name = A.name; + var a = A.vertices; + for (e = 0, + t = a.length; t > e; e++) + this.vertices.push(a[e].clone()); + var s = A.colors; + for (e = 0, + t = s.length; t > e; e++) + this.colors.push(s[e].clone()); + var l = A.faces; + for (e = 0, + t = l.length; t > e; e++) + this.faces.push(l[e].clone()); + for (e = 0, + t = A.faceVertexUvs.length; t > e; e++) { + var c = A.faceVertexUvs[e]; + for (void 0 === this.faceVertexUvs[e] && (this.faceVertexUvs[e] = []), + i = 0, + o = c.length; o > i; i++) { + var h = c[i] + , d = []; + for (n = 0, + r = h.length; r > n; n++) { + d.push(h[n].clone()) + } + this.faceVertexUvs[e].push(d) + } + } + var p = A.morphTargets; + for (e = 0, + t = p.length; t > e; e++) { + var g = {}; + if (g.name = p[e].name, + void 0 !== p[e].vertices) + for (g.vertices = [], + i = 0, + o = p[e].vertices.length; o > i; i++) + g.vertices.push(p[e].vertices[i].clone()); + if (void 0 !== p[e].normals) + for (g.normals = [], + i = 0, + o = p[e].normals.length; o > i; i++) + g.normals.push(p[e].normals[i].clone()); + this.morphTargets.push(g) + } + var u = A.morphNormals; + for (e = 0, + t = u.length; t > e; e++) { + var f = {}; + if (void 0 !== u[e].vertexNormals) + for (f.vertexNormals = [], + i = 0, + o = u[e].vertexNormals.length; o > i; i++) { + var m = u[e].vertexNormals[i] + , C = {}; + C.a = m.a.clone(), + C.b = m.b.clone(), + C.c = m.c.clone(), + f.vertexNormals.push(C) + } + if (void 0 !== u[e].faceNormals) + for (f.faceNormals = [], + i = 0, + o = u[e].faceNormals.length; o > i; i++) + f.faceNormals.push(u[e].faceNormals[i].clone()); + this.morphNormals.push(f) + } + var y = A.skinWeights; + for (e = 0, + t = y.length; t > e; e++) + this.skinWeights.push(y[e].clone()); + var v = A.skinIndices; + for (e = 0, + t = v.length; t > e; e++) + this.skinIndices.push(v[e].clone()); + var I = A.lineDistances; + for (e = 0, + t = I.length; t > e; e++) + this.lineDistances.push(I[e]); + var E = A.boundingBox; + null !== E && (this.boundingBox = E.clone()); + var B = A.boundingSphere; + return null !== B && (this.boundingSphere = B.clone()), + this.elementsNeedUpdate = A.elementsNeedUpdate, + this.verticesNeedUpdate = A.verticesNeedUpdate, + this.uvsNeedUpdate = A.uvsNeedUpdate, + this.normalsNeedUpdate = A.normalsNeedUpdate, + this.colorsNeedUpdate = A.colorsNeedUpdate, + this.lineDistancesNeedUpdate = A.lineDistancesNeedUpdate, + this.groupsNeedUpdate = A.groupsNeedUpdate, + this + }, + dispose: function() { + this.dispatchEvent({ + type: "dispose" + }) + } + }); + class Le extends De { + constructor(A, e, t, i, o, n) { + super(), + this.type = "BoxGeometry", + this.parameters = { + width: A, + height: e, + depth: t, + widthSegments: i, + heightSegments: o, + depthSegments: n + }, + this.fromBufferGeometry(new Ne(A,e,t,i,o,n)), + this.mergeVertices() + } + } + class Ne extends he { + constructor(A, e, t, i, o, n) { + super(), + this.type = "BoxBufferGeometry", + this.parameters = { + width: A, + height: e, + depth: t, + widthSegments: i, + heightSegments: o, + depthSegments: n + }; + var r = this; + A = A || 1, + e = e || 1, + t = t || 1, + i = Math.floor(i) || 1, + o = Math.floor(o) || 1, + n = Math.floor(n) || 1; + var a = [] + , s = [] + , l = [] + , c = [] + , h = 0 + , d = 0; + function p(A, e, t, i, o, n, p, g, u, f, m) { + var C, v, I = n / u, E = p / f, B = n / 2, x = p / 2, S = g / 2, w = u + 1, M = f + 1, b = 0, U = 0, F = new y; + for (v = 0; M > v; v++) { + var K = v * E - x; + for (C = 0; w > C; C++) { + F[A] = (C * I - B) * i, + F[e] = K * o, + F[t] = S, + s.push(F.x, F.y, F.z), + F[A] = 0, + F[e] = 0, + F[t] = g > 0 ? 1 : -1, + l.push(F.x, F.y, F.z), + c.push(C / u), + c.push(1 - v / f), + b += 1 + } + } + for (v = 0; f > v; v++) + for (C = 0; u > C; C++) { + var Q = h + C + w * (v + 1) + , R = h + (C + 1) + w * (v + 1) + , T = h + (C + 1) + w * v; + a.push(h + C + w * v, Q, T), + a.push(Q, R, T), + U += 6 + } + r.addGroup(d, U, m), + d += U, + h += b + } + p("z", "y", "x", -1, -1, t, e, A, n, o, 0), + p("z", "y", "x", 1, -1, t, e, -A, n, o, 1), + p("x", "z", "y", 1, 1, A, t, e, i, n, 2), + p("x", "z", "y", 1, -1, A, t, -e, i, n, 3), + p("x", "y", "z", 1, -1, A, e, t, i, o, 4), + p("x", "y", "z", -1, -1, A, e, -t, i, o, 5), + this.setIndex(a), + this.setAttribute("position", new Ae(s,3)), + this.setAttribute("normal", new Ae(l,3)), + this.setAttribute("uv", new Ae(c,2)) + } + } + function Oe(A) { + var e = {}; + for (var t in A) + for (var i in e[t] = {}, + A[t]) { + var o = A[t][i]; + e[t][i] = o && (o.isColor || o.isMatrix3 || o.isMatrix4 || o.isVector2 || o.isVector3 || o.isVector4 || o.isTexture) ? o.clone() : Array.isArray(o) ? o.slice() : o + } + return e + } + function Ve(A) { + for (var e = {}, t = 0; A.length > t; t++) { + var i = Oe(A[t]); + for (var o in i) + e[o] = i[o] + } + return e + } + var Ge = { + clone: Oe, + merge: Ve + }; + function Pe(A) { + qA.call(this), + this.type = "ShaderMaterial", + this.defines = {}, + this.uniforms = {}, + this.vertexShader = "void main() {\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}", + this.fragmentShader = "void main() {\n\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}", + this.linewidth = 1, + this.wireframe = !1, + this.wireframeLinewidth = 1, + this.fog = !1, + this.lights = !1, + this.clipping = !1, + this.skinning = !1, + this.morphTargets = !1, + this.morphNormals = !1, + this.extensions = { + derivatives: !1, + fragDepth: !1, + drawBuffers: !1, + shaderTextureLOD: !1 + }, + this.defaultAttributeValues = { + color: [1, 1, 1], + uv: [0, 0], + uv2: [0, 0] + }, + this.index0AttributeName = void 0, + this.uniformsNeedUpdate = !1, + void 0 !== A && (void 0 !== A.attributes && console.error("THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead."), + this.setValues(A)) + } + function qe() { + H.call(this), + this.type = "Camera", + this.matrixWorldInverse = new M, + this.projectionMatrix = new M, + this.projectionMatrixInverse = new M + } + function je(A, e, t, i) { + qe.call(this), + this.type = "PerspectiveCamera", + this.fov = void 0 !== A ? A : 50, + this.zoom = 1, + this.near = void 0 !== t ? t : .1, + this.far = void 0 !== i ? i : 2e3, + this.focus = 10, + this.aspect = void 0 !== e ? e : 1, + this.view = null, + this.filmGauge = 35, + this.filmOffset = 0, + this.updateProjectionMatrix() + } + (Pe.prototype = Object.create(qA.prototype)).constructor = Pe, + Pe.prototype.isShaderMaterial = !0, + Pe.prototype.copy = function(A) { + return qA.prototype.copy.call(this, A), + this.fragmentShader = A.fragmentShader, + this.vertexShader = A.vertexShader, + this.uniforms = Oe(A.uniforms), + this.defines = Object.assign({}, A.defines), + this.wireframe = A.wireframe, + this.wireframeLinewidth = A.wireframeLinewidth, + this.lights = A.lights, + this.clipping = A.clipping, + this.skinning = A.skinning, + this.morphTargets = A.morphTargets, + this.morphNormals = A.morphNormals, + this.extensions = A.extensions, + this + } + , + Pe.prototype.toJSON = function(A) { + var e = qA.prototype.toJSON.call(this, A); + for (var t in e.uniforms = {}, + this.uniforms) { + var i = this.uniforms[t].value; + e.uniforms[t] = i && i.isTexture ? { + type: "t", + value: i.toJSON(A).uuid + } : i && i.isColor ? { + type: "c", + value: i.getHex() + } : i && i.isVector2 ? { + type: "v2", + value: i.toArray() + } : i && i.isVector3 ? { + type: "v3", + value: i.toArray() + } : i && i.isVector4 ? { + type: "v4", + value: i.toArray() + } : i && i.isMatrix3 ? { + type: "m3", + value: i.toArray() + } : i && i.isMatrix4 ? { + type: "m4", + value: i.toArray() + } : { + value: i + } + } + Object.keys(this.defines).length > 0 && (e.defines = this.defines), + e.vertexShader = this.vertexShader, + e.fragmentShader = this.fragmentShader; + var o = {}; + for (var n in this.extensions) + !0 === this.extensions[n] && (o[n] = !0); + return Object.keys(o).length > 0 && (e.extensions = o), + e + } + , + qe.prototype = Object.assign(Object.create(H.prototype), { + constructor: qe, + isCamera: !0, + copy: function(A, e) { + return H.prototype.copy.call(this, A, e), + this.matrixWorldInverse.copy(A.matrixWorldInverse), + this.projectionMatrix.copy(A.projectionMatrix), + this.projectionMatrixInverse.copy(A.projectionMatrixInverse), + this + }, + getWorldDirection: function(A) { + void 0 === A && (console.warn("THREE.Camera: .getWorldDirection() target is now required"), + A = new y), + this.updateMatrixWorld(!0); + var e = this.matrixWorld.elements; + return A.set(-e[8], -e[9], -e[10]).normalize() + }, + updateMatrixWorld: function(A) { + H.prototype.updateMatrixWorld.call(this, A), + this.matrixWorldInverse.getInverse(this.matrixWorld) + }, + updateWorldMatrix: function(A, e) { + H.prototype.updateWorldMatrix.call(this, A, e), + this.matrixWorldInverse.getInverse(this.matrixWorld) + }, + clone: function() { + return (new this.constructor).copy(this) + } + }), + je.prototype = Object.assign(Object.create(qe.prototype), { + constructor: je, + isPerspectiveCamera: !0, + copy: function(A, e) { + return qe.prototype.copy.call(this, A, e), + this.fov = A.fov, + this.zoom = A.zoom, + this.near = A.near, + this.far = A.far, + this.focus = A.focus, + this.aspect = A.aspect, + this.view = null === A.view ? null : Object.assign({}, A.view), + this.filmGauge = A.filmGauge, + this.filmOffset = A.filmOffset, + this + }, + setFocalLength: function(A) { + var e = .5 * this.getFilmHeight() / A; + this.fov = 2 * a.RAD2DEG * Math.atan(e), + this.updateProjectionMatrix() + }, + getFocalLength: function() { + var A = Math.tan(.5 * a.DEG2RAD * this.fov); + return .5 * this.getFilmHeight() / A + }, + getEffectiveFOV: function() { + return 2 * a.RAD2DEG * Math.atan(Math.tan(.5 * a.DEG2RAD * this.fov) / this.zoom) + }, + getFilmWidth: function() { + return this.filmGauge * Math.min(this.aspect, 1) + }, + getFilmHeight: function() { + return this.filmGauge / Math.max(this.aspect, 1) + }, + setViewOffset: function(A, e, t, i, o, n) { + this.aspect = A / e, + null === this.view && (this.view = { + enabled: !0, + fullWidth: 1, + fullHeight: 1, + offsetX: 0, + offsetY: 0, + width: 1, + height: 1 + }), + this.view.enabled = !0, + this.view.fullWidth = A, + this.view.fullHeight = e, + this.view.offsetX = t, + this.view.offsetY = i, + this.view.width = o, + this.view.height = n, + this.updateProjectionMatrix() + }, + clearViewOffset: function() { + null !== this.view && (this.view.enabled = !1), + this.updateProjectionMatrix() + }, + updateProjectionMatrix: function() { + var A = this.near + , e = A * Math.tan(.5 * a.DEG2RAD * this.fov) / this.zoom + , t = 2 * e + , i = this.aspect * t + , o = -.5 * i + , n = this.view; + if (null !== this.view && this.view.enabled) { + var r = n.fullWidth + , s = n.fullHeight; + o += n.offsetX * i / r, + e -= n.offsetY * t / s, + i *= n.width / r, + t *= n.height / s + } + var l = this.filmOffset; + 0 !== l && (o += A * l / this.getFilmWidth()), + this.projectionMatrix.makePerspective(o, o + i, e, e - t, A, this.far), + this.projectionMatrixInverse.getInverse(this.projectionMatrix) + }, + toJSON: function(A) { + var e = H.prototype.toJSON.call(this, A); + return e.object.fov = this.fov, + e.object.zoom = this.zoom, + e.object.near = this.near, + e.object.far = this.far, + e.object.focus = this.focus, + e.object.aspect = this.aspect, + null !== this.view && (e.object.view = Object.assign({}, this.view)), + e.object.filmGauge = this.filmGauge, + e.object.filmOffset = this.filmOffset, + e + } + }); + function He(A, e, t, i) { + H.call(this), + this.type = "CubeCamera"; + var o = new je(90,1,A,e); + o.up.set(0, -1, 0), + o.lookAt(new y(1,0,0)), + this.add(o); + var n = new je(90,1,A,e); + n.up.set(0, -1, 0), + n.lookAt(new y(-1,0,0)), + this.add(n); + var r = new je(90,1,A,e); + r.up.set(0, 0, 1), + r.lookAt(new y(0,1,0)), + this.add(r); + var a = new je(90,1,A,e); + a.up.set(0, 0, -1), + a.lookAt(new y(0,-1,0)), + this.add(a); + var s = new je(90,1,A,e); + s.up.set(0, -1, 0), + s.lookAt(new y(0,0,1)), + this.add(s); + var l = new je(90,1,A,e); + l.up.set(0, -1, 0), + l.lookAt(new y(0,0,-1)), + this.add(l), + this.renderTarget = new Ye(t,i = i || { + format: 1022, + magFilter: 1006, + minFilter: 1006 + }), + this.renderTarget.texture.name = "CubeCamera", + this.update = function(A, e) { + null === this.parent && this.updateMatrixWorld(); + var t = A.getRenderTarget() + , i = this.renderTarget + , c = i.texture.generateMipmaps; + i.texture.generateMipmaps = !1, + A.setRenderTarget(i, 0), + A.render(e, o), + A.setRenderTarget(i, 1), + A.render(e, n), + A.setRenderTarget(i, 2), + A.render(e, r), + A.setRenderTarget(i, 3), + A.render(e, a), + A.setRenderTarget(i, 4), + A.render(e, s), + i.texture.generateMipmaps = c, + A.setRenderTarget(i, 5), + A.render(e, l), + A.setRenderTarget(t) + } + , + this.clear = function(A, e, t, i) { + for (var o = A.getRenderTarget(), n = this.renderTarget, r = 0; 6 > r; r++) + A.setRenderTarget(n, r), + A.clear(e, t, i); + A.setRenderTarget(o) + } + } + function Ye(A, e, t) { + Number.isInteger(e) && (console.warn("THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )"), + e = t), + g.call(this, A, A, e) + } + function We(A, e, t, i, o, n, r, a, s, l, c, h) { + d.call(this, null, n, r, a, s, l, i, o, c, h), + this.image = { + data: A || null, + width: e || 1, + height: t || 1 + }, + this.magFilter = void 0 !== s ? s : 1003, + this.minFilter = void 0 !== l ? l : 1003, + this.generateMipmaps = !1, + this.flipY = !1, + this.unpackAlignment = 1, + this.needsUpdate = !0 + } + (He.prototype = Object.create(H.prototype)).constructor = He, + (Ye.prototype = Object.create(g.prototype)).constructor = Ye, + Ye.prototype.isWebGLCubeRenderTarget = !0, + Ye.prototype.fromEquirectangularTexture = function(A, e) { + this.texture.type = e.type, + this.texture.format = e.format, + this.texture.encoding = e.encoding; + var t = new Y + , i = { + uniforms: { + tEquirect: { + value: null + } + }, + vertexShader: ["varying vec3 vWorldDirection;", "vec3 transformDirection( in vec3 dir, in mat4 matrix ) {", "\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );", "}", "void main() {", "\tvWorldDirection = transformDirection( position, modelMatrix );", "\t#include ", "\t#include ", "}"].join("\n"), + fragmentShader: ["uniform sampler2D tEquirect;", "varying vec3 vWorldDirection;", "#define RECIPROCAL_PI 0.31830988618", "#define RECIPROCAL_PI2 0.15915494", "void main() {", "\tvec3 direction = normalize( vWorldDirection );", "\tvec2 sampleUV;", "\tsampleUV.y = asin( clamp( direction.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;", "\tsampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;", "\tgl_FragColor = texture2D( tEquirect, sampleUV );", "}"].join("\n") + } + , o = new Pe({ + type: "CubemapFromEquirect", + uniforms: Oe(i.uniforms), + vertexShader: i.vertexShader, + fragmentShader: i.fragmentShader, + side: 1, + blending: 0 + }); + o.uniforms.tEquirect.value = e; + var n = new Ue(new Ne(5,5,5),o); + t.add(n); + var r = new He(1,10,1); + return r.renderTarget = this, + r.renderTarget.texture.name = "CubeCameraTexture", + r.update(A, t), + n.geometry.dispose(), + n.material.dispose(), + this + } + , + (We.prototype = Object.create(d.prototype)).constructor = We, + We.prototype.isDataTexture = !0; + var Je = new cA + , ze = new y; + function Ze(A, e, t, i, o, n) { + this.planes = [void 0 !== A ? A : new EA, void 0 !== e ? e : new EA, void 0 !== t ? t : new EA, void 0 !== i ? i : new EA, void 0 !== o ? o : new EA, void 0 !== n ? n : new EA] + } + Object.assign(Ze.prototype, { + set: function(A, e, t, i, o, n) { + var r = this.planes; + return r[0].copy(A), + r[1].copy(e), + r[2].copy(t), + r[3].copy(i), + r[4].copy(o), + r[5].copy(n), + this + }, + clone: function() { + return (new this.constructor).copy(this) + }, + copy: function(A) { + for (var e = this.planes, t = 0; 6 > t; t++) + e[t].copy(A.planes[t]); + return this + }, + setFromProjectionMatrix: function(A) { + var e = this.planes + , t = A.elements + , i = t[0] + , o = t[1] + , n = t[2] + , r = t[3] + , a = t[4] + , s = t[5] + , l = t[6] + , c = t[7] + , h = t[8] + , d = t[9] + , p = t[10] + , g = t[11] + , u = t[12] + , f = t[13] + , m = t[14] + , C = t[15]; + return e[0].setComponents(r - i, c - a, g - h, C - u).normalize(), + e[1].setComponents(r + i, c + a, g + h, C + u).normalize(), + e[2].setComponents(r + o, c + s, g + d, C + f).normalize(), + e[3].setComponents(r - o, c - s, g - d, C - f).normalize(), + e[4].setComponents(r - n, c - l, g - p, C - m).normalize(), + e[5].setComponents(r + n, c + l, g + p, C + m).normalize(), + this + }, + intersectsObject: function(A) { + var e = A.geometry; + return null === e.boundingSphere && e.computeBoundingSphere(), + Je.copy(e.boundingSphere).applyMatrix4(A.matrixWorld), + this.intersectsSphere(Je) + }, + intersectsSprite: function(A) { + return Je.center.set(0, 0, 0), + Je.radius = .7071067811865476, + Je.applyMatrix4(A.matrixWorld), + this.intersectsSphere(Je) + }, + intersectsSphere: function(A) { + for (var e = this.planes, t = A.center, i = -A.radius, o = 0; 6 > o; o++) { + if (i > e[o].distanceToPoint(t)) + return !1 + } + return !0 + }, + intersectsBox: function(A) { + for (var e = this.planes, t = 0; 6 > t; t++) { + var i = e[t]; + if (ze.x = i.normal.x > 0 ? A.max.x : A.min.x, + ze.y = i.normal.y > 0 ? A.max.y : A.min.y, + ze.z = i.normal.z > 0 ? A.max.z : A.min.z, + 0 > i.distanceToPoint(ze)) + return !1 + } + return !0 + }, + containsPoint: function(A) { + for (var e = this.planes, t = 0; 6 > t; t++) + if (0 > e[t].distanceToPoint(A)) + return !1; + return !0 + } + }); + var Xe = { + common: { + diffuse: { + value: new LA(15658734) + }, + opacity: { + value: 1 + }, + map: { + value: null + }, + uvTransform: { + value: new l + }, + uv2Transform: { + value: new l + }, + alphaMap: { + value: null + } + }, + specularmap: { + specularMap: { + value: null + } + }, + envmap: { + envMap: { + value: null + }, + flipEnvMap: { + value: -1 + }, + reflectivity: { + value: 1 + }, + refractionRatio: { + value: .98 + }, + maxMipLevel: { + value: 0 + } + }, + aomap: { + aoMap: { + value: null + }, + aoMapIntensity: { + value: 1 + } + }, + lightmap: { + lightMap: { + value: null + }, + lightMapIntensity: { + value: 1 + } + }, + emissivemap: { + emissiveMap: { + value: null + } + }, + bumpmap: { + bumpMap: { + value: null + }, + bumpScale: { + value: 1 + } + }, + normalmap: { + normalMap: { + value: null + }, + normalScale: { + value: new s(1,1) + } + }, + displacementmap: { + displacementMap: { + value: null + }, + displacementScale: { + value: 1 + }, + displacementBias: { + value: 0 + } + }, + roughnessmap: { + roughnessMap: { + value: null + } + }, + metalnessmap: { + metalnessMap: { + value: null + } + }, + gradientmap: { + gradientMap: { + value: null + } + }, + fog: { + fogDensity: { + value: 25e-5 + }, + fogNear: { + value: 1 + }, + fogFar: { + value: 2e3 + }, + fogColor: { + value: new LA(16777215) + } + }, + lights: { + ambientLightColor: { + value: [] + }, + lightProbe: { + value: [] + }, + directionalLights: { + value: [], + properties: { + direction: {}, + color: {} + } + }, + directionalLightShadows: { + value: [], + properties: { + shadowBias: {}, + shadowRadius: {}, + shadowMapSize: {} + } + }, + directionalShadowMap: { + value: [] + }, + directionalShadowMatrix: { + value: [] + }, + spotLights: { + value: [], + properties: { + color: {}, + position: {}, + direction: {}, + distance: {}, + coneCos: {}, + penumbraCos: {}, + decay: {} + } + }, + spotLightShadows: { + value: [], + properties: { + shadowBias: {}, + shadowRadius: {}, + shadowMapSize: {} + } + }, + spotShadowMap: { + value: [] + }, + spotShadowMatrix: { + value: [] + }, + pointLights: { + value: [], + properties: { + color: {}, + position: {}, + decay: {}, + distance: {} + } + }, + pointLightShadows: { + value: [], + properties: { + shadowBias: {}, + shadowRadius: {}, + shadowMapSize: {}, + shadowCameraNear: {}, + shadowCameraFar: {} + } + }, + pointShadowMap: { + value: [] + }, + pointShadowMatrix: { + value: [] + }, + hemisphereLights: { + value: [], + properties: { + direction: {}, + skyColor: {}, + groundColor: {} + } + }, + rectAreaLights: { + value: [], + properties: { + color: {}, + position: {}, + width: {}, + height: {} + } + } + }, + points: { + diffuse: { + value: new LA(15658734) + }, + opacity: { + value: 1 + }, + size: { + value: 1 + }, + scale: { + value: 1 + }, + map: { + value: null + }, + alphaMap: { + value: null + }, + uvTransform: { + value: new l + } + }, + sprite: { + diffuse: { + value: new LA(15658734) + }, + opacity: { + value: 1 + }, + center: { + value: new s(.5,.5) + }, + rotation: { + value: 0 + }, + map: { + value: null + }, + alphaMap: { + value: null + }, + uvTransform: { + value: new l + } + } + }; + function _e() { + var A = null + , e = !1 + , t = null; + function i(o, n) { + !1 !== e && (t(o, n), + A.requestAnimationFrame(i)) + } + return { + start: function() { + !0 !== e && null !== t && (A.requestAnimationFrame(i), + e = !0) + }, + stop: function() { + e = !1 + }, + setAnimationLoop: function(A) { + t = A + }, + setContext: function(e) { + A = e + } + } + } + function $e(A, e) { + var t = e.isWebGL2 + , i = new WeakMap; + return { + get: function(A) { + return A.isInterleavedBufferAttribute && (A = A.data), + i.get(A) + }, + remove: function(e) { + e.isInterleavedBufferAttribute && (e = e.data); + var t = i.get(e); + t && (A.deleteBuffer(t.buffer), + i.delete(e)) + }, + update: function(e, o) { + e.isInterleavedBufferAttribute && (e = e.data); + var n = i.get(e); + void 0 === n ? i.set(e, function(e, t) { + var i = e.array + , o = e.usage + , n = A.createBuffer(); + A.bindBuffer(t, n), + A.bufferData(t, i, o), + e.onUploadCallback(); + var r = 5126; + return i instanceof Float32Array ? r = 5126 : i instanceof Float64Array ? console.warn("THREE.WebGLAttributes: Unsupported data buffer format: Float64Array.") : i instanceof Uint16Array ? r = 5123 : i instanceof Int16Array ? r = 5122 : i instanceof Uint32Array ? r = 5125 : i instanceof Int32Array ? r = 5124 : i instanceof Int8Array ? r = 5120 : i instanceof Uint8Array && (r = 5121), + { + buffer: n, + type: r, + bytesPerElement: i.BYTES_PER_ELEMENT, + version: e.version + } + }(e, o)) : e.version > n.version && (!function(e, i, o) { + var n = i.array + , r = i.updateRange; + A.bindBuffer(o, e), + -1 === r.count ? A.bufferSubData(o, 0, n) : (t ? A.bufferSubData(o, r.offset * n.BYTES_PER_ELEMENT, n, r.offset, r.count) : A.bufferSubData(o, r.offset * n.BYTES_PER_ELEMENT, n.subarray(r.offset, r.offset + r.count)), + r.count = -1) + }(n.buffer, e, o), + n.version = e.version) + } + } + } + function At(A, e, t, i) { + De.call(this), + this.type = "PlaneGeometry", + this.parameters = { + width: A, + height: e, + widthSegments: t, + heightSegments: i + }, + this.fromBufferGeometry(new et(A,e,t,i)), + this.mergeVertices() + } + function et(A, e, t, i) { + he.call(this), + this.type = "PlaneBufferGeometry", + this.parameters = { + width: A, + height: e, + widthSegments: t, + heightSegments: i + }; + var o, n, r = (A = A || 1) / 2, a = (e = e || 1) / 2, s = Math.floor(t) || 1, l = Math.floor(i) || 1, c = s + 1, h = l + 1, d = A / s, p = e / l, g = [], u = [], f = [], m = []; + for (n = 0; h > n; n++) { + var C = n * p - a; + for (o = 0; c > o; o++) { + u.push(o * d - r, -C, 0), + f.push(0, 0, 1), + m.push(o / s), + m.push(1 - n / l) + } + } + for (n = 0; l > n; n++) + for (o = 0; s > o; o++) { + var y = o + c * (n + 1) + , v = o + 1 + c * (n + 1) + , I = o + 1 + c * n; + g.push(o + c * n, y, I), + g.push(y, v, I) + } + this.setIndex(g), + this.setAttribute("position", new Ae(u,3)), + this.setAttribute("normal", new Ae(f,3)), + this.setAttribute("uv", new Ae(m,2)) + } + (At.prototype = Object.create(De.prototype)).constructor = At, + (et.prototype = Object.create(he.prototype)).constructor = et; + var tt = { + alphamap_fragment: "#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\n#endif", + alphamap_pars_fragment: "#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif", + alphatest_fragment: "#ifdef ALPHATEST\n\tif ( diffuseColor.a < ALPHATEST ) discard;\n#endif", + aomap_fragment: "#ifdef USE_AOMAP\n\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\n\treflectedLight.indirectDiffuse *= ambientOcclusion;\n\t#if defined( USE_ENVMAP ) && defined( STANDARD )\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\n\t#endif\n#endif", + aomap_pars_fragment: "#ifdef USE_AOMAP\n\tuniform sampler2D aoMap;\n\tuniform float aoMapIntensity;\n#endif", + begin_vertex: "vec3 transformed = vec3( position );", + beginnormal_vertex: "vec3 objectNormal = vec3( normal );\n#ifdef USE_TANGENT\n\tvec3 objectTangent = vec3( tangent.xyz );\n#endif", + bsdfs: "vec2 integrateSpecularBRDF( const in float dotNV, const in float roughness ) {\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\treturn vec2( -1.04, 1.04 ) * a004 + r.zw;\n}\nfloat punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\tif( cutoffDistance > 0.0 ) {\n\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t}\n\treturn distanceFalloff;\n#else\n\tif( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\t}\n\treturn 1.0;\n#endif\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nvec3 F_Schlick_RoughnessDependent( const in vec3 F0, const in float dotNV, const in float roughness ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotNV - 6.98316 ) * dotNV );\n\tvec3 Fr = max( vec3( 1.0 - roughness ), F0 ) - F0;\n\treturn Fr * fresnel + F0;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\treturn 1.0 / ( gl * gv );\n}\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + viewDir );\n\tfloat dotNL = saturate( dot( normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( G * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\nvec3 BRDF_Specular_GGX_Environment( const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\treturn specularColor * brdf.x + brdf.y;\n}\nvoid BRDF_Specular_Multiscattering_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tvec3 F = F_Schlick_RoughnessDependent( specularColor, dotNV, roughness );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\tvec3 FssEss = F * brdf.x + brdf.y;\n\tfloat Ess = brdf.x + brdf.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie(float roughness, float NoH) {\n\tfloat invAlpha = 1.0 / roughness;\n\tfloat cos2h = NoH * NoH;\n\tfloat sin2h = max(1.0 - cos2h, 0.0078125);\treturn (2.0 + invAlpha) * pow(sin2h, invAlpha * 0.5) / (2.0 * PI);\n}\nfloat V_Neubelt(float NoV, float NoL) {\n\treturn saturate(1.0 / (4.0 * (NoL + NoV - NoL * NoV)));\n}\nvec3 BRDF_Specular_Sheen( const in float roughness, const in vec3 L, const in GeometricContext geometry, vec3 specularColor ) {\n\tvec3 N = geometry.normal;\n\tvec3 V = geometry.viewDir;\n\tvec3 H = normalize( V + L );\n\tfloat dotNH = saturate( dot( N, H ) );\n\treturn specularColor * D_Charlie( roughness, dotNH ) * V_Neubelt( dot(N, V), dot(N, L) );\n}\n#endif", + bumpmap_pars_fragment: "#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n\t\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 );\n\t\tfDet *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif", + clipping_planes_fragment: "#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#pragma unroll_loop_end\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\tif ( clipped ) discard;\n\t#endif\n#endif", + clipping_planes_pars_fragment: "#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif", + clipping_planes_pars_vertex: "#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif", + clipping_planes_vertex: "#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif", + color_fragment: "#ifdef USE_COLOR\n\tdiffuseColor.rgb *= vColor;\n#endif", + color_pars_fragment: "#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif", + color_pars_vertex: "#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif", + color_vertex: "#ifdef USE_COLOR\n\tvColor.xyz = color.xyz;\n#endif", + common: "#define PI 3.14159265359\n#define PI2 6.28318530718\n#define PI_HALF 1.5707963267949\n#define RECIPROCAL_PI 0.31830988618\n#define RECIPROCAL_PI2 0.15915494\n#define LOG2 1.442695\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement(a) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract(sin(sn) * c);\n}\n#ifdef HIGH_PRECISION\n\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n\tfloat max3( vec3 v ) { return max( max( v.x, v.y ), v.z ); }\n\tfloat precisionSafeLength( vec3 v ) {\n\t\tfloat maxComponent = max3( abs( v ) );\n\t\treturn length( v / maxComponent ) * maxComponent;\n\t}\n#endif\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n#ifdef CLEARCOAT\n\tvec3 clearcoatNormal;\n#endif\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\n\treturn - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat linearToRelativeLuminance( const in vec3 color ) {\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\treturn dot( weights, color.rgb );\n}\nbool isPerspectiveMatrix( mat4 m ) {\n return m[ 2 ][ 3 ] == - 1.0;\n}", + cube_uv_reflection_fragment: "#ifdef ENVMAP_TYPE_CUBE_UV\n#define cubeUV_maxMipLevel 8.0\n#define cubeUV_minMipLevel 4.0\n#define cubeUV_maxTileSize 256.0\n#define cubeUV_minTileSize 16.0\nfloat getFace(vec3 direction) {\n vec3 absDirection = abs(direction);\n float face = -1.0;\n if (absDirection.x > absDirection.z) {\n if (absDirection.x > absDirection.y)\n face = direction.x > 0.0 ? 0.0 : 3.0;\n else\n face = direction.y > 0.0 ? 1.0 : 4.0;\n } else {\n if (absDirection.z > absDirection.y)\n face = direction.z > 0.0 ? 2.0 : 5.0;\n else\n face = direction.y > 0.0 ? 1.0 : 4.0;\n }\n return face;\n}\nvec2 getUV(vec3 direction, float face) {\n vec2 uv;\n if (face == 0.0) {\n uv = vec2(-direction.z, direction.y) / abs(direction.x);\n } else if (face == 1.0) {\n uv = vec2(direction.x, -direction.z) / abs(direction.y);\n } else if (face == 2.0) {\n uv = direction.xy / abs(direction.z);\n } else if (face == 3.0) {\n uv = vec2(direction.z, direction.y) / abs(direction.x);\n } else if (face == 4.0) {\n uv = direction.xz / abs(direction.y);\n } else {\n uv = vec2(-direction.x, direction.y) / abs(direction.z);\n }\n return 0.5 * (uv + 1.0);\n}\nvec3 bilinearCubeUV(sampler2D envMap, vec3 direction, float mipInt) {\n float face = getFace(direction);\n float filterInt = max(cubeUV_minMipLevel - mipInt, 0.0);\n mipInt = max(mipInt, cubeUV_minMipLevel);\n float faceSize = exp2(mipInt);\n float texelSize = 1.0 / (3.0 * cubeUV_maxTileSize);\n vec2 uv = getUV(direction, face) * (faceSize - 1.0);\n vec2 f = fract(uv);\n uv += 0.5 - f;\n if (face > 2.0) {\n uv.y += faceSize;\n face -= 3.0;\n }\n uv.x += face * faceSize;\n if(mipInt < cubeUV_maxMipLevel){\n uv.y += 2.0 * cubeUV_maxTileSize;\n }\n uv.y += filterInt * 2.0 * cubeUV_minTileSize;\n uv.x += 3.0 * max(0.0, cubeUV_maxTileSize - 2.0 * faceSize);\n uv *= texelSize;\n vec3 tl = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n uv.x += texelSize;\n vec3 tr = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n uv.y += texelSize;\n vec3 br = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n uv.x -= texelSize;\n vec3 bl = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n vec3 tm = mix(tl, tr, f.x);\n vec3 bm = mix(bl, br, f.x);\n return mix(tm, bm, f.y);\n}\n#define r0 1.0\n#define v0 0.339\n#define m0 -2.0\n#define r1 0.8\n#define v1 0.276\n#define m1 -1.0\n#define r4 0.4\n#define v4 0.046\n#define m4 2.0\n#define r5 0.305\n#define v5 0.016\n#define m5 3.0\n#define r6 0.21\n#define v6 0.0038\n#define m6 4.0\nfloat roughnessToMip(float roughness) {\n float mip = 0.0;\n if (roughness >= r1) {\n mip = (r0 - roughness) * (m1 - m0) / (r0 - r1) + m0;\n } else if (roughness >= r4) {\n mip = (r1 - roughness) * (m4 - m1) / (r1 - r4) + m1;\n } else if (roughness >= r5) {\n mip = (r4 - roughness) * (m5 - m4) / (r4 - r5) + m4;\n } else if (roughness >= r6) {\n mip = (r5 - roughness) * (m6 - m5) / (r5 - r6) + m5;\n } else {\n mip = -2.0 * log2(1.16 * roughness); }\n return mip;\n}\nvec4 textureCubeUV(sampler2D envMap, vec3 sampleDir, float roughness) {\n float mip = clamp(roughnessToMip(roughness), m0, cubeUV_maxMipLevel);\n float mipF = fract(mip);\n float mipInt = floor(mip);\n vec3 color0 = bilinearCubeUV(envMap, sampleDir, mipInt);\n if (mipF == 0.0) {\n return vec4(color0, 1.0);\n } else {\n vec3 color1 = bilinearCubeUV(envMap, sampleDir, mipInt + 1.0);\n return vec4(mix(color0, color1, mipF), 1.0);\n }\n}\n#endif", + defaultnormal_vertex: "vec3 transformedNormal = objectNormal;\n#ifdef USE_INSTANCING\n\tmat3 m = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\n\ttransformedNormal = m * transformedNormal;\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif", + displacementmap_pars_vertex: "#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif", + displacementmap_vertex: "#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\n#endif", + emissivemap_fragment: "#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif", + emissivemap_pars_fragment: "#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif", + encodings_fragment: "gl_FragColor = linearToOutputTexel( gl_FragColor );", + encodings_pars_fragment: "\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\n\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract( Le );\n\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\n\treturn vec4( max( vRGB, 0.0 ), 1.0 );\n}", + envmap_fragment: "#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvec3 cameraToFrag;\n\t\t\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\n\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\tvec2 sampleUV;\n\t\treflectVec = normalize( reflectVec );\n\t\tsampleUV.y = asin( clamp( reflectVec.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\t\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\tvec4 envColor = texture2D( envMap, sampleUV );\n\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\treflectVec = normalize( reflectVec );\n\t\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0, 0.0, 1.0 ) );\n\t\tvec4 envColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifndef ENVMAP_TYPE_CUBE_UV\n\t\tenvColor = envMapTexelToLinear( envColor );\n\t#endif\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif", + envmap_common_pars_fragment: "#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\tuniform int maxMipLevel;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\t\n#endif", + envmap_pars_fragment: "#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif", + envmap_pars_vertex: "#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif", + envmap_physical_pars_fragment: "#if defined( USE_ENVMAP )\n\t#ifdef ENVMAP_MODE_REFRACTION\n\t\tuniform float refractionRatio;\n\t#endif\n\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\n\t\t#else\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\t\t#endif\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t}\n\tfloat getSpecularMIPLevel( const in float roughness, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat sigma = PI * roughness * roughness / ( 1.0 + roughness );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar + log2( sigma );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t vec3 reflectVec = reflect( -viewDir, normal );\n\t\t reflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t#else\n\t\t vec3 reflectVec = refract( -viewDir, normal, refractionRatio );\n\t\t#endif\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( roughness, maxMIPLevel );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\n\t\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\t\tvec2 sampleUV;\n\t\t\tsampleUV.y = asin( clamp( reflectVec.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\t\t\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, sampleUV, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = texture2D( envMap, sampleUV, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\t\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0,0.0,1.0 ) );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#endif\n\t\treturn envMapColor.rgb * envMapIntensity;\n\t}\n#endif", + envmap_vertex: "#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex;\n\t\tif ( isOrthographic ) { \n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif", + fog_vertex: "#ifdef USE_FOG\n\tfogDepth = -mvPosition.z;\n#endif", + fog_pars_vertex: "#ifdef USE_FOG\n\tvarying float fogDepth;\n#endif", + fog_fragment: "#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif", + fog_pars_fragment: "#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float fogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif", + gradientmap_pars_fragment: "#ifdef USE_GRADIENTMAP\n\tuniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\tfloat dotNL = dot( normal, lightDirection );\n\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t#ifdef USE_GRADIENTMAP\n\t\treturn texture2D( gradientMap, coord ).rgb;\n\t#else\n\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t#endif\n}", + lightmap_fragment: "#ifdef USE_LIGHTMAP\n\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\treflectedLight.indirectDiffuse += PI * lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n#endif", + lightmap_pars_fragment: "#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif", + lights_lambert_vertex: "vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\nvIndirectFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n\tvIndirectBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\n#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif", + lights_pars_begin: "uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\nuniform vec3 lightProbe[ 9 ];\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n\treturn result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in GeometricContext geometry ) {\n\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treturn irradiance;\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tdirectLight.color = directionalLight.color;\n\t\tdirectLight.direction = directionalLight.direction;\n\t\tdirectLight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tdirectLight.color = pointLight.color;\n\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n\t\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\n\t\tif ( angleCos > spotLight.coneCos ) {\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\t\tdirectLight.color = spotLight.color;\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tdirectLight.visible = true;\n\t\t} else {\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tirradiance *= PI;\n\t\t#endif\n\t\treturn irradiance;\n\t}\n#endif", + lights_toon_fragment: "ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;", + lights_toon_pars_fragment: "varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct ToonMaterial {\n\tvec3\tdiffuseColor;\n\tvec3\tspecularColor;\n\tfloat\tspecularShininess;\n\tfloat\tspecularStrength;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon\n#define Material_LightProbeLOD( material )\t(0)", + lights_phong_fragment: "BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;", + lights_phong_pars_fragment: "varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct BlinnPhongMaterial {\n\tvec3\tdiffuseColor;\n\tvec3\tspecularColor;\n\tfloat\tspecularShininess;\n\tfloat\tspecularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)", + lights_physical_fragment: "PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.specularRoughness = max( roughnessFactor, 0.0525 );material.specularRoughness += geometryRoughness;\nmaterial.specularRoughness = min( material.specularRoughness, 1.0 );\n#ifdef REFLECTIVITY\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#endif\n#ifdef CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;\n\t#endif\n\tmaterial.clearcoat = saturate( material.clearcoat );\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n\tmaterial.clearcoatRoughness += geometryRoughness;\n\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_SHEEN\n\tmaterial.sheenColor = sheen;\n#endif", + lights_physical_pars_fragment: "struct PhysicalMaterial {\n\tvec3\tdiffuseColor;\n\tfloat\tspecularRoughness;\n\tvec3\tspecularColor;\n#ifdef CLEARCOAT\n\tfloat clearcoat;\n\tfloat clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tvec3 sheenColor;\n#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearcoatDHRApprox( const in float roughness, const in float dotNL ) {\n\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.specularRoughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3( 0, 1, 0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNL = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = ccDotNL * directLight.color;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tccIrradiance *= PI;\n\t\t#endif\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t\treflectedLight.directSpecular += ccIrradiance * material.clearcoat * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_Sheen(\n\t\t\tmaterial.specularRoughness,\n\t\t\tdirectLight.direction,\n\t\t\tgeometry,\n\t\t\tmaterial.sheenColor\n\t\t);\n\t#else\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.normal, material.specularColor, material.specularRoughness);\n\t#endif\n\treflectedLight.directDiffuse += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNV = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular += clearcoatRadiance * material.clearcoat * BRDF_Specular_GGX_Environment( geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t\tfloat ccDotNL = ccDotNV;\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\tfloat clearcoatInv = 1.0 - clearcoatDHR;\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\tBRDF_Specular_Multiscattering_Environment( geometry, material.specularColor, material.specularRoughness, singleScattering, multiScattering );\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\n\treflectedLight.indirectSpecular += clearcoatInv * radiance * singleScattering;\n\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}", + lights_fragment_begin: "\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n#ifdef CLEARCOAT\n\tgeometry.clearcoatNormal = clearcoatNormal;\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\tirradiance += getLightProbeIrradiance( lightProbe, geometry );\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n#endif", + lights_fragment_maps: "#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.normal, material.specularRoughness, maxMipLevel );\n\t#ifdef CLEARCOAT\n\t\tclearcoatRadiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness, maxMipLevel );\n\t#endif\n#endif", + lights_fragment_end: "#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\n#endif", + logdepthbuf_fragment: "#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif", + logdepthbuf_pars_fragment: "#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif", + logdepthbuf_pars_vertex: "#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t\tvarying float vIsPerspective;\n\t#else\n\t\tuniform float logDepthBufFC;\n\t#endif\n#endif", + logdepthbuf_vertex: "#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n\t#else\n\t\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\n\t\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\t\tgl_Position.z *= gl_Position.w;\n\t\t}\n\t#endif\n#endif", + map_fragment: "#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif", + map_pars_fragment: "#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif", + map_particle_fragment: "#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n#endif\n#ifdef USE_MAP\n\tvec4 mapTexel = texture2D( map, uv );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif", + map_particle_pars_fragment: "#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tuniform mat3 uvTransform;\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif", + metalnessmap_fragment: "float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif", + metalnessmap_pars_fragment: "#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif", + morphnormal_vertex: "#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\n\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\n\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\n\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\n#endif", + morphtarget_pars_vertex: "#ifdef USE_MORPHTARGETS\n\tuniform float morphTargetBaseInfluence;\n\t#ifndef USE_MORPHNORMALS\n\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif", + morphtarget_vertex: "#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\n\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\n\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\n\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\n\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\n\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\n\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\n\t#endif\n#endif", + normal_fragment_begin: "#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\t#ifdef USE_TANGENT\n\t\tvec3 tangent = normalize( vTangent );\n\t\tvec3 bitangent = normalize( vBitangent );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\ttangent = tangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t\tbitangent = bitangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t#endif\n\t\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tmat3 vTBN = mat3( tangent, bitangent, normal );\n\t\t#endif\n\t#endif\n#endif\nvec3 geometryNormal = normal;", + normal_fragment_maps: "#ifdef OBJECTSPACE_NORMALMAP\n\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( TANGENTSPACE_NORMALMAP )\n\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\t#ifdef USE_TANGENT\n\t\tnormal = normalize( vTBN * mapN );\n\t#else\n\t\tnormal = perturbNormal2Arb( -vViewPosition, normal, mapN );\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif", + normalmap_pars_fragment: "#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN ) {\n\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tfloat scale = sign( st1.t * st0.s - st0.t * st1.s );\n\t\tvec3 S = normalize( ( q0 * st1.t - q1 * st0.t ) * scale );\n\t\tvec3 T = normalize( ( - q0 * st1.s + q1 * st0.s ) * scale );\n\t\tvec3 N = normalize( surf_norm );\n\t\tmat3 tsn = mat3( S, T, N );\n\t\tmapN.xy *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\treturn normalize( tsn * mapN );\n\t}\n#endif", + clearcoat_normal_fragment_begin: "#ifdef CLEARCOAT\n\tvec3 clearcoatNormal = geometryNormal;\n#endif", + clearcoat_normal_fragment_maps: "#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\t#ifdef USE_TANGENT\n\t\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\n\t#else\n\t\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN );\n\t#endif\n#endif", + clearcoat_pars_fragment: "#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif", + packing: "vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nvec4 pack2HalfToRGBA( vec2 v ) {\n\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ));\n\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w);\n}\nvec2 unpackRGBATo2Half( vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}", + premultiplied_alpha_fragment: "#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif", + project_vertex: "vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;", + dithering_fragment: "#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif", + dithering_pars_fragment: "#ifdef DITHERING\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif", + roughnessmap_fragment: "float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif", + roughnessmap_pars_fragment: "#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif", + shadowmap_pars_fragment: "#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n\t\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\n\t}\n\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n\t\tfloat occlusion = 1.0;\n\t\tvec2 distribution = texture2DDistribution( shadow, uv );\n\t\tfloat hard_shadow = step( compare , distribution.x );\n\t\tif (hard_shadow != 1.0 ) {\n\t\t\tfloat distance = compare - distribution.x ;\n\t\t\tfloat variance = max( 0.00000, distribution.y * distribution.y );\n\t\t\tfloat softness_probability = variance / (variance + distance * distance );\t\t\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\t\t\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n\t\t}\n\t\treturn occlusion;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif", + shadowmap_pars_vertex: "#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n#endif", + shadowmap_vertex: "#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * worldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * worldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * worldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n#endif", + shadowmask_pars_fragment: "float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tdirectionalLight = directionalLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tspotLight = spotLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tpointLight = pointLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#endif\n\treturn shadow;\n}", + skinbase_vertex: "#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif", + skinning_pars_vertex: "#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform highp sampler2D boneTexture;\n\t\tuniform int boneTextureSize;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif", + skinning_vertex: "#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif", + skinnormal_vertex: "#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif", + specularmap_fragment: "float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif", + specularmap_pars_fragment: "#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif", + tonemapping_fragment: "#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif", + tonemapping_pars_fragment: "#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nuniform float toneMappingWhitePoint;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\n#define Uncharted2Helper( x ) max( ( ( x * ( 0.15 * x + 0.10 * 0.50 ) + 0.20 * 0.02 ) / ( x * ( 0.15 * x + 0.50 ) + 0.20 * 0.30 ) ) - 0.02 / 0.30, vec3( 0.0 ) )\nvec3 Uncharted2ToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( Uncharted2Helper( color ) / Uncharted2Helper( vec3( toneMappingWhitePoint ) ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( ( color * ( 2.51 * color + 0.03 ) ) / ( color * ( 2.43 * color + 0.59 ) + 0.14 ) );\n}", + uv_pars_fragment: "#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\n\tvarying vec2 vUv;\n#endif", + uv_pars_vertex: "#ifdef USE_UV\n\t#ifdef UVS_VERTEX_ONLY\n\t\tvec2 vUv;\n\t#else\n\t\tvarying vec2 vUv;\n\t#endif\n\tuniform mat3 uvTransform;\n#endif", + uv_vertex: "#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif", + uv2_pars_fragment: "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif", + uv2_pars_vertex: "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n\tuniform mat3 uv2Transform;\n#endif", + uv2_vertex: "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\n#endif", + worldpos_vertex: "#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif", + background_frag: "uniform sampler2D t2D;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}", + background_vert: "varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}", + cube_frag: "#include \nuniform float opacity;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 vReflect = vWorldDirection;\n\t#include \n\tgl_FragColor = envColor;\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}", + cube_vert: "varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}", + depth_frag: "#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\t#endif\n}", + depth_vert: "#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvHighPrecisionZW = gl_Position.zw;\n}", + distanceRGBA_frag: "#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}", + distanceRGBA_vert: "#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}", + equirect_frag: "uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV;\n\tsampleUV.y = asin( clamp( direction.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\tsampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;\n\tvec4 texColor = texture2D( tEquirect, sampleUV );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}", + equirect_vert: "varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}", + linedashed_frag: "uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}", + linedashed_vert: "uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvLineDistance = scale * lineDistance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshbasic_frag: "uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshbasic_vert: "#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_ENVMAP\n\t#include \n\t#include \n\t#include \n\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshlambert_frag: "uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\treflectedLight.indirectDiffuse = getAmbientLightIrradiance( ambientLightColor );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\n\t#else\n\t\treflectedLight.indirectDiffuse += vIndirectFront;\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshlambert_vert: "#define LAMBERT\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshmatcap_frag: "#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t\tmatcapColor = matcapTexelToLinear( matcapColor );\n\t#else\n\t\tvec4 matcapColor = vec4( 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshmatcap_vert: "#define MATCAP\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifndef FLAT_SHADED\n\t\tvNormal = normalize( transformedNormal );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n}", + meshtoon_frag: "#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshtoon_vert: "#define TOON\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}", + meshphong_frag: "#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshphong_vert: "#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshphysical_frag: "#define STANDARD\n#ifdef PHYSICAL\n\t#define REFLECTIVITY\n\t#define CLEARCOAT\n\t#define TRANSPARENCY\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef TRANSPARENCY\n\tuniform float transparency;\n#endif\n#ifdef REFLECTIVITY\n\tuniform float reflectivity;\n#endif\n#ifdef CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheen;\n#endif\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#ifdef TRANSPARENCY\n\t\tdiffuseColor.a *= saturate( 1. - transparency + linearToRelativeLuminance( reflectedLight.directSpecular + reflectedLight.indirectSpecular ) );\n\t#endif\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshphysical_vert: "#define STANDARD\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}", + normal_frag: "#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}", + normal_vert: "#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}", + points_frag: "uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}", + points_vert: "uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}", + shadow_frag: "uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n\t#include \n\t#include \n}", + shadow_vert: "#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + sprite_frag: "uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n}", + sprite_vert: "uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}" + } + , it = { + basic: { + uniforms: Ve([Xe.common, Xe.specularmap, Xe.envmap, Xe.aomap, Xe.lightmap, Xe.fog]), + vertexShader: tt.meshbasic_vert, + fragmentShader: tt.meshbasic_frag + }, + lambert: { + uniforms: Ve([Xe.common, Xe.specularmap, Xe.envmap, Xe.aomap, Xe.lightmap, Xe.emissivemap, Xe.fog, Xe.lights, { + emissive: { + value: new LA(0) + } + }]), + vertexShader: tt.meshlambert_vert, + fragmentShader: tt.meshlambert_frag + }, + phong: { + uniforms: Ve([Xe.common, Xe.specularmap, Xe.envmap, Xe.aomap, Xe.lightmap, Xe.emissivemap, Xe.bumpmap, Xe.normalmap, Xe.displacementmap, Xe.fog, Xe.lights, { + emissive: { + value: new LA(0) + }, + specular: { + value: new LA(1118481) + }, + shininess: { + value: 30 + } + }]), + vertexShader: tt.meshphong_vert, + fragmentShader: tt.meshphong_frag + }, + standard: { + uniforms: Ve([Xe.common, Xe.envmap, Xe.aomap, Xe.lightmap, Xe.emissivemap, Xe.bumpmap, Xe.normalmap, Xe.displacementmap, Xe.roughnessmap, Xe.metalnessmap, Xe.fog, Xe.lights, { + emissive: { + value: new LA(0) + }, + roughness: { + value: .5 + }, + metalness: { + value: .5 + }, + envMapIntensity: { + value: 1 + } + }]), + vertexShader: tt.meshphysical_vert, + fragmentShader: tt.meshphysical_frag + }, + toon: { + uniforms: Ve([Xe.common, Xe.specularmap, Xe.aomap, Xe.lightmap, Xe.emissivemap, Xe.bumpmap, Xe.normalmap, Xe.displacementmap, Xe.gradientmap, Xe.fog, Xe.lights, { + emissive: { + value: new LA(0) + }, + specular: { + value: new LA(1118481) + }, + shininess: { + value: 30 + } + }]), + vertexShader: tt.meshtoon_vert, + fragmentShader: tt.meshtoon_frag + }, + matcap: { + uniforms: Ve([Xe.common, Xe.bumpmap, Xe.normalmap, Xe.displacementmap, Xe.fog, { + matcap: { + value: null + } + }]), + vertexShader: tt.meshmatcap_vert, + fragmentShader: tt.meshmatcap_frag + }, + points: { + uniforms: Ve([Xe.points, Xe.fog]), + vertexShader: tt.points_vert, + fragmentShader: tt.points_frag + }, + dashed: { + uniforms: Ve([Xe.common, Xe.fog, { + scale: { + value: 1 + }, + dashSize: { + value: 1 + }, + totalSize: { + value: 2 + } + }]), + vertexShader: tt.linedashed_vert, + fragmentShader: tt.linedashed_frag + }, + depth: { + uniforms: Ve([Xe.common, Xe.displacementmap]), + vertexShader: tt.depth_vert, + fragmentShader: tt.depth_frag + }, + normal: { + uniforms: Ve([Xe.common, Xe.bumpmap, Xe.normalmap, Xe.displacementmap, { + opacity: { + value: 1 + } + }]), + vertexShader: tt.normal_vert, + fragmentShader: tt.normal_frag + }, + sprite: { + uniforms: Ve([Xe.sprite, Xe.fog]), + vertexShader: tt.sprite_vert, + fragmentShader: tt.sprite_frag + }, + background: { + uniforms: { + uvTransform: { + value: new l + }, + t2D: { + value: null + } + }, + vertexShader: tt.background_vert, + fragmentShader: tt.background_frag + }, + cube: { + uniforms: Ve([Xe.envmap, { + opacity: { + value: 1 + } + }]), + vertexShader: tt.cube_vert, + fragmentShader: tt.cube_frag + }, + equirect: { + uniforms: { + tEquirect: { + value: null + } + }, + vertexShader: tt.equirect_vert, + fragmentShader: tt.equirect_frag + }, + distanceRGBA: { + uniforms: Ve([Xe.common, Xe.displacementmap, { + referencePosition: { + value: new y + }, + nearDistance: { + value: 1 + }, + farDistance: { + value: 1e3 + } + }]), + vertexShader: tt.distanceRGBA_vert, + fragmentShader: tt.distanceRGBA_frag + }, + shadow: { + uniforms: Ve([Xe.lights, Xe.fog, { + color: { + value: new LA(0) + }, + opacity: { + value: 1 + } + }]), + vertexShader: tt.shadow_vert, + fragmentShader: tt.shadow_frag + } + }; + function ot(A, e, t, i) { + var o, n, r = new LA(0), a = 0, s = null, l = 0, c = null; + function h(A, t) { + e.buffers.color.setClear(A.r, A.g, A.b, t, i) + } + return { + getClearColor: function() { + return r + }, + setClearColor: function(A, e) { + r.set(A), + h(r, a = void 0 !== e ? e : 1) + }, + getClearAlpha: function() { + return a + }, + setClearAlpha: function(A) { + h(r, a = A) + }, + render: function(e, i, d, p) { + var g = i.background + , u = A.xr + , f = u.getSession && u.getSession(); + if (f && "additive" === f.environmentBlendMode && (g = null), + null === g ? h(r, a) : g && g.isColor && (h(g, 1), + p = !0), + (A.autoClear || p) && A.clear(A.autoClearColor, A.autoClearDepth, A.autoClearStencil), + g && (g.isCubeTexture || g.isWebGLCubeRenderTarget || 306 === g.mapping)) { + void 0 === n && ((n = new Ue(new Ne(1,1,1),new Pe({ + type: "BackgroundCubeMaterial", + uniforms: Oe(it.cube.uniforms), + vertexShader: it.cube.vertexShader, + fragmentShader: it.cube.fragmentShader, + side: 1, + depthTest: !1, + depthWrite: !1, + fog: !1 + }))).geometry.deleteAttribute("normal"), + n.geometry.deleteAttribute("uv"), + n.onBeforeRender = function(A, e, t) { + this.matrixWorld.copyPosition(t.matrixWorld) + } + , + Object.defineProperty(n.material, "envMap", { + get: function() { + return this.uniforms.envMap.value + } + }), + t.update(n)); + var m = g.isWebGLCubeRenderTarget ? g.texture : g; + n.material.uniforms.envMap.value = m, + n.material.uniforms.flipEnvMap.value = m.isCubeTexture ? -1 : 1, + s === g && l === m.version && c === A.toneMapping || (n.material.needsUpdate = !0, + s = g, + l = m.version, + c = A.toneMapping), + e.unshift(n, n.geometry, n.material, 0, 0, null) + } else + g && g.isTexture && (void 0 === o && ((o = new Ue(new et(2,2),new Pe({ + type: "BackgroundMaterial", + uniforms: Oe(it.background.uniforms), + vertexShader: it.background.vertexShader, + fragmentShader: it.background.fragmentShader, + side: 0, + depthTest: !1, + depthWrite: !1, + fog: !1 + }))).geometry.deleteAttribute("normal"), + Object.defineProperty(o.material, "map", { + get: function() { + return this.uniforms.t2D.value + } + }), + t.update(o)), + o.material.uniforms.t2D.value = g, + !0 === g.matrixAutoUpdate && g.updateMatrix(), + o.material.uniforms.uvTransform.value.copy(g.matrix), + s === g && l === g.version && c === A.toneMapping || (o.material.needsUpdate = !0, + s = g, + l = g.version, + c = A.toneMapping), + e.unshift(o, o.geometry, o.material, 0, 0, null)) + } + } + } + function nt(A, e, t, i) { + var o, n = i.isWebGL2; + this.setMode = function(A) { + o = A + } + , + this.render = function(e, i) { + A.drawArrays(o, e, i), + t.update(i, o) + } + , + this.renderInstances = function(i, r, a, s) { + if (0 !== s) { + var l, c; + if (n) + l = A, + c = "drawArraysInstanced"; + else if (c = "drawArraysInstancedANGLE", + null === (l = e.get("ANGLE_instanced_arrays"))) + return void console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays."); + l[c](o, r, a, s), + t.update(a, o, s) + } + } + } + function rt(A, e, t) { + var i; + function o(e) { + if ("highp" === e) { + if (A.getShaderPrecisionFormat(35633, 36338).precision > 0 && A.getShaderPrecisionFormat(35632, 36338).precision > 0) + return "highp"; + e = "mediump" + } + return "mediump" === e && A.getShaderPrecisionFormat(35633, 36337).precision > 0 && A.getShaderPrecisionFormat(35632, 36337).precision > 0 ? "mediump" : "lowp" + } + var n = "undefined" != typeof WebGL2RenderingContext && A instanceof WebGL2RenderingContext || "undefined" != typeof WebGL2ComputeRenderingContext && A instanceof WebGL2ComputeRenderingContext + , r = void 0 !== t.precision ? t.precision : "highp" + , a = o(r); + a !== r && (console.warn("THREE.WebGLRenderer:", r, "not supported, using", a, "instead."), + r = a); + var s = !0 === t.logarithmicDepthBuffer + , l = A.getParameter(34930) + , c = A.getParameter(35660) + , h = A.getParameter(3379) + , d = A.getParameter(34076) + , p = A.getParameter(34921) + , g = A.getParameter(36347) + , u = A.getParameter(36348) + , f = A.getParameter(36349) + , m = c > 0 + , C = n || !!e.get("OES_texture_float"); + return { + isWebGL2: n, + getMaxAnisotropy: function() { + if (void 0 !== i) + return i; + var t = e.get("EXT_texture_filter_anisotropic"); + return i = null !== t ? A.getParameter(t.MAX_TEXTURE_MAX_ANISOTROPY_EXT) : 0 + }, + getMaxPrecision: o, + precision: r, + logarithmicDepthBuffer: s, + maxTextures: l, + maxVertexTextures: c, + maxTextureSize: h, + maxCubemapSize: d, + maxAttributes: p, + maxVertexUniforms: g, + maxVaryings: u, + maxFragmentUniforms: f, + vertexTextures: m, + floatFragmentTextures: C, + floatVertexTextures: m && C, + maxSamples: n ? A.getParameter(36183) : 0 + } + } + function at() { + var A = this + , e = null + , t = 0 + , i = !1 + , o = !1 + , n = new EA + , r = new l + , a = { + value: null, + needsUpdate: !1 + }; + function s() { + a.value !== e && (a.value = e, + a.needsUpdate = t > 0), + A.numPlanes = t, + A.numIntersection = 0 + } + function c(e, t, i, o) { + var s = null !== e ? e.length : 0 + , l = null; + if (0 !== s) { + if (l = a.value, + !0 !== o || null === l) { + var c = i + 4 * s + , h = t.matrixWorldInverse; + r.getNormalMatrix(h), + (null === l || c > l.length) && (l = new Float32Array(c)); + for (var d = 0, p = i; d !== s; ++d, + p += 4) + n.copy(e[d]).applyMatrix4(h, r), + n.normal.toArray(l, p), + l[p + 3] = n.constant + } + a.value = l, + a.needsUpdate = !0 + } + return A.numPlanes = s, + A.numIntersection = 0, + l + } + this.uniform = a, + this.numPlanes = 0, + this.numIntersection = 0, + this.init = function(A, o, n) { + var r = 0 !== A.length || o || 0 !== t || i; + return i = o, + e = c(A, n, 0), + t = A.length, + r + } + , + this.beginShadows = function() { + o = !0, + c(null) + } + , + this.endShadows = function() { + o = !1, + s() + } + , + this.setState = function(A, n, r, l, h, d) { + if (!i || null === A || 0 === A.length || o && !r) + o ? c(null) : s(); + else { + var p = o ? 0 : t + , g = 4 * p + , u = h.clippingState || null; + a.value = u, + u = c(A, l, g, d); + for (var f = 0; f !== g; ++f) + u[f] = e[f]; + h.clippingState = u, + this.numIntersection = n ? this.numPlanes : 0, + this.numPlanes += p + } + } + } + function st(A) { + var e = {}; + return { + get: function(t) { + if (void 0 !== e[t]) + return e[t]; + var i; + switch (t) { + case "WEBGL_depth_texture": + i = A.getExtension("WEBGL_depth_texture") || A.getExtension("MOZ_WEBGL_depth_texture") || A.getExtension("WEBKIT_WEBGL_depth_texture"); + break; + case "EXT_texture_filter_anisotropic": + i = A.getExtension("EXT_texture_filter_anisotropic") || A.getExtension("MOZ_EXT_texture_filter_anisotropic") || A.getExtension("WEBKIT_EXT_texture_filter_anisotropic"); + break; + case "WEBGL_compressed_texture_s3tc": + i = A.getExtension("WEBGL_compressed_texture_s3tc") || A.getExtension("MOZ_WEBGL_compressed_texture_s3tc") || A.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc"); + break; + case "WEBGL_compressed_texture_pvrtc": + i = A.getExtension("WEBGL_compressed_texture_pvrtc") || A.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc"); + break; + default: + i = A.getExtension(t) + } + return null === i && console.warn("THREE.WebGLRenderer: " + t + " extension not supported."), + e[t] = i, + i + } + } + } + function lt(A, e, t) { + var i = new WeakMap + , o = new WeakMap; + function n(A) { + var r = A.target + , a = i.get(r); + for (var s in null !== a.index && e.remove(a.index), + a.attributes) + e.remove(a.attributes[s]); + r.removeEventListener("dispose", n), + i.delete(r); + var l = o.get(a); + l && (e.remove(l), + o.delete(a)), + t.memory.geometries-- + } + function r(A) { + var t = [] + , i = A.index + , n = A.attributes.position + , r = 0; + if (null !== i) { + r = i.version; + for (var a = 0, s = (l = i.array).length; s > a; a += 3) { + t.push(c = l[a + 0], h = l[a + 1], h, d = l[a + 2], d, c) + } + } else { + var l; + r = n.version; + for (a = 0, + s = (l = n.array).length / 3 - 1; s > a; a += 3) { + var c, h, d; + t.push(c = a + 0, h = a + 1, h, d = a + 2, d, c) + } + } + var p = new (ie(t) > 65535 ? $A : XA)(t,1); + p.version = r, + e.update(p, 34963); + var g = o.get(A); + g && e.remove(g), + o.set(A, p) + } + return { + get: function(A, e) { + var o = i.get(e); + return o || (e.addEventListener("dispose", n), + e.isBufferGeometry ? o = e : e.isGeometry && (void 0 === e._bufferGeometry && (e._bufferGeometry = (new he).setFromObject(A)), + o = e._bufferGeometry), + i.set(e, o), + t.memory.geometries++, + o) + }, + update: function(A) { + var t = A.index + , i = A.attributes; + for (var o in null !== t && e.update(t, 34963), + i) + e.update(i[o], 34962); + var n = A.morphAttributes; + for (var o in n) + for (var r = n[o], a = 0, s = r.length; s > a; a++) + e.update(r[a], 34962) + }, + getWireframeAttribute: function(A) { + var e = o.get(A); + if (e) { + var t = A.index; + null !== t && t.version > e.version && r(A) + } else + r(A); + return o.get(A) + } + } + } + function ct(A, e, t, i) { + var o, n, r, a = i.isWebGL2; + this.setMode = function(A) { + o = A + } + , + this.setIndex = function(A) { + n = A.type, + r = A.bytesPerElement + } + , + this.render = function(e, i) { + A.drawElements(o, i, n, e * r), + t.update(i, o) + } + , + this.renderInstances = function(i, s, l, c) { + if (0 !== c) { + var h, d; + if (a) + h = A, + d = "drawElementsInstanced"; + else if (d = "drawElementsInstancedANGLE", + null === (h = e.get("ANGLE_instanced_arrays"))) + return void console.error("THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays."); + h[d](o, l, n, s * r, c), + t.update(l, o, c) + } + } + } + function ht(A) { + var e = { + frame: 0, + calls: 0, + triangles: 0, + points: 0, + lines: 0 + }; + return { + memory: { + geometries: 0, + textures: 0 + }, + render: e, + programs: null, + autoReset: !0, + reset: function() { + e.frame++, + e.calls = 0, + e.triangles = 0, + e.points = 0, + e.lines = 0 + }, + update: function(A, t, i) { + switch (i = i || 1, + e.calls++, + t) { + case 4: + e.triangles += i * (A / 3); + break; + case 1: + e.lines += i * (A / 2); + break; + case 3: + e.lines += i * (A - 1); + break; + case 2: + e.lines += i * A; + break; + case 0: + e.points += i * A; + break; + default: + console.error("THREE.WebGLInfo: Unknown draw mode:", t) + } + } + } + } + function dt(A, e) { + return Math.abs(e[1]) - Math.abs(A[1]) + } + function pt(A) { + var e = {} + , t = new Float32Array(8); + return { + update: function(i, o, n, r) { + var a = i.morphTargetInfluences + , s = void 0 === a ? 0 : a.length + , l = e[o.id]; + if (void 0 === l) { + l = []; + for (var c = 0; s > c; c++) + l[c] = [c, 0]; + e[o.id] = l + } + var h = n.morphTargets && o.morphAttributes.position + , d = n.morphNormals && o.morphAttributes.normal; + for (c = 0; s > c; c++) { + 0 !== (g = l[c])[1] && (h && o.deleteAttribute("morphTarget" + c), + d && o.deleteAttribute("morphNormal" + c)) + } + for (c = 0; s > c; c++) { + (g = l[c])[0] = c, + g[1] = a[c] + } + l.sort(dt); + var p = 0; + for (c = 0; 8 > c; c++) { + var g; + if (g = l[c]) { + var u = g[0] + , f = g[1]; + if (f) { + h && o.setAttribute("morphTarget" + c, h[u]), + d && o.setAttribute("morphNormal" + c, d[u]), + t[c] = f, + p += f; + continue + } + } + t[c] = 0 + } + var m = o.morphTargetsRelative ? 1 : 1 - p; + r.getUniforms().setValue(A, "morphTargetBaseInfluence", m), + r.getUniforms().setValue(A, "morphTargetInfluences", t) + } + } + } + function gt(A, e, t, i) { + var o = new WeakMap; + return { + update: function(A) { + var n = i.render.frame + , r = A.geometry + , a = e.get(A, r); + return o.get(a) !== n && (r.isGeometry && a.updateFromObject(A), + e.update(a), + o.set(a, n)), + A.isInstancedMesh && t.update(A.instanceMatrix, 34962), + a + }, + dispose: function() { + o = new WeakMap + } + } + } + function ut(A, e, t, i, o, n, r, a, s, l) { + d.call(this, A = void 0 !== A ? A : [], e = void 0 !== e ? e : 301, t, i, o, n, r = void 0 !== r ? r : 1022, a, s, l), + this.flipY = !1 + } + function ft(A, e, t, i) { + d.call(this, null), + this.image = { + data: A || null, + width: e || 1, + height: t || 1, + depth: i || 1 + }, + this.magFilter = 1003, + this.minFilter = 1003, + this.wrapR = 1001, + this.generateMipmaps = !1, + this.flipY = !1, + this.needsUpdate = !0 + } + function mt(A, e, t, i) { + d.call(this, null), + this.image = { + data: A || null, + width: e || 1, + height: t || 1, + depth: i || 1 + }, + this.magFilter = 1003, + this.minFilter = 1003, + this.wrapR = 1001, + this.generateMipmaps = !1, + this.flipY = !1, + this.needsUpdate = !0 + } + it.physical = { + uniforms: Ve([it.standard.uniforms, { + clearcoat: { + value: 0 + }, + clearcoatMap: { + value: null + }, + clearcoatRoughness: { + value: 0 + }, + clearcoatRoughnessMap: { + value: null + }, + clearcoatNormalScale: { + value: new s(1,1) + }, + clearcoatNormalMap: { + value: null + }, + sheen: { + value: new LA(0) + }, + transparency: { + value: 0 + } + }]), + vertexShader: tt.meshphysical_vert, + fragmentShader: tt.meshphysical_frag + }, + (ut.prototype = Object.create(d.prototype)).constructor = ut, + ut.prototype.isCubeTexture = !0, + Object.defineProperty(ut.prototype, "images", { + get: function() { + return this.image + }, + set: function(A) { + this.image = A + } + }), + (ft.prototype = Object.create(d.prototype)).constructor = ft, + ft.prototype.isDataTexture2DArray = !0, + (mt.prototype = Object.create(d.prototype)).constructor = mt, + mt.prototype.isDataTexture3D = !0; + var Ct = new d + , yt = new ft + , vt = new mt + , It = new ut + , Et = [] + , Bt = [] + , xt = new Float32Array(16) + , St = new Float32Array(9) + , wt = new Float32Array(4); + function Mt(A, e, t) { + var i = A[0]; + if (0 >= i || i > 0) + return A; + var o = e * t + , n = Et[o]; + if (void 0 === n && (n = new Float32Array(o), + Et[o] = n), + 0 !== e) { + i.toArray(n, 0); + for (var r = 1, a = 0; r !== e; ++r) + A[r].toArray(n, a += t) + } + return n + } + function bt(A, e) { + if (A.length !== e.length) + return !1; + for (var t = 0, i = A.length; i > t; t++) + if (A[t] !== e[t]) + return !1; + return !0 + } + function Ut(A, e) { + for (var t = 0, i = e.length; i > t; t++) + A[t] = e[t] + } + function Ft(A, e) { + var t = Bt[e]; + void 0 === t && (t = new Int32Array(e), + Bt[e] = t); + for (var i = 0; i !== e; ++i) + t[i] = A.allocateTextureUnit(); + return t + } + function Kt(A, e) { + var t = this.cache; + t[0] !== e && (A.uniform1f(this.addr, e), + t[0] = e) + } + function Qt(A, e) { + var t = this.cache; + if (void 0 !== e.x) + t[0] === e.x && t[1] === e.y || (A.uniform2f(this.addr, e.x, e.y), + t[0] = e.x, + t[1] = e.y); + else { + if (bt(t, e)) + return; + A.uniform2fv(this.addr, e), + Ut(t, e) + } + } + function Rt(A, e) { + var t = this.cache; + if (void 0 !== e.x) + t[0] === e.x && t[1] === e.y && t[2] === e.z || (A.uniform3f(this.addr, e.x, e.y, e.z), + t[0] = e.x, + t[1] = e.y, + t[2] = e.z); + else if (void 0 !== e.r) + t[0] === e.r && t[1] === e.g && t[2] === e.b || (A.uniform3f(this.addr, e.r, e.g, e.b), + t[0] = e.r, + t[1] = e.g, + t[2] = e.b); + else { + if (bt(t, e)) + return; + A.uniform3fv(this.addr, e), + Ut(t, e) + } + } + function Tt(A, e) { + var t = this.cache; + if (void 0 !== e.x) + t[0] === e.x && t[1] === e.y && t[2] === e.z && t[3] === e.w || (A.uniform4f(this.addr, e.x, e.y, e.z, e.w), + t[0] = e.x, + t[1] = e.y, + t[2] = e.z, + t[3] = e.w); + else { + if (bt(t, e)) + return; + A.uniform4fv(this.addr, e), + Ut(t, e) + } + } + function kt(A, e) { + var t = this.cache + , i = e.elements; + if (void 0 === i) { + if (bt(t, e)) + return; + A.uniformMatrix2fv(this.addr, !1, e), + Ut(t, e) + } else { + if (bt(t, i)) + return; + wt.set(i), + A.uniformMatrix2fv(this.addr, !1, wt), + Ut(t, i) + } + } + function Dt(A, e) { + var t = this.cache + , i = e.elements; + if (void 0 === i) { + if (bt(t, e)) + return; + A.uniformMatrix3fv(this.addr, !1, e), + Ut(t, e) + } else { + if (bt(t, i)) + return; + St.set(i), + A.uniformMatrix3fv(this.addr, !1, St), + Ut(t, i) + } + } + function Lt(A, e) { + var t = this.cache + , i = e.elements; + if (void 0 === i) { + if (bt(t, e)) + return; + A.uniformMatrix4fv(this.addr, !1, e), + Ut(t, e) + } else { + if (bt(t, i)) + return; + xt.set(i), + A.uniformMatrix4fv(this.addr, !1, xt), + Ut(t, i) + } + } + function Nt(A, e, t) { + var i = this.cache + , o = t.allocateTextureUnit(); + i[0] !== o && (A.uniform1i(this.addr, o), + i[0] = o), + t.safeSetTexture2D(e || Ct, o) + } + function Ot(A, e, t) { + var i = this.cache + , o = t.allocateTextureUnit(); + i[0] !== o && (A.uniform1i(this.addr, o), + i[0] = o), + t.setTexture2DArray(e || yt, o) + } + function Vt(A, e, t) { + var i = this.cache + , o = t.allocateTextureUnit(); + i[0] !== o && (A.uniform1i(this.addr, o), + i[0] = o), + t.setTexture3D(e || vt, o) + } + function Gt(A, e, t) { + var i = this.cache + , o = t.allocateTextureUnit(); + i[0] !== o && (A.uniform1i(this.addr, o), + i[0] = o), + t.safeSetTextureCube(e || It, o) + } + function Pt(A, e) { + var t = this.cache; + t[0] !== e && (A.uniform1i(this.addr, e), + t[0] = e) + } + function qt(A, e) { + var t = this.cache; + bt(t, e) || (A.uniform2iv(this.addr, e), + Ut(t, e)) + } + function jt(A, e) { + var t = this.cache; + bt(t, e) || (A.uniform3iv(this.addr, e), + Ut(t, e)) + } + function Ht(A, e) { + var t = this.cache; + bt(t, e) || (A.uniform4iv(this.addr, e), + Ut(t, e)) + } + function Yt(A, e) { + var t = this.cache; + t[0] !== e && (A.uniform1ui(this.addr, e), + t[0] = e) + } + function Wt(A, e) { + A.uniform1fv(this.addr, e) + } + function Jt(A, e) { + A.uniform1iv(this.addr, e) + } + function zt(A, e) { + A.uniform2iv(this.addr, e) + } + function Zt(A, e) { + A.uniform3iv(this.addr, e) + } + function Xt(A, e) { + A.uniform4iv(this.addr, e) + } + function _t(A, e) { + var t = Mt(e, this.size, 2); + A.uniform2fv(this.addr, t) + } + function $t(A, e) { + var t = Mt(e, this.size, 3); + A.uniform3fv(this.addr, t) + } + function Ai(A, e) { + var t = Mt(e, this.size, 4); + A.uniform4fv(this.addr, t) + } + function ei(A, e) { + var t = Mt(e, this.size, 4); + A.uniformMatrix2fv(this.addr, !1, t) + } + function ti(A, e) { + var t = Mt(e, this.size, 9); + A.uniformMatrix3fv(this.addr, !1, t) + } + function ii(A, e) { + var t = Mt(e, this.size, 16); + A.uniformMatrix4fv(this.addr, !1, t) + } + function oi(A, e, t) { + var i = e.length + , o = Ft(t, i); + A.uniform1iv(this.addr, o); + for (var n = 0; n !== i; ++n) + t.safeSetTexture2D(e[n] || Ct, o[n]) + } + function ni(A, e, t) { + var i = e.length + , o = Ft(t, i); + A.uniform1iv(this.addr, o); + for (var n = 0; n !== i; ++n) + t.safeSetTextureCube(e[n] || It, o[n]) + } + function ri(A, e, t) { + this.id = A, + this.addr = t, + this.cache = [], + this.setValue = function(A) { + switch (A) { + case 5126: + return Kt; + case 35664: + return Qt; + case 35665: + return Rt; + case 35666: + return Tt; + case 35674: + return kt; + case 35675: + return Dt; + case 35676: + return Lt; + case 5124: + case 35670: + return Pt; + case 35667: + case 35671: + return qt; + case 35668: + case 35672: + return jt; + case 35669: + case 35673: + return Ht; + case 5125: + return Yt; + case 35678: + case 36198: + case 36298: + case 36306: + case 35682: + return Nt; + case 35679: + case 36299: + case 36307: + return Vt; + case 35680: + case 36300: + case 36308: + case 36293: + return Gt; + case 36289: + case 36303: + case 36311: + case 36292: + return Ot + } + }(e.type) + } + function ai(A, e, t) { + this.id = A, + this.addr = t, + this.cache = [], + this.size = e.size, + this.setValue = function(A) { + switch (A) { + case 5126: + return Wt; + case 35664: + return _t; + case 35665: + return $t; + case 35666: + return Ai; + case 35674: + return ei; + case 35675: + return ti; + case 35676: + return ii; + case 5124: + case 35670: + return Jt; + case 35667: + case 35671: + return zt; + case 35668: + case 35672: + return Zt; + case 35669: + case 35673: + return Xt; + case 35678: + case 36198: + case 36298: + case 36306: + case 35682: + return oi; + case 35680: + case 36300: + case 36308: + case 36293: + return ni + } + }(e.type) + } + function si(A) { + this.id = A, + this.seq = [], + this.map = {} + } + ai.prototype.updateCache = function(A) { + var e = this.cache; + A instanceof Float32Array && e.length !== A.length && (this.cache = new Float32Array(A.length)), + Ut(e, A) + } + , + si.prototype.setValue = function(A, e, t) { + for (var i = this.seq, o = 0, n = i.length; o !== n; ++o) { + var r = i[o]; + r.setValue(A, e[r.id], t) + } + } + ; + var li = /([\w\d_]+)(\])?(\[|\.)?/g; + function ci(A, e) { + A.seq.push(e), + A.map[e.id] = e + } + function hi(A, e, t) { + var i = A.name + , o = i.length; + for (li.lastIndex = 0; ; ) { + var n = li.exec(i) + , r = n[1] + , a = n[3]; + if ("]" === n[2] && (r |= 0), + void 0 === a || "[" === a && li.lastIndex + 2 === o) { + ci(t, void 0 === a ? new ri(r,A,e) : new ai(r,A,e)); + break + } + var s = t.map[r]; + void 0 === s && ci(t, s = new si(r)), + t = s + } + } + function di(A, e) { + this.seq = [], + this.map = {}; + for (var t = A.getProgramParameter(e, 35718), i = 0; t > i; ++i) { + var o = A.getActiveUniform(e, i); + hi(o, A.getUniformLocation(e, o.name), this) + } + } + function pi(A, e, t) { + var i = A.createShader(e); + return A.shaderSource(i, t), + A.compileShader(i), + i + } + di.prototype.setValue = function(A, e, t, i) { + var o = this.map[e]; + void 0 !== o && o.setValue(A, t, i) + } + , + di.prototype.setOptional = function(A, e, t) { + var i = e[t]; + void 0 !== i && this.setValue(A, t, i) + } + , + di.upload = function(A, e, t, i) { + for (var o = 0, n = e.length; o !== n; ++o) { + var r = e[o] + , a = t[r.id]; + !1 !== a.needsUpdate && r.setValue(A, a.value, i) + } + } + , + di.seqWithValue = function(A, e) { + for (var t = [], i = 0, o = A.length; i !== o; ++i) { + var n = A[i]; + n.id in e && t.push(n) + } + return t + } + ; + var gi = 0; + function ui(A) { + switch (A) { + case 3e3: + return ["Linear", "( value )"]; + case 3001: + return ["sRGB", "( value )"]; + case 3002: + return ["RGBE", "( value )"]; + case 3004: + return ["RGBM", "( value, 7.0 )"]; + case 3005: + return ["RGBM", "( value, 16.0 )"]; + case 3006: + return ["RGBD", "( value, 256.0 )"]; + case 3007: + return ["Gamma", "( value, float( GAMMA_FACTOR ) )"]; + case 3003: + return ["LogLuv", "( value )"]; + default: + throw new Error("unsupported encoding: " + A) + } + } + function fi(A, e, t) { + var i = A.getShaderParameter(e, 35713) + , o = A.getShaderInfoLog(e).trim(); + return i && "" === o ? "" : "THREE.WebGLShader: gl.getShaderInfoLog() " + t + "\n" + o + function(A) { + for (var e = A.split("\n"), t = 0; e.length > t; t++) + e[t] = t + 1 + ": " + e[t]; + return e.join("\n") + }(A.getShaderSource(e)) + } + function mi(A, e) { + var t = ui(e); + return "vec4 " + A + "( vec4 value ) { return " + t[0] + "ToLinear" + t[1] + "; }" + } + function Ci(A, e) { + var t; + switch (e) { + case 1: + t = "Linear"; + break; + case 2: + t = "Reinhard"; + break; + case 3: + t = "Uncharted2"; + break; + case 4: + t = "OptimizedCineon"; + break; + case 5: + t = "ACESFilmic"; + break; + default: + throw new Error("unsupported toneMapping: " + e) + } + return "vec3 " + A + "( vec3 color ) { return " + t + "ToneMapping( color ); }" + } + function yi(A) { + return "" !== A + } + function vi(A, e) { + return A.replace(/NUM_DIR_LIGHTS/g, e.numDirLights).replace(/NUM_SPOT_LIGHTS/g, e.numSpotLights).replace(/NUM_RECT_AREA_LIGHTS/g, e.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g, e.numPointLights).replace(/NUM_HEMI_LIGHTS/g, e.numHemiLights).replace(/NUM_DIR_LIGHT_SHADOWS/g, e.numDirLightShadows).replace(/NUM_SPOT_LIGHT_SHADOWS/g, e.numSpotLightShadows).replace(/NUM_POINT_LIGHT_SHADOWS/g, e.numPointLightShadows) + } + function Ii(A, e) { + return A.replace(/NUM_CLIPPING_PLANES/g, e.numClippingPlanes).replace(/UNION_CLIPPING_PLANES/g, e.numClippingPlanes - e.numClipIntersection) + } + var Ei = /^[ \t]*#include +<([\w\d./]+)>/gm; + function Bi(A) { + return A.replace(Ei, xi) + } + function xi(A, e) { + var t = tt[e]; + if (void 0 === t) + throw new Error("Can not resolve #include <" + e + ">"); + return Bi(t) + } + var Si = /#pragma unroll_loop[\s]+?for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g + , wi = /#pragma unroll_loop_start[\s]+?for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}[\s]+?#pragma unroll_loop_end/g; + function Mi(A) { + return A.replace(wi, Ui).replace(Si, bi) + } + function bi(A, e, t, i) { + return console.warn("WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead."), + Ui(A, e, t, i) + } + function Ui(A, e, t, i) { + for (var o = "", n = parseInt(e); n < parseInt(t); n++) + o += i.replace(/\[ i \]/g, "[ " + n + " ]").replace(/UNROLLED_LOOP_INDEX/g, n); + return o + } + function Fi(A) { + var e = "precision " + A.precision + " float;\nprecision " + A.precision + " int;"; + return "highp" === A.precision ? e += "\n#define HIGH_PRECISION" : "mediump" === A.precision ? e += "\n#define MEDIUM_PRECISION" : "lowp" === A.precision && (e += "\n#define LOW_PRECISION"), + e + } + function Ki(A, e, t) { + var i, o, n, r, a, s = A.getContext(), l = t.defines, c = t.vertexShader, h = t.fragmentShader, d = function(A) { + var e = "SHADOWMAP_TYPE_BASIC"; + return 1 === A.shadowMapType ? e = "SHADOWMAP_TYPE_PCF" : 2 === A.shadowMapType ? e = "SHADOWMAP_TYPE_PCF_SOFT" : 3 === A.shadowMapType && (e = "SHADOWMAP_TYPE_VSM"), + e + }(t), p = function(A) { + var e = "ENVMAP_TYPE_CUBE"; + if (A.envMap) + switch (A.envMapMode) { + case 301: + case 302: + e = "ENVMAP_TYPE_CUBE"; + break; + case 306: + case 307: + e = "ENVMAP_TYPE_CUBE_UV"; + break; + case 303: + case 304: + e = "ENVMAP_TYPE_EQUIREC"; + break; + case 305: + e = "ENVMAP_TYPE_SPHERE" + } + return e + }(t), g = function(A) { + var e = "ENVMAP_MODE_REFLECTION"; + if (A.envMap) + switch (A.envMapMode) { + case 302: + case 304: + e = "ENVMAP_MODE_REFRACTION" + } + return e + }(t), u = function(A) { + var e = "ENVMAP_BLENDING_NONE"; + if (A.envMap) + switch (A.combine) { + case 0: + e = "ENVMAP_BLENDING_MULTIPLY"; + break; + case 1: + e = "ENVMAP_BLENDING_MIX"; + break; + case 2: + e = "ENVMAP_BLENDING_ADD" + } + return e + }(t), f = A.gammaFactor > 0 ? A.gammaFactor : 1, m = t.isWebGL2 ? "" : function(A) { + return [A.extensionDerivatives || A.envMapCubeUV || A.bumpMap || A.tangentSpaceNormalMap || A.clearcoatNormalMap || A.flatShading || "physical" === A.shaderID ? "#extension GL_OES_standard_derivatives : enable" : "", (A.extensionFragDepth || A.logarithmicDepthBuffer) && A.rendererExtensionFragDepth ? "#extension GL_EXT_frag_depth : enable" : "", A.extensionDrawBuffers && A.rendererExtensionDrawBuffers ? "#extension GL_EXT_draw_buffers : require" : "", (A.extensionShaderTextureLOD || A.envMap) && A.rendererExtensionShaderTextureLod ? "#extension GL_EXT_shader_texture_lod : enable" : ""].filter(yi).join("\n") + }(t), C = function(A) { + var e = []; + for (var t in A) { + var i = A[t]; + !1 !== i && e.push("#define " + t + " " + i) + } + return e.join("\n") + }(l), y = s.createProgram(); + if (t.isRawShaderMaterial ? ((i = [C].filter(yi).join("\n")).length > 0 && (i += "\n"), + (o = [m, C].filter(yi).join("\n")).length > 0 && (o += "\n")) : (i = [Fi(t), "#define SHADER_NAME " + t.shaderName, C, t.instancing ? "#define USE_INSTANCING" : "", t.supportsVertexTextures ? "#define VERTEX_TEXTURES" : "", "#define GAMMA_FACTOR " + f, "#define MAX_BONES " + t.maxBones, t.useFog && t.fog ? "#define USE_FOG" : "", t.useFog && t.fogExp2 ? "#define FOG_EXP2" : "", t.map ? "#define USE_MAP" : "", t.envMap ? "#define USE_ENVMAP" : "", t.envMap ? "#define " + g : "", t.lightMap ? "#define USE_LIGHTMAP" : "", t.aoMap ? "#define USE_AOMAP" : "", t.emissiveMap ? "#define USE_EMISSIVEMAP" : "", t.bumpMap ? "#define USE_BUMPMAP" : "", t.normalMap ? "#define USE_NORMALMAP" : "", t.normalMap && t.objectSpaceNormalMap ? "#define OBJECTSPACE_NORMALMAP" : "", t.normalMap && t.tangentSpaceNormalMap ? "#define TANGENTSPACE_NORMALMAP" : "", t.clearcoatMap ? "#define USE_CLEARCOATMAP" : "", t.clearcoatRoughnessMap ? "#define USE_CLEARCOAT_ROUGHNESSMAP" : "", t.clearcoatNormalMap ? "#define USE_CLEARCOAT_NORMALMAP" : "", t.displacementMap && t.supportsVertexTextures ? "#define USE_DISPLACEMENTMAP" : "", t.specularMap ? "#define USE_SPECULARMAP" : "", t.roughnessMap ? "#define USE_ROUGHNESSMAP" : "", t.metalnessMap ? "#define USE_METALNESSMAP" : "", t.alphaMap ? "#define USE_ALPHAMAP" : "", t.vertexTangents ? "#define USE_TANGENT" : "", t.vertexColors ? "#define USE_COLOR" : "", t.vertexUvs ? "#define USE_UV" : "", t.uvsVertexOnly ? "#define UVS_VERTEX_ONLY" : "", t.flatShading ? "#define FLAT_SHADED" : "", t.skinning ? "#define USE_SKINNING" : "", t.useVertexTexture ? "#define BONE_TEXTURE" : "", t.morphTargets ? "#define USE_MORPHTARGETS" : "", t.morphNormals && !1 === t.flatShading ? "#define USE_MORPHNORMALS" : "", t.doubleSided ? "#define DOUBLE_SIDED" : "", t.flipSided ? "#define FLIP_SIDED" : "", t.shadowMapEnabled ? "#define USE_SHADOWMAP" : "", t.shadowMapEnabled ? "#define " + d : "", t.sizeAttenuation ? "#define USE_SIZEATTENUATION" : "", t.logarithmicDepthBuffer ? "#define USE_LOGDEPTHBUF" : "", t.logarithmicDepthBuffer && t.rendererExtensionFragDepth ? "#define USE_LOGDEPTHBUF_EXT" : "", "uniform mat4 modelMatrix;", "uniform mat4 modelViewMatrix;", "uniform mat4 projectionMatrix;", "uniform mat4 viewMatrix;", "uniform mat3 normalMatrix;", "uniform vec3 cameraPosition;", "uniform bool isOrthographic;", "#ifdef USE_INSTANCING", " attribute mat4 instanceMatrix;", "#endif", "attribute vec3 position;", "attribute vec3 normal;", "attribute vec2 uv;", "#ifdef USE_TANGENT", "\tattribute vec4 tangent;", "#endif", "#ifdef USE_COLOR", "\tattribute vec3 color;", "#endif", "#ifdef USE_MORPHTARGETS", "\tattribute vec3 morphTarget0;", "\tattribute vec3 morphTarget1;", "\tattribute vec3 morphTarget2;", "\tattribute vec3 morphTarget3;", "\t#ifdef USE_MORPHNORMALS", "\t\tattribute vec3 morphNormal0;", "\t\tattribute vec3 morphNormal1;", "\t\tattribute vec3 morphNormal2;", "\t\tattribute vec3 morphNormal3;", "\t#else", "\t\tattribute vec3 morphTarget4;", "\t\tattribute vec3 morphTarget5;", "\t\tattribute vec3 morphTarget6;", "\t\tattribute vec3 morphTarget7;", "\t#endif", "#endif", "#ifdef USE_SKINNING", "\tattribute vec4 skinIndex;", "\tattribute vec4 skinWeight;", "#endif", "\n"].filter(yi).join("\n"), + o = [m, Fi(t), "#define SHADER_NAME " + t.shaderName, C, t.alphaTest ? "#define ALPHATEST " + t.alphaTest + (t.alphaTest % 1 ? "" : ".0") : "", "#define GAMMA_FACTOR " + f, t.useFog && t.fog ? "#define USE_FOG" : "", t.useFog && t.fogExp2 ? "#define FOG_EXP2" : "", t.map ? "#define USE_MAP" : "", t.matcap ? "#define USE_MATCAP" : "", t.envMap ? "#define USE_ENVMAP" : "", t.envMap ? "#define " + p : "", t.envMap ? "#define " + g : "", t.envMap ? "#define " + u : "", t.lightMap ? "#define USE_LIGHTMAP" : "", t.aoMap ? "#define USE_AOMAP" : "", t.emissiveMap ? "#define USE_EMISSIVEMAP" : "", t.bumpMap ? "#define USE_BUMPMAP" : "", t.normalMap ? "#define USE_NORMALMAP" : "", t.normalMap && t.objectSpaceNormalMap ? "#define OBJECTSPACE_NORMALMAP" : "", t.normalMap && t.tangentSpaceNormalMap ? "#define TANGENTSPACE_NORMALMAP" : "", t.clearcoatMap ? "#define USE_CLEARCOATMAP" : "", t.clearcoatRoughnessMap ? "#define USE_CLEARCOAT_ROUGHNESSMAP" : "", t.clearcoatNormalMap ? "#define USE_CLEARCOAT_NORMALMAP" : "", t.specularMap ? "#define USE_SPECULARMAP" : "", t.roughnessMap ? "#define USE_ROUGHNESSMAP" : "", t.metalnessMap ? "#define USE_METALNESSMAP" : "", t.alphaMap ? "#define USE_ALPHAMAP" : "", t.sheen ? "#define USE_SHEEN" : "", t.vertexTangents ? "#define USE_TANGENT" : "", t.vertexColors ? "#define USE_COLOR" : "", t.vertexUvs ? "#define USE_UV" : "", t.uvsVertexOnly ? "#define UVS_VERTEX_ONLY" : "", t.gradientMap ? "#define USE_GRADIENTMAP" : "", t.flatShading ? "#define FLAT_SHADED" : "", t.doubleSided ? "#define DOUBLE_SIDED" : "", t.flipSided ? "#define FLIP_SIDED" : "", t.shadowMapEnabled ? "#define USE_SHADOWMAP" : "", t.shadowMapEnabled ? "#define " + d : "", t.premultipliedAlpha ? "#define PREMULTIPLIED_ALPHA" : "", t.physicallyCorrectLights ? "#define PHYSICALLY_CORRECT_LIGHTS" : "", t.logarithmicDepthBuffer ? "#define USE_LOGDEPTHBUF" : "", t.logarithmicDepthBuffer && t.rendererExtensionFragDepth ? "#define USE_LOGDEPTHBUF_EXT" : "", (t.extensionShaderTextureLOD || t.envMap) && t.rendererExtensionShaderTextureLod ? "#define TEXTURE_LOD_EXT" : "", "uniform mat4 viewMatrix;", "uniform vec3 cameraPosition;", "uniform bool isOrthographic;", 0 !== t.toneMapping ? "#define TONE_MAPPING" : "", 0 !== t.toneMapping ? tt.tonemapping_pars_fragment : "", 0 !== t.toneMapping ? Ci("toneMapping", t.toneMapping) : "", t.dithering ? "#define DITHERING" : "", t.outputEncoding || t.mapEncoding || t.matcapEncoding || t.envMapEncoding || t.emissiveMapEncoding || t.lightMapEncoding ? tt.encodings_pars_fragment : "", t.mapEncoding ? mi("mapTexelToLinear", t.mapEncoding) : "", t.matcapEncoding ? mi("matcapTexelToLinear", t.matcapEncoding) : "", t.envMapEncoding ? mi("envMapTexelToLinear", t.envMapEncoding) : "", t.emissiveMapEncoding ? mi("emissiveMapTexelToLinear", t.emissiveMapEncoding) : "", t.lightMapEncoding ? mi("lightMapTexelToLinear", t.lightMapEncoding) : "", t.outputEncoding ? (n = "linearToOutputTexel", + r = t.outputEncoding, + a = ui(r), + "vec4 " + n + "( vec4 value ) { return LinearTo" + a[0] + a[1] + "; }") : "", t.depthPacking ? "#define DEPTH_PACKING " + t.depthPacking : "", "\n"].filter(yi).join("\n")), + c = Ii(c = vi(c = Bi(c), t), t), + h = Ii(h = vi(h = Bi(h), t), t), + c = Mi(c), + h = Mi(h), + t.isWebGL2 && !t.isRawShaderMaterial) { + var v = !1 + , I = /^\s*#version\s+300\s+es\s*\n/; + t.isShaderMaterial && null !== c.match(I) && null !== h.match(I) && (v = !0, + c = c.replace(I, ""), + h = h.replace(I, "")), + i = ["#version 300 es\n", "#define attribute in", "#define varying out", "#define texture2D texture"].join("\n") + "\n" + i, + o = ["#version 300 es\n", "#define varying in", v ? "" : "out highp vec4 pc_fragColor;", v ? "" : "#define gl_FragColor pc_fragColor", "#define gl_FragDepthEXT gl_FragDepth", "#define texture2D texture", "#define textureCube texture", "#define texture2DProj textureProj", "#define texture2DLodEXT textureLod", "#define texture2DProjLodEXT textureProjLod", "#define textureCubeLodEXT textureLod", "#define texture2DGradEXT textureGrad", "#define texture2DProjGradEXT textureProjGrad", "#define textureCubeGradEXT textureGrad"].join("\n") + "\n" + o + } + var E, B, x = o + h, S = pi(s, 35633, i + c), w = pi(s, 35632, x); + if (s.attachShader(y, S), + s.attachShader(y, w), + void 0 !== t.index0AttributeName ? s.bindAttribLocation(y, 0, t.index0AttributeName) : !0 === t.morphTargets && s.bindAttribLocation(y, 0, "position"), + s.linkProgram(y), + A.debug.checkShaderErrors) { + var M = s.getProgramInfoLog(y).trim() + , b = s.getShaderInfoLog(S).trim() + , U = s.getShaderInfoLog(w).trim() + , F = !0 + , K = !0; + if (!1 === s.getProgramParameter(y, 35714)) { + F = !1; + var Q = fi(s, S, "vertex") + , R = fi(s, w, "fragment"); + console.error("THREE.WebGLProgram: shader error: ", s.getError(), "35715", s.getProgramParameter(y, 35715), "gl.getProgramInfoLog", M, Q, R) + } else + "" !== M ? console.warn("THREE.WebGLProgram: gl.getProgramInfoLog()", M) : "" !== b && "" !== U || (K = !1); + K && (this.diagnostics = { + runnable: F, + programLog: M, + vertexShader: { + log: b, + prefix: i + }, + fragmentShader: { + log: U, + prefix: o + } + }) + } + return s.detachShader(y, S), + s.detachShader(y, w), + s.deleteShader(S), + s.deleteShader(w), + this.getUniforms = function() { + return void 0 === E && (E = new di(s,y)), + E + } + , + this.getAttributes = function() { + return void 0 === B && (B = function(A, e) { + for (var t = {}, i = A.getProgramParameter(e, 35721), o = 0; i > o; o++) { + var n = A.getActiveAttrib(e, o).name; + t[n] = A.getAttribLocation(e, n) + } + return t + }(s, y)), + B + } + , + this.destroy = function() { + s.deleteProgram(y), + this.program = void 0 + } + , + this.name = t.shaderName, + this.id = gi++, + this.cacheKey = e, + this.usedTimes = 1, + this.program = y, + this.vertexShader = S, + this.fragmentShader = w, + this + } + function Qi(A, e, t) { + var i = [] + , o = t.isWebGL2 + , n = t.logarithmicDepthBuffer + , r = t.floatVertexTextures + , a = t.precision + , s = t.maxVertexUniforms + , l = t.vertexTextures + , c = { + MeshDepthMaterial: "depth", + MeshDistanceMaterial: "distanceRGBA", + MeshNormalMaterial: "normal", + MeshBasicMaterial: "basic", + MeshLambertMaterial: "lambert", + MeshPhongMaterial: "phong", + MeshToonMaterial: "toon", + MeshStandardMaterial: "physical", + MeshPhysicalMaterial: "physical", + MeshMatcapMaterial: "matcap", + LineBasicMaterial: "basic", + LineDashedMaterial: "dashed", + PointsMaterial: "points", + ShadowMaterial: "shadow", + SpriteMaterial: "sprite" + } + , h = ["precision", "isWebGL2", "supportsVertexTextures", "outputEncoding", "instancing", "map", "mapEncoding", "matcap", "matcapEncoding", "envMap", "envMapMode", "envMapEncoding", "envMapCubeUV", "lightMap", "lightMapEncoding", "aoMap", "emissiveMap", "emissiveMapEncoding", "bumpMap", "normalMap", "objectSpaceNormalMap", "tangentSpaceNormalMap", "clearcoatMap", "clearcoatRoughnessMap", "clearcoatNormalMap", "displacementMap", "specularMap", "roughnessMap", "metalnessMap", "gradientMap", "alphaMap", "combine", "vertexColors", "vertexTangents", "vertexUvs", "uvsVertexOnly", "fog", "useFog", "fogExp2", "flatShading", "sizeAttenuation", "logarithmicDepthBuffer", "skinning", "maxBones", "useVertexTexture", "morphTargets", "morphNormals", "maxMorphTargets", "maxMorphNormals", "premultipliedAlpha", "numDirLights", "numPointLights", "numSpotLights", "numHemiLights", "numRectAreaLights", "numDirLightShadows", "numPointLightShadows", "numSpotLightShadows", "shadowMapEnabled", "shadowMapType", "toneMapping", "physicallyCorrectLights", "alphaTest", "doubleSided", "flipSided", "numClippingPlanes", "numClipIntersection", "depthPacking", "dithering", "sheen"]; + function d(A) { + var e; + return A ? A.isTexture ? e = A.encoding : A.isWebGLRenderTarget && (console.warn("THREE.WebGLPrograms.getTextureEncodingFromMap: don't use render targets as textures. Use their .texture property instead."), + e = A.texture.encoding) : e = 3e3, + e + } + this.getParameters = function(i, h, p, g, u, f, m) { + var C = g.fog + , y = i.envMap || (i.isMeshStandardMaterial ? g.environment : null) + , v = c[i.type] + , I = m.isSkinnedMesh ? function(A) { + var e = A.skeleton.bones; + if (r) + return 1024; + var t = Math.floor((s - 20) / 4) + , i = Math.min(t, e.length); + return e.length > i ? (console.warn("THREE.WebGLRenderer: Skeleton has " + e.length + " bones. This GPU supports " + i + "."), + 0) : i + }(m) : 0; + null !== i.precision && (a = t.getMaxPrecision(i.precision)) !== i.precision && console.warn("THREE.WebGLProgram.getParameters:", i.precision, "not supported, using", a, "instead."); + var E = function(A, e) { + var t; + if (e) { + var i = it[e]; + t = { + name: A.type, + uniforms: Ge.clone(i.uniforms), + vertexShader: i.vertexShader, + fragmentShader: i.fragmentShader + } + } else + t = { + name: A.type, + uniforms: A.uniforms, + vertexShader: A.vertexShader, + fragmentShader: A.fragmentShader + }; + return t + }(i, v); + i.onBeforeCompile(E, A); + var B = A.getRenderTarget(); + return { + isWebGL2: o, + shaderID: v, + shaderName: E.name, + uniforms: E.uniforms, + vertexShader: E.vertexShader, + fragmentShader: E.fragmentShader, + defines: i.defines, + isRawShaderMaterial: i.isRawShaderMaterial, + isShaderMaterial: i.isShaderMaterial, + precision: a, + instancing: !0 === m.isInstancedMesh, + supportsVertexTextures: l, + outputEncoding: null !== B ? d(B.texture) : A.outputEncoding, + map: !!i.map, + mapEncoding: d(i.map), + matcap: !!i.matcap, + matcapEncoding: d(i.matcap), + envMap: !!y, + envMapMode: y && y.mapping, + envMapEncoding: d(y), + envMapCubeUV: !!y && (306 === y.mapping || 307 === y.mapping), + lightMap: !!i.lightMap, + lightMapEncoding: d(i.lightMap), + aoMap: !!i.aoMap, + emissiveMap: !!i.emissiveMap, + emissiveMapEncoding: d(i.emissiveMap), + bumpMap: !!i.bumpMap, + normalMap: !!i.normalMap, + objectSpaceNormalMap: 1 === i.normalMapType, + tangentSpaceNormalMap: 0 === i.normalMapType, + clearcoatMap: !!i.clearcoatMap, + clearcoatRoughnessMap: !!i.clearcoatRoughnessMap, + clearcoatNormalMap: !!i.clearcoatNormalMap, + displacementMap: !!i.displacementMap, + roughnessMap: !!i.roughnessMap, + metalnessMap: !!i.metalnessMap, + specularMap: !!i.specularMap, + alphaMap: !!i.alphaMap, + gradientMap: !!i.gradientMap, + sheen: !!i.sheen, + combine: i.combine, + vertexTangents: i.normalMap && i.vertexTangents, + vertexColors: i.vertexColors, + vertexUvs: !!(i.map || i.bumpMap || i.normalMap || i.specularMap || i.alphaMap || i.emissiveMap || i.roughnessMap || i.metalnessMap || i.clearcoatMap || i.clearcoatRoughnessMap || i.clearcoatNormalMap || i.displacementMap), + uvsVertexOnly: !(i.map || i.bumpMap || i.normalMap || i.specularMap || i.alphaMap || i.emissiveMap || i.roughnessMap || i.metalnessMap || i.clearcoatNormalMap || !i.displacementMap), + fog: !!C, + useFog: i.fog, + fogExp2: C && C.isFogExp2, + flatShading: i.flatShading, + sizeAttenuation: i.sizeAttenuation, + logarithmicDepthBuffer: n, + skinning: i.skinning && I > 0, + maxBones: I, + useVertexTexture: r, + morphTargets: i.morphTargets, + morphNormals: i.morphNormals, + maxMorphTargets: A.maxMorphTargets, + maxMorphNormals: A.maxMorphNormals, + numDirLights: h.directional.length, + numPointLights: h.point.length, + numSpotLights: h.spot.length, + numRectAreaLights: h.rectArea.length, + numHemiLights: h.hemi.length, + numDirLightShadows: h.directionalShadowMap.length, + numPointLightShadows: h.pointShadowMap.length, + numSpotLightShadows: h.spotShadowMap.length, + numClippingPlanes: u, + numClipIntersection: f, + dithering: i.dithering, + shadowMapEnabled: A.shadowMap.enabled && p.length > 0, + shadowMapType: A.shadowMap.type, + toneMapping: i.toneMapped ? A.toneMapping : 0, + physicallyCorrectLights: A.physicallyCorrectLights, + premultipliedAlpha: i.premultipliedAlpha, + alphaTest: i.alphaTest, + doubleSided: 2 === i.side, + flipSided: 1 === i.side, + depthPacking: void 0 !== i.depthPacking && i.depthPacking, + index0AttributeName: i.index0AttributeName, + extensionDerivatives: i.extensions && i.extensions.derivatives, + extensionFragDepth: i.extensions && i.extensions.fragDepth, + extensionDrawBuffers: i.extensions && i.extensions.drawBuffers, + extensionShaderTextureLOD: i.extensions && i.extensions.shaderTextureLOD, + rendererExtensionFragDepth: o || null !== e.get("EXT_frag_depth"), + rendererExtensionDrawBuffers: o || null !== e.get("WEBGL_draw_buffers"), + rendererExtensionShaderTextureLod: o || null !== e.get("EXT_shader_texture_lod"), + onBeforeCompile: i.onBeforeCompile + } + } + , + this.getProgramCacheKey = function(e) { + var t = []; + if (e.shaderID ? t.push(e.shaderID) : (t.push(e.fragmentShader), + t.push(e.vertexShader)), + void 0 !== e.defines) + for (var i in e.defines) + t.push(i), + t.push(e.defines[i]); + if (void 0 === e.isRawShaderMaterial) { + for (var o = 0; h.length > o; o++) + t.push(e[h[o]]); + t.push(A.outputEncoding), + t.push(A.gammaFactor) + } + return t.push(e.onBeforeCompile.toString()), + t.join() + } + , + this.acquireProgram = function(e, t) { + for (var o, n = 0, r = i.length; r > n; n++) { + var a = i[n]; + if (a.cacheKey === t) { + ++(o = a).usedTimes; + break + } + } + return void 0 === o && (o = new Ki(A,t,e), + i.push(o)), + o + } + , + this.releaseProgram = function(A) { + if (0 == --A.usedTimes) { + var e = i.indexOf(A); + i[e] = i[i.length - 1], + i.pop(), + A.destroy() + } + } + , + this.programs = i + } + function Ri() { + var A = new WeakMap; + return { + get: function(e) { + var t = A.get(e); + return void 0 === t && A.set(e, t = {}), + t + }, + remove: function(e) { + A.delete(e) + }, + update: function(e, t, i) { + A.get(e)[t] = i + }, + dispose: function() { + A = new WeakMap + } + } + } + function Ti(A, e) { + return A.groupOrder !== e.groupOrder ? A.groupOrder - e.groupOrder : A.renderOrder !== e.renderOrder ? A.renderOrder - e.renderOrder : A.program !== e.program ? A.program.id - e.program.id : A.material.id !== e.material.id ? A.material.id - e.material.id : A.z !== e.z ? A.z - e.z : A.id - e.id + } + function ki(A, e) { + return A.groupOrder !== e.groupOrder ? A.groupOrder - e.groupOrder : A.renderOrder !== e.renderOrder ? A.renderOrder - e.renderOrder : A.z !== e.z ? e.z - A.z : A.id - e.id + } + function Di() { + var A = [] + , e = 0 + , t = [] + , i = [] + , o = { + id: -1 + }; + function n(t, i, n, r, a, s) { + var l = A[e]; + return void 0 === l ? A[e] = l = { + id: t.id, + object: t, + geometry: i, + material: n, + program: n.program || o, + groupOrder: r, + renderOrder: t.renderOrder, + z: a, + group: s + } : (l.id = t.id, + l.object = t, + l.geometry = i, + l.material = n, + l.program = n.program || o, + l.groupOrder = r, + l.renderOrder = t.renderOrder, + l.z = a, + l.group = s), + e++, + l + } + return { + opaque: t, + transparent: i, + init: function() { + e = 0, + t.length = 0, + i.length = 0 + }, + push: function(A, e, o, r, a, s) { + var l = n(A, e, o, r, a, s); + (!0 === o.transparent ? i : t).push(l) + }, + unshift: function(A, e, o, r, a, s) { + var l = n(A, e, o, r, a, s); + (!0 === o.transparent ? i : t).unshift(l) + }, + finish: function() { + for (var t = e, i = A.length; i > t; t++) { + var o = A[t]; + if (null === o.id) + break; + o.id = null, + o.object = null, + o.geometry = null, + o.material = null, + o.program = null, + o.group = null + } + }, + sort: function(A, e) { + t.length > 1 && t.sort(A || Ti), + i.length > 1 && i.sort(e || ki) + } + } + } + function Li() { + var A = new WeakMap; + function e(t) { + var i = t.target; + i.removeEventListener("dispose", e), + A.delete(i) + } + return { + get: function(t, i) { + var o, n = A.get(t); + return void 0 === n ? (o = new Di, + A.set(t, new WeakMap), + A.get(t).set(i, o), + t.addEventListener("dispose", e)) : void 0 === (o = n.get(i)) && (o = new Di, + n.set(i, o)), + o + }, + dispose: function() { + A = new WeakMap + } + } + } + function Ni() { + var A = {}; + return { + get: function(e) { + if (void 0 !== A[e.id]) + return A[e.id]; + var t; + switch (e.type) { + case "DirectionalLight": + t = { + direction: new y, + color: new LA + }; + break; + case "SpotLight": + t = { + position: new y, + direction: new y, + color: new LA, + distance: 0, + coneCos: 0, + penumbraCos: 0, + decay: 0 + }; + break; + case "PointLight": + t = { + position: new y, + color: new LA, + distance: 0, + decay: 0 + }; + break; + case "HemisphereLight": + t = { + direction: new y, + skyColor: new LA, + groundColor: new LA + }; + break; + case "RectAreaLight": + t = { + color: new LA, + position: new y, + halfWidth: new y, + halfHeight: new y + } + } + return A[e.id] = t, + t + } + } + } + var Oi = 0; + function Vi(A, e) { + return (e.castShadow ? 1 : 0) - (A.castShadow ? 1 : 0) + } + function Gi() { + for (var A, e = new Ni, t = (A = {}, + { + get: function(e) { + if (void 0 !== A[e.id]) + return A[e.id]; + var t; + switch (e.type) { + case "DirectionalLight": + case "SpotLight": + t = { + shadowBias: 0, + shadowRadius: 1, + shadowMapSize: new s + }; + break; + case "PointLight": + t = { + shadowBias: 0, + shadowRadius: 1, + shadowMapSize: new s, + shadowCameraNear: 1, + shadowCameraFar: 1e3 + } + } + return A[e.id] = t, + t + } + }), i = { + version: 0, + hash: { + directionalLength: -1, + pointLength: -1, + spotLength: -1, + rectAreaLength: -1, + hemiLength: -1, + numDirectionalShadows: -1, + numPointShadows: -1, + numSpotShadows: -1 + }, + ambient: [0, 0, 0], + probe: [], + directional: [], + directionalShadow: [], + directionalShadowMap: [], + directionalShadowMatrix: [], + spot: [], + spotShadow: [], + spotShadowMap: [], + spotShadowMatrix: [], + rectArea: [], + point: [], + pointShadow: [], + pointShadowMap: [], + pointShadowMatrix: [], + hemi: [] + }, o = 0; 9 > o; o++) + i.probe.push(new y); + var n = new y + , r = new M + , a = new M; + return { + setup: function(A, o, s) { + for (var l = 0, c = 0, h = 0, d = 0; 9 > d; d++) + i.probe[d].set(0, 0, 0); + var p = 0 + , g = 0 + , u = 0 + , f = 0 + , m = 0 + , C = 0 + , y = 0 + , v = 0 + , I = s.matrixWorldInverse; + A.sort(Vi), + d = 0; + for (var E = A.length; E > d; d++) { + var B = A[d] + , x = B.color + , S = B.intensity + , w = B.distance + , M = B.shadow && B.shadow.map ? B.shadow.map.texture : null; + if (B.isAmbientLight) + l += x.r * S, + c += x.g * S, + h += x.b * S; + else if (B.isLightProbe) + for (var b = 0; 9 > b; b++) + i.probe[b].addScaledVector(B.sh.coefficients[b], S); + else if (B.isDirectionalLight) { + if ((K = e.get(B)).color.copy(B.color).multiplyScalar(B.intensity), + K.direction.setFromMatrixPosition(B.matrixWorld), + n.setFromMatrixPosition(B.target.matrixWorld), + K.direction.sub(n), + K.direction.transformDirection(I), + B.castShadow) { + var U = B.shadow; + (F = t.get(B)).shadowBias = U.bias, + F.shadowRadius = U.radius, + F.shadowMapSize = U.mapSize, + i.directionalShadow[p] = F, + i.directionalShadowMap[p] = M, + i.directionalShadowMatrix[p] = B.shadow.matrix, + C++ + } + i.directional[p] = K, + p++ + } else if (B.isSpotLight) { + if ((K = e.get(B)).position.setFromMatrixPosition(B.matrixWorld), + K.position.applyMatrix4(I), + K.color.copy(x).multiplyScalar(S), + K.distance = w, + K.direction.setFromMatrixPosition(B.matrixWorld), + n.setFromMatrixPosition(B.target.matrixWorld), + K.direction.sub(n), + K.direction.transformDirection(I), + K.coneCos = Math.cos(B.angle), + K.penumbraCos = Math.cos(B.angle * (1 - B.penumbra)), + K.decay = B.decay, + B.castShadow) { + U = B.shadow; + (F = t.get(B)).shadowBias = U.bias, + F.shadowRadius = U.radius, + F.shadowMapSize = U.mapSize, + i.spotShadow[u] = F, + i.spotShadowMap[u] = M, + i.spotShadowMatrix[u] = B.shadow.matrix, + v++ + } + i.spot[u] = K, + u++ + } else if (B.isRectAreaLight) { + (K = e.get(B)).color.copy(x).multiplyScalar(S), + K.position.setFromMatrixPosition(B.matrixWorld), + K.position.applyMatrix4(I), + a.identity(), + r.copy(B.matrixWorld), + r.premultiply(I), + a.extractRotation(r), + K.halfWidth.set(.5 * B.width, 0, 0), + K.halfHeight.set(0, .5 * B.height, 0), + K.halfWidth.applyMatrix4(a), + K.halfHeight.applyMatrix4(a), + i.rectArea[f] = K, + f++ + } else if (B.isPointLight) { + if ((K = e.get(B)).position.setFromMatrixPosition(B.matrixWorld), + K.position.applyMatrix4(I), + K.color.copy(B.color).multiplyScalar(B.intensity), + K.distance = B.distance, + K.decay = B.decay, + B.castShadow) { + var F; + U = B.shadow; + (F = t.get(B)).shadowBias = U.bias, + F.shadowRadius = U.radius, + F.shadowMapSize = U.mapSize, + F.shadowCameraNear = U.camera.near, + F.shadowCameraFar = U.camera.far, + i.pointShadow[g] = F, + i.pointShadowMap[g] = M, + i.pointShadowMatrix[g] = B.shadow.matrix, + y++ + } + i.point[g] = K, + g++ + } else if (B.isHemisphereLight) { + var K; + (K = e.get(B)).direction.setFromMatrixPosition(B.matrixWorld), + K.direction.transformDirection(I), + K.direction.normalize(), + K.skyColor.copy(B.color).multiplyScalar(S), + K.groundColor.copy(B.groundColor).multiplyScalar(S), + i.hemi[m] = K, + m++ + } + } + i.ambient[0] = l, + i.ambient[1] = c, + i.ambient[2] = h; + var Q = i.hash; + Q.directionalLength === p && Q.pointLength === g && Q.spotLength === u && Q.rectAreaLength === f && Q.hemiLength === m && Q.numDirectionalShadows === C && Q.numPointShadows === y && Q.numSpotShadows === v || (i.directional.length = p, + i.spot.length = u, + i.rectArea.length = f, + i.point.length = g, + i.hemi.length = m, + i.directionalShadow.length = C, + i.directionalShadowMap.length = C, + i.pointShadow.length = y, + i.pointShadowMap.length = y, + i.spotShadow.length = v, + i.spotShadowMap.length = v, + i.directionalShadowMatrix.length = C, + i.pointShadowMatrix.length = y, + i.spotShadowMatrix.length = v, + Q.directionalLength = p, + Q.pointLength = g, + Q.spotLength = u, + Q.rectAreaLength = f, + Q.hemiLength = m, + Q.numDirectionalShadows = C, + Q.numPointShadows = y, + Q.numSpotShadows = v, + i.version = Oi++) + }, + state: i + } + } + function Pi() { + var A = new Gi + , e = [] + , t = []; + return { + init: function() { + e.length = 0, + t.length = 0 + }, + state: { + lightsArray: e, + shadowsArray: t, + lights: A + }, + setupLights: function(i) { + A.setup(e, t, i) + }, + pushLight: function(A) { + e.push(A) + }, + pushShadow: function(A) { + t.push(A) + } + } + } + function qi() { + var A = new WeakMap; + function e(t) { + var i = t.target; + i.removeEventListener("dispose", e), + A.delete(i) + } + return { + get: function(t, i) { + var o; + return !1 === A.has(t) ? (o = new Pi, + A.set(t, new WeakMap), + A.get(t).set(i, o), + t.addEventListener("dispose", e)) : !1 === A.get(t).has(i) ? (o = new Pi, + A.get(t).set(i, o)) : o = A.get(t).get(i), + o + }, + dispose: function() { + A = new WeakMap + } + } + } + function ji(A) { + qA.call(this), + this.type = "MeshDepthMaterial", + this.depthPacking = 3200, + this.skinning = !1, + this.morphTargets = !1, + this.map = null, + this.alphaMap = null, + this.displacementMap = null, + this.displacementScale = 1, + this.displacementBias = 0, + this.wireframe = !1, + this.wireframeLinewidth = 1, + this.fog = !1, + this.setValues(A) + } + function Hi(A) { + qA.call(this), + this.type = "MeshDistanceMaterial", + this.referencePosition = new y, + this.nearDistance = 1, + this.farDistance = 1e3, + this.skinning = !1, + this.morphTargets = !1, + this.map = null, + this.alphaMap = null, + this.displacementMap = null, + this.displacementScale = 1, + this.displacementBias = 0, + this.fog = !1, + this.setValues(A) + } + (ji.prototype = Object.create(qA.prototype)).constructor = ji, + ji.prototype.isMeshDepthMaterial = !0, + ji.prototype.copy = function(A) { + return qA.prototype.copy.call(this, A), + this.depthPacking = A.depthPacking, + this.skinning = A.skinning, + this.morphTargets = A.morphTargets, + this.map = A.map, + this.alphaMap = A.alphaMap, + this.displacementMap = A.displacementMap, + this.displacementScale = A.displacementScale, + this.displacementBias = A.displacementBias, + this.wireframe = A.wireframe, + this.wireframeLinewidth = A.wireframeLinewidth, + this + } + , + (Hi.prototype = Object.create(qA.prototype)).constructor = Hi, + Hi.prototype.isMeshDistanceMaterial = !0, + Hi.prototype.copy = function(A) { + return qA.prototype.copy.call(this, A), + this.referencePosition.copy(A.referencePosition), + this.nearDistance = A.nearDistance, + this.farDistance = A.farDistance, + this.skinning = A.skinning, + this.morphTargets = A.morphTargets, + this.map = A.map, + this.alphaMap = A.alphaMap, + this.displacementMap = A.displacementMap, + this.displacementScale = A.displacementScale, + this.displacementBias = A.displacementBias, + this + } + ; + function Yi(A, e, t) { + var i = new Ze + , o = new s + , n = new s + , r = new p + , a = [] + , l = [] + , c = {} + , h = { + 0: 1, + 1: 0, + 2: 2 + } + , d = new Pe({ + defines: { + SAMPLE_RATE: 2 / 8, + HALF_SAMPLE_RATE: 1 / 8 + }, + uniforms: { + shadow_pass: { + value: null + }, + resolution: { + value: new s + }, + radius: { + value: 4 + } + }, + vertexShader: "void main() {\n\tgl_Position = vec4( position, 1.0 );\n}", + fragmentShader: "uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include \nvoid main() {\n float mean = 0.0;\n float squared_mean = 0.0;\n\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );\n for ( float i = -1.0; i < 1.0 ; i += SAMPLE_RATE) {\n #ifdef HORIZONAL_PASS\n vec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( i, 0.0 ) * radius ) / resolution ) );\n mean += distribution.x;\n squared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n #else\n float depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, i ) * radius ) / resolution ) );\n mean += depth;\n squared_mean += depth * depth;\n #endif\n }\n mean = mean * HALF_SAMPLE_RATE;\n squared_mean = squared_mean * HALF_SAMPLE_RATE;\n float std_dev = sqrt( squared_mean - mean * mean );\n gl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}" + }) + , u = d.clone(); + u.defines.HORIZONAL_PASS = 1; + var f = new he; + f.setAttribute("position", new YA(new Float32Array([-1, -1, .5, 3, -1, .5, -1, 3, .5]),3)); + var m = new Ue(f,d) + , C = this; + function y(t, i) { + var o = e.update(m); + d.uniforms.shadow_pass.value = t.map.texture, + d.uniforms.resolution.value = t.mapSize, + d.uniforms.radius.value = t.radius, + A.setRenderTarget(t.mapPass), + A.clear(), + A.renderBufferDirect(i, null, o, d, m, null), + u.uniforms.shadow_pass.value = t.mapPass.texture, + u.uniforms.resolution.value = t.mapSize, + u.uniforms.radius.value = t.radius, + A.setRenderTarget(t.map), + A.clear(), + A.renderBufferDirect(i, null, o, u, m, null) + } + function v(A, e, t) { + var i = A << 0 | e << 1 | t << 2 + , o = a[i]; + return void 0 === o && (o = new ji({ + depthPacking: 3201, + morphTargets: A, + skinning: e + }), + a[i] = o), + o + } + function I(A, e, t) { + var i = A << 0 | e << 1 | t << 2 + , o = l[i]; + return void 0 === o && (o = new Hi({ + morphTargets: A, + skinning: e + }), + l[i] = o), + o + } + function E(e, t, i, o, n, r) { + var a = e.geometry + , s = null + , l = v + , d = e.customDepthMaterial; + if (!0 === i.isPointLight && (l = I, + d = e.customDistanceMaterial), + void 0 === d) { + var p = !1; + !0 === t.morphTargets && (!0 === a.isBufferGeometry ? p = a.morphAttributes && a.morphAttributes.position && a.morphAttributes.position.length > 0 : !0 === a.isGeometry && (p = a.morphTargets && a.morphTargets.length > 0)); + var g = !1; + !0 === e.isSkinnedMesh && (!0 === t.skinning ? g = !0 : console.warn("THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:", e)), + s = l(p, g, !0 === e.isInstancedMesh) + } else + s = d; + if (A.localClippingEnabled && !0 === t.clipShadows && 0 !== t.clippingPlanes.length) { + var u = s.uuid + , f = t.uuid + , m = c[u]; + void 0 === m && (c[u] = m = {}); + var C = m[f]; + void 0 === C && (C = s.clone(), + m[f] = C), + s = C + } + return s.visible = t.visible, + s.wireframe = t.wireframe, + s.side = 3 === r ? null !== t.shadowSide ? t.shadowSide : t.side : null !== t.shadowSide ? t.shadowSide : h[t.side], + s.clipShadows = t.clipShadows, + s.clippingPlanes = t.clippingPlanes, + s.clipIntersection = t.clipIntersection, + s.wireframeLinewidth = t.wireframeLinewidth, + s.linewidth = t.linewidth, + !0 === i.isPointLight && !0 === s.isMeshDistanceMaterial && (s.referencePosition.setFromMatrixPosition(i.matrixWorld), + s.nearDistance = o, + s.farDistance = n), + s + } + function B(t, o, n, r, a) { + if (!1 !== t.visible) { + if (t.layers.test(o.layers) && (t.isMesh || t.isLine || t.isPoints) && (t.castShadow || t.receiveShadow && 3 === a) && (!t.frustumCulled || i.intersectsObject(t))) { + t.modelViewMatrix.multiplyMatrices(n.matrixWorldInverse, t.matrixWorld); + var s = e.update(t) + , l = t.material; + if (Array.isArray(l)) + for (var c = s.groups, h = 0, d = c.length; d > h; h++) { + var p = c[h] + , g = l[p.materialIndex]; + if (g && g.visible && g.opacity > .9) { + var u = E(t, g, r, n.near, n.far, a); + A.renderBufferDirect(n, null, s, u, t, p) + } + } + else if (l.visible && l.opacity > .9) { + u = E(t, l, r, n.near, n.far, a); + A.renderBufferDirect(n, null, s, u, t, null) + } + } + for (var f = t.children, m = 0, C = f.length; C > m; m++) + B(f[m], o, n, r, a) + } + } + this.enabled = !1, + this.autoUpdate = !0, + this.needsUpdate = !1, + this.type = 1, + this.render = function(e, a, s) { + if (!1 !== C.enabled && (!1 !== C.autoUpdate || !1 !== C.needsUpdate) && 0 !== e.length) { + var l = A.getRenderTarget() + , c = A.getActiveCubeFace() + , h = A.getActiveMipmapLevel() + , d = A.state; + d.setBlending(0), + d.buffers.color.setClear(1, 1, 1, 1), + d.buffers.depth.setTest(!0), + d.setScissorTest(!1); + for (var p = 0, u = e.length; u > p; p++) { + var f = e[p] + , m = f.shadow; + if (void 0 !== m) { + o.copy(m.mapSize); + var v, I = m.getFrameExtents(); + if (o.multiply(I), + n.copy(m.mapSize), + (o.x > t || o.y > t) && (console.warn("THREE.WebGLShadowMap:", f, "has shadow exceeding max texture size, reducing"), + o.x > t && (n.x = Math.floor(t / I.x), + o.x = n.x * I.x, + m.mapSize.x = n.x), + o.y > t && (n.y = Math.floor(t / I.y), + o.y = n.y * I.y, + m.mapSize.y = n.y)), + null === m.map && !m.isPointLightShadow && 3 === this.type) + m.map = new g(o.x,o.y,v = { + minFilter: 1006, + magFilter: 1006, + format: 1023 + }), + m.map.texture.name = f.name + ".shadowMap", + m.mapPass = new g(o.x,o.y,v), + m.camera.updateProjectionMatrix(); + if (null === m.map) + m.map = new g(o.x,o.y,v = { + minFilter: 1003, + magFilter: 1003, + format: 1023 + }), + m.map.texture.name = f.name + ".shadowMap", + m.camera.updateProjectionMatrix(); + A.setRenderTarget(m.map), + A.clear(); + for (var E = m.getViewportCount(), x = 0; E > x; x++) { + var S = m.getViewport(x); + r.set(n.x * S.x, n.y * S.y, n.x * S.z, n.y * S.w), + d.viewport(r), + m.updateMatrices(f, x), + i = m.getFrustum(), + B(a, s, m.camera, f, this.type) + } + m.isPointLightShadow || 3 !== this.type || y(m, s) + } else + console.warn("THREE.WebGLShadowMap:", f, "has no shadow.") + } + C.needsUpdate = !1, + A.setRenderTarget(l, c, h) + } + } + } + function Wi(A, e, t) { + var i = t.isWebGL2; + var o = new function() { + var e = !1 + , t = new p + , i = null + , o = new p(0,0,0,0); + return { + setMask: function(t) { + i === t || e || (A.colorMask(t, t, t, t), + i = t) + }, + setLocked: function(A) { + e = A + }, + setClear: function(e, i, n, r, a) { + !0 === a && (e *= r, + i *= r, + n *= r), + t.set(e, i, n, r), + !1 === o.equals(t) && (A.clearColor(e, i, n, r), + o.copy(t)) + }, + reset: function() { + e = !1, + i = null, + o.set(-1, 0, 0, 0) + } + } + } + , n = new function() { + var e = !1 + , t = null + , i = null + , o = null; + return { + setTest: function(A) { + A ? O(2929) : V(2929) + }, + setMask: function(i) { + t === i || e || (A.depthMask(i), + t = i) + }, + setFunc: function(e) { + if (i !== e) { + if (e) + switch (e) { + case 0: + A.depthFunc(512); + break; + case 1: + A.depthFunc(519); + break; + case 2: + A.depthFunc(513); + break; + case 3: + A.depthFunc(515); + break; + case 4: + A.depthFunc(514); + break; + case 5: + A.depthFunc(518); + break; + case 6: + A.depthFunc(516); + break; + case 7: + A.depthFunc(517); + break; + default: + A.depthFunc(515) + } + else + A.depthFunc(515); + i = e + } + }, + setLocked: function(A) { + e = A + }, + setClear: function(e) { + o !== e && (A.clearDepth(e), + o = e) + }, + reset: function() { + e = !1, + t = null, + i = null, + o = null + } + } + } + , r = new function() { + var e = !1 + , t = null + , i = null + , o = null + , n = null + , r = null + , a = null + , s = null + , l = null; + return { + setTest: function(A) { + e || (A ? O(2960) : V(2960)) + }, + setMask: function(i) { + t === i || e || (A.stencilMask(i), + t = i) + }, + setFunc: function(e, t, r) { + i === e && o === t && n === r || (A.stencilFunc(e, t, r), + i = e, + o = t, + n = r) + }, + setOp: function(e, t, i) { + r === e && a === t && s === i || (A.stencilOp(e, t, i), + r = e, + a = t, + s = i) + }, + setLocked: function(A) { + e = A + }, + setClear: function(e) { + l !== e && (A.clearStencil(e), + l = e) + }, + reset: function() { + e = !1, + t = null, + i = null, + o = null, + n = null, + r = null, + a = null, + s = null, + l = null + } + } + } + , a = A.getParameter(34921) + , s = new Uint8Array(a) + , l = new Uint8Array(a) + , c = new Uint8Array(a) + , h = {} + , d = null + , g = null + , u = null + , f = null + , m = null + , C = null + , y = null + , v = null + , I = null + , E = !1 + , B = null + , x = null + , S = null + , w = null + , M = null + , b = A.getParameter(35661) + , U = !1 + , F = 0 + , K = A.getParameter(7938); + -1 !== K.indexOf("WebGL") ? (F = parseFloat(/^WebGL\ ([0-9])/.exec(K)[1]), + U = F >= 1) : -1 !== K.indexOf("OpenGL ES") && (F = parseFloat(/^OpenGL\ ES\ ([0-9])/.exec(K)[1]), + U = F >= 2); + var Q = null + , R = {} + , T = new p + , k = new p; + function D(e, t, i) { + var o = new Uint8Array(4) + , n = A.createTexture(); + A.bindTexture(e, n), + A.texParameteri(e, 10241, 9728), + A.texParameteri(e, 10240, 9728); + for (var r = 0; i > r; r++) + A.texImage2D(t + r, 0, 6408, 1, 1, 0, 6408, 5121, o); + return n + } + var L = {}; + function N(t, o) { + (s[t] = 1, + 0 === l[t] && (A.enableVertexAttribArray(t), + l[t] = 1), + c[t] !== o) && ((i ? A : e.get("ANGLE_instanced_arrays"))[i ? "vertexAttribDivisor" : "vertexAttribDivisorANGLE"](t, o), + c[t] = o) + } + function O(e) { + !0 !== h[e] && (A.enable(e), + h[e] = !0) + } + function V(e) { + !1 !== h[e] && (A.disable(e), + h[e] = !1) + } + L[3553] = D(3553, 3553, 1), + L[34067] = D(34067, 34069, 6), + o.setClear(0, 0, 0, 1), + n.setClear(1), + r.setClear(0), + O(2929), + n.setFunc(3), + H(!1), + Y(1), + O(2884), + j(0); + var G = { + 100: 32774, + 101: 32778, + 102: 32779 + }; + if (i) + G[103] = 32775, + G[104] = 32776; + else { + var P = e.get("EXT_blend_minmax"); + null !== P && (G[103] = P.MIN_EXT, + G[104] = P.MAX_EXT) + } + var q = { + 200: 0, + 201: 1, + 202: 768, + 204: 770, + 210: 776, + 208: 774, + 206: 772, + 203: 769, + 205: 771, + 209: 775, + 207: 773 + }; + function j(e, t, i, o, n, r, a, s) { + if (0 !== e) { + if (g || (O(3042), + g = !0), + 5 === e) + n = n || t, + r = r || i, + a = a || o, + t === f && n === y || (A.blendEquationSeparate(G[t], G[n]), + f = t, + y = n), + i === m && o === C && r === v && a === I || (A.blendFuncSeparate(q[i], q[o], q[r], q[a]), + m = i, + C = o, + v = r, + I = a), + u = e, + E = null; + else if (e !== u || s !== E) { + if (100 === f && 100 === y || (A.blendEquation(32774), + f = 100, + y = 100), + s) + switch (e) { + case 1: + A.blendFuncSeparate(1, 771, 1, 771); + break; + case 2: + A.blendFunc(1, 1); + break; + case 3: + A.blendFuncSeparate(0, 0, 769, 771); + break; + case 4: + A.blendFuncSeparate(0, 768, 0, 770); + break; + default: + console.error("THREE.WebGLState: Invalid blending: ", e) + } + else + switch (e) { + case 1: + A.blendFuncSeparate(770, 771, 1, 771); + break; + case 2: + A.blendFunc(770, 1); + break; + case 3: + A.blendFunc(0, 769); + break; + case 4: + A.blendFunc(0, 768); + break; + default: + console.error("THREE.WebGLState: Invalid blending: ", e) + } + m = null, + C = null, + v = null, + I = null, + u = e, + E = s + } + } else + g && (V(3042), + g = !1) + } + function H(e) { + B !== e && (A.frontFace(e ? 2304 : 2305), + B = e) + } + function Y(e) { + 0 !== e ? (O(2884), + e !== x && A.cullFace(1 === e ? 1029 : 2 === e ? 1028 : 1032)) : V(2884), + x = e + } + function W(e, t, i) { + e ? (O(32823), + w === t && M === i || (A.polygonOffset(t, i), + w = t, + M = i)) : V(32823) + } + function J(e) { + void 0 === e && (e = 33984 + b - 1), + Q !== e && (A.activeTexture(e), + Q = e) + } + return { + buffers: { + color: o, + depth: n, + stencil: r + }, + initAttributes: function() { + for (var A = 0, e = s.length; e > A; A++) + s[A] = 0 + }, + enableAttribute: function(A) { + N(A, 0) + }, + enableAttributeAndDivisor: N, + disableUnusedAttributes: function() { + for (var e = 0, t = l.length; e !== t; ++e) + l[e] !== s[e] && (A.disableVertexAttribArray(e), + l[e] = 0) + }, + enable: O, + disable: V, + useProgram: function(e) { + return d !== e && (A.useProgram(e), + d = e, + !0) + }, + setBlending: j, + setMaterial: function(A, e) { + 2 === A.side ? V(2884) : O(2884); + var t = 1 === A.side; + e && (t = !t), + H(t), + 1 === A.blending && !1 === A.transparent ? j(0) : j(A.blending, A.blendEquation, A.blendSrc, A.blendDst, A.blendEquationAlpha, A.blendSrcAlpha, A.blendDstAlpha, A.premultipliedAlpha), + n.setFunc(A.depthFunc), + n.setTest(A.depthTest), + n.setMask(A.depthWrite), + o.setMask(A.colorWrite); + var i = A.stencilWrite; + r.setTest(i), + i && (r.setMask(A.stencilWriteMask), + r.setFunc(A.stencilFunc, A.stencilRef, A.stencilFuncMask), + r.setOp(A.stencilFail, A.stencilZFail, A.stencilZPass)), + W(A.polygonOffset, A.polygonOffsetFactor, A.polygonOffsetUnits) + }, + setFlipSided: H, + setCullFace: Y, + setLineWidth: function(e) { + e !== S && (U && A.lineWidth(e), + S = e) + }, + setPolygonOffset: W, + setScissorTest: function(A) { + A ? O(3089) : V(3089) + }, + activeTexture: J, + bindTexture: function(e, t) { + null === Q && J(); + var i = R[Q]; + void 0 === i && (R[Q] = i = { + type: void 0, + texture: void 0 + }), + i.type === e && i.texture === t || (A.bindTexture(e, t || L[e]), + i.type = e, + i.texture = t) + }, + unbindTexture: function() { + var e = R[Q]; + void 0 !== e && void 0 !== e.type && (A.bindTexture(e.type, null), + e.type = void 0, + e.texture = void 0) + }, + compressedTexImage2D: function() { + try { + A.compressedTexImage2D.apply(A, arguments) + } catch (A) { + console.error("THREE.WebGLState:", A) + } + }, + texImage2D: function() { + try { + A.texImage2D.apply(A, arguments) + } catch (A) { + console.error("THREE.WebGLState:", A) + } + }, + texImage3D: function() { + try { + A.texImage3D.apply(A, arguments) + } catch (A) { + console.error("THREE.WebGLState:", A) + } + }, + scissor: function(e) { + !1 === T.equals(e) && (A.scissor(e.x, e.y, e.z, e.w), + T.copy(e)) + }, + viewport: function(e) { + !1 === k.equals(e) && (A.viewport(e.x, e.y, e.z, e.w), + k.copy(e)) + }, + reset: function() { + for (var e = 0; l.length > e; e++) + 1 === l[e] && (A.disableVertexAttribArray(e), + l[e] = 0); + h = {}, + Q = null, + R = {}, + d = null, + u = null, + B = null, + x = null, + o.reset(), + n.reset(), + r.reset() + } + } + } + function Ji(A, e, t, i, o, n, r) { + var s, l = o.isWebGL2, c = o.maxTextures, h = o.maxCubemapSize, d = o.maxTextureSize, p = o.maxSamples, g = new WeakMap, u = !1; + try { + u = "undefined" != typeof OffscreenCanvas && null !== new OffscreenCanvas(1,1).getContext("2d") + } catch (A) {} + function f(A, e) { + return u ? new OffscreenCanvas(A,e) : document.createElementNS("http://www.w3.org/1999/xhtml", "canvas") + } + function m(A, e, t, i) { + var o = 1; + if ((A.width > i || A.height > i) && (o = i / Math.max(A.width, A.height)), + 1 > o || !0 === e) { + if ("undefined" != typeof HTMLImageElement && A instanceof HTMLImageElement || "undefined" != typeof HTMLCanvasElement && A instanceof HTMLCanvasElement || "undefined" != typeof ImageBitmap && A instanceof ImageBitmap) { + var n = e ? a.floorPowerOfTwo : Math.floor + , r = n(o * A.width) + , l = n(o * A.height); + void 0 === s && (s = f(r, l)); + var c = t ? f(r, l) : s; + return c.width = r, + c.height = l, + c.getContext("2d").drawImage(A, 0, 0, r, l), + console.warn("THREE.WebGLRenderer: Texture has been resized from (" + A.width + "x" + A.height + ") to (" + r + "x" + l + ")."), + c + } + return "data"in A && console.warn("THREE.WebGLRenderer: Image in DataTexture is too big (" + A.width + "x" + A.height + ")."), + A + } + return A + } + function C(A) { + return a.isPowerOfTwo(A.width) && a.isPowerOfTwo(A.height) + } + function y(A, e) { + return A.generateMipmaps && e && 1003 !== A.minFilter && 1006 !== A.minFilter + } + function v(e, t, o, n) { + A.generateMipmap(e), + i.get(t).__maxMipLevel = Math.log(Math.max(o, n)) * Math.LOG2E + } + function I(t, i, o) { + if (!1 === l) + return i; + if (null !== t) { + if (void 0 !== A[t]) + return A[t]; + console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '" + t + "'") + } + var n = i; + return 6403 === i && (5126 === o && (n = 33326), + 5131 === o && (n = 33325), + 5121 === o && (n = 33321)), + 6407 === i && (5126 === o && (n = 34837), + 5131 === o && (n = 34843), + 5121 === o && (n = 32849)), + 6408 === i && (5126 === o && (n = 34836), + 5131 === o && (n = 34842), + 5121 === o && (n = 32856)), + 33325 !== n && 33326 !== n && 34842 !== n && 34836 !== n || e.get("EXT_color_buffer_float"), + n + } + function E(A) { + return 1003 === A || 1004 === A || 1005 === A ? 9728 : 9729 + } + function B(e) { + var t = e.target; + t.removeEventListener("dispose", B), + function(e) { + var t = i.get(e); + if (void 0 === t.__webglInit) + return; + A.deleteTexture(t.__webglTexture), + i.remove(e) + }(t), + t.isVideoTexture && g.delete(t), + r.memory.textures-- + } + function x(e) { + var t = e.target; + t.removeEventListener("dispose", x), + function(e) { + var t = i.get(e) + , o = i.get(e.texture); + if (!e) + return; + void 0 !== o.__webglTexture && A.deleteTexture(o.__webglTexture); + e.depthTexture && e.depthTexture.dispose(); + if (e.isWebGLCubeRenderTarget) + for (var n = 0; 6 > n; n++) + A.deleteFramebuffer(t.__webglFramebuffer[n]), + t.__webglDepthbuffer && A.deleteRenderbuffer(t.__webglDepthbuffer[n]); + else + A.deleteFramebuffer(t.__webglFramebuffer), + t.__webglDepthbuffer && A.deleteRenderbuffer(t.__webglDepthbuffer), + t.__webglMultisampledFramebuffer && A.deleteFramebuffer(t.__webglMultisampledFramebuffer), + t.__webglColorRenderbuffer && A.deleteRenderbuffer(t.__webglColorRenderbuffer), + t.__webglDepthRenderbuffer && A.deleteRenderbuffer(t.__webglDepthRenderbuffer); + i.remove(e.texture), + i.remove(e) + }(t), + r.memory.textures-- + } + var S = 0; + function w(A, e) { + var o = i.get(A); + if (A.isVideoTexture && function(A) { + var e = r.render.frame; + g.get(A) !== e && (g.set(A, e), + A.update()) + }(A), + A.version > 0 && o.__version !== A.version) { + var n = A.image; + if (void 0 === n) + console.warn("THREE.WebGLRenderer: Texture marked for update but image is undefined"); + else { + if (!1 !== n.complete) + return void R(o, A, e); + console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete") + } + } + t.activeTexture(33984 + e), + t.bindTexture(3553, o.__webglTexture) + } + function M(e, o) { + if (6 === e.image.length) { + var r = i.get(e); + if (e.version > 0 && r.__version !== e.version) { + Q(r, e), + t.activeTexture(33984 + o), + t.bindTexture(34067, r.__webglTexture), + A.pixelStorei(37440, e.flipY); + for (var a = e && (e.isCompressedTexture || e.image[0].isCompressedTexture), s = e.image[0] && e.image[0].isDataTexture, c = [], d = 0; 6 > d; d++) + c[d] = a || s ? s ? e.image[d].image : e.image[d] : m(e.image[d], !1, !0, h); + var p, g = c[0], u = C(g) || l, f = n.convert(e.format), E = n.convert(e.type), B = I(e.internalFormat, f, E); + if (K(34067, e, u), + a) { + for (d = 0; 6 > d; d++) { + p = c[d].mipmaps; + for (var x = 0; p.length > x; x++) { + var S = p[x]; + 1023 !== e.format && 1022 !== e.format ? null !== f ? t.compressedTexImage2D(34069 + d, x, B, S.width, S.height, 0, S.data) : console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()") : t.texImage2D(34069 + d, x, B, S.width, S.height, 0, f, E, S.data) + } + } + r.__maxMipLevel = p.length - 1 + } else { + p = e.mipmaps; + for (d = 0; 6 > d; d++) + if (s) { + t.texImage2D(34069 + d, 0, B, c[d].width, c[d].height, 0, f, E, c[d].data); + for (x = 0; p.length > x; x++) { + var w = (S = p[x]).image[d].image; + t.texImage2D(34069 + d, x + 1, B, w.width, w.height, 0, f, E, w.data) + } + } else { + t.texImage2D(34069 + d, 0, B, f, E, c[d]); + for (x = 0; p.length > x; x++) { + t.texImage2D(34069 + d, x + 1, B, f, E, (S = p[x]).image[d]) + } + } + r.__maxMipLevel = p.length + } + y(e, u) && v(34067, e, g.width, g.height), + r.__version = e.version, + e.onUpdate && e.onUpdate(e) + } else + t.activeTexture(33984 + o), + t.bindTexture(34067, r.__webglTexture) + } + } + function b(A, e) { + t.activeTexture(33984 + e), + t.bindTexture(34067, i.get(A).__webglTexture) + } + var U = { + 1e3: 10497, + 1001: 33071, + 1002: 33648 + } + , F = { + 1003: 9728, + 1004: 9984, + 1005: 9986, + 1006: 9729, + 1007: 9985, + 1008: 9987 + }; + function K(t, n, r) { + r ? (A.texParameteri(t, 10242, U[n.wrapS]), + A.texParameteri(t, 10243, U[n.wrapT]), + 32879 !== t && 35866 !== t || A.texParameteri(t, 32882, U[n.wrapR]), + A.texParameteri(t, 10240, F[n.magFilter]), + A.texParameteri(t, 10241, F[n.minFilter])) : (A.texParameteri(t, 10242, 33071), + A.texParameteri(t, 10243, 33071), + 32879 !== t && 35866 !== t || A.texParameteri(t, 32882, 33071), + 1001 === n.wrapS && 1001 === n.wrapT || console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping."), + A.texParameteri(t, 10240, E(n.magFilter)), + A.texParameteri(t, 10241, E(n.minFilter)), + 1003 !== n.minFilter && 1006 !== n.minFilter && console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.")); + var a = e.get("EXT_texture_filter_anisotropic"); + if (a) { + if (1015 === n.type && null === e.get("OES_texture_float_linear")) + return; + if (1016 === n.type && null === (l || e.get("OES_texture_half_float_linear"))) + return; + (n.anisotropy > 1 || i.get(n).__currentAnisotropy) && (A.texParameterf(t, a.TEXTURE_MAX_ANISOTROPY_EXT, Math.min(n.anisotropy, o.getMaxAnisotropy())), + i.get(n).__currentAnisotropy = n.anisotropy) + } + } + function Q(e, t) { + void 0 === e.__webglInit && (e.__webglInit = !0, + t.addEventListener("dispose", B), + e.__webglTexture = A.createTexture(), + r.memory.textures++) + } + function R(e, i, o) { + var r = 3553; + i.isDataTexture2DArray && (r = 35866), + i.isDataTexture3D && (r = 32879), + Q(e, i), + t.activeTexture(33984 + o), + t.bindTexture(r, e.__webglTexture), + A.pixelStorei(37440, i.flipY), + A.pixelStorei(37441, i.premultiplyAlpha), + A.pixelStorei(3317, i.unpackAlignment); + var a = function(A) { + return !l && (1001 !== A.wrapS || 1001 !== A.wrapT || 1003 !== A.minFilter && 1006 !== A.minFilter) + }(i) && !1 === C(i.image) + , s = m(i.image, a, !1, d) + , c = C(s) || l + , h = n.convert(i.format) + , p = n.convert(i.type) + , g = I(i.internalFormat, h, p); + K(r, i, c); + var u, f = i.mipmaps; + if (i.isDepthTexture) + g = 6402, + l ? g = 1015 === i.type ? 36012 : 1014 === i.type ? 33190 : 1020 === i.type ? 35056 : 33189 : 1015 === i.type && console.error("WebGLRenderer: Floating point depth texture requires WebGL2."), + 1026 === i.format && 6402 === g && 1012 !== i.type && 1014 !== i.type && (console.warn("THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture."), + i.type = 1012, + p = n.convert(i.type)), + 1027 === i.format && 6402 === g && (g = 34041, + 1020 !== i.type && (console.warn("THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture."), + i.type = 1020, + p = n.convert(i.type))), + t.texImage2D(3553, 0, g, s.width, s.height, 0, h, p, null); + else if (i.isDataTexture) + if (f.length > 0 && c) { + for (var E = 0, B = f.length; B > E; E++) + t.texImage2D(3553, E, g, (u = f[E]).width, u.height, 0, h, p, u.data); + i.generateMipmaps = !1, + e.__maxMipLevel = f.length - 1 + } else + t.texImage2D(3553, 0, g, s.width, s.height, 0, h, p, s.data), + e.__maxMipLevel = 0; + else if (i.isCompressedTexture) { + for (E = 0, + B = f.length; B > E; E++) + u = f[E], + 1023 !== i.format && 1022 !== i.format ? null !== h ? t.compressedTexImage2D(3553, E, g, u.width, u.height, 0, u.data) : console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()") : t.texImage2D(3553, E, g, u.width, u.height, 0, h, p, u.data); + e.__maxMipLevel = f.length - 1 + } else if (i.isDataTexture2DArray) + t.texImage3D(35866, 0, g, s.width, s.height, s.depth, 0, h, p, s.data), + e.__maxMipLevel = 0; + else if (i.isDataTexture3D) + t.texImage3D(32879, 0, g, s.width, s.height, s.depth, 0, h, p, s.data), + e.__maxMipLevel = 0; + else if (f.length > 0 && c) { + for (E = 0, + B = f.length; B > E; E++) + t.texImage2D(3553, E, g, h, p, u = f[E]); + i.generateMipmaps = !1, + e.__maxMipLevel = f.length - 1 + } else + t.texImage2D(3553, 0, g, h, p, s), + e.__maxMipLevel = 0; + y(i, c) && v(r, i, s.width, s.height), + e.__version = i.version, + i.onUpdate && i.onUpdate(i) + } + function T(e, o, r, a) { + var s = n.convert(o.texture.format) + , l = n.convert(o.texture.type) + , c = I(o.texture.internalFormat, s, l); + t.texImage2D(a, 0, c, o.width, o.height, 0, s, l, null), + A.bindFramebuffer(36160, e), + A.framebufferTexture2D(36160, r, a, i.get(o.texture).__webglTexture, 0), + A.bindFramebuffer(36160, null) + } + function k(e, t, i) { + if (A.bindRenderbuffer(36161, e), + t.depthBuffer && !t.stencilBuffer) { + var o = 33189; + if (i) { + var r = t.depthTexture; + r && r.isDepthTexture && (1015 === r.type ? o = 36012 : 1014 === r.type && (o = 33190)); + var a = L(t); + A.renderbufferStorageMultisample(36161, a, o, t.width, t.height) + } else + A.renderbufferStorage(36161, o, t.width, t.height); + A.framebufferRenderbuffer(36160, 36096, 36161, e) + } else if (t.depthBuffer && t.stencilBuffer) { + if (i) { + a = L(t); + A.renderbufferStorageMultisample(36161, a, 35056, t.width, t.height) + } else + A.renderbufferStorage(36161, 34041, t.width, t.height); + A.framebufferRenderbuffer(36160, 33306, 36161, e) + } else { + var s = n.convert(t.texture.format) + , l = n.convert(t.texture.type); + o = I(t.texture.internalFormat, s, l); + if (i) { + a = L(t); + A.renderbufferStorageMultisample(36161, a, o, t.width, t.height) + } else + A.renderbufferStorage(36161, o, t.width, t.height) + } + A.bindRenderbuffer(36161, null) + } + function D(e) { + var t = i.get(e) + , o = !0 === e.isWebGLCubeRenderTarget; + if (e.depthTexture) { + if (o) + throw new Error("target.depthTexture not supported in Cube render targets"); + !function(e, t) { + if (t && t.isWebGLCubeRenderTarget) + throw new Error("Depth Texture with cube render targets is not supported"); + if (A.bindFramebuffer(36160, e), + !t.depthTexture || !t.depthTexture.isDepthTexture) + throw new Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture"); + i.get(t.depthTexture).__webglTexture && t.depthTexture.image.width === t.width && t.depthTexture.image.height === t.height || (t.depthTexture.image.width = t.width, + t.depthTexture.image.height = t.height, + t.depthTexture.needsUpdate = !0), + w(t.depthTexture, 0); + var o = i.get(t.depthTexture).__webglTexture; + if (1026 === t.depthTexture.format) + A.framebufferTexture2D(36160, 36096, 3553, o, 0); + else { + if (1027 !== t.depthTexture.format) + throw new Error("Unknown depthTexture format"); + A.framebufferTexture2D(36160, 33306, 3553, o, 0) + } + }(t.__webglFramebuffer, e) + } else if (o) { + t.__webglDepthbuffer = []; + for (var n = 0; 6 > n; n++) + A.bindFramebuffer(36160, t.__webglFramebuffer[n]), + t.__webglDepthbuffer[n] = A.createRenderbuffer(), + k(t.__webglDepthbuffer[n], e, !1) + } else + A.bindFramebuffer(36160, t.__webglFramebuffer), + t.__webglDepthbuffer = A.createRenderbuffer(), + k(t.__webglDepthbuffer, e, !1); + A.bindFramebuffer(36160, null) + } + function L(A) { + return l && A.isWebGLMultisampleRenderTarget ? Math.min(p, A.samples) : 0 + } + var N = !1 + , O = !1; + this.allocateTextureUnit = function() { + var A = S; + return c > A || console.warn("THREE.WebGLTextures: Trying to use " + A + " texture units while this GPU supports only " + c), + S += 1, + A + } + , + this.resetTextureUnits = function() { + S = 0 + } + , + this.setTexture2D = w, + this.setTexture2DArray = function(A, e) { + var o = i.get(A); + A.version > 0 && o.__version !== A.version ? R(o, A, e) : (t.activeTexture(33984 + e), + t.bindTexture(35866, o.__webglTexture)) + } + , + this.setTexture3D = function(A, e) { + var o = i.get(A); + A.version > 0 && o.__version !== A.version ? R(o, A, e) : (t.activeTexture(33984 + e), + t.bindTexture(32879, o.__webglTexture)) + } + , + this.setTextureCube = M, + this.setTextureCubeDynamic = b, + this.setupRenderTarget = function(e) { + var o = i.get(e) + , a = i.get(e.texture); + e.addEventListener("dispose", x), + a.__webglTexture = A.createTexture(), + r.memory.textures++; + var s = !0 === e.isWebGLCubeRenderTarget + , c = !0 === e.isWebGLMultisampleRenderTarget + , h = C(e) || l; + if (!l || 1022 !== e.texture.format || 1015 !== e.texture.type && 1016 !== e.texture.type || (e.texture.format = 1023, + console.warn("THREE.WebGLRenderer: Rendering to textures with RGB format is not supported. Using RGBA format instead.")), + s) { + o.__webglFramebuffer = []; + for (var d = 0; 6 > d; d++) + o.__webglFramebuffer[d] = A.createFramebuffer() + } else if (o.__webglFramebuffer = A.createFramebuffer(), + c) + if (l) { + o.__webglMultisampledFramebuffer = A.createFramebuffer(), + o.__webglColorRenderbuffer = A.createRenderbuffer(), + A.bindRenderbuffer(36161, o.__webglColorRenderbuffer); + var p = n.convert(e.texture.format) + , g = n.convert(e.texture.type) + , u = I(e.texture.internalFormat, p, g) + , f = L(e); + A.renderbufferStorageMultisample(36161, f, u, e.width, e.height), + A.bindFramebuffer(36160, o.__webglMultisampledFramebuffer), + A.framebufferRenderbuffer(36160, 36064, 36161, o.__webglColorRenderbuffer), + A.bindRenderbuffer(36161, null), + e.depthBuffer && (o.__webglDepthRenderbuffer = A.createRenderbuffer(), + k(o.__webglDepthRenderbuffer, e, !0)), + A.bindFramebuffer(36160, null) + } else + console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2."); + if (s) { + t.bindTexture(34067, a.__webglTexture), + K(34067, e.texture, h); + for (d = 0; 6 > d; d++) + T(o.__webglFramebuffer[d], e, 36064, 34069 + d); + y(e.texture, h) && v(34067, e.texture, e.width, e.height), + t.bindTexture(34067, null) + } else + t.bindTexture(3553, a.__webglTexture), + K(3553, e.texture, h), + T(o.__webglFramebuffer, e, 36064, 3553), + y(e.texture, h) && v(3553, e.texture, e.width, e.height), + t.bindTexture(3553, null); + e.depthBuffer && D(e) + } + , + this.updateRenderTargetMipmap = function(A) { + var e = A.texture; + if (y(e, C(A) || l)) { + var o = A.isWebGLCubeRenderTarget ? 34067 : 3553 + , n = i.get(e).__webglTexture; + t.bindTexture(o, n), + v(o, e, A.width, A.height), + t.bindTexture(o, null) + } + } + , + this.updateMultisampleRenderTarget = function(e) { + if (e.isWebGLMultisampleRenderTarget) + if (l) { + var t = i.get(e); + A.bindFramebuffer(36008, t.__webglMultisampledFramebuffer), + A.bindFramebuffer(36009, t.__webglFramebuffer); + var o = e.width + , n = e.height + , r = 16384; + e.depthBuffer && (r |= 256), + e.stencilBuffer && (r |= 1024), + A.blitFramebuffer(0, 0, o, n, 0, 0, o, n, r, 9728), + A.bindFramebuffer(36160, t.__webglMultisampledFramebuffer) + } else + console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.") + } + , + this.safeSetTexture2D = function(A, e) { + A && A.isWebGLRenderTarget && (!1 === N && (console.warn("THREE.WebGLTextures.safeSetTexture2D: don't use render targets as textures. Use their .texture property instead."), + N = !0), + A = A.texture), + w(A, e) + } + , + this.safeSetTextureCube = function(A, e) { + A && A.isWebGLCubeRenderTarget && (!1 === O && (console.warn("THREE.WebGLTextures.safeSetTextureCube: don't use cube render targets as textures. Use their .texture property instead."), + O = !0), + A = A.texture), + A && A.isCubeTexture || Array.isArray(A.image) && 6 === A.image.length ? M(A, e) : b(A, e) + } + } + function zi(A, e, t) { + var i = t.isWebGL2; + return { + convert: function(A) { + var t; + if (1009 === A) + return 5121; + if (1017 === A) + return 32819; + if (1018 === A) + return 32820; + if (1019 === A) + return 33635; + if (1010 === A) + return 5120; + if (1011 === A) + return 5122; + if (1012 === A) + return 5123; + if (1013 === A) + return 5124; + if (1014 === A) + return 5125; + if (1015 === A) + return 5126; + if (1016 === A) + return i ? 5131 : null !== (t = e.get("OES_texture_half_float")) ? t.HALF_FLOAT_OES : null; + if (1021 === A) + return 6406; + if (1022 === A) + return 6407; + if (1023 === A) + return 6408; + if (1024 === A) + return 6409; + if (1025 === A) + return 6410; + if (1026 === A) + return 6402; + if (1027 === A) + return 34041; + if (1028 === A) + return 6403; + if (1029 === A) + return 36244; + if (1030 === A) + return 33319; + if (1031 === A) + return 33320; + if (1032 === A) + return 36248; + if (1033 === A) + return 36249; + if (33776 === A || 33777 === A || 33778 === A || 33779 === A) { + if (null === (t = e.get("WEBGL_compressed_texture_s3tc"))) + return null; + if (33776 === A) + return t.COMPRESSED_RGB_S3TC_DXT1_EXT; + if (33777 === A) + return t.COMPRESSED_RGBA_S3TC_DXT1_EXT; + if (33778 === A) + return t.COMPRESSED_RGBA_S3TC_DXT3_EXT; + if (33779 === A) + return t.COMPRESSED_RGBA_S3TC_DXT5_EXT + } + if (35840 === A || 35841 === A || 35842 === A || 35843 === A) { + if (null === (t = e.get("WEBGL_compressed_texture_pvrtc"))) + return null; + if (35840 === A) + return t.COMPRESSED_RGB_PVRTC_4BPPV1_IMG; + if (35841 === A) + return t.COMPRESSED_RGB_PVRTC_2BPPV1_IMG; + if (35842 === A) + return t.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG; + if (35843 === A) + return t.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG + } + if (36196 === A) + return null !== (t = e.get("WEBGL_compressed_texture_etc1")) ? t.COMPRESSED_RGB_ETC1_WEBGL : null; + if ((37492 === A || 37496 === A) && null !== (t = e.get("WEBGL_compressed_texture_etc"))) { + if (37492 === A) + return t.COMPRESSED_RGB8_ETC2; + if (37496 === A) + return t.COMPRESSED_RGBA8_ETC2_EAC + } + return 37808 === A || 37809 === A || 37810 === A || 37811 === A || 37812 === A || 37813 === A || 37814 === A || 37815 === A || 37816 === A || 37817 === A || 37818 === A || 37819 === A || 37820 === A || 37821 === A || 37840 === A || 37841 === A || 37842 === A || 37843 === A || 37844 === A || 37845 === A || 37846 === A || 37847 === A || 37848 === A || 37849 === A || 37850 === A || 37851 === A || 37852 === A || 37853 === A ? null !== (t = e.get("WEBGL_compressed_texture_astc")) ? A : null : 36492 === A ? null !== (t = e.get("EXT_texture_compression_bptc")) ? A : null : 1020 === A ? i ? 34042 : null !== (t = e.get("WEBGL_depth_texture")) ? t.UNSIGNED_INT_24_8_WEBGL : null : void 0 + } + } + } + function Zi(A) { + je.call(this), + this.cameras = A || [] + } + function Xi() { + H.call(this), + this.type = "Group" + } + function _i(A, e) { + var t = this + , i = null + , o = 1 + , n = null + , r = "local-floor" + , a = null + , s = [] + , l = new Map + , c = new je; + c.layers.enable(1), + c.viewport = new p; + var h = new je; + h.layers.enable(2), + h.viewport = new p; + var d = new Zi([c, h]); + d.layers.enable(1), + d.layers.enable(2); + var g = null + , u = null; + function f(A) { + var e = l.get(A.inputSource); + e && (e.targetRay && e.targetRay.dispatchEvent({ + type: A.type + }), + e.grip && e.grip.dispatchEvent({ + type: A.type + })) + } + function m() { + l.forEach((function(A, e) { + A.targetRay && (A.targetRay.dispatchEvent({ + type: "disconnected", + data: e + }), + A.targetRay.visible = !1), + A.grip && (A.grip.dispatchEvent({ + type: "disconnected", + data: e + }), + A.grip.visible = !1) + } + )), + l.clear(), + A.setFramebuffer(null), + A.setRenderTarget(A.getRenderTarget()), + S.stop(), + t.isPresenting = !1, + t.dispatchEvent({ + type: "sessionend" + }) + } + function C(A) { + n = A, + S.setContext(i), + S.start(), + t.isPresenting = !0, + t.dispatchEvent({ + type: "sessionstart" + }) + } + function v(A) { + for (var e = i.inputSources, t = 0; s.length > t; t++) + l.set(e[t], s[t]); + for (t = 0; A.removed.length > t; t++) { + (n = l.get(o = A.removed[t])) && (n.targetRay && n.targetRay.dispatchEvent({ + type: "disconnected", + data: o + }), + n.grip && n.grip.dispatchEvent({ + type: "disconnected", + data: o + }), + l.delete(o)) + } + for (t = 0; A.added.length > t; t++) { + var o, n; + (n = l.get(o = A.added[t])) && (n.targetRay && n.targetRay.dispatchEvent({ + type: "connected", + data: o + }), + n.grip && n.grip.dispatchEvent({ + type: "connected", + data: o + })) + } + } + this.enabled = !1, + this.isPresenting = !1, + this.getController = function(A) { + var e = s[A]; + return void 0 === e && (s[A] = e = {}), + void 0 === e.targetRay && (e.targetRay = new Xi, + e.targetRay.matrixAutoUpdate = !1, + e.targetRay.visible = !1), + e.targetRay + } + , + this.getControllerGrip = function(A) { + var e = s[A]; + return void 0 === e && (s[A] = e = {}), + void 0 === e.grip && (e.grip = new Xi, + e.grip.matrixAutoUpdate = !1, + e.grip.visible = !1), + e.grip + } + , + this.setFramebufferScaleFactor = function(A) { + o = A, + 1 == t.isPresenting && console.warn("WebXRManager: Cannot change framebuffer scale while presenting VR content") + } + , + this.setReferenceSpaceType = function(A) { + r = A + } + , + this.getReferenceSpace = function() { + return n + } + , + this.getSession = function() { + return i + } + , + this.setSession = function(A) { + if (null !== (i = A)) { + i.addEventListener("select", f), + i.addEventListener("selectstart", f), + i.addEventListener("selectend", f), + i.addEventListener("squeeze", f), + i.addEventListener("squeezestart", f), + i.addEventListener("squeezeend", f), + i.addEventListener("end", m); + var t = e.getContextAttributes() + , n = new XRWebGLLayer(i,e,{ + antialias: t.antialias, + alpha: t.alpha, + depth: t.depth, + stencil: t.stencil, + framebufferScaleFactor: o + }); + i.updateRenderState({ + baseLayer: n + }), + i.requestReferenceSpace(r).then(C), + i.addEventListener("inputsourceschange", v) + } + } + ; + var I = new y + , E = new y; + function B(A, e) { + null === e ? A.matrixWorld.copy(A.matrix) : A.matrixWorld.multiplyMatrices(e.matrixWorld, A.matrix), + A.matrixWorldInverse.getInverse(A.matrixWorld) + } + this.getCamera = function(A) { + d.near = h.near = c.near = A.near, + d.far = h.far = c.far = A.far, + g === d.near && u === d.far || (i.updateRenderState({ + depthNear: d.near, + depthFar: d.far + }), + g = d.near, + u = d.far); + var e = A.parent + , t = d.cameras; + B(d, e); + for (var o = 0; t.length > o; o++) + B(t[o], e); + A.matrixWorld.copy(d.matrixWorld); + for (var n = A.children, r = (o = 0, + n.length); r > o; o++) + n[o].updateMatrixWorld(!0); + return function(A, e, t) { + I.setFromMatrixPosition(e.matrixWorld), + E.setFromMatrixPosition(t.matrixWorld); + var i = I.distanceTo(E) + , o = e.projectionMatrix.elements + , n = t.projectionMatrix.elements + , r = o[14] / (o[10] - 1) + , a = o[14] / (o[10] + 1) + , s = (o[9] + 1) / o[5] + , l = (o[9] - 1) / o[5] + , c = (o[8] - 1) / o[0] + , h = (n[8] + 1) / n[0] + , d = r * c + , p = r * h + , g = i / (-c + h) + , u = g * -c; + e.matrixWorld.decompose(A.position, A.quaternion, A.scale), + A.translateX(u), + A.translateZ(g), + A.matrixWorld.compose(A.position, A.quaternion, A.scale), + A.matrixWorldInverse.getInverse(A.matrixWorld); + var f = r + g + , m = a + g; + A.projectionMatrix.makePerspective(d - u, p + (i - u), s * a / m * f, l * a / m * f, f, m) + }(d, c, h), + d + } + ; + var x = null; + var S = new _e; + S.setAnimationLoop((function(e, t) { + if (null !== (a = t.getViewerPose(n))) { + var o = a.views + , r = i.renderState.baseLayer; + A.setFramebuffer(r.framebuffer); + for (var l = 0; o.length > l; l++) { + var c = o[l] + , h = r.getViewport(c) + , p = d.cameras[l]; + p.matrix.fromArray(c.transform.matrix), + p.projectionMatrix.fromArray(c.projectionMatrix), + p.viewport.set(h.x, h.y, h.width, h.height), + 0 === l && d.matrix.copy(p.matrix) + } + } + var g = i.inputSources; + for (l = 0; s.length > l; l++) { + var u = s[l] + , f = g[l] + , m = null + , C = null; + f && (u.targetRay && null !== (m = t.getPose(f.targetRaySpace, n)) && (u.targetRay.matrix.fromArray(m.transform.matrix), + u.targetRay.matrix.decompose(u.targetRay.position, u.targetRay.rotation, u.targetRay.scale)), + u.grip && f.gripSpace && null !== (C = t.getPose(f.gripSpace, n)) && (u.grip.matrix.fromArray(C.transform.matrix), + u.grip.matrix.decompose(u.grip.position, u.grip.rotation, u.grip.scale))), + u.targetRay && (u.targetRay.visible = null !== m), + u.grip && (u.grip.visible = null !== C) + } + x && x(e, t) + } + )), + this.setAnimationLoop = function(A) { + x = A + } + , + this.dispose = function() {} + } + function $i(A) { + var e = void 0 !== (A = A || {}).canvas ? A.canvas : document.createElementNS("http://www.w3.org/1999/xhtml", "canvas") + , t = void 0 !== A.context ? A.context : null + , i = void 0 !== A.alpha && A.alpha + , o = void 0 === A.depth || A.depth + , n = void 0 === A.stencil || A.stencil + , r = void 0 !== A.antialias && A.antialias + , l = void 0 === A.premultipliedAlpha || A.premultipliedAlpha + , c = void 0 !== A.preserveDrawingBuffer && A.preserveDrawingBuffer + , h = void 0 !== A.powerPreference ? A.powerPreference : "default" + , d = void 0 !== A.failIfMajorPerformanceCaveat && A.failIfMajorPerformanceCaveat + , g = null + , u = null; + this.domElement = e, + this.debug = { + checkShaderErrors: !0 + }, + this.autoClear = !0, + this.autoClearColor = !0, + this.autoClearDepth = !0, + this.autoClearStencil = !0, + this.sortObjects = !0, + this.clippingPlanes = [], + this.localClippingEnabled = !1, + this.gammaFactor = 2, + this.outputEncoding = 3e3, + this.physicallyCorrectLights = !1, + this.toneMapping = 1, + this.toneMappingExposure = 1, + this.toneMappingWhitePoint = 1, + this.maxMorphTargets = 8, + this.maxMorphNormals = 4; + var f, m, C, v, I, E, B, x, S, w, b, U, F, K, Q, R, T, k, D = this, L = !1, N = null, O = 0, V = 0, G = null, P = null, q = -1, j = { + geometry: null, + program: null, + wireframe: !1 + }, H = null, W = null, J = new p, z = new p, Z = null, X = e.width, _ = e.height, $ = 1, AA = null, eA = null, tA = new p(0,0,X,_), iA = new p(0,0,X,_), oA = !1, nA = new Ze, rA = new at, aA = !1, sA = !1, lA = new M, cA = new y; + function hA() { + return null === G ? $ : 1 + } + try { + var dA = { + alpha: i, + depth: o, + stencil: n, + antialias: r, + premultipliedAlpha: l, + preserveDrawingBuffer: c, + powerPreference: h, + failIfMajorPerformanceCaveat: d, + xrCompatible: !0 + }; + if (e.addEventListener("webglcontextlost", fA, !1), + e.addEventListener("webglcontextrestored", mA, !1), + null === (f = t || e.getContext("webgl", dA) || e.getContext("experimental-webgl", dA))) + throw null !== e.getContext("webgl") ? new Error("Error creating WebGL context with your selected attributes.") : new Error("Error creating WebGL context."); + void 0 === f.getShaderPrecisionFormat && (f.getShaderPrecisionFormat = function() { + return { + rangeMin: 1, + rangeMax: 1, + precision: 1 + } + } + ) + } catch (A) { + throw console.error("THREE.WebGLRenderer: " + A.message), + A + } + function pA() { + m = new st(f), + !1 === (C = new rt(f,m,A)).isWebGL2 && (m.get("WEBGL_depth_texture"), + m.get("OES_texture_float"), + m.get("OES_texture_half_float"), + m.get("OES_texture_half_float_linear"), + m.get("OES_standard_derivatives"), + m.get("OES_element_index_uint"), + m.get("ANGLE_instanced_arrays")), + m.get("OES_texture_float_linear"), + k = new zi(f,m,C), + (v = new Wi(f,m,C)).scissor(z.copy(iA).multiplyScalar($).floor()), + v.viewport(J.copy(tA).multiplyScalar($).floor()), + I = new ht(f), + E = new Ri, + B = new Ji(f,m,v,E,C,k,I), + x = new $e(f,C), + S = new lt(f,x,I), + w = new gt(f,S,x,I), + Q = new pt(f), + b = new Qi(D,m,C), + U = new Li, + F = new qi, + K = new ot(D,v,w,l), + R = new nt(f,m,I,C), + T = new ct(f,m,I,C), + I.programs = b.programs, + D.capabilities = C, + D.extensions = m, + D.properties = E, + D.renderLists = U, + D.state = v, + D.info = I + } + pA(); + var gA = new _i(D,f); + this.xr = gA; + var uA = new Yi(D,w,C.maxTextureSize); + function fA(A) { + A.preventDefault(), + console.log("THREE.WebGLRenderer: Context Lost."), + L = !0 + } + function mA() { + console.log("THREE.WebGLRenderer: Context Restored."), + L = !1, + pA() + } + function CA(A) { + var e = A.target; + e.removeEventListener("dispose", CA), + function(A) { + yA(A), + E.remove(A) + }(e) + } + function yA(A) { + var e = E.get(A).program; + A.program = void 0, + void 0 !== e && b.releaseProgram(e) + } + this.shadowMap = uA, + this.getContext = function() { + return f + } + , + this.getContextAttributes = function() { + return f.getContextAttributes() + } + , + this.forceContextLoss = function() { + var A = m.get("WEBGL_lose_context"); + A && A.loseContext() + } + , + this.forceContextRestore = function() { + var A = m.get("WEBGL_lose_context"); + A && A.restoreContext() + } + , + this.getPixelRatio = function() { + return $ + } + , + this.setPixelRatio = function(A) { + void 0 !== A && ($ = A, + this.setSize(X, _, !1)) + } + , + this.getSize = function(A) { + return void 0 === A && (console.warn("WebGLRenderer: .getsize() now requires a Vector2 as an argument"), + A = new s), + A.set(X, _) + } + , + this.setSize = function(A, t, i) { + gA.isPresenting ? console.warn("THREE.WebGLRenderer: Can't change size while VR device is presenting.") : (X = A, + _ = t, + e.width = Math.floor(A * $), + e.height = Math.floor(t * $), + !1 !== i && (e.style.width = A + "px", + e.style.height = t + "px"), + this.setViewport(0, 0, A, t)) + } + , + this.getDrawingBufferSize = function(A) { + return void 0 === A && (console.warn("WebGLRenderer: .getdrawingBufferSize() now requires a Vector2 as an argument"), + A = new s), + A.set(X * $, _ * $).floor() + } + , + this.setDrawingBufferSize = function(A, t, i) { + X = A, + _ = t, + $ = i, + e.width = Math.floor(A * i), + e.height = Math.floor(t * i), + this.setViewport(0, 0, A, t) + } + , + this.getCurrentViewport = function(A) { + return void 0 === A && (console.warn("WebGLRenderer: .getCurrentViewport() now requires a Vector4 as an argument"), + A = new p), + A.copy(J) + } + , + this.getViewport = function(A) { + return A.copy(tA) + } + , + this.setViewport = function(A, e, t, i) { + A.isVector4 ? tA.set(A.x, A.y, A.z, A.w) : tA.set(A, e, t, i), + v.viewport(J.copy(tA).multiplyScalar($).floor()) + } + , + this.getScissor = function(A) { + return A.copy(iA) + } + , + this.setScissor = function(A, e, t, i) { + A.isVector4 ? iA.set(A.x, A.y, A.z, A.w) : iA.set(A, e, t, i), + v.scissor(z.copy(iA).multiplyScalar($).floor()) + } + , + this.getScissorTest = function() { + return oA + } + , + this.setScissorTest = function(A) { + v.setScissorTest(oA = A) + } + , + this.setOpaqueSort = function(A) { + AA = A + } + , + this.setTransparentSort = function(A) { + eA = A + } + , + this.getClearColor = function() { + return K.getClearColor() + } + , + this.setClearColor = function() { + K.setClearColor.apply(K, arguments) + } + , + this.getClearAlpha = function() { + return K.getClearAlpha() + } + , + this.setClearAlpha = function() { + K.setClearAlpha.apply(K, arguments) + } + , + this.clear = function(A, e, t) { + var i = 0; + (void 0 === A || A) && (i |= 16384), + (void 0 === e || e) && (i |= 256), + (void 0 === t || t) && (i |= 1024), + f.clear(i) + } + , + this.clearColor = function() { + this.clear(!0, !1, !1) + } + , + this.clearDepth = function() { + this.clear(!1, !0, !1) + } + , + this.clearStencil = function() { + this.clear(!1, !1, !0) + } + , + this.dispose = function() { + e.removeEventListener("webglcontextlost", fA, !1), + e.removeEventListener("webglcontextrestored", mA, !1), + U.dispose(), + F.dispose(), + E.dispose(), + w.dispose(), + gA.dispose(), + EA.stop(), + this.forceContextLoss() + } + , + this.renderBufferImmediate = function(A, e) { + v.initAttributes(); + var t = E.get(A); + A.hasPositions && !t.position && (t.position = f.createBuffer()), + A.hasNormals && !t.normal && (t.normal = f.createBuffer()), + A.hasUvs && !t.uv && (t.uv = f.createBuffer()), + A.hasColors && !t.color && (t.color = f.createBuffer()); + var i = e.getAttributes(); + A.hasPositions && (f.bindBuffer(34962, t.position), + f.bufferData(34962, A.positionArray, 35048), + v.enableAttribute(i.position), + f.vertexAttribPointer(i.position, 3, 5126, !1, 0, 0)), + A.hasNormals && (f.bindBuffer(34962, t.normal), + f.bufferData(34962, A.normalArray, 35048), + v.enableAttribute(i.normal), + f.vertexAttribPointer(i.normal, 3, 5126, !1, 0, 0)), + A.hasUvs && (f.bindBuffer(34962, t.uv), + f.bufferData(34962, A.uvArray, 35048), + v.enableAttribute(i.uv), + f.vertexAttribPointer(i.uv, 2, 5126, !1, 0, 0)), + A.hasColors && (f.bindBuffer(34962, t.color), + f.bufferData(34962, A.colorArray, 35048), + v.enableAttribute(i.color), + f.vertexAttribPointer(i.color, 3, 5126, !1, 0, 0)), + v.disableUnusedAttributes(), + f.drawArrays(4, 0, A.count), + A.count = 0 + } + ; + var vA = new Y; + this.renderBufferDirect = function(A, e, t, i, o, n) { + null === e && (e = vA); + var r = o.isMesh && 0 > o.matrixWorld.determinant() + , a = MA(A, e, i, o); + v.setMaterial(i, r); + var s = !1; + j.geometry === t.id && j.program === a.id && j.wireframe === (!0 === i.wireframe) || (j.geometry = t.id, + j.program = a.id, + j.wireframe = !0 === i.wireframe, + s = !0), + (i.morphTargets || i.morphNormals) && (Q.update(o, t, i, a), + s = !0); + var l = t.index + , c = t.attributes.position; + if (null === l) { + if (void 0 === c || 0 === c.count) + return + } else if (0 === l.count) + return; + var h, d = 1; + !0 === i.wireframe && (l = S.getWireframeAttribute(t), + d = 2); + var p = R; + null !== l && (h = x.get(l), + (p = T).setIndex(h)), + s && (!function(A, e, t, i) { + if (!1 === C.isWebGL2 && (A.isInstancedMesh || e.isInstancedBufferGeometry) && null === m.get("ANGLE_instanced_arrays")) + return; + v.initAttributes(); + var o = e.attributes + , n = i.getAttributes() + , r = t.defaultAttributeValues; + for (var a in n) { + var s = n[a]; + if (s >= 0) { + var l = o[a]; + if (void 0 !== l) { + var c = l.normalized + , h = l.itemSize; + if (void 0 === (E = x.get(l))) + continue; + var d = E.buffer + , p = E.type + , g = E.bytesPerElement; + if (l.isInterleavedBufferAttribute) { + var u = l.data + , y = u.stride + , I = l.offset; + u && u.isInstancedInterleavedBuffer ? (v.enableAttributeAndDivisor(s, u.meshPerAttribute), + void 0 === e.maxInstancedCount && (e.maxInstancedCount = u.meshPerAttribute * u.count)) : v.enableAttribute(s), + f.bindBuffer(34962, d), + f.vertexAttribPointer(s, h, p, c, y * g, I * g) + } else + l.isInstancedBufferAttribute ? (v.enableAttributeAndDivisor(s, l.meshPerAttribute), + void 0 === e.maxInstancedCount && (e.maxInstancedCount = l.meshPerAttribute * l.count)) : v.enableAttribute(s), + f.bindBuffer(34962, d), + f.vertexAttribPointer(s, h, p, c, 0, 0) + } else if ("instanceMatrix" === a) { + var E; + if (void 0 === (E = x.get(A.instanceMatrix))) + continue; + d = E.buffer, + p = E.type; + v.enableAttributeAndDivisor(s + 0, 1), + v.enableAttributeAndDivisor(s + 1, 1), + v.enableAttributeAndDivisor(s + 2, 1), + v.enableAttributeAndDivisor(s + 3, 1), + f.bindBuffer(34962, d), + f.vertexAttribPointer(s + 0, 4, p, !1, 64, 0), + f.vertexAttribPointer(s + 1, 4, p, !1, 64, 16), + f.vertexAttribPointer(s + 2, 4, p, !1, 64, 32), + f.vertexAttribPointer(s + 3, 4, p, !1, 64, 48) + } else if (void 0 !== r) { + var B = r[a]; + if (void 0 !== B) + switch (B.length) { + case 2: + f.vertexAttrib2fv(s, B); + break; + case 3: + f.vertexAttrib3fv(s, B); + break; + case 4: + f.vertexAttrib4fv(s, B); + break; + default: + f.vertexAttrib1fv(s, B) + } + } + } + } + v.disableUnusedAttributes() + }(o, t, i, a), + null !== l && f.bindBuffer(34963, h.buffer)); + var g = null !== l ? l.count : c.count + , u = t.drawRange.start * d + , y = t.drawRange.count * d + , I = null !== n ? n.start * d : 0 + , E = null !== n ? n.count * d : 1 / 0 + , B = Math.max(u, I) + , w = Math.min(g, u + y, I + E) - 1 + , M = Math.max(0, w - B + 1); + if (0 !== M) { + if (o.isMesh) + !0 === i.wireframe ? (v.setLineWidth(i.wireframeLinewidth * hA()), + p.setMode(1)) : p.setMode(4); + else if (o.isLine) { + var b = i.linewidth; + void 0 === b && (b = 1), + v.setLineWidth(b * hA()), + p.setMode(o.isLineSegments ? 1 : o.isLineLoop ? 2 : 3) + } else + o.isPoints ? p.setMode(0) : o.isSprite && p.setMode(4); + o.isInstancedMesh ? p.renderInstances(t, B, M, o.count) : t.isInstancedBufferGeometry ? p.renderInstances(t, B, M, t.maxInstancedCount) : p.render(B, M) + } + } + , + this.compile = function(A, e) { + (u = F.get(A, e)).init(), + A.traverse((function(A) { + A.isLight && (u.pushLight(A), + A.castShadow && u.pushShadow(A)) + } + )), + u.setupLights(e); + var t = {}; + A.traverse((function(e) { + if (e.material) + if (Array.isArray(e.material)) + for (var i = 0; e.material.length > i; i++) + e.material[i].uuid in t == !1 && (wA(e.material[i], A, e), + t[e.material[i].uuid] = !0); + else + e.material.uuid in t == !1 && (wA(e.material, A, e), + t[e.material.uuid] = !0) + } + )) + } + ; + var IA = null; + var EA = new _e; + function BA(A, e, t, i) { + if (!1 !== A.visible) { + if (A.layers.test(e.layers)) + if (A.isGroup) + t = A.renderOrder; + else if (A.isLOD) + !0 === A.autoUpdate && A.update(e); + else if (A.isLight) + u.pushLight(A), + A.castShadow && u.pushShadow(A); + else if (A.isSprite) { + if (!A.frustumCulled || nA.intersectsSprite(A)) { + i && cA.setFromMatrixPosition(A.matrixWorld).applyMatrix4(lA); + var o = w.update(A); + (n = A.material).visible && g.push(A, o, n, t, cA.z, null) + } + } else if (A.isImmediateRenderObject) + i && cA.setFromMatrixPosition(A.matrixWorld).applyMatrix4(lA), + g.push(A, null, A.material, t, cA.z, null); + else if ((A.isMesh || A.isLine || A.isPoints) && (A.isSkinnedMesh && A.skeleton.frame !== I.render.frame && (A.skeleton.update(), + A.skeleton.frame = I.render.frame), + !A.frustumCulled || nA.intersectsObject(A))) { + i && cA.setFromMatrixPosition(A.matrixWorld).applyMatrix4(lA); + o = w.update(A); + var n = A.material; + if (Array.isArray(n)) + for (var r = o.groups, a = 0, s = r.length; s > a; a++) { + var l = r[a] + , c = n[l.materialIndex]; + c && c.visible && g.push(A, o, c, t, cA.z, l) + } + else + n.visible && g.push(A, o, n, t, cA.z, null) + } + var h = A.children; + for (a = 0, + s = h.length; s > a; a++) + BA(h[a], e, t, i) + } + } + function xA(A, e, t, i) { + for (var o = 0, n = A.length; n > o; o++) { + var r = A[o] + , a = r.object + , s = r.geometry + , l = void 0 === i ? r.material : i + , c = r.group; + if (t.isArrayCamera) { + W = t; + for (var h = t.cameras, d = 0, p = h.length; p > d; d++) { + var g = h[d]; + a.layers.test(g.layers) && (v.viewport(J.copy(g.viewport)), + u.setupLights(g), + SA(a, e, g, s, l, c)) + } + } else + W = null, + SA(a, e, t, s, l, c) + } + } + function SA(A, e, t, i, o, n) { + if (A.onBeforeRender(D, e, t, i, o, n), + u = F.get(e, W || t), + A.modelViewMatrix.multiplyMatrices(t.matrixWorldInverse, A.matrixWorld), + A.normalMatrix.getNormalMatrix(A.modelViewMatrix), + A.isImmediateRenderObject) { + var r = MA(t, e, o, A); + v.setMaterial(o), + j.geometry = null, + j.program = null, + j.wireframe = !1, + function(A, e) { + A.render((function(A) { + D.renderBufferImmediate(A, e) + } + )) + }(A, r) + } else + D.renderBufferDirect(t, e, i, o, A, n); + A.onAfterRender(D, e, t, i, o, n), + u = F.get(e, W || t) + } + function wA(A, e, t) { + var i = E.get(A) + , o = u.state.lights + , n = o.state.version + , r = b.getParameters(A, o.state, u.state.shadowsArray, e, rA.numPlanes, rA.numIntersection, t) + , a = b.getProgramCacheKey(r) + , s = i.program + , l = !0; + if (void 0 === s) + A.addEventListener("dispose", CA); + else if (s.cacheKey !== a) + yA(A); + else if (i.lightsStateVersion !== n) + i.lightsStateVersion = n, + l = !1; + else { + if (void 0 !== r.shaderID) + return; + l = !1 + } + l && (s = b.acquireProgram(r, a), + i.program = s, + i.uniforms = r.uniforms, + i.environment = A.isMeshStandardMaterial ? e.environment : null, + i.outputEncoding = D.outputEncoding, + A.program = s); + var c = s.getAttributes(); + if (A.morphTargets) { + A.numSupportedMorphTargets = 0; + for (var h = 0; D.maxMorphTargets > h; h++) + 0 > c["morphTarget" + h] || A.numSupportedMorphTargets++ + } + if (A.morphNormals) { + A.numSupportedMorphNormals = 0; + for (h = 0; D.maxMorphNormals > h; h++) + 0 > c["morphNormal" + h] || A.numSupportedMorphNormals++ + } + var d = i.uniforms; + (A.isShaderMaterial || A.isRawShaderMaterial) && !0 !== A.clipping || (i.numClippingPlanes = rA.numPlanes, + i.numIntersection = rA.numIntersection, + d.clippingPlanes = rA.uniform), + i.fog = e.fog, + i.needsLights = function(A) { + return A.isMeshLambertMaterial || A.isMeshToonMaterial || A.isMeshPhongMaterial || A.isMeshStandardMaterial || A.isShadowMaterial || A.isShaderMaterial && !0 === A.lights + }(A), + i.lightsStateVersion = n, + i.needsLights && (d.ambientLightColor.value = o.state.ambient, + d.lightProbe.value = o.state.probe, + d.directionalLights.value = o.state.directional, + d.directionalLightShadows.value = o.state.directionalShadow, + d.spotLights.value = o.state.spot, + d.spotLightShadows.value = o.state.spotShadow, + d.rectAreaLights.value = o.state.rectArea, + d.pointLights.value = o.state.point, + d.pointLightShadows.value = o.state.pointShadow, + d.hemisphereLights.value = o.state.hemi, + d.directionalShadowMap.value = o.state.directionalShadowMap, + d.directionalShadowMatrix.value = o.state.directionalShadowMatrix, + d.spotShadowMap.value = o.state.spotShadowMap, + d.spotShadowMatrix.value = o.state.spotShadowMatrix, + d.pointShadowMap.value = o.state.pointShadowMap, + d.pointShadowMatrix.value = o.state.pointShadowMatrix); + var p = i.program.getUniforms() + , g = di.seqWithValue(p.seq, d); + i.uniformsList = g + } + function MA(A, e, t, i) { + B.resetTextureUnits(); + var o = e.fog + , n = t.isMeshStandardMaterial ? e.environment : null + , r = E.get(t) + , s = u.state.lights; + aA && ((sA || A !== H) && rA.setState(t.clippingPlanes, t.clipIntersection, t.clipShadows, A, r, A === H && t.id === q)); + t.version === r.__version ? void 0 === r.program || t.fog && r.fog !== o || r.environment !== n || r.needsLights && r.lightsStateVersion !== s.state.version ? wA(t, e, i) : void 0 === r.numClippingPlanes || r.numClippingPlanes === rA.numPlanes && r.numIntersection === rA.numIntersection ? r.outputEncoding !== D.outputEncoding && wA(t, e, i) : wA(t, e, i) : (wA(t, e, i), + r.__version = t.version); + var l, c, h = !1, d = !1, p = !1, g = r.program, m = g.getUniforms(), y = r.uniforms; + if (v.useProgram(g.program) && (h = !0, + d = !0, + p = !0), + t.id !== q && (q = t.id, + d = !0), + h || H !== A) { + if (m.setValue(f, "projectionMatrix", A.projectionMatrix), + C.logarithmicDepthBuffer && m.setValue(f, "logDepthBufFC", 2 / (Math.log(A.far + 1) / Math.LN2)), + H !== A && (H = A, + d = !0, + p = !0), + t.isShaderMaterial || t.isMeshPhongMaterial || t.isMeshToonMaterial || t.isMeshStandardMaterial || t.envMap) { + var I = m.map.cameraPosition; + void 0 !== I && I.setValue(f, cA.setFromMatrixPosition(A.matrixWorld)) + } + (t.isMeshPhongMaterial || t.isMeshToonMaterial || t.isMeshLambertMaterial || t.isMeshBasicMaterial || t.isMeshStandardMaterial || t.isShaderMaterial) && m.setValue(f, "isOrthographic", !0 === A.isOrthographicCamera), + (t.isMeshPhongMaterial || t.isMeshToonMaterial || t.isMeshLambertMaterial || t.isMeshBasicMaterial || t.isMeshStandardMaterial || t.isShaderMaterial || t.skinning) && m.setValue(f, "viewMatrix", A.matrixWorldInverse) + } + if (t.skinning) { + m.setOptional(f, i, "bindMatrix"), + m.setOptional(f, i, "bindMatrixInverse"); + var x = i.skeleton; + if (x) + if (C.floatVertexTextures) { + if (void 0 === x.boneTexture) { + var S = Math.sqrt(4 * x.bones.length); + S = a.ceilPowerOfTwo(S), + S = Math.max(S, 4); + var w = new Float32Array(S * S * 4); + w.set(x.boneMatrices); + var M = new We(w,S,S,1023,1015); + x.boneMatrices = w, + x.boneTexture = M, + x.boneTextureSize = S + } + m.setValue(f, "boneTexture", x.boneTexture, B), + m.setValue(f, "boneTextureSize", x.boneTextureSize) + } else + m.setOptional(f, x, "boneMatrices") + } + return (d || r.receiveShadow !== i.receiveShadow) && (r.receiveShadow = i.receiveShadow, + m.setValue(f, "receiveShadow", i.receiveShadow)), + d && (m.setValue(f, "toneMappingExposure", D.toneMappingExposure), + m.setValue(f, "toneMappingWhitePoint", D.toneMappingWhitePoint), + r.needsLights && ((l = y).ambientLightColor.needsUpdate = c = p, + l.lightProbe.needsUpdate = c, + l.directionalLights.needsUpdate = c, + l.directionalLightShadows.needsUpdate = c, + l.pointLights.needsUpdate = c, + l.pointLightShadows.needsUpdate = c, + l.spotLights.needsUpdate = c, + l.spotLightShadows.needsUpdate = c, + l.rectAreaLights.needsUpdate = c, + l.hemisphereLights.needsUpdate = c), + o && t.fog && function(A, e) { + A.fogColor.value.copy(e.color), + e.isFog ? (A.fogNear.value = e.near, + A.fogFar.value = e.far) : e.isFogExp2 && (A.fogDensity.value = e.density) + }(y, o), + t.isMeshBasicMaterial ? bA(y, t) : t.isMeshLambertMaterial ? (bA(y, t), + function(A, e) { + e.emissiveMap && (A.emissiveMap.value = e.emissiveMap) + }(y, t)) : t.isMeshToonMaterial ? (bA(y, t), + function(A, e) { + A.specular.value.copy(e.specular), + A.shininess.value = Math.max(e.shininess, 1e-4), + e.gradientMap && (A.gradientMap.value = e.gradientMap); + e.emissiveMap && (A.emissiveMap.value = e.emissiveMap); + e.bumpMap && (A.bumpMap.value = e.bumpMap, + A.bumpScale.value = e.bumpScale, + 1 === e.side && (A.bumpScale.value *= -1)); + e.normalMap && (A.normalMap.value = e.normalMap, + A.normalScale.value.copy(e.normalScale), + 1 === e.side && A.normalScale.value.negate()); + e.displacementMap && (A.displacementMap.value = e.displacementMap, + A.displacementScale.value = e.displacementScale, + A.displacementBias.value = e.displacementBias) + }(y, t)) : t.isMeshPhongMaterial ? (bA(y, t), + function(A, e) { + A.specular.value.copy(e.specular), + A.shininess.value = Math.max(e.shininess, 1e-4), + e.emissiveMap && (A.emissiveMap.value = e.emissiveMap); + e.bumpMap && (A.bumpMap.value = e.bumpMap, + A.bumpScale.value = e.bumpScale, + 1 === e.side && (A.bumpScale.value *= -1)); + e.normalMap && (A.normalMap.value = e.normalMap, + A.normalScale.value.copy(e.normalScale), + 1 === e.side && A.normalScale.value.negate()); + e.displacementMap && (A.displacementMap.value = e.displacementMap, + A.displacementScale.value = e.displacementScale, + A.displacementBias.value = e.displacementBias) + }(y, t)) : t.isMeshStandardMaterial ? (bA(y, t, n), + t.isMeshPhysicalMaterial ? function(A, e, t) { + UA(A, e, t), + A.reflectivity.value = e.reflectivity, + A.clearcoat.value = e.clearcoat, + A.clearcoatRoughness.value = e.clearcoatRoughness, + e.sheen && A.sheen.value.copy(e.sheen); + e.clearcoatMap && (A.clearcoatMap.value = e.clearcoatMap); + e.clearcoatRoughnessMap && (A.clearcoatRoughnessMap.value = e.clearcoatRoughnessMap); + e.clearcoatNormalMap && (A.clearcoatNormalScale.value.copy(e.clearcoatNormalScale), + A.clearcoatNormalMap.value = e.clearcoatNormalMap, + 1 === e.side && A.clearcoatNormalScale.value.negate()); + A.transparency.value = e.transparency + }(y, t, n) : UA(y, t, n)) : t.isMeshMatcapMaterial ? (bA(y, t), + function(A, e) { + e.matcap && (A.matcap.value = e.matcap); + e.bumpMap && (A.bumpMap.value = e.bumpMap, + A.bumpScale.value = e.bumpScale, + 1 === e.side && (A.bumpScale.value *= -1)); + e.normalMap && (A.normalMap.value = e.normalMap, + A.normalScale.value.copy(e.normalScale), + 1 === e.side && A.normalScale.value.negate()); + e.displacementMap && (A.displacementMap.value = e.displacementMap, + A.displacementScale.value = e.displacementScale, + A.displacementBias.value = e.displacementBias) + }(y, t)) : t.isMeshDepthMaterial ? (bA(y, t), + function(A, e) { + e.displacementMap && (A.displacementMap.value = e.displacementMap, + A.displacementScale.value = e.displacementScale, + A.displacementBias.value = e.displacementBias) + }(y, t)) : t.isMeshDistanceMaterial ? (bA(y, t), + function(A, e) { + e.displacementMap && (A.displacementMap.value = e.displacementMap, + A.displacementScale.value = e.displacementScale, + A.displacementBias.value = e.displacementBias); + A.referencePosition.value.copy(e.referencePosition), + A.nearDistance.value = e.nearDistance, + A.farDistance.value = e.farDistance + }(y, t)) : t.isMeshNormalMaterial ? (bA(y, t), + function(A, e) { + e.bumpMap && (A.bumpMap.value = e.bumpMap, + A.bumpScale.value = e.bumpScale, + 1 === e.side && (A.bumpScale.value *= -1)); + e.normalMap && (A.normalMap.value = e.normalMap, + A.normalScale.value.copy(e.normalScale), + 1 === e.side && A.normalScale.value.negate()); + e.displacementMap && (A.displacementMap.value = e.displacementMap, + A.displacementScale.value = e.displacementScale, + A.displacementBias.value = e.displacementBias) + }(y, t)) : t.isLineBasicMaterial ? (function(A, e) { + A.diffuse.value.copy(e.color), + A.opacity.value = e.opacity + }(y, t), + t.isLineDashedMaterial && function(A, e) { + A.dashSize.value = e.dashSize, + A.totalSize.value = e.dashSize + e.gapSize, + A.scale.value = e.scale + }(y, t)) : t.isPointsMaterial ? function(A, e) { + A.diffuse.value.copy(e.color), + A.opacity.value = e.opacity, + A.size.value = e.size * $, + A.scale.value = .5 * _, + e.map && (A.map.value = e.map); + e.alphaMap && (A.alphaMap.value = e.alphaMap); + var t; + e.map ? t = e.map : e.alphaMap && (t = e.alphaMap); + void 0 !== t && (!0 === t.matrixAutoUpdate && t.updateMatrix(), + A.uvTransform.value.copy(t.matrix)) + }(y, t) : t.isSpriteMaterial ? function(A, e) { + A.diffuse.value.copy(e.color), + A.opacity.value = e.opacity, + A.rotation.value = e.rotation, + e.map && (A.map.value = e.map); + e.alphaMap && (A.alphaMap.value = e.alphaMap); + var t; + e.map ? t = e.map : e.alphaMap && (t = e.alphaMap); + void 0 !== t && (!0 === t.matrixAutoUpdate && t.updateMatrix(), + A.uvTransform.value.copy(t.matrix)) + }(y, t) : t.isShadowMaterial && (y.color.value.copy(t.color), + y.opacity.value = t.opacity), + void 0 !== y.ltc_1 && (y.ltc_1.value = Xe.LTC_1), + void 0 !== y.ltc_2 && (y.ltc_2.value = Xe.LTC_2), + di.upload(f, r.uniformsList, y, B), + t.isShaderMaterial && (t.uniformsNeedUpdate = !1)), + t.isShaderMaterial && !0 === t.uniformsNeedUpdate && (di.upload(f, r.uniformsList, y, B), + t.uniformsNeedUpdate = !1), + t.isSpriteMaterial && m.setValue(f, "center", i.center), + m.setValue(f, "modelViewMatrix", i.modelViewMatrix), + m.setValue(f, "normalMatrix", i.normalMatrix), + m.setValue(f, "modelMatrix", i.matrixWorld), + g + } + function bA(A, e, t) { + A.opacity.value = e.opacity, + e.color && A.diffuse.value.copy(e.color), + e.emissive && A.emissive.value.copy(e.emissive).multiplyScalar(e.emissiveIntensity), + e.map && (A.map.value = e.map), + e.alphaMap && (A.alphaMap.value = e.alphaMap), + e.specularMap && (A.specularMap.value = e.specularMap); + var i, o, n = e.envMap || t; + n && (A.envMap.value = n, + A.flipEnvMap.value = n.isCubeTexture ? -1 : 1, + A.reflectivity.value = e.reflectivity, + A.refractionRatio.value = e.refractionRatio, + A.maxMipLevel.value = E.get(n).__maxMipLevel), + e.lightMap && (A.lightMap.value = e.lightMap, + A.lightMapIntensity.value = e.lightMapIntensity), + e.aoMap && (A.aoMap.value = e.aoMap, + A.aoMapIntensity.value = e.aoMapIntensity), + e.map ? i = e.map : e.specularMap ? i = e.specularMap : e.displacementMap ? i = e.displacementMap : e.normalMap ? i = e.normalMap : e.bumpMap ? i = e.bumpMap : e.roughnessMap ? i = e.roughnessMap : e.metalnessMap ? i = e.metalnessMap : e.alphaMap ? i = e.alphaMap : e.emissiveMap && (i = e.emissiveMap), + void 0 !== i && (i.isWebGLRenderTarget && (i = i.texture), + !0 === i.matrixAutoUpdate && i.updateMatrix(), + A.uvTransform.value.copy(i.matrix)), + e.aoMap ? o = e.aoMap : e.lightMap && (o = e.lightMap), + void 0 !== o && (o.isWebGLRenderTarget && (o = o.texture), + !0 === o.matrixAutoUpdate && o.updateMatrix(), + A.uv2Transform.value.copy(o.matrix)) + } + function UA(A, e, t) { + A.roughness.value = e.roughness, + A.metalness.value = e.metalness, + e.roughnessMap && (A.roughnessMap.value = e.roughnessMap), + e.metalnessMap && (A.metalnessMap.value = e.metalnessMap), + e.emissiveMap && (A.emissiveMap.value = e.emissiveMap), + e.bumpMap && (A.bumpMap.value = e.bumpMap, + A.bumpScale.value = e.bumpScale, + 1 === e.side && (A.bumpScale.value *= -1)), + e.normalMap && (A.normalMap.value = e.normalMap, + A.normalScale.value.copy(e.normalScale), + 1 === e.side && A.normalScale.value.negate()), + e.displacementMap && (A.displacementMap.value = e.displacementMap, + A.displacementScale.value = e.displacementScale, + A.displacementBias.value = e.displacementBias), + (e.envMap || t) && (A.envMapIntensity.value = e.envMapIntensity) + } + EA.setAnimationLoop((function(A) { + gA.isPresenting || IA && IA(A) + } + )), + "undefined" != typeof window && EA.setContext(window), + this.setAnimationLoop = function(A) { + IA = A, + gA.setAnimationLoop(A), + EA.start() + } + , + this.render = function(A, e) { + var t, i; + if (void 0 !== arguments[2] && (console.warn("THREE.WebGLRenderer.render(): the renderTarget argument has been removed. Use .setRenderTarget() instead."), + t = arguments[2]), + void 0 !== arguments[3] && (console.warn("THREE.WebGLRenderer.render(): the forceClear argument has been removed. Use .clear() instead."), + i = arguments[3]), + e && e.isCamera) { + if (!L) { + j.geometry = null, + j.program = null, + j.wireframe = !1, + q = -1, + H = null, + !0 === A.autoUpdate && A.updateMatrixWorld(), + null === e.parent && e.updateMatrixWorld(), + gA.enabled && gA.isPresenting && (e = gA.getCamera(e)), + (u = F.get(A, e)).init(), + A.onBeforeRender(D, A, e, t || G), + lA.multiplyMatrices(e.projectionMatrix, e.matrixWorldInverse), + nA.setFromProjectionMatrix(lA), + aA = rA.init(this.clippingPlanes, sA = this.localClippingEnabled, e), + (g = U.get(A, e)).init(), + BA(A, e, 0, D.sortObjects), + g.finish(), + !0 === D.sortObjects && g.sort(AA, eA), + aA && rA.beginShadows(); + var o = u.state.shadowsArray; + uA.render(o, A, e), + u.setupLights(e), + aA && rA.endShadows(), + this.info.autoReset && this.info.reset(), + void 0 !== t && this.setRenderTarget(t), + K.render(g, A, e, i); + var n = g.opaque + , r = g.transparent; + if (A.overrideMaterial) { + var a = A.overrideMaterial; + n.length && xA(n, A, e, a), + r.length && xA(r, A, e, a) + } else + n.length && xA(n, A, e), + r.length && xA(r, A, e); + A.onAfterRender(D, A, e), + null !== G && (B.updateRenderTargetMipmap(G), + B.updateMultisampleRenderTarget(G)), + v.buffers.depth.setTest(!0), + v.buffers.depth.setMask(!0), + v.buffers.color.setMask(!0), + v.setPolygonOffset(!1), + g = null, + u = null + } + } else + console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.") + } + , + this.setFramebuffer = function(A) { + N !== A && null === G && f.bindFramebuffer(36160, A), + N = A + } + , + this.getActiveCubeFace = function() { + return O + } + , + this.getActiveMipmapLevel = function() { + return V + } + , + this.getRenderTarget = function() { + return G + } + , + this.setRenderTarget = function(A, e, t) { + G = A, + O = e, + V = t, + A && void 0 === E.get(A).__webglFramebuffer && B.setupRenderTarget(A); + var i = N + , o = !1; + if (A) { + var n = E.get(A).__webglFramebuffer; + A.isWebGLCubeRenderTarget ? (i = n[e || 0], + o = !0) : i = A.isWebGLMultisampleRenderTarget ? E.get(A).__webglMultisampledFramebuffer : n, + J.copy(A.viewport), + z.copy(A.scissor), + Z = A.scissorTest + } else + J.copy(tA).multiplyScalar($).floor(), + z.copy(iA).multiplyScalar($).floor(), + Z = oA; + if (P !== i && (f.bindFramebuffer(36160, i), + P = i), + v.viewport(J), + v.scissor(z), + v.setScissorTest(Z), + o) { + var r = E.get(A.texture); + f.framebufferTexture2D(36160, 36064, 34069 + (e || 0), r.__webglTexture, t || 0) + } + } + , + this.readRenderTargetPixels = function(A, e, t, i, o, n, r) { + if (A && A.isWebGLRenderTarget) { + var a = E.get(A).__webglFramebuffer; + if (A.isWebGLCubeRenderTarget && void 0 !== r && (a = a[r]), + a) { + var s = !1; + a !== P && (f.bindFramebuffer(36160, a), + s = !0); + try { + var l = A.texture + , c = l.format + , h = l.type; + if (1023 !== c && k.convert(c) !== f.getParameter(35739)) + return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format."); + if (!(1009 === h || k.convert(h) === f.getParameter(35738) || 1015 === h && (C.isWebGL2 || m.get("OES_texture_float") || m.get("WEBGL_color_buffer_float")) || 1016 === h && m.get(C.isWebGL2 ? "EXT_color_buffer_float" : "EXT_color_buffer_half_float"))) + return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type."); + 36053 === f.checkFramebufferStatus(36160) ? 0 > e || e > A.width - i || 0 > t || t > A.height - o || f.readPixels(e, t, i, o, k.convert(c), k.convert(h), n) : console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.") + } finally { + s && f.bindFramebuffer(36160, P) + } + } + } else + console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.") + } + , + this.copyFramebufferToTexture = function(A, e, t) { + void 0 === t && (t = 0); + var i = Math.pow(2, -t) + , o = Math.floor(e.image.width * i) + , n = Math.floor(e.image.height * i) + , r = k.convert(e.format); + B.setTexture2D(e, 0), + f.copyTexImage2D(3553, t, r, A.x, A.y, o, n, 0), + v.unbindTexture() + } + , + this.copyTextureToTexture = function(A, e, t, i) { + var o = e.image.width + , n = e.image.height + , r = k.convert(t.format) + , a = k.convert(t.type); + B.setTexture2D(t, 0), + e.isDataTexture ? f.texSubImage2D(3553, i || 0, A.x, A.y, o, n, r, a, e.image.data) : f.texSubImage2D(3553, i || 0, A.x, A.y, r, a, e.image), + v.unbindTexture() + } + , + this.initTexture = function(A) { + B.setTexture2D(A, 0), + v.unbindTexture() + } + , + "undefined" != typeof __THREE_DEVTOOLS__ && __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{ + detail: this + })) + } + function Ao(A, e) { + this.name = "", + this.color = new LA(A), + this.density = void 0 !== e ? e : 25e-5 + } + function eo(A, e, t) { + this.name = "", + this.color = new LA(A), + this.near = void 0 !== e ? e : 1, + this.far = void 0 !== t ? t : 1e3 + } + function to(A, e) { + this.array = A, + this.stride = e, + this.count = void 0 !== A ? A.length / e : 0, + this.usage = 35044, + this.updateRange = { + offset: 0, + count: -1 + }, + this.version = 0 + } + Zi.prototype = Object.assign(Object.create(je.prototype), { + constructor: Zi, + isArrayCamera: !0 + }), + Xi.prototype = Object.assign(Object.create(H.prototype), { + constructor: Xi, + isGroup: !0 + }), + Object.assign(_i.prototype, i.prototype), + Object.assign(Ao.prototype, { + isFogExp2: !0, + clone: function() { + return new Ao(this.color,this.density) + }, + toJSON: function() { + return { + type: "FogExp2", + color: this.color.getHex(), + density: this.density + } + } + }), + Object.assign(eo.prototype, { + isFog: !0, + clone: function() { + return new eo(this.color,this.near,this.far) + }, + toJSON: function() { + return { + type: "Fog", + color: this.color.getHex(), + near: this.near, + far: this.far + } + } + }), + Object.defineProperty(to.prototype, "needsUpdate", { + set: function(A) { + !0 === A && this.version++ + } + }), + Object.assign(to.prototype, { + isInterleavedBuffer: !0, + onUploadCallback: function() {}, + setUsage: function(A) { + return this.usage = A, + this + }, + copy: function(A) { + return this.array = new A.array.constructor(A.array), + this.count = A.count, + this.stride = A.stride, + this.usage = A.usage, + this + }, + copyAt: function(A, e, t) { + A *= this.stride, + t *= e.stride; + for (var i = 0, o = this.stride; o > i; i++) + this.array[A + i] = e.array[t + i]; + return this + }, + set: function(A, e) { + return void 0 === e && (e = 0), + this.array.set(A, e), + this + }, + clone: function() { + return (new this.constructor).copy(this) + }, + onUpload: function(A) { + return this.onUploadCallback = A, + this + } + }); + var io, oo = new y; + function no(A, e, t, i) { + this.data = A, + this.itemSize = e, + this.offset = t, + this.normalized = !0 === i + } + function ro(A) { + qA.call(this), + this.type = "SpriteMaterial", + this.color = new LA(16777215), + this.map = null, + this.alphaMap = null, + this.rotation = 0, + this.sizeAttenuation = !0, + this.transparent = !0, + this.setValues(A) + } + Object.defineProperties(no.prototype, { + count: { + get: function() { + return this.data.count + } + }, + array: { + get: function() { + return this.data.array + } + } + }), + Object.assign(no.prototype, { + isInterleavedBufferAttribute: !0, + applyMatrix4: function(A) { + for (var e = 0, t = this.data.count; t > e; e++) + oo.x = this.getX(e), + oo.y = this.getY(e), + oo.z = this.getZ(e), + oo.applyMatrix4(A), + this.setXYZ(e, oo.x, oo.y, oo.z); + return this + }, + setX: function(A, e) { + return this.data.array[A * this.data.stride + this.offset] = e, + this + }, + setY: function(A, e) { + return this.data.array[A * this.data.stride + this.offset + 1] = e, + this + }, + setZ: function(A, e) { + return this.data.array[A * this.data.stride + this.offset + 2] = e, + this + }, + setW: function(A, e) { + return this.data.array[A * this.data.stride + this.offset + 3] = e, + this + }, + getX: function(A) { + return this.data.array[A * this.data.stride + this.offset] + }, + getY: function(A) { + return this.data.array[A * this.data.stride + this.offset + 1] + }, + getZ: function(A) { + return this.data.array[A * this.data.stride + this.offset + 2] + }, + getW: function(A) { + return this.data.array[A * this.data.stride + this.offset + 3] + }, + setXY: function(A, e, t) { + return this.data.array[(A = A * this.data.stride + this.offset) + 0] = e, + this.data.array[A + 1] = t, + this + }, + setXYZ: function(A, e, t, i) { + return this.data.array[(A = A * this.data.stride + this.offset) + 0] = e, + this.data.array[A + 1] = t, + this.data.array[A + 2] = i, + this + }, + setXYZW: function(A, e, t, i, o) { + return this.data.array[(A = A * this.data.stride + this.offset) + 0] = e, + this.data.array[A + 1] = t, + this.data.array[A + 2] = i, + this.data.array[A + 3] = o, + this + } + }), + (ro.prototype = Object.create(qA.prototype)).constructor = ro, + ro.prototype.isSpriteMaterial = !0, + ro.prototype.copy = function(A) { + return qA.prototype.copy.call(this, A), + this.color.copy(A.color), + this.map = A.map, + this.alphaMap = A.alphaMap, + this.rotation = A.rotation, + this.sizeAttenuation = A.sizeAttenuation, + this + } + ; + var ao = new y + , so = new y + , lo = new y + , co = new s + , ho = new s + , po = new M + , go = new y + , uo = new y + , fo = new y + , mo = new s + , Co = new s + , yo = new s; + function vo(A) { + if (H.call(this), + this.type = "Sprite", + void 0 === io) { + io = new he; + var e = new to(new Float32Array([-.5, -.5, 0, 0, 0, .5, -.5, 0, 1, 0, .5, .5, 0, 1, 1, -.5, .5, 0, 0, 1]),5); + io.setIndex([0, 1, 2, 0, 2, 3]), + io.setAttribute("position", new no(e,3,0,!1)), + io.setAttribute("uv", new no(e,2,3,!1)) + } + this.geometry = io, + this.material = void 0 !== A ? A : new ro, + this.center = new s(.5,.5) + } + function Io(A, e, t, i, o, n) { + co.subVectors(A, t).addScalar(.5).multiply(i), + void 0 !== o ? (ho.x = n * co.x - o * co.y, + ho.y = o * co.x + n * co.y) : ho.copy(co), + A.copy(e), + A.x += ho.x, + A.y += ho.y, + A.applyMatrix4(po) + } + vo.prototype = Object.assign(Object.create(H.prototype), { + constructor: vo, + isSprite: !0, + raycast: function(A, e) { + null === A.camera && console.error('THREE.Sprite: "Raycaster.camera" needs to be set in order to raycast against sprites.'), + so.setFromMatrixScale(this.matrixWorld), + po.copy(A.camera.matrixWorld), + this.modelViewMatrix.multiplyMatrices(A.camera.matrixWorldInverse, this.matrixWorld), + lo.setFromMatrixPosition(this.modelViewMatrix), + A.camera.isPerspectiveCamera && !1 === this.material.sizeAttenuation && so.multiplyScalar(-lo.z); + var t, i, o = this.material.rotation; + 0 !== o && (i = Math.cos(o), + t = Math.sin(o)); + var n = this.center; + Io(go.set(-.5, -.5, 0), lo, n, so, t, i), + Io(uo.set(.5, -.5, 0), lo, n, so, t, i), + Io(fo.set(.5, .5, 0), lo, n, so, t, i), + mo.set(0, 0), + Co.set(1, 0), + yo.set(1, 1); + var r = A.ray.intersectTriangle(go, uo, fo, !1, ao); + if (null !== r || (Io(uo.set(-.5, .5, 0), lo, n, so, t, i), + Co.set(0, 1), + null !== (r = A.ray.intersectTriangle(go, fo, uo, !1, ao)))) { + var a = A.ray.origin.distanceTo(ao); + A.near > a || a > A.far || e.push({ + distance: a, + point: ao.clone(), + uv: RA.getUV(ao, go, uo, fo, mo, Co, yo, new s), + face: null, + object: this + }) + } + }, + clone: function() { + return new this.constructor(this.material).copy(this) + }, + copy: function(A) { + return H.prototype.copy.call(this, A), + void 0 !== A.center && this.center.copy(A.center), + this + } + }); + var Eo = new y + , Bo = new y; + function xo() { + H.call(this), + this._currentLevel = 0, + this.type = "LOD", + Object.defineProperties(this, { + levels: { + enumerable: !0, + value: [] + } + }), + this.autoUpdate = !0 + } + function So(A, e) { + A && A.isGeometry && console.error("THREE.SkinnedMesh no longer supports THREE.Geometry. Use THREE.BufferGeometry instead."), + Ue.call(this, A, e), + this.type = "SkinnedMesh", + this.bindMode = "attached", + this.bindMatrix = new M, + this.bindMatrixInverse = new M + } + xo.prototype = Object.assign(Object.create(H.prototype), { + constructor: xo, + isLOD: !0, + copy: function(A) { + H.prototype.copy.call(this, A, !1); + for (var e = A.levels, t = 0, i = e.length; i > t; t++) { + var o = e[t]; + this.addLevel(o.object.clone(), o.distance) + } + return this.autoUpdate = A.autoUpdate, + this + }, + addLevel: function(A, e) { + void 0 === e && (e = 0), + e = Math.abs(e); + for (var t = this.levels, i = 0; t.length > i && t[i].distance <= e; i++) + ; + return t.splice(i, 0, { + distance: e, + object: A + }), + this.add(A), + this + }, + getCurrentLevel: function() { + return this._currentLevel + }, + getObjectForDistance: function(A) { + var e = this.levels; + if (e.length > 0) { + for (var t = 1, i = e.length; i > t && e[t].distance <= A; t++) + ; + return e[t - 1].object + } + return null + }, + raycast: function(A, e) { + if (this.levels.length > 0) { + Eo.setFromMatrixPosition(this.matrixWorld); + var t = A.ray.origin.distanceTo(Eo); + this.getObjectForDistance(t).raycast(A, e) + } + }, + update: function(A) { + var e = this.levels; + if (e.length > 1) { + Eo.setFromMatrixPosition(A.matrixWorld), + Bo.setFromMatrixPosition(this.matrixWorld); + var t = Eo.distanceTo(Bo) / A.zoom; + e[0].object.visible = !0; + for (var i = 1, o = e.length; o > i && e[i].distance <= t; i++) + e[i - 1].object.visible = !1, + e[i].object.visible = !0; + for (this._currentLevel = i - 1; o > i; i++) + e[i].object.visible = !1 + } + }, + toJSON: function(A) { + var e = H.prototype.toJSON.call(this, A); + !1 === this.autoUpdate && (e.object.autoUpdate = !1), + e.object.levels = []; + for (var t = this.levels, i = 0, o = t.length; o > i; i++) { + var n = t[i]; + e.object.levels.push({ + object: n.object.uuid, + distance: n.distance + }) + } + return e + } + }), + So.prototype = Object.assign(Object.create(Ue.prototype), { + constructor: So, + isSkinnedMesh: !0, + bind: function(A, e) { + this.skeleton = A, + void 0 === e && (this.updateMatrixWorld(!0), + this.skeleton.calculateInverses(), + e = this.matrixWorld), + this.bindMatrix.copy(e), + this.bindMatrixInverse.getInverse(e) + }, + pose: function() { + this.skeleton.pose() + }, + normalizeSkinWeights: function() { + for (var A = new p, e = this.geometry.attributes.skinWeight, t = 0, i = e.count; i > t; t++) { + A.x = e.getX(t), + A.y = e.getY(t), + A.z = e.getZ(t), + A.w = e.getW(t); + var o = 1 / A.manhattanLength(); + o !== 1 / 0 ? A.multiplyScalar(o) : A.set(1, 0, 0, 0), + e.setXYZW(t, A.x, A.y, A.z, A.w) + } + }, + updateMatrixWorld: function(A) { + Ue.prototype.updateMatrixWorld.call(this, A), + "attached" === this.bindMode ? this.bindMatrixInverse.getInverse(this.matrixWorld) : "detached" === this.bindMode ? this.bindMatrixInverse.getInverse(this.bindMatrix) : console.warn("THREE.SkinnedMesh: Unrecognized bindMode: " + this.bindMode) + }, + clone: function() { + return new this.constructor(this.geometry,this.material).copy(this) + } + }); + var wo = new M + , Mo = new M; + function bo(A, e) { + if (this.bones = (A = A || []).slice(0), + this.boneMatrices = new Float32Array(16 * this.bones.length), + this.frame = -1, + void 0 === e) + this.calculateInverses(); + else if (this.bones.length === e.length) + this.boneInverses = e.slice(0); + else { + console.warn("THREE.Skeleton boneInverses is the wrong length."), + this.boneInverses = []; + for (var t = 0, i = this.bones.length; i > t; t++) + this.boneInverses.push(new M) + } + } + function Uo() { + H.call(this), + this.type = "Bone" + } + Object.assign(bo.prototype, { + calculateInverses: function() { + this.boneInverses = []; + for (var A = 0, e = this.bones.length; e > A; A++) { + var t = new M; + this.bones[A] && t.getInverse(this.bones[A].matrixWorld), + this.boneInverses.push(t) + } + }, + pose: function() { + var A, e, t; + for (e = 0, + t = this.bones.length; t > e; e++) + (A = this.bones[e]) && A.matrixWorld.getInverse(this.boneInverses[e]); + for (e = 0, + t = this.bones.length; t > e; e++) + (A = this.bones[e]) && (A.parent && A.parent.isBone ? (A.matrix.getInverse(A.parent.matrixWorld), + A.matrix.multiply(A.matrixWorld)) : A.matrix.copy(A.matrixWorld), + A.matrix.decompose(A.position, A.quaternion, A.scale)) + }, + update: function() { + for (var A = this.bones, e = this.boneInverses, t = this.boneMatrices, i = this.boneTexture, o = 0, n = A.length; n > o; o++) { + wo.multiplyMatrices(A[o] ? A[o].matrixWorld : Mo, e[o]), + wo.toArray(t, 16 * o) + } + void 0 !== i && (i.needsUpdate = !0) + }, + clone: function() { + return new bo(this.bones,this.boneInverses) + }, + getBoneByName: function(A) { + for (var e = 0, t = this.bones.length; t > e; e++) { + var i = this.bones[e]; + if (i.name === A) + return i + } + }, + dispose: function() { + this.boneTexture && (this.boneTexture.dispose(), + this.boneTexture = void 0) + } + }), + Uo.prototype = Object.assign(Object.create(H.prototype), { + constructor: Uo, + isBone: !0 + }); + var Fo = new M + , Ko = new M + , Qo = [] + , Ro = new Ue; + function To(A, e, t) { + Ue.call(this, A, e), + this.instanceMatrix = new YA(new Float32Array(16 * t),16), + this.count = t, + this.frustumCulled = !1 + } + function ko(A) { + qA.call(this), + this.type = "LineBasicMaterial", + this.color = new LA(16777215), + this.linewidth = 1, + this.linecap = "round", + this.linejoin = "round", + this.setValues(A) + } + To.prototype = Object.assign(Object.create(Ue.prototype), { + constructor: To, + isInstancedMesh: !0, + getMatrixAt: function(A, e) { + e.fromArray(this.instanceMatrix.array, 16 * A) + }, + raycast: function(A, e) { + var t = this.matrixWorld + , i = this.count; + if (Ro.geometry = this.geometry, + Ro.material = this.material, + void 0 !== Ro.material) + for (var o = 0; i > o; o++) + this.getMatrixAt(o, Fo), + Ko.multiplyMatrices(t, Fo), + Ro.matrixWorld = Ko, + Ro.raycast(A, Qo), + Qo.length > 0 && (Qo[0].instanceId = o, + Qo[0].object = this, + e.push(Qo[0]), + Qo.length = 0) + }, + setMatrixAt: function(A, e) { + e.toArray(this.instanceMatrix.array, 16 * A) + }, + updateMorphTargets: function() {} + }), + (ko.prototype = Object.create(qA.prototype)).constructor = ko, + ko.prototype.isLineBasicMaterial = !0, + ko.prototype.copy = function(A) { + return qA.prototype.copy.call(this, A), + this.color.copy(A.color), + this.linewidth = A.linewidth, + this.linecap = A.linecap, + this.linejoin = A.linejoin, + this + } + ; + var Do = new y + , Lo = new y + , No = new M + , Oo = new CA + , Vo = new cA; + function Go(A, e, t) { + 1 === t && console.error("THREE.Line: parameter THREE.LinePieces no longer supported. Use THREE.LineSegments instead."), + H.call(this), + this.type = "Line", + this.geometry = void 0 !== A ? A : new he, + this.material = void 0 !== e ? e : new ko + } + Go.prototype = Object.assign(Object.create(H.prototype), { + constructor: Go, + isLine: !0, + computeLineDistances: function() { + var A = this.geometry; + if (A.isBufferGeometry) + if (null === A.index) { + for (var e = A.attributes.position, t = [0], i = 1, o = e.count; o > i; i++) + Do.fromBufferAttribute(e, i - 1), + Lo.fromBufferAttribute(e, i), + t[i] = t[i - 1], + t[i] += Do.distanceTo(Lo); + A.setAttribute("lineDistance", new Ae(t,1)) + } else + console.warn("THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry."); + else if (A.isGeometry) { + var n = A.vertices; + (t = A.lineDistances)[0] = 0; + for (i = 1, + o = n.length; o > i; i++) + t[i] = t[i - 1], + t[i] += n[i - 1].distanceTo(n[i]) + } + return this + }, + raycast: function(A, e) { + var t = this.geometry + , i = this.matrixWorld + , o = A.params.Line.threshold; + if (null === t.boundingSphere && t.computeBoundingSphere(), + Vo.copy(t.boundingSphere), + Vo.applyMatrix4(i), + Vo.radius += o, + !1 !== A.ray.intersectsSphere(Vo)) { + No.getInverse(i), + Oo.copy(A.ray).applyMatrix4(No); + var n = o / ((this.scale.x + this.scale.y + this.scale.z) / 3) + , r = n * n + , a = new y + , s = new y + , l = new y + , c = new y + , h = this && this.isLineSegments ? 2 : 1; + if (t.isBufferGeometry) { + var d = t.index + , p = t.attributes.position.array; + if (null !== d) + for (var g = d.array, u = 0, f = g.length - 1; f > u; u += h) { + var m = g[u + 1]; + if (a.fromArray(p, 3 * g[u]), + s.fromArray(p, 3 * m), + r >= Oo.distanceSqToSegment(a, s, c, l)) { + c.applyMatrix4(this.matrixWorld); + var C = A.ray.origin.distanceTo(c); + A.near > C || C > A.far || e.push({ + distance: C, + point: l.clone().applyMatrix4(this.matrixWorld), + index: u, + face: null, + faceIndex: null, + object: this + }) + } + } + else + for (u = 0, + f = p.length / 3 - 1; f > u; u += h) { + if (a.fromArray(p, 3 * u), + s.fromArray(p, 3 * u + 3), + r >= Oo.distanceSqToSegment(a, s, c, l)) { + c.applyMatrix4(this.matrixWorld); + C = A.ray.origin.distanceTo(c); + A.near > C || C > A.far || e.push({ + distance: C, + point: l.clone().applyMatrix4(this.matrixWorld), + index: u, + face: null, + faceIndex: null, + object: this + }) + } + } + } else if (t.isGeometry) { + var v = t.vertices + , I = v.length; + for (u = 0; I - 1 > u; u += h) { + if (r >= Oo.distanceSqToSegment(v[u], v[u + 1], c, l)) { + c.applyMatrix4(this.matrixWorld); + C = A.ray.origin.distanceTo(c); + A.near > C || C > A.far || e.push({ + distance: C, + point: l.clone().applyMatrix4(this.matrixWorld), + index: u, + face: null, + faceIndex: null, + object: this + }) + } + } + } + } + }, + clone: function() { + return new this.constructor(this.geometry,this.material).copy(this) + } + }); + var Po = new y + , qo = new y; + function jo(A, e) { + Go.call(this, A, e), + this.type = "LineSegments" + } + function Ho(A, e) { + Go.call(this, A, e), + this.type = "LineLoop" + } + function Yo(A) { + qA.call(this), + this.type = "PointsMaterial", + this.color = new LA(16777215), + this.map = null, + this.alphaMap = null, + this.size = 1, + this.sizeAttenuation = !0, + this.morphTargets = !1, + this.setValues(A) + } + jo.prototype = Object.assign(Object.create(Go.prototype), { + constructor: jo, + isLineSegments: !0, + computeLineDistances: function() { + var A = this.geometry; + if (A.isBufferGeometry) + if (null === A.index) { + for (var e = A.attributes.position, t = [], i = 0, o = e.count; o > i; i += 2) + Po.fromBufferAttribute(e, i), + qo.fromBufferAttribute(e, i + 1), + t[i] = 0 === i ? 0 : t[i - 1], + t[i + 1] = t[i] + Po.distanceTo(qo); + A.setAttribute("lineDistance", new Ae(t,1)) + } else + console.warn("THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry."); + else if (A.isGeometry) { + var n = A.vertices; + for (t = A.lineDistances, + i = 0, + o = n.length; o > i; i += 2) + Po.copy(n[i]), + qo.copy(n[i + 1]), + t[i] = 0 === i ? 0 : t[i - 1], + t[i + 1] = t[i] + Po.distanceTo(qo) + } + return this + } + }), + Ho.prototype = Object.assign(Object.create(Go.prototype), { + constructor: Ho, + isLineLoop: !0 + }), + (Yo.prototype = Object.create(qA.prototype)).constructor = Yo, + Yo.prototype.isPointsMaterial = !0, + Yo.prototype.copy = function(A) { + return qA.prototype.copy.call(this, A), + this.color.copy(A.color), + this.map = A.map, + this.alphaMap = A.alphaMap, + this.size = A.size, + this.sizeAttenuation = A.sizeAttenuation, + this.morphTargets = A.morphTargets, + this + } + ; + var Wo = new M + , Jo = new CA + , zo = new cA + , Zo = new y; + function Xo(A, e) { + H.call(this), + this.type = "Points", + this.geometry = void 0 !== A ? A : new he, + this.material = void 0 !== e ? e : new Yo, + this.updateMorphTargets() + } + function _o(A, e, t, i, o, n, r) { + var a = Jo.distanceSqToPoint(A); + if (t > a) { + var s = new y; + Jo.closestPointToPoint(A, s), + s.applyMatrix4(i); + var l = o.ray.origin.distanceTo(s); + if (o.near > l || l > o.far) + return; + n.push({ + distance: l, + distanceToRay: Math.sqrt(a), + point: s, + index: e, + face: null, + object: r + }) + } + } + function $o(A, e, t, i, o, n, r, a, s) { + d.call(this, A, e, t, i, o, n, r, a, s), + this.format = void 0 !== r ? r : 1022, + this.minFilter = void 0 !== n ? n : 1006, + this.magFilter = void 0 !== o ? o : 1006, + this.generateMipmaps = !1 + } + function An(A, e, t, i, o, n, r, a, s, l, c, h) { + d.call(this, null, n, r, a, s, l, i, o, c, h), + this.image = { + width: e, + height: t + }, + this.mipmaps = A, + this.flipY = !1, + this.generateMipmaps = !1 + } + function en(A, e, t, i, o, n, r, a, s) { + d.call(this, A, e, t, i, o, n, r, a, s), + this.needsUpdate = !0 + } + function tn(A, e, t, i, o, n, r, a, s, l) { + if (1026 !== (l = void 0 !== l ? l : 1026) && 1027 !== l) + throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat"); + void 0 === t && 1026 === l && (t = 1012), + void 0 === t && 1027 === l && (t = 1020), + d.call(this, null, i, o, n, r, a, l, t, s), + this.image = { + width: A, + height: e + }, + this.magFilter = void 0 !== r ? r : 1003, + this.minFilter = void 0 !== a ? a : 1003, + this.flipY = !1, + this.generateMipmaps = !1 + } + function on(A) { + he.call(this), + this.type = "WireframeGeometry"; + var e, t, i, o, n, r, a, s, l, c, h = [], d = [0, 0], p = {}, g = ["a", "b", "c"]; + if (A && A.isGeometry) { + var u = A.faces; + for (e = 0, + i = u.length; i > e; e++) { + var f = u[e]; + for (t = 0; 3 > t; t++) + a = f[g[t]], + s = f[g[(t + 1) % 3]], + d[0] = Math.min(a, s), + d[1] = Math.max(a, s), + void 0 === p[l = d[0] + "," + d[1]] && (p[l] = { + index1: d[0], + index2: d[1] + }) + } + for (l in p) + h.push((c = A.vertices[(r = p[l]).index1]).x, c.y, c.z), + h.push((c = A.vertices[r.index2]).x, c.y, c.z) + } else if (A && A.isBufferGeometry) { + var m, C, v, I, E; + if (c = new y, + null !== A.index) { + for (m = A.attributes.position, + C = A.index, + 0 === (v = A.groups).length && (v = [{ + start: 0, + count: C.count, + materialIndex: 0 + }]), + o = 0, + n = v.length; n > o; ++o) + for (e = E = (I = v[o]).start, + i = E + I.count; i > e; e += 3) + for (t = 0; 3 > t; t++) + a = C.getX(e + t), + s = C.getX(e + (t + 1) % 3), + d[0] = Math.min(a, s), + d[1] = Math.max(a, s), + void 0 === p[l = d[0] + "," + d[1]] && (p[l] = { + index1: d[0], + index2: d[1] + }); + for (l in p) + c.fromBufferAttribute(m, (r = p[l]).index1), + h.push(c.x, c.y, c.z), + c.fromBufferAttribute(m, r.index2), + h.push(c.x, c.y, c.z) + } else + for (e = 0, + i = (m = A.attributes.position).count / 3; i > e; e++) + for (t = 0; 3 > t; t++) + c.fromBufferAttribute(m, 3 * e + t), + h.push(c.x, c.y, c.z), + c.fromBufferAttribute(m, 3 * e + (t + 1) % 3), + h.push(c.x, c.y, c.z) + } + this.setAttribute("position", new Ae(h,3)) + } + function nn(A, e, t) { + De.call(this), + this.type = "ParametricGeometry", + this.parameters = { + func: A, + slices: e, + stacks: t + }, + this.fromBufferGeometry(new rn(A,e,t)), + this.mergeVertices() + } + function rn(A, e, t) { + he.call(this), + this.type = "ParametricBufferGeometry", + this.parameters = { + func: A, + slices: e, + stacks: t + }; + var i, o, n = [], r = [], a = [], s = [], l = 1e-5, c = new y, h = new y, d = new y, p = new y, g = new y; + 3 > A.length && console.error("THREE.ParametricGeometry: Function must now modify a Vector3 as third parameter."); + var u = e + 1; + for (i = 0; t >= i; i++) { + var f = i / t; + for (o = 0; e >= o; o++) { + var m = o / e; + A(m, f, h), + r.push(h.x, h.y, h.z), + 0 > m - l ? (A(m + l, f, d), + p.subVectors(d, h)) : (A(m - l, f, d), + p.subVectors(h, d)), + 0 > f - l ? (A(m, f + l, d), + g.subVectors(d, h)) : (A(m, f - l, d), + g.subVectors(h, d)), + c.crossVectors(p, g).normalize(), + a.push(c.x, c.y, c.z), + s.push(m, f) + } + } + for (i = 0; t > i; i++) + for (o = 0; e > o; o++) { + var C = i * u + o + 1 + , v = (i + 1) * u + o + 1 + , I = (i + 1) * u + o; + n.push(i * u + o, C, I), + n.push(C, v, I) + } + this.setIndex(n), + this.setAttribute("position", new Ae(r,3)), + this.setAttribute("normal", new Ae(a,3)), + this.setAttribute("uv", new Ae(s,2)) + } + function an(A, e, t, i) { + De.call(this), + this.type = "PolyhedronGeometry", + this.parameters = { + vertices: A, + indices: e, + radius: t, + detail: i + }, + this.fromBufferGeometry(new sn(A,e,t,i)), + this.mergeVertices() + } + function sn(A, e, t, i) { + he.call(this), + this.type = "PolyhedronBufferGeometry", + this.parameters = { + vertices: A, + indices: e, + radius: t, + detail: i + }, + t = t || 1; + var o = [] + , n = []; + function r(A, e, t, i) { + var o, n, r = Math.pow(2, i), s = []; + for (o = 0; r >= o; o++) { + s[o] = []; + var l = A.clone().lerp(t, o / r) + , c = e.clone().lerp(t, o / r) + , h = r - o; + for (n = 0; h >= n; n++) + s[o][n] = 0 === n && o === r ? l : l.clone().lerp(c, n / h) + } + for (o = 0; r > o; o++) + for (n = 0; 2 * (r - o) - 1 > n; n++) { + var d = Math.floor(n / 2); + n % 2 == 0 ? (a(s[o][d + 1]), + a(s[o + 1][d]), + a(s[o][d])) : (a(s[o][d + 1]), + a(s[o + 1][d + 1]), + a(s[o + 1][d])) + } + } + function a(A) { + o.push(A.x, A.y, A.z) + } + function l(e, t) { + var i = 3 * e; + t.x = A[i + 0], + t.y = A[i + 1], + t.z = A[i + 2] + } + function c(A, e, t, i) { + 0 > i && 1 === A.x && (n[e] = A.x - 1), + 0 === t.x && 0 === t.z && (n[e] = i / 2 / Math.PI + .5) + } + function h(A) { + return Math.atan2(A.z, -A.x) + } + !function(A) { + for (var t = new y, i = new y, o = new y, n = 0; e.length > n; n += 3) + l(e[n + 0], t), + l(e[n + 1], i), + l(e[n + 2], o), + r(t, i, o, A) + }(i = i || 0), + function(A) { + for (var e = new y, t = 0; o.length > t; t += 3) + e.x = o[t + 0], + e.y = o[t + 1], + e.z = o[t + 2], + e.normalize().multiplyScalar(A), + o[t + 0] = e.x, + o[t + 1] = e.y, + o[t + 2] = e.z + }(t), + function() { + for (var A = new y, e = 0; o.length > e; e += 3) { + A.x = o[e + 0], + A.y = o[e + 1], + A.z = o[e + 2]; + var t = h(A) / 2 / Math.PI + .5 + , i = (r = A, + Math.atan2(-r.y, Math.sqrt(r.x * r.x + r.z * r.z)) / Math.PI + .5); + n.push(t, 1 - i) + } + var r; + (function() { + for (var A = new y, e = new y, t = new y, i = new y, r = new s, a = new s, l = new s, d = 0, p = 0; o.length > d; d += 9, + p += 6) { + A.set(o[d + 0], o[d + 1], o[d + 2]), + e.set(o[d + 3], o[d + 4], o[d + 5]), + t.set(o[d + 6], o[d + 7], o[d + 8]), + r.set(n[p + 0], n[p + 1]), + a.set(n[p + 2], n[p + 3]), + l.set(n[p + 4], n[p + 5]), + i.copy(A).add(e).add(t).divideScalar(3); + var g = h(i); + c(r, p + 0, A, g), + c(a, p + 2, e, g), + c(l, p + 4, t, g) + } + } + )(), + function() { + for (var A = 0; n.length > A; A += 6) { + var e = n[A + 0] + , t = n[A + 2] + , i = n[A + 4] + , o = Math.max(e, t, i) + , r = Math.min(e, t, i); + o > .9 && .1 > r && (.2 > e && (n[A + 0] += 1), + .2 > t && (n[A + 2] += 1), + .2 > i && (n[A + 4] += 1)) + } + }() + }(), + this.setAttribute("position", new Ae(o,3)), + this.setAttribute("normal", new Ae(o.slice(),3)), + this.setAttribute("uv", new Ae(n,2)), + 0 === i ? this.computeVertexNormals() : this.normalizeNormals() + } + function ln(A, e) { + De.call(this), + this.type = "TetrahedronGeometry", + this.parameters = { + radius: A, + detail: e + }, + this.fromBufferGeometry(new cn(A,e)), + this.mergeVertices() + } + function cn(A, e) { + sn.call(this, [1, 1, 1, -1, -1, 1, -1, 1, -1, 1, -1, -1], [2, 1, 0, 0, 3, 2, 1, 3, 0, 2, 3, 1], A, e), + this.type = "TetrahedronBufferGeometry", + this.parameters = { + radius: A, + detail: e + } + } + function hn(A, e) { + De.call(this), + this.type = "OctahedronGeometry", + this.parameters = { + radius: A, + detail: e + }, + this.fromBufferGeometry(new dn(A,e)), + this.mergeVertices() + } + function dn(A, e) { + sn.call(this, [1, 0, 0, -1, 0, 0, 0, 1, 0, 0, -1, 0, 0, 0, 1, 0, 0, -1], [0, 2, 4, 0, 4, 3, 0, 3, 5, 0, 5, 2, 1, 2, 5, 1, 5, 3, 1, 3, 4, 1, 4, 2], A, e), + this.type = "OctahedronBufferGeometry", + this.parameters = { + radius: A, + detail: e + } + } + function pn(A, e) { + De.call(this), + this.type = "IcosahedronGeometry", + this.parameters = { + radius: A, + detail: e + }, + this.fromBufferGeometry(new gn(A,e)), + this.mergeVertices() + } + function gn(A, e) { + var t = (1 + Math.sqrt(5)) / 2; + sn.call(this, [-1, t, 0, 1, t, 0, -1, -t, 0, 1, -t, 0, 0, -1, t, 0, 1, t, 0, -1, -t, 0, 1, -t, t, 0, -1, t, 0, 1, -t, 0, -1, -t, 0, 1], [0, 11, 5, 0, 5, 1, 0, 1, 7, 0, 7, 10, 0, 10, 11, 1, 5, 9, 5, 11, 4, 11, 10, 2, 10, 7, 6, 7, 1, 8, 3, 9, 4, 3, 4, 2, 3, 2, 6, 3, 6, 8, 3, 8, 9, 4, 9, 5, 2, 4, 11, 6, 2, 10, 8, 6, 7, 9, 8, 1], A, e), + this.type = "IcosahedronBufferGeometry", + this.parameters = { + radius: A, + detail: e + } + } + function un(A, e) { + De.call(this), + this.type = "DodecahedronGeometry", + this.parameters = { + radius: A, + detail: e + }, + this.fromBufferGeometry(new fn(A,e)), + this.mergeVertices() + } + function fn(A, e) { + var t = (1 + Math.sqrt(5)) / 2 + , i = 1 / t; + sn.call(this, [-1, -1, -1, -1, -1, 1, -1, 1, -1, -1, 1, 1, 1, -1, -1, 1, -1, 1, 1, 1, -1, 1, 1, 1, 0, -i, -t, 0, -i, t, 0, i, -t, 0, i, t, -i, -t, 0, -i, t, 0, i, -t, 0, i, t, 0, -t, 0, -i, t, 0, -i, -t, 0, i, t, 0, i], [3, 11, 7, 3, 7, 15, 3, 15, 13, 7, 19, 17, 7, 17, 6, 7, 6, 15, 17, 4, 8, 17, 8, 10, 17, 10, 6, 8, 0, 16, 8, 16, 2, 8, 2, 10, 0, 12, 1, 0, 1, 18, 0, 18, 16, 6, 10, 2, 6, 2, 13, 6, 13, 15, 2, 16, 18, 2, 18, 3, 2, 3, 13, 18, 1, 9, 18, 9, 11, 18, 11, 3, 4, 14, 12, 4, 12, 0, 4, 0, 8, 11, 9, 5, 11, 5, 19, 11, 19, 7, 19, 5, 14, 19, 14, 4, 19, 4, 17, 1, 12, 14, 1, 14, 5, 1, 5, 9], A, e), + this.type = "DodecahedronBufferGeometry", + this.parameters = { + radius: A, + detail: e + } + } + function mn(A, e, t, i, o, n) { + De.call(this), + this.type = "TubeGeometry", + this.parameters = { + path: A, + tubularSegments: e, + radius: t, + radialSegments: i, + closed: o + }, + void 0 !== n && console.warn("THREE.TubeGeometry: taper has been removed."); + var r = new Cn(A,e,t,i,o); + this.tangents = r.tangents, + this.normals = r.normals, + this.binormals = r.binormals, + this.fromBufferGeometry(r), + this.mergeVertices() + } + function Cn(A, e, t, i, o) { + he.call(this), + this.type = "TubeBufferGeometry", + this.parameters = { + path: A, + tubularSegments: e, + radius: t, + radialSegments: i, + closed: o + }, + t = t || 1, + i = i || 8; + var n = A.computeFrenetFrames(e = e || 64, o = o || !1); + this.tangents = n.tangents, + this.normals = n.normals, + this.binormals = n.binormals; + var r, a, l = new y, c = new y, h = new s, d = new y, p = [], g = [], u = [], f = []; + function m(o) { + d = A.getPointAt(o / e, d); + var r = n.normals[o] + , s = n.binormals[o]; + for (a = 0; i >= a; a++) { + var h = a / i * Math.PI * 2 + , u = Math.sin(h) + , f = -Math.cos(h); + c.x = f * r.x + u * s.x, + c.y = f * r.y + u * s.y, + c.z = f * r.z + u * s.z, + c.normalize(), + g.push(c.x, c.y, c.z), + l.x = d.x + t * c.x, + l.y = d.y + t * c.y, + l.z = d.z + t * c.z, + p.push(l.x, l.y, l.z) + } + } + !function() { + for (r = 0; e > r; r++) + m(r); + m(!1 === o ? e : 0), + function() { + for (r = 0; e >= r; r++) + for (a = 0; i >= a; a++) + h.x = r / e, + h.y = a / i, + u.push(h.x, h.y) + }(), + function() { + for (a = 1; e >= a; a++) + for (r = 1; i >= r; r++) { + var A = (i + 1) * a + (r - 1) + , t = (i + 1) * a + r + , o = (i + 1) * (a - 1) + r; + f.push((i + 1) * (a - 1) + (r - 1), A, o), + f.push(A, t, o) + } + }() + }(), + this.setIndex(f), + this.setAttribute("position", new Ae(p,3)), + this.setAttribute("normal", new Ae(g,3)), + this.setAttribute("uv", new Ae(u,2)) + } + function yn(A, e, t, i, o, n, r) { + De.call(this), + this.type = "TorusKnotGeometry", + this.parameters = { + radius: A, + tube: e, + tubularSegments: t, + radialSegments: i, + p: o, + q: n + }, + void 0 !== r && console.warn("THREE.TorusKnotGeometry: heightScale has been deprecated. Use .scale( x, y, z ) instead."), + this.fromBufferGeometry(new vn(A,e,t,i,o,n)), + this.mergeVertices() + } + function vn(A, e, t, i, o, n) { + he.call(this), + this.type = "TorusKnotBufferGeometry", + this.parameters = { + radius: A, + tube: e, + tubularSegments: t, + radialSegments: i, + p: o, + q: n + }, + A = A || 1, + e = e || .4, + t = Math.floor(t) || 64, + i = Math.floor(i) || 8, + o = o || 2, + n = n || 3; + var r, a, s = [], l = [], c = [], h = [], d = new y, p = new y, g = new y, u = new y, f = new y, m = new y, C = new y; + for (r = 0; t >= r; ++r) { + var v = r / t * o * Math.PI * 2; + for (M(v, o, n, A, g), + M(v + .01, o, n, A, u), + m.subVectors(u, g), + C.addVectors(u, g), + f.crossVectors(m, C), + C.crossVectors(f, m), + f.normalize(), + C.normalize(), + a = 0; i >= a; ++a) { + var I = a / i * Math.PI * 2 + , E = -e * Math.cos(I) + , B = e * Math.sin(I); + d.x = g.x + (E * C.x + B * f.x), + d.y = g.y + (E * C.y + B * f.y), + d.z = g.z + (E * C.z + B * f.z), + l.push(d.x, d.y, d.z), + p.subVectors(d, g).normalize(), + c.push(p.x, p.y, p.z), + h.push(r / t), + h.push(a / i) + } + } + for (a = 1; t >= a; a++) + for (r = 1; i >= r; r++) { + var x = (i + 1) * a + (r - 1) + , S = (i + 1) * a + r + , w = (i + 1) * (a - 1) + r; + s.push((i + 1) * (a - 1) + (r - 1), x, w), + s.push(x, S, w) + } + function M(A, e, t, i, o) { + var n = Math.cos(A) + , r = Math.sin(A) + , a = t / e * A + , s = Math.cos(a); + o.x = i * (2 + s) * .5 * n, + o.y = i * (2 + s) * r * .5, + o.z = i * Math.sin(a) * .5 + } + this.setIndex(s), + this.setAttribute("position", new Ae(l,3)), + this.setAttribute("normal", new Ae(c,3)), + this.setAttribute("uv", new Ae(h,2)) + } + function In(A, e, t, i, o) { + De.call(this), + this.type = "TorusGeometry", + this.parameters = { + radius: A, + tube: e, + radialSegments: t, + tubularSegments: i, + arc: o + }, + this.fromBufferGeometry(new En(A,e,t,i,o)), + this.mergeVertices() + } + function En(A, e, t, i, o) { + he.call(this), + this.type = "TorusBufferGeometry", + this.parameters = { + radius: A, + tube: e, + radialSegments: t, + tubularSegments: i, + arc: o + }, + A = A || 1, + e = e || .4, + t = Math.floor(t) || 8, + i = Math.floor(i) || 6, + o = o || 2 * Math.PI; + var n, r, a = [], s = [], l = [], c = [], h = new y, d = new y, p = new y; + for (n = 0; t >= n; n++) + for (r = 0; i >= r; r++) { + var g = r / i * o + , u = n / t * Math.PI * 2; + d.x = (A + e * Math.cos(u)) * Math.cos(g), + d.y = (A + e * Math.cos(u)) * Math.sin(g), + d.z = e * Math.sin(u), + s.push(d.x, d.y, d.z), + h.x = A * Math.cos(g), + h.y = A * Math.sin(g), + p.subVectors(d, h).normalize(), + l.push(p.x, p.y, p.z), + c.push(r / i), + c.push(n / t) + } + for (n = 1; t >= n; n++) + for (r = 1; i >= r; r++) { + var f = (i + 1) * (n - 1) + r - 1 + , m = (i + 1) * (n - 1) + r + , C = (i + 1) * n + r; + a.push((i + 1) * n + r - 1, f, C), + a.push(f, m, C) + } + this.setIndex(a), + this.setAttribute("position", new Ae(s,3)), + this.setAttribute("normal", new Ae(l,3)), + this.setAttribute("uv", new Ae(c,2)) + } + Xo.prototype = Object.assign(Object.create(H.prototype), { + constructor: Xo, + isPoints: !0, + raycast: function(A, e) { + var t = this.geometry + , i = this.matrixWorld + , o = A.params.Points.threshold; + if (null === t.boundingSphere && t.computeBoundingSphere(), + zo.copy(t.boundingSphere), + zo.applyMatrix4(i), + zo.radius += o, + !1 !== A.ray.intersectsSphere(zo)) { + Wo.getInverse(i), + Jo.copy(A.ray).applyMatrix4(Wo); + var n = o / ((this.scale.x + this.scale.y + this.scale.z) / 3) + , r = n * n; + if (t.isBufferGeometry) { + var a = t.index + , s = t.attributes.position.array; + if (null !== a) + for (var l = a.array, c = 0, h = l.length; h > c; c++) { + var d = l[c]; + Zo.fromArray(s, 3 * d), + _o(Zo, d, r, i, A, e, this) + } + else { + c = 0; + for (var p = s.length / 3; p > c; c++) + Zo.fromArray(s, 3 * c), + _o(Zo, c, r, i, A, e, this) + } + } else { + var g = t.vertices; + for (c = 0, + p = g.length; p > c; c++) + _o(g[c], c, r, i, A, e, this) + } + } + }, + updateMorphTargets: function() { + var A, e, t, i = this.geometry; + if (i.isBufferGeometry) { + var o = i.morphAttributes + , n = Object.keys(o); + if (n.length > 0) { + var r = o[n[0]]; + if (void 0 !== r) + for (this.morphTargetInfluences = [], + this.morphTargetDictionary = {}, + A = 0, + e = r.length; e > A; A++) + t = r[A].name || String(A), + this.morphTargetInfluences.push(0), + this.morphTargetDictionary[t] = A + } + } else { + var a = i.morphTargets; + void 0 !== a && a.length > 0 && console.error("THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.") + } + }, + clone: function() { + return new this.constructor(this.geometry,this.material).copy(this) + } + }), + $o.prototype = Object.assign(Object.create(d.prototype), { + constructor: $o, + isVideoTexture: !0, + update: function() { + var A = this.image; + A.HAVE_CURRENT_DATA > A.readyState || (this.needsUpdate = !0) + } + }), + (An.prototype = Object.create(d.prototype)).constructor = An, + An.prototype.isCompressedTexture = !0, + (en.prototype = Object.create(d.prototype)).constructor = en, + en.prototype.isCanvasTexture = !0, + (tn.prototype = Object.create(d.prototype)).constructor = tn, + tn.prototype.isDepthTexture = !0, + (on.prototype = Object.create(he.prototype)).constructor = on, + (nn.prototype = Object.create(De.prototype)).constructor = nn, + (rn.prototype = Object.create(he.prototype)).constructor = rn, + (an.prototype = Object.create(De.prototype)).constructor = an, + (sn.prototype = Object.create(he.prototype)).constructor = sn, + (ln.prototype = Object.create(De.prototype)).constructor = ln, + (cn.prototype = Object.create(sn.prototype)).constructor = cn, + (hn.prototype = Object.create(De.prototype)).constructor = hn, + (dn.prototype = Object.create(sn.prototype)).constructor = dn, + (pn.prototype = Object.create(De.prototype)).constructor = pn, + (gn.prototype = Object.create(sn.prototype)).constructor = gn, + (un.prototype = Object.create(De.prototype)).constructor = un, + (fn.prototype = Object.create(sn.prototype)).constructor = fn, + (mn.prototype = Object.create(De.prototype)).constructor = mn, + (Cn.prototype = Object.create(he.prototype)).constructor = Cn, + Cn.prototype.toJSON = function() { + var A = he.prototype.toJSON.call(this); + return A.path = this.parameters.path.toJSON(), + A + } + , + (yn.prototype = Object.create(De.prototype)).constructor = yn, + (vn.prototype = Object.create(he.prototype)).constructor = vn, + (In.prototype = Object.create(De.prototype)).constructor = In, + (En.prototype = Object.create(he.prototype)).constructor = En; + var Bn = function(A, e, t) { + t = t || 2; + var i, o, n, r, a, s, l, c = e && e.length, h = c ? e[0] * t : A.length, d = xn(A, 0, h, t, !0), p = []; + if (!d || d.next === d.prev) + return p; + if (c && (d = function(A, e, t, i) { + var o, n, r, a = []; + for (o = 0, + n = e.length; n > o; o++) + (r = xn(A, e[o] * i, n - 1 > o ? e[o + 1] * i : A.length, i, !1)) === r.next && (r.steiner = !0), + a.push(Tn(r)); + for (a.sort(Kn), + o = 0; a.length > o; o++) + Qn(a[o], t), + t = Sn(t, t.next); + return t + }(A, e, d, t)), + A.length > 80 * t) { + i = n = A[0], + o = r = A[1]; + for (var g = t; h > g; g += t) + i > (a = A[g]) && (i = a), + o > (s = A[g + 1]) && (o = s), + a > n && (n = a), + s > r && (r = s); + l = 0 !== (l = Math.max(n - i, r - o)) ? 1 / l : 0 + } + return wn(d, p, t, i, o, l), + p + }; + function xn(A, e, t, i, o) { + var n, r; + if (o === function(A, e, t, i) { + for (var o = 0, n = e, r = t - i; t > n; n += i) + o += (A[r] - A[n]) * (A[n + 1] + A[r + 1]), + r = n; + return o + }(A, e, t, i) > 0) + for (n = e; t > n; n += i) + r = Pn(n, A[n], A[n + 1], r); + else + for (n = t - i; n >= e; n -= i) + r = Pn(n, A[n], A[n + 1], r); + return r && Nn(r, r.next) && (qn(r), + r = r.next), + r + } + function Sn(A, e) { + if (!A) + return A; + e || (e = A); + var t, i = A; + do { + if (t = !1, + i.steiner || !Nn(i, i.next) && 0 !== Ln(i.prev, i, i.next)) + i = i.next; + else { + if (qn(i), + (i = e = i.prev) === i.next) + break; + t = !0 + } + } while (t || i !== e);return e + } + function wn(A, e, t, i, o, n, r) { + if (A) { + !r && n && function(A, e, t, i) { + var o = A; + do { + null === o.z && (o.z = Rn(o.x, o.y, e, t, i)), + o.prevZ = o.prev, + o.nextZ = o.next, + o = o.next + } while (o !== A);o.prevZ.nextZ = null, + o.prevZ = null, + function(A) { + var e, t, i, o, n, r, a, s, l = 1; + do { + for (t = A, + A = null, + n = null, + r = 0; t; ) { + for (r++, + i = t, + a = 0, + e = 0; l > e && (a++, + i = i.nextZ); e++) + ; + for (s = l; a > 0 || s > 0 && i; ) + 0 === a || 0 !== s && i && t.z > i.z ? (o = i, + i = i.nextZ, + s--) : (o = t, + t = t.nextZ, + a--), + n ? n.nextZ = o : A = o, + o.prevZ = n, + n = o; + t = i + } + n.nextZ = null, + l *= 2 + } while (r > 1) + }(o) + }(A, i, o, n); + for (var a, s, l = A; A.prev !== A.next; ) + if (a = A.prev, + s = A.next, + n ? bn(A, i, o, n) : Mn(A)) + e.push(a.i / t), + e.push(A.i / t), + e.push(s.i / t), + qn(A), + A = s.next, + l = s.next; + else if ((A = s) === l) { + r ? 1 === r ? wn(A = Un(A, e, t), e, t, i, o, n, 2) : 2 === r && Fn(A, e, t, i, o, n) : wn(Sn(A), e, t, i, o, n, 1); + break + } + } + } + function Mn(A) { + var e = A.prev + , t = A + , i = A.next; + if (Ln(e, t, i) >= 0) + return !1; + for (var o = A.next.next; o !== A.prev; ) { + if (kn(e.x, e.y, t.x, t.y, i.x, i.y, o.x, o.y) && Ln(o.prev, o, o.next) >= 0) + return !1; + o = o.next + } + return !0 + } + function bn(A, e, t, i) { + var o = A.prev + , n = A + , r = A.next; + if (Ln(o, n, r) >= 0) + return !1; + for (var a = o.x > n.x ? o.x > r.x ? o.x : r.x : n.x > r.x ? n.x : r.x, s = o.y > n.y ? o.y > r.y ? o.y : r.y : n.y > r.y ? n.y : r.y, l = Rn(n.x > o.x ? r.x > o.x ? o.x : r.x : r.x > n.x ? n.x : r.x, n.y > o.y ? r.y > o.y ? o.y : r.y : r.y > n.y ? n.y : r.y, e, t, i), c = Rn(a, s, e, t, i), h = A.prevZ, d = A.nextZ; h && h.z >= l && d && c >= d.z; ) { + if (h !== A.prev && h !== A.next && kn(o.x, o.y, n.x, n.y, r.x, r.y, h.x, h.y) && Ln(h.prev, h, h.next) >= 0) + return !1; + if (h = h.prevZ, + d !== A.prev && d !== A.next && kn(o.x, o.y, n.x, n.y, r.x, r.y, d.x, d.y) && Ln(d.prev, d, d.next) >= 0) + return !1; + d = d.nextZ + } + for (; h && h.z >= l; ) { + if (h !== A.prev && h !== A.next && kn(o.x, o.y, n.x, n.y, r.x, r.y, h.x, h.y) && Ln(h.prev, h, h.next) >= 0) + return !1; + h = h.prevZ + } + for (; d && c >= d.z; ) { + if (d !== A.prev && d !== A.next && kn(o.x, o.y, n.x, n.y, r.x, r.y, d.x, d.y) && Ln(d.prev, d, d.next) >= 0) + return !1; + d = d.nextZ + } + return !0 + } + function Un(A, e, t) { + var i = A; + do { + var o = i.prev + , n = i.next.next; + !Nn(o, n) && On(o, i, i.next, n) && Vn(o, n) && Vn(n, o) && (e.push(o.i / t), + e.push(i.i / t), + e.push(n.i / t), + qn(i), + qn(i.next), + i = A = n), + i = i.next + } while (i !== A);return i + } + function Fn(A, e, t, i, o, n) { + var r = A; + do { + for (var a = r.next.next; a !== r.prev; ) { + if (r.i !== a.i && Dn(r, a)) { + var s = Gn(r, a); + return r = Sn(r, r.next), + s = Sn(s, s.next), + wn(r, e, t, i, o, n), + void wn(s, e, t, i, o, n) + } + a = a.next + } + r = r.next + } while (r !== A) + } + function Kn(A, e) { + return A.x - e.x + } + function Qn(A, e) { + if (e = function(A, e) { + var t, i = e, o = A.x, n = A.y, r = -1 / 0; + do { + if (i.y >= n && n >= i.next.y && i.next.y !== i.y) { + var a = i.x + (n - i.y) * (i.next.x - i.x) / (i.next.y - i.y); + if (o >= a && a > r) { + if (r = a, + a === o) { + if (n === i.y) + return i; + if (n === i.next.y) + return i.next + } + t = i.next.x > i.x ? i : i.next + } + } + i = i.next + } while (i !== e);if (!t) + return null; + if (o === r) + return t.prev; + var s, l = t, c = t.x, h = t.y, d = 1 / 0; + i = t.next; + for (; i !== l; ) + i.x > o || c > i.x || o === i.x || !kn(h > n ? o : r, n, c, h, h > n ? r : o, n, i.x, i.y) || (s = Math.abs(n - i.y) / (o - i.x), + (d > s || s === d && i.x > t.x) && Vn(i, A) && (t = i, + d = s)), + i = i.next; + return t + }(A, e)) { + var t = Gn(e, A); + Sn(t, t.next) + } + } + function Rn(A, e, t, i, o) { + return (A = 1431655765 & ((A = 858993459 & ((A = 252645135 & ((A = 16711935 & ((A = 32767 * (A - t) * o) | A << 8)) | A << 4)) | A << 2)) | A << 1)) | (e = 1431655765 & ((e = 858993459 & ((e = 252645135 & ((e = 16711935 & ((e = 32767 * (e - i) * o) | e << 8)) | e << 4)) | e << 2)) | e << 1)) << 1 + } + function Tn(A) { + var e = A + , t = A; + do { + (t.x > e.x || e.x === t.x && t.y > e.y) && (t = e), + e = e.next + } while (e !== A);return t + } + function kn(A, e, t, i, o, n, r, a) { + return (o - r) * (e - a) - (A - r) * (n - a) >= 0 && (A - r) * (i - a) - (t - r) * (e - a) >= 0 && (t - r) * (n - a) - (o - r) * (i - a) >= 0 + } + function Dn(A, e) { + return A.next.i !== e.i && A.prev.i !== e.i && !function(A, e) { + var t = A; + do { + if (t.i !== A.i && t.next.i !== A.i && t.i !== e.i && t.next.i !== e.i && On(t, t.next, A, e)) + return !0; + t = t.next + } while (t !== A);return !1 + }(A, e) && Vn(A, e) && Vn(e, A) && function(A, e) { + var t = A + , i = !1 + , o = (A.x + e.x) / 2 + , n = (A.y + e.y) / 2; + do { + t.y > n != t.next.y > n && t.next.y !== t.y && (t.next.x - t.x) * (n - t.y) / (t.next.y - t.y) + t.x > o && (i = !i), + t = t.next + } while (t !== A);return i + }(A, e) + } + function Ln(A, e, t) { + return (e.y - A.y) * (t.x - e.x) - (e.x - A.x) * (t.y - e.y) + } + function Nn(A, e) { + return A.x === e.x && A.y === e.y + } + function On(A, e, t, i) { + return !!(Nn(A, t) && Nn(e, i) || Nn(A, i) && Nn(t, e)) || Ln(A, e, t) > 0 != Ln(A, e, i) > 0 && Ln(t, i, A) > 0 != Ln(t, i, e) > 0 + } + function Vn(A, e) { + return 0 > Ln(A.prev, A, A.next) ? Ln(A, e, A.next) >= 0 && Ln(A, A.prev, e) >= 0 : 0 > Ln(A, e, A.prev) || 0 > Ln(A, A.next, e) + } + function Gn(A, e) { + var t = new jn(A.i,A.x,A.y) + , i = new jn(e.i,e.x,e.y) + , o = A.next + , n = e.prev; + return A.next = e, + e.prev = A, + t.next = o, + o.prev = t, + i.next = t, + t.prev = i, + n.next = i, + i.prev = n, + i + } + function Pn(A, e, t, i) { + var o = new jn(A,e,t); + return i ? (o.next = i.next, + o.prev = i, + i.next.prev = o, + i.next = o) : (o.prev = o, + o.next = o), + o + } + function qn(A) { + A.next.prev = A.prev, + A.prev.next = A.next, + A.prevZ && (A.prevZ.nextZ = A.nextZ), + A.nextZ && (A.nextZ.prevZ = A.prevZ) + } + function jn(A, e, t) { + this.i = A, + this.x = e, + this.y = t, + this.prev = null, + this.next = null, + this.z = null, + this.prevZ = null, + this.nextZ = null, + this.steiner = !1 + } + var Hn = { + area: function(A) { + for (var e = A.length, t = 0, i = e - 1, o = 0; e > o; i = o++) + t += A[i].x * A[o].y - A[o].x * A[i].y; + return .5 * t + }, + isClockWise: function(A) { + return 0 > Hn.area(A) + }, + triangulateShape: function(A, e) { + var t = [] + , i = [] + , o = []; + Yn(A), + Wn(t, A); + var n = A.length; + e.forEach(Yn); + for (var r = 0; e.length > r; r++) + i.push(n), + n += e[r].length, + Wn(t, e[r]); + var a = Bn(t, i); + for (r = 0; a.length > r; r += 3) + o.push(a.slice(r, r + 3)); + return o + } + }; + function Yn(A) { + var e = A.length; + e > 2 && A[e - 1].equals(A[0]) && A.pop() + } + function Wn(A, e) { + for (var t = 0; e.length > t; t++) + A.push(e[t].x), + A.push(e[t].y) + } + function Jn(A, e) { + De.call(this), + this.type = "ExtrudeGeometry", + this.parameters = { + shapes: A, + options: e + }, + this.fromBufferGeometry(new zn(A,e)), + this.mergeVertices() + } + function zn(A, e) { + he.call(this), + this.type = "ExtrudeBufferGeometry", + this.parameters = { + shapes: A, + options: e + }, + A = Array.isArray(A) ? A : [A]; + for (var t = this, i = [], o = [], n = 0, r = A.length; r > n; n++) { + a(A[n]) + } + function a(A) { + var n = [] + , r = void 0 !== e.curveSegments ? e.curveSegments : 12 + , a = void 0 !== e.steps ? e.steps : 1 + , l = void 0 !== e.depth ? e.depth : 100 + , c = void 0 === e.bevelEnabled || e.bevelEnabled + , h = void 0 !== e.bevelThickness ? e.bevelThickness : 6 + , d = void 0 !== e.bevelSize ? e.bevelSize : h - 2 + , p = void 0 !== e.bevelOffset ? e.bevelOffset : 0 + , g = void 0 !== e.bevelSegments ? e.bevelSegments : 3 + , u = e.extrudePath + , f = void 0 !== e.UVGenerator ? e.UVGenerator : Zn; + void 0 !== e.amount && (console.warn("THREE.ExtrudeBufferGeometry: amount has been renamed to depth."), + l = e.amount); + var m, C, v, I, E, B, x, S, w = !1; + u && (m = u.getSpacedPoints(a), + w = !0, + c = !1, + C = u.computeFrenetFrames(a, !1), + v = new y, + I = new y, + E = new y), + c || (g = 0, + h = 0, + d = 0, + p = 0); + var M = A.extractPoints(r) + , b = M.shape + , U = M.holes; + if (!Hn.isClockWise(b)) + for (b = b.reverse(), + x = 0, + S = U.length; S > x; x++) + Hn.isClockWise(B = U[x]) && (U[x] = B.reverse()); + var F = Hn.triangulateShape(b, U) + , K = b; + for (x = 0, + S = U.length; S > x; x++) + b = b.concat(B = U[x]); + function Q(A, e, t) { + return e || console.error("THREE.ExtrudeGeometry: vec does not exist"), + e.clone().multiplyScalar(t).add(A) + } + var R, T, k, D, L, N, O = b.length, V = F.length; + function G(A, e, t) { + var i, o, n, r = A.x - e.x, a = A.y - e.y, l = t.x - A.x, c = t.y - A.y, h = r * r + a * a; + if (Math.abs(r * c - a * l) > Number.EPSILON) { + var d = Math.sqrt(h) + , p = Math.sqrt(l * l + c * c) + , g = e.x - a / d + , u = e.y + r / d + , f = ((t.x - c / p - g) * c - (t.y + l / p - u) * l) / (r * c - a * l) + , m = (i = g + r * f - A.x) * i + (o = u + a * f - A.y) * o; + if (2 >= m) + return new s(i,o); + n = Math.sqrt(m / 2) + } else { + var C = !1; + r > Number.EPSILON ? l > Number.EPSILON && (C = !0) : -Number.EPSILON > r ? -Number.EPSILON > l && (C = !0) : Math.sign(a) === Math.sign(c) && (C = !0), + C ? (i = -a, + o = r, + n = Math.sqrt(h)) : (i = r, + o = a, + n = Math.sqrt(h / 2)) + } + return new s(i / n,o / n) + } + for (var P = [], q = 0, j = K.length, H = j - 1, Y = q + 1; j > q; q++, + H++, + Y++) + H === j && (H = 0), + Y === j && (Y = 0), + P[q] = G(K[q], K[H], K[Y]); + var W, J, z = [], Z = P.concat(); + for (x = 0, + S = U.length; S > x; x++) { + for (W = [], + H = (j = (B = U[x]).length) - 1, + Y = (q = 0) + 1; j > q; q++, + H++, + Y++) + H === j && (H = 0), + Y === j && (Y = 0), + W[q] = G(B[q], B[H], B[Y]); + z.push(W), + Z = Z.concat(W) + } + for (R = 0; g > R; R++) { + for (k = R / g, + D = h * Math.cos(k * Math.PI / 2), + T = d * Math.sin(k * Math.PI / 2) + p, + q = 0, + j = K.length; j > q; q++) + _((L = Q(K[q], P[q], T)).x, L.y, -D); + for (x = 0, + S = U.length; S > x; x++) + for (W = z[x], + q = 0, + j = (B = U[x]).length; j > q; q++) + _((L = Q(B[q], W[q], T)).x, L.y, -D) + } + for (T = d + p, + q = 0; O > q; q++) + L = c ? Q(b[q], Z[q], T) : b[q], + w ? (I.copy(C.normals[0]).multiplyScalar(L.x), + v.copy(C.binormals[0]).multiplyScalar(L.y), + E.copy(m[0]).add(I).add(v), + _(E.x, E.y, E.z)) : _(L.x, L.y, 0); + for (J = 1; a >= J; J++) + for (q = 0; O > q; q++) + L = c ? Q(b[q], Z[q], T) : b[q], + w ? (I.copy(C.normals[J]).multiplyScalar(L.x), + v.copy(C.binormals[J]).multiplyScalar(L.y), + E.copy(m[J]).add(I).add(v), + _(E.x, E.y, E.z)) : _(L.x, L.y, l / a * J); + for (R = g - 1; R >= 0; R--) { + for (k = R / g, + D = h * Math.cos(k * Math.PI / 2), + T = d * Math.sin(k * Math.PI / 2) + p, + q = 0, + j = K.length; j > q; q++) + _((L = Q(K[q], P[q], T)).x, L.y, l + D); + for (x = 0, + S = U.length; S > x; x++) + for (W = z[x], + q = 0, + j = (B = U[x]).length; j > q; q++) + L = Q(B[q], W[q], T), + w ? _(L.x, L.y + m[a - 1].y, m[a - 1].x + D) : _(L.x, L.y, l + D) + } + function X(A, e) { + var t, i; + for (q = A.length; --q >= 0; ) { + t = q, + 0 > (i = q - 1) && (i = A.length - 1); + var o = 0 + , n = a + 2 * g; + for (o = 0; n > o; o++) { + var r = O * o + , s = O * (o + 1); + AA(e + t + r, e + i + r, e + i + s, e + t + s) + } + } + } + function _(A, e, t) { + n.push(A), + n.push(e), + n.push(t) + } + function $(A, e, o) { + eA(A), + eA(e), + eA(o); + var n = i.length / 3 + , r = f.generateTopUV(t, i, n - 3, n - 2, n - 1); + tA(r[0]), + tA(r[1]), + tA(r[2]) + } + function AA(A, e, o, n) { + eA(A), + eA(e), + eA(n), + eA(e), + eA(o), + eA(n); + var r = i.length / 3 + , a = f.generateSideWallUV(t, i, r - 6, r - 3, r - 2, r - 1); + tA(a[0]), + tA(a[1]), + tA(a[3]), + tA(a[1]), + tA(a[2]), + tA(a[3]) + } + function eA(A) { + i.push(n[3 * A + 0]), + i.push(n[3 * A + 1]), + i.push(n[3 * A + 2]) + } + function tA(A) { + o.push(A.x), + o.push(A.y) + } + !function() { + var A = i.length / 3; + if (c) { + var e = 0 + , o = O * e; + for (q = 0; V > q; q++) + $((N = F[q])[2] + o, N[1] + o, N[0] + o); + for (o = O * (e = a + 2 * g), + q = 0; V > q; q++) + $((N = F[q])[0] + o, N[1] + o, N[2] + o) + } else { + for (q = 0; V > q; q++) + $((N = F[q])[2], N[1], N[0]); + for (q = 0; V > q; q++) + $((N = F[q])[0] + O * a, N[1] + O * a, N[2] + O * a) + } + t.addGroup(A, i.length / 3 - A, 0) + }(), + function() { + var A = i.length / 3 + , e = 0; + for (X(K, e), + e += K.length, + x = 0, + S = U.length; S > x; x++) + X(B = U[x], e), + e += B.length; + t.addGroup(A, i.length / 3 - A, 1) + }() + } + this.setAttribute("position", new Ae(i,3)), + this.setAttribute("uv", new Ae(o,2)), + this.computeVertexNormals() + } + (Jn.prototype = Object.create(De.prototype)).constructor = Jn, + Jn.prototype.toJSON = function() { + var A = De.prototype.toJSON.call(this); + return Xn(this.parameters.shapes, this.parameters.options, A) + } + , + (zn.prototype = Object.create(he.prototype)).constructor = zn, + zn.prototype.toJSON = function() { + var A = he.prototype.toJSON.call(this); + return Xn(this.parameters.shapes, this.parameters.options, A) + } + ; + var Zn = { + generateTopUV: function(A, e, t, i, o) { + var n = e[3 * i] + , r = e[3 * i + 1] + , a = e[3 * o] + , l = e[3 * o + 1]; + return [new s(e[3 * t],e[3 * t + 1]), new s(n,r), new s(a,l)] + }, + generateSideWallUV: function(A, e, t, i, o, n) { + var r = e[3 * t] + , a = e[3 * t + 1] + , l = e[3 * t + 2] + , c = e[3 * i] + , h = e[3 * i + 1] + , d = e[3 * i + 2] + , p = e[3 * o] + , g = e[3 * o + 1] + , u = e[3 * o + 2] + , f = e[3 * n] + , m = e[3 * n + 1] + , C = e[3 * n + 2]; + return .01 > Math.abs(a - h) ? [new s(r,1 - l), new s(c,1 - d), new s(p,1 - u), new s(f,1 - C)] : [new s(a,1 - l), new s(h,1 - d), new s(g,1 - u), new s(m,1 - C)] + } + }; + function Xn(A, e, t) { + if (t.shapes = [], + Array.isArray(A)) + for (var i = 0, o = A.length; o > i; i++) { + t.shapes.push(A[i].uuid) + } + else + t.shapes.push(A.uuid); + return void 0 !== e.extrudePath && (t.options.extrudePath = e.extrudePath.toJSON()), + t + } + function _n(A, e) { + De.call(this), + this.type = "TextGeometry", + this.parameters = { + text: A, + parameters: e + }, + this.fromBufferGeometry(new $n(A,e)), + this.mergeVertices() + } + function $n(A, e) { + var t = (e = e || {}).font; + if (!t || !t.isFont) + return console.error("THREE.TextGeometry: font parameter is not an instance of THREE.Font."), + new De; + var i = t.generateShapes(A, e.size); + e.depth = void 0 !== e.height ? e.height : 50, + void 0 === e.bevelThickness && (e.bevelThickness = 10), + void 0 === e.bevelSize && (e.bevelSize = 8), + void 0 === e.bevelEnabled && (e.bevelEnabled = !1), + zn.call(this, i, e), + this.type = "TextBufferGeometry" + } + function Ar(A, e, t, i, o, n, r) { + De.call(this), + this.type = "SphereGeometry", + this.parameters = { + radius: A, + widthSegments: e, + heightSegments: t, + phiStart: i, + phiLength: o, + thetaStart: n, + thetaLength: r + }, + this.fromBufferGeometry(new er(A,e,t,i,o,n,r)), + this.mergeVertices() + } + function er(A, e, t, i, o, n, r) { + he.call(this), + this.type = "SphereBufferGeometry", + this.parameters = { + radius: A, + widthSegments: e, + heightSegments: t, + phiStart: i, + phiLength: o, + thetaStart: n, + thetaLength: r + }, + A = A || 1, + e = Math.max(3, Math.floor(e) || 8), + t = Math.max(2, Math.floor(t) || 6), + i = void 0 !== i ? i : 0, + o = void 0 !== o ? o : 2 * Math.PI, + n = void 0 !== n ? n : 0, + r = void 0 !== r ? r : Math.PI; + var a, s, l = Math.min(n + r, Math.PI), c = 0, h = [], d = new y, p = new y, g = [], u = [], f = [], m = []; + for (s = 0; t >= s; s++) { + var C = [] + , v = s / t + , I = 0; + for (0 == s && 0 == n ? I = .5 / e : s == t && l == Math.PI && (I = -.5 / e), + a = 0; e >= a; a++) { + var E = a / e; + d.x = -A * Math.cos(i + E * o) * Math.sin(n + v * r), + d.y = A * Math.cos(n + v * r), + d.z = A * Math.sin(i + E * o) * Math.sin(n + v * r), + u.push(d.x, d.y, d.z), + p.copy(d).normalize(), + f.push(p.x, p.y, p.z), + m.push(E + I, 1 - v), + C.push(c++) + } + h.push(C) + } + for (s = 0; t > s; s++) + for (a = 0; e > a; a++) { + var B = h[s][a] + , x = h[s + 1][a] + , S = h[s + 1][a + 1]; + (0 !== s || n > 0) && g.push(h[s][a + 1], B, S), + (s !== t - 1 || l < Math.PI) && g.push(B, x, S) + } + this.setIndex(g), + this.setAttribute("position", new Ae(u,3)), + this.setAttribute("normal", new Ae(f,3)), + this.setAttribute("uv", new Ae(m,2)) + } + function tr(A, e, t, i, o, n) { + De.call(this), + this.type = "RingGeometry", + this.parameters = { + innerRadius: A, + outerRadius: e, + thetaSegments: t, + phiSegments: i, + thetaStart: o, + thetaLength: n + }, + this.fromBufferGeometry(new ir(A,e,t,i,o,n)), + this.mergeVertices() + } + function ir(A, e, t, i, o, n) { + he.call(this), + this.type = "RingBufferGeometry", + this.parameters = { + innerRadius: A, + outerRadius: e, + thetaSegments: t, + phiSegments: i, + thetaStart: o, + thetaLength: n + }, + A = A || .5, + e = e || 1, + o = void 0 !== o ? o : 0, + n = void 0 !== n ? n : 2 * Math.PI, + t = void 0 !== t ? Math.max(3, t) : 8; + var r, a, l, c = [], h = [], d = [], p = [], g = A, u = (e - A) / (i = void 0 !== i ? Math.max(1, i) : 1), f = new y, m = new s; + for (a = 0; i >= a; a++) { + for (l = 0; t >= l; l++) + r = o + l / t * n, + f.x = g * Math.cos(r), + f.y = g * Math.sin(r), + h.push(f.x, f.y, f.z), + d.push(0, 0, 1), + m.x = (f.x / e + 1) / 2, + m.y = (f.y / e + 1) / 2, + p.push(m.x, m.y); + g += u + } + for (a = 0; i > a; a++) { + var C = a * (t + 1); + for (l = 0; t > l; l++) { + var v = (r = l + C) + t + 1 + , I = r + t + 2 + , E = r + 1; + c.push(r, v, E), + c.push(v, I, E) + } + } + this.setIndex(c), + this.setAttribute("position", new Ae(h,3)), + this.setAttribute("normal", new Ae(d,3)), + this.setAttribute("uv", new Ae(p,2)) + } + function or(A, e, t, i) { + De.call(this), + this.type = "LatheGeometry", + this.parameters = { + points: A, + segments: e, + phiStart: t, + phiLength: i + }, + this.fromBufferGeometry(new nr(A,e,t,i)), + this.mergeVertices() + } + function nr(A, e, t, i) { + he.call(this), + this.type = "LatheBufferGeometry", + this.parameters = { + points: A, + segments: e, + phiStart: t, + phiLength: i + }, + e = Math.floor(e) || 12, + t = t || 0, + i = i || 2 * Math.PI, + i = a.clamp(i, 0, 2 * Math.PI); + var o, n, r, l = [], c = [], h = [], d = 1 / e, p = new y, g = new s; + for (n = 0; e >= n; n++) { + var u = t + n * d * i + , f = Math.sin(u) + , m = Math.cos(u); + for (r = 0; A.length - 1 >= r; r++) + p.x = A[r].x * f, + p.y = A[r].y, + p.z = A[r].x * m, + c.push(p.x, p.y, p.z), + g.x = n / e, + g.y = r / (A.length - 1), + h.push(g.x, g.y) + } + for (n = 0; e > n; n++) + for (r = 0; A.length - 1 > r; r++) { + var C = (o = r + n * A.length) + A.length + , v = o + A.length + 1 + , I = o + 1; + l.push(o, C, I), + l.push(C, v, I) + } + if (this.setIndex(l), + this.setAttribute("position", new Ae(c,3)), + this.setAttribute("uv", new Ae(h,2)), + this.computeVertexNormals(), + i === 2 * Math.PI) { + var E = this.attributes.normal.array + , B = new y + , x = new y + , S = new y; + for (o = e * A.length * 3, + n = 0, + r = 0; A.length > n; n++, + r += 3) + B.x = E[r + 0], + B.y = E[r + 1], + B.z = E[r + 2], + x.x = E[o + r + 0], + x.y = E[o + r + 1], + x.z = E[o + r + 2], + S.addVectors(B, x).normalize(), + E[r + 0] = E[o + r + 0] = S.x, + E[r + 1] = E[o + r + 1] = S.y, + E[r + 2] = E[o + r + 2] = S.z + } + } + function rr(A, e) { + De.call(this), + this.type = "ShapeGeometry", + "object" == typeof e && (console.warn("THREE.ShapeGeometry: Options parameter has been removed."), + e = e.curveSegments), + this.parameters = { + shapes: A, + curveSegments: e + }, + this.fromBufferGeometry(new ar(A,e)), + this.mergeVertices() + } + function ar(A, e) { + he.call(this), + this.type = "ShapeBufferGeometry", + this.parameters = { + shapes: A, + curveSegments: e + }, + e = e || 12; + var t = [] + , i = [] + , o = [] + , n = [] + , r = 0 + , a = 0; + if (!1 === Array.isArray(A)) + l(A); + else + for (var s = 0; A.length > s; s++) + l(A[s]), + this.addGroup(r, a, s), + r += a, + a = 0; + function l(A) { + var r, s, l, c = i.length / 3, h = A.extractPoints(e), d = h.shape, p = h.holes; + for (!1 === Hn.isClockWise(d) && (d = d.reverse()), + r = 0, + s = p.length; s > r; r++) + !0 === Hn.isClockWise(l = p[r]) && (p[r] = l.reverse()); + var g = Hn.triangulateShape(d, p); + for (r = 0, + s = p.length; s > r; r++) + d = d.concat(l = p[r]); + for (r = 0, + s = d.length; s > r; r++) { + var u = d[r]; + i.push(u.x, u.y, 0), + o.push(0, 0, 1), + n.push(u.x, u.y) + } + for (r = 0, + s = g.length; s > r; r++) { + var f = g[r]; + t.push(f[0] + c, f[1] + c, f[2] + c), + a += 3 + } + } + this.setIndex(t), + this.setAttribute("position", new Ae(i,3)), + this.setAttribute("normal", new Ae(o,3)), + this.setAttribute("uv", new Ae(n,2)) + } + function sr(A, e) { + if (e.shapes = [], + Array.isArray(A)) + for (var t = 0, i = A.length; i > t; t++) { + e.shapes.push(A[t].uuid) + } + else + e.shapes.push(A.uuid); + return e + } + function lr(A, e) { + he.call(this), + this.type = "EdgesGeometry", + this.parameters = { + thresholdAngle: e + }, + e = void 0 !== e ? e : 1; + var t, i, o, n, r = [], s = Math.cos(a.DEG2RAD * e), l = [0, 0], c = {}, h = ["a", "b", "c"]; + A.isBufferGeometry ? (n = new De).fromBufferGeometry(A) : n = A.clone(), + n.mergeVertices(), + n.computeFaceNormals(); + for (var d = n.vertices, p = n.faces, g = 0, u = p.length; u > g; g++) + for (var f = p[g], m = 0; 3 > m; m++) + t = f[h[m]], + i = f[h[(m + 1) % 3]], + l[0] = Math.min(t, i), + l[1] = Math.max(t, i), + void 0 === c[o = l[0] + "," + l[1]] ? c[o] = { + index1: l[0], + index2: l[1], + face1: g, + face2: void 0 + } : c[o].face2 = g; + for (o in c) { + var C = c[o]; + if (void 0 === C.face2 || p[C.face1].normal.dot(p[C.face2].normal) <= s) { + var y = d[C.index1]; + r.push(y.x, y.y, y.z), + r.push((y = d[C.index2]).x, y.y, y.z) + } + } + this.setAttribute("position", new Ae(r,3)) + } + function cr(A, e, t, i, o, n, r, a) { + De.call(this), + this.type = "CylinderGeometry", + this.parameters = { + radiusTop: A, + radiusBottom: e, + height: t, + radialSegments: i, + heightSegments: o, + openEnded: n, + thetaStart: r, + thetaLength: a + }, + this.fromBufferGeometry(new hr(A,e,t,i,o,n,r,a)), + this.mergeVertices() + } + function hr(A, e, t, i, o, n, r, a) { + he.call(this), + this.type = "CylinderBufferGeometry", + this.parameters = { + radiusTop: A, + radiusBottom: e, + height: t, + radialSegments: i, + heightSegments: o, + openEnded: n, + thetaStart: r, + thetaLength: a + }; + var l = this; + A = void 0 !== A ? A : 1, + e = void 0 !== e ? e : 1, + t = t || 1, + i = Math.floor(i) || 8, + o = Math.floor(o) || 1, + n = void 0 !== n && n, + r = void 0 !== r ? r : 0, + a = void 0 !== a ? a : 2 * Math.PI; + var c = [] + , h = [] + , d = [] + , p = [] + , g = 0 + , u = [] + , f = t / 2 + , m = 0; + function C(t) { + var o, n, u, C = new s, v = new y, I = 0, E = !0 === t ? A : e, B = !0 === t ? 1 : -1; + for (n = g, + o = 1; i >= o; o++) + h.push(0, f * B, 0), + d.push(0, B, 0), + p.push(.5, .5), + g++; + for (u = g, + o = 0; i >= o; o++) { + var x = o / i * a + r + , S = Math.cos(x) + , w = Math.sin(x); + v.x = E * w, + v.y = f * B, + v.z = E * S, + h.push(v.x, v.y, v.z), + d.push(0, B, 0), + C.x = .5 * S + .5, + C.y = .5 * w * B + .5, + p.push(C.x, C.y), + g++ + } + for (o = 0; i > o; o++) { + var M = n + o + , b = u + o; + !0 === t ? c.push(b, b + 1, M) : c.push(b + 1, b, M), + I += 3 + } + l.addGroup(m, I, !0 === t ? 1 : 2), + m += I + } + !function() { + var n, s, C = new y, v = new y, I = 0, E = (e - A) / t; + for (s = 0; o >= s; s++) { + var B = [] + , x = s / o + , S = x * (e - A) + A; + for (n = 0; i >= n; n++) { + var w = n / i + , M = w * a + r + , b = Math.sin(M) + , U = Math.cos(M); + v.x = S * b, + v.y = -x * t + f, + v.z = S * U, + h.push(v.x, v.y, v.z), + C.set(b, E, U).normalize(), + d.push(C.x, C.y, C.z), + p.push(w, 1 - x), + B.push(g++) + } + u.push(B) + } + for (n = 0; i > n; n++) + for (s = 0; o > s; s++) { + var F = u[s + 1][n] + , K = u[s + 1][n + 1] + , Q = u[s][n + 1]; + c.push(u[s][n], F, Q), + c.push(F, K, Q), + I += 6 + } + l.addGroup(m, I, 0), + m += I + }(), + !1 === n && (A > 0 && C(!0), + e > 0 && C(!1)), + this.setIndex(c), + this.setAttribute("position", new Ae(h,3)), + this.setAttribute("normal", new Ae(d,3)), + this.setAttribute("uv", new Ae(p,2)) + } + function dr(A, e, t, i, o, n, r) { + cr.call(this, 0, A, e, t, i, o, n, r), + this.type = "ConeGeometry", + this.parameters = { + radius: A, + height: e, + radialSegments: t, + heightSegments: i, + openEnded: o, + thetaStart: n, + thetaLength: r + } + } + function pr(A, e, t, i, o, n, r) { + hr.call(this, 0, A, e, t, i, o, n, r), + this.type = "ConeBufferGeometry", + this.parameters = { + radius: A, + height: e, + radialSegments: t, + heightSegments: i, + openEnded: o, + thetaStart: n, + thetaLength: r + } + } + function gr(A, e, t, i) { + De.call(this), + this.type = "CircleGeometry", + this.parameters = { + radius: A, + segments: e, + thetaStart: t, + thetaLength: i + }, + this.fromBufferGeometry(new ur(A,e,t,i)), + this.mergeVertices() + } + function ur(A, e, t, i) { + he.call(this), + this.type = "CircleBufferGeometry", + this.parameters = { + radius: A, + segments: e, + thetaStart: t, + thetaLength: i + }, + A = A || 1, + e = void 0 !== e ? Math.max(3, e) : 8, + t = void 0 !== t ? t : 0, + i = void 0 !== i ? i : 2 * Math.PI; + var o, n, r = [], a = [], l = [], c = [], h = new y, d = new s; + for (a.push(0, 0, 0), + l.push(0, 0, 1), + c.push(.5, .5), + n = 0, + o = 3; e >= n; n++, + o += 3) { + var p = t + n / e * i; + h.x = A * Math.cos(p), + h.y = A * Math.sin(p), + a.push(h.x, h.y, h.z), + l.push(0, 0, 1), + d.x = (a[o] / A + 1) / 2, + d.y = (a[o + 1] / A + 1) / 2, + c.push(d.x, d.y) + } + for (o = 1; e >= o; o++) + r.push(o, o + 1, 0); + this.setIndex(r), + this.setAttribute("position", new Ae(a,3)), + this.setAttribute("normal", new Ae(l,3)), + this.setAttribute("uv", new Ae(c,2)) + } + (_n.prototype = Object.create(De.prototype)).constructor = _n, + ($n.prototype = Object.create(zn.prototype)).constructor = $n, + (Ar.prototype = Object.create(De.prototype)).constructor = Ar, + (er.prototype = Object.create(he.prototype)).constructor = er, + (tr.prototype = Object.create(De.prototype)).constructor = tr, + (ir.prototype = Object.create(he.prototype)).constructor = ir, + (or.prototype = Object.create(De.prototype)).constructor = or, + (nr.prototype = Object.create(he.prototype)).constructor = nr, + (rr.prototype = Object.create(De.prototype)).constructor = rr, + rr.prototype.toJSON = function() { + var A = De.prototype.toJSON.call(this); + return sr(this.parameters.shapes, A) + } + , + (ar.prototype = Object.create(he.prototype)).constructor = ar, + ar.prototype.toJSON = function() { + var A = he.prototype.toJSON.call(this); + return sr(this.parameters.shapes, A) + } + , + (lr.prototype = Object.create(he.prototype)).constructor = lr, + (cr.prototype = Object.create(De.prototype)).constructor = cr, + (hr.prototype = Object.create(he.prototype)).constructor = hr, + (dr.prototype = Object.create(cr.prototype)).constructor = dr, + (pr.prototype = Object.create(hr.prototype)).constructor = pr, + (gr.prototype = Object.create(De.prototype)).constructor = gr, + (ur.prototype = Object.create(he.prototype)).constructor = ur; + var fr = Object.freeze({ + __proto__: null, + WireframeGeometry: on, + ParametricGeometry: nn, + ParametricBufferGeometry: rn, + TetrahedronGeometry: ln, + TetrahedronBufferGeometry: cn, + OctahedronGeometry: hn, + OctahedronBufferGeometry: dn, + IcosahedronGeometry: pn, + IcosahedronBufferGeometry: gn, + DodecahedronGeometry: un, + DodecahedronBufferGeometry: fn, + PolyhedronGeometry: an, + PolyhedronBufferGeometry: sn, + TubeGeometry: mn, + TubeBufferGeometry: Cn, + TorusKnotGeometry: yn, + TorusKnotBufferGeometry: vn, + TorusGeometry: In, + TorusBufferGeometry: En, + TextGeometry: _n, + TextBufferGeometry: $n, + SphereGeometry: Ar, + SphereBufferGeometry: er, + RingGeometry: tr, + RingBufferGeometry: ir, + PlaneGeometry: At, + PlaneBufferGeometry: et, + LatheGeometry: or, + LatheBufferGeometry: nr, + ShapeGeometry: rr, + ShapeBufferGeometry: ar, + ExtrudeGeometry: Jn, + ExtrudeBufferGeometry: zn, + EdgesGeometry: lr, + ConeGeometry: dr, + ConeBufferGeometry: pr, + CylinderGeometry: cr, + CylinderBufferGeometry: hr, + CircleGeometry: gr, + CircleBufferGeometry: ur, + BoxGeometry: Le, + BoxBufferGeometry: Ne + }); + function mr(A) { + qA.call(this), + this.type = "ShadowMaterial", + this.color = new LA(0), + this.transparent = !0, + this.setValues(A) + } + function Cr(A) { + Pe.call(this, A), + this.type = "RawShaderMaterial" + } + function yr(A) { + qA.call(this), + this.defines = { + STANDARD: "" + }, + this.type = "MeshStandardMaterial", + this.color = new LA(16777215), + this.roughness = 1, + this.metalness = 0, + this.map = null, + this.lightMap = null, + this.lightMapIntensity = 1, + this.aoMap = null, + this.aoMapIntensity = 1, + this.emissive = new LA(0), + this.emissiveIntensity = 1, + this.emissiveMap = null, + this.bumpMap = null, + this.bumpScale = 1, + this.normalMap = null, + this.normalMapType = 0, + this.normalScale = new s(1,1), + this.displacementMap = null, + this.displacementScale = 1, + this.displacementBias = 0, + this.roughnessMap = null, + this.metalnessMap = null, + this.alphaMap = null, + this.envMap = null, + this.envMapIntensity = 1, + this.refractionRatio = .98, + this.wireframe = !1, + this.wireframeLinewidth = 1, + this.wireframeLinecap = "round", + this.wireframeLinejoin = "round", + this.skinning = !1, + this.morphTargets = !1, + this.morphNormals = !1, + this.vertexTangents = !1, + this.setValues(A) + } + function vr(A) { + yr.call(this), + this.defines = { + STANDARD: "", + PHYSICAL: "" + }, + this.type = "MeshPhysicalMaterial", + this.clearcoat = 0, + this.clearcoatMap = null, + this.clearcoatRoughness = 0, + this.clearcoatRoughnessMap = null, + this.clearcoatNormalScale = new s(1,1), + this.clearcoatNormalMap = null, + this.reflectivity = .5, + this.sheen = null, + this.transparency = 0, + this.setValues(A) + } + function Ir(A) { + qA.call(this), + this.type = "MeshPhongMaterial", + this.color = new LA(16777215), + this.specular = new LA(1118481), + this.shininess = 30, + this.map = null, + this.lightMap = null, + this.lightMapIntensity = 1, + this.aoMap = null, + this.aoMapIntensity = 1, + this.emissive = new LA(0), + this.emissiveIntensity = 1, + this.emissiveMap = null, + this.bumpMap = null, + this.bumpScale = 1, + this.normalMap = null, + this.normalMapType = 0, + this.normalScale = new s(1,1), + this.displacementMap = null, + this.displacementScale = 1, + this.displacementBias = 0, + this.specularMap = null, + this.alphaMap = null, + this.envMap = null, + this.combine = 0, + this.reflectivity = 1, + this.refractionRatio = .98, + this.wireframe = !1, + this.wireframeLinewidth = 1, + this.wireframeLinecap = "round", + this.wireframeLinejoin = "round", + this.skinning = !1, + this.morphTargets = !1, + this.morphNormals = !1, + this.setValues(A) + } + function Er(A) { + qA.call(this), + this.defines = { + TOON: "" + }, + this.type = "MeshToonMaterial", + this.color = new LA(16777215), + this.specular = new LA(1118481), + this.shininess = 30, + this.map = null, + this.gradientMap = null, + this.lightMap = null, + this.lightMapIntensity = 1, + this.aoMap = null, + this.aoMapIntensity = 1, + this.emissive = new LA(0), + this.emissiveIntensity = 1, + this.emissiveMap = null, + this.bumpMap = null, + this.bumpScale = 1, + this.normalMap = null, + this.normalMapType = 0, + this.normalScale = new s(1,1), + this.displacementMap = null, + this.displacementScale = 1, + this.displacementBias = 0, + this.specularMap = null, + this.alphaMap = null, + this.wireframe = !1, + this.wireframeLinewidth = 1, + this.wireframeLinecap = "round", + this.wireframeLinejoin = "round", + this.skinning = !1, + this.morphTargets = !1, + this.morphNormals = !1, + this.setValues(A) + } + function Br(A) { + qA.call(this), + this.type = "MeshNormalMaterial", + this.bumpMap = null, + this.bumpScale = 1, + this.normalMap = null, + this.normalMapType = 0, + this.normalScale = new s(1,1), + this.displacementMap = null, + this.displacementScale = 1, + this.displacementBias = 0, + this.wireframe = !1, + this.wireframeLinewidth = 1, + this.fog = !1, + this.skinning = !1, + this.morphTargets = !1, + this.morphNormals = !1, + this.setValues(A) + } + function xr(A) { + qA.call(this), + this.type = "MeshLambertMaterial", + this.color = new LA(16777215), + this.map = null, + this.lightMap = null, + this.lightMapIntensity = 1, + this.aoMap = null, + this.aoMapIntensity = 1, + this.emissive = new LA(0), + this.emissiveIntensity = 1, + this.emissiveMap = null, + this.specularMap = null, + this.alphaMap = null, + this.envMap = null, + this.combine = 0, + this.reflectivity = 1, + this.refractionRatio = .98, + this.wireframe = !1, + this.wireframeLinewidth = 1, + this.wireframeLinecap = "round", + this.wireframeLinejoin = "round", + this.skinning = !1, + this.morphTargets = !1, + this.morphNormals = !1, + this.setValues(A) + } + function Sr(A) { + qA.call(this), + this.defines = { + MATCAP: "" + }, + this.type = "MeshMatcapMaterial", + this.color = new LA(16777215), + this.matcap = null, + this.map = null, + this.bumpMap = null, + this.bumpScale = 1, + this.normalMap = null, + this.normalMapType = 0, + this.normalScale = new s(1,1), + this.displacementMap = null, + this.displacementScale = 1, + this.displacementBias = 0, + this.alphaMap = null, + this.skinning = !1, + this.morphTargets = !1, + this.morphNormals = !1, + this.setValues(A) + } + function wr(A) { + ko.call(this), + this.type = "LineDashedMaterial", + this.scale = 1, + this.dashSize = 3, + this.gapSize = 1, + this.setValues(A) + } + (mr.prototype = Object.create(qA.prototype)).constructor = mr, + mr.prototype.isShadowMaterial = !0, + mr.prototype.copy = function(A) { + return qA.prototype.copy.call(this, A), + this.color.copy(A.color), + this + } + , + (Cr.prototype = Object.create(Pe.prototype)).constructor = Cr, + Cr.prototype.isRawShaderMaterial = !0, + (yr.prototype = Object.create(qA.prototype)).constructor = yr, + yr.prototype.isMeshStandardMaterial = !0, + yr.prototype.copy = function(A) { + return qA.prototype.copy.call(this, A), + this.defines = { + STANDARD: "" + }, + this.color.copy(A.color), + this.roughness = A.roughness, + this.metalness = A.metalness, + this.map = A.map, + this.lightMap = A.lightMap, + this.lightMapIntensity = A.lightMapIntensity, + this.aoMap = A.aoMap, + this.aoMapIntensity = A.aoMapIntensity, + this.emissive.copy(A.emissive), + this.emissiveMap = A.emissiveMap, + this.emissiveIntensity = A.emissiveIntensity, + this.bumpMap = A.bumpMap, + this.bumpScale = A.bumpScale, + this.normalMap = A.normalMap, + this.normalMapType = A.normalMapType, + this.normalScale.copy(A.normalScale), + this.displacementMap = A.displacementMap, + this.displacementScale = A.displacementScale, + this.displacementBias = A.displacementBias, + this.roughnessMap = A.roughnessMap, + this.metalnessMap = A.metalnessMap, + this.alphaMap = A.alphaMap, + this.envMap = A.envMap, + this.envMapIntensity = A.envMapIntensity, + this.refractionRatio = A.refractionRatio, + this.wireframe = A.wireframe, + this.wireframeLinewidth = A.wireframeLinewidth, + this.wireframeLinecap = A.wireframeLinecap, + this.wireframeLinejoin = A.wireframeLinejoin, + this.skinning = A.skinning, + this.morphTargets = A.morphTargets, + this.morphNormals = A.morphNormals, + this.vertexTangents = A.vertexTangents, + this + } + , + (vr.prototype = Object.create(yr.prototype)).constructor = vr, + vr.prototype.isMeshPhysicalMaterial = !0, + vr.prototype.copy = function(A) { + return yr.prototype.copy.call(this, A), + this.defines = { + STANDARD: "", + PHYSICAL: "" + }, + this.clearcoat = A.clearcoat, + this.clearcoatMap = A.clearcoatMap, + this.clearcoatRoughness = A.clearcoatRoughness, + this.clearcoatRoughnessMap = A.clearcoatRoughnessMap, + this.clearcoatNormalMap = A.clearcoatNormalMap, + this.clearcoatNormalScale.copy(A.clearcoatNormalScale), + this.reflectivity = A.reflectivity, + this.sheen = A.sheen ? (this.sheen || new LA).copy(A.sheen) : null, + this.transparency = A.transparency, + this + } + , + (Ir.prototype = Object.create(qA.prototype)).constructor = Ir, + Ir.prototype.isMeshPhongMaterial = !0, + Ir.prototype.copy = function(A) { + return qA.prototype.copy.call(this, A), + this.color.copy(A.color), + this.specular.copy(A.specular), + this.shininess = A.shininess, + this.map = A.map, + this.lightMap = A.lightMap, + this.lightMapIntensity = A.lightMapIntensity, + this.aoMap = A.aoMap, + this.aoMapIntensity = A.aoMapIntensity, + this.emissive.copy(A.emissive), + this.emissiveMap = A.emissiveMap, + this.emissiveIntensity = A.emissiveIntensity, + this.bumpMap = A.bumpMap, + this.bumpScale = A.bumpScale, + this.normalMap = A.normalMap, + this.normalMapType = A.normalMapType, + this.normalScale.copy(A.normalScale), + this.displacementMap = A.displacementMap, + this.displacementScale = A.displacementScale, + this.displacementBias = A.displacementBias, + this.specularMap = A.specularMap, + this.alphaMap = A.alphaMap, + this.envMap = A.envMap, + this.combine = A.combine, + this.reflectivity = A.reflectivity, + this.refractionRatio = A.refractionRatio, + this.wireframe = A.wireframe, + this.wireframeLinewidth = A.wireframeLinewidth, + this.wireframeLinecap = A.wireframeLinecap, + this.wireframeLinejoin = A.wireframeLinejoin, + this.skinning = A.skinning, + this.morphTargets = A.morphTargets, + this.morphNormals = A.morphNormals, + this + } + , + (Er.prototype = Object.create(qA.prototype)).constructor = Er, + Er.prototype.isMeshToonMaterial = !0, + Er.prototype.copy = function(A) { + return qA.prototype.copy.call(this, A), + this.color.copy(A.color), + this.specular.copy(A.specular), + this.shininess = A.shininess, + this.map = A.map, + this.gradientMap = A.gradientMap, + this.lightMap = A.lightMap, + this.lightMapIntensity = A.lightMapIntensity, + this.aoMap = A.aoMap, + this.aoMapIntensity = A.aoMapIntensity, + this.emissive.copy(A.emissive), + this.emissiveMap = A.emissiveMap, + this.emissiveIntensity = A.emissiveIntensity, + this.bumpMap = A.bumpMap, + this.bumpScale = A.bumpScale, + this.normalMap = A.normalMap, + this.normalMapType = A.normalMapType, + this.normalScale.copy(A.normalScale), + this.displacementMap = A.displacementMap, + this.displacementScale = A.displacementScale, + this.displacementBias = A.displacementBias, + this.specularMap = A.specularMap, + this.alphaMap = A.alphaMap, + this.wireframe = A.wireframe, + this.wireframeLinewidth = A.wireframeLinewidth, + this.wireframeLinecap = A.wireframeLinecap, + this.wireframeLinejoin = A.wireframeLinejoin, + this.skinning = A.skinning, + this.morphTargets = A.morphTargets, + this.morphNormals = A.morphNormals, + this + } + , + (Br.prototype = Object.create(qA.prototype)).constructor = Br, + Br.prototype.isMeshNormalMaterial = !0, + Br.prototype.copy = function(A) { + return qA.prototype.copy.call(this, A), + this.bumpMap = A.bumpMap, + this.bumpScale = A.bumpScale, + this.normalMap = A.normalMap, + this.normalMapType = A.normalMapType, + this.normalScale.copy(A.normalScale), + this.displacementMap = A.displacementMap, + this.displacementScale = A.displacementScale, + this.displacementBias = A.displacementBias, + this.wireframe = A.wireframe, + this.wireframeLinewidth = A.wireframeLinewidth, + this.skinning = A.skinning, + this.morphTargets = A.morphTargets, + this.morphNormals = A.morphNormals, + this + } + , + (xr.prototype = Object.create(qA.prototype)).constructor = xr, + xr.prototype.isMeshLambertMaterial = !0, + xr.prototype.copy = function(A) { + return qA.prototype.copy.call(this, A), + this.color.copy(A.color), + this.map = A.map, + this.lightMap = A.lightMap, + this.lightMapIntensity = A.lightMapIntensity, + this.aoMap = A.aoMap, + this.aoMapIntensity = A.aoMapIntensity, + this.emissive.copy(A.emissive), + this.emissiveMap = A.emissiveMap, + this.emissiveIntensity = A.emissiveIntensity, + this.specularMap = A.specularMap, + this.alphaMap = A.alphaMap, + this.envMap = A.envMap, + this.combine = A.combine, + this.reflectivity = A.reflectivity, + this.refractionRatio = A.refractionRatio, + this.wireframe = A.wireframe, + this.wireframeLinewidth = A.wireframeLinewidth, + this.wireframeLinecap = A.wireframeLinecap, + this.wireframeLinejoin = A.wireframeLinejoin, + this.skinning = A.skinning, + this.morphTargets = A.morphTargets, + this.morphNormals = A.morphNormals, + this + } + , + (Sr.prototype = Object.create(qA.prototype)).constructor = Sr, + Sr.prototype.isMeshMatcapMaterial = !0, + Sr.prototype.copy = function(A) { + return qA.prototype.copy.call(this, A), + this.defines = { + MATCAP: "" + }, + this.color.copy(A.color), + this.matcap = A.matcap, + this.map = A.map, + this.bumpMap = A.bumpMap, + this.bumpScale = A.bumpScale, + this.normalMap = A.normalMap, + this.normalMapType = A.normalMapType, + this.normalScale.copy(A.normalScale), + this.displacementMap = A.displacementMap, + this.displacementScale = A.displacementScale, + this.displacementBias = A.displacementBias, + this.alphaMap = A.alphaMap, + this.skinning = A.skinning, + this.morphTargets = A.morphTargets, + this.morphNormals = A.morphNormals, + this + } + , + (wr.prototype = Object.create(ko.prototype)).constructor = wr, + wr.prototype.isLineDashedMaterial = !0, + wr.prototype.copy = function(A) { + return ko.prototype.copy.call(this, A), + this.scale = A.scale, + this.dashSize = A.dashSize, + this.gapSize = A.gapSize, + this + } + ; + var Mr = Object.freeze({ + __proto__: null, + ShadowMaterial: mr, + SpriteMaterial: ro, + RawShaderMaterial: Cr, + ShaderMaterial: Pe, + PointsMaterial: Yo, + MeshPhysicalMaterial: vr, + MeshStandardMaterial: yr, + MeshPhongMaterial: Ir, + MeshToonMaterial: Er, + MeshNormalMaterial: Br, + MeshLambertMaterial: xr, + MeshDepthMaterial: ji, + MeshDistanceMaterial: Hi, + MeshBasicMaterial: jA, + MeshMatcapMaterial: Sr, + LineDashedMaterial: wr, + LineBasicMaterial: ko, + Material: qA + }) + , br = { + arraySlice: function(A, e, t) { + return br.isTypedArray(A) ? new A.constructor(A.subarray(e, void 0 !== t ? t : A.length)) : A.slice(e, t) + }, + convertArray: function(A, e, t) { + return !A || !t && A.constructor === e ? A : "number" == typeof e.BYTES_PER_ELEMENT ? new e(A) : Array.prototype.slice.call(A) + }, + isTypedArray: function(A) { + return ArrayBuffer.isView(A) && !(A instanceof DataView) + }, + getKeyframeOrder: function(A) { + for (var e = A.length, t = new Array(e), i = 0; i !== e; ++i) + t[i] = i; + return t.sort((function(e, t) { + return A[e] - A[t] + } + )), + t + }, + sortedArray: function(A, e, t) { + for (var i = A.length, o = new A.constructor(i), n = 0, r = 0; r !== i; ++n) + for (var a = t[n] * e, s = 0; s !== e; ++s) + o[r++] = A[a + s]; + return o + }, + flattenJSON: function(A, e, t, i) { + for (var o = 1, n = A[0]; void 0 !== n && void 0 === n[i]; ) + n = A[o++]; + if (void 0 !== n) { + var r = n[i]; + if (void 0 !== r) + if (Array.isArray(r)) + do { + void 0 !== (r = n[i]) && (e.push(n.time), + t.push.apply(t, r)), + n = A[o++] + } while (void 0 !== n); + else if (void 0 !== r.toArray) + do { + void 0 !== (r = n[i]) && (e.push(n.time), + r.toArray(t, t.length)), + n = A[o++] + } while (void 0 !== n); + else + do { + void 0 !== (r = n[i]) && (e.push(n.time), + t.push(r)), + n = A[o++] + } while (void 0 !== n) + } + }, + subclip: function(A, e, t, i, o) { + o = o || 30; + var n = A.clone(); + n.name = e; + for (var r = [], a = 0; n.tracks.length > a; ++a) { + for (var s = n.tracks[a], l = s.getValueSize(), c = [], h = [], d = 0; s.times.length > d; ++d) { + var p = s.times[d] * o; + if (p >= t && i > p) { + c.push(s.times[d]); + for (var g = 0; l > g; ++g) + h.push(s.values[d * l + g]) + } + } + 0 !== c.length && (s.times = br.convertArray(c, s.times.constructor), + s.values = br.convertArray(h, s.values.constructor), + r.push(s)) + } + n.tracks = r; + var u = 1 / 0; + for (a = 0; n.tracks.length > a; ++a) + u > n.tracks[a].times[0] && (u = n.tracks[a].times[0]); + for (a = 0; n.tracks.length > a; ++a) + n.tracks[a].shift(-1 * u); + return n.resetDuration(), + n + } + }; + function Ur(A, e, t, i) { + this.parameterPositions = A, + this._cachedIndex = 0, + this.resultBuffer = void 0 !== i ? i : new e.constructor(t), + this.sampleValues = e, + this.valueSize = t + } + function Fr(A, e, t, i) { + Ur.call(this, A, e, t, i), + this._weightPrev = -0, + this._offsetPrev = -0, + this._weightNext = -0, + this._offsetNext = -0 + } + function Kr(A, e, t, i) { + Ur.call(this, A, e, t, i) + } + function Qr(A, e, t, i) { + Ur.call(this, A, e, t, i) + } + function Rr(A, e, t, i) { + if (void 0 === A) + throw new Error("THREE.KeyframeTrack: track name is undefined"); + if (void 0 === e || 0 === e.length) + throw new Error("THREE.KeyframeTrack: no keyframes in track named " + A); + this.name = A, + this.times = br.convertArray(e, this.TimeBufferType), + this.values = br.convertArray(t, this.ValueBufferType), + this.setInterpolation(i || this.DefaultInterpolation) + } + function Tr(A, e, t) { + Rr.call(this, A, e, t) + } + function kr(A, e, t, i) { + Rr.call(this, A, e, t, i) + } + function Dr(A, e, t, i) { + Rr.call(this, A, e, t, i) + } + function Lr(A, e, t, i) { + Ur.call(this, A, e, t, i) + } + function Nr(A, e, t, i) { + Rr.call(this, A, e, t, i) + } + function Or(A, e, t, i) { + Rr.call(this, A, e, t, i) + } + function Vr(A, e, t, i) { + Rr.call(this, A, e, t, i) + } + function Gr(A, e, t) { + this.name = A, + this.tracks = t, + this.duration = void 0 !== e ? e : -1, + this.uuid = a.generateUUID(), + 0 > this.duration && this.resetDuration() + } + function Pr(A) { + if (void 0 === A.type) + throw new Error("THREE.KeyframeTrack: track type undefined, can not parse"); + var e = function(A) { + switch (A.toLowerCase()) { + case "scalar": + case "double": + case "float": + case "number": + case "integer": + return Dr; + case "vector": + case "vector2": + case "vector3": + case "vector4": + return Vr; + case "color": + return kr; + case "quaternion": + return Nr; + case "bool": + case "boolean": + return Tr; + case "string": + return Or + } + throw new Error("THREE.KeyframeTrack: Unsupported typeName: " + A) + }(A.type); + if (void 0 === A.times) { + var t = [] + , i = []; + br.flattenJSON(A.keys, t, i, "value"), + A.times = t, + A.values = i + } + return void 0 !== e.parse ? e.parse(A) : new e(A.name,A.times,A.values,A.interpolation) + } + Object.assign(Ur.prototype, { + evaluate: function(A) { + var e = this.parameterPositions + , t = this._cachedIndex + , i = e[t] + , o = e[t - 1]; + A: { + e: { + var n; + t: { + i: if (i <= A) { + for (var r = t + 2; ; ) { + if (void 0 === i) { + if (o > A) + break i; + return this._cachedIndex = t = e.length, + this.afterEnd_(t - 1, A, o) + } + if (t === r) + break; + if (o = i, + (i = e[++t]) > A) + break e + } + n = e.length; + break t + } + if (A >= o) + break A; + var a = e[1]; + a > A && (t = 2, + o = a); + for (r = t - 2; ; ) { + if (void 0 === o) + return this._cachedIndex = 0, + this.beforeStart_(0, A, i); + if (t === r) + break; + if (i = o, + A >= (o = e[--t - 1])) + break e + } + n = t, + t = 0 + } + for (; n > t; ) { + var s = t + n >>> 1; + e[s] > A ? n = s : t = s + 1 + } + if (i = e[t], + void 0 === (o = e[t - 1])) + return this._cachedIndex = 0, + this.beforeStart_(0, A, i); + if (void 0 === i) + return this._cachedIndex = t = e.length, + this.afterEnd_(t - 1, o, A) + } + this._cachedIndex = t, + this.intervalChanged_(t, o, i) + } + return this.interpolate_(t, o, A, i) + }, + settings: null, + DefaultSettings_: {}, + getSettings_: function() { + return this.settings || this.DefaultSettings_ + }, + copySampleValue_: function(A) { + for (var e = this.resultBuffer, t = this.sampleValues, i = this.valueSize, o = A * i, n = 0; n !== i; ++n) + e[n] = t[o + n]; + return e + }, + interpolate_: function() { + throw new Error("call to abstract method") + }, + intervalChanged_: function() {} + }), + Object.assign(Ur.prototype, { + beforeStart_: Ur.prototype.copySampleValue_, + afterEnd_: Ur.prototype.copySampleValue_ + }), + Fr.prototype = Object.assign(Object.create(Ur.prototype), { + constructor: Fr, + DefaultSettings_: { + endingStart: 2400, + endingEnd: 2400 + }, + intervalChanged_: function(A, e, t) { + var i = this.parameterPositions + , o = A - 2 + , n = A + 1 + , r = i[o] + , a = i[n]; + if (void 0 === r) + switch (this.getSettings_().endingStart) { + case 2401: + o = A, + r = 2 * e - t; + break; + case 2402: + r = e + i[o = i.length - 2] - i[o + 1]; + break; + default: + o = A, + r = t + } + if (void 0 === a) + switch (this.getSettings_().endingEnd) { + case 2401: + n = A, + a = 2 * t - e; + break; + case 2402: + n = 1, + a = t + i[1] - i[0]; + break; + default: + n = A - 1, + a = e + } + var s = .5 * (t - e) + , l = this.valueSize; + this._weightPrev = s / (e - r), + this._weightNext = s / (a - t), + this._offsetPrev = o * l, + this._offsetNext = n * l + }, + interpolate_: function(A, e, t, i) { + for (var o = this.resultBuffer, n = this.sampleValues, r = this.valueSize, a = A * r, s = a - r, l = this._offsetPrev, c = this._offsetNext, h = this._weightPrev, d = this._weightNext, p = (t - e) / (i - e), g = p * p, u = g * p, f = -h * u + 2 * h * g - h * p, m = (1 + h) * u + (-1.5 - 2 * h) * g + (-.5 + h) * p + 1, C = (-1 - d) * u + (1.5 + d) * g + .5 * p, y = d * u - d * g, v = 0; v !== r; ++v) + o[v] = f * n[l + v] + m * n[s + v] + C * n[a + v] + y * n[c + v]; + return o + } + }), + Kr.prototype = Object.assign(Object.create(Ur.prototype), { + constructor: Kr, + interpolate_: function(A, e, t, i) { + for (var o = this.resultBuffer, n = this.sampleValues, r = this.valueSize, a = A * r, s = a - r, l = (t - e) / (i - e), c = 1 - l, h = 0; h !== r; ++h) + o[h] = n[s + h] * c + n[a + h] * l; + return o + } + }), + Qr.prototype = Object.assign(Object.create(Ur.prototype), { + constructor: Qr, + interpolate_: function(A) { + return this.copySampleValue_(A - 1) + } + }), + Object.assign(Rr, { + toJSON: function(A) { + var e, t = A.constructor; + if (void 0 !== t.toJSON) + e = t.toJSON(A); + else { + e = { + name: A.name, + times: br.convertArray(A.times, Array), + values: br.convertArray(A.values, Array) + }; + var i = A.getInterpolation(); + i !== A.DefaultInterpolation && (e.interpolation = i) + } + return e.type = A.ValueTypeName, + e + } + }), + Object.assign(Rr.prototype, { + constructor: Rr, + TimeBufferType: Float32Array, + ValueBufferType: Float32Array, + DefaultInterpolation: 2301, + InterpolantFactoryMethodDiscrete: function(A) { + return new Qr(this.times,this.values,this.getValueSize(),A) + }, + InterpolantFactoryMethodLinear: function(A) { + return new Kr(this.times,this.values,this.getValueSize(),A) + }, + InterpolantFactoryMethodSmooth: function(A) { + return new Fr(this.times,this.values,this.getValueSize(),A) + }, + setInterpolation: function(A) { + var e; + switch (A) { + case 2300: + e = this.InterpolantFactoryMethodDiscrete; + break; + case 2301: + e = this.InterpolantFactoryMethodLinear; + break; + case 2302: + e = this.InterpolantFactoryMethodSmooth + } + if (void 0 === e) { + var t = "unsupported interpolation for " + this.ValueTypeName + " keyframe track named " + this.name; + if (void 0 === this.createInterpolant) { + if (A === this.DefaultInterpolation) + throw new Error(t); + this.setInterpolation(this.DefaultInterpolation) + } + return console.warn("THREE.KeyframeTrack:", t), + this + } + return this.createInterpolant = e, + this + }, + getInterpolation: function() { + switch (this.createInterpolant) { + case this.InterpolantFactoryMethodDiscrete: + return 2300; + case this.InterpolantFactoryMethodLinear: + return 2301; + case this.InterpolantFactoryMethodSmooth: + return 2302 + } + }, + getValueSize: function() { + return this.values.length / this.times.length + }, + shift: function(A) { + if (0 !== A) + for (var e = this.times, t = 0, i = e.length; t !== i; ++t) + e[t] += A; + return this + }, + scale: function(A) { + if (1 !== A) + for (var e = this.times, t = 0, i = e.length; t !== i; ++t) + e[t] *= A; + return this + }, + trim: function(A, e) { + for (var t = this.times, i = t.length, o = 0, n = i - 1; o !== i && A > t[o]; ) + ++o; + for (; -1 !== n && t[n] > e; ) + --n; + if (++n, + 0 !== o || n !== i) { + n > o || (o = (n = Math.max(n, 1)) - 1); + var r = this.getValueSize(); + this.times = br.arraySlice(t, o, n), + this.values = br.arraySlice(this.values, o * r, n * r) + } + return this + }, + validate: function() { + var A = !0 + , e = this.getValueSize(); + e - Math.floor(e) != 0 && (console.error("THREE.KeyframeTrack: Invalid value size in track.", this), + A = !1); + var t = this.times + , i = this.values + , o = t.length; + 0 === o && (console.error("THREE.KeyframeTrack: Track is empty.", this), + A = !1); + for (var n = null, r = 0; r !== o; r++) { + var a = t[r]; + if ("number" == typeof a && isNaN(a)) { + console.error("THREE.KeyframeTrack: Time is not a valid number.", this, r, a), + A = !1; + break + } + if (null !== n && n > a) { + console.error("THREE.KeyframeTrack: Out of order keys.", this, r, a, n), + A = !1; + break + } + n = a + } + if (void 0 !== i && br.isTypedArray(i)) { + r = 0; + for (var s = i.length; r !== s; ++r) { + var l = i[r]; + if (isNaN(l)) { + console.error("THREE.KeyframeTrack: Value is not a valid number.", this, r, l), + A = !1; + break + } + } + } + return A + }, + optimize: function() { + for (var A = br.arraySlice(this.times), e = br.arraySlice(this.values), t = this.getValueSize(), i = 2302 === this.getInterpolation(), o = 1, n = A.length - 1, r = 1; n > r; ++r) { + var a = !1 + , s = A[r]; + if (s !== A[r + 1] && (1 !== r || s !== s[0])) + if (i) + a = !0; + else + for (var l = r * t, c = l - t, h = l + t, d = 0; d !== t; ++d) { + var p = e[l + d]; + if (p !== e[c + d] || p !== e[h + d]) { + a = !0; + break + } + } + if (a) { + if (r !== o) { + A[o] = A[r]; + var g = r * t + , u = o * t; + for (d = 0; d !== t; ++d) + e[u + d] = e[g + d] + } + ++o + } + } + if (n > 0) { + A[o] = A[n]; + for (g = n * t, + u = o * t, + d = 0; d !== t; ++d) + e[u + d] = e[g + d]; + ++o + } + return o !== A.length ? (this.times = br.arraySlice(A, 0, o), + this.values = br.arraySlice(e, 0, o * t)) : (this.times = A, + this.values = e), + this + }, + clone: function() { + var A = br.arraySlice(this.times, 0) + , e = br.arraySlice(this.values, 0) + , t = new (0, + this.constructor)(this.name,A,e); + return t.createInterpolant = this.createInterpolant, + t + } + }), + Tr.prototype = Object.assign(Object.create(Rr.prototype), { + constructor: Tr, + ValueTypeName: "bool", + ValueBufferType: Array, + DefaultInterpolation: 2300, + InterpolantFactoryMethodLinear: void 0, + InterpolantFactoryMethodSmooth: void 0 + }), + kr.prototype = Object.assign(Object.create(Rr.prototype), { + constructor: kr, + ValueTypeName: "color" + }), + Dr.prototype = Object.assign(Object.create(Rr.prototype), { + constructor: Dr, + ValueTypeName: "number" + }), + Lr.prototype = Object.assign(Object.create(Ur.prototype), { + constructor: Lr, + interpolate_: function(A, e, t, i) { + for (var o = this.resultBuffer, n = this.sampleValues, r = this.valueSize, a = A * r, s = (t - e) / (i - e), l = a + r; a !== l; a += 4) + f.slerpFlat(o, 0, n, a - r, n, a, s); + return o + } + }), + Nr.prototype = Object.assign(Object.create(Rr.prototype), { + constructor: Nr, + ValueTypeName: "quaternion", + DefaultInterpolation: 2301, + InterpolantFactoryMethodLinear: function(A) { + return new Lr(this.times,this.values,this.getValueSize(),A) + }, + InterpolantFactoryMethodSmooth: void 0 + }), + Or.prototype = Object.assign(Object.create(Rr.prototype), { + constructor: Or, + ValueTypeName: "string", + ValueBufferType: Array, + DefaultInterpolation: 2300, + InterpolantFactoryMethodLinear: void 0, + InterpolantFactoryMethodSmooth: void 0 + }), + Vr.prototype = Object.assign(Object.create(Rr.prototype), { + constructor: Vr, + ValueTypeName: "vector" + }), + Object.assign(Gr, { + parse: function(A) { + for (var e = [], t = A.tracks, i = 1 / (A.fps || 1), o = 0, n = t.length; o !== n; ++o) + e.push(Pr(t[o]).scale(i)); + return new Gr(A.name,A.duration,e) + }, + toJSON: function(A) { + for (var e = [], t = A.tracks, i = { + name: A.name, + duration: A.duration, + tracks: e, + uuid: A.uuid + }, o = 0, n = t.length; o !== n; ++o) + e.push(Rr.toJSON(t[o])); + return i + }, + CreateFromMorphTargetSequence: function(A, e, t, i) { + for (var o = e.length, n = [], r = 0; o > r; r++) { + var a = [] + , s = []; + a.push((r + o - 1) % o, r, (r + 1) % o), + s.push(0, 1, 0); + var l = br.getKeyframeOrder(a); + a = br.sortedArray(a, 1, l), + s = br.sortedArray(s, 1, l), + i || 0 !== a[0] || (a.push(o), + s.push(s[0])), + n.push(new Dr(".morphTargetInfluences[" + e[r].name + "]",a,s).scale(1 / t)) + } + return new Gr(A,-1,n) + }, + findByName: function(A, e) { + var t = A; + if (!Array.isArray(A)) { + t = A.geometry && A.geometry.animations || A.animations + } + for (var i = 0; t.length > i; i++) + if (t[i].name === e) + return t[i]; + return null + }, + CreateClipsFromMorphTargetSequences: function(A, e, t) { + for (var i = {}, o = /^([\w-]*?)([\d]+)$/, n = 0, r = A.length; r > n; n++) { + var a = A[n] + , s = a.name.match(o); + if (s && s.length > 1) { + var l = i[h = s[1]]; + l || (i[h] = l = []), + l.push(a) + } + } + var c = []; + for (var h in i) + c.push(Gr.CreateFromMorphTargetSequence(h, i[h], e, t)); + return c + }, + parseAnimation: function(A, e) { + if (!A) + return console.error("THREE.AnimationClip: No animation in JSONLoader data."), + null; + for (var t = function(A, e, t, i, o) { + if (0 !== t.length) { + var n = [] + , r = []; + br.flattenJSON(t, n, r, i), + 0 !== n.length && o.push(new A(e,n,r)) + } + }, i = [], o = A.name || "default", n = A.length || -1, r = A.fps || 30, a = A.hierarchy || [], s = 0; a.length > s; s++) { + var l = a[s].keys; + if (l && 0 !== l.length) + if (l[0].morphTargets) { + for (var c = {}, h = 0; l.length > h; h++) + if (l[h].morphTargets) + for (var d = 0; l[h].morphTargets.length > d; d++) + c[l[h].morphTargets[d]] = -1; + for (var p in c) { + var g = [] + , u = []; + for (d = 0; d !== l[h].morphTargets.length; ++d) { + var f = l[h]; + g.push(f.time), + u.push(f.morphTarget === p ? 1 : 0) + } + i.push(new Dr(".morphTargetInfluence[" + p + "]",g,u)) + } + n = c.length * (r || 1) + } else { + var m = ".bones[" + e[s].name + "]"; + t(Vr, m + ".position", l, "pos", i), + t(Nr, m + ".quaternion", l, "rot", i), + t(Vr, m + ".scale", l, "scl", i) + } + } + return 0 === i.length ? null : new Gr(o,n,i) + } + }), + Object.assign(Gr.prototype, { + resetDuration: function() { + for (var A = 0, e = 0, t = this.tracks.length; e !== t; ++e) { + var i = this.tracks[e]; + A = Math.max(A, i.times[i.times.length - 1]) + } + return this.duration = A, + this + }, + trim: function() { + for (var A = 0; this.tracks.length > A; A++) + this.tracks[A].trim(0, this.duration); + return this + }, + validate: function() { + for (var A = !0, e = 0; this.tracks.length > e; e++) + A = A && this.tracks[e].validate(); + return A + }, + optimize: function() { + for (var A = 0; this.tracks.length > A; A++) + this.tracks[A].optimize(); + return this + }, + clone: function() { + for (var A = [], e = 0; this.tracks.length > e; e++) + A.push(this.tracks[e].clone()); + return new Gr(this.name,this.duration,A) + } + }); + var qr = { + enabled: !1, + files: {}, + add: function(A, e) { + !1 !== this.enabled && (this.files[A] = e) + }, + get: function(A) { + if (!1 !== this.enabled) + return this.files[A] + }, + remove: function(A) { + delete this.files[A] + }, + clear: function() { + this.files = {} + } + }; + function jr(A, e, t) { + var i = this + , o = !1 + , n = 0 + , r = 0 + , a = void 0 + , s = []; + this.onStart = void 0, + this.onLoad = A, + this.onProgress = e, + this.onError = t, + this.itemStart = function(A) { + r++, + !1 === o && void 0 !== i.onStart && i.onStart(A, n, r), + o = !0 + } + , + this.itemEnd = function(A) { + n++, + void 0 !== i.onProgress && i.onProgress(A, n, r), + n === r && (o = !1, + void 0 !== i.onLoad && i.onLoad()) + } + , + this.itemError = function(A) { + void 0 !== i.onError && i.onError(A) + } + , + this.resolveURL = function(A) { + return a ? a(A) : A + } + , + this.setURLModifier = function(A) { + return a = A, + this + } + , + this.addHandler = function(A, e) { + return s.push(A, e), + this + } + , + this.removeHandler = function(A) { + var e = s.indexOf(A); + return -1 !== e && s.splice(e, 2), + this + } + , + this.getHandler = function(A) { + for (var e = 0, t = s.length; t > e; e += 2) { + var i = s[e] + , o = s[e + 1]; + if (i.global && (i.lastIndex = 0), + i.test(A)) + return o + } + return null + } + } + var Hr = new jr; + function Yr(A) { + this.manager = void 0 !== A ? A : Hr, + this.crossOrigin = "anonymous", + this.path = "", + this.resourcePath = "" + } + Object.assign(Yr.prototype, { + load: function() {}, + parse: function() {}, + setCrossOrigin: function(A) { + return this.crossOrigin = A, + this + }, + setPath: function(A) { + return this.path = A, + this + }, + setResourcePath: function(A) { + return this.resourcePath = A, + this + } + }); + var Wr = {}; + function Jr(A) { + Yr.call(this, A) + } + function zr(A) { + Yr.call(this, A) + } + function Zr(A) { + Yr.call(this, A) + } + function Xr(A) { + Yr.call(this, A) + } + function _r(A) { + Yr.call(this, A) + } + function $r(A) { + Yr.call(this, A) + } + function Aa(A) { + Yr.call(this, A) + } + function ea() { + this.type = "Curve", + this.arcLengthDivisions = 200 + } + function ta(A, e, t, i, o, n, r, a) { + ea.call(this), + this.type = "EllipseCurve", + this.aX = A || 0, + this.aY = e || 0, + this.xRadius = t || 1, + this.yRadius = i || 1, + this.aStartAngle = o || 0, + this.aEndAngle = n || 2 * Math.PI, + this.aClockwise = r || !1, + this.aRotation = a || 0 + } + function ia(A, e, t, i, o, n) { + ta.call(this, A, e, t, t, i, o, n), + this.type = "ArcCurve" + } + function oa() { + var A = 0 + , e = 0 + , t = 0 + , i = 0; + function o(o, n, r, a) { + A = o, + e = r, + t = -3 * o + 3 * n - 2 * r - a, + i = 2 * o - 2 * n + r + a + } + return { + initCatmullRom: function(A, e, t, i, n) { + o(e, t, n * (t - A), n * (i - e)) + }, + initNonuniformCatmullRom: function(A, e, t, i, n, r, a) { + var s = (e - A) / n - (t - A) / (n + r) + (t - e) / r + , l = (t - e) / r - (i - e) / (r + a) + (i - t) / a; + o(e, t, s *= r, l *= r) + }, + calc: function(o) { + var n = o * o; + return A + e * o + t * n + i * (n * o) + } + } + } + Jr.prototype = Object.assign(Object.create(Yr.prototype), { + constructor: Jr, + load: function(A, e, t, i) { + void 0 === A && (A = ""), + void 0 !== this.path && (A = this.path + A), + A = this.manager.resolveURL(A); + var o = this + , n = qr.get(A); + if (void 0 !== n) + return o.manager.itemStart(A), + setTimeout((function() { + e && e(n), + o.manager.itemEnd(A) + } + ), 0), + n; + if (void 0 === Wr[A]) { + var r = A.match(/^data:(.*?)(;base64)?,(.*)$/); + if (r) { + var a = r[1] + , s = !!r[2] + , l = r[3]; + l = decodeURIComponent(l), + s && (l = atob(l)); + try { + var c, h = (this.responseType || "").toLowerCase(); + switch (h) { + case "arraybuffer": + case "blob": + for (var d = new Uint8Array(l.length), p = 0; l.length > p; p++) + d[p] = l.charCodeAt(p); + c = "blob" === h ? new Blob([d.buffer],{ + type: a + }) : d.buffer; + break; + case "document": + var g = new DOMParser; + c = g.parseFromString(l, a); + break; + case "json": + c = JSON.parse(l); + break; + default: + c = l + } + setTimeout((function() { + e && e(c), + o.manager.itemEnd(A) + } + ), 0) + } catch (e) { + setTimeout((function() { + i && i(e), + o.manager.itemError(A), + o.manager.itemEnd(A) + } + ), 0) + } + } else { + Wr[A] = [], + Wr[A].push({ + onLoad: e, + onProgress: t, + onError: i + }); + var u = new XMLHttpRequest; + for (var f in u.open("GET", A, !0), + u.addEventListener("load", (function(e) { + var t = this.response + , i = Wr[A]; + if (delete Wr[A], + 200 === this.status || 0 === this.status) { + 0 === this.status && console.warn("THREE.FileLoader: HTTP Status 0 received."), + qr.add(A, t); + for (var n = 0, r = i.length; r > n; n++) { + (a = i[n]).onLoad && a.onLoad(t) + } + o.manager.itemEnd(A) + } else { + for (n = 0, + r = i.length; r > n; n++) { + var a; + (a = i[n]).onError && a.onError(e) + } + o.manager.itemError(A), + o.manager.itemEnd(A) + } + } + ), !1), + u.addEventListener("progress", (function(e) { + for (var t = Wr[A], i = 0, o = t.length; o > i; i++) { + var n = t[i]; + n.onProgress && n.onProgress(e) + } + } + ), !1), + u.addEventListener("error", (function(e) { + var t = Wr[A]; + delete Wr[A]; + for (var i = 0, n = t.length; n > i; i++) { + var r = t[i]; + r.onError && r.onError(e) + } + o.manager.itemError(A), + o.manager.itemEnd(A) + } + ), !1), + u.addEventListener("abort", (function(e) { + var t = Wr[A]; + delete Wr[A]; + for (var i = 0, n = t.length; n > i; i++) { + var r = t[i]; + r.onError && r.onError(e) + } + o.manager.itemError(A), + o.manager.itemEnd(A) + } + ), !1), + void 0 !== this.responseType && (u.responseType = this.responseType), + void 0 !== this.withCredentials && (u.withCredentials = this.withCredentials), + u.overrideMimeType && u.overrideMimeType(void 0 !== this.mimeType ? this.mimeType : "text/plain"), + this.requestHeader) + u.setRequestHeader(f, this.requestHeader[f]); + u.send(null) + } + return o.manager.itemStart(A), + u + } + Wr[A].push({ + onLoad: e, + onProgress: t, + onError: i + }) + }, + setResponseType: function(A) { + return this.responseType = A, + this + }, + setWithCredentials: function(A) { + return this.withCredentials = A, + this + }, + setMimeType: function(A) { + return this.mimeType = A, + this + }, + setRequestHeader: function(A) { + return this.requestHeader = A, + this + } + }), + zr.prototype = Object.assign(Object.create(Yr.prototype), { + constructor: zr, + load: function(A, e, t, i) { + var o = this + , n = new Jr(o.manager); + n.setPath(o.path), + n.load(A, (function(A) { + e(o.parse(JSON.parse(A))) + } + ), t, i) + }, + parse: function(A) { + for (var e = [], t = 0; A.length > t; t++) { + var i = Gr.parse(A[t]); + e.push(i) + } + return e + } + }), + Zr.prototype = Object.assign(Object.create(Yr.prototype), { + constructor: Zr, + load: function(A, e, t, i) { + var o = this + , n = [] + , r = new An; + r.image = n; + var a = new Jr(this.manager); + function s(s) { + a.load(A[s], (function(A) { + var t = o.parse(A, !0); + n[s] = { + width: t.width, + height: t.height, + format: t.format, + mipmaps: t.mipmaps + }, + 6 === (l += 1) && (1 === t.mipmapCount && (r.minFilter = 1006), + r.format = t.format, + r.needsUpdate = !0, + e && e(r)) + } + ), t, i) + } + if (a.setPath(this.path), + a.setResponseType("arraybuffer"), + Array.isArray(A)) + for (var l = 0, c = 0, h = A.length; h > c; ++c) + s(c); + else + a.load(A, (function(A) { + var t = o.parse(A, !0); + if (t.isCubemap) + for (var i = t.mipmaps.length / t.mipmapCount, a = 0; i > a; a++) { + n[a] = { + mipmaps: [] + }; + for (var s = 0; t.mipmapCount > s; s++) + n[a].mipmaps.push(t.mipmaps[a * t.mipmapCount + s]), + n[a].format = t.format, + n[a].width = t.width, + n[a].height = t.height + } + else + r.image.width = t.width, + r.image.height = t.height, + r.mipmaps = t.mipmaps; + 1 === t.mipmapCount && (r.minFilter = 1006), + r.format = t.format, + r.needsUpdate = !0, + e && e(r) + } + ), t, i); + return r + } + }), + Xr.prototype = Object.assign(Object.create(Yr.prototype), { + constructor: Xr, + load: function(A, e, t, i) { + var o = this + , n = new We + , r = new Jr(this.manager); + return r.setResponseType("arraybuffer"), + r.setPath(this.path), + r.load(A, (function(A) { + var t = o.parse(A); + t && (void 0 !== t.image ? n.image = t.image : void 0 !== t.data && (n.image.width = t.width, + n.image.height = t.height, + n.image.data = t.data), + n.wrapS = void 0 !== t.wrapS ? t.wrapS : 1001, + n.wrapT = void 0 !== t.wrapT ? t.wrapT : 1001, + n.magFilter = void 0 !== t.magFilter ? t.magFilter : 1006, + n.minFilter = void 0 !== t.minFilter ? t.minFilter : 1006, + n.anisotropy = void 0 !== t.anisotropy ? t.anisotropy : 1, + void 0 !== t.format && (n.format = t.format), + void 0 !== t.type && (n.type = t.type), + void 0 !== t.mipmaps && (n.mipmaps = t.mipmaps, + n.minFilter = 1008), + 1 === t.mipmapCount && (n.minFilter = 1006), + n.needsUpdate = !0, + e && e(n, t)) + } + ), t, i), + n + } + }), + _r.prototype = Object.assign(Object.create(Yr.prototype), { + constructor: _r, + load: function(A, e, t, i) { + void 0 !== this.path && (A = this.path + A), + A = this.manager.resolveURL(A); + var o = this + , n = qr.get(A); + if (void 0 !== n) + return o.manager.itemStart(A), + setTimeout((function() { + e && e(n), + o.manager.itemEnd(A) + } + ), 0), + n; + var r = document.createElementNS("http://www.w3.org/1999/xhtml", "img"); + function a() { + r.removeEventListener("load", a, !1), + r.removeEventListener("error", s, !1), + qr.add(A, this), + e && e(this), + o.manager.itemEnd(A) + } + function s(e) { + r.removeEventListener("load", a, !1), + r.removeEventListener("error", s, !1), + i && i(e), + o.manager.itemError(A), + o.manager.itemEnd(A) + } + return r.addEventListener("load", a, !1), + r.addEventListener("error", s, !1), + "data:" !== A.substr(0, 5) && void 0 !== this.crossOrigin && (r.crossOrigin = this.crossOrigin), + o.manager.itemStart(A), + r.src = A, + r + } + }), + $r.prototype = Object.assign(Object.create(Yr.prototype), { + constructor: $r, + load: function(A, e, t, i) { + var o = new ut + , n = new _r(this.manager); + n.setCrossOrigin(this.crossOrigin), + n.setPath(this.path); + var r = 0; + function a(t) { + n.load(A[t], (function(A) { + o.images[t] = A, + 6 === ++r && (o.needsUpdate = !0, + e && e(o)) + } + ), void 0, i) + } + for (var s = 0; A.length > s; ++s) + a(s); + return o + } + }), + Aa.prototype = Object.assign(Object.create(Yr.prototype), { + constructor: Aa, + load: function(A, e, t, i) { + var o = new d + , n = new _r(this.manager); + return n.setCrossOrigin(this.crossOrigin), + n.setPath(this.path), + n.load(A, (function(t) { + o.image = t; + var i = A.search(/\.jpe?g($|\?)/i) > 0 || 0 === A.search(/^data\:image\/jpeg/); + o.format = i ? 1022 : 1023, + o.needsUpdate = !0, + void 0 !== e && e(o) + } + ), t, i), + o + } + }), + Object.assign(ea.prototype, { + getPoint: function() { + return console.warn("THREE.Curve: .getPoint() not implemented."), + null + }, + getPointAt: function(A, e) { + var t = this.getUtoTmapping(A); + return this.getPoint(t, e) + }, + getPoints: function(A) { + void 0 === A && (A = 5); + for (var e = [], t = 0; A >= t; t++) + e.push(this.getPoint(t / A)); + return e + }, + getSpacedPoints: function(A) { + void 0 === A && (A = 5); + for (var e = [], t = 0; A >= t; t++) + e.push(this.getPointAt(t / A)); + return e + }, + getLength: function() { + var A = this.getLengths(); + return A[A.length - 1] + }, + getLengths: function(A) { + if (void 0 === A && (A = this.arcLengthDivisions), + this.cacheArcLengths && this.cacheArcLengths.length === A + 1 && !this.needsUpdate) + return this.cacheArcLengths; + this.needsUpdate = !1; + var e, t, i = [], o = this.getPoint(0), n = 0; + for (i.push(0), + t = 1; A >= t; t++) + n += (e = this.getPoint(t / A)).distanceTo(o), + i.push(n), + o = e; + return this.cacheArcLengths = i, + i + }, + updateArcLengths: function() { + this.needsUpdate = !0, + this.getLengths() + }, + getUtoTmapping: function(A, e) { + var t, i = this.getLengths(), o = 0, n = i.length; + t = e || A * i[n - 1]; + for (var r, a = 0, s = n - 1; s >= a; ) + if (0 > (r = i[o = Math.floor(a + (s - a) / 2)] - t)) + a = o + 1; + else { + if (0 >= r) { + s = o; + break + } + s = o - 1 + } + if (i[o = s] === t) + return o / (n - 1); + var l = i[o]; + return (o + (t - l) / (i[o + 1] - l)) / (n - 1) + }, + getTangent: function(A) { + var e = A - 1e-4 + , t = A + 1e-4; + 0 > e && (e = 0), + t > 1 && (t = 1); + var i = this.getPoint(e); + return this.getPoint(t).clone().sub(i).normalize() + }, + getTangentAt: function(A) { + var e = this.getUtoTmapping(A); + return this.getTangent(e) + }, + computeFrenetFrames: function(A, e) { + var t, i, o = new y, n = [], r = [], s = [], l = new y, c = new M; + for (t = 0; A >= t; t++) + n[t] = this.getTangentAt(t / A), + n[t].normalize(); + r[0] = new y, + s[0] = new y; + var h = Number.MAX_VALUE + , d = Math.abs(n[0].x) + , p = Math.abs(n[0].y) + , g = Math.abs(n[0].z); + for (d > h || (h = d, + o.set(1, 0, 0)), + p > h || (h = p, + o.set(0, 1, 0)), + g > h || o.set(0, 0, 1), + l.crossVectors(n[0], o).normalize(), + r[0].crossVectors(n[0], l), + s[0].crossVectors(n[0], r[0]), + t = 1; A >= t; t++) + r[t] = r[t - 1].clone(), + s[t] = s[t - 1].clone(), + l.crossVectors(n[t - 1], n[t]), + l.length() > Number.EPSILON && (l.normalize(), + i = Math.acos(a.clamp(n[t - 1].dot(n[t]), -1, 1)), + r[t].applyMatrix4(c.makeRotationAxis(l, i))), + s[t].crossVectors(n[t], r[t]); + if (!0 === e) + for (i = Math.acos(a.clamp(r[0].dot(r[A]), -1, 1)), + i /= A, + n[0].dot(l.crossVectors(r[0], r[A])) > 0 && (i = -i), + t = 1; A >= t; t++) + r[t].applyMatrix4(c.makeRotationAxis(n[t], i * t)), + s[t].crossVectors(n[t], r[t]); + return { + tangents: n, + normals: r, + binormals: s + } + }, + clone: function() { + return (new this.constructor).copy(this) + }, + copy: function(A) { + return this.arcLengthDivisions = A.arcLengthDivisions, + this + }, + toJSON: function() { + var A = { + metadata: { + version: 4.5, + type: "Curve", + generator: "Curve.toJSON" + } + }; + return A.arcLengthDivisions = this.arcLengthDivisions, + A.type = this.type, + A + }, + fromJSON: function(A) { + return this.arcLengthDivisions = A.arcLengthDivisions, + this + } + }), + (ta.prototype = Object.create(ea.prototype)).constructor = ta, + ta.prototype.isEllipseCurve = !0, + ta.prototype.getPoint = function(A, e) { + for (var t = e || new s, i = 2 * Math.PI, o = this.aEndAngle - this.aStartAngle, n = Math.abs(o) < Number.EPSILON; 0 > o; ) + o += i; + for (; o > i; ) + o -= i; + Number.EPSILON > o && (o = n ? 0 : i), + !0 !== this.aClockwise || n || (o === i ? o = -i : o -= i); + var r = this.aStartAngle + A * o + , a = this.aX + this.xRadius * Math.cos(r) + , l = this.aY + this.yRadius * Math.sin(r); + if (0 !== this.aRotation) { + var c = Math.cos(this.aRotation) + , h = Math.sin(this.aRotation) + , d = a - this.aX + , p = l - this.aY; + a = d * c - p * h + this.aX, + l = d * h + p * c + this.aY + } + return t.set(a, l) + } + , + ta.prototype.copy = function(A) { + return ea.prototype.copy.call(this, A), + this.aX = A.aX, + this.aY = A.aY, + this.xRadius = A.xRadius, + this.yRadius = A.yRadius, + this.aStartAngle = A.aStartAngle, + this.aEndAngle = A.aEndAngle, + this.aClockwise = A.aClockwise, + this.aRotation = A.aRotation, + this + } + , + ta.prototype.toJSON = function() { + var A = ea.prototype.toJSON.call(this); + return A.aX = this.aX, + A.aY = this.aY, + A.xRadius = this.xRadius, + A.yRadius = this.yRadius, + A.aStartAngle = this.aStartAngle, + A.aEndAngle = this.aEndAngle, + A.aClockwise = this.aClockwise, + A.aRotation = this.aRotation, + A + } + , + ta.prototype.fromJSON = function(A) { + return ea.prototype.fromJSON.call(this, A), + this.aX = A.aX, + this.aY = A.aY, + this.xRadius = A.xRadius, + this.yRadius = A.yRadius, + this.aStartAngle = A.aStartAngle, + this.aEndAngle = A.aEndAngle, + this.aClockwise = A.aClockwise, + this.aRotation = A.aRotation, + this + } + , + (ia.prototype = Object.create(ta.prototype)).constructor = ia, + ia.prototype.isArcCurve = !0; + var na = new y + , ra = new oa + , aa = new oa + , sa = new oa; + function la(A, e, t, i) { + ea.call(this), + this.type = "CatmullRomCurve3", + this.points = A || [], + this.closed = e || !1, + this.curveType = t || "centripetal", + this.tension = i || .5 + } + function ca(A, e, t, i, o) { + var n = .5 * (i - e) + , r = .5 * (o - t) + , a = A * A; + return (2 * t - 2 * i + n + r) * (A * a) + (-3 * t + 3 * i - 2 * n - r) * a + n * A + t + } + function ha(A, e, t, i) { + return function(A, e) { + var t = 1 - A; + return t * t * e + }(A, e) + function(A, e) { + return 2 * (1 - A) * A * e + }(A, t) + function(A, e) { + return A * A * e + }(A, i) + } + function da(A, e, t, i, o) { + return function(A, e) { + var t = 1 - A; + return t * t * t * e + }(A, e) + function(A, e) { + var t = 1 - A; + return 3 * t * t * A * e + }(A, t) + function(A, e) { + return 3 * (1 - A) * A * A * e + }(A, i) + function(A, e) { + return A * A * A * e + }(A, o) + } + function pa(A, e, t, i) { + ea.call(this), + this.type = "CubicBezierCurve", + this.v0 = A || new s, + this.v1 = e || new s, + this.v2 = t || new s, + this.v3 = i || new s + } + function ga(A, e, t, i) { + ea.call(this), + this.type = "CubicBezierCurve3", + this.v0 = A || new y, + this.v1 = e || new y, + this.v2 = t || new y, + this.v3 = i || new y + } + function ua(A, e) { + ea.call(this), + this.type = "LineCurve", + this.v1 = A || new s, + this.v2 = e || new s + } + function fa(A, e) { + ea.call(this), + this.type = "LineCurve3", + this.v1 = A || new y, + this.v2 = e || new y + } + function ma(A, e, t) { + ea.call(this), + this.type = "QuadraticBezierCurve", + this.v0 = A || new s, + this.v1 = e || new s, + this.v2 = t || new s + } + function Ca(A, e, t) { + ea.call(this), + this.type = "QuadraticBezierCurve3", + this.v0 = A || new y, + this.v1 = e || new y, + this.v2 = t || new y + } + function ya(A) { + ea.call(this), + this.type = "SplineCurve", + this.points = A || [] + } + (la.prototype = Object.create(ea.prototype)).constructor = la, + la.prototype.isCatmullRomCurve3 = !0, + la.prototype.getPoint = function(A, e) { + var t, i, o, n, r = e || new y, a = this.points, s = a.length, l = (s - (this.closed ? 0 : 1)) * A, c = Math.floor(l), h = l - c; + if (this.closed ? c += c > 0 ? 0 : (Math.floor(Math.abs(c) / s) + 1) * s : 0 === h && c === s - 1 && (c = s - 2, + h = 1), + this.closed || c > 0 ? t = a[(c - 1) % s] : (na.subVectors(a[0], a[1]).add(a[0]), + t = na), + i = a[c % s], + o = a[(c + 1) % s], + this.closed || s > c + 2 ? n = a[(c + 2) % s] : (na.subVectors(a[s - 1], a[s - 2]).add(a[s - 1]), + n = na), + "centripetal" === this.curveType || "chordal" === this.curveType) { + var d = "chordal" === this.curveType ? .5 : .25 + , p = Math.pow(t.distanceToSquared(i), d) + , g = Math.pow(i.distanceToSquared(o), d) + , u = Math.pow(o.distanceToSquared(n), d); + 1e-4 > g && (g = 1), + 1e-4 > p && (p = g), + 1e-4 > u && (u = g), + ra.initNonuniformCatmullRom(t.x, i.x, o.x, n.x, p, g, u), + aa.initNonuniformCatmullRom(t.y, i.y, o.y, n.y, p, g, u), + sa.initNonuniformCatmullRom(t.z, i.z, o.z, n.z, p, g, u) + } else + "catmullrom" === this.curveType && (ra.initCatmullRom(t.x, i.x, o.x, n.x, this.tension), + aa.initCatmullRom(t.y, i.y, o.y, n.y, this.tension), + sa.initCatmullRom(t.z, i.z, o.z, n.z, this.tension)); + return r.set(ra.calc(h), aa.calc(h), sa.calc(h)), + r + } + , + la.prototype.copy = function(A) { + ea.prototype.copy.call(this, A), + this.points = []; + for (var e = 0, t = A.points.length; t > e; e++) { + this.points.push(A.points[e].clone()) + } + return this.closed = A.closed, + this.curveType = A.curveType, + this.tension = A.tension, + this + } + , + la.prototype.toJSON = function() { + var A = ea.prototype.toJSON.call(this); + A.points = []; + for (var e = 0, t = this.points.length; t > e; e++) { + A.points.push(this.points[e].toArray()) + } + return A.closed = this.closed, + A.curveType = this.curveType, + A.tension = this.tension, + A + } + , + la.prototype.fromJSON = function(A) { + ea.prototype.fromJSON.call(this, A), + this.points = []; + for (var e = 0, t = A.points.length; t > e; e++) { + var i = A.points[e]; + this.points.push((new y).fromArray(i)) + } + return this.closed = A.closed, + this.curveType = A.curveType, + this.tension = A.tension, + this + } + , + (pa.prototype = Object.create(ea.prototype)).constructor = pa, + pa.prototype.isCubicBezierCurve = !0, + pa.prototype.getPoint = function(A, e) { + var t = e || new s + , i = this.v0 + , o = this.v1 + , n = this.v2 + , r = this.v3; + return t.set(da(A, i.x, o.x, n.x, r.x), da(A, i.y, o.y, n.y, r.y)), + t + } + , + pa.prototype.copy = function(A) { + return ea.prototype.copy.call(this, A), + this.v0.copy(A.v0), + this.v1.copy(A.v1), + this.v2.copy(A.v2), + this.v3.copy(A.v3), + this + } + , + pa.prototype.toJSON = function() { + var A = ea.prototype.toJSON.call(this); + return A.v0 = this.v0.toArray(), + A.v1 = this.v1.toArray(), + A.v2 = this.v2.toArray(), + A.v3 = this.v3.toArray(), + A + } + , + pa.prototype.fromJSON = function(A) { + return ea.prototype.fromJSON.call(this, A), + this.v0.fromArray(A.v0), + this.v1.fromArray(A.v1), + this.v2.fromArray(A.v2), + this.v3.fromArray(A.v3), + this + } + , + (ga.prototype = Object.create(ea.prototype)).constructor = ga, + ga.prototype.isCubicBezierCurve3 = !0, + ga.prototype.getPoint = function(A, e) { + var t = e || new y + , i = this.v0 + , o = this.v1 + , n = this.v2 + , r = this.v3; + return t.set(da(A, i.x, o.x, n.x, r.x), da(A, i.y, o.y, n.y, r.y), da(A, i.z, o.z, n.z, r.z)), + t + } + , + ga.prototype.copy = function(A) { + return ea.prototype.copy.call(this, A), + this.v0.copy(A.v0), + this.v1.copy(A.v1), + this.v2.copy(A.v2), + this.v3.copy(A.v3), + this + } + , + ga.prototype.toJSON = function() { + var A = ea.prototype.toJSON.call(this); + return A.v0 = this.v0.toArray(), + A.v1 = this.v1.toArray(), + A.v2 = this.v2.toArray(), + A.v3 = this.v3.toArray(), + A + } + , + ga.prototype.fromJSON = function(A) { + return ea.prototype.fromJSON.call(this, A), + this.v0.fromArray(A.v0), + this.v1.fromArray(A.v1), + this.v2.fromArray(A.v2), + this.v3.fromArray(A.v3), + this + } + , + (ua.prototype = Object.create(ea.prototype)).constructor = ua, + ua.prototype.isLineCurve = !0, + ua.prototype.getPoint = function(A, e) { + var t = e || new s; + return 1 === A ? t.copy(this.v2) : (t.copy(this.v2).sub(this.v1), + t.multiplyScalar(A).add(this.v1)), + t + } + , + ua.prototype.getPointAt = function(A, e) { + return this.getPoint(A, e) + } + , + ua.prototype.getTangent = function() { + return this.v2.clone().sub(this.v1).normalize() + } + , + ua.prototype.copy = function(A) { + return ea.prototype.copy.call(this, A), + this.v1.copy(A.v1), + this.v2.copy(A.v2), + this + } + , + ua.prototype.toJSON = function() { + var A = ea.prototype.toJSON.call(this); + return A.v1 = this.v1.toArray(), + A.v2 = this.v2.toArray(), + A + } + , + ua.prototype.fromJSON = function(A) { + return ea.prototype.fromJSON.call(this, A), + this.v1.fromArray(A.v1), + this.v2.fromArray(A.v2), + this + } + , + (fa.prototype = Object.create(ea.prototype)).constructor = fa, + fa.prototype.isLineCurve3 = !0, + fa.prototype.getPoint = function(A, e) { + var t = e || new y; + return 1 === A ? t.copy(this.v2) : (t.copy(this.v2).sub(this.v1), + t.multiplyScalar(A).add(this.v1)), + t + } + , + fa.prototype.getPointAt = function(A, e) { + return this.getPoint(A, e) + } + , + fa.prototype.copy = function(A) { + return ea.prototype.copy.call(this, A), + this.v1.copy(A.v1), + this.v2.copy(A.v2), + this + } + , + fa.prototype.toJSON = function() { + var A = ea.prototype.toJSON.call(this); + return A.v1 = this.v1.toArray(), + A.v2 = this.v2.toArray(), + A + } + , + fa.prototype.fromJSON = function(A) { + return ea.prototype.fromJSON.call(this, A), + this.v1.fromArray(A.v1), + this.v2.fromArray(A.v2), + this + } + , + (ma.prototype = Object.create(ea.prototype)).constructor = ma, + ma.prototype.isQuadraticBezierCurve = !0, + ma.prototype.getPoint = function(A, e) { + var t = e || new s + , i = this.v0 + , o = this.v1 + , n = this.v2; + return t.set(ha(A, i.x, o.x, n.x), ha(A, i.y, o.y, n.y)), + t + } + , + ma.prototype.copy = function(A) { + return ea.prototype.copy.call(this, A), + this.v0.copy(A.v0), + this.v1.copy(A.v1), + this.v2.copy(A.v2), + this + } + , + ma.prototype.toJSON = function() { + var A = ea.prototype.toJSON.call(this); + return A.v0 = this.v0.toArray(), + A.v1 = this.v1.toArray(), + A.v2 = this.v2.toArray(), + A + } + , + ma.prototype.fromJSON = function(A) { + return ea.prototype.fromJSON.call(this, A), + this.v0.fromArray(A.v0), + this.v1.fromArray(A.v1), + this.v2.fromArray(A.v2), + this + } + , + (Ca.prototype = Object.create(ea.prototype)).constructor = Ca, + Ca.prototype.isQuadraticBezierCurve3 = !0, + Ca.prototype.getPoint = function(A, e) { + var t = e || new y + , i = this.v0 + , o = this.v1 + , n = this.v2; + return t.set(ha(A, i.x, o.x, n.x), ha(A, i.y, o.y, n.y), ha(A, i.z, o.z, n.z)), + t + } + , + Ca.prototype.copy = function(A) { + return ea.prototype.copy.call(this, A), + this.v0.copy(A.v0), + this.v1.copy(A.v1), + this.v2.copy(A.v2), + this + } + , + Ca.prototype.toJSON = function() { + var A = ea.prototype.toJSON.call(this); + return A.v0 = this.v0.toArray(), + A.v1 = this.v1.toArray(), + A.v2 = this.v2.toArray(), + A + } + , + Ca.prototype.fromJSON = function(A) { + return ea.prototype.fromJSON.call(this, A), + this.v0.fromArray(A.v0), + this.v1.fromArray(A.v1), + this.v2.fromArray(A.v2), + this + } + , + (ya.prototype = Object.create(ea.prototype)).constructor = ya, + ya.prototype.isSplineCurve = !0, + ya.prototype.getPoint = function(A, e) { + var t = e || new s + , i = this.points + , o = (i.length - 1) * A + , n = Math.floor(o) + , r = o - n + , a = i[0 === n ? n : n - 1] + , l = i[n] + , c = i[n > i.length - 2 ? i.length - 1 : n + 1] + , h = i[n > i.length - 3 ? i.length - 1 : n + 2]; + return t.set(ca(r, a.x, l.x, c.x, h.x), ca(r, a.y, l.y, c.y, h.y)), + t + } + , + ya.prototype.copy = function(A) { + ea.prototype.copy.call(this, A), + this.points = []; + for (var e = 0, t = A.points.length; t > e; e++) { + this.points.push(A.points[e].clone()) + } + return this + } + , + ya.prototype.toJSON = function() { + var A = ea.prototype.toJSON.call(this); + A.points = []; + for (var e = 0, t = this.points.length; t > e; e++) { + A.points.push(this.points[e].toArray()) + } + return A + } + , + ya.prototype.fromJSON = function(A) { + ea.prototype.fromJSON.call(this, A), + this.points = []; + for (var e = 0, t = A.points.length; t > e; e++) { + var i = A.points[e]; + this.points.push((new s).fromArray(i)) + } + return this + } + ; + var va = Object.freeze({ + __proto__: null, + ArcCurve: ia, + CatmullRomCurve3: la, + CubicBezierCurve: pa, + CubicBezierCurve3: ga, + EllipseCurve: ta, + LineCurve: ua, + LineCurve3: fa, + QuadraticBezierCurve: ma, + QuadraticBezierCurve3: Ca, + SplineCurve: ya + }); + function Ia() { + ea.call(this), + this.type = "CurvePath", + this.curves = [], + this.autoClose = !1 + } + function Ea(A) { + Ia.call(this), + this.type = "Path", + this.currentPoint = new s, + A && this.setFromPoints(A) + } + function Ba(A) { + Ea.call(this, A), + this.uuid = a.generateUUID(), + this.type = "Shape", + this.holes = [] + } + function xa(A, e) { + H.call(this), + this.type = "Light", + this.color = new LA(A), + this.intensity = void 0 !== e ? e : 1, + this.receiveShadow = void 0 + } + function Sa(A, e, t) { + xa.call(this, A, t), + this.type = "HemisphereLight", + this.castShadow = void 0, + this.position.copy(H.DefaultUp), + this.updateMatrix(), + this.groundColor = new LA(e) + } + function wa(A) { + this.camera = A, + this.bias = 0, + this.radius = 1, + this.mapSize = new s(512,512), + this.map = null, + this.mapPass = null, + this.matrix = new M, + this._frustum = new Ze, + this._frameExtents = new s(1,1), + this._viewportCount = 1, + this._viewports = [new p(0,0,1,1)] + } + function Ma() { + wa.call(this, new je(50,1,.5,500)) + } + function ba(A, e, t, i, o, n) { + xa.call(this, A, e), + this.type = "SpotLight", + this.position.copy(H.DefaultUp), + this.updateMatrix(), + this.target = new H, + Object.defineProperty(this, "power", { + get: function() { + return this.intensity * Math.PI + }, + set: function(A) { + this.intensity = A / Math.PI + } + }), + this.distance = void 0 !== t ? t : 0, + this.angle = void 0 !== i ? i : Math.PI / 3, + this.penumbra = void 0 !== o ? o : 0, + this.decay = void 0 !== n ? n : 1, + this.shadow = new Ma + } + function Ua() { + wa.call(this, new je(90,1,.5,500)), + this._frameExtents = new s(4,2), + this._viewportCount = 6, + this._viewports = [new p(2,1,1,1), new p(0,1,1,1), new p(3,1,1,1), new p(1,1,1,1), new p(3,0,1,1), new p(1,0,1,1)], + this._cubeDirections = [new y(1,0,0), new y(-1,0,0), new y(0,0,1), new y(0,0,-1), new y(0,1,0), new y(0,-1,0)], + this._cubeUps = [new y(0,1,0), new y(0,1,0), new y(0,1,0), new y(0,1,0), new y(0,0,1), new y(0,0,-1)] + } + function Fa(A, e, t, i) { + xa.call(this, A, e), + this.type = "PointLight", + Object.defineProperty(this, "power", { + get: function() { + return 4 * this.intensity * Math.PI + }, + set: function(A) { + this.intensity = A / (4 * Math.PI) + } + }), + this.distance = void 0 !== t ? t : 0, + this.decay = void 0 !== i ? i : 1, + this.shadow = new Ua + } + function Ka(A, e, t, i, o, n) { + qe.call(this), + this.type = "OrthographicCamera", + this.zoom = 1, + this.view = null, + this.left = void 0 !== A ? A : -1, + this.right = void 0 !== e ? e : 1, + this.top = void 0 !== t ? t : 1, + this.bottom = void 0 !== i ? i : -1, + this.near = void 0 !== o ? o : .1, + this.far = void 0 !== n ? n : 2e3, + this.updateProjectionMatrix() + } + function Qa() { + wa.call(this, new Ka(-5,5,5,-5,.5,500)) + } + function Ra(A, e) { + xa.call(this, A, e), + this.type = "DirectionalLight", + this.position.copy(H.DefaultUp), + this.updateMatrix(), + this.target = new H, + this.shadow = new Qa + } + function Ta(A, e) { + xa.call(this, A, e), + this.type = "AmbientLight", + this.castShadow = void 0 + } + function ka(A, e, t, i) { + xa.call(this, A, e), + this.type = "RectAreaLight", + this.width = void 0 !== t ? t : 10, + this.height = void 0 !== i ? i : 10 + } + function Da(A) { + Yr.call(this, A), + this.textures = {} + } + Ia.prototype = Object.assign(Object.create(ea.prototype), { + constructor: Ia, + add: function(A) { + this.curves.push(A) + }, + closePath: function() { + var A = this.curves[0].getPoint(0) + , e = this.curves[this.curves.length - 1].getPoint(1); + A.equals(e) || this.curves.push(new ua(e,A)) + }, + getPoint: function(A) { + for (var e = A * this.getLength(), t = this.getCurveLengths(), i = 0; t.length > i; ) { + if (t[i] >= e) { + var o = t[i] - e + , n = this.curves[i] + , r = n.getLength(); + return n.getPointAt(0 === r ? 0 : 1 - o / r) + } + i++ + } + return null + }, + getLength: function() { + var A = this.getCurveLengths(); + return A[A.length - 1] + }, + updateArcLengths: function() { + this.needsUpdate = !0, + this.cacheLengths = null, + this.getCurveLengths() + }, + getCurveLengths: function() { + if (this.cacheLengths && this.cacheLengths.length === this.curves.length) + return this.cacheLengths; + for (var A = [], e = 0, t = 0, i = this.curves.length; i > t; t++) + e += this.curves[t].getLength(), + A.push(e); + return this.cacheLengths = A, + A + }, + getSpacedPoints: function(A) { + void 0 === A && (A = 40); + for (var e = [], t = 0; A >= t; t++) + e.push(this.getPoint(t / A)); + return this.autoClose && e.push(e[0]), + e + }, + getPoints: function(A) { + A = A || 12; + for (var e, t = [], i = 0, o = this.curves; o.length > i; i++) + for (var n = o[i], r = n.getPoints(n && n.isEllipseCurve ? 2 * A : n && (n.isLineCurve || n.isLineCurve3) ? 1 : n && n.isSplineCurve ? A * n.points.length : A), a = 0; r.length > a; a++) { + var s = r[a]; + e && e.equals(s) || (t.push(s), + e = s) + } + return this.autoClose && t.length > 1 && !t[t.length - 1].equals(t[0]) && t.push(t[0]), + t + }, + copy: function(A) { + ea.prototype.copy.call(this, A), + this.curves = []; + for (var e = 0, t = A.curves.length; t > e; e++) { + this.curves.push(A.curves[e].clone()) + } + return this.autoClose = A.autoClose, + this + }, + toJSON: function() { + var A = ea.prototype.toJSON.call(this); + A.autoClose = this.autoClose, + A.curves = []; + for (var e = 0, t = this.curves.length; t > e; e++) { + A.curves.push(this.curves[e].toJSON()) + } + return A + }, + fromJSON: function(A) { + ea.prototype.fromJSON.call(this, A), + this.autoClose = A.autoClose, + this.curves = []; + for (var e = 0, t = A.curves.length; t > e; e++) { + var i = A.curves[e]; + this.curves.push((new va[i.type]).fromJSON(i)) + } + return this + } + }), + Ea.prototype = Object.assign(Object.create(Ia.prototype), { + constructor: Ea, + setFromPoints: function(A) { + this.moveTo(A[0].x, A[0].y); + for (var e = 1, t = A.length; t > e; e++) + this.lineTo(A[e].x, A[e].y); + return this + }, + moveTo: function(A, e) { + return this.currentPoint.set(A, e), + this + }, + lineTo: function(A, e) { + var t = new ua(this.currentPoint.clone(),new s(A,e)); + return this.curves.push(t), + this.currentPoint.set(A, e), + this + }, + quadraticCurveTo: function(A, e, t, i) { + var o = new ma(this.currentPoint.clone(),new s(A,e),new s(t,i)); + return this.curves.push(o), + this.currentPoint.set(t, i), + this + }, + bezierCurveTo: function(A, e, t, i, o, n) { + var r = new pa(this.currentPoint.clone(),new s(A,e),new s(t,i),new s(o,n)); + return this.curves.push(r), + this.currentPoint.set(o, n), + this + }, + splineThru: function(A) { + var e = new ya([this.currentPoint.clone()].concat(A)); + return this.curves.push(e), + this.currentPoint.copy(A[A.length - 1]), + this + }, + arc: function(A, e, t, i, o, n) { + return this.absarc(A + this.currentPoint.x, e + this.currentPoint.y, t, i, o, n), + this + }, + absarc: function(A, e, t, i, o, n) { + return this.absellipse(A, e, t, t, i, o, n), + this + }, + ellipse: function(A, e, t, i, o, n, r, a) { + return this.absellipse(A + this.currentPoint.x, e + this.currentPoint.y, t, i, o, n, r, a), + this + }, + absellipse: function(A, e, t, i, o, n, r, a) { + var s = new ta(A,e,t,i,o,n,r,a); + if (this.curves.length > 0) { + var l = s.getPoint(0); + l.equals(this.currentPoint) || this.lineTo(l.x, l.y) + } + this.curves.push(s); + var c = s.getPoint(1); + return this.currentPoint.copy(c), + this + }, + copy: function(A) { + return Ia.prototype.copy.call(this, A), + this.currentPoint.copy(A.currentPoint), + this + }, + toJSON: function() { + var A = Ia.prototype.toJSON.call(this); + return A.currentPoint = this.currentPoint.toArray(), + A + }, + fromJSON: function(A) { + return Ia.prototype.fromJSON.call(this, A), + this.currentPoint.fromArray(A.currentPoint), + this + } + }), + Ba.prototype = Object.assign(Object.create(Ea.prototype), { + constructor: Ba, + getPointsHoles: function(A) { + for (var e = [], t = 0, i = this.holes.length; i > t; t++) + e[t] = this.holes[t].getPoints(A); + return e + }, + extractPoints: function(A) { + return { + shape: this.getPoints(A), + holes: this.getPointsHoles(A) + } + }, + copy: function(A) { + Ea.prototype.copy.call(this, A), + this.holes = []; + for (var e = 0, t = A.holes.length; t > e; e++) { + this.holes.push(A.holes[e].clone()) + } + return this + }, + toJSON: function() { + var A = Ea.prototype.toJSON.call(this); + A.uuid = this.uuid, + A.holes = []; + for (var e = 0, t = this.holes.length; t > e; e++) { + A.holes.push(this.holes[e].toJSON()) + } + return A + }, + fromJSON: function(A) { + Ea.prototype.fromJSON.call(this, A), + this.uuid = A.uuid, + this.holes = []; + for (var e = 0, t = A.holes.length; t > e; e++) { + var i = A.holes[e]; + this.holes.push((new Ea).fromJSON(i)) + } + return this + } + }), + xa.prototype = Object.assign(Object.create(H.prototype), { + constructor: xa, + isLight: !0, + copy: function(A) { + return H.prototype.copy.call(this, A), + this.color.copy(A.color), + this.intensity = A.intensity, + this + }, + toJSON: function(A) { + var e = H.prototype.toJSON.call(this, A); + return e.object.color = this.color.getHex(), + e.object.intensity = this.intensity, + void 0 !== this.groundColor && (e.object.groundColor = this.groundColor.getHex()), + void 0 !== this.distance && (e.object.distance = this.distance), + void 0 !== this.angle && (e.object.angle = this.angle), + void 0 !== this.decay && (e.object.decay = this.decay), + void 0 !== this.penumbra && (e.object.penumbra = this.penumbra), + void 0 !== this.shadow && (e.object.shadow = this.shadow.toJSON()), + e + } + }), + Sa.prototype = Object.assign(Object.create(xa.prototype), { + constructor: Sa, + isHemisphereLight: !0, + copy: function(A) { + return xa.prototype.copy.call(this, A), + this.groundColor.copy(A.groundColor), + this + } + }), + Object.assign(wa.prototype, { + _projScreenMatrix: new M, + _lightPositionWorld: new y, + _lookTarget: new y, + getViewportCount: function() { + return this._viewportCount + }, + getFrustum: function() { + return this._frustum + }, + updateMatrices: function(A) { + var e = this.camera + , t = this.matrix + , i = this._projScreenMatrix + , o = this._lookTarget + , n = this._lightPositionWorld; + n.setFromMatrixPosition(A.matrixWorld), + e.position.copy(n), + o.setFromMatrixPosition(A.target.matrixWorld), + e.lookAt(o), + e.updateMatrixWorld(), + i.multiplyMatrices(e.projectionMatrix, e.matrixWorldInverse), + this._frustum.setFromProjectionMatrix(i), + t.set(.5, 0, 0, .5, 0, .5, 0, .5, 0, 0, .5, .5, 0, 0, 0, 1), + t.multiply(e.projectionMatrix), + t.multiply(e.matrixWorldInverse) + }, + getViewport: function(A) { + return this._viewports[A] + }, + getFrameExtents: function() { + return this._frameExtents + }, + copy: function(A) { + return this.camera = A.camera.clone(), + this.bias = A.bias, + this.radius = A.radius, + this.mapSize.copy(A.mapSize), + this + }, + clone: function() { + return (new this.constructor).copy(this) + }, + toJSON: function() { + var A = {}; + return 0 !== this.bias && (A.bias = this.bias), + 1 !== this.radius && (A.radius = this.radius), + 512 === this.mapSize.x && 512 === this.mapSize.y || (A.mapSize = this.mapSize.toArray()), + A.camera = this.camera.toJSON(!1).object, + delete A.camera.matrix, + A + } + }), + Ma.prototype = Object.assign(Object.create(wa.prototype), { + constructor: Ma, + isSpotLightShadow: !0, + updateMatrices: function(A) { + var e = this.camera + , t = 2 * a.RAD2DEG * A.angle + , i = this.mapSize.width / this.mapSize.height + , o = A.distance || e.far; + t === e.fov && i === e.aspect && o === e.far || (e.fov = t, + e.aspect = i, + e.far = o, + e.updateProjectionMatrix()), + wa.prototype.updateMatrices.call(this, A) + } + }), + ba.prototype = Object.assign(Object.create(xa.prototype), { + constructor: ba, + isSpotLight: !0, + copy: function(A) { + return xa.prototype.copy.call(this, A), + this.distance = A.distance, + this.angle = A.angle, + this.penumbra = A.penumbra, + this.decay = A.decay, + this.target = A.target.clone(), + this.shadow = A.shadow.clone(), + this + } + }), + Ua.prototype = Object.assign(Object.create(wa.prototype), { + constructor: Ua, + isPointLightShadow: !0, + updateMatrices: function(A, e) { + void 0 === e && (e = 0); + var t = this.camera + , i = this.matrix + , o = this._lightPositionWorld + , n = this._lookTarget + , r = this._projScreenMatrix; + o.setFromMatrixPosition(A.matrixWorld), + t.position.copy(o), + n.copy(t.position), + n.add(this._cubeDirections[e]), + t.up.copy(this._cubeUps[e]), + t.lookAt(n), + t.updateMatrixWorld(), + i.makeTranslation(-o.x, -o.y, -o.z), + r.multiplyMatrices(t.projectionMatrix, t.matrixWorldInverse), + this._frustum.setFromProjectionMatrix(r) + } + }), + Fa.prototype = Object.assign(Object.create(xa.prototype), { + constructor: Fa, + isPointLight: !0, + copy: function(A) { + return xa.prototype.copy.call(this, A), + this.distance = A.distance, + this.decay = A.decay, + this.shadow = A.shadow.clone(), + this + } + }), + Ka.prototype = Object.assign(Object.create(qe.prototype), { + constructor: Ka, + isOrthographicCamera: !0, + copy: function(A, e) { + return qe.prototype.copy.call(this, A, e), + this.left = A.left, + this.right = A.right, + this.top = A.top, + this.bottom = A.bottom, + this.near = A.near, + this.far = A.far, + this.zoom = A.zoom, + this.view = null === A.view ? null : Object.assign({}, A.view), + this + }, + setViewOffset: function(A, e, t, i, o, n) { + null === this.view && (this.view = { + enabled: !0, + fullWidth: 1, + fullHeight: 1, + offsetX: 0, + offsetY: 0, + width: 1, + height: 1 + }), + this.view.enabled = !0, + this.view.fullWidth = A, + this.view.fullHeight = e, + this.view.offsetX = t, + this.view.offsetY = i, + this.view.width = o, + this.view.height = n, + this.updateProjectionMatrix() + }, + clearViewOffset: function() { + null !== this.view && (this.view.enabled = !1), + this.updateProjectionMatrix() + }, + updateProjectionMatrix: function() { + var A = (this.right - this.left) / (2 * this.zoom) + , e = (this.top - this.bottom) / (2 * this.zoom) + , t = (this.right + this.left) / 2 + , i = (this.top + this.bottom) / 2 + , o = t - A + , n = t + A + , r = i + e + , a = i - e; + if (null !== this.view && this.view.enabled) { + var s = (this.right - this.left) / this.view.fullWidth / this.zoom + , l = (this.top - this.bottom) / this.view.fullHeight / this.zoom; + n = (o += s * this.view.offsetX) + s * this.view.width, + a = (r -= l * this.view.offsetY) - l * this.view.height + } + this.projectionMatrix.makeOrthographic(o, n, r, a, this.near, this.far), + this.projectionMatrixInverse.getInverse(this.projectionMatrix) + }, + toJSON: function(A) { + var e = H.prototype.toJSON.call(this, A); + return e.object.zoom = this.zoom, + e.object.left = this.left, + e.object.right = this.right, + e.object.top = this.top, + e.object.bottom = this.bottom, + e.object.near = this.near, + e.object.far = this.far, + null !== this.view && (e.object.view = Object.assign({}, this.view)), + e + } + }), + Qa.prototype = Object.assign(Object.create(wa.prototype), { + constructor: Qa, + isDirectionalLightShadow: !0, + updateMatrices: function(A) { + wa.prototype.updateMatrices.call(this, A) + } + }), + Ra.prototype = Object.assign(Object.create(xa.prototype), { + constructor: Ra, + isDirectionalLight: !0, + copy: function(A) { + return xa.prototype.copy.call(this, A), + this.target = A.target.clone(), + this.shadow = A.shadow.clone(), + this + } + }), + Ta.prototype = Object.assign(Object.create(xa.prototype), { + constructor: Ta, + isAmbientLight: !0 + }), + ka.prototype = Object.assign(Object.create(xa.prototype), { + constructor: ka, + isRectAreaLight: !0, + copy: function(A) { + return xa.prototype.copy.call(this, A), + this.width = A.width, + this.height = A.height, + this + }, + toJSON: function(A) { + var e = xa.prototype.toJSON.call(this, A); + return e.object.width = this.width, + e.object.height = this.height, + e + } + }), + Da.prototype = Object.assign(Object.create(Yr.prototype), { + constructor: Da, + load: function(A, e, t, i) { + var o = this + , n = new Jr(o.manager); + n.setPath(o.path), + n.load(A, (function(A) { + e(o.parse(JSON.parse(A))) + } + ), t, i) + }, + parse: function(A) { + var e = this.textures; + function t(A) { + return void 0 === e[A] && console.warn("THREE.MaterialLoader: Undefined texture", A), + e[A] + } + var i = new Mr[A.type]; + if (void 0 !== A.uuid && (i.uuid = A.uuid), + void 0 !== A.name && (i.name = A.name), + void 0 !== A.color && i.color.setHex(A.color), + void 0 !== A.roughness && (i.roughness = A.roughness), + void 0 !== A.metalness && (i.metalness = A.metalness), + void 0 !== A.sheen && (i.sheen = (new LA).setHex(A.sheen)), + void 0 !== A.emissive && i.emissive.setHex(A.emissive), + void 0 !== A.specular && i.specular.setHex(A.specular), + void 0 !== A.shininess && (i.shininess = A.shininess), + void 0 !== A.clearcoat && (i.clearcoat = A.clearcoat), + void 0 !== A.clearcoatRoughness && (i.clearcoatRoughness = A.clearcoatRoughness), + void 0 !== A.fog && (i.fog = A.fog), + void 0 !== A.flatShading && (i.flatShading = A.flatShading), + void 0 !== A.blending && (i.blending = A.blending), + void 0 !== A.combine && (i.combine = A.combine), + void 0 !== A.side && (i.side = A.side), + void 0 !== A.opacity && (i.opacity = A.opacity), + void 0 !== A.transparent && (i.transparent = A.transparent), + void 0 !== A.alphaTest && (i.alphaTest = A.alphaTest), + void 0 !== A.depthTest && (i.depthTest = A.depthTest), + void 0 !== A.depthWrite && (i.depthWrite = A.depthWrite), + void 0 !== A.colorWrite && (i.colorWrite = A.colorWrite), + void 0 !== A.stencilWrite && (i.stencilWrite = A.stencilWrite), + void 0 !== A.stencilWriteMask && (i.stencilWriteMask = A.stencilWriteMask), + void 0 !== A.stencilFunc && (i.stencilFunc = A.stencilFunc), + void 0 !== A.stencilRef && (i.stencilRef = A.stencilRef), + void 0 !== A.stencilFuncMask && (i.stencilFuncMask = A.stencilFuncMask), + void 0 !== A.stencilFail && (i.stencilFail = A.stencilFail), + void 0 !== A.stencilZFail && (i.stencilZFail = A.stencilZFail), + void 0 !== A.stencilZPass && (i.stencilZPass = A.stencilZPass), + void 0 !== A.wireframe && (i.wireframe = A.wireframe), + void 0 !== A.wireframeLinewidth && (i.wireframeLinewidth = A.wireframeLinewidth), + void 0 !== A.wireframeLinecap && (i.wireframeLinecap = A.wireframeLinecap), + void 0 !== A.wireframeLinejoin && (i.wireframeLinejoin = A.wireframeLinejoin), + void 0 !== A.rotation && (i.rotation = A.rotation), + 1 !== A.linewidth && (i.linewidth = A.linewidth), + void 0 !== A.dashSize && (i.dashSize = A.dashSize), + void 0 !== A.gapSize && (i.gapSize = A.gapSize), + void 0 !== A.scale && (i.scale = A.scale), + void 0 !== A.polygonOffset && (i.polygonOffset = A.polygonOffset), + void 0 !== A.polygonOffsetFactor && (i.polygonOffsetFactor = A.polygonOffsetFactor), + void 0 !== A.polygonOffsetUnits && (i.polygonOffsetUnits = A.polygonOffsetUnits), + void 0 !== A.skinning && (i.skinning = A.skinning), + void 0 !== A.morphTargets && (i.morphTargets = A.morphTargets), + void 0 !== A.morphNormals && (i.morphNormals = A.morphNormals), + void 0 !== A.dithering && (i.dithering = A.dithering), + void 0 !== A.vertexTangents && (i.vertexTangents = A.vertexTangents), + void 0 !== A.visible && (i.visible = A.visible), + void 0 !== A.toneMapped && (i.toneMapped = A.toneMapped), + void 0 !== A.userData && (i.userData = A.userData), + void 0 !== A.vertexColors && (i.vertexColors = "number" == typeof A.vertexColors ? A.vertexColors > 0 : A.vertexColors), + void 0 !== A.uniforms) + for (var o in A.uniforms) { + var n = A.uniforms[o]; + switch (i.uniforms[o] = {}, + n.type) { + case "t": + i.uniforms[o].value = t(n.value); + break; + case "c": + i.uniforms[o].value = (new LA).setHex(n.value); + break; + case "v2": + i.uniforms[o].value = (new s).fromArray(n.value); + break; + case "v3": + i.uniforms[o].value = (new y).fromArray(n.value); + break; + case "v4": + i.uniforms[o].value = (new p).fromArray(n.value); + break; + case "m3": + i.uniforms[o].value = (new l).fromArray(n.value); + case "m4": + i.uniforms[o].value = (new M).fromArray(n.value); + break; + default: + i.uniforms[o].value = n.value + } + } + if (void 0 !== A.defines && (i.defines = A.defines), + void 0 !== A.vertexShader && (i.vertexShader = A.vertexShader), + void 0 !== A.fragmentShader && (i.fragmentShader = A.fragmentShader), + void 0 !== A.extensions) + for (var r in A.extensions) + i.extensions[r] = A.extensions[r]; + if (void 0 !== A.shading && (i.flatShading = 1 === A.shading), + void 0 !== A.size && (i.size = A.size), + void 0 !== A.sizeAttenuation && (i.sizeAttenuation = A.sizeAttenuation), + void 0 !== A.map && (i.map = t(A.map)), + void 0 !== A.matcap && (i.matcap = t(A.matcap)), + void 0 !== A.alphaMap && (i.alphaMap = t(A.alphaMap)), + void 0 !== A.bumpMap && (i.bumpMap = t(A.bumpMap)), + void 0 !== A.bumpScale && (i.bumpScale = A.bumpScale), + void 0 !== A.normalMap && (i.normalMap = t(A.normalMap)), + void 0 !== A.normalMapType && (i.normalMapType = A.normalMapType), + void 0 !== A.normalScale) { + var a = A.normalScale; + !1 === Array.isArray(a) && (a = [a, a]), + i.normalScale = (new s).fromArray(a) + } + return void 0 !== A.displacementMap && (i.displacementMap = t(A.displacementMap)), + void 0 !== A.displacementScale && (i.displacementScale = A.displacementScale), + void 0 !== A.displacementBias && (i.displacementBias = A.displacementBias), + void 0 !== A.roughnessMap && (i.roughnessMap = t(A.roughnessMap)), + void 0 !== A.metalnessMap && (i.metalnessMap = t(A.metalnessMap)), + void 0 !== A.emissiveMap && (i.emissiveMap = t(A.emissiveMap)), + void 0 !== A.emissiveIntensity && (i.emissiveIntensity = A.emissiveIntensity), + void 0 !== A.specularMap && (i.specularMap = t(A.specularMap)), + void 0 !== A.envMap && (i.envMap = t(A.envMap)), + void 0 !== A.envMapIntensity && (i.envMapIntensity = A.envMapIntensity), + void 0 !== A.reflectivity && (i.reflectivity = A.reflectivity), + void 0 !== A.refractionRatio && (i.refractionRatio = A.refractionRatio), + void 0 !== A.lightMap && (i.lightMap = t(A.lightMap)), + void 0 !== A.lightMapIntensity && (i.lightMapIntensity = A.lightMapIntensity), + void 0 !== A.aoMap && (i.aoMap = t(A.aoMap)), + void 0 !== A.aoMapIntensity && (i.aoMapIntensity = A.aoMapIntensity), + void 0 !== A.gradientMap && (i.gradientMap = t(A.gradientMap)), + void 0 !== A.clearcoatMap && (i.clearcoatMap = t(A.clearcoatMap)), + void 0 !== A.clearcoatRoughnessMap && (i.clearcoatRoughnessMap = t(A.clearcoatRoughnessMap)), + void 0 !== A.clearcoatNormalMap && (i.clearcoatNormalMap = t(A.clearcoatNormalMap)), + void 0 !== A.clearcoatNormalScale && (i.clearcoatNormalScale = (new s).fromArray(A.clearcoatNormalScale)), + i + }, + setTextures: function(A) { + return this.textures = A, + this + } + }); + var La = { + decodeText: function(A) { + if ("undefined" != typeof TextDecoder) + return (new TextDecoder).decode(A); + for (var e = "", t = 0, i = A.length; i > t; t++) + e += String.fromCharCode(A[t]); + try { + return decodeURIComponent(escape(e)) + } catch (A) { + return e + } + }, + extractUrlBase: function(A) { + var e = A.lastIndexOf("/"); + return -1 === e ? "./" : A.substr(0, e + 1) + } + }; + function Na() { + he.call(this), + this.type = "InstancedBufferGeometry", + this.maxInstancedCount = void 0 + } + function Oa(A, e, t, i) { + "number" == typeof t && (i = t, + t = !1, + console.error("THREE.InstancedBufferAttribute: The constructor now expects normalized as the third argument.")), + YA.call(this, A, e, t), + this.meshPerAttribute = i || 1 + } + function Va(A) { + Yr.call(this, A) + } + Na.prototype = Object.assign(Object.create(he.prototype), { + constructor: Na, + isInstancedBufferGeometry: !0, + copy: function(A) { + return he.prototype.copy.call(this, A), + this.maxInstancedCount = A.maxInstancedCount, + this + }, + clone: function() { + return (new this.constructor).copy(this) + }, + toJSON: function() { + var A = he.prototype.toJSON.call(this); + return A.maxInstancedCount = this.maxInstancedCount, + A.isInstancedBufferGeometry = !0, + A + } + }), + Oa.prototype = Object.assign(Object.create(YA.prototype), { + constructor: Oa, + isInstancedBufferAttribute: !0, + copy: function(A) { + return YA.prototype.copy.call(this, A), + this.meshPerAttribute = A.meshPerAttribute, + this + }, + toJSON: function() { + var A = YA.prototype.toJSON.call(this); + return A.meshPerAttribute = this.meshPerAttribute, + A.isInstancedBufferAttribute = !0, + A + } + }), + Va.prototype = Object.assign(Object.create(Yr.prototype), { + constructor: Va, + load: function(A, e, t, i) { + var o = this + , n = new Jr(o.manager); + n.setPath(o.path), + n.load(A, (function(A) { + e(o.parse(JSON.parse(A))) + } + ), t, i) + }, + parse: function(A) { + var e = A.isInstancedBufferGeometry ? new Na : new he + , t = A.data.index; + if (void 0 !== t) { + var i = new Ga[t.type](t.array); + e.setIndex(new YA(i,1)) + } + var o = A.data.attributes; + for (var n in o) { + i = new Ga[(d = o[n]).type](d.array); + var r = new (d.isInstancedBufferAttribute ? Oa : YA)(i,d.itemSize,d.normalized); + void 0 !== d.name && (r.name = d.name), + e.setAttribute(n, r) + } + var a = A.data.morphAttributes; + if (a) + for (var n in a) { + for (var s = a[n], l = [], c = 0, h = s.length; h > c; c++) { + var d; + r = new YA(i = new Ga[(d = s[c]).type](d.array),d.itemSize,d.normalized); + void 0 !== d.name && (r.name = d.name), + l.push(r) + } + e.morphAttributes[n] = l + } + A.data.morphTargetsRelative && (e.morphTargetsRelative = !0); + var p = A.data.groups || A.data.drawcalls || A.data.offsets; + if (void 0 !== p) { + c = 0; + for (var g = p.length; c !== g; ++c) { + var u = p[c]; + e.addGroup(u.start, u.count, u.materialIndex) + } + } + var f = A.data.boundingSphere; + if (void 0 !== f) { + var m = new y; + void 0 !== f.center && m.fromArray(f.center), + e.boundingSphere = new cA(m,f.radius) + } + return A.name && (e.name = A.name), + A.userData && (e.userData = A.userData), + e + } + }); + var Ga = { + Int8Array: Int8Array, + Uint8Array: Uint8Array, + Uint8ClampedArray: "undefined" != typeof Uint8ClampedArray ? Uint8ClampedArray : Uint8Array, + Int16Array: Int16Array, + Uint16Array: Uint16Array, + Int32Array: Int32Array, + Uint32Array: Uint32Array, + Float32Array: Float32Array, + Float64Array: Float64Array + }; + function Pa(A) { + Yr.call(this, A) + } + Pa.prototype = Object.assign(Object.create(Yr.prototype), { + constructor: Pa, + load: function(A, e, t, i) { + var o = this + , n = "" === this.path ? La.extractUrlBase(A) : this.path; + this.resourcePath = this.resourcePath || n; + var r = new Jr(o.manager); + r.setPath(this.path), + r.load(A, (function(t) { + var n = null; + try { + n = JSON.parse(t) + } catch (e) { + return void 0 !== i && i(e), + void console.error("THREE:ObjectLoader: Can't parse " + A + ".", e.message) + } + var r = n.metadata; + void 0 !== r && void 0 !== r.type && "geometry" !== r.type.toLowerCase() ? o.parse(n, e) : console.error("THREE.ObjectLoader: Can't load " + A) + } + ), t, i) + }, + parse: function(A, e) { + var t = this.parseShape(A.shapes) + , i = this.parseGeometries(A.geometries, t) + , o = this.parseImages(A.images, (function() { + void 0 !== e && e(a) + } + )) + , n = this.parseTextures(A.textures, o) + , r = this.parseMaterials(A.materials, n) + , a = this.parseObject(A.object, i, r); + return A.animations && (a.animations = this.parseAnimations(A.animations)), + void 0 !== A.images && 0 !== A.images.length || void 0 !== e && e(a), + a + }, + parseShape: function(A) { + var e = {}; + if (void 0 !== A) + for (var t = 0, i = A.length; i > t; t++) { + var o = (new Ba).fromJSON(A[t]); + e[o.uuid] = o + } + return e + }, + parseGeometries: function(A, e) { + var t = {}; + if (void 0 !== A) + for (var i = new Va, o = 0, n = A.length; n > o; o++) { + var r, a = A[o]; + switch (a.type) { + case "PlaneGeometry": + case "PlaneBufferGeometry": + r = new fr[a.type](a.width,a.height,a.widthSegments,a.heightSegments); + break; + case "BoxGeometry": + case "BoxBufferGeometry": + case "CubeGeometry": + r = new fr[a.type](a.width,a.height,a.depth,a.widthSegments,a.heightSegments,a.depthSegments); + break; + case "CircleGeometry": + case "CircleBufferGeometry": + r = new fr[a.type](a.radius,a.segments,a.thetaStart,a.thetaLength); + break; + case "CylinderGeometry": + case "CylinderBufferGeometry": + r = new fr[a.type](a.radiusTop,a.radiusBottom,a.height,a.radialSegments,a.heightSegments,a.openEnded,a.thetaStart,a.thetaLength); + break; + case "ConeGeometry": + case "ConeBufferGeometry": + r = new fr[a.type](a.radius,a.height,a.radialSegments,a.heightSegments,a.openEnded,a.thetaStart,a.thetaLength); + break; + case "SphereGeometry": + case "SphereBufferGeometry": + r = new fr[a.type](a.radius,a.widthSegments,a.heightSegments,a.phiStart,a.phiLength,a.thetaStart,a.thetaLength); + break; + case "DodecahedronGeometry": + case "DodecahedronBufferGeometry": + case "IcosahedronGeometry": + case "IcosahedronBufferGeometry": + case "OctahedronGeometry": + case "OctahedronBufferGeometry": + case "TetrahedronGeometry": + case "TetrahedronBufferGeometry": + r = new fr[a.type](a.radius,a.detail); + break; + case "RingGeometry": + case "RingBufferGeometry": + r = new fr[a.type](a.innerRadius,a.outerRadius,a.thetaSegments,a.phiSegments,a.thetaStart,a.thetaLength); + break; + case "TorusGeometry": + case "TorusBufferGeometry": + r = new fr[a.type](a.radius,a.tube,a.radialSegments,a.tubularSegments,a.arc); + break; + case "TorusKnotGeometry": + case "TorusKnotBufferGeometry": + r = new fr[a.type](a.radius,a.tube,a.tubularSegments,a.radialSegments,a.p,a.q); + break; + case "TubeGeometry": + case "TubeBufferGeometry": + r = new fr[a.type]((new va[a.path.type]).fromJSON(a.path),a.tubularSegments,a.radius,a.radialSegments,a.closed); + break; + case "LatheGeometry": + case "LatheBufferGeometry": + r = new fr[a.type](a.points,a.segments,a.phiStart,a.phiLength); + break; + case "PolyhedronGeometry": + case "PolyhedronBufferGeometry": + r = new fr[a.type](a.vertices,a.indices,a.radius,a.details); + break; + case "ShapeGeometry": + case "ShapeBufferGeometry": + for (var s = [], l = 0, c = a.shapes.length; c > l; l++) { + s.push(e[a.shapes[l]]) + } + r = new fr[a.type](s,a.curveSegments); + break; + case "ExtrudeGeometry": + case "ExtrudeBufferGeometry": + for (s = [], + l = 0, + c = a.shapes.length; c > l; l++) { + s.push(e[a.shapes[l]]) + } + var h = a.options.extrudePath; + void 0 !== h && (a.options.extrudePath = (new va[h.type]).fromJSON(h)), + r = new fr[a.type](s,a.options); + break; + case "BufferGeometry": + case "InstancedBufferGeometry": + r = i.parse(a); + break; + case "Geometry": + console.error('THREE.ObjectLoader: Loading "Geometry" is not supported anymore.'); + break; + default: + console.warn('THREE.ObjectLoader: Unsupported geometry type "' + a.type + '"'); + continue + } + r.uuid = a.uuid, + void 0 !== a.name && (r.name = a.name), + !0 === r.isBufferGeometry && void 0 !== a.userData && (r.userData = a.userData), + t[a.uuid] = r + } + return t + }, + parseMaterials: function(A, e) { + var t = {} + , i = {}; + if (void 0 !== A) { + var o = new Da; + o.setTextures(e); + for (var n = 0, r = A.length; r > n; n++) { + var a = A[n]; + if ("MultiMaterial" === a.type) { + for (var s = [], l = 0; a.materials.length > l; l++) { + var c = a.materials[l]; + void 0 === t[c.uuid] && (t[c.uuid] = o.parse(c)), + s.push(t[c.uuid]) + } + i[a.uuid] = s + } else + void 0 === t[a.uuid] && (t[a.uuid] = o.parse(a)), + i[a.uuid] = t[a.uuid] + } + } + return i + }, + parseAnimations: function(A) { + for (var e = [], t = 0; A.length > t; t++) { + var i = A[t] + , o = Gr.parse(i); + void 0 !== i.uuid && (o.uuid = i.uuid), + e.push(o) + } + return e + }, + parseImages: function(A, e) { + var t = this + , i = {}; + function o(A) { + return t.manager.itemStart(A), + n.load(A, (function() { + t.manager.itemEnd(A) + } + ), void 0, (function() { + t.manager.itemError(A), + t.manager.itemEnd(A) + } + )) + } + if (void 0 !== A && A.length > 0) { + var n = new _r(new jr(e)); + n.setCrossOrigin(this.crossOrigin); + for (var r = 0, a = A.length; a > r; r++) { + var s = A[r] + , l = s.url; + if (Array.isArray(l)) { + i[s.uuid] = []; + for (var c = 0, h = l.length; h > c; c++) { + var d = l[c] + , p = /^(\/\/)|([a-z]+:(\/\/)?)/i.test(d) ? d : t.resourcePath + d; + i[s.uuid].push(o(p)) + } + } else { + p = /^(\/\/)|([a-z]+:(\/\/)?)/i.test(s.url) ? s.url : t.resourcePath + s.url; + i[s.uuid] = o(p) + } + } + } + return i + }, + parseTextures: function(A, e) { + function t(A, e) { + return "number" == typeof A ? A : (console.warn("THREE.ObjectLoader.parseTexture: Constant should be in numeric form.", A), + e[A]) + } + var i = {}; + if (void 0 !== A) + for (var o = 0, n = A.length; n > o; o++) { + var r, a = A[o]; + void 0 === a.image && console.warn('THREE.ObjectLoader: No "image" specified for', a.uuid), + void 0 === e[a.image] && console.warn("THREE.ObjectLoader: Undefined image", a.image), + (r = Array.isArray(e[a.image]) ? new ut(e[a.image]) : new d(e[a.image])).needsUpdate = !0, + r.uuid = a.uuid, + void 0 !== a.name && (r.name = a.name), + void 0 !== a.mapping && (r.mapping = t(a.mapping, ja)), + void 0 !== a.offset && r.offset.fromArray(a.offset), + void 0 !== a.repeat && r.repeat.fromArray(a.repeat), + void 0 !== a.center && r.center.fromArray(a.center), + void 0 !== a.rotation && (r.rotation = a.rotation), + void 0 !== a.wrap && (r.wrapS = t(a.wrap[0], Ha), + r.wrapT = t(a.wrap[1], Ha)), + void 0 !== a.format && (r.format = a.format), + void 0 !== a.type && (r.type = a.type), + void 0 !== a.encoding && (r.encoding = a.encoding), + void 0 !== a.minFilter && (r.minFilter = t(a.minFilter, Ya)), + void 0 !== a.magFilter && (r.magFilter = t(a.magFilter, Ya)), + void 0 !== a.anisotropy && (r.anisotropy = a.anisotropy), + void 0 !== a.flipY && (r.flipY = a.flipY), + void 0 !== a.premultiplyAlpha && (r.premultiplyAlpha = a.premultiplyAlpha), + void 0 !== a.unpackAlignment && (r.unpackAlignment = a.unpackAlignment), + i[a.uuid] = r + } + return i + }, + parseObject: function(A, e, t) { + var i; + function o(A) { + return void 0 === e[A] && console.warn("THREE.ObjectLoader: Undefined geometry", A), + e[A] + } + function n(A) { + if (void 0 !== A) { + if (Array.isArray(A)) { + for (var e = [], i = 0, o = A.length; o > i; i++) { + var n = A[i]; + void 0 === t[n] && console.warn("THREE.ObjectLoader: Undefined material", n), + e.push(t[n]) + } + return e + } + return void 0 === t[A] && console.warn("THREE.ObjectLoader: Undefined material", A), + t[A] + } + } + switch (A.type) { + case "Scene": + i = new Y, + void 0 !== A.background && Number.isInteger(A.background) && (i.background = new LA(A.background)), + void 0 !== A.fog && ("Fog" === A.fog.type ? i.fog = new eo(A.fog.color,A.fog.near,A.fog.far) : "FogExp2" === A.fog.type && (i.fog = new Ao(A.fog.color,A.fog.density))); + break; + case "PerspectiveCamera": + i = new je(A.fov,A.aspect,A.near,A.far), + void 0 !== A.focus && (i.focus = A.focus), + void 0 !== A.zoom && (i.zoom = A.zoom), + void 0 !== A.filmGauge && (i.filmGauge = A.filmGauge), + void 0 !== A.filmOffset && (i.filmOffset = A.filmOffset), + void 0 !== A.view && (i.view = Object.assign({}, A.view)); + break; + case "OrthographicCamera": + i = new Ka(A.left,A.right,A.top,A.bottom,A.near,A.far), + void 0 !== A.zoom && (i.zoom = A.zoom), + void 0 !== A.view && (i.view = Object.assign({}, A.view)); + break; + case "AmbientLight": + i = new Ta(A.color,A.intensity); + break; + case "DirectionalLight": + i = new Ra(A.color,A.intensity); + break; + case "PointLight": + i = new Fa(A.color,A.intensity,A.distance,A.decay); + break; + case "RectAreaLight": + i = new ka(A.color,A.intensity,A.width,A.height); + break; + case "SpotLight": + i = new ba(A.color,A.intensity,A.distance,A.angle,A.penumbra,A.decay); + break; + case "HemisphereLight": + i = new Sa(A.color,A.groundColor,A.intensity); + break; + case "SkinnedMesh": + console.warn("THREE.ObjectLoader.parseObject() does not support SkinnedMesh yet."); + case "Mesh": + i = new Ue(r = o(A.geometry),a = n(A.material)); + break; + case "InstancedMesh": + var r = o(A.geometry) + , a = n(A.material) + , s = A.instanceMatrix; + (i = new To(r,a,A.count)).instanceMatrix = new YA(new Float32Array(s.array),16); + break; + case "LOD": + i = new xo; + break; + case "Line": + i = new Go(o(A.geometry),n(A.material),A.mode); + break; + case "LineLoop": + i = new Ho(o(A.geometry),n(A.material)); + break; + case "LineSegments": + i = new jo(o(A.geometry),n(A.material)); + break; + case "PointCloud": + case "Points": + i = new Xo(o(A.geometry),n(A.material)); + break; + case "Sprite": + i = new vo(n(A.material)); + break; + case "Group": + i = new Xi; + break; + default: + i = new H + } + if (i.uuid = A.uuid, + void 0 !== A.name && (i.name = A.name), + void 0 !== A.matrix ? (i.matrix.fromArray(A.matrix), + void 0 !== A.matrixAutoUpdate && (i.matrixAutoUpdate = A.matrixAutoUpdate), + i.matrixAutoUpdate && i.matrix.decompose(i.position, i.quaternion, i.scale)) : (void 0 !== A.position && i.position.fromArray(A.position), + void 0 !== A.rotation && i.rotation.fromArray(A.rotation), + void 0 !== A.quaternion && i.quaternion.fromArray(A.quaternion), + void 0 !== A.scale && i.scale.fromArray(A.scale)), + void 0 !== A.castShadow && (i.castShadow = A.castShadow), + void 0 !== A.receiveShadow && (i.receiveShadow = A.receiveShadow), + A.shadow && (void 0 !== A.shadow.bias && (i.shadow.bias = A.shadow.bias), + void 0 !== A.shadow.radius && (i.shadow.radius = A.shadow.radius), + void 0 !== A.shadow.mapSize && i.shadow.mapSize.fromArray(A.shadow.mapSize), + void 0 !== A.shadow.camera && (i.shadow.camera = this.parseObject(A.shadow.camera))), + void 0 !== A.visible && (i.visible = A.visible), + void 0 !== A.frustumCulled && (i.frustumCulled = A.frustumCulled), + void 0 !== A.renderOrder && (i.renderOrder = A.renderOrder), + void 0 !== A.userData && (i.userData = A.userData), + void 0 !== A.layers && (i.layers.mask = A.layers), + void 0 !== A.children) + for (var l = A.children, c = 0; l.length > c; c++) + i.add(this.parseObject(l[c], e, t)); + if ("LOD" === A.type) { + void 0 !== A.autoUpdate && (i.autoUpdate = A.autoUpdate); + for (var h = A.levels, d = 0; h.length > d; d++) { + var p = h[d] + , g = i.getObjectByProperty("uuid", p.object); + void 0 !== g && i.addLevel(g, p.distance) + } + } + return i + } + }); + var qa, ja = { + UVMapping: 300, + CubeReflectionMapping: 301, + CubeRefractionMapping: 302, + EquirectangularReflectionMapping: 303, + EquirectangularRefractionMapping: 304, + SphericalReflectionMapping: 305, + CubeUVReflectionMapping: 306, + CubeUVRefractionMapping: 307 + }, Ha = { + RepeatWrapping: 1e3, + ClampToEdgeWrapping: 1001, + MirroredRepeatWrapping: 1002 + }, Ya = { + NearestFilter: 1003, + NearestMipmapNearestFilter: 1004, + NearestMipmapLinearFilter: 1005, + LinearFilter: 1006, + LinearMipmapNearestFilter: 1007, + LinearMipmapLinearFilter: 1008 + }; + function Wa(A) { + "undefined" == typeof createImageBitmap && console.warn("THREE.ImageBitmapLoader: createImageBitmap() not supported."), + "undefined" == typeof fetch && console.warn("THREE.ImageBitmapLoader: fetch() not supported."), + Yr.call(this, A), + this.options = void 0 + } + function Ja() { + this.type = "ShapePath", + this.color = new LA, + this.subPaths = [], + this.currentPath = null + } + function za(A) { + this.type = "Font", + this.data = A + } + function Za(A, e, t, i, o) { + var n = o.glyphs[A] || o.glyphs["?"]; + if (n) { + var r, a, s, l, c, h, d, p, g = new Ja; + if (n.o) + for (var u = n._cachedOutline || (n._cachedOutline = n.o.split(" ")), f = 0, m = u.length; m > f; ) { + switch (u[f++]) { + case "m": + r = u[f++] * e + t, + a = u[f++] * e + i, + g.moveTo(r, a); + break; + case "l": + r = u[f++] * e + t, + a = u[f++] * e + i, + g.lineTo(r, a); + break; + case "q": + s = u[f++] * e + t, + l = u[f++] * e + i, + c = u[f++] * e + t, + h = u[f++] * e + i, + g.quadraticCurveTo(c, h, s, l); + break; + case "b": + s = u[f++] * e + t, + l = u[f++] * e + i, + c = u[f++] * e + t, + h = u[f++] * e + i, + d = u[f++] * e + t, + p = u[f++] * e + i, + g.bezierCurveTo(c, h, d, p, s, l) + } + } + return { + offsetX: n.ha * e, + path: g + } + } + console.error('THREE.Font: character "' + A + '" does not exists in font family ' + o.familyName + ".") + } + function Xa(A) { + Yr.call(this, A) + } + Wa.prototype = Object.assign(Object.create(Yr.prototype), { + constructor: Wa, + setOptions: function(A) { + return this.options = A, + this + }, + load: function(A, e, t, i) { + void 0 === A && (A = ""), + void 0 !== this.path && (A = this.path + A), + A = this.manager.resolveURL(A); + var o = this + , n = qr.get(A); + if (void 0 !== n) + return o.manager.itemStart(A), + setTimeout((function() { + e && e(n), + o.manager.itemEnd(A) + } + ), 0), + n; + fetch(A).then((function(A) { + return A.blob() + } + )).then((function(A) { + return void 0 === o.options ? createImageBitmap(A) : createImageBitmap(A, o.options) + } + )).then((function(t) { + qr.add(A, t), + e && e(t), + o.manager.itemEnd(A) + } + )).catch((function(e) { + i && i(e), + o.manager.itemError(A), + o.manager.itemEnd(A) + } + )), + o.manager.itemStart(A) + } + }), + Object.assign(Ja.prototype, { + moveTo: function(A, e) { + return this.currentPath = new Ea, + this.subPaths.push(this.currentPath), + this.currentPath.moveTo(A, e), + this + }, + lineTo: function(A, e) { + return this.currentPath.lineTo(A, e), + this + }, + quadraticCurveTo: function(A, e, t, i) { + return this.currentPath.quadraticCurveTo(A, e, t, i), + this + }, + bezierCurveTo: function(A, e, t, i, o, n) { + return this.currentPath.bezierCurveTo(A, e, t, i, o, n), + this + }, + splineThru: function(A) { + return this.currentPath.splineThru(A), + this + }, + toShapes: function(A, e) { + function t(A) { + for (var e = [], t = 0, i = A.length; i > t; t++) { + var o = A[t] + , n = new Ba; + n.curves = o.curves, + e.push(n) + } + return e + } + function i(A, e) { + for (var t = e.length, i = !1, o = t - 1, n = 0; t > n; o = n++) { + var r = e[o] + , a = e[n] + , s = a.x - r.x + , l = a.y - r.y; + if (Math.abs(l) > Number.EPSILON) { + if (0 > l && (r = e[n], + s = -s, + a = e[o], + l = -l), + r.y > A.y || A.y > a.y) + continue; + if (A.y === r.y) { + if (A.x === r.x) + return !0 + } else { + var c = l * (A.x - r.x) - s * (A.y - r.y); + if (0 === c) + return !0; + if (0 > c) + continue; + i = !i + } + } else { + if (A.y !== r.y) + continue; + if (A.x >= a.x && r.x >= A.x || A.x >= r.x && a.x >= A.x) + return !0 + } + } + return i + } + var o = Hn.isClockWise + , n = this.subPaths; + if (0 === n.length) + return []; + if (!0 === e) + return t(n); + var r, a, s, l = []; + if (1 === n.length) + return a = n[0], + (s = new Ba).curves = a.curves, + l.push(s), + l; + var c = !o(n[0].getPoints()); + c = A ? !c : c; + var h, d, p = [], g = [], u = [], f = 0; + g[f] = void 0, + u[f] = []; + for (var m = 0, C = n.length; C > m; m++) + r = o(h = (a = n[m]).getPoints()), + (r = A ? !r : r) ? (!c && g[f] && f++, + g[f] = { + s: new Ba, + p: h + }, + g[f].s.curves = a.curves, + c && f++, + u[f] = []) : u[f].push({ + h: a, + p: h[0] + }); + if (!g[0]) + return t(n); + if (g.length > 1) { + for (var y = !1, v = [], I = 0, E = g.length; E > I; I++) + p[I] = []; + for (I = 0, + E = g.length; E > I; I++) + for (var B = u[I], x = 0; B.length > x; x++) { + for (var S = B[x], w = !0, M = 0; g.length > M; M++) + i(S.p, g[M].p) && (I !== M && v.push({ + froms: I, + tos: M, + hole: x + }), + w ? (w = !1, + p[M].push(S)) : y = !0); + w && p[I].push(S) + } + v.length > 0 && (y || (u = p)) + } + m = 0; + for (var b = g.length; b > m; m++) { + l.push(s = g[m].s); + for (var U = 0, F = (d = u[m]).length; F > U; U++) + s.holes.push(d[U].h) + } + return l + } + }), + Object.assign(za.prototype, { + isFont: !0, + generateShapes: function(A, e) { + void 0 === e && (e = 100); + for (var t = [], i = function(A, e, t) { + for (var i = Array.from ? Array.from(A) : String(A).split(""), o = e / t.resolution, n = (t.boundingBox.yMax - t.boundingBox.yMin + t.underlineThickness) * o, r = [], a = 0, s = 0, l = 0; i.length > l; l++) { + var c = i[l]; + if ("\n" === c) + a = 0, + s -= n; + else { + var h = Za(c, o, a, s, t); + a += h.offsetX, + r.push(h.path) + } + } + return r + }(A, e, this.data), o = 0, n = i.length; n > o; o++) + Array.prototype.push.apply(t, i[o].toShapes()); + return t + } + }), + Xa.prototype = Object.assign(Object.create(Yr.prototype), { + constructor: Xa, + load: function(A, e, t, i) { + var o = this + , n = new Jr(this.manager); + n.setPath(this.path), + n.load(A, (function(A) { + var t; + try { + t = JSON.parse(A) + } catch (e) { + console.warn("THREE.FontLoader: typeface.js support is being deprecated. Use typeface.json instead."), + t = JSON.parse(A.substring(65, A.length - 2)) + } + var i = o.parse(t); + e && e(i) + } + ), t, i) + }, + parse: function(A) { + return new za(A) + } + }); + var _a = { + getContext: function() { + return void 0 === qa && (qa = new (window.AudioContext || window.webkitAudioContext)), + qa + }, + setContext: function(A) { + qa = A + } + }; + function $a(A) { + Yr.call(this, A) + } + function As() { + this.coefficients = []; + for (var A = 0; 9 > A; A++) + this.coefficients.push(new y) + } + function es(A, e) { + xa.call(this, void 0, e), + this.sh = void 0 !== A ? A : new As + } + function ts(A, e, t) { + es.call(this, void 0, t); + var i = (new LA).set(A) + , o = (new LA).set(e) + , n = new y(i.r,i.g,i.b) + , r = new y(o.r,o.g,o.b) + , a = Math.sqrt(Math.PI) + , s = a * Math.sqrt(.75); + this.sh.coefficients[0].copy(n).add(r).multiplyScalar(a), + this.sh.coefficients[1].copy(n).sub(r).multiplyScalar(s) + } + function is(A, e) { + es.call(this, void 0, e); + var t = (new LA).set(A); + this.sh.coefficients[0].set(t.r, t.g, t.b).multiplyScalar(2 * Math.sqrt(Math.PI)) + } + $a.prototype = Object.assign(Object.create(Yr.prototype), { + constructor: $a, + load: function(A, e, t, i) { + var o = new Jr(this.manager); + o.setResponseType("arraybuffer"), + o.setPath(this.path), + o.load(A, (function(A) { + var t = A.slice(0); + _a.getContext().decodeAudioData(t, (function(A) { + e(A) + } + )) + } + ), t, i) + } + }), + Object.assign(As.prototype, { + isSphericalHarmonics3: !0, + set: function(A) { + for (var e = 0; 9 > e; e++) + this.coefficients[e].copy(A[e]); + return this + }, + zero: function() { + for (var A = 0; 9 > A; A++) + this.coefficients[A].set(0, 0, 0); + return this + }, + getAt: function(A, e) { + var t = A.x + , i = A.y + , o = A.z + , n = this.coefficients; + return e.copy(n[0]).multiplyScalar(.282095), + e.addScaledVector(n[1], .488603 * i), + e.addScaledVector(n[2], .488603 * o), + e.addScaledVector(n[3], .488603 * t), + e.addScaledVector(n[4], t * i * 1.092548), + e.addScaledVector(n[5], i * o * 1.092548), + e.addScaledVector(n[6], .315392 * (3 * o * o - 1)), + e.addScaledVector(n[7], t * o * 1.092548), + e.addScaledVector(n[8], .546274 * (t * t - i * i)), + e + }, + getIrradianceAt: function(A, e) { + var t = A.x + , i = A.y + , o = A.z + , n = this.coefficients; + return e.copy(n[0]).multiplyScalar(.886227), + e.addScaledVector(n[1], 1.023328 * i), + e.addScaledVector(n[2], 1.023328 * o), + e.addScaledVector(n[3], 1.023328 * t), + e.addScaledVector(n[4], .858086 * t * i), + e.addScaledVector(n[5], .858086 * i * o), + e.addScaledVector(n[6], .743125 * o * o - .247708), + e.addScaledVector(n[7], .858086 * t * o), + e.addScaledVector(n[8], .429043 * (t * t - i * i)), + e + }, + add: function(A) { + for (var e = 0; 9 > e; e++) + this.coefficients[e].add(A.coefficients[e]); + return this + }, + addScaledSH: function(A, e) { + for (var t = 0; 9 > t; t++) + this.coefficients[t].addScaledVector(A.coefficients[t], e); + return this + }, + scale: function(A) { + for (var e = 0; 9 > e; e++) + this.coefficients[e].multiplyScalar(A); + return this + }, + lerp: function(A, e) { + for (var t = 0; 9 > t; t++) + this.coefficients[t].lerp(A.coefficients[t], e); + return this + }, + equals: function(A) { + for (var e = 0; 9 > e; e++) + if (!this.coefficients[e].equals(A.coefficients[e])) + return !1; + return !0 + }, + copy: function(A) { + return this.set(A.coefficients) + }, + clone: function() { + return (new this.constructor).copy(this) + }, + fromArray: function(A, e) { + void 0 === e && (e = 0); + for (var t = this.coefficients, i = 0; 9 > i; i++) + t[i].fromArray(A, e + 3 * i); + return this + }, + toArray: function(A, e) { + void 0 === A && (A = []), + void 0 === e && (e = 0); + for (var t = this.coefficients, i = 0; 9 > i; i++) + t[i].toArray(A, e + 3 * i); + return A + } + }), + Object.assign(As, { + getBasisAt: function(A, e) { + var t = A.x + , i = A.y + , o = A.z; + e[0] = .282095, + e[1] = .488603 * i, + e[2] = .488603 * o, + e[3] = .488603 * t, + e[4] = 1.092548 * t * i, + e[5] = 1.092548 * i * o, + e[6] = .315392 * (3 * o * o - 1), + e[7] = 1.092548 * t * o, + e[8] = .546274 * (t * t - i * i) + } + }), + es.prototype = Object.assign(Object.create(xa.prototype), { + constructor: es, + isLightProbe: !0, + copy: function(A) { + return xa.prototype.copy.call(this, A), + this.sh.copy(A.sh), + this.intensity = A.intensity, + this + }, + toJSON: function(A) { + return xa.prototype.toJSON.call(this, A) + } + }), + ts.prototype = Object.assign(Object.create(es.prototype), { + constructor: ts, + isHemisphereLightProbe: !0, + copy: function(A) { + return es.prototype.copy.call(this, A), + this + }, + toJSON: function(A) { + return es.prototype.toJSON.call(this, A) + } + }), + is.prototype = Object.assign(Object.create(es.prototype), { + constructor: is, + isAmbientLightProbe: !0, + copy: function(A) { + return es.prototype.copy.call(this, A), + this + }, + toJSON: function(A) { + return es.prototype.toJSON.call(this, A) + } + }); + var os = new M + , ns = new M; + function rs() { + this.type = "StereoCamera", + this.aspect = 1, + this.eyeSep = .064, + this.cameraL = new je, + this.cameraL.layers.enable(1), + this.cameraL.matrixAutoUpdate = !1, + this.cameraR = new je, + this.cameraR.layers.enable(2), + this.cameraR.matrixAutoUpdate = !1, + this._cache = { + focus: null, + fov: null, + aspect: null, + near: null, + far: null, + zoom: null, + eyeSep: null + } + } + function as(A) { + this.autoStart = void 0 === A || A, + this.startTime = 0, + this.oldTime = 0, + this.elapsedTime = 0, + this.running = !1 + } + Object.assign(rs.prototype, { + update: function(A) { + var e = this._cache; + if (e.focus !== A.focus || e.fov !== A.fov || e.aspect !== A.aspect * this.aspect || e.near !== A.near || e.far !== A.far || e.zoom !== A.zoom || e.eyeSep !== this.eyeSep) { + e.focus = A.focus, + e.fov = A.fov, + e.aspect = A.aspect * this.aspect, + e.near = A.near, + e.far = A.far, + e.zoom = A.zoom, + e.eyeSep = this.eyeSep; + var t, i, o = A.projectionMatrix.clone(), n = e.eyeSep / 2, r = n * e.near / e.focus, s = e.near * Math.tan(a.DEG2RAD * e.fov * .5) / e.zoom; + ns.elements[12] = -n, + os.elements[12] = n, + o.elements[0] = 2 * e.near / ((i = s * e.aspect + r) - (t = -s * e.aspect + r)), + o.elements[8] = (i + t) / (i - t), + this.cameraL.projectionMatrix.copy(o), + o.elements[0] = 2 * e.near / ((i = s * e.aspect - r) - (t = -s * e.aspect - r)), + o.elements[8] = (i + t) / (i - t), + this.cameraR.projectionMatrix.copy(o) + } + this.cameraL.matrixWorld.copy(A.matrixWorld).multiply(ns), + this.cameraR.matrixWorld.copy(A.matrixWorld).multiply(os) + } + }), + Object.assign(as.prototype, { + start: function() { + this.startTime = ("undefined" == typeof performance ? Date : performance).now(), + this.oldTime = this.startTime, + this.elapsedTime = 0, + this.running = !0 + }, + stop: function() { + this.getElapsedTime(), + this.running = !1, + this.autoStart = !1 + }, + getElapsedTime: function() { + return this.getDelta(), + this.elapsedTime + }, + getDelta: function() { + var A = 0; + if (this.autoStart && !this.running) + return this.start(), + 0; + if (this.running) { + var e = ("undefined" == typeof performance ? Date : performance).now(); + A = (e - this.oldTime) / 1e3, + this.oldTime = e, + this.elapsedTime += A + } + return A + } + }); + var ss = new y + , ls = new f + , cs = new y + , hs = new y; + function ds() { + H.call(this), + this.type = "AudioListener", + this.context = _a.getContext(), + this.gain = this.context.createGain(), + this.gain.connect(this.context.destination), + this.filter = null, + this.timeDelta = 0, + this._clock = new as + } + function ps(A) { + H.call(this), + this.type = "Audio", + this.listener = A, + this.context = A.context, + this.gain = this.context.createGain(), + this.gain.connect(A.getInput()), + this.autoplay = !1, + this.buffer = null, + this.detune = 0, + this.loop = !1, + this.loopStart = 0, + this.loopEnd = 0, + this.offset = 0, + this.duration = void 0, + this.playbackRate = 1, + this.isPlaying = !1, + this.hasPlaybackControl = !0, + this.sourceType = "empty", + this._startedAt = 0, + this._pausedAt = 0, + this.filters = [] + } + ds.prototype = Object.assign(Object.create(H.prototype), { + constructor: ds, + getInput: function() { + return this.gain + }, + removeFilter: function() { + return null !== this.filter && (this.gain.disconnect(this.filter), + this.filter.disconnect(this.context.destination), + this.gain.connect(this.context.destination), + this.filter = null), + this + }, + getFilter: function() { + return this.filter + }, + setFilter: function(A) { + return null !== this.filter ? (this.gain.disconnect(this.filter), + this.filter.disconnect(this.context.destination)) : this.gain.disconnect(this.context.destination), + this.filter = A, + this.gain.connect(this.filter), + this.filter.connect(this.context.destination), + this + }, + getMasterVolume: function() { + return this.gain.gain.value + }, + setMasterVolume: function(A) { + return this.gain.gain.setTargetAtTime(A, this.context.currentTime, .01), + this + }, + updateMatrixWorld: function(A) { + H.prototype.updateMatrixWorld.call(this, A); + var e = this.context.listener + , t = this.up; + if (this.timeDelta = this._clock.getDelta(), + this.matrixWorld.decompose(ss, ls, cs), + hs.set(0, 0, -1).applyQuaternion(ls), + e.positionX) { + var i = this.context.currentTime + this.timeDelta; + e.positionX.linearRampToValueAtTime(ss.x, i), + e.positionY.linearRampToValueAtTime(ss.y, i), + e.positionZ.linearRampToValueAtTime(ss.z, i), + e.forwardX.linearRampToValueAtTime(hs.x, i), + e.forwardY.linearRampToValueAtTime(hs.y, i), + e.forwardZ.linearRampToValueAtTime(hs.z, i), + e.upX.linearRampToValueAtTime(t.x, i), + e.upY.linearRampToValueAtTime(t.y, i), + e.upZ.linearRampToValueAtTime(t.z, i) + } else + e.setPosition(ss.x, ss.y, ss.z), + e.setOrientation(hs.x, hs.y, hs.z, t.x, t.y, t.z) + } + }), + ps.prototype = Object.assign(Object.create(H.prototype), { + constructor: ps, + getOutput: function() { + return this.gain + }, + setNodeSource: function(A) { + return this.hasPlaybackControl = !1, + this.sourceType = "audioNode", + this.source = A, + this.connect(), + this + }, + setMediaElementSource: function(A) { + return this.hasPlaybackControl = !1, + this.sourceType = "mediaNode", + this.source = this.context.createMediaElementSource(A), + this.connect(), + this + }, + setMediaStreamSource: function(A) { + return this.hasPlaybackControl = !1, + this.sourceType = "mediaStreamNode", + this.source = this.context.createMediaStreamSource(A), + this.connect(), + this + }, + setBuffer: function(A) { + return this.buffer = A, + this.sourceType = "buffer", + this.autoplay && this.play(), + this + }, + play: function(A) { + if (void 0 === A && (A = 0), + !0 !== this.isPlaying) { + if (!1 !== this.hasPlaybackControl) { + this._startedAt = this.context.currentTime + A; + var e = this.context.createBufferSource(); + return e.buffer = this.buffer, + e.loop = this.loop, + e.loopStart = this.loopStart, + e.loopEnd = this.loopEnd, + e.onended = this.onEnded.bind(this), + e.start(this._startedAt, this._pausedAt + this.offset, this.duration), + this.isPlaying = !0, + this.source = e, + this.setDetune(this.detune), + this.setPlaybackRate(this.playbackRate), + this.connect() + } + console.warn("THREE.Audio: this Audio has no playback control.") + } else + console.warn("THREE.Audio: Audio is already playing.") + }, + pause: function() { + if (!1 !== this.hasPlaybackControl) + return !0 === this.isPlaying && (this._pausedAt += Math.max(this.context.currentTime - this._startedAt, 0) * this.playbackRate, + this.source.stop(), + this.source.onended = null, + this.isPlaying = !1), + this; + console.warn("THREE.Audio: this Audio has no playback control.") + }, + stop: function() { + if (!1 !== this.hasPlaybackControl) + return this._pausedAt = 0, + this.source.stop(), + this.source.onended = null, + this.isPlaying = !1, + this; + console.warn("THREE.Audio: this Audio has no playback control.") + }, + connect: function() { + if (this.filters.length > 0) { + this.source.connect(this.filters[0]); + for (var A = 1, e = this.filters.length; e > A; A++) + this.filters[A - 1].connect(this.filters[A]); + this.filters[this.filters.length - 1].connect(this.getOutput()) + } else + this.source.connect(this.getOutput()); + return this + }, + disconnect: function() { + if (this.filters.length > 0) { + this.source.disconnect(this.filters[0]); + for (var A = 1, e = this.filters.length; e > A; A++) + this.filters[A - 1].disconnect(this.filters[A]); + this.filters[this.filters.length - 1].disconnect(this.getOutput()) + } else + this.source.disconnect(this.getOutput()); + return this + }, + getFilters: function() { + return this.filters + }, + setFilters: function(A) { + return A || (A = []), + !0 === this.isPlaying ? (this.disconnect(), + this.filters = A, + this.connect()) : this.filters = A, + this + }, + setDetune: function(A) { + if (this.detune = A, + void 0 !== this.source.detune) + return !0 === this.isPlaying && this.source.detune.setTargetAtTime(this.detune, this.context.currentTime, .01), + this + }, + getDetune: function() { + return this.detune + }, + getFilter: function() { + return this.getFilters()[0] + }, + setFilter: function(A) { + return this.setFilters(A ? [A] : []) + }, + setPlaybackRate: function(A) { + if (!1 !== this.hasPlaybackControl) + return this.playbackRate = A, + !0 === this.isPlaying && this.source.playbackRate.setTargetAtTime(this.playbackRate, this.context.currentTime, .01), + this; + console.warn("THREE.Audio: this Audio has no playback control.") + }, + getPlaybackRate: function() { + return this.playbackRate + }, + onEnded: function() { + this.isPlaying = !1 + }, + getLoop: function() { + return !1 === this.hasPlaybackControl ? (console.warn("THREE.Audio: this Audio has no playback control."), + !1) : this.loop + }, + setLoop: function(A) { + if (!1 !== this.hasPlaybackControl) + return this.loop = A, + !0 === this.isPlaying && (this.source.loop = this.loop), + this; + console.warn("THREE.Audio: this Audio has no playback control.") + }, + setLoopStart: function(A) { + return this.loopStart = A, + this + }, + setLoopEnd: function(A) { + return this.loopEnd = A, + this + }, + getVolume: function() { + return this.gain.gain.value + }, + setVolume: function(A) { + return this.gain.gain.setTargetAtTime(A, this.context.currentTime, .01), + this + } + }); + var gs = new y + , us = new f + , fs = new y + , ms = new y; + function Cs(A) { + ps.call(this, A), + this.panner = this.context.createPanner(), + this.panner.panningModel = "HRTF", + this.panner.connect(this.gain) + } + function ys(A, e) { + this.analyser = A.context.createAnalyser(), + this.analyser.fftSize = void 0 !== e ? e : 2048, + this.data = new Uint8Array(this.analyser.frequencyBinCount), + A.getOutput().connect(this.analyser) + } + function vs(A, e, t) { + this.binding = A, + this.valueSize = t; + var i, o = Float64Array; + switch (e) { + case "quaternion": + i = this._slerp; + break; + case "string": + case "bool": + o = Array, + i = this._select; + break; + default: + i = this._lerp + } + this.buffer = new o(4 * t), + this._mixBufferRegion = i, + this.cumulativeWeight = 0, + this.useCount = 0, + this.referenceCount = 0 + } + Cs.prototype = Object.assign(Object.create(ps.prototype), { + constructor: Cs, + getOutput: function() { + return this.panner + }, + getRefDistance: function() { + return this.panner.refDistance + }, + setRefDistance: function(A) { + return this.panner.refDistance = A, + this + }, + getRolloffFactor: function() { + return this.panner.rolloffFactor + }, + setRolloffFactor: function(A) { + return this.panner.rolloffFactor = A, + this + }, + getDistanceModel: function() { + return this.panner.distanceModel + }, + setDistanceModel: function(A) { + return this.panner.distanceModel = A, + this + }, + getMaxDistance: function() { + return this.panner.maxDistance + }, + setMaxDistance: function(A) { + return this.panner.maxDistance = A, + this + }, + setDirectionalCone: function(A, e, t) { + return this.panner.coneInnerAngle = A, + this.panner.coneOuterAngle = e, + this.panner.coneOuterGain = t, + this + }, + updateMatrixWorld: function(A) { + if (H.prototype.updateMatrixWorld.call(this, A), + !0 !== this.hasPlaybackControl || !1 !== this.isPlaying) { + this.matrixWorld.decompose(gs, us, fs), + ms.set(0, 0, 1).applyQuaternion(us); + var e = this.panner; + if (e.positionX) { + var t = this.context.currentTime + this.listener.timeDelta; + e.positionX.linearRampToValueAtTime(gs.x, t), + e.positionY.linearRampToValueAtTime(gs.y, t), + e.positionZ.linearRampToValueAtTime(gs.z, t), + e.orientationX.linearRampToValueAtTime(ms.x, t), + e.orientationY.linearRampToValueAtTime(ms.y, t), + e.orientationZ.linearRampToValueAtTime(ms.z, t) + } else + e.setPosition(gs.x, gs.y, gs.z), + e.setOrientation(ms.x, ms.y, ms.z) + } + } + }), + Object.assign(ys.prototype, { + getFrequencyData: function() { + return this.analyser.getByteFrequencyData(this.data), + this.data + }, + getAverageFrequency: function() { + for (var A = 0, e = this.getFrequencyData(), t = 0; e.length > t; t++) + A += e[t]; + return A / e.length + } + }), + Object.assign(vs.prototype, { + accumulate: function(A, e) { + var t = this.buffer + , i = this.valueSize + , o = A * i + i + , n = this.cumulativeWeight; + if (0 === n) { + for (var r = 0; r !== i; ++r) + t[o + r] = t[r]; + n = e + } else { + this._mixBufferRegion(t, o, 0, e / (n += e), i) + } + this.cumulativeWeight = n + }, + apply: function(A) { + var e = this.valueSize + , t = this.buffer + , i = A * e + e + , o = this.cumulativeWeight + , n = this.binding; + (this.cumulativeWeight = 0, + 1 > o) && this._mixBufferRegion(t, i, 3 * e, 1 - o, e); + for (var r = e, a = e + e; r !== a; ++r) + if (t[r] !== t[r + e]) { + n.setValue(t, i); + break + } + }, + saveOriginalState: function() { + var A = this.buffer + , e = this.valueSize + , t = 3 * e; + this.binding.getValue(A, t); + for (var i = e, o = t; i !== o; ++i) + A[i] = A[t + i % e]; + this.cumulativeWeight = 0 + }, + restoreOriginalState: function() { + this.binding.setValue(this.buffer, 3 * this.valueSize) + }, + _select: function(A, e, t, i, o) { + if (i >= .5) + for (var n = 0; n !== o; ++n) + A[e + n] = A[t + n] + }, + _slerp: function(A, e, t, i) { + f.slerpFlat(A, e, A, e, A, t, i) + }, + _lerp: function(A, e, t, i, o) { + for (var n = 1 - i, r = 0; r !== o; ++r) { + var a = e + r; + A[a] = A[a] * n + A[t + r] * i + } + } + }); + var Is = new RegExp("[\\[\\]\\.:\\/]","g") + , Es = "[^" + "\\[\\]\\.:\\/".replace("\\.", "") + "]" + , Bs = /((?:WC+[\/:])*)/.source.replace("WC", "[^\\[\\]\\.:\\/]") + , xs = /(WCOD+)?/.source.replace("WCOD", Es) + , Ss = /(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC", "[^\\[\\]\\.:\\/]") + , ws = /\.(WC+)(?:\[(.+)\])?/.source.replace("WC", "[^\\[\\]\\.:\\/]") + , Ms = new RegExp("^" + Bs + xs + Ss + ws + "$") + , bs = ["material", "materials", "bones"]; + function Us(A, e, t) { + var i = t || Fs.parseTrackName(e); + this._targetGroup = A, + this._bindings = A.subscribe_(e, i) + } + function Fs(A, e, t) { + this.path = e, + this.parsedPath = t || Fs.parseTrackName(e), + this.node = Fs.findNode(A, this.parsedPath.nodeName) || A, + this.rootNode = A + } + function Ks() { + this.uuid = a.generateUUID(), + this._objects = Array.prototype.slice.call(arguments), + this.nCachedObjects_ = 0; + var A = {}; + this._indicesByUUID = A; + for (var e = 0, t = arguments.length; e !== t; ++e) + A[arguments[e].uuid] = e; + this._paths = [], + this._parsedPaths = [], + this._bindings = [], + this._bindingsIndicesByPath = {}; + var i = this; + this.stats = { + objects: { + get total() { + return i._objects.length + }, + get inUse() { + return this.total - i.nCachedObjects_ + } + }, + get bindingsPerObject() { + return i._bindings.length + } + } + } + function Qs(A, e, t) { + this._mixer = A, + this._clip = e, + this._localRoot = t || null; + for (var i = e.tracks, o = i.length, n = new Array(o), r = { + endingStart: 2400, + endingEnd: 2400 + }, a = 0; a !== o; ++a) { + var s = i[a].createInterpolant(null); + n[a] = s, + s.settings = r + } + this._interpolantSettings = r, + this._interpolants = n, + this._propertyBindings = new Array(o), + this._cacheIndex = null, + this._byClipCacheIndex = null, + this._timeScaleInterpolant = null, + this._weightInterpolant = null, + this.loop = 2201, + this._loopCount = -1, + this._startTime = null, + this.time = 0, + this.timeScale = 1, + this._effectiveTimeScale = 1, + this.weight = 1, + this._effectiveWeight = 1, + this.repetitions = 1 / 0, + this.paused = !1, + this.enabled = !0, + this.clampWhenFinished = !1, + this.zeroSlopeAtStart = !0, + this.zeroSlopeAtEnd = !0 + } + function Rs(A) { + this._root = A, + this._initMemoryManager(), + this._accuIndex = 0, + this.time = 0, + this.timeScale = 1 + } + function Ts(A) { + "string" == typeof A && (console.warn("THREE.Uniform: Type parameter is no longer needed."), + A = arguments[1]), + this.value = A + } + function ks(A, e, t) { + to.call(this, A, e), + this.meshPerAttribute = t || 1 + } + function Ds(A, e, t, i) { + this.ray = new CA(A,e), + this.near = t || 0, + this.far = i || 1 / 0, + this.camera = null, + this.layers = new K, + this.params = { + Mesh: {}, + Line: { + threshold: 1 + }, + LOD: {}, + Points: { + threshold: 1 + }, + Sprite: {} + }, + Object.defineProperties(this.params, { + PointCloud: { + get: function() { + return console.warn("THREE.Raycaster: params.PointCloud has been renamed to params.Points."), + this.Points + } + } + }) + } + function Ls(A, e) { + return A.distance - e.distance + } + function Ns(A, e, t, i) { + if (A.layers.test(e.layers) && A.raycast(e, t), + !0 === i) + for (var o = A.children, n = 0, r = o.length; r > n; n++) + Ns(o[n], e, t, !0) + } + function Os(A, e, t) { + return this.radius = void 0 !== A ? A : 1, + this.phi = void 0 !== e ? e : 0, + this.theta = void 0 !== t ? t : 0, + this + } + function Vs(A, e, t) { + return this.radius = void 0 !== A ? A : 1, + this.theta = void 0 !== e ? e : 0, + this.y = void 0 !== t ? t : 0, + this + } + Object.assign(Us.prototype, { + getValue: function(A, e) { + this.bind(); + var t = this._bindings[this._targetGroup.nCachedObjects_]; + void 0 !== t && t.getValue(A, e) + }, + setValue: function(A, e) { + for (var t = this._bindings, i = this._targetGroup.nCachedObjects_, o = t.length; i !== o; ++i) + t[i].setValue(A, e) + }, + bind: function() { + for (var A = this._bindings, e = this._targetGroup.nCachedObjects_, t = A.length; e !== t; ++e) + A[e].bind() + }, + unbind: function() { + for (var A = this._bindings, e = this._targetGroup.nCachedObjects_, t = A.length; e !== t; ++e) + A[e].unbind() + } + }), + Object.assign(Fs, { + Composite: Us, + create: function(A, e, t) { + return A && A.isAnimationObjectGroup ? new Fs.Composite(A,e,t) : new Fs(A,e,t) + }, + sanitizeNodeName: function(A) { + return A.replace(/\s/g, "_").replace(Is, "") + }, + parseTrackName: function(A) { + var e = Ms.exec(A); + if (!e) + throw new Error("PropertyBinding: Cannot parse trackName: " + A); + var t = { + nodeName: e[2], + objectName: e[3], + objectIndex: e[4], + propertyName: e[5], + propertyIndex: e[6] + } + , i = t.nodeName && t.nodeName.lastIndexOf("."); + if (void 0 !== i && -1 !== i) { + var o = t.nodeName.substring(i + 1); + -1 !== bs.indexOf(o) && (t.nodeName = t.nodeName.substring(0, i), + t.objectName = o) + } + if (null === t.propertyName || 0 === t.propertyName.length) + throw new Error("PropertyBinding: can not parse propertyName from trackName: " + A); + return t + }, + findNode: function(A, e) { + if (!e || "" === e || "." === e || -1 === e || e === A.name || e === A.uuid) + return A; + if (A.skeleton) { + var t = A.skeleton.getBoneByName(e); + if (void 0 !== t) + return t + } + if (A.children) { + var i = function(A) { + for (var t = 0; A.length > t; t++) { + var o = A[t]; + if (o.name === e || o.uuid === e) + return o; + var n = i(o.children); + if (n) + return n + } + return null + } + , o = i(A.children); + if (o) + return o + } + return null + } + }), + Object.assign(Fs.prototype, { + _getValue_unavailable: function() {}, + _setValue_unavailable: function() {}, + BindingType: { + Direct: 0, + EntireArray: 1, + ArrayElement: 2, + HasFromToArray: 3 + }, + Versioning: { + None: 0, + NeedsUpdate: 1, + MatrixWorldNeedsUpdate: 2 + }, + GetterByBindingType: [function(A, e) { + A[e] = this.node[this.propertyName] + } + , function(A, e) { + for (var t = this.resolvedProperty, i = 0, o = t.length; i !== o; ++i) + A[e++] = t[i] + } + , function(A, e) { + A[e] = this.resolvedProperty[this.propertyIndex] + } + , function(A, e) { + this.resolvedProperty.toArray(A, e) + } + ], + SetterByBindingTypeAndVersioning: [[function(A, e) { + this.targetObject[this.propertyName] = A[e] + } + , function(A, e) { + this.targetObject[this.propertyName] = A[e], + this.targetObject.needsUpdate = !0 + } + , function(A, e) { + this.targetObject[this.propertyName] = A[e], + this.targetObject.matrixWorldNeedsUpdate = !0 + } + ], [function(A, e) { + for (var t = this.resolvedProperty, i = 0, o = t.length; i !== o; ++i) + t[i] = A[e++] + } + , function(A, e) { + for (var t = this.resolvedProperty, i = 0, o = t.length; i !== o; ++i) + t[i] = A[e++]; + this.targetObject.needsUpdate = !0 + } + , function(A, e) { + for (var t = this.resolvedProperty, i = 0, o = t.length; i !== o; ++i) + t[i] = A[e++]; + this.targetObject.matrixWorldNeedsUpdate = !0 + } + ], [function(A, e) { + this.resolvedProperty[this.propertyIndex] = A[e] + } + , function(A, e) { + this.resolvedProperty[this.propertyIndex] = A[e], + this.targetObject.needsUpdate = !0 + } + , function(A, e) { + this.resolvedProperty[this.propertyIndex] = A[e], + this.targetObject.matrixWorldNeedsUpdate = !0 + } + ], [function(A, e) { + this.resolvedProperty.fromArray(A, e) + } + , function(A, e) { + this.resolvedProperty.fromArray(A, e), + this.targetObject.needsUpdate = !0 + } + , function(A, e) { + this.resolvedProperty.fromArray(A, e), + this.targetObject.matrixWorldNeedsUpdate = !0 + } + ]], + getValue: function(A, e) { + this.bind(), + this.getValue(A, e) + }, + setValue: function(A, e) { + this.bind(), + this.setValue(A, e) + }, + bind: function() { + var A = this.node + , e = this.parsedPath + , t = e.objectName + , i = e.propertyName + , o = e.propertyIndex; + if (A || (A = Fs.findNode(this.rootNode, e.nodeName) || this.rootNode, + this.node = A), + this.getValue = this._getValue_unavailable, + this.setValue = this._setValue_unavailable, + A) { + if (t) { + var n = e.objectIndex; + switch (t) { + case "materials": + if (!A.material) + return void console.error("THREE.PropertyBinding: Can not bind to material as node does not have a material.", this); + if (!A.material.materials) + return void console.error("THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.", this); + A = A.material.materials; + break; + case "bones": + if (!A.skeleton) + return void console.error("THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.", this); + A = A.skeleton.bones; + for (var r = 0; A.length > r; r++) + if (A[r].name === n) { + n = r; + break + } + break; + default: + if (void 0 === A[t]) + return void console.error("THREE.PropertyBinding: Can not bind to objectName of node undefined.", this); + A = A[t] + } + if (void 0 !== n) { + if (void 0 === A[n]) + return void console.error("THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.", this, A); + A = A[n] + } + } + var a = A[i]; + if (void 0 !== a) { + var s = this.Versioning.None; + this.targetObject = A, + void 0 !== A.needsUpdate ? s = this.Versioning.NeedsUpdate : void 0 !== A.matrixWorldNeedsUpdate && (s = this.Versioning.MatrixWorldNeedsUpdate); + var l = this.BindingType.Direct; + if (void 0 !== o) { + if ("morphTargetInfluences" === i) { + if (!A.geometry) + return void console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.", this); + if (A.geometry.isBufferGeometry) { + if (!A.geometry.morphAttributes) + return void console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.", this); + for (r = 0; this.node.geometry.morphAttributes.position.length > r; r++) + if (A.geometry.morphAttributes.position[r].name === o) { + o = r; + break + } + } else { + if (!A.geometry.morphTargets) + return void console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphTargets.", this); + for (r = 0; this.node.geometry.morphTargets.length > r; r++) + if (A.geometry.morphTargets[r].name === o) { + o = r; + break + } + } + } + l = this.BindingType.ArrayElement, + this.resolvedProperty = a, + this.propertyIndex = o + } else + void 0 !== a.fromArray && void 0 !== a.toArray ? (l = this.BindingType.HasFromToArray, + this.resolvedProperty = a) : Array.isArray(a) ? (l = this.BindingType.EntireArray, + this.resolvedProperty = a) : this.propertyName = i; + this.getValue = this.GetterByBindingType[l], + this.setValue = this.SetterByBindingTypeAndVersioning[l][s] + } else { + console.error("THREE.PropertyBinding: Trying to update property for track: " + e.nodeName + "." + i + " but it wasn't found.", A) + } + } else + console.error("THREE.PropertyBinding: Trying to update node for track: " + this.path + " but it wasn't found.") + }, + unbind: function() { + this.node = null, + this.getValue = this._getValue_unbound, + this.setValue = this._setValue_unbound + } + }), + Object.assign(Fs.prototype, { + _getValue_unbound: Fs.prototype.getValue, + _setValue_unbound: Fs.prototype.setValue + }), + Object.assign(Ks.prototype, { + isAnimationObjectGroup: !0, + add: function() { + for (var A = this._objects, e = A.length, t = this.nCachedObjects_, i = this._indicesByUUID, o = this._paths, n = this._parsedPaths, r = this._bindings, a = r.length, s = void 0, l = 0, c = arguments.length; l !== c; ++l) { + var h = arguments[l] + , d = h.uuid + , p = i[d]; + if (void 0 === p) { + p = e++, + i[d] = p, + A.push(h); + for (var g = 0, u = a; g !== u; ++g) + r[g].push(new Fs(h,o[g],n[g])) + } else if (t > p) { + s = A[p]; + var f = --t + , m = A[f]; + i[m.uuid] = p, + A[p] = m, + i[d] = f, + A[f] = h; + for (g = 0, + u = a; g !== u; ++g) { + var C = r[g] + , y = C[f] + , v = C[p]; + C[p] = y, + void 0 === v && (v = new Fs(h,o[g],n[g])), + C[f] = v + } + } else + A[p] !== s && console.error("THREE.AnimationObjectGroup: Different objects with the same UUID detected. Clean the caches or recreate your infrastructure when reloading scenes.") + } + this.nCachedObjects_ = t + }, + remove: function() { + for (var A = this._objects, e = this.nCachedObjects_, t = this._indicesByUUID, i = this._bindings, o = i.length, n = 0, r = arguments.length; n !== r; ++n) { + var a = arguments[n] + , s = a.uuid + , l = t[s]; + if (void 0 !== l && l >= e) { + var c = e++ + , h = A[c]; + t[h.uuid] = l, + A[l] = h, + t[s] = c, + A[c] = a; + for (var d = 0, p = o; d !== p; ++d) { + var g = i[d] + , u = g[c] + , f = g[l]; + g[l] = u, + g[c] = f + } + } + } + this.nCachedObjects_ = e + }, + uncache: function() { + for (var A = this._objects, e = A.length, t = this.nCachedObjects_, i = this._indicesByUUID, o = this._bindings, n = o.length, r = 0, a = arguments.length; r !== a; ++r) { + var s = arguments[r] + , l = s.uuid + , c = i[l]; + if (void 0 !== c) + if (delete i[l], + t > c) { + var h = --t + , d = A[h] + , p = A[C = --e]; + i[d.uuid] = c, + A[c] = d, + i[p.uuid] = h, + A[h] = p, + A.pop(); + for (var g = 0, u = n; g !== u; ++g) { + var f = (y = o[g])[h] + , m = y[C]; + y[c] = f, + y[h] = m, + y.pop() + } + } else { + var C; + i[(p = A[C = --e]).uuid] = c, + A[c] = p, + A.pop(); + for (g = 0, + u = n; g !== u; ++g) { + var y; + (y = o[g])[c] = y[C], + y.pop() + } + } + } + this.nCachedObjects_ = t + }, + subscribe_: function(A, e) { + var t = this._bindingsIndicesByPath + , i = t[A] + , o = this._bindings; + if (void 0 !== i) + return o[i]; + var n = this._paths + , r = this._parsedPaths + , a = this._objects + , s = this.nCachedObjects_ + , l = new Array(a.length); + t[A] = i = o.length, + n.push(A), + r.push(e), + o.push(l); + for (var c = s, h = a.length; c !== h; ++c) { + l[c] = new Fs(a[c],A,e) + } + return l + }, + unsubscribe_: function(A) { + var e = this._bindingsIndicesByPath + , t = e[A]; + if (void 0 !== t) { + var i = this._paths + , o = this._parsedPaths + , n = this._bindings + , r = n.length - 1 + , a = n[r]; + e[A[r]] = t, + n[t] = a, + n.pop(), + o[t] = o[r], + o.pop(), + i[t] = i[r], + i.pop() + } + } + }), + Object.assign(Qs.prototype, { + play: function() { + return this._mixer._activateAction(this), + this + }, + stop: function() { + return this._mixer._deactivateAction(this), + this.reset() + }, + reset: function() { + return this.paused = !1, + this.enabled = !0, + this.time = 0, + this._loopCount = -1, + this._startTime = null, + this.stopFading().stopWarping() + }, + isRunning: function() { + return this.enabled && !this.paused && 0 !== this.timeScale && null === this._startTime && this._mixer._isActiveAction(this) + }, + isScheduled: function() { + return this._mixer._isActiveAction(this) + }, + startAt: function(A) { + return this._startTime = A, + this + }, + setLoop: function(A, e) { + return this.loop = A, + this.repetitions = e, + this + }, + setEffectiveWeight: function(A) { + return this.weight = A, + this._effectiveWeight = this.enabled ? A : 0, + this.stopFading() + }, + getEffectiveWeight: function() { + return this._effectiveWeight + }, + fadeIn: function(A) { + return this._scheduleFading(A, 0, 1) + }, + fadeOut: function(A) { + return this._scheduleFading(A, 1, 0) + }, + crossFadeFrom: function(A, e, t) { + if (A.fadeOut(e), + this.fadeIn(e), + t) { + var i = this._clip.duration + , o = A._clip.duration + , n = i / o; + A.warp(1, o / i, e), + this.warp(n, 1, e) + } + return this + }, + crossFadeTo: function(A, e, t) { + return A.crossFadeFrom(this, e, t) + }, + stopFading: function() { + var A = this._weightInterpolant; + return null !== A && (this._weightInterpolant = null, + this._mixer._takeBackControlInterpolant(A)), + this + }, + setEffectiveTimeScale: function(A) { + return this.timeScale = A, + this._effectiveTimeScale = this.paused ? 0 : A, + this.stopWarping() + }, + getEffectiveTimeScale: function() { + return this._effectiveTimeScale + }, + setDuration: function(A) { + return this.timeScale = this._clip.duration / A, + this.stopWarping() + }, + syncWith: function(A) { + return this.time = A.time, + this.timeScale = A.timeScale, + this.stopWarping() + }, + halt: function(A) { + return this.warp(this._effectiveTimeScale, 0, A) + }, + warp: function(A, e, t) { + var i = this._mixer + , o = i.time + , n = this._timeScaleInterpolant + , r = this.timeScale; + null === n && (n = i._lendControlInterpolant(), + this._timeScaleInterpolant = n); + var a = n.parameterPositions + , s = n.sampleValues; + return a[0] = o, + a[1] = o + t, + s[0] = A / r, + s[1] = e / r, + this + }, + stopWarping: function() { + var A = this._timeScaleInterpolant; + return null !== A && (this._timeScaleInterpolant = null, + this._mixer._takeBackControlInterpolant(A)), + this + }, + getMixer: function() { + return this._mixer + }, + getClip: function() { + return this._clip + }, + getRoot: function() { + return this._localRoot || this._mixer._root + }, + _update: function(A, e, t, i) { + if (this.enabled) { + var o = this._startTime; + if (null !== o) { + var n = (A - o) * t; + if (0 > n || 0 === t) + return; + this._startTime = null, + e = t * n + } + e *= this._updateTimeScale(A); + var r = this._updateTime(e) + , a = this._updateWeight(A); + if (a > 0) + for (var s = this._interpolants, l = this._propertyBindings, c = 0, h = s.length; c !== h; ++c) + s[c].evaluate(r), + l[c].accumulate(i, a) + } else + this._updateWeight(A) + }, + _updateWeight: function(A) { + var e = 0; + if (this.enabled) { + e = this.weight; + var t = this._weightInterpolant; + if (null !== t) { + var i = t.evaluate(A)[0]; + e *= i, + A > t.parameterPositions[1] && (this.stopFading(), + 0 === i && (this.enabled = !1)) + } + } + return this._effectiveWeight = e, + e + }, + _updateTimeScale: function(A) { + var e = 0; + if (!this.paused) { + e = this.timeScale; + var t = this._timeScaleInterpolant; + if (null !== t) + e *= t.evaluate(A)[0], + A > t.parameterPositions[1] && (this.stopWarping(), + 0 === e ? this.paused = !0 : this.timeScale = e) + } + return this._effectiveTimeScale = e, + e + }, + _updateTime: function(A) { + var e = this.time + A + , t = this._clip.duration + , i = this.loop + , o = this._loopCount + , n = 2202 === i; + if (0 === A) + return -1 === o ? e : n && 1 == (1 & o) ? t - e : e; + if (2200 === i) { + -1 === o && (this._loopCount = 0, + this._setEndings(!0, !0, !1)); + A: { + if (e < t) { + if (e >= 0) { + this.time = e; + break A + } + e = 0 + } else + e = t; + this.clampWhenFinished ? this.paused = !0 : this.enabled = !1, + this.time = e, + this._mixer.dispatchEvent({ + type: "finished", + action: this, + direction: 0 > A ? -1 : 1 + }) + } + } else { + if (-1 === o && (0 > A ? this._setEndings(0 === this.repetitions, !0, n) : (o = 0, + this._setEndings(!0, 0 === this.repetitions, n))), + e >= t || 0 > e) { + var r = Math.floor(e / t); + e -= t * r, + o += Math.abs(r); + var a = this.repetitions - o; + if (0 < a) { + if (1 === a) { + var s = 0 > A; + this._setEndings(s, !s, n) + } else + this._setEndings(!1, !1, n); + this._loopCount = o, + this.time = e, + this._mixer.dispatchEvent({ + type: "loop", + action: this, + loopDelta: r + }) + } else + this.clampWhenFinished ? this.paused = !0 : this.enabled = !1, + this.time = e = A > 0 ? t : 0, + this._mixer.dispatchEvent({ + type: "finished", + action: this, + direction: A > 0 ? 1 : -1 + }) + } else + this.time = e; + if (n && 1 == (1 & o)) + return t - e + } + return e + }, + _setEndings: function(A, e, t) { + var i = this._interpolantSettings; + t ? (i.endingStart = 2401, + i.endingEnd = 2401) : (i.endingStart = A ? this.zeroSlopeAtStart ? 2401 : 2400 : 2402, + i.endingEnd = e ? this.zeroSlopeAtEnd ? 2401 : 2400 : 2402) + }, + _scheduleFading: function(A, e, t) { + var i = this._mixer + , o = i.time + , n = this._weightInterpolant; + null === n && (n = i._lendControlInterpolant(), + this._weightInterpolant = n); + var r = n.parameterPositions + , a = n.sampleValues; + return r[0] = o, + a[0] = e, + r[1] = o + A, + a[1] = t, + this + } + }), + Rs.prototype = Object.assign(Object.create(i.prototype), { + constructor: Rs, + _bindAction: function(A, e) { + var t = A._localRoot || this._root + , i = A._clip.tracks + , o = i.length + , n = A._propertyBindings + , r = A._interpolants + , a = t.uuid + , s = this._bindingsByRootAndName + , l = s[a]; + void 0 === l && (s[a] = l = {}); + for (var c = 0; c !== o; ++c) { + var h = i[c] + , d = h.name + , p = l[d]; + if (void 0 !== p) + n[c] = p; + else { + if (void 0 !== (p = n[c])) { + null === p._cacheIndex && (++p.referenceCount, + this._addInactiveBinding(p, a, d)); + continue + } + ++(p = new vs(Fs.create(t, d, e && e._propertyBindings[c].binding.parsedPath),h.ValueTypeName,h.getValueSize())).referenceCount, + this._addInactiveBinding(p, a, d), + n[c] = p + } + r[c].resultBuffer = p.buffer + } + }, + _activateAction: function(A) { + if (!this._isActiveAction(A)) { + if (null === A._cacheIndex) { + var e = (A._localRoot || this._root).uuid + , t = A._clip.uuid + , i = this._actionsByClip[t]; + this._bindAction(A, i && i.knownActions[0]), + this._addInactiveAction(A, t, e) + } + for (var o = A._propertyBindings, n = 0, r = o.length; n !== r; ++n) { + var a = o[n]; + 0 == a.useCount++ && (this._lendBinding(a), + a.saveOriginalState()) + } + this._lendAction(A) + } + }, + _deactivateAction: function(A) { + if (this._isActiveAction(A)) { + for (var e = A._propertyBindings, t = 0, i = e.length; t !== i; ++t) { + var o = e[t]; + 0 == --o.useCount && (o.restoreOriginalState(), + this._takeBackBinding(o)) + } + this._takeBackAction(A) + } + }, + _initMemoryManager: function() { + this._actions = [], + this._nActiveActions = 0, + this._actionsByClip = {}, + this._bindings = [], + this._nActiveBindings = 0, + this._bindingsByRootAndName = {}, + this._controlInterpolants = [], + this._nActiveControlInterpolants = 0; + var A = this; + this.stats = { + actions: { + get total() { + return A._actions.length + }, + get inUse() { + return A._nActiveActions + } + }, + bindings: { + get total() { + return A._bindings.length + }, + get inUse() { + return A._nActiveBindings + } + }, + controlInterpolants: { + get total() { + return A._controlInterpolants.length + }, + get inUse() { + return A._nActiveControlInterpolants + } + } + } + }, + _isActiveAction: function(A) { + var e = A._cacheIndex; + return null !== e && this._nActiveActions > e + }, + _addInactiveAction: function(A, e, t) { + var i = this._actions + , o = this._actionsByClip + , n = o[e]; + if (void 0 === n) + n = { + knownActions: [A], + actionByRoot: {} + }, + A._byClipCacheIndex = 0, + o[e] = n; + else { + var r = n.knownActions; + A._byClipCacheIndex = r.length, + r.push(A) + } + A._cacheIndex = i.length, + i.push(A), + n.actionByRoot[t] = A + }, + _removeInactiveAction: function(A) { + var e = this._actions + , t = e[e.length - 1] + , i = A._cacheIndex; + t._cacheIndex = i, + e[i] = t, + e.pop(), + A._cacheIndex = null; + var o = A._clip.uuid + , n = this._actionsByClip + , r = n[o] + , a = r.knownActions + , s = a[a.length - 1] + , l = A._byClipCacheIndex; + s._byClipCacheIndex = l, + a[l] = s, + a.pop(), + A._byClipCacheIndex = null, + delete r.actionByRoot[(A._localRoot || this._root).uuid], + 0 === a.length && delete n[o], + this._removeInactiveBindingsForAction(A) + }, + _removeInactiveBindingsForAction: function(A) { + for (var e = A._propertyBindings, t = 0, i = e.length; t !== i; ++t) { + var o = e[t]; + 0 == --o.referenceCount && this._removeInactiveBinding(o) + } + }, + _lendAction: function(A) { + var e = this._actions + , t = A._cacheIndex + , i = this._nActiveActions++ + , o = e[i]; + A._cacheIndex = i, + e[i] = A, + o._cacheIndex = t, + e[t] = o + }, + _takeBackAction: function(A) { + var e = this._actions + , t = A._cacheIndex + , i = --this._nActiveActions + , o = e[i]; + A._cacheIndex = i, + e[i] = A, + o._cacheIndex = t, + e[t] = o + }, + _addInactiveBinding: function(A, e, t) { + var i = this._bindingsByRootAndName + , o = i[e] + , n = this._bindings; + void 0 === o && (i[e] = o = {}), + o[t] = A, + A._cacheIndex = n.length, + n.push(A) + }, + _removeInactiveBinding: function(A) { + var e = this._bindings + , t = A.binding + , i = t.rootNode.uuid + , o = t.path + , n = this._bindingsByRootAndName + , r = n[i] + , a = e[e.length - 1] + , s = A._cacheIndex; + a._cacheIndex = s, + e[s] = a, + e.pop(), + delete r[o], + 0 === Object.keys(r).length && delete n[i] + }, + _lendBinding: function(A) { + var e = this._bindings + , t = A._cacheIndex + , i = this._nActiveBindings++ + , o = e[i]; + A._cacheIndex = i, + e[i] = A, + o._cacheIndex = t, + e[t] = o + }, + _takeBackBinding: function(A) { + var e = this._bindings + , t = A._cacheIndex + , i = --this._nActiveBindings + , o = e[i]; + A._cacheIndex = i, + e[i] = A, + o._cacheIndex = t, + e[t] = o + }, + _lendControlInterpolant: function() { + var A = this._controlInterpolants + , e = this._nActiveControlInterpolants++ + , t = A[e]; + return void 0 === t && ((t = new Kr(new Float32Array(2),new Float32Array(2),1,this._controlInterpolantsResultBuffer)).__cacheIndex = e, + A[e] = t), + t + }, + _takeBackControlInterpolant: function(A) { + var e = this._controlInterpolants + , t = A.__cacheIndex + , i = --this._nActiveControlInterpolants + , o = e[i]; + A.__cacheIndex = i, + e[i] = A, + o.__cacheIndex = t, + e[t] = o + }, + _controlInterpolantsResultBuffer: new Float32Array(1), + clipAction: function(A, e) { + var t = e || this._root + , i = t.uuid + , o = "string" == typeof A ? Gr.findByName(t, A) : A + , n = null !== o ? o.uuid : A + , r = this._actionsByClip[n] + , a = null; + if (void 0 !== r) { + var s = r.actionByRoot[i]; + if (void 0 !== s) + return s; + a = r.knownActions[0], + null === o && (o = a._clip) + } + if (null === o) + return null; + var l = new Qs(this,o,e); + return this._bindAction(l, a), + this._addInactiveAction(l, n, i), + l + }, + existingAction: function(A, e) { + var t = e || this._root + , i = t.uuid + , o = "string" == typeof A ? Gr.findByName(t, A) : A + , n = this._actionsByClip[o ? o.uuid : A]; + return void 0 !== n && n.actionByRoot[i] || null + }, + stopAllAction: function() { + var A = this._actions + , e = this._nActiveActions + , t = this._bindings + , i = this._nActiveBindings; + this._nActiveActions = 0, + this._nActiveBindings = 0; + for (var o = 0; o !== e; ++o) + A[o].reset(); + for (o = 0; o !== i; ++o) + t[o].useCount = 0; + return this + }, + update: function(A) { + for (var e = this._actions, t = this._nActiveActions, i = this.time += A *= this.timeScale, o = Math.sign(A), n = this._accuIndex ^= 1, r = 0; r !== t; ++r) { + e[r]._update(i, A, o, n) + } + var a = this._bindings + , s = this._nActiveBindings; + for (r = 0; r !== s; ++r) + a[r].apply(n); + return this + }, + setTime: function(A) { + this.time = 0; + for (var e = 0; this._actions.length > e; e++) + this._actions[e].time = 0; + return this.update(A) + }, + getRoot: function() { + return this._root + }, + uncacheClip: function(A) { + var e = this._actions + , t = A.uuid + , i = this._actionsByClip + , o = i[t]; + if (void 0 !== o) { + for (var n = o.knownActions, r = 0, a = n.length; r !== a; ++r) { + var s = n[r]; + this._deactivateAction(s); + var l = s._cacheIndex + , c = e[e.length - 1]; + s._cacheIndex = null, + s._byClipCacheIndex = null, + c._cacheIndex = l, + e[l] = c, + e.pop(), + this._removeInactiveBindingsForAction(s) + } + delete i[t] + } + }, + uncacheRoot: function(A) { + var e = A.uuid + , t = this._actionsByClip; + for (var i in t) { + var o = t[i].actionByRoot[e]; + void 0 !== o && (this._deactivateAction(o), + this._removeInactiveAction(o)) + } + var n = this._bindingsByRootAndName[e]; + if (void 0 !== n) + for (var r in n) { + var a = n[r]; + a.restoreOriginalState(), + this._removeInactiveBinding(a) + } + }, + uncacheAction: function(A, e) { + var t = this.existingAction(A, e); + null !== t && (this._deactivateAction(t), + this._removeInactiveAction(t)) + } + }), + Ts.prototype.clone = function() { + return new Ts(void 0 === this.value.clone ? this.value : this.value.clone()) + } + , + ks.prototype = Object.assign(Object.create(to.prototype), { + constructor: ks, + isInstancedInterleavedBuffer: !0, + copy: function(A) { + return to.prototype.copy.call(this, A), + this.meshPerAttribute = A.meshPerAttribute, + this + } + }), + Object.assign(Ds.prototype, { + set: function(A, e) { + this.ray.set(A, e) + }, + setFromCamera: function(A, e) { + e && e.isPerspectiveCamera ? (this.ray.origin.setFromMatrixPosition(e.matrixWorld), + this.ray.direction.set(A.x, A.y, .5).unproject(e).sub(this.ray.origin).normalize(), + this.camera = e) : e && e.isOrthographicCamera ? (this.ray.origin.set(A.x, A.y, (e.near + e.far) / (e.near - e.far)).unproject(e), + this.ray.direction.set(0, 0, -1).transformDirection(e.matrixWorld), + this.camera = e) : console.error("THREE.Raycaster: Unsupported camera type.") + }, + intersectObject: function(A, e, t) { + var i = t || []; + return Ns(A, this, i, e), + i.sort(Ls), + i + }, + intersectObjects: function(A, e, t) { + var i = t || []; + if (!1 === Array.isArray(A)) + return console.warn("THREE.Raycaster.intersectObjects: objects is not an Array."), + i; + for (var o = 0, n = A.length; n > o; o++) + Ns(A[o], this, i, e); + return i.sort(Ls), + i + } + }), + Object.assign(Os.prototype, { + set: function(A, e, t) { + return this.radius = A, + this.phi = e, + this.theta = t, + this + }, + clone: function() { + return (new this.constructor).copy(this) + }, + copy: function(A) { + return this.radius = A.radius, + this.phi = A.phi, + this.theta = A.theta, + this + }, + makeSafe: function() { + return this.phi = Math.max(1e-6, Math.min(Math.PI - 1e-6, this.phi)), + this + }, + setFromVector3: function(A) { + return this.setFromCartesianCoords(A.x, A.y, A.z) + }, + setFromCartesianCoords: function(A, e, t) { + return this.radius = Math.sqrt(A * A + e * e + t * t), + 0 === this.radius ? (this.theta = 0, + this.phi = 0) : (this.theta = Math.atan2(A, t), + this.phi = Math.acos(a.clamp(e / this.radius, -1, 1))), + this + } + }), + Object.assign(Vs.prototype, { + set: function(A, e, t) { + return this.radius = A, + this.theta = e, + this.y = t, + this + }, + clone: function() { + return (new this.constructor).copy(this) + }, + copy: function(A) { + return this.radius = A.radius, + this.theta = A.theta, + this.y = A.y, + this + }, + setFromVector3: function(A) { + return this.setFromCartesianCoords(A.x, A.y, A.z) + }, + setFromCartesianCoords: function(A, e, t) { + return this.radius = Math.sqrt(A * A + t * t), + this.theta = Math.atan2(A, t), + this.y = e, + this + } + }); + var Gs = new s; + function Ps(A, e) { + this.min = void 0 !== A ? A : new s(1 / 0,1 / 0), + this.max = void 0 !== e ? e : new s(-1 / 0,-1 / 0) + } + Object.assign(Ps.prototype, { + set: function(A, e) { + return this.min.copy(A), + this.max.copy(e), + this + }, + setFromPoints: function(A) { + this.makeEmpty(); + for (var e = 0, t = A.length; t > e; e++) + this.expandByPoint(A[e]); + return this + }, + setFromCenterAndSize: function(A, e) { + var t = Gs.copy(e).multiplyScalar(.5); + return this.min.copy(A).sub(t), + this.max.copy(A).add(t), + this + }, + clone: function() { + return (new this.constructor).copy(this) + }, + copy: function(A) { + return this.min.copy(A.min), + this.max.copy(A.max), + this + }, + makeEmpty: function() { + return this.min.x = this.min.y = 1 / 0, + this.max.x = this.max.y = -1 / 0, + this + }, + isEmpty: function() { + return this.min.x > this.max.x || this.min.y > this.max.y + }, + getCenter: function(A) { + return void 0 === A && (console.warn("THREE.Box2: .getCenter() target is now required"), + A = new s), + this.isEmpty() ? A.set(0, 0) : A.addVectors(this.min, this.max).multiplyScalar(.5) + }, + getSize: function(A) { + return void 0 === A && (console.warn("THREE.Box2: .getSize() target is now required"), + A = new s), + this.isEmpty() ? A.set(0, 0) : A.subVectors(this.max, this.min) + }, + expandByPoint: function(A) { + return this.min.min(A), + this.max.max(A), + this + }, + expandByVector: function(A) { + return this.min.sub(A), + this.max.add(A), + this + }, + expandByScalar: function(A) { + return this.min.addScalar(-A), + this.max.addScalar(A), + this + }, + containsPoint: function(A) { + return !(this.min.x > A.x || A.x > this.max.x || this.min.y > A.y || A.y > this.max.y) + }, + containsBox: function(A) { + return !(this.min.x > A.min.x || A.max.x > this.max.x || this.min.y > A.min.y || A.max.y > this.max.y) + }, + getParameter: function(A, e) { + return void 0 === e && (console.warn("THREE.Box2: .getParameter() target is now required"), + e = new s), + e.set((A.x - this.min.x) / (this.max.x - this.min.x), (A.y - this.min.y) / (this.max.y - this.min.y)) + }, + intersectsBox: function(A) { + return !(this.min.x > A.max.x || A.min.x > this.max.x || this.min.y > A.max.y || A.min.y > this.max.y) + }, + clampPoint: function(A, e) { + return void 0 === e && (console.warn("THREE.Box2: .clampPoint() target is now required"), + e = new s), + e.copy(A).clamp(this.min, this.max) + }, + distanceToPoint: function(A) { + return Gs.copy(A).clamp(this.min, this.max).sub(A).length() + }, + intersect: function(A) { + return this.min.max(A.min), + this.max.min(A.max), + this + }, + union: function(A) { + return this.min.min(A.min), + this.max.max(A.max), + this + }, + translate: function(A) { + return this.min.add(A), + this.max.add(A), + this + }, + equals: function(A) { + return A.min.equals(this.min) && A.max.equals(this.max) + } + }); + var qs = new y + , js = new y; + function Hs(A, e) { + this.start = void 0 !== A ? A : new y, + this.end = void 0 !== e ? e : new y + } + function Ys(A) { + H.call(this), + this.material = A, + this.render = function() {} + } + Object.assign(Hs.prototype, { + set: function(A, e) { + return this.start.copy(A), + this.end.copy(e), + this + }, + clone: function() { + return (new this.constructor).copy(this) + }, + copy: function(A) { + return this.start.copy(A.start), + this.end.copy(A.end), + this + }, + getCenter: function(A) { + return void 0 === A && (console.warn("THREE.Line3: .getCenter() target is now required"), + A = new y), + A.addVectors(this.start, this.end).multiplyScalar(.5) + }, + delta: function(A) { + return void 0 === A && (console.warn("THREE.Line3: .delta() target is now required"), + A = new y), + A.subVectors(this.end, this.start) + }, + distanceSq: function() { + return this.start.distanceToSquared(this.end) + }, + distance: function() { + return this.start.distanceTo(this.end) + }, + at: function(A, e) { + return void 0 === e && (console.warn("THREE.Line3: .at() target is now required"), + e = new y), + this.delta(e).multiplyScalar(A).add(this.start) + }, + closestPointToPointParameter: function(A, e) { + qs.subVectors(A, this.start), + js.subVectors(this.end, this.start); + var t = js.dot(js) + , i = js.dot(qs) / t; + return e && (i = a.clamp(i, 0, 1)), + i + }, + closestPointToPoint: function(A, e, t) { + var i = this.closestPointToPointParameter(A, e); + return void 0 === t && (console.warn("THREE.Line3: .closestPointToPoint() target is now required"), + t = new y), + this.delta(t).multiplyScalar(i).add(this.start) + }, + applyMatrix4: function(A) { + return this.start.applyMatrix4(A), + this.end.applyMatrix4(A), + this + }, + equals: function(A) { + return A.start.equals(this.start) && A.end.equals(this.end) + } + }), + (Ys.prototype = Object.create(H.prototype)).constructor = Ys, + Ys.prototype.isImmediateRenderObject = !0; + var Ws = new y; + function Js(A, e) { + H.call(this), + this.light = A, + this.light.updateMatrixWorld(), + this.matrix = A.matrixWorld, + this.matrixAutoUpdate = !1, + this.color = e; + for (var t = new he, i = [0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, -1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, -1, 1], o = 0, n = 1; 32 > o; o++, + n++) { + var r = o / 32 * Math.PI * 2 + , a = n / 32 * Math.PI * 2; + i.push(Math.cos(r), Math.sin(r), 1, Math.cos(a), Math.sin(a), 1) + } + t.setAttribute("position", new Ae(i,3)); + var s = new ko({ + fog: !1, + toneMapped: !1 + }); + this.cone = new jo(t,s), + this.add(this.cone), + this.update() + } + (Js.prototype = Object.create(H.prototype)).constructor = Js, + Js.prototype.dispose = function() { + this.cone.geometry.dispose(), + this.cone.material.dispose() + } + , + Js.prototype.update = function() { + this.light.updateMatrixWorld(); + var A = this.light.distance ? this.light.distance : 1e3 + , e = A * Math.tan(this.light.angle); + this.cone.scale.set(e, e, A), + Ws.setFromMatrixPosition(this.light.target.matrixWorld), + this.cone.lookAt(Ws), + void 0 !== this.color ? this.cone.material.color.set(this.color) : this.cone.material.color.copy(this.light.color) + } + ; + var zs = new y + , Zs = new M + , Xs = new M; + function _s(A) { + for (var e = function A(e) { + var t = []; + e && e.isBone && t.push(e); + for (var i = 0; e.children.length > i; i++) + t.push.apply(t, A(e.children[i])); + return t + }(A), t = new he, i = [], o = [], n = new LA(0,0,1), r = new LA(0,1,0), a = 0; e.length > a; a++) { + var s = e[a]; + s.parent && s.parent.isBone && (i.push(0, 0, 0), + i.push(0, 0, 0), + o.push(n.r, n.g, n.b), + o.push(r.r, r.g, r.b)) + } + t.setAttribute("position", new Ae(i,3)), + t.setAttribute("color", new Ae(o,3)); + var l = new ko({ + vertexColors: !0, + depthTest: !1, + depthWrite: !1, + toneMapped: !1, + transparent: !0 + }); + jo.call(this, t, l), + this.root = A, + this.bones = e, + this.matrix = A.matrixWorld, + this.matrixAutoUpdate = !1 + } + function $s(A, e, t) { + this.light = A, + this.light.updateMatrixWorld(), + this.color = t; + var i = new er(e,4,2) + , o = new jA({ + wireframe: !0, + fog: !1, + toneMapped: !1 + }); + Ue.call(this, i, o), + this.matrix = this.light.matrixWorld, + this.matrixAutoUpdate = !1, + this.update() + } + (_s.prototype = Object.create(jo.prototype)).constructor = _s, + _s.prototype.isSkeletonHelper = !0, + _s.prototype.updateMatrixWorld = function(A) { + var e = this.bones + , t = this.geometry + , i = t.getAttribute("position"); + Xs.getInverse(this.root.matrixWorld); + for (var o = 0, n = 0; e.length > o; o++) { + var r = e[o]; + r.parent && r.parent.isBone && (Zs.multiplyMatrices(Xs, r.matrixWorld), + zs.setFromMatrixPosition(Zs), + i.setXYZ(n, zs.x, zs.y, zs.z), + Zs.multiplyMatrices(Xs, r.parent.matrixWorld), + zs.setFromMatrixPosition(Zs), + i.setXYZ(n + 1, zs.x, zs.y, zs.z), + n += 2) + } + t.getAttribute("position").needsUpdate = !0, + H.prototype.updateMatrixWorld.call(this, A) + } + , + ($s.prototype = Object.create(Ue.prototype)).constructor = $s, + $s.prototype.dispose = function() { + this.geometry.dispose(), + this.material.dispose() + } + , + $s.prototype.update = function() { + void 0 !== this.color ? this.material.color.set(this.color) : this.material.color.copy(this.light.color) + } + ; + var Al = new y + , el = new LA + , tl = new LA; + function il(A, e, t) { + H.call(this), + this.light = A, + this.light.updateMatrixWorld(), + this.matrix = A.matrixWorld, + this.matrixAutoUpdate = !1, + this.color = t; + var i = new dn(e); + i.rotateY(.5 * Math.PI), + this.material = new jA({ + wireframe: !0, + fog: !1, + toneMapped: !1 + }), + void 0 === this.color && (this.material.vertexColors = !0); + var o = i.getAttribute("position") + , n = new Float32Array(3 * o.count); + i.setAttribute("color", new YA(n,3)), + this.add(new Ue(i,this.material)), + this.update() + } + function ol(A, e, t, i) { + A = A || 10, + e = e || 10, + t = new LA(void 0 !== t ? t : 4473924), + i = new LA(void 0 !== i ? i : 8947848); + for (var o = e / 2, n = A / e, r = A / 2, a = [], s = [], l = 0, c = 0, h = -r; e >= l; l++, + h += n) { + a.push(-r, 0, h, r, 0, h), + a.push(h, 0, -r, h, 0, r); + var d = l === o ? t : i; + d.toArray(s, c), + d.toArray(s, c += 3), + d.toArray(s, c += 3), + d.toArray(s, c += 3), + c += 3 + } + var p = new he; + p.setAttribute("position", new Ae(a,3)), + p.setAttribute("color", new Ae(s,3)); + var g = new ko({ + vertexColors: !0, + toneMapped: !1 + }); + jo.call(this, p, g) + } + function nl(A, e, t, i, o, n) { + A = A || 10, + e = e || 16, + t = t || 8, + i = i || 64, + o = new LA(void 0 !== o ? o : 4473924), + n = new LA(void 0 !== n ? n : 8947848); + var r, a, s, l, c, h, d, p = [], g = []; + for (l = 0; e >= l; l++) + s = l / e * (2 * Math.PI), + r = Math.sin(s) * A, + a = Math.cos(s) * A, + p.push(0, 0, 0), + p.push(r, 0, a), + g.push((d = 1 & l ? o : n).r, d.g, d.b), + g.push(d.r, d.g, d.b); + for (l = 0; t >= l; l++) + for (d = 1 & l ? o : n, + h = A - A / t * l, + c = 0; i > c; c++) + s = c / i * (2 * Math.PI), + r = Math.sin(s) * h, + a = Math.cos(s) * h, + p.push(r, 0, a), + g.push(d.r, d.g, d.b), + s = (c + 1) / i * (2 * Math.PI), + r = Math.sin(s) * h, + a = Math.cos(s) * h, + p.push(r, 0, a), + g.push(d.r, d.g, d.b); + var u = new he; + u.setAttribute("position", new Ae(p,3)), + u.setAttribute("color", new Ae(g,3)); + var f = new ko({ + vertexColors: !0, + toneMapped: !1 + }); + jo.call(this, u, f) + } + (il.prototype = Object.create(H.prototype)).constructor = il, + il.prototype.dispose = function() { + this.children[0].geometry.dispose(), + this.children[0].material.dispose() + } + , + il.prototype.update = function() { + var A = this.children[0]; + if (void 0 !== this.color) + this.material.color.set(this.color); + else { + var e = A.geometry.getAttribute("color"); + el.copy(this.light.color), + tl.copy(this.light.groundColor); + for (var t = 0, i = e.count; i > t; t++) { + var o = i / 2 > t ? el : tl; + e.setXYZ(t, o.r, o.g, o.b) + } + e.needsUpdate = !0 + } + A.lookAt(Al.setFromMatrixPosition(this.light.matrixWorld).negate()) + } + , + ol.prototype = Object.assign(Object.create(jo.prototype), { + constructor: ol, + copy: function(A) { + return jo.prototype.copy.call(this, A), + this.geometry.copy(A.geometry), + this.material.copy(A.material), + this + }, + clone: function() { + return (new this.constructor).copy(this) + } + }), + (nl.prototype = Object.create(jo.prototype)).constructor = nl; + var rl = new y + , al = new y + , sl = new y; + function ll(A, e, t) { + H.call(this), + this.light = A, + this.light.updateMatrixWorld(), + this.matrix = A.matrixWorld, + this.matrixAutoUpdate = !1, + this.color = t, + void 0 === e && (e = 1); + var i = new he; + i.setAttribute("position", new Ae([-e, e, 0, e, e, 0, e, -e, 0, -e, -e, 0, -e, e, 0],3)); + var o = new ko({ + fog: !1, + toneMapped: !1 + }); + this.lightPlane = new Go(i,o), + this.add(this.lightPlane), + (i = new he).setAttribute("position", new Ae([0, 0, 0, 0, 0, 1],3)), + this.targetLine = new Go(i,o), + this.add(this.targetLine), + this.update() + } + (ll.prototype = Object.create(H.prototype)).constructor = ll, + ll.prototype.dispose = function() { + this.lightPlane.geometry.dispose(), + this.lightPlane.material.dispose(), + this.targetLine.geometry.dispose(), + this.targetLine.material.dispose() + } + , + ll.prototype.update = function() { + rl.setFromMatrixPosition(this.light.matrixWorld), + al.setFromMatrixPosition(this.light.target.matrixWorld), + sl.subVectors(al, rl), + this.lightPlane.lookAt(al), + void 0 !== this.color ? (this.lightPlane.material.color.set(this.color), + this.targetLine.material.color.set(this.color)) : (this.lightPlane.material.color.copy(this.light.color), + this.targetLine.material.color.copy(this.light.color)), + this.targetLine.lookAt(al), + this.targetLine.scale.z = sl.length() + } + ; + var cl = new y + , hl = new qe; + function dl(A) { + var e = new he + , t = new ko({ + color: 16777215, + vertexColors: !0, + toneMapped: !1 + }) + , i = [] + , o = [] + , n = {} + , r = new LA(16755200) + , a = new LA(16711680) + , s = new LA(43775) + , l = new LA(16777215) + , c = new LA(3355443); + function h(A, e, t) { + d(A, t), + d(e, t) + } + function d(A, e) { + i.push(0, 0, 0), + o.push(e.r, e.g, e.b), + void 0 === n[A] && (n[A] = []), + n[A].push(i.length / 3 - 1) + } + h("n1", "n2", r), + h("n2", "n4", r), + h("n4", "n3", r), + h("n3", "n1", r), + h("f1", "f2", r), + h("f2", "f4", r), + h("f4", "f3", r), + h("f3", "f1", r), + h("n1", "f1", r), + h("n2", "f2", r), + h("n3", "f3", r), + h("n4", "f4", r), + h("p", "n1", a), + h("p", "n2", a), + h("p", "n3", a), + h("p", "n4", a), + h("u1", "u2", s), + h("u2", "u3", s), + h("u3", "u1", s), + h("c", "t", l), + h("p", "c", c), + h("cn1", "cn2", c), + h("cn3", "cn4", c), + h("cf1", "cf2", c), + h("cf3", "cf4", c), + e.setAttribute("position", new Ae(i,3)), + e.setAttribute("color", new Ae(o,3)), + jo.call(this, e, t), + this.camera = A, + this.camera.updateProjectionMatrix && this.camera.updateProjectionMatrix(), + this.matrix = A.matrixWorld, + this.matrixAutoUpdate = !1, + this.pointMap = n, + this.update() + } + function pl(A, e, t, i, o, n, r) { + cl.set(o, n, r).unproject(i); + var a = e[A]; + if (void 0 !== a) + for (var s = t.getAttribute("position"), l = 0, c = a.length; c > l; l++) + s.setXYZ(a[l], cl.x, cl.y, cl.z) + } + (dl.prototype = Object.create(jo.prototype)).constructor = dl, + dl.prototype.update = function() { + var A = this.geometry + , e = this.pointMap; + hl.projectionMatrixInverse.copy(this.camera.projectionMatrixInverse), + pl("c", e, A, hl, 0, 0, -1), + pl("t", e, A, hl, 0, 0, 1), + pl("n1", e, A, hl, -1, -1, -1), + pl("n2", e, A, hl, 1, -1, -1), + pl("n3", e, A, hl, -1, 1, -1), + pl("n4", e, A, hl, 1, 1, -1), + pl("f1", e, A, hl, -1, -1, 1), + pl("f2", e, A, hl, 1, -1, 1), + pl("f3", e, A, hl, -1, 1, 1), + pl("f4", e, A, hl, 1, 1, 1), + pl("u1", e, A, hl, .7, 1.1, -1), + pl("u2", e, A, hl, -.7, 1.1, -1), + pl("u3", e, A, hl, 0, 2, -1), + pl("cf1", e, A, hl, -1, 0, 1), + pl("cf2", e, A, hl, 1, 0, 1), + pl("cf3", e, A, hl, 0, -1, 1), + pl("cf4", e, A, hl, 0, 1, 1), + pl("cn1", e, A, hl, -1, 0, -1), + pl("cn2", e, A, hl, 1, 0, -1), + pl("cn3", e, A, hl, 0, -1, -1), + pl("cn4", e, A, hl, 0, 1, -1), + A.getAttribute("position").needsUpdate = !0 + } + ; + var gl = new aA; + function ul(A, e) { + this.object = A, + void 0 === e && (e = 16776960); + var t = new Uint16Array([0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7]) + , i = new Float32Array(24) + , o = new he; + o.setIndex(new YA(t,1)), + o.setAttribute("position", new YA(i,3)), + jo.call(this, o, new ko({ + color: e, + toneMapped: !1 + })), + this.matrixAutoUpdate = !1, + this.update() + } + function fl(A, e) { + this.type = "Box3Helper", + this.box = A, + e = e || 16776960; + var t = new Uint16Array([0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7]) + , i = new he; + i.setIndex(new YA(t,1)), + i.setAttribute("position", new Ae([1, 1, 1, -1, 1, 1, -1, -1, 1, 1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, -1, 1, -1, -1],3)), + jo.call(this, i, new ko({ + color: e, + toneMapped: !1 + })), + this.geometry.computeBoundingSphere() + } + function ml(A, e, t) { + this.type = "PlaneHelper", + this.plane = A, + this.size = void 0 === e ? 1 : e; + var i = void 0 !== t ? t : 16776960 + , o = new he; + o.setAttribute("position", new Ae([1, -1, 1, -1, 1, 1, -1, -1, 1, 1, 1, 1, -1, 1, 1, -1, -1, 1, 1, -1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0],3)), + o.computeBoundingSphere(), + Go.call(this, o, new ko({ + color: i, + toneMapped: !1 + })); + var n = new he; + n.setAttribute("position", new Ae([1, 1, 1, -1, 1, 1, -1, -1, 1, 1, 1, 1, -1, -1, 1, 1, -1, 1],3)), + n.computeBoundingSphere(), + this.add(new Ue(n,new jA({ + color: i, + opacity: .2, + transparent: !0, + depthWrite: !1, + toneMapped: !1 + }))) + } + (ul.prototype = Object.create(jo.prototype)).constructor = ul, + ul.prototype.update = function(A) { + if (void 0 !== A && console.warn("THREE.BoxHelper: .update() has no longer arguments."), + void 0 !== this.object && gl.setFromObject(this.object), + !gl.isEmpty()) { + var e = gl.min + , t = gl.max + , i = this.geometry.attributes.position + , o = i.array; + o[0] = t.x, + o[1] = t.y, + o[2] = t.z, + o[3] = e.x, + o[4] = t.y, + o[5] = t.z, + o[6] = e.x, + o[7] = e.y, + o[8] = t.z, + o[9] = t.x, + o[10] = e.y, + o[11] = t.z, + o[12] = t.x, + o[13] = t.y, + o[14] = e.z, + o[15] = e.x, + o[16] = t.y, + o[17] = e.z, + o[18] = e.x, + o[19] = e.y, + o[20] = e.z, + o[21] = t.x, + o[22] = e.y, + o[23] = e.z, + i.needsUpdate = !0, + this.geometry.computeBoundingSphere() + } + } + , + ul.prototype.setFromObject = function(A) { + return this.object = A, + this.update(), + this + } + , + ul.prototype.copy = function(A) { + return jo.prototype.copy.call(this, A), + this.object = A.object, + this + } + , + ul.prototype.clone = function() { + return (new this.constructor).copy(this) + } + , + (fl.prototype = Object.create(jo.prototype)).constructor = fl, + fl.prototype.updateMatrixWorld = function(A) { + var e = this.box; + e.isEmpty() || (e.getCenter(this.position), + e.getSize(this.scale), + this.scale.multiplyScalar(.5), + H.prototype.updateMatrixWorld.call(this, A)) + } + , + (ml.prototype = Object.create(Go.prototype)).constructor = ml, + ml.prototype.updateMatrixWorld = function(A) { + var e = -this.plane.constant; + 1e-8 > Math.abs(e) && (e = 1e-8), + this.scale.set(.5 * this.size, .5 * this.size, e), + this.children[0].material.side = 0 > e ? 1 : 0, + this.lookAt(this.plane.normal), + H.prototype.updateMatrixWorld.call(this, A) + } + ; + var Cl, yl, vl = new y; + function Il(A, e, t, i, o, n) { + H.call(this), + void 0 === A && (A = new y(0,0,1)), + void 0 === e && (e = new y(0,0,0)), + void 0 === t && (t = 1), + void 0 === i && (i = 16776960), + void 0 === o && (o = .2 * t), + void 0 === n && (n = .2 * o), + void 0 === Cl && ((Cl = new he).setAttribute("position", new Ae([0, 0, 0, 0, 1, 0],3)), + (yl = new hr(0,.5,1,5,1)).translate(0, -.5, 0)), + this.position.copy(e), + this.line = new Go(Cl,new ko({ + color: i, + toneMapped: !1 + })), + this.line.matrixAutoUpdate = !1, + this.add(this.line), + this.cone = new Ue(yl,new jA({ + color: i, + toneMapped: !1 + })), + this.cone.matrixAutoUpdate = !1, + this.add(this.cone), + this.setDirection(A), + this.setLength(t, o, n) + } + function El(A) { + var e = [0, 0, 0, A = A || 1, 0, 0, 0, 0, 0, 0, A, 0, 0, 0, 0, 0, 0, A] + , t = new he; + t.setAttribute("position", new Ae(e,3)), + t.setAttribute("color", new Ae([1, 0, 0, 1, .6, 0, 0, 1, 0, .6, 1, 0, 0, 0, 1, 0, .6, 1],3)); + var i = new ko({ + vertexColors: !0, + toneMapped: !1 + }); + jo.call(this, t, i) + } + (Il.prototype = Object.create(H.prototype)).constructor = Il, + Il.prototype.setDirection = function(A) { + if (A.y > .99999) + this.quaternion.set(0, 0, 0, 1); + else if (-.99999 > A.y) + this.quaternion.set(1, 0, 0, 0); + else { + vl.set(A.z, 0, -A.x).normalize(); + var e = Math.acos(A.y); + this.quaternion.setFromAxisAngle(vl, e) + } + } + , + Il.prototype.setLength = function(A, e, t) { + void 0 === e && (e = .2 * A), + void 0 === t && (t = .2 * e), + this.line.scale.set(1, Math.max(1e-4, A - e), 1), + this.line.updateMatrix(), + this.cone.scale.set(t, e, t), + this.cone.position.y = A, + this.cone.updateMatrix() + } + , + Il.prototype.setColor = function(A) { + this.line.material.color.set(A), + this.cone.material.color.set(A) + } + , + Il.prototype.copy = function(A) { + return H.prototype.copy.call(this, A, !1), + this.line.copy(A.line), + this.cone.copy(A.cone), + this + } + , + Il.prototype.clone = function() { + return (new this.constructor).copy(this) + } + , + (El.prototype = Object.create(jo.prototype)).constructor = El; + var Bl, xl, Sl, wl, Ml = Math.pow(2, 8), bl = [.125, .215, .35, .446, .526, .582], Ul = 5 + bl.length, Fl = { + 3e3: 0, + 3001: 1, + 3002: 2, + 3004: 3, + 3005: 4, + 3006: 5, + 3007: 6 + }, Kl = new Ka, Ql = (Bl = 20, + xl = new Float32Array(Bl), + Sl = new y(0,1,0), + (wl = new Cr({ + defines: { + n: Bl + }, + uniforms: { + envMap: { + value: null + }, + samples: { + value: 1 + }, + weights: { + value: xl + }, + latitudinal: { + value: !1 + }, + dTheta: { + value: 0 + }, + mipInt: { + value: 0 + }, + poleAxis: { + value: Sl + }, + inputEncoding: { + value: Fl[3e3] + }, + outputEncoding: { + value: Fl[3e3] + } + }, + vertexShader: ec(), + fragmentShader: `\nprecision mediump float;\nprecision mediump int;\nvarying vec3 vOutputDirection;\nuniform sampler2D envMap;\nuniform int samples;\nuniform float weights[n];\nuniform bool latitudinal;\nuniform float dTheta;\nuniform float mipInt;\nuniform vec3 poleAxis;\n\n${tc()}\n\n#define ENVMAP_TYPE_CUBE_UV\n#include \n\nvec3 getSample(float theta, vec3 axis) {\n\tfloat cosTheta = cos(theta);\n\t// Rodrigues' axis-angle rotation\n\tvec3 sampleDirection = vOutputDirection * cosTheta\n\t\t+ cross(axis, vOutputDirection) * sin(theta)\n\t\t+ axis * dot(axis, vOutputDirection) * (1.0 - cosTheta);\n\treturn bilinearCubeUV(envMap, sampleDirection, mipInt);\n}\n\nvoid main() {\n\tvec3 axis = latitudinal ? poleAxis : cross(poleAxis, vOutputDirection);\n\tif (all(equal(axis, vec3(0.0))))\n\t\taxis = vec3(vOutputDirection.z, 0.0, - vOutputDirection.x);\n\taxis = normalize(axis);\n\tgl_FragColor = vec4(0.0);\n\tgl_FragColor.rgb += weights[0] * getSample(0.0, axis);\n\tfor (int i = 1; i < n; i++) {\n\t\tif (i >= samples)\n\t\t\tbreak;\n\t\tfloat theta = dTheta * float(i);\n\t\tgl_FragColor.rgb += weights[i] * getSample(-1.0 * theta, axis);\n\t\tgl_FragColor.rgb += weights[i] * getSample(theta, axis);\n\t}\n\tgl_FragColor = linearToOutputTexel(gl_FragColor);\n}\n\t\t`, + blending: 0, + depthTest: !1, + depthWrite: !1 + })).type = "SphericalGaussianBlur", + wl), Rl = null, Tl = null, {_lodPlanes: kl, _sizeLods: Dl, _sigmas: Ll} = function() { + for (var A = [], e = [], t = [], i = 8, o = 0; Ul > o; o++) { + var n = Math.pow(2, i); + e.push(n); + var r = 1 / n; + o > 4 ? r = bl[o - 8 + 4 - 1] : 0 == o && (r = 0), + t.push(r); + for (var a = 1 / (n - 1), s = -a / 2, l = 1 + a / 2, c = [s, s, l, s, l, l, s, s, l, l, s, l], h = new Float32Array(108), d = new Float32Array(72), p = new Float32Array(36), g = 0; 6 > g; g++) { + var u = g % 3 * 2 / 3 - 1 + , f = g > 2 ? 0 : -1; + h.set([u, f, 0, u + 2 / 3, f, 0, u + 2 / 3, f + 1, 0, u, f, 0, u + 2 / 3, f + 1, 0, u, f + 1, 0], 18 * g), + d.set(c, 12 * g), + p.set([g, g, g, g, g, g], 6 * g) + } + var m = new he; + m.setAttribute("position", new YA(h,3)), + m.setAttribute("uv", new YA(d,2)), + m.setAttribute("faceIndex", new YA(p,1)), + A.push(m), + i > 4 && i-- + } + return { + _lodPlanes: A, + _sizeLods: e, + _sigmas: t + } + }(), Nl = null, Ol = null, Vl = null, Gl = (1 + Math.sqrt(5)) / 2, Pl = 1 / Gl, ql = [new y(1,1,1), new y(-1,1,1), new y(1,1,-1), new y(-1,1,-1), new y(0,Gl,Pl), new y(0,Gl,-Pl), new y(Pl,0,Gl), new y(-Pl,0,Gl), new y(Gl,Pl,0), new y(-Gl,Pl,0)]; + function jl(A) { + Ol = A, + Wl(Ql) + } + function Hl(A) { + var e = { + magFilter: 1003, + minFilter: 1003, + generateMipmaps: !1, + type: A ? A.type : 1009, + format: A ? A.format : 1023, + encoding: A ? A.encoding : 3002, + depthBuffer: !1, + stencilBuffer: !1 + } + , t = Jl(e); + return t.depthBuffer = !A, + Nl = Jl(e), + t + } + function Yl(A) { + Nl.dispose(), + Ol.setRenderTarget(Vl), + A.scissorTest = !1, + A.setSize(A.width, A.height) + } + function Wl(A) { + var e = new Y; + e.add(new Ue(kl[0],A)), + Ol.compile(e, Kl) + } + function Jl(A) { + var e = new g(3 * Ml,3 * Ml,A); + return e.texture.mapping = 306, + e.texture.name = "PMREM.cubeUv", + e.scissorTest = !0, + e + } + function zl(A, e, t, i, o) { + A.viewport.set(e, t, i, o), + A.scissor.set(e, t, i, o) + } + function Zl(A) { + var e = Ol.autoClear; + Ol.autoClear = !1; + for (var t = 1; Ul > t; t++) { + Xl(A, t - 1, t, Math.sqrt(Ll[t] * Ll[t] - Ll[t - 1] * Ll[t - 1]), ql[(t - 1) % ql.length]) + } + Ol.autoClear = e + } + function Xl(A, e, t, i, o) { + _l(A, Nl, e, t, i, "latitudinal", o), + _l(Nl, A, t, t, i, "longitudinal", o) + } + function _l(A, e, t, i, o, n, r) { + "latitudinal" !== n && "longitudinal" !== n && console.error("blur direction must be either latitudinal or longitudinal!"); + var a = new Y; + a.add(new Ue(kl[i],Ql)); + var s = Ql.uniforms + , l = Dl[t] - 1 + , c = isFinite(o) ? Math.PI / (2 * l) : 2 * Math.PI / 39 + , h = o / c + , d = isFinite(o) ? 1 + Math.floor(3 * h) : 20; + d > 20 && console.warn(`sigmaRadians, ${o}, is too large and will clip, as it requested ${d} samples when the maximum is set to 20`); + for (var p = [], g = 0, u = 0; 20 > u; ++u) { + var f = u / h + , m = Math.exp(-f * f / 2); + p.push(m), + 0 == u ? g += m : d > u && (g += 2 * m) + } + for (u = 0; p.length > u; u++) + p[u] = p[u] / g; + s.envMap.value = A.texture, + s.samples.value = d, + s.weights.value = p, + s.latitudinal.value = "latitudinal" === n, + r && (s.poleAxis.value = r), + s.dTheta.value = c, + s.mipInt.value = 8 - t, + s.inputEncoding.value = Fl[A.texture.encoding], + s.outputEncoding.value = Fl[A.texture.encoding]; + var C = Dl[i]; + zl(e, f = 3 * Math.max(0, Ml - 2 * C), (0 === i ? 0 : 2 * Ml) + 2 * C * (i > 4 ? i - 8 + 4 : 0), 3 * C, 2 * C), + Ol.setRenderTarget(e), + Ol.render(a, Kl) + } + function $l() { + var A = new Cr({ + uniforms: { + envMap: { + value: null + }, + texelSize: { + value: new s(1,1) + }, + inputEncoding: { + value: Fl[3e3] + }, + outputEncoding: { + value: Fl[3e3] + } + }, + vertexShader: ec(), + fragmentShader: `\nprecision mediump float;\nprecision mediump int;\nvarying vec3 vOutputDirection;\nuniform sampler2D envMap;\nuniform vec2 texelSize;\n\n${tc()}\n\n#define RECIPROCAL_PI 0.31830988618\n#define RECIPROCAL_PI2 0.15915494\n\nvoid main() {\n\tgl_FragColor = vec4(0.0);\n\tvec3 outputDirection = normalize(vOutputDirection);\n\tvec2 uv;\n\tuv.y = asin(clamp(outputDirection.y, -1.0, 1.0)) * RECIPROCAL_PI + 0.5;\n\tuv.x = atan(outputDirection.z, outputDirection.x) * RECIPROCAL_PI2 + 0.5;\n\tvec2 f = fract(uv / texelSize - 0.5);\n\tuv -= f * texelSize;\n\tvec3 tl = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n\tuv.x += texelSize.x;\n\tvec3 tr = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n\tuv.y += texelSize.y;\n\tvec3 br = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n\tuv.x -= texelSize.x;\n\tvec3 bl = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n\tvec3 tm = mix(tl, tr, f.x);\n\tvec3 bm = mix(bl, br, f.x);\n\tgl_FragColor.rgb = mix(tm, bm, f.y);\n\tgl_FragColor = linearToOutputTexel(gl_FragColor);\n}\n\t\t`, + blending: 0, + depthTest: !1, + depthWrite: !1 + }); + return A.type = "EquirectangularToCubeUV", + A + } + function Ac() { + var A = new Cr({ + uniforms: { + envMap: { + value: null + }, + inputEncoding: { + value: Fl[3e3] + }, + outputEncoding: { + value: Fl[3e3] + } + }, + vertexShader: ec(), + fragmentShader: `\nprecision mediump float;\nprecision mediump int;\nvarying vec3 vOutputDirection;\nuniform samplerCube envMap;\n\n${tc()}\n\nvoid main() {\n\tgl_FragColor = vec4(0.0);\n\tgl_FragColor.rgb = envMapTexelToLinear(textureCube(envMap, vec3( - vOutputDirection.x, vOutputDirection.yz ))).rgb;\n\tgl_FragColor = linearToOutputTexel(gl_FragColor);\n}\n\t\t`, + blending: 0, + depthTest: !1, + depthWrite: !1 + }); + return A.type = "CubemapToCubeUV", + A + } + function ec() { + return "\nprecision mediump float;\nprecision mediump int;\nattribute vec3 position;\nattribute vec2 uv;\nattribute float faceIndex;\nvarying vec3 vOutputDirection;\nvec3 getDirection(vec2 uv, float face) {\n\tuv = 2.0 * uv - 1.0;\n\tvec3 direction = vec3(uv, 1.0);\n\tif (face == 0.0) {\n\t\tdirection = direction.zyx;\n\t\tdirection.z *= -1.0;\n\t} else if (face == 1.0) {\n\t\tdirection = direction.xzy;\n\t\tdirection.z *= -1.0;\n\t} else if (face == 3.0) {\n\t\tdirection = direction.zyx;\n\t\tdirection.x *= -1.0;\n\t} else if (face == 4.0) {\n\t\tdirection = direction.xzy;\n\t\tdirection.y *= -1.0;\n\t} else if (face == 5.0) {\n\t\tdirection.xz *= -1.0;\n\t}\n\treturn direction;\n}\nvoid main() {\n\tvOutputDirection = getDirection(uv, faceIndex);\n\tgl_Position = vec4( position, 1.0 );\n}\n\t" + } + function tc() { + return "\nuniform int inputEncoding;\nuniform int outputEncoding;\n\n#include \n\nvec4 inputTexelToLinear(vec4 value){\n\tif(inputEncoding == 0){\n\t\treturn value;\n\t}else if(inputEncoding == 1){\n\t\treturn sRGBToLinear(value);\n\t}else if(inputEncoding == 2){\n\t\treturn RGBEToLinear(value);\n\t}else if(inputEncoding == 3){\n\t\treturn RGBMToLinear(value, 7.0);\n\t}else if(inputEncoding == 4){\n\t\treturn RGBMToLinear(value, 16.0);\n\t}else if(inputEncoding == 5){\n\t\treturn RGBDToLinear(value, 256.0);\n\t}else{\n\t\treturn GammaToLinear(value, 2.2);\n\t}\n}\n\nvec4 linearToOutputTexel(vec4 value){\n\tif(outputEncoding == 0){\n\t\treturn value;\n\t}else if(outputEncoding == 1){\n\t\treturn LinearTosRGB(value);\n\t}else if(outputEncoding == 2){\n\t\treturn LinearToRGBE(value);\n\t}else if(outputEncoding == 3){\n\t\treturn LinearToRGBM(value, 7.0);\n\t}else if(outputEncoding == 4){\n\t\treturn LinearToRGBM(value, 16.0);\n\t}else if(outputEncoding == 5){\n\t\treturn LinearToRGBD(value, 256.0);\n\t}else{\n\t\treturn LinearToGamma(value, 2.2);\n\t}\n}\n\nvec4 envMapTexelToLinear(vec4 color) {\n\treturn inputTexelToLinear(color);\n}\n\t" + } + jl.prototype = { + constructor: jl, + fromScene: function(A, e=0, t=.1, i=100) { + Vl = Ol.getRenderTarget(); + var o = Hl(); + return function(A, e, t, i) { + var o = new je(90,1,e,t) + , n = [1, 1, 1, 1, -1, 1] + , r = [1, 1, -1, -1, -1, 1] + , a = Ol.outputEncoding + , s = Ol.toneMapping + , l = Ol.toneMappingExposure + , c = Ol.getClearColor() + , h = Ol.getClearAlpha(); + Ol.toneMapping = 1, + Ol.toneMappingExposure = 1, + Ol.outputEncoding = 3e3, + A.scale.z *= -1; + var d = A.background; + if (d && d.isColor) { + d.convertSRGBToLinear(); + var p = Math.max(d.r, d.g, d.b) + , g = Math.min(Math.max(Math.ceil(Math.log2(p)), -128), 127); + d = d.multiplyScalar(Math.pow(2, -g)), + Ol.setClearColor(d, (g + 128) / 255), + A.background = null + } + for (var u = 0; 6 > u; u++) { + var f = u % 3; + 0 == f ? (o.up.set(0, n[u], 0), + o.lookAt(r[u], 0, 0)) : 1 == f ? (o.up.set(0, 0, n[u]), + o.lookAt(0, r[u], 0)) : (o.up.set(0, n[u], 0), + o.lookAt(0, 0, r[u])), + zl(i, f * Ml, u > 2 ? Ml : 0, Ml, Ml), + Ol.setRenderTarget(i), + Ol.render(A, o) + } + Ol.toneMapping = s, + Ol.toneMappingExposure = l, + Ol.outputEncoding = a, + Ol.setClearColor(c, h), + A.scale.z *= -1 + }(A, t, i, o), + e > 0 && Xl(o, 0, 0, e), + Zl(o), + Yl(o), + o + }, + fromEquirectangular: function(A) { + return A.magFilter = 1003, + A.minFilter = 1003, + A.generateMipmaps = !1, + this.fromCubemap(A) + }, + fromCubemap: function(A) { + Vl = Ol.getRenderTarget(); + var e = Hl(A); + return function(A, e) { + var t = new Y; + A.isCubeTexture ? null == Tl && (Tl = Ac()) : null == Rl && (Rl = $l()); + var i = A.isCubeTexture ? Tl : Rl; + t.add(new Ue(kl[0],i)); + var o = i.uniforms; + o.envMap.value = A, + A.isCubeTexture || o.texelSize.value.set(1 / A.image.width, 1 / A.image.height); + o.inputEncoding.value = Fl[A.encoding], + o.outputEncoding.value = Fl[A.encoding], + zl(e, 0, 0, 3 * Ml, 2 * Ml), + Ol.setRenderTarget(e), + Ol.render(t, Kl) + }(A, e), + Zl(e), + Yl(e), + e + }, + compileCubemapShader: function() { + null == Tl && Wl(Tl = Ac()) + }, + compileEquirectangularShader: function() { + null == Rl && Wl(Rl = $l()) + }, + dispose: function() { + Ql.dispose(), + null != Tl && Tl.dispose(), + null != Rl && Rl.dispose(); + for (var A = 0; kl.length > A; A++) + kl[A].dispose() + } + }; + function ic(A) { + console.warn("THREE.ClosedSplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead."), + la.call(this, A), + this.type = "catmullrom", + this.closed = !0 + } + function oc(A) { + console.warn("THREE.SplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead."), + la.call(this, A), + this.type = "catmullrom" + } + function nc(A) { + console.warn("THREE.Spline has been removed. Use THREE.CatmullRomCurve3 instead."), + la.call(this, A), + this.type = "catmullrom" + } + ea.create = function(A, e) { + return console.log("THREE.Curve.create() has been deprecated"), + A.prototype = Object.create(ea.prototype), + A.prototype.constructor = A, + A.prototype.getPoint = e, + A + } + , + Object.assign(Ia.prototype, { + createPointsGeometry: function(A) { + console.warn("THREE.CurvePath: .createPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead."); + var e = this.getPoints(A); + return this.createGeometry(e) + }, + createSpacedPointsGeometry: function(A) { + console.warn("THREE.CurvePath: .createSpacedPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead."); + var e = this.getSpacedPoints(A); + return this.createGeometry(e) + }, + createGeometry: function(A) { + console.warn("THREE.CurvePath: .createGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead."); + for (var e = new De, t = 0, i = A.length; i > t; t++) { + var o = A[t]; + e.vertices.push(new y(o.x,o.y,o.z || 0)) + } + return e + } + }), + Object.assign(Ea.prototype, { + fromPoints: function(A) { + return console.warn("THREE.Path: .fromPoints() has been renamed to .setFromPoints()."), + this.setFromPoints(A) + } + }), + ic.prototype = Object.create(la.prototype), + oc.prototype = Object.create(la.prototype), + nc.prototype = Object.create(la.prototype), + Object.assign(nc.prototype, { + initFromArray: function() { + console.error("THREE.Spline: .initFromArray() has been removed.") + }, + getControlPointsArray: function() { + console.error("THREE.Spline: .getControlPointsArray() has been removed.") + }, + reparametrizeByArcLength: function() { + console.error("THREE.Spline: .reparametrizeByArcLength() has been removed.") + } + }), + ol.prototype.setColors = function() { + console.error("THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.") + } + , + _s.prototype.update = function() { + console.error("THREE.SkeletonHelper: update() no longer needs to be called.") + } + , + Object.assign(Yr.prototype, { + extractUrlBase: function(A) { + return console.warn("THREE.Loader: .extractUrlBase() has been deprecated. Use THREE.LoaderUtils.extractUrlBase() instead."), + La.extractUrlBase(A) + } + }), + Yr.Handlers = { + add: function() { + console.error("THREE.Loader: Handlers.add() has been removed. Use LoadingManager.addHandler() instead.") + }, + get: function() { + console.error("THREE.Loader: Handlers.get() has been removed. Use LoadingManager.getHandler() instead.") + } + }, + Object.assign(Pa.prototype, { + setTexturePath: function(A) { + return console.warn("THREE.ObjectLoader: .setTexturePath() has been renamed to .setResourcePath()."), + this.setResourcePath(A) + } + }), + Object.assign(Ps.prototype, { + center: function(A) { + return console.warn("THREE.Box2: .center() has been renamed to .getCenter()."), + this.getCenter(A) + }, + empty: function() { + return console.warn("THREE.Box2: .empty() has been renamed to .isEmpty()."), + this.isEmpty() + }, + isIntersectionBox: function(A) { + return console.warn("THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox()."), + this.intersectsBox(A) + }, + size: function(A) { + return console.warn("THREE.Box2: .size() has been renamed to .getSize()."), + this.getSize(A) + } + }), + Object.assign(aA.prototype, { + center: function(A) { + return console.warn("THREE.Box3: .center() has been renamed to .getCenter()."), + this.getCenter(A) + }, + empty: function() { + return console.warn("THREE.Box3: .empty() has been renamed to .isEmpty()."), + this.isEmpty() + }, + isIntersectionBox: function(A) { + return console.warn("THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox()."), + this.intersectsBox(A) + }, + isIntersectionSphere: function(A) { + return console.warn("THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere()."), + this.intersectsSphere(A) + }, + size: function(A) { + return console.warn("THREE.Box3: .size() has been renamed to .getSize()."), + this.getSize(A) + } + }), + Ze.prototype.setFromMatrix = function(A) { + return console.warn("THREE.Frustum: .setFromMatrix() has been renamed to .setFromProjectionMatrix()."), + this.setFromProjectionMatrix(A) + } + , + Hs.prototype.center = function(A) { + return console.warn("THREE.Line3: .center() has been renamed to .getCenter()."), + this.getCenter(A) + } + , + Object.assign(a, { + random16: function() { + return console.warn("THREE.Math: .random16() has been deprecated. Use Math.random() instead."), + Math.random() + }, + nearestPowerOfTwo: function(A) { + return console.warn("THREE.Math: .nearestPowerOfTwo() has been renamed to .floorPowerOfTwo()."), + a.floorPowerOfTwo(A) + }, + nextPowerOfTwo: function(A) { + return console.warn("THREE.Math: .nextPowerOfTwo() has been renamed to .ceilPowerOfTwo()."), + a.ceilPowerOfTwo(A) + } + }), + Object.assign(l.prototype, { + flattenToArrayOffset: function(A, e) { + return console.warn("THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead."), + this.toArray(A, e) + }, + multiplyVector3: function(A) { + return console.warn("THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead."), + A.applyMatrix3(this) + }, + multiplyVector3Array: function() { + console.error("THREE.Matrix3: .multiplyVector3Array() has been removed.") + }, + applyToBufferAttribute: function(A) { + return console.warn("THREE.Matrix3: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix3( matrix ) instead."), + A.applyMatrix3(this) + }, + applyToVector3Array: function() { + console.error("THREE.Matrix3: .applyToVector3Array() has been removed.") + } + }), + Object.assign(M.prototype, { + extractPosition: function(A) { + return console.warn("THREE.Matrix4: .extractPosition() has been renamed to .copyPosition()."), + this.copyPosition(A) + }, + flattenToArrayOffset: function(A, e) { + return console.warn("THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead."), + this.toArray(A, e) + }, + getPosition: function() { + return console.warn("THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead."), + (new y).setFromMatrixColumn(this, 3) + }, + setRotationFromQuaternion: function(A) { + return console.warn("THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion()."), + this.makeRotationFromQuaternion(A) + }, + multiplyToArray: function() { + console.warn("THREE.Matrix4: .multiplyToArray() has been removed.") + }, + multiplyVector3: function(A) { + return console.warn("THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead."), + A.applyMatrix4(this) + }, + multiplyVector4: function(A) { + return console.warn("THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead."), + A.applyMatrix4(this) + }, + multiplyVector3Array: function() { + console.error("THREE.Matrix4: .multiplyVector3Array() has been removed.") + }, + rotateAxis: function(A) { + console.warn("THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead."), + A.transformDirection(this) + }, + crossVector: function(A) { + return console.warn("THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead."), + A.applyMatrix4(this) + }, + translate: function() { + console.error("THREE.Matrix4: .translate() has been removed.") + }, + rotateX: function() { + console.error("THREE.Matrix4: .rotateX() has been removed.") + }, + rotateY: function() { + console.error("THREE.Matrix4: .rotateY() has been removed.") + }, + rotateZ: function() { + console.error("THREE.Matrix4: .rotateZ() has been removed.") + }, + rotateByAxis: function() { + console.error("THREE.Matrix4: .rotateByAxis() has been removed.") + }, + applyToBufferAttribute: function(A) { + return console.warn("THREE.Matrix4: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix4( matrix ) instead."), + A.applyMatrix4(this) + }, + applyToVector3Array: function() { + console.error("THREE.Matrix4: .applyToVector3Array() has been removed.") + }, + makeFrustum: function(A, e, t, i, o, n) { + return console.warn("THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead."), + this.makePerspective(A, e, i, t, o, n) + } + }), + EA.prototype.isIntersectionLine = function(A) { + return console.warn("THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine()."), + this.intersectsLine(A) + } + , + f.prototype.multiplyVector3 = function(A) { + return console.warn("THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead."), + A.applyQuaternion(this) + } + , + Object.assign(CA.prototype, { + isIntersectionBox: function(A) { + return console.warn("THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox()."), + this.intersectsBox(A) + }, + isIntersectionPlane: function(A) { + return console.warn("THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane()."), + this.intersectsPlane(A) + }, + isIntersectionSphere: function(A) { + return console.warn("THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere()."), + this.intersectsSphere(A) + } + }), + Object.assign(RA.prototype, { + area: function() { + return console.warn("THREE.Triangle: .area() has been renamed to .getArea()."), + this.getArea() + }, + barycoordFromPoint: function(A, e) { + return console.warn("THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord()."), + this.getBarycoord(A, e) + }, + midpoint: function(A) { + return console.warn("THREE.Triangle: .midpoint() has been renamed to .getMidpoint()."), + this.getMidpoint(A) + }, + normal: function(A) { + return console.warn("THREE.Triangle: .normal() has been renamed to .getNormal()."), + this.getNormal(A) + }, + plane: function(A) { + return console.warn("THREE.Triangle: .plane() has been renamed to .getPlane()."), + this.getPlane(A) + } + }), + Object.assign(RA, { + barycoordFromPoint: function(A, e, t, i, o) { + return console.warn("THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord()."), + RA.getBarycoord(A, e, t, i, o) + }, + normal: function(A, e, t, i) { + return console.warn("THREE.Triangle: .normal() has been renamed to .getNormal()."), + RA.getNormal(A, e, t, i) + } + }), + Object.assign(Ba.prototype, { + extractAllPoints: function(A) { + return console.warn("THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead."), + this.extractPoints(A) + }, + extrude: function(A) { + return console.warn("THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead."), + new Jn(this,A) + }, + makeGeometry: function(A) { + return console.warn("THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead."), + new rr(this,A) + } + }), + Object.assign(s.prototype, { + fromAttribute: function(A, e, t) { + return console.warn("THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute()."), + this.fromBufferAttribute(A, e, t) + }, + distanceToManhattan: function(A) { + return console.warn("THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo()."), + this.manhattanDistanceTo(A) + }, + lengthManhattan: function() { + return console.warn("THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength()."), + this.manhattanLength() + } + }), + Object.assign(y.prototype, { + setEulerFromRotationMatrix: function() { + console.error("THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.") + }, + setEulerFromQuaternion: function() { + console.error("THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.") + }, + getPositionFromMatrix: function(A) { + return console.warn("THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition()."), + this.setFromMatrixPosition(A) + }, + getScaleFromMatrix: function(A) { + return console.warn("THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale()."), + this.setFromMatrixScale(A) + }, + getColumnFromMatrix: function(A, e) { + return console.warn("THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn()."), + this.setFromMatrixColumn(e, A) + }, + applyProjection: function(A) { + return console.warn("THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead."), + this.applyMatrix4(A) + }, + fromAttribute: function(A, e, t) { + return console.warn("THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute()."), + this.fromBufferAttribute(A, e, t) + }, + distanceToManhattan: function(A) { + return console.warn("THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo()."), + this.manhattanDistanceTo(A) + }, + lengthManhattan: function() { + return console.warn("THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength()."), + this.manhattanLength() + } + }), + Object.assign(p.prototype, { + fromAttribute: function(A, e, t) { + return console.warn("THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute()."), + this.fromBufferAttribute(A, e, t) + }, + lengthManhattan: function() { + return console.warn("THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength()."), + this.manhattanLength() + } + }), + Object.assign(De.prototype, { + computeTangents: function() { + console.error("THREE.Geometry: .computeTangents() has been removed.") + }, + computeLineDistances: function() { + console.error("THREE.Geometry: .computeLineDistances() has been removed. Use THREE.Line.computeLineDistances() instead.") + }, + applyMatrix: function(A) { + return console.warn("THREE.Geometry: .applyMatrix() has been renamed to .applyMatrix4()."), + this.applyMatrix4(A) + } + }), + Object.assign(H.prototype, { + getChildByName: function(A) { + return console.warn("THREE.Object3D: .getChildByName() has been renamed to .getObjectByName()."), + this.getObjectByName(A) + }, + renderDepth: function() { + console.warn("THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.") + }, + translate: function(A, e) { + return console.warn("THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead."), + this.translateOnAxis(e, A) + }, + getWorldRotation: function() { + console.error("THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.") + }, + applyMatrix: function(A) { + return console.warn("THREE.Object3D: .applyMatrix() has been renamed to .applyMatrix4()."), + this.applyMatrix4(A) + } + }), + Object.defineProperties(H.prototype, { + eulerOrder: { + get: function() { + return console.warn("THREE.Object3D: .eulerOrder is now .rotation.order."), + this.rotation.order + }, + set: function(A) { + console.warn("THREE.Object3D: .eulerOrder is now .rotation.order."), + this.rotation.order = A + } + }, + useQuaternion: { + get: function() { + console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.") + }, + set: function() { + console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.") + } + } + }), + Object.assign(Ue.prototype, { + setDrawMode: function() { + console.error("THREE.Mesh: .setDrawMode() has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.") + } + }), + Object.defineProperties(Ue.prototype, { + drawMode: { + get: function() { + return console.error("THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode."), + 0 + }, + set: function() { + console.error("THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.") + } + } + }), + Object.defineProperties(xo.prototype, { + objects: { + get: function() { + return console.warn("THREE.LOD: .objects has been renamed to .levels."), + this.levels + } + } + }), + Object.defineProperty(bo.prototype, "useVertexTexture", { + get: function() { + console.warn("THREE.Skeleton: useVertexTexture has been removed.") + }, + set: function() { + console.warn("THREE.Skeleton: useVertexTexture has been removed.") + } + }), + So.prototype.initBones = function() { + console.error("THREE.SkinnedMesh: initBones() has been removed.") + } + , + Object.defineProperty(ea.prototype, "__arcLengthDivisions", { + get: function() { + return console.warn("THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions."), + this.arcLengthDivisions + }, + set: function(A) { + console.warn("THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions."), + this.arcLengthDivisions = A + } + }), + je.prototype.setLens = function(A, e) { + console.warn("THREE.PerspectiveCamera.setLens is deprecated. Use .setFocalLength and .filmGauge for a photographic setup."), + void 0 !== e && (this.filmGauge = e), + this.setFocalLength(A) + } + , + Object.defineProperties(xa.prototype, { + onlyShadow: { + set: function() { + console.warn("THREE.Light: .onlyShadow has been removed.") + } + }, + shadowCameraFov: { + set: function(A) { + console.warn("THREE.Light: .shadowCameraFov is now .shadow.camera.fov."), + this.shadow.camera.fov = A + } + }, + shadowCameraLeft: { + set: function(A) { + console.warn("THREE.Light: .shadowCameraLeft is now .shadow.camera.left."), + this.shadow.camera.left = A + } + }, + shadowCameraRight: { + set: function(A) { + console.warn("THREE.Light: .shadowCameraRight is now .shadow.camera.right."), + this.shadow.camera.right = A + } + }, + shadowCameraTop: { + set: function(A) { + console.warn("THREE.Light: .shadowCameraTop is now .shadow.camera.top."), + this.shadow.camera.top = A + } + }, + shadowCameraBottom: { + set: function(A) { + console.warn("THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom."), + this.shadow.camera.bottom = A + } + }, + shadowCameraNear: { + set: function(A) { + console.warn("THREE.Light: .shadowCameraNear is now .shadow.camera.near."), + this.shadow.camera.near = A + } + }, + shadowCameraFar: { + set: function(A) { + console.warn("THREE.Light: .shadowCameraFar is now .shadow.camera.far."), + this.shadow.camera.far = A + } + }, + shadowCameraVisible: { + set: function() { + console.warn("THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.") + } + }, + shadowBias: { + set: function(A) { + console.warn("THREE.Light: .shadowBias is now .shadow.bias."), + this.shadow.bias = A + } + }, + shadowDarkness: { + set: function() { + console.warn("THREE.Light: .shadowDarkness has been removed.") + } + }, + shadowMapWidth: { + set: function(A) { + console.warn("THREE.Light: .shadowMapWidth is now .shadow.mapSize.width."), + this.shadow.mapSize.width = A + } + }, + shadowMapHeight: { + set: function(A) { + console.warn("THREE.Light: .shadowMapHeight is now .shadow.mapSize.height."), + this.shadow.mapSize.height = A + } + } + }), + Object.defineProperties(YA.prototype, { + length: { + get: function() { + return console.warn("THREE.BufferAttribute: .length has been deprecated. Use .count instead."), + this.array.length + } + }, + dynamic: { + get: function() { + return console.warn("THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead."), + 35048 === this.usage + }, + set: function() { + console.warn("THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead."), + this.setUsage(35048) + } + } + }), + Object.assign(YA.prototype, { + setDynamic: function(A) { + return console.warn("THREE.BufferAttribute: .setDynamic() has been deprecated. Use .setUsage() instead."), + this.setUsage(!0 === A ? 35048 : 35044), + this + }, + copyIndicesArray: function() { + console.error("THREE.BufferAttribute: .copyIndicesArray() has been removed.") + }, + setArray: function() { + console.error("THREE.BufferAttribute: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers") + } + }), + Object.assign(he.prototype, { + addIndex: function(A) { + console.warn("THREE.BufferGeometry: .addIndex() has been renamed to .setIndex()."), + this.setIndex(A) + }, + addAttribute: function(A, e) { + return console.warn("THREE.BufferGeometry: .addAttribute() has been renamed to .setAttribute()."), + e && e.isBufferAttribute || e && e.isInterleavedBufferAttribute ? "index" === A ? (console.warn("THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute."), + this.setIndex(e), + this) : this.setAttribute(A, e) : (console.warn("THREE.BufferGeometry: .addAttribute() now expects ( name, attribute )."), + this.setAttribute(A, new YA(arguments[1],arguments[2]))) + }, + addDrawCall: function(A, e, t) { + void 0 !== t && console.warn("THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset."), + console.warn("THREE.BufferGeometry: .addDrawCall() is now .addGroup()."), + this.addGroup(A, e) + }, + clearDrawCalls: function() { + console.warn("THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups()."), + this.clearGroups() + }, + computeTangents: function() { + console.warn("THREE.BufferGeometry: .computeTangents() has been removed.") + }, + computeOffsets: function() { + console.warn("THREE.BufferGeometry: .computeOffsets() has been removed.") + }, + removeAttribute: function(A) { + return console.warn("THREE.BufferGeometry: .removeAttribute() has been renamed to .deleteAttribute()."), + this.deleteAttribute(A) + }, + applyMatrix: function(A) { + return console.warn("THREE.BufferGeometry: .applyMatrix() has been renamed to .applyMatrix4()."), + this.applyMatrix4(A) + } + }), + Object.defineProperties(he.prototype, { + drawcalls: { + get: function() { + return console.error("THREE.BufferGeometry: .drawcalls has been renamed to .groups."), + this.groups + } + }, + offsets: { + get: function() { + return console.warn("THREE.BufferGeometry: .offsets has been renamed to .groups."), + this.groups + } + } + }), + Object.defineProperties(Ds.prototype, { + linePrecision: { + get: function() { + return console.warn("THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead."), + this.params.Line.threshold + }, + set: function(A) { + console.warn("THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead."), + this.params.Line.threshold = A + } + } + }), + Object.defineProperties(to.prototype, { + dynamic: { + get: function() { + return console.warn("THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead."), + 35048 === this.usage + }, + set: function(A) { + console.warn("THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead."), + this.setUsage(A) + } + } + }), + Object.assign(to.prototype, { + setDynamic: function(A) { + return console.warn("THREE.InterleavedBuffer: .setDynamic() has been deprecated. Use .setUsage() instead."), + this.setUsage(!0 === A ? 35048 : 35044), + this + }, + setArray: function() { + console.error("THREE.InterleavedBuffer: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers") + } + }), + Object.assign(zn.prototype, { + getArrays: function() { + console.error("THREE.ExtrudeBufferGeometry: .getArrays() has been removed.") + }, + addShapeList: function() { + console.error("THREE.ExtrudeBufferGeometry: .addShapeList() has been removed.") + }, + addShape: function() { + console.error("THREE.ExtrudeBufferGeometry: .addShape() has been removed.") + } + }), + Object.defineProperties(Ts.prototype, { + dynamic: { + set: function() { + console.warn("THREE.Uniform: .dynamic has been removed. Use object.onBeforeRender() instead.") + } + }, + onUpdate: { + value: function() { + return console.warn("THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead."), + this + } + } + }), + Object.defineProperties(qA.prototype, { + wrapAround: { + get: function() { + console.warn("THREE.Material: .wrapAround has been removed.") + }, + set: function() { + console.warn("THREE.Material: .wrapAround has been removed.") + } + }, + overdraw: { + get: function() { + console.warn("THREE.Material: .overdraw has been removed.") + }, + set: function() { + console.warn("THREE.Material: .overdraw has been removed.") + } + }, + wrapRGB: { + get: function() { + return console.warn("THREE.Material: .wrapRGB has been removed."), + new LA + } + }, + shading: { + get: function() { + console.error("THREE." + this.type + ": .shading has been removed. Use the boolean .flatShading instead.") + }, + set: function(A) { + console.warn("THREE." + this.type + ": .shading has been removed. Use the boolean .flatShading instead."), + this.flatShading = 1 === A + } + }, + stencilMask: { + get: function() { + return console.warn("THREE." + this.type + ": .stencilMask has been removed. Use .stencilFuncMask instead."), + this.stencilFuncMask + }, + set: function(A) { + console.warn("THREE." + this.type + ": .stencilMask has been removed. Use .stencilFuncMask instead."), + this.stencilFuncMask = A + } + } + }), + Object.defineProperties(Ir.prototype, { + metal: { + get: function() { + return console.warn("THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead."), + !1 + }, + set: function() { + console.warn("THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead") + } + } + }), + Object.defineProperties(Pe.prototype, { + derivatives: { + get: function() { + return console.warn("THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives."), + this.extensions.derivatives + }, + set: function(A) { + console.warn("THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives."), + this.extensions.derivatives = A + } + } + }), + Object.assign($i.prototype, { + clearTarget: function(A, e, t, i) { + console.warn("THREE.WebGLRenderer: .clearTarget() has been deprecated. Use .setRenderTarget() and .clear() instead."), + this.setRenderTarget(A), + this.clear(e, t, i) + }, + animate: function(A) { + console.warn("THREE.WebGLRenderer: .animate() is now .setAnimationLoop()."), + this.setAnimationLoop(A) + }, + getCurrentRenderTarget: function() { + return console.warn("THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget()."), + this.getRenderTarget() + }, + getMaxAnisotropy: function() { + return console.warn("THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy()."), + this.capabilities.getMaxAnisotropy() + }, + getPrecision: function() { + return console.warn("THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision."), + this.capabilities.precision + }, + resetGLState: function() { + return console.warn("THREE.WebGLRenderer: .resetGLState() is now .state.reset()."), + this.state.reset() + }, + supportsFloatTextures: function() { + return console.warn("THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( 'OES_texture_float' )."), + this.extensions.get("OES_texture_float") + }, + supportsHalfFloatTextures: function() { + return console.warn("THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( 'OES_texture_half_float' )."), + this.extensions.get("OES_texture_half_float") + }, + supportsStandardDerivatives: function() { + return console.warn("THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( 'OES_standard_derivatives' )."), + this.extensions.get("OES_standard_derivatives") + }, + supportsCompressedTextureS3TC: function() { + return console.warn("THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( 'WEBGL_compressed_texture_s3tc' )."), + this.extensions.get("WEBGL_compressed_texture_s3tc") + }, + supportsCompressedTexturePVRTC: function() { + return console.warn("THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( 'WEBGL_compressed_texture_pvrtc' )."), + this.extensions.get("WEBGL_compressed_texture_pvrtc") + }, + supportsBlendMinMax: function() { + return console.warn("THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( 'EXT_blend_minmax' )."), + this.extensions.get("EXT_blend_minmax") + }, + supportsVertexTextures: function() { + return console.warn("THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures."), + this.capabilities.vertexTextures + }, + supportsInstancedArrays: function() { + return console.warn("THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( 'ANGLE_instanced_arrays' )."), + this.extensions.get("ANGLE_instanced_arrays") + }, + enableScissorTest: function(A) { + console.warn("THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest()."), + this.setScissorTest(A) + }, + initMaterial: function() { + console.warn("THREE.WebGLRenderer: .initMaterial() has been removed.") + }, + addPrePlugin: function() { + console.warn("THREE.WebGLRenderer: .addPrePlugin() has been removed.") + }, + addPostPlugin: function() { + console.warn("THREE.WebGLRenderer: .addPostPlugin() has been removed.") + }, + updateShadowMap: function() { + console.warn("THREE.WebGLRenderer: .updateShadowMap() has been removed.") + }, + setFaceCulling: function() { + console.warn("THREE.WebGLRenderer: .setFaceCulling() has been removed.") + }, + allocTextureUnit: function() { + console.warn("THREE.WebGLRenderer: .allocTextureUnit() has been removed.") + }, + setTexture: function() { + console.warn("THREE.WebGLRenderer: .setTexture() has been removed.") + }, + setTexture2D: function() { + console.warn("THREE.WebGLRenderer: .setTexture2D() has been removed.") + }, + setTextureCube: function() { + console.warn("THREE.WebGLRenderer: .setTextureCube() has been removed.") + }, + getActiveMipMapLevel: function() { + return console.warn("THREE.WebGLRenderer: .getActiveMipMapLevel() is now .getActiveMipmapLevel()."), + this.getActiveMipmapLevel() + } + }), + Object.defineProperties($i.prototype, { + shadowMapEnabled: { + get: function() { + return this.shadowMap.enabled + }, + set: function(A) { + console.warn("THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled."), + this.shadowMap.enabled = A + } + }, + shadowMapType: { + get: function() { + return this.shadowMap.type + }, + set: function(A) { + console.warn("THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type."), + this.shadowMap.type = A + } + }, + shadowMapCullFace: { + get: function() { + console.warn("THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.") + }, + set: function() { + console.warn("THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.") + } + }, + context: { + get: function() { + return console.warn("THREE.WebGLRenderer: .context has been removed. Use .getContext() instead."), + this.getContext() + } + }, + vr: { + get: function() { + return console.warn("THREE.WebGLRenderer: .vr has been renamed to .xr"), + this.xr + } + }, + gammaInput: { + get: function() { + return console.warn("THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead."), + !1 + }, + set: function() { + console.warn("THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.") + } + }, + gammaOutput: { + get: function() { + return console.warn("THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead."), + !1 + }, + set: function(A) { + console.warn("THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead."), + this.outputEncoding = !0 === A ? 3001 : 3e3 + } + } + }), + Object.defineProperties(Yi.prototype, { + cullFace: { + get: function() { + console.warn("THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.") + }, + set: function() { + console.warn("THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.") + } + }, + renderReverseSided: { + get: function() { + console.warn("THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.") + }, + set: function() { + console.warn("THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.") + } + }, + renderSingleSided: { + get: function() { + console.warn("THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.") + }, + set: function() { + console.warn("THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.") + } + } + }), + Object.defineProperties(g.prototype, { + wrapS: { + get: function() { + return console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS."), + this.texture.wrapS + }, + set: function(A) { + console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS."), + this.texture.wrapS = A + } + }, + wrapT: { + get: function() { + return console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT."), + this.texture.wrapT + }, + set: function(A) { + console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT."), + this.texture.wrapT = A + } + }, + magFilter: { + get: function() { + return console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter."), + this.texture.magFilter + }, + set: function(A) { + console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter."), + this.texture.magFilter = A + } + }, + minFilter: { + get: function() { + return console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter."), + this.texture.minFilter + }, + set: function(A) { + console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter."), + this.texture.minFilter = A + } + }, + anisotropy: { + get: function() { + return console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy."), + this.texture.anisotropy + }, + set: function(A) { + console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy."), + this.texture.anisotropy = A + } + }, + offset: { + get: function() { + return console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset."), + this.texture.offset + }, + set: function(A) { + console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset."), + this.texture.offset = A + } + }, + repeat: { + get: function() { + return console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat."), + this.texture.repeat + }, + set: function(A) { + console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat."), + this.texture.repeat = A + } + }, + format: { + get: function() { + return console.warn("THREE.WebGLRenderTarget: .format is now .texture.format."), + this.texture.format + }, + set: function(A) { + console.warn("THREE.WebGLRenderTarget: .format is now .texture.format."), + this.texture.format = A + } + }, + type: { + get: function() { + return console.warn("THREE.WebGLRenderTarget: .type is now .texture.type."), + this.texture.type + }, + set: function(A) { + console.warn("THREE.WebGLRenderTarget: .type is now .texture.type."), + this.texture.type = A + } + }, + generateMipmaps: { + get: function() { + return console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps."), + this.texture.generateMipmaps + }, + set: function(A) { + console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps."), + this.texture.generateMipmaps = A + } + } + }), + Object.defineProperties(ps.prototype, { + load: { + value: function(A) { + console.warn("THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead."); + var e = this; + return (new $a).load(A, (function(A) { + e.setBuffer(A) + } + )), + this + } + }, + startTime: { + set: function() { + console.warn("THREE.Audio: .startTime is now .play( delay ).") + } + } + }), + ys.prototype.getData = function() { + return console.warn("THREE.AudioAnalyser: .getData() is now .getFrequencyData()."), + this.getFrequencyData() + } + , + He.prototype.updateCubeMap = function(A, e) { + return console.warn("THREE.CubeCamera: .updateCubeMap() is now .update()."), + this.update(A, e) + } + ; + var rc = { + merge: function(A, e, t) { + var i; + console.warn("THREE.GeometryUtils: .merge() has been moved to Geometry. Use geometry.merge( geometry2, matrix, materialIndexOffset ) instead."), + e.isMesh && (e.matrixAutoUpdate && e.updateMatrix(), + i = e.matrix, + e = e.geometry), + A.merge(e, i, t) + }, + center: function(A) { + return console.warn("THREE.GeometryUtils: .center() has been moved to Geometry. Use geometry.center() instead."), + A.center() + } + }; + c.crossOrigin = void 0, + c.loadTexture = function(A, e, t, i) { + console.warn("THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead."); + var o = new Aa; + o.setCrossOrigin(this.crossOrigin); + var n = o.load(A, t, void 0, i); + return e && (n.mapping = e), + n + } + , + c.loadTextureCube = function(A, e, t, i) { + console.warn("THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead."); + var o = new $r; + o.setCrossOrigin(this.crossOrigin); + var n = o.load(A, t, void 0, i); + return e && (n.mapping = e), + n + } + , + c.loadCompressedTexture = function() { + console.error("THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.") + } + , + c.loadCompressedTextureCube = function() { + console.error("THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.") + } + ; + var ac = { + createMultiMaterialObject: function() { + console.error("THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js") + }, + detach: function() { + console.error("THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js") + }, + attach: function() { + console.error("THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js") + } + }; + "undefined" != typeof __THREE_DEVTOOLS__ && __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register",{ + detail: { + revision: "115" + } + })); + var sc = Object.freeze({ + ACESFilmicToneMapping: 5, + AddEquation: 100, + AddOperation: 2, + AdditiveBlending: 2, + AlphaFormat: 1021, + AlwaysDepth: 1, + AlwaysStencilFunc: 519, + AmbientLight: Ta, + AmbientLightProbe: is, + AnimationClip: Gr, + AnimationLoader: zr, + AnimationMixer: Rs, + AnimationObjectGroup: Ks, + AnimationUtils: br, + ArcCurve: ia, + ArrayCamera: Zi, + ArrowHelper: Il, + Audio: ps, + AudioAnalyser: ys, + AudioContext: _a, + AudioListener: ds, + AudioLoader: $a, + AxesHelper: El, + AxisHelper: function(A) { + return console.warn("THREE.AxisHelper has been renamed to THREE.AxesHelper."), + new El(A) + }, + BackSide: 1, + BasicDepthPacking: 3200, + BasicShadowMap: 0, + BinaryTextureLoader: function(A) { + return console.warn("THREE.BinaryTextureLoader has been renamed to THREE.DataTextureLoader."), + new Xr(A) + }, + Bone: Uo, + BooleanKeyframeTrack: Tr, + BoundingBoxHelper: function(A, e) { + return console.warn("THREE.BoundingBoxHelper has been deprecated. Creating a THREE.BoxHelper instead."), + new ul(A,e) + }, + Box2: Ps, + Box3: aA, + Box3Helper: fl, + BoxBufferGeometry: Ne, + BoxGeometry: Le, + BoxHelper: ul, + BufferAttribute: YA, + BufferGeometry: he, + BufferGeometryLoader: Va, + ByteType: 1010, + Cache: qr, + Camera: qe, + CameraHelper: dl, + CanvasRenderer: function() { + console.error("THREE.CanvasRenderer has been removed") + }, + CanvasTexture: en, + CatmullRomCurve3: la, + CineonToneMapping: 4, + CircleBufferGeometry: ur, + CircleGeometry: gr, + ClampToEdgeWrapping: 1001, + Clock: as, + ClosedSplineCurve3: ic, + Color: LA, + ColorKeyframeTrack: kr, + CompressedTexture: An, + CompressedTextureLoader: Zr, + ConeBufferGeometry: pr, + ConeGeometry: dr, + CubeCamera: He, + CubeGeometry: Le, + CubeReflectionMapping: 301, + CubeRefractionMapping: 302, + CubeTexture: ut, + CubeTextureLoader: $r, + CubeUVReflectionMapping: 306, + CubeUVRefractionMapping: 307, + CubicBezierCurve: pa, + CubicBezierCurve3: ga, + CubicInterpolant: Fr, + CullFaceBack: 1, + CullFaceFront: 2, + CullFaceFrontBack: 3, + CullFaceNone: 0, + Curve: ea, + CurvePath: Ia, + CustomBlending: 5, + CylinderBufferGeometry: hr, + CylinderGeometry: cr, + Cylindrical: Vs, + DataTexture: We, + DataTexture2DArray: ft, + DataTexture3D: mt, + DataTextureLoader: Xr, + DecrementStencilOp: 7683, + DecrementWrapStencilOp: 34056, + DefaultLoadingManager: Hr, + DepthFormat: 1026, + DepthStencilFormat: 1027, + DepthTexture: tn, + DirectionalLight: Ra, + DirectionalLightHelper: ll, + DirectionalLightShadow: Qa, + DiscreteInterpolant: Qr, + DodecahedronBufferGeometry: fn, + DodecahedronGeometry: un, + DoubleSide: 2, + DstAlphaFactor: 206, + DstColorFactor: 208, + DynamicBufferAttribute: function(A, e) { + return console.warn("THREE.DynamicBufferAttribute has been removed. Use new THREE.BufferAttribute().setUsage( THREE.DynamicDrawUsage ) instead."), + new YA(A,e).setUsage(35048) + }, + DynamicCopyUsage: 35050, + DynamicDrawUsage: 35048, + DynamicReadUsage: 35049, + EdgesGeometry: lr, + EdgesHelper: function(A, e) { + return console.warn("THREE.EdgesHelper has been removed. Use THREE.EdgesGeometry instead."), + new jo(new lr(A.geometry),new ko({ + color: void 0 !== e ? e : 16777215 + })) + }, + EllipseCurve: ta, + EqualDepth: 4, + EqualStencilFunc: 514, + EquirectangularReflectionMapping: 303, + EquirectangularRefractionMapping: 304, + Euler: F, + EventDispatcher: i, + ExtrudeBufferGeometry: zn, + ExtrudeGeometry: Jn, + Face3: GA, + Face4: function(A, e, t, i, o, n, r) { + return console.warn("THREE.Face4 has been removed. A THREE.Face3 will be created instead."), + new GA(A,e,t,o,n,r) + }, + FaceColors: 1, + FileLoader: Jr, + FlatShading: 1, + Float32Attribute: function(A, e) { + return console.warn("THREE.Float32Attribute has been removed. Use new THREE.Float32BufferAttribute() instead."), + new Ae(A,e) + }, + Float32BufferAttribute: Ae, + Float64Attribute: function(A, e) { + return console.warn("THREE.Float64Attribute has been removed. Use new THREE.Float64BufferAttribute() instead."), + new ee(A,e) + }, + Float64BufferAttribute: ee, + FloatType: 1015, + Fog: eo, + FogExp2: Ao, + Font: za, + FontLoader: Xa, + FrontFaceDirectionCCW: 1, + FrontFaceDirectionCW: 0, + FrontSide: 0, + Frustum: Ze, + GammaEncoding: 3007, + Geometry: De, + GeometryUtils: rc, + GreaterDepth: 6, + GreaterEqualDepth: 5, + GreaterEqualStencilFunc: 518, + GreaterStencilFunc: 516, + GridHelper: ol, + Group: Xi, + HalfFloatType: 1016, + HemisphereLight: Sa, + HemisphereLightHelper: il, + HemisphereLightProbe: ts, + IcosahedronBufferGeometry: gn, + IcosahedronGeometry: pn, + ImageBitmapLoader: Wa, + ImageLoader: _r, + ImageUtils: c, + ImmediateRenderObject: Ys, + IncrementStencilOp: 7682, + IncrementWrapStencilOp: 34055, + InstancedBufferAttribute: Oa, + InstancedBufferGeometry: Na, + InstancedInterleavedBuffer: ks, + InstancedMesh: To, + Int16Attribute: function(A, e) { + return console.warn("THREE.Int16Attribute has been removed. Use new THREE.Int16BufferAttribute() instead."), + new ZA(A,e) + }, + Int16BufferAttribute: ZA, + Int32Attribute: function(A, e) { + return console.warn("THREE.Int32Attribute has been removed. Use new THREE.Int32BufferAttribute() instead."), + new _A(A,e) + }, + Int32BufferAttribute: _A, + Int8Attribute: function(A, e) { + return console.warn("THREE.Int8Attribute has been removed. Use new THREE.Int8BufferAttribute() instead."), + new WA(A,e) + }, + Int8BufferAttribute: WA, + IntType: 1013, + InterleavedBuffer: to, + InterleavedBufferAttribute: no, + Interpolant: Ur, + InterpolateDiscrete: 2300, + InterpolateLinear: 2301, + InterpolateSmooth: 2302, + InvertStencilOp: 5386, + JSONLoader: function() { + console.error("THREE.JSONLoader has been removed.") + }, + KeepStencilOp: 7680, + KeyframeTrack: Rr, + LOD: xo, + LatheBufferGeometry: nr, + LatheGeometry: or, + Layers: K, + LensFlare: function() { + console.error("THREE.LensFlare has been moved to /examples/jsm/objects/Lensflare.js") + }, + LessDepth: 2, + LessEqualDepth: 3, + LessEqualStencilFunc: 515, + LessStencilFunc: 513, + Light: xa, + LightProbe: es, + LightShadow: wa, + Line: Go, + Line3: Hs, + LineBasicMaterial: ko, + LineCurve: ua, + LineCurve3: fa, + LineDashedMaterial: wr, + LineLoop: Ho, + LinePieces: 1, + LineSegments: jo, + LineStrip: 0, + LinearEncoding: 3e3, + LinearFilter: 1006, + LinearInterpolant: Kr, + LinearMipMapLinearFilter: 1008, + LinearMipMapNearestFilter: 1007, + LinearMipmapLinearFilter: 1008, + LinearMipmapNearestFilter: 1007, + LinearToneMapping: 1, + Loader: Yr, + LoaderUtils: La, + LoadingManager: jr, + LogLuvEncoding: 3003, + LoopOnce: 2200, + LoopPingPong: 2202, + LoopRepeat: 2201, + LuminanceAlphaFormat: 1025, + LuminanceFormat: 1024, + MOUSE: t, + Material: qA, + MaterialLoader: Da, + Math: a, + MathUtils: a, + Matrix3: l, + Matrix4: M, + MaxEquation: 104, + Mesh: Ue, + MeshBasicMaterial: jA, + MeshDepthMaterial: ji, + MeshDistanceMaterial: Hi, + MeshFaceMaterial: function(A) { + return console.warn("THREE.MeshFaceMaterial has been removed. Use an Array instead."), + A + }, + MeshLambertMaterial: xr, + MeshMatcapMaterial: Sr, + MeshNormalMaterial: Br, + MeshPhongMaterial: Ir, + MeshPhysicalMaterial: vr, + MeshStandardMaterial: yr, + MeshToonMaterial: Er, + MinEquation: 103, + MirroredRepeatWrapping: 1002, + MixOperation: 1, + MultiMaterial: function(A) { + return void 0 === A && (A = []), + console.warn("THREE.MultiMaterial has been removed. Use an Array instead."), + A.isMultiMaterial = !0, + A.materials = A, + A.clone = function() { + return A.slice() + } + , + A + }, + MultiplyBlending: 4, + MultiplyOperation: 0, + NearestFilter: 1003, + NearestMipMapLinearFilter: 1005, + NearestMipMapNearestFilter: 1004, + NearestMipmapLinearFilter: 1005, + NearestMipmapNearestFilter: 1004, + NeverDepth: 0, + NeverStencilFunc: 512, + NoBlending: 0, + NoColors: 0, + NoToneMapping: 0, + NormalBlending: 1, + NotEqualDepth: 7, + NotEqualStencilFunc: 517, + NumberKeyframeTrack: Dr, + Object3D: H, + ObjectLoader: Pa, + ObjectSpaceNormalMap: 1, + OctahedronBufferGeometry: dn, + OctahedronGeometry: hn, + OneFactor: 201, + OneMinusDstAlphaFactor: 207, + OneMinusDstColorFactor: 209, + OneMinusSrcAlphaFactor: 205, + OneMinusSrcColorFactor: 203, + OrthographicCamera: Ka, + PCFShadowMap: 1, + PCFSoftShadowMap: 2, + PMREMGenerator: jl, + ParametricBufferGeometry: rn, + ParametricGeometry: nn, + Particle: function(A) { + return console.warn("THREE.Particle has been renamed to THREE.Sprite."), + new vo(A) + }, + ParticleBasicMaterial: function(A) { + return console.warn("THREE.ParticleBasicMaterial has been renamed to THREE.PointsMaterial."), + new Yo(A) + }, + ParticleSystem: function(A, e) { + return console.warn("THREE.ParticleSystem has been renamed to THREE.Points."), + new Xo(A,e) + }, + ParticleSystemMaterial: function(A) { + return console.warn("THREE.ParticleSystemMaterial has been renamed to THREE.PointsMaterial."), + new Yo(A) + }, + Path: Ea, + PerspectiveCamera: je, + Plane: EA, + PlaneBufferGeometry: et, + PlaneGeometry: At, + PlaneHelper: ml, + PointCloud: function(A, e) { + return console.warn("THREE.PointCloud has been renamed to THREE.Points."), + new Xo(A,e) + }, + PointCloudMaterial: function(A) { + return console.warn("THREE.PointCloudMaterial has been renamed to THREE.PointsMaterial."), + new Yo(A) + }, + PointLight: Fa, + PointLightHelper: $s, + Points: Xo, + PointsMaterial: Yo, + PolarGridHelper: nl, + PolyhedronBufferGeometry: sn, + PolyhedronGeometry: an, + PositionalAudio: Cs, + PropertyBinding: Fs, + PropertyMixer: vs, + QuadraticBezierCurve: ma, + QuadraticBezierCurve3: Ca, + Quaternion: f, + QuaternionKeyframeTrack: Nr, + QuaternionLinearInterpolant: Lr, + REVISION: "115", + RGBADepthPacking: 3201, + RGBAFormat: 1023, + RGBAIntegerFormat: 1033, + RGBA_ASTC_10x10_Format: 37819, + RGBA_ASTC_10x5_Format: 37816, + RGBA_ASTC_10x6_Format: 37817, + RGBA_ASTC_10x8_Format: 37818, + RGBA_ASTC_12x10_Format: 37820, + RGBA_ASTC_12x12_Format: 37821, + RGBA_ASTC_4x4_Format: 37808, + RGBA_ASTC_5x4_Format: 37809, + RGBA_ASTC_5x5_Format: 37810, + RGBA_ASTC_6x5_Format: 37811, + RGBA_ASTC_6x6_Format: 37812, + RGBA_ASTC_8x5_Format: 37813, + RGBA_ASTC_8x6_Format: 37814, + RGBA_ASTC_8x8_Format: 37815, + RGBA_BPTC_Format: 36492, + RGBA_ETC2_EAC_Format: 37496, + RGBA_PVRTC_2BPPV1_Format: 35843, + RGBA_PVRTC_4BPPV1_Format: 35842, + RGBA_S3TC_DXT1_Format: 33777, + RGBA_S3TC_DXT3_Format: 33778, + RGBA_S3TC_DXT5_Format: 33779, + RGBDEncoding: 3006, + RGBEEncoding: 3002, + RGBEFormat: 1023, + RGBFormat: 1022, + RGBIntegerFormat: 1032, + RGBM16Encoding: 3005, + RGBM7Encoding: 3004, + RGB_ETC1_Format: 36196, + RGB_ETC2_Format: 37492, + RGB_PVRTC_2BPPV1_Format: 35841, + RGB_PVRTC_4BPPV1_Format: 35840, + RGB_S3TC_DXT1_Format: 33776, + RGFormat: 1030, + RGIntegerFormat: 1031, + RawShaderMaterial: Cr, + Ray: CA, + Raycaster: Ds, + RectAreaLight: ka, + RedFormat: 1028, + RedIntegerFormat: 1029, + ReinhardToneMapping: 2, + RepeatWrapping: 1e3, + ReplaceStencilOp: 7681, + ReverseSubtractEquation: 102, + RingBufferGeometry: ir, + RingGeometry: tr, + SRGB8_ALPHA8_ASTC_10x10_Format: 37851, + SRGB8_ALPHA8_ASTC_10x5_Format: 37848, + SRGB8_ALPHA8_ASTC_10x6_Format: 37849, + SRGB8_ALPHA8_ASTC_10x8_Format: 37850, + SRGB8_ALPHA8_ASTC_12x10_Format: 37852, + SRGB8_ALPHA8_ASTC_12x12_Format: 37853, + SRGB8_ALPHA8_ASTC_4x4_Format: 37840, + SRGB8_ALPHA8_ASTC_5x4_Format: 37841, + SRGB8_ALPHA8_ASTC_5x5_Format: 37842, + SRGB8_ALPHA8_ASTC_6x5_Format: 37843, + SRGB8_ALPHA8_ASTC_6x6_Format: 37844, + SRGB8_ALPHA8_ASTC_8x5_Format: 37845, + SRGB8_ALPHA8_ASTC_8x6_Format: 37846, + SRGB8_ALPHA8_ASTC_8x8_Format: 37847, + Scene: Y, + SceneUtils: ac, + ShaderChunk: tt, + ShaderLib: it, + ShaderMaterial: Pe, + ShadowMaterial: mr, + Shape: Ba, + ShapeBufferGeometry: ar, + ShapeGeometry: rr, + ShapePath: Ja, + ShapeUtils: Hn, + ShortType: 1011, + Skeleton: bo, + SkeletonHelper: _s, + SkinnedMesh: So, + SmoothShading: 2, + Sphere: cA, + SphereBufferGeometry: er, + SphereGeometry: Ar, + Spherical: Os, + SphericalHarmonics3: As, + SphericalReflectionMapping: 305, + Spline: nc, + SplineCurve: ya, + SplineCurve3: oc, + SpotLight: ba, + SpotLightHelper: Js, + SpotLightShadow: Ma, + Sprite: vo, + SpriteMaterial: ro, + SrcAlphaFactor: 204, + SrcAlphaSaturateFactor: 210, + SrcColorFactor: 202, + StaticCopyUsage: 35046, + StaticDrawUsage: 35044, + StaticReadUsage: 35045, + StereoCamera: rs, + StreamCopyUsage: 35042, + StreamDrawUsage: 35040, + StreamReadUsage: 35041, + StringKeyframeTrack: Or, + SubtractEquation: 101, + SubtractiveBlending: 3, + TOUCH: { + ROTATE: 0, + PAN: 1, + DOLLY_PAN: 2, + DOLLY_ROTATE: 3 + }, + TangentSpaceNormalMap: 0, + TetrahedronBufferGeometry: cn, + TetrahedronGeometry: ln, + TextBufferGeometry: $n, + TextGeometry: _n, + Texture: d, + TextureLoader: Aa, + TorusBufferGeometry: En, + TorusGeometry: In, + TorusKnotBufferGeometry: vn, + TorusKnotGeometry: yn, + Triangle: RA, + TriangleFanDrawMode: 2, + TriangleStripDrawMode: 1, + TrianglesDrawMode: 0, + TubeBufferGeometry: Cn, + TubeGeometry: mn, + UVMapping: 300, + Uint16Attribute: function(A, e) { + return console.warn("THREE.Uint16Attribute has been removed. Use new THREE.Uint16BufferAttribute() instead."), + new XA(A,e) + }, + Uint16BufferAttribute: XA, + Uint32Attribute: function(A, e) { + return console.warn("THREE.Uint32Attribute has been removed. Use new THREE.Uint32BufferAttribute() instead."), + new $A(A,e) + }, + Uint32BufferAttribute: $A, + Uint8Attribute: function(A, e) { + return console.warn("THREE.Uint8Attribute has been removed. Use new THREE.Uint8BufferAttribute() instead."), + new JA(A,e) + }, + Uint8BufferAttribute: JA, + Uint8ClampedAttribute: function(A, e) { + return console.warn("THREE.Uint8ClampedAttribute has been removed. Use new THREE.Uint8ClampedBufferAttribute() instead."), + new zA(A,e) + }, + Uint8ClampedBufferAttribute: zA, + Uncharted2ToneMapping: 3, + Uniform: Ts, + UniformsLib: Xe, + UniformsUtils: Ge, + UnsignedByteType: 1009, + UnsignedInt248Type: 1020, + UnsignedIntType: 1014, + UnsignedShort4444Type: 1017, + UnsignedShort5551Type: 1018, + UnsignedShort565Type: 1019, + UnsignedShortType: 1012, + VSMShadowMap: 3, + Vector2: s, + Vector3: y, + Vector4: p, + VectorKeyframeTrack: Vr, + Vertex: function(A, e, t) { + return console.warn("THREE.Vertex has been removed. Use THREE.Vector3 instead."), + new y(A,e,t) + }, + VertexColors: 2, + VideoTexture: $o, + WebGLCubeRenderTarget: Ye, + WebGLMultisampleRenderTarget: u, + WebGLRenderTarget: g, + WebGLRenderTargetCube: function(A, e, t) { + return console.warn("THREE.WebGLRenderTargetCube( width, height, options ) is now WebGLCubeRenderTarget( size, options )."), + new Ye(A,t) + }, + WebGLRenderer: $i, + WebGLUtils: zi, + WireframeGeometry: on, + WireframeHelper: function(A, e) { + return console.warn("THREE.WireframeHelper has been removed. Use THREE.WireframeGeometry instead."), + new jo(new on(A.geometry),new ko({ + color: void 0 !== e ? e : 16777215 + })) + }, + WrapAroundEnding: 2402, + XHRLoader: function(A) { + return console.warn("THREE.XHRLoader has been renamed to THREE.FileLoader."), + new Jr(A) + }, + ZeroCurvatureEnding: 2400, + ZeroFactor: 200, + ZeroSlopeEnding: 2401, + ZeroStencilOp: 0, + sRGBEncoding: 3001 + }); + function lc(A) { + return (lc = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(A) { + return typeof A + } + : function(A) { + return A && "function" == typeof Symbol && A.constructor === Symbol && A !== Symbol.prototype ? "symbol" : typeof A + } + )(A) + } + function cc(A, e) { + if (!(A instanceof e)) + throw new TypeError("Cannot call a class as a function") + } + function hc(A, e) { + for (var t = 0; e.length > t; t++) { + var i = e[t]; + i.enumerable = i.enumerable || !1, + i.configurable = !0, + "value"in i && (i.writable = !0), + Object.defineProperty(A, i.key, i) + } + } + function dc(A, e, t) { + return e && hc(A.prototype, e), + t && hc(A, t), + A + } + function pc(A, e, t) { + return e in A ? Object.defineProperty(A, e, { + value: t, + enumerable: !0, + configurable: !0, + writable: !0 + }) : A[e] = t, + A + } + function gc(A) { + for (var e = 1; arguments.length > e; e++) { + var t = null != arguments[e] ? Object(arguments[e]) : {} + , i = Object.keys(t); + "function" == typeof Object.getOwnPropertySymbols && (i = i.concat(Object.getOwnPropertySymbols(t).filter((function(A) { + return Object.getOwnPropertyDescriptor(t, A).enumerable + } + )))), + i.forEach((function(e) { + pc(A, e, t[e]) + } + )) + } + return A + } + function uc(A, e) { + if ("function" != typeof e && null !== e) + throw new TypeError("Super expression must either be null or a function"); + A.prototype = Object.create(e && e.prototype, { + constructor: { + value: A, + writable: !0, + configurable: !0 + } + }), + e && mc(A, e) + } + function fc(A) { + return (fc = Object.setPrototypeOf ? Object.getPrototypeOf : function(A) { + return A.__proto__ || Object.getPrototypeOf(A) + } + )(A) + } + function mc(A, e) { + return (mc = Object.setPrototypeOf || function(A, e) { + return A.__proto__ = e, + A + } + )(A, e) + } + function Cc(A, e) { + return !e || "object" != typeof e && "function" != typeof e ? function(A) { + if (void 0 === A) + throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + return A + }(A) : e + } + function yc(A) { + return function(A) { + if (Array.isArray(A)) { + for (var e = 0, t = new Array(A.length); A.length > e; e++) + t[e] = A[e]; + return t + } + }(A) || function(A) { + if (Symbol.iterator in Object(A) || "[object Arguments]" === Object.prototype.toString.call(A)) + return Array.from(A) + }(A) || function() { + throw new TypeError("Invalid attempt to spread non-iterable instance") + }() + } + var vc = { + SceneSize: 1e3, + getDataFromIndexedDB: !0, + TextureResRoot: "images/", + UserControlView: !1, + FillCavity: !1, + EnableClippingCaps: !0, + EnableBoxClippingCaps: !1, + EnableTextureMapping: !0, + EnableTextureLoading: !0, + EnableLightmap: !1, + EnableTransformAoMap: !0, + LightmapIntensity: 1, + ClippingCaps: !1, + SelectionColor: { + color: 2205669, + side: 2, + opacity: .8, + transparent: !0 + }, + DisableAntialias: !1, + EnableDemolishByDClick: !1, + IsMobile: !1, + UseWorker: !1, + ZipResourcePostfix: "", + HasLayerData: !1, + Renderer: 1, + Instance: !0, + MergeComponent: !1, + AutoMergeComponent: !0, + AutoMergeComponentCount: 1e4, + MaxMergeCount: 1e3, + MergedTriangleNumberThreshold: 2e7, + MaxMergedTriangleNumber: 2e7, + IncrementRender: !1, + EnableRenderPass: !1, + LimitFrameTime: 250, + maxObjectNumInPool: 1e3, + maxDrawCacheNum: 4e4, + OctantDepth: 15, + MaximumDepth: 0, + TargetDistance: 1e4, + ConcurrencyRequestCount: 16, + ShowOctant: !1, + EnableOctant: !1, + EnableViewController: !0, + DirectionalLight: !0, + LightPreset: 2, + IBL: !1, + ToneMapping: 4, + LightIntensityFactor: 1, + Hover: !1, + OcclusionTranslucentEnabled: !1, + OcclusionOpacity: .5, + OcclusionDistanceToCamera: 1e3, + LineSelectRange: 30, + DrawingStyle: 0, + DrawingBoardlineEnabled: !0, + InitWireframeData: !1, + EnableHitDetection: !1, + TranslucentDepthDisabled: !1, + SharedMeshInstanceEnable: !1, + DataProvider: 0, + EnableSelectionOutline: !0, + EnableSelectionByTranslucent: !1, + EnableSelectionBoundingBox: !1, + EnableShadow: !1, + EnableAnimation: !0, + UseLods: !1, + AutoPrepare: !0, + DEBUG: !1, + WalkingWithGravity: !1, + WalkingWithViewLock: !1, + RendererWhenLoad: !1, + language: "zh-cn", + LoadComponentOnDemand: !1, + logarithmicDepthBuffer: !1, + InfluencedByLight: !0, + geometricErrorThresholdValue: 80, + MaximumAvailableMemory: 500, + DataReduction: !1, + ConstraintZoom: !1, + stepLoad: !1, + useGzip: !1, + notDepthWriteByTransparent: !1, + PickingEffect: !0, + PickingLineWidthEnabled: !0, + loadBatch: !0, + MiniMapSize: 1024, + alphaTest: .5, + EnableCreateMiniMap: !1, + MultipleSelectComponents: !0 + } + , Ic = F.RotationOrders + , Ec = { + ORTHOGRAPHIC: "orth", + PERSPECTIVE: "persp" + } + , Bc = { + elements: [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] + } + , xc = { + elements: [1, 0, 0, 0, 1, 0, 0, 0, 1] + } + , Sc = { + IfcOpeningElement: !0, + IfcSpace: !0, + OST_Rooms: !0, + "房间": !0 + }; + Object.defineProperties(Sc, { + "房间": { + get: function() { + return Sc.OST_Rooms + }, + set: function(A) { + Sc.OST_Rooms = A + } + } + }); + var wc, Mc, bc = new (Proxy || function(A) { + return A + } + )(Sc,{ + deleteProperty: function(A, e) { + e in A && ("房间" === e && delete A.OST_Rooms, + delete A[e]) + } + }), Uc = { + Keep: 0, + Home: 135, + Top: 1, + Bottom: 2, + Front: 3, + Back: 4, + Right: 5, + Left: 6, + TopFrontRight: 135, + TopFrontLeft: 136, + TopBackRight: 145, + TopBackLeft: 146, + BottomFrontRight: 235, + BottomFrontLeft: 236, + BottomBackRight: 245, + BottomBackLeft: 246, + TopFront: 13, + TopBack: 14, + TopRight: 15, + TopLeft: 16, + BottomFront: 23, + BottomBack: 24, + BottomRight: 25, + BottomLeft: 26, + FrontRight: 35, + FrontLeft: 36, + BackRight: 45, + BackLeft: 46, + TopToRight: 105, + TopToLeft: 106, + TopToFront: 103, + TopToBack: 104, + BottomToRight: 205, + BottomToLeft: 206, + BottomToFront: 203, + BottomToBack: 204, + FrontToTop: 301, + FrontToBottom: 302, + FrontToRight: 305, + FrontToLeft: 306, + BackToTop: 401, + BackToBottom: 402, + BackToRight: 405, + BackToLeft: 406, + RightToTop: 501, + RightToBottom: 502, + RightToFront: 503, + RightToBack: 504, + LeftToTop: 601, + LeftTopBottom: 602, + LeftTopFront: 603, + LeftTopBack: 604 + }, Fc = { + DirectionalLight: "directional", + AmbientLight: "ambient", + PointLight: "point", + SpotLight: "spot" + }, Kc = { + Clear: 0, + Add: 1, + Remove: 2 + }, Qc = { + Geometry: 1, + Marker3d: 2, + Room: 3, + ExternalComponent: 4, + UnPickable: 0 + }, Rc = { + ON_LOAD_START: "ON_LOAD_START", + ON_LOAD_PROGRESS: "ON_LOAD_PROGRESS", + ON_LOAD_COMPLETE: "ON_LOAD_COMPLETE", + ON_DEMAND_LOAD_COMPLETE: "ON_DEMAND_LOAD_COMPLETE", + ON_LOAD_EMPTY_SCENE: "ON_LOAD_EMPTY_SCENE", + ON_LOAD_CONFIG_FINISH: "ON_LOAD_CONFIG_FINISH", + ON_LOAD_INVALID_SCENE: "ON_LOAD_INVALID_SCENE", + ON_LOAD_INVALID_DATA: "ON_LOAD_INVALID_DATA", + ON_NETWORK_ERROR: "ON_NETWORK_ERROR", + ACCOUNT_NO_EXIST: "ACCOUNT_NO_EXIST", + NO_PERMISSION: "NO_PERMISSION", + ON_LOAD_ERROR: "ON_LOAD_ERROR", + ON_SELECTION_CHANGED: "ON_SELECTION_CHANGED", + ON_RECTPICK_ADD: "ON_RECTPICK_ADD", + ON_RECTPICK_REMOVE: "ON_RECTPICK_REMOVE", + ON_CLICK_PICK: "ON_CLICK_PICK", + ON_HOVER_PICK: "ON_HOVER_PICK", + ON_MEASURE_PICK: "ON_MEASURE_PICK", + ON_SELECTION_FAILED: "ON_SELECTION_FAILED", + ON_CLIP_HOVER: "ON_CLIP_HOVER", + ON_HOVER_SNAP: "ON_HOVER_SNAP", + ON_CLIP_MOUSE_MOVE: "ON_CLIP_MOUSE_MOVE", + ON_CLIP_MOUSE_DOWN: "ON_CLIP_MOUSE_DOWN", + ON_VERSION_NO_MATCH: "ON_VERSION_NO_MATCH", + ON_VIEWER_RESTORED: "ON_VIEWER_RESTORED", + ON_CAMERA_HEIGHT_CHANGED: "ON_CAMERA_HEIGHT_CHANGED", + ON_CAMERA_CHANGED_AND_RENDERED: "ON_CAMERA_CHANGED_AND_RENDERED", + ON_DATABASE_OPEN: "ON_DATABASE_OPEN", + ON_DATABASE_CLOSE: "ON_DATABASE_CLOSE", + ON_DATABASE_ADD: "ON_DATABASE_ADD", + ON_DATABASE_DELETE: "ON_DATABASE_DELETE", + ON_DATABASE_CLERA: "ON_DATABASE_CLERA", + ON_DATABASE_EEEOR: "ON_DATABASE_EEEOR", + BEFORE_RESETSCENE: "BEFORE_RESETSCENE", + AFTER_RESETSCENE: "AFTER_RESETSCENE", + ON_CAMERA_CHANGE: "ON_CAMERA_CHANGE", + ON_CONTROL_ENTER: "ON_CONTROL_ENTER", + ON_CONTROL_EXIST: "ON_CONTROL_EXIST", + ON_POINTERLOCK_EXIST: "ON_POINTERLOCK_EXIST", + ON_CONTROL_BEGIN: "ON_CONTROL_BEGIN", + ON_CONTROL_END: "ON_CONTROL_END", + ON_CONTROL_ZOOM: "ON_CONTROL_ZOOM", + ON_CONTROL_UPDATEUI: "ON_CONTROL_UPDATEUI", + ON_CONTROL_KEYDOWN: "ON_CONTROL_KEYDOWN", + ON_CONTROL_KEYUP: "ON_CONTROL_KEYUP", + ON_CAMERA_ANIMATION_UPDATE: "ON_CAMERA_ANIMATION_UPDATE", + ON_MOUSE_DRAGGED: "ON_MOUSE_DRAGGED" + }, Tc = { + LOAD_COMPONENT_ERROR: "LOAD_COMPONENT_ERROR", + LOAD_MATERIAL_ERROR: "LOAD_MATERIAL_ERROR", + LOAD_GEOMETRY_ERROR: "LOAD_GEOMETRY_ERROR", + LOAD_COMPONENTNODE_ERROR: "LOAD_COMPONENTNODE_ERROR", + LOAD_TEXTURE_ERROR: "LOAD_TEXTURE_ERROR", + LOAD_AXISNET_ERROR: "LOAD_AXISNET_ERROR", + LOAD_FLOORINFO_ERROR: "LOAD_FLOORINFO_ERROR", + PARSEFAILE: "PARSEFAILE", + PARSING: "PARSING", + IS2D: "IS2D", + LOAD_ERROR: "LOAD_ERROR", + SCENE_NOT_CLOSE: "SCENE_NOT_CLOSE", + SCENE_NOTHING_TO_LOAD: "SCENE_NOTHING_TO_LOAD", + LOAD_SCENE_ERROR: "LOAD_SCENE_ERROR", + LOAD_SYMBOL_ERROR: "LOAD_SYMBOL_ERROR", + LOAD_OCTREEINNER_ERROR: "LOAD_OCTREEINNER_ERROR", + LOAD_OCTREEOUTER_ERROR: "LOAD_OCTREEOUTER_ERROR", + LOAD_USERID_ERROR: "LOAD_USERID_ERROR", + LOAD_USERDATA_ERROR: "LOAD_USERDATA_ERROR", + LOAD_CAMERA_ERROR: "LOAD_CAMERA_ERROR", + LOAD_MPK_ERROR: "LOAD_MPK_ERROR", + LOAD_IBLCONFIG_ERROR: "LOAD_IBLCONFIG_ERROR" + }, kc = { + MOUSEPOINT: 0, + SELECTION: 1, + CENTER: 2, + CAMERA: 3 + }, Dc = { + FILE_VISIBLE: 0, + FILE_HIDDEN: 1, + SELECTED: 2, + VISIBLE: 3, + HIDDEN: 4, + TRANSLUCENT: 5, + TRANSLUCENT_OTHERS: 6, + WIREFRAME: 7, + COLORFUL: 8 + }, Lc = { + Visible: 1, + HideByIsolate: 2, + Transparent: 4, + TransparentByIsolate: 8 + }, Nc = { + HIDDEN: 0, + HIDDEN_OTHERS: 1, + TRANSLUCENT: 2, + TRANSLUCENT_OTHERS: 3 + }, Oc = { + TRANSLUCENT: "TRANSLUCENT", + OPAQUE: "OPAQUE" + }, Vc = { + DISABLED: 0, + TRANSLUCENT: 1, + HIDDEN: 2 + }, Gc = { + ORBIT: "orbit", + PICK: "pick", + PAN: "pan", + ZOOM: "zoom", + FLY: "fly", + WALK: "walk" + }, Pc = { + PICK_BY_RECT: "pickByRect", + ZOOM_BY_RECT: "zoomByRect", + CLIP_BY_BOX: "clipByBox", + CLIP_FILL: "fillClip", + PICK_BY_MEASURE: "pickByMeasure", + COMPONENT_TRANSFORM: "componentTransform" + }, qc = { + NONE: 0, + UP: 1, + DOWN: 2, + LEFT: 4, + RIGHT: 8, + FORWARD: 16, + BACK: 32 + }, jc = { + SHADING: 0, + BOARDLINE: 1, + SHADINGWITHLINE: 2 + }, Hc = { + HIDDEN: -1, + NONE: 0, + HOVER: 1, + SELECTED: 2, + OVERRIDED: 3, + TRANSPARENT: 4, + BLINK: 5 + }, Yc = { + NONE: 0, + BLINK: 1, + SELECT: 2 + }, Wc = { + AUTO: 0, + DEFAULT: 1, + MERGED: 2, + LAYER: 3, + LAYER_SCENE: 4 + }, Jc = { + MATCH_RETURN_TRUE: 0, + MATCH_RETURN_FALSE: 1, + NOMATCH_RETURN_TRUE: 2, + NOMATCH_RETURN_FALSE: 3 + }, zc = { + CLIPPING: -2, + HIDDEN: -1, + NONE: 0, + SELECTED: 1, + BLINK: 2, + HOVER: 3, + TRANSPARENT: 4, + OVERRIDED: 5 + }, Zc = { + RVT: "RVT", + IFC: "IFC", + I_MODEL: "I-MODEL", + THREE_DS: "3DS", + MERGE: "MERGE", + DAE: "DAE", + DWG: "DWG", + OBJ: "OBJ", + FBX: "FBX" + }, Xc = {}; + function _c(A, e, t, i) { + this._x = A || 0, + this._y = e || 0, + this._z = t || 0, + this._w = void 0 !== i ? i : 1 + } + function $c(A, e, t) { + this.x = A || 0, + this.y = e || 0, + this.z = t || 0 + } + Xc.clamp = function(A, e, t) { + return Math.max(e, Math.min(t, A)) + } + , + Xc.euclideanModulo = function(A, e) { + return (A % e + e) % e + } + , + Object.assign(_c, { + slerp: function(A, e, t, i) { + return t.copy(A).slerp(e, i) + }, + slerpFlat: function(A, e, t, i, o, n, r) { + var a = t[i + 0] + , s = t[i + 1] + , l = t[i + 2] + , c = t[i + 3] + , h = o[n + 0] + , d = o[n + 1] + , p = o[n + 2] + , g = o[n + 3]; + if (c !== g || a !== h || s !== d || l !== p) { + var u = 1 - r + , f = a * h + s * d + l * p + c * g + , m = 0 > f ? -1 : 1 + , C = 1 - f * f; + if (C > Number.EPSILON) { + var y = Math.sqrt(C) + , v = Math.atan2(y, f * m); + u = Math.sin(u * v) / y, + r = Math.sin(r * v) / y + } + var I = r * m; + if (a = a * u + h * I, + s = s * u + d * I, + l = l * u + p * I, + c = c * u + g * I, + u === 1 - r) { + var E = 1 / Math.sqrt(a * a + s * s + l * l + c * c); + a *= E, + s *= E, + l *= E, + c *= E + } + } + A[e] = a, + A[e + 1] = s, + A[e + 2] = l, + A[e + 3] = c + } + }), + Object.defineProperties(_c.prototype, { + x: { + get: function() { + return this._x + }, + set: function(A) { + this._x = A, + this._onChangeCallback() + } + }, + y: { + get: function() { + return this._y + }, + set: function(A) { + this._y = A, + this._onChangeCallback() + } + }, + z: { + get: function() { + return this._z + }, + set: function(A) { + this._z = A, + this._onChangeCallback() + } + }, + w: { + get: function() { + return this._w + }, + set: function(A) { + this._w = A, + this._onChangeCallback() + } + } + }), + Object.assign(_c.prototype, { + isQuaternion: !0, + set: function(A, e, t, i) { + return this._x = A, + this._y = e, + this._z = t, + this._w = i, + this._onChangeCallback(), + this + }, + clone: function() { + return new this.constructor(this._x,this._y,this._z,this._w) + }, + copy: function(A) { + return this._x = A.x, + this._y = A.y, + this._z = A.z, + this._w = A.w, + this._onChangeCallback(), + this + }, + setFromEuler: function(A, e) { + if (!A || !A.isEuler) + throw new Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order."); + var t = A._x + , i = A._y + , o = A._z + , n = A.order + , r = Math.cos + , a = Math.sin + , s = r(t / 2) + , l = r(i / 2) + , c = r(o / 2) + , h = a(t / 2) + , d = a(i / 2) + , p = a(o / 2); + return "XYZ" === n ? (this._x = h * l * c + s * d * p, + this._y = s * d * c - h * l * p, + this._z = s * l * p + h * d * c, + this._w = s * l * c - h * d * p) : "YXZ" === n ? (this._x = h * l * c + s * d * p, + this._y = s * d * c - h * l * p, + this._z = s * l * p - h * d * c, + this._w = s * l * c + h * d * p) : "ZXY" === n ? (this._x = h * l * c - s * d * p, + this._y = s * d * c + h * l * p, + this._z = s * l * p + h * d * c, + this._w = s * l * c - h * d * p) : "ZYX" === n ? (this._x = h * l * c - s * d * p, + this._y = s * d * c + h * l * p, + this._z = s * l * p - h * d * c, + this._w = s * l * c + h * d * p) : "YZX" === n ? (this._x = h * l * c + s * d * p, + this._y = s * d * c + h * l * p, + this._z = s * l * p - h * d * c, + this._w = s * l * c - h * d * p) : "XZY" === n && (this._x = h * l * c - s * d * p, + this._y = s * d * c - h * l * p, + this._z = s * l * p + h * d * c, + this._w = s * l * c + h * d * p), + !1 !== e && this._onChangeCallback(), + this + }, + setFromAxisAngle: function(A, e) { + var t = e / 2 + , i = Math.sin(t); + return this._x = A.x * i, + this._y = A.y * i, + this._z = A.z * i, + this._w = Math.cos(t), + this._onChangeCallback(), + this + }, + setFromRotationMatrix: function(A) { + var e, t = A.elements, i = t[0], o = t[4], n = t[8], r = t[1], a = t[5], s = t[9], l = t[2], c = t[6], h = t[10], d = i + a + h; + return d > 0 ? (e = .5 / Math.sqrt(d + 1), + this._w = .25 / e, + this._x = (c - s) * e, + this._y = (n - l) * e, + this._z = (r - o) * e) : i > a && i > h ? (e = 2 * Math.sqrt(1 + i - a - h), + this._w = (c - s) / e, + this._x = .25 * e, + this._y = (o + r) / e, + this._z = (n + l) / e) : a > h ? (e = 2 * Math.sqrt(1 + a - i - h), + this._w = (n - l) / e, + this._x = (o + r) / e, + this._y = .25 * e, + this._z = (s + c) / e) : (e = 2 * Math.sqrt(1 + h - i - a), + this._w = (r - o) / e, + this._x = (n + l) / e, + this._y = (s + c) / e, + this._z = .25 * e), + this._onChangeCallback(), + this + }, + setFromUnitVectors: function(A, e) { + var t = A.dot(e) + 1; + return 1e-6 > t ? (t = 0, + Math.abs(A.x) > Math.abs(A.z) ? (this._x = -A.y, + this._y = A.x, + this._z = 0, + this._w = t) : (this._x = 0, + this._y = -A.z, + this._z = A.y, + this._w = t)) : (this._x = A.y * e.z - A.z * e.y, + this._y = A.z * e.x - A.x * e.z, + this._z = A.x * e.y - A.y * e.x, + this._w = t), + this.normalize() + }, + angleTo: function(A) { + return 2 * Math.acos(Math.abs(Xc.clamp(this.dot(A), -1, 1))) + }, + rotateTowards: function(A, e) { + var t = this.angleTo(A); + if (0 === t) + return this; + var i = Math.min(1, e / t); + return this.slerp(A, i), + this + }, + inverse: function() { + return this.conjugate() + }, + conjugate: function() { + return this._x *= -1, + this._y *= -1, + this._z *= -1, + this._onChangeCallback(), + this + }, + dot: function(A) { + return this._x * A._x + this._y * A._y + this._z * A._z + this._w * A._w + }, + lengthSq: function() { + return this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w + }, + length: function() { + return Math.sqrt(this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w) + }, + normalize: function() { + var A = this.length(); + return 0 === A ? (this._x = 0, + this._y = 0, + this._z = 0, + this._w = 1) : (this._x = this._x * (A = 1 / A), + this._y = this._y * A, + this._z = this._z * A, + this._w = this._w * A), + this._onChangeCallback(), + this + }, + multiply: function(A, e) { + return void 0 !== e ? (console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."), + this.multiplyQuaternions(A, e)) : this.multiplyQuaternions(this, A) + }, + premultiply: function(A) { + return this.multiplyQuaternions(A, this) + }, + multiplyQuaternions: function(A, e) { + var t = A._x + , i = A._y + , o = A._z + , n = A._w + , r = e._x + , a = e._y + , s = e._z + , l = e._w; + return this._x = t * l + n * r + i * s - o * a, + this._y = i * l + n * a + o * r - t * s, + this._z = o * l + n * s + t * a - i * r, + this._w = n * l - t * r - i * a - o * s, + this._onChangeCallback(), + this + }, + slerp: function(A, e) { + if (0 === e) + return this; + if (1 === e) + return this.copy(A); + var t = this._x + , i = this._y + , o = this._z + , n = this._w + , r = n * A._w + t * A._x + i * A._y + o * A._z; + if (0 > r ? (this._w = -A._w, + this._x = -A._x, + this._y = -A._y, + this._z = -A._z, + r = -r) : this.copy(A), + r >= 1) + return this._w = n, + this._x = t, + this._y = i, + this._z = o, + this; + var a = 1 - r * r; + if (Number.EPSILON >= a) { + var s = 1 - e; + return this._w = s * n + e * this._w, + this._x = s * t + e * this._x, + this._y = s * i + e * this._y, + this._z = s * o + e * this._z, + this.normalize(), + this._onChangeCallback(), + this + } + var l = Math.sqrt(a) + , c = Math.atan2(l, r) + , h = Math.sin((1 - e) * c) / l + , d = Math.sin(e * c) / l; + return this._w = n * h + this._w * d, + this._x = t * h + this._x * d, + this._y = i * h + this._y * d, + this._z = o * h + this._z * d, + this._onChangeCallback(), + this + }, + equals: function(A) { + return A._x === this._x && A._y === this._y && A._z === this._z && A._w === this._w + }, + fromArray: function(A, e) { + return void 0 === e && (e = 0), + this._x = A[e], + this._y = A[e + 1], + this._z = A[e + 2], + this._w = A[e + 3], + this._onChangeCallback(), + this + }, + toArray: function(A, e) { + return void 0 === A && (A = []), + void 0 === e && (e = 0), + A[e] = this._x, + A[e + 1] = this._y, + A[e + 2] = this._z, + A[e + 3] = this._w, + A + }, + _onChange: function(A) { + return this._onChangeCallback = A, + this + }, + _onChangeCallback: function() {} + }), + Object.assign($c.prototype, { + isVector3: !0, + set: function(A, e, t) { + return this.x = A, + this.y = e, + this.z = t, + this + }, + setScalar: function(A) { + return this.x = A, + this.y = A, + this.z = A, + this + }, + setX: function(A) { + return this.x = A, + this + }, + setY: function(A) { + return this.y = A, + this + }, + setZ: function(A) { + return this.z = A, + this + }, + setComponent: function(A, e) { + switch (A) { + case 0: + this.x = e; + break; + case 1: + this.y = e; + break; + case 2: + this.z = e; + break; + default: + throw new Error("index is out of range: " + A) + } + return this + }, + getComponent: function(A) { + switch (A) { + case 0: + return this.x; + case 1: + return this.y; + case 2: + return this.z; + default: + throw new Error("index is out of range: " + A) + } + }, + clone: function() { + return new this.constructor(this.x,this.y,this.z) + }, + copy: function(A) { + return this.x = A.x, + this.y = A.y, + this.z = A.z, + this + }, + add: function(A, e) { + return void 0 !== e ? (console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."), + this.addVectors(A, e)) : (this.x += A.x, + this.y += A.y, + this.z += A.z, + this) + }, + addScalar: function(A) { + return this.x += A, + this.y += A, + this.z += A, + this + }, + addVectors: function(A, e) { + return this.x = A.x + e.x, + this.y = A.y + e.y, + this.z = A.z + e.z, + this + }, + addScaledVector: function(A, e) { + return this.x += A.x * e, + this.y += A.y * e, + this.z += A.z * e, + this + }, + sub: function(A, e) { + return void 0 !== e ? (console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."), + this.subVectors(A, e)) : (this.x -= A.x, + this.y -= A.y, + this.z -= A.z, + this) + }, + subScalar: function(A) { + return this.x -= A, + this.y -= A, + this.z -= A, + this + }, + subVectors: function(A, e) { + return this.x = A.x - e.x, + this.y = A.y - e.y, + this.z = A.z - e.z, + this + }, + multiply: function(A, e) { + return void 0 !== e ? (console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."), + this.multiplyVectors(A, e)) : (this.x *= A.x, + this.y *= A.y, + this.z *= A.z, + this) + }, + multiplyScalar: function(A) { + return this.x *= A, + this.y *= A, + this.z *= A, + this + }, + multiplyVectors: function(A, e) { + return this.x = A.x * e.x, + this.y = A.y * e.y, + this.z = A.z * e.z, + this + }, + applyEuler: (Mc = new _c, + function(A) { + return A && A.isEuler || console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order."), + this.applyQuaternion(Mc.setFromEuler(A)) + } + ), + applyAxisAngle: function() { + var A = new _c; + return function(e, t) { + return this.applyQuaternion(A.setFromAxisAngle(e, t)) + } + }(), + applyMatrix3: function(A) { + var e = this.x + , t = this.y + , i = this.z + , o = A.elements; + return this.x = o[0] * e + o[3] * t + o[6] * i, + this.y = o[1] * e + o[4] * t + o[7] * i, + this.z = o[2] * e + o[5] * t + o[8] * i, + this + }, + applyMatrix4: function(A) { + var e = this.x + , t = this.y + , i = this.z + , o = A.elements + , n = 1 / (o[3] * e + o[7] * t + o[11] * i + o[15]); + return this.x = (o[0] * e + o[4] * t + o[8] * i + o[12]) * n, + this.y = (o[1] * e + o[5] * t + o[9] * i + o[13]) * n, + this.z = (o[2] * e + o[6] * t + o[10] * i + o[14]) * n, + this + }, + applyQuaternion: function(A) { + var e = this.x + , t = this.y + , i = this.z + , o = A.x + , n = A.y + , r = A.z + , a = A.w + , s = a * e + n * i - r * t + , l = a * t + r * e - o * i + , c = a * i + o * t - n * e + , h = -o * e - n * t - r * i; + return this.x = s * a + h * -o + l * -r - c * -n, + this.y = l * a + h * -n + c * -o - s * -r, + this.z = c * a + h * -r + s * -n - l * -o, + this + }, + project: function(A) { + return this.applyMatrix4(A.matrixWorldInverse).applyMatrix4(A.projectionMatrix) + }, + unproject: function(A) { + return this.applyMatrix4(A.projectionMatrixInverse).applyMatrix4(A.matrixWorld) + }, + transformDirection: function(A) { + var e = this.x + , t = this.y + , i = this.z + , o = A.elements; + return this.x = o[0] * e + o[4] * t + o[8] * i, + this.y = o[1] * e + o[5] * t + o[9] * i, + this.z = o[2] * e + o[6] * t + o[10] * i, + this.normalize() + }, + divide: function(A) { + return this.x /= A.x, + this.y /= A.y, + this.z /= A.z, + this + }, + divideScalar: function(A) { + return this.multiplyScalar(1 / A) + }, + min: function(A) { + return this.x = Math.min(this.x, A.x), + this.y = Math.min(this.y, A.y), + this.z = Math.min(this.z, A.z), + this + }, + max: function(A) { + return this.x = Math.max(this.x, A.x), + this.y = Math.max(this.y, A.y), + this.z = Math.max(this.z, A.z), + this + }, + clamp: function(A, e) { + return this.x = Math.max(A.x, Math.min(e.x, this.x)), + this.y = Math.max(A.y, Math.min(e.y, this.y)), + this.z = Math.max(A.z, Math.min(e.z, this.z)), + this + }, + clampScalar: function(A, e) { + return this.x = Math.max(A, Math.min(e, this.x)), + this.y = Math.max(A, Math.min(e, this.y)), + this.z = Math.max(A, Math.min(e, this.z)), + this + }, + clampLength: function(A, e) { + var t = this.length(); + return this.divideScalar(t || 1).multiplyScalar(Math.max(A, Math.min(e, t))) + }, + floor: function() { + return this.x = Math.floor(this.x), + this.y = Math.floor(this.y), + this.z = Math.floor(this.z), + this + }, + ceil: function() { + return this.x = Math.ceil(this.x), + this.y = Math.ceil(this.y), + this.z = Math.ceil(this.z), + this + }, + round: function() { + return this.x = Math.round(this.x), + this.y = Math.round(this.y), + this.z = Math.round(this.z), + this + }, + roundToZero: function() { + return this.x = 0 > this.x ? Math.ceil(this.x) : Math.floor(this.x), + this.y = 0 > this.y ? Math.ceil(this.y) : Math.floor(this.y), + this.z = 0 > this.z ? Math.ceil(this.z) : Math.floor(this.z), + this + }, + negate: function() { + return this.x = -this.x, + this.y = -this.y, + this.z = -this.z, + this + }, + dot: function(A) { + return this.x * A.x + this.y * A.y + this.z * A.z + }, + lengthSq: function() { + return this.x * this.x + this.y * this.y + this.z * this.z + }, + length: function() { + return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z) + }, + manhattanLength: function() { + return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z) + }, + normalize: function() { + return this.divideScalar(this.length() || 1) + }, + setLength: function(A) { + return this.normalize().multiplyScalar(A) + }, + lerp: function(A, e) { + return this.x += (A.x - this.x) * e, + this.y += (A.y - this.y) * e, + this.z += (A.z - this.z) * e, + this + }, + lerpVectors: function(A, e, t) { + return this.subVectors(e, A).multiplyScalar(t).add(A) + }, + cross: function(A, e) { + return void 0 !== e ? (console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."), + this.crossVectors(A, e)) : this.crossVectors(this, A) + }, + crossVectors: function(A, e) { + var t = A.x + , i = A.y + , o = A.z + , n = e.x + , r = e.y + , a = e.z; + return this.x = i * a - o * r, + this.y = o * n - t * a, + this.z = t * r - i * n, + this + }, + projectOnVector: function(A) { + var e = A.dot(this) / A.lengthSq(); + return this.copy(A).multiplyScalar(e) + }, + projectOnPlane: (wc = new $c, + function(A) { + return wc.copy(this).projectOnVector(A), + this.sub(wc) + } + ), + reflect: function() { + var A = new $c; + return function(e) { + return this.sub(A.copy(e).multiplyScalar(2 * this.dot(e))) + } + }(), + angleTo: function(A) { + var e = this.dot(A) / Math.sqrt(this.lengthSq() * A.lengthSq()); + return Math.acos(Xc.clamp(e, -1, 1)) + }, + distanceTo: function(A) { + return Math.sqrt(this.distanceToSquared(A)) + }, + distanceToSquared: function(A) { + var e = this.x - A.x + , t = this.y - A.y + , i = this.z - A.z; + return e * e + t * t + i * i + }, + manhattanDistanceTo: function(A) { + return Math.abs(this.x - A.x) + Math.abs(this.y - A.y) + Math.abs(this.z - A.z) + }, + setFromSpherical: function(A) { + return this.setFromSphericalCoords(A.radius, A.phi, A.theta) + }, + setFromSphericalCoords: function(A, e, t) { + var i = Math.sin(e) * A; + return this.x = i * Math.sin(t), + this.y = Math.cos(e) * A, + this.z = i * Math.cos(t), + this + }, + setFromCylindrical: function(A) { + return this.setFromCylindricalCoords(A.radius, A.theta, A.y) + }, + setFromCylindricalCoords: function(A, e, t) { + return this.x = A * Math.sin(e), + this.y = t, + this.z = A * Math.cos(e), + this + }, + setFromMatrixPosition: function(A) { + var e = A.elements; + return this.x = e[12], + this.y = e[13], + this.z = e[14], + this + }, + setFromMatrixScale: function(A) { + var e = this.setFromMatrixColumn(A, 0).length() + , t = this.setFromMatrixColumn(A, 1).length() + , i = this.setFromMatrixColumn(A, 2).length(); + return this.x = e, + this.y = t, + this.z = i, + this + }, + setFromMatrixColumn: function(A, e) { + return this.fromArray(A.elements, 4 * e) + }, + equals: function(A) { + return A.x === this.x && A.y === this.y && A.z === this.z + }, + fromArray: function(A, e) { + return void 0 === e && (e = 0), + this.x = A[e], + this.y = A[e + 1], + this.z = A[e + 2], + this + }, + toArray: function(A, e) { + return void 0 === A && (A = []), + void 0 === e && (e = 0), + A[e] = this.x, + A[e + 1] = this.y, + A[e + 2] = this.z, + A + }, + fromBufferAttribute: function(A, e, t) { + return void 0 !== t && console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute()."), + this.x = A.getX(e), + this.y = A.getY(e), + this.z = A.getZ(e), + this + } + }); + var Ah = [new $c, new $c, new $c, new $c, new $c, new $c, new $c, new $c] + , eh = new $c + , th = new $c + , ih = new $c + , oh = new $c + , nh = new $c + , rh = new $c + , ah = new $c + , sh = new $c + , lh = new $c + , ch = new $c + , hh = new $c; + function dh(A, e, t, i, o) { + var n, r = 0; + for (r = 0, + n = A.length - 3; n >= r; r += 3) { + hh.fromArray(A, r); + var a = o.x * Math.abs(hh.x) + o.y * Math.abs(hh.y) + o.z * Math.abs(hh.z) + , s = e.dot(hh) + , l = t.dot(hh) + , c = i.dot(hh); + if (Math.max(-Math.max(s, l, c), Math.min(s, l, c)) > a) + return !1 + } + return !0 + } + function ph(A, e) { + this.min = void 0 !== A ? A : new $c(1 / 0,1 / 0,1 / 0), + this.max = void 0 !== e ? e : new $c(-1 / 0,-1 / 0,-1 / 0) + } + var gh = new ph; + Object.assign(ph.prototype, { + isBox3: !0, + set: function(A, e) { + return this.min.copy(A), + this.max.copy(e), + this + }, + setFromArray: function(A) { + for (var e = 1 / 0, t = 1 / 0, i = 1 / 0, o = -1 / 0, n = -1 / 0, r = -1 / 0, a = 0, s = A.length; s > a; a += 3) { + var l = A[a] + , c = A[a + 1] + , h = A[a + 2]; + e > l && (e = l), + t > c && (t = c), + i > h && (i = h), + l > o && (o = l), + c > n && (n = c), + h > r && (r = h) + } + return this.min.set(e, t, i), + this.max.set(o, n, r), + this + }, + toArray: function(A) { + return void 0 === A && (A = []), + this.min.toArray(A), + this.max.toArray(A, 3), + A + }, + setFromBufferAttribute: function(A) { + for (var e = 1 / 0, t = 1 / 0, i = 1 / 0, o = -1 / 0, n = -1 / 0, r = -1 / 0, a = 0, s = A.count; s > a; a += 1) { + var l = A.getX(a) + , c = A.getY(a) + , h = A.getZ(a); + e > l && (e = l), + t > c && (t = c), + i > h && (i = h), + l > o && (o = l), + c > n && (n = c), + h > r && (r = h) + } + return this.min.set(e, t, i), + this.max.set(o, n, r), + this + }, + setFromPoints: function(A) { + this.makeEmpty(); + for (var e = 0, t = A.length; t > e; e += 1) + this.expandByPoint(A[e]); + return this + }, + setFromCenterAndSize: function(A, e) { + var t = eh.copy(e).multiplyScalar(.5); + return this.min.copy(A).sub(t), + this.max.copy(A).add(t), + this + }, + setFromObject: function(A) { + return this.makeEmpty(), + this.expandByObject(A) + }, + clone: function() { + return (new this.constructor).copy(this) + }, + copy: function(A) { + return this.min.copy(A.min), + this.max.copy(A.max), + this + }, + makeEmpty: function() { + return this.min.x = this.min.y = this.min.z = 1 / 0, + this.max.x = this.max.y = this.max.z = -1 / 0, + this + }, + isEmpty: function() { + return this.min.x > this.max.x || this.min.y > this.max.y || this.min.z > this.max.z + }, + getCenter: function(A) { + return void 0 === A && (console.warn("THREE.Box3: .getCenter() target is now required"), + A = new $c), + this.isEmpty() ? A.set(0, 0, 0) : A.addVectors(this.min, this.max).multiplyScalar(.5) + }, + getSize: function(A) { + return void 0 === A && (console.warn("THREE.Box3: .getSize() target is now required"), + A = new $c), + this.isEmpty() ? A.set(0, 0, 0) : A.subVectors(this.max, this.min) + }, + expandByPoint: function(A) { + return this.min.min(A), + this.max.max(A), + this + }, + expandByVector: function(A) { + return this.min.sub(A), + this.max.add(A), + this + }, + expandByScalar: function(A) { + return this.min.addScalar(-A), + this.max.addScalar(A), + this + }, + expandByObject: function(A) { + A.updateWorldMatrix(!1, !1); + var e = A.geometry; + void 0 !== e && (null === e.boundingBox && e.computeBoundingBox(), + gh.copy(e.boundingBox), + gh.applyMatrix4(A.matrixWorld), + this.union(gh)); + for (var t = A.children, i = 0, o = t.length; o > i; i += 1) + this.expandByObject(t[i]); + return this + }, + containsPoint: function(A) { + return !(this.min.x > A.x || A.x > this.max.x || this.min.y > A.y || A.y > this.max.y || this.min.z > A.z || A.z > this.max.z) + }, + containsBox: function(A) { + return !(this.min.x > A.min.x || A.max.x > this.max.x || this.min.y > A.min.y || A.max.y > this.max.y || this.min.z > A.min.z || A.max.z > this.max.z) + }, + getParameter: function(A, e) { + return void 0 === e && (console.warn("THREE.Box3: .getParameter() target is now required"), + e = new $c), + e.set((A.x - this.min.x) / (this.max.x - this.min.x), (A.y - this.min.y) / (this.max.y - this.min.y), (A.z - this.min.z) / (this.max.z - this.min.z)) + }, + intersectsBox: function(A) { + return !(this.min.x > A.max.x || A.min.x > this.max.x || this.min.y > A.max.y || A.min.y > this.max.y || this.min.z > A.max.z || A.min.z > this.max.z) + }, + intersectsSphere: function(A) { + return this.clampPoint(A.center, eh), + eh.distanceToSquared(A.center) <= A.radius * A.radius + }, + intersectsPlane: function(A) { + var e = null + , t = null; + return A.normal.x > 0 ? (e = A.normal.x * this.min.x, + t = A.normal.x * this.max.x) : (e = A.normal.x * this.max.x, + t = A.normal.x * this.min.x), + A.normal.y > 0 ? (e += A.normal.y * this.min.y, + t += A.normal.y * this.max.y) : (e += A.normal.y * this.max.y, + t += A.normal.y * this.min.y), + A.normal.z > 0 ? (e += A.normal.z * this.min.z, + t += A.normal.z * this.max.z) : (e += A.normal.z * this.max.z, + t += A.normal.z * this.min.z), + -A.constant >= e && t >= -A.constant + }, + intersectsTriangle: function(A) { + if (this.isEmpty()) + return !1; + this.getCenter(sh), + lh.subVectors(this.max, sh), + th.subVectors(A.a, sh), + ih.subVectors(A.b, sh), + oh.subVectors(A.c, sh), + nh.subVectors(ih, th), + rh.subVectors(oh, ih), + ah.subVectors(th, oh); + var e = [0, -nh.z, nh.y, 0, -rh.z, rh.y, 0, -ah.z, ah.y, nh.z, 0, -nh.x, rh.z, 0, -rh.x, ah.z, 0, -ah.x, -nh.y, nh.x, 0, -rh.y, rh.x, 0, -ah.y, ah.x, 0]; + return !!dh(e, th, ih, oh, lh) && (!!dh(e = [1, 0, 0, 0, 1, 0, 0, 0, 1], th, ih, oh, lh) && (ch.crossVectors(nh, rh), + dh(e = [ch.x, ch.y, ch.z], th, ih, oh, lh))) + }, + clampPoint: function(A, e) { + return void 0 === e && (console.warn("THREE.Box3: .clampPoint() target is now required"), + e = new $c), + e.copy(A).clamp(this.min, this.max) + }, + distanceToPoint: function(A) { + return eh.copy(A).clamp(this.min, this.max).sub(A).length() + }, + getBoundingSphere: function(A) { + return void 0 === A && console.error("THREE.Box3: .getBoundingSphere() target is now required"), + this.getCenter(A.center), + A.radius = .5 * this.getSize(eh).length(), + A + }, + intersect: function(A) { + return this.min.max(A.min), + this.max.min(A.max), + this.isEmpty() && this.makeEmpty(), + this + }, + union: function(A) { + return this.min.min(A.min), + this.max.max(A.max), + this + }, + applyMatrix4: function(A) { + return this.isEmpty() || (Ah[0].set(this.min.x, this.min.y, this.min.z).applyMatrix4(A), + Ah[1].set(this.min.x, this.min.y, this.max.z).applyMatrix4(A), + Ah[2].set(this.min.x, this.max.y, this.min.z).applyMatrix4(A), + Ah[3].set(this.min.x, this.max.y, this.max.z).applyMatrix4(A), + Ah[4].set(this.max.x, this.min.y, this.min.z).applyMatrix4(A), + Ah[5].set(this.max.x, this.min.y, this.max.z).applyMatrix4(A), + Ah[6].set(this.max.x, this.max.y, this.min.z).applyMatrix4(A), + Ah[7].set(this.max.x, this.max.y, this.max.z).applyMatrix4(A), + this.setFromPoints(Ah)), + this + }, + translate: function(A) { + return this.min.add(A), + this.max.add(A), + this + }, + equals: function(A) { + return A.min.equals(this.min) && A.max.equals(this.max) + } + }); + var uh = { + MinusEpsilon: -1e-6, + byteArr2Int: function(A) { + return (255 & A[0]) << 24 | (255 & A[1]) << 16 | (255 & A[2]) << 8 | (255 & A[3]) << 0 + }, + int2ByteArr: function(A) { + var e = []; + return e[0] = A >> 24, + e[1] = A >> 16, + e[2] = A >> 8, + e[3] = A >> 0, + e + }, + isPlainObject: function(A) { + var e, t; + return !(!A || "[object Object]" !== Object.prototype.toString.call(A)) && (!(e = Object.getPrototypeOf(A)) || "function" == typeof (t = Object.hasOwnProperty.call(e, "constructor") && e.constructor) && Object.hasOwnProperty.toString.call(t) === Object.hasOwnProperty.toString.call(Object)) + }, + extend: function() { + var A = null + , e = null + , t = null + , i = null + , o = null + , n = null + , r = arguments[0] || {} + , a = 1 + , s = arguments.length + , l = !1; + for ("boolean" == typeof r && (l = r, + r = arguments[a] || {}, + a += 1), + "object" !== lc(r) && "function" === !lc(r) && (r = {}), + a === s && (r = this, + a -= 1); s > a; a += 1) + if (null !== (A = arguments[a]) && void 0 !== (A = arguments[a])) + for (e in A) + t = r[e], + r !== (i = A[e]) && (l && i && (uh.isPlainObject(i) || (o = Array.isArray(i))) ? (o ? (o = !1, + n = t && Array.isArray(t) ? t : []) : n = t && uh.isPlainObject(t) ? t : {}, + r[e] = uh.extend(l, n, i)) : null != i && (r[e] = i)); + return r + }, + supportWorker: function() { + return "undefined" != typeof Worker || (console.log("Web Worker is not supported."), + !1) + }, + box3FromArray: function(A, e) { + if (Array.isArray(A)) { + var t = e || new ph; + return t.min.fromArray(A, 0), + t.max.fromArray(A, 3), + t + } + return null + }, + box3FromArrayRange: function(A, e, t) { + for (var i = new ph, o = Number(1 / 0), n = Number(1 / 0), r = Number(1 / 0), a = -1 / 0, s = -1 / 0, l = -1 / 0, c = e, h = t; h > c; c += 3) { + var d = A[c] + , p = A[c + 1] + , g = A[c + 2]; + o > d && (o = d), + n > p && (n = p), + r > g && (r = g), + d > a && (a = d), + p > s && (s = p), + g > l && (l = g) + } + return i.min.set(o, n, r), + i.max.set(a, s, l), + i + }, + box3FromObject: function(A, e, t) { + if (void 0 !== A && void 0 !== e && void 0 !== A.x && void 0 !== A.y && void 0 !== A.z && void 0 !== e.x && void 0 !== e.y && void 0 !== e.z) { + var i = t || new ph; + return i.min.set(A.x, A.y, A.z), + i.max.set(e.x, e.y, e.z), + i + } + return null + }, + computeBBox: function(A) { + for (var e = new ph, t = new $c, i = 0, o = A.length; o > i; i += 1) + t.fromArray(A[i], 0), + e.expandByPoint(t); + return e + }, + mergeBBox: function(A) { + if (1 > A.length) + return null; + for (var e = new ph, t = new $c, i = new $c, o = new ph, n = 0, r = A.length; r > n; n += 1) + t.set(A[n].max.x, A[n].max.y, A[n].max.z), + i.set(A[n].min.x, A[n].min.y, A[n].min.z), + o.set(i, t), + e.union(o); + return e + }, + parseTransform: function(A, e, t) { + var i = !1; + if (e.rotation && (A.rotation.fromArray(e.rotation), + i = !0), + e.position && (A.position.fromArray(e.position), + i = !0), + e.scale && (A.scale.fromArray(e.scale), + i = !0), + e.quaternion && (A.quaternion.fromArray(e.quaternion), + i = !0), + i && A.updateMatrix(), + e.matrix && A.matrix.fromArray(e.matrix), + t) { + var o = A.matrix.clone(); + o.multiplyMatrices(t, A.matrix), + A.matrix = o + } + A.matrixAutoUpdate = !1, + void 0 !== A.boundingBox && (A.boundingBox = uh.box3FromArray(e.bbox)) + }, + isEmptyObject: function(A) { + if (!A) + return !0; + if (A.length > 0) + return !1; + if (0 === A.length) + return !0; + for (var e in A) + if (A.hasOwnProperty(e)) + return !1; + return !0 + }, + isEmptyObjectSimple: function(A) { + for (var e in A) + return !1; + return !0 + }, + isOwnEmptyObject: function(A) { + for (var e in A) + if (A.hasOwnProperty(e)) + return !1; + return !0 + }, + hexStrToRgb: function(A) { + var e = A.replace("#", "") + , t = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e); + return t ? { + r: parseInt(t[1], 16) / 255, + g: parseInt(t[2], 16) / 255, + b: parseInt(t[3], 16) / 255 + } : null + }, + hexToRgb: function(A) { + var e = {}; + return e.r = (A >> 16 & 255) / 255, + e.g = (A >> 8 & 255) / 255, + e.b = (255 & A) / 255, + e + }, + getMin: function(A) { + for (var e = A.length, t = 1 / 0; (e -= 1) >= 0; ) + t = t > A[e] ? A[e] : t; + return t + }, + getMax: function(A) { + for (var e = A.length, t = -1 / 0; (e -= 1) >= 0; ) + t = A[e] > t ? A[e] : t; + return t + }, + findRange: function(A, e) { + if (e < Math.min.apply(null, A)) + return 0; + if (e > Math.max.apply(null, A)) + return A.length - 1; + for (var t = 0, i = 0, o = A.length; o > i; i += 1) + if (A[i] > e) { + t = i - 1; + break + } + return t + }, + stringToByte: function(A) { + for (var e = [], t = A.length, i = null, o = 0; t > o; o += 1) + 65536 > (i = A.charCodeAt(o)) || i > 1114111 ? 2048 > i || i > 65535 ? 128 > i || i > 2047 ? e.push(255 & i) : (e.push(i >> 6 & 31 | 192), + e.push(63 & i | 128)) : (e.push(i >> 12 & 15 | 224), + e.push(i >> 6 & 63 | 128), + e.push(63 & i | 128)) : (e.push(i >> 18 & 7 | 240), + e.push(i >> 12 & 63 | 128), + e.push(i >> 6 & 63 | 128), + e.push(63 & i | 128)); + return e + }, + byteToString: function(A) { + if ("string" == typeof A) + return A; + for (var e = "", t = A, i = 0; t.length > i; i += 1) { + var o = t[i].toString(2) + , n = o.match(/^1+?(?=0)/); + if (n && 8 === o.length) { + for (var r = n[0].length, a = t[i].toString(2).slice(7 - r), s = 1; r > s; s += 1) + a += t[s + i].toString(2).slice(2); + e += String.fromCharCode(parseInt(a, 2)), + i += r - 1 + } else + e += String.fromCharCode(t[i]) + } + return e + }, + strToBinary: function(A) { + for (var e = [], t = A.split(""), i = 0; t.length > i; i += 1) { + 0 !== i && e.push(" "); + var o = t[i].charCodeAt().toString(2); + e.push(o) + } + return e.join("") + }, + binaryToStr: function(A) { + for (var e = [], t = A.split(" "), i = 0; t.length > i; i += 1) { + var o = parseInt(t[i], 2) + , n = String.fromCharCode(o); + e.push(n) + } + return e.join("") + }, + isMirror: function(A) { + var e = new $c(A[0],A[1],A[2]) + , t = new $c(A[4],A[5],A[6]) + , i = new $c(A[8],A[9],A[10]); + return 0 > (new $c).crossVectors(e, t).dot(i) + }, + decodeUTF8: function(A) { + for (var e = "", t = 0; A.length > t; t += 1) + e += String.fromCharCode(A[t]); + return decodeURIComponent(escape(e)) + }, + unique: function(A) { + for (var e, t = [], i = {}, o = 0; null !== (e = A[o]) && void 0 !== (e = A[o]); o += 1) + i[e] || (t.push(e), + i[e] = !0); + return i = null, + t + }, + getValue: function(A, e) { + var t = e.split(".") + , i = A; + return t.map((function(A, e) { + i = i[A] + } + )), + i + }, + sortByName: function(A, e, t) { + t = t || "asc"; + var i = !1; + e ? e.indexOf(".") > -1 && (i = !0) : e = "name", + A = A.sort((function(A, o) { + if (i) { + var n = uh.getValue(A, e) + , r = uh.getValue(o, e); + return "asc" === t ? n.localeCompare(r) : r.localeCompare(n) + } + return "asc" === t ? A[e].localeCompare(o[e]) : o[e].localeCompare(A[e]) + } + )); + var o = [] + , n = [] + , r = [] + , a = []; + return A.map((function(A, t) { + var s = null; + s = i ? uh.getValue(A, e) : A[e], + /^[a-zA-Z]*$/.test(s.slice(0, 1)) ? o.push(A) : /^[\u4e00-\u9fa5]*$/.test(s.slice(0, 1)) ? n.push(A) : /^\d+(\.\d+)?$/.test(s.slice(0, 1)) ? r.push(A) : a.push(A) + } + )), + a.concat(r, o, n) + }, + PointToLineDistance: function(A, e, t, i, o, n) { + var r = void 0 + , a = void 0 + , s = void 0 + , l = void 0 + , c = Math.sqrt((t - A) * (t - A) + (i - e) * (i - e)); + if (0 === c) + return [0, { + x: t, + y: i + }]; + var h = Math.sqrt((o - A) * (o - A) + (n - e) * (n - e)); + if (0 === h) + return [0, { + x: o, + y: n + }]; + var d = Math.sqrt((t - o) * (t - o) + (i - n) * (i - n)); + if (0 === d) + return [c, { + x: t, + y: i + }]; + if (h > c) { + if (i === n ? r = o > t ? 0 : Math.PI : ((l = (o - t) / d) - 1 > 1e-5 && (l = 1), + r = Math.acos(l), + i > n && (r = 2 * Math.PI - r)), + (l = (A - t) / c) - 1 > 1e-5 && (l = 1), + a = Math.acos(l), + i > e && (a = 2 * Math.PI - a), + 0 > (s = a - r) && (s = -s), + s > Math.PI && (s = 2 * Math.PI - s), + s > Math.PI / 2) + return [c, { + x: t, + y: i + }]; + if (t === o) + return [h * Math.sin(s), { + x: t, + y: e + }]; + if (i === n) + return [h * Math.sin(s), { + x: A, + y: i + }]; + var p, g, u = (n - i) / o - t, f = -1 / u, m = e - A * f; + return g = f * (p = (n - o * u - m) / (f - u)) + m, + [c * Math.sin(s), { + x: p, + y: g + }] + } + if (i === n ? r = o > t ? Math.PI : 0 : ((l = (t - o) / d) - 1 > 1e-5 && (l = 1), + r = Math.acos(l), + n > i && (r = 2 * Math.PI - r)), + (l = (A - o) / h) - 1 > 1e-5 && (l = 1), + a = Math.acos(l), + n > e && (a = 2 * Math.PI - a), + 0 > (s = a - r) && (s = -s), + s > Math.PI && (s = 2 * Math.PI - s), + s > Math.PI / 2) + return [h, { + x: o, + y: n + }]; + if (t === o) + return [h * Math.sin(s), { + x: t, + y: e + }]; + if (i === n) + return [h * Math.sin(s), { + x: A, + y: i + }]; + var C, y, v = (n - i) / o - t, I = -1 / v, E = e - A * I; + return y = I * (C = (n - o * v - E) / (I - v)) + E, + [h * Math.sin(s), { + x: C, + y: y + }] + }, + freezeObject: function(A) { + return Object.freeze ? Object.freeze(A) : A + }, + getEncodedId: function(A) { + return A + }, + arrayToMap: function(A, e) { + e = e || {}; + for (var t = 0, i = A.length; i > t; t += 1) + e[A[t]] = !0; + return e + }, + getDifferentialIdxs: function(A, e) { + var t = null + , i = {} + , o = {} + , n = {}; + if (e) + if (this.isEmptyObject(A)) + o = e; + else { + for (t in e) + A[t] && (n[t] = !0); + if (this.isEmptyObject(n)) + i = A, + o = e; + else { + for (t in e) + n[t] || (o[t] = !0); + for (t in A) + n[t] || (i[t] = !0) + } + } + else + this.isEmptyObject(A) || (i = A); + return { + objCurrUsedIdxs: A, + addIdxs: Object.keys(i), + removeIdxs: Object.keys(o) + } + }, + getCombinedKeyString: function(A, e) { + return A.join(e = e || "&") + }, + splitCombinedKeyString: function(A, e) { + return A.split(e = e || "&") + }, + getModelKeyFromComponentKey: function(A) { + return A.split("_")[0] + }, + isGroupObject: function(A) { + return !(!A.children || !A.children.length) + }, + isMeshObject: function(A) { + return !!(A.isMesh || A.isLine || A.isPoints) + }, + asyncProcess: function(A, e, t, i, o) { + requestAnimationFrame(function n(r) { + var a = r; + return function() { + var r = null + , s = null; + for (s = a + t > e ? e : a + t, + r = a; s > r; r += 1) { + i && i(A, r), + r === s - 1 && (s !== e ? requestAnimationFrame(n(r + 1)) : o && o(A)) + } + } + }(0)) + }, + hasSimilarProperty: function(A, e) { + if (!(A instanceof Object && e instanceof Object)) + return !1; + for (var t in A) + if (A.hasOwnProperty(t) && !e.hasOwnProperty(t)) + return !1; + return !0 + }, + equalsWithEpsilon: function(A, e) { + var t = Math.abs(A.x - e.x) + , i = Math.abs(A.y - e.y) + , o = Math.abs(A.z - e.z); + return 1e-7 >= t && 1e-7 >= i && 1e-7 >= o + }, + arrayMax: function(A) { + if (0 === A.length) + return -1 / 0; + for (var e = A[0], t = 1, i = A.length; i > t; t += 1) + A[t] > e && (e = A[t]); + return e + }, + arrayMin: function(A) { + if (0 === A.length) + return 1 / 0; + for (var e = A[0], t = 1, i = A.length; i > t; t += 1) + e > A[t] && (e = A[t]); + return e + }, + ab2str: function(A) { + return (new TextDecoder).decode(new Uint8Array(A)) + }, + str2ab: function(A) { + return (new TextEncoder).encode(A).buffer + } + }; + uh.createUUID = function() { + for (var A = [], e = 0; 36 > e; e += 1) + A[e] = "0123456789abcdef".substr(Math.floor(16 * Math.random()), 1); + return A[14] = "4", + A[19] = "0123456789abcdef".substr(3 & A[19] | 8, 1), + A[8] = A[13] = A[18] = A[23] = "-", + A.join("") + } + ; + var fh = { + "zh-cn": { + YourGraphicsCardDoesNotSeemToSupportWebGL: "您的显卡似乎不支持WebGL", + YourBrowserDoesNotSeemToSupportWebGL: "您的浏览器似乎不支持WebGL", + FindOutHowToGetItHere: "您可以在这里查看相关信息", + SectionBoxLockHint: "请在使用此方法之前调用enableSectionBox。", + APIAxisLockHint: "The API supports AxisOption.Z only for now." + }, + en: { + YourGraphicsCardDoesNotSeemToSupportWebGL: "Your graphics card does not seem to support WebGL", + YourBrowserDoesNotSeemToSupportWebGL: "Your browser does not seem to support WebGL", + FindOutHowToGetItHere: "Find out how to get it here", + SectionBoxLockHint: "Please call enableSectionBox before using this method.", + APIAxisLockHint: "The API supports AxisOption.Z only for now." + } + } + , mh = { + getAndroidVersion: function(A) { + var e = (A = A || navigator.userAgent).match(/Android\s([0-9.]*)/); + return !!e && e[1] + }, + isTouchDevice: function() { + return "undefined" != typeof window && "ontouchstart"in window + }, + isBrowser: function() { + return "undefined" != typeof navigator + }, + isIE11: function() { + return mh.isBrowser() && Boolean(navigator.userAgent.match(/Edge|Trident\/7\./)) + }, + isIOSDevice: function() { + return !!mh.isBrowser() && /ip(ad|hone|od)/.test(navigator.userAgent.toLowerCase()) + }, + isAndroidDevice: function() { + return !!mh.isBrowser() && -1 !== navigator.userAgent.toLowerCase().indexOf("android") + }, + isMobileDevice: function() { + return !!mh.isBrowser() && (mh.isIOSDevice() || mh.isAndroidDevice()) + }, + isSafari: function() { + if (!mh.isBrowser()) + return !1; + var A = navigator.userAgent.toLowerCase(); + return -1 !== A.indexOf("safari") && -1 === A.indexOf("chrome") + }, + isFirefox: function() { + return !!mh.isBrowser() && -1 !== navigator.userAgent.toLowerCase().indexOf("firefox") + }, + isChrome: function() { + return !!mh.isBrowser() && -1 !== navigator.userAgent.toLowerCase().indexOf("chrome") + }, + isMac: function() { + return !!mh.isBrowser() && -1 !== navigator.userAgent.toLowerCase().indexOf("mac os") + }, + isLinux: function() { + return !!mh.isBrowser() && -1 !== navigator.userAgent.toLowerCase().indexOf("linux x86_64") + }, + isWindows: function() { + if (!mh.isBrowser()) + return !1; + var A = navigator.userAgent.toLowerCase(); + return -1 !== A.indexOf("win32") || -1 !== A.indexOf("windows") + }, + isWindowsPhone: function() { + var A = navigator.userAgent.toLowerCase(); + return /(?:Windows Phone)/.test(A) + }, + isSymbian: function() { + var A = navigator.userAgent.toLowerCase(); + return /(?:SymbianOS)/.test(A) || mh.isWindowsPhone() + }, + isTablet: function() { + var A = navigator.userAgent.toLowerCase(); + return /(?:iPad|PlayBook)/.test(A) || mh.isAndroidDevice() && !/(?:Mobile)/.test(A) || mh.isFirefox() && /(?:Tablet)/.test(A) + }, + isPc: function() { + return !mh.isMobileDevice() && !mh.isTablet() && !mh.isSymbian() + }, + isOpera: function() { + return navigator.userAgent.indexOf("Opera") > -1 + } + }; + mh.isSafari(); + mh.detectWebGL = function() { + if (window.WebGLRenderingContext) { + for (var A = document.createElement("canvas"), e = ["webgl", "experimental-webgl"], t = !1, i = 0; e.length > i; i += 1) + try { + if ((t = A.getContext(e[i])) && "function" == typeof t.getParameter) + return 1 + } catch (A) {} + return 0 + } + return -1 + } + , + mh.detectWebGL2 = function() { + if (window.WebGL2RenderingContext) { + for (var A = document.createElement("canvas"), e = ["webgl2"], t = !1, i = 0; e.length > i; i += 1) + try { + if ((t = A.getContext(e[i])) && "function" == typeof t.getParameter) + return 1 + } catch (A) {} + return 0 + } + return -1 + } + , + mh.showWebGLMessage = function(A, e, t) { + var i, o = null, n = null; + o = void 0 !== (t = t || {}).parent ? t.parent : document.body, + i = void 0 !== t.id ? t.id : "oldie", + (n = mh.getWebGLErrorMessage(A, e)).id = i, + o.appendChild(n) + } + , + mh.language = function() { + return (navigator.browserLanguage || navigator.language).toLowerCase() + } + , + mh.getWebGLErrorMessage = function(A, e) { + var t = document.createElement("div"); + t.id = "webgl-error-message", + t.style.fontSize = "16px", + t.style.fontWeight = "normal", + t.style.textAlign = "center", + t.style.background = "#f4c8c8", + t.style.color = "#000", + t.style.padding = "1.5em", + t.style.width = "400px", + t.style.position = "absolute", + t.style.left = document.body.clientWidth / 2 - 224 + "px"; + var i = document.body.clientHeight / 2 - 45; + return 0 > i && (i = 0), + t.style.top = i + "px", + e || (e = "zh-cn"), + 0 === A ? t.innerHTML = [' ' + fh[e].YourGraphicsCardDoesNotSeemToSupportWebGL + ".
", ' ' + fh[e].FindOutHowToGetItHere + "."].join("\n") : -1 === A && (t.innerHTML = ['' + fh[e].YourBrowserDoesNotSeemToSupportWebGL + ".
", '' + fh[e].FindOutHowToGetItHere + "."].join("\n")), + t + } + , + mh.isSupportIndexedDB = function() { + return window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB + } + , + mh.isSupportWorker = function() { + return window.Worker + } + ; + var Ch = { + DEBUG: 6, + PERFORMANCE: 5, + LOG: 4, + INFO: 3, + WARNING: 2, + ERROR: 1, + NONE: 0 + } + , yh = {} + , vh = function(A) { + yh[A] ? console.warn("Timer '" + A + "' already exists") : yh[A] = Date.now() + } + , Ih = function(A) { + yh[A] ? (console.warn(A + ":", Date.now() - yh[A], "ms"), + delete yh[A]) : console.warn("Timer '" + A + "' does not exist") + }; + function Eh() { + this.level = -1, + this.setLevel(Ch.LOG) + } + Eh.prototype.setLevel = function(A) { + if (this.level !== A) { + this.level = A; + var e = function() {} + , t = Ch + , i = this; + this.debug = t.DEBUG > A ? e : console.debug.bind(console), + this.trace = t.DEBUG > A ? e : console.trace.bind(console), + this.assert = t.DEBUG > A ? e : console.assert.bind(console), + this.count = t.DEBUG > A ? e : console.count.bind(console), + this.dir = t.DEBUG > A ? e : console.dir.bind(console), + this.time = t.PERFORMANCE > A ? e : vh, + this.timeEnd = t.PERFORMANCE > A ? e : Ih, + this.log = t.LOG > A ? e : console.log.bind(console), + this.info = t.INFO > A ? e : console.info.bind(console), + this.warn = t.WARNING > A ? e : console.warn.bind(console), + this.error = t.ERROR > A ? e : function() { + if (i.callback) { + var A = Array.prototype.slice.call(arguments).join(" "); + i.callback({ + category: "error", + message: A + }, { + adp: !1 + }) + } + console.error.apply(console, arguments) + } + } + } + ; + var Bh = new Eh + , xh = { + splitStr: function(A) { + return A.trim().split(/\s+/g) + }, + getClientHeight: function() { + return document.body.clientHeight && document.documentElement.clientHeight ? document.body.clientHeight < document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.clientHeight : document.body.clientHeight > document.documentElement.clientHeight ? document.body.clientHeight : document.documentElement.clientHeight + }, + getClientWidth: function() { + return document.body.clientWidth && document.documentElement.clientWidth ? document.body.clientWidth < document.documentElement.clientWidth ? document.body.clientWidth : document.documentElement.clientWidth : document.body.clientWidth > document.documentElement.clientWidth ? document.body.clientWidth : document.documentElement.clientWidth + }, + getDomOffsetToClient: function(A) { + var e, t = null; + if (A !== document) { + var i = (e = A).getBoundingClientRect ? function(A) { + var e = A.getBoundingClientRect() + , t = document.body + , i = document.documentElement + , o = e.left - (i.clientLeft || t.clientLeft); + return { + top: Math.round(e.top - (i.clientTop || t.clientTop)), + left: Math.round(o) + } + }(e) : function(A) { + for (var e = 0, t = 0; A; ) + e += A.offsetTop, + t += A.offsetLeft, + A = A.offsetParent; + var i = document.body + , o = document.documentElement; + return { + top: e -= window.pageYOffset || o.scrollTop || i.scrollTop, + left: t -= window.pageXOffset || o.scrollLeft || i.scrollLeft + } + }(e); + t = { + width: A.offsetWidth, + height: A.offsetHeight, + left: i.left, + top: i.top + } + } else + t = { + width: window.innerWidth, + height: window.innerHeight, + left: 0, + top: 0 + }; + return t + }, + setClassName: function(A, e) { + var t = document.getElementById(A); + t && (t.className = e) + }, + addClassName: function(A, e) { + var t = null + , i = null + , o = null + , n = null + , r = null + , a = document.getElementById(A); + if (a && (i = a, + e && "string" == typeof e && (t = e.split(/\s+/), + 1 === i.nodeType))) + if (i.className || 1 !== t.length) { + for (o = " " + i.className + " ", + n = 0, + r = t.length; r > n; n += 1) + 0 > o.indexOf(" " + t[n] + " ") && (o += t[0] + " "); + i.className = String.trim(o) + } else + i.className = e + }, + removeClassName: function(A, e) { + var t = null + , i = null + , o = null + , n = null + , r = null + , a = document.getElementById(A); + if (a && (o = a, + e && "string" == typeof e && (t = (e || "").split(/\s+/), + 1 === o.nodeType && o.className))) { + for (i = (" " + o.className + " ").replace(0, " "), + n = 0, + r = t.length; r > n; n += 1) + for (; i.indexOf(" " + t[n] + " ") >= 0; ) + i = i.replace(" " + t[n] + " ", " "); + o.className = e ? String.trim(i) : "" + } + }, + showOrHideElement: function(A, e) { + var t = document.getElementById(A); + t && (t.style.display = e ? "" : "none") + }, + getStyleString: function(A) { + var e = []; + for (var t in A) { + var i = A[t]; + e.push(t), + e.push(":"), + e.push(i), + e.push("; ") + } + return e.join("") + }, + cloneStyle: function(A) { + var e = {}; + for (var t in A) + e[t] = A[t]; + return e + }, + removeStyleAttribute: function(A, e) { + Array.isArray(e) || (e = [e]), + e.forEach((function(e) { + e in A && delete A[e] + } + )) + }, + trimRight: function(A) { + if (0 === A.length) + return ""; + for (var e = A.length - 1, t = e; t >= 0; t -= 1) + if (" " !== A.charAt(t)) { + e = t; + break + } + return A.substr(0, e + 1) + }, + trimLeft: function(A) { + if (0 === A.length) + return ""; + for (var e = 0, t = 0; A.length > t; t += 1) + if (" " !== A.charAt(t)) { + e = t; + break + } + return A.substr(e) + }, + trim: function(A) { + return A.replace(/(^\s*)|(\s*$)/g, "") + }, + matchesSelector: function(A, e) { + if (A.matches) + return A.matches(e); + if (A.matchesSelector) + return A.matchesSelector(e); + if (A.webkitMatchesSelector) + return A.webkitMatchesSelector(e); + if (A.msMatchesSelector) + return A.msMatchesSelector(e); + if (A.mozMatchesSelector) + return A.mozMatchesSelector(e); + if (A.oMatchesSelector) + return A.oMatchesSelector(e); + if (A.querySelectorAll) { + for (var t = (A.document || A.ownerDocument).querySelectorAll(e), i = 0; t[i] && void 0 !== t[i]; ) + i += 1; + return !!t[i] + } + return !1 + }, + toTranslate3d: function(A, e) { + return "translate3d(" + A + "px," + e + "px,0)" + }, + setCursorStyle: function(A, e) { + var t = null; + switch (e) { + case "n": + case "s": + t = "ns-resize"; + break; + case "w": + case "e": + t = "ew-resize"; + break; + case "ne": + case "sw": + t = "nesw-resize"; + break; + case "nw": + case "se": + t = "nwse-resize" + } + A.style.cursor = t + }, + css: function(A, e) { + for (var t = A.getAttribute("style") || "", i = Object.keys(e), o = t.split(";"), n = [], r = 0, a = o.length; a > r; r += 1) { + "" !== (s = o[r]) ? n.push(s.replace(/:.+/, "")) : o.splice(r, 1) + } + for (r = 0, + a = i.length; a > r; r += 1) { + var s = i[r] + , l = -1; + o.map((function(A, e) { + return A.indexOf(s) > -1 && (l = e), + null + } + )), + l > -1 ? o[l] = s + ":" + e[s] : o.push(s + ":" + e[s]) + } + var c = o.join(";"); + A.setAttribute("style", c + ";") + }, + append: function(A, e) { + if ("string" == typeof e) { + var t = document.createElement("div"); + t.innerHTML = e; + for (var i = document.createDocumentFragment(); t.firstChild; ) + i.appendChild(t.firstChild); + A.appendChild(i) + } else + A.appendChild(e) + }, + scrollTop: function(A, e) { + var t = A.scrollTop; + if (t > e) + var i = setInterval((function() { + var t = A.scrollTop + , o = Math.floor(-t / 6); + A.scrollTop = t = o + t, + A.scrollTop > e || (A.scrollTop = A.scrollTop = e, + clearTimeout(i)) + } + ), 20); + else if (0 === t) + var o = setInterval((function() { + var i = A.scrollTop + , n = Math.floor(70); + A.scrollTop = i = n + i, + t > A.scrollTop && (A.scrollTop = e, + clearTimeout(o)) + } + ), 20); + else if (e > t) + var n = setInterval((function() { + var i = A.scrollTop + , o = Math.floor(i / 6); + A.scrollTop = i = o + i, + t > A.scrollTop && (A.scrollTop = e, + clearTimeout(n)) + } + ), 20); + else if (e === t) + return !1 + }, + closest: function(A, e) { + if (!A) + return null; + for (var t = A.matches || A.webkitMatchesSelector || A.mozMatchesSelector || A.msMatchesSelector; A && !t.call(A, e); ) + A = A.parentElement; + return A + }, + addEventListener: function(A, e, t) { + if (A) + if (A.length) + for (var i = 0; A.length > i; i += 1) + A[i].addEventListener(e, (function(A) { + t && "function" == typeof t && t(A) + } + )); + else + A.addEventListener(e, (function(A) { + t && "function" == typeof t && t(A) + } + )) + }, + remove: function(A) { + if (A) + if (A.removeNode = [], + void 0 !== A.length) { + for (var e = A.length, t = 0; e > t; t += 1) + A.removeNode.push({ + parent: A[t].parentNode, + inner: A[t].outerHTML, + next: A[t].nextSibling + }); + for (t = 0; e > t; t += 1) + A[0].parentNode.removeChild(A[0]) + } else + A.removeNode.push({ + parent: A.parentNode, + inner: A.outerHTML, + next: A.nextSibling + }), + A.parentNode.removeChild(A) + }, + getStyleValue: function(A, e) { + var t = A.ownerDocument.defaultView; + return t && t.opener || (t = window), + A.currentStyle ? A.currentStyle[e] : t.getComputedStyle(A)[e] + }, + isShow: function(A) { + return "none" !== this.getStyleValue(A, "display") + }, + getHeight: function(A) { + if (null != A) { + if (this.isShow(A)) { + if (null != A.style.height && A.style.height.length > 0) + return parseFloat(A.style.height); + if (parseFloat(this.getStyleValue(A, "height")) > 0) + return parseFloat(this.getStyleValue(A, "height")); + if (A.offsetHeight > 0) { + var e = this.getStyleValue(A, "borderTopWidth") + , t = this.getStyleValue(A, "borderBottomWidth") + , i = this.getStyleValue(A, "paddingTop") + , o = this.getStyleValue(A, "paddingBottom") + , n = parseFloat(A.offsetHeight) - parseFloat(e) - parseFloat(t) - parseFloat(i) - parseFloat(o); + return parseFloat(n) + } + return 0 + } + var r = A.getAttribute("style") || ""; + A.setAttribute("style", r + "visibility:hidden;display:block !important;"); + var a = this.getHeight(A); + return A.setAttribute("style", r), + Math.ceil(a) + } + }, + getWidth: function(A) { + if (null != A) { + if (this.isShow(A)) { + if (null != A.style.width && A.style.width.length > 0) + return parseFloat(A.style.width); + if (parseFloat(this.getStyleValue(A, "width")) > 0) + return parseFloat(this.getStyleValue(A, "width")); + if (A.offsetWidth > 0) { + var e = this.getStyleValue(A, "borderLeftWidth") + , t = this.getStyleValue(A, "borderRightWidth") + , i = this.getStyleValue(A, "paddingLeft") + , o = this.getStyleValue(A, "paddingRight") + , n = parseFloat(A.offsetWidth) - parseFloat(e) - parseFloat(t) - parseFloat(i) - parseFloat(o); + return parseFloat(n) + } + return 0 + } + var r = A.getAttribute("style") || ""; + A.setAttribute("style", r + "visibility:hidden;display:inline-block !important;"); + var a = this.getWidth(A); + return A.setAttribute("style", r), + Math.ceil(a) + } + }, + outerHeight: function(A, e) { + var t = A.offsetHeight; + if (e) { + var i = A.currentStyle || getComputedStyle(A); + t += parseInt(i.marginTop, 0) + parseInt(i.marginBottom, 0) + } + return t + }, + outerWidth: function(A, e) { + var t = A.offsetWidth; + if (e) { + var i = A.currentStyle || getComputedStyle(A); + t += parseInt(i.marginLeft, 0) + parseInt(i.marginRight, 0) + } + return t + }, + isEmptyObject: function(A) { + var e = null; + for (e in A) + return !1; + return !0 + }, + hasClass: function(A, e) { + if (A) { + var t = A.className.match && A.className.match(new RegExp("(\\s|^)" + e + "(\\s|$)")); + return Boolean(t) + } + return !1 + }, + addClass: function(A, e) { + A && (this.hasClass(A, e) || (A.className += " " + e)) + }, + removeClass: function(A, e) { + if (this.hasClass(A, e)) { + var t = new RegExp("(\\s|^)" + e + "(\\s|$)"); + A.className = A.className.replace(t, " ") + } + }, + toggleClass: function(A, e) { + this.hasClass(A, e) ? this.removeClass(A, e) : this.addClass(A, e) + }, + simulateEvent: function(A, e) { + var t = document.createEvent("Event"); + t.initEvent(e, !0, !0); + A.dispatchEvent(t) + }, + bind: function(A, e, t) { + A && (A.addEventListener ? A.addEventListener(e, t, !1) : A.attachEvent ? A.attachEvent("on" + e, t) : A["on" + e] = t) + }, + delegate: function(A, e, t, i) { + if (A) + if (A.length) + for (var o = 0; A.length > o; o += 1) + this.delegateFn(A[o], e, t, i); + else + this.delegateFn(A, e, t, i) + }, + delegateFn: function(A, e, t, i) { + var o = this; + function n(A) { + var n = (A = A || window.event).target || A.srcElement; + o.matchSelector(n, e) && i && ("mouseenter" === t || "mouseleave" === t ? o.fixedMouse(A, n) && i.call(n, A) : i.call(n, A)) + } + t = t.toLowerCase(), + A.addEventListener ? A.addEventListener("mouseenter" === t ? "mouseover" : "mouseleave" === t ? "mouseout" : t, n) : A.attachEvent("mouseenter" === t ? "onmouseover" : "mouseleave" === t ? "onmouseout" : "on" + t, n) + }, + matchSelector: function(A, e) { + return "#" === e.charAt(0) ? A.id === e.slice(1) : "." === e.charAt(0) ? -1 !== (" " + A.className + " ").indexOf(" " + e.slice(1) + " ") : A.tagName.toLowerCase() === e.toLowerCase() + }, + contains: function(A, e) { + return A.contains ? A !== e && A.contains(e) : Boolean(16 & A.compareDocumentPosition(e)) + }, + fixedMouse: function(A, e) { + var t = null + , i = A.type.toLowerCase(); + if ("mouseover" === i) + t = A.relatedTarget || A.fromElement; + else { + if ("mouseout" !== i) + return !0; + t = A.relatedTarget || A.toElement + } + return t && "xul" !== t.prefix && !this.contains(e, t) && t !== e + }, + fireEvent: function(A, e) { + var t = null; + if (A.ownerDocument) + t = A.ownerDocument; + else { + if (9 !== A.nodeType) + throw new Error("Invalid node passed to fireEvent: " + A.id); + t = A + } + if (A.dispatchEvent) { + var i = ""; + switch (e) { + case "click": + case "mousedown": + case "mouseup": + i = "MouseEvents"; + break; + case "focus": + case "change": + case "blur": + case "select": + i = "HTMLEvents"; + break; + default: + Bh.error("fireEvent: Couldn't find an event class for event '" + e + "'.") + } + (o = t.createEvent(i)).initEvent(e, "change" !== e, !0), + o.synthetic = !0, + A.dispatchEvent(o, !0) + } else if (A.fireEvent) { + var o; + (o = t.createEventObject()).synthetic = !0, + A.fireEvent("on" + e, o) + } + } + }; + xh.create = function(A, e) { + var t = document.createElement(A); + return t.setAttribute("class", e), + t + } + ; + xh.createNS = function(A, e) { + var t = document.createElementNS("http://www.w3.org/2000/svg", A); + return t.setAttribute("class", e), + t + } + ; + xh.select = function(A) { + return A.indexof("#") ? document.getElementById(A.replace("#", "")) : A.indexof(".") ? document.getElementsByClassName(A.replace(".", "")) : document.getElementsByTagName(A) + } + ; + var Sh = function(A) { + if ("" === A) + return 0; + if ("string" == typeof A) { + if (-1 === A.indexOf("px")) { + var e = Number(A); + return isNaN(e) ? 0 : e + } + var t = A.split("px") + , i = Number(t[0]); + return isNaN(i) ? 0 : i + } + return 0 + }; + xh.drag = function(A) { + var e = mh.isPc() + , t = Object.assign({ + element: null, + handle: null, + axis: "all", + cursor: "move", + distance: 0, + start: null, + move: null, + stop: null + }, A) + , i = t.element; + if (!i) + return !1; + var o = t.handle || i + , n = void 0 + , r = !1 + , a = function(A) { + if (e) + var o = { + x: A.clientX, + y: A.clientY + }; + else + o = { + x: A.touches[0].clientX, + y: A.touches[0].clientY + }; + var a = { + x: o.x - n.x, + y: o.y - n.y + }; + r ? (t.move && t.move(n, o, a), + n = o, + function(A) { + var e = i.offsetLeft + , o = i.offsetTop + , n = Sh(getComputedStyle(i).marginLeft) + , r = Sh(getComputedStyle(i).marginTop) + , a = 0 > (e -= n) + A.x ? 0 : e + A.x + , s = 0 > (o -= r) + A.y ? 0 : o + A.y; + switch (t.axis) { + case "x": + i.style.left = a + "px"; + break; + case "y": + i.style.top = s + "px"; + break; + case "all": + default: + i.style.left = a + "px", + i.style.top = s + "px" + } + }(a)) : r = function(A) { + return Math.pow(A.x, 2) + Math.pow(A.y, 2) > Math.pow(t.distance, 2) && (t.start && t.start(n), + !0) + }(a) + } + , s = function(A) { + var i, r, s = A; + if (e) { + if (i = s.button, + !((r = navigator.userAgent).indexOf("compatible") > -1 && r.indexOf("MSIE") > -1 && !mh.isOpera() ? 1 === i : 0 === i)) + return; + n = { + x: s.clientX, + y: s.clientY + }, + document.addEventListener("mousemove", a) + } else + n = { + x: s.touches[0].clientX, + y: s.touches[0].clientY + }, + o.addEventListener("touchmove", a); + t.start && t.start(n) + } + , l = function() { + r && t.end && t.end(n), + r = !1, + document.removeEventListener("mousemove", a), + o.removeEventListener("touchmove", a) + }; + e ? (o.style.cursor = t.cursor, + o.style.userSelect = "none", + o.addEventListener("mousedown", s), + document.addEventListener("mouseup", l)) : (o.addEventListener("touchend", l), + o.addEventListener("touchstart", s)) + } + ; + xh.sizable = function(A) { + var e = Object.assign({ + element: null, + axis: "all", + minWidth: 100, + minHeight: 100, + distance: 0, + start: null, + sizable: null, + stop: null + }, A) + , t = e.element; + if (!t) + return !1; + var i = void 0 + , o = !1 + , n = xh.create("div", "yj-resize") + , r = void 0 + , a = void 0 + , s = function(A) { + var n = { + x: A.clientX, + y: A.clientY + } + , s = { + x: n.x - i.x, + y: n.y - i.y + }; + o ? (e.sizable && e.sizable(i, n, s), + function(A) { + var i = t.offsetLeft + , o = t.offsetTop + , n = e.minWidth > r + A.x ? e.minWidth : r + A.x + , s = e.minHeight > a + A.y ? e.minHeight : a + A.y; + switch (e.resize && e.resize(n, s), + t.style.left = i + "px", + t.style.top = o + "px", + e.axis) { + case "x": + t.style.width = n + "px"; + break; + case "y": + t.style.height = s + "px"; + break; + case "all": + default: + t.style.width = n + "px", + t.style.height = s + "px" + } + }(s)) : o = function(A) { + return Math.pow(A.x, 2) + Math.pow(A.y, 2) > Math.pow(e.distance, 2) && (e.start && e.start(i), + !0) + }(s) + } + , l = function(A) { + r = t.clientWidth, + a = t.clientHeight; + var e, o, n = A; + (e = n.button, + (o = navigator.userAgent).indexOf("compatible") > -1 && o.indexOf("MSIE") > -1 && !mh.isOpera() ? 1 === e : 0 === e) && (i = { + x: n.clientX, + y: n.clientY + }, + document.addEventListener("mousemove", s), + document.addEventListener("touchmove", s)) + } + , c = function() { + o && e.end && e.end(i), + o = !1, + document.removeEventListener("mousemove", s), + document.removeEventListener("touchmove", s) + }; + xh.addClass(t, "yj-sizable"), + t.appendChild(n), + n.addEventListener("mousedown", l), + n.addEventListener("touchstart", l), + document.addEventListener("mouseup", c), + document.addEventListener("touchend", c) + } + ; + var wh = function(A) { + var e = this + , t = Object.assign({ + element: null, + min: 0, + max: 100, + cur: 50, + step: 1, + isShowProgress: !0, + input: null, + change: null, + currentColor: "#11dab7", + defaultColor: "#999" + }, A); + this._opt = t; + var i = xh.create("div", "yj-range") + , o = xh.create("input", "yj-input-range"); + e.input = o, + o.setAttribute("type", "range"), + o.setAttribute("step", t.step), + o.setAttribute("min", t.min), + o.setAttribute("max", t.max), + o.setAttribute("value", t.cur); + var n = xh.create("span", "yj-range-min"); + n.innerText = t.min; + var r = xh.create("span", "yj-range-cur"); + e.cur = r, + r.innerText = t.cur; + var a = xh.create("span", "yj-range-max"); + a.innerText = t.max; + var s = xh.create("span", "yj-range-progress"); + i.appendChild(o), + t.isShowProgress && (i.appendChild(n), + i.appendChild(r), + i.appendChild(a)), + i.appendChild(s), + t.element.appendChild(i), + e.setProgress(t.cur), + o.addEventListener("input", (function() { + e.setProgress(this.value), + t.input && t.input(this.value) + } + )), + o.addEventListener("change", (function() { + e.setProgress(this.value), + t.change && t.change(this.value) + } + )) + }; + wh.prototype.setProgress = function(A) { + var e = this._opt + , t = this.input + , i = this.cur + , o = (A - e.min) / (e.max - e.min) * 100; + t.value = A, + t.style.background = "linear-gradient(to right," + e.currentColor + " 0%," + e.currentColor + " " + o + "%," + e.defaultColor + " " + o + "%, " + e.defaultColor + " 100%)", + i.innerText = A + } + , + wh.prototype.reset = function() { + this.setProgress(this._opt.cur) + } + , + xh.range = wh; + var Mh = function(A) { + this._opt = Object.assign({ + element: null, + min: 0, + max: 100, + from: null, + to: null, + step: 1, + currentColor: "#11dab7", + defaultColor: "#999", + change: null + }, A), + this._opt.from = this._opt.from || this._opt.min, + this._opt.to = this._opt.to || this._opt.max, + this.init() + }; + Mh.prototype = { + init: function() { + var A = xh.create("div", "yj-multiple-range") + , e = xh.create("div", "yj-range-track") + , t = xh.create("span", "yj-slider yj-slider-min"); + t.id = "minSlider", + t.type = "minimum"; + var i = xh.create("span", "yj-slider yj-slider-max"); + i.id = "maxSlider", + i.type = "maximum", + this._state = { + from: this._opt.from, + to: this._opt.to + }, + e.style.backgroundColor = this._opt.currentColor, + A.style.backgroundColor = this._opt.defaultColor, + A.appendChild(e), + A.appendChild(t), + A.appendChild(i), + this._opt.element.appendChild(A), + this._track = e, + this._sliders = { + min: t, + max: i + }, + this._element = A, + this.bindEvent(), + this.update(!1) + }, + bindEvent: function() { + var A = this + , e = !1 + , t = null + , i = null + , o = function(A) { + A = A || event; + i = A.screenX, + t = this, + e = !0 + }; + this._sliders.min.addEventListener("mousedown", o), + this._sliders.max.addEventListener("mousedown", o), + document.addEventListener("mousemove", (function(o) { + if (e) { + o = o || event; + var n = Math.round((o.screenX - i) / A._pix / A._opt.step) * A._opt.step; + 0 !== n && (i = n * A._pix + i, + "minimum" === t.type ? A._state.from += n : A._state.to += n, + A.recalculate(t), + A.update(!0)) + } + } + )), + document.addEventListener("mouseup", (function() { + t = null, + e = !1 + } + )) + }, + update: function(A) { + var e = this._sliders.min.offsetWidth + , t = this._sliders.max.offsetWidth; + this._pix || (this._pix = (this._element.offsetWidth - e - t) / (this._opt.max - this._opt.min)); + var i = (this._state.from - this._opt.min) * this._pix + , o = (this._state.to - this._opt.min) * this._pix + e + t; + this._track.style.left = i + e / 2 + "px", + this._track.style.width = o - i - e / 2 - t / 2 + "px", + this._sliders.min.style.left = i + "px", + this._sliders.max.style.left = o + "px", + this._opt.change && A && this._opt.change(this._state) + }, + recalculate: function(A) { + this._opt.max > this._state.to || (this._state.to = this._opt.max), + this._state.from > this._opt.min || (this._state.from = this._opt.min), + A && ("maximum" === A.type && (this._state.to > this._state.from || (this._state.to = this._state.from)), + "minimum" === A.type && (this._state.to > this._state.from || (this._state.from = this._state.to))) + }, + getProgress: function() { + return this._state + }, + setProgress: function(A) { + this._state = A, + this.recalculate(), + this.update(!1) + } + }, + xh.multipleRange = Mh; + var bh = function() { + var A = this; + Math.randomString = function(A) { + for (var e = "", t = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", i = 0; A > i; i += 1) + e += t.charAt(Math.floor(Math.random() * t.length)); + return e + } + , + A.viewport = document.body, + A.counter = 0, + A.prompt = function(A, e) { + return new t(A,e) + } + , + A.confirm = function(A) { + return new i(A) + } + , + A.progress = function(A) { + return new n(A) + } + , + A.error = {}, + A.success = {}, + A.warning = {}, + A.info = {}, + A.alert = function(A, e) { + if (["success", "error", "warning", "info"].indexOf(A) > -1) + return new o(A,e) + } + , + A.window = function(A) { + return new r("window",A) + } + ; + var e = { + $type: null, + $el: null, + $options: null, + debug: function() { + this.$options.debug && window.console.debug.apply(window.console, arguments) + }, + _processInput: function(e) { + if (Array.isArray(e.buttons)) { + for (var t = {}, i = 0; e.buttons.length > i; i += 1) + t[e.buttons[i]] = A.base.OPTIONS.buttons[e.buttons[i]]; + e.buttons = t + } + for (var i in e.customBtnClass = e.customBtnClass ? e.customBtnClass : A.base.DEFAULTS.customBtnClass, + e.buttons) + if (e.buttons.hasOwnProperty(i)) { + var o = e.buttons[i]; + (o = uh.extend(!0, {}, A.base.OPTIONS.buttons[i], o)).class || (o.class = e.customBtnClass), + e.buttons[i] = o + } + return void 0 === (e = uh.extend(!0, {}, A.base.DEFAULTS, e)).showClass && (e.showClass = A.base.OPTIONS.showClass), + void 0 === e.hideClass && (e.hideClass = A.base.OPTIONS.hideClass), + void 0 === e.baseClass && (e.baseClass = A.base.OPTIONS.baseClass), + void 0 === e.delayToRemove && (e.delayToRemove = A.base.OPTIONS.delayToRemove), + e.iconClass || (e.iconClass = A.base.OPTIONS.icons[e.iconSource][this.$type]), + e + }, + _init: function() { + var A = this; + A._createMarkup(), + A.setTitle(A.$options.title), + A.$options.draggable && (A.$el.classList.add("draggable"), + A._enableDrag()), + A.$options.closeButton && A._addCloseButton(), + A.$options.closeOnEsc && document.addEventListener("keyup.lobibox", (function(e) { + 27 === e.which && A.destroy() + } + )), + A.$options.baseClass && A.$el.classList.add(A.$options.baseClass), + A.$options.showClass && (A.$el.classList.remove(A.$options.hideClass), + A.$el.classList.add(A.$options.showClass)), + A.$options.id && A.$el.setAttribute("id", A.$options.id), + A.$el.dataset.lobibox = A + }, + _calculatePosition: function(A) { + var e; + return e = "top" === A ? 30 : "bottom" === A ? window.outerHeight - xh.outerHeight(this.$el) - 30 : (window.outerHeight - xh.outerHeight(this.$el)) / 2, + "left:" + (window.outerWidth - xh.outerWidth(this.$el)) / 2 + "px;top:" + e + "px;" + }, + _createButton: function(A, e) { + var t = this + , i = document.createElement("button") + , o = []; + return e && e.class && (o = e.class.split(" ")), + o.map((function(A, e) { + i.classList.add(A) + } + )), + i.dataset.type = A, + i.innerHTML = e.text, + t.$options.callback && "function" == typeof t.$options.callback && i.addEventListener("click", (function(e) { + t._onButtonClick(t.$options.buttons[A], A), + t.$options.callback(t, this.dataset.type, e) + } + )), + i + }, + _onButtonClick: function(A, e) { + ("ok" === e && "prompt" === this.$type && this.isValid() || "prompt" !== this.$type || "ok" !== e) && A && A.closeOnClick && this.destroy() + }, + _generateButtons: function() { + var A = []; + for (var e in this.$options.buttons) + if (this.$options.buttons.hasOwnProperty(e)) { + var t = this._createButton(e, this.$options.buttons[e]); + A.push(t) + } + return A + }, + _createMarkup: function() { + var e = this + , t = document.createElement("div"); + t.className = "lobibox", + t.dataset.isModal = e.$options.modal, + t.dataset.backdrop = !!e.$options.backdrop; + var i = document.createElement("div"); + i.className = "lobibox-header", + t.appendChild(i); + var o = document.createElement("span"); + o.className = "lobibox-title", + i.appendChild(o); + var n = document.createElement("div"); + if (n.className = "lobibox-body", + t.appendChild(n), + e.$options.buttons && !uh.isEmptyObject(e.$options.buttons)) { + var r = document.createElement("div"); + r.className = "lobibox-footer", + e._generateButtons().map((function(A, e) { + r.appendChild(A) + } + )), + t.appendChild(r), + A.base.OPTIONS.buttonsAlign.indexOf(e.$options.buttonsAlign) > -1 && r.classList.add("text-" + e.$options.buttonsAlign) + } + t.classList.add(A.base.OPTIONS.modalClasses[e.$type]), + e.$el = t + }, + _setSize: function() { + var A = this; + A.setWidth(A.$options.width), + A.setHeight("auto" === A.$options.height ? xh.outerHeight(A.$el) : A.$options.height) + }, + _calculateBodyHeight: function(A) { + var e = this.$el.querySelector(".lobibox-header").outerHeight + , t = this.$el.querySelector(".lobibox-footer").outerHeight; + return A - (e || 0) - (t || 0) + }, + _addBackdrop: function() { + if (0 === document.querySelectorAll(".lobibox-backdrop").length) { + var e = document.createElement("div"); + e.className = "lobibox-backdrop", + A.viewport.appendChild(e) + } + }, + _removeBackdrop: function() { + for (var A = document.querySelectorAll(".lobibox-backdrop"), e = 0; A.length > e; e += 1) + A[e].remove() + }, + _triggerEvent: function(A) { + this.$options[A] && "function" == typeof this.$options[A] && this.$options[A](this) + }, + _calculateWidth: function(A) { + return (A = Math.min(Math.max(A, this.$options.width), window.outerWidth)) === window.outerWidth && (A -= 2 * this.$options.horizontalOffset), + A + }, + _calculateHeight: function(A) { + return (A = Math.min(Math.max(A, this.$options.height), window.outerHeight)) === window.outerHeight && (A -= 2 * this.$options.verticalOffset), + A + }, + _addCloseButton: function() { + var A = this + , e = document.createElement("span"); + e.className = "btn-close", + e.innerHTML = "×", + A.$el.querySelector(".lobibox-header").appendChild(e), + e.addEventListener("mousedown", (function(A) { + A.stopPropagation() + } + )), + e.addEventListener("click", (function() { + A.destroy() + } + )) + }, + _position: function() { + this._setSize(); + var A = this._calculatePosition(); + this.setPosition(A.left, A.top) + }, + _isMobileScreen: function() { + return 768 > window.outerHeight + }, + _enableDrag: function() { + var A = this.$el + , e = A.querySelector(".lobibox-header"); + e.addEventListener("mousedown", (function(e) { + e.preventDefault(), + A.setAttribute("offset-left", e.offsetX), + A.setAttribute("offset-top", e.offsetY), + A.setAttribute("allow-drag", "true") + } + )), + document.addEventListener("mouseup", (function() { + A.setAttribute("allow-drag", "false") + } + )), + document.addEventListener("mousemove", (function(e) { + if ("true" === A.getAttribute("allow-drag")) { + var t = e.clientX + , i = e.clientY; + 0 > i && (i = 5), + i > document.body.clientHeight && (i = document.body.clientHeight - 10), + 0 > t && (t = 5), + t > document.body.clientWidth - A.offsetWidth && (t = document.body.clientWidth - A.offsetWidth), + A.style.cssText += "left:" + t + "px;top:" + i + "px;" + } + } + )), + e.addEventListener("touchstart", (function(e) { + var t = A.style.top + , i = e.originalEvent.targetTouches[0].clientY; + A.setAttribute("offset-left", e.originalEvent.targetTouches[0].clientX - A.style.left), + A.setAttribute("offset-top", i - t), + A.setAttribute("allow-drag", "true") + } + )), + document.addEventListener("touchend", (function() { + A.setAttribute("allow-drag", "false") + } + )), + document.addEventListener("touchmove", (function(e) { + if ("true" === A.getAttribute("allow-drag")) { + var t = e.originalEvent.targetTouches[0].clientX + , i = e.originalEvent.targetTouches[0].clientY; + 0 > i && (i = 5), + i > document.body.clientHeight && (i = document.body.clientHeight - 10), + 0 > t && (t = 5), + t > document.body.clientWidth - A.offsetWidth && (t = document.body.clientWidth - A.offsetWidth), + A.style.cssText += "left:" + t + "px;top:" + i + "px;" + } + } + )) + }, + _setContent: function(A) { + return A && ("string" == typeof A && A.constructor == String ? this.$el.querySelector(".lobibox-body").innerHTML = A : this.$el.querySelector(".lobibox-body").appendChild(A)), + this + }, + _beforeShow: function() { + this._triggerEvent("onShow") + }, + _afterShow: function() { + var e = this; + A.counter++, + e.$el.setAttribute("data-nth", A.counter), + e.$options.draggable || window.addEventListener("resize.lobibox-" + e.$el.getAttribute("data-nth"), (function() { + e.refreshWidth(), + e.refreshHeight(), + e.$el.style.cssText += "left:50%;top:50%;margin-left:" + -e.$el.width / 2 + "px;margin-top:" + -e.$el.height / 2 + "px;" + } + )), + e._triggerEvent("shown") + }, + _beforeClose: function() { + this._triggerEvent("beforeClose") + }, + _afterClose: function() { + this.$options.draggable || window.removeEventListener("resize.lobibox-" + this.$el.getAttribute("data-nth")), + this._triggerEvent("closed") + }, + _beforeHide: function() { + this._triggerEvent("beforeHide") + }, + _afterHide: function() { + this._triggerEvent("afterHide") + }, + hide: function() { + var e = this; + function t() { + e.$el.classList.add("lobibox-hidden"); + for (var t = document.querySelectorAll(".lobibox"), i = [].slice.call(t), o = 0; i.length > o; o += 1) + !0 !== i[o].dataset.isModal && i.splice(o, 1); + for (o = 0; i.length > o; o += 1) + i[o].classList.contains("lobibox-hidden") && i.splice(o, 1); + if (0 === i.length) { + var n = document.querySelectorAll(".lobibox-backdrop"); + for (o = 0; n.length > o; o += 1) + A.viewport.removeChild(n[o]); + A.viewport.classList.remove(A.base.OPTIONS.bodyClass) + } + e._afterHide() + } + return e._beforeHide(), + e.$options.hideClass ? (e.$el.classList.remove(e.$options.showClass), + e.$el.classList.add(e.$options.hideClass), + setTimeout((function() { + t() + } + ), e.$options.delayToRemove)) : t(), + this + }, + destroy: function() { + var e = this; + function t() { + e.$el.remove(); + for (var t = document.querySelectorAll(".lobibox"), i = [].slice.call(t), o = 0; i.length > o; o += 1) + "true" !== i[o].dataset.isModal && i.splice(o, 1); + if (0 === i.length) { + var n = document.querySelectorAll(".lobibox-backdrop"); + for (o = 0; n.length > o; o += 1) + A.viewport.removeChild(n[o]); + A.viewport.classList.remove(A.base.OPTIONS.bodyClass) + } + var r = !1; + for (o = 0; i.length > o; o += 1) + if ("true" === i[o].dataset.backdrop) { + r = !0; + break + } + r || e._removeBackdrop(), + e._afterClose() + } + return e._beforeClose(), + e.$options.hideClass ? (xh.removeClass(e.$el, e.$options.showClass), + xh.addClass(e.$el, e.$options.hideClass), + setTimeout((function() { + t() + } + ), e.$options.delayToRemove)) : t(), + this + }, + setWidth: function(A) { + return this.$el.style.cssText += "width:" + this._calculateWidth(A) + "px;", + this + }, + refreshWidth: function() { + this.setWidth(this.$el.style.width) + }, + refreshHeight: function() { + this.setHeight(this.$el.style.height) + }, + setHeight: function(A) { + var e = this; + return e.$el.style.cssText += "height:" + e._calculateHeight(A) + "px", + e.$el.querySelector(".lobibox-body").style.cssText += "height:" + (e.$options.height - 41) + "px", + e + }, + setSize: function(A, e) { + return this.setWidth(A), + this.setHeight(e), + this + }, + setPosition: function(A, e) { + var t; + return "number" == typeof A && "number" == typeof e ? t = "left:" + A + "px;top:" + e + "px;" : "string" == typeof A ? t = this._calculatePosition(A) : "object" === lc(A) && (t = "left:" + A.left + "px;top:" + A.top + "px;right:" + A.right + "px;bottom:" + A.bottom + "px;"), + this.$el.style.cssText += t, + this + }, + setTitle: function(A) { + return this.$el.querySelector(".lobibox-title").innerHTML = A + }, + getTitle: function() { + return this.$el.querySelector(".lobibox-title").innerHTML + }, + show: function() { + var e = this + , t = A.viewport; + (e._beforeShow(), + e.$el.classList.remove("lobibox-hidden"), + t.appendChild(e.$el), + e.$options.buttons) && e.$el.querySelector(".lobibox-footer").children[0].focus(); + return (e.$options.modal || e.$options.backdrop) && (t.classList.add(A.base.OPTIONS.bodyClass), + e._addBackdrop()), + !1 !== e.$options.delay && setTimeout((function() { + e.destroy() + } + ), e.$options.delay), + e._afterShow(), + e + } + }; + function t(e, t) { + this.$input = null, + this.$type = "prompt", + "object" == lc(e) ? t = e : this.$promptType = e, + t = uh.extend(!0, {}, A.prompt.DEFAULT_OPTIONS, t), + this.$options = this._processInput(t), + this._init(), + this.debug(this) + } + function i(A) { + this.$type = "confirm", + this.$options = this._processInput(A), + this._init(), + this.debug(this) + } + function o(A, e) { + this.$type = A, + this.$options = this._processInput(e), + this._init(), + this.debug(this) + } + function n(A) { + this.$type = "progress", + this.$progressBarElement = null, + this.$options = this._processInput(A), + this.$progress = 0, + this._init(), + this.debug(this) + } + function r(A, e) { + this.$type = A, + this.$options = this._processInput(e), + this._init(), + this.debug(this) + } + A.base = {}, + A.base.OPTIONS = { + bodyClass: "lobibox-open", + modalClasses: { + error: "lobibox-error", + success: "lobibox-success", + info: "lobibox-info", + warning: "lobibox-warning", + confirm: "lobibox-confirm", + progress: "lobibox-progress", + prompt: "lobibox-prompt", + default: "lobibox-default", + window: "lobibox-window" + }, + buttonsAlign: ["left", "center", "right"], + buttons: { + ok: { + class: "lobibox-btn lobibox-btn-default", + text: "OK", + closeOnClick: !0 + }, + cancel: { + class: "lobibox-btn lobibox-btn-cancel", + text: "Cancel", + closeOnClick: !0 + }, + yes: { + class: "lobibox-btn lobibox-btn-yes", + text: "确定", + closeOnClick: !0 + }, + no: { + class: "lobibox-btn lobibox-btn-no", + text: "取消", + closeOnClick: !0 + } + }, + icons: { + bootstrap: { + confirm: "glyphicon glyphicon-question-sign", + success: "glyphicon glyphicon-ok-sign", + error: "glyphicon glyphicon-remove-sign", + warning: "glyphicon glyphicon-exclamation-sign", + info: "glyphicon glyphicon-info-sign" + }, + fontAwesome: { + confirm: "fa fa-question-circle", + success: "fa fa-check-circle", + error: "fa fa-times-circle", + warning: "fa fa-exclamation-circle", + info: "fa fa-info-circle" + } + } + }, + A.base.DEFAULTS = { + horizontalOffset: 5, + verticalOffset: 5, + width: 600, + height: "auto", + closeButton: !0, + draggable: !0, + customBtnClass: "lobibox-btn lobibox-btn-default", + modal: !1, + debug: !1, + buttonsAlign: "center", + closeOnEsc: !0, + delayToRemove: 200, + delay: !1, + baseClass: "animated-super-fast", + showClass: "zoomIn", + hideClass: "zoomOut", + iconSource: "bootstrap", + onShow: null, + shown: null, + beforeClose: null, + closed: null + }, + t.prototype = uh.extend(!0, {}, e, { + constructor: t, + _processInput: function(i) { + var o = e._processInput.call(this, i); + return o.buttons = { + ok: A.base.OPTIONS.buttons.ok, + cancel: A.base.OPTIONS.buttons.cancel + }, + i = uh.extend(!0, {}, o, t.DEFAULT_OPTIONS, i) + }, + _init: function() { + e._init.call(this), + this._setContent(this.$options.content), + this.show() + }, + _afterShow: function() { + var A = this; + A._setContent(A._createInput())._position(), + A.$input && A.$input.focus(); + var t = (window.innerHeight - xh.outerHeight(A.$el)) / 2 + , i = (window.innerWidth - xh.outerWidth(A.$el)) / 2; + A.setPosition(i, t), + e._afterShow.call(A) + }, + _createInput: function() { + var A, e = this; + if (e.$options.multiline) + e.$input = document.createElement("textarea"), + e.$input.setAttribute("rows", e.$options.lines); + else { + if (!e.$promptType) + return; + e.$input = document.createElement("input"), + e.$input.setAttribute("type", "' + me.$promptType + '") + } + if (e.$input.classList.add("lobibox-input"), + "[object Object]" === Object.prototype.toString.call(e.$options.attrs)) + for (var t in e.$options.attrs) + e.$input.setAttribute(t, e.$options.attrs[t]); + e.$options.value && e.setValue(e.$options.value), + e.$options.label && ((A = document.createElement("label")).innerHTML = e.$options.label); + var i = document.createElement("div"); + return e.$options.label && i.appendChild(A), + i.appendChild(e.$input), + i + }, + setValue: function(A) { + return this.$input.value = A, + this + }, + getValue: function() { + return this.$input.value + }, + isValid: function() { + var A = this + , e = A.$el.querySelectorAll(".lobibox-input-error-message"); + if (A.$options.required && !A.getValue()) { + if (A.$input.classList.add("invalid"), + 0 === e.length) { + var t = document.createElement("p"); + t.className = "lobibox-input-error-message", + t.innerHTML = A.$options.errorMessage, + A.$el.querySelector(".lobibox-body").appendChild(t), + A._position(), + A.$input.focus() + } + return !1 + } + A.$input.classList.remove("invalid"); + for (var i = 0; e.length > i; i += 1) + e[i].remove(); + return A._position(), + A.$input.focus(), + A._removeBackdrop(), + !0 + }, + _beforePromptShow: function() { + this._triggerEvent("beforeWindowShow") + }, + _beforePromptHide: function() { + this._triggerEvent("beforeWindowHide") + }, + _afterPromptShow: function() { + this._triggerEvent("afterWindowShow") + }, + _afterPromptHide: function() { + this._triggerEvent("afterWindowHide") + }, + promptHide: function() { + return this._beforePromptHide(), + this.$el.classList.add("hide"), + this._afterPromptHide(), + this + }, + promptShow: function() { + return this._beforePromptShow(), + this.$el.classList.remove("hide"), + this._afterPromptShow(), + this.$el.style.zIndex = (new Date).getTime() - A.window.startTime, + this + } + }), + t.DEFAULT_OPTIONS = { + width: 400, + attrs: {}, + value: "", + multiline: !1, + lines: 3, + type: "text", + label: "", + required: !0, + errorMessage: "The field is required" + }, + i.prototype = uh.extend(!0, {}, e, { + constructor: i, + _processInput: function(t) { + var i = e._processInput.call(this, t); + return i.buttons = { + yes: A.base.OPTIONS.buttons.yes, + no: A.base.OPTIONS.buttons.no + }, + t = uh.extend(!0, {}, i, A.confirm.DEFAULTS, t) + }, + _init: function() { + e._init.call(this), + this.show() + }, + _afterShow: function() { + var A = this + , t = document.createElement("div"); + if (A.$options.iconClass) { + var i = document.createElement("div"); + i.className = "lobibox-icon-wrapper", + t.appendChild(i); + var o = document.createElement("i"); + o.className = "lobibox-icon" + A.$options.iconClass, + t.appendChild(o) + } + var n = document.createElement("div"); + n.className = "lobibox-body-text-wrapper", + t.appendChild(n); + var r = document.createElement("span"); + r.className = "lobibox-body-text", + r.innerHTML = A.$options.msg, + n.appendChild(r), + A._setContent(t.innerHTML), + A._position(), + e._afterShow.call(A) + }, + _beforeConfirmShow: function() { + this._triggerEvent("beforeWindowShow") + }, + _beforeConfirmHide: function() { + this._triggerEvent("beforeWindowHide") + }, + _afterConfirmShow: function() { + this._triggerEvent("afterWindowShow") + }, + _afterConfirmHide: function() { + this._triggerEvent("afterWindowHide") + }, + confirmHide: function() { + return this._beforeConfirmHide(), + this.$el.classList.add("hide"), + this._afterConfirmHide(), + this + }, + confirmShow: function() { + return this._beforeConfirmShow(), + this.$el.classList.remove("hide"), + this._afterConfirmShow(), + this.$el.style.zIndex = (new Date).getTime() - A.window.startTime, + this + } + }), + A.confirm.DEFAULTS = { + title: "Question", + width: 500 + }, + o.prototype = uh.extend(!0, {}, e, { + constructor: o, + _processInput: function(t) { + var i = e._processInput.call(this, t); + return i.buttons = {}, + t = uh.extend(!0, {}, i, A.alert.OPTIONS[this.$type], A.alert.DEFAULTS, t) + }, + _init: function() { + e._init.call(this), + this.show() + }, + _afterShow: function() { + var A = this + , t = document.createElement("div"); + if (A.$options.iconClass) { + var i = document.createElement("div"); + i.className = "lobibox-icon-wrapper", + t.appendChild(i); + var o = document.createElement("i"); + o.className = "lobibox-icon" + A.$options.iconClass, + t.appendChild(o) + } + var n = document.createElement("div"); + n.className = "lobibox-body-text-wrapper", + t.appendChild(n); + var r = document.createElement("span"); + r.className = "lobibox-body-text", + r.innerHTML = A.$options.msg, + n.appendChild(r), + A._setContent(t.innerHTML), + A._setSize(); + var a = (window.innerHeight - xh.outerHeight(A.$el)) / 2 + , s = (window.innerWidth - xh.outerWidth(A.$el)) / 2; + A.setPosition(s, a), + e._afterShow.call(A) + } + }), + A.alert.OPTIONS = { + warning: { + title: "Warning" + }, + info: { + title: "Information" + }, + success: { + title: "Success" + }, + error: { + title: "Error" + } + }, + A.alert.DEFAULTS = {}, + n.prototype = uh.extend(!0, {}, e, { + constructor: n, + _processInput: function(t) { + var i = e._processInput.call(this, t); + return t = uh.extend(!0, {}, i, A.progress.DEFAULTS, t) + }, + _init: function() { + e._init.call(this), + this.show() + }, + _afterShow: function() { + var A, t = this; + t.$progressBarElement = t.$options.progressTpl ? t.$options.progressTpl : t._createProgressbar(), + t.$options.label && ((A = document.createElement("label")).innerHTML = t.$options.label); + var i = document.createElement("div").appendChild(A); + i.appendChild(t.$progressBarElement), + t._setContent(i), + t._position(), + e._afterShow.call(t) + }, + _createProgressbar: function() { + var A = document.createElement("div"); + A.classList.add("lobibox-progress-bar-wrapper"), + A.classList.add("lobibox-progress-outer"); + var e = document.createElement("div"); + if (e.classList.add("lobibox-progress-bar"), + e.classList.add("lobibox-progress-element"), + A.appendChild(e), + this.$options.showProgressLabel) { + var t = document.createElement("span"); + t.className = "lobibox-progress-text", + t.dataset.role = "progress-text", + A.appendChild(t) + } + return A + }, + setProgress: function(A) { + var e = this; + if (100 !== e.$progress) + return A = Math.min(100, Math.max(0, A)), + e.$progress = A, + e._triggerEvent("progressUpdated"), + 100 === e.$progress && e._triggerEvent("progressCompleted"), + e.$el.querySelector(".lobibox-progress-element").style.cssText += "width" + A.toFixed(1) + "%", + e.$el.querySelector(".lobibox-progress-text").innerHTML = A.toFixed(1) + "%", + e + }, + getProgress: function() { + return this.$progress + } + }), + A.progress.DEFAULTS = { + width: 500, + showProgressLabel: !0, + label: "", + progressTpl: !1, + progressUpdated: null, + progressCompleted: null + }, + r.prototype = uh.extend(!0, {}, e, { + constructor: r, + _processInput: function(t) { + var i = e._processInput.call(this, t); + return t.content && "function" == typeof t.content && (t.content = t.content()), + t = uh.extend(!0, {}, i, A.window.DEFAULTS, t) + }, + _init: function() { + var A = this; + e._init.call(A), + A.setContent(A.$options.content), + A.$options.url && A.$options.autoload ? (A.$options.showAfterLoad || A.show(), + A.load((function() { + A.$options.showAfterLoad && A.show() + } + ))) : A.show() + }, + _afterShow: function() { + this._position(), + e._afterShow.call(this) + }, + _addCloseButton: function() { + var A = this + , e = document.createElement("span"); + e.className = "btn-close", + e.innerHTML = "×", + A.$el.querySelector(".lobibox-header").appendChild(e), + e.addEventListener("mousedown", (function(A) { + A.stopPropagation() + } + )), + e.addEventListener("click", (function() { + A.windowHide() + } + )) + }, + _beforeWindowShow: function() { + this._triggerEvent("beforeWindowShow") + }, + _beforeWindowHide: function() { + this._triggerEvent("beforeWindowHide") + }, + _afterWindowShow: function() { + this._triggerEvent("afterWindowShow") + }, + _afterWindowHide: function() { + this._triggerEvent("afterWindowHide") + }, + windowHide: function() { + return this._beforeWindowHide(), + this.$el.classList.add("hide"), + this._afterWindowHide(), + this + }, + windowShow: function() { + return this._beforeWindowShow(), + this.$el.classList.remove("hide"), + this._afterWindowShow(), + this.$el.style.zIndex = (new Date).getTime() - A.window.startTime, + this + }, + setParams: function(A) { + return this.$options.params = A, + this + }, + getParams: function() { + return this.$options.params + }, + setLoadMethod: function(A) { + return this.$options.loadMethod = A, + this + }, + getLoadMethod: function() { + return this.$options.loadMethod + }, + setContent: function(A) { + return this.$options.content = A, + this.$el.querySelector(".lobibox-body").innerHTML = "", + xh.append(this.$el.querySelector(".lobibox-body"), A), + this + }, + getContent: function() { + return this.$options.content + }, + setUrl: function(A) { + return this.$options.url = A, + this + }, + getUrl: function() { + return this.$options.url + }, + load: function(A) { + var e = this; + return e.$options.url ? ($.ajax(e.$options.url, { + method: e.$options.loadMethod, + data: e.$options.params + }).done((function(t) { + e.setContent(t), + A && "function" == typeof A && A(t) + } + )), + e) : e + } + }), + A.window.DEFAULTS = { + width: 480, + height: 600, + content: "", + url: "", + draggable: !0, + autoload: !0, + loadMethod: "GET", + showAfterLoad: !0, + params: {} + }, + A.window.startTime = (new Date).getTime(); + var a = function(e, t) { + this.$type = null, + this.$options = null, + this.$el = null; + var i = this + , o = function(A) { + for (var e = xh.closest(A, ".lb-notify-tabs").childNodes, t = 0; e.length > t; t += 1) + "li" == e[t].nodeType && e[t].classList.remove("active"); + A.classList.add("active"); + var i = A.querySelector("a").getAttribute("href") + , o = xh.closest(i, ".lb-notify-wrapper").querySelectorAll(".lb-tab-pane"); + for (t = 0; o.length > t; t += 1) + o[t].classList.remove("active"); + i.addClass("active") + } + , n = function(e) { + var t = document.createElement("li"); + t.className = A.notify.OPTIONS[i.$type].class; + var o = document.createElement("a"); + o.setAttribute("href", "#" + e), + t.appendChild(o); + var n = document.createElement("i"); + return n.className = "tab-control-icon" + i.$options.icon, + o.appendChild(n), + t + } + , r = function() { + var A = document.createElement("div"); + return A.className = "lb-tab-pane", + A.id = Math.randomString(10), + A + } + , a = function(A) { + if (i.$options.closable) { + var e = document.createElement("span"); + e.className = "lobibox-close", + e.innerHTML = "×", + A.appendChild(e), + e.addEventListener("click", (function() { + i.remove() + } + )) + } + } + , s = function(A) { + i.$options.closeOnClick && A.click((function() { + i.remove() + } + )) + } + , l = function(A) { + if (i.$options.delay) { + if (i.$options.delayIndicator) { + var e = document.createElement("div"); + e.className = "lobibox-delay-indicator"; + var t = document.createElement("div"); + e.appendChild(t), + A.appendChild(e) + } + var o = 0 + , n = 1e3 / 30 + , r = (new Date).getTime() + , a = setInterval((function() { + i.$options.continueDelayOnInactiveTab ? o = (new Date).getTime() - r : o += n; + var A = 100 * o / i.$options.delay; + if (100 > A || (A = 100, + i.remove(), + a = clearInterval(a)), + i.$options.delayIndicator) + for (var t = e.querySelectorAll("div"), s = 0; t.length > s; s += 1) + t[s].style.cssText += "width:" + A + "%" + } + ), n); + i.$options.pauseDelayOnHover && (A.addEventListener("mouseenter.lobibox", (function() { + n = 0 + } + )), + A.addEventListener("mouseleave.lobibox", (function() { + n = 1e3 / 30 + } + ))) + } + } + , c = function(A) { + return A = Math.min(window.outerWidth, A) + }; + this.remove = function() { + i.$el.classList.remove(i.$options.showClass), + i.$el.classList.add(i.$options.hideClass); + var e = i.$el.parentNode + , t = xh.closest(e, ".lobibox-notify-wrapper-large") || xh.closest(e, ".lobibox-notify-wrapper"); + if (e) { + for (var n = "#" + e.getAttribute("id"), r = t.querySelectorAll(".lb-notify-tabs li"), a = 0; r.length > a; a += 1) + r[a].querySelector("a").getAttribute("href") !== n && r.splice(1, a); + if (r.length > 0) + for (a = 0; r.length > a; a += 1) + r[a].classList.remove(A.notify.OPTIONS.class), + r[a].classList.add(i.$options.hideClass); + return setTimeout((function() { + if ("normal" === i.$options.size || "mini" === i.$options.size) + i.$el.parentElement.removeChild(i.$el); + else if ("large" === i.$options.size) { + var t = function(A) { + var e = A.prev(); + return 0 === e.length && (e = A.next()), + 0 === e.length ? null : e + }(r); + t && o(t), + r.parentElement.removeChild(r), + e.parentElement.removeChild(e) + } + var n = A.notify.list + , a = n.indexOf(i); + n.splice(a, 1); + var s = n[a]; + s && s.$options.showAfterPrevious && s._init() + } + ), 500), + i + } + } + , + i._init = function() { + var e = function() { + var e, t, o, n, r, h = A.notify.OPTIONS, d = document.createElement("div"); + if (d.classList.add("lobibox-notify"), + d.classList.add(h[i.$type].class), + d.classList.add(h.class), + d.classList.add(i.$options.showClass), + (o = document.createElement("div")).className = "lobibox-notify-icon-wrapper", + d.appendChild(o), + (e = document.createElement("div")).className = "lobibox-notify-icon", + o.appendChild(e), + t = document.createElement("div"), + e.appendChild(t), + i.$options.img) { + var p = document.createElement("img"); + p.src = i.$options.img, + t.appendChild(p) + } else if (i.$options.icon) { + var g = document.createElement("div"); + g.className = "icon-el"; + var u = document.createElement("i"); + u.className = i.$options.icon, + g.appendChild(u), + t.appendChild(g) + } else + d.classList.add("without-icon"); + if ((r = document.createElement("div")).className = "lobibox-notify-msg", + r.innerHTML = i.$options.msg, + !1 !== i.$options.messageHeight && (r.style.cssText += "max-height:" + i.$options.messageHeight + "px;"), + (n = document.createElement("div")).className = "lobibox-notify-body", + n.appendChild(r), + d.appendChild(n), + i.$options.title) { + var f = document.createElement("div"); + f.className = "lobibox-notify-title", + f.innerHTML = i.$options.title, + n.insertBefore(f, r) + } + return a(d), + "normal" !== i.$options.size && "mini" !== i.$options.size || (s(d), + l(d)), + i.$options.width && (d.style.cssText += "width:" + c(i.$options.width) + "px"), + d + }(); + if ("mini" === i.$options.size && e.classList.add("notify-mini"), + "string" == typeof i.$options.position) { + var t = function() { + var e, t = ("large" === i.$options.size ? ".lobibox-notify-wrapper-large" : ".lobibox-notify-wrapper") + "." + i.$options.position.replace(/\s/gi, "."); + if (0 !== (e = document.querySelectorAll(t)).length) + return e[0]; + e = document.createElement("div"); + for (var o = t.split("."), n = 1; o.length > n; n += 1) + e.classList.add(o[n]); + if (A.viewport.appendChild(e), + "large" === i.$options.size) { + var r = document.createElement("ul"); + r.className = "lb-notify-tabs"; + var a = document.createElement("div"); + a.className = "lb-notify-wrapper", + e.appendChild(r), + e.appendChild(a) + } + return e + }(); + !function(A, e) { + if ("normal" === i.$options.size) + e.classList.contains("bottom") ? e.insertBefore(A, e.firstChild) : e.appendChild(A); + else if ("mini" === i.$options.size) + e.classList.contains("bottom") ? e.insertBefore(A, e.firstChild) : e.appendChild(A); + else if ("large" === i.$options.size) { + var t = r().appendChild(A) + , a = n(t.getAttribute("id")); + e.querySelector(".lb-notify-wrapper").appendChild(t), + e.querySelector(".lb-notify-tabs").appendChild(a), + o(a); + for (var s = a.querySelectorAll("a"), l = 0; s.length > l; l += 1) + s[l].click((function() { + o(a) + } + )) + } + }(e, t), + t.classList.contains("center") && (t.style.cssText += "margin-left:" + -t.offsetWidth / 2 + "px") + } else + A.viewport.appendChild(e), + e.style.cssText += "position:fixed;left:" + i.$options.position.left + "px;top:" + i.$options.position.top + "px;"; + (i.$el = e, + i.$options.sound) && new Audio(i.$options.sound).play(); + i.$options.rounded && i.$el.classList.add("rounded"), + i.$el.addEventListener("click", (function(A) { + i.$options.onClickUrl && (window.location.href = i.$options.onClickUrl), + i.$options.onClick && "function" == typeof i.$options.onClick && i.$options.onClick.call(i, A) + } + )), + i.$el.dataset.lobibox = i + } + , + this.$type = e, + this.$options = function(e) { + return "mini" !== e.size && "large" !== e.size || (e = uh.extend(!0, {}, A.notify.OPTIONS[e.size], e)), + "mini" !== (e = uh.extend(!0, {}, A.notify.OPTIONS[i.$type], A.notify.DEFAULTS, e)).size && !0 === e.title ? e.title = A.notify.OPTIONS[i.$type].title : "mini" === e.size && !0 === e.title && (e.title = !1), + !0 === e.icon && (e.icon = A.notify.OPTIONS.icons[e.iconSource][i.$type]), + !0 === e.sound && (e.sound = A.notify.OPTIONS[i.$type].sound), + e.sound && (e.sound = e.soundPath + e.sound + e.soundExt), + e + }(t), + i.$options.showAfterPrevious && 0 !== A.notify.list.length || this._init() + }; + A.notify = function(e, t) { + if (["default", "info", "warning", "error", "success"].indexOf(e) > -1) { + var i = new a(e,t); + return A.notify.list.push(i), + i + } + } + , + A.notify.list = [], + A.notify.closeAll = function() { + var e = A.notify.list; + for (var t in e) { + e[t].parentNode.removeChild(e[t]) + } + } + , + A.notify.DEFAULTS = { + title: !0, + size: "normal", + soundPath: "sounds/", + soundExt: ".ogg", + showClass: "fadeInDown", + hideClass: "zoomOut", + icon: !0, + msg: "", + img: null, + closable: !0, + hideCloseButton: !1, + delay: 5e3, + delayIndicator: !0, + closeOnClick: !0, + width: 400, + sound: !0, + position: "bottom right", + iconSource: "bootstrap", + rounded: !1, + messageHeight: 60, + pauseDelayOnHover: !0, + onClickUrl: null, + showAfterPrevious: !1, + continueDelayOnInactiveTab: !0, + onClick: null + }, + A.notify.OPTIONS = { + class: "animated-fast", + large: { + width: 500, + messageHeight: 96 + }, + mini: { + class: "notify-mini", + messageHeight: 32 + }, + default: { + class: "lobibox-notify-default", + title: "Default", + sound: !1 + }, + success: { + class: "lobibox-notify-success", + title: "Success", + sound: "sound2" + }, + error: { + class: "lobibox-notify-error", + title: "Error", + sound: "sound4" + }, + warning: { + class: "lobibox-notify-warning", + title: "Warning", + sound: "sound5" + }, + info: { + class: "lobibox-notify-info", + title: "Information", + sound: "sound6" + }, + icons: { + bootstrap: { + success: "glyphicon glyphicon-ok-sign", + error: "glyphicon glyphicon-remove-sign", + warning: "glyphicon glyphicon-exclamation-sign", + info: "glyphicon glyphicon-info-sign" + }, + fontAwesome: { + success: "fa fa-check-circle", + error: "fa fa-times-circle", + warning: "fa fa-exclamation-circle", + info: "fa fa-info-circle" + } + } + } + } + , Uh = 37 + , Fh = 38 + , Kh = 39 + , Qh = 40 + , Rh = 65 + , Th = 68 + , kh = 69 + , Dh = 81 + , Lh = 83 + , Nh = 87 + , Oh = 90 + , Vh = 187 + , Gh = 189 + , Ph = 48 + , qh = 27 + , jh = { + ReverseWheelDirection: !1, + MovementSpeedRate: 1, + WalkSpeedRate: 1, + RotatePivotMode: kc.MOUSEPOINT, + NoPan: !1, + NoRotate: !1, + NoZoom: !1, + NoKey: !1, + LockAxisZ: !1, + LockAxisZRange: null + } + , Hh = function(A, e) { + this.defaultSetting = { + colorRects: !0, + picker: !0, + colorCode: !0, + hasOpacity: !0 + }, + this.color = { + hex: void 0, + rgb: void 0, + rgba: void 0, + hsl: void 0 + }, + this.colorInputDom = A, + this.element = this.create(e) + }; + Hh.prototype = { + constructor: Hh, + create: function(A) { + var e = this.defaultSetting; + A && (e = uh.extend(!0, this.defaultSetting, A)); + var t = document.createElement("div"); + return t.style.cssText += "width:190px;position:absolute;", + e.colorRects && t.appendChild(this.createRects(!!e.hasOpacity)), + e.picker && t.appendChild(this.createPicker(!!e.hasOpacity)), + e.colorCode && t.appendChild(this.createColorCode()), + t.appendChild(this.createBtn()), + this.element = t, + t + }, + createBtn: function() { + var A = this + , e = document.createElement("div") + , t = document.createElement("button"); + t.className = "btn-yes", + t.innerHTML = "确定", + t.style.cssText += "display:inline-block;margin:10px;color:#000;background-color: #FFFFFF;border: 2px solid #FFFFFF;border-radius: 4px; width: 73px;height: 32px;", + t.addEventListener("click", (function() { + A.element.style.display = "none" + } + )); + var i = document.createElement("button"); + return i.className = "btn-no", + i.innerHTML = "取消", + i.style.cssText += "display:inline-block;margin:10px;color:#000;background-color: #FFFFFF;border: 2px solid #FFFFFF;border-radius: 4px; width: 73px;height: 32px;", + i.addEventListener("click", (function() { + A.element.style.display = "none" + } + )), + e.appendChild(t), + e.appendChild(i), + e + }, + createRects: function(A) { + var e = this + , t = document.createElement("div"); + t.className = "rectFather", + t.style.cssText += "width:180px;height:180px;margin-top:10px;margin-left:10px;display:flex;flex-wrap:wrap;align-items:flex-start;"; + for (var i = [], o = ["00", "55", "AA", "FF"], n = 0, r = 0, a = 0, s = "", l = 0; 64 > l; ) + s = "#" + o[n] + o[r] + o[a], + i[l] = document.createElement("span"), + i[l].className = "spans" + l, + i[l].style.cssText += "width:15px;height:15px;margin:1px 2px;border:1px solid #FFFFFF;background-color:" + s + ";", + i[l].setAttribute("color", s), + t.appendChild(i[l]), + (l += 1) % 16 == 0 ? n += 1 : l % 4 == 0 ? (r += 1) > 3 && (r = 0) : (a += 1) > 3 && (a = 0); + var c = t.querySelectorAll("span"); + return xh.addEventListener(c, "click", (function(t) { + for (var i = 0; c.length > i; i += 1) + c[i].style.cssText += "border:1px solid #FFFFFF;"; + var o = t.target; + o.style.cssText += "border:2px solid #000000;"; + var n = o.getAttribute("color"); + A ? e.setColor(n, 1) : e.setColor(n), + t.stopPropagation ? t.stopPropagation() : t.cancelBubble = !0 + } + )), + t + }, + createPicker: function(A) { + var e = this + , t = document.createElement("div"); + t.style.cssText += "width:180px;margin-left:10px;"; + var i = document.createElement("span"); + i.className = "colorShow", + i.style.cssText += "display:block;width:170px;height:30px;border-radius:5px;margin-top:10px;margin-bottom:10px;background-color:#FFFFFF;", + t.appendChild(i); + var o = document.createElement("span"); + o.innerHTML = "红 : ", + o.style.color = "#FF0000"; + var n = document.createElement("input"); + n.type = "range", + n.className = "redRange", + n.style.cssText += "background:linear-gradient(#FFFFFF, #FFFFFF) no-repeat, #FF0000;", + n.setAttribute("step", "1"), + n.setAttribute("min", "0"), + n.setAttribute("max", "255"), + n.setAttribute("value", "255"); + var r = document.createElement("div"); + r.appendChild(o), + r.appendChild(n), + t.appendChild(r); + var a = document.createElement("span"); + a.innerHTML = "绿 : ", + a.style.color = "#00FF00"; + var s = document.createElement("input"); + s.type = "range", + s.className = "greenRange", + s.style.cssText += "background:linear-gradient(#FFFFFF, #FFFFFF) no-repeat, #00FF00;", + s.setAttribute("step", "1"), + s.setAttribute("min", "0"), + s.setAttribute("max", "255"), + s.setAttribute("value", "255"); + var l = document.createElement("div"); + l.appendChild(a), + l.appendChild(s), + t.appendChild(l); + var c = document.createElement("span"); + c.innerHTML = "蓝 : ", + c.style.color = "#0000FF"; + var h = document.createElement("input"); + h.type = "range", + h.className = "blueRange", + h.style.cssText += "background:linear-gradient(#FFFFFF, #FFFFFF) no-repeat, #0000FF;", + h.setAttribute("step", "1"), + h.setAttribute("min", "0"), + h.setAttribute("max", "255"), + h.setAttribute("value", "255"); + var d = document.createElement("div"); + d.appendChild(c), + d.appendChild(h), + t.appendChild(d); + var p = t.querySelector(".redRange") + , g = t.querySelector(".greenRange") + , u = t.querySelector(".blueRange") + , f = null; + if (p.addEventListener("input", (function() { + var t = "#" + ((1 << 24) + (Number(p.value) << 16) + (Number(g.value) << 8) + Number(u.value)).toString(16).slice(1); + if (A) { + var i = Number(f.value); + e.setColor(t, i) + } else + e.setColor(t) + } + )), + g.addEventListener("input", (function() { + var t = "#" + ((1 << 24) + (Number(p.value) << 16) + (Number(g.value) << 8) + Number(u.value)).toString(16).slice(1); + if (A) { + var i = Number(f.value); + e.setColor(t, i) + } else + e.setColor(t) + } + )), + u.addEventListener("input", (function() { + var t = "#" + ((1 << 24) + (Number(p.value) << 16) + (Number(g.value) << 8) + Number(u.value)).toString(16).slice(1); + if (A) { + var i = Number(f.value); + e.setColor(t, i) + } else + e.setColor(t) + } + )), + A) { + var m = document.createElement("span"); + m.innerHTML = "透明度 : ", + m.style.color = "#FFFFFF"; + var C = document.createElement("input"); + C.type = "range", + C.className = "opacityRange", + C.style.cssText += "width:97px;background:linear-gradient(#FFFFFF, #FFFFFF) no-repeat, #FFFFFF;", + C.setAttribute("step", "0.01"), + C.setAttribute("min", "0"), + C.setAttribute("max", "1"), + C.setAttribute("value", "1"); + var y = document.createElement("div"); + y.appendChild(m), + y.appendChild(C), + t.appendChild(y), + (f = t.querySelector(".opacityRange")).addEventListener("input", (function() { + var A = "#" + ((1 << 24) + (Number(p.value) << 16) + (Number(g.value) << 8) + Number(u.value)).toString(16).slice(1) + , t = Number(f.value); + e.setColor(A, t) + } + )) + } + return t + }, + createColorCode: function() { + var A = this + , e = document.createElement("div"); + e.style.cssText += "width:180px;margin-left:10px;"; + var t = document.createElement("input"); + t.className = "colorCode", + t.type = "text", + t.style.cssText += "display:block;float:left;width:110px;margin:10px 10px 10px 0;padding-left:3px;", + t.value = "#ffffff", + e.appendChild(t); + var i = document.createElement("span"); + return i.className = "colorCodeBtn", + i.style.cssText += "display:block;float:left;width:38px;height:21px;border-radius:5px;margin-top:10px;background-color:#FFFFFF;font-size:13px;text-align:center;line-height:21px;cursor:default;", + i.innerHTML = "HEX", + i.addEventListener("click", (function(e) { + var t = e.target.textContent + , i = A.element.querySelector(".colorCode").value; + if (A.element.querySelector(".opacityRange")) + var o = Number(A.element.querySelector(".opacityRange").value); + "HEX" === t ? e.target.innerHTML = "RGB" : "RGB" === t && (e.target.innerHTML = "HEX"), + A.setColor(i, o) + } + )), + e.appendChild(i), + e + }, + colorRgbToHex: function(A) { + if (A) { + var e = (A = A.toLowerCase()).replace(/rgba?\(/, "").replace(/\)/, "").replace(/[\s+]/g, "").split(",") + , t = parseFloat(e[3] || 1) + , i = Math.floor(t * parseInt(e[0], 0) + 255 * (1 - t)) + , o = Math.floor(t * parseInt(e[1], 0) + 255 * (1 - t)) + , n = Math.floor(t * parseInt(e[2], 0) + 255 * (1 - t)); + return "#" + ("0" + i.toString(16)).slice(-2) + ("0" + o.toString(16)).slice(-2) + ("0" + n.toString(16)).slice(-2) + } + return A + }, + colorHexToRgb: function(A, e) { + var t = A.toLowerCase(); + if (t && /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/.test(t)) { + if (4 === t.length) { + for (var i = "#", o = 1; 4 > o; o += 1) + i += t.slice(o, o + 1).concat(t.slice(o, o + 1)); + t = i + } + for (var n = [], r = 1; 7 > r; r += 2) + n.push(parseInt("0x" + t.slice(r, r + 2), 0)); + if (!isNaN(e)) { + var a = Number(e); + return 0 > a || a > 1 ? t : "rgba(" + n.join(",") + "," + a + ")" + } + return "rgb(" + n.join(",") + ")" + } + return t + }, + checkColor: function(A) { + var e = {}; + if (A) { + var t = A.toLowerCase(); + t && /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/.test(t) ? (e.color = !0, + e.hex = !0, + e.rgb = !1, + e.hsl = !1, + e.hexLength = 4 === t.length ? 3 : 6) : t && /^rgb/.test(t) ? (e.color = !0, + e.hex = !1, + e.rgb = !0, + e.hsl = !1) : t && /^hsl/.test(t) ? (e.color = !0, + e.hex = !1, + e.rgb = !1, + e.hsl = !0) : (e.color = !1, + e.hex = !1, + e.rgb = !1, + e.hsl = !1) + } else + e.color = !1, + e.hex = !1, + e.rgb = !1, + e.hsl = !1; + return e + }, + setColor: function(A, e) { + var t = this.defaultSetting; + if (t.picker || t.colorCode) { + var i = this.checkColor(A); + if (i.color) { + var o = "" + , n = "" + , r = A.toLowerCase(); + if (i.hex) { + if (3 === i.hexLength) { + for (var a = "#", s = 1; 4 > s; s += 1) + a += r.slice(s, s + 1).concat(r.slice(s, s + 1)); + r = a + } + n = r, + o = this.colorHexToRgb(A, e) + } else + i.rgb && (n = this.colorRgbToHex(A), + o = r); + if (o) { + if (t.picker) { + xh.css(this.element.querySelector(".colorShow"), { + "background-color": o + }); + var l = this.getRgbNumber(n); + 3 === l.length && (this.element.querySelector(".redRange").value = l[0], + this.element.querySelector(".greenRange").value = l[1], + this.element.querySelector(".blueRange").value = l[2], + e && (this.element.querySelector(".opacityRange").value = e)) + } + if (t.colorCode) { + var c = this.element.querySelector(".colorCode"); + c.value = n; + var h = this.element.querySelector(".colorCodeBtn").textContent; + "HEX" === h ? c.value = n : "RGB" === h && (c.value = o) + } + this.colorInputDom.value = o, + xh.simulateEvent(this.colorInputDom, "change") + } + } + } + }, + getRgbNumber: function(A) { + var e = [] + , t = this.checkColor(A); + if (t.color) { + var i = A.toLowerCase(); + if (t.hex) { + if (3 === t.hexLength) { + for (var o = "#", n = 1; 4 > n; n += 1) + o += i.slice(n, n + 1).concat(i.slice(n, n + 1)); + i = o + } + for (var r = 1; 7 > r; r += 2) + e.push(parseInt("0x" + i.slice(r, r + 2), 0)) + } + } + return e + } + }; + var Yh = {}; + Yh.fullScreen = function(A) { + if (!A) + return !1; + if (A.requestFullscreen) + A.requestFullscreen(); + else if (A.mozRequestFullScreen) + A.mozRequestFullScreen(); + else if (A.webkitRequestFullscreen) + A.webkitRequestFullscreen(); + else { + if (!A.msRequestFullscreen) + return !1; + A.msRequestFullscreen() + } + } + , + Yh.exitFullScreen = function() { + document.exitFullscreen ? document.exitFullscreen() : document.mozCancelFullScreen ? document.mozCancelFullScreen() : document.webkitCancelFullScreen ? document.webkitCancelFullScreen() : document.msExitFullscreen && document.msExitFullscreen() + } + , + Yh.onFullScreenChanged = function(A) { + var e = function() { + A && A() + }; + document.onfullscreenchange = e, + document.onwebkitfullscreenchange = e, + document.documentElement.onwebkitfullscreenchange = e, + document.onmozfullscreenchange = e, + document.onmsfullscreenchange = e + } + , + Yh.inFullScreen = function() { + return "webkitIsFullScreen"in document ? Boolean(document.webkitIsFullScreen) : "fullscreenElement"in document ? Boolean(document.fullscreenElement) : "mozFullScreenElement"in document ? Boolean(document.mozFullScreenElement) : "msFullscreenElement"in document ? Boolean(document.msFullscreenElement) : Boolean(document.querySelector(".viewer-fill-browser")) + } + , + Yh.findFullScreenElement = function() { + return document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement || document.msFullscreenElement + } + , + Yh.isFullScreenAvailable = function(A) { + return A.requestFullscreen || A.mozRequestFullScreen || A.webkitRequestFullscreen || A.msRequestFullscreen + } + ; + var Wh = Yh + , Jh = { + aliceblue: 15792383, + antiquewhite: 16444375, + aqua: 65535, + aquamarine: 8388564, + azure: 15794175, + beige: 16119260, + bisque: 16770244, + black: 0, + blanchedalmond: 16772045, + blue: 255, + blueviolet: 9055202, + brown: 10824234, + burlywood: 14596231, + cadetblue: 6266528, + chartreuse: 8388352, + chocolate: 13789470, + coral: 16744272, + cornflowerblue: 6591981, + cornsilk: 16775388, + crimson: 14423100, + cyan: 65535, + darkblue: 139, + darkcyan: 35723, + darkgoldenrod: 12092939, + darkgray: 11119017, + darkgreen: 25600, + darkgrey: 11119017, + darkkhaki: 12433259, + darkmagenta: 9109643, + darkolivegreen: 5597999, + darkorange: 16747520, + darkorchid: 10040012, + darkred: 9109504, + darksalmon: 15308410, + darkseagreen: 9419919, + darkslateblue: 4734347, + darkslategray: 3100495, + darkslategrey: 3100495, + darkturquoise: 52945, + darkviolet: 9699539, + deeppink: 16716947, + deepskyblue: 49151, + dimgray: 6908265, + dimgrey: 6908265, + dodgerblue: 2003199, + firebrick: 11674146, + floralwhite: 16775920, + forestgreen: 2263842, + fuchsia: 16711935, + gainsboro: 14474460, + ghostwhite: 16316671, + gold: 16766720, + goldenrod: 14329120, + gray: 8421504, + green: 32768, + greenyellow: 11403055, + grey: 8421504, + honeydew: 15794160, + hotpink: 16738740, + indianred: 13458524, + indigo: 4915330, + ivory: 16777200, + khaki: 15787660, + lavender: 15132410, + lavenderblush: 16773365, + lawngreen: 8190976, + lemonchiffon: 16775885, + lightblue: 11393254, + lightcoral: 15761536, + lightcyan: 14745599, + lightgoldenrodyellow: 16448210, + lightgray: 13882323, + lightgreen: 9498256, + lightgrey: 13882323, + lightpink: 16758465, + lightsalmon: 16752762, + lightseagreen: 2142890, + lightskyblue: 8900346, + lightslategray: 7833753, + lightslategrey: 7833753, + lightsteelblue: 11584734, + lightyellow: 16777184, + lime: 65280, + limegreen: 3329330, + linen: 16445670, + magenta: 16711935, + maroon: 8388608, + mediumaquamarine: 6737322, + mediumblue: 205, + mediumorchid: 12211667, + mediumpurple: 9662683, + mediumseagreen: 3978097, + mediumslateblue: 8087790, + mediumspringgreen: 64154, + mediumturquoise: 4772300, + mediumvioletred: 13047173, + midnightblue: 1644912, + mintcream: 16121850, + mistyrose: 16770273, + moccasin: 16770229, + navajowhite: 16768685, + navy: 128, + oldlace: 16643558, + olive: 8421376, + olivedrab: 7048739, + orange: 16753920, + orangered: 16729344, + orchid: 14315734, + palegoldenrod: 15657130, + palegreen: 10025880, + paleturquoise: 11529966, + palevioletred: 14381203, + papayawhip: 16773077, + peachpuff: 16767673, + peru: 13468991, + pink: 16761035, + plum: 14524637, + powderblue: 11591910, + purple: 8388736, + rebeccapurple: 6697881, + red: 16711680, + rosybrown: 12357519, + royalblue: 4286945, + saddlebrown: 9127187, + salmon: 16416882, + sandybrown: 16032864, + seagreen: 3050327, + seashell: 16774638, + sienna: 10506797, + silver: 12632256, + skyblue: 8900331, + slateblue: 6970061, + slategray: 7372944, + slategrey: 7372944, + snow: 16775930, + springgreen: 65407, + steelblue: 4620980, + tan: 13808780, + teal: 32896, + thistle: 14204888, + tomato: 16737095, + turquoise: 4251856, + violet: 15631086, + wheat: 16113331, + white: 16777215, + whitesmoke: 16119285, + yellow: 16776960, + yellowgreen: 10145074 + }; + function zh(A, e, t) { + return 0 > t && (t += 1), + t > 1 && (t -= 1), + 1 / 6 > t ? A + 6 * (e - A) * t : .5 > t ? e : 2 / 3 > t ? A + 6 * (e - A) * (2 / 3 - t) : A + } + var Zh, Xh = function(A, e, t, i) { + return void 0 === i && void 0 === t ? this.set(A, e) : this.setRGB(A, e, t, i) + }; + Object.assign(Xh.prototype, { + isColor: !0, + r: 1, + g: 1, + b: 1, + a: 1, + set: function(A, e) { + return "number" == typeof A ? this.setHex(A) : "string" == typeof A && this.setStyle(A), + void 0 !== e && this.setAlpha(e), + this + }, + setHex: function(A, e) { + return A = Math.floor(A), + this.r = (A >> 16 & 255) / 255, + this.g = (A >> 8 & 255) / 255, + this.b = (255 & A) / 255, + this.setAlpha(e), + this + }, + setAlpha: function(A) { + return "number" == typeof A ? (A > 1 && (A = 1), + 0 > A && (A = 0), + this.a = A) : isNaN(parseFloat(A)) ? this.a = 1 : ((A = parseFloat(A)) > 1 && (A = 1), + 0 > A && (A = 0), + this.a = A), + this + }, + setRGB: function(A, e, t, i) { + return this.r = A > 1 ? Math.min(255, parseInt(A, 10)) / 255 : A, + this.g = e > 1 ? Math.min(255, parseInt(e, 10)) / 255 : e, + this.b = t > 1 ? Math.min(255, parseInt(t, 10)) / 255 : t, + this.setAlpha(i), + this + }, + setHSL: function(A, e, t, i) { + if (A = Xc.euclideanModulo(A, 1), + e = Xc.clamp(e, 0, 1), + t = Xc.clamp(t, 0, 1), + 0 === e) + this.r = this.g = this.b = t; + else { + var o = t > .5 ? t + e - t * e : t * (1 + e) + , n = 2 * t - o; + this.r = zh(n, o, A + 1 / 3), + this.g = zh(n, o, A), + this.b = zh(n, o, A - 1 / 3) + } + return this.a = i, + this + }, + setStyle: function(A) { + var e = null; + if (e = /^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec(A)) { + var t = null + , i = e[2]; + switch (e[1]) { + case "rgb": + case "rgba": + if (t = /^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(i)) + return this.r = Math.min(255, parseInt(t[1], 10)) / 255, + this.g = Math.min(255, parseInt(t[2], 10)) / 255, + this.b = Math.min(255, parseInt(t[3], 10)) / 255, + this.setAlpha(t[5]), + this; + if (t = /^(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(i)) + return this.r = Math.min(100, parseInt(t[1], 10)) / 100, + this.g = Math.min(100, parseInt(t[2], 10)) / 100, + this.b = Math.min(100, parseInt(t[3], 10)) / 100, + this.setAlpha(t[5]), + this; + break; + case "hsl": + case "hsla": + if (t = /^([0-9]*\.?[0-9]+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(i)) { + var o = parseFloat(t[1]) / 360 + , n = parseInt(t[2], 10) / 100 + , r = parseInt(t[3], 10) / 100; + return this.setAlpha(t[5]), + this.setHSL(o, n, r) + } + } + } else if (e = /^\#([A-Fa-f0-9]+)$/.exec(A)) { + var a, s = (a = e[1]).length; + if (3 === s) + return this.r = parseInt(a.charAt(0) + a.charAt(0), 16) / 255, + this.g = parseInt(a.charAt(1) + a.charAt(1), 16) / 255, + this.b = parseInt(a.charAt(2) + a.charAt(2), 16) / 255, + this; + if (6 === s) + return this.r = parseInt(a.charAt(0) + a.charAt(1), 16) / 255, + this.g = parseInt(a.charAt(2) + a.charAt(3), 16) / 255, + this.b = parseInt(a.charAt(4) + a.charAt(5), 16) / 255, + this + } + A && A.length > 0 && (void 0 !== (a = Jh[A]) ? this.setHex(a) : Bh.warn("Color: Unknown color " + A)); + return this + }, + getHex: function() { + return 255 * this.r << 16 ^ 255 * this.g << 8 ^ 255 * this.b << 0 + }, + getHexString: function() { + return ("000000" + this.getHex().toString(16)).slice(-6) + }, + getHSL: function() { + var A = { + h: 0, + s: 0, + l: 0, + a: 1 + } + , e = this.r + , t = this.g + , i = this.b + , o = Math.max(e, t, i) + , n = Math.min(e, t, i) + , r = 0 + , a = 0 + , s = (n + o) / 2; + if (n === o) + r = 0, + a = 0; + else { + var l = o - n; + switch (a = s > .5 ? l / (2 - o - n) : l / (o + n), + o) { + case e: + r = (t - i) / l + (i > t ? 6 : 0); + break; + case t: + r = (i - e) / l + 2; + break; + case i: + r = (e - t) / l + 4 + } + r /= 6 + } + return A.h = r, + A.s = a, + A.l = s, + A.a = this.a, + A + }, + getRGB: function() { + return "rgb(" + (255 * this.r | 0) + "," + (255 * this.g | 0) + "," + (255 * this.b | 0) + ")" + }, + getRGBA: function() { + return "rgba(" + (255 * this.r | 0) + "," + (255 * this.g | 0) + "," + (255 * this.b | 0) + "," + this.a + ")" + }, + getAlpha: function() { + return this.a + }, + getStyle: function() { + return "rgb(" + (255 * this.r | 0) + "," + (255 * this.g | 0) + "," + (255 * this.b | 0) + ")" + }, + offsetHSL: (Zh = {}, + function(A, e, t) { + return this.getHSL(Zh), + Zh.h += A, + Zh.s += e, + Zh.l += t, + this.setHSL(Zh.h, Zh.s, Zh.l), + this + } + ), + fromArray: function(A, e) { + return void 0 === e && (e = 0), + this.r = A[e], + this.g = A[e + 1], + this.b = A[e + 2], + this.a = A[e + 3] || 1, + this + }, + toArray: function(A, e) { + return void 0 === A && (A = []), + void 0 === e && (e = 0), + A[e] = this.r, + A[e + 1] = this.g, + A[e + 2] = this.b, + A[e + 3] = this.a, + A + }, + toRGBArray: function(A, e) { + return void 0 === A && (A = []), + void 0 === e && (e = 0), + A[e] = 255 * this.r, + A[e + 1] = 255 * this.g, + A[e + 2] = 255 * this.b, + A[e + 3] = 255 * this.a, + A + }, + toJSON: function() { + return this.getHex() + } + }), + Object.defineProperties(Xh.prototype, { + red: { + get: function() { + return this.r + }, + set: function(A) { + this.r = A + } + }, + green: { + get: function() { + return this.g + }, + set: function(A) { + this.g = A + } + }, + blue: { + get: function() { + return this.b + }, + set: function(A) { + this.b = A + } + }, + alpha: { + get: function() { + return this.a + }, + set: function(A) { + this.a = A + } + }, + opacity: { + get: function() { + return this.a + }, + set: function(A) { + this.a = A + } + } + }); + var _h = ["uniform bool receiveShadow;", "uniform vec3 ambientLightColor;", "uniform vec3 lightProbe[ 9 ];", "vec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {", " float x = normal.x, y = normal.y, z = normal.z;", " vec3 result = shCoefficients[ 0 ] * 0.886227;", " result += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;", " result += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;", " result += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;", " result += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;", " result += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;", " result += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );", " result += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;", " result += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );", " return result;", "}", "vec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in GeometricContext geometry ) {", " vec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );", " vec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );", " return irradiance;", "}", "vec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {", " vec3 irradiance = ambientLightColor;", " #ifndef PHYSICALLY_CORRECT_LIGHTS", " irradiance *= PI;", " #endif", " return irradiance;", "}", "#if NUM_DIR_LIGHTS > 0", " struct DirectionalLight {", " vec3 direction;", " vec3 color;", " };", " uniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];", " #if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0", " struct DirectionalLightShadow {", " float shadowBias;", " float shadowRadius;", " vec2 shadowMapSize;", " };", " uniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];", " #endif", " void getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {", " directLight.color = directionalLight.color;", " directLight.direction = directionalLight.direction;", " directLight.visible = true;", " }", "#endif", "#if NUM_POINT_LIGHTS > 0", " struct PointLight {", " vec3 position;", " vec3 color;", " float distance;", " float decay;", " };", " uniform PointLight pointLights[ NUM_POINT_LIGHTS ];", " #if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0", " struct PointLightShadow {", " float shadowBias;", " float shadowRadius;", " vec2 shadowMapSize;", " float shadowCameraNear;", " float shadowCameraFar;", " };", " uniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];", " #endif", " void getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {", " vec3 lVector = pointLight.position - geometry.position;", " directLight.direction = normalize( lVector );", " float lightDistance = length( lVector );", " directLight.color = pointLight.color;", " directLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );", " directLight.visible = ( directLight.color != vec3( 0.0 ) );", " }", "#endif", "#if NUM_SPOT_LIGHTS > 0", " struct SpotLight {", " vec3 position;", " vec3 direction;", " vec3 color;", " float distance;", " float decay;", " float coneCos;", " float penumbraCos;", " };", " uniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];", " #if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0", " struct SpotLightShadow {", " float shadowBias;", " float shadowRadius;", " vec2 shadowMapSize;", " };", " uniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];", " #endif", " void getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {", " vec3 lVector = spotLight.position - geometry.position;", " directLight.direction = normalize( lVector );", " float lightDistance = length( lVector );", " float angleCos = dot( directLight.direction, spotLight.direction );", " if ( angleCos > spotLight.coneCos ) {", " float spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );", " directLight.color = spotLight.color;", " directLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );", " directLight.visible = true;", " } else {", " directLight.color = vec3( 0.0 );", " directLight.visible = false;", " }", " }", "#endif", "#if NUM_RECT_AREA_LIGHTS > 0", " struct RectAreaLight {", " vec3 color;", " vec3 position;", " vec3 halfWidth;", " vec3 halfHeight;", " };", " uniform sampler2D ltcMat; uniform sampler2D ltcMag;", " uniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];", "#endif", "#if NUM_HEMI_LIGHTS > 0", " struct HemisphereLight {", " vec3 direction;", " vec3 skyColor;", " vec3 groundColor;", " };", " uniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];", " vec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {", " float dotNL = dot( geometry.normal, hemiLight.direction );", " float hemiDiffuseWeight = 0.5 * dotNL + 0.5;", " vec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );", " #ifndef PHYSICALLY_CORRECT_LIGHTS", " irradiance *= PI;", " #endif", " return irradiance;", " }", "#endif", "#if defined( USE_ENVMAP ) && defined( PHYSICAL )", " vec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {", " vec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );", " #ifdef ENVMAP_TYPE_CUBE", " vec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );", " #ifdef TEXTURE_LOD_EXT", " vec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );", " #else", " vec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );", " #endif", " envMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;", " #elif defined( ENVMAP_TYPE_CUBE_UV )", " vec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );", " vec4 envMapColor = textureCubeUV( queryVec, 1.0 );", " #else", " vec4 envMapColor = vec4( 0.0 );", " #endif", " return PI * envMapColor.rgb * envMapIntensity;", " }", " float getSpecularMIPLevel( const in float blinnShininessExponent, const in int maxMIPLevel ) {", " float maxMIPLevelScalar = float( maxMIPLevel );", " float desiredMIPLevel = maxMIPLevelScalar - 0.79248 - 0.5 * log2( pow2( blinnShininessExponent ) + 1.0 );", " return clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );", " }", " vec3 getLightProbeIndirectRadiance( const in GeometricContext geometry, const in float blinnShininessExponent, const in int maxMIPLevel ) {", " #ifdef ENVMAP_MODE_REFLECTION", " vec3 reflectVec = reflect( -geometry.viewDir, geometry.normal );", " #else", " vec3 reflectVec = refract( -geometry.viewDir, geometry.normal, refractionRatio );", " #endif", " reflectVec = inverseTransformDirection( reflectVec, viewMatrix );", " float specularMIPLevel = getSpecularMIPLevel( blinnShininessExponent, maxMIPLevel );", " #ifdef ENVMAP_TYPE_CUBE", " vec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );", " #ifdef TEXTURE_LOD_EXT", " vec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );", " #else", " vec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );", " #endif", " envMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;", " #elif defined( ENVMAP_TYPE_CUBE_UV )", " vec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );", " vec4 envMapColor = textureCubeUV(queryReflectVec, BlinnExponentToGGXRoughness(blinnShininessExponent));", " #elif defined( ENVMAP_TYPE_EQUIREC )", " vec2 sampleUV;", " sampleUV.y = saturate( reflectVec.y * 0.5 + 0.5 );", " sampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;", " #ifdef TEXTURE_LOD_EXT", " vec4 envMapColor = texture2DLodEXT( envMap, sampleUV, specularMIPLevel );", " #else", " vec4 envMapColor = texture2D( envMap, sampleUV, specularMIPLevel );", " #endif", " envMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;", " #elif defined( ENVMAP_TYPE_SPHERE )", " vec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0,0.0,1.0 ) );", " #ifdef TEXTURE_LOD_EXT", " vec4 envMapColor = texture2DLodEXT( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );", " #else", " vec4 envMapColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );", " #endif", " envMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;", " #endif", " return envMapColor.rgb * envMapIntensity;", " }", "#endif"].join("\n") + , $h = ["", "GeometricContext geometry;", "geometry.position = - vViewPosition;", "geometry.normal = normal;", "geometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );", "#ifdef CLEARCOAT", "geometry.clearcoatNormal = clearcoatNormal;", "#endif", "IncidentLight directLight;", "#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )", "PointLight pointLight;", "#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0", "PointLightShadow pointLightShadow;", "#endif", "#pragma unroll_loop_start", "for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {", "pointLight = pointLights[ i ];", "getPointDirectLightIrradiance( pointLight, geometry, directLight );", "#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )", "pointLightShadow = pointLightShadows[ i ];", "directLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;", "#endif", "RE_Direct( directLight, geometry, material, reflectedLight );", "}", "#endif", "#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )", "SpotLight spotLight;", "#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0", "SpotLightShadow spotLightShadow;", "#endif", "#pragma unroll_loop_start", "for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {", "spotLight = spotLights[ i ];", "getSpotDirectLightIrradiance( spotLight, geometry, directLight );", "#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )", "spotLightShadow = spotLightShadows[ i ];", "directLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;", "#endif", "RE_Direct( directLight, geometry, material, reflectedLight );", "}", "#pragma unroll_loop_end", "#endif", "#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )", "DirectionalLight directionalLight;", "#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0", "DirectionalLightShadow directionalLightShadow;", "#endif", "#pragma unroll_loop_start", "for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {", "directionalLight = directionalLights[ i ];", "getDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );", "#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )", "directionalLightShadow = directionalLightShadows[ i ];", "directLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;", "#endif", "RE_Direct( directLight, geometry, material, reflectedLight );", "}", "#pragma unroll_loop_end", "#endif", "#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )", "RectAreaLight rectAreaLight;", "#pragma unroll_loop_start", "for ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {", "rectAreaLight = rectAreaLights[ i ];", "RE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );", "}", "#pragma unroll_loop_end", "#endif", "#if defined( RE_IndirectDiffuse )", "vec3 iblIrradiance = vec3( 0.0 );", "vec3 irradiance = getAmbientLightIrradiance( ambientLightColor );", "irradiance += getLightProbeIrradiance( lightProbe, geometry );", "#if ( NUM_HEMI_LIGHTS > 0 )", "#pragma unroll_loop_start", "for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {", "irradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );", "}", "#pragma unroll_loop_end", "#endif", "#endif", "#if defined( RE_IndirectSpecular )", "vec3 radiance = vec3( 0.0 );", "vec3 clearcoatRadiance = vec3( 0.0 );", "#endif"].join("\n") + , Ad = ["#ifdef DOUBLE_SIDED", " float flipNormal = ( float( gl_FrontFacing ) * 2.0 - 1.0 );", "#else", " float flipNormal = 1.0;", "#endif\n"].join("\n") + , ed = ["#ifdef FLAT_SHADED", " vec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );", " vec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );", " vec3 normal = normalize( cross( fdx, fdy ) );", "#else", " vec3 normal = normalize( vNormal ) * flipNormal;", "#endif", "#ifdef USE_NORMALMAP", " normal = perturbNormal2Arb( -vViewPosition, normal );", "#elif defined( USE_BUMPMAP )", " normal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );", "#endif", "vec3 geometryNormal = normal;"].join("\n") + , td = ["GeometricContext geometry;", "geometry.position = - vViewPosition;", "#if NUM_CLIPPING_PLANES == 1", " if (gl_FrontFacing) geometry.normal = normal;", " else if (fillFaceClipDistance < 0.0) geometry.normal = -clippingPlanes[0].xyz;", " else geometry.normal = -normal;", "#else", " geometry.normal = normal;", "#endif", "geometry.viewDir = normalize( vViewPosition );", "IncidentLight directLight;", "#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )", " PointLight pointLight;", " for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {", " pointLight = pointLights[ i ];", " getPointDirectLightIrradiance( pointLight, geometry, directLight );", " #ifdef USE_SHADOWMAP", " directLight.color *= all( bvec2( pointLight.shadow, directLight.visible ) ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ] ,pointLight.shadowCameraNear, pointLight.shadowCameraFar) : 1.0;", " #endif", " RE_Direct( directLight, geometry, material, reflectedLight );", " }", "#endif", "#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )", " SpotLight spotLight;", " for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {", " spotLight = spotLights[ i ];", " getSpotDirectLightIrradiance( spotLight, geometry, directLight );", " #ifdef USE_SHADOWMAP", " directLight.color *= all( bvec2( spotLight.shadow, directLight.visible ) ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;", " #endif", " RE_Direct( directLight, geometry, material, reflectedLight );", " }", "#endif", "#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )", " DirectionalLight directionalLight;", " for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {", " directionalLight = directionalLights[ i ];", " getDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );", " #ifdef USE_SHADOWMAP", " directLight.color *= all( bvec2( directionalLight.shadow, directLight.visible ) ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;", " #endif", " RE_Direct( directLight, geometry, material, reflectedLight );", " }", "#endif", "#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )", " RectAreaLight rectAreaLight;", " for ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {", " rectAreaLight = rectAreaLights[ i ];", " RE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );", " }", "#endif", "#if defined( RE_IndirectDiffuse )", " vec3 irradiance = getAmbientLightIrradiance( ambientLightColor );", " #ifdef USE_LIGHTMAP", " vec3 lightMapIrradiance = texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;", " #ifndef PHYSICALLY_CORRECT_LIGHTS", " lightMapIrradiance *= PI; // factor of PI should not be present; included here to prevent breakage", " #endif", " irradiance += lightMapIrradiance;", " #endif", " #if ( NUM_HEMI_LIGHTS > 0 )", " for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {", " irradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );", " }", " #endif", " #if defined( USE_ENVMAP ) && defined( PHYSICAL ) && defined( ENVMAP_TYPE_CUBE_UV )", " irradiance += getLightProbeIndirectIrradiance( /*lightProbe,*/ geometry, 8 );", " #endif", " RE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );", "#endif", "#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )", " vec3 radiance = getLightProbeIndirectRadiance( /*specularLightProbe,*/ geometry, Material_BlinnShininessExponent( material ), 8 );", " #ifndef STANDARD", " vec3 clearCoatRadiance = getLightProbeIndirectRadiance( /*specularLightProbe,*/ geometry, Material_ClearCoat_BlinnShininessExponent( material ), 8 );", " #else", " vec3 clearCoatRadiance = vec3( 0.0 );", " #endif", " RE_IndirectSpecular( radiance, clearCoatRadiance, geometry, material, reflectedLight );", "#endif"].join("\n") + , id = ["#define PHONG", "uniform vec3 diffuse;", "uniform vec3 emissive;", "uniform vec3 specular;", "uniform float shininess;", "uniform float opacity;", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "void main() {", " #include ", " vec4 diffuseColor = vec4( diffuse, opacity );", " ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );", " vec3 totalEmissiveRadiance = emissive;", " #include ", " #include ", " #include ", " #include ", " #include ", " #include ", " #include ", " #include ", " #include ", " float fillFaceClipDistance = 0.0;", " #if NUM_CLIPPING_PLANES == 1", " vec4 plane = clippingPlanes[ 0 ];", " fillFaceClipDistance = dot( vViewPosition, plane.xyz ) - plane.w;", " #endif", " #include ", " #include ", " #include ", " vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;", " #include ", " gl_FragColor = vec4( outgoingLight, diffuseColor.a );", " #include ", " #include ", " #include ", " #include ", " #include ", "}"].join("\n") + , od = ["#define PHONG", "varying vec3 vViewPosition;", "#ifndef FLAT_SHADED", "varying vec3 vNormal;", "#endif", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "void main() {", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#ifndef FLAT_SHADED", "vNormal = normalize( transformedNormal );", "#endif", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "vViewPosition = - mvPosition.xyz;", "#include ", "#include ", "#include ", "#include ", "}"].join("\n") + , nd = ["#define PHYSICAL", "varying vec3 vViewPosition;", "#ifndef FLAT_SHADED", "varying vec3 vNormal;", "#endif", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "void main() {", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#ifndef FLAT_SHADED", "vNormal = normalize( transformedNormal );", "#endif", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "vViewPosition = - mvPosition.xyz;", "#include ", "#include ", "#include ", "}"].join("\n") + , rd = ["#define PHYSICAL", "uniform vec3 diffuse;", "uniform vec3 emissive;", "uniform float roughness;", "uniform float metalness;", "uniform float opacity;", "#ifndef STANDARD", "uniform float clearCoat;", "uniform float clearCoatRoughness;", "#endif", "varying vec3 vViewPosition;", "#ifndef FLAT_SHADED", "varying vec3 vNormal;", "#endif", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "void main() {", "#include ", "vec4 diffuseColor = vec4( diffuse, opacity );", "vec3 totalEmissiveRadiance = emissive;", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "const mat4 diffuseMatrix = mat4(-0.07425443828105927, -0.05652861297130585, 0.12247831374406815, 0.2297295778989792,", " -0.05652860924601555, 0.034799136221408844, -0.08437120914459229, -0.13896968960762024,", " 0.12247832119464874, -0.08437121659517288, 0.021763987839221954, 0.12510454654693604,", " 0.2297295778989792, -0.13896968960762024, 0.12510454654693604, 0.6190560460090637);", "const vec3 sunDir = vec3(-0.6632131338119507, 0.5486575961112976, -0.509041428565979);", "vec3 viewDir = normalize( vViewPosition );", "vec4 diffuseDir = diffuseMatrix * vec4(normal, 1.0);", "float diffuseTerm = dot(vec4(normal, 1.0), diffuseDir);", "float nv = max(dot(normal, -viewDir), 0.0);", "float vl = max(dot(viewDir, sunDir), 0.0);", "diffuseTerm = diffuseTerm + (nv * (1.0 - vl)) * 0.8;", "vec3 H = -normalize(sunDir + viewDir);", "float nh = max(dot(normal, H), 0.0);", "float specularTerm = pow(nh, 100.0);", "vec3 color = 1.05 * vec3(0.5, 0.497, 0.49) * (diffuse * diffuseTerm + vec3(specularTerm)) + diffuse * 0.5;", "vec3 outgoingLight = color + totalEmissiveRadiance;", "gl_FragColor = vec4( outgoingLight, diffuseColor.a );", "#include ", "#include ", "#include ", "#include ", "#include ", "}"].join("\n") + , ad = ["#define EIMMODELPHYSICAL", "mat3 transpose2( const in mat3 v ) {\n mat3 tmp;\n tmp[0] = vec3(v[0].x, v[1].x, v[2].x);\n tmp[1] = vec3(v[0].y, v[1].y, v[2].y);\n tmp[2] = vec3(v[0].z, v[1].z, v[2].z);\n return tmp;\n}\n", "varying vec3 vViewPosition;", "varying vec3 vWorldPosition;", "#ifndef FLAT_SHADED", " varying vec3 vNormal;", " #ifdef USE_TANGENT", " varying vec3 vTangent;", " varying vec3 vBitangent;", " #endif", "#endif", "#ifdef USE_INSTANCE", " attribute float vState;", " attribute float vState2;", " varying float fState;", " attribute float vMirror;", " attribute vec4 aColor;", " varying vec4 vaColor;", " attribute vec3 mcol0;", " attribute vec3 mcol1;", " attribute vec3 mcol2;", " attribute vec3 mcol3;", "#ifdef INSTANCE_STATE_TERTIARY", " attribute float vState3;", "#endif", "#endif", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "mat3 inverse_mat3(in mat3 m)", "{", " float determinant =", " m[0][0] * (m[1][1] * m[2][2] - m[2][1] * m[1][2])", " - m[1][0] * (m[0][1] * m[2][2] - m[2][1] * m[0][2])", " + m[2][0] * (m[0][1] * m[1][2] - m[1][1] * m[0][2]);", " mat3 inverse;", " inverse[0][0] = + (m[1][1] * m[2][2] - m[2][1] * m[1][2]);", " inverse[1][0] = - (m[1][0] * m[2][2] - m[2][0] * m[1][2]);", " inverse[2][0] = + (m[1][0] * m[2][1] - m[2][0] * m[1][1]);", " inverse[0][1] = - (m[0][1] * m[2][2] - m[2][1] * m[0][2]);", " inverse[1][1] = + (m[0][0] * m[2][2] - m[2][0] * m[0][2]);", " inverse[2][1] = - (m[0][0] * m[2][1] - m[2][0] * m[0][1]);", " inverse[0][2] = + (m[0][1] * m[1][2] - m[1][1] * m[0][2]);", " inverse[1][2] = - (m[0][0] * m[1][2] - m[1][0] * m[0][2]);", " inverse[2][2] = + (m[0][0] * m[1][1] - m[1][0] * m[0][1]);", " inverse /= determinant;", " return inverse;", "}", "void main() {", " #include ", " #ifdef USE_TRANSFORM_AOMAP", " #if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )", " vUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;", " #endif", " #endif ", " #include ", " #include ", " #include ", " #include ", " #include ", " #include ", " #include ", "#ifdef USE_INSTANCE", " vaColor = aColor;", " #ifdef INSTANCE_STATE_SECONDARY", " fState = vState2;", " #else", " fState = vState;", " #endif", " #ifdef INSTANCE_STATE_TERTIARY", " fState = vState3;", " #endif", " transformed = vec3(mat4(vec4(mcol0, 0.0),", " vec4(mcol1, 0.0),", " vec4(mcol2, 0.0),", " vec4(mcol3, 1.0)) * vec4(transformed, 1.0));", " #ifdef USE_INSTANCE_NORMAL", " mat3 normalMat = mat3(mcol0, mcol1, mcol2);", " normalMat = inverse_mat3(normalMat);", " normalMat = transpose2(normalMat);", " transformedNormal = normalMat * objectNormal;", " transformedNormal = normalMatrix * transformedNormal;", " #ifdef FLIP_SIDED", " transformedNormal = - transformedNormal;", " #endif", " transformedNormal = normalize( transformedNormal );", " #endif", "#endif", "#ifndef FLAT_SHADED", " vNormal = normalize( transformedNormal );", " #ifdef USE_TANGENT", " vTangent = normalize( transformedTangent );", " vBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );", " #endif", "#endif", " #include ", " #include ", " #include ", " #include ", " #include ", " #include ", " vViewPosition = - mvPosition.xyz;", " // 热力图", " #if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )|| defined(HEATMAPPOINTSCOUNT)", " vec4 worldPosition = vec4( transformed, 1.0 );", " #ifdef USE_INSTANCING", " worldPosition = instanceMatrix * worldPosition;", " #endif", " worldPosition = modelMatrix * worldPosition;", " vWorldPosition = vec3(worldPosition.xyz);", " #endif", " #include ", " #include ", "#ifdef USE_INSTANCE", " if (vMirror <= - 0.01){", " vNormal = vNormal * - 1.0;}", "#endif", "}"].join("\n") + , sd = ["#define EIMMODELPHYSICAL", "#ifdef PHYSICAL", " #define REFLECTIVITY", " #define CLEARCOAT", " #define TRANSPARENCY", "#endif", "uniform vec3 diffuse;", "uniform vec3 emissive;", "uniform float roughness;", "uniform float metalness;", "uniform float opacity;", "#ifdef TRANSPARENCY", " uniform float transparency;", "#endif", "#ifdef REFLECTIVITY", " uniform float reflectivity;", "#endif", "#ifdef CLEARCOAT", " uniform float clearcoat;", " uniform float clearcoatRoughness;", "#endif", "#ifdef USE_SHEEN", " uniform vec3 sheen;", "#endif", "uniform float imageFade;", "varying vec3 vViewPosition;", "varying vec3 vWorldPosition;", "#ifndef FLAT_SHADED", " varying vec3 vNormal;", " #ifdef USE_TANGENT", " varying vec3 vTangent;", " varying vec3 vBitangent;", " #endif", "#endif", "#ifdef USE_INSTANCE", " varying vec4 vaColor;", " varying float fState;", "#endif", "uniform float shift;", "uniform float A;", "uniform float B;", "uniform float C;", "uniform float D;", "uniform float E;", "uniform float F;", "uniform float scale;", "uniform vec4 blinkColor;", "uniform float colorState;", "#ifdef HEATMAPPOINTSCOUNT", " uniform float heatmapPoints[HEATMAPPOINTSCOUNT];", " uniform sampler2D heatmapTexture;", "#endif", "vec3 toneMapCanonFilmic(vec3 color)", "{", " color *= (1.0 / shift);", " return (((color * (A * color + C * B)) / (color * (A * color + B) + D * F))) * (1.0 / scale);", "}", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "vec3 hdrDecode(in vec4 rgbm) {", "const float rgbmScale = 2.82842712;", "vec3 r = rgbm.rgb * (rgbmScale * (1.0 - rgbm.a));", "return r * r;", "}", "vec3 linearToGammaUnreal(in vec3 rgb) {", " return rgb / (rgb + 0.187) * 1.035 * (0.5 / shift);", "}", "bool floatEqual(in float x, in float y) {", " return (x >= y - 0.01) && (x <= y + 0.01);", "}", "bool floatNotEqual(in float x, in float y) {", " return (x <= y - 0.01) || (x >= y + 0.01);", "}", "void main() {", " #include ", " vec4 diffuseColor = vec4( diffuse, opacity );", " #ifdef USE_INSTANCE", " if (floatEqual(fState, -1.0)) ", " discard;", " if (floatNotEqual(fState, 0.0)) ", " diffuseColor = vaColor;", " #endif", " vec4 selectedColor = diffuseColor;", " ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );", " vec3 totalEmissiveRadiance = emissive;", " #include ", " #ifdef USE_MAP", " vec4 texelColor = texture2D( map, vUv );", " texelColor = mapTexelToLinear( texelColor );", " diffuseColor = vec4( mix(diffuseColor.rgb , texelColor.rgb, imageFade),opacity);", " #ifdef USE_INSTANCE", " if (floatNotEqual(fState, 0.0)) ", " diffuseColor = vaColor;", " #endif", " #endif", " #include ", " #include ", " #include ", " #include ", " #include ", " #include ", "float flipNormal = 1.0;", " #include ", " #include ", " #include ", " #include ", " #include ", " #include ", " #include ", " #include ", " #include ", " #include ", "vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;", "#ifdef USE_COLORWITHOUTLIGHT", " gl_FragColor = diffuseColor;", "#else", " #ifdef TRANSPARENCY", " diffuseColor.a *= saturate( 1. - transparency + linearToRelativeLuminance( reflectedLight.directSpecular + reflectedLight.indirectSpecular ) );", " #endif", " gl_FragColor = vec4( outgoingLight, diffuseColor.a );", "#endif", "#ifdef USE_INSTANCE", " #ifdef NOTAFFECTEDBYLIGHT", " if (floatEqual(fState, 2.0))", " gl_FragColor = selectedColor;", " #endif", " #ifdef USE_MAP", " if (floatEqual(fState, 3.0))", " gl_FragColor = vaColor;", " #endif", "#endif", "#if defined( TONE_MAPPING )", " #if defined(USE_LIGHTMAP)", " gl_FragColor.rgb = linearToGammaUnreal(gl_FragColor.rgb );", " #else", " gl_FragColor.rgb = toneMapCanonFilmic( gl_FragColor.rgb );", " #endif", "#endif", "#ifdef USE_INSTANCE", " if (floatEqual(fState, 5.0) && floatEqual(colorState, 1.0))", " gl_FragColor = blinkColor;", "#else", " if (floatEqual(colorState, 1.0))", " gl_FragColor = blinkColor;", " #ifdef NOTAFFECTEDBYLIGHT", " if (floatEqual(colorState, 2.0))", " gl_FragColor = selectedColor;", " #endif", "#endif", "#include ", "#include ", "#include ", "#include ", "#ifdef HEATMAPPOINTSCOUNT", " float heatvalue = 0.0;", " for ( int i = 0; i < HEATMAPPOINTSCOUNT; i += 5 ) {", " float heatpointX = heatmapPoints[i];", " float heatpointY = heatmapPoints[i + 1];", " float heatpointZ = heatmapPoints[i + 2];", " // heatpointIndex保存的是当前热力点的热力值比上(最大热力和最小热力差)", " // 也就是在热力区间中的百分比位置,为0的时候表示最小热力值,1的时候表示最大热力值", " // 可以理解为就是热力点中心的热力值,只不过范围是0-1", " // 热力最大值和最小值分别是所有热力点中热力最大和最小的值", " float heatpointIndex = heatmapPoints[i + 3];", " float heatpointRadius = heatmapPoints[i + 4];", " float dis = distance(vWorldPosition, vec3(heatpointX, heatpointY, heatpointZ));", " if(dis < heatpointRadius) {", " float step = dis / heatpointRadius;", " // 根据距离计算当前片元在当前热力点下的热力值", " // step表示距离,范围0-1,越小表示距离热力点越近,热力越大,将距离区间0-1和热力区间heatpointIndex-0对应起来", " float currentvalue = (1.0 - step) * heatpointIndex;", " // 这里用到了一个颜色叠加的公式,把每个热点对当前片元产生的热力进行叠加,", " // 没有特殊逻辑,也可以简单相加", " heatvalue = heatvalue + currentvalue - heatvalue * currentvalue;", " if (heatvalue > 1.0) {", " heatvalue = 1.0;", " break;", " }", " }", " }", " if (heatvalue > 0.0) {", " vec4 color = texture2D(heatmapTexture, vec2(heatvalue, 0.5));", " heatvalue = 0.5*heatvalue + 0.5;//使下列因子范围为1-0.5", " color = vec4( mix(gl_FragColor.rgb, color.rgb, heatvalue),gl_FragColor.a);", " gl_FragColor = color;", " }", "#endif", "}"].join("\n"); + tt.lights_pars = _h, + tt.lights_template = $h, + tt.normal_flip = Ad, + tt.normal_fragment = ed, + tt.meshphong_id_vert = od, + tt.lights_fillFace_template = td, + tt.fillFaceFragment = id, + tt.standardVertex = ad, + tt.bos3dStandardFragment = sd, + tt.newStyleVertex = nd, + tt.newStyleFragment = rd, + it.fillFacePhong = { + uniforms: Ge.merge([Xe.common, Xe.aomap, Xe.lightmap, Xe.emissivemap, Xe.bumpmap, Xe.normalmap, Xe.displacementmap, Xe.gradientmap, Xe.fog, Xe.lights, { + emissive: { + value: new LA(0) + }, + specular: { + value: new LA(1118481) + }, + shininess: { + value: 30 + } + }]), + vertexShader: tt.meshphong_id_vert, + fragmentShader: tt.fillFaceFragment + }, + it.newStyle = { + vertexShader: tt.newStyleVertex, + fragmentShader: tt.newStyleFragment + }, + it.bos3dStandard = { + vertexShader: tt.standardVertex, + fragmentShader: tt.bos3dStandardFragment + }; + var ld = function(A) { + yr.call(this), + this.type = "bos3dStandard", + this.roughness = 1, + this.metalness = 0, + this.originRoughness = 1, + this.originMetalness = 0, + this.pureColor = 0, + this.textureColor = 0, + this.imageFade = 1, + this.transparentEx = !1, + this.shift = .5, + this.A = .64, + this.B = .03, + this.C = .02, + this.D = .54, + this.E = 0, + this.F = .81, + this.scale = .92, + this.shininess = 30, + this.specular = new LA(0); + var e = (new LA).setHex(3330982) + , t = [e.r, e.g, e.b, 1]; + this.colorState = Yc.NONE, + this.blinkColor = (new p).fromArray(t), + this.uniforms = Ge.merge([Xe.common, Xe.specularmap, Xe.envmap, Xe.aomap, Xe.lightmap, Xe.emissivemap, Xe.bumpmap, Xe.normalmap, Xe.displacementmap, Xe.roughnessmap, Xe.metalnessmap, Xe.fog, Xe.lights, { + emissive: { + value: new LA(0) + }, + specular: { + value: new LA(0) + }, + roughness: { + value: .5 + }, + metalness: { + value: .5 + }, + envMapIntensity: { + value: 1 + } + }, { + shift: { + value: .5 + }, + A: { + value: .64 + }, + B: { + value: .03 + }, + C: { + value: .02 + }, + D: { + value: .54 + }, + E: { + value: 0 + }, + F: { + value: .81 + }, + scale: { + value: .92 + }, + colorState: { + value: 0 + }, + blinkColor: { + value: (new p).fromArray(t) + }, + imageFade: { + value: 1 + }, + heatmapPoints: { + value: [] + }, + heatmapTexture: { + value: null + } + }]), + this.vertexShader = tt.standardVertex, + this.fragmentShader = tt.bos3dStandardFragment, + this.defaultAttributeValues = { + color: [1, 1, 1], + uv: [0, 0], + uv2: [0, 0] + }, + void 0 !== A && (void 0 !== A.attributes && Bh.error("IBLMaterial: attributes should now be defined in THREE.BufferGeometry instead."), + this.setValues(A)), + this.lights && (this.uniforms = Ge.merge([this.uniforms, Xe.lights])), + this.refreshUniforms && this.refreshUniforms() + }; + function cd(A, e) { + var t = (65535 & A) + (65535 & e); + return (A >> 16) + (e >> 16) + (t >> 16) << 16 | 65535 & t + } + function hd(A, e, t, i, o, n) { + return cd((r = cd(cd(e, A), cd(i, n))) << (a = o) | r >>> 32 - a, t); + var r, a + } + function dd(A, e, t, i, o, n, r) { + return hd(e & t | ~e & i, A, e, o, n, r) + } + function pd(A, e, t, i, o, n, r) { + return hd(e & i | t & ~i, A, e, o, n, r) + } + function gd(A, e, t, i, o, n, r) { + return hd(e ^ t ^ i, A, e, o, n, r) + } + function ud(A, e, t, i, o, n, r) { + return hd(t ^ (e | ~i), A, e, o, n, r) + } + function fd(A, e) { + var t, i, o, n, r; + A[e >> 5] |= 128 << e % 32, + A[14 + (e + 64 >>> 9 << 4)] = e; + var a = 1732584193 + , s = -271733879 + , l = -1732584194 + , c = 271733878; + for (t = 0; A.length > t; t += 16) + i = a, + o = s, + n = l, + r = c, + a = dd(a, s, l, c, A[t], 7, -680876936), + c = dd(c, a, s, l, A[t + 1], 12, -389564586), + l = dd(l, c, a, s, A[t + 2], 17, 606105819), + s = dd(s, l, c, a, A[t + 3], 22, -1044525330), + a = dd(a, s, l, c, A[t + 4], 7, -176418897), + c = dd(c, a, s, l, A[t + 5], 12, 1200080426), + l = dd(l, c, a, s, A[t + 6], 17, -1473231341), + s = dd(s, l, c, a, A[t + 7], 22, -45705983), + a = dd(a, s, l, c, A[t + 8], 7, 1770035416), + c = dd(c, a, s, l, A[t + 9], 12, -1958414417), + l = dd(l, c, a, s, A[t + 10], 17, -42063), + s = dd(s, l, c, a, A[t + 11], 22, -1990404162), + a = dd(a, s, l, c, A[t + 12], 7, 1804603682), + c = dd(c, a, s, l, A[t + 13], 12, -40341101), + l = dd(l, c, a, s, A[t + 14], 17, -1502002290), + a = pd(a, s = dd(s, l, c, a, A[t + 15], 22, 1236535329), l, c, A[t + 1], 5, -165796510), + c = pd(c, a, s, l, A[t + 6], 9, -1069501632), + l = pd(l, c, a, s, A[t + 11], 14, 643717713), + s = pd(s, l, c, a, A[t], 20, -373897302), + a = pd(a, s, l, c, A[t + 5], 5, -701558691), + c = pd(c, a, s, l, A[t + 10], 9, 38016083), + l = pd(l, c, a, s, A[t + 15], 14, -660478335), + s = pd(s, l, c, a, A[t + 4], 20, -405537848), + a = pd(a, s, l, c, A[t + 9], 5, 568446438), + c = pd(c, a, s, l, A[t + 14], 9, -1019803690), + l = pd(l, c, a, s, A[t + 3], 14, -187363961), + s = pd(s, l, c, a, A[t + 8], 20, 1163531501), + a = pd(a, s, l, c, A[t + 13], 5, -1444681467), + c = pd(c, a, s, l, A[t + 2], 9, -51403784), + l = pd(l, c, a, s, A[t + 7], 14, 1735328473), + a = gd(a, s = pd(s, l, c, a, A[t + 12], 20, -1926607734), l, c, A[t + 5], 4, -378558), + c = gd(c, a, s, l, A[t + 8], 11, -2022574463), + l = gd(l, c, a, s, A[t + 11], 16, 1839030562), + s = gd(s, l, c, a, A[t + 14], 23, -35309556), + a = gd(a, s, l, c, A[t + 1], 4, -1530992060), + c = gd(c, a, s, l, A[t + 4], 11, 1272893353), + l = gd(l, c, a, s, A[t + 7], 16, -155497632), + s = gd(s, l, c, a, A[t + 10], 23, -1094730640), + a = gd(a, s, l, c, A[t + 13], 4, 681279174), + c = gd(c, a, s, l, A[t], 11, -358537222), + l = gd(l, c, a, s, A[t + 3], 16, -722521979), + s = gd(s, l, c, a, A[t + 6], 23, 76029189), + a = gd(a, s, l, c, A[t + 9], 4, -640364487), + c = gd(c, a, s, l, A[t + 12], 11, -421815835), + l = gd(l, c, a, s, A[t + 15], 16, 530742520), + a = ud(a, s = gd(s, l, c, a, A[t + 2], 23, -995338651), l, c, A[t], 6, -198630844), + c = ud(c, a, s, l, A[t + 7], 10, 1126891415), + l = ud(l, c, a, s, A[t + 14], 15, -1416354905), + s = ud(s, l, c, a, A[t + 5], 21, -57434055), + a = ud(a, s, l, c, A[t + 12], 6, 1700485571), + c = ud(c, a, s, l, A[t + 3], 10, -1894986606), + l = ud(l, c, a, s, A[t + 10], 15, -1051523), + s = ud(s, l, c, a, A[t + 1], 21, -2054922799), + a = ud(a, s, l, c, A[t + 8], 6, 1873313359), + c = ud(c, a, s, l, A[t + 15], 10, -30611744), + l = ud(l, c, a, s, A[t + 6], 15, -1560198380), + s = ud(s, l, c, a, A[t + 13], 21, 1309151649), + a = ud(a, s, l, c, A[t + 4], 6, -145523070), + c = ud(c, a, s, l, A[t + 11], 10, -1120210379), + l = ud(l, c, a, s, A[t + 2], 15, 718787259), + s = ud(s, l, c, a, A[t + 9], 21, -343485551), + a = cd(a, i), + s = cd(s, o), + l = cd(l, n), + c = cd(c, r); + return [a, s, l, c] + } + function md(A) { + var e, t = "", i = 32 * A.length; + for (e = 0; i > e; e += 8) + t += String.fromCharCode(A[e >> 5] >>> e % 32 & 255); + return t + } + function Cd(A) { + var e, t = []; + for (t[(A.length >> 2) - 1] = void 0, + e = 0; t.length > e; e += 1) + t[e] = 0; + var i = 8 * A.length; + for (e = 0; i > e; e += 8) + t[e >> 5] |= (255 & A.charCodeAt(e / 8)) << e % 32; + return t + } + function yd(A) { + var e, t, i = ""; + for (t = 0; A.length > t; t += 1) + e = A.charCodeAt(t), + i += "0123456789abcdef".charAt(e >>> 4 & 15) + "0123456789abcdef".charAt(15 & e); + return i + } + function vd(A) { + return unescape(encodeURIComponent(A)) + } + function Id(A) { + return function(A) { + return md(fd(Cd(A), 8 * A.length)) + }(vd(A)) + } + function Ed(A, e) { + return function(A, e) { + var t, i, o = Cd(A), n = [], r = []; + for (n[15] = r[15] = void 0, + o.length > 16 && (o = fd(o, 8 * A.length)), + t = 0; 16 > t; t += 1) + n[t] = 909522486 ^ o[t], + r[t] = 1549556828 ^ o[t]; + return i = fd(n.concat(Cd(e)), 512 + 8 * e.length), + md(fd(r.concat(i), 640)) + }(vd(A), vd(e)) + } + function Bd(A, e, t) { + return e ? t ? Ed(e, A) : yd(Ed(e, A)) : t ? Id(A) : yd(Id(A)) + } + (ld.prototype = Object.create(yr.prototype)).constructor = ld, + ld.prototype.destroy = function() { + yr.prototype.dispose.call(this), + this.blinkColor = null, + this.uniforms = null, + this.defaultAttributeValues = null, + this.lights = null + } + , + ld.prototype.copy = function(A) { + return yr.prototype.copy.call(this, A), + this.shift = A.shift, + this.A = A.A, + this.B = A.B, + this.C = A.C, + this.D = A.D, + this.E = A.E, + this.F = A.F, + this.scale = A.scale, + this.colorState = A.colorState, + this.blinkColor.copy(A.blinkColor), + this.imageFade = A.imageFade, + Object.assign(this.defines, A.defines), + this + } + , + ld.prototype.refreshUniforms = function() { + this.uniforms.shift.value = this.shift, + this.uniforms.A.value = this.A, + this.uniforms.B.value = this.B, + this.uniforms.C.value = this.C, + this.uniforms.D.value = this.D, + this.uniforms.E.value = this.E, + this.uniforms.F.value = this.F, + this.uniforms.scale.value = this.scale, + this.uniforms.blinkColor.value.copy(this.blinkColor), + this.uniforms.colorState.value = this.colorState, + this.uniforms.imageFade.value = this.imageFade + } + , + ld.prototype.setBlinkColor = function(A) { + this.blinkColor.fromArray(A.toArray()), + this.uniforms.blinkColor.value.copy(this.blinkColor), + this.uniforms.colorState.value = Yc.BLINK + } + , + ld.prototype.updateBlinkUniformValue = function(A, e) { + this.uniforms.colorState.value = A, + this.uniforms.blinkColor.value.copy(e) + } + , + ld.prototype.resetBlinkUniformValue = function() { + this.uniforms.colorState.value = this.colorState, + this.uniforms.blinkColor.value.copy(this.blinkColor) + } + , + Object.defineProperties(ld.prototype, { + transparent: { + set: function(A) { + this.transparentEx = A, + vc.notDepthWriteByTransparent && (this.depthWrite = !A) + }, + get: function() { + return this.transparentEx + } + } + }); + var xd = { + REGULAR: 0, + FRACTAL: 1, + DISORDER: 2 + } + , Sd = { + type: xd.REGULAR, + color1: new Xh(0,0,0,1), + color2: new Xh(255,255,255,1), + size: 10, + level: 1, + phase: 1, + width: 32, + height: 32, + thresholdLow: 0, + thresholdHigh: 1 + }; + function wd() { + this.m = 2147483647, + this.a = 16807, + this.q = 127773, + this.r = 2836, + this.seed = 1, + this.setSeed = function(A) { + A > 0 || (A = -A % (this.m - 1) + 1), + A > this.m - 1 && (A = this.m - 1), + this.seed = A + } + , + this.nextLong = function() { + var A = this.a * (this.seed % this.q) - this.r * Math.floor(this.seed / this.q); + return A > 0 || (A += this.m), + this.seed = A, + A + } + , + this.next = function() { + return this.nextLong() / this.m + } + } + function Md(A, e, t) { + this.width = A, + this.height = e, + this.randseed = t, + this.gradients = new Array(A * e * 2); + var i = new wd; + i.setSeed(t); + for (var o = 0; this.gradients.length > o; o += 2) { + var n, r, a = i.next() * Math.PI * 2; + n = Math.sin(a), + r = Math.cos(a), + this.gradients[o] = n, + this.gradients[o + 1] = r + } + this.dot = function(A, e, t, i) { + var o = 2 * (A + e * this.width); + return this.gradients[o] * t + this.gradients[o + 1] * i + } + , + this.lerp = function(A, e, t) { + return A + t * (e - A) + } + , + this.sCurve = function(A) { + return A * A * (3 - 2 * A) + } + , + this.getValue = function(A, e, t, i) { + var o = Math.floor(A) + , n = Math.floor(e) + , r = A - o + , a = e - n + , s = o + , l = n + , c = o === this.width - 1 ? 0 : o + 1 + , h = n === this.height - 1 ? 0 : n + 1 + , d = this.dot(s, l, r, a) + , p = this.dot(c, l, r - 1, a) + , g = this.dot(s, h, r, a - 1) + , u = this.dot(c, h, r - 1, a - 1) + , f = this.lerp(d, p, this.sCurve(r)) + , m = this.lerp(g, u, this.sCurve(r)); + return this.lerp(f, m, this.sCurve(a)) + } + } + var bd, Ud, Fd = function(A) { + var e = Object.assign({}, Sd, A); + switch (e.type) { + case xd.REGULAR: + return function(A) { + var e = 10 * A.width + , t = 10 * A.height; + if (!(A.color1 instanceof Xh)) + return Bh.warn("color1 不合法"), + null; + if (!(A.color2 instanceof Xh)) + return Bh.warn("color2 不合法"), + null; + var i = A.color1.toRGBArray() + , o = A.color2.toRGBArray() + , n = A.thresholdLow + , r = A.thresholdHigh + , a = 10 * A.size + , s = A.phase; + 1 === a && (a = 1.1); + for (var l = new Array(e * t * 4), c = new Md(Math.ceil(e / a),Math.ceil(t / a),s), h = 0, d = 0, p = 0, g = 0, u = 0, f = 0, m = 0; t > m; m += 1) + for (var C = 0; e > C; C += 1) { + var y = (c.getValue(C / a, m / a) + 1) / 2; + if (y > r) + h = o[0], + d = o[1], + p = o[2]; + else if (n > y) + h = i[0], + d = i[1], + p = i[2]; + else if (y >= n && r >= y || n === r) { + var v = (y - n) / (r - n || 1); + g = o[0] * v, + u = o[1] * v, + f = o[2] * v, + h = i[0] * (v = 1 - v) + g, + d = i[1] * v + u, + p = i[2] * v + f + } + var I = 4 * (m * e + C); + l[I] = h, + l[I + 1] = d, + l[I + 2] = p, + l[I + 3] = 255 + } + var E = document.createElement("canvas"); + E.width = e, + E.height = t; + for (var B = E.getContext("2d"), x = B.createImageData(e, t), S = 0, w = e * t * 4; w > S; S += 1) + x.data[S] = l[S]; + return B.putImageData(x, 0, 0), + E.toDataURL() + }(e); + case xd.FRACTAL: + return function(A) { + var e = 10 * A.width + , t = 10 * A.height; + if (!(A.color1 instanceof Xh)) + return Bh.warn("color1 不合法"), + null; + if (!(A.color2 instanceof Xh)) + return Bh.warn("color2 不合法"), + null; + var i = A.color1.toRGBArray() + , o = A.color2.toRGBArray() + , n = A.thresholdLow + , r = A.thresholdHigh + , a = 10 * A.size + , s = A.phase + , l = A.level; + 1 === a && (a = 1.1); + for (var c = new Array(e * t * 4), h = [], d = a, p = 0, g = l; g > p; p += 1) { + var u = new Md(Math.ceil(e / d),Math.ceil(t / d),s); + d /= 2, + h.push(u) + } + for (var f = 0, m = 0, C = 0, y = 0, v = 0, I = 0, E = 0; t > E; E += 1) + for (var B = 0; e > B; B += 1) { + for (var x = 0, S = a, w = 0, M = l; M > w; w += 1) + x += h[w].getValue(B / S, E / S, s) * (l - w), + S /= 2; + var b = ((x /= l) + 1) / 2; + if (b > r) + f = o[0], + m = o[1], + C = o[2]; + else if (n > b) + f = i[0], + m = i[1], + C = i[2]; + else if (b >= n && r >= b || n === r) { + var U = (b - n) / (r - n || 1); + y = o[0] * U, + v = o[1] * U, + I = o[2] * U, + f = i[0] * (U = 1 - U) + y, + m = i[1] * U + v, + C = i[2] * U + I + } + var F = 4 * (E * e + B); + c[F] = f, + c[F + 1] = m, + c[F + 2] = C, + c[F + 3] = 255 + } + var K = document.createElement("canvas"); + K.width = e, + K.height = t; + for (var Q = K.getContext("2d"), R = Q.createImageData(e, t), T = 0, k = e * t * 4; k > T; T += 1) + R.data[T] = c[T]; + return Q.putImageData(R, 0, 0), + K.toDataURL() + }(e); + case xd.DISORDER: + return function(A) { + var e = 10 * A.width + , t = 10 * A.height; + if (!(A.color1 instanceof Xh)) + return Bh.warn("color1 不合法"), + null; + if (!(A.color2 instanceof Xh)) + return Bh.warn("color2 不合法"), + null; + var i = A.color1.toRGBArray() + , o = A.color2.toRGBArray() + , n = A.thresholdLow + , r = A.thresholdHigh + , a = 10 * A.size + , s = A.phase + , l = A.level; + 1 === a && (a = 1.1); + for (var c = new Array(e * t * 4), h = [], d = a, p = 0, g = l; g > p; p += 1) { + var u = new Md(Math.ceil(e / d),Math.ceil(t / d),s); + d /= 2, + h.push(u) + } + for (var f = 0, m = 0, C = 0, y = 0, v = 0, I = 0, E = 0; t > E; E += 1) + for (var B = 0; e > B; B += 1) { + for (var x = 0, S = a, w = 0, M = l; M > w; w += 1) + x += h[w].getValue(B / S, E / S, s) * (l - w), + S /= 2; + x /= l; + var b = Math.abs(x) + .05; + if (b > r) + f = o[0], + m = o[1], + C = o[2]; + else if (n > b) + f = i[0], + m = i[1], + C = i[2]; + else if (b >= n && r >= b || n === r) { + var U = (b - n) / (r - n || 1); + y = o[0] * U, + v = o[1] * U, + I = o[2] * U, + f = i[0] * (U = 1 - U) + y, + m = i[1] * U + v, + C = i[2] * U + I + } + var F = 4 * (E * e + B); + c[F] = f, + c[F + 1] = m, + c[F + 2] = C, + c[F + 3] = 255 + } + var K = document.createElement("canvas"); + K.width = e, + K.height = t; + for (var Q = K.getContext("2d"), R = Q.createImageData(e, t), T = 0, k = e * t * 4; k > T; T += 1) + R.data[T] = c[T]; + return Q.putImageData(R, 0, 0), + K.toDataURL() + }(e); + default: + return Bh.warn("不支持的噪波类型"), + null + } + }, Kd = { + DefaultMaterial: new Ir({ + color: 255, + side: 2 + }), + DefaultWireframeColor: { + color: new LA(0,0,0), + opacity: .4 + }, + getDefaultStandardMaterial: (bd = null, + function() { + return bd || (bd = new ld({ + color: 0, + side: 2 + })), + bd + } + ), + createInstancePhongMaterial: function(A) { + return A.clone() + }, + updateBasicMaterial: function(A, e) { + A.needsUpdate = !0 + }, + setMatrixUniform: function(A) {}, + createPhongMaterial: function(A) { + var e = new Ir(A); + return e.type = "FillFacePhong", + e.uniforms = Ge.merge([it.fillFacePhong.uniforms]), + e.vertexShader = it.fillFacePhong.vertexShader, + e.fragmentShader = it.fillFacePhong.fragmentShader, + e.side = 2, + e + }, + createStandardMaterial: function(A) { + var e = new ld(A); + return vc.EnableTransformAoMap && (e.defines.USE_TRANSFORM_AOMAP = ""), + e + }, + createInstanceMaterial: function(A, e) { + var t = Kd.createStandardMaterial(A); + return t.defines.USE_INSTANCE = "", + e && (t.defines.USE_INSTANCE_NORMAL = ""), + t.colorState = Yc.BLINK, + vc.InfluencedByLight || (t.defines.NOTAFFECTEDBYLIGHT = ""), + t.refreshUniforms(), + t + }, + createMaterialByMaterialBufferAndTexture: function(A, e) { + var t, i, o, n, r, a, l, c, h = Kd.createStandardMaterial(); + if ((h.name = A.name || A.id, + h.key = A.id, + A.emissive && h.emissive && (1 === A.emissive[0] && 1 === A.emissive[1] && 1 === A.emissive[2] || h.emissive.setRGB(A.emissive[0], A.emissive[1], A.emissive[2])), + A.specular && h.specular && h.specular.setRGB(A.specular[0], A.specular[1], A.specular[2]), + A.color ? h.color.setRGB(A.color[0], A.color[1], A.color[2]) : A.emissive && h.emissive ? h.color.setRGB(0, 0, 0) : h.color.setRGB(.72, .72, .72), + A.tint && (h.imageFade = void 0 === A.imageFade || 0 > A.imageFade || A.imageFade > 10 ? .5 : A.imageFade, + h.color.setRGB(A.tint[0], A.tint[1], A.tint[2])), + A.map && vc.EnableTextureLoading) && ("string" == typeof A.map ? void 0 !== A.mapOffsetY && 0 !== A.mapOffsetY || void 0 !== A.mapOffsetX && 0 !== A.mapOfsfetX || void 0 !== A.mapScaleX && 1 !== A.mapScaleX || void 0 !== A.mapScaleY && 1 !== A.mapScaleY || void 0 !== A.mapWAngle && 0 !== A.mapWAngle ? t = A.mapOffsetX + "_" + A.mapOffsetY + "_" + A.mapScaleX + "_" + A.mapScaleY + "_" + A.mapWAngle + "_" + A.map : e[A.map] ? h.map = e[A.map] : Bh.warn(h.name, " 中map贴图未找到:", A.map) : t = Bd(JSON.stringify(A.map)), + t)) + if (e[t]) + h.map = e[t]; + else { + var p = new d; + if (p.wrapS = p.wrapT = 1e3, + "string" == typeof A.map) + p.image = e[A.map] && e[A.map].image ? e[A.map].image : null; + else { + var g = A.map + , u = document.createElement("img") + , f = Fd({ + type: Number(g.noise_Type), + color1: (new Xh).fromArray(g.noise_Color1), + color2: (new Xh).fromArray(g.noise_Color2), + size: g.noise_Size, + level: g.noise_Levels, + phase: g.noise_Phase, + width: 32, + height: 32, + thresholdLow: g.noise_ThresholdLow, + thresholdHigh: g.noise_ThresholdHigh + }); + f && (u.src = f, + p.image = u) + } + p.needsUpdate = !0, + p.image && (p.offset.x = A.mapOffsetX ? A.mapOffsetX : 0, + p.offset.y = A.mapOffsetY ? A.mapOffsetY : 0, + p.repeat.x = A.mapScaleX ? A.mapScaleX : 1, + p.repeat.y = A.mapScaleY ? A.mapScaleY : 1, + p.rotation = A.mapWAngle ? A.mapWAngle : 0, + e[t] = p, + h.map = p) + } + if (A.bumpMap && vc.EnableTextureLoading && ("string" == typeof A.bumpMap ? void 0 !== A.bumpMapOffsetY && 0 !== A.bumpMapOffsetY || void 0 !== A.bumpMapOffsetX && 0 !== A.bumpMapOfsfetX || void 0 !== A.bumpMapScaleX && 1 !== A.bumpMapScaleX || void 0 !== A.bumpMapScaleY && 1 !== A.bumpMapScaleY || void 0 !== A.bumpMapWAngle && 0 !== A.bumpMapWAngle ? i = A.bumpMapOffsetX + "_" + A.bumpMapOffsetY + "_" + A.bumpMapScaleX + "_" + A.bumpMapScaleY + "_" + A.bumpMapWAngle + "_" + A.bumpMap : e[A.bumpMap] ? h.bumpMap = e[A.bumpMap] : Bh.warn(h.name, " 中bumpMap贴图未找到:", A.bumpMap) : i = Bd(JSON.stringify(A.bumpMap)), + i)) + if (e[i]) + h.bumpMap = e[i]; + else { + var m = new d; + if (m.wrapS = m.wrapT = 1e3, + "string" == typeof A.bumpMap) + m.image = e[A.bumpMap] && e[A.bumpMap].image ? e[A.bumpMap].image : null; + else { + var C = A.bumpMap + , y = document.createElement("img") + , v = Fd({ + type: Number(C.noise_Type), + color1: (new Xh).fromArray(C.noise_Color1), + color2: (new Xh).fromArray(C.noise_Color2), + size: C.noise_Size, + level: C.noise_Levels, + phase: C.noise_Phase, + width: 32, + height: 32, + thresholdLow: C.noise_ThresholdLow, + thresholdHigh: C.noise_ThresholdHigh + }); + v && (y.src = v, + m.image = y) + } + m.needsUpdate = !0, + m.image && (m.offset.x = A.bumpMapOffsetX ? A.bumpMapOffsetX : 0, + m.offset.y = A.bumpMapOffsetY ? A.bumpMapOffsetY : 0, + m.repeat.x = A.bumpMapScaleX ? A.bumpMapScaleX : 1, + m.repeat.y = A.bumpMapScaleY ? A.bumpMapScaleY : 1, + m.rotation = A.bumpMapWAngle ? A.bumpMapWAngle : 0, + e[i] = m, + h.bumpMap = m) + } + if ((void 0 !== A.bumpScale && (h.bumpScale = A.bumpScale), + A.aoMap && vc.EnableTextureLoading) && ("string" == typeof A.aoMap ? void 0 !== A.aoMapOffsetY && 0 !== A.aoMapOffsetY || void 0 !== A.aoMapOffsetX && 0 !== A.aoMapOfsfetX || void 0 !== A.aoMapScaleX && 1 !== A.aoMapScaleX || void 0 !== A.aoMapScaleY && 1 !== A.aoMapScaleY || void 0 !== A.aoMapWAngle && 0 !== A.aoMapWAngle ? o = A.aoMapOffsetX + "_" + A.aoMapOffsetY + "_" + A.aoMapScaleX + "_" + A.aoMapScaleY + "_" + A.aoMapWAngle + "_" + A.aoMap : e[A.aoMap] ? h.aoMap = e[A.aoMap] : Bh.warn(h.name, " 中aoMap贴图未找到:", A.aoMap) : o = Bd(JSON.stringify(A.aoMap)), + o)) + if (e[o]) + h.aoMap = e[o]; + else { + var I = new d; + if (I.wrapS = I.wrapT = 1e3, + "string" == typeof A.aoMap) + I.image = e[A.aoMap] && e[A.aoMap].image ? e[A.aoMap].image : null; + else { + var E = A.aoMap + , B = document.createElement("img") + , x = Fd({ + type: Number(E.noise_Type), + color1: (new Xh).fromArray(E.noise_Color1), + color2: (new Xh).fromArray(E.noise_Color2), + size: E.noise_Size, + level: E.noise_Levels, + phase: E.noise_Phase, + width: 32, + height: 32, + thresholdLow: E.noise_ThresholdLow, + thresholdHigh: E.noise_ThresholdHigh + }); + x && (B.src = x, + I.image = B) + } + I.needsUpdate = !0, + I.image && (I.offset.x = A.aoMapOffsetX ? A.aoMapOffsetX : 0, + I.offset.y = A.aoMapOffsetY ? A.aoMapOffsetY : 0, + I.repeat.x = A.aoMapScaleX ? A.aoMapScaleX : 1, + I.repeat.y = A.aoMapScaleY ? A.aoMapScaleY : 1, + I.rotation = A.aoMapWAngle ? A.aoMapWAngle : 0, + e[o] = I, + h.aoMap = I) + } + if ((void 0 !== A.aoMapIntensity && (h.aoMapIntensity = A.aoMapIntensity), + A.normalMap && vc.EnableTextureLoading) && ("string" == typeof A.normalMap ? void 0 !== A.normalMapOffsetY && 0 !== A.normalMapOffsetY || void 0 !== A.normalMapOffsetX && 0 !== A.normalMapOfsfetX || void 0 !== A.normalMapScaleX && 1 !== A.normalMapScaleX || void 0 !== A.normalMapScaleY && 1 !== A.normalMapScaleY || void 0 !== A.normalMapWAngle && 0 !== A.normalMapWAngle ? n = A.normalMapOffsetX + "_" + A.normalMapOffsetY + "_" + A.normalMapScaleX + "_" + A.normalMapScaleY + "_" + A.normalMapWAngle + "_" + A.normalMap : e[A.normalMap] ? h.normalMap = e[A.normalMap] : Bh.warn(h.name, " 中normalMap贴图未找到:", A.normalMap) : n = Bd(JSON.stringify(A.normalMap)), + n)) + if (e[n]) + h.normalMap = e[n]; + else { + var S = new d; + if (S.wrapS = S.wrapT = 1e3, + "string" == typeof A.normalMap) + S.image = e[A.normalMap] && e[A.normalMap].image ? e[A.normalMap].image : null; + else { + var w = A.normalMap + , M = document.createElement("img") + , b = Fd({ + type: Number(w.noise_Type), + color1: (new Xh).fromArray(w.noise_Color1), + color2: (new Xh).fromArray(w.noise_Color2), + size: w.noise_Size, + level: w.noise_Levels, + phase: w.noise_Phase, + width: 32, + height: 32, + thresholdLow: w.noise_ThresholdLow, + thresholdHigh: w.noise_ThresholdHigh + }); + b && (M.src = b, + S.image = M) + } + S.needsUpdate = !0, + S.image && (S.offset.x = A.normalMapOffsetX ? A.normalMapOffsetX : 0, + S.offset.y = A.normalMapOffsetY ? A.normalMapOffsetY : 0, + S.repeat.x = A.normalMapScaleX ? A.normalMapScaleX : 1, + S.repeat.y = A.normalMapScaleY ? A.normalMapScaleY : 1, + S.rotation = A.normalMapWAngle ? A.normalMapWAngle : 0, + e[n] = S, + h.normalMap = S) + } + if (void 0 !== A.normalScale && (h.normalScale = (new s).fromArray(A.normalScale)), + A.alphaMap && vc.EnableTextureLoading) { + var U; + if ("string" == typeof A.alphaMap ? void 0 !== A.alphaMapOffsetY && 0 !== A.alphaMapOffsetY || void 0 !== A.alphaMapOffsetX && 0 !== A.alphaMapOfsfetX || void 0 !== A.alphaMapScaleX && 1 !== A.alphaMapScaleX || void 0 !== A.alphaMapScaleY && 1 !== A.alphaMapScaleY || void 0 !== A.alphaMapWAngle && 0 !== A.alphaMapWAngle ? U = A.alphaMapOffsetX + "_" + A.alphaMapOffsetY + "_" + A.alphaMapScaleX + "_" + A.alphaMapScaleY + "_" + A.alphaMapWAngle + "_" + A.alphaMap : e[A.alphaMap] ? h.alphaMap = e[A.alphaMap] : Bh.warn(h.name, " 中alphaMap贴图未找到:", A.alphaMap) : U = Bd(JSON.stringify(A.alphaMap)), + U) + if (e[U]) + h.alphaMap = e[U]; + else { + var F = new d; + if (F.wrapS = F.wrapT = 1e3, + "string" == typeof A.alphaMap) + F.image = e[A.alphaMap] && e[A.alphaMap].image ? e[A.alphaMap].image : null; + else { + var K = A.alphaMap + , Q = document.createElement("img") + , R = Fd({ + type: Number(K.noise_Type), + color1: (new Xh).fromArray(K.noise_Color1), + color2: (new Xh).fromArray(K.noise_Color2), + size: K.noise_Size, + level: K.noise_Levels, + phase: K.noise_Phase, + width: 32, + height: 32, + thresholdLow: K.noise_ThresholdLow, + thresholdHigh: K.noise_ThresholdHigh + }); + R && (Q.src = R, + F.image = Q) + } + F.needsUpdate = !0, + F.image && (F.offset.x = A.alphaMapOffsetX ? A.alphaMapOffsetX : 0, + F.offset.y = A.alphaMapOffsetY ? A.alphaMapOffsetY : 0, + F.repeat.x = A.alphaMapScaleX ? A.alphaMapScaleX : 1, + F.repeat.y = A.alphaMapScaleY ? A.alphaMapScaleY : 1, + F.rotation = A.alphaMapWAngle ? A.alphaMapWAngle : 0, + e[U] = F, + h.alphaMap = F) + } + h.transparent = !0, + h.alphaTest = Number.isNaN(vc.alphaTest) ? .5 : vc.alphaTest + } + if (A.envMap && vc.EnableTextureLoading && ("string" == typeof A.envMap ? void 0 !== A.envMapOffsetY && 0 !== A.envMapOffsetY || void 0 !== A.envMapOffsetX && 0 !== A.envMapOfsfetX || void 0 !== A.envMapScaleX && 1 !== A.envMapScaleX || void 0 !== A.envMapScaleY && 1 !== A.envMapScaleY || void 0 !== A.envMapWAngle && 0 !== A.envMapWAngle ? r = A.envMapOffsetX + "_" + A.envMapOffsetY + "_" + A.envMapScaleX + "_" + A.envMapScaleY + "_" + A.envMapWAngle + "_" + A.envMap : e[A.envMap] ? h.envMap = e[A.envMap] : Bh.warn(h.name, " 中envMap贴图未找到:", A.envMap) : r = Bd(JSON.stringify(A.envMap)), + r)) + if (e[r]) + h.envMap = e[r]; + else { + var T = new d; + if (T.wrapS = T.wrapT = 1e3, + "string" == typeof A.envMap) + T.image = e[A.envMap] && e[A.envMap].image ? e[A.envMap].image : null; + else { + var k = A.envMap + , D = document.createElement("img") + , L = Fd({ + type: Number(k.noise_Type), + color1: (new Xh).fromArray(k.noise_Color1), + color2: (new Xh).fromArray(k.noise_Color2), + size: k.noise_Size, + level: k.noise_Levels, + phase: k.noise_Phase, + width: 32, + height: 32, + thresholdLow: k.noise_ThresholdLow, + thresholdHigh: k.noise_ThresholdHigh + }); + L && (D.src = L, + T.image = D) + } + T.needsUpdate = !0, + T.image && (T.offset.x = A.envMapOffsetX ? A.envMapOffsetX : 0, + T.offset.y = A.envMapOffsetY ? A.envMapOffsetY : 0, + T.repeat.x = A.envMapScaleX ? A.envMapScaleX : 1, + T.repeat.y = A.envMapScaleY ? A.envMapScaleY : 1, + T.rotation = A.envMapWAngle ? A.envMapWAngle : 0, + e[r] = T, + h.envMap = T) + } + if (A.lightMap && vc.EnableTextureLoading && ("string" == typeof A.lightMap ? void 0 !== A.lightMapOffsetY && 0 !== A.lightMapOffsetY || void 0 !== A.lightMapOffsetX && 0 !== A.lightMapOfsfetX || void 0 !== A.lightMapScaleX && 1 !== A.lightMapScaleX || void 0 !== A.lightMapScaleY && 1 !== A.lightMapScaleY || void 0 !== A.lightMapWAngle && 0 !== A.lightMapWAngle ? a = A.lightMapOffsetX + "_" + A.lightMapOffsetY + "_" + A.lightMapScaleX + "_" + A.lightMapScaleY + "_" + A.lightMapWAngle + "_" + A.lightMap : e[A.lightMap] ? h.lightMap = e[A.lightMap] : Bh.warn(h.name, " 中lightMap贴图未找到:", A.lightMap) : a = Bd(JSON.stringify(A.lightMap)), + a)) + if (e[a]) + h.lightMap = e[a]; + else { + var N = new d; + if (N.wrapS = N.wrapT = 1e3, + "string" == typeof A.lightMap) + N.image = e[A.lightMap] && e[A.lightMap].image ? e[A.lightMap].image : null; + else { + var O = A.lightMap + , V = document.createElement("img") + , G = Fd({ + type: Number(O.noise_Type), + color1: (new Xh).fromArray(O.noise_Color1), + color2: (new Xh).fromArray(O.noise_Color2), + size: O.noise_Size, + level: O.noise_Levels, + phase: O.noise_Phase, + width: 32, + height: 32, + thresholdLow: O.noise_ThresholdLow, + thresholdHigh: O.noise_ThresholdHigh + }); + G && (V.src = G, + N.image = V) + } + N.needsUpdate = !0, + N.image && (N.offset.x = A.lightMapOffsetX ? A.lightMapOffsetX : 0, + N.offset.y = A.lightMapOffsetY ? A.lightMapOffsetY : 0, + N.repeat.x = A.lightMapScaleX ? A.lightMapScaleX : 1, + N.repeat.y = A.lightMapScaleY ? A.lightMapScaleY : 1, + N.rotation = A.lightMapWAngle ? A.lightMapWAngle : 0, + e[a] = N, + h.lightMap = N) + } + if ((void 0 !== A.lightMapIntensity && (h.lightMapIntensity = A.lightMapIntensity), + A.emissiveMap && vc.EnableTextureLoading) && ("string" == typeof A.emissiveMap ? void 0 !== A.emissiveMapOffsetY && 0 !== A.emissiveMapOffsetY || void 0 !== A.emissiveMapOffsetX && 0 !== A.emissiveMapOfsfetX || void 0 !== A.emissiveMapScaleX && 1 !== A.emissiveMapScaleX || void 0 !== A.emissiveMapScaleY && 1 !== A.emissiveMapScaleY || void 0 !== A.emissiveMapWAngle && 0 !== A.emissiveMapWAngle ? l = A.emissiveMapOffsetX + "_" + A.emissiveMapOffsetY + "_" + A.emissiveMapScaleX + "_" + A.emissiveMapScaleY + "_" + A.emissiveMapWAngle + "_" + A.emissiveMap : e[A.emissiveMap] ? h.emissiveMap = e[A.emissiveMap] : Bh.warn(h.name, " 中emissiveMap贴图未找到:", A.emissiveMap) : l = Bd(JSON.stringify(A.emissiveMap)), + l)) + if (e[l]) + h.emissiveMap = e[l]; + else { + var P = new d; + if (P.wrapS = P.wrapT = 1e3, + "string" == typeof A.emissiveMap) + P.image = e[A.emissiveMap] && e[A.emissiveMap].image ? e[A.emissiveMap].image : null; + else { + var q = A.emissiveMap + , j = document.createElement("img") + , H = Fd({ + type: Number(q.noise_Type), + color1: (new Xh).fromArray(q.noise_Color1), + color2: (new Xh).fromArray(q.noise_Color2), + size: q.noise_Size, + level: q.noise_Levels, + phase: q.noise_Phase, + width: 32, + height: 32, + thresholdLow: q.noise_ThresholdLow, + thresholdHigh: q.noise_ThresholdHigh + }); + H && (j.src = H, + P.image = j) + } + P.needsUpdate = !0, + P.image && (P.offset.x = A.emissiveMapOffsetX ? A.emissiveMapOffsetX : 0, + P.offset.y = A.emissiveMapOffsetY ? A.emissiveMapOffsetY : 0, + P.repeat.x = A.emissiveMapScaleX ? A.emissiveMapScaleX : 1, + P.repeat.y = A.emissiveMapScaleY ? A.emissiveMapScaleY : 1, + P.rotation = A.emissiveMapWAngle ? A.emissiveMapWAngle : 0, + e[l] = P, + h.emissiveMap = P) + } + if ((void 0 !== A.emissiveIntensity && (h.emissiveIntensity = A.emissiveIntensity), + A.specularMap && vc.EnableTextureLoading) && ("string" == typeof A.specularMap ? void 0 !== A.specularMapOffsetY && 0 !== A.specularMapOffsetY || void 0 !== A.specularMapOffsetX && 0 !== A.specularMapOfsfetX || void 0 !== A.specularMapScaleX && 1 !== A.specularMapScaleX || void 0 !== A.specularMapScaleY && 1 !== A.specularMapScaleY || void 0 !== A.specularMapWAngle && 0 !== A.specularMapWAngle ? c = A.specularMapOffsetX + "_" + A.specularMapOffsetY + "_" + A.specularMapScaleX + "_" + A.specularMapScaleY + "_" + A.specularMapWAngle + "_" + A.specularMap : e[A.specularMap] ? h.specularMap = e[A.specularMap] : Bh.warn(h.name, " 中specularMap贴图未找到:", A.specularMap) : c = Bd(JSON.stringify(A.specularMap)), + c)) + if (e[c]) + h.specularMap = e[c]; + else { + var Y = new d; + if (Y.wrapS = Y.wrapT = 1e3, + "string" == typeof A.specularMap) + Y.image = e[A.specularMap] && e[A.specularMap].image ? e[A.specularMap].image : null; + else { + var W = A.specularMap + , J = document.createElement("img") + , z = Fd({ + type: Number(W.noise_Type), + color1: (new Xh).fromArray(W.noise_Color1), + color2: (new Xh).fromArray(W.noise_Color2), + size: W.noise_Size, + level: W.noise_Levels, + phase: W.noise_Phase, + width: 32, + height: 32, + thresholdLow: W.noise_ThresholdLow, + thresholdHigh: W.noise_ThresholdHigh + }); + z && (J.src = z, + Y.image = J) + } + Y.needsUpdate = !0, + Y.image && (Y.offset.x = A.specularMapOffsetX ? A.specularMapOffsetX : 0, + Y.offset.y = A.specularMapOffsetY ? A.specularMapOffsetY : 0, + Y.repeat.x = A.specularMapScaleX ? A.specularMapScaleX : 1, + Y.repeat.y = A.specularMapScaleY ? A.specularMapScaleY : 1, + Y.rotation = A.specularMapWAngle ? A.specularMapWAngle : 0, + e[c] = Y, + h.specularMap = Y) + } + return void 0 !== A.shininess && (h.shininess = A.shininess), + void 0 !== A.opacity && (h.opacity = A.opacity, + 1 > A.opacity && (h.transparent = !0), + A.opacity > 0 || (h.opacity = .1)), + h.side = 2, + h.refreshUniforms && h.refreshUniforms(), + h + }, + createNewStyleMaterial: function(A) { + var e = new yr(A); + return e.type = "NewStyle", + e.uniforms = Ge.merge([it.standard.uniforms]), + e.vertexShader = it.newStyle.vertexShader, + e.fragmentShader = it.newStyle.fragmentShader, + e.metalness = 0, + e + }, + createHighlightMaterial: function() { + var A = this.createStandardMaterial(vc.SelectionColor); + return vc.InfluencedByLight || (A.defines.NOTAFFECTEDBYLIGHT = ""), + A + }, + getBlinkMaterial: function(A, e) { + var t = Kd.getMaterialParameters(A) + , i = Kd.createStandardMaterial(t); + return i.blinkColor.copy(e), + i.colorState = Yc.BLINK, + i.refreshUniforms(), + i + }, + getMaterialParameters: function(A) { + var e = {}; + return A.hasOwnProperty("color") && (e.color = A.color), + e.opacity = 1, + e.transparent = !1, + A.hasOwnProperty("opacity") && (e.opacity = A.opacity, + 1 > A.opacity && (e.transparent = !0)), + A.hasOwnProperty("side") && (e.side = A.side), + A.hasOwnProperty("name") && (e.name = A.name || ""), + A.hasOwnProperty("emissive") && (e.emissive = A.emissive), + A.hasOwnProperty("emissiveIntensity") && (e.emissive = A.emissiveIntensity), + A.hasOwnProperty("specular") && (e.specular = A.specular), + A.hasOwnProperty("shininess") && (e.shininess = A.shininess), + A.hasOwnProperty("map") && (e.map = A.map), + A.hasOwnProperty("aoMap") && (e.aoMap = A.aoMap), + A.hasOwnProperty("aoMapIntensity") && (e.aoMapIntensity = A.aoMapIntensity), + A.hasOwnProperty("bumpMap") && (e.bumpMap = A.bumpMap), + A.hasOwnProperty("bumpScale") && (e.bumpScale = A.bumpScale), + A.hasOwnProperty("normalMap") && (e.normalMap = A.normalMap), + A.hasOwnProperty("normalScale") && (e.normalScale = A.normalScale), + A.hasOwnProperty("alphaMap") && (e.alphaMap = A.alphaMap), + A.hasOwnProperty("alphaTest") && (e.alphaTest = A.alphaTest), + A.hasOwnProperty("transparent") && (e.transparent = A.transparent), + A.hasOwnProperty("emissiveMap") && (e.emissiveMap = A.emissiveMap), + A.hasOwnProperty("envMap") && (e.envMap = A.envMap), + A.hasOwnProperty("envMapIntensity") && (e.envMapIntensity = A.envMapIntensity), + A.hasOwnProperty("roughness") && (e.roughness = A.roughness), + A.hasOwnProperty("metalness") && (e.metalness = A.metalness), + A.hasOwnProperty("originRoughness") && (e.originRoughness = A.originRoughness), + A.hasOwnProperty("originMetalness") && (e.originMetalness = A.originMetalness), + A.hasOwnProperty("iblProbe") && (e.iblProbe = A.iblProbe), + A.hasOwnProperty("shift") && (e.shift = A.shift), + A.hasOwnProperty("wireframe") && (e.wireframe = A.wireframe), + A.hasOwnProperty("pureColor") && (e.pureColor = A.pureColor), + A.hasOwnProperty("textureColor") && (e.textureColor = A.textureColor), + A.hasOwnProperty("imageFade") && (e.imageFade = A.imageFade), + "bos3d" === A.type && A.hasOwnProperty("lights") && (e.lights = A.lights), + A.hasOwnProperty("lightMap") && (e.lightMap = A.lightMap), + A.hasOwnProperty("lightMapIntensity") && (e.lightMapIntensity = A.lightMapIntensity), + A.hasOwnProperty("viewportSize") && (e.viewportSize = A.viewportSize), + A.hasOwnProperty("fillMap") && (e.fillMap = A.fillMap), + e + }, + nextHighestPowerOfTwo: function(A) { + A -= 1; + for (var e = 1; 32 > e; e <<= 1) + A |= A >> e; + return A + 1 + }, + ensurePowerOfTwo: function(A) { + if (0 === A.width || 0 === A.height) + return A; + if (!a.isPowerOfTwo(A.width) || !a.isPowerOfTwo(A.height)) { + var e = document.createElement("canvas"); + return e.width = Kd.nextHighestPowerOfTwo(A.width), + e.height = Kd.nextHighestPowerOfTwo(A.height), + e.getContext("2d").drawImage(A, 0, 0, A.width, A.height, 0, 0, e.width, e.height), + e + } + return A + }, + ensureQuadrate: function(A) { + var e = A.width + , t = A.height; + if (0 === e || 0 === t || a.isPowerOfTwo(e) && a.isPowerOfTwo(t) && e === t) + return A; + a.isPowerOfTwo(e) || (e = Kd.nextHighestPowerOfTwo(e)), + a.isPowerOfTwo(t) || (t = Kd.nextHighestPowerOfTwo(t)); + var i = 0 + , o = 0; + t > e ? i = .5 * (t - e) : o = .5 * (e - t); + var n = document.createElement("canvas"); + return n.width = n.height = Math.max(e, t), + n.getContext("2d").drawImage(A, 0, 0, A.width, A.height, i, o, e, t), + n + }, + getRGBAFromColorArray: function(A) { + var e = A[0] + , t = A[1] + , i = A[2] + , o = A[3]; + return void 0 !== o ? "rgba(" + e + "," + t + "," + i + "," + o + ")" : "rgb(" + e + "," + t + "," + i + ")" + }, + getRGBAFromArray: function(A) { + var e = 255 * A[0] + , t = 255 * A[1] + , i = 255 * A[2] + , o = 255 * A[3]; + return void 0 !== o ? "rgba(" + e + "," + t + "," + i + "," + o + ")" : "rgb(" + e + "," + t + "," + i + ")" + }, + getArrayFromRGBA: function(A) { + var e = A.split(",") + , t = parseInt(e[0].split("(")[1], 0) / 255 + , i = parseInt(e[1], 0) / 255 + , o = parseInt(e[2].split(")")[0], 0) / 255; + return void 0 !== e[3] ? [t, i, o, parseFloat(e[3].split(")")[0])] : [t, i, o] + }, + getColorArrayFromRGBA: function(A) { + var e = A.split(",") + , t = parseInt(e[0].split("(")[1], 0) + , i = parseInt(e[1], 0) + , o = parseInt(e[2].split(")")[0], 0); + return void 0 !== e[3] ? [t, i, o, parseFloat(e[3].split(")")[0])] : [t, i, o] + }, + getHexStringFromRGB: function(A) { + return "#" + ("000000" + Kd.getHex(Kd.getArrayFromRGBA(A)).toString(16)).slice(-6) + }, + getArrayFromColorArray: function(A) { + return [A[0] / 255, A[1] / 255, A[2] / 255] + }, + getHexStringFromColorArray: function(A) { + return "#" + ("000000" + Kd.getHex(Kd.getArrayFromColorArray(A)).toString(16)).slice(-6) + }, + getHexStringFromArray: function(A) { + return "#" + ("000000" + Kd.getHex(A).toString(16)).slice(-6) + }, + getHex: function(A) { + return 255 * A[0] << 16 ^ 255 * A[1] << 8 ^ 255 * A[2] << 0 + }, + getColorParamsByMaterial: function(A) { + return { + rgbaColor: [A.color.r, A.color.g, A.color.b, A.opacity], + transparent: A.transparent, + wireframe: A.wireframe + } + }, + getHoverColorByColor: function(A) { + var e = {}; + return e.r = A.r, + e.g = A.g, + e.b = A.b, + e.a = Kd.getHoverOpacity(A.a), + e + }, + getHoverOpacity: function(A) { + return .4 > A ? A + .3 : A - .3 + }, + cloneMaterialBaseOnColor: function(A, e) { + if (!A.color && !A.diffuse) + return A; + var t = A.clone(); + return t.wireframe = e.wireframe, + t.opacity = e.opacity, + t.transparent = e.transparent, + t.color && t.color.isColor && e.color && e.color.isColor && t.color.copy(e.color), + t.diffuse && t.diffuse.isColor && e.diffuse && e.diffuse.isColor && t.diffuse.copy(e.diffuse), + t + } + }, Qd = function(A, e, t, i, o, n, r, a) { + this.name = A, + this.position = e, + this.target = t, + this.up = i, + this.fov = o, + this.frustumWidth = r, + this.frustumHeight = a, + this.version = n + }, Rd = { + createCameraInfo: function(A) { + var e = A.camera + , t = new Qd(A.getCameraName(),e.position,e.target,e.up); + return JSON.stringify(t) + }, + transformCamera: function(A, e) { + var t = new y + , i = function(A) { + return [parseFloat(A[0]), parseFloat(A[1]), parseFloat(A[2])] + }; + t.fromArray(i(A.position.split(","))); + var o = new y; + o.fromArray(i(A.direction.split(","))); + var n = new y; + n.fromArray(i(A.up.split(","))); + var r = new y; + r.addVectors(t, o), + t.applyMatrix4(e.rootNode.matrix), + r.applyMatrix4(e.rootNode.matrix); + var a = new M; + return a.makeRotationFromEuler(e.rootNode.rotation), + n.applyMatrix4(a), + n.normalize(), + new Qd(A.name,t,r,n) + }, + parseCameraInfo: function(A) { + if (!A) + return null; + var e = JSON.parse(A); + if (!e.hasOwnProperty("position") || !e.hasOwnProperty("target") || !e.hasOwnProperty("up")) + return null; + var t = e.name || Ec.PERSPECTIVE + , i = new y; + i.x = e.position.x, + i.y = e.position.y, + i.z = e.position.z; + var o = new y; + o.x = e.target.x, + o.y = e.target.y, + o.z = e.target.z; + var n = new y; + return n.x = e.up.x, + n.y = e.up.y, + n.z = e.up.z, + new Qd(t,i,o,n,void 0,void 0 === e.version ? 0 : e.version,e.frustumWidth,e.frustumHeight) + }, + canvasToNormalized: function(A, e, t) { + var i = { + x: 0, + y: 0, + z: 0 + }; + return i.x = A.x / e * 2 - 1, + i.y = -A.y / t * 2 + 1, + i.z = A.z || 0, + i + }, + normalizedToCanvas: function(A, e, t) { + var i = { + x: 0, + y: 0, + z: 0 + }; + return i.x = Math.floor(.5 * (A.x + 1) * e + .5), + i.y = Math.floor(-.5 * (A.y - 1) * t + .5), + i.z = A.z || 0, + i + }, + drawingToCanvas: function(A, e, t, i) { + var o = new y(e.x,e.y,e.z); + return o.project(A), + this.normalizedToCanvas(o, t, i) + }, + drawingPointsToCanvas: function(A, e, t, i, o) { + var n = {} + , r = (new M).getInverse(A.matrixWorld) + , a = new y(e.x,e.y,e.z); + a.applyMatrix4(r); + var s = new y(t.x,t.y,t.z); + if (s.applyMatrix4(r), + a.z > 0 && s.z > 0) + return null; + var l = a.clone().sub(s); + if (l.normalize(), + a.z > 0) + a.sub(l.multiplyScalar((a.z + A.near) / l.z)); + else if (s.z > 0) { + s.sub(l.multiplyScalar((s.z + A.near) / l.z)) + } + return a.applyMatrix4(A.projectionMatrix), + s.applyMatrix4(A.projectionMatrix), + n.start = this.normalizedToCanvas(a, i, o), + n.end = this.normalizedToCanvas(s, i, o), + n + }, + lineIntersectWithRect: function(A, e) { + if (A && A.start.x === A.end.x && A.start.y === A.end.y) + return Bh.log("Invalid line."), + null; + var t, i = 0; + A.start.x !== A.end.x && (i = (A.start.y - A.end.y) / (A.start.x - A.end.x)); + var o = [] + , n = e.min + , r = e.max; + return n.y > i * n.x + (t = A.start.y - i * A.start.x) || i * n.x + t > r.y || o.push(new s(n.x,i * n.x + t)), + n.y > i * r.x + t || i * r.x + t > r.y || o.push(new s(r.x,i * r.x + t)), + 0 === i && (o.push(new s(n.x,t)), + o.push(new s(r.x,t))), + (n.y - t) / i > n.x && r.x > (n.y - t) / i && o.push(new s((n.y - t) / i,n.y)), + (r.y - t) / i > n.x && r.x > (r.y - t) / i && o.push(new s((r.y - t) / i,r.y)), + o + }, + canvasToDrawing: function(A, e, t, i) { + var o = this.canvasToNormalized(e, t, i) + , n = new y(o.x,o.y,o.z); + return n.unproject(A), + { + x: n.x, + y: n.y, + z: n.z + } + }, + intersectBoxByRay: function(A, e) { + var t = 0 + , i = 0 + , o = 0 + , n = 0 + , r = 0 + , a = 0 + , s = 1 / A.direction.x + , l = 1 / A.direction.y + , c = 1 / A.direction.z + , h = A.origin; + return 0 > s ? (t = (e.max.x - h.x) * s, + i = (e.min.x - h.x) * s) : (t = (e.min.x - h.x) * s, + i = (e.max.x - h.x) * s), + 0 > l ? (o = (e.max.y - h.y) * l, + n = (e.min.y - h.y) * l) : (o = (e.min.y - h.y) * l, + n = (e.max.y - h.y) * l), + t > n || o > i ? null : ((o > t || isNaN(t)) && (t = o), + (i > n || isNaN(i)) && (i = n), + 0 > c ? (r = (e.max.z - h.z) * c, + a = (e.min.z - h.z) * c) : (r = (e.min.z - h.z) * c, + a = (e.max.z - h.z) * c), + t > a || r > i ? null : ((r > t || isNaN(t)) && (t = r), + (i > a || isNaN(i)) && (i = a), + 0 > i ? null : 0 > t ? i : t)) + }, + intersectObject: function(A, e, t, i) { + if (A.visible) { + A.raycast(e, t); + if (!0 === i && A.children) + for (var o = A.children, n = 0, r = o.length; r > n; n += 1) + Rd.intersectObject(o[n], e, t, !0) + } + }, + intersectObjectWithFrustum: (Ud = new aA, + function(A, e) { + if (!A.boundingBox || A instanceof Ue) { + var t = A.geometry; + null === t.boundingBox && t.computeBoundingBox(), + Ud.copy(t.boundingBox) + } else + Ud.copy(A.boundingBox); + return Ud.applyMatrix4(A.matrixWorld), + e.intersectsBox(Ud) + } + ) + }, Td = function(A, e, t, i) { + je.call(this, A, e, t, i), + this.projectOnWidth = !1 + }; + (Td.prototype = Object.create(je.prototype)).constructor = Td, + Td.prototype.updateProjectionMatrixByFrustum = function(A, e) { + var t = this.near + , i = null + , o = null + , n = null + , r = null; + this.projectOnWidth ? (o = -.5 * (n = A), + i = .5 * (r = this.aspect * n)) : (i = .5 * (r = e), + o = -.5 * (n = this.aspect * r)); + var a = this.view; + if (null !== a) { + var s = a.fullWidth + , l = a.fullHeight; + o += a.offsetX * n / s, + i -= a.offsetY * r / l, + n *= a.width / s, + r *= a.height / l + } + var c = this.filmOffset; + 0 !== c && (o += t * c / this.getFilmWidth()), + this.projectionMatrix.makePerspective(o, o + n, i, i - r, t, this.far) + } + , + Td.prototype.setProjectOnWidth = function(A) { + this.projectOnWidth = A + } + ; + var kd = function(A, e) { + qe.call(this), + this.target = new y, + this.name = A || "", + this.fov = e.fov, + this.near = e.near, + this.far = e.far, + A === Ec.PERSPECTIVE ? (this.aspect = e.width / e.height, + this.fov = e.fov, + this.left = -e.width / 2, + this.right = e.width / 2, + this.top = e.height / 2, + this.bottom = -e.height / 2, + this.perspectiveCamera = new Td(this.fov,this.aspect,this.near,this.far), + this.orthoCamera = null, + this.toPerspective()) : (this.left = e.left, + this.right = e.right, + this.top = e.top, + this.bottom = e.bottom, + this.fov = 45, + this.aspect = (this.right - this.left) / (this.top - this.bottom), + this.orthoCamera = new Ka(this.left,this.right,this.top,this.bottom,this.near,this.far), + this.perspectiveCamera = null, + this.orthoCamera.updateProjectionMatrix(), + this.projectionMatrix = this.orthoCamera.projectionMatrix, + this.isPerspective = !1), + this.zoom = e.zoom || 1, + this.updateProjectionMatrixByFrustum = !1 + }; + (kd.prototype = Object.create(qe.prototype)).constructor = kd, + kd.prototype.toPerspective = function() { + null !== this.perspectiveCamera ? this.updateProjectionMatrixByFrustum || (this.perspectiveCamera.aspect = this.aspect, + this.perspectiveCamera.near = this.near, + this.perspectiveCamera.far = this.far, + this.perspectiveCamera.fov = this.fov, + this.perspectiveCamera.updateProjectionMatrix(), + this.projectionMatrix = this.perspectiveCamera.projectionMatrix, + this.projectionMatrixInverse = this.perspectiveCamera.projectionMatrixInverse, + this.isPerspective = !0, + this.dirty = !0) : Bh.log("Can not convert to perspective camera because the camera original type is orthographic.") + } + , + kd.prototype.toOrthographic = function() { + null === this.orthoCamera && (this.orthoCamera = new Ka(this.left,this.right,this.top,this.bottom,this.near,this.far)); + var A = this.fov + , e = this.target.clone().sub(this.position).length() + , t = Math.tan(A * Math.PI / 180 / 2) * e + , i = t * this.aspect; + t /= this.zoom, + this.left = this.orthoCamera.left = -(i /= this.zoom), + this.right = this.orthoCamera.right = i, + this.top = this.orthoCamera.top = t, + this.bottom = this.orthoCamera.bottom = -t, + this.orthoCamera.near = this.near, + this.orthoCamera.far = this.far, + this.orthoCamera.updateProjectionMatrix(), + this.projectionMatrix = this.orthoCamera.projectionMatrix, + this.projectionMatrixInverse = this.orthoCamera.projectionMatrixInverse, + this.isPerspective = !1, + this.dirty = !0 + } + , + kd.prototype.setSize = function(A, e) { + this.perspectiveCamera.aspect = A / e, + this.left = -A / 2, + this.right = A / 2, + this.top = e / 2, + this.bottom = -e / 2, + this.aspect = A / e, + this.dirty = !0 + } + , + kd.prototype.setSizeByFrustum = function(A, e) { + var t = 2 * this.right + , i = 2 * this.top; + this.aspect = t / i; + var o = null; + A / e > t / i ? (o = i / t, + this.perspectiveCamera.setProjectOnWidth(!0)) : (o = t / i, + this.perspectiveCamera.setProjectOnWidth(!1)), + this.dirty = !0, + this.isPerspective && (this.perspectiveCamera.aspect = o, + this.perspectiveCamera.near = this.near, + this.perspectiveCamera.far = this.far, + this.perspectiveCamera.fov = this.fov, + this.perspectiveCamera.updateProjectionMatrixByFrustum(A, e), + this.projectionMatrix = this.perspectiveCamera.projectionMatrix, + this.isPerspective = !0, + this.dirty = !0) + } + , + kd.prototype.setFov = function(A) { + this.fov = A, + this.dirty = !0, + this.updateProjectionMatrix() + } + , + kd.prototype.setNearFar = function(A, e) { + this.near = A, + this.far = e, + this.dirty = !0, + this.updateProjectionMatrix() + } + , + kd.prototype.updateProjectionMatrix = function() { + this.isPerspective ? this.toPerspective() : this.toOrthographic() + } + , + kd.prototype.setLens = function(A, e) { + void 0 === e && (e = 24); + var t = 2 * a.radToDeg(Math.atan(e / (2 * A))); + return this.setFov(t), + this.dirty = !0, + t + } + , + kd.prototype.setZoom = function(A) { + this.zoom = A, + this.dirty = !0, + this.updateProjectionMatrix() + } + , + kd.prototype.copy = function(A) { + qe.prototype.copy.call(this, A), + this.target.copy(A.target), + this.aspect = A.aspect, + this.fov = A.fov, + this.near = A.near, + this.far = A.far, + this.left = A.left, + this.right = A.right, + this.top = A.top, + this.bottom = A.bottom, + this.zoom = A.zoom, + this.isPerspective = A.isPerspective, + A.orthoCamera && (this.orthoCamera ? this.orthoCamera.copy(A.orthoCamera) : this.orthoCamera = A.orthoCamera.clone()), + A.perspectiveCamera && (this.perspectiveCamera ? this.perspectiveCamera.copy(A.perspectiveCamera) : this.perspectiveCamera = A.perspectiveCamera.clone()) + } + , + kd.prototype.isDirty = function() { + return this.dirty + } + , + kd.prototype.toFrontView = function() { + this.rotation.x = 0, + this.rotation.y = 0, + this.rotation.z = 0 + } + , + kd.prototype.toBackView = function() { + this.rotation.x = 0, + this.rotation.y = Math.PI, + this.rotation.z = 0 + } + , + kd.prototype.toLeftView = function() { + this.rotation.x = 0, + this.rotation.y = -Math.PI / 2, + this.rotation.z = 0 + } + , + kd.prototype.toRightView = function() { + this.rotation.x = 0, + this.rotation.y = Math.PI / 2, + this.rotation.z = 0 + } + , + kd.prototype.toTopView = function() { + this.rotation.x = -Math.PI / 2, + this.rotation.y = 0, + this.rotation.z = 0 + } + , + kd.prototype.toBottomView = function() { + this.rotation.x = Math.PI / 2, + this.rotation.y = 0, + this.rotation.z = 0 + } + ; + var Dd = function(A, e, t, i) { + this.ray = new CA(A,e), + this.near = t || 0, + this.far = i || 1 / 0, + this.params = { + Sprite: {}, + Mesh: {}, + Points: { + threshold: 1 + }, + LOD: {}, + Line: {} + } + }; + Dd.prototype = { + constructor: Dd, + precision: 1e-4, + linePrecision: 1, + descSort: function(A, e) { + return A.distance - e.distance + }, + set: function(A, e) { + this.ray.set(A, e) + }, + setFromCamera: function(A, e) { + e instanceof kd ? e.isPerspective ? (this.ray.origin.copy(e.position), + this.ray.direction.set(A.x, A.y, .5).unproject(e).sub(e.position).normalize()) : (this.ray.origin.set(A.x, A.y, -1).unproject(e), + this.ray.direction.set(0, 0, -1).transformDirection(e.matrixWorld)) : e instanceof je ? (this.ray.origin.copy(e.position), + this.ray.direction.set(A.x, A.y, .5).unproject(e).sub(e.position).normalize()) : e instanceof Ka ? (this.ray.origin.set(A.x, A.y, -1).unproject(e), + this.ray.direction.set(0, 0, -1).transformDirection(e.matrixWorld)) : Bh.error("Raycaster: Unsupported camera type.") + }, + intersectObject: function(A, e) { + var t = []; + return Rd.intersectObject(A, this, t, e), + t.sort(this.descSort), + t.length > 0 ? t[0] : null + }, + intersectObjects: function(A, e) { + for (var t = [], i = 0, o = A.length; o > i; i += 1) + Rd.intersectObject(A[i], this, t, e); + return t.sort(this.descSort), + t.length > 0 ? t[0] : null + }, + intersectOctantForNode: function(A, e) { + var t = this + , i = new aA; + !function A(o) { + var n = null + , r = null; + if (i.set(o.min, o.max), + t.ray.intersectBox(i) && (e.push(o), + o.childOctants)) + for (n = 0, + r = o.childOctants.length; r > n; n += 1) + A(o.childOctants[n]) + }(A) + } + }, + CA.prototype.intersectBoxWithDistance = function(A) { + var e = null + , t = null + , i = null + , o = null + , n = null + , r = null + , a = 1 / this.direction.x + , s = 1 / this.direction.y + , l = 1 / this.direction.z + , c = this.origin; + if (0 > a ? (t = (A.max.x - c.x) * a, + e = (A.min.x - c.x) * a) : (t = (A.min.x - c.x) * a, + e = (A.max.x - c.x) * a), + 0 > s ? (o = (A.max.y - c.y) * s, + i = (A.min.y - c.y) * s) : (o = (A.min.y - c.y) * s, + i = (A.max.y - c.y) * s), + t > i || o > e) + return -1; + if ((o > t || isNaN(t)) && (t = o), + (e > i || isNaN(e)) && (e = i), + 0 > l ? (r = (A.max.z - c.z) * l, + n = (A.min.z - c.z) * l) : (r = (A.min.z - c.z) * l, + n = (A.max.z - c.z) * l), + t > n || r > e) + return -1; + if ((r > t || isNaN(t)) && (t = r), + (e > n || isNaN(e)) && (e = n), + 0 > e) + return -1; + if (0 > t) + return 0; + var h = new y; + this.at(0 > t ? e : t, h); + var d = h.x - c.x + , p = h.y - c.y + , g = h.z - c.z; + return Math.sqrt(d * d + p * p + g * g) + } + ; + var Ld = function() {} + , Nd = function() {}; + Nd.prototype = uh.extend(!0, {}, Ld.prototype = { + constructor: Ld, + apply: function(A) { + A.addEventListener = Ld.prototype.addEventListener, + A.hasEventListener = Ld.prototype.hasEventListener, + A.removeEventListener = Ld.prototype.removeEventListener, + A.fireEvent = Ld.prototype.dispatchEvent, + A.dispatchEvent = Ld.prototype.dispatchEvent + }, + addEventListener: function(A, e) { + A && (void 0 === this._listeners && (this._listeners = {}), + void 0 === this._listeners[A] && (this._listeners[A] = []), + this._listeners[A].push(e)) + }, + hasEventListener: function(A, e) { + if (!A) + return !1; + if (void 0 === this._listeners) + return !1; + var t = this._listeners; + return void 0 !== t[A] && -1 !== t[A].indexOf(e) + }, + removeEventListener: function(A, e) { + if (A && (void 0 === this._listeners && (this._listeners = {}), + Array.isArray(this._listeners[A]))) + for (var t = this._listeners[A], i = 0, o = t.length; o > i; i += 1) + if (t[i] === e) { + t.splice(i, 1); + break + } + }, + removeAllEventListenerByType: function(A) { + A && (void 0 === this._listeners && (this._listeners = {}), + Array.isArray(this._listeners[A]) && this._listeners[A] && (this._listeners[A] = void 0)) + }, + removeAllEventListener: function() { + for (var A in void 0 === this._listeners && (this._listeners = {}), + this._listeners) + if (this._listeners.hasOwnProperty(A)) + for (var e = this._listeners[A], t = 0, i = e.length; i > t; t += 1) + e.splice(t, 1); + this._listeners = {} + }, + dispatchEvent: function(A) { + if (void 0 === this._listeners && (this._listeners = {}), + "string" == typeof A && (A = { + type: A + }), + !A.target) + try { + A.target = this + } catch (A) {} + if (null == A.type) + throw Bh.trace("事件类型未知."), + new Error("事件类型未知."); + if (Array.isArray(this._listeners[A.type])) + for (var e = this._listeners[A.type].slice(), t = 0; e.length > t; t += 1) + e[t].call(this, A) + }, + fireEvent: function(A) { + this.dispatchEvent(A) + } + }, { + init: function(A) { + this.marks = {}, + this.allOids = [], + this.components = {}, + this.SelectedMark = {}, + this.mouse = new s, + this.lastX = 0, + this.lastY = 0, + this.active = !0, + this.viewer = A + }, + addObjectToScene: function(A, e) { + A && A.id && e && (this.viewer.addExternalObject(A.id, e), + this.components[A.id] = e, + this.allOids.push(A.id), + this.marks[A.id] = A) + }, + enabled: function() { + this.mousedown = this.viewer.domElement.addEventListener("mousedown", this.onMouseDown.bind(this), !1), + this.mouseup = this.viewer.domElement.addEventListener("mouseup", this.onMouseUp.bind(this), !1) + }, + disabled: function() { + this.mousedown = this.viewer.domElement.removeEventListener("mousedown", this.onMouseDown.bind(this), !1), + this.mouseup = this.viewer.domElement.removeEventListener("mouseup", this.onMouseUp.bind(this), !1) + }, + touchEnabled: function() { + this.touchstart = document.getElementById(this.viewer.uuid).addEventListener("touchstart", this.onTouchStart.bind(this), !1), + this.touchend = document.getElementById(this.viewer.uuid).addEventListener("touchend", this.onTouchEnd.bind(this), !1) + }, + touchDisabled: function() { + this.touchstart = this.viewer.domElement.removeEventListener("touchstart", this.onTouchStart.bind(this), !1), + this.touchend = this.viewer.domElement.removeEventListener("touchend", this.onTouchEnd.bind(this), !1) + }, + onMouseDown: function(A) { + this.mouse.x = this.lastX = A.clientX, + this.mouse.y = this.lastY = A.clientY + }, + onMouseUp: function(A) { + var e = [A.clientX, A.clientY]; + (e[0] > this.lastX ? 5 > e[0] - this.lastX : 5 > this.lastX - e[0]) && (e[1] > this.lastY ? 5 > e[1] - this.lastY : 5 > this.lastY - e[1]) && (this.mouse.x = this.lastX = e[0], + this.mouse.y = this.lastY = e[1], + this.pick("pick")) + }, + onTouchStart: function(A) { + this.mouse.x = this.lastX = A.changedTouches[0].clientX, + this.mouse.y = this.lastY = A.changedTouches[0].clientY + }, + onTouchEnd: function(A) { + (A.changedTouches[0].clientX > this.lastX ? 5 > A.changedTouches[0].clientX - this.lastX : 5 > this.lastX - A.changedTouches[0].clientX) && (A.changedTouches[0].clientY > this.lastY ? 5 > A.changedTouches[0].clientY - this.lastY : 5 > this.lastY - A.changedTouches[0].clientY) && (this.mouse.x = this.lastX = A.changedTouches[0].clientX, + this.mouse.y = this.lastY = A.changedTouches[0].clientY, + this.pick("pick")) + }, + pick: function() { + var A = this.viewer.cameraControl.getIntersectContext(this.mouse) + , e = new Dd; + e.setFromCamera(A.mouse, A.camera), + e.camera = A.camera, + e._camera = A.camera, + e.viewportSize = A.viewportSize; + var t = Object.values(this.components) + , i = e.intersectObjects(t); + i ? this.SelectedMark !== i.object ? (this.SelectedMark = i.object, + this.dispatchEvent({ + type: "updated", + added: { + objects: this.SelectedMark + } + })) : (this.dispatchEvent({ + type: "updated", + removed: { + objects: this.SelectedMark + } + }), + this.SelectedMark = {}) : (this.SelectedMark = {}, + this.dispatchEvent({ + type: "updated", + removed: { + objects: this.SelectedMark + } + })) + }, + getClickCoordsWithinElement: function(A) { + var e = [0, 0]; + if (A) { + for (var t = A.target, i = 0, o = 0; t.offsetParent; ) + i += t.offsetLeft, + o += t.offsetTop, + t = t.offsetParent; + e[0] = A.pageX - i, + e[1] = A.pageY - o + } else + A = window.event, + e.x = A.x, + e.y = A.y; + return e + }, + listentoSelectMarks: function(A) { + var e = this; + this.addEventListener("updated", (function(t) { + t.added && e.SelectedMark !== {} ? A(e.SelectedMark.key, e.SelectedMark) : A(null, null) + } + )) + }, + hasTheSameId: function(A) { + if ("" !== A.id) + for (var e = 0; this.allOids.length > e; e += 1) + if (A.id === this.allOids[e]) + return { + data: "标签id重复" + } + }, + findMark: function(A) { + return this.components[A] + }, + idsToArray: function(A) { + return null == A ? { + data: "未选中mark" + } : (Array.isArray(A) || (A = [A]), + A) + }, + removeIdAndInfo: function(A) { + var e = this.allOids.indexOf(A); + this.allOids.splice(e, 1), + delete this.marks[A], + delete this.components[A] + }, + remove: function(A) { + if (A = this.idsToArray(A), + !Array.isArray(A)) + return A; + for (var e = 0; A.length > e; e += 1) + this.removeIdAndInfo(A[e]), + this.viewer.removeExternalObjectByName(A[e]); + this.viewer.render() + }, + hide: function(A) { + if (A = this.idsToArray(A), + !Array.isArray(A)) + return A; + for (var e = 0; A.length > e; e += 1) { + var t = this.findMark(A[e]); + t && (t.visible = !1) + } + this.viewer.render() + }, + show: function(A) { + var e = null; + if (A) { + A = this.idsToArray(A); + for (var t = 0; A.length > t; t += 1) + (e = this.findMark(A[t])) && (e.visible = !0) + } else + for (var i in this.components) + (e = this.components[i]) && (e.visible = !0); + this.viewer.render() + }, + isolation: function(A) { + if (this.allOids.length > 0) { + A = this.idsToArray(A); + this.show(); + for (var e = this.allOids.concat(), t = 0; A.length > t; t += 1) { + var i = A[t]; + if (-1 === this.allOids.indexOf(i)) + return { + data: "mark不存在" + }; + for (var o = 0; e.length > o; o += 1) + if (i === e[o]) { + e.splice(o, 1); + break + } + } + var n = null; + for (o = 0; e.length > o; o += 1) + (n = this.findMark(e[o])) && (n.visible = !1); + this.viewer.render() + } + } + }); + var Od = function(A) { + this.defaultSettings = { + id: "", + mode: "absolute", + startPosition: [0, 0, 0], + endPosition: [0, 0], + color: [255, 0, 0], + colorLine: [0, 0, 0], + offset: [0, 0], + draggable: !0, + componentId: "", + domElement: null, + title: "标签", + showPoint: !0, + showLine: !0 + }, + this.initStartPos = {}; + var e = A; + "function" == typeof A.getViewerImpl && (e = A.getViewerImpl()), + this.dragging = !1, + this.init(e), + this.markState = {}; + var t = this; + this.showPoint = !0, + this.showLine = !0, + e.cameraControl.addEventListener(Rc.ON_CAMERA_CHANGE, (function() { + t._update() + } + )) + }; + Od.prototype = uh.extend(!0, {}, Nd.prototype, { + constructor: Od, + add: function(A, e) { + var t = document.createElement("div") + , i = Object.assign({}, this.defaultSettings, A) + , o = this.hasTheSameId(i); + if (o) + return o; + "" === i.id && (i.id = a.generateUUID()), + t.id = "label" + i.id, + this.marks[i.id] = Object.assign({}, i); + var n = this.viewer.getScreenCoordFromSceneCoord(i.startPosition) + , r = i.offset + , s = i.endPosition.concat() + , l = []; + ("relativeute" === i.mode ? (s = [n[0] + r[0], n[1] + r[1]], + i.endPosition = [0, 0]) : i.offset = [0, 0], + Array.isArray(i.colorLine)) && (i.colorLine = "rgb(" + i.colorLine[0] + "," + i.colorLine[1] + "," + i.colorLine[2] + ")"); + var c = document.createElement("div"); + (c.id = "labelStart" + i.id, + c.className = "labelStart", + c.style.cssText = "border:2px solid red; border-radius:5px; -moz-border-radius:5px; height: 4px;width: 4px;position: absolute;margin-left: -3px;margin-top: -3px;top:" + n[1] + "px;left:" + n[0] + "px; background-color: red;", + t.appendChild(c), + this.showPoint && i.showPoint || (c.style.display = "none"), + Array.isArray(i.color)) && (i.color = "rgb(" + i.color[0] + "," + i.color[1] + "," + i.color[2] + ")"); + var h = document.createElement("div"); + h.id = i.id, + h.className = "labelingDiv", + h.style.cssText = "border:2px solid " + i.colorLine + ";text-align:center;border-radius:5px;-moz-border-radius:5px;min-width: 66px;position: absolute;width:-webkit-fit-content;width: -moz-fit-content;background-color:" + i.color + ";", + t.appendChild(h); + var d = document.createElement("span"); + d.id = "labelTitle" + i.id, + d.className = "labelTitle", + d.onmouseover = function() { + d.style.cursor = "move" + } + , + d.onmouseout = function() { + d.style.cursor = "auto" + } + , + d.style.cssText = "display:block;padding:2%;text-align:center;color: #000000;white-space:nowrap", + d.innerText = i.title, + h.appendChild(d), + 0 > s[0] && (s[0] = 5), + 0 > s[1] && (s[1] = 5), + s[0] > this.viewer.domElement.offsetWidth - h.offsetWidth && (s[0] = this.viewer.domElement.offsetWidth - h.offsetWidth), + s[1] > this.viewer.domElement.offsetHeight - h.offsetHeight && (s[1] = this.viewer.domElement.offsetHeight - h.offsetHeight), + h.style.cssText += "left:" + s[0] + "px; top:" + s[1] + "px", + i.domElement && h.appendChild(i.domElement), + s[0] > n[0] ? s[1] > n[1] ? (l[0] = s[0], + l[1] = s[1]) : (l[0] = s[0], + l[1] = s[1] + h.offsetHeight) : s[1] > n[1] ? (l[0] = s[0] + h.offsetWidth, + l[1] = s[1]) : (l[0] = s[0] + h.offsetWidth, + l[1] = s[1] + h.offsetHeight); + var p = n[0] - l[0] + , g = n[1] - l[1] + , u = Math.sqrt(p * p + g * g) + , f = Math.atan(g / p) / Math.PI * 180; + p > 0 || (g > 0 ? f += 180 : f -= 180); + var m = document.createElement("div"); + m.id = "labelLine" + i.id, + m.className = "labelLine", + m.style.cssText = " height: 2px;position: absolute;transform-origin: left center;width:" + u + "px;-ms-transform:rotateZ(" + f + "deg);-moz-transform:rotateZ(" + f + "deg);-webkit-transform:rotateZ(" + f + "deg);-o-transform:rotateZ(" + f + "deg);transform:rotateZ(" + f + "deg);left:" + l[0] + "px;top:" + l[1] + "px;background-color:" + i.colorLine + ";", + t.appendChild(m), + this.showLine && i.showLine || (m.style.display = "none"), + this.viewer.domElement.appendChild(t), + i.draggable && this._enableDrag(h), + this.allOids.push(i.id), + this.markState[i.id] = { + userHide: !1, + outOfBoundary: !1 + }, + "function" == typeof e && e(i.id) + }, + enablePoint: function(A) { + this.showPoint = A, + this._update() + }, + enableLine: function(A) { + this.showLine = A, + this._update() + }, + _update: function() { + for (var A in this.marks) { + var e = this.viewer.getScreenCoordFromSceneCoord(this.marks[A].startPosition) + , t = this.marks[A].endPosition.concat() + , i = this.marks[A].offset; + "relativeute" === this.marks[A].mode && (0 !== t[0] || 0 !== t[1] ? (i = [t[0] - e[0], t[1] - e[1]], + this.marks[A].endPosition = [0, 0], + this.marks[A].offset = i) : t = [e[0] + i[0], e[1] + i[1]]); + var o = [0, 0] + , n = document.getElementById(A); + t[0] > e[0] ? t[1] > e[1] ? (o[0] = t[0], + o[1] = t[1]) : (o[0] = t[0], + o[1] = t[1] + n.offsetHeight) : t[1] > e[1] ? (o[0] = t[0] + n.offsetWidth, + o[1] = t[1]) : (o[0] = t[0] + n.offsetWidth, + o[1] = t[1] + n.offsetHeight); + var r = e[0] - o[0] + , a = e[1] - o[1] + , s = Math.sqrt(r * r + a * a) + , l = Math.atan(a / r) / Math.PI * 180; + r > 0 || (a > 0 ? l += 180 : l -= 180); + var c = getComputedStyle(this.viewer.domElement) + , h = parseInt(c.width, 10) + , d = parseInt(c.height, 10); + 0 > e[1] || e[1] > d || 0 > e[0] || e[0] > h ? (this.markState[A].outOfBoundary = !0, + document.getElementById("labelStart" + A).setCss({ + display: "none" + }), + document.getElementById("labelLine" + A).setCss({ + display: "none" + }), + document.getElementById(A).setCss({ + display: "none" + })) : (this.markState[A].outOfBoundary = !1, + this.dragging || "relativeute" !== this.marks[A].mode || (document.getElementById(A).style.left = t[0] + "px", + document.getElementById(A).style.top = t[1] + "px"), + this.markState[A].userHide || (document.getElementById(A).setCss({ + display: "block" + }), + this.showPoint && this.marks[A].showPoint ? document.getElementById("labelStart" + A).style.cssText += ";display:block;top:" + e[1] + "px; left:" + e[0] + "px" : document.getElementById("labelStart" + A).setCss({ + display: "none" + }), + this.showLine && this.marks[A].showLine ? document.getElementById("labelLine" + A).style.cssText += ";display:block;width:" + s + "px;transform-origin: left center;-ms-transform:rotateZ(" + l + "deg);-moz-transform:rotateZ(" + l + "deg);-webkit-transform:rotateZ(" + l + "deg);-o-transform:rotateZ(" + l + "deg);transform:rotateZ(" + l + "deg);left:" + o[0] + "px; top:" + o[1] + "px" : document.getElementById("labelLine" + A).setCss({ + display: "none" + }))) + } + }, + _enableDrag: function(A) { + var e = this + , t = A + , i = A.id + , o = t.querySelector("#labelTitle" + i) + , n = this.viewer.domElement + , r = n.offsetLeft + , a = n.offsetTop + , s = this; + o.addEventListener("mousedown", (function(e) { + e.preventDefault(), + s.dragging = !0, + t.setAttribute("offset-left", e.offsetX), + t.setAttribute("offset-top", e.offsetY), + t.setAttribute("allow-drag", "true"), + [A.style.left, A.style.top] + } + )), + document.addEventListener("mousemove", function(A) { + if ("true" === t.getAttribute("allow-drag")) { + A.preventDefault(); + var e = A.clientX - parseInt(t.getAttribute("offset-left"), 10) - parseInt(t.style.borderWidth, 10) - r + , o = A.clientY - parseInt(t.getAttribute("offset-top"), 10) - parseInt(t.style.borderWidth, 10) - a; + 0 > o && (o = 5), + o > n.offsetHeight - t.offsetHeight && (o = n.offsetHeight - t.offsetHeight), + 0 > e && (e = 5), + e > n.offsetWidth - t.offsetWidth && (e = n.offsetWidth - t.offsetWidth), + t.style.cssText += ";left:" + e + "px;top:" + o + "px", + this.marks[i].endPosition = [e, o], + this._update() + } + } + .bind(this)), + document.addEventListener("mouseup", (function(A) { + "true" === t.getAttribute("allow-drag") && (A.preventDefault(), + t.setAttribute("allow-drag", "false"), + s.dragging = !1) + } + )), + o.addEventListener("touchstart", (function(e) { + e.preventDefault(); + var i = parseInt(t.style.left, 10) + , o = parseInt(t.style.top, 10) + , n = e.targetTouches[0].clientY; + t.setAttribute("offset-left", e.targetTouches[0].clientX - i), + t.setAttribute("offset-top", n - o), + t.setAttribute("allow-drag", "true"), + [A.style.left, A.style.top] + } + )), + document.addEventListener("touchmove", (function(A) { + if ("true" === t.getAttribute("allow-drag")) { + A.preventDefault(); + var o = A.targetTouches[0].clientX - parseInt(t.getAttribute("offset-left"), 10) - parseInt(t.style.borderWidth, 10) - r + , n = A.targetTouches[0].clientY - parseInt(t.getAttribute("offset-top"), 10) - parseInt(t.style.borderWidth, 10) - a; + 0 > n && (n = 5), + n > e.viewer.domElement.offsetHeight - t.offsetHeight && (n = e.viewer.domElement.offsetHeight - t.offsetHeight), + 0 > o && (o = 5), + o > e.viewer.domElement.offsetWidth - t.offsetWidth && (o = e.viewer.domElement.offsetWidth - t.offsetWidth), + t.style.cssText += ";left:" + o + "px;top:" + n + "px", + e.marks[i].endPosition = [o, n], + e._update() + } + } + )), + document.addEventListener("touchend", (function(A) { + "true" === t.getAttribute("allow-drag") && (A.preventDefault(), + t.setAttribute("allow-drag", "false")) + } + )) + }, + updateMark: function(A, e) { + if (!this.marks[A]) + return { + id: A, + data: "该标签不存在" + }; + var t = Object.assign({}, this.marks[A], e); + this.marks[A] = Object.assign({}, t); + var i = this.viewer.getScreenCoordFromSceneCoord(t.startPosition) + , o = t.offset + , n = t.endPosition.concat() + , r = []; + "relativeute" === t.mode ? (n = [i[0] + o[0], i[1] + o[1]], + t.endPosition = [0, 0]) : t.offset = [0, 0], + Array.isArray(t.colorLine) && (t.colorLine = "rgb(" + t.colorLine[0] + "," + t.colorLine[1] + "," + t.colorLine[2] + ")"); + var a = document.getElementById("labelStart" + A); + a.style.cssText = "border:2px solid red; border-radius:5px; -moz-border-radius:5px; height: 4px;width: 4px;position: absolute;margin-left: -3px;margin-top: -3px;top:" + i[1] + "px;left:" + i[0] + "px;background-color:" + t.colorLine + ";", + this.showPoint && t.showPoint || (a.style.display = "none"), + Array.isArray(t.color) && (t.color = "rgb(" + t.color[0] + "," + t.color[1] + "," + t.color[2] + ")"); + var s = document.getElementById(A); + s.style.cssText = "border:2px solid " + t.colorLine + ";text-align:center;border-radius:5px;-moz-border-radius:5px;min-width: 66px;position: absolute;width:-webkit-fit-content;width: -moz-fit-content;background-color:" + t.color + ";"; + var l = document.getElementById("labelTitle" + A); + l.innerText = t.title, + 0 > n[0] && (n[0] += 5), + 0 > n[1] && (n[1] += 5), + n[0] > this.viewer.domElement.offsetWidth - s.offsetWidth && (n[0] = this.viewer.domElement.offsetWidth - s.offsetWidth), + n[1] > this.viewer.domElement.offsetHeight - s.offsetHeight && (n[1] = this.viewer.domElement.offsetHeight - s.offsetHeight), + s.style.cssText += "left:" + n[0] + "px; top:" + n[1] + "px"; + var c = l.nextElementSibling || l.nextSibling; + c && s.removeChild(c), + t.domElement && s.appendChild(t.domElement), + t.draggable && this._enableDrag(s), + n[0] > i[0] ? n[1] > i[1] ? (r[0] = n[0], + r[1] = n[1]) : (r[0] = n[0], + r[1] = n[1] + s.offsetHeight) : n[1] > i[1] ? (r[0] = n[0] + s.offsetWidth, + r[1] = n[1]) : (r[0] = n[0] + s.offsetWidth, + r[1] = n[1] + s.offsetHeight); + var h = i[0] - r[0] + , d = i[1] - r[1] + , p = Math.sqrt(h * h + d * d) + , g = Math.atan(d / h) / Math.PI * 180; + h > 0 || (d > 0 ? g += 180 : g -= 180); + var u = document.getElementById("labelLine" + A); + u.style.cssText = "height: 2px;position: absolute;transform-origin: left center;width:" + p + "px;-ms-transform:rotateZ(" + g + "deg);-moz-transform:rotateZ(" + g + "deg);-webkit-transform:rotateZ(" + g + "deg);-o-transform:rotateZ(" + g + "deg);transform:rotateZ(" + g + "deg);left:" + r[0] + "px;top:" + r[1] + "px;background-color:" + t.colorLine + ";", + this.showLine && t.showLine || (u.style.display = "none") + }, + updateColor: function(A, e) { + Array.isArray(A) || (A = [A]); + for (var t = 0; A.length > t; t += 1) { + var i = A[t]; + if (!this.marks[i]) + return { + id: i, + data: "该标签不存在" + }; + Array.isArray(e) ? document.getElementById(i).style.cssText += ";background-color:rgb(" + e[0] + "," + e[1] + "," + e[2] + ")" : document.getElementById(i).style.cssText += ";background-color:" + e, + this.marks[i].color = e + } + }, + updateTitle: function(A, e) { + Array.isArray(A) || (A = [A]); + for (var t = 0; A.length > t; t += 1) { + var i = A[t]; + if (!this.marks[i]) + return { + id: i, + data: "该标签不存在" + }; + document.getElementById("labelTitle" + i).innerText = e, + this.marks[i].title = e + } + }, + updateDomElement: function(A, e) { + if (this.marks[A]) { + var t = document.getElementById(A) + , i = t.querySelector(".labelTitle") + , o = i.nextElementSibling || i.nextSibling; + return o && t.removeChild(o), + e && t.appendChild(e), + this.marks[A].domElement = e, + !0 + } + return { + id: A, + data: "该标签不存在" + } + }, + remove: function(A) { + A = this.idsToArray(A); + for (var e = 0; A.length > e; e += 1) { + var t = A[e]; + if (!this.marks[t]) + return { + id: t, + data: "该标签不存在" + }; + this.viewer.domElement.removeChild(document.getElementById("label" + t)), + delete this.marks[t], + delete this.markState[t]; + var i = this.allOids.indexOf(t); + this.allOids.splice(i, 1) + } + }, + hide: function(A) { + A = this.idsToArray(A); + for (var e = 0; A.length > e; e += 1) { + var t = A[e]; + if (!this.marks[t]) + return { + id: t, + data: "该标签不存在" + }; + this.markState[t].userHide = !0, + this.markState[t].outOfBoundary || (document.getElementById("labelLine" + t).style.display = "none", + document.getElementById("labelStart" + t).style.display = "none", + document.getElementById(t).style.display = "none") + } + }, + show: function(A) { + if (A) { + A = this.idsToArray(A); + for (var e = 0; A.length > e; e += 1) { + if (!this.marks[o = A[e]]) + return { + id: o, + data: "该标签不存在" + }; + this.markState[o].userHide = !1, + this.markState[o].outOfBoundary || (this.showPoint && this.marks[o].showPoint && (document.getElementById("labelStart" + o).style.display = "block"), + this.showLine && this.marks[o].showLine && (document.getElementById("labelLine" + o).style.display = "block"), + document.getElementById(o).style.display = "block") + } + } else + for (var t = this.allOids.concat(), i = 0; t.length > i; i += 1) { + var o; + this.markState[o = t[i]].userHide = !1, + this.markState[o].outOfBoundary || (this.showPoint && this.marks[o].showPoint && (document.getElementById("labelStart" + o).style.display = "block"), + this.showLine && this.marks[o].showLine && (document.getElementById("labelLine" + o).style.display = "block"), + document.getElementById(o).style.display = "block") + } + }, + isolation: function(A) { + if (this.allOids.length > 0) { + A = this.idsToArray(A), + this.show(); + for (var e = this.allOids.concat(), t = 0; A.length > t; t += 1) { + var i = A[t]; + if (!this.marks[i]) + return { + data: "mark不存在" + }; + for (var o = 0; e.length > o; o += 1) + if (i === e[o]) { + e.splice(o, 1); + break + } + } + for (var n = 0; e.length > n; n += 1) + document.getElementById("labelLine" + e[n]).style.display = "none", + document.getElementById("labelStart" + e[n]).style.display = "none", + document.getElementById(e[n]).style.display = "none" + } + }, + addEventListener: function(A, e, t) { + document.getElementById(A).addEventListener(e, t) + }, + removeEventListener: function(A, e, t) { + document.getElementById(A).removeEventListener(e, t) + } + }); + var Vd = function(A) { + this.defaultSettings = { + id: "", + URL: "", + side: 2, + scale: 1, + width: 1, + height: 1, + opacity: 1, + transparent: !1, + alwaysVisible: !1, + useImageSize: !0, + faceToCamera: !1, + color: [1, 1, 1], + emissive: [0, 0, 0], + position: [0, 0, 0], + face: "z", + useFaceMatrix: !0, + matrix: [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] + }, + this.faceMatrix = { + x: [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1], + y: [1, 0, 0, 0, 0, 0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1], + z: [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] + }; + var e = A; + "function" == typeof A.getViewerImpl && (e = A.getViewerImpl()), + this.init(e), + this.enabled() + }; + Vd.prototype = uh.extend(!0, {}, Nd.prototype, { + constructor: Vd, + add: function(A, e) { + var t = this + , i = gc({}, this.defaultSettings, A) + , o = this.hasTheSameId(i); + if (o) + return o; + var n = 1 + , r = 1 + , a = (new Aa).load(i.URL, (function(A) { + t.viewer.render() + } + ), (function() {} + ), (function(A) { + t.dispatchEvent({ + type: Tc.LOAD_TEXTURE_ERROR, + data: "加载材质出错" + }) + } + )); + !0 === i.alwaysVisible && (i.transparent = !0); + var s = new xr({ + color: new LA(i.color[0],i.color[1],i.color[2]), + emissive: new LA(i.emissive[0],i.emissive[1],i.emissive[2]), + map: a, + depthTest: !i.alwaysVisible, + side: i.side, + opacity: i.opacity, + transparent: i.transparent + }); + n = i.width ? i.width : s.map.image.width, + r = i.height ? i.height : s.map.image.height; + var l = new Ue(new et(1,1,1,1),s) + , c = new M; + if (i.matrix && (3 === i.matrix.length ? (c.elements[12] = i.matrix[0], + c.elements[13] = i.matrix[1], + c.elements[14] = i.matrix[2]) : c.fromArray(i.matrix)), + l.applyMatrix4(c), + i.faceToCamera) { + var h = new y + , d = new y + , p = new f; + l.onBeforeRender = function() { + t.viewer.camera.matrixWorld.decompose(h, p, d), + l.quaternion.copy(p), + l.updateMatrixWorld(!0) + } + } + return l.scale.set(i.scale * n, i.scale * r, 1), + l.updateMatrixWorld(!0), + "" !== i.id ? l.key = i.id : (l.key = l.uuid, + i.id = l.uuid), + t.addObjectToScene(i, l), + "function" == typeof e && e(l.key), + l.componentKey = i.componentKey && Array.isArray(i.componentKey) ? i.componentKey : i.componentKey ? [i.componentKey] : [], + l + }, + updateMark: function(A, e) { + var t = this + , i = this.findMark(A); + if (i) { + i.applyMatrix4((new M).getInverse(i.matrix)); + var o = gc({}, t.marks[A], e) + , n = new M; + if (o.matrix && (3 === o.matrix.length ? (n.elements[12] = o.matrix[0], + n.elements[13] = o.matrix[1], + n.elements[14] = o.matrix[2]) : n.fromArray(o.matrix)), + i.applyMatrix4(n), + o.faceToCamera) { + var r = new y + , a = new y + , s = new f; + i.onBeforeRender = function() { + t.viewer.camera.matrixWorld.decompose(r, s, a), + i.quaternion.copy(s), + i.updateMatrixWorld(!0) + } + } else + delete i.onBeforeRender; + if (i.scale.set(o.scale * o.width, o.scale * o.height, 1), + i.updateMatrixWorld(!0), + i.componentKey = o.componentKey && Array.isArray(o.componentKey) ? o.componentKey : o.componentKey ? [o.componentKey] : [], + t.marks[A] = o, + e.URL) + (new Aa).load(o.URL, (function(A) { + !0 === o.alwaysVisible && (o.transparent = !0); + var e = new xr({ + color: new LA(o.color[0],o.color[1],o.color[2]), + emissive: new LA(o.emissive[0],o.emissive[1],o.emissive[2]), + map: A, + depthTest: !o.alwaysVisible, + side: o.side, + opacity: o.opacity, + transparent: o.transparent + }); + i.material = e + } + )); + else + !0 === o.alwaysVisible && (o.transparent = !0), + i.material.depthTest = !o.alwaysVisible, + i.material.transparent = o.transparent, + i.material.opacity = o.opacity, + i.material.side = o.side, + i.material.emissive = new LA(o.emissive[0],o.emissive[1],o.emissive[2]) + } + this.viewer.render() + } + }); + var Gd = function(A) { + this.defaultSettings = { + id: "", + url: "", + width: 1, + height: 1, + scale: 1, + alwaysVisible: !1, + position: [0, 0, 0], + componentId: "", + useImageSize: !0 + }; + var e = A; + "function" == typeof A.getViewerImpl && (e = A.getViewerImpl()), + this.init(e), + this.enabled() + }; + Gd.prototype = uh.extend(!0, {}, Nd.prototype, { + constructor: Gd, + add: function(A, e) { + var t = this; + !A.url && A.URL && (A.url = A.URL); + var i = Object.assign({}, this.defaultSettings, A) + , o = this.hasTheSameId(i); + if (o) + return o; + var n = 1 + , r = 1; + (new Aa).load(i.URL || i.url, (function(A) { + var o = new ro({ + map: A, + color: 16777215, + depthTest: !i.alwaysVisible, + transparent: i.alwaysVisible + }); + n = i.useImageSize && o.map && o.map.image && o.map.image.width ? o.map.image.width : i.width, + r = i.useImageSize && o.map && o.map.image && o.map.image.width ? o.map.image.height : i.height; + var a = new vo(o); + a.scale.set(i.scale * n, i.scale * r, 1), + i.position.isVector3 ? a.position.copy(i.position) : a.position.set(i.position[0], i.position[1], i.position[2]), + a.updateMatrixWorld(!0), + "" !== i.id ? a.key = i.id : (a.key = a.uuid, + i.id = a.uuid), + t.addObjectToScene(i, a), + "function" == typeof e && e(a.key) + } + ), (function() {} + ), (function(A) { + t.dispatchEvent({ + type: Tc.LOAD_TEXTURE_ERROR, + data: "加载材质出错" + }) + } + )) + }, + updateMark: function(A, e, t) { + var i = this + , o = this.findMark(A); + if (o) { + var n = Object.assign({}, i.marks[A], e) + , r = 1 + , a = 1; + (new Aa).load(n.URL || n.url, (function(e) { + var s = new ro({ + map: e, + color: 16777215, + depthTest: !n.alwaysVisible + }); + r = n.useImageSize && s.map && s.map.image && s.map.image.width ? s.map.image.width : n.width, + a = n.useImageSize && s.map && s.map.image && s.map.image.width ? s.map.image.height : n.height, + o.material = s, + o.scale.set(n.scale * r, n.scale * a, 1), + n.position.isVector3 ? o.position.copy(n.position) : o.position.set(n.position[0], n.position[1], n.position[2]), + o.updateMatrixWorld(), + i.viewer.render(), + i.marks[A] = n, + "function" == typeof t && t(A) + } + ), (function() {} + ), (function(A) { + i.dispatchEvent({ + type: Tc.LOAD_TEXTURE_ERROR, + data: "加载材质出错" + }) + } + )) + } + }, + resize: function(A, e, t) { + if (null == A) + return { + data: "未选中mark" + }; + if (!e || !t) + return { + data: "未指定尺寸" + }; + Array.isArray(A) || (A = [A]); + for (var i = null, o = 0; A.length > o; o += 1) + (i = this.findMark(A[o])) && (i.scale.set(e, t, 1), + i.updateMatrixWorld(), + this.viewer.render()) + } + }); + var Pd = { + front: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAMAAAD04JH5AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAA8UExURf/////UgCsAAABVqgArgAAAK4DU/wAAAKpVANT//1Wq////1IArAFUAAP//qqr//wAAVdSAK/+qVSuA1JRKhuAAAAEWSURBVHja7ZnbEoIgEEAtK4iu0P//a7dRcYVJZ1jL5pxHd8Y9yAK1VBUAAAAAAAAAAMBUgtnsxz4tzvlknrhcQFcimIbrRcZ8G0vYFcO2SWoRWa2zIYUJeLDd9QKHY5tfdxJ8Jk/3XJiVJhqpS34ZjQKI3j6RYakigAACsFxsfqLl5t+ci2UPpU8CtjuJEUDgzwXc8McRAgiwDBFAgH0AAVYBAgiwD8z75/SXBJrOzdcEQqY/YM08Am3rSgh4oy0Q9au7VpgfLs+y1wbxFxDJXiON7isabmoCIZEo0Ut0agL90b6bkXJeil+cxAL9ZE7UntLFRW8V2ESPLqhWgBDwiV6wqELFm7sRHe26AgAAAAAAAABYFne2vz8kSdzJgQAAAABJRU5ErkJggg==", + back: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAMAAAD04JH5AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAA/UExURf///1Wq/6pVAAAAVf//qtSAKwBVqgAAACuA1FUAAKr//wAAK4DU/wArgNT///+qVf/UgIArACsAAP//1CtVqjYJRWAAAAEgSURBVHja7ZnpCsIwEAZrNaae8Xr/ZxWRpFGEJrDppzjzr1LouFfJtusAAAAAAAAAAAAAoIb9znsfdM8/HvwLm9XMAoOfIMyQgHLM4/OegNkFBq8VqEyAuUBtAlr1SIVH8ybdLsUCU6GZfUxFFggg0ERgqueatyECCCAgF2ASIvAVAiUHA/dFApfTvwqkI1RQCziRQJracoFeJJDOSOdrI4FP/2ydhX3dekMxJTC0WhlVCziRQJxE5kVQKpDawLoISgXGVUHQCKQL6xwUC6QiMH4fFQuMGz2nmIR5EdiWYbFAdqfTCIw5MA1BuUC2s+slAvmtQSKQcmDaiBUCsS1tJ1GNwDMEvWgUxx9Ur+MYAuH3vQe3UwcAAAAAAADwE9wBUPU3ZdIk2/EAAAAASUVORK5CYII=", + left: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAMAAAD04JH5AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAA8UExURf//////1IArANT//ysAAKr//wAAVQAAAP/UgABVqgArgNSAK1UAAP//qoDU/wAAK6pVAF6q/yuA1P+qVQ6MhkQAAAEuSURBVHja7ZjJEoIwEAXjCogLwf//Vy1B4sFEQzF5pdV95UDXzCNMxjkAAAAAAAAAAAD4FzaH6k4revv5Ug2sVxqB3X4UOJ5EJWhGgW0tEuhHgeqqDkHnxCFQpbBECJ6vyGQ5IwQQQEAu8PVhKPshTSVSTSW+Eg8Fw1CmLEGvLsEUQ1kJGnUJprlIXwKjsyDk/COdWsBmPM4RMMlhjoBJE7IELJqQJ2DQhDwBgyZkCthfFN9fyPpy01DkRhiGN+ubYkQg/BWtL8uxO7EPMWglAi9NsI1BVODlczEdDeJriTAZmAYxsRfxRUqQWsz0JWKY3Aw1BVKYFBiDaHoWpXdjw9PWyQQen4LoHAgGC3agmbEX8Et2YI6A87VYQLgpRQAB2a4MAAAAAAAAAODnuAFrzi75vcAeswAAAABJRU5ErkJggg==", + right: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAMAAAD04JH5AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAA/UExURQAAAP//qlUAAAAAVapVAABVqtSAK////wArgNT//6r//4ArAP//1P+qVSuA1FWq/4DU///UgCsAAKpVK1VVAIkZng4AAAE4SURBVHja7dbZEoIwDIXhqEBdwe39n9VlpOiIo6nFo+Pfe8k3zTGpBfExAAAAAAAAAAAAAAAAAAAAAAAAAABSf7gys1oJKOxyGg1gNL7Un8w1gFV7AaWoBbEDaw0gdmA60wCq9gJqzb9gucgUwVcA8bad50UbAAAAfgDwcA29PYXTAN2FNEECKHLt4URAbMDbezgN0DWgDgpA3IKZEugGxGdApgR6AV0AyqAAbLaW7R2SAnCMREdCLCGAGoCn/iCAwrQAV/0BAL76+QHO+rkBrvwNAOipXz4Z1VkBffPno4Dq6pm3VwCuN0AhbcFxA0kAbdXTRzWAqvumBnAOQXkzkD4LOIWgDkLAcRA1QQkIu3XQAu6XEgDJoxQAAABfBWAS/i9ggAMAAAAAAAAAAAAAAAAAAAAAAHAAYMKWUHJ5EqMAAAAASUVORK5CYII=", + top: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACABAMAAAAxEHz4AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAAYUExURf///wAAANSAKwAAVar///+qVSuA1ABVqmCk4p4AAABFSURBVGje7dOxDQAQFEBBkRjg72IgI9i/olSpJCLuBnjdSwkAgLfkmKqAgIDAqcCiC/wb8IKAgIDAzUCJjSbwSwAA4H0D+R0wJ+LbGcwAAAAASUVORK5CYII=", + bottom: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAMAAAD04JH5AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAA5UExURf///6pVAAAAVar/////1FWq//+qVQAAAABVqoArADwAAP/UgNT/////qgArgIDU/wAAKyuA1NSAKz7z6MUAAADNSURBVHja7dZZEoIwEEVRWg2JOLP/xTqmtBF/LOs1hfdsgGsnJmkaAAAAAAAAAMDkpfyllgACCJhLwGelfmq9ijmiCCDgnwNOFhqwXORsgQH3o9HCAupnLSbgOv5aEBEwfjPpAkoODXgZ/+26VS9BGv5qcYAff68+B/z4u436JPTj73bqu8CP39SX0XD3y2/D8r782oDtfvzM0e2BZ4EFPUjqLmjDXkSHo19+/ZPsUvD490e9CZPxKiaAAAIIIIAAAgiYXgAAAAAAAPiJM0UCIODiZq/rAAAAAElFTkSuQmCC", + add: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAcQAAAG/CAMAAADxZFcvAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAABRUExURf////3Xw/vKtf3i1oqPlGms5f/6+EdQWf/IlOPk5faQa0dTlMbIy4pQWcb8/2lweP//y//27P/o5PixlZmPo+Px/2msy4pweOPIlIqs5fSEXoY3FXkAAAXBSURBVHja7dxdcxM3GIDRaNUK2LZQSYW2+f8/tLuZaYbgOLEdb7yvOM+V4YIJOtGXveO7O0nhKr33SZu2jPBmfq2nXFpKKWvTlhG+Kzn1dHXAqbbUarEWvdOK11rOdboe5DIFF0B+N5BMy4SsV/iXas+pGdBbtexfPb/1l2Fq2Ry87XzMecpvmoXVJNzDdMwXz8ZlIUW4m1X1sr2xTw4zezrkXDAZ62wv3Fc1nzsZS7eS7m9NPWsylp6qMdvhZJzOmFrdUrrTnfHkyVVn03DH55vKcICNsTL8GRQZBlBsrhbhe+0DiZKNUXTFMhmhCL1066/d+ERXLLM7fpTDTbUhDrAtZovpqAtqubeYBur5Zy5qMjKRevbBm9m4BFtQDw83zakm/tnGRIw/FU3EgLtiNRHDV354AMPRdID1tLsjRrwrpids3qwJ2dwca8Y62piIUY82EMc62jibxkecPOEWtO+Op/dGI+olo7glDnA+LYevFHZT9KDiAIie+h5gOVX846lzzQCIHnMLfMf4/4UHvwcIIkRBFERBhCiIgiiIEAVREAURoiAKoiBCFERBFESIgiiIgghREAVRECEKoiAKIkRBFERBhCiIgiiIEAVREAVRECEKoiBqLMS29vvpfV6DCBHizRE/QTQTIUKEeNjHtQ+n9+saRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQ4yHWpb/Wftmmv9fOQPxtbaOf5eH/+XUJIkSIryJ+2Q7xG0QzESLEzfpz6Y+1D+P38AvyeQkiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECHEoxLW29mmb/lk7Y6C/rW30s3x9568EgwgRIkSIECHeAHHLdvVF7uXu3YcU4gBBhAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChLgLxC+n9+8aRIgQIUKEOCDizx5EiIIoiIIIURAFURAhCqIgCiJEQRREQYQoiIIoiBAFURAFEaIgCqIgQhREQRREiIIoiIIIURAFURAhCqIgCqIgQhREQRREiIIoiIIIURAFURAhCqIgCiJEQRREHas92kEMW2I3EmI2GFGbHhGTwYhar4+vLKxhD6XV8RSibl79Tq4ZjujnmuW14Yh+rlnWU8MxAKJNMWTtiZubYviJaD0dAvHpnxSj/MMu+NGQRJ+ITy8cCnLTP1g/HW3CT8TlbwxKsMohYjIVgzU9cxj1QX/0HfFB1sDE3hGPTU/t9o545D7hbBPoVHNk9yuTBTXOqeboR8DJh8NBSi+8T+qJqRi1l64S2bYY+GT6uNTaFiNsiK/c6RPF/Ru+akRx94YnnFwoxjekOIIhxREM16uk0dplpZ/xWdPkwak9lttZLK36jHiH18Oz1S2pe1tKz39TtORuMu5qGtZL3tiuebYz7qTWL356pjYHnD1U+5seCy559tUatz6TzlN540eEJc2eDr/hcWaac7nC+Jfld8HzjDcSnK73dV/lLt33ZH98z31w6nPa4gvbFsk+JW3c1Pu9W7oUrv8AKiG7XScCG+oAAAAASUVORK5CYII=", + plus: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAcQAAAG/BAMAAAA0lLouAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAwUExURf///0dQWYqPlP/6+P3Xw/3i1vvKtePk5faQa0ePy/7x6vm2nfelhopQWYqs5dGJeGZxbd4AAAQxSURBVHja7dhBS9t3GAfwPyQGSbzsuOtewMhhytCLoJVhLwF1K7qDYFdGt8NuuxaEHtZXsNsf1G1UD4O2MNoeCp07dLvsjew1TBPTqEmMgwn9f/t5DklIcvDj8/ye5/ekKERuLLy4V7F4sf1ffM2na+vLGxWL5c7s7cXrAv+YX92rYuXNb2x+ey3k0a3VdlWPV219/fnkbx2ul1XuIc3lZ5O+MnfQrnafrG1MMB4+rv4wuNp4tJkw8PavOI+tr9oJxNpWZ+xRPY4QnkC2xrXMhbIIieaY47iwmnP//Gl0qT5r5xBrI9P1S1kExfyIrlr7IWtVOhzO2KdlFrE5lMbmbtrGO5TGhTKNWL8sms374eLWpWaznUdsXZyNR0VgHF9I4m4i8cJiWOskEuvnVYdFEV6pmXV6oVKbi5nExqBSp4vQGFziDlKJg+n/IJXY6l/ipjqpxEaZfhSL2trZi/1Y4tt+8zqXuN/uPb/KJU73DmOzk0s86zczucL+fpFMLN70do5kYq+l3k8mLmVf305jL30snrTU7mB8kkyc6U6N7WRib9co8ws1OuqnxFY7njgdTWwW8cQCERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERHxfSf+/P2NxnfvAPGLfOLfH9xofPgjIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIuI7RPzoZuPjfxAR/w9iNQIRERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERHxfSc2u7poYj2/RnvETjKx1SUu5hNfRzfT8vRxN5k4k0/c6z5OJRN3uo+NZOKb3onMJ84EXwCmzmzBg7FV9p4fpM+Mfr1Gxlo/m+ndpn+Pi9wWn/dfxfabfrcpilepxIW3xOVU4v347X9wFItiO3kfvpzQqPj8HHEmUlhbOp/RyEodjIzTWE0k3i7HHcyYfrp0ca/6Nb1Oi+JeHvHupcqsxzWcxpBoJY34zVB7SUtj48nweyvpSUxL46gknkzKpLvb05GDvhH0M9VmOfr9x4sxZTpWspVSpn+OvY/O/h5yr9kb/9lBxHH8cumqTxOMRztXfz57XPkc7kxaDD95WOnVsfb12uS/v31nqbrCuYe1a/0j6o8q+jvH3G+L1y/Bz/66u1yxWHn5qBCx8S/INvmwxH9NtQAAAABJRU5ErkJggg==", + E: "data:image/png;base64,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", + Q: "data:image/png;base64,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", + downArrow: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAh9JREFUSA21lb0uRUEUhffxEzo3cXkJDyAhUdCT0CkkCk+l0yv0KBQSUXsJf6EgRHHsb86ssc09VyjsZO6eWbPW2rPnnJzbtG07aV20nhofyhkuKeJxLoIw5YRP5d0Iqghbf5nDJb5pJhyQOVlDZAnIRB/+o14d1GJEimgAphOSNRdOJoqeAjVJhokZfuAp+jTsCS/ceEV9YhUja8ATPmLoe8ISTx2wiBuax5wE/IRQISBx47xRBxAVEPtCZjWXdY0VvR6yTJutCzvx3cHijO0cLtt9YX6dUFwVtIMrW7h9t2PnPp2s2WbWJB4dKHSSQdva6u2bne1f24I2PcdTFvNdzJ2LxjkDHxgzEj8WSBtzU7btkxvfXXp8tVNO52QFnBJ7lzb/grlz0dC1byZjz3DbJn8qABNARvj8YecSzk3b+tGKPSDwQYxwFmdtw6/0jj0f4lnsQEUMMwSciiIU806GWcydD+sDBHOnpSIUauiAIiwUpbp3MmI0M2lNuvN8LaG7ET1ALCDjWCydNhoioiu6G3Mt3/S9z6DzwKqL9BrmhwmCeT45rzGGHK7ODnUd/Or/wF/H4Uv3rhtvWn7oyST/1EUSXHcgQbyu387j1RQNDzhWZq61ikVh31x8abVOen0qWEQxJIUEwuAJ0xxur15f0z6xCihHg9p4rD5eUTSSQCcla8ATrkLjirfqAJHIcS5MBhjHUCEwceP8//8PPgE7CQFG2pHOlwAAAABJRU5ErkJggg==", + upArrow: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAhVJREFUSA2VlTFuFEEQRXswFmQODL4EB0AixEdwTsapyMjhBnYGEgfwJYwdODPC0lCvd15tbc/IQEm9Xf37/1/VPbO70zzPR20Xc0xTDOcFzqniNZcg5tzx58tuBS3C1v/kcIkDzbMANGd2SFbATGzhT+o9wShGZFQDMDtkNhdnJlJPgZGkYWeWD3jGloY98eTWK9oSW4zZAU98ZRh7Yp3nCVjUDfM6dwEfJSwEJLfmkyeAaEDcCs1GLusRS70PWdOxiyR+/NFe3/xqXwDOXrSLT2/bz0irjq2VfoovGqdYbQSWHXfzh3YZwJvF5frsZTuPIreVx16ERbu+Ftht741Zz9U8lNcdjELkJ8ft/ed3vYimy/a+yNh9do35h+/t1c3SuYaYknOa+9/tigbg4hxxoAeggOEm6wkhBhhhyJVEt3d0TG4RGqCR0Bzo8WD4FvVFAASdn9bOx/vmAdci5SRdj4djPEG/87Hz5Y1BbEw84FpkOclpEGw2T0CSx+NV9Fq478W8cuAS8+okj+3rbmt9gjQI9f00tW90x52HgL0ayQ1wf5LQoA2MBuD0wWvKH45gpD1YE5r9Sw7XSH19yICOSv5bjsZGVnp/KqhcjSAa1QBMM2ZzcWYi9f6aCihgHqNi8uBs5cmtV6RhFdTuyW1EXG4aDgVnT4C55JqLaWABOISFyOXWPL/JVagZxBqajVzWI5a6P0EACOseq1UCAAAAAElFTkSuQmCC", + mouseLeft: "data:image/jpeg;base64,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", + sxzy: "data:image/png;base64,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", + wasd: "data:image/png;base64,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", + fire: "data:image/png;base64,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", + in: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACABAMAAAAxEHz4AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAtUExURUxpcRv7KSD/MBr6KRv6Kxn6KBn6KRr6KRr6KBj3KBr7KRj3KBr6KRr6Khr6KbH1JwQAAAAOdFJOUwCPEO8wd7/PWCCvQN+ffgtVrQAABJxJREFUaN6lWd1LFFEUHwctvwIrCnyRkRIhLCJSKmOwTAr6QNPIyGSp7MOHfdiKPhAxTBBEWYiCoAeJfFQMEgtKAh96kwi0N2Fbd01d79/Q7r2zO3dm7j33zMx50rlzfvs75545555zNU0q+oWOlfsDP/unl79qAUSfe0QKkpma9as+wqlTmWrxo183SDySqcbrfzKJSB5g6V8nEknEMfoVewkJg6AD+oRsKhH0YQJKQgUwz72cfLGve+zL6LUVHuEErF9rv9nUFbejImo/fw7plxb2L91lOFbmbIh2wAGr+ZeeeOKurKeALQd4mzf+o2j1ex7huDQCliz9aoWDZEZ0Wvo3ZL9QYgGk4B94KLfxsPVKROjBGbb4DNqmS4AfD7G1RgMMlF72VkywxLYwOQRHWjFz9Lp3pUjpAAfRiIRbylB+rr1iL5SgDKDRwihUuR4PYz41Jlfoq/9cvjGxBPLvEufXUg8HuVNe05ePOZ7V4AlkKXjdWIr3QE4WPJ8Us2AIC8A2Ys1tQUJDy4QrGpkFH/AA5S7G1IKMgQfQl5z7QC1o9lN9aTBtF/KlqUi2stzUwv/nx4Ks0Po/af1zQBDbqFDY4D/QKn8A5ZwT9JwLknF/ADp1Qtx2gShT6+2qvPKL/tmQ+/OkKHsBRUw7YjthQrKJ2TwfkQMU2bwPnsuKIUyfaYUTMqCbZmQliCsDcVX+TiucAG3+jLwKUqnMLR9VJl85hVJ3UhFnPjkFHSj0OAo5Gze1EBRy8ZPUQlCg2zAbgkKlOg3BFHbxOSUIhVJVIKgolOXW/mrBKeiqSFJSMBGpFKQQVYWiikKNKhRVFHopQMduWKJyChN0wSQoiUgA1rEAaQlABgsgorBAP0csQFq8Q3iAdSMkQExsAtoHAgIUAL0LMek24gJJRMAKJNzJOiYPZYW0ygnQ6rgdggAtDIkQBLQldUIBCej8QS0IgWI1AEiAHc5+BCfAjoqR4ARYaasKToDl26HgBGggJo3gBGgcpUMQoEfsVAgCJaomIQoT0HZ421fN2w3LCbBNgHZRHwQJsPM+PSK9y4mYAkCA+nAdPu4PQgS4NkXacNQDBFintqFoeX6rWp5JOzH4brpM7phZY/dPaKEdzyZ/Zl3zB0Abzy3+yJnxBxDlj6k6Cdh8zzr6J182tDrafxYJfmygYc59SRVEmR9Fk7t2V4eWwgPQKEpzcdpAlN2Hd/y8BQ6GEPWiytNlJluQozDTbUHeBuQw7r1gGMdswFGwxqpDovlaM94DCfHQGjMSNYUjUWsqjIgFNkDfNoRdoKoPtKfjMVkhybTgBtOCbLmTIIzQO+X3JLp1PfYYApgnQMW0huNkj1y/1jpZ34aG3kDBq7P0EwY49JYi5PXl2e98HkF4yXLGVN9VzeQR+jwk7TvAdFyVbGnN6HKutN0pXKBdhbbpst2jnLpp/3rbH/v5XTjSvvGXpNPdY58vjo7sX+QeNhqYfAm0j8oibN+3CfURKad4NZx+Vnpk+k3IrKuNi/X78IeQN4J2NNnlp/qWjbsgkn1n/R0gNP0ld32e8a1OZfTWvYHF00/7l18BwfMfTNVTTzWqIHcAAAAASUVORK5CYII=", + info: "data:image/png;base64,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", + wall: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAMAAAD04JH5AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAABOUExURUxpcf2oAP+oAP2oAP6mAP6oAP+pAP+nAP+tAP2oAP2oAP+vAP+oAP2nAP+nAP2nAP6oAP+pAP+nAP6oAP+qAP+oAP+yAP+uAP+rAP+wAGKXuTAAAAAVdFJOUwCPScm8hTVXCd2aDx/4e5RqFWPuQojXR7cAAAHpSURBVHja7ZrZboMwEEUBsxoaJ0CM/f8/2qosyZO5do2sVPc8R5MTFuvOTLKMENI++kuABebuEsoWFSj0cgFa4AL2eQELBT5RwMQhXOArDqECi6ijcDehAmWcg7VYb0LIFWijCDQUoAAFKEABClAgVMBGygPzKmBF5n0FitlF0WAovdJhAWpAU7HpVI5RrXQTwleOpmLvOyQ0kKAXrdArsJS91/e3AiprcwrgAp7HhIcANB/Qh0AL0Qt3WfMSACckQq6oCkO4y00vgfaB0Oe/v8hqNWCclJP2EACp9Pos3OKc2CpYoIojIClAAQpQgAIUoIC3wG3N+TZSHsj1ITDcEcZyG4aXI8ZJvXI5BBptAfTeOqI94uQua95juUHys3drxs6IrZm3gDl5C9CG5GjNoJdLHgJmKp1IsCWT68dFVyKIOz4lw5rS9udYCVtexxrTcWtGAQpQgAIUoEBygSL11qyw27/pMk8BM0nlorphyH0e7i63IZu3UKqdiBlaw831Fk6FhpB4LGdr9p8FUrfn2NZs/7ffXGBM7qd/eQkMFfSK7yOafXv2N5QwiYdUlU48psspQAEKUIACFKBAaoHwPJA6kDyxKfgpnQkVMDYKb1szT4G4UOCzBMwF6OQCEhaox+YCxjojJDXf4uSKYGN3ygkAAAAASUVORK5CYII=", + window: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACABAMAAAAxEHz4AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAVUExURUxpcSyV3S2U3SyV3C2U3C2U3S+Z4+9tYbwAAAAGdFJOUwDEcEWk8vaFTOAAAAHnSURBVGje7ZnLVsIwEIaD4QG42K4LR7oOVFyjgmsvNPtKM+//COZCrBsmYwMePeZfkCwyH38n0/Z0wlhSkhav4sSWECXFsmiA8nPpR0mI86NxsN9aSbi24z2ocUgZNC4oN4CRy+YTCDteQRPM/ADe3aT8AsgT4KyAYP0ucYCqg8IBhErEAQRJPAfzkBapkP4MgM/N76roDVjDRlNk2xfAJTwbiuoLWIN2oCl9HejQRhjKqCdAh04tpecuuNATBigAG3rKAAWQYwZoAMQABbDADJCSWCAGyKV8ygC5lJuouxExQC7lqOcBZoBeyhEA1AC5lOMAIxRwCF5CE/lU5oLFObj4i+WQAPCWHCQH53CQAAmQAAmQAAnwg4BtSDscQOkjYQClCISLOgAVm4NUSAnwSwCEpmzkzaRwgIy9GyH2eRDOweycu7DrAMUR0H7r49vvCPc9jwEBMPRrntTn+qFPzJ2nYwd0oMRxNIHWegmy6XqxIUlnd6DzpQNe/eZNXfumCANK03BlPDcfXyXARKxypetHPVQ3krAJ9oL3gu9M41fPJdS6+Fr931B3NYIr12v14tYdslltuCthJRjNgg2yG28DdSLc2eUjI2nmk2b671ldT8zkNoMXYrxePB53a6ujbV4J9v/0Aa21qAtzThtwAAAAAElFTkSuQmCC", + kitchen: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACABAMAAAAxEHz4AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAqUExURUxpcfTqKvXrKu/vMPXqKfTqKfTqKvTqK/LqKvPnKO/nKPTrK/TqKvTqKgvPVicAAAANdFJOUwCfrxB3x+8wWUAgj9+fNmOEAAADXElEQVRo3u1YzWsTQRRP3ZTdND1YqN4K2oN6ERbBaNFCSls/GxA/EDQLRStWaKBQ9KTgoYKggRx6VMhFEEQQ/ECQgBcPCgumbbb24/0vzm6aNDM7M29eQ724v1NmZt8v8/He772ZVCpBggT/AKcWvw1eqOza3JosQYjb1d3ZjxyBbTTGd2N/pgQ7OEq3z3jQiQ/k9deahvdu+M0fT4kEL0OjrYsL7OdiNJfGPMk+Hf37QrNhT4WtdRJBgVnMuO3mM+oisuKcQ8JVwg4OAQTjYg/kjWyXPhfnfrCvb/L9DvOKreLc1UHEsU8fbDmf6L6PWh5xTGf/ru19t8Qhuz1Urxp471b8o/YUYFN5+Dve/ys+ujMF1XlEO33n/IL19sVhVza/4U/Px4oRwxUpwRs2ct3FjmnJk21xNEU/dnZS2CHDfckA26SfRm7msH8K4qFlefKJKRz9e6z3BMBHQqg1Yp01QrBk2BT2x/sIqvUaYE3o6oWGS9IbcQ1leEARnOMxffHMor2FUfEcHFimauYfrqNHaKO640Od6+iHuzTZr0HAtZ/AIRoB24QK71vEzNMv+I0XuDSCrHAMfoOY+hyA6c62WucU6ANY4ZqrRAILYKNTZYhuwFDism2GTuBzJg55CQKBTSfgCwaLGEvRKWx0RWDzx8hWRPTEtJCeakAsaPcJslqOqSyCnKBpo9yWGKAMUOWjs04j8ARZdgRCg2DkPccq0TahF0QNrNEq0UKs6MvJMrY6OZZAlDAHKLqck9RJHpirGqsl4JrY+V7Sp8JjVqJUZDnfUNozPsgEqACGNY71RV54h5WPibBZr1TFangn2ESDMjPJPgvyqsoHveA1L3Oz8sGHBtezIe0FLFyEPk33hV8EyousFTKsYAVecEnzwRROoL9Is5D4jRCspBIClGAaIdjYWwJ7YiKP5FRiBkoI9oRg7X8gGLk8IIO7rYkoAfeK14GqIYHwikcnOAfdEWRKXRKcDF/xhmVoEayj1dOMq81MegJW7mmLLZTAQV79UII0oroWRtCjeqUyJch2S5BGZB0NJgcptBxMkSzQH2MOWWJUA83qIw15bjrLXHl5QIED4TOci79yaYHWogWEAH0ws32t/Qx+Qe3R2RuV487YsApf51MJEiTYI/wFfnAD3ltxHQAAAAAASUVORK5CYII=", + livingRoom: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIEAAACABAMAAADe0hfGAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAnUExURUxpcRQgeBMiehQiexIgeRAggBIieRIiehMjehMiehMjeRMheRMieiZedJ0AAAAMdFJOUwBA748mEHTYYKlQvyvHdt4AAAL1SURBVGje7ZjNaxNBGMY32k3SrYcEQaH0ICJGZQ+lUiu0Bz+IQchBUCJqDoIUkeZQelACe8jNiwdtsRLMwYs3D6JUQbxkYxNj5o9yPnZ2Zmc3OzMbEIrzXHaf3Znfzryzw7wzlmVkZPTvdO+O4K/p1b+1A0C7w3zjS9RLddIFSMvU3xS8VHdJBTAKWp4PvP8hpdKp7y+g3uB7uwcCDZP9S1S2vZn4VdzO0yAU9jXm3yJ/O2hRJC70K6MSo9FSom9Q/4cD5FmZvXf4Urmy5QYeXyv7zzzsu2sh0OcGuAAETeDLouBznljqMSM0hVc+fveAeRy1eZHwmhGWUAi63TDml8jjDeovCP5i9z3qyxlG+ERilOfajJRzo37OY//JfIwwYBGdlMII4yqTzSTviQQyNM66V9nnQuxsxf23Ku1SlPBLd/IagiEYgiEcKQKo7JXUqz9c33FjBJ38IMgnGIGuZ75ilhLmFzRTslfoWjRQAsx5wtrGrY9gW4Vwg5XvCMshXI5UmsDlE32WPPjtNXFBn6ZHuPzXXZZCoEaNPsIVDXVP4bdoobbCla8Rdhuu+f4qujkOn4ylANulg1YLMiH0ZMjo0tQVdfocufVI4NCTA/JkQSUQBVaoTr5YYCmVHc0qklVnXS0S2Amu8z2FULZYGmiTXKoehgG/7SsQwq94eDCWuNQSzrDfMkKP6ymZ4a84ZpNrTwrhM9eeQ33Cz/+DIJsYticjyCYGmgQSwqCcpsVeOuEYUNLydMKCGqEzneAoAdjuKE5AQyXX0Eoh3NcKQxLBeirvww8rlWDlyhJVLQlBS4ZgCIZgCIZwhAj9rIQNShhnBKB8hhDAajYAOo49DHaK/tksCnaMTTCTthNOWPUEdwe5mQB409qahYD3rEU3OyA4f3WewCRxfFlT8F8YXK3Ocv7QE08PhjMTfE2AEzttBufLOlpciRKamf9HzYx8emoaP9NXUyk60fUVOXOpZSEcRAZnVx/wXBjf62VNVS0jowT9BdaXVla6cjkQAAAAAElFTkSuQmCC", + skyBoxLeft: "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAFA3PEY8MlBGQUZaVVBfeMiCeG5uePWvuZHI////////////////////////////////////////////////////2wBDAVVaWnhpeOuCguv/////////////////////////////////////////////////////////////////////////wAARCAgACAADAREAAhEBAxEB/8QAGAABAQEBAQAAAAAAAAAAAAAAAAECBAP/xAAVEAEBAAAAAAAAAAAAAAAAAAAAAf/EABcBAQEBAQAAAAAAAAAAAAAAAAABAgP/xAAUEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwDDbIAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAACgAAAAAIAAAAKAAAAAAAAACgAAAAAAAAAAAACiACAgICAgIACAAAAAAAAAICgAAAAAAAAAAAgAoAAAAAAAICgAooCgoAAIACAAAAIAAoAAACgAAAAAAAAAIAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAy6sAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAKAAAAAAgAAAAoAAAAAAAAAKAAAAAAAAAAAAAKIAICAgICAgAIAAAAAAAAAgKAAAAAAAAAACACgAAAKCAAAAAACigKCgAAgAIAAAAgCgAAAKAAAAAAAAAAgAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAgAAAAAAAAMurAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAACgAAAAAIAAAAKAAAAAAAAACgAAAAAAAAAAACgCACAgICAgIACAAAAAAAAAICgAAAAAAAAAAgAoAAAAAAAAAAAKKAoKACAAAgAACAAKAAAAoAAAAAAAAACAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAACAAAAAAAAy6sAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAKAAAAAAgAAAAoAAAAAAAAAKAAAAAAAAAAAAKAIAICAgICAgAIAAAAAAAAgAKAAAAAAAAAACACgAAAAAAAAAAAoqgAoAIAACAAAIAAoAAACgAAAAAAAAIAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAIAAAAAAADLqwAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAoAAAAACAAAACgAAAAAAAAAoAAAAAAAAAAAAoAgAgICAgICAAgAAAAAAACAAoAAAAAAAAAAIAKAAAAAAAAAAACiqACgAgAIAAAAgACgAAKAAAAAAAAAAgAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAIAAAACgAgAAAAAAAAKAAAAAAAAAAAAACAAAAAoAMOrAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACgAAAAAIAAAAKAAAAAAAAACgAAAAAAAAAAACgCCAAgICAgIAACAAAAAAAIACgAAAAAAAAAAgAoAAAAAAAAAAKAKoAKCAAAgAACAAKAAAAoAAAAAAAACAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAADDqwAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAoAAAAACAAAACgAAAAAAAAAoAAAAAAAAAAAAoAggAICAgICAAAgAAAAAAACAoAAAAAAAAAAIKAAAAAAAAAAACigKAAAAACAAAIAAoAACgAAAAAAAAAIAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAMOrAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACgAAAAAIAAAAKAAAAAAAAACgAAAAAAAAAAACgCCAAgICAgIAACAAAAAAAAAAAAAAAAAAAAIKAAAAAAAAAAACiqAAAAACAAAAIAAoAACgAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAMOrAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACgAAAAAIAAAAKAAAAAAAAACgAAAAAAAAAAACgCCAAgICAgIAAAACAAAAAAAAAAAAAAAAAAIKAAAAAAAAAACgCqAAAAACAAAAIAAoACgAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAMurACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAoAAAAACAAAACgAAAAAAAAAoAAAAAAAAAAAAoAggAICAgICAAAAAAAgAAAAAAAAAAAAAACACgAAAAAAAAAAoAqgAAAAAgAACAAAKAAoAAAAAAACAoIAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAMurAACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAoAAAAAACAAACgAAAAAAAAAoAAAAAAAAAAKCCgCCAAgICAgIAAAAAAACAAAAAAAAAAAAAAIAKAAAAAAAAACgAooCgAgAIAAAAgACgAAKAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAy6sAAAIAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACgAAAAAAAIAAKAAAAAAAAACgAAAAAAAAAoAIKAIIACAgICAgAAAAAAAIAAAAAAAAAAAAAgAAoAAAAAAAAAKACiqAACAAgAAACAAKAAoAAAAAAAACAAAAAAAAAAAAAAAAAAAACAAAoAAKAAAAAAAAACAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAICOrAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAKAAAAAAAAgAAoAAAAAAAAAKAAAAAAAACgAAgoAggAICAgIACAAAAAAAAgAAAAAAAAAAAACACgAAAAAAAAoAKAKoAAIACAAAAIAAoACgAAAAAAAAIAAAAAAAAAAAAAAAAAAAAIAAACgAoAAAAAAAAAAIAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAy6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAICgAAAAAAAAAAAAACgAAAAAAAIAKAAAAAAAAACgAAAAAAAAoAAIKAIIACAgICAAgAAAAAAAIAAAAAAAAAAAAgAoAAAAAAAAAKACgooAACAAgAACAAAKAoAAAAAAAACAAAAAAAAAAAAAAAAAAAACAAAAoAAKAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAMurAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAACAAoAAAAAAAAAAAAAAoAAAAAAACACgAAAAAAAAAoAAAAAAAAKAAAKgCCAAgICAgAIAAAAAAACAAAAAAAAAAAAIAKAAAAAAAACgAoKAKAAAgAIAAAgACgAKAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAgAAKAACgAAAAAAAAAAAAgAAAAAKAAACAoAAAAAAAAAAAAAAAAAAAAAAAMurAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAACAoIACgAAAAAAAAAAAACgAAAAAAAIAKAAAAAAAAACgAAAAAAAAoAAAqAIIACAgICAAgAAAAAAIAAAAAAAAAAAAAgAoAAAAAAAAKACgoqgAgAIACAAAIAAoACgAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAMOrAACgAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAgAAKAAAAAAAAAAAAAKAAAAAAAAAgoAAAAAAAAAKAAAAAAAACgAACoAgAgICAgIACAAAAAAAgAAAAAAAAAAAACACgAAAAAAAAoKCgCqAACAgAIAAAgACgKAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAw6sAAAKAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAACAAAoAAAAAAAAAAAAAoAAAAAAAACCgAAAAAAAAAoAAAAAAAAKAAAKgCACAgICAgAIAAAAAACAAAAAAAAAoAIAAgoAAAAAAAAKACgoKKAAAgIACAAIAAoACgAAAAAAAIAAAAAAAAAAAAAAKACAAAAAAAAAAAoAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAw6sAAAAAKAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAACAAAAAoAAAAAAAAAAAoAAAAAAAAACCgAAAAAAAAAoAAAAAAAAKAAAKgACCAgICAAgAIAAAAAACAAAAAAAAoAAIAgoAAAAAAAAKCgAoqgAAAgIACAAIAAoACgAAAAAAAIAAAAAAAAAAAAAKAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAw6sAAAAAAKAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAACAAAAoAAAAAAAAAAAAoAAAAAAAAAAKgAAAAAAAAAoAAAAAAAAKAAAKgACCAgICAAgAIAAAAAACAAAAAAAAoAAAIgoAAAAAAAAKCgoAqgAAgAIACAAIAAoCgAAAAAAAAIAAAAAAAAAAAAKAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAIAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAw6sAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAACAAAAoAAAAAAAAAAAoAAAAAAAAAAKgAAAAAAAAAoAAAAAAAAKAAAKAgCCAAgICAgAIAAAAAAACAAAAAAoAAAACAAAAAAAACgAoKCigAAICAAgACAAAKAoAAAAAAKAggAAAAAAAAAAAAKAACAAAAAAAAAAAAoAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAw6sAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAACAAAAAoAAAAAAAAAAoAAAAAAAAAAKgAAAAAAAAoAAAAAAAAAKAAAAKgCCAAgICAgAAIAAAAAACAAAAAAoAAAACAAAAAAAACgAoKCigAIACAAgACAAAKoAAAAAAKAgAAgAAAAAAAAAAKAAACAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAw6sAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAACAAAAAoAAAAAAAAAAoAAAAAAAAAAKgAAAAAAAAoAAAAAAAAAKAAAAKgCACAgICAAgAIAAAAAACAAAAAAoAAACAAAAAAAAACgoAKKoAAIACAAgACAACigAAAAAKAAgAAAgAAAAAAAAAKAAACAAAAgAKAAAAAAAAACgAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDqwAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAIAAAAACgAAAAAAAAACgAAAAAAAAAAqAAAAAAAACgAAAAAAAAAoAAAAqAIAICAgAICAAgAAAAAAIAAAAACgAAAIAAAAAAAAAKCgoAqgAgAIACAAIAAAKKAAAAAAoCAAAACAAAAAAAAAoAAAAIAACAAAoAAAAAAAAAKAAAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMOrAAAAAACgAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAgAAAAAKAAAAAAAAAAKAAAAAAAAAACoAAAAAAAAKAAAAAAAAACgAAACgIgAgAICAgIAACAAAAAAAgAAAAKAAAAgAAAAAAAAoAKCgCqACAAgAIAAgAAAooAAAACgAIAAAAAIAAAAAAACgAAAAgAAIAACgAAAAAAAAAAoAAAAIAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAw6sAAAAAKAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoACAAAAAAoAAAAAAAAAAoAAAAAAAAAKgAAAAAAAAAoAAAAAAAAAKAAAAKAiACAAgICAgAAIAAAAAACAAAAAoACAAAAAAAAAACgAoKKoAAIACAAgACAACgCgAAAAKgAAAAAAAAgAAAAAAKAAAACAAAAgAKAAAAAAAAAACgAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDqwAAAAAoAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAIAAAACgAAAAAAAAACgAAAAAAAAAqAAAAAAAAACgAAAAAAAAoAAAAAoCIAAICAgICAAAAgAAAAAIAAAACgAIAAAAAAAAAAKCgoAqgAAgAIACAIAAAKKAAAAAAqAAAAAAAACAAAAAAoAAAAAIAAAAAAAAAAAAAAACgAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAy6sAAAAAKAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAACAAAAAoAAAAAAAAAAoAAAAAAAAAKgAAAAAAAAAoAAAAAAAAKAAAAAKAiAACAgICAAgAAIAAAAACAICgACoCggAAAAAAAAAoAKCgCqAACAAgAIAgAAoAoAAAACgIAAAAAAAAAIAAAACgAAAAAgAAAAAAAAAAAAAAKAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAADLqwAAAAAoAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAIAAACgAAAAAAAACgAAAAAAAAAAIKAAAAAAAACgAAAAAAAAoAAAAAoCIAAICAgIACAAAAgAAAAIAgKAAKgKACAAAAAAAACgAoKCigAIACAAAAiAACgCgAAAAKAgAAAAAAAAAgAAAAKAAAAAACAAAAAAAAAAAAAoAAAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAMurAAAAACgAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAgAAAKAAAAAAAAAKAAAAAAAAAACoAAAAAAAAKAAAAAAAAACgAAAACgCCAAgIACAgIAAACAAAAAgCAoICioCgAgAAAAAAAAoKACiqAACAAgAAAIgAoAAoAAAACgIAAAAAAAAAIAAAACgAAAAAAgAAAAAAAAAAAKAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAADLqwAAAAAAoAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAIAAAACgAAAAAAACgAAAAAAAAAAqAAAAAAAACgAAAAAAAAAoAAAAAoAggAIACAgIACAAAgAAAAAIAgAKKgAAAAAAAAAAoAKCgCqAACAAgAACAAAAAKAAAAAoCAAAAAAAAAACAAAAoAAAAAAAIAAAAAAAAACgAAAAAAAAgKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAy6sAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAACAAAAoAAAAAAAAoAAAAAAAAAAKgAAAAAAAAoAAAAAAAAAKAAAAAKAIIAACAgICAAgAAAIAAAACAIACioAAAAAAAAAAKACgoAqgAAgAIAAAgAAAACgAAAKAgAAAAAAAAAAAgAAKAAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAADLqwAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAIAAAACgAAAAAACgAAAAAAAAAAqAAAAAAAACgAAAAAAAAAoAAAAoAACIAAICAgIACAAAAgAACACKCAAoqAAAAAAAAAACgAoKCigAAIACAAAIAAAAoAAAACgIAAAAAAAAAAAAIACgAAAAAAAAAgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAy6sAAAAAAAKAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAACAAAAAAoAAAAAAoAAAAAAAAAAKAgAAAAAAAoAAAAAAAAAKAAAAKgACAAACAgIACAgAAIAAAAgAiggAAoAAAAAAAAAAKACgoqgAAAgAIAAAgAAACgAAAKAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAy6sAAAAAAAKAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAACAAAAAoAAAAAAAoAAAAAAAAAAKAgAAAAAAAoAAAAAAAAAAAAAoAAAgAAgAICAAgIAACAAAAIAIoIAAAKAAAAAAAACgAoKAKoAAAIACAAIAAAAAoAACgAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAADLqwAAAAAAAoAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAIAAACgAAAAAACgAAAAAAAAAAoACAAAAAACgAAAAAAAAAAAACgACAACAAAgICAAgAAIAAAAAggAAAAKAAAAAAAACgAoKCigAAAIACAAIAAAAAoACgAAAIAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAMurAAAAAACgAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAgAAAAKAAAAAAKAAAAAAAAAACgAIAAAAAAKAAAAAAAAAAAAKAAAIIAAACAgAICAAAgAAACAoIIAAACgAAAAAAAAAoAKCgooAAACAAgACAAAAAKAoAAAACACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAADLqwAAAAAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAIAAACgAAAAACgAAAAAAAAAAAoCAAAAAAACgAAAAAAAAAAACgIAgAAAAgAIACAgAAIAAAAgKCCAAAAoAAAAAAAAAKCgAoqgAAAAgAIAgAAAAACgKAAAAAAggAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAy6sAAKAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAACAAAoAAAAAAoAAAAAAAAAAAKAgAAAAAAAoAAAAAAAAAAAoACIAAAAIAACAAgIAACAAIAAAAIAAACgAAAAAAAAoAKCgooCggAIACAAIAAAAAAqgAAAAAIIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAjqwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAgKCAoAAAAAAoAAAAAAAAAAAKAAgAAAAAAoAAAAAAAAAAAoACIAAAAAIACAAgAIAACAIAAAAIAAACgAAAAAAAAoAKCgooCggAIACAAIAAAAAoCgAAAAAAiAAAAAAACgAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAACAAAoAAAAAAIAAAAAAAAAAAAAAAAAACOrAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAKAAAAAAAAAACgAAIAAAAAAKAAAAAAAAAAAAKAIIAAAAACAAgAIACAAAiAAAAACAAoAAAAAAAAAKCgAoKKoAIACAAgCAAAAAAKoAAAAAAAIgAAAAAAAoAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAgAAAAAKAAAACAAAAAgAAAKAAAAAAAAAACOrAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAKAAAAAAAAAACgAAAIAAAAKAAAAAAAAAAAAAKAIAAAAAIACAAgAIACAAIIAAAACAAoAAAAAAAAKACgoKKAoAIACAgACAAAAAAKoAAAAAAIAgAAAAAAAoAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAgAAAAAAKAAAACAAAAgAAAAAAAKAAAAAAACOrAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAKAAAAAAAAAAACgAAIAAAAAKAAAAAAAAACgAAgAoAgAAAAAgAAICAAgAIACAIAAAIACgAAAAAAAAoAKCgoqgAAgAICAIAAAAAAKKAAAAAAAgCAAAAAAACgAAAAAAAAAAAAAAAAAAAgAAAAAAKAAAAAAAAAAAAACAAAAAAAAAoAAIAAAACAAAAAAAAAAAAoAAAAI6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAoAAAAAAAAAAAKAAAgAAAAAoAAAAAAAAKAAAAAAKIAAAAIAACAAgIACAgAIAgAAAgAAKAAAAAAACgAoKCiqAACAgAIAgAAAAACqAAAAAAACIAAAAAAAAKAAAAAAACAAAoAAAAAAAAIAAAAAACgAAAAAAAAAAAAgAAAAAAAAAKACAAAAAgAAAAAAAAAAAAKAAAACOrAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAKAAAAAAAAAAACgAAIAAAAAKAAAAAAAACgAAAAACiAAAAACAAAgIACAgAIACAIAAAIACgAAAAAAoAKCgAoqgAgAIACIAAAAAAKKAAAAAAAgCAAAAAAAACgAAAAAgAAAAAKAAAAAAAACAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAoAAAAI6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAoAAAAAAAAAAAKAAAgAAAAAoAAAAAAAAKAAAAAAKIAAAAAAIACAAgICAAgAIAgAAAgKAAAAAAACgAoKCgCqACAAgIAgAAAAAoAoAAAAAACAIAAAAAAAAKAAAAACAAAAAAAoAAAAAAAIAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAjqwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACgAAAAAAAAAAAAoAACAAAAACgAAAAAAAoAAAAAAAogAAAAAAgAIACAgIACAAgCAAAAAAAAAAAACgAoKCgCqACAgAIAgAAAAAooAAAAAAACAIAAAAAAAKAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAoAAAAI6sAAAAAAAAAAAACAoIKAAACAKAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAoAAAAAAAAAAAAKAAAgAAAAAoAAAAAAAKAAAAAAAKIAAAAAAIACAAgIACAgAIAgAAAAAAAAAAAoAKACgooCggAIACAIAAAAKAKAAAAAAAAiAAAAAAAACgAAAAAgAAAAAAAAKAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAKAAAAACOrAAAAAAAAAAgAAAAoAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAoAAAAAAAAAAAAKAAAAgAAAAAoAAAAAAAKAAAAAAAKIKAACAAAAgAICAgAICAAgCAAAAAAAAAAACgAoKACigAAAIACIAAAAAKAKAAAAAAAAgCAAAAAACgAAAAAAgAAAAAAAAAKAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAKAAAACAOrAAAAAAAAAAgAAAoAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAoAAAAAAAAAAAAAKAAAAgAAAAAoAAAAAAAKAAAAAAAKqAAACAAAAgAICAAgICAAgCAAAAAAAAAAACgAoKACigAAIAACIAAAAKAKAAAAAAAAAgCAAAAACgAAAAAAAgAAAICgAAAAAAoAIAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAACgAAAAAgDqwAAAAAAAAAICggAoAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAoAAAAAAAAAAAAAAKAAAAgAAAAoAAAAAAAAKAAAAAAAKqAAACAAAAgAICAAgICAAgCAAAAAAAAAACgAAoKCgCgAAIACAIAAAAKAKAAAAAAAAAgCAAAACgAAAAAAAAgAAAAICgAAAAAAAAAAAAAAoAAAAAAAIAAAAACAoAAAAAAAAAAAAAAAAAAAAAAIAAACgAAAAAgDqwAAAAAAAAAIAAAAKAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAKAAAAAAAAAAAAAACgAAAIAAAAKAAAAAAAACgAAAAAACqAgAAAgAAIACAAgICAAgIAgAAAAAAAAAAoAKACgoAoAACAAgCAAACgACgAAAAAAAACCAAAAoAAAAAAAAAIAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgDqwAAAAAAAAAAIAAAKAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAKAAAAAAAAAAAAAAACgAAAIAAAAKAAAAAAACgAAAAAAAoogAAAAgAAIACAAgIACAgAIgAAAAAAAAAAoAKCgoAKKAgAIACIAAAAKAAKAAAAAAAAIAAIACgAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACOrAAAAAAAAAAAAAgKCCgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAACgAAAAAAAAAAAAAAAoAACAAAAACgAAAAAAAoAAAAAAAKKAIAAAIAACAAgAICAAgIACIAAAAAAAAAKAACgoKCgCgIACAAiAAAACgCgAAAAAAAACAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI6sAAAAAAAAAAAACAAAACgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACgAAAAAAAAAAAAAAAoAACAAAAACgAAAAAAAoAAAAAAAKAKIAAAIAACAAAgIACAgIACIAAAAAAAAAKACgoAKCgCgIACAAiAAACgACgAAAAAAAACAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI6sAAAAAAAAAAAAACAoIAAACgAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoIACgAAAAAAAAAAAAAoAAAAAAAAAAAAAAKAAAAgAAAAAoAAAAAAAKAAAAAAACgCiAAACAAAAgAICAAgICAAiAAAAAAAAACgAoKCgAoAoCAAgCACAAoAAAoAAAAAAAAAgAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACOrAAAAAAAAAAAAAAAAAAgAAKAAAAAKAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAKAAAAgAAAAAoAAAAAAAKAAAAAAACgCiAAAACAAAgAIACAgICAAgCAAAAAAAACgAoKCgoAoACAAgCACAAoAAoAAAAAAAAAAgAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjqwAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAoAAACAAAAACgAAAAAAAoAAAAAAAKAKIAAAAIAACAAgAICAgIACAIAAAAAAAKACgAoKCgCgAIACAIAICgAACgAAAKACAAAAAIAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI6sAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAKAAAAgAAAAoAAAAAAAKAAAAAAAACgCiAAAACAAAgAIACAgICAAgCAAAAAAACgAoKACgoAoACAgACAAAAAAKAAAoAAIAAAgKCAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACOrAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACgAAAIAAAAKAAAAAAACgAAAAAAAAoAoAgAAAgAAIACAAgICAgAIAgAAAAAAAoAKCgoAKAKAgAIAgAAAAACgAAKAAACAAIAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI6sAACAAoAAIACgAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACgAAIAAAAAKAAAAAAACgAAAAAAAAoAAogAAAAgAIACAAgICAgAIgAAAAAAAAoAKCgoKAAKAgAIAgAAAAACgAAKAAACAAIAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIA6MAACgAgAAAKAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAKAAAAgAAAAAoAAAAAAAKAAAAAAACgAACiAAAACAAgAIACAgICAAiAAAAAAAACgoAKCgoAoACAAgCAAAAAKAAAoAAAAIAAgAAAAAAAAAAAAAAAAAAAgAAACggAAAAAAAAAAAAoAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAOjAAAAAAAAoAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAoAACAAAAAACgAAAAAAAoAAAAAAAKAAAKIAAAAIACAAgICAAgIACIAAAAAAAKACgAoKCgCgIACAIAAAAAAoAACgAAAAgACAAAAAAAAAAAAAAAACAAAAAKAAACAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAAgAAAADowAAAAAAAAAAKAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAKAgAAAAAAAAoAAAAAAAKAAAAAAACgAAAIoAAACAAgIACAgIACAAiAAAAAAACgAoKCgAoAoCAAgCAAAAAAKAAoAAAAAIAAAAgAAAAAKCAAAAAACAAKAAAAACAoIAAAKAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAACAAAAAAOjAAAAAAAAAAoAAICgAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACgIAAAAAAAAAKAAAAAAACgAAAAAAAoAAACKAAAAgAICAgAICAgAIAgAAAAAAAoAKCgoAKKAAgAIAgAAAAACgAKAAAAACAAAAAAAIACgAAAAAACAAAAAAAAAAIAAAKAAAAAAACAAAAAgAAAAKAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAIAAAAAAA6MAAAAAAAAAAAAACgAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAKAAAAAAAAAAgKCCgAKCAAAAAAACgAAAAAAAAoAAAAAAAKAAAAigAAAICAAgICAgAIACAIAAAAAAAKACgoKACigIAACIAAAAAAoAACgAAAAAAgAAAAAAACAoAAAAAgAAAAAAAAAAAACCgAAAAAAAgAAAAIoAAIAAAKAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAIAAAAAAAA6MAAAAAAAAAAAACgAgKAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAoAAAAAAAAACAACgAAAAAAAAAAoAAAAAAAAKAAAAAAACgAAAIoAAACAgAICAgIACAAiAAAAAAACgAAoKCgAooCAAgCAAAAAAKAAoAAAAAAAIAAAAAAAAAAAAAACAAAAgAKAAAAAAgAAAoAAAAAIAAAogAAAACAACgAAAAAAAAAAAAAAAAAoAAAIAAAAAAACAAAAAAAAAAOjAAAAAAAAAAAAoIACgAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAgKCACgAAAAAAAAAAoAAAAAAAAAKAAAAAAACgAAAIoAAACAgAICAgICAAAiAAAAAAACgAoAKCgAooCAAgCAAAAAAKAAoAAAAAAAAIAAAAAAAAAAAAACAAAgAAKAAAAAAgKCAACgAAAgAACiAAAAAAIAAKAAAAAAAAAAAAAAAAACgAAgAAAAAIAAAAAAAAAAAAA6MAAAAAAAAAAKAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAKAAAAAAAAAgAAoAAAAAAAAAAAKAAAAAAAACgAAAAAAAAoAAACKAAAAgIACAgICAAgAIgAAAAAAAoAKACgoAoAAACAIAAAAAAoACgAAAAAAAAgAAAAAAAAAAAAAIAACAAAoAAAAKCAAIAAKAACAAKAIAAAAAAAgAAoAAAAAAAAAAAAAAAAAKACAAAAAgAAAAAAAAAAAAAKCOjAAAAAAAACgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACgAAAAAAAIAAKAAAAAAAAAAACgAAAAAAAAAoAAAAAAAAKAAAAigAAAIACAgICAgIAACIAAAAAAKAACgAoKAKAAAAiAAAAAAKAAAoAAAAAAAAIAAAAAAAAAAAAACAAAAgKAAAACgAgACAACgAAgCgACAAAAAAAIAKAAAAAAAAAAAAAAAAAACggAAAAIAAAAAAAAAAAAACgAjqwIAAAAAAKAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAKAAAAAAAAAgAAoAAAAAAAAAAAKAAAAAAAAACgAAAAAAAoAAAAogAAAAgAICAgICAgACCAAAAAAAoAAKACgoAoAAACIAAAAAoAACgAAAAAAAAAgAAAAAAAAAAAAAIAAAAAAAACgAAgACAoqAAACAKAIAAAAAAAgAoAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAOjAAAACAoAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAoAAAAAAAACAAACgAAAAAAAAAAAoAAAAAAAAAKAAAAAAACgAAACiAAAACAAgICAgICAAIIAAAAACgAAAoAKCgCgAAAIgAAAACgAAKAAAAAAAAACAAAAAAAAgAKAAAACAAAAAAAoAAAIAAgAoAAAIAoAgAAAAACACgAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAKAAAAA6MAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAoAAAAAAAACAACgAAAAAAAAAAAoAAAAAAAAAAKAAAAAAACgAAAIoAAAACAAgICAgICAAIIAAAAACgAAAoAKACigAACCAAAAACgAAKAAAAAAAAACAAAAAAAgAAKAAAACAAAAAAoAAAAIAAgAAoAAIAoAAgAAACCgAAAAAoAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAoAAAAADowAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAIAAKAAAAAAAAAAAAACgAAAAAAAAAoAAAAAAAKAAAAigAAAAAICAgICAgIAAgAgAAAKAAAACgAoAqgAAAiAAAAAKAAAAoAAAAAAAAAIAAAAAACAAoAAAAAAAIACgAAAAAAgAACAACgAgACgACAAqAAAAACgAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAOjAAAAAAAAAAAAAAAAAAAoICgAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAoAAAAAAAACAACgAAAAAAAAAAAAAoAAAAAAAAKAAAAAAACgAAAAIoAAAAACAgICAgICAIAAIAACgAAAAAoAKAKoAAAIgAAAACgAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAgACAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAKAAAAACAAAAAgAAAAAAKAAAAAAAAAA6MAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAoAAAAAAACAACgAAAAAAAAAAAAAAoAAAAAAAAKAAAAAAACgAAACgCAAAAACAgICAgICIAAAIACgAAAAAAoAKAKoAAAIgAAACgAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAgAACAAAAAAAAAAAAAACgAAAAAAAAgAAAAAKAAAAAAACAAAAAgAAAKAAAAAAAAAAAA6MAAAAAAAAAAAAAAAAAAAAAACggKAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAIKAAAAAAAAAAAAAAACgAAAAAAAAoAAAAAAAKAAAAAigAAAAAICAgICAgIgAAAAAAAAAAAAoAKAKoAACCAAAAACgAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAgAACAAAAAAAAAAAAACgAAAAAAAAAAgAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAAOjAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAgAAoAAAAAAAAAAAAAAAKAAAAAAAACgAAAAAAAoAAAAogAAAAAAgICUEBARBAAAAAAAAAAAAAUAFFUAAABBAAAABQAAAFAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAQAAABAAAAAAAAAAABQAAAAAAAAAAAAQFAAAAAAAAAAAABAAAAAAAAAAAUAAAAEAAAdGAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAABABQAAAAAAAAAAAAAAAUAAAAAAAFAAAAAAABQAAABQBAAAAAABASglBmggIgAAgKAAAAAAAACgAoAqgAAAiAAAAKAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAIAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAIAAA6MAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAACAACgAAAAAAAAAAAAAAAoAAAAAAAAKAAAAAAACgAAACiAAAAAAACAlBmglBARABAAAUAAAAAAAFABQBVAAABEAAAAUAAAABQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAQAAAAFABAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAFAAAAAAAABAAAAHRgAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAQAAUAAAAAAAAAAAAAAAFAAAAAAAABQAAAAAAAUAAAAUQAAUEAABAAZoJQZoIgAgAAAKAAAAAAACgAoKKAAAIIAAAAAKAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAICggKAAACAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAADowAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAIAAAKAAAAAAAAAAAAAAACgAAAAAAAAoAAAAAAKAAAAAKIAAKACAAgJQSglBmgiCAAAAAoAAAAAAAKACgooAAAggAAAAAoAACgAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAgAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAA6MAAAAAAAAAAAAAAAAAAAAAAAAACgAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAACAACgAAAAAAAAAAAAAAAAoAAAAAAAAKAAAAAACgAAACgCAACgAgAICUEoM0EoIggAAAAKAAAAAACgAoAKKAAAIIAAAAKAAAoAAAAAAAAAAAIICgAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAgAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAA6MAAAAAAAAAAAAAAAAAAAAAAAAAAKoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAACAAACgAAAAAAAAAAAAAAAoAAAAAAAAKAAAAAAACgAAACgCACgAAgAICUEoM0EoMoAAAAAKAAAAAACgAoAqgAAIAIAAAAKAAAoAAAAAAAAAAiAAAACgAgKAAAAAAAAAAAAAAAAgAAAAAAAAAAAAACAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAICujAAAAAAAAAAAAAAAAAAAAAAAACgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAgAAoAAAAAAAAAAAAAAAAKAAAAAAAACgAAAAAAAoAAAAogAAoAAIACAlBmglBmgiAAAAACgAAAAAAoAKAKoAACACAAAACgAKAAAAAAAAAAAIgAAAAAAoAAAAAAAAAAAAAAACAAAAAAAAAAAAAAIAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAiitsAAAAAAAAAAAAAAAAAAAAKAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAACAACgAAAAAAAAAAAAAAAAoAAAAAAAAAKAAAAAACgAAAACiAACgAAgAICUGaCUGaCIAAAAAKAAAAAACgAoAqgAAIAIAAAAKAAoAAAAAAAAAAIIAAAAACgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAgAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACKK2wAAAAAAAAAAAAAAAAAoAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAIAKAAAAAAAAAAAAAAAACgAAAAAAAAoAAAAAAAKAAAAAKAIKAAACAAgJQZoJQZqCAAAAAAoAAAAAAKACgCqAAAgAgAAAAoCgAAAAAAAAAAAggAAAAAKAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAggCgKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAKICtsAAAAAAAAAAAAAKAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAACACgAAAAAAAAAAAAAAAAoAAAAAAAAAKAAAAAAACgAAACgCACgAAAAgICUGaCUGaggAAAAAKAAAAACgAAoKKAAAIAIAAAKAAoAAAAAAAAAAAIIAAAAACgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAIIAqgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAACiArbAAAAAAAAAACgAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAgAAoAAAAAAAAAAAAAAAKAAAAAAAAACgAAAAAAAoAAAAAoAgAoAAAAICAlBmglBmoIAAAACgAAAAAAoAKACigACAACAAACgKAAAAAAAAAAAACACAAAAoAAAAAAAAAAAAAAAAAAACAAoAAAAIAAIIAqgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAACg2wAAAAAAAoAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAIAKAAAAAAAAAAAAAAAACgAAAAAAAAAoAAAAAAAKAAAAAKAIKAAAAACAgJQZoJQZQQAAAAFAAAAAABQAUAFFAAEAAEAAFAUAAAAAAAAAAAAAAEAEABQAAAAAAAAAAAAAAAAAAAAAAAAAAAQABEVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAB0YAAAUAAAAAAAAAAAAAAAAAAAAAAAABQQFAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAQAUAAAAAAAAAAAAAAAAFAAAAAAAAAABQAAAAAAAUAAAAUAAQUAAAAAEBASgzQZoJUEAAAABQAAAAAAUAFAFUAABAAABBQAFAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAABAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAFdGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAEFAAAAAAAAAAAAAAAAABQAAAAAAAAAUAAAAAAAFAAAAAAFAEFAAAAABASglBmgzQSoICAoAAKAAAAACgAAoAqgAAIAAIAKAoAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAICgggAAAACgAAAAAAAAAAAAAAAAAAAAAAAIAAAACgAAAAAgAAAAAAKAAAAAAAACAAAArowAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCAAoAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAACACgAAAAAAAAAAAAAAAAoAAAAAAAAAAKAAAAAAACgAAAACgAKgAAAAAAgJQSgzQZoJUEBAAUAFAAAAABQAAUAVQAEAAAEFAAUAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAEBREAAAAAABQAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAABQAAAAAAAAQAAFdGAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAQFAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAQAAUAAAAAAAAAAAAAAAAFAAAAAAAAAABQAAAAAAAAUAAAAAUAQUAAAAAAEBKDNBKDNBEEBAAUAAFAAAABQAUAFFAAEAAAEFAUAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAQFBEAAAAABQAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAQAFdGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQQAFBAUAAAAAAAAUAAAAAAAAAAAAAAAABAABQAAAAAAAAAAAAAAAAAUAAAAAAAAAAFAAAAAAABQAAAAABQAFQAAAAAAQEoM0EoM0GUAEABQAAUAAAFAABQBVAAAQAAQAUBQAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABAEAAAABQAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAQFdGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQABQAAEBQAAAAAAAAAAAAAAAAAAQUAAAAAAAAAAAAAAAAAFAAAAAAAAAABQAAAAAAAAUAAAAAUABUAAAAAAAEBKDNBmglBlBAAAUAAFAAABQAAUAVQAAEAAEFAUAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAQFBAAAAAAAAAAAAAAAAAAAUEAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAQFdGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAUEAAAABQAAAAAAAAAAAAAAAQUAAAAAAAAAAAAAAAAAFAAAAAAAAAAABQAAAAAAAAUAAAAAAUBUAAAAAAAEBKDNBmglBlBAAAUAAFAABQAAUAFFAAEAAAAVAUAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAFBAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAEBXRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAFAAAAAAAAAAAABBQAAAAAAAAAAAAAAAAAUAAAAAAAAAAAFAAAAAAAABQAAAAABQFAQAAAAAAAQGaCUGaDNBEEAABQAUAAAFAABQAUUAAQAABQAAAAAAAAAAAAAAEAAAABQAAQAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAEBXRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAFAAAAAAAAAABBQAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAFAAAAAAAABQAAAAABQFAQAAAAAAAQGaCUGaDNBEEAABQAUAAAFAABQAUUAAQAABQAAAAAAAAAAAAAEAAAABQAAAAAQAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAEABXRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAFAAAAAABBQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAFAAAAAAAAABQAAAAABVAQAAAAAAAAQGaCUGaDNBEEAABQAUAAFAABQAUUAAAQAAABQAAAAAAAAAAAEAAAAABQAAAAAAQAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAV0YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAABQAAQFBBQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAAAAAAAABQAAAAAABVAAQAAAAAAAQGaCUGaDNBEEAABQAUAAFAABQAUUABQRAAAFAAAAAAAAAAAAQAAAAAFAAAAAAABAAAUAAEAAAAAAQFBAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAV0YAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAAQUAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAABQAAAAAAAAAUAAAAAAUBQEAAAAAAAAEoM0EoM0GaCIIAACgAoAKAACgAoAoCgIIAAAAKAAAAAAAAAAAgAAAAKAAAAAAAAACAAoAAAIAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK6MAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAKAAAAAAAACgAAAAAAAooAAgAAAAAAgJQSgzQSgzUEBAAUAFAABQAAUAFAFAUBBAAABQAAAAAAAAAAAEAAABQAAAAAAAAAAQAFAAAABAAAAAEAAAAAAAAAAAAAAAAAAAAEAAABQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFdGAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAABQAAAAAABVAAQAAAAAAAQEoJQZoM0EqCAgAKACgAAoAAKACgCqAAggAAAAoAAAAAAAAACAAAoAAAAAAAAAAAAIAACgAAAAgAAACAAAAAAAAAAAAAAAAAAAACAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACujAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAACgAAAAAAAAoAAAAAAAKKAAAIAAAAAAICUGaCUGaCIICAoAAKACgAAoAKAKAoACACAAACgAAAAAAAAAIACgAAAAAAAAAAAAAAgAKAAAAACAAIAAAAAAAAAAAAAAAAAAAAAIAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK6MAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAKAAAAAAAAACgAAAAAAAooAAgAAAAAAAgJQZoM0EoIggAoIAoAAKAACgAoAqgAAIAIAAAKAAAAAAAAAAAAAAAAgKAAAAAAAAAAAAAAAAAAACAAAAAIAAAAAAAAAAAAAAAAIAAAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK6MAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAKAAAAAAAACgAAAAAAAoAoAAgAAAAAAAgM0EoM0EoMoAoAIAoAKAAACgAoKKAAIAAIAAAAAKAAAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAACAAAAAAIAAKAAACAAAAAAAAgAAAKAAAAAAAAAACAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAADTowAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACgAAAAAAAAAoAAAAAAAKKAAAIAAAKCAAAlBmglBmgzQRAFAABFABQAAUAFABRQABAABAAAABQAAAAAAAAAAAAAEAAAAABQAAAAAAAAAAAAAAAAQAAAAABAABQAAAQAAAAAAAAAAAAAAAAAAAAAEAAAAABAAAAUAAAAAAAAAAAAAAAAAAAAAAAEABt0YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAABQAAAAAAAAAUAAAAAAAFAFAAAEAAFAABAASgzQZoJQZoIgCgAKIAoAAAKACgooAAAgAAgAAAoICgAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAAAAAgAAAAACACgAAAAAgAAAAAAAAAAAAAAAAAAAAIAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAIAAADbowAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAoAAAAAAAKAKAAIAAAKAACAAzQSgzQZoJQRAFAAUQBQAAUAFABRQAABAABAAABQQFAAAAAAAAAAAAAAAQAFAAAAAAAAAAAAAAAAABAAAAAAAEAFAAAAABAAAAAAAAAAAAAAAAAAAAQAAAAAAEAABQAAAAAAAAAAAAAAAAAAAAAAQAAAG3RgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAABQAAAAAAAUAAUAAAQAUAAAEBASglBmgzQQEQBQAFAEUAAFABQAUUAAQAAQAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAEFAAAAAAABAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAABAejowAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAoAAAAAAAKAKAAAIAAKAAACAgJQSgzQZoICIIKoAKAIoAKAACgoAoAAgAAgAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAIKAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACA9HRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAABQAAAAAAAUAAUAAAQAUAAAAEBASgzQSgzQQEQBQAFBQBAFABQAUUBQARAABAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABBAFAAFAAVAAAAAAAAAAAAAAAAABAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAABAejoyACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAKAAAAAAAACgCgAAACACgAAAAgICUGaCUGaCAiAKAAoKAIAoAKACigKACIAAIAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAIAIAAAoAAoCoAAAAAAAAAAAAAAAAAAIAAAAAACAAAAAAAAAAAAoAAIAAAAAAAAAAAAAAAAACAAAAA26MgAAAAgAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACgAAAAAAAoAAoAAAAgoAAAAAICAlBKDNBmgiCACgAKCgCKAACgAooCgiAAACACgAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAgAAIAAIAAAoAAoCgIAAAAAAAAAAAAAAAAAAIAAAAACAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAACAAAAA26MgAAAAAAgAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACgAAAAAAAoAAAoAAAgAoAAAAAIADNBKDNBmgiCACgKACgCKACgAoAoCgiAAACACgAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAAAAAgAAIAAAIAAoAoACgAIAAAAAAAAAAAAAAAAAIAAAACAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAACAAAA26MgAAAAAAAAgAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACgAAAAAAAoAAAoAAAgoAAAAAAAIDNBKDNBmgiCACgKACgAogCgAooACgiAAACACgAAAAIAACgAAAAAAoIAAAAAAAAAAAAAAAAAACAAAgAAAgCgACgAKAAAgKCAAAAAAAAAAAAAAACAAAAgAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAAAAAgAANujIACgAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAoAAAAAAAKAAAKAAAAIKAAAAAAACAlBmgzQSgyggAoCgAoKAIAoAKKAAAIAAIAKAAAAAAgAAKAAAAAACgAAgAAAAAAAKAAAACAAAAgAIAAAACiAoAACgAAIACggAAAAAAAAAAAAAAAgAAIAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAID0dGQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAFAAAAAAABQAABQAABBQAAAAAAAAQEoM0EoM0EQQEFAUAFBQBFABQBQFBEAAAEAFAAAAAAQAFAAAAAAAAAAAAAAAAAAAAAAAAAAABAAQAAAAFAAAABQAAAEBQAQAAAAAAAAAAAAAAQABRAAAQBBQAAAAAAAAAUAEAAAAAAAAAAAAAAAAAAAAAABt0ZAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAAAAAAFAAAAFAAAEFAAAAAAAABASgzQSgzQSoICCgKACgoAigAooCgAiAAACCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAACAAAAAoAAAKAAAAAAAAgAAAAAAAAAAAAAAgCgCAAAgAKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA26MgAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAKAAAAAAACgAACgAAAKgAAAAAAAAAgJQSgzQZoIggIAKoKACgoAKACgAAiAAACCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACAAAAAoAAAKAAAAAAAAAgAAAAAAAAAAAAAAgCgCAAAgAKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA26MgAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAKAAAAAAAACgAACgAACCgAAAAAAAAAgJQSgzQZoJUEBAUUBQUAFBQAUAABABAAAQUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAQAAAAFAABQAAAAAAAAAEBQAQAAAAAAAAAAAQBQBAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG3RkAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAABQAAAAAAAAUAAAAUAAAQUAAAAAAFBAAQEoJQZoM0EqCAgKKAoKCgAoKAAAAggAAAIKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAIAAAAACgAAoAAAAAAAAAAACAAAAAAAAAAAACAAKAIAAgAAAAAAAAAAAAAAAAAAAAAgAKAAAAAAAAAAAADboyAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAoAAAAAAAAAKAAAAKAAAqAAAAAACgAgAICUEoM0GaCVBAABQFBQUFBQAAAAEEAAAABBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAABAAAAAAUAFAAAAAAAAAAAAQFBAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAABQAAAAAUAEAAABt0ZAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAFAAAAFAAAAVAAAAAABQAAQEBKCUGaDNBKggAAoCgoKCgoAAACACAAAAAgAoAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAgAAAAKAACgAAAAAAAAAAAAAAIAAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAKAAAACgAAAAgANujIAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAoAAAAoAACgIAAAAAKAAACAAzQSgzQSgzUEAAFUFBQUFABQAQBABAAAAAAQAUAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAQAAAFAAABQAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAAABAAAAAAAAAAAAAAAAQAAAAAFAAABQAAAAAAAadGQAAAAAAAAAAAAAQAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAABQAAAABQAAFAQAAAAAUAAAEABKDNBmglBmoIAAKoKCgoKACgAgCACAAAAAAAgAoAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAACAACAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAIAAACgAAAAoAAAAAAANOjIAAAAAAAAAAAAAIAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAoAAAAAoACgIAAAAAAKAAACAAlBmglBmgzUEAABRVBQUFABQQBAABAAAAAAAQAAAUAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAUAAAAAAAAAAAAAAABAAABAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAEABQAAAAUAAAAAAAAGnRkAAAAAAAAAAAAAAEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAUAAAAAUAABQEAAAAAFAAAAABAQGaCUGaCVBAQAFBRVBQUAABAAABAAAAAAAAQAAAAUAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAUAAAAAAAAAAAAAAAABAUEEAAAAAAAAAAAAAAAAAAAABAAAAUAAEAAAAAAAAAAAAABQAAAAAAAAadGQAAAAAAAAAAAFAAEAAAAAABQQAAAAAAAAAAFABAUEAAAAAAAAUUEBQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAUAAAAAUABQAEAAAAAFAAAAABAQEoM0GaglBAQAFBRVABQUABAABAAAAAAAAAAQAAAAAAAAUEAABQAAAAAAAAAAAAAEAAAAAAAAAABQAAAAAAAAAAAAAAAAAAQBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAUAAAAAAAAGnRkAAAAAABQAAAAABAAUAAAAAAAAAAAEBQAAAAAAAAAAAQAAFUAAAQFBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAABQAAAAABQAFAAQAAAAUAAAAAAEBASgzQZqCUEBAAUAVQUFAQAAAAAAAAAAAAAAAAQAAAAAAAAAAUAAAAAAAAAAAAAABAAAAAAUAAAAAAAAAAAAAAAAAAAAABAURAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAUAAAAAAAAG3RkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAABQAAAAABQAFAAAQAAAAUAAAAAAEBKCUGaDNQSggIAACiqCgAqAAAAAAAAAAAAAAAAAAAAAACAoIAAAAKAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAACgAAAAAAAAA26MgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAKAAAAAAKAAoACAAAACgAAAAAAAgJQSgzQZqCUEBAAAUVQAVABQAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAUAAAAAAAAAAABAAUAAAAAEAAABQAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAUAAEAABQAAAbdGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAFAUAABAAAABQAAAAAAAQEoJQZoM1BKDIAAAKKoCCgAAoAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAKAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACgAAAAgAAAAAKDboyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAgAKCAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACgAAAAAAACgKAAAgAAAoAAAAAAAAICUGaCUGaglBkAAAFFAVBQAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAFAAAAAAAAAAAAAAAAAQAAAAAFAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAB6OjIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACgAAAAAAACgKAAAAgAAAoAAAAAAAAICUGaCVBmglBkAAAFFUBABQAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAFAAAAAAAAAAAAAAAAQAAAAAAFAAAAAAAAAAAAAAAAABAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAABQbdGQAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAEBQQAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAUAAAAAAAUABQAAEAAAFAAAAAAAAABASgzQSoM0EoMgAAAoqoAKAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgoAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAIAAAAAgAAAAAAAoAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADboyAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAoAAAAAAAAoCgAAAIAAAKAAAAAAAAACAlBmglQZoJQQEABQBVQAUAAAAFAAAAAAAAAAAAAAAABAAAUAAAAAAAAAAVAAAAAAAAAAAAAAAQAAAAAAFAAAAAAAAAAAAAAAABAAAAAAEAAAAAAFAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbdGQAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAABQAQAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAUABQAAAEAAFAAAAAAAAAABASgzQSoM0EoICAAoAqoAKAAAACgAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAAKgAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAgAAAAAACAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANujIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAACgKAAAAgAAAoAAAAAKAACAAgJQZoJUGaCUEBAAUUBUFAAAAAABQAAAAAAAAAAAAAAAQAAAFAAAAAAAAAAFAQAAAAAAAAAAAAEAAAAAABQAAAAAAAAAAAAAAAQAAAAAAABAAAAABQAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHo6MgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAACAAAAACAAAoAAIAAAAAooAIACgAAAgKCAAAAAAAAAAAAAAAKAAAAAAAAAKAAoAAACAACgAAAAAoAAAIACAlBmglQZoJQQEABRQFQUAAFAAAAAAAAAAAAAAAAAAABAAAAUAAAAAAAAAAAVAAAAAAAAAAAAAAQAAAAFAAAAAABAAAAAAAAAAAAAAAAAAEAAAAAFAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAejoyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAIAooAAAAAAAAAAAAICggAAAAAAAAAAAACgAAAAAAAAACgKAAAAgAAAoAAAAAKAAACAAgJQZoJUGaCUEBAAUUBUFAABQAAAAAAAAAUAAAAEAAAAABAAAUAAAAAAAAAAAVAAAAAAAAAAAAAAAQAAAFAAAAABAAAAAAAAAAAAAAAAAAAEAAAAAFAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAejoyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAACAoIAAAAAAAAAAAoAAAAAAAAAAoACgAAAIAAKAAAAAACgAAAgAICUGaDNQSgzQAQAFFAVBQAUAAAAAAAAAFAAAAAABAAAAAQAFAAAAAAAAAAAAAFQAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAQAAAAUAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6OjIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAKAAAAAAAAAAAAKAoAAACAAACgAAAAAAoAAAIACAlBmoM0EoMggAAKAiqCgAoAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAACgIAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAIAAAAAAKAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9HRkAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAFAAAAAAAAAAAAFAAUAAABAABQAAAAAAAUAAAEABAZoJUGaCUGQQAAFARVBQAUAAAAAAAFAAAAAAAAAABAAAAAAAAAAAAAAAAAABQAEAAAABQAQAAAAAAAAAAAAEAAAAAAAAAAAAAAAABQAQABAAAAAABQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHo6MgAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACiAAAAAAAAAAAAAAoCgAAAIAAAKAAAAAAACgAAAgAIDNBKgzQZoICAAAoCKoKACgAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAKAAgAKAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAKAAACAAAIAAAAAKAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9HRkAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUQFBAUEAAAAAAAAABQFAAAAAQAAUAAAAAAAAFAAABAAQGaCVBmgzQQEAABQBVQUAFAAAAAABQAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAUAAAAAAAAAAABAAAAAAAAAQAAAAAAAAAAAAFAAAAABAAAAEAAAAFAAABAAAAAAAAAQAAAFAAAAAAAAAAAAAAAAABAAeroyAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAIAAAAAAAACgKAAAAAgAoAAAAAAAAKAAAACAAgM0EqDNBmggIAACgCqgoAKAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAoAACAAAAoAAAAAAIAAAAACAAAAAAAAAAAAoAAAAAAAIAAAgAAAAoAAIAAAAAAAACAAAAAoAAAAAAAAAAAAAAIAAAAD2dGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAEAAAAABQAFAAAAAQAAUAAAAAAAAFAAAABAASgzQSoM0GaCAgAAKCiiCgAoAAAKAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAACgIAAAAAACgAAAAgAAAAAIAAAAAAAAACgAAAAAAAAAgAAAACAAAAAoAAAIAAICgAgAAAAAKAAAAAAAAAAACAAAAAAA9nRkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAABAAAUBQAAAAAEAFAAAAAAAAABQAAAAQAEBmglQZoM0EABAAUVQEFABQAAAUAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABBQAAAAAAFAAABAAAAAAQAAAAAAAAFAAAAAAAAAABAAAAAAAAAAAAAQABAAAAAAAAABQAAAAAAAAAAQAAAAAAAAHs6MgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACgAAAAAIAKAAAAAAAACgAAAAAgAIDNBKgzQZoIACAoAqgIKACgAAoAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACAACgAAAAAAAKACAAAAAAgAAAAAAAKAAAAAAAAAAACAAAAAAAAAAAgAAACAAAACggAAAKAAAAAAAAAACAAAAAAAAgPd0ZAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAUAAAAABABQAAAAAAAAAUAAAAAEABKDNBKgzQZoIACAoAqgIKACgAAoAAAAAAAAAAAAAAAAAAIAACgAAAAAgAAAAAAAAAIAAKAAAAAAAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAACAAAAAAAAgAAAAAACAAACgAgAAKAAAAAAAAAACAAAAAAAgAPd0ZAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAABABQAAAAAAAAAUAAAAAAEBKDNBKgzQZoIAAAAKoKgAAoAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAgAAIAAACgIAAAKAACAAoAAAAAAAAAAAIAAAAACAA93RkAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAQAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAEAFAAAAAAAAABQAAAAAAQAEoM1BKDNBmggAAAAqgqAACgAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAIAACgAAAAAgAAAAAIAACAAAAAAqAACgAAAAAAAAAAAAAAAAAgAAAAAIAD3dGQAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAEAAFAAAAAAAAABQAAAAAAQAEoM1BmglBmggAAAqgAqACgAAAAAoAAAAAAAAAAAAAAIACgAAAAAAAAAgAAAAAAAAIAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAKAAAACAAAAAAgAAIAAAACoAAAKAAAAAAAAAAAAAAAAACAAAAAgAAPd0ZAAAAAAAAAAAAAAAAUAAAAAAAABAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAABABQAAAAAAAAAUAAAAAAAEABKDNQZoJQZoIAAAKoCCgAoAAAAAAKAAAAAAAAAAAACAAAAoAAAAAAAAIAAAAAAAACAAAAACgAAAAAAAAAAAAAAAAAAAAAAAIAAAACgAAAAgAAAAAIAACAAAAIKAACgAAAAAAAAAAAAAAAAAAgAAAAIAAD3dGQAFAAAABAUAAAAAAAAAAAAAABAAAAUEABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAEAAFAAAAAAAAABQAAAAAAAQAGaCVBmglBmggAAAqgIKACgAAAAAAoAAAAAAAAAAAAIAAAACgAAAAAAAgAAAAAAAAAIAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAgAAAKAAgKCAogCAoICiAAAAAAAIAAKAAAAAAAAAAAAAAAAAACAAAAAgAAAOhtkAAUAAAAAAAAAAAAAAAAAAAEAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAEAFAAAAAAAABQAAAAAAAAQAGaCVBmglBkEAAAFUBBQAUAAAAAAAFAAAAAAAAAAAABAAAAAUAAAAAAEAAAAAAAAAABAAABQAAAAAAAAAAAAAAAAAAAAAAAAEAABQAAEAAAEAAAAABFAAABAAABQAAAAAAAAAAAAAAAAAAQAAAAEAAABAdLbIAAAAAoAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAIAKAAAAAAAAACgAAAAAAAAgAM1BKDNBKDIIAAAKoCCgAoAAAICgAAAoAAAAAAAAAAAIAAAACgAAAAAAAgAAAAAAAAAIAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAACAAAAoAAAAAAAAAAAAAAAIAAAAAAAACAAAAgAOltkAAAAAAAAUAAAAAAAAEAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAEFAAAAAAAAABQAAAAAAAAAQAGaglBmglBkEAAAFUBBQUAAAEAABQAAUAAAAAAAAAAAAEAABQAAAAAAAAQAAAAAAAAAEAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAABRAEAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAABAAAAQABR0tMgAAAAAAAAAAACgAgKCAAAAAAAAAAAAAAoIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAIAKAAAAAAAACgAAAAAAAAAAgAM1BKDNBmggIAAAKoCCgoAAAIAACgAAoAAAAAAAAAAAAAIACgAAAAAAAAgAAAAAAAAAIAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICgCAAIAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAACAAAgAACjpaZAAAAAAAAAAAAAAAAAAAAAUAAEAAAAAAAAAAUAAAEAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAEFAAAAAAAAABQAAAAAAAAAAQAGaglBmgzQQEAAAFUBBQAUAAEAABQAAUAAAAAAAAAAAAAAEBQAAAAAAAAQAAAAAAAAAEAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAEABQBAAAAEAAAAFBAAAAAAAAUAAAEAAAABAAAAAAAAAAAAQAAAAEAB0tsgAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAKCAAAAoAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAIKAAAAAAAACgAAAAAAAAAAAgIglBKDNBmggIAAAKAqACgAAAAAAoAAAKAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAgAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAIAAAKAAAAAAAAAAAAAACAAAAgAAAAAAAAAAAAIAAAAADobZAAAAAAAAAAAAAAUAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAABBQAAAAAAAUAAAAAAAAAAAAEAQZoJQZoM0EBAAQAFFEFABQAAAAAAUAAFAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAQAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAEAAAFAAAAAAAAAAAAAAABAAAAQAAAAAAAAAAAAAAEAAB0NsgAAAAAAAAAAKAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAgoAAAAAAAAKAAAAAAAAAAAAACIM0EoM0GaCAgIAAAKqACgAAAoAAAKAACgAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAIAAAAAKAAAAAAAAAAAAAAAAAAAAAIACggAAKIAAACAoCAACgAAAAAAAAAAAAAAAgAAAIAAAAAAAAAAAAAAAAAD3bZAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAABQAAAQBQAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAEFAAAAAAABQAAAAAAAAAAAAAARBmglBmgzQQEBAAAABRBQAUAAFAABQAAAUAAEBQAAAAAAAAAAAAQFAAAAAAAABAAAAAAAAQAAAAAUAAAAAAAAABAAAAAUAAAABAAAAAABFAAAEBQEAAFAAAAAABAAUAAAAAAEAAAAABAAAAAAAAUAAAAAEAB0NsgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIoAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAKgAAAAAAAAoAAAAAAAAAAKCAAAiDNBKDNBKDIICAAgAKKAIKACgAAoAKAAAAAAAAACgAAAAAAAAAAgKAAAAAAAAAACAAAAAAgAAAAAAoAAAAAACAAAAAAAAAAoAACAAAAACKAAAAACAACgAAAAAgAAAAKAAAACAAAAAAAAgAAAAAKAAAAAAAD3bZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBQAAAAAAAUAAAAAAAAAAAFBAAARBmglBmglBmggIACAAAoogoAKAACgAoAAAAAAAAAAKAAAAAAAAACAAoAAAAAAAAAAIAAAAACAAAAACgAAAAAAIAAAAAAAAAAACoCggAAAAgCgAAAgAAAoAAAAIAAAAAAAAAAAAAAAAAAACAAAAAoAAAAAAAPdtkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAVAAAAAAAABQAAAAAAAAAAUAAEABEGaCUGaCUGaCAgAIAAAKqCgAoAKAACgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAIAAAAACAAAACgAAAAAIAAAAAAAAAAAAACgIAAAAAIAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAIAAACgAAAAAAA922QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQQAAAAAFAABAAAAUAAAAAAAAAAAAAAAAAAAVAAAAAAAABQAAAAAAAAAAAUAAEABEGaCUGaCUGaCAgIAAAAKqCgAoAKAACgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACAACgAAAAAIAAAAAAAAAAAAAAACoACgAggAAAAAAAKAAAACAAAAAAAAAAAAAAAAAAAAAAgAAAAKAAAAAD3bZAAAAAAAAAAAAAUAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAEFAAAAAAAAABQAAAAAAAAAAUAAAEABEGaCUGaDNBKCAgIAAAAKqCgAoAKACgAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAIAAAAAAACACgAAAAAIAAAAAAAAAAAAAAAAAgoAAAIAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAA922QAAAAAAAAFAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAABABQAAAAAAAAAAUAAAAAAAAAAFAAABAARBmglBmgzQSggICAAAAAqKoAKACgAoAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACAAAAAAAAgoAAAAAACAAAAAAAAAAAAAAAAAAqACAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAA6G2QAAAAAFAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAABAABQAAAAAAAAAAUAAAAAAAAAAFAAAABAEEoM0EoM0GaCUEBAQAAAAFFVABQAUAFAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAQAAAAAAEFAAAAAAAQAAAAAAAAAAAAAAAAABAAAAAAAAABQAAAAQAAAAEAABQAAAAAAAAAAAAAAQAAAAAAAAAHQ2yAoAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoIAACggAAAAoAAAAAAAAAAAAKAAAAAAAAAACgAAAAgCCUGaDNBKDNBKCAgIAAACgCqgAoKAACgAAAAAAAAAAAAAAAAAAAAoAAAAIAACgAAAAAAAAAAgAAAAAoCAAAAAAAgAAAAAAAAAAAAAAAAACAAAAAAAAACgAAAAgAAAAIAAACgAAAAAAAAAAAAAgAAAAAAAAIDqbZAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAABQAAAAAAAAAAUAAAAAEBEEoJQZoM0EoM0EABAAAUAVUAFABQAUAAAAAAAAAAAAAAAAAAAAAAFAABAAAAAUAAAAAAAAAAEAAAAFAQAAAAAAAEBQAAAAQAAAAAAAAAAABAAAAAAAAABQAAQAAAAAEAAAABQAAAAAAAAAAAAAQAAAAEAAAB1NsgAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAoAAAAAAAAAAKAAAAACAiCUEoM0GaDNBAQAEBQABVBUAFAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAEAAAFAQAAAAAAAAAAAAAAAAEAAAAAAAAQAAAAAAAAAAAAAAAAAAAQAAAAAFAAAAAAAAAAAAABAAAAQAAAHU2yAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACgAAAAAAAAAoAAAAAAIggJQZoM0EoM0EBAAAAAUVUAFABQAAAAAAAAUAAAEAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAQAUAABAAAAAAAAAAAAAAAAAQAAAAAAABAAAAAAAAAAAAAAAAAAABAAAAAAUAAAAAAAAAAAAAEAABAAAAdTbIAAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAoAAAAAAAAAKAAAAAAACIICUGaDNBmglBkAAAAFFVBQAUAAFAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAEAFAAAAQAAAAAAAAAAAAAAAAEAAAAAAQAAAAAAAAAAAAAAAAAAAAAQAAAAAFAAAAAAAAAAAABAAAQAAAHU2yAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAKAAAAAAAACgAAAAAAAgCCUGaCUGaDNBmggAICgAqKoKCgAoAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAoAAAACAAAAAAAAAAICgAAAgigAAAgKCAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAIAACAAA6m2QFAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAUAAAAAAAEQASgzQZoM0GaCUEBAAUFFEGgUAFAAAAAAAAAAAAAAAAABAAAAAAQFAAAAAAAAAAAAAAAAABQAAAAAQAUAAAAABAAAAAAAAAEABQQAFBBFABAAAAAAAAAAAAAAAAABQAAQAAAAEAAAAABQAAAAAAAAAAAAQAAEAAB1tsgAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACgAAAAAAAAiADNBKDNBmgzQSggIACgoqoKCgoAAAAAAAAAAAAAAAAAAAIAAACAAoAAAAAAAAAAAAAAAAAAKAAAACACgACAoAAAgAAAAAAAAAAACAoIIoAAAAIAAAAAAAAAAAAAAKAAACAAAAAgAAAAKAAAAAAAAAAAACAAAAgAOttkAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAUAAAAAAAAEQAZoJQZoM0GaCAgIACgoqoKCgoAAKCAAAAAAAAAAAAAAAgAAAAIACgAAAAAAAAAAAAAAAAAAAoAAAIKICggAKAAAAIAAAAAAAAAAAAgKIgKAAAACAAAAAAAAAAAAACgAAAgAAAAAIAAACgAAAAAAAAAAAAgAAAIADrbZAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAFAAAAAAAABEAGaCUGaDNBmggICAAoKKqCgoKAACgAgAAAAAAAAAAAAAIAAAACAAoAAAAAAAAAAAAAAAAAAAAKAAggooICggKAAAAAIAAAAAAAAAAAACAAAAAAAIAAAAAAAAAAAAKAAACAAAAAAgAAAKAAAAAAAAAAACAAAAgAKDqbZBQAAAAAQAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAFAAAAAAAAQQAGaCUGaDNBmgyACAAoKiqCgoKAACgAAgAAAAAAAAAAAAIAAAACAAAoAAAAAAAAAAAAAAAAAAAAAACKKACAoAAAAAAgAAAAAAAAAAAAAIAAAAAAAgAAAAAAAAAAAoAAAAIAAAAACAAAoAAAAAAAAAAIAAACAAAoOptAAAFBAAABAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAUAAAAAAAABBAQEoM0GaDNBKDIAIACiqgsBQUFAABQAAAQAAAAAAAAAAAEAAAABAAAUAAAAAAAAAAAAAAAAAAAAAABAFAAFAAAAAAAEAAAAAAAAAAAABAAAAAAQAFQAAAAAAAAAAUAAAAEAAAAABAAAUAAAAAAAAAEAAABFABABQdbaAAAAAIAAIAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACgAAAAAAAAIICCpRGaDNBmglBkAEABRVQWAoKCgAAoAAAAIAAAAAAAAAACAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAgCgCgAAAAAAAAACAAAAAAAAAAAAAgAAAAIAAAgoAAAAAAAAAKAAACAAAAAgAAAKAAAAAAACAAAAAKIAAgAA7G0AAAAAAQAAQAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAFAAAAAAAAAQQEoqURmgzQZoM0EBAAAUVUFgKCgoAKAAAAAACAAAAAAAAAAgAAAAIAAAACgAAAAAAAAAAAAAAAAAAAAICqAICgAAAAAAAACAAAAAAAAAAAAAgAAAAIAAgAoAAAAAAAAKAACAAAAAAgAAAKAAAAAACAAAAAAKIAAAgA7G0AAAAAAQAAQAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAFAAAAAAAAAQQEoqURmgzQZoM0EBAAAUVUFgKCgoAKAAAAAACAAAAAAAAAAgAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAIoAoAAAAAAAAAAAAgAAAAAAAAAAAIAAAAACAAAqAAAAAAAAAAAAAAAAACAAAAoAAAAAIAAAAAAAogACAADsbQAAAAAABABAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAUAAAAAAAABBBUojNBmgzQSgzQQEAABRVBUFgKCgAoAAAAAAIAAAAAAAACAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAgAAAAAAAAAAAIAAAAACAAAAIKAAAAAAAAAAAAAACAAAoAAAAAAIAAAAAAACKACAADsbQAAAAAAABABAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAUAAAAAAAAAEQAZoJQZoM0GaCUEBAAAUUBpBQUFABQAAAAAAQAAAAAAAEAAAAAABAAAAAAUAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAABAAAAAAAAAAAAQAAAAAAEAQFBBQAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAEAAAB2NoAAAAAAAAAgAgAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAKAAAAAAAAAggICUGaDNBmglBmggAAAAqg1EFgKCgAoAAAAAAAIAAAAACAAAAAAAAAgAAAKAAAAAAAAAAAAAAACggAAACKKAAAAAAAAAAAAAAAIAAAAAAAAAAAACAAAAAAgAAACCgAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAOttAAAAAAAAAAAEEAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAABQAAAAAAAAEEBKCUGaDNBmgzQQEABAUAVUGgWAoKACgAAAAAAAgAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAIAAAAACAAAIKAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAA620EBQAAAAAAAAAAAABBAAUEAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAABQAAAAAAAEAEBKDNBmgzQZoJQZABAAUAVUGoCwFBQAUAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAEAAAAAAAAAAAABAAAAAAQAAFAQAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAHW0goAAAAAAAAAAAAAAAAAgAAgAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAKAAAAAAAAgAgJQZoM0GaDNBmggIAACgCqg1AWAoKACgAAAAAAAgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAOtpABQAAAAAAAAAAAAAAAABAAABAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAUAAAAAAABBAAZoJQYoM0EoM0EBAAAUAVYg1AWAoKACgAAAAAAAAgAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAOxpEAAAUAAAAAAAAAAAAAAAAAQAAQAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAFAAAAAAAAAQQEBKDNBmgzQZoJQQEAABRQFiDUBYCgoAKAAAAAAAACAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAA7GkAAQABQAAAAAAAAAAAAAAAABABAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAUAAAAAAAABBAQEoM0GaDNBmggICAAAoAqxBqAsBQUAFAAAAAAAAABAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAQAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAdjSAAAIAAoAAAAAAAAAAAAAAAAAggAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAKAAAAAAAAAggJQSgzQZoM0GaDIAIAACgCtRBYCgoKACgAAAAAAAAAgAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAICiICgAAAAAAACAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAIAAAAAAAAAAAADsaQAAABAAFAAAAAAAAAAAAAAAAAEEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAABQAAAAAAAAEEBKDNBKDFBmglBkAEAABQBWkFgKCgoKAAAAAAAAAACAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAgAAAgCgAAAAAAACAAAAAAAAAAAAgAACACgAAAAAAAAAAAAAAAgAAAAAAAAAAAOxpAAAAAEAUAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAAAAAAAAQAQEoM0GaDNBmglBkAEAABQUUQaBYCgoKAAAAAAAAAAACAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAgAAKAAAIAAAAAAAACAAAAAAAAAgAAAACACgAAAAAAAAAAAAAAgAAAAAAAAAAAOxpAAAAAAEAUAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAFAAAAAAAAAQAQEoM0GaDNBmgzQQAEAABQUUQagLAUFBQAAAAAAAAAAAQAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAQAAAAFAAAAAAAAAQAAAAAAAFAAAEAAAAAAAABAAAAAAQAAAABAABQAAAAAAAAAAAAAAQAAAAAFAAAAB1tIAAAAAAAAigAAAAAAAAAAAAAAAAAAAAIAgAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAoAAAAAAAAAIgAzQSgzQZoM0GaCAAgAKACiiDUBYCgoKAAAAAAAAAAACAAAAAAAAgAAAAAAIACgAAAAAAAAAAACgAAAAAAIAAAAAAACgAAAAAAAIAAAAAACgAAAACAAAAAAAAAgAAAAIAAAAAAgAAoAAAAAAAAAAAAAAIAACgAAAAAA62kAAAAAAAAAFAEAAAAAAAAAAAAAAAAAAAAEQAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAUAAAAAAAAAEQAZoM0GaCUGaDIIAAAAAKqADUBYCgoKAAAAAAAAAAACAAAAAAAAAgAAAAIAACgAAAAAAAAACgAAAAAIAAAAAAAAAAAACgAAAAAAAIAAAACggKAAAAIAAAAAAACAAAAAgAAAAACAACgAAAAAAAAAAAAAAAAAAAAAAAA62kAAAAAAAAAAFAAAEAAAAAAAAAAAAAAAAAAEQAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAUAAAAAAAAAEQQEoM0GaDNBKDIIAAAAAKqCgsBQUFBQAAAAAAAAAAAQAAAAAAAAEAAAAAAAAAAAAAAAAAFAAAAAAQAAAAAAAAAAAAAAAAFAAAAQAAAAAAAFBAUAAAQAAAAAAAEAAAABAAAAAAEAAAFAAAAAAAAAAAAAAAAAAAAAAB1tIAAAAAAAAAAAKAAAAIAAAAAAAAAAAAAAAAAIgAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAoAAAAAAAAAAIgAzQSgzQZoM0GQAQAAABFUFBQUFBQUAAAAAAAAAAAEAAAAAAAAABAAAAAAAAAAAAAAABQAAAAAEAAAAAAABAUAAAAAAAAAFAAQAAAAAAAAAAAAFAAAEAAAAAABAAAAAQAAAAABAAABQAAAAAAAAAAAAAAAAAAAAAdbSAAAAAAAAAAAAACgAACAAAAAAAAAAAAAAAAggAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAKAAAAAAAAAAAggM0EoM0GaDNBAQEAAAFEFBQWAoKCgoAAAAAAAAAAAAIAAAAAAAAACAAAAAAAAAAAAAACgAAAAIAAAAAAACAAAAoAAAAAAAAKgAAAAAgAAAAKAAoAAAAAgAAAAAAIAAAACAAAAAAIAAAKAAAAAAAAAAAAAAAAAAAADraQAAAAAAAAAAAAAAAUEBREBQAAAAAAAAAAAEAQAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAUAAAAAAAAAABBASgzQZoM0GaCUEBAAABVQAUFBQUFBQAAAAAAAAAAAAQAAAAAAAAAAEAAAAAAAAAAAAFAAAAQAAAAAAAAAEAAABQAAAAAAAAEFAAAABAAAAAAUABQAAABAAAAAAAEEAUAAAQAAAABAAAABQAAAAAAAAAAAAAAAAAAAdjSIAAAAAAAAAAAAAAAAAACKAAAAAAAAAAAAgCAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACgAAAAAAAAAAAIICUGaDNBmgzQSggIAAAKqACgoKCgoKAAAAAAAAAAAACAAAAAAAAAAAAAgAAAAAAAAAAoAACAAAAAAAAAAgAAAAKAAAAAAAAAgAoAAIAAAAAAACgAKAAAIAAAAAAAggACgAACAAAAAIAAAKAAAAAAAAAAAAAAAAAAADsaQBAAAAAAAAAAAAAAAAAAQBQAAAAAAAAAEAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAUAAAAAAAAAAABBASgzQZoM0GaCUEBAAABVQAUFBoFABQAAAAAAAAAAAQAAAAAAAAAAAAAAAEAAAAAAAFAAAQAAAAAAAAAAEAAAABQAAAAAAAAEAAAAAAAAAAAAAABQAAAAAAAAAAQARQQFAAAEAAAAQAAAUAAAAAAAAAAAAAAAAAAAHY0gACAAAAAAAAAAAAAAAAAgCgAAAAAAAAAIAgAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAoAAAAAAAAAAACCCpQZojNBmgzQSggIAAAKqACgoNAoAKAAAAAAAAAAACAAAAAAAAAAAAAAAAgAAAAAAAoCAAAAAAAAAAAAAAgAAKAAAAAAAAAAgAAAAAAAAAAAAAAKAAAAAAAAAAACCAKAAAAAIAAAgAoAAAAAAAAAAAAAAAAAAAAAOxpAAAEAAAAAAAAAAAAAAAABFAAAAAAAAAQBAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAABQAAAAAAAAAAAEEFSgzQZojNBmglBAQAAAVUAFBQaBQAUAAAAAAAAAAAEAAAAAAAAAAAAAAAABAAAAABQAEAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAFAAAAAAAAAAAAAAAEQFAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAB2NIAAAAgAAAAAAAAAAAAAAAIoAAAAAAAACAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAKAAAAAAAAAAAAggqUGaDNEZoM0EoICAAACqgAoKDQKACgAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAKAAgAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAADsaQAAAAAABAAAAAAAAAAAAQBQAAAAAAAAEAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAUAAAAAAAAAABABBUoM0GaIzQZoJQQEAAFAVABQUGgUAFAAAAAAAAAABAAAAAAAAAAAAAAAAAAQAAAAUAABAAAAAQAFAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAFAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAdjSAAAAAAAAIAAAAAAAAAACKAAAAAAAAAgACAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACgAAAAAAAAAAAIAIKlBmgzQZojNBKCAgAAoCoAKCg0CgAoAAAAAAAAAAAIAAAAAAAAAAAAAAAAACACgAAAAIAAACAAAAoAAAAAAAAAAAAAAAAAACAoIAAAAAAACgAACAAAoAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAA7GkAAAAAAAAQAAAAAAAAAAEUAAAAAAABAAAEAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAFAAAAAAAAAAAAQBUBKDNBmgzRGaCUEFQQFAAEFBQagKCgAoAAAAAAAAAAAIAAAAAAAAAAAAAAAAKAgAAAAAAIAAACAAAAoAAAAAAAAAAAAAAAAAAACAoIAAAAAAACgACAAAAoAAAAAAAAIAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAA7GkAAAAAAAAQAAAAAAAAAAEUAAAAAAABAUEAQAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAAAAAAAAAABABBUoM0GaDNBmiJQQVAAAAAVBQagLAUAFAAAAAAAAAABAAAAAAAAAAAAAAAAABQEAAAAAABAAAAQAAFAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAFAAEAAAABQAAAAQAAAAAAAAAAAAABBVABBAAAAAAAAAAAAAAAAAAAAdjSAAAAAAAAIAAAAAAAAACAKAAAAAAAAAgACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAACgAAAAAAAAAAAIoCAlBmgzQZoM0EoICAAAAAqCwGgUFABQAAAAAAAAAAQAAAAAAAAAAAAAAAAAUABAAAAAAQAAAAAAAAAAAAAAAFAAABAAAAAAEBQQFBAAAAAAAUAAAAQAAAAAAAAAAAAAAAAAAAAAAAFAAQAQAAAAAAAAAAAAAAAAAAHY0gAAAAAACAAAAAAAAAAAigAAAAAAAAAIAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAoAAAAAAAAAAACKAgJQZoM0GaDNBKCAgAAAKAgoNQFBQAUAUAAAAEAAAAQAAAAAAAAAAAAAAAAAUAABAAAAAAQAAAAAAAAAAAAAAFAAABAAAAAAAAAEAAABQQAAAFAAAAAAAAAEAAAAAAAAAAAAAAAAABUBQAQQAAAAAAAAAAAAAAAAAAHY0gAAAAACAAAAAAAAAAAAigAAAAAAAAAIAAgAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAoAAAAAAAAAAACKAgJQZoM0GaDNBKCAgAAAKAg0CwFBQAUUAAAAAAEAAQAAAAAAAAAAAAAAAAAVBAVQQAAAAAAEAAAAAAAAAAAAAABQAAAQAAAAABAUEBQAAAAAAQFAAAAAAABAUEEUAAAAAAAAAAAAAAAAAUBAAABAAAAAAAAAAAAAAAAAAdjSAAAAAAIAAAAAAAAAAACKAAAAAAAAAAgKCAIAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAKAAAAAAAAAAAAigICUGaDNBmgzQZoIAAAACgINAoKCgCqAAAAAAAAAIgAAAAAAAAAAAAAAoAACAAoIAAAAAACAAAAAAAAAAAAAAAAoAAIAAAAAAAAAgAKAAAAAAAAAAAAACAAACKAAAAAAAAAAAAAAAKgKCAAAACAAAAAAAAAAAAAAAAA7GkAAAAAQAAAAAAAAAAAAEUAAAAAAAAAABAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAFAAAAAAAAAAAQBQEBKDNBmgzQZoM0EAAAABQEGoCgoKKAoAAAAAAAAIAIAAAAAAAAAAAAAACgAAAAAIAAAAAACAAAAAAAAAAAAAAAAoIAAAAAAAgKACAAoAAAAAAAAAAAIAAAAAIAoAAAAAAAAAAAAAIKAoIAAAAAIAAAAAAAAAAAAAAADsaQAAAABAAAAAAAAAAAAFEAAAAAAAAAAAAEAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAAAAAAAAABAFAQGaCUGaDNBmgyCAAAAAqADUBQUFFAUAAAAAAAAEAAAEBQQAFABAUEBQAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAEBQAAAAAAAAAAAAQAAAAAAFEAAAAAAAAAAAAAQAUBQQAAAAAAAAQAAAAAAAAAAAAHY0gAAACAAAAAAAAAAAAAigAAAAAAAAAAAAIAgAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAoAAAAAAAAAACAKAgM0EoMUGaCUGQQAAAAFQUFBQUFFAUAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBQAAEAAAAAAAEUAAAAAAAAAAAAEAFAAAAAAAAAAABAAAAAAAAAAAAdjSAAAAIAAAAAAAAAAAACKAAAAAAAAAAAAAAiAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAACgAAAAAAAAAAAIAoCAzQZoM0GaCUGQQAAAAFQUFBYCgooCgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAIAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAKAgAAAAAAKAAAACAoAgAAAAACACgAAAAAAAAAAAAgAAAAAAAAAAOxpAAAEAAAAAAAAAAAAAAUQAAAAAAAAAAAAAEEAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAABQAAAAAAAAAAAEAUBAZoM0GaDNBKDIIAAAACoKCgoKKoAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAqAAAAAAAAoICggAAKAIAAAAgKCACgAAAAAAAAAAAgAAAAAAAAAAOxpAAAEAAAAAAAAAAAAAAUQAAAAAAAAAAAAAEEAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAABQAAAAAAAAAAEAUABKDNBmgzQZoJQZABAAAAVBQUFBRVABQAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAFQAAAAAAAAFBAAAUAAAQAAABAAABQAAAAAAAAAAAQAAAAAAAAAHY0gAAACAAAAAAAAAAAAAKIAAAAAAAAAAAAACCAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAoAAAAAAAAAACAKAgFBmgzQZoM0EoMgAgAAAKgoLAUFFUAFAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAQAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAVAAAAAAAAAAAAAAUAQAAABAAAAAABQAAAAAAAQAAAAAAAAAAHY0gAAACAAAAAAAAAAAAAKIAAAAAAAAAAAAAIgAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAoAAAAAAAAAACAAKgJQSgzQZoM0GaCAgAAAAKgoLAUFFUAFAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAQAAAEAAAAAAAAAABQAAAAQAAAAAAAAAAAAAAAEAAAAAEBQAAABBQAAAAAAAAAAAFAAAEAAAQAAAAAAAAUAAAAAEAAAAAAAAAAB2NIAAAAgAAAAAAAAAAAACiAAAAAAAAAAAAACIAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAKAAAAAAAAAAAgACoCUEoM0GaDNBmggIAAAACoKCwFBRVABQAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAEAAABAAAQAFAAAABQAAAAAAQAAAAAAAAAAAAAEAAAABBAAFFAAAEFAAAAAAAAAAAAAUAAAQBAAAAAAAAAAABQAAQAAAAAAAAAAAHY0gAAACAAAAAAAAAAAAAigAAAAAAAAAAAAAIgAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAoAAAAAAAAAACAAKgJQZoM0GaDNBKCAgAICgAqCgsBQUVQAUAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAABAAAQAAEAAABQAAAUAAAAAAEAAAAAAAAAAAAAABAAAAQQABQBQABABQAAAAAAAAAAAAFAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAdjSAAAAIAAAAAAAAAAAAogAAAAAAAAAAAAAAiAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACgAAAAAAAAAAIoACAlBmgzQZoM0EoMgAgAAKCoKCwFBRVABQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAABAAAQAAAFAAABQAAAAAAQAAAAAAAAABAUAAAQAAAAEEBVEBQABABQAAAAAAAAAAAFAAAABABAAAAAAAAAAAAAAAAAAAAAAAAAdjSAAAAIAAAAAAAAAAACKAAAAAAAAAAAAAAgCAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACgAAAAAAAAAAAIoACAlBmgzQZoM0GaCAgAAAKCoLAWA0AKoAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAgAAAIAACAAAAoAAAKAAAAAACAAAAAAAAAAICgAACAAAAAACAoAAAgAoAAAAAAAAAAAACgAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAOxpAAAEAAAAAAAAAAAUAQAAAAAAAAAAAAAAQBAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAABQAAAAAAAAAABRAABAZoJQZoM0GaDNBAQAAAFBUFgLAaAFUAFAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAQAAQBBQAAEAABQAAAUAAAAAAEAAABAAAUAAAAABAABAFAAAAAAABAABQAAAAAAAAAAAAFBAUEAAAAEAAAAAAAAAAAAAAAAAAAAAAB2NIAAAgAAAAAAAAAACiAAAAAAAAAAAAAAACAAIAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAKIAAIDNBmgzQZoM0EoICAAAAoLEFgNAoKKAAoAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACAAACAIKAAAAAAAAAoAAAAAAIAACAAAAoAAAAAACAACAAKAAAAACAACgAAAAAAAAAAAAAAKCAAAAACAAAAAAAAAAAAAAAAAAAAAA7GkAAQAAAAAAAAAABQBAAAAAAAAAAAAAAABAAEAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAFEAEABmgzQZoM0GaCUGQAAAAUFiCwFgNAooACgAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAICggKgAAAAAAAAAKAAAAAACAAAgAAAAKAAAAAgKCAACAAKAAACAAACgAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAKCAAAAAAA7GkAQAAAAAAAAAAABRAAAAAAAAAAAAAAAABAAEAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAFEAEBKCUGaDNBmgzQZoIACAoAKCoLAWA0AKoAKAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAgAAAKAgAAAAAAAAKAAAAACAAAAgAAAAKAAAAgAKACAACAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAACgAAAgAAAAOxpAEAAAAAAAAAAAAUQAAAAAAAAAAAAAAAAAQABAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAABQAAAAAAAAABQBABASglBmgxQZoM0EoICAAAoKCxBYCgsBRVABQAAAAAAAAAAAAQAAAAAAAAAAAAAAAEAAAAEAABQAEAAAAAAABQAAAAAAQAAEAAAAABQAAAAAAEBQQAAQAAAAAAFAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAUAAAEAAAAB2NIgAAAAAAAAAAACgCAAAAAAAAAAAAAAAACAAAAIAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAKAIAICUGaDNBmgzQZoJQQEAABQAVBqAsBYCiqAACgAAAAAAAAAAAgAAAAAAAAAAAAAIAAAAIAAAACgAAIAAAAAACgAAAAAAgAAIAAAAACgAAAAAAIAAAAAAAAIAACgAAAAgAAKACAAAAoAAAAAAIAAAAAAAAAAAAACgAAAAgAAAOtpAAAAAAAAAAAABRAAAAAAAAAAAAAAAAABAAAAEAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAFAEAEBKDNBmgzQYoJQZABAAAAUFQWA1AWAoKKAAoAAAAAAAAAAAIAAAAAAAAAAAAACAAAAAACAAoAAACAAAAAAAAoAAAAAIAAACAAAAoAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAACgAAAAAgAAOtpAAAAAAAAAAAABRAAAAAAAAAAAAAAAAABAAAAEAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAFEAAEBmgzQZoM0GaDNBAQAAAAFBUFgNQFgKCigAKAAAAAAAAAAAACAAAAAAAAAAAAgAAgKCAAAAAAoAACAAAAAAAAAoAAAAIAAACAAAAoAAAAAAAAAAACAAAAAAAACAAAAAAAAAAAKACAAACggAAAAAAAAAAAAAAAKAAAAACAAA62kAAAAAAAAAAAAFEAAAAAAAAAAAAAAAAAEAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAUQAQEoJQZoM0GKDNBKCAgAAAAKCoLAagLAUFFAAUAAAAAAAAAAAAEAAAAAAAAAAABAABAUEAAAAAABQAEAAAAAAAAABQAAAQAAAAEABQAAAAAAAAAAAAEAAAAAAAEAAAAAAAAAAAUAAEAAAAAAAAAAAAAAAAAAAAAAFAAABAAAdbSAAAAAAAAAAAACiAAAAAAAAAAAAAAAAACAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAigICUGaDNBmgzQZoJQQEAAAABQVBYDUBYCgooACgAAAAAAAAAAAAAAgAAAAAAAAAIAAAAAAIAAAACgAAIAAAAAAAAACgAAgAAAAIACgAAAAAAAAAAAAAIAAAAAIAAAAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAOxpEAAAAAAAAAAAAUAQAAAAAAAAAAAAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAFAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAABRABAZoJQZoMUGaCUGQQAAAAAFBUFgNQFgKCigAKACAAAoAAAAAAAAAAAAAAIAAAAACAAAAACAoIAACgAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAgAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAoOtpEAAAAAAAAAAAAABFAAAAAAAAAAAAAAAQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAFAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAABQBBAQEoM0GaDNBmgzQQEAAAAABQVBYDUBYCgooACggAAAAKAAAAAAAAAAAAACAAAAAAgAAgAKCAoICgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAoOtpEAAAAAAAAAAAAAAUQAAAAAAAAAAAAAAQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAFAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAABQBBASglBmgzQYoJQZoICAAAAAAoKgsBqAsBQUUAAAAAAABQAAAAAAAAAAAAAAQAAAAEAAAEBQQFBAAAUAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAEAAAAAAAAUEAABQAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAUHU0gAAAAAAAAAAAAAAogAAAAAAAAAAAAAAgAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAACgIglBmgzQZoM0GaCAgIAAAACgIKDUBYCwFBRQAAAAAAAAFAAAAAAAAAAAAABAAAAAQAAAAAQFBAAAAUAAABAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAFAAAAAAQAAQAABQAQFAABAAUAAAAAEAAAAAAAAAAAAAAAAAAAEAABQAAAdbSAAAAAAAAAAAAAACiAAAAAAAAAAAAAACAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAoAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAKAiCUGaDNBmgzQZoICAgAAAAKAgoNQFgKCgooAAAAAAAACgAAAAAAAAAAAAAgAAAAIAAAICggAAAAKAAAAAgAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAgAAAAAAAACAAAoAAAAIAAAAAAAAAAAAAAAAAAIAAAACgAA62kAAAAAAAAAAAAAAFEAAAAAAAAAAAAAAEAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAFAQBBmgzQZoM0GaCUEBAQAAAAFBUFBYCwGgAUUAAAAAAAABQAAAAAAAAQAFAABAAAAAAQAAAAAAQAFAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAEAAAAABQAAAAAAAAAAQAAAAABAAAAAUAAAEAAAAAAAAAAAAAAAAAAEAAAAABQAdbSAAAAAAAAAAAACiAAAAAAAAAAAAAAAACAoIAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAKAgJUEoM0GaDNBmglBAQAEAABQAVBQWA1AUFAFAAAAAAAAAUAAAAAAAEAAAABQQAAAAAEAAAAAEABQFAABAAAAAQAAAAAAEABQAAAAAAAAAAAQAAAAAAFAAAAAAAAAAABAAAAEAAAAAAABQQAAAAAAAAAAAAAAAAAAAAQAAAAFAB1tIAAAAAAAAKAIAAAAAAAAAAAAAAAAAAIAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAKgJUEoM0GaDNBmglBAQAAAAABBQWA1AWAoKKAAoIAAAAAACgAAAAAAAgAAAAAAAAAAAIAAAAICgAAKAAACAAAAAAgAAAIAAAACgAAAAAAAAAAgAAAAKAAAAAAAAAAAAAACAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACgA62kAAAAAAFEAAAAAAAAAAAAAAAAAAAEAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAFQEqDNBKDFBmglBkAEAAAAABUFBYCwFgKCigKACAAAAAAAoAAAAAAIAAAAAAAAAAAAACAAAAAAAoAAAAIAAAAAACAAAAgAAAKAAAAAAAAAACAAAoAAAAAAAAAAAAAAAAAIAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAKADraQAAAAUQAAAAAAAAAAAAAAAAAAQAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAERUoM0GaDNBmglBkAEAAAABUAFBQUFBQUUBQAQAAAAAAAFAAAAABAAAAAAAAAAAAAAQAAAFEBQAAAAEAAAAAAABAAAAQQAAFAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAUAAAAEAAAAAAAAAAAAAAB1tIAAAKIAAAAAAAAAAAAAAAAAIAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACIqUGaDNBmgzQSgyAAAAAAgAAoKCgoKCigKACAAAAAAAAoAAAAAIAAAAIACgAAAAAAIAICgKAAICgIAAAAAAAAAACAAAggAAKAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIgAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAACAAA7GkAAFEAAAAAAAAAAAAAAAAAEAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAABEGaKlBmgzQZoM0EAAAAAQAAUAFBQUFFUAFAABAAAAAAAUAAAAAEAAAEAAAABQAAAAAEAABQAAAAQAAAAAAAAAAEAABABAAUABQAAAUEAAAAAAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAFAAAAAAAABAAAAAAAAAQAAAHY0gACKAAAAAAAAAAAAAAAAAgAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAgzRUoMUEoM0GQAQAAABBQAAUAFBQUVQAUAAEAAAAABQAAAAAAQAAEEAAAUAAAUAAEAQUEBVAAABAAAAAAAAAAAAAQAAEEABQAFAAABQAQAAAAAAAAAAAAAAAAAAAAAAAAEQAUAAAAAAAAAAAAAAAAAAAAAEAAAAAAABAAAAAdjSACiAAAAAAAAAAAAAAAACAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAgIglFZoM0GaCUGQAQAAFQAAAAUFABQUVQAUAAEAAAAABQAAAAAAQAARAAAAAUAAUAEAAQAAVQAAAQAAAAAAAAAAAAEAABBAAUBQAAAUAAAEAAAAAAAAAAAAAAAAAAAAAAABEAFAAAAAAAAAAAAAAAAAAAAABAAAAAAAQAAAAAH/2Q==", + skyBoxRight: "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAFA3PEY8MlBGQUZaVVBfeMiCeG5uePWvuZHI////////////////////////////////////////////////////2wBDAVVaWnhpeOuCguv/////////////////////////////////////////////////////////////////////////wAARCAgACAADAREAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAAECA//EABUQAQEAAAAAAAAAAAAAAAAAAAAB/8QAFwEBAQEBAAAAAAAAAAAAAAAAAAECA//EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhEDEQA/ADKgAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgCgACAAAACKCqKACggAICCIogAIAAAAAAAAAAAAAAIAAAAAACggKoAKDQKCgoAKAACgAAAKgACAAAAAAAAgAAAACgCAAAAAAAAgAAAAAAAIAAAAAAAACAAAAACAoAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAoAAgAAAAigAqigAAAgIIgIoAAgAAAAAAAAAAAAAgAAAAAAKAAoAKDQKCgoAKAACgAAAKgACAAAAAAAAgAAAACgCAAAAAAAAgAAAAAAIAAAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAOrk2AAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAKAAIAAAIoAKooAAAICCICKAAIAAAAAAAAAAAAAIAAAAACgAAKACgoNAoKACgAAoAAAgoAAgAAAAAAAIAAAAAoAgAAAAAAAIAAAAAACAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgCgACAAAACKCqAKAACAgiAKIAACAAAAAAAAAAAAACAAAAAoAACgAoKDQKCgAoAAKAAAIKAAIAAAAAAACAAAAAKAIAAAAAAACAAAAAAAgAAAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAKAAIAAAAIoCigoAAIACCIogAAIAAAAAAAAAAAAAIAAAACgAAKACgoNAoAKCgAAoAAAgoAAgAAAAAAAIAAAAoAAgAAAAAAAIAAAAAACAAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAoAAgAAAigAqgCgAAgIIgCiAAAgAAAAAAAAAAAAgAAAAKAAAoAKCg0CgAoKAACgAACCgACAAAAAAAAgAAACgACAAAAAAAAgAAAAAAIAAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAOrk2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAigACAAAACKCqAKAACAggCKIAACAAAAAAAAAAAACAAAAAoAACgAoKDQKACgoAAKAAAIKAAIAAAAAAACAAAAKAAIAAAAAACAAAAAAAAgAAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACKAAAIAAAIoAKooAAAICCIoAgAAIAAAAAAAAAAAIAAAACgAAKACgoNAoAKCgAAoAACoAAAgAAAAAAAIAAAAoAAgAAAAAAIAAAAAAACAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIoAAAgAAAigAqigAAAAgiAiiAAAgAAAAAAAAAAAgAAAKAAAAoAKCg0CgAoKAACgAAKgAACAAAAAAAAgAAACgACAAAAAAAgAAAAAAAIAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAOrk2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAigACAAAACKCqKACgAgIIgIoAgAAIAAAAAAAAAAAAIACgAAAKACgoNAoAKCgAAoAACoAAAgAAAAAAIAAAAAoAAgAAAAAAIAAAAAAACAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAigAACAAACKCgKKCgAAgIIiiAgAAIAAAAAAAAAAAAICgAgKAAoAKCgoNAAoKAACgAAKgAACAAAAAAAgAAAACgACAAAAAAAgAAAAAAAIAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAOrk2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAACAKAAIAAACiAKooKAAACCIDKgCAAgAAAAAAAAAAAAAAgAKAAoAKCgoNAAoKAACgAAKgAACAAAAAAAgAAAACgCAAAAAAAAgAAAAAAAIAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAOrk2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAACAKAAIAAACiAKCqKCgAgIIlBFEBAAQAAAAAAAAAAAAAAQFAAAUAFBQUGgAUFAABQAAFQAABAAAAAAAQAAAABQBAAAAAAAAQAAAAAAEAAAAAAAAABAAAAAAAAAAQAAAAAAAAAAAEAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAHVybAAAAAAAAAAAAAAAAAAAAAUAAAAAEAAAAAAAAAAAAAAAAAAAAAABQAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAEAAUAAQAAFAEUFUUFAABAZoiKICAAAgAAAAAAAAAAAAAgKAAAoAKCgoKCgoKAACgAAKgAACAAAAAAAgAAACgACAAAAAAAgAAAAAAAIAAAAAAAAACAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAOrk2AAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAIAoAAgAAAKIoKooKAACAlESgyoAgAIAAAAAAAAAAAAAICgAAKACgoKCgoKCgAAoAACgIAAgAAAAAAIAAAAoAAgAAAAAAIAAAAAAACAAAAAAAAAAgAAAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAACAAKAAIAACiKCgqigAAgJREoIogIACAAAAAAAAAAAAAAAAAAoAKCgoKCgoKAACgAAKAgACAAAAAAAgAAAACgCAAAAAAAgAAAAAAAIAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAOrk2AAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAIAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAIAoAAgAAKAIoKooKAACCM0EUQEABAAAAAAAAAAAAAAAAAAUAFBQUFBQUFAABQAAFAQABAAAAAAAQAAAABQBAAAAAAAQAAAAAAEAAAAAAAAABAAAAAAAAAAAQAAAAAAAAAAEAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAHVybAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAEAAAAAAAAAAAAAAAAABQAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAUAQAAFAEUFUUFAABASiM0EUQAEAAAAAAAAAAAAAAAAABQAUFBQUFBQUAAFAAAUBAAEAAAAAABAAAAAFAEAAAAAABAAAAAAAQAAAAAAAAAEAAAAAAAAAABAAAAAAAAAAAQAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAdXJsAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAQAAAAAAAAAAAAAAAAFAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBQABAAUARQVRQUAAEBKIlBlQBAAQAAAAAAAAAAAAAAAAFABQUFBQUFBQAAUAABQEAAQAAAAAAEAAAAAUAQAAAAAAEAAAAAABAAAAAAAAAAQAAAAAAAAAAEAAAAAAAAAABAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAB1cmwAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAABAAAAAAAAAAAAAAAAUAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAABAFAAAEBQBFBQVQBQAQEoiUEUQEABAAAAAAAAAAAAAAAAAUAFBQUFBQUFAABQAAFAQABAAAAAAAQAAAABQBAAAAAAAQAAAAAAEAAAAAAAABAAAAAAAAAAAAQAAAAAAAAAAEAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAHVybAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAEAAAAAAAAAAAAAAABQAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAEAUAAAQAFAEUFUUFABAAZoiKICAAgAAAAAAAAAAAAAAAAKACgoKCgoKCgAAoAACgIAAgAAAAAAIAAAAAogAAAAAAAIAAAAAACAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAKAACAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAIAoAAgAKAIoKooKAACAgjNBFEAABAAAAAAAAAAAAAAAAUAFBQUFBQUFAABQAAFAQABAAAAAAAQAAAABRAAAAAAAQAAAAAAAEAAAAAAAABAAAAAAAAAAAAQAAAAAAAAAAEAAAAAAAAAAAABAUAEAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAdXJsAAAAAAAAAAABQAAAQAAAAAAAAAAAFAAAAAABAAAAAAAAAAAAAAAUAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAFAAAEBQBFBQVQBQAQEESgiiAgAIAAAAAAAAAAAAAAACgAoKCgoKCgoAAKAAAoCAAIAAAAACAAAAAAKIAAAAAACAAAAAAAAgAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAA6uTYAAAAAAAAAAAACgAAgAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACKAAAICgACKCqKAAACAgiKICAAgAAAAAAAAAAAAAAAKACgoKCgoKCgAAoAACgIAAgAAAAAIAAAAAAogAAAAAAIAAAAAAACAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACKAAAAICgCKCqAKAACAgiAiiAAAgAAAAAAAAAAAAAAKACgoKCgoKCgAAoAACgIAAgAAAAAIAAAAAAogAAAAAAIAAAAAAACAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACKAAAICgCAKCqKAACACIDKgCAAgAAAAAAAAAAAAAAKACgoKCgoKCgAAoAACgIAAgAAAAAIAAAAAAogAAAAAAIAAAAAAACAAAAAAAAAgAAAAAAAAAAIAAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKACAAAAAAAAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACKAAAAAAAigqgCgAAgIIgIogAIAAAAAAAAAAAAAACgAoKCgoKCgoAAKAAAoCAAIAAAAACAAAAAKAIAAAAAACAAAAAAAAgAAAAAAAAIAAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAACiAAAAgKAIoAKooAAICCICKIAACAAAAAAAAAAAAAAoAKCgoKCgoKAACgAAKAgACAAAAAAgAAAACgCAAAAAAAgAAAAAAAIAAAAAAACAAAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAOrk2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAACKAAAAAAAigqgCgAgAiAiiAgAIAAAAAAAAAAAAACgAoKCgoKCgoAAKAAAoCAAIAAAAACAAAAAKAIAAAAAACAAAAAAAgAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAACiAAAAAACKAooKAACAgiKICAAgAAAAAAAAAAAAAKACgoKCgoKCgAAoAACgIAAgAAAAAIAAAAAoAgAAAAAAIAAAAAACAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAigAAAAAIoCigoAAICCIogIAACAAAAAAAAAAAAAoAKCgoKCgoKAACgAAKAgACAAAAAAgAAAACgCAAAAAAAgAAAAAAIAAAAAAAACAAAAAAAAAAAgAAAAAAAAAIAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAOrk2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAIAAAACgAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAIoAAAACAKCqAKACAgiKICAAAgAAAAAAAAAAAAKACgoKCgoKCgAAoAACgIAAgAAAAAIAAAAAoAgAAAAAAIAAAAAACAAAAAAAAAgAAAAAAAAAAIAAAAAAAAACAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAoAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACKAAAAAAigqgCgAgIIiiAgAAIAAAAAAAAAAAACgAoKCgoKCgoAAKAAAoCAAIAAAAACAAAAAKAIAAAAAACAAAAAAAgAAAAAAAAIAAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAIAoAAAACKAooAKCAgiKIACAAgAAAAAAAAAAAAKACgoKCgoKCgAAoAAAgoAAgAAAAAIAAAAAoAgAAAAAAIAAAAAACAAAAAAAAAgAAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAigAAAAIAqigAAAgiKICAAAgAAAAAAAAAAAAKACgoKCgoKCgAAoAAAgoAAgAAAAAIAAAAAoAgAAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAigAAAAIAqigAAAgiAiiAAgAAAAAAAAAAAAAKACgoKCgoKCgAAoAAAgoAAgAAAAAIAAAAAoAgAAAAAIAAAAAAACAAAAAAAAgAAAAAAAAAAIAAAAAAAAACAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgCgAAAAIqgCgAgAiAiiAAgAAAAAAAAAAAAAKACgoKCgoKCgAAoAAAgoAAgAAAAAIAAAAAoAgAAAAAIAAAAAAACAAAAAAAAgAAAAAAAAAAIAAAAAAAAACAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAigAAAAIAqgAACCAIogAIAAAAAAAAAAAAACgAoKCgoKCgoAAKAAAIKAAIAAAAACAAAAAKAIAAAAACAAAAAAAAgAAAAAAAIAAAAAAAAAACAAAAAAAAAAgAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAA6uTYAAAAAAACAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgCgAAAIAKKAACCIAogAIAAAAAAAAAAAAACgAoKCgoKCgoAAKAAAIKAAIAAAAACAAAAAKIAAAAAACAAAAAAAAgAAAAAAAIAAAAAAAAACAAAAAAAAAAgAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAA6uTYAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAigAAAIAKAAAAIIKIACAAAAAAAAAAAAAAoAKCgoKCgoKAACgAACCgACAAAAAAgAAAACiAAAAAAAgAAAAAAIAAAAAAAACAAAAAAAAAAgAAAAAAAAAIAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAIDs5NgAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAIoAAAACCgAAACCCiAAgAAAAAAAAAAAAAKACgoKCgoKCgAAoAAAgoAAgAAAAAIAAAAAogAAAAAAIAAAAAACAAAAAAAAAgAAAAAAAAAIAAAAAAAAACAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACAA6uTagAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAAigAAAIAKAAIAIAigACAAAAAAAAAAAAAoAKCgoKCgoKAACgAACCgACAAAAAAgAAACgCAAAAAAAgAAAAAAIAAAAAAACAAAAAAAAAAAgAAAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAIADq5NqAACAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAoAAAIAAAAAAAAAAAAACgAAAgAAAAAAAAAAIoAAACACgAACACIoAAgAAAAAAAAAAAAKACgoKCgoKCgAAoAAAgoAAgAAAAAIAAAAoAgAAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACAAA6uTagAAAgAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAKAAAAACAAAAAAAAAAAoAAAAIAAAAAAAAAAAAogAAAAgoAAAgAiKAAIAAAAAAAAAAAACgAoKCgoKCgoAAKAAAIKAAIAAAAACAAAAKAIAAAAAACAAAAAAAgAAAAAAAIAAAAAAAAACAAAAAAAAAAgAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAgAAOzk2AAAAgAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAKAAAAAAACAAAAAAAAAAoAAIAAAAAAAAAAAAAAogAAAAgoAAAAggCKAIAAAAAAAAAAAACgAoKCgoKCgoAAKAAAoCAAIAAAACAAAAAKAIAAAAAACAAAAAAAgAAAAAAAIAAAAAAAAACAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAgAAAOzk2AAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAAAAAAAAKACAAAAAAAAAAAAAAAAKIAAAIAKAAAAiAigACAAAAAAAAAAAAoAKCgoKCgoKAACgAAKAgACAAAAAgAAAACgCAAAAAAgAAAAAAAIAAAAAAACAAAAAAAAAAgAAAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAIAAADs5NgAAAAAAIAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAogAAAgAoAAAAggogAIAAAAAAAAAAACgAoKCgoKCgAoAKAAAoCAAIAAAACAAAAAKAIAAAAACAAAAAAAgAAAAAAAAIAAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAgAAAOzk2AAAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAACgCAAACCgCggAIIKIACAAAAAAAAAAAAoAKCgoKCgoAKACgAAKAgACAAAAAgAAAACgCAAAAAAgAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAIAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAIAAADs5NgAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAogAAAgCqAAIAIgIoAAgAAAAAAAAAAKACgoKCgoKACgAoAACgIAAgAAAAIAAAAAogAAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAIAAAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAA7OTYAAAAAAACAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAoAIAAAAAAogAAAgCqAAIACCIoAAgAAAAAAAAAAKACgoKCgoKACgAoAACgIAAgAAAAIAAAAAogAAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAIAAAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAACAAA7OTYAAAAAAACAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAIAAAAAoAgAAgAooAIACCCiAAgAAAAAAAAAAKACgoKCgoKACgAoAACgIAgAAAAAIAAAAAogAAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAACAAA7OTYAAAAAAACAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAAAAAAoAAIAAAAAoAgAAAgoAoIACCCiAAgAAAAAAAAAAKACgoKCgoKACgAoAACgIAgAAAAAIAAAAAogAAAAAIAAAAAAACAAAAAAAAgAAAAAAAAAIAAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACAAAA7OTYAAAAAAAACAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAAAAAAoAAIAAAAAAogAAAgAoAAAggogAIAAAAAAAAAACgAoKCgoKCgAoAKAAAoCAIAAAAACAAAAAKIAAAAACAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAOzk2AAAAAAAAAgAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAKAAACAAAAAKAIAAIAKAAAIAIigCAAAAAAAAAAAoAKCgoKCgoAKACgAKAAgCAAAAAAgAAAACiAAAAAAgAAAAAAIAAAAAAACAAAAAAAAAAgAAAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAIAAADs5NgAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoIAAAAAAAAAAAAAAAAAAAAAACgAAgAAAACgCAACACgAACACIoAAgAAAAAAAAAKACgoKCgoKACgAAoCgAIAgAAAAAIAAAAAogAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACAAAA7OTYAAAAAAAACAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAAAogAAAgoAAAgAiKAAIAAAAAAAAACgAoKCgoKCgAoAAKAoACAIAAAAACAAAAAKIAAAAACAAAAAAAgAAAAAAAIAAAAAAAAACAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAOzk2AAAAAAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAAKAIAAIAKAAIAIKIACAAAAAAAAAAoAKCgoKCgoAKAACgAKAgCAAAAAgAAAAACiAAAAAAgAAAAAAIAAAAAAACAAAAAAAAAAgAAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAIAAADs5NgAAAAAAAAAAIAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAACgCAAACCgACAAKiAAgAAAAAAAAAKACgoKCgoKACgAAoACgIAgAAAAIAAAAAAogAAAAIAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACAAAAA7OTYAAAAAAAAAAACAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAoAgAAAgoAAgACogAAIAAAAAAAACgAoKCgoKCgAoAAKAoACAIAAAACAAAAAAigAAAACAAAAAAAgAAAAAAAIAAAAAAAAACAAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAOzk2AAAAAAAAAAAAgAAAAAAAAAAAKAAAAACgAgAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAoAgAAAgoAgAAiKAAIAAAAAAAACgAoKCgoKCgAoAAKAoACAIAAAACAAAAAKIAAAAACAAAAAAAgAAAAAAAIAAAAAAAAACAAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAOzk2AAAAAAAAAAAAAgAAAAAAAAAAKAAAAACgAAgAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAACgAAAgAAACgCAAACCgCAACIoAAgAAAAAAAAKACgoKCgoKACgAAoCgAIAgAAAAIAAAAAogAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAIAAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAOrk2AAAAAAAAAAAAAAgAAAAAAAAAKAAAAACgAAgAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAACgAAAgAACgCAAACCgACAAKiAAgAAAAAAAAKACgoKCgoKACgAAoCgAIgAAAAAIAAAAACKAAAAAIAAAAAACAAAAAAAAgAAAAAAAAIAAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAIAAAAAACgAAAAAoAIAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAKAAAAAAAAAACAAAAAAAAAAAoAAAIAAAAoAgAAAgoAgACogAAIAAAAAAAACgoKCgoKCgAoAAKAoACIAAAAACAAAAAAigAAAACAAAAAAAgAAAAAAAIAAAAAAAACAAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAIAAAAAAAAAACgAAgAAACgCAAACCgACACCiAAgAAAAAAAAKCgoKCgoKACgAAoCgAIgAAAAAIAAAAAogAAAAAIAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAAAAACgAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAACiAAACCgACAAKiAAAgAAAAAAAKCgoKCgoKACgAAoCgAIgAAAAAIAAAAAogAAAAAIAAAAACAAAAAAAAgAAAAAAAAAIAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADq5NgIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAoAgAAAgoAAgCoAgAIAAAAAAACgoKCgoKCgAoAAKAoACIAAAAACAAAAAKIAAAACAAAAAAAgAAAAAAAIAAAAAAAACAAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAACgCAAACCgAACCCiAAAgAAAAAKACgoKCgoKACgAAqgAAIgAAAAAIAAAAAogAAAAIAAAAAACAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAKAIAAAIKAAAAiKAIACAAAAAAoAKCgoKCgoAKAACqAAAiAAAAAAgAAAAIoAAAAAgAAAAAIAAAAAAACAAAAAAAAAAgAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKADo5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAKAIAAIAKAAAIqAIACAAAAAAoAKCgoKCgoAKAACqAAAiAAAAAAgAAACiAAAAAAgAAAAAIAAAAAAACAAAAAAAAAAgAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAgAA6ObYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAACgCAAACCgAAAIiiAAAgAAAAKACgoKCgoKACgAAqgAAIgAAAAAIAAAAogAAAAAIAAAAACAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAIAKAADbm2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAoAgAAAgoAAACIogAAIAAAACgAoKCgoKCgAoAAKoAACIAAAAACAAAAKIAAAAACAAAAAAgAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAoACACgAAoArTm0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAoAgAAgoAAAggogAAIAAAACgAoKCgoKCgAoAAKoAACIAAAAACAAAAAigAAAACAAAAAAgAAAAAAIAAAAAAAAACAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAoACACgAoAoACgrm0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAgAAgAoAAggogAAIAAAACgAoKCgoKCgAoAAKoAACIAAAAACAAAAAigAAAACAAAAAAgAAAAAAIAAAAAAAAACAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAoAACCgAAooCgAAArm0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAgAAAgoAgACogAAIAAAACgAoKCgoKCgAoAAKoACAIAAAACAAAAAKIAAAAACAAAAAAgAAAAAAIAAAAAAAAACAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAoACCgAAoAqgAAoAADm0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAgAAgogAAAiKAAAIAAACgAoKCgoKCgAoAAKAoCAIAAAACAAAAAKIAAAAACAAAAAAgAAAAAAIAAAAAAAAACAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAoAACCgAoAoCgAoAAAKCObQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgCAACCiAAACIoAAAgAAAKACgoKCgoKACgAAKKACCAAAAAIAAAAAogAAAAAIAAAAACAAAAAAAgAAAAAAAAAIAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACgAAIKAACgCqACgAAAoAAI5tAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAAAKAIAAIAigAAIigAAACAAAoAKCgoKCgoAKAAAooAIIAAAAAgAAAACiAAAAAAgAAAAAIAAAAAACAAAAAAAAAAgAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAKAAAAgoAAKAAKoAKAAACgAAAjm0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAAoAgAAAiKAAAiKAAAAIAACgAoKCgoKACgoAACigAggAAAACAAAAAigAAAACAAAAAAAgAAAAAAIAAAAAAAACAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAoAAACCgAAoAAqgAAoAAAAKAAACObQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAACgCAACIoAAAioAAAAgAAKACgoKCgoAKCgAAKKACCAAAAAIAAAACKAAAAAIAAAAAACAAAAAAAgAAAAAAAAIAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAqAAACgACqAACgAAAAAoAAAI5tAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAKAIAAIgCgACKgAAAACAAoAKCgoKCgAoKAAAooAIIAAAAAgAAAAIoAAAAAgAAAAAAIAAAAAACAAAAAAAAAgAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAKAAAACoAAAKAAKoAAAKAAAAAAAAAAA5tAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAKAIAACCCgACCCgAAACAoAAKCgoKCgAoKAAAooAIIAAAAAgAAAAIoAAAAAgAAAAAAIAAAAAACAAAAAAAAAgAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAKAAAAAgoAAKAACigAAAKAAAAAAAAAAAA5tAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAKIAAAIigAAIigAAAAAAACgoKCgoAKCgAAKKACCAAAAAIAAAACKAAAAAIAAAAAACAAAAAAgAAAAAAAAAIAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAACgAAAAAqAACgAAAooAAACgAAAAAAAAAAAAjm0oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAKAIAAIigAAIigAAAAAAACgoKCgoAKCgAAKKACCAAAAAIAAAACKAAAAAIAAAAACAAAAAAAgAAAAAAAAAIAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAACgAAAAAAAqAACgAAAooAAACgAAAAAAAAAAAAAjm0AoAAAAAAAAAAAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAogAAiAKAAIqAAAAAAAAKCgoKCgAoKAAAooAIIAAAAAgAAAAIoAAAAAgAAAAAIAAAAAACAAAAAAAAAAgAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqAACgAAAooAAAAAAAACgAAAAAAAAAjm0AAoAAAAAAAAAAAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAogAAAiKAACogAAAAAAAKCgoKCgAoKAAAoAACAAAAAIAAAACKAAAAAIAAAAACAAAAAAAgAAAAAAAAIAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKgAAAoAAAKKAAAAAAAAAAAoAAAAAAAI5tAAKAAAAAAAAAAAAAAAAAAAAAAAACAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAKAIAAIigAAqIAAAAAAACgoKCgoAKCgAAKAAAgAAACAAAAAAigAAAACAAAAAAgAAAAAAIAAAAAAAACAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACoAAKAAAACgCgAAAAAAAAAAAAAAAAADm0AAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAKAIAAIigAAIigAAAAAACgoKCgoAKCgAAKAAAgAAACAAAAAgCgAAACAAAAAAAgAAAAAAIAAAAAAAACAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAACgIAAAKAAAAAACigAAAAAAAAAAAAAAADm0AAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAKIAAIAigAAqIAAAAAACgoKCgoAKACgAKAAAgAAACAAAAAgCgAAACAAAAAAAgAAAAAIAAAAAAAAACAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACoAAAAKAAAAAAAAKAAoAAAAAAAAAAADm0AAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAKAIAAIigAAqIAAAAAACgoKCgoAKACgAKAAAgAAACAAAAAgCgAAACAAAAAAAgAAAAAIAAAAAAAAACAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACoAAAAAAKAAAAAAAKAAAAAAAAAAAArm0AAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAAAAAKAIAAIKIAAqIAAAAAACgoKCgoAKACgAKAAAgAAACAAAAAgCgAAACAAAAAAgAAAAAAIAAAAAAAAACAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAoAAAAAAAAAKgAAAAAAAoAAAAAAAoAAAAAAAAACubQCgAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAACgACACCiAACIoAAAAAAoKCgoAKCgAoACgAAIAAAAgAAAAIAAoAAAgAAAAAIAAAAAACAAAAAAAAAAgAAAAAAIAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAKAAAAAAAAAAAgoAAAAAAAAAKAAAAKAAAAAAAArm0oAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAIAAAoAgAAiKAACogAAAAAKCgoAKCgoAKAAoAACAAAAIAAAACAKAAAAIAAAAACAAAAAAAgAAAAAAAAIAAAAAAACAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAIKAAAAAAAAAAAAAAAAAACigNObQAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAACAAAKAAIAIKIAAqIAAAAACgoKACgoKACgAKAAAgAAACAAAAAgCgAAACAAAAAAgAAAAAAIAAAAAAAACAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAACAACgAAAAAAAAAAAAAAAAA25tgAAAAAAAIAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAIAAoAAgAgogACogAAAAAKCgoAKCgoAKAAoAACAAAAIAAAACAKAAAIAAAAAACAAAAAAAgAAAAAAAAIAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAIAAAAAAKAAAAAAAAAADbm2AAAAAAAgAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAgACgACACACiACCiAAAAAoKCgAoKCgAoACgAAIAAAAgAAAAIAoAAAgAAAAAAIAAAAACAAAAAAAAAAgAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAKAAAAAAAAAAAAgAAAAAAoAAAAANubYAAAAACAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAACAAAKAAIAIKIAAqIAAAACgoKCgAoKACgAKAAAgAAACAAAAAgCgAACAAAAAAgAAAAAAIAAAAAAAAACAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAACAAACgAAA25tgAAAAIAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAIAAAoAAgAgogACogAAAAKCgoKACgoAKAAoAACAAAAIAAAACAKAAAIAAAAACAAAAAAAgAAAAAAAAAIAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAIAAAAAKDbm2AAAAgAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAKAAAIIKAIAqIAAAACgoKCgAoKACgAKAAAgAAACAAAAgACgAACAAAAAAgAAAAAAIAAAAAAAAACAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAACAAAADbm2AAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAoAAgAgogAgogAAKACgoKACgoAKAoAAACAAAAIAAACAAKAAAIAAAAACAAAAAAAgAAAAAAAAIAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAIAAANubYAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAgAgogACogAAKACgoKACgoAKAAoAACAAAAIAAACAAKAAAIAAAAACAAAAAAAgAAAAAAAAIAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAIAANubYAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAggoAgCogAAKACgoKACgoAKAAoAACAAAAIAAACAAKAAAIAAAAACAAAAAAgAAAAAAAAAIAAAAAAACAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAICjbk2AAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAIIAKIAIKIACgAoKCgAoKACgAKAAAgAAACAAAAgACgAACAAAAAAgAAAAAIAAAAAAAAACAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAANuTYAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAIAIKIAIKIACgAoKCgoAKACgAKAAAgAAACAAAAgACgAACAAAAAAgAAAAAIAAAAAAAAACAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6OTYAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAIAIKIAIKAAAAKCgoKACgAoACgAAIAAAgAAAAIAAoAAAgAAAAIAAAAAACAAAAAAAAAAgAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOjk2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgACCCiAAKgAAACgoKCgAoAKAAAoACAAAIAAAACAAAKAIAAAAACAAAAAAAgAAAAAAAAIAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAgAAAAAAACgACCACiACCgACgAoKCgAoAKAAAoACAAAIAAAACAAAKAIAAAAACAAAAAAAgAAAAAAAAIAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAACgCACCiACCgACgAoKCgAoAKAAoAAACAAIAAAACAAKAAIAAAAACAAAAAAAgAAAAAAAAIAAAAAAACAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAOjk2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAAKAIAIKIAAqAAKACgoKACgAoACgAAAIAAgAAAAIAAoAAgAAAAAIAAAAAACAAAAAAAAAgAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAA6OTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAoAAggoAgCoAAoAKCgoAKAACgKAAAAgACAAAAAgACgACAAAAAAgAAAAAAIAAAAAAAACAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAOrk2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAAAKAIIAKIAIKAKACgoKACgAAoCgAAIAAAgAAAAIAAoAAgAAAAAIAAAAAACAAAAAAAAAgAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAACgACCCgCAKigAoAKCgAoAAKAoAAACAAIAAAACAAAKAIAAAAACAAAAAAAgAAAAAAAAIAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAoAAggoAACCgCgAoKACgAAoCgAAAIAAgAAAAIAAAoAgAAAAIAAAAAAACAAAAAAAAgAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAAACgAAIigAAAIKKCgAoAKAACgKAAAAgACAAAAgAAACgCAAAAAgAAAAAAAIAAAAAAACAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAOrk2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAAAKAAgCKAAAKIKKACgAoAAKAoAAACAAIAAACAAAKAAIAAAACAAAAAAAAgAAAAAAAIAAAAAAACAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAoAACCgAAAAqKACgAoAAKAoAAACAAIAAACAAAKAAIAAAACAAAAAAAAgAAAAAAAIAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAoAACCgAAACgKgCgAoAAKAoAAACAAIAAACAAAKAAIAAAACAAAAAAAAgAAAAAAAIAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAoAACACgAACgKgCgAoAAKAoAAACAAIAAACAAAAKIAAAAACAAAAAAAAgAAAAAAAIAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAoAACACgACgAqoAAoAAKAoAAAACIAAAACAAAAKIAAAAACAAAAAAAAgAAAAAAAIAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAoAACACgACgAqoAAoAAKAoAAAACIAAAACAAAKAIAAAAACAAAAAAAAgAAAAAAAIAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAACgAAAIAAKKAACqgCgAAoACgAAAIgAAAAIAAAoAgAAAAAIAAAAAAACAAAAAAAgAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAKAAAAgAooAAKqAKAACgAKAAAgCAAAAAgAAACiAAAAAAgAAAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAOrk2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAoAAAACACigAqoAoAAKAAoAACAIAAAACAAAAKIAAAAACAAAAAAAAgAAAAAAIAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAKAACAAKAAAAAgooAKqAKAACgAKAAAgCAAAAAgAAACiAAAAAAgAAAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAOrk2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAACgAAAAgAACgAAAIAKKAoogCgAoACgAAIAgAAAAIAAAAogAAAAAIAAAAAACAAAAAAAAgAAAAAAAIAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAACgAAAIKKACqgCgAoACgAAAIgAAAAIAAAAogAAAAAIAAAAAACAAAAAAAAgAAAAAAAIAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgACgAAAIKKACqgCgAoAACgAIAgAAAAIAAAACKAAAAAIAAAAAACAAAAAAAAgAAAAAAAIAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgACgAAAIKAKAqKCgAAoCgAAAIgAAAIAAAAACKAAAAIAAAAAAACAAAAAAAAgAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAgACgAAIKAKAqKCgAAoCgAAAIgAAAIAAAAACKAAAAIAAAAAAACAAAAAAAgAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAADq5NgIAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAKAAAgoAoCooAKACgKAAAiAAAAAgAAAAAIoAAAAgAAAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAOrk2gAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAACgAAIAKACooAKACgAKAAIIAAAAgAAAAAIoAAAAgAAAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAOrk2gAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAACgAAIAKACooKAACgAKAAIIAAAAgAAAAIAAoAAAgAAAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAOrk2gAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAACgAAIAKAKIKKAACgAKAAiAAAAAgAAAAIAAoAAAgAAAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOrk2gAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAACgAAIAKAKIKKAACgAKAAiAAAAAgAAAAIAAoAAAgAAAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOjk2AAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAoAIAAAAAoAACACgCgKgCgAoACgCACAAAAIAAAACAKAAAAIAAAAAAACAAAAAAAgAAAAAAAIAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAoAAAIACgKAAIIAKAAKqAKACgAKAIIAAAAAgAAAAIAoAAAAgAAAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOjk2AAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAoAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAKAAAAAAAAoAAgAgoAAqoAoAAKAoAggAAAACAAAAAgACgAACAAAAAAAgAAAAAAAIAAAAAAACAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAA6OTYAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAACgAAAAAAgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAoAAAAAAACgACACCgAAqKCgAAoCgCCAAAAAIAAAACAAKAAAIAAAAAACAAAAAAAAgAAAAAAAIAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAKAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACgAAAAAAKAAAIAIAiigKigAoAKAoAggAAAACAAAAAgACgAACAAAAAAAgAAAAAAAIAAAAAAACAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAA6OTYAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAACgAAAgAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAoAAAAAACgAACACIAooCooAKACgKAIAIAAAAgAAAAIAAoAAAgAAAAAAIAAAAAAACAAAAAAAAgAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAOjk2AAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAoAIAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAKAAAAAAAoAAAgAiAKAKIqgCgAoCgCCAAAAAIAAAACAAKAAAIAAAAAACAAAAAAAAgAAAAAAAIAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAKCAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAACgAAAoAIAoAAAAgAiAKAKIKKCgAoCgCACAAAAIAAAACAAKAAAIAAAAAACAAAAAAAAgAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAKCAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAACgAAAoAIoAAAAAgAiAKAKIKKCgAoCgCACAAAAIAAAACAKAAAAIAAAAAACAAAAAAAAgAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAoAAAKAoAgAAAAICCACgAIqigoAAKoAgAgAAACAAAAAgACgAACAAAAAAAgAAAAAAAIAAAAAAACAAAAAAAAAAgAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAA6OTYAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAKAACgKAAIAAAACAggAoACKooKAACqAIAIAAAAgAAAAIAAoAAAgAAAAAIAAAAAAAACAAAAAAAAgAAAAAAAAAIAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAOjk2AAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACgAAoCgACAAAAAgIIAiigCKooKAACgKIAIAAAAgAAAAIAoAAAAgAAAAAIAAAAAAACAAAAAAAAAgAAAAAAAAAIAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAOjk2AAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAICgAAAAAAAAAAAAAAoAAIAAAAAAACgAAAAoAAKoAAAgAAAIACCAIoAoiqKACgAoCiACAAAAIAAAACAKAAAIAAAAAACAAAAAAAAgAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAAAoAAAAAAAAAAAKAAAAACAAAAAAoAAAKAAACqAAAIAAAACAggCKAKIqigAoAKAoggAAAACAAAAAgCgAACAAAAAAAgAAAAAAAIAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAA6OTYAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAACgAgAAAAAAAAAKAAAAAAAAAACgAAAAAAgAAAAKAAACgAAAKKAAACAAAAgIIAigCiKooAKAACqIAIAAAAgAAAAIAoAAAgAAAAAAIAAAAAAACAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAOjk2AAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAoAIAAAAAAAAAAACgAAAAAAAAAoAAAAAAAIAAACgAAAoAAACigAAAgAAAICCAIoAoiqKACgAAqiACAAAAIAAACAAAKAAIAAAAAACAAAAAAAAgAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAADo5NgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAKACAAAAAAAAAAAAAAoAAAAAAAAAKAAAAAAACAAAAoAAAKAAAACqAAAIAAACAggCKAKIqigAoAAKogAgAACAAAAAgAACgACAAAAAAAgAAAAAAAIAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAA6OTYAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAoAAAAAAAIAAACgAAAAoAACgCgAAgAAAICCAIoAoiqKACgAAKAAgAACAAAAAgAACgACAAAAAAAgAAAAAAAIAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAA6OTYAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAoAAAAAAAIAACgAAAAAoAACgACgAgAAIACCAIoAoiqKACgAAKAgAAACAAAAAgAACgACAAAAAAAgAAAAAAAIAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAA6OTYAAAAACgAAAAAAAAAAAAAAAgKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAACgAAAAAAAgAAKAAAAACgAAKAAKACAAAgAIIAigCiKooAKAAAoACAAAIAAAACAAAAKAIAAAAAACAAAAAAAAgAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAKAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAKAAAAAAACAAAoAAAAAKAAAoAAoIAAACAAggCAqgCqigAoAACgAIAAAgAAAAIAAAAoAgAAAAAAIAAAAAAACAAAAAAAAAgAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAANuTYCgAAAAAAAAAoAAAAAAAIAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAoAAAAAAAIACgAAAAAAoAACgACggAAAAICCAACgCiKoAoAACgAIAAAgAAAAIAAAAAogAAAAAAIAAAAAAACAAAAAAAAAgAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAANuTYCgAAAAAAAAAAAAoAAAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAAAAAAAoAAAAAAAAIACgAAAAAAoAACgACgAgAAAICCAACgCiKooAAAACgIAAAgAAAAIAAAAAogAAAAAAIAAAAAAACAAAAAAAAAgAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAANuTYCgAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAAAAAAAoAAAAAAAAAAAAAAAKAAAAAAAAACAoAAAAAAKAAAAoAAoAIAAACACIAAooAiqKAAAAAoCAAAIAAAACAAAAAAgCgAAAACAAAAAAAAgAAAAAAAAIAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAADbk2oAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAgAAAAAAAKAAAAAAAAAAAAAAACgAAAAAAAAAgAAKAAAAACgAAAKAKAACAAAAgAIIAqgCiCigAAAKAAgAACAAAAAgAAAAAIoICgAAACAAAAAAAAgAAAAAAAAIAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAADo5NgAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAACgAAAAAAAAAAgAAAKAAAAACgAAAKAKAAACAAAgAAgAoAogooAAACgAIAAAgAAAAIAAAAACAKAAAAAIAAAAAAACAAAAAAAAAgAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAOjk2AAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACAoAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAAoAAAAKAAAAoAoAAAIAACAACACgCiCigAAAKAAgAACAAAAAgAAAAAIAoAAAAAgAAAAAAAIAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAA6OTYAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAAAoAAAAKAAAAAooAAAIAACAACACgCiCigAAAAKAgAACAAAAAgAAAAAIAoAAAAAgAAAAAAAIAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAA6OTYAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAAAAAoAAAKAAAAAooAAAIAACAACACgCiCigAAAAKAgAACAAAAAgAAAAAIAoAAAAAgAAAAAAAIAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAA6OTYAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAAAAAAoAAAKAAAAAoAoAAIAACAAggCqAKIKKAAAAAoCAAAIAAAACAAAAAAgACgAAACAAAAAAAAgAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAADo5NgAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAACgAAAoAAAACgCgAAgAAICACACigCKooAAAACgIAAAgAAAAIAAAAACAAKAAAAAIAAAAAACAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAOjk2AAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAgAAAAAAAAAAKAAAACgAAAKAKACAAAgAIAIAKAKIqigAAAAKAgAACAAAAAgAAAAAIAoAAAAAAgAAAAAAIAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAA6OTYAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAAAAAAAAoAAAAKAAAAoAAAAAAgAIIgAKoAoiqAKAAAAoCAAAIAAAACAAAAAAigAAAAAACAAAAAAAgAAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAADo5NgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAACgAAAAoAAAACgAAAACAgAiAAKKCiCigoAAACoAAAAgAAAAIAAAAACKAAAAAAAIAAAAAACAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAOjk2AAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAgAAAAAAAAAAAAAAKAAAACgAAAAKAAAAIACAggCAqgCiKooKAAAAqAAAAIAAAACAAAAAAKIAAAAAAACAAAAAAAgAAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIDo5NgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAACgAAAAAoAAACgAAACAAgiAgACigoiqKCgAAKAgAAACAAAAAgAAAACgCAAAAAAAAgAAAAAAIAAAAAAAACAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbk2AAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAKAAAAAACgAAAAKAAAICAgiAAAKKCiKooKAAAoCAAAAIAAAAACAAAAKAIAAAAAAACAAAAAAAgAAAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANuTYCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAAKAAAAAoAAAgICCICAKAKCwRqKKACgAKAgAAACAAAAAAgAAACgCAAAAAAAAgAAAAAAAIAAAAAAAACAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbk2AoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAoAAAACgACAAgjIIAAoAoLBGoooAKAAoCAAAAAIAAAACAAAAKAAIAAAAAACAAAAAAAAgAAAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANuTYCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAKAAAAoAAAgICURAQEAUUFBYIsUaABQAFAQAAAABAAAAAQAAABQABAAAAAAAAQAAAAAAEAAAAAAAAAABAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABtybAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAABAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAABQAAAAFAAAEBBEoICAgCgCwGoIsUaABQAFAQAAAABAAAAAAQAABQABAAAAAAAAQAAAAAAEAAAAAAAAAAABAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABtybAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAABAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAABQAAAAFAAAEBBEoM0EAUQFBYDUEWKNAAoACgIAAAAAAgAAAAIAAAAoAgAAAAAAAIAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA25NqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAoAAAACgAAACAlEZoJQQEUAUFgjUBYo0ACgAKAgAAAAACAAAAAgAAACgACAAAAAAAgAAAAAAAIAAAAAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAoAAAACgAAACAlEZoJQQEUAUFgjUUWA0ACgAKAgAAAAACAAAAAAgAACgACAAAAAAAgAAAAAAAIAAAAAAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAoAAAACgAAAACAzREoM0EAUAAagjUUWA0ACgAKAgAAAAACAAAAAAgAACgACAAAAAAAAgAAAAAAAIAAAAAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAKKAgKACAAoAAAAgAM0RKDNBFEABQagixRqA1AUAABQEAAAAAAAQAAAAEAAAUAAQAAAAAAAEAAAAAAABAAAAAAAAAAAAAAQAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdHJsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAABRQAAAAEABQAAABAQEoiUGaCKIACiNRRYDUBqAoAACgIAAAAAAAgAAAAIAAAAoAAgAAAAAAIAAAAAAAACAAAAAAAAAAAAAAgAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6OTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAACigAAAAAAAAAAAgICURKDNBFEABYI1FFgNQGgUAABQEAAAAAAQAAAAAEAAAAAUAQAAAAAAAEAAAAAAABAAAAAAAAAAAAAAQAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdHJsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAFFAAAAAAAAAAAABASglESgzQRRAAWCLFGoDUBoFAAAUBAAAAAEAAAAABAAAAAAFAEAAAAAAABAAAAAAAAAQAAAAAAAAAAAAAEAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHRybAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAEBQAAAAAAAAAAAAAAAAAAAAAAAAAUAAAEAAAAAAAAAAAAAAAAAAAAAAAAABQAAFAFAAAAAAAAAAAABASglESgzQRRAAWCLFGoDUBoFAAAVAAAAAEAAAAAABAAAAAAARQAAAAAAAABAAAAAAAAQAAAAAAAAAAAAAEAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHRybAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAUAABQABQAAAAAAAAAAAAQEoJRGaCUEUQAFgixRqA1AaBQAAFQAAABAAAAAAAQAAEAAAAAUAAAAAAAAAQAAAAAAAAEAAAAAAAAAAAABAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0cmwAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAFAAUAAAUAAAAAAAAAAAAEBASiM0EoIogALBFijUBqA0CgAAKgAACAAAAAAAAgAIAAAAAAAoAAAAAAAAgAAAAAAAAAIAAAAAAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAKAAoAAAoAAAAAAAAAAAAICUEojNBKDKgACwRYo1AagKCgoACoAAgAAAAAAAIACAAgAAAKAAAoAAAAAAAAgAAAAAAAAIAAAAAAAAAAAACAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAKAAoAAAoAAAAAAAAAAACAogJQSiM0EoMqAALBFijUBqAoKCgAKgCAAAAAAAAgAIACAAgKAACgAKAAAAAAAAIAAAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAA6OTYAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAACgAKAAAAKAAAAAAAAAgAAAKICAlEZoJQZUAAWCLFGoDUBQUFABBBQBAAAAAAAAQAEFQAAAQBQAUABQAAAAAABAAAAAAAAAAQAAAAAAAAAAAEAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAHRybAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAABQAAAAAAAEAAABQBASglEZoJQZUAAWCNRRYDUBQUFBAABEUAQAFAAAABAQEFRAAAUUQBQUABQAAAAAABAAAAAAAAAAQAAAAAAAAAAAEAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAHRybAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAABAAAAAAAAAAAAAAAAAAAAAAAAAAUAABQAAABQAAAAAAAAEAFABFAEBKCURmglBFEABYDUVFgNQFBQAAAQEEFAAAAAAAEBBUQAQAFAUURQAUBQAAAAAAABAAAAAAAAAQAAAAAAAAAAAEAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAHRybAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUAAAAAUAAAAAAABAABQAQBRASglEZoJQRRAAWA1FRYDUBQUAAEBAARQEAUAAAEABEVAQAAAFUUQBQUBQAAAAAAABAAAAAAAAAQAAAAAAAAAAAAEAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAHRybAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAUAAAAAUAAAAAABAUEAFABAFEBKCURmglBFEABQaiosBqAoAKCAAgIAAoCAAAAAIKiCAgAAKCqAigoAKAoAAAAAAAgAAAAAAAAIAAAAAAAAAAAACAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAKAAAAAKAAAAAAAgAAAoAIAogJQSiM0EoIogALAagixRqAoAAAICAAgACgIoAIAKiCAgAAAKAooigoAAKAoAAAAAAgAAAAAAAAIAAAAAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAKAAAAAAKAAAAAAAgAAAqgCAAgJQSiM0EoMgKAKCwRqKKCgAAAgAIAAAAoCAoCIICAAgAKACqKIoAKAAAAooAAAAIAAAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAA6OTYAAAAAAAAAAAAAAAAACgAAAAAAAAAACAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAoAAAAAAoAAAAACAoICgCgAgAICURKDNBKDICgCgsEWAqigAAAAgAIAAAAAACAgAIAACgAqiiAKAAACgAKAAKACAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAOjk2AAAAAAAAAAAAAAAAAAoAAAAAAAAgAKCAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAoAAAAAAoAAAAAAACAoAoAIACAlESgzQZoIoAAoKCiKAoAAAAgAAAAAAIACAAgAAAAKCgKKIAAAAoAKAAoAAAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAOjk2AAAAoAAAAIAAAAAAAACgAAAAAACAAAAoAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAACgAAAAACgAAAAAAAAAoAAIACAlEZoJQZoIAoAAoKCgCCgAACAAAAAAAgAIACAAAAoKACgAAAKAigAoAKAoAAAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAOjk2AAAoAAAAAIAAAAAAAAACgAAAAAACAAAAoAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAACgAAAAACgAAAAAAAAAoAAIACAlEZoJQZoIAoAAoKACgggAoAgAAAAAAIACAAAAAAoAAKAAAAACgKigoAKoAAAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAOjk2AoAAAAAAAIAAAAAAAAAACgAAAACAoIAAACgAAAAAAAAAAKAAACAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAKAAAAAAKAAAAAAAAACgAAgAICCM0EoM0EAUAAUAFAABBAEUAAAAAAAAQAEAAABQAAUAAAAAAFABVRQUAFUAAAAAAAAAAAQAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAHVybAAQAAAFABAAAAAAAAAAAAAUAAAAQFBAAAAUAAAAABQAAAAAAAAAQAAAAAAAAAAAAAAAAFAABAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAABQAAAAABQAAAAAAAAAAUAEABASiJQZoJQZAUAAUAAAAEAEAFEBQAAQAAEAAAAAAABQAAAAQFAABQUFVFBQAVQAAAAAAAAAABAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAdXJsBAAAAAAAAAAAAAAAAAAAAUAAAAAAAABQAQAAAUAAAAAAAAAAAEAAAAAAAAAAAAAAABQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAUAAAAAAAUAAAAAAAAAAFABAAQEoiUGaCUEBFAAFAAABAAQQAAUAAAAAQAAEQAAFFAAAAAAAAABQAUFBVRQUFUAAAAAAAAAAAQAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAHVybQAAAAAAAAAAAAAAAAAAAAAFAAAAAAAUAAAAEFAAAAAAAAAAAABAAAAAAAAAAAAAAAAUAAEAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAFAAAAAAAFAAAAAAAAAABQQAAEBKIlBmggICKAAKAAACAgAAiAKKAACAAAiAAKACAAAAAAAAAAAKCqANAoKqKACqAAAAAAAAAAIAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAADo5NgAAAAAAAAAAAAAAAAAAAAAKAAAAAAoAAAAAoCAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAACgAAAAAAACgAAAAAAAAAAAAAAgIIlBmglBARQABQAAQAEABABABQAAAAQQUAAAAAEAAAAAAAAAAUFUWAoKqKCgAqgAAAAAAAACAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAA6OTYAAAAAAAAAAAAAAAAAAAAACgAAAAAKAAAAAKAgAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAoAAAAAAAAAoAAAAAAAAAAAAAAICCJQSgzQQBRAAUAEAABAAQAAQAUAEAEFAAAAQFAAAEAAQUAABRAAFBVFBoFVAFAAAUAAUAAAAAEAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAB0cmwAAAAAAAAAAAAAAAAAAAAAFAAAAAAUAUAAABAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAABQAAAAAAAABQAAAAAAAAAAAAAAAQEESglBmggIoAAAAAAgAAIAAIAAAACoAACAAAAAAAAAAAAAAoAigqigoKqKAACgAKAAKAAAACAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAA6OTYAAAAAAAAAAAAAAAAAAAACgAAAAAAKKAAAAAAgAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAoAAAAAAAAAAoAAAAAAAAAAAAAAAICCJQSgzQQEUAAAAAAQAEAAAAEABQEAAABAAAAAAAAAAAAAAAUQBQVRQUFEFFAABQFAFAAAAABAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAdHJsAAAAAAAAAAAAAAAAAAAABQAAAAAAAVQAAAAQAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAUAAAAUAAEAAABQAAAAAAAAAAAAAAAQRASglBmgiiAgAAAAAAAAIAAAAAACAAAAAgAAAAAAAAAAAAAAKIoAKooKACqgCgAoCigAAAAAgAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAOjk2AAAAAAAAAAAAAAAAAAAAoAAAAAAAAKAAoIAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgKAAAKAAAAACAoAAAAAAAAAAAAAAAAIIgJQZoJQZUQAAAAAAAAAAQABAABQAEAAAABAAAAAAAAAAAAAAUQBQAVRQUAFVAFBQFFAAAAAABAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAdHJsBQQAAAAAAAAAAAAAAAAFAAAAAAAAAABQAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAUAAAAUAAAAAAAAAAAAAAAAAAAAAAAEESglBmgzQRRAAQAFAAAAEAAAAAAQUABAAAAAAAAQAAAAAAAAAAAFEAUAFUUAFBVRQUBRQAAAAAAQAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAHRybAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAFAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUBQAABQAAAAAAAAAAAAAAAAAAAAAAAAQRKDNBKDNBFEBAAAAUAARVAAAEAQAAQUBAAAAAAAAQAAAAAAAAAAAAFEAUAFUUFBVRQUAFUAAAAAAAQAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAHRybAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAABQAABQAAAAAAAAAAAAAAAAAAAAAAAAQRKDNBmglBFEBAAAUAFEFAAAAABBAAQUABAAAAAAAAQAAAAAAAAAAAAFEAUFBVFBVFEUAFUAAAAAAAAQAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAHRybAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAFAAAABAAAAAQAQABRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAUAAUAAAAAAAAAAAAAAAAAAAAAAAAAEESgzQZoJQZUAQAFABQFRQAAAAAQBBAAQUBAAAAAAAAAQAAAAAAAAAAAFEAUAFUUGgVUUAFUAAAAAAAAQAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAHRybAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAFAAAABAAAAAQQAAABRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAUAUAAAAAAAAAAAAAAAAAAAAAAAAAEEZoJQZoJQZUAQFABQBFUUAAAAEABEEABBQEAAAAAAAAABAAAAAAAAAAAAUQBQVRQaBVQBQVQAAAAAAAABAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABtybAAAAAAAAAAAAAAAAUAAAAAAAEABQAAAAAAUEAAAAABABAAAAFFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAABRQAAAAAAAAAAAAAAAAAAAAAAAAAAQRmglBmglBFEAABQUFEFFAAABAAQEQAQEAFQAAAAAAAAAAEAAAAAAAAAABRAFBVFBQVUUFAUUAAAAAAAAEAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGnJsBQAAAAAAAAAAAAAAUAAAAAAEAAABQAAAAAAAAAAAAQQAAAABRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAUUAAAAAAAAAAAAAAAAAAAAAAAAAAEEZoJQZoJQRRAAUFBRFUAUAAEABAQBBAQEAFQAAAAAAAAAAAEAAAAAAAAABRAFBVFBQVUUAFAUUAAAAAAAEAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGnJsABQAAAAAAAAAAAAUAAAAAAEAAAABQAAAAAAAAAAAQAQAUAEAFFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAABQABQAAAAAAAAAAAAAAAAAAAAAAAAAQRmglBmggIAoAoKCiKAoAoIACAAgICIIACCgIAAAAAAAAAACAAAAAAAAAAoAigqigAoiqKACgAqgAAAAAACAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTk2AAAoAAAAAAAAAAAKAAAAACAAAAAAoAAAAAAAAAAAIAIAKAACKoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAoAqAoAAAAAAAAAAAAAAAAAAAAAAAAgjNBKDNBAQBQBQUFEUFUAAAQAEBAQEQAQEAAAFAAQAAAAAAAEAAAAAAAABQBFABVFBQBFUUAFAAUUAAAAAEAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGnJsAABQAAAAAAUAAAAAAAAAEAAAAAABQAAAAAQAAAFABABAABQBUUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAFAFQAAFBAUAAAAAAAAAAAAAAAAAAAAQGaIlBmggIAoAoNACKCqAAAIACAgIACAgCACAAAACgAIAAAACAAAAAAAAAoAgCgqgCgoAKqKACgAqgAAAAACAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTk2AAAoAAAAAKAAAAAAAAACAAAAAAAAoAAAIAAAAAAAAAIAAAKqgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACgAAAAAAAKAAAAAAAAAAAAAACAoAAgM0RKDNBAQBQBQUFEUBQAAABAAQAEABAAAQABBAABQEAAAABAAAAAAAAAUAARQAVQBQAUFVFABQFFAAAAABAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAABpybAAUAAAAAFAAAAAAAAABAAAAAAAAUAAAAEAAEABQAFBABAAAUUVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAUAAAAQFAAAAAAAAFBAAAAUAEABQQFAAEBmiJQZoICAKAKCgoAiqAAAAIAACAAgAAIAACAIAIAKgAAAAIAAAAAAAACgACAKAAooKACgqooKAAooAAAAIAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAANOTagAAAAAAAoAAAAAAAAAIAAAAAACgAAAAAgAAgAAKoAAAIAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAKAIACgAAAAAAAAAAAAAAAAAAAACgACAzREoM0EBAFAFABQUQUUAAAEAAABAAAQAAEABAEEABBQAAAEAAAAAAAAABQABAFAABVFABRFUUFAAUUAAAAEAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAG3JsAAAAAABQAAAAAAAAAAQAAAAAFAAAAAABABAAAFFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAFAEBQAAQFAAAAAAAAAAAAAAAAAAAFAEBmiJQZoJQQEUUAFBQUQUUAAAAEAAAABAAAQAEBAEEABBQAAAEAAAAAAAAABQAABAAFABVFBQVUUAFAAUUAAAEAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAG3JsAAAAABQAAAAAAAAAAAAQAAAAFAAAAAABAABFAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAARQAAAAABQQFAAAAAAUAAAEAAAABQAARQBAZoiUGaCUEBFAFBQUARVAFAABAAAAAAAQAAEBAQBBABUAAAABAAAAAAAAAAAUAAAQABQAVRQUFVFABQFFAAABAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABtybAAAAAUAAAAAAAAAAAAAAEAAAABQAAAQAAARQABQAAAAAEAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAARQAAAAAABQQAAAAFAUAAAEAAAABQAARQBASiM0GaCUEUQAFABQURVAAAAAAAAAAEAAABAQEAQQAVAAAAAQAAAAAAAAAAAAFAEAAAUFAUUFEVRQUABRQAAQAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAbcmwAAAFAAAAAAAAAAAAAAAABAAAAAAAAABAAFAFAAAAAAQAABQQUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAEUAAAAAAAAAAAAAAAVQAAAQAAAFAAABAFEESgzQZoJQRRAAAUFBRAFUAAAAQAAAAAAAEABAQBBAQUAAABAAAAAAAAAAAAAAAAUQAABQUFUUFEFFBQFAFAABAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAB0cmwAAAAAAAAAAAAAAAAAAAAEAAAAAAAEBQQBQABQAAAAEEAFAUABUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABQBAAAAAAAAAAAAAAAFAAAFQAAAFAAABAFRASgzQZoJQZUAAAUAFEUABQAAAQQBQAAAAABAARBAAQUAAABAAAAAAAAAAAAAAAAAUQABQAVRQUFVFBQAFFAAABAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAB0cmwAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAUAUAAAABBABQAAFAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAUAAAQAAAAAAAAAAAAABQAABUAAABQAAAQBUQEoM0GaCUEBFAAAFBQBAFABAAAAQAABQAAABAEEABBQAAAEAAAAAAAAAAAAAAAAAEUAAFBQVRQURVAFAUUAAAEAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAHRybAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAABQBQAAAEAEFEABQABVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAFAAAEAAAAAAAAAAAAAAAUAAAVABAUEUUEBQARFEBKDNBmglBARRAUAAFAEUAAAEAABAAAAUBQBAEAEBBQAAAAEAAAAAAAAAAAAAAAAABRAAFABVFBQVUUFAUUAAAAEAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAHRybAAAAAAAAAAAAAAAAAAAAAAQAAAQAAAAABRQAAAEAAERQABQABVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAFAAAAEAAAAAAAAAAAAAAAUUEABUEAAAUAAUEARRASgzQSgzQQEUAAAAUAAQAAABBQAAQAAAAAABABUAAAABAAAAAAAAAAAAAAAAAAAAUARQAUFUUFVFBQFFAAAABAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAB0cmwAAAAAAAAAAAAAAAAAAAAAAEAAEAAAAAUUAAABAAABEUAAUAUQUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABQABAUEAAAAAAAAAAAAAAAAUUEBUEABQRQAAAARRASgzQSgzQQEUAAAAUAAAQABBQAEAAAEAAUAEAFAQAAAAEAAAAAAAAAAAAAAAAAAABQBAFBQVRQVUUFAUUAAAAAEAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAHRybAAAAAAAAAAAAAAAAAAAAAAAQAAQAAAAFUAAAEAAAAEQFUAAEVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAAEAAAAAAAAAAAAAAAAAAUUBBAUAAEUAAAAEUQEoM0EoM0EBFAAAFAAAAAEBUAABAAAAABAAAUBAAAAAAQAAAAAAAAAAAAAAAAAAAFAAEUFBVFBVRQUBRQAAAAAQAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAdHJsAAAAAAAAAAAAAAAAAAAAAABAABAAAAAAUAAAAAAAEAAABVAAAAAAAAABAAUAAAAAAAAAAAAAAAAAAFAAAAAAAAAAABQBAAAAAAAAAAAAAABQQAAAUAUBABAUAEUUEBQQBFEBKDNBKDNBAFAAAAAAAAAARBQEAAAAAAAAABAAAAAAQAAAAAAAAAAAAAAAAAAAAFAAEUFBVFgKqKCgKKAAAAAACAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAADo5NgAAAAIAAAAACgAAAAAAAAAAAgAgAAAAAAKAAAAAAAACAAqgAAAAAAAAAgAAAKAAAAAAAAAAAAAAAACgAAAAAAAAACAoIoAAAAAAAAAAAAAACgAgAAoAoACAAAACKKCAoAIiiAlBmglBmgAigAACgAAgAAgCCgIAAACAAoAAIAAAAAACAAAAAAAAAAAAAAAAAAAAAoAAigoKosBVRQUBRQAAAAAAAQAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAdHJsAAABAAAAAAAUAAAAAAAAAAEAEAAAAAAAABQAAAAAAAAFAAAAAAAAABAAAAAUAAAAAAAAAAAAAAAFAAAAAAAEBQQAAABQAAAAAAAAAAAFAAAABAABQABQEAAEBQFAAAAVEBASgzQSggICKAAKAAACAAAgAAIAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAKAAIoKCqLAVUUFABVAAAAAAAAEAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAHRybAAAQAAAAAAAFAAAAAAAAABAABAABQAQAAAAABQAAAAAFAAAAAAAAAABAAAAAUAAAAAAAAAAAAAAFAAAAAAAEBQQAAAABQAAAAAAAAAAAAFAAABBQABQAAAEAAABQAABBRAQEoM0EoICAigACgAAAgAAIACAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgACKCgqiwFVFBQAVQAAAAAAAABAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAB0cmwAEAAAAAAAABQAAAAAAAAAQAAAQVQBEFURAEAAAABQBQAFAAAAAAAAAABAAAAAAUAAAAAAAAAAAFAAAAAAAAAAAAEAAAAAUAAAAAAAAAAABQAAABUAAAUAAABAAAUAAAAQUQEBKDNBKDNBAFAAAFAABAAAQAEAABAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAFAAEUFBVFBVRQUAFUAAAAAAAAAQAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAdHJsBAAAAAAAAAAUAAAAAAAAAEAAAUAAAAERAAAFAABBQBQFAAAAAAAAAABAAAAAAUAAAAAAAAAAFAAAAAAAAAAAAEAAAAAUAAAAAAAAAABQQFAAAFAAQBQAAAAEAABQAAABBRAQEoM0EoM0EAUBAAFAAAFQQBBQEABAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAFAAEUFBVFBVRQUAFUAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAdHJtAAAAAAAAAAUAAAAAAAAAAEAAUAAAEAAEEAFAAAAFQBQFAAAAAAAAAABAAAAAAUAAAAAAAAAFAAAAAAAAAAAAAEAAAAAUAAAAAAAAAAABQAAABQEAAUEABQAEAAUVAAAEAFEBASgzQSgzQQBQEAAUAAAAEBABUAABAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAFAAEUFBVFBVRQUAFUAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAdHJtAAAAAAAAAUAAAAAAAAAAAAEUAAAEAAAEEFAAAAAFARVAAAAAAAAAABAAAAAAAUAAAAAAAAFAAAAAAAAAAAAAAAEAAAUAAAAAAAAAAABQAAAABQEAAAAAUABABBVVAUAEQUAQEBKDNBKDNBAFAARQAUAAEABAQAVAAAAAAAQAAAAAEAAAAAABQAAQAAAAAAAAAAAAAFAAEUFBVFBVRQUAFUAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAdHJtAAAAAAAAUAAAAAAAAAAAAAAAEAAAAAABBBQAAABQEFFAAAAAAAAAAQAAAAAFAAAAAAAABQAAAAAAAAAAAAAABAAAFAAAAAAAAAAAAAUAAAAUABAAAAFAAQABQBQAAEQUAQEBKDNBKCAgIoACKCgAoAIACAgIAKgAAAAAAAIAAACAAAAAAoAAAAAIAAAAAAAAAAACgACKCgqigqooKACqAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAOjk2AgAAAAKAAAAAAAAAAAAAAAAAoIAAIAAAAIigAACgAIKKAAAAAAAAAAAgAAAAKAAAAAAAACgAAAAAAAAAAAAAAACAAKAAAAAAAAAAAAAoAAAAoAACAAAKACIKAKAKAAAAIAgICUGaCUEBAQBRQUQBQAAAAQEBAQEFAAAAAAAAQAAEAAAAABQAAAAAQAAAAAAAAAAAFAAEUFUUFBVRQUAFUAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAdHJsAAAAAAAAAAAAAAAAAABAAAUAAAAAAEAAEFAEBQAAEAVQAAAAAAAAAAQAAAFAAAAAAAABQAAAAAAAAAAAAAAAAABFAAAAAAAAAAAAAAUAAAUAABAAAAAAFQQFAFFAAAAAEQEBKCUGaCAgACgCiKACgAAgICAgIACCgAgAAAKAAgAAIAAAACgAAAAAgAAAAAAAAAAKAAAIoKooKCqigoAKoAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA6OTYAAAAAAAAAAAAAAAAACAAAKKgAAAAAAAgAgAoAAAAIoAACgAAAAAAAAAgAKAAAAAAAACgAAAAAAAAAAAAAAAAAAogAAAAAAAAAAAAAAoAoAAACAoIAAAAIAKCCqAoAAAAgCAgJQSgzQQEAAUAUFEUAAAAEBAQEBAAAQFABAABQEAABAAAAAUAAAAAEAAAAAAAAAABQAABFBVFBQVUUFABVAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbcmwAAAAAAAAAAAAAAAAAEAAABQAAAAAAAAQQAAUAAAEUAAABQAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAFAEAAAAAAAAAAAAFAAFAAAAQFBAAAAABAABRQABQAABAEBASglBmggIAAAooKIoAAAAICAgICAAAgAAAAAAoCAAgAAAAAKAAAACAAAAAAAAAAAoAAgCgqigoKqKCgAqgAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAANuTYAAAAAAAAAAAAAAAAAACAAAoAAAAAAAAAAiAAACgAAAAAAKAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAACAoCgACAAAAAAAAAAAACgCgAAAAAICggAAAgAAooAAoAAgCAAgJQSgzQQEAAAUUARQUAAAEBAQEBAAAQAAAAAUBAAAQAAAAAFAAAABAAAAAAAAAAUAAARQAVRQUFVFBQAVQAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAG3JsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAUAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAEAAAUAUEAAAAAAAAAAAAAFFAAAAAAQFABAAABAABRQBQAABAEABASglBKDIAIAAoAoigAAoIACAgIACAAgAAoAAACAAAgAAAAAAAAAAAAAAAAAAAKAAAAIoAKooKCqigoAKoAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAADbk2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAKAAAAAAAAAAAAAACgAAAAAAAAAAAAAACAAAAKAAAAAAAAAAAAAAoAAoAAAAAAAACAAACAAKoACgAAACIACAlBKCAgICAAAKAigAoAAIACAgAIACAACgAIAAAAACAAAAAAAAAAAAAAAAAAoAAAAAigAqigoKqKCgoCgAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAANuTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAKAAAAAAAAAAAAAAICggAACgAAAAAAAAAAAAAKAAKAAAAAAAAAgAAAgAACqAoAAAAgCAgJQSggICAgAACgAIoAAAAAIACAgAIACCgAAAAAAAIAAAAAAAAAAAAAAAAACgAAAACKCgKKCgqooKCgKAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAA05NqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAKAAAAAAAAAAAAAAAIAAAAAoAAAAAAAAAAAACgACgAAAAAAAAAIAAAIAKKAAKAAAIAAgICAgICAgIAACAqgIAoAAAAIACAgAIAKgAAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAogCgKKCgqooKCgKAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAA05NgKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAKAAAAAAAAAAAAAAIAAAAAAoAAAAAAAAAAACgAACgAAAAAAIACggCggKgAAgqqAAAAIAAgICAgICAgIAAAAoCAKAAAAACAAgICAACoAAAAAAAAACAAAAAAAAAAAAAAAoAAAAAKIAoCigoKqKCgoCgAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAANOTYAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAgAAAAACgAAAAAAAAKAAAAAAKAAAAAAAAgAKCAKCAoCKAAKAAAAAIAgICAgICAgAIAAAoACKAAAAAACAgAICACgIAAAAAAAAACAAAAAAAAAAAAAAoAAAAAKIAoCigoKqKCgAoCgAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAANOTYAAAAAAACgAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAICgAKAAAAAAAAAAAAAIAAAAAAoAAAAAAAAACgAAACgAAAAAAAAICgAgCggKAigACgAAAACAICAgICAgIAACAAKAKIAAoAAIACAAgIACAAAAgoAAAAAACAAAAAAAAAAAAAAAoAAAAKIAoCigoKooigAoCgAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAANOTYAAAAAAACgAAAAAAAAAAAAAAAAAAAAAgACgAACgAIAAAAAAAAAAAAAAAAgAAAKoAAAAAAAAAAAgAAAAAAACgAAAAAAKAAAAAAKAAAAAAAAAAAAgCggKAgAACigAAAACAICAgICAgAIAACAqgAIoAAAAAIACAgAIACAAAACoAAAAACAAAAAAAAAAAAAAAoAAAAKIAoCigoKoogCgoCgAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAANOTYAAAAAAAACgAAAAAAAAAAAAAAAAAAAgACgAAAACgAIAAAAAAAAAAAAAAgAKCAqgAAAAAAAAAACAAAIACgAAAoAAAAAACgAAAACgAAAAAAAAAAAIAAoIACoAAoAoAAAAAgCAgICAgIACAAAAKAKIAAoAIAACAAgIACAAgAAAAIKAAAAgAAAAAAAAAAAAAAKAAAACiAKAooKCqAigoKAoAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAADTk2AAAAAAAAAoAAAAAAAAAAAAAAAAAAAIAAoAAAAAAoCAAAAAAAAAAAAAAAAAAIooAAAAAAAAAIAAAAgAKAACgAAAAAAKAAAAAKAAAAAAAAAAAAAAAgCgiCgAACigAICgAIAgICAgICAAgAAAKoAogAAAAoAgCCAAgICAAAgAAAIKAAAAgAAAAAAAAAAAAAAKAAACgCKACqAKCqAigoAKoAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAADTk2AAAAgCigIAKAAAAAAAAAAAAAAAAAACACAACgKAAAAoCAAAAAAAAAAAAAAAICgAKAAAACggAAAAgAACAAAoAAKAAAAAAAoAAAAAoAAAAAAAAAAAAAAoAgCIKCAooAoAAAAAgCAgICAgIAACAAoCigCKAAoAgAAIAggICAAgAAIAACACgAIAAAAAAAAAAAAAAACgAAAoAigKKCgAqgIoKACqAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAA/9k=", + skyBoxBack: "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAFA3PEY8MlBGQUZaVVBfeMiCeG5uePWvuZHI////////////////////////////////////////////////////2wBDAVVaWnhpeOuCguv/////////////////////////////////////////////////////////////////////////wAARCAgACAADAREAAhEBAxEB/8QAGAABAQEBAQAAAAAAAAAAAAAAAAECAwT/xAAUEAEAAAAAAAAAAAAAAAAAAAAA/8QAFgEBAQEAAAAAAAAAAAAAAAAAAAEC/8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMRAD8AMqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAKACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAACAAAAAAAAAAAAAAAAAoAAAAAAAAAAAIAAACAAAAAAAoAAAAAAAAAAAAKAAAACggAAAAAAAAAAKAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAoAAAAAAAAAAIAAACAAAAAAAAoAAAAAAAAAAAAKAAAACggAAAAAAAAAAAKAACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAACAAAAAAAoAAAAAAAAAAAAAKAAACgAgAAAAAAAAAAAKACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAACAAAAAAAoAAAAAAAAAAAAAAKAAACgAgAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAoAAAAKCAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAKAAAAACggAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAKAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAIAAAAAACgAAAoAAAIAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACAAAAAAAAoAAAKAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAoAAAAAAAIAAAAAACgAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAIAAAAAAAACgAAAoAAAAAAIAAAACgAAAAAAAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAACAAAAAoAAIAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAoAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAIAAAAAAACgAAAoAAAAAAAAIAAACgAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAKAAAAAAAAACAoAAAAIAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAoAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAIAAACgAAAAAoAAAAAAAIAAACgAAAAAAAAAAAAAAAAAgAAAAAAKAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAgAAAKAAAAAAAAACgAgAAAAIAAAAAAACgAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAoAAAAAAAAAIAAACgAAAAAAAAAAAAAAAAgAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACgAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAoAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAAAAAAAAAAAAAAoAAKACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAKAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAACgAAoIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAoAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAoAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCAAAAAAAgAAAAAAKAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAoAAAAAAAAAIAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAgAAAKACAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAoAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAKAAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACgAgAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAoAAAAAAAAAIAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAAAAAAAAAAoAAAIAAAAAAACgAAAAAAAAAAgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAoAAAAAAAAIAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAAAACgAAAAgAAAAAAKAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAgAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAAKAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAKAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAKAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAACgAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAKAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAACgAAgAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAoAAAIAAAAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAKAAAACAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAKAAAAAACAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAKAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAAKAAAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAKAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAKAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAoAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACAAAAAAAoIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAACgAAAAgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAACgAAAAAAAAAAAAAAgAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAACggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAACgAAAAAAAAAAAAAAAAAAAgKCACgAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAACggKAAAAAAAAAAAAAAAAAAAAACAoIAAAKAACAAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAACoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAKCAoAAAAAAAAAAAAAAqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAgAAAAAAAKAAAAAAAAAAACAAAAAAAAAAoIAAAACgAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAKAAAAACAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAoAAAoAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAKAACAAAAoAAAAIAAACgAAAAAAAgKACAoAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAoAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAKAAACAAAAAAAAoIACgAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKACAoAAAAIAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIICggAAAAAAAAKAAAAAAAAAAACAAAAAAAAAoAAAAIooAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAoAAAAAAAAAAAAAAAAAAICggAAAAAAAAAAAAAAAACgAACgAAiAAAAAAAAAAAAAAAAAAAAoAAAAAoAIAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAKAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAIAAAKAACAAKAAAAAAAACAAAoAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAoIAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAoICggAAAAAAAAAKAACAAAAAAAAAAAAAAAoICgAAAAAAAAAgAKAAAAAAACAoAICggKCAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAIAAAAoAAAoAAAACAoIAAAAAAAAAAACgAAAACAAAAAAAAAAAAoAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAIAAAAAKAAAAAAAAAAAAACAAAAAAoAAAAAAAACgAAAAAAAAAAAAAACAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACggAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAoAAAAAICgAAAAAAAAAAgAAAAAAAKAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAACoAAAAAAAAAAKAAAAAACAAKAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgKAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAA0AAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAACAAAAAAAoAAAIAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAADYAIAACgAAAAAAAAAAAAAAAgAAAAAAAAKCAAAAAAAgAAAAAAAAAAAAAAAAAAAAKACAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAgAAKAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAoAANAAAAAAAAAAAoAAAAAAIAAACAAAAAAAAAAAAACIAAoAAIAAAAAAAAAAoAAAIAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAIAACgAAAAAgAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAoAAAANAAAAAAAAAAAAoAAAAAIAACAAAAAAAAAAACIAoAAAAAgAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAoAAAAAAAAIAAAAAAAAAgAAAACqCAAAoAAAAAAIAAAAAAAAAAAAAACgAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAACgAAAAAoAAAAAAKAAAACgoAIAAAACgAAAAAAAAAAAgAAAAIIAAAoIAAAAoAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAKAAAAAAAAAAgAAAAAAKAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAoAAIAAAAAAAAAAAACgAAAAoAAAAAKAAAACgAAAAAAAAAAAAAAAAAAAAggAAAAAAoAAAAgAAAAAAAIAAAACgAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAACAAAAAAIAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAICgAgKAACAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAoAAAAAAKAAAAIAAAAAAAAAAAAAAAAAAAgAAACgAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAIAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAKAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACgAAAAAAAoIIAAAAAAAAAAAAAKACAAAoAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAgAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACgAAAioAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAAAAAAAAAKgAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACggAKAAAAAAAAAAACAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAIAAAAAAAKAAAAAAAAAACAAoAIoAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAACggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICggKCAAAKAAAAAAAoAAAAgKAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAgKCAoAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAACAAAAAACAAAAAoAAAAAAAAAAAAAIoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAIAIAAACgAAAAAAAAAAAAigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAKACCKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAIAIoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAKAAAAAAAAAAAgigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICggAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAgKAAAAAAAAAAAAAAACAoAAAIAACggAAAAAAAAAAAAAAAAAAAAAKACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAKAACAoIAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACggAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoIAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKACAAAAAAAAAAAAAAoAIAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAAAAAoAAIAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAoIAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAKCAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAIAAACggAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAoIACgKIgKAKggAAAAKAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAgKAAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ACgAAgAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAADoAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAKAAACAAAAAAAAA6gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACAAoICggAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAKAAAAAAACAAAAAAAA7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAIAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAIAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAACAoAAAAAAAAAIAAAAAAADuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAgAAAAAAAIAAAAAAAAACgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAgAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAoACgACAAAAICgAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAO4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCAAAoAIAAAAAAAAAAAAAAAAAAAIAAAAACAAAAAAAAgAAAAAAIAAAAAAAACAAAAAAAAAAAAAAAAgAAAAAAAAAoACgAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAD0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAgAAAAAAAAIAAACAAAAAAAAgAAAAAAAAAAAAAAIAAAAAAAAACAAACgKAAAAAAAIAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAACAA9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAoICgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAIAAAAAAIAAAACAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAACAAAAACgAAAAAAAAigAAAAAAAAAAAAAAAAgAAAAAKAAACAAAAAAAAAA7gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAgAAAAAAAAAAAACAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAoAICgAAAAAAAAAAAAAAAAAAAAAAAIAAAAgAAAAAAgAAAAAAIAAAAAACAAAAAAAAAAAAAAAAAgAAAIAAAKAAoAAAgAAACgAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAD0AAAAAAAAAAAAAAAAAAAAAAAgAACgAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAACAAIAAAAAAAIAAAAACAAAAAAAAAAAAAAAAAAAgAAIAAAAAKAAACKAAAAACgAAAAAAAAAAAgAAAAAAAAAAAAAAAAIAAAADuAAAAAAAAAAAAAAAAAAAAAAAIAKoIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAgACAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAIAAAAAAAAAACgAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAA7AAAAAAAAAAAAAAAAACAAAACgAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoACAAAAAAAAAAAAAIAAAAAAAAIAAAACAAAAAAAAAAAoAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAOogAAAAAAAAAAAoAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACgAAAAAAAAAAAAAIgAAAAgAAKAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAOioAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACACgAACCAAAAAAAoAAAAAAAKoAAAAAAAIAAIAAAAAAAAAAAAAAAAAAAAADaoAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACACgAAAACAAoAAAAoAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAADSoAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACACgAAAAKAAAAICggAKCAAAoAAAAAAAAAAAAAAAAAAAAAAAAAgAAqoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAACiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAogAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgKCAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAIAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAKAAAAAAAAAAAAIAAAAAAAAAAAgAKCAAAAAAAAoAAAAAIACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAACgAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAgKCAAAoAIAACgAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAKAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACggKAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAoAAAAAAAIAAAAAoAAAAAAAAAIAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAoAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAoAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoCgAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAICgAgAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAgKAAAACAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAACAoAAIACgAAgKAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAoAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACggAAAKCAAoICgAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAACAAAAoIAAAAAAAAAAAAAAKAAAAAAAAAoAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACggAAAAAAKCAAqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAgAKAACAAAAAAAAAAAACgAAAAigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAIAAAAAAAAAAAAgAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAACgigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAACAoIACgAAAAAAAAAAgAAAAACAAAAAAAAAAAAAACggKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACggAKAAAAAAgAAgAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICggAAAAAACAAAAACgAAAAgAAAAAAAAAKCAAoIAAAAACggKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICggAACAAAAAAAACggAAAKACAoAIAAAAAAAAACgAgKACAAoICgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAoIgAAAAAAAAAAAAAAAAoIACggAKCAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAICgAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAgAAAAAAAAAAAAAAAAAKCAAoIACggAAAAAAAKAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAAAAAAAAAAAAAAAoAAAAICggAAAAAAAKCAoAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAIACggAKCAAAAAAoICgAAAAAgKACAAAAAAAAIKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAICgAAAAAAAAAAAAAAAgCAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAggKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAACACAoAICgAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAgAAAAAAgKAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAIAAAAAICggKCAoAAAAAAAAAAAAAAAACAACAoAAIACggAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAIAAAAAAICgAAAAAAAAAAAAAAAIAAIAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAAACAoAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAgKAAAAAAgAAAAAAAgAAAAAAAAAAAAAAAAKAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAICgAAIAAAAAAAAIAAAAAAAAAAAAAAAACgAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAgAAAAAAAAAAAAgAAAAAAAAAAAAAAAKAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACggAAAAAAIAIACgAAAAAAAAAAAgAAAAAAAAKCAAoIACgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAgAAAAKAAAAAAAAAACAAAAAAAAoAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAIAAAAACgAAAAAAAAAAgAAAAAKAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAIAACgAAAAAAAAAAAgAAAKAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAICgAAAAAAAAAAAgKCAAoAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAACggAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAgAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAgAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgKAAACAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAMgAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAKAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAADIAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAyAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAMgAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKDIAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAyAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAADIAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAoAAAAAAAAAAAAAKAAAAAAAAgAAAAKAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAADIAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAKAAAAAAgAAAAAAAAAAAAAKAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAADIAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAKAAAAAAgAAAoAAAAAAAAAIAAAAAAAAoAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAMgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICgAAAAAAAAAAAgAAAAAAAAAKAAAAAAAAAAAACgAAAAIAAAKAAAAAAAAAAAAAAAAAACAAAAAAKAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAADIAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAoAAIAAAAAAAAAACgAAAAAAAAAAAAAoAAAACAAAACgAAACgAgAAAAAAAAAAAAAAACAAAKAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAADIAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAKAAAAAgAAAAoAAAoAAAICggAKCAAAAAAAAAAAAIAAAoAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAMgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAoAAAACAAAACgACgAAAAAAAAgKCAqgCIAAAAAAAACAAAAKAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKADIAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAKAAAAAgAAAAoAoAAAAAAAAACgAACAoAIgAAAAAAAIAAAoAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACgAAAIAAAAqgAAAAAAAAAAoAAgKAACAIAAAAAAAACAAKAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAACgAAIAAAoACgAAAAAAAAAoAAAAAAAAgACAAAAAAgAACgAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAoAACAAAAKAAAoAAAAAAAAKAAAAAAAAAAAIgAAAAIAAAoAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAKAAAgAACgAAAKAAAAAAACgAAAAAAAAAAACIAAAACAAAKAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACgAAAIAAAoAACgAAAAAAAoAAAAAAAAAAAAIIAAAAAAgACgAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAoAAACAAAKAAAoAAAAAKAAAAAAAAAAAAAAIgAAAAAAIAAoAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAAAgAACgAKAAAAACgAAAAAAAAAAAAAAgAgAAAAACAKAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACgAAAIAAoACgAAAAoAAAAAAAAAAAAAAAAAIIAAAAAgACgAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAoAAACAAKAAoAAAKAAAAAAAAAAAAAAAAAAACCAAAAAIoAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAKAAAgACgKAAAACgAAAAAAAAAAAAAAAAAAACIAAAACAKAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAACgAAIAoACgAAAoAAAAAAAAAAAAAAAAAAAAAgCAAAAgCgAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAoACAKAAoAAAAKAAAAAAAAAAAAAAAAAAAAAIAgAAAIAoAAAAgAAAKCAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAD//2Q==", + skyBoxFront: "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAFA3PEY8MlBGQUZaVVBfeMiCeG5uePWvuZHI////////////////////////////////////////////////////2wBDAVVaWnhpeOuCguv/////////////////////////////////////////////////////////////////////////wAARCAgACAADAREAAhEBAxEB/8QAGQABAQEBAQEAAAAAAAAAAAAAAAECBAUD/8QAFhABAQEAAAAAAAAAAAAAAAAAABEB/8QAFgEBAQEAAAAAAAAAAAAAAAAAAAEC/8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMRAD8Aw2yAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAgAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAKAAAAAAKAAAAAAAoAAAAAAAAAAAAKAAAAAAAAAAACgAAAAAAAoCAAAAAACgAAAAAAAAAAAAAoAAAAAAAAAAAKAKAAAAAAAAoAAAAAAAAAAKAAAAAAAgAoAAAAAAAAAAAAAAAAAAAAACgAAAAADhaZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAQAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAFAAAAAAFAAAAAAAUAAAAAAAAAAAAFAAAAAAAAAAABQAAAAAAAVAAAAAAABQAAAAAAAAAAAAAUAAAAAAAAAAAFAFAAAAAAAAUAAAAAAAAAAAFAAAAAAQAAUAAAAAAAAAAAAAAAAAAABQAAAAAABwtMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAIAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACgAAAAACgAAAAAAKAAAAAAAAAAAACgAAAAAAAAAAoAAAAAAAAKAgAAAAAAoAAAAAAAAAAAAAAKAAAAAAAAAAACgCgAAAAAAAKAAAAAAAAAACgAAAAAAIAAKAAAAAAAAAAAAAAAAAAAAoAAAgAAOJpkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAABAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAUAAAAAAAAUAAAABQAAAAAAAAAAAAAAUAAAAAAAAAFAAAAAAAABQEAAAAAAFAAAAAAAAAAAAAABQAAAAAAAAAAAUAAUAAAAAABQAAAAAAAAAAUAAAAAAABAUEAFUAEAAAAEAAAAAABQAAFAEAAAAABxNMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAIAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACgAAAAAACggKAAAAoAAAAAAAAAAAAAAKAAAAAAAACgAAAAAAAAAoACAAAAACgAAAAAAAAAAAAAAoAAAAAAAAAAAAKAKAAAAAAAAoAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAgAKAAAAAAAAOJpkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAABAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAUAAAAAAAAUAAAABQAAAAAAAAAAAAAAUAAAAAAAAFAAAAAAAABQAAAEAAAAFAAAAAAAAAAAAAABQAAAAAAAAAAAAUAAAUAAAAABQAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHE0yAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAgAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAKAAAAAAAAAKAAAoAAAAAAAAAAAAAAAKAAAAAAACgAAAAAAAAAoAAACAAAAACgAAAAAAAAAAAAAoAAAAAAAAAAAAKAAAAKAAAAAAoAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADiaZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAQAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAFAAUAAAAAAAAAAAAAAFAAAAAAABQAAAAAAAAAAUAAAABAAAABQAAAAAAAAAAAAAUAAAAAAAAAAAAFAAAAAFAAAAAUAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxNMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAIAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAACgKAAAAAAAAAAAAAACgAAAAAAoAAAAAAAAAAAKAAAAAgAAAAAoAAAAAAAAAAAAKAAAAAAAAAAAACgAAAAAAACggKoAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADiaZAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAQAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAABRQAAAAAAAAAAAAAAFAAAAAABQAAAAAAAAAAUAAAAAABAAAAABQAAAAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAFUAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxNMgAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAIAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAooICgAAAAAAAAAAAKAAAAAACgAAAAAAAAAAAoAAAAAAAACAoIAKAAAAAAAAAAACgAAAAAAAAAAAAAoAAAAAAAAAAKAKAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOJpkAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAABAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAAAFAAAAAAAAAAAAUAAAAAAFAAAAAAAAAABQAAAAAAAAAAAAAEFAAAAAAAAAABQAAAAAAAAAAAAAUAAAAAAAAAAFAFAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHE0yAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAgAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACgACggKAAAAAAAAAAoAAAAAAAKAAAAAAAAAACgAAAAAAAAAAAAAAoCAAAAAAAAACgAAAAAAAAAAAAAoAAAAAAAAAAAKKAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOJpkAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAABAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAFAAAAFAAAAAAAAAUAAAAAAAAFAAAAAAAAAABQAAAAAAAAAAAAAAUBAAAAAAAAAABQAAAAAAAAAAAAAUAAAAAAAAAAFAFAAAAAAAAABFAAAAAFAABAAUAAAAAAAAAAAAAAAAAAAABxNMgAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAIAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAoAAAAAoAAAAAAACgAAAAAAAAoAAAAAAAAAAKAAAAAAAAAAAAAACgIAAAAAAAAAAKAAAAAAAAAAAAACgAAAAAAAAAAoAoAAAAAAAAIAAAAAAAoAAAAAAAAoAAAAAAAAAAAAAAAADiaZAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAQAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAABQAAAAABQAAAAAAFAAAAAAAAABQAAAAAAAAAAUAAAAAAAAAAAAAAFAQAAAAAAAAAAAUAAAAAAAAAAAAFAAAAAAAAAABRQAAAAAAAAQAAAAAAAAAABQAAABQAAAAAAAAAAAAAAAAAHE0yAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAgAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAACgAAAACgAAAAAAKAAAAAAAAAACgAAAAAAAAAAoAAAAAAAAAAAAAAKAgAAAAAAAAAAAAoAAAAAAAAAAAKAAAAAAAAAAACigAAAAAAgAAAAAAAAAAAAACgAAAAAAAAAACgAAgAAKACArjaZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAABAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAFAAAAAFAAAAAAAUAAAAAAAAAAFAAAAAAAAAAABQAAAAAAAAAAAAAAUBAAAAAAAAAAAABQAAAAAAAAAAAUAAAAAAAAAAFAFAAABAAAAAAAAAAAAAAAAAFAAAAAAAAAAFABAAAAAAUEcbSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAACgAAAAACgAAAAAKAAAAAAAAAAACgAAAAAAAAAAAoAAAAAAAAAAAAAAKAgAAAAAAAAAAAAAoAAAAAAAAAAKAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAONpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAQAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAABQAAAAABQAAAAAFAAAAAAAAAAABQAAAAAAAAAAAAUAAAAAAAAAAAAAFAQAAAAAAAAAAAAAUAAAAAAAAAAAFAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAHG0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAIAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAoAAAAAAoAAAAAACgAAAAAAAAAAAoAAAAAAAAAAAAKAAAAAAAAAAAAACgIAAAAAAAAAAAAAKAAAAAAAAAAACgAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAADjaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAEAAAAAAAAAFAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAUAAAAAAUAAAAABQAAAAAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAAABQAEAAAAAAAAAAAAFAAAAAAAAAAABQAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFABxtIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAACAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAKAAAAAAAKAAAAAAoAAAAAAAAAAAAKAAAAAAAAAAAAACgAAAAAAAAAAAAoAAACAAAAAAAAAACgAAAAAAAAAAAAoAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADkaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAEAAAAAAAAAFAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAAAAAAUAAAAAABQAAAAAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAAAABQAAEAAAAAAAAAAFAAAAAAAAAAABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHI0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAIAAAAAAAAKAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAoAAAAAAAoAAAAAACgAAAAAAAAAAAAoAAAAAAAAAAAAAKAAAAAAAAAAAAACgAAIAAAAAAAAAAKAAAAAAAAAAAACgAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAORpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAQAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAABQAAAAAAAABQQFAAAUAAAAAAAAAAAAAFAAAAAAAAAAAAABQAAAAAAAAAAAAAAUAABAAAAAAAAABQAAAAAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByNIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAACAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAKAAAAAAAAAAAAKAAAoAAAAAAAAAAAAAKAAAAAAAAAAAAACgAAAAAAAAAAAAAAoAAACAAAAAAAACgAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADkaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAEAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAUAAAAAAAAAAAAAUBQAAAAAAAAAAAAAAUAAAAAAAAAAAAFAAAAAAAAAAAAAAAABQAAEAAAAAAAAAFAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHI0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAoAAAAAAAAAAAAAAoCgAAAAAAAAAAAAAAoAAAAAAAAAAAAKAAAAAAAAAAAAAAAACgAAAIAAAAAAAAKAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAORpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAQAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUUAAAAAAAAAAAAAABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAFAAAAAAQAAAAAAUAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAcjSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAooAAAAAAAAAAAAAACgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAKAAAAAAAgAAAAAAoAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAA5GkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAABAUEAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAFAFAAAAAAAAAAAAAAAUAAAAAAAAAAAFAAAAAAAAAAAAAAAAABQAAAAAAAEAAAAAFAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAHI0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAIAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAKKCAoAAAAAAAAAAAAACgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAKAAAAAAAAgAAAAAoAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAA5GkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAABAAAAAABQAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAAAAAAAAAAAAAAAAABQABQAAAAAAAAAAAAAFAAAAAAAAAABQAAAAAAAAAAAAAAAAAAUAAAAAAAABAAABQAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAByNIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAACAAAAACgAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACgACgAAAAgKACAoAAAACgAAAAAAAAAAoAAAAAAAAAAAAAAAAAAKAAAAAAAAAgAAAoAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAA5GkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAABAAAAABQAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAABQAABQQAAAAAAAFBAUABQAAAAAAAAAAUAAAAAAAAAAAAAAAAAAFAAAAAAAAAQAAAUAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAcjSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAgAAAoAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAoACgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAKAAAAAAAAAAgAAoAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAA5GkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAABAABQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAABQAFAAAAAAAAAAABQAAAAAAAAAAAAAAAAAUAAAAAAAAAABAABQAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAByNIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAACAACgAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAACgAKAAAAAAAAAAACgAAAAAAAAAAAAAAAAAoAAAAAAAAAACACgAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAADkaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAFAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAFAAUAAAAAAAAAAAFAAAAAAAAAAAAAAAAABQAAAAAAAAAAAEFAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAHI0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAKAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAKoAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACgAAAAAAAAAAAIKAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAORpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAVQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAFAAAAAAAAAAAABQAEAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAcjSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAoAAAAAAAAAAKAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAKKAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACgAIAAAAAAAAACggAKCAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAORpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAUAAAAAAAAFAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAVQAAAAAAAAAAAAAUAAAAAAAAAAAAAAAFAAAAAAAAAAAAAABQAAEAAAAAAAABQAQFABAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAHI0gAAAAAAAAAAAAAAAACgAgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgKAAAAACgAAAAAAoAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAooAAAAAAAAAAAACgAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAKAAAgAAAAAAAAKAAAAACAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAORpAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAAAAFAABQAAAAAUAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAUAUAAAAAAAAAAABQAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAFAAAAAQAAAAAAAFAAAAABAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAHI0gAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAACACgAAKAAIoAKAAAACgAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACigAAAAAAAAAAAAKAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAoAAAACAAAAAoIAACgAAAAgAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAADlaQAAAAABAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAABAAQAUBEAAAFAUAUFEAUAAAAFAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAFFAAAAAAAAAAABFFAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAFAAAAAQAAAAAAAAFAABAUEAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAcrSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCAIAAIACACogAAgAAKACgKKCiAKAAACgAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACgCgAAAAAAAAAgKAoAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACgAAAAAAIACggAAAAKAACAoIAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAA5WkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAEQAAAQAEFQBBAAAQAFABQUBRQUQBQAAAUAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUUAAAAAAAAAAABQAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAFAAAAAAAAAAAQFABAAUAEBQQAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAABytIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoACACAAAAgIAKiCAAgAAAAAKCgoCiiKACgAAoAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAooAAAAAAAAAAAAIooAICgAAAAAAAAAAAAKAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAICggKCAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAOVpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAQAAQAAAEBBUAQQEABAEAAFAUUFBQVQEUAFAABQAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAFUQFAAAAAAAAAAAAUAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAEBQQAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAABytIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoCAAAACAAAAgAIKgCCAgIAgAAAAoCigoKCqAKIAoAKAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAKKAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAIAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAA5WkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABAABAAAAAAAQAEFRBAQAEAQQAAAFBVFABQUFUAUFEAAUAAAAAAAAAFAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAABVAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAQAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABytIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAACCAAAAAAAAgAICCiCAgAICIAAAAKACqKCgAoKAooKIAoAAAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAACqAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAgAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAADlaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAEABQQQAAAAAEAABABUQQAEBAEEAAAAABQAVRQUAFBQVQEUFAAAAAAAAABQAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAVQAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAEAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcrSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAgAAgAAAIAAACAAgqIAICAAiAACAAoAAKCgKKCgAoKooKIAoAAAAAAAAKAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAACqAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAgAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAADlaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAEBQQAQAAEABAAAQUBEAEBAARABAAABQRQAUAFAUUFBQUFUUQBQAAAAAAAAAUAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAFUAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAHK0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAIAAAAIACAAgAIKAiACAAgAIgAgAAoAAACiAKACgAqigoKooKIAoAAAAAAAAKAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAooAAAAAAAAAAAACgAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAgKACAoIAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAA5WkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAABAUEAEABAAQEFEEABAAQEAQAQAAUAAAABQBAFABQFFBQaBVARQAAAUAAAAAFAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUUAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAQFBAUEAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcrSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAgAIACAgqIIACAAgCCAAACgAAAAAAKAIAoAKCqKCgqigogAAAACgAAAoAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAACigAAAAAAAAAAAAKAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAACAoICggAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAADlaQAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBQQAQAEABARFQEBAQABBAAABQAAAAAAAFAAEAUAFBVFBQVRRFAAAABQAAAUAAAAAAAAAAAAAAFAAAAAAAAAAAAAAABQBQAAAAAAAQFBAAUBQAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAQAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAABytIAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAgAICIrIAICAIIAAAAKgKAAAAAAACgACAKCgqigoKooAigAAAoAAAKAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAoAAoAAAAAAAIACgiigAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAICggAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAADlaQAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBQQAAQAEABARFZBAQAEQAAAQUABQAAAAAAAAUAARQUBRoFBQFFEUAAAFAAABQAAAAAAAAAAAAAUAAAAAAAAAAAAAAAFAAAAFAAAAAABAAUBQAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAQAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAABytIAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACAAgAIDKKgICAIIAACACgAKAAAAAAAACgACKACqKCgoKooAigAoAAAAKAAAAAAAAAAAAACgAAAAAAAAAAAAAAAoAAAoICgAAAgAKAAoAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAIAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAA5VQUAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAABAAQEBBUQQEBAEEAABBQAFAAAAAAAAAABQBAFBQVRQUFUUARQAUAAAAAFAAAAAAAAAAAABQAAAAAAAAAAAAAAUAAAAAUEABQQAAFAAUAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAEAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAciooACgACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIACAAgIioCAgICIAAAAAAoAAAAAAAAAAAIoAKCgKKDQKAooigAoAAAAAAAKAAAAAAAAACgAAAAAAAAAAAAAAAoAAAAAAoAICggKCAoCgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAgAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAADkVAFAAUAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAUEAAEABAQEFRBAQEAQQAAAAAUAAAAAAAAAAAEAUAFABVFBQUFUURQAUAAAAAAAAFAAAAAAAABQAAAAAAAAAAAAAAUAAAAAAAAAUEABQAFAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAABAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAHGqKACgAKAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgKAAAACAAACAgAICIqAgICIAIAAAAAAAKAAAAAAAAACAKAACgoKooKCgKKIoAAAAAAAKAACgAAAAAAoAAAAAAAAAAAAAAAKAAAAAAAAAAKCAoACgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAgAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAADjVAFABQAFFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAQEABkVEEBAQBBAAAAAAAABQAAAAAAAAAQABQAUAFUUFBQUBRRAAAAAAFAABQAUAAAAAFAAAAAAAAAAAAAABQAAAAAAAAAAAAABVAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAABAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAHGqAKACgAAqgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgKACAAAAAAACAAgIKzqCAgIAggAAAAAAAAAoICggKAAACAAAAKACgAqigoKACqAFAAAABQBFBQAUAAAAFAAAAAAAAAAAAAABQAAAAAAAAAAAAABQFAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAABAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAHEoogCgoAAKoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAICAgqaggMgAiCAAAAAAAAAAAAAAAAAAAAAAAoAKACqKCgAtAoFAAABQFFBRFABQAAAUAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAFUAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAcSigCKACgAqgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAoAAAAIAACAAgM6ipoICAgCACAAAAAAAAAAAAAAAAAAAAAAoAKACqAKBQUAAAAFBQVRRAFBQAAAUAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAFUAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAcQCiiKACgAoCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAoACggAAAAAAgAAICAgqaggICAgCAAAAAAAACAAAAAAAAAAAAAAAoAAKACqAAKAACgoAKo0IAoKAACgAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAoIooAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAACAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAOEFBVARQUAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABAAUEAAAAAAAAAAEAABAQEFRBAQEABAAEBQAQAAAAQAAAAAAAAAAAAAAFAABQAAVQBQAUFBVGhFABQAAUAAAAAAAAAAAAAAFAAAAAAAAAAAAAAABRQAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAEAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAcIAKCqKIAoAKAAAoAAICgAAAAAAAAAAAAAAAAAAAAAAACgAAAAAIAAAAAAAAAAAAAAAIACAAgIKiCAgIAAAAAAACIAAAIAAAAAAAAAAAAAAACgAAoAKoAoKCg0ooigAoAAKAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAooAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAACAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAOAFABQVRRAFABQAAAAAAAFAAAAAAAFQAAAAAAAFAAAAAAAAAABAAAAAAAAAAAAAAAAAABAAQAEBBUQQEAABAAAAAARAAAABAAAAAAAAAAAAAAAUAAFABVFBQUGlFBRAFAABQAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAFAFAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAQAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAB56CqKACgqiiAKACgAAAAAAAKCAoqAAAAAAAAAAoAAAICgAAAAAAAgAAAAAAAAAAAAAAAAAAAgAIACAgqIIACAAAAgAAAIgAAAAAgAAAAAAAAAAAAAKACgAqigoKCg0oCKCgAAoAAAAAAAAAAAAKAAAAAAAAAAAAAAAACgACgAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAIAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAA89ABVAFBQVQEUAFAABQAAAAAAAUAAAAAAAAAAAAAAABQAAAAAQAAAAAAAAAAAAAAAAAAAAAQAEABAQUBEEABAAAAQAAEQAAAAQAAAAAAAAAAAAAFABQAVRQUFBQVRRFBQAAUAAAAAAAAAAAAFAAAAAAAAAAAAAAAABQBQAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAEAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAecgAoCigoAKCqKIAAoAAAKAAAAAAAAAAAAACgAAAAAAAAKAAACAAAAAAAAAAAAAAAAAAAAAACAAAgIAKgIgAgIAACAAAiAAAACAAAAAAAAAAAAAAoAKACqKCgoKCqKIoAKAACgAAAAAAAAAAoAAAAAAAAAAAAAAAAKAKAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAgAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAADzUFABQFFABaC0AFUBFAAABQAUAAAAAAAAAAAAAAAAFAAAAAUEAAAAAAAAAAAAAAAAAAAAAAAAAAEABAAQEFRABAQAAEABEAAAEAAAAAAAAAAAAAABQAUFAUUFBQUFUUARQUAAFAAAAAAAAABQAAAAAAAAAAAAAAAAUAAAUAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAABAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAHmooIAoAKAooALQWgUAFAUBFABQAAAUAAAAAAAAAAAAAAFAAAAUEAAAAAAAAAAAAAAAAAAAAAAAAAAEABAAQEFRBAAQAEABEAAAEAAAAAAAAAAAAABQAUAFBVAFBQUFAUURQAUAAFAAAAAAABQAAAAAAAAAAAAAAAAUAAAUAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAABAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAHmooAAIAoAKAooFBaABQWgAoCiiAAAKAAAAAAAAAACgAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACAgIKAiCAgAIACIAAIAAAAAAAAAAAAACgAAoKAooKACgoKAooAigAoAAKAAAAAACgAAAAAAAAAAAAAAAoAAAoAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAACAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAPMRQAFAAAEUAFAAUUAAFABQAWgUCqFEKBQKBQAWgAAAoAAKAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIACAgqIICAAgAIgAgAAAAAAAAAAAAAKAACgAqigAoKACgAqgCgogCgAAoAAAAAKAAAAAAAAAAAAAAACgAACgAAAAAAAAAAKAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAIAAAKAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAA8xFAAAAAUAARQAAUAAFUAWgUCgtAoFAoFAoFAoFAoLQFRQAUAFAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEABAQVEEABAQEAQQAAAAAAAAAAAAAFAABQAUBRQAUFABQAUBRQBFBQAAUAAAAFAAAAAAAAAAAAAAABQAAABQAAAAAAAAAFAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAEAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeYigAAAAAAKAIAoAAAKAAooFAoFAoFAoFBaBQKBQWgAoCooAKCgAAoAAAAAAAKAAAAAAAAAAAAAACAAAAAAAgAIACAgqIIACAgIAggAAAAAAAAAAKAAAAACgAqgCgAoKACgAoCigCKCgAoAAAAKAAAAAAAAAAAAAAACgAAACgAAAAAAAAAKAAAAAAAAAAAACgAIAAAAAAAAAAAACgAAAAAAAAgAKCAACgAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPMRQAAAAAAAFAAAEUAAAAFAAAAAAUEABRQAAUFABQVUAUFABQAAAAUAAAAAAAAAAAAAAAEAAAAAAABAAQAEBABUQQAEBAQBBAAAAAAAUAAAAAAAFAAAABVFABQUAFABQFFBRAFABQAAAUAAAAAAAAAAAAAAAFAAAAAFAAAAAAAAAUAAAAAAAAAAAFAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB5iKAAAAAAAAAoAAAgACgAAAAAAAAAAAoAAKoAoKCgCKooKACgAAAoAAAAAAAAAAIAAAAAAAAACAAAgAAIACCiCAgAICAiCAAAAAAAoAAAAAAAKAAAAACqAKCgoAKCgKKCiAKACgAAAoAAAAAAAAAAAAAAKAAAAAAAKAAAAAAAAoAAAAAAAAAAKAgAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADzEUAAAAAAAAABQAABAAAAAAAAAAAFAAABQAUBRQUFABVRQUAFAABQAAAAAAAAQAAAAAAAAAEAABAAQAAAEAFEEABAQEBEEAAAAAABQAAAAAAUAAAAAAFAUUFBQUFAUUFAEUAFAAABQAAAAAAAAAAAAAAUAAAAAAAAUAAAAAABQAAAAAAAAAAUBAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHmIoAAAAAAAAAACgAACAAAAAAAAAAAAKAACgAoCigoKACqigoAKAACgAAAAAAgAAAAAIAAAACAAgAAIAKAAAAIIACAgICIIAAAAAACgAAAAAAAoAAAAAKoAoKCgoKCqKIAoAKAAACgAAAAAAAAAAAAAoAAAAAAAAAoAAAAACgAAAAAAAAAAAoCAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPMRQAAAAAAAAAAAFAAEAAAAAAAAAAAAUAAAFABQUBRQUFAEVRQAUAFAAAAABAAAAQAAAEAAABAAQAERQAAFAUAAEEBAQEBEEAAAAAAABQAAAAAAUAAAAFUAUFBQUFBVFEUAFAAABQAAAAAAAAAAAAAUAAAAAAAUEBQAAAAAAFAAAAAAAAAAAABQEAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeYigAAAAAAAAAAAAKAIAAAAAAAAAAAoAAAKAACgAoKoAoKIqigAoAKAAAAACAAgAAIAACAAAAgCCCgIAACgAoCgAAggJoIDICCAAAAAAAAAAoAAAAKAACqAKCgoKCgqigogCgAAAoAAAAAAAAAAAAAKAAAAAAAKAAAAAAAAoAAAAAAAAAAAAAKAgAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACg8tFAAAAAAAAAAAAUQAAAAAAAAAABQAAAAUAAFAABQFFBQUFEFFBQAUAAAAAEABAAQAEAABAEAEFAQAAAAAFBQFFEBUQQE0E0EBEEAAAAAAAAAAABQAAUAFUAUFBQUFBVFBRAFAAABQAAAAAAAAAAAAUAAAAAAUAAAAAAAABQAAAAAAAAAAAAAAUBAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAB5aKAAAAAAAAAAogAAAAAAAAACgAAAAAoAAAKAACgAqgCgoigqgCgAoAAAAAIACAAgIAACIAAIKAgAAIACgAoKAoogCCiCaDOggIggAAAAAAAAAAAKACgAoCigoKCgoKooKIAoAAKAAAAAAAAAAAAACgAAACggKAAAAAAAAAoAAAAAAAAAAAAAAAKAAgAAAAAAAoAAAAAKACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAADy0UAAAAAAAAEUAAAAAAFAAAAAAAAABQAAUAAFABVAFABQUQBVFABQAAAAAAQAEABAAQABBAABUABAAAAAUAFBVAQAFRBAZ0EBEAEAAAAAAAAAABQAUFAUUFBQUFBVFBRAFAABQAAAAAAAAAAAAAUAAAAAAUAAAAAAABQAAAAAAAAAAAAAAAAUABAUEAAAAAAFAAAAABQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAeWigAAAAAAgCgAAAAAoAAAAAAAAAKAAACgAoAKoAoAKACiAKooAKAAAAAAAACAAgAIACAAAIIAKgAAIACgAoKoACAqIAMggIAggAAAAAAAIACgAAoAKCqKCgoKCqKIoAKAACgAAAAAAAAAAAAAoAAAAAAAAoAAAAACgAAAAAAAAAAAAAAAAoACAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAADy0UAAAAAAEUAAAAAFAAAAAAAAABQAAUAAFABVFABQAUQBQFFABQAAAUAAAEAAABAAQAEAAABAEEAFAQFAABVAAQAFRBAQEBAARAAAAAAAAAAAABQUFUUFBQUFUURQAUAAFAAAAAAAAAAAAABQAAAAAAAAABQAAAAFAAAAAAAAAAAAAAABQAEAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAHlooAAAAAIoAAAAAKAAAAAAAACgAAAAoAKCqAKCgAogCgKKACgAAAoAAAAAAAIAACAAAgAAAIACAAIEFAFAFEAAQUQQEBAQEABEAAAFABAAAAAAUFBVFwFwFBQVRRFABQAUAAAAAAAAAAAAAAFAAAAAAAAAAAAFAAAUAAAAAAAAAAAAAAAFAAAQAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAeWigAAAAKIAAAAAoAAAAAKAAAAAAACgAoKAooKAIoKAooAKAAACgAAAAAAAAAAAgAAIAACAAAAgAAEAgAKACAAgqIICAgIAAggKAAAAAAAAAAACguKNYC4C4CqKIoKAACgAAAAAAAAAAAAAoAAAAAAAAAAAAAAoACgAAAAAAAAAAAAAAoACAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAADzEUABAAUQAAAABQAAAAAUAAAAAAFAABQAVRQUAFEUFUAUAAAFAAAAAAAAAAAAAABAAAQAAEAAAAAAAABQQAEBEVNBNBAQEABEAFAAAAAAAAAABQFGsBcBrAXAVUUFAABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAUBQAAAAAAAAAAAAAVAUEAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHmIoAAAIAAAAAoAAAAAKAAAAAACgAAoAKooAKCiKACqKAACgAAAAAAAAAAAAAAAAAgAIAACAAoAAAAAAAAIADOoqaCaDIIACIAAKAAACgAAAAgKACqLgNYC4DWKKIoAKAAAAAAAAAAAACgAAAAAAAAAAAAAAAACqAAAAAAAAAAAAAgoAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPMRQAQAAAABQAAEAAAFUAAAAAUAAFABQAVQBQUFEAVQBQAUAAAAAAAAAAAAAAAAAAEABAAQAFAABQAAAAAAQE0GdRU0GdBAQBBAAAAUAAFAAAAAAAUUFwGsBrAXFFEUFAAAAAAAAAABQAAAAAAAAAAAAAAAAAAUUAAAAAAAAAAQAUAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHmoAIAAAACgAIAAAAKAAoAAAAoAKACgAqgCgoAigoCigAoAAAAAAAAAAAAAAAAAAAIACAAgKAACgAoAAAAICAmgmorOgmgyCAIIAAACgAoAAAAAAACig1gLgNYCqKIoKAAAAAAACgAAAAAAAAAAAAAAAAAAoAoAAAAAAAAAAgAoAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPNQAAAAAAEAAAAAFAAUAAAUAAFABQAVRQAUARQUAFUAAUAAAAAFAAABAAAUAEAAAABAAQAAAAFABQAAAAAQEBNBNRWdBNBkAEQQAAAFABQAAAAAAAUFUXAXAawFwFVFABQAAAAUAAAAAAAAAAAAAAAAAAFFAAAAAAAAAAAEAFAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB5qAAAAAAAgAAAAAqgAAACgAAoAKACqAKCgogCgAqgACgAAAAoAAAAAAAAAAAAIAACAAAgAKAACgAAoAIAACAzoJqKmgzoICAiAAAAAACgAAAAAAAoKouAuAuA0CqAKIAoAAAKAAAAAAAAAAAAAAKAAoAAAAAAAAAACAACgAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAgAAAAKAAAAAAAADzkAEAAAAAAAAAABQAAUAAFAABQAVQBQUAFEUFAUAUAAAAAFAAAAAAAAAAAAAABAAAQAAAAFAABQAAAAQAEBNBNQZ0VNBAQEBEAAAAFAABQAAQAAFAUUGsBQUFBQFFABRAAFAAAAAAAFAAAAAAAUAAAAAAAAAABAAABQAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQFBAAAAAAUAeegAAAgAAAAAAAKAACgAoAKAACgAKKACgoKIAoKoAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAgAICAiCaKgICAgIgAgAKACgAAAAgAAKACqKCgoKCgAoKooAigAAAACgAAAAAAKAAAAAAAAAAAgAAAAoAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAACAAAAAAAAAAABQKBQAAAAAAAAAcIAAIACAAAAAAoAAKACgoKBAICxQAAABQAUFEUBRQAAUAAAAAAAAAAAAAAAAAAAAAAEAAAABQAAAAAAAAQAEBEEFQEBAQEBEAAAFAAAAABAAAAUAFUUFBQUFBQUBRQUAAAAAAAAAFAAAAAAAAAAAAQAAAAUAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAACggFQKBQKBQKBQKBQKBQKCUCgUCgUCgUCilBaBQKBQKBQKDjEAQAEABAAAAUAAFBQAUFBYoQFgAAAAAAAKCgogCqAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAgIggqAgICAiCAAoAAAAAAIAAACgAoCigoKCgoKCgqigAAAAAAoAAAAAAAAAACAAAAAACgAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAgFAoJQKBUCgUCgUEoFAoFAoFAoFAoFAoFFSgUCgUCgUCgtAoFAoFAoFBzCAIACAgAAAAAKACgAoKooKCgAQAAAEABQAUFAEVRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAEQQVATQZBAQBAAAAAAAABAAAAAUAFBVFBQUFwFBQUFUAAAAUAAAAABAAAAAAAAAAAABQAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAASgUCgUCgUCgUEoFQKCUCgUEoFAoFAopQSgUCgUCgUCgUCgUCgUEoFAoFAoFBaBQKBQKBQKBQfEQBAAQEABAAUAFABQAUFUUFBQAAAAAQAAAFBQBFBVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAABAAAAAQBBBU0GdBNBAQEQAAAAAAAAQAAAAFABQVQBQawFwFBQUAFAUAUAABAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFABAAAAAAAAAAAAAAAAAAAAAAAAAQACgAUCglAoJQKBQKBQKBUCglAoJQKBQSilAoFAoFAoJQKBQKBQKBQKBQKBQKBQSgUCgtAoFAoFAoFAoFBhUARABAQEAABQAUAFABVFBQUFAAAAABAAAAAUAFEUBQAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAQAAAAEQQE0VNBNBnQQBBAAAAAAAAQAAAAFABQAVRQUFBQaABQUAAAFAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAoFAoFAoJQKBQKBQKBQSgVAoJQKBQSgUCgUCgUEoFAoJRSgUEoFAoFAoFAoFAoFAoFAoFAoJQKBQKBQKBQKBQKBQKBQWgUCglAVAEBEEABAAAAUFABQFFBQUFABQAAAQAAEABQAUAFEAFAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAARAFZ0E0E0GdBAEEAAABQQAAEAAAABQAAUFUUFBQUFBQUAFAABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAQCgUCgUCglAoFAoFAoFBKBQKBQKBUEoFBKBQKCUCgUUoFAoJQKBQKCUCgUCglAoFAoFAAAAAAAAAAAAAAAAAAAAAAAAABpUQAEBEEABAUAFBQFFABQUAFBQAAAAAAQAAAAFABQBAAAAAFAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAQEFQE0E0GdBEAEAFAUQABAAAQAAAUEUAFABVFBQUFBQUAFBQAAUAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAACggFAoFAoJQKBQKBQKCUCgUEoFAoFAoFAoJQKBUCgUCglAoJQKKUEoFAoFAoFAoJQKBQKACAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAANKgACAiCAgAAKCgKKCgAoAKACgAAAoIAAACAAAoAAKAAAAAAAAIAAAAACggKCAAAoIACgAAAAAAAAAAAAAIAAAACAgJoJoM6CIAIAKoAgACAAAgAAoAACiAAKCgqigoKCgoAKACgAAoAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAIABQKBQKBQKBQSgUCgUCglAoFAoJQKBQKBQSgUCglAoFAoFBKBUCgUCilAoFBKBQKCUCgUCglAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAoNqiAAgIggIACgAoKooAKAACgAAoAAAAAAAAICgAAAAoAAAAAAAAAAAAAAAAAAAAAAIAAAAAACAAAAAUCgUAAAAEBAQE0EQQEAAFUAQABAAQAAVAAAUAARQAUFABpRQUAFBQAUAFAAAABQAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAEAAAAoFAoFBKBQKBQKBQSgVAoFAqhQKCUCgUCglAoFAoJQKBQKglAoFBKKUCglAoFAoFAoFAoFAoFABAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABQAbVAEBEEBAAQFBQAVRQAUAAAFAABQAAAAAAQAAAAFAAAAAAAAAAAAAAAAAAAAAAAABAAAKBQSgUCgUCgUCgUCgUCgUCgUEBAQEQQAEAAFUAAQBAAQAVAAAAAUAAFEAUFBQFFBaC0CgtAoLQKCgAAoAAAAAAAAAAKAAAAAACAAAoAAAAAAAAAAFAAAoFBKBQKBQKBQSoFAoFAoJQKKUCgUCglAoFAoFAoJQKBQKCUCgUCgUEoFAoJQKBQSgUCgUCgUCgAAUAAAAEAAAAABAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAFAAAABQAAbVAEQQEBAAQFBQUAFUUAAAAAFAAAAAAAAAAAAAAAAAAAAABQAAAAAQAAAAAAAAAEAoFAoJQKBQKBQKBQKBQSgUCgUCgUCgUEBEAEBAABQAFABBAEAFQAAAAAAFAABQBFBQUBRQKC0CgtAoLQKC0CgUCgtAoFAoFAoFAoFAoLQAAAQCgUCgUCgUCgUCgUCgUCgUCgUCgUCoFAopQSgUCgUCglAoFAoJQKBQKBQKBQSgUCgUCgUCglAoFAoAIAAACAAAgAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAoAAAKAgAA2qAICAgIACAoKACgoAKAAAoAAAAAAAAAAAAAAAAAAUAAAAAAFABAAAAUAAEAAABAAKBQSgUCglAAAoFAoFQKoUCgVAqhQEAEBAAQAEFAUAAAAAEBAAAQAFAABQAAUAFEAUABRaBQKC0CgtBaBQKC0CgUCgUCgUCgUCgtAoFAoFAoFAoFAoFAoFAoFQKKUEoFAoLQKBQSgUCgUCgUEoFAoFAoJQKBQKCUCgUCgUCgUCgUCgUEAAAAAAAABAAAAAQAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAFAQAAAAbVAEBAQEBAAUAFBQUAAAAAAAAAAABQAAQAASgUCgAAAoAAAAAAAAAAAKAAAACAAAgCgCIAAIAAAAAAAAAAAAAACAAAgAIAKAAoAAAIACAAgAAKAACgAAoAAKAIAAAUFoFBaBVFoFAoLQKBUCgUCgUCgUCgtAoFBaKUEoFAoFAoFAoFAoFAoFAoFAoFAoFBKBQKBQKBQSgUCgUCglAoFAoFBKBQKBQKBQAAAAAAAAAAAAAAAAAAQAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAUAAAAAFAAAAAAAAAAAAAAABQAAEFAAAAABpUAQEBBQEABQAURQAUAAAAAAAAAEAAABAAAAAAAAABVAAAAAAABQAAAAABAAAEBAAAQAAAEAAAAAAAAAAAAAABAAAQAUAAABQAQAAEABAAAUAFAABQAAAAAAAAAAUQBaBQKKtAoFAoFAoFAoFBaBQKBQWgUCgUCglAoFAoFAoFAoAAAAFAAoFAoFBKBQKBQKBQSgUCgUCgAgAAAAAAAAAKAAAAAAAAAACgAAgAAAIAACAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAACgAAAoAAAAAAIAAACgAAAqAAAAAAADSiAAgIAggAKoAoAKAIAAAAAAAAAgAAAIAAAAAAKAAoAAAAAAKAAAAACgAAAAgAiAgAAIAAAAAACAAAAAAAAAAAAAgAoAAAAAAAAACAAAAAAAoAAKAAAAAAAAAAAAACgAAAoAAAAAAAKAACgAAAAgAAAAAAAAAAAAAAAIAAAAACAAIACgAACAAAAAAAIKAAAAACgAAAAoAAAAAAACiAAAgAAAIAAAAAAAAAAAAAAAAAAAAAAAAACgAAIKAAACgAAgAAAAAAAAKAAAAAAACgKIAggAAIACgAqgAAAAAAAAAAAACCAAIAAAAKAoAACAAAACgAAAAAoAAKoAAAgIACACIAAAAACAAAAAAAAAAAACgAIAAAAgAqgACAAAAgAAAKAAACgAAAAAAAgAAAKAAAACgAAAAAoAAAAAKAAAAAAAAAgAAAKCAAAACAAAAAgAAAAAIAAAAAAAAAAAAAACgAAAAoAAAKAACgAAoIAAACAQCKIAACAAAAAAAAAAAAAAAAAAAAgAAAKAACoAAAKAAAAAAAAAAAAAAAAAAAACgAAgAIAAAAAAAACgAKAAAACAoAgAAAIAIAACgAAACAAACgAAAAAAoAAAKACgAigCAgAIAAAIAAgAAAAAIACgACqAgAgAAAAAAAAACgACAAAAAAAAoAAAAAAAAAAAAAAAAAKAAAAAAgoAAAAAKAAAAAAAAAAAAAAAAAAACAAAAgAAAIAAAAAAAAAAAAAAAACgAAoAAAKAACgAoAAKCAAAAQEAgEBIBAICAAKAAAAAAAACAAAAAAACAAAAoAAAKAACgAAAAAAAAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAACAAKIAAAAACoAAAAAAAAAKAAAACgAoAAAIoAgAIAAAAAggAAACgCCAKKIAKAAAAACAAAAoAAAAAIAAoIAAAAKAAAAAAAAACAKCCgAAAAAAAoAAAAAKAAAACgAAAAAAAAAAgAAAAAAAAAIAAACAAAAgAAAAAAAAAAAAAKAACgAAoAAKAACgAoAAAAAAAAIBAICQCAQEgEAgEAAgEAAAAAAAAAgEAgEAgEAgAEAgKAACgAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAACAAAAgAAAACggAAAoAAAAAAAAAAKAACgAAAAgAIAAAAAACAAAAAAAAAAoAKAAACAAAAAAoAAAAIAABAAAAAUAAAAAAAAAAAACAAAAAAQFAAAAABQAAABQFAAAAAAAAEAQAAAAAAAAAAEAABAAAAQAAAAAAAEAABQAAAAUAFAABQAAAUAAFABQAAAAAAAAQAAEgAEAgJAIBAIBAAAAIBAWAQCAQEgEAgEAgEAgEBYBAAAUAAAAAAAAAAAAAAAAAAEAABQAAfMAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAUAAAAAFAAAAAAAABAAAAAAAAAAQAAAAFAABQAAUEAAAAABQAAAAAIBASAQCAsAgAEAgAAAAAAEAgEAgEAgAEBQIBAIBAIBAABVAAAAAAABQAAAAAAAQAAAQAFBAAAAAAEAABAIBAQCAQAAACAAAgLAAAAAAUAFAABQAAAAAUAFAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAgAAAAKAD5AAAAAAAAAAAAAAAAAAAAgAAAAAIAAAAAAAAAAAAAAACgAAAAAAoAAAAAAAAAIAAAAAAAAAAAAACgAoAAAAAAAEBQAAAAAAAAAIBAABQAAAAAAAACCEAgAAAqgAAAAAAAAAoAAAAAAAAAAKAAAACAAAAAAAAAAAAAAgAgBASAQCAQEgEAgEAgEAgEAgAEAgAKAACgAoAAAAAAAKAAACgAAAAAACgIAAIAAAAAAAAAAACggKAAACAAoIAAAAACgKAAIAAAAAAAgAAAAAAAAAAAAAKK+QgAAAAAACAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACgAAoAAAKACAoAAAAAAAAAAAAoAAAAAAAAAAAAAAACgAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAIgAAAAEAgJAIABAIAACgQAAAFAABQAAAAAAAAUAAAUAAAAAAAAAAABAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAFAAfIQAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAACAQCAQCAQCAoAAAKAAAAACgAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAACAAAAAAAAAAAKAAAAAAAAAACgACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAIgAAAAAAAAAAAAoAAAAD5iAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAABAAAIBAIBAIABAAAAUAAAAAAAAAAAFAgEAgAAAAAEAgEAgAAKAAAAAAAAKoAAAAgKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAIACgAAAAAAKAAAAAAAAAICggKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAgCACggAKAAACAoAAAAADAgAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAKAAAAAAAAAAAAAAAACgAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAICgiCgAAAAAAAAAAAAAMiAAAIAAAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAAACgAAAAAAAAAAAAAAACgAKCAoAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAICggCCggAAKAAAAAAAAAAggACAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAACgAAAAAAAoAAAAAoICgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAIgAoICgAAAAAAAAAAAIIAAAAAgAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAoAAAAKAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACCAAAoICgAAAAAAAAAAgACAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAoAAKKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAICgAAgCAACggKCAoAAAAAAAAgCAAIoAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAoAAAAAAAKAAAAACgAooAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAIAAAAgAAAoAAAAAAAAAAgACAIAoAAAAAAAAAAgAAAAAAAAIAAAAAAAAAAAAAACAAAAAoAAAAAAAAKAAAACgCgKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAoAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAIAAgAAAoAAAAAAACgiAAAAIgCgAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAKAAAAAACgCgKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAoAAAAAAAAAgKAAACAAAIAKAAAAAAoAAAIgAAAAggqiIKAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAKAAKoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICgAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAICgAAgAAAAKAAAAAAAAAyAgAAAAKAAgAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAoCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAKAAAAAAAAAyAAgAAACCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAoAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAACAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAACgAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAKCAoAAAAAADICAoAAIAgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAoAAAIACgAgAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAoAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAAMgIgAKACAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAgAAAAAAAAAAAAAKCAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAACgAAAAAAMogAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAICggAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAIAAKoAAAMogAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAooAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgACAoAAIAAAAAAAAAAAAAAAAAgAKKAAAAAAAAAAAAAAAAAAAACAoIAAAAAAAgAAAAAAAAoiAAAAAAAIoAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAKAIAAgKACAoAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAICgAAAAAAAAAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAIAAAAAAAAAAAAAAAAgAAAoIAoAoAAAAAAAAAAAAAAAICgAgAAAAACAAAAAAAAAAAIAAAAACggAKAAAAAAAAAAAAAAoIAAAACgAAAAIAAAAAAAgAAACAAoAAAAAoAAAAoAAAAAAAIAAAAAAACgAAAgAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAogAAAAAACAAAAAAAAAAAAAAAAAAACgAAAAAAAAKAAAAIAAAAAAAAgAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAACgAAAgAKAAAAAAAAAAgAAKAAgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAICggKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAAAAACAoAAAICggACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAoAAAAIAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAoAAAAAgKAAAAAAAACAAAAoIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgKCAAAAAAKAACAAAAAAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAKAAACAoAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAACAoAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAIAAAAAAAAAACgAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAKIAAACgAAAgKCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoIAAAAAAAAoAAAAIAAKAAACAAIAACgAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAACAAAAAAAAoAAICgAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAACgAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAgACgAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAACgAAAIAAIAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAACAoAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAACAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAACgAAAAIAIAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAACAAoAAAAAgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAKAAACAAAAoAAAAAAIAAACAAAAoAAAAAAAAgAAKCAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAACgAAAAAAAIIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAKAAAAAIAAAAAAAACgACAAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAgAAAAAKAAAAAAAAIAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAKAAAAACIAAAAAAAAAAAAAAAAAAAAAAAACAAAAoAAAAAoAAAAIAAAACgAAIAAACoAgAAKAAKIAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAKAAAACAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAgAAAIAAAAAAACgAAAAAAACAAAAAAAAKAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAKAAACAoAAIAAgAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAACgAAgAAAAACCgAAAAgAgoAAAIAoAAAAAACgAAAKAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAgAAAAAAAAAACgAAAAAAgAAAKACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAKAAAAAAAAACAAACgAAAACIAAAoIAoAAAAAAAACgAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAACAAAAAAAAAAoAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAoAAAoIAAAgAAAAoAAiACgAgAAKAAAAAAAAAAAAoAAACgAAAAAgAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAACAAAAAAAAAoAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACggACgAAAAgAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACgAAAAAgAAAAoiACqAAAIgoAAICgAAAAAAAAAAAAAKAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAoAAAAIAAAAAAAAAAAACgAAAgAAAAAAAAAKAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoIAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAACAAAIAAooAIgAoAAAICgAAAAAAAAAAAAAAAAKACAAAAAAAAAAoAAAAAAAAAAAAACAAAoAAAIAAAAAACgAAAAAAAAAAAAAgAAAAAAAKAACAAAAAAAAAAAAAAoAAIAAAAAAAACgAAAAAAACAAAAAAAAIAAAACgAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAACgAAAgAAAKCAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAIIoAIAAAAoAoAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAACAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAAAACgAAgAAAAAAAAAAAAAKAACAAAAAAAAAoAAAAAAAAgAACAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAoAAAAAIAAAAAAAgKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAAAoAAAIAAAAACgAAAAgKAAACAAAAAAAAoAAAAAAAAAgCAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAACAAAAAAoAAAAAAAAAoICgAAAAAAAgAACCgAgCgAAAAAAgAAAAAAAAAAAAAAAAAAAAAACAoIAAoIAAAAAAAKCAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAAAAKAACAAAAAAoAAAAAAAAAIAAAAAAAACgAAAAAAAACAIAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAACgAAAAgAAAAAAAAKAAAAAKCAAoAAAAICgAAgAAAKgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAACggAAAAAAAAAoICgAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAoAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAKAAAAAAAAAIgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAKAAAAKAAAAAACAoAAIACgAAIAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAACggAAAKACAoAgAAAAAAAAAAAAAAAAAAAKgAKAoAAAAAAAACAAAAAAAAAAAAAAgAKAAAAAAAAAAACgAAAAAAAAAAAgAAAAAAAAAAAAAAKAACAAAAAAAAAAAAoAAAAAAAAAIIAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAoAAAoAAAAAICgAAAAAAAAIAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAACggAAAAAAAKIAAAAAAAAAAAAAAAAAAAAgKAqgAAAAAAAAgAAAIAAAAACgAAAgAAAAKAAAAAAAAAACgAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAACAAAAAAAKAAAACAAAAAoAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAoAAoAAAAICggKAAAAAAAAgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAKCAAAAAAAAACKAAAAAAAAAAAAAAACAoIAAACqAAoAAAAIAAAACAAAAAAAoAAAIAAAAAAAACgAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAgAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACgACgAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAoAAAAAAAAAAAAIAAAAAACqAAAAAAAAAAAAgAAAAAAAAKAACAAAAAAAAAAAoAAAAAKAACAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAACgAAAAAAAAgAAAgAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACAAoAAAAAAAAAoACgAAAACAoICgAAIAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAoICgAgKACAoIAAAAAAACqAAAAAAAAAAAAgAAAAAAAAKAACAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAIAAAAAAAAAAAgAAAAAKACAAAAAAAoAAAAAAAAAAKAAAAAAAAAAAACAAAAAoAAAAAAAAAAoAICggAACgAACoAAAAAIAAAAAAAAAAAAAAAAICgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAooAAAAAAAAAAAAgAAAAAAAKAAACAAAAAAAgKAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAAAAAAAIAAACggAAACAAAAAAAAAAAAAAAAAoAAAAAAAAKAAAAAAAAAAAACAAAAAAAoAAAAAAAAoICggAAAAAAAKAAAAAACAACAoAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACggAAAAAAAAAoAAAAAAoAAAAAAAAAgAAAAAAAKAAACAAAAAgAAAAAKAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAAAAAAAAAAICggAACAAAgAAAAKAAAAAAAAACgAAAAAAoAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAgAKAAAAAAAAKAAAAACAACAAoAAAAAAAAAAAAAAAAAAAgACCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAoAAAAAAAAAoAAAAAAAAAgAAAAAAAKAACAAAAAAgAAAAAAAKAAAACgAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAgAAIAAAAAAACgAAAAAAAoAAAAAKAAAAAAAAAAAAACAAAAAAAAoAAAAAAIAAAAAAAACgAAACgAAAACIAAKAAAAAAAAAAAAAACAoAAAAgACAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAoAAAAAAAAAAoAAAAAAAAAAgAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgCAAAAgAAAAAAAKAAAAAAACgAAAAAoAAAAAAAAAAAAIAAAAAAAAACgAAAgAAAAAAAAAAAKAAAKAAAAAIgAAAAAAoAAAAAAAAAIAAAAIAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAoAAAAAAAAAAAAAoAAAAAAAAgAAAAAAAAAAAAAAIAAAACAoAAAAAKAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAIAAACAAAAAAAoAAAAAAAAKAAAAAACgAAAAAAAgAAAAAAAAAAAAAAKCAAAAAAAAgAAAKAAKAoAAAAAACIAAAAAAAAKCAAoIAAAAAAAIAAAAAAAACgAAACgAAgAAAAAAAAAAAAAKCAAAAAIACgAAAgAoAAAAAAAACAAoAAAAAACgAAAACAAAAAAAAAAAAAAAgAAAAAIACgAAAAoAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIgAAAAIAAAAACgAAAoAAAIAACgAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAKCAoIgAAAAAqgAAAoAAAAACIAAAAAAAAAAAAAAAAAAAgAAAAAAAAAKAAKCAAAoAIAAAAAAAAACgAAgAAACAAAAAACgAAAAAAAAAIAAAACgAAAAAAKAAAIAAAAAAAAAAAAAACAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCAAAAAAAAAAAAKAAAAAACAAAAoAAAAAAAAAAAAAAIAAAAACgAAAAAAAAACgAAiAAAAACgKAAACgAAAAIgAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAoAAAICggAAAAAAAAAAKCAAAIAAAAAAAKAAAAAAAAAAgAAAAAAKAAAAAAAoAgAAAAAAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIIAAAAAAAAAAAoAAAAAAIAAAAACgAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAKACAIAAAAKAoAAAAKAAACIgAAAAAAAAAAACgAAAgAAAAoIAAAAAAoAAoAAAAAAAIAAAAAAAAAAAAAAgAAAAAAoAAAAAAAACAAAAAAAAAAAoAAAAIAoAAAAAAAAAAAAAgAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAACAAoAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACACAAAAAAAqgACAAAAAAAIAAAAAACgAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAKACIAAAAKAoAAAAAKCAAIgAAAAAAAAAAAAAAAAAAAKAACAAAAAKAKAAAAAAAAAAAACAAAAAAAAAAIAAAAAAAKAAAgAAAAAAAAAAAAAAAAAKACAAKAAAAAAAAAAAAAIAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAIAAAAACqAAAICggAAAACAAAAAAAAoAAAAAAAAIAACAAAAoAAAAKAAAAAAAAKAAAAgAAAKAAAAAAAAAAiAAAAAAAAAAAAAAAAAAAoAAIAAAAAAooAAAAAAAAAAAAIAAAAAAAAAAAgAAAAAAoAACAAAAAAAAAAAAAAAAAAAAAAAKAAIAACgAAAAAAAgAAAAAAAAAAAAAAKAAAAAAgKAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAIAAAIAACqAAAAAAAAIAAAgAAAAAAAAKAAAAAAACAAAgAAAAKAAAAAAAACgAAAoqAAAAAAAAAAoAAAAIAAiAAAAAAAAAAAAAAAAAAAAoIAACgAgACgCgAAAAAAAAAAAgAAAAAAAAAACAAAACgAAAIAAAAAAAAAAAAAAAAAAAAAAAAoAgAAAAKAAAAAAACAAAAAAAAAAAAAoAAAACAAAAAoAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAIAAgAAAAAAAAKAAAAAAACAAAgAAAAKAAAAAAAAACgAAooACAAAAAoAAAAAAAIAAiAAAAAAAAAAAAAoAAAAIAACgAAgAAAACigAAIAAAAAAAAAIAAAAAAAoAAIAAKAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAIoAAAAAoAAAAAAAIAAAAAAAAAAAACgAAIAAAAAAAACgAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAgAAAAAAKAAAAAAAAAAAAAACAAAAAoAAAAAAAAAAAAgACAAAAAAAoAAoAAAAIAgAAAIAAACgAAAAAAAAAoAAKKAAAAAAAAAAAAAAAgACIAAAAAAAAAAAACgAAAgAAAAAAAAAAAAKAAAAACAoICggAAAAAAAAAAAAAKAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAIoAAAAAoAAAAAAAAIAAACAAAoAAAAKAAgAAAAAAAAAAAKAAAACAoAAAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAACgAAAAAgAAAAKAAAAAAAAAAAAAAAAAIgAAAKAAKAAAAAACIAAACAAAAAAAAAAAAoAAKAAKoAAAAAAAAAAAAAAIAAiAAAAAAAAAAAAoAICggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAIoAAAAoAAAACAAAoAgAAIAAACgAAAoCAACgAgAAAAAAACgAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAiAAAAgAAAAAAAAAAKAACgAACqAAAAAAAAAAAAACAAIgAAAAAAAAAAAKAAAACAAAAAAAAAAAAAAoIAAAAAgAAKAAAAAAAAAAAKAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAIoAoAAAAACAAAAAogAAIAAACgAAAoCAAAAAAAAAAAAAoAAAAAAAAAAAAAAICgAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAIIAAAAgAAAAAAAAAKAAAACgACgAKAAAAAAAAAACAAAIgAAAAAAAAAAAKAAAAAACAAAAAAAAAAAoIAAAAgAAAAAAKAAAAAAAAKAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAKIAAACAoAAAAKgAAAAAAAAAAAAKAAIAACgAAAAAAAAAAICgAAAAAAACgAAAAgAAAAAAAAAAAAAgKAAAAAAAAoAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAggAAAACAAAAAAoAAAAAAAKAAKAAAAoAAAAAAAAIAAAiAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAKAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACggAAAAAAAAgCgAAAAAACgIAAAAAAAAAAAIoAAAAAAAAAoAAAACAoICgAAAAAAAAAACgAAgAAAAAAAAAAAAIACgAAAAAAoAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAgAgAAAACAAAAAoAAAAAAAAAKAAKAAAAAoAAAAAAIAAAiAAAAAAAAAAAoAAAAAICgAgAAAAAAAAAAAACAAAAAAAAAAoAAAAqAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAKAAAAACCgAAAAAAAAAgAACgAAACAoAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAoAAAAAAKAAAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAIAIAAAAAAgAAKAAAAKCAAAAAAAqgAAAAAAoAAAAAAIAAiAoIAAAAAAACgAAAAAgKAAACAAAAAAIAAACgAAgAAAAAAAKAAKAAAgAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgCgAgAoAAAAAAAAIAAAAAAAogAAAAAKAACoAAAAACgACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAIIAAAAAAAAACgAAAAAAAAAAAAKAAAAAAACgAAAAAgCAAAAAAAAAAAAAAAAAIAAAAAAAAAAgAAAKKCAAIAAAAACgCgAAAAAIACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAgAAAAAAAAAAIAoAAAAqAAACgAAAAKAIAAAAAACgAAIAAAACgAAAAAAAAAAAAAAAAAAAgAKKgKAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAgAgAKAAAAAAAAAoAAIAAAAAAACgAAAAAAAoAAAAAIgAAAAAAAAAAAAAAAAAACAAAAAAAIAAAACgCgAAgCAAAooAAAAAAACAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAoAAAAAAAAAAAAAAAIAAAAAAAAAACAAAAAAAoAAAKAAAAoAgAAAAAAAAKgAAAAAAAKAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAACgAAAAAgAAAAAAKAAAAAAACgAAAAiAAAAAAAAAAAAIACgAgAAAAAAAACAAAAAoAoAICggKCAoAAAAAAAAACAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAAACAAoAAAAAAAACgAAAAAAAAAAgoAAAAAAACgAAAAAAAAAAAAAAAgAAAAAAAAAAAKAAKAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAoAAAAAAIAAAAAAAACgAAAAoAAAAIgAAAAAAAAAAAACAoIAAAAAAAAAgAAAAKAAKAAAAAAAAAAAAAAAAgAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAKAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAACACgAAAAAAAAKAAAAAAAAAAAAACAAAAAAAAAAAAAAAoAAoAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAAgAAAAAAAAAAKAAAACgAAAiAAAAAAAAAAAAIACggAAAAAAACAAAAAoAoAAAAAAAAAAAAAACAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAKAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACgCggAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAoIAAAAAAAAAAAAAACgAAAoAAAIgAAAAAAAAAAAAACAAAAAAAAAIAAAAKoAAgKAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAACgCAAAAAqAAAAACgAAAAAAAAAKAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAKAAACIAAAAAAAAAAAAgAAAAAAAAAACAACgAiigAAAAAAAAAIAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAACiAAAAAAqAAAAACgAAAAAAAKAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAgAAgAAKoAAAAAAAAAAAAAAAAAAAAAAAKAAAACgAAiAAACAAoAAAAAgAAAAAAAAAAACACggKAAoAAAAAAAIAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAACiAAAAAAIKAAACgAAAAAAAAKAAAAAAAAAICgAAAIAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAACAACAAAAAAqgAAAAAAAAAAAAAAAAAAAAAAoAAAAAKADKAAICgAgAAACgAAAAAAAAAAAAgAAAAAoAAAAAAAAAAAAACAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAACgAAAAAgAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAigAAAAgoAAAAKAAAAAAAAoAAAAAAgAAAAAAKAAAAAAggKAAAAAAAAAAAAAAAAAoAAAAAAAAAAgAAAAAAAgCAAAAAoAoCgAAAAAAAAAAAAAAAAAAAAoAAAAAAAKDKAIAAAAAAAAAAoAAAAAAAIAAAAAAAAKAAAAAAAAAAAAAAgAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAIAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAoAIAKAAAAAACgAAAAAKAAAAIAAAAAAAAAAAAAAAAAgAAAAKCACgAAAAAAAAAKAAAAAAAAIAAAAAIAAgAAAAAAAAKKAoAAAAAAAAAAAAAAAAAAAKAAAAAAAACIAAgAAAAAAAAAACgAgAAAAAAAAoICgAAAAAAAAAAAAAAAIAAAAAAAAAAAAAACggAAAAAKAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAKAAAAAoAAAgAAAAIAAACgAAAAAAAAAIAACgAAgAoAAAAAAAAgKAKAAAAAAIAAAACCAAAAAAAAAAAKKAAoAAAAAAAAAAAAAAAAAKAAAAAAAAACIAAAgAAAAAAAAAAAAAAAAAKACAoAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAACoACgAAACAAAgAAAAgAACigAAAAAAACAoAAAIAKAAAAAIAACgACgAAAACAAAAAggAAAACAAAoAAAqgAAoAAAAAAAAAAAAAAAAAKAAAAAAAAACIAAAAgAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIKAAoAAgAAAIAAAIAAAAAAAooAAAAAgKAAACAACgACAAAAAAAoAoAAAgAAAAAIIAAAAgAAAKAAACigAKAAAAAAAAAAAAAAAACgAAAAAAAAAAiAAAAIAAAAAAAAAAAACggKAAAAAAAAAgAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIoAAAoACACgAAKIAAACAACAIAACgAAAAoAoAAAgAKAAACACiAoIAAAACgAAACiAAAAAAACIKAAAACAAAAAAAqgAoAAAAAAAAAAAAAAAAAKAAAAAAAAAACIAAAAAAAgKCAAAoICgAAAAAAAAAAAAAIAAAACgAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAoAAAAAAAAAIAAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAICgAAAAAAgCgAAACoAAKAAAogAAAIAACCAAAAKAAACgCgAAAAAAACAACiAoAAAAAAICgCggggqgAAAAAAIAAAAAAIAACgAKACgAAAAoIAAAAAAAAAACgAAAAAAAAAAAiAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAACAoAAAAAAIAAoAAIKAAACgAAigAACAAAggAAACgAAoAAoAAAAAAAAAgCAKAKAAAAAAAACAqAKAAAAAAAAAIAAAAAAAACgAAoAAAKAACAAAAAAAAAAAoAAAAACAoICgCIAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIACgAAAAAAgAAAAKAAACgAgACgACAAACIAAACgAAoAoAAAAAAAAAAiAAAKKAgAAKAAAAAAAoAAAAAgAAAAIAAAAAAACgAAoAAKAAACAAAAAAAAAAAAoAAAAAAACAoiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAoIAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAoAAAAAAIAAAACgAAAoAIAAAoAAgAAIIAAAoAAKKAAAAAAAAgKAIIAAAAoAAAAACgAAAAAKAAAAAAIAAACAAAAAAAoAAKAACgAAAgAAAAAAAAAAAAKAAAAAgAAKIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKACAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAICgAAAAAAAAAAAKAIAAAIgAKAAAKAoAAAAAIAAAAIqAAAKAAAAAAAoAAAAACgAAAAgAAAigACAAAAAoAAKAAACgAAAgAAAAAIACgAAAAAoAACAAAAoiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAogAAAAiCqIACgAAAAAAAAAAAgCoAAoAAAAAAACgAAAAAAAKCAAICgAIAoAAAgAKAAACgAAAoAAIAAAAACAAAAAoAAAAKAAAgAKCCAAAAAAAgAKAAAAAAAAAAAAAAAAACAAAAAAAAAAAAgAAAAKAAAAAAAAAAAACgAAAgAAAAAAKACAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACiAAAACAoAAAAAAAAAAAAAIAqAAKAAAAAAAAoAAAAAACggAAACAoACKAAAAAAAAKAAAACgAAgAAAAIAAAAAACgAAAAoAACAACAAAAAgAAAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAgAAAAAAAKAAAAAAAAAACgAAAAAAgAKCAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAACgAAAAgAAAAAACggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKIAAAAAAAAAAAAAAAAAAIAIKAKAAAAAAAAoAAAAAAAAAAAAAgKCACqgAgKAAAAoAAAAAAAAAAAAAIAAAAAACgAAAAoAAAAAIgAAAAgAAAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAgAAAAAAAKAAAAAAAAAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAKACAAAAAAAAAAAAAAAAAAoAAAIAAAAAAogAAAACACgAAAAAAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAogAAAAAAAAAAAAAAAAAggoAoAAAAAACgAAAAAAAAAAAAAACAoIAAKAoCAAAoAAAAAAAAAAAAAAIAAAACgAAAAAAoAAAAAIgAAAgAAAAAAKAAAAAAAAAAAAACAAAAAgAKAAAACAAAAAAAAAAoAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAoAIAAAAAAAAAAAAAAAAACgAAgAAAAIoAAAAAAAIAKAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAACiAAAAAAAAAAAAAAAAAqAICgAAKAAAAAAAAAAAAAICgAAAgAAAKCAACqAAAAAAAAAAAAAAAAAAAAgAKAAAAAAAAACgAAAAiAAACAAAAAAAoAAAAAAAAAAAAAIAAACAAAAAoAAIAAAAAAAACgAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAKACAAAAAAigACAAAAoCACgAAAAAAAAAAAAAAAgACgAAAAAAgAAAoAAAAAAAACiAAAAAAAAAAAAAAAqAAAACgAAAAAAAAAAAAAAAAAAAACAAAoAICioCgAAAIAACgAAAAICggKAAAAAAAAAAAAAAAKAAAACIAAIAAAAAAACgAAAAAAAAAAAAAgAAAIAAAAAAAAAAAAACgAAAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIoAAgAAAKAgAoAAAAAAAAAAAAAAIAoAAAgAAKAAgAAAoAAAAAAAACiAAAAAAAAAAAAAqAAAAACgAAAAAAAAAAAAAACAAAAoIACggAKCAAoAoAAAgAAAAAKAAAgAAAKAAAAAAAAAAAAAAKAAAACIAIAAAAAAACgAAAAAAAAAAAAAAAgAAIAAAAAAAAACgAAAAAAAAAAAAAAAAoAAAAAAAAAAAIAAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAKIACAAAAoCACgAAAAAAAAAAAAAgCgACAAAAAAoACAACgAAAAAAAAAigAAAAgqgAAAgAAAAAAAoAAAAAAAAAAAAAAAAgKAACAAAAAAoAAAAAAogAAAAAAAKAAAgAAAAKAAAAAAAAAAAAAAKAADKAAAAAAAACgAAAAAAAAAAAAAAAAgAAAIAAAAAAACgAAAAAAAAAAAAAAAAAoIAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAICgAKAAAAAACAAACKAAIAACgIAKAAAAAAAAAAAACAKAIAAAAAAAACgIAKAAAAAAAAAAACKACCgAAAAAAAAAAAAAAoAAAAAAAAAAAIIKAAAAqoAAgAAKCAoICgAAACiAAAAAAAAoACAAAAAAAAAAoAAAAAAAAAAAAAgACAAAAACgAAAAAAAAAAAAAAAAAgAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAAACAAoAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAigACAoCAACgAAAAAAAAAAAAgCiAAAAAAAAAAoCACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAqAAAAAoACoAgAAAAKAAAAAAigAAAACgAAAIAAAAAAAAAAACgAAAAAAAAAACAAAIAAKAAAAAAAAAAAAAAAAAAACAAAAAgAAAAAKAAAACgAAAAgAAAKAAACAAAAAAAAAAAAAAAoAAAAAAAAIAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAigAgAAAoAAAAAAAAAAAAIAAogAAAAAAAAKAAgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAKgCAAACqAAACoAAgAAKAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAoIACgAgAAAigAAgAoAAAAAAAAAICgAAAAAAAAAgAAAAIAAAAACgAAAoAAAAAAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAAgAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAKAAAACCggAAIAAAAACgAAAAAAAAAAAAgACiAAAAAAAAoACACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAoggAAAAAKAoAAKgCAoAICgAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAigAAAgoAAAAAAAAAIACgAAAAAAAAgAAAAIAAAACgAAAoAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAACgAAAAAgAAAIAAAAAAACgAAAAAAAAAAAAAAAAAAAAoAIAAoAAAIKCAAAAgAAAAKAAAAAAAAAAAACAAKIAAAAACgAAIAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAIAqAAIAAAACigKAAAgAoAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAioCgACCgAAAAAAAAAAAAAAAAAAAAgAAAAAIAACgAAAoAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAACgAAAgAAAIAAAAAAAACgAAAAAAAAAAAAAAAAAoAAAAAAIAoAAAIAAAAIAAACgAAAAAAAAAAAAAgAAIAoAAoACAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAACAKAgCAAgAAKACigKAAAgAoAAAAAAAAAAACggKCAAAAAAAAAAAAAAAAAAAAAAACgAyqAAogAoAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAKACAAAAAgAAAAAAAKAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAgAAAAAIACgAAAAAAAAAAAAAAgAAAIoAoACAAAACgAAAAAAAAAAAKCAAAAAAAAAAAAAAAAAAAAAAAAAACAKAAiAAAgAAAAKACigKAAgAoAAAAAAAAAACggAAAAAAAAAAAAAAAAAAAAAAAAoAAMqgAigAKAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAgAAAAAACggAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAoAACIACAAAAAAAoAKKAoACCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAMiAAoAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACAAAAAAKACAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgCgAACACAIAACAAAAoAKCigKACoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAADIgKAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAACgAACgAIAAAAAIAAAAAAAAAAAAAAAAAAAAAACAAAAAAKCAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgACgAACAACAAIACAAAAAoAKKoKAAgoAAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAoAAAAAMgAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAoAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgoAAAAAIAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAoAAgAAAAAiAAAgAAAAAKCgooCgIKAAACAAAAoAAAAAIAAAAACgAAAAAAAAAAAAoAAAAAMgAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAKAAAAKAAgAAAoAIAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAIACgAAAAAgAACiAAAAAAAACIAACAAAgKACgoAqgoACCgAgAAAAAKAAACAAAAAAAAoAAAAAAAAAAAKAAAAADIAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAKAAAAAAKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAACgAAgAAAAAAAAIoAAAIKAACAAAKIAAAAAAACACAAAAIAAAACgCqCgoACAAAAAAAAACgAAAgAAAAAAKAAAAAAAAAAAACgAAAAgAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAACgAAAAAAgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAoAAAAIAAAAAAACKAAAACAAAAogAAAAAAAAIAIAAAAgAAAAKCgAooCgAIAAAAAAAAKAAACAAAAKCACgAAAAAAAAAAAAAAoAAIAAAAACAAAoAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAoAAAIAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAKACAAAAAAAAAoAAAIAAAAAAACAKAAAAAAAIAAAAAAAACAACAAAAAAICgAAoAqgAoAAACAAAAAACgAAAgAAAAAAAKAAAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAgAAAAAAKAAAAAAAAAAAAAACAAAKAACACgAAAAoIAAAAAAAAAAAAAAAAAAAAAACKAAAAAIAAAAAAAAAACAAAACAAAAAAKACigAAKAAAAAgAAAAoAAAIAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAKIAACgIAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAKAAIAAAAAAAAAAACAAAAAAAoAAAKAAAAAAAAACgIAAAKAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAKAAAAIAAAACoAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAKAAIAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAoCAACgAAgAAAACggAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAIAAoAAAAgAAAAAAKgAAoAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAgAAAIoAAAAAAAAAAAAAAAAoAAAAAAAAIIAAACqACgIAAKCAAAAAKAAACACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoIAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAACgAAAAgACgCAAAAAAAAAAAqAACgAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAACAAAAAgCgAAAAAAAAAACgAAAAoIAACACAAAAAqgAoCAAAAAAAAoAAAAIKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAKAAAAACAKAIAACAAAoAAAACCgAAoAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAgAAAAAIAoAAAAAAAAoACAACgKCCKAAIIAgAKAKAoAKgAAAAAAigAACgAIAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAKACAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAoAAAAAAIAoAgIAAIAAACqAACoAAAKAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAgAAAIAAAACAKAAAAAKgAAAAoAAAAIAogAgCAAoAoCgAqAAAACAKAAAAKAAgAoAAAAAAAAAAAAKCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAgACiAgAiAAoAAKKAIKAACgAAAAAAAAAAAAAAAAAAAAAoAAAAAKACAAAAAgAAAAIAAACAAAAoAAAAAKAAAAACAAKIAAIgqiAoCgAAqAACAKAAAAAKAAgAoAAAAAAAAAAAKADIAAAKAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAIAogIAIgAAKACigKgAAAoAAAAAAAAAAAAAAAAAAAAAKAAAAACgAgAAAAAIAAAACAAAAAAAAAAAAAoAAAAAAIAAogAAAAAAKAAAAAAAAAAACgAIAKAAAAAAAAAAACgAgIACgAAAgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAIAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgCiAAggCAAoAKKAqAACgAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAACAAAAAAAAAAAoAAAAAAAIAACKAAAAAAKAAAAAAAAAAACgIAKAAAAAAAAAAACgAgAAAAAAAIAAAAAAACgAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAACAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAogIAAIAAAoogoAKAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAIAACAKAAAAAKAAAAAAAAAACgIAKAAAAAAAAAAACgAgAAAAAAAIAAAAAAAACgAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACKAAAICiAoCoAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAIAAACAKAAAAAAAAAAAAKAACgIAKAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAIAAACgAAAAAAAAAAAoAAAAAAIAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAigAgAoAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACKAAAAAAAAAAAAAKAACgIAKAAAAAAAAAAAAAAACgAAgAAIAAAAAAAAAAAAAAAACgAAAAAAAAAAAoAAAIAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAoAAAAAAIAAAAAAAAAAAACAAAAAAAAigAAAAAAAAAAAACgAAoAKgAAAAAAAAAAAAAAAoAAIAACAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAoAAAAAAAIAAAAAAAAAACAAAAAAAAAAKIAAAAAAAAAAAAACgAoCCgAAAAAAAAAAAiigIKAACAAAAgAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAIAAAoAAIAAAAACgAACAAAAAggAKoAKACgAIKAAAAAAAAAACKAKAgAAAAAAgAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAgAAAAAAIAAoAAAAIKAAACAAAAKAIAACCAAAqgAoAKAAgoAAAAAIAAAAoAAoCAAAAAAACAoAAAAAIAAAAAACgAAAAAAAAAAgAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAgAAAAAIAoAAAAoCAAAAAACAAAAigACCAKKAAoAKAAAgoAAIAAAAACKKAACoAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAgAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAKAAAAAAAAAAAAACAAAoAAAAAAAAAAKAAACAAAAAAAAAAAAAAAAAAKAACAAAAACggAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAgCgAAACgAIKAACAAAAgAAIoAAAAAAoAAKAAAgAAAAAAAAiigAIAKAAAAAAAAAAAAAAAAACAAoAAAAAAAAAAIAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAACAAAAAoAAAAAAAAAKAACAAAAAAAAAAAAgCgCgAgAAAAAKAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAACAKAAKAACoAAAAIAAACAAAKIAACgAAAAoAACAAAAAAAACAoAAAAKAAAAAAAAAAAAAAAAAAACAAAoAAAAAIAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAIAAAoAAAAAAAAAAAAoCAAAAAAoAAIAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAgCgACgAAoCAAAACAAAAAgACgAAAAACgAAAIAAAAIAACgAAAAAAAoAAAAAAAAAAAAAAAAAIAAAACgAAAAgAAAAAAAAAAAAAAAAKACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAKAAAAAAAAAAAAACAAAAAoAAAAAAAAAAAIAAAAAAAACgAAAAAAAAAAAAAAAAAAgAACgAAAAAAACAAAoAAKAgKAAIAAAAAAgoAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAigACgAAqAAAAACAAAAAAAAAAKAAAAAAACAAAACAAAoAAAAAAAKAAAAAAAAAAAAAAAACAAAAAAAoAAAIAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAAKCAAAAAAAAAAAgAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAoAAAAAAAAAAAAAAAIAAAAAogAAAAAAAAAAAAKAAAAAAAACAoAACCgAAAAAAAAAAAAAAAAAAAAoAAAIAAAAACAKKAAAgAoAAAAIAAAAAAAAAAAAAoAICggAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAIAAAAAACgAAAgAAAAAAAAAAAAAAAAKACAAAAAAAAAAAAAAAAAAAoAIAAAAAAAAACAAAAAAAAAAAAAoAAAAKAAACAAAAAAAAAAAAAAgKAACAAKAAACAAAAAACgAAAAAAAAAAAAgAAAAAAIoAAAAAAAAAAAAAAoAAAAIAAAAACgAqAAAAAAAAAAAAAAAAAAAAAACgAgAAAAAICgAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAD/9k=", + skyBoxUp: "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAFA3PEY8MlBGQUZaVVBfeMiCeG5uePWvuZHI////////////////////////////////////////////////////2wBDAVVaWnhpeOuCguv/////////////////////////////////////////////////////////////////////////wAARCAgACAADAREAAhEBAxEB/8QAGQABAQADAQAAAAAAAAAAAAAAAAECBAUD/8QAFBABAAAAAAAAAAAAAAAAAAAAAP/EABYBAQEBAAAAAAAAAAAAAAAAAAABAv/EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhEDEQA/APJtkAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAQBQAAAFAAAAAABQAAAAAAAAAAAAAAAAAAAABEAAABAFAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAGIAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAqAAKAAAAoAAAAAKAAAAAAAAAAAAAAAAAAAAAIAgAAIAoAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAxAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFQABQAAAFAAAABQAAAAAAAAAAAAAAAAAAAAABEAAABAFAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAGIAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAqAAAKAAAoAAAAKAAAAAAAAAAAAAAAAAAAAAAIgAAAIAoAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAxAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAQAABQAAFAABQAAAAAAAAAAAAAAAAAAAAAABEAAABAFAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAGIAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAoCAAKAAoAAKAAAAAAAAAAAAAAAAAAAAAAAIgAAAIAoAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAxAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAFARQAAFAABQAAAAAAAAAAAAAAAAAAAAAABEAAABAFAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAqKAAAoAAAKAAAAAAAAAAAAAAAAAAAAACCAAAAIAoAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAxAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAVUAAAFAAABQAAAAAAAAAAAAAAAAAAAAAQQAABAAFAAAAEAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAACiCgAAAoAAAAKAAAAAAAAAAAAAAAAAAAACACAAIAoAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAxAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAUAAQUAAAAFAAAABQAAAAAAAAAAAAAAAAAAAQAQABAFAAAAEAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAFBgAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAoAAAgoAAAAAKAAACgAAAAAAAAAAAAAAAAAAgAAgCAAKAAAAIAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAKDAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAABQAAABABQAAAAUAAAFAAAAAAAAAAAAAAAAAABABAAEAAUAAAAQAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAUGAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgACgAAAAACCgAAAAoAAAKAAAAAAAAAAAAAAAAACAACAIAAAoAAAAgAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoMAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFFAAAAAAAAAEFAAABQAAAUAAAAAAAAAAAAAAAAEAAAEAQAABQAABAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABiAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAoAICggAKAIKAAACgAAAoAAAAAAAAAAAAAAAIAAAIAAgAACgAACAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAADEAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFUQFBAAAUABUAAAAFAAAABQAAAAAAAAAAAAAQAAAAQABAAAFAAEAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgCggAKAAIKAAAACgAAAAAoAAAAAAAAAAAIAAAAAIAAgAACgACAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAADEAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBAAAAAAAAAUEABQQFBFFABAUAAQUAAAAFAAAAAABQAAAAAAAAAQAAAAAAAQBAAFAAAEAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAACAAAoAAIACggAKCAoIooAAAAAgoAAAAKAAAAAAACgAAAAAAgAAAAAAAAAiAAKAAAIAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAMQAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAEABQAAAQFAABAAUEBQAQFBFFAAAAAAEFAAAABQAAAAAAUAAAAAEAAAAAAAAAEQAABQAABAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAABiAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAKAAACAoAICgAgKACAoIooAAAAAAgoAAAAKAAAAAACgAAAgAAAAAAAAAAIAIAKAAAAIAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAMQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUEAAAAABQAQFAAABAAUAAAAAEBQAQFABAUBQAAAAAAEFAAABQAAAAAAUAAAEAAAAAAAAAABABABQAAAABAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAABiAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAKACAAoAAAICgAAgKACAoAIACggKAoAAAAACACgAAAoAAAAAAKAACAAAAAAAAAAgAAgAAoAAAAAgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAxAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAABQAAAAAAAAAAAAAAFABAAAAAUAEABQAAAAAAAAAAQFABAAUEBQFEBQAAABABQAAAUAAAAAAFABAAAAAAAAAAQAAAQAAUAAAAAQAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAYgAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAoAAAAAAAAAAAAAAAAAACggAAAAKCAAAoAAAAAAICgAgAKACAAoICgiigAAAACCgAAAAoAAAAAAAAAAAAAAAAAIAAAIAAKAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAMQAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAUAAAABQQAAAAAAAAAAAAAAAAAAAAAAFAABAUAEBQAQAFABAUEBQRQABQAABABQAAAAUAAAAAAAAAAAAAAAAAEAAEAAFAAAAAAEAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAGIAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAKAACKKgAAAAAAAAAAAAAAAAAAAAAAAKAACAoAIACggAKCAAoIAAooIACgACACgAAAAoAAAAAAAAAAAAAAAAAIAAIAAKAAAAAAIAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAMQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFAAAFQQAAAAAAAAAAAFBFAABABQAAAAAAAAAAAAAAAAAAAAAFAABAUAEABQQFABAUEBQRQABQAAABABQAAAAUAAAAAAAAAAAAAAAAEAEAAAFAAAAAAEAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAGIAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAigACoAAAIoIAAAAAAAAACgAAAgAAoAAAAACggAAAAAAAAAAAAAKACAAoAICgAgKCAoAICgiigAAAAACACgAAAAoAAAAAAAAAAAAAAAAIAIAAKAAAAAAIAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAMQAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAUEUAAEAAAAAAABQAAAAAAQAUAAAABQAQAAAAAAAAAAAAAFABAAAAAUEBQAAAQFBFFBAUAAAAAQAUAAAAFAAAAAAAAAAAAAAABAABABQAAAAAABAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAABiAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAoAAAAIAAAAAACgAAAAAAgoAAAAAACgAgAAAAAAAAAAAAAKACAAoICgAAAAAAAAKAAAAAAAAAgoAAAAKAAAAAAAAAAAAAACAAACACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAxAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAUAAAAAAEAAAABQAAAAAAQAAUAAAAAABQAQAAAAAAAAAAAAFAABAAUEBQAAAAAQFBAVQAAAAAAAAEFAAAAABQAAAAAAAAAAAAAQAAAQAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAGIAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAACgAAAAAAAAgAAKAAAAAACAAAAACgAAAAAKACAAAAAAAAoAIACgAAgAKCAoAAAAAAAACgAAAAAAAAIAKAAAAACgAAAAAAAAAAAAgAAAgAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAMQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAFAAAAAAAABAAAUAAAAAEAAAAAAAAFAAAAAUEAAAAAAABQAAAAAAAQAFBAUAAAAAAAABQAAAAAAAAEAFAAAAABQAAAAAAAAAAAAQAAQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAGIAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAgAAAAoAAAAAAAAAICgAiigAAAAAAIACgAgKAAAAAAAAoAAAAAAAAACIoAoAAAACgAAAAAAAAAAAgAAAgAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAUAAAAEBQAAAAAAAAAAAAAAAAAAAAAAQAAAAAUAAAEBQAAAQFBFAFAAAAAAAQAFBAUAAAAAAAABRAUEBQAAAABEAUUAAAAAABQAAAAAAAAQAAAAQAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAKAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAIAAAAAKACAAAoAIACgigCgAAAAAIACggAKAAAAAAAAoAAAAAAAAAggAoAoAAAAAAAAAAAAAAAAAIAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAFQAAFAAAAEABQAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAUAEAAABQRQQFAFAAAAAAQAFBAAUAEBQAAAARRQQFBAUAAAAAAEEFAFAAAAAAAAAAAAAAABAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIKAAAAAoAAAAgAKAAAAAAAAAAAAAAAAACAAoAAAAIAAAAAKACAAAoIoICgACgAAAAAICgAgKAACAoICggKAogKCAoICgAAAACAIoAoAAAAAAAAAAAAAIAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAABBQAAAAAAFAAAAEBQAAAAAAAAAAAAAAAAAAAQFAAAAABAAAAAAAAAAUEABQBQAEBQAAQFABAUAAEBQAAAARRQQFBAUEBQAAAAAQQAUUAAAAAAAAEAAAAFAAAAEABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACgAIAAAIKAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAgKAAAAAACAAAoAIAACggAKAAKACAoAAAAAAAACAoAAAAACiAoICgAAAAAACIAAAACgAAAKAIAKAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAKDzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAEUAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAUEABQAABQQAFBAUAEBQAAEBQAQFBAUEUUEBQQFBAUAAAAAARAUAAAAAUEBQAEAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAABQAAeYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAigAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACggAAKAAKCAAoIACggAKAAgKAAAAAAAoAAAAAAAAAAgAAAiggAKAAKAAgAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAKAAAADzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAEUAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAUAAAAAAAAAAAUABAUAAAAEBQRRQQFBAUAAAAEBQQAAARQQUEUAUABAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAUAAAAAHmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAIAAoAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAoAAAAAAAAAAoIACgICgAAAAAAAKAAAAAAAAAICggAAiggoCiAoCAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAoAAAAAAPMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAQAABQAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVBFFAAAAAQFBFFBAUAAAAEBQQAAAAARRUAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAeYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAigAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqCKKAAAAAgKAAoAAAAAAAAAgKCAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAPMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAFEAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBQBQAAAAEBQQFUQFAAEQVQQFBAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAHmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAACiAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAoAoIACgAICgAKAAAgKCAqAoIAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAA8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAUAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQFAAAAAFAQRRQQUABQQAFQRRUBQQAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAB5gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAogAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgKAAAAAAKgigCggqoIoICggKCCgAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAADzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABQBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAUAAAAAAAAAABQAAAAFQRRUAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAeYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAKAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICgAAgKAAAoAgKCAoIKCKKgAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAADzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAEAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAUAAEBQAAFAEBQQFABAUAVAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAHmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAIAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAgKCAoAIKCAoAAACgAgAAKCAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAPMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAQABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAABAUEABQAQFBBQRQBQAEABQAQAAFABAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAHmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAIAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAgKAAAKAgKAACAAAoAIAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAA8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAABAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAUABAAUAAEAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAeYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAgAACgAAAAAAAAAAgKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAICgAACgIACgAAgAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAADAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAUAEAAAAAQAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAABAUAAAEFAUAAAEAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAQFAAAAAFAAAAAAAAAAAAAAAAAAABgAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAIAKogKAAgAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAACAoAAAAAoAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAABAAUAAAVBFAFQAQVQAQFBAUAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAABAUAEBQABQAAAAAAAAAAEABQQAFBAUAAEGCgAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAICgAAgAKACCggoCggAAAAAKAAAAAAACAoICgAAAAAACgAAAAAAAAAAAAAAAAICgAgKAKgKAAAAAAAACAAAAAAAAAAoIAAMFAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAEAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAQAFABBQRVEAAAAAAAAAFAAAAABAAAAAAUAAAAUAAAAAAAAAAAAAAAAAAABAUEFAUEBQAAAAAAQAAAAAAAAAAAAAAYKAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAIAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAgKAACAoCiAAAAAAAAAAAACgAAAgKCAoIACggKCCgKCAoICgAgKCAAoAAAAAAAAIACioAAACgAAAAAgAAAAAAAAAAAAAAAxUAAAAAAAAAQAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAABAAAAAAEAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFEABQQAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAFAAAAABAAUVAAAAAAAUEBQQAAAAAAAAAAAAAAAAYgAAAAAAAAAAAAAgACgAAAACAAAAAAAAAAAAAAAAAAAAAgAAAAACAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAACAoIAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAACggAAoAAAAAACggAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAIAAAAACAAKAAAAIAAAAAAAAAAAAAAAAACAAAAAAAIoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAIAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAoiAAAAAKAAAAACAAAIAAAACAAKAAIAAAAAAAAAAAAAAAACAAAAAAIoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAIAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAgAAAAIAAIgACgACAAAAAAAAAAAAAAAgAAAAACKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAACAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAooAAAAAAAAAACAAAAgAAAIAACCACgCAAAAAAAAACggACAAAAAAIoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAIAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIUAAAAAAAABAAAAQAAAEAABAAAQAQUAQAUAAAAAAEBQQBBQQAAAARQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAQAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBRVAAAABAAAAAQAAAAEAABAAAQAAEAEFUBAAAAAAAAAABEFBAAAAABFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAABAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUGQoAAAAAACAAAAgAAAIAAACAAgAAIAAoAgAAAAAAAAAIICgAgAAAgAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAgAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAADIUAAAAAABAAAQAAAAEAAABAAQAAEAAAUQAAAAAAAAAEAAAEAAAEAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAEAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAZCgAAAAAIAACAAAAgAAAAIAACAAAgACgCAAAAAAAAAAgAAAgAAgAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAgCgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAADIUAAABAAAAQAAAEAAAABAAAAQAAEAAUQAAAAAAAAAAEAAAEAAEAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAEAUAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAUUAAAAAABAAAAQAAAAAEAABAAAQAABRAAAAAAAAAAAQAAAQAAAQBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAARQAAAAAABQAAAQAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAFFAAAAAAAQAAAEAAAABAAAAQAAEAAAUAQAAAAAAAAAEAAAEAAAEAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAEUAAAAAAUEBQAAAAAAAAAAQBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAFFAAAAAAQAAAAAEAAABAAAAQAAAEAAAUQAAAAAAAAAEAAAQFQAAQABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAARQAAABQQFAAAAAAAAAAAUAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAUUAAAAABAAAAAAAQAAAEAABAAAAQAABQBAAAAAAAAAQAABAAVABAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAUQAAAAFAAAAAAAAAAUAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAUUAAAAABAAAAAAAQAAAEAAABAAAAQAABQBAAAAAAAAAQABAAAVBAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAUAAQAFAAAAAAAAAAUAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUUAAAAABAAAAAAAQAAAEAAABAAAAAQAAABRAAAAAAAAQABAAAAEAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAEABQAAAAAAAAAAFAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAFFAAAAQAAAAAAAEAAAABAAAAQAAAAAEAAAAUQAAAAAAAEAQAAAABAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAABQAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAEAAAABAAAAAQAAAAAAEAAABFAAAAAAAEAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAABAAAAAAQAAAAEAAAAAAAABAAAARQAAAAAABAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAUQAAABAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAABAAAAAAQAAAAAEAAAAAAAAABAAAAARQAAAAAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAAAAAAAAAQAAAAAAAABAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAABAAAAAAAAQAAAAAEAAAAAAAAAABAAAAQBQAAAAAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAABQAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBQAAAAAAAAAAAEAAAAAAABAAAAAAAAAAAQAAAEAUAAAEAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAABQAAAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAEBQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBQAAAAAAAAAAAEAAAAAAAAAAAAAABAAAAAQAAAEAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAUAAAAAAAAAAFAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEFAAAAAAAAAAAAAQAAAAAAAAAAAAAAEAAABAAAAAQAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAABQAAAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQUAAAAAAAAAAAABAAAAAAAAAAAAAAAQAAAAEAAABAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAABQAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAYigAAAAAAAAAAAAAIAAAAAAAAAAAAAACAAAAAgAAAIAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAoAAAAAAAAAAAKAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAADAUABQAAAAAAAAAAAQAAAAAAAAAAAAAAEAAAABAAAAQAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAABQAAAAAAAAAAUAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAGAAAoAAACgAAAAAgAAAAAAAAAAAAAAAAAIAAACAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAICgAKAAAAAAAAAACgAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAACgAAAAAAAAAAAwAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAABAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAQAAAFUAAAAAAAAAAAFAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAFAAAAAAAAAAAAAABgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAIAACAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAgAAKoAAAAAAAAAAAKAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAKAAAAAAAAAAAAAAAAAADzBQAABQAAAAAAAAAAAAAAAAAAAAAAAAAAEAAABAAAQAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAFAAAAAAAAAEAAAAUAUAAAAAAAAABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAABAAAABAAAAAAAFAAAAAAAAAAAAAAAAAAAAB5gAAoAAoAAAAAAAAAAAAAAAAAAAAAAAAACAAAAgAAIAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAACAAAKAKAAAAAAAAAAAoAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAgAACgAAAAAAAAAAAAAAAAAAAAAA8wAAAAUUAAAAAAAAAAAAAAAAAAAAAAAAAABAAAQAAEAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAABQAAAAAAAAABAAFAFAAAAAAAAAAAUAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAHmoIAAAAqgAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAIAACAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAgACgACgAAAAAAAAAAigAAAAAACgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAPNQAQAABQAFAAAAAAAAAAAAAAAAAAAAAAAAABAAAQAAEAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAABQAAAAAAAAABAAFAAFAAAAAAAAAABFAAAAAAAAAFAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAEBQQAAAAAAAAAAAAAAAAAAAAAB5KKAAAgACgAKAAAAAAAAAAAAAAAAAAAAAAAACAAAgAAIAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACgAAAAAAAAACAAKAAKAAAAAAAAAAogAAAAAAAAAAKoAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAADyUAAUABAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAEAABAAAQAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAFAAAAAAAAAAEAAAUAAUAAAAAAAABRAAAAAAAAAAAAVQAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAB5KAAAAKAgACgAAAAAAAAAAKAAAAAAAAAAAAAACAAAgAAAIAAAAAAAAAACAAAoAAAAIAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAKAAAAAAAAAICggACgAAAAACgAAAAiiggAAAAAAAAAACigAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAA8lAAAAAAFQABQAAAAAAAAAAAFAAAAAAAAAAAABAAAAQAAEAAAAAAAAABAAAAUAAAAAAAAEAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAFAAAAAAAAAAEAAAAUAAAAAAAUABQBAAAAAAAAAAAAAFFAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAB5KAAAAAAAAKgCgAAAAAAAAAAAAKAAAAAAAAAAACAAAAgAAIAAAAAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACgAAAAAAACAAAAAAKAAAAAAAAACiggAAAAAAAAAAAACgCgAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAoAAAAPFQAAAAAAAAAARQAAAAAAFAAAAAABQAAAAAAAAAQAAAEAAABAAAAAAAAAQAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAUAAAAAAAQAAAAAABQAAAAAAAAAUUAEAAAAAAAAAAAUAUAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAUAEAUAUEAAAAAAAeCgAACgAAAAAACgAACAAAAAACgAAAAAAoAAAAAAIAAAACAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACgAAAACAAAAAAAAAKAAAAAAAAACigAAAgAAAAAAAACgACgAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAACAAAAPBQAAAAAABQAAAABQAAABAAAAAABQAAAAAAAAAAAAAAAAQAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAUAAAAQAAAAAAAAABQAAAAAAAAABVAAAAEAAAAAAAAUAAUAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAQB4KAAAAAAAAAAAAAAoIAAooAgAAAAAAoAAAAAAAAAAAAAAIAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAgKAAoAAAgKCAAAAAAAAAKAAAAAKAAAAAoAAAAAgAAAAAACgCgAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAKAAAAAAAAAAAAAAAAADwVAAAAAAAAAAAAAAAAAAAUABQEAAAAAAFAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAEBQAFAAAEBQQAAAAAAAABQAAAABQAAAAFAAAAAEAABQQABQBQAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAQAAAAAAFAAAAAAAAAAAAAAAAAAAAAB4KgAAAAAAAAAAAAAAAAAAAKAAAIKAAAAAAAAAAAACgAAgAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAACAoACgAAACAAAAAAAAAKAAAAAKAAAAAAoAAAAAAAgKAoAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8FQAAAAAAAAAAAAAAAAAAAAFAAAEAAFAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAQFAAAUAAAAAQAAAAAAABQAAAABQAAAAAFAAAAAEBQQFAUAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeCoAAAAAAAAAAAAAAAAAAACgAAAACAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAICqAAAAAIAAAAAAAAAoAAAAoAAAAACgAAACAAAoICqAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPBUAAAAAAAAAAAAAAAAAABQAAAAAABAAAAAAAAAABQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAABQAAAABAUEAAAAAAAUAAAAUAAAAABQAAAABAAAAVQAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4KgAAAAAAAAAAAAAAAAAAKAAAAAAAIAAAAAAAAAAAAAAAKAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAKAICgAAgAAAAAAACgAAAACgAAAAKAAAAAAAIAAooAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPBUAAAAAAAAAAAAAAAAAAAABQAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAUAAAAAQAAAAAAABQAAAAABQAAAFAAAAAAAAABQAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4KgAAAAAAAAAAAAAAAAAAAAKAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAACgACAAAAAAAAAAKAAAAAAAAKAAoAAAAAAAAAKAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKDXVAAAAAAAAAAAAAAAAAAAAUAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAFAAAEAAAAAAAAAUAAAAAAAAAFFAAAAAAAAAUAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAGuqAAAAAAAAAAAAAAAAAAAAoAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAIAAAAAAAAAAoAAAAAAAAAKAAAKAAAAAoAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAoAAIAAAAAAAAAAAAAAAAAAAACgAAAAAAAAA11QAAAAAAAAAAAAAAAAAAAFAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAABQAAABAAAAAAAAFAAAAAAAAABQAAAABQAAFAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAFAAAAABAAAAAAAAAUAAAAAAAAAAAAAAAAAAAGuqAAAAAAAAAAAAAAAAAAAAAoAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAKAAIAAAAAAAAAoAAAAAAAAAKAAAAAAKAoAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAACgAAAAAAAAAAAAAAAAAAAAAA11QAAAAAAAAAAAAAAAAAAAAAAFEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAABQABAAAAAAAAAFAAAAAAAAABQAAAAAABVAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABrqgAAAAAAAAAAAAAAAAAAAAAAAigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAACiAAAAAAAAAAAAKAAAAAAAAACgAAAAAAAooAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADXVAAAAAAAAAAAAAAAAAAAAABFABAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAUQAAAAAAAAAAABQAAAAAAAAAUAAAAAAAAVQAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa6oAAAAAAAAAAAAAAAAAAAAIoAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAICgAgKAAAAAAAAAAAAAAoAgAAAAAAAAAACgAAAAAAAAAAoAAAAAAAKKAAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA11QAAAAAAAAAAAAAAAAAAAFEAAAAAQAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAQAFBAUAAAAAAAAAAAAAABQABAAAAAAAAAAFAAAAAAAAAABQAAAAAABQFAAAAAAABQAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABrqgAAAAAAAAAAAAAAAAAAAAigAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAogKACAAAAAoICgAAAAAAAAAAAAKAAIAAAAAAAAAoAAAAAAAAAAAKAAAAAAAKoAAAAAAAKAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANdUAAAAAAAAAAAAAAAAAAAABRAAAAAAEBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAEAAAAAAABQQFAAAAAAAAAAUAAAQAAAAAAABQAAAAAAAAAAAUAAAAAAAAVQAAAAAAAUAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa6oAAAAAAAAAAAAAAAAAAAAAAIoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAACAoIAAAAAAACgAAAAAAAAAAKAAAIAAAAAAAAAoAAAAAAAAAAKAAAAAAAACigAAAAAAAKAAAAAACgAAAAIKCAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAKAAAAAAADWVAAAAAAAAAAAAAAAAAAAAAABAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAQFABAAAAAAAAAAUAAAAAAABQAAABAAAAAAAAFAAAAAAAAAAABQAAAAAAAAUUAAAAAABQAAAAAAUAAABBQAAARQAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAEBQAAAAAAAAAAAAAAayoAAAAAAAAAAAAAAAAAAAAAAIAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAACAoIAAAAAAACggKAAAAAAoAAAAgAAAAAAACgAAAAAAAAAAAoAAAAAAAAKAKAAAAAAAoAAAAAKAAAACoAAAAIoAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADWVAAAAAAAAAAAAAAAAAAAAAABAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAQAAAAAAAAFAAAAAAUAAAAQAAAAAAABQAAAAAAAAAAAAUAAAAAAAAFAFAAAAAAAUAAAAAFAAAAQUAAAEUAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABrKgAAAAAAAAAAAAAAAAAAAAAAgAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAICgAgKAAAACAoIAAAAAACgAAAAAKAAAAIAAAAAAAAoAAAAAAAAAAAAKAAAAAAAACgACgAAAAAAKAAAAACgAAAAIKAogAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1lQAAAAAAAAAAAAAAAAAAAAAAQABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAEABQQAAAFBAUAAABQAAAABAAAAAAAFAAAAAAAAAAAABQAAAAAAAAAUAAUAAAAAABQAAAAAUAAAAABAUAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABrKgAAAAAAAAAAAAAAAAAAAAAgAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAICggKACAoIACgAAKAAAAAAIAAAAAAAoAAAAAAAAAAAKAAAAAAAAACgAACgAAAAAAKAAAAACgAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAANZUAAAAAAAAAAAAAAAAAAAAAAEAAAAUAEABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAEBQAAAAAAAAAQFABAUAEBQQFAUAAAAAAQAAAAAABQAAAAAAAAAAAUAAAAAAAAAAFAAFAAAAAAAUAAAAAFAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAFAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAayoAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAACAoAAAAAAAAAAAAICgAgKCAoCgAAAAAACAAAAAAKAAAAAAAAAAACgAAAAAAAAAAoAAoAAAAAAACgAAAAAoAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAADWVAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAQFAAAAAAAAAAAAAAAAABAUBQAAAAAAABAAAAAFAAAAAAAAAAABQAAAAAAAAAAUAAAUAAAAAABQAAAAAAUAAAAAAAAAFAAABAAUAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAABQAAAAAAAAAAQAAAAAFAAAAAAAAAAAAAAAAAAABqqgAAAAAAAAAAAAAAAAAAAgAKCAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAgKAAAAAAAAAAAAAAAAACAoIooAAAAAAIAAAAAAoAAAAAAAAAAAKAAAAAAAAAACgAACgAAAAAAKAAAAAAACgAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1VQAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAEBQAAAAAAAAAAAAAQFBFFAAAAAABAAAAAAFAAAAAAAAAAABQAAAAAAAAAAUAAAUAAAAAABQAAAAAAAAUAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGqqAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAgAKAAAAAAAAAAAAACAoIooAAAAAIAAAAAAAAoAAAAAAAAAAKAAAAAAAAAACgAACgAAAAAAKAAAAAAAACgAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1VQAAAAAAAAAAAAAAAAAAAAAAAAQAAAFBAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAQFAAAAAAAAAAAAAABAUEUUAEAAAAAAAAAAAAUAAAAAAAAAAAFAAAAAAAABQAAABQAAAAAAFAAAAAAAAABQAAAAAAAUAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaqoAAAAAAAAAAAAAAAAAAAAAAAAAAIAACggAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAICgAAAgKAAAAAAAAAAACKKACAoIAAAAAAAAAAoAAAAAAAAAAAKAAAAAAAAACgACgAAAAAAKAAAAAAAAAACgAAAAAAAAoAAACAoAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADVVAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAQFAAAAAABAUBQABAAAAAAAAAAAAAFAAAAAAAAAABQAAAAAAAAAUAUAAAAAAABQAAAAAAAAAAAUAAAAAAAAFAAAAAAQAFAAAAAAAAFAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAUBAUAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAGqqAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAICggAAAAAAAAAACgAAAAAAAAAAoAAAAAAAAAKAKAAAAAAAAoAAAAAAAAAAAKAAAAAAAACgAAAAAIAAKAAoAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAKAgAAAAAAKIAAAAAAAAAAAAACgAAAAAAAgAAAANVUAAAAAAAAAAAAAAAAAAAAAAAAAAEBQAQAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAABRAUEBQQAAAAAAAAAABQAAAAAAAAAAUAAAAAAAAAAVQAAAAAAAAAUAAAAAAAAAAFAAAAAAAAABQAAAAAEAFAAAAAUAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAFAQAAAAAAAAAFAAEABQAAAAAAAAAAAAAAAAAAAAAaioAAAAAAAAAAAAAAAAAAAAAAAAIAAACgAgAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAACAAAAAAAAAAAAKAAAAAAAAAACgAAAAAAACgKAAAAAAAAACgAAAAAAAAAAoAAAAAAAAAKAAAAAAAgoAAAAAAACgAAAAAAAAAgoAACgAAAAAAgKCAAAAAAACgAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAANRUAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAQAAAAAAAAAAABQAAAAAAAAAAUAAAAAAAAAUBQAAAAAAAAUAAAAAAAAAAFAAAAAAAAABQAAAAAAAVAAAAAAAAAAAAUAAAEFAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAGoqAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAoIAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAgAAAAAAAAAAACgAAAAAAAAAAoAAAAAAAAAoCgAAAAAAAAAoAAAAAAAAAKAAAAAAAAACgAAAAAAAAoCAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAACgAgAKAAAAAAAAAAAAAAAAAANRUAAAAAAAAAAAAAAAAAAAAAEAAAABQQAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAABAAAAAAAAAAAFAAAAAAAAAABQAAAAAAAABQRRQAAAAAAAAFAAAAAAAAABQAAAAAAAAAUAAAAAAAAFAAQAAAAUAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAABQAAAAQAAAAAAAAABQAAAAAAAAAAAAAAAABqKgAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAACAAAAAAAAAAKAAAAAAAAAAACgAAAAAACggKoAAAAAAAAAKAAAAAAAAACgAAAAAAAAAoAAAAAAAAKAAAgAAoAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAACgAAAAAAAAAAAAAADUVAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAUEAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAQAAAAAAAAABQAAAAAAAAAAUAAAAAAAAAVQAAAAAAAAAUAAAAAAAAAFAAAAAAAABQAAAAAAAAAUAAABAABQAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAABAAAAAAAAAFAAAAAAAAAAAAGoqAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAIAAAAAAAAAAoAAAAAAAAAAKAAAAAAAAAKAoAAAAAAAAKAAAAAAAAACgAAAAAAAAoAAAAAAAAAKAAAAAgAoAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAACgAAAADUVAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAEAAAAAAAAAAUAAAAAAUAEAAAUAAAAAAUAABQAAAAAAAAUAAAAAAAAAFAAAAAAAABQAAAAAAAAAUAAAABABQAAAAAAUAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABptIAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAACgAAACAoAAAICgAAAAAAAAAAAAAAAAAAAAAKAAAAAIAAAAAAAAAAoAAAAAAoAAIAAoAAAAAAAAoACgAAAAAAAoAAAAAAAAAKAAAAAAAACgAAAAAAAAoAAAAAACACgAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAANNpAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAUAAAAQFAABAAUAAAAAAAAAAAAAAAAAAAAAABQAAAAABAAAAAAAAAAFAAAAAAAFAAAUQAAAAAAAAFAUAAAAAAAFAAAAAAAAABQAAAAAAAAUAAAAAAAAFAAAAAAAQAUAAAAFAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAUAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAABptIAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAACgAAAAAAAACAoAAAAAAAAAAAAAAAAAAAAAAACgAAAAACAAAAAAAAAAKAAAAAAAAKAAAogAAAAAAAKAoAAAAAAAKAAAAAAAAACgAAAAAAAAoAAAAAAAKAAAAAAAgAAoAAAAKAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAoAAAAAAAIAgAAAAAAAAAAAAAAAAAAAAAAAAANNpAAAAAAAAAAAAAAAAAAABAUAAAEAAAAAAAAAAAAAAAAAAUAAAAAAAAAABQAAAAAAAABAAUAAAAAAAAAAAAAAAAAAAAAAAABQAAAABAAAAAAAAAAFAAAAAAAAAFAAUAAQAAAAAAFAUAAAAAAAFAAAAAAAABQAAAAAAAAUAAAAAAAFAAQAAAAAAAUAAAAAFAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAUAAAAAAAAAAAEAQAAAAAAAAAAAAAAAAAAAAAAAGm0gAAAAAAAAAAAAAAAAAAAgAAKAACAAAAAAAAAAAAAAAAKAAAAAAAAAoAAAAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAgAAAAAAAAAACgAAAAAAACgAAKAIAAAAAACgKAAAAAAAACgAAAAAAAAoAAAAAAAKAAAAAAACgIAAAAAAAAKAAAAACgAAAAoAAAAAAAAAAAAAAAoCgAAAACAAAAAAAAAoAAAAAAAAAAAAAAAAIAAAgAAAAAAAAAAAAAAAAAANNpAAAAAAAAAAAAAAAAAAAABAAAAUAAEAAAAAAAAAAAAAUAAAAAAAABQAAABAUAAAEABQAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAEAAAAAAAAAAAUAAAAAAAAAUABQABAAAAAAAUBQAAAAAAAUAAAAAAAAFAAAAAAABQAAAAAAAUBAAAAAAABQAAAAAAUAAAAFAAAAAFAABAAAAAVQAAAAAAAAAAAAAAAAAAAAAAAAUAAEAAAAAAAAAAAEAAAAQAAAAAAAAAAAAAGm0gAAAAAAAAAAAAAAAAAAAAAAgAAAAKCAAKAACAAAAAAoAAAAAAACgAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAACAAAAAAAAAAAAAKAAAAAAAAAAKoAgAAAAAAAAKoAAAAAAAAKAAAAAAAACgAAAAAAoAAAAAAAKAAgAAAAAAoAAAAAAKAAAACgAAAACgKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAAAAAAAAAAAgAAAAACAAAAAAAAA02kAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAUEAAAAAAAABQAAAAAAFAAAAAAAEABQAAQAAAFAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAQAAAAAAAAAABQAAAAAAAAAAAUUEAAAAAAABQFAAAAAAAABQAAAAAAAUAAAAAAAFAAAAAABQAEAAAAAAFAAAAAABQAAAAAUAAAAUBQAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAEAAAAAAAAAQAAAGm0gAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAACgAAAAAAKAAACAoAAAAAAAgKAACAAAoAAAAAAAAAAAAAAAAAAAAAAAACgAAAAACAAAAAAAAAAAKAAAAAAAAAAACgACgAgAAKAAAoAAAAAAAAKAAAAAAAACgAAAAAAoAAAAAAAKAAgAAAAoAAAAAAAKAAAAACgAAAACqAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAgAAAAAAAAAACA02kAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAUAAAAEAAUAUAAAAAAAAAAAAAAAEABQAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAEAAAAAAAAAAAUAAAAAAAAAAAAFAAAAFAAAAAAUAAAAAAAAFAAAAAAABQAAAAAAAUAAAAAFAAAAQAAAAUAAAAAAFAAAAABQAAAABVAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAAAABpNIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIoAAIAAAACqAAAAAIACgAAAAAAAAAgKAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAgAAAAAAAAAACgAAAAAAAAAAAAoAAAoAAAAAACgAAAAAAAAoAAAAAAAAKAAAAAACgAAAAAoAAAACAAACgAAAAAoAAAAAAKAAAAAKAoAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAIAAAAIAAAAAAAAAA0mkAAAAAAAAAAAAAAAAAAAAAAAAAAEUAAAAEAAABQFAAAAEAAABQQFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAQAAAAAAAAAABQAAAAAAAAAAAAUAAAAUAAAAABQAAAAAAAAUAAAAAAAAFAAAAAABQAAAAAUAAABAAABQAAAAAUAAAAAAFAAAAAFAUAAAAFAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAQAAAAAAAAAAAAAAAEAEAAAAAAAAAAaTSAAAAAAAAAKAAACAAAAAAAAAAAAIAoAIAAAAACqAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAIAAAAAAAAAAAoAAAAAAAAAAAAKAAAAAKAAAAAoAAAAAAAAAKAAAAAAACgAAAAAAoAAAAAKAAAAgAAoAAAAAAAKAAAAACgAAAACgKAAAACgAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAIAgAAAAAAAANJpAAAAAAFAAAAAAAAABAAAAAAAAAAEAAAAAFAFAAAAABAAAAAAAUAAAAAAAAAAAAAAAAAAAAEBQAAAAAAAAAAAAFAAAAAAEAAAAAAAAAAAAUAAAAAAAAAAAAFAAAAFAAAAAAUAAAAAAAAFAAAAAAAABQAAAAAAUAAAAFAAAAAQAUAAAAAAAFAAAAABQAAAABVAAAAAABQAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAEAAQAAAAAAAGm0gAAAAAAAAAAAAAAAAAAAAAAACAAAAqAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAgKCAAAAAAAAAAKAAAAAAAAAAAACgAAAACgAAAAAKAAAAAAAACgAAAAAAAoAAAAAAKAAAAACgAAAAIKAAAAAAACgAAAAAoAAAAAKKAAAAAAoAAAKAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAIAAAAgAAAAANNpAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAABAAAAAUAAAAAABQAAAAABAUEAAAAAAAAAAUAAAAAAAAAAAAFAAAAAFAAAAAAUAAAAAAAAFAAAAAAAABQAAAAAAUAAAAFAAAAABUAAAAAAAFAAAAABQAAAAAUUAAAAABQAAAAUBAAAAAAUAAAEAAAAAABQAAAAAABQAAAAAQAAAAAAAAAAAAAEAAAAAAAEAAAAQAAAAGm0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAACgAgKAAAAAAAAAAAAAAAAAACAAAKAAAAAAAAKAAAAAACAoIAAAAAAAAAAoAAAAAAAAAAAAAqgAACAAoAAAAACgAAAAAAAoAAAAAAAAKAAAAAACgAAAAAoAAAACCgAAAAAAoAAAAAKAAAAACigAAAAAKAAAAACgIAAAAAAAAAAKAAAAAAAAAAAAoIAAAAAACgCAAAAAAAAAAAAAAgAAAAAgAAAAAACAA02kAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAUAAEBQAAAAAAAAAAAAAAAAAAAQBQAAAAAAAABQAQFAAAAABAAAAAAAAAAFAAAAAAAAAAAAFAUAAAAAAAAAAAFAAAAAAAABQAAAAAAAAUAAAAAAFAAAAABQAAAAVAAAAABQAAAAAAUAAAAAVQAAAAAAUAAAAAFAAQAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAABQABAAAAAAAAAAAAAAQAAAQAAAAAAAABpNIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAoIACgAAAAAAAAAAAAAAAAAAAgCgAAAAAAAAAAACgAAAAAAAgAAAAAAAACgAAAAAAAAAAAACqAAAAAAAAAACgAAAAAAAAoAAAAAAAAAKAAAAAACgAAAAAoAAAAKgAAAAoAAAAAAAKAAAAKoAAAAAAKAAAAAACgAIAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAgAAAAAAAAAAAAIAAIAAAAAAAA0mkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAUAAEBQAAQAFAAAAAAAAAAABAFAAAAAAAAAAAAAFAAAAABAAAAAAAAAFAAAAAAAAAAAAABRQAAAAAAAAAAFAAAAAAAABQAAAAAAAAUAAAAAAAFAAAABQAAAAAVAAAABQAAAAAAUAAAAVQAAAAAAUAAAAAAFAAAQAUAAAAAAAAAAAAAAAAAAAAAAAAFABAAAAAFAAAAAAEAAAAAAAAAABAABAAAAAAAGk0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACggAAKACAAAoAAICgAAAAAAgCgAAAAAAAAAAAACgAAAAAgAAAAAAAACgAAAAAAAAAAAAACqAAAAAAAAAACgAAAAAAAAAoAAAAAAAAKAAAAAACgAAAAAoAAAAKgAAAAoAAAAAAKAAAKAAoAAAAAKAAAAAACgAAAIKAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAgAACgAAAAAACAAAAAAAAAAAgAAAgAAADSaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAABQAQAAAFAABAUEBQAQFABAFAAAAAAAAAAAAAAFAAABAAAAAAAAAFAAAAAAAAAAAAAABQABQAAAAAAAAFAAAAAAAABQAAAAAAAAUAAAAAAAFAAAAABQAAAAVAAAABQAAAAAUAAAUABQAAAAAUAAAAAAFAAAAQAUAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAFAAAAAAAAEAAAAAAAAABAAABAAGk0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAACgAAgKACAoIACggACgAAAAAAAAAAAACggKACAAAAAAAAAKAAAAAAAAAAAAAAACgCgAAAAAAAAKAAAAAAAAACgAAAAAAAAoAAAAAAKAAAAAACgAAAAqAAAACgAAAAoAAAoACgAAAAAoAAAAAKAAAAAgAoAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAKAAAAAAAAIAAAAAAAACAACANJpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAABQQAAAAAAAAABQAAAAAAAAAAAAAAAUAUAAAAAAAAABQAAAAAAAAAUAAAAAAAAFAAAAAABQAAAAAUAAAABBQAAAAUAAAAFAAFAAUAAAAAFAAAAABQAAAEAAFAAAABQAAAAAAAAAAUAAAAEAAAAAAAAAAAAAAAAAABAAAAFAAAAAAAAEAAAAAAABABGk0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAoIAAAAAAAAAAAoAAAAAAAAAAAAAAAKAAKCAoAAAAACgAAAAAAAAAoAAAAAAAAAKAAAAACgAAAAAAoAAAACCgAAAAoAAAKAAKAAoAAAAAKAAAAACgAAIAAKAAAAACgAAAAAAAAoAAAAAAAAAAAAAAAAAIAAAAAAAAAACAAAAKAAAAAAAIAAAAAAAADRaZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAAAUAAAAAABQAAAAAAAAAUAAAAAAAAFAAAAAABQAAAAAUAAAABABQAAAAUAAAFAAFAAUAAAAFAAAAABQAAEAAFAAAAABQAAAAAUAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAABAAAFAAAAAAAAEAAAAAABotMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAKAAAAKAAAAAAAAoAAAAAAAAAKAAAAAAAACgAAAAAoAAAAAAKAAAAAgoAAAAKAAAACgACgAKAAACgAAAAAoAACACgAAAAAAoAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAgAACgAAAAAACAAAAAA0WmQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAUEABQQAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAABQAAAABQAAAAAFAAAAAAAAABQAAAAAAAAAUAAAAAFAAAAABQAAAAAEFAAAABQAAAAUAAUBQAAAAUAAAAAFAAQAAUAAAAAFAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAEAUEBQAAAAABAAAAAaLTIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAKCAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAKAAAAAAKAAAAAoAAAAAAAAAAKAAAAAAAACgAAAAAoAAAAAAKAAAAAgAoAAAAKAAACgAACgKAAACgAAAAAoAACACgAAAAAoAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAgAAACgAAAAAACA0WmQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAFAAAAAAAFAAAAAUAAAAAAAAAFAAAAAAAAABQAAAAAUAAAAAAFAAAAAQAUAAAAFAAABQAAABVAAABQAAAAAUABABQAAAAAUAAAAAFAAAAAAAABQAAAAAAAQAAAFABAAAAAAAAAAAAAAQAAAAAAAAAEAAAAUAAAAAAaDTIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAACgAAAAAAAACgAAKAAAAAAAAAACgAAAAAAAAoAAAAAAKAAAAAACgAAAAIKAAAACgAAAAoAAAAKKAAAAoAAAKAAAgAoAAAAKAAAAACgAAAAAAAAoAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACAAAAAAAAAAgAAACgAAADQaZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAFAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAAAAAAAAUAAABQAAAAAAAAAUAAAAAAAAAFAAAAAABQAAAAAAUAAAABBQAAAAUAAAAFAAAABRQAAFAAAABQAAEAFAAABQAAAAAUAAAAAAAAFAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAQAAAAAAAAAAEAAAAAAUaDTIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAoAACggAAAAAKCAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAoAAAAAAAAAAoACgAAAAAAAAAAoAAAAAAAAAKAAAAAACgAAAAAAoAAAACCgAAAAoAAAKAAAAACgCgAKAAAACgAAAqAAAACgAAAAoAAAAAAAAKAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAgAAAAAAAAAAAAIAAADQbZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAUEAABQAQAFBAAUEAAAAAAAAAAAAAFAAAAAAAAAAAAAAABQAAAAAAAAAAABQFAAAAAAAAABQAAAAAAAAAUAAAAAAFAAAAAAABQAAAEAFAAAABQAAAUAAAAFAAFAAUAAAFAAAABUAAAFAAAAABQAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAABAAAAAAAAAAAAAQAGg2yAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoCAAoIAACgAAAAAAAAgAAAAAAAAAAAAAoAAAAAAAAAAAAAAAKAAAAAAAAAAAAKAoAAAAAAAAAAKAAAAAAAAACgAAAAAAoAAAAAAAKAAAAgAoAAAAKAAACgAAAAoAAAoCgAAAoAAAKAgAAAoAAAAKAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAACA0G2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAUAAAAAAAAAAAAAAAFAAAAAAAAAAAAABRQAAAAAAAAAFAAAAAAAAAABQAAAAAAUAAAAAAAFAAAQAUAAAAFAAAABQAAAAUAAAAVQAAAUAAAFAQAAUAAAAAFAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAEAAAAAAAAABz22QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAQFBAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAAAAAAAAAAAAFFAAAAAAAAAUAAAAAAAAAAFAAAAAAABQAAAAAAUAAAABBQAAAAUAAAAFAAAABQAAAUUAABQAAAUBAAABQAAAAUAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAQAAAAAAAAHPbZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAFFAAAAAAAAAUAAAAAAAAAAFAAAAAABQAAAAAAAUAAAABBQAAAAUAAAAFAAABQAAAAUUAABQAAAUBAABQAAAAAUAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAQAAAAAAAHPbZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAABAAAUEAAAAAAAAFAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAUAUAAAAAAABQAAAAAAAAAAUAAAAAAAFAAAAAAABQAAAEAFAAAABQAAAAUAAAFAAABQABQAFAAABQEAAFAAAABQAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAABAAAAAAAAc9tkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAFAAAAAAAAAAAAAAABQAAAAAAAAAAAAAUAAAUAAAAAABQAAAAAAAAAUAAAAAAAFAAAAAAAABQAAAEAFAAAABQAAAAUAAAFAAABQABQFAAABQEAAAFAAAABQAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAABAAAAAAAc9tkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAFAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAUAAUAAAAAAABQAAAAAAAAUAAAAAAAAFAAAAAAABQAAAEAFAAAAABQAAAAUAAAFAAABQABQFAAABQEAAFAAAABQAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAABAAAAAAAc9tkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAFAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAUAAAAUAAAAABQAAAAAAAAUAAAAAAAAFAAAAAAABQAAAEAAFAAAAABQAAAUAAAAFAAABQAABVAAABQEAAFAAAABQAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAABAAAAAAAc9tkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBQQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAABQAAABQAAAAFAAAAAAAAABQAAAAAAAUAAAAAAAFAAAAQAAAUAAAAAFAAABQAAAAUAAAFAAFUAAAFAQAAAUAAAFAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAEAAAAAABz22QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQFABAAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAFAAAFAAAAAAUAAAAAAAAFAAAAAAAABQAAAAAAUAAABAAABQAAAAAUAAAAFAAABQAAAAUAUBQAAAUBAAABQAAAUAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAQAAAAHPbZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAUAEAAAAAAAAAAAAFAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAAAUAAAAABQAAAAAAAAUAAAAAAAFAAAAAAABQAAEAAAFAAAAABQAAAAUAAAAFAAABQBQAFAAABQEAAFAAAABQAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAABAAAAc9tkAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAFAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAAUAAAAABQAAAAAAAAAUAAAAAAAFAAAAAABQAAAEAAAFAAAABQAAAAAUAAAAFAAAFUAAAFAAABUAAAFAAAABQAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAABAAc9tkAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAABQQAAAAAAAUAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAABQAAABQAAAAAFAAAAAAAAABQAAAAAAAUAAAAAAFAAAAQAAAUAAAAFAAAABQAAAAUAAAUBQAAAUAABBQAAAUAAAFAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAHObZAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAUAEAAAAAAFAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAUAAAAAUAAAABQAAAAAAAAAUAAAAAAAFAAAAAABQAAAEAAFAAAAABQAAAAUAAAAFAAFAAUAAFAAAQAUAAAFAAABQAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAABzm2QAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAFABAAAAAABQAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAFAAAAFAAAAAAAUAAAAAAAAAFAAAAAAABQAAAAAAUAAABAABQAAAAAUAAAAFAAAABQABQAFAAABQEAFAAAABQAAAUAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAc5tkAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABQAQAAAAAAUAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAABQAAAAABQAAAAFAAAAAAAAAABQAAAAAAAUAAAAAAAFAAAAQAUAAAAAFAAAABQAAAAUAAUABQAAUABABQAAAAUAAAFAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAHObZAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAUAAAEAAAAAFAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAUAAAAAAUAAAABQAAAAAAAAAAUAAAAAAAFAAAAAAABQAAAAEFAAAAABQAAAAUAAAAAFAFAAUAAAFAQAUAAAAFAAABQAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAABzm2QAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAUAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAABQAAAABQAAAAAFAAAAAAAAABQAAAAAAAAUAAAAAAAFAAAAAQUAAAAAFAAAABQAAAAAUAUABQAAAUABABQAAAUAAAAFAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAHObZAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAUEAAFAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAUAAAAAAAUAAABQAAAAAAAAAAUAAAAAAAAFAAAAAAABQAAAAAVAAAAABQAAAAAUAAAAFAFAAAUAAAFAQAUAAAFAAAABQAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAABzm2QAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAUAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAABQAAAAAABQAAAFAAAAAAAAAABQAAAAAAAAUAAAAAAAFAAAAABUAAAAAFAAAAABQAAAAAUAUABQAAAUABABQAAAUAAAAFAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAHObZAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAABQAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAFAAAAAAFAAAAAUAAAAAAAAAAFAAAAAAAABQAAAAAAAUAAAAAFQAAAAAAUAAAAFAAAAABQBQAFAAAABQAEFAAABQAAAAUAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAc5tkAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAFAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAUAAAAAAAAUAABQAAAAAAAAAAAUAAAAAAAAFAAAAAAABQAAAAAVAAAAAABQAAAAAUAAAAAFAFAAUAAAFAAAQUAAAFAAAABQAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABz22QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABQAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAFAAAAAAAAFAAAUAAAAAAAAAAAFAAAAAAAABQAAAAAAAUAAAAABBQAAAAAAUAAAAAFAAAABQBQAAFAAABQAAEFAAABQAAAAUAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAc9tkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAABQAAAAAAABQAFAAAAAAAAAAAABQAAAAAAAAAUAAAAAAFAAAAAABUAAAAAAFAAAAABQAAAAAUAUABQAAAAUAAFQAAAUAAAAFAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAHPbZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAABAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAUAAAAAAAAAUABQAAAAAAAAAAAAUAAAAAAAAAFAAAAAABQAAAAAEFAAAAAAABQAAAAAUAAAAFAFAAAUAAAFAAABUAAAFAAAABQAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAABz22QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAQAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAFAAAAAAAAAFAAUAAAAAAAAAAAFAAAAAAAAAABQAAAAAAUAAAAABBQAAAAAAAUAAAAAFAAAAABRQAAFAAAABQAAVAAABQAAAAUAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAc9tkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAEAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAABQAAAAAAAAABQAFAAAAAAAAAAABQAAAAAAAAAAUAAAAAAFAAAAAABUAAAAAAAFAAAAAABQAAAAUUAAABQAAAUAAAFQAAUAAAAAFAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAHPbZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAABAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAUAAAAAAAAAAUBQAAAAAAAAAAAUAAAAAAAAAAAFAAAAAABQAAAAAAUBAAAAAAABQAAAAAUAAAAFFAAAAUAAAAFAABUAAAFAAAABQAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEABz22QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAQAAAAFBAAAAAABQAAAAAAAAAAAAAAAAAUAAAAAAAAAAUABQAAAAAAAAAAAUAAAAAAAAAAAFAAAAAABQAAAAAAAUBAAAAAABQAAAAAUAAAAFFAAAAUAAAAFAABUAAAFAAAAABQAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEABz22QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAQFBAAUEBQQAAAAUAAAAAAAAAAAAAAAAAAFAAAAAAAAAFBAUBQAAAAAAAAAAUAAAAAAAAAAAFAAAAAAABQAAAAAAAUAABAAAABQAAAAAUAAAAFFAAAAUAAAAFAAAQUAAAFAAAAABQAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEABz22QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAQFBAAAAUVAAAAAAAAAAAAAAAAAABQAAAAAAAAABQAAFAAAAAAAAABQAAAAAAAAAAAAUAAAAAAAFAAAAAAABQAAEAAAAFAAAAABQAAAABVAAAABQAAAUAAAFQAAAAUAAAAFAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAHPbZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAABAAUEABQQFFQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAUAABQAAAAAAAAAUAAAAAAAAAAAAFAAAAAAABQAAAAAAAUAAABAAABQAAAAUAAAAAAFFAAAAUAAAFAAAABUAAAAFAAAABQAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAABz22QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAQFABAUEFAAAAAAAAAAAAAAAAAABQAAAAAAAAAABQAFAAAAAAAAABQAAAAAAAAAAAAAUAAAAAAAFAAAAAAABQAAAEAAAFAAAABQAAAAAAUUAAABQAAAAUAAAFAQAAAUAAAAAFAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAHPbZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAABAUEABQQUAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAFAAAUAAAAAAAAAFAAAAAAAAAAAABQAAAAAAAAUAAAAAAAFAAAAQAAAUAAAAAFAAAAABRQAAAFAAAABQAAAAUBAAABQAAAAUAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAc9tkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAEABQQUBQQAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAUABQAAAAAAAAAUAAAAAAAAAAAAFAAAAAAAABQAAAAAAUAAABAAAABQAAAAAUAAAAAAFFAAAAUAAAAFAAAABQEAAAFAAABQAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABz22QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAQAFBABVBAAAAAAAAAAAAAAAAAABQAAAAAAAAAAABQFAAAAAAAAAABQAAAAAAAAAAAAUAAAAAAAAFAAAAAABQAAAAEAAAFAAAAABQAAAAAAUUAAABQAAAAUAAAAFAAQAAUAAAAFAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAHPbZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAABAUAEAFUEAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAFAAUAAAAAAAAAFAAAAAAAAAAAAABQAAAAAAAUAAAAAAAFAAAAAQAAAUAAAAAFAAAAAABQBQAAAFAAAABQAAAAUBAABQAAAAUAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAc9tkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBQBUABQQFBAAAAAAAAAAAAAABQAAAAAAAAAAAABQFAAAAAAAAABQAAAAAAAAAAAAUAAAAAAAAFAAAAAABQAAAAAEAAAFAAAAAABQAAAAAAUAUAABQAAAAUAAAAFAAQAUAAAAAFAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAHPbZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAQFBAUEAAAAAAAAAAAAFAAAAAAAAAAAAAAFUAAAAAAAAAAFAAAAAAAAAAAABQAAAAAAAAUAAAAAAFAAAAAAQAAAUAAAAAAFAAAAAABQBQAAAFAAAABQAAAUABAABQAAAAAAUAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAc9tkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAABAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUUAAAAAAAAABQAAAAAAAAAAAAUAAAAAAAAFAAAAAABQAAAAAEAAAFAAAAAABQAAAAAAAUAUAABQAAAAUAAAFAAQAAUAAAAAAAAFAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAHPbZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAQFBAAAAAAAAAABQAAAAAAAAAAAAAAAUAAUAAAAAAAABQAAAAAAAAAAAAUAAAAAAAAFAAAAAABQAAAAAEAAAFAAAAAAABQAAAAAAUAAUABQAAAAUAAAAFAQAAUAAAAAAAAAFAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAHPbZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAQFBAAAAAAABQAAAAAAAAAAAAAAAUAAUEBQAAAAAAAFAAAAAAAAAAABQAAAAAAAAAUAAAAAAAFAAAAAAQAAUAAAAAAAFAAAAAAABQBQAAFAAABQAAAAUBAAAABQAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAc9tkAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAABAUEAAAAAAAFAAAAAAAAAAAAAAAABQAABQAAAAAAAAFAAAAAAAAAAABQAAAAAAAAAUAAAAAAAFAAAAAAQAAUAAAAAAAAFAAAAAABQABQAFAAABQAAAAUBAAAAAABQAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAc9tkAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAABAAAAAAAABQAAAAAAAAAAAAAAAUAAAAAAUAAAAAABQAAAAAAAAAAAUAAAAAAAAAFAAAAAABQAAAAAAEAAFAAAAAAAABQAAAAAAUAAUABQAAAUAAAAFAAQAAAAAAUAAAAAAAFAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAHPbZAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAQAAAAAAUAAAAAAAAAAAAAAAAFAAAAAAAFAAAAAAUAAAAAAAAAAAFAAAAAAAAABQAAAAAAUAAAAAABAABQAAAAAAAAUAAAAAAFAAAFAUAAAFAAAAABQAEAAAAAAAFAAAAAABQAAAAAAAAAAAAAAUAAEAAABQAAAAAAQAAAAAAAAAAAAAAAAHPbZAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAQAAAAAAAUAAAAAAAAAAAAAAAAFAAAAAAAAAFAAAAUAAAAAAAAAAAFAAAAAAAAABQAAAAAAUAAAAAABAABQAAAAAAAAUAAAAAAAFAAFAUAAAFAAAAAABQAAEAAAAAAFAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc9tkAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABAUEAAFAAAAAAAAAAAAAAAABQAAAAAAAAAABQAAFAAAAAAAAAABQAAAAAAAAAUAAAAAAAFAAAAAAAQAAUAAAAAAAAAFAAAAAABQAABQFAAABQAAAAAAAUAAABAAAABQAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHPbZAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAQAAAUAAAAAAAAAAAAAAAAFAAAAAAAAAAFAAAUAAAAAAAAAAAFAAAAAAAAABQAAAAAAAUAAAAAAABABQAAAAAAAAAUAAAAAAFAAAFAUAAAFAAAAAAAAABQAAEAAAFAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc9tkAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAABAAABQAAAAAAAAAAAAAAAAAUAAAAAAAAAAAUABQAAAAAAAAAAAUAAAAAAAAAFAAAAAAABQAAAAAAAAEFAAAAAAAAABQAAAAAAUAAAUBQAAAAUAAAAAAAAAFAAAQAAAUAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABz22QAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAEAFAAAAAAAAAAAAAAAABQAAAAAAAAAAABQFAAAAAAAAAAAABQAAAAAAAAAUAAAAAAAFAAAAAAAAAAQUAAAAAAAAFAAAAAABQAABQFAAAAABQAAAAAAAAAUAABAAABQAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHPbZAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAUAAAAAAAAAAAAAAAAAFAAAAAAAAAAAFAAUAAAAAAAAAAAAFAAAAAAAAABQAAAAAAAUAAAAAAAAABBQAAAAAAAAUAAAAAAFAAAFAUAAAAAAFAAAAAAAAABQAAAEAAFAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaDbIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqAAAAAAAAAAAAAAAAACgAAAAAAAAAAAACgKAAAAAAAAAAAACgAAAAAAAAoAAAAAAAAKAAAAAAAAAAgoAAAAAAAAAKAAAAACgAACgKAAAAAAACgAAAAAAAAAoAAACAACgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANBtkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAUEAAAAAAAAAAAAAAAFAAAAAAAAAAAAAFUAAAAAAAAAAAAFAAAAAAAAABQAAAAAAAAUAAAAAAAAAAFQAAAAAAAAAUAAAAAFAAAAFAUAAAAAAAFAAAAAAAAABQAAAEAAAFAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaDbIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqAoIAAAAAAAAAAAAAAAKAAAAAAAAAAAAAKAoAAAAAAAAAAAAKAAAAAAAAACgAAAAAAAAoAAAAAAAAAAKgAAAAAAAAAoAAAAAKAAAAAKAoAAAAAAAAKAAAAAAAACgAAAIAAAAKAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAADQbZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAQAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAUBQAAAAAAAAAAAAUAAAAAAAAAFAAAAAAAABQAAAAAAAAAAUBAAAAAAAABQAAAAAUAAAAAAUBQAAAAAAAAUAAAAAAAAFAAAAQAAAAAAUAAAAAAAAFAAAABAAAAAUAAAAAAAAAAEAAAAAAAABQaDbIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAACAoIAAAAAAAAAAAAAKAAAAAAAAAAAAAAKoAAAAAAAAAAAAAKAAAAAAAAACgAAAAAAAAAoAAAAAAAAAAKAgAAAAAAoAAAAAKAAAAAAAAACigAAAAAAAKAAAAAAAACgAAAAIAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAANFtkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABAAUEAAAAAAAAAAAAAAFAAAAAAAAAAAAAFBFFAAAAAAAAAAAAAUAAAAAAAAAFAAAAAAAAABQAAAAAAAAAAUBAAAAAABQAAAAAUAAAAAAAAAAFAFAAAAAAAUAAAAAAAAFAAAAAAQFBAAUEFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABotsgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAIAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAKogKAAAAAAAAAAAAoAAAAAAAAAKAAAAAAAAACgAAAAAAAAAAAoACAAAACgAAAAAoAAAAAAAAAAAKAAKAAAAAAAoAAAAAAAKAAAAAAAAAAAgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANFtkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAUAUEBQAAAAAAAAAAFAAAAAAAAABQAAAAAAAAAUAAAAAAAAAAAFAAQAAAAUAAAAAAFAAAAAAAAAAABQABQAAAAAAFAAAAAAAABQAAAAAAAAAEFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABotsgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAKKAgAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAKAKCAoAAAAAAAAAACgAAAAAAAAAoAAAAAAAAAAKAAAAAAAAAACgAIAAAAKAAAAAACgAAAAAAAAAAAoAAAoAAAAAACgAAAAAAAAoAAAAAAAAACCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0W2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQFFAQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAFAAFAAAAAAAAAAAUAAAAAAAAAAFAAAAAAAAAABQAAAAAAAAAAUABAAAABQAAAAAAUAAAAAAAAAAAAFAAAFAAAAAAAUAAAAAAAAFAAAAAAAAAQUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGi2yAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAACAAooCAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAoAAoAAAAAAAAAACgAAAAAAAAAAoAAAAAAAAAAAKAAAAAAAAACgIAAAAAKAAAAAACgAAAAAAAAAAAAAoAAoAAAAAAACgAAAAAAAAoAAAAAAAACCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0W2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQFFQAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAFAAFAAAAAAAAAAAUAAAAAAAAAAFAAAAAAAAAAABQAAAAAAAAAUBAAAABQAAAAAAAAUAAAAAAAAAAAAAFAAFAAAAAAAAUAAAAAAAAFAAAAAAAAQAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGi2yAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAgAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAKAAAKAAAAAAAAAAAoAAAAAAAAAAKAAAAAAAAAAACgAAAAAAAAoACAAAACgAAAAAAAAoAAAAAAAAAAAAAKAAKAAAAAAAAoAAAAAAAAAKAAAAAAAAgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANFtkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAUAAAUAAAAAAAAABQAAAAAAAAAAAAUAAAAAAAAAAAFAAAAAAABQEAAAAAFAAAAAAAAAABQAAAAAAAAAAAAUAAUAAAAAAABQAAAAAAAAUAAAAAAABABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/2Q==", + skyBoxDown: "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAFA3PEY8MlBGQUZaVVBfeMiCeG5uePWvuZHI////////////////////////////////////////////////////2wBDAVVaWnhpeOuCguv/////////////////////////////////////////////////////////////////////////wAARCAgACAADAREAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAEC/8QAFBABAAAAAAAAAAAAAAAAAAAAAP/EABYBAQEBAAAAAAAAAAAAAAAAAAABAv/EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhEDEQA/ADKgAAAAAAAAAAIAAAAACgAgAAAAAAIAAACAAAAAAoAAAAAAAKAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAKAACAAAAAAAgAAAIAAAAACgAAAAAoAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAgAAIAAAACgAAAoAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACggAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAgAIAAAACgAAoAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAgAAIAACgAAoAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAACgAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAgAAAAAAKAAAACgAAgAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAgAAKAAAACgAAAAAgAAAAAAAAAAAAIAAAAAAAAAAAAAAACgAAgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAoAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAACAAAoAAAAAAAAAAAAAIAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAAgKAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAoAAAAAAAAAAAAAAAAAAAAAAAIAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAAAAAKAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAIACgAAAgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAKAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAoAAAAIACgAAAAAAAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAAAAIAAAAAACgAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAIAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACggAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAKAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAACgAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAKAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAICgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAIAAAAAAACgAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAKAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAIAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAIAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACgAAAAgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAgKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAACgAAAAAAAAAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAACAAoAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAKAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAoAAAAIAAAAACgAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAgAAAAAAAKAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAIAAAAAAAAAACgAAAAAAAAAAAAAgAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAgAAKAACAAAAAAAAoAAAAIAAAAAAACgAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAKAAAAAAAAAACAAAAAAAAAAAAAgAAKAAAAACAAAAAAoAAAIAAAAAAAAACgAAAAAAAAAAAAAgAAAAAAAKAAAAAAAAAAAACAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAgAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAACAAAAAAAAAAAAAgAKAAAAAAAACAAAAAoAIAAAAAAAAAACgAAAAAAAAAAAAAgAAAAAAAKAAAAAAAAAAAAAAAACAAAAAAAAAAAAoAAAAAIAAACgAAAAAAAAAAAgAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAACAoAAAAAAAAAAAAIAAAAAAAAAAAAAACgAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAACAAAAAAAAAAAoAAAAIAAAAACgAAAAAAAAAAgAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAICAoAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAIAAAAAACgAAAAAAAAAAgAAAAAAAAAAAAKAACAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAMgAoAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAKAAAAAACAoAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAADIAAKAAAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAICgAAAAAAAAAgAAAAAAAAAAAAAAAAAAKAAACAAAoAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAADIAAKAAAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAKAACAAAAAyAACgAAAAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAADIAKAAAAAAAAACAAAoAAAAAAAAAIAAAAAAACgAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAACAAAAAyCgAAAAAAAAAgAAAAKAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAgAAAAKAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAKAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAACAAAoAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAIAAAACgAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAoAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAgAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAACgAAAAAAAAgAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAACgAAAAAAAAgAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAIAAAAAAAAAAAAAAACgAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAKAAAAAAAAACAAAAAAAAAAAgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAKAAAAAAAAACAAAAAAAAAAAgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAKAAAAAAAACAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACggAAAAAAAAAAKAAAAACAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAIAAAAAAAAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAKAACAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAIAAAAAAAAAAAACAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAKAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAoAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAoAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAICAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAACAgAAAAKAAAAAAAAAACAoAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAAAAAAAACgAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAoAAAAAAAAMgAAoAAAAAAAAAAAAAAICgAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAgAAAAAAAAAKAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAACgAAAAAAAyCgAAAAAAAAAAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAIAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAKAAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAgAAAAAAKAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAAAoAAAAAAMgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAgAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAACgAAAAAAAAAAAAAgAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAgAAAAAAAAAAAAAAAKAAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAAAAAgAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICgAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAgAAAAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACgAgAAAAAAAAAKAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAKAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAKAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAKAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAACgAAAAgAAKAAAAAAAAAAACAAAAAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAIAAAAAAACgAAAAAgAAAAAKACAAAAAAAAAAAoAAAAAAIAAAAAAACgAAAAAAAAAAAgAAAAAAAAAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAIAAAAACgAAAAAAAAAgAAAAAAAAAAAAKAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAIAAAAAACgAAAgAAAAAAAAAKAAAAACAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAKAAACAAAAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAACgAAAAAAgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAAAgAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAoAAAAAIAAAAAAAACgAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACgAAAAAAgAAAAAKAAAAAAAAAAAAAAACAAAAAAoAAAIAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAgAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAIAAAAACgAAAAAgAAAAKAAAAAAAAAAAAAAACAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAgAAAAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAAAAAAAAAAAACAAAAAAAAoAAAAIAAACgAAAAAgAKAAAAAAAACAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAIAACgAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAAAAAAAACgAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAKAAACAAAoAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAIAAACgAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAAAAAAAACgAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAACgAAAgAAKAAAACAAAAAAAAAAAoAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAgAKAAAACAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAACAAAAAgAAAKAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACAAAAAAAAAAAAoAAAAAAAAAAAAAAIAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAgAAAAIAAACgAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAgAAAAAKAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAgAAAIAAAACgAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAgAAAAAAAAAAAAAAKAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAgAAAKAAAAACgAAAAAAgAAKAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAIACgAgAAAAAAAAAAAAKACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAAgKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAoAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAACgAAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAKAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAACgAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAoAAAAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAACgAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAKAAAAAAAAAAAAAAAAACAAAoAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAKAACAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAACgAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAACAAAoAAAAAIAAAAAAACgAAgAAAAAAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAICgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAKAACAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAKAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAACgAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAAoAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAKAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAAAAoAAAAAAAAAAKAAAAAACAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAgAAAAKAAAAAAAAAACgAAAAAAgAAAAIAAAACgAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAIAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAIAAAAAAAACgAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAgAAAAAAAAKAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAACAAAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAoAAAIAAAACAAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAACgAAAAAAoAAAAIAAAACAAAAAAoAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAACgAAAAAAoAAAAAIAAACAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAKAAAAACAAAAAgAAAAAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAoAAAAAIAAAACAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAgAAAAAAKAAACAAAAAgAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQIAAAAAAAAAAAAAACAAAAAAgKAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ACAAAAAAAAAAAAgAAAAIAAAACgAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAAgAAAAAAAAAAIAAACAAAAKACACgAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAACAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAoAAIAAAAAAAAAAAAAAAAAAAADQIAAAAAAAAAACAAAAgAAAAAAAAKAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAIAAACgAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAIAACAAAAAAAAAoAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAgAAKAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAAAAAAAgAAAIAAAACgAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAACAAAoAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAKAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAACAAAoAAAKAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAACAAAoAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAICgAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAAAAAAAAAgAAAAAAKACAAAAAAoAAAIAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACgAAAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAKCAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAACAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAACAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAgAAAAAKACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAIAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAKAAAACAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACggAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAACgAAAAAAAAAAgAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgCigIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAKAKAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAKAAACAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIoAoCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAAAIAAAACgAAAAAAAAgAAAAKAAAAAACAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACKAKAgAAAAAAAAAAAAAAAAAAAgAAAAAAAKAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAgAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAgKAAAAAAAAAAAAAAAAAACKKAAgAAAAAAAAAAAAAAAAAAgAAACgAAgAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAgAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAICgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKACAACggAAAAAAAAAAAAAAIAAACKAKAAAgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACggAoAAAAIAAAAAAAAAAACAAAAgCgCgAIAKACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAACAAAAAAAAKCAACgAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAAAAAIAAAAAAAAAAAACgAAoAAAAAAAAIAACgAAgAAAAAAAKAACAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAACAAAAAAAAAAAAoAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAgAAAAAAKAAAAAAAAAAACAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAACAAAAAoAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAgAAAAKAAAAAAAAAAAACAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAAAAIAACgAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAKAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAoAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAgAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAAoAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAIAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAKAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAIAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAKCAAAAAAAAAAoIACgAgAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAADIKAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAKAACAoIAAAAAAACgAAAAAgAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACAAKIAACgIAAKAAAAAAAAAAAAAAAACAoAAAAAAAAAAAAAAKCAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAgKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAKACAoIAAAAAAAAACgAAAAAgAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAAoAAAAIAAogAAAAKgAoAAAAAAAAAAAAAIAAAACgAAAAAAAAAAAAAoIAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAoAICggAAAAAAAAAAKAAAACACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAogAAAAKAgAoAAAAAAAAAAAAIAAAACgAAAAAAAAAAAAAoIAAAAAAAAAACAAAoAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAAKAACACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAoAgAAAKAgAoAAAAAAAAAAAAIAAAACgAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAKAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAoAAAAIAAAAAAAAAAAAKAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAACAKAAAACACgAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAACgCAAAoACAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIoAAAIAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAACgAACAAAoACAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAKCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAoICgAACAAAAoACAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAAAAAAACgAoAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAACgAAAAACAAAAAoAACAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAACgAAoAAAAIAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAKCAAoAAAAAAAAAAgAAAAKAAAgAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAoAAKAAAAAAACAAAAAAAAAAgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAgAAAAAACgACAAAAAoAAAAAAAIAAAACgAAIAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAKAACgAAAAAAAAgAAAAAAIAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAgAAAACgAACAAAAAAAoAAAAAAAIAACgAAAAIAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAgAAAAAAKAAACgAAAAAAAgAAAAAAAIAAAoAAIAAKAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAIAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAIAAAAAoAAgAAAAAAAKAAAAAAAAAAAAAAAgAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACAAAAAAoAAAAKAAAAAAACAAAAAAAgACgCAAAqAACgAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAACAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACAAAAAKAAAAAAIAAACgAAAAAAAAAAAAAAIAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAgAAAKAAAAACgAAAAAAgAAAAAAAIAoAgAAAKgAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAIAAAAAACAKAAKAgKAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAgAAACgAAAAAAAAAAAAAAAAAAAAAAAAgAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAIoAgAAAAKgAoAAAAAAAAIAAAAAAACAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAgAAAAAIAoAAAAAoACAAAAAAAAAAAAAAoAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACAAAKAAAAAAAAAAAAAAAAAAAAAAACAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAAAigCAAAAAqACgAAAAAAAAAgAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAACAAAAAigAAAAAAACoAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAIAAoAAAAAAAAAAAAAIAACgAgAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAIoAgAAAAKAgAoAAAAAAAAAAIAAACAAAoAAAAAKAAAACAAAAAAAAAAAoAAAAAAAIAAAACAAAAAigAAAAAAAgoAAAAAAAACgACAAoAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAgCgAAAAAAAAAAAAgAAAAAAAAAAAAAAAoAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAoAAIAAAAAAAAAAAAogAIAAACgIAKAAAAAAAAAAACAAAAgAKAAAACgAAAAAAgAAAAAAAAKAAAAAAAACAAAAAAgAACiAAAAAAAAIKAAAAAAAAAoAgAAAKAAAgAAAAAAAAAAAAAAAAAAAAAAAAAKCAAAACgAAAAAAAAAAAAAAAAAAAigAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAKAAAAAAAAAAACAAAKIAACAAAoAKgAAAAAAAAAAAAgAAAAAAAAAKAAAAAAAACAAAAAAAAoAAAAAAAAIAAAAACAAAKIAAACAoAACCgAAAAAAAKAAAIAACgAAIAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAoAAAAAAAAAAAAAAAAAAAIAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACggAAAKCACgAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACAKAIAAAAAACoAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAAAgAAAAAKAAAAAAAAACAAAAAAgACgCAAAAgKAAACoAAAAAAACgAAAAAAAAAgAAAAAAAAAAKCAoAIAAAAAACgAAAAAAgAAoAAAAAAAAAAAAAAAAAAAIAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAoAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAgCgACAAAAAoCAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACAAKAAIAAAAAAACoAAAAKACAKAAAAAAAAACAAAAAAAAAAoAAIAAAAAAAAAACgAAAAAgAoAAAAAAAAAAAAAAAAAAAIAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAACgAAAAAACoAAAAAAAAAAAAAAAAAKAAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAKAAAAAACAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAACAKAAIAAAAAACoAAAAAKACAKAAAAAAAACAAAAAAAAAAAoAAIAAAAAAAAACgAAAAAAAgoAAAAAAAAAAAAAAAAAAAIAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAACgAAAACgIAAAAAAAAAAAAAAAAAAKAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAKCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAgCgACAAAAAoCAAAAAACggACgAAAAAAAgAAAAAAAKAAAAACAAAAAAAAAAAAoAAAAIAKAAAAAAAAAAAAAAAAAAACAKAAAAAAACAAAAAAAAAAAAAAAAAAAACgAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAigAACAAAoCAAAAAAAAAAAoAAAAAIAAAAAACgAAAAAAAAAgAAAAAAAAAAAAKACACgAAAAAAAAAAAAAAAAAAAAgCgAACAAoAACAAAAAAAAAAAAAAAAACgAAAAAAAAAKCAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAoAAAICgAAAAAAAAAAAAAAgAAAAAAAAAAAICgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAIoAAAAAIAAAAAAAAAAACgAAAgAAAAAAAKAIACgAAAAIAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAKAAAIACgAAIAAAKACAAAAAAAAAAoAAAAAAAAAAAAACggAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAIAAAAAAAAAAACAKAACAAAAAAAAAAAAAAAACgAAgAAAAACgCAAAoAAACAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAgACgAAAAAAAAgAAoAAAIAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAoAgAAKAAAgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAoAAAAAAAAIAAKAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAgAAAKAAAAAAAAAAAAACAAAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAoAgAKAAAAAAgAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAIAoAAAAAAAAIAAAKAAAAACAAAAAAoAAAAAAAAAAAAAAKAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAACAAAAAgKAAAAACAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAAAACgAAAAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAAAgAAAACgAAAAAAAAAAAgAAAAAAAAoAAAAAIAAAoAAAAIAAKAAAAAAAACAKAAAAAAAAACAAACgAAAAAAgAAAAKAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACAAAoAAAAAIAACgAAAAAAAAAAgAAAAAAAAAAAAAAAAAAKAAAAAAAAAACAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAACAAAAAKAAAAAAAAAAAACAAAAAAACgAAAgAACgAAAAgAAAAoAAAAAAAIAoICgAAAAAAgAAAAoAAAAAAIAAAACgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAgAAKAAAAAACAAoAAAAAAAAAIAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAgAAAACgAAAAAAAAAAAAgKCAAAAAAAAAAAoAAAAAAAAAIAKAoAAIAAIAAoIAAAAAAAAAAAAKAAAAACAAAAAoAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAIAACgAAAAAAAAgKCAoAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAoAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAACgAAAAIAIAAAAAACgAAAAAAAAAAAAAAgAAAAAKAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAoAAACAoAAAAAAAAAgAAAAAAAKAAAAAAAAAAAKAAAAAgAiggAAAAAoAAAAAAAAAAAAAAAAIAAAACgAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAgAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAKAgAAKCAoAAAAAAgKCAAAAAAAAAoAAAAAAAAoAAAAAACAogCAAAACgAAAAAAAAAAAAAAAAAAgAAAKAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAoCAAAAoAAAAAgKAAAAAAACAAAAoAAAAAAoAAAAAAAACAoiAAAAACgAAAAAAAAAAAAAAAAAAAKCAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAICgAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAqAAAAoAAAAAgAKAAAAAACAAAAoAAAAAqAoAAAAAAAAIIoIAAAAKAAAAAAAAAAAAAACgAgAAACgAAgAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAoAAAAAAAAIAACgAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAoCAoiCqAAIAAACgAAAAAAAgAAAAKCAoqAAAAAAAAAoAIIAAAAACgAAAAAAAAAAAAoAAAAAAIAoAAIAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAgAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAoAIAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAKCIACgAAAAACgAAAAAAAAgAAAAAAAoAAAAAAAAAAAAIAAAACgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAKAAAACAAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAoIAAAAAAAAACgAAAAAAAAAgAAAAAAAoAAAAAAAAAAAAIAAAACgAAAAAAAAAAoAAAAKAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgNAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAACAAAAAAAAAAAAAAAAoAAIAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAKCAAAAAAAAAoICgCAAAoAACAAAAAAACgAAAAAAAAAAAAAgAAAKAAAAAAAAAACgAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAA0AAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAAAAAACAAAoAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAKAACAoIAAAAAAACgACAAoAAACAAAAACgAAAAAAAAAAAAAAgAAKAAAAAAAAAAACgAAAAoAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAA0AAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAKAAAAACAAAAAAAoAAgAAKAAAgAAAAoAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAoAAAAAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgNAAAAAAAAAAAgAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAACgAAAAAAAgAAAAAKAAAIAACgAAIAAAKAAAAAAAAAAAAAACAAAoAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAgAAAAAAAAAAAAAAAAKAAAACAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKIAAAAAAAgAAAAAKAAAAIACgAAIAAAAKAAAAAAAAAAAoIAIoIKAAAAAACgAgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAIAAAAAgAAAAAAAKAAAAAAAAACAAACgAAAAAAAAKCAoAIAAAAAAAAKAAACAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAoIAAAAAAAAAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAgAAACACgAAAgACgAAAAAAAAAgAAAoAAAAAACgAgKAAAACAAAAACgAAAAAgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAgAAAAAAAAKAAAAAAAAAAAACAAAAAAAAoAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAACAAKAAAAAAAACAAACgAAAAAAAKAAAAAACAAAAACgAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAgAAAAAAAAAKAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAgCgAAAAAAAgAAAoAAAAAAAAACgAAAAAgAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAigAAAgAAAAAAoAAAAAAAAAACgAAAAgAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAIAACgAAAAAAAAAAAKCAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAIAAAAAAAAAACgAgAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoIAAKAAAAAACAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAKAACAAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgCoAAAAAAAAAIAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAoAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAgAAAAKACAAAAAAAAAAAAAKAAAKgAAAAAAAAAgAAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKoAIAAAIAAAAAAAACqAAAAIgAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAIACgAAgAAAAAAAAAAKACKAAAKgAAAAAAAAAAgAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAKAAACAAAAAAAAAAAAAAAoAAAAAAAAIAAAAACgAAKACAAAACAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAigAAAgoAAAAAAAAAIAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAgAAAAAAAKAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAIAAAACgAAgAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAIAAACAAoAAAKACKAAACCgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAoAAAAIAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACAAAAgCggoAAKAACAKCCgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAACgAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACggAAAAAAAAAAAAAAAAAAAAIAACgAAAAgAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAIAACKAAKgAAoAAAICgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACggAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAgAAAAKAAAAAAAAAAACgAAAAAAAAAAAAAgAAAAAAAAAKAAACAAAAAAAAAoAAIAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAgAACiAAqAAACgAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAACgAAAAAoIAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAKAAAACAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAIAAoAAIAAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAgAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAIAoAIAAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACggAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAKAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoIAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACAoAAAAAAAAAAAAAAAAIAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAoAAAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAACgAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAKCAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAKAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAIAACgAAAAgAAAAAAAAKAAAAAAAAAAAAACggAAAAAAAAAAAAAAAAAICgAAAAAoAAAAAIAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAiAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAoIAAAAAAAAAAAAAACAAAAAAoAAAAKAAAACAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACCAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAACgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAoAAgACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAAAIAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICgAAAAAAAAAAAAAAAAgAAAAAAKAAAAAAAAAAAAAAAAAAAAACAAoAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAoAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAIAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAgAAAAAAKAAAAAAAAAACAoAAAAAAIAAAAAACgAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAICgAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAACAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAAAAIAAAAACgAAAAAAAAAAAgAAAAAAAAAAAAAAAKAACgAAAAAAAAAAgAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAoIAAAAAAAAACgAAAAAAAAAAAAAAAAAgAAAICgAAAAAAAAAAAAAAoAAAAAAAAIACgAAAAAAAAAAAAAAAAAgAAAAAAKAAAAACAAAAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAoAAAIAAAAAAACgAAAAAAAAAAAAgAAAAAAAAAAAAAAKAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAgAAAICgAAAAAAAAAAAAAAoAAAAAAAIAACggAAAKAAAAAAAAAAAAAACAAAAAAAoAAAIAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACKCAACgAAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAgKAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAACAAAoAAAAAAAAIAAAAAAAAAAAAACKAAACACgAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAAAACAAAAoAAAAKAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAIAAAAAAAACgAAAAAgAAAKCAAAAAAAoAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAIAAAACgAAAAAAAgAAIAoAAAAoACACKAAAAACACgAAAAAAAAAAAAoAAAAAAAAAAAAIAAAAACAAAAAqgAAgAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAoAAAIAAAAAACgAAAAAgAAAKACAAAAAAAAoAAAAAAAAAAAIAAAAAAAAACggAAAAAAAAAAKACAAAAAAAAAAgAAAAAKAAAAAACAAigAAAAAAAAAAAACAAoACACgAAgAAKAAAAAACgAAAAAAAAAAAgAAAAAIAAoAAoAAACAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAgAAAAAKAAAAAACAAAA/9k=" + } + , qd = new bh + , jd = function() { + var A = "Success" + , e = "" + , t = "" + , i = !1 + , o = 0 + , n = null; + return function(r, a, s) { + return 5 === r ? document.querySelector(".loading").classList.add("hide") : A = r, + "error" === r && (i = !1), + void 0 !== a && (e = a, + void 0 !== s && (i = s)), + 5e3 > (new Date).getTime() - o ? e !== t && (n = qd.notify(A, { + size: "mini", + rounded: !0, + position: "center top", + sound: !1, + delay: i, + msg: e + }), + o = (new Date).getTime(), + n.$el.childNodes[1].childNodes[0].title = e) : (n = qd.notify(A, { + size: "mini", + rounded: !0, + position: "center top", + sound: !1, + delay: i, + msg: e + }), + o = (new Date).getTime(), + n.$el.childNodes[1].childNodes[0].title = e), + t = e, + n + } + }() + , Hd = function(A, e) { + var t = A.toolId + , i = A.Flag + , o = A.viewer + , n = e.toolbarTop + , r = function(A) { + var e = o.viewerImpl.getBoundingBoxByIds([A]); + return e.max.distanceTo(e.min) / 10 + } + , a = this; + this.deleteListener = null, + this.addListener = null, + this.updateListener = null, + this.imageSize = 100; + var s = qd.window({ + title: "标签", + id: "markWindow" + t, + width: 356, + height: 848, + closeOnEsc: !1, + closeButton: !0, + afterWindowHide: function() { + var A = document.getElementById("mark" + t); + i.mark = !1, + A && (A.style.backgroundColor = "", + A.querySelector(".yj-icon").className = "yj-icon label-icon"), + document.getElementById("markColorModal" + t) && (document.getElementById("markColorModal" + t).style.display = "none"), + o.viewerImpl.cameraControl.dispatchEvent(Rc.ON_CAMERA_CHANGE) + }, + content: '
标签类型:
标签样式:
标题:
背景色:
标签位置(点击模型获取):
构件:
备注栏数:
' + }); + s.$el.addClass("markWindow"); + var l = function(A) { + if (A.intersectInfo) { + var e = "" + , i = function A(e) { + if (e.intersectInfo) { + o.viewerImpl.modelManager.removeEventListener(Rc.ON_CLICK_PICK, A); + var t = o.viewerImpl.camera + , i = e.intersectInfo.point.clone() + , n = t.position.clone() + , r = i.clone().sub(n) + , a = r.length() + , s = o.viewerImpl.getBoundingBoxByIds([e.intersectInfo.selectedObjectId]) + , l = new CA(n,i.sub(n).normalize()).intersectBox(s) + , c = Math.min(s.max.x - l.x, l.x - s.min.x) + , h = Math.min(s.max.y - l.y, l.y - s.min.y) + , d = Math.min(s.max.z - l.z, l.z - s.min.z) + , p = Math.min(c, h, d); + return { + point: e.intersectInfo.point, + distance: a, + face: p === c ? "x" : p === h ? "y" : "z", + eye: r, + box: s + } + } + }(A) + , n = document.getElementById("updateMark" + t); + xh.hasClass(n, "hide") ? (e = s.$el.querySelector(".mark .first-floor select").value, + s.$el.querySelector(".mark ." + e + " .startX ").value = A.intersectInfo.point.x, + s.$el.querySelector(".mark ." + e + " .startY ").value = A.intersectInfo.point.y, + s.$el.querySelector(".mark ." + e + " .startZ ").value = A.intersectInfo.point.z, + s.$el.querySelector(".mark ." + e + " .component ").value = A.intersectInfo.selectedObjectId, + "plane" === e && (s.$el.querySelector(".mark ." + e + " .face ").value = i.face)) : (e = "block" === n.querySelector(".dom").style.display ? "dom" : "block" === n.querySelector(".sprite").style.display ? "sprite" : "plane", + n.querySelector("." + e + " .startX ").value = A.intersectInfo.point.x, + n.querySelector("." + e + " .startY ").value = A.intersectInfo.point.y, + n.querySelector("." + e + " .startZ ").value = A.intersectInfo.point.z, + n.querySelector("." + e + " .component ").value = A.intersectInfo.selectedObjectId, + "plane" === e && (n.querySelector("." + e + " .face ").value = i.face)) + } + } + , c = new Od(o.viewerImpl) + , h = new Gd(o.viewerImpl) + , d = new Vd(o.viewerImpl) + , p = s.$el.querySelector(".mark .dom .markColorInput") + , g = new Hh(p,{ + hasOpacity: !1 + }); + p.value = "rgb(255,0,0)"; + var u = g.element; + u.id = "markColorModal" + t, + u.className = "markColorModal", + document.getElementById("mark" + t).parentNode.appendChild(u); + var f = qd.prompt({ + title: "修改标签", + id: "updateMark" + t, + width: 356, + height: 400, + closeOnEsc: !1, + closeButton: !1, + buttons: { + ok: { + class: "lobibox-btn lobibox-btn-default", + text: "确定", + closeOnClick: !0 + }, + cancel: { + class: "lobibox-btn lobibox-btn-cancel", + text: "取消", + closeOnClick: !0 + } + }, + content: '
标签id:
标题:
背景色:
标签位置(点击模型获取):
构件:
备注栏数:
标签id:
图标选择:
标签大小:
标签位置(点击模型获取):
X:
Y:
Z:
构件:
标签id:
图标选择:
标签大小:
标签位置(点击模型获取):
X:
Y:
Z:
构件:
标签所在面:
' + }); + f.setPosition({ + left: o.viewportDiv.offsetWidth - f.width - 5, + top: 60 + }), + f.promptHide(), + f.$el.addClass("updateMark"), + u.querySelector(".btn-yes").addEventListener("click", (function() { + var A = document.getElementById("updateMark" + t); + xh.hasClass(A, "hide") ? s.$el.querySelector(".mark .dom .colorRect").style.backgroundColor = p.value : f.$el.querySelector(".updateMarkPrompt .dom .colorRect").style.backgroundColor = p.value + } + )); + var m = qd.confirm({ + title: "请再次确认:", + id: "confirm-mark" + t, + width: 356, + height: 87, + closeOnEsc: !1, + closeButton: !1, + iconClass: !1, + msg: "是否要删除此标签?" + }); + m.setPosition({ + left: (qd.viewport.offsetWidth - m.$options.width) / 2, + top: 5 + }), + m.confirmHide(), + xh.addEventListener(n.querySelector("#mark" + t), "click", (function() { + i.mark ? (s.windowHide(), + o.viewerImpl.modelManager.removeEventListener(Rc.ON_CLICK_PICK, l), + f.promptHide(), + u.style.display = "none") : (document.getElementById("mark" + t).querySelector(".yj-icon").className = "yj-icon label-icon active", + i.mark = !i.mark, + s.windowShow(), + o.viewerImpl.modelManager.addEventListener(Rc.ON_CLICK_PICK, l)) + } + )); + for (var C = s.$el.querySelectorAll(".lobibox .lobibox-body .showColorModal"), v = 0; C.length > v; v += 1) + C[v].addEventListener("click", (function() { + u.style.display = "none" === u.style.display ? "block" : "none" + } + )); + for (var I = f.$el.querySelectorAll(".lobibox .lobibox-body .showColorModal"), E = 0; I.length > E; E += 1) + I[E].addEventListener("click", (function() { + u.style.display = "none" === u.style.display ? "block" : "none" + } + )); + for (var B = s.$el.querySelectorAll(".lobibox .lobibox-body .picture .chosed-pic"), x = 0; B.length > x; x += 1) + B[x].addEventListener("click", (function() { + var A = this.parentElement.lastChild; + A.style.display = "none" === A.style.display ? "block" : "none" + } + )); + for (var S = s.$el.querySelectorAll(".lobibox .lobibox-body .picture .file-choose span"), w = 0; S.length > w; w += 1) + S[w].addEventListener("click", (function() { + this.parentElement.querySelector("input").click() + } + )); + for (var M = s.$el.querySelectorAll(".lobibox .lobibox-body .picture .pic-list li"), b = 0; M.length > b; b += 1) + M[b].addEventListener("click", (function() { + var A = this.parentElement.parentElement.querySelector(".chosed-pic") + , e = this.querySelector("img").getAttribute("src"); + A.dataset.chosedUrl = e, + A.querySelector("img").setAttribute("src", e), + A.parentElement.lastChild.style.display = "none" + } + )); + s.$el.querySelector(".mark .first-floor select").addEventListener("change", (function() { + for (var A = this.value, e = s.$el.querySelectorAll(".mark .second-floor"), t = 0; e.length > t; t += 1) + e[t].style.display = "none"; + s.$el.querySelector(".mark ." + A).style.display = "block", + u.style.display = "none" + } + )), + s.$el.querySelector(".mark .third-floor .showList").addEventListener("click", (function() { + var A = s.$el.querySelector(".mark .forth-floor"); + "none" === A.style.display ? (A.style.display = "block", + this.innerHTML = "隐藏标签列表") : (A.style.display = "none", + this.innerHTML = "展示标签列表") + } + )), + s.$el.querySelector(".mark .third-floor .addMark").addEventListener("click", (function() { + u.style.display = "none"; + var A = s.$el.querySelector(".mark .first-floor select").value + , e = [] + , t = null; + if ("dom" === A) { + var i = s.$el.querySelector(".mark .dom .title ").value; + "" === i && (i = "标签"); + var n = Kd.getColorArrayFromRGBA(s.$el.querySelector(".mark .dom .colorRect").style.backgroundColor) + , l = parseInt(s.$el.querySelector(".mark .dom .text-tab ").value, 0) + , c = null; + if (l > 10) + return void jd("warning", "备注栏不可超过10个", 5e3); + if (l > 0) { + c = document.createElement("div"); + for (var h = 0; l > h; h += 1) + c.innerHTML += '' + } + var d = s.$el.querySelector(".mark .dom .component ").value; + if (e[0] = Number(s.$el.querySelector(".mark .dom .startX ").value), + e[1] = Number(s.$el.querySelector(".mark .dom .startY ").value), + e[2] = Number(s.$el.querySelector(".mark .dom .startZ ").value), + isNaN(e[0]) || isNaN(e[1]) || isNaN(e[2])) + return void jd("warning", "标签位置错误,无法新建标签", 5e3); + var p = o.getScreenCoordFromSceneCoord(e); + t = { + title: i, + color: n, + startPosition: [e[0], e[1], e[2]], + endPosition: [p[0] + 100, p[1] - 200], + domElement: c, + componentId: d + } + } else if ("sprite" === A) { + try { + var g = s.$el.querySelector(".mark .sprite .chosed-pic").dataset.chosedUrl + } catch (A) { + return void jd("warning", "未选择标签图标", 5e3) + } + var f = Number(s.$el.querySelector(".mark .sprite .size ").value); + f && f >= 0 || (f = 1); + var m = s.$el.querySelector(".mark .sprite .component ").value; + if (m && (a.imageSize = r(m)), + e[0] = Number(s.$el.querySelector(".mark .sprite .startX ").value), + e[1] = Number(s.$el.querySelector(".mark .sprite .startY ").value), + e[2] = Number(s.$el.querySelector(".mark .sprite .startZ ").value), + isNaN(e[0]) || isNaN(e[1]) || isNaN(e[2])) + return void jd("warning", "标签位置错误,无法新建标签", 5e3); + t = { + url: g, + scale: f, + useImageSize: !1, + width: a.imageSize, + height: a.imageSize, + position: e, + alwaysVisible: !0, + componentId: m + } + } else { + try { + g = s.$el.querySelector(".mark .plane .chosed-pic").dataset.chosedUrl + } catch (A) { + return void a.message("warning", "未选择标签图标", 5e3) + } + var C = Number(s.$el.querySelector(".mark .plane .size ").value); + C && C >= 0 || (C = 1); + var y = s.$el.querySelector(".mark .plane .component ").value; + if (y && (a.imageSize = r(y)), + e[0] = Number(s.$el.querySelector(".mark .plane .startX ").value), + e[1] = Number(s.$el.querySelector(".mark .plane .startY ").value), + e[2] = Number(s.$el.querySelector(".mark .plane .startZ ").value), + isNaN(e[0]) || isNaN(e[1]) || isNaN(e[2])) + return void a.message("warning", "标签位置错误,无法新建标签", 5e3); + var v = s.$el.querySelector(".mark .plane .face").value; + v || (v = "x"), + t = { + URL: g, + scale: C, + useImageSize: !1, + width: a.imageSize, + height: a.imageSize, + position: e, + alwaysVisible: !0, + componentId: y, + transparent: !0, + face: v, + useFaceMatrix: !0 + } + } + "function" == typeof a.addListener ? a.addListener(A, t, (function(e, i) { + e && a.add(A, i || t) + } + )) : a.add(A, t) + } + )), + s.$el.querySelector(".forth-floor").addEventListener("click", (function(A) { + switch (A.target.className) { + case "deleteMark": + a.markDelete(A); + break; + case "updateMark": + a.markUpdate(A); + break; + case "info": + if ("聚焦" === A.target.innerText) { + var e = "" + , i = xh.closest(A.target, "tr") + , n = i.querySelector(".id").innerHTML + , r = xh.closest(i, "table").className; + if ("dom" === r ? e = c.marks[n].componentId : "sprite" === r ? e = h.marks[n].componentId : "plane" === r && (e = d.marks[n].componentId), + !e) + return void jd("warning", "该标签没有关联构件!", 5e3); + for (var s = document.querySelectorAll("#markWindow" + t + " .forth-floor .info"), l = 0; s.length > l; l += 1) + s[l].innerText = "聚焦"; + A.target.innerText = "失焦", + function(A) { + var e = o.viewerImpl.getBoundingBoxByIds([A]); + if (e.min.x !== -1 / 0 && e.min.x !== 1 / 0) { + var t = e.getCenter(new y) + , i = o.viewerImpl.camera.getWorldDirection() + , n = e.max.distanceTo(e.min) + , r = new y; + r.copy(i), + r.setLength(n); + var a = new y; + a.subVectors(t, r), + o.flyTo({ + position: a, + target: t, + up: o.viewerImpl.camera.up + }, (function() { + o.viewerImpl.cameraControl.dispatchEvent(Rc.ON_CAMERA_CHANGE) + } + )), + o.highlightComponentsByKey([A]), + o.closeTransparentComponentsByKey([A]), + o.transparentOtherComponentsByKey([A]) + } else + jd("warning", "该构件不存在!", 5e3) + }(e) + } else + A.target.innerText = "聚焦", + o.clearTransparentList(), + o.clearHighlightList(); + break; + default: + if (xh.hasClass(A.target, "hideOrShow")) { + var p = xh.closest(A.target, "tr") + , g = p.querySelector(".id").innerHTML + , u = xh.closest(p, "table").className + , f = null; + f = "dom" === u ? c : "sprite" === u ? h : c, + xh.hasClass(A.target, "hideMark") ? (f.hide(g), + A.target.classList.remove("hideMark"), + A.target.classList.add("showMark"), + A.target.innerHTML = "显示") : (f.show(g), + A.target.classList.remove("showMark"), + A.target.classList.add("hideMark"), + A.target.innerHTML = "隐藏") + } + } + } + )), + s.setPosition({ + left: "", + right: 5, + top: 60 + }), + s.windowHide(), + this.add = function(A, e) { + switch (A) { + case "dom": + this.addDOMMark(e); + break; + case "sprite": + this.addSpriteMark(e); + break; + case "plane": + this.addPlaneMark(e) + } + } + , + this.addDOMMark = function(A) { + c.add(A, (function(e) { + s.$el.querySelector(".mark .forth-floor .dom tbody").innerHTML += "' + e + '' + A.title + '' + } + )) + } + , + this.addSpriteMark = function(A) { + h.add(A, (function(e) { + s.$el.querySelector(".mark .forth-floor .sprite tbody").innerHTML += "' + e + '' + } + )) + } + , + this.addPlaneMark = function(A) { + d.add(A, (function(e) { + s.$el.querySelector(".mark .forth-floor .plane tbody").innerHTML += "' + e + '' + } + )) + } + , + this.markDelete = function(A) { + var e = xh.closest(A.target, "tr") + , i = e.querySelector(".id").innerHTML + , o = xh.closest(e, "table").className; + m.confirmShow(); + var n = ""; + "dom" === o ? n = "文字标签" : "sprite" === o ? n = "精灵标签" : "plane" === o && (n = "平面标签"), + document.querySelector("#confirm-mark" + t + " .lobibox-body-text").innerHTML = "是否要删除编号为[" + i + "]的" + n + "?", + document.querySelector("#confirm-mark" + t + " .lobibox-btn-yes").onclick = function() { + "function" == typeof a.deleteListener ? a.deleteListener(o, i, (function(A) { + A && a.delete(o, i) + } + )) : a.delete(o, i), + m.confirmHide() + } + , + document.querySelector("#confirm-mark" + t + " .lobibox-btn-no").onclick = function() { + m.confirmHide() + } + } + , + this.delete = function(A, e) { + var t = null; + if ("dom" === A) { + if (t = c) { + t.remove(e); + var i = s.$el.querySelector(".mark .forth-floor .dom tbody") + , o = document.querySelector("tr[markId='" + e + "']"); + i.removeChild(o) + } + } else if ("sprite" === A) { + if (t = h) { + t.remove(e); + var n = s.$el.querySelector(".mark .forth-floor .sprite tbody") + , r = document.querySelector("tr[markId='" + e + "']"); + n.removeChild(r) + } + } else if ("plane" === A && (t = d)) { + t.remove(e); + var a = s.$el.querySelector(".mark .forth-floor .plane tbody") + , l = document.querySelector("tr[markId='" + e + "']"); + a.removeChild(l) + } + } + , + this.markUpdate = function(A) { + var e = xh.closest(A.target, "tr") + , i = e.querySelector(".id").innerHTML + , o = xh.closest(e, "table").className; + f.promptShow(); + var n = document.getElementById("updateMark" + t); + if (n.style.cssText += "z-index:" + (Number(document.getElementById("markWindow" + t).style.zIndex) + 1), + "dom" === o) { + for (var l = n.querySelectorAll(".sprite , .plane"), p = 0; l.length > p; p += 1) + l[p].style.display = "none"; + n.querySelector(".dom ").style.display = "block", + n.querySelector(".dom .markId").value = i, + n.querySelector(".dom .title").value = c.marks[i].title, + n.querySelector(".dom .startX").value = c.marks[i].startPosition[0], + n.querySelector(".dom .startY").value = c.marks[i].startPosition[1], + n.querySelector(".dom .startZ").value = c.marks[i].startPosition[2], + n.querySelector(".dom .component").value = c.marks[i].componentId, + c.marks[i].domElement && (n.querySelector(".dom .text-tab").value = c.marks[i].domElement.querySelectorAll("input").length), + n.querySelector(".dom .colorRect").style.backgroundColor = Kd.getRGBAFromColorArray(c.marks[i].color), + n.querySelector(".lobibox-btn-default").onclick = function() { + var A = n.querySelector(".dom .title").value; + "" === A && (A = "标签"); + var e = Kd.getColorArrayFromRGBA(n.querySelector(".dom .colorRect").style.backgroundColor) + , t = []; + if (t[0] = n.querySelector(".dom .startX").value, + t[1] = n.querySelector(".dom .startY").value, + t[2] = n.querySelector(".dom .startZ").value, + isNaN(t[0]) || isNaN(t[1]) || isNaN(t[2])) + jd("warning", "标签位置无效,无法更新标签", 5e3); + else { + var r = parseInt(n.querySelector(".dom .text-tab ").value, 0) + , s = null; + if (10 < r) + jd("warning", "备注栏不可超过10个", 5e3); + else { + if (r > 0) { + s = document.createElement("div"); + for (var l = 0; r > l; l += 1) + s.innerHTML += '' + } + var c = { + title: A, + color: e, + startPosition: t, + domElement: s, + componentId: n.querySelector(".dom .component").value + }; + "function" == typeof a.updateListener ? a.updateListener(o, i, c, (function(A, e) { + A && a.update(o, i, e || c) + } + )) : a.update(o, i, c), + f.promptHide(), + u.style.display = "none" + } + } + } + } else if ("sprite" === o) { + for (var g = n.querySelectorAll(".dom , .plane"), m = 0; g.length > m; m += 1) + g[m].style.display = "none"; + n.querySelector(".sprite ").style.display = "block", + n.querySelector(".sprite .markId").value = i, + n.querySelector(".sprite .picture .chosed-pic").dataset.chosedUrl = h.marks[i].url, + n.querySelector(".sprite .picture .chosed-pic img").setAttribute("src", h.marks[i].url), + n.querySelector(".sprite .size").value = h.marks[i].scale, + n.querySelector(".sprite .startX").value = h.marks[i].position[0], + n.querySelector(".sprite .startY").value = h.marks[i].position[1], + n.querySelector(".sprite .startZ").value = h.marks[i].position[2], + n.querySelector(".sprite .component").value = h.marks[i].componentId, + n.querySelector(".lobibox-btn-default").onclick = function() { + try { + var A = n.querySelector(".sprite .picture .chosed-pic").dataset.chosedUrl + } catch (A) { + return void jd("warning", "未选择标签图标", 5e3) + } + var e = n.querySelector(".sprite .size").value; + e && e >= 0 || (e = 1); + var t = []; + if (t[0] = Number(n.querySelector(".sprite .startX ").value), + t[1] = Number(n.querySelector(".sprite .startY ").value), + t[2] = Number(n.querySelector(" .sprite .startZ ").value), + isNaN(t[0]) || isNaN(t[1]) || isNaN(t[2])) + jd("warning", "标签位置无效,无法更新标签", 5e3); + else { + var s = n.querySelector(".sprite .component").value; + s && (a.imageSize = r(s)); + var l = { + url: A, + scale: e, + position: t, + useImageSize: !1, + width: a.imageSize, + height: a.imageSize, + alwaysVisible: !0, + componentId: s + }; + "function" == typeof a.updateListener ? a.updateListener(o, i, l, (function(A, e) { + A && a.update(o, i, e || l) + } + )) : a.update(o, i, l), + f.promptHide() + } + } + } else if ("plane" === o) { + for (var C = n.querySelectorAll(".dom , .sprite"), y = 0; C.length > y; y += 1) + C[y].style.display = "none"; + n.querySelector(".plane ").style.display = "block", + n.querySelector(".plane .markId").value = i, + n.querySelector(".plane .picture .chosed-pic").dataset.chosedUrl = d.marks[i].URL, + n.querySelector(".plane .picture .chosed-pic img").setAttribute("src", d.marks[i].URL), + n.querySelector(".plane .size").value = d.marks[i].scale, + n.querySelector(".plane .startX").value = d.marks[i].position[0], + n.querySelector(".plane .startY").value = d.marks[i].position[1], + n.querySelector(".plane .startZ").value = d.marks[i].position[2], + n.querySelector(".plane .component").value = d.marks[i].componentId, + n.querySelector(".plane .face").value = d.marks[i].face, + n.querySelector(".lobibox-btn-default").onclick = function() { + try { + var A = n.querySelector(".plane .picture .chosed-pic").dataset.chosedUrl + } catch (A) { + return void jd("warning", "未选择标签图标", 5e3) + } + var e = n.querySelector(".plane .size").value; + e && e >= 0 || (e = 1); + var t = []; + if (t[0] = Number(n.querySelector(".plane .startX ").value), + t[1] = Number(n.querySelector(".plane .startY ").value), + t[2] = Number(n.querySelector(" .plane .startZ ").value), + isNaN(t[0]) || isNaN(t[1]) || isNaN(t[2])) + jd("warning", "标签位置无效,无法更新标签", 5e3); + else { + var l = n.querySelector(".plane .component").value; + l && (a.imageSize = r(l)); + var c = s.$el.querySelector(".updateMarkPrompt .plane .face").value; + c || (c = "x"); + var h = { + URL: A, + scale: e, + position: t, + useImageSize: !1, + width: a.imageSize, + height: a.imageSize, + alwaysVisible: !0, + face: c, + componentId: l + }; + "function" == typeof a.updateListener ? a.updateListener(o, i, h, (function(A, e) { + A && a.update(o, i, e || h) + } + )) : a.update(o, i, h), + f.promptHide() + } + } + } + n.querySelector(".lobibox-btn-cancel").onclick = function() { + f.promptHide(), + u.style.display = "none" + } + } + , + this.update = function(A, e, t) { + "dom" === A ? a.updateDOMMark(e, t) : "sprite" === A ? a.updateSpriteMark(e, t) : "plane" === A && a.updatePlaneMark(e, t) + } + , + this.hide = function(A, e) { + var t = document.querySelector("tr[markId='" + e + "']"); + if (t) { + var i = t.querySelector(".hideOrShow"); + i.classList.remove("hideMark"), + i.classList.add("showMark"), + i.innerHTML = "显示" + } + "dom" === A ? c.hide(e) : "sprite" === A && h.hide(e) + } + , + this.show = function(A, e) { + var t = document.querySelector("tr[markId='" + e + "']"); + if (t) { + var i = t.querySelector(".hideOrShow"); + i.classList.remove("showMark"), + i.classList.add("hideMark"), + i.innerHTML = "显示" + } + "dom" === A ? c.show(e) : "sprite" === A && h.show(e) + } + , + this.updateDOMMark = function(A, e) { + var t = document.querySelector("tr[markId='" + A + "']"); + t && (t.querySelector(".markTitle").innerHTML = e.title, + t.querySelector(".markTitle").setAttribute("title", e.title)), + c.updateMark(A, e) + } + , + this.updateSpriteMark = function(A, e) { + var t = document.querySelector("tr[markId='" + A + "']"); + t && t.querySelector(".markImg").setAttribute("src", e.url), + h.updateMark(A, e) + } + , + this.updatePlaneMark = function(A, e) { + var t = document.querySelector("tr[markId='" + A + "']"); + t && t.querySelector(".markImg").setAttribute("src", e.URL), + d.updateMark(A, e) + } + , + this.getDOMMark = function() { + return c + } + , + this.getSpriteMark = function() { + return h + } + , + this.getPlaneMark = function() { + return d + } + } + , Yd = function(A, e, t, i, o) { + var n = A.toolId + , r = A.Flag + , s = A.viewer; + function l(A, e) { + A.length > e && s.flyTo(A[e], (function() { + l(A, e += 1) + } + )) + } + o.querySelector("#collision" + n).addEventListener("click", (function(A) { + "walk" === s.viewerImpl.controlManager.control.name && (vc.EnableHitDetection = !vc.EnableHitDetection), + s.viewerImpl.controlManager.setFocuse() + } + )), + o.querySelector("#gravity" + n).addEventListener("click", (function() { + "walk" === s.viewerImpl.controlManager.control.name && (vc.WalkingWithGravity = !vc.WalkingWithGravity), + s.viewerImpl.controlManager.setFocuse() + } + )); + var c = {} + , h = [] + , d = qd.window({ + title: "漫游路径", + id: "pathRoam" + n, + width: 356, + height: 848, + closeOnEsc: !1, + closeButton: !0, + afterWindowHide: function() { + var A = document.getElementById("roam" + n); + r.roam = !1, + A && (A.style.backgroundColor = "", + A.querySelector(".yj-icon").className = "yj-icon roam-icon") + }, + content: '
路径列表:
' + }); + d.$el.addClass("pathRoam"); + var p = null; + t.addEventListener("click", (function() { + if (r.roam) + return p && p.destroy(), + document.getElementById("instructions" + n) && s.viewerImpl.domElement.removeChild(document.getElementById("instructions" + n)), + o.style.display = "none", + this.style.backgroundColor = "", + this.querySelector(".yj-icon").className = "yj-icon roam-icon", + r.roam = !1, + s.viewerImpl.controlManager.setControlMode(s.viewerImpl, "pick"), + void (d && d.windowHide && d.windowHide()); + r.measurement && (document.getElementById("measurement" + n).style.backgroundColor = "", + document.getElementById("measurement" + n).querySelector(".yj-icon").className = "yj-icon measurement-icon", + jd("info", "漫游模式下将关闭测量功能", 2e3), + e.exitMeasure && e.exitMeasure()), + r.sectioning && (document.getElementById("sectioning" + n).style.backgroundColor = "", + document.getElementById("sectioning" + n).querySelector(".yj-icon").className = "yj-icon sectioning-icon", + jd("info", "漫游模式下将关闭剖切功能", 2e3), + s.viewerImpl.controlManager.disableTool(Pc.CLIP_BY_BOX), + r.sectioning = !1), + r.multiple && (document.getElementById("multiple" + n).style.backgroundColor = "", + document.getElementById("multiple" + n).querySelector(".yj-icon").className = "yj-icon multiple-icon", + jd("info", "漫游模式下将关闭框选功能", 2e3), + s.viewerImpl.controlManager.disableTool(Pc.PICK_BY_RECT), + r.multiple = !1), + s.render(), + this.style.backgroundColor = "#1f89de", + this.querySelector(".yj-icon").className = "yj-icon roam-icon active", + r.roam = !r.roam, + p = qd.prompt({ + title: "漫游", + id: "roamChoose" + n, + width: 356, + height: 87, + closeOnEsc: !1, + closeButton: !1, + afterWindowHide: function() { + var A = document.getElementById("roam" + n); + r.roam = !1, + A && (A.style.backgroundColor = ""), + p.destroy(), + p = null + }, + buttons: { + ok: { + class: "lobibox-btn lobibox-btn-default", + text: "自由漫游", + closeOnClick: !0 + }, + cancel: { + class: "lobibox-btn lobibox-btn-cancel", + text: "路径漫游", + closeOnClick: !0 + } + } + }); + var A = document.getElementById("roamChoose" + n); + A.querySelector(".lobibox-body").style.display = "none", + A.querySelector(".lobibox-btn-default").addEventListener("click", (function() { + p.destroy(), + p = null; + var A = document.createElement("div"); + A.id = "instructions" + n, + A.style.cssText += "position:absolute;left:0;top:0;width:100%;height:100%;background:rgba(80,80,80,0.3);margin:0;padding:0;", + A.innerHTML = '
点击进入沉浸式浏览
移动方向
高度
视角
速度
' + A + '', + h = [], + d.$el.querySelector(".path-roaming .second-floor .viewList .name").value = "", + d.$el.querySelector(".path-roaming .second-floor .viewList table tbody").innerHTML = "" + } + } + )), + d.$el.querySelector(".path-roaming .second-floor .saveView").addEventListener("click", (function() { + var A = {}; + A.position = s.viewerImpl.camera.position.clone(), + A.target = s.viewerImpl.camera.target.clone(), + A.up = { + x: 0, + y: 0, + z: 1 + }, + h.push(A); + var e = h.length; + d.$el.querySelector(".path-roaming .second-floor .viewList table tbody").innerHTML += "视角' + e + '' + } + )); + var g = qd.confirm({ + title: "请再次确认:", + id: "confirm-path" + n, + width: 356, + height: 87, + closeOnEsc: !1, + closeButton: !1, + iconClass: !1, + msg: "是否要删除此视角?" + }); + return g.setPosition({ + left: (qd.viewport.offsetWidth - g.$options.width) / 2, + top: 5 + }), + g.confirmHide(), + d.$el.addEventListener("click", (function(A) { + if ("deleteView" === A.target.className) { + var e = (r = xh.closest(A.target, "tr")).dataset.index; + g.confirmShow(), + document.querySelector("#confirm-path" + n + " .lobibox-body-text").innerHTML = "是否要删除编号为[" + (Number(e) + 1) + "]的视角?", + document.querySelector("#confirm-path" + n + " .lobibox-btn-yes").onclick = function() { + h.splice(e, 1), + d.$el.querySelector(".path-roaming .second-floor .viewList tbody").removeChild(r); + for (var A = d.$el.querySelectorAll(".path-roaming .second-floor .viewList tbody tr"), t = 0; A.length > t; t += 1) + A[t].dataset.index = t, + A[t].querySelector(".name").innerHTML = "视角" + (t + 1); + g.confirmHide() + } + , + document.querySelector("#confirm-path" + n + " .lobibox-btn-no").onclick = function() { + g.confirmHide() + } + } else if ("updateView" === A.target.className) { + var t = xh.closest(A.target, "tr").dataset.index; + g.confirmShow(), + document.querySelector("#confirm-path" + n + " .lobibox-body-text").innerHTML = "是否要修改编号为[" + (Number(t) + 1) + "]的视角为当前视角?", + document.querySelector("#confirm-path" + n + " .lobibox-btn-yes").onclick = function() { + var A = {}; + A.position = s.viewerImpl.camera.position.clone(), + A.target = s.viewerImpl.camera.target.clone(), + A.up = { + x: 0, + y: 0, + z: 1 + }, + h[t] = A, + g.confirmHide() + } + , + document.querySelector("#confirm-path" + n + " .lobibox-btn-no").onclick = function() { + g.confirmHide() + } + } else if ("checkView" === A.target.className) { + var i = xh.closest(A.target, "tr").dataset.index; + s.flyTo(h[i]) + } else if ("roamPath" === A.target.className) { + var o = xh.closest(A.target, "tr").dataset.key; + l(c[o].camera, 0) + } else if ("deletePath" === A.target.className) { + var r, a = (r = xh.closest(A.target, "tr")).dataset.key; + g.confirmShow(), + document.querySelector("#confirm-path" + n + " .lobibox-body-text").innerHTML = "是否要删除名称为[" + c[a].name + "]的路径?", + document.querySelector("#confirm-path" + n + " .lobibox-btn-yes").onclick = function() { + d.$el.querySelector(".path-roaming .pathList tbody").removeChild(r), + delete c[a], + g.confirmHide() + } + , + document.querySelector("#confirm-path" + n + " .lobibox-btn-no").onclick = function() { + g.confirmHide() + } + } + } + )), + d + } + , Wd = function(A, e, t) { + var i = this; + this.lobibox = new bh, + A ? (this.element = document.getElementById(A), + this.lobibox.viewport = document.querySelector("#" + A)) : this.element = document, + this.change = !1; + var o = function() { + this.storage = null + }; + o.prototype = { + init: function() { + this.storage = function() { + var A = !1; + return "object" === lc(window.localStorage) ? A = localStorage : "object" === lc(window.globalStorage) && (A = window.globalStorage), + A + }() + }, + getStorage: function() { + return this.storage + }, + save: function(A, e) { + var t = this.storage + , i = !1; + return !1 !== t && (i = t.setItem(A, e)), + i + }, + load: function(A) { + var e = this.storage + , t = !1; + return !1 !== e && (t = e.getItem(A)), + t + } + }, + i.model = i.model || {}, + i.model.StorageModel = o; + !function() { + var A, e, t, o, n, r, a; + (n = function() { + this.name = "Mouse", + this.option = {}, + this.mouseShape = null, + this.init = function(A, e) { + this.setOption({ + lineWidth: 1, + strokeStyle: A.strokeStyle, + radius: Math.ceil(A.lineWidth / 2), + opacity: 100 + }), + this.setPoints(e), + this.setMouseShape(new i.model.shapeModel.CircleStroke), + this.initMouseShape(), + this.setImage() + } + , + this.paint = function(A) { + this.getMouseShape().paint(A) + } + } + ).prototype = { + getName: function() { + return this.name + }, + setOption: function(A) { + return "object" === lc(A) ? (uh.extend(!0, this.option, A), + this.getOption()) : null + }, + getOption: function() { + return uh.extend(!0, {}, this.option) + }, + getMouseShape: function() { + return this.mouseShape + }, + setMouseShape: function(A) { + return this.mouseShape = A, + A + }, + setPoints: function(A) { + this.setOption(A) + }, + initMouseShape: function() { + this.getMouseShape().init(this.getOption()) + }, + setImage: function() { + var A = this.getName(); + return [].map.call(document.querySelectorAll("#canvas-mouse"), (function(e, t) { + e.setAttribute("data-mouse", A) + } + )), + !0 + } + }, + (A = function() { + this.name = "Cross", + this.init = function(A, e) { + var t = this.getName(); + this.setOption({ + length: 10, + lineHeight: 1, + opacity: 100, + strokeStyle: A.strokeStyle, + lineJoin: A.lineJoin, + lineCap: A.lineCap, + shadowOffsetX: A.shadowOffsetX, + shadowOffsetY: A.shadowOffsetY, + shadowBlur: A.shadowBlur, + shadowColor: A.shadowColor + }), + this.setPoints(e), + this.setMouseShape(new i.model.shapeModel[t]), + this.initMouseShape(), + this.setImage() + } + , + this.paint = function(A) { + this.getMouseShape().paint(A) + } + } + ).prototype = new n, + (r = function() { + this.name = "Pen" + } + ).prototype = new n, + (e = function() { + this.name = "Eraser", + this.init = function(A, e) { + this.setOption({ + strokeStyle: "#000", + opacity: A.opacity, + radius: Math.ceil(A.lineWidth / 2, 10), + lineJoin: A.lineJoin, + lineCap: A.lineCap, + shadowOffsetX: A.shadowOffsetX, + shadowOffsetY: A.shadowOffsetY, + shadowBlur: A.shadowBlur, + shadowColor: A.shadowColor + }), + this.setPoints(e), + this.setMouseShape(new i.model.shapeModel.CircleStroke), + this.initMouseShape(), + this.setImage() + } + , + this.paint = function(A) { + this.getMouseShape().paint(A) + } + } + ).prototype = new n, + (a = function() { + this.name = "Text", + this.init = function(A, e) { + this.setImage() + } + , + this.paint = function(A) {} + } + ).prototype = new n, + (o = function() { + this.name = "FloodFill", + this.init = function(A, e) { + this.setOption({ + strokeStyle: "#000", + opacity: 90, + radius: Math.ceil(A.lineWidth / 2, 10) + }), + this.setPoints(e), + this.setMouseShape(new i.model.shapeModel.CircleStroke), + this.initMouseShape(), + this.setImage() + } + , + this.paint = function(A) { + this.getMouseShape().paint(A) + } + } + ).prototype = new n, + (t = function() { + this.name = "EyeDropper", + this.init = function(A, e) { + this.setOption({ + strokeStyle: "#000", + opacity: 90, + radius: Math.ceil(A.lineWidth / 2, 10) + }), + this.setPoints(e), + this.setMouseShape(new i.model.shapeModel.CircleStroke), + this.initMouseShape(), + this.setImage() + } + , + this.paint = function(A) { + this.getMouseShape().paint(A) + } + } + ).prototype = new n, + i.model = i.model || {}, + i.model.mouseModel = i.model.mouseModel || {}, + i.model.mouseModel.Mouse = n, + i.model.mouseModel.Cross = A, + i.model.mouseModel.Pen = r, + i.model.mouseModel.Eraser = e, + i.model.mouseModel.Text = a, + i.model.mouseModel.FloodFill = o, + i.model.mouseModel.EyeDropper = t + }(); + var n = { + list: [], + add: function(A) { + return this.list.push({ + x: Math.round(A.x), + y: Math.round(A.y) + }), + this.list + }, + getStart: function() { + return this.list[0] + }, + getEnd: function() { + return this.list[this.list.length - 1] + }, + getList: function() { + return this.list + }, + init: function() { + return this.list = [], + this.list + } + }; + i.model = i.model || {}, + i.model.PointList = n; + (function() { + var A, e, t, o, n, r, a, s, l, c, h, d, p, g, u, f, m, C, y, v; + function I(A, e, t, i, o) { + var n = i / .75 / 2 + , r = o / 2; + return A.beginPath(), + A.moveTo(e, t - r), + A.bezierCurveTo(e + n, t - r, e + n, t + r, e, t + r), + A.bezierCurveTo(e - n, t + r, e - n, t - r, e, t - r), + A.closePath(), + A + } + (m = function() { + this.name = "Shape", + this.option = {} + } + ).prototype = { + init: function(A) { + this.initOption(A) + }, + getName: function() { + return this.name + }, + initOption: function(A) { + this.option = {}, + this.setOption(A) + }, + setOption: function(A) { + return uh.extend(!0, this.option, A), + this.option + }, + getOption: function() { + return this.option + }, + repaint: function(A) { + this.paint(A) + }, + setAttributes: function(A) {} + }, + (c = function() { + this.name = "FillStroke", + this.setAttributes = function(A) { + var e = this.getOption(); + A.strokeStyle = e.strokeStyle, + A.fillStyle = e.fillStyle, + A.lineWidth = e.lineWidth, + A.globalAlpha = e.opacity / 100, + A.lineJoin = e.lineJoin, + A.lineCap = e.lineCap, + A.shadowOffsetX = e.shadowOffsetX, + A.shadowOffsetY = e.shadowOffsetY, + A.shadowBlur = e.shadowBlur, + A.shadowColor = e.shadowColor + } + } + ).prototype = new m, + (p = function() { + this.name = "Line", + this.paint = function(A) { + var e = this.getOption(); + A.save(), + this.setAttributes(A), + A.beginPath(), + A.moveTo(e.startX, e.startY), + A.lineTo(e.endX, e.endY), + A.closePath(), + A.stroke(), + A.restore() + } + } + ).prototype = new c, + (o = function() { + this.name = "CurveClosed", + this.paint = function(A) { + var e = this.getOption().list + , t = e[0] + , i = e.length + , o = 0; + for (A.save(), + this.setAttributes(A), + A.beginPath(), + A.moveTo(t.x, t.y); i > o; o += 1) + A.lineTo(e[o].x, e[o].y); + A.closePath(), + A.fill(), + A.stroke(), + A.restore() + } + } + ).prototype = new c, + (u = function() { + this.name = "Rect", + this.paint = function(A) { + var e = this.getOption(); + A.save(), + this.setAttributes(A), + A.fillRect(e.left, e.top, e.width, e.height), + A.strokeRect(e.left, e.top, e.width, e.height), + A.restore() + } + } + ).prototype = new c, + (A = function() { + this.name = "Circle", + this.paint = function(A) { + var e = this.getOption(); + A.save(), + this.setAttributes(A), + A.beginPath(), + A.arc(e.x, e.y, e.radius, 0, 2 * Math.PI, !0), + A.closePath(), + A.fill(), + A.stroke(), + A.restore() + } + } + ).prototype = new c, + (r = function() { + this.name = "Ellipes", + this.paint = function(A) { + var e = this.getOption() + , t = e.x + , i = e.y + , o = e.width + , n = e.height; + A.save(), + this.setAttributes(A), + I(A, t, i, o, n), + A.fill(), + A.stroke(), + A.restore() + } + } + ).prototype = new c, + (C = function() { + this.name = "Stroke", + this.setAttributes = function(A) { + var e = this.getOption(); + A.strokeStyle = e.strokeStyle, + A.lineWidth = e.lineWidth, + A.globalAlpha = e.opacity / 100, + A.lineJoin = e.lineJoin, + A.lineCap = e.lineCap, + A.shadowOffsetX = e.shadowOffsetX, + A.shadowOffsetY = e.shadowOffsetY, + A.shadowBlur = e.shadowBlur, + A.shadowColor = e.shadowColor + } + } + ).prototype = new m, + (g = function() { + this.name = "Pen", + this.paint = function(A) { + var e = this.getOption().list + , t = e[0] + , i = e.length + , o = 0; + for (A.save(), + this.setAttributes(A), + A.beginPath(), + A.moveTo(t.x, t.y); i > o; o += 1) + A.lineTo(e[o].x, e[o].y); + A.stroke(), + A.restore() + } + } + ).prototype = new C, + (n = function() { + this.name = "CurveClosedStroke", + this.paint = function(A) { + var e = this.getOption().list + , t = e[0] + , i = e.length + , o = 0; + for (A.save(), + this.setAttributes(A), + A.beginPath(), + A.moveTo(t.x, t.y); i > o; o += 1) + A.lineTo(e[o].x, e[o].y); + A.closePath(), + A.stroke(), + A.restore() + } + } + ).prototype = new C, + (f = function() { + this.name = "RectStroke", + this.paint = function(A) { + var e = this.getOption(); + A.save(), + this.setAttributes(A), + A.strokeRect(e.left, e.top, e.width, e.height), + A.restore() + } + } + ).prototype = new C, + (e = function() { + this.name = "CircleStroke", + this.paint = function(A) { + var e = this.getOption(); + A.save(), + this.setAttributes(A), + A.beginPath(), + A.arc(e.x, e.y, e.radius, 0, 2 * Math.PI, !0), + A.closePath(), + A.stroke(), + A.restore() + } + } + ).prototype = new C, + (a = function() { + this.name = "EllipesStroke", + this.paint = function(A) { + var e = this.getOption() + , t = e.x + , i = e.y + , o = e.width + , n = e.height; + A.save(), + this.setAttributes(A), + I(A, t, i, o, n), + A.stroke(), + A.restore() + } + } + ).prototype = new C, + (s = function() { + this.name = "Eraser", + this.paint = function(A) { + var e = this.getOption() + , t = e.list + , i = t[0] + , o = t.length + , n = 0; + for (A.save(), + A.strokeStyle = e.color, + A.lineWidth = e.lineWidth, + A.shadowOffsetX = e.shadowOffsetX, + A.shadowOffsetY = e.shadowOffsetY, + A.shadowBlur = e.shadowBlur, + A.shadowColor = e.shadowColor, + A.lineJoin = e.lineJoin, + A.lineCap = e.lineCap, + A.globalAlpha = e.opacity / 100, + A.beginPath(), + A.moveTo(i.x, i.y); o > n; n += 1) + A.lineTo(t[n].x, t[n].y); + A.stroke(), + A.restore() + } + } + ).prototype = new m, + (h = function() { + this.name = "FloodFill", + this.paint = function(A) { + var e = this.getOption() + , t = e.allowance + , i = e.fillStyle ? e.fillStyle : "rgba(0,0,0,1)" + , o = i.indexOf("(") + 1 + , n = i.slice(o, -1).split(",") + , r = { + r: parseInt(n[0], 10), + g: parseInt(n[1], 10), + b: parseInt(n[2], 10), + a: Math.ceil(255 * (n[3] || 1)) + } + , a = e.x + , s = e.y + , l = e.width + , c = e.height + , h = A.getImageData(0, 0, l, c) + , d = h.data + , p = 4 * (l * s + a) + , g = d[p] + , u = d[p + 1] + , f = d[p + 2] + , m = d[p + 3] / 255 + , C = [{ + x: a, + y: s + }]; + try { + !function(A, e) { + var o = null + , n = null + , r = null + , h = null + , p = null + , y = null + , v = {}; + for (Bh.time("floodFill"); 0 !== C.length; ) + y = C.pop(), + v[o = 4 * (l * y.y + y.x)] = !0, + r = d[o + 1], + h = d[o + 2], + p = d[o + 3] / 255, + ((n = d[o]) !== e.r || r !== e.g || h !== e.b || 255 * p !== e.a) && Math.abs(n - g) < t && Math.abs(r - u) < t && Math.abs(h - f) < t && Math.abs(p - m) < t / 256 && (d[o] = e.r, + d[o + 1] = e.g, + d[o + 2] = e.b, + d[o + 3] = e.a, + !v[o - 4] && a > 0 && C.push({ + x: y.x - 1, + y: y.y + }), + !v[o + 4] && l > a && C.push({ + x: y.x + 1, + y: y.y + }), + !v[o - 4 * l] && s > 0 && C.push({ + x: y.x, + y: y.y - 1 + }), + !v[o + 4 * l] && c > s && C.push({ + x: y.x, + y: y.y + 1 + })); + Bh.timeEnd("floodFill"), + y = null, + o = null, + n = null, + r = null, + h = null, + p = null, + i = null + }(0, r) + } catch (A) { + window.console.log(A.message) + } + d = null, + A.save(), + A.putImageData(h, 0, 0), + A.restore() + } + } + ).prototype = new m, + (l = function() { + this.name = "EyeDropper", + this.paint = function(A) { + var e = this.getOption() + , t = document.querySelector("#tool-wrap .tool .color") + , i = A.getImageData(e.x, e.y, 1, 1).data + , o = "rgba(".concat(i[0], ",", i[1], ",", i[2], ",", i[3] / 255, ")"); + t.value = o, + xh.css(document.querySelector("#tool-wrap #colorOperatorDiv"), { + "background-color": o + }) + } + , + this.repaint = function() {} + } + ).prototype = new m, + (t = function() { + this.name = "Cross", + this.paint = function(A) { + var e = this.getOption() + , t = e.x + , i = e.y + , o = e.length + , n = t - o + , r = i + , a = t + o + , s = i + , l = t + , c = i - o + , h = t + , d = i + o; + A.save(), + A.strokeStyle = e.strokeStyle, + A.lineWidth = e.lineWidth, + A.shadowOffsetX = e.shadowOffsetX, + A.shadowOffsetY = e.shadowOffsetY, + A.shadowBlur = e.shadowBlur, + A.shadowColor = e.shadowColor, + A.lineJoin = e.lineJoin, + A.lineCap = e.lineCap, + A.globalAlpha = e.opacity / 100, + A.beginPath(), + A.moveTo(n, r), + A.lineTo(a, s), + A.moveTo(l, c), + A.lineTo(h, d), + A.closePath(), + A.stroke(), + A.restore() + } + } + ).prototype = new m, + (y = function() { + this.name = "Text", + this.setAttributes = function(A) { + var e = this.getOption(); + A.shadowOffsetX = e.shadowOffsetX, + A.shadowOffsetY = e.shadowOffsetY, + A.shadowBlur = e.shadowBlur, + A.shadowColor = e.shadowColor, + A.strokeStyle = e.strokeStyle, + A.fillStyle = e.fillStyle, + A.globalAlpha = e.opacity / 100, + A.font = e.italic + " " + e.bold + " " + e.size + "px " + e.family, + A.lineWidth = e.border, + A.textAlign = e.textAlign + } + , + this.paint = function(A) { + var e = this.getOption() + , t = e.x + , i = e.y + , o = e.text; + A.save(), + this.setAttributes(A), + "string" == typeof o && (o = o.match(/[\n\r]/) ? o.split(/\r\n|\r|\n/g) : [o]); + for (var n = 0; o.length > n; n += 1) + A.fillText(o[n], t, i + e.size * n), + A.strokeText(o[n], t, i + e.size * n); + A.restore() + } + } + ).prototype = new m, + (v = function() { + this.name = "TextStroke", + this.paint = function(A) { + var e = this.getOption() + , t = e.x + , i = e.y + , o = e.text; + A.save(), + this.setAttributes(A), + A.strokeText(o, t, i), + A.restore() + } + } + ).prototype = new y, + (d = function() { + this.name = "ImageShape", + this.paint = function(A) { + var e = this.getOption() + , t = e.x + , i = e.y + , o = e.src + , n = e.width + , r = e.height + , a = new Image + , s = this; + a.src = o, + a.onload = function() { + A.save(), + s.setAttributes(A), + A.drawImage(a, t, i, n, r), + A.restore() + } + } + } + ).prototype = new m, + (i = i || {}).model = i.model || {}, + i.model.shapeModel = i.model.shapeModel || {}, + i.model.shapeModel.Line = p, + i.model.shapeModel.CurveClosed = o, + i.model.shapeModel.Rect = u, + i.model.shapeModel.Circle = A, + i.model.shapeModel.Pen = g, + i.model.shapeModel.CurveClosedStroke = n, + i.model.shapeModel.RectStroke = f, + i.model.shapeModel.CircleStroke = e, + i.model.shapeModel.Eraser = s, + i.model.shapeModel.FloodFill = h, + i.model.shapeModel.EyeDropper = l, + i.model.shapeModel.Cross = t, + i.model.shapeModel.Ellipes = r, + i.model.shapeModel.EllipesStroke = a, + i.model.shapeModel.Text = y, + i.model.shapeModel.TextStroke = v, + i.model.shapeModel.ImageShape = d + } + )(), + function() { + var A, e, t, o, n, r, a, s, l, c, h, d, p, g, u, f, m, C, y; + (y = function(A) { + this.name = "Tool", + this.className = "shape", + this.mouse = "Mouse", + this.option = { + strokeStyle: "#000", + fillStyle: "#000", + lineWidth: 1 + }, + void 0 !== A && uh.extend(!0, this.option, A) + } + ).prototype = { + getClassName: function() { + return this.className + }, + getName: function() { + return this.name + }, + setOption: function(A) { + return "object" === lc(A) ? (uh.extend(!0, this.option, A), + this.getOption()) : null + }, + getOption: function() { + return uh.extend(!0, {}, this.option) + }, + getMouse: function() { + return this.mouse + } + }, + (u = function() { + this.name = "Shape", + this.mouse = "Cross", + this.initAttributes = function() { + for (var A = document.querySelector("#tool-shape-attribute-panel"), e = A.querySelector(".width").value, t = A.querySelector(".opacity").value, i = document.querySelector("#tool-wrap .tool .color").value, o = A.querySelector(".shadow-offsetx").value, n = A.querySelector(".shadow-offsety").value, r = A.querySelector(".shadow-blur").value, a = A.querySelector(".shadow-color").value, s = A.getElementsByTagName("radio"), l = void 0, c = void 0, h = 0; s.length > h; h += 1) + "line-join" === s[h].name && (l = s[h].value), + "line-cap" === s[h].name && (c = s[h].value); + return this.setOption({ + lineWidth: e, + opacity: t, + strokeStyle: i, + fillStyle: i, + lineJoin: l, + lineCap: c, + shadowOffsetX: o, + shadowOffsetY: n, + shadowBlur: r, + shadowColor: a + }) + } + } + ).prototype = new y, + (h = function() { + this.name = "Line", + this.init = function() { + this.initAttributes() + } + , + this.setPoint = function(A) { + var e = A.getStart() + , t = A.getEnd(); + return this.setOption({ + startX: e.x, + startY: e.y, + endX: t.x, + endY: t.y + }) + } + } + ).prototype = new u, + (o = function() { + this.name = "CurveClosed", + this.init = function() { + this.initAttributes() + } + , + this.setPoint = function(A) { + var e = A.getList(); + return this.option.list = [], + this.setOption({ + list: e + }) + } + } + ).prototype = new u, + (p = function() { + this.name = "Rect", + this.init = function() { + this.initAttributes() + } + , + this.setPoint = function(A) { + var e = A.getStart() + , t = A.getEnd() + , i = e.x + , o = e.y; + return this.setOption({ + left: i, + top: o, + width: t.x - i, + height: t.y - o + }) + } + } + ).prototype = new u, + (A = function() { + this.name = "Circle", + this.init = function() { + this.initAttributes() + } + , + this.setPoint = function(A) { + var e = A.getStart() + , t = A.getEnd() + , i = (e.x + t.x) / 2 + , o = (e.y + t.y) / 2 + , n = Math.abs(Math.sqrt(Math.pow(e.x, 2) + Math.pow(e.y, 2)) - Math.sqrt(Math.pow(t.x, 2) + Math.pow(t.y, 2))) / 2; + return this.setOption({ + x: i, + y: o, + radius: n + }) + } + } + ).prototype = new u, + (r = function() { + this.name = "Ellipes", + this.init = function() { + this.initAttributes() + } + , + this.setPoint = function(A) { + var e = A.getStart() + , t = A.getEnd() + , i = (e.x + t.x) / 2 + , o = (e.y + t.y) / 2 + , n = Math.abs(e.x - t.x) + , r = Math.abs(e.y - t.y); + return this.setOption({ + x: i, + y: o, + width: n, + height: r + }) + } + } + ).prototype = new u, + (f = function() { + this.name = "Stroke", + this.mouse = "Cross", + this.initAttributes = function() { + for (var A = document.querySelector("#tool-stroke-attribute-panel"), e = A.querySelector(".width").value, t = A.querySelector(".opacity").value, i = document.querySelector("#tool-wrap .tool .color").value, o = A.querySelector(".shadow-offsetx").value, n = A.querySelector(".shadow-offsety").value, r = A.querySelector(".shadow-blur").value, a = A.querySelector(".shadow-color").value, s = A.getElementsByTagName("radio"), l = void 0, c = void 0, h = 0; s.length > h; h += 1) + "line-join" === s[h].name && (l = s[h].value), + "line-cap" === s[h].name && (c = s[h].value); + return this.setOption({ + lineWidth: e, + opacity: t, + strokeStyle: i, + lineJoin: l, + lineCap: c, + shadowOffsetX: o, + shadowOffsetY: n, + shadowBlur: r, + shadowColor: a + }) + } + } + ).prototype = new y, + (d = function() { + this.name = "Pen", + this.mouse = "Pen", + this.init = function() { + this.initAttributes() + } + , + this.setPoint = function(A) { + var e = A.getList(); + return this.option.list = [], + this.setOption({ + list: e + }) + } + } + ).prototype = new f, + (n = function() { + this.name = "CurveClosedStroke", + this.mouse = "Cross" + } + ).prototype = new d, + (g = function() { + this.name = "RectStroke", + this.init = function() { + this.initAttributes() + } + , + this.setPoint = function(A) { + var e = A.getStart() + , t = A.getEnd() + , i = e.x + , o = e.y; + return this.setOption({ + left: i, + top: o, + width: t.x - i, + height: t.y - o + }) + } + } + ).prototype = new f, + (e = function() { + this.name = "CircleStroke", + this.init = function() { + this.initAttributes() + } + , + this.setPoint = function(A) { + var e = A.getStart() + , t = A.getEnd() + , i = (e.x + t.x) / 2 + , o = (e.y + t.y) / 2 + , n = Math.abs(Math.sqrt(Math.pow(e.x, 2) + Math.pow(e.y, 2)) - Math.sqrt(Math.pow(t.x, 2) + Math.pow(t.y, 2))) / 2; + return this.setOption({ + x: i, + y: o, + radius: n + }) + } + } + ).prototype = new f, + (a = function() { + this.name = "EllipesStroke", + this.init = function() { + this.initAttributes() + } + , + this.setPoint = function(A) { + var e = A.getStart() + , t = A.getEnd() + , i = (e.x + t.x) / 2 + , o = (e.y + t.y) / 2 + , n = Math.abs(e.x - t.x) + , r = Math.abs(e.y - t.y); + return this.setOption({ + x: i, + y: o, + width: n, + height: r + }) + } + } + ).prototype = new f, + (s = function() { + this.name = "Eraser", + this.mouse = "Eraser", + this.init = function() { + for (var A = document.querySelector("#tool-eraser-attribute-panel"), e = A.querySelector(".size") ? A.querySelector(".size").value : void 0, t = A.querySelector(".opacity") ? A.querySelector(".opacity").value : void 0, i = A.querySelector(".shadow-offsetx") ? A.querySelector(".shadow-offsetx").value : void 0, o = A.querySelector(".shadow-offsety") ? A.querySelector(".shadow-offsety").value : void 0, n = A.querySelector(".shadow-blur") ? A.querySelector(".shadow-blur").value : void 0, r = A.querySelector(".shadow-color") ? A.querySelector(".shadow-color").value : void 0, a = A.getElementsByTagName("radio"), s = void 0, l = void 0, c = 0; a.length > c; c += 1) + "line-join" === a[c].name && (s = a[c].value), + "line-cap" === a[c].name && (l = a[c].value); + return this.setOption({ + opacity: t, + lineWidth: e, + color: "#fff", + shadowOffsetX: i, + shadowOffsetY: o, + shadowBlur: n, + shadowColor: r, + lineJoin: s, + lineCap: l + }) + } + , + this.setPoint = function(A) { + var e = A.getList(); + return this.option.list = [], + this.setOption({ + list: e + }) + } + } + ).prototype = new y, + (c = function() { + this.name = "FloodFill", + this.mouse = "FloodFill", + this.init = function() { + var A = document.querySelector("#tool-flood-fill-attribute-panel") + , e = document.querySelector("#tool-wrap .tool .color").value + , t = parseInt(A.querySelector(".allowance").value, 10) + , o = i.canvas.currentCanvasContainer.getCanvas() + , n = o.getWidth() + , r = o.getHeight(); + return this.setOption({ + fillStyle: e, + width: n, + height: r, + allowance: t + }) + } + , + this.setPoint = function(A) { + var e = A.getEnd(); + return this.setOption({ + x: e.x, + y: e.y + }) + } + } + ).prototype = new y, + (l = function() { + this.name = "EyeDropper", + this.mouse = "EyeDropper", + this.init = function() { + return this.setOption({}) + } + , + this.setPoint = function(A) { + var e = A.getEnd(); + return this.setOption({ + x: e.x, + y: e.y + }) + } + } + ).prototype = new y, + (t = function() { + this.name = "Cross", + this.init = function() { + return this.setOption({ + lineWidth: 1, + strokeStyle: "#000000", + length: 10 + }) + } + , + this.setPoint = function(A) { + var e = A.getEnd(); + return this.setOption({ + x: e.x, + y: e.y + }) + } + } + ).prototype = new y, + (m = function() { + this.name = "Text", + this.mouse = "Text", + this.init = function() { + this.initAttributes() + } + , + this.initAttributes = function() { + var A = document.querySelector("#tool-text-attribute-panel") + , e = A.querySelector(".opacity").value + , t = A.querySelector(".text").value + , i = A.querySelector(".size").value + , o = A.querySelector(".border").value + , n = A.querySelector(".font").value + , r = document.querySelector("#tool-wrap .tool .color").value + , a = A.querySelector(".shadow-offsetx").value + , s = A.querySelector(".shadow-offsety").value + , l = A.querySelector(".shadow-blur").value + , c = A.querySelector(".shadow-color").value + , h = "checked" === A.querySelector(".bold").getAttribute("checked") ? "bold" : "" + , d = "checked" === A.querySelector(".italic").getAttribute("checked") ? "italic" : ""; + return this.setOption({ + strokeStyle: r, + opacity: e, + fillStyle: r, + text: t, + size: i, + border: o, + family: n, + bold: h, + italic: d, + shadowOffsetX: a, + shadowOffsetY: s, + shadowBlur: l, + shadowColor: c + }) + } + , + this.setPoint = function(A) { + var e = A.getStart() + , t = A.getEnd() + , i = e.x; + return this.setOption({ + x: i, + y: e.y, + textAlign: i > t.x ? "right" : "left" + }) + } + } + ).prototype = new y, + (C = function() { + this.name = "TextStroke" + } + ).prototype = new m, + (i = i || {}).model = i.model || {}, + i.model.toolModel = i.model.toolModel || {}, + i.model.toolModel.Line = h, + i.model.toolModel.CurveClosed = o, + i.model.toolModel.Rect = p, + i.model.toolModel.Circle = A, + i.model.toolModel.Pen = d, + i.model.toolModel.CurveClosedStroke = n, + i.model.toolModel.RectStroke = g, + i.model.toolModel.CircleStroke = e, + i.model.toolModel.Eraser = s, + i.model.toolModel.FloodFill = c, + i.model.toolModel.EyeDropper = l, + i.model.toolModel.Cross = t, + i.model.toolModel.Ellipes = r, + i.model.toolModel.EllipesStroke = a, + i.model.toolModel.Text = m, + i.model.toolModel.TextStroke = C + }(); + this.init = function() { + i.initImgDiv(), + i.initCanvas(), + i.initTitleDiv(), + i.initTool(), + i.initTopTool(), + i.Index.init(), + i.Nav.init(), + i.Tool.init(), + i.Canvas.init() + } + , + this.initTool = function() { + xh.append(i.element, '
\n
\n
\n
\n \n \n \n \n \n \n
\n
\n
\n 属性\n \n \n
\n
\n 阴影\n \n \n \n \n
\n
\n
\n
\n
\n \n \n \n \n \n \n
\n
\n
\n 属性\n \n \n
\n
\n 阴影\n \n \n \n \n
\n
\n
\n
\n
\n
\n
\n
\n 属性\n \n \n
\n
\n
\n
\n
\n
\n
\n
\n 属性\n \n
\n
\n
\n
\n
\n \n \n
\n
\n \n
\n 属性\n \n \n \n \n \n \n
\n
\n 阴影\n \n \n \n \n
\n
\n
\n
\n
\n
\n
\n \n \n \n \n
\n
\n \n
\n
\n
\n
\n \n \n \n
\n
\n \n
\n
\n
') + } + , + this.initCanvas = function() { + xh.append(i.element, '
\n \n \n \n \n
') + } + , + this.initTopTool = function() { + xh.append(i.element, '
\n
\n \n \n \n \n
\n
'), + xh.addEventListener(document.querySelectorAll("#edit-exit"), "click", i.exit) + } + , + this.initTitleDiv = function() { + xh.append(i.element, '
\n
文件编号-文件名-版本
\n
') + } + , + this.initImgDiv = function() { + xh.append(i.element, ' '); + var A = document.querySelector("#myModal"); + xh.addEventListener(A.querySelector(".close"), "click", (function() { + xh.addClass(A, "hide"), + xh.remove(document.querySelector(".modal-backdrop")) + } + )), + xh.addEventListener(A.querySelector(".btn"), "click", (function() { + xh.addClass(A, "hide"), + xh.remove(document.querySelector(".modal-backdrop")) + } + )); + xh.append(i.element, ' '); + var e = document.querySelector("#image-modal"); + xh.addEventListener(e.querySelector(".close"), "click", (function() { + xh.addClass(e, "hide"), + xh.remove(document.querySelector(".modal-backdrop")) + } + )), + xh.addEventListener(e.querySelector(".but-cancel"), "click", (function() { + xh.addClass(e, "hide"), + xh.remove(document.querySelector(".modal-backdrop")) + } + )), + xh.addEventListener(e.querySelector(".btn-primary"), "click", (function() { + xh.addClass(e, "hide"), + xh.remove(document.querySelector(".modal-backdrop")) + } + )) + } + , + this.setTitle = function(A) { + [].map.call(document.querySelectorAll(".titleText"), (function(e, t) { + e.textContent = A + } + )) + } + , + this.getTitle = function() { + return document.querySelector(".titleText").textContent + } + , + this.exit = function() { + i.hide(), + e.postilExit() + } + , + this.hide = function() { + i.element.style.display = "none" + } + , + this.show = function() { + i.element.style.display = "block" + } + , + this.clear = function() { + i.canvas.mouseCanvasContainer.getCanvas().clear(), + i.canvas.bufferCanvasContainer.getCanvas().clear(), + i.canvas.currentCanvasContainer.getCanvas().clear(), + i.canvas.negativeCanvasContainer.getCanvas().clear(), + i.change = !1 + } + , + this.updateSize = function(A, e) { + i.canvas.currentCanvasContainer.getCanvas().updateSize(A, e), + i.canvas.bufferCanvasContainer.getCanvas().updateSize(A, e), + i.canvas.mouseCanvasContainer.getCanvas().updateSize(A, e), + i.canvas.negativeCanvasContainer.getCanvas().updateSize(A, e) + } + , + this.bindEvent = function() {} + , + this.getCoordsWithinElement = function(A) { + var e = [0, 0]; + if (A) { + for (var t = A.target, i = 0, o = 0; t.offsetParent; ) + i += t.offsetLeft - t.scrollLeft, + o += t.offsetTop - t.scrollTop, + t = t.offsetParent; + e[0] = Math.round(A.pageX - i), + e[1] = Math.round(A.pageY - o) + } else + A = window.event, + e[0] = Math.round(A.x), + e[0] = Math.round(A.y); + return e + } + , + this.Index = { + init: function() { + this.bindEvent() + }, + bindEvent: function() { + var A = i.element + , e = null + , t = null; + xh.bind(A, "keydown", (function(A) { + A.ctrlKey && 90 === A.keyCode && (xh.simulateEvent(document.querySelector("#nav-edit-undo"), "click"), + A.preventDefault()) + } + )), + xh.bind(A, "keydown", (function(A) { + A.ctrlKey && 83 === A.keyCode && (xh.simulateEvent(document.querySelector("#nav-file-save"), "click"), + A.preventDefault()) + } + )), + xh.bind(A, "keydown", (function(A) { + A.ctrlKey && 68 === A.keyCode && (xh.simulateEvent(document.querySelector("#nav-edit-clear"), "click"), + A.preventDefault()) + } + )), + xh.bind(A, "keydown", (function(A) { + A.ctrlKey && 69 === A.keyCode && (xh.simulateEvent(document.querySelector("#nav-file-export"), "click"), + A.preventDefault()) + } + )), + xh.bind(document, "resize", (function(A) { + var e = i.canvas + , t = e.currentCanvasContainer.getCanvas() + , o = e.bufferCanvasContainer.getCanvas() + , n = e.mouseCanvasContainer.getCanvas() + , r = i.canvas.negativeCanvasContainer.getCanvas(); + t.updateSize(), + o.updateSize(), + n.updateSize(), + r.updateSize() + } + )), + xh.delegate(i.element, "#negative-modal-file", "change", (function(A) { + var t = A.target.files + , i = new FileReader; + i.readAsDataURL(t[0]), + i.onload = function() { + var A = document.querySelector("#negative-modal").querySelector("#negative-modal-view"); + e = i.result, + A.setAttribute("src", i.result), + xh.bind(A, "load", (function() { + var A = document.querySelector("#negative-modal") + , e = A.querySelector("#negative-modal-width") + , t = A.querySelector("#negative-modal-height"); + e.value = parseInt(xh.getStyleValue(this, "width"), 0), + t.value = parseInt(xh.getStyleValue(this, "height"), 0) + } + )) + } + } + )), + xh.delegate(i.element, "#negative-modal-ok", "click", (function(A) { + var t = i.canvas.negativeCanvasContainer.getCanvas() + , o = new i.model.shapeModel.ImageShape + , n = document.querySelector("#negative-modal") + , r = n.querySelector("#negative-modal-x").value + , a = n.querySelector("#negative-modal-y").value + , s = parseInt(n.querySelector("#negative-modal-width").value, 0) + , l = parseInt(n.querySelector("#negative-modal-height").value, 0); + o.init({ + x: r, + y: a, + width: s, + height: l, + src: e + }), + t.paint(o) + } + )), + xh.delegate(i.element, "#image-modal-file", "change", (function(A) { + var e = A.target.files + , i = new FileReader; + i.readAsDataURL(e[0]), + i.onload = function() { + var A = document.querySelector("#image-modal").querySelector("#image-modal-view"); + t = i.result, + A.setAttribute("src", i.result), + xh.bind(A, "load", (function() { + var A = document.querySelector("#image-modal") + , e = A.querySelector("#image-modal-width") + , t = A.querySelector("#image-modal-height"); + e.value = parseInt(xh.getStyleValue(this, "width"), 0), + t.value = parseInt(xh.getStyleValue(this, "height"), 0) + } + )) + } + } + )), + xh.delegate(i.element, "#image-modal-ok", "click", (function(A) { + var e = i.canvas.currentCanvasContainer.getCanvas() + , o = new i.model.shapeModel.ImageShape + , n = document.querySelector("#image-modal") + , r = n.querySelector("#image-modal-x").value + , a = n.querySelector("#image-modal-y").value + , s = parseInt(n.querySelector("#image-modal-width").value, 0) + , l = parseInt(n.querySelector("#image-modal-height").value, 0); + o.init({ + x: r, + y: a, + width: s, + height: l, + src: t + }), + e.paint(o) + } + )) + } + }, + this.Canvas = { + clickStatus: !1, + pointList: Object.create(n), + getPointList: function() { + return this.pointList + }, + getClickStatus: function() { + return this.clickStatus + }, + setClickStatus: function(A) { + return this.clickStatus = A = A || !1, + A + }, + init: function() { + var A = document.querySelectorAll(".canvas-negative")[0] + , e = new s + , t = Object.create(a) + , o = document.querySelectorAll(".canvas-layer")[0] + , n = new s + , r = Object.create(a) + , l = document.querySelectorAll(".canvas-buffer")[0] + , c = new s + , h = Object.create(a) + , d = document.querySelectorAll(".canvas-mouse")[0] + , p = new s + , g = Object.create(a); + e.init(A, "negativeCanvas"), + t.init(e), + i.canvas = i.canvas || {}, + i.canvas.negativeCanvasContainer = t, + n.init(o, "currentCanvas"), + r.init(n), + i.canvas = i.canvas || {}, + i.canvas.currentCanvasContainer = r, + c.init(l, "bufferCanvas"), + h.init(c), + i.canvas = i.canvas || {}, + i.canvas.bufferCanvasContainer = h, + p.init(d, "mouseCanvas"), + g.init(p), + i.canvas = i.canvas || {}, + i.canvas.mouseCanvasContainer = g, + this.bindEvent() + }, + bindEvent: function() { + var A = i.element + , e = i.canvas.mouseCanvasContainer.getCanvas() + , t = i.canvas.bufferCanvasContainer.getCanvas() + , o = i.canvas.currentCanvasContainer.getCanvas() + , n = e.getLeft() + , r = e.getTop() + , a = this + , s = i.tool.currentToolContainer.getTool(); + xh.delegate(A, "#canvas-mouse", "mousemove", (function(A) { + var o = i.getCoordsWithinElement(A) + , n = null + , r = null + , l = "" + , c = null + , h = null + , d = a.getClickStatus() + , p = "" + , g = null + , u = null; + "shape" === s.getClassName() && (n = { + x: o[0], + y: o[1] + }, + p = s.getMouse(), + g = s.getOption(), + (u = new i.model.mouseModel[p]).init(g, n), + e.clear(), + e.paint(u), + d && (l = s.getName(), + (r = a.getPointList()).add(n), + h = s.setPoint(r), + "FloodFill" !== (c = new i.model.shapeModel[l]).getName() && (c.init(h), + t.clear(), + t.paint(c)))) + } + )), + xh.delegate(A, "#canvas-mouse", "mousedown", (function(A) { + var e = i.getCoordsWithinElement(A) + , t = { + x: e[0], + y: e[1] + }; + a.getPointList(); + a.getPointList().init(), + a.getPointList().add(t), + a.setClickStatus(!0) + } + )), + xh.delegate(A, "#canvas-mouse", "mouseup", (function(A) { + var e = i.getCoordsWithinElement(A) + , n = { + x: e[0], + y: e[1] + } + , r = a.getPointList() + , l = s.getName() + , c = null + , h = null; + "shape" === s.getClassName() && (a.getPointList().add(n), + a.setClickStatus(!1), + c = new i.model.shapeModel[l], + h = s.setPoint(r), + c.init(h), + o.paint(c), + t.clear()) + } + )), + xh.delegate(A, "#canvas-mouse", "mouseleave", (function(A) { + e.clear() + } + )), + xh.delegate(A, "#canvas-mouse", "mouseenter", (function(A) { + e.clear(), + s = i.tool.currentToolContainer.getTool() + } + )), + document.getElementById("canvas-mouse").addEventListener("touchmove", (function(A) { + var o = null + , l = null + , c = "" + , h = null + , d = null + , p = a.getClickStatus() + , g = "" + , u = null + , f = null + , m = s.getClassName() + , C = A.changedTouches[0]; + A.preventDefault(), + "shape" === m && (o = { + x: C.pageX - n, + y: C.pageY - r + }, + g = s.getMouse(), + u = s.getOption(), + (f = new i.model.mouseModel[g]).init(u, o), + e.clear(), + e.paint(f), + p && (c = s.getName(), + (l = a.getPointList()).add(o), + d = s.setPoint(l), + (h = new i.model.shapeModel[c]).init(d), + t.clear(), + t.paint(h))) + } + ), !1), + document.getElementById("canvas-mouse").addEventListener("touchstart", (function(A) { + var e = A.touches[0] + , t = { + x: e.pageX - n, + y: e.pageY - r + }; + a.getPointList(); + A.preventDefault(), + a.getPointList().init(), + a.getPointList().add(t), + a.setClickStatus(!0) + } + ), !1), + document.getElementById("canvas-mouse").addEventListener("touchend", (function(A) { + var e = A.changedTouches[0] + , l = { + x: e.pageX - n, + y: e.pageY - r + } + , c = a.getPointList() + , h = s.getName() + , d = null + , p = null + , g = s.getClassName(); + A.preventDefault(), + "shape" === g && (a.getPointList().add(l), + a.setClickStatus(!1), + d = new i.model.shapeModel[h], + p = s.setPoint(c), + d.init(p), + o.paint(d), + t.clear()) + } + ), !1) + } + }, + this.Nav = { + init: function() { + this.bindEvent() + }, + bindEvent: function() { + var A = i.element; + xh.delegate(A, "#nav-file-export", "click", (function(e) { + var t = i.canvas.currentCanvasContainer.getCanvas() + , o = i.canvas.negativeCanvasContainer.getCanvas() + , n = document.createElement("canvas"); + n.width = t.width, + n.height = t.height; + var r = n.getContext("2d"); + r.drawImage(o.getCanvas(), 0, 0), + r.drawImage(t.getCanvas(), 0, 0), + document.querySelectorAll("#save-image")[0].src = n.toDataURL(), + xh.append(A, ""), + [].map.call(document.querySelectorAll("#myModal"), (function(A, e) { + xh.removeClass(A, "hide") + } + )) + } + )), + xh.delegate(A, "#nav-file-saveAs", "click", (function(e) { + var t = i.canvas.currentCanvasContainer.getCanvas() + , o = i.canvas.negativeCanvasContainer.getCanvas() + , n = document.createElement("canvas"); + n.width = t.width, + n.height = t.height; + var r = n.getContext("2d"); + r.drawImage(o.getCanvas(), 0, 0), + r.drawImage(t.getCanvas(), 0, 0), + document.querySelectorAll("#save-image")[0].src = n.toDataURL(), + xh.append(A, ""), + [].map.call(document.querySelectorAll("#myModal"), (function(A, e) { + xh.removeClass(A, "hide") + } + )) + } + )), + xh.delegate(A, "#nav-file-save", "click", (function(A) { + var t = i.canvas.currentCanvasContainer.getCanvas() + , o = i.canvas.negativeCanvasContainer.getCanvas(); + t.save(), + o.save(); + var n = i.lobibox.alert("success", { + msg: "保存成功", + title: "保存", + backdrop: !0, + buttons: { + yes: { + closeOnClick: !1, + text: "关闭" + } + }, + callback: function(A, t) { + A.destroy(), + e.postilSave() + } + }) + , r = (new Date).getTime() - i.lobibox.alert.startTime; + n.$el.style.zIndex = r + 2 + } + )), + xh.delegate(A, "#nav-file-open", "click", (function(e) { + xh.append(A, ""), + [].map.call(document.querySelectorAll("#image-modal"), (function(A, e) { + xh.removeClass(A, "hide") + } + )) + } + )), + xh.delegate(A, "#nav-file-import-img", "click", (function(e) { + xh.append(A, ""), + [].map.call(document.querySelectorAll("#image-modal"), (function(A, e) { + xh.removeClass(A, "hide") + } + )) + } + )), + xh.delegate(A, "#nav-edit-undo", "click", (function(A) { + i.canvas.currentCanvasContainer.getCanvas().undo(), + e.undo() + } + )), + xh.delegate(A, "#nav-edit-clear", "click", (function(A) { + i.canvas.currentCanvasContainer.getCanvas().clear() + } + )), + xh.delegate(A, "#nav-edit-clear-negative", "click", (function(A) { + i.canvas.negativeCanvasContainer.getCanvas().clear() + } + )), + xh.delegate(A, "#nav-edit-convert", "click", (function(A) { + i.canvas.currentCanvasContainer.getCanvas().convert() + } + )), + xh.delegate(A, "#nav-edit-flipx", "click", (function(A) { + i.canvas.currentCanvasContainer.getCanvas().flipX() + } + )), + xh.delegate(A, "#nav-edit-flipy", "click", (function(A) { + i.canvas.currentCanvasContainer.getCanvas().flipY() + } + )) + } + }; + var r; + (r = function() { + this.currentOpenAttributePanel = null, + this.colorPicker = void 0, + this.attributePanelWindow = void 0 + } + ).prototype = { + init: function() { + this.bindEvent(), + this.initAttributePanel(), + this.initColor(), + i.tool = i.tool || {}, + i.tool.currentToolContainer = Object.create(i.model.ToolContainerModel), + i.tool.currentToolContainer.init(new i.model.toolModel.Line) + }, + initAttributePanel: function() { + document.querySelector("#tool-wrap"); + var A = document.querySelector("#tool-shape-attribute-panel") + , e = document.createElement("div"); + e.className = "tool-attribute-panel-content", + this.attributePanelWindow = i.lobibox.window({ + title: "属性面板", + width: 334, + height: 415, + closeOnEsc: !1, + closeButton: !0, + afterWindowHide: function(A) {}, + content: e + }), + this.attributePanelWindow.setPosition({ + left: "", + right: 35, + bottom: 120 + }), + this.attributePanelWindow.windowHide(); + var t = document.querySelectorAll(".tool-attribute-panel"); + [].map.call(t, (function(A, t) { + A.style.display = "none", + e.appendChild(A) + } + )), + this.setCurrentAttributePanel(A), + this.openAttributePanel(A) + }, + initColor: function() { + var A = document.querySelector("#tool-wrap .tool .color"); + this.colorPicker = new Hh(A), + A.style.display = "none"; + var e = A.parentNode; + xh.append(e, '
'); + var t = e.querySelector("#colorOperatorDiv") + , i = this.colorPicker.element; + i.id = "toolColorModal", + i.className = "colorModal", + i.style.cssText += "margin-left:" + t.offsetLeft + "px;bottom:50px", + t.addEventListener("click", (function(A) { + i.focus(), + i.style.display = "block" === i.style.display ? "none" : "block", + A.stopPropagation ? A.stopPropagation() : A.cancelBubble = !0 + } + )), + document.addEventListener("click", (function(A) {} + )), + xh.addEventListener(A, "change", (function(e) { + xh.css(t, { + "background-color": A.value + }) + } + )), + A.parentNode.parentNode.appendChild(i) + }, + openAttributePanel: function(A) { + document.querySelector("#tool-wrap"), + document.querySelector(".tool-attribute-panel-content"); + var e = document.querySelectorAll(".tool-attribute-panel") + , t = A || this.getCurrentAttributePanel(); + t && ([].map.call(e, (function(A, e) { + A.style.display = A.id == t.id ? "block" : "none" + } + )), + this.attributePanelWindow.windowShow()) + }, + getCurrentAttributePanel: function() { + return this.currentOpenAttributePanel + }, + setCurrentAttributePanel: function(A) { + return void 0 !== A && (this.currentOpenAttributePanel = A, + !0) + }, + bindEvent: function() { + var A = document.querySelector("#tool-wrap") + , e = this; + xh.delegate(A.querySelector(".tool"), "button", "click", (function(A) { + if ("nav-file-import-img" === this.id) + e.attributePanelWindow.$el.style.zIndex = 888; + else { + var t = document.querySelector("#tool-wrap") + , o = this.getAttribute("data-tool-panel") + , n = t.querySelector(".tool-panel ." + o) + , r = t.querySelectorAll(".tool-panel .wrap") + , a = document.querySelector("#tool-" + o + "-attribute-panel") + , s = this.getAttribute("data-current-tool"); + [].map.call(t.querySelectorAll(".tool button.active"), (function(A, e) { + xh.removeClass(A, "active") + } + )), + xh.addClass(this, "active"); + for (var l = 0; r.length > l; l += 1) + r[l].style.display = "none"; + if (n && (n.style.display = "block"), + a) { + var c = a.getAttribute("title") ? a.getAttribute("title") : "属性面板"; + i.Tool.attributePanelWindow.setTitle(c) + } + if (e.setCurrentAttributePanel(a), + e.openAttributePanel(a), + !s) + return; + -1 === s.indexOf("Arrow") ? i.tool.currentToolContainer.init(new i.model.toolModel[s]) : console.log("currentTool: 箭头没有原型类实现") + } + } + )), + xh.delegate(A.querySelectorAll(".tool-panel .wrap"), "button", "click", (function(A) { + var e = this.getAttribute("data-tool") + , t = this.getAttribute("data-tool-class") + , i = document.querySelector("#tool-wrap .tool button[data-tool-panel='" + e + "']"); + i.setAttribute("data-current-tool", t), + xh.simulateEvent(i, "click") + } + )), + xh.delegate(A, ".color", "change", (function(A) { + var e = this.value; + i.tool.currentToolContainer.getTool().setOption({ + fillStyle: e, + strokeStyle: e + }) + } + )), + xh.delegate(document.querySelectorAll(".tool-attribute-panel"), "select", "change", (function(A) { + var e = A.target + , t = e.getAttribute("data-attr") + , o = e.value + , n = i.tool.currentToolContainer.getTool() + , r = {}; + r[t] = o, + n.setOption(r) + } + )), + [].map.call(i.element.querySelectorAll("input"), (function(A, e) { + var t = A.getAttribute("type"); + "checkbox" !== t && "radio" !== t && xh.addEventListener(A, "change", (function(A) { + var e = A.target + , t = e.getAttribute("data-attr") + , o = e.value + , n = i.tool.currentToolContainer.getTool() + , r = {} + , a = e.parentNode.querySelector("span"); + a && (a.textContent = o), + r[t] = o, + n.setOption(r) + } + )) + } + )), + [].map.call(i.element.querySelectorAll(".tool-attribute-panel input"), (function(A, e) { + "checkbox" === A.getAttribute("type") && xh.addEventListener(A, "change", (function(A) { + var e = A.target + , t = e.getAttribute("data-attr") + , o = e.value + , n = e.getAttribute("checked") + , r = i.tool.currentToolContainer.getTool() + , a = {}; + a[t] = !0 === n ? o : "", + r.setOption(a), + window.console.log(n) + } + )) + } + )), + [].map.call(i.element.querySelectorAll(".tool-attribute-panel input"), (function(A, e) { + "radio" === A.getAttribute("type") && xh.addEventListener(A, "change", (function(A) { + var e = A.target + , t = e.attr("data-attr") + , o = e.val() + , n = i.tool.currentToolContainer.getTool() + , r = {}; + r[t] = o, + n.setOption(r) + } + )) + } + )) + } + }, + this.Tool = new r; + var a = { + canvas: null, + init: function(A) { + this.setCanvas(A) + }, + setCanvas: function(A) { + return this.canvas = A, + !0 + }, + getCanvas: function() { + return this.canvas + } + }; + i.model = i.model || {}, + i.model.CanvasContainerModel = a; + var s = function() { + this.canvas = null, + this.documentName = "", + this.pictureName = "", + this.name = "Canvas", + this.shapeList = [], + this.convertStatus = "source-over", + this.flipXStatus = !1, + this.flipYStatus = !1, + this.width = 1e3, + this.height = 400, + this.context2D = null, + this.top = 0, + this.left = 0 + }; + s.prototype = { + init: function(A, e) { + this.initCanvas(A), + this.initHeight(), + this.initWidth(), + this.initLeft(), + this.initTop(), + this.initContext2D(), + this.initName(e), + this.load() + }, + initName: function(A) { + this.setName(A) + }, + setName: function(A) { + this.name = A + }, + setDocumentName: function(A) { + this.documentName = A + }, + setPictureName: function(A) { + this.pictureName = A + }, + getDocumentName: function() { + return this.documentName + }, + getPictureName: function() { + return this.pictureName + }, + getName: function() { + return this.name + }, + initCanvas: function(A) { + this.setCanvas(A) + }, + setCanvas: function(A) { + return null != A && (this.canvas = A, + !0) + }, + getCanvas: function() { + return this.canvas + }, + initContext2D: function() { + this.setContext2D() + }, + getContext2D: function() { + return this.context2D + }, + setContext2D: function(A) { + A = A || this.getCanvas().getContext("2d"), + this.context2D = A + }, + clearContext: function() { + var A = this.getHeight() + , e = this.getWidth() + , t = this.getContext2D(); + return t.clearRect(0, 0, e, A), + t + }, + initLeft: function() { + this.updateLeft() + }, + updateLeft: function() { + var A; + return A = function(A) { + for (var e = A.offsetLeft, t = A.offsetParent; null !== t; ) + e += t.offsetLeft, + t = t.offsetParent; + return e + }(this.getCanvas()), + this.left = A, + A + }, + getLeft: function() { + return this.left + }, + initTop: function() { + this.updateTop() + }, + updateTop: function() { + var A; + return A = function(A) { + for (var e = A.offsetTop, t = A.offsetParent; null !== t; ) + e += t.offsetTop, + t = t.offsetParent; + return e + }(this.getCanvas()), + this.top = A, + A + }, + getTop: function() { + return this.top + }, + updateSize: function(A, e) { + this.updateHeight(e), + this.updateWidth(A), + this.repaint() + }, + initHeight: function() { + this.updateHeight() + }, + updateHeight: function(A) { + var e = this.getCanvas() + , t = parseInt(xh.getStyleValue(e.parentNode, "height")); + return A && (t = A), + e.setAttribute("height", t), + this.setHeight(t) + }, + setHeight: function(A) { + return this.height = A = A || 600, + A + }, + getHeight: function() { + return this.height + }, + initWidth: function() { + this.updateWidth() + }, + updateWidth: function(A) { + var e = this.getCanvas() + , t = parseInt(xh.getStyleValue(e.parentNode, "width")); + return A && (t = A), + e.setAttribute("width", t), + this.setWidth(t) + }, + setWidth: function(A) { + return this.width = A = A || 600, + this.width + }, + getWidth: function() { + return this.width + }, + initShapeList: function() { + this.clearShapeList() + }, + getShapeList: function() { + return uh.extend(!0, [], this.shapeList) + }, + setShapeList: function(A) { + return this.clearShapeList(), + uh.extend(!0, this.shapeList, A), + A + }, + addShape: function(A) { + this.shapeList.push(A) + }, + deleteShape: function() { + this.shapeList.pop() + }, + clearShapeList: function() { + this.shapeList = [] + }, + paint: function(A) { + this.addShape(A), + A.paint(this.getContext2D()), + "negativeCanvas" != this.name && "currentCanvas" != this.name || (i.change = !0) + }, + repaint: function() { + var A, e = this.shapeList, t = e.length, o = 0; + for (A = this.clearContext(); t > o; o += 1) + e[o].paint(A); + t > 0 && ("negativeCanvas" != this.name && "currentCanvas" != this.name || (i.change = !0)) + }, + undo: function() { + this.deleteShape(), + this.repaint() + }, + clear: function() { + this.clearContext(), + this.clearShapeList() + }, + convert: function() { + var A = this.getContext2D() + , e = A.globalCompositeOperation + , t = "source-over" === this.convertStatus ? "destination-over" : "source-over"; + this.convertStatus = t, + A.globalCompositeOperation = t, + this.repaint(), + A.globalCompositeOperation = e + }, + save: function(A) { + var e = new i.model.StorageModel + , t = [] + , o = this.shapeList + , n = o.length + , r = 0 + , a = this.getName() + , s = ""; + if (a = a + "-" + this.getDocumentName() + "-" + this.getPictureName(), + null != A && (a = A), + e.init(), + !1 !== e.getStorage()) { + for (; n > r; r += 1) + t[r] = { + name: o[r].getName(), + option: o[r].getOption() + }; + s = window.JSON.stringify(t), + e.save(a, s) + } + }, + load: function(A) { + var e, t, o = new i.model.StorageModel, n = [], r = 0, a = this.getName(), s = this.getDocumentName(), l = this.getPictureName(), c = this.shapeList; + if (a = a + "-" + s + "-" + l, + null != A && (a = A), + o.init(), + !1 !== o.getStorage()) { + for (t = o.load(a) || "[]", + e = (n = window.JSON.parse(t)).length; e > r; r += 1) + c[r] = new i.model.shapeModel[n[r].name], + c[r].init(n[r].option); + this.repaint() + } + }, + autoSave: function(A) { + var e = this; + window.setInterval((function() { + e.save() + } + ), A) + }, + flipX: function() { + var A = this.getContext2D() + , e = this.getWidth(); + A.save(), + this.flipXStatus ? this.flipXStatus = !1 : (this.flipXStatus = !0, + A.translate(e, 0), + A.scale(-1, 1)), + this.repaint(), + A.restore() + }, + flipY: function() { + var A = this.getContext2D() + , e = this.getHeight(); + A.save(), + this.flipYStatus ? this.flipYStatus = !1 : (this.flipYStatus = !0, + A.translate(0, e), + A.scale(1, -1)), + this.repaint(), + A.restore() + } + }, + i.model = i.model || {}, + i.model.CanvasModel = s; + (i = i || {}).model = i.model || {}, + i.model.ToolContainerModel = { + tool: null, + init: function(A) { + A.init(), + this.setTool(A) + }, + setTool: function(A) { + return this.tool = A, + !0 + }, + getTool: function() { + return this.tool + } + } + } + , Jd = function(A, e) { + var t = A.toolId + , i = A.Flag + , o = A.viewer + , n = e.toolbarTop + , r = this; + r.viewer = o, + r.postilInfo = {}, + this.editingPostilObj = void 0, + this.editingNodeDom = void 0, + this.postilDelConf = !0, + this.eventDispatcher = new Ld; + var a = 0; + this.deleteListener = null, + this.addListener = null, + this.renameListener = null, + this.updateListener = null, + this.exitListener = null, + this.saveListener = null, + this.openListener = null, + this.restoreToPostilListener = null; + var s = document.createElement("div"); + s.className = "postil-content", + xh.append(s, '
'), + r.postilWindow = qd.window({ + title: "批注", + width: 334, + height: 688, + closeOnEsc: !1, + closeButton: !0, + afterWindowHide: function() { + var A = document.getElementById("postil" + t); + i.postil = !1, + A && (A.style.backgroundColor = "", + A.querySelector(".yj-icon").className = "yj-icon postil-icon") + }, + content: s + }), + r.postilWindow.setPosition({ + left: "", + right: 5, + top: 60 + }), + r.postilWindow.windowHide(), + xh.addEventListener(n.querySelector("#postil" + t), "click", (function(A) { + if (i.postil) + A.target.parentNode.style.backgroundColor = "", + A.target.className = "yj-icon postil-icon active", + r.postilWindow.windowHide(); + else { + r.load([]), + i.postil = !i.postil, + r.postilWindow.windowShow(); + var e = o.viewerImpl.modelManager.sceneState; + A.target.parentNode.style.backgroundColor = "#1f89de", + A.target.className = "yj-icon postil-icon active", + e.getSelection() + } + } + )), + xh.append(document.querySelector("body"), '
'), + document.querySelector("#postilEdit" + t).style.display = "none", + this.edit = new Wd("postilEdit" + t,this,o,t), + r.edit.init(), + xh.addEventListener(r.postilWindow.$el.querySelector(".postil-body"), "click", (function(A) { + switch (A.target.className) { + case "postil-node-delete": + r.postilDelete(A); + break; + case "postil-node-img": + r.postilflyto(A); + break; + case "postil-node-button-update": + r.postilUpdate(A); + break; + case "postil-node-button-edit": + r.postilEdit(A) + } + } + )), + xh.addEventListener(r.postilWindow.$el.querySelector(".postil-body"), "dblclick", (function(A) { + switch (A.target.className) { + case "postil-node-name": + r.postilRename(A) + } + } + )), + this.makePostils = function() { + var A, e, t, i, n, r = o.viewerImpl.modelManager.getModelSnapshotPhoto(); + A = r.imgURL; + var s = r.width + , l = r.height + , c = o.viewerImpl.getSceneState(); + e = c.camera, + t = c.state, + i = c.selection.concat(), + n = c.modelSelection.concat(); + var h = a; + return a += 1, + { + cameraState: e, + componentState: t, + highlightComponentsKeys: i, + highlightModelsKeys: n, + imageURL: A, + width: s, + height: l, + num: h, + code: (new Date).getTime().toString(), + name: "批注" + h + } + } + , + this.clear = function() { + [].map.call(r.postilWindow.$el.querySelectorAll(".postil .postil-body"), (function(A, e) { + A.innerHTML = "" + } + )), + r.postilInfo = {}, + r.postilDelConf = !0 + } + , + this.load = function(A) { + Array.isArray(A) && A.forEach((function(A) { + r.add(A) + } + )) + } + , + xh.addEventListener(r.postilWindow.$el.querySelector("#postilAdd" + t), "click", (function(A) { + var e = r.makePostils(); + "function" == typeof r.addListener ? r.addListener(e, (function(A, t) { + A && r.add(t || e) + } + )) : r.add(e) + } + )), + this.add = function(A) { + var e = A.imageURL + , t = A.width + , i = A.height + , o = A.code + , n = A.name + , a = A.num; + if (A.cameraState && A.componentState && e && o && t && i) { + for (var s = r.postilWindow.$el.querySelectorAll(".postil-node"), l = 0; s.length > l; l += 1) + xh.css(s[l], { + border: "2px" + }); + var c = '
' + n + '×
'; + [].map.call(r.postilWindow.$el.querySelectorAll(".postil-body"), (function(A, e) { + xh.append(A, c) + } + )), + r.postilInfo[o] = A + } + } + , + this.postilEdit = function(A) { + var e = document.querySelector("#postilEdit" + t); + e.style.display = "block", + e.style.height = r.viewer.viewerImpl.getDomElement().style.height, + e.style.width = r.viewer.viewerImpl.getDomElement().style.width; + var i = A.target.parentNode.parentNode.parentNode.getAttribute("imgid"); + "function" == typeof r.openListener ? r.openListener(i, (function(A) { + A && r.open(i) + } + )) : r.open(i) + } + , + this.open = function(A) { + document.querySelector("#postilEdit" + t).style.display = "block"; + var e = r.postilWindow.$el.querySelector("div[imgid='" + A + "']"); + if (e) { + this.editingNodeDom = e; + var i = e.querySelector(".postil-node-name").textContent; + r.editingPostilObj = r.postilInfo[A], + r.edit.setTitle(i), + xh.showOrHideElement(o.viewport, !1), + r.edit.canvas.currentCanvasContainer.getCanvas().setDocumentName(A), + r.edit.canvas.currentCanvasContainer.getCanvas().setPictureName(A), + r.edit.canvas.negativeCanvasContainer.getCanvas().setDocumentName(A), + r.edit.canvas.negativeCanvasContainer.getCanvas().setPictureName(A); + var n = r.edit.canvas.negativeCanvasContainer.getCanvas() + , a = new r.edit.model.shapeModel.ImageShape + , s = e.children[1].children[0].naturalWidth + , l = e.children[1].children[0].naturalHeight; + a.init({ + x: 0, + y: 0, + width: s, + height: l, + src: e.children[1].children[0].src + }), + r.edit.clear(), + n.paint(a), + r.edit.updateSize(s, l) + } + } + , + this.postilUpdate = function(A) { + var e = A.target.parentNode.parentNode.parentNode.getAttribute("imgid") + , t = r.makePostils(); + "function" == typeof r.updateListener ? r.updateListener(e, t, (function(A, i, o) { + A && r.update(i || e, o || t) + } + )) : r.update(e, t) + } + , + this.update = function(A, e) { + var t = r.postilInfo[A]; + t && (t.cameraState = e.cameraState, + t.componentState = e.componentState, + t.highlightComponentsKeys = e.highlightComponentsKeys, + t.highlightModelsKeys = e.highlightModelsKeys, + t.imageURL = e.imageURL); + var i = r.postilWindow.$el.querySelector("div[imgid='" + A + "']"); + if (i) { + var o = i.querySelector(".postil-node-img"); + o && (o.src = e.imageURL) + } + } + , + this.postilDelete = function(A) { + var e = A.target.parentNode.parentNode.getAttribute("imgid"); + if (r.postilDelConf) { + var t = qd.alert("info", { + msg: "删除不可恢复,确认删除?", + title: "删除确认", + backdrop: !0, + buttons: { + yes: { + closeOnClick: !1, + text: "删除并不再提示" + }, + no: { + closeOnClick: !1, + text: "删除" + } + }, + callback: function(A, t) { + "no" !== t && "yes" !== t || ("yes" === t && (r.postilDelConf = !1), + "function" == typeof r.deleteListener ? r.deleteListener(e, (function(A) { + A && r.delete(e) + } + )) : r.delete(e)), + A.destroy() + } + }) + , i = (new Date).getTime() - qd.window.startTime; + [].map.call(r.postilWindow.$el.querySelectorAll(".lobibox-backdrop"), (function(A, e) { + xh.css(A, { + "z-index": i + }) + } + )), + t.$el.style.zIndex = i + 2 + } else + "function" == typeof r.deleteListener ? r.deleteListener(e, (function(A) { + A && r.delete(e) + } + )) : r.delete(e) + } + , + this.delete = function(A) { + var e = r.postilWindow.$el.querySelector("div[imgid='" + A + "']"); + e && e.remove(), + delete r.postilInfo[A] + } + , + this.postilRename = function(A) { + o.viewerImpl.cameraControl.enabled = !1; + var e = A.target + , t = e.parentNode.parentNode.getAttribute("imgid") + , i = e.innerText + , n = document.createElement("input"); + n.type = "text", + n.value = i, + e.innerText = "", + xh.append(e, n), + n.focus(), + n.select(), + n.addEventListener("blur", (function(A) { + var e = A.target; + e.removeEventListener("blur", (function() {} + )), + e.value !== i && "" !== xh.trim(e.value) ? "function" == typeof r.renameListener ? r.renameListener(t, e.value, (function(A, o) { + A ? r.rename(t, o || e.value) : e.parentNode.innerText = i + } + )) : r.rename(t, e.value) : e.parentNode.innerText = i, + n.remove(), + o.viewerImpl.cameraControl.enabled = !0 + } + )) + } + , + this.rename = function(A, e) { + var t = r.postilWindow.$el.querySelector("div[imgid='" + A + "']"); + if (t) { + var i = t.querySelector(".postil-node-name"); + i && (i.innerText = e) + } + r.postilInfo[A].name = e + } + , + this.postilflyto = function(A) { + for (var e = r.postilWindow.$el.querySelectorAll(".postil-node"), t = 0; e.length > t; t += 1) + xh.css(e[t], { + border: "2px" + }); + var i = A.target.parentNode.parentNode.getAttribute("code"); + "function" == typeof r.restoreToPostilListener ? r.restoreToPostilListener(i, (function(A) { + r.restoreToPostil(i) + } + )) : r.restoreToPostil(i) + } + , + this.restoreToPostil = function(A) { + var e = r.postilInfo[A]; + if (e) { + o.viewerImpl.setSceneState({ + camera: e.cameraState, + state: e.componentState, + selection: e.highlightComponentsKeys, + modelSelection: e.highlightModelsKeys + }); + var t = r.postilWindow.$el.querySelector("div[imgid='" + A + "']"); + t && xh.css(t, { + border: "2px solid #002553" + }) + } + } + , + this.postilSave = function() { + "function" == typeof r.saveListener ? r.saveListener(this.editingPostilObj.code, (function(A) { + A && r.save() + } + )) : r.save() + } + , + this.save = function() { + r.edit.canvas.currentCanvasContainer.getCanvas().save(), + r.edit.canvas.negativeCanvasContainer.getCanvas().save(); + var A = r.edit.canvas.currentCanvasContainer.getCanvas() + , e = r.edit.canvas.negativeCanvasContainer.getCanvas() + , t = document.createElement("canvas"); + t.width = A.width, + t.height = A.height; + var i = t.getContext("2d"); + i.drawImage(e.getCanvas(), 0, 0), + i.drawImage(A.getCanvas(), 0, 0); + var o = t.toDataURL(); + r.editingPostilObj.imageURL = o, + this.editingNodeDom.children[1].children[0].setAttribute("src", o), + r.eventDispatcher.dispatchEvent({ + type: "POSTIL-EDIT-SAVE", + event: event, + data: r.editingPostilObj + }) + } + , + this.undo = function() { + r.eventDispatcher.dispatchEvent({ + type: "POSTIL-EDIT-UNDO", + event: event + }) + } + , + this.postilExit = function() { + "function" == typeof r.exitListener ? r.exitListener(this.editingPostilObj.code, (function(A) { + A && r.exit() + } + )) : r.exit() + } + , + this.exit = function() { + r.edit.canvas.currentCanvasContainer.getCanvas().clear(), + r.edit.canvas.negativeCanvasContainer.getCanvas().clear(), + r.edit.canvas.currentCanvasContainer.getCanvas().setDocumentName(""), + r.edit.canvas.currentCanvasContainer.getCanvas().setPictureName(""), + r.edit.canvas.negativeCanvasContainer.getCanvas().setDocumentName(""), + r.edit.canvas.negativeCanvasContainer.getCanvas().setPictureName(""), + r.clearPostilStorage(), + r.edit.hide(), + r.editingPostilObj = void 0, + document.querySelector("#" + o.viewport).style.display = "block", + r.eventDispatcher.dispatchEvent({ + type: "POSTIL-EDIT-CLOSE" + }) + } + , + this.clearPostilStorage = function() { + for (var A = localStorage.length, e = [], t = 0; A > t; t += 1) { + var i = localStorage.key(t); + -1 === i.indexOf("currentCanvas-") && -1 === i.indexOf("negativeCanvas-") || e.push(i) + } + e.map((function(A, e) { + return localStorage.removeItem(A) + } + )) + } + , + this.clearPostilStorage(), + this.getPostilByKey = function(A) { + return r.postilInfo ? r.postilInfo[A] : null + } + , + this.getAllPostil = function() { + return r.postilInfo ? r.postilInfo : null + } + } + , zd = function(A, e) { + var t = document.getElementById("svgBar" + e) + , i = this; + if (!t) { + this.svg = document.createElementNS("http://www.w3.org/2000/svg", "svg"), + this.svg.setAttribute("id", "svgBar" + e), + this.svg.setAttribute("style", "width: 100%; height: 10px; position:absolute; left: 0; top:0;"), + A.appendChild(this.svg); + var o = Number(2).toString() + , n = A.clientWidth.toString() + , r = (A.clientWidth - 2).toString(); + this.backBar = document.createElementNS("http://www.w3.org/2000/svg", "line"), + this.backBar.setAttribute("id", "backBar" + e), + this.backBar.setAttribute("class", "progressBar"), + this.backBar.setAttribute("x1", o), + this.backBar.setAttribute("y1", "1"), + this.backBar.setAttribute("x2", n), + this.backBar.setAttribute("y2", "1"), + this.backBar.setAttribute("stroke", "#CFF9FE"), + this.backBar.setAttribute("stroke-width", "7"), + this.backBar.setAttribute("stroke-linecap", "round"), + this.frontBar = document.createElementNS("http://www.w3.org/2000/svg", "line"), + this.frontBar.setAttribute("id", "frontBar" + e), + this.frontBar.setAttribute("class", "progressBar"), + this.frontBar.setAttribute("x1", o), + this.frontBar.setAttribute("y1", "1"), + this.frontBar.setAttribute("x2", n), + this.frontBar.setAttribute("y2", "1"), + this.frontBar.setAttribute("stroke", "#58BDFD"), + this.frontBar.setAttribute("stroke-dasharray", r), + this.frontBar.setAttribute("stroke-dashoffset", r), + this.frontBar.setAttribute("stroke-width", "7"), + this.frontBar.setAttribute("stroke-linecap", "round"), + this.svg.appendChild(this.backBar), + this.svg.appendChild(this.frontBar) + } + this.setProgressBar = function(A, e) { + var t = A / e + , o = r - r * t; + i.svg.style.display = "", + i.frontBar.setAttribute("stroke-dashoffset", o.toString()), + 1 > t || setTimeout((function() { + i.deleteProgressBar() + } + ), 500) + } + , + this.deleteProgressBar = function() { + document.getElementsByClassName("progressBar"); + i.svg.style.display = "none" + } + } + , Zd = function(A, e) { + var t = A.toolId + , i = A.Flag + , o = A.viewer + , n = e.toolbarTop + , r = this + , a = 0; + this.snapshotInfo = {}, + this.snapshotDelConf = !0, + this.deleteListener = null, + this.addListener = null, + this.renameListener = null, + this.updateListener = null, + this.annotationListener = null, + this.restoreToSnapshotListener = null; + var s = document.createElement("div"); + s.className = "snapshot-content", + xh.append(s, '
'), + this.snapshotWindow = qd.window({ + title: "快照", + width: 334, + height: 688, + closeOnEsc: !1, + closeButton: !0, + afterWindowHide: function() { + var A = document.getElementById("snapshot" + t); + i.snapshot = !1, + A && (A.style.backgroundColor = "", + A.querySelector(".yj-icon").className = "yj-icon snapshot-icon") + }, + content: s + }), + r.snapshotWindow.setPosition({ + left: "", + right: 5, + top: 60 + }), + r.snapshotWindow.windowHide(), + xh.addEventListener(n.querySelector("#snapshot" + t), "click", (function(A) { + if (i.snapshot) + r.snapshotInfo = void 0, + A.target.parentNode.style.backgroundColor = "", + A.target.className = "yj-icon snapshot-icon", + r.snapshotWindow.windowHide(); + else { + r.load([]), + i.snapshot = !i.snapshot, + r.snapshotWindow.windowShow(); + var e = o.viewerImpl.modelManager.sceneState; + A.target.parentNode.style.backgroundColor = "#1f89de", + A.target.className = "yj-icon snapshot-icon active", + e.getSelection() + } + } + )), + xh.addEventListener(r.snapshotWindow.$el.querySelector("#add" + t), "click", (function(A) { + var e = r.makeSnapshots(); + "function" == typeof r.addListener ? r.addListener(e, (function(A, t) { + A && r.add(t || e) + } + )) : r.add(e) + } + )), + this.clear = function() { + [].map.call(r.snapshotWindow.$el.querySelectorAll(".snapshot .snapshot-body"), (function(A, e) { + A.innerHTML = "" + } + )), + r.snapshotInfo = {}, + r.snapshotDelConf = !0 + } + , + this.load = function(A) { + Array.isArray(A) && A.forEach((function(A) { + r.add(A) + } + )) + } + , + this.makeSnapshots = function() { + var A, e, t, i, n, r = o.viewerImpl.modelManager.getModelSnapshotPhoto(); + A = r.imgURL; + var s = r.width + , l = r.height + , c = o.viewerImpl.getSceneState(); + e = c.camera, + t = c.state, + i = c.selection.concat(), + n = c.modelSelection.concat(); + var h = a; + return a += 1, + { + cameraState: e, + componentState: t, + highlightComponentsKeys: i, + highlightModelsKeys: n, + imageURL: A, + width: s, + height: l, + num: h, + code: (new Date).getTime().toString(), + name: "快照" + h, + description: "无注释" + } + } + , + xh.addEventListener(r.snapshotWindow.$el.querySelector(".snapshot-body"), "click", (function(A) { + switch (A.target.className) { + case "snapshot-node-delete": + r.snapshotsDelete(A); + break; + case "snapshot-node-img": + r.snapshotsflyto(A); + break; + case "snapshot-node-annotation": + r.snapshotsAnnotation(A); + break; + case "snapshot-node-button-update": + r.snapshotUpdate(A) + } + } + )), + xh.addEventListener(r.snapshotWindow.$el.querySelector(".snapshot-body"), "dblclick", (function(A) { + switch (A.target.className) { + case "snapshot-node-name": + r.snapshotsRename(A) + } + } + )), + this.add = function(A) { + var e = A.imageURL + , t = A.width + , i = A.height + , o = A.code + , n = A.name + , a = A.num + , s = A.description; + if (A.cameraState && A.componentState && e && o && t && i) { + for (var l = r.snapshotWindow.$el.querySelectorAll(".snapshot-node"), c = 0; l.length > c; c += 1) + xh.css(l[c], { + border: "2px" + }); + var h = '
' + n + '×
'; + [].map.call(r.snapshotWindow.$el.querySelectorAll(".snapshot-body"), (function(A, e) { + xh.append(A, h) + } + )), + r.snapshotInfo[o] = A + } + } + , + this.snapshotsflyto = function(A) { + for (var e = r.snapshotWindow.$el.querySelectorAll(".snapshot-node"), t = 0; e.length > t; t += 1) + xh.css(e[t], { + border: "2px" + }); + var i = A.target.parentNode.parentNode.getAttribute("code"); + "function" == typeof r.restoreToSnapshotListener ? r.restoreToSnapshotListener(i, (function(A) { + r.restoreToSnapshot(i) + } + )) : r.restoreToSnapshot(i) + } + , + this.restoreToSnapshot = function(A) { + var e = r.snapshotInfo[A]; + if (e) { + o.viewerImpl.setSceneState({ + camera: e.cameraState, + state: e.componentState, + selection: e.highlightComponentsKeys, + modelSelection: e.highlightModelsKeys + }); + var t = r.snapshotWindow.$el.querySelector("div[imgid='" + A + "']"); + t && xh.css(t, { + border: "2px solid #002553" + }) + } + } + , + this.snapshotsPlay = function() { + var A = null; + function e(t) { + var i = r.snapshotWindow.$el.querySelectorAll(".snapshot-node"); + if (0 !== i.length) { + var n, a = i[t].getAttribute("imgid"); + if (void 0 === r.snapshotInfo[a]) + i.length > t && e(t + 1); + else { + for (var s = 0; i.length > s; s += 1) + xh.css(i[s], { + border: "2px" + }); + xh.css(i[t], { + border: "2px solid #002553" + }), + o.viewerImpl.setSceneState({ + camera: r.snapshotInfo[a].cameraState, + state: r.snapshotInfo[a].componentState, + selection: r.snapshotInfo[a].highlightComponentsKeys, + modelSelection: r.snapshotInfo[a].highlightModelsKeys + }), + i.length - 1 > t ? A = setTimeout((n = t + 1, + function() { + e(n) + } + ), 1e3) : [].map.call(r.snapshotWindow.$el.querySelectorAll(".snapshot-play"), (function(A, e) { + A.innerHTML = "播放模型快照" + } + )) + } + i.length > t || [].map.call(r.snapshotWindow.$el.querySelectorAll(".snapshot-play"), (function(A, e) { + A.innerText = "播放模型快照" + } + )) + } else + [].map.call(r.snapshotWindow.$el.querySelectorAll(".snapshot-play"), (function(A, e) { + A.innerText = "播放模型快照" + } + )) + } + return function(t) { + if ("播放模型快照" === t.target.innerText) { + t.target.innerText = "停止播放"; + e(0) + } else + "停止播放" === t.target.innerText && (t.target.innerText = "播放模型快照", + A && clearTimeout(A)) + } + }(), + xh.addEventListener(r.snapshotWindow.$el.querySelector(".snapshot-play"), "click", (function(A) { + r.snapshotsPlay(A) + } + )), + this.snapshotsDelete = function(A) { + var e = A.target.parentNode.parentNode.getAttribute("imgid"); + if (r.snapshotDelConf) { + var t = qd.alert("info", { + msg: "删除不可恢复,确认删除?", + title: "删除确认", + backdrop: !0, + buttons: { + yes: { + closeOnClick: !1, + text: "删除并不再提示" + }, + no: { + closeOnClick: !1, + text: "删除" + } + }, + callback: function(A, t) { + "no" !== t && "yes" !== t || ("yes" === t && (r.snapshotDelConf = !1), + "function" == typeof r.deleteListener ? r.deleteListener(e, (function(A) { + A && r.delete(e) + } + )) : r.delete(e)), + A.destroy() + } + }) + , i = (new Date).getTime() - qd.window.startTime; + [].map.call(r.snapshotWindow.$el.querySelectorAll(".lobibox-backdrop"), (function(A, e) { + xh.css(A, { + "z-index": i + }) + } + )), + t.$el.style.zIndex = i + 2 + } else + "function" == typeof r.deleteListener ? r.deleteListener(e, (function(A) { + A && r.delete(e) + } + )) : r.delete(e) + } + , + this.delete = function(A) { + var e = r.snapshotWindow.$el.querySelector("div[imgid='" + A + "']"); + e && e.remove(), + delete r.snapshotInfo[A] + } + , + this.snapshotsRename = function(A) { + o.viewerImpl.cameraControl.enabled = !1; + var e = A.target + , t = e.parentNode.parentNode.getAttribute("imgid") + , i = e.innerText + , n = document.createElement("input"); + n.type = "text", + n.value = i, + e.innerText = "", + xh.append(e, n), + n.focus(), + n.select(), + n.addEventListener("blur", (function(A) { + var e = A.target; + e.removeEventListener("blur", (function() {} + )), + e.value !== i && "" !== xh.trim(e.value) ? "function" == typeof r.renameListener ? r.renameListener(t, e.value, (function(A, o) { + A ? r.rename(t, o || e.value) : e.parentNode.innerText = i + } + )) : r.rename(t, e.value) : e.parentNode.innerText = i, + n.remove(), + o.viewerImpl.cameraControl.enabled = !0 + } + )) + } + , + this.rename = function(A, e) { + var t = r.snapshotWindow.$el.querySelector("div[imgid='" + A + "']"); + if (t) { + var i = t.querySelector(".snapshot-node-name"); + i && (i.innerText = e) + } + r.snapshotInfo[A].name = e + } + , + this.snapshotUpdate = function(A) { + var e = A.target.parentNode.parentNode.getAttribute("imgid") + , t = r.makeSnapshots(); + "function" == typeof r.updateListener ? r.updateListener(e, t, (function(A, i, o) { + A && r.update(i || e, o || t) + } + )) : r.update(e, t) + } + , + this.update = function(A, e) { + var t = r.snapshotInfo[A]; + t && (t.cameraState = e.cameraState, + t.componentState = e.componentState, + t.highlightComponentsKeys = e.highlightComponentsKeys, + t.highlightModelsKeys = e.highlightModelsKeys, + t.imageURL = e.imageURL); + var i = r.snapshotWindow.$el.querySelector("div[imgid='" + A + "']"); + if (i) { + var o = i.querySelector(".snapshot-node-img"); + o && (o.src = e.imageURL) + } + } + , + this.snapshotsAnnotation = function(A) { + var e = A.target + , t = e.parentNode.parentNode.getAttribute("imgid") + , i = e.innerHTML + , o = qd.prompt("text", { + title: "添加/修改-注释/说明", + value: e.innerHTML, + multiline: !0, + modal: !0, + backdrop: !0, + lines: 6, + attrs: { + placeholder: "无注释" + }, + buttons: { + ok: { + class: "btn btn-info", + closeOnClick: !1, + text: "确定" + }, + cancel: { + class: "btn btn-danger", + closeOnClick: !1, + text: "取消" + } + }, + callback: function(A, n) { + if ("ok" === n) { + var a = o.getValue(); + a !== i && "" !== xh.trim(a) ? "function" == typeof r.annotationListener ? r.annotationListener(t, a, (function(A, e, i) { + A && r.annotation(e || t, i || a) + } + )) : r.annotation(t, a) : e.innerHTML = i, + A.destroy() + } else + "cancel" === n && A.destroy() + } + }) + , n = (new Date).getTime() - qd.window.startTime; + [].map.call(r.snapshotWindow.$el.querySelectorAll(".lobibox-backdrop"), (function(A, e) { + xh.css(A, { + "z-index": n + }) + } + )), + o.$el.style.zIndex = n + 2 + } + , + this.annotation = function(A, e) { + var t = r.snapshotWindow.$el.querySelector("div[imgid='" + A + "']"); + if (t) { + var i = t.querySelector(".snapshot-node-annotation"); + i && (i.innerText = e) + } + r.snapshotInfo[A].description = e + } + , + this.getSnapshotByKey = function(A) { + return r.snapshotInfo ? r.snapshotInfo[A] : null + } + , + this.getAllSnapshot = function() { + return r.snapshotInfo ? r.snapshotInfo : null + } + } + , Xd = function(A, e) { + var t = this; + qd.viewport = document.querySelector("#" + A.viewport), + A.getViewerImpl().getModelManager().addEventListener(Rc.ON_LOAD_ERROR, (function(A) { + jd("error", A.message || "加载出现错误", !1) + } + )), + A.getViewerImpl().getModelManager().addEventListener(Rc.ON_LOAD_INVALID_SCENE, (function(A) { + jd("error", "key为 " + A.modelKey + " 的模型信息不合法", !1) + } + )), + A.getViewerImpl().getModelManager().addEventListener(Rc.ON_NETWORK_ERROR, (function(A) { + jd("error", A.message || "网络连接错误", !1) + } + )), + A.getViewerImpl().getModelManager().addEventListener(Rc.NO_PERMISSION, (function(A) { + jd("error", A.message || "权限不足", !1) + } + )), + A.getViewerImpl().getModelManager().addEventListener(Rc.ACCOUNT_NO_EXIST, (function(A) { + jd("error", A.message || "无法获取账户", !1) + } + )), + A.getViewerImpl().getModelManager().addEventListener(Rc.ON_LOAD_EMPTY_SCENE, (function(A) { + jd("error", "key为 " + A.modelKey + " 的模型场景为空,请生成场景", !1) + } + )), + A.getViewerImpl().getModelManager().addEventListener(Tc.PARSEFAILE, (function(A) { + jd("error", "key为 " + A.modelKey + " 的模型解析失败", !1) + } + )), + A.getViewerImpl().getModelManager().addEventListener(Tc.PARSING, (function(A) { + jd("error", "key为 " + A.modelKey + " 的模型解析中", !1) + } + )), + A.getViewerImpl().getModelManager().addEventListener(Tc.SCENE_NOTHING_TO_LOAD, (function(A) { + jd("error", "key为 " + A.modelKey + " 的模型没有可加载的内容", !1) + } + )); + var i = A.viewerImpl.uuid + , o = { + roam: !1, + sectioning: !1, + multiple: !1, + fullScreen: !1, + attribute: !1, + search: !1, + measurement: !1, + modelTree: !1, + treeDataLoad: !1, + snapshot: !1, + postil: !1, + mark: !1 + } + , n = { + home: !0, + fit: !0, + restore: !0, + roam: !0, + multiple: !0, + transparent: !1, + hide: !0, + isolation: !0, + sectioning: !0, + modelPartition: !0, + wireframe: !0, + color: !0, + setting: !0, + modelTree: !1, + attribute: !0, + search: !1, + measurement: !0, + snapshot: !0, + postil: !0, + mark: !0 + } + , r = { + Flag: o, + lobibox: qd, + toolId: i, + viewer: A + }; + this.progressBar = new zd(A.viewerImpl.domElement,i); + var a = {}; + A.getViewerImpl().modelManager.addEventListener(Rc.ON_LOAD_PROGRESS, (function(A) { + a[A.progress.modelKey] = [A.progress.total, A.progress.loaded]; + var e = 0 + , i = 0; + for (var o in a) + if (a.hasOwnProperty(o)) { + var n = a[o]; + e += n[0], + i += n[1] + } + t.progressBar.setProgressBar(i, e) + } + )), + A.getViewerImpl().modelManager.addEventListener(Rc.ON_LOAD_COMPLETE, (function(A) { + delete a[A.modelKey], + 0 === Object.keys(a).length && t.progressBar.setProgressBar(1, 1) + } + )); + A.viewerImpl.getScene(); + this.undoList = [], + this.redoList = [], + this.maxUndoListLength = 10; + var s, l, c, h, d = 0; + function p(e) { + var i = t.undoList[e - 1]; + if (i) + switch (i.type) { + case "隐藏": + A.showComponentsByKey(i.data); + break; + case "隔离": + A.closeIsolateComponentsByKey(i.data); + break; + case "修改颜色": + A.closeColorfulComponentsByKey(i.data.key); + break; + case "框选添加": + A.closeHighlightComponentsByKey(i.data); + break; + case "框选移除": + A.highlightComponentsByKey(i.data); + break; + case "修改线框": + A.closeWireFrameComponentsByKey(i.data) + } + } + function g(e) { + var i = t.redoList[e]; + if (i) + switch (i.type) { + case "隐藏": + A.hideComponentsByKey(i.data); + break; + case "隔离": + A.isolateComponentsByKey(i.data); + break; + case "修改颜色": + A.colorfulComponentsByKey(i.data.key, i.data.color, i.data.opacity); + break; + case "框选添加": + A.highlightComponentsByKey(i.data); + break; + case "框选移除": + A.closeHighlightComponentsByKey(i.data); + break; + case "修改线框": + A.wireFrameComponentsByKey(i.data) + } + } + function u(A) { + if (void 0 !== A.target.undoNum) { + var e = Number(A.target.undoNum); + 1 === e && jd("info", "无法再撤销、重做。请使用ctrl+z或ctrl+shift+z", 3e3), + isNaN(e) || t.undoOrRedo(e) + } + } + this.className = "Tool", + this.getToolId = function() { + return i + } + , + this.getFlag = function() { + return o + } + , + this.createTool = function(e) { + t.options = uh.extend(!0, {}, n, e); + var a = document.createElement("div"); + a.id = "my-tool" + i, + a.className = "yj-tool", + A.viewerImpl.domElement.appendChild(a), + this.toolbarTop = a, + t.toolbar = a; + var s = document.createElement("div"); + s.className = "yj-group", + a.appendChild(s); + var l = document.createElement("div"); + l.className = "homeViewer-div", + l.id = "homeViewerDiv" + i, + l.style.display = "flex"; + var c = document.createElement("button"); + c.className = "yj-but", + c.title = "视图操作", + c.id = "homeViewer" + i; + var h = document.createElement("div"); + h.classList.add("yj-icon"), + h.classList.add("homeViewer-icon"), + c.appendChild(h); + var p = document.createElement("div"); + p.className = "viewerModal", + p.id = "viewerModal" + i, + l.appendChild(c), + l.appendChild(p), + t.options.home && s.appendChild(l), + c.addEventListener("click", (function(A) { + "" === p.style.display || "none" === p.style.display ? (DA(), + p.style.display = "flex") : p.style.display = "none" + } + )); + var g = document.createElement("button"); + g.className = "yj-but", + g.title = "初始化", + g.id = "home" + i; + var u = document.createElement("div"); + u.classList.add("yj-icon"), + u.classList.add("home-icon"), + g.appendChild(u), + t.options.home && p.appendChild(g); + var f = document.createElement("button"); + f.className = "yj-but", + f.title = "聚焦", + f.id = "fit" + i; + var m = document.createElement("div"); + m.classList.add("yj-icon"), + m.classList.add("fit-icon"), + f.appendChild(m), + t.options.fit && p.appendChild(f); + var C = document.createElement("button"); + C.className = "yj-but", + C.title = "复位", + C.id = "restore" + i; + var y = document.createElement("div"); + y.classList.add("yj-icon"), + y.classList.add("restore-icon"), + C.appendChild(y); + var v = document.createElement("ul"); + v.className = "restoreModal", + v.style.cssText += "display: none;", + v.id = "restoreModal" + i; + for (var I = 0; 6 > I; I += 1) { + var E = document.createElement("li"); + E.className = "input-group-addon", + v.appendChild(E); + var B = document.createElement("input"); + B.type = "checkbox", + B.className = 5 === I ? "checkAll" : "check", + E.appendChild(B); + var x = document.createElement("label"); + switch (E.appendChild(x), + I) { + case 0: + B.id = "showSet" + i, + x.setAttribute("for", "showSet" + i), + x.innerHTML = "复位构件可见设置"; + break; + case 1: + B.id = "highlightSet" + i, + x.setAttribute("for", "highlightSet" + i), + x.innerHTML = "复位构件高亮设置"; + break; + case 2: + B.id = "viewSet" + i, + x.setAttribute("for", "viewSet" + i), + x.innerHTML = "复位模型视角设置"; + break; + case 3: + B.id = "wireframeSet" + i, + x.setAttribute("for", "wireframeSet" + i), + x.innerHTML = "复位构件线框设置"; + break; + case 4: + B.id = "colorSet" + i, + x.setAttribute("for", "colorSet" + i), + x.innerHTML = "复位构件颜色设置"; + break; + case 5: + B.id = "checkAll" + i, + x.setAttribute("for", "checkAll" + i), + x.innerHTML = "全选"; + var S = document.createElement("input"); + S.type = "button", + S.id = "reset" + i, + S.className = "reset", + S.value = "复位选中项", + E.appendChild(S) + } + } + var w = document.createElement("ul"); + w.className = "history", + w.id = "history" + i, + w.style.cssText += "display: none;"; + var M = document.createElement("span"); + M.innerText = "历史记录", + M.style.cssText += "color:white", + w.appendChild(M), + t.options.restore && (s.appendChild(C), + s.appendChild(v), + s.appendChild(w), + v.style.cssText += "margin-left:" + C.style.left - v.style.width / 2 + "px"); + var b = document.createElement("button"); + b.className = "yj-but", + b.title = "漫游", + b.id = "roam" + i; + var U = document.createElement("div"); + U.classList.add("yj-icon"), + U.classList.add("roam-icon"), + b.appendChild(U); + var F = document.createElement("div"); + F.classList.add("roamModal"), + F.classList.add("clearfix"), + F.id = "roamModal" + i, + F.innerHTML = '
提示信息
-
+
提示信息
-
+
'; + var K = document.createElement("div"); + K.className = "roamOnOff", + K.innerHTML = '
碰撞:
重力:
', + t.options.roam && (s.appendChild(b), + s.appendChild(F), + s.appendChild(K), + F.style.cssText += "margin-left:" + b.style.left - F.style.width / 2 + "px"); + var Q = document.createElement("div"); + Q.className = "yj-group", + a.appendChild(Q); + var R = null; + t.options.multiple && (R = function(A, e) { + var t = A.toolId + , i = A.Flag + , o = A.viewer + , n = document.createElement("button"); + n.className = "yj-but", + n.title = "框选", + n.id = "multiple" + t; + var r = document.createElement("div"); + r.classList.add("yj-icon"), + r.classList.add("multiple-icon"), + n.appendChild(r); + var a = null; + return n.addEventListener("click", (function() { + if (i.multiple) + return this.style.backgroundColor = "", + this.querySelector(".yj-icon").className = "yj-icon multiple-icon", + i.multiple = !1, + a && a.remove(), + a = null, + void o.viewerImpl.controlManager.disableTool(Pc.PICK_BY_RECT); + i.roam && (document.getElementById("roam" + t).style.backgroundColor = "", + document.getElementById("roam" + t).querySelector(".yj-icon").className = "yj-icon roam-icon", + jd("info", "框选模式下将关闭漫游功能", 2e3), + e.exitRoam()), + i.measurement && (document.getElementById("measurement" + t).style.backgroundColor = "", + document.getElementById("measurement" + t).querySelector(".yj-icon").className = "yj-icon measurement-icon", + jd("info", "框选模式下将关闭测量功能", 2e3), + e.exitMeasure && e.exitMeasure()), + i.sectioning && (document.getElementById("sectioning" + t).style.backgroundColor = "", + document.getElementById("sectioning" + t).querySelector(".yj-icon").className = "yj-icon sectioning-icon", + jd("info", "框选模式下将关闭剖切功能", 2e3), + o.viewerImpl.controlManager.disableTool(Pc.CLIP_BY_BOX), + i.sectioning = !1), + o.render(), + a = jd("info", "按住'Ctrl'键,框选模式为增选;按住'Alt'键,框选模式为减选", 5e3), + this.style.backgroundColor = "#1f89de", + this.querySelector(".yj-icon").className = "yj-icon multiple-icon active", + i.multiple = !i.multiple, + o.viewerImpl.controlManager.enableTool(o.viewerImpl, Pc.PICK_BY_RECT) + } + )), + n + }(r, this), + Q.appendChild(R)); + var T = document.createElement("button"); + T.className = "yj-but", + T.title = "构件透明化", + T.id = "transparent" + i; + var k = document.createElement("div"); + k.classList.add("yj-icon"), + k.classList.add("transparent-icon"), + T.appendChild(k); + var D = document.createElement("div"); + D.classList.add("transparentModal"), + D.classList.add("clearfix"), + D.id = "transparentModal" + i; + var L = document.createElement("div"); + D.appendChild(L); + var N = document.createElement("span"); + N.innerHTML = "提示信息", + N.className = "transparent-info", + L.appendChild(N), + (uA = document.createElement("div")).className = "subtract", + uA.innerHTML = "-", + D.appendChild(uA); + var O = document.createElement("div"); + O.className = "transparentRangeParent", + D.appendChild(O); + var V = document.createElement("input"); + V.type = "range", + V.className = "transparentRange", + V.setAttribute("step", "0.01"), + V.setAttribute("min", "0"), + V.setAttribute("max", "1"), + O.appendChild(V), + (CA = document.createElement("div")).className = "add", + CA.innerHTML = "+", + D.appendChild(CA), + t.options.transparent && (Q.appendChild(T), + Q.appendChild(D), + D.style.cssText += "margin-left:" + T.style.left - D.style.width / 2 + "px"); + var G = document.createElement("div"); + G.className = "toolComponentDiv", + G.id = "toolComponentDiv" + i, + G.style.display = "flex"; + var P = document.createElement("button"); + P.className = "yj-but", + P.title = "构件操作", + P.id = "toolComponent" + i; + var q = document.createElement("div"); + q.classList.add("yj-icon"), + q.classList.add("toolComponent-icon"), + P.appendChild(q); + var j = document.createElement("div"); + j.className = "toolComponentModal", + j.id = "toolComponentModal" + i, + G.appendChild(P), + G.appendChild(j), + Q.appendChild(G), + P.addEventListener("click", (function(A) { + "" === j.style.display || "none" === j.style.display ? (DA(), + j.style.display = "flex") : j.style.display = "none" + } + )); + var H = document.createElement("button"); + H.className = "yj-but", + H.title = "构件隐藏", + H.id = "hide" + i; + var Y = document.createElement("div"); + Y.classList.add("yj-icon"), + Y.classList.add("hide-icon"), + H.appendChild(Y), + t.options.hide && j.appendChild(H); + var W = document.createElement("button"); + W.className = "yj-but", + W.title = "构件隔离", + W.id = "insulate" + i; + var J = document.createElement("div"); + J.classList.add("yj-icon"), + J.classList.add("insulate-icon"), + W.appendChild(J), + t.options.isolation && j.appendChild(W); + var z = document.createElement("button"); + z.className = "yj-but", + z.title = "构件属性", + z.id = "attribute" + i; + var Z = document.createElement("div"); + Z.classList.add("yj-icon"), + Z.classList.add("attribute-icon"), + z.appendChild(Z), + t.options.attribute && (j.appendChild(z), + this.attributeWindow = function(A) { + var e = A.lobibox + , t = A.toolId + , i = A.Flag + , o = document.createElement("div"); + o.className = "tab-body", + o.id = "tab-properties" + t; + var n = document.createElement("table"); + n.classList.add("sx-table"), + n.classList.add("table-no-top"), + o.appendChild(n); + var r = document.createElement("thead"); + n.appendChild(r); + var a = document.createElement("tbody"); + n.appendChild(a); + var s = document.createElement("tr"); + s.className = "noprop", + a.appendChild(s); + var l = document.createElement("td"); + return l.innerText = "尚未选择构件", + s.appendChild(l), + e.window({ + title: "属性", + width: 334, + height: 688, + closeOnEsc: !1, + closeButton: !0, + afterWindowHide: function() { + var A = document.getElementById("attribute" + t); + i.attribute = !1, + A && (A.style.backgroundColor = "", + A.querySelector(".yj-icon").className = "yj-icon attribute-icon") + }, + content: o + }) + }(r), + t.attributeWindow.setPosition({ + left: "", + right: 5, + top: 60 + }), + t.attributeWindow.windowHide(), + z.addEventListener("click", (function() { + if (o.attribute) + this.style.backgroundColor = "", + t.attributeWindow.windowHide(); + else { + o.attribute = !o.attribute, + this.style.backgroundColor = "#1f89de", + this.querySelector(".yj-icon").className = "yj-icon attribute-icon active", + t.attributeWindow.windowShow(); + var e = A.viewerImpl.modelManager.sceneState; + e.getSelection() && t.showComponentAttribute(e.getSelection()[0]) + } + } + ))); + var X = document.createElement("button"); + X.className = "yj-but", + X.title = "构件线框化", + X.id = "wireframe" + i; + var _ = document.createElement("div"); + _.classList.add("yj-icon"), + _.classList.add("wireframe-icon"), + X.appendChild(_), + t.options.wireframe && j.appendChild(X); + var $ = document.createElement("button"); + $.className = "yj-but", + $.title = "构件变色", + $.id = "color" + i, + $.style.borderRadius = "0 6px 6px 0"; + var AA = document.createElement("div"); + AA.classList.add("yj-icon"), + AA.classList.add("color-icon"), + $.appendChild(AA); + var eA = document.createElement("input"); + eA.style.cssText += "display:none;", + eA.className = "toolColorInput", + $.appendChild(eA); + var tA = new Hh(eA,{ + hasOpacity: !0 + }).element; + tA.id = "colorModal" + i, + tA.className = "colorModal", + t.options.color && (j.appendChild($), + Q.appendChild(tA), + tA.style.cssText += "margin-left:" + $.offsetLeft + "px"), + tA.querySelector(".btn-yes").addEventListener("click", (function() { + var e = A.getHighlightComponentsKey() + , i = Kd.getHexStringFromRGB(eA.value) + , o = Kd.getColorArrayFromRGBA(eA.value)[3]; + t.push({ + type: "修改颜色", + data: { + key: e, + color: i, + opacity: o + } + }), + A.colorfulComponentsByKey(e, i, o) + } + )); + var iA = document.createElement("button"); + iA.className = "yj-but", + iA.title = "模型测量", + iA.id = "measurement" + i; + var oA = document.createElement("div"); + oA.classList.add("yj-icon"), + oA.classList.add("measurement-icon"), + iA.appendChild(oA), + t.options.measurement && (Q.appendChild(iA), + iA.addEventListener("click", (function(e) { + o.measurement ? (o.measurement = !1, + this.style.backgroundColor = "", + this.querySelector(".yj-icon").className = "yj-icon measurement-icon", + A.viewerImpl.controlManager.disableTool(Pc.PICK_BY_MEASURE)) : (o.measurement = !0, + this.style.backgroundColor = "#1f89de", + this.querySelector(".yj-icon").className = "yj-icon measurement-icon active", + A.viewerImpl.controlManager.enableTool(A.viewerImpl, Pc.PICK_BY_MEASURE)) + } + ))); + var nA = document.createElement("div"); + nA.className = "toolModelDiv", + nA.id = "toolModelDiv" + i, + nA.style.display = "flex"; + var rA = document.createElement("button"); + rA.className = "yj-but", + rA.title = "模型操作", + rA.id = "toolModel" + i; + var aA = document.createElement("div"); + aA.classList.add("yj-icon"), + aA.classList.add("toolModel-icon"), + rA.appendChild(aA); + var sA = document.createElement("div"); + sA.className = "toolModelModal", + sA.id = "toolModelModal" + i, + nA.appendChild(rA), + nA.appendChild(sA), + Q.appendChild(nA), + rA.addEventListener("click", (function(A) { + "" === sA.style.display || "none" === sA.style.display ? (DA(), + sA.style.display = "flex") : sA.style.display = "none" + } + )); + var lA = document.createElement("button"); + lA.className = "yj-but", + lA.title = "模型剖切", + lA.id = "sectioning" + i; + var cA = document.createElement("div"); + cA.classList.add("yj-icon"), + cA.classList.add("sectioning-icon"), + lA.appendChild(cA), + t.options.sectioning && sA.appendChild(lA); + var hA = document.createElement("button"); + hA.className = "yj-but", + hA.title = "模型分解", + hA.id = "modelPartition" + i; + var dA = document.createElement("div"); + dA.classList.add("yj-icon"), + dA.classList.add("modelPartition-icon"), + hA.appendChild(dA); + var pA = document.createElement("div"); + pA.classList.add("modelPartitionModal"), + pA.id = "modelPartitionModal" + i, + pA.style.cssText += "display: none;"; + var gA = document.createElement("div"); + pA.appendChild(gA); + var uA, fA = document.createElement("span"); + fA.innerHTML = "提示信息", + fA.className = "modelPartition-info", + gA.appendChild(fA), + (uA = document.createElement("div")).className = "subtract", + uA.innerHTML = "-", + pA.appendChild(uA); + var mA = document.createElement("div"); + mA.className = "modelPartitionRangeParent", + pA.appendChild(mA); + var CA, yA = document.createElement("input"); + yA.type = "range", + yA.className = "modelPartitionRange", + yA.setAttribute("value", "1"), + yA.setAttribute("name", "points"), + yA.setAttribute("step", "0.01"), + yA.setAttribute("min", "1"), + yA.setAttribute("max", "3"), + mA.appendChild(yA), + (CA = document.createElement("div")).className = "add", + CA.innerHTML = "+", + pA.appendChild(CA), + t.options.modelPartition && (sA.appendChild(hA), + Q.appendChild(pA), + D.style.cssText += "margin-left:" + hA.style.left - pA.style.width / 2 + "px"); + var vA = document.createElement("div"); + vA.className = "toolPostilDiv", + vA.id = "toolPostilDiv" + i, + vA.style.display = "flex", + (wA = document.createElement("button")).className = "yj-but", + wA.title = "批注操作", + wA.id = "toolPostil" + i; + var IA = document.createElement("div"); + IA.classList.add("yj-icon"), + IA.classList.add("toolPostil-icon"), + wA.appendChild(IA); + var EA = document.createElement("div"); + EA.className = "toolPostilModal", + EA.id = "toolPostilModal" + i, + vA.appendChild(wA), + vA.appendChild(EA), + Q.appendChild(vA), + wA.addEventListener("click", (function(A) { + "" === EA.style.display || "none" === EA.style.display ? (DA(), + EA.style.display = "flex") : EA.style.display = "none" + } + )); + var BA = document.createElement("button"); + BA.className = "yj-but", + BA.title = "添加标签", + BA.id = "mark" + i; + var xA = document.createElement("div"); + if (xA.classList.add("yj-icon"), + xA.classList.add("label-icon"), + BA.appendChild(xA), + t.options.mark && (EA.appendChild(BA), + t.mark = new Hd(r,this)), + t.options.snapshot) { + xh.append(EA, ''); + var SA = document.getElementById("snapshot" + i); + SA.addEventListener("mouseover", (function(A) { + this.style.backgroundColor = "#1f89de" + } + )), + SA.addEventListener("mouseout", (function(A) { + o[this.id.split(i)[0]] || (this.style.backgroundColor = "") + } + )), + t.snapshot = new Zd(r,this) + } + if (t.options.postil) { + var wA; + xh.append(EA, wA = ''); + var MA = document.getElementById("postil" + i); + MA.addEventListener("mouseover", (function(A) { + this.style.backgroundColor = "#1f89de" + } + )), + MA.addEventListener("mouseout", (function(A) { + o[this.id.split(i)[0]] || (this.style.backgroundColor = "") + } + )), + t.postil = new Jd(r,this) + } + var bA = document.createElement("div"); + bA.className = "yj-group", + bA.style.display = "flex", + bA.style.width = "160px", + a.appendChild(bA); + var UA = document.createElement("button"); + UA.className = "yj-but", + UA.title = "设置", + UA.id = "set" + i, + UA.style.borderRadius = "6px"; + var FA = document.createElement("div"); + FA.classList.add("yj-icon"), + FA.classList.add("set-icon"), + UA.appendChild(FA); + var KA = document.createElement("div"); + KA.className = "setModal", + KA.id = "setModal" + i; + var QA = document.createElement("div"); + QA.className = "sceneColorDiv", + QA.title = "选择背景颜色", + KA.appendChild(QA); + var RA = document.createElement("button"); + RA.id = "sceneColorSet" + i, + RA.classList.add("yj-icon"), + RA.classList.add("sceneColorSet"), + QA.appendChild(RA); + var TA = document.createElement("input"); + TA.style.cssText += "display:none;", + TA.className = "sceneColorInput", + QA.appendChild(TA); + var kA = new Hh(TA,{ + hasOpacity: !0 + }).element; + function DA() { + v && (v.style.display = "none"), + D && (D.style.display = "none"), + pA && (pA.style.display = "none"), + tA && (tA.style.display = "none"), + p && (p.style.display = "none"), + j && (j.style.display = "none"), + sA && (sA.style.display = "none"), + EA && (EA.style.display = "none"), + KA && (KA.style.display = "none"), + w && (w.style.display = "none") + } + kA.id = "sceneColorModal" + i, + kA.className = "sceneColorModal", + kA.querySelector(".btn-yes").addEventListener("click", (function() { + DA(); + var e = Kd.getHexStringFromRGB(TA.value) + , t = Kd.getColorArrayFromRGBA(TA.value)[3]; + A.setSceneBackGroundColor(e, t) + } + )), + kA.querySelector(".btn-no").addEventListener("click", (function() { + DA() + } + )); + var LA = document.createElement("div"); + LA.className = "fullScreenDiv", + LA.title = "全屏显示", + KA.appendChild(LA); + var NA = document.createElement("button"); + function OA(A) { + A.stopPropagation ? A.stopPropagation() : A.cancelBubble = !0 + } + NA.classList.add("yj-icon"), + NA.classList.add("fullScreen"), + NA.id = "Fullscreen" + i, + LA.appendChild(NA), + t.options.setting && (bA.appendChild(UA), + bA.appendChild(KA), + KA.appendChild(kA), + kA.style.cssText += "margin-left:" + (UA.offsetWidth + 5) + "px;"), + document.addEventListener("click", (function(A) {} + )), + document.addEventListener("keydown", (function(A) { + 27 === (A.keyCode ? A.keyCode : A.which) && (o.roam && b.click(), + o.measurement && document.querySelector("#measurement" + i).click(), + o.multiple && R && R.click(), + o.sectioning && lA.click()), + (A.keyCode ? A.keyCode : A.which) === Oh && (!0 === A.ctrlKey && !0 === A.shiftKey && t.undoOrRedo(d + 1), + !0 === A.ctrlKey && !1 === A.shiftKey && t.undoOrRedo(d - 1)) + } + )), + g.addEventListener("click", (function() { + t.clearUndoList(), + A.resetScene() + } + )), + f.addEventListener("click", (function() { + A.adaptiveSize() + } + )), + C.addEventListener("click", (function(A) { + "none" === v.style.display && DA(), + v.addEventListener("click", (function(A) { + OA(A) + } + )), + w.addEventListener("click", (function(A) { + OA(A) + } + )), + v.style.display = "none" === v.style.display ? "block" : "none", + w.style.display = "none" === w.style.display ? "block" : "none", + OA(A) + } + )), + document.getElementById("reset" + i).addEventListener("click", (function() { + var e = document.getElementById("showSet" + i).checked + , t = document.getElementById("highlightSet" + i).checked + , o = document.getElementById("viewSet" + i).checked + , n = document.getElementById("wireframeSet" + i).checked + , r = document.getElementById("colorSet" + i).checked + , a = {}; + a.visible = e, + a.selected = t, + a.wireframed = n, + a.colorfully = r, + a.view = o, + A.resetScene(a) + } + )); + var VA = document.querySelectorAll("input[type=checkbox].check"); + document.querySelector("input[type=checkbox].checkAll").addEventListener("click", (function() { + for (var A = 0; VA.length > A; A += 1) + VA[A].checked = this.checked + } + )); + for (var GA = 0; VA.length > GA; GA += 1) + VA[GA].addEventListener("click", (function() { + document.querySelector("input[type=checkbox].checkAll").checked = VA.length === document.querySelectorAll("input[type=checkbox].check:checked").length + } + )); + this.pathRoam = Yd(r, this, b, 0, K), + t.pathRoam.setPosition({ + left: "", + right: 5, + top: 60 + }), + t.pathRoam.windowHide(); + var PA = D.querySelector(".subtract") + , qA = D.querySelector(".add") + , jA = D.querySelector(".transparentRange"); + T.addEventListener("click", (function(e) { + if ("none" === D.style.display && DA(), + D.addEventListener("click", (function(A) { + OA(A) + } + )), + D.style.display = "none" === D.style.display ? "block" : "none", + 1 > A.getHighlightComponentsKey().length) + jd("warning", "未选中构件", 2e3), + D.style.display = "none"; + else { + jA.value = 1, + document.querySelector(".transparent-info").innerText = "透明度: " + 100..toFixed(0) + "%" + } + OA(e) + } + )); + var HA = mh.isIE11(); + jA.addEventListener(HA ? "change" : "input", (function(e) { + var t = A.getHighlightComponentsKey(); + document.querySelector(".transparent-info").innerHTML = "透明度: " + (100 * Number(jA.value)).toFixed(0) + "%", + A.transparentComponentsByKey(t, Number(jA.value), !1) + } + )), + PA.addEventListener("click", (function() { + var e = Number(jA.value) + , t = Number(jA.getAttribute("step")); + jA.value = e - t; + var i = A.getHighlightComponentsKey(); + document.querySelector(".transparent-info").innerHTML = "透明度: " + (100 * Number(jA.value)).toFixed(0) + "%", + A.transparentComponentsByKey(i, Number(jA.value), !1) + } + )), + qA.addEventListener("click", (function() { + var e = Number(jA.value) + , t = Number(jA.getAttribute("step")); + jA.value = e + t; + var i = A.getHighlightComponentsKey(); + document.querySelector(".transparent-info").innerHTML = "透明度: " + (100 * Number(jA.value)).toFixed(0) + "%", + A.transparentComponentsByKey(i, Number(jA.value), !1) + } + )), + H.addEventListener("click", (function() { + var e = A.getHighlightComponentsKey(); + 1 > e.length ? jd("warning", "未选中构件", 2e3) : (t.push({ + type: "隐藏", + data: e + }), + A.hideComponentsByKey(e)) + } + )), + W.addEventListener("click", (function() { + var e = A.getHighlightComponentsKey(); + 1 > e.length ? jd("warning", "未选中构件", 2e3) : (t.push({ + type: "隔离", + data: e + }), + A.isolateComponentsByKey(e)) + } + )); + var YA = document.createElement("div"); + YA.className = "section-body"; + var WA = document.createElement("div"); + WA.style.cssText += "color: #ff6700;top: 10px;height: 60px;text-align: center;font-size: 16px;", + YA.appendChild(WA); + var JA = document.createElement("span"); + JA.innerHTML = "是否显示剖切框", + WA.appendChild(JA); + var zA = document.createElement("input"); + zA.type = "radio", + zA.name = "UIControl", + zA.value = 1, + zA.checked = "checked", + WA.appendChild(zA); + var ZA = document.createElement("span"); + ZA.innerHTML = "显示", + WA.appendChild(ZA); + var XA = document.createElement("input"); + XA.type = "radio", + XA.name = "UIControl", + XA.value = 0, + XA.checked = "", + WA.appendChild(XA); + var _A = document.createElement("span"); + _A.innerHTML = "不显示", + WA.appendChild(_A); + var $A = document.createElement("button"); + $A.innerHTML = "确定", + $A.type = "button", + $A.style.cssText += "width:80px;height:30px;border-radius:10px;display:block;margin:0 auto;", + YA.appendChild($A), + this.sectionWindow = qd.window({ + title: "剖切", + id: "sectionWindow", + width: 334, + height: 405, + closeOnEsc: !1, + closeButton: !0, + afterWindowHide: function() { + o.sectioning = !1, + document.getElementById("sectioning" + i).style.backgroundColor = "", + zA.checked = "checked", + XA.checked = "", + A.viewerImpl.controlManager.disableTool(Pc.CLIP_BY_BOX), + A.render() + }, + content: YA + }), + t.sectionWindow.setPosition({ + left: "", + right: 5, + top: 60 + }), + t.sectionWindow.windowHide(), + lA.addEventListener("click", (function() { + if (o.sectioning) + return this.style.backgroundColor = "", + this.querySelector(".yj-icon").className = "yj-icon sectioning-icon", + t.sectionWindow.windowHide(), + o.sectioning = !1, + void A.disableSectionBox(); + o.multiple && (document.getElementById("multiple" + i).style.backgroundColor = "", + document.getElementById("multiple" + i).querySelector(".yj-icon").className = "yj-icon multiple-icon", + jd("info", "剖切模式下将关闭框选功能", 2e3), + A.viewerImpl.controlManager.disableTool(Pc.PICK_BY_RECT), + o.multiple = !1), + o.roam && (document.getElementById("roam" + i).style.backgroundColor = "", + document.getElementById("roam" + i).querySelector(".yj-icon").className = "yj-icon roam-icon", + jd("info", "剖切模式下将关闭漫游功能", 2e3), + t.exitRoam()), + o.measurement && (document.getElementById("measurement" + i).style.backgroundColor = "", + document.getElementById("measurement" + i).querySelector(".yj-icon").className = "yj-icon measurement-icon", + jd("info", "剖切模式下将关闭测量功能", 2e3), + t.exitMeasure && t.exitMeasure()), + A.render(), + this.style.backgroundColor = "#1f89de", + this.querySelector(".yj-icon").className = "yj-icon sectioning-icon active", + t.sectionWindow.windowShow(), + o.sectioning = !o.sectioning, + A.enableSectionBox(), + $A.addEventListener("click", (function() { + document.querySelector("#sectionWindow input[type=radio]:checked").value > 0 ? A.showSectionBox() : A.hideSectionBox() + } + )) + } + )); + var Ae = pA.querySelector(".subtract") + , ee = pA.querySelector(".add") + , te = pA.querySelector(".modelPartitionRange"); + hA.addEventListener("click", (function(e) { + o.roam && (document.getElementById("roam" + i).style.backgroundColor = "", + jd("info", "模型分解模式下将关闭漫游功能", 2e3), + t.exitRoam()), + A.render(), + pA.addEventListener("click", (function(A) { + OA(A) + } + )), + "none" === pA.style.display ? (DA(), + pA.style.display = "block") : pA.style.display = "none", + fA.innerText = "离散系数: " + te.value, + OA(e) + } + )), + te.addEventListener("change", (function(e) { + document.querySelector(".modelPartition-info").innerText = "离散系数: " + te.value; + var t = A.getViewerImpl().modelManager.getModelKeys() + , i = Number(te.value); + isNaN(i) || A.modelsExplosion({ + modelKey: t, + coefficientX: i, + coefficientY: i, + coefficientZ: i + }) + } + )), + Ae.addEventListener("click", (function() { + var e = te.value + , t = Number(te.getAttribute("step")); + te.value = Number(e) - t, + document.querySelector(".modelPartition-info").innerText = "离散系数: " + te.value; + var i = A.getViewerImpl().modelManager.getModelKeys() + , o = Number(te.value); + isNaN(o) || A.modelsExplosion({ + modelKey: i, + coefficientX: o, + coefficientY: o, + coefficientZ: o + }) + } + )), + ee.addEventListener("click", (function() { + var e = te.value + , t = Number(te.getAttribute("step")); + te.value = Number(e) + t, + document.querySelector(".modelPartition-info").innerText = "离散系数: " + te.value; + var i = A.getViewerImpl().modelManager.getModelKeys() + , o = Number(te.value); + isNaN(o) || A.modelsExplosion({ + modelKey: i, + coefficientX: o, + coefficientY: o, + coefficientZ: o + }) + } + )), + X.addEventListener("click", (function() { + var e = A.getHighlightComponentsKey(); + 1 > e.length ? jd("warning", "未选中构件", 2e3) : (t.push({ + type: "修改线框", + data: e + }), + A.wireFrameComponentsByKey(e, !0)) + } + )), + $.addEventListener("click", (function(e) { + "none" === tA.style.display && DA(), + tA.addEventListener("click", (function(A) { + OA(A) + } + )), + tA.style.display = "none" === tA.style.display ? "block" : "none", + 1 > A.getHighlightComponentsKey().length && (jd("warning", "未选中构件", 2e3), + tA.style.display = "none"), + OA(e) + } + )), + UA.addEventListener("click", (function(A) { + KA.addEventListener("click", (function(A) { + OA(A) + } + )), + "" === KA.style.display || "none" === KA.style.display ? (DA(), + KA.style.display = "flex") : KA.style.display = "none", + kA.style.display = "none", + OA(A) + } + )), + RA.addEventListener("click", (function(A) { + kA.addEventListener("click", (function(A) { + OA(A) + } + )), + kA.style.display = "none" === kA.style.display ? "block" : "none", + OA(A) + } + )), + NA.addEventListener("click", (function(e) { + DA(); + var t = document.getElementById("Fullscreen" + i); + o.fullScreen ? (o.fullScreen = !1, + Wh.exitFullScreen(), + t.className = "fullScreen", + t.title = "全屏显示") : (o.fullScreen = !0, + Wh.fullScreen(A.viewportDiv), + t.className = "cancelFullScreen", + t.title = "取消全屏") + } + )), + A.viewportDiv.focus() + } + , + this.createTool2 = function() { + var e = document.createElement("div"); + e.id = "my-tool2" + i, + e.className = "yj-tool2", + A.viewerImpl.domElement.appendChild(e), + this.toolbarTop = e; + var n = document.createElement("div"); + n.className = "yj-group", + e.appendChild(n); + var a = document.createElement("button"); + a.className = "yj-but", + a.title = "模型树", + a.id = "modelTree" + i; + var s = document.createElement("div"); + s.classList.add("yj-icon"), + s.classList.add("modelTree-icon"), + a.appendChild(s), + t.options.modelTree && n.appendChild(a); + var l = document.createElement("button"); + l.className = "yj-but", + l.title = "查询", + l.id = "search" + i; + var c = document.createElement("div"); + c.classList.add("yj-icon"), + c.classList.add("search-icon"), + l.appendChild(c); + var h = document.createElement("div"); + h.className = "yj-group", + e.appendChild(h); + var d = document.createElement("button"); + d.className = "yj-but", + d.title = "添加标签", + d.id = "mark" + i; + var p = document.createElement("div"); + p.classList.add("yj-icon"), + p.classList.add("label-icon"), + d.appendChild(p), + t.options.mark && (h.appendChild(d), + t.mark = new Hd(r,this)); + for (var g = document.querySelectorAll("button"), u = 0; g.length > u; u += 1) + g[u].addEventListener("mouseover", (function(A) { + this.style.backgroundColor = "#1f89de" + } + )), + g[u].addEventListener("mouseout", (function(A) { + this.id.split(i).length > 1 && (o[this.id.split(i)[0]] || (this.style.backgroundColor = "")) + } + )); + if (A.viewerImpl.modelManager.addEventListener(Rc.ON_CLICK_PICK, (function(e) { + o.attribute && (e.intersectInfo ? t.showComponentAttribute(A.viewerImpl.modelManager.sceneState.getSelection()[0]) : t.showComponentAttribute()) + } + )), + t.options.snapshot) { + xh.append(h, ''); + var f = document.getElementById("snapshot" + i); + f.addEventListener("mouseover", (function(A) { + this.style.backgroundColor = "#1f89de" + } + )), + f.addEventListener("mouseout", (function(A) { + o[this.id.split(i)[0]] || (this.style.backgroundColor = "") + } + )), + t.snapshot = new Zd(r,this) + } + if (t.options.postil) { + xh.append(h, ''); + var m = document.getElementById("postil" + i); + m.addEventListener("mouseover", (function(A) { + this.style.backgroundColor = "#1f89de" + } + )), + m.addEventListener("mouseout", (function(A) { + o[this.id.split(i)[0]] || (this.style.backgroundColor = "") + } + )), + t.postil = new Jd(r,this) + } + A.viewportDiv.focus() + } + , + this.showComponentAttribute = (s = "", + l = document.getElementById("tab-properties" + i), + c = function(A, e, t) { + var i = document.createElement("tr"); + t.parentNode.appendChild(i), + i.appendChild(document.createElement("td")), + i.querySelector("td").innerHTML = A; + var o = document.createElement("td") + , n = null === e ? "" : e + , r = document.createElement("span"); + r.classList.add("value"), + r.classList.add("nonEditable"), + r.innerHTML = n, + o.appendChild(r), + i.appendChild(o) + } + , + h = function(A, e) { + var t = document.createElement("tr"); + t.className = "sx-active", + l.querySelector("table tbody").appendChild(t); + var i = document.createElement("td"); + for (var o in i.colSpan = 2, + i.style.fontSize = "14px", + t.appendChild(i), + i.appendChild(document.createElement("b")), + i.firstElementChild.innerHTML = A, + e) + c(o, e[o], t) + } + , + function(e) { + if (l = document.querySelector("#tab-properties" + i), + e !== s) { + if (void 0 === e) { + var o = l.querySelectorAll("table tbody tr"); + l.querySelector("table tbody").removeChild(o[0]), + l.querySelector("table tbody").innerHTML = ""; + var n = document.createElement("tr"); + n.className = "noprop"; + var r = document.createElement("td"); + return r.setAttribute("colspan", "2"), + r.innerHTML = "未选中构件", + n.appendChild(r), + l.querySelector("table tbody").appendChild(n), + void (s = e) + } + s = e, + l.querySelector("table tbody").innerHTML = ""; + var a = A.viewerImpl.getModelByComponentKey(s) + , d = ""; + a && (d = a.projectKey), + t.getComponentAttribute({ + key: s, + projectKey: d + }, (function(A) { + if (l.querySelector("table tbody").innerHTML = "", + null === A) { + var e = document.createElement("tr"); + e.className = "noprop"; + var t = document.createElement("td"); + return t.innerHTML = "没有属性", + e.appendChild(t), + void l.querySelector("table tbody").appendChild(e) + } + if (void 0 === A) { + var i = document.createElement("tr"); + i.className = "noprop"; + var o = document.createElement("td"); + return o.innerHTML = "属性加载失败", + i.appendChild(o), + void l.querySelector("table tbody").appendChild(i) + } + var n = document.createElement("tr"); + n.className = "noprop"; + var r = document.createElement("th"); + n.appendChild(r); + var a = document.createElement("span"); + a.classList.add("value"), + a.classList.add("nonEditable"), + a.innerHTML = "名称", + r.appendChild(a); + var s = document.createElement("th"); + n.appendChild(s); + var d = document.createElement("span"); + d.classList.add("value"), + d.classList.add("nonEditable"), + d.innerHTML = "值", + s.appendChild(d), + l.querySelector("table tbody").appendChild(n); + var p = A; + for (var g in p) + "object" === lc(p[g]) ? h(g, p[g]) : "string" == typeof p[g] && c(g, p[g], n) + } + )) + } + } + ), + this.undoOrRedo = function(A) { + t.maxUndoListLength > A || (A = t.maxUndoListLength), + 0 > A && (A = 0); + var e = document.querySelectorAll(".history_li"); + if (d > A) + for (var i = d; i >= A; i -= 1) { + p(i + 1); + var o = e[i]; + o && (o.classList.remove("history_redo"), + o.classList.add("history_undo")) + } + if (A > d) + for (var n = d; A > n; n += 1) { + g(n); + var r = e[n]; + r && (r.classList.remove("history_undo"), + r.classList.add("history_redo")) + } + d = A + } + , + this.clearUndoList = function() { + d = 0, + t.undoList = [], + t.redoList = []; + var A = document.querySelector(".history"); + if (A) { + A.innerHTML = ""; + var e = document.createElement("span"); + e.innerText = "历史记录", + e.style.cssText += "color:white", + A.appendChild(e) + } + } + , + this.push = function(A) { + if (t.undoList.length > d && (t.undoList.splice(d, t.maxUndoListLength), + t.redoList.splice(d, t.maxUndoListLength)), + t.maxUndoListLength > t.undoList.length || (t.undoList.shift(), + t.redoList.shift(), + d -= 1), + t.maxUndoListLength - (d += 1), + t.undoList.push(A), + t.redoList.push(A), + t.options.restore) { + var e = document.querySelector(".history"); + if (e) { + e.innerHTML = ""; + var i = document.createElement("span"); + i.innerText = "历史记录", + i.style.cssText += "color:white", + e.appendChild(i); + for (var o = 0; d > o; o += 1) { + var n = document.createElement("li"); + n.innerHTML = t.undoList[o].type, + n.undoNum = o + 1, + n.title = "点击执行撤销或重做", + n.className = "history_li history_redo", + n.addEventListener("click", u), + e.appendChild(n) + } + } + } + } + , + A.getViewerImpl().getModelManager().addEventListener(Rc.ON_RECTPICK_ADD, (function(A) { + A.list && t.push({ + type: "框选添加", + data: A.list + }) + } + )), + A.getViewerImpl().getModelManager().addEventListener(Rc.ON_RECTPICK_REMOVE, (function(A) { + A.list && t.push({ + type: "框选移除", + data: A.list + }) + } + )), + this.getComponentAttribute = function(e, t) { + A.getComponentsAttributeByKey(e.key, (function(A) { + A && t(A.attribute) + } + )) + } + , + this.exitMeasure = function() { + if (o.measurement) { + var A = document.getElementById("measurement" + i); + A && xh.fireEvent(A, "click") + } + } + , + this.exitRoam = function() { + if (o.roam) { + var A = document.getElementById("roam" + i); + A && (xh.fireEvent(A, "click"), + o.roam = !1) + } + } + } + , _d = function(A) { + return new Promise((function(e, t) { + var i = Object.assign({ + type: "get", + cache: !0, + headers: { + "Content-type": "application/x-www-form-urlencoded" + }, + data: null, + async: !0, + success: null, + error: null, + beforeSend: null, + requestQueue: void 0 + }, A) + , o = null; + for (var n in (o = window.XMLHttpRequest ? new XMLHttpRequest : new ActiveXObject("Microsoft.XMLHTTP")).onreadystatechange = function() { + if (4 === o.readyState || "4" === o.readyState) { + var A = o.status; + A >= 200 && 300 > A || 0 === A ? (i.success && i.success(o.response || o.responseText, "" === o.responseType || "document" === o.responseType && o.responseXML), + e(o.response || o.responseText, "" === o.responseType || "document" === o.responseType && o.responseXML)) : (i.error && i.error(A, o.response || o.responseText, "" === o.responseType || "document" === o.responseType && o.responseXML), + t(A, o.response || o.responseText, "" === o.responseType || "document" === o.responseType && o.responseXML)) + } + } + , + o.open(i.type, i.url, i.async), + i.headers) + o.setRequestHeader(n, i.headers[n]); + i.responseType && (o.responseType = i.responseType), + i.requestQueue ? i.requestQueue.addRequest(o, i.data) : i.beforeSend ? i.beforeSend(o, (function() { + o.send(i.data) + } + )) : o.send(i.data) + } + )) + } + , $d = function() { + var A = 0 + , e = document.createElement("div"); + function t(A) { + return e.appendChild(A.dom), + A + } + function i(t) { + for (var i = 0; e.children.length > i; i++) + e.children[i].style.display = i === t ? "block" : "none"; + A = t + } + e.style.cssText = "position:fixed;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000", + e.addEventListener("click", (function(t) { + t.preventDefault(), + i(++A % e.children.length) + } + ), !1); + var o = (performance || Date).now() + , n = o + , r = 0 + , a = t(new $d.Panel("FPS","#0ff","#002")) + , s = t(new $d.Panel("MS","#0f0","#020")); + if (self.performance && self.performance.memory) + var l = t(new $d.Panel("MB","#f08","#201")); + return i(0), + { + REVISION: 16, + dom: e, + addPanel: t, + showPanel: i, + begin: function() { + o = (performance || Date).now() + }, + end: function() { + r++; + var A = (performance || Date).now(); + if (s.update(A - o, 200), + A >= n + 1e3 && (a.update(1e3 * r / (A - n), 100), + n = A, + r = 0, + l)) { + var e = performance.memory; + l.update(e.usedJSHeapSize / 1048576, e.jsHeapSizeLimit / 1048576) + } + return A + }, + update: function() { + o = this.end() + }, + domElement: e, + setMode: i + } + }; + $d.Panel = function(A, e, t) { + var i = 1 / 0 + , o = 0 + , n = Math.round + , r = n(window.devicePixelRatio || 1) + , a = 80 * r + , s = 48 * r + , l = 3 * r + , c = 2 * r + , h = 3 * r + , d = 15 * r + , p = 74 * r + , g = 30 * r + , u = document.createElement("canvas"); + u.width = a, + u.height = s, + u.style.cssText = "width:80px;height:48px"; + var f = u.getContext("2d"); + return f.font = "bold " + 9 * r + "px Helvetica,Arial,sans-serif", + f.textBaseline = "top", + f.fillStyle = t, + f.fillRect(0, 0, a, s), + f.fillStyle = e, + f.fillText(A, l, c), + f.fillRect(h, d, p, g), + f.fillStyle = t, + f.globalAlpha = .9, + f.fillRect(h, d, p, g), + { + dom: u, + update: function(s, m) { + i = Math.min(i, s), + o = Math.max(o, s), + f.fillStyle = t, + f.globalAlpha = 1, + f.fillRect(0, 0, a, d), + f.fillStyle = e, + f.fillText(n(s) + " " + A + " (" + n(i) + "-" + n(o) + ")", l, c), + f.drawImage(u, h + r, d, p - r, g, h, d, p - r, g), + f.fillRect(h + p - r, d, r, g), + f.fillStyle = t, + f.globalAlpha = .9, + f.fillRect(h + p - r, d, r, n((1 - s / m) * g)) + } + } + } + ; + var Ap = function(A) { + this.viewer = A + }; + Ap.prototype = { + construtor: Ap, + destroy: function() { + this.viewer = null + }, + update: function(A) { + var e = this.getControl(); + e && (e.update(A), + this.viewer.render()) + }, + getControl: function() { + for (var A = this.viewer.controlManager.tools, e = 0; A.length > e; e += 1) + if (A[e].getName() === Pc.CLIP_BY_BOX) + return A[e]; + return null + }, + setSectionBox: function(A, e) { + this.getControl().setSectionBox(A, e) + }, + toggle: function(A, e) { + this.getControl().toggle(A, e) + }, + setVisible: function(A) { + this.getControl().visible(A) + }, + setRotatable: function(A) { + this.getControl().rotatable(A) + }, + enablePick: function(A) { + this.getControl().enablePick = A + }, + saveState: function() { + return this.getControl().store() + }, + loadState: function(A) { + this.getControl().restore(A) + }, + reset: function() { + this.viewer.getScene().resetClipPlanes() + }, + recalculate: function() { + return this.viewer.getFilter().getVisibleComponentsBbox() + }, + setProcess: function(A, e) { + this.getControl().setProcess(A, e) + }, + getProcess: function(A) { + return this.getControl().getProcess(A) + } + }; + var ep = function(A, e) { + H.call(this); + var t = { + priority: 5, + pickableType: Qc.UnPickable, + globalSpace: !1, + hoverEnabled: !1 + }; + this.name = A; + var i = uh.extend({}, t, e); + this.priority = i.priority, + this.pickableType = i.pickableType, + this.globalSpace = i.globalSpace, + this.boundingBox = null, + this.hoverEnabled = i.hoverEnabled + }; + (ep.prototype = Object.create(H.prototype)).constructor = ep, + Object.assign(ep, Ld), + ep.prototype.removeByName = function(A) { + for (var e = this.children, t = 0, i = e.length; i > t; t += 1) + if (e[t].name === A) { + e.splice(t, 1); + break + } + } + , + ep.prototype.clear = function() { + this.children.length = 0 + } + , + ep.prototype.isGlobalSpace = function() { + return this.globalSpace + } + , + ep.prototype.hasChild = function(A) { + for (var e = 0, t = this.children.length; t > e; e += 1) + if (this.children[e].name === A) + return !0; + return !1 + } + , + ep.prototype.isPickable = function() { + return this.pickableType !== Qc.UnPickable + } + ; + var tp = function(A) { + this.viewer = A, + this.viewportDIV = A.viewerImpl.getRenderer().domElement.parentElement, + this.creatSVG = function() { + document.getElementById("svgid" + this.viewer.getViewerImpl().uuid) || (this.svg = document.createElementNS("http://www.w3.org/2000/svg", "svg"), + this.svg.setAttribute("id", "svgid" + this.viewer.getViewerImpl().uuid), + this.svg.setAttribute("style", "width: 100%; height: 100%; position:absolute; left: 0; top:0;"), + this.viewportDIV.appendChild(this.svg)) + } + , + this.creatRect = function(A) { + var e = A.data.left + , t = A.data.top + , i = A.data.width + , o = A.data.height + , n = A.data.visible; + this.deleteRect(), + n && (this.rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"), + this.rect.setAttribute("id", "rectid" + this.viewer.getViewerImpl().uuid), + this.rect.setAttribute("x", e), + this.rect.setAttribute("y", t), + this.rect.setAttribute("width", i), + this.rect.setAttribute("height", o), + this.rect.setAttribute("style", "fill:#0DFFB2;stroke-width:2;stroke:rgb(0,255,0);fill-opacity:0.1;stroke-opacity:0.9"), + this.svg.appendChild(this.rect)) + } + , + this.deleteRect = function() { + var A = document.getElementById("rectid" + this.viewer.getViewerImpl().uuid); + A && this.svg.removeChild(A) + } + , + this.deleteSVG = function() { + if (this.svg) { + var A = document.getElementById("rectid" + this.viewer.getViewerImpl().uuid); + A && this.svg.removeChild(A), + this.viewportDIV.removeChild(this.svg) + } + } + , + this.creatMoveCircle = function(A) { + var e = A.x + , t = A.y; + this.circleMov = document.createElementNS("http://www.w3.org/2000/svg", "circle"), + this.circleMov.setAttribute("id", "circleMove" + this.viewer.getViewerImpl().uuid), + this.circleMov.setAttribute("cx", e), + this.circleMov.setAttribute("cy", t), + this.circleMov.setAttribute("r", "5"), + this.circleMov.setAttribute("style", "fill:#500A11;stroke-width:2;stroke:rgb(0,255,0);fill-opacity:0.9;stroke-opacity:0.9"), + this.svg.appendChild(this.circleMov) + } + , + this.changeMoveCircleStyle = function(A) { + var e = document.getElementById("circleMove" + this.viewer.getViewerImpl().uuid); + e.setAttribute("cx", A[0]), + e.setAttribute("cy", A[1]), + e.setAttribute("style", "fill:#00ff00;stroke-width:1;stroke:rgb(60,240,240);fill-opacity:0.9;stroke-opacity:0.9") + } + , + this.deleteCircle = function() { + var A = document.getElementById("circleMove" + this.viewer.getViewerImpl().uuid); + A && this.svg.removeChild(A) + } + , + this.createMoveLine = function(A, e) { + var t = A.x + , i = A.y + , o = e.x + , n = e.y; + this.deleteMoveLine(), + this.moveline = document.createElementNS("http://www.w3.org/2000/svg", "line"), + this.moveline.setAttribute("id", "moveLine" + this.viewer.getViewerImpl().uuid), + this.moveline.setAttribute("class", "moveLine"), + this.moveline.setAttribute("x1", t), + this.moveline.setAttribute("y1", i), + this.moveline.setAttribute("x2", o), + this.moveline.setAttribute("y2", n), + this.moveline.setAttribute("stroke", "#0AEA06"), + this.moveline.setAttribute("stroke-width", "2"), + this.svg.appendChild(this.moveline) + } + , + this.deleteMoveLine = function() { + var A = document.getElementById("moveLine" + this.viewer.getViewerImpl().uuid); + A && this.svg.removeChild(A) + } + , + this.creatPickCircle = function(A, e) { + var t = A.x + , i = A.y; + this.circlePic = document.createElementNS("http://www.w3.org/2000/svg", "circle"), + this.circlePic.setAttribute("id", "circlePick" + this.viewer.getViewerImpl().uuid + e), + this.circlePic.setAttribute("class", "circlePick"), + this.circlePic.setAttribute("cx", t), + this.circlePic.setAttribute("cy", i), + this.circlePic.setAttribute("r", "5"), + this.circlePic.setAttribute("style", "fill:#00ff00;stroke-width:1;stroke:rgb(60,240,240);fill-opacity:0.9;stroke-opacity:0.9"), + this.svg.appendChild(this.circlePic) + } + , + this.creatLine = function(A, e, t, i) { + var o = A.x + , n = A.y + , r = e.x + , a = e.y; + this.line = document.createElementNS("http://www.w3.org/2000/svg", "line"), + this.line.setAttribute("id", "pickline" + this.viewer.getViewerImpl().uuid + i), + this.line.setAttribute("class", "pickline"), + this.line.setAttribute("x1", o), + this.line.setAttribute("y1", n), + this.line.setAttribute("x2", r), + this.line.setAttribute("y2", a), + this.line.setAttribute("stroke", t), + this.line.setAttribute("stroke-width", "2"), + this.svg.appendChild(this.line) + } + , + this.deleteLineAndCircle = function() { + for (var A = this.svg.getElementsByClassName("pickline"), e = this.svg.getElementsByClassName("circlePick"); A.length; ) + this.svg.removeChild(A[A.length - 1]); + for (; e.length; ) + this.svg.removeChild(e[e.length - 1]) + } + }; + function ip(A, e) { + var t = A || 0 + , i = e || 0; + return t === i ? 0 : t > i ? 1 : -1 + } + function op(A, e) { + var t = A.split(".").map((function(A) { + return Number(A) || 0 + } + )) + , i = e.split(".").map((function(A) { + return Number(A) || 0 + } + )); + return 0 === (ip(t[0], i[0]) || ip(t[1], i[1]) || ip(t[2], i[2])) + } + function np(A, e) { + var t = A.split(".").map((function(A) { + return Number(A) || 0 + } + )) + , i = e.split(".").map((function(A) { + return Number(A) || 0 + } + )); + return (ip(t[0], i[0]) || ip(t[1], i[1]) || ip(t[2], i[2])) >= 0 + } + function rp(A, e) { + var t = A.split(".").map((function(A) { + return Number(A) || 0 + } + )) + , i = e.split(".").map((function(A) { + return Number(A) || 0 + } + )); + return (ip(t[0], i[0]) || ip(t[1], i[1]) || ip(t[2], i[2])) > 0 + } + function ap(A, e) { + return !np(A, e) + } + function sp(A, e) { + return !rp(A, e) + } + var lp = function(A, e) { + var i = this; + this.viewer = A, + this.preRotationHandle = e, + this.mouseButtons = { + LEFT: t.LEFT, + RIGHT: t.RIGHT + }, + this.visible = !0, + this.isAnimationFinish = !0, + this.pickedColor = 16763094, + this.width = 0, + this.height = 0, + this.isDisable = !1; + var o = null + , n = null + , r = 0 + , a = 1 + , l = 2 + , c = 220 + , h = 150 + , d = 80 + , p = 1 + , g = 2 + , u = 5 + , f = 6 + , m = 3 + , C = 4 + , v = "Home" + , I = "Bottom" + , E = "Top" + , B = "Left" + , x = "Right" + , S = "Front" + , w = "Back" + , M = "Bottom_Front" + , b = "Bottom_Back" + , U = "Bottom_Right" + , F = "Bottom_Left" + , K = "Top_Front" + , Q = "Top_Back" + , R = "Top_Right" + , T = "Top_Left" + , k = "LeftFront" + , D = "LeftBack" + , L = "RightFront" + , N = "RightBack" + , O = "Bottom_FrontRight" + , V = "Bottom_FrontLeft" + , G = "Bottom_BackLeft" + , P = "Bottom_BackRight" + , q = "Top_FrontRight" + , j = "Top_FrontLeft" + , H = "Top_BackLeft" + , W = "Top_BackRight" + , J = new Y + , z = new Ka(-h / 2,h / 2,h / 2,-h / 2,-h / 2,h / 2) + , Z = new Dd + , X = new Xi + , _ = new Xi + , $ = new Xi; + X.add(_), + X.add($), + this._cube = X; + var AA = !1 + , eA = !1 + , tA = new s + , iA = new s + , oA = new s + , nA = new s + , rA = !1 + , aA = "" + , sA = null + , lA = -1 + , cA = !1; + this.uninit = function() { + this.removeDomEventListeners(), + o && (o.removeChild(n.domElement), + o = null) + } + , + this.enable = function() { + o && n && !n.domElement.parentNode && (o.appendChild(n.domElement), + this.addDomEventListeners()) + } + , + this.disable = function() { + o && n && n.domElement.parentNode && (this.removeDomEventListeners(), + o.removeChild(n.domElement)) + } + ; + !function() { + var A = new ko({ + color: 0, + side: 1 + }) + , e = new De; + e.vertices.push(new y(-40,40,40), new y(40,40,40)); + var t = new Go(e,A); + $.add(t); + var i = new De; + i.vertices.push(new y(40,40,40), new y(40,40,-40)); + var o = new Go(i,A); + $.add(o); + var n = new De; + n.vertices.push(new y(40,40,-40), new y(-40,40,-40)); + var r = new Go(n,A); + $.add(r); + var a = new De; + a.vertices.push(new y(-40,40,-40), new y(-40,40,40)); + var s = new Go(a,A); + $.add(s); + var l = new De; + l.vertices.push(new y(-40,40,-40), new y(-40,-40,-40)); + var c = new Go(l,A); + $.add(c); + var h = new De; + h.vertices.push(new y(40,40,-40), new y(40,-40,-40)); + var d = new Go(h,A); + $.add(d); + var p = new De; + p.vertices.push(new y(40,40,40), new y(40,-40,40)); + var g = new Go(p,A); + $.add(g); + var u = new De; + u.vertices.push(new y(-40,40,40), new y(-40,-40,40)); + var f = new Go(u,A); + $.add(f); + var m = new De; + m.vertices.push(new y(-40,-40,40), new y(40,-40,40)); + var C = new Go(m,A); + $.add(C); + var v = new De; + v.vertices.push(new y(40,-40,40), new y(40,-40,-40)); + var I = new Go(v,A); + $.add(I); + var E = new De; + E.vertices.push(new y(40,-40,-40), new y(-40,-40,-40)); + var B = new Go(E,A); + $.add(B); + var x = new De; + x.vertices.push(new y(-40,-40,-40), new y(-40,-40,40)); + var S = new Go(x,A); + $.add(S); + var w = new Aa; + w.load(Pd.back, (function(A) { + var e = new Ue(new et(60,60),new jA({ + map: A, + color: 16777215, + side: 2 + })); + e.position.set(0, 40, 0), + e.rotation.x = .5 * Math.PI, + e.name = "Back", + _.add(e) + } + )), + w.load(Pd.front, (function(A) { + var e = new Ue(new et(60,60),new jA({ + map: A, + color: 16777215, + side: 2 + })); + e.position.set(0, -40, 0), + e.rotation.x = .5 * Math.PI, + e.name = "Front", + _.add(e) + } + )), + w.load(Pd.left, (function(A) { + var e = new Ue(new et(60,60),new jA({ + map: A, + color: 16777215, + side: 2 + })); + e.position.set(-40, 0, 0), + e.rotation.y = .5 * Math.PI, + e.rotation.x = .5 * Math.PI, + e.name = "Left", + _.add(e) + } + )), + w.load(Pd.right, (function(A) { + var e = new Ue(new et(60,60),new jA({ + map: A, + color: 16777215, + side: 2 + })); + e.position.set(40, 0, 0), + e.rotation.y = .5 * Math.PI, + e.rotation.x = .5 * Math.PI, + e.name = "Right", + _.add(e) + } + )), + w.load(Pd.top, (function(A) { + var e = new Ue(new et(60,60),new jA({ + map: A, + color: 16777215, + side: 2 + })); + e.position.set(0, 0, 40), + e.name = "Top", + _.add(e) + } + )), + w.load(Pd.bottom, (function(A) { + var e = new Ue(new et(60,60),new jA({ + map: A, + color: 16777215, + side: 2 + })); + e.position.set(0, 0, -40), + e.name = "Bottom", + _.add(e) + } + )); + var M = new Ne(10,60,10) + , b = new Ue(M,new jA({ + color: 16777215 + })); + b.position.set(35, 0, 35), + b.name = "Top_Front", + _.add(b); + var U = new Ue(M,new jA({ + color: 16777215 + })); + U.position.set(35, 0, -35), + U.name = "Bottom_Front", + _.add(U); + var F = new Ue(M,new jA({ + color: 16777215 + })); + F.position.set(-35, 0, 35), + F.name = "Top_Back", + _.add(F); + var K = new Ue(M,new jA({ + color: 16777215 + })); + K.position.set(-35, 0, -35), + K.name = "Bottom_Back", + _.add(K); + var Q = new Ne(60,10,10) + , R = new Ue(Q,new jA({ + color: 16777215 + })); + R.position.set(0, -35, 35), + R.name = "Top_Left", + _.add(R); + var T = new Ue(Q,new jA({ + color: 16777215 + })); + T.position.set(0, -35, -35), + T.name = "Bottom_Left", + _.add(T); + var k = new Ue(Q,new jA({ + color: 16777215 + })); + k.position.set(0, 35, 35), + k.name = "Top_Right", + _.add(k); + var D = new Ue(Q,new jA({ + color: 16777215 + })); + D.position.set(0, 35, -35), + D.name = "Bottom_Right", + _.add(D); + var L = new Ne(10,10,60) + , N = new Ue(L,new jA({ + color: 16777215 + })); + N.position.set(35, -35, 0), + N.name = "LeftFront", + _.add(N); + var O = new Ue(L,new jA({ + color: 16777215 + })); + O.position.set(35, 35, 0), + O.name = "RightFront", + _.add(O); + var V = new Ue(L,new jA({ + color: 16777215 + })); + V.position.set(-35, -35, 0), + V.name = "LeftBack", + _.add(V); + var G = new Ue(L,new jA({ + color: 16777215 + })); + G.position.set(-35, 35, 0), + G.name = "RightBack", + _.add(G); + var P = new Ne(10,10,10) + , q = new Ue(P,new jA({ + color: 16777215 + })); + q.position.set(35, -35, 35), + q.name = "Top_FrontLeft", + _.add(q); + var j = new Ue(P,new jA({ + color: 16777215 + })); + j.position.set(35, -35, -35), + j.name = "Bottom_FrontLeft", + _.add(j); + var H = new Ue(P,new jA({ + color: 16777215 + })); + H.position.set(35, 35, 35), + H.name = "Top_FrontRight", + _.add(H); + var Y = new Ue(P,new jA({ + color: 16777215 + })); + Y.position.set(35, 35, -35), + Y.name = "Bottom_FrontRight", + _.add(Y); + var W = new Ue(P,new jA({ + color: 16777215 + })); + W.position.set(-35, -35, 35), + W.name = "Top_BackLeft", + _.add(W); + var J = new Ue(P,new jA({ + color: 16777215 + })); + J.position.set(-35, -35, -35), + J.name = "Bottom_BackLeft", + _.add(J); + var z = new Ue(P,new jA({ + color: 16777215 + })); + z.position.set(-35, 35, 35), + z.name = "Top_BackRight", + _.add(z); + var Z = new Ue(P,new jA({ + color: 16777215 + })); + Z.name = "Bottom_BackRight", + Z.position.set(-35, 35, -35), + _.add(Z) + }(), + J.add(X); + var hA = function(A) { + eA = A; + for (var e = A ? .8 : 1, t = X.children, i = 0; t.length > i; i += 1) + for (var o = t[i].children, n = 0; o.length > n; n += 1) + o[n].material.transparent = A, + o[n].material.opacity = e + }; + hA(!1); + var dA = function() { + sA && sA.material.color.set(sA.currentColor), + sA = null + } + , pA = function(A) { + if (void 0 !== o) { + var e = xh.getDomOffsetToClient(o) + , t = new s; + if (t.x = A.x - e.left, + t.y = A.y - e.top, + t.x > 0 && i.width > t.x && t.y > 0 && i.height > t.y) + return nA.x = t.x / i.width * 2 - 1, + nA.y = -t.y / i.height * 2 + 1, + !0 + } + return !1 + } + , gA = function() { + var A = new y(nA.x,nA.y,.5); + Z.setFromCamera(A, z); + var e, t = Z.intersectObjects(X.children[0].children); + t ? sA !== (e = t.object) && (sA && sA.material.color.set(sA.currentColor), + (sA = e).currentColor = sA.material.color.clone(), + "" !== sA.name && sA.material.color.set(i.pickedColor)) : dA() + }; + this.mouseUp = function(A) { + A.stopPropagation(); + var t = new s(A.clientX,A.clientY) + , o = pA(t); + return AA ? (AA = !1, + iA.set(t.x, t.y), + oA.subVectors(iA, tA), + this.preRotationHandle && !this.preRotationHandle() || (this.viewer.viewerImpl.rotateCamera(oA), + tA.copy(iA))) : o && A.button === i.mouseButtons.LEFT && sA && (lA = -1, + function(A) { + var e = -1; + switch (A) { + case v: + e = Uc.Home; + break; + case E: + e = Uc.Top; + break; + case I: + e = Uc.Bottom; + break; + case M: + e = Uc.BottomFront; + break; + case b: + e = Uc.BottomBack; + break; + case U: + e = Uc.BottomRight; + break; + case F: + e = Uc.BottomLeft; + break; + case O: + e = Uc.BottomFrontRight; + break; + case V: + e = Uc.BottomFrontLeft; + break; + case G: + e = Uc.BottomBackLeft; + break; + case P: + e = Uc.BottomBackRight; + break; + case K: + e = Uc.TopFront; + break; + case Q: + e = Uc.TopBack; + break; + case R: + e = Uc.TopRight; + break; + case T: + e = Uc.TopLeft; + break; + case q: + e = Uc.TopFrontRight; + break; + case j: + e = Uc.TopFrontLeft; + break; + case H: + e = Uc.TopBackLeft; + break; + case W: + e = Uc.TopBackRight; + break; + case S: + e = Uc.Front; + break; + case w: + e = Uc.Back; + break; + case B: + e = Uc.Left; + break; + case x: + e = Uc.Right; + break; + case k: + e = Uc.FrontLeft; + break; + case D: + e = Uc.BackLeft; + break; + case L: + e = Uc.FrontRight; + break; + case N: + e = Uc.BackRight + } + lA = e + }(sA.name), + -1 !== lA && (e(lA), + null != lA && i.viewer.viewerImpl.rotateCameraByViewCubeSide(lA))), + o + } + , + this.mouseMove = function(A) { + A.stopPropagation(); + var e = !1 + , t = new s(A.clientX,A.clientY) + , i = pA(t); + if (AA) + iA.set(t.x, t.y), + oA.subVectors(iA, tA), + this.preRotationHandle && !this.preRotationHandle() || (this.viewer.viewerImpl.rotateCamera(oA), + tA.copy(iA)); + else if (i) { + if (eA && (hA(!1), + e = !0), + gA(), + sA) { + if ("" !== sA.name) { + var o = sA.name; + aA !== o && (aA = o, + rA = !0, + e = !0) + } + } else + "" !== aA && (aA = "", + rA = !1, + e = !0); + e && this.render(), + cA = !0 + } else + cA && (cA = !1, + rA && (dA(), + rA = !1, + e = !0), + e && this.render()); + return i + } + , + this.mouseDown = function(A) { + A.preventDefault(), + A.stopPropagation(); + var e = new s(A.clientX,A.clientY) + , t = pA(e); + return t && A.button === i.mouseButtons.LEFT && (AA = !1), + t + } + , + this.onMouseDownBinded = this.mouseDown.bind(this), + this.onMouseMoveBinded = this.mouseMove.bind(this), + this.onMouseUpBinded = this.mouseUp.bind(this), + this.addDomEventListeners = function() { + o && (o.addEventListener("contextmenu", (function(A) { + A.preventDefault() + } + ), !1), + o.addEventListener("mousedown", this.onMouseDownBinded, !1), + window.addEventListener("mousemove", this.onMouseMoveBinded, !1), + o.addEventListener("mouseup", this.onMouseUpBinded, !1)) + } + , + this.removeDomEventListeners = function() { + o && (o.removeEventListener("contextmenu", (function(A) { + A.preventDefault() + } + ), !1), + o.removeEventListener("mousedown", this.onMouseDownBinded, !1), + window.removeEventListener("mousemove", this.onMouseMoveBinded, !1), + window.removeEventListener("mouseup", this.onMouseUpBinded, !1)) + } + ; + var uA = function(A) { + switch (A) { + case r: + i.width = c, + i.height = c; + break; + case a: + i.width = h, + i.height = h; + break; + case l: + default: + i.width = d, + i.height = d + } + o.style.width = i.width + "px", + o.style.height = i.height + "px" + }; + this.resize = function(A, e, t) { + uA(200 > A || t ? l : a), + n.setSize(this.width, this.height) + } + ; + this.init = function(A) { + (function(A) { + A.style.position = "absolute", + A.style.display = "block", + A.style.outline = "0", + A.style.right = "52px", + A.style.top = "0px", + A.style.opacity = ".6", + A.style.display = "flex", + A.style.webkitTransition = "opacity .2s ease", + A.style.mozTransition = "opacity .2s ease", + A.style.msTransform = "opacity .2s ease", + A.style.oTransform = "opacity .2s ease", + A.style.transition = "opacity .2s ease" + } + )(o = document.createElement("div")), + A.appendChild(o), + n = new $i({ + antialias: !0, + alpha: !0, + preserveDrawingBuffer: !0 + }), + o.appendChild(n.domElement), + this.resize(A.offsetWidth, A.offsetHeight, this.viewer.viewerImpl.isMobile), + this.addDomEventListeners() + } + ; + var fA = function(A, e, t) { + return A > e ? t >= A - e : t >= e - A + }; + this.render = function() { + if (this.visible && !this.isDisable && n) { + var A = this.viewer.viewerImpl.getActiveCameraInfo() + , e = A.quaternion.clone().inverse(); + this._cube.quaternion.copy(e), + -1 === lA && (lA = function(A, e) { + var t = A.clone(); + t.normalize(); + var i = e.clone(); + if (i.normalize(), + fA(t.x, 0, 1e-4) && fA(t.y, -1, 1e-4) && fA(t.z, 0, 1e-4) && fA(i.x, 0, 1e-4) && fA(i.y, 0, 1e-4) && fA(i.z, -1, 1e-4)) + return p; + if (fA(t.x, 0, 1e-4) && fA(t.y, 1, 1e-4) && fA(t.z, 0, 1e-4)) { + if (fA(i.x, 0, 1e-4) && fA(i.y, 0, 1e-4) && fA(i.z, 1, 1e-4)) + return g; + if (fA(i.x, 1, 1e-4) && fA(i.y, 0, 1e-4) && fA(i.z, 0, 1e-4)) + return g + } + return fA(t.x, 0, 1e-4) && fA(t.y, 0, 1e-4) && fA(t.z, -1, 1e-4) && fA(i.x, 0, 1e-4) && fA(i.y, 1, 1e-4) && fA(i.z, 0, 1e-4) ? u : fA(t.x, 0, 1e-4) && fA(t.y, 0, 1e-4) && fA(t.z, 1, 1e-4) && fA(i.x, 0, 1e-4) && fA(i.y, 1, 1e-4) && fA(i.z, 0, 1e-4) ? f : fA(t.x, -1, 1e-4) && fA(t.y, 0, 1e-4) && fA(t.z, 0, 1e-4) && fA(i.x, 0, 1e-4) && fA(i.y, 1, 1e-4) && fA(i.z, 0, 1e-4) ? m : fA(t.x, 1, 1e-4) && fA(t.y, 0, 1e-4) && fA(t.z, 0, 1e-4) && fA(i.x, 0, 1e-4) && fA(i.y, 1, 1e-4) && fA(i.z, 0, 1e-4) ? C : -1 + }(A.dir, z.up)), + n.autoClear = !0, + n.render(J, z) + } + } + , + this.destroy = function() { + n.dispose(), + this.disable() + } + } + , cp = function(A, e, t, i, o) { + kd.call(this, Ec.PERSPECTIVE, { + width: e, + height: t, + fov: A, + near: i, + far: o + }), + this.realUp = this.up.clone(), + this.target = new y, + this.dirty = !1, + this.orthoScale = 1, + this.positionPlane = new EA, + this.projScreenMatrix = new M, + this.viewProjInverse = new M, + this.tempVector3 = new y, + this.frustum = new Ze + }; + (cp.prototype = Object.create(kd.prototype)).constructor = cp, + cp.prototype._updatePositionPlane = function() { + this.positionPlane.setFromNormalAndCoplanarPoint(this.getWorldDirection(new y), this.position) + } + , + cp.prototype._updateFrustum = function() { + this.frustum.setFromProjectionMatrix(this.projScreenMatrix) + } + , + cp.prototype.updateMVP = function() { + this.dirty && (null === this.parent && this.updateMatrixWorld(), + this.matrixWorldInverse.getInverse(this.matrixWorld), + this.projScreenMatrix.multiplyMatrices(this.projectionMatrix, this.matrixWorldInverse), + this.viewProjInverse.getInverse(this.projScreenMatrix), + this._updateFrustum(), + this._updatePositionPlane(), + this.dirty = !1) + } + , + cp.prototype.getFrustum = function() { + return this.dirty && this.updateMVP(), + this.frustum + } + , + cp.prototype.lookAtEx = function(A, e, t, i) { + var o = new y; + o.copy(e), + void 0 !== i && "number" == typeof i && o.setLength(i), + this.position.subVectors(A, o), + this.up.copy(t), + this.lookAt(A), + this.realUp.copy(t), + this.target.copy(A), + this.dirty = !0 + } + , + cp.prototype.lookAtEXForTargetPositionUp = function(A, e, t) { + this.position.copy(e), + this.up = t, + this.lookAt(A), + this.realUp = t.clone(), + this.target = A.clone(), + this.dirty = !0 + } + , + cp.prototype.clone = function() { + var A = new cp(2 * this.right,2 * this.top,this.fov,this.near,this.far); + return A.position.copy(this.position), + A.quaternion.copy(this.quaternion), + A.scale.copy(this.scale), + A.up.copy(this.up), + A.realUp.copy(this.realUp), + A.target.copy(this.target), + A.aspect = this.aspect, + A.fov = this.fov, + A.near = this.near, + A.far = this.far, + A.left = this.left, + A.right = this.right, + A.top = this.top, + A.bottom = this.bottom, + A.zoom = this.zoom, + A.isPerspective = this.isPerspective, + A.updateProjectionMatrix(), + A.updateMVP(), + A + } + , + cp.prototype.copy = function(A) { + return kd.prototype.copy.call(this, A), + this.realUp.copy(A.realUp), + this.orthoScale = A.orthoScale, + this.dirty = A.dirty, + this.updateProjectionMatrix(), + this.updateMVP(), + this + } + , + cp.prototype.setStandardView = function(A, e) { + var t = null + , i = null; + e ? (t = e.getCenter(new y), + i = e.getSize(new y)) : t = new y(0,0,0); + var o = vc.SceneSize + , n = o / 2; + switch (i || (i = n), + A) { + case Uc.ISO: + var r = new y(-o,o,o) + , a = new y + , s = new y(0,0,0); + a.subVectors(s, r), + this.lookAtEx(t, a, H.DefaultUp); + break; + case Uc.Top: + this.lookAtEx(t, new y(0,0,-1), new y(0,1,0), i ? i.x : n); + break; + case Uc.Bottom: + this.lookAtEx(t, new y(0,0,1), new y(0,1,0), i ? i.x : n); + break; + case Uc.Front: + this.lookAtEx(t, new y(0,1,0), new y(0,0,1), i ? i.z : n); + break; + case Uc.Back: + this.lookAtEx(t, new y(0,-1,0), new y(0,0,1), i ? i.z : n); + break; + case Uc.Right: + this.lookAtEx(t, new y(-1,0,0), new y(0,0,1), i ? i.y : n); + break; + case Uc.Left: + this.lookAtEx(t, new y(1,0,0), new y(0,0,1), i ? i.y : n); + break; + case Uc.FrontRight: + this.lookAtEx(t, new y(-1,1,0), new y(0,0,1), i ? i.x + i.y : n); + break; + case Uc.FrontLeft: + this.lookAtEx(t, new y(1,1,0), new y(0,0,1), i ? i.x + i.y : n); + break; + case Uc.BackLeft: + this.lookAtEx(t, new y(1,-1,0), new y(0,0,1), i ? i.x + i.y : n); + break; + case Uc.BackRight: + this.lookAtEx(t, new y(-1,-1,0), new y(0,0,1), i ? i.x + i.y : n); + break; + case Uc.BottomFront: + this.lookAtEx(t, new y(0,1,1), new y(0,0,1), i ? i.x + i.z : n); + break; + case Uc.BottomBack: + this.lookAtEx(t, new y(0,-1,1), new y(0,0,1), i ? i.x + i.z : n); + break; + case Uc.BottomRight: + this.lookAtEx(t, new y(-1,0,1), new y(0,0,1), i ? i.y + i.z : n); + break; + case Uc.BottomLeft: + this.lookAtEx(t, new y(1,0,1), new y(0,0,1), i ? i.y + i.z : n); + break; + case Uc.BottomFrontRight: + this.lookAtEx(t, new y(-1,1,1), new y(0,0,1), i ? i.x + i.y + i.z : n); + break; + case Uc.BottomFrontLeft: + this.lookAtEx(t, new y(1,1,1), new y(0,0,1), i ? i.x + i.y + i.z : n); + break; + case Uc.BottomBackLeft: + this.lookAtEx(t, new y(1,-1,1), new y(0,0,1), i ? i.x + i.y + i.z : n); + break; + case Uc.BottomBackRight: + this.lookAtEx(t, new y(-1,-1,1), new y(0,0,1), i ? i.x + i.y + i.z : n); + break; + case Uc.TopFront: + this.lookAtEx(t, new y(0,1,-1), new y(0,0,1), i ? i.x + i.z : n); + break; + case Uc.TopBack: + this.lookAtEx(t, new y(0,-1,-1), new y(0,0,1), i ? i.x + i.z : n); + break; + case Uc.TopRight: + this.lookAtEx(t, new y(-1,0,-1), new y(0,0,1), i ? i.y + i.z : n); + break; + case Uc.TopLeft: + this.lookAtEx(t, new y(1,0,-1), new y(0,0,1), i ? i.y + i.z : n); + break; + case Uc.TopFrontRight: + this.lookAtEx(t, new y(-1,1,-1), new y(0,0,1), i ? i.x + i.y + i.z : n); + break; + case Uc.TopFrontLeft: + this.lookAtEx(t, new y(1,1,-1), new y(0,0,1), i ? i.x + i.y + i.z : n); + break; + case Uc.TopBackLeft: + this.lookAtEx(t, new y(1,-1,-1), new y(0,0,1), i ? i.x + i.y + i.z : n); + break; + case Uc.TopBackRight: + this.lookAtEx(t, new y(-1,-1,-1), new y(0,0,1), i ? i.x + i.y + i.z : n); + break; + case Uc.TopToRight: + this.lookAtEx(t, new y(0,1,0), new y(-1,0,0), n); + break; + case Uc.TopToBack: + this.lookAtEx(t, new y(0,1,0), new y(0,0,1), n); + break; + case Uc.TopToLeft: + this.lookAtEx(t, new y(0,1,0), new y(1,0,0), n); + break; + case Uc.TopToFront: + this.lookAtEx(t, new y(0,1,0), new y(0,0,-1), n); + break; + case Uc.BottomToRight: + this.lookAtEx(t, new y(0,-1,0), new y(-1,0,0), n); + break; + case Uc.BottomToBack: + this.lookAtEx(t, new y(0,-1,0), new y(0,0,-1), n); + break; + case Uc.BottomToFront: + this.lookAtEx(t, new y(0,-1,0), new y(0,0,1), n); + break; + case Uc.BottomToLeft: + this.lookAtEx(t, new y(0,-1,0), new y(1,0,0), n); + break; + case Uc.FrontToTop: + this.lookAtEx(t, new y(0,0,-1), new y(0,-1,0), n); + break; + case Uc.FrontToBottom: + this.lookAtEx(t, new y(0,0,-1), new y(0,1,0), n); + break; + case Uc.FrontToLeft: + this.lookAtEx(t, new y(0,0,-1), new y(1,0,0), n); + break; + case Uc.FrontToRight: + this.lookAtEx(t, new y(0,0,-1), new y(-1,0,0), n); + break; + case Uc.RightToTop: + this.lookAtEx(t, new y(-1,0,0), new y(0,-1,0), n); + break; + case Uc.RightToBottom: + this.lookAtEx(t, new y(-1,0,0), new y(0,1,0), n); + break; + case Uc.RightToFront: + this.lookAtEx(t, new y(-1,0,0), new y(0,0,-1), n); + break; + case Uc.RightToBack: + this.lookAtEx(t, new y(-1,0,0), new y(0,0,1), n); + break; + case Uc.BackToTop: + this.lookAtEx(t, new y(0,0,1), new y(0,-1,0), n); + break; + case Uc.BackToBottom: + this.lookAtEx(t, new y(0,0,1), new y(0,1,0), n); + break; + case Uc.BackToLeft: + this.lookAtEx(t, new y(0,0,1), new y(-1,0,0), n); + break; + case Uc.BackToRight: + this.lookAtEx(t, new y(0,0,1), new y(1,0,0), n); + break; + case Uc.LeftToTop: + this.lookAtEx(t, new y(1,0,0), new y(0,0,-1), n); + break; + case Uc.LeftTopBottom: + this.lookAtEx(t, new y(1,0,0), new y(0,1,0), n); + break; + case Uc.LeftTopBack: + this.lookAtEx(t, new y(1,0,0), new y(0,0,1), n); + break; + case Uc.LeftTopFront: + this.lookAtEx(t, new y(1,0,0), new y(0,0,-1), n); + break; + case Uc.Keep: + break; + default: + this.lookAtEx(t, new y(-1,-1,-1), new y(0,0,1), n) + } + return this.updateProjectionMatrix(), + t + } + , + cp.prototype.zoomToBox = function(A, e, t, i) { + t = t || 1, + e = -1 > (e = e || 0) ? -1 : e; + var o = new aA; + if (o.copy(A), + 0 !== e) { + var n = .5 * A.getSize(new y).length() + , r = new y; + r.subVectors(o.max, o.min).normalize(), + r.multiplyScalar(n * e), + o.expandByVector(r) + } + var s = i || this.getWorldDirection(new y) + , l = this.up + , c = this.aspect + , h = a.degToRad(.5 * this.fov) + , d = o.getSize(new y) + , p = o.getCenter(new y) + , g = .5 * d.length() / Math.sin(h) * t + , u = new y; + u.copy(s), + u.setLength(g); + var f = new y; + f.subVectors(p, u); + var m = new y; + m.crossVectors(s, l), + m.normalize(); + var C = new y; + C.crossVectors(s, m), + C.normalize(); + var v = new EA; + v.setFromNormalAndCoplanarPoint(m, f); + var I = new EA; + I.setFromNormalAndCoplanarPoint(C, f); + var E = 0 + , B = 0 + , x = 0 + , S = 0 + , w = 0 + , M = [new y, new y, new y, new y, new y, new y, new y, new y]; + M[0].set(o.min.x, o.min.y, o.min.z), + M[1].set(o.min.x, o.min.y, o.max.z), + M[2].set(o.min.x, o.max.y, o.min.z), + M[3].set(o.min.x, o.max.y, o.max.z), + M[4].set(o.max.x, o.min.y, o.min.z), + M[5].set(o.max.x, o.min.y, o.max.z), + M[6].set(o.max.x, o.max.y, o.min.z), + M[7].set(o.max.x, o.max.y, o.max.z); + for (var b = 0; 8 > b; b += 1) { + var U = new y; + U.subVectors(M[b], f); + var F = Math.abs(U.dot(s)) + , K = Math.abs(I.distanceToPoint(M[b])) + , Q = K * c + , R = Math.abs(v.distanceToPoint(M[b])) + , T = Math.max(K, R / c) + , k = Math.max(Q, R); + T > E && (E = T), + B && x && B * F / x >= T || (B = T, + x = F), + S && w && S * F / w >= k || (S = k, + w = F) + } + var D = S / Math.tan(h) + (g - w) + , L = B / Math.tan(h) + (g - x) + , N = 0; + if (N = 1 > c ? Math.max(D, L) : Math.min(D, L), + this.near > N) { + this.near = (N * N + .001 * N) / 16777.216 + } + if (u.copy(s).normalize().setLength(N), + f.subVectors(p, u), + this.position.copy(f), + this.lookAt(p), + this.target.copy(p), + !this.isPerspective) { + var O = Math.tan(this.fov * Math.PI / 180 / 2) * N; + this.orthoScale = O / E, + this.zoom = this.orthoScale + } + return this.updateProjectionMatrix(), + this.dirty = !0, + p + } + , + cp.prototype.computeRay = function(A, e, t) { + var i = new s; + if (void 0 === t) + i.x = window.innerWidth, + i.y = window.innerHeight; + else { + var o = t === document ? t.body : t; + i.x = o.offsetWidth, + i.y = o.offsetHeight + } + var n = new s; + n.x = A / i.x * 2 - 1, + n.y = -e / i.y * 2 + 1; + var r = new CA; + return this.isPerspective ? (r.origin.copy(this.position), + r.direction.set(n.x, n.y, .5).unproject(this).sub(this.position).normalize()) : (r.origin.set(n.x, n.y, -1).unproject(this), + r.direction.set(0, 0, -1).transformDirection(this.matrixWorld)), + r + } + , + cp.prototype.screenToWorld = function(A, e, t, i) { + var o = this.computeRay(A, e, t) + , n = this.getWorldDirection(new y).normalize() + , r = new EA(n); + return r.setFromNormalAndCoplanarPoint(n, i), + o.intersectPlane(r, i) + } + , + cp.prototype.getWorldFrustum = function(A) { + var e = new M + , t = new Ze + , i = this.clone() + , o = this.target + , n = o.clone().sub(this.position).length() + , r = new M; + r.getInverse(A); + var a = new M; + a.extractRotation(A); + var s = new f; + s.setFromRotationMatrix(a), + s.inverse(), + i.position.applyMatrix4(r); + var l = o.clone(); + l.applyMatrix4(r); + var c = l.clone().sub(i.position) + , h = c.length(); + return c.normalize(), + i.far = this.far * (h / n), + i.up.applyQuaternion(s).normalize(), + i.realUp.applyQuaternion(s).normalize(), + i.updateProjectionMatrix(), + i.updateMatrixWorld(), + e.getInverse(i.matrixWorld), + t.setFromMatrix((new M).multiplyMatrices(i.projectionMatrix, e)), + i = null, + t + } + , + cp.prototype.distanceFromWorldToDrawing = function(A, e) { + var t = this.position.clone() + , i = this.target.clone(); + i.subVectors(this.target, this.position), + i.normalize(); + var o = new M; + return o.getInverse(A), + i.add(t).applyMatrix4(o), + t.applyMatrix4(o), + i.sub(t), + i.normalize().multiplyScalar(e), + i.add(t).applyMatrix4(A), + i.sub(this.position), + i.length() + } + , + cp.drawingToWorld = function(A, e) { + var t = A.position.clone() + , i = A.target.clone() + , o = A.up.clone() + , n = new M; + return n.getInverse(e), + o.add(t), + o.applyMatrix4(n), + t.applyMatrix4(n), + i.applyMatrix4(n), + o.sub(t), + o.normalize(), + { + position: t, + target: i, + up: o + } + } + , + cp.worldToDrawing = function(A, e) { + var t = A.position.clone() + , i = A.target.clone() + , o = A.up.clone(); + return o.add(t), + o.applyMatrix4(e), + t.applyMatrix4(e), + i.applyMatrix4(e), + o.sub(t), + o.normalize(), + { + position: t, + target: i, + up: o + } + } + ; + var hp = function() { + var A = this + , e = null + , t = {} + , i = {} + , o = 1e3 + , n = null + , r = null + , a = null + , s = !1 + , l = null + , c = null + , h = null; + this.from = function(A) { + for (var i in e = A) + e.hasOwnProperty(i) && (t[i] = e[i]); + return this + } + , + this.to = function(A, e) { + return void 0 !== e && (o = e), + i = A, + this + } + , + this.onStart = function(A) { + return l = A, + this + } + , + this.onUpdate = function(A) { + return c = A, + this + } + , + this.onComplete = function(A) { + return h = A, + this + } + , + this.start = function(A, d) { + s = !1, + r && cancelAnimationFrame(r), + n = Date.now(), + a = d ? this.linearInterpolateForTargetPostionUp : this.interpolate, + r = requestAnimationFrame((function d() { + var p = t + , g = i + , u = Date.now(); + !1 === s && (null !== l && l(e), + s = !0); + var f = (u - n) / o; + e = a(p, g, f = f > 1 ? 1 : f), + 1 === f ? (cancelAnimationFrame(r), + null !== h && h(e)) : (r = requestAnimationFrame(d, A), + null !== c && c(e, f)) + } + ), A) + } + , + this.isAngleGreaterThanPi = function(A, e, t) { + var i = new y; + return i.crossVectors(A, e), + 0 > i.dot(t) + } + , + this.conicInterpolate = function(A, e, t, i) { + var o = -e.angleTo(A) * i + , n = new y; + n.crossVectors(e, A).normalize(); + var r = new f; + r.setFromAxisAngle(n, o), + t.copy(A), + t.applyQuaternion(r) + } + , + this.quaternionInterpolate = function(A, e, t, i, o) { + var n = new f(A.x,A.y,A.z,1).normalize() + , r = new f(e.x,e.y,e.z,1).normalize() + , a = new f(0,0,0,1) + , s = new f(0,0,0,1) + , l = new y; + l.crossVectors(A, t).normalize(), + a.set(l.x, l.y, l.z, 1).normalize(); + .5 > o ? (f.slerp(n, a, s, 2 * o), + i.set(s.x, s.y, s.z)) : (f.slerp(a, r, s, 2 * (o - .5)), + i.set(s.x, s.y, s.z)) + } + , + this.slerpInterpolate = function(A, e, t, i, o, n) { + var r = A.dot(e); + r > n ? i.copy(e) : n < Math.abs(r) ? this.quaternionInterpolate(A, e, t, i, o) : this.conicInterpolate(A, e, i, o), + i.normalize() + } + , + this.linearInterpolate = function(A, e, t, i, o) { + if (A.equals(e)) + t.copy(e); + else { + var n = new y(1,0,0) + , r = new y(0,0,1) + , a = new y + , s = A.dot(e); + s > o ? t.copy(e) : -s > o ? (o > Math.abs(A.dot(r)) ? a.crossVectors(A, r).normalize() : a.crossVectors(A, n).normalize(), + .5 > i ? t.lerpVectors(A, a, 2 * i) : t.lerpVectors(a, e, 2 * (i - .5))) : t.lerpVectors(A, e, i), + t.normalize() + } + } + , + this.linearInterpolatePosition = function(A, e, t, i) { + t.lerpVectors(A, e, i) + } + , + this.sphericalInterpolate = function(A, e, t, i, o, n) { + var r = A.clone().sub(e) + , a = t.clone().sub(i) + , s = new Os; + s.setFromVector3(r); + var l = new Os; + l.setFromVector3(a); + var c = s.theta + (l.theta - s.theta) * n + , h = s.phi + (l.phi - s.phi) * n + , d = r.length() + , p = new Os; + p.set(d, h, c); + var g = new y; + g.setFromSpherical(p), + o.copy(g).multiplyScalar(-1) + } + , + this.interpolate = function(e, t, i) { + var o = new y + , n = new y + , r = new y + , a = new y + , s = e.animTarget + , l = e.animUp + , c = e.animFocal + , h = t.animTarget + , d = t.animUp + , p = t.animFocal; + return A.sphericalInterpolate(e.animPos, s, t.animPos, h, o, i), + A.linearInterpolate(l, d, n, i, .9995), + A.linearInterpolatePosition(s, h, r, i), + A.linearInterpolatePosition(c, p, a, i), + { + animDir: o, + animUp: n, + animFocal: a, + animTarget: r + } + } + , + this.linearInterpolateForTargetPostionUp = function(e, t, i) { + var o = new y + , n = new y + , r = new y + , a = e.animTarget + , s = e.animPosition + , l = t.animTarget + , c = t.animPosition; + return A.linearInterpolate(e.animUp, t.animUp, n, i, .9995), + A.linearInterpolatePosition(a, l, r, i), + A.linearInterpolatePosition(s, c, o, i), + { + animPosition: o, + animUp: n, + animTarget: r + } + } + } + , dp = function() { + var A = 800 + , e = 14 + , t = new hp; + this.setDuration = function(e) { + A = e + } + , + this.getDuration = function() { + return A + } + , + this.setFrameTime = function(A) { + e = A + } + , + this.setStandardView = function(i, o, n, r, a, s) { + var l = o.camera + , c = l.position.clone() + , h = l.target.clone() + , d = l.getWorldDirection(new y); + d.normalize(); + var p = new y; + p.copy(l.realUp || l.up), + p.normalize(); + var g = new y(l.position.clone().sub(h).length(),0,0) + , u = l.setStandardView(i, n); + u = o.camera.zoomToBox(n, r); + var f = l.position.clone() + , m = l.getWorldDirection(new y); + m.normalize(); + var C = new y; + C.copy(l.realUp || l.up), + C.normalize(); + var v = new y(l.position.clone().sub(u).length(),0,0); + d.equals(m) && p.equals(C) && h.equals(u) && g.equals(v) ? s && s() : (o.getControlManager().setInteractiveState(!1), + t.from({ + animPos: c, + animDir: d, + animUp: p, + animTarget: h, + animFocal: g + }).to({ + animPos: f, + animDir: m, + animUp: C, + animTarget: u, + animFocal: v + }, A).onUpdate((function(A) { + o.camera.lookAtEx(A.animTarget, A.animDir, A.animUp, A.animFocal.x), + o.cameraControl.update(!0, !0), + o.controlManager.dispatchEvent({ + type: Rc.ON_CAMERA_ANIMATION_UPDATE + }), + a && a() + } + )).onComplete((function() { + o.camera.lookAtEx(u, m, C, v.x), + o.cameraControl.update(!0, !0), + s && s(), + o.getControlManager().setInteractiveState(!0) + } + )).start(e)) + } + , + this.active = function(i, o, n, r, a) { + var s = n.camera + , l = new y(i.position.x,i.position.y,i.position.z) + , c = new y(i.target.x,i.target.y,i.target.z) + , h = new y(c.distanceTo(l),0,0) + , d = c.clone().sub(l).normalize() + , p = new y(i.up.x,i.up.y,i.up.z); + p.normalize(); + var g = new y(o.position.x,o.position.y,o.position.z) + , u = new y(o.target.x,o.target.y,o.target.z) + , f = new y(u.distanceTo(g),0,0) + , m = u.clone().sub(g).normalize() + , C = new y(o.up.x,o.up.y,o.up.z); + C.normalize(), + d.equals(m) && p.equals(C) && c.equals(u) && h.equals(f) ? a && a() : (n.getControlManager().setInteractiveState(!1), + t.from({ + animPos: l, + animDir: d, + animUp: p, + animTarget: c, + animFocal: h + }).to({ + animPos: g, + animDir: m, + animUp: C, + animTarget: u, + animFocal: f + }, A).onUpdate((function(A) { + var e = A.animTarget; + s.lookAtEx(e, A.animDir, A.animUp, A.animFocal.x), + r && r(e) + } + )).onComplete((function() { + s.lookAtEx(u, m, C, f.x), + r && r(u), + a && a(), + n.getControlManager().setInteractiveState(!0) + } + )).start(e)) + } + , + this.slerpFlyTo = function(i, o, n, r) { + var a = o.camera + , s = a.position.clone() + , l = a.getWorldDirection(new y) + , c = new y; + c.copy(a.realUp || a.up), + c.normalize(); + var h = a.target.clone() + , d = new y(a.position.clone().sub(h).length(),0,0) + , p = (new y).set(i.position.x, i.position.y, i.position.z) + , g = (new y).set(i.target.x, i.target.y, i.target.z) + , u = (new y).set(i.up.x, i.up.y, i.up.z) + , f = g.clone().sub(p) + , m = new y(f.length(),0,0); + f.normalize(); + var C = u.normalize(); + l.equals(f) && c.equals(C) && h.equals(g) && d.equals(m) ? r && r() : t.from({ + animPos: s, + animDir: l, + animUp: c, + animTarget: h, + animFocal: d + }).to({ + animPos: p, + animDir: f, + animUp: C, + animTarget: g, + animFocal: m + }, A).onUpdate((function(A) { + var e = A.animTarget; + a.lookAtEx(e, A.animDir, A.animUp, A.animFocal.x), + n && n(e) + } + )).onComplete((function() { + a.lookAtEx(g, f, C, m.x), + n && n(g), + r && r(), + o.getControlManager().setInteractiveState(!0) + } + )).start(e) + } + , + this.flyTo = this.slerpFlyTo, + this.linearFlyTo = function(i, o, n, r) { + var a = o.camera + , s = new y; + s.copy(a.realUp || a.up), + s.normalize(); + var l = a.target.clone() + , c = a.position.clone() + , h = (new y).set(i.position.x, i.position.y, i.position.z) + , d = (new y).set(i.target.x, i.target.y, i.target.z) + , p = (new y).set(i.up.x, i.up.y, i.up.z).normalize(); + c.equals(h) && s.equals(p) && l.equals(d) ? r && r() : t.from({ + animPosition: c, + animUp: s, + animTarget: l + }).to({ + animPosition: h, + animUp: p, + animTarget: d + }, A).onUpdate((function(A) { + var e = A.animTarget; + a.lookAtEXForTargetPositionUp(e, A.animPosition, A.animUp), + n && n(e) + } + )).onComplete((function() { + a.lookAtEXForTargetPositionUp(d, h, p), + n && n(d), + r && r(), + o.getControlManager().setInteractiveState(!0) + } + )).start(e, !0) + } + , + this.linearActive = function(i, o, n, r, a) { + var s = n.camera + , l = (new y).set(i.position.x, i.position.y, i.position.z) + , c = (new y).set(i.target.x, i.target.y, i.target.z) + , h = (new y).set(i.up.x, i.up.y, i.up.z); + h.normalize(); + var d = (new y).set(o.position.x, o.position.y, o.position.z) + , p = (new y).set(o.target.x, o.target.y, o.target.z) + , g = (new y).set(o.up.x, o.up.y, o.up.z).normalize(); + l.equals(d) && h.equals(g) && c.equals(p) ? a && a() : t.from({ + animPosition: l, + animUp: h, + animTarget: c + }).to({ + animPosition: d, + animUp: g, + animTarget: p + }, A).onUpdate((function(A) { + var e = A.animTarget; + s.lookAtEXForTargetPositionUp(e, A.animPosition, A.animUp), + r && r(e) + } + )).onComplete((function() { + s.lookAtEXForTargetPositionUp(p, d, g), + r && r(p), + a && a(), + n.getControlManager().setInteractiveState(!0) + } + )).start(e, !0) + } + } + , pp = function() { + this.condition = [{ + type: "IfcWall" + }, { + type: "IfcRoof" + }, { + type: "IfcWallStandardCase" + }, { + type: "IfcDoor" + }, { + type: "墙" + }, { + type: "门" + }], + this.distance = 150, + this.factor = 1 + }; + pp.prototype.setCondition = function(A) { + Array.isArray(A) && (this.condition = A) + } + , + pp.prototype.getCondition = function() { + return this.condition + } + , + pp.prototype.getDistance = function() { + return this.distance + } + , + pp.prototype.getFactor = function() { + return this.factor + } + , + pp.prototype.setDistance = function(A) { + "number" == typeof A && (this.distance = A) + } + , + pp.prototype.setFactor = function(A) { + "number" == typeof A && (this.factor = A) + } + , + pp.prototype.matchConditions = function(A) { + var e = this.condition; + if (0 === e.length) + return !1; + for (var t = !0, i = 0, o = e.length; o > i; i += 1) { + var n = e[i]; + for (var r in n) + if (!A.hasOwnProperty(r) || A[r] !== n[r]) { + t = !1; + break + } + if (!0 === t) + break; + e.length - 1 > i && (t = !0) + } + return t + } + , + pp.prototype.hasCollision = function(A, e) { + return !!A && (this.matchConditions(A) && this.distance * this.factor >= e) + } + ; + var gp = { + MODEL: "Model", + GEOMETRY: "Geometry", + LINESEGMENTS: "LineSegments", + INSTANCEGEOMETRY: "InstanceGeometry", + INSTANCEWIREFRAMEGEOMETRY: "InstanceWireframeGeometry", + WIREFRAME: "Wireframe", + MARKER3D: "Marker3D", + CLIPPLANE: "ClipPlane", + FILLCLIPPLANE: "FillClipPlane", + IBLCUBE: "IBLCube", + CUSTOMPLANE: "CustomPlane", + PIVOTBALL: "PivotBall", + MEASUREPICKPOINT: "MeasurePickPoint", + MEASUREPICKLINE: "MeasurePickLine", + MEASUREPLANE: "MeasurePlane", + MEASURELINE: "MeasureLine", + OCTREENODE: "OctreeNode", + AREANODE: "AreaNode", + AXISNET: "AxisNet", + AXISGRIDMANAGER: "AxisGridManager", + EXTRUDEBODYMANAGER: "ExtrudeBodyManager", + EXTERNALSCENEMANAGER: "ExternalSceneManager", + EXTERNALCOMPONENTMANAGER: "ExternalComponentManager", + TRANSFORM: "TRANSFORM", + RECEIVESHADOWPLANE: "ReceiveShadowPlane" + } + , up = function() { + this.scene = null, + this.camera = null, + this.octreeRoots = null, + this.octantMap = null, + this.mouse = new s + } + , fp = function(A) { + this.raycaster = new Dd, + this.viewer = A, + this.filter = A.getFilter(), + this.recursive = !0, + this.lastIntersect = null, + this.highPriorities = [gp.EXTRUDEBODYMANAGER] + }; + fp.prototype.destroy = function() { + this.viewer = null, + this.filter = null, + this.raycaster = null, + this.lastIntersect = null, + this.highPriorities = null + } + , + fp.prototype.intersectExternalComponent = function(A, e, t, i, o) { + if (A.visible || o) { + for (var n = this.raycaster, r = this.filter, a = function A(e) { + var t = e + , i = []; + if (t.isGroup) + for (var o = 0, a = t.children.length; a > o; o += 1) { + var s = A(t.children[o]); + i = i.concat(s) + } + else + r._isPickable({ + userId: t.key + }) && t.raycast(n, i); + return i + }, s = {}, l = 0, c = A.children.length; c > l; l += 1) { + var h = A.children[l] + , d = a(h); + if (d.length > 0) { + d.sort((function(A, e) { + return A.distance - e.distance + } + )), + d[0].userId = h.key; + var p = s[h.key]; + p ? p.distance > d[0].distance && (s[h.key] = d[0]) : s[h.key] = d[0] + } + } + var g = [] + , u = Object.values(s); + if (u.length > 0) + for (var f = 0; u.length > f; f += 1) + u[f].distance > t.far || t.near > u[f].distance || this.viewer.clipPoint(u[f].point) || g.push(u[f]); + return i ? g : (g.sort((function(A, e) { + return A.distance - e.distance + } + )), + g.length > 0 ? g[0] : null) + } + } + , + fp.prototype.defaultIntersect = function(A, e, t, i, o) { + if (A.visible || o) { + var n = [] + , r = this.raycaster; + !function A(e) { + for (var t = 0, i = e.children.length; i > t; t += 1) { + var o = e.children[t]; + o.isGroup ? A(o) : o.raycast(r, n) + } + }(A); + var a = []; + if (n.length > 0) + for (var s = 0; n.length > s; s += 1) + n[s].distance > t.far || t.near > n[s].distance || this.viewer.clipPoint(n[s].point) || a.push(n[s]); + return i ? a : (a.sort((function(A, e) { + return A.distance - e.distance + } + )), + a.length > 0 ? a[0] : null) + } + } + , + fp.prototype.intersectMeshesWithDistance = function(A, e, t, i, o, n, r, a) { + if (!e || !e.mesh) + return null; + var s = 0 + , l = uh.MinusEpsilon + , c = this.raycaster + , h = [] + , d = this.filter + , p = d._hasVisibleFilter() + , g = d._hasPickableFilter() + , u = this.viewer.modelManager + , f = function(A, e) { + var t = u.isHiddenSourceObjectUserId(A.userId); + if (e) { + if (p && !d._isVisible(A) || g && !d._isPickable(A) || t) + return !0 + } else if (p && !d._isVisible(A) || t) + return !0; + return !1 + }; + !0 === this.byGravity ? i.near = 0 : i.near += l; + var m = e.info + , C = e.mesh + , y = []; + if (Bh.time("kdNode Pick"), + o && n && !n.explosioning) { + var v = [] + , I = new M; + I.getInverse(n.getModelMatrix()); + var E = c.ray.clone().applyMatrix4(I); + if (Array.isArray(o)) + for (var B = new M, x = 0; o.length > x; x += 1) { + var S = o[x] + , w = S.modelKey + , b = E; + if (w) + B.getInverse(n.subModel[w]), + b = E.clone().applyMatrix4(B); + S.intersect(b, v) + } + else + o.intersect(E, v); + y = uh.unique(v) + } else + y = n.getComponentlist(); + Bh.timeEnd("kdNode Pick"); + var U = Object.keys(n.manager.explosionList); + if (n && n.manager && U.length > 0 && (y = y.concat(U), + y = uh.unique(y)), + Object.keys(u.transformComponent).length > 0) { + for (var F in u.transformComponent) + y.push(F); + y = uh.unique(y) + } + var K = this.viewer.modelManager.getMatrixWorldGlobal(); + Bh.time("Box Pick"); + for (var Q = 0, R = y.length; R > Q; Q += 1) { + var T = m[y[Q]]; + if (T) { + var k = T[0]; + if (k) { + var D = k.boundingBox.clone(); + if (D.applyMatrix4(n.getModelMatrix()).applyMatrix4(K), + (s = c.ray.intersectBoxWithDistance(D)) >= i.near && i.far >= s) + for (var L = 0, N = T.length; N > L; L += 1) { + var O = T[L]; + if (!f(O, t)) { + var V = C[this.viewer.modelManager.getMeshIdFromOctantMap(O)]; + if (V) + for (var G = 0, P = V.length; P > G; G += 1) + h.push({ + object: V[G], + distance: s, + nodeInfo: O + }) + } + } + } + } + } + Bh.timeEnd("Box Pick"), + Bh.time("Ending Pick"), + h.sort((function(A, e) { + return A.distance - e.distance + } + )); + for (var q = [], j = 0; h.length > j; j += 1) + h[j].distance > i.far || i.near > h[j].distance || h[j].object.raycast(c, h[j].nodeInfo, i, this.viewer, q, a); + return q.sort((function(A, e) { + return A.distance - e.distance + } + )), + a ? q : (Bh.timeEnd("Ending Pick"), + q.length > 0 ? q[0] : null) + } + , + fp.prototype.intersect = function(A, e, t, i) { + var o = this.raycaster; + null === e ? o.setFromCamera(A.mouse, A.camera) : o.set(e.origin, e.direction); + Bh.time("intersect time"), + o.camera = A.camera, + o._camera = A.camera, + o.viewportSize = A.viewportSize; + var n = new y; + A.camera.getWorldDirection(n); + for (var r = n.dot(o.ray.direction), a = { + near: A.camera.near / Math.abs(r), + far: A.camera.far / Math.abs(r) + }, s = null, l = [], c = A.scene.getGroups(), h = 0; c.length > h; h += 1) + if (c[h].isPickable() && 0 !== c[h].children.length) { + var d = A.scene.getGroupType(c[h].name) + , p = d.groupType + , g = d.modelKey; + if (-1 < this.highPriorities.indexOf(d.groupType)) + (s = this.defaultIntersect(c[h], t, a, void 0, !0)) && (s.objectType = c[h].pickableType, + s.hoverEnabled = c[h].hoverEnabled, + l.push(s)); + else if (this.filter._isModelPickable(g)) { + switch (p) { + case gp.MODEL: + var u = this.viewer.modelManager.getModel(g); + s = u && u.isDataReady() && u.isVisible() ? this.intersectMeshesWithDistance([], A.octantMap[g], t, a, u.kdTreeNode, u) : null; + break; + case gp.GEOMETRY: + s = vc.MergeComponent ? null : this.intersectMeshesWithDistance(A.octantMap[g], A.octantMap, t, a); + break; + case gp.EXTERNALCOMPONENTMANAGER: + s = this.intersectExternalComponent(c[h], t, a); + break; + default: + s = this.defaultIntersect(c[h], t, a) + } + s && (s.objectType = c[h].pickableType, + s.hoverEnabled = c[h].hoverEnabled, + l.push(s)) + } + } + l.sort((function(A, e) { + return A.distance - e.distance + } + )), + Bh.timeEnd("intersect time"); + var f = l.length; + if (f > 0) { + l.sort((function(A, e) { + return A.distance - e.distance + } + )); + for (var m = 0; f > m; m += 1) { + var C = (s = l[m]).object; + if (C.geometry) + return s.userId = s.userId || C.key, + s.modelKey = C.modelKey, + this.lastIntersect = s, + s + } + } + return this.lastIntersect = { + intersect: s, + pickable: t + }, + null + } + , + fp.prototype.getObjectsByClientCoordinates = function(A) { + var e = this.viewer.cameraControl.getIntersectContext(A) + , t = this.raycaster; + return t.setFromCamera(e.mouse, e.camera), + t.camera = e.camera, + t.viewportSize = e.viewportSize, + this.getObjectsByRaycaster(e, t) + } + , + fp.prototype.getObjectsByRaycaster = function(A, e, t) { + this.raycaster = e; + for (var i = { + near: t ? 0 : A.camera.near, + far: t ? 1 / 0 : A.camera.far + }, o = [], n = A.scene.getGroups(), r = 0; n.length > r; r += 1) + if (n[r].isPickable() && 0 !== n[r].children.length) { + var a = [] + , s = A.scene.getGroupType(n[r].name); + switch (s.groupType) { + case gp.MODEL: + var l = s.modelKey + , c = this.viewer.modelManager.getModel(l); + c && c.isDataReady() && c.isVisible() && (a = this.intersectMeshesWithDistance([], A.octantMap[l], !1, i, c.kdTreeNode, c), + o = o.concat(a)); + break; + case gp.GEOMETRY: + break; + default: + a = this.defaultIntersect(n[r], !1, i, !0), + o = o.concat(a) + } + } + return o.sort((function(A, e) { + return A.distance - e.distance + } + )), + o + } + , + fp.prototype.hitTest = function(A) { + var e = this.intersect(A, null, !1); + return null !== e ? e.point : null + } + , + fp.prototype.pick = function(A, e) { + var t = this.intersect(A, null, !0); + return e && e(t), + t + } + , + fp.prototype.getIntersectByRay = function(A, e) { + return this.intersect(A, e, !0) + } + ; + var mp = function(A, e, t, i) { + this.viewer = A, + this.camera = e, + this.domElement = t, + this.scene = A.getScene(), + this.intersector = new fp(A), + this.enabled = !0, + this.tempVector3 = new y, + this.pivot = null, + this.movementSpeed = 8e-4 * vc.SceneSize, + this.defaultMovementSpeed = this.movementSpeed, + this.minMovementSpeed = .01, + this.noZoom = !1, + this.minDistance = .1, + this.maxDistance = e.far - 2 * vc.SceneSize, + this.defaultThroughOutDistance = .1, + this.noRotate = !1, + this.rotateSpeed = 1, + this.noPan = !1, + this.keyPanSpeed = 2, + this.defaultKeyPanSpeed = this.keyPanSpeed, + this.minKeyPanSpeed = .01, + this.autoRotate = !0, + this.autoRotateSpeed = 2, + this.minDistance = 0, + this.maxDistance = 1 / 0, + this.minZoom = 0, + this.maxZoom = 1 / 0, + this.enablePolar = !1, + this.minPolarAngle = 0, + this.maxPolarAngle = Math.PI, + this.minAzimuthAngle = -1 / 0, + this.maxAzimuthAngle = 1 / 0, + this.enableDamping = !1, + this.dampingFactor = .25, + this.enableZoom = !0, + this.zoomSpeed = 1, + this.enableRotate = !0, + this.rotateSpeed = 1, + this.enablePan = !0, + this.enablePassThrough = !0, + this.isDisableRotate = !1, + this.noKeys = !1, + this._realManHeight = 1650; + var o, n, r, l, c, h, d, p = this, g = 1e-6, u = new y(0,0,1), m = new y, C = new f, v = null, I = !1; + function E(A, e, t) { + if (null == t) + return !0; + var i = t[0] + , o = t[1]; + if (i >= o) + return !1; + var n = p.camera + , r = n.position; + e || (e = r.clone()); + var a = n.getWorldDirection(new y) + , s = n.realUp || n.up + , l = a.clone().cross(s).normalize() + , c = (new f).setFromAxisAngle(l, A); + r.clone().sub(e).normalize(); + var h = a.clone().negate() + , d = Math.PI - h.angleTo(u.clone()) + , g = h.clone().projectOnPlane(u.clone()) + , m = g.angleTo(u.clone()); + 0 > g.x && (m = 2 * Math.PI - m), + a.applyQuaternion(c).normalize(); + var C = a.clone().negate() + , v = Math.PI - C.angleTo(u.clone()) + , I = C.clone().projectOnPlane(u.clone()) + , E = I.angleTo(u.clone()); + if (0 > I.x && (E = 2 * Math.PI - E), + Math.abs(E - m) > .001) + return !1; + if (d > i && o > d) { + if (v > o || i > v) + return !1 + } else if ((d > o ? v - d : d - v) > 0) + return !1; + return !0 + } + function B() { + var A = p.viewer.modelManager.sceneState; + if (A.hasSelection()) { + var e = p.viewer.getFilter() + , t = p.viewer + , i = e.getVisibleComponentSet(A.getSelectionSet()) + , o = t.getBoundingBoxByIds(i); + if (o && !o.isEmpty()) + return o.getCenter() + } + return p.pivot ? p.pivot : p.scene.getBoundingBox().getCenter(new y) + } + function x(A, e, t, i) { + var o = new M; + o.getInverse(e); + var n = new y(A.position.x,A.position.y,A.position.z) + , r = n.clone(); + r.applyMatrix4(o); + var a = new y(t.x,t.y,t.z); + return a.add(n), + a.applyMatrix4(o), + a.sub(r).normalize().multiplyScalar(i), + a.add(r), + a.applyMatrix4(e), + a.sub(n), + a + } + this.collisionManager = new pp, + this.pivotBallGroup = null, + this.minDollyDistance = 10, + this.gravity = 0, + this.farFactor = 11.4514, + this.sceneLengthUnitFactor = 1, + this.destroy = function() { + this.viewer = null, + this.camera = null, + this.domElement = null, + this.scene = null, + this.intersector.destroy(), + this.intersector = null, + this.collisionManager = null, + this.pivotBallGroup = null + } + , + this.isCameraChanging = function() { + return I + } + , + this.setCameraChanging = function(A) { + I = A + } + , + this.setCamera = function(A) { + this.camera = A + } + , + this.getCamera = function() { + return this.camera.updateMVP(), + this.camera + } + , + this.dirtyCamera = function(A) { + this.camera.dirty = A + } + , + this.getFrustum = function() { + return this.camera.getFrustum() + } + , + this.lockAxisZ = function(A) { + jh.LockAxisZ = A + } + , + this.isLockedAxisZ = function() { + return jh.LockAxisZ + } + , + this.setLockAxisZRange = function(A) { + jh.LockAxisZRange = A + } + , + this.getLockAxisZRange = function() { + return jh.LockAxisZRange + } + , + this.getClientSize = function() { + var A = p.domElement === document ? p.domElement.body : p.domElement; + return new s(A.clientWidth,A.clientHeight) + } + , + this.delayHandle = function() { + this.timeoutId && clearTimeout(this.timeoutId), + this.timeoutId = setTimeout((function() { + p.update(!0, !0) + } + ), 200), + this.needUpdateRenderList(!1) + } + , + this.processRotate = function(A, e) { + var t = this.getClientSize() + , i = -2 * Math.PI * A.x / t.x + , o = -2 * Math.PI * A.y / t.y; + p.handleRotation(i, o, e) + } + , + this.handleRotation = function(A, e, t) { + var i = this.camera + , o = i.position + , n = i.target.clone() + , r = i.getWorldDirection(n) + , a = n.clone().sub(o).length() + , s = null + , l = function(A) { + var e = null + , n = null + , s = null + , l = new y; + t ? (n = (e = o.clone().sub(t)).length(), + e.normalize(), + s = e.clone().applyQuaternion(A).normalize(), + i.position.copy(t).add(s.multiplyScalar(n)), + r.applyQuaternion(A).normalize(), + l.copy(o).add(r.multiplyScalar(a)), + i.target.copy(l)) : (r.applyQuaternion(A).normalize(), + l.copy(o).add(r.multiplyScalar(a)), + i.target.copy(l)) + } + , c = i.realUp || i.up + , h = r.clone().cross(c).normalize().clone().cross(r).normalize(); + i.realUp.copy(h); + var d = null; + if (jh.LockAxisZ) { + if (Math.abs(A) > Math.abs(e)) + d = u, + l(s = (new f).setFromAxisAngle(d, A)), + i.realUp.applyQuaternion(s).normalize(); + else if (null != jh.LockAxisZRange && Math.abs(e) > 1e-4) { + E(e, t, jh.LockAxisZRange) && (d = r.clone().cross(c).normalize(), + l(s = (new f).setFromAxisAngle(d, e)), + i.realUp.applyQuaternion(s).normalize(), + this.adjustCameraUp()) + } + } else + Math.abs(A) < Math.abs(e) ? Math.abs(e) > 1e-4 && (d = r.clone().cross(c).normalize(), + l(s = (new f).setFromAxisAngle(d, e)), + i.realUp.applyQuaternion(s).normalize(), + this.adjustCameraUp()) : (d = i.up.clone().normalize(), + l(s = (new f).setFromAxisAngle(d, A)), + i.realUp.applyQuaternion(s).normalize()); + this.dirtyCamera(!0), + this.setCameraChanging(!0) + } + , + this.enabledPolar = function(A) { + jh.LockAxisZ = A + } + , + this.setMinPolarAngle = function(A) { + "number" == typeof A && (Array.isArray(jh.LockAxisZRange) || (jh.LockAxisZRange = []), + jh.LockAxisZRange[0] = A) + } + , + this.setMaxPolarAngle = function(A) { + "number" == typeof A && (Array.isArray(jh.LockAxisZRange) || (jh.LockAxisZRange = []), + jh.LockAxisZRange[1] = A) + } + , + this.getMinPolarAngle = function() { + return jh.LockAxisZRange ? jh.LockAxisZRange[0] : null + } + , + this.getMaxPolarAngle = function() { + return jh.LockAxisZRange ? jh.LockAxisZRange[1] : null + } + , + this.adjustCameraForPan = function(A) { + var e = this.camera; + e.target.add(A), + e.position.add(A), + this.dirtyCamera(!0), + this.setCameraChanging(!0) + } + , + this.updateCamera = function() { + var A = this.camera; + A.dirty && (A.lookAt(A.target), + A.updateMVP(), + this.adjustCameraUp(), + this.dispatchEvent({ + type: Rc.ON_CAMERA_CHANGE, + camera: this.camera + })) + } + , + this.update = function(A, e) { + this.updateCamera(), + this.dispatchEvent({ + type: Rc.ON_CAMERA_CHANGE, + camera: this.camera + }); + var t = this.camera; + A ? (void 0 !== e && this.needUpdateRenderList(e), + i(), + m.copy(t.position), + C.copy(t.quaternion)) : (m.distanceToSquared(t.position) > g || 8 * (1 - C.dot(t.quaternion)) > g) && (i(), + m.copy(t.position), + C.copy(t.quaternion)) + } + , + this.updateView = function(A) { + void 0 !== A && this.needUpdateRenderList(A), + this.dispatchEvent({ + type: Rc.ON_CAMERA_CHANGE, + camera: this.camera + }), + i() + } + , + this.updateHighlight = function() { + this.dispatchEvent({ + type: Rc.ON_CAMERA_CHANGE, + camera: this.camera + }), + i(!0) + } + , + this.needUpdateRenderList = function(A) { + this.viewer.controlManager.isUpdateRenderList = A + } + , + this.pan = function(A, e) { + var t = p.domElement === document ? p.domElement.body : p.domElement + , i = new y; + function o(A) { + var e = p.camera.matrix.elements; + i.set(e[0], e[1], e[2]), + i.multiplyScalar(-A), + p.camera.target.add(i), + p.camera.position.add(i) + } + function n(A) { + var e = p.camera.matrix.elements; + i.set(e[4], e[5], e[6]), + i.multiplyScalar(A), + p.camera.target.add(i), + p.camera.position.add(i) + } + if (p.camera.isPerspective) { + var r = p.camera.position.clone().sub(p.camera.target).length(); + o(2 * A * (r *= Math.tan(p.camera.fov / 2 * Math.PI / 180)) / t.clientHeight), + n(2 * e * r / t.clientHeight) + } else + void 0 !== p.camera.top ? (o(A * (p.camera.right - p.camera.left) / t.clientWidth), + n(e * (p.camera.top - p.camera.bottom) / t.clientHeight)) : Bh.warn("WARNING: CloudPickEditor.js encountered an unknown camera type - pan disabled."); + this.dirtyCamera(!0), + this.setCameraChanging(!0) + } + , + this.panOnWorld = (o = new y, + n = new y, + r = new y, + function(A, e, t, i) { + var a = p.getContainerDimensions() + , s = A.x - a.left + , l = A.y - a.top; + o.x = s / a.width, + o.y = l / a.height, + l = e.y - a.top, + n.x = (s = e.x - a.left) / a.width, + n.y = l / a.height, + r.subVectors(n, o); + var c = -r.x * i.x + , h = r.y * i.y + , d = p.getWorldRight().multiplyScalar(c) + , g = p.getWorldUp().multiplyScalar(h); + t.addVectors(d, g), + p.dirtyCamera(!0), + p.setCameraChanging(!0) + } + ), + this.adjustCameraForDolly = function(A, e) { + var t = A - 1; + if (t *= this.zoomSpeed, + Math.abs(t) < g) + return !1; + var i = this.camera + , o = i.position + , n = this.getWorldEye() + , r = new y; + e ? r.subVectors(e, o) : r.copy(n), + r.multiplyScalar(t); + var a = r.length(); + i.isPerspective ? this.minDollyDistance > a && r.normalize().multiplyScalar(this.minDollyDistance) : (i.orthoScale *= A, + i.setZoom(i.orthoScale)); + var s = new y; + s.addVectors(o, r), + this._goingToDolly(i, s, t) ? (i.position.copy(s), + i.target.copy(n.add(s)), + this.dirtyCamera(!0), + this.setCameraChanging(!0)) : this.resetCameraToMaximumRange() + } + , + this._goingToDolly = function(A, e, t) { + if (!A.isPerspective || !vc.ConstraintZoom) + return !0; + var i = this.scene.getBoundingBox(); + if (t > 0) + return !!A.getFrustum().intersectsBox(i); + var o = i.getSize(this.tempVector3).length() + , n = i.getCenter(this.tempVector3) + , r = .5 * o / Math.tan(a.degToRad(.5 * A.fov)) * this.farFactor; + return e.distanceTo(n) < r + } + , + this.dolly = function(A, e, t) { + var i = new s(A,e) + , o = this.getIntersectContext(i) + , n = this.intersector.hitTest(o); + this.adjustCameraForDolly(t, null !== n ? n : null) + } + , + this.dollyByPoint = function(A, e, t) { + var i = this.getTrackingPoint(A, e); + this.adjustCameraForDolly(t, i) + } + , + this.endOperation = function() { + this.intersector.lastIntersect = null + } + , + this.zoom = function(A, e, t) { + var i; + i = 1 + A, + void 0 === e || void 0 === t ? this.adjustCameraForDolly(i, null) : this.dollyByPoint(e, t, i), + this.update() + } + , + this.getContainerDimensions = function() { + return xh.getDomOffsetToClient(this.domElement) + } + , + this.computeFrustum = (l = new M, + c = new M, + function(A, e, t, i, o, n) { + var r = this.camera + , s = r.near * Math.tan(a.degToRad(.5 * r.fov)) + , h = s * r.aspect; + l.makePerspective(((A - n.left) / n.width * 2 - 1) * h, ((e - n.left) / n.width * 2 - 1) * h, (-(t - n.top) / n.height * 2 + 1) * s, (-(i - n.top) / n.height * 2 + 1) * s, r.near, r.far), + r.updateMatrixWorld(), + r.matrixWorldInverse.getInverse(r.matrixWorld), + c.multiplyMatrices(l, r.matrixWorldInverse), + o.setFromProjectionMatrix(c) + } + ), + this.screenToCanvas = function(A, e) { + var t = this.getContainerDimensions(); + return { + x: A - t.left, + y: e - t.top + } + } + , + this.mapScreenToLocal = function(A, e, t) { + var i = this.getContainerDimensions(); + t.set(A - i.left, i.height - (e - i.top)) + } + , + this.mapWindowToViewport = function(A, e, t) { + var i = this.getContainerDimensions() + , o = t || new s; + return o.x = (A - i.left) / i.width * 2 - 1, + o.y = -(e - i.top) / i.height * 2 + 1, + o + } + , + this.getCameraName = function() { + return this.camera === this.viewer.defaultCamera ? this.camera.isPerspective ? Ec.PERSPECTIVE : Ec.ORTHOGRAPHIC : this.camera.name + } + , + this.getCameraInfo = function() { + var A = new Qd(this.getCameraName(),this.camera.position,this.camera.target,this.camera.up); + return JSON.stringify(A) + } + , + this.isKeepZoom = function(A, e, t) { + this.dirtyCamera(!0), + this.setCameraChanging(!0), + void 0 === e && (e = this.minDistance), + void 0 === t && (t = this.maxDistance); + var i = this.camera.position + , o = this.camera.target + , n = new y; + n.copy(i).sub(o); + var r = n.length() * (2 - A); + return !(e > r || r > t) + } + , + this.computeRotation = function() { + var A = new M; + A.lookAt(this.camera.position, this.camera.target, this.camera.up); + var e = new f; + e.setFromRotationMatrix(A); + var t = new F; + return t.setFromQuaternion(e, void 0, !1), + t + } + , + this.adjustCameraUp = function() { + this.camera.realUp.z > 0 ? this.camera.up = new y(0,0,1) : 0 > this.camera.realUp.z ? this.camera.up = new y(0,0,-1) : this.camera.realUp.x > 0 ? this.camera.up = new y(1,0,0) : 0 > this.camera.realUp.x ? this.camera.up = new y(-1,0,0) : this.camera.realUp.y > 0 ? this.camera.up = new y(0,1,0) : 0 > this.camera.realUp.y && (this.camera.up = new y(0,-1,0)) + } + , + this.getWorldEye = function() { + return this.camera.target.clone().sub(this.camera.position) + } + , + this.getWorldRight = function() { + var A = new y + , e = this.camera.up + , t = this.getWorldEye(); + return A.crossVectors(t, e), + 0 === A.lengthSq() && (e.z > e.y ? t.y -= 1e-4 : t.z += 1e-4, + A.crossVectors(t, e)), + A.normalize() + } + , + this.getWorldRightByRealUp = function() { + var A = new y + , e = this.camera.realUp + , t = this.getWorldEye(); + return A.crossVectors(t, e), + 0 === A.lengthSq() && (e.z > e.y ? t.y -= 1e-4 : t.z += 1e-4, + A.crossVectors(t, e)), + A.normalize() + } + , + this.getWorldUp = function() { + var A = this.getWorldRight() + , e = this.getWorldEye(); + return A.cross(e).normalize() + } + , + this.getWorldDimension = function(A, e) { + var t = this.camera.position + , i = this.getWorldEye().normalize() + , o = this.getTrackingPoint(A, e).clone().sub(t) + , n = Math.abs(i.dot(o)) + , r = this.getContainerDimensions() + , l = r.width / r.height + , c = 2 * n * Math.tan(a.degToRad(.5 * this.camera.fov)); + return new s(c * l,c) + } + , + this.getWorldPointFromNearPlane = function(A, e) { + var t = new y(A,e,0); + return t.unproject(this.camera), + t + } + , + this.getTrackingPoint = function(A, e) { + var t = new s(A,e) + , i = this.getIntersectContext(t) + , o = this.intersector.hitTest(i) + , n = this.camera.position; + if (!o) { + var r = i.mouse + , a = this.getWorldEye() + , l = a.clone().normalize() + , c = this.getWorldPointFromNearPlane(r.x, r.y) + , h = new CA; + if (this.camera.isPerspective) + h.origin.copy(n), + h.direction.copy(c.clone().sub(n).normalize()); + else { + var d = c.clone(); + d.sub(a), + h.origin.copy(d), + h.direction.copy(l) + } + if (v) { + var p = new EA; + if (p.setFromNormalAndCoplanarPoint(l, v), + o = h.intersectPlane(p, new y)) { + var u = o.distanceTo(n); + g > u && (o = this.getTrackingPointFromBoundingBox(l, h)) + } else + o = this.getTrackingPointFromBoundingBox(l, h) + } else + o = this.getTrackingPointFromBoundingBox(l, h); + o || (Bh.log("tracking point is default!"), + o = c) + } + return n.equals(o) && (o = null), + v = o && o.clone(), + o + } + , + this.getTrackingPointFromBoundingBox = function(A, e) { + return this.viewer.getScene().getTrackingPointFromBoundingBox(A, e) + } + , + this.setCameraPosition = function(A) { + var e = this.camera + , t = this.getWorldEye() + , i = t.length() + , o = t.clone(); + o.normalize(), + o.setLength(i), + e.position.copy(A), + e.target.addVectors(e.position, o), + this.dirtyCamera(!0), + this.setCameraChanging(!0) + } + , + this.moveStraight = function(A, e) { + var t = this.camera.position + , i = this.camera.target; + if (e) { + var o = new y(i.x - t.x,0,i.z - t.z) + , n = A / o.length() + , r = new y(o.x * n,0,o.z * n); + t.add(r), + i.add(r) + } else { + var a = i.clone().sub(t); + this.camera.translateZ(-A), + i.addVectors(t, a) + } + this.dirtyCamera(!0), + this.setCameraChanging(!0) + } + , + this.getIntersectContext = function(A) { + var e = new up; + return e.scene = p.viewer.getScene(), + e.camera = this.camera, + null !== A && this.mapWindowToViewport(A.x, A.y, e.mouse), + e.viewportSize = p.viewer.getRenderer().getSize(new s), + e.octantMap = p.viewer.modelManager.octantToObjectMap, + e + } + , + this.getLastIntersect = function() { + return this.intersector.lastIntersect + } + , + this.calculatePivot = function(A, e) { + var t = this + , i = this.viewer + , o = i.getFilter() + , n = i.getScene() + , r = null; + function a(A) { + var e = t.getIntersectContext(A) + , i = t.intersector.hitTest(e); + if (i) + return i; + var o = n.getBoundingBox(); + if (n.hasClipPlanes() && n.getClipPlanes().isEnabled()) { + var r = n.getClipPlanes().getClipBoundingBox(); + o.intersect(r) + } else if (n.hasFillClipPlanes() && n.getFillClipPlane().isEnabled()) { + var a = n.getFillClipPlane().getFillClipBoundingBox(); + o.intersect(a) + } + return o.getCenter(new y) + } + var s = null + , l = null; + switch (A) { + case kc.SELECTION: + if (n.hasClipPlanes() && n.getClipPlanes().isEnabled() && (s = n.getClipPlanes().getClipBoundingBox()) && !s.isEmpty() && n.getClipPlanes().isVisible()) { + r = s.getCenter(); + break + } + n.hasFillClipPlanes() && n.getFillClipPlane().isEnabled() && (l = n.getFillClipPlane().getFillClipBoundingBox()); + var c = o.getVisibleComponentSet(i.modelManager.sceneState.getSelectionSet(), i) + , h = i.getBoundingBoxByIds(c); + mh.isMobileDevice() || !h || h.isEmpty() ? r = a(e) : (s ? h.intersect(s) : l && h.intersect(l), + r = h.getCenter(new y)); + break; + case kc.CENTER: + r = n.getBoundingBoxWorld().getCenter(new y); + break; + case kc.CAMERA: + r = null; + break; + default: + r = a(e) + } + return this.dirtyCamera(!0), + this.setCameraChanging(!0), + this.pivot = r, + r + } + , + this.touchUpdateRotationInPersonView = function(A, e) { + this.dirtyCamera(!0), + this.setCameraChanging(!0); + var t = this + , i = this.camera.position + , o = this.camera.target.clone().sub(i).length() + , n = this.camera.getWorldDirection(new y) + , r = this.camera.realUp || this.camera.up + , a = n.clone().cross(r).normalize() + , s = a.clone().cross(n).normalize(); + this.camera.realUp.copy(s); + var l = jh.LockAxisZRange + , c = null + , h = null; + if (Math.abs(A) > Math.abs(e)) + c = u, + h = A; + else { + if (jh.LockAxisZ && !E(e, this.camera.target, l)) + return; + c = a; + var d = new y(0,0,1).clone().cross(r) + , p = d.dot(a) + , m = Math.asin(d.length()); + 0 > p && (m = -m), + m + e > Math.PI / 4 - g ? e = Math.PI / 4 - g - m : m + e < -Math.PI / 4 + g && (e = -Math.PI / 4 + g - m), + h = e + } + var C, v, I = (new f).setFromAxisAngle(c, h); + C = I, + v = new y, + n.applyQuaternion(C).normalize(), + v.copy(i).add(n.multiplyScalar(o)), + t.camera.target.copy(v), + this.camera.realUp.applyQuaternion(I).normalize() + } + , + this.touchUpdateRotationInModelView = function(A, e, t) { + this.dirtyCamera(!0), + this.setCameraChanging(!0); + var i = t || this.scene.getBoundingBox().getCenter(new y) + , o = this.camera.position + , n = this.camera.target.clone().sub(o).length() + , r = o.clone().sub(i) + , a = r.length() + , s = null + , l = this.camera.getWorldDirection(new y); + r.normalize(); + var c = function(A) { + var e = new y + , t = r.clone().applyQuaternion(A).normalize(); + o.copy(i).add(t.multiplyScalar(a)), + l.applyQuaternion(A).normalize(), + e.copy(o).add(l.multiplyScalar(n)), + p.camera.target.copy(e) + } + , h = this.camera.realUp || this.camera.up + , d = l.clone().cross(h).normalize() + , m = d.clone().cross(l).normalize(); + this.camera.realUp.copy(m); + var C = null; + if (jh.LockAxisZ) { + if (Math.abs(A) > Math.abs(e)) + C = u, + c(s = (new f).setFromAxisAngle(C, A)), + this.camera.realUp.applyQuaternion(s).normalize(); + else if (null != jh.LockAxisZRange && Math.abs(e) > 1e-4) { + E(e, i, jh.LockAxisZRange) && (C = l.clone().cross(h).normalize(), + c(s = (new f).setFromAxisAngle(C, e)), + this.camera.realUp.applyQuaternion(s).normalize(), + this.adjustCameraUp()) + } + } else if (Math.abs(A) > Math.abs(e)) + C = this.camera.up.clone().normalize(), + c(s = (new f).setFromAxisAngle(C, A)), + this.camera.realUp.applyQuaternion(s).normalize(); + else if (Math.abs(e) > .01) { + C = l.clone().cross(h).normalize(); + var v = new y(0,1,0).clone().cross(h) + , I = v.dot(d) + , x = Math.asin(v.length()); + 0 > I && (x = -x), + x + e > Math.PI / 2 - g ? e = Math.PI / 2 - g - x : x + e < -Math.PI / 2 + g && (e = -Math.PI / 2 + g - x), + c(s = (new f).setFromAxisAngle(C, e)), + this.camera.realUp.applyQuaternion(s).normalize(), + this.adjustCameraUp() + } + this.pivotBallGroup || function() { + p.pivotBallGroup = p.scene.getOrCreateGroup(gp.PIVOTBALL, { + priority: 10, + globalSpace: !1 + }); + var A = new er(15,64,64) + , e = new Ue(A,new Ir({ + color: 16777215, + depthTest: !1, + opacity: .5, + transparent: !0, + side: 2 + })) + , t = new Ue(A = new er(1,64,64),new Ir({ + color: 16711680, + depthTest: !1, + opacity: .5, + transparent: !0, + side: 2 + })); + p.pivotBallGroup.add(e), + p.pivotBallGroup.add(t) + }(), + this.pivotBallGroup.visible = !0; + for (var S = function() { + var A = p.camera + , e = A.position + , t = p.camera.target.clone().sub(e); + t.normalize(); + var i = new EA; + i.setFromNormalAndCoplanarPoint(t.clone().negate(), B()), + i.normalize(); + var o = i.distanceToPoint(e) * Math.tan(.5 * A.fov) + , n = p.getContainerDimensions(); + return 2 * o / (n.height - n.top) + }(), w = B(), M = 0; this.pivotBallGroup.children.length > M; M += 1) { + var b = this.pivotBallGroup.children[M]; + b.position.copy(w), + b.scale.set(S, S, S), + b.updateMatrixWorld() + } + } + , + this.touchUpdateRotation = function(A, e) { + var t = this.camera.position; + this.scene.getBoundingBox().containsPoint(t) ? this.touchUpdateRotationInPersonView(A, e) : this.touchUpdateRotationInModelView(A, e, B()) + } + , + this.clearTouchRotateState = function() { + this.pivotBallGroup && (this.pivotBallGroup.visible = !1) + } + , + this.touchEndHandler = function() { + this.viewer.controlManager.cameraChange = !1, + this.clearTouchRotateState(), + this.touchUpdate() + } + , + this._adjustCameraForDolly = function(A, e) { + var t = e - 1; + if (Math.abs(t) < g) + return !1; + var i = this.camera + , o = i.position + , n = this.getWorldEye() + , r = new y; + A ? r.subVectors(A, o) : r.copy(n), + r.multiplyScalar(t); + var a = r.length(); + i.isPerspective && this.minDollyDistance > a && r.normalize().multiplyScalar(this.minDollyDistance); + var s = new y; + return s.addVectors(o, r), + i.isPerspective || (i.orthoScale *= e, + i.setZoom(i.orthoScale)), + i.position.copy(s), + i.target.copy(n.add(s)), + this.dirtyCamera(!0), + this.setCameraChanging(!0), + !0 + } + , + this.touchDolly = function(A, e, t) { + var i = new s(A,e) + , o = this.getIntersectContext(i) + , n = this.intersector.hitTest(o); + this._adjustCameraForDolly(null !== n ? n : null, t) + } + , + this.touchUpdate = (h = new y, + d = new f, + function() { + var A = new y; + A.copy(p.camera.up), + p.camera.up.copy(p.camera.realUp), + p.camera.lookAt(p.camera.target), + p.camera.up.copy(A), + p.camera.updateMVP(), + (h.distanceToSquared(p.camera.position) > g || 8 * (1 - d.dot(this.camera.quaternion)) > g) && (this.dispatchEvent({ + type: Rc.ON_CAMERA_CHANGE, + camera: this.camera + }), + i(), + p.dirtyCamera(!1), + h.copy(p.camera.position), + d.copy(p.camera.quaternion)) + } + ), + this.goTurnForWalk = function(A) { + var e = this.getCamera() + , t = e.position + , i = e.target + , o = new y(i.x - t.x,i.y - t.y,0) + , n = Math.cos(A) + , r = Math.sin(A) + , a = new y(o.x * n - o.y * r,o.x * r + o.y * n,0); + i.x = t.x + a.x, + i.y = t.y + a.y, + this.dirtyCamera(!0), + this.setCameraChanging(!0) + } + , + this.goPitchForWalk = function(A) { + var e = this.getCamera() + , t = e.position + , i = e.target + , o = i.x - t.x + , n = i.y - t.y + , r = new y(Math.sqrt(o * o + n * n),0,i.z - t.z) + , a = Math.cos(A) + , s = Math.sin(A) + , l = new y(r.x * a - r.z * s,0,r.x * s + r.z * a); + i.z = t.z + l.z, + this.dirtyCamera(!0), + this.setCameraChanging(!0) + } + , + this.goUpDownForWalk = function(A) { + var e = this.getCamera() + , t = e.position + , i = e.target + , o = new y(0,0,1) + , n = x(e, this.scene.getMatrixGlobal(), o, A); + t.z += n.z, + i.z += n.z, + this.dirtyCamera(!0), + this.setCameraChanging(!0) + } + , + this.stepCameraForWalk = function(A, e) { + var t = this.getCamera() + , i = t.position + , o = t.target + , n = new y(o.x - i.x,o.y - i.y,0).normalize() + , r = new y(0,0,1) + , a = n.clone().cross(r) + , s = this.scene.getMatrixGlobal() + , l = null; + switch (A) { + case qc.FORWARD: + (l = x(t, s, n, e)).z = 0; + break; + case qc.BACK: + n.multiplyScalar(-1), + (l = x(t, s, n, e)).z = 0; + break; + case qc.LEFT: + a.multiplyScalar(-1), + (l = x(t, s, a, e)).z = 0; + break; + case qc.RIGHT: + (l = x(t, s, a, e)).z = 0 + } + i.add(l), + o.add(l), + this.dirtyCamera(!0), + this.setCameraChanging(!0) + } + , + this.hitTestWithGround = function() { + var A = this.getCamera() + , e = A.up.clone().multiplyScalar(-1) + , t = new CA(A.position.clone(),e) + , i = this.getIntersectContext(null) + , o = this.intersector.byGravity; + this.intersector.byGravity = !0; + var n = this.intersector.intersect(i, t, !1); + return this.intersector.byGravity = o, + n + } + , + this.projectPositionToBottom = function(A) { + var e = void 0; + if (A instanceof Array) + e = new y(A[0],A[1],A[2]); + else { + if (!(A instanceof y)) + return; + e = A + } + this.getCamera(); + var t = new CA(e,new y(0,0,-e.z).normalize()) + , i = this.getIntersectContext(null) + , o = this.intersector.byGravity; + this.intersector.byGravity = !0; + var n = this.intersector.intersect(i, t, !1); + if (this.intersector.byGravity = o, + n) + return n.point + } + , + this.hitTestForward = function(A) { + var e = this.getCamera() + , t = this.getWorldEye(); + t.normalize(), + t = t.multiplyScalar(A); + var i = new CA(e.position.clone(),t) + , o = this.getIntersectContext(null); + return o.camera.near = -1, + this.intersector.intersect(o, i, !1) + } + , + this.hitTestRight = function(A) { + var e = this.getCamera() + , t = this.getWorldEye(); + t.normalize(); + var i = t.cross(e.up).normalize(); + i = i.multiplyScalar(A); + var o = new CA(e.position.clone(),i) + , n = this.getIntersectContext(null); + return n.camera.near = -1, + this.intersector.intersect(n, o, !1) + } + , + this.computeGravity = function() { + this.gravity = 0; + var A = this.hitTestWithGround(); + if (null === A) { + var e = this.scene.getMatrixGlobal() + , t = new M; + t.getInverse(e); + var i = this.camera.position.clone(); + i.applyMatrix4(t), + i.z = this.scene.getBoundingBoxWorld().min.z || 0, + i.applyMatrix4(e), + this.distanceToGround = Math.abs(this.camera.position.z - i.z) + } + if (void 0 === this.manHeight) + this.computeManHeight(); + else { + var o = A ? A.distance - this.manHeight : this.distanceToGround - this.manHeight; + if (o /= this.scene.getGlobalScaleFactor(), + .1 > Math.abs(o)) + return 0; + this.gravity = o + } + } + , + this.computeManHeight = function() { + if (!this.manHeight) { + var A = this.hitTestWithGround() + , e = this.scene.getMatrixGlobal() + , t = new M; + if (t.getInverse(e), + null != A) { + var i = A.point.clone(); + i.applyMatrix4(t), + i.z += this._realManHeight * this.sceneLengthUnitFactor, + i.applyMatrix4(e), + this.manHeight = Math.abs(A.point.z - i.z) + } else { + var o = this.camera.position.clone(); + o.applyMatrix4(t), + o.z = 0; + var n = o.clone(); + n.z += this._realManHeight * this.sceneLengthUnitFactor, + o.applyMatrix4(e), + n.applyMatrix4(e), + this.manHeight = Math.abs(n.z - o.z) + } + } + } + , + this.setRealManHeight = function(A) { + A !== this._realManHeight && (this._realManHeight = A, + this.manHeight = void 0) + } + , + this.getRealManHeight = function() { + return this._realManHeight + } + , + this.walkWithParallelEye = function() { + var A = this.camera + , e = this.getWorldEye().length() + , t = this.scene.getBoundingBox().getCenter(new y) + , i = new y; + i.subVectors(t, A.position); + var o = i.length(); + i.z = 0, + i.normalize(), + i.multiplyScalar(o), + A.position.subVectors(t, i), + A.target.addVectors(A.position, i.normalize().multiplyScalar(e)); + var n = new y(0,0,1); + A.up.copy(n), + A.realUp.copy(n), + this.dirtyCamera(!0), + this.setCameraChanging(!0), + this.update(!0) + } + , + this.updateFlyMove = function(A, e) { + var t = this.camera; + this.dirtyCamera(!0), + this.setCameraChanging(!0); + var i = qc; + A & i.FORWARD && t.translateZ(-e), + A & i.BACK && t.translateZ(e), + A & i.LEFT && t.translateX(-e), + A & i.RIGHT && t.translateX(e), + A & i.UP && t.translateY(e), + A & i.DOWN && t.translateY(-e), + this.flyOnWorld() + } + , + this.flyOnWorld = function() { + var A = this.camera + , e = A.up.clone(); + A.realUp && A.up.copy(A.realUp), + A.lookAt(A.target), + A.realUp && A.up.copy(e), + this.updateCamera(), + this.adjustCameraUp(), + i(), + this.dirtyCamera(!1), + m.copy(A.position), + C.copy(A.quaternion) + } + , + this.rotateForFly = function(A, e, t, i) { + var o = this.camera + , n = o.position + , r = o.target + , a = r.clone().sub(n) + , s = new y(0,1,0) + , l = o.realUp || o.up + , c = a.clone().cross(l).normalize(); + if (this.dirtyCamera(!0), + this.setCameraChanging(!0), + jh.LockAxisZ && (e = 0), + 0 !== e) { + var h = (new f).setFromAxisAngle(c, -e) + , d = a.clone(); + d.applyQuaternion(h); + var p = d.angleTo(s); + t > (p -= .5 * Math.PI) || p > i || a.applyQuaternion(h) + } + if (0 !== A) { + var g = (new f).setFromAxisAngle(s, -A); + a.applyQuaternion(g) + } + r.addVectors(n, a), + this.flyOnWorld() + } + , + this.fitAndRotateBySelection = function() { + var A = this.viewer; + A.setPointRotateMode(kc.SELECTION), + A.zoomToSelection() + } + , + this.flyToPointWithParallelEye = function(A) { + var e = this.getWorldEye() + , t = e.length() + , i = e.clone(); + i.y = 0, + i.normalize(), + i.setLength(t); + var o = new y(0,0,1); + this.camera.up = o, + this.camera.realUp = o.clone(), + this.camera.position.copy(A), + this.camera.target.addVectors(this.camera.position, i), + this.update(!0) + } + , + this.flyToPoint = function(A) { + var e = this.getWorldEye(); + this.camera.position.copy(A), + this.camera.target.addVectors(this.camera.position, e), + this.update(!0) + } + , + this.setRoamingWalkAbsoluteHeight = function(A) {} + , + this.setCameraHeight = function(A, e) { + this.cameraAbsoluteHeightEnabled = !1, + this.cameraRelativeHeight = e, + void 0 === this.cameraConstraintHeights ? this.cameraConstraintHeights = [] : this.cameraConstraintHeights.length = 0; + for (var t = 0, i = A.length; i > t; t += 1) + this.cameraConstraintHeights[t] = A[t] + } + , + this.setCameraAbsoluteHeight = function(A) { + this.cameraAbsoluteHeightEnabled = !0, + this.cameraAbsoluteHeight = A + } + , + this.updateCameraHeight = function() { + var A = this.scene + , e = this.getCamera() + , t = A.drawingToWorld(e.position) + , i = t.z + , o = null + , n = null; + if (this.cameraAbsoluteHeightEnabled) + void 0 === this.cameraAbsoluteHeight && (this.cameraAbsoluteHeight = i), + o = this.cameraAbsoluteHeight; + else if (void 0 === this.cameraConstraintHeights) + o = i; + else { + var r = uh.findRange(this.cameraConstraintHeights, i); + if (o = this.cameraConstraintHeights[r], + o += this.cameraRelativeHeight, + this.cameraConstraintHeights.length - 1 > r) { + var a = this.cameraConstraintHeights[r + 1]; + o > a && (o = a) + } + } + o !== i && (n = A.worldToDrawing({ + x: t.x, + y: t.y, + z: o + }), + this.setCameraPosition(n)) + } + , + this.getRaycaster = function(A, e) { + var t = new Dd + , i = new s; + return this.mapWindowToViewport(A, e, i), + t.setFromCamera(i, this.camera), + t + } + , + this.translateCameraForWalk = function(A, e) { + var t = this.collisionManager; + if (0 !== A.x) + if (!1 === vc.EnableHitDetection) + this.stepCameraForWalk(qc.RIGHT, A.x * e); + else { + var i = 1; + 0 > A.x && (i = -1); + var o = this.hitTestRight(i); + if (o) { + var n = this.viewer.modelManager.getNodeInfosByUserId(o.userId); + if (!t.hasCollision({ + type: n ? n[0].type : null + }, o.distance)) { + var r = e; + Math.abs(e) > o.distance && (r = e > 0 ? o.distance - t.distance * t.factor - .1 * this.sceneLengthUnitFactor : t.distance * t.factor - o.distance + .1 * this.sceneLengthUnitFactor), + this.stepCameraForWalk(qc.RIGHT, A.x * r) + } + } else + this.stepCameraForWalk(qc.RIGHT, A.x * e) + } + if (0 !== A.y) + if (!1 === vc.EnableHitDetection) + this.stepCameraForWalk(qc.BACK, A.y * e); + else { + var a = 1; + A.y > 0 && (a = -1); + var s = this.hitTestForward(a); + if (s) { + var l = this.viewer.modelManager.getNodeInfosByUserId(s.userId); + if (!t.hasCollision({ + type: l ? l[0].type : null + }, s.distance)) { + var c = e; + Math.abs(e) > s.distance && (c = e > 0 ? s.distance - t.distance * t.factor - .1 * this.sceneLengthUnitFactor : t.distance * t.factor - s.distance + .1 * this.sceneLengthUnitFactor), + this.stepCameraForWalk(qc.BACK, A.y * c) + } + } else + this.stepCameraForWalk(qc.BACK, A.y * e) + } + if (0 !== A.z) + this.goUpDownForWalk(A.z * e * .5); + else { + var h = e; + if (0 !== this.gravity) { + var d = Math.abs(this.gravity); + h = d > h ? .2 * d : d + } + this.gravity > 0 ? this.goUpDownForWalk(-h) : 0 > this.gravity && this.goUpDownForWalk(h) + } + } + , + this.rotateCameraForWalk = function(A, e) { + 0 !== A.x && (this.goPitchForWalk(A.x * Math.PI), + A.x = 0), + 0 !== A.z && (this.goTurnForWalk(-A.z * Math.PI * e), + A.z = 0) + } + , + this.zoomCameraForWalk = function(A) { + this.adjustCameraForDolly(A, null) + } + , + this.movePlane = function(A, e, t, i, o) { + if (void 0 === o) { + var n = new EA; + n.setComponents(A.x, A.y, A.z, A.w), + o = new y, + n.coplanarPoint(o) + } + var r = new y(A.x,A.y,A.z) + , a = this.camera.getWorldDirection(new y) + , s = new EA; + s.setFromNormalAndCoplanarPoint(a, o); + var l = this.getRaycaster(e.clientX, e.clientY) + , c = new y + , h = this.getRaycaster(t.x, t.y) + , d = new y; + if (l.ray.intersectPlane(s, c) && h.ray.intersectPlane(s, d)) { + c.subVectors(c, d), + c.projectOnVector(r); + var p = c.length(); + if (0 > c.dot(r) && (p = -p), + 0 !== p) + return i && (r.multiplyScalar(p), + p = r.x + r.y + r.z), + p + } + return null + } + , + this.getZenith = function() { + var A = this.camera.position + , e = p.viewer.getBoundingBox().getCenter(); + return A.clone().sub(e.clone()).clone().angleTo(u.clone()) + } + , + this.getAzimuth = function() { + var A = this.camera.position + , e = p.viewer.getBoundingBox().getCenter() + , t = A.clone().sub(e.clone()).clone().projectOnPlane(u.clone()) + , i = t.angleTo(u.clone()); + return 0 > t.x && (i = 360 - i), + i + } + , + this.getCurrentRangeofCamera = function() { + var A = this.camera + , e = this.viewer.getBoundingBox() + , t = e.getCenter() + , i = A.position + , o = .5 * e.getSize().length() / Math.tan(a.degToRad(.5 * A.fov)); + return t.distanceTo(i) / o + } + , + this.setMaximalRangeofCamera = function(A) { + this.farFactor = A || 2 + } + , + this.getMaximalRangeofCamera = function() { + return this.farFactor + } + , + this.cameraWithinMaximumRange = function(A) { + var e = A || this.farFactor; + return this.getCurrentRangeofCamera() <= e + } + , + this.resetCameraToMaximumRange = function(A) { + var e = this.camera + , t = this.viewer.getBoundingBox() + , i = t.getCenter() + , o = e.position + , n = this.farFactor; + "number" == typeof A && (n = A); + var r = (new y).subVectors(i, o) + , s = .5 * t.getSize().length() / Math.tan(a.degToRad(.5 * e.fov)); + r.setLength(n * s); + var l = i.clone().sub(r) + , c = this.getWorldEye(); + this.camera.position.copy(l), + this.camera.target.copy(c.add(l)), + this.updateView(!0) + } + , + this.setZoomSpeed = function(A) { + "number" == typeof A && A > 0 && (this.zoomSpeed = A) + } + , + this.getZoomSpeed = function() { + return this.zoomSpeed + } + , + this.setZoomOutLimitRate = function(A) { + "number" == typeof A && A > 0 && (this.farFactor = A) + } + , + this.getZoomOutLimitRate = function() { + return this.farFactor + } + , + this.setSceneUnit = function(A) { + var e = 1; + switch (A) { + case "m": + e = .001; + break; + case "mm": + e = 1; + break; + case "km": + e = 1e-6; + break; + default: + e = 1 + } + this.collisionManager.setFactor(e), + this.sceneLengthUnitFactor = e + } + }; + Object.assign(mp.prototype, Ld.prototype); + var Cp = function() { + this.duration = 500, + this._state = null + }; + Cp.prototype.rotateCameraByViewCubeSide = function(A, e, t, i) { + var o = A.target.clone() + , n = e.getCenter(new y) + , r = A.quaternion.clone() + , a = A.position.clone() + , s = this._calculateDistanceAndEuler(t, e) + , l = (new f).setFromEuler(s.euler).inverse() + , c = new M; + c.makeRotationFromQuaternion(l); + var h = c.elements + , d = new y(-h[8],-h[9],-h[10]).normalize(); + d.setLength(s.distance); + var p = n.clone().sub(d); + if (!a.equals(p) || !r.equals(l)) { + var g = this._calculatePositionRotateInfo(r, l, a, p); + this._state && this._state.timerID && (cancelAnimationFrame(this._state.timerID), + this._state.timerID = void 0), + this._state = { + startTime: Date.now(), + startQuaternion: r, + endQuaternion: l, + startPosition: a, + endPosition: p, + startTarget: o, + endTarget: n, + positionRotateInfo: g, + onUpdate: i + }, + this._state.timerID = requestAnimationFrame(this._animate.bind(this)) + } + } + , + Cp.prototype.cancelAnimation = function() { + this._state && this._state.timerID && (cancelAnimationFrame(this._state.timerID), + this._state = void 0) + } + , + Cp.prototype._animate = function() { + if (this._state) { + var A = Date.now() + , e = this._state + , t = e.startTarget + , i = e.endTarget + , o = e.startQuaternion + , n = e.endQuaternion + , r = e.startPosition + , a = e.endPosition + , s = e.positionRotateInfo + , l = Math.min((A - e.startTime) / this.duration, 1); + l = this._easyOut(l); + var c = n.clone(); + o.equals(n) || f.slerp(o, n, c, l); + var h = a; + r.equals(a) || (h = s ? this._rotatePositionAroundCenter(s, r, a, l) : r.clone().lerp(a, l)); + var d = i.clone(); + t.equals(i) || (d = d.lerpVectors(t, i, l)), + "function" == typeof this._state.onUpdate && this._state.onUpdate(l, c, h, d), + 1 === l ? (cancelAnimationFrame(this._state.timerID), + this._state = null) : this._state.timerID = requestAnimationFrame(this._animate.bind(this)) + } + } + , + Cp.prototype._calculateDistanceAndEuler = function(A, e) { + var t = -45 + , i = 0 + , o = -135 + , n = 0 + , r = e ? e.getSize(new y) : { + x: 0, + y: 0, + z: 0 + }; + switch (A) { + case Uc.Home: + break; + case Uc.Front: + t = -90, + i = 0, + o = 0; + break; + case Uc.Right: + t = -90, + i = 0, + o = -90; + break; + case Uc.Back: + t = -90, + i = 0, + o = -180; + break; + case Uc.Left: + t = -90, + i = 0, + o = -270; + break; + case Uc.Top: + t = 0, + i = 0, + o = 0; + break; + case Uc.Bottom: + t = -180, + i = 0, + o = -180; + break; + case Uc.TopFront: + t = -45, + i = 0, + o = -90; + break; + case Uc.TopRight: + t = -45, + i = 0, + o = -180; + break; + case Uc.TopBack: + t = -45, + i = 0, + o = 90; + break; + case Uc.TopLeft: + t = -45, + i = 0, + o = 0; + break; + case Uc.BottomFront: + t = -135, + i = 0, + o = 270; + break; + case Uc.BottomRight: + t = -135, + i = 0, + o = -180; + break; + case Uc.BottomBack: + t = -135, + i = 0, + o = 90; + break; + case Uc.BottomLeft: + t = -135, + i = 0, + o = 0; + break; + case Uc.FrontRight: + t = -90, + i = 0, + o = -135; + break; + case Uc.BackRight: + t = -90, + i = 0, + o = -225; + break; + case Uc.BackLeft: + t = -90, + i = 0, + o = 45; + break; + case Uc.FrontLeft: + t = -90, + i = 0, + o = -45; + break; + case Uc.TopFrontRight: + t = -45, + i = -0, + o = -135; + break; + case Uc.TopBackRight: + t = -45, + i = 0, + o = -225; + break; + case Uc.TopBackLeft: + t = -45, + i = 0, + o = -315; + break; + case Uc.TopFrontLeft: + t = -45, + i = 0, + o = -45; + break; + case Uc.BottomFrontRight: + t = -135, + i = 0, + o = -135; + break; + case Uc.BottomBackRight: + t = -135, + i = 0, + o = -225; + break; + case Uc.BottomBackLeft: + t = -135, + i = 0, + o = 45; + break; + case Uc.BottomFrontLeft: + t = -135, + i = 0, + o = -45 + } + var a = Math.PI / 180 + , s = new F(t * a,i * a,o * a); + return 0 === (n = r.x + r.y + r.z) && (n = vc.SceneSize / 2), + { + euler: s, + distance: n + } + } + , + Cp.prototype._easyOut = function(A) { + return A * (2 - A) + } + , + Cp.prototype._calculatePositionRotateInfo = function(A, e, t, i) { + var o = (new f).multiplyQuaternions(e, A.clone().inverse()); + o.normalize(); + var n = new y(o.x,o.y,o.z).normalize() + , r = 2 * Math.acos(o.w); + if (0 !== r) { + var a = null; + if (r === Math.PI) + a = (new y).addVectors(t, i).divideScalar(2); + else { + var s = (new y).addVectors(t, i) + , l = (new y).subVectors(i, t) + , c = n.clone().cross(l).normalize() + , h = .5 * l.length() / Math.tan(r / 2); + c.setLength(h), + a = (new y).addVectors(s.multiplyScalar(.5), c) + } + var d = null + , p = null + , g = (new y).subVectors(t, a) + , u = g.length() + , m = (new y).subVectors(i, t); + if (r === Math.PI) + p = -1, + d = (new y).crossVectors(m, n); + else { + var C = (new y).subVectors(i, a); + p = Math.cos(r), + p = Math.max(-1, Math.min(1, p)), + d = C.clone().sub(g.clone().multiplyScalar(p)) + } + return { + center: a, + dot: p, + vec: d, + start: g, + radiusLength: u + } + } + } + , + Cp.prototype._rotatePositionAroundCenter = function(A, e, t, i) { + if (0 === i) + return e; + if (i >= 1) + return t; + var o = Math.acos(A.dot) * i + , n = A.start.clone() + , r = A.vec.clone().normalize() + , a = n.multiplyScalar(Math.cos(o)) + , s = r.multiplyScalar(Math.sin(o) * A.radiusLength) + , l = a.add(s); + return l.add(A.center), + l + } + ; + var yp = function(A) { + this.name = A, + this._mousePressed = !1 + }; + yp.prototype.getName = function() { + return this.name + } + , + yp.prototype.onExit = function() {} + , + yp.prototype.destroy = function() {} + , + yp.prototype.processMouseDown = function(A) { + return !1 + } + , + yp.prototype.processMouseMove = function(A) { + return !1 + } + , + yp.prototype.processMouseUp = function(A) { + return !1 + } + , + yp.prototype.processMouseWheel = function(A) { + return !1 + } + , + yp.prototype.processMouseDoubleClick = function(A) { + return !1 + } + , + yp.prototype.processKeyDown = function(A) { + return !1 + } + , + yp.prototype.processKeyUp = function(A) { + switch (A.keyCode) { + case qh: + this._mousePressed = !1 + } + return !1 + } + , + yp.prototype.processTouchstart = function(A) { + return !1 + } + , + yp.prototype.processTouchmove = function(A) { + return !1 + } + , + yp.prototype.processTouchend = function(A) { + return !1 + } + , + yp.prototype.processHover = function(A) { + return !1 + } + , + yp.prototype.onEvent = function(A) { + var e = !1; + switch (A.type) { + case "touchmove": + e = this.processTouchmove(A); + break; + case "touchstart": + e = this.processTouchstart(A); + break; + case "touchend": + e = this.processTouchend(A); + break; + case "keydown": + e = this.processKeyDown(A); + break; + case "keyup": + e = this.processKeyUp(A); + break; + case "mousewheel": + case "DOMMouseScroll": + e = this.processMouseWheel(A); + break; + case "mousedown": + this._mousePressed = !0, + e = this.processMouseDown(A); + break; + case "mousemove": + e = this._mousePressed ? this.processMouseMove(A) : this.processHover(A); + break; + case "mouseup": + this._mousePressed = !1, + e = this.processMouseUp(A); + break; + case "dblclick": + e = this.processMouseDoubleClick(A) + } + return e + } + ; + var vp = function(A) { + yp.call(this, Pc.CLIP_BY_BOX), + this.viewer = A, + this.scene = A.getScene(), + this.enablePick = !1, + this.cameraControl = A.cameraControl, + this.clipStartPoint = new y, + this.startPt = new s, + this.onClipBox = !1, + this.mapLockedBoxFaces = {}, + this.mapBoxFaceIndex = { + 0: "right", + 1: "left", + 2: "top", + 3: "bottom", + 4: "front", + 5: "back" + }; + for (var e = [], t = 0; 6 > t; t += 1) + e.push(new EA); + var i = this.scene.getClipPlanes(!0); + i.updateClippingParams = function(t) { + if (0 === t.iClipPlane.value) + A.getRenderer().clippingPlanes = Object.freeze([]); + else { + for (var i = 0, o = t.iClipPlane.value; o > i; i += 1) { + var n = t.vClipPlane.value[i] + , r = e[i]; + r.setComponents(-n.x, -n.y, -n.z, -n.w), + r.normalize() + } + A.getRenderer().clippingPlanes = e, + this.calculateClipBoundingBox(e) + } + } + , + i.init(), + this.selectIndex = null, + this.planeDistance = 0, + this.offsetSpeed = .02, + this.toggle = function(A, e) { + i.enable(A, e) + } + , + this.visible = function(A) { + i.visible = A + } + , + this.rotatable = function(A) { + i.rotatable = A + } + , + this.store = function() { + return i.store() + } + , + this.restore = function(A) { + i.restore(A) + } + , + this.reset = function() { + i.reset() + } + , + this.pointToScreen = function(A) { + var e = this.cameraControl.camera + , t = new M; + t.multiplyMatrices(e.projectionMatrix, e.matrixWorldInverse); + var i = new p(A.x,A.y,A.z,1); + i.applyMatrix4(t); + var o = new s; + o.x = (i.x / i.w + 1) / 2, + o.y = 1 - (i.y / i.w + 1) / 2; + var n = this.cameraControl.getContainerDimensions(); + return o.x = o.x * n.width + n.left, + o.y = o.y * n.height + n.top, + o + } + , + this.getPlaneDistanceInScreen = function() { + if (null === this.selectIndex) + return null; + if (2 > this.selectIndex) { + var A = i.center.clone() + , e = i.center.clone(); + A.x -= i.cubeSize.x, + e.x += i.cubeSize.x; + var t = this.pointToScreen(A) + , o = this.pointToScreen(e); + return t.x - o.x + } + var n = i.center.clone() + , r = i.center.clone(); + r.y -= i.cubeSize.y, + n.y += i.cubeSize.y; + var a = this.pointToScreen(r) + , s = this.pointToScreen(n); + return a.y - s.y + } + , + this.getPickPoint = function(A, e) { + var t = this.cameraControl.camera + , i = this.cameraControl.getContainerDimensions() + , o = (A - i.left) / i.width * 2 - 1 + , n = (i.height - (e - i.top)) / i.height * 2 - 1 + , r = new Dd; + return r.setFromCamera(new s(o,n), t), + r.ray.intersectPlane(this.plane) + } + , + this.getSelectIndex = function() { + return i.selectIndex + } + , + this._isVisible = function() { + return i.visible + } + , + this.isRotate = function() { + return i.rotatable + } + , + this.offset = function(A) { + var e = Math.floor(this.selectIndex / 2); + i.offset(this.selectIndex, this.selectIndex > 3 ? this.selectIndex % 2 == 1 ? -A * i.cubeSize.getComponent(e) * 2 : A * i.cubeSize.getComponent(e) * 2 : -A * i.cubeSize.getComponent(e) * 2) + } + , + this.setSectionBox = function(A, e) { + var t = new aA(new y(A.x,A.y,A.z),new y(e.x,e.y,e.z)); + t.applyMatrix4(this.scene.getMatrixGlobal()), + i.setSectionBox(t.min, t.max) + } + , + this.calculateOffsetByBox = function(A, e) { + var t = new aA(new y(A.x,A.y,A.z),new y(e.x,e.y,e.z)); + t.applyMatrix4(this.scene.getMatrixGlobal()), + t.setFromCenterAndSize(t.getCenter(), t.getSize().multiplyScalar(this.scene.getExpandScalar())), + i.calculateOffsetByBox(t.min, t.max) + } + , + this.moveSectionPlane = function(A, e) { + i.moveSectionPlane(A, e) + } + , + this.rotateSectionBox = function(A, e) { + i.rotateSectionBox(A, e) + } + , + this.rotate = function(A, e) { + 2 === this.selectIndex || 3 === this.selectIndex ? i.rotX(e / 180 * Math.PI * .1) : i.rotY(A / 180 * Math.PI * .1) + } + , + this.update = function(A) { + i.update(A) + } + , + this.cancelHighLight = function() { + i.cancelHighLight() + } + , + this.highLight = function() { + i.highLight() + } + , + this.lockBoxFaces = function(A) { + var e = !0; + try { + for (var t, i = A[Symbol.iterator](); !(e = (t = i.next()).done); e = !0) { + this.mapLockedBoxFaces[t.value] = !0 + } + } catch (A) {} finally { + try { + !e && i.return && i.return() + } catch (A) {} + } + } + , + this.unlockBox = function() { + this.mapLockedBoxFaces = {} + } + , + this.setProcess = function(A, e) { + this.mapLockedBoxFaces[A] || i.setProcess(A, e) + } + , + this.getProcess = function(A) { + return i.getProcess(A) + } + }; + (vp.prototype = Object.create(yp.prototype)).constructor = vp, + vp.prototype.destroy = function() { + this.cameraControl = null, + this.intersectPoint = null, + this.selectIndex = null, + this.normal = null, + this.plane = null, + this.pickHelper = null, + this.scene = null, + this.viewer = null + } + , + vp.prototype.onExit = function() { + this.toggle(!1, !1) + } + , + vp.prototype.processMouseDown = function(A) { + if (this.startPt.set(A.clientX, A.clientY), + !this.enablePick && A.button === t.LEFT) { + var e = this.cameraControl.getRaycaster(A.clientX, A.clientY) + , i = this.scene.getClipPlanes().hitTest(e) + , o = this.cameraControl.getIntersectContext(new s(A.clientX,A.clientY)) + , n = this.cameraControl.intersector.intersect(o, null, !0); + if (null !== n && i.distance >= n.distance) + return yp.prototype.processMouseDown(this, A); + if (this.selectIndex = this.getSelectIndex(), + this.planeDistance = this.getPlaneDistanceInScreen(), + null !== this.selectIndex) + return this.highLight(), + this.cameraControl.needUpdateRenderList(!0), + this.cameraControl.update(!0), + this.enablePick = !0, + this.clipStartPoint = e.ray.at(i.distance, this.clipStartPoint), + !0 + } + return yp.prototype.processMouseDown(this, A) + } + , + vp.prototype.processHover = function(A) { + if (!this.enablePick) { + var e = !1 + , t = this.cameraControl.getRaycaster(A.clientX, A.clientY) + , i = this.scene.getClipPlanes() + , o = this.getSelectIndex(); + null !== o && this.cancelHighLight(); + i.hitTest(t); + if (this.selectIndex = this.getSelectIndex(), + null !== this.selectIndex) { + if (this.highLight(), + !this.onClipBox) + this.onClipBox = !0, + this.cameraControl.viewer.modelManager.dispatchEvent({ + type: Rc.ON_CLIP_HOVER, + onClipBox: !0, + event: A + }); + e = !0 + } else if (this.onClipBox) { + this.onClipBox = !1, + this.cameraControl.viewer.modelManager.dispatchEvent({ + type: Rc.ON_CLIP_HOVER, + onClipBox: !1, + event: A + }) + } + return this.selectIndex !== o && (this.cameraControl.needUpdateRenderList(!0), + this.cameraControl.update(!0)), + e + } + return yp.prototype.processHover(this, A) + } + , + vp.prototype.processMouseUp = function(A) { + if (A.button === t.LEFT) { + var e = this.cameraControl.getRaycaster(A.clientX, A.clientY) + , i = this.scene.getClipPlanes(); + null !== this.getSelectIndex() && (this.cancelHighLight(), + this.cameraControl.needUpdateRenderList(!0), + this.cameraControl.update(!0)); + i.hitTest(e); + if (this.selectIndex = this.getSelectIndex(), + vc.ClippingCaps = !0, + null !== this.selectIndex) { + if (this.highLight(), + this.cameraControl.needUpdateRenderList(!0), + this.cameraControl.update(!0), + !this.onClipBox) + this.onClipBox = !0, + this.cameraControl.viewer.modelManager.dispatchEvent({ + type: Rc.ON_CLIP_HOVER, + onClipBox: !0, + event: A + }) + } else if (this.onClipBox) { + this.onClipBox = !1, + this.cameraControl.viewer.modelManager.dispatchEvent({ + type: Rc.ON_CLIP_HOVER, + onClipBox: !1, + event: A + }) + } + if (this.enablePick) + return this.planeDistance = 0, + this.enablePick = !1, + !0 + } + return yp.prototype.processMouseUp(this, A) + } + , + vp.prototype.processMouseMove = function(A) { + if (this.enablePick) { + if (this.isRotate()) + this.rotate(A.clientX - this.startPt.x, A.clientY - this.startPt.y), + this.startPt.set(A.clientX, A.clientY); + else { + var e = this.mapBoxFaceIndex[this.selectIndex]; + if (this.mapLockedBoxFaces[e]) + return !0; + if (!(A.clientX === this.startPt.x && A.clientY === this.startPt.y)) { + vc.ClippingCaps = !1; + var t = this.scene.getClipPlanes() + , i = this.cameraControl.movePlane(t.clipplanes[this.selectIndex], A, this.startPt, !0, this.clipStartPoint); + null !== i && t.offset(this.selectIndex, i), + this.startPt.set(A.clientX, A.clientY) + } + this.cameraControl.viewer.modelManager.dispatchEvent({ + type: Rc.ON_CLIP_MOUSE_MOVE, + draggedFaceName: e + }) + } + return this.cameraControl.update(!0), + !0 + } + return yp.prototype.processMouseMove(this, A) + } + , + vp.prototype.processTouchstart = function(A) { + if (this.startPt.set(A.touches[0].clientX, A.touches[0].clientY), + this.enablePick) + return yp.prototype.processTouchstart(this, A); + var e = this.cameraControl.getRaycaster(A.touches[0].clientX, A.touches[0].clientY); + return this.scene.getClipPlanes().hitTest(e), + this.selectIndex = this.getSelectIndex(), + this.planeDistance = this.getPlaneDistanceInScreen(), + null !== this.selectIndex ? (this.highLight(), + this.cameraControl.needUpdateRenderList(!0), + this.cameraControl.update(!0), + this.update(), + !0) : void 0 + } + , + vp.prototype.processTouchmove = function(A) { + if (null !== this.selectIndex) { + if (this.isRotate()) + this.rotate(A.touches[0].clientX - this.startPt.x, A.touches[0].clientY - this.startPt.y), + this.startPt.set(A.touches[0].clientX, A.touches[0].clientY); + else { + this.offset((2 > this.selectIndex ? A.touches[0].clientX - this.startPt.x : A.touches[0].clientY - this.startPt.y) / this.planeDistance), + this.startPt.set(A.touches[0].clientX, A.touches[0].clientY) + } + return this.cameraControl.update(!0), + this.update(), + !0 + } + return yp.prototype.processTouchmove(this, A) + } + , + vp.prototype.processTouchend = function(A) { + return this.selectIndex = null, + this.planeDistance = 0, + this.enablePick && (this.onUpdateUI({ + visible: !1 + }), + this.startPt.x === A.touches[0].clientX && this.startPt.y === A.touches[0].clientY && this.pickHelper.click(A)), + this.cameraControl.needUpdateRenderList(!0), + this.cancelHighLight(), + this.cameraControl.update(!0), + this.update(), + yp.prototype.processTouchend(this, A) + } + ; + var Ip = function(A, e, t) { + yp.call(this, Pc.COMPONENT_TRANSFORM), + this._callbackWrapper = void 0, + this._objectCallbackWrapper = void 0, + this._cancelCallback = void 0, + this.transformControl = new Ep(A,e,t), + this.bindingComponentKey = void 0 + }; + (Ip.prototype = Object.create(yp.prototype)).constructor = Ip, + Ip.prototype.destroy = function() { + this.transformControl.destory() + } + , + Ip.prototype.update = function() { + this.transformControl.updateMatrixWorld() + } + , + Ip.prototype.transformComponent = function(A, e, t, i, o) { + if (A) { + var n = this.transformControl; + n.object && A !== n.object && this.cancelTransformComponent(!1), + this._callbackWrapper && (this.transformControl.removeEventListener("change", this._callbackWrapper), + this._callbackWrapper = void 0), + this._objectCallbackWrapper && (this.transformControl.removeEventListener("objectChange", this._objectCallbackWrapper), + this._objectCallbackWrapper = void 0), + this._cancelCallback && (this._cancelCallback = void 0), + this._pauseCallbackWrapper && (this.transformControl.removeEventListener("mouseUp", this._pauseCallbackWrapper), + this._pauseCallbackWrapper = void 0), + e && (this._callbackWrapper = function(A) { + e(A) + } + , + this.transformControl.addEventListener("change", this._callbackWrapper)), + t && (this._objectCallbackWrapper = function(A) { + t(A) + } + , + this.transformControl.addEventListener("objectChange", this._objectCallbackWrapper)), + i && (this._cancelCallback = i), + o && (this._pauseCallbackWrapper = function(A) { + o(A) + } + , + this.transformControl.addEventListener("mouseUp", this._pauseCallbackWrapper)), + this._saveComponentOriginalTransformState(A), + !0 !== n.showX && (n.showX = !0), + !0 !== n.showY && (n.showY = !0), + !0 !== n.showZ && (n.showZ = !0), + !0 !== n.enabled && (n.enabled = !0), + n.attach(A) + } + } + , + Ip.prototype.cancelTransformComponent = function() { + var A = this.transformControl.object; + if (A) + return this.transformControl.detach(), + this._callbackWrapper && (this.transformControl.removeEventListener("change", this._callbackWrapper), + this._callbackWrapper = void 0), + this._objectCallbackWrapper && (this.transformControl.removeEventListener("objectChange", this._objectCallbackWrapper), + this._objectCallbackWrapper = void 0), + this._cancelCallback && (this._cancelCallback(), + this._cancelCallback = void 0), + this.bindingComponentKey = void 0, + A + } + , + Ip.prototype.switchToTranslateMode = function() { + this.transformControl.setMode("translate") + } + , + Ip.prototype.switchToRotateMode = function() { + this.transformControl.setMode("rotate") + } + , + Ip.prototype.switchToScaleMode = function() { + this.transformControl.setMode("scale") + } + , + Ip.prototype._saveComponentOriginalTransformState = function(A) { + var e; + if (A instanceof Array) + e = A; + else { + if (!(A instanceof H)) + return; + e = [A] + } + for (var t = 0, i = e.length; i > t; t += 1) { + var o = e[t]; + if (!o.userData._originalTransformState) { + var n = o.position.clone() + , r = o.quaternion.clone() + , a = o.scale.clone() + , s = o.matrix.clone() + , l = o.matrixWorld.clone(); + o.userData._originalTransformState = { + position: n, + quaternion: r, + scale: a, + matrix: s, + matrixWorld: l + } + } + } + } + , + Ip.prototype.restoreComponentOriginalTransformState = function() { + if (!this.transformControl.object) + return !1; + var A, e = this.transformControl.object; + if (e instanceof Array) + A = e; + else { + if (!(e instanceof H)) + return !1; + A = [e] + } + for (var t = !1, i = 0, o = A.length; o > i; i += 1) { + var n = A[i] + , r = n.userData._originalTransformState; + r && (n.position.copy(r.position), + n.quaternion.copy(r.quaternion), + n.scale.copy(r.scale), + n.matrix.copy(r.matrix), + n.matrixWorld.copy(r.matrixWorld), + this.transformControl.updateMatrixWorld(), + this.transformControl.dispatchEvent({ + type: "objectChange" + }), + t = !0) + } + return t + } + , + Ip.prototype.increaseTransformControlSize = function() { + var A = this.transformControl; + if (A.object && A.visible) { + var e = A.size; + if (3 > e) + return A.setSize(e + .1), + !0 + } + return !1 + } + , + Ip.prototype.decreaseTransformControlSize = function() { + var A = this.transformControl; + if (A.object && A.visible) { + var e = A.size; + if (e > .5) + return A.setSize(e - .1), + !0 + } + return !1 + } + , + Ip.prototype.setTransformSpaceToLocalSpace = function() { + console.log("不再支持") + } + , + Ip.prototype.setTransformSpaceToWorldSpace = function() { + console.log("不再支持") + } + , + Ip.prototype.switchTransformSpace = function() { + console.log("不再支持") + } + , + Ip.prototype.showTransformOnAxis = function(A) { + var e = this.transformControl; + if (e.object && e.visible) { + var t = !1; + switch (A) { + case "x": + case "X": + !0 !== e.showX && (t = !0, + e.showX = !0); + break; + case "y": + case "Y": + !0 !== e.showY && (t = !0, + e.showY = !0); + break; + case "z": + case "Z": + !0 !== e.showZ && (t = !0, + e.showZ = !0) + } + return t + } + return !1 + } + , + Ip.prototype.hideTransformOnAxis = function(A) { + var e = this.transformControl; + if (e.object && e.visible) { + var t = !1; + switch (A) { + case "x": + case "X": + !1 !== e.showX && (t = !0, + e.showX = !1); + break; + case "y": + case "Y": + !1 !== e.showY && (t = !0, + e.showY = !1); + break; + case "z": + case "Z": + !1 !== e.showZ && (t = !0, + e.showZ = !1) + } + return t + } + return !1 + } + , + Ip.prototype.disableTransform = function() { + var A = this.transformControl; + return !(!A.object || !A.visible || !1 === A.enabled) && (A.enabled = !1, + !0) + } + , + Ip.prototype.enableTransform = function() { + var A = this.transformControl; + return !(!A.object || !A.visible || !0 === A.enabled) && (A.enabled = !0, + !0) + } + , + Ip.prototype.processMouseDown = function(A) { + return !!this.transformControl.enabled && (!!this.transformControl.mouseHover(A) && this.transformControl.mouseDown(A)) + } + , + Ip.prototype.processMouseMove = function(A) { + return !!this.transformControl.enabled && this.transformControl.mouseMove(A) + } + , + Ip.prototype.processMouseUp = function(A) { + return !!this.transformControl.enabled && this.transformControl.mouseUp(A) + } + , + Ip.prototype.processHover = function(A) { + return !!this.transformControl.enabled && this.transformControl.mouseHover(A) + } + , + Ip.onExit = function() { + this.destroy() + } + ; + var Ep = function(A, e, t) { + H.call(this), + t = void 0 !== t ? t : document, + this.scene = A, + this.visible = !1; + var i = new Bp; + this.add(i); + var o = new xp; + this.add(o); + var n = this; + N("camera", e), + N("object", void 0), + N("enabled", !0), + N("axis", null), + N("mode", "translate"), + N("translationSnap", null), + N("rotationSnap", null), + N("space", "world"), + N("size", 1), + N("dragging", !1), + N("showX", !0), + N("showY", !0), + N("showZ", !0); + var r = { + type: "change" + } + , a = { + type: "mouseDown" + } + , s = { + type: "mouseUp", + mode: n.mode + } + , l = { + type: "objectChange" + } + , c = new Dd + , h = new y + , d = new y + , p = new f + , g = { + X: new y(1,0,0), + Y: new y(0,1,0), + Z: new y(0,0,1) + } + , u = new y + , m = new y + , C = new y + , v = new y + , I = new y + , E = new y + , B = 0 + , x = new y + , S = new f + , w = new y + , b = new y + , U = new f + , F = new f + , K = new y(1,1,1) + , Q = new y + , R = new y + , T = new f + , k = new f + , D = new y + , L = new y; + function N(A, e) { + var t = e; + Object.defineProperty(n, A, { + get: function() { + return void 0 !== t ? t : e + }, + set: function(e) { + t !== e && (t = e, + o[A] = e, + i[A] = e, + n.dispatchEvent({ + type: A + "-changed", + value: e + }), + n.dispatchEvent(r)) + } + }), + n[A] = e, + o[A] = e, + i[A] = e + } + function O(A) { + var e = A.changedTouches ? A.changedTouches[0] : A + , i = t.getBoundingClientRect(); + return { + x: (e.clientX - i.left) / i.width * 2 - 1, + y: -(e.clientY - i.top) / i.height * 2 + 1, + button: A.button + } + } + N("worldPosition", R), + N("worldPositionStart", Q), + N("worldQuaternion", T), + N("cameraPosition", x), + N("cameraQuaternion", S), + N("pointStart", u), + N("pointEnd", m), + N("rotationAxis", v), + N("rotationAngle", B), + N("eye", L), + this.attach = function(e) { + e && (this.object !== e && (this.scene.add(this), + A.componentTransformControl = this, + this.object = e, + r.object = e, + l.object = e, + this.updateMatrixWorld()), + this.visible = !0) + } + , + this.detach = function() { + this.object && (this.object = void 0, + r.object = void 0), + this.parent && this.parent.remove(this), + this.scene.componentTransformControl = void 0 + } + , + this.destory = function() { + this.scene.componentTransformControl = void 0, + this.scene = void 0, + this.axis = void 0, + this.camera = void 0 + } + , + this.updateMatrixWorld = function() { + if (void 0 !== this.object) { + var A, e = new aA; + if (this.object instanceof Array) + A = this.object; + else { + if (!(this.object instanceof H)) + return; + A = [this.object] + } + for (var t = 0, i = A.length; i > t; t += 1) { + var o = A[t]; + if (o.geometry) + e.expandByObject(A[t]); + else { + var n = new y; + o.getWorldPosition(n), + e.expandByPoint(n) + } + } + A[0].parent && A[0].parent.matrixWorld.decompose(b, U, K), + A[0].matrixWorld.decompose(R, T, D), + e.getCenter(R), + F.copy(U).inverse(), + k.copy(T).inverse() + } + this.camera.updateMatrixWorld(), + this.camera.matrixWorld.decompose(x, S, w), + this.camera instanceof je ? L.copy(x).sub(R).normalize() : this.camera instanceof Ka ? L.copy(x).normalize() : this.camera instanceof kd && (this.camera.isPerspective ? L.copy(x).sub(R).normalize() : L.copy(x).normalize()), + H.prototype.updateMatrixWorld.call(this) + } + , + this.mouseHover = function(A) { + var e = O(A); + if (void 0 === this.object || !0 === this.dragging || void 0 !== e.button && 0 !== e.button) + return !1; + c.setFromCamera(e, this.camera); + var t, o = c.intersectObjects(i.picker[this.mode].children, !0) || !1; + return o ? (this.axis = o.object.name, + t = !0) : (this.axis = null, + t = !1), + this.updateMatrixWorld(), + t + } + , + this.mouseDown = function(A) { + var e = O(A); + if (void 0 === this.object || !0 === this.dragging || void 0 !== e.button && 0 !== e.button) + return !1; + if ((0 === e.button || void 0 === e.button) && null !== this.axis) { + c.setFromCamera(e, this.camera); + var t = c.intersectObjects([o], !0) || !1; + return !1 !== t && (t && (Q.copy(R), + u.copy(t.point).sub(Q)), + this.dragging = !0, + a.mode = this.mode, + this.dispatchEvent(a), + !0) + } + } + , + this.mouseMove = function(A) { + var e = O(A) + , t = this.axis + , i = this.mode + , n = void 0; + if (void 0 === this.object || null === t || !1 === this.dragging || void 0 !== e.button && 0 !== e.button) + return !1; + c.setFromCamera(e, this.camera); + var a = c.intersectObjects([o], !0) || !1; + if (!1 === a) + return !1; + if (m.copy(a.point).sub(Q), + "translate" === i) + C.copy(m).sub(u), + -1 === t.indexOf("X") && (C.x = 0), + -1 === t.indexOf("Y") && (C.y = 0), + -1 === t.indexOf("Z") && (C.z = 0), + C.applyQuaternion(F).divide(K), + 0 === C.x && 0 === C.y && 0 === C.z || (n = this._translateCurrentObject(C)); + else if ("scale" === i) { + if (-1 !== t.search("XYZ")) { + var s = m.length() / u.length(); + 0 > m.dot(u) && (s *= -1), + d.set(s, s, s) + } else + h.copy(u), + d.copy(m), + h.applyQuaternion(k), + d.applyQuaternion(k), + d.divide(h), + -1 === t.search("X") && (d.x = 1), + -1 === t.search("Y") && (d.y = 1), + -1 === t.search("Z") && (d.z = 1); + 1 === d.x && 1 === d.y && 1 === d.z || (n = this._scaleCurrentObject(d)) + } else if ("rotate" === i) { + C.copy(m).sub(u); + var y = 20 / R.distanceTo(h.setFromMatrixPosition(this.camera.matrixWorld)); + if ("E" === t ? (v.copy(L), + B = m.angleTo(u), + I.copy(u).normalize(), + E.copy(m).normalize(), + B *= 0 > E.cross(I).dot(L) ? 1 : -1) : "XYZE" === t ? (v.copy(C).cross(L).normalize(), + B = C.dot(h.copy(v).cross(this.eye)) * y) : "X" !== t && "Y" !== t && "Z" !== t || (v.copy(g[t]), + h.copy(g[t]), + B = C.dot(h.cross(L).normalize()) * y), + this.rotationAngle = B, + 0 !== B) { + var x = new f; + v.applyQuaternion(F), + x.copy(p.setFromAxisAngle(v, B)), + x.normalize(), + n = this._rotateCurrentObject(x) + } + } + return n ? (this.updateMatrixWorld(), + this.dispatchEvent(r), + l.matrix = n.clone(), + this.dispatchEvent(l), + u.copy(m), + !0) : void 0 + } + , + this.mouseUp = function(A) { + var e = O(A); + return (void 0 === e.button || 0 === e.button) && (this.dragging && null !== this.axis && (s.mode = this.mode, + this.dispatchEvent(s)), + this.dragging = !1, + void 0 === e.button && (this.axis = null), + !0) + } + , + this.getMode = function() { + return n.mode + } + , + this.setMode = function(A) { + n.mode = A, + this.updateMatrixWorld() + } + , + this.setTranslationSnap = function(A) { + n.translationSnap = A + } + , + this.setRotationSnap = function(A) { + n.rotationSnap = A + } + , + this.setSize = function(A) { + n.size = A + } + , + this.setSpace = function(A) { + n.space = A + } + , + this.getBoundingBox = function() { + return i.getBoundingBox() + } + , + this._scaleCurrentObject = function() { + var A = new M + , e = new M + , t = new M + , i = new M + , o = new y; + return function(n) { + var r; + if (this.object instanceof Array) + r = this.object; + else { + if (!(this.object instanceof H)) + return; + r = [this.object] + } + for (var a = 0, s = r.length; s > a; a += 1) { + var l = r[a]; + l.geometry ? (l.geometry.boundingBox || l.geometry.computeBoundingBox(), + l.geometry.boundingBox.getCenter(o), + o.applyMatrix4(l.matrix)) : o.copy(l.position), + e.makeTranslation(-o.x, -o.y, -o.z), + t.makeScale(n.x, n.y, n.z), + i.makeTranslation(o.x, o.y, o.z), + A.identity(), + A.multiply(i), + A.multiply(t), + A.multiply(e); + var c = l.matrixAutoUpdate; + l.matrixAutoUpdate = !1, + l.applyMatrix4(A), + l.updateMatrixWorld(!0), + l.matrixAutoUpdate = c + } + return A + } + }(), + this._rotateCurrentObject = function() { + var A = new M + , e = new M + , t = new M + , i = new M + , o = new y; + return function(n) { + var r; + if (this.object instanceof Array) + r = this.object; + else { + if (!(this.object instanceof H)) + return; + r = [this.object] + } + for (var a = 0, s = r.length; s > a; a += 1) { + var l = r[a]; + l.geometry ? (l.geometry.boundingBox || l.geometry.computeBoundingBox(), + l.geometry.boundingBox.getCenter(o), + o.applyMatrix4(l.matrix)) : o.copy(l.position), + A.makeTranslation(-o.x, -o.y, -o.z), + e.makeRotationFromQuaternion(n), + t.makeTranslation(o.x, o.y, o.z), + i.identity(), + i.multiply(t), + i.multiply(e), + i.multiply(A); + var c = l.matrixAutoUpdate; + l.matrixAutoUpdate = !1, + l.applyMatrix4(i), + l.matrixAutoUpdate = c, + l.updateMatrixWorld(!0) + } + return i + } + }(), + this._translateCurrentObject = function() { + var A = new M; + return function(e) { + var t; + if (this.object instanceof Array) + t = this.object; + else { + if (!(this.object instanceof H)) + return; + t = [this.object] + } + A.makeTranslation(e.x, e.y, e.z); + for (var i = 0, o = t.length; o > i; i += 1) { + var n = t[i] + , r = n.matrixAutoUpdate; + n.matrixAutoUpdate = !1, + n.applyMatrix4(A), + n.matrixAutoUpdate = r, + n.updateMatrixWorld(!0) + } + return A + } + }() + }; + Ep.prototype = Object.assign(Object.create(H.prototype), { + constructor: Ep, + isTransformControls: !0 + }); + var Bp = function() { + H.call(this), + this.type = "TransformControlsGizmo"; + var A = new jA({ + depthTest: !1, + depthWrite: !1, + transparent: !0, + side: 2, + fog: !1 + }) + , e = new ko({ + depthTest: !1, + depthWrite: !1, + transparent: !0, + linewidth: 1, + fog: !1 + }) + , t = A.clone(); + t.opacity = .15; + var i = A.clone(); + i.opacity = .33; + var o = A.clone(); + o.color.set(16711680); + var n = A.clone(); + n.color.set(65280); + var r = A.clone(); + r.color.set(255); + var a = A.clone(); + a.opacity = .25; + var s = a.clone(); + s.color.set(16776960); + var l = a.clone(); + l.color.set(65535); + var c = a.clone(); + c.color.set(16711935), + A.clone().color.set(16776960); + var h = e.clone(); + h.color.set(16711680); + var d = e.clone(); + d.color.set(65280); + var p = e.clone(); + p.color.set(255); + var g = e.clone(); + g.color.set(65535); + var u = e.clone(); + u.color.set(16711935); + var m = e.clone(); + m.color.set(16776960); + var C = e.clone(); + C.color.set(7895160); + var v = m.clone(); + v.opacity = .25; + var I = new hr(0,.05,.2,12,1,!1) + , E = new Ne(.125,.125,.125) + , B = new he; + B.setAttribute("position", new Ae([0, 0, 0, 1, 0, 0],3)); + var x, S = function(A, e) { + for (var t = new he, i = [], o = 0; 64 * e >= o; ++o) + i.push(0, Math.cos(o / 32 * Math.PI) * A, Math.sin(o / 32 * Math.PI) * A); + return t.setAttribute("position", new Ae(i,3)), + t + }, w = { + X: [[new Ue(I,o), [1, 0, 0], [0, 0, -Math.PI / 2], null, "fwd"], [new Ue(I,o), [1, 0, 0], [0, 0, Math.PI / 2], null, "bwd"], [new Go(B,h)]], + Y: [[new Ue(I,n), [0, 1, 0], null, null, "fwd"], [new Ue(I,n), [0, 1, 0], [Math.PI, 0, 0], null, "bwd"], [new Go(B,d), null, [0, 0, Math.PI / 2]]], + Z: [[new Ue(I,r), [0, 0, 1], [Math.PI / 2, 0, 0], null, "fwd"], [new Ue(I,r), [0, 0, 1], [-Math.PI / 2, 0, 0], null, "bwd"], [new Go(B,p), null, [0, -Math.PI / 2, 0]]], + XYZ: [[new Ue(new dn(.1,0),a), [0, 0, 0], [0, 0, 0]]], + XY: [[new Ue(new et(.295,.295),s), [.15, .15, 0]], [new Go(B,m), [.18, .3, 0], null, [.125, 1, 1]], [new Go(B,m), [.3, .18, 0], [0, 0, Math.PI / 2], [.125, 1, 1]]], + YZ: [[new Ue(new et(.295,.295),l), [0, .15, .15], [0, Math.PI / 2, 0]], [new Go(B,g), [0, .18, .3], [0, 0, Math.PI / 2], [.125, 1, 1]], [new Go(B,g), [0, .3, .18], [0, -Math.PI / 2, 0], [.125, 1, 1]]], + XZ: [[new Ue(new et(.295,.295),c), [.15, 0, .15], [-Math.PI / 2, 0, 0]], [new Go(B,u), [.18, 0, .3], null, [.125, 1, 1]], [new Go(B,u), [.3, 0, .18], [0, -Math.PI / 2, 0], [.125, 1, 1]]] + }, b = { + X: [[new Ue(new hr(.2,0,1,4,1,!1),t), [.6, 0, 0], [0, 0, -Math.PI / 2]]], + Y: [[new Ue(new hr(.2,0,1,4,1,!1),t), [0, .6, 0]]], + Z: [[new Ue(new hr(.2,0,1,4,1,!1),t), [0, 0, .6], [Math.PI / 2, 0, 0]]], + XYZ: [[new Ue(new dn(.2,0),t)]], + XY: [[new Ue(new et(.4,.4),t), [.2, .2, 0]]], + YZ: [[new Ue(new et(.4,.4),t), [0, .2, .2], [0, Math.PI / 2, 0]]], + XZ: [[new Ue(new et(.4,.4),t), [.2, 0, .2], [-Math.PI / 2, 0, 0]]] + }, U = { + START: [[new Ue(new dn(.01,2),i), null, null, null, "helper"]], + END: [[new Ue(new dn(.01,2),i), null, null, null, "helper"]], + DELTA: [[new Go((x = new he, + x.setAttribute("position", new Ae([0, 0, 0, 1, 1, 1],3)), + x),i), null, null, null, "helper"]], + X: [[new Go(B,i.clone()), [-1e3, 0, 0], null, [1e6, 1, 1], "helper"]], + Y: [[new Go(B,i.clone()), [0, -1e3, 0], [0, 0, Math.PI / 2], [1e6, 1, 1], "helper"]], + Z: [[new Go(B,i.clone()), [0, 0, -1e3], [0, -Math.PI / 2, 0], [1e6, 1, 1], "helper"]] + }, K = { + X: [[new Go(S(1, .5),h)], [new Ue(new dn(.04,0),o), [0, 0, .99], null, [1, 3, 1]]], + Y: [[new Go(S(1, .5),d), null, [0, 0, -Math.PI / 2]], [new Ue(new dn(.04,0),n), [0, 0, .99], null, [3, 1, 1]]], + Z: [[new Go(S(1, .5),p), null, [0, Math.PI / 2, 0]], [new Ue(new dn(.04,0),r), [.99, 0, 0], null, [1, 3, 1]]], + E: [[new Go(S(1.25, 1),v), null, [0, Math.PI / 2, 0]], [new Ue(new hr(.03,0,.15,4,1,!1),v), [1.17, 0, 0], [0, 0, -Math.PI / 2], [1, 1, .001]], [new Ue(new hr(.03,0,.15,4,1,!1),v), [-1.17, 0, 0], [0, 0, Math.PI / 2], [1, 1, .001]], [new Ue(new hr(.03,0,.15,4,1,!1),v), [0, -1.17, 0], [Math.PI, 0, 0], [1, 1, .001]], [new Ue(new hr(.03,0,.15,4,1,!1),v), [0, 1.17, 0], [0, 0, 0], [1, 1, .001]]], + XYZE: [[new Go(S(1, 1),C), null, [0, Math.PI / 2, 0]]] + }, Q = { + AXIS: [[new Go(B,i.clone()), [-1e3, 0, 0], null, [1e6, 1, 1], "helper"]] + }, R = { + X: [[new Ue(new En(1,.1,4,24),t), [0, 0, 0], [0, -Math.PI / 2, -Math.PI / 2]]], + Y: [[new Ue(new En(1,.1,4,24),t), [0, 0, 0], [Math.PI / 2, 0, 0]]], + Z: [[new Ue(new En(1,.1,4,24),t), [0, 0, 0], [0, 0, -Math.PI / 2]]], + E: [[new Ue(new En(1.25,.1,2,24),t)]], + XYZE: [[new Ue(new er(.7,10,8),t)]] + }, T = { + X: [[new Ue(E,o), [.8, 0, 0], [0, 0, -Math.PI / 2]], [new Go(B,h), null, null, [.8, 1, 1]]], + Y: [[new Ue(E,n), [0, .8, 0]], [new Go(B,d), null, [0, 0, Math.PI / 2], [.8, 1, 1]]], + Z: [[new Ue(E,r), [0, 0, .8], [Math.PI / 2, 0, 0]], [new Go(B,p), null, [0, -Math.PI / 2, 0], [.8, 1, 1]]], + XY: [[new Ue(E,s), [.85, .85, 0], null, [2, 2, .2]], [new Go(B,m), [.855, .98, 0], null, [.125, 1, 1]], [new Go(B,m), [.98, .855, 0], [0, 0, Math.PI / 2], [.125, 1, 1]]], + YZ: [[new Ue(E,l), [0, .85, .85], null, [.2, 2, 2]], [new Go(B,g), [0, .855, .98], [0, 0, Math.PI / 2], [.125, 1, 1]], [new Go(B,g), [0, .98, .855], [0, -Math.PI / 2, 0], [.125, 1, 1]]], + XZ: [[new Ue(E,c), [.85, 0, .85], null, [2, .2, 2]], [new Go(B,u), [.855, 0, .98], null, [.125, 1, 1]], [new Go(B,u), [.98, 0, .855], [0, -Math.PI / 2, 0], [.125, 1, 1]]], + XYZX: [[new Ue(new Ne(.125,.125,.125),a), [1.1, 0, 0]]], + XYZY: [[new Ue(new Ne(.125,.125,.125),a), [0, 1.1, 0]]], + XYZZ: [[new Ue(new Ne(.125,.125,.125),a), [0, 0, 1.1]]] + }, k = { + X: [[new Ue(new hr(.2,0,.8,4,1,!1),t), [.5, 0, 0], [0, 0, -Math.PI / 2]]], + Y: [[new Ue(new hr(.2,0,.8,4,1,!1),t), [0, .5, 0]]], + Z: [[new Ue(new hr(.2,0,.8,4,1,!1),t), [0, 0, .5], [Math.PI / 2, 0, 0]]], + XY: [[new Ue(E,t), [.85, .85, 0], null, [3, 3, .2]]], + YZ: [[new Ue(E,t), [0, .85, .85], null, [.2, 3, 3]]], + XZ: [[new Ue(E,t), [.85, 0, .85], null, [3, .2, 3]]], + XYZX: [[new Ue(new Ne(.2,.2,.2),t), [1.1, 0, 0]]], + XYZY: [[new Ue(new Ne(.2,.2,.2),t), [0, 1.1, 0]]], + XYZZ: [[new Ue(new Ne(.2,.2,.2),t), [0, 0, 1.1]]] + }, D = { + X: [[new Go(B,i.clone()), [-1e3, 0, 0], null, [1e6, 1, 1], "helper"]], + Y: [[new Go(B,i.clone()), [0, -1e3, 0], [0, 0, Math.PI / 2], [1e6, 1, 1], "helper"]], + Z: [[new Go(B,i.clone()), [0, 0, -1e3], [0, -Math.PI / 2, 0], [1e6, 1, 1], "helper"]] + }, L = function(A) { + var e = new H; + for (var t in A) + for (var i = A[t].length; i--; ) { + var o = A[t][i][0].clone() + , n = A[t][i][1] + , r = A[t][i][2] + , a = A[t][i][3] + , s = A[t][i][4]; + o.name = t, + o.tag = s, + n && o.position.set(n[0], n[1], n[2]), + r && o.rotation.set(r[0], r[1], r[2]), + a && o.scale.set(a[0], a[1], a[2]), + o.updateMatrix(); + var l = o.geometry.clone(); + l.applyMatrix4(o.matrix), + o.geometry = l, + o.renderOrder = 1 / 0, + o.position.set(0, 0, 0), + o.rotation.set(0, 0, 0), + o.scale.set(1, 1, 1), + e.add(o) + } + return e + }, N = new F, O = new y(0,1,0), V = new y(0,0,0), G = new M, P = new f, q = new f, j = new f, Y = new y(1,0,0), W = new y(0,1,0), J = new y(0,0,1); + this.gizmo = {}, + this.picker = {}, + this.helper = {}, + this.add(this.gizmo.translate = L(w)), + this.add(this.gizmo.rotate = L(K)), + this.add(this.gizmo.scale = L(T)), + this.add(this.picker.translate = L(b)), + this.add(this.picker.rotate = L(R)), + this.add(this.picker.scale = L(k)), + this.add(this.helper.translate = L(U)), + this.add(this.helper.rotate = L(Q)), + this.add(this.helper.scale = L(D)), + this.picker.translate.visible = !1, + this.picker.rotate.visible = !1, + this.picker.scale.visible = !1, + this.updateMatrixWorld = function() { + var A = this.space; + "scale" === this.mode && (A = "local"); + var e = "local" === A ? this.worldQuaternion : j; + this.gizmo.translate.visible = "translate" === this.mode, + this.gizmo.rotate.visible = "rotate" === this.mode, + this.gizmo.scale.visible = "scale" === this.mode, + this.helper.translate.visible = "translate" === this.mode, + this.helper.rotate.visible = "rotate" === this.mode, + this.helper.scale.visible = "scale" === this.mode; + var t = []; + t = (t = (t = t.concat(this.picker[this.mode].children)).concat(this.gizmo[this.mode].children)).concat(this.helper[this.mode].children); + for (var i = this.boundingBox ? this.boundingBox.makeEmpty() : new aA, o = 0; t.length > o; o++) { + var n = t[o]; + n.visible = !0, + n.rotation.set(0, 0, 0), + n.position.copy(this.worldPosition); + var r = this.worldPosition.distanceTo(this.cameraPosition); + if (n.scale.set(1, 1, 1).multiplyScalar(r * this.size / 7), + "helper" !== n.tag) { + if (n.quaternion.copy(e), + "translate" === this.mode || "scale" === this.mode) { + "X" !== n.name && "XYZX" !== n.name || Math.abs(O.copy(Y).applyQuaternion(e).dot(this.eye)) > .99 && (n.scale.set(1e-10, 1e-10, 1e-10), + n.visible = !1), + "Y" !== n.name && "XYZY" !== n.name || Math.abs(O.copy(W).applyQuaternion(e).dot(this.eye)) > .99 && (n.scale.set(1e-10, 1e-10, 1e-10), + n.visible = !1), + "Z" !== n.name && "XYZZ" !== n.name || Math.abs(O.copy(J).applyQuaternion(e).dot(this.eye)) > .99 && (n.scale.set(1e-10, 1e-10, 1e-10), + n.visible = !1), + "XY" === n.name && .2 > Math.abs(O.copy(J).applyQuaternion(e).dot(this.eye)) && (n.scale.set(1e-10, 1e-10, 1e-10), + n.visible = !1), + "YZ" === n.name && .2 > Math.abs(O.copy(Y).applyQuaternion(e).dot(this.eye)) && (n.scale.set(1e-10, 1e-10, 1e-10), + n.visible = !1), + "XZ" === n.name && .2 > Math.abs(O.copy(W).applyQuaternion(e).dot(this.eye)) && (n.scale.set(1e-10, 1e-10, 1e-10), + n.visible = !1), + -1 !== n.name.search("X") && (0 > O.copy(Y).applyQuaternion(e).dot(this.eye) ? "fwd" === n.tag ? n.visible = !1 : n.scale.x *= -1 : "bwd" === n.tag && (n.visible = !1)), + -1 !== n.name.search("Y") && (0 > O.copy(W).applyQuaternion(e).dot(this.eye) ? "fwd" === n.tag ? n.visible = !1 : n.scale.y *= -1 : "bwd" === n.tag && (n.visible = !1)), + -1 !== n.name.search("Z") && (0 > O.copy(J).applyQuaternion(e).dot(this.eye) ? "fwd" === n.tag ? n.visible = !1 : n.scale.z *= -1 : "bwd" === n.tag && (n.visible = !1)) + } else + "rotate" === this.mode && (q.copy(e), + O.copy(this.eye).applyQuaternion(P.copy(e).inverse()), + -1 !== n.name.search("E") && n.quaternion.setFromRotationMatrix(G.lookAt(this.eye, V, W)), + "X" === n.name && (P.setFromAxisAngle(Y, Math.atan2(-O.y, O.z)), + P.multiplyQuaternions(q, P), + n.quaternion.copy(P)), + "Y" === n.name && (P.setFromAxisAngle(W, Math.atan2(O.x, O.z)), + P.multiplyQuaternions(q, P), + n.quaternion.copy(P)), + "Z" === n.name && (P.setFromAxisAngle(J, Math.atan2(O.y, O.x)), + P.multiplyQuaternions(q, P), + n.quaternion.copy(P))); + n.visible = n.visible && (-1 === n.name.indexOf("X") || this.showX), + n.visible = n.visible && (-1 === n.name.indexOf("Y") || this.showY), + n.visible = n.visible && (-1 === n.name.indexOf("Z") || this.showZ), + n.visible = n.visible && (-1 === n.name.indexOf("E") || this.showX && this.showY && this.showZ), + n.material._opacity = n.material._opacity || n.material.opacity, + n.material._color = n.material._color || n.material.color.clone(), + n.material.color.copy(n.material._color), + n.material.opacity = n.material._opacity, + this.enabled ? this.axis && (n.name === this.axis || this.axis.split("").some((function(A) { + return n.name === A + } + )) ? (n.material.opacity = 1, + n.material.color.lerp(new LA(1,1,1), .5)) : (n.material.opacity *= .25, + n.material.color.lerp(new LA(1,1,1), .5))) : (n.material.opacity *= .5, + n.material.color.lerp(new LA(1,1,1), .5)), + i.expandByObject(n) + } else if (n.visible = !1, + "AXIS" === n.name) + n.position.copy(this.worldPositionStart), + n.visible = !!this.axis, + "X" === this.axis && (P.setFromEuler(N.set(0, 0, 0)), + n.quaternion.copy(e).multiply(P), + Math.abs(O.copy(Y).applyQuaternion(e).dot(this.eye)) > .9 && (n.visible = !1)), + "Y" === this.axis && (P.setFromEuler(N.set(0, 0, Math.PI / 2)), + n.quaternion.copy(e).multiply(P), + Math.abs(O.copy(W).applyQuaternion(e).dot(this.eye)) > .9 && (n.visible = !1)), + "Z" === this.axis && (P.setFromEuler(N.set(0, Math.PI / 2, 0)), + n.quaternion.copy(e).multiply(P), + Math.abs(O.copy(J).applyQuaternion(e).dot(this.eye)) > .9 && (n.visible = !1)), + "XYZE" === this.axis && (P.setFromEuler(N.set(0, Math.PI / 2, 0)), + O.copy(this.rotationAxis), + n.quaternion.setFromRotationMatrix(G.lookAt(V, O, W)), + n.quaternion.multiply(P), + n.visible = this.dragging), + "E" === this.axis && (n.visible = !1); + else if ("START" === n.name) + n.position.copy(this.worldPositionStart), + n.visible = this.dragging; + else if ("END" === n.name) + n.position.copy(this.worldPosition), + n.visible = this.dragging; + else if ("DELTA" === n.name) { + n.position.set(0, 0, 0), + n.scale.set(1, 1, 1); + var a = n.geometry.getAttribute("position"); + a.setXYZ(0, this.worldPositionStart.x, this.worldPositionStart.y, this.worldPositionStart.z), + a.setXYZ(1, this.worldPosition.x, this.worldPosition.y, this.worldPosition.z), + a.needsUpdate = !0, + n.visible = this.dragging + } else + n.quaternion.copy(e), + n.position.copy(this.dragging ? this.worldPositionStart : this.worldPosition), + this.axis && (n.visible = -1 !== this.axis.search(n.name)) + } + this.boundingBox = i, + H.prototype.updateMatrixWorld.call(this) + } + , + this.getBoundingBox = function() { + return this.boundingBox || this.updateMatrixWorld(), + this.boundingBox + } + }; + Bp.prototype = Object.assign(Object.create(H.prototype), { + constructor: Bp, + isTransformControlsGizmo: !0 + }); + var xp = function() { + Ue.call(this, new et(4,4,2,2), new jA({ + visible: !1, + wireframe: !0, + side: 2, + transparent: !0, + opacity: .1 + })), + this.type = "TransformControlsPlane"; + var A = new y(1,0,0) + , e = new y(0,1,0) + , t = new y(0,0,1) + , i = new y + , o = new y + , n = new y + , r = new M + , a = new f; + this.updateMatrixWorld = function() { + var s = this.space; + switch (this.position.copy(this.worldPosition), + "scale" === this.mode && (s = "local"), + A.set(1, 0, 0).applyQuaternion("local" === s ? this.worldQuaternion : a), + e.set(0, 1, 0).applyQuaternion("local" === s ? this.worldQuaternion : a), + t.set(0, 0, 1).applyQuaternion("local" === s ? this.worldQuaternion : a), + n.copy(e), + this.mode) { + case "translate": + case "scale": + switch (this.axis) { + case "X": + n.copy(this.eye).cross(A), + o.copy(A).cross(n); + break; + case "Y": + n.copy(this.eye).cross(e), + o.copy(e).cross(n); + break; + case "Z": + n.copy(this.eye).cross(t), + o.copy(t).cross(n); + break; + case "XY": + o.copy(t); + break; + case "YZ": + o.copy(A); + break; + case "XZ": + n.copy(t), + o.copy(e); + break; + case "XYZ": + case "E": + o.set(0, 0, 0) + } + break; + case "rotate": + default: + o.set(0, 0, 0) + } + 0 === o.length() ? this.quaternion.copy(this.cameraQuaternion) : (r.lookAt(i.set(0, 0, 0), o, n), + this.quaternion.setFromRotationMatrix(r)); + var l = this.worldPosition.distanceTo(this.cameraPosition); + this.scale.set(1, 1, 1).multiplyScalar(l * this.size / 7), + H.prototype.updateMatrixWorld.call(this) + } + }; + xp.prototype = Object.assign(Object.create(Ue.prototype), { + constructor: xp, + isTransformControlsPlane: !0 + }); + var Sp = function(A) { + yp.call(this, Pc.CLIP_FILL), + this.viewer = A, + this.scene = A.getScene(), + this.enablePick = !1, + this.rotX = !0, + this.onClipPlane = !1, + this.cameraControl = A.cameraControl, + this.startPt = new s, + this.endPt = new s, + this.frustum = new Ze, + this.modelManager = this.cameraControl.viewer.modelManager; + var e = this.scene.getFillClipPlane(); + e.updateClippingParams = function(e) { + if (0 === e.iClipPlane.value) + A.getRenderer().clippingPlanes = Object.freeze([]); + else { + var t = [new EA] + , i = e.vClipPlane.value[0] + , o = t[0]; + o.setComponents(-i.x, -i.y, -i.z, -i.w), + o.normalize(), + A.getRenderer().clippingPlanes = t, + this.renderClipPlane = new EA, + this.renderClipPlane.setComponents(i.x, i.y, i.z, -i.w), + this.renderClipPlane.normalize(), + this.calculateFillClipBoundingBox(o.coplanarPoint(new y)) + } + } + , + e.init(), + this.planeDistance = 0, + this.offsetSpeed = .02, + this.toggle = function(A, t) { + e.enable(A, t), + e.update() + } + , + this.visible = function(A) { + e.visible = A, + e.update() + } + , + this.rotatable = function(A) { + e.rotatable = A, + e.update() + } + , + this.hit = function() { + return e.hit + } + , + this.pointToScreen = function(A) { + var e = this.cameraControl.camera + , t = new M; + t.multiplyMatrices(e.projectionMatrix, e.matrixWorldInverse); + var i = new p(A.x,A.y,A.z,1); + i.applyMatrix4(t); + var o = new s; + o.x = (i.x / i.w + 1) / 2, + o.y = 1 - (i.y / i.w + 1) / 2; + var n = this.cameraControl.getContainerDimensions(); + return o.x = o.x * n.width + n.left, + o.y = o.y * n.height + n.top, + o + } + , + this.getPlaneDistanceInScreen = function() { + if (null === this.selectIndex) + return null; + if (2 > this.selectIndex) { + var A = e.clipPlanes.center.clone() + , t = e.clipPlanes.center.clone(); + A.x -= e.clipPlanes.cubeSize.x, + t.x += e.clipPlanes.cubeSize.x; + var i = this.pointToScreen(A) + , o = this.pointToScreen(t); + return i.x - o.x + } + var n = e.clipPlanes.center.clone() + , r = e.clipPlanes.center.clone(); + r.y -= e.clipPlanes.cubeSize.y, + n.y += e.clipPlanes.cubeSize.y; + var a = this.pointToScreen(r) + , s = this.pointToScreen(n); + return a.y - s.y + } + , + this.getPickPoint = function(A, e) { + var t = this.cameraControl.camera + , i = this.cameraControl.getContainerDimensions() + , o = (A - i.left) / i.width * 2 - 1 + , n = (i.height - (e - i.top)) / i.height * 2 - 1 + , r = new Dd; + return r.setFromCamera(new s(o,n), t), + r.ray.intersectPlane(this.plane) + } + , + this._isVisible = function() { + return e.visible + } + , + this.isRotate = function() { + return e.rotatable + } + , + this.offset = function(A) { + e.offset(A) + } + , + this.setOffset = function(A) { + e.setOffset(A) + } + , + this.rotate = function(A, t) { + this.rotX ? e.rotX(t / 180 * Math.PI * .1) : e.rotY(A / 180 * Math.PI * .1) + } + , + this.rotateAngleOffset = function(A, t) { + e.rotateAngleOffset(A, t) + } + , + this.setRotateAngle = function(A, t) { + e.setRotateAngle(A, t) + } + , + this.getRotateAngle = function() { + return e.getRotateAngle() + } + , + this.changeNormal = function(A) { + e.changeNormal(A) + } + , + this.update = function(A) { + e.update(A) + } + , + this.cancelHighLight = function() { + e.cancelHighLight() + } + , + this.highLight = function() { + e.highLight() + } + , + this.store = function() { + return e.store() + } + , + this.restore = function(A) { + e.restore(A) + } + , + this.setProcess = function(A) { + e.setProcess(A) + } + , + this.getProcess = function() { + return e.getProcess() + } + }; + (Sp.prototype = Object.create(yp.prototype)).constructor = Sp, + Sp.prototype.destroy = function() { + this.cameraControl = null, + this.normal = null, + this.plane = null, + this.pickHelper = null, + this.scene = null, + this.viewer = null + } + , + Sp.prototype.onExit = function() { + this.toggle(!1, !1) + } + , + Sp.prototype.processMouseDown = function(A) { + if (this.startPt.set(A.clientX, A.clientY), + !this.enablePick && A.button === t.LEFT) { + var e = this.cameraControl.getRaycaster(A.clientX, A.clientY); + if (this.scene.getFillClipPlane().hitTest(e), + this.hit()) + return this.highLight(), + this.cameraControl.needUpdateRenderList(!0), + this.cameraControl.update(!0), + !0 + } + return yp.prototype.processMouseDown(this, A) + } + , + Sp.prototype.processMouseUp = function(A) { + this.planeDistance = 0; + var e = !1; + if (this.enablePick && A.button === t.LEFT) + if (this.startPt.x === A.clientX && this.startPt.y === A.clientY) + this.pickHelper.click(A); + else if (A.shiftKey || A.ctrlKey || A.altKey) { + this.endPt.set(A.clientX, A.clientY); + var i = Kc.Clear; + A.ctrlKey ? i = Kc.Add : A.altKey && (i = Kc.Remove); + var o = this; + this.scene.pickByRect(this.frustum, i, (function() { + o.pickHelper.notifySelectionChanged(null, 0, A) + } + )), + this.cameraControl.updateView(!0), + e = !0 + } + var n = this.cameraControl.getRaycaster(A.clientX, A.clientY); + return this.scene.getFillClipPlane().hitTest(n), + this.hit() ? (this.highLight(), + this.cameraControl.needUpdateRenderList(!0), + this.cameraControl.update(!0), + this.onClipPlane || (this.onClipPlane = !0, + this.modelManager.dispatchEvent({ + type: Rc.ON_CLIP_HOVER, + onClipPlane: !0, + event: A + })), + e = !0) : (this.cancelHighLight(), + this.cameraControl.needUpdateRenderList(!0), + this.cameraControl.update(!0), + this.onClipPlane && (this.onClipPlane = !1, + this.modelManager.dispatchEvent({ + type: Rc.ON_CLIP_HOVER, + onClipPlane: !1, + event: A + }))), + e + } + , + Sp.prototype.processMouseMove = function(A) { + return this.modelManager.dispatchEvent({ + type: Rc.ON_CLIP_MOUSE_MOVE, + event: A + }), + yp.prototype.processMouseMove(this, A) + } + , + Sp.prototype.processTouchstart = function(A) { + if (this.startPt.set(A.touches[0].clientX, A.touches[0].clientY), + !this.enablePick) { + var e = this.cameraControl.getRaycaster(A.touches[0].clientX, A.touches[0].clientY); + this.scene.getFillClipPlane().hitTest(e) + } + return this.hit() ? (this.highLight(), + this.cameraControl.needUpdateRenderList(!0), + this.cameraControl.update(!0), + !0) : yp.prototype.processTouchstart(this, A) + } + , + Sp.prototype.processTouchmove = function(A) { + if (this.hit()) { + if (this.isRotate()) + this.rotate(A.touches[0].clientX - this.startPt.x, A.touches[0].clientY - this.startPt.y), + this.startPt.set(A.touches[0].clientX, A.touches[0].clientY); + else { + this.offset(Number(A.touches[0].clientX - this.startPt.x)), + this.startPt.set(A.touches[0].clientX, A.touches[0].clientY) + } + return this.cameraControl.update(!0), + !0 + } + return yp.prototype.processTouchmove(this, A) + } + , + Sp.prototype.processTouchend = function(A) { + return this.enablePick && (this.onUpdateUI({ + visible: !1 + }), + this.startPt.x === A.touches[0].clientX && this.startPt.y === A.touches[0].clientY && this.pickHelper.click(A)), + this.cameraControl.needUpdateRenderList(!0), + this.cancelHighLight(), + this.cameraControl.update(!0), + yp.prototype.processTouchmove(this, A) + } + , + Sp.prototype.processHover = function(A) { + if (!this.enablePick) { + var e = !1 + , t = this.cameraControl.getRaycaster(A.clientX, A.clientY); + return this.scene.getFillClipPlane().hitTest(t), + this.hit() ? (this.onClipPlane || (this.highLight(), + this.cameraControl.needUpdateRenderList(!0), + this.cameraControl.update(!0), + this.onClipPlane = !0, + this.modelManager.dispatchEvent({ + type: Rc.ON_CLIP_HOVER, + onClipPlane: !0, + event: A + })), + e = !0) : this.onClipPlane ? (this.cancelHighLight(), + this.cameraControl.needUpdateRenderList(!0), + this.cameraControl.update(!0), + this.onClipPlane = !1, + this.modelManager.dispatchEvent({ + type: Rc.ON_CLIP_HOVER, + onClipPlane: !1, + event: A + })) : this.modelManager.dispatchEvent({ + type: Rc.ON_CLIP_HOVER, + onClipPlane: !1, + event: A + }), + e + } + return yp.prototype.processHover(this, A) + } + ; + var wp = function() { + this.vertexIndex = new Array(2), + this.faceIndex = new Array(2) + } + , Mp = function(A, e) { + var t = A.length / 3 + , i = new Array(t) + , o = new Array(t); + function n(A, e) { + var t = i[A] + , o = i[e]; + return t.x !== o.x ? t.x - o.x : t.y !== o.y ? t.y - o.y : t.z - o.z + } + for (var r = 0; t > r; r += 1) + i[r] = new y(A[3 * r],A[3 * r + 1],A[3 * r + 2]), + o[r] = r; + o.sort((function(A, e) { + var t = n(A, e); + return 0 === t ? A - e : t + } + )); + var a = {} + , s = o[0]; + for (r = 1; t > r; r += 1) + 0 === n(s, o[r]) ? a[o[r]] = s : s = o[r]; + var l = new Array(e.length); + for (r = 0; e.length > r; r += 1) + l[r] = a.hasOwnProperty(e[r]) ? a[e[r]] : e[r]; + return l + } + , bp = function(A, e) { + function t(A, e) { + return A - e + } + var i = Mp(A, e); + i.sort(t); + var o = [] + , n = i[0]; + o.push(n); + for (var r = 1; i.length > r; r += 1) + i[r] !== n && o.push(n = i[r]); + return o.sort(t) + } + , Up = function(A, e, t) { + t = void 0 === t ? Math.PI / 4 : t; + var i = Mp(A, e) + , o = i.length + , n = A.length / 3 + , r = new Array(n + o) + , a = n + , s = i.length / 3; + parseInt(s, 0) !== s && (Bh.error("triangleCount 不是整数"), + s = parseInt(s, 0)); + for (var l = 0; n > l; l += 1) + r[l] = -1; + var c = new Array(o) + , h = 0; + for (l = 0; s > l; l += 1) + for (var d = i[3 * l + 2], p = 0; 3 > p; p += 1) { + var g = !1 + , u = i[3 * l + p]; + if (d > u) { + g = !0; + var f = d; + d = u, + u = f + } + var m = new wp; + m.vertexIndex[0] = d, + m.vertexIndex[1] = u, + m.faceIndex[0] = l, + m.faceIndex[1] = l; + var C = r[d]; + if (-1 === C) + r[d] = h, + c[h] = m, + r[a + h] = -1, + h += 1; + else + for (; ; ) { + if ((E = c[C]).vertexIndex[1] === u) { + E.faceIndex[1] = l; + break + } + var v = r[a + C]; + if (-1 === v) { + r[a + C] = h, + c[h] = m, + r[a + h] = -1, + h += 1; + break + } + C = v + } + g || (d = u) + } + var I = []; + for (l = 0; h > l; l += 1) { + var E; + if ((E = c[l]).faceIndex[0] === E.faceIndex[1]) + I.push(E.vertexIndex[0]), + I.push(E.vertexIndex[1]); + else { + var B = E.faceIndex[0] + , x = i[3 * B] + , S = i[3 * B + 1] + , w = i[3 * B + 2] + , M = new y(A[3 * x],A[3 * x + 1],A[3 * x + 2]) + , b = new y(A[3 * S],A[3 * S + 1],A[3 * S + 2]) + , U = new y(A[3 * w],A[3 * w + 1],A[3 * w + 2]) + , F = M.sub(b) + , K = b.sub(U) + , Q = F.cross(K); + Q.normalize(); + var R = E.faceIndex[1]; + S = i[3 * R + 1], + w = i[3 * R + 2], + M = new y(A[3 * (x = i[3 * R])],A[3 * x + 1],A[3 * x + 2]), + b = new y(A[3 * S],A[3 * S + 1],A[3 * S + 2]), + U = new y(A[3 * w],A[3 * w + 1],A[3 * w + 2]), + F = M.sub(b), + K = b.sub(U); + var T = F.cross(K); + T.normalize(), + Math.abs(Q.dot(T)) < t && (I.push(E.vertexIndex[0]), + I.push(E.vertexIndex[1])) + } + } + return I + } + , Fp = function(A, e, t, i, o) { + for (var n = t.length / 3, r = [], a = 0; n > a; a += 1) { + var s = t[3 * a] + , l = new y(e[3 * s],e[3 * s + 1],e[3 * s + 2]) + , c = l.dot(o); + if (.001 > Math.abs(c - 1)) { + var h = -new y(A[3 * s],A[3 * s + 1],A[3 * s + 2]).dot(l) + , d = Math.abs(i.dot(l) + h); + 3 > Math.abs(d) && r.push(t[3 * a], t[3 * a + 1], t[3 * a + 2]) + } + } + return r + } + , Kp = new y + , Qp = new y + , Rp = new y + , Tp = new y + , kp = function(A) { + this.cameraControl = A, + this.scene = A.scene, + this.timerId = null, + this.lastIntersected = null, + this.edgeDataMap = null + }; + kp.prototype = { + constructor: kp, + destroy: function() { + this.cameraControl = null, + this.scene = null, + this.lastIntersected = null, + this.timerId && (clearTimeout(this.timerId), + this.timerId = null) + }, + click: function(A, e) { + var i = this; + function o() { + e && !1 === e.pickable && (e = null), + i.handleMousePick(A, !1, e) + } + A.button !== t.RIGHT ? (this.timerId && clearTimeout(this.timerId), + this.timerId = setTimeout(o, 500)) : o() + }, + doubleClick: function(A) { + A.preventDefault(), + this.timerId && clearTimeout(this.timerId), + this.handleMousePick(A, !0, null) + }, + handleMousePick: function(A, e, i) { + var o = this.cameraControl + , n = o.viewer.modelManager.sceneState + , r = new s(A.clientX,A.clientY) + , a = o.screenToCanvas(A.clientX, A.clientY) + , l = o.viewer.modelManager; + function c(t, i) { + var o = null; + if (t && t.objectType === Qc.Room) { + var n = t.face.contourIndex + , r = t.object.geometry.contour; + o = n ? { + startPoint: r[n.st], + endPoint: r[n.ed] + } : null + } + l.dispatchEvent({ + type: Rc.ON_CLICK_PICK, + event: A, + doubleClick: e, + canvasPos: { + x: a.x, + y: a.y + }, + intersectInfo: t ? { + selectedObjectId: t.userId, + modelKey: t.modelKey, + objectType: t.objectType, + selectable: i, + worldPosition: t.worldPosition, + worldBoundingBox: t.worldBoundingBox, + point: t.point, + index: t.index, + innnerDebugging: t.innnerDebugging, + object: t.object, + normal: t.face ? t.face.normal : null, + boundaryPoints: o + } : null + }) + } + var h = null; + if (A.button !== t.RIGHT) { + if (i) + i.pickable && (h = i.intersect); + else { + var d = o.getIntersectContext(r); + h = o.intersector.pick(d, null) + } + if (!h) { + var p = n.getSelection(); + if (A.ctrlKey) + return; + return p.length > 0 && (n.clearSelection(), + o.updateView(!0)), + this.setSelectedIdsForOutline(n.getSelection()), + void (i && !i.pickable ? ((h = i.intersect).cx = r.x, + h.cy = r.y, + c(h, !1)) : c(null)) + } + var g = h.userId; + if (mh.isMobileDevice() && (o.pivot = h.point), + this.scene.intersectToWorld(h, o.viewer), + h.innnerDebugging = A.altKey, + h.cx = r.x, + h.cy = r.y, + this.lastPickedUserId = g, + h.face && h.face.normal) { + var u = h.face.normal; + for (var f in u) + u[f] = u[f] === -u[f] ? Math.abs(u[f]) : u[f] + } + if (A.button !== t.RIGHT) + if (e) + vc.EnableDemolishByDClick ? (n.setSelection([g]), + c(h, !0), + o.updateView(!0)) : (n.setSelection([g]), + o.fitAndRotateBySelection(), + c(h, !0)); + else { + var m = n.getSelection(); + if (!!vc.MultipleSelectComponents && A.ctrlKey) { + var C = m.indexOf(g); + -1 === C ? n.addSelection([g]) : (m.splice(C, 1), + n.setSelection(m)) + } else + -1 === m.indexOf(g) ? n.setSelection([g]) : n.clearSelection(); + this.setSelectedIdsForOutline(n.getSelection()), + c(h, !0), + o.updateView(!0) + } + else + c(h, !1) + } else + c(h, !1) + }, + handleShiftMeasure: function(A, e, t) { + var i = null + , o = this.cameraControl + , n = new s(A.clientX,A.clientY) + , r = o.getIntersectContext(n); + function a(t, n, r, a, s, l) { + var c = o.viewer.modelManager; + if (null !== t) { + var h = o.scene.drawingToWorld(t); + t.copy(h) + } + if (null !== r) { + var d = o.scene.drawingToWorld(r[0]) + , p = o.scene.drawingToWorld(r[1]); + r[0].copy(d), + r[1].copy(p) + } + c.dispatchEvent(i = { + type: Rc.ON_MEASURE_PICK, + event: A, + pick: e, + pickPoint: t, + isAbsorbPoint: n, + pickLine: r, + pickPlane: a, + userId: s, + measureUnit: l + }) + } + return o.intersector.pick(r, (function(A) { + if (A) { + var i = "" + , n = A.object.modelKey; + if (n) { + var r = o.viewer.modelManager.getModel(n); + r && r.originalLengthUnit && (i = r.originalLengthUnit) + } + var s = new y; + s.subVectors(A.point, t), + s.normalize(); + var l = new y(1,0,0) + , c = new y(0,1,0) + , h = new y(0,0,1) + , d = l.dot(s) + , p = c.dot(s) + , g = h.dot(s) + , u = new y; + u.copy(t); + .707 > Math.abs(p) ? Math.abs(g) < Math.abs(d) ? u.x = A.point.x : u.z = A.point.z : u.y = A.point.y, + e && t.copy(u), + a(u, !1, null, !1, A.userId, i) + } else + a(null, !1, null, !1) + } + )), + i + }, + handleMouseMeasure: function(A, e, t, i) { + var o = null + , n = this.cameraControl + , r = n.scene + , a = i || Rc.ON_MEASURE_PICK + , s = this.pickToPoint({ + x: A.clientX, + y: A.clientY + }, 5); + function l(t, i, r, s, l, c, h) { + var d = n.viewer.modelManager; + if (null !== t) { + var p = n.scene.drawingToWorld(t); + t.copy(p) + } + if (null !== r) { + var g = n.scene.drawingToWorld(r[0]) + , u = n.scene.drawingToWorld(r[1]); + r[0].copy(g), + r[1].copy(u) + } + (s || e || r || t) && d.dispatchEvent(o = { + type: a, + event: A, + pick: e, + pickPoint: t, + isAbsorbPoint: i, + pickLine: r, + pickPlane: s, + normal: l, + userId: c, + measureUnit: h + }) + } + return null !== s ? (e && t.copy(s.pickPoint), + l(s.pickPoint, s.isAbsorbPoint, s.pickLine, s.pickPlane, s.face.normal, s.userId, s.measureUnit)) : (r.hasGroup(gp.MEASUREPICKPLANE) && r.removeGroupByName(gp.MEASUREPICKPLANE), + l(null, !1, null, !1)), + o + }, + handleMouseHover: function(A) { + var e = this + , t = this.cameraControl + , i = t.viewer.modelManager.sceneState; + if (function() { + if (!1 === e.scene.hasGroup(gp.AXISGRIDMANAGER)) + return !1; + var A = e.scene.getAxisGridManager(); + return 0 !== A.getElements().length && !1 !== A.getIsEnableHover() + }()) { + var o = this.scene.getMatrixGlobal() + , n = new s(A.clientX,A.clientY) + , r = t.getRaycaster(n.x, n.y) + , a = this.scene.getAxisGridManager() + , l = a.getIntersectPoints(r, o) + , c = a.snapOnFloors(l); + t.viewer.modelManager.dispatchEvent({ + type: Rc.ON_AXIS_GRID_HOVER, + snaps: c + }) + } + if (vc.Hover) { + var h = t.screenToCanvas(A.clientX, A.clientY) + , d = new s(A.clientX,A.clientY) + , p = t.getIntersectContext(d); + t.intersector.pick(p, (function(A) { + function o(A) { + switch (A.objectType) { + case Qc.Marker3d: + A.object.setAttributeSize(A.index, A.currentSize); + break; + default: + i.clearHover() + } + } + if (A) { + var n = vc.Hover || A.hoverEnabled; + e.lastIntersected && (e.lastIntersected.userId !== A.userId && o(e.lastIntersected), + e.lastIntersected.hoverEnabled && g(null)), + n ? (e.lastIntersected && e.lastIntersected.userId === A.userId || (!function(A) { + switch (A.objectType) { + case Qc.Marker3d: + var e = A.object; + A.currentSize = e.getAttributeSize(A.index), + e.setAttributeSize(A.index, Math.floor(1.5 * A.currentSize)); + break; + default: + i.setHoverId(vc.EnableRenderPass ? A.object.originalId : A.userId) + } + }(A), + e.lastIntersected = A), + g(A, !0)) : e.lastIntersected = A, + t.updateHighlight() + } else + e.lastIntersected && (o(e.lastIntersected), + e.lastIntersected = null, + g(null), + t.updateHighlight()) + } + )) + } + function g(i, o) { + var n = t.viewer.modelManager; + null !== i && e.scene.intersectToWorld(i, t.viewer), + n.dispatchEvent({ + type: Rc.ON_HOVER_PICK, + event: A, + canvasPos: { + x: h.x, + y: h.y + }, + intersectInfo: i ? { + selectedObjectId: i.userId, + objectType: i.objectType, + selectable: o, + modelKey: i.modelKey, + worldPosition: i.worldPosition, + worldBoundingBox: i.worldBoundingBox, + point: i.point, + innnerDebugging: i.innnerDebugging, + object: i.object + } : null + }) + } + }, + _canPick: function() { + return this.cameraControl.viewer.modelManager.hasModelDataReady() + }, + setSelectedIdsForOutline: function(A) { + this.cameraControl.viewer.rendererManager.composer && this.cameraControl.viewer.rendererManager.composer.setSelectedIds(A) + }, + pickToPoint: function(A, e) { + var t = 0; + t = void 0 === e ? 25 : e * e; + var i = this.cameraControl + , o = i.scene + , n = new s(A.x,A.y) + , r = i.getIntersectContext(n) + , a = i.intersector.pick(r); + if (a) { + var l = "" + , c = a.object.modelKey + , h = null; + c && (h = i.viewer.modelManager.getModel(c)) && h.originalLengthUnit && (l = h.originalLengthUnit); + var d = a.point + , p = a.object.geometry + , g = ((new M).extractRotation(a.object.matrix.clone()), + a.object.matrixWorld.clone()) + , u = i.camera.projScreenMatrix + , f = r.mouse + , m = r.viewportSize + , C = null; + if (null != a.indexInfo && (C = a.indexInfo), + !p.attributes && !p._bufferGeometry) + return null; + var v = p.attributes ? p : p._bufferGeometry; + if (!v.index || void 0 === v.attributes.normal) + return null; + var I = v.attributes.position.array + , E = v.attributes.normal.array + , B = []; + C || h && h.merged && g.multiply(a.matrix); + var x = 1 / 0 + , S = (A = new y, + []) + , w = new y + , b = new y + , U = w.set(I[3 * a.face.a], I[3 * a.face.a + 1], I[3 * a.face.a + 2]); + U.applyMatrix4(g); + var F = b.copy(U); + F.applyMatrix4(u); + var K = .5 * (F.x - f.x) * m.width + , Q = .5 * (F.y - f.y) * m.height + , R = K * K + Q * Q; + x > R && (x = R, + A.copy(U)), + (U = w.set(I[3 * a.face.b], I[3 * a.face.b + 1], I[3 * a.face.b + 2])).applyMatrix4(g), + (F = b.copy(U)).applyMatrix4(u), + x > (R = (K = .5 * (F.x - f.x) * m.width) * K + (Q = .5 * (F.y - f.y) * m.height) * Q) && (x = R, + A.copy(U)), + (U = w.set(I[3 * a.face.c], I[3 * a.face.c + 1], I[3 * a.face.c + 2])).applyMatrix4(g), + (F = b.copy(U)).applyMatrix4(u), + x > (R = (K = .5 * (F.x - f.x) * m.width) * K + (Q = .5 * (F.y - f.y) * m.height) * Q) && (x = R, + A.copy(U)); + var T = d.clone() + , k = !1 + , D = null + , L = !1; + if (t > x) + o.hasGroup(gp.MEASUREPICKPLANE) && o.removeGroupByName(gp.MEASUREPICKPLANE), + T = A.clone(), + k = !0; + else { + x = 1 / 0; + var N = new y + , O = new y; + A = new y; + var V, G = this._getEegeData(a); + if (!G) + return Bh.error("no edge data"), + null; + S = G.positionsArray, + V = G.edgeIndex; + for (var P = 0; V.length > P; P += 2) { + Rp.set(S[3 * V[P]], S[3 * V[P] + 1], S[3 * V[P] + 2]), + Rp.applyMatrix4(g), + Tp.set(S[3 * V[P + 1]], S[3 * V[P + 1] + 1], S[3 * V[P + 1] + 2]), + Tp.applyMatrix4(g); + var q = this._pointToLine(Rp, Tp, d); + (F = q.clone()).applyMatrix4(u), + x > (R = (K = .5 * (F.x - f.x) * m.width) * K + (Q = .5 * (F.y - f.y) * m.height) * Q) && (x = R, + N.copy(Rp), + O.copy(Tp), + A.copy(q)) + } + if (S = null, + t > x) + o.hasGroup(gp.MEASUREPICKPLANE) && o.removeGroupByName(gp.MEASUREPICKPLANE), + (D = []).push(N), + D.push(O), + T = A.clone(); + else { + if (vc.MeasureHighlightPlane) { + B = v.index.array; + var j = new M; + j.getInverse(g); + var H = new y(d.x,d.y,d.z); + H.applyMatrix4(j); + var Y = Fp(I, E, B, H, a.face.normal) + , W = new he; + W.setIndex(Y), + W.setAttribute("position", p.attributes.position, 3), + W.setAttribute("normal", p.attributes.normal, 3); + var J = Up(I, Y) + , z = new he; + z.setIndex(J), + z.setAttribute("position", p.attributes.position, 3), + o.hasGroup(gp.MEASUREPICKPLANE) && o.removeGroupByName(gp.MEASUREPICKPLANE); + var Z = o.getOrCreateGroup(gp.MEASUREPICKPLANE, { + priority: 1, + globalSpace: !0 + }) + , X = new Ue(W,new jA({ + color: 1170103, + opacity: .1, + transparent: !0 + })); + X.applyMatrix4(a.object.matrix), + Z.add(X); + var _ = new jo(z,new ko({ + color: 1170103 + })); + _.applyMatrix4(a.object.matrix), + Z.add(_), + Z.updateMatrixWorld(!0), + i.updateHighlight() + } + L = !0 + } + } + var $ = {}; + return $.pickPoint = T, + $.isAbsorbPoint = k, + $.measureUnit = l, + $.pickLine = D, + $.pickPlane = L, + $.face = a.face, + $.userId = a.userId, + $ + } + return null + }, + _getEegeData: function(A) { + var e = A.object.geometry; + this.edgeDataMap || (this.edgeDataMap = {}); + var t = null; + null != A.indexInfo && (t = A.indexInfo); + var i = e.attributes ? e : e._bufferGeometry + , o = A.nodeId || A.userId; + return this.edgeDataMap[i.id] ? this.edgeDataMap[i.id].version !== i.attributes.position.version ? (delete this.edgeDataMap[i.id].data, + this.edgeDataMap[i.id].data[o] = this._getPositionArrayAndEdgeIndex(i, t)) : this.edgeDataMap[i.id].data[o] || (this.edgeDataMap[i.id].data[o] = this._getPositionArrayAndEdgeIndex(i, t)) : (this.edgeDataMap[i.id] = {}, + this.edgeDataMap[i.id].version = i.attributes.position.version, + this.edgeDataMap[i.id].data = {}, + this.edgeDataMap[i.id].data[o] = this._getPositionArrayAndEdgeIndex(i, t)), + this.edgeDataMap[i.id].data[o] + }, + _getPositionArrayAndEdgeIndex: function(A, e) { + var t = [] + , i = 0 + , o = 0 + , n = [] + , r = [] + , a = A.attributes.position.array + , s = []; + if (e) { + e.positionStart / 3; + for (var l = uh.getMin((t = A.index.array).slice(i = e.indexStart, o = e.indexStart + e.indexCount)), c = i; o > c; c += 1) + r.push(t[c] - l); + n = a.slice(e.positionStart, e.positionStart + e.positionCount), + s = Up(n, r) + } else + o = (t = bp(A.attributes.position.array, A.index.array)).length, + n = a, + s = Up(A.attributes.position.array, A.index.array); + return { + positionsArray: n, + edgeIndex: s + } + }, + _pointToLine: function(A, e, t) { + Kp.subVectors(e, A), + Qp.subVectors(t, A); + var i = Kp.dot(Qp); + if (0 > i) + return A; + var o = Kp.dot(Kp); + if (i > o) + return e; + i /= o; + var n = A.clone(); + return n.addScaledVector(Kp, i), + n + } + }; + var Dp = "http://www.w3.org/2000/svg" + , Lp = function() { + var A = document.createElementNS(Dp, "svg") + , e = function(A, e, t, i) { + var o = document.createElementNS(Dp, "defs") + , n = document.createElementNS(Dp, "filter"); + n.id = A, + n.setAttributeNS(null, "x", "-30%"), + n.setAttributeNS(null, "y", "-30%"), + n.setAttributeNS(null, "width", "200%"), + n.setAttributeNS(null, "height", "200%"); + var r = document.createElementNS(Dp, "feGaussianBlur"); + r.setAttributeNS(null, "in", "SourceAlpha"), + r.setAttributeNS(null, "stdDeviation", "4"); + var a = document.createElementNS(Dp, "feOffset"); + a.setAttributeNS(null, "result", "offsetblur"); + var s = document.createElementNS(Dp, "feMerge") + , l = document.createElementNS(Dp, "feMergeNode") + , c = document.createElementNS(Dp, "feMergeNode"); + return c.setAttributeNS(null, "in", "SourceGraphic"), + s.appendChild(l), + s.appendChild(c), + n.appendChild(r), + n.appendChild(a), + n.appendChild(s), + o.appendChild(n), + o + }("drop-shadow"); + return A.appendChild(e), + A + } + , Np = function() { + return document.createElementNS(Dp, "line") + } + , Op = function() { + return document.createElementNS(Dp, "path") + } + , Vp = function(A) { + var e = document.createElementNS(Dp, "circle"); + return e.setAttributeNS(null, "r", A || 0), + e.setAttributeNS(null, "fill", "none"), + e + } + , Gp = function() { + return document.createElementNS(Dp, "text") + } + , Pp = function() { + return document.createElementNS(Dp, "g") + } + , qp = function(A, e) { + var t = Math.pow(A[0] - e[0], 2) + , i = Math.pow(A[1] - e[1], 2) + , o = 0; + return 3 === A.length && 3 === e.length && (o = Math.pow(A[2] - e[2], 2)), + Math.sqrt(t + i + o) + } + , jp = function(A) { + var e = Math.pow(A[0], 2) + , t = Math.pow(A[1], 2) + , i = 0; + A.length > 2 && (i = Math.pow(A[2], 2)); + var o = Math.sqrt(e + t + i) + , n = [A[0] / o, A[1] / o]; + return A.length > 2 && n.push(A[2] / o), + n + } + , Hp = function(A, e) { + var t = 0; + return A.length > 2 && e.length > 2 && (t = A[2] * e[2]), + A[0] * e[0] + A[1] * e[1] + t + } + , Yp = function(A, e) { + var t = A[0] + , i = A[1] + , o = A[2] + , n = e[0] + , r = e[1] + , a = e[2]; + return [i * a - o * r, o * n - t * a, t * r - i * n] + } + , Wp = function(A) { + return "mm" === A ? 1 : "cm" === A ? 10 : "m" === A ? 1e3 : 1 + } + , Jp = function(A, e, t, i) { + var o = Wp(A); + 2 === i ? o *= o : 3 === i && (o *= o * o); + var n = Wp(e); + return 2 === i ? n *= n : 3 === i && (n *= n * n), + t * o / n + } + , zp = function(A, e) { + return !(e.x > A.x + A.width || A.x > e.x + e.width || e.y > A.y + A.height || A.y > e.y + e.height) + } + , Zp = function() { + return "undefined" != typeof window && "ontouchstart"in window + } + , Xp = function(A) { + this.svg = A, + this.maxPointsNeed = 0, + this.pickedPoints = [], + this.svgGroup = Pp(), + this.svg.appendChild(this.svgGroup), + this.unitOfModel = void 0, + this.unitOnUI = void 0, + this.precision = 3, + this.adjustOption = void 0, + this.is3DMode = !1, + this.isSelected = !1, + this.onclickCallback = void 0 + }; + Xp.prototype.addPickedPoint = function(A, e, t) { + return !this.isDone() && (!!A && (this.pickedPoints.push(A), + e && (this.unitOfModel = this.unitOfModel && this.unitOfModel !== e ? void 0 : e), + !0)) + } + , + Xp.prototype.getAllPickedPoint = function() { + return this.pickedPoints + } + , + Xp.prototype.draw = function(A, e) {} + , + Xp.prototype.adjustWithOption = function(A) { + this.adjustOption = A, + A && this.updateTexts() + } + , + Xp.prototype.unAdjustWithOption = function(A) { + this.adjustOption = void 0, + this.updateTexts() + } + , + Xp.prototype.changeUnit = function(A) { + A && (this.unitOnUI = A, + this.updateTexts()) + } + , + Xp.prototype.changePrecision = function(A) { + this.precision = A, + A && this.updateTexts() + } + , + Xp.prototype.updateTexts = function() {} + , + Xp.prototype.isVisible = function() { + return !!(this.svg && this.svgGroup && this.svgGroup.parentNode) + } + , + Xp.prototype.remove = function() { + this.svg && this.svgGroup && this.svgGroup.parentNode && (this.svg.removeChild(this.svgGroup), + this.onclickCallback = void 0) + } + , + Xp.prototype.add = function() { + this.svg && this.svgGroup && this.svg.appendChild(this.svgGroup) + } + , + Xp.prototype.isDone = function() { + return this.pickedPoints.length === this.maxPointsNeed + } + , + Xp.prototype.setClickCallback = function(A) { + this.onclickCallback = A + } + , + Xp.prototype.measureResult = function() {} + , + Xp.prototype.createCircle = function() { + var A = Vp(5); + return A.setAttributeNS(null, "fill", "#ff9800"), + A.setAttributeNS(null, "stroke", "#ffffff"), + A.setAttributeNS(null, "stroke-width", 2), + A.style.display = "none", + A + } + , + Xp.prototype.createLine = function() { + var A = Np(); + return A.setAttributeNS(null, "stroke-width", 2), + A.setAttributeNS(null, "stroke", "#ffff00"), + A.style.display = "none", + A + } + , + Xp.prototype.createText = function() { + var A = Gp(); + return A.style.fontSize = "14", + A.style.display = "none", + A.style.textAnchor = "middle", + A.setAttributeNS(null, "fill", "#ffffff"), + A + } + , + Xp.prototype.createPath = function() { + var A = Op(); + return A.style.display = "none", + A.setAttributeNS(null, "fill", "none"), + A.setAttributeNS(null, "stroke", "#0aea06"), + A + } + , + Xp.prototype.resultToDisplayOfLength = function(A) { + var e = A + , t = this.unitOfModel; + return this.adjustOption && (e = this.adjustOption.adjustLength(A), + t = this.adjustOption.unit), + this.unitOnUI && (t && (e = Jp(t, this.unitOnUI, e, 0)), + t = this.unitOnUI), + t || (t = ""), + e = e.toFixed(this.precision), + { + value: Number(e), + unit: t, + text: e + t + } + } + , + Xp.prototype.setSelected = function(A) { + return this.isSelected !== A && (this.isSelected = A, + !0) + } + ; + var _p = function() { + this.group = Pp(), + this.group.style.display = "none"; + var A = Op(); + this.textBackground = A, + this.group.appendChild(A), + A = Op(), + this.prefixTextBackground = A, + this.prefixTextBackground.style.display = "none", + this.group.appendChild(A); + var e = Gp(); + e.style.fontSize = "12", + e.style.textAnchor = "middle", + e.style.dominantBaseline = "central", + e.style.cursor = "default", + e.setAttributeNS(null, "fill", "#ffffff"), + this.group.appendChild(e), + this.text = e, + (e = Gp()).style.fontSize = "12", + e.style.textAnchor = "middle", + e.style.dominantBaseline = "central", + e.style.display = "none", + e.setAttributeNS(null, "fill", "#ffffff"), + this.group.appendChild(e), + this.prefixText = e, + this.textColor = "#ffffff", + this.prefixTextColor = "#ffffff", + this.textBackgroundColor = "#ffffff", + this.prefixTextBackgroundColor = "blue", + this.textContent = void 0, + this.prefixTextContent = void 0, + this.textPosition = { + x: 0, + y: 0 + }, + this.isShowShadow = !1, + this.onclickCallback = void 0, + this._onMouseDown = this._onMouseDown.bind(this), + this._onMouseMove = this._onMouseMove.bind(this), + this._onMouseUp = this._onMouseUp.bind(this) + }; + _p.prototype.draw = function(A) { + if (this.textContent && this.textContent.length) { + this.group.style.display = "", + this.text.textContent = this.textContent; + var e = null; + this.prefixTextContent ? (this.prefixText.textContent = this.prefixTextContent, + this.prefixText.style.display = "", + e = this.prefixText.getBBox()) : (this.prefixText.style.display = "none", + e = { + width: 0, + height: 0 + }); + var t = this.text.getBBox() + , i = 5 + t.width + 5; + this.prefixTextContent && this.prefixTextContent.length > 0 && (i = i + 5 + e.width + 5), + A && (i = Math.max(A, i)); + var o = this.textPosition.x - i / 2 + , n = this.textPosition.y - (5 + t.height + 5) / 2 + , r = function(A, e, t, i, o) { + return "M" + A + "," + (e + o) + "a" + o + "," + o + " 0 0 1 " + o + "," + -o + "h" + (t - 2 * o) + "a" + o + "," + o + " 0 0 1 " + o + "," + o + "v" + (i - 2 * o) + "a" + o + "," + o + " 0 0 1 " + -o + "," + o + "h" + (2 * o - t) + "a" + o + "," + o + " 0 0 1 " + -o + "," + -o + "v" + (2 * o - i) + "z" + }(o, n, i, t.height + 10, 5); + this.textBackground.setAttributeNS(null, "d", r), + this.textBackground.setAttributeNS(null, "fill", this.textBackgroundColor), + this.isShowShadow ? this.group.setAttributeNS(null, "filter", "url(#drop-shadow)") : this.group.removeAttributeNS(null, "filter"), + this.prefixTextContent && this.prefixTextContent.length > 0 ? (r = function(A, e, t, i, o) { + return "M" + A + "," + (e + o) + "a" + o + "," + o + " 0 0 1 " + o + "," + -o + "h" + (t - o) + "v" + i + "h" + (o - t) + "a" + o + "," + o + " 0 0 1 " + -o + "," + -o + "v" + (2 * o - i) + "z" + }(o, n, e.width + 10, e.height + 10, 5), + this.prefixTextBackground.setAttributeNS(null, "d", r), + this.prefixTextBackground.setAttributeNS(null, "fill", this.prefixTextBackgroundColor), + this.prefixTextBackground.style.display = "", + this.prefixText.setAttributeNS(null, "x", o + 5 + e.width / 2), + this.prefixText.setAttributeNS(null, "y", n + 5 + e.height / 2), + o = o + (10 + e.width) / 2 + i / 2) : o += i / 2, + this.text.setAttributeNS(null, "x", o), + this.text.setAttributeNS(null, "y", n + 5 + t.height / 2), + this.text.setAttributeNS(null, "fill", this.textColor), + this.prefixText.setAttributeNS(null, "fill", this.prefixTextColor) + } + } + , + _p.prototype.setText = function(A, e) { + this.textContent = A, + this.prefixTextContent = e + } + , + _p.prototype.setPosition = function(A, e) { + this.textPosition = { + x: A, + y: e + } + } + , + _p.prototype.hide = function() { + this.group.style.display = "none" + } + , + _p.prototype.show = function() { + this.group.style.display = "" + } + , + _p.prototype.setClickCallback = function(A) { + this.onclickCallback = A, + A ? (this.group.style.cursor = "pointer", + this.text.style.cursor = "pointer", + Zp() ? (this.group.addEventListener("touchstart", this._onMouseDown), + this.group.addEventListener("touchend", this._onMouseUp), + this.group.addEventListener("touchmove", this._onMouseMove)) : (this.group.addEventListener("mousedown", this._onMouseDown), + this.group.addEventListener("mouseup", this._onMouseUp), + this.group.addEventListener("mousemove", this._onMouseMove))) : (this.group.style.cursor = "default", + this.text.style.cursor = "default", + Zp() ? (this.group.removeEventListener("touchstart", this._onMouseDown), + this.group.removeEventListener("touchend", this._onMouseUp), + this.group.removeEventListener("touchmove", this._onMouseMove)) : (this.group.removeEventListener("mousedown", this._onMouseDown), + this.group.removeEventListener("mouseup", this._onMouseUp), + this.group.removeEventListener("mousemove", this._onMouseMove))) + } + , + _p.prototype._onMouseMove = function(A) { + A.stopPropagation(), + A.preventDefault() + } + , + _p.prototype._onMouseDown = function(A) { + A.stopPropagation(), + A.preventDefault() + } + , + _p.prototype._onMouseUp = function(A) { + A.stopPropagation(), + A.preventDefault(), + this.onclickCallback && this.onclickCallback() + } + ; + var $p = function(A) { + Xp.call(this, A), + this.maxPointsNeed = 2, + this.startCircle = this.createCircle(), + this.startCircle.setAttributeNS(null, "fill", "#ffffff"), + this.endCircle = this.createCircle(), + this.endCircle.setAttributeNS(null, "fill", "#ffffff"), + this.svgGroup.appendChild(this.startCircle), + this.svgGroup.appendChild(this.endCircle), + this.line = this.createLine(), + this.line.setAttributeNS(null, "stroke", "#ffffff"), + this.line.setAttributeNS(null, "strokd-width", 2), + this.svgGroup.appendChild(this.line), + this.text = new _p, + this.text.textBackgroundColor = "#ffffff", + this.text.textColor = "#000000", + this.svgGroup.appendChild(this.text.group), + this._distance = void 0 + }; + ($p.prototype = Object.assign(Object.create(Xp.prototype), { + constructor: $p + })).addPickedPoint = function(A, e, t) { + Xp.prototype.addPickedPoint.call(this, A, e, t) && this.isDone() && (this._enableSelect(), + this._distance = qp(this.pickedPoints[0], this.pickedPoints[1])) + } + , + $p.prototype.draw = function(A, e) { + if (this.svgGroup.parentNode) { + var t = this.pickedPoints; + if (t.length > 0) { + A && !this.isDone() && (t = t.concat([A])); + var i = t; + if (e) { + for (var o = [], n = 0, r = t.length; r > n; n += 1) + o[n] = e(t[n]); + i = o + } + var a = i[0] + , s = i.length > 1 ? i[1] : a; + if (this.startCircle.setAttributeNS(null, "cx", a[0]), + this.startCircle.setAttributeNS(null, "cy", a[1]), + this.startCircle.style.display = "", + this.line.setAttributeNS(null, "x1", a[0]), + this.line.setAttributeNS(null, "y1", a[1]), + this.line.setAttributeNS(null, "x2", s[0]), + this.line.setAttributeNS(null, "y2", s[1]), + this.line.style.display = "", + this.text.setPosition((a[0] + s[0]) / 2, (a[1] + s[1]) / 2), + t.length > 1) { + var l = qp(t[0], t[1]); + this._distance = l + } + 2 === this.pickedPoints.length ? (this.endCircle.setAttributeNS(null, "cx", s[0]), + this.endCircle.setAttributeNS(null, "cy", s[1]), + this.endCircle.style.display = "") : this.endCircle.style.display = "none", + this._updateText() + } + } + } + , + $p.prototype.measureResult = function() { + if (this.isDone()) { + var A = {}; + if (A.distance = this._distance, + this.adjustOption) { + var e = this.resultToDisplayOfLength(this._distance); + A.unit = e.unit, + A.value = e.value + } + return A + } + } + , + $p.prototype.adjustWithOption = function(A) { + Xp.prototype.adjustWithOption.call(this, A), + this._updateText(), + this._disableSelect() + } + , + $p.prototype.changeUnit = function(A) { + Xp.prototype.changeUnit.call(this, A), + A && this._updateText() + } + , + $p.prototype.changePrecision = function(A) { + Xp.prototype.changePrecision.call(this, A), + A && this._updateText() + } + , + $p.prototype._enableSelect = function() { + var A = this; + this.startCircle.onmousedown = function(e) { + A.isDone() && (A.pickedPoints = A.pickedPoints.slice(1), + e.stopPropagation(), + A._disableSelect()) + } + , + this.endCircle.onmousedown = function(e) { + A.isDone() && (A.pickedPoints = A.pickedPoints.slice(0, 1), + e.stopPropagation(), + A._disableSelect()) + } + } + , + $p.prototype._disableSelect = function() { + this.startCircle.onmousedown = void 0, + this.endCircle.onmousedown = void 0 + } + , + $p.prototype._updateText = function() { + this.isDone() && this._distance && this.adjustOption && (this.text.setText(this.resultToDisplayOfLength(this._distance).text), + this.text.draw()) + } + ; + var Ag = function() { + this.unit = void 0, + this.valueBeforeAdjust = void 0, + this.valueAfterAdjust = void 0 + }; + Ag.prototype.adjustLength = function(A) { + return this.valueAfterAdjust && this.valueBeforeAdjust ? A * this.valueAfterAdjust / this.valueBeforeAdjust : A + } + , + Ag.prototype.adjustArea = function(A) { + return this.valueAfterAdjust && this.valueBeforeAdjust ? A * Math.pow(this.valueAfterAdjust / this.valueBeforeAdjust, 2) : A + } + , + Ag.prototype.adjustVolume = function(A) { + return this.valueAfterAdjust && this.valueBeforeAdjust ? A * Math.pow(this.valueAfterAdjust / this.valueBeforeAdjust, 3) : A + } + ; + var eg = function(A) { + Xp.call(this, A), + this.maxPointsNeed = 3, + this._angle = void 0, + this.circle1 = this.createCircle(), + this.circle2 = this.createCircle(), + this.circle3 = this.createCircle(), + this.svgGroup.appendChild(this.circle1), + this.svgGroup.appendChild(this.circle2), + this.svgGroup.appendChild(this.circle3), + this.line1 = this.createLine(), + this.line1.setAttributeNS(null, "stroke-width", 2), + this.svgGroup.appendChild(this.line1), + this.line2 = this.createLine(), + this.line2.setAttributeNS(null, "stroke-width", 2), + this.svgGroup.appendChild(this.line2), + this.arc = this.createPath(), + this.svgGroup.appendChild(this.arc), + this.angleText = new _p, + this.angleText.textBackgroundColor = "#009bff", + this.svgGroup.appendChild(this.angleText.group); + var e = this; + this.angleText.setClickCallback((function() { + e.onclickCallback && e.onclickCallback(e) + } + )) + }; + (eg.prototype = Object.assign(Object.create(Xp.prototype), { + constructor: eg + })).addPickedPoint = function(A, e, t) { + if (Xp.prototype.addPickedPoint.call(this, A, e, t) && this.isDone()) { + var i = this.pickedPoints[0] + , o = this.pickedPoints[1] + , n = this.pickedPoints[2] + , r = (a = [n[0] - o[0], n[1] - o[1], n[2] - o[2]], + s = jp([i[0] - o[0], i[1] - o[1], i[2] - o[2]]), + l = jp(a), + c = Hp(s, l), + Math.acos(c) / Math.PI * 180); + this._angle = r + } + var a, s, l, c + } + , + eg.prototype.draw = function(A, e) { + if (this.svgGroup.parentNode) { + var t = this.pickedPoints; + if (t.length > 0) { + A && !this.isDone() && (t = t.concat([A])); + var i = t + , o = !0; + if (e) { + for (var n = !0, r = [], a = 0, s = t.length; s > a; a += 1) + r[a] = e(t[a]), + o && r[a][0] > 0 && r[a][0] < parseInt(this.svg.style.width, 10) && r[a][1] > 0 && r[a][1] < parseInt(this.svg.style.height, 10) && (o = !1), + void 0 !== r[a][2] && 0 !== r[a][2] || (n = !1); + i = r, + n && (o = !0) + } + if (this.pickedPoints.length >= 1) { + var l = i[0] + , c = i[1]; + this.circle1.setAttributeNS(null, "cx", l[0]), + this.circle1.setAttributeNS(null, "cy", l[1]), + this.circle1.style.display = "", + (A || this.pickedPoints.length > 1) && (this.line1.setAttributeNS(null, "x1", l[0]), + this.line1.setAttributeNS(null, "y1", l[1]), + this.line1.setAttributeNS(null, "x2", c[0]), + this.line1.setAttributeNS(null, "y2", c[1]), + this.line1.style.display = "") + } + if (this.pickedPoints.length >= 2) { + var h = i[1] + , d = i[2]; + this.circle2.setAttributeNS(null, "cx", h[0]), + this.circle2.setAttributeNS(null, "cy", h[1]), + this.circle2.style.display = "", + (A || this.pickedPoints.length > 2) && (this.line2.setAttributeNS(null, "x1", h[0]), + this.line2.setAttributeNS(null, "y1", h[1]), + this.line2.setAttributeNS(null, "x2", d[0]), + this.line2.setAttributeNS(null, "y2", d[1]), + this.line2.style.display = "") + } + if (3 === this.pickedPoints.length) { + if (o) + return void (this.svgGroup.style.display = "none"); + this.svgGroup.style.display = ""; + var p = i[2]; + this.circle3.setAttributeNS(null, "cx", p[0]), + this.circle3.setAttributeNS(null, "cy", p[1]), + this.circle3.style.display = ""; + var g = i[0].slice(0, 2) + , u = i[1].slice(0, 2) + , f = i[2].slice(0, 2) + , m = qp(g, u) + , C = qp(u, f) + , y = Math.min(Math.min(m, C), 30) + , v = jp([g[0] - u[0], g[1] - u[1]]) + , I = [u[0] + v[0] * y, u[1] + v[1] * y] + , E = jp([f[0] - u[0], f[1] - u[1]]) + , B = [u[0] + E[0] * y, u[1] + E[1] * y] + , x = [(I[0] + B[0]) / 2, (I[1] + B[1]) / 2] + , S = [x[0] - u[0], x[1] - u[1]] + , w = [u[0] + (S = [1.5 * S[0], 1.5 * S[1]])[0], u[1] + S[1]] + , M = "M" + I[0] + "," + I[1]; + M += "Q" + w[0] + "," + w[1], + this.arc.setAttributeNS(null, "d", M += " " + B[0] + "," + B[1]), + this.arc.style.display = "", + this.angleText.setText(this._angle.toFixed(this.precision) + "°"), + this.angleText.setPosition(w[0], w[1]), + this.angleText.draw() + } + } + } + } + , + eg.prototype.setSelected = function(A) { + Xp.prototype.setSelected.call(this, A) && (A ? (this.angleText.isShowShadow = !0, + this.angleText.textBackgroundColor = "#ffffff", + this.angleText.textColor = "#009bff", + this.angleText.draw()) : (this.angleText.isShowShadow = !1, + this.angleText.textBackgroundColor = "#009bff", + this.angleText.textColor = "#ffffff", + this.angleText.draw())) + } + , + eg.prototype.measureResult = function() { + return this._angle + } + ; + var tg = function(A) { + Xp.call(this, A), + this.path = Op(), + this.path.setAttributeNS(null, "fill", "none"), + this.path.setAttributeNS(null, "stroke", "rgb(69,195,69)"), + this.svgGroup.appendChild(this.path), + this._isDone = !1, + this._circles = [], + this._area = -1, + this.resultText = new _p, + this.resultText.textBackgroundColor = "#009bff", + this.svgGroup.appendChild(this.resultText.group); + var e = this; + this.resultText.setClickCallback((function() { + e.onclickCallback && e.onclickCallback(e) + } + )) + }; + (tg.prototype = Object.assign(Object.create(Xp.prototype), { + constructor: tg + })).addPickedPoint = function(A, e, t) { + if (this._pointCanClosePath(A, t)) + this._isDone = !0, + this._area = this.is3DMode ? this._calculateArea3D() : this._calculateArea2D(); + else if (Xp.prototype.addPickedPoint.call(this, A, e, t)) { + var i = this.createCircle(); + this.svgGroup.appendChild(i), + this._circles.push(i) + } + } + , + tg.prototype.isDone = function() { + return this._isDone + } + , + tg.prototype.draw = function(A, e) { + if (this.svgGroup.parentNode) { + var t = this.pickedPoints; + if (t.length > 0) { + if (A && !this.isDone()) { + if (this._pointCanClosePath(A, e)) { + var i = this.pickedPoints[0]; + A = [i[0], i[1], i[2]] + } + t = t.concat([A]) + } + var o = t + , n = !0; + if (e) { + for (var r = !0, a = [], s = 0, l = t.length; l > s; s += 1) + a[s] = e(t[s]), + n && a[s][0] > 0 && a[s][0] < parseInt(this.svg.style.width, 10) && a[s][1] > 0 && a[s][1] < parseInt(this.svg.style.height, 10) && (n = !1), + void 0 !== a[s][2] && 0 !== a[s][2] || (r = !1); + o = a, + r && (n = !0) + } + var c = this._pathString(o); + if (this.path.setAttributeNS(null, "d", c), + this.isDone()) { + if (n) + return void (this.svgGroup.style.display = "none"); + this.svgGroup.style.display = "", + this.path.setAttributeNS(null, "fill", "rgba(69,195,69,0.5)"); + var h = this._getPointsCenter(this.pickedPoints); + e && (h = e(h)), + this.resultText.setPosition(h[0], h[1]), + this.updateTexts() + } + for (var d = 0, p = this._circles.length; p > d; d += 1) { + var g = this._circles[d] + , u = o[d]; + g.setAttributeNS(null, "cx", u[0]), + g.setAttributeNS(null, "cy", u[1]), + g.style.display = "" + } + } + } + } + , + tg.prototype.measureResult = function() { + return this._area + } + , + tg.prototype.updateTexts = function() { + this.isDone() && (this.resultText.setText(this.resultToDisplayOfArea(this._area).text), + this.resultText.draw()) + } + , + tg.prototype.setSelected = function(A) { + Xp.prototype.setSelected.call(this, A) && (A ? (this.resultText.isShowShadow = !0, + this.resultText.textBackgroundColor = "#ffffff", + this.resultText.textColor = "#009bff", + this.resultText.draw()) : (this.resultText.isShowShadow = !1, + this.resultText.textBackgroundColor = "#009bff", + this.resultText.textColor = "#ffffff", + this.resultText.draw())) + } + , + tg.prototype.resultToDisplayOfArea = function(A) { + var e = A + , t = this.unitOfModel; + return this.adjustOption && (e = this.adjustOption.adjustArea(A), + t = this.adjustOption.unit), + this.unitOnUI && (t && (e = Jp(t, this.unitOnUI, e, 2)), + t = this.unitOnUI), + t || (t = ""), + e = e.toFixed(this.precision), + "mm" === t ? t = "mm²" : "m" === t ? t = "m²" : "cm" === t && (t = "cm²"), + { + value: Number(e), + unit: t, + text: e + t + } + } + , + tg.prototype._pointCanClosePath = function(A, e) { + if (this.pickedPoints.length > 0) { + var t = this.pickedPoints[0]; + e && (t = e(t), + A = e(A)); + var i = A[0] - t[0] + , o = A[1] - t[1]; + if (200 >= i * i + o * o + 0) + return !0 + } + return !1 + } + , + tg.prototype._pathString = function(A) { + if (!A || 0 === A.length) + return ""; + for (var e = "M" + A[0][0] + " " + A[0][1], t = 1, i = A.length; i > t; t += 1) + e = e + "L" + A[t][0] + " " + A[t][1]; + return this.isDone() && (e += "Z"), + e + } + , + tg.prototype._calculateArea2D = function() { + if (this.isDone() && this.pickedPoints.length >= 3) { + for (var A = this.pickedPoints, e = this.pickedPoints[0], t = [], i = 1, o = A.length; o > i; i += 1) + t.push([A[i][0] - e[0], A[i][1] - e[1]]); + for (var n = 0, r = 0, a = t.length; a - 1 > r; r += 1) { + var s = t[r] + , l = t[r + 1]; + n += s[0] * l[1] - s[1] * l[0] + } + return Math.abs(n / 2) + } + return 0 + } + , + tg.prototype._calculateArea3D = function() { + if (this.isDone() && this.pickedPoints.length >= 3) { + for (var A = this.pickedPoints, e = this.pickedPoints[0], t = jp(Yp([this.pickedPoints[1][0] - e[0], this.pickedPoints[1][1] - e[1], this.pickedPoints[1][2] - e[2]], [this.pickedPoints[2][0] - e[0], this.pickedPoints[2][1] - e[1], this.pickedPoints[2][2] - e[2]])), i = 0, o = 1, n = A.length; n > o; o += 1) { + i += Hp(Yp([this.pickedPoints[o - 1][0] - e[0], this.pickedPoints[o - 1][1] - e[1], this.pickedPoints[o - 1][2] - e[2]], [this.pickedPoints[o][0] - e[0], this.pickedPoints[o][1] - e[1], this.pickedPoints[o][2] - e[2]]), t) + } + return Math.abs(i / 2) + } + return 0 + } + , + tg.prototype._getPointsCenter = function(A) { + var e = A.length; + return [A.reduce((function(A, e) { + return A + e[0] + } + ), 0) / e, A.reduce((function(A, e) { + return A + e[1] + } + ), 0) / e, A.reduce((function(A, e) { + return A + e[2] + } + ), 0) / e] + } + , + tg.prototype._crossProduct = function(A, e) { + var t = A[0] + , i = A[1] + , o = A[2] + , n = e[0] + , r = e[1] + , a = e[2]; + return [i * a - o * r, o * n - t * a, t * r - i * n] + } + ; + var ig = function(A, e, t) { + Xp.call(this, A), + this.maxPointsNeed = 2, + this.isMobile = e, + this.number = t, + this._drawPoints = [], + this.startCircle = this.createCircle(), + this.endCircle = this.createCircle(), + this.svgGroup.appendChild(this.startCircle), + this.svgGroup.appendChild(this.endCircle), + this.distanceLine = this.createLine(), + this.svgGroup.appendChild(this.distanceLine), + this.deltaXLine = this.createLine(), + this.deltaXLine.setAttributeNS(null, "stroke", "#ec4545"), + this.deltaXLine.setAttributeNS(null, "stroke-dasharray", "6,4"), + this.isMobile || this.svgGroup.appendChild(this.deltaXLine), + this.deltaYLine = this.createLine(), + this.deltaYLine.setAttributeNS(null, "stroke", "#45c345"), + this.deltaYLine.setAttributeNS(null, "stroke-dasharray", "6,4"), + this.isMobile || this.svgGroup.appendChild(this.deltaYLine), + this.deltaZLine = this.createLine(), + this.deltaZLine.setAttributeNS(null, "stroke", "#5757da"), + this.deltaZLine.setAttributeNS(null, "stroke-dasharray", "6,4"), + this.isMobile || this.svgGroup.appendChild(this.deltaZLine), + this.deltaXText = new _p, + this.deltaXText.textColor = "#ec4545", + this.deltaXText.prefixTextBackgroundColor = "#ec4545", + this.svgGroup.appendChild(this.deltaXText.group), + this.deltaYText = new _p, + this.deltaYText.textColor = "#45c345", + this.deltaYText.prefixTextBackgroundColor = "#45c345", + this.svgGroup.appendChild(this.deltaYText.group), + this.deltaZText = new _p, + this.deltaZText.textColor = "#5757da", + this.deltaZText.prefixTextBackgroundColor = "#5757da", + this.svgGroup.appendChild(this.deltaZText.group), + this.distanceText = new _p, + this.distanceText.textBackgroundColor = "#009bff"; + var i = this; + this.distanceText.setClickCallback((function() { + i.onclickCallback && i.onclickCallback(i) + } + )), + this.svgGroup.appendChild(this.distanceText.group), + this._distance = void 0, + this._deltaXDistance = void 0, + this._deltaYDistance = void 0, + this._deltaZDistance = void 0 + }; + (ig.prototype = Object.assign(Object.create(Xp.prototype), { + constructor: ig + })).addPickedPoint = function(A, e, t) { + if (Xp.prototype.addPickedPoint.call(this, A, e, t) && (this._drawPoints.push(A), + this.isDone())) { + if (3 === A.length) { + var i = []; + i[0] = this.pickedPoints[1][0], + i[1] = this.pickedPoints[0][1], + i[2] = this.pickedPoints[1][2]; + var o = []; + o[0] = this.pickedPoints[1][0], + o[1] = this.pickedPoints[0][1], + o[2] = this.pickedPoints[0][2], + this._drawPoints.push(i), + this._drawPoints.push(o) + } + this._distance = qp(this._drawPoints[0], this._drawPoints[1]), + this._deltaYDistance = qp(this._drawPoints[1], this._drawPoints[2]), + this._deltaZDistance = qp(this._drawPoints[2], this._drawPoints[3]), + this._deltaXDistance = qp(this._drawPoints[3], this._drawPoints[0]), + this.updateTexts() + } + } + , + ig.prototype.draw = function(A, e) { + if (this.svgGroup.parentNode) { + var t = this._drawPoints; + if (t.length > 0) { + A && !this.isDone() && (t = t.concat([A])); + var i = t + , o = !0; + if (e) { + for (var n = !0, r = [], a = 0, s = t.length; s > a; a += 1) + r[a] = e(t[a]), + o && r[a][0] > 0 && r[a][0] < parseInt(this.svg.style.width, 10) && r[a][1] > 0 && r[a][1] < parseInt(this.svg.style.height, 10) && (o = !1), + void 0 !== r[a][2] && 0 !== r[a][2] || (n = !1); + i = r, + n && (o = !0) + } + var l = i[0] + , c = i.length > 1 ? i[1] : l; + if (this.startCircle.setAttributeNS(null, "cx", l[0]), + this.startCircle.setAttributeNS(null, "cy", l[1]), + this.startCircle.style.display = "", + this.distanceLine.setAttributeNS(null, "x1", l[0]), + this.distanceLine.setAttributeNS(null, "y1", l[1]), + this.distanceLine.setAttributeNS(null, "x2", c[0]), + this.distanceLine.setAttributeNS(null, "y2", c[1]), + this.distanceLine.style.display = "", + 2 > t.length) + return; + if (this.distanceText.setPosition((l[0] + c[0]) / 2, (l[1] + c[1]) / 2), + !this.isDone()) { + var h = qp(t[0], t[1]); + this._distance = h + } + if (4 === t.length) { + if (o) + return void (this.svgGroup.style.display = "none"); + this.svgGroup.style.display = "", + this.isSelected ? (this.distanceText.isShowShadow = !0, + this.distanceText.textBackgroundColor = "#ffffff", + this.distanceText.textColor = "#009bff") : (this.distanceText.isShowShadow = !1, + this.distanceText.textBackgroundColor = "#009bff", + this.distanceText.textColor = "#ffffff"), + this.distanceText.draw(), + this.endCircle.style.display = "", + this.deltaYLine.style.display = "", + this.deltaXLine.style.display = "", + this.deltaZLine.style.display = "", + this.endCircle.setAttributeNS(null, "cx", c[0]), + this.endCircle.setAttributeNS(null, "cy", c[1]); + var d = i[2] + , p = i[3]; + this.deltaYLine.setAttributeNS(null, "x1", c[0]), + this.deltaYLine.setAttributeNS(null, "y1", c[1]), + this.deltaYLine.setAttributeNS(null, "x2", d[0]), + this.deltaYLine.setAttributeNS(null, "y2", d[1]), + this.deltaYText.setPosition((d[0] + c[0]) / 2, (d[1] + c[1]) / 2), + this.deltaZLine.setAttributeNS(null, "x1", d[0]), + this.deltaZLine.setAttributeNS(null, "y1", d[1]), + this.deltaZLine.setAttributeNS(null, "x2", p[0]), + this.deltaZLine.setAttributeNS(null, "y2", p[1]), + this.deltaZText.setPosition((d[0] + p[0]) / 2, (d[1] + p[1]) / 2), + this.deltaXLine.setAttributeNS(null, "x1", p[0]), + this.deltaXLine.setAttributeNS(null, "y1", p[1]), + this.deltaXLine.setAttributeNS(null, "x2", l[0]), + this.deltaXLine.setAttributeNS(null, "y2", l[1]), + this.deltaXText.setPosition((p[0] + l[0]) / 2, (p[1] + l[1]) / 2), + this.isSelected && (this.isMobile || (this.deltaXText.draw(), + this.deltaYText.draw(), + this.deltaZText.draw()), + this.layoutResultText()) + } + } + } + } + , + ig.prototype.layoutResultText = function() { + for (var A = this.distanceText.group.getBBox(), e = this.deltaXText.group.getBBox(), t = this.deltaYText.group.getBBox(), i = this.deltaZText.group.getBBox(), o = [e, t, i], n = !1, r = 0; o.length > r; r += 1) + if (zp(A, o[r])) { + n = !0; + break + } + if (n || (n = zp(e, t)), + n || (n = zp(e, i)), + n || (n = zp(t, i)), + n) { + var a = Math.max(A.width, e.width, t.width, i.width) + , s = A.x + A.width / 2 + , l = A.y + A.height + 8; + return this.deltaXText.setPosition(s, l + e.height / 2), + this.deltaYText.setPosition(s, (l += e.height) + t.height / 2), + this.deltaZText.setPosition(s, (l += t.height) + i.height / 2), + this.isMobile || (this.deltaXText.draw(a), + this.deltaYText.draw(a), + this.deltaZText.draw(a)), + this.distanceText.draw(a), + n + } + } + , + ig.prototype.measureResult = function() { + if (this._distance) + return [this._distance, this._deltaXDistance, this._deltaYDistance, this._deltaZDistance] + } + , + ig.prototype.updateTexts = function() { + this._distance && (this.distanceText.setText(this.isMobile ? "线段" + this.number + ": " + this.resultToDisplayOfLength(this._distance).text : this.resultToDisplayOfLength(this._distance).text, void 0), + this.distanceText.draw(), + this.isDone() && (0 !== this._deltaXDistance && this.deltaXText.setText(this.resultToDisplayOfLength(this._deltaXDistance).text, "X"), + 0 !== this._deltaYDistance && this.deltaYText.setText(this.resultToDisplayOfLength(this._deltaYDistance).text, "Y"), + 0 !== this._deltaZDistance && this.deltaZText.setText(this.resultToDisplayOfLength(this._deltaZDistance).text, "Z"), + this.isSelected && !this.isMobile && (this.deltaXText.draw(), + this.deltaYText.draw(), + this.deltaZText.draw()))) + } + , + ig.prototype.setSelected = function(A) { + Xp.prototype.setSelected.call(this, A) && (A ? (this.distanceText.isShowShadow = !0, + this.distanceText.textBackgroundColor = "#ffffff", + this.distanceText.textColor = "#009bff", + this.isMobile || (this.deltaXText.draw(), + this.deltaYText.draw(), + this.deltaZText.draw()), + this.distanceText.draw(), + this.layoutResultText()) : (this.deltaXText.hide(), + this.deltaYText.hide(), + this.deltaZText.hide(), + this.distanceText.isShowShadow = !1, + this.distanceText.textBackgroundColor = "#009bff", + this.distanceText.textColor = "#ffffff", + this.distanceText.draw())) + } + ; + var og = function(A) { + Xp.call(this, A), + this.maxPointsNeed = 2, + this.startCircle = this.createCircle(), + this.endCircle = this.createCircle(), + this.svgGroup.appendChild(this.startCircle), + this.svgGroup.appendChild(this.endCircle), + this.distanceLine = this.createLine(), + this.svgGroup.appendChild(this.distanceLine), + this.distanceText = new _p, + this.distanceText.textBackgroundColor = "#009bff", + this.svgGroup.appendChild(this.distanceText.group); + var e = this; + this.distanceText.setClickCallback((function() { + e.onclickCallback && e.onclickCallback(e) + } + )), + this.pickedComponentKeys = [], + this._distance = void 0 + }; + (og.prototype = Object.assign(Object.create(Xp.prototype), { + constructor: og + })).setData = function(A, e, t) { + this.pickedPoints = A, + this._distance = e, + t && (this.unitOfModel = this.unitOfModel && this.unitOfModel !== t ? void 0 : t) + } + , + og.prototype.draw = function(A, e) { + if (this.svgGroup.parentNode && this.isDone()) { + var t = this.pickedPoints; + if (e) { + for (var i = [], o = 0, n = t.length; n > o; o += 1) + i[o] = e(t[o]); + t = i + } + var r = t[0] + , a = t[1]; + this.startCircle.setAttributeNS(null, "cx", r[0]), + this.startCircle.setAttributeNS(null, "cy", r[1]), + this.startCircle.style.display = "", + this.endCircle.setAttributeNS(null, "cx", a[0]), + this.endCircle.setAttributeNS(null, "cy", a[1]), + this.endCircle.style.display = "", + this.distanceLine.setAttributeNS(null, "x1", r[0]), + this.distanceLine.setAttributeNS(null, "y1", r[1]), + this.distanceLine.setAttributeNS(null, "x2", a[0]), + this.distanceLine.setAttributeNS(null, "y2", a[1]), + this.distanceLine.style.display = "", + this.distanceText.setPosition((r[0] + a[0]) / 2, (r[1] + a[1]) / 2), + this.updateTexts() + } + } + , + og.prototype.measureResult = function() { + if (void 0 !== this._distance) + return this._distance + } + , + og.prototype.updateTexts = function() { + void 0 !== this._distance && (this.distanceText.setText(this.resultToDisplayOfLength(this._distance).text, void 0), + this.distanceText.draw()) + } + , + og.prototype.setSelected = function(A) { + Xp.prototype.setSelected.call(this, A) && (A ? (this.distanceText.isShowShadow = !0, + this.distanceText.textBackgroundColor = "#ffffff", + this.distanceText.textColor = "#009bff", + this.distanceText.draw()) : (this.distanceText.isShowShadow = !1, + this.distanceText.textBackgroundColor = "#009bff", + this.distanceText.textColor = "#ffffff", + this.distanceText.draw())) + } + ; + var ng = function(A) { + Xp.call(this, A), + this.maxPointsNeed = 2; + var e = Np(); + e.setAttributeNS(null, "stroke-width", "2"), + e.setAttributeNS(null, "stroke", "#0aea06"), + this.svgGroup.appendChild(e), + this._line = e, + this.distanceText = new _p, + this.distanceText.textBackgroundColor = "#009bff", + this.svgGroup.appendChild(this.distanceText.group) + }; + (ng.prototype = Object.assign(Object.create(Xp.prototype), { + constructor: ng + })).setData = function(A, e) { + A && e && (this._points = [A, e]) + } + , + ng.prototype.draw = function(A, e) { + if (2 === this._points.length) { + var t = e(this._points[0]) + , i = e(this._points[1]); + this._line.setAttributeNS(null, "x1", t[0]), + this._line.setAttributeNS(null, "y1", t[1]), + this._line.setAttributeNS(null, "x2", i[0]), + this._line.setAttributeNS(null, "y2", i[1]), + this.distanceText.setPosition((t[0] + i[0]) / 2, (t[1] + i[1]) / 2); + var o = qp(this._points[0], this._points[1]); + this.distanceText.setText(this.resultToDisplayOfLength(o).text, void 0), + this.distanceText.draw() + } + } + ; + var rg, ag, sg = function(A, e) { + this.x = A || 0, + this.y = e || 0 + }; + Object.defineProperties(sg.prototype, { + width: { + get: function() { + return this.x + }, + set: function(A) { + this.x = A + } + }, + height: { + get: function() { + return this.y + }, + set: function(A) { + this.y = A + } + } + }), + Object.assign(sg.prototype, { + isVector2: !0, + set: function(A, e) { + return this.x = A, + this.y = e, + this + }, + setScalar: function(A) { + return this.x = A, + this.y = A, + this + }, + setX: function(A) { + return this.x = A, + this + }, + setY: function(A) { + return this.y = A, + this + }, + setComponent: function(A, e) { + switch (A) { + case 0: + this.x = e; + break; + case 1: + this.y = e; + break; + default: + throw new Error("index is out of range: " + A) + } + return this + }, + getComponent: function(A) { + switch (A) { + case 0: + return this.x; + case 1: + return this.y; + default: + throw new Error("index is out of range: " + A) + } + }, + clone: function() { + return new this.constructor(this.x,this.y) + }, + copy: function(A) { + return this.x = A.x, + this.y = A.y, + this + }, + add: function(A, e) { + return void 0 !== e ? (console.warn("Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."), + this.addVectors(A, e)) : (this.x += A.x, + this.y += A.y, + this) + }, + addScalar: function(A) { + return this.x += A, + this.y += A, + this + }, + addVectors: function(A, e) { + return this.x = A.x + e.x, + this.y = A.y + e.y, + this + }, + addScaledVector: function(A, e) { + return this.x += A.x * e, + this.y += A.y * e, + this + }, + sub: function(A, e) { + return void 0 !== e ? (console.warn("Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."), + this.subVectors(A, e)) : (this.x -= A.x, + this.y -= A.y, + this) + }, + subScalar: function(A) { + return this.x -= A, + this.y -= A, + this + }, + subVectors: function(A, e) { + return this.x = A.x - e.x, + this.y = A.y - e.y, + this + }, + multiply: function(A) { + return this.x *= A.x, + this.y *= A.y, + this + }, + multiplyScalar: function(A) { + return this.x *= A, + this.y *= A, + this + }, + divide: function(A) { + return this.x /= A.x, + this.y /= A.y, + this + }, + divideScalar: function(A) { + return this.multiplyScalar(1 / A) + }, + applyMatrix3: function(A) { + var e = this.x + , t = this.y + , i = A.elements; + return this.x = i[0] * e + i[3] * t + i[6], + this.y = i[1] * e + i[4] * t + i[7], + this + }, + min: function(A) { + return this.x > A.x && (this.x = A.x), + this.y > A.y && (this.y = A.y), + this + }, + max: function(A) { + return A.x > this.x && (this.x = A.x), + A.y > this.y && (this.y = A.y), + this + }, + clamp: function(A, e) { + return this.x = Math.max(A.x, Math.min(e.x, this.x)), + this.y = Math.max(A.y, Math.min(e.y, this.y)), + this + }, + clampScalar: (rg = new sg, + ag = new sg, + function(A, e) { + return rg.set(A, A), + ag.set(e, e), + this.clamp(rg, ag) + } + ), + clampLength: function(A, e) { + var t = this.length(); + return this.divideScalar(t || 1).multiplyScalar(Math.max(A, Math.min(e, t))) + }, + floor: function() { + return this.x = Math.floor(this.x), + this.y = Math.floor(this.y), + this + }, + ceil: function() { + return this.x = Math.ceil(this.x), + this.y = Math.ceil(this.y), + this + }, + round: function() { + return this.x = Math.round(this.x), + this.y = Math.round(this.y), + this + }, + roundToZero: function() { + return this.x = 0 > this.x ? Math.ceil(this.x) : Math.floor(this.x), + this.y = 0 > this.y ? Math.ceil(this.y) : Math.floor(this.y), + this + }, + negate: function() { + return this.x = -this.x, + this.y = -this.y, + this + }, + dot: function(A) { + return this.x * A.x + this.y * A.y + }, + cross: function(A) { + return this.x * A.y - this.y * A.x + }, + lengthSq: function() { + return this.x * this.x + this.y * this.y + }, + length: function() { + return Math.sqrt(this.x * this.x + this.y * this.y) + }, + manhattanLength: function() { + return Math.abs(this.x) + Math.abs(this.y) + }, + normalize: function() { + return this.divideScalar(this.length() || 1) + }, + angle: function() { + var A = Math.atan2(this.y, this.x); + return 0 > A && (A += 2 * Math.PI), + A + }, + distanceTo: function(A) { + return Math.sqrt(this.distanceToSquared(A)) + }, + distanceToSquared: function(A) { + var e = this.x - A.x + , t = this.y - A.y; + return e * e + t * t + }, + manhattanDistanceTo: function(A) { + return Math.abs(this.x - A.x) + Math.abs(this.y - A.y) + }, + setLength: function(A) { + return this.normalize().multiplyScalar(A) + }, + lerp: function(A, e) { + return this.x += (A.x - this.x) * e, + this.y += (A.y - this.y) * e, + this + }, + lerpVectors: function(A, e, t) { + return this.subVectors(e, A).multiplyScalar(t).add(A) + }, + equals: function(A) { + return A.x === this.x && A.y === this.y + }, + fromArray: function(A, e) { + return void 0 === e && (e = 0), + this.x = A[e], + this.y = A[e + 1], + this + }, + toArray: function(A, e) { + return void 0 === A && (A = []), + void 0 === e && (e = 0), + A[e] = this.x, + A[e + 1] = this.y, + A + }, + rotateAround: function(A, e) { + var t = Math.cos(e) + , i = Math.sin(e) + , o = this.x - A.x + , n = this.y - A.y; + return this.x = o * t - n * i + A.x, + this.y = o * i + n * t + A.y, + this + } + }); + var lg = function() { + this.elements = [1, 0, 0, 0, 1, 0, 0, 0, 1] + }; + function cg(A, e) { + this.normal = void 0 !== A ? A : new $c(1,0,0), + this.constant = void 0 !== e ? e : 0 + } + lg.prototype.clear = function() { + return this.elements = [1, 0, 0, 0, 1, 0, 0, 0, 1], + this + } + , + lg.prototype.set = function(A, e, t, i, o, n, r, a, s) { + var l = this.elements; + return l[0] = A, + l[1] = i, + l[2] = r, + l[3] = e, + l[4] = o, + l[5] = a, + l[6] = t, + l[7] = n, + l[8] = s, + this + } + , + lg.prototype.clone = function() { + return (new this.constructor).fromArray(this.elements) + } + , + lg.prototype.fromArray = function(A, e) { + void 0 === e && (e = 0); + for (var t = 0; 9 > t; t += 1) + this.elements[t] = A[t + e]; + return this + } + , + lg.prototype.multiply = function(A) { + return this.multiplyMatrices(this, A) + } + , + lg.prototype.multiplyMatrices = function(A, e) { + var t = A.elements + , i = e.elements + , o = this.elements + , n = t[0] + , r = t[3] + , a = t[6] + , s = t[1] + , l = t[4] + , c = t[7] + , h = t[2] + , d = t[5] + , p = t[8] + , g = i[0] + , u = i[3] + , f = i[6] + , m = i[1] + , C = i[4] + , y = i[7] + , v = i[2] + , I = i[5] + , E = i[8]; + return o[0] = n * g + r * m + a * v, + o[3] = n * u + r * C + a * I, + o[6] = n * f + r * y + a * E, + o[1] = s * g + l * m + c * v, + o[4] = s * u + l * C + c * I, + o[7] = s * f + l * y + c * E, + o[2] = h * g + d * m + p * v, + o[5] = h * u + d * C + p * I, + o[8] = h * f + d * y + p * E, + this + } + , + lg.prototype.scale = function(A, e) { + var t = this.elements; + return t[0] *= A, + t[3] *= A, + t[6] *= A, + t[1] *= e, + t[4] *= e, + t[7] *= e, + this + } + , + lg.prototype.rotate = function(A) { + var e = Math.cos(A) + , t = Math.sin(A) + , i = this.elements + , o = i[0] + , n = i[3] + , r = i[6] + , a = i[1] + , s = i[4] + , l = i[7]; + return i[0] = e * o + t * a, + i[3] = e * n + t * s, + i[6] = e * r + t * l, + i[1] = -t * o + e * a, + i[4] = -t * n + e * s, + i[7] = -t * r + e * l, + this + } + , + lg.prototype.makeRotate = function(A) { + var e = Math.cos(A) + , t = Math.sin(A); + return this.set(e, -t, 0, t, e, 0, 0, 0, 1), + this + } + , + lg.prototype.translate = function(A, e) { + var t = this.elements; + return t[0] += A * t[2], + t[3] += A * t[5], + t[6] += A * t[8], + t[1] += e * t[2], + t[4] += e * t[5], + t[7] += e * t[8], + this + } + , + lg.prototype.makeShear = function(A, e) { + return this.set(1, e, 0, A, 1, 0, 0, 0, 1), + this + } + , + lg.prototype.fromCanvasTransform = function(A, e, t, i, o, n) { + return this.set(A, t, o, e, i, n, 0, 0, 1), + this + } + , + lg.prototype.toCanvasTransform = function() { + var A = this.elements; + return [A[0], A[3], A[1], A[4], A[6], A[7]] + } + , + lg.prototype.getInverse = function(A, e) { + A && A.isMatrix4 && console.error("THREE.Matrix3: .getInverse() no longer takes a Matrix4 argument."); + var t = A.elements + , i = this.elements + , o = t[0] + , n = t[1] + , r = t[2] + , a = t[3] + , s = t[4] + , l = t[5] + , c = t[6] + , h = t[7] + , d = t[8] + , p = d * s - l * h + , g = l * c - d * a + , u = h * a - s * c + , f = o * p + n * g + r * u; + if (0 === f) { + var m = "THREE.Matrix3: .getInverse() can't invert matrix, determinant is 0"; + if (!0 === e) + throw new Error(m); + return console.warn(m), + this.identity() + } + var C = 1 / f; + return i[0] = p * C, + i[1] = (r * h - d * n) * C, + i[2] = (l * n - r * s) * C, + i[3] = g * C, + i[4] = (d * o - r * c) * C, + i[5] = (r * a - l * o) * C, + i[6] = u * C, + i[7] = (n * c - h * o) * C, + i[8] = (s * o - n * a) * C, + this + } + , + Object.assign(cg.prototype, { + isPlane: !0, + set: function(A, e) { + return this.normal.copy(A), + this.constant = e, + this + }, + setComponents: function(A, e, t, i) { + return this.normal.set(A, e, t), + this.constant = i, + this + }, + setFromNormalAndCoplanarPoint: function(A, e) { + return this.normal.copy(A), + this.constant = -e.dot(this.normal), + this + }, + setFromCoplanarPoints: function() { + var A = new $c + , e = new $c; + return function(t, i, o) { + var n = A.subVectors(o, i).cross(e.subVectors(t, i)).normalize(); + return this.setFromNormalAndCoplanarPoint(n, t), + this + } + }(), + clone: function() { + return (new this.constructor).copy(this) + }, + copy: function(A) { + return this.normal.copy(A.normal), + this.constant = A.constant, + this + }, + normalize: function() { + var A = 1 / this.normal.length(); + return this.normal.multiplyScalar(A), + this.constant *= A, + this + }, + negate: function() { + return this.constant *= -1, + this.normal.negate(), + this + }, + distanceToPoint: function(A) { + return this.normal.dot(A) + this.constant + }, + distanceToSphere: function(A) { + return this.distanceToPoint(A.center) - A.radius + }, + projectPoint: function(A, e) { + return void 0 === e && (console.warn("THREE.Plane: .projectPoint() target is now required"), + e = new $c), + e.copy(this.normal).multiplyScalar(-this.distanceToPoint(A)).add(A) + }, + intersectLine: function() { + var A = new $c; + return function(e, t) { + void 0 === t && (console.warn("THREE.Plane: .intersectLine() target is now required"), + t = new $c); + var i = e.delta(A) + , o = this.normal.dot(i); + if (0 === o) + return 0 === this.distanceToPoint(e.start) ? t.copy(e.start) : void 0; + var n = -(e.start.dot(this.normal) + this.constant) / o; + return 0 > n || n > 1 ? void 0 : t.copy(i).multiplyScalar(n).add(e.start) + } + }(), + intersectsLine: function(A) { + var e = this.distanceToPoint(A.start) + , t = this.distanceToPoint(A.end); + return 0 > e && t > 0 || 0 > t && e > 0 + }, + intersectsBox: function(A) { + return A.intersectsPlane(this) + }, + intersectsSphere: function(A) { + return A.intersectsPlane(this) + }, + coplanarPoint: function(A) { + return void 0 === A && (console.warn("THREE.Plane: .coplanarPoint() target is now required"), + A = new $c), + A.copy(this.normal).multiplyScalar(-this.constant) + }, + applyMatrix4: function() { + var A = new $c + , e = new lg; + return function(t, i) { + var o = i || e.getNormalMatrix(t) + , n = this.coplanarPoint(A).applyMatrix4(t) + , r = this.normal.applyMatrix3(o).normalize(); + return this.constant = -n.dot(r), + this + } + }(), + translate: function(A) { + return this.constant -= A.dot(this.normal), + this + }, + equals: function(A) { + return A.normal.equals(this.normal) && A.constant === this.constant + } + }); + var hg = function(A, e) { + this._point = void 0, + this._normal = void 0, + this.viewer = e, + this.svg = A; + var t = document.createElementNS(Dp, "polygon"); + t.setAttribute("fill", "rgba(10,234,6,0.2)"), + t.setAttribute("stroke", "#0aea06"), + t.setAttribute("stroke-width", 1), + t.style.pointerEvents = "none", + this._panel = t, + this.hoverPanelSize = { + width: 20, + height: 20 + } + }; + hg.prototype.setupWithPoint = function(A, e) { + this._point = A, + this._normal = e + } + , + hg.prototype.remove = function() { + this.svg && this._panel.parentNode && this.svg.removeChild(this._panel) + } + , + hg.prototype.add = function() { + this.svg && this._panel && this.svg.appendChild(this._panel) + } + , + hg.prototype.isVisible = function() { + return !!this._panel.parentNode + } + , + hg.prototype.stretchOnDirection = function(A, e, t) { + var i = A.clone().add(e).multiplyScalar(.5) + , o = e.clone().sub(A).normalize(); + return [i.clone().sub(o.clone().multiplyScalar(t / 2)), i.clone().add(o.clone().multiplyScalar(t / 2))] + } + , + hg.prototype.draw = function() { + var A = this.viewer.getScene().worldToDrawing(this._normal); + A.normalize(); + var e = this.viewer.worldToClient(this._point) + , t = this.viewer.getScene().worldToDrawing(this._point) + , i = this.viewer.cameraControl + , o = new cg; + o.setFromNormalAndCoplanarPoint(A, t); + var n = new sg(e.x - 10,e.y - 10) + , r = new sg(e.x + 10,e.y - 10) + , a = t + , s = i.getRaycaster(n.x, n.y) + , l = new $c + , c = new $c; + if (s.ray.intersectPlane(o, l), + (s = i.getRaycaster(r.x, r.y)).ray.intersectPlane(o, c), + null !== l && null !== c) { + var h = new $c(1,0,0) + , d = new $c(0,0,1) + , p = new $c(0,1,0) + , g = .0025 >= Math.abs(A.clone().dot(h)) + , u = .0025 >= Math.abs(A.clone().dot(p)); + if (g && u) + var f = h.clone() + , m = p.clone(); + else + f = d.clone().cross(A).normalize(), + m = A.clone().cross(f).normalize(); + var C = l.distanceTo(c) / 2 + , y = f.clone().multiplyScalar(C) + , v = m.clone().multiplyScalar(C) + , I = a.clone().sub(y).add(v) + , E = a.clone().add(y).add(v) + , B = a.clone().sub(y).sub(v) + , x = a.clone().add(y).sub(v) + , S = []; + S.push(I, E, x, B); + for (var w = [], M = i.getContainerDimensions(), b = 0; S.length > b; b += 1) { + var U = new $c(S[b].x,S[b].y,S[b].z); + U.project(i.camera); + var F = { + x: 0, + y: 0, + z: 0 + }; + F.x = Math.floor(.5 * (U.x + 1) * M.width + .5), + F.y = Math.floor(-.5 * (U.y - 1) * M.height + .5), + F.z = U.z || 0, + w.push(new $c(F.x,F.y,0)) + } + var K = this.hoverPanelSize + , Q = w[0].distanceTo(w[1]) + , R = w[0].distanceTo(w[3]) / K.height; + if (1 !== Q / K.width) { + var T = this.stretchOnDirection(w[0], w[1], K.width) + , k = this.stretchOnDirection(w[2], w[3], K.width); + w = T.concat(k) + } + if (1 !== R) { + T = this.stretchOnDirection(w[0], w[3], K.height), + k = this.stretchOnDirection(w[1], w[2], K.height); + w = [T[0], k[0], k[1], T[1]] + } + for (var D = "", L = 0; w.length > L; L += 1) + D += w[L].x + ",", + D += w[L].y + " "; + this._panel.setAttribute("points", D) + } + } + ; + var dg = function(A) { + this._point = void 0, + this.svg = A; + var e = Vp(5); + e.setAttributeNS(null, "fill", "#00ff00"), + this._circle = e + }; + dg.prototype.setupWithPoint = function(A) { + A && (this._point = A) + } + , + dg.prototype.remove = function() { + this.svg && this._circle.parentNode && this.svg.removeChild(this._circle) + } + , + dg.prototype.add = function() { + this.svg && this._circle && this.svg.appendChild(this._circle) + } + , + dg.prototype.isVisible = function() { + return !!this._circle.parentNode + } + , + dg.prototype.draw = function(A) { + if (this._point) { + var e = A(this._point); + this._circle.setAttributeNS(null, "cx", e[0]), + this._circle.setAttributeNS(null, "cy", e[1]) + } + } + ; + var pg = function(A) { + Xp.call(this, A), + this.volumeText = new _p, + this.volumeText.textBackgroundColor = "#009bff", + this.svgGroup.appendChild(this.volumeText.group); + var e = this; + this.volumeText.setClickCallback((function() { + e.onclickCallback && e.onclickCallback(e) + } + )), + this.pickedComponentKeys = [], + this._position = void 0, + this._volume = void 0 + }; + (pg.prototype = Object.assign(Object.create(Xp.prototype), { + constructor: pg + })).setData = function(A, e, t) { + this._position = A, + this._volume = e, + t && (this.unitOfModel = this.unitOfModel && this.unitOfModel !== t ? void 0 : t) + } + , + pg.prototype.isDone = function() { + return this.pickedComponentKeys[0] && this._position + } + , + pg.prototype.draw = function(A, e) { + if (this.svgGroup.parentNode && this.isDone()) { + var t = this._position; + e && (t = e(t)), + this.volumeText.setPosition(t[0], t[1]), + this.updateTexts() + } + } + , + pg.prototype.measureResult = function() { + if (this._volume) + return this._volume + } + , + pg.prototype.resultToDisplayOfVolume = function(A) { + var e = A + , t = this.unitOfModel; + return this.adjustOption && (e = this.adjustOption.adjustVolume(A), + t = this.adjustOption.unit), + this.unitOnUI && (t && (e = Jp(t, this.unitOnUI, e, 3)), + t = this.unitOnUI), + t || (t = ""), + e = e.toFixed(this.precision), + "mm" === t ? t = "mm³" : "m" === t ? t = "m³" : "cm" === t && (t = "cm³"), + { + value: Number(e), + unit: t, + text: e + t + } + } + , + pg.prototype.updateTexts = function() { + this._volume && (this.volumeText.setText(this.resultToDisplayOfVolume(this._volume).text, void 0), + this.volumeText.draw()) + } + , + pg.prototype.setSelected = function(A) { + Xp.prototype.setSelected.call(this, A) && (A ? (this.volumeText.isShowShadow = !0, + this.volumeText.textBackgroundColor = "#ffffff", + this.volumeText.textColor = "#009bff", + this.volumeText.draw()) : (this.volumeText.isShowShadow = !1, + this.volumeText.textBackgroundColor = "#009bff", + this.volumeText.textColor = "#ffffff", + this.volumeText.draw())) + } + ; + var gg = function() { + this.pointTransformer = void 0, + this.parentDom = void 0, + this.viewer = void 0, + this.is3DMode = !1, + this.isMobile = !1 + } + , ug = "Distance" + , fg = "Angle" + , mg = "Adjust" + , Cg = "Area" + , yg = "MinDistance" + , vg = "Volume" + , Ig = function(A) { + this.config = A, + this.config.viewer.measure = this, + this.svg = this._createSVG(A.parentDom.clientWidth, A.parentDom.clientHeight), + A.parentDom.appendChild(this.svg), + this._resize = this._resize.bind(this), + this.config.viewer.addEventListener("resize", this._resize), + this.setCurrentMode(ug), + this.isOpen = !1, + this.didEndMeasureCallback = void 0, + this._items = [], + this._adjustItem = void 0, + this._adjustOption = void 0, + this._precision = 3, + this._unitSetByUser = "mm", + this._pickedLine = void 0, + this._pickedPoint = void 0, + this._pickedPanel = void 0, + this._selectedItem = void 0, + this.open() + }; + Ig.prototype.supportUnits = function() { + return [{ + unit: "mm", + title: "毫米" + }, { + unit: "cm", + title: "厘米" + }, { + unit: "m", + title: "米" + }] + } + , + Ig.prototype.open = function() { + this.isOpen || (this.isOpen = !0, + this._handleKeyUp = this._handleKeyUp.bind(this), + document.addEventListener("keyup", this._handleKeyUp)) + } + , + Ig.prototype.close = function() { + this.svg.parentNode.removeChild(this.svg), + this.isOpen = !1, + this.config.is3DMode && (this.config.viewer.clearSelection(), + this.config.viewer.render()), + this.config.viewer.measure = void 0, + document.removeEventListener("keyup", this._handleKeyUp), + this.config.viewer.removeEventListener("resize", this._resize) + } + , + Ig.prototype.setCurrentMode = function(A) { + if (this.config.is3DMode || A !== vg && A !== yg) + if (this._currentMode !== A && (this._currentMode = A, + this._currentMeasureItem && (this._currentMeasureItem instanceof og && this.config.is3DMode && (this.config.viewer.clearSelection(), + this.config.viewer.render()), + this._currentMeasureItem.remove(), + this._currentMeasureItem = void 0)), + this._currentMode === mg) { + var e = this._adjustItem ? this._adjustItem : this._currentMeasureItem; + (e || e instanceof $p) && e.isDone() && (e.add(), + e.draw(void 0, this.config.pointTransformer), + this.didEndMeasureCallback && this.didEndMeasureCallback(e.measureResult())) + } else + this._adjustItem && this._adjustItem.remove() + } + , + Ig.prototype.getCurrentMode = function() { + return this._currentMode + } + , + Ig.prototype.getCurrentUnit = function() { + return this._unitSetByUser + } + , + Ig.prototype.setUnit = function(A) { + if (A && this._unitSetByUser !== A) { + this._unitSetByUser = A; + for (var e = 0, t = this._items.length; t > e; e += 1) { + this._items[e].changeUnit(A) + } + this._adjustOption && (this._adjustOption.valueAfterAdjust = Jp(this._adjustOption.unit, A, this._adjustOption.valueAfterAdjust, 0), + this._adjustOption.unit = A) + } + } + , + Ig.prototype.getCurrentPrecision = function() { + return this._precision + } + , + Ig.prototype.setPrecision = function(A) { + if (A && this._precision !== A) { + this._precision = A; + for (var e = 0, t = this._items.length; t > e; e += 1) { + this._items[e].changePrecision(A) + } + this._adjustItem && this._adjustItem.changePrecision(A) + } + } + , + Ig.prototype.clearAllMeasure = function() { + for (var A = 0, e = this._items.length; e > A; A += 1) { + this._items[A].remove() + } + this._items = [], + this._selectedItem = void 0 + } + , + Ig.prototype.removeSelectedMeasure = function() { + if (this._selectedItem) { + for (var A = 0, e = this._items.length; e > A; A += 1) + if (this._items[A] === this._selectedItem) { + this._selectedItem.remove(), + this._items.splice(A, 1); + break + } + (this._selectedItem instanceof pg || this._selectedItem instanceof og) && this.config.is3DMode && (this.config.viewer.clearSelection(), + this.config.viewer.render()), + this._selectedItem = void 0, + this._items.length > 0 && (this._selectedItem = this._items[this._items.length - 1], + this._selectedItem.setSelected(!0)) + } + } + , + Ig.prototype.setAdjustForCurrentAdjustItem = function(A, e) { + if (A && e && this._currentMode === mg && (this._currentMeasureItem && this._currentMeasureItem instanceof $p && this._currentMeasureItem.isDone() && (this._adjustItem && this._adjustItem.remove(), + this._adjustItem = this._currentMeasureItem, + this._currentMeasureItem = void 0), + this._adjustItem && this._adjustItem.isDone())) { + var t = new Ag; + t.unit = A, + t.valueBeforeAdjust = this._adjustItem.measureResult().distance, + t.valueAfterAdjust = e, + this._adjustOption = t; + for (var i = 0, o = this._items.length; o > i; i += 1) { + this._items[i].adjustWithOption(this._adjustOption) + } + this._adjustItem.adjustWithOption(this._adjustOption) + } + } + , + Ig.prototype.cancelCurrentAdjust = function() { + if (this._adjustItem && (this._adjustItem.remove(), + this._adjustItem = void 0), + this._currentMeasureItem instanceof $p && (this._currentMeasureItem.remove(), + this._currentMeasureItem = void 0), + this._adjustOption) { + for (var A = 0, e = this._items.length; e > A; A += 1) { + this._items[A].unAdjustWithOption(this._adjustOption) + } + this._adjustOption = void 0 + } + } + , + Ig.prototype.cancelCurrentMeasure = function() { + !this._currentMeasureItem || this._currentMeasureItem instanceof $p || (this._currentMeasureItem.remove(), + this._currentMeasureItem = void 0) + } + , + Ig.prototype.processIntersect = function(A) { + if (this.isOpen) { + if (!A) + return this._hidePickedLine(), + void this._hidePickedPoint(); + if (A.pickPoint) { + var e = [A.pickPoint.x, A.pickPoint.y, void 0 === A.pickPoint.z ? 0 : A.pickPoint.z] + , t = e; + if (A.pick) { + if (this._currentMode === mg && this._currentMeasureItem && this._currentMeasureItem.isDone() && (this._currentMeasureItem.remove(), + this._currentMeasureItem = void 0), + this._currentMeasureItem || this._createNewItem(), + !this._currentMeasureItem) + return; + if (this._currentMeasureItem instanceof og) { + var i = this._currentMeasureItem.pickedComponentKeys; + if (i.push(A.userId), + 2 === i.length) { + var o = this.config.viewer.calculateMinDistance(i[0], i[1]); + if (o && o.start && o.end) + this._currentMeasureItem.setData([[o.start.x, o.start.y, o.start.z], [o.end.x, o.end.y, o.end.z]], o.minDistance, A.measureUnit), + this._currentMeasureItem.draw(void 0, this.config.pointTransformer); + else + this._currentMeasureItem = void 0 + } + this.config.viewer.addToSelection(i), + this.config.viewer.render() + } else if (this._currentMeasureItem instanceof pg) { + var n = this._currentMeasureItem.pickedComponentKeys; + if (0 === n.length) { + n.push(A.userId); + var r = this.config.viewer.calculateComponentVolume(n[0]); + r && (this._currentMeasureItem.setData(r.position, r.volume, A.measureUnit), + this._currentMeasureItem.draw(void 0, this.config.pointTransformer)), + this.config.viewer.addToSelection(n), + this.config.viewer.render() + } + } else + t = void 0, + this._currentMeasureItem.addPickedPoint(e, A.measureUnit, this.config.pointTransformer), + this._currentMeasureItem.draw(t, this.config.pointTransformer); + if (this._currentMeasureItem && this._currentMeasureItem.isDone()) { + this._currentMeasureItem instanceof $p || !this._adjustOption || this._currentMeasureItem.adjustWithOption(this._adjustOption); + var a = this._currentMeasureItem.measureResult(); + this._currentMeasureItem instanceof $p || (this._items.push(this._currentMeasureItem), + this._selectedItem && (this._selectedItem.setSelected(!1), + this._selectedItem = void 0), + this._selectedItem = this._currentMeasureItem, + this._selectedItem.setSelected(!0), + this._currentMeasureItem = void 0), + this.didEndMeasureCallback && this.didEndMeasureCallback(a) + } + } else + this._currentMeasureItem && this._currentMeasureItem.draw(t, this.config.pointTransformer) + } + this._currentMode !== yg && this._currentMode !== vg && (A.pickPoint && A.isAbsorbPoint ? this._showPickedPoint(A.pickPoint) : this._hidePickedPoint(), + A.pickPlane ? this._showPickedPanel(A.pickPoint, A.normal) : this._hidePickedPanel(), + A.pickLine ? this._showPickedLine(A.pickLine[0], A.pickLine[1], A.measureUnit) : this._hidePickedLine()) + } + } + , + Ig.prototype.update = function() { + if (this.isOpen) { + for (var A = 0, e = this._items.length; e > A; A += 1) { + this._items[A].draw(void 0, this.config.pointTransformer) + } + this._currentMeasureItem && this._currentMeasureItem.draw(void 0, this.config.pointTransformer), + this._adjustItem && this._adjustItem.draw(void 0, this.config.pointTransformer), + this._pickedLine && this._pickedLine.isVisible() && this._pickedLine.draw(void 0, this.config.pointTransformer), + this._pickedPanel && this._pickedPanel.isVisible() && this._pickedPanel.draw(this.config.pointTransformer) + } + } + , + Ig.prototype.changeSelect = function() { + for (var A = 0, e = this._items.length; e > A; A += 1) { + var t = this._items[A]; + t.setSelected(this._selectedItem === t) + } + } + , + Ig.prototype._resize = function() { + this.svg.style.width = this.config.parentDom.clientWidth, + this.svg.style.height = this.config.parentDom.clientHeight + } + , + Ig.prototype._createNewItem = function() { + switch (this._currentMode) { + case ug: + this._currentMeasureItem = new ig(this.svg,this.config.isMobile,this._items.length + 1); + break; + case fg: + this._currentMeasureItem = new eg(this.svg); + break; + case mg: + this._currentMeasureItem = new $p(this.svg); + break; + case Cg: + this._currentMeasureItem = new tg(this.svg); + break; + case yg: + this._currentMeasureItem = new og(this.svg); + break; + case vg: + this._currentMeasureItem = new pg(this.svg) + } + if (this._currentMeasureItem) { + this._currentMeasureItem.is3DMode = this.config.is3DMode, + this._currentMeasureItem instanceof $p || (this._adjustOption && this._currentMeasureItem.adjustWithOption(this._adjustOption), + this._unitSetByUser && this._currentMeasureItem.changeUnit(this._unitSetByUser)), + this._currentMeasureItem.changePrecision(this._precision); + var A = this; + this._currentMeasureItem.setClickCallback((function(e) { + e.isDone() && (A._selectedItem = e, + A.changeSelect()) + } + )) + } + } + , + Ig.prototype._showPickedLine = function(A, e, t) { + var i = [A.x, A.y, void 0 === A.z ? 0 : A.z] + , o = [e.x, e.y, void 0 === e.z ? 0 : e.z]; + this._pickedLine || (this._pickedLine = new ng(this.svg), + this._pickedLine.unitOfModel = t), + this._adjustOption && this._pickedLine.adjustWithOption(this._adjustOption), + this._pickedLine.changeUnit(this._unitSetByUser ? this._unitSetByUser : t), + this._pickedLine.changePrecision(this._precision), + this._pickedLine.add(), + this._pickedLine.setData(i, o), + this._pickedLine.draw(void 0, this.config.pointTransformer) + } + , + Ig.prototype._hidePickedLine = function() { + this._pickedLine && this._pickedLine.remove() + } + , + Ig.prototype._showPickedPoint = function(A) { + this._pickedPoint || (this._pickedPoint = new dg(this.svg)), + this._pickedPoint.add(), + this._pickedPoint.setupWithPoint(A), + this._pickedPoint.draw(this.config.pointTransformer) + } + , + Ig.prototype._hidePickedPoint = function() { + this._pickedPoint && this._pickedPoint.remove() + } + , + Ig.prototype._showPickedPanel = function(A, e) { + this._pickedPanel || (this._pickedPanel = new hg(this.svg,this.config.viewer)), + this._pickedPanel.add(), + this._pickedPanel.setupWithPoint(A, e), + this._pickedPanel.draw(this.config.pointTransformer) + } + , + Ig.prototype._hidePickedPanel = function() { + this._pickedPanel && this._pickedPanel.remove() + } + , + Ig.prototype._createSVG = function(A, e) { + var t = Lp(); + return t.style.width = A + "px", + t.style.height = e + "px", + t.style.position = "absolute", + t.style.left = "0", + t.style.top = "0", + t + } + , + Ig.prototype._handleKeyUp = function(A) { + var e = A.keyCode; + 27 === e ? this.cancelCurrentMeasure() : 46 === e && this.removeSelectedMeasure() + } + ; + var Eg = function(A) { + yp.call(this, Pc.PICK_BY_MEASURE), + this.controlManager = A.controlManager, + this.pickHelper = new kp(A.cameraControl), + this.mouseDown = new s, + this.lastEvent = null, + this.pick = !1, + this.pickPoint = new y; + var e = A.getRenderer().domElement.parentElement + , t = new gg; + t.parentDom = e, + t.pointTransformer = A.getScreenCoordFromSceneCoord.bind(A), + t.viewer = A, + t.is3DMode = !0, + this.measure = new Ig(t); + var i = this; + A.cameraControl.addEventListener(Rc.ON_CAMERA_CHANGE, (function() { + i.measure.update() + } + )), + A.clearSelection() + }; + (Eg.prototype = Object.create(yp.prototype)).constructor = Eg, + Eg.prototype.destroy = function() { + yp.prototype.destroy.call(this), + this.editorManager = null, + this.mouseDown = null, + this.lastEvent = null, + this.pickPoint = null, + this.pickHelper.destroy(), + this.pickHelper = null + } + , + Eg.prototype.processMouseDown = function(A) { + return !!mh.isMobileDevice() || (A.button === t.LEFT ? (this.mouseDown.x = A.clientX, + this.mouseDown.y = A.clientY, + !1) : yp.prototype.processMouseDown.call(this, A)) + } + , + Eg.prototype.processMouseMove = function(A) { + return !1 + } + , + Eg.prototype.processMouseUp = function(A) { + if (mh.isMobileDevice()) + return !0; + if (A.button === t.LEFT) { + if (2 >= new s(A.clientX,A.clientY).distanceTo(this.mouseDown)) { + var e = this.pickPoint.clone() + , i = void 0; + return i = A.shiftKey ? this.pickHelper.handleShiftMeasure(A, !0, e) : this.pickHelper.handleMouseMeasure(A, !0, e), + this.measure.processIntersect(i), + e.equals(this.pickPoint) || (this.pick = !this.pick, + this.pickPoint.copy(e)), + this.controlManager.isUpdateRenderList = !0, + !0 + } + return !0 + } + return yp.prototype.processMouseUp.call(this, A) + } + , + Eg.prototype.processKeyDown = function(A) { + return 16 === A.keyCode || yp.prototype.processKeyDown.call(this, A) + } + , + Eg.prototype.processHover = function(A) { + if (mh.isMobileDevice()) + return !0; + var e = void 0; + return e = A.shiftKey ? this.pickHelper.handleShiftMeasure(A, !1, this.pickPoint) : this.pickHelper.handleMouseMeasure(A, !1, this.pickPoint), + this.measure.processIntersect(e), + !0 + } + , + Eg.prototype.processTouchstart = function(A) { + return this.mouseDown.x = A.touches[0].clientX, + this.mouseDown.y = A.touches[0].clientY, + A.clientX = A.touches[0].clientX, + A.clientY = A.touches[0].clientY, + this.lastEvent = A, + yp.prototype.processTouchstart.call(this, A) + } + , + Eg.prototype.processTouchmove = function(A) { + return this.lastEvent = null, + yp.prototype.processTouchmove.call(this, A) + } + , + Eg.prototype.processTouchend = function(A) { + if (null !== this.lastEvent) { + var e = this.pickHelper.handleMouseMeasure(this.lastEvent, !0, this.pickPoint); + this.measure.processIntersect(e), + this.controlManager.isUpdateRenderList = !0 + } + return yp.prototype.processTouchend.call(this, A) + } + , + Eg.prototype.touchPointMove = function(A) { + this.measure.processIntersect(this.pickHelper.handleMouseMeasure(A, !1, this.pickPoint)) + } + , + Eg.prototype.touchPointEnd = function(A) { + var e = this.pickPoint.clone() + , t = this.pickHelper.handleMouseMeasure(A, !0, e); + return this.measure.processIntersect(t), + e.equals(this.pickPoint) || (this.pick = !this.pick, + this.pickPoint.copy(e)), + this.controlManager.isUpdateRenderList = !0, + !0 + } + , + Eg.prototype.onExit = function(A) { + this.measure.close(); + var e = this.pickHelper.scene; + e.hasGroup(gp.MEASUREPICKPLANE) && e.removeGroupByName(gp.MEASUREPICKPLANE) + } + ; + var Bg, xg, Sg, wg = { + pickByRect: function(A, e, t, i, o, n) { + var r = [] + , a = i.octantToObjectMap + , s = (A.getMatrixGlobal(), + i.sceneState) + , l = new aA; + function c(A, t, i) { + A && A.frustumIntersect(e, t, i) + } + var h = i.filter + , d = h._hasVisibleFilter() + , p = h._hasPickableFilter(); + if (t !== Kc.Clear) { + var g, u, f = null, m = []; + for (var C in a) + if (a.hasOwnProperty(C)) { + var y = i.getModel(C); + (f = a[C]).mesh; + var v = y && y.kdTreeNode + , I = []; + if (Array.isArray(v)) + for (var E = 0, B = v.length; B > E; E += 1) { + var x = v[E] + , S = x.modelKey + , w = (new M).copy(y.getModelMatrix()); + S && w.multiply(y.subModel[S]), + c(x, I, w) + } + else + c(v, I, y.getModelMatrix()); + var b = Object.keys(y.manager.explosionList); + y && y.manager && b.length > 0 && (I = I.concat(b)); + for (var U = 0, F = (m = uh.unique(I)).length; F > U; U += 1) { + var K = f.info[m[U]]; + if (K) + for (var Q = 0, R = K.length; R > Q; Q += 1) { + var T = K[Q]; + (u = void 0, + u = i.isHiddenSourceObjectUserId((g = T).userId), + d && !h._isVisible(g) || p && !h._isPickable(g) || u) || (l.copy(T.boundingBox), + l.applyMatrix4(y.getModelMatrix()), + this._intersectBox(e, l, n) && !this._clipBox(o, l) && r.push(T.userId)) + } + } + } + return (r = r.concat(this.pickNonModelObjectsByRect(o, i, e, n))).length > 0 && (Kc.Remove === t ? (s.removeSelection(r), + i.dispatchEvent({ + type: Rc.ON_RECTPICK_REMOVE, + list: r + })) : Kc.Add === t && (s.addSelection(r), + i.dispatchEvent({ + type: Rc.ON_RECTPICK_ADD, + list: r + }))), + r + } + s.clearSelection() + }, + getObjectsInBox: function(A, e, t, i, o) { + var n = {} + , r = t.octantToObjectMap + , a = (A.getMatrixGlobal(), + new aA); + function s(A) { + for (var e = new y, t = 0; 8 > t; t += 1) + if (e.x = 4 > t ? A.min.x : A.max.x, + e.y = 2 > t / 2 ? A.min.y : A.max.y, + e.z = t % 2 == 0 ? A.min.z : A.max.z, + !i.clipPoint(e)) + return !1; + return !0 + } + function l(A) { + return o ? !(e.min.x > A.min.x || A.max.x > e.max.x || e.min.y > A.min.y || A.max.y > e.max.y || e.min.z > A.min.z || A.max.z > e.max.z) : !(e.min.x > A.max.x || A.min.x > e.max.x || e.min.y > A.max.y || A.min.y > e.max.y || e.min.z > A.max.z || A.min.z > e.max.z) + } + function c(A) { + return Boolean(!(e.max.x > A.max.x || A.min.x > e.min.x || e.max.y > A.max.y || A.min.y > e.min.y || e.max.z > A.max.z || A.min.z > e.min.z)) + } + var h = t.filter + , d = h._hasVisibleFilter() + , p = h._hasPickableFilter(); + var g, u, f = null; + for (var m in r) + if (r.hasOwnProperty(m)) { + var C = t.getModel(m); + for (var v in (f = r[m]).info) + if (f.info.hasOwnProperty(v)) { + var I = f.info[v]; + if (!I) + continue; + for (var E = 0, B = I.length; B > E; E += 1) { + var x = I[E]; + (u = void 0, + u = t.isHiddenSourceObjectUserId((g = x).userId), + d && !h._isVisible(g) || p && !h._isPickable(g) || u) || (a.copy(x.boundingBox), + a.applyMatrix4(C.getModelMatrix()), + !l(a) || c(a) || s(a) || (n[x.userId] = !0)) + } + } + } + var S = []; + for (var w in n) + S.push(w); + return S + }, + pickNonModelObjectsByRect: function(A, e, t, i) { + var o = [] + , n = e.getNodeInfosInPlugins() + , r = new aA; + for (var a in n) + if (n.hasOwnProperty(a)) { + var s = n[a]; + for (var a in s) + if (s.hasOwnProperty(a)) { + var l = s[a][0].mesh; + if (l) { + l instanceof Array || (l = [l]), + r.empty(); + for (var c = 0, h = l.length; h > c; c += 1) { + var d = l[c]; + d instanceof H && r.expandByObject(d) + } + this._intersectBox(t, r, i) && !this._clipBox(A, r) && o.push(a) + } + } + } + return o + }, + _intersectBox: (xg = new y, + Sg = new y, + function(A, e, t) { + for (var i = 0, o = A.planes, n = 0; 6 > n; n += 1) { + var r = o[n]; + xg.x = r.normal.x > 0 ? e.min.x : e.max.x, + Sg.x = r.normal.x > 0 ? e.max.x : e.min.x, + xg.y = r.normal.y > 0 ? e.min.y : e.max.y, + Sg.y = r.normal.y > 0 ? e.max.y : e.min.y, + xg.z = r.normal.z > 0 ? e.min.z : e.max.z, + Sg.z = r.normal.z > 0 ? e.max.z : e.min.z; + var a = r.distanceToPoint(xg) + , s = r.distanceToPoint(Sg); + if (0 > a && 0 > s) + return !1; + 0 > a * s || (i += 1) + } + return t ? i >= 2 : 6 === i + } + ), + _clipBox: (Bg = new y, + function(A, e) { + for (var t = 0; 8 > t; t += 1) + if (Bg.x = 4 > t ? e.min.x : e.max.x, + Bg.y = 2 > t / 2 ? e.min.y : e.max.y, + Bg.z = t % 2 == 0 ? e.min.z : e.max.z, + !A.clipPoint(Bg)) + return !1; + return !0 + } + ) + }, Mg = function(A, e, t) { + yp.call(this, A), + this.cameraControl = e, + this.frustum = new Ze, + this.startPt = new s, + this.endPt = new s, + this.eventDispatcher = t + }; + (Mg.prototype = Object.create(yp.prototype)).constructor = Mg, + Mg.prototype.destroy = function(A) { + yp.prototype.destroy.call(this), + this.cameraControl = null, + this.frustum = null, + this.startPt = null, + this.endPt = null, + this.eventDispatcher = null + } + , + Mg.prototype.onUpdateUI = function(A) { + this.eventDispatcher.dispatchEvent({ + type: Rc.ON_CONTROL_UPDATEUI, + data: A, + editor: this.name + }) + } + , + Mg.prototype.updateFrustum = function(A, e) { + var t = this.startPt.x + , i = this.endPt.x + , o = this.startPt.y + , n = this.endPt.y; + if (t > i) { + var r = t; + t = i, + i = r + } + if (o > n) { + var a = o; + o = n, + n = a + } + if (i - t == 0 || n - o == 0) + return !1; + var s = this.cameraControl + , l = s.getContainerDimensions(); + return A && s.computeFrustum(t, i, o, n, this.frustum, l), + e && this.onUpdateUI({ + visible: !0, + dir: this.endPt.x > this.startPt.x, + left: t - l.left, + top: o - l.top, + width: i - t, + height: n - o + }), + !0 + } + ; + var bg = function(A) { + Mg.call(this, Pc.PICK_BY_RECT, A.cameraControl, A.modelManager), + this.viewer = A, + this.scene = A.getScene(), + this.pickHelper = new kp(this.cameraControl), + this.activatePick = !1, + this.pressKey = "", + this.pickPoint = new y, + this.snapIsEnabled = !1 + }; + (bg.prototype = Object.create(Mg.prototype)).constructor = bg, + bg.prototype.destroy = function() { + Mg.prototype.destroy.call(this), + this.pickHelper.destroy(), + this.pickHelper = null, + this.viewer = null, + this.scene = null, + this.pickPoint = null + } + , + bg.prototype.setPressKey = function(A) { + this.pressKey = A + } + , + bg.prototype.processMouseDown = function(A) { + return A.preventDefault(), + this.activatePick = A.ctrlKey || A.altKey, + this.activatePick && A.button === t.LEFT ? (this.startPt.set(A.clientX, A.clientY), + !0) : Mg.prototype.processMouseDown(this, A) + } + , + bg.prototype.processMouseMove = function(A) { + return this.activatePick && A.button === t.LEFT ? (this.endPt.set(A.clientX, A.clientY), + this.updateFrustum(!1, !0), + !0) : Mg.prototype.processMouseMove(this, A) + } + , + bg.prototype.processMouseUp = function(A) { + if (this.onUpdateUI({ + visible: !1 + }), + this.activatePick && A.button === t.LEFT) { + if (this.activatePick = !1, + 2 > Math.abs(this.startPt.x - A.clientX) && 2 > Math.abs(this.startPt.y - A.clientY)) + return this.pickHelper.click(A, null), + !0; + if (this.endPt.set(A.clientX, A.clientY), + !this.updateFrustum(!0, !1)) + return this.pickHelper.click(A), + !0; + var e = Kc.Clear + , i = this.pressKey || A.ctrlKey && "ctrl" || A.altKey && "alt" || ""; + return "ctrl" === i ? e = Kc.Add : "alt" === i && (e = Kc.Remove), + wg.pickByRect(this.scene, this.frustum, e, this.cameraControl.viewer.modelManager, this.viewer, this.startPt.x > this.endPt.x), + this.pickHelper.lastPickedUserId = "", + this.cameraControl.updateView(!0), + !0 + } + return Mg.prototype.processMouseUp(this, A) + } + , + bg.prototype.processTouchstart = function(A) { + return A.preventDefault(), + this.pressKey ? (this.startPt.set(A.changedTouches[0].pageX, A.changedTouches[0].pageY), + !0) : Mg.prototype.processTouchstart(this, A) + } + , + bg.prototype.processTouchmove = function(A) { + return this.pressKey ? (this.endPt.set(A.changedTouches[0].pageX, A.changedTouches[0].pageY), + this.updateFrustum(!1, !0), + !0) : Mg.prototype.processMouseMove(this, A) + } + , + bg.prototype.processTouchend = function(A) { + this.onUpdateUI({ + visible: !1 + }); + var e = A.changedTouches[0].pageX + , t = A.changedTouches[0].pageY; + if (this.pressKey) { + if (2 > Math.abs(this.startPt.x - e) && 2 > Math.abs(this.startPt.y - t)) + return this.pickHelper.click(A, null), + !0; + if (this.endPt.set(e, t), + !this.updateFrustum(!0, !1)) + return this.pickHelper.click(A), + !0; + var i = Kc.Clear + , o = this.pressKey; + return "ctrl" === o ? i = Kc.Add : "alt" === o && (i = Kc.Remove), + wg.pickByRect(this.scene, this.frustum, i, this.cameraControl.viewer.modelManager, this.viewer, this.startPt.x > this.endPt.x), + this.pickHelper.lastPickedUserId = "", + this.cameraControl.updateView(!0), + !0 + } + return Mg.prototype.processTouchend(this, A) + } + , + bg.prototype.processHover = function(A) { + if (this.snapIsEnabled) + return vc.IsMobile || this.pickHelper.handleMouseMeasure(A, !1, this.pickPoint, Rc.ON_HOVER_SNAP), + !0 + } + , + bg.prototype.enableSnap = function(A) { + this.snapIsEnabled = A + } + ; + var Ug = function(A) { + Mg.call(this, Pc.ZOOM_BY_RECT, A.cameraControl, A.modelManager), + this.scene = A.getScene(), + this.activateZoom = !1 + }; + (Ug.prototype = Object.create(Mg.prototype)).constructor = Ug, + Ug.prototype.destroy = function() { + Mg.prototype.destroy.call(this), + this.scene = null + } + , + Ug.prototype.processMouseDown = function(A) { + return A.button === t.LEFT ? (this.startPt.set(A.clientX, A.clientY), + this.activateZoom = !0, + !0) : Mg.prototype.processMouseDown.call(this, A) + } + , + Ug.prototype.processMouseMove = function(A) { + return this.activateZoom ? (this.endPt.set(A.clientX, A.clientY), + this.updateFrustum(!1, !0), + !0) : Mg.prototype.processMouseMove.call(this, A) + } + , + Ug.prototype.processMouseUp = function(A) { + return this.activateZoom ? (this.activateZoom = !1, + this.onUpdateUI({ + visible: !1 + }), + this.endPt.set(A.clientX, A.clientY), + this.updateFrustum(!0, !1) && this.zoomToRectangle(), + !0) : Mg.prototype.processMouseUp.call(this, A) + } + , + Ug.prototype.zoomToRectangle = function() { + var A = this.cameraControl.camera + , e = this.cameraControl.camera.target + , t = this.cameraControl.getContainerDimensions() + , i = this.startPt.x + , o = this.startPt.y + , n = this.endPt.x + , r = this.endPt.y + , a = Math.abs(n - i) + , l = Math.abs(o - r); + if (0 !== a && 0 !== l) { + var c = new s((i + n) / 2,(o + r) / 2) + , h = A.position.clone() + , d = e.clone().sub(h) + , p = d.length() + , g = 0 + , u = this.cameraControl.getIntersectContext(c) + , f = this.cameraControl.intersector.hitTest(u); + if (f) { + var m = a / l > t.width / t.height ? a / t.width : l / t.height + , C = f.distanceTo(h) * m; + d.normalize(), + g = d.clone().negate().multiplyScalar(C) + } else { + var v = {}; + v.left = Math.min(i, n), + v.top = Math.min(o, r), + v.right = Math.max(i, n), + v.bottom = Math.max(o, r); + var I = this.scene.getNearDepthByRect(this.frustum, A); + if (I === 1 / 0) + return; + var E = new y((i + n) / 2,(o + r) / 2,I) + , B = new y(v.left,v.top,I) + , x = this.clientToWorld(E) + , S = this.clientToWorld(B) + , w = x.clone().sub(S).length(); + f = x.clone(), + d.normalize(), + g = d.clone().negate().multiplyScalar(w) + } + h = f.clone().add(g), + A.position.copy(h), + e.copy(h).sub(g.clone().normalize().multiplyScalar(p)), + this.cameraControl.updateView(!0) + } + } + , + Ug.prototype.worldToClient = function(A) { + var e = this.cameraControl.camera + , t = new y(A.x,A.y,A.z); + return t.project(e), + t + } + , + Ug.prototype.clientToWorld = function(A) { + var e = this.cameraControl.getContainerDimensions() + , t = this.cameraControl.camera + , i = new y; + return i.x = A.x / e.width * 2 - 1, + i.y = -A.y / e.height * 2 + 1, + i.z = A.z, + i.unproject(t), + i + } + ; + var Fg = function(A, e) { + this.name = A, + this.cameraControl = e, + this.mouseButtons = { + ORBIT: t.LEFT, + PAN2: t.MIDDLE, + PAN: t.RIGHT + }, + this.StateType = { + NONE: -1, + ROTATE: 0, + DOLLY: 1, + PAN: 2 + }, + this.state = this.StateType.NONE, + this.zoomSpeed = Math.pow(.95, .2), + this.defaultMovementSpeed = .005 * vc.SceneSize, + this.movementSpeed = this.defaultMovementSpeed, + this.minMovementSpeed = .001, + this.defaultKeyPanSpeed = 2, + this.keyPanSpeed = this.defaultKeyPanSpeed, + this.minKeyPanSpeed = .01, + this.wheelZoomFactor = 45e-5, + this.pointerLock = !1 + }; + Fg.prototype.getName = function() { + return this.name + } + , + Fg.prototype.destroy = function() { + this.scene = null, + this.domElement = null, + this.cameraControl = null, + this.mouseButtons = null, + this.StateType = null + } + , + Fg.prototype.onExit = function() {} + , + Fg.prototype.onEnter = function() {} + , + Fg.prototype.processMouseDown = function(A) {} + , + Fg.processMouseMove = function(A) {} + , + Fg.prototype.processMouseUp = function(A) {} + , + Fg.prototype.processMouseWheel = function(A) {} + , + Fg.prototype.processMouseDoubleClick = function(A) {} + , + Fg.prototype.processKeyDown = function(A) {} + , + Fg.prototype.processKeyUp = function(A) {} + , + Fg.prototype.processTouchstart = function(A) {} + , + Fg.prototype.processTouchmove = function(A) {} + , + Fg.prototype.processTouchend = function(A) {} + , + Fg.prototype.processHover = function(A) {} + , + Fg.prototype.processMovement = function(A) {} + , + Fg.prototype.processPointerLockEnter = function(A) {} + , + Fg.prototype.processPointerLockExit = function(A) {} + , + Fg.prototype.moveTo = function(A, e, t) {} + , + Fg.prototype.rotateTo = function(A) {} + , + Fg.prototype.dispatchEvent = function(A) { + this.cameraControl.viewer.getControlManager().dispatchEvent(A) + } + , + Fg.prototype.getDomElement = function() { + return this.domElement + } + , + Fg.prototype.getRendererDomElement = function() { + return this.rendererDomElement + } + , + Fg.prototype.updateButtons = function(A) { + void 0 !== A.ORBIT && (this.mouseButtons.ORBIT = A.ORBIT), + void 0 !== A.PAN && (this.mouseButtons.PAN = A.PAN), + void 0 !== A.PAN2 && (this.mouseButtons.PAN2 = A.PAN2), + void 0 !== A.ZOOM && (this.mouseButtons.ZOOM = A.ZOOM) + } + ; + var Kg = function(A) { + Fg.call(this, Gc.FLY, A), + this.lookSpeed = .001, + this.constrainPitch = !0, + this.pitchMin = a.degToRad(5) - .5 * Math.PI, + this.pitchMax = .5 * Math.PI - this.pitchMin, + this.pitchDeltaTotal = 0, + this.moveState = qc.NONE, + this.rotateStart = new s, + this.rotateEnd = new s, + this.rotateDelta = new s, + this._panStart = new s, + this._panEnd = new s, + this._panDelta = new s, + this._pan = new y, + this._worldDimension = new s, + this.lastMousePoint = new s, + this.isLockHeight = !1, + this.lockedHeight = 0, + this.pickHelper = new kp(A), + this.intersectOfMouseDown = null + }; + (Kg.prototype = Object.create(Fg.prototype)).constructor = Kg, + Kg.prototype.destroy = function() { + Fg.prototype.destroy.call(this), + this.cameraControl = null, + this.scene = null, + this.rotateStart = null, + this.rotateEnd = null, + this.rotateDelta = null, + this._panStart = null, + this._panEnd = null, + this._panDelta = null, + this._pan = null, + this._worldDimension = null, + this.lastMousePoint = null, + this.intersectOfMouseDown = null, + this.pickHelper.destroy(), + this.pickHelper = null + } + , + Kg.prototype.processMouseDown = function(A) { + A.preventDefault(), + A.stopPropagation(), + this.lastMousePoint.set(A.clientX, A.clientY); + var e = this.cameraControl; + if (this.intersectOfMouseDown = null, + A.button === this.mouseButtons.ORBIT) { + if (jh.NoRotate) + return; + this.rotateStart.set(A.clientX, A.clientY), + this.state = this.StateType.ROTATE, + this.dispatchEvent({ + type: Rc.ON_CONTROL_BEGIN, + name: "look", + control: this.name + }) + } else if (A.button === this.mouseButtons.PAN || A.button === this.mouseButtons.PAN2) { + if (jh.NoPan) + return; + this._panStart.set(A.clientX, A.clientY), + this._worldDimension = e.getWorldDimension(A.clientX, A.clientY), + this.intersectOfMouseDown = e.getLastIntersect(), + this.state = this.StateType.PAN, + this.isLockHeight && (this.lockedHeight = A.clientY) + } + } + , + Kg.prototype.doPan = function(A, e) { + var t = this.cameraControl; + this._panEnd.set(A, this.isLockHeight ? this.lockedHeight : e), + this._panDelta.subVectors(this._panEnd, this._panStart), + 0 === this._panDelta.x && 0 === this._panDelta.y || (t.panOnWorld(this._panStart, this._panEnd, this._pan, this._worldDimension), + t.adjustCameraForPan(this._pan), + this._panStart.copy(this._panEnd), + t.update(!0)) + } + , + Kg.prototype.processMouseMove = function(A) { + var e = this.cameraControl; + (A.preventDefault(), + this.state === this.StateType.ROTATE) ? (this.rotateEnd.set(A.clientX, A.clientY), + this.rotateDelta.subVectors(this.rotateEnd, this.rotateStart), + this.rotateStart.copy(this.rotateEnd), + (0 !== this.rotateDelta.x || 0 !== this.rotateDelta.y) && e.rotateForFly(this.rotateDelta.x * this.lookSpeed, this.rotateDelta.y * this.lookSpeed, this.pitchMin, this.pitchMax)) : this.state === this.StateType.PAN && this.doPan(A.clientX, A.clientY) + } + , + Kg.prototype.processMouseUp = function(A) { + if (A.preventDefault(), + A.stopPropagation(), + A.button !== t.LEFT || this.lastMousePoint.x !== A.clientX || this.lastMousePoint.y !== A.clientY) { + this.intersectOfMouseDown = null; + var e = this.cameraControl; + switch (this.state) { + case this.StateType.ROTATE: + this.rotateDelta.set(0, 0); + e.rotateForFly(0, 0, this.pitchMin, this.pitchMax), + this.dispatchEvent({ + type: Rc.ON_CONTROL_END, + name: "look", + control: this.name + }); + break; + case this.StateType.PAN: + this.doPan(A.clientX, A.clientY) + } + e.endOperation(), + this.state = this.StateType.NONE + } else + this.pickHelper.click(A, this.intersectOfMouseDown) + } + , + Kg.prototype.processHover = function(A) { + this.pickHelper.handleMouseHover(A) + } + , + Kg.prototype.processMouseWheel = function(A) { + A.preventDefault(), + A.stopPropagation(); + var e = this.cameraControl; + if (!jh.NoZoom) { + var t = A.wheelDelta || A.detail; + t = Math.abs(t) > 10 ? t : 40 * -t, + t *= 5e-4, + jh.ReverseWheelDirection && (t *= -1), + this.cameraControl.delayHandle(); + var i = e.getContainerDimensions(); + e.zoom(t, i.left + .5 * i.width, i.top + .5 * i.height) + } + } + , + Kg.prototype.processKeyDown = function(A) { + if (!jh.NoKey && !A.altKey) { + var e = qc + , t = e.NONE; + switch (A.keyCode) { + case Ph: + this.movementSpeed = this.defaultMovementSpeed; + break; + case Vh: + this.movementSpeed *= 1.1; + break; + case Gh: + this.movementSpeed *= .9, + this.minMovementSpeed > this.movementSpeed && (this.movementSpeed = this.minMovementSpeed); + break; + case Fh: + case Nh: + t = e.FORWARD; + break; + case Qh: + case Lh: + t = e.BACK; + break; + case Uh: + case Rh: + t = e.LEFT; + break; + case Kh: + case Th: + t = e.RIGHT; + break; + case Dh: + t = e.UP; + break; + case kh: + t = e.DOWN + } + t !== e.NONE && (this.moveState |= t, + this.dispatchEvent({ + type: Rc.ON_CONTROL_KEYDOWN, + event: A, + state: t, + direction: e, + control: this.name + }), + this.cameraControl.delayHandle(), + this.cameraControl.updateFlyMove(this.moveState, this.movementSpeed * jh.MovementSpeedRate)) + } + } + , + Kg.prototype.processKeyUp = function(A) { + if (!jh.NoKey) { + var e = qc + , t = e.NONE; + switch (A.keyCode) { + case Fh: + case Nh: + t = e.FORWARD; + break; + case Qh: + case Lh: + t = e.BACK; + break; + case Uh: + case Rh: + t = e.LEFT; + break; + case Kh: + case Th: + t = e.RIGHT; + break; + case Dh: + t = e.UP; + break; + case kh: + t = e.DOWN + } + t !== e.NONE && (this.dispatchEvent({ + type: Rc.ON_CONTROL_KEYUP, + event: A, + state: t, + direction: e, + control: this.name + }), + this.moveState &= ~t) + } + } + , + Kg.prototype.moveTo = function(A) { + this.cameraControl.updateFlyMove(A, this.movementSpeed * jh.MovementSpeedRate) + } + ; + var Qg = function(A, e) { + Fg.call(this, A, e), + this.oldMouseX = -1, + this.oldMouseY = -1, + this.rotatePivot = null, + this._rotateStart = new s, + this._rotateEnd = new s, + this._rotateDelta = new s, + this._lastTrackingPoint = null, + this.rotateSpeed = 1, + this._dollyStart = new s, + this._dollyEnd = new s, + this._dollyDelta = new s, + this._dollyCenter = new s, + this.zoomSpeed = Math.pow(.95, .2), + this.modelManager = e.viewer.modelManager, + this._panStart = new s, + this._panEnd = new s, + this._panDelta = new s, + this._pan = new y, + this._worldDimension = new s, + this.pickHelper = new kp(e), + this.intersectOfMouseDown = null, + this.timeId = null, + this.longTapFlag = !1, + this.selectPad = (mh.isMobileDevice(), + null), + this.startPt = new s; + var t = this; + this.longTap = function() { + t.longTapFlag = !0, + Bh.log("long tap"), + t.selectPad && t.selectPad.showOverlay(t.startPt) + } + , + this._reqid = 0, + this._animateBinded = this._animate.bind(this), + this._clock = new as, + this._moving = !1 + }; + (Qg.prototype = Object.create(Fg.prototype)).constructor = Qg, + Qg.prototype.destroy = function() { + Fg.prototype.destroy.call(this), + this.modelManager = null, + this.intersectOfMouseDown = null, + this.rotatePivot = null, + this._rotateStart = null, + this._rotateEnd = null, + this._rotateDelta = null, + this._lastTrackingPoint = null, + this._dollyStart = null, + this._dollyEnd = null, + this._dollyDelta = null, + this._dollyCenter = null, + this._panStart = null, + this._panEnd = null, + this._panDelta = null, + this._pan = null, + this._worldDimension = null, + this.startPt = null, + this._animateBinded = null, + this._clock = null, + this.timeId && (clearTimeout(this.timeId), + this.timeId = null), + this.pickHelper.destroy(), + this.pickHelper = null, + this.selectPad && (this.selectPad.destroy(), + this.selectPad = null) + } + , + Qg.prototype.beginPan = function(A, e) { + this._panStart.set(A, e), + this._worldDimension = this.getWorldDimension(A, e) + } + , + Qg.prototype.processMouseDown = function(A) { + this.oldMouseX = A.clientX, + this.oldMouseY = A.clientY; + var e = this.cameraControl; + this.intersectOfMouseDown = null, + A.preventDefault(); + var t = ""; + if (A.button === this.mouseButtons.ORBIT) { + if (jh.NoRotate) + return; + this.rotatePivot = e.calculatePivot(jh.RotatePivotMode, { + x: A.clientX, + y: A.clientY + }), + this.state = this.StateType.ROTATE, + this._rotateStart.set(A.clientX, A.clientY), + this._lastTrackingPoint = null, + t = Gc.ORBIT + } else if (A.button === this.mouseButtons.ZOOM) { + if (jh.NoZoom) + return; + this.state = this.StateType.DOLLY, + this._dollyStart.set(A.clientX, A.clientY), + t = Gc.ZOOM + } else if (A.button === this.mouseButtons.PAN || A.button === this.mouseButtons.PAN2) { + if (jh.NoPan) + return; + this._panStart.set(A.clientX, A.clientY), + this._worldDimension = e.getWorldDimension(A.clientX, A.clientY), + this.state = this.StateType.PAN, + t = Gc.PAN + } + this.dispatchEvent({ + type: Rc.ON_CONTROL_BEGIN, + name: t, + control: this.name + }) + } + , + Qg.prototype.processMouseMove = function(A) { + var e = this.cameraControl; + switch (A.preventDefault(), + this.state) { + case this.StateType.ROTATE: + if (this._rotateEnd.set(A.clientX, A.clientY), + this._rotateDelta.subVectors(this._rotateEnd, this._rotateStart), + 0 === this._rotateDelta.x && 0 === this._rotateDelta.y) + return; + this._rotateStart.copy(this._rotateEnd), + e.processRotate(this._rotateDelta, this.rotatePivot); + break; + case this.StateType.DOLLY: + if (this._dollyEnd.set(A.clientX, A.clientY), + this._dollyDelta.subVectors(this._dollyEnd, this._dollyStart), + 0 === this._dollyDelta.x && 0 === this._dollyDelta.y) + return; + this.cameraControl.adjustCameraForDolly(this._dollyDelta.y > 0 ? this.zoomSpeed : 1 / this.zoomSpeed, null), + this._dollyStart.copy(this._dollyEnd); + break; + case this.StateType.PAN: + if (this._panEnd.set(A.clientX, A.clientY), + this._panDelta.subVectors(this._panEnd, this._panStart), + 0 === this._panDelta.x && 0 === this._panDelta.y) + return; + this.cameraControl.panOnWorld(this._panStart, this._panEnd, this._pan, this._worldDimension), + this.cameraControl.adjustCameraForPan(this._pan), + this._panStart.copy(this._panEnd) + } + this.state !== this.StateType.NONE && this.cameraControl.update(!0) + } + , + Qg.prototype.processMouseUp = function(A) { + if (this.state === this.StateType.NONE) + return !1; + this.intersectOfMouseDown = null; + var e = this.cameraControl; + this.oldMouseX === A.clientX && this.oldMouseY === A.clientY || e.update(!0), + this.state = this.StateType.NONE, + this.rotatePivot = null, + e.endOperation(); + var t = ""; + return A.button === this.mouseButtons.ORBIT ? t = Gc.ORBIT : A.button === this.mouseButtons.ZOOM ? t = Gc.ZOOM : A.button !== this.mouseButtons.PAN && A.button !== this.mouseButtons.PAN2 || (t = Gc.PAN), + this.dispatchEvent({ + type: Rc.ON_CONTROL_END, + name: t, + control: this.name + }), + !0 + } + , + Qg.prototype.processMouseWheel = function(A) { + var e = this.cameraControl; + if (!jh.NoZoom) { + A.preventDefault(), + A.stopPropagation(); + var t = 0; + A.wheelDelta ? t = A.wheelDelta : A.deltaY && (t = 40 * -A.deltaY), + Math.abs(t) > 720 && (t = t > 0 ? 720 : -720), + t *= this.wheelZoomFactor, + jh.ReverseWheelDirection && (t *= -1), + e.zoom(t, A.clientX, A.clientY), + e.delayHandle(), + this.dispatchEvent({ + type: Rc.ON_CONTROL_ZOOM + }) + } + } + , + Qg.prototype.processKeyDown = function(A) { + if (!jh.NoKey && !jh.NoPan) { + var e = this.cameraControl + , t = null; + vc.MergeComponent ? (this.animationStarted || (this.animationStarted = !0, + this._start()), + t = !1) : (t = !0, + e.delayHandle()), + this._moving = !0; + var i = !1 + , o = this.movementSpeed * jh.MovementSpeedRate + , n = this.keyPanSpeed * jh.MovementSpeedRate; + switch (A.keyCode) { + case Ph: + this.keyPanSpeed = e.defaultKeyPanSpeed, + this.movementSpeed = e.defaultMovementSpeed; + break; + case Vh: + this.keyPanSpeed *= 1.1, + this.movementSpeed *= 1.1; + break; + case Gh: + this.keyPanSpeed *= .9, + this.minKeyPanSpeed > this.keyPanSpeed && (this.keyPanSpeed = this.minKeyPanSpeed), + this.movementSpeed *= .9, + this.minMovementSpeed > this.movementSpeed && (this.movementSpeed = this.minMovementSpeed); + break; + case Dh: + e.pan(0, n), + i = !0; + break; + case kh: + e.pan(0, -n), + i = !0; + break; + case Uh: + e.processRotate({ + x: -10, + y: 0 + }, this.rotatePivot), + i = !0; + break; + case Rh: + e.pan(n, 0), + i = !0; + break; + case Kh: + e.processRotate({ + x: 10, + y: 0 + }, this.rotatePivot), + i = !0; + break; + case Th: + e.pan(-n, 0), + i = !0; + break; + case Fh: + e.processRotate({ + x: 0, + y: -10 + }, this.rotatePivot), + i = !0; + break; + case Nh: + e.moveStraight(o, !A.shiftKey), + i = !0; + break; + case Qh: + e.processRotate({ + x: 0, + y: 10 + }, this.rotatePivot), + i = !0; + break; + case Lh: + e.moveStraight(-o, !A.shiftKey), + i = !0 + } + i && t && e.update(!0) + } + } + , + Qg.prototype.processKeyUp = function(A) { + if (!jh.NoKey && !jh.NoPan) + switch (A.keyCode) { + case qh: + this.cameraControl.viewer.modelManager.sceneState.clearSelection(), + this.pickHelper.lastPickedUserId = void 0, + this.cameraControl.updateView(!0) + } + } + , + Qg.prototype.processTouchstart = function(A) { + this.startPt.set(A.touches[0].clientX, A.touches[0].clientY), + this.timeId && clearTimeout(this.timeId); + var e = this.cameraControl; + switch (this.timeId = setTimeout(this.longTap, 400), + this.selectPad && this.selectPad.hideOverlay(), + A.touches.length) { + case 1: + if (jh.NoRotate) + return; + this.rotatePivot = e.calculatePivot(jh.RotatePivotMode, { + x: A.touches[0].clientX, + y: A.touches[0].clientY + }), + this._rotateStart.set(A.touches[0].clientX, A.touches[0].clientY), + this.state = this.StateType.ROTATE; + break; + case 2: + if (!jh.NoZoom) { + var t = A.touches[0].clientX - A.touches[1].clientX + , i = A.touches[0].clientY - A.touches[1].clientY; + this._dollyStart.set(0, Math.sqrt(t * t + i * i)) + } + if (!jh.NoPan) + this._panStart.set(.5 * (A.touches[0].clientX + A.touches[1].clientX), .5 * (A.touches[0].clientY + A.touches[1].clientY)); + break; + default: + this.state = this.StateType.NONE + } + } + , + Qg.prototype.processTouchmove = function(A) { + var e = this.cameraControl; + switch (A.preventDefault(), + A.touches.length) { + case 1: + if (jh.NoRotate) + return; + this._rotateEnd.set(A.touches[0].clientX, A.touches[0].clientY), + this._rotateDelta.subVectors(this._rotateStart, this._rotateEnd); + var t = this.cameraControl.getClientSize() + , i = 2 * Math.PI * this._rotateDelta.x / t.x * this.rotateSpeed + , o = 2 * Math.PI * this._rotateDelta.y / t.y * this.rotateSpeed; + e.handleRotation(i, o, this.rotatePivot), + this._rotateStart.copy(this._rotateEnd); + break; + case 2: + if (e.clearTouchRotateState(), + !jh.NoZoom) { + var n = A.touches[0].clientX - A.touches[1].clientX + , r = A.touches[0].clientY - A.touches[1].clientY + , a = Math.sqrt(n * n + r * r); + if (this._dollyEnd.set(0, a), + this._dollyDelta.subVectors(this._dollyEnd, this._dollyStart), + Math.abs(this._dollyDelta.y) > 3) { + var s = 0; + this._dollyDelta.y > 0 ? s = 1 / Math.pow(this.zoomSpeed, .5 * this._dollyDelta.y) : 0 > this._dollyDelta.y && (s = Math.pow(this.zoomSpeed, .5 * -this._dollyDelta.y)), + this._dollyStart.copy(this._dollyEnd), + e.touchDolly(.5 * (A.touches[0].clientX + A.touches[1].clientX), .5 * (A.touches[0].clientY + A.touches[1].clientY), s), + this.state = this.StateType.DOLLY + } + } + if (!jh.NoPan) { + var l = .5 * (A.touches[0].clientX + A.touches[1].clientX) + , c = .5 * (A.touches[0].clientY + A.touches[1].clientY); + if (this._panEnd.set(l, c), + this._panDelta.subVectors(this._panEnd, this._panStart), + 3 > Math.abs(this._panDelta.x) && 3 > Math.abs(this._panDelta.y)) + return; + this._worldDimension = e.getWorldDimension(l, c), + e.panOnWorld(this._panStart, this._panEnd, this._pan, this._worldDimension), + e.adjustCameraForPan(this._pan), + this._panStart.copy(this._panEnd), + this.state = this.StateType.PAN + } + } + e.touchUpdate() + } + , + Qg.prototype.processTouchend = function(A) { + this.timeId && clearTimeout(this.timeId), + this.longTapFlag && (this.longTapFlag = !1, + A.preventDefault()); + var e = this.cameraControl; + switch (A.touches.length) { + case 0: + this.state = this.StateType.NONE, + e.touchEndHandler(A); + break; + case 1: + if (jh.NoRotate) + return; + this._rotateStart.set(A.touches[0].clientX, A.touches[0].clientY), + this.state = this.StateType.ROTATE + } + } + , + Qg.prototype.processHover = function(A) { + this.pickHelper.handleMouseHover(A) + } + , + Qg.prototype.moveTo = function(A) { + if (void 0 !== A) { + var e = this.cameraControl; + if (!jh.NoKey && !jh.NoPan) { + var t = this.movementSpeed * jh.MovementSpeedRate + , i = this.keyPanSpeed * jh.MovementSpeedRate + , o = qc; + switch (A) { + case o.FORWARD: + e.moveForward(t, !0); + break; + case o.BACK: + e.moveBackward(t, !0); + break; + case o.LEFT: + e.pan(i, 0); + break; + case o.RIGHT: + e.pan(-i, 0); + break; + case o.UP: + e.pan(0, i); + break; + case o.DOWN: + e.pan(0, -i); + break; + default: + A = o.NONE + } + A !== o.NONE && e.update(!0, !0) + } + } + } + , + Qg.prototype._updateMove = function() { + this._moving && (this._moving = !1, + this.cameraControl.update(!0)) + } + , + Qg.prototype._animate = function() { + this._reqid = requestAnimationFrame(this._animateBinded), + this._updateMove() + } + , + Qg.prototype._start = function() { + this._animate() + } + , + Qg.prototype._stop = function() { + cancelAnimationFrame(this._reqid) + } + , + Qg.prototype.onExit = function() { + vc.MergeComponent && this.animationStarted && (this._stop(), + this.animationStarted = !1) + } + ; + var Rg = function(A) { + Qg.call(this, Gc.ORBIT, A), + this.mouseButtons = { + ORBIT: t.LEFT, + PAN2: t.MIDDLE, + PAN: t.RIGHT + } + }; + (Rg.prototype = Object.create(Qg.prototype)).constructor = Rg; + var Tg = function(A) { + Qg.call(this, Gc.PAN, A), + this.mouseButtons = { + ORBIT: t.RIGHT, + PAN2: t.MIDDLE, + PAN: t.LEFT + } + }; + (Tg.prototype = Object.create(Qg.prototype)).constructor = Tg; + var kg = function(A) { + Rg.call(this, A, Gc.PICK) + }; + (kg.prototype = Object.create(Rg.prototype)).constructor = kg, + kg.prototype.processMouseUp = function(A) { + A.preventDefault(); + var e = 1 >= Math.abs(this.oldMouseX - A.clientX) && 1 >= Math.abs(this.oldMouseY - A.clientY); + A.button !== t.LEFT && A.button !== t.RIGHT || e && (this.pickHelper.click(A, this.intersectOfMouseDown), + this.intersectOfMouseDown = null), + e || A.button !== this.mouseButtons.ORBIT && A.button !== this.mouseButtons.PAN || this.cameraControl.update(!0), + this.intersectOfMouseDown = null, + this.state = this.StateType.NONE; + var i = ""; + A.button === this.mouseButtons.ORBIT ? i = Gc.ORBIT : A.button === this.mouseButtons.ZOOM ? i = Gc.ZOOM : A.button !== this.mouseButtons.PAN && A.button !== this.mouseButtons.PAN2 || (i = Gc.PAN, + e || this.dispatchEvent({ + type: Rc.ON_MOUSE_DRAGGED, + event: A + })), + this.dispatchEvent({ + type: Rc.ON_CONTROL_END, + name: i, + Control: this.name + }) + } + , + kg.prototype.processMouseDoubleClick = function(A) { + A.button === t.LEFT && this.pickHelper.doubleClick(A) + } + ; + var Dg = function(A) { + this.control = A, + this.cameraControl = A.cameraControl, + this.dim = this.cameraControl.getContainerDimensions(), + this.pad = null, + this.padSize = 96, + this.startPt = new s, + this.position = new s, + this.callback = null, + this.intersect = null, + this.destroy = function() { + this.control = null, + this.cameraControl = null, + this.dim = null, + this.pad = null, + this.startPt = null, + this.position = null, + this.callback = null, + this.intersect = null + } + , + this.init = function() { + window.addEventListener("resize", this.padInitBind, !1), + this.pad = document.createElement("div"), + this.padInit(), + this.cameraControl.domElement.appendChild(this.pad), + this.addEventListener() + } + , + this.addEventListener = function() { + this.pad.addEventListener("touchstart", this.padOnTouchStartBind, !1), + this.pad.addEventListener("touchmove", this.padOnTouchMoveBind, !1), + this.pad.addEventListener("touchend", this.padOnTouchEndBind, !1) + } + , + this.padInit = function() { + null !== this.pad && (this.pad.style.backgroundImage = "url(images/selectPad.png)", + this.pad.style.backgroundSize = "100%", + this.pad.style.position = "absolute", + this.pad.style.width = this.padSize.toString() + "px", + this.pad.style.height = this.padSize.toString() + "px", + this.pad.style.zIndex = "10", + this.pad.style.display = "none") + } + , + this.showOverlay = function(A) { + this.position = A, + this.pad.style.left = this.position.x.toString() + "px", + this.pad.style.top = (this.position.y - this.dim.top).toString() + "px", + this.pad.style.display = "" + } + , + this.hideOverlay = function() { + this.pad.style.display = "none" + } + , + this.pick = function() { + var A = this.position.x + , e = this.position.y + , t = this.cameraControl + , i = t.viewer.modelManager.sceneState + , o = this + , n = new s(A,e) + , r = t.getIntersectContext(n); + t.intersector.pick(r, (function(A) { + if (i.clearSelection(), + !A) + return t.updateView(!0), + void (o.intersect = null); + var e = A.userId; + t.viewer.getScene().intersectToWorld(A, t.viewer), + i.addSelection([e]), + o.intersect = A, + t.updateView(!0) + } + )), + null !== o.intersect && (o.intersect.cx = A, + o.intersect.cy = e) + } + , + this.onTouchStart = function(A) { + 1 === A.touches.length && (A.stopPropagation(), + A.preventDefault(), + this.startPt.set(A.touches[0].clientX, A.touches[0].clientY)) + } + , + this.onTouchMove = function(A) { + if (1 === A.touches.length) { + A.stopPropagation(), + A.preventDefault(); + var e = A.touches[0].clientY - this.startPt.y; + this.position.x += A.touches[0].clientX - this.startPt.x, + this.position.y += e, + this.pad.style.left = this.position.x.toString() + "px", + this.pad.style.top = (this.position.y - this.dim.top).toString() + "px", + this.startPt.set(A.touches[0].clientX, A.touches[0].clientY), + this.pick(A) + } + } + , + this.onTouchEnd = function(A) { + A.stopPropagation(), + null !== this.callback ? this.callback(this.intersect) : console.log("selectPad click", this.intersect) + } + , + this.padInitBind = this.padInit.bind(this), + this.padOnTouchStartBind = this.onTouchStart.bind(this), + this.padOnTouchEndBind = this.onTouchEnd.bind(this), + this.padOnTouchMoveBind = this.onTouchMove.bind(this), + this.init() + } + , Lg = function(A) { + Fg.call(this, Gc.WALK, A), + this.mouseButtons = { + ORBIT: t.LEFT, + PAN2: t.MIDDLE, + PAN: t.RIGHT + }, + this.pickHelper = new kp(A), + this.lastMousePoint = new s, + this._reqid = 0, + this._animateBinded = this._animate.bind(this), + this._clock = new as, + this.moveState = { + up: 0, + down: 0, + left: 0, + right: 0, + forward: 0, + back: 0, + pitchUp: 0, + pitchDown: 0, + yawLeft: 0, + yawRight: 0, + rollLeft: 0, + rollRight: 0 + }, + this.startPt = new s, + this.timeId = null, + this.rotateSpeed = 1, + this._rotateStart = new s, + this._rotateEnd = new s, + this._rotateDelta = new s, + this._dollyStart = new s, + this._dollyEnd = new s, + this._dollyDelta = new s, + this._dollyCenter = new s, + this.zoomSpeed = Math.pow(.95, .2), + this._panStart = new s, + this._panEnd = new s, + this._panDelta = new s, + this._pan = new y, + this.selectPad = mh.isMobileDevice() ? new Dg(this) : null, + this.moveVector = new y(0,0,0), + this.rotationVector = new y(0,0,0), + this.zoomDelta = 0, + this.rotateStart = new s, + this.rotateEnd = new s, + this.rotateDelta = new s, + this.firstRotate = !0, + this.dragLook = !0, + this.lockHeightEnabled = !1, + this.isLockHeight = !1, + this.lockedHeight = 0, + this.pickEnabled = !0, + this.mouseType = null; + var e = A.viewer.getScene().getBoundingBoxWorld(); + this.defaultMovementSpeed = e ? e.getSize(new y(0,0,0)).length() / 10 : 1500, + this.movementSpeed = this.defaultMovementSpeed, + this.shiftSpeedup = !1, + this.setFocuse = function() { + var A = document.querySelector(".main-canvas"); + A && A.focus && A.focus() + } + }; + (Lg.prototype = Object.create(Fg.prototype)).constructor = Lg, + Lg.prototype.destroy = function() { + Fg.prototype.destroy.call(this), + this.pickHelper.destroy(), + this.pickHelper = null, + this.selectPad && (this.selectPad.destroy(), + this.selectPad = null), + this.timeId && (clearTimeout(this.timeId), + this.timeId = null), + this._clock = null, + this._animateBinded = null, + this.mouseButtons = null, + this.moveState = null, + this.startPt = null, + this.lastMousePoint = null, + this.rotateStart = null, + this.rotateEnd = null, + this.rotateDelta = null, + this._rotateStart = null, + this._rotateEnd = null, + this._rotateDelta = null, + this._dollyStart = null, + this._dollyEnd = null, + this._dollyDelta = null, + this._dollyCenter = null, + this._panStart = null, + this._panEnd = null, + this._panDelta = null, + this._pan = null, + this.moveVector = null, + this.rotationVector = null, + this.rotateStart = null, + this.rotateEnd = null, + this.rotateDelta = null + } + , + Lg.prototype._animate = function() { + this._reqid = requestAnimationFrame(this._animateBinded), + this.updateWalkMove() + } + , + Lg.prototype._start = function() { + this.moveState = { + up: 0, + down: 0, + left: 0, + right: 0, + forward: 0, + back: 0, + pitchUp: 0, + pitchDown: 0, + yawLeft: 0, + yawRight: 0, + rollLeft: 0, + rollRight: 0 + }, + this._animate() + } + , + Lg.prototype._stop = function() { + cancelAnimationFrame(this._reqid) + } + , + Lg.prototype._updateMovement = function() { + this.moveVector.x = -this.moveState.left + this.moveState.right, + this.moveVector.z = this.isLockHeight ? 0 : -this.moveState.down + this.moveState.up, + this.moveVector.y = -this.moveState.forward + this.moveState.back + } + , + Lg.prototype._updateRotation = function() { + this.rotationVector.x = jh.LockAxisZ ? 0 : -this.moveState.pitchDown + this.moveState.pitchUp, + this.rotationVector.z = -this.moveState.yawRight + this.moveState.yawLeft, + this.rotationVector.y = -this.moveState.rollRight + this.moveState.rollLeft + } + , + Lg.prototype._doRotate = function(A) { + vc.WalkingWithViewLock && (A.y = 0); + var e = this.cameraControl.getClientSize() + , t = e.y / 2; + this.moveState.yawLeft = A.x / (e.x / 2), + this.moveState.pitchDown = A.y / t, + this._updateRotation() + } + , + Lg.prototype.processMouseDown = function(A) { + this.oldMouseX = A.clientX, + this.oldMouseY = A.clientY; + var e = this.cameraControl; + if (A.button === this.mouseButtons.ORBIT) { + if (A.preventDefault(), + A.stopPropagation(), + this.mouseType = A.button, + this.lastMousePoint.set(A.clientX, A.clientY), + this.firstRotate = !1, + A.button === this.mouseButtons.ORBIT) { + if (jh.NoRotate) + return; + this.rotateStart.set(A.clientX, A.clientY), + this.state = this.StateType.ROTATE, + this.dispatchEvent({ + type: Rc.ON_CONTROL_BEGIN, + name: "look", + control: this.name + }) + } + } else if (A.button === this.mouseButtons.PAN || A.button === this.mouseButtons.PAN2) { + if (jh.NoPan) + return; + this._panStart.set(A.clientX, A.clientY), + this._worldDimension = e.getWorldDimension(A.clientX, A.clientY), + this.state = this.StateType.PAN, + this.dispatchEvent({ + type: Rc.ON_CONTROL_BEGIN, + name: Gc.PAN, + control: this.name + }) + } + } + , + Lg.prototype.processMouseUp = function(A) { + return A.preventDefault(), + A.stopPropagation(), + A.button === this.mouseButtons.PAN && this.setFocuse(), + this.mouseType = null, + this.pickEnabled && (A.button === t.LEFT || A.button === t.RIGHT) && 2 > Math.abs(this.lastMousePoint.x - A.clientX) && 2 > Math.abs(this.lastMousePoint.y - A.clientY) ? (this.state = this.StateType.NONE, + void this.pickHelper.click(A)) : (this.state === this.StateType.ROTATE && (this.moveState.yawLeft = this.moveState.pitchDown = 0, + this.dispatchEvent({ + type: Rc.ON_CONTROL_END, + name: "look", + control: this.name + })), + this.state = this.StateType.NONE, + !0) + } + , + Lg.prototype.processMouseMove = function(A) { + if (A.preventDefault(), + this.dragLook && this.state === this.StateType.ROTATE && 0 === this.mouseType) { + if (this.rotateEnd.set(A.clientX, A.clientY), + this.rotateDelta.subVectors(this.rotateEnd, this.rotateStart), + 0 === this.rotateDelta.x && 0 === this.rotateDelta.y) + return; + this.rotateStart.copy(this.rotateEnd), + this._doRotate(this.rotateDelta) + } else { + switch (this.state) { + case this.StateType.DOLLY: + if (this._dollyEnd.set(A.clientX, A.clientY), + this._dollyDelta.subVectors(this._dollyEnd, this._dollyStart), + 0 === this._dollyDelta.x && 0 === this._dollyDelta.y) + return; + this.cameraControl.adjustCameraForDolly(this._dollyDelta.y > 0 ? this.zoomSpeed : 1 / this.zoomSpeed, null), + this._dollyStart.copy(this._dollyEnd); + break; + case this.StateType.PAN: + if (this._panEnd.set(A.clientX, A.clientY), + this._panDelta.subVectors(this._panEnd, this._panStart), + 0 === this._panDelta.x && 0 === this._panDelta.y) + return; + this.cameraControl.panOnWorld(this._panStart, this._panEnd, this._pan, this._worldDimension), + this.cameraControl.adjustCameraForPan(this._pan), + this._panStart.copy(this._panEnd) + } + this.state !== this.StateType.NONE && this.cameraControl.update(!0) + } + } + , + Lg.prototype.processTouchstart = function(A) { + this.startPt.set(A.touches[0].clientX, A.touches[0].clientY), + this.timeId && clearTimeout(this.timeId); + switch (this.timeId = setTimeout(this.longTap, 400), + this.selectPad && this.selectPad.hideOverlay(), + A.touches.length) { + case 1: + if (jh.NoRotate) + return; + this._rotateStart.set(A.touches[0].clientX, A.touches[0].clientY), + this.state = this.StateType.ROTATE; + break; + case 2: + if (!jh.NoZoom) { + var e = A.touches[0].clientX - A.touches[1].clientX + , t = A.touches[0].clientY - A.touches[1].clientY; + this._dollyStart.set(0, Math.sqrt(e * e + t * t)) + } + if (!jh.NoPan) + this._panStart.set(.5 * (A.touches[0].clientX + A.touches[1].clientX), .5 * (A.touches[0].clientY + A.touches[1].clientY)); + break; + default: + this.state = this.StateType.NONE + } + } + , + Lg.prototype.processTouchmove = function(A) { + this.timeId && clearTimeout(this.timeId); + var e = this.cameraControl; + switch (A.preventDefault(), + A.touches.length) { + case 1: + this.dragLook && this.state === this.StateType.ROTATE && (this._rotateEnd.set(A.touches[0].clientX, A.touches[0].clientY), + this._rotateDelta.subVectors(this._rotateEnd, this._rotateStart), + this._rotateStart.copy(this._rotateEnd), + this._doRotate(this._rotateDelta)); + break; + case 2: + if (e.clearTouchRotateState(), + !jh.NoZoom) { + var t, i = A.touches[0].clientX - A.touches[1].clientX, o = A.touches[0].clientY - A.touches[1].clientY, n = Math.sqrt(i * i + o * o); + if (this._dollyEnd.set(0, n), + this._dollyDelta.subVectors(this._dollyEnd, this._dollyStart), + Math.abs(this._dollyDelta.y) > 3) + this._dollyDelta.y > 0 ? t = 1 / Math.pow(this.zoomSpeed, .5 * this._dollyDelta.y) : 0 > this._dollyDelta.y && (t = Math.pow(this.zoomSpeed, .5 * -this._dollyDelta.y)), + this._dollyStart.copy(this._dollyEnd), + e.touchDolly(.5 * (A.touches[0].clientX + A.touches[1].clientX), .5 * (A.touches[0].clientY + A.touches[1].clientY), t), + this.state = this.StateType.DOLLY + } + if (!jh.NoPan) { + var r = .5 * (A.touches[0].clientX + A.touches[1].clientX) + , a = .5 * (A.touches[0].clientY + A.touches[1].clientY); + if (this._panEnd.set(r, a), + this._panDelta.subVectors(this._panEnd, this._panStart), + 3 > Math.abs(this._panDelta.x) && 3 > Math.abs(this._panDelta.y)) + return; + this._worldDimension = e.getWorldDimension(r, a), + e.panOnWorld(this._panStart, this._panEnd, this._pan, this._worldDimension), + e.adjustCameraForPan(this._pan), + this._panStart.copy(this._panEnd), + this.state = this.StateType.PAN + } + } + e.touchUpdate() + } + , + Lg.prototype.processTouchend = function(A) { + this.timeId && clearTimeout(this.timeId), + this.longTapFlag && (this.longTapFlag = !1, + A.preventDefault()); + var e = this.cameraControl; + switch (A.touches.length) { + case 0: + this.state = this.StateType.NONE, + e.touchEndHandler(A); + break; + case 1: + if (jh.NoRotate) + return; + this._rotateStart.set(A.touches[0].clientX, A.touches[0].clientY), + this.state = this.StateType.ROTATE + } + } + , + Lg.prototype.processHover = function(A) { + this.dragLook || (this.firstRotate && (this.firstRotate = !1, + this.rotateStart.set(A.clientX, A.clientY)), + this.rotateEnd.set(A.clientX, A.clientY), + this.rotateDelta.subVectors(this.rotateEnd, this.rotateStart), + this.rotateStart.copy(this.rotateEnd), + this._doRotate(this.rotateDelta)) + } + , + Lg.prototype.processMouseWheel = function(A) { + var e = this.cameraControl; + if (A.preventDefault(), + A.stopPropagation(), + !jh.NoZoom) { + var t = 0; + A.wheelDelta ? t = A.wheelDelta : A.deltaY && (t = 40 * -A.deltaY), + Math.abs(t) > 720 && (t = t > 0 ? 720 : -720), + t *= this.wheelZoomFactor, + jh.ReverseWheelDirection && (t *= -1), + e.zoom(t, A.clientX, A.clientY), + e.delayHandle(), + this.dispatchEvent({ + type: Rc.ON_CONTROL_ZOOM + }) + } + } + , + Lg.prototype.processKeyDown = function(A) { + if (!jh.NoKey && !A.altKey) { + var e = qc.NONE; + switch (A.key) { + case "0": + this.movementSpeed = this.defaultMovementSpeed; + break; + case "=": + case "+": + this.movementSpeed *= 1.1; + break; + case "-": + case "——": + this.movementSpeed *= .9, + this.minMovementSpeed > this.movementSpeed && (this.movementSpeed = this.minMovementSpeed); + break; + case "ArrowUp": + case "w": + case "W": + e = qc.FORWARD, + this.moveState.forward = 1; + break; + case "ArrowDown": + case "s": + case "S": + e = qc.BACK, + this.moveState.back = 1; + break; + case "ArrowLeft": + case "a": + case "A": + e = qc.LEFT, + this.moveState.left = 1; + break; + case "ArrowRight": + case "d": + case "D": + e = qc.RIGHT, + this.moveState.right = 1; + break; + case "q": + case "Q": + e = qc.UP, + this.moveState.up = 1; + break; + case "e": + case "E": + e = qc.DOWN, + this.moveState.down = 1; + break; + case "Shift": + this.shiftSpeedup || (this.movementSpeed += this.defaultMovementSpeed, + this.shiftSpeedup = !0); + break; + case "Tab": + return this.moveVector.set(0, 0, 0), + this.moveState.forward = 0, + this.moveState.back = 0, + this.moveState.left = 0, + this.moveState.right = 0, + this.moveState.up = 0, + void (this.moveState.down = 0) + } + this._updateMovement(), + this._updateRotation(), + e !== qc.NONE && this.dispatchEvent({ + type: Rc.ON_CONTROL_KEYDOWN, + event: A, + direction: e, + control: this.name + }) + } + } + , + Lg.prototype.processKeyUp = function(A) { + if (!jh.NoKey) { + var e = qc.NONE; + switch (A.key) { + case "ArrowUp": + case "W": + case "w": + e = qc.FORWARD, + this.moveState.forward = 0; + break; + case "ArrowDown": + case "s": + case "S": + e = qc.BACK, + this.moveState.back = 0; + break; + case "ArrowLeft": + case "a": + case "A": + e = qc.LEFT, + this.moveState.left = 0; + break; + case "ArrowRight": + case "d": + case "D": + e = qc.RIGHT, + this.moveState.right = 0; + break; + case "q": + case "Q": + e = qc.UP, + this.moveState.up = 0; + break; + case "e": + case "E": + e = qc.DOWN, + this.moveState.down = 0; + break; + case "Shift": + this.shiftSpeedup && (this.movementSpeed -= this.defaultMovementSpeed, + this.shiftSpeedup = !1); + break; + default: + e = qc.NONE + } + this._updateMovement(), + this._updateRotation(), + e !== qc.NONE && this.dispatchEvent({ + type: Rc.ON_CONTROL_KEYUP, + event: A, + direction: e, + control: this.name + }) + } + } + , + Lg.prototype.updateWalkMove = function() { + var A = this._clock.getDelta() + , e = this.cameraControl + , t = e.camera.position.z; + if (0 !== this.moveVector.x || 0 !== this.moveVector.y || 0 !== this.moveVector.z || 0 !== this.rotationVector.x || 0 !== this.rotationVector.y || 0 !== this.rotationVector.z || 0 !== this.zoomDelta) { + var i = this.movementSpeed * jh.WalkSpeedRate * A; + if (!0 === vc.WalkingWithGravity && (this.moveVector.z = 0, + e.computeManHeight(), + e.computeGravity()), + e.dirtyCamera(!0), + 0 !== this.zoomDelta) + e.zoomCameraForWalk(1 + this.zoomDelta * A), + this.zoomDelta = 0; + 0 !== i && e.translateCameraForWalk(this.moveVector, i), + e.rotateCameraForWalk(this.rotationVector, this.dragLook ? 1 : 2), + e.flyOnWorld(!1), + this.moveState.pitchUp = 0, + this.moveState.pitchDown = 0, + this.moveState.yawLeft = 0, + this.moveState.yawRight = 0, + this.moveState.rollLeft = 0, + this.moveState.rollRight = 0, + t !== e.camera.position.z && e.viewer.modelManager.dispatchEvent({ + type: Rc.ON_CAMERA_HEIGHT_CHANGED, + cameraPosition: e.camera.position.clone() + }) + } + } + , + Lg.prototype.onEnter = function() { + var A = this.cameraControl.getCamera(); + A.isPerspective || (console.log("Current camera is Orthographic"), + A.toPerspective()), + this._start() + } + , + Lg.prototype.onExit = function() { + this._stop() + } + , + Lg.prototype.rotateTo = function(A) { + this._doRotate(A) + } + , + Lg.prototype.moveTo = function(A, e, t) { + if (void 0 === t && (t = !0), + void 0 === e && (e = 1), + t) + switch (A) { + case qc.FORWARD: + this.moveState.forward = e; + break; + case qc.BACK: + this.moveState.back = e; + break; + case qc.LEFT: + this.moveState.left = e; + break; + case qc.RIGHT: + this.moveState.right = e; + break; + case qc.UP: + this.moveState.up = e; + break; + case qc.DOWN: + this.moveState.down = e + } + else + switch (A) { + case qc.FORWARD: + this.moveState.forward = 0; + break; + case qc.BACK: + this.moveState.back = 0; + break; + case qc.LEFT: + this.moveState.left = 0; + break; + case qc.RIGHT: + this.moveState.right = 0; + break; + case qc.UP: + this.moveState.up = 0; + break; + case qc.DOWN: + this.moveState.down = 0 + } + this._updateMovement() + } + , + Lg.prototype.setHeightLocked = function(A) { + this.lockHeightEnabled && this.isLockHeight !== A && (this.isLockHeight = A) + } + , + Lg.prototype.setDragLook = function(A) { + this.dragLook !== A && (this.firstRotate = !0, + this.dragLook = A) + } + , + Lg.prototype.processPointerLockEnter = function() { + this.pointerLock = !0 + } + , + Lg.prototype.processPointerLockExit = function() { + this.pointerLock = !1 + } + , + Lg.prototype.processMovement = function(A) { + this.rotateDelta.set(A.movementX || A.mozMovementX || A.webkitMovementX || 0, A.movementY || A.mozMovementY || A.webkitMovementY || 0), + this._doRotate(this.rotateDelta) + } + ; + var Ng = function(A) { + Qg.call(this, Gc.ZOOM, A), + this.mouseButtons = { + ZOOM: t.LEFT, + PAN2: t.MIDDLE, + PAN: t.RIGHT + } + }; + (Ng.prototype = Object.create(Qg.prototype)).constructor = Ng; + var Og = function() { + this.control = null, + this.controls = {}, + this.tools = [], + this.domElement = null, + this.enabled = !0, + this.isUpdateRenderList = !0; + var A = !1 + , e = this; + function t(t) { + if (e.enabled) { + for (var i = e.tools, o = i.length - 1; o >= 0; o -= 1) + if (i[o].onEvent(t)) { + switch (t.type) { + case "mouseup": + A = !1 + } + return + } + switch (t.type) { + case "touchmove": + e.control.processTouchmove(t); + break; + case "touchstart": + e.control.processTouchstart(t); + break; + case "touchend": + e.control.processTouchend(t); + break; + case "keydown": + e.control.processKeyDown(t); + break; + case "keyup": + e.control.processKeyUp(t); + break; + case "wheel": + case "mousewheel": + case "DOMMouseScroll": + e.cameraChange = !0, + e.control.processMouseWheel(t); + break; + case "mousedown": + !function(t) { + e.setFocuse(), + A = !0, + e.isUpdateRenderList = !1, + e.control ? e.control.processMouseDown(t) : Bh.warn("control is null") + }(t); + break; + case "mousemove": + !function(t) { + e.pointerLock ? e.control.processMovement(t) : A ? (e.isUpdateRenderList = !1, + e.cameraChange = !0, + e.control.processMouseMove(t)) : e.control.processHover(t) + }(t); + break; + case "mouseup": + !function(t) { + e.isUpdateRenderList = !0, + A && (e.control.processMouseUp(t), + A = !1) + }(t); + break; + case "dblclick": + e.control.processMouseDoubleClick(t) + } + } else + e.cameraChange = !1 + } + function i(A) { + A.preventDefault() + } + function o(A) { + document.pointerLockElement === e.domElement || document.mozPointerLockElement === e.domElement || document.webkitPointerLockElement === e.domElement ? (e.pointerLock = !0, + e.control.processPointerLockEnter(A)) : (e.pointerLock = !1, + e.control.processPointerLockExit(A), + e.domElement.focus(), + e.control.dispatchEvent({ + type: Rc.ON_POINTERLOCK_EXIST, + name: e.control.getName() + })) + } + function n(A) { + e.pointerLock = !1, + e.control.processPointerLockExit(A), + e.control.dispatchEvent({ + type: Rc.ON_POINTERLOCK_EXIST, + name: e.control.getName() + }) + } + this.setFocuse = function() { + if (e.domElement) { + var A = e.domElement.querySelector(".main-canvas"); + A && A.focus && A.focus() + } + } + , + this.setFocus = this.setFocuse, + this.getCameraControl = function() { + return this.cameraControl + } + , + this.registerDomEventListeners = function(A) { + this.domElement = A, + A.addEventListener("contextmenu", i, !1), + A.addEventListener("mousedown", t, !1), + A.addEventListener("mousewheel", t, !1), + A.addEventListener("DOMMouseScroll", t, !1), + A.addEventListener("wheel", t, !1), + A.addEventListener("dblclick", t, !1), + window.addEventListener("mousemove", t, !1), + window.addEventListener("mouseup", t, !1), + A.addEventListener("touchstart", t, !1), + A.addEventListener("touchend", t, !1), + A.addEventListener("touchmove", t, !1), + window.addEventListener("touchmove", (function(A) {} + ), !1), + A.addEventListener("keydown", t, !1), + window.addEventListener("keyup", t, !1), + document.addEventListener("pointerlockchange", o, !1), + document.addEventListener("mozpointerlockchange", o, !1), + document.addEventListener("webkitpointerlockchange", o, !1), + document.addEventListener("pointerlockerror", n, !1), + document.addEventListener("mozpointerlockerror", n, !1), + document.addEventListener("webkitpointerlockerror", n, !1), + this.setFocuse() + } + , + this.unregisterDomEventListeners = function(A) { + A.removeEventListener("contextmenu", i, !1), + A.removeEventListener("mousedown", t, !1), + A.removeEventListener("mousewheel", t, !1), + A.removeEventListener("DOMMouseScroll", t, !1), + A.removeEventListener("dblclick", t, !1), + window.removeEventListener("mousemove", t, !1), + window.removeEventListener("mouseup", t, !1), + A.removeEventListener("touchstart", t, !1), + A.removeEventListener("touchend", t, !1), + A.removeEventListener("touchmove", t, !1), + A.removeEventListener("keydown", t, !1), + window.removeEventListener("keyup", t, !1), + document.removeEventListener("pointerlockchange", o, !1), + document.removeEventListener("mozpointerlockchange", o, !1), + document.removeEventListener("webkitpointerlockchange", o, !1), + document.removeEventListener("pointerlockerror", n, !1), + document.removeEventListener("mozpointerlockerror", n, !1), + document.removeEventListener("webkitpointerlockerror", n, !1) + } + }; + Og.prototype = { + constructor: Og, + destroy: function() { + for (var A in this.control = null, + this.controls) { + this.controls[A].destroy() + } + this.controls = {}; + for (var e = 0, t = this.tools.length; t > e; e += 1) + this.tools[e].destroy(); + this.tools = null, + this.unregisterDomEventListeners(this.domElement), + this.domElement = null + }, + getCurrentControlName: function() { + return this.control ? this.control.name : "" + }, + _getControlByName: function(A, e) { + var t = this.controls[e]; + if (t) + return t; + var i = Gc; + this.viewer = A, + this.cameraControl = A.cameraControl; + var o = A.cameraControl; + switch (e) { + case i.ORBIT: + t = new Rg(o); + break; + case i.PICK: + t = new kg(o); + break; + case i.PAN: + t = new Tg(o); + break; + case i.FLY: + t = new Kg(o); + break; + case i.WALK: + t = new Lg(o); + break; + case i.ZOOM: + t = new Ng(o); + break; + default: + t = null, + Bh.error("invalid control name") + } + return t && (t.name = e, + this.controls[e] = t), + t + }, + getCurrentControlMode: function() { + return this.control + }, + getCurrentControl: function() { + return this.control + }, + setControlMode: function(A, e) { + var t = this._getControlByName(A, e); + t && this.control !== t && (null !== this.control && (this.control.dispatchEvent({ + type: Rc.ON_CONTROL_EXIST, + name: this.control.getName() + }), + this.control.onExit()), + this.control = t, + this.control.onEnter(), + this.control.dispatchEvent({ + type: Rc.ON_CONTROL_ENTER, + name: this.control.getName() + })) + }, + getToolByName: function(A) { + for (var e = this.tools.length, t = 0; e > t; t += 1) + if (this.tools[t].name === A) + return this.tools[t] + }, + enableTool: function(A, e) { + for (var t = Pc, i = this.tools, o = 0, n = i.length; n > o; o += 1) + if (i[o].name === e) + return; + var r = null; + switch (e) { + case t.PICK_BY_RECT: + r = new bg(A); + break; + case t.ZOOM_BY_RECT: + r = new Ug(A); + break; + case t.CLIP_BY_BOX: + r = new vp(A); + break; + case t.CLIP_FILL: + r = new Sp(A); + break; + case t.PICK_BY_MEASURE: + r = new Eg(A); + break; + case t.COMPONENT_TRANSFORM: + r = new Ip(A.getScene(),A.camera,A.domElement) + } + r && i.push(r) + }, + disableTool: function(A) { + for (var e = this.tools, t = 0, i = e.length; i > t; t += 1) + if (e[t].name === A) { + e[t].onExit(), + this.dispatchEvent({ + type: Rc.ON_CONTROL_EXIST, + name: A + }), + e.splice(t, 1); + break + } + }, + setInteractiveState: function(A) { + this.enabled = A + }, + requestPointerLock: function() { + this.control instanceof Lg && (this.domElement.requestPointerLock = this.domElement.requestPointerLock || this.domElement.mozRequestPointerLock || this.domElement.webkitRequestPointerLock, + this.domElement.requestPointerLock()) + } + }, + Object.assign(Og.prototype, Ld.prototype); + var Vg = function() { + this.className = "FilterAction" + }; + Vg.prototype.getClassName = function() { + return this.className + } + , + Vg.prototype.applyFilter = function(A) {} + ; + var Gg = function() { + Vg.call(this), + this.className = "IdsFilterAction", + this.ids = [] + }; + (Gg.prototype = Object.create(Vg.prototype)).arrayToMap = function(A) { + for (var e = {}, t = 0; A.length > t; t += 1) { + var i = A[t]; + e[i] = i + } + return e + } + , + Gg.prototype.constructor = Gg, + Gg.prototype.setIds = function(A) { + this.ids = A + } + ; + var Pg = function(A, e) { + Gg.call(this), + this.className = "VisibleIdsFA", + this.flag = A, + this.isVisible = e + }; + (Pg.prototype = Object.create(Gg.prototype)).constructor = Pg, + Pg.prototype.applyFilter = function(A) { + Array.isArray(this.ids) ? (A.setVisible(this.ids, this.isVisible, this.flag), + A.calculateVisibleComponentsBbox()) : Bh.warn("Ids should be type of array.") + } + ; + var qg = function(A, e) { + Gg.call(this), + this.className = "OverrideIdsFA", + this.flag = A, + this.material = e + }; + (qg.prototype = Object.create(Gg.prototype)).constructor = qg, + qg.prototype.applyFilter = function(A) { + Array.isArray(this.ids) ? A.setMaterial(this.ids, this.material, this.flag) : Bh.warn("Ids should be type of array.") + } + ; + var jg = function(A, e) { + Gg.call(this), + this.className = "WireframeIdsFA", + this.flag = A, + this.material = e + }; + (jg.prototype = Object.create(Gg.prototype)).constructor = jg, + jg.prototype.applyFilter = function(A) { + Array.isArray(this.ids) ? A.setMaterial(this.ids, this.material, this.flag) : Bh.warn("Ids should be type of array.") + } + ; + var Hg = function(A) { + Gg.call(this), + this.className = "IsolateIdsFA", + this.isolateHide = A + }; + (Hg.prototype = Object.create(Gg.prototype)).constructor = Hg, + Hg.prototype.applyFilter = function(A) { + Array.isArray(this.ids) ? (A.clearIsolates(), + this.isolateHide ? (A.setIsolateHide(this.ids, !0, !1), + A.calculateVisibleComponentsBbox()) : A.setIsolateTransparent(this.ids, !0, !1)) : Bh.warn("Ids should be type of array.") + } + ; + var Yg = function(A, e) { + Gg.call(this), + this.className = "TransparentIdsFA", + this.flag = A, + this.isOpaque = e + }; + (Yg.prototype = Object.create(Gg.prototype)).constructor = Yg, + Yg.prototype.applyFilter = function(A) { + Array.isArray(this.ids) ? A.setTransparent(this.ids, !this.isOpaque, this.flag) : Bh.warn("Ids should be type of array.") + } + ; + var Wg = function() { + Vg.call(this), + this.className = "ConditionFilterAction", + this.conditions = null + }; + (Wg.prototype = Object.create(Vg.prototype)).constructor = Wg; + var Jg = function(A, e) { + Wg.call(this), + this.className = "VisibleConditionFA", + this.flag = A, + this.isVisible = e + }; + (Jg.prototype = Object.create(Wg.prototype)).constructor = Jg, + Jg.prototype.applyFilter = function(A) { + var e = this; + Array.isArray(this.conditions) ? (A.matchConditions(this.conditions, (function(t, i) { + e.flag === i && (A.setVisible(t, e.isVisible), + t = null) + } + )), + A.calculateVisibleComponentsBbox()) : Bh.warn("Conditions should be type of array.") + } + ; + var zg = function(A, e) { + Wg.call(this), + this.className = "OverrideConditionFA", + this.flag = A, + this.material = e + }; + (zg.prototype = Object.create(Wg.prototype)).constructor = zg, + zg.prototype.applyFilter = function(A, e) { + var t = this; + Array.isArray(this.conditions) ? A.matchConditions(this.conditions, (function(e, i) { + t.flag === i && (A.setMaterial(e, t.material), + e = null) + } + )) : Bh.warn("Conditions should be type of array.") + } + ; + var Zg = function(A, e) { + Wg.call(this), + this.className = "TransparentConditionFA", + this.flag = A, + this.isOpaque = e + }; + (Zg.prototype = Object.create(Wg.prototype)).constructor = Zg, + Zg.prototype.applyFilter = function(A) { + var e = this; + Array.isArray(this.conditions) ? A.matchConditions(this.conditions, (function(t, i) { + e.flag === i && (A.setTransparent(t, !e.isOpaque), + t = null) + } + )) : Bh.warn("Conditions should be type of array.") + } + ; + var Xg = function(A) { + Wg.call(this), + this.className = "IsolateConditionFA", + this.isolateHide = A + }; + (Xg.prototype = Object.create(Wg.prototype)).constructor = Xg, + Xg.prototype.applyFilter = function(A) { + A.clearIsolates(); + var e = this.isolateHide; + Array.isArray(this.conditions) ? A.matchConditions(this.conditions, (function(t, i) { + !0 !== i ? (e ? (A.setIsolateHide(t, !i), + A.calculateVisibleComponentsBbox()) : A.setIsolateTransparent(t, !i), + t = null) : t = null + } + )) : Bh.warn("Conditions should be type of array.") + } + ; + var _g = function(A) { + this._activeFilterList = [], + this._filterResultModes = {}, + this._defaultReturnValue = A, + this._filterPriority = null + }; + _g.prototype.setFilterMode = function(A) { + this._filterResultModes = A + } + , + _g.prototype.setFilterPriority = function(A) { + this._filterPriority = A + } + , + _g.prototype.addBaseFilter = function(A) { + var e = this._activeFilterList + , t = e.indexOf(A); + if (null === this._filterPriority) + -1 === t ? e.push(A) : t !== e.length - 1 && (e.splice(t, 1), + e.push(A)); + else if (0 === e.length) + e.push(A); + else { + -1 !== t && t !== e.length - 1 && e.splice(t, 1); + for (var i = this._filterPriority[A.getType()], o = 0, n = e.length; n > o; o += 1) + if (this._filterPriority[e[o].getType()] > i) { + e.splice(o, 0, A); + break + } + o === n && e.push(A) + } + } + , + _g.prototype.removeBaseFilter = function(A) { + var e = this._activeFilterList.indexOf(A); + -1 !== e && this._activeFilterList.splice(e, 1) + } + , + _g.prototype.isEmpty = function() { + return 0 === this._activeFilterList.length + } + , + _g.prototype.hasFilterNotIn = function(A) { + for (var e = this._activeFilterList, t = e.length - 1; t >= 0; t -= 1) { + if (void 0 === A._filterResultModes[e[t].getType()]) + return !0 + } + return !1 + } + , + _g.prototype.apply = function(A) { + for (var e = Jc, t = null, i = this._activeFilterList.length - 1; i >= 0; i -= 1) + switch (this._filterResultModes[(t = this._activeFilterList[i]).getType()]) { + case e.MATCH_RETURN_TRUE: + if (t.match(A)) + return !0; + break; + case e.MATCH_RETURN_FALSE: + if (t.match(A)) + return !1; + break; + case e.NOMATCH_RETURN_TRUE: + if (!t.match(A)) + return !0; + break; + case e.NOMATCH_RETURN_FALSE: + if (!t.match(A)) + return !1; + break; + default: + return !1 + } + return this._defaultReturnValue + } + , + _g.prototype.getApplyFilterId = function(A) { + for (var e = Jc, t = null, i = this._activeFilterList.length - 1; i >= 0; i -= 1) + switch (this._filterResultModes[(t = this._activeFilterList[i]).getType()]) { + case e.MATCH_RETURN_TRUE: + case e.MATCH_RETURN_FALSE: + if (t.match(A)) + return t.getType(); + break; + case e.NOMATCH_RETURN_TRUE: + case e.NOMATCH_RETURN_FALSE: + if (!t.match(A)) + return t.getType(); + break; + default: + return -1 + } + return -1 + } + , + Math.log2 = Math.log2 || function(A) { + return Math.log(A) / Math.LN2 + } + , + "function" != typeof String.prototype.startsWith && (String.prototype.startsWith = function(A) { + return this.slice(0, A.length) === A + } + ), + Array.prototype.remove || Object.defineProperty(Array.prototype, "remove", { + enumerable: !1, + value: function(A) { + var e = this.indexOf(A); + e > -1 && this.splice(e, 1) + } + }), + "undefined" != typeof window && mh.isIE11() && function() { + function A(A, e) { + e = e || { + bubbles: !1, + cancelable: !1, + detail: void 0 + }; + var t = document.createEvent("CustomEvent"); + return t.initCustomEvent(A, e.bubbles, e.cancelable, e.detail), + t + } + A.prototype = window.CustomEvent.prototype, + window.CustomEvent = A + }(), + "function" != typeof String.prototype.startsWith && (String.prototype.startsWith = function(A) { + return this.slice(0, A.length) === A + } + ), + "function" != typeof String.prototype.endsWith && (String.prototype.endsWith = function(A) { + return -1 !== this.indexOf(A, this.length - A.length) + } + ), + "undefined" != typeof window && (window.BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder || window.MSBlobBuilder), + Number.isInteger = Number.isInteger || function(A) { + return "number" == typeof A && isFinite(A) && Math.floor(A) === A + } + , + String.prototype.repeat = String.prototype.repeat || function(A) { + if (1 > A) + return ""; + for (var e = "", t = this.valueOf(); A > 1; ) + 1 & A && (e += t), + A >>= 1, + t += t; + return e + t + } + , + Array.prototype.fill || Object.defineProperty(Array.prototype, "fill", { + enumerable: !1, + value: function(A, e, t) { + t = void 0 === t ? this.length : t; + for (var i = e = void 0 === e ? 0 : e; t > i; i += 1) + this[i] = A + } + }), + Array.prototype.find || Object.defineProperty(Array.prototype, "find", { + enumerable: !1, + value: function(A, e) { + for (var t = this.length, i = 0; t > i; i += 1) { + var o = this[i]; + if (A.call(e, o, i, this)) + return o + } + } + }), + Array.prototype.hasValue || Object.defineProperty(Array.prototype, "hasValue", { + enumerable: !1, + value: function(A) { + return this.indexOf(A) > -1 + } + }), + "function" != typeof Object.assign && Object.defineProperty(Object, "assign", { + value: function(A, e) { + if (null == A) + throw new TypeError("Cannot convert undefined or null to object"); + for (var t = Object(A), i = 1; arguments.length > i; i += 1) { + var o = arguments[i]; + if (null != o) + for (var n in o) + Object.prototype.hasOwnProperty.call(o, n) && (t[n] = o[n]) + } + return t + }, + writable: !0, + configurable: !0 + }), + ArrayBuffer.prototype.slice || (ArrayBuffer.prototype.slice = function(A, e) { + if (!e || e > this.byteLength ? e = this.byteLength : 0 > e && 0 > (e = this.byteLength + e) && (e = 0), + 0 > A && 0 > (A = this.byteLength + A) && (A = 0), + A >= e) + return new ArrayBuffer; + for (var t = e - A, i = new Uint8Array(this,A,t), o = new Uint8Array(t), n = 0; t > n; n += 1) + o[n] = i[n]; + return o.buffer + } + ), + Float32Array.prototype.slice || (Float32Array.prototype.slice = Float32Array.prototype.subarray), + Uint32Array.prototype.slice || (Uint32Array.prototype.slice = Uint32Array.prototype.subarray), + Int32Array.prototype.slice || (Int32Array.prototype.slice = Int32Array.prototype.subarray), + Int16Array.prototype.slice || (Int16Array.prototype.slice = Int16Array.prototype.subarray); + var $g, Au = "function" == typeof Symbol && "symbol" === lc(Symbol.iterator) ? function(A) { + return lc(A) + } + : function(A) { + return A && "function" == typeof Symbol && A.constructor === Symbol && A !== Symbol.prototype ? "symbol" : lc(A) + } + , eu = function() { + function A(A, e) { + for (var t = 0; e.length > t; t += 1) { + var i = e[t]; + i.enumerable = i.enumerable || !1, + i.configurable = !0, + "value"in i && (i.writable = !0), + Object.defineProperty(A, i.key, i) + } + } + return function(e, t, i) { + return t && A(e.prototype, t), + i && A(e, i), + e + } + }(); + HTMLElement.prototype.tap = function(A) { + var e = 0; + this.addEventListener("touchstart", (function(A) { + e = Date.now() + } + )), + this.addEventListener("touchend", (function(t) { + 200 > Date.now() - e && A(t) + } + )) + } + , + (Boolean(window.ActiveXObject) || "ActiveXObject"in window) && (HTMLElement.prototype.remove = function() { + var A = this.parentNode || this.parentElement; + A && A.removeChild(this) + } + , + window.Element && (($g = Element.prototype).matches = $g.matches || $g.matchesSelector || $g.webkitMatchesSelector || $g.msMatchesSelector || function(A) { + for (var e = (this.parentNode || this.document).querySelectorAll(A), t = -1; e[t += 1] && e[t] !== this; ) + ; + return Boolean(e[t]) + } + ), + window.Element && function(A) { + A.closest = A.closest || function(A) { + for (var e = this; e.matches && !e.matches(A); ) + e = e.parentNode; + return e.matches ? e : null + } + }(Element.prototype)), + SVGElement.prototype.getClass = HTMLElement.prototype.getClass = function(A) { + return this.getAttribute("class") + } + , + SVGElement.prototype.hasClass = HTMLElement.prototype.hasClass = function(A) { + var e = this.getClass(); + return !!e && (e && e.split(" ")).indexOf(A) > -1 + } + , + SVGElement.prototype.addClass = HTMLElement.prototype.addClass = function(A) { + var e = this.getClass() + , t = e && e.split(" "); + return e ? -1 === t.indexOf(A) && (t.push(A), + e = t.join(" "), + this.setAttribute("class", String(e))) : this.setAttribute("class", String(A)), + this + } + , + SVGElement.prototype.removeClass = HTMLElement.prototype.removeClass = function(A) { + if (!this.hasClass(A)) + return this; + var e = this.getClass().replace(A, "").trim(); + return e ? this.setAttribute("class", String(e)) : this.removeAttribute("class"), + this + } + , + SVGElement.prototype.toggleClass = HTMLElement.prototype.toggleClass = function(A, e) { + this.getClass(); + var t = this.hasClass(A); + return null != e ? (e && !t && this.addClass(A), + e || this.removeClass(A)) : t ? this.removeClass(A) : this.addClass(A), + !t + } + , + Array.prototype.getObjectByAttribute || Object.defineProperty(Array.prototype, "getObjectByAttribute", { + enumerable: !1, + value: function(A, e) { + for (var t = this.length, i = 0; t > i; i += 1) + if (this[i][A] === e) + return this[i]; + return !1 + } + }), + Array.prototype.removeObjectByAttribute || Object.defineProperty(Array.prototype, "removeObjectByAttribute", { + enumerable: !1, + value: function(A, e) { + for (var t = this, i = t.length, o = 0; i > o; o += 1) + if (t[o][A] === e) + return t = t.splice(o, 1); + return !1 + } + }), + Array.prototype.getAllObjectByAttribute || Object.defineProperty(Array.prototype, "getAllObjectByAttribute", { + enumerable: !1, + value: function(A, e) { + for (var t = this.length, i = 0, o = []; t > i; i += 1) + this[i][A] === e && o.push(this[i]); + return o + } + }), + Array.prototype.removeByValue || Object.defineProperty(Array.prototype, "removeByValue", { + enumerable: !1, + value: function(A) { + for (var e = this.length - 1; e >= 0; e -= 1) + this[e] === A && this.splice(e, 1); + return this + } + }), + Array.prototype.insert || Object.defineProperty(Array.prototype, "insert", { + enumerable: !1, + value: function(A, e) { + return this.splice(A, 0, e), + this + } + }), + SVGElement.prototype.setCss = HTMLElement.prototype.setCss = function(A) { + if (A) + for (var e in A) + this.style[e] = A[e] + } + , + SVGElement.prototype.getCss = HTMLElement.prototype.getCss = function() { + return this.style + } + ; + var tu = function(A, e) { + this._type = A, + this._name = e, + this._enabled = !1, + this._items = {}, + this._relatedCompoundFilterList = [] + }; + tu.prototype.getType = function() { + return this._type + } + , + tu.prototype.getName = function() { + return this._name + } + , + tu.prototype.get = function() { + return this._items + } + , + tu.prototype.getAll = function() { + return this._items + } + , + tu.prototype.clearAll = function() { + this._items = {}, + this._enabled && (this._enabled = !1, + this.enableStateChanged()) + } + , + tu.prototype.clear = function() { + this.clearAll() + } + , + tu.prototype.isEmpty = function() { + return !this._enabled + } + , + tu.prototype.forceEnable = function() { + this._enabled || (this._enabled = !0, + this.enableStateChanged()) + } + , + tu.prototype.setByData = function(A) { + !function(A) { + if (null === A) + return !0; + if ("object" !== (void 0 === A ? "undefined" : Au(A))) + return !0; + for (var e in A) + if (A.hasOwnProperty(e)) + return !1; + return !0 + }(A) ? (this._items = A, + this._enabled || (this._enabled = !0, + this.enableStateChanged())) : (this._items = {}, + this._enabled && (this._enabled = !1, + this.enableStateChanged())) + } + , + tu.prototype.match = function(A) { + return !1 + } + , + tu.prototype.registerToCompoundFilter = function(A) { + this._relatedCompoundFilterList.push(A) + } + , + tu.prototype.enableStateChanged = function() { + for (var A = 0, e = this._relatedCompoundFilterList.length; e > A; A += 1) + this._enabled ? this._relatedCompoundFilterList[A].addBaseFilter(this) : this._relatedCompoundFilterList[A].removeBaseFilter(this) + } + ; + var iu = function(A, e) { + tu.call(this, A, e) + }; + (iu.prototype = Object.create(tu.prototype)).constructor = iu, + iu.prototype.match = function(A) { + var e = A.userData; + return !e || function(A, e) { + for (var t = !1, i = 0, o = A.length; o > i; i += 1) { + t = !0; + var n = A[i]; + for (var r in n) { + if (!Array.isArray(n[r]) && e[r] !== n[r]) { + t = !1; + break + } + if (Array.isArray(n[r]) && -1 === n[r].indexOf(e[r])) { + t = !1; + break + } + } + if (t) + return !0 + } + return !1 + }(this._items, e) + } + ; + var ou = function(A, e) { + tu.call(this, A, e) + }; + (ou.prototype = Object.create(tu.prototype)).constructor = ou, + ou.prototype.add = function(A) { + var e = this._items; + if (A && A.length > 0) { + for (var t = 0, i = A.length; i > t; t += 1) + e[A[t]] = !0; + this._enabled || (this._enabled = !0, + this.enableStateChanged()) + } + } + , + ou.prototype.remove = function(A) { + var e = this._items; + if (A && A.length > 0) { + for (var t = 0, i = A.length; i > t; t += 1) { + var o = A[t]; + e.hasOwnProperty(o) && delete e[o] + } + 0 === Object.keys(e).length && this._enabled && (this._enabled = !1, + this.enableStateChanged()) + } + } + ; + var nu = function(A, e) { + ou.call(this, A, e) + }; + (nu.prototype = Object.create(ou.prototype)).constructor = nu, + nu.prototype.match = function(A) { + var e = A.name; + if (e) { + var t = e.indexOf("."); + if (-1 !== t) { + var i = e.substring(0, t); + return !!this._items[i] + } + } + var o = A.userData; + if (o && (i = o.sceneId)) + return !!this._items[i]; + return !1 + } + ; + var ru = function(A, e) { + ou.call(this, A, e) + }; + (ru.prototype = Object.create(ou.prototype)).constructor = ru, + ru.prototype.match = function(A) { + return !!this._items[A.name] + } + ; + var au = function() { + this.defaultWireframeColor = { + color: new LA(0,0,0), + opacity: .4 + }, + this.wireframeMaterial = new jA(this.defaultWireframeColor), + !1 === vc.TranslucentDepthDisabled && (this.wireframeMaterial.transparent = !0), + this.instanceWireframeMaterial = Kd.createInstanceMaterial(Kd.getMaterialParameters(this.wireframeMaterial)), + !1 === vc.TranslucentDepthDisabled && (this.instanceWireframeMaterial.transparent = !0), + this.wireframeGeometryMap = {} + }; + au.prototype.destroy = function() { + this.wireframeMaterial.dispose(), + this.wireframeMaterial = null, + this.instanceWireframeMaterial.destroy(), + this.instanceWireframeMaterial = null, + this.wireframeGeometryMap = null, + this.defaultWireframeColor.color = null, + this.defaultWireframeColor = null + } + , + au.prototype.setWireframeColor = function(A, e) { + this.wireframeMaterial.color = A, + this.wireframeMaterial.opacity = e, + this.wireframeMaterial.transparent = 1 !== e, + this.instanceWireframeMaterial.color = A, + this.instanceWireframeMaterial.opacity = e, + this.instanceWireframeMaterial.transparent = 1 !== e + } + , + au.prototype.getWireframeColor = function() { + var A = this.wireframeMaterial.color.clone(); + return A.opacity = this.wireframeMaterial.opacity, + A + } + , + au.prototype.restoreWireframeColor = function() { + var A = this.defaultWireframeColor; + this.setWireframeColor(A.color, A.opacity) + } + ; + var su = function() { + new au; + var A = [{ + name: "scene", + param: { + name: "scene", + color: 8947848, + opacity: .4, + transparent: !0, + side: 2 + } + }, { + name: "darkRed", + param: { + name: "darkRed", + color: 10496040, + opacity: 1, + transparent: !1, + side: 2 + } + }, { + name: "lightBlue", + param: { + name: "lightBlue", + color: 1275840, + opacity: 1, + transparent: !1, + side: 2 + } + }, { + name: "black", + param: { + name: "black", + color: 0, + opacity: .3, + transparent: !0, + side: 2 + } + }, { + name: "add", + param: { + name: "add", + color: 65280, + opacity: 1, + transparent: !0, + side: 2 + } + }, { + name: "delete", + param: { + name: "delete", + color: 16711680, + opacity: .5, + transparent: !0, + side: 2 + } + }, { + name: "beforeEdit", + param: { + name: "beforeEdit", + color: 16432389, + opacity: .5, + transparent: !0, + side: 2 + } + }, { + name: "afterEdit", + param: { + name: "afterEdit", + color: 16432389, + opacity: 1, + transparent: !0, + side: 2 + } + }] + , e = {}; + e.selection = Kd.createHighlightMaterial(), + e.selection.name = "selection"; + for (var t = 0, i = A.length; i > t; t += 1) { + var o = A[t] + , n = o.name; + e[n] = Kd.createStandardMaterial(o.param), + e[n].createByBos = !0 + } + e.red = e.delete, + e.green = e.add, + e.yellow = e.beforeEdit, + e.blue = e.selection; + var r = { + color: 8947848, + opacity: .2, + transparent: !0, + side: 2 + } + , a = Kd.createStandardMaterial(r); + a.name = "isolate"; + var s = { + color: 8947848, + opacity: .2, + transparent: !0, + side: 2 + } + , l = Kd.createStandardMaterial(s); + l.name = "looming"; + var c = { + color: 0, + opacity: 1, + transparent: !1, + wireframe: !0, + side: 2 + } + , h = Kd.createStandardMaterial(c); + h.name = "wireframe", + e.wireframe = h; + var d = { + color: 15293, + side: 2 + } + , p = Kd.createStandardMaterial(d); + for (var g in p.name = "selected", + this.getDefaultMaterialName = function() { + return "lightBlue" + } + , + this.get = function(A) { + return e[A] + } + , + this.getAll = function() { + return e + } + , + this.add = function(A) { + var t, i = null, o = {}; + return A && A.hasOwnProperty("color") && (o.color = A.color, + o.side = 2, + A.hasOwnProperty("opacity") && (o.opacity = A.opacity, + o.transparent = 1 !== A.opacity)), + t = this._getMaterialName(A), + (i = e[t]) || (o.name = t, + i = Kd.createStandardMaterial(o), + e[t] = i, + e[t].createByBos = !0), + t + } + , + this.remove = function(A) { + var t; + t = this._getMaterialName(A), + e[t] && delete e[t] + } + , + this.has = function(A) { + return Boolean(e[A]) + } + , + this.getMaterialNameByColor = function(A) { + var t; + return t = this._getMaterialName(A), + e[t] ? t : this.add(A) + } + , + this.getMaterialNameByWireframe = function(A) { + var t; + return (t = this._getMaterialName(A)) && !e[t] ? this.add(A) : t + } + , + this.addOverrideMaterial = function(A) { + if (A) { + var t = A.name; + e[t] || (e[t] = A) + } + } + , + this.updateOverrideMaterial = function(A) { + A && (e[A.name] = A) + } + , + this.getMaterialParamsFromName = function(A) { + var e = {} + , t = A.split("_"); + return "mat" === t[0] ? (e.color = parseInt(t[1], 0), + e.opacity = 1) : (e.color = parseInt(t[0], 0), + e.opacity = parseFloat(t[1], 0)), + e + } + , + this._getMaterialName = function(A) { + var e = null; + return A && A.hasOwnProperty("color") ? e = A.hasOwnProperty("opacity") ? A.color + "_" + A.opacity : "mat_" + A.color : A && A.hasOwnProperty("wireframe") ? A.wireframe && (e = "wireframe") : e = "mat_" + A, + e + } + , + this.setWireframeMaterial = function(A) { + e.wireframe.color.setHex(void 0 !== A.color ? A.color : c.color), + e.wireframe.opacity = void 0 !== A.opacity ? A.opacity : c.opacity, + e.wireframe.transparent = void 0 !== A.transparent ? A.transparent : c.transparent, + e.wireframe.side = void 0 !== A.side ? A.side : c.side, + e.wireframe.needsUpdate = !0 + } + , + this.getWireframeMaterial = function() { + return e.wireframe + } + , + this.setFrozonMaterial = function(A) { + l.color.setHex(void 0 !== A.color ? A.color : s.color), + l.opacity = void 0 !== A.opacity ? A.opacity : s.opacity, + l.transparent = void 0 !== A.transparent ? A.transparent : s.transparent, + l.side = void 0 !== A.side ? A.side : s.side, + l.needsUpdate = !0 + } + , + this.getFrozonMaterial = function() { + return l + } + , + this.setSelectedMaterial = function(A) { + p.color.setHex(void 0 !== A.color ? A.color : d.color), + p.opacity = void 0 !== A.opacity ? A.opacity : d.opacity, + p.transparent = void 0 !== A.transparent ? A.transparent : d.transparent, + p.side = void 0 !== A.side ? A.side : d.side, + p.needsUpdate = !0 + } + , + this.getSelectedMaterial = function() { + return p + } + , + this.setIsolateMaterial = function(A) { + a.color.setHex(void 0 !== A.color ? A.color : r.color), + a.opacity = void 0 !== A.opacity ? A.opacity : r.opacity, + a.transparent = void 0 !== A.transparent ? A.transparent : r.transparent, + a.side = void 0 !== A.side ? A.side : r.side, + a.needsUpdate = !0 + } + , + this.getIsolateMaterial = function() { + return a + } + , + this.resetIsolateMaterial = function() { + a.color.setHex(r.color), + a.opacity = r.opacity, + a.transparent = r.transparent, + a.side = r.side, + a.needsUpdate = !0 + } + , + e) + e[g].createByBos = !0 + } + , lu = function(A, e) { + tu.call(this, A, e) + }; + (lu.prototype = Object.create(tu.prototype)).constructor = lu, + lu.prototype.match = function(A) { + return null !== this.getMatchItem(A) + } + , + lu.prototype.getMatchItem = function(A) { + var e = this._items + , t = A.userData + , i = !1; + if (t) + for (var o = e.length, n = 0; o > n; n += 1) { + var r = e[n] + , a = r.condition; + for (var s in i = !0, + a) + if (a[s] !== t[s]) { + i = !1; + break + } + if (i) + return r + } + return null + } + ; + var cu = function(A, e) { + tu.call(this, A, e) + }; + (cu.prototype = Object.create(tu.prototype)).constructor = cu, + cu.prototype.remove = function(A, e) { + var t = this._items[A]; + if (t && e && e.length > 0) { + for (var i = 0, o = e.length; o > i; i += 1) { + var n = e[i]; + t.hasOwnProperty(n) && delete t[n] + } + uh.isEmptyObject(this._items) && this._enabled && (this._enabled = !1, + this.enableStateChanged()) + } + } + , + cu.prototype.add = function(A, e, t) { + var i = this._items + , o = i[A]; + if (e && e.length > 0) { + void 0 === t && (t = !0), + o || (o = i[A] = {}); + for (var n = 0, r = e.length; r > n; n += 1) + o[e[n]] = t; + this._enabled || (this._enabled = !0, + this.enableStateChanged()) + } + } + , + cu.prototype.clear = function(A) { + var e = this._items; + e.hasOwnProperty(A) && (delete e[A], + uh.isEmptyObject(e) && this._enabled && (this._enabled = !1, + this.enableStateChanged())) + } + ; + var hu = function(A, e) { + tu.call(this, A, e) + }; + (hu.prototype = Object.create(cu.prototype)).constructor = hu, + hu.prototype.match = function(A) { + return null !== this.getMatchItem(A) + } + , + hu.prototype.getMatchItem = function(A) { + var e = this._items + , t = A.name; + for (var i in e) { + var o = e[i]; + if (o[t]) + return o[t] + } + return null + } + ; + var du = function(A, e) { + tu.call(this, A, e) + }; + (du.prototype = Object.create(cu.prototype)).constructor = du, + du.prototype.match = function(A) { + return null !== this.getMatchItem(A) + } + , + du.prototype.getMatchItem = function(A) { + var e = this._items + , t = A.userData; + if (t) + for (var i in e) { + var o = e[i] + , n = t[i]; + if (n && void 0 !== o[n]) + return o[n] + } + return null + } + ; + var pu = function() { + var A = Jc + , e = { + IDFILTER_OFFSET: 0, + FILE_VISIBLE: 0, + FILE_HIDDEN: 1, + VISIBLE: 2, + HIDDEN: 3, + TRANSLUCENT: 4, + TRANSLUCENT_OTHERS: 5, + WIREFRAME: 24, + COLORFUL: 25, + RENDER_PROMOTION: 6, + IDFILTER_ENDOFFSET: 6, + ISOLATEFILTER_OFFSET: 7, + ISOLATE_HIDDEN: 7, + ISOLATE_HIDDEN_OTHERS: 8, + ISOLATE_TRANSLUCENT: 9, + ISOLATE_TRANSLUCENT_OTHERS: 10, + ISOLATEFILTER_ENDOFFSET: 10, + USERFILTER_OFFSET: 11, + USER_HIDDEN: 11, + USER_OVERRIDE: 12, + USER_WITH_BOARDLINE: 13, + USERFILTER_ENDOFFSET: 13, + CONDITIONFILTER_OFFSET: 14, + CONDITION_HIDDEN_OTHERS: 14, + CONDITION_TRANSLUCENT_OTHERS: 15, + CONDITION_OVERRIDE: 16, + CONDITION_BORDERLINE: 26, + CONDITIONFILTER_ENDOFFSET: 16, + ISOLATECONDITIONFILTER_OFFSET: 17, + ISOLATE_CONDITION_HIDDEN: 17, + ISOLATE_CONDITION_HIDDEN_OTHERS: 18, + ISOLATE_CONDITION_TRANSLUCENT: 19, + ISOLATE_CONDITION_TRANSLUCENT_OTHERS: 20, + ISOLATECONDITIONFILTER_ENDOFFSET: 20, + FROZENFILTER: 21, + FROZENCONDITIONFILTER: 22, + OVERRIDEFILTER: 23, + BASICFILTER_COUNT: 23 + } + , t = new _g(!0) + , i = new _g(!0) + , o = new _g(!1) + , n = new _g(!0) + , r = new _g(!1) + , a = new _g(!1) + , s = new _g(!1) + , l = [] + , c = null + , h = null + , d = Vc.DISABLED + , p = new su; + !function() { + l[e.FILE_VISIBLE] = new nu(e.FILE_VISIBLE,"FILE_VISIBLE"), + l[e.FILE_HIDDEN] = new nu(e.FILE_HIDDEN,"FILE_HIDDEN"), + l[e.VISIBLE] = new ru(e.VISIBLE,"VISIBLE"), + l[e.HIDDEN] = new ru(e.HIDDEN,"HIDDEN"), + l[e.TRANSLUCENT] = new ru(e.TRANSLUCENT,"TRANSLUCENT"), + l[e.TRANSLUCENT_OTHERS] = new ru(e.TRANSLUCENT_OTHERS,"TRANSLUCENT_OTHERS"), + l[e.RENDER_PROMOTION] = new ru(e.RENDER_PROMOTION,"RENDER_PROMOTION"), + l[e.WIREFRAME] = new ru(e.WIREFRAME,"WIREFRAME"), + l[e.COLORFUL] = new ru(e.COLORFUL,"COLORFUL"), + l[e.ISOLATE_HIDDEN] = new ru(e.ISOLATE_HIDDEN,"ISOLATE_HIDDEN"), + l[e.ISOLATE_HIDDEN_OTHERS] = new ru(e.ISOLATE_HIDDEN_OTHERS,"ISOLATE_HIDDEN_OTHERS"), + l[e.ISOLATE_TRANSLUCENT] = new ru(e.ISOLATE_TRANSLUCENT,"ISOLATE_TRANSLUCENT"), + l[e.ISOLATE_TRANSLUCENT_OTHERS] = new ru(e.ISOLATE_TRANSLUCENT_OTHERS,"ISOLATE_TRANSLUCENT_OTHERS"), + l[e.USER_HIDDEN] = new du(e.USER_HIDDEN,"USER_HIDDEN"), + l[e.USER_OVERRIDE] = new du(e.USER_OVERRIDE,"USER_OVERRIDE"), + l[e.CONDITION_BORDERLINE] = new iu(e.CONDITION_BORDERLINE,"CONDITION_BORDERLINE"), + l[e.CONDITION_HIDDEN_OTHERS] = new iu(e.CONDITION_HIDDEN_OTHERS,"CONDITION_HIDDEN_OTHERS"), + l[e.CONDITION_TRANSLUCENT_OTHERS] = new iu(e.CONDITION_TRANSLUCENT_OTHERS,"CONDITION_TRANSLUCENT_OTHERS"), + l[e.CONDITION_OVERRIDE] = new lu(e.CONDITION_OVERRIDE,"CONDITION_OVERRIDE"), + l[e.ISOLATE_CONDITION_HIDDEN] = new iu(e.ISOLATE_CONDITION_HIDDEN,"ISOLATE_CONDITION_HIDDEN"), + l[e.ISOLATE_CONDITION_HIDDEN_OTHERS] = new iu(e.ISOLATE_CONDITION_HIDDEN_OTHERS,"ISOLATE_CONDITION_HIDDEN_OTHERS"), + l[e.ISOLATE_CONDITION_TRANSLUCENT] = new iu(e.ISOLATE_CONDITION_TRANSLUCENT,"ISOLATE_CONDITION_TRANSLUCENT"), + l[e.ISOLATE_CONDITION_TRANSLUCENT_OTHERS] = new iu(e.ISOLATE_CONDITION_TRANSLUCENT_OTHERS,"ISOLATE_CONDITION_TRANSLUCENT_OTHERS"), + h = new ru(e.FROZENFILTER,"FROZENFILTER"), + l[e.FROZENCONDITIONFILTER] = new iu(e.FROZENCONDITIONFILTER,"FROZENCONDITIONFILTER"), + l[e.FROZENFILTER] = h, + c = new hu(e.OVERRIDEFILTER,"OVERRIDEFILTER"), + l[e.OVERRIDEFILTER] = c; + var d = null + , p = {}; + for (d in p[e.HIDDEN] = A.MATCH_RETURN_FALSE, + p[e.VISIBLE] = A.NOMATCH_RETURN_FALSE, + p[e.USER_HIDDEN] = A.MATCH_RETURN_FALSE, + p[e.CONDITION_HIDDEN_OTHERS] = A.NOMATCH_RETURN_FALSE, + p[e.ISOLATE_HIDDEN] = A.MATCH_RETURN_FALSE, + p[e.ISOLATE_HIDDEN_OTHERS] = A.NOMATCH_RETURN_FALSE, + p[e.ISOLATE_CONDITION_HIDDEN_OTHERS] = A.NOMATCH_RETURN_FALSE, + t.setFilterMode(p), + p) + l[d].registerToCompoundFilter(t); + var g = {}; + for (d in g[e.FROZENFILTER] = A.MATCH_RETURN_FALSE, + g[e.FROZENCONDITIONFILTER] = A.MATCH_RETURN_FALSE, + g[e.TRANSLUCENT] = A.MATCH_RETURN_FALSE, + g[e.TRANSLUCENT_OTHERS] = A.NOMATCH_RETURN_FALSE, + g[e.CONDITION_TRANSLUCENT_OTHERS] = A.NOMATCH_RETURN_FALSE, + g[e.ISOLATE_TRANSLUCENT] = A.MATCH_RETURN_FALSE, + g[e.ISOLATE_TRANSLUCENT_OTHERS] = A.NOMATCH_RETURN_FALSE, + g[e.ISOLATE_CONDITION_TRANSLUCENT_OTHERS] = A.NOMATCH_RETURN_FALSE, + n.setFilterMode(g), + g) + l[d].registerToCompoundFilter(n); + var u = {}; + u[e.ISOLATE_TRANSLUCENT] = A.MATCH_RETURN_TRUE, + u[e.ISOLATE_TRANSLUCENT_OTHERS] = A.NOMATCH_RETURN_TRUE, + u[e.ISOLATE_CONDITION_TRANSLUCENT_OTHERS] = A.NOMATCH_RETURN_TRUE, + u[e.CONDITION_TRANSLUCENT_OTHERS] = A.NOMATCH_RETURN_TRUE, + u[e.TRANSLUCENT] = A.MATCH_RETURN_TRUE, + u[e.TRANSLUCENT_OTHERS] = A.NOMATCH_RETURN_TRUE, + u[e.OVERRIDEFILTER] = A.MATCH_RETURN_TRUE, + u[e.USER_OVERRIDE] = A.MATCH_RETURN_TRUE, + u[e.CONDITION_OVERRIDE] = A.MATCH_RETURN_TRUE, + u[e.FROZENFILTER] = A.MATCH_RETURN_TRUE, + u[e.FROZENCONDITIONFILTER] = A.MATCH_RETURN_TRUE; + var f = {}; + for (d in f[e.ISOLATE_TRANSLUCENT] = 5, + f[e.ISOLATE_TRANSLUCENT_OTHERS] = 5, + f[e.ISOLATE_CONDITION_TRANSLUCENT_OTHERS] = 5, + f[e.CONDITION_TRANSLUCENT_OTHERS] = 5, + f[e.TRANSLUCENT] = 5, + f[e.TRANSLUCENT_OTHERS] = 5, + f[e.OVERRIDEFILTER] = 0, + f[e.USER_OVERRIDE] = 0, + f[e.CONDITION_OVERRIDE] = 0, + f[e.FROZENFILTER] = 3, + f[e.FROZENCONDITIONFILTER] = 3, + i.setFilterMode(u), + i.setFilterPriority(f), + u) + l[d].registerToCompoundFilter(i); + var m = {}; + for (d in m[e.OVERRIDEFILTER] = A.MATCH_RETURN_TRUE, + m[e.USER_OVERRIDE] = A.MATCH_RETURN_TRUE, + m[e.CONDITION_OVERRIDE] = A.MATCH_RETURN_TRUE, + m[e.CONDITION_TRANSLUCENT_OTHERS] = A.MATCH_RETURN_TRUE, + o.setFilterMode(m), + m) + l[d].registerToCompoundFilter(o); + var C = {}; + for (d in C[e.FILE_VISIBLE] = A.NOMATCH_RETURN_TRUE, + C[e.FILE_HIDDEN] = A.MATCH_RETURN_TRUE, + r.setFilterMode(C), + C) + l[d].registerToCompoundFilter(r); + var y = {}; + for (d in y[e.RENDER_PROMOTION] = A.MATCH_RETURN_TRUE, + y[e.ISOLATE_CONDITION_TRANSLUCENT_OTHERS] = A.MATCH_RETURN_TRUE, + a.setFilterMode(y), + y) + l[d].registerToCompoundFilter(a); + var v = {}; + for (d in v[e.CONDITION_BORDERLINE] = A.MATCH_RETURN_TRUE, + s.setFilterMode(v), + v) + l[d].registerToCompoundFilter(s) + }(), + this.getMaterialSelector = function() { + return p + } + , + this.getBasicFilterList = function() { + return l + } + , + this.getFilterType = function() { + return e + } + , + this.saveState = function() { + for (var A = {}, e = null, t = 0, i = l.length; i > t; t += 1) + A[(e = l[t]).getName()] = e.getAll(); + return A.sceneState = this.getSceneState(), + A.version = "1.0", + A + } + , + this.loadState = function(A) { + if (this.clearAll(), + A.hasOwnProperty("version")) { + if ("1.0" === A.version) { + for (var t = {}, i = 0, o = l.length; o > i; i += 1) + t[l[i].getName()] = i; + for (var n in A) + "sceneState" !== n && "version" !== n && (t.hasOwnProperty(n) ? l[t[n]].setByData(A[n]) : Bh.warn("Warning: Not supported filter '" + n + "'")) + } + } else + for (var r in A) + "sceneState" !== r && (2 > r ? l[r].setByData(A[r]) : r > 2 ? e.BASICFILTER_COUNT + 2 > r && l[r - 1].setByData(A[r]) : 2 !== r && "2" !== r || Bh.warn("Warning: Old version filter data! The selection state is out of the filter, can not restore it.")); + this.setSceneState(A.sceneState) + } + , + this.clear = function() { + for (var A = 0, t = l.length; t > A; A += 1) { + var i = l[A].getType(); + i !== e.FROZENFILTER && i !== e.CONDITION_BORDERLINE && l[A].clearAll() + } + this.setSceneState(Vc.DISABLED) + } + , + this.clearAll = function() { + for (var A = 0, e = l.length; e > A; A += 1) + l[A].clearAll(); + this.setSceneState(Vc.DISABLED) + } + , + this.clearIsolate = function() { + this.clearAllIsolateList(), + this.clearAllIsolateConditions() + } + , + this.clearFrozenList = function() { + h.clearAll() + } + , + this.addToFrozenList = function(A) { + h.add(A) + } + , + this.removeFromFrozenList = function(A) { + h.remove(A) + } + , + this.setFrozenList = function(A) { + this.clearFrozenList(), + this.addToFrozenList(A) + } + , + this.setFrozenConditions = function(A) { + l[e.FROZENCONDITIONFILTER].setByData(A) + } + , + this.getFrozenConditions = function() { + return l[e.FROZENCONDITIONFILTER].getAll() + } + , + this.clearFrozenConditions = function() { + l[e.FROZENCONDITIONFILTER].clear() + } + , + this.clearFrozen = function() { + this.clearFrozenList(), + this.clearFrozenConditions() + } + , + this.clearAllIdList = function() { + var A = null; + for (A = e.IDFILTER_OFFSET; e.IDFILTER_ENDOFFSET >= A; A += 1) + l[A].clearAll() + } + , + this.clearIdList = function(A) { + var t = e.IDFILTER_OFFSET + A; + e.IDFILTER_OFFSET > t || t > e.IDFILTER_ENDOFFSET || l[t].clear() + } + , + this.addToIdList = function(A, t) { + var i = e.IDFILTER_OFFSET + A; + e.IDFILTER_OFFSET > i || i > e.IDFILTER_ENDOFFSET || l[i].add(t) + } + , + this.removeFromIdList = function(A, t) { + var i = e.IDFILTER_OFFSET + A; + e.IDFILTER_OFFSET > i || i > e.IDFILTER_ENDOFFSET || l[i].remove(t) + } + , + this.setIdList = function(A, e) { + this.clearIdList(A), + this.addToIdList(A, e) + } + , + this.clearAllOverrideList = function() { + c.clearAll() + } + , + this.clearOverrideList = function(A) { + c.clear(A) + } + , + this.addToOverrideList = function(A, e, t) { + e && e.length > 0 && (p.has(t) || (t = p.getDefaultMaterialName()), + c.add(A, e, t)) + } + , + this.removeFromOverrideList = function(A, e) { + c.remove(A, e) + } + , + this.setOverrideList = function(A, e, t) { + this.clearOverrideList(A), + this.addToOverrideList(A, e, t) + } + , + this.addToOverrideListByColor = function(A, e, t) { + var i = p.add(t); + c.add(A, e, i) + } + , + this.setOverrideListByColor = function(A, e, t) { + this.clearOverrideList(A), + this.addToOverrideListByColor(A, e, t) + } + , + this.clearAllUserList = function() { + var A = null; + for (A = e.USERFILTER_OFFSET; e.USERFILTER_ENDOFFSET >= A; A += 1) + l[A].clearAll() + } + , + this.clearUserListByType = function(A) { + var t = e.USERFILTER_OFFSET + A; + e.USERFILTER_OFFSET > t || t > e.USERFILTER_ENDOFFSET || l[t].clearAll() + } + , + this.clearUserList = function(A, t) { + var i = e.USERFILTER_OFFSET + A; + e.USERFILTER_OFFSET > i || i > e.USERFILTER_ENDOFFSET || l[i].clear(t) + } + , + this.addToUserList = function(A, t, i, o) { + var n = e.USERFILTER_OFFSET + A; + e.USERFILTER_OFFSET > n || n > e.USERFILTER_ENDOFFSET || l[n].add(t, i, o) + } + , + this.removeFromUserList = function(A, t, i) { + var o = e.USERFILTER_OFFSET + A; + e.USERFILTER_OFFSET > o || o > e.USERFILTER_ENDOFFSET || l[o].remove(t, i) + } + , + this.setUserList = function(A, e, t, i) { + this.clearUserList(A, e), + this.addToUserList(A, e, t, i) + } + , + this.isIsolate = function() { + var A = null; + for (A = e.ISOLATEFILTER_OFFSET; e.ISOLATEFILTER_ENDOFFSET >= A; A += 1) + if (!l[A].isEmpty()) + return !0; + return !1 + } + , + this.isFiltering = function() { + return !!this.isIsolate() || !(l[e.HIDDEN].isEmpty() && l[e.VISIBLE].isEmpty() && l[e.TRANSLUCENT].isEmpty() && l[e.TRANSLUCENT_OTHERS].isEmpty() && this.getSceneState() === Vc.DISABLED) + } + , + this.setFrozonMaterial = function(A) { + p.setFrozonMaterial(A) + } + , + this.getFrozonMaterial = function() { + return p.getFrozonMaterial() + } + , + this.setSelectedMaterial = function(A) { + p.setSelectedMaterial(A) + } + , + this.getSelectedMaterial = function() { + return p.getSelectedMaterial() + } + , + this.setIsolateMaterial = function(A) { + p.setIsolateMaterial(A) + } + , + this.getIsolateMaterial = function() { + return p.getIsolateMaterial() + } + , + this.resetIsolateMaterial = function() { + p.resetIsolateMaterial() + } + , + this.clearAllIsolateList = function() { + var A = null; + for (A = e.ISOLATEFILTER_OFFSET; e.ISOLATEFILTER_ENDOFFSET >= A; A += 1) + l[A].clear() + } + , + this.clearIsolateList = function(A) { + var t = e.ISOLATEFILTER_OFFSET + A; + e.ISOLATEFILTER_OFFSET > t || t > e.ISOLATEFILTER_ENDOFFSET || l[t].clear() + } + , + this.addToIsolateList = function(A, t) { + var i = e.ISOLATEFILTER_OFFSET + A; + e.ISOLATEFILTER_OFFSET > i || i > e.ISOLATEFILTER_ENDOFFSET || l[i].add(t) + } + , + this.removeFromIsolateList = function(A, t) { + var i = e.ISOLATEFILTER_OFFSET + A; + e.ISOLATEFILTER_OFFSET > i || i > e.ISOLATEFILTER_ENDOFFSET || l[i].remove(t) + } + , + this.setIsolateList = function(A, e) { + this.clearIsolateList(A), + this.addToIsolateList(A, e) + } + , + this.setIsolateConditions = function(A, t) { + var i = e.ISOLATECONDITIONFILTER_OFFSET + t; + e.ISOLATECONDITIONFILTER_OFFSET > i || i > e.ISOLATECONDITIONFILTER_ENDOFFSET || l[i].setByData(A) + } + , + this.getIsolateConditions = function(A) { + var t = null + , i = e.ISOLATECONDITIONFILTER_OFFSET + A; + return e.ISOLATECONDITIONFILTER_OFFSET > i || i > e.ISOLATECONDITIONFILTER_ENDOFFSET || (t = l[i].getAll()), + t + } + , + this.clearIsolateConditions = function(A) { + var t = e.ISOLATECONDITIONFILTER_OFFSET + A; + e.ISOLATECONDITIONFILTER_OFFSET > t || t > e.ISOLATECONDITIONFILTER_ENDOFFSET || l[t].clear() + } + , + this.clearAllIsolateConditions = function() { + var A = null; + for (A = e.ISOLATECONDITIONFILTER_OFFSET; e.ISOLATECONDITIONFILTER_ENDOFFSET >= A; A += 1) + l[A].clearAll() + } + , + this.setConditions = function(A, t) { + var i = e.CONDITIONFILTER_OFFSET + A; + e.CONDITIONFILTER_OFFSET > i || i > e.CONDITIONFILTER_ENDOFFSET || l[i].setByData(t) + } + , + this.getConditions = function(A) { + var t = null + , i = e.CONDITIONFILTER_OFFSET + A; + return e.CONDITIONFILTER_OFFSET > i || i > e.CONDITIONFILTER_ENDOFFSET || (t = l[i].get()), + t + } + , + this.clearConditions = function(A) { + var t = e.CONDITIONFILTER_OFFSET + A; + e.CONDITIONFILTER_OFFSET > t || t > e.CONDITIONFILTER_ENDOFFSET || l[t].clearAll() + } + , + this.clearAllConditions = function() { + var A = null; + for (A = e.CONDITIONFILTER_OFFSET; e.CONDITIONFILTER_ENDOFFSET >= A; A += 1) + l[A].clear() + } + , + this.makeSceneTranslucent = function() { + this.setSceneState(Vc.TRANSLUCENT) + } + , + this.cancelSceneTranslucent = function() { + this.setSceneState(Vc.DISABLED) + } + , + this.hideScene = function() { + this.setSceneState(Vc.HIDDEN) + } + , + this.showScene = function() { + this.setSceneState(Vc.DISABLED) + } + , + this.setSceneState = function(A) { + d = A + } + , + this.getSceneState = function() { + return d + } + , + this.cancelTranslucent = function() { + this.clearIdList(Dc.TRANSLUCENT), + this.clearIdList(Dc.TRANSLUCENT_OTHERS) + } + , + this._addIdsToFilter = function(A, t) { + var i = e.IDFILTER_OFFSET + A; + e.IDFILTER_OFFSET > i || i > e.IDFILTER_ENDOFFSET || l[i].add(t) + } + , + this.hideByIds = function(A) { + this._addIdsToFilter(Dc.HIDDEN, A) + } + , + this.showByIds = function(A) { + this._addIdsToFilter(Dc.VISIBLE, A) + } + , + this.makeTranslucentByIds = function(A) { + this._addIdsToFilter(Dc.TRANSLUCENT, A) + } + , + this.makeTranslucentOthersByIds = function(A) { + this._addIdsToFilter(Dc.TRANSLUCENT_OTHERS, A) + } + , + this._isVisible = function(A) { + return this.getSceneState() !== Vc.HIDDEN && t.apply(A) + } + , + this._isSelectable = function(A) { + return this.getSceneState() !== Vc.TRANSLUCENT && n.apply(A, this.getSceneState()) + } + , + this._isSelectableById = function(A) { + return !h.get()[A] + } + , + this.getMaterialNameByColor = function(A) { + return p.getMaterialNameByColor(A) + } + , + this.getMaterialNameByWireframe = function(A) { + return p.getMaterialNameByWireframe(A) + } + , + this.addOverrideMaterial = function(A) { + p.addOverrideMaterial(A) + } + , + this.updateOverrideMaterial = function(A) { + p.updateOverrideMaterial(A) + } + , + this.getMaterialByName = function(A) { + return p.get(A) + } + , + this._getOverrideMaterial = function(A) { + if (this.getSceneState() === Vc.TRANSLUCENT) + return p.get("scene"); + var t = i.getApplyFilterId(A) + , o = null + , n = ""; + switch (t) { + case e.ISOLATE_TRANSLUCENT: + case e.ISOLATE_TRANSLUCENT_OTHERS: + case e.ISOLATE_CONDITION_TRANSLUCENT_OTHERS: + o = this.getIsolateMaterial(); + break; + case e.CONDITION_TRANSLUCENT_OTHERS: + case e.TRANSLUCENT: + case e.TRANSLUCENT_OTHERS: + o = p.get("scene"); + break; + case e.FROZENFILTER: + case e.FROZENCONDITIONFILTER: + break; + case e.OVERRIDEFILTER: + case e.USER_OVERRIDE: + case e.CONDITION_OVERRIDE: + var r = l[t].getMatchItem(A); + n = r.hasOwnProperty("color") ? p.getMaterialNameByColor(r.color) : r.material ? r.material : r + } + return o || "" === n || (p.has(n) || (n = p.getDefaultMaterialName()), + o = p.get(n)), + o + } + , + this._getMaterialName = function(A) { + if (this.getSceneState() === Vc.TRANSLUCENT) + return "scene"; + var t = i.getApplyFilterId(A) + , o = ""; + switch (t) { + case e.ISOLATE_TRANSLUCENT: + case e.ISOLATE_TRANSLUCENT_OTHERS: + case e.ISOLATE_CONDITION_TRANSLUCENT_OTHERS: + o = this.getIsolateMaterial().name; + break; + case e.CONDITION_TRANSLUCENT_OTHERS: + case e.TRANSLUCENT: + case e.TRANSLUCENT_OTHERS: + o = "scene"; + break; + case e.FROZENFILTER: + case e.FROZENCONDITIONFILTER: + break; + case e.OVERRIDEFILTER: + case e.USER_OVERRIDE: + case e.CONDITION_OVERRIDE: + var n = l[t].getMatchItem(A); + o = n.hasOwnProperty("color") ? p.getMaterialNameByColor(n.color) : n.material ? n.material : n + } + return o + } + , + this._getMaterialByName = function(A) { + return A instanceof qA ? A : "isolate" === A ? p.getIsolateMaterial() : "looming" === A || "scene" === A ? p.getFrozonMaterial() : "selected" === A ? p.getSelectedMaterial() : p.get(A) + } + , + this._hasHighPriorityOverrideMaterial = function(A) { + return this.getSceneState() === Vc.TRANSLUCENT || o.apply(A) + } + , + this._hasOverrideMaterial = function(A) { + return this.getSceneState() === Vc.TRANSLUCENT || o.apply(A) || i.apply(A) + } + , + this._isHiddenFileId = function(A) { + return r.apply(A) + } + , + this._hasHiddenFileIdFilter = function() { + return !r.isEmpty() + } + , + this._hasVisibleFilter = function() { + return this.getSceneState() === Vc.HIDDEN || !t.isEmpty() + } + , + this._hasPickableFilter = function() { + return this.getSceneState() === Vc.TRANSLUCENT || !n.isEmpty() + } + , + this._hasOverrideMaterialFilter = function() { + return this.getSceneState() === Vc.TRANSLUCENT || !i.isEmpty() + } + , + this._hasLowPriorityOverride = function() { + return i.hasFilterNotIn(o) + } + , + this._isRenderPromotion = function(A) { + return a.apply(A) + } + , + this._hasRenderPromotionFilter = function() { + return !a.isEmpty() + } + , + this._isRenderWithBoardline = function(A) { + return s.apply(A) + } + , + this._hasRenderWithBoardlineFilter = function() { + return !s.isEmpty() + } + , + this._getFilterObjectsKeys = function(A) { + var e = l[A].get() + , t = []; + for (var i in e) + t.push(i); + return t + } + } + , gu = function(A) { + this.materialSelector = A; + var e = function(A) { + var e = []; + for (var t in A) + !0 === A[t] && e.push(t); + return e + }; + this.saveState = function(A) { + var e = A.getIsolateFilterAction() + , t = A.getModelIsolateFilterAction() + , i = A.getFilterActionList() + , o = { + isolateAction: e, + modelIsolateAction: t, + modelActions: A.getModelFilterActionList(), + actions: i, + sceneState: A.getSceneState(), + version: "1.0" + }; + return JSON.stringify(o) + } + , + this.createAction = function(A) { + var e = A.className + , t = null; + switch (e) { + case "IsolateIdsFA": + (t = new Hg(A.isolateHide)).ids = A.ids; + break; + case "VisibleIdsFA": + (t = new Pg(A.flag,A.isVisible)).ids = A.ids; + break; + case "OverrideIdsFA": + if (o = A.material) { + var i = this.materialSelector.getMaterialNameByColor({ + opacity: A.material.opacity, + color: A.material.color + }); + o = this.materialSelector.get(i) + } + (t = new qg(A.flag,o)).ids = A.ids; + break; + case "TransparentIdsFA": + (t = new Yg(A.flag,A.isOpaque)).ids = A.ids; + break; + case "VisibleConditionFA": + (t = new Jg(A.flag,A.isVisible)).conditions = A.conditions; + break; + case "OverrideConditionFA": + var o; + if (o = A.material) { + i = this.materialSelector.getMaterialNameByColor({ + opacity: o.opacity, + color: o.color + }); + o = this.materialSelector.get(i) + } + (t = new zg(A.flag,o)).conditions = A.conditions; + break; + case "TransparentConditionFA": + (t = new Zg(A.flag,A.isOpaque)).conditions = A.conditions; + break; + case "IsolateConditionFA": + (t = new Xg(A.isolateHide)).conditions = A.conditions; + break; + default: + Bh.warn("Warning: Not supported filterAction '" + e + "'") + } + return t + } + , + this.createActionByOldFilter = function(A, t) { + var i = []; + switch (A) { + case "CONDITION_OVERRIDE": + for (var o = [], n = 0; t.length > n; n += 1) { + var r = t[n]; + o.push(r.condition) + } + var a = this.materialSelector.add(p = r.color) + , s = this.materialSelector.get(a); + (g = new zg(!0,s)).conditions = o, + i.push(g); + break; + case "CONDITION_TRANSLUCENT_OTHERS": + (g = new Zg(!1,!1)).conditions = t, + i.push(g); + break; + case "ISOLATE_CONDITION_HIDEEN_OTHERS": + (g = new Xg(!0)).conditions = t, + i.push(g); + break; + case "ISOLATE_CONDITION_TRANSLUCENT_OTHERS": + (g = new Xg(!1)).conditions = t, + i.push(g); + break; + case "ISOLATE_HIDDEN_OTHERS": + (g = new Hg(!0)).ids = e(t), + i.push(g); + break; + case "ISOLATE_TRANSLUCENT_OTHERS": + (g = new Hg(!1)).ids = e(t), + i.push(g); + break; + case "OVERRIDEFILTER": + for (var l in t) + if (t.hasOwnProperty(l)) { + var c = [] + , h = t[l]; + for (var d in h) + c.push(d); + var p = this.materialSelector.getMaterialParamsFromName(h[d]); + a = this.materialSelector.add(p), + s = this.materialSelector.get(a); + (g = new qg(!0,s)).ids = c, + i.push(g) + } + break; + case "TRANSLUCENT": + (g = new Yg(!0,!1)).ids = e(t), + i.push(g); + break; + case "TRANSLUCTANT_OTHERS": + (g = new Yg(!1,!1)).ids = e(t), + i.push(g); + break; + case "VISIBLE": + var g; + (g = new Pg(!0,!0)).ids = e(t), + i.push(g); + break; + default: + Bh.warn("Warning: Not supported filter '" + A + "'") + } + return i + } + , + this.loadState = function(A, e) { + e.clearFilterActionList(), + e.clearModelFilterActionList(), + e.getObjectInfoManager().resetAll(), + e.getModelInfoManager().resetAll(); + var t = JSON.parse(A); + if (t.hasOwnProperty("version") && "1.0" === t.version) { + var i = t.isolateAction; + if (i) { + var o = this.createAction(i); + e.pushBack(o) + } + for (var n = t.actions, r = 0; n.length > r; r += 1) { + o = this.createAction(n[r]); + e.pushBack(o) + } + var a = t.modelIsolateAction; + if (a) { + o = this.createAction(a); + e.pushModelBack(o) + } + for (var s = t.modelActions, l = 0; s.length > l; l += 1) { + o = this.createAction(s[l]); + e.pushModelBack(o) + } + } + e.setSceneState(t.sceneState) + } + } + , uu = function() { + var A = {} + , e = [] + , t = !1 + , i = !1 + , o = !1 + , n = !1 + , r = !1 + , a = new aA; + this.init = function(A) {} + , + this.clearData = function() {} + , + this.getObjectsMap = function() {} + , + this.add = function(t) { + A[t] = { + state: Lc.Visible, + modelKey: t, + material: null + }, + e = Object.keys(A) + } + , + this.remove = function(t) { + delete A[t], + e = Object.keys(A) + } + , + this.calculateVisibleComponentsBbox = function() {} + , + this.getVisibleComponentsBbox = function() { + return a.isEmpty() && this.calculateVisibleComponentsBbox(), + a + } + , + this.arrayToMap = function(A) { + for (var e = {}, t = 0; A.length > t; t += 1) { + var i = A[t]; + e[i] = i + } + return e + } + , + this.isMatchConditions = function(A, e) { + for (var t = !0, i = 0, o = e.length; o > i; i += 1) { + var n = e[i]; + for (var r in n) { + if (!Array.isArray(n[r]) && A[r] !== n[r]) { + t = !1; + break + } + if (Array.isArray(n[r]) && -1 === n[r].indexOf(A[r])) { + t = !1; + break + } + } + if (!0 === t) + break; + e.length - 1 > i && (t = !0) + } + return t + } + , + this.matchConditions = function(A, e) {} + , + this.setVisible = function(t, o, n) { + var r = function(A) { + o ? A.state = Lc.Visible : (i = !0, + A.state &= ~Lc.Visible) + }; + if (void 0 === n || !0 === n) + for (var a = 0, s = t.length; s > a; a += 1) + A.hasOwnProperty(t[a]) && r(A[t[a]]); + else + for (var l = this.arrayToMap(t), c = 0, h = e.length; h > c; c += 1) + l.hasOwnProperty(e[c]) || r(A[e[c]]) + } + , + this.isVisible = function(e) { + if (A.hasOwnProperty(e)) + return A[e].state & Lc.Visible > 0 + } + , + this.clearVisible = function() { + for (var e in i = !1, + A) { + if (A.hasOwnProperty(e)) + A[e].state = Lc.Visible + } + } + , + this.hideAll = function() { + for (var e in i = !0, + A) { + if (A.hasOwnProperty(e)) + A[e].state &= ~Lc.Visible + } + } + , + this.setTransparent = function(i, o, r) { + var a = function(A) { + o ? (A.state |= Lc.Transparent, + t = !0, + n = !0) : A.state &= ~Lc.Transparent + }; + if (void 0 === r || !0 === r) + for (var s = 0, l = i.length; l > s; s += 1) + A.hasOwnProperty(i[s]) && a(A[i[s]]); + else + for (var c = this.arrayToMap(i), h = 0, d = e.length; d > h; h += 1) + c.hasOwnProperty(e[h]) || a(A[e[h]]) + } + , + this.isTransparent = function(e) { + if (A.hasOwnProperty(e)) { + var t = A[e] + , i = (t.state & Lc.Transparent) > 0; + return i = i || (t.state & Lc.TransparentByIsolate) > 0 + } + } + , + this.clearTransparent = function() { + for (var e in n = !1, + A) { + if (A.hasOwnProperty(e)) + A[e].state &= ~Lc.Transparent + } + } + , + this.setMaterial = function(i, o, n) { + if (void 0 === n || !0 === n) + for (var r = 0, a = i.length; a > r; r += 1) { + if (A.hasOwnProperty(i[r])) + A[i[r]].material = o, + t = !0 + } + else + for (var s = this.arrayToMap(i), l = 0, c = e.length; c > l; l += 1) { + if (!s.hasOwnProperty(e[l])) + A[e[l]].material = o, + t = !0 + } + } + , + this.getMaterial = function(e) { + if (A.hasOwnProperty(e)) + return A[e].material + } + , + this.clearMaterial = function() { + for (var e in A) { + A[e].material = null + } + } + , + this.setIsolateHide = function(t, i, n) { + var r = function(A) { + i ? (o = !0, + A.state |= Lc.HideByIsolate) : A.state &= ~Lc.HideByIsolate + }; + if (void 0 === n || !0 === n) + for (var a = 0, s = t.length; s > a; a += 1) + A.hasOwnProperty(t[a]) && r(A[t[a]]); + else + for (var l = this.arrayToMap(t), c = 0, h = e.length; h > c; c += 1) + l.hasOwnProperty(e[c]) || r(A[e[c]]) + } + , + this.isIsolateHide = function(e) { + if (A.hasOwnProperty(e)) + return (A[e].state & Lc.HideByIsolate) > 0 + } + , + this.setIsolateTransparent = function(i, o, n) { + var a = function(A) { + o ? (A.state |= Lc.TransparentByIsolate, + t = !0, + r = !0) : A.state &= ~Lc.TransparentByIsolate + }; + if (void 0 === n || !0 === n) + for (var s = 0, l = i.length; l > s; s += 1) + A.hasOwnProperty(i[s]) && a(A[i[s]]); + else + for (var c = this.arrayToMap(i), h = 0, d = e.length; d > h; h += 1) + c.hasOwnProperty(e[h]) || a(A[e[h]]) + } + , + this.isIsolateTransparent = function(e) { + if (A.hasOwnProperty(e)) + return (A[e].state & Lc.TransparentByIsolate) > 0 + } + , + this.clearIsolateHide = function() { + o = !1; + var e = Object.keys(A); + e.length > 0 && this.setIsolateHide(e, !1) + } + , + this.clearIsolates = function() { + r = !1, + o = !1; + var e = Object.keys(A); + e.length > 0 && (this.setIsolateHide(e, !1), + this.setIsolateTransparent(e, !1)) + } + , + this.clearTransparentByIsolate = function() { + for (var e in r = !1, + A) { + if (A.hasOwnProperty(e)) + A[e].state &= ~Lc.TransparentByIsolate + } + } + , + this.isHidden = function(e) { + if (A.hasOwnProperty(e)) { + var t = A[e] + , i = 0 == (t.state & Lc.Visible); + return i = i || (t.state & Lc.HideByIsolate) > 0 + } + } + , + this.isFrozen = function(e) { + if (A.hasOwnProperty(e)) { + var t = A[e] + , i = (t.state & Lc.Transparent) > 0; + return i = i || (t.state & Lc.TransparentByIsolate) > 0 + } + } + , + this.resetAll = function() { + for (var e in A) + A.hasOwnProperty(e) && (A[e].state = Lc.Visible, + A[e].material = null); + t = !1, + i = o = !1, + n = r = !1 + } + , + this.hasOverrideMaterial = function(e) { + return void 0 === e ? t : A.hasOwnProperty(e) ? null !== A[e].material || this.isTransparent(e) : void 0 + } + , + this.hasObjectHidden = function() { + return i || o + } + , + this.hasObjectCantSelected = function() { + return i || n || r + } + , + this.hasObjectTransparent = function() { + return n || r + } + } + , fu = function() { + var A = {} + , e = {}; + this.init = function(t) { + for (var i in A = t) + e.hasOwnProperty(i) && !uh.isEmptyObject(e[i]) || uh.isEmptyObject(A[i]) || (e[i] = Object.keys(A[i])) + } + , + this.reinit = function(t) { + for (var i in e = {}, + A = t) + e[i] = Object.keys(t[i]) + } + , + this.clear = function() { + A = {}, + e = {} + } + , + this.getObjectsMap = function() { + return A + } + , + this.getObjectIds = function(A) { + return e.hasOwnProperty(A) ? e[A] : [] + } + } + , mu = function() { + var A = new fu + , e = !1 + , t = !1 + , i = !1 + , o = !1 + , n = !1 + , r = !1 + , a = new aA + , s = !1; + this.inactivatedIdMap = {}, + this.inactivatedIds = [], + this.bIsInactivateAll = !1, + this.init = function(e) { + A.init(e) + } + , + this.reinit = function(e) { + A.reinit(e) + } + , + this.clearData = function() { + A.clear() + } + , + this.getObjectsMap = function() { + return A.getObjectsMap() + } + , + this.calculateVisibleComponentsBbox = function() { + a.makeEmpty(); + var e = A.getObjectsMap(); + for (var t in e) + for (var i = e[t], o = A.getObjectIds(t), n = null, r = 0, l = o.length; l > r; r += 1) { + var c = o[r]; + if (!this.isHidden(c)) { + var h = i[c][0]; + if (h.boundingBox) { + !n && h.model && (n = h.model.getModelMatrix()); + var d = h.boundingBox.clone(); + n && d.applyMatrix4(n), + d.isEmpty() || (a.expandByPoint(d.min), + a.expandByPoint(d.max)) + } + } + } + s = !1 + } + , + this.getVisibleComponentsBbox = function() { + return (s || a.isEmpty()) && this.calculateVisibleComponentsBbox(), + a + } + , + this.needUpdateBoxAfterExplode = function() { + s = !0 + } + , + this.arrayToMap = function(A) { + for (var e = {}, t = 0; A.length > t; t += 1) { + var i = A[t]; + e[i] = i + } + return e + } + , + this.isMatchConditions = function(A, e) { + for (var t = !0, i = 0, o = e.length; o > i; i += 1) { + var n = e[i]; + for (var r in n) { + if (!Array.isArray(n[r]) && A[r] !== n[r]) { + t = !1; + break + } + if (Array.isArray(n[r]) && -1 === n[r].indexOf(A[r])) { + t = !1; + break + } + } + if (!0 === t) + break; + e.length - 1 > i && (t = !0) + } + return t + } + , + this.matchConditions = function(e, t) { + var i = A.getObjectsMap(); + for (var o in i) + for (var n = [], r = [], a = i[o], s = A.getObjectIds(o), l = 0, c = s.length; c > l; l += 1) { + var h = s[l] + , d = a[h][0].userData || {}; + d.elementId = a[h][0].userId, + this.isMatchConditions(d, e) ? n.push(h) : r.push(h) + } + t && t(n, !0), + t && t(r, !1) + } + , + this.getMatchIds = function(e) { + var t = A.getObjectsMap() + , i = []; + for (var o in t) + for (var n = t[o], r = A.getObjectIds(o), a = 0, s = r.length; s > a; a += 1) { + var l = r[a] + , c = n[l][0].userData || {}; + c.elementId = n[l][0].userId, + !0 === this.isMatchConditions(c, e) && i.push(l) + } + return i + } + , + this.setVisible = function(e, t, o) { + var n = function(A) { + t ? A.state = Lc.Visible : (i = !0, + A.state &= ~Lc.Visible) + } + , r = A.getObjectsMap(); + for (var a in r) { + var s = r[a]; + if (void 0 === o || !0 === o) + for (var l = 0, c = e.length; c > l; l += 1) { + if (s.hasOwnProperty(f = e[l]) && this.isActive(f)) { + var h = s[f][0]; + n(h) + } + } + else { + for (var d = this.arrayToMap(e), p = A.getObjectIds(a), g = 0, u = p.length; u > g; g += 1) { + var f; + !d.hasOwnProperty(f = p[g]) && this.isActive(f) && n(h = s[f][0]) + } + d = null + } + } + } + , + this.isVisible = function(e) { + var t = A.getObjectsMap(); + for (var i in t) { + var o = t[i]; + if (o.hasOwnProperty(e)) + return o[e][0].state & Lc.Visible > 0 + } + } + , + this.clearVisible = function() { + var e = A.getObjectsMap(); + for (var t in i = !1, + this.inactivatedIds.length > 0 && (i = !0), + e) + for (var o = e[t], n = A.getObjectIds(t), r = 0, a = n.length; a > r; r += 1) { + var s = n[r] + , l = o[s][0]; + this.isActive(s) && (l.state = Lc.Visible) + } + } + , + this.hideAll = function() { + var e = A.getObjectsMap(); + for (var t in i = !0, + e) + for (var o = e[t], n = A.getObjectIds(t), r = 0, a = n.length; a > r; r += 1) { + o[n[r]][0].state &= ~Lc.Visible + } + } + , + this.setTransparent = function(t, i, o) { + var r = function(A) { + i ? (A.state |= Lc.Transparent, + e = !0, + n = !0) : A.state &= ~Lc.Transparent + } + , a = A.getObjectsMap(); + for (var s in a) { + var l = a[s]; + if (void 0 === o || !0 === o) + for (var c = 0, h = t.length; h > c; c += 1) { + if (this.isActive(m = t[c]) && l.hasOwnProperty(m)) { + var d = l[m][0]; + r(d) + } + } + else { + for (var p = this.arrayToMap(t), g = A.getObjectIds(s), u = 0, f = g.length; f > u; u += 1) { + var m; + this.isActive(m = g[u]) && !p.hasOwnProperty(m) && r(d = l[m][0]) + } + p = null + } + } + } + , + this.isTransparent = function(e) { + var t = A.getObjectsMap(); + for (var i in t) { + var o = t[i]; + if (o.hasOwnProperty(e) && this.isActive(e)) { + var n = o[e][0] + , r = (n.state & Lc.Transparent) > 0; + return r = r || (n.state & Lc.TransparentByIsolate) > 0 + } + } + } + , + this.clearTransparent = function() { + var e = A.getObjectsMap(); + for (var t in n = !1, + e) + for (var i = e[t], o = A.getObjectIds(t), r = 0, a = o.length; a > r; r += 1) { + var s = o[r]; + if (this.isActive(s)) + i[s][0].state &= ~Lc.Transparent + } + } + , + this.setMaterial = function(t, i, o) { + var n = A.getObjectsMap(); + for (var r in n) { + var a = n[r]; + if (void 0 === o || !0 === o) + for (var s = 0, l = t.length; l > s; s += 1) { + if (this.isActive(u = t[s]) && a.hasOwnProperty(u)) { + var c = a[u][0]; + c.material = i, + e = !0 + } + } + else { + for (var h = this.arrayToMap(t), d = A.getObjectIds(r), p = 0, g = d.length; g > p; p += 1) { + var u; + this.isActive(u = d[p]) && !h.hasOwnProperty(u) && ((c = a[u][0]).material = i, + e = !0) + } + h = null + } + } + } + , + this.getMaterial = function(e) { + var t = A.getObjectsMap(); + for (var i in t) { + var o = t[i]; + if (o.hasOwnProperty(e)) + return o[e][0].material + } + } + , + this.clearMaterial = function() { + var e = A.getObjectsMap(); + for (var t in e) { + var i = e[t]; + for (var o in i) + this.isActive(o) && (i[o][0].material = null) + } + } + , + this.setWireFrameMaterial = function(e, i, o) { + var n = A.getObjectsMap(); + for (var r in n) { + var a = n[r]; + if (void 0 === o || !0 === o) + for (var s = 0, l = e.length; l > s; s += 1) { + if (a.hasOwnProperty(u = e[s])) { + var c = a[u][0]; + c.wireFrameMaterial = i, + t = !0 + } + } + else { + for (var h = this.arrayToMap(e), d = A.getObjectIds(r), p = 0, g = d.length; g > p; p += 1) { + var u; + h.hasOwnProperty(u = d[p]) || ((c = a[u][0]).wireFrameMaterial = i, + t = !0) + } + h = null + } + } + } + , + this.getWireFrameMaterial = function(e) { + var t = A.getObjectsMap(); + for (var i in t) { + var o = t[i]; + if (o.hasOwnProperty(e)) + return o[e][0].wireFrameMaterial + } + } + , + this.clearWireFrameMaterial = function() { + var e = A.getObjectsMap(); + for (var t in e) { + var i = e[t]; + for (var o in i) + i[o][0].wireFrameMaterial = null + } + } + , + this.clearMaterialByKey = function(e) { + var t = A.getObjectsMap(); + for (var i in t) { + var o = t[i]; + for (var n in o) + -1 !== e.indexOf(n) && (o[n][0].material = null) + } + } + , + this.setIsolateHide = function(e, t, i) { + var n = function(A) { + t ? (o = !0, + A.state |= Lc.HideByIsolate) : A.state &= ~Lc.HideByIsolate + } + , r = A.getObjectsMap(); + for (var a in r) { + var s = r[a]; + if (void 0 === i || !0 === i) + for (var l = 0, c = e.length; c > l; l += 1) { + if (this.isActive(f = e[l]) && s.hasOwnProperty(f)) { + var h = s[f][0]; + n(h) + } + } + else { + for (var d = this.arrayToMap(e), p = A.getObjectIds(a), g = 0, u = p.length; u > g; g += 1) { + var f; + this.isActive(f = p[g]) && !d.hasOwnProperty(f) && n(h = s[f][0]) + } + d = null + } + } + } + , + this.isIsolateHide = function(e) { + var t = A.getObjectsMap(); + for (var i in t) { + var o = t[i]; + if (o.hasOwnProperty(e)) + return (o[e][0].state & Lc.HideByIsolate) > 0 + } + } + , + this.setIsolateTransparent = function(t, i, o) { + var n = function(A) { + i ? (A.state |= Lc.TransparentByIsolate, + e = !0, + r = !0) : A.state &= ~Lc.TransparentByIsolate + } + , a = A.getObjectsMap(); + for (var s in a) { + var l = a[s]; + if (void 0 === o || !0 === o) + for (var c = 0, h = t.length; h > c; c += 1) { + if (l.hasOwnProperty(m = t[c])) { + var d = l[m][0]; + n(d) + } + } + else { + for (var p = this.arrayToMap(t), g = A.getObjectIds(s), u = 0, f = g.length; f > u; u += 1) { + var m; + !p.hasOwnProperty(m = g[u]) && this.isActive(m) && n(d = l[m][0]) + } + p = null + } + } + } + , + this.isIsolateTransparent = function(e) { + var t = A.getObjectsMap(); + for (var i in t) { + var o = t[i]; + if (o.hasOwnProperty(e) && this.isActive(e)) + return (o[e][0].state & Lc.TransparentByIsolate) > 0 + } + } + , + this.clearIsolateHide = function() { + var e = A.getObjectsMap(); + for (var t in o = !1, + e) { + var i = A.getObjectIds(t); + i.length > 0 && this.setIsolateHide(i, !1) + } + } + , + this.clearIsolates = function() { + var e = A.getObjectsMap(); + for (var t in r = !1, + o = !1, + e) { + var i = A.getObjectIds(t); + i.length > 0 && (this.setIsolateHide(i, !1), + this.setIsolateTransparent(i, !1)) + } + } + , + this.clearTransparentByIsolate = function() { + var e = A.getObjectsMap(); + for (var t in r = !1, + e) + for (var i = e[t], o = A.getObjectIds(t), n = 0, a = o.length; a > n; n += 1) { + var s = o[n]; + if (this.isActive(s)) + i[s][0].state &= ~Lc.TransparentByIsolate + } + } + , + this.isHidden = function(e) { + var t = A.getObjectsMap(); + for (var i in t) { + var o = t[i]; + if (o.hasOwnProperty(e)) { + var n = o[e][0] + , r = 0 == (n.state & Lc.Visible); + return r = r || (n.state & Lc.HideByIsolate) > 0 + } + } + } + , + this.isFrozen = function(e) { + var t = A.getObjectsMap(); + for (var i in t) { + var o = t[i]; + if (o.hasOwnProperty(e)) { + var n = o[e][0] + , r = (n.state & Lc.Transparent) > 0; + return r = r || (n.state & Lc.TransparentByIsolate) > 0 + } + } + } + , + this.resetAll = function() { + var t = A.getObjectsMap(); + for (var a in t) + for (var s = t[a], l = A.getObjectIds(a), c = 0, h = l.length; h > c; c += 1) { + var d = l[c]; + s[d][0].state = Lc.Visible, + this.isActive(d) && (s[d][0].material = null) + } + e = !1, + i = o = !1, + n = r = !1, + this.inactivatedIds.length > 0 && (i = !0) + } + , + this.hasOverrideMaterial = function(t) { + var i = A.getObjectsMap(); + if (void 0 === t) + return e; + for (var o in i) { + var n = i[o]; + if (n.hasOwnProperty(t)) + return null !== n[t][0].material || this.isTransparent(t) + } + } + , + this.hasOverrideMaterialForWireFrame = function(e) { + var i = A.getObjectsMap(); + if (null == e) + return t; + for (var o in i) { + var n = i[o]; + if (n.hasOwnProperty(e)) + return null !== n[e][0].wireFrameMaterial + } + } + , + this.hasObjectInactivated = function() { + return this.inactivatedIds.length > 0 + } + , + this.hasObjectHidden = function() { + return i || o + } + , + this.hasObjectCantSelected = function() { + return this.hasObjectHidden() || this.hasObjectTransparent() || this.hasObjectInactivated() + } + , + this.hasObjectTransparent = function() { + if (this.hasObjectInactivated()) { + var A = !1 + , e = !0 + , t = !1 + , i = void 0; + try { + for (var o, a = this.inactivatedIds[Symbol.iterator](); !(e = (o = a.next()).done); e = !0) { + if (this.isTransparent(o.value)) { + A = !0; + break + } + } + } catch (A) { + t = !0, + i = A + } finally { + try { + !e && a.return && a.return() + } finally { + if (t) + throw i + } + } + return A + } + return n || r + } + , + this.deactivateByIds = function(e) { + var t = !0 + , o = !1 + , n = void 0 + , r = A.getObjectsMap(); + try { + for (var a, s = e[Symbol.iterator](); !(t = (a = s.next()).done); t = !0) { + var l = a.value; + for (var c in r) { + var h = r[c]; + if (h.hasOwnProperty(l)) + h[l][0].state &= ~Lc.Visible + } + this.inactivatedIdMap[l] = !0 + } + } catch (A) { + o = !0, + n = A + } finally { + try { + !t && s.return && s.return() + } finally { + if (o) + throw n + } + } + i = !0, + this.inactivatedIds = Object.keys(this.inactivatedIdMap) + } + , + this.activateByIds = function(e) { + for (var t = A.getObjectsMap(), o = 0, n = e.length; n > o; o += 1) { + var r = e[o]; + for (var a in delete this.inactivatedIdMap[r], + t) { + var s = t[a]; + if (s.hasOwnProperty(r)) + s[r][0].state = Lc.Visible + } + } + this.inactivatedIds = Object.keys(this.inactivatedIdMap), + this.inactivatedIds.length > 0 && (i = !0) + } + , + this.clearInactivatedIdMap = function() { + this.inactivatedIdMap = {}, + this.inactivatedIds = [] + } + , + this.isActive = function(A) { + return !1 === this.bIsInactivateAll && !(!0 === this.inactivatedIdMap[A]) + } + , + this.deactivateAll = function() { + this.bIsInactivateAll = !0 + } + , + this.activateAll = function() { + this.bIsInactivateAll = !1 + } + , + this.getInactivatedIdMap = function() { + return this.inactivatedIdMap + } + } + , Cu = function(A, e) { + Wg.call(this), + this.className = "OverrideConditionForWireFrameFA", + this.flag = A, + this.material = e + }; + (Cu.prototype = Object.create(Wg.prototype)).constructor = Cu, + Cu.prototype.applyFilter = function(A, e) { + var t = this; + this.conditions instanceof Array ? A.matchConditions(this.conditions, (function(e, i) { + t.flag === i && (A.setWireFrameMaterial(e, t.material), + e = null) + } + )) : Bh.warn("Conditions should be type of array.") + } + ; + var yu = function(A, e) { + Gg.call(this), + this.className = "OverrideIdsForWireFrameFA", + this.flag = A, + this.material = e + }; + (yu.prototype = Object.create(Gg.prototype)).constructor = yu, + yu.prototype.applyFilter = function(A) { + this.ids instanceof Array ? A.setWireFrameMaterial(this.ids, this.material, this.flag) : Bh.warn("Ids should be type of array.") + } + ; + var vu = function() { + function A(e, t) { + cc(this, A), + this.id = e, + this.object = t + } + return dc(A, [{ + key: "destroy", + value: function() { + this.object = null + } + }, { + key: "_inDistanceRange", + value: function(A, e) { + return A >= e.near && e.far >= A + } + }, { + key: "raycast", + value: function(A, e, t, i, o) {} + }]), + A + }(); + vu.prototype.destroy = function() {} + ; + var Iu = function(A) { + function e(A, t) { + return cc(this, e), + Cc(this, fc(e).call(this, A, t)) + } + return uc(e, A), + dc(e, [{ + key: "raycast", + value: function(A, e, t, i, o, n) { + var r = []; + if (this.object.raycast(A, r), + r.length > 0) { + r.sort((function(A, e) { + return A.distance - e.distance + } + )); + for (var a = 0, s = r.length; s > a; a += 1) { + var l = r[a]; + if (this._inDistanceRange(l.distance, t) && !i.clipPoint(l.point)) { + n || (t.far = l.distance - uh.MinusEpsilon), + o.push(l); + break + } + } + } + } + }]), + e + }(vu) + , Eu = function(A) { + function e(A, t) { + return cc(this, e), + Cc(this, fc(e).call(this, A, t)) + } + return uc(e, A), + dc(e, [{ + key: "raycast", + value: function(A, e, t, i, o, n) { + var r = this.object + , a = r._indicesGroup; + if (a) { + var s = a[e.userId]; + if (s) { + for (var l, c = !1, h = 0, d = s.length; d > h; h += 1) + if (s[h].nodeId === e.nodeId) { + l = s[h], + c = !0; + break + } + if (c) { + var p = []; + if (r.raycastByIndices(A, p, l), + p.length > 0) { + p.sort((function(A, e) { + return A.distance - e.distance + } + )); + for (var g = 0, u = p.length; u > g; g += 1) { + var f = p[g]; + if (this._inDistanceRange(f.distance, t) && !i.clipPoint(f.point)) { + n || (t.far = f.distance - uh.MinusEpsilon), + f.userId = l.userId, + f.indexInfo = l, + o.push(f); + break + } + } + } + } + } + } + } + }]), + e + }(vu) + , Bu = function(A) { + function e(A, t) { + return cc(this, e), + Cc(this, fc(e).call(this, A, t)) + } + return uc(e, A), + dc(e, [{ + key: "raycast", + value: function(A, e, t, i, o, n) { + var r = []; + if (this.object.raycastByIndices(A, r, null, e.matrix), + r.length > 0) { + r.sort((function(A, e) { + return A.distance - e.distance + } + )); + for (var a = 0, s = r.length; s > a; a += 1) { + var l = r[a]; + if (this._inDistanceRange(l.distance, t) && !i.clipPoint(l.point)) { + n || (t.far = l.distance - uh.MinusEpsilon), + l.userId = e.userId, + l.matrix = e.matrix, + o.push(l); + break + } + } + } + } + }]), + e + }(vu) + , xu = function() { + this._filterImpl = new pu; + var A = [] + , e = [] + , t = null + , i = null + , o = this._filterImpl.getMaterialSelector() + , n = new mu + , r = new uu + , a = new gu(o); + this.observerForSceneState = null, + this.setObserverForSceneState = function(A) { + this.observerForSceneState = A + } + , + this.setSceneStateHelper = function(A) {} + , + this.getFilterActionList = function() { + return A + } + , + this.getModelFilterActionList = function() { + return e + } + , + this.addModel = function(A) { + r.add(A) + } + , + this.removeModel = function(A) { + r.remove(A) + } + , + this.clearFilterActionList = function() { + A = [] + } + , + this.clearModelFilterActionList = function() { + e = [] + } + , + this.initFilterManager = function(A) { + n.init(A) + } + , + this.reinitFilterManager = function(A) { + n.reinit(A) + } + , + this.clearFilterManager = function() { + n.clearData() + } + ; + var s = !1; + this.isStateChanged = function() { + return s + } + , + this.enableStateChanged = function() { + s = !0 + } + , + this.disableStateChanged = function() { + s = !1 + } + , + this.getIsolateFilterAction = function() { + return t + } + , + this.getModelIsolateFilterAction = function() { + return i + } + , + this.setIsolateAction = function(A) { + (t = A).apply() + } + , + this.getVisibleComponentsBbox = function() { + return n.getVisibleComponentsBbox() + } + , + this.pushBack = function(e) { + var i = e.getClassName(); + "IsolateIdsFA" === i || "IsolateConditionFA" === i ? t = e : A.push(e), + s = !0, + e.applyFilter(n) + } + , + this.pushModelBack = function(A) { + var t = A.getClassName(); + "IsolateIdsFA" === t || "IsolateConditionFA" === t ? i = A : e.push(A), + s = !0, + A.applyFilter(r) + } + ; + var l = function(e) { + for (var t = [], i = 0; A.length > i; ) { + var o = A[i]; + e === o.getClassName() ? (t = t.concat(o.ids), + A.splice(i, 1)) : i += 1 + } + return t + } + , c = function(A) { + for (var t = 0; e.length > t; ) { + A === e[t].getClassName() ? e.splice(t, 1) : t += 1 + } + }; + function h(A, e) { + var t = e || ""; + return A.map((function(A) { + var e = A.clone(); + for (var i in e.name += "_" + t, + A) + A.hasOwnProperty(i) && (A[i]instanceof d || A[i]instanceof ut) && (e[i] = A[i].clone(), + e[i].needsUpdate = !0); + return e + } + )) + } + function p(A, e, t, i, o, n, r) { + var a = Boolean(r || 0 === r) + , s = []; + a && !Array.isArray(r) && (r = [r]); + var l = !0 + , c = !1 + , h = void 0; + try { + for (var d, p = o[Symbol.iterator](); !(l = (d = p.next()).done); l = !0) { + var g = d.value; + A._filterImpl.getMaterialByName(g.name) || A._filterImpl.addOverrideMaterial(g) + } + } catch (A) { + c = !0, + h = A + } finally { + try { + l || null == p.return || p.return() + } finally { + if (c) + throw h + } + } + var u = t[0] + , f = u.materialId; + if (u.originMId === f && (u.originMId = [].concat(f)), + null === u.material) + for (var m = 0, C = f.length; C > m; m += 1) + s[m] = e.models[u.model.modelKey].materialManager.getMaterialById(f[m]); + else + s = u.material; + for (var y = null, v = null, I = 0, E = s.length; E > I; I += 1) { + if (a) { + if (!r[I]) + break; + y = r[I].compMatOrder, + v = r[I].replMatOrder + } else + y = v = I; + if (!o[v] || y >= o.length) { + o[v] ? console.log('构件材质数组越界,越界位置:{"componentKey":'.concat(i, ',"order":').concat(y, "}")) : console.log('替换材质数组越界,越界位置:{"componentKey":'.concat(i, ',"order":').concat(v, "}")); + break + } + s[y] = o[v], + f[y] = o[v].name + } + var B = new qg(!0,s); + B.ids = [u.componentKey], + n[u.componentKey] = s, + A.pushBack(B) + } + function g(A, e, t, i, o, n, r) { + var a, s = []; + (a = Boolean(r || 0 === r)) && !Array.isArray(r) && (r = [r]); + var l = !0 + , c = !1 + , h = void 0; + try { + for (var d, p = o[Symbol.iterator](); !(l = (d = p.next()).done); l = !0) { + A._filterImpl.updateOverrideMaterial(d.value) + } + } catch (A) { + c = !0, + h = A + } finally { + try { + l || null == p.return || p.return() + } finally { + if (c) + throw h + } + } + for (var g = 0, u = t.length; u > g; g += 1) { + var f = t[g] + , m = t[0].material; + if (null === m) + s[g] = e.models[f.model.modelKey].materialManager.getMaterialById(f.materialId), + s[g].materialId = f.materialId; + else if (Array.isArray(m)) { + s[g] = m[g] + } else + s[g] = m + } + for (var C = null, y = null, v = 0, I = s.length; I > v; v += 1) { + if (a) { + if (!r[v]) + break; + C = r[v].compMatOrder, + y = r[v].replMatOrder + } else + C = y = v; + if (!o[y] || C >= t.length) { + o[y] ? console.log('构件材质数组越界,越界位置:{"componentKey":'.concat(i, ',"order":').concat(C, "}")) : console.log('替换材质数组越界,越界位置:{"componentKey":'.concat(i, ',"order":').concat(y, "}")); + break + } + var E = t[C].nodeId + , B = s[C].mapNodeIdToOrigMatId && s[C].mapNodeIdToOrigMatId[E] ? s[C].mapNodeIdToOrigMatId[E] : s[C].materialId; + t[C].mesh.geometry.getAttribute("uv") || null === o[y].map && null === o[y].aoMap ? (s[C] = o[y], + s[C].mapNodeIdToOrigMatId || (s[C].mapNodeIdToOrigMatId = {}), + s[C].materialId = o[y].name, + s[C].mapNodeIdToOrigMatId[E] = B) : console.log('构件node缺少uv:{"componentKey":'.concat(i, ',"order":').concat(y, ",nodeId:").concat(t[C].nodeId, "}")) + } + var x = new qg(!0,s); + x.ids = [i], + n && (n[i] = s), + A.pushBack(x) + } + function u(A, e, t) { + var i = A.models[e] + , o = i._handler.defaultManager.meshManager + , n = i._handler.instancedManager.meshManager + , r = i.loader.getDescriptor() + , a = n.getNodeIdxMapByUserId(t) + , s = i.group.children.find((function(A) { + return "Geometry" === A.name + } + )); + s || ((s = new Xi).name = "Geometry", + i.group.add(s)); + var l = new Xi + , c = []; + s.add(l); + var h = r.mapNodeInfoByComponentKey[t] + , d = function(r) { + var s = a[r][0] + , d = n.getInstanceGeometries(r); + d[0].attributes.vState.array[s] = -1, + d[0].attributes.vState.needsUpdate = !0; + var p = new he; + d[0].removed || (d[0].removed = {}), + d[0].removed[s] = !0; + for (var g = d[0].attributes.position.array, u = [], f = new y, m = n.matrixInfoMapFromUserId[t][r][0].matrix, C = 0, v = g.length; v > C; C += 3) + f.set(g[C], g[C + 1], g[C + 2]).applyMatrix4(m), + u.push(f.x, f.y, f.z); + d[0].attributes.uv && p.setAttribute("uv", d[0].attributes.uv.clone()), + d[0].attributes.normal && p.setAttribute("normal", d[0].attributes.normal.clone()); + var I = d[0].index.clone(); + p.setAttribute("position", new YA(new Float32Array(u),3)), + p.setIndex(I); + var E = n.getMaterialIdByMeshId(r) + , B = n.manager.model.materialManager.getInstanceMaterialById(E)[0] + , x = Kd.getMaterialParameters(B) + , S = Kd.createStandardMaterial(x) + , w = new Ue(p,S) + , M = r.split("&")[1] + , b = E + "_" + s + "_cm" + , U = "" + , F = !0 + , K = !1 + , Q = void 0; + try { + for (var R, T = h[Symbol.iterator](); !(F = (R = T.next()).done); F = !0) { + var k = R.value; + k.geometryId !== M && k.geometryId.toString() !== M || (U = k.nodeId, + k.instanceOrNot = !1, + k.isBatched = !1, + k.mesh = w, + k.instancedRenderOrder = s, + k.RenderTypeChange = !0, + k.materialId = b, + k.uv = !0, + c.push(k)) + } + } catch (A) { + K = !0, + Q = A + } finally { + try { + F || null == T.return || T.return() + } finally { + if (K) + throw Q + } + } + var D = b + "&1&meshes"; + l.add(w), + w.geometry.computeBoundingBox(), + w.modelKey = e; + var L = pc({}, t, [{ + boundingBox: w.geometry.boundingBox, + indexCount: I.count, + indexStart: 0, + lightmapIdx: void 0, + nodeId: U, + positionCount: p.attributes.position.count, + positionStart: 0, + userId: t + }]); + o.mapMaterialIdToMergedNode[D] = [{ + geometry: p, + indices: L, + mesh: w, + RenderTypeChange: !0 + }], + w._indicesGroup = L, + w.computeBoundingBox = function() { + var A = this.matrixWorld + , e = new aA; + return e.copy(this.geometry.boundingBox), + e.applyMatrix4(A), + e + } + , + w.intersectBoxWithDistanceByIndices = function(A) { + return A.ray.intersectBoxWithDistance(this.computeBoundingBox()) + } + , + w.raycastByIndices = function(A, e) { + w.raycast(A, e) + } + , + i.materialManager.materials[b] = S, + A.addMeshToOctantMap(e, D, new Eu(D,w)) + }; + for (var p in a) + d(p); + return A.octantToObjectMap[e].info[t] = c, + r.mapNodeInfoByCategory[1] || (r.mapNodeInfoByCategory[1] = {}), + r.mapNodeInfoByCategory[1][t] = c, + delete r.instancedComponent[t], + delete r.mapNodeInfoByCategory[0][t], + delete n.nodeIdxMapFromUserId[t], + o.getPickingNodeGenerator().clearData(), + l + } + this.showAll = function() { + l("VisibleIdsFA"), + l("VisibleConditionFA"), + n.clearVisible(), + n.calculateVisibleComponentsBbox(), + this.enableStateChanged() + } + , + this.showAllModel = function() { + c("VisibleIdsFA"), + r.clearVisible(), + this.enableStateChanged() + } + , + this.hideAll = function() { + var A = new Pg(!1,!1); + A.ids = [], + this.pushBack(A) + } + , + this.hideAllModel = function() { + var A = new Pg(!1,!1); + A.ids = [], + this.pushModelBack(A) + } + , + this.getObjectInfoManager = function() { + return n + } + , + this.getModelInfoManager = function() { + return r + } + , + this.getMatchIds = function(A) { + return n.getMatchIds(A) + } + , + this._isVisible = function(A) { + return !n.isHidden(A.userId) + } + , + this._isModelVisible = function(A) { + return !r.isHidden(A) + } + , + this._isTransparent = function(A) { + return n.isTransparent(A.userId) + } + , + this._isModelTransparent = function(A) { + return r.isTransparent(A) + } + , + this._isModelPickable = function(A) { + return !r.isFrozen(A) || vc.EnableSelectionByTranslucent + } + , + this._isSelectable = function(A) { + if (vc.EnableSelectionByTranslucent) + return !0; + var e = A.userId; + return !n.isFrozen(e) && this._filterImpl._isSelectableById(e) + } + , + this._isPickable = function(A) { + var e = A.userId; + return this.isComponentActive(e) && this._filterImpl._isSelectableById(e) && (!n.isFrozen(e) || vc.EnableSelectionByTranslucent) + } + , + this._isSelectableById = function(A) { + return !!vc.EnableSelectionByTranslucent || !n.isFrozen(A) && this._filterImpl._isSelectableById(A) + } + , + this._getOverrideMaterial = function(A) { + var e = A.userId; + return n.isFrozen(e) ? this._filterImpl.getFrozonMaterial() : n.getMaterial(e) + } + , + this._getModelOverrideMaterial = function(A) { + return r.isFrozen(A) ? this._filterImpl.getFrozonMaterial() : r.getMaterial(A) + } + , + this._getMaterialName = function(A) { + return this._filterImpl._getMaterialName(A) + } + , + this._getMaterialByName = function(A) { + return this._filterImpl._getMaterialByName(A) + } + , + this._hasOverrideMaterial = function(A) { + return n.hasOverrideMaterial(A.userId) + } + , + this._hasModelOverrideMaterial = function(A) { + return r.hasOverrideMaterial(A) + } + , + this._hasHighPriorityOverrideMaterial = function(A) { + return this._filterImpl._hasHighPriorityOverrideMaterial(A) + } + , + this._isHiddenFileId = function(A) { + return this._filterImpl._isHiddenFileId(A) + } + , + this._isRenderPromotion = function(A) { + return this._filterImpl._isRenderPromotion(A) + } + , + this._isRenderWithBoardline = function(A) { + return this._filterImpl._isRenderWithBoardline(A) + } + , + this._hasHiddenFileIdFilter = function() { + return this._filterImpl._hasHiddenFileIdFilter() + } + , + this._hasVisibleFilter = function() { + return n.hasObjectHidden() + } + , + this._hasPickableFilter = function() { + return n.hasObjectCantSelected() || this._filterImpl._hasPickableFilter() + } + , + this._hasTransparentFilter = function() { + return n.hasObjectTransparent() + } + , + this._hasOverrideMaterialFilter = function() { + return n.hasOverrideMaterial() + } + , + this._hasModelVisibleFilter = function() { + return r.hasObjectHidden() + } + , + this._hasModelSelectableFilter = function() { + return r.hasObjectCantSelected() + } + , + this._hasModelTransparentFilter = function() { + return r.hasObjectTransparent() + } + , + this._hasModelOverrideMaterialFilter = function() { + return r.hasOverrideMaterial() + } + , + this._hasLowPriorityOverride = function() { + return this._filterImpl._hasLowPriorityOverride() + } + , + this._hasRenderPromotionFilter = function() { + return this._filterImpl._hasRenderPromotionFilter() + } + , + this._hasRenderWithBoardlineFilter = function() { + return this._filterImpl._hasRenderWithBoardlineFilter() + } + , + this.saveState = function() { + return a.saveState(this) + } + , + this.loadState = function(A) { + a.loadState(A, this) + } + , + this.clear = function() { + n.resetAll(), + s = !0 + } + , + this.clearAll = function() { + return this.enableStateChanged(), + this._filterImpl.clearAll() + } + , + this.clearIsolate = function() { + n.clearIsolates() + } + , + this.clearFrozenList = function() { + return this.enableStateChanged(), + this._filterImpl.clearFrozenList() + } + , + this.addToFrozenList = function(A) { + return this.enableStateChanged(), + this._filterImpl.addToFrozenList(A) + } + , + this.removeFromFrozenList = function(A) { + return this.enableStateChanged(), + this._filterImpl.removeFromFrozenList(A) + } + , + this.setFrozenList = function(A) { + return this.enableStateChanged(), + this._filterImpl.setFrozenList(A) + } + , + this.setFrozenConditions = function(A) { + this.enableStateChanged(), + this._filterImpl.setFrozenConditions(A) + } + , + this.getFrozenConditions = function() { + return this._filterImpl.getFrozenConditions() + } + , + this.clearFrozenConditions = function() { + this.enableStateChanged(), + this._filterImpl.clearFrozenConditions() + } + , + this.clearFrozen = function() { + this.enableStateChanged(), + this.clearFrozenList(), + this.clearFrozenConditions() + } + , + this.clearAllIdList = function() { + return this.enableStateChanged(), + this._filterImpl.clearAllIdList() + } + , + this.clearIdList = function(A) { + return this.enableStateChanged(), + this._filterImpl.clearIdList(A) + } + , + this.addToIdList = function(A, e) { + return this.enableStateChanged(), + this._filterImpl.addToIdList(A, e) + } + , + this.removeFromIdList = function(A, e) { + return this.enableStateChanged(), + this._filterImpl.removeFromIdList(A, e) + } + , + this.setIdList = function(A, e) { + return this.enableStateChanged(), + this._filterImpl.setIdList(A, e) + } + , + this.clearAllOverrideList = function() { + l("OverrideIdsFA"), + l("OverrideConditionFA"), + n.clearMaterial(); + for (var e = 0, t = A.length; t > e; e += 1) { + var i = A[e]; + "WireframeIdsFA" === i.getClassName() && i.applyFilter(n) + } + this.enableStateChanged() + } + , + this.clearModelAllOverrideList = function() { + c("OverrideIdsFA"), + r.clearMaterial(), + this.enableStateChanged() + } + , + this.clearOverrideList = function(A) { + return this.enableStateChanged(), + this._filterImpl.clearOverrideList(A) + } + , + this.addToOverrideList = function(A, e, t) { + return this.enableStateChanged(), + this._filterImpl.addToOverrideList(A, e, t) + } + , + this.removeFromOverrideList = function(A, e) { + return this.enableStateChanged(), + this._filterImpl.removeFromOverrideList(A, e) + } + , + this.setOverrideList = function(A, e, t) { + return this.enableStateChanged(), + this._filterImpl.setOverrideList(A, e, t) + } + , + this.addToOverrideListByColor = function(A, e) { + var t = null; + if (e) { + var i = this._filterImpl.getMaterialNameByColor(e); + t = this._filterImpl.getMaterialByName(i) + } + var o = new qg(!0,t); + o.ids = A, + this.pushBack(o) + } + , + this.addToOverrideListByCustomerMaterial = function(A, e, t, i, o) { + var n = this + , r = {}; + Array.isArray(t) || (t = [t]); + var a = t; + return e.forEach((function(e) { + for (var s in e) + i || (a = h(t, s)), + e[s][0].isBatched || e[s][0].instanceOrNot || e[s][0].RenderTypeChange ? !e[s][0].instanceOrNot && e[s][0].isBatched || e[s][0].RenderTypeChange ? g(n, A, e[s], s, a, r, o) : e[s][0].instanceOrNot && e[s][0].isBatched && (u(A, e[s][0].model.modelKey, s), + g(n, A, e[s], s, a, r, o)) : p(n, A, e[s], s, a, r, o) + } + )), + r + } + , + this.addToModelOverrideListByColor = function(A, e) { + var t = null; + if (e) { + var i = this._filterImpl.getMaterialNameByColor(e); + t = this._filterImpl.getMaterialByName(i) + } + var o = new qg(!0,t); + o.ids = A, + this.pushModelBack(o) + } + , + this.addToOverrideListByConditions = function(A, e) { + var t = null; + if (e) { + var i = this._filterImpl.getMaterialNameByColor(e); + t = this._filterImpl.getMaterialByName(i) + } + var o = new zg(!0,t); + o.conditions = A, + this.pushBack(o) + } + , + this.addToOverrideListByConditions = function(A, e) { + var t = null; + if (e) { + var i = this._filterImpl.getMaterialNameByColor(e); + t = this._filterImpl.getMaterialByName(i) + } + var o = new zg(!0,t); + o.conditions = A, + this.pushBack(o) + } + , + this.addToOverrideListByMaterial = function(A, e) { + this._filterImpl.addOverrideMaterial(e); + var t = new zg(!0,e); + t.conditions = A, + this.pushBack(t) + } + , + this.setOverrideListByColor = function(A, e, t) { + for (var i = 0; e.length > i; i += 1) { + var o = this._filterImpl.getMaterialNameByColor(t) + , r = this._filterImpl.getMaterialByName(o); + n.setMaterial(e[i], r) + } + } + , + this.getVisibleComponentSet = function(A) { + for (var e = {}, t = Object.keys(A), i = 0; t.length > i; i += 1) + this._isVisible({ + userId: t[i] + }) && (e[t[i]] = !0); + return e + } + , + this.clearAllWireframeList = function() { + n.clearMaterialByKey(l("WireframeIdsFA")), + this.enableStateChanged() + } + , + this.addToWireframeByWireframe = function(A, e) { + var t = null; + if (e) { + var i = this._filterImpl.getMaterialNameByWireframe(e); + t = this._filterImpl.getMaterialByName(i) + } + var o = new jg(!0,t); + o.ids = A, + this.pushBack(o) + } + , + this.clearAllUserList = function() { + return this.enableStateChanged(), + this._filterImpl.clearAllUserList() + } + , + this.clearUserListByType = function(A) { + return this.enableStateChanged(), + this._filterImpl.clearUserListByType(A) + } + , + this.clearUserList = function(A, e) { + return this.enableStateChanged(), + this._filterImpl.clearUserList(A, e) + } + , + this.addToUserList = function(A, e, t, i) { + return this.enableStateChanged(), + this._filterImpl.addToUserList(A, e, t, i) + } + , + this.removeFromUserList = function(A, e, t) { + this.enableStateChanged(), + this._filterImpl.removeFromUserList(A, e, t) + } + , + this.setUserList = function(A, e, t, i) { + this.enableStateChanged(), + this._filterImpl.setUserList(A, e, t, i) + } + , + this.isIsolate = function() { + var A = n.getObjectsMap(); + for (var e in A) { + if (A.hasOwnProperty(e)) + var t = A[e]; + for (var i in t) { + var o = n.isIsolateHide(i); + if (o |= n.isIsolateTransparent(i)) + return !0 + } + } + return !1 + } + , + this.isFiltering = function() { + var A = this.filterActionList.length > 0; + return this.isIsolate() || A + } + , + this.getFrozonMaterial = function() { + return this._filterImpl.getFrozonMaterial() + } + , + this.setIsolateMaterial = function(A) { + this.enableStateChanged(), + this._filterImpl.setIsolateMaterial(A) + } + , + this.getIsolateMaterial = function() { + return this._filterImpl.getIsolateMaterial() + } + , + this.resetIsolateMaterial = function() { + this.enableStateChanged(), + this._filterImpl.resetIsolateMaterial() + } + , + this.clearAllIsolateList = function() { + n.clearIsolates() + } + , + this.clearIsolation = function() { + n.clearIsolates(), + t = null, + s = !0 + } + , + this.clearModelIsolation = function() { + r.clearIsolates(), + i = null, + s = !0 + } + , + this.addToIsolateList = function(A, e) { + var t = new Hg("HideOthers" === e); + t.ids = A.concat(), + this.pushBack(t), + this.clearFilterActionList() + } + , + this.removeFromIsolateList = function(A) { + t && Array.isArray(A) && (A.forEach((function(A) { + t.ids.remove(A) + } + )), + 1 > t.ids.length ? (n.clearIsolates(), + t = null) : t.applyFilter(n), + this.enableStateChanged()) + } + , + this.removeModelFromIsolateList = function(A) { + i && Array.isArray(A) && (A.forEach((function(A) { + i.ids.remove(A) + } + )), + 1 > i.ids.length ? (r.clearIsolates(), + i = null) : i.applyFilter(r), + this.enableStateChanged()) + } + , + this.setIsolateList = function(A, e) { + var t = new Hg(e); + t.ids = A.concat(), + this.pushBack(t) + } + , + this.setModelIsolateList = function(A, e) { + var t = new Hg(e); + t.ids = A.concat(), + this.pushModelBack(t) + } + , + this.setIsolateConditions = function(A, e) { + var t = new Xg(e === Nc.HIDDEN_OTHERS); + t.conditions = A, + this.pushBack(t), + this.clearFilterActionList() + } + , + this.getIsolateConditions = function(A) { + return this._filterImpl.getIsolateConditions(A) + } + , + this.clearIsolateConditions = function(A) { + this.enableStateChanged(), + this._filterImpl.clearIsolateConditions(A) + } + , + this.clearAllIsolateConditions = function() { + this.enableStateChanged(), + this._filterImpl.clearAllIsolateConditions() + } + , + this.setConditions = function(A, e) { + if (0 === A) { + n.hideAll(); + var t = new Jg(!0,!0); + t.conditions = e, + this.pushBack(t) + } + 3 === A && this._filterImpl.setConditions(A, e) + } + , + this.getConditions = function(A) { + return this._filterImpl.getConditions(A) + } + , + this.clearConditions = function(A) { + this.enableStateChanged(), + this._filterImpl.clearConditions(A) + } + , + this.clearAllConditions = function() { + this.enableStateChanged(), + this._filterImpl.clearAllConditions() + } + , + this.makeSceneTranslucent = function() { + this.enableStateChanged(), + this._filterImpl.makeSceneTranslucent() + } + , + this.cancelSceneTranslucent = function() { + this.enableStateChanged(), + this._filterImpl.cancelSceneTranslucent() + } + , + this.hideScene = function() { + this.enableStateChanged(), + this._filterImpl.hideScene() + } + , + this.showScene = function() { + this.enableStateChanged(), + this._filterImpl.showScene() + } + , + this.setSceneState = function(A) { + this.enableStateChanged(), + this._filterImpl.setSceneState(A) + } + , + this.getSceneState = function() { + return this._filterImpl.getSceneState() + } + , + this.cancelHidden = function() { + this.enableStateChanged(), + this._filterImpl.cancelHidden() + } + , + this.cancelTranslucent = function() { + this.enableStateChanged(), + this._filterImpl.cancelTranslucent() + } + , + this.hideByIds = function(A) { + var e = new Pg(!0,!1); + e.ids = A, + this.pushBack(e) + } + , + this.hideModelByIds = function(A) { + var e = new Pg(!0,!1); + e.ids = A, + this.pushModelBack(e) + } + , + this.hideByConditions = function(A) { + var e = new Jg(!0,!1); + e.conditions = A, + this.pushBack(e) + } + , + this.hideOthersByConditions = function(A) { + var e = new Jg(!1,!1); + e.conditions = A, + this.pushBack(e) + } + , + this.showByIds = function(A) { + var e = new Pg(!0,!0); + e.ids = A, + this.pushBack(e) + } + , + this.showModelByIds = function(A) { + var e = new Pg(!0,!0); + e.ids = A, + this.pushModelBack(e) + } + , + this.showByConditions = function(A) { + var e = new Jg(!0,!0); + e.conditions = A, + this.pushBack(e) + } + , + this.makeTranslucentByIds = function(A) { + var e = new Yg(!0,!1); + e.ids = A, + this.pushBack(e) + } + , + this.makeModelTranslucentByIds = function(A) { + var e = new Yg(!0,!1); + e.ids = A, + this.pushModelBack(e) + } + , + this.makeTranslucentByConditions = function(A) { + var e = new Zg(!0,!1); + e.conditions = A, + this.pushBack(e) + } + , + this.opaqueByIds = function(A) { + var e = new Yg(!0,!0); + e.ids = A, + this.pushBack(e) + } + , + this.opaqueModelByIds = function(A) { + var e = new Yg(!0,!0); + e.ids = A, + this.pushModelBack(e) + } + , + this.opaqueByConditions = function(A) { + var e = new Zg(!0,!0); + e.conditions = A, + this.pushBack(e) + } + , + this.setFrozonMaterial = function(A) { + this._filterImpl.setFrozonMaterial(A) + } + , + this.makeTranslucentOthersByIds = function(A) { + var e = new Yg(!1,!1); + e.ids = A, + this.pushBack(e) + } + , + this.makeTranslucentOthersModelByIds = function(A) { + var e = new Yg(!1,!1); + e.ids = A, + this.pushModelBack(e) + } + , + this.opaqueAll = function() { + l("TransparentIdsFA"), + l("TransparentConditionFA"), + n.clearTransparent(), + this.enableStateChanged() + } + , + this.opaqueAllModel = function() { + c("TransparentIdsFA"), + c("TransparentConditionFA"), + r.clearTransparent(), + this.enableStateChanged() + } + , + this.deactivateByIds = function(A) { + n.deactivateByIds(A), + this.observerForSceneState && this.observerForSceneState(A), + this.enableStateChanged() + } + , + this.activateByIds = function(A) { + n.activateByIds(A), + this.enableStateChanged() + } + , + this.clearInactivatedIdMap = function() { + n.clearInactivatedIdMap() + } + , + this.getInactivatedIdMap = function() { + return n.getInactivatedIdMap() + } + , + this.deactivateAll = function() { + n.deactivateAll() + } + , + this.activateAll = function() { + n.activateAll() + } + , + this.isComponentActive = function(A) { + return n.isActive(A) + } + , + this.getFilterType = function() { + return this._filterImpl._getFilterType() + } + , + this._hasOverrideMaterialForWireFrame = function(A) { + return n.hasOverrideMaterialForWireFrame(A.name) + } + , + this._hasOverrideMaterialFilterForWireFrame = function() { + return n.hasOverrideMaterialForWireFrame() + } + , + this._getOverrideMaterialForWireFrame = function(A) { + return n.getWireFrameMaterial(A.name) + } + , + this._getOverrideWireFrameMaterial = function(A) { + return n.getWireFrameMaterial(A.name) + } + , + this.addToOverrideListForWireFrameByColor = function(A, e) { + var t = null; + if (e) { + var i = this._filterImpl.getMaterialNameByColor(e); + t = this._filterImpl.getMaterialByName(i) + } + var o = new yu(!0,t); + o.ids = A, + this.pushBack(o) + } + , + this.addToOverrideListForWireFrameByConditions = function(A, e) { + var t = null; + if (e) { + var i = this._filterImpl.getMaterialNameByColor(e); + t = this._filterImpl.getMaterialByName(i) + } + var o = new Cu(!0,t); + o.conditions = A, + this.pushBack(o) + } + , + this._getFilterObjectsKeys = function(A) { + return this._filterImpl._getFilterObjectsKeys(A) + } + , + this.transparentComponentsByKey = function(A, e, t) {} + , + this.closeOrigMatModelTransparent = function(A, e) { + var t = A.models[e].materialManager.materials; + for (var i in t) { + var o = t[i]; + void 0 !== o._origTransparent && (o.transparent = o._origTransparent, + o.needsUpdate = !0), + void 0 !== o._origOpacity && (o.opacity = o._origOpacity, + o.needsUpdate = !0) + } + var n = A.models[e].materialManager.instanceMaterials; + for (var r in n) + n[r].forEach((function(A) { + void 0 !== A._origTransparent && (A.transparent = A._origTransparent, + A.needsUpdate = !0), + void 0 !== A._origOpacity && (A.opacity = A._origOpacity, + A.needsUpdate = !0) + } + )) + } + , + this.transparentModelOrigMatByKey = function(A, e) { + var t = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : .5 + , i = A.models[e].materialManager.materials; + for (var o in i) { + var n = i[o]; + void 0 === n._origTransparent && (n._origTransparent = n.transparent), + void 0 === n._origOpacity && (n._origOpacity = n.opacity), + n.transparent = !0, + n.opacity = t, + n.needsUpdate = !0 + } + var r = A.models[e].materialManager.instanceMaterials; + for (var a in r) + r[a].forEach((function(A) { + void 0 === A._origTransparent && (A._origTransparent = A.transparent), + void 0 === A._origOpacity && (A._origOpacity = A.opacity), + A.transparent = !0, + A.opacity = t, + A.needsUpdate = !0 + } + )) + } + }; + var Su = function(A) { + ji.call(this), + this.type = "InstancedDepthMaterial", + this.uniforms = it.depth.uniforms, + this.vertexShader = function(A) { + return A.replace("#include ", "\n vec4 mvPosition = modelViewMatrix * vec4(getInstancePosition(transformed), 1.0);\n gl_Position = projectionMatrix * mvPosition;\n ") + }(it.depth.vertexShader.replace("void main() {", "\n attribute float vState; \n attribute vec4 aColor; \n attribute vec3 mcol0;\n attribute vec3 mcol1;\n attribute vec3 mcol2;\n attribute vec3 mcol3;\n #if defined(USE_MAP)\n attribute vec2 muvCol0;\n attribute vec2 muvCol1;\n attribute vec2 muvCol2;\n #endif\n \n varying float vfState;\n \n vec3 getInstancePosition(vec3 position) {\n return vec3(mat4(vec4(mcol0, 0.0),\n vec4(mcol1, 0.0),\n vec4(mcol2, 0.0),\n vec4(mcol3, 1.0)) * vec4(position, 1.0));\n }\n \n void main() {\n vfState = vState;\n ")), + this.fragmentShader = it.depth.fragmentShader.replace("void main() {", "\n varying float vfState; \n void main() {\n if (vfState <= -0.99 && vfState >= -1.01) discard;\n \n "), + void 0 !== A && this.setValues(A) + }; + function wu(A, e, t) { + var i = this + , o = !1 + , n = 0 + , r = 0 + , a = void 0 + , s = []; + this.onStart = void 0, + this.onLoad = A, + this.onProgress = e, + this.onError = t, + this.itemStart = function(A) { + r += 1, + !1 === o && void 0 !== i.onStart && i.onStart(A, n, r), + o = !0 + } + , + this.itemEnd = function(A) { + n += 1, + void 0 !== i.onProgress && i.onProgress(A, n, r), + n === r && (o = !1, + void 0 !== i.onLoad && i.onLoad()) + } + , + this.itemError = function(A) { + void 0 !== i.onError && i.onError(A) + } + , + this.resolveURL = function(A) { + return a ? a(A) : A + } + , + this.setURLModifier = function(A) { + return a = A, + this + } + , + this.addHandler = function(A, e) { + return s.push(A, e), + this + } + , + this.removeHandler = function(A) { + var e = s.indexOf(A); + return -1 !== e && s.splice(e, 2), + this + } + , + this.getHandler = function(A) { + for (var e = 0, t = s.length; t > e; e += 2) { + var i = s[e] + , o = s[e + 1]; + if (i.global && (i.lastIndex = 0), + i.test(A)) + return o + } + return null + } + } + (Su.prototype = Object.create(ji.prototype)).constructor = Su; + var Mu = new wu + , bu = function(A) { + this.manager = null != A ? A : Mu, + this.model = A.model, + this.cacheViable = !0, + this.modelKey = A.model.modelKey + }; + Object.assign(bu.prototype, { + _load: function(A, e, t, i) { + void 0 === A && (A = ""), + null != this.path && (A = this.path + A); + var o = this + , n = A.match(/^data:(.*?)(;base64)?,(.*)$/); + if (n) { + var r = n[1] + , a = Boolean(n[2]) + , s = n[3]; + s = window.decodeURIComponent(s), + a && (s = window.atob(s)); + try { + var l = null + , c = (this.responseType || "").toLowerCase(); + switch (c) { + case "arraybuffer": + case "blob": + l = new ArrayBuffer(s.length); + for (var h = new Uint8Array(l), d = 0; s.length > d; d += 1) + h[d] = s.charCodeAt(d); + "blob" === c && (l = new Blob([l],{ + type: r + })); + break; + case "document": + var p = new DOMParser; + l = p.parseFromString(s, r); + break; + case "json": + l = JSON.parse(s); + break; + default: + l = s + } + window.setTimeout((function() { + e && e(l), + o.manager.itemEnd(A) + } + ), 0) + } catch (e) { + window.setTimeout((function() { + i && i(e), + o.manager.itemEnd(A), + o.manager.itemError(A) + } + ), 0) + } + } else { + var g = new XMLHttpRequest; + for (var u in g.open("GET", A, !0), + g.addEventListener("load", (function(t) { + var n = t.target.response; + if (200 === this.status) { + var r = o.model.getStorage(); + if (null == n) + return i && i(t), + o.manager.itemEnd(A), + o.manager.itemError(A), + void Bh.error("response 为 null"); + if (!(n instanceof ArrayBuffer || n instanceof Array || n instanceof Blob || n instanceof Object)) + try { + n = JSON.parse(n) + } catch (A) {} + if (n instanceof Blob && mh.isIOSDevice()) { + var a = new FileReader; + a.readAsDataURL(n), + a.onloadend = function(t) { + r && o.cacheViable && r.put(A, t.target.result, o.modelKey, (function() { + o.manager.progress.loaded += 1 + } + ), (function() { + Bh.warn(A, "缓存失败"), + o.manager.progress.failed += 1 + } + )), + e && e(t.target.result) + } + } else { + if (r && o.cacheViable) + if (n.byteLength && n.byteLength > 12e7) { + for (var s = [], l = Math.floor(n.byteLength / 4e7), c = 0; l >= c; c += 1) { + o.manager.progress.total += 1; + var h = null; + h = c === l ? n.slice(4e7 * c) : n.slice(4e7 * c, 4e7 * (c + 1)); + var d = A + "_" + c; + s.push(d), + r.put(d, h, o.modelKey, (function() { + o.manager.progress.loaded += 1 + } + ), (function() { + o.manager.progress.failed += 1 + } + )) + } + r.put(A, { + split: !0, + list: s, + length: n.byteLength + }, o.modelKey, (function() {} + ), (function() { + Bh.warn(A, "缓存失败") + } + )) + } else + r.put(A, n, o.modelKey, (function() { + o.manager.progress && (o.manager.progress.loaded += 1) + } + ), (function() { + o.manager.progress && (Bh.warn(A, "缓存失败"), + o.manager.progress.failed += 1) + } + )); + e && e(n) + } + o.manager.itemEnd(A) + } else + 0 === this.status ? (Bh.warn("THREE.FileLoader: HTTP Status 0 received."), + e && e(n), + o.manager.itemEnd(A)) : (i && i(t), + o.manager.itemEnd(A), + o.manager.itemError(A)) + } + ), !1), + "function" == typeof t && g.addEventListener("progress", (function(A) { + t(A) + } + ), !1), + g.addEventListener("error", (function(e) { + i && i(e), + o.manager.itemEnd(A), + o.manager.itemError(A) + } + ), !1), + void 0 !== this.responseType && (g.responseType = this.responseType), + void 0 !== this.withCredentials && (g.withCredentials = this.withCredentials), + g.overrideMimeType && g.overrideMimeType(void 0 !== this.mimeType ? this.mimeType : "text/plain"), + this.requestHeader) + g.setRequestHeader(u, this.requestHeader[u]); + g.send(null) + } + return o.manager.itemStart(A), + g + }, + load: function(A, e, t, i) { + void 0 === A && (A = ""), + null != this.path && (A = this.path + A); + return this._load.call(this, A, e, t, i) + }, + setPath: function(A) { + return this.path = A, + this + }, + setResponseType: function(A) { + return this.responseType = A, + this + }, + setWithCredentials: function(A) { + return this.withCredentials = A, + this + }, + setMimeType: function(A) { + return this.mimeType = A, + this + }, + setCacheViable: function(A) { + return this.cacheViable = A, + this + }, + setRequestHeader: function(A) { + return this.requestHeader = A, + this + } + }); + var Uu = function(A) { + this.compArr = [], + this.compArr = A, + Bh.debug(this.compArr) + }; + Uu.prototype = { + constructor: Uu, + getComponent: function(A) {} + }; + var Fu, Ku, Qu, Ru, Tu = { + EmptyGeometry: new he, + UnitCylinderInstance: new hr(1,1,1,8,1,!1), + UnitBoxInstance: new Ne(1,1,1), + UnitTextureCylinder: null, + UnitTextureBox: null, + initializeUnitInstances: function() { + Tu.UnitCylinderInstance.boundingBox || Tu.UnitCylinderInstance.computeBoundingBox(), + Tu.UnitBoxInstance.boundingBox || Tu.UnitBoxInstance.computeBoundingBox() + }, + destroyUnitInstances: function() { + Tu.UnitCylinderInstance.dispose(), + Tu.UnitBoxInstance.dispose() + }, + getBoxData: function(A) { + for (var e = [[], [], [], [], [], []], t = 0; 4 > t; t += 1) + e[0].push(-1, 0, 0); + for (t = 0; 4 > t; t += 1) + e[1].push(0, -1, 0); + for (t = 0; 4 > t; t += 1) + e[2].push(0, 0, -1); + for (t = 0; 4 > t; t += 1) + e[3].push(0, 0, 1); + for (t = 0; 4 > t; t += 1) + e[4].push(0, 1, 0); + for (t = 0; 4 > t; t += 1) + e[5].push(1, 0, 0); + var i = [[], [], [], [], [], []]; + return i[0] = i[2] = i[4] = [-.5, -.5, -.5, .5, .5, -.5, .5, .5], + i[1] = i[3] = i[5] = [-.5, -.5, -.5, .5, .5, -.5, .5, .5], + { + vertex: [[-.5, -.5, -.5, -.5, -.5, .5, -.5, .5, -.5, -.5, .5, .5], [-.5, -.5, -.5, -.5, -.5, .5, .5, -.5, -.5, .5, -.5, .5], [-.5, -.5, -.5, -.5, .5, -.5, .5, -.5, -.5, .5, .5, -.5], [-.5, -.5, .5, -.5, .5, .5, .5, -.5, .5, .5, .5, .5], [-.5, .5, -.5, -.5, .5, .5, .5, .5, -.5, .5, .5, .5], [.5, -.5, -.5, .5, -.5, .5, .5, .5, -.5, .5, .5, .5]][A], + normal: e[A], + uv: i[A], + index: [[0, 1, 2, 3, 2, 1], [2, 1, 0, 1, 2, 3], [0, 1, 2, 3, 2, 1], [2, 1, 0, 1, 2, 3], [0, 1, 2, 3, 2, 1], [2, 1, 0, 1, 2, 3]][A] + } + }, + getPipeData2: (Fu = [.5, 0, .5, .353530875, .353530875, .5, 0, .5, .5, -.353530875, .353530875, .5, -.5, 0, .5, -.353530875, -.353530875, .5, 0, -.5, .5, .353530875, -.353530875, .5, .5, 0, .5, .5, 0, -.5, .353530875, .353530875, -.5, 0, .5, -.5, -.353530875, .353530875, -.5, -.5, 0, -.5, -.353530875, -.353530875, -.5, 0, -.5, -.5, .353530875, -.353530875, -.5, .5, 0, -.5, .5, 0, .5, .353530875, .353530875, .5, 0, .5, .5, -.353530875, .353530875, .5, -.5, 0, .5, -.353530875, -.353530875, .5, 0, -.5, .5, .353530875, -.353530875, .5, .5, 0, -.5, .353530875, .353530875, -.5, 0, .5, -.5, -.353530875, .353530875, -.5, -.5, 0, -.5, -.353530875, -.353530875, -.5, 0, -.5, -.5, .353530875, -.353530875, -.5], + Ku = [0, 9, 1, 1, 9, 10, 1, 10, 2, 2, 10, 11, 2, 11, 3, 3, 11, 12, 3, 12, 4, 4, 12, 13, 4, 13, 5, 5, 13, 14, 5, 14, 6, 6, 14, 15, 6, 15, 7, 7, 15, 16, 7, 16, 8, 8, 16, 17, 18, 19, 20, 18, 20, 21, 18, 21, 22, 18, 22, 23, 18, 23, 24, 18, 24, 25, 26, 28, 27, 26, 29, 28, 26, 30, 29, 26, 31, 30, 26, 32, 31, 26, 33, 32], + Qu = [1, 0, 0, .7, .7, 0, 0, 1, 0, -.7, .7, 0, -1, 0, 0, -.7, -.7, 0, 0, -1, 0, .7, -.7, 0, 1, 0, 0, 1, 0, 0, .7, .7, 0, 0, 1, 0, -.7, .7, 0, -1, 0, 0, -.7, -.7, 0, 0, -1, 0, .7, -.7, 0, 1, 0, 0, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1], + Ru = [-.5, .5, -.375, .5, -.25, .5, -.125, .5, 0, .5, .125, .5, .25, .5, .375, .5, .5, .5, -.5, -.5, -.375, -.5, -.25, -.5, -.125, -.5, 0, -.5, .125, -.5, .25, -.5, .375, -.5, .5, -.5, .5, 0, .353530875, .353530875, 0, .5, -.353530875, .353530875, -.5, 0, -.353530875, -.353530875, 0, -.5, .353530875, -.353530875, .5, 0, .353530875, .353530875, 0, .5, -.353530875, .353530875, -.5, 0, -.353530875, -.353530875, 0, -.5, .353530875, -.353530875], + function() { + return { + vertex: Fu, + normal: Qu, + uv: Ru, + index: Ku + } + } + ), + getPipeData: function(A) { + (void 0 === A || 8 > A) && (A = 8), + A > 256 && (A = 256); + var e = 4 * A + 2 + , t = 3 * (4 * A - 4) + , i = A + 1 + , o = 1 / A + , n = 6.28318530714 / A + , r = null + , a = null + , s = []; + for (r = 0; A > r; r += 1) + s.push(.5 * Math.cos(r * n)), + s.push(.5 * Math.sin(r * n)); + s.push(.5), + s.push(0); + var l = []; + for (a = 2 * i, + r = 0; a > r; r += 2) + l.push(s[r]), + l.push(s[r + 1]), + l.push(.5); + for (r = 0; a > r; r += 2) + l.push(s[r]), + l.push(s[r + 1]), + l.push(-.5); + for (a = 2 * A, + r = 0; a > r; r += 2) + l.push(s[r]), + l.push(s[r + 1]), + l.push(.5); + for (r = a; r > 0; r -= 2) + l.push(s[r]), + l.push(s[r + 1]), + l.push(-.5); + var c = [] + , h = A + 1; + for (r = 0; A > r; r += 1) + c.push(r), + c.push(r + h), + c.push(r + 1), + c.push(r + 1), + c.push(r + h), + c.push(r + h + 1); + var d = 2 * i; + for (r = 1; A - 1 > r; r += 1) + c.push(d), + c.push(d + r), + c.push(d + r + 1); + for (d += A, + r = 1; A - 1 > r; r += 1) + c.push(d), + c.push(d + r), + c.push(d + r + 1); + var p = []; + for (r = A; r >= 0; r -= 1) + p.push(r * o - .5), + p.push(-.5); + for (r = A; r >= 0; r -= 1) + p.push(r * o - .5), + p.push(.5); + for (a = 2 * A, + r = 0; a > r; r += 2) + p.push(s[r]), + p.push(s[r + 1]); + for (r = a; r > 0; r -= 2) + p.push(s[r]), + p.push(s[r + 1]); + a = 3 * e; + var g = []; + for (r = 0; a > r; r += 1) + g.push(0); + var u = null + , f = null + , m = null + , C = new y + , v = new y + , I = new y + , E = new y + , B = new y; + for (r = 0; t > r; r += 3) + f = 3 * c[r + 1], + m = 3 * c[r + 2], + C.fromArray(l, u = 3 * c[r]), + v.fromArray(l, f), + I.fromArray(l, m), + E.subVectors(I, v), + B.subVectors(C, v), + E.cross(B), + g[u] += E.x, + g[u + 1] += E.y, + g[u + 2] += E.z, + g[f] += E.x, + g[f + 1] += E.y, + g[f + 2] += E.z, + g[m] += E.x, + g[m + 1] += E.y, + g[m + 2] += E.z; + var x = new y; + for (a = 3 * e, + r = 0; a > r; r += 3) + x.fromArray(g, r), + x.normalize(), + g[r] = x.x, + g[r + 1] = x.y, + g[r + 2] = x.z; + return { + vertex: l, + normal: g, + uv: p, + index: c, + edges: A + } + }, + getInstancePipeData: function(A, e) { + var t = this.getPipeData(A); + (void 0 === A || 8 > A) && (A = 8), + A > 256 && (A = 256); + var i = 2 * (A + 1) + , o = i + A + , n = 4 * A + 2 + , r = [[], [], []]; + r[0] = t.vertex.slice(0, 3 * i), + r[1] = t.vertex.slice(3 * i, 3 * o), + r[2] = t.vertex.slice(3 * o, 3 * n); + var a = [[], [], []] + , s = A + 1 + , l = 0; + for (l = 0; A > l; l += 1) + a[0].push(l), + a[0].push(l + s), + a[0].push(l + 1), + a[0].push(l + 1), + a[0].push(l + s), + a[0].push(l + s + 1); + for (l = 1; A - 1 > l; l += 1) + a[1].push(0), + a[1].push(l), + a[1].push(l + 1); + for (l = 1; A - 1 > l; l += 1) + a[2].push(0), + a[2].push(l), + a[2].push(l + 1); + var c = [[], [], []]; + c[0] = t.uv.slice(0, 2 * i), + c[1] = t.uv.slice(2 * i, 2 * o), + c[2] = t.uv.slice(2 * o, 2 * n); + var h = [[], [], []]; + return h[0] = t.normal.slice(0, 3 * i), + h[1] = t.normal.slice(3 * i, 3 * o), + h[2] = t.normal.slice(3 * o, 3 * n), + { + vertex: r[e], + normal: h[e], + uv: c[e], + index: a[e] + } + }, + getUnitTextureCylinder: function() { + if (null === Tu.UnitTextureCylinder) { + Tu.UnitTextureCylinder = new Array(3); + for (var A = 0; 3 > A; A += 1) { + var e = Tu.getInstancePipeData(32, A); + Tu.UnitTextureCylinder[A] = new he, + Tu.UnitTextureCylinder[A].setIndex(e.index), + Tu.UnitTextureCylinder[A].addAttribute("position", new Ae(e.vertex,3)), + Tu.UnitTextureCylinder[A].addAttribute("normal", new Ae(e.normal,3)), + Tu.UnitTextureCylinder[A].addAttribute("uv", new Ae(e.uv,2)) + } + } + return Tu.UnitTextureCylinder + }, + getUnitTextureBox: function() { + if (null === Tu.UnitTextureBox) { + Tu.UnitTextureBox = new Array(6); + for (var A = 0; 6 > A; A += 1) { + var e = Tu.getBoxData(A); + Tu.UnitTextureBox[A] = new he, + Tu.UnitTextureBox[A].setIndex(e.index), + Tu.UnitTextureBox[A].addAttribute("position", new Ae(e.vertex,3)), + Tu.UnitTextureBox[A].addAttribute("normal", new Ae(e.normal,3)), + Tu.UnitTextureBox[A].addAttribute("uv", new Ae(e.uv,2)) + } + } + return Tu.UnitTextureBox + }, + getBoxBufferGeometryWithUvMatrices: function(A) { + for (var e = [], t = null, i = new l, o = new y, n = !!A, r = 0; 6 > r; r += 1) { + t = new he; + var a = Tu.getBoxData(r); + if (n) { + var s = []; + i.set(A[6 * r], A[6 * r + 2], A[6 * r + 4], A[6 * r + 1], A[6 * r + 3], A[6 * r + 5], 0, 0, 1); + for (var c = 0, h = a.uv.length; h > c; c += 2) + o.set(a.uv[c], a.uv[c + 1], 1), + o.applyMatrix3(i), + s.push(o.x), + s.push(o.y); + t.addAttribute("uv", new Ae(s,2)) + } + t.setIndex(new YA(Uint32Array.from(a.index),1)), + t.addAttribute("position", new Ae(a.vertex,3)), + t.addAttribute("normal", new Ae(a.normal,3)), + e.push(t) + } + return Tu.mergeBufferGeometries2(e) + }, + getPipeBufferGeometryWithUvMatrices: function(A) { + var e = Tu.getPipeData(32) + , t = e.edges + , i = !(!A || 18 !== A.length) + , o = new he; + if (i) { + for (var n = [], r = 0, a = A.length; a > r; r += 6) { + var s = new l; + s.set(A[6 * r], A[6 * r + 2], A[6 * r + 4], A[6 * r + 1], A[6 * r + 3], A[6 * r + 5], 0, 0, 1), + n.push(s) + } + for (var c = [], h = new y, d = 4 * (t + 1), p = d + 2 * t, g = 0, u = e.uv.length; u > g; g += 2) + h.set(e.uv[g], e.uv[g + 1], 1), + h.applyMatrix3(d > g ? n[0] : p > g ? n[1] : n[2]), + c.push(h.x), + c.push(h.y); + o.addAttribute("uv", new Ae(c,2)) + } + return o.setIndex(new $A(e.index,1)), + o.addAttribute("position", new Ae(e.vertex,3)), + o.addAttribute("normal", new Ae(e.normal,3)), + o + }, + getGeometryFromBox3: function(A) { + var e = new he + , t = [] + , i = [] + , o = A.min + , n = A.max + , r = o.x + , a = o.y + , s = o.z + , l = n.x + , c = n.y + , h = n.z; + return t.push(r, a, s), + t.push(l, a, s), + t.push(r, a, h), + t.push(l, a, h), + t.push(r, c, s), + t.push(l, c, s), + t.push(r, c, h), + t.push(l, c, h), + i.push(0, 1, 3), + i.push(0, 3, 2), + i.push(1, 5, 7), + i.push(1, 7, 3), + i.push(5, 4, 6), + i.push(5, 6, 7), + i.push(4, 2, 6), + i.push(4, 0, 2), + i.push(0, 4, 5), + i.push(0, 5, 1), + i.push(2, 3, 7), + i.push(2, 7, 6), + e.setIndex(new YA(new Uint32Array(i),1)), + e.setAttribute("position", new YA(new Float32Array(t),3)), + e + }, + getWorldMatrixOfMesh: function(A) { + for (var e = [], t = A.parent; t; ) + e.push(t.matrix), + t = t.parent; + var i = new M; + if (e.length > 0) { + i = e[e.length - 1]; + for (var o = e.length - 2; o >= 0; o -= 1) + i.multiply(e[o]) + } + var n = new M; + return n.multiplyMatrices(i, A.matrix), + n + }, + getWorldPositionOfMesh: function(A, e) { + e || (e = new M); + var t = new M; + t.getInverse(e); + var i = A.clone(); + return i.applyMatrix4(t), + i + }, + getBoundingBoxWorldOfMesh: function(A, e) { + var t = A.boundingBox; + t || (A.geometry.boundingBox || A.geometry.computeBoundingBox(), + t = A.geometry.boundingBox); + var i = t.clone(); + i.applyMatrix4(A.matrixWorld); + var o = new M; + return o.getInverse(e), + i.applyMatrix4(o), + i + }, + getBoundingBoxByBuffer: function(A) { + for (var e = 1 / 0, t = 1 / 0, i = 1 / 0, o = -1 / 0, n = -1 / 0, r = -1 / 0, a = new ph, s = 0, l = A.length; l > s; s += 3) { + var c = A[s] + , h = A[s + 1] + , d = A[s + 2]; + e > c && (e = c), + t > h && (t = h), + i > d && (i = d), + c > o && (o = c), + h > n && (n = h), + d > r && (r = d) + } + return a.min.set(e, t, i), + a.max.set(o, n, r), + a + }, + mergeBufferGeometriesFromMeshs: function(A, e) { + for (var t = null !== A[0].geometry.index, i = new Set(Object.keys(A[0].geometry.attributes)), o = new Set(Object.keys(A[0].geometry.morphAttributes)), n = {}, r = {}, a = new he, s = 0; A.length > s; s += 1) { + var l = A[s].geometry; + if (t !== (null !== l.index)) + return null; + for (var c in l.attributes) { + if (!i.has(c)) + return console.log("attributes not Used: ", c), + null; + void 0 === n[c] && (n[c] = []), + n[c].push(l.attributes[c]) + } + for (var c in l.morphAttributes) { + if (!o.has(c)) + return null; + void 0 === r[c] && (r[c] = []), + r[c].push(l.morphAttributes[c]) + } + null != l.userData && (a.userData = a.userData || {}, + a.userData.mergedUserData = a.userData.mergedUserData || [], + a.userData.mergedUserData.push(l.userData)) + } + if (t) { + var h = 0 + , d = [] + , p = 0 + , g = 0; + for (s = 0; A.length > s; s += 1) { + var u = A[s].geometry.index; + if (h > 0) { + u = u.clone(); + for (var f = 0; u.count > f; f += 1) + u.setX(f, u.getX(f) + h) + } + d.push(u), + h += A[s].geometry.attributes.position.count, + void 0 === e[A[s].userId] && (e[A[s].userId] = []), + e[A[s].userId].push({ + nodeId: A[s].nodeId, + indexStart: p, + indexCount: u.count, + positionStart: g, + positionCount: A[s].geometry.attributes.position.count + }), + g += A[s].geometry.attributes.position.count, + p += u.count + } + var m = this.mergeBufferAttributes(d); + if (!m) + return null; + a.index = m + } + for (var c in n) { + var C = this.mergeBufferAttributes(n[c]); + if (!C) + return null; + a.setAttribute(c, C) + } + for (var c in r) { + var y = r[c][0].length; + if (0 === y) + break; + a.morphAttributes = a.morphAttributes || {}, + a.morphAttributes[c] = []; + for (s = 0; y > s; s += 1) { + var v = []; + for (f = 0; r[c].length > f; f += 1) + v.push(r[c][f][s]); + var I = this.mergeBufferAttributes(v); + if (!I) + return null; + a.morphAttributes[c].push(I) + } + } + return a + }, + mergeBufferGeometries: function(A, e) { + for (var t = null !== A[0].index, i = new Set(Object.keys(A[0].attributes)), o = {}, n = new he, r = 0; A.length > r; r += 1) { + var a = A[r]; + if (t !== (null !== a.index)) + return null; + for (var s in a.attributes) { + if (!i.has(s)) + return null; + void 0 === o[s] && (o[s] = []), + o[s].push(a.attributes[s]) + } + } + if (t) { + var l = 0 + , c = []; + for (r = 0; A.length > r; r += 1) { + var h = A[r].index; + if (l > 0) { + h = h.clone(); + for (var d = 0; h.count > d; d += 1) + h.setX(d, h.getX(d) + l) + } + c.push(h), + l += A[r].attributes.position.count + } + var p = this.mergeBufferAttributes(c); + if (!p) + return null; + n.index = p + } + for (var s in o) { + var g = this.mergeBufferAttributes(o[s], e); + if (!g) + return null; + n.setAttribute(s, g) + } + return n + }, + reducedGeometry: function(A, e) { + for (var t = {}, i = 0, o = e.length; o > i; i += 1) { + var n = e[i]; + t[n] || (t[n] = []), + t[n].push(i) + } + var r = 0 + , a = new Float32Array(3 * Object.keys(t).length); + for (var s in t) { + for (var l = t[s], c = 0, h = l.length; h > c; c += 1) + e[l[c]] = r, + a[3 * r] = A[3 * s], + a[3 * r + 1] = A[3 * s + 1], + a[3 * r + 2] = A[3 * s + 2]; + r += 1 + } + return { + buffer: a, + index: e + } + }, + mergeBufferAttributes: function(A, e) { + for (var t = null, i = null, o = null, n = 0, r = 0; A.length > r; r += 1) { + var a = A[r]; + if (a.isInterleavedBufferAttribute) + return null; + if (null === t && (t = a.array.constructor), + t !== a.array.constructor) + return null; + if (null === i && (i = a.itemSize), + i !== a.itemSize) + return null; + if (null === o && (o = a.normalized), + o !== a.normalized) + return null; + n += a.array.length + } + for (var s = new t(n), c = 0, h = !1, d = 0; A.length > d; d += 1) { + if (e && !e[d].equals(Bc) && ("position" === A[d].name || "normal" === A[d].name)) { + if ("position" === A[d].name && e[d].applyToBufferAttribute(A[d]), + "normal" === A[d].name) + (new l).getNormalMatrix(e[d]).applyToBufferAttribute(A[d]); + h = !0 + } + if (s.set(A[d].array, c), + c += A[d].array.length, + h) { + var p = (new M).getInverse(e[d]); + if ("position" === A[d].name && p.applyToBufferAttribute(A[d]), + "normal" === A[d].name) + (new l).getNormalMatrix(p).applyToBufferAttribute(A[d]); + h = !1 + } + } + return new YA(s,i,o) + }, + applyMatrix3ToBuffer: function() { + var A = new y; + return function(e, t, i, o) { + if (e.equals(xc)) + return t; + for (var n = i || 0, r = o || t.length; r > n; n += 3) + A.x = t[n + 0], + A.y = t[n + 1], + A.z = t[n + 2], + A.applyMatrix3(e), + t[n + 0] = A.x, + t[n + 1] = A.y, + t[n + 2] = A.z; + return t + } + }(), + applyMatrix4ToBuffer: function() { + var A = new y; + return function(e, t, i, o) { + if (e.equals(Bc)) + return t; + for (var n = i || 0, r = o || t.length; r > n; n += 3) + A.x = t[n + 0], + A.y = t[n + 1], + A.z = t[n + 2], + A.applyMatrix4(e), + t[n + 0] = A.x, + t[n + 1] = A.y, + t[n + 2] = A.z; + return t + } + }(), + normalizeBuffer: function(A) { + for (var e = null, t = null, i = null, o = null, n = 0, r = A.length; r > n; n += 3) + e = A[n], + t = A[n + 1], + i = A[n + 2], + o = 1 / Math.sqrt(e * e + t * t + i * i), + A[n] = e * o, + A[n + 1] = t * o, + A[n + 2] = i * o + }, + disposeBufferFromGeometry: function(A, e) { + for (var t = 0, i = e.length; i > t; t += 1) { + var o = A.getAttribute(e[t]); + o && (o.array = null) + } + }, + disposeIndexBufferFromGeometry: function(A) { + A.index && (A.index.array = null) + }, + copyMeshProperties: function(A, e) { + A.name = e.name, + A.up.copy(e.up), + A.position.copy(e.position), + A.quaternion.copy(e.quaternion), + A.scale.copy(e.scale), + A.matrix.copy(e.matrix), + A.matrixWorld.copy(e.matrixWorld), + A.matrixAutoUpdate = e.matrixAutoUpdate, + A.matrixWorldNeedsUpdate = e.matrixWorldNeedsUpdate + }, + createBufferGeometryWithPosAndSkin: function(A) { + var e = new he; + if (A.isBufferGeometry || A._bufferGeometry) { + var t = A.isBufferGeometry ? A : A._bufferGeometry; + e.addAttribute("position", t.getAttribute("position")), + t.getAttribute("skinIndex") && e.addAttribute("skinIndex", t.getAttribute("skinIndex")), + t.getAttribute("skinWeight") && e.addAttribute("skinWeight", t.getAttribute("skinWeight")); + var i = t.getIndex(); + i && e.setIndex(i) + } else if (A.isGeometry) { + var o = new Ae(3 * A.vertices.length,3); + if (e.addAttribute("position", o.copyVector3sArray(A.vertices)), + A.skinIndices.length > 0) { + var n = new Ae(4 * A.skinIndices.length,4); + e.addAttribute("skinIndex", n.copyVector4sArray(A.skinIndices)) + } + if (A.skinWeights.length > 0) { + var r = new Ae(4 * A.skinWeights.length,4); + this.addAttribute("skinWeight", r.copyVector4sArray(A.skinWeights)) + } + if (A.faces.length) { + for (var a = A.faces, s = [], l = 0; a.length > l; l += 1) { + var c = a[l]; + s.push(c.a, c.b, c.c) + } + var h = new (uh.arrayMax(s) > 65535 ? Uint32Array : Uint16Array)(3 * s.length); + e.setIndex(new YA(h,1).copyIndicesArray(s)) + } + } + return e + }, + calculateVolumeOfGeometry: function(A, e, t, i) { + if (A && e) { + var o = 0 + , n = new y + , r = new y + , a = new y; + t || (t = 0), + i || (i = e.length); + for (var s = 0, l = 0, c = 0, h = t, d = t + i; d > h; h += 3) { + l = e[h + 1], + c = e[h + 2], + n.set(A[3 * (s = e[h])], A[3 * s + 1], A[3 * s + 2]), + r.set(A[3 * l], A[3 * l + 1], A[3 * l + 2]), + a.set(A[3 * c], A[3 * c + 1], A[3 * c + 2]), + o += n.clone().cross(r).dot(a) / 6 + } + return o + } + }, + minDistanceBetweenTriToMesh: function(A, e, t, i) { + function o(A, e) { + return new y(A.x - e.x,A.y - e.y,A.z - e.z) + } + function n(A, e) { + return new y(A.x + e.x,A.y + e.y,A.z + e.z) + } + function r(A, e, t) { + return new y(A.x + e.x * t,A.y + e.y * t,A.z + e.z * t) + } + function a(A, e) { + return A.x * e.x + A.y * e.y + A.z * e.z + } + function s(A, e) { + return new y(A.y * e.z - A.z * e.y,A.z * e.x - A.x * e.z,A.x * e.y - A.y * e.x) + } + function l(A, e, t, i) { + var l, c = a(e, i), h = a(e, e), d = a(i, i), p = o(t, A), g = a(e, p), u = a(i, p), f = null; + 0 > (f = (g * d - u * c) / (h * d - c * c)) || isNaN(f) ? f = 0 : f > 1 && (f = 1); + var m = null + , C = null + , y = null + , v = null; + return 0 >= (l = (f * c - u) / d) || isNaN(l) ? (C = t, + 0 >= (f = g / h) || isNaN(f) ? (m = A, + y = o(t, A)) : 1 > f ? (m = r(A, e, f), + v = s(p, e), + y = s(e, v)) : y = o(t, m = n(A, e))) : 1 > l ? (C = r(t, i, l), + 0 >= f || isNaN(f) ? (m = A, + v = s(p, i), + y = s(i, v)) : 1 > f ? (m = r(A, e, f), + 0 > a(y = s(e, i), p) && y.multiplyScalar(-1)) : (v = s(p = o(t, m = n(A, e)), i), + y = s(i, v))) : (C = n(t, i), + 0 >= (f = (c + g) / h) || isNaN(f) ? (m = A, + y = o(C, A)) : 1 > f ? (m = r(A, e, f), + v = s(p = o(C, A), e), + y = s(e, v)) : y = o(C, m = n(A, e))), + { + vec: y, + closestP: m, + closestQ: C + } + } + function c(A, e) { + var t = null + , i = null + , n = [] + , c = [] + , h = null; + n[0] = o(A[1], A[0]), + n[1] = o(A[2], A[1]), + n[2] = o(A[0], A[2]), + c[0] = o(e[1], e[0]), + c[1] = o(e[2], e[1]), + c[2] = o(e[0], e[2]); + for (var d = null, p = null, g = null, u = 0, f = A[0].distanceToSquared(e[0]) + 1, m = 0; 3 > m; m += 1) + for (var C = 0; 3 > C; C += 1) { + var y = l(A[m], n[m], e[C], c[C]); + h = y.vec; + var v = a(d = o(i = y.closestQ, t = y.closestP), d); + if (f >= v) { + p = t.clone(), + g = i.clone(), + f = v; + var I = a(o(A[(m + 2) % 3], t), h) + , E = a(o(e[(C + 2) % 3], i), h); + if (0 >= I && E >= 0) + return { + start: t.clone(), + end: i.clone(), + minDistance: Math.sqrt(v) + }; + 0 > I && (I = 0), + E > 0 && (E = 0), + a(d, h) - I + E > 0 && (u = 1) + } + } + var B = s(n[0], n[1]) + , x = a(B, B); + if (x > 1e-15) { + var S = []; + d = o(A[0], e[0]), + S[0] = a(d, B), + d = o(A[0], e[1]), + S[1] = a(d, B), + d = o(A[0], e[2]), + S[2] = a(d, B); + var w = -1; + if (S[0] > 0 && S[1] > 0 && S[2] > 0 ? S[w = S[1] > S[0] ? 0 : 1] > S[2] && (w = 2) : 0 > S[0] && 0 > S[1] && 0 > S[2] && S[2] > S[w = S[0] > S[1] ? 0 : 1] && (w = 2), + w >= 0 && (u = 1, + a(d = o(e[w], A[0]), s(B, n[0])) > 0 && a(d = o(e[w], A[1]), s(B, n[1])) > 0 && a(d = o(e[w], A[2]), s(B, n[2])) > 0)) + return t = r(e[w], B, S[w] / x), + i = e[w].clone(), + { + start: t.clone(), + end: i, + minDistance: t.distanceTo(i) + } + } + var M = s(c[0], c[1]) + , b = a(M, M); + if (b > 1e-15) { + var U = []; + d = o(e[0], A[0]), + U[0] = a(d, M), + d = o(e[0], A[1]), + U[1] = a(d, M), + d = o(e[0], A[2]), + U[2] = a(d, M); + w = -1; + if (U[0] > 0 && U[1] > 0 && U[2] > 0 ? U[w = U[1] > U[0] ? 0 : 1] > U[2] && (w = 2) : 0 > U[0] && 0 > U[1] && 0 > U[2] && U[2] > U[w = U[0] > U[1] ? 0 : 1] && (w = 2), + w >= 0 && (u = 1, + a(d = o(A[w], e[0]), s(M, c[0])) > 0 && a(d = o(A[w], e[1]), s(M, c[1])) > 0 && a(d = o(A[w], e[2]), s(M, c[2])) > 0)) + return { + start: t = A[w].clone(), + end: (i = r(A[w], M, U[w] / b)).clone(), + minDistance: t.distanceTo(i) + } + } + return u ? (t = p, + i = g, + { + start: p.clone(), + end: g.clone(), + minDistance: Math.sqrt(f) + }) : { + start: p.clone(), + end: g.clone(), + minDistance: 0 + } + } + var h = new y + , d = new y + , p = new y; + function g(A, e, t, i, o, n) { + h.fromBufferAttribute(e, t), + d.fromBufferAttribute(e, i), + p.fromBufferAttribute(e, o), + n && (h.applyMatrix4(n), + d.applyMatrix4(n), + p.applyMatrix4(n)), + A.push(h), + A.push(d), + A.push(p) + } + for (var u = { + start: null, + end: null, + minDistance: Number.POSITIVE_INFINITY + }, f = e.geometry, m = f.attributes.position, C = t ? t.indexStart : 0, v = f.getIndex().array, I = C, E = t ? t.indexStart + t.indexCount : v.length; E > I; I += 3) { + var B = []; + g(B, m, v[I], v[I + 1], v[I + 2], i); + var x = c(A, B); + if (0 >= x.minDistance) + return u.minDistance = 0, + u.start = x.start.clone(), + u.end = x.end.clone(), + u; + u.minDistance > x.minDistance && (u.minDistance = x.minDistance, + u.start = x.start.clone(), + u.end = x.end.clone()) + } + return u + }, + minDistanceBetweenTriToTri: function(A, e) { + function t(A, e) { + return new y(A.x - e.x,A.y - e.y,A.z - e.z) + } + function i(A, e) { + return new y(A.x + e.x,A.y + e.y,A.z + e.z) + } + function o(A, e, t) { + return new y(A.x + e.x * t,A.y + e.y * t,A.z + e.z * t) + } + function n(A, e) { + return A.x * e.x + A.y * e.y + A.z * e.z + } + function r(A, e) { + return new y(A.y * e.z - A.z * e.y,A.z * e.x - A.x * e.z,A.x * e.y - A.y * e.x) + } + function a(A, e, a, s) { + var l, c = n(e, s), h = n(e, e), d = n(s, s), p = t(a, A), g = n(e, p), u = n(s, p), f = null; + 0 > (f = (g * d - u * c) / (h * d - c * c)) || isNaN(f) ? f = 0 : f > 1 && (f = 1); + var m = null + , C = null + , y = null + , v = null; + return 0 >= (l = (f * c - u) / d) || isNaN(l) ? (C = a, + 0 >= (f = g / h) || isNaN(f) ? (m = A, + y = t(a, A)) : 1 > f ? (m = o(A, e, f), + v = r(p, e), + y = r(e, v)) : y = t(a, m = i(A, e))) : 1 > l ? (C = o(a, s, l), + 0 >= f || isNaN(f) ? (m = A, + v = r(p, s), + y = r(s, v)) : 1 > f ? (m = o(A, e, f), + 0 > n(y = r(e, s), p) && y.multiplyScalar(-1)) : (v = r(p = t(a, m = i(A, e)), s), + y = r(s, v))) : (C = i(a, s), + 0 >= (f = (c + g) / h) || isNaN(f) ? (m = A, + y = t(C, A)) : 1 > f ? (m = o(A, e, f), + v = r(p = t(C, A), e), + y = r(e, v)) : y = t(C, m = i(A, e))), + { + vec: y, + closestP: m, + closestQ: C + } + } + function s(A, e) { + var i = null + , s = null + , l = [] + , c = [] + , h = null; + l[0] = t(A[1], A[0]), + l[1] = t(A[2], A[1]), + l[2] = t(A[0], A[2]), + c[0] = t(e[1], e[0]), + c[1] = t(e[2], e[1]), + c[2] = t(e[0], e[2]); + for (var d = null, p = null, g = null, u = 0, f = A[0].distanceToSquared(e[0]) + 1, m = 0; 3 > m; m += 1) + for (var C = 0; 3 > C; C += 1) { + var y = a(A[m], l[m], e[C], c[C]); + h = y.vec; + var v = n(d = t(s = y.closestQ, i = y.closestP), d); + if (f >= v) { + p = i.clone(), + g = s.clone(), + f = v; + var I = n(t(A[(m + 2) % 3], i), h) + , E = n(t(e[(C + 2) % 3], s), h); + if (0 >= I && E >= 0) + return { + start: i.clone(), + end: s.clone(), + minDistance: Math.sqrt(v) + }; + 0 > I && (I = 0), + E > 0 && (E = 0), + n(d, h) - I + E > 0 && (u = 1) + } + } + var B = r(l[0], l[1]) + , x = n(B, B); + if (x > 1e-15) { + var S = []; + d = t(A[0], e[0]), + S[0] = n(d, B), + d = t(A[0], e[1]), + S[1] = n(d, B), + d = t(A[0], e[2]), + S[2] = n(d, B); + var w = -1; + if (S[0] > 0 && S[1] > 0 && S[2] > 0 ? S[w = S[1] > S[0] ? 0 : 1] > S[2] && (w = 2) : 0 > S[0] && 0 > S[1] && 0 > S[2] && S[2] > S[w = S[0] > S[1] ? 0 : 1] && (w = 2), + w >= 0 && (u = 1, + n(d = t(e[w], A[0]), r(B, l[0])) > 0 && n(d = t(e[w], A[1]), r(B, l[1])) > 0 && n(d = t(e[w], A[2]), r(B, l[2])) > 0)) + return i = o(e[w], B, S[w] / x), + s = e[w].clone(), + { + start: i.clone(), + end: s, + minDistance: i.distanceTo(s) + } + } + var M = r(c[0], c[1]) + , b = n(M, M); + if (b > 1e-15) { + var U = []; + d = t(e[0], A[0]), + U[0] = n(d, M), + d = t(e[0], A[1]), + U[1] = n(d, M), + d = t(e[0], A[2]), + U[2] = n(d, M); + w = -1; + if (U[0] > 0 && U[1] > 0 && U[2] > 0 ? U[w = U[1] > U[0] ? 0 : 1] > U[2] && (w = 2) : 0 > U[0] && 0 > U[1] && 0 > U[2] && U[2] > U[w = U[0] > U[1] ? 0 : 1] && (w = 2), + w >= 0 && (u = 1, + n(d = t(A[w], e[0]), r(M, c[0])) > 0 && n(d = t(A[w], e[1]), r(M, c[1])) > 0 && n(d = t(A[w], e[2]), r(M, c[2])) > 0)) + return { + start: i = A[w].clone(), + end: (s = o(A[w], M, U[w] / b)).clone(), + minDistance: i.distanceTo(s) + } + } + return u ? (i = p, + s = g, + { + start: p.clone(), + end: g.clone(), + minDistance: Math.sqrt(f) + }) : { + start: p.clone(), + end: g.clone(), + minDistance: 0 + } + } + for (var l = { + start: null, + end: null, + minDistance: Number.POSITIVE_INFINITY + }, c = 0, h = A.length; h > c; c += 1) + for (var d = 0, p = e.length; p > d; d += 1) { + var g = s(A[c], e[d]); + if (0 >= g.minDistance) + return l.minDistance = 0, + l.start = g.start.clone(), + l.end = g.end.clone(), + l; + l.minDistance > g.minDistance && (l.minDistance = g.minDistance, + l.start = g.start.clone(), + l.end = g.end.clone()) + } + return l + }, + calculateTheIntersectionOfGeometryAndPlane: function(A, e) { + var t = A.getIndex().array + , i = A.attributes.position + , o = t.length + , n = e.clone() + , r = 0; + -1 === n.normal.x ? r = 0 : 1 === n.normal.x ? (n.normal.x = -1, + n.constant *= -1, + r = 1) : -1 === n.normal.y ? r = 2 : 1 === n.normal.y ? (n.normal.y = -1, + n.constant *= -1, + r = 3) : -1 === n.normal.z ? r = 4 : 1 === n.normal.z && (n.normal.z = -1, + n.constant *= -1, + r = 5); + for (var a, s, l, c, h, d, p, g, u = [], f = new Hs, m = 0, C = o; C > m; m += 3) { + var v = []; + a = v, + s = i, + l = t[m], + c = t[m + 1], + h = t[m + 2], + d = new y, + p = new y, + g = new y, + d.fromBufferAttribute(s, l), + p.fromBufferAttribute(s, c), + g.fromBufferAttribute(s, h), + a.push(d), + a.push(p), + a.push(g); + var I = v[0] + , E = v[1] + , B = v[2] + , x = !1 + , S = !1 + , w = !1; + switch (r) { + case 0: + case 1: + x = n.constant > I.x, + S = n.constant > E.x, + w = n.constant > B.x; + break; + case 2: + case 3: + x = n.constant > I.y, + S = n.constant > E.y, + w = n.constant > B.y; + break; + case 4: + case 5: + x = n.constant > I.z, + S = n.constant > E.z, + w = n.constant > B.z + } + var M = null + , b = null; + x ? S ? w || (f.set(B, E), + (M = n.intersectLine(f, new y)) && u.push(M), + f.set(B, I), + (b = n.intersectLine(f, new y)) && u.push(b)) : w ? (f.set(E, B), + (M = n.intersectLine(f, new y)) && u.push(M), + f.set(E, I), + (b = n.intersectLine(f, new y)) && u.push(b)) : (f.set(E, I), + (M = n.intersectLine(f, new y)) && u.push(M), + f.set(B, I), + (b = n.intersectLine(f, new y)) && u.push(b)) : S ? w ? (f.set(I, E), + (M = n.intersectLine(f, new y)) && u.push(M), + f.set(I, B), + (b = n.intersectLine(f, new y)) && u.push(b)) : (f.set(I, E), + (M = n.intersectLine(f, new y)) && u.push(M), + f.set(B, E), + (b = n.intersectLine(f, new y)) && u.push(b)) : w && (f.set(I, B), + (M = n.intersectLine(f, new y)) && u.push(M), + f.set(E, B), + (b = n.intersectLine(f, new y)) && u.push(b)) + } + if (u.length >= 1) { + for (var U = {}, F = [], K = [], Q = 0, R = u.length; R > Q; Q += 1) { + var T = u[Q].toArray(F).toString(); + U[T] || (U[T] = []), + 2 > U[T].length || (T = T + "_" + Math.floor(U[T].length / 2 + .6), + U[T] || (U[T] = [])), + U[T].push(Q), + K.push(T) + } + var k = [] + , D = K[0]; + return k.push(u[0], u[1]), + function A(e, t) { + var i = U[K[e]] + , o = i[0] === e ? i[1] : i[0] + , n = o % 2 ? o - 1 : o + 1; + if (t.push(u[n]), + K[n] !== D) { + if (isNaN(n)) + return void (k = null); + A(n, t) + } + }(1, k), + k + } + }, + getShapeGeometryFromGeometryAndPlane: function(A, e) { + var t = Tu.calculateTheIntersectionOfGeometryAndPlane(A, e); + if (t) { + var i = 0; + -1 === e.normal.x ? i = 0 : 1 === e.normal.x ? i = 1 : -1 === e.normal.y ? i = 2 : 1 === e.normal.y ? i = 3 : -1 === e.normal.z ? i = 4 : 1 === e.normal.z && (i = 5); + var o = [] + , n = [] + , r = [] + , a = [] + , l = []; + A.boundingBox || A.computeBoundingBox(); + for (var c = A.boundingBox.getSize(new y), h = e.normal.x * c.x * 1e-4, d = e.normal.y * c.y * 1e-4, p = e.normal.z * c.z * 1e-4, g = 0, u = t.length; u > g; g += 1) { + var f = t[g] + , m = new s; + switch (n.push(f.x + h, f.y + d, f.z + p), + i) { + case 0: + case 1: + r.push(1, 0, 0), + a.push(f.y, f.z), + m.set(f.y, f.z); + break; + case 2: + case 3: + r.push(0, 1, 0), + a.push(f.x, f.z), + m.set(f.x, f.z); + break; + case 4: + case 5: + r.push(0, 0, 1), + a.push(f.x, f.y), + m.set(f.x, f.y) + } + l.push(m) + } + for (var C = Hn.triangulateShape(l, []), v = 0, I = C.length; I > v; v += 1) { + var E = C[v]; + o.push(E[0], E[1], E[2]) + } + var B = new he; + return B.setIndex(o), + B.setAttribute("position", new Ae(n,3)), + B.setAttribute("normal", new Ae(r,3)), + B.setAttribute("uv", new Ae(a,2)), + B + } + } + }; + Tu.getBoxMBuffer = function() { + for (var A = null, e = null, t = [], i = [], o = [], n = 0, r = 0; 6 > r; r += 1) { + var a = Tu.getBoxData(r); + for (A = 0, + e = a.vertex.length; e > A; A += 1) + t.push(a.vertex[A]); + for (A = 0, + e = a.index.length; e > A; A += 1) + o.push(a.index[A] + n); + for (n += a.vertex.length / 3, + A = 0, + e = a.normal.length; e > A; A += 1) + i.push(a.normal[A]) + } + return function(A) { + var e = null; + if (A) { + var n = new l + , r = new y; + e = []; + for (var a = 0; 6 > a; a += 1) { + var s = Tu.getBoxData(a); + n.set(A[6 * a], A[6 * a + 2], A[6 * a + 4], A[6 * a + 1], A[6 * a + 3], A[6 * a + 5], 0, 0, 1); + for (var c = 0, h = s.uv.length; h > c; c += 2) + r.set(s.uv[c], s.uv[c + 1], 1), + r.applyMatrix3(n), + e.push(r.x), + e.push(r.y) + } + } + return { + vertex: t, + normal: i, + uv: e, + index: o + } + } + }(), + Tu.getPipeMBuffer = function() { + var A = Tu.getPipeData(32) + , e = A.edges + , t = A.vertex + , i = A.normal + , o = A.index; + return function(A) { + var n = null; + if (!(!A || 18 !== A.length)) { + n = []; + for (var r = [], a = 0, s = A.length / 6; s > a; a += 1) { + var c = new l; + c.set(A[6 * a], A[6 * a + 2], A[6 * a + 4], A[6 * a + 1], A[6 * a + 3], A[6 * a + 5], 0, 0, 1), + r.push(c) + } + for (var h = Tu.getPipeData(32), d = 4 * (e + 1), p = d + 2 * e, g = new y, u = 0, f = h.uv.length; f > u; u += 2) + g.set(h.uv[u], h.uv[u + 1], 1), + g.applyMatrix3(d > u ? r[0] : p > u ? r[1] : r[2]), + n.push(g.x), + n.push(g.y) + } + return { + vertex: t, + normal: i, + uv: n, + index: o + } + } + }(); + var ku = { + geoHeader: function(A) { + var e = new Int32Array(A); + this.geoCount = e[0], + this.headerBuffer = e.slice(1, 4 * this.geoCount + 1) + }, + GeometryReader: function(A, e) { + Bh.time("GeometryReader"), + this.geomMap = [], + this.geoCount = new Uint32Array(A,0,1)[0]; + var t = this.geoCount + , i = [] + , o = 0 + , n = null + , r = null + , a = null + , s = null + , l = null + , c = null + , h = null + , d = 0 + , p = null + , g = 0 + , u = null + , f = 0 + , m = null + , C = 0 + , y = null + , v = 0 + , I = null; + if (np(e, "2")) + for (var E = 0; t > E; E += 1) { + if (i = {}, + o = 4 * (1 + 7 * t), + r = (n = new Uint32Array(A,4 * (1 + 7 * E),7))[0], + a = n[2], + s = n[3], + l = n[4], + c = n[5], + h = n[6], + d = o + n[1], + p = new Float32Array(A.slice(d, 4 * a + d)), + g = 4 * a + d, + u = new Float32Array(A.slice(g, g + 4 * s)), + f = g + 4 * s, + m = new Uint32Array(A.slice(f, f + 4 * l)), + C = f + 4 * l, + y = new Float32Array(A.slice(C, C + 4 * c)), + v = C + 4 * c, + I = new Int16Array(A.slice(v, v + 2 * h)), + vc.DataReduction) { + var B = (new M).makeScale(.001, .001, .001); + Tu.applyMatrix4ToBuffer(B, p) + } + i.position = p, + i.normal = u, + i.index = m, + i.uv = y, + i.materialIndex = I, + i.geoId = r, + this.geomMap.push(i) + } + else + for (var x = 0; t > x; x += 1) + i = {}, + o = 4 * (1 + 6 * t), + r = (n = new Uint32Array(A,4 * (1 + 6 * x),6))[0], + a = n[2], + s = n[3], + l = n[4], + c = n[5], + d = o + n[1], + p = new Float32Array(A.slice(d, 4 * a + d)), + g = 4 * a + d, + u = new Float32Array(A.slice(g, g + 4 * s)), + f = g + 4 * s, + m = new Uint32Array(A.slice(f, f + 4 * l)), + C = f + 4 * l, + y = new Float32Array(A.slice(C, C + 4 * c)), + i.position = p, + i.normal = u, + i.index = m, + i.uv = y, + i.geoId = r, + this.geomMap.push(i); + Bh.debug(this.geomMap), + Bh.timeEnd("GeometryReader") + }, + BatchedGeometryReader: function(A, e) { + Bh.time("BatchedGeometryReader"), + this.geomMap = [], + this.geoCount = new Uint32Array(A,0,1)[0]; + for (var t = this.geoCount, i = 0, o = 0, n = 0, r = [], a = 4, s = 0; t > s; s += 1) { + var l = {}; + r.push(l); + var c = new Uint32Array(A,a,7); + l.geoId = c[0], + l.offset = c[1], + l.vertexLength = c[2], + l.normalLength = c[5], + l.indicesLength = c[3], + l.uvLength = c[4], + l.componentCount = o = c[6], + l.nodeInfo = [], + a += 28; + for (var h = 0; o > h; h += 1) { + var d = new Uint32Array(A,a,1)[0]; + a += 4; + for (var p = 0; d > p; p += 1) { + var g = new Uint32Array(A,a,3); + a += 12, + l.nodeInfo.push(g) + } + } + l.materialKeyLength = new Uint32Array(A,a,1)[0], + a += 4 + } + for (var u = 0; t > u; u += 1) { + var f = r[u] + , m = f.normalLength + , C = f.indicesLength + , y = f.uvLength; + i = a + f.offset, + n = 4 * f.vertexLength; + var v = new Float32Array(A.slice(i, i + n)); + i += n, + n = 4 * C; + var I = new Uint32Array(A.slice(i, i + n)); + i += n, + n = 4 * y; + var E = new Float32Array(A.slice(i, i + n)); + i += n, + n = 4 * m; + var B = new Float32Array(A.slice(i, i + n)); + i += n, + o = f.componentCount; + for (var x = {}, S = 0, w = f.nodeInfo.length; w > S; S += 1) { + var b = f.nodeInfo[S]; + n = 2 * b[0]; + var U = uh.ab2str(new Int16Array(A.slice(i, i + n))); + i += n, + n = 2 * b[1]; + var F = uh.ab2str(new Int16Array(A.slice(i, i + n))); + i += n; + var K = new Uint32Array(A.slice(i, i + 4))[0]; + i += 4; + var Q = new Uint32Array(A.slice(i, i + 4))[0]; + i += 4; + var R = new Uint32Array(A.slice(i, i + 4))[0]; + i += 4; + var T = new Uint32Array(A.slice(i, i + 4))[0]; + i += 4; + var k = {}; + k.userId = U, + k.nodeId = F, + k.positionStart = K, + k.positionCount = Q, + k.indexStart = R, + k.indexCount = T, + x[U] || (x[U] = []), + x[U].push(k) + } + n = 2 * f.materialKeyLength; + var D = uh.ab2str(new Int16Array(A.slice(i, i + n))); + if (vc.DataReduction) { + var L = (new M).makeScale(.001, .001, .001); + Tu.applyMatrix4ToBuffer(L, v) + } + var N = {}; + N.position = v, + N.normal = B, + N.index = I, + N.uv = E, + N.materialIndex = null, + N.geoId = f.geoId, + N.materialKey = D, + N.componentInfo = x, + this.geomMap.push(N) + } + Bh.debug(this.geomMap), + Bh.timeEnd("BatchedGeometryReader") + }, + NodesReader: function(A, e) { + Bh.time("NodesReader"), + this.geomMap = [], + this.nodeCount = new Uint32Array(A,0,1)[0]; + for (var t = this.nodeCount, i = 0, o = 0, n = [], r = 4, a = 0; t > a; a += 1) { + var s = {}; + n.push(s); + var l = new Uint32Array(A,r,5); + s.geoId = l[0], + s.offset = l[1], + s.nodeIdLength = l[2], + s.materialKeyLength = l[3], + s.matrixLength = l[4], + r += 20 + } + for (var c = 0; t > c; c += 1) { + var h = n[c] + , d = h.materialKeyLength + , p = h.matrixLength + , g = uh.ab2str(A.slice(i = r + h.offset, i + (o = h.nodeIdLength))) + , u = uh.ab2str(A.slice(i += o, i + (o = d))); + i += o, + o = 8 * p; + var f = new Float64Array(A.slice(i, i + o)); + i += o; + var m = {}; + m.nodeId = g, + m.geoId = h.geoId, + m.material = u, + m.matrix = f, + this.geomMap.push(m) + } + Bh.debug(this.geomMap), + Bh.timeEnd("NodesReader") + }, + InstancedGeometryReader: function(A, e) { + Bh.time("InstancedGeometryReader"), + this.geomMap = [], + this.geoCount = new Uint32Array(A,0,1)[0]; + for (var t = this.geoCount, i = null, o = 0, n = 0, r = 0, a = [], s = 4, l = 0; t > l; l += 1) { + var c = {}; + a.push(c), + i = new Uint32Array(A,s,7), + c.geoId = i[0], + c.offset = i[1], + c.vertexLength = i[2], + c.normalLength = i[5], + c.indicesLength = i[3], + c.uvLength = i[4], + c.componentCount = n = i[6], + c.nodeInfo = {}, + s += 28; + var h = []; + c.componentKeyLength = h, + c.matrixArrayLength = []; + for (var d = 0; n > d; d += 1) { + h.push(new Uint32Array(A,s,1)[0]), + s += 4; + var p = new Uint32Array(A,s,1)[0]; + s += 4, + c.nodeInfo[d] = []; + for (var g = 0; p > g; g += 1) { + var u = new Uint32Array(A,s,1)[0]; + s += 4, + c.nodeInfo[d].push(u) + } + } + c.matrixArrayLength = new Uint32Array(A,s,1)[0], + s += 4, + c.materialKeyLength = new Uint32Array(A,s,1)[0], + s += 4 + } + for (var f = 0; t > f; f += 1) { + var m = a[f] + , C = m.normalLength + , y = m.indicesLength + , v = m.uvLength; + o = s + m.offset, + r = 4 * m.vertexLength; + var I = new Float32Array(A.slice(o, o + r)); + o += r, + r = 4 * y; + var E = new Uint32Array(A.slice(o, o + r)); + o += r, + r = 4 * v; + var B = new Float32Array(A.slice(o, o + r)); + o += r, + r = 4 * C; + var x = new Float32Array(A.slice(o, o + r)); + o += r; + for (var S = {}, w = [], b = [], U = 0, F = 0, K = n = m.componentCount; K > F; F += 1) { + var Q = uh.ab2str(A.slice(o, o + (r = m.componentKeyLength[F]))); + o += r, + b.push(Q), + S[Q] || (S[Q] = []); + for (var R = m.nodeInfo[F], T = 0, k = R.length; k > T; T += 1) { + var D = uh.ab2str(A.slice(o, o + (r = R[T]))); + o += r, + S[Q].push(U), + w.push(D), + U += 1 + } + } + r = 8 * m.matrixArrayLength; + var L = new Float64Array(A.slice(o, o + r)); + o += r; + var N = new Float64Array(A.slice(o, o + r)); + o += r; + var O = new Float64Array(A.slice(o, o + r)); + o += r; + var V = new Float64Array(A.slice(o, o + r)) + , G = uh.ab2str(A.slice(o += r, o + (r = m.materialKeyLength))); + o += r, + r = 4 * w.length * 4; + var P = new Float32Array(A.slice(o, o + r)); + if (o += r, + vc.DataReduction) { + var q = (new M).makeScale(.001, .001, .001); + Tu.applyMatrix4ToBuffer(q, I) + } + var j = {}; + j.position = I, + j.normal = x, + j.index = E, + j.uv = B, + j.materialIndex = null, + j.geoId = m.geoId, + j.materialKey = G, + j.componentInfo = S, + j.mcol0 = L, + j.mcol1 = N, + j.mcol2 = O, + j.mcol3 = V, + j.color = P, + j.nodeIdInfo = w, + j.componentKeyInfo = b, + this.geomMap.push(j) + } + Bh.debug(this.geomMap), + Bh.timeEnd("InstancedGeometryReader") + }, + BoneReader: function(A, e) { + Bh.time("BoneReader"), + this.boneMap = [], + this.boneCount = new Uint32Array(A,0,1)[0]; + for (var t = this.boneCount, i = [], o = 0, n = null, r = null, a = null, s = null, l = null, c = null, h = 0, d = null, p = 0, g = null, u = 0, f = null, m = 0, C = [], y = "[]", v = 0; t > v; v += 1) { + i = {}, + o = 4 * (1 + 5 * t), + r = (n = new Uint32Array(A,4 * (1 + 5 * v),5))[0], + a = n[2], + s = n[3], + l = n[3], + c = n[4], + h = o + n[1], + d = new Float32Array(A.slice(h, 4 * a + h)), + p = 4 * a + h, + g = new Uint16Array(A.slice(p, p + 2 * s)), + u = p + 2 * s, + f = new Float32Array(A.slice(u, u + 4 * l)), + m = u + 4 * l; + var I = new Uint8Array(A.slice(m, m + c)); + y = mh.isIE11() ? uh.decodeUTF8(I) : new TextDecoder("utf-8").decode(I); + try { + C = JSON.parse(y) + } catch (A) { + Bh.error("解析name出错:", A) + } + i.offsetMatrix = d, + i.skinIndex = g, + i.skinWeight = f, + i.name = C, + i.geoId = r, + this.boneMap.push(i) + } + Bh.debug(this.boneMap), + Bh.time("BoneReader") + } + }; + ku.GeometryReader.prototype = { + constructor: ku.GeometryReader, + getPositionBuffer: function(A) { + return this.geos[A].position + }, + getIndexBuffer: function(A) { + return this.geos[A].index + }, + getNormalBuffer: function(A) { + return this.geos[A].normal + }, + getUVBuffer: function(A) { + return [] + } + }; + var Du = function(A, e) { + if (this.materialMap = [], + np(e, "2")) + this.materialMap = A; + else + for (var t = this.materialCount = new Uint32Array(A,0,1)[0], i = 4 * (1 + 6 * t), o = 0; t > o; o += 1) { + var n = new Uint32Array(A,4 * (1 + 6 * o),6) + , r = n[0] + , a = n[1] + , s = n[2] + , l = n[3] + , c = n[4] + , h = n[5] + , d = new Float32Array(A.slice(i + a, 4 * s + i + a)) + , p = new Int16Array(A.slice(4 * s + i + a, 4 * s + i + a + 2 * l)) + , g = new Uint8Array(A.slice(4 * s + i + a + 2 * l, 4 * s + i + a + 2 * l + c)) + , u = 4 * s + i + a + 2 * l + c + , f = new Int16Array(A.slice(u, u + 2 * h)) + , m = "[]"; + m = mh.isIE11() ? uh.decodeUTF8(g) : new TextDecoder("utf-8").decode(g); + var C = []; + try { + C = JSON.parse(m) + } catch (A) { + Bh.error("解析纹理出错:", A) + } + var y = {}; + y.matId = r, + y.color = d, + y.colorIndex = p, + y.texture = C, + y.textureIndex = f, + this.materialMap.push(y) + } + Bh.debug(this.materialMap) + } + , Lu = { + geoHeader: function(A) { + var e = new Int32Array(A); + this.geoCount = e[0], + this.headerBuffer = e.slice(1, 4 * this.geoCount + 1) + }, + GeometryReader: function(A, e) { + this.geomMap = [], + this.geoCount = new Uint32Array(A,0,1)[0]; + for (var t = this.geoCount, i = [], o = 0, n = null, r = null, a = null, s = null, l = 0, c = null, h = null, d = 0, p = 0; t > p; p += 1) + i = {}, + o = 4 * (1 + 4 * t), + r = (n = new Uint32Array(A,4 * (1 + 4 * p),4))[0], + a = n[3], + s = n[2], + l = o + n[1], + h = new Uint32Array(A.slice(l, l + 4 * s)), + d = l + 4 * s, + c = new Float32Array(A.slice(d, 4 * a + d)), + i.position = c, + i.index = h, + i.geoId = r, + this.geomMap.push(i); + Bh.debug(this.geomMap) + }, + BoneReader: function(A, e) { + this.boneMap = [], + this.boneCount = new Uint32Array(A,0,1)[0]; + for (var t = this.boneCount, i = [], o = 0, n = null, r = null, a = null, s = null, l = null, c = null, h = 0, d = null, p = 0, g = null, u = 0, f = null, m = 0, C = [], y = "[]", v = 0; t > v; v += 1) { + i = {}, + o = 4 * (1 + 5 * t), + r = (n = new Uint32Array(A,4 * (1 + 5 * v),5))[0], + a = n[2], + s = n[3], + l = n[3], + c = n[4], + h = o + n[1], + d = new Float32Array(A.slice(h, 4 * a + h)), + p = 4 * a + h, + g = new Uint16Array(A.slice(p, p + 2 * s)), + u = p + 2 * s, + f = new Float32Array(A.slice(u, u + 4 * l)), + m = u + 4 * l; + var I = new Uint8Array(A.slice(m, m + c)); + y = mh.isIE11() ? uh.decodeUTF8(I) : new TextDecoder("utf-8").decode(I); + try { + C = JSON.parse(y) + } catch (A) { + Bh.error("解析name出错:", A) + } + i.offsetMatrix = d, + i.skinIndex = g, + i.skinWeight = f, + i.name = C, + i.geoId = r, + this.boneMap.push(i) + } + Bh.debug(this.boneMap) + } + }; + Lu.GeometryReader.prototype = { + constructor: Lu.GeometryReader, + getPositionBuffer: function(A) { + return this.geos[A].position + }, + getIndexBuffer: function(A) { + return this.geos[A].index + }, + getNormalBuffer: function(A) { + return this.geos[A].normal + }, + getUVBuffer: function(A) { + return [] + } + }; + var Nu = function(A) { + this.MaxThreadCount = A || 8, + this.todoList = [], + this.doingCount = 0, + this.addItem = function(A) { + void 0 !== A && this.todoList.push(A) + } + , + this.run = function(A, e, t) { + if (0 >= this.doingCount) + if (0 !== this.todoList.length) { + var i = this.todoList + , o = i.length; + this.todoList = [], + this.doingCount = o; + for (var n = Math.min(this.MaxThreadCount, vc.ConcurrencyRequestCount, o), r = this, a = 0; n > a; a += 1) + s(a) + } else + t(); + function s(a) { + o > a ? (e(r.doingCount, o), + A(i[a], a + n, s)) : 1 > r.doingCount && (r.run(A, e, t), + e(r.doingCount, o), + t()) + } + } + } + , Ou = function(A, e) { + this.type = e, + this.manager = A, + this.worker = new Nu(4), + this.working = !0 + }; + function Vu(A, e, t, i) { + for (var o = function(A, e) { + var t = void 0; + t = "Line" === e || "LineSegments" === e ? new Ba : new Ja; + for (var i = new s, o = new s, n = new s, r = !0, a = !1, l = A.match(/[a-df-z][^a-df-z]*/gi), c = 0, h = l.length; h > c; c++) { + var d = l[c] + , p = (e = d.charAt(0), + d.substr(1).trim()); + switch (!0 === r && (a = !0, + r = !1), + e) { + case "M": + for (var g = Gu(p), u = 0, f = g.length; f > u; u += 2) + i.x = g[u + 0], + i.y = g[u + 1], + o.x = i.x, + o.y = i.y, + 0 === u ? t.moveTo(i.x, i.y) : t.lineTo(i.x, i.y), + 0 === u && !0 === a && n.copy(i); + break; + case "H": + for (g = Gu(p), + u = 0, + f = g.length; f > u; u++) + i.x = g[u], + o.x = i.x, + o.y = i.y, + t.lineTo(i.x, i.y), + 0 === u && !0 === a && n.copy(i); + break; + case "V": + for (g = Gu(p), + u = 0, + f = g.length; f > u; u++) + i.y = g[u], + o.x = i.x, + o.y = i.y, + t.lineTo(i.x, i.y), + 0 === u && !0 === a && n.copy(i); + break; + case "L": + for (g = Gu(p), + u = 0, + f = g.length; f > u; u += 2) + i.x = g[u + 0], + i.y = g[u + 1], + o.x = i.x, + o.y = i.y, + t.lineTo(i.x, i.y), + 0 === u && !0 === a && n.copy(i); + break; + case "C": + for (g = Gu(p), + u = 0, + f = g.length; f > u; u += 6) + t.bezierCurveTo(g[u + 0], g[u + 1], g[u + 2], g[u + 3], g[u + 4], g[u + 5]), + o.x = g[u + 2], + o.y = g[u + 3], + i.x = g[u + 4], + i.y = g[u + 5], + 0 === u && !0 === a && n.copy(i); + break; + case "S": + for (g = Gu(p), + u = 0, + f = g.length; f > u; u += 4) + t.bezierCurveTo(Pu(i.x, o.x), Pu(i.y, o.y), g[u + 0], g[u + 1], g[u + 2], g[u + 3]), + o.x = g[u + 0], + o.y = g[u + 1], + i.x = g[u + 2], + i.y = g[u + 3], + 0 === u && !0 === a && n.copy(i); + break; + case "Q": + for (g = Gu(p), + u = 0, + f = g.length; f > u; u += 4) + t.quadraticCurveTo(g[u + 0], g[u + 1], g[u + 2], g[u + 3]), + o.x = g[u + 0], + o.y = g[u + 1], + i.x = g[u + 2], + i.y = g[u + 3], + 0 === u && !0 === a && n.copy(i); + break; + case "T": + for (g = Gu(p), + u = 0, + f = g.length; f > u; u += 2) { + var m = Pu(i.x, o.x) + , C = Pu(i.y, o.y); + t.quadraticCurveTo(m, C, g[u + 0], g[u + 1]), + o.x = m, + o.y = C, + i.x = g[u + 0], + i.y = g[u + 1], + 0 === u && !0 === a && n.copy(i) + } + break; + case "A": + for (g = Gu(p), + u = 0, + f = g.length; f > u; u += 7) { + var y = i.clone(); + i.x = g[u + 5], + i.y = g[u + 6], + o.x = i.x, + o.y = i.y, + qu(t, g[u], g[u + 1], g[u + 2], g[u + 3], g[u + 4], y, i), + 0 === u && !0 === a && n.copy(i) + } + break; + case "m": + for (g = Gu(p), + u = 0, + f = g.length; f > u; u += 2) + i.x += g[u + 0], + i.y += g[u + 1], + o.x = i.x, + o.y = i.y, + 0 === u ? t.moveTo(i.x, i.y) : t.lineTo(i.x, i.y), + 0 === u && !0 === a && n.copy(i); + break; + case "h": + for (g = Gu(p), + u = 0, + f = g.length; f > u; u++) + i.x += g[u], + o.x = i.x, + o.y = i.y, + t.lineTo(i.x, i.y), + 0 === u && !0 === a && n.copy(i); + break; + case "v": + for (g = Gu(p), + u = 0, + f = g.length; f > u; u++) + i.y += g[u], + o.x = i.x, + o.y = i.y, + t.lineTo(i.x, i.y), + 0 === u && !0 === a && n.copy(i); + break; + case "l": + for (g = Gu(p), + u = 0, + f = g.length; f > u; u += 2) + i.x += g[u + 0], + i.y += g[u + 1], + o.x = i.x, + o.y = i.y, + t.lineTo(i.x, i.y), + 0 === u && !0 === a && n.copy(i); + break; + case "c": + for (g = Gu(p), + u = 0, + f = g.length; f > u; u += 6) + t.bezierCurveTo(i.x + g[u + 0], i.y + g[u + 1], i.x + g[u + 2], i.y + g[u + 3], i.x + g[u + 4], i.y + g[u + 5]), + o.x = i.x + g[u + 2], + o.y = i.y + g[u + 3], + i.x += g[u + 4], + i.y += g[u + 5], + 0 === u && !0 === a && n.copy(i); + break; + case "s": + for (g = Gu(p), + u = 0, + f = g.length; f > u; u += 4) + t.bezierCurveTo(Pu(i.x, o.x), Pu(i.y, o.y), i.x + g[u + 0], i.y + g[u + 1], i.x + g[u + 2], i.y + g[u + 3]), + o.x = i.x + g[u + 0], + o.y = i.y + g[u + 1], + i.x += g[u + 2], + i.y += g[u + 3], + 0 === u && !0 === a && n.copy(i); + break; + case "q": + for (g = Gu(p), + u = 0, + f = g.length; f > u; u += 4) + t.quadraticCurveTo(i.x + g[u + 0], i.y + g[u + 1], i.x + g[u + 2], i.y + g[u + 3]), + o.x = i.x + g[u + 0], + o.y = i.y + g[u + 1], + i.x += g[u + 2], + i.y += g[u + 3], + 0 === u && !0 === a && n.copy(i); + break; + case "t": + for (g = Gu(p), + u = 0, + f = g.length; f > u; u += 2) { + m = Pu(i.x, o.x), + C = Pu(i.y, o.y); + t.quadraticCurveTo(m, C, i.x + g[u + 0], i.y + g[u + 1]), + o.x = m, + o.y = C, + i.x = i.x + g[u + 0], + i.y = i.y + g[u + 1], + 0 === u && !0 === a && n.copy(i) + } + break; + case "a": + for (g = Gu(p), + u = 0, + f = g.length; f > u; u += 7) { + y = i.clone(); + i.x += g[u + 5], + i.y += g[u + 6], + o.x = i.x, + o.y = i.y, + qu(t, g[u], g[u + 1], g[u + 2], g[u + 3], g[u + 4], y, i), + 0 === u && !0 === a && n.copy(i) + } + break; + case "Z": + case "z": + t.currentPath.autoClose = !0, + t.currentPath.curves.length > 0 && (i.copy(n), + t.currentPath.currentPoint.copy(i), + r = !0); + break; + default: + console.warn(d) + } + a = !1 + } + return t + }(A), n = "Shape" === o.type ? [o] : o.toShapes(!0), r = new H, a = 0; n.length > a; a++) { + var l = n[a]; + if ("Line" === e || "LineSegments" === e) { + for (var c = l.getPoints(), h = 0; c.length > h; h += 1) { + var d = c[h]; + d.y = -d.y, + i && (d.z = i) + } + if ("LineSegments" === e) { + var p = new jo((new De).setFromPoints(c),t); + r.add(p) + } else if ("Line" === e) { + var g = new Go((new De).setFromPoints(c),t); + r.add(g) + } + } else if ("Mesh" === e) { + for (var u = new ar(l), f = u.getAttribute("position"), m = f.array, C = 0, y = m.length; y > C; C += 3) + m[C + 1] = -m[C + 1], + m[C + 2] = i; + f.needsUpdate = !0; + var v = new Ue(u,t); + r.add(v) + } + } + return r + } + function Gu(A) { + for (var e = A.split(/[\s,]+|(?=\s?[+\-])/), t = 0; e.length > t; t += 1) { + var i = e[t]; + if (i.indexOf(".") !== i.lastIndexOf(".")) + for (var o = i.split("."), n = 2; o.length > n; n += 1) + e.splice(t + n - 1, 0, "0." + o[n]); + e[t] = parseFloat(i) + } + return e + } + function Pu(A, e) { + return A - (e - A) + } + function qu(A, e, t, i, o, n, r, a) { + i = i * Math.PI / 180, + e = Math.abs(e), + t = Math.abs(t); + var s = (r.x - a.x) / 2 + , l = (r.y - a.y) / 2 + , c = Math.cos(i) * s + Math.sin(i) * l + , h = -Math.sin(i) * s + Math.cos(i) * l + , d = e * e + , p = t * t + , g = c * c + , u = h * h + , f = g / d + u / p; + if (f > 1) { + var m = Math.sqrt(f); + d = (e *= m) * e, + p = (t *= m) * t + } + var C = d * u + p * g + , y = Math.sqrt(Math.max(0, (d * p - C) / C)); + o === n && (y = -y); + var v = y * e * h / t + , I = -y * t * c / e + , E = Math.cos(i) * v - Math.sin(i) * I + (r.x + a.x) / 2 + , B = Math.sin(i) * v + Math.cos(i) * I + (r.y + a.y) / 2 + , x = svgAngle(1, 0, (c - v) / e, (h - I) / t) + , S = svgAngle((c - v) / e, (h - I) / t, (-c - v) / e, (-h - I) / t) % (2 * Math.PI); + A.currentPath.absellipse(E, B, e, t, x, x + S, 0 === n, i) + } + function ju(A) { + this.group = A; + var e = new LA(16711680); + this._lineMaterial = new ko({ + color: e, + side: 2 + }), + this._meshMaterial = new jA({ + color: e, + side: 2 + }) + } + function Hu() { + this.axisNet = void 0, + this.visibleByUser = !1 + } + Ou.prototype = { + constructor: Ou, + addTask: function(A) { + this.worker.addItem(A) + }, + processTasks: function(A, e, t) { + var i = this + , o = this.worker; + this.worker.run((function(e, t, n) { + i.working && A(e, (function() { + o.doingCount -= 1, + n(t) + } + )) + } + ), e = e || function() {} + , t = t || function() {} + ) + }, + stop: function() { + this.working = !1 + }, + start: function() { + this.working = !0 + } + }, + ju.prototype.fromJSON = function(A, e) { + for (var t in A) + if (A.hasOwnProperty(t)) { + var i = A[t]; + for (var o in i) + if (i.hasOwnProperty(o)) { + var n = i[o] + , r = n.G.Path; + if (r && r.length > 0) { + var a = n.P.matrix || [0, 0]; + if (n.P.Type && "LINE" === n.P.Type) { + for (var s = "", l = 0, c = r.length; c > l; l += 1) + s += r[l]; + var h = Vu(s, "LineSegments", this._lineMaterial, e); + h.position.setX(a[0]), + h.position.setY(-a[1]), + this.group.add(h), + h.updateMatrixWorld(!0) + } else + for (var d = 0, p = r.length; p > d; d += 1) { + var g = void 0 + , u = Vu(r[d], g = n.G.Fill && n.G.Fill.length === p && 0 !== n.G.Fill[d].length ? "Mesh" : "Line", "Line" === g ? this._lineMaterial : this._meshMaterial, e); + u.position.setX(a[0]), + u.position.setY(-a[1]), + this.group.add(u), + u.updateMatrixWorld(!0) + } + } + } + } + } + , + ju.prototype.setColor = function(A, e) { + if (A) { + var t = new LA(A); + this._lineMaterial.color = t, + e && (this._lineMaterial.opacity = e, + this._lineMaterial.transparent = 1 !== e), + this._meshMaterial.color = t, + e && (this._meshMaterial.opacity = e, + this._meshMaterial.transparent = 1 !== e), + this._lineMaterial.needsUpdate = !0, + this._meshMaterial.needsUpdate = !0 + } + } + , + ju.prototype.enableStayInFront = function() { + this._lineMaterial.transparent = !0, + this._meshMaterial.transparent = !0, + this._lineMaterial.depthTest = !1, + this._meshMaterial.depthTest = !1 + } + , + ju.prototype.disableStayInFront = function() { + this._lineMaterial.transparent = !1, + this._meshMaterial.transparent = !1, + this._lineMaterial.depthTest = !0, + this._meshMaterial.depthTest = !0 + } + , + Hu.prototype.setupColor = function(A, e) { + A && this.axisNet.setColor(A, e) + } + , + Hu.prototype.hide = function() { + this.axisNet && (this.visibleByUser = !1, + this.axisNet.group.visible = !1) + } + , + Hu.prototype.show = function() { + this.axisNet && (this.visibleByUser = !0, + this.axisNet.group.visible = !0) + } + , + Hu.prototype.privateShow = function() { + this.axisNet && (this.axisNet.group.visible = !0) + } + , + Hu.prototype.privateHide = function() { + this.axisNet && (this.axisNet.group.visible = !1) + } + , + Hu.prototype.enableStayInFront = function() { + this.axisNet.enableStayInFront() + } + , + Hu.prototype.disableStayInFront = function() { + this.axisNet.disableStayInFront() + } + ; + var Yu = function() { + this.name = "", + this.componentkeys = [], + this.box = void 0, + this.center = void 0, + this.map = void 0 + } + , Wu = function() { + this.name = "", + this.image = void 0, + this.width = 0, + this.height = 0, + this.sceneWidth = 0, + this.sceneHeight = 0, + this.box = { + x1: 0, + y1: 0, + z1: 0, + x2: 0, + y2: 0, + z2: 0, + offsetX: 0, + offsetY: 0 + }, + this.componentKeys = void 0 + }; + Wu.prototype.clone = function() { + var A = new Wu; + return A.name = this.name, + A.image = this.image, + A.width = this.width, + A.height = this.height, + A.sceneWidth = this.sceneWidth, + A.sceneHeight = this.sceneHeight, + A.box = Object.assign({}, this.box), + A.componentKeys = this.componentKeys ? [].concat(this.componentKeys) : void 0, + A + } + , + Yu.parseFloorInfos = function(A) { + for (var e = [], t = Object.keys(A), i = 0, o = t.length; o > i; i += 1) { + var n = A[t[i]]; + if (n.length > 0) { + var r = new Yu; + r.componentkeys = n, + r.name = t[i], + e.push(r) + } + } + if (e.length > 0) + return e + } + ; + var Ju = function() { + this.floors = void 0, + this.sortedFloors = void 0, + this.factor = 1, + this.baseFloorIndex = -1, + this.averageHeight = 0, + this.center = void 0 + } + , zu = function() { + function A() { + cc(this, A), + this.floors = void 0, + this.floorExplosionInfo = void 0, + this.modelType = void 0, + this.modelKey = void 0, + this.revitFilter = { + OST_CeilingOpening: !0, + OST_FloorOpening: !0, + OST_RoofOpening: !0, + OST_Walls: !0, + OST_StructuralFraming: !0, + OST_CurtainWallPanels: !0, + OST_CurtainWallMullions: !0, + OST_CurtaSystem: !0, + OST_ShaftOpening: !0 + }, + this.ifcFilter = { + IfcWallStandardCase: !0, + IfcWall: !0, + IfcCurtainWall: !0, + IfcBeam: !0, + IfcMember: !0 + } + } + return dc(A, [{ + key: "generateMiniMap", + value: function(A) { + var e = this; + if ((this.modelType === Zc.RVT || this.modelType === Zc.IFC || this.modelType === Zc.MERGE) && this.floors && this.floors.length > 0) { + var t = vc.MiniMapSize + , i = t + , o = A.rendererManager.renderer + , n = new s(t,i) + , r = new g(n.x,n.y,{ + stencilBuffer: !1 + }); + o.setRenderTarget(r); + var a = new p + , l = o.getPixelRatio(); + o.getViewport(a), + o.setPixelRatio(1), + o.setViewport(0, 0, n.width, n.height); + var c = A.getScene() + , h = new y + , d = new y + , u = A.getModel(this.modelKey).getBoundingBoxWorld(); + u.getCenter(h), + u.getSize(d); + var f = Math.ceil(Math.max(d.x, d.y)) + , m = f / 2 + , C = new y(f,f,d.z); + u.setFromCenterAndSize(h, C); + var v = new Ka; + v.up.set(0, 1, 0), + v.position.set(h.x, h.y, u.max.z), + v.lookAt(h.x, h.y, u.min.z), + v.left = -m, + v.right = m, + v.top = m, + v.bottom = -m, + v.near = 1, + v.far = d.z, + v.updateMatrixWorld(!0), + v.updateProjectionMatrix(); + var I = document.createElement("canvas"); + I.width = n.width, + I.height = n.height; + var E = I.getContext("2d") + , B = new Uint8Array(n.width * n.height * 4) + , x = A.getFilter(); + this.floors.forEach((function(a) { + var s = e.findSpecificKeys(a.componentkeys, A); + 0 === s.length && (s = a.componentkeys); + var l = A.getBoundingBoxByIds(s); + l.getCenter(h), + l.getSize(d); + var p = new Wu; + p.box.x1 = l.min.x, + p.box.y1 = l.min.y, + p.box.z1 = l.min.z, + p.box.x2 = l.max.x, + p.box.y2 = l.max.y, + p.box.z2 = l.max.z, + p.box.offsetX = l.min.x - u.min.x, + p.box.offsetY = l.min.y - u.min.y, + p.width = t, + p.height = i, + p.sceneWidth = f, + p.sceneHeight = f, + p.name = a.name, + p.componentKeys = s, + a.map = p, + x.setIsolateList(s, !0), + A.modelManager.applyFilter(), + o.render(c, v), + o.readRenderTargetPixels(r, 0, 0, n.width, n.height, B); + for (var g = i / 2, m = 4 * t, C = new Uint8Array(4 * t), y = 0; g > y; y += 1) { + var S = y * m + , w = (i - y - 1) * m; + C.set(B.subarray(S, S + m)), + B.copyWithin(S, w, w + m), + B.set(C, w) + } + var M = new Uint8ClampedArray(B.buffer) + , b = new ImageData(M,n.width,n.height); + E.putImageData(b, 0, 0), + p.image = I.toDataURL() + } + )), + x.clearIsolation(), + o.setRenderTarget(null), + o.setPixelRatio(l), + o.setViewport(a.x, a.y, a.width, a.height) + } + } + }, { + key: "findSpecificKeys", + value: function(A, e) { + for (var t = [], i = 0, o = A.length; o > i; i += 1) { + var n = e.modelManager.getComponent(A[i]); + if (n && n.length > 0) { + var r = n[0] + , a = r.buildInCategory + , s = r.type; + (a && this.revitFilter[a] || s && this.ifcFilter[s]) && t.push(A[i]) + } + } + return t + } + }, { + key: "getMimiMaps", + value: function() { + if (this.serverMapData) + return { + msg: "success", + data: this.serverMapData.data + }; + if (this.floors && this.floors.length > 0) { + for (var A = [], e = 0, t = this.floors.length; t > e; e += 1) { + var i = this.floors[e].map; + i && A.push(i.clone()) + } + if (A.length > 0) + return { + msg: "success", + data: A + } + } + return { + msg: "该模型不支持小地图" + } + } + }, { + key: "getServerMimiMaps", + value: function(A) { + var e = this.model.dataUrl.floorMapUrl() + , t = this.model.accessToken + , i = this; + if (this.floors && this.floors.length > 0) + if (this.serverMapData) + A({ + msg: "success", + data: i.serverMapData.data + }); + else { + var o = { + url: e, + success: function(e) { + var t; + "SUCCESS" === (t = "string" == typeof e ? JSON.parse(e) : e).code ? (i.serverMapData = t, + A({ + msg: "success", + data: t.data + })) : "FAILURE" === t.code ? setTimeout((function() { + i.getServerMimiMaps(A) + } + ), 3e3) : A({ + msg: "获取模型小地图出错" + }) + }, + error: function() { + A({ + msg: "该模型不支持小地图" + }) + } + }; + t && (o.headers = { + Authorization: t + }), + _d(o) + } + } + }]), + A + }() + , Zu = function() { + this.leftChild = null, + this.rightChild = null, + this.boundingBox = null, + this.level = -1, + this.components = [] + }; + Zu.prototype.init = function(A) { + if (A && (void 0 !== A.axis && (this.level = A.axis), + A.left && (this.leftChild = new Zu, + this.leftChild.init(A.left[0] ? A.left[0] : A.left)), + A.right && (this.rightChild = new Zu, + this.rightChild.init(A.right[0] ? A.right[0] : A.right)), + A.box && !A.items && (this.boundingBox = new aA((new y).fromArray(A.box.min),(new y).fromArray(A.box.max))), + A.items)) + for (var e = 0; A.items.length > e; e += 1) + this.components.push(A.items[e].key) + } + , + Zu.prototype.intersect = function(A, e) { + if (this.boundingBox) { + if (!1 === A.intersectsBox(this.boundingBox)) + return; + this.leftChild && this.leftChild.intersect(A, e), + this.rightChild && this.rightChild.intersect(A, e); + for (var t = 0; this.components.length > t; t += 1) + e.push(this.components[t]) + } else + for (var i = 0; this.components.length > i; i += 1) + e.push(this.components[i]) + } + , + Zu.prototype.frustumIntersect = function(A, e, t) { + if (this.boundingBox) { + var i = this.boundingBox; + if (t && !t.equals(Bc) && (i = this.boundingBox.clone()).applyMatrix4(t), + !1 === A.intersectsBox(i)) + return; + this.leftChild && this.leftChild.frustumIntersect(A, e, t), + this.rightChild && this.rightChild.frustumIntersect(A, e, t); + for (var o = 0; this.components.length > o; o += 1) + e.push(this.components[o]) + } else + for (var n = 0; this.components.length > n; n += 1) + e.push(this.components[n]) + } + , + Zu.prototype.destroy = function() { + this.leftChild && this.leftChild.destroy(), + this.rightChild && this.rightChild.destroy(), + this.leftChild = null, + this.rightChild = null, + this.boundingBox = null, + this.level = -1, + this.components = [] + } + ; + var Xu = function(A) { + jr.call(this), + this.handler = A, + this.model = A.model, + this.dataVersion = this.model.dataVersion, + this.storage = this.model.getStorage(), + this.url = A.model.dataUrl, + this.offLine = A.model.offLine, + this.fileLoader = A.model.fileLoader, + this.descriptor = null, + this.loader = new bu(this), + this.Textureloader = new bu(this), + this.jsonLoader = new bu(this), + this.loadTaskCount = 0, + this.maxLoadTaskCount = 0, + this.loadTextureCount = 0, + this.maxLoadTextureCount = 0, + this.textruesLoaded = !1, + this.dataLoaded = !1, + this.taskComponentManager = new Ou(this,"component"), + this.taskReuseNodeManager = new Ou(this,"component"), + this.taskGeometrieManager = new Ou(this,"geometrie"), + this.taskComponentNodeManager = new Ou(this,"nodes"), + this.taskMaterialManager = new Ou(this,"material"), + this.taskTexturesManager = new Ou(this,"textures"), + this.fileKeyFromModelKey = {}, + this.enableCompressedTexture = !1, + this.enableSmallTexture = !1, + this.startCallback = null, + this.progressCallback = null, + this.finishCallback = null, + this.progress = { + total: 0, + loaded: 0, + failed: 0 + }, + this.requests = {} + }; + Xu.prototype.destroy = function() { + for (var A in this.requests) + this.requests.hasOwnProperty(A) && (this.requests[A].abort && this.requests[A].abort(), + delete this.requests[A]); + this.taskComponentManager.stop(), + this.taskComponentManager = null, + this.taskGeometrieManager.stop(), + this.taskGeometrieManager = null, + this.taskMaterialManager.stop(), + this.taskMaterialManager = null, + this.taskTexturesManager.stop(), + this.taskTexturesManager = null, + this.url = null, + this.model = null, + this.fileLoader = null, + this.descriptor = null, + this.handler = null, + this.startCallback = null, + this.progressCallback = null, + this.finishCallback = null, + this.descriptor && this.descriptor.destroy() + } + , + Xu.prototype.getStorage = function() { + return this.storage + } + , + Xu.prototype.getDescriptor = function() { + return this.descriptor + } + , + Xu.prototype.setNotifyProgress = function(A) { + this.notifyProgress = A + } + , + Xu.prototype.load = function(A, e, t) { + this.startCallback = A, + this.progressCallback = e, + this.finishCallback = t, + this.loadData() + } + , + Xu.prototype.loadData = function() { + var A = this.model + , e = A.getConfig() + , t = e.scene + , i = e.animation; + if (!t || !t.components || !t.geometries && (!t.batchedGeometries && !t.instancedGeometries || 1 > t.batchedGeometries.length && 1 > t.instancedGeometries.length) || !t.materials || !t.textures) + return A.setEmptyScene(!0), + Bh.error("scene is null,modelKey is ", A.modelKey), + void A.dispatchEventEx({ + type: Rc.ON_LOAD_EMPTY_SCENE, + modelKey: A.modelKey + }); + var o = 0 + , n = 0 + , r = 0 + , a = t.components.length || 0 + , s = t.materials.length || 0 + , l = t.textures.length || 0 + , c = t.lights && t.lights.length || 0 + , h = t.reuseNodes && t.reuseNodes.length || 0 + , d = [] + , p = [] + , g = [] + , u = [] + , f = [] + , m = [] + , C = [] + , y = t.textures + , v = [] + , I = []; + if (this.map = {}, + ap(this.dataVersion, "2.0.0")) { + for (var E = 0; a > E; E += 1) + t.components[E].fileKey ? d.push(t.components[E].fileKey) : A.dispatchEventEx({ + type: Tc.SCENE_NOT_CLOSE, + modelKey: A.modelKey + }); + for (var B = 0; s > B; B += 1) + t.materials[B].fileKey ? p.push(t.materials[B].fileKey) : A.dispatchEventEx({ + type: Tc.SCENE_NOT_CLOSE, + modelKey: A.modelKey + }) + } else + d = t.components, + t.geometries, + p = t.materials, + Array.isArray(t.nodes) && (C = t.nodes), + I = t.reuseNodes || []; + if (t.map && (this.map = t.map), + t.lights && t.lights.length > 0 && (m = t.lights), + t.trees.length > 0) + for (var x = 0; t.trees.length > x; x += 1) { + var S = t.trees[x]; + "partition" === S.type && v.push(S.fileKey) + } + if (i && (o = i.bones.length, + n = 1, + r = 1, + g = i.bones, + u.push(i.clips), + f.push(i.nodes)), + this.maxLoadTaskCount = 0, + this.maxLoadTaskCount += a, + this.maxLoadTaskCount += s, + this.maxLoadTaskCount += o, + this.maxLoadTaskCount += n, + this.maxLoadTaskCount += r, + this.maxLoadTaskCount += c, + this.maxLoadTaskCount += v.length, + this.maxLoadTaskCount += h, + this.maxLoadTaskCount += C.length, + 1 > this.maxLoadTaskCount) + return Bh.info("Nothing to load ", A.modelKey), + void A.dispatchEventEx({ + type: Tc.SCENE_NOTHING_TO_LOAD, + modelKey: A.modelKey + }); + this.progress.total += this.maxLoadTaskCount, + this.startCallback && this.startCallback(), + Bh.time("数据加载时间"), + this._loadComponent(d), + this._loadMaterial(p), + this._loadComponentNode(C), + this._loadReuseNode(I), + vc.EnableTextureLoading && l > 0 ? (this.maxLoadTextureCount += l, + this._loadTextures(y)) : this._onLoadTexture(), + this._loadKDTree(v), + this._loadClips(u), + this._loadBones(g), + this._loadNodes(f), + c && this._loadLights(m), + this.offLine && this.loadAttribute(), + e.axis && this._loadAxisNet(e.axis), + this.loadFloorInfo(this.model.modelKey), + this.loadSceneAndGeos(e) + } + , + Xu.prototype.loadSceneAndGeos = function(A) {} + , + Xu.prototype.getSceneTaskCount = function(A) { + return 0 + } + , + Xu.prototype._loadLightmapConfig = function(A, e) { + var t = this.model + , i = this.descriptor; + i && this.fileLoader.load(A, (function(A) { + var o; + try { + o = JSON.parse(A) + } catch (A) { + return void console.log("Lightmap config data exceptions!") + } + void 0 !== o.count.lightmapNum && o.count.lightmapNum > 0 && (t.lightmapNum = o.count.lightmapNum, + t.lightmap = !0, + i.lightmap = !0, + vc.Instance = !1, + vc.EnableLightmap = !0), + e && e() + } + )) + } + , + Xu.prototype._onTaskFinished = function() { + var A = this.model; + this.loadTaskCount += 1; + var e = this.dealProgressSegment(A, this.loadTaskCount); + this.notifyProgress && (this.progressCallback && this.progressCallback({ + total: this.maxLoadTaskCount, + loaded: e, + modelKey: this.model.modelKey + })); + this.maxLoadTaskCount > this.loadTaskCount || (this.dataLoaded = !0, + this.textruesLoaded && (Bh.timeEnd("数据加载时间"), + this.finishCallback && this.finishCallback())) + } + , + Xu.prototype._onLoadTexture = function() { + this.loadTextureCount += 1, + this.maxLoadTextureCount > this.loadTextureCount || (this.textruesLoaded = !0, + this.dataLoaded && (Bh.timeEnd("数据加载时间"), + this.finishCallback && this.finishCallback())) + } + , + Xu.prototype._loadScene = function(A) { + var e = this + , t = this.model + , i = this.url + , o = this.fileLoader; + o.setResponseType("arraybuffer"), + o.load(i.sceneUrl(A), (function(t) { + e._parseScene(t, A), + e._onTaskFinished() + } + ), void 0, (function(A) { + t.dispatchEvent({ + type: Tc.LOAD_ERROR, + errorType: Tc.LOAD_SCENE_ERROR, + event: A + }), + e._onTaskFinished() + } + )) + } + , + Xu.prototype._parseScene = function(A, e) { + var t = new Loader.SceneReader(A); + this.descriptor.mapSceneReader[e] = t, + t = null + } + , + Xu.prototype._loadLine = function() { + var A = this + , e = this.model + , t = this.url + , i = this.fileLoader; + i.setResponseType("arraybuffer"), + i.load(t.lineUrl(), (function(e) { + A._parseLine(e), + A._onTaskFinished() + } + ), void 0, (function(t) { + e.dispatchEvent({ + type: Tc.LOAD_ERROR, + errorType: Tc.LOAD_MATERIAL_ERROR, + event: t + }), + A._onTaskFinished() + } + )) + } + , + Xu.prototype._parseLine = function(A) { + for (var e = new Loader.LineReader(A), t = 0, i = e.header.lineCount; i > t; ++t) { + var o = e.getPtBuffer(t) + , n = e.getIdxBuffer(t); + if (void 0 !== o && void 0 !== n) { + var r = e.getLineData(t); + if (0 === r.lineType) { + for (var a = [], s = 1, l = n.length; l > s; s++) + a.push(n[s - 1]), + a.push(n[s]); + a.length && (n = a) + } + this.descriptor.cacheReferencedMeshBufferData("line-" + r.line_id, { + P: o, + I: n + }) + } else + Bh.log("Error Geometry!") + } + e = null + } + , + Xu.prototype._parseMaterialBinary = function(A) { + var e, t = this.url, i = this.model.materialManager, o = i.materials, n = i.textures, r = new Loader.MaterialReader(A), a = r.materialCount, s = this, l = []; + if (a >= 0) { + var c = this.model.manager.scene; + for (e = 0; a > e; ++e) { + var h, d = {}, p = r.getMaterial(e); + if (void 0 !== p.color && (d.color = p.color), + void 0 !== p.opacity && (d.opacity = p.opacity, + 1 > p.opacity && (d.transparent = !0)), + void 0 !== p.side && p.side && (d.side = 2), + void 0 !== p.emissive && (d.emissive = p.emissive), + void 0 !== p.environment && (d.envMapIntensity = p.environment), + void 0 !== p.roughness && (d.roughness = p.roughness, + d.originRoughness = p.roughness), + void 0 !== p.metalness && (d.metalness = p.metalness, + d.originMetalness = p.metalness), + vc.IBL ? (d.iblProbe = c.iblProbe, + (h = new ImageBasedLighting.IBLMaterial(d)).type = "IBL") : h = Kd.createStandardMaterial(d), + h.name = e, + o[e] = h, + d = null, + vc.EnableTextureLoading) { + var g = null; + p.texture_n > 0 && (g = r.getTexture(p.texture_id[0])), + g && l.push({ + id: e, + data: g + }) + } + } + if (l.length > 0) { + for (a = this.maxLoadTextureCount = l.length, + e = 0; a > e; e += 1) + this._parseTexture(t, l[e], n); + l = null + } else + s._onLoadTexture(); + if (this.model.lightmap) { + var u = this.model.lightmapNum; + for (this.maxLoadTextureCount += u, + e = 0; u > e; e += 1) { + var f = this._loadTexture(t.textureUrl("lightmap-rgbm" + e + ".png"), (function() { + s._onLoadTexture() + } + ), void 0, (function() { + s._onLoadTexture() + } + )); + i.lightmaps[e] = f + } + } + r = null + } + } + , + Xu.prototype._parseMaterialJson = function(A) { + var e, t = this.url, i = this.model.materialManager, o = i.materials, n = i.textures, r = new Loader.MaterialReaderJson(A), a = r.count, s = this, l = []; + if (a >= 0) { + var c = this.model.manager.scene; + for (e = 0; a > e; ++e) { + var h, d = {}, p = r.getMaterial(e), g = p.parameters; + if (void 0 !== g.color && (d.color = g.color), + void 0 !== g.opacity && (d.opacity = g.opacity, + 1 > g.opacity && (d.transparent = !0)), + void 0 !== g.side && "double" === g.side && (d.side = 2), + void 0 !== g.emissive && (d.emissive = g.emissive), + void 0 !== g.environment && (d.envMapIntensity = g.environment), + void 0 !== g.roughness && (d.roughness = g.roughness, + d.originRoughness = g.roughness), + void 0 !== g.metalness && (d.metalness = g.metalness, + d.originMetalness = g.metalness), + void 0 !== g.refractionRatio && (d.refractionRatio = g.refractionRatio), + void 0 !== g.imageFade && (d.imageFade = g.imageFade), + this.model.lightmap && (d.lights = !1), + vc.IBL ? (d.iblProbe = c.iblProbe, + (h = new ImageBasedLighting.IBLMaterial(d)).type = "IBL") : (h = Kd.createStandardMaterial(d)).refreshUniforms(), + h.name = e, + o[e] = h, + d = null, + vc.EnableTextureLoading) { + var u = [] + , f = p.textures; + for (var m in f) { + "reliefMap" == m && f.bumpMap || u.push({ + type: m, + data: f[m] + }) + } + u.length > 0 && l.push({ + id: e, + dataArray: u + }) + } + } + if (l.length > 0) { + for (a = l.length, + e = 0; a > e; e += 1) { + this.maxLoadTextureCount += (u = l[e].dataArray).length + } + for (e = 0; a > e; e += 1) { + for (var C = l[e].id, y = [], v = 0, I = (u = l[e].dataArray).length; I > v; v++) + this._parseTextureJson(t, u[v], y); + n[C] = y + } + l = null + } else + s._onLoadTexture(); + if (this.model.lightmap) { + var E = this.model.lightmapNum; + for (this.maxLoadTextureCount += E, + e = 0; E > e; e += 1) { + var B = this._loadTexture(t.lightmapTexUrl("lightmap-rgbm" + e + ".png"), (function() { + s._onLoadTexture() + } + ), void 0, (function() { + s._onLoadTexture() + } + )); + i.lightmaps[e] = B + } + } + r = null + } + } + , + Xu.prototype._loadTexture = function(A, e, t, i) { + var o, n = Yr.Handlers.get(A), r = this; + return null !== n ? o = n.load(A, e) : (o = new d, + (n = new _r).setCrossOrigin("anonymous"), + n.load(A, (function(A) { + o.image = Kd.ensurePowerOfTwo(A), + o.needsUpdate = !0, + e && e(o) + } + ), t, (function(A) { + void 0 !== i && i(A), + r.model.dispatchEvent({ + type: Tc.LOAD_ERROR, + errorType: Tc.LOAD_TEXTURE_ERROR, + event: A + }) + } + ))), + o + } + , + Xu.prototype._loadCompressedTexture = function(A, e, t, i) {} + , + Xu.prototype._loadTextureByCrypto = function(A, e, t, i) { + var o, n = Yr.Handlers.get(A), r = this; + return null !== n ? o = n.load(A, e) : (o = new d, + (n = new TEST.CryptoResourceLoader).loadURL(A, (function(A) { + var t = new Blob([A],{ + type: "jpeg" + }) + , n = new Image; + n.onload = function() { + o.image = Kd.ensurePowerOfTwo(n), + o.needsUpdate = !0, + e && e(o) + } + , + n.onerror = function(A) { + i && i(A), + r.model.dispatchEvent({ + type: Tc.LOAD_ERROR, + errorType: Tc.LOAD_TEXTURE_ERROR, + event: A + }) + } + , + n.src = URL.createObjectURL(t) + } + ), (function(A) { + void 0 !== i && i(A), + r.model.dispatchEvent({ + type: Tc.LOAD_ERROR, + errorType: Tc.LOAD_TEXTURE_ERROR, + event: A + }) + } + ))), + o + } + , + Xu.prototype._parseTexture = function(A, e, t) { + var i = window.TEST || {} + , o = e.id + , n = e.data + , r = n.id + n.file_name_ext; + this.textureLoader = this.enableCompressedTexture && n.dds ? this._loadCompressedTexture : i.CryptoResourceLoader ? this._loadTextureByCrypto : this._loadTexture; + var a = this; + this.textureLoader(A.textureUrl(r), (function(A) { + A.repeat.fromArray([n.scale_u, n.scale_v]), + A.offset.fromArray([n.offset_u, n.offset_v]), + A.setRotateAngle && A.setRotateAngle(n.angle), + n.repeat_u && (A.wrapS = 1e3), + n.repeat_v && (A.wrapT = 1e3), + A && (t[o] = A), + a._onLoadTexture() + } + ), void 0, (function() { + a._onLoadTexture() + } + )) + } + , + Xu.prototype._parseTextureJson = function(A, e, t) { + var i = window.TEST || {} + , o = e.type + , n = e.data + , r = A.textureUrl(n.sourceFile) + , a = this.enableSmallTexture && n.texture_small; + if (!a && this.enableCompressedTexture && n.dds) + this.textureLoader = this._loadCompressedTexture; + else if (this.textureLoader = i.CryptoResourceLoader ? this._loadTextureByCrypto : this._loadTexture, + a) { + var s = r.lastIndexOf("."); + r = r.substring(0, s) + "_s" + r.substring(s) + } + var l = this; + this.textureLoader(r, (function(A) { + A.repeat.fromArray([n.scale[0], n.scale[1]]), + A.offset.fromArray([n.offset[0], n.offset[1]]), + A.setRotateAngle && A.setRotateAngle(n.angle), + n.repeatU && (A.wrapS = 1e3), + n.repeatV && (A.wrapT = 1e3), + A.texturetype = o, + "reliefMap" == o && (A.texturetype = "bumpMap"), + n.dataType && "NormalMap" == n.dataType && (A.texturetype = "normalMap"), + n.alpha && (A.texturetype = "alphaMap"), + n.depth && (A.depth = n.depth), + A && t.push(A), + l._onLoadTexture() + } + ), void 0, (function() { + l._onLoadTexture() + } + )) + } + , + Xu.prototype._loadUV2 = function() { + var A = this + , e = this.url + , t = this.fileLoader; + t.setResponseType("arraybuffer"), + t.load(e.uv2Url(), (function(e) { + A.uv2Buffer = new Uint16Array(e), + A._onTaskFinished() + } + ), void 0, (function(e) { + A._onTaskFinished() + } + )), + t.setResponseType(""), + t.load(e.uv2MapItemUrl(), (function(e) { + A.uv2MapItem = JSON.parse(e), + A._onTaskFinished() + } + ), void 0, (function(e) { + A._onTaskFinished() + } + )) + } + , + Xu.prototype.getUV2ById = function(A, e) { + if (this.uv2MapItem && e) { + var t = this.uv2MapItem[A]; + if (t) { + var i = t.uv1Scale + , o = t.uv1Translation + , n = t.uv1ByteOffset / 2 + , r = 2 * e; + if (this.uv2Buffer) { + for (var a = this.uv2Buffer.slice(n, n + r), s = [], l = 0; r > l; l += 2) + s.push(i[0] * (a[l] / 65535) + o[0]), + s.push(i[1] * (a[l + 1] / 65535) + o[1]); + return { + lightmapIdx: t.lightmapIdx, + uv2: s + } + } + } + } + } + , + Xu.prototype._loadSymbol = function() { + var A = this + , e = this.url + , t = this.fileLoader; + t.setResponseType("arraybuffer"), + t.load(e.symbolUrl(), (function(e) { + A.parseSymbol(e), + A._onTaskFinished() + } + ), void 0, (function(e) { + A.model.dispatchEvent({ + type: Tc.LOAD_ERROR, + errorType: Tc.LOAD_SYMBOL_ERROR, + event: e + }), + A._onTaskFinished() + } + )) + } + , + Xu.prototype.parseSymbol = function(A) { + this.descriptor.symbolReader = new Loader.SymbolReader(A) + } + , + Xu.prototype._loadOctree = function(A, e) { + var t = null + , i = this.model.configLoader.transformInfos.transformMatrix; + this.model.configLoader.transformInfos.octreeTransformed && (t = new M).getInverse(i), + A && this._loadOctreeBy(t, !1), + e && this._loadOctreeBy(t, !0) + } + , + Xu.prototype._loadOctreeBy = function(A, e) { + var t, i = this, o = this.url, n = this.fileLoader; + t = o.octreeUrl(e ? "i" : "o"), + n.setResponseType("arraybuffer"), + n.load(t, (function(t) { + i._parseOctree(t, A, e), + i._onTaskFinished() + } + ), void 0, (function(A) { + i.model.dispatchEvent({ + type: Tc.LOAD_ERROR, + errorType: Tc.LOAD_OCTREEINNER_ERROR, + event: A + }), + i._onTaskFinished() + } + )) + } + , + Xu.prototype._parseOctree = function(A, e, t) { + this.descriptor.octreeRootNode[t ? "inner" : "outer"] = this._getOctreeRootNode(A, e) + } + , + Xu.prototype._getOctreeRootNode = function(A, e) { + function t(A, t) { + e && t.boundingBox.applyMatrix4(e), + A.boundingBoxWorld = t.boundingBox.clone(), + A.min = t.boundingBox.min, + A.max = t.boundingBox.max, + A.center = t.boundingBox.getCenter(), + A.size = t.boundingBox.getSize().lengthSq(), + A.childStart = t.child_s, + A.childEnd = t.child_e + } + function i(A, e) { + A.octType = 0, + e.center.x > A.center.x && (A.octType += 1), + e.center.y > A.center.y && (A.octType += 2), + e.center.z > A.center.z && (A.octType += 4) + } + var o = null + , n = new Loader.OctreeReader(A); + if (n.getCount() > 0) { + var r = n.getNode(0); + t(o = new Loader.OctreeNode(r.cell_id,0), r), + function A(e, o) { + for (var n = e.childEnd, r = e.childStart; n > r; ++r) { + var a = o.getNode(r) + , s = new Loader.OctreeNode(a.cell_id,e.depth); + t(s, a), + e.add(s), + i(s, e), + s.updateMaxDepth(), + A(s, o) + } + }(o, n) + } + return n = null, + o + } + , + Xu.prototype._loadUserId = function() { + var A = this + , e = this.url + , t = this.fileLoader; + t.setResponseType("arraybuffer"), + t.load(e.userIdUrl(), (function(e) { + A._parseUserId(e), + A._onTaskFinished() + } + ), void 0, (function(e) { + A.model.dispatchEvent({ + type: Tc.LOAD_ERROR, + errorType: Tc.LOAD_USERID_ERROR, + event: e + }), + A._onTaskFinished() + } + )) + } + , + Xu.prototype._parseUserId = function(A) { + this.descriptor.userIdReader = new Loader.IdReader(A) + } + , + Xu.prototype._loadUserData = function() { + var A = this + , e = this.url + , t = this.fileLoader; + t.setResponseType(""), + t.load(e.userDataUrl(), (function(e) { + A._parseUserData(e), + A._onTaskFinished() + } + ), void 0, (function(e) { + A.model.dispatchEvent({ + type: Tc.LOAD_ERROR, + errorType: Tc.LOAD_USERDATA_ERROR, + event: e + }), + A._onTaskFinished() + } + )) + } + , + Xu.prototype._parseUserData = function(A) { + this.descriptor.userDataReader = new Loader.UserDataReader(A) + } + , + Xu.prototype._loadCamera = function() { + var A = this + , e = this.url + , t = this.fileLoader; + t.setResponseType(""), + t.load(e.cameraUrl(), (function(e) { + A._parseCamera(e), + A._onTaskFinished() + } + ), void 0, (function(e) { + A.model.dispatchEvent({ + type: Tc.LOAD_ERROR, + errorType: Tc.LOAD_CAMERA_ERROR, + event: e + }), + A._onTaskFinished() + } + )) + } + , + Xu.prototype._parseCamera = function(A) { + var e = this.model.configLoader.transformInfos.transformMatrix; + new Loader.CameraReader(A).parse(this.model, e) + } + , + Xu.prototype._parseGeo = function(A, e) { + for (var t = new Loader.MPKReader(A), i = new M, o = 0, n = t.header.meshCount; n > o; ++o) { + var r = t.getPtBuffer(o) + , a = t.getIdxBuffer(o) + , s = t.getNormalBuffer(o) + , l = t.getMeshData(o) + , c = t.getUVBuffer(o); + null != r && null != a ? (0 !== l.baseScale && (r = new Float32Array(r), + i.identity(), + i.setPosition(new y(l.baseX,l.baseY,l.baseZ)), + i.scale(new y(l.baseScale,l.baseScale,l.baseScale)), + GeomUtil.applyMatrix4ToBuffer(i, r)), + this.descriptor.cacheReferencedMeshBufferData(l.mesh_id, { + P: r, + I: a, + N: s, + UV: c + }), + this.descriptor.cacheReferencedMeshGeoIds(e, l.mesh_id)) : Logger.log("Error Geometry!") + } + t = null + } + , + Xu.prototype._loadBorderline = function(A) { + var e = this + , t = this.url + , i = this.fileLoader + , o = t.borderLineUrl(A ? 1 : 0); + i.setResponseType("arraybuffer"), + i.load(o, (function(t) { + e._parseBorderLine(t, A), + e._onTaskFinished() + } + ), void 0, (function(A) { + e.model.dispatchEvent({ + type: Tc.LOAD_ERROR, + errorType: Tc.LOAD_MATERIAL_ERROR, + event: A + }), + e._onTaskFinished() + } + )) + } + , + Xu.prototype._parseBorderLine = function(A, e) { + for (var t = new Loader.LineReader(A), i = [], o = 0, n = t.header.lineCount; n > o; ++o) { + var r = t.getLineData(o); + i.push({ + meshId: r.line_id, + positionStart: r.ptOffset / 4, + positionCount: 3 * r.ptCount, + indexStart: r.idxOffset / 4, + indexCount: r.idxCount + }) + } + this.descriptor.cacheBorderLine(e, { + P: t.ptBuffer, + I: t.idxBuffer, + IndexInfos: i + }), + t = null + } + , + Xu.prototype._isLoadGeoBorderlines = function() { + var A = this.model.getConfig().metadata; + return !(!vc.BorderLineBatched || !A.outline_mpk) + } + , + Xu.prototype.getAllBorderlineCount = function() { + var A = this.model.getConfig().metadata; + return this._isLoadGeoBorderlines() ? A.outline_mpk : A.outline_0 + A.outline_1 + } + , + Xu.prototype._loadAllBorderlines = function(A) { + this._isLoadGeoBorderlines() ? A.outline_mpk && this._loadAllGeoBorderLines(A.outline_mpk) : (A.outline_0 && this._loadBorderline(!1), + A.outline_1 && this._loadBorderline(!0)) + } + , + Xu.prototype.delayLoadBorderlines = function(A) { + this.model.getConfig(); + this._isLoadGeoBorderlines() ? this._delayLoadGeoBorderlines(A) : this._delayLoadTogetherBorderlines(A) + } + , + Xu.prototype._delayLoadGeoBorderlines = function(A) { + var e = this.model.getConfig().metadata; + this.startCallback = null, + this.progressCallback = null, + this.finishCallback = A, + this.loadTaskCount = 0, + this.maxLoadTaskCount = e.outline_mpk, + e.outline_mpk && this._loadAllGeoBorderLines(e.outline_mpk) + } + , + Xu.prototype._delayLoadTogetherBorderlines = function(A) { + var e = this.model.getConfig().metadata; + this.startCallback = null, + this.progressCallback = null, + this.finishCallback = A, + this.loadTaskCount = 0, + this.maxLoadTaskCount = e.outline_0 + e.outline_1, + e.outline_0 && this._loadBorderline(!1), + e.outline_1 && this._loadBorderline(!0) + } + , + Xu.prototype._loadAllGeoBorderLines = function(A) { + this.mpkBorderLineTaskManager || (this.mpkBorderLineTaskManager = new Ou); + for (var e = 0; A > e; ++e) + this.mpkBorderLineTaskManager.addTask(e); + this.mpkBorderLineTaskManager.processTasks(this._loadGeoBorderLine.bind(this)) + } + , + Xu.prototype._loadGeoBorderLine = function(A, e) { + var t = this + , i = this.fileLoader + , o = this.url + , n = A >= this.model.getConfig().metadata.mpk_shared_index; + i.setResponseType("arraybuffer"), + i.load(o.mpkBorderLineUrl(A), (function(A) { + t._parseGeoBorderLine(A, n), + e(), + t._onTaskFinished() + } + ), void 0, (function(A) { + t._onTaskFinished() + } + )) + } + , + Xu.prototype._parseGeoBorderLine = function(A, e) { + for (var t = new Loader.LineReader(A), i = [], o = 0, n = t.header.lineCount; n > o; ++o) { + var r = t.getLineData(o); + i.push({ + meshId: r.line_id, + positionStart: r.ptOffset / 4, + positionCount: 3 * r.ptCount, + indexStart: r.idxOffset / 4, + indexCount: r.idxCount + }) + } + this.descriptor.cacheBorderLine(e, { + P: t.ptBuffer, + I: t.idxBuffer, + IndexInfos: i + }), + t = null + } + , + Xu.prototype.dealProgressSegment = function(A, e) { + return vc.MergeComponent ? e * A.progressPercentage.load : e + } + , + Xu.prototype._loadWireframe = function(A) { + var e = this; + if (vc.getDataFromIndexedDB && !this.offLine) { + for (var t = this.url, i = [], o = 0; A.length > o; o += 1) + i.push(t.mpkUrl(A[o])); + var n = this.model.getStorage(); + n && n.getBatch(i, (function(A) { + for (var t = function(t) { + if (A[i[t]]) + if (!0 === A[i[t]].split) { + var o = A[i[t]].list + , s = new Uint8Array(A[i[t]].length); + n.getBatch(o, (function(A) { + for (var n = !0, r = 0; o.length > r; r += 1) + A[o[r]] ? s.set(new Uint8Array(A[o[r]]), 4e7 * r) : (n = !1, + Bh.error("获取分割几何失败")); + if (n) { + var a = i[t].indexOf("fileKey="); + e._parseWireframe(s.buffer, i[t].slice(a + 8)), + Bh.debug("load geo from local"), + e._onTaskFinished() + } else { + var l = e.taskGeometrieManager; + if (-1 === (a = i[t].indexOf("fileKey="))) + return void Bh.error("url is not has fileKey"); + l.addTask(i[t].slice(a + 8)), + Bh.debug("load geo from net"), + e.taskGeometrieManager.processTasks(e.loadWireframe.bind(e)) + } + } + ), (function() { + Bh.error("获取分割几何失败") + } + )) + } else + a = i[t].indexOf("fileKey="), + e._parseWireframe(A[i[t]], i[t].slice(a + 8)), + Bh.debug("load geo from local"), + e._onTaskFinished(); + else { + if (r = e.taskGeometrieManager, + -1 === (a = i[t].indexOf("fileKey="))) + return Bh.error("url is not has fileKey"), + { + v: void 0 + }; + r.addTask(i[t].slice(a + 8)), + Bh.debug("load geo from net") + } + }, o = 0; i.length > o; o += 1) { + var r, a, s = t(o); + if ("object" === lc(s)) + return s.v + } + e.taskGeometrieManager.processTasks(e.loadWireframe.bind(e)) + } + ), (function() { + for (var t = e.taskGeometrieManager, i = 0; A.length > i; i += 1) + t.addTask(A[i]); + t.processTasks(e.loadWireframe.bind(e)) + } + )) + } else { + for (var r = this.taskGeometrieManager, a = 0; A.length > a; a += 1) + r.addTask(A[a]); + r.processTasks(e.loadWireframe.bind(e)) + } + } + , + Xu.prototype._loadGeo = function(A) { + var e = this; + if (vc.getDataFromIndexedDB && !this.offLine) { + for (var t = this.url, i = [], o = 0; A.length > o; o += 1) + i.push(t.mpkUrl(A[o])); + var n = this.model.getStorage(); + n && n.getBatch(i, (function(A) { + for (var t = function(t) { + if (A[i[t]]) + if (!0 === A[i[t]].split) { + var o = A[i[t]].list + , s = new Uint8Array(A[i[t]].length); + n.getBatch(o, (function(A) { + for (var n = 0; o.length > n; n += 1) + A[o[n]] ? s.set(new Uint8Array(A[o[n]]), 4e7 * n) : Bh.error("获取分割几何失败"); + var r = i[t].indexOf("fileKey="); + e._parseGeometrie(s.buffer, i[t].slice(r + 8)), + Bh.debug("load geo from local"), + e._onTaskFinished() + } + ), (function() { + Bh.error("获取分割几何失败") + } + )) + } else + a = i[t].indexOf("fileKey="), + e._parseGeometrie(A[i[t]], i[t].slice(a + 8)), + Bh.debug("load geo from local"), + e._onTaskFinished(); + else { + if (r = e.taskGeometrieManager, + -1 === (a = i[t].indexOf("fileKey="))) + return Bh.error("url is not has fileKey"), + { + v: void 0 + }; + r.addTask(i[t].slice(a + 8)), + Bh.debug("load geo from net") + } + }, o = 0; i.length > o; o += 1) { + var r, a, s = t(o); + if ("object" === lc(s)) + return s.v + } + e.taskGeometrieManager.processTasks(e.loadGeometrie.bind(e)) + } + ), (function() { + for (var t = e.taskGeometrieManager, i = 0; A.length > i; i += 1) + t.addTask(A[i]); + t.processTasks(e.loadGeometrie.bind(e)) + } + )) + } else { + for (var r = this.taskGeometrieManager, a = 0; A.length > a; a += 1) + r.addTask(A[a]); + r.processTasks(e.loadGeometrie.bind(e)) + } + } + , + Xu.prototype._loadComponentNode = function(A) { + var e = this; + if (vc.getDataFromIndexedDB && !this.offLine) { + for (var t = this.url, i = [], o = 0; A.length > o; o += 1) + i.push(t.mpkUrl(A[o])); + var n = this.model.getStorage(); + n && n.getBatch(i, (function(A) { + for (var t = function(t) { + if (A[i[t]]) + if (!0 === A[i[t]].split) { + var o = A[i[t]].list + , s = new Uint8Array(A[i[t]].length); + n.getBatch(o, (function(A) { + for (var n = 0; o.length > n; n += 1) + A[o[n]] ? s.set(new Uint8Array(A[o[n]]), 4e7 * n) : Bh.error("获取分割node失败"); + var r = i[t].indexOf("fileKey="); + e._parseComponentNode(s.buffer, i[t].slice(r + 8)), + Bh.debug("load geo from local"), + e._onTaskFinished() + } + ), (function() { + Bh.error("获取分割node失败") + } + )) + } else + a = i[t].indexOf("fileKey="), + e._parseComponentNode(A[i[t]], i[t].slice(a + 8)), + Bh.debug("load geo from local"), + e._onTaskFinished(); + else { + if (r = e.taskComponentNodeManager, + -1 === (a = i[t].indexOf("fileKey="))) + return Bh.error("url is not has fileKey"), + { + v: void 0 + }; + r.addTask(i[t].slice(a + 8)), + Bh.debug("load component.node from net") + } + }, o = 0; i.length > o; o += 1) { + var r, a, s = t(o); + if ("object" === lc(s)) + return s.v + } + e.taskComponentNodeManager.processTasks(e.loadComponentNode.bind(e)) + } + ), (function() { + for (var t = e.taskComponentNodeManager, i = 0; A.length > i; i += 1) + t.addTask(A[i]); + t.processTasks(e.loadComponentNode.bind(e)) + } + )) + } else { + for (var r = this.taskComponentNodeManager, a = 0; A.length > a; a += 1) + r.addTask(A[a]); + r.processTasks(e.loadComponentNode.bind(e)) + } + } + , + Xu.prototype._loadKDTree = function(A) { + var e = this; + if (vc.getDataFromIndexedDB && !this.offLine) { + for (var t = this.url, i = [], o = 0; A.length > o; o += 1) + i.push(t.kdTreeUrl(A[o])); + var n = this.model.getStorage(); + n && n.getBatch(i, (function(A) { + for (var t = 0; i.length > t; t += 1) { + var o = i[t].indexOf("fileKey="); + if (-1 === o) + return void Bh.error("url is not has fileKey"); + var n = i[t].slice(o + 8); + A[i[t]] ? (e._parseKDTree(A[i[t]], n), + Bh.debug("load kdTree from local"), + e._onTaskFinished()) : (e.loadKDTree(n, (function() {} + )), + Bh.debug("load kdtree from net")) + } + } + ), (function() { + for (var t = 0; A.length > t; t += 1) + e.loadKDTree(A[t], (function() {} + )) + } + )) + } else + for (var r = 0; A.length > r; r += 1) + e.loadKDTree(A[r], (function() {} + )) + } + , + Xu.prototype._loadLights = function(A) { + var e = this; + if (vc.getDataFromIndexedDB && !this.offLine) { + for (var t = this.url, i = [], o = 0; A.length > o; o += 1) + i.push(t.lightUrl(A[o])); + var n = this.model.getStorage(); + n && n.getBatch(i, (function(A) { + for (var t = 0; i.length > t; t += 1) { + var o = i[t].indexOf("fileKey="); + if (-1 === o) + return void Bh.error("url is not has fileKey"); + var n = i[t].slice(o + 8); + A[i[t]] ? (e._parseLight(A[i[t]], n), + Bh.debug("load light from local"), + e._onTaskFinished()) : (e.loadLight(n, (function() {} + )), + Bh.debug("load kdtree from net")) + } + } + ), (function() { + for (var t = 0; A.length > t; t += 1) + e.loadLight(A[t], (function() {} + )) + } + )) + } else + for (var r = 0; A.length > r; r += 1) + e.loadLight(A[r], (function() {} + )) + } + , + Xu.prototype._loadBones = function(A) { + var e = this; + if (vc.getDataFromIndexedDB && !this.offLine) { + for (var t = this.url, i = [], o = 0; A.length > o; o += 1) + i.push(t.bonesUrl(A[o])); + var n = this.model.getStorage(); + n && n.getBatch(i, (function(A) { + for (var t = 0; i.length > t; t += 1) + if (A[i[t]]) + e._parseBones(A[i[t]]), + Bh.debug("load Bones from local"), + e._onTaskFinished(); + else { + var o = i[t].indexOf("fileKey="); + if (-1 === o) + return void Bh.error("url is not has fileKey"); + e.loadBones(i[t].slice(o + 8), (function() {} + )), + Bh.debug("load Bones from net") + } + } + ), (function() { + for (var t = 0; A.length > t; t += 1) + e.loadBones(A[t], (function() {} + )) + } + )) + } else { + for (var r = this.taskComponentManager, a = 0; A.length > a; a += 1) + r.addTask(A[a]); + r.processTasks(e.loadBones.bind(e)) + } + } + , + Xu.prototype._loadClips = function(A) { + var e = this; + if (vc.getDataFromIndexedDB && !this.offLine) { + for (var t = this.url, i = [], o = 0; A.length > o; o += 1) + i.push(t.clipsUrl(A[o])); + var n = this.model.getStorage(); + n && n.getBatch(i, (function(A) { + for (var t = 0; i.length > t; t += 1) + if (A[i[t]]) + e._parseClips(A[i[t]]), + Bh.debug("load Clips from local"), + e._onTaskFinished(); + else { + var o = i[t].indexOf("fileKey="); + if (-1 === o) + return void Bh.error("url is not has fileKey"); + e.loadClips(i[t].slice(o + 8), (function() {} + )), + Bh.debug("load Clips from net") + } + } + ), (function() { + for (var t = 0; A.length > t; t += 1) + e.loadClips(A[t], (function() {} + )) + } + )) + } else { + for (var r = this.taskComponentManager, a = 0; A.length > a; a += 1) + r.addTask(A[a]); + r.processTasks(e.loadClips.bind(e)) + } + } + , + Xu.prototype._loadNodes = function(A) { + var e = this; + if (vc.getDataFromIndexedDB && !this.offLine) { + for (var t = this.url, i = [], o = 0; A.length > o; o += 1) + i.push(t.nodesUrl(A[o])); + var n = this.model.getStorage(); + n && n.getBatch(i, (function(A) { + for (var t = 0; i.length > t; t += 1) + if (A[i[t]]) + e._parseNodes(A[i[t]]), + Bh.debug("load Nodes from local"), + e._onTaskFinished(); + else { + var o = i[t].indexOf("fileKey="); + if (-1 === o) + return void Bh.error("url is not has fileKey"); + e.loadNodes(i[t].slice(o + 8), (function() {} + )), + Bh.debug("load Nodes from net") + } + } + ), (function() { + for (var t = 0; A.length > t; t += 1) + e.loadNodes(A[t], (function() {} + )) + } + )) + } else { + for (var r = this.taskComponentManager, a = 0; A.length > a; a += 1) + r.addTask(A[a]); + r.processTasks(e.loadNodes.bind(e)) + } + } + , + Xu.prototype._loadComponent = function(A) { + var e = this; + if (vc.getDataFromIndexedDB && !this.offLine) { + for (var t = this.url, i = [], o = 0; A.length > o; o += 1) + i.push(t.mpkUrl(A[o])); + var n = this.model.getStorage(); + n && n.getBatch(i, (function(A) { + for (var t = 0; i.length > t; t += 1) { + if (-1 === (r = i[t].indexOf("fileKey=")) && !e.offLine) + return void Bh.error("url is not has fileKey"); + var o = i[t].slice(r + 8); + if (A[i[t]]) + e._parseComponent(A[i[t]], o), + Bh.debug("load com from local"), + e._onTaskFinished(); + else { + var n = e.taskComponentManager; + if (e.offLine) { + var r; + if (-1 === (r = i[t].indexOf("data/"))) + return void Bh.error("url is not has data/"); + n.addTask(i[t].slice(r + 5)) + } else + n.addTask(o); + n.processTasks(e.loadComponent.bind(e)), + Bh.debug("load com from net") + } + } + } + ), (function() { + for (var t = e.taskComponentManager, i = 0; A.length > i; i += 1) + t.addTask(A[i]); + t.processTasks(e.loadComponent.bind(e)) + } + )) + } else { + for (var r = this.taskComponentManager, a = 0; A.length > a; a += 1) + r.addTask(A[a]); + r.processTasks(e.loadComponent.bind(e)) + } + } + , + Xu.prototype._loadReuseNode = function(A) { + var e = this; + if (vc.getDataFromIndexedDB) { + for (var t = this.url, i = [], o = 0; A.length > o; o += 1) + i.push(t.mpkUrl(A[o])); + var n = this.model.getStorage(); + n && n.getBatch(i, (function(A) { + for (var t = 0; i.length > t; t += 1) + if (A[i[t]]) + e._parseReuseNodes(A[i[t]]), + Bh.debug("load com from local"), + e._onTaskFinished(); + else { + var o = e.taskReuseNodeManager; + if (e.offLine) { + if (-1 === (n = i[t].indexOf("data/"))) + return void Bh.error("url is not has data/"); + o.addTask(i[t].slice(n + 5)) + } else { + var n; + if (-1 === (n = i[t].indexOf("fileKey="))) + return void Bh.error("url is not has fileKey"); + o.addTask(i[t].slice(n + 8)) + } + o.processTasks(e.loadReuseNode.bind(e)), + Bh.debug("load com from net") + } + } + ), (function() { + for (var t = e.taskReuseNodeManager, i = 0; A.length > i; i += 1) + t.addTask(A[i]); + t.processTasks(e.loadReuseNode.bind(e)) + } + )) + } else { + for (var r = this.taskReuseNodeManager, a = 0; A.length > a; a += 1) + r.addTask(A[a]); + r.processTasks(e.loadReuseNode.bind(e)) + } + } + , + Xu.prototype._loadMaterial = function(A) { + var e = this; + if (vc.getDataFromIndexedDB && !this.offLine) { + for (var t = this.url, i = [], o = 0; A.length > o; o += 1) + i.push(t.mpkUrl(A[o])); + var n = this.model.getStorage(); + n && n.getBatch(i, (function(A) { + for (var t = 0; i.length > t; t += 1) + if (A[i[t]]) + e._parseMaterial(A[i[t]]), + Bh.debug("load mat from local"), + e._onTaskFinished(); + else { + var o = e.taskMaterialManager + , n = i[t].indexOf("fileKey="); + if (-1 === n) + return void Bh.error("url is not has fileKey"); + o.addTask(i[t].slice(n + 8)), + o.processTasks(e.loadMaterial.bind(e)), + Bh.debug("load mat from net") + } + } + ), (function() { + for (var t = e.taskMaterialManager, i = 0; A.length > i; i += 1) + t.addTask(A[i]); + t.processTasks(e.loadMaterial.bind(e)) + } + )) + } else { + for (var r = this.taskMaterialManager, a = 0; A.length > a; a += 1) + r.addTask(A[a]); + r.processTasks(e.loadMaterial.bind(e)) + } + } + , + Xu.prototype._loadTextures = function(A) { + var e = this.model.materialManager.textures + , t = this; + if (vc.getDataFromIndexedDB && !this.offLine) { + for (var i = this.url, o = [], n = 0; A.length > n; n += 1) + o.push(i.mpkUrl(A[n])); + var r = this.model.getStorage(); + r && r.getBatch(o, (function(A) { + for (var i = 0; o.length > i; i += 1) + if (A[o[i]]) { + var n, r = function() { + if (-1 === (n = o[i].indexOf("fileKey="))) + return Bh.error("url is not has fileKey"), + { + v: void 0 + }; + var r = A[o[i]]; + A[o[i]]instanceof Blob || (r = new Blob([A[o[i]]],{ + type: "text/plain" + })); + var a = o[i].slice(n + 8) + , s = new d; + Bh.debug("load tex from local"), + e[a] = s; + var l = document.createElement("img"); + s.wrapS = s.wrapT = 1e3, + l.onload = function(e) { + "string" != typeof A[o[i]] && window.URL.revokeObjectURL(l.src), + t.model.textureNeedsUpdate = !0, + s.image = Kd.ensurePowerOfTwo(l), + t._onLoadTexture() + } + , + l.onerror = function(A) { + t.model.dispatchEventEx({ + type: Tc.LOAD_TEXTURE_ERROR + }) + } + , + l.src = "string" == typeof A[o[i]] ? A[o[i]] : window.URL.createObjectURL(r), + s.image = l, + s.needsUpdate = !0 + }(); + if ("object" === lc(r)) + return r.v + } else { + var a = t.taskTexturesManager + , s = o[i].indexOf("fileKey="); + if (-1 === s) + return void Bh.error("url is not has fileKey"); + a.addTask(o[i].slice(s + 8)), + a.processTasks(t.loadTextures.bind(t)), + Bh.debug("load tex from net") + } + } + ), (function() { + for (var e = t.taskTexturesManager, i = 0; A.length > i; i += 1) + e.addTask(A[i]); + e.processTasks(t.loadTextures.bind(t)) + } + )) + } else { + for (var a = this.taskTexturesManager, s = 0; A.length > s; s += 1) + a.addTask(A[s]); + a.processTasks(t.loadTextures.bind(t)) + } + } + , + Xu.prototype._loadAxisNet = function(A) { + if (A) { + var e = this; + if (vc.getDataFromIndexedDB && !this.offLine) { + var t = this.url.axisNetUrl(A) + , i = this.model.getStorage(); + i && i.getBatch([t], (function(i) { + if (i[t]) + e._parseAxisNet(i[t]), + Bh.debug("load axisnet from local"); + else { + if (-1 === t.indexOf("fileKey=")) + return void Bh.error("url is not has fileKey"); + e.loadAxisNet(A), + Bh.debug("load axisnet from net") + } + } + ), (function() { + e.loadAxisNet(A) + } + )) + } else + e.loadAxisNet(A) + } + } + , + Xu.prototype._parseWireframe = function(A, e) { + var t = new Lu.GeometryReader(A,this.dataVersion) + , i = this.descriptor; + if (i) { + for (var o = t.geoCount, n = 0; o > n; n += 1) { + var r = t.geomMap[n]; + void 0 !== r.position && void 0 !== r.index ? i.cacheReferencedMeshWireframeData(r.geoId, r) : Bh.error("Error Geometry!") + } + t = null + } + } + , + Xu.prototype._parseGeometrie = function(A, e) { + var t = this.fileKeyFromModelKey[e] || "" + , i = new ku.GeometryReader(A,this.dataVersion) + , o = this.descriptor; + if (o) { + for (var n = i.geoCount, r = 0; n > r; r += 1) { + var a = i.geomMap[r]; + void 0 !== a.position && void 0 !== a.index && void 0 !== a.normal ? (vc.DEBUG && window.geoidToFileKeyMap && (window.geoidToFileKeyMap[a.geoId] = e), + o.cacheReferencedMeshBufferData(t + a.geoId, a)) : Bh.error("Error Geometry!") + } + i = null + } + } + , + Xu.prototype._parseComponentNode = function(A, e) { + var t = this.fileKeyFromModelKey[e] || "" + , i = new ku.NodesReader(A,this.dataVersion) + , o = this.descriptor; + if (o) { + for (var n = i.nodeCount, r = 0; n > r; r += 1) { + var a = i.geomMap[r]; + void 0 !== a.matrix && void 0 !== a.material && void 0 !== a.nodeId ? o.cacheReferencedMeshComponentNodeData(t + a.nodeId, a) : Bh.error("Error Node!") + } + i = null + } + } + , + Xu.prototype._parseMaterial = function(A, e) { + var t = this.descriptor; + if (t) { + var i = new Du(A,this.dataVersion); + if (Array.isArray(i.materialMap)) { + var o = i.materialCount; + if (0 > o) + return; + for (var n = 0; o > n; n += 1) { + var r = i.materialMap[n]; + t.cacheReferencedMeshMaterialData(r.matId, r) + } + } else + for (var a in i.materialMap) + t.cacheReferencedMeshMaterialData(a, i.materialMap[a]); + i = null + } + } + , + Xu.prototype._parseComponent = function(A, e) { + if (A) { + var t = new Uu(A) + , i = t.compArr.length + , o = this.descriptor; + if (o) { + for (var n = 0; i > n; n += 1) { + var r = t.compArr[n]; + o.cacheReferencedMeshComponentData(r.key, r) + } + t = null + } + } else + Bh.error("没有数据") + } + , + Xu.prototype._parseKDTree = function(A, e) { + var t = {}; + t = "string" == typeof A ? JSON.parse(A) : A, + !this.model.kdTreeNode && t && (this.model.kdTreeNode = new Zu, + this.model.kdTreeNode.init(t)) + } + , + Xu.prototype._parseLight = function(A, e) { + var t, i = []; + if (t = "string" == typeof A ? JSON.parse(A) : A) + for (var o = 0, n = t.length; n > o; o += 1) { + var r = t[o] + , a = void 0 + , s = r.pos || [0, 0, 0] + , l = void 0; + switch (r.type) { + case Fc.DirectionalLight: + (a = new Ra((new LA).fromArray(r.diffuse),.5)).position.set(s[0] - r.lookat[0], s[1] - r.lookat[1], s[2] - r.lookat[2]), + a.name = r.parent, + 0 === r.ambient[0] && 0 === r.ambient[1] && 0 === r.ambient[2] || (l = new Ta((new LA).fromArray(r.ambient),.5)); + break; + case Fc.PointLight: + (a = new Fa((new LA).fromArray(r.diffuse))).position.set(s[0], s[1], s[2]), + a.name = r.parent, + 0 === r.ambient[0] && 0 === r.ambient[1] && 0 === r.ambient[2] || (l = new Ta((new LA).fromArray(r.ambient),.5)); + break; + case Fc.SpotLight: + (a = new ba((new LA).fromArray(r.diffuse),.5)).position.set(s[0] - r.lookat[0], s[1] - r.lookat[1], s[2] - r.lookat[2]), + a.angle = r.cone_inn || Math.PI / 2, + a.name = r.parent, + 0 === r.ambient[0] && 0 === r.ambient[1] && 0 === r.ambient[2] || (l = new Ta((new LA).fromArray(r.ambient),.5)) + } + a && i.push(a), + l && i.push(l) + } + this.model.addLights(i) + } + , + Xu.prototype._parseNodes = function(A, e) { + var t = this.descriptor; + if (t) { + var i = {}; + i = "string" == typeof A ? JSON.parse(A) : A, + Bh.debug("nodes", i), + t.cacheReferencedMeshNodesData(i) + } + } + , + Xu.prototype._parseClips = function(A, e) { + var t = this.descriptor; + if (t) { + var i = {}; + i = "string" == typeof A ? JSON.parse(A) : A, + Bh.debug("clips", i), + t.cacheReferencedMeshClipsData(i) + } + } + , + Xu.prototype._parseBones = function(A, e) { + var t = new ku.BoneReader(A) + , i = this.descriptor; + if (i) { + for (var o = t.boneCount, n = 0; o > n; n += 1) { + var r = t.boneMap[n]; + Bh.debug("bones", r), + i.cacheReferencedMeshBoneBufferData(r.geoId, r) + } + t = null + } + } + , + Xu.prototype._parseAxisNet = function(A) { + var e = this.model.getBoundingBoxWorld() + , t = 0; + e && (t = e.min.z); + var i = this.model._getNodeGroup(gp.AXISNET); + i.visible = !1; + var o = new ju(i); + o.fromJSON(A, t); + var n = new Hu; + n.axisNet = o, + this.model.axisNetManager = n + } + , + Xu.prototype.loadWireframe = function(A, e) { + var t = this + , i = this.loader + , o = this.url + , n = this.model + , r = vc.GeoWorkerUrl; + if (vc.UseGeoWorker) + i.setResponseType("arraybuffer"), + i.load(o.mpkUrl(A), (function(A) { + var i = new Worker(r); + i.onmessage = function(A) { + var i = A.data; + for (var o in i) + i.hasOwnProperty(o); + e(), + t._onTaskFinished() + } + , + i.postMessage({ + msg: A + }) + } + )); + else { + i.setResponseType("arraybuffer"), + i.setCacheViable(!this.offLine); + var a = i.load(o.mpkUrl(A), (function(i) { + t._parseWireframe(i, A), + Bh.debug("geo load from online"), + e(), + t._onTaskFinished() + } + ), void 0, (function(A) { + n.dispatchEventEx({ + type: Tc.LOAD_GEOMETRY_ERROR, + modelKey: n.modelKey + }) + } + )); + t.requests.loadGeometrie = a + } + } + , + Xu.prototype.loadGeometrie = function(A, e) { + var t = this + , i = this.loader + , o = this.url + , n = this.model; + i.setResponseType("arraybuffer"), + i.setCacheViable(!this.offLine); + var r = i.load(o.mpkUrl(A), (function(i) { + t._parseGeometrie(i, A), + Bh.debug("geo load from online"), + e(), + t._onTaskFinished() + } + ), void 0, (function(A) { + n.dispatchEventEx({ + type: Tc.LOAD_GEOMETRY_ERROR, + modelKey: n.modelKey + }), + e(), + t._onTaskFinished() + } + )); + t.requests.loadGeometrie = r + } + , + Xu.prototype.loadComponentNode = function(A, e) { + var t = this + , i = this.loader + , o = this.url + , n = this.model; + i.setResponseType("arraybuffer"), + i.setCacheViable(!this.offLine); + var r = i.load(o.mpkUrl(A), (function(i) { + t._parseComponentNode(i, A), + Bh.debug("geo load from online"), + e(), + t._onTaskFinished() + } + ), void 0, (function(A) { + n.dispatchEventEx({ + type: Tc.LOAD_COMPONENTNODE_ERROR, + modelKey: n.modelKey + }), + e(), + t._onTaskFinished() + } + )); + t.requests.loadComponentNode = r + } + , + Xu.prototype.loadMaterial = function(A, e) { + var t = this + , i = this.loader + , o = this.url + , n = this.model + , r = vc.GeoWorkerUrl; + if (vc.UseGeoWorker) + i.setResponseType("arraybuffer"), + i.load(o.mpkUrl(A), (function(A) { + var i = new Worker(r); + i.onmessage = function(A) { + var i = A.data; + for (var o in i) + i.hasOwnProperty(o); + e(), + t._onTaskFinished() + } + , + i.postMessage({ + msg: A + }) + } + )); + else { + rp(t.dataVersion, "1") ? i.setResponseType("json") : i.setResponseType("arraybuffer"), + i.setCacheViable(!this.offLine); + var a = i.load(o.mpkUrl(A), (function(A) { + t._parseMaterial(A), + Bh.debug("met load from online"), + e(), + t._onTaskFinished() + } + ), void 0, (function(A) { + n.dispatchEventEx({ + type: Tc.LOAD_MATERIAL_ERROR, + modelKey: n.modelKey + }) + } + )); + t.requests.loadMaterial = a + } + } + , + Xu.prototype.loadTextures = function(A, e) { + var t = this.model.materialManager.textures + , i = this + , o = this.Textureloader + , n = this.url + , r = this.model + , a = vc.GeoWorkerUrl; + if (vc.UseGeoWorker) + o.load(n.mpkUrl(A), (function(A) { + var t = new Worker(a); + t.onmessage = function(A) { + var t = A.data; + for (var o in t) + t.hasOwnProperty(o); + e(), + i._onTaskFinished() + } + , + t.postMessage({ + msg: A + }) + } + )); + else { + o.setResponseType("arraybuffer"), + o.setCacheViable(!this.offLine); + var s = o.load(n.textureUrl(A), (function(o) { + var n = o; + o instanceof Blob || (n = new Blob([o],{ + type: "text/plain" + })), + Bh.debug("tex load from online"); + var a = new d; + t[A] = a, + a.wrapS = a.wrapT = 1e3; + var s = document.createElement("img"); + s.onload = function(A) { + "string" != typeof n && window.URL.revokeObjectURL(s.src), + a.image = Kd.ensurePowerOfTwo(s), + i._onLoadTexture(), + e(), + i.model.textureNeedsUpdate = !0 + } + , + s.onerror = function(A) { + r.dispatchEventEx({ + type: Tc.LOAD_TEXTURE_ERROR, + modelKey: r.modelKey + }) + } + , + s.src = "string" == typeof n ? n : window.URL.createObjectURL(n), + a.image = s, + a.needsUpdate = !0 + } + ), void 0, (function(A) { + r.dispatchEventEx({ + type: Tc.LOAD_TEXTURE_ERROR, + modelKey: r.modelKey + }) + } + )); + i.requests.loadTextures = s + } + } + , + Xu.prototype.loadComponent = function(A, e) { + var t = this + , i = this.jsonLoader + , o = this.model + , n = this.url + , r = vc.GeoWorkerUrl; + if (vc.UseGeoWorker) + i.setResponseType("json"), + i.load(n.mpkUrl(A), (function(A) { + var i = new Worker(r); + i.onmessage = function(A) { + var i = A.data; + for (var o in i) + i.hasOwnProperty(o); + e(), + t._onTaskFinished() + } + , + i.postMessage({ + msg: A + }) + } + ), (function(A) {} + )); + else { + i.setResponseType("json"), + vc.useGzip && i.setResponseType("arraybuffer"), + i.setCacheViable(!0); + var a = i.load(n.mpkUrl(A), (function(i) { + t._parseComponent(i, A), + Bh.debug("component load from online"), + e(), + t._onTaskFinished() + } + ), void 0, (function(A) { + o.dispatchEventEx({ + type: Tc.LOAD_COMPONENT_ERROR, + modelKey: o.modelKey + }) + } + )); + t.requests.loadComponent = a + } + } + , + Xu.prototype.loadKDTree = function(A, e) { + var t = this + , i = this.loader + , o = this.model + , n = this.url + , r = vc.GeoWorkerUrl; + if (vc.UseGeoWorker) + i.setResponseType("json"), + i.load(n.mpkUrl(A), (function(A) { + var i = new Worker(r); + i.onmessage = function(A) { + var i = A.data; + for (var o in i) + i.hasOwnProperty(o); + e(), + t._onTaskFinished() + } + , + i.postMessage({ + msg: A + }) + } + ), (function(A) {} + )); + else { + i.setResponseType("json"), + i.setCacheViable(!this.offLine); + var a = i.load(n.kdTreeUrl(A), (function(i) { + t._parseKDTree(i, A), + Bh.debug("kdtree load from online"), + e(), + t._onTaskFinished() + } + ), void 0, (function(A) { + o.dispatchEventEx({ + type: Tc.LOAD_COMPONENT_ERROR, + modelKey: o.modelKey + }) + } + )); + t.requests.loadKDTree = a + } + } + , + Xu.prototype.loadLight = function(A, e) { + var t = this + , i = this.loader + , o = this.model + , n = this.url; + i.setResponseType("json"), + i.setCacheViable(!this.offLine); + var r = i.load(n.lightUrl(A), (function(i) { + t._parseLight(i, A), + Bh.debug("light load from online"), + e(), + t._onTaskFinished() + } + ), void 0, (function(A) { + o.dispatchEventEx({ + type: Tc.LOAD_COMPONENT_ERROR, + modelKey: o.modelKey + }) + } + )); + t.requests.loadLight = r + } + , + Xu.prototype.loadBones = function(A, e) { + var t = this + , i = this.loader + , o = this.model + , n = this.url + , r = vc.GeoWorkerUrl; + if (vc.UseGeoWorker) + i.setResponseType("arraybuffer"), + i.load(n.bonesUrl(A), (function(A) { + var i = new Worker(r); + i.onmessage = function(A) { + var i = A.data; + for (var o in i) + i.hasOwnProperty(o); + e(), + t._onTaskFinished() + } + , + i.postMessage({ + msg: A + }) + } + ), (function(A) {} + )); + else { + i.setResponseType("arraybuffer"), + i.setCacheViable(!this.offLine); + var a = i.load(n.bonesUrl(A), (function(A) { + t._parseBones(A), + Bh.debug("bones load from online"), + e(), + t._onTaskFinished() + } + ), void 0, (function(A) { + o.dispatchEventEx({ + type: Tc.LOAD_COMPONENT_ERROR, + modelKey: o.modelKey + }) + } + )); + t.requests.loadBones = a + } + } + , + Xu.prototype.loadClips = function(A, e) { + var t = this + , i = this.loader + , o = this.model + , n = this.url + , r = vc.GeoWorkerUrl; + if (vc.UseGeoWorker) + i.setResponseType("json"), + i.load(n.mpkUrl(A), (function(A) { + var i = new Worker(r); + i.onmessage = function(A) { + var i = A.data; + for (var o in i) + i.hasOwnProperty(o); + e(), + t._onTaskFinished() + } + , + i.postMessage({ + msg: A + }) + } + ), (function(A) {} + )); + else { + i.setResponseType("json"), + i.setCacheViable(!this.offLine); + var a = i.load(n.clipsUrl(A), (function(A) { + t._parseClips(A), + Bh.debug("Clips load from online"), + e(), + t._onTaskFinished() + } + ), void 0, (function(A) { + o.dispatchEventEx({ + type: Tc.LOAD_COMPONENT_ERROR, + modelKey: o.modelKey + }) + } + )); + t.requests.loadClips = a + } + } + , + Xu.prototype.loadNodes = function(A, e) { + var t = this + , i = this.loader + , o = this.model + , n = this.url + , r = vc.GeoWorkerUrl; + if (vc.UseGeoWorker) + i.setResponseType("json"), + i.load(n.mpkUrl(A), (function(A) { + var i = new Worker(r); + i.onmessage = function(A) { + var i = A.data; + for (var o in i) + i.hasOwnProperty(o); + e(), + t._onTaskFinished() + } + , + i.postMessage({ + msg: A + }) + } + ), (function(A) {} + )); + else { + i.setResponseType("json"), + i.setCacheViable(!this.offLine); + var a = i.load(n.nodesUrl(A), (function(A) { + t._parseNodes(A), + Bh.debug("Nodes load from online"), + e(), + t._onTaskFinished() + } + ), void 0, (function(A) { + o.dispatchEventEx({ + type: Tc.LOAD_COMPONENT_ERROR, + modelKey: o.modelKey + }) + } + )); + t.requests.loadNodes = a + } + } + , + Xu.prototype.loadAttribute = function(A, e) { + var t = this + , i = this.loader + , o = this.model + , n = this.url + , r = vc.GeoWorkerUrl; + if (vc.UseGeoWorker) + i.setResponseType("json"), + i.load(n.mpkUrl(A), (function(A) { + var i = new Worker(r); + i.onmessage = function(A) { + var i = A.data; + for (var o in i) + i.hasOwnProperty(o); + e(), + t._onTaskFinished() + } + , + i.postMessage({ + msg: A + }) + } + ), (function(A) {} + )); + else { + i.setResponseType("json"), + i.setCacheViable(!this.offLine); + var a = i.load(n.attributeUrl(), (function(A) { + if (A instanceof String) + try { + A = JSON.parse(A) + } catch (A) {} + o.attributes = A, + Bh.debug("Attribute load from online") + } + ), void 0, (function(A) { + o.dispatchEventEx({ + type: Tc.LOAD_COMPONENT_ERROR, + modelKey: o.modelKey + }) + } + )); + t.requests.loadAttribute = a + } + } + , + Xu.prototype.loadGeopkOnDemand = function(A, e, t) { + this.loadTaskCount = 0, + this.maxLoadTaskCount = A.length, + this._loadingOnDemand = !0, + this.finishCallback = t; + var i = this; + if (vc.getDataFromIndexedDB && !this.offLine) { + for (var o = this.url, n = [], r = 0; A.length > r; r += 1) + n.push(o.mpkUrl(A[r])); + var a = this.model.getStorage(); + a && a.getBatch(n, (function(A) { + for (var t = function(e) { + if (A[n[e]]) + if (!0 === A[n[e]].split) { + var t = A[n[e]].list + , o = new Uint8Array(A[n[e]].length); + a.getBatch(t, (function(A) { + for (var r = 0; t.length > r; r += 1) + A[t[r]] ? o.set(new Uint8Array(A[t[r]]), 4e7 * r) : Bh.error("获取分割几何失败"); + var a = n[e].indexOf("fileKey="); + i._parseGeometrie(o.buffer, n[e].slice(a + 8)), + Bh.debug("load geo from local"), + i._onTaskFinished() + } + ), (function() { + Bh.error("获取分割几何失败") + } + )) + } else + s = n[e].indexOf("fileKey="), + i._parseGeometrie(A[n[e]], n[e].slice(s + 8)), + Bh.debug("load geo from local"), + i._onTaskFinished(); + else { + if (r = i.taskGeometrieManager, + -1 === (s = n[e].indexOf("fileKey="))) + return Bh.error("url is not has fileKey"), + { + v: void 0 + }; + r.addTask(n[e].slice(s + 8)), + Bh.debug("load geo from net") + } + }, o = 0; n.length > o; o += 1) { + var r, s, l = t(o); + if ("object" === lc(l)) + return l.v + } + i.taskGeometrieManager.processTasks(i.loadGeometrie.bind(i), e) + } + ), (function() { + for (var t = i.taskGeometrieManager, o = 0; A.length > o; o += 1) + t.addTask(A[o]); + t.processTasks(i.loadGeometrie.bind(i), e) + } + )) + } else { + for (var s = this.taskGeometrieManager, l = 0; A.length > l; l += 1) + s.addTask(A[l]); + s.processTasks(i.loadGeometrie.bind(i), e) + } + } + , + Xu.prototype.loadAxisNet = function(A, e) { + var t = this + , i = this.loader + , o = this.url + , n = this.model; + rp(t.dataVersion, "1") ? i.setResponseType("json") : i.setResponseType("arraybuffer"), + i.setCacheViable(!this.offLine); + var r = i.load(o.axisNetUrl(A), (function(A) { + t._parseAxisNet(A), + Bh.debug("axis net load from online"), + e && e() + } + ), void 0, (function(A) { + n.dispatchEventEx({ + type: Tc.LOAD_AXISNET_ERROR, + modelKey: n.modelKey + }) + } + )); + t.requests.loadAxisNet = r + } + , + Xu.prototype.loadFloorInfo = function(A, e) { + var t = this; + this._loadFloorInfoFromDB(A, (function(i) { + i && i.data ? (t._parseFloorInfo(i), + e && e(!0)) : t._loadFloorInfoFromNet(A, (function(A) { + A ? (t._parseFloorInfo(A), + e && e(!0)) : e && e(!1) + } + )) + } + )) + } + , + Xu.prototype._loadFloorInfoFromDB = function(A, e) { + if (vc.getDataFromIndexedDB && !this.offLine) { + var t = this.url.floorInfoUrl(A) + , i = this.model.getStorage(); + i && i.getBatch([t], (function(A) { + A[t] ? (e(A[t]), + Bh.debug("load floorinfo from local")) : e() + } + ), (function() { + e() + } + )) + } else + e() + } + , + Xu.prototype._loadFloorInfoFromNet = function(A, e) { + var t = new bu(this) + , i = this.url + , o = this.model; + this.model.accessToken && t.setRequestHeader({ + Authorization: this.model.accessToken + }), + rp(this.dataVersion, "1") ? t.setResponseType("json") : t.setResponseType("arraybuffer"), + t.setCacheViable(!this.offLine); + var n = t.load(i.floorInfoUrl(A), (function(A) { + Bh.debug("floor info load from online"), + e && e(A) + } + ), void 0, (function(t) { + o.dispatchEventEx({ + type: Tc.LOAD_FLOORINFO_ERROR, + modelKey: A + }), + e && e() + } + )); + this.requests.loadFloorInfo = n + } + , + Xu.prototype._parseReuseNodes = function(A, e) { + if (A) { + vc.useGzip && (A = JSON.parse(uh.ab2str(pako.ungzip(A)))); + var t = this.descriptor; + t && (t.referencedMeshCache.reuseNodes = A) + } else + Bh.error("没有数据") + } + , + Xu.prototype.loadReuseNode = function(A, e) { + var t = this + , i = this.jsonLoader + , o = this.model + , n = this.url; + i.setResponseType("json"), + vc.useGzip && i.setResponseType("arraybuffer"), + i.setCacheViable(!0); + i.load(n.mpkUrl(A), (function(A) { + t._parseReuseNodes(A), + Bh.debug("component load from online"), + e(), + t._onTaskFinished() + } + ), void 0, (function(A) { + o.dispatchEventEx({ + type: Tc.LOAD_COMPONENT_ERROR, + modelKey: o.modelKey + }) + } + )) + } + , + Xu.prototype._parseFloorInfo = function(A) { + if (A.data && 0 !== Object.keys(A.data).length) { + var e = new zu; + e.floors = Yu.parseFloorInfos(A.data), + e.modelKey = this.model.modelKey; + var t = new Ju; + t.floors = e.floors, + e.floorExplosionInfo = t, + e.modelType = this.model.getConfig().type, + this.model.floorManager = e, + e.model = this.model + } + } + ; + var _u = { + IfcRoof: { + color: [.837255, .203922, .270588, 1] + }, + IfcSlab: { + color: [.637255, .603922, .670588, 1] + }, + IfcWall: { + color: [.537255, .337255, .237255, 1] + }, + IfcWallStandardCase: { + color: [.537255, .337255, .237255, 1] + }, + IfcDoor: { + color: [.637255, .603922, .670588, 1] + }, + IfcWindow: { + color: [.137255, .403922, .870588, .4] + }, + IfcOpeningElement: { + color: [.137255, .403922, .870588, .1] + }, + IfcRailing: { + color: [.137255, .403922, .870588, 1] + }, + IfcColumn: { + color: [.137255, .403922, .870588, 1] + }, + IfcBeam: { + color: [.137255, .403922, .870588, 1] + }, + IfcFurnishingElement: { + color: [.137255, .403922, .870588, 1] + }, + IfcCurtainWall: { + color: [.137255, .403922, .870588, 1] + }, + IfcStair: { + color: [.637255, .603922, .670588, 1] + }, + IfcStairFlight: { + color: [.637255, .603922, .670588, 1] + }, + IfcBuildingElementProxy: { + color: [.5, .5, .5, 1] + }, + IfcFlowSegment: { + color: [.137255, .403922, .870588, 1] + }, + IfcFlowitting: { + color: [.137255, .403922, .870588, 1] + }, + IfcFlowTerminal: { + color: [.137255, .403922, .870588, 1] + }, + IfcProxy: { + color: [.137255, .403922, .870588, 1] + }, + IfcSite: { + color: [.137255, .403922, .870588, 1] + }, + IfcLightFixture: { + color: [.8470588235, .8470588235, .870588, 1] + }, + IfcDuctSegment: { + color: [.8470588235, .427450980392, 0, 1] + }, + IfcDistributionFlowElement: { + color: [.8470588235, .427450980392, 0, 1] + }, + IfcDuctFitting: { + color: [.8470588235, .427450980392, 0, 1] + }, + IfcPlate: { + color: [.137255, .403922, .870588, .5] + }, + IfcAirTerminal: { + color: [.8470588235, .427450980392, 0, 1] + }, + IfcMember: { + color: [.8470588235, .427450980392, 0, 1] + }, + IfcCovering: { + color: [.8470588235, .427450980392, 0, 1] + }, + IfcTransportElement: { + color: [.8470588235, .427450980392, 0, 1] + }, + IfcFlowController: { + color: [.8470588235, .427450980392, 0, 1] + }, + IfcFlowFitting: { + color: [.8470588235, .427450980392, 0, 1] + }, + IfcRamp: { + color: [.8470588235, .427450980392, 0, 1] + }, + IfcFurniture: { + color: [.8470588235, .427450980392, 0, 1] + }, + IfcFooting: { + color: [.8470588235, .427450980392, 0, 1] + }, + IfcSystemFurnitureElement: { + color: [.8470588235, .427450980392, 0, 1] + }, + IfcSpace: { + color: [.137255, .303922, .570588, .5] + }, + DEFAULT: { + color: [.8470588235, .427450980392, 0, 1] + } + } + , $u = function(A) { + this.symbolReader = null, + this.userIdReader = null, + this.userDataReader = null, + this.mapSceneReader = {}, + this.lightmap = !1, + this.mapNodeInfoByCategory = {}, + this.mapNodeInfoByUserId = {}, + this.mapNodeInfoByNodeId = {}, + this.mapNodeInfoByComponentKey = {}, + this.mapNodeInfoByParameterizedDesc = {}, + this.mapNodeInfoByGeometryId = {}, + this.referencedMeshCache = {}, + this.componentCount = 0, + this.borderLines = {}, + this.octreeRootNode = { + inner: null, + outer: null, + layer: null + }, + this.meshCache = {}, + this.allBones = {}, + this.model = A + }; + $u.EnumNodeItemType = { + SYMBOL: 0, + MESH: 1, + TUBE: 2, + PIPE: 3, + BOX: 4, + BOX_M: 5, + PIPE_M: 6, + MESH_REF: 7, + LINE: 8 + }, + $u.NodeInfoCategory = { + INSTANCED: 0, + STANDARD: 1 + }, + $u.EnumDataType = { + NONE: 0, + MERGE_DATA: 1, + LAYER: 2, + LAYER_SCENE: 3, + ANIMATION: 4 + }, + $u.EnumKeyframeTrackType = { + position: "position", + scale: "scale", + quaternion: "quaternion", + weights: "weights" + }, + $u.prototype.destroy = function() { + this.destroyReader(), + this.octreeRootNode = null, + this.mapNodeInfoByCategory = {}, + this.mapNodeInfoByUserId = {}, + this.mapNodeInfoByNodeId = {}, + this.mapNodeInfoByComponentKey = {}, + this.mapNodeInfoByParameterizedDesc = {}, + this.mapNodeInfoByGeometryId = {}, + this.referencedMeshCache = {}, + this.componentCount = 0, + this.borderLines = {} + } + , + $u.prototype.destroyReader = function() { + this.userIdReader = {}, + this.userDataReader = {}, + this.symbolReader = {}, + this.mapSceneReader = {} + } + , + $u.prototype.getSceneReaderMap = function() { + return this.mapSceneReader + } + , + $u.prototype.isValidScene = function() { + return !uh.isEmptyObject(this.getSceneReaderMap()) || (Bh.log("model load not started!"), + !1) + } + , + $u.prototype.parseItemData = function(A) { + var e = this.model; + (ap(e.dataVersion, "2.0.0") || void 0 === e.dataVersion) && (Bh.time("升级几何结构"), + this._updateV1ToV2(e), + e.dataVersion = "2.0.0", + Bh.timeEnd("升级几何结构")), + this._readMaterialBuffer(e), + e.hasAnimation && vc.EnableAnimation ? (this._parseClips(), + this._parseBones()) : this._parseGeo(); + var t = {} + , i = this.referencedMeshCache; + for (var o in Bh.time("_readItemData"), + i.bufferData && Object.keys(i.bufferData).length > 0 || A && A(), + i.components) + this._readItemData(t, o, o, void 0, 0); + e.hasAnimation && vc.EnableAnimation && this._parseNodes(), + Bh.timeEnd("_readItemData"), + t = null, + A && A() + } + , + $u.prototype.asyncParseItemData = function(A) { + for (var e = this.getSceneReaderMap(), t = Object.keys(e), i = t.length, o = 0, n = this, r = 0; i > r; r += 1) { + var a = e[t[r]]; + uh.asyncProcess(a, a.header.componentCount, 100, (function(A, e) { + n._parseItemDataBy(A, e) + } + ), (function() { + (o += 1) === i && A && A() + } + )) + } + } + , + $u.prototype._parseItemDataBy = function(A, e) { + for (var t = A.getComponentInfo(e), i = t.itemIndex; t.itemCount > i; i += 1) + this._readItemData(A, i, e) + } + , + $u.prototype.parseItemDataByComponentKey = function(A) { + var e = this.getSceneReaderMap(); + for (var t in e) + this._parseItemDataBy(e[t], A) + } + , + $u.prototype._readItemData = function(A, e, t) { + var i = this.referencedMeshCache.components[e]; + void 0 !== i && -1 !== i.geoId && this._readMeshInfo(A, t, i, null) + } + , + $u.prototype._readSymbolInfo = function(A, e, t) { + var i = this.symbolReader; + if (i) { + var o = i.header.symbolCount + , n = t.toData + , r = A.getMatrixInfo(t.matrixId).matrix.clone() + , a = { + matrix: r, + ItemId: t.ItemId, + originalId: t.originalId, + userDataId: t.userDataId, + materialId: t.materialId + }; + if (n >= 0 && o > n) + for (var s = i.getSymbolInfo(n), l = s.itemIndex; s.itemCount > l; l += 1) { + var c = i.getItemInfo(l); + c.type !== $u.EnumNodeItemType.SYMBOL && this._readMeshInfo(i, e, c, a) + } + r = null, + a = null, + i = null + } + } + , + $u.prototype._readMeshInfo = function(A, e, t, i) { + var o = null + , n = null; + null === i ? (t.userDataId, + o = t.originalId, + n = t.materials || t.matId) : (i.userDataId, + o = i.originalId, + n = i.materialId > -1 ? i.materialId : t.materialId); + var r = null; + if (r = this._getMeshNodeAttr(A, t, i)) { + if (t.buildInCategory && (r.buildInCategory = t.buildInCategory), + r.userId = e, + r.name = t.name, + r.type = t.type, + r.componentKey = e, + r.originalId = o, + r.materialId = n, + r.state = Lc.Visible, + r.material = null, + r.originMId = n, + r.userData = null, + r.categoryId = 0, + r.familyName = t.familyName, + r.familySymbol = t.familySymbol, + this.lightmap) { + var a = t.ItemId; + i && (a = i.ItemId + "_" + t.ItemId), + r.itemIdUV2 = a + } + r.instanceOrNot = !1, + this._classifyNodeInfo(r), + r = null + } + } + , + $u.prototype._getMeshNodeAttrOfPipe = function(A, e, t) { + var i = A.getMatrixInfo(e.matrixId).matrix.clone(); + t && i.multiplyMatrices(t.matrix, i); + var o = e.boundingBox.clone(); + o.applyMatrix4(i); + var n = A.getGeomPipeInfo(e.toData) + , r = n.startPt + , a = n.endPt + , s = new y; + s.subVectors(a, r); + var l = s.length(); + s.normalize(); + var c = n.radius; + c > 1 || (c = 100); + var h = new y(0,1,0) + , d = new y(c,l,c) + , p = (new f).setFromUnitVectors(h, s) + , g = r.clone().addScaledVector(s, .5 * l) + , u = (new M).compose(g, p, d); + return i.multiply(u), + n = null, + { + nodeId: (t ? t.ItemId + "_" + e.ItemId : e.ItemId) + "_pipe", + geometryId: "pipe", + boundingBox: o, + matrix: i + } + } + , + $u.prototype._getMeshNodeAttrOfTube = function(A, e, t) { + var i = this._getMeshNodeAttrOfPipe(A, e, t); + return i.nodeId += "_tube", + i.geometryId = "tube", + i + } + , + $u.prototype._getMeshNodeAttrOfBox = function(A, e, t) { + var i = A.getMatrixInfo(e.matrixId).matrix.clone(); + t && i.multiplyMatrices(t.matrix, i); + var o = e.boundingBox.clone(); + o.applyMatrix4(i); + var n = e.boundingBox + , r = n.getSize() + , a = n.getCenter() + , s = (new M).scale(new y(r.x,r.y,r.z)); + return s.setPosition(a), + i.multiply(s), + { + nodeId: (t ? t.ItemId + "_" + e.ItemId : e.ItemId) + "_box", + geometryId: "box", + boundingBox: o, + matrix: i + } + } + , + $u.prototype._getMeshNodeAttrOfBoxM = function(A, e, t) { + var i = A.getMatrixInfo(e.matrixId).matrix.clone(); + t && i.multiplyMatrices(t.matrix, i); + var o = e.boundingBox.clone(); + return o.applyMatrix4(i), + { + nodeId: (t ? t.ItemId + "_" + e.ItemId : e.ItemId) + "_boxM", + geometryId: "boxM", + boundingBox: o, + matrix: i, + uvArrayBuffer: A.getGeomBoxUvInfo(e.toData) + } + } + , + $u.prototype._getMeshNodeAttrOfPipeM = function(A, e, t) { + var i = A.getMatrixInfo(e.matrixId).matrix.clone(); + t && i.multiplyMatrices(t.matrix, i); + var o = e.boundingBox.clone(); + return o.applyMatrix4(i), + { + nodeId: (t ? t.ItemId + "_" + e.ItemId : e.ItemId) + "_pipeM", + geometryId: "pipeM", + boundingBox: o, + matrix: i, + uvArrayBuffer: A.getGeomPipeUvInfo(e.toData) + } + } + , + $u.prototype._getMeshNodeAttrOfMeshRef = function(A, e, t) { + var i = A.getMatrixInfo(e.matrixId).matrix.clone(); + t && i.multiplyMatrices(t.matrix, i); + var o = e.boundingBox.clone(); + return o.applyMatrix4(i), + { + nodeId: "refMesh|" + (t ? t.ItemId + "_" + e.ItemId : e.ItemId), + geometryId: e.toData, + boundingBox: o, + matrix: i + } + } + , + $u.prototype._getMeshNodeAttr = function(A, e, t, i) { + var o = new M; + o.fromArray(e.matrix || [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]), + vc.DataReduction && o.scale(new y(1e3,1e3,1e3)); + var n = t ? e.key + "_" + i : e.key + , r = t ? e.geoId + "_" + i : e.geoId; + if (-1 !== r) { + var a = new ph + , s = this.getReferencedMeshBufferById(e.geoId); + return s && s.position ? (a = Tu.getBoundingBoxByBuffer(s.position)).applyMatrix4(o) : Bh.error("没有找到对应几何"), + { + nodeId: n, + guid: e.guid, + geometryId: r, + originalGeometryId: e.geoId, + matrix: o, + boundingBox: a, + model: this.model + } + } + } + , + $u.prototype._getComponentNodeAttr = function(A, e) { + var t = new M; + t.fromArray(A.matrix || [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]), + vc.DataReduction && t.scale(new y(1e3,1e3,1e3)), + e && t.multiplyMatrices(e.matrix, t); + var i = A.nodeId + , o = A.geoId; + if (-1 !== o) { + var n = A.maxBoundary || e.maxBoundary + , r = A.minBoundary || e.minBoundary + , a = new ph; + return a.set(r, n), + { + nodeId: i, + guid: A.guid, + geometryId: o, + originalGeometryId: A.geoId, + matrix: t, + boundingBox: a, + model: this.model + } + } + } + , + $u.prototype._getLineNodeAttr = function(A, e, t) { + var i = e.boundingBox.clone() + , o = null; + return -1 !== e.matrixId ? (o = A.getMatrixInfo(e.matrixId).matrix.clone(), + t && o.multiplyMatrices(t.matrix, o), + i.applyMatrix4(o)) : (o = new M, + t && i.applyMatrix4(t.matrix)), + { + nodeId: t ? "line-" + t.ItemId + "-" + e.ItemId : "line-" + e.ItemId, + geometryId: "line-" + e.toData, + boundingBox: i, + matrix: o + } + } + , + $u.prototype._classifyNodeInfo = function(A) { + this._cacheNodeInfoByComponentKey(A), + this._cacheNodeInfoByNodeId(A), + this._cacheNodeInfoByUserId(A), + this._cacheNodeInfoByCategory(A), + this._cacheNodeInfoByParameterizedDesc(A) + } + , + $u.prototype._cacheNodeInfoByComponentKey = function(A) { + void 0 === this.mapNodeInfoByComponentKey[A.componentKey] && (this.mapNodeInfoByComponentKey[A.componentKey] = []), + this.mapNodeInfoByComponentKey[A.componentKey].push(A) + } + , + $u.prototype._cacheNodeInfoByUserId = function(A) { + void 0 === this.mapNodeInfoByUserId[A.userId] && (this.mapNodeInfoByUserId[A.userId] = []), + this.mapNodeInfoByUserId[A.userId].push(A) + } + , + $u.prototype._cacheNodeInfoByNodeId = function(A) { + this.mapNodeInfoByNodeId[A.nodeId] = A + } + , + $u.prototype._cacheNodeInfoByCategory = function(A) { + var e = null; + void 0 === this.mapNodeInfoByCategory[e = A.instanceOrNot ? $u.NodeInfoCategory.INSTANCED : $u.NodeInfoCategory.STANDARD] && (this.mapNodeInfoByCategory[e] = {}), + void 0 === this.mapNodeInfoByCategory[e][A.userId] && (this.mapNodeInfoByCategory[e][A.userId] = []), + this.mapNodeInfoByCategory[e][A.userId].push(A) + } + , + $u.prototype._cacheNodeInfoByParameterizedDesc = function(A) { + A.parameterizedDesc && (void 0 === this.mapNodeInfoByParameterizedDesc[A.type] && (this.mapNodeInfoByParameterizedDesc[A.type] = []), + this.mapNodeInfoByParameterizedDesc[A.type].push(A)) + } + , + $u.prototype._clearNodeInfoCacheWithParameterizedDesc = function(A) { + if (A) + for (var e = 0, t = A.length; t > e; e += 1) + delete this.mapNodeInfoByParameterizedDesc[A[e]]; + else + this.mapNodeInfoByParameterizedDesc = {} + } + , + $u.prototype._clearNodeInfoCacheWithComponentKey = function(A) { + if (A) + for (var e = 0, t = A.length; t > e; e += 1) + delete this.mapNodeInfoByComponentKey[A[e]]; + else + this.mapNodeInfoByComponentKey = {} + } + , + $u.prototype._clearNodeInfoCacheWithCategory = function(A) { + if (A) + for (var e = this.mapNodeInfoByCategory[$u.NodeInfoCategory.INSTANCED], t = this.mapNodeInfoByCategory[$u.NodeInfoCategory.STANDARD], i = 0, o = A.length; o > i; i += 1) + e && delete e[A[i]], + t && delete t[A[i]]; + else + this.mapNodeInfoByCategory = {} + } + , + $u.prototype.clearNodeInfoCacheByComponentsKey = function(A) { + this._clearNodeInfoCacheWithComponentKey(A), + this._clearNodeInfoCacheWithUserId(A), + this._clearNodeInfoCacheWithCategory(A) + } + , + $u.prototype._clearNodeInfoCacheWithUserId = function(A) { + if (A) + for (var e = 0, t = A.length; t > e; e += 1) + delete this.mapNodeInfoByUserId[A[e]], + delete this.mapNodeInfoByNodeId[A[e]]; + else + this.mapNodeInfoByUserId = {}; + this.mapNodeInfoByUserId = {} + } + , + $u.prototype.clearNodeInfoCache = function() { + this._clearNodeInfoCacheWithComponentKey(), + this._clearNodeInfoCacheWithUserId(), + this._clearNodeInfoCacheWithCategory() + } + , + $u.prototype.getNodeInfosByComponentKey = function(A) { + return this.mapNodeInfoByComponentKey[A] + } + , + $u.prototype.getNodeInfosWithComponentKey = function() { + return this.mapNodeInfoByComponentKey + } + , + $u.prototype.getAllNodeInfos = function() { + return this.mapNodeInfoByUserId + } + , + $u.prototype.getNodeInfosByUserId = function(A) { + return this.mapNodeInfoByUserId[A] + } + , + $u.prototype.getNodeInfosByNodeId = function(A) { + return this.mapNodeInfoByNodeId[A] + } + , + $u.prototype.getNodeInfosWithUserId = function() { + return this.mapNodeInfoByUserId + } + , + $u.prototype.getStandardNodeInfos = function() { + return this.mapNodeInfoByCategory[$u.NodeInfoCategory.STANDARD] + } + , + $u.prototype.getInstancedNodeInfos = function() { + return this.mapNodeInfoByCategory[$u.NodeInfoCategory.INSTANCED] + } + , + $u.prototype.getStandardUserIds = function() { + return this.getStandardNodeInfos() ? Object.keys(this.getStandardNodeInfos()) : [] + } + , + $u.prototype.getInstancedUserIds = function() { + return this.getInstancedNodeInfos() ? Object.keys(this.getInstancedNodeInfos()) : [] + } + , + $u.prototype.getStandardNodeInfosById = function(A) { + var e = this.getStandardNodeInfos(); + return e ? e[A] : null + } + , + $u.prototype.getInstancedNodeInfosById = function(A) { + var e = this.getInstancedNodeInfos(); + return e ? e[A] : null + } + , + $u.prototype._getUserIdsByCategory = function(A, e) { + var t = [] + , i = null; + if (i = e === $u.NodeInfoCategory.INSTANCED ? this.getInstancedNodeInfos() : this.getStandardNodeInfos()) + for (var o = 0, n = A.length; n > o; o += 1) + i[A[o]] && t.push(A[o]); + return t + } + , + $u.prototype.getInstancedUserIdsByCategory = function(A) { + return this._getUserIdsByCategory(A, $u.NodeInfoCategory.INSTANCED) + } + , + $u.prototype.getStandardUserIdsByCategory = function(A) { + return this._getUserIdsByCategory(A, $u.NodeInfoCategory.STANDARD) + } + , + $u.prototype._traverseNodeInfosByIds = function(A, e, t) { + for (var i = 0, o = e.length; o > i; i += 1) { + var n = e[i]; + t(n, A[n]) + } + } + , + $u.prototype.traverseStandardNodeInfos = function(A, e) { + var t = this.getStandardNodeInfos(); + t && (A = A || this.getStandardUserIds(), + this._traverseNodeInfosByIds(t, A, e)) + } + , + $u.prototype.traverseInstancedNodeInfos = function(A, e) { + var t = this.getInstancedNodeInfos(); + t && (A = A || this.getInstancedUserIds(), + this._traverseNodeInfosByIds(t, A, e)) + } + , + $u.prototype.traverseNodeInfosByComponent = function(A) { + for (var e = Object.keys(this.mapNodeInfoByComponentKey), t = 0, i = e.length; i > t; t += 1) + for (var o = e[t], n = this.mapNodeInfoByComponentKey[o], r = 0, a = n.length; a > r; r += 1) + A(o, n[r]) + } + , + $u.prototype.clearReferencedMeshCache = function() { + if (!vc.DEBUG) { + for (var A in this.referencedMeshCache) + delete this.referencedMeshCache[A]; + this.referencedMeshCache = null + } + } + , + $u.prototype.cacheReferencedMeshBufferData = function(A, e) { + this.referencedMeshCache.bufferData || (this.referencedMeshCache.bufferData = {}), + this.referencedMeshCache.bufferData[A] = e + } + , + $u.prototype.cacheReferencedMeshComponentNodeData = function(A, e) { + this.referencedMeshCache.componentNode || (this.referencedMeshCache.componentNode = {}), + this.referencedMeshCache.componentNode[A] = e + } + , + $u.prototype.cacheReferencedMeshWireframeData = function(A, e) { + this.referencedMeshCache.wireframeData || (this.referencedMeshCache.wireframeData = {}), + this.referencedMeshCache.wireframeData[A] = e + } + , + $u.prototype.getReferencedMeshBufferData = function() { + return this.referencedMeshCache.bufferData + } + , + $u.prototype.getReferencedMeshBufferById = function(A) { + return this.referencedMeshCache && this.referencedMeshCache.bufferData ? this.referencedMeshCache.bufferData[A] : null + } + , + $u.prototype.getReferencedMeshComponentNodeById = function(A) { + return this.referencedMeshCache && this.referencedMeshCache.componentNode ? this.referencedMeshCache.componentNode[A] : null + } + , + $u.prototype.getReferencedMeshWireframeDataById = function(A) { + return this.referencedMeshCache && this.referencedMeshCache.wireframeData ? this.referencedMeshCache.wireframeData[A] : null + } + , + $u.prototype.cacheReferencedMeshBoneBufferData = function(A, e) { + this.referencedMeshCache.bones || (this.referencedMeshCache.bones = {}), + this.referencedMeshCache.bones[A] = e + } + , + $u.prototype.cacheReferencedMeshClipsData = function(A) { + this.referencedMeshCache.clips = A + } + , + $u.prototype.cacheReferencedMeshNodesData = function(A) { + this.referencedMeshCache.nodes = A + } + , + $u.prototype.cacheReferencedMeshComponentData = function(A, e) { + this.referencedMeshCache.components || (this.referencedMeshCache.components = {}), + this.referencedMeshCache.components[A] = e + } + , + $u.prototype.cacheReferencedMeshMaterialData = function(A, e) { + this.referencedMeshCache.materials || (this.referencedMeshCache.materials = {}), + this.referencedMeshCache.materials[A] = e + } + , + $u.prototype.cacheReferencedMeshGeoIds = function(A, e) { + this.referencedMeshCache.mpkIds || (this.referencedMeshCache.mpkIds = {}), + this.referencedMeshCache.mpkIds[A] || (this.referencedMeshCache.mpkIds[A] = []), + this.referencedMeshCache.mpkIds[A].push(e) + } + , + $u.prototype.clearReferencedMeshCacheByGeopkIdxs = function(A, e) { + if (this.referencedMeshCache.mpkIds) + for (var t = 0, i = A.length; i > t; t += 1) { + var o = A[t] + , n = this.referencedMeshCache.mpkIds[o]; + if (n) { + for (var r = 0, a = n.length; a > r; r += 1) + e && e(n[r]), + delete this.referencedMeshCache[n[r]]; + delete this.referencedMeshCache.mpkIds[o] + } + } + } + , + $u.prototype.cacheBorderLine = function(A, e) { + var t = A ? "shared" : "unique"; + this.borderLines[t] || (this.borderLines[t] = []), + this.borderLines[t].push(e) + } + , + $u.prototype.getSharedBorderLineCache = function() { + return this.borderLines.shared + } + , + $u.prototype.getUniqueBorderLineCache = function() { + return this.borderLines.unique + } + , + $u.prototype._isRegularShape = function(A) { + return A.type === $u.EnumNodeItemType.TUBE || A.type === $u.EnumNodeItemType.PIPE || A.type === $u.EnumNodeItemType.BOX || A.type === $u.EnumNodeItemType.BOX_M || A.type === $u.EnumNodeItemType.PIPE_M + } + , + $u.prototype._isInstancedNode = function(A) { + return !!vc.Instance && (A.type === $u.EnumNodeItemType.MESH_REF ? !!vc.SharedMeshInstanceEnable : !!A.parameterizedDesc) + } + , + $u.prototype.getComponentCount = function() { + return this.componentCount + } + , + $u.prototype.getOctreeRootNode = function() { + return this.octreeRootNode + } + , + $u.prototype.isUseInnerAndOuterOctree = function() { + return !0 + } + , + $u.prototype.isOctreeOuter = function(A) { + var e = this.octreeRootNode.inner || this.octreeRootNode.outer; + return !(e.min.x > A.x || A.x > e.max.x || e.min.y > A.y || A.y > e.max.y || e.min.z > A.z || A.z > e.max.z) + } + , + $u.prototype.getOctreeRoots = function(A) { + this.octreeRootNode.outer && A.push(this.octreeRootNode.outer), + this.octreeRootNode.inner && A.push(this.octreeRootNode.inner) + } + , + $u.prototype.updateOctreeNodeBy = function(A, e) { + var t = new aA; + function i(A, e) { + t.copy(A.boundingBoxWorld), + t.applyMatrix4(e), + A.min.copy(t.min), + A.max.copy(t.max), + A.center = t.getCenter(), + A.size = t.getSize().lengthSq() + } + i(A, e), + function A(e, t) { + for (var o = 0, n = e.childOctants.length; n > o; o += 1) { + var r = e.childOctants[o]; + i(r, t), + A(r, t) + } + }(A, e) + } + , + $u.prototype.updateOctreeNode = function(A) { + var e = this.getOctreeRootNode(); + e.outer && this.updateOctreeNodeBy(e.outer, A), + e.inner && this.updateOctreeNodeBy(e.inner, A) + } + , + $u.prototype.removeFromSceneReaderMap = function(A) { + for (var e = 0, t = A.length; t > e; e += 1) + this.mapSceneReader[A[e]] && delete this.mapSceneReader[A[e]] + } + , + $u.prototype.isUserIdExist = function(A) { + return !!this.getNodeInfosByUserId(A) + } + , + $u.prototype.addToNodeInfoMap = function(A) { + for (var e = 0, t = A.length; t > e; e += 1) + this._cacheNodeInfoByUserId(A[e]) + } + , + $u.prototype.removeFromNodeInfoMap = function(A) { + for (var e = this.getAllNodeInfos(), t = 0, i = A.length; i > t; t += 1) { + var o = A[t].userId; + e[o] && delete e[o] + } + } + , + $u.prototype.cacheNodeInfosOnGeometryId = function() { + var A = this.getStandardNodeInfos(); + for (var e in this.mapNodeInfoByGeometryId = {}, + A) + for (var t = A[e], i = 0, o = t.length; o > i; i += 1) + t[i].geometryId = this.convertGeometryId(t[i].geometryId), + this.mapNodeInfoByGeometryId[t[i].geometryId] || (this.mapNodeInfoByGeometryId[t[i].geometryId] = []), + this.mapNodeInfoByGeometryId[t[i].geometryId].push(t[i]) + } + , + $u.prototype.getNodeInfosOnGeometryId = function() { + return this.mapNodeInfoByGeometryId || this.cacheNodeInfosOnGeometryId(), + this.mapNodeInfoByGeometryId + } + , + $u.prototype.clearNodeInfosWithGeometryId = function() { + this.mapNodeInfoByGeometryId = {} + } + , + $u.prototype.convertGeometryId = function(A) { + return A + } + , + $u.prototype._readMaterialBuffer = function(A) { + var e = A.materialManager + , t = e.materials + , i = e.textures + , o = this.referencedMeshCache.materials; + for (var n in o) { + var r = o[n]; + if (!r) + return null; + var a = Kd.createMaterialByMaterialBufferAndTexture(r, i); + a.refreshUniforms && a.refreshUniforms(), + t[n] = a, + vc.EnableShadow && A.manager.viewerImpl.rendererManager.csm && A.manager.viewerImpl.rendererManager.csm.setupMaterial(a) + } + } + , + $u.prototype._updateV1ToV2 = function() { + var A = this.referencedMeshCache.components + , e = this.referencedMeshCache.bufferData + , t = this.referencedMeshCache.materials; + for (var i in A) + if (A.hasOwnProperty(i)) { + var o = A[i] + , n = o.matId + , r = e[o.geoId]; + if (o.materials) + continue; + if (o.materials = [], + !r) + continue; + var a = t[n]; + if (!a) + continue; + var s = this._updateMaterialV1ToV2(n, a); + if (s) + for (var l in r.materialIndex = s.materialIndex, + o.materials = s.materialId, + s.materials) + s.materials.hasOwnProperty(l) && (this.referencedMeshCache.materials[l] = s.materials[l]) + } + } + , + $u.prototype._updateMaterialV1ToV2 = function(A, e) { + var t = {} + , i = [] + , o = {}; + if (!e) + return null; + for (var n = e.color, r = e.colorIndex, a = e.texture, s = e.textureIndex, l = 0; n.length > l; l += 4) { + var c = {}; + c.color = [n[l], n[l + 1], n[l + 2]], + c.opacity = Math.floor(100 * n[l + 3]) / 100, + c.transparent = 1 > n[l + 3]; + var h = (255 * c.color[0] << 16 ^ 255 * c.color[1] << 8 ^ 255 * c.color[2] << 0) + "_" + c.opacity; + o[h] = c, + i.push(h) + } + if (0 !== a.length && r.length === s.length) + for (var d = -1, p = 0; s.length > p; p += 1) + if (d !== r[p] && (d = r[p], + -1 !== s[p])) { + var g = i[r[p]] + , u = a[s[p]]; + if (o[g].map = u, + -1 === g.indexOf(u)) { + var f = g + "_" + a[s[p]]; + o[f] = o[g], + i.length > Object.keys(o).length - 1 || delete o[g], + i[r[p]] = f + } + } + return t.materials = o, + t.materialId = i, + t.materialIndex = r, + t + } + , + $u.prototype._computeVertexNormalsFromFaceNormals = function(A, e, t) { + for (var i = new Float32Array(t), o = 0, n = 0, r = 0, a = 0, s = 0, l = 0, c = 0; A.length > c; c += 3) + s = A[c + 1], + l = A[c + 2], + n = 3 * e[c + 1], + r = 3 * e[c + 2], + i[o = 3 * e[c]] = a = A[c], + i[o + 1] = s, + i[o + 2] = l, + i[n] = a, + i[n + 1] = s, + i[n + 2] = l, + i[r] = a, + i[r + 1] = s, + i[r + 2] = l; + return i + } + , + $u.prototype._computeVertexNormalsFromIndex = function(A, e, t) { + var i = new Float32Array(e.length); + if (e) { + var o = 0 + , n = 0 + , r = 0 + , a = new y + , s = new y + , l = new y + , c = new y + , h = new y; + if (A) + for (var d = A, p = 0; d.length > p; p += 3) + n = 3 * d[p + 1], + r = 3 * d[p + 2], + a.fromArray(e, o = 3 * d[p]), + s.fromArray(e, n), + l.fromArray(e, r), + c.subVectors(l, s), + h.subVectors(a, s), + c.cross(h), + i[o] += c.x, + i[o + 1] += c.y, + i[o + 2] += c.z, + i[n] += c.x, + i[n + 1] += c.y, + i[n + 2] += c.z, + i[r] += c.x, + i[r + 1] += c.y, + i[r + 2] += c.z; + else + for (var g = 0, u = e.length; u > g; g += 9) + a.fromArray(e, g), + s.fromArray(e, g + 3), + l.fromArray(e, g + 6), + c.subVectors(l, s), + h.subVectors(a, s), + c.cross(h), + i[g] = c.x, + i[g + 1] = c.y, + i[g + 2] = c.z, + i[g + 3] = c.x, + i[g + 4] = c.y, + i[g + 5] = c.z, + i[g + 6] = c.x, + i[g + 7] = c.y, + i[g + 8] = c.z + } + return i + } + , + $u.prototype.addMeshToInfoMap = function(A, e, t, i, o) { + var n = this.getNodeInfosByComponentKey(A); + Array.isArray(n) && n.forEach((function(A) { + A.nodeId === e && (A.mesh = t, + A.index = i, + A.uv = A.uv || o) + } + )) + } + , + $u.prototype._parseGeo = function() { + Bh.time("处理几何:计算法线"); + var A = this.referencedMeshCache; + for (var e in A.bufferData) { + var t = A.bufferData[e]; + t.position.length !== t.normal.length && (t.normal = t.normal.length === t.index.length ? this._computeVertexNormalsFromFaceNormals(t.normal, t.index, t.position.length) : this._computeVertexNormalsFromIndex(t.index, t.position)) + } + Bh.timeEnd("处理几何:计算法线") + } + , + $u.prototype._parseBones = function() { + var A = this.referencedMeshCache; + for (var e in A._offsetMatrix || (A._offsetMatrix = {}), + A.bufferData) { + var t = A.bufferData[e]; + t.position.length !== t.normal.length && (t.normal = t.normal.length === t.index.length ? this._computeVertexNormalsFromFaceNormals(t.normal, t.index, t.position.length) : this._computeVertexNormalsFromIndex(t.index, t.position)); + var i = A.bones[e]; + if (i) { + t.skinIndex = i.skinIndex, + t.skinWeight = i.skinWeight; + var o = i.name; + i.offsetMatrix.length / 16 !== o.length && Bh.debug("bones的name数量与Matrix数量不符!"); + for (var n = 0; o.length > n; n += 1) + A._offsetMatrix[o[n]] = (new M).fromArray(i.offsetMatrix, 16 * n) + } + } + } + , + $u.prototype._parseClips = function() { + for (var A = this.referencedMeshCache.clips, e = [], t = 0, i = A.length; i > t; t += 1) { + for (var o = [], n = A[t], r = 0, a = n.tracks.length; a > r; r += 1) { + var s = n.tracks[r] + , l = null; + switch (s.type) { + case $u.EnumKeyframeTrackType.weights: + l = Dr; + break; + case $u.EnumKeyframeTrackType.quaternion: + l = Nr; + break; + case $u.EnumKeyframeTrackType.position: + case $u.EnumKeyframeTrackType.scale: + default: + l = Vr + } + if (0 === n.ticksPerSec) { + n.ticksPerSec = 1e3; + for (var c = 0; s.times.length > c; c += 1) + s.times[c] /= n.ticksPerSec + } + var h = new l(Fs.sanitizeNodeName(s.name) + "." + s.type,s.times,s.values,2301); + o.push(h) + } + var d = new Gr(void 0 !== n.name ? n.name : "animation_" + t,n.duration / n.ticksPerSec,o); + e.push(d) + } + this.model.animations = e + } + , + $u.prototype._parseNodes = function() { + var A = this.referencedMeshCache; + A.allBones = [], + A.offsetMatrix = []; + var e = function A(e, t) { + var i = null; + "node" === e.type ? i = new H : "bone" === e.type && (i = new Uo, + t.allBones[e.name] = i), + i.name = Fs.sanitizeNodeName(e.name), + i.matrix.fromArray(e.transformation || [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]), + i.matrix.decompose(i.position, i.quaternion, i.scale); + for (var o = 0; e.children.length > o; o += 1) { + var n = A(e.children[o], t); + n && i.add(n) + } + for (var r = 0; e.meshes.length > r; r += 1) { + var a = e.meshes[r]; + t.model._getHandler().defaultManager.meshManager._readBufferInfo(t.model, [t.model.modelKey + "_" + e.meshes[r]]); + var s = t.model._getHandler().defaultManager.meshManager._makeSkinMesh(t.model, [t.model.modelKey + "_" + e.meshes[r]], (function(A) {} + )); + t.meshCache[a] = s, + s.name = e.name, + i.add(s) + } + return i + }(A.nodes, this); + for (var t in A.bufferData) { + var i = this.meshCache[t]; + if (i && i.isSkinnedMesh) { + for (var o = [], n = [], r = 0; A.bones[t].name.length > r; r += 1) { + var a = A.bones[t].name[r] + , s = A._offsetMatrix[a] + , l = this.allBones[a]; + s && l && (o.push(l), + n.push(s)) + } + var c = new bo(o,n); + i.bind(c, i.matrixWorld) + } + } + this.model.nodes = e, + this.model.manager.getScene().onBeforeRender = function(A, e, t, i) { + e.updateMatrixWorld(!0) + } + , + this.model.group.add(e), + (c = new _s(e)).visible = !1, + this.model.skeleton = c, + this.model.group.add(c), + this.model.mixer = new Rs(e), + this.model.actions = []; + for (var h = 0; this.model.animations.length > h; h += 1) { + var d = this.model.mixer.clipAction(this.model.animations[h]); + this.model.actions.push(d) + } + } + ; + var Af = function(A) { + $u.call(this, A), + this.instancedComponent = {} + }; + Object.assign(Af.prototype, $u.prototype), + Af.prototype.parseItemData = function(A) { + var e = this.model; + (ap(e.dataVersion, "2.0.0") || void 0 === e.dataVersion) && (Bh.time("升级几何结构"), + this._updateV1ToV2(e), + e.dataVersion = "2.0.0", + Bh.timeEnd("升级几何结构")), + this._readMaterialBuffer(e), + e.hasAnimation && vc.EnableAnimation ? (this._parseClips(), + this._parseBones()) : (this._parseGeo(), + vc.Instance && sp(e.dataVersion, "2.0.0") && this._parseInstanced()); + var t = {} + , i = this.referencedMeshCache; + if (Bh.time("_readItemData"), + !i.bufferData || 0 >= Object.keys(i.bufferData).length) + return Bh.warn("缺少几何数据"), + !0; + for (var o in i.components) + this._readItemData(t, o, o, void 0, 0); + Bh.timeEnd("_readItemData"), + t = null, + A && A() + } + , + Af.prototype._readMeshInfo = function(A, e, t, i) { + var o = this.model.materialManager.materials + , n = null + , r = null + , a = null + , s = this.referencedMeshCache; + if (t.nodes || t.nodeIds) { + r = t.originalId; + var l = t + , c = (new M).fromArray(l.matrix || [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]); + l.matrix = c; + var h = []; + h = l.nodes ? l.nodes : l.nodeIds; + for (var d = 0; h.length > d; d += 1) { + var p = h[d]; + if ("object" !== lc(p) && (p = this.getReferencedMeshComponentNodeById(p)), + p) { + var g, u = null; + if (a = "", + -1 !== p.geoId) + if (u = this._getComponentNodeAttr(p, l, d)) { + if (l.buildInCategory && (u.buildInCategory = l.buildInCategory), + !o[a = p.material]) { + var f = _u[l.type] ? _u[l.type].color : void 0; + f || (Bh.log("Material not found for type: ", l.type), + f = _u.DEFAULT.color), + f || (Bh.log("Default material not found for type: ", l.type), + f = [1, 1, 1, 1]); + var m = new LA(f[0],f[1],f[2]) + , C = a || m.getHexString() + "_" + f[3] + , y = o[C]; + y || (Bh.warn("缺少材质 " + a), + y = Kd.createStandardMaterial({ + color: m + }), + 1 > f[3] && (y.transparent = !0, + y.opacity = f[3]), + y.side = 2, + o[C] = y), + u.material = a = C + } + if (o[a].aoMap) { + var v = this.getReferencedMeshBufferById(u.geometryId); + v && (v.uv2 = v.uv) + } + g = u.nodeId; + var I = (K = this.userDataReader) ? K.getUserData(n) : null; + u.type = l.type, + u.userId = e, + u.name = l.name, + u.userDataId = n, + u.originalId = r, + u.materialId = a, + u.originMId = a, + u.userData = I, + u.categoryId = 0, + u.componentKey = e, + u.familyName = l.familyName, + u.familySymbol = l.familySymbol; + var E = vc.Instance + , B = s.reuseNodes.hasOwnProperty(g); + u.instanceOrNot = !(!E || !B), + u.isBatched = !0, + u.state = Lc.Visible, + u.material = null, + this._classifyNodeInfo(u), + u = null + } else + Bh.debug("非法node") + } + } + } else if (null === i ? (n = t.userDataId, + r = t.originalId, + a = t.materialId || t.matId) : (n = i.userDataId, + r = i.originalId, + a = i.materialId > -1 ? i.materialId : t.materialId), + t.materials || (t.materials = []), + t.materials.length > 0) + for (d = 0; t.materials.length > d; d += 1) { + var x = null; + if (x = this._getMeshNodeAttr(A, t, t.materials.length > 1, d), + !o[a = t.materials[d]]) { + var S = _u[t.type] ? _u[t.type].color : void 0; + S || (Bh.log("Material not found for type: ", t.type), + S = _u.DEFAULT.color), + S || (Bh.log("Default material not found for type: ", t.type), + S = [1, 1, 1, 1]); + var w = new LA(S[0],S[1],S[2]) + , b = a || w.getHexString() + "_" + S[3] + , U = o[b]; + U || (Bh.warn("缺少材质 " + a), + U = Kd.createStandardMaterial({ + color: w + }), + 1 > S[3] && (U.transparent = !0, + U.opacity = S[3]), + U.side = 2, + o[b] = U) + } + if (o[a].aoMap) { + var F = this.getReferencedMeshBufferById(x.geometryId); + F && (F.uv2 = F.uv) + } + if (!x) + return; + var K; + I = (K = this.userDataReader) ? K.getUserData(n) : null; + x.type = t.type, + x.userId = e, + x.name = t.name, + x.userDataId = n, + x.originalId = r, + x.materialId = a, + x.originMId = a, + x.userData = I, + x.categoryId = 0, + x.componentKey = e, + x.familyName = t.familyName, + x.familySymbol = t.familySymbol, + vc.Instance && this.instancedComponent[e] ? x.instanceOrNot = !0 : (x.instanceOrNot = !1, + this.instancedGeo[x.originalGeometryId].length > 1 && (x.originalGeometryId = "")), + x.state = Lc.Visible, + x.material = null, + x.isBatched = !0, + this._classifyNodeInfo(x), + x = null + } + else { + var Q = null + , R = _u[t.type] ? _u[t.type].color : void 0; + R || (Bh.log("Material not found for type: ", t.type), + R = _u.DEFAULT.color), + R || (Bh.log("Default material not found for type: ", t.type), + R = [1, 1, 1, 1]); + var T = new LA(R[0],R[1],R[2]) + , k = T.getHexString() + "_" + R[3] + , D = o[k]; + if (D || (D = Kd.createStandardMaterial({ + color: T + }), + 1 > R[3] && (D.transparent = !0, + D.opacity = R[3]), + D.side = 2, + o[k] = D), + t.materials.push(k), + Q = this._getMeshNodeAttr(A, t, !1, 0), + a = t.materials[0], + !Q) + return; + t.buildInCategory && (Q.buildInCategory = t.buildInCategory); + e = t.key; + Q.type = t.type, + Q.userId = e, + Q.name = t.name, + Q.originalId = r, + Q.materialId = a, + Q.originMId = a, + Q.userData = {}, + Q.categoryId = 0, + Q.componentKey = e, + Q.familyName = t.familyName, + Q.familySymbol = t.familySymbol, + Q.instanceOrNot = !(!vc.Instance || !this.instancedComponent[e]), + Q.isBatched = !0, + Q.state = Lc.Visible, + Q.material = null, + this._classifyNodeInfo(Q), + Q = null + } + } + , + Af.prototype._parseGeo = function() { + Bh.time("处理几何:按材质拆分构件"); + var A = this.referencedMeshCache; + for (var e in A.bufferData) { + var t = A.bufferData[e]; + if (t.position.length !== t.normal.length && (t.normal = t.normal.length === t.index.length ? this._computeVertexNormalsFromFaceNormals(t.normal, t.index, t.position.length) : this._computeVertexNormalsFromIndex(t.index, t.position)), + void 0 !== t.materialIndex) { + for (var i = void 0, o = [], n = null, r = 0; t.materialIndex.length > r; r += 1) { + var a = t.materialIndex[r]; + a !== n && (n = a, + void 0 !== i && (i.count = 3 * r - i.start, + o.push(i)), + i = { + start: 3 * r, + materialIndex: n + }) + } + if (void 0 !== i && (i.count = 3 * t.materialIndex.length - i.start, + o.push(i)), + 1 === o.length) { + A.bufferData[e + "_" + o[0].materialIndex] = t + } else { + for (var s = {}, l = 0; o.length > l; l += 1) { + var c = o[l]; + void 0 === s[c.materialIndex] && (s[c.materialIndex] = { + index: [], + count: 0 + }), + s[c.materialIndex].index.push({ + start: c.start, + count: c.count + }), + s[c.materialIndex].count += c.count + } + var h = function() { + p = {}, + g = s[d]; + for (var i = 0, o = new Uint32Array(g.count), n = 0; g.index.length > n; n += 1) { + var r = g.index[n] + , a = t.index.slice(r.start, r.start + r.count); + o.set(a, i), + i += r.count + } + u = {}, + o.forEach((function(A, e) { + u[A] || (u[A] = []), + u[A].push(e) + } + )); + var l = Object.keys(u).length; + f = new Float32Array(3 * l), + m = new Float32Array(3 * l), + C = new Float32Array(2 * l), + y = 0, + v = 0; + var c = 0; + for (var h in u) + if (u.hasOwnProperty(h)) { + h = Number(h); + var I = t.position.slice(3 * h, 3 * h + 3) + , E = t.normal.slice(3 * h, 3 * h + 3); + if (t.uv.length > 0) { + var B = t.uv.slice(2 * h, 2 * h + 2); + C.set(B, v), + v += 2 + } + f.set(I, y), + m.set(E, y), + y += 3, + u[h].forEach((function(A) { + o[A] = c + } + )), + c += 1 + } + p.index = o, + p.position = f, + p.normal = m, + t.uv && t.uv.length > 0 && (p.uv = C), + A.bufferData[e + "_" + d] = p + }; + for (var d in s) { + var p, g, u, f, m, C, y, v; + h() + } + } + } + } + Bh.timeEnd("处理几何:按材质拆分构件") + } + , + Af.prototype._parseInstanced = function() { + Bh.time("_parseInstanced"), + this.instancedComponent = {}; + var A = {} + , e = {} + , t = this.referencedMeshCache + , i = this.model.materialManager.materials; + for (var o in t.components) + if (t.components.hasOwnProperty(o)) { + var n = t.components[o]; + if (n.nodeIds || n.nodes) + continue; + var r = n.geoId; + if (-1 === r) { + Bh.debug("实体没有几何"); + continue + } + if (void 0 === A[r] && (A[r] = []), + A[r].push(1), + !n.materials || 1 > n.materials.length) { + n.materials = []; + var a = _u[n.type] ? _u[n.type].color : void 0; + a || (Bh.log("Material not found for type: ", n.type), + a = _u.DEFAULT.color), + a || (Bh.log("Default material not found for type: ", n.type), + a = [1, 1, 1, 1]); + var s = new LA(a[0],a[1],a[2]) + , l = s.getHexString() + "_" + a[3] + , c = i[l]; + c || (Bh.warn("缺少材质 " + l), + c = Kd.createStandardMaterial({ + color: s + }), + 1 > a[3] && (c.transparent = !0, + c.opacity = a[3]), + c.side = 2, + i[l] = c), + n.materials.push(l) + } + for (var h = 0, d = n.materials.length; d > h; h += 1) { + var p = n.materials[h] + "&" + r; + void 0 === e[p] && (e[p] = []), + e[p].push({ + componentKey: o + }) + } + } + for (var g in this.instancedGeo = A, + e) + if (e.hasOwnProperty(g)) + if (1 < e[g].length) + for (var u = 0; e[g].length > u; u += 1) + this.instancedComponent[e[g][u].componentKey] = !0; + else + delete e[g]; + Bh.timeEnd("_parseInstanced") + } + ; + var ef = function(A) { + Xu.call(this, A), + this.descriptor = new Af(A.model) + }; + (ef.prototype = Object.assign(ef.prototype, Xu.prototype)).loadSceneAndGeos = function(A) { + var e = A.scene + , t = this.model + , i = e.geometries.length || 0 + , o = []; + if (this.map = {}, + ap(this.dataVersion, "2.0.0")) + for (var n = 0; i > n; n += 1) + e.geometries[n].fileKey ? o.push(e.geometries[n].fileKey) : t.dispatchEventEx({ + type: Tc.SCENE_NOT_CLOSE, + modelKey: t.modelKey + }); + else + o = e.geometries; + this.maxLoadTaskCount += i, + this._loadGeo(o) + } + , + ef.prototype.getSceneTaskCount = function(A) { + var e = A.scenes; + return e += A.lines, + e += A.mpks, + vc.BorderLineDelayLoaded || (e += this.getAllBorderlineCount()), + e + } + ; + var tf = function(A) { + this.model = A, + this.defaultManager = null, + this.instancedManager = null, + this.model = A, + this.loader = null, + this.loaded = !1, + this.dataReady = !1, + this.borderlinesLoaded = !1, + this.borderlinesGenerated = !1 + }; + tf.prototype.destroy = function() { + this.model = null, + this.defaultManager.destroy(), + this.defaultManager = null, + this.instancedManager.destroy(), + this.instancedManager = null, + this.loader && (this.loader.destroy(), + this.loader = null) + } + , + tf.prototype.load = function(A) { + var e = this + , t = this.model; + this.loader.setNotifyProgress(A), + this.loader.load((function() { + t.manager.dispatchEvent({ + type: Rc.ON_LOAD_START, + modelKey: t.modelKey + }) + } + ), (function(A) { + t.manager.dispatchEvent({ + type: Rc.ON_LOAD_PROGRESS, + progress: A, + modelKey: t.modelKey + }) + } + ), (function() { + e.prepareData((function() { + e.processLoadCompleted((function() { + t.manager.dispatchEvent({ + type: Rc.ON_LOAD_COMPLETE, + modelKey: t.modelKey + }) + } + )) + } + )) + } + )) + } + , + tf.prototype.processLoadCompleted = function(A) { + var e = this.model; + e.materialManager._updateTextureMapping(), + e.materialManager._updateIBL(e), + e.setLoaded(!0); + var t = e.manager.filter + , i = e.manager.getNodeInfos(); + t.initFilterManager(i), + requestAnimationFrame((function() { + A && A(), + e.hasAnimation && vc.EnableAnimation && e.createPanel(), + e.updateMeshNodes(), + e.applyFilter(), + e.debut(e) + } + )) + } + , + tf.prototype.prepareData = function(A) { + if (!this.dataReady) { + var e = this; + this.loader.getDescriptor().parseItemData((function() { + e.dataReady = !0, + e.settleData(A) + } + )) + } + } + , + tf.prototype.prepareWireframe = function(A, e) { + if (A.isActivateWireframe()) + if (vc.BorderLineDelayLoaded && this.loader.getAllBorderlineCount()) + if (this.borderlinesLoaded) + this.borderlinesGenerated && (this.defaultManager.asyncGenerateWireframe(A), + this.instancedManager.generateWireframe(A)); + else { + this.borderlinesLoaded = !0; + var t = this; + this.loader.delayLoadBorderlines((function() { + t.instancedManager.generateWireframe(A), + t.defaultManager.asyncGenerateWireframe(A, (function() { + t.borderlinesGenerated = !0, + e && e() + } + )) + } + )) + } + else + this.defaultManager.generateWireframe(A), + this.instancedManager.generateWireframe(A) + } + , + tf.prototype.prepare = function(A) {} + , + tf.prototype.needUpdate = function() { + return !0 + } + , + tf.prototype.updateNodes = function() { + this.defaultManager.updateNodes(this.model), + vc.Instance && this.instancedManager.updateNodes(this.model) + } + , + tf.prototype.isLoaded = function() { + return this.loaded + } + , + tf.prototype.isDataReady = function() { + return this.loaded + } + , + tf.prototype.isAllReady = function() { + return !0 + } + , + tf.prototype.isHidden = function() { + var A = this.model; + return !A.visible && (A.manager.scene.removeGroupByName(A._getWireframeGroupName()), + !0) + } + , + tf.prototype.settleData = function(A) {} + , + tf.prototype.addNodeInfoToOctantMap = function() {} + , + tf.prototype.applyFilter = function() { + this.isLoaded() && (this.defaultManager.applyFilter(this.model), + vc.Instance && this.instancedManager.applyFilter(this.model)) + } + , + tf.prototype.applySelection = function() { + this.isLoaded() && (this.defaultManager.applySelection(this.model), + vc.Instance && this.instancedManager.applySelection(this.model)) + } + , + tf.prototype.clearSelection = function() { + this.isLoaded() && (this.defaultManager.clearSelection(this.model), + vc.Instance && this.instancedManager.clearSelection(this.model)) + } + , + tf.prototype.applyHover = function() { + this.isLoaded() && (this.defaultManager.applyHover(this.model), + vc.Instance && this.instancedManager.applyHover(this.model)) + } + , + tf.prototype.clearHover = function() { + this.isLoaded() && (this.defaultManager.clearHover(this.model), + vc.Instance && this.instancedManager.clearHover(this.model)) + } + , + tf.prototype.applyBlink = function() { + this.isLoaded() && (this.defaultManager.applyBlink(this.model), + vc.Instance && this.instancedManager.applyBlink(this.model)) + } + , + tf.prototype.clearBlink = function() { + this.isLoaded() && (this.defaultManager.clearBlink(this.model), + vc.Instance && this.instancedManager.clearBlink(this.model)) + } + , + tf.prototype.applyReplacement = function() { + this.isLoaded() && (this.defaultManager.applyReplacement(this.model), + vc.Instance && this.instancedManager.applyReplacement(this.model)) + } + , + tf.prototype.getMeshesByUserIds = function(A) { + if (this.isLoaded()) { + var e = this.defaultManager.getMeshesByUserIds(this.model, A) + , t = []; + return vc.Instance && (t = this.instancedManager.getMeshesByUserId(this.model, A)), + [].concat(e).concat(t) + } + } + , + tf.prototype.rebuildIndicesforLightmap = function() { + this.defaultManager.rebuildIndices(this.model) + } + , + tf.prototype.adjustVisibility = function(A) { + this.defaultManager.adjustVisibility(this.model, A) + } + , + tf.prototype.changeVisibilityOfSelectedObjects = function(A) { + this.defaultManager.changeVisibilityOfSelectedObjects(this.model, A) + } + , + tf.prototype.changeVisibilityOfNonSelectedObjects = function(A) { + this.defaultManager.changeVisibilityOfNonSelectedObjects(this.model, A) + } + , + tf.prototype.adjustInstanceVisibility = function(A) { + this.instancedManager.adjustVisibility(this.model, A) + } + , + tf.prototype.changeInstanceVisibilityOfSelectedObjects = function(A) { + this.instancedManager.changeVisibilityOfSelectedObjects(this.model, A) + } + , + tf.prototype.changeInstanceVisibilityOfNonSelectedObjects = function(A) { + this.instancedManager.changeVisibilityOfNonSelectedObjects(this.model, A) + } + , + tf.prototype.restoreVisibilityOfObjects = function() { + this.defaultManager.restoreVisibilityOfObjects(), + this.instancedManager.restoreVisibilityOfObjects() + } + , + tf.prototype.getBlinkMaterials = function() { + var A = [] + , e = this.model.materialManager.instanceMaterials; + for (var t in e) + for (var i = e[t], o = 0, n = i.length; n > o; o += 1) + A.push(i[o]); + return A = A.concat(this.defaultManager.meshManager.getBlinkMaterials()) + } + , + tf.prototype.disposeBufferAfterVbo = function() { + this.isLoaded() && (this.defaultManager.disposeBufferAfterVbo(), + this.instancedManager.disposeBufferAfterVbo()) + } + , + tf.prototype.getGeometryBuffersByUserId = function(A) { + if (!this.isLoaded()) + return []; + var e = []; + return e = (e = e.concat(this.defaultManager.getGeometryBuffersByUserId(this.model, A))).concat(this.instancedManager.getGeometryBuffersByUserId(this.model, A)) + } + , + tf.prototype.unloadComponents = function(A) {} + , + tf.prototype.explosion = function(A) { + this.isLoaded() && (this.defaultManager.explosion(this.model, A), + vc.Instance && this.instancedManager.explosion(this.model, A)) + } + , + tf.prototype.closeExplosion = function() { + this.isLoaded() && (this.defaultManager.closeExplosion(this.model), + vc.Instance && this.instancedManager.closeExplosion(this.model)) + } + , + tf.prototype.componentsExplosion = function(A) { + this.isLoaded() && (this.defaultManager.componentsExplosion(this.model, A), + vc.Instance && this.instancedManager.componentsExplosion(this.model, A)) + } + , + tf.prototype.closeComponentsExplosion = function(A) { + this.isLoaded() && (this.defaultManager.closeComponentsExplosion(this.model, A), + vc.Instance && this.instancedManager.closeComponentsExplosion(this.model, A)) + } + , + tf.prototype.isHiddenNode = function(A) { + return this.defaultManager.isHiddenNode(A) || this.instancedManager.isHiddenNode(A) + } + , + tf.prototype.moveMeshfromInstancedToDefault = function(A) {} + ; + var of = function(A) { + this.manager = A, + this.pickingNodeMap = null, + this.pickingNodeGroup = null, + this.nodeGroupName = "PickingNodeGroup" + }; + of.prototype.destroy = function() { + this.clearData(), + this.pickingNodeGroup = null, + this.manager = null + } + , + of.prototype.clearData = function() { + this.clearAllFromPickingNodeGroup(), + this.clearAllFromPickingNodeMap() + } + , + of.prototype.addToPickingNodeMap = function(A, e) { + this.pickingNodeMap || (this.pickingNodeMap = {}), + this.pickingNodeMap[A] = e, + this.addToPickingNodeGroup(e) + } + , + of.prototype.removeFromPickingNodeMap = function(A) { + this.pickingNodeMap && this.pickingNodeMap[A] && (this.removeFormPickingNodeGroup(A), + this.disposePickingNodeById(A), + delete this.pickingNodeMap[A]) + } + , + of.prototype.addToPickingNodeGroup = function(A) { + this.pickingNodeGroup || (this.pickingNodeGroup = new Xi, + this.pickingNodeGroup.name = this.nodeGroupName); + for (var e = 0, t = A.length; t > e; e += 1) + this.pickingNodeGroup.add(A[e]) + } + , + of.prototype.removeFormPickingNodeGroup = function(A) { + if (this.pickingNodeGroup) + for (var e = this.pickingNodeMap[A], t = 0, i = e.length; i > t; t += 1) + this.pickingNodeGroup.remove(e[t]) + } + , + of.prototype.disposePickingNodeById = function(A) { + for (var e = this.pickingNodeMap[A], t = 0, i = e.length; i > t; t += 1) + e[t].material = null, + e[t].geometry.dispose(), + e[t] = null + } + , + of.prototype.clearAllFromPickingNodeMap = function() { + if (this.pickingNodeMap) { + for (var A = Object.keys(this.pickingNodeMap), e = 0, t = A.length; t > e; e += 1) + this.disposePickingNodeById(A[e]); + this.pickingNodeMap = null + } + } + , + of.prototype.clearAllFromPickingNodeGroup = function() { + this.pickingNodeGroup && (this.pickingNodeGroup.children.length = 0) + } + , + of.prototype.isPickingMeshesGenerated = function() { + return !!this.pickingNodeMap + } + , + of.prototype.generatePickingMeshes = function() {} + , + of.prototype.updatePickingMeshesState = function(A, e, t) {} + , + of.prototype.resetPickingMeshesState = function() {} + , + of.prototype.updatePickingMeshes = function(A, e, t) { + return this.isPickingMeshesGenerated() || (this.generatePickingMeshes(), + this.isPickingMeshesGenerated()) ? (this.resetPickingMeshesState(), + this.updatePickingMeshesState(A, e, t), + this.getPickingNodeGroup()) : null + } + , + of.prototype.getPickingNodeGroup = function() { + return this.pickingNodeGroup + } + ; + var nf = function(A) { + of.call(this, A), + this.nodeGroupName = "PickingBatchedMeshGroup" + }; + Object.assign(nf.prototype, of.prototype), + eu(nf, [{ + key: "disposePickingNodeById", + value: function(A) { + for (var e = this.pickingNodeMap[A], t = 0, i = e.length; i > t; t += 1) + e[t]._indicesGroup = null, + e[t].material = null, + e[t].geometry.dispose(), + e[t] = null + } + }, { + key: "generatePickingMeshes", + value: function() { + for (var A = this.manager, e = Object.keys(A.mapMaterialIdToMergedNode), t = 0, i = e.length; i > t; t += 1) { + for (var o = e[t], n = A.getPropertyValueByMaterialKey(o), r = A.mapMaterialIdToMergedNode[o], a = [], s = 0, l = r.length; l > s; s += 1) { + var c = r[s] + , h = c.geometry + , d = c.indices + , p = c.mesh + , g = new he; + g.setAttribute("position", h.getAttribute("position")), + g.setIndex(h.getIndex()); + var u = new ("lines" === n.type ? jo : Ue)(g,Kd.DefaultMaterial); + p.matrixWorld.decompose(u.position, u.quaternion, u.scale), + u.name = o, + u.frustumCulled = !1, + u.renderOrder = 0, + u._indicesGroup = d, + a.push(u) + } + this.addToPickingNodeMap(o, a) + } + } + }, { + key: "_rebuildGeometryGroup", + value: function(A, e, t) { + var i, o = this.manager.manager, n = 0, r = 0, a = 0, s = A._indicesGroup, l = Object.keys(s), c = [], h = {}; + e.length > l.length ? (c = l, + h = t) : (c = e, + h = s); + var d = []; + for (a = 0, + i = c.length; i > a; a += 1) { + var p = c[a]; + if (o.isPickableNode(p) && h[p]) { + var g = s[p]; + if (g && g.length > 0) + for (n = 0, + r = g.length; r > n; n += 1) + d.push({ + indexStart: g[n].indexStart, + indexCount: g[n].indexCount + }) + } + } + A.visible = !0; + var u = A.geometry; + if (u.clearGroups(), + 0 !== d.length) + for (d.sort((function(A, e) { + return A.indexStart - e.indexStart + } + )), + n = 0, + r = d.length; r > n; n += 1) { + var f = d[n].indexStart + , m = d[n].indexCount; + if (0 === n) + u.addGroup(f, m, 0); + else + f === d[n - 1].indexStart + d[n - 1].indexCount ? u.groups[u.groups.length - 1].count += m : u.addGroup(f, m, 0) + } + else + A.visible = !1 + } + }, { + key: "updatePickingMeshesState", + value: function(A, e, t) { + for (var i = this.pickingNodeMap, o = Object.keys(i), n = 0, r = o.length; r > n; n += 1) + for (var a = i[o[n]], s = 0, l = a.length; l > s; s += 1) + a[s].material = [A], + a[s].visible = !1, + this._rebuildGeometryGroup(a[s], e, t) + } + }]); + var rf = new aA + , af = new M + , sf = new CA + , lf = new cA + , cf = function() { + jo.call(this), + this.type = "LineSegmentsEx" + }; + cf.prototype.init = function(A) {} + , + cf.prototype.destroy = function() {} + , + cf.prototype.intersectBoxWithDistance = function(A, e) { + var t = this.geometry + , i = this.matrixWorld; + return e && (i = this.matrixWorld.clone()).multiplyMatrices(this.matrixWorld, e), + t.boundingBox || t.computeBoundingBox(), + rf.copy(t.boundingBox), + rf.applyMatrix4(i), + A.ray.intersectBoxWithDistance(rf) + } + , + cf.prototype.intersectBoxWithDistanceByIndices = function(A, e) { + var t = this.geometry.attributes.position.array + , i = 0 + , o = t.length; + e && e.indexCount > 0 && (i = e.positionStart, + o = e.positionStart + e.positionCount); + var n = uh.box3FromArrayRange(t, i, o); + return n.applyMatrix4(this.matrixWorld), + A.ray.intersectBoxWithDistance(n) + } + , + cf.prototype.raycastByIndices = function(A, e, t, i) { + var o = A.linePrecision; + A.linePrecision = vc.LineSelectRange || 5; + var n = A.linePrecision + , r = n * n + , a = null; + i ? (a = this.matrixWorld.clone()).multiplyMatrices(this.matrixWorld, i) : a = this.matrixWorld; + var s = this.geometry; + if (null === s.boundingSphere && s.computeBoundingSphere(), + lf.copy(s.boundingSphere), + lf.applyMatrix4(a), + !1 !== A.ray.intersectsSphere(lf)) { + af.getInverse(a), + sf.copy(A.ray).applyMatrix4(af); + var l = new y + , c = new y + , h = new y + , d = new y + , p = s.attributes.position.array + , g = s.index.array + , u = 0 + , f = g.length; + t && t.indexCount > 0 && (u = t.indexStart, + f = t.indexStart + t.indexCount); + for (var m = u; f - 1 > m; m += 2) { + var C = g[m + 1]; + if (l.fromArray(p, 3 * g[m]), + c.fromArray(p, 3 * C), + r >= sf.distanceSqToSegment(l, c, d, h)) { + d.applyMatrix4(a); + var v = A.ray.origin.distanceTo(d); + A.near > v || v > A.far || e.push({ + distance: v, + point: h.clone().applyMatrix4(a), + index: m, + face: null, + faceIndex: null, + object: this + }) + } + } + A.linePrecision = o + } + } + ; + var hf = new M + , df = new CA + , pf = new cA + , gf = new y + , uf = new y + , ff = new y + , mf = new y + , Cf = new y + , yf = new y + , vf = new y + , If = new y + , Ef = new y + , Bf = new s + , xf = new s + , Sf = new s + , wf = new y + , Mf = new y; + function bf(A, e, t, i, o, n, r, a) { + if (null === (Array.isArray(e) ? i.intersectTriangle(o, n, r, !1, a) : 1 === e.side ? i.intersectTriangle(r, n, o, !0, a) : i.intersectTriangle(o, n, r, 2 !== e.side, a))) + return null; + Mf.copy(a), + Mf.applyMatrix4(A.matrixWorld); + var s = t.ray.origin.distanceTo(Mf); + return t.near > s || s > t.far ? null : { + distance: s, + point: Mf.clone(), + object: A + } + } + function Uf(A, e, t, i, o, n, r, a, l, c, h, d) { + gf.fromBufferAttribute(o, c), + uf.fromBufferAttribute(o, h), + ff.fromBufferAttribute(o, d); + var p = A.morphTargetInfluences; + if (e.morphTargets && n && p) { + vf.set(0, 0, 0), + If.set(0, 0, 0), + Ef.set(0, 0, 0); + for (var g = 0, u = n.length; u > g; g += 1) { + var f = p[g] + , m = n[g]; + 0 !== f && (mf.fromBufferAttribute(m, c), + Cf.fromBufferAttribute(m, h), + yf.fromBufferAttribute(m, d), + r ? (vf.addScaledVector(mf, f), + If.addScaledVector(Cf, f), + Ef.addScaledVector(yf, f)) : (vf.addScaledVector(mf.sub(gf), f), + If.addScaledVector(Cf.sub(uf), f), + Ef.addScaledVector(yf.sub(ff), f))) + } + gf.add(vf), + uf.add(If), + ff.add(Ef) + } + var C = bf(A, e, t, i, gf, uf, ff, wf); + if (C) { + a && (Bf.fromBufferAttribute(a, c), + xf.fromBufferAttribute(a, h), + Sf.fromBufferAttribute(a, d), + C.uv = RA.getUV(wf, gf, uf, ff, Bf, xf, Sf, new s)), + l && (Bf.fromBufferAttribute(l, c), + xf.fromBufferAttribute(l, h), + Sf.fromBufferAttribute(l, d), + C.uv2 = RA.getUV(wf, gf, uf, ff, Bf, xf, Sf, new s)); + var y = new GA(c,h,d); + RA.getNormal(gf, uf, ff, y.normal), + C.face = y + } + return C + } + var Ff, Kf = function(A, e) { + Ue.call(this), + this.type = "MeshEx", + this.matrixAutoUpdate = !1, + this.active = !1, + this.guid = "", + this.key = "", + this.typeEx = "", + this.geometry = A || Tu.EmptyGeometry, + this.material = e || Kd.DefaultMaterial, + this.visible = !1, + this.pickable = !0 + }; + (Kf.prototype = Object.create(Ue.prototype)).constructor = Kf, + Kf.prototype.init = function(A) { + A && A.parent && A.parent.add(this) + } + , + Kf.prototype.destroy = function() { + this.parent && this.parent.remove(this), + this.userData && (this.userData = null), + this.geometry = null, + this.material = null + } + , + Kf.prototype.isVisible = function() { + return this.visible && this.active + } + , + Kf.prototype.spawn = function(A) { + void 0 !== A.guid && (this.guid = A.guid), + void 0 !== A.key && (this.key = A.key), + void 0 !== A.name && (this.name = A.name), + void 0 !== A.typeEx && (this.typeEx = A.typeEx), + A.geometry && (this.geometry = A.geometry), + A.material && (this.material = A.material), + A.matrix ? (this.matrix.copy(A.matrix), + this.updateMatrixWorld(!0)) : (this.matrix.identity(), + this.updateMatrixWorld(!0)), + this.modelKey = A.modelKey ? A.modelKey : "", + A.userData ? this.userData = A.userData : this.userData && (this.userData = null), + void 0 !== A.visible && (this.visible = A.visible), + void 0 !== A.isMesh && (this.isMesh = A.isMesh), + void 0 !== A.isLine && (this.isLine = A.isLine), + void 0 !== A.isLineSegments && (this.isLineSegments = A.isLineSegments), + this.pickable = void 0 === A.pickable || A.pickable, + this.renderOrder = A.renderOrder || 0, + this.active = !0, + this.visible = !0, + this.frustumCulled = !1, + this.matChange = !1 + } + , + Kf.prototype.clear = function() { + this.geometry = Tu.EmptyGeometry, + this.material = Kd.DefaultMaterial, + this.active = !1, + this.visible = !0, + this.guid = "", + this.key = "", + this.typeEx = "", + this.frustumCulled = !0, + this.material.visible = !1 + } + , + Kf.prototype.intersectBoxWithDistance = (Ff = new aA, + function(A, e) { + var t = this.geometry + , i = this.material + , o = this.matrixWorld; + return e && (o = new M).multiplyMatrices(this.matrixWorld, e), + void 0 === i ? -1 : (t.boundingBox || t.computeBoundingBox(), + Ff.copy(t.boundingBox), + Ff.applyMatrix4(o), + A.ray.intersectBoxWithDistance(Ff)) + } + ), + Kf.prototype.intersectBoxWithDistanceByIndices = function(A, e) { + var t = this.matrixWorld + , i = this.computeBoundingBox(e); + return i.applyMatrix4(t), + A.ray.intersectBoxWithDistance(i) + } + , + Kf.prototype.intersectBoxWithClipPlane = function(A, e) { + var t = this.matrixWorld + , i = this.computeBoundingBox(e); + return i.applyMatrix4(t), + i.intersectsPlane(A) + } + , + Kf.prototype.getIntersectionPoints = function(A, e, t, i) { + var o = new M; + o.getInverse(this.matrixWorld); + var n = A.clone(); + n.constant *= -1, + n = n.applyMatrix4(o); + function r(A, e) { + var i = e.intersectLine(A); + i && t.push(i.x, i.y, i.z) + } + for (var a, s, l, c = this.geometry.getIndex().array, h = this.geometry.getAttribute("position").array, d = i ? 0 : e.indexStart, p = i ? c.length : e.indexStart + e.indexCount, g = new y, u = new y, f = new y, m = new Hs, C = new Hs, v = new Hs, I = d, E = p; E > I; I += 3) + s = 3 * c[I + 1], + l = 3 * c[I + 2], + g.set(h[a = 3 * c[I]], h[a + 1], h[a + 2]), + u.set(h[s], h[s + 1], h[s + 2]), + f.set(h[l], h[l + 1], h[l + 2]), + i && (g.applyMatrix4(e.matrix), + u.applyMatrix4(e.matrix), + f.applyMatrix4(e.matrix)), + m.set(g, u), + C.set(u, f), + v.set(f, g), + r(m, n), + r(C, n), + r(v, n) + } + , + Kf.prototype.raycastByIndices = function() { + var A = new M + , e = new CA + , t = new cA + , i = new y + , o = new y + , n = new y + , r = new s + , a = new s + , l = new s + , c = new y + , h = new y + , d = new y + , p = new M; + function g(A, e, t, s, g, u, f, m) { + i.fromBufferAttribute(s, u), + o.fromBufferAttribute(s, f), + n.fromBufferAttribute(s, m); + var C = function(A, e, t, i, o, n, r) { + var a = A.material; + if (null === (Array.isArray(a) ? t.intersectTriangle(i, o, n, !1, r) : 1 === a.side ? t.intersectTriangle(n, o, i, !0, r) : t.intersectTriangle(i, o, n, 2 !== a.side, r))) + return null; + d.copy(r), + d.applyMatrix4(p); + var s = e.ray.origin.distanceTo(d); + return e.near > s || s > e.far ? null : { + distance: s, + point: d.clone(), + object: A + } + }(A, e, t, i, o, n, h); + if (C) { + if (g && g.array && g.array.length && (r.fromBufferAttribute(g, u), + a.fromBufferAttribute(g, f), + l.fromBufferAttribute(g, m), + C.uv = function(A, e, t, i, o, n, r) { + return RA.getBarycoord(A, e, t, i, c), + o.multiplyScalar(c.x), + n.multiplyScalar(c.y), + r.multiplyScalar(c.z), + o.add(n).add(r), + o.clone() + }(h, i, o, n, r, a, l)), + s.instanceMatrix) { + var v = i.clone().applyMatrix4(s.instanceMatrix) + , I = o.clone().applyMatrix4(s.instanceMatrix) + , E = n.clone().applyMatrix4(s.instanceMatrix); + C.face = new GA(u,f,m,RA.getNormal(v, I, E, new y)) + } else + C.face = new GA(u,f,m,RA.getNormal(i, o, n, new y)); + C.faceIndex = u + } + return C + } + return function(i, o, n, r) { + var a = this.geometry + , s = this.material; + if (r) { + a = this.geometry, + s = this.material; + if ((p = new M).multiplyMatrices(this.matrixWorld, r), + void 0 === s) + return; + if (null === a.boundingSphere && a.computeBoundingSphere(), + t.copy(a.boundingSphere), + t.applyMatrix4(p), + !1 === i.ray.intersectsSphere(t)) + return; + if (A.getInverse(p), + e.copy(i.ray).applyMatrix4(A), + null !== a.boundingBox && !1 === e.intersectsBox(a.boundingBox)) + return; + var l = null + , c = null + , h = null + , d = null + , u = a.index; + (I = a.attributes.position).instanceMatrix = r; + var f = a.attributes.uv + , m = null + , C = null; + if (null !== u) + for (m = 0, + C = u.count; C > m; m += 3) + c = u.getX(m), + h = u.getX(m + 1), + d = u.getX(m + 2), + (l = g(this, i, e, I, f, c, h, d)) && (l.faceIndex = Math.floor(m / 3), + o.push(l)); + else + for (m = 0, + C = I.count; C > m; m += 3) + (l = g(this, i, e, I, f, c = m, h = m + 1, d = m + 2)) && (l.index = c, + o.push(l)) + } else { + if (p = this.matrixWorld, + void 0 === s) + return; + if (t.copy(this.computeBoundingSphere(n)), + t.applyMatrix4(p), + !1 === i.ray.intersectsSphere(t)) + return; + A.getInverse(p), + e.copy(i.ray).applyMatrix4(A); + var y = this.computeBoundingBox(n); + if (!1 === e.intersectsBox(y)) + return; + l = null, + c = null, + h = null, + d = null; + var v, I = a.attributes.position, E = (f = a.attributes.uv, + m = null, + n.indexStart), B = n.indexStart + n.indexCount, x = a.getIndex().array; + for (m = E, + v = B; v > m; m += 3) + (l = g(this, i, e, I, f, c = x[m], h = x[m + 1], d = x[m + 2])) && (l.faceIndex = Math.floor(m / 3), + o.push(l)) + } + } + }(), + Kf.prototype.raycastByIndices2 = function() { + var A = new M + , e = new CA + , t = new cA + , i = new y + , o = new y + , n = new y + , r = new s + , a = new s + , l = new s + , c = new y + , h = new y + , d = new y + , p = new M; + function g(A, e, t, s, g, u, f, m) { + i.fromBufferAttribute(s, u), + o.fromBufferAttribute(s, f), + n.fromBufferAttribute(s, m); + var C = function(A, e, t, i, o, n, r) { + var a = A.material; + if (null === (a instanceof Array ? t.intersectTriangle(i, o, n, !1, r) : 1 === a.side ? t.intersectTriangle(n, o, i, !0, r) : t.intersectTriangle(i, o, n, 2 !== a.side, r))) + return null; + d.copy(r), + d.applyMatrix4(p); + var s = e.ray.origin.distanceTo(d); + return e.near > s || s > e.far ? null : { + distance: s, + point: d.clone(), + object: A + } + }(A, e, t, i, o, n, h); + if (C) { + if (g && g.array && g.array.length && (r.fromBufferAttribute(g, u), + a.fromBufferAttribute(g, f), + l.fromBufferAttribute(g, m), + C.uv = function(A, e, t, i, o, n, r) { + return RA.barycoordFromPoint(A, e, t, i, c), + o.multiplyScalar(c.x), + n.multiplyScalar(c.y), + r.multiplyScalar(c.z), + o.add(n).add(r), + o.clone() + }(h, i, o, n, r, a, l)), + s.instanceMatrix) { + var y = i.clone().applyMatrix4(s.instanceMatrix) + , v = o.clone().applyMatrix4(s.instanceMatrix) + , I = n.clone().applyMatrix4(s.instanceMatrix); + C.face = new GA(u,f,m,RA.normal(y, v, I)) + } else + C.face = new GA(u,f,m,RA.normal(i, o, n)); + C.faceIndex = u + } + return C + } + return function(i, o, n, r) { + var a = this.geometry + , s = this.material; + if (r = !!r, + n.isInstanced) { + if (void 0 === n.matrix) + return; + if (p.multiplyMatrices(this.matrixWorld, n.matrix), + void 0 === s) + return; + if (r && (null === a.boundingSphere && a.computeBoundingSphere(), + t.copy(a.boundingSphere), + t.applyMatrix4(p), + !1 === i.ray.intersectsSphere(t))) + return; + if (A.getInverse(p), + e.copy(i.ray).applyMatrix4(A), + r && null !== a.boundingBox && !1 === e.intersectsBox(a.boundingBox)) + return; + var l = a.index; + (I = a.attributes.position).instanceMatrix = n.matrix; + var c, h = a.attributes.uv; + if (null !== l) + for (y = 0, + c = l.count; c > y; y += 3) + f = l.getX(y), + m = l.getX(y + 1), + C = l.getX(y + 2), + (u = g(this, i, e, I, h, f, m, C)) && (u.faceIndex = Math.floor(y / 3), + o.push(u)); + else + for (y = 0, + c = I.count; c > y; y += 3) + (u = g(this, i, e, I, h, f = y, m = y + 1, C = y + 2)) && (u.index = f, + o.push(u)) + } else if (n.matrix ? p.multiplyMatrices(this.matrixWorld, n.matrix) : p = this.matrixWorld, + void 0 !== s && (!r || (t.copy(this.computeBoundingSphere(n)), + t.applyMatrix4(p), + !1 !== i.ray.intersectsSphere(t)))) { + if (A.getInverse(p), + e.copy(i.ray).applyMatrix4(A), + r) { + var d = this.computeBoundingBox(n); + if (!1 === e.intersectsBox(d)) + return + } + var u, f, m, C, y, v, I = a.attributes.position, E = (h = a.attributes.uv, + n.indexStart), B = n.indexStart + n.indexCount, x = a.getIndex().array; + for (y = E, + v = B; v > y; y += 3) + (u = g(this, i, e, I, h, f = x[y], m = x[y + 1], C = x[y + 2])) && (u.faceIndex = Math.floor(y / 3), + o.push(u)) + } + } + }(), + Kf.prototype.computeBoundingBox = function(A) { + var e = new aA + , t = this.geometry.attributes.position.array + , i = null + , o = null; + return A ? (i = A.positionStart, + o = A.positionStart + A.positionCount) : (i = 0, + o = t.length), + this.setBoundingBoxFromArray(e, t, i, o), + e + } + , + Kf.prototype.computeBoundingSphere = function(A) { + var e = new aA + , t = new y + , i = this.geometry.attributes.position.array + , o = null + , n = null; + A ? (o = A.positionStart, + n = A.positionStart + A.positionCount) : (o = 0, + n = i.length); + var r = new cA + , a = r.center; + this.setBoundingBoxFromArray(e, i, o, n), + e.getCenter(a); + for (var s = 0, l = o, c = n; c > l; l += 3) + t.x = i[l], + t.y = i[l + 1], + t.z = i[l + 2], + s = Math.max(s, a.distanceToSquared(t)); + return r.radius = Math.sqrt(s), + r + } + , + Kf.prototype.setBoundingBoxFromArray = function(A, e, t, i) { + for (var o = Number(1 / 0), n = Number(1 / 0), r = Number(1 / 0), a = -1 / 0, s = -1 / 0, l = -1 / 0, c = t, h = i; h > c; c += 3) { + var d = e[c] + , p = e[c + 1] + , g = e[c + 2]; + o > d && (o = d), + n > p && (n = p), + r > g && (r = g), + d > a && (a = d), + p > s && (s = p), + g > l && (l = g) + } + A.min.set(o, n, r), + A.max.set(a, s, l) + } + , + Kf.prototype.raycast = function(A, e) { + var t = this.geometry + , i = this.material + , o = this.matrixWorld; + if (void 0 !== i && (null === t.boundingSphere && t.computeBoundingSphere(), + pf.copy(t.boundingSphere), + pf.applyMatrix4(o), + !1 !== A.ray.intersectsSphere(pf) && (hf.getInverse(o), + df.copy(A.ray).applyMatrix4(hf), + null === t.boundingBox || !1 !== df.intersectsBox(t.boundingBox)))) { + var n = null; + if (t.isBufferGeometry) { + var r = null + , a = null + , l = null + , c = t.index + , h = t.attributes.position + , d = t.morphAttributes.position + , p = t.morphTargetsRelative + , g = t.attributes.uv + , u = t.attributes.uv2 + , f = t.groups + , m = t.drawRange + , C = null + , y = null + , v = null + , I = null + , E = null + , B = null; + if (null !== c) + if (Array.isArray(i)) { + for (C = 0, + v = f.length; v > C; C += 1) + if (B = i[(E = f[C]).materialIndex]) + for (y = Math.max(E.start, m.start), + I = Math.min(E.start + E.count, m.start + m.count); I > y; y += 3) + r = c.getX(y), + a = c.getX(y + 1), + l = c.getX(y + 2), + (n = Uf(this, B, A, df, h, d, p, g, u, r, a, l)) && (n.faceIndex = Math.floor(y / 3), + n.face.materialIndex = E.materialIndex, + e.push(n)) + } else + for (C = Math.max(0, m.start), + v = Math.min(c.count, m.start + m.count); v > C; C += 3) + r = c.getX(C), + a = c.getX(C + 1), + l = c.getX(C + 2), + (n = Uf(this, i, A, df, h, d, p, g, u, r, a, l)) && (n.faceIndex = Math.floor(C / 3), + e.push(n)); + else if (void 0 !== h) + if (Array.isArray(i)) { + for (C = 0, + v = f.length; v > C; C += 1) + if (B = i[(E = f[C]).materialIndex]) + for (y = Math.max(E.start, m.start), + I = Math.min(E.start + E.count, m.start + m.count); I > y; y += 3) + (n = Uf(this, B, A, df, h, d, p, g, u, r = y, a = y + 1, l = y + 2)) && (n.faceIndex = Math.floor(y / 3), + n.face.materialIndex = E.materialIndex, + e.push(n)) + } else + for (C = Math.max(0, m.start), + v = Math.min(h.count, m.start + m.count); v > C; C += 3) + (n = Uf(this, i, A, df, h, d, p, g, u, r = C, a = C + 1, l = C + 2)) && (n.faceIndex = Math.floor(C / 3), + e.push(n)) + } else if (t.isGeometry) { + var x = null + , S = null + , w = null + , M = Array.isArray(i) + , b = t.vertices + , U = t.faces + , F = null + , K = t.faceVertexUvs[0]; + K.length > 0 && (F = K); + for (var Q = 0, R = U.length; R > Q; Q += 1) { + var T = U[Q] + , k = M ? i[T.materialIndex] : i; + if (void 0 !== k && (n = bf(this, k, A, df, x = b[T.a], S = b[T.b], w = b[T.c], wf))) { + if (F && F[Q]) { + var D = F[Q]; + Bf.copy(D[0]), + xf.copy(D[1]), + Sf.copy(D[2]), + n.uv = RA.getUV(wf, x, S, w, Bf, xf, Sf, new s) + } + n.face = T, + n.faceIndex = Q, + e.push(n) + } + } + } + } + } + ; + var Qf = function(A, e) { + this.model = e, + this.loader = A, + this.mapNodeInfoByCategory = {}, + this.mapNodeInfoByUserId = {}, + this.mapNodeInfoByComponentId = {}, + this.referencedMeshCache = {}, + this.nodeInfosOnGeometryId = null, + this.componentCount = 0, + this.meshCache = {}, + this.allBones = {} + }; + Qf.EnumNodeItemType = { + SYMBOL: 0, + MESH: 1, + TUBE: 2, + PIPE: 3, + BOX: 4, + BOX_M: 5, + PIPE_M: 6, + MESH_REF: 7, + LINE: 8 + }, + Qf.NodeInfoCategory = { + INSTANCED: 0, + STANDARD: 1 + }, + Qf.EnumDataType = { + NONE: 0, + MERGE_DATA: 1, + LAYER: 2, + LAYER_SCENE: 3, + ANIMATION: 4 + }, + Qf.EnumKeyframeTrackType = { + position: "position", + scale: "scale", + quaternion: "quaternion", + weights: "weights" + }, + Qf.prototype.destroy = function() { + this.mapNodeInfoByCategory = null, + this.mapNodeInfoByUserId = null, + this.mapNodeInfoByComponentId = null, + this.referencedMeshCache = null, + this.nodeInfosOnGeometryId = null + } + , + Qf.prototype.clearReferencedMeshCache = function() { + if (!vc.DEBUG) { + for (var A in this.referencedMeshCache) + delete this.referencedMeshCache[A]; + this.referencedMeshCache = null + } + } + , + Qf.prototype.cacheReferencedMeshBufferData = function(A, e) { + this.referencedMeshCache.geometries || (this.referencedMeshCache.geometries = {}), + this.referencedMeshCache.geometries[A] = e + } + , + Qf.prototype.cacheReferencedMeshBoneBufferData = function(A, e) { + this.referencedMeshCache.bones || (this.referencedMeshCache.bones = {}), + this.referencedMeshCache.bones[A] = e + } + , + Qf.prototype.cacheReferencedMeshClipsData = function(A) { + this.referencedMeshCache.clips = A + } + , + Qf.prototype.cacheReferencedMeshNodesData = function(A) { + this.referencedMeshCache.nodes = A + } + , + Qf.prototype.cacheReferencedMeshComponentData = function(A, e) { + this.referencedMeshCache.components || (this.referencedMeshCache.components = {}), + this.referencedMeshCache.components[A] = e + } + , + Qf.prototype.cacheReferencedMeshMaterialData = function(A, e) { + this.referencedMeshCache.materials || (this.referencedMeshCache.materials = {}), + this.referencedMeshCache.materials[A] = e + } + , + Qf.prototype.getReferencedMeshBufferData = function() { + return this.referencedMeshCache.geometries + } + , + Qf.prototype.getReferencedMeshBufferById = function(A) { + return this.referencedMeshCache.geometries ? this.referencedMeshCache.geometries[A] : null + } + , + Qf.prototype.cacheReferencedMeshMpkIds = function(A, e) { + this.referencedMeshCache.mpkIds || (this.referencedMeshCache.mpkIds = {}), + this.referencedMeshCache.mpkIds[A] || (this.referencedMeshCache.mpkIds[A] = []), + this.referencedMeshCache.mpkIds[A].push(e) + } + , + Qf.prototype.clearReferencedMeshCacheByMpkIdxs = function(A, e) { + if (this.referencedMeshCache.mpkIds) + for (var t = 0, i = A.length; i > t; t += 1) { + var o = A[t] + , n = this.referencedMeshCache.mpkIds[o]; + if (n) { + for (var r = 0, a = n.length; a > r; r += 1) + e && e(n[r]), + delete this.referencedMeshCache[n[r]]; + delete this.referencedMeshCache.mpkIds[o] + } + } + } + , + Qf.prototype.parseItemData = function(A, e) { + (op(A.dataVersion, "1.0") || void 0 === A.dataVersion) && (Bh.time("升级几何结构"), + this._updateV1ToV2(A), + A.dataVersion = "2.0", + Bh.timeEnd("升级几何结构")), + this._readMaterialBuffer222(A), + A.hasAnimation && vc.EnableAnimation ? (this._parseClips(), + this._parseBones()) : (this._parseGeo(), + this._parseInstanced()); + var t = this.loader.getSceneReaderArray(); + if (!t) + return Bh.log("Empty scene"), + !1; + var i = this.referencedMeshCache; + if (Bh.time("_readItemData"), + !i.geometries || 0 >= Object.keys(i.geometries).length) + return !0; + if (e) + for (var o = 0, n = e.length; n > o; o += 1) + i.components[e[o]] && this._readItemData(t, e[o], e[o], void 0, 0); + else + for (var r in i.components) + this._readItemData(t, r, r, void 0, 0); + return A.hasAnimation && vc.EnableAnimation && this._parseNodes(), + Bh.timeEnd("_readItemData"), + t = null, + !0 + } + , + Qf.prototype._readItemData = function(A, e, t) { + var i = this.referencedMeshCache.components[e]; + void 0 !== i && -1 !== i.geoId && (this.model.merged ? this._readMeshInfo(A, t, i, null) : this._readMeshInfo2(A, t, i, null)) + } + , + Qf.prototype._readSymbolInfo = function(A, e, t) { + var i = this.loader.getSymbolReader(); + if (i) { + var o = i.header.symbolCount + , n = t.toData + , r = A.getMatrixInfo(t.matrixId).matrix.clone() + , a = { + matrix: r, + ItemId: t.ItemId, + originalId: t.originalId, + userDataId: t.userDataId, + materialId: t.materialId + }; + if (n >= 0 && o > n) + for (var s = i.getSymbolInfo(n), l = s.itemIndex; s.itemCount > l; l += 1) { + var c = i.getItemInfo(l); + c.type !== Qf.EnumNodeItemType.SYMBOL && this._readMeshInfo(i, e, c, a) + } + r = null, + a = null, + i = null + } + } + , + Qf.prototype._readMeshInfo = function(A, e, t, i) { + var o = this.loader + , n = this.model.materialManager.materials + , r = null + , a = null + , s = null; + if (null === i ? (r = t.userDataId, + a = t.originalId, + s = t.materialId || t.matId) : (r = i.userDataId, + a = i.originalId, + s = i.materialId > -1 ? i.materialId : t.materialId), + t.materials || (t.materials = []), + t.materials.length > 0) + for (var l = 0; t.materials.length > l; l += 1) { + var c = null; + if (c = this._getMeshNodeAttr(A, t, t.materials.length > 1, l), + !n[s = t.materials[l]]) { + var h = _u[t.type] ? _u[t.type].color : void 0; + h || (Bh.log("Material not found for type: ", t.type), + h = _u.DEFAULT.color), + h || (Bh.log("Default material not found for type: ", t.type), + h = [1, 1, 1, 1]); + var d = new LA(h[0],h[1],h[2]) + , p = s || d.getHexString() + "_" + h[3] + , g = n[p]; + g || (Bh.warn("缺少材质 " + s), + g = new xr({ + color: d + }), + 1 > h[3] && (g.transparent = !0, + g.opacity = h[3]), + g.side = 2, + n[p] = g) + } + if (n[s].aoMap) { + var u = this.getReferencedMeshBufferById(c.geometryId); + u && (u.uv2 = u.uv) + } + if (!c) + return; + var f = o.getUserDataReader() + , m = f ? f.getUserData(r) : null + , C = t.key; + c.type = t.type, + c.userId = C, + c.name = t.name, + c.userDataId = r, + c.originalId = a, + c.materialId = s, + c.originMId = s, + c.userData = m, + c.categoryId = 0, + c.componentId = C, + c.familyName = t.familyName, + c.familySymbol = t.familySymbol, + c.instanceOrNot = !(!vc.Instance || !this.instancedComponent[C]), + c.state = Lc.Visible, + c.material = null, + this._classifyNodeInfo(c), + c = null + } + else { + var y = null + , v = _u[t.type] ? _u[t.type].color : void 0; + v || (Bh.log("Material not found for type: ", t.type), + v = _u.DEFAULT.color), + v || (Bh.log("Default material not found for type: ", t.type), + v = [1, 1, 1, 1]); + var I = new LA(v[0],v[1],v[2]) + , E = I.getHexString() + "_" + v[3] + , B = n[E]; + if (B || (B = new xr({ + color: I + }), + 1 > v[3] && (B.transparent = !0, + B.opacity = v[3]), + B.side = 2, + n[E] = B), + t.materials.push(E), + y = this._getMeshNodeAttr(A, t, !1, 0), + s = t.materials[0], + !y) + return; + var x = t.key; + y.type = t.type, + y.userId = x, + y.name = t.name, + y.originalId = a, + y.materialId = s, + y.originMId = s, + y.userData = {}, + y.categoryId = 0, + y.componentId = x, + y.familyName = t.familyName, + y.familySymbol = t.familySymbol, + y.instanceOrNot = !(!vc.Instance || !this.instancedComponent[x]), + y.state = Lc.Visible, + y.material = null, + this._classifyNodeInfo(y), + y = null + } + } + , + Qf.prototype._readMeshInfo2 = function(A, e, t, i) { + var o = this.loader + , n = null + , r = null + , a = null; + null === i ? (n = t.userDataId, + r = t.originalId, + a = t.materials || t.matId) : (n = i.userDataId, + r = i.originalId, + a = i.materialId > -1 ? i.materialId : t.materialId); + var s = null; + if (s = this._getMeshNodeAttr(A, t, !1)) { + var l = o.getUserDataReader() + , c = l ? l.getUserData(n) : null + , h = t.key; + s.type = t.type, + s.userId = h, + s.name = t.name, + s.originalId = r, + s.materialId = a, + s.originMId = a, + s.userData = c, + s.categoryId = 0, + s.componentId = h, + s.familyName = t.familyName, + s.familySymbol = t.familySymbol, + s.state = Lc.Visible, + s.material = null, + this._classifyNodeInfo(s), + s = null + } + } + , + Qf.prototype._getMeshNodeAttrOfPipe = function(A, e, t) { + var i = A.getMatrixInfo(e.matrixId).matrix.clone() + , o = uh.TemporaryMatrix; + o.copy(i); + var n = A.getGeomPipeInfo(e.toData) + , r = n.startPt + , a = n.endPt + , s = new y; + s.subVectors(a, r); + var l = s.length(); + s.normalize(); + var c = n.radius; + c > 1 || (c = 100); + var h = new y(0,1,0) + , d = new y(c,l,c) + , p = (new f).setFromUnitVectors(h, s) + , g = r.clone().addScaledVector(s, .5 * l) + , u = (new M).compose(g, p, d); + return i.multiply(u), + t && (i.multiplyMatrices(t.matrix, i), + o.multiplyMatrices(t.matrix, o)), + n = null, + { + nodeId: (t ? t.ItemId + "_" + e.ItemId : e.ItemId) + "_pipe", + geometryId: "pipe", + boundingBox: e.boundingBox.clone().applyMatrix4(o), + matrix: i, + finalState: !0 + } + } + , + Qf.prototype._getMeshNodeAttrOfTube = function(A, e, t) { + var i = this._getMeshNodeAttrOfPipe(A, e, t); + return i.nodeId += "_tube", + i.geometryId = "tube", + i + } + , + Qf.prototype._getMeshNodeAttrOfBox = function(A, e, t) { + var i = A.getMatrixInfo(e.matrixId).matrix.clone() + , o = uh.TemporaryMatrix; + o.copy(i); + var n = e.boundingBox + , r = n.getSize() + , a = n.getCenter() + , s = (new M).scale(new y(r.x,r.y,r.z)); + return s.setPosition(a), + i.multiply(s), + t && (i.multiplyMatrices(t.matrix, i), + o.multiplyMatrices(t.matrix, o)), + { + nodeId: (t ? t.ItemId + "_" + e.ItemId : e.ItemId) + "_box", + geometryId: "box", + boundingBox: e.boundingBox.clone().applyMatrix4(o), + matrix: i, + finalState: !0 + } + } + , + Qf.prototype._getMeshNodeAttrOfBoxM = function(A, e, t) { + var i = A.getMatrixInfo(e.matrixId).matrix.clone(); + return t && i.multiplyMatrices(t.matrix, i), + { + nodeId: (t ? t.ItemId + "_" + e.ItemId : e.ItemId) + "_boxM", + geometryId: "boxM", + boundingBox: e.boundingBox.clone().applyMatrix4(i), + matrix: i, + uvArrayBuffer: A.getGeomBoxUvInfo(e.toData), + finalState: !0 + } + } + , + Qf.prototype._getMeshNodeAttrOfPipeM = function(A, e, t) { + var i = A.getMatrixInfo(e.matrixId).matrix.clone(); + return t && i.multiplyMatrices(t.matrix, i), + { + nodeId: (t ? t.ItemId + "_" + e.ItemId : e.ItemId) + "_pipeM", + geometryId: "pipeM", + boundingBox: e.boundingBox.clone().applyMatrix4(i), + matrix: i, + uvArrayBuffer: A.getGeomPipeUvInfo(e.toData), + finalState: !0 + } + } + , + Qf.prototype._getMeshNodeAttrOfMeshRef = function(A, e, t) { + return { + nodeId: "refMesh|" + (t ? t.ItemId + "_" + e.ItemId : e.ItemId), + geometryId: e.toData, + boundingBox: e.boundingBox.clone(), + matrix: A.getMatrixInfo(e.matrixId).matrix.clone(), + matrixParent: t ? t.matrix : null, + finalState: !1, + transformed: !1, + shared: !0 + } + } + , + Qf.prototype._getMeshNodeAttr = function(A, e, t, i) { + var o = new M; + o.fromArray(e.matrix || [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]); + var n = t ? e.key + "_" + i : e.key + , r = t ? e.geoId + "_" + i : e.geoId; + if (-1 !== r) { + var a = new aA + , s = this.getReferencedMeshBufferById(e.geoId); + return s && s.position ? (a = Tu.getBoundingBoxByBuffer(s.position)).applyMatrix4(o) : Bh.warn("no position "), + { + nodeId: n, + guid: e.guid, + geometryId: r, + originalGeometryId: e.geoId, + matrix: o, + boundingBox: a, + model: this.model + } + } + } + , + Qf.prototype._getLineNodeAttr = function(A, e, t) { + var i = null + , o = null; + return -1 !== e.matrixId ? (o = !1, + i = A.getMatrixInfo(e.matrixId).matrix.clone()) : (o = !0, + i = new M), + { + nodeId: t ? "line-" + t.ItemId + "-" + e.ItemId : "line-" + e.ItemId, + geometryId: "line-" + e.toData, + boundingBox: e.boundingBox.clone(), + matrix: i, + matrixParent: t ? t.matrix : null, + finalState: !1, + transformed: o + } + } + , + Qf.prototype._classifyNodeInfo = function(A) { + this._cacheNodeInfoByComponentId(A), + this._cacheNodeInfoByUserId(A), + this._cacheNodeInfoByCategory(A) + } + , + Qf.prototype._cacheNodeInfoByComponentId = function(A) { + void 0 === this.mapNodeInfoByComponentId[A.componentId] && (this.mapNodeInfoByComponentId[A.componentId] = []), + this.mapNodeInfoByComponentId[A.componentId].push(A) + } + , + Qf.prototype._clearNodeInfoCacheWithComponentId = function(A) { + if (A) + for (var e = 0, t = A.length; t > e; e += 1) + delete this.mapNodeInfoByComponentId[A[e]]; + else + this.mapNodeInfoByComponentId = {} + } + , + Qf.prototype._clearNodeInfoCacheWithUserId = function(A) { + if (A) + for (var e = 0, t = A.length; t > e; e += 1) + delete this.mapNodeInfoByUserId[A[e]]; + else + this.mapNodeInfoByUserId = {} + } + , + Qf.prototype._clearNodeInfoCacheWithCategory = function(A) { + if (A) + for (var e = this.mapNodeInfoByCategory[Qf.NodeInfoCategory.INSTANCED], t = this.mapNodeInfoByCategory[Qf.NodeInfoCategory.STANDARD], i = 0, o = A.length; o > i; i += 1) + e && delete e[A[i]], + t && delete t[A[i]]; + else + this.mapNodeInfoByCategory = {} + } + , + Qf.prototype.clearNodeInfoCache = function() { + this._clearNodeInfoCacheWithComponentId(), + this._clearNodeInfoCacheWithUserId(), + this._clearNodeInfoCacheWithCategory() + } + , + Qf.prototype.clearNodeInfoCacheByComponentsKey = function(A) { + this._clearNodeInfoCacheWithComponentId(A), + this._clearNodeInfoCacheWithUserId(A), + this._clearNodeInfoCacheWithCategory(A) + } + , + Qf.prototype.getNodeInfosWithComponentId = function() { + return this.mapNodeInfoByComponentId + } + , + Qf.prototype.getNodeInfosByComponentId = function(A) { + return this.mapNodeInfoByComponentId[A] + } + , + Qf.prototype._cacheNodeInfoByUserId = function(A) { + void 0 === this.mapNodeInfoByUserId[A.userId] && (this.mapNodeInfoByUserId[A.userId] = []), + this.mapNodeInfoByUserId[A.userId].push(A) + } + , + Qf.prototype.getNodeInfosByUserId = function(A) { + return this.mapNodeInfoByUserId[A] + } + , + Qf.prototype.getNodeInfosWithUserId = function() { + return this.mapNodeInfoByUserId + } + , + Qf.prototype._cacheNodeInfoByCategory = function(A) { + var e = null; + void 0 === this.mapNodeInfoByCategory[e = A.instanceOrNot ? Qf.NodeInfoCategory.INSTANCED : Qf.NodeInfoCategory.STANDARD] && (this.mapNodeInfoByCategory[e] = {}), + void 0 === this.mapNodeInfoByCategory[e][A.userId] && (this.mapNodeInfoByCategory[e][A.userId] = []), + this.mapNodeInfoByCategory[e][A.userId].push(A) + } + , + Qf.prototype.getNodeInfosByCategory = function(A) { + return this.mapNodeInfoByCategory[A] + } + , + Qf.prototype.getStandardNodeInfos = function() { + return this.getNodeInfosByCategory(Qf.NodeInfoCategory.STANDARD) + } + , + Qf.prototype.getInstancedNodeInfos = function() { + return this.getNodeInfosByCategory(Qf.NodeInfoCategory.INSTANCED) + } + , + Qf.prototype.getStandardUserIds = function() { + return this.getStandardNodeInfos() ? Object.keys(this.getStandardNodeInfos()) : null + } + , + Qf.prototype.getInstancedUserIds = function() { + return this.getInstancedNodeInfos() ? Object.keys(this.getInstancedNodeInfos()) : null + } + , + Qf.prototype.traverseNodeInfos = function(A) { + if (A) + for (var e in this.mapNodeInfoByComponentId) + for (var t = this.mapNodeInfoByComponentId[e], i = 0, o = t.length; o > i; i += 1) + A(e, t[i]) + } + , + Qf.prototype.getUserIdsByCategory = function(A, e) { + var t = [] + , i = null; + if (i = e === Qf.NodeInfoCategory.INSTANCED ? this.getInstancedNodeInfos() : this.getStandardNodeInfos()) + for (var o = 0, n = A.length; n > o; o += 1) + i[A[o]] && t.push(A[o]); + return t + } + , + Qf.prototype.getInstancedUserIdsByCategory = function(A) { + return this.getUserIdsByCategory(A, Qf.NodeInfoCategory.INSTANCED) + } + , + Qf.prototype.getStandardUserIdsByCategory = function(A) { + return this.getUserIdsByCategory(A, Qf.NodeInfoCategory.STANDARD) + } + , + Qf.prototype.getNodeInfosOnBMpkGeometryId = function() { + return this.nodeInfosOnGeometryId || this.cacheNodeInfosOnGeometryId(), + this.nodeInfosOnGeometryId + } + , + Qf.prototype.cacheNodeInfosOnGeometryId = function() { + var A = this.getStandardNodeInfos(); + for (var e in this.nodeInfosOnGeometryId = {}, + A) + for (var t = A[e], i = 0, o = t.length; o > i; i += 1) { + var n = this.loader.convertToBMpkGeometryId(t[i].geometryId); + void 0 !== n && (t[i].geometryId = n), + this.nodeInfosOnGeometryId[t[i].geometryId] || (this.nodeInfosOnGeometryId[t[i].geometryId] = []), + this.nodeInfosOnGeometryId[t[i].geometryId].push(t[i]) + } + } + , + Qf.prototype.updateNodeInfosByIds = function(A) {} + , + Qf.prototype._isRegularShape = function(A) { + var e = A.type === Qf.EnumNodeItemType.TUBE || A.type === Qf.EnumNodeItemType.PIPE || A.type === Qf.EnumNodeItemType.BOX || A.type === Qf.EnumNodeItemType.BOX_M || A.type === Qf.EnumNodeItemType.PIPE_M; + return vc.SharedMeshInstanceEnable && (e = e || A.type === Qf.EnumNodeItemType.MESH_REF), + e + } + , + Qf.prototype.getOctreeRoots = function(A) { + var e = this.loader + , t = e.getOctreeRootNodeOuter(); + t && A.push(t); + var i = e.getOctreeRootNodeInner(); + i && A.push(i) + } + , + Qf.prototype.getComponentCount = function() { + return this.componentCount + } + , + Qf.prototype._parseInstanced = function() { + this.instancedComponent = {}; + var A = {} + , e = {} + , t = this.referencedMeshCache; + for (var i in t.components) + if (t.components.hasOwnProperty(i)) { + var o = t.components[i] + , n = o.geoId; + if (-1 === n) { + Bh.debug("实体没有几何"); + continue + } + if (void 0 === A[n] && (A[n] = [], + e[n] = {}), + A[n].push({ + componentId: i + }), + !o.materials) { + o.materials = []; + continue + } + for (var r = 0; o.materials.length > r; r += 1) { + var a = o.materials[r]; + e[n][a] || (e[n][a] = []), + e[n][a].push({ + componentId: i, + matrix: o.matrix + }) + } + } + for (var s in A) + if (A.hasOwnProperty(s)) + if (1 < A[s].length) + for (r = 0; A[s].length > r; r += 1) + this.instancedComponent[A[s][r].componentId] = !0; + else + delete A[s], + delete e[s] + } + , + Qf.prototype._parseBones = function() { + var A = this.referencedMeshCache; + for (var e in A._offsetMatrix || (A._offsetMatrix = {}), + A.geometries) { + var t = A.geometries[e]; + t.position.length !== t.normal.length && (t.normal = t.normal.length === t.index.length ? this._computeVertexNormalsFromFaceNormals(t.normal, t.index, t.position.length) : this._computeVertexNormalsFromIndex(t.index, t.position)); + var i = A.bones[e]; + if (i) { + t.skinIndex = i.skinIndex, + t.skinWeight = i.skinWeight; + var o = i.name; + i.offsetMatrix.length / 16 !== o.length && Bh.debug("bones的name数量与Matrix数量不符!"); + for (var n = 0; o.length > n; n += 1) + A._offsetMatrix[o[n]] = (new M).fromArray(i.offsetMatrix, 16 * n) + } + } + } + , + Qf.prototype._parseClips = function() { + for (var A = this.referencedMeshCache.clips, e = [], t = 0, i = A.length; i > t; t += 1) { + for (var o = [], n = A[t], r = 0, a = n.tracks.length; a > r; r += 1) { + var s = n.tracks[r] + , l = null; + switch (s.type) { + case Qf.EnumKeyframeTrackType.weights: + l = Dr; + break; + case Qf.EnumKeyframeTrackType.quaternion: + l = Nr; + break; + case Qf.EnumKeyframeTrackType.position: + case Qf.EnumKeyframeTrackType.scale: + default: + l = Vr + } + if (0 === n.ticksPerSec) { + n.ticksPerSec = 1e3; + for (var c = 0; s.times.length > c; c += 1) + s.times[c] /= n.ticksPerSec + } + var h = new l(Fs.sanitizeNodeName(s.name) + "." + s.type,s.times,s.values,2301); + o.push(h) + } + var d = new Gr(void 0 !== n.name ? n.name : "animation_" + t,n.duration / n.ticksPerSec,o); + e.push(d) + } + this.model.animations = e + } + , + Qf.prototype._parseNodes = function() { + var A = this.referencedMeshCache; + A.allBones = [], + A.offsetMatrix = []; + var e = function A(e, t) { + var i = null; + "node" === e.type ? i = new H : "bone" === e.type && (i = new Uo, + t.allBones[e.name] = i), + i.name = Fs.sanitizeNodeName(e.name), + i.matrix.fromArray(e.transformation || [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]), + i.matrix.decompose(i.position, i.quaternion, i.scale); + for (var o = 0; e.children.length > o; o += 1) { + var n = A(e.children[o], t); + n && i.add(n) + } + for (var r = 0; e.meshes.length > r; r += 1) { + var a = e.meshes[r]; + t.model._getHandler().defaultManager.meshManager._readBufferInfo(t.model, [t.model.modelKey + "_" + e.meshes[r]]); + var s = t.model._getHandler().defaultManager.meshManager._makeSkinMesh(t.model, [t.model.modelKey + "_" + e.meshes[r]], (function(A) {} + )); + t.meshCache[a] = s, + s.name = e.name, + i.add(s) + } + return i + }(A.nodes, this); + for (var t in A.geometries) { + var i = this.meshCache[t]; + if (i && i.isSkinnedMesh) { + for (var o = [], n = [], r = 0; A.bones[t].name.length > r; r += 1) { + var a = A.bones[t].name[r] + , s = A._offsetMatrix[a] + , l = this.allBones[a]; + s && l && (o.push(l), + n.push(s)) + } + var c = new bo(o,n); + i.bind(c, i.matrixWorld) + } + } + this.model.nodes = e, + this.model.manager.getScene().onBeforeRender = function(A, e, t, i) { + e.updateMatrixWorld(!0) + } + , + this.model.group.add(e), + (c = new _s(e)).visible = !1, + this.model.skeleton = c, + this.model.group.add(c), + this.model.mixer = new Rs(e), + this.model.actions = []; + for (var h = 0; this.model.animations.length > h; h += 1) { + var d = this.model.mixer.clipAction(this.model.animations[h]); + this.model.actions.push(d) + } + } + , + Qf.prototype._parseGeo = function() { + Bh.time("处理几何:按材质拆分构件"); + var A = this.referencedMeshCache; + for (var e in A.geometries) { + var t = A.geometries[e]; + if (t.position.length !== t.normal.length && (t.normal = t.normal.length === t.index.length ? this._computeVertexNormalsFromFaceNormals(t.normal, t.index, t.position.length) : this._computeVertexNormalsFromIndex(t.index, t.position)), + void 0 !== t.materialIndex) { + for (var i = void 0, o = [], n = null, r = 0; t.materialIndex.length > r; r += 1) { + var a = t.materialIndex[r]; + a !== n && (n = a, + void 0 !== i && (i.count = 3 * r - i.start, + o.push(i)), + i = { + start: 3 * r, + materialIndex: n + }) + } + if (void 0 !== i && (i.count = 3 * t.materialIndex.length - i.start, + o.push(i)), + 1 === o.length) { + A.geometries[e + "_" + o[0].materialIndex] = t + } else { + for (var s = {}, l = 0; o.length > l; l += 1) { + var c = o[l]; + void 0 === s[c.materialIndex] && (s[c.materialIndex] = { + index: [], + count: 0 + }), + s[c.materialIndex].index.push({ + start: c.start, + count: c.count + }), + s[c.materialIndex].count += c.count + } + var h = function() { + p = {}, + g = s[d]; + for (var i = 0, o = new Uint32Array(g.count), n = 0; g.index.length > n; n += 1) { + var r = g.index[n] + , a = t.index.slice(r.start, r.start + r.count); + o.set(a, i), + i += r.count + } + u = {}, + o.forEach((function(A, e) { + u[A] || (u[A] = []), + u[A].push(e) + } + )); + var l = Object.keys(u).length; + f = new Float32Array(3 * l), + m = new Float32Array(3 * l), + C = new Float32Array(2 * l), + y = 0, + v = 0; + var c = 0; + for (var h in u) + if (u.hasOwnProperty(h)) { + h = Number(h); + var I = t.position.slice(3 * h, 3 * h + 3) + , E = t.normal.slice(3 * h, 3 * h + 3); + if (t.uv.length > 0) { + var B = t.uv.slice(2 * h, 2 * h + 2); + C.set(B, v), + v += 2 + } + f.set(I, y), + m.set(E, y), + y += 3, + u[h].forEach((function(A) { + o[A] = c + } + )), + c += 1 + } + p.index = o, + p.position = f, + p.normal = m, + t.uv && t.uv.length > 0 && (p.uv = C), + A.geometries[e + "_" + d] = p + }; + for (var d in s) { + var p, g, u, f, m, C, y, v; + h() + } + } + } + } + Bh.timeEnd("处理几何:按材质拆分构件") + } + , + Qf.prototype._computeVertexNormalsFromFaceNormals = function(A, e, t) { + for (var i = new Float32Array(t), o = 0, n = 0, r = 0, a = 0, s = 0, l = 0, c = 0; A.length > c; c += 3) + s = A[c + 1], + l = A[c + 2], + n = 3 * e[c + 1], + r = 3 * e[c + 2], + i[o = 3 * e[c]] = a = A[c], + i[o + 1] = s, + i[o + 2] = l, + i[n] = a, + i[n + 1] = s, + i[n + 2] = l, + i[r] = a, + i[r + 1] = s, + i[r + 2] = l; + return i + } + , + Qf.prototype._computeVertexNormalsFromIndex = function(A, e) { + var t = new Float32Array(e.length); + if (e) { + var i = 0 + , o = 0 + , n = 0 + , r = new y + , a = new y + , s = new y + , l = new y + , c = new y; + if (A) + for (var h = A, d = 0; h.length > d; d += 3) + o = 3 * h[d + 1], + n = 3 * h[d + 2], + r.fromArray(e, i = 3 * h[d]), + a.fromArray(e, o), + s.fromArray(e, n), + l.subVectors(s, a), + c.subVectors(r, a), + l.cross(c), + t[i] += l.x, + t[i + 1] += l.y, + t[i + 2] += l.z, + t[o] += l.x, + t[o + 1] += l.y, + t[o + 2] += l.z, + t[n] += l.x, + t[n + 1] += l.y, + t[n + 2] += l.z; + else + for (var p = 0, g = e.length; g > p; p += 9) + r.fromArray(e, p), + a.fromArray(e, p + 3), + s.fromArray(e, p + 6), + l.subVectors(s, a), + c.subVectors(r, a), + l.cross(c), + t[p] = l.x, + t[p + 1] = l.y, + t[p + 2] = l.z, + t[p + 3] = l.x, + t[p + 4] = l.y, + t[p + 5] = l.z, + t[p + 6] = l.x, + t[p + 7] = l.y, + t[p + 8] = l.z + } + return t + } + , + Qf.prototype._readMaterialBuffer222 = function(A) { + var e = A.materialManager + , t = e.materials + , i = e.textures + , o = this.referencedMeshCache.materials; + for (var n in o) { + var r = o[n]; + if (!r) + return null; + var a = new xr; + if (a.name = r.name || n, + a.key = n, + r.emissive && a.emissive && (1 === r.emissive[0] && 1 === r.emissive[1] && 1 === r.emissive[2] || a.emissive.setRGB(r.emissive[0], r.emissive[1], r.emissive[2])), + r.color ? a.color.setRGB(r.color[0], r.color[1], r.color[2]) : a.color.setRGB(.72, .72, .72), + r.tint && a.color.setRGB(r.tint[0], r.tint[1], r.tint[2]), + r.specular && a.specular && a.specular.setRGB(r.specular[0], r.specular[1], r.specular[2]), + r.map) + if (void 0 !== r.mapOffsetY && 0 !== r.mapOffsetY || void 0 !== r.mapOffsetX && 0 !== r.mapOfsfetX || void 0 !== r.mapScaleX && 1 !== r.mapScaleX || void 0 !== r.mapScaleY && 1 !== r.mapScaleY || void 0 !== r.mapWAngle && 0 !== r.mapWAngle) { + var s = r.mapOffsetX + "_" + r.mapOffsetY + "_" + r.mapScaleX + "_" + r.mapScaleY + "_" + r.mapWAngle + "_" + r.map; + if (i[s]) + a.map = i[s]; + else + (g = new d).wrapS = g.wrapT = 1e3, + g.image = i[r.map].image ? i[r.map].image : null, + g.needsUpdate = !0, + g.image && (g.offset.x = r.mapOffsetX ? r.mapOffsetX : 0, + g.offset.y = r.mapOffsetY ? r.mapOffsetY : 0, + g.repeat.x = r.mapScaleX ? r.mapScaleX : 1, + g.repeat.y = r.mapScaleY ? r.mapScaleY : 1, + g.rotation = r.mapWAngle ? r.mapWAngle : 0, + i[s] = g, + a.map = g) + } else + a.map = i[r.map] ? i[r.map] : null; + if (r.aoMap) + if (void 0 !== r.aoMapOffsetY && 0 !== r.aoMapOffsetY || void 0 !== r.aoMapOffsetX && 0 !== r.aoMapOfsfetX || void 0 !== r.aoMapScaleX && 1 !== r.aoMapScaleX || void 0 !== r.aoMapScaleY && 1 !== r.aoMapScaleY || void 0 !== r.aoMapWAngle && 0 !== r.aoMapWAngle) { + var l = r.aoMapOffsetX + "_" + r.aoMapOffsetY + "_" + r.aoMapScaleX + "_" + r.aoMapScaleY + "_" + r.aoMapWAngle + "_" + r.aoMap; + if (i[l]) + a.aoMap = i[l]; + else + (g = new d).wrapS = g.wrapT = 1e3, + g.image = i[r.aoMap] && i[r.aoMap].image ? i[r.aoMap].image : null, + g.needsUpdate = !0, + g.image && (g.offset.x = r.aoMapOffsetX ? r.aoMapOffsetX : 0, + g.offset.y = r.aoMapOffsetY ? r.aoMapOffsetY : 0, + g.repeat.x = r.aoMapScaleX ? r.aoMapScaleX : 1, + g.repeat.y = r.aoMapScaleY ? r.aoMapScaleY : 1, + g.rotation = r.aoMapWAngle ? r.aoMapWAngle : 0, + i[l] = g, + a.aoMap = g) + } else + a.aoMap = i[r.aoMap] ? i[r.aoMap] : null; + if (void 0 !== r.aoMapIntensity && (a.aoMapIntensity = r.aoMapIntensity), + r.envMap) + if (void 0 !== r.envMapOffsetY && 0 !== r.envMapOffsetY || void 0 !== r.envMapOffsetX && 0 !== r.envMapOfsfetX || void 0 !== r.envMapScaleX && 1 !== r.envMapScaleX || void 0 !== r.envMapScaleY && 1 !== r.envMapScaleY || void 0 !== r.envMapWAngle && 0 !== r.envMapWAngle) { + var c = r.envMapOffsetX + "_" + r.envMapOffsetY + "_" + r.envMapScaleX + "_" + r.envMapScaleY + "_" + r.envMapWAngle + "_" + r.envMap; + if (i[c]) + a.envMap = i[c]; + else + (g = new d).wrapS = g.wrapT = 1e3, + g.image = i[r.envMap].image ? i[r.envMap].image : null, + g.needsUpdate = !0, + g.image && (g.offset.x = r.envMapOffsetX ? r.envMapOffsetX : 0, + g.offset.y = r.envMapOffsetY ? r.envMapOffsetY : 0, + g.repeat.x = r.envMapScaleX ? r.envMapScaleX : 1, + g.repeat.y = r.envMapScaleY ? r.envMapScaleY : 1, + g.rotation = r.envMapWAngle ? r.envMapWAngle : 0, + i[c] = g, + a.envMap = g) + } else + a.envMap = i[r.envMap] ? i[r.envMap] : null; + if (r.lightMap) + if (void 0 !== r.lightMapOffsetY && 0 !== r.lightMapOffsetY || void 0 !== r.lightMapOffsetX && 0 !== r.lightMapOfsfetX || void 0 !== r.lightMapScaleX && 1 !== r.lightMapScaleX || void 0 !== r.lightMapScaleY && 1 !== r.lightMapScaleY || void 0 !== r.lightMapWAngle && 0 !== r.lightMapWAngle) { + var h = r.lightMapOffsetX + "_" + r.lightMapOffsetY + "_" + r.lightMapScaleX + "_" + r.lightMapScaleY + "_" + r.lightMapWAngle + "_" + r.lightMap; + if (i[h]) + a.lightMap = i[h]; + else + (g = new d).wrapS = g.wrapT = 1e3, + g.image = i[r.lightMap].image ? i[r.lightMap].image : null, + g.needsUpdate = !0, + g.image && (g.offset.x = r.lightMapOffsetX ? r.lightMapOffsetX : 0, + g.offset.y = r.lightMapOffsetY ? r.lightMapOffsetY : 0, + g.repeat.x = r.lightMapScaleX ? r.lightMapScaleX : 1, + g.repeat.y = r.lightMapScaleY ? r.lightMapScaleY : 1, + g.rotation = r.lightMapWAngle ? r.lightMapWAngle : 0, + i[h] = g, + a.lightMap = g) + } else + a.lightMap = i[r.lightMap] ? i[r.lightMap] : null; + if (void 0 !== r.lightMapIntensity && (a.lightMapIntensity = r.lightMapIntensity), + r.emissiveMap) + if (void 0 !== r.emissiveMapOffsetY && 0 !== r.emissiveMapOffsetY || void 0 !== r.emissiveMapOffsetX && 0 !== r.emissiveMapOfsfetX || void 0 !== r.emissiveMapScaleX && 1 !== r.emissiveMapScaleX || void 0 !== r.emissiveMapScaleY && 1 !== r.emissiveMapScaleY || void 0 !== r.emissiveMapWAngle && 0 !== r.emissiveMapWAngle) { + var p = r.emissiveMapOffsetX + "_" + r.emissiveMapOffsetY + "_" + r.emissiveMapScaleX + "_" + r.emissiveMapScaleY + "_" + r.emissiveMapWAngle + "_" + r.emissiveMap; + if (i[p]) + a.emissiveMap = i[p]; + else + (g = new d).wrapS = g.wrapT = 1e3, + g.image = i[r.emissiveMap].image ? i[r.emissiveMap].image : null, + g.needsUpdate = !0, + g.image && (g.offset.x = r.emissiveMapOffsetX ? r.emissiveMapOffsetX : 0, + g.offset.y = r.emissiveMapOffsetY ? r.emissiveMapOffsetY : 0, + g.repeat.x = r.emissiveMapScaleX ? r.emissiveMapScaleX : 1, + g.repeat.y = r.emissiveMapScaleY ? r.emissiveMapScaleY : 1, + g.rotation = r.emissiveMapWAngle ? r.emissiveMapWAngle : 0, + i[p] = g, + a.emissiveMap = g) + } else + a.emissiveMap = i[r.emissiveMap] ? i[r.emissiveMap] : null; + if (void 0 !== r.emissiveIntensity && (a.emissiveIntensity = r.emissiveIntensity), + r.specularMap) + if (void 0 !== r.specularMapOffsetY && 0 !== r.specularMapOffsetY || void 0 !== r.specularMapOffsetX && 0 !== r.specularMapOfsfetX || void 0 !== r.specularMapScaleX && 1 !== r.specularMapScaleX || void 0 !== r.specularMapScaleY && 1 !== r.specularMapScaleY || void 0 !== r.specularMapWAngle && 0 !== r.specularMapWAngle) { + var g, u = r.specularMapOffsetX + "_" + r.specularMapOffsetY + "_" + r.specularMapScaleX + "_" + r.specularMapScaleY + "_" + r.specularMapWAngle + "_" + r.specularMap; + if (i[u]) + a.specularMap = i[u]; + else + (g = new d).wrapS = g.wrapT = 1e3, + g.image = i[r.specularMap].image ? i[r.specularMap].image : null, + g.needsUpdate = !0, + g.image && (g.offset.x = r.specularMapOffsetX ? r.specularMapOffsetX : 0, + g.offset.y = r.specularMapOffsetY ? r.specularMapOffsetY : 0, + g.repeat.x = r.specularMapScaleX ? r.specularMapScaleX : 1, + g.repeat.y = r.specularMapScaleY ? r.specularMapScaleY : 1, + g.rotation = r.specularMapWAngle ? r.specularMapWAngle : 0, + i[u] = g, + a.specularMap = g) + } else + a.specularMap = i[r.specularMap] ? i[r.specularMap] : null; + void 0 !== r.shininess && (a.shininess = r.shininess), + void 0 !== r.opacity && (a.opacity = r.opacity, + 1 > r.opacity && (a.transparent = !0), + r.opacity > 0 || (a.opacity = .1)), + a.side = 2, + t[n] = a + } + } + , + Qf.prototype._updateV1ToV2 = function(A) { + var e = this.referencedMeshCache.components + , t = this.referencedMeshCache.geometries + , i = this.referencedMeshCache.materials; + for (var o in e) + if (e.hasOwnProperty(o)) { + var n = e[o] + , r = n.matId + , a = t[n.geoId]; + if (n.materials) + continue; + if (n.materials = [], + !a) + continue; + var s = i[r]; + if (!s) + continue; + var l = this._updateMaterialV1ToV2(r, s); + if (l) + for (var c in a.materialIndex = l.materialIndex, + n.materials = l.materialId, + l.materials) + l.materials.hasOwnProperty(c) && (this.referencedMeshCache.materials[c] = l.materials[c]) + } + } + , + Qf.prototype._updateMaterialV1ToV2 = function(A, e) { + var t = {} + , i = [] + , o = {}; + if (!e) + return null; + for (var n = e.color, r = e.colorIndex, a = e.texture, s = e.textureIndex, l = 0; n.length > l; l += 4) { + var c = {}; + c.color = [n[l], n[l + 1], n[l + 2]], + c.opacity = Math.floor(100 * n[l + 3]) / 100, + c.transparent = 1 > n[l + 3]; + var h = (255 * c.color[0] << 16 ^ 255 * c.color[1] << 8 ^ 255 * c.color[2] << 0) + "_" + c.opacity; + o[h] = c, + i.push(h) + } + if (0 !== a.length && r.length === s.length) + for (var d = -1, p = 0; s.length > p; p += 1) { + if (d !== r[p]) + if (d = r[p], + -1 !== s[p]) + o[i[r[p]]].map = a[s[p]] + } + return t.materials = o, + t.materialId = i, + t.materialIndex = r, + t + } + , + Qf.prototype.addMeshToInfoMap = function(A, e, t, i) { + var o = this.getNodeInfosByComponentId(A); + Array.isArray(o) && o.forEach((function(A) { + A.nodeId === e && (A.mesh = t, + A.index = i) + } + )) + } + ; + var Rf = function() { + this.geometries = {} + }; + Rf.prototype.dispose = function() { + this.disposeGeometries(), + this.geometries = {} + } + , + Rf.prototype.destory = function() { + this.dispose() + } + , + Rf.prototype.disposeGeometries = function() { + for (var A in this.geometries) + this.disposeGeometry(A) + } + , + Rf.prototype.disposeGeometry = function(A) { + var e = this.geometries[A]; + if (e) { + if (Array.isArray(e)) + for (var t = 0, i = e.length; i > t; t += 1) + e[t].dispose(); + else + e.dispose(); + delete this.geometries[A] + } + } + , + Rf.prototype._hasGeometry = function(A) { + return !!this.geometries[A] + } + , + Rf.prototype._cacheGeometry = function(A, e) { + void 0 === this.geometries[A] && (this.geometries[A] = e) + } + , + Rf.prototype.getNodeIdxMapByUserId = function(A) {} + , + Rf.prototype.getGeometryById = function(A) { + return this.geometries[A] + } + , + Rf.prototype.getGeometryByNodeInfo = function(A, e) { + return this._hasGeometry(e.geometryId) ? this.getGeometryById(e.geometryId) : this._createGeometryByNodeInfo(A, e) + } + , + Rf.prototype._createGeometryByNodeInfo = function(A, e) { + return this._createGeometry(e.type, e.geometryId, A.getModelDescriptor().getReferencedMeshBufferById(e.geometryId)) + } + , + Rf.prototype._createGeometry = function(A, e, t) { + if (this._hasGeometry(e)) + return this.getGeometryById(e); + var i = this._createBufferGeometry(A, t); + return i ? (i.key = e, + this._cacheGeometry(e, i), + i) : null + } + , + Rf.prototype._createBufferGeometry = function(A, e) { + var t = Qf.EnumNodeItemType + , i = null; + switch (1) { + case t.MESH: + case t.MESH_REF: + if (!e) + return null; + if ((i = new he).setIndex(new YA(e.index,1)), + i.setAttribute("position", new YA(e.position,3)), + e.normal && e.normal.length > 0 ? i.setAttribute("normal", new YA(e.normal,3)) : i.computeVertexNormals(), + e.uv && e.uv.length > 0 && i.setAttribute("uv", new YA(e.uv,2)), + e.uv2 && e.uv2.length > 0 && i.setAttribute("uv2", new YA(e.uv2,2)), + e.skinIndex && e.skinIndex.length > 0 ? i.setAttribute("skinIndex", new YA(e.skinIndex,4)) : Bh.debug("skinIndex 长度为0"), + e.skinWeight && e.skinWeight.length > 0 ? i.setAttribute("skinWeight", new YA(e.skinWeight,4)) : Bh.debug("skinWeight 长度为0"), + void 0 !== e.materialIndex) { + for (var o = null, n = [], r = void 0, a = 0; e.materialIndex.length > a; a += 1) { + var s = e.materialIndex[a]; + s !== r && (r = s, + null != o && (o.count = 3 * a - o.start, + n.push(o)), + o = { + start: 3 * a, + materialIndex: r + }) + } + null != o && (o.count = 3 * e.materialIndex.length - o.start, + n.push(o)), + i.groups = n + } + break; + case t.TUBE: + case t.PIPE: + i = Tu.UnitCylinderInstance; + break; + case t.BOX: + i = Tu.UnitBoxInstance; + break; + case t.BOX_M: + i = Tu.getUnitTextureBox(); + break; + case t.PIPE_M: + i = Tu.getUnitTextureCylinder(); + break; + case t.LINE: + if (!e) + return null; + (i = new he).setIndex(new YA(e.I,1)), + i.setAttribute("position", new YA(e.P,3)) + } + return i + } + , + Rf.prototype.createBufferByBufferDataWithUV2 = function(A, e, t) { + var i = this.createBufferByBufferData(e, t); + if (!i) + return null; + if (!A.lightmap) + return i; + var o = [] + , n = i.index + , r = A.getLoader().getUV2ById(e.itemIdUV2, n.length); + r && (e.lightmapIdx = r.lightmapIdx, + o = r.uv2); + for (var a = i.position, s = i.normal, l = i.uv, c = [], h = [], d = [], p = 0; n.length > p; p += 1) { + var g = n[p]; + c.push(a[3 * g]), + c.push(a[3 * g + 1]), + c.push(a[3 * g + 2]), + s && (h.push(s[3 * g]), + h.push(s[3 * g + 1]), + h.push(s[3 * g + 2])), + l && (d.push(l[2 * g]), + d.push(l[2 * g + 1])), + n[p] = p + } + return a = null, + s = null, + l = null, + i.uv2 = o, + i.position = c, + i.normal = h, + i.uv = d, + i + } + , + Rf.prototype.createBufferByBufferData = function(A, e) { + this.cachedComponentGeoBuffer || (this.cachedComponentGeoBuffer = {}); + var t = null + , i = null + , o = null + , n = null + , r = null + , a = Qf.EnumNodeItemType + , s = null; + switch (1) { + case a.MESH: + case a.MESH_REF: + if (!e || !e.buffer) + return Bh.debug("缺少几何buffer"), + null; + var c = e.buffer; + if (i = c.index, + A.geometryId === A.originalGeometryId ? (t = c.position, + o = c.normal, + n = c.uv ? c.uv : null, + r = c.uv2 ? c.uv2 : null) : (t = Float32Array.from(c.position), + o = Float32Array.from(c.normal), + n = c.uv ? Float32Array.from(c.uv) : null, + r = c.uv2 ? Float32Array.from(c.uv2) : null), + c = null, + e.indexInfo) { + i = i.slice(e.indexInfo.indexStart, e.indexInfo.indexStart + e.indexInfo.indexCount), + t = t.slice(e.indexInfo.positionStart, e.indexInfo.positionStart + e.indexInfo.positionCount), + o = o.slice(e.indexInfo.positionStart, e.indexInfo.positionStart + e.indexInfo.positionCount), + n = n ? n.slice(e.indexInfo.uvStart, e.indexInfo.uvStart + e.indexInfo.uvCount) : null, + r = r ? r.slice(e.indexInfo.uvStart, e.indexInfo.uvStart + e.indexInfo.uvCount) : null; + var h = e.indexInfo.positionStart / 3; + i.forEach((function(A, e, t) { + t[e] -= h + } + )) + } + if (uh.isMirror(A.matrix.elements)) + for (var d = 0, p = i.length; p > d; d += 3) { + var g = i[d + 1]; + i[d + 1] = i[d + 2], + i[d + 2] = g + } + break; + case a.BOX: + case a.PIPE: + s = Tu.UnitCylinderInstance, + i = Uint32Array.from(s.index.array), + t = Float32Array.from(s.attributes.position.array), + o = Float32Array.from(s.attributes.normal.array), + s = null; + break; + case a.TUBE: + case a.BOX_M: + case a.PIPE_M: + s = A.type === a.BOX_M || A.type === a.BOX ? Tu.getBoxMBuffer(A.uvArrayBuffer) : Tu.getPipeMBuffer(A.uvArrayBuffer), + i = Uint32Array.from(s.index), + t = Float32Array.from(s.vertex), + o = Float32Array.from(s.normal), + s.uv && (n = Float32Array.from(s.uv), + delete s.uv), + s = null; + break; + case a.LINE: + if (!e || !e.buffer) + return null; + if (e.isDataView ? (i = Uint32Array.from(e.buffer.I), + t = Float32Array.from(e.buffer.P), + o = null, + n = null) : (i = new Uint32Array(e.buffer.I), + t = new Float32Array(e.buffer.P), + o = null, + n = null), + e.indexInfo) { + i = i.slice(e.indexInfo.indexStart, e.indexInfo.indexStart + e.indexInfo.indexCount), + t = t.slice(e.indexInfo.positionStart, e.indexInfo.positionStart + e.indexInfo.positionCount); + h = e.indexInfo.positionStart / 3; + i.forEach((function(A, e, t) { + t[e] -= h + } + )) + } + break; + default: + Bh.log("error data!") + } + if (!this.cachedComponentGeoBuffer[A.geometryId] || A.geometryId !== A.originalGeometryId) { + var u = A.matrix; + if (Tu.applyMatrix4ToBuffer(u, t), + o) { + var f = new l; + f.getNormalMatrix(u), + Tu.applyMatrix3ToBuffer(f, o), + Tu.normalizeBuffer(o) + } + this.cachedComponentGeoBuffer[A.geometryId] = !0 + } + return A.uv = !!n, + { + index: i, + position: t, + normal: o, + uv: n, + uv2: r + } + } + ; + var Tf = function(A) { + return Rf.call(this), + this.manager = A, + this._maxIndiceseNum = 0, + this._materialList = [], + this.mapMaterialIdToMergedNode = {}, + this.selectedMeshes = [], + this.nonSelectedMeshes = [], + this.selectedObjectIds = [], + this.blinkMaterials = [], + this.mapDestroyedBufferKey = {}, + this + }; + function kf(A, e, t, i) { + for (var o = A.getAttribute("position").array, n = e; t > n; n += 3) + o[n] += i.x, + o[n + 1] += i.y, + o[n + 2] += i.z; + A.getAttribute("position").needsUpdate = !0 + } + (Tf.prototype = Object.create(Rf.prototype)).destroy = function() { + this.dispose(), + this.clearData(), + this.mapMaterialIdToMergedNode = {}, + this.manager = null, + this._materialList = [], + this.selectedMeshes = [], + this.nonSelectedMeshes = [], + this.selectedObjectIds = [], + this.blinkMaterials = [], + this.mapDestroyedBufferKey = {} + } + , + Tf.prototype.clearData = function() { + this.bufferDestroyed = !1, + this.clearAllNodeBuffer(), + this._disposeMergedGeometries() + } + , + Tf.prototype.getMeshesByUserIds = function(A, e) { + var t = []; + for (var i in this.mapMaterialIdToMergedNode) + for (var o = this.mapMaterialIdToMergedNode[i], n = 0, r = o.length; r > n; n += 1) { + var a = o[n] + , s = a.indices[e]; + if (s) + for (var l = 0, c = s.length; c > l; l += 1) { + var h = {}; + h.mesh = a.mesh, + h.indexInfo = s[l], + h.matrix = A.getModelMatrix(), + t.push(h) + } + } + return t + } + , + Tf.prototype.rebuildIndices = function(A) { + this._materialList.length = 0; + var e = vc.EnableLightmap && A.lightmap; + this.clearSelectedObjectIds(); + var t = this.manager.getFilteredUserIds() + , i = this.manager.getSelectedUserIds() + , o = this.manager.getHoveredUserIds() + , n = this.manager.getBlinkedUserIds() + , r = (A.hasReplacedUserId(), + A.manager.scene.fillClipPlane && vc.ClippingCaps) + , a = {}; + for (var s in this.mapMaterialIdToMergedNode) { + var l, c = this.getPropertyValueByMaterialKey(s).materialId, h = null, d = null, p = null, g = null, u = null, f = null, m = null, C = null, y = null; + i && i[c] && (g = i[c]), + o && o[c] && (u = o[c]), + n && n[c] && (f = n[c]), + t && t[c] && (h = t[c][zc.HIDDEN], + d = t[c][zc.OVERRIDED], + p = t[c][zc.TRANSPARENT]); + var v = this.mapMaterialIdToMergedNode[s]; + for (y = 0, + l = v.length; l > y; y += 1) { + var I = v[y] + , E = I.indices + , B = I.geometry; + if (B.clearGroups(), + B._visible = !0, + e) + for (var x = A.lightmapNum, S = 0; x > S; S += 1) { + var w = "lightmap|" + S; + -1 === this._materialList.indexOf(w) && this._materialList.push(w) + } + if (g || h || d || u || p || vc.EnableLightmap || r || f) { + var M = []; + for (var b in E) + if (E.hasOwnProperty(b)) { + if (h && h[b]) + continue; + var U = E[b]; + if (U && U.length > 0) { + if (U.sort((function(A, e) { + return A.indexStart - e.indexStart + } + )), + p && p[b]) { + for (m = 0, + C = U.length; C > m; m += 1) + M.push({ + indexStart: U[m].indexStart, + indexCount: U[m].indexCount, + state: zc.TRANSPARENT + }); + continue + } + if (A.manager.isSelectPriority()) { + if (g && g[b]) { + if (this.cacheSelectedObjectIds(b, s, y), + vc.PickingEffect) { + if (d && d[b]) { + var F = d[b] + , K = this._materialList.indexOf(F); + for (-1 === K && (this._materialList.push(F), + K = this._materialList.length - 1), + m = 0, + C = U.length; C > m; m += 1) + M.push({ + indexStart: U[m].indexStart, + indexCount: U[m].indexCount, + state: zc.OVERRIDED + K + }); + continue + } + for (m = 0, + C = U.length; C > m; m += 1) + M.push({ + indexStart: U[m].indexStart, + indexCount: U[m].indexCount, + state: zc.NONE + }); + continue + } + for (m = 0, + C = U.length; C > m; m += 1) + M.push({ + indexStart: U[m].indexStart, + indexCount: U[m].indexCount, + state: zc.SELECTED + }); + continue + } + if (f && f[b]) { + if (d && d[b]) { + var Q = "blink|" + d[b] + , R = this._materialList.indexOf(Q); + for (-1 === R && (this._materialList.push(Q), + R = this._materialList.length - 1), + m = 0, + C = U.length; C > m; m += 1) + M.push({ + indexStart: U[m].indexStart, + indexCount: U[m].indexCount, + state: zc.OVERRIDED + R + }); + continue + } + for (m = 0, + C = U.length; C > m; m += 1) + M.push({ + indexStart: U[m].indexStart, + indexCount: U[m].indexCount, + state: zc.BLINK + }); + continue + } + } else { + if (f && f[b]) { + if (d && d[b]) { + var T = "blink|" + d[b] + , k = this._materialList.indexOf(T); + for (-1 === k && (this._materialList.push(T), + k = this._materialList.length - 1), + m = 0, + C = U.length; C > m; m += 1) + M.push({ + indexStart: U[m].indexStart, + indexCount: U[m].indexCount, + state: zc.OVERRIDED + k + }); + continue + } + for (m = 0, + C = U.length; C > m; m += 1) + M.push({ + indexStart: U[m].indexStart, + indexCount: U[m].indexCount, + state: zc.BLINK + }); + continue + } + if (g && g[b]) { + if (this.cacheSelectedObjectIds(b, s, y), + vc.PickingEffect) { + if (d && d[b]) { + var D = d[b] + , L = this._materialList.indexOf(D); + for (-1 === L && (this._materialList.push(D), + L = this._materialList.length - 1), + m = 0, + C = U.length; C > m; m += 1) + M.push({ + indexStart: U[m].indexStart, + indexCount: U[m].indexCount, + state: zc.OVERRIDED + L + }); + continue + } + for (m = 0, + C = U.length; C > m; m += 1) + M.push({ + indexStart: U[m].indexStart, + indexCount: U[m].indexCount, + state: zc.NONE + }); + continue + } + for (m = 0, + C = U.length; C > m; m += 1) + M.push({ + indexStart: U[m].indexStart, + indexCount: U[m].indexCount, + state: zc.SELECTED + }); + continue + } + } + if (p && p[b]) { + for (m = 0, + C = U.length; C > m; m += 1) + M.push({ + indexStart: U[m].indexStart, + indexCount: U[m].indexCount, + state: zc.TRANSPARENT + }); + continue + } + if (u && u[b]) { + if (d && d[b]) { + var N = this._materialList.indexOf(O = "hover|" + d[b]); + for (-1 === N && (this._materialList.push(O), + N = this._materialList.length - 1), + m = 0, + C = U.length; C > m; m += 1) + M.push({ + indexStart: U[m].indexStart, + indexCount: U[m].indexCount, + state: zc.OVERRIDED + N + }); + continue + } + for (m = 0, + C = U.length; C > m; m += 1) + M.push({ + indexStart: U[m].indexStart, + indexCount: U[m].indexCount, + state: zc.HOVER + }); + continue + } + if (d && d[b]) { + var O, V = this._materialList.indexOf(O = d[b]); + for (-1 === V && (this._materialList.push(O), + V = this._materialList.length - 1), + m = 0, + C = U.length; C > m; m += 1) + M.push({ + indexStart: U[m].indexStart, + indexCount: U[m].indexCount, + state: zc.OVERRIDED + V + }); + continue + } + if (r && a[b]) { + for (m = 0, + C = U.length; C > m; m += 1) + M.push({ + indexStart: U[m].indexStart, + indexCount: U[m].indexCount, + state: zc.CLIPPING + }); + continue + } + if (vc.EnableLightmap) + for (m = 0, + C = U.length; C > m; m += 1) { + var G = this._materialList.indexOf("lightmap|" + U[m].lightmapIdx); + M.push({ + indexStart: U[m].indexStart, + indexCount: U[m].indexCount, + state: zc.OVERRIDED + G + }) + } + else + for (m = 0, + C = U.length; C > m; m += 1) + M.push({ + indexStart: U[m].indexStart, + indexCount: U[m].indexCount, + state: 0 + }) + } + } + if (M.length > 0) + for (M.sort((function(A, e) { + return A.state === e.state ? A.indexStart - e.indexStart : A.state - e.state + } + )), + m = 0, + C = M.length; C > m; m += 1) { + var P = M[m].indexStart + , q = M[m].indexCount + , j = M[m].state; + if (0 === m) + B.addGroup(P, q, j); + else + j === M[m - 1].state && P === M[m - 1].indexStart + M[m - 1].indexCount ? B.groups[B.groups.length - 1].count += q : B.addGroup(P, q, j) + } + else + B._visible = !1 + } + } + } + } + , + Tf.prototype.update = function(A, e) { + var t = A.manager.filter + , i = A.materialManager.materials + , o = A.selectedMaterial + , n = A.manager.sceneState + , r = null + , a = null + , s = null + , l = null + , c = null + , h = null + , d = vc.EnableLightmap && A.lightmap; + if (A.isOnlyWireframe()) + for (var p in this.mapMaterialIdToMergedNode) { + var g = this.mapMaterialIdToMergedNode[p]; + for (s = 0, + l = g.length; l > s; s += 1) { + var u = g[s].mesh; + u && (u.visible = !1) + } + } + else { + vc.TranslucentDepthDisabled && (o.depthWrite = !o.transparent); + var f = t._getMaterialByName("scene"); + vc.TranslucentDepthDisabled && (f.depthWrite = !1); + var m = []; + this.blinkMaterials.length = 0; + var C = {}; + if (!d) + for (r = 0, + a = this._materialList.length; a > r; r += 1) { + var y = null + , v = this._materialList[r] + , I = v.split("|"); + "hover" === I[0] ? (y = t._getMaterialByName(I[1]), + y = n.getHoverMaterial(y)) : "blink" === I[0] ? (y = t._getMaterialByName(I[1]), + y = n.getBlinkMaterial(y), + C[v] || this.blinkMaterials.push(y)) : y = t._getMaterialByName(v) ? t._getMaterialByName(v) : this.manager.model.materialManager.getMaterialById(v), + vc.TranslucentDepthDisabled && (y.depthWrite = !y.transparent), + m[r] = y + } + for (var E in this.mapMaterialIdToMergedNode) { + var B = this.getPropertyValueByMaterialKey(E).materialId + , x = A.manager.getOverrideMaterialByName(B) || i[B] || Kd.getDefaultStandardMaterial(); + if (x) { + if (d) + for (r = 0, + a = this._materialList.length; a > r; r += 1) { + var S = null + , w = this._materialList[r].split("|"); + if ("lightmap" === w[0]) + if (vc.IBL) + S = x.clone(); + else { + var M = Kd.getMaterialParameters(x); + M.lights = !1, + (S = Kd.createStandardMaterial(M)).lightMap = A.materialManager.lightmaps[w[1]], + S.lightMapIntensity = vc.LightmapIntensity + } + vc.TranslucentDepthDisabled && S && (S.depthWrite = !S.transparent), + m[r] = S + } + vc.TranslucentDepthDisabled && (x.depthWrite = !x.transparent); + var b = n.getHoverMaterial(i[B]); + vc.TranslucentDepthDisabled && (b.depthWrite = !b.transparent); + var U = this.mapMaterialIdToMergedNode[E]; + for (s = 0, + l = U.length; l > s; s += 1) { + var F = U[s] + , K = F.geometry; + if (null !== K) { + var Q = F.mesh; + if (Q) + if (K._visible) { + if (K.groups.length > 0) { + var R = C[B]; + R || (R = C[B] = n.getBlinkMaterial(x), + this.blinkMaterials.push(R)); + var T = [x, o, R, b, f]; + for (r = 0, + a = m.length; a > r; r += 1) { + if (!m[r].createByBos) { + if (m[r].materialId !== B && !m[r].mapNodeIdToOrigMatId) + continue; + if (!Object.keys(m[r].mapNodeIdToOrigMatId).find((function(A) { + return m[r].mapNodeIdToOrigMatId[A] === B + } + ))) + continue + } + for (var k in K.attributes.uv || (m[r].map = null), + U[s].indices) + if (this.manager.mapMaterialIdToUserIdsForFilter[B] && this.manager.mapMaterialIdToUserIdsForFilter[B][zc.OVERRIDED]) + for (var D = Object.keys(this.manager.mapMaterialIdToUserIdsForFilter[B][zc.OVERRIDED]), L = 0, N = D.length; N > L; L += 1) + k === D[L] && (T[5 + r] = m[r]) + } + if (e) { + var O = []; + for (c = 0, + h = T.length; h > c; c += 1) + O.push(e); + T = O + } + Q.material = T + } else + Q.material = e || x; + Q.visible = !0 + } else + Q.visible = !1; + else + Bh.error("没有mesh对象") + } + } + x = null + } + } + } + } + , + Tf.prototype.explode = function(A, e, t) { + for (var i in this.mapMaterialIdToMergedNode) + for (var o = this.mapMaterialIdToMergedNode[i], n = 0, r = o.length; r > n; n += 1) { + var a = o[n] + , s = a.geometry; + if (null !== s) { + var l = a.indices; + for (var c in l) { + var h = A.manager.getComponentInfoByUserId(c).boundingBox + , d = uh.computeExplodeTranslation(e, h, t) + , p = l[c]; + if (p) + for (var g = 0, u = p.length; u > g; g += 1) { + var f = p[g].positionStart; + kf(s, f, f + p[g].positionCount, d) + } + } + } + } + } + , + Tf.prototype.explosion = function(A, e) { + var t = A.getModelDescriptor().getStandardUserIds(); + e.componentKey = t, + this.componentsExplosion(A, e) + } + , + Tf.prototype.closeExplosion = function(A) { + this.explosion(A, {}) + } + , + Tf.prototype.componentsExplosion = function(A, e) { + var t = e.coefficientX || 1 + , i = e.coefficientY || 1 + , o = e.coefficientZ || 1 + , n = e.offsetX || 0 + , r = e.offsetY || 0 + , a = e.offsetZ || 0 + , s = null; + if (e.center) + s = (new y).fromArray(e.center); + else if (1 !== t || 1 !== i || 1 !== o || 0 !== n || 0 !== r || 0 !== a) + return; + var l = Array.isArray(e.componentKey) ? e.componentKey : [e.componentKey] + , c = new y + , h = new aA + , d = new y(0,0,0) + , p = new y(0,0,0) + , g = new y + , u = new M + , m = A.getModelMatrix(); + m && s && (u.getInverse(m), + s.applyMatrix4(u)); + var C = A.manager + , v = !1 + , I = new y + , E = new f + , B = new y(1,1,1); + uh.isEmptyObject(A.subModel) || (v = !0); + for (var x = 0, S = l.length; S > x; x += 1) { + var w = l[x]; + if (w) { + var b = A.getModelDescriptor().getStandardNodeInfosById(w); + if (b) + for (var U = 0, F = b.length; F > U; U += 1) { + var K = b[U]; + if (K) { + var Q = this._getMaterialKeyByNodeInfo(K) + , R = this.mapMaterialIdToMergedNode[Q]; + if (R) + for (var T = 0, k = R.length; k > T; T += 1) { + var D = R[T] + , L = D.geometry + , N = D.mesh; + if (L && N) { + var O = D.indices; + if (O) { + var V = O[w]; + if (V) { + h.copy(K.boundingBox), + h.getCenter(c), + K.userData || (K.userData = {}), + d.set(0, 0, 0), + p.set(0, 0, 0); + var G = new y(1,1,1); + if (v && (N.matrix.decompose(I, E, B), + G.divide(B)), + 1 !== t || 1 !== i || 1 !== o || K.userData.explosionFactor) { + K.userData.explosionFactor || (K.userData.explosionFactor = new y(1,1,1), + K.userData.explosionBaseDifference = c.sub(s).clone().multiply(G)); + var P = K.userData.explosionFactor + , q = K.userData.explosionBaseDifference; + d.set((t - P.x) * q.x, (i - P.y) * q.y, (o - P.z) * q.z), + 1 === t && 1 === i && 1 === o ? (K.userData.explosionFactor = void 0, + K.userData.explosionBaseDifference = void 0) : P.set(t, i, o) + } + if (0 !== n || 0 !== r || 0 !== a || K.userData.explosionOffset) { + K.userData.explosionOffset || (K.userData.explosionOffset = new y(0,0,0)); + var j = K.userData.explosionOffset; + p.set(n * G.x - j.x, r * G.y - j.y, a * G.z - j.z), + 0 === n && 0 === r && 0 === a ? K.userData.explosionOffset = void 0 : j.set(n * G.x, r * G.y, a * G.z) + } + if (g.set(d.x + p.x, d.y + p.y, d.z + p.z), + 0 !== g.x || 0 !== g.y || 0 !== g.z) { + K.userData.explosionFactor || K.userData.explosionOffset ? C.explosionList[w] || (C.explosionList[w] = !0) : delete C.explosionList[w]; + var H = g.clone().multiply(B); + u.makeTranslation(H.x, H.y, H.z), + K.userData.changeOffset = g.clone(), + K.transformation || (K.transformation = !0, + K.transformationOriginalMatrix = K.matrix.clone(), + K.applyMatrix = new M, + K.transformationOriginalBoundingBox = K.boundingBox.clone()), + K.matrix.premultiply(u), + K.applyMatrix.premultiply(u), + K.boundingBox.copy(K.transformationOriginalBoundingBox).applyMatrix4(K.applyMatrix); + for (var Y = 0, W = V.length; W > Y; Y += 1) { + var J = V[Y].positionStart; + kf(L, J, J + V[Y].positionCount, g) + } + L.attributes.position.needsUpdate = !0 + } + } + } + } + } + } + } + } + } + } + , + Tf.prototype.closeComponentsExplosion = function(A, e) { + e = Array.isArray(e) ? e : [e]; + this.componentsExplosion(A, { + componentKey: e + }) + } + , + Tf.prototype._getNodeGroup = function(A) { + return A._getNodeGroup(gp.GEOMETRY, { + globalSpace: !0 + }) + } + , + Tf.prototype._hasNodeGroup = function(A) { + return A._hasNodeGroup(gp.GEOMETRY) + } + , + Tf.prototype._resetMaxIndicesNumberPerBathSegment = function(A) { + vc.SegmentedBatchMergeEnable && this._maxIndiceseNum > vc.maxIndicesNumberPerBathSegment && (Bh.log("adjust maxIndicesNumberPerBathSegment value from " + vc.maxIndicesNumberPerBathSegment + " to " + this._maxIndiceseNum + "!"), + vc.maxIndicesNumberPerBathSegment = A) + } + , + Tf.prototype.asyncCreateMeshNodes = function(A, e, t) { + var i = this; + e && e.length ? this._asyncMergeData(A, e, (function() { + Bh.timeEnd("MergeData"), + i._makeMeshNodes(A), + t && t() + } + )) : t && t() + } + , + Tf.prototype.createBatchedMeshNodes = function(A, e) { + var t = this.mapMaterialIdToMergedNode + , i = A.manager + , o = A.modelKey + , n = A._encodedDatabagId + , r = this._getNodeGroup(A) + , a = A.materialManager + , s = e.materialKey + , l = this.getPropertyValueByMaterialKey(s) + , c = a.getMaterialById(l.materialId); + if (!c) { + var h = Object.keys(e.componentInfo)[0] + , d = e.componentInfo[h][0].nodeId + , p = A.getModelDescriptor().getNodeInfosByNodeId(d); + if (!p) + return; + p.uv = "1" === l.uvProp, + s = this._getMaterialKeyByNodeInfo(p, A), + l = this.getPropertyValueByMaterialKey(s), + c = a.getMaterialById(l.materialId) + } + var g = new he; + if (g._visible = !0, + g.setIndex(new YA(e.index,1)), + e.position && e.position.length > 0) { + g.setAttribute("position", new YA(e.position,3)), + e.normal && e.normal.length === e.position.length && g.setAttribute("normal", new YA(e.normal,3)); + var u = !1; + e.uv && e.uv.length > 0 > 0 && (g.setAttribute("uv", new YA(e.uv,2)), + u = !0), + c.aoMap && g.setAttribute("uv2", new YA(e.uv,2)), + g.getAttribute("normal") || g.computeVertexNormals(); + var f = e.componentInfo; + t[s] || (t[s] = []); + var m = null; + if ("lines" === l.type) + (m = new cf(g)).modelKey = o; + else { + var C = { + modelKey: o + }; + (m = new Kf(g,c)).spawn(C) + } + if (t[s].push({ + geometry: g, + indices: f, + mesh: m + }), + m._indicesGroup = f, + !uh.isEmptyObject(A.subModel)) { + var y = Object.keys(f)[0]; + if (y) { + var v = uh.getModelKeyFromComponentKey(y); + A.subModel[v] && m.matrix.copy(A.subModel[v]) + } + } + r.add(m), + i.addMeshToOctantMap(n, s, new Eu(s,m)); + var I = function(e) { + f.hasOwnProperty(e) && f[e].forEach((function(t) { + A.addMeshToInfoMap(e, t.nodeId, m, t, u) + } + )) + }; + for (var E in f) + I(E); + r.updateMatrixWorld(!0), + f = null, + m = null + } + } + , + Tf.prototype._asyncMergeData = function(A, e, t) { + Bh.time("MergeData"); + var i = {} + , o = this + , n = A.getLoader().maxLoadTaskCount + , r = A.progressPercentage.load + , a = A.progressPercentage.collect + , s = e.length + , l = Math.ceil(s / A.progressFrequency) + , c = A.getModelDescriptor().getStandardNodeInfos(); + requestAnimationFrame(function h(d) { + var p = d; + return function() { + var d = null + , g = null; + for (g = p + l > s ? s : p + l, + d = p; g > d; d += 1) { + if (o._collectMergedNodeInfosById(A, e[d], c, i), + d === g - 1) + if (g !== s) + A.dispatchEventEx({ + type: Rc.ON_LOAD_PROGRESS, + progress: { + total: n, + loaded: (d / s * a + r) * n, + modelKey: A.modelKey + } + }), + requestAnimationFrame(h(d + 1)); + else + A.dispatchEventEx({ + type: Rc.ON_LOAD_PROGRESS, + progress: { + total: n, + loaded: (a + r) * n, + modelKey: A.modelKey + } + }), + o._asyncMergeGeometry(i, A, t) + } + } + }(0)) + } + , + Tf.prototype._asyncMergeGeometry = function(A, e, t) { + var i = []; + for (var o in A) + i.push(o); + if (0 !== i.length) { + this._resetMaxIndicesNumberPerBathSegment(this._maxIndiceseNum); + var n = this + , r = e.getLoader().maxLoadTaskCount + , a = e.progressPercentage.load + , s = e.progressPercentage.collect + , l = e.progressPercentage.merge + , c = i.length + , h = Math.ceil(c / e.progressFrequency) + , d = this.mapMaterialIdToMergedNode; + requestAnimationFrame(function o(p) { + var g = p; + return function() { + var p, u = null; + for (u = g + h > c ? c : g + h, + p = g; u > p; p += 1) { + if (n._collectMergedGeometriesById(i[p], A, d), + p === u - 1) + if (u !== i.length) + e.dispatchEventEx({ + type: Rc.ON_LOAD_PROGRESS, + progress: { + total: r, + loaded: (p / c * l + a + s) * r, + modelKey: e.modelKey + }, + modelKey: e.modelKey + }), + requestAnimationFrame(o(p + 1)); + else + t() + } + } + }(0)) + } else + t() + } + , + Tf.prototype._collectMergedNodeInfosById = function(A, e, t, i) { + for (var o = t[e], n = 0, r = o.length; r > n; n += 1) { + var a = o[n]; + this._createNodeBuffer(A, a); + var s = this._getNodeBufferBy(a.nodeId); + if (s) { + var l = s.index; + l && l.length > this._maxIndiceseNum && (this._maxIndiceseNum = l.length); + var c = this._getMaterialKeyByNodeInfo(a, A); + void 0 === i[c] && (i[c] = []), + i[c].push(a) + } + } + } + , + Tf.prototype._collectMergedGeometriesById = function(A, e, t) { + var i = e[A]; + void 0 === t[A] && (t[A] = []); + for (var o = [], n = Math.max(i.length / 800, 500), r = Math.floor(i.length / n), a = i.length, s = 0; r >= s; s += 1) { + for (var l = 0, c = 0, h = 0, d = 0, p = 0, g = null, u = !1, f = 0, m = 0, C = a > n ? n : a; C > m; m += 1) { + var y = s * n + , v = i[y + m]; + if (!v) + break; + (g = this._getNodeBufferBy(v.nodeId)) ? (c += g.index.length, + l += g.position.length, + g.normal && (h += g.normal.length), + g.uv && g.uv.length > 0 ? (u = !0, + d += g.uv.length) : d += g.position.length / 3 * 2, + g.uv2 && (p += g.uv2.length), + vc.SegmentedBatchMergeEnable && c > vc.maxIndicesNumberPerBathSegment ? (g.normal && (h -= g.normal.length), + g.uv && (d -= g.uv.length), + g.uv2 && (p -= g.uv2.length), + o.push({ + start: f, + end: m, + steps: y, + arrayPositionLength: l -= g.position.length, + arrayIndexLength: c -= g.index.length, + arrayNormalLength: h, + arrayUVLength: d, + arrayUV2Length: p + }), + l = 0, + c = 0, + h = 0, + d = 0, + p = 0, + f = m, + m -= 1) : m === C - 1 && o.push({ + start: f, + end: C, + steps: y, + arrayPositionLength: l, + arrayIndexLength: c, + arrayNormalLength: h, + arrayUVLength: d, + arrayUV2Length: p + }), + g = null) : m === C - 1 && o.push({ + start: f, + end: C, + steps: y, + arrayPositionLength: l, + arrayIndexLength: c, + arrayNormalLength: h, + arrayUVLength: d, + arrayUV2Length: p + }) + } + a -= n + } + for (var I = 0, E = o.length; E > I; I += 1) { + for (var B = o[I], x = new he, S = {}, w = new Float32Array(B.arrayPositionLength), M = new Uint32Array(B.arrayIndexLength), b = new Float32Array(B.arrayNormalLength), U = new Float32Array(B.arrayUVLength), F = new Float32Array(B.arrayUV2Length), K = 0, Q = 0, R = 0, T = 0, k = 0, D = [], L = B.start, N = B.end; N > L; L += 1) { + var O = i[B.steps + L]; + if (g = this._getNodeBufferBy(O.nodeId)) { + D.push(O.nodeId); + var V = g.index + , G = g.position + , P = g.normal + , q = g.uv + , j = g.uv2; + w.set(G, K); + for (var H = new Uint32Array(V), Y = 0, W = H.length; W > Y; Y += 1) + H[Y] += K / 3; + M.set(H, Q), + void 0 === S[O.userId] && (S[O.userId] = []), + S[O.userId].push({ + userId: O.userId, + nodeId: O.nodeId, + positionStart: K, + positionCount: G.length, + indexStart: Q, + indexCount: V.length, + lightmapIdx: O.lightmapIdx, + boundingBox: O.boundingBox + }), + Q += V.length, + K += G.length, + P && (b.set(P, R), + R += P.length), + u && (q ? (U.set(q, T), + T += q.length) : (U.set(new Float32Array(G.length / 3 * 2), T), + T += q.length)), + j && (F.set(j, k), + k += j.length), + V = null, + G = null, + P = null, + q = null, + j = null, + g = null + } + } + this.clearNodeBufferByNodeIds(D), + x._visible = !0, + x.setIndex(new YA(M,1)), + x.setAttribute("position", new YA(w,3)), + R > 0 && x.setAttribute("normal", new YA(b,3)), + T > 0 && x.setAttribute("uv", new YA(U,2)), + k > 0 && x.setAttribute("uv2", new YA(F,2)), + t[A].push({ + geometry: x, + indices: S + }) + } + } + , + Tf.prototype.clearAllNodeBuffer = function() { + this.cachedNodeBuffer && (this.cachedNodeBuffer = {}) + } + , + Tf.prototype.clearNodeBufferByNodeIds = function(A) { + if (this.cachedNodeBuffer) + for (var e = 0, t = A.length; t > e; e += 1) + this.cachedNodeBuffer[A[e]] = null + } + , + Tf.prototype._getNodeBufferByNodeInfo = function(A, e) { + return this.cachedNodeBuffer || this._createNodeBuffer(A, e), + this.cachedNodeBuffer[e.nodeId] + } + , + Tf.prototype._getNodeBufferBy = function(A) { + return this.cachedNodeBuffer ? this.cachedNodeBuffer[A] : null + } + , + Tf.prototype._createNodeBufferForMergedBuffer = function(A, e, t) { + this.cachedNodeBuffer || (this.cachedNodeBuffer = {}), + this.cachedNodeBuffer[e.nodeId] || (this.cachedNodeBuffer[e.nodeId] = this.createBufferByBufferDataWithUV2(A, e, t)) + } + , + Tf.prototype._createNodeBuffer = function(A, e) { + this._createNodeBufferForMergedBuffer(A, e, { + buffer: A.getModelDescriptor().getReferencedMeshBufferById(e.geometryId), + isDataView: !0 + }) + } + , + Tf.prototype._createGeometries = function(A, e) { + var t = this + , i = A.getModelDescriptor().getNodeInfosOnGeometryId() + , o = A.getModelDescriptor().getReferencedMeshBufferData() + , n = this._getClassifiedMeshes(i, o); + this._dealDataMergedMeshs(A, n, o, i, (function() { + t._dealDataMergeableMeshs(A, n, o, i, e) + } + )) + } + , + Tf.prototype._getClassifiedMeshes = function(A, e) { + var t = [] + , i = []; + for (var o in e) { + var n = e[o].IndexInfos + , r = void 0; + if (n) { + if (1 > n.length) + continue; + for (var a = 0, s = n.length; s > a; a += 1) { + if ((l = A[n[a].meshId]) && l.length) { + r = n[a].meshId; + break + } + } + } else { + var l; + (l = A[o]) && l.length && (r = o) + } + if (void 0 !== r) + (l = A[r]) && l.length && (l[0].type === $u.EnumNodeItemType.LINE || !l[0].instanceOrNot && l[0].shared ? t.push(o) : i.push(o)) + } + if (!vc.Instance) + for (var o in A) + i[o] || t[o] || t.push(o); + return { + mergeableIdxs: t, + mergedIdxs: i + } + } + , + Tf.prototype._collectMergeableMeshesByIdxId = function(A, e, t, i, o) { + t[e] && t[e].IndexInfos ? this._collectSharedMeshesByIdxId(A, e, t, i, o) : this._collectLineOrIntanceMeshesByIdxId(A, e, t, i, o) + } + , + Tf.prototype._collectLineOrIntanceMeshesByIdxId = function(A, e, t, i, o) { + for (var n = i[e], r = { + buffer: A.getModelDescriptor().getReferencedMeshBufferById(e) + }, a = 0, s = n.length; s > a; a += 1) { + var l = n[a]; + this._createNodeBufferByGeoBufferData(A, l, r); + var c = this._getMaterialKeyByNodeInfo(l); + o[c] || (o[c] = []), + o[c].push(l) + } + } + , + Tf.prototype._collectSharedMeshesByIdxId = function(A, e, t, i, o) { + for (var n = t[e].IndexInfos, r = 0, a = n.length; a > r; r += 1) { + var s = i[n[r].meshId]; + if (s) + for (var l = { + buffer: A.getModelDescriptor().getReferencedMeshBufferById(e), + indexInfo: n[r] + }, c = 0, h = s.length; h > c; c += 1) { + var d = s[c]; + this._createNodeBufferByGeoBufferData(A, d, l); + var p = this._getMaterialKeyByNodeInfo(d); + o[p] || (o[p] = []), + o[p].push(d) + } + } + } + , + Tf.prototype._mergeMergeableMeshes = function(A, e, t, i) { + var o = Object.keys(e); + if (0 !== o.length) { + var n = this + , r = A.getLoader().maxLoadTaskCount + , a = o.length + , s = A.progressPercentage.load + , l = A.progressPercentage.collect + , c = A.progressPercentage.merge + , h = Math.ceil(a / A.progressFrequency); + requestAnimationFrame(function d(p) { + var g = p; + return function() { + var p = null + , u = null; + for (u = g + h > a ? a : g + h, + p = g; u > p; p += 1) + n._collectMergedGeometriesById(o[p], e, t), + p === u - 1 && (u !== a ? (A.dispatchEvent({ + type: Rc.ON_LOAD_PROGRESS, + progress: { + total: r, + loaded: (p / a * c + s + l) * r, + modelKey: A.modelKey + } + }), + requestAnimationFrame(d(p + 1))) : n._makeMeshNodes(A, i)) + } + }(0)) + } else + this._makeMeshNodes(A, i) + } + , + Tf.prototype._dealDataMergeableMeshs = function(A, e, t, i, o) { + if (0 !== e.mergeableIdxs.length) { + var n = this + , r = this.mapMaterialIdToMergedNode + , a = {} + , s = e.mergedIdxs.length + , l = e.mergeableIdxs.length + , c = s + l + , h = e.mergeableIdxs + , d = A.getLoader().maxLoadTaskCount + , p = A.progressPercentage.load + , g = A.progressPercentage.collect + , u = Math.ceil(l / A.progressFrequency); + requestAnimationFrame(function e(f) { + var m = f; + return function() { + var f = null + , C = null; + for (C = m + u > l ? l : m + u, + f = m; C > f; f += 1) + n._collectMergeableMeshesByIdxId(A, h[f], t, i, a), + f === C - 1 && (C !== l ? (A.dispatchEvent({ + type: Rc.ON_LOAD_PROGRESS, + progress: { + total: d, + loaded: ((f + s) / c * g + p) * d, + modelKey: A.modelKey + } + }), + requestAnimationFrame(e(f + 1))) : (A.dispatchEvent({ + type: Rc.ON_LOAD_PROGRESS, + progress: { + total: d, + loaded: (g + p) * d, + modelKey: A.modelKey + } + }), + n._mergeMergeableMeshes(A, a, r, o))) + } + }(0)) + } else + this._makeMeshNodes(A, o) + } + , + Tf.prototype._collectDataMergedMeshesByIdxId = function(A, e, t, i, o) { + var n = e[A] + , r = n.IndexInfos; + if (r && 0 !== r.length) { + var a = !1; + n.UV && (n.UV.byteLength || n.UV.length) && (a = !0), + o.lightmap && (n = this.getAttributeForLightmapWithDataMerged(n, o, A)); + for (var s = void 0, l = 0, c = r.length; c > l; l += 1) { + var h = t[r[l].meshId]; + if (h && 0 !== h.length) { + o.lightmap && (r[l].lightmapIdx = n.lightmapIdx, + r[l].positionStart = 3 * r[l].indexStart, + r[l].positionCount = 3 * r[l].indexCount), + s = r[l].meshId; + for (var d = 0, p = h.length; p > d; d += 1) + h[d].uv = a + } + } + if (void 0 !== s) { + var g = t[s][0] + , u = {} + , f = this._getMaterialKeyByNodeInfo(g); + void 0 === i[f] && (i[f] = []); + for (var m = 0, C = r.length; C > m; m += 1) + t[r[m].meshId] && (void 0 === u[(g = t[r[m].meshId][0]).userId] && (u[g.userId] = []), + r[m].userId = g.userId, + r[m].nodeId = g.nodeId, + r[m].boundingBox = g.boundingBox, + u[g.name].push(r[m])); + var y = new he; + y._visible = !0, + y.setIndex(new YA(new Uint32Array(n.I),1)), + y.setAttribute("position", new YA(new Float32Array(n.P),3)), + n.N && (n.N.byteLength || n.N.length) && y.setAttribute("normal", new YA(new Float32Array(n.N),3)), + a && y.setAttribute("uv", new YA(new Float32Array(n.UV),2)), + n.UV2 && (y.setAttribute("uv2", new YA(new Float32Array(n.UV2),2)), + y.lightmapIdx = n.lightmapIdx), + i[f].push({ + geometry: y, + indices: u + }) + } + } + } + , + Tf.prototype.getAttributeForLightmapWithDataMerged = function(A, e, t) { + var i = [] + , o = new Uint32Array(A.I) + , n = e.getLoader().getUV2ById("bmpk_" + t, o.length); + if (n) { + var r = n.lightmapIdx; + i = n.uv2 + } + for (var a = new Float32Array(A.P), s = new Float32Array(A.N), l = new Float32Array(A.UV), c = [], h = [], d = [], p = 0; o.length > p; p += 1) { + var g = o[p]; + c.push(a[3 * g]), + c.push(a[3 * g + 1]), + c.push(a[3 * g + 2]), + s.length > 0 && (h.push(s[3 * g]), + h.push(s[3 * g + 1]), + h.push(s[3 * g + 2])), + l.length > 0 && (d.push(l[2 * g]), + d.push(l[2 * g + 1])), + o[p] = p + } + return a = null, + s = null, + l = null, + { + I: o, + UV2: i, + P: c, + N: h, + UV: d, + lightmapIdx: r + } + } + , + Tf.prototype._dealDataMergedMeshs = function(A, e, t, i, o) { + if (0 !== e.mergedIdxs.length) { + var n = this + , r = this.mapMaterialIdToMergedNode + , a = e.mergedIdxs + , s = a.length + , l = e.mergedIdxs.length + e.mergeableIdxs.length + , c = A.getLoader().maxLoadTaskCount + , h = A.progressPercentage.load + , d = A.progressPercentage.collect + , p = Math.ceil(s / A.progressFrequency); + requestAnimationFrame(function e(g) { + var u = g; + return function() { + var g = null + , f = null; + for (f = u + p > s ? s : u + p, + g = u; f > g; g += 1) + n._collectDataMergedMeshesByIdxId(a[g], t, i, r), + g === f - 1 && (f !== s ? (A.dispatchEvent({ + type: Rc.ON_LOAD_PROGRESS, + progress: { + total: c, + loaded: (g / l * d + h) * c, + modelKey: A.modelKey + } + }), + requestAnimationFrame(e(g + 1))) : (A.dispatchEvent({ + type: Rc.ON_LOAD_PROGRESS, + progress: { + total: c, + loaded: (g / l * d + h) * c, + modelKey: A.modelKey + } + }), + o && o())) + } + }(0)) + } else + o && o() + } + , + Tf.prototype._dealUnsharedMeshs = function(A, e, t) { + for (var i = this.mapMaterialIdToMergedNode, o = 0, n = A.length; n > o; o += 1) { + var r = t[A[o]] + , a = r.IndexInfos + , s = e[a[0].meshId][0] + , l = {} + , c = this._getMaterialKeyByNodeInfo(s); + void 0 === i[c] && (i[c] = []); + for (var h = 0, d = a.length; d > h; h += 1) + void 0 === l[(s = e[a[h].meshId][0]).userId] && (l[s.userId] = []), + a[h].userId = s.userId, + a[h].nodeId = s.nodeId, + l[s.userId].push(a[h]); + var p = new he; + p._visible = !0, + p.setIndex(new YA(new Uint32Array(r.index),1)), + p.setAttribute("position", new YA(new Float32Array(r.position),3)), + r.normal && p.setAttribute("normal", new YA(new Float32Array(r.normal),3)), + r.uv && p.setAttribute("uv", new YA(new Float32Array(r.uv),2)), + i[c].push({ + geometry: p, + indices: l + }) + } + } + , + Tf.prototype._makeMeshNodes = function(A, e) { + Bh.time("makeMesh"); + var t = A.manager + , i = A.modelKey + , o = A._encodedDatabagId + , n = this._getNodeGroup(A) + , r = this.mapMaterialIdToMergedNode; + for (var a in r) + for (var s = this.getPropertyValueByMaterialKey(a), l = r[a], c = 0, h = l.length; h > c; c += 1) { + var d = l[c].geometry + , p = l[c].indices; + if (!l[c].mesh) { + var g = null; + if ("lines" === s.type) + (g = new cf(d)).modelKey = i; + else { + var u = { + modelKey: i + }; + (g = new Kf(d)).spawn(u) + } + if (!uh.isEmptyObject(A.subModel)) { + var f = Object.keys(p)[0]; + if (f) { + var m = uh.getModelKeyFromComponentKey(f); + A.subModel[m] && g.matrix.copy(A.subModel[m]) + } + } + g._indicesGroup = p, + n.add(g), + l[c].mesh = g, + t.addMeshToOctantMap(o, a, new Eu(a,g)); + var C = function(e) { + p.hasOwnProperty(e) && p[e].forEach((function(t) { + A.addMeshToInfoMap(e, t.nodeId, g, t) + } + )) + }; + for (var y in p) + C(y); + p = null, + g = null + } + } + n.updateMatrixWorld(!0), + A.dispatchEvent({ + type: Rc.ON_LOAD_PROGRESS, + progress: { + total: A.getLoader().maxLoadTaskCount, + loaded: A.getLoader().maxLoadTaskCount, + modelKey: A.modelKey + } + }), + e && e(), + Bh.timeEnd("makeMesh") + } + , + Tf.prototype.createMeshNodes = function(A, e) { + A.getModelDescriptor().getStandardNodeInfos() ? this._createGeometries(A, e) : e && e() + } + , + Tf.prototype.applySelection = function(A) {} + , + Tf.prototype.clearSelection = function(A) {} + , + Tf.prototype.applyHover = function(A) {} + , + Tf.prototype.clearHover = function(A) {} + , + Tf.prototype.getMeshNode = function() { + return this.mapMaterialIdToMergedNode + } + , + Tf.prototype._disposeMergedGeometries = function() { + for (var A in this.mapMaterialIdToMergedNode) { + for (var e = this.mapMaterialIdToMergedNode[A], t = 0, i = e.length; i > t; t += 1) { + e[t].geometry.dispose(), + delete e[t].geometry, + delete e[t].indices, + delete e[t].mesh + } + delete this.mapMaterialIdToMergedNode[A] + } + } + , + Tf.prototype._getMaterialKeyByNodeInfo = function(A, e) { + if (e) { + var t = e.manager.getOverrideMaterialByNodeInfo(A); + A.materialId = t ? t.name : A.originMId + } + return uh.getCombinedKeyString([A.materialId, A.uv ? "1" : "0", A.type === $u.EnumNodeItemType.LINE ? "lines" : "meshes"]) + } + , + Tf.prototype.getPropertyValueByMaterialKey = function(A) { + var e = uh.splitCombinedKeyString(A); + return { + materialId: e[0], + uvProp: e[1], + type: e[2] + } + } + , + Tf.prototype.clearSelectedObjectIds = function() { + this.selectedObjectIds.length = 0 + } + , + Tf.prototype.cacheSelectedObjectIds = function(A, e, t) { + this.selectedObjectIds.push({ + uid: A, + mKey: e, + idx: t + }) + } + , + Tf.prototype.adjustVisibility = function(A, e) { + var t = this._getNodeGroup(A) + , i = t.visible; + e && !t.bVisible || (t.visible = e), + t.bVisible = i + } + , + Tf.prototype.changeVisibilityOfSelectedObjects = function(A, e) { + if (e) + for (var t = 0, i = this.selectedMeshes.length; i > t; t += 1) { + var o = this.selectedMeshes[t].object + , n = this.selectedMeshes[t].indices; + if (o) + for (var r = 0, a = n.length; a > r; r += 1) { + var s = o.geometry.groups[n[r].idx]; + s.start = n[r].start, + s.count = n[r].count + } + } + else { + this.selectedMeshes.length = 0; + for (var l = {}, c = 0, h = this.selectedObjectIds.length; h > c; c += 1) { + var d = this.selectedObjectIds[c].mKey + , p = this.selectedObjectIds[c].idx + , g = uh.getCombinedKeyString([d, p]); + if (!l[g]) { + l[g] = !0; + var u = this.mapMaterialIdToMergedNode[d][p] + , f = u.mesh; + if (f) { + for (var m = [], C = u.geometry.groups, y = 0, v = C.length; v > y; y += 1) { + var I = C[y]; + I.materialIndex === zc.SELECTED && (m.push({ + idx: y, + start: I.start, + count: I.count + }), + I.start = 0, + I.count = 0) + } + m.length && this.selectedMeshes.push({ + object: f, + indices: m + }) + } + } + } + } + } + , + Tf.prototype.changeVisibilityOfNonSelectedObjects = function(A, e) { + if (e) + for (var t = 0, i = this.nonSelectedMeshes.length; i > t; t += 1) { + var o = this.nonSelectedMeshes[t].object + , n = this.nonSelectedMeshes[t].indices; + if (n) + for (var r = 0, a = n.length; a > r; r += 1) { + var s = o.geometry.groups[n[r].idx]; + s.start = n[r].start, + s.count = n[r].count + } + else + o.visible = this.nonSelectedMeshes[t].visibility + } + else { + this.nonSelectedMeshes.length = 0; + for (var l = {}, c = 0, h = this.selectedObjectIds.length; h > c; c += 1) { + var d = this.selectedObjectIds[c]; + l[d.mKey] || (l[d.mKey] = {}), + l[d.mKey][d.idx] = !0 + } + for (var p in this.mapMaterialIdToMergedNode) { + var g = this.mapMaterialIdToMergedNode[p]; + if (l[p]) + for (var u = 0, f = g.length; f > u; u += 1) { + var m = g[u].mesh; + if (m) { + if (!l[p][u]) { + this.nonSelectedMeshes.push({ + object: m, + indices: null, + visibility: m.visible + }), + m.visible = !1; + continue + } + for (var C = [], y = m.geometry.groups, v = 0, I = y.length; I > v; v += 1) { + var E = y[v]; + E.materialIndex !== zc.SELECTED && (C.push({ + idx: v, + start: E.start, + count: E.count + }), + E.start = 0, + E.count = 0) + } + C.length > 0 && this.nonSelectedMeshes.push({ + object: m, + indices: C + }) + } + } + else + for (var B = 0, x = g.length; x > B; B += 1) { + var S = g[B].mesh; + S && (this.nonSelectedMeshes.push({ + object: S, + indices: null, + visibility: S.visible + }), + S.visible = !1) + } + } + } + } + , + Tf.prototype.restoreVisibilityOfObjects = function() { + this.selectedMeshes.length = 0, + this.nonSelectedMeshes.length = 0 + } + , + Tf.prototype.getBlinkMaterials = function() { + return this.blinkMaterials + } + , + Tf.prototype.disposeBufferAfterVbo = function() { + if (!this.bufferDestroyed) { + var A = 0; + for (var e in this.mapMaterialIdToMergedNode) { + for (var t = this.mapMaterialIdToMergedNode[e], i = 0, o = t.length; o > i; i += 1) { + var n = t[i] + , r = n.geometry; + if (null !== r) { + A += 1; + var a = e + "-" + i; + this.mapDestroyedBufferKey[a] || n.mesh.visible && (this.mapDestroyedBufferKey[a] = !0, + Tu.disposeBufferFromGeometry(r, ["normal", "uv", "uv2"])) + } + } + Object.keys(this.mapDestroyedBufferKey).length === A && (this.mapDestroyedBufferKey = {}, + this.bufferDestroyed = !0) + } + } + } + , + Tf.prototype._traverseMeshNodeMap = function(A) { + for (var e in this.mapMaterialIdToMergedNode) + for (var t = this.mapMaterialIdToMergedNode[e], i = 0, o = t.length; o > i; i += 1) + A && A(e, t[i]) + } + , + Tf.prototype.getGeometryBuffersByUserId = function(A, e) { + var t = [] + , i = A.getDatabagId(); + return this._traverseMeshNodeMap((function(A, o) { + var n = o.indices[e]; + if (n) + for (var r = o.geometry, a = r.getIndex().array, s = r.getAttribute("position").array, l = 0, c = n.length; c > l; l += 1) { + var h = n[l] + , d = h.indexStart + , p = h.indexStart + h.indexCount + , g = a.slice(d, p) + , u = s.slice(d = h.positionStart, p = h.positionStart + h.positionCount); + d /= 3, + g.forEach((function(A, e, t) { + t[e] -= d + } + )), + t.push({ + databagId: i, + nodeId: h.nodeId, + position: u, + index: g + }) + } + } + )), + t + } + , + Tf.prototype.getPickingNodeGenerator = function() { + return this.pickingNodeGenerator || (this.pickingNodeGenerator = new nf(this)), + this.pickingNodeGenerator + } + ; + var Df = function(A) { + of.call(this, A), + this.nodeGroupName = "PickingBatchedWireFrameGroup" + }; + Object.assign(Df.prototype, of.prototype), + eu(Df, [{ + key: "disposePickingNodeById", + value: function(A) { + for (var e = this.pickingNodeMap[A], t = 0, i = e.length; i > t; t += 1) + e[t]._indicesGroup = null, + e[t].material = null, + e[t].geometry.dispose(), + e[t] = null + } + }, { + key: "generatePickingMeshes", + value: function() { + var A = this.manager.getWireFrameLineSegments(); + A || (this.manager.generateWireframe(), + A = this.manager.getWireFrameLineSegments()); + for (var e = 0, t = A.length; t > e; e += 1) { + var i = A[e].geometry + , o = new he; + o.setAttribute("position", i.getAttribute("position")), + o.setIndex(i.getIndex()); + var n = new jo(o,Kd.DefaultMaterial); + (new M).copy(A[e].matrix).multiply(this.manager.model.getModelMatrix()).decompose(n.position, n.quaternion, n.scale), + n._indicesGroup = A[e]._indicesGroup, + n.frustumCulled = !1, + n.renderOrder = 1, + this.addToPickingNodeMap(e, [n]) + } + } + }, { + key: "_rebuildGeometryGroup", + value: function(A, e, t) { + var i, o = this.manager.manager, n = 0, r = 0, a = 0, s = A._indicesGroup, l = Object.keys(s), c = [], h = {}; + e.length > l.length ? (c = l, + h = t) : (c = e, + h = s); + var d = []; + for (a = 0, + i = c.length; i > a; a += 1) { + var p = c[a]; + if (o.isPickableNode(p) && h[p]) { + var g = s[p]; + if (g && g.length > 0) + for (n = 0, + r = g.length; r > n; n += 1) + d.push({ + indexStart: g[n].indexStart, + indexCount: g[n].indexCount + }) + } + } + A.visible = !0; + var u = A.geometry; + if (u.clearGroups(), + 0 !== d.length) + for (d.sort((function(A, e) { + return A.indexStart - e.indexStart + } + )), + n = 0, + r = d.length; r > n; n += 1) { + var f = d[n].indexStart + , m = d[n].indexCount; + if (0 === n) + u.addGroup(f, m, 0); + else + f === d[n - 1].indexStart + d[n - 1].indexCount ? u.groups[u.groups.length - 1].count += m : u.addGroup(f, m, 0) + } + else + A.visible = !1 + } + }, { + key: "updatePickingMeshesState", + value: function(A, e, t) { + for (var i = this.pickingNodeMap, o = Object.keys(i), n = 0, r = o.length; r > n; n += 1) + for (var a = i[o[n]], s = 0, l = a.length; l > s; s += 1) + a[s].material = [A], + a[s].visible = !1, + this._rebuildGeometryGroup(a[s], e, t) + } + }]); + var Lf = function(A) { + this.manager = A, + this.model = A.model, + this.generated = !1, + this.wireframeLineSegment = null, + this.wireframeGeometryMap = null, + this.wireframeDataMap = null, + this.userIdMapForNoWireFrame = {} + }; + function Nf(A, e, t, i) { + for (var o = A.getAttribute("position").array, n = e; t > n; n += 1) + o[3 * n] += i.x, + o[3 * n + 1] += i.y, + o[3 * n + 2] += i.z; + A.getAttribute("position").needsUpdate = !0 + } + Lf.prototype.destroy = function() { + this.clearData(), + this.manager = null, + this.userIdMapForNoWireFrame = null, + this.pickingNodeGenerator && (this.pickingNodeGenerator.destroy(), + this.pickingNodeGenerator = null) + } + , + Lf.prototype.clearData = function() { + this.generated = !1, + this.bufferDestroyed = !1, + this.wireframeLineSegment && (this.wireframeLineSegment._indicesGroup = null, + this.wireframeLineSegment.geometry.dispose(), + this.wireframeLineSegment = null), + this.pickingNodeGenerator && this.pickingNodeGenerator.clearData(), + this.wireframeGeometryMap = null, + this.userIdMapForNoWireFrame = {} + } + , + Lf.prototype._createWireframeGeometry = function(A, e) { + if (this.wireframeGeometryMap || (this.wireframeGeometryMap = {}), + this.wireframeDataMap || (this.wireframeDataMap = {}), + !this.wireframeGeometryMap[e.nodeId]) { + var t = this._getWireframeData(A, e) + , i = new he; + i.setIndex(new $A(t.index,1)), + i.setAttribute("position", new YA(t.buffer,3)), + i._userId = e.userId, + this.wireframeGeometryMap[e.nodeId] = i + } + } + , + Lf.prototype._getWireframeData = function(A, e) { + this.wireframeDataMap || (this.wireframeDataMap = {}); + var t = {}; + if (!this.wireframeDataMap[e.nodeId]) { + for (var i = A.attributes.position.array.slice(e.positionStart, e.positionStart + e.positionCount), o = A.getIndex().array.slice(e.indexStart, e.indexStart + e.indexCount), n = 0, r = o.length; r > n; n += 1) + o[n] -= e.positionStart / 3; + var a = Up(i, o); + return t = Tu.reducedGeometry(i, a), + this.wireframeDataMap[e.nodeId] = t, + t + } + return this.wireframeDataMap[e.nodeId] + } + , + Lf.prototype._createWireframeGeometries = function(A) { + A || (A = this.model); + var e = A.manager.filter + , t = A.getModelDescriptor().getStandardNodeInfos(); + function i(A) { + var i = t[A]; + return !(i && e._hasRenderWithBoardlineFilter() && !e._isRenderWithBoardline(i[0])) + } + var o = this.manager.getMeshNode(); + for (var n in Bh.time("createWireframeGeometry"), + o) { + if ("meshes" === this.manager.getPropertyValueByMaterialKey(n).type) + for (var r = o[n], a = 0, s = r.length; s > a; a += 1) { + var l, c = r[a]; + if (c.RenderTypeChange) { + for (var h = (l = c.geometry.clone()).attributes.position.array, d = [], p = new y, g = c.mesh.matrixWorld, u = 0, f = h.length; f > u; u += 3) + p.set(h[u], h[u + 1], h[u + 2]).applyMatrix4(g), + d.push(p.x, p.y, p.z); + l.setAttribute("position", new YA(new Float32Array(d),3)) + } else + l = c.geometry; + if (null !== l) { + var m = c.indices; + for (var C in m) { + i(C) || (this.userIdMapForNoWireFrame[C] = !0); + for (var v = m[C], I = 0, E = v.length; E > I; I += 1) + this._createWireframeGeometry(l, v[I]) + } + } + } + } + return Bh.timeEnd("createWireframeGeometry"), + !0 + } + , + Lf.prototype._makeWireframe = function(A) { + A || (A = this.model); + var e = {} + , t = A.getWireframeMaterial(); + for (var i in this.wireframeGeometryMap) { + var o = this.wireframeGeometryMap[i] + , n = o._userId + , r = new jo(o,t); + r.userId = n, + r.nodeId = i, + e[n] || (e[n] = []), + e[n].push(r), + r = null + } + var a = []; + for (var n in e) + for (var s = e[n], l = 0, c = s.length; c > l; l += 1) + a.push(s[l]); + if (a.length > 0) { + var h = {} + , d = Tu.mergeBufferGeometriesFromMeshs(a, h); + if (d && (this.wireframeLineSegment = new jo(d,A.getWireframeMaterial()), + this.wireframeLineSegment.matrixAutoUpdate = !1, + this.wireframeLineSegment._indicesGroup = h, + !uh.isEmptyObject(A.subModel))) { + var p = Object.keys(h)[0]; + if (p) { + var g = uh.getModelKeyFromComponentKey(p); + A.subModel[g] && this.wireframeLineSegment.matrix.copy(A.subModel[g]) + } + } + } + for (var n in a = null, + e) + delete e[n]; + e = null, + this.wireframeGeometryMap = null + } + , + Lf.prototype.generateWireframe = function(A, e) { + A || (A = this.model), + this.generated || (this._createWireframeGeometries(A), + this._makeWireframe(A), + this.generated = !0, + e && e()) + } + , + Lf.prototype.update = function(A) { + if (this.manager.hasNodeInfo(A)) + if (A.isActivateWireframe()) { + if (this.generateWireframe(A), + this.wireframeLineSegment) { + var e = this._getNodeGroup(A); + e.clear(), + e.add(this.wireframeLineSegment), + e.updateMatrixWorld(!0) + } + } else + A._hasNodeGroup(gp.WIREFRAME) && A._removeNodeGroup(gp.WIREFRAME) + } + , + Lf.prototype.rebuildIndices = function(A) { + if (this.needDealWireframeLine(A)) { + this.wireframeLineSegment.visible = !0; + var e = this.wireframeLineSegment._indicesGroup + , t = this.wireframeLineSegment.geometry; + t.clearGroups(); + var i = A.getWireframeMaterial(); + this.wireframeLineSegment.material = i; + var o = this.manager.getFilteredUserIdsForWireFrame() + , n = Boolean(o && Object.keys(o).length); + if (this._existHiddenUserId() || n) { + var r = [] + , a = 0 + , s = 0 + , l = []; + for (var c in e) + if (!this._isHiddenUserId(c)) { + var h = e[c]; + if (h && h.length > 0) { + if (o[c]) { + var d = o[c] + , p = l.indexOf(d); + for (-1 === p && (l.push(d), + p = l.length - 1), + a = 0, + s = h.length; s > a; a += 1) + r.push({ + indexStart: h[a].indexStart, + indexCount: h[a].indexCount, + state: 1 + p + }); + continue + } + for (a = 0, + s = h.length; s > a; a += 1) + r.push({ + indexStart: h[a].indexStart, + indexCount: h[a].indexCount, + state: 0 + }) + } + } + if (0 !== r.length) { + for (r.sort((function(A, e) { + return A.indexStart - e.indexStart + } + )), + a = 0, + s = r.length; s > a; a += 1) { + var g = r[a].indexStart + , u = r[a].indexCount + , f = r[a].state; + if (0 === a) + t.addGroup(g, u, f); + else + f === r[a - 1].state && g === r[a - 1].indexStart + r[a - 1].indexCount ? t.groups[t.groups.length - 1].count += u : t.addGroup(g, u, f) + } + var m = A.getFilter() + , C = [i]; + for (a = 0, + s = l.length; s > a; a += 1) { + var y = m._getMaterialByName(l[a]); + C.push(y) + } + this.wireframeLineSegment.material = C + } else + this.wireframeLineSegment.visible = !1 + } + } + } + , + Lf.prototype.explode = function(A, e, t) {} + , + Lf.prototype.explosion = function(A, e) { + if (this.wireframeLineSegment) { + var t = Object.keys(this.wireframeLineSegment._indicesGroup); + e || (e = {}), + e.componentKey = t, + this.componentsExplosion(A, e) + } + } + , + Lf.prototype.closeExplosion = function(A) { + this.explosion(A) + } + , + Lf.prototype.componentsExplosion = function(A, e) { + if (this.wireframeLineSegment) + for (var t = Array.isArray(e.componentKey) ? e.componentKey : [e.componentKey], i = this.wireframeLineSegment._indicesGroup, o = this.wireframeLineSegment.geometry, n = 0, r = t.length; r > n; n += 1) { + var a = t[n]; + if (a) { + var s = A.getModelDescriptor().getStandardNodeInfosById(a); + if (s) { + var l = i[a]; + if (l) { + var c = s[0]; + if (!c || !c.userData || !c.userData.changeOffset) + continue; + for (var h = 0, d = l.length; d > h; h += 1) { + var p = l[h].positionStart; + Nf(o, p, p + l[h].positionCount, c.userData.changeOffset) + } + c.userData.changeOffset = void 0 + } + } + } + } + } + , + Lf.prototype.closeComponentsExplosion = function(A, e) { + this.componentsExplosion(A, { + componentKey: e + }) + } + , + Lf.prototype._getNodeGroup = function(A) { + return A._getNodeGroup(gp.WIREFRAME, { + globalSpace: !0 + }) + } + , + Lf.prototype.needDealWireframeLine = function(A) { + return !(!A.isActivateWireframe() || !this.wireframeLineSegment) + } + , + Lf.prototype.adjustVisibility = function(A, e) { + if (this.needDealWireframeLine(A)) { + var t = this._getNodeGroup(A) + , i = t.visible; + e && !t.bVisible || (t.visible = e), + t.bVisible = i + } + } + , + Lf.prototype.changeVisibilityOfSelectedObjects = function(A, e) {} + , + Lf.prototype.changeVisibilityOfNonSelectedObjects = function(A, e) { + this.adjustVisibility(A, e) + } + , + Lf.prototype.restoreVisibilityOfObjects = function() {} + , + Lf.prototype.disposeBufferAfterVbo = function() { + this.generated && !this.bufferDestroyed && this.wireframeLineSegment && this.wireframeLineSegment.visible && (this.bufferDestroyed = !0, + Tu.disposeBufferFromGeometry(this.wireframeLineSegment.geometry, ["position", "normal", "uv", "uv2"])) + } + , + Lf.prototype._existHiddenUserId = function() { + var A = this.manager.getHiddenUserIds(); + return !!(this.userIdMapForNoWireFrame && Object.keys(this.userIdMapForNoWireFrame).length || A && Object.keys(A).length) + } + , + Lf.prototype._isHiddenUserId = function(A) { + if (this.userIdMapForNoWireFrame[A]) + return !0; + var e = this.manager.getHiddenUserIds(); + return !(!e || !e[A]) + } + , + Lf.prototype.getWireFrameLineSegments = function() { + return this.wireframeLineSegment ? [this.wireframeLineSegment] : null + } + , + Lf.prototype.getPickingNodeGenerator = function() { + return this.pickingNodeGenerator || (this.pickingNodeGenerator = new Df(this)), + this.pickingNodeGenerator + } + ; + var Of = function(A, e) { + this.model = e, + this.meshManager = new Tf(this), + A || (this.wireframeManager = new Lf(this)) + }; + Of.prototype.destroy = function() { + this.meshManager.destroy(), + this.meshManager = null, + this.wireframeManager.destroy(), + this.wireframeManager = null, + this._clearFilteredState(), + this._clearSelectedState(), + this._clearHoveredState(), + this._clearBlinkedState() + } + , + Of.prototype.updateNodes = function(A) { + var e; + e = this._collectModelFiltered(A), + this.meshManager.update(A, e), + this.wireframeManager.update(A) + } + , + Of.prototype.generateWireframe = function(A, e) { + this.wireframeManager.generateWireframe(A, e) + } + , + Of.prototype.asyncGenerateWireframe = function(A, e) { + this.wireframeManager.asyncGenerateWireframe(A, e) + } + , + Of.prototype.rebuildIndices = function(A) { + this._rebuildIndices(A) + } + , + Of.prototype.clearData = function() { + this.meshManager.clearData(), + this.wireframeManager.clearData(), + this._clearFilteredState(), + this._clearSelectedState(), + this._clearHoveredState(), + this._clearBlinkedState() + } + , + Of.prototype.createMeshNodes = function(A, e) { + this.meshManager.createMeshNodes(A, e) + } + , + Of.prototype.createBatchedMeshNodes = function(A, e) { + this.meshManager.createBatchedMeshNodes(A, e) + } + , + Of.prototype.asyncCreateMeshNodes = function(A, e, t) { + this.meshManager.asyncCreateMeshNodes(A, e, t) + } + , + Of.prototype.hasNodeInfo = function(A) { + return Boolean(A.getModelDescriptor().getStandardNodeInfos()) + } + , + Of.prototype.disposeGeometry = function(A) { + this.meshManager.disposeGeometry(A) + } + , + Of.prototype.getMeshNode = function() { + return this.meshManager.getMeshNode() + } + , + Of.prototype.getPropertyValueByMaterialKey = function(A) { + return this.meshManager.getPropertyValueByMaterialKey(A) + } + , + Of.prototype.getFilteredUserIds = function() { + return this.mapMaterialIdToUserIdsForFilter + } + , + Of.prototype.getSelectedUserIds = function() { + return this.mapMaterialIdToUserIdsForSelection + } + , + Of.prototype.getHoveredUserIds = function() { + return this.mapMaterialIdToUserIdsForHover + } + , + Of.prototype.getBlinkedUserIds = function() { + return this.mapBlinkUserIds + } + , + Of.prototype.getHiddenUserIds = function() { + return this.hiddenUserIdSetObject + } + , + Of.prototype.getTransparentUserIds = function() { + return this.transparentUserIdSetObject + } + , + Of.prototype.applyFilter = function(A, e) { + if (this.hasNodeInfo(A)) { + var t = null; + t = e || A.getModelDescriptor().getStandardUserIds(); + var i = A.getModelDescriptor().getStandardNodeInfos(); + this._collectFilteredUserIds(A, t, i), + this._collectFilteredUserIdsForWireFrame(A, t, i), + this._collectSelectedUserIds(A.manager.sceneState.selectionSet, i), + this._collectHoveredUserIds(A.manager.sceneState.hoverId, i), + this._rebuildIndices(A), + this.updateNodes(A) + } + } + , + Of.prototype.applySelection = function(A) { + if (this.hasNodeInfo(A)) { + var e = A.getModelDescriptor().getStandardNodeInfos(); + this._clearSelectedState(A), + this._clearHoveredState(A), + this._collectSelectedUserIds(A.manager.sceneState.selectionSet, e), + this._collectHoveredUserIds(A.manager.sceneState.hoverId, e), + this._rebuildIndices(A), + this.updateNodes(A) + } + } + , + Of.prototype.clearSelection = function(A) { + this._clearSelectedState(A), + this.applyHover(A) + } + , + Of.prototype.applyHover = function(A) { + if (this.hasNodeInfo(A)) { + var e = A.getModelDescriptor().getStandardNodeInfos(); + this._clearHoveredState(A), + this._collectHoveredUserIds(A.manager.sceneState.hoverId, e), + this._rebuildIndices(A), + this.updateNodes(A) + } + } + , + Of.prototype.clearHover = function(A) { + this._clearHoveredState(A), + this._rebuildIndices(A), + this.updateNodes(A) + } + , + Of.prototype.applyBlink = function(A) { + if (this.hasNodeInfo(A)) { + var e = A.getModelDescriptor().getStandardNodeInfos(); + this._clearBlinkedState(A), + this._clearHoveredState(A), + this._collectBlinkedUserIds(A.manager.sceneState.getBlinkComponentsIdMap(), e), + this._collectHoveredUserIds(A.manager.sceneState.hoverId, e), + this._rebuildIndices(A), + this.updateNodes(A) + } + } + , + Of.prototype.clearBlink = function(A) { + this._clearBlinkedState(A), + this.applyHover(A) + } + , + Of.prototype.applyReplacement = function(A) { + this._rebuildIndices(A), + this.updateNodes(A) + } + , + Of.prototype._collectFilteredUserIds = function(A, e, t) { + var i = A.manager.filter + , o = i._hasHiddenFileIdFilter() + , n = i._hasVisibleFilter() + , r = i._hasOverrideMaterialFilter() + , a = i._hasTransparentFilter() + , s = A.hasReplacedUserId() + , l = A.hasHiddenSourceObjectUserId() + , c = this.mapMaterialIdToUserIdsForFilter = {}; + if (this.hiddenUserIdSetObject = {}, + this.overrideUserIdSetObject = {}, + this.transparentUserIdSetObject = {}, + o || n || r || a || s || l) + for (var h = 0; e.length > h; h += 1) { + var d = e[h] + , p = t[d]; + if (p && p.length) + for (var g = 0, u = p.length; u > g; g += 1) { + var f = p[g]; + if (o && i._isHiddenFileId(f) || n && !1 === i._isVisible(f) || A.isReplacedUserId(d) || A.isHiddenSourceObjectUserId(d)) + void 0 === c[f.materialId] && (c[f.materialId] = {}), + void 0 === c[f.materialId][zc.HIDDEN] && (c[f.materialId][zc.HIDDEN] = {}), + c[f.materialId][zc.HIDDEN][d] = !0, + this.hiddenUserIdSetObject[d] = !0; + else if (a && i._isTransparent(f)) + void 0 === c[f.materialId] && (c[f.materialId] = {}), + void 0 === c[f.materialId][zc.TRANSPARENT] && (c[f.materialId][zc.TRANSPARENT] = {}), + c[f.materialId][zc.TRANSPARENT][d] = !0, + this.transparentUserIdSetObject[d] = !0; + else if (r && i._hasOverrideMaterial(f)) { + var m = i._getOverrideMaterial(f); + if (Array.isArray(m)) { + var C = g + , y = m.find((function(A) { + return !!A.mapNodeIdToOrigMatId && Object.keys(A.mapNodeIdToOrigMatId).includes(f.nodeId) + } + )) + , v = y ? y.mapNodeIdToOrigMatId[f.nodeId] : m[C].materialId + , I = y ? y.materialId : ""; + "" !== I && (void 0 === c[v] && (c[v] = {}), + void 0 === c[v][zc.OVERRIDED] && (c[v][zc.OVERRIDED] = {})), + c[v] || (c[v] = {}, + c[v][zc.OVERRIDED] = {}), + c[v][zc.OVERRIDED][d] = I, + this.overrideUserIdSetObject[d] || (this.overrideUserIdSetObject[d] = []), + this.overrideUserIdSetObject[d][C] = I + } else { + var E = null !== m ? m.name : ""; + "" !== E && (void 0 === c[f.materialId] && (c[f.materialId] = {}), + void 0 === c[f.materialId][zc.OVERRIDED] && (c[f.materialId][zc.OVERRIDED] = {}), + c[f.materialId][zc.OVERRIDED][d] = E, + this.overrideUserIdSetObject[d] = E) + } + } + } + } + } + , + Of.prototype._collectFilteredUserIdsForWireFrame = function(A, e, t) { + var i = A.getFilter() + , o = i._hasOverrideMaterialFilterForWireFrame(); + if (this.mapFilteredUserIdsForWireFrame = {}, + o) + for (var n = 0; e.length > n; n += 1) { + var r = e[n]; + if (!this.hiddenUserIdSetObject[r]) { + var a = t[r]; + if (a && a.length) + for (var s = 0, l = a.length; l > s; s += 1) { + var c = a[s]; + if (i._hasOverrideMaterialForWireFrame(c)) { + var h = i._getOverrideMaterialForWireFrame(c) + , d = null !== h ? h.name : ""; + "" !== d && (this.mapFilteredUserIdsForWireFrame[r] = d) + } + } + } + } + } + , + Of.prototype._collectModelFiltered = function(A) { + var e = A.manager.filter + , t = A.modelKey + , i = e._hasModelOverrideMaterialFilter() + , o = e._hasModelTransparentFilter() + , n = A.manager.modelState.selectionSet; + return A.manager.modelState.hoverId === t ? A.manager.modelState.getHoverMaterial() : n.hasOwnProperty(A.modelKey) ? A.manager.modelState.selectionMaterial : o && e._isModelTransparent(t) ? e._getMaterialByName("scene") : i && e._hasModelOverrideMaterial(t) ? e._getModelOverrideMaterial(t) : null + } + , + Of.prototype._clearFilteredState = function() { + this.mapMaterialIdToUserIdsForFilter = null + } + , + Of.prototype._collectSelectedUserIds = function(A, e) { + var t = this.mapMaterialIdToUserIdsForSelection = {}; + for (var i in A) + if (this.model.modelKey === i) + for (var o in A[i]) { + var n = e[o]; + if (n && n.length) + for (var r = 0, a = n.length; a > r; r += 1) + void 0 === t[n[r].materialId] && (t[n[r].materialId] = {}), + void 0 === t[n[r].materialId][o] && (t[n[r].materialId][o] = !0) + } + } + , + Of.prototype._clearSelectedState = function() { + this.mapMaterialIdToUserIdsForSelection && (this.mapMaterialIdToUserIdsForSelection = null) + } + , + Of.prototype._collectHoveredUserIds = function(A, e) { + var t = this.mapMaterialIdToUserIdsForHover = {}; + if (A && e[A]) + for (var i = e[A], o = 0, n = i.length; n > o; o += 1) + void 0 === t[i[o].materialId] && (t[i[o].materialId] = {}), + void 0 === t[i[o].materialId][A] && (t[i[o].materialId][A] = !0) + } + , + Of.prototype._clearHoveredState = function() { + this.mapMaterialIdToUserIdsForHover && (this.mapMaterialIdToUserIdsForHover = null) + } + , + Of.prototype._collectBlinkedUserIds = function(A, e) { + var t = this.mapBlinkUserIds = {}; + for (var i in A) { + var o = e[i]; + if (o && o.length) + for (var n = 0, r = o.length; r > n; n += 1) + void 0 === t[o[n].materialId] && (t[o[n].materialId] = {}), + void 0 === t[o[n].materialId][i] && (t[o[n].materialId][i] = !0) + } + } + , + Of.prototype.calculateClippingIds = function(A, e) { + this.meshManager.calculateClippingIds(A, e) + } + , + Of.prototype._clearBlinkedState = function() { + this.mapBlinkUserIds && (this.mapBlinkUserIds = null) + } + , + Of.prototype._rebuildIndices = function(A) { + this.meshManager.rebuildIndices(A), + this.wireframeManager.rebuildIndices(A) + } + , + Of.prototype.clearCachedData = function() { + this.meshManager.clearAllNodeBuffer() + } + , + Of.prototype.getMeshesByUserIds = function(A, e) { + return this.meshManager.getMeshesByUserIds(A, e) + } + , + Of.prototype.adjustVisibility = function(A, e) { + this.meshManager.adjustVisibility(A, e), + this.wireframeManager.adjustVisibility(A, e) + } + , + Of.prototype.changeVisibilityOfSelectedObjects = function(A, e) { + this.meshManager.changeVisibilityOfSelectedObjects(A, e), + this.wireframeManager.changeVisibilityOfSelectedObjects(A, e) + } + , + Of.prototype.changeVisibilityOfNonSelectedObjects = function(A, e) { + this.meshManager.changeVisibilityOfNonSelectedObjects(A, e), + this.wireframeManager.changeVisibilityOfNonSelectedObjects(A, e) + } + , + Of.prototype.restoreVisibilityOfObjects = function() { + this.meshManager.restoreVisibilityOfObjects(), + this.wireframeManager.restoreVisibilityOfObjects() + } + , + Of.prototype.disposeBufferAfterVbo = function() { + this.meshManager.disposeBufferAfterVbo(), + this.wireframeManager.disposeBufferAfterVbo() + } + , + Of.prototype.getGeometryBuffersByUserId = function(A, e) { + return this.meshManager.getGeometryBuffersByUserId(A, e) + } + , + Of.prototype.explosion = function(A, e) { + this.meshManager.explosion(A, e), + this.wireframeManager.explosion(A, e) + } + , + Of.prototype.closeExplosion = function(A) { + this.meshManager.closeExplosion(A), + this.wireframeManager.closeExplosion(A) + } + , + Of.prototype.componentsExplosion = function(A, e) { + this.meshManager.componentsExplosion(A, e), + this.wireframeManager.componentsExplosion(A, e) + } + , + Of.prototype.closeComponentsExplosion = function(A, e) { + this.meshManager.closeComponentsExplosion(A, e), + this.wireframeManager.closeComponentsExplosion(A, e) + } + , + Of.prototype.isPickableNode = function(A) { + var e = this.getHiddenUserIds(); + if (e && e[A]) + return !1; + var t = this.getTransparentUserIds(); + return !t || !t[A] + } + , + Of.prototype.isHiddenNode = function(A) { + var e = this.getHiddenUserIds(); + return !(!e || !e[A]) + } + , + Of.prototype.getMeshManager = function() { + return this.meshManager + } + , + Of.prototype.getWireFrameManager = function() { + return this.wireframeManager + } + , + Of.prototype.getFilteredUserIdsForWireFrame = function() { + return this.mapFilteredUserIdsForWireFrame + } + ; + var Vf = function(A) { + of.call(this, A), + this.nodeGroupName = "PickingInstancedMeshGroup" + }; + function Gf(A, e, t) { + for (var i = A.getAttribute("mcol3").array, o = 0; e.length > o; o += 1) { + var n = e[o]; + i[3 * n] += t.x, + i[3 * n + 1] += t.y, + i[3 * n + 2] += t.z + } + A.getAttribute("mcol3").needsUpdate = !0 + } + Object.assign(Vf.prototype, of.prototype), + eu(Vf, [{ + key: "generatePickingMeshes", + value: function() { + var A = this + , e = this.manager + , t = e.cachedInstance + , i = !vc.BatchMergeEnabled; + e.traverseInstanceNodeMap(null, (function(e, o) { + for (var n = [], r = 0, a = o.length; a > r; r += 1) { + var s = o[r].geometry + , l = o[r] + , c = new Na; + c.setAttribute("position", s.getAttribute("position")), + c.setAttribute("mcol0", s.getAttribute("mcol0")), + c.setAttribute("mcol1", s.getAttribute("mcol1")), + c.setAttribute("mcol2", s.getAttribute("mcol2")), + c.setAttribute("mcol3", s.getAttribute("mcol3")), + c.setAttribute("vState", new Oa(new Float32Array(t.vState[e]),1,!1,1)), + c.setIndex(s.getIndex()); + var h = new Ue(c,Kd.DefaultMaterial); + l.matrixWorld.decompose(h.position, h.quaternion, h.scale), + h.name = e, + h.frustumCulled = !1, + h.renderOrder = i ? 1 : 0, + n.push(h) + } + A.addToPickingNodeMap(e, n) + } + )) + } + }, { + key: "updatePickingMeshesState", + value: function(A, e, t) { + if (this.pickingNodeMap) + for (var i = this.manager.manager, o = this.pickingNodeMap, n = 0, r = e.length; r > n; n += 1) { + var a = e[n]; + if (i.isPickableNode(a)) { + var s = i.getMeshManager().getNodeIdxMapByUserId(a); + if (s) + for (var l = Object.keys(s), c = 0, h = l.length; h > c; c += 1) { + var d = l[c] + , p = o[d]; + if (p) + for (var g = s[d], u = 0, f = p.length; f > u; u += 1) { + var m = p[u]; + m.material = A, + m.visible = !0; + for (var C = m.geometry, y = C.getAttribute("vState").array, v = 0, I = g.length; I > v; v += 1) + y[g[v]] = Hc.NONE; + C.getAttribute("vState").needsUpdate = !0 + } + } + } + } + } + }, { + key: "resetPickingMeshesState", + value: function() { + if (this.pickingNodeMap) + for (var A = this.pickingNodeMap, e = Object.keys(A), t = 0, i = e.length; i > t; t += 1) + for (var o = A[e[t]], n = 0, r = o.length; r > n; n += 1) + o[n].visible = !1, + o[n].geometry.getAttribute("vState").array.fill(Hc.HIDDEN), + o[n].geometry.getAttribute("vState").needsUpdate = !0 + } + }]); + var Pf = function(A) { + return Rf.call(this), + this.manager = A, + this.instanceGeometryMap = {}, + this.bufferAttributeMap = {}, + this.instanceNodeMap = {}, + this.nodeIdxMapFromUserId = {}, + this.matrixInfoMapFromUserId = {}, + this.cachedInstance = { + vState: {}, + vState2: {}, + vColor: {}, + vMirror: {}, + mcol0: {}, + mcol1: {}, + mcol2: {}, + mcol3: {}, + muvCol0: {}, + muvCol1: {}, + muvCol2: {}, + userId: {}, + nodeId: {} + }, + this.selectedMeshes = [], + this.nonSelectedMeshes = [], + this.selectedObjectIds = [], + this + }; + (Pf.prototype = Object.create(Rf.prototype)).destroy = function() { + this.cachedInstance = {}, + this.instanceNodeMap = {}, + this.bufferAttributeMap = {}, + this.nodeIdxMapFromUserId = {}, + this.matrixInfoMapFromUserId = {}, + this.disposeInstanceGeometries(), + this.instanceGeometryMap = {}, + this.manager = null, + this.selectedMeshes = [], + this.nonSelectedMeshes = [], + this.selectedObjectIds = [] + } + , + Pf.prototype.clearData = function() { + this.bufferDestroyed = !1, + this.disposeGeometries(), + this.disposeInstanceGeometries(), + this.clearInstanceCache(), + this.pickingNodeGenerator && this.pickingNodeGenerator.clearData() + } + , + Pf.prototype.clearInstanceCache = function() { + this.cachedInstance.vState = {}, + this.cachedInstance.vState2 = {}, + this.cachedInstance.vColor = {}, + this.cachedInstance.vMirror = {}, + this.cachedInstance.mcol0 = {}, + this.cachedInstance.mcol1 = {}, + this.cachedInstance.mcol2 = {}, + this.cachedInstance.mcol3 = {}, + this.cachedInstance.muvCol0 = {}, + this.cachedInstance.muvCol1 = {}, + this.cachedInstance.muvCol2 = {}, + this.bufferAttributeMap = {}, + this.nodeIdxMapFromUserId = {}, + this.instanceNodeMap = {}, + this.instanceGeometryMap = {}, + this.matrixInfoMapFromUserId = {}, + this.geometries = {} + } + , + Pf.prototype.updateNodes = function(A) { + this._getNodeGroup(A).visible = !A.isOnlyWireframe() + } + , + Pf.prototype.createMeshNodes = function(A, e) { + this._createInstanceGeometries(A, e), + this._makeInstanceNodes(A) + } + , + Pf.prototype.disposeInstanceGeometries = function() { + this.traverseInstanceGeometryMap((function(A, e) { + for (var t = 0, i = e.length; i > t; t += 1) + e[t].dispose() + } + )) + } + , + Pf.prototype._createInstanceGeometries = function(A, e) { + Bh.time("createInstanceGeometries"); + var t = this; + A.getModelDescriptor().traverseInstancedNodeInfos(e, (function(e, i) { + for (var o = 0, n = i.length; n > o; o += 1) { + var r = i[o] + , a = t.getGeometryByNodeInfo(A, r); + if (a) { + var s = A.manager.getOverrideMaterialByNodeInfo(r); + s && (r.materialId = s.name); + var l = t.getMeshIdByNodeInfo(r) + , c = t.cacheInstanceAttributeStateBy(A, l, a, r, s); + t.cacheNodeIdxByUserId(r.userId, l, c), + t.cacheMatrixInfoByUserId(r.userId, l, { + matrix: r.matrix, + boundingBox: r.boundingBox + }), + t.cacheInstanceGeometries(l, a) + } + } + } + )), + Bh.timeEnd("createInstanceGeometries") + } + , + Pf.prototype._createBatchedInstanceGeometries = function(A, e) { + var t = A.materialManager.getMaterialById(e.materialKey) + , i = A.getModelDescriptor(); + if (!t) { + var o = i.getNodeInfosByNodeId(e.nodeIdInfo[0]); + if (!o) + return; + e.materialKey = o.materialId, + t = A.materialManager.getMaterialById(e.materialKey), + e.color = []; + for (var n = 0, r = e.nodeIdInfo.length; r > n; n += 1) + e.color.push(t.color.r, t.color.g, t.color.b, t.opacity) + } + var a = !1; + t.aoMap && (a = !0), + e.hasUV2 = a; + var s = uh.getCombinedKeyString([e.materialKey, e.geoId]) + , l = this.cachedInstance; + if (e.nodeIdInfo.length < 1) + Bh.error("node 数量为 0 "); + else if (l.vState[s]) + Bh.warn("实例化几何已存在:", s); + else { + l.vState[s] = new Float32Array(e.nodeIdInfo.length), + l.vColor[s] = e.color, + l.vMirror[s] = new Float32Array(e.nodeIdInfo.length), + l.mcol0[s] = e.mcol0, + l.mcol1[s] = e.mcol1, + l.mcol2[s] = e.mcol2, + l.mcol3[s] = e.mcol3, + l.muvCol0[s] = [], + l.muvCol1[s] = [], + l.muvCol2[s] = [], + l.userId[s] = [], + l.nodeId[s] = []; + for (var c = new M, h = [], d = 0, p = e.nodeIdInfo.length; p > d; d += 1) + h = [], + l.userId[s].push(e.componentKeyInfo[d]), + l.nodeId[s].push(e.nodeIdInfo[d]), + h.push(e.mcol0[3 * d]), + h.push(e.mcol0[3 * d + 1]), + h.push(e.mcol0[3 * d + 2]), + h.push(0), + h.push(e.mcol1[3 * d]), + h.push(e.mcol1[3 * d + 1]), + h.push(e.mcol1[3 * d + 2]), + h.push(0), + h.push(e.mcol2[3 * d]), + h.push(e.mcol2[3 * d + 1]), + h.push(e.mcol2[3 * d + 2]), + h.push(0), + h.push(e.mcol3[3 * d]), + h.push(e.mcol3[3 * d + 1]), + h.push(e.mcol3[3 * d + 2]), + h.push(1), + c.fromArray(h), + 0 > c.determinant() && (l.vMirror[s][d] = -1); + this.getBufferAttributesBy(s); + this.cacheBatchedInstanceGeometries(s, e); + for (var g in e.componentInfo) + if (e.componentInfo.hasOwnProperty(g)) + for (var u = 0, f = e.componentInfo[g].length; f > u; u += 1) { + var m = e.componentInfo[g][u]; + this.cacheNodeIdxByUserId(g, s, m); + var C = i.getNodeInfosByNodeId(e.nodeIdInfo[m]); + C && this.cacheMatrixInfoByUserId(g, s, { + matrix: C.matrix, + boundingBox: C.boundingBox + }) + } + this._makeInstanceNodeById(A, s, this.instanceGeometryMap[s]) + } + } + , + Pf.prototype.getBufferAttributesBy = function(A) { + if (this.bufferAttributeMap[A]) + return this.bufferAttributeMap[A]; + var e = this.cachedInstance + , t = new Oa(new Float32Array(e.mcol0[A]),3,!1,1) + , i = new Oa(new Float32Array(e.mcol1[A]),3,!1,1) + , o = new Oa(new Float32Array(e.mcol2[A]),3,!1,1) + , n = new Oa(new Float32Array(e.mcol3[A]),3,!1,1) + , r = [] + , a = [] + , s = []; + if (e.muvCol0[A]) + for (var l = 0, c = e.muvCol0[A].length; c > l; l += 1) + r.push(new Oa(new Float32Array(e.muvCol0[A][l]),2,!1,1)), + a.push(new Oa(new Float32Array(e.muvCol1[A][l]),2,!1,1)), + s.push(new Oa(new Float32Array(e.muvCol2[A][l]),2,!1,1)); + return this.bufferAttributeMap[A] = { + attributeMcol0: t, + attributeMcol1: i, + attributeMcol2: o, + attributeMcol3: n, + attributeMuvCol0Array: r, + attributeMuvCol1Array: a, + attributeMuvCol2Array: s + }, + this.bufferAttributeMap[A] + } + , + Pf.prototype._addInstanceNodeToScene = function(A, e, t) { + this._getNodeGroup(A).add(t), + t.updateMatrixWorld(!0), + A.manager.addMeshToOctantMap(A.modelKey, e, new Bu(e,t)) + } + , + Pf.prototype.addAllInstanceNodeToScene = function(A) { + this.traverseInstanceNodeMap(null, (function(e, t) { + for (var i = 0, o = t.length; o > i; i += 1) + A.manager.addMeshToOctantMap(A._encodedDatabagId, e, new Bu(e,t[i])) + } + )) + } + , + Pf.prototype._makeInstanceNodeById = function(A, e, t) { + var i = this.cachedInstance + , o = A.materialManager + , n = this.getMaterialIdByMeshId(e) + , r = this.getBufferAttributesBy(e) + , a = o.getInstanceMaterialById(n, A); + this.instanceNodeMap[e] || (this.instanceNodeMap[e] = []); + for (var s = this.instanceNodeMap[e], l = 0, c = t.length; c > l; l += 1) { + t[l].setAttribute("mcol0", r.attributeMcol0), + t[l].setAttribute("mcol1", r.attributeMcol1), + t[l].setAttribute("mcol2", r.attributeMcol2), + t[l].setAttribute("mcol3", r.attributeMcol3), + r.attributeMuvCol0Array.length > 0 && (t[l].setAttribute("muvCol0", r.attributeMuvCol0Array[l]), + t[l].setAttribute("muvCol1", r.attributeMuvCol1Array[l]), + t[l].setAttribute("muvCol2", r.attributeMuvCol2Array[l])), + t[l].setAttribute("aColor", new Oa(new Float32Array(i.vColor[e]),4,!1,1)), + t[l].setAttribute("vState", new Oa(new Float32Array(i.vState[e]),1,!1,1)), + t[l].setAttribute("vState2", new Oa(new Float32Array(i.vState[e]),1,!1,1)), + t[l].setAttribute("vMirror", new Oa(new Float32Array(i.vMirror[e]),1,!1,1)), + t[l].getAttribute("vState2").array.fill(Hc.HIDDEN); + var h = t[l].index; + t[l].addGroup(0, h.count, 0), + t[l].addGroup(0, h.count, 1), + a[1].visible = !1; + var d = new Kf(t[l],a); + if (d.visible = !0, + d.modelKey = A.modelKey, + d.frustumCulled = !1, + s.push(d), + !uh.isEmptyObject(A.subModel)) { + var p = i.userId[e][0]; + if (p) { + var g = uh.getModelKeyFromComponentKey(p); + A.subModel[g] && d.matrix.copy(A.subModel[g]) + } + } + this._addInstanceNodeToScene(A, e, d) + } + } + , + Pf.prototype._makeInstanceNodes = function(A) { + Bh.time("makeInstanceNodes"); + var e = this; + this.traverseInstanceGeometryMap((function(t, i) { + e._makeInstanceNodeById(A, t, i) + } + )), + Bh.timeEnd("makeInstanceNodes") + } + , + Pf.prototype.resetInstanceMaterial = function(A) { + var e = this + , t = A.materialManager; + this.traverseInstanceGeometryMap((function(i, o) { + var n = e.getMaterialIdByMeshId(i) + , r = t.getInstanceMaterialById(n, A); + r[0].visible = !0, + r[1].visible = !1, + r.splice(2, 1); + for (var a = 0, s = o.length; s > a; a += 1) { + if (o[a].getAttribute("vState").array.fill(Hc.NONE), + o[0].removed) + for (var l in o[0].removed) + o[a].getAttribute("vState").array[l] = -1; + o[a].getAttribute("vState").needsUpdate = !0, + o[a].getAttribute("vState2").array.fill(Hc.HIDDEN), + o[a].getAttribute("vState2").needsUpdate = !0, + o[a].deleteAttribute("vState3"), + o[a].groups.splice(2, 1) + } + } + )) + } + , + Pf.prototype.clearInstanceStateByUserId = function(A) { + function e(A, e, t, i) { + for (var o = A.getAttribute("vState").array, n = A.getAttribute("vState2").array, r = 0, a = e.length; a > r; r += 1) { + var s = e[r]; + o[s] = t, + n[s] = i + } + A.getAttribute("vState").needsUpdate = !0, + A.getAttribute("vState2").needsUpdate = !0 + } + var t = this + , i = Hc.NONE + , o = Hc.HIDDEN; + this.traverseNodeIdxMapByUserId(A, (function(A, n) { + var r = t.getInstanceGeometries(A); + if (r) + for (var a = 0, s = r.length; s > a; a += 1) + e(r[a], n, i, o) + } + )) + } + , + Pf.prototype.updateInstanceStateByUserId = function(A, e, t, i) { + function o(A, e, t, i, o, n, r) { + var a = A.getAttribute("vState").array + , s = A.getAttribute("vState2").array + , l = A.getAttribute("aColor") + , c = A.getAttribute("vState3") + , h = null; + null !== r && (c ? h = c.array : ((h = (c = A.getAttribute("vState").clone()).array).fill(Hc.HIDDEN), + A.setAttribute("vState3", c))); + for (var d = l ? l.array : null, p = 0; e.length > p; p += 1) { + var g = e[p]; + a[g] = t, + s[g] = i, + h && (h[g] = r), + null !== d && null !== o && (d[4 * g] = o[0], + d[4 * g + 1] = o[1], + d[4 * g + 2] = o[2], + d[4 * g + 3] = o[3]) + } + if (A.getAttribute("vState").needsUpdate = !0, + A.getAttribute("vState2").needsUpdate = !0, + c && (c.needsUpdate = !0), + l && (l.needsUpdate = !0), + n) { + var u = !1 + , f = !1; + if (!n[0].visible) + if (t !== Hc.HIDDEN) + n[0].visible = !0; + else { + for (var m = 0, C = a.length; C > m; m += 1) + if (a[m] !== Hc.HIDDEN) { + u = !0; + break + } + n[0].visible = u + } + if (!n[1].visible) + if (i !== Hc.HIDDEN) + n[1].visible = !0; + else { + for (var y = 0, v = s.length; v > y; y += 1) + if (s[y] !== Hc.HIDDEN) { + f = !0; + break + } + n[1].visible = f + } + } + } + var n = A.materialManager + , r = this; + this.traverseNodeIdxMapByUserId(e, (function(a, s) { + var l = r.getInstanceGeometries(a); + r.getInstanceNodesById(a); + if (l) { + var c = null + , h = null + , d = null; + if (t === Hc.HIDDEN) { + c = Hc.HIDDEN, + h = Hc.HIDDEN; + for (var p = 0, g = l.length; g > p; p += 1) + o(l[p], s, c, h, null, null) + } else { + var u = r.getMaterialIdByMeshId(a) + , f = r.getUsableMaterialColorParamsBy(A, u, t, i) + , m = f.rgbaColor + , C = t; + t === Hc.TRANSPARENT && (C = Hc.OVERRIDED), + t === Hc.SELECTED && r.cacheSelectedObjectIds(e, a); + var y = n.getInstanceMaterialById(u, A) + , v = y[0]; + if (v.transparent === f.transparent ? (c = C, + h = Hc.HIDDEN) : (c = Hc.HIDDEN, + h = C), + !0 === f.wireframe) { + var I = y[2] || Kd.createInstanceMaterial(Kd.getMaterialParameters(v)); + I.wireframe = !0, + I.defines.INSTANCE_STATE_TERTIARY = "", + 3 > y.length && y.push(I), + c = Hc.HIDDEN, + h = Hc.HIDDEN, + d = C + } + C === Hc.BLINK && v.setBlinkColor(A.manager.getBlinkColor()); + for (p = 0, + g = l.length; g > p; p += 1) { + if (!0 === f.wireframe) { + var E = l[p].groups[0]; + l[p].groups[2] = { + start: E.start, + count: E.count, + materialIndex: 2 + } + } + o(l[p], s, c, h, m, y, d) + } + } + } + } + )) + } + , + Pf.prototype.getUsableMaterialColorParamsBy = function(A, e, t, i) { + var o = A.selectedMaterial + , n = A.manager.filter._getMaterialByName("scene") + , r = A.materialManager + , a = A.manager.getOverrideMaterialByName(e) || r.getMaterialById(e) + , s = null + , l = null; + switch (t) { + case Hc.HOVER: + i ? (s = A.manager.filter._getMaterialByName(i), + l = A.manager.sceneState.getHoverColorByMaterial(s)) : l = A.manager.sceneState.getHoverColorByMaterial(a); + break; + case Hc.SELECTED: + l = Kd.getColorParamsByMaterial(o); + break; + case Hc.TRANSPARENT: + l = Kd.getColorParamsByMaterial(n); + break; + case Hc.OVERRIDED: + case Hc.BLINK: + i ? (s = A.manager.filter._getMaterialByName(i), + l = Kd.getColorParamsByMaterial(s)) : l = Kd.getColorParamsByMaterial(a) + } + return l + } + , + Pf.prototype.getInstanceNodesById = function(A) { + return this.instanceNodeMap[A] + } + , + Pf.prototype.traverseInstanceNodeMap = function(A, e) { + for (var t = this.instanceNodeMap, i = 0, o = (A = A || Object.keys(this.instanceNodeMap)).length; o > i; i += 1) { + var n = A[i]; + e(n, t[n]) + } + } + , + Pf.prototype.getInstanceGeometries = function(A) { + return this.instanceGeometryMap[A] + } + , + Pf.prototype.cacheInstanceGeometries = function(A, e) { + if (!this.instanceGeometryMap[A]) { + var t = this.instanceGeometryMap[A] = []; + e instanceof Array || (e = [e]); + for (var i = 0, o = e.length; o > i; i += 1) + t[i] = new Na, + t[i].setIndex(e[i].index), + e[i].attributes.position && t[i].setAttribute("position", e[i].attributes.position), + e[i].attributes.normal && t[i].setAttribute("normal", e[i].attributes.normal), + e[i].attributes.uv && t[i].setAttribute("uv", e[i].attributes.uv), + e[i].attributes.uv2 && t[i].setAttribute("uv2", e[i].attributes.uv2) + } + } + , + Pf.prototype.cacheBatchedInstanceGeometries = function(A, e) { + if (this.instanceGeometryMap[A]) + return this.instanceGeometryMap[A][0]; + var t = this.instanceGeometryMap[A] = [] + , i = new Na; + return t[0] = i, + i.setIndex(new YA(e.index,1)), + e.position && e.position.length > 0 && i.setAttribute("position", new YA(e.position,3)), + e.normal && e.normal.length === e.position.length && i.setAttribute("normal", new YA(e.normal,3)), + e.uv && e.uv.length > 0 && i.setAttribute("uv", new YA(e.uv,2)), + e.hasUV2 && i.getAttribute("uv") && i.setAttribute("uv2", i.getAttribute("uv")), + i.getAttribute("normal") || i.computeVertexNormals(), + i + } + , + Pf.prototype.traverseInstanceGeometryMap = function(A) { + var e = this.instanceGeometryMap; + for (var t in e) + A(t, e[t]) + } + , + Pf.prototype.disposeInstanceGeometries = function() { + this.traverseInstanceGeometryMap((function(A, e) { + for (var t = 0, i = e.length; i > t; t += 1) + e[t].dispose() + } + )) + } + , + Pf.prototype.cacheInstanceAttributeStateBy = function(A, e, t, i, o) { + var n = i.materialId; + t instanceof Array || (t = [t]); + var r = t.length + , a = this.cachedInstance; + if (!a.vState[e]) { + a.vState[e] = [], + a.vColor[e] = [], + a.vMirror[e] = [], + a.mcol0[e] = [], + a.mcol1[e] = [], + a.mcol2[e] = [], + a.mcol3[e] = [], + a.muvCol0[e] = [], + a.muvCol1[e] = [], + a.muvCol2[e] = [], + a.userId[e] = [], + a.nodeId[e] = []; + for (var s = 0; r > s; s += 1) + a.muvCol0[e][s] = [], + a.muvCol1[e][s] = [], + a.muvCol2[e][s] = [] + } + var l = o || A.materialManager.getMaterialById(n); + a.userId[e].push(i.userId), + a.nodeId[e].push(i.nodeId), + a.vColor[e].push(l.color.r, l.color.g, l.color.b, l.opacity), + a.vState[e].push(0); + var c = i.matrix.elements; + return a.mcol0[e].push(c[0], c[1], c[2]), + a.mcol1[e].push(c[4], c[5], c[6]), + a.mcol2[e].push(c[8], c[9], c[10]), + a.mcol3[e].push(c[12], c[13], c[14]), + 0 > i.matrix.determinant() ? a.vMirror[e].push(-1) : a.vMirror[e].push(0), + a.vState[e].length - 1 + } + , + Pf.prototype.cacheNodeIdxByUserId = function(A, e, t) { + var i = this.nodeIdxMapFromUserId; + i[A] || (i[A] = {}), + i[A][e] || (i[A][e] = []), + i[A][e].push(t) + } + , + Pf.prototype.getNodeIdxMapByUserId = function(A) { + return this.nodeIdxMapFromUserId[A] + } + , + Pf.prototype.traverseNodeIdxMapByUserId = function(A, e) { + var t = this.nodeIdxMapFromUserId[A]; + for (var i in t) + e(i, t[i]) + } + , + Pf.prototype.traverseNodeIdxMap = function(A, e) { + for (var t = Object.keys(this.nodeIdxMapFromUserId), i = 0, o = t.length; o > i; i += 1) { + var n = t[i] + , r = this.nodeIdxMapFromUserId[n]; + if (!e || !e(n)) + for (var a in r) + A(a, r[a]) + } + } + , + Pf.prototype.cacheMatrixInfoByUserId = function(A, e, t) { + var i = this.matrixInfoMapFromUserId; + i[A] || (i[A] = {}), + i[A][e] || (i[A][e] = []), + i[A][e].push(t) + } + , + Pf.prototype.traverseMatrixInfoMapByUserId = function(A, e) { + var t = this.matrixInfoMapFromUserId[A]; + for (var i in t) + e(i, t[i]) + } + , + Pf.prototype.getMeshesByUserId = function(A, e) { + var t = this + , i = []; + return this.traverseMatrixInfoMapByUserId(e, (function(e, o) { + for (var n = t.getInstanceNodesById(e), r = 0, a = o.length; a > r; r += 1) + for (var s = 0, l = n.length; l > s; s += 1) { + var c = {}; + if (c.matrix = A.getModelMatrix().clone().multiply(o[r].matrix), + c.mesh = n[s], + 1 === l) + c.boundingBox = o[r].boundingBox; + else { + var h = c.mesh.geometry.boundingBox; + h ? h = h.clone() : (c.mesh.geometry.computeBoundingBox(), + h = c.mesh.geometry.boundingBox.clone()), + h.applyMatrix4(c.matrix), + c.boundingBox = h + } + i.push(c) + } + } + )), + i + } + , + Pf.prototype._getNodeGroup = function(A) { + return A._getNodeGroup(gp.INSTANCEGEOMETRY, { + globalSpace: !0 + }) + } + , + Pf.prototype._hasNodeGroup = function(A) { + return A._hasNodeGroup(gp.INSTANCEGEOMETRY) + } + , + Pf.prototype.clearSelectedObjectIds = function() { + this.selectedObjectIds.length = 0 + } + , + Pf.prototype.cacheSelectedObjectIds = function(A, e) { + this.selectedObjectIds.push({ + uid: A, + mgId: e + }) + } + , + Pf.prototype.adjustVisibility = function(A, e) { + var t = this._getNodeGroup(A) + , i = t.visible; + e && !t.bVisible || (t.visible = e), + t.bVisible = i + } + , + Pf.prototype.changeVisibilityOfSelectedObjects = function(A, e) { + var t = null; + if (e) + for (var i = 0, o = (t = this.selectedMeshes).length; o > i; i += 1) { + var n = t[i].object + , r = t[i].indices; + if (r) { + if (r.length) { + for (var a = n.geometry.getAttribute("vState").array, s = n.geometry.getAttribute("vState2").array, l = 0, c = r.length; c > l; l += 1) + r[l].state ? a[r[l].idx] = r[l].state : r[l].state2 && (s[r[l].idx] = r[l].state2); + n.geometry.getAttribute("vState").needsUpdate = !0, + n.geometry.getAttribute("vState2").needsUpdate = !0 + } + } else + n.visible = t[i].visibility + } + else { + this.selectedMeshes.length = 0, + t = this.selectedMeshes; + for (var h = {}, d = 0, p = this.selectedObjectIds.length; p > d; d += 1) + h[this.selectedObjectIds[d].mgId] = !0; + var g = Object.keys(h); + this.traverseInstanceNodeMap(g, (function(A, e) { + for (var i = 0, o = e.length; o > i; i += 1) { + for (var n = e[i], r = [], a = n.geometry.getAttribute("vState").array, s = n.geometry.getAttribute("vState2").array, l = 0, c = a.length; c > l; l += 1) + a[l] === Hc.SELECTED ? (r.push({ + idx: l, + state: a[l] + }), + a[l] = Hc.HIDDEN) : s[l] === Hc.SELECTED && (r.push({ + idx: l, + state2: s[l] + }), + s[l] = Hc.HIDDEN); + r.length ? (n.geometry.getAttribute("vState").needsUpdate = !0, + n.geometry.getAttribute("vState2").needsUpdate = !0, + t.push({ + object: n, + indices: r + })) : (t.push({ + object: n, + indices: null, + visibility: n.visible + }), + n.visible = !1) + } + } + )) + } + } + , + Pf.prototype.changeVisibilityOfNonSelectedObjects = function(A, e) { + var t = null; + if (e) + for (var i = 0, o = (t = this.nonSelectedMeshes).length; o > i; i += 1) { + var n = t[i].object + , r = t[i].indices; + if (r) { + if (r.length) { + for (var a = n.geometry.getAttribute("vState").array, s = n.geometry.getAttribute("vState2").array, l = 0, c = r.length; c > l; l += 1) + void 0 !== r[l].state ? a[r[l].idx] = r[l].state : void 0 !== r[l].state2 && (s[r[l].idx] = r[l].state2); + n.geometry.getAttribute("vState").needsUpdate = !0 + } + } else + n.visible = t[i].visibility + } + else { + this.nonSelectedMeshes.length = 0, + t = this.nonSelectedMeshes; + for (var h = {}, d = 0, p = this.selectedObjectIds.length; p > d; d += 1) + h[this.selectedObjectIds[d].mgId] = !0; + this.traverseInstanceNodeMap(null, (function(A, e) { + if (h[A]) + for (var i = 0, o = e.length; o > i; i += 1) { + for (var n = [], r = (p = e[i]).geometry.getAttribute("vState").array, a = p.geometry.getAttribute("vState2").array, s = 0, l = r.length; l > s; s += 1) + r[s] !== Hc.SELECTED && r[s] !== Hc.HIDDEN ? (n.push({ + idx: s, + state: r[s] + }), + r[s] = Hc.HIDDEN) : a[s] !== Hc.SELECTED && a[s] !== Hc.HIDDEN && (n.push({ + idx: s, + state2: a[s] + }), + a[s] = Hc.HIDDEN); + n.length && (p.geometry.getAttribute("vState").needsUpdate = !0, + p.geometry.getAttribute("vState2").needsUpdate = !0, + t.push({ + object: p, + indices: n + })) + } + else + for (var c = 0, d = e.length; d > c; c += 1) { + var p; + t.push({ + object: p = e[c], + indices: null, + visibility: p.visible + }), + p.visible = !1 + } + } + )) + } + } + , + Pf.prototype.restoreVisibilityOfObjects = function() { + this.selectedMeshes.length = 0, + this.nonSelectedMeshes.length = 0 + } + , + Pf.prototype.getMeshIdByNodeInfo = function(A) { + return uh.getCombinedKeyString([A.materialId, A.geometryId]) + } + , + Pf.prototype.getMaterialIdByMeshId = function(A) { + return uh.splitCombinedKeyString(A)[0] + } + , + Pf.prototype.getOriginalMaterialIdByMeshId = function(A) { + var e = uh.splitCombinedKeyString(A); + return uh.splitCombinedKeyString(e[0], "_")[0] + } + , + Pf.prototype.disposeBufferAfterVbo = function() { + if (!this.bufferDestroyed) { + this.bufferDestroyed = !0; + var A = ["muvCol0", "muvCol1", "muvCol2", "mcol0", "mcol1", "mcol2", "mcol3"]; + vc.EnableExplosion && A.pop(), + this.traverseInstanceGeometryMap((function(e, t) { + for (var i = 0, o = t.length; o > i; i += 1) + Tu.disposeBufferFromGeometry(t[i], A) + } + )) + } + } + , + Pf.prototype.getGeometryBuffersByUserId = function(A, e) { + var t = A.getModelDescriptor().getInstancedNodeInfosById(e); + if (!t) + return []; + for (var i = [], o = A.getDatabagId(), n = 0, r = t.length; r > n; n += 1) { + var a = t[n] + , s = this.getGeometryByNodeInfo(A, a) + , l = this._isLines(a); + if (s instanceof Array) + for (var c = 0, h = s.length; h > c; c += 1) + i.push({ + isLines: l, + databagId: o, + nodeId: a.nodeId, + position: s[c].getAttribute("position").array, + index: s[c].getIndex().array, + matrix: a.matrix + }); + else + i.push({ + databagId: o, + nodeId: a.nodeId, + position: s.getAttribute("position").array, + index: s.getIndex().array, + matrix: a.matrix + }) + } + return i + } + , + Pf.prototype.explode = function(A, e, t) { + var i = this; + for (var o in i.nodeIdxMapFromUserId) + i.traverseNodeIdxMapByUserId(o, (function(n, r) { + var a = A.manager.getComponentInfoByUserId(o).boundingBox + , s = uh.computeExplodeTranslation(e, a, t) + , l = i.getInstanceGeometries(n); + l && Gf(l[0], r, s) + } + )) + } + , + Pf.prototype.explosion = function(A, e) { + var t = Object.keys(this.nodeIdxMapFromUserId); + e.componentKey = t, + this.componentsExplosion(A, e) + } + , + Pf.prototype.closeExplosion = function(A) { + this.explosion(A, {}) + } + , + Pf.prototype.componentsExplosion = function(A, e) { + var t = e.coefficientX || 1 + , i = e.coefficientY || 1 + , o = e.coefficientZ || 1 + , n = e.offsetX || 0 + , r = e.offsetY || 0 + , a = e.offsetZ || 0 + , s = null; + if (e.center) + s = (new y).fromArray(e.center); + else if (1 !== t || 1 !== i || 1 !== o || 0 !== n || 0 !== r || 0 !== a) + return; + var l = Array.isArray(e.componentKey) ? e.componentKey : [e.componentKey] + , c = new y + , h = new aA + , d = new y(0,0,0) + , p = new y(0,0,0) + , g = new y + , u = new M + , m = A.getModelMatrix(); + m && s && (u.getInverse(m), + s.applyMatrix4(u)); + var C = A.manager + , v = !1 + , I = new y + , E = new f + , B = new y(1,1,1); + uh.isEmptyObject(A.subModel) || (v = !0); + for (var x = 0, S = l.length; S > x; x += 1) { + var w = l[x]; + if (w) { + var b = A.getModelDescriptor().getInstancedNodeInfosById(w); + if (b) + for (var U = this.nodeIdxMapFromUserId[w], F = 0, K = b.length; K > F; F += 1) { + var Q = b[F]; + if (Q) { + var R = Q.materialId + "&" + Q.geometryId + , T = new y(1,1,1); + if (v) + this.getInstanceNodesById(R)[0].matrix.decompose(I, E, B), + T.divide(B); + if (h.copy(Q.boundingBox), + h.getCenter(c), + Q.userData || (Q.userData = {}), + d.set(0, 0, 0), + p.set(0, 0, 0), + 1 !== t || 1 !== i || 1 !== o || Q.userData.explosionFactor) { + Q.userData.explosionFactor || (Q.userData.explosionFactor = new y(1,1,1), + Q.userData.explosionBaseDifference = c.sub(s).clone().multiply(T)); + var k = Q.userData.explosionFactor + , D = Q.userData.explosionBaseDifference; + d.set((t - k.x) * D.x, (i - k.y) * D.y, (o - k.z) * D.z), + 1 === t && 1 === i && 1 === o ? (Q.userData.explosionFactor = void 0, + Q.userData.explosionBaseDifference = void 0) : k.set(t, i, o) + } + if (0 !== n || 0 !== r || 0 !== a || Q.userData.explosionOffset) { + Q.userData.explosionOffset || (Q.userData.explosionOffset = new y(0,0,0)); + var L = Q.userData.explosionOffset; + p.set(n * T.x - L.x, r * T.y - L.y, a * T.z - L.z), + 0 === n && 0 === r && 0 === a ? Q.userData.explosionOffset = void 0 : L.set(n * T.x, r * T.y, a * T.z) + } + if (g.set(d.x + p.x, d.y + p.y, d.z + p.z), + 0 !== g.x || 0 !== g.y || 0 !== g.z) { + Q.userData.explosionFactor || Q.userData.explosionOffset ? C.explosionList[w] || (C.explosionList[w] = !0) : delete C.explosionList[w]; + var N = g.clone().multiply(B) + , O = u; + v && (O = u.clone()).makeTranslation(g.x, g.y, g.z), + u.makeTranslation(N.x, N.y, N.z), + Q.transformation || (Q.transformation = !0, + Q.transformationOriginalMatrix = Q.matrix.clone(), + Q.applyMatrix = new M, + Q.transformationOriginalBoundingBox = Q.boundingBox.clone()), + Q.matrix.premultiply(O), + Q.applyMatrix.premultiply(u), + Q.boundingBox.copy(Q.transformationOriginalBoundingBox).applyMatrix4(Q.applyMatrix); + var V = Q.matrix + , G = U[R] + , P = this.getInstanceGeometries(R); + if (P) { + var q = P[0] + , j = q.getAttribute("mcol0") + , H = q.getAttribute("mcol1") + , Y = q.getAttribute("mcol2") + , W = q.getAttribute("mcol3") + , J = G[0]; + j.array[3 * J] = V.elements[0], + j.array[3 * J + 1] = V.elements[1], + j.array[3 * J + 2] = V.elements[2], + j.needsUpdate = !0, + H.array[3 * J] = V.elements[4], + H.array[3 * J + 1] = V.elements[5], + H.array[3 * J + 2] = V.elements[6], + H.needsUpdate = !0, + Y.array[3 * J] = V.elements[8], + Y.array[3 * J + 1] = V.elements[9], + Y.array[3 * J + 2] = V.elements[10], + Y.needsUpdate = !0, + W.array[3 * J] = V.elements[12], + W.array[3 * J + 1] = V.elements[13], + W.array[3 * J + 2] = V.elements[14], + W.needsUpdate = !0 + } + } + } + } + } + } + } + , + Pf.prototype.closeComponentsExplosion = function(A, e) { + e = Array.isArray(e) ? e : [e]; + this.componentsExplosion(A, { + componentKey: e + }) + } + , + Pf.prototype._isLines = function(A) { + return A.type === $u.EnumNodeItemType.LINE + } + , + Pf.prototype.getPickingNodeGenerator = function() { + return this.pickingNodeGenerator || (this.pickingNodeGenerator = new Vf(this)), + this.pickingNodeGenerator + } + , + Pf.prototype.calculateClippingIds = function(A, e) { + var t = this; + for (var i in t.nodeIdxMapFromUserId) + this.traverseMatrixInfoMapByUserId(i, (function(i, o) { + for (var n = t.getInstanceNodesById(i), r = 0, a = o.length; a > r; r += 1) + for (var s = 0, l = n.length; l > s; s += 1) + n[s].intersectBoxWithClipPlane(A, o[r]) && n[s].getIntersectionPoints(A, o[r], e, !0) + } + )) + } + ; + var qf = function(A) { + of.call(this, A), + this.nodeGroupName = "PickingInstancedWireFrameGroup" + }; + Object.assign(qf.prototype, of.prototype), + eu(qf, [{ + key: "generatePickingMeshes", + value: function() { + this.manager.generateWireframe(), + this.manager.updateNodes(); + var A = this + , e = this.manager + , t = e.manager.getCachedInstanceData() + , i = !vc.BatchMergeEnabled; + e._traverseWireframeGeometryMap((function(o, n) { + for (var r = [], a = e._getWireframeMeshById(o), s = 0, l = n.length; l > s; s += 1) { + var c = n[s] + , h = new Na + , d = a[s]; + h.setAttribute("position", c.getAttribute("position")), + h.setAttribute("mcol0", c.getAttribute("mcol0")), + h.setAttribute("mcol1", c.getAttribute("mcol1")), + h.setAttribute("mcol2", c.getAttribute("mcol2")), + h.setAttribute("mcol3", c.getAttribute("mcol3")), + h.setAttribute("vState", new Oa(new Float32Array(t.vState[o]),1,!1,1)), + h.setIndex(c.getIndex()); + var p = new jo(h,Kd.DefaultMaterial); + d.matrixWorld.decompose(p.position, p.quaternion, p.scale), + p.name = o, + p.frustumCulled = !1, + p.renderOrder = i ? 0 : 1, + r.push(p) + } + A.addToPickingNodeMap(o, r) + } + )) + } + }, { + key: "updatePickingMeshesState", + value: function(A, e, t) { + if (this.pickingNodeMap) + for (var i = this.manager.manager, o = this.pickingNodeMap, n = 0, r = e.length; r > n; n += 1) { + var a = e[n]; + if (i.isPickableNode(a)) { + var s = i.getMeshManager().getNodeIdxMapByUserId(a); + if (s) + for (var l = Object.keys(s), c = 0, h = l.length; h > c; c += 1) { + var d = l[c] + , p = o[d]; + if (p) + for (var g = s[d], u = 0, f = p.length; f > u; u += 1) { + var m = p[u]; + m.material = A, + m.visible = !0; + for (var C = m.geometry, y = C.getAttribute("vState").array, v = 0, I = g.length; I > v; v += 1) + y[g[v]] = Hc.NONE; + C.getAttribute("vState").needsUpdate = !0 + } + } + } + } + } + }, { + key: "resetPickingMeshesState", + value: function() { + if (this.pickingNodeMap) + for (var A = this.pickingNodeMap, e = Object.keys(A), t = 0, i = e.length; i > t; t += 1) + for (var o = A[e[t]], n = 0, r = o.length; r > n; n += 1) + o[n].visible = !1, + o[n].geometry.getAttribute("vState").array.fill(Hc.HIDDEN), + o[n].geometry.getAttribute("vState").needsUpdate = !0 + } + }]); + var jf = function(A) { + this.manager = A, + this.model = A.model, + this.wireframeGeometryMap = {}, + this.wireframeMeshMap = {}, + this.noNeedWireframingIdMap = {}, + this.generated = !1 + }; + jf.prototype.destroy = function() { + this.disposeGeometries(), + this.wireframeGeometryMap = null, + this.noNeedWireframingIdMap = null, + this.manager = null + } + , + jf.prototype.clearData = function() { + this.generated = !1, + this.bufferDestroyed = !1, + this.wireframeMesh = {}, + this.disposeGeometries(), + this.wireframeGeometryMap = {}, + this.noNeedWireframingIdMap = {} + } + , + jf.prototype.disposeGeometries = function() { + this._traverseWireframeGeometryMap((function(A, e) { + for (var t = 0, i = e.length; i > t; t += 1) + e[t].dispose() + } + )) + } + , + jf.prototype.updateNodes = function(A) { + A || (A = this.model); + var e = null; + A.isActivateWireframe() ? (this.generateWireframe(A), + (e = this._getNodeGroup(A)).updateMatrixWorld(!0), + e.visible = !0) : this._hasNodeGroup(A) && ((e = this._getNodeGroup(A)).visible = !1) + } + , + jf.prototype.resetInstanceMaterial = function() { + var A = Hc.NONE; + this._traverseWireframeGeometryMap((function(e, t) { + for (var i = 0, o = t.length; o > i; i += 1) { + for (var n = t[i].getAttribute("vState").array, r = 0, a = n.length; a > r; r += 1) + n[r] = A; + t[i].getAttribute("vState").needsUpdate = !0 + } + } + )), + this._updateNoWireframingState() + } + , + jf.prototype.updateInstanceWireframeByUserId = function(A, e, t, i) { + if (t === Hc.HIDDEN || t === Hc.NONE || t === Hc.OVERRIDED) { + var o = null; + if (i) { + var n = A.getFilter()._getMaterialByName(i) + , r = Kd.getColorParamsByMaterial(n); + o = r.rgbaColor + } + var a = this; + this.manager.traverseNodeIdxMapByUserId(e, (function(A, e) { + a._setInstanceWireframeState(A, e, t, o) + } + )) + } + } + , + jf.prototype._updateNoWireframingState = function() { + var A = this + , e = Hc.HIDDEN; + this.manager.traverseNodeIdxMap((function(t, i) { + A._setInstanceWireframeState(t, i, e) + } + ), (function(e) { + return A._isNeedWireframing(e) + } + )) + } + , + jf.prototype._setInstanceWireframeState = function(A, e, t, i) { + var o = this._getWireframeGeometryById(A); + if (o) + for (var n = 0, r = o.length; r > n; n += 1) { + var a = o[n].getAttribute("vState").array + , s = null + , l = null; + i && (l = (s = o[n].getAttribute("aColor")) ? s.array : null); + for (var c = 0, h = e.length; h > c; c += 1) { + var d = e[c]; + a[d] = t, + null !== l && (l[4 * d] = i[0], + l[4 * d + 1] = i[1], + l[4 * d + 2] = i[2], + l[4 * d + 3] = i[3]) + } + o[n].getAttribute("vState").needsUpdate = !0, + s && (s.needsUpdate = !0) + } + } + , + jf.prototype._generateInstanceWireframe = function(A) { + A || (A = this.model), + this._collectNoWireframingIds(A), + this._createInstanceWireframeGeometries(A), + this._makeInstanceWireframe(A), + this._updateNoWireframingState() + } + , + jf.prototype.generateWireframe = function(A) { + A || (A = this.model), + this.generated || (Bh.time("createInstancedWireframeGeometry"), + this._generateInstanceWireframe(A), + Bh.timeEnd("createInstancedWireframeGeometry"), + this.generated = !0) + } + , + jf.prototype._collectNoWireframingIds = function(A) { + var e = this + , t = A.manager.filter; + A.getModelDescriptor().traverseInstancedNodeInfos(null, (function(A, i) { + i && t._hasRenderWithBoardlineFilter() && !t._isRenderWithBoardline(i[0]) && (e.noNeedWireframingIdMap[A] = !0) + } + )) + } + , + jf.prototype._createInstanceWireframeGeometries = function(A) { + var e = this + , t = {}; + this.manager.traverseInstanceGeometryMap((function(A, i) { + for (var o = e._getWireframeBufferById(A, i, t), n = e.wireframeGeometryMap[A] = [], r = 0, a = o.length; a > r; r += 1) { + var s = new Na; + s.setIndex(o[r].index), + s.setAttribute("position", o[r].position), + n.push(s) + } + } + )), + t = null + } + , + jf.prototype._makeInstanceWireframe = function(A) { + var e = this + , t = this.manager + , i = t.getCachedInstanceData() + , o = this._getWireframeMaterial(A); + this._traverseWireframeGeometryMap((function(n, r) { + for (var a = t.getBufferAttributesBy(n), s = e.wireframeMeshMap[n] = [], l = 0, c = r.length; c > l; l += 1) { + r[l].setAttribute("vState", new Oa(new Float32Array(i.vState[n]),1,!1,1)), + r[l].setAttribute("mcol0", a.attributeMcol0), + r[l].setAttribute("mcol1", a.attributeMcol1), + r[l].setAttribute("mcol2", a.attributeMcol2), + r[l].setAttribute("mcol3", a.attributeMcol3); + var h = new jo(r[l],o); + if (h.matrixAutoUpdate = !1, + h.frustumCulled = !1, + !uh.isEmptyObject(A.subModel)) { + var d = i.userId[n][0]; + if (d) { + var p = uh.getModelKeyFromComponentKey(d); + A.subModel[p] && h.matrix.copy(A.subModel[p]) + } + } + s.push(h), + e._addWireframeNodeToScene(A, h) + } + } + )) + } + , + jf.prototype._addWireframeNodeToScene = function(A, e) { + this._getNodeGroup(A).add(e), + e.updateMatrixWorld(!0) + } + , + jf.prototype._isNeedWireframing = function(A) { + return !this.noNeedWireframingIdMap || !this.noNeedWireframingIdMap[A] + } + , + jf.prototype._getWireframeMaterial = function(A) { + return A.getInstanceWireframeMaterial() + } + , + jf.prototype._getWireframeBufferById = function(A, e, t) { + var i = this.getGeometryIdByMeshId(A); + if (t[i]) + return t[i]; + t[i] = []; + for (var o = 0, n = e.length; n > o; o += 1) { + var r = e[o]; + t[i].push({ + index: Up(r.attributes.position.array, r.index.array), + position: r.attributes.position + }) + } + return t[i] + } + , + jf.prototype._getWireframeGeometryById = function(A) { + return this.wireframeGeometryMap[A] + } + , + jf.prototype._getWireframeMeshById = function(A) { + return this.wireframeMeshMap[A] + } + , + jf.prototype._traverseWireframeGeometryMap = function(A) { + var e = this.wireframeGeometryMap; + for (var t in e) + A(t, e[t]) + } + , + jf.prototype._getNodeGroup = function(A) { + return A._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { + globalSpace: !0 + }) + } + , + jf.prototype._hasNodeGroup = function(A) { + return A._hasNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY) + } + , + jf.prototype.getGeometryIdByMeshId = function(A) { + return uh.splitCombinedKeyString(A)[1] + } + , + jf.prototype.adjustVisibility = function(A, e) { + if (A.isActivateWireframe()) { + var t = this._getNodeGroup(A) + , i = t.visible; + e && !t.bVisible || (t.visible = e), + t.bVisible = i + } + } + , + jf.prototype.changeVisibilityOfSelectedObjects = function(A, e) {} + , + jf.prototype.changeVisibilityOfNonSelectedObjects = function(A, e) { + this.adjustVisibility(A, e) + } + , + jf.prototype.restoreVisibilityOfObjects = function() {} + , + jf.prototype.disposeBufferAfterVbo = function() { + if (this.generated && !this.bufferDestroyed) { + this.bufferDestroyed = !0; + var A = ["mcol0", "mcol1", "mcol2", "mcol3"]; + vc.EnableExplosion && A.pop(), + this._traverseWireframeGeometryMap((function(e, t) { + for (var i = 0, o = t.length; o > i; i += 1) + Tu.disposeBufferFromGeometry(t[i], A) + } + )) + } + } + , + jf.prototype.getPickingNodeGenerator = function() { + return this.pickingNodeGenerator || (this.pickingNodeGenerator = new qf(this)), + this.pickingNodeGenerator + } + ; + var Hf = function(A) { + this.model = A, + this.meshManager = new Pf(this), + this.wireframeManager = new jf(this) + }; + Hf.prototype.destroy = function() { + this.meshManager.destroy(), + this.meshManager = null, + this.wireframeManager.destroy(), + this.wireframeManager = null + } + , + Hf.prototype.clearData = function() { + this.meshManager.clearData(), + this.wireframeManager.clearData() + } + , + Hf.prototype.getGeometryByNodeInfo = function(A, e) { + return this.meshManager.getGeometryByNodeInfo(A, e) + } + , + Hf.prototype.getInstanceGeometries = function() { + return this.meshManager.instanceGeometryMap + } + , + Hf.prototype.traverseInstanceGeometryMap = function(A) { + this.meshManager.traverseInstanceGeometryMap(A) + } + , + Hf.prototype.getCachedInstanceData = function() { + return this.meshManager.cachedInstance + } + , + Hf.prototype.getBufferAttributesBy = function(A) { + return this.meshManager.getBufferAttributesBy(A) + } + , + Hf.prototype.traverseNodeIdxMapByUserId = function(A, e) { + this.meshManager.traverseNodeIdxMapByUserId(A, e) + } + , + Hf.prototype.traverseNodeIdxMap = function(A, e) { + this.meshManager.traverseNodeIdxMap(A, e) + } + , + Hf.prototype.getMeshesByUserId = function(A, e) { + return this.meshManager.getMeshesByUserId(A, e) + } + , + Hf.prototype._updateInstanceMaterialByUserId = function(A, e, t, i) { + this.meshManager.updateInstanceStateByUserId(A, e, t, i) + } + , + Hf.prototype._updateInstanceMaterialForWireFrameByUserId = function(A, e, t, i) { + this.wireframeManager.updateInstanceWireframeByUserId(A, e, t, i) + } + , + Hf.prototype._updateInstanceMaterial = function(A) { + Bh.time("update instance material"); + var e = zc; + for (var t in this.clearSelectedObjectIds(), + this.filteredIds) { + var i = this.filteredIds[t]; + if (i[e.HIDDEN]) + this._updateInstanceMaterialByUserId(A, t, Hc.HIDDEN), + this._updateInstanceMaterialForWireFrameByUserId(A, t, Hc.HIDDEN); + else if (i[e.TRANSPARENT]) + this._updateInstanceMaterialByUserId(A, t, Hc.TRANSPARENT); + else { + if (A.manager.isSelectPriority()) { + if (i[e.SELECTED]) { + this._updateInstanceMaterialByUserId(A, t, Hc.SELECTED); + continue + } + if (i[e.BLINK]) { + i[e.OVERRIDED] ? this._updateInstanceMaterialByUserId(A, t, Hc.BLINK, i[e.OVERRIDED]) : this._updateInstanceMaterialByUserId(A, t, Hc.BLINK); + continue + } + } else { + if (i[e.BLINK]) { + i[e.OVERRIDED] ? this._updateInstanceMaterialByUserId(A, t, Hc.BLINK, i[e.OVERRIDED]) : this._updateInstanceMaterialByUserId(A, t, Hc.BLINK); + continue + } + if (i[e.SELECTED]) { + this._updateInstanceMaterialByUserId(A, t, Hc.SELECTED); + continue + } + } + i[e.HOVER] ? i[e.OVERRIDED] ? this._updateInstanceMaterialByUserId(A, t, Hc.HOVER, i[e.OVERRIDED]) : this._updateInstanceMaterialByUserId(A, t, Hc.HOVER) : i[e.OVERRIDED] && this._updateInstanceMaterialByUserId(A, t, Hc.OVERRIDED, i[e.OVERRIDED]) + } + } + this._updateInstanceMaterialForWireFrame(A), + Bh.timeEnd("update instance material") + } + , + Hf.prototype._updateInstanceMaterialForWireFrame = function(A) { + var e = this.mapFilteredUserIdsForWireFrame; + if (e) + for (var t = Object.keys(e), i = 0, o = t.length; o > i; i += 1) { + var n = t[i]; + this.filteredIds && this.filteredIds[n] && this.filteredIds[n][zc.HIDDEN] || this._updateInstanceMaterialForWireFrameByUserId(A, n, Hc.OVERRIDED, e[n]) + } + } + , + Hf.prototype._resetInstanceMaterial = function(A) { + this.meshManager.resetInstanceMaterial(A), + this.wireframeManager.resetInstanceMaterial() + } + , + Hf.prototype._collectFilteredUserIds = function(A, e, t) { + var i = A.manager.filter + , o = i._hasHiddenFileIdFilter() + , n = i._hasVisibleFilter() + , r = i._hasOverrideMaterialFilter() + , a = i._hasTransparentFilter() + , s = A.hasReplacedUserId() + , l = A.hasHiddenUserId() + , c = this.filteredIds = {}; + if (this.transparentUserIdSetObject = {}, + o || n || r || a || s || l) + for (var h = zc, d = 0; e.length > d; d += 1) { + var p = e[d] + , g = t[p]; + if (g && g.length) { + var u = g[0]; + if (o && i._isHiddenFileId(u) || n && !1 === i._isVisible(u) || A.isReplacedUserId(p) || A.isHiddenSourceObjectUserId(p)) + c[p] || (c[p] = {}), + c[p][h.HIDDEN] = !0; + else if (a && i._isTransparent(u)) + c[p] || (c[p] = {}), + c[p][h.TRANSPARENT] = !0, + this.transparentUserIdSetObject[p] = !0; + else if (r && i._hasOverrideMaterial(u)) { + var f = i._getOverrideMaterial(u) + , m = null; + if (Array.isArray(f)) { + var C = u.nodeId.replace(u.componentKey + "_", "") + , y = parseInt(C, 10); + "" === (m = null !== f[y] ? f[y].name : "") && (m = u.materialId), + c[p] || (c[p] = {}), + c[p][h.OVERRIDED] || (c[p][h.OVERRIDED] = []), + c[p][h.OVERRIDED][y] = m + } else + "" !== (m = null !== f ? f.name : "") && (c[p] || (c[p] = {}), + c[p][h.OVERRIDED] = m) + } + } + } + } + , + Hf.prototype._collectModelFiltered = function(A) { + var e = A.manager.filter + , t = A.modelKey + , i = e._hasModelOverrideMaterialFilter() + , o = e._hasModelTransparentFilter() + , n = A.manager.modelState.selectionSet; + return A.manager.modelState.hoverId === t ? A.manager.modelState.getHoverMaterial() : n.hasOwnProperty(A.modelKey) ? A.manager.modelState.selectionMaterial : o && e._isModelTransparent(t) ? e._getMaterialByName("scene") : i && e._hasModelOverrideMaterial(t) ? e._getModelOverrideMaterial(t) : null + } + , + Hf.prototype._collectFilteredUserIdsForWireFrame = function(A, e, t) { + var i = A.getFilter() + , o = i._hasOverrideMaterialFilterForWireFrame(); + if (this.mapFilteredUserIdsForWireFrame = {}, + o) + for (var n = zc, r = 0; e.length > r; r += 1) { + var a = e[r]; + if (!(this.filteredIds && this.filteredIds[a] && this.filteredIds[a][n.HIDDEN])) { + var s = t[a]; + if (s && s.length) { + var l = s[0]; + if (i._hasOverrideMaterialForWireFrame(l)) { + var c = i._getOverrideMaterialForWireFrame(l) + , h = null !== c ? c.name : ""; + "" !== h && (this.mapFilteredUserIdsForWireFrame[a] = h) + } + } + } + } + } + , + Hf.prototype._collectSelectedUserIds = function(A, e) { + var t = this.filteredIds = this.filteredIds || {} + , i = zc + , o = {}; + for (var n in A) + if (this.model.modelKey === n) + for (var r in A[n]) + e[r] && (t[r] || (t[r] = {}), + t[r][i.SELECTED] = !0, + o[r] = !0); + this.selectedUserIds = Object.keys(o) + } + , + Hf.prototype._clearSelectedState = function(A) { + if (this.filteredIds && this.selectedUserIds && this.selectedUserIds.length) { + for (var e = 0, t = this.selectedUserIds.length; t > e; e += 1) { + var i = this.selectedUserIds[e]; + this.filteredIds[i] && (this.meshManager.clearInstanceStateByUserId(i), + delete this.filteredIds[i][zc.SELECTED]) + } + this.selectedUserIds = null + } + } + , + Hf.prototype._collectHoveredUserIds = function(A, e) { + var t = this.filteredIds = this.filteredIds || {}; + this.hoverdUserId = void 0, + A && e[A] && (t[A] || (t[A] = {}), + t[A][zc.HOVER] = !0, + this.hoverdUserId = A) + } + , + Hf.prototype._clearHoveredState = function(A) { + this.filteredIds && this.hoverdUserId && this.filteredIds[this.hoverdUserId] && (this.meshManager.clearInstanceStateByUserId(this.hoverdUserId), + delete this.filteredIds[this.hoverdUserId][zc.HOVER], + this.hoverdUserId = void 0) + } + , + Hf.prototype._collectBlinkedUserIds = function(A, e) { + var t = this.filteredIds = this.filteredIds || {} + , i = zc + , o = {}; + for (var n in A) + e[n] && (t[n] || (t[n] = {}), + t[n][i.BLINK] = !0, + o[n] = !0); + this.blinkUserIds = Object.keys(o) + } + , + Hf.prototype._clearBlinkedState = function(A) { + if (this.filteredIds && this.blinkUserIds && this.blinkUserIds.length) { + for (var e = 0, t = this.blinkUserIds.length; t > e; e += 1) { + var i = this.blinkUserIds[e]; + this.filteredIds[i] && (this.meshManager.clearInstanceStateByUserId(i), + delete this.filteredIds[i][zc.BLINK]) + } + this.blinkUserIds = null + } + } + , + Hf.prototype.applyFilter = function(A, e) { + if (this.hasNodeInfo(A)) { + this.updateNodes(A), + this._resetInstanceMaterial(A); + var t = null; + t = e || A.getModelDescriptor().getInstancedUserIds(); + var i = A.getModelDescriptor().getInstancedNodeInfos(); + this._collectFilteredUserIds(A, t, i), + this._collectFilteredUserIdsForWireFrame(A, t, i), + this._collectSelectedUserIds(A.manager.sceneState.selectionSet, i), + this._collectBlinkedUserIds(A.manager.sceneState.getBlinkComponentsIdMap(), i), + this._collectHoveredUserIds(A.manager.sceneState.hoverId, i), + this._updateInstanceMaterial(A), + this.updateNodes(A) + } + } + , + Hf.prototype.applySelection = function(A) { + if (this.hasNodeInfo(A)) { + var e = A.getModelDescriptor().getInstancedNodeInfos(); + this._clearSelectedState(A), + this._clearHoveredState(A), + this._collectSelectedUserIds(A.manager.sceneState.selectionSet, e), + this._collectHoveredUserIds(A.manager.sceneState.hoverId, e), + this._updateInstanceMaterial(A), + this.updateNodes(A) + } + } + , + Hf.prototype.clearSelection = function(A) { + this._clearSelectedState(A), + this.applyHover(A) + } + , + Hf.prototype.applyHover = function(A) { + if (this.hasNodeInfo(A)) { + var e = A.getModelDescriptor().getInstancedNodeInfos(); + this._clearHoveredState(A), + this._collectHoveredUserIds(A.manager.sceneState.hoverId, e), + this._updateInstanceMaterial(A), + this.updateNodes(A) + } + } + , + Hf.prototype.clearHover = function(A) { + this._clearHoveredState(A), + this._updateInstanceMaterial(A), + this.updateNodes(A) + } + , + Hf.prototype.applyBlink = function(A) { + if (this.hasNodeInfo(A)) { + var e = A.getModelDescriptor().getInstancedNodeInfos(); + this._clearBlinkedState(A), + this._clearHoveredState(A), + this._collectBlinkedUserIds(A.manager.sceneState.getBlinkComponentsIdMap(), e), + this._collectHoveredUserIds(A.manager.sceneState.hoverId, e), + this._updateInstanceMaterial(A), + this.updateNodes(A) + } + } + , + Hf.prototype.clearBlink = function(A) { + this._clearBlinkedState(A), + this.applyHover(A) + } + , + Hf.prototype.applyReplacement = function(A) { + this._updateInstanceMaterial(A), + this.updateNodes(A) + } + , + Hf.prototype.hasNodeInfo = function(A) { + return Boolean(A.getModelDescriptor().getInstancedNodeInfos()) + } + , + Hf.prototype.updateNodes = function(A) { + if (this.hasNodeInfo(A)) { + var e; + if (e = this._collectModelFiltered(A)) + for (var t = A.getModelDescriptor().getInstancedUserIds(), i = 0; t.length > i; i += 1) + this._updateInstanceMaterialByUserId(A, t[i], Hc.OVERRIDED, e); + this.meshManager.updateNodes(A), + this.wireframeManager.updateNodes(A) + } + } + , + Hf.prototype.generateWireframe = function(A, e) { + this.wireframeManager.generateWireframe(A, e) + } + , + Hf.prototype.createMeshNodes = function(A, e) { + this.meshManager.createMeshNodes(A, e) + } + , + Hf.prototype.createInstancedMeshNodes = function(A, e) { + this.meshManager._createBatchedInstanceGeometries(A, e) + } + , + Hf.prototype.clearCachedData = function() { + this.meshManager.disposeGeometries() + } + , + Hf.prototype.getMeshesByUserIds = function(A, e) { + this.meshManager.getMeshesByUserId(A, e) + } + , + Hf.prototype.clearSelectedObjectIds = function() { + this.meshManager.clearSelectedObjectIds() + } + , + Hf.prototype.adjustVisibility = function(A, e) { + this.meshManager.adjustVisibility(A, e), + this.wireframeManager.adjustVisibility(A, e) + } + , + Hf.prototype.changeVisibilityOfSelectedObjects = function(A, e) { + this.meshManager.changeVisibilityOfSelectedObjects(A, e), + this.wireframeManager.changeVisibilityOfSelectedObjects(A, e) + } + , + Hf.prototype.changeVisibilityOfNonSelectedObjects = function(A, e) { + this.meshManager.changeVisibilityOfNonSelectedObjects(A, e), + this.wireframeManager.changeVisibilityOfNonSelectedObjects(A, e) + } + , + Hf.prototype.restoreVisibilityOfObjects = function() { + this.meshManager.restoreVisibilityOfObjects(), + this.wireframeManager.restoreVisibilityOfObjects() + } + , + Hf.prototype.disposeBufferAfterVbo = function() { + this.meshManager.disposeBufferAfterVbo(), + this.wireframeManager.disposeBufferAfterVbo() + } + , + Hf.prototype.addAllInstanceNodeToScene = function(A) { + this.meshManager.addAllInstanceNodeToScene(A) + } + , + Hf.prototype.getGeometryBuffersByUserId = function(A, e) { + return this.meshManager.getGeometryBuffersByUserId(A, e) + } + , + Hf.prototype.explode = function(A, e, t) { + this.meshManager.explode(A, e, t) + } + , + Hf.prototype.explosion = function(A, e) { + this.meshManager.explosion(A, e) + } + , + Hf.prototype.closeExplosion = function(A) { + this.meshManager.closeExplosion(A) + } + , + Hf.prototype.componentsExplosion = function(A, e) { + this.meshManager.componentsExplosion(A, e) + } + , + Hf.prototype.closeComponentsExplosion = function(A, e) { + this.meshManager.closeComponentsExplosion(A, e) + } + , + Hf.prototype.isPickableNode = function(A) { + if (!this.filteredIds || !this.filteredIds[A]) + return !0; + var e = this.filteredIds[A]; + return !e[zc.HIDDEN] && !e[zc.TRANSPARENT] + } + , + Hf.prototype.isHiddenNode = function(A) { + return !!(this.filteredIds && this.filteredIds[A] && this.filteredIds[A][zc.HIDDEN]) + } + , + Hf.prototype.getMeshManager = function() { + return this.meshManager + } + , + Hf.prototype.getWireFrameManager = function() { + return this.wireframeManager + } + , + Hf.prototype.getTransparentUserIds = function() { + return this.transparentUserIdSetObject + } + ; + var Yf = function(A, e) { + tf.call(this, A), + this.defaultManager = new Of(e,A), + this.instancedManager = new Hf(A), + this.loader = new ef(this) + }; + function Wf(A, e) { + var t = A.__state.conversionName.toString() + , i = Math.round(A.r) + , o = Math.round(A.g) + , n = Math.round(A.b) + , r = A.a + , a = Math.round(A.h) + , s = A.s.toFixed(1) + , l = A.v.toFixed(1); + if (e || "THREE_CHAR_HEX" === t || "SIX_CHAR_HEX" === t) { + for (var c = A.hex.toString(16); 6 > c.length; ) + c = "0" + c; + return "#" + c + } + return "CSS_RGB" === t ? "rgb(" + i + "," + o + "," + n + ")" : "CSS_RGBA" === t ? "rgba(" + i + "," + o + "," + n + "," + r + ")" : "HEX" === t ? "0x" + A.hex.toString(16) : "RGB_ARRAY" === t ? "[" + i + "," + o + "," + n + "]" : "RGBA_ARRAY" === t ? "[" + i + "," + o + "," + n + "," + r + "]" : "RGB_OBJ" === t ? "{r:" + i + ",g:" + o + ",b:" + n + "}" : "RGBA_OBJ" === t ? "{r:" + i + ",g:" + o + ",b:" + n + ",a:" + r + "}" : "HSV_OBJ" === t ? "{h:" + a + ",s:" + s + ",v:" + l + "}" : "HSVA_OBJ" === t ? "{h:" + a + ",s:" + s + ",v:" + l + ",a:" + r + "}" : "unknown format" + } + (Yf.prototype = Object.create(tf.prototype)).prepare = function(A, e) { + if (this.isLoaded() && !this.isHidden()) { + this.prepareWireframe(this.model, e); + this.model.getMaterialManager(); + this.model.getMaterialManager()._updateTextureMapping(), + !this.model.lightmap || this.model.enableLightmap === vc.EnableLightmap && this.model.lightmapIntensity === vc.LightmapIntensity || (this.model.enableLightmap = vc.EnableLightmap, + this.model.lightmapIntensity = vc.LightmapIntensity, + this.rebuildIndicesforLightmap(), + this.updateNodes()) + } + } + , + Yf.prototype.settleData = function(A) { + this.addNodeInfoToOctantMap(), + this.createMeshNodes(A) + } + , + Yf.prototype.addNodeInfoToOctantMap = function() { + var A = this.model.manager + , e = this.model.getEncodedDatabagId(); + this.loader.getDescriptor().traverseNodeInfosByComponent((function(t, i) { + A.addNodeInfoToOctantMap(e, t, i) + } + )) + } + , + Yf.prototype.createMeshNodes = function(A) { + var e = this + , t = this.model + , i = this.loader.getDescriptor(); + this.instancedManager.createMeshNodes(t, i.getInstancedUserIds()), + this.defaultManager.asyncCreateMeshNodes(t, i.getStandardUserIds(), (function() { + t.getMaterialManager()._updateTextureMapping(), + e.clearCachedData(t), + e.loaded = !0, + A && A() + } + )) + } + , + Yf.prototype.clearCachedData = function(A) { + this.loader.getDescriptor().destroyReader(), + this.loader.getDescriptor().clearReferencedMeshCache(), + this.defaultManager.clearCachedData(), + this.instancedManager.clearCachedData() + } + ; + var Jf = Array.prototype.forEach + , zf = Array.prototype.slice + , Zf = { + BREAK: {}, + extend: function(A) { + return this.each(zf.call(arguments, 1), (function(e) { + (this.isObject(e) ? Object.keys(e) : []).forEach(function(t) { + this.isUndefined(e[t]) || (A[t] = e[t]) + } + .bind(this)) + } + ), this), + A + }, + defaults: function(A) { + return this.each(zf.call(arguments, 1), (function(e) { + (this.isObject(e) ? Object.keys(e) : []).forEach(function(t) { + this.isUndefined(A[t]) && (A[t] = e[t]) + } + .bind(this)) + } + ), this), + A + }, + compose: function() { + var A = zf.call(arguments); + return function() { + for (var e = zf.call(arguments), t = A.length - 1; t >= 0; t--) + e = [A[t].apply(this, e)]; + return e[0] + } + }, + each: function(A, e, t) { + if (A) + if (Jf && A.forEach && A.forEach === Jf) + A.forEach(e, t); + else if (A.length === A.length + 0) { + var i, o = void 0; + for (o = 0, + i = A.length; i > o; o++) + if (o in A && e.call(t, A[o], o) === this.BREAK) + return + } else + for (var n in A) + if (e.call(t, A[n], n) === this.BREAK) + return + }, + defer: function(A) { + setTimeout(A, 0) + }, + debounce: function(A, e, t) { + var i = void 0; + return function() { + var o = this + , n = arguments; + function r() { + i = null, + t || A.apply(o, n) + } + var a = t || !i; + clearTimeout(i), + i = setTimeout(r, e), + a && A.apply(o, n) + } + }, + toArray: function(A) { + return A.toArray ? A.toArray() : zf.call(A) + }, + isUndefined: function(A) { + return void 0 === A + }, + isNull: function(A) { + return null === A + }, + isNaN: function(A) { + function e() { + return A.apply(this, arguments) + } + return e.toString = function() { + return A.toString() + } + , + e + }((function(A) { + return isNaN(A) + } + )), + isArray: Array.isArray || function(A) { + return A.constructor === Array + } + , + isObject: function(A) { + return A === Object(A) + }, + isNumber: function(A) { + return A === A + 0 + }, + isString: function(A) { + return A === A + "" + }, + isBoolean: function(A) { + return !1 === A || !0 === A + }, + isFunction: function(A) { + return "[object Function]" === Object.prototype.toString.call(A) + } + } + , Xf = [{ + litmus: Zf.isString, + conversions: { + THREE_CHAR_HEX: { + read: function(A) { + var e = A.match(/^#([A-F0-9])([A-F0-9])([A-F0-9])$/i); + return null !== e && { + space: "HEX", + hex: parseInt("0x" + e[1].toString() + e[1].toString() + e[2].toString() + e[2].toString() + e[3].toString() + e[3].toString(), 0) + } + }, + write: Wf + }, + SIX_CHAR_HEX: { + read: function(A) { + var e = A.match(/^#([A-F0-9]{6})$/i); + return null !== e && { + space: "HEX", + hex: parseInt("0x" + e[1].toString(), 0) + } + }, + write: Wf + }, + CSS_RGB: { + read: function(A) { + var e = A.match(/^rgb\(\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*\)/); + return null !== e && { + space: "RGB", + r: parseFloat(e[1]), + g: parseFloat(e[2]), + b: parseFloat(e[3]) + } + }, + write: Wf + }, + CSS_RGBA: { + read: function(A) { + var e = A.match(/^rgba\(\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*\)/); + return null !== e && { + space: "RGB", + r: parseFloat(e[1]), + g: parseFloat(e[2]), + b: parseFloat(e[3]), + a: parseFloat(e[4]) + } + }, + write: Wf + } + } + }, { + litmus: Zf.isNumber, + conversions: { + HEX: { + read: function(A) { + return { + space: "HEX", + hex: A, + conversionName: "HEX" + } + }, + write: function(A) { + return A.hex + } + } + } + }, { + litmus: Zf.isArray, + conversions: { + RGB_ARRAY: { + read: function(A) { + return 3 === A.length && { + space: "RGB", + r: A[0], + g: A[1], + b: A[2] + } + }, + write: function(A) { + return [A.r, A.g, A.b] + } + }, + RGBA_ARRAY: { + read: function(A) { + return 4 === A.length && { + space: "RGB", + r: A[0], + g: A[1], + b: A[2], + a: A[3] + } + }, + write: function(A) { + return [A.r, A.g, A.b, A.a] + } + } + } + }, { + litmus: Zf.isObject, + conversions: { + RGBA_OBJ: { + read: function(A) { + return !!(Zf.isNumber(A.r) && Zf.isNumber(A.g) && Zf.isNumber(A.b) && Zf.isNumber(A.a)) && { + space: "RGB", + r: A.r, + g: A.g, + b: A.b, + a: A.a + } + }, + write: function(A) { + return { + r: A.r, + g: A.g, + b: A.b, + a: A.a + } + } + }, + RGB_OBJ: { + read: function(A) { + return !!(Zf.isNumber(A.r) && Zf.isNumber(A.g) && Zf.isNumber(A.b)) && { + space: "RGB", + r: A.r, + g: A.g, + b: A.b + } + }, + write: function(A) { + return { + r: A.r, + g: A.g, + b: A.b + } + } + }, + HSVA_OBJ: { + read: function(A) { + return !!(Zf.isNumber(A.h) && Zf.isNumber(A.s) && Zf.isNumber(A.v) && Zf.isNumber(A.a)) && { + space: "HSV", + h: A.h, + s: A.s, + v: A.v, + a: A.a + } + }, + write: function(A) { + return { + h: A.h, + s: A.s, + v: A.v, + a: A.a + } + } + }, + HSV_OBJ: { + read: function(A) { + return !!(Zf.isNumber(A.h) && Zf.isNumber(A.s) && Zf.isNumber(A.v)) && { + space: "HSV", + h: A.h, + s: A.s, + v: A.v + } + }, + write: function(A) { + return { + h: A.h, + s: A.s, + v: A.v + } + } + } + } + }] + , _f = void 0 + , $f = void 0 + , Am = function() { + $f = !1; + var A = arguments.length > 1 ? Zf.toArray(arguments) : arguments[0]; + return Zf.each(Xf, (function(e) { + if (e.litmus(A)) + return Zf.each(e.conversions, (function(e, t) { + if (_f = e.read(A), + !1 === $f && !1 !== _f) + return $f = _f, + _f.conversionName = t, + _f.conversion = e, + Zf.BREAK + } + )), + Zf.BREAK + } + )), + $f + } + , em = void 0 + , tm = { + hsv_to_rgb: function(A, e, t) { + var i = Math.floor(A / 60) % 6 + , o = A / 60 - Math.floor(A / 60) + , n = t * (1 - e) + , r = t * (1 - o * e) + , a = t * (1 - (1 - o) * e) + , s = [[t, a, n], [r, t, n], [n, t, a], [n, r, t], [a, n, t], [t, n, r]][i]; + return { + r: 255 * s[0], + g: 255 * s[1], + b: 255 * s[2] + } + }, + rgb_to_hsv: function(A, e, t) { + var i = Math.min(A, e, t) + , o = Math.max(A, e, t) + , n = o - i + , r = void 0; + return 0 === o ? { + h: NaN, + s: 0, + v: 0 + } : (r = A === o ? (e - t) / n : e === o ? 2 + (t - A) / n : 4 + (A - e) / n, + 0 > (r /= 6) && (r += 1), + { + h: 360 * r, + s: n / o, + v: o / 255 + }) + }, + rgb_to_hex: function(A, e, t) { + var i = this.hex_with_component(0, 2, A); + return i = this.hex_with_component(i, 1, e), + i = this.hex_with_component(i, 0, t) + }, + component_from_hex: function(A, e) { + return A >> 8 * e & 255 + }, + hex_with_component: function(A, e, t) { + return t << (em = 8 * e) | A & ~(255 << em) + } + } + , im = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(A) { + return typeof A + } + : function(A) { + return A && "function" == typeof Symbol && A.constructor === Symbol && A !== Symbol.prototype ? "symbol" : typeof A + } + , om = function(A, e) { + if (!(A instanceof e)) + throw new TypeError("Cannot call a class as a function") + } + , nm = function() { + function A(A, e) { + for (var t = 0; e.length > t; t++) { + var i = e[t]; + i.enumerable = i.enumerable || !1, + i.configurable = !0, + "value"in i && (i.writable = !0), + Object.defineProperty(A, i.key, i) + } + } + return function(e, t, i) { + return t && A(e.prototype, t), + i && A(e, i), + e + } + }() + , rm = function A(e, t, i) { + null === e && (e = Function.prototype); + var o = Object.getOwnPropertyDescriptor(e, t); + if (void 0 === o) { + var n = Object.getPrototypeOf(e); + return null === n ? void 0 : A(n, t, i) + } + if ("value"in o) + return o.value; + var r = o.get; + return void 0 !== r ? r.call(i) : void 0 + } + , am = function(A, e) { + if ("function" != typeof e && null !== e) + throw new TypeError("Super expression must either be null or a function, not " + typeof e); + A.prototype = Object.create(e && e.prototype, { + constructor: { + value: A, + enumerable: !1, + writable: !0, + configurable: !0 + } + }), + e && (Object.setPrototypeOf ? Object.setPrototypeOf(A, e) : A.__proto__ = e) + } + , sm = function(A, e) { + if (!A) + throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + return !e || "object" != typeof e && "function" != typeof e ? A : e + } + , lm = function() { + function A() { + if (om(this, A), + this.__state = Am.apply(this, arguments), + !1 === this.__state) + throw new Error("Failed to interpret color arguments"); + this.__state.a = this.__state.a || 1 + } + return nm(A, [{ + key: "toString", + value: function() { + return Wf(this) + } + }, { + key: "toHexString", + value: function() { + return Wf(this, !0) + } + }, { + key: "toOriginal", + value: function() { + return this.__state.conversion.write(this) + } + }]), + A + }(); + function cm(A, e, t) { + Object.defineProperty(A, e, { + get: function() { + return "RGB" === this.__state.space || lm.recalculateRGB(this, e, t), + this.__state[e] + }, + set: function(A) { + "RGB" !== this.__state.space && (lm.recalculateRGB(this, e, t), + this.__state.space = "RGB"), + this.__state[e] = A + } + }) + } + function hm(A, e) { + Object.defineProperty(A, e, { + get: function() { + return "HSV" === this.__state.space || lm.recalculateHSV(this), + this.__state[e] + }, + set: function(A) { + "HSV" !== this.__state.space && (lm.recalculateHSV(this), + this.__state.space = "HSV"), + this.__state[e] = A + } + }) + } + lm.recalculateRGB = function(A, e, t) { + if ("HEX" === A.__state.space) + A.__state[e] = tm.component_from_hex(A.__state.hex, t); + else { + if ("HSV" !== A.__state.space) + throw new Error("Corrupted color state"); + Zf.extend(A.__state, tm.hsv_to_rgb(A.__state.h, A.__state.s, A.__state.v)) + } + } + , + lm.recalculateHSV = function(A) { + var e = tm.rgb_to_hsv(A.r, A.g, A.b); + Zf.extend(A.__state, { + s: e.s, + v: e.v + }), + Zf.isNaN(e.h) ? Zf.isUndefined(A.__state.h) && (A.__state.h = 0) : A.__state.h = e.h + } + , + lm.COMPONENTS = ["r", "g", "b", "h", "s", "v", "hex", "a"], + cm(lm.prototype, "r", 2), + cm(lm.prototype, "g", 1), + cm(lm.prototype, "b", 0), + hm(lm.prototype, "h"), + hm(lm.prototype, "s"), + hm(lm.prototype, "v"), + Object.defineProperty(lm.prototype, "a", { + get: function() { + return this.__state.a + }, + set: function(A) { + this.__state.a = A + } + }), + Object.defineProperty(lm.prototype, "hex", { + get: function() { + return "HEX" !== !this.__state.space && (this.__state.hex = tm.rgb_to_hex(this.r, this.g, this.b)), + this.__state.hex + }, + set: function(A) { + this.__state.space = "HEX", + this.__state.hex = A + } + }); + var dm = function() { + function A(e, t) { + om(this, A), + this.initialValue = e[t], + this.domElement = document.createElement("div"), + this.object = e, + this.property = t, + this.__onChange = void 0, + this.__onFinishChange = void 0 + } + return nm(A, [{ + key: "onChange", + value: function(A) { + return this.__onChange = A, + this + } + }, { + key: "onFinishChange", + value: function(A) { + return this.__onFinishChange = A, + this + } + }, { + key: "setValue", + value: function(A) { + return this.object[this.property] = A, + this.__onChange && this.__onChange.call(this, A), + this.updateDisplay(), + this + } + }, { + key: "getValue", + value: function() { + return this.object[this.property] + } + }, { + key: "updateDisplay", + value: function() { + return this + } + }, { + key: "isModified", + value: function() { + return this.initialValue !== this.getValue() + } + }]), + A + }() + , pm = {}; + Zf.each({ + HTMLEvents: ["change"], + MouseEvents: ["click", "mousemove", "mousedown", "mouseup", "mouseover"], + KeyboardEvents: ["keydown"] + }, (function(A, e) { + Zf.each(A, (function(A) { + pm[A] = e + } + )) + } + )); + var gm = /(\d+(\.\d+)?)px/; + function um(A) { + if ("0" === A || Zf.isUndefined(A)) + return 0; + var e = A.match(gm); + return Zf.isNull(e) ? 0 : parseFloat(e[1]) + } + var fm = { + makeSelectable: function(A, e) { + void 0 !== A && void 0 !== A.style && (A.onselectstart = e ? function() { + return !1 + } + : function() {} + , + A.style.MozUserSelect = e ? "auto" : "none", + A.style.KhtmlUserSelect = e ? "auto" : "none", + A.unselectable = e ? "on" : "off") + }, + makeFullscreen: function(A, e, t) { + var i = t + , o = e; + Zf.isUndefined(o) && (o = !0), + Zf.isUndefined(i) && (i = !0), + A.style.position = "absolute", + o && (A.style.left = 0, + A.style.right = 0), + i && (A.style.top = 0, + A.style.bottom = 0) + }, + fakeEvent: function(A, e, t, i) { + var o = t || {} + , n = pm[e]; + if (!n) + throw new Error("Event type " + e + " not supported."); + var r = document.createEvent(n); + switch (n) { + case "MouseEvents": + r.initMouseEvent(e, o.bubbles || !1, o.cancelable || !0, window, o.clickCount || 1, 0, 0, o.x || o.clientX || 0, o.y || o.clientY || 0, !1, !1, !1, !1, 0, null); + break; + case "KeyboardEvents": + var a = r.initKeyboardEvent || r.initKeyEvent; + Zf.defaults(o, { + cancelable: !0, + ctrlKey: !1, + altKey: !1, + shiftKey: !1, + metaKey: !1, + keyCode: void 0, + charCode: void 0 + }), + a(e, o.bubbles || !1, o.cancelable, window, o.ctrlKey, o.altKey, o.shiftKey, o.metaKey, o.keyCode, o.charCode); + break; + default: + r.initEvent(e, o.bubbles || !1, o.cancelable || !0) + } + Zf.defaults(r, i), + A.dispatchEvent(r) + }, + bind: function(A, e, t, i) { + return A.addEventListener ? A.addEventListener(e, t, i || !1) : A.attachEvent && A.attachEvent("on" + e, t), + fm + }, + unbind: function(A, e, t, i) { + return A.removeEventListener ? A.removeEventListener(e, t, i || !1) : A.detachEvent && A.detachEvent("on" + e, t), + fm + }, + addClass: function(A, e) { + if (void 0 === A.className) + A.className = e; + else if (A.className !== e) { + var t = A.className.split(/ +/); + -1 === t.indexOf(e) && (t.push(e), + A.className = t.join(" ").replace(/^\s+/, "").replace(/\s+$/, "")) + } + return fm + }, + removeClass: function(A, e) { + if (e) + if (A.className === e) + A.removeAttribute("class"); + else { + var t = A.className.split(/ +/) + , i = t.indexOf(e); + -1 !== i && (t.splice(i, 1), + A.className = t.join(" ")) + } + else + A.className = void 0; + return fm + }, + hasClass: function(A, e) { + return new RegExp("(?:^|\\s+)" + e + "(?:\\s+|$)").test(A.className) || !1 + }, + getWidth: function(A) { + var e = getComputedStyle(A); + return um(e["border-left-width"]) + um(e["border-right-width"]) + um(e["padding-left"]) + um(e["padding-right"]) + um(e.width) + }, + getHeight: function(A) { + var e = getComputedStyle(A); + return um(e["border-top-width"]) + um(e["border-bottom-width"]) + um(e["padding-top"]) + um(e["padding-bottom"]) + um(e.height) + }, + getOffset: function(A) { + var e = A + , t = { + left: 0, + top: 0 + }; + if (e.offsetParent) + do { + t.left += e.offsetLeft, + t.top += e.offsetTop, + e = e.offsetParent + } while (e);return t + }, + isActive: function(A) { + return A === document.activeElement && (A.type || A.href) + } + } + , mm = function(A) { + function e(A, t) { + om(this, e); + var i = sm(this, (e.__proto__ || Object.getPrototypeOf(e)).call(this, A, t)) + , o = i; + return i.__prev = i.getValue(), + i.__checkbox = document.createElement("input"), + i.__checkbox.setAttribute("type", "checkbox"), + fm.bind(i.__checkbox, "change", (function() { + o.setValue(!o.__prev) + } + ), !1), + i.domElement.appendChild(i.__checkbox), + i.updateDisplay(), + i + } + return am(e, A), + nm(e, [{ + key: "setValue", + value: function(A) { + var t = rm(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "setValue", this).call(this, A); + return this.__onFinishChange && this.__onFinishChange.call(this, this.getValue()), + this.__prev = this.getValue(), + t + } + }, { + key: "updateDisplay", + value: function() { + return !0 === this.getValue() ? (this.__checkbox.setAttribute("checked", "checked"), + this.__checkbox.checked = !0, + this.__prev = !0) : (this.__checkbox.checked = !1, + this.__prev = !1), + rm(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "updateDisplay", this).call(this) + } + }]), + e + }(dm) + , Cm = function(A) { + function e(A, t, i) { + om(this, e); + var o = sm(this, (e.__proto__ || Object.getPrototypeOf(e)).call(this, A, t)) + , n = i + , r = o; + if (o.__select = document.createElement("select"), + Zf.isArray(n)) { + var a = {}; + Zf.each(n, (function(A) { + a[A] = A + } + )), + n = a + } + return Zf.each(n, (function(A, e) { + var t = document.createElement("option"); + t.innerHTML = e, + t.setAttribute("value", A), + r.__select.appendChild(t) + } + )), + o.updateDisplay(), + fm.bind(o.__select, "change", (function() { + r.setValue(this.options[this.selectedIndex].value) + } + )), + o.domElement.appendChild(o.__select), + o + } + return am(e, A), + nm(e, [{ + key: "setValue", + value: function(A) { + var t = rm(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "setValue", this).call(this, A); + return this.__onFinishChange && this.__onFinishChange.call(this, this.getValue()), + t + } + }, { + key: "updateDisplay", + value: function() { + return fm.isActive(this.__select) ? this : (this.__select.value = this.getValue(), + rm(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "updateDisplay", this).call(this)) + } + }]), + e + }(dm) + , ym = function(A) { + function e(A, t) { + om(this, e); + var i = sm(this, (e.__proto__ || Object.getPrototypeOf(e)).call(this, A, t)) + , o = i; + function n() { + o.setValue(o.__input.value) + } + return i.__input = document.createElement("input"), + i.__input.setAttribute("type", "text"), + fm.bind(i.__input, "keyup", n), + fm.bind(i.__input, "change", n), + fm.bind(i.__input, "blur", (function() { + o.__onFinishChange && o.__onFinishChange.call(o, o.getValue()) + } + )), + fm.bind(i.__input, "keydown", (function(A) { + 13 === A.keyCode && this.blur() + } + )), + i.updateDisplay(), + i.domElement.appendChild(i.__input), + i + } + return am(e, A), + nm(e, [{ + key: "updateDisplay", + value: function() { + return fm.isActive(this.__input) || (this.__input.value = this.getValue()), + rm(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "updateDisplay", this).call(this) + } + }]), + e + }(dm); + function vm(A) { + var e = A.toString(); + return e.indexOf(".") > -1 ? e.length - e.indexOf(".") - 1 : 0 + } + var Im = function(A) { + function e(A, t, i) { + om(this, e); + var o = sm(this, (e.__proto__ || Object.getPrototypeOf(e)).call(this, A, t)) + , n = i || {}; + return o.__min = n.min, + o.__max = n.max, + o.__step = n.step, + o.__impliedStep = Zf.isUndefined(o.__step) ? 0 === o.initialValue ? 1 : Math.pow(10, Math.floor(Math.log(Math.abs(o.initialValue)) / Math.LN10)) / 10 : o.__step, + o.__precision = vm(o.__impliedStep), + o + } + return am(e, A), + nm(e, [{ + key: "setValue", + value: function(A) { + var t = A; + return void 0 !== this.__min && this.__min > t ? t = this.__min : void 0 !== this.__max && t > this.__max && (t = this.__max), + void 0 !== this.__step && t % this.__step != 0 && (t = Math.round(t / this.__step) * this.__step), + rm(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "setValue", this).call(this, t) + } + }, { + key: "min", + value: function(A) { + return this.__min = A, + this + } + }, { + key: "max", + value: function(A) { + return this.__max = A, + this + } + }, { + key: "step", + value: function(A) { + return this.__step = A, + this.__impliedStep = A, + this.__precision = vm(A), + this + } + }]), + e + }(dm); + var Em = function(A) { + function e(A, t, i) { + om(this, e); + var o = sm(this, (e.__proto__ || Object.getPrototypeOf(e)).call(this, A, t, i)); + o.__truncationSuspended = !1; + var n = o + , r = void 0; + function a() { + n.__onFinishChange && n.__onFinishChange.call(n, n.getValue()) + } + function s(A) { + var e = r - A.clientY; + n.setValue(n.getValue() + e * n.__impliedStep), + r = A.clientY + } + function l() { + fm.unbind(window, "mousemove", s), + fm.unbind(window, "mouseup", l), + a() + } + return o.__input = document.createElement("input"), + o.__input.setAttribute("type", "text"), + fm.bind(o.__input, "change", (function() { + var A = parseFloat(n.__input.value); + Zf.isNaN(A) || n.setValue(A) + } + )), + fm.bind(o.__input, "blur", (function() { + a() + } + )), + fm.bind(o.__input, "mousedown", (function(A) { + fm.bind(window, "mousemove", s), + fm.bind(window, "mouseup", l), + r = A.clientY + } + )), + fm.bind(o.__input, "keydown", (function(A) { + 13 === A.keyCode && (n.__truncationSuspended = !0, + this.blur(), + n.__truncationSuspended = !1, + a()) + } + )), + o.updateDisplay(), + o.domElement.appendChild(o.__input), + o + } + return am(e, A), + nm(e, [{ + key: "updateDisplay", + value: function() { + var A, t; + return this.__input.value = this.__truncationSuspended ? this.getValue() : (A = this.getValue(), + t = Math.pow(10, this.__precision), + Math.round(A * t) / t), + rm(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "updateDisplay", this).call(this) + } + }]), + e + }(Im); + function Bm(A, e, t, i, o) { + return i + (A - e) / (t - e) * (o - i) + } + var xm = function(A) { + function e(A, t, i, o, n) { + om(this, e); + var r = sm(this, (e.__proto__ || Object.getPrototypeOf(e)).call(this, A, t, { + min: i, + max: o, + step: n + })) + , a = r; + function s(A) { + A.preventDefault(); + var e = a.__background.getBoundingClientRect(); + return a.setValue(Bm(A.clientX, e.left, e.right, a.__min, a.__max)), + !1 + } + function l() { + fm.unbind(window, "mousemove", s), + fm.unbind(window, "mouseup", l), + a.__onFinishChange && a.__onFinishChange.call(a, a.getValue()) + } + function c(A) { + var e = A.touches[0].clientX + , t = a.__background.getBoundingClientRect(); + a.setValue(Bm(e, t.left, t.right, a.__min, a.__max)) + } + function h() { + fm.unbind(window, "touchmove", c), + fm.unbind(window, "touchend", h), + a.__onFinishChange && a.__onFinishChange.call(a, a.getValue()) + } + return r.__background = document.createElement("div"), + r.__foreground = document.createElement("div"), + fm.bind(r.__background, "mousedown", (function(A) { + document.activeElement.blur(), + fm.bind(window, "mousemove", s), + fm.bind(window, "mouseup", l), + s(A) + } + )), + fm.bind(r.__background, "touchstart", (function(A) { + if (1 !== A.touches.length) + return; + fm.bind(window, "touchmove", c), + fm.bind(window, "touchend", h), + c(A) + } + )), + fm.addClass(r.__background, "slider"), + fm.addClass(r.__foreground, "slider-fg"), + r.updateDisplay(), + r.__background.appendChild(r.__foreground), + r.domElement.appendChild(r.__background), + r + } + return am(e, A), + nm(e, [{ + key: "updateDisplay", + value: function() { + var A = (this.getValue() - this.__min) / (this.__max - this.__min); + return this.__foreground.style.width = 100 * A + "%", + rm(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "updateDisplay", this).call(this) + } + }]), + e + }(Im) + , Sm = function(A) { + function e(A, t, i) { + om(this, e); + var o = sm(this, (e.__proto__ || Object.getPrototypeOf(e)).call(this, A, t)) + , n = o; + return o.__button = document.createElement("div"), + o.__button.innerHTML = void 0 === i ? "Fire" : i, + fm.bind(o.__button, "click", (function(A) { + return A.preventDefault(), + n.fire(), + !1 + } + )), + fm.addClass(o.__button, "button"), + o.domElement.appendChild(o.__button), + o + } + return am(e, A), + nm(e, [{ + key: "fire", + value: function() { + this.__onChange && this.__onChange.call(this), + this.getValue().call(this.object), + this.__onFinishChange && this.__onFinishChange.call(this, this.getValue()) + } + }]), + e + }(dm) + , wm = function(A) { + function e(A, t) { + om(this, e); + var i = sm(this, (e.__proto__ || Object.getPrototypeOf(e)).call(this, A, t)); + i.__color = new lm(i.getValue()), + i.__temp = new lm(0); + var o = i; + i.domElement = document.createElement("div"), + fm.makeSelectable(i.domElement, !1), + i.__selector = document.createElement("div"), + i.__selector.className = "selector", + i.__saturation_field = document.createElement("div"), + i.__saturation_field.className = "saturation-field", + i.__field_knob = document.createElement("div"), + i.__field_knob.className = "field-knob", + i.__field_knob_border = "2px solid ", + i.__hue_knob = document.createElement("div"), + i.__hue_knob.className = "hue-knob", + i.__hue_field = document.createElement("div"), + i.__hue_field.className = "hue-field", + i.__input = document.createElement("input"), + i.__input.type = "text", + i.__input_textShadow = "0 1px 1px ", + fm.bind(i.__input, "keydown", (function(A) { + 13 === A.keyCode && h.call(this) + } + )), + fm.bind(i.__input, "blur", h), + fm.bind(i.__selector, "mousedown", (function() { + fm.addClass(this, "drag").bind(window, "mouseup", (function() { + fm.removeClass(o.__selector, "drag") + } + )) + } + )), + fm.bind(i.__selector, "touchstart", (function() { + fm.addClass(this, "drag").bind(window, "touchend", (function() { + fm.removeClass(o.__selector, "drag") + } + )) + } + )); + var n, r = document.createElement("div"); + function a(A) { + p(A), + fm.bind(window, "mousemove", p), + fm.bind(window, "touchmove", p), + fm.bind(window, "mouseup", l), + fm.bind(window, "touchend", l) + } + function s(A) { + g(A), + fm.bind(window, "mousemove", g), + fm.bind(window, "touchmove", g), + fm.bind(window, "mouseup", c), + fm.bind(window, "touchend", c) + } + function l() { + fm.unbind(window, "mousemove", p), + fm.unbind(window, "touchmove", p), + fm.unbind(window, "mouseup", l), + fm.unbind(window, "touchend", l), + d() + } + function c() { + fm.unbind(window, "mousemove", g), + fm.unbind(window, "touchmove", g), + fm.unbind(window, "mouseup", c), + fm.unbind(window, "touchend", c), + d() + } + function h() { + var A = Am(this.value); + !1 !== A ? (o.__color.__state = A, + o.setValue(o.__color.toOriginal())) : this.value = o.__color.toString() + } + function d() { + o.__onFinishChange && o.__onFinishChange.call(o, o.__color.toOriginal()) + } + function p(A) { + -1 === A.type.indexOf("touch") && A.preventDefault(); + var e = o.__saturation_field.getBoundingClientRect() + , t = A.touches && A.touches[0] || A + , i = (t.clientX - e.left) / (e.right - e.left) + , n = 1 - (t.clientY - e.top) / (e.bottom - e.top); + return n > 1 ? n = 1 : 0 > n && (n = 0), + i > 1 ? i = 1 : 0 > i && (i = 0), + o.__color.v = n, + o.__color.s = i, + o.setValue(o.__color.toOriginal()), + !1 + } + function g(A) { + -1 === A.type.indexOf("touch") && A.preventDefault(); + var e = o.__hue_field.getBoundingClientRect() + , t = 1 - ((A.touches && A.touches[0] || A).clientY - e.top) / (e.bottom - e.top); + return t > 1 ? t = 1 : 0 > t && (t = 0), + o.__color.h = 360 * t, + o.setValue(o.__color.toOriginal()), + !1 + } + return Zf.extend(i.__selector.style, { + width: "122px", + height: "102px", + padding: "3px", + backgroundColor: "#222", + boxShadow: "0px 1px 3px rgba(0,0,0,0.3)" + }), + Zf.extend(i.__field_knob.style, { + position: "absolute", + width: "12px", + height: "12px", + border: i.__field_knob_border + (.5 > i.__color.v ? "#fff" : "#000"), + boxShadow: "0px 1px 3px rgba(0,0,0,0.5)", + borderRadius: "12px", + zIndex: 1 + }), + Zf.extend(i.__hue_knob.style, { + position: "absolute", + width: "15px", + height: "2px", + borderRight: "4px solid #fff", + zIndex: 1 + }), + Zf.extend(i.__saturation_field.style, { + width: "100px", + height: "100px", + border: "1px solid #555", + marginRight: "3px", + display: "inline-block", + cursor: "pointer" + }), + Zf.extend(r.style, { + width: "100%", + height: "100%", + background: "none" + }), + bm(r, "top", "rgba(0,0,0,0)", "#000"), + Zf.extend(i.__hue_field.style, { + width: "15px", + height: "100px", + border: "1px solid #555", + cursor: "ns-resize", + position: "absolute", + top: "3px", + right: "3px" + }), + (n = i.__hue_field).style.background = "", + n.style.cssText += "background: -moz-linear-gradient(top, #ff0000 0%, #ff00ff 17%, #0000ff 34%, #00ffff 50%, #00ff00 67%, #ffff00 84%, #ff0000 100%);", + n.style.cssText += "background: -webkit-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);", + n.style.cssText += "background: -o-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);", + n.style.cssText += "background: -ms-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);", + n.style.cssText += "background: linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);", + Zf.extend(i.__input.style, { + outline: "none", + textAlign: "center", + color: "#fff", + border: 0, + fontWeight: "bold", + textShadow: i.__input_textShadow + "rgba(0,0,0,0.7)" + }), + fm.bind(i.__saturation_field, "mousedown", a), + fm.bind(i.__saturation_field, "touchstart", a), + fm.bind(i.__field_knob, "mousedown", a), + fm.bind(i.__field_knob, "touchstart", a), + fm.bind(i.__hue_field, "mousedown", s), + fm.bind(i.__hue_field, "touchstart", s), + i.__saturation_field.appendChild(r), + i.__selector.appendChild(i.__field_knob), + i.__selector.appendChild(i.__saturation_field), + i.__selector.appendChild(i.__hue_field), + i.__hue_field.appendChild(i.__hue_knob), + i.domElement.appendChild(i.__input), + i.domElement.appendChild(i.__selector), + i.updateDisplay(), + i + } + return am(e, A), + nm(e, [{ + key: "updateDisplay", + value: function() { + var A = Am(this.getValue()); + if (!1 !== A) { + var e = !1; + Zf.each(lm.COMPONENTS, (function(t) { + if (!Zf.isUndefined(A[t]) && !Zf.isUndefined(this.__color.__state[t]) && A[t] !== this.__color.__state[t]) + return e = !0, + {} + } + ), this), + e && Zf.extend(this.__color.__state, A) + } + Zf.extend(this.__temp.__state, this.__color.__state), + this.__temp.a = 1; + var t = .5 > this.__color.v || this.__color.s > .5 ? 255 : 0 + , i = 255 - t; + Zf.extend(this.__field_knob.style, { + marginLeft: 100 * this.__color.s - 7 + "px", + marginTop: 100 * (1 - this.__color.v) - 7 + "px", + backgroundColor: this.__temp.toHexString(), + border: this.__field_knob_border + "rgb(" + t + "," + t + "," + t + ")" + }), + this.__hue_knob.style.marginTop = 100 * (1 - this.__color.h / 360) + "px", + this.__temp.s = 1, + this.__temp.v = 1, + bm(this.__saturation_field, "left", "#fff", this.__temp.toHexString()), + this.__input.value = this.__color.toString(), + Zf.extend(this.__input.style, { + backgroundColor: this.__color.toHexString(), + color: "rgb(" + t + "," + t + "," + t + ")", + textShadow: this.__input_textShadow + "rgba(" + i + "," + i + "," + i + ",.7)" + }) + } + }]), + e + }(dm) + , Mm = ["-moz-", "-o-", "-webkit-", "-ms-", ""]; + function bm(A, e, t, i) { + A.style.background = "", + Zf.each(Mm, (function(o) { + A.style.cssText += "background: " + o + "linear-gradient(" + e + ", " + t + " 0%, " + i + " 100%); " + } + )) + } + var Um = function(A, e) { + var t = e || document + , i = document.createElement("style"); + i.type = "text/css", + i.innerHTML = A; + var o = t.getElementsByTagName("head")[0]; + try { + o.appendChild(i) + } catch (A) {} + } + , Fm = '
\n\n Here\'s the new load parameter for your GUI\'s constructor:\n\n \n\n
\n\n Automatically save\n values to localStorage on exit.\n\n
The values saved to localStorage will\n override those passed to dat.GUI\'s constructor. This makes it\n easier to work incrementally, but localStorage is fragile,\n and your friends may not see the same values you do.\n\n
\n\n
\n\n
' + , Km = function(A, e) { + var t = A[e]; + return Zf.isArray(arguments[2]) || Zf.isObject(arguments[2]) ? new Cm(A,e,arguments[2]) : Zf.isNumber(t) ? Zf.isNumber(arguments[2]) && Zf.isNumber(arguments[3]) ? Zf.isNumber(arguments[4]) ? new xm(A,e,arguments[2],arguments[3],arguments[4]) : new xm(A,e,arguments[2],arguments[3]) : Zf.isNumber(arguments[4]) ? new Em(A,e,{ + min: arguments[2], + max: arguments[3], + step: arguments[4] + }) : new Em(A,e,{ + min: arguments[2], + max: arguments[3] + }) : Zf.isString(t) ? new ym(A,e) : Zf.isFunction(t) ? new Sm(A,e,"") : Zf.isBoolean(t) ? new mm(A,e) : null + }; + var Qm = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function(A) { + setTimeout(A, 1e3 / 60) + } + , Rm = function() { + function A() { + om(this, A), + this.backgroundElement = document.createElement("div"), + Zf.extend(this.backgroundElement.style, { + backgroundColor: "rgba(0,0,0,0.8)", + top: 0, + left: 0, + display: "none", + zIndex: "1000", + opacity: 0, + WebkitTransition: "opacity 0.2s linear", + transition: "opacity 0.2s linear" + }), + fm.makeFullscreen(this.backgroundElement), + this.backgroundElement.style.position = "fixed", + this.domElement = document.createElement("div"), + Zf.extend(this.domElement.style, { + position: "fixed", + display: "none", + zIndex: "1001", + opacity: 0, + WebkitTransition: "-webkit-transform 0.2s ease-out, opacity 0.2s linear", + transition: "transform 0.2s ease-out, opacity 0.2s linear" + }), + document.body.appendChild(this.backgroundElement), + document.body.appendChild(this.domElement); + var e = this; + fm.bind(this.backgroundElement, "click", (function() { + e.hide() + } + )) + } + return nm(A, [{ + key: "show", + value: function() { + var A = this; + this.backgroundElement.style.display = "block", + this.domElement.style.display = "block", + this.domElement.style.opacity = 0, + this.domElement.style.webkitTransform = "scale(1.1)", + this.layout(), + Zf.defer((function() { + A.backgroundElement.style.opacity = 1, + A.domElement.style.opacity = 1, + A.domElement.style.webkitTransform = "scale(1)" + } + )) + } + }, { + key: "hide", + value: function() { + var A = this + , e = function e() { + A.domElement.style.display = "none", + A.backgroundElement.style.display = "none", + fm.unbind(A.domElement, "webkitTransitionEnd", e), + fm.unbind(A.domElement, "transitionend", e), + fm.unbind(A.domElement, "oTransitionEnd", e) + }; + fm.bind(this.domElement, "webkitTransitionEnd", e), + fm.bind(this.domElement, "transitionend", e), + fm.bind(this.domElement, "oTransitionEnd", e), + this.backgroundElement.style.opacity = 0, + this.domElement.style.opacity = 0, + this.domElement.style.webkitTransform = "scale(1.1)" + } + }, { + key: "layout", + value: function() { + this.domElement.style.left = window.innerWidth / 2 - fm.getWidth(this.domElement) / 2 + "px", + this.domElement.style.top = window.innerHeight / 2 - fm.getHeight(this.domElement) / 2 + "px" + } + }]), + A + }(); + Um(function(A) { + if (A && "undefined" != typeof window) { + var e = document.createElement("style"); + return e.setAttribute("type", "text/css"), + e.innerHTML = A, + document.head.appendChild(e), + A + } + }(".dg ul{list-style:none;margin:0;padding:0;width:100%;clear:both}.dg.ac{position:fixed;top:0;left:0;right:0;height:0;z-index:0}.dg:not(.ac) .main{overflow:hidden}.dg.main{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear}.dg.main.taller-than-window{overflow-y:auto}.dg.main.taller-than-window .close-button{opacity:1;margin-top:-1px;border-top:1px solid #2c2c2c}.dg.main ul.closed .close-button{opacity:1 !important}.dg.main:hover .close-button,.dg.main .close-button.drag{opacity:1}.dg.main .close-button{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear;border:0;line-height:19px;height:20px;cursor:pointer;text-align:center;background-color:#000}.dg.main .close-button.close-top{position:relative}.dg.main .close-button.close-bottom{position:absolute}.dg.main .close-button:hover{background-color:#111}.dg.a{float:right;margin-right:15px;overflow-y:visible}.dg.a.has-save>ul.close-top{margin-top:0}.dg.a.has-save>ul.close-bottom{margin-top:27px}.dg.a.has-save>ul.closed{margin-top:0}.dg.a .save-row{top:0;z-index:1002}.dg.a .save-row.close-top{position:relative}.dg.a .save-row.close-bottom{position:fixed}.dg li{-webkit-transition:height .1s ease-out;-o-transition:height .1s ease-out;-moz-transition:height .1s ease-out;transition:height .1s ease-out;-webkit-transition:overflow .1s linear;-o-transition:overflow .1s linear;-moz-transition:overflow .1s linear;transition:overflow .1s linear}.dg li:not(.folder){cursor:auto;height:27px;line-height:27px;padding:0 4px 0 5px}.dg li.folder{padding:0;border-left:4px solid rgba(0,0,0,0)}.dg li.title{cursor:pointer;margin-left:-4px}.dg .closed li:not(.title),.dg .closed ul li,.dg .closed ul li>*{height:0;overflow:hidden;border:0}.dg .cr{clear:both;padding-left:3px;height:27px;overflow:hidden}.dg .property-name{cursor:default;float:left;clear:left;width:40%;overflow:hidden;text-overflow:ellipsis}.dg .c{float:left;width:60%;position:relative}.dg .c input[type=text]{border:0;margin-top:4px;padding:3px;width:100%;float:right}.dg .has-slider input[type=text]{width:30%;margin-left:0}.dg .slider{float:left;width:66%;margin-left:-5px;margin-right:0;height:19px;margin-top:4px}.dg .slider-fg{height:100%}.dg .c input[type=checkbox]{margin-top:7px}.dg .c select{margin-top:5px}.dg .cr.function,.dg .cr.function .property-name,.dg .cr.function *,.dg .cr.boolean,.dg .cr.boolean *{cursor:pointer}.dg .cr.color{overflow:visible}.dg .selector{display:none;position:absolute;margin-left:-9px;margin-top:23px;z-index:10}.dg .c:hover .selector,.dg .selector.drag{display:block}.dg li.save-row{padding:0}.dg li.save-row .button{display:inline-block;padding:0px 6px}.dg.dialogue{background-color:#222;width:460px;padding:15px;font-size:13px;line-height:15px}#dg-new-constructor{padding:10px;color:#222;font-family:Monaco, monospace;font-size:10px;border:0;resize:none;box-shadow:inset 1px 1px 1px #888;word-wrap:break-word;margin:12px 0;display:block;width:440px;overflow-y:scroll;height:100px;position:relative}#dg-local-explain{display:none;font-size:11px;line-height:17px;border-radius:3px;background-color:#333;padding:8px;margin-top:10px}#dg-local-explain code{font-size:10px}#dat-gui-save-locally{display:none}.dg{color:#eee;font:11px 'Lucida Grande', sans-serif;text-shadow:0 -1px 0 #111}.dg.main::-webkit-scrollbar{width:5px;background:#1a1a1a}.dg.main::-webkit-scrollbar-corner{height:0;display:none}.dg.main::-webkit-scrollbar-thumb{border-radius:5px;background:#676767}.dg li:not(.folder){background:#1a1a1a;border-bottom:1px solid #2c2c2c}.dg li.save-row{line-height:25px;background:#dad5cb;border:0}.dg li.save-row select{margin-left:5px;width:108px}.dg li.save-row .button{margin-left:5px;margin-top:1px;border-radius:2px;font-size:9px;line-height:7px;padding:4px 4px 5px 4px;background:#c5bdad;color:#fff;text-shadow:0 1px 0 #b0a58f;box-shadow:0 -1px 0 #b0a58f;cursor:pointer}.dg li.save-row .button.gears{background:#c5bdad url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAANCAYAAAB/9ZQ7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQJJREFUeNpiYKAU/P//PwGIC/ApCABiBSAW+I8AClAcgKxQ4T9hoMAEUrxx2QSGN6+egDX+/vWT4e7N82AMYoPAx/evwWoYoSYbACX2s7KxCxzcsezDh3evFoDEBYTEEqycggWAzA9AuUSQQgeYPa9fPv6/YWm/Acx5IPb7ty/fw+QZblw67vDs8R0YHyQhgObx+yAJkBqmG5dPPDh1aPOGR/eugW0G4vlIoTIfyFcA+QekhhHJhPdQxbiAIguMBTQZrPD7108M6roWYDFQiIAAv6Aow/1bFwXgis+f2LUAynwoIaNcz8XNx3Dl7MEJUDGQpx9gtQ8YCueB+D26OECAAQDadt7e46D42QAAAABJRU5ErkJggg==) 2px 1px no-repeat;height:7px;width:8px}.dg li.save-row .button:hover{background-color:#bab19e;box-shadow:0 -1px 0 #b0a58f}.dg li.folder{border-bottom:0}.dg li.title{padding-left:16px;background:#000 url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat;cursor:pointer;border-bottom:1px solid rgba(255,255,255,0.2)}.dg .closed li.title{background-image:url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==)}.dg .cr.boolean{border-left:3px solid #806787}.dg .cr.color{border-left:3px solid}.dg .cr.function{border-left:3px solid #e61d5f}.dg .cr.number{border-left:3px solid #2FA1D6}.dg .cr.number input[type=text]{color:#2FA1D6}.dg .cr.string{border-left:3px solid #1ed36f}.dg .cr.string input[type=text]{color:#1ed36f}.dg .cr.function:hover,.dg .cr.boolean:hover{background:#111}.dg .c input[type=text]{background:#303030;outline:none}.dg .c input[type=text]:hover{background:#3c3c3c}.dg .c input[type=text]:focus{background:#494949;color:#fff}.dg .c .slider{background:#303030;cursor:ew-resize}.dg .c .slider-fg{background:#2FA1D6;max-width:100%}.dg .c .slider:hover{background:#3c3c3c}.dg .c .slider:hover .slider-fg{background:#44abda}\n")); + var Tm = function() { + try { + return !!window.localStorage + } catch (A) { + return !1 + } + }() + , km = void 0 + , Dm = !0 + , Lm = void 0 + , Nm = !1 + , Om = [] + , Vm = function A(e) { + var t = this + , i = e || {}; + this.domElement = document.createElement("div"), + this.__ul = document.createElement("ul"), + this.domElement.appendChild(this.__ul), + fm.addClass(this.domElement, "dg"), + this.__folders = {}, + this.__controllers = [], + this.__rememberedObjects = [], + this.__rememberedObjectIndecesToControllers = [], + this.__listening = [], + i = Zf.defaults(i, { + closeOnTop: !1, + autoPlace: !0, + width: A.DEFAULT_WIDTH + }), + i = Zf.defaults(i, { + resizable: i.autoPlace, + hideable: i.autoPlace + }), + Zf.isUndefined(i.load) ? i.load = { + preset: "Default" + } : i.preset && (i.load.preset = i.preset), + Zf.isUndefined(i.parent) && i.hideable && Om.push(this), + i.resizable = Zf.isUndefined(i.parent) && i.resizable, + i.autoPlace && Zf.isUndefined(i.scrollable) && (i.scrollable = !0); + var o = Tm && "true" === localStorage.getItem(Ym(this, "isLocal")) + , n = void 0 + , r = void 0; + if (Object.defineProperties(this, { + parent: { + get: function() { + return i.parent + } + }, + scrollable: { + get: function() { + return i.scrollable + } + }, + autoPlace: { + get: function() { + return i.autoPlace + } + }, + closeOnTop: { + get: function() { + return i.closeOnTop + } + }, + preset: { + get: function() { + return t.parent ? t.getRoot().preset : i.load.preset + }, + set: function(A) { + t.parent ? t.getRoot().preset = A : i.load.preset = A, + function(A) { + for (var e = 0; A.__preset_select.length > e; e++) + A.__preset_select[e].value === A.preset && (A.__preset_select.selectedIndex = e) + }(this), + t.revert() + } + }, + width: { + get: function() { + return i.width + }, + set: function(A) { + i.width = A, + Xm(t, A) + } + }, + name: { + get: function() { + return i.name + }, + set: function(A) { + i.name = A, + r && (r.innerHTML = i.name) + } + }, + closed: { + get: function() { + return i.closed + }, + set: function(e) { + i.closed = e, + i.closed ? fm.addClass(t.__ul, A.CLASS_CLOSED) : fm.removeClass(t.__ul, A.CLASS_CLOSED), + this.onResize(), + t.__closeButton && (t.__closeButton.innerHTML = e ? A.TEXT_OPEN : A.TEXT_CLOSED) + } + }, + load: { + get: function() { + return i.load + } + }, + useLocalStorage: { + get: function() { + return o + }, + set: function(A) { + Tm && (o = A, + A ? fm.bind(window, "unload", n) : fm.unbind(window, "unload", n), + localStorage.setItem(Ym(t, "isLocal"), A)) + } + } + }), + Zf.isUndefined(i.parent)) { + if (this.closed = i.closed || !1, + fm.addClass(this.domElement, A.CLASS_MAIN), + fm.makeSelectable(this.domElement, !1), + Tm && o) { + t.useLocalStorage = !0; + var a = localStorage.getItem(Ym(this, "gui")); + a && (i.load = JSON.parse(a)) + } + this.__closeButton = document.createElement("div"), + this.__closeButton.innerHTML = A.TEXT_CLOSED, + fm.addClass(this.__closeButton, A.CLASS_CLOSE_BUTTON), + i.closeOnTop ? (fm.addClass(this.__closeButton, A.CLASS_CLOSE_TOP), + this.domElement.insertBefore(this.__closeButton, this.domElement.childNodes[0])) : (fm.addClass(this.__closeButton, A.CLASS_CLOSE_BOTTOM), + this.domElement.appendChild(this.__closeButton)), + fm.bind(this.__closeButton, "click", (function() { + t.closed = !t.closed + } + )) + } else { + void 0 === i.closed && (i.closed = !0); + var s = document.createTextNode(i.name); + fm.addClass(s, "controller-name"), + r = Gm(t, s); + fm.addClass(this.__ul, A.CLASS_CLOSED), + fm.addClass(r, "title"), + fm.bind(r, "click", (function(A) { + return A.preventDefault(), + t.closed = !t.closed, + !1 + } + )), + i.closed || (this.closed = !1) + } + i.autoPlace && (Zf.isUndefined(i.parent) && (Dm && (Lm = document.createElement("div"), + fm.addClass(Lm, "dg"), + fm.addClass(Lm, A.CLASS_AUTO_PLACE_CONTAINER), + document.body.appendChild(Lm), + Dm = !1), + Lm.appendChild(this.domElement), + fm.addClass(this.domElement, A.CLASS_AUTO_PLACE)), + this.parent || Xm(t, i.width)), + this.__resizeHandler = function() { + t.onResizeDebounced() + } + , + fm.bind(window, "resize", this.__resizeHandler), + fm.bind(this.__ul, "webkitTransitionEnd", this.__resizeHandler), + fm.bind(this.__ul, "transitionend", this.__resizeHandler), + fm.bind(this.__ul, "oTransitionEnd", this.__resizeHandler), + this.onResize(), + i.resizable && Zm(this), + this.saveToLocalStorageIfPossible = n = function() { + Tm && "true" === localStorage.getItem(Ym(t, "isLocal")) && localStorage.setItem(Ym(t, "gui"), JSON.stringify(t.getSaveObject())) + } + , + i.parent || function() { + var A = t.getRoot(); + A.width += 1, + Zf.defer((function() { + A.width -= 1 + } + )) + }() + }; + function Gm(A, e, t) { + var i = document.createElement("li"); + return e && i.appendChild(e), + t ? A.__ul.insertBefore(i, t) : A.__ul.appendChild(i), + A.onResize(), + i + } + function Pm(A) { + fm.unbind(window, "resize", A.__resizeHandler), + A.saveToLocalStorageIfPossible && fm.unbind(window, "unload", A.saveToLocalStorageIfPossible) + } + function qm(A, e) { + var t = A.__preset_select[A.__preset_select.selectedIndex]; + t.innerHTML = e ? t.value + "*" : t.value + } + function jm(A, e) { + var t = A.getRoot() + , i = t.__rememberedObjects.indexOf(e.object); + if (-1 !== i) { + var o = t.__rememberedObjectIndecesToControllers[i]; + if (void 0 === o && (t.__rememberedObjectIndecesToControllers[i] = o = {}), + o[e.property] = e, + t.load && t.load.remembered) { + var n = t.load.remembered + , r = void 0; + if (n[A.preset]) + r = n[A.preset]; + else { + if (!n.Default) + return; + r = n.Default + } + if (r[i] && void 0 !== r[i][e.property]) { + var a = r[i][e.property]; + e.initialValue = a, + e.setValue(a) + } + } + } + } + function Hm(A, e, t, i) { + if (void 0 === e[t]) + throw new Error('Object "' + e + '" has no property "' + t + '"'); + var o = void 0; + if (i.color) + o = new wm(e,t); + else { + var n = [e, t].concat(i.factoryArgs); + o = Km.apply(A, n) + } + i.before instanceof dm && (i.before = i.before.__li), + jm(A, o), + fm.addClass(o.domElement, "c"); + var r = document.createElement("span"); + fm.addClass(r, "property-name"), + r.innerHTML = o.property; + var a = document.createElement("div"); + a.appendChild(r), + a.appendChild(o.domElement); + var s = Gm(A, a, i.before); + return fm.addClass(s, Vm.CLASS_CONTROLLER_ROW), + fm.addClass(s, o instanceof wm ? "color" : im(o.getValue())), + function(A, e, t) { + if (t.__li = e, + t.__gui = A, + Zf.extend(t, { + options: function(e) { + if (arguments.length > 1) { + var i = t.__li.nextElementSibling; + return t.remove(), + Hm(A, t.object, t.property, { + before: i, + factoryArgs: [Zf.toArray(arguments)] + }) + } + if (Zf.isArray(e) || Zf.isObject(e)) { + var o = t.__li.nextElementSibling; + return t.remove(), + Hm(A, t.object, t.property, { + before: o, + factoryArgs: [e] + }) + } + }, + name: function(A) { + return t.__li.firstElementChild.firstElementChild.innerHTML = A, + t + }, + listen: function() { + return t.__gui.listen(t), + t + }, + remove: function() { + return t.__gui.remove(t), + t + } + }), + t instanceof xm) { + var i = new Em(t.object,t.property,{ + min: t.__min, + max: t.__max, + step: t.__step + }); + Zf.each(["updateDisplay", "onChange", "onFinishChange", "step", "min", "max"], (function(A) { + var e = t[A] + , o = i[A]; + t[A] = i[A] = function() { + var A = Array.prototype.slice.call(arguments); + return o.apply(i, A), + e.apply(t, A) + } + } + )), + fm.addClass(e, "has-slider"), + t.domElement.insertBefore(i.domElement, t.domElement.firstElementChild) + } else if (t instanceof Em) { + var o = function(e) { + if (Zf.isNumber(t.__min) && Zf.isNumber(t.__max)) { + var i = t.__li.firstElementChild.firstElementChild.innerHTML + , o = t.__gui.__listening.indexOf(t) > -1; + t.remove(); + var n = Hm(A, t.object, t.property, { + before: t.__li.nextElementSibling, + factoryArgs: [t.__min, t.__max, t.__step] + }); + return n.name(i), + o && n.listen(), + n + } + return e + }; + t.min = Zf.compose(o, t.min), + t.max = Zf.compose(o, t.max) + } else + t instanceof mm ? (fm.bind(e, "click", (function() { + fm.fakeEvent(t.__checkbox, "click") + } + )), + fm.bind(t.__checkbox, "click", (function(A) { + A.stopPropagation() + } + ))) : t instanceof Sm ? (fm.bind(e, "click", (function() { + fm.fakeEvent(t.__button, "click") + } + )), + fm.bind(e, "mouseover", (function() { + fm.addClass(t.__button, "hover") + } + )), + fm.bind(e, "mouseout", (function() { + fm.removeClass(t.__button, "hover") + } + ))) : t instanceof wm && (fm.addClass(e, "color"), + t.updateDisplay = Zf.compose((function(A) { + return e.style.borderLeftColor = t.__color.toString(), + A + } + ), t.updateDisplay), + t.updateDisplay()); + t.setValue = Zf.compose((function(e) { + return A.getRoot().__preset_select && t.isModified() && qm(A.getRoot(), !0), + e + } + ), t.setValue) + }(A, s, o), + A.__controllers.push(o), + o + } + function Ym(A, e) { + return document.location.href + "." + e + } + function Wm(A, e, t) { + var i = document.createElement("option"); + i.innerHTML = e, + i.value = e, + A.__preset_select.appendChild(i), + t && (A.__preset_select.selectedIndex = A.__preset_select.length - 1) + } + function Jm(A, e) { + e.style.display = A.useLocalStorage ? "block" : "none" + } + function zm(A) { + var e = A.__save_row = document.createElement("li"); + fm.addClass(A.domElement, "has-save"), + A.__ul.insertBefore(e, A.__ul.firstChild), + fm.addClass(e, "save-row"); + var t = document.createElement("span"); + t.innerHTML = " ", + fm.addClass(t, "button gears"); + var i = document.createElement("span"); + i.innerHTML = "Save", + fm.addClass(i, "button"), + fm.addClass(i, "save"); + var o = document.createElement("span"); + o.innerHTML = "New", + fm.addClass(o, "button"), + fm.addClass(o, "save-as"); + var n = document.createElement("span"); + n.innerHTML = "Revert", + fm.addClass(n, "button"), + fm.addClass(n, "revert"); + var r = A.__preset_select = document.createElement("select"); + if (A.load && A.load.remembered ? Zf.each(A.load.remembered, (function(e, t) { + Wm(A, t, t === A.preset) + } + )) : Wm(A, "Default", !1), + fm.bind(r, "change", (function() { + for (var e = 0; A.__preset_select.length > e; e++) + A.__preset_select[e].innerHTML = A.__preset_select[e].value; + A.preset = this.value + } + )), + e.appendChild(r), + e.appendChild(t), + e.appendChild(i), + e.appendChild(o), + e.appendChild(n), + Tm) { + var a = document.getElementById("dg-local-explain") + , s = document.getElementById("dg-local-storage"); + document.getElementById("dg-save-locally").style.display = "block", + "true" === localStorage.getItem(Ym(0, "isLocal")) && s.setAttribute("checked", "checked"), + Jm(A, a), + fm.bind(s, "change", (function() { + A.useLocalStorage = !A.useLocalStorage, + Jm(A, a) + } + )) + } + var l = document.getElementById("dg-new-constructor"); + fm.bind(l, "keydown", (function(A) { + !A.metaKey || 67 !== A.which && 67 !== A.keyCode || km.hide() + } + )), + fm.bind(t, "click", (function() { + l.innerHTML = JSON.stringify(A.getSaveObject(), void 0, 2), + km.show(), + l.focus(), + l.select() + } + )), + fm.bind(i, "click", (function() { + A.save() + } + )), + fm.bind(o, "click", (function() { + var e = prompt("Enter a new preset name."); + e && A.saveAs(e) + } + )), + fm.bind(n, "click", (function() { + A.revert() + } + )) + } + function Zm(A) { + var e = void 0; + function t(t) { + return t.preventDefault(), + A.width += e - t.clientX, + A.onResize(), + e = t.clientX, + !1 + } + function i() { + fm.removeClass(A.__closeButton, Vm.CLASS_DRAG), + fm.unbind(window, "mousemove", t), + fm.unbind(window, "mouseup", i) + } + function o(o) { + return o.preventDefault(), + e = o.clientX, + fm.addClass(A.__closeButton, Vm.CLASS_DRAG), + fm.bind(window, "mousemove", t), + fm.bind(window, "mouseup", i), + !1 + } + A.__resize_handle = document.createElement("div"), + Zf.extend(A.__resize_handle.style, { + width: "6px", + marginLeft: "-3px", + height: "200px", + cursor: "ew-resize", + position: "absolute" + }), + fm.bind(A.__resize_handle, "mousedown", o), + fm.bind(A.__closeButton, "mousedown", o), + A.domElement.insertBefore(A.__resize_handle, A.domElement.firstElementChild) + } + function Xm(A, e) { + A.domElement.style.width = e + "px", + A.__save_row && A.autoPlace && (A.__save_row.style.width = e + "px"), + A.__closeButton && (A.__closeButton.style.width = e + "px") + } + function _m(A, e) { + var t = {}; + return Zf.each(A.__rememberedObjects, (function(i, o) { + var n = {}; + Zf.each(A.__rememberedObjectIndecesToControllers[o], (function(A, t) { + n[t] = e ? A.initialValue : A.getValue() + } + )), + t[o] = n + } + )), + t + } + Vm.toggleHide = function() { + Nm = !Nm, + Zf.each(Om, (function(A) { + A.domElement.style.display = Nm ? "none" : "" + } + )) + } + , + Vm.CLASS_AUTO_PLACE = "a", + Vm.CLASS_AUTO_PLACE_CONTAINER = "ac", + Vm.CLASS_MAIN = "main", + Vm.CLASS_CONTROLLER_ROW = "cr", + Vm.CLASS_TOO_TALL = "taller-than-window", + Vm.CLASS_CLOSED = "closed", + Vm.CLASS_CLOSE_BUTTON = "close-button", + Vm.CLASS_CLOSE_TOP = "close-top", + Vm.CLASS_CLOSE_BOTTOM = "close-bottom", + Vm.CLASS_DRAG = "drag", + Vm.DEFAULT_WIDTH = 245, + Vm.TEXT_CLOSED = "关闭控制器", + Vm.TEXT_OPEN = "打开控制器", + Vm._keydownHandler = function(A) { + "text" === document.activeElement.type || 72 !== A.which && 72 !== A.keyCode || Vm.toggleHide() + } + , + fm.bind(window, "keydown", Vm._keydownHandler, !1), + Zf.extend(Vm.prototype, { + add: function(A, e) { + return Hm(this, A, e, { + factoryArgs: Array.prototype.slice.call(arguments, 2) + }) + }, + addColor: function(A, e) { + return Hm(this, A, e, { + color: !0 + }) + }, + remove: function(A) { + this.__ul.removeChild(A.__li), + this.__controllers.splice(this.__controllers.indexOf(A), 1); + var e = this; + Zf.defer((function() { + e.onResize() + } + )) + }, + destroy: function() { + if (this.parent) + throw new Error("Only the root GUI should be removed with .destroy(). For subfolders, use gui.removeFolder(folder) instead."); + this.autoPlace && Lm.removeChild(this.domElement); + var A = this; + Zf.each(this.__folders, (function(e) { + A.removeFolder(e) + } + )), + fm.unbind(window, "keydown", Vm._keydownHandler, !1), + Pm(this) + }, + addFolder: function(A) { + if (void 0 !== this.__folders[A]) + throw new Error('You already have a folder in this GUI by the name "' + A + '"'); + var e = { + name: A, + parent: this + }; + e.autoPlace = this.autoPlace, + this.load && this.load.folders && this.load.folders[A] && (e.closed = this.load.folders[A].closed, + e.load = this.load.folders[A]); + var t = new Vm(e); + this.__folders[A] = t; + var i = Gm(this, t.domElement); + return fm.addClass(i, "folder"), + t + }, + removeFolder: function(A) { + this.__ul.removeChild(A.domElement.parentElement), + delete this.__folders[A.name], + this.load && this.load.folders && this.load.folders[A.name] && delete this.load.folders[A.name], + Pm(A); + var e = this; + Zf.each(A.__folders, (function(e) { + A.removeFolder(e) + } + )), + Zf.defer((function() { + e.onResize() + } + )) + }, + open: function() { + this.closed = !1 + }, + close: function() { + this.closed = !0 + }, + hide: function() { + this.domElement.style.display = "none" + }, + show: function() { + this.domElement.style.display = "" + }, + onResize: function() { + var A = this.getRoot(); + if (A.scrollable) { + var e = fm.getOffset(A.__ul).top + , t = 0; + Zf.each(A.__ul.childNodes, (function(e) { + A.autoPlace && e === A.__save_row || (t += fm.getHeight(e)) + } + )), + window.innerHeight - e - 20 < t ? (fm.addClass(A.domElement, Vm.CLASS_TOO_TALL), + A.__ul.style.height = window.innerHeight - e - 20 + "px") : (fm.removeClass(A.domElement, Vm.CLASS_TOO_TALL), + A.__ul.style.height = "auto") + } + A.__resize_handle && Zf.defer((function() { + A.__resize_handle.style.height = A.__ul.offsetHeight + "px" + } + )), + A.__closeButton && (A.__closeButton.style.width = A.width + "px") + }, + onResizeDebounced: Zf.debounce((function() { + this.onResize() + } + ), 50), + remember: function() { + if (Zf.isUndefined(km) && ((km = new Rm).domElement.innerHTML = Fm), + this.parent) + throw new Error("You can only call remember on a top level GUI."); + var A = this; + Zf.each(Array.prototype.slice.call(arguments), (function(e) { + 0 === A.__rememberedObjects.length && zm(A), + -1 === A.__rememberedObjects.indexOf(e) && A.__rememberedObjects.push(e) + } + )), + this.autoPlace && Xm(this, this.width) + }, + getRoot: function() { + for (var A = this; A.parent; ) + A = A.parent; + return A + }, + getSaveObject: function() { + var A = this.load; + return A.closed = this.closed, + this.__rememberedObjects.length > 0 && (A.preset = this.preset, + A.remembered || (A.remembered = {}), + A.remembered[this.preset] = _m(this)), + A.folders = {}, + Zf.each(this.__folders, (function(e, t) { + A.folders[t] = e.getSaveObject() + } + )), + A + }, + save: function() { + this.load.remembered || (this.load.remembered = {}), + this.load.remembered[this.preset] = _m(this), + qm(this, !1), + this.saveToLocalStorageIfPossible() + }, + saveAs: function(A) { + this.load.remembered || (this.load.remembered = {}, + this.load.remembered.Default = _m(this, !0)), + this.load.remembered[A] = _m(this), + this.preset = A, + Wm(this, A, !0), + this.saveToLocalStorageIfPossible() + }, + revert: function(A) { + Zf.each(this.__controllers, (function(e) { + this.getRoot().load.remembered ? jm(A || this.getRoot(), e) : e.setValue(e.initialValue), + e.__onFinishChange && e.__onFinishChange.call(e, e.getValue()) + } + ), this), + Zf.each(this.__folders, (function(A) { + A.revert(A) + } + )), + A || qm(this.getRoot(), !1) + }, + listen: function(A) { + var e = 0 === this.__listening.length; + this.__listening.push(A), + e && function A(e) { + 0 !== e.length && Qm.call(window, (function() { + A(e) + } + )); + Zf.each(e, (function(A) { + A.updateDisplay() + } + )) + }(this.__listening) + }, + updateDisplay: function() { + Zf.each(this.__controllers, (function(A) { + A.updateDisplay() + } + )), + Zf.each(this.__folders, (function(A) { + A.updateDisplay() + } + )) + } + }); + var $m = Vm + , AC = function(A) { + var e = this; + this.indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB; + window.IDBKeyRange || window; + var t = uh.extend({}, { + dbName: "bos3d", + store: "default", + version: 1, + indexes: ["id"], + keyPath: "id" + }, A); + this.IDBOpenDBRequest = null, + this.dbName = t.dbName; + var i = this.version = t.version; + this.storeName = t.store; + var o = t.keyPath + , n = this.indexedDB.open(this.dbName, i); + n.onupgradeneeded = function(A) { + Bh.log("DB version changed to " + i); + var n = A.target.result + , r = null; + if (!1 === n.objectStoreNames.contains(e.storeName)) { + r = n.createObjectStore(e.storeName, { + keyPath: o + }); + for (var a = 0; t.indexes.length > a; a += 1) { + var s = t.indexes[a]; + r.createIndex(s, s, { + unique: !1 + }) + } + } + } + , + n.onsuccess = function(A) { + e.IDBOpenDBRequest = A.target.result, + Bh.log("成功建立并打开数据库:" + e.IDBOpenDBRequest.name + " version " + i), + e.dispatchEvent({ + type: Rc.ON_DATABASE_OPEN + }) + } + , + n.onerror = function(A) { + Bh.error("IndexedDB", A), + e.dispatchEvent({ + type: Rc.ON_DATABASE_EEEOR + }) + } + , + n.onblocked = function(A) { + Bh.warn("Please close all other tabs with this site open!", A) + } + }; + Object.assign(AC.prototype, Ld.prototype), + Object.assign(AC.prototype, { + constructor: AC, + get: function(A, e, t) { + if (this.IDBOpenDBRequest) { + var i = this.IDBOpenDBRequest.transaction([this.storeName]).objectStore(this.storeName).get(A); + i.onsuccess = function(A) { + "function" == typeof e && e(A.target.result ? A.target.result.data : null) + } + , + i.onerror = function(A) { + Bh.error("getDataByKey error"), + "function" == typeof t && t(A) + } + } + }, + getBatch: function(A, e, t) { + if (this.IDBOpenDBRequest) { + for (var i = this.IDBOpenDBRequest.transaction([this.storeName]).objectStore(this.storeName), o = {}, n = [], r = 0; A.length > r; r += 1) + n.push(new Promise((function(e, t) { + var o = A[r] + , n = i.index("id").get(o); + n.onsuccess = function(A) { + e(A.target.result) + } + , + n.onerror = function(A) { + Bh.error(o, "failed", A), + t(A) + } + } + ))); + Promise.all(n).then((function(A) { + for (var t = 0; A.length > t; t += 1) + A[t] && (o[A[t].id] = A[t].data); + e(o) + } + )).catch((function(A) { + Bh.debug(A), + A instanceof TypeError ? Bh.error(A) : e(o) + } + )) + } + }, + setBatch: function(A, e, t) { + if (this.IDBOpenDBRequest) + for (var i = this.IDBOpenDBRequest.transaction([this.storeName], "readwrite").objectStore(this.storeName), o = 0; A.length > o; o += 1) { + i.put({ + id: A[o].key, + data: A[o] + }).onsuccess = function(A) {} + } + }, + set: function(A, e, t, i) { + var o = performance.now(); + if (this.IDBOpenDBRequest) { + var n = this.IDBOpenDBRequest.transaction([this.storeName], "readwrite").objectStore(this.storeName).add([{ + id: A, + data: e + }]); + n.onsuccess = function(A) { + "function" == typeof t && t(A.target.result), + Bh.debug("Saved state to IndexedDB. " + (performance.now() - o).toFixed(2) + "ms") + } + , + n.onerror = function(A) { + "function" == typeof i && i(A) + } + } + }, + put: function(A, e, t, i, o) { + if (this.IDBOpenDBRequest) { + var n = performance.now() + , r = this.IDBOpenDBRequest.transaction([t], "readwrite").objectStore(t).put({ + id: A, + data: e + }); + r.onsuccess = function(A) { + "function" == typeof i && i(A.target.result), + Bh.debug("Saved state to IndexedDB. " + (performance.now() - n).toFixed(2) + "ms") + } + , + r.onerror = function(A) { + Bh.error("离线存储出错:", A.target.error.name, ":", A.target.error.message), + "function" == typeof o && o(A) + } + } + }, + delete: function(A, e, t) { + if (this.IDBOpenDBRequest) { + var i = this.IDBOpenDBRequest.transaction(this.storeName, "readwrite").objectStore(this.storeName).delete(A); + i.onsuccess = function(A) { + Bh.debug("delete data form IndexedDB."), + "function" == typeof e && e(A.target.result) + } + , + i.onerror = function(A) { + Bh.error("IndexedDB", A), + "function" == typeof t && t(A) + } + } + }, + clear: function(A, e) { + if (this.IDBOpenDBRequest) { + var t = this.IDBOpenDBRequest.transaction(this.storeName, "readwrite").objectStore(this.storeName).clear(); + t.onsuccess = function(e) { + Bh.debug("Cleared IndexedDB."), + "function" == typeof A && A(e.target.result) + } + , + t.onerror = function(A) { + Bh.error("IndexedDB", A), + "function" == typeof e && e(A) + } + } + }, + deleteDatabase: function(A) { + indexedDB.deleteDatabase(this.dbName), + Bh.debug(this.dbName + "数据库已删除"), + "function" == typeof A && A() + }, + close: function(A) { + this.IDBOpenDBRequest && (this.IDBOpenDBRequest.close(), + Bh.debug("数据库已关闭"), + "function" == typeof A && A()) + }, + getIndex: function(A, e, t, i) { + var o = A.transaction(e, "readwrite").objectStore(e).index("id"); + o.openCursor().onsuccess = function() { + var A = this.result; + A && (Bh.debug(A.value), + A.continue()) + } + ; + var n = IDBKeyRange.only(2) + , r = o.openCursor(n); + r.onsuccess = function() { + var A = r.result; + A && Bh.info(A.value) + } + }, + destroy: function() { + this.close(), + this.IDBOpenDBRequest = null, + this.dbName = null, + this.storeName = null + } + }); + var eC = function(A) { + this.serverUrl = A.serverUrl, + this.modelKey = A.modelKey, + this.dbName = A.dbName, + this.offLine = A.offLine, + this.shareParameter = "" !== A.share ? "&share=" + A.share : "" + }; + eC.prototype.projectUrl = function(A) { + return this.offLine ? this.serverUrl + "/" + this.modelKey + "/resource/scene/scene.json" : this.serverUrl + "/api/" + this.dbName + "/models?modelKey=" + (A || this.modelKey) + this.shareParameter + } + , + eC.prototype.sceneUrl = function(A) { + return this.serverUrl + this.modelKey + "/scene/scene_" + (A = A || 0) + vc.ZipResourcePostfix + } + , + eC.prototype.sceneIdUrl = function() { + return this.serverUrl + this.modelKey + "/scene/scene_id" + vc.ZipResourcePostfix + } + , + eC.prototype.userIdUrl = function() { + return this.serverUrl + this.modelKey + "/scene/user_id" + vc.ZipResourcePostfix + } + , + eC.prototype.octreeUrl = function(A) { + return this.serverUrl + this.modelKey + "/scene/octree_" + A + vc.ZipResourcePostfix + } + , + eC.prototype.symbolUrl = function() { + return this.serverUrl + this.modelKey + "/symbol/symbol" + vc.ZipResourcePostfix + } + , + eC.prototype.mpkUrl = function(A) { + return this.offLine ? this.serverUrl + "/" + this.modelKey + "/resource/data/" + A : np(this.apiVersion, "1.6.0") ? this.serverUrl + "/data?fileKey=" + A : this.serverUrl + "/api/" + this.dbName + "/files?fileKey=" + A + } + , + eC.prototype.texUrl = function(A) { + return this.offLine ? this.serverUrl + "/" + this.modelKey + "/resource/data/Texture/" + A : np(this.apiVersion, "1.6.0") ? this.serverUrl + "/data?fileKey=" + A : this.serverUrl + "/api/" + this.dbName + "/files?fileKey=" + A + } + , + eC.prototype.bonesUrl = function(A) { + return this.offLine ? this.serverUrl + "/" + this.modelKey + "/resource/data/" + A : np(this.apiVersion, "1.6.0") ? this.serverUrl + "/data?fileKey=" + A : this.serverUrl + "/api/" + this.dbName + "/files?fileKey=" + A + } + , + eC.prototype.nodesUrl = function(A) { + return this.offLine ? this.serverUrl + "/" + this.modelKey + "/resource/data/" + A : np(this.apiVersion, "1.6.0") ? this.serverUrl + "/data?fileKey=" + A : this.serverUrl + "/api/" + this.dbName + "/files?fileKey=" + A + } + , + eC.prototype.clipsUrl = function(A) { + return this.offLine ? this.serverUrl + "/" + this.modelKey + "/resource/data/" + A : np(this.apiVersion, "1.6.0") ? this.serverUrl + "/data?fileKey=" + A : this.serverUrl + "/api/" + this.dbName + "/files?fileKey=" + A + } + , + eC.prototype.kdTreeUrl = function(A) { + return this.offLine ? this.serverUrl + "/" + this.modelKey + "/resource/data/" + A : np(this.apiVersion, "1.6.0") ? this.serverUrl + "/data?fileKey=" + A : this.serverUrl + "/api/" + this.dbName + "/files?fileKey=" + A + } + , + eC.prototype.lightUrl = function(A) { + return this.offLine ? this.serverUrl + "/" + this.modelKey + "/resource/data/" + A : np(this.apiVersion, "1.6.0") ? this.serverUrl + "/data?fileKey=" + A : this.serverUrl + "/api/" + this.dbName + "/files?fileKey=" + A + } + , + eC.prototype.rootTilesUrl = function(A) { + return this.offLine ? this.serverUrl + "/" + this.modelKey + "/tileset.json" : this.serverUrl + "/api/" + this.dbName + "/geomodels/" + this.modelKey + "/data/tileset.json" + } + , + eC.prototype.tilesUrl = function(A) { + return this.offLine ? this.serverUrl + "/" + this.modelKey + "/" + A : this.serverUrl + "/api/" + this.dbName + "/geomodels/" + this.modelKey + "/data/" + A + } + , + eC.prototype.b3dmUrl = function(A) { + return this.offLine ? this.serverUrl + "/" + this.modelKey + "/" + A : this.serverUrl + "/api/" + this.dbName + "/geomodels/" + this.modelKey + "/data/" + A + } + , + eC.prototype.attributeUrl = function() { + if (this.offLine) + return this.serverUrl + "/" + this.modelKey + "/resource/attribute/attribute.json" + } + , + eC.prototype.meshIdUrl = function() { + return this.serverUrl + this.modelKey + "/mpk/mesh_id" + vc.ZipResourcePostfix + } + , + eC.prototype.materialUrl = function() { + return this.serverUrl + this.modelKey + "/material/material" + vc.ZipResourcePostfix + } + , + eC.prototype.materialIdUrl = function() { + return this.serverUrl + this.modelKey + "/material/material_id" + vc.ZipResourcePostfix + } + , + eC.prototype.userDataUrl = function() { + return this.serverUrl + this.modelKey + "/userdata/userdata" + vc.ZipResourcePostfix + } + , + eC.prototype.textureUrl = function(A) { + return this.offLine ? this.serverUrl + "/" + this.modelKey + "/resource/data/" + A : np(this.apiVersion, "1.6.0") ? this.serverUrl + "/data?fileKey=" + A : this.serverUrl + "/api/" + this.dbName + "/files?fileKey=" + A + this.shareParameter + } + , + eC.prototype.axisNetUrl = function(A) { + return this.offLine ? this.serverUrl + "/" + this.modelKey + "/resource/data/" + A : np(this.apiVersion, "1.6.0") ? this.serverUrl + "/data?fileKey=" + A : this.serverUrl + "/api/" + this.dbName + "/files?fileKey=" + A + } + , + eC.prototype.floorInfoUrl = function(A) { + return this.offLine ? this.serverUrl + "/" + A + "/resource/floor/floorKey.json" : this.serverUrl + "/api/" + this.dbName + "/components/floorkeys?modelKey=" + A + this.shareParameter + } + , + eC.prototype.floorMapUrl = function(A) { + return this.offLine ? this.serverUrl + "/" + this.modelKey + "/resource/floor/map.json" : this.serverUrl + "/api/" + this.dbName + "/models/maps?modelKey=" + this.modelKey + this.shareParameter + } + ; + var tC = function(A) { + $u.call(this, A), + this.instancedComponent = {} + }; + Object.assign(tC.prototype, $u.prototype), + tC.prototype.parseItemData = function(A) { + this._readMaterialBuffer(this.model); + var e = {} + , t = this.referencedMeshCache; + for (var i in Bh.time("_readItemData"), + t.components) + t.components.hasOwnProperty(i) && this._readItemData(e, i, i, void 0, 0); + Bh.timeEnd("_readItemData"), + e = null, + A && A() + } + , + tC.prototype._readItemData = function(A, e, t) { + var i = this.referencedMeshCache.components[e]; + void 0 !== i && this._readMeshInfo(A, t, i, null) + } + , + tC.prototype._readMeshInfo = function(A, e, t, i) { + var o = this.referencedMeshCache + , n = this.model.materialManager.materials + , r = null; + if (t.nodes || t.nodeIds) { + r = t.originalId; + var a = (new M).fromArray(t.matrix || [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]); + t.matrix = a; + var s = []; + s = t.nodes ? t.nodes : t.nodeIds; + for (var l = 0; s.length > l; l += 1) { + var c = s[l]; + if ("object" !== lc(c) && (c = this.getReferencedMeshComponentNodeById(c)), + c) { + var h, d = null, p = ""; + if (-1 !== c.geoId) + if (d = this._getComponentNodeAttr(c, t, l)) { + if (t.buildInCategory && (d.buildInCategory = t.buildInCategory), + !n[p = c.material]) { + var g = _u[t.type] ? _u[t.type].color : void 0; + g || (Bh.log("Material not found for type: ", t.type), + g = _u.DEFAULT.color), + g || (Bh.log("Default material not found for type: ", t.type), + g = [1, 1, 1, 1]); + var u = new LA(g[0],g[1],g[2]) + , f = p || u.getHexString() + "_" + g[3] + , m = n[f]; + m || (Bh.warn("缺少材质 " + p), + m = Kd.createStandardMaterial({ + color: u + }), + 1 > g[3] && (m.transparent = !0, + m.opacity = g[3]), + m.side = 2, + n[f] = m), + d.material = p = f + } + if (n[p].aoMap) { + var C = this.getReferencedMeshBufferById(d.geometryId); + C && (C.uv2 = C.uv) + } + h = d.nodeId; + var y = this.userDataReader + , v = y ? y.getUserData(null) : null; + d.type = t.type, + d.userId = e, + d.name = t.name, + d.userDataId = null, + d.originalId = r, + d.materialId = p, + d.originMId = p, + d.userData = v, + d.categoryId = 0, + d.componentKey = e, + d.familyName = t.familyName, + d.familySymbol = t.familySymbol; + var I = vc.Instance + , E = o.reuseNodes.hasOwnProperty(h); + d.instanceOrNot = !(!I || !E), + d.isBatched = !0, + d.state = Lc.Visible, + d.material = null, + this._classifyNodeInfo(d), + d = null + } else + Bh.debug("非法node") + } + } + } + } + , + tC.prototype._parseInstanced = function() { + Bh.time("_parseInstanced"), + this.instancedComponent = {}, + this.instancedNode = {}; + var A = {} + , e = this.referencedMeshCache + , t = e.componentNodes + , i = this.model.materialManager.materials; + for (var o in e.components) + if (e.components.hasOwnProperty(o)) + for (var n = e.components[o], r = 0, a = n.Nodes.length; a > r; r += 1) { + var s = n.Nodes[r] + , l = t[s] + , c = l.geometry + , h = l.material; + if (-1 !== c) { + if (!h && 0 !== h) { + var d = _u[n.type] ? _u[n.type].color : void 0; + d || (Bh.log("Material not found for type: ", n.type), + d = _u.DEFAULT.color), + d || (Bh.log("Default material not found for type: ", n.type), + d = [1, 1, 1, 1]); + var p = new LA(d[0],d[1],d[2]) + , g = p.getHexString() + "_" + d[3] + , u = i[g]; + u || (Bh.warn("缺少材质 " + g), + u = Kd.createStandardMaterial({ + color: p + }), + 1 > d[3] && (u.transparent = !0, + u.opacity = d[3]), + u.side = 2, + i[g] = u), + l.material = g, + h = g + } + var f = h + "&" + c; + void 0 === A[f] && (A[f] = []), + A[f].push({ + nodeId: s + }) + } else + Bh.debug("实体没有几何") + } + for (var m in A) + if (A.hasOwnProperty(m)) + if (1 < A[m].length) + for (var C = 0; A[m].length > C; C += 1) + this.instancedComponent[A[m][C].nodeId] = !0; + else + delete A[m]; + Bh.timeEnd("_parseInstanced") + } + ; + var iC = function(A) { + Xu.call(this, A), + this.maxGeoLoadTaskCount = 0, + this.geoLoadTaskCount = 0, + this.taskInstancedGeometrieManager = new Ou(this,"geometrie"), + this.descriptor = new tC(A.model) + }; + (iC.prototype = Object.assign(iC.prototype, Xu.prototype))._parseMaterial = function(A, e) { + if (A) { + var t = this.descriptor; + if (t) + for (var i in A) + t.cacheReferencedMeshMaterialData(i, A[i]) + } else + Bh.error("没有数据") + } + , + iC.prototype.loadBatchedGeometrie = function(A, e) { + var t = this + , i = this.loader + , o = this.url + , n = this.model; + i.setResponseType("arraybuffer"), + i.setCacheViable(!this.offLine); + var r = i.load(o.mpkUrl(A), (function(i) { + t._parseBatchedGeometrie(i, A), + Bh.debug("geo load from online"), + t._onGeoTaskFinished(), + e() + } + ), void 0, (function(A) { + n.dispatchEventEx({ + type: Tc.LOAD_GEOMETRY_ERROR, + modelKey: n.modelKey + }), + e(), + t._onGeoTaskFinished() + } + )); + t.requests.loadGeometrie = r + } + , + iC.prototype.loadInstancedGeometrie = function(A, e) { + var t = this + , i = this.loader + , o = this.url + , n = this.model; + i.setResponseType("arraybuffer"), + i.setCacheViable(!this.offLine); + var r = i.load(o.mpkUrl(A), (function(i) { + t._parseInstancedGeometrie(i, A), + Bh.debug("geo load from online"), + t._onGeoTaskFinished(), + e() + } + ), void 0, (function(A) { + n.dispatchEventEx({ + type: Tc.LOAD_GEOMETRY_ERROR, + modelKey: n.modelKey + }), + e(), + t._onGeoTaskFinished() + } + )); + t.requests.loadGeometrie = r + } + , + iC.prototype._parseGeometrie = function(A, e) { + if (A) { + var t = this.descriptor; + if (t) + for (var i in A) + A.hasOwnProperty(i) && (A[i].position = new Float32Array(A[i].positions), + delete A[i].positions, + A[i].index = new Uint32Array(A[i].indices), + delete A[i].indices, + A[i].normal = new Float32Array(A[i].normals), + A[i].uv = new Float32Array(A[i].uv), + delete A[i].normals, + t.cacheReferencedMeshBufferData(i, A[i])) + } else + Bh.error("没有数据") + } + , + iC.prototype._parseBatchedGeometrie = function(A, e) { + var t = new ku.BatchedGeometryReader(A,this.dataVersion) + , i = this.descriptor; + if (i) { + var o = t.geoCount; + Bh.time("createBatchedMeshNodes"); + for (var n = 0; o > n; n += 1) { + var r = t.geomMap[n]; + void 0 !== r.position && void 0 !== r.index && void 0 !== r.normal ? (i.cacheReferencedMeshBufferData(r.geoId, r), + this.handler.createBatchedMeshNodes(r)) : Bh.error("Error Geometry!") + } + this.model.manager.viewerImpl.render(), + Bh.timeEnd("createBatchedMeshNodes"), + t = null + } + } + , + iC.prototype._parseInstancedGeometrie = function(A, e) { + var t = new ku.InstancedGeometryReader(A,this.dataVersion) + , i = this.descriptor; + if (i) { + var o = t.geoCount; + Bh.time("createInstancedMeshNodes"); + for (var n = 0; o > n; n += 1) { + var r = t.geomMap[n]; + void 0 !== r.position && void 0 !== r.index && void 0 !== r.normal ? (i.cacheReferencedMeshBufferData(r.geoId, r), + this.handler.createInstancedMeshNodes(r)) : Bh.error("Error Geometry!") + } + this.model.manager.viewerImpl.render(), + t = null, + Bh.timeEnd("createInstancedMeshNodes") + } + } + , + iC.prototype.startLoadSceneAndGeos = function(A) { + Bh.time("几何数据加载时间"); + var e = A.scene + , t = e.instancedGeometries.length || 0 + , i = e.batchedGeometries + , o = e.instancedGeometries; + this.maxGeoLoadTaskCount += e.batchedGeometries.length || 0, + this.maxGeoLoadTaskCount += t, + this._loadBatchedGeo(i), + this._loadInstancedGeo(o) + } + , + iC.prototype._loadBatchedGeo = function(A) { + var e = this; + if (vc.getDataFromIndexedDB && !this.offLine) { + for (var t = this.url, i = [], o = 0; A.length > o; o += 1) + i.push(t.mpkUrl(A[o])); + var n = this.model.getStorage(); + if (n) + for (var r = function() { + var t = i.splice(0, 30); + n.getBatch(t, (function(A) { + for (var i = function(i) { + if (A[t[i]]) + if (!0 === A[t[i]].split) { + var o = A[t[i]].list + , s = new Uint8Array(A[t[i]].length); + n.getBatch(o, (function(A) { + for (var n = !0, r = 0; o.length > r; r += 1) + A[o[r]] ? s.set(new Uint8Array(A[o[r]]), 4e7 * r) : (n = !1, + Bh.error("获取分割几何失败")); + if (n) { + var a = t[i].indexOf("fileKey="); + e._parseBatchedGeometrie(s.buffer, t[i].slice(a + 8)), + e._onGeoTaskFinished(), + Bh.debug("load geo from local") + } else { + var l = e.taskGeometrieManager + , c = t[i].indexOf("fileKey="); + if (-1 === c) + return void Bh.error("url is not has fileKey"); + l.addTask(t[i].slice(c + 8)), + Bh.debug("load geo from net"), + e.taskGeometrieManager.processTasks(e.loadBatchedGeometrie.bind(e)) + } + } + ), (function() { + Bh.error("获取分割几何失败") + } + )) + } else + a = t[i].indexOf("fileKey="), + e._parseBatchedGeometrie(A[t[i]], t[i].slice(a + 8)), + e._onGeoTaskFinished(), + Bh.debug("load geo from local"); + else { + if (r = e.taskGeometrieManager, + -1 === (a = t[i].indexOf("fileKey="))) + return Bh.error("url is not has fileKey"), + { + v: void 0 + }; + r.addTask(t[i].slice(a + 8)), + Bh.debug("load geo from net") + } + }, o = 0; t.length > o; o += 1) { + var r, a, s = i(o); + if ("object" === lc(s)) + return s.v + } + e.taskGeometrieManager.processTasks(e.loadBatchedGeometrie.bind(e)) + } + ), (function() { + for (var t = e.taskGeometrieManager, i = 0; A.length > i; i += 1) + t.addTask(A[i]); + t.processTasks(e.loadBatchedGeometrie.bind(e)) + } + )) + }; i.length > 0; ) + r() + } else { + for (var a = this.taskGeometrieManager, s = 0; A.length > s; s += 1) + a.addTask(A[s]); + a.processTasks(e.loadBatchedGeometrie.bind(e)) + } + } + , + iC.prototype._loadInstancedGeo = function(A) { + var e = this; + if (vc.getDataFromIndexedDB && !this.offLine) { + for (var t = this.url, i = [], o = 0; A.length > o; o += 1) + i.push(t.mpkUrl(A[o])); + var n = this.model.getStorage(); + if (n) + for (var r = function() { + var t = i.splice(0, 30); + n.getBatch(t, (function(A) { + for (var i = function(i) { + if (A[t[i]]) + if (!0 === A[t[i]].split) { + var o = A[t[i]].list + , s = new Uint8Array(A[t[i]].length); + n.getBatch(o, (function(A) { + for (var n = 0; o.length > n; n += 1) + A[o[n]] ? s.set(new Uint8Array(A[o[n]]), 4e7 * n) : Bh.error("获取分割几何失败"); + var r = t[i].indexOf("fileKey="); + e._parseInstancedGeometrie(s.buffer, t[i].slice(r + 8)), + e._onGeoTaskFinished(), + Bh.debug("load geo from local") + } + ), (function() { + Bh.error("获取分割几何失败") + } + )) + } else + a = t[i].indexOf("fileKey="), + e._parseInstancedGeometrie(A[t[i]], t[i].slice(a + 8)), + e._onGeoTaskFinished(), + Bh.debug("load geo from local"); + else { + if (r = e.taskInstancedGeometrieManager, + -1 === (a = t[i].indexOf("fileKey="))) + return Bh.error("url is not has fileKey"), + { + v: void 0 + }; + r.addTask(t[i].slice(a + 8)), + Bh.debug("load geo from net") + } + }, o = 0; t.length > o; o += 1) { + var r, a, s = i(o); + if ("object" === lc(s)) + return s.v + } + e.taskInstancedGeometrieManager.processTasks(e.loadInstancedGeometrie.bind(e)) + } + ), (function() { + for (var t = e.taskInstancedGeometrieManager, i = 0; A.length > i; i += 1) + t.addTask(A[i]); + t.processTasks(e.loadInstancedGeometrie.bind(e)) + } + )) + }; i.length > 0; ) + r() + } else { + for (var a = this.taskInstancedGeometrieManager, s = 0; A.length > s; s += 1) + a.addTask(A[s]); + a.processTasks(e.loadInstancedGeometrie.bind(e)) + } + } + , + iC.prototype._onGeoTaskFinished = function() { + (this.geoLoadTaskCount += 1, + this.notifyProgress) && (this.progressCallback && this.progressCallback({ + total: this.maxLoadTaskCount + this.maxGeoLoadTaskCount, + loaded: .8 * (this.loadTaskCount + this.geoLoadTaskCount), + modelKey: this.model.modelKey + })); + this.maxGeoLoadTaskCount > this.geoLoadTaskCount || (this.dataLoaded = !0, + Bh.timeEnd("几何数据加载时间"), + this.geoFinishCallback && this.geoFinishCallback()) + } + , + iC.prototype.getSceneTaskCount = function(A) { + var e = A.scenes; + return e += A.lines, + e += A.mpks, + vc.BorderLineDelayLoaded || (e += this.getAllBorderlineCount()), + e + } + ; + var oC = function(A, e) { + tf.call(this, A), + this.defaultManager = new Of(e,A), + this.instancedManager = new Hf(A), + this.loader = new iC(this) + }; + (oC.prototype = Object.create(tf.prototype)).prepare = function(A, e) { + if (this.isLoaded() && !this.isHidden()) { + this.prepareWireframe(this.model, e); + this.model.getMaterialManager(); + this.model.getMaterialManager()._updateTextureMapping(), + !this.model.lightmap || this.model.enableLightmap === vc.EnableLightmap && this.model.lightmapIntensity === vc.LightmapIntensity || (this.model.enableLightmap = vc.EnableLightmap, + this.model.lightmapIntensity = vc.LightmapIntensity, + this.rebuildIndicesforLightmap(), + this.updateNodes()) + } + } + , + oC.prototype.settleData = function(A) { + var e = this; + this.addNodeInfoToOctantMap(), + e.model.setLoaded(!0); + this.loader.geoFinishCallback = function() { + e.loaded = !0, + e.model.getMaterialManager()._updateTextureMapping(), + e.clearCachedData(e.model), + A && A() + } + , + this.loader.startLoadSceneAndGeos(this.model.getConfig()) + } + , + oC.prototype.addNodeInfoToOctantMap = function() { + var A = this.model.manager + , e = this.model.getEncodedDatabagId(); + this.loader.getDescriptor().traverseNodeInfosByComponent((function(t, i) { + A.addNodeInfoToOctantMap(e, t, i) + } + )) + } + , + oC.prototype.createMeshNodes = function(A) { + var e = this + , t = this.model; + vc.stepLoad && t.setLoaded(!0); + var i = this.loader.getDescriptor(); + this.instancedManager.createMeshNodes(t, i.getInstancedUserIds()), + this.defaultManager.asyncCreateMeshNodes(t, i.getStandardUserIds(), (function() { + t.getMaterialManager()._updateTextureMapping(), + e.clearCachedData(t), + e.loaded = !0, + A && A() + } + )) + } + , + oC.prototype.clearCachedData = function(A) { + this.loader.getDescriptor().destroyReader(), + this.loader.getDescriptor().clearReferencedMeshCache(), + this.defaultManager.clearCachedData(), + this.instancedManager.clearCachedData() + } + , + oC.prototype.createBatchedMeshNodes = function(A) { + this.defaultManager.createBatchedMeshNodes(this.model, A) + } + , + oC.prototype.createInstancedMeshNodes = function(A) { + this.instancedManager.createInstancedMeshNodes(this.model, A) + } + ; + var nC = function(A) { + Xu.call(this, A), + this._loadingOnDemand = !1 + }; + (nC.prototype = Object.assign(nC.prototype, Xu.prototype)).loadGeopkOnDemand = function(A, e, t) { + this.loadTaskCount = 0, + this.maxLoadTaskCount = A.length, + this._loadingOnDemand = !0, + this.finishCallback = t; + var i = this; + if (vc.getDataFromIndexedDB && !this.offLine) { + for (var o = this.url, n = [], r = 0; A.length > r; r += 1) + n.push(o.mpkUrl(A[r])); + var a = this.model.getStorage(); + a && a.getBatch(n, (function(A) { + for (var t = function(e) { + if (A[n[e]]) + if (!0 === A[n[e]].split) { + var t = A[n[e]].list + , o = new Uint8Array(A[n[e]].length); + a.getBatch(t, (function(A) { + for (var r = 0; t.length > r; r += 1) + A[t[r]] ? o.set(new Uint8Array(A[t[r]]), 4e7 * r) : Bh.error("获取分割几何失败"); + var a = n[e].indexOf("fileKey="); + i._parseGeometrie(o.buffer, n[e].slice(a + 8)), + Bh.debug("load geo from local"), + i._onTaskFinished() + } + ), (function() { + Bh.error("获取分割几何失败") + } + )) + } else + s = n[e].indexOf("fileKey="), + i._parseGeometrie(A[n[e]], n[e].slice(s + 8)), + Bh.debug("load geo from local"), + i._onTaskFinished(); + else { + if (r = i.taskGeometrieManager, + -1 === (s = n[e].indexOf("fileKey="))) + return Bh.error("url is not has fileKey"), + { + v: void 0 + }; + r.addTask(n[e].slice(s + 8)), + Bh.debug("load geo from net") + } + }, o = 0; n.length > o; o += 1) { + var r, s, l = t(o); + if ("object" === lc(l)) + return l.v + } + i.taskGeometrieManager.processTasks(i.loadGeometrie.bind(i), e) + } + ), (function() { + for (var t = i.taskGeometrieManager, o = 0; A.length > o; o += 1) + t.addTask(A[o]); + t.processTasks(i.loadGeometrie.bind(i), e) + } + )) + } else { + for (var s = this.taskGeometrieManager, l = 0; A.length > l; l += 1) + s.addTask(A[l]); + s.processTasks(i.loadGeometrie.bind(i), e, t) + } + } + , + nC.prototype.resetProcessState = function(A) { + this.loadTaskCount = 0, + this.maxLoadTaskCount = A, + this._loadingOnDemand = !0 + } + , + nC.prototype.dealProgressSegment = function(A, e) { + return vc.MergeComponent && this._loadingOnDemand ? e * A.progressPercentage.load : e + } + , + nC.prototype._loadLayerKey = function() { + var A = this + , e = this.fileLoader + , t = this.url + , i = this.model + , o = this.handler.getLayerProvider(); + e.setResponseType(""), + e.load(t.layerKeyUrl(), (function(e) { + var t = new LayerKeyReader(e) + , i = [] + , n = t.getData(); + o.cacheLayerKeys(n); + for (var r = 0, a = t.getCount(); a > r; ++r) { + var s = t.getLayerKey(r) + , l = o.formatLayerIds(s); + i.push(l[0]) + } + A._loadLayer(i) + } + ), void 0, (function(e) { + i.dispatchEvent({ + type: Tc.LOAD_ERROR, + errorType: Tc.LOAD_MPK_ERROR, + event: e + }), + A._onTaskFinished() + } + )) + } + , + nC.prototype._loadLayer = function(A) { + var e = this + , t = this.fileLoader + , i = this.url + , o = this.model + , n = this.handler.getLayerProvider(); + t.setResponseType("arraybuffer"), + t.load(i.layerUrl(), (function(t) { + for (var i = new LayerReader(t), o = 0, r = i.getLayerCount(); r > o; ++o) + if (void 0 !== A[o]) { + for (var a = [], s = i.getLayerData(o), l = i.getGeopkList(o), c = 0, h = l.length; h > c; c += 1) + a.push(l[c]); + n.cacheLayerData(A[o], { + layerId: s.layer_id, + boundingBox: s.boundingBox, + mpkIdxs: a + }) + } + e._onTaskFinished() + } + ), void 0, (function(A) { + o.dispatchEvent({ + type: Tc.LOAD_ERROR, + errorType: Tc.LOAD_MPK_ERROR, + event: A + }), + e._onTaskFinished() + } + )) + } + , + nC.prototype.delayLoadResources = function(A) { + var e = this.model.getConfig().metadata; + e && 0 !== e.lines ? (this.startCallback = null, + this.progressCallback = null, + this.finishCallback = A, + this.loadTaskCount = 0, + this.maxLoadTaskCount = 0, + this.maxLoadTaskCount += e.lines, + e.lines && this._loadLine()) : A && A() + } + ; + var rC = function(A) { + Af.call(this, A) + }; + (rC.prototype = Object.assign(rC.prototype, Af.prototype)).parseItemData = function(A, e) { + var t = this.model; + (ap(t.dataVersion, "2.0.0") || void 0 === t.dataVersion) && (Bh.time("升级几何结构"), + this._updateV1ToV2(t), + t.dataVersion = "2.0.0", + Bh.timeEnd("升级几何结构")), + this._readMaterialBuffer(t), + t.hasAnimation && vc.EnableAnimation ? (this._parseClips(), + this._parseBones()) : (this._parseGeo(), + vc.Instance && sp(t.dataVersion, "2.0.0") && this._parseInstanced()); + var i = {}; + if (!i) + return Bh.log("Empty scene"), + !1; + var o = this.referencedMeshCache; + if (Bh.time("_readItemData"), + !o.bufferData || 0 >= Object.keys(o.bufferData).length) + return !0; + if (A) + for (var n = 0, r = A.length; r > n; n += 1) + o.components[A[n]] && this._readItemData(i, A[n], A[n], void 0, 0); + else + for (var a in o.components) + this._readItemData(i, a, a, void 0, 0); + t.hasAnimation && vc.EnableAnimation && this._parseNodes(), + Bh.timeEnd("_readItemData"), + i = null, + e && e() + } + ; + var aC = function(A) { + nC.call(this, A), + this.descriptor = new rC(A.model) + }; + (aC.prototype = Object.assign(aC.prototype, nC.prototype)).loadSceneAndMpks = function(A) { + this._loadScene(0), + this._loadLayerKey(), + vc.BorderLineDelayLoaded || this._loadAllBorderlines(A) + } + , + aC.prototype.getSceneTaskCount = function(A) { + var e = 2; + return vc.BorderLineDelayLoaded || (e += this.getAllBorderlineCount()), + e + } + ; + var sC = function(A) { + tf.call(this, A), + this.layerDataLoaded = !1, + this.loadedUserIdsObject = null, + this.loadedUserIds = null, + this.layerProvider = null, + this.firstToLoad = !1 + }; + (sC.prototype = Object.assign(sC.prototype, tf.prototype)).destroy = function() { + sC.prototype.destroy.call(this), + this.loadedUserIdsObject = null, + this.loadedUserIds = null, + this.layerProvider.destroy(), + this.layerProvider = null + } + , + sC.prototype.getLayerProvider = function() { + return this.layerProvider + } + , + sC.prototype.load = function(A) { + var e = this + , t = this.model; + this.loader.setNotifyProgress(A), + this.loader.load((function() { + t.manager.dispatchEvent({ + type: Rc.ON_LOAD_START + }) + } + ), (function(A) { + t.manager.dispatchEvent({ + type: Rc.ON_LOAD_PROGRESS, + progress: A + }) + } + ), (function() { + e.processLoadCompleted((function() { + t.manager.dispatchEvent({ + type: Rc.ON_LOAD_COMPLETE, + modelKey: e.model.modelKey + }) + } + )) + } + )) + } + , + sC.prototype.unload = function(A, e) {} + , + sC.prototype.loadGeopkOnDemand = function(A, e, t, i) { + var o = this + , n = this.model + , r = !A + , a = function(A) { + n.manager.dispatchEvent({ + type: Rc.ON_LOAD_PROGRESS, + progress: A + }) + }; + this.firstToLoad ? this.loader.delayLoadResources((function() { + o.firstToLoad = !1, + o.loader.finishCallback = null, + o.prepareData((function() { + o.loader.progressCallback = a, + o.getLayerProvider().setConditionsOnDemandLoad(A), + o._loadGeopkOnDemand(r, e, t, i) + } + )) + } + )) : (o.loader.progressCallback = a, + o.getLayerProvider().setConditionsOnDemandLoad(A), + o._loadGeopkOnDemand(r, e, t, i)) + } + , + sC.prototype._loadGeopkOnDemand = function(A, e, t, i) { + var o = this + , n = this.model; + this.layerDataLoaded = !1, + e && e(), + n.manager.dispatchEvent({ + type: Rc.ON_LOAD_START + }), + this.getLayerProvider().loadGeopkOnDemand(A, (function(A) { + o.dealData(A) + } + ), (function(A, e) {} + ), t, (function() { + o.layerDataLoaded = !0, + n.manager.updateFilterManager(), + Bh.log("load finish"), + n.dispatchEventEx({ + type: Rc.ON_DEMAND_LOAD_COMPLETE, + data: { + boundingBox: n.manager.getLoadOnDemandDirector().getBoundingBoxForUsedComponent() + }, + modelKey: o.model.modelKey + }), + i && i() + } + )) + } + , + sC.prototype.processLoadCompleted = function(A) { + var e = this.model; + e.materialManager._updateTextureMapping(), + e.materialManager._updateIBL(e), + e.loaded = !0, + e.updateOctreeNode(), + requestAnimationFrame((function() { + A && A(), + e.debut(e) + } + )) + } + , + sC.prototype.isAllReady = function() { + return !(!this.isLoaded() || this.isHidden() || !this.isLayerDataLoaded()) + } + , + sC.prototype.applyFilter = function() { + if (this.isLoaded() && this.isLayerDataLoaded()) { + var A = this.model.getModelDescriptor().getStandardUserIdsByCategory(this.loadedUserIds); + if (A.length && this.defaultManager.applyFilter(this.model, A), + vc.Instance) { + var e = this.model.getModelDescriptor().getInstancedUserIdsByCategory(this.loadedUserIds); + e.length && this.instancedManager.applyFilter(this.model, e) + } + } + } + , + sC.prototype.needUpdate = function() { + return !!this.isLayerDataLoaded() + } + , + sC.prototype.clearData = function() {} + , + sC.prototype.initData = function(A) {} + , + sC.prototype.dealMeshNodes = function(A) {} + , + sC.prototype.dealData = function(A) { + var e = this; + this.initData((function() { + e.model.manager.loadOverrideMaterialsByDemand((function() { + e.dealMeshNodes(A) + } + ), (function() { + e.dealMeshNodes(A) + } + )) + } + )) + } + , + sC.prototype.getLoadedUserIdsObject = function() { + return this.loadedUserIdsObject + } + , + sC.prototype.isLayerDataLoaded = function() { + return this.layerDataLoaded + } + , + sC.prototype.clearLoadedState = function() { + this.layerDataLoaded = !1, + this.loadedUserIdsObject = null, + this.loadedUserIds = null + } + ; + var lC = function(A) { + this.model = A, + this.conditionsChanged = !0, + this.nodeInfosWithLayerKey = {}, + this.cachedLayerData = {}, + this.cacheAttributes = null, + this.cacheSpecialtysLevels = {}, + this.mapLayerKeys = {}, + this.lastUsedGeopkIdxsObject = null, + this.lastUsedLayerIdsObject = null, + this.lastUsedLayerData = null, + this.mapNeededConditions = null + }; + lC.prototype.destroy = function() { + this.cachedLayerData = null, + this.nodeInfosWithLayerKey = null, + this.cacheAttributes = null, + this.cacheSpecialtysLevels = null, + this.mapLayerKeys = null, + this.lastUsedLayerData = null, + this.lastUsedGeopkIdxsObject = null, + this.lastUsedLayerIdsObject = null, + this.mapNeededConditions = null + } + , + lC.prototype.clearData = function() {} + , + lC.prototype.loadLayerDataByIdxs = function(A, e, t, i) {} + , + lC.prototype.dealLayerDataLoading = function(A, e, t, i, o) {} + , + lC.prototype.loadGeopkOnDemand = function(A, e, t, i, o) { + var n = A ? this.getAllLayerIdxData() : this.getUsedLayerIdxData(); + this.dealLayerDataLoading(this.getLayerIdxInfoByLayerData(n), e, t, i, o) + } + , + lC.prototype.getUsedIdxsInfoFrom = function(A, e) { + var t = null + , i = {} + , o = {} + , n = {} + , r = {}; + if (A && A.length) + for (var a = 0, s = A.length; s > a; a += 1) + i[t = A[a]] = !0; + if (e) + if (uh.isEmptyObject(i)) + n = e; + else { + for (t in e) + i[t] && (r[t] = !0); + if (uh.isEmptyObject(r)) + o = i, + n = e; + else { + for (t in e) + r[t] || (n[t] = !0); + for (t in i) + r[t] || (o[t] = !0) + } + } + else + uh.isEmptyObject(i) || (o = i); + return { + objCurrUsedIdxs: i, + addIdxs: Object.keys(o), + removeIdxs: Object.keys(n) + } + } + , + lC.prototype.getLayerIdxInfoByLayerData = function(A) { + var e = null + , t = null; + A ? (e = A.layerIds, + t = A.mpkIdxs) : (e = null, + t = null); + var i = this.getUsedIdxsInfoFrom(e, this.lastUsedLayerIdsObject); + this.lastUsedLayerIdsObject = i.objCurrUsedIdxs; + var o = this.getUsedIdxsInfoFrom(t, this.lastUsedGeopkIdxsObject); + return this.lastUsedGeopkIdxsObject = o.objCurrUsedIdxs, + { + layerScene: i, + mpk: o + } + } + , + lC.prototype.getUsedLayerIdxData = function() { + if (!this.isConditionsChanged() && this.lastUsedLayerData) + return this.lastUsedLayerData; + this.setConditionsChanged(!1); + var A = this.getConditionsOnDemand(); + if (!A) + return this.lastUsedLayerData = null, + null; + this.getCachedLayerData(); + for (var e = [], t = A, i = this.model.getModelDescriptor().referencedMeshCache.components, o = this.model.getModelDescriptor(), n = 0, r = t.length; r > n; n += 1) { + var a = t[n] + , s = i[a]; + if (s) + if (s.nodes || s.nodeIds) + for (var l = null, c = 0, h = (l = s.nodes ? s.nodes : s.nodeIds).length; h > c; c += 1) { + var d = l[c]; + if ("object" !== lc(d) && (d = o.getReferencedMeshComponentNodeById(d)), + d) { + var p = this.getFileKeyByGeoId(d.geoId); + p && e.push(p) + } + } + else { + var g = this.getFileKeyByGeoId(i[a].geoId); + g && e.push(g) + } + } + return this.lastUsedLayerData = { + layerIds: [], + layerKeys: [], + boundingBoxes: [], + mpkIdxs: e + }, + this.lastUsedLayerData + } + , + lC.prototype.getFileKeyByGeoId = function(A) { + for (var e in this.cachedLayerData) + if (this.cachedLayerData.hasOwnProperty(e)) { + var t = this.cachedLayerData[e]; + if (A >= t[0] && t[1] >= A) + return e + } + return window.geoidToFileKeyMap ? window.geoidToFileKeyMap[A] : null + } + , + lC.prototype.getAllLayerIdxData = function() { + this.setConditionsChanged(!1); + var A = this.getCachedLayerData(); + if (!A) + return null; + var e = [] + , t = [] + , i = [] + , o = []; + for (var n in A) { + for (var r = A[n].mpkIdxs, a = 0, s = r.length; s > a; a += 1) + i.push(r[a]); + e.push(n), + t.push(A[n].layerId), + o.push(A[n].boundingBox) + } + return { + layerIds: t, + layerKeys: e, + boundingBoxes: o, + mpkIdxs: i + } + } + , + lC.prototype.getUserIdsOnDemand = function() { + var A = {} + , e = this.getConditionsOnDemand(); + if (e) + for (var t in e) + A[e[t]] = !0; + return A + } + , + lC.prototype.cacheLayerData = function(A, e) { + this.cachedLayerData[A] = e + } + , + lC.prototype.getCachedLayerData = function() { + return this.cachedLayerData + } + , + lC.prototype.clearNodeInfoCacheWithLayerKey = function() { + this.nodeInfosWithLayerKey = {} + } + , + lC.prototype.cacheNodeInfoByLayerKey = function(A, e) { + this.nodeInfosWithLayerKey[A] || (this.nodeInfosWithLayerKey[A] = []), + this.nodeInfosWithLayerKey[A].push(e) + } + , + lC.prototype.cacheNodeInfosWithLayerKey = function() { + var A = this.model.getModelDescriptor().getAllNodeInfos(); + for (var e in A) + for (var t = A[e], i = 0, o = t.length; o > i; i += 1) { + var n = t[i] + , r = this.formatLayerIds(n.userData); + this.cacheNodeInfoByLayerKey(r[0], n) + } + } + , + lC.prototype.cacheLayerKeys = function(A) { + this.mapLayerKeys = A; + var e = {} + , t = this.getLayerKeyAttributes(); + for (var i in A) { + var o = A[i] + , n = o[t[0]] + , r = o[t[1]]; + e.hasOwnProperty(n) || (e[n] = []), + e.hasOwnProperty(r) || (e[r] = []), + e[n].push(r), + e[r].push(n) + } + this.cacheSpecialtysLevels = e + } + , + lC.prototype.getLayerKeyAttributes = function() { + if (this.cacheAttributes) + return this.cacheAttributes; + var A = [] + , e = Object.keys(this.mapLayerKeys) + , t = this.mapLayerKeys[e[0]]; + for (var i in t) + t.hasOwnProperty(i) && A.push(i); + return this.cacheAttributes = A, + this.cacheAttributes + } + , + lC.prototype.formatLayerIds = function(A) { + var e = []; + if (!A) + return e.push("unknown"), + e; + var t = this.getFileKeyByGeoId(A.originalGeometryId); + return e.push(t || "unknown"), + e + } + , + lC.prototype.getLevelsOrSpecialtys = function(A) { + return this.cacheSpecialtysLevels.hasOwnProperty(A) ? this.cacheSpecialtysLevels[A] : (Bh.warn("Attribute " + A + "has no according levels or specialtys."), + []) + } + , + lC.prototype.getUnionBoundingBoxOnDemand = function() { + var A = this.getBoundingBoxesOnDemand(); + if (A && A.length > 0) { + for (var e = new aA, t = 0, i = A.length; i > t; t += 1) + e.union(A[t]); + return e + } + return null + } + , + lC.prototype.getBoundingBoxesOnDemand = function() { + var A = this.getUsedLayerIdxData(); + return A ? A.boundingBoxes : null + } + , + lC.prototype.setConditionsOnDemandLoad = function(A) { + this.mapNeededConditions = A, + this.setConditionsChanged(!0) + } + , + lC.prototype.setConditionsChanged = function(A) { + this.conditionsChanged = A + } + , + lC.prototype.getConditionsOnDemand = function() { + return this.mapNeededConditions + } + , + lC.prototype.isConditionsChanged = function() { + return this.conditionsChanged + } + ; + var cC = function(A) { + lC.call(this, A) + }; + (cC.prototype = Object.assign(cC.prototype, lC.prototype)).loadLayerDataByIdxs = function(A, e, t, i) { + this.model.getLoader().resetProcessState(e.length), + this.model.getLoader().loadGeopkOnDemand(e, (function(A, e) { + t && t(e - A, e) + } + ), i) + } + , + cC.prototype.dealLayerDataLoading = function(A, e, t, i, o) { + var n = A.mpk; + if (0 !== n.addIdxs.length || 0 !== n.removeIdxs.length) { + var r = !1; + n.removeIdxs.length > 0 && (r = !0, + t && t(null, n.removeIdxs)), + n.addIdxs.length > 0 ? this.loadLayerDataByIdxs(null, n.addIdxs, i, (function() { + e && e(o) + } + )) : r ? e && e(o) : o && o() + } else + e && e(o) + } + ; + var hC = function(A) { + return sC.call(this, A), + this.layerProvider = new cC(A), + this + }; + (hC.prototype = Object.assign(hC.prototype, sC.prototype)).settleData = function(A) { + this.addNodeInfoToOctantMap(), + this.getLayerProvider().cacheNodeInfosWithLayerKey(), + this.loaded = !0, + A && A() + } + , + hC.prototype.clearData = function() { + this.model.clearNodeGroup(), + this.model.clearMeshFromOctantMap(), + this.getLayerProvider().clearData(), + this.model.clearWireframeElementCount(), + this.defaultManager.clearData(), + this.instancedManager.clearData(), + this.clearLoadedState() + } + , + hC.prototype.addNodeInfoToOctantMap = function() { + var A = this.model.manager + , e = this.model.getEncodedDatabagId(); + this.model.getModelDescriptor().traverseNodeInfosByComponent((function(t, i) { + A.addNodeInfoToOctantMap(e, t, i) + } + )) + } + , + hC.prototype.initData = function(A) { + var e = this; + e.model.getModelDescriptor().parseItemData(e.layerProvider.getConditionsOnDemand(), (function() { + e.settleData(), + e.loadedUserIdsObject = e.getLayerProvider().getUserIdsOnDemand(), + e.loadedUserIds = Object.keys(e.loadedUserIdsObject), + A && A() + } + )) + } + , + hC.prototype.unload = function(A, e) { + var t = this; + this.model.getModelDescriptor().clearReferencedMeshCacheByGeopkIdxs(e, (function(A) { + t.defaultManager.disposeGeometry(A) + } + )) + } + ; + var dC = function(A, e) { + return hC.call(this, A, e), + this.tag = "layer", + this.defaultManager = new Of(e,A), + this.instancedManager = new Hf(A), + this.loader = new aC(this), + this + }; + (dC.prototype = Object.assign(dC.prototype, hC.prototype)).prepare = function(A, e) { + this.isAllReady() && (this.prepareWireframe(this.model, e), + this.model.getMaterialManager()._updateTextureMapping(this.model)) + } + , + dC.prototype.dealMeshNodes = function(A) { + delete this.model.manager.octantToObjectMap[this.model.modelKey], + this.addNodeInfoToOctantMap(); + var e = this.model.getModelDescriptor().getInstancedUserIdsByCategory(this.loadedUserIds); + this.model._removeNodeGroup(gp.INSTANCEGEOMETRY), + this.model._removeNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY), + this.instancedManager.meshManager.dispose(), + this.instancedManager.meshManager.disposeInstanceGeometries(), + e.length && this.instancedManager.createMeshNodes(this.model, e); + var t = this.model.getModelDescriptor().getStandardUserIdsByCategory(this.loadedUserIds); + this.model._removeNodeGroup(gp.GEOMETRY), + this.model._removeNodeGroup(gp.WIREFRAME), + this.defaultManager.meshManager.dispose(), + this.defaultManager.meshManager.clearData(), + t.length ? this.defaultManager.asyncCreateMeshNodes(this.model, t, A) : A && A() + } + , + dC.prototype.unloadComponents = function(A, e) { + for (var t = this.model.modelKey, i = 0, o = A.length; o > i; i += 1) + this.model.manager.removeBatchedMeshFromOctantMap(t, A[i]); + this.model.getModelDescriptor().clearNodeInfoCacheByComponentsKey(A), + this.dealMeshNodes(e) + } + ; + var pC = function(A) { + $u.call(this, A) + }; + (pC.prototype = Object.assign(pC.prototype, $u.prototype)).parseItemData = function(A, e) { + var t = this.model; + (ap(t.dataVersion, "2.0.0") || void 0 === t.dataVersion) && (Bh.time("升级几何结构"), + this._updateV1ToV2(t), + t.dataVersion = "2.0.0", + Bh.timeEnd("升级几何结构")), + this._readMaterialBuffer(t), + t.hasAnimation && vc.EnableAnimation ? (this._parseClips(), + this._parseBones()) : this._parseGeo(); + var i = {}; + if (!i) + return Bh.log("Empty scene"), + !1; + var o = this.referencedMeshCache; + if (Bh.time("_readItemData"), + !o.bufferData || 0 >= Object.keys(o.bufferData).length) + return !0; + if (A) + for (var n = 0, r = A.length; r > n; n += 1) + o.components[A[n]] && this._readItemData(i, A[n], A[n], void 0, 0); + else + for (var a in o.components) + this._readItemData(i, a, a, void 0, 0); + t.hasAnimation && vc.EnableAnimation && this._parseNodes(), + Bh.timeEnd("_readItemData"), + i = null, + e && e() + } + ; + var gC = function(A) { + nC.call(this, A), + this.descriptor = new pC(A.model) + }; + (gC.prototype = Object.assign(gC.prototype, nC.prototype)).loadSceneAndMpks = function(A) { + this._loadScene(0), + this._loadLayerKey(), + vc.BorderLineDelayLoaded || this._loadAllBorderlines(A) + } + , + gC.prototype.getSceneTaskCount = function(A) { + var e = 2; + return vc.BorderLineDelayLoaded || (e += this.getAllBorderlineCount()), + e + } + ; + var uC = function(A) { + of.call(this, A), + this.nodeGroupName = "PickingMeshGroup" + }; + Object.assign(uC.prototype, of.prototype), + eu(uC, [{ + key: "disposePickingNodeById", + value: function(A) { + for (var e = Object.keys(this.pickingNodeMap[A]), t = 0, i = e.length; i > t; t += 1) + for (var o = this.pickingNodeMap[A][e[t]], n = 0, r = o.length; r > n; n += 1) + o[n].material = null, + o[n].geometry.dispose(), + o[n] = null + } + }, { + key: "removeFormPickingNodeGroup", + value: function(A) { + if (this.pickingNodeGroup) + for (var e = Object.keys(this.pickingNodeMap[A]), t = 0, i = e.length; i > t; t += 1) + for (var o = this.pickingNodeMap[A][e[t]], n = 0, r = o.length; r > n; n += 1) + this.pickingNodeGroup.remove(o[n]) + } + }, { + key: "addToPickingNodeMap", + value: function(A, e, t) { + this.pickingNodeMap || (this.pickingNodeMap = {}), + this.pickingNodeMap[A] || (this.pickingNodeMap[A] = {}), + this.pickingNodeMap[A][e] = t, + this.addToPickingNodeGroup(t) + } + }, { + key: "generatePickingMeshes", + value: function(A) { + var e = this; + this.manager.traverseActiveMeshMap(A, (function(A, t, i) { + if (!e._isExistNode(A, t)) { + for (var o = [], n = 0, r = i.length; r > n; n += 1) { + var a = i[n] + , s = new he; + s.setAttribute("position", a.geometry.getAttribute("position")), + s.setIndex(a.geometry.getIndex()), + s._withDrawRange && s.setDrawRange(a.geometry.drawRange.start, a.geometry.drawRange.count); + var l = new (a.isLineSegments ? jo : Ue)(s,Kd.DefaultMaterial); + Tu.copyMeshProperties(l, a), + l.renderOrder = 1, + o.push(l) + } + e.addToPickingNodeMap(A, t, o) + } + } + )) + } + }, { + key: "_isExistNode", + value: function(A, e) { + return !!(this.pickingNodeMap && this.pickingNodeMap[A] && this.pickingNodeMap[A][e]) + } + }, { + key: "updatePickingMeshesState", + value: function(A, e, t) { + if (this.pickingNodeMap) + for (var i = this.pickingNodeMap, o = this.manager, n = 0, r = e.length; r > n; n += 1) { + var a = e[n]; + if (i[a] && o.isPickableNode(a)) { + var s = o.getActiveMeshMapById(a); + if (s) + for (var l = Object.keys(i[a]), c = 0, h = l.length; h > c; c += 1) { + var d = l[c]; + if (s[d]) { + var p = i[a][d]; + if (p) + for (var g = 0, u = p.length; u > g; g += 1) + p[g].material = A, + p[g].visible = !0 + } + } + } + } + } + }, { + key: "resetPickingMeshesState", + value: function() { + if (this.pickingNodeMap) + for (var A = this.pickingNodeMap, e = Object.keys(A), t = 0, i = e.length; i > t; t += 1) + for (var o = e[t], n = Object.keys(A[o]), r = 0, a = n.length; a > r; r += 1) + for (var s = A[o][n[r]], l = 0, c = s.length; c > l; l += 1) + s[l].visible = !1 + } + }, { + key: "updatePickingMeshes", + value: function(A, e, t) { + return this.generatePickingMeshes(e), + this.resetPickingMeshesState(), + this.updatePickingMeshesState(A, e, t), + this.getPickingNodeGroup() + } + }]); + var fC = function(A, e) { + So.call(this), + this.type = "SkinnedMeshEx", + this.matrixAutoUpdate = !0, + this.active = !1, + this.guid = "", + this.key = "", + this.typeEx = "", + this.geometry = A || Tu.EmptyGeometry, + this.material = e || Kd.DefaultMaterial, + this.visible = !1, + this.castShadow = vc.EnableShadow, + this.receiveShadow = vc.EnableShadow + }; + (fC.prototype = Object.create(So.prototype)).constructor = fC, + fC.prototype.init = function(A) { + A && A.parent && A.parent.add(this) + } + , + fC.prototype.destroy = function() { + this.parent && this.parent.remove(this), + this.userData && (this.userData = null), + this.geometry = null, + this.material = null + } + , + fC.prototype.isVisible = function() { + return this.visible && this.active + } + , + fC.prototype.spawn = function(A) { + void 0 !== A.guid && (this.guid = A.guid), + void 0 !== A.key && (this.key = A.key), + void 0 !== A.name && (this.name = A.name), + void 0 !== A.typeEx && (this.typeEx = A.typeEx), + A.geometry && (this.geometry = A.geometry), + A.material && (this.material = A.material), + A.matrix ? (this.matrix.copy(A.matrix), + this.updateMatrixWorld(!0)) : (this.matrix.identity(), + this.updateMatrixWorld(!0)), + this.modelKey = A.modelKey ? A.modelKey : "", + A.userData ? this.userData = A.userData : this.userData && (this.userData = null), + void 0 !== A.visible && (this.visible = A.visible), + this.renderOrder = A.renderOrder || 0, + this.active = !0, + this.visible = !0, + this.frustumCulled = !1, + this.matChange = !1 + } + , + fC.prototype.clear = function() { + this.geometry = Tu.EmptyGeometry, + this.material = Kd.DefaultMaterial, + this.active = !1, + this.visible = !0, + this.guid = "", + this.key = "", + this.typeEx = "", + this.frustumCulled = !0, + this.material.visible = !1 + } + , + fC.prototype.intersectBoxWithDistance = function() { + var A = new aA; + return function(e, t) { + var i = this.geometry + , o = this.material + , n = this.matrixWorld; + return t && (n = new M).multiplyMatrices(this.matrixWorld, t), + void 0 === o ? -1 : (i.boundingBox || i.computeBoundingBox(), + A.copy(i.boundingBox), + A.applyMatrix4(n), + e.ray.intersectBoxWithDistance(A)) + } + }(), + fC.prototype.intersectBoxWithDistanceByIndices = function(A, e) { + var t = this.matrixWorld + , i = this.computeBoundingBox(e); + return i.applyMatrix4(t), + A.ray.intersectBoxWithDistance(i) + } + , + fC.prototype.intersectBoxWithClipPlane = function(A, e) { + var t = this.matrixWorld + , i = this.computeBoundingBox(e); + return i.applyMatrix4(t), + i.intersectsPlane(A) + } + , + fC.prototype.raycastByIndices = function() { + var A = new M + , e = new CA + , t = new cA + , i = new y + , o = new y + , n = new y + , r = new s + , a = new s + , l = new s + , c = new y + , h = new y + , d = new y + , p = new M; + function g(A, e, t, s, g, u, f, m) { + i.fromBufferAttribute(s, u), + o.fromBufferAttribute(s, f), + n.fromBufferAttribute(s, m); + var C = function(A, e, t, i, o, n, r) { + var a = A.material; + if (null === (Array.isArray(a) ? t.intersectTriangle(i, o, n, !1, r) : 1 === a.side ? t.intersectTriangle(n, o, i, !0, r) : t.intersectTriangle(i, o, n, 2 !== a.side, r))) + return null; + d.copy(r), + d.applyMatrix4(p); + var s = e.ray.origin.distanceTo(d); + return e.near > s || s > e.far ? null : { + distance: s, + point: d.clone(), + object: A + } + }(A, e, t, i, o, n, h); + if (C) { + if (g && g.array && g.array.length && (r.fromBufferAttribute(g, u), + a.fromBufferAttribute(g, f), + l.fromBufferAttribute(g, m), + C.uv = function(A, e, t, i, o, n, r) { + return RA.getBarycoord(A, e, t, i, c), + o.multiplyScalar(c.x), + n.multiplyScalar(c.y), + r.multiplyScalar(c.z), + o.add(n).add(r), + o.clone() + }(h, i, o, n, r, a, l)), + s.instanceMatrix) { + var v = i.clone().applyMatrix4(s.instanceMatrix) + , I = o.clone().applyMatrix4(s.instanceMatrix) + , E = n.clone().applyMatrix4(s.instanceMatrix); + C.face = new GA(u,f,m,RA.getNormal(v, I, E, new y)) + } else + C.face = new GA(u,f,m,RA.getNormal(i, o, n, new y)); + C.faceIndex = u + } + return C + } + return function(i, o, n, r) { + var a = this.geometry + , s = this.material; + if (r) { + a = this.geometry, + s = this.material; + if ((p = new M).multiplyMatrices(this.matrixWorld, r), + void 0 === s) + return; + if (null === a.boundingSphere && a.computeBoundingSphere(), + t.copy(a.boundingSphere), + t.applyMatrix4(p), + !1 === i.ray.intersectsSphere(t)) + return; + if (A.getInverse(p), + e.copy(i.ray).applyMatrix4(A), + null !== a.boundingBox && !1 === e.intersectsBox(a.boundingBox)) + return; + var l = null + , c = null + , h = null + , d = null + , u = a.index; + (I = a.attributes.position).instanceMatrix = r; + var f = a.attributes.uv + , m = null + , C = null; + if (null !== u) + for (m = 0, + C = u.count; C > m; m += 3) + c = u.getX(m), + h = u.getX(m + 1), + d = u.getX(m + 2), + (l = g(this, i, e, I, f, c, h, d)) && (l.faceIndex = Math.floor(m / 3), + o.push(l)); + else + for (m = 0, + C = I.count; C > m; m += 3) + (l = g(this, i, e, I, f, c = m, h = m + 1, d = m + 2)) && (l.index = c, + o.push(l)) + } else { + if (p = this.matrixWorld, + void 0 === s) + return; + if (t.copy(this.computeBoundingSphere(n)), + t.applyMatrix4(p), + !1 === i.ray.intersectsSphere(t)) + return; + A.getInverse(p), + e.copy(i.ray).applyMatrix4(A); + var y = this.computeBoundingBox(n); + if (!1 === e.intersectsBox(y)) + return; + l = null, + c = null, + h = null, + d = null; + var v, I = a.attributes.position, E = (f = a.attributes.uv, + m = null, + n.indexStart), B = n.indexStart + n.indexCount, x = a.getIndex().array; + for (m = E, + v = B; v > m; m += 3) + (l = g(this, i, e, I, f, c = x[m], h = x[m + 1], d = x[m + 2])) && (l.faceIndex = Math.floor(m / 3), + o.push(l)) + } + } + }(), + fC.prototype.minDistanceToTri = function(A, e, t) { + function i(A, e) { + return new y(A.x - e.x,A.y - e.y,A.z - e.z) + } + function o(A, e) { + return new y(A.x + e.x,A.y + e.y,A.z + e.z) + } + function n(A, e, t) { + return new y(A.x + e.x * t,A.y + e.y * t,A.z + e.z * t) + } + function r(A, e) { + return A.x * e.x + A.y * e.y + A.z * e.z + } + function a(A, e) { + return new y(A.y * e.z - A.z * e.y,A.z * e.x - A.x * e.z,A.x * e.y - A.y * e.x) + } + function s(A, e, t, s) { + var l, c = r(e, s), h = r(e, e), d = r(s, s), p = i(t, A), g = r(e, p), u = r(s, p), f = null; + 0 > (f = (g * d - u * c) / (h * d - c * c)) || isNaN(f) ? f = 0 : f > 1 && (f = 1); + var m = null + , C = null + , y = null + , v = null; + return 0 >= (l = (f * c - u) / d) || isNaN(l) ? (C = t, + 0 >= (f = g / h) || isNaN(f) ? (m = A, + y = i(t, A)) : 1 > f ? (m = n(A, e, f), + v = a(p, e), + y = a(e, v)) : y = i(t, m = o(A, e))) : 1 > l ? (C = n(t, s, l), + 0 >= f || isNaN(f) ? (m = A, + v = a(p, s), + y = a(s, v)) : 1 > f ? (m = n(A, e, f), + 0 > r(y = a(e, s), p) && y.multiplyScalar(-1)) : (v = a(p = i(t, m = o(A, e)), s), + y = a(s, v))) : (C = o(t, s), + 0 >= (f = (c + g) / h) || isNaN(f) ? (m = A, + y = i(C, A)) : 1 > f ? (m = n(A, e, f), + v = a(p = i(C, A), e), + y = a(e, v)) : y = i(C, m = o(A, e))), + { + vec: y, + closestP: m, + closestQ: C + } + } + function l(A, e) { + var t = null + , o = null + , l = [] + , c = [] + , h = null; + l[0] = i(A[1], A[0]), + l[1] = i(A[2], A[1]), + l[2] = i(A[0], A[2]), + c[0] = i(e[1], e[0]), + c[1] = i(e[2], e[1]), + c[2] = i(e[0], e[2]); + for (var d = null, p = null, g = null, u = 0, f = A[0].distanceToSquared(e[0]) + 1, m = 0; 3 > m; m += 1) + for (var C = 0; 3 > C; C += 1) { + var y = s(A[m], l[m], e[C], c[C]); + h = y.vec; + var v = r(d = i(o = y.closestQ, t = y.closestP), d); + if (f >= v) { + p = t.clone(), + g = o.clone(), + f = v; + var I = r(i(A[(m + 2) % 3], t), h) + , E = r(i(e[(C + 2) % 3], o), h); + if (0 >= I && E >= 0) + return { + start: t.clone(), + end: o.clone(), + minDistance: Math.sqrt(v) + }; + 0 > I && (I = 0), + E > 0 && (E = 0), + r(d, h) - I + E > 0 && (u = 1) + } + } + var B = a(l[0], l[1]) + , x = r(B, B); + if (x > 1e-15) { + var S = []; + d = i(A[0], e[0]), + S[0] = r(d, B), + d = i(A[0], e[1]), + S[1] = r(d, B), + d = i(A[0], e[2]), + S[2] = r(d, B); + var w = -1; + if (S[0] > 0 && S[1] > 0 && S[2] > 0 ? S[w = S[1] > S[0] ? 0 : 1] > S[2] && (w = 2) : 0 > S[0] && 0 > S[1] && 0 > S[2] && S[2] > S[w = S[0] > S[1] ? 0 : 1] && (w = 2), + w >= 0 && (u = 1, + r(d = i(e[w], A[0]), a(B, l[0])) > 0 && r(d = i(e[w], A[1]), a(B, l[1])) > 0 && r(d = i(e[w], A[2]), a(B, l[2])) > 0)) + return t = n(e[w], B, S[w] / x), + o = e[w].clone(), + t.distanceTo(o) + } + var M = a(c[0], c[1]) + , b = r(M, M); + if (b > 1e-15) { + var U = []; + d = i(e[0], A[0]), + U[0] = r(d, M), + d = i(e[0], A[1]), + U[1] = r(d, M), + d = i(e[0], A[2]), + U[2] = r(d, M); + w = -1; + if (U[0] > 0 && U[1] > 0 && U[2] > 0 ? U[w = U[1] > U[0] ? 0 : 1] > U[2] && (w = 2) : 0 > U[0] && 0 > U[1] && 0 > U[2] && U[2] > U[w = U[0] > U[1] ? 0 : 1] && (w = 2), + w >= 0 && (u = 1, + r(d = i(A[w], e[0]), a(M, c[0])) > 0 && r(d = i(A[w], e[1]), a(M, c[1])) > 0 && r(d = i(A[w], e[2]), a(M, c[2])) > 0)) + return { + start: t = A[w].clone(), + end: (o = n(A[w], M, U[w] / b)).clone(), + minDistance: t.distanceTo(o) + } + } + return u ? (t = p, + o = g, + { + start: p.clone(), + end: g.clone(), + minDistance: Math.sqrt(f) + }) : { + start: p.clone(), + end: g.clone(), + minDistance: 0 + } + } + var c = new y + , h = new y + , d = new y; + function p(A, e, t, i, o, n) { + c.fromBufferAttribute(e, t), + h.fromBufferAttribute(e, i), + d.fromBufferAttribute(e, o), + n && (c.applyMatrix4(n), + h.applyMatrix4(n), + d.applyMatrix4(n)), + A.push(c), + A.push(h), + A.push(d) + } + for (var g = { + start: null, + end: null, + minDistance: Number.POSITIVE_INFINITY + }, u = this.geometry, f = u.attributes.position, m = e ? e.indexStart : 0, C = u.getIndex().array, v = m, I = e ? e.indexStart + e.indexCount : C.length; I > v; v += 3) { + var E = []; + p(E, f, C[v], C[v + 1], C[v + 2], t); + var B = l(A, E); + if (0 >= B.minDistance) + return g.minDistance = 0, + g; + g.minDistance > B.minDistance && (g.minDistance = B.minDistance, + g.start = B.start.clone(), + g.end = B.end.clone()) + } + return g + } + , + fC.prototype.computeBoundingBox = function(A) { + var e = new aA + , t = this.geometry.attributes.position.array + , i = null + , o = null; + return A ? (i = A.positionStart, + o = A.positionStart + A.positionCount) : (i = 0, + o = t.length), + this.setBoundingBoxFromArray(e, t, i, o), + e + } + , + fC.prototype.computeBoundingSphere = function(A) { + var e = new aA + , t = new y + , i = this.geometry.attributes.position.array + , o = null + , n = null; + A ? (o = A.positionStart, + n = A.positionStart + A.positionCount) : (o = 0, + n = i.length); + var r = new cA + , a = r.center; + this.setBoundingBoxFromArray(e, i, o, n), + e.getCenter(a); + for (var s = 0, l = o, c = n; c > l; l += 3) + t.x = i[l], + t.y = i[l + 1], + t.z = i[l + 2], + s = Math.max(s, a.distanceToSquared(t)); + return r.radius = Math.sqrt(s), + r + } + , + fC.prototype.setBoundingBoxFromArray = function(A, e, t, i) { + for (var o = Number(1 / 0), n = Number(1 / 0), r = Number(1 / 0), a = -1 / 0, s = -1 / 0, l = -1 / 0, c = t, h = i; h > c; c += 3) { + var d = e[c] + , p = e[c + 1] + , g = e[c + 2]; + o > d && (o = d), + n > p && (n = p), + r > g && (r = g), + d > a && (a = d), + p > s && (s = p), + g > l && (l = g) + } + A.min.set(o, n, r), + A.max.set(a, s, l) + } + ; + var mC = function(A) { + return Rf.call(this), + this.manager = A, + this.nodePriority = { + high: [], + medium: [], + low: [] + }, + this.visibleOctant = [], + this.occlusionVisibleOctant = [], + this.usedNodeInfosObject = {}, + this.lineNodes = {}, + this.blinkMaterials = [], + this.selectedMeshes = [], + this.nonSelectedMeshes = [], + this.selectedObjectIds = [], + this.activeMeshMap = {}, + this + }; + (mC.prototype = Object.create(Rf.prototype)).destroy = function() { + this.dispose(), + this.clearData(), + this.pickingNodeGenerator && (this.pickingNodeGenerator.destroy(), + this.pickingNodeGenerator = null), + this.activeMeshMap = null, + this.manager = null, + this.nodePriority = null, + this.visibleOctant = null, + this.occlusionVisibleOctant = null, + this.nodePriority = null, + this.lineNodes = null, + this.blinkMaterials = null + } + , + mC.prototype.disposeLineNodes = function() { + for (var A in this.lineNodes) { + var e = this.lineNodes[A]; + e.geometry.dispose(), + e = null, + delete this.lineNodes[A] + } + } + , + mC.prototype.clearData = function() { + this.pickingNodeGenerator && this.pickingNodeGenerator.clearData(), + this._clearActiveMeshMap(), + this.disposeGeometries(), + this.disposeLineNodes(), + this._clearNodePriorityData(!0), + this._clearUsedNodeInfosObject(), + this.visibleOctant.length = 0, + this.occlusionVisibleOctant.length = 0 + } + , + mC.prototype.update = function(A, e, t) { + this._updateMeshNodes(A, e, t) + } + , + mC.prototype.cullNodes = function(A, e) { + this._clearNodePriorityData(!1), + this._adjustLowNodePriorityLength(A); + var t = 0; + return t = vc.EnableOctant ? this._cullNodesWithOctant(A, e) : this._cullNodesWithFull(A), + this._calcPrioritizedNodeCount(A, t) + } + , + mC.prototype.getPriorityNodes = function() { + return [this.nodePriority.high, this.nodePriority.medium, this.nodePriority.low] + } + , + mC.prototype._cullNodesWithOctant = function(A, e) { + var t = 0 + , i = 0 + , o = this.manager.getLoader(A).getOctreeRootNodeInner() + , n = this.manager.getLoader(A).getOctreeRootNodeOuter(); + if (this.manager.getContainsCamera(A) || !n) + return this.visibleOctant.length = 0, + o && this._frustumCull(A, e, o), + n && this._frustumCull(A, e, n), + (i = this.visibleOctant.length) > 0 && (this._sortVisibleOctant(e), + t = this._logicCull(A, !0, !0, t, i)), + t; + n && (this.visibleOctant.length = 0, + this._frustumCull(A, e, n), + (i = this.visibleOctant.length) > 0 && (this._sortVisibleOctant(e), + t = this._logicCull(A, !0, !1, t, i))); + var r = this.manager.getFilter(A); + (Object.keys(this.nodePriority.low).length + this.nodePriority.high.length + this.nodePriority.medium.length < this.manager.getRenderableCount(A) || r._hasRenderPromotionFilter()) && ((o = this.manager.getLoader(A).getOctreeRootNodeInner()) && (this.visibleOctant.length = 0, + this._frustumCull(A, e, o), + (i = this.visibleOctant.length) > 0 && (this._sortVisibleOctant(A, e), + t = this._logicCull(A, !0, !1, t, i)))); + return t + } + , + mC.prototype._cullNodesWithFull = function(A) { + var e = A.getModelDescriptor().getComponentCount(); + return 0 === e ? 0 : this._logicCullWithFull(A, e) + } + , + mC.prototype._calcPrioritizedNodeCount = function(A, e) { + var t = e + this.nodePriority.high.length + this.nodePriority.medium.length; + return t > this.manager.getRenderableCount(A) && (t = this.manager.getRenderableCount(A)), + t + } + , + mC.prototype._updateMeshNodes = function(A, e, t) { + if (this.filter = A.getFilter(), + A.isOnlyWireframe()) { + A._getNodeGroup(gp.GEOMETRY).visible = !1 + } else { + var i = A.getModelDescriptor().getStandardNodeInfos(); + if (i) { + this.clearSelectedObjectIds(), + A._getNodeGroup(gp.GEOMETRY).visible = !0; + var o = A.manager.filter + , n = A.selectedMaterial + , r = A.manager.sceneState + , a = A.manager; + if (a.octantToObjectMap && a.octantToObjectMap[A.modelKey]) { + var s = a.octantToObjectMap[A.modelKey].mesh + , l = A.materialManager.materials + , c = this.manager.hiddenUserIdSetObject + , h = this.manager.overrideUserIdSetObject + , d = this.manager.transparentUserIdSetObject + , p = this.manager.selectedUserIdSetObject + , g = this.manager.hoveredUserIdSetObject; + this.blinkMaterials.length = 0, + e || (e = A.getModelDescriptor().getStandardUserIds()), + vc.TranslucentDepthDisabled && (n.depthWrite = !n.transparent); + var u = o._getMaterialByName("scene"); + vc.TranslucentDepthDisabled && (u.depthWrite = !1); + for (var f = 0; e.length > f; f += 1) { + var m = e[f]; + if (i[m]) { + var C = i[m][0]; + if (C) + if (s[m]) { + var y = s[m][0]; + if (y instanceof vu && (y = y.object), + y) + if (c && c[m]) + y.visible = !1; + else { + y.visible = !0; + var v = []; + if (d && d[m] && !vc.EnableSelectionByTranslucent) { + for (var I = 0; C.materialId.length > I; I += 1) + v.push(t || u); + y.material = v + } else if (p && p[m]) + if (this.cacheSelectedObjectIds(m), + vc.PickingEffect) + for (var E = o._getOverrideMaterial(C), B = 0; C.materialId.length > B; B += 1) + v.push(t || E); + else { + for (var x = 0; C.materialId.length > x; x += 1) + v.push(t || n); + y.material = v + } + else if (g && g[m]) { + for (var S = 0; C.materialId.length > S; S += 1) + if (h[m]) { + var w = o._getMaterialByName(h[m]) + , M = r.getHoverMaterial(t || w); + v.push(M) + } else { + var b = r.getHoverMaterial(t || l[C.materialId[S]]); + v.push(b) + } + y.material = v + } else if (d && d[m]) { + for (var U = 0; C.materialId.length > U; U += 1) + v.push(t || u); + y.material = v + } else if (h && h[m]) { + for (var F = 0; C.materialId.length > F; F += 1) + if (Array.isArray(h[m])) { + (K = l[C.materialId[F]]) || (K = o._getMaterialByName(h[m][F])), + v.push(t || K) + } else { + var K = o._getMaterialByName(h[m]); + v.push(t || K) + } + y.material = v + } else { + for (var Q = 0; C.materialId.length > Q; Q += 1) { + K = l[C.materialId[Q]]; + v.push(t || K) + } + y.material = v + } + } + } else + Bh.error(m, "没有创建对应的mesh") + } + } + } + } + } + } + , + mC.prototype._getUsableMaterial = function(A, e, t, i) { + var o = e.materialId + , n = e.userId + , r = A.materialManager.materials + , a = A.manager.sceneState + , s = A.manager.filter + , l = null + , c = a.isSelected(n); + !0 !== c || s._isPickable(e) || (c = !1), + t ? vc.PickingEffect ? l = s._getOverrideMaterial(e) : (l = s._getOverrideMaterial(e)) && !c || (l = t) : i && (l = s._getOverrideMaterial(e)); + var h = A.manager.getOverrideMaterialByNodeInfo(e); + return l = l || h || r[o], + vc.Hover && !vc.EnableRenderPass && a.hoverId === n && !1 === c && (l = a.getHoverMaterial(l)), + l + } + , + mC.prototype._dealMeshes = function(A, e, t, i, o) { + var n = this.getGeometryByNodeInfo(A, e) + , r = A.pool + , a = 0; + if (Array.isArray(n)) + for (var s = 0, l = n.length; l > s; s += 1) { + a = r.get({ + modelKey: A.modelKey, + nodeId: e.nodeId, + userId: e.userId, + originalId: e.originalId, + userData: e.userData, + geometry: n[s], + matrix: e.matrix, + material: i, + renderOrder: i.transparent ? 0 : vc.MaximumDepth - e.cellDepth, + visible: t + }), + null + } + else + a = r.get({ + modelKey: A.modelKey, + nodeId: e.nodeId, + userId: e.userId, + originalId: e.originalId, + userData: e.userData, + geometry: n, + matrix: e.matrix, + material: i, + renderOrder: i.transparent ? 0 : vc.MaximumDepth - e.cellDepth, + visible: t + }); + 0 > a || o.curOctantId !== e.octantId && (a > 0 && A.manager.addObjectRangeToOctantMap(o.curOctantId, o.octantStartIndex, a - 1), + o.octantStartIndex = a, + o.curOctantId = e.octantId) + } + , + mC.prototype._dealLineSegments = function(A, e, t, i) { + var o = this.getGeometryByNodeInfo(A, e); + if (o) { + var n = this._getLineSegmentsNodeGroup(A) + , r = this.lineNodes[e.nodeId]; + r || ((r = new cf(o,i)).nodeId = e.nodeId, + r.name = e.name, + r.geometryId = e.geometryId, + r.modelKey = A.modelKey, + this.lineNodes[e.nodeId] = r), + r.material = i, + r.visible = t, + n.add(r), + r.updateMatrixWorld(!0), + this._cacheActiveMesh(e.userId, e.nodeId, r) + } + } + , + mC.prototype._frustumCull = function(A, e, t) { + var i = A.manager + , o = e.getFrustum() + , n = vc.OctantDepth + , r = e.projScreenMatrix + , a = new aA; + function s(A, e, t, i, o) { + var n = null; + if (e && t > A.depth && (a.set(A.min, A.max), + n = e.intersectsBox(a)), + n) { + if (i) { + var l = a.applyMatrix4(r) + , c = l.getSize().length() + , h = l.getCenter().z; + A.priority = c / (h = h > 1e-6 ? h : 1e-6), + o.push(A) + } else + o.push(A); + for (var d = 0, p = A.childOctants.length; p > d; d += 1) + s(A.childOctants[d], e, t, i, o) + } + } + (vc.DEBUG && i.showOctreeBox(t), + s(t, o, n, !0, this.visibleOctant), + vc.OcclusionTranslucentEnabled) && s(t, this.manager.getFrustumFromOcclusionCamera(), n, !1, this.occlusionVisibleOctant); + return !0 + } + , + mC.prototype._logicCull = function(A, e, t, i, o) { + var n = A.manager + , r = n.filter + , a = r._hasHiddenFileIdFilter() + , s = r._hasOverrideMaterialFilter() + , l = n.sceneState.selectionSet + , c = r._hasRenderPromotionFilter() + , h = this.nodePriority.high + , d = this.nodePriority.medium + , p = this.nodePriority.low + , g = this.nodePriority.low.length + , u = A.getModelDescriptor().getNodeInfosWithComponentKey(); + function f(A, e) { + if (!(a && r._isHiddenFileId(A) || !1 === r._isVisible(A))) + if (l.hasOwnProperty(A.userId) || s && r._hasHighPriorityOverrideMaterial(A)) + h.push(A); + else { + var t = !1; + if (c && r._isRenderPromotion(A) && (t = !0), + e) { + var o = A.userData + , n = o ? o.categoryId : void 0; + n && e[n] && (t = !0) + } + t ? d.push(A) : g > i && (p[i] = A, + i += 1) + } + } + var m = n.getCategoriesFromHighPriority("outer"); + !0 === t && (m = n.getCategoriesFromHighPriority("inner")); + for (var C = 0, y = 0, v = 0; o > v; v += 1) { + var I = null + , E = 0; + e ? (I = this.visibleOctant[v].octantId, + E = this.visibleOctant[v].depth) : I = v; + var B = u[I]; + if (B) { + var x = this._getUsedNodeInfosByComponentKey(I); + if (!x) { + for (C = 0, + y = B.length; y > C; C += 1) { + (w = B[C]).octantId = I, + w.cellDepth = E, + this._isSatisfied(A, w) && this._cacheUsedNodeInfosByComponentKey(I, w) + } + x = this._getUsedNodeInfosByComponentKey(I) + } + if (x) { + var S = x.default; + for (C = 0, + y = S.length; y > C; C += 1) { + var w; + f(w = S[C], m) + } + } + } + } + return Bh.timeEnd("collectNodeInfo"), + i + } + , + mC.prototype._clearUsedNodeInfosObject = function() { + for (var A in this.usedNodeInfosObject) + delete this.usedNodeInfosObject[A].default, + delete this.usedNodeInfosObject[A].instance, + delete this.usedNodeInfosObject[A]; + this.usedNodeInfosObject = {} + } + , + mC.prototype._getUsedNodeInfosByComponentKey = function(A) { + return this.usedNodeInfosObject[A] + } + , + mC.prototype._cacheUsedNodeInfosByComponentKey = function(A, e) { + this.usedNodeInfosObject[A] || (this.usedNodeInfosObject[A] = {}, + this.usedNodeInfosObject[A].default = [], + this.usedNodeInfosObject[A].instance = []), + this.usedNodeInfosObject[A].default.push(e) + } + , + mC.prototype._isSatisfied = function(A, e) { + var t = A.getLoadedUserIdsObject(); + return !t || Boolean(t[e.userId]) + } + , + mC.prototype._logicCullWithFull = function(A, e) { + return this._logicCull(A, !1, !0, 0, e) + } + , + mC.prototype._sortVisibleOctant = function(A, e) {} + , + mC.prototype._applyOcclusionTranslucent = function(A) { + if (vc.OcclusionTranslucentEnabled) { + var e = A.pool.getObjects() + , t = A.manager.octantToObjectMap + , i = this.occlusionVisibleOctant.length; + if (i > 0) + for (var o = A.manager.getFrustumFromOcclusionCamera(), n = 0; i > n; n += 1) { + var r = t[this.occlusionVisibleOctant[n].octantId]; + if (r && r.length > 0) + for (var a = 0, s = r.length; s > a; a += 2) + for (var l = r[a]; r[a + 1] >= l; l += 1) { + var c = e[l][0]; + Rd.intersectObjectWithFrustum(c, o) && this._overrideOcclusionMaterial(c) + } + } + } + } + , + mC.prototype._overrideOcclusionMaterial = function(A, e) { + var t = e.material; + if (t && !1 === t.transparent) { + var i = A.manager.acquireMaterial() + , o = i.material; + t.color ? o.color.copy(t.color) : i.resetColor(), + o.opacity = vc.OcclusionOpacity, + e.material = o, + e.material.needsUpdate = !0 + } + } + , + mC.prototype._clearNodePriorityData = function(A) { + var e = this.nodePriority; + e.high.length = 0, + e.medium.length = 0, + A && (e.low.length = 0) + } + , + mC.prototype._adjustLowNodePriorityLength = function(A) { + 0 === this.nodePriority.low.length && (this.nodePriority.low.length = this.manager.getRenderableCount(A)) + } + , + mC.prototype._clearLineSegmentsNodeGroup = function(A) { + this._getLineSegmentsNodeGroup(A).clear() + } + , + mC.prototype._getLineSegmentsNodeGroup = function(A) { + return A._getNodeGroup(gp.LINESEGMENTS, { + globalSpace: !0 + }) + } + , + mC.prototype._isLineSegments = function(A) { + return A.type === Qf.EnumNodeItemType.LINE + } + , + mC.prototype.getBlinkMaterials = function(A) { + return this.blinkMaterials + } + , + mC.prototype._makeMesh = function(A, e, t) { + var i = A.modelKey + , o = A.manager + , n = A.getModelDescriptor().getStandardNodeInfos(); + if (n) { + e || (e = A.getModelDescriptor().getInstancedUserIds()); + for (var r = A.getModelDescriptor(), a = A._getNodeGroup(gp.GEOMETRY, { + globalSpace: !0 + }), s = A.materialManager.materials, l = 0, c = e.length; c > l; l += 1) { + var h = A.getModelDescriptor().getNodeInfosByComponentKey(e[l]); + if (!h || !h[0].mesh) + for (var d = n[e[l]], p = 0, g = d.length; g > p; p += 1) { + var u = d[p]; + if (u) { + var f = u.geometryId + , m = this.getGeometryById(f); + if (m) { + var C = u.materialId || r.referencedMeshCache.components[e[l]].matId + , y = null; + if (y = [], + op(A.dataVersion, "1.0") || void 0 === A.dataVersion) { + var v = s[C]; + if (u.materialId = [], + !v) + continue; + if (Array.isArray(v)) + if (v.length > 1) + for (p = 0; v.length > p; p += 1) + u.materialId.push(C + "_" + p), + s[C + "_" + p] = v[p]; + else + s[C] = v[0], + u.materialId.push(C); + else + u.materialId.push(C); + for (p = 0; u.materialId.length > p; p += 1) + y.push(s[u.materialId[p]]) + } else + for (p = 0; C.length > p; p += 1) { + var I = s[C[p]]; + I || (I = Kd.DefaultMaterial), + y.push(I) + } + if (1 > y.length) { + var E = _u[u.type] ? _u[u.type].color : void 0; + E || (Bh.log("Material not found for type: ", u.type), + E = _u.DEFAULT.color), + E || (Bh.log("Default material not found for type: ", u.type), + E = [1, 1, 1, 1]); + var B = new LA(E[0],E[1],E[2]) + , x = B.getHexString() + "_" + E[3] + , S = s[x]; + S || (S = new xr({ + color: B + }), + 1 > E[3] && (S.transparent = !0, + S.opacity = E[3]), + S.side = 2, + s[x] = S), + m.groups = [{ + start: 0, + count: m.index.count, + materialIndex: 0 + }], + u.materialId.push(x), + y.push(S) + } + for (var w = 0; y.length > w; w += 1) + y[w].aoMap && m.attributes.uv && (m.attributes.uv2 = m.attributes.uv); + var M = new Kf(m,y) + , b = { + matrix: u.matrix, + modelKey: i, + name: u.name, + key: u.componentKey, + userData: {}, + typeEx: u.type + }; + M.spawn(b), + a.add(M), + o.addMeshToOctantMap(i, u.componentKey, new Iu(u.componentKey,M)); + var U = { + indexCount: m.index.count, + indexStart: 0, + lightmapIdx: void 0, + nodeId: u.componentKey, + positionCount: 3 * m.attributes.position.count, + positionStart: 0, + userId: u.componentKey + }; + M._indicesGroup = {}, + M._indicesGroup[u.componentKey] = [U], + A.addMeshToInfoMap(u.componentKey, u.componentKey, M, U), + M.geometryId = u.geometryId, + this._cacheActiveMesh(u.userId, u.nodeId, M), + f = null, + C = null, + b = null, + y = null, + m = null, + M = null + } + } + } + } + a.updateMatrixWorld(!0), + t && t() + } + } + , + mC.prototype._makeSkinMesh = function(A, e, t) { + var i = A.modelKey + , o = A.manager + , n = A.getModelDescriptor().getStandardNodeInfos(); + if (n) { + e || (e = A.getModelDescriptor().getInstancedUserIds()); + for (var r = A.getModelDescriptor(), a = A.materialManager.materials, s = 0, l = e.length; l > s; s += 1) + for (var c = n[e[s]], h = 0, d = c.length; d > h; h += 1) { + var p = c[h]; + if (p) { + var g = p.geometryId + , u = this.getGeometryById(g); + if (u) { + var f = p.materialId || r.referencedMeshCache.components[e[s]].matId + , m = null; + m = []; + for (h = 0; f.length > h; h += 1) { + var C = a[f[h]]; + C || (C = Kd.DefaultMaterial), + m.push(C) + } + if (1 > m.length) { + var y = _u[p.type] ? _u[p.type].color : void 0; + y || (Bh.log("Material not found for type: ", p.type), + y = _u.DEFAULT.color), + y || (Bh.log("Default material not found for type: ", p.type), + y = [1, 1, 1, 1]); + var v = new LA(y[0],y[1],y[2]) + , I = v.getHexString() + "_" + y[3] + , E = a[I]; + E || (E = new xr({ + color: v + }), + 1 > y[3] && (E.transparent = !0, + E.opacity = y[3]), + E.side = 2, + a[I] = E), + u.groups = [{ + start: 0, + count: u.index.count, + materialIndex: 0 + }], + p.materialId.push(I), + m.push(E) + } + for (var B = 0; m.length > B; B += 1) + m[B].aoMap && (u.attributes.uv2 = u.attributes.uv); + var x = null; + if ("skinIndex"in u.attributes && "skinWeight"in u.attributes) { + x = new fC(u,m); + for (var S = 0; m.length > S; S += 1) + m[S].skinning = !0; + console.log("SkinnedMesh 类型mesh") + } else + x = new Kf(u,m); + var w = { + matrix: p.matrix, + modelKey: i, + name: p.name, + key: p.componentKey, + userData: {}, + typeEx: p.type + }; + x.spawn(w), + o.addMeshToOctantMap(i, p.componentKey, new Iu(p.componentKey,x)); + var M = { + indexCount: u.index.count, + indexStart: 0, + lightmapIdx: void 0, + nodeId: p.componentKey, + positionCount: u.attributes.position.count, + positionStart: 0, + userId: p.componentKey + }; + return x._indicesGroup = {}, + x._indicesGroup[p.componentKey] = [M], + A.addMeshToInfoMap(p.componentKey, p.componentKey, x, M), + x.geometryId = p.geometryId, + this._cacheActiveMesh(p.userId, p.nodeId, x), + g = null, + f = null, + w = null, + m = null, + u = null, + x + } + } + } + } + } + , + mC.prototype._readBufferInfo = function(A, e) { + var t = A.getModelDescriptor().getStandardNodeInfos(); + if (t) { + e || (e = A.getModelDescriptor().getInstancedUserIds()); + for (var i = A.getModelDescriptor(), o = A.materialManager.materials, n = A.materialManager.textures, r = 0, a = e.length; a > r; r += 1) + for (var s = t[e[r]], l = 0, c = s.length; c > l; l += 1) { + var h = i.referencedMeshCache.components[s[l].componentKey] + , d = h.type; + if (-1 !== h.geoId) { + var p = this.getGeometryById(h.geoId); + if (p || (p = this.getGeometryByNodeInfo(A, s[l]))) + if (np(A.dataVersion, "2.0.0")) + ; + else { + var g = o[h.matId]; + if (g) { + if (A.textureNeedsUpdate && void 0 !== A.dataVersion && ap(A.dataVersion, "2.0.0") && (A.textureNeedsUpdate = !1, + g.textures.length > 0)) + if (g.materials.length > 1) + for (l = 0; g.UVgroup.length > l; l += 1) + for (m = (f = g.UVgroup[l]).start, + C = f.count, + y = f.textureIndex, + r = 0; g.groups.length > r; r += 1) { + E = (v = g.groups[r]).count, + B = v.materialIndex; + if ((m === (I = v.start) || m + C === I + E || I > m && C > E) && C >= E) { + S = g.materials[B]; + (x = n[g.textures[y]]) && S && (S.map = x) + } + } + else + g.materials[0].map = n[g.textures[0]] + } else if (g = this._readMaterialBuffer(h.matId, A)) { + if (0 === g.materials.length) { + (v = _u[d] ? _u[d].color : void 0) || (Bh.log("Material not found for type: ", d), + v = _u.DEFAULT.color), + v || Bh.log("Default material not found for type: ", d); + var u = new xr({ + color: new LA(v[0],v[1],v[2]) + }); + 1 > v[3] && (u.transparent = !0, + u.opacity = v[3]), + u.side = 2, + g.materials.push(u), + g.groups.push({ + start: 0, + count: c = p.index.count, + materialIndex: 0 + }) + } + if (g.textures.length > 0) + if (g.materials.length > 1) + for (var l = 0; g.UVgroup.length > l; l += 1) + for (var f, m = (f = g.UVgroup[l]).start, C = f.count, y = f.textureIndex, r = 0; g.groups.length > r; r += 1) { + var v, I, E = (v = g.groups[r]).count, B = v.materialIndex; + if ((m === (I = v.start) || m + C === I + E || I > m && C > E) && C >= E) { + var x, S = g.materials[B]; + (x = n[g.textures[y]]) && S && (S.map = x) + } + } + else + g.materials[0].map = n[g.textures[0]]; + p && g && (p.groups = g.groups), + o[h.matId] = g.materials + } + } + } else + Bh.debug("实体没有几何") + } + } + } + , + mC.prototype.createMeshNodes = function(A, e) { + this._readBufferInfo(A, e), + A.hasAnimation && vc.EnableAnimation ? this._makeSkinMesh(A) : this._makeMesh(A) + } + , + mC.prototype.asyncCreateMeshNodes = function(A, e, t) { + this._readBufferInfo(A, e), + A.hasAnimation && vc.EnableAnimation ? t && t() : this._makeMesh(A, e, t) + } + , + mC.prototype._readMaterialBuffer = function(A, e) { + var t = e.getModelDescriptor().referencedMeshCache.materials[A]; + if (!t) + return null; + var i = t.color + , o = t.colorIndex + , n = t.texture + , r = t.textureIndex + , a = [] + , s = [] + , l = []; + new Aa; + if (i.length > 4) { + for (var c = 0; i.length / 4 > c; c += 1) { + var h = new xr({ + color: new LA(i[4 * c],i[4 * c + 1],i[4 * c + 2]) + }); + 1 > i[4 * c + 3] && (h.transparent = !0, + h.opacity = i[4 * c + 3]), + h.side = 2, + a.push(h), + h = null + } + for (var d = null, p = void 0, g = 0; o.length > g; g += 1) { + var u = o[g]; + u !== p && (p = u, + null != d && (d.count = 3 * g - d.start, + s.push(d)), + d = { + start: 3 * g, + materialIndex: p + }) + } + null != d && (d.count = 3 * o.length - d.start, + s.push(d)) + } else if (4 === i.length) { + var f = new xr({ + color: new LA(i[0],i[1],i[2]) + }); + 1 > i[3] && (f.transparent = !0, + f.opacity = i[3]), + f.side = 2, + a.push(f), + s.push({ + start: 0, + count: 3 * o.length, + materialIndex: 0 + }) + } + for (var m = null, C = void 0, y = r, v = 0; y.length > v; v += 1) { + var I = y[v]; + I !== C && (C = I, + null != m && (m.count = 3 * v - m.start, + l.push(m)), + m = { + start: 3 * v, + textureIndex: C + }) + } + return null != m && (m.count = 3 * y.length - m.start, + l.push(m)), + { + materials: a, + groups: s, + textures: n, + UVgroup: l + } + } + , + mC.prototype.clearSelectedObjectIds = function() { + this.selectedObjectIds.length = 0 + } + , + mC.prototype.cacheSelectedObjectIds = function(A) { + this.selectedObjectIds.push(A) + } + , + mC.prototype.adjustVisibility = function(A, e) { + var t = this._getNodeGroup(A) + , i = t.visible; + e && !t.bVisible || (t.visible = e), + t.bVisible = i + } + , + mC.prototype.changeVisibilityOfSelectedObjects = function(A, e) { + var t = A.manager + , i = t.octantToObjectMap[A.modelKey].mesh; + this.selectedMeshes.length = 0; + for (var o = 0, n = this.selectedObjectIds.length; n > o; o += 1) { + var r = this.selectedObjectIds[o] + , a = i[r][0]; + a && (t.filter._isVisible({ + userId: r + }) && (a.visible = e)) + } + } + , + mC.prototype.changeVisibilityOfNonSelectedObjects = function(A, e) { + var t = A.manager + , i = t.octantToObjectMap[A.modelKey].mesh; + this.selectedMeshes.length = 0; + for (var o = {}, n = 0, r = this.selectedObjectIds.length; r > n; n += 1) { + o[this.selectedObjectIds[n]] = !0 + } + for (var a in i) + if (i.hasOwnProperty(a) && !o[a]) { + var s = i[a][0]; + if (!s) + continue; + if (!t.filter._isVisible({ + userId: a + })) + continue; + s.visible = e + } + } + , + mC.prototype.restoreVisibilityOfObjects = function() { + this.selectedMeshes.length = 0, + this.nonSelectedMeshes.length = 0 + } + , + mC.prototype._getNodeGroup = function(A) { + return A._getNodeGroup(gp.GEOMETRY, { + globalSpace: !0 + }) + } + , + mC.prototype.getMeshesByUserIds = function(A, e) { + var t = e + , i = A.getModelDescriptor().getNodeInfosByComponentKey(t); + if (i) { + for (var o = [], n = 0, r = i.length; r > n; n += 1) + for (var a = i[n], s = a.mesh, l = s._indicesGroup[t], c = 0, h = l.length; h > c; c += 1) { + var d = {}; + d.mesh = s, + d.indexInfo = l[c], + d.matrix = s.matrix.clone().multiply(A.getModelMatrix()), + d.boundingBox = a.boundingBox.clone().applyMatrix4(d.matrix), + o.push(d) + } + return o + } + return null + } + , + mC.prototype._getUsedGeometry = function(A, e) { + var t = null; + if (!vc.Instance && e.uvArrayBuffer) { + var i = e.geometryId + "|" + e.nodeId; + if (t = this.getGeometryById(i)) + return t; + var o = this._createGeometryByNodeInfo(A, e); + o instanceof Array || (o = [o]), + t = []; + for (var n = new l, r = new y, a = e.uvArrayBuffer, s = 0, c = o.length; c > s; s += 1) { + var h = new he; + h.setIndex(o[s].index), + h.addAttribute("position", o[s].attributes.position), + h.addAttribute("normal", o[s].attributes.normal), + n.set(a[6 * s], a[6 * s + 2], a[6 * s + 4], a[6 * s + 1], a[6 * s + 3], a[6 * s + 5], 0, 0, 1); + for (var d = [], p = o[s].attributes.uv.array, g = 0, u = p.length; u > g; g += 2) + r.set(p[g], p[g + 1], 1), + r.applyMatrix3(n), + d.push(r.x), + d.push(r.y); + h.addAttribute("uv", new Ae(d,2)), + t.push(h) + } + this._cacheGeometry(i, t) + } else + t = this.getGeometryByNodeInfo(A, e); + return t + } + , + mC.prototype.getGeometryBuffersByUserId = function(A, e) { + var t = A.getModelDescriptor().getStandardNodeInfosById(e); + if (!t) + return []; + for (var i = [], o = A.getDatabagId(), n = 0, r = t.length; r > n; n += 1) { + var a = t[n] + , s = this.getGeometryByNodeInfo(A, a); + if (s) { + var l = this._isLines(a); + if (s instanceof Array) + for (var c = 0, h = s.length; h > c; c += 1) + i.push({ + isLines: l, + databagId: o, + nodeId: a.nodeId, + position: s[c].getAttribute("position").array, + index: s[c].getIndex().array, + matrix: a.matrix + }); + else + i.push({ + isLines: l, + databagId: o, + nodeId: a.nodeId, + position: s.getAttribute("position").array, + index: s.getIndex().array, + matrix: a.matrix + }) + } + } + return i + } + , + mC.prototype.traverseActiveMeshMap = function(A, e) { + for (var t = 0, i = (A = A || Object.keys(this.activeMeshMap)).length; i > t; t += 1) { + var o = A[t]; + if (this.activeMeshMap[o]) + for (var n = Object.keys(this.activeMeshMap[o]), r = 0, a = n.length; a > r; r += 1) { + var s = n[r]; + e(o, s, this.activeMeshMap[o][s]) + } + } + } + , + mC.prototype.getActiveMeshMapById = function(A) { + return this.activeMeshMap[A] + } + , + mC.prototype._clearActiveMeshMap = function() { + this.activeMeshMap = {} + } + , + mC.prototype._cacheActiveMesh = function(A, e, t) { + this.activeMeshMap[A] || (this.activeMeshMap[A] = {}), + this.activeMeshMap[A][e] || (this.activeMeshMap[A][e] = []), + this.activeMeshMap[A][e].push(t) + } + , + mC.prototype._isLines = function(A) { + return A.type === $u.EnumNodeItemType.LINE + } + , + mC.prototype.getPickingNodeGenerator = function() { + return this.pickingNodeGenerator || (this.pickingNodeGenerator = new uC(this)), + this.pickingNodeGenerator + } + , + mC.prototype.isPickableNode = function(A) { + return !this.filter || this.filter._isPickable({ + userId: A + }) + } + ; + var CC = function(A) { + of.call(this, A), + this.nodeGroupName = "PickingWireFrameGroup" + }; + Object.assign(CC.prototype, of.prototype), + eu(CC, [{ + key: "disposePickingNodeById", + value: function(A) { + for (var e = Object.keys(this.pickingNodeMap[A]), t = 0, i = e.length; i > t; t += 1) + for (var o = this.pickingNodeMap[A][e[t]], n = 0, r = o.length; r > n; n += 1) + o[n].material = null, + o[n].geometry.dispose(), + o[n] = null + } + }, { + key: "addToPickingNodeMap", + value: function(A, e, t) { + this.pickingNodeMap || (this.pickingNodeMap = {}), + this.pickingNodeMap[A] || (this.pickingNodeMap[A] = {}), + this.pickingNodeMap[A][e] = t, + this.addToPickingNodeGroup(t) + } + }, { + key: "removeFormPickingNodeGroup", + value: function(A) { + if (this.pickingNodeGroup) + for (var e = Object.keys(this.pickingNodeMap[A]), t = 0, i = e.length; i > t; t += 1) + for (var o = this.pickingNodeMap[A][e[t]], n = 0, r = o.length; r > n; n += 1) + this.pickingNodeGroup.remove(o[n]) + } + }, { + key: "generatePickingMeshes", + value: function(A) { + var e = this + , t = this.manager; + this.manager.manager.getMeshManager().traverseActiveMeshMap(A, (function(A, i, o) { + if (!(o && o.length && o[0].isLineSegments || e._isExistNode(A, i))) { + var n = 0 + , r = 0 + , a = o[0].geometryId + , s = []; + for (n = 0, + r = o.length; r > n; n += 1) + s.push(o[n].geometry); + var l = t._getWireframeGeometryById(a, s) + , c = []; + for (n = 0, + r = l.length; r > n; n += 1) { + var h = new jo(l[n],Kd.DefaultMaterial); + Tu.copyMeshProperties(h, o[n]), + h.renderOrder = 0, + c.push(h) + } + e.addToPickingNodeMap(A, i, c) + } + } + )) + } + }, { + key: "_isExistNode", + value: function(A, e) { + return !!(this.pickingNodeMap && this.pickingNodeMap[A] && this.pickingNodeMap[A][e]) + } + }, { + key: "updatePickingMeshesState", + value: function(A, e, t) { + if (this.pickingNodeMap) + for (var i = this.pickingNodeMap, o = this.manager.manager.getMeshManager(), n = 0, r = e.length; r > n; n += 1) { + var a = e[n]; + if (i[a] && o.isPickableNode(a)) { + var s = o.getActiveMeshMapById(a); + if (s) + for (var l = Object.keys(i[a]), c = 0, h = l.length; h > c; c += 1) { + var d = l[c]; + if (s[d]) { + var p = i[a][d]; + if (p) + for (var g = 0, u = p.length; u > g; g += 1) + p[g].material = A, + p[g].visible = !0 + } + } + } + } + } + }, { + key: "resetPickingMeshesState", + value: function() { + if (this.pickingNodeMap) + for (var A = this.pickingNodeMap, e = Object.keys(A), t = 0, i = e.length; i > t; t += 1) + for (var o = e[t], n = Object.keys(A[o]), r = 0, a = n.length; a > r; r += 1) + for (var s = A[o][n[r]], l = 0, c = s.length; c > l; l += 1) + s[l].visible = !1 + } + }, { + key: "updatePickingMeshes", + value: function(A, e, t) { + return this.generatePickingMeshes(e), + this.resetPickingMeshesState(), + this.updatePickingMeshesState(A, e, t), + this.getPickingNodeGroup() + } + }]); + var yC = function(A) { + this.manager = A, + this.wireframeGeometries = {}, + this.wireframeLineMeshes = {} + }; + yC.prototype._disposeGeometries = function() { + for (var A in this.wireframeGeometries) + this._disposeGeometry(A) + } + , + yC.prototype.destroy = function() { + this.manager = null, + this._clearWireframeLineMeshes(), + this.wireframeLineMeshes = null, + this._disposeGeometries(), + this.wireframeGeometries = null + } + , + yC.prototype.clearData = function() { + this._clearWireframeLineMeshes(), + this._disposeGeometries() + } + , + yC.prototype.update = function(A, e) { + this.isActivateWireframe(A) ? (this._clearWireframeGroupNode(A), + this._generateWireframeNodes(A, e), + this._getWireWireframeGroupNode(A).updateMatrixWorld(!0)) : this._removeWireframeGroupNode(A) + } + , + yC.prototype._disposeGeometry = function(A) { + var e = this.wireframeGeometries[A]; + if (e) { + if (Array.isArray(e)) + for (var t = 0, i = e.length; i > t; t += 1) + e[t].dispose(); + else + e.dispose(); + delete this.wireframeGeometries[A] + } + } + , + yC.prototype._clearWireframeLineMeshes = function() { + for (var A in this.wireframeLineMeshes) + delete this.wireframeLineMeshes[A]; + this.wireframeLineMeshes = {} + } + , + yC.prototype._clearWireframeGroupNode = function(A) { + this._getWireWireframeGroupNode(A).clear() + } + , + yC.prototype._removeWireframeGroupNode = function(A) { + A._removeNodeGroup(this._getWireframeGroupName(A)) + } + , + yC.prototype.isActivateWireframe = function(A) { + return A.isActivateWireframe() + } + , + yC.prototype._getWireWireframeGroupNode = function(A) { + return A._getNodeGroup(this._getWireframeGroupName(A), { + globalSpace: !0 + }) + } + , + yC.prototype._getWireframeGeometryByNodeInfo = function(A, e) { + return this._getWireframeGeometryById(e.geometryId, this.manager.getGeometryByNodeInfo(A, e), A) + } + , + yC.prototype._getWireframeGeometryById = function(A, e, t) { + if (this.wireframeGeometries[A]) + return this.wireframeGeometries[A]; + var i = [] + , o = null + , n = null; + if (Array.isArray(e)) + for (var r = 0, a = e.length; a > r; r += 1) + n = Up(e[r].attributes.position.array, e[r].index.array), + (o = new he).setIndex(new $A(n,1)), + o.setAttribute("position", e[r].attributes.position, 3), + i.push(o); + else + n = Up(e.attributes.position.array, e.index.array), + (o = new he).setIndex(new $A(n,1)), + o.setAttribute("position", e.attributes.position, 3), + i.push(o); + return this.wireframeGeometries[A] = i, + this.wireframeGeometries[A] + } + , + yC.prototype._makeWireframeLineMeshes = function(A, e, t) { + var i = this.wireframeLineMeshes[e.nodeId]; + if (!i) { + i = this.wireframeLineMeshes[e.nodeId] = []; + for (var o = this._getWireframeGeometryByNodeInfo(A, e), n = 0, r = o.length; r > n; n += 1) { + var a = new jo(o[n],this._getWireframeMaterial(A)); + a.name = e.nodeId + "_" + n, + a.applyMatrix4(e.matrix), + a.matrixAutoUpdate = !1, + i.push(a) + } + e.wireframeMeshs = i + } + for (var s = 0, l = i.length; l > s; s += 1) + t.add(i[s]) + } + , + yC.prototype._generateWireframeNodes = function(A, e) { + var t = this._getWireWireframeGroupNode(A) + , i = A.getModelDescriptor().getStandardNodeInfos(); + e || (e = A.getModelDescriptor().getStandardUserIds()); + for (var o, n, r = this.manager.getHiddenUserIds(), a = 0; e.length > a; a += 1) { + var s = e[a] + , l = i[s][0]; + r[s] || (o = l, + n = this._getFilter(A), + o.type === Qf.EnumNodeItemType.LINE || vc.Instance && ("box" === o.geometryId || "boxM" === o.geometryId) || n._hasRenderWithBoardlineFilter() && !n._isRenderWithBoardline(o) || this._makeWireframeLineMeshes(A, l, t)) + } + } + , + yC.prototype._getWireframeGroupName = function(A) { + return A._getWireframeGroupName() + } + , + yC.prototype._getWireframeMaterial = function(A) { + return A.getWireframeMaterial() + } + , + yC.prototype._getFilter = function(A) { + return A.manager.filter + } + , + yC.prototype.adjustVisibility = function(A, e) { + if (A.isActivateWireframe()) { + var t = this._getWireWireframeGroupNode(A) + , i = t.visible; + e && !t.bVisible || (t.visible = e), + t.bVisible = i + } + } + , + yC.prototype.changeVisibilityOfSelectedObjects = function(A, e) {} + , + yC.prototype.changeVisibilityOfNonSelectedObjects = function(A, e) { + this.adjustVisibility(A, e) + } + , + yC.prototype.restoreVisibilityOfObjects = function() {} + , + yC.prototype.getPickingNodeGenerator = function() { + return this.pickingNodeGenerator || (this.pickingNodeGenerator = new CC(this)), + this.pickingNodeGenerator + } + ; + var vC = function(A) { + this.meshManager = new mC(this), + this.model = A, + this.wireframeManager = new yC(this) + }; + vC.prototype.destroy = function() { + this.meshManager.destroy(), + this.meshManager = null, + this.wireframeManager.destroy(), + this.wireframeManager = null + } + , + vC.prototype.clearData = function() { + this.meshManager.clearData(), + this.wireframeManager.clearData() + } + , + vC.prototype.disposeGeometry = function(A) { + this.meshManager.disposeGeometry(A) + } + , + vC.prototype.cullNodes = function(A, e) { + this.hasNodeInfo(A) && this.meshManager.cullNodes(A, e) + } + , + vC.prototype.updateNodes = function(A, e) { + if (this.hasNodeInfo(A)) { + var t; + t = this._collectModelFiltered(A), + this.meshManager.update(A, e, t), + this.wireframeManager.update(A, e) + } + } + , + vC.prototype.applyFilter = function(A, e) { + if (this.hasNodeInfo(A)) { + var t = null; + t = e || A.getModelDescriptor().getStandardUserIds(); + var i = A.getModelDescriptor().getStandardNodeInfos(); + this._collectFilteredUserIds(A.manager.filter, t, i), + this._collectSelectedUserIds(A.manager.sceneState.selectionSet, i), + this._collectHoveredUserIds(A.manager.sceneState.hoverId, i), + this.updateNodes(A, e) + } + } + , + vC.prototype.applySelection = function(A) { + if (this.hasNodeInfo(A)) { + var e = A.getModelDescriptor().getStandardNodeInfos(); + this._clearSelectedState(A), + this._clearHoveredState(A), + this._collectSelectedUserIds(A.manager.sceneState.selectionSet, e), + this._collectHoveredUserIds(A.manager.sceneState.hoverId, e), + this.updateNodes(A) + } + } + , + vC.prototype.clearSelection = function(A) { + this._clearSelectedState(A), + this.applyHover(A) + } + , + vC.prototype.applyHover = function(A) { + if (this.hasNodeInfo(A)) { + var e = A.getModelDescriptor().getStandardNodeInfos(); + this._clearHoveredState(A), + this._collectHoveredUserIds(A.manager.sceneState.hoverId, e), + this.updateNodes(A) + } + } + , + vC.prototype.clearHover = function(A) { + this._clearHoveredState(A), + this.updateNodes(A) + } + , + vC.prototype.applyBlink = function(A) {} + , + vC.prototype.clearBlink = function(A) {} + , + vC.prototype.getPriorityNodes = function() { + return this.meshManager.getPriorityNodes() + } + , + vC.prototype.getGeometryByNodeInfo = function(A, e) { + return this.meshManager.getGeometryByNodeInfo(A, e) + } + , + vC.prototype.getRenderableCount = function(A) { + return A.renderableCount + } + , + vC.prototype.getLoader = function(A) { + return A.loader + } + , + vC.prototype.getContainsCamera = function(A) { + return A.containsCamera + } + , + vC.prototype.getFilter = function(A) { + return A.manager.filter + } + , + vC.prototype.hasNodeInfo = function(A) { + return !!A.getModelDescriptor().getStandardNodeInfos() + } + , + vC.prototype.createMeshNodes = function(A) { + this.meshManager.createMeshNodes(A) + } + , + vC.prototype.asyncCreateMeshNodes = function(A, e, t) { + this.meshManager.asyncCreateMeshNodes(A, e, t) + } + , + vC.prototype._collectFilteredUserIds = function(A, e, t) { + var i = A._hasHiddenFileIdFilter() + , o = A._hasVisibleFilter() + , n = A._hasOverrideMaterialFilter() + , r = A._hasTransparentFilter(); + this.mapMaterialIdToUserIdsForFilter = {}; + if (this.hiddenUserIdSetObject = {}, + this.overrideUserIdSetObject = {}, + this.transparentUserIdSetObject = {}, + i || o || n || r) + for (var a = 0; e.length > a; a += 1) { + var s = e[a] + , l = t[s]; + if (l && l.length) + for (var c = 0, h = l.length; h > c; c += 1) { + var d = l[c]; + if (i && A._isHiddenFileId(d) || o && !1 === A._isVisible(d)) + this.hiddenUserIdSetObject[s] = !0; + else if (r && A._isTransparent(d)) + this.transparentUserIdSetObject[s] = !0; + else if (n && A._hasOverrideMaterial(d)) { + var p = A._getOverrideMaterial(d); + if (Array.isArray(p)) { + for (var g = [], u = 0, f = p.length; f > u; u++) { + var m = null !== p[u] ? p[u].name : ""; + "" !== m && g.push(m) + } + this.overrideUserIdSetObject[s] = g + } else { + var C = null !== p ? p.name : ""; + "" !== C && (this.overrideUserIdSetObject[s] = C) + } + } + } + } + } + , + vC.prototype._collectModelFiltered = function(A) { + var e = A.manager.filter + , t = A.modelKey + , i = e._hasModelOverrideMaterialFilter() + , o = e._hasModelTransparentFilter() + , n = A.manager.modelState.selectionSet; + return A.manager.modelState.hoverId === t ? A.manager.modelState.getHoverMaterial() : n.hasOwnProperty(A.modelKey) ? A.manager.modelState.selectionMaterial : o && e._isModelTransparent(t) ? e._getMaterialByName("scene") : i && e._hasModelOverrideMaterial(t) ? e._getModelOverrideMaterial(t) : null + } + , + vC.prototype._clearFilteredState = function() { + this.hiddenUserIdSetObject = {}, + this.overrideUserIdSetObject = {}, + this.transparentUserIdSetObject = {} + } + , + vC.prototype.getFilteredUserIds = function() { + return this.mapMaterialIdToUserIdsForFilter + } + , + vC.prototype.getSelectedUserIds = function() { + return this.mapMaterialIdToUserIdsForSelection + } + , + vC.prototype.getHoveredUserIds = function() { + return this.mapMaterialIdToUserIdsForHover + } + , + vC.prototype.getBlinkedUserIds = function() { + return this.mapBlinkUserIds + } + , + vC.prototype.getHiddenUserIds = function() { + return this.hiddenUserIdSetObject + } + , + vC.prototype._collectSelectedUserIds = function(A, e) { + for (var t in this.selectedUserIdSetObject = {}, + A) + if (A.hasOwnProperty(t)) { + if (!e[t]) + continue; + this.selectedUserIdSetObject[t] = !0 + } + } + , + vC.prototype._clearSelectedState = function() { + this.selectedUserIdSetObject = {} + } + , + vC.prototype._collectHoveredUserIds = function(A, e) { + if (this.hoveredUserIdSetObject = {}, + A && e[A]) { + var t = e[A]; + this.hoveredUserIdSetObject = {}, + t && (this.hoveredUserIdSetObject[A] = !0) + } + } + , + vC.prototype._clearHoveredState = function() { + this.hoveredUserIdSetObject = {} + } + , + vC.prototype.getMeshesByUserIds = function(A, e) { + return this.meshManager.getMeshesByUserIds(A, e) + } + , + vC.prototype.adjustVisibility = function(A, e) { + this.meshManager.adjustVisibility(A, e), + this.wireframeManager.adjustVisibility(A, e) + } + , + vC.prototype.changeVisibilityOfSelectedObjects = function(A, e) { + this.meshManager.changeVisibilityOfSelectedObjects(A, e), + this.wireframeManager.changeVisibilityOfSelectedObjects(A, e) + } + , + vC.prototype.changeVisibilityOfNonSelectedObjects = function(A, e) { + this.meshManager.changeVisibilityOfNonSelectedObjects(A, e), + this.wireframeManager.changeVisibilityOfNonSelectedObjects(A, e) + } + , + vC.prototype.restoreVisibilityOfObjects = function() { + this.meshManager.restoreVisibilityOfObjects(), + this.wireframeManager.restoreVisibilityOfObjects() + } + , + vC.prototype.isPickableNode = function(A) { + var e = this.getHiddenUserIds(); + if (e && e[A]) + return !1; + var t = this.getTransparentUserIds(); + return !t || !t[A] + } + , + vC.prototype.isHiddenNode = function(A) { + var e = this.getHiddenUserIds(); + return !(!e || !e[A]) + } + , + vC.prototype.getMeshManager = function() { + return this.meshManager + } + , + vC.prototype.getWireFrameManager = function() { + return this.wireframeManager + } + , + vC.prototype.getTransparentUserIds = function() { + return this.transparentUserIdSetObject + } + ; + var IC = function(A) { + return hC.call(this, A), + this.tag = "layer", + this.defaultManager = new vC, + this.instancedManager = new Hf, + this.loader = new gC(this), + this + }; + (IC.prototype = Object.assign(IC.prototype, hC.prototype)).destroy = function() { + this.defaultManager.destroy(), + this.defaultManager = null, + this.instancedManager.destroy(), + this.instancedManager = null + } + , + IC.prototype.prepareData = function(A) {} + , + IC.prototype.prepare = function(A) { + this.isAllReady() && (this.model.getMaterialManager()._updateTextureMapping(), + this.model.clearMeshFromOctantMap()) + } + , + IC.prototype.updateNodes = function() {} + , + IC.prototype.addNodeInfoToOctantMap = function() {} + , + IC.prototype.dealMeshNodes = function(A) { + A && A() + } + , + IC.prototype.disposeBufferAfterVbo = function() {} + , + IC.prototype.dealMeshNodes = function(A) { + this.model.getModelDescriptor().getInstancedUserIdsByCategory(this._loadedUserIds); + var e = this.model + , t = this; + this.defaultManager.asyncCreateMeshNodes(e, e.getModelDescriptor().getStandardUserIds(), (function() { + t.updateNodes(), + A && A() + } + )) + } + , + IC.prototype.unloadComponents = function(A, e) { + for (var t = this.model.modelKey, i = 0, o = A.length; o > i; i += 1) { + var n = this.model.getModelDescriptor().getNodeInfosByComponentKey(A[i]); + if (n) { + for (var r = 0, a = n.length; a > r; r += 1) { + var s = n[r]; + if (s.mesh) + this.defaultManager.meshManager.disposeGeometry(s.mesh.geometry.key), + s.mesh.destroy() + } + this.model.manager.removeMeshFromOctantMap(t, A[i]) + } + } + this.model.getModelDescriptor().clearNodeInfoCacheByComponentsKey(A), + e && e() + } + ; + var EC = function(A) { + Af.call(this, A), + this.instancedComponent = {} + }; + Object.assign(EC.prototype, Af.prototype), + EC.prototype.parseItemData = function(A) { + this._readMaterialBuffer(this.model), + this._parseGeo(), + vc.Instance && this._parseInstanced(); + var e = {} + , t = this.referencedMeshCache; + for (var i in Bh.time("_readItemData"), + t.components) + t.components.hasOwnProperty(i) && this._readItemData(e, i, i, void 0, 0); + Bh.timeEnd("_readItemData"), + e = null, + A && A() + } + , + EC.prototype._readItemData = function(A, e, t) { + var i = this.referencedMeshCache.components[e]; + void 0 !== i && this._readMeshInfo(A, t, i, null) + } + , + EC.prototype._readMeshInfo = function(A, e, t, i) { + var o = this.referencedMeshCache + , n = this.model.materialManager.materials + , r = null + , a = null + , s = this.model.subModel[t.subModel]; + if (t.nodes || t.nodeIds) { + a = t.originalId; + var l = (new M).fromArray(t.matrix || [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]); + t.matrix = l; + var c = []; + c = t.nodes ? t.nodes : t.nodeIds; + for (var h = 0; c.length > h; h += 1) { + var d = c[h]; + if ("object" !== lc(d) && (d = this.getReferencedMeshComponentNodeById(d)), + d) { + var p, g = null, u = ""; + if (-1 !== d.geoId) + if ((g = this._getMeshNodeAttr(d, t, h)).boundingBox.applyMatrix4(s), + g) { + if (t.buildInCategory && (g.buildInCategory = t.buildInCategory), + !n[u = d.material]) { + var f = _u[t.type] ? _u[t.type].color : void 0; + f || (Bh.log("Material not found for type: ", t.type), + f = _u.DEFAULT.color), + f || (Bh.log("Default material not found for type: ", t.type), + f = [1, 1, 1, 1]); + var m = new LA(f[0],f[1],f[2]) + , C = u || m.getHexString() + "_" + f[3] + , y = n[C]; + y || (Bh.warn("缺少材质 " + u), + y = Kd.createStandardMaterial({ + color: m + }), + 1 > f[3] && (y.transparent = !0, + y.opacity = f[3]), + y.side = 2, + n[C] = y), + g.material = u = C + } + if (n[u].aoMap) { + var v = this.getReferencedMeshBufferById(g.geometryId); + v && (v.uv2 = v.uv) + } + p = g.nodeId; + var I = (R = this.userDataReader) ? R.getUserData(r) : null; + g.type = t.type, + g.userId = e, + g.name = t.name, + g.userDataId = r, + g.originalId = a, + g.materialId = u, + g.originMId = u, + g.userData = I, + g.categoryId = 0, + g.componentKey = e, + g.familyName = t.familyName, + g.familySymbol = t.familySymbol; + var E = vc.Instance + , B = o.reuseNodes.hasOwnProperty(p); + g.instanceOrNot = !(!E || !B), + g.isBatched = !0, + g.state = Lc.Visible, + g.material = null, + this._classifyNodeInfo(g), + g = null + } else + Bh.debug("非法node") + } + } + } else { + var x = t + , S = ""; + if (null === i ? (r = x.userDataId, + a = x.originalId, + S = x.materialId || x.matId) : (r = i.userDataId, + a = i.originalId, + S = i.materialId > -1 ? i.materialId : x.materialId), + x.materials || (x.materials = []), + x.materials.length > 0) + for (h = 0; x.materials.length > h; h += 1) { + var w = null; + if (w = this._getOldMeshNodeAttr(A, x, x.materials.length > 1, h)) { + if (x.buildInCategory && (w.buildInCategory = x.buildInCategory), + w.boundingBox.applyMatrix4(s), + !n[S = x.materials[h]]) { + var b = _u[x.type] ? _u[x.type].color : void 0; + b || (Bh.log("Material not found for type: ", x.type), + b = _u.DEFAULT.color), + b || (Bh.log("Default material not found for type: ", x.type), + b = [1, 1, 1, 1]); + var U = new LA(b[0],b[1],b[2]) + , F = S || U.getHexString() + "_" + b[3] + , K = n[F]; + K || (Bh.warn("缺少材质 " + S), + K = Kd.createStandardMaterial({ + color: U + }), + 1 > b[3] && (K.transparent = !0, + K.opacity = b[3]), + K.side = 2, + n[F] = K) + } + if (n[S].aoMap) { + var Q = this.getReferencedMeshBufferById(w.geometryId); + Q && (Q.uv2 = Q.uv) + } + if (!w) + return; + var R; + I = (R = this.userDataReader) ? R.getUserData(r) : null; + w.type = x.type, + w.userId = x.key, + w.name = x.name, + w.userDataId = r, + w.originalId = a, + w.materialId = S, + w.originMId = S, + w.userData = I, + w.categoryId = 0, + w.componentKey = x.key, + w.familyName = x.familyName, + w.familySymbol = x.familySymbol, + vc.Instance && this.instancedComponent[x.key] ? w.instanceOrNot = !0 : (w.instanceOrNot = !1, + this.instancedGeo[w.originalGeometryId].length > 1 && (w.originalGeometryId = "")), + w.state = Lc.Visible, + w.material = null, + w.isBatched = !0, + this._classifyNodeInfo(w), + w = null + } else + Bh.debug("非法node") + } + else { + var T = null + , k = _u[x.type] ? _u[x.type].color : void 0; + k || (Bh.log("Material not found for type: ", x.type), + k = _u.DEFAULT.color), + k || (Bh.log("Default material not found for type: ", x.type), + k = [1, 1, 1, 1]); + var D = new LA(k[0],k[1],k[2]) + , L = D.getHexString() + "_" + k[3] + , N = n[L]; + if (N || (N = Kd.createStandardMaterial({ + color: D + }), + 1 > k[3] && (N.transparent = !0, + N.opacity = k[3]), + N.side = 2, + n[L] = N), + x.materials.push(L), + (T = this._getOldMeshNodeAttr(A, x, !1, 0)).boundingBox.applyMatrix4(s), + S = x.materials[0], + !T) + return; + e = x.key; + T.type = x.type, + T.userId = e, + T.name = x.name, + T.originalId = a, + T.materialId = S, + T.originMId = S, + T.userData = {}, + T.categoryId = 0, + T.componentKey = e, + T.familyName = x.familyName, + T.familySymbol = x.familySymbol, + T.instanceOrNot = !(!vc.Instance || !this.instancedComponent[e]), + T.isBatched = !0, + T.state = Lc.Visible, + T.material = null, + this._classifyNodeInfo(T), + T = null + } + } + } + , + EC.prototype._getMeshNodeAttr = function(A, e, t) { + var i = new M; + i.fromArray(A.matrix || [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]), + vc.DataReduction && i.scale(new y(1e3,1e3,1e3)), + e && i.multiplyMatrices(e.matrix, i), + A.geoId = e.subModel + A.geoId; + var o = A.nodeId + , n = A.geoId; + if (-1 !== n) { + var r = A.maxBoundary || e.maxBoundary + , a = A.minBoundary || e.minBoundary + , s = new ph; + return s.set(a, r), + { + nodeId: o, + guid: A.guid, + geometryId: n, + originalGeometryId: A.geoId, + matrix: i, + boundingBox: s, + model: this.model + } + } + } + , + EC.prototype._getOldMeshNodeAttr = function(A, e, t, i) { + var o = new M; + o.fromArray(e.matrix || [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]), + vc.DataReduction && o.scale(new y(1e3,1e3,1e3)); + var n = t ? e.key + "_" + i : e.key + , r = t ? e.geoId + "_" + i : e.geoId; + if (-1 !== r) { + var a = new ph + , s = this.getReferencedMeshBufferById(e.geoId); + return s && s.position ? (a = Tu.getBoundingBoxByBuffer(s.position)).applyMatrix4(o) : Bh.warn("no position "), + { + nodeId: n, + guid: e.guid, + geometryId: r, + originalGeometryId: e.geoId, + matrix: o, + boundingBox: a, + model: this.model + } + } + } + ; + var BC = function(A) { + Xu.call(this, A), + this.maxGeoLoadTaskCount = 0, + this.geoLoadTaskCount = 0, + this.taskInstancedGeometrieManager = new Ou(this,"geometrie"), + this.descriptor = new EC(A.model) + }; + (BC.prototype = Object.assign(BC.prototype, Xu.prototype)).loadData = function() { + for (var A = this, e = this, t = this.model, i = t.getConfig(), o = !1, n = 0, r = 0, a = 0, s = 0, l = [], c = [], h = [], d = [], p = [], g = [], u = [], f = [], m = [], C = function(C, y) { + var v = i.children[C]; + if (E = i.animation, + !(I = i.scene[C]) || !I.components || !I.geometries && (!I.batchedGeometries && !I.instancedGeometries || 1 > I.batchedGeometries.length && 1 > I.instancedGeometries.length) || !I.materials || !I.textures) + return Bh.error("scene is null,modelKey is ", t.modelKey), + t.dispatchEventEx({ + type: Rc.ON_LOAD_EMPTY_SCENE, + modelKey: t.modelKey + }), + "continue"; + if (o = !0, + n += I.components.length || 0, + I.components.forEach((function(A) { + e.fileKeyFromModelKey[A] = v + } + )), + r += I.materials.length || 0, + a += I.textures.length || 0, + s += I.reuseNodes && I.reuseNodes.length || 0, + u = u.concat(I.textures), + A.map = A.map || [], + 2 > Number(I.geo)) + return Bh.error("不支持1.0版本的几何结构和其他版本混合加载。"), + { + v: void 0 + }; + if (l = l.concat(I.components), + h = h.concat(I.materials), + m = m.concat(I.reuseNodes || []), + Array.isArray(I.nodes) && (c = c.concat(I.nodes)), + u = u.concat(I.textures), + I.map && A.map.push(I.map), + I.trees.length > 0) + for (B = 0; I.trees.length > B; B += 1) + "partition" === (x = I.trees[B]).type && (f.push(x.fileKey), + e.fileKeyFromModelKey[x.fileKey] = v); + I.lights && I.lights.length > 0 && (g = g.concat(I.lights)), + E && (E.bones.length, + E.bones, + d.push(E.clips), + p.push(E.nodes)) + }, y = 0, v = i.scene.length; v > y; y += 1) { + var I, E, B, x, S = C(y); + switch (S) { + case "continue": + continue; + default: + if ("object" === lc(S)) + return S.v + } + } + if (t.setEmptyScene(!o), + e.maxLoadTaskCount = 0, + e.maxLoadTaskCount += n, + e.maxLoadTaskCount += r, + e.maxLoadTaskCount += f.length, + e.maxLoadTaskCount += s, + e.maxLoadTaskCount += c.length, + e.maxLoadTaskCount += g.length, + 1 > e.maxLoadTaskCount) + return Bh.info("Nothing to load ", t.modelKey), + void t.dispatchEventEx({ + type: Tc.SCENE_NOTHING_TO_LOAD, + modelKey: t.modelKey + }); + e.progress.total += e.maxLoadTaskCount, + e.startCallback && e.startCallback(), + Bh.time("数据加载时间"), + e._loadComponent(l), + e._loadMaterial(h), + e._loadComponentNode(c), + e._loadReuseNode(m), + vc.EnableTextureLoading && a > 0 ? (e.maxLoadTextureCount += a, + e._loadTextures(u)) : e._onLoadTexture(), + e._loadKDTree(f), + g.length > 0 && e._loadLights(g), + e.offLine && e.loadAttribute(), + e.loadFloorInfo(e.model.modelKey), + e.loadSceneAndGeos(i) + } + , + BC.prototype.loadReuseNode = function(A, e) { + var t = this + , i = this.jsonLoader + , o = this.model + , n = this.url; + i.setResponseType("json"), + vc.useGzip && i.setResponseType("arraybuffer"), + i.setCacheViable(!0); + i.load(n.mpkUrl(A), (function(A) { + t._parseReuseNodes(A), + Bh.debug("component load from online"), + e(), + t._onTaskFinished() + } + ), void 0, (function(A) { + o.dispatchEventEx({ + type: Tc.LOAD_COMPONENT_ERROR, + modelKey: o.modelKey + }) + } + )) + } + , + BC.prototype._parseComponent = function(A, e) { + var t = this.fileKeyFromModelKey[e] || ""; + if (A) { + var i = this.descriptor; + if (i) + for (var o in vc.useGzip && (A = JSON.parse(uh.ab2str(pako.ungzip(A)))), + A) + if (A.hasOwnProperty(o)) { + var n = A[o]; + -1 !== n.geoId && (n.geoId = t + n.geoId, + n.subModel = t), + i.cacheReferencedMeshComponentData(A[o].key, A[o]) + } + } else + Bh.error("没有数据") + } + , + BC.prototype._parseMaterial = function(A, e) { + if (A) { + if (A instanceof ArrayBuffer) + try { + A = JSON.parse(uh.ab2str(A)) + } catch (A) { + Bh.error("处理材质出错") + } + var t = this.descriptor; + if (t) + for (var i in A) + t.cacheReferencedMeshMaterialData(i, A[i]) + } else + Bh.error("没有数据") + } + , + BC.prototype.loadBatchedGeometrie = function(A, e) { + var t = this + , i = this.loader + , o = this.url + , n = this.model; + i.setResponseType("arraybuffer"), + i.setCacheViable(!this.offLine); + var r = i.load(o.mpkUrl(A), (function(i) { + t._parseBatchedGeometrie(i, A), + Bh.debug("geo load from online"), + t._onGeoTaskFinished(), + e() + } + ), void 0, (function(A) { + n.dispatchEventEx({ + type: Tc.LOAD_GEOMETRY_ERROR, + modelKey: n.modelKey + }), + e(), + t._onGeoTaskFinished() + } + )); + t.requests.loadGeometrie = r + } + , + BC.prototype.loadInstancedGeometrie = function(A, e) { + var t = this + , i = this.loader + , o = this.url + , n = this.model; + i.setResponseType("arraybuffer"), + i.setCacheViable(!this.offLine); + var r = i.load(o.mpkUrl(A), (function(i) { + t._parseInstancedGeometrie(i, A), + Bh.debug("geo load from online"), + t._onGeoTaskFinished(), + e() + } + ), void 0, (function(A) { + n.dispatchEventEx({ + type: Tc.LOAD_GEOMETRY_ERROR, + modelKey: n.modelKey + }), + e(), + t._onGeoTaskFinished() + } + )); + t.requests.loadGeometrie = r + } + , + BC.prototype._parseBatchedGeometrie = function(A, e) { + var t = this.fileKeyFromModelKey[e] || "" + , i = new ku.BatchedGeometryReader(A,this.dataVersion) + , o = this.descriptor; + if (o) { + for (var n = i.geoCount, r = 0; n > r; r += 1) { + var a = i.geomMap[r]; + void 0 !== a.position && void 0 !== a.index && void 0 !== a.normal ? (a.geoId = t + a.geoId, + o.cacheReferencedMeshBufferData(a.geoId, a), + this.handler.createBatchedMeshNodes(a)) : Bh.error("Error Geometry!") + } + this.model.manager.viewerImpl.render(), + i = null + } + } + , + BC.prototype._parseInstancedGeometrie = function(A, e) { + var t = this.fileKeyFromModelKey[e] || "" + , i = new ku.InstancedGeometryReader(A,this.dataVersion) + , o = this.descriptor; + if (o) { + for (var n = i.geoCount, r = 0; n > r; r += 1) { + var a = i.geomMap[r]; + void 0 !== a.position && void 0 !== a.index && void 0 !== a.normal ? (a.geoId = t + a.geoId, + o.cacheReferencedMeshBufferData(a.geoId, a), + this.handler.createInstancedMeshNodes(a)) : Bh.error("Error Geometry!") + } + this.model.manager.viewerImpl.render(), + i = null + } + } + , + BC.prototype._parseReuseNodes = function(A, e) { + if (A) { + vc.useGzip && (A = JSON.parse(uh.ab2str(pako.ungzip(A)))); + var t = this.descriptor; + if (t) + if (t.referencedMeshCache.reuseNodes) + for (var i in A) + t.referencedMeshCache.reuseNodes[i] = A[i]; + else + t.referencedMeshCache.reuseNodes = A + } else + Bh.error("没有数据") + } + , + BC.prototype.startLoadSceneAndGeos = function(A) { + Bh.time("几何数据加载时间"); + for (var e = A.scene, t = this, i = 0, o = 0, n = [], r = [], a = function(a, s) { + var l = e[a] + , c = A.children[a]; + (l.batchedGeometries && l.batchedGeometries.length > 0 || l.instancedGeometries && l.instancedGeometries.length > 0) && (i += l.batchedGeometries.length || 0, + o += l.instancedGeometries.length || 0, + n = n.concat(l.batchedGeometries), + r = r.concat(l.instancedGeometries), + l.batchedGeometries.forEach((function(A) { + t.fileKeyFromModelKey[A] = c + } + )), + l.instancedGeometries.forEach((function(A) { + t.fileKeyFromModelKey[A] = c + } + ))) + }, s = 0, l = e.length; l > s; s += 1) + a(s); + t.maxGeoLoadTaskCount += i, + t.maxGeoLoadTaskCount += o, + t.maxGeoLoadTaskCount > 0 || t._onGeoTaskFinished(), + this._loadBatchedGeo(n), + this._loadInstancedGeo(r) + } + , + BC.prototype.loadSceneAndGeos = function(A) { + for (var e = A.scene, t = this, i = 0, o = [], n = function(n, r) { + var a = e[n] + , s = A.children[n]; + a.geometries && a.geometries.length > 0 && !(a.batchedGeometries && a.batchedGeometries.length > 0 || a.instancedGeometries && a.instancedGeometries.length > 0) && (i += a.geometries.length || 0, + o = o.concat(a.geometries), + a.geometries.forEach((function(A) { + t.fileKeyFromModelKey[A] = s + } + ))) + }, r = 0, a = e.length; a > r; r += 1) + n(r); + t.maxLoadTaskCount += i, + this._loadGeo(o) + } + , + BC.prototype._loadBatchedGeo = function(A) { + var e = this; + if (vc.getDataFromIndexedDB && !this.offLine) { + for (var t = this.url, i = [], o = 0; A.length > o; o += 1) + i.push(t.mpkUrl(A[o])); + var n = this.model.getStorage(); + n && n.getBatch(i, (function(A) { + for (var t = function(t) { + if (A[i[t]]) + if (!0 === A[i[t]].split) { + var o = A[i[t]].list + , s = new Uint8Array(A[i[t]].length); + n.getBatch(o, (function(A) { + for (var n = !0, r = 0; o.length > r; r += 1) + A[o[r]] ? s.set(new Uint8Array(A[o[r]]), 4e7 * r) : (n = !1, + Bh.error("获取分割几何失败")); + if (n) { + var a = i[t].indexOf("fileKey="); + e._parseBatchedGeometrie(s.buffer, i[t].slice(a + 8)), + e._onGeoTaskFinished(), + Bh.debug("load geo from local") + } else { + var l = e.taskGeometrieManager + , c = i[t].indexOf("fileKey="); + if (-1 === c) + return void Bh.error("url is not has fileKey"); + l.addTask(i[t].slice(c + 8)), + Bh.debug("load geo from net"), + e.taskGeometrieManager.processTasks(e.loadBatchedGeometrie.bind(e)) + } + } + ), (function() { + Bh.error("获取分割几何失败") + } + )) + } else + a = i[t].indexOf("fileKey="), + e._parseBatchedGeometrie(A[i[t]], i[t].slice(a + 8)), + e._onGeoTaskFinished(), + Bh.debug("load geo from local"); + else { + if (r = e.taskGeometrieManager, + -1 === (a = i[t].indexOf("fileKey="))) + return Bh.error("url is not has fileKey"), + { + v: void 0 + }; + r.addTask(i[t].slice(a + 8)), + Bh.debug("load geo from net") + } + }, o = 0; i.length > o; o += 1) { + var r, a, s = t(o); + if ("object" === lc(s)) + return s.v + } + e.taskGeometrieManager.processTasks(e.loadBatchedGeometrie.bind(e)) + } + ), (function() { + for (var t = e.taskGeometrieManager, i = 0; A.length > i; i += 1) + t.addTask(A[i]); + t.processTasks(e.loadBatchedGeometrie.bind(e)) + } + )) + } else { + for (var r = this.taskGeometrieManager, a = 0; A.length > a; a += 1) + r.addTask(A[a]); + r.processTasks(e.loadBatchedGeometrie.bind(e)) + } + } + , + BC.prototype._loadInstancedGeo = function(A) { + var e = this; + if (vc.getDataFromIndexedDB && !this.offLine) { + for (var t = this.url, i = [], o = 0; A.length > o; o += 1) + i.push(t.mpkUrl(A[o])); + var n = this.model.getStorage(); + n && n.getBatch(i, (function(A) { + for (var t = function(t) { + if (A[i[t]]) + if (!0 === A[i[t]].split) { + var o = A[i[t]].list + , s = new Uint8Array(A[i[t]].length); + n.getBatch(o, (function(A) { + for (var n = 0; o.length > n; n += 1) + A[o[n]] ? s.set(new Uint8Array(A[o[n]]), 4e7 * n) : Bh.error("获取分割几何失败"); + var r = i[t].indexOf("fileKey="); + e._parseInstancedGeometrie(s.buffer, i[t].slice(r + 8)), + e._onGeoTaskFinished(), + Bh.debug("load geo from local") + } + ), (function() { + Bh.error("获取分割几何失败") + } + )) + } else + a = i[t].indexOf("fileKey="), + e._parseInstancedGeometrie(A[i[t]], i[t].slice(a + 8)), + e._onGeoTaskFinished(), + Bh.debug("load geo from local"); + else { + if (r = e.taskInstancedGeometrieManager, + -1 === (a = i[t].indexOf("fileKey="))) + return Bh.error("url is not has fileKey"), + { + v: void 0 + }; + r.addTask(i[t].slice(a + 8)), + Bh.debug("load geo from net") + } + }, o = 0; i.length > o; o += 1) { + var r, a, s = t(o); + if ("object" === lc(s)) + return s.v + } + e.taskInstancedGeometrieManager.processTasks(e.loadInstancedGeometrie.bind(e)) + } + ), (function() { + for (var t = e.taskInstancedGeometrieManager, i = 0; A.length > i; i += 1) + t.addTask(A[i]); + t.processTasks(e.loadInstancedGeometrie.bind(e)) + } + )) + } else { + for (var r = this.taskInstancedGeometrieManager, a = 0; A.length > a; a += 1) + r.addTask(A[a]); + r.processTasks(e.loadInstancedGeometrie.bind(e)) + } + } + , + BC.prototype._onGeoTaskFinished = function() { + (this.geoLoadTaskCount += 1, + this.notifyProgress) && (this.progressCallback && this.progressCallback({ + total: this.maxLoadTaskCount + this.maxGeoLoadTaskCount, + loaded: .8 * (this.loadTaskCount + this.geoLoadTaskCount), + modelKey: this.model.modelKey + })); + this.maxGeoLoadTaskCount > this.geoLoadTaskCount || (this.dataLoaded = !0, + Bh.timeEnd("几何数据加载时间"), + this.geoFinishCallback && this.geoFinishCallback()) + } + , + BC.prototype.getSceneTaskCount = function(A) { + var e = A.scenes; + return e += A.lines, + e += A.mpks, + vc.BorderLineDelayLoaded || (e += this.getAllBorderlineCount()), + e + } + , + BC.prototype._parseKDTree = function(A, e) { + var t = {}; + t = "string" == typeof A ? JSON.parse(A) : A, + this.model.kdTreeNode = this.model.kdTreeNode || []; + var i = this.fileKeyFromModelKey[e] || ""; + if (t) { + var o = new Zu; + o.modelKey = i, + o.init(t), + this.model.kdTreeNode.push(o) + } + } + ; + var xC = function(A, e) { + tf.call(this, A), + this.defaultManager = new Of(e,A), + this.instancedManager = new Hf(A), + this.loader = new BC(this) + }; + (xC.prototype = Object.create(tf.prototype)).prepare = function(A, e) { + if (this.isLoaded() && !this.isHidden()) { + this.prepareWireframe(this.model, e); + this.model.getMaterialManager(); + this.model.getMaterialManager()._updateTextureMapping(), + !this.model.lightmap || this.model.enableLightmap === vc.EnableLightmap && this.model.lightmapIntensity === vc.LightmapIntensity || (this.model.enableLightmap = vc.EnableLightmap, + this.model.lightmapIntensity = vc.LightmapIntensity, + this.rebuildIndicesforLightmap(), + this.updateNodes()) + } + } + , + xC.prototype.settleData = function(A) { + var e = this; + this.addNodeInfoToOctantMap(); + var t = !1 + , i = !1; + this.createMeshNodes((function() { + t = !0, + i && (e.loaded = !0, + e.model.getMaterialManager()._updateTextureMapping(), + e.clearCachedData(e.model), + A && A()) + } + )), + e.model.setLoaded(!0); + this.loader.geoFinishCallback = function() { + i = !0, + t && (e.loaded = !0, + e.model.getMaterialManager()._updateTextureMapping(), + e.clearCachedData(e.model), + A && A()) + } + , + this.loader.startLoadSceneAndGeos(this.model.getConfig()) + } + , + xC.prototype.addNodeInfoToOctantMap = function() { + var A = this.model.manager + , e = this.model.getEncodedDatabagId(); + this.loader.getDescriptor().traverseNodeInfosByComponent((function(t, i) { + A.addNodeInfoToOctantMap(e, t, i) + } + )) + } + , + xC.prototype.createMeshNodes = function(A) { + var e = this + , t = this.model; + vc.stepLoad && t.setLoaded(!0); + var i = this.loader.getDescriptor(); + this.instancedManager.createMeshNodes(t, i.getInstancedUserIds()), + this.defaultManager.asyncCreateMeshNodes(t, i.getStandardUserIds(), (function() { + t.getMaterialManager()._updateTextureMapping(), + e.loaded = !0, + A && A() + } + )) + } + , + xC.prototype.clearCachedData = function(A) { + this.loader.getDescriptor().destroyReader(), + this.loader.getDescriptor().clearReferencedMeshCache(), + this.defaultManager.clearCachedData(), + this.instancedManager.clearCachedData() + } + , + xC.prototype.createBatchedMeshNodes = function(A) { + this.defaultManager.createBatchedMeshNodes(this.model, A) + } + , + xC.prototype.createInstancedMeshNodes = function(A) { + this.instancedManager.createInstancedMeshNodes(this.model, A) + } + ; + var SC = function(A) { + $u.call(this, A) + }; + Object.assign(SC.prototype, $u.prototype); + var wC = function(A) { + Xu.call(this, A), + this.descriptor = new SC(A.model) + }; + (wC.prototype = Object.assign(wC.prototype, Xu.prototype)).loadSceneAndGeos = function(A) { + var e = A.scene + , t = this.model + , i = e.geometries.length || 0 + , o = []; + if (this.map = {}, + ap(this.dataVersion, "2.0.0")) + for (var n = 0; i > n; n += 1) + e.geometries[n].fileKey ? o.push(e.geometries[n].fileKey) : t.dispatchEventEx({ + type: Tc.SCENE_NOT_CLOSE, + modelKey: t.modelKey + }); + else + o = e.geometries; + this.maxLoadTaskCount += i, + this._loadGeo(o) + } + , + wC.prototype.getSceneTaskCount = function(A) { + var e = A.scenes; + return e += A.lines, + e += A.mpks, + vc.BorderLineDelayLoaded || (e += this.getAllBorderlineCount()), + e + } + ; + var MC = function(A, e) { + tf.call(this, A), + this.defaultManager = new vC(e,A), + this.instancedManager = new Hf(A), + this.loader = new wC(this) + }; + Object.assign(MC.prototype, tf.prototype), + MC.prototype.prepare = function(A) { + this.isLoaded() && !this.isHidden() && (this.model.getMaterialManager()._updateTextureMapping(), + this.model.clearMeshFromOctantMap(), + this.instancedManager.addAllInstanceNodeToScene(this.model), + this.defaultManager.cullNodes(this.model, A), + this.prepareWireframe(this.model), + this.updateNodes()) + } + , + MC.prototype.prepareWireframe = function(A, e) { + A.isActivateWireframe() && this.instancedManager.generateWireframe(A) + } + , + MC.prototype.settleData = function(A) { + this.addNodeInfoToOctantMap(), + this.createMeshNodes(A) + } + , + MC.prototype.addNodeInfoToOctantMap = function() { + var A = this.model.manager + , e = this.model.getEncodedDatabagId(); + this.model.getModelDescriptor().traverseNodeInfosByComponent((function(t, i) { + A.addNodeInfoToOctantMap(e, t, i) + } + )) + } + , + MC.prototype.createMeshNodes = function(A) { + var e = this.model + , t = this; + this.instancedManager.createMeshNodes(this.model, this.model.getModelDescriptor().getInstancedUserIds()), + this.defaultManager.asyncCreateMeshNodes(e, e.getModelDescriptor().getStandardUserIds(), (function() { + e.getMaterialManager()._updateTextureMapping(), + t.updateNodes(), + e.getModelDescriptor().clearReferencedMeshCache(), + t.loaded = !0, + A && A() + } + )) + } + , + MC.prototype.disposeBufferAfterVbo = function() {} + , + MC.prototype.explosion = function(A) { + if (this.isLoaded()) { + var e = this.model.getComponentlist(); + A.componentKey = e, + this.componentsExplosion(A) + } + } + , + MC.prototype.closeExplosion = function() { + this.explosion({}) + } + , + MC.prototype.componentsExplosion = function(A) { + if (this.isLoaded()) { + var e = A.coefficientX || 1 + , t = A.coefficientY || 1 + , i = A.coefficientZ || 1 + , o = A.offsetX || 0 + , n = A.offsetY || 0 + , r = A.offsetZ || 0 + , a = null; + if (A.center) + a = (new y).fromArray(A.center); + else if (1 !== e || 1 !== t || 1 !== i || 0 !== o || 0 !== n || 0 !== r) + return; + var s = this.model + , l = s.manager + , c = Array.isArray(A.componentKey) ? A.componentKey : [A.componentKey] + , h = new y + , d = new aA + , p = new y(0,0,0) + , g = new y(0,0,0) + , u = new y + , f = s.getModelMatrix() + , m = new M; + f && a && (m.getInverse(f), + a.applyMatrix4(m)); + for (var C = 0; c.length > C; C += 1) { + var v = c[C] + , I = s.getComponentInfo(v); + if (I && I.length > 0) + for (var E = 0, B = I.length; B > E; E += 1) { + var x = I[E] + , S = x.mesh; + if (S) { + if (d.copy(x.boundingBox), + d.getCenter(h), + x.userData || (x.userData = {}), + p.set(0, 0, 0), + g.set(0, 0, 0), + 1 !== e || 1 !== t || 1 !== i || x.userData.explosionFactor) { + x.userData.explosionFactor || (x.userData.explosionFactor = new y(1,1,1), + x.userData.explosionBaseDifference = h.sub(a).clone()); + var w = x.userData.explosionFactor + , b = x.userData.explosionBaseDifference; + p.set((e - w.x) * b.x, (t - w.y) * b.y, (i - w.z) * b.z), + 1 === e && 1 === t && 1 === i ? (x.userData.explosionFactor = void 0, + x.userData.explosionBaseDifference = void 0) : w.set(e, t, i) + } + if (0 !== o || 0 !== n || 0 !== r || x.userData.explosionOffset) { + x.userData.explosionOffset || (x.userData.explosionOffset = new y(0,0,0)); + var U = x.userData.explosionOffset; + g.set(o - U.x, n - U.y, r - U.z), + 0 === o && 0 === n && 0 === r ? x.userData.explosionOffset = void 0 : U.set(o, n, r) + } + if (u.set(p.x + g.x, p.y + g.y, p.z + g.z), + 0 !== u.x || 0 !== u.y || 0 !== u.z) { + x.userData.explosionFactor || x.userData.explosionOffset ? l.explosionList[v] || (l.explosionList[v] = !0) : delete l.explosionList[v], + m.makeTranslation(u.x, u.y, u.z), + x.transformation || (x.transformation = !0, + x.transformationOriginalMatrix = x.matrix.clone(), + x.applyMatrix = new M, + x.transformationOriginalBoundingBox = x.boundingBox.clone()), + x.matrix.premultiply(m), + x.applyMatrix.premultiply(m), + x.boundingBox.copy(x.transformationOriginalBoundingBox).applyMatrix4(x.applyMatrix); + var F = S.matrixAutoUpdate; + S.matrixAutoUpdate = !1, + S.applyMatrix4(m), + S.updateMatrixWorld(!0), + S.matrixAutoUpdate = F; + var K = x.wireframeMeshs; + if (K) + for (var Q = 0, R = K.length; R > Q; Q += 1) { + var T = K[Q]; + F = T.matrixAutoUpdate, + T.matrixAutoUpdate = !1, + T.matrix.copy(S.matrix), + T.updateMatrixWorld(!0), + T.matrixAutoUpdate = F + } + } + } + } + } + } + } + , + MC.prototype.closeComponentsExplosion = function(A) { + var e = Array.isArray(A) ? A : [A]; + this.componentsExplosion({ + componentKey: e + }) + } + ; + var bC = function(A) { + this.model = A, + this.config = null, + this.statistics = { + renderableCount: 0, + renderableTotal: vc.maxObjectNumInPool, + renderableTotalForPool: vc.maxObjectNumInPool, + numOfElements: 0, + numOfTriangles: 0, + memoeryInfo: null + }, + this.transformInfos = { + octreeTransformed: !0, + originalBoundingBox: null, + boundingBox: null, + position: new y, + rotation: new f, + scale: new y(1,1,1), + transformMatrix: new M, + originalMatrix: new M + } + }; + bC.prototype.destroy = function() { + this.model = null, + this.config = null, + this.statistics = null, + this.transformInfos = null + } + , + bC.prototype.load = function(A) { + var e = this + , t = this.model + , i = t.dataUrl + , o = function(o) { + var n = {}; + if ("string" == typeof o) + try { + n = JSON.parse(o) + } catch (A) { + return t.setEmptyScene(!0), + void t.dispatchEventEx({ + type: Rc.ON_LOAD_INVALID_SCENE, + modelKey: t.modelKey + }) + } + else + n = o; + if (n && "SUCCESS" === n.code) { + if (vc.offLine) + e.model.getStorage().put(i.projectUrl(), n, e.model.modelKey, (function() {} + ), (function() {} + )); + if (-1 === Number(n.data.status)) + return void t.dispatchEventEx({ + type: Tc.PARSEFAILE, + modelKey: t.modelKey + }); + if (3 > Number(n.data.status)) + return void t.dispatchEventEx({ + type: Tc.PARSING, + modelKey: t.modelKey + }); + if (n.data.type === Zc.DWG) + return t.dispatchEventEx({ + type: Tc.IS2D, + modelKey: t.modelKey + }), + void Bh.error("模型 ", t.modelKey, " 是图纸文件,请使用EIMDRAWINGS库加载"); + !n.data.profiles || n.data.children && n.data.children.length > 1 ? (e.dataVersion = "2.0.0", + i.apiVersion = "2.0.0", + e.model.dataVersion = e.dataVersion) : (e.dataVersion = n.data.profiles.geo || "1.0.0", + i.apiVersion = n.data.profiles.api, + e.model.dataVersion = e.dataVersion), + e._parse(n.data), + t.dispatchEventEx({ + type: Rc.ON_LOAD_CONFIG_FINISH, + modelKey: t.modelKey + }), + A && A() + } else + Bh.log(t.modelKey, "config load error! ", n.message), + t.dispatchEventEx({ + type: Rc.ON_LOAD_ERROR, + modelKey: t.modelKey, + code: n.code, + message: n.message + }), + t.manager.unload(t.modelKey) + }; + if (vc.offLine) { + var n = this.model.getStorage(); + n && n.getBatch([i.projectUrl()], (function(A) { + A[i.projectUrl()] ? o(A[i.projectUrl()]) : _d({ + type: "GET", + url: i.projectUrl(), + headers: { + Authorization: t.accessToken + }, + success: o, + error: function(A) { + t.dispatchEventEx({ + type: Rc.ON_NETWORK_ERROR, + modelKey: t.modelKey, + data: A + }) + } + }) + } + ), (function() {} + )) + } else + _d({ + type: "GET", + url: i.projectUrl(), + headers: { + Authorization: t.accessToken + }, + success: o, + error: function(A, e) { + switch (A) { + case 401: + t.dispatchEventEx({ + type: Rc.ACCOUNT_NO_EXIST, + modelKey: t.modelKey, + data: e + }); + break; + case 403: + t.dispatchEventEx({ + type: Rc.NO_PERMISSION, + modelKey: t.modelKey, + data: e + }); + break; + default: + t.dispatchEventEx({ + type: Rc.ON_NETWORK_ERROR, + modelKey: t.modelKey, + data: A + }) + } + } + }) + } + , + bC.prototype._parse = function(A) { + this.config = A, + A.lengthUnit && (this.model.originalLengthUnit = A.lengthUnit), + vc.AutoMergeComponent && A.componentCount > vc.AutoMergeComponentCount && (vc.MergeComponent = !0), + this._toStatistics(A), + this._setTransformInfos(A), + this._chooseRendering(A), + this._setHandler(A) + } + , + bC.prototype._getDataProvider = function(A) { + if (vc.DataProvider === Wc.MERGED && void 0 !== A.bmpks && A.bmpks > 0) + return Bh.debug("data from: merged"), + Wc.MERGED; + if (vc.LoadComponentOnDemand && A.scene && A.scene.map) { + if (vc.DataProvider === Wc.LAYER_SCENE) + return A.layers > 1 ? (Bh.debug("data from: layer scene"), + Wc.LAYER_SCENE) : (Bh.debug("data from: layer"), + Wc.LAYER); + if (vc.DataProvider === Wc.LAYER) + return Bh.debug("data from: layer"), + Wc.LAYER + } + if (vc.DataProvider === Wc.AUTO) { + if (vc.LoadComponentOnDemand && A.scene && A.scene.map) + return np(this.dataVersion, "2.0.0") && (vc.MergeComponent = !0), + Bh.debug("data from: layer"), + Wc.LAYER; + if (!vc.loadBatch && A.scene.geometries && A.scene.geometries.length > 0) + return rp(this.dataVersion, "2.0.0") && (vc.MergeComponent = !0), + Wc.DEFAULT; + if (A.scene.batchedGeometries && A.scene.batchedGeometries.length > 0 || A.scene.instancedGeometries && A.scene.instancedGeometries.length > 0) + return vc.MergeComponent = !0, + Wc.MERGED; + if (vc.MergeComponent && void 0 !== A.bmpks && A.bmpks > 0) + return Bh.debug("data from: merged"), + Wc.MERGED + } + return Bh.debug("data from: default"), + Wc.DEFAULT + } + , + bC.prototype._chooseRendering = function(A) { + this.model.manager.chooseRendering(this.statistics.memoeryInfo) + } + , + bC.prototype._setHandler = function(A) { + var e = this._getDataProvider(A) + , t = null + , i = this.model; + if (Array.isArray(A.scene)) { + for (var o = 0, n = A.children.length; n > o; o += 1) { + var r = A.scene[o]; + r && (i.subModel[A.children[o]] = (new M).fromArray(r.matrix || [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1])) + } + t = new xC(i,!1), + i.merged = !0, + vc.MergeComponent = !0 + } else if (i.hasAnimation && vc.EnableAnimation) + t = new MC(i); + else if (vc.MergeComponent) { + switch (e) { + case Wc.LAYER: + vc.HasLayerData = !0, + vc.LoadGeoOnDemand = !0, + (t = new dC(i,!1)).layerProvider.cachedLayerData = A.scene.map; + break; + case Wc.LAYER_SCENE: + vc.HasLayerData = !0, + vc.LoadGeoOnDemand = !0; + break; + case Wc.MERGED: + t = new oC(i,!1); + break; + default: + t = new Yf(i,!1) + } + i.merged = !0 + } else if (vc.OrganizeNodesByCameraView) + switch (e) { + case Wc.LAYER: + case Wc.LAYER_SCENE: + vc.HasLayerData = !0, + vc.LoadGeoOnDemand = !0 + } + else + switch (e) { + case Wc.LAYER: + vc.HasLayerData = !0, + vc.LoadGeoOnDemand = !0, + (t = new IC(i)).layerProvider.cachedLayerData = A.scene.map; + break; + case Wc.LAYER_SCENE: + vc.HasLayerData = !0, + vc.LoadGeoOnDemand = !0; + break; + case Wc.MERGED: + break; + default: + t = new MC(i) + } + i._handler = t + } + , + bC.prototype._setTransformInfos = function(A) { + if (this.model.hasAnimation = A.hasAnimation, + this.transformInfos.octreeTransformed = !1, + this.transformInfos.boundingBox && this.transformInfos.boundingBox.isBox3 || (this.transformInfos.boundingBox = new aA), + this.transformInfos.boundingBox.expandByPoint(new y(A.minBoundary.x,A.minBoundary.y,A.minBoundary.z)), + this.transformInfos.boundingBox.expandByPoint(new y(A.maxBoundary.x,A.maxBoundary.y,A.maxBoundary.z)), + this.transformInfos.transformMatrix.compose(this.transformInfos.position, this.transformInfos.rotation, this.transformInfos.scale), + this.transformInfos.transformMatrix.fromArray(A.matrix || [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]), + A.transform && Array.isArray(A.transform)) { + var e = (new M).fromArray(A.transform || [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]); + this.transformInfos.transformMatrix.multiplyMatrices(this.transformInfos.transformMatrix, e) + } + this.transformInfos.originalMatrix.copy(this.transformInfos.transformMatrix), + this.model.setModelMatrix(this.transformInfos.transformMatrix), + this.model.manager.updateScene() + } + , + bC.prototype._toStatistics = function(A) { + A.count = {}, + A.count.texture_pixels && A.count.texture_pixels > vc.MaxTexturePixels && (vc.EnableTextureLoading = !1), + void 0 !== A.count && (void 0 !== A.count.mesh_face && (this.statistics.numOfTriangles += A.count.mesh_face), + this.statistics.renderableTotal = 0, + this.statistics.renderableTotalForPool = 0, + void 0 !== A.count.geom_box && void 0 !== A.count.geom_pipe && void 0 !== A.count.geom_tube && void 0 !== A.count.mesh ? (this.statistics.renderableTotal += A.count.geom_box, + this.statistics.renderableTotal += A.count.geom_pipe, + this.statistics.renderableTotal += A.count.geom_tube, + this.statistics.renderableTotal += A.count.mesh, + this.statistics.renderableTotalForPool += 6 * A.count.geom_box, + this.statistics.renderableTotalForPool += 3 * A.count.geom_pipe, + this.statistics.renderableTotalForPool += A.count.geom_tube, + this.statistics.renderableTotalForPool += A.count.mesh, + this.statistics.numOfTriangles += 12 * A.count.geom_box, + this.statistics.numOfTriangles += 32 * A.count.geom_pipe, + this.statistics.numOfTriangles += 32 * A.count.geom_tube) : void 0 !== A.count.geom && void 0 !== A.count.mesh && (this.statistics.renderableTotal += A.count.geom, + this.statistics.renderableTotal += A.count.mesh, + this.statistics.numOfTriangles += 12 * A.count.geom, + this.statistics.numOfElements = this.statistics.renderableTotal, + this.statistics.renderableTotalForPool = this.statistics.renderableTotal), + void 0 !== A.count.item && (this.statistics.numOfElements = A.count.item)), + this.statistics.memoeryInfo = this._computeApproximateMemoerySize(A) + } + , + bC.prototype._computeApproximateMemoerySize = function(A) { + var e = 0 + , t = 0 + , i = A.count.mesh_vertex || 0 + , o = A.count.mesh_face || 0 + , n = A.count.geom_box || 0 + , r = A.count.geom_pipe || 0 + , a = A.count.texture_pixels || 0; + t += 8 * i, + t += 3 * o, + t += 0, + t += 0, + e += 6 * i, + e += 3 * o, + e += 0, + e += 0; + var s = 0; + if (s += o, + n > 0 && (s += 12 * n), + r > 0 && (s += 124 * r), + s += 0, + vc.Instance) { + n > 0 && (t += 192, + t += 36, + t += 24 * n, + e += 144, + e += 36, + e += 18 * n), + r > 0 && (t += 1040, + t += 372, + t += 24 * r, + e += 780, + e += 372, + e += 18 * r) + } else + n > 0 && (t += 24 * n * 8, + t += 12 * n * 3, + e += 24 * n * 6, + e += 12 * n * 3), + r > 0 && (t += 130 * r * 8, + t += 124 * r * 3, + e += 130 * r * 6, + e += 124 * r * 3); + return vc.EnableTextureLoading && (t += 4 * a, + e += 4 * a), + t *= 4, + e *= 4, + t *= 1 / 1048576, + e *= 1 / 1048576, + { + maxMemoerySize: t = Math.ceil(t), + minMemoerySize: e = Math.ceil(e), + triangleNumber: s, + instanceEnabled: vc.Instance + } + } + , + bC.prototype.getMemoeryInfo = function() { + return this.statistics.memoeryInfo + } + , + bC.prototype.getStatistics = function() { + return this.statistics + } + , + bC.prototype.getConfig = function() { + return this.config + } + , + bC.prototype.getTransforms = function() { + return this.transformInfos + } + , + bC.prototype.setRenderableCount = function(A) { + this.statistics.renderableCount = A + } + ; + var UC = function(A) { + ef.call(this, A), + this.descriptor = new Af(A.model), + this.fileKeyFromModelKey = {} + }; + (UC.prototype = Object.assign(UC.prototype, ef.prototype)).loadData = function() { + var A = this + , e = this.model; + this.modelDataVersion = e.configLoader.modelDataVersion; + e.getConfig(); + var t = e.configLoader.scenes + , i = [] + , o = [] + , n = [] + , r = [] + , a = [] + , s = [] + , l = [] + , c = []; + A.maxLoadTaskCount = 0, + A.maxLoadTextureCount = 0; + for (var h = function(h) { + var d = t[h].scene + , F = t[h].dataVersion + , K = t[h].modelKey; + if (!(d && d.components && d.geometries && d.materials && d.textures)) + return e.setEmptyScene(!0), + Bh.error("scene is null,modelKey is ", K), + e.dispatchEventEx({ + type: Rc.ON_LOAD_EMPTY_SCENE, + modelKey: K + }), + { + v: void 0 + }; + if (p = d.components.length || 0, + g = d.geometries.length || 0, + u = d.materials.length || 0, + f = d.textures.length || 0, + m = [], + C = [], + y = [], + v = [], + I = [], + E = [], + B = d.textures, + x = [], + op(F, "2.0.0")) + m = d.components, + C = d.geometries, + y = d.materials; + else { + for (S = 0; p > S; S += 1) + d.components[S].fileKey ? m.push(d.components[S].fileKey) : e.dispatchEventEx({ + type: Tc.SCENE_NOT_CLOSE, + modelKey: K + }); + for (w = 0; g > w; w += 1) + d.geometries[w].fileKey ? C.push(d.geometries[w].fileKey) : e.dispatchEventEx({ + type: Tc.SCENE_NOT_CLOSE, + modelKey: K + }); + for (M = 0; u > M; M += 1) + d.materials[M].fileKey ? y.push(d.materials[M].fileKey) : e.dispatchEventEx({ + type: Tc.SCENE_NOT_CLOSE, + modelKey: K + }) + } + if (d.trees.length > 0) + for (b = 0; d.trees.length > b; b += 1) + "partition" === (U = d.trees[b]).type && x.push(U.fileKey); + A.maxLoadTaskCount += p, + A.maxLoadTaskCount += g, + A.maxLoadTaskCount += u, + vc.EnableTextureLoading && (A.maxLoadTextureCount += f), + A.maxLoadTaskCount += 0, + A.maxLoadTaskCount += 0, + A.maxLoadTaskCount += 0, + A.maxLoadTaskCount += x.length, + m.forEach((function(e) { + A.fileKeyFromModelKey[e] = K + } + )), + C.forEach((function(e) { + A.fileKeyFromModelKey[e] = K + } + )), + y.forEach((function(e) { + A.fileKeyFromModelKey[e] = K + } + )), + v.forEach((function(e) { + A.fileKeyFromModelKey[e] = K + } + )), + I.forEach((function(e) { + A.fileKeyFromModelKey[e] = K + } + )), + E.forEach((function(e) { + A.fileKeyFromModelKey[e] = K + } + )), + B.forEach((function(e) { + A.fileKeyFromModelKey[e] = K + } + )), + x.forEach((function(e) { + A.fileKeyFromModelKey[e] = K + } + )), + i = i.concat(m), + o = o.concat(C), + n = n.concat(y), + r = r.concat(v), + a = a.concat(I), + s = s.concat(E), + l = l.concat(B), + c = c.concat(x) + }, d = 0; t.length > d; d += 1) { + var p, g, u, f, m, C, y, v, I, E, B, x, S, w, M, b, U, F = h(d); + if ("object" === lc(F)) + return F.v + } + if (A.progress.total += A.maxLoadTaskCount, + 1 > A.maxLoadTaskCount) + return Bh.info("Nothing to load ", e.modelKey), + void e.dispatchEventEx({ + type: Tc.SCENE_NOTHING_TO_LOAD, + modelKey: e.modelKey + }); + Bh.time("数据加载时间"), + A._loadComponent(i), + A._loadMaterial(n), + vc.EnableTextureLoading && A.maxLoadTextureCount.length > 0 ? A._loadTextures(l) : A._onLoadTexture(), + A._loadTextures(l), + A._loadKDTree(c), + A._loadClips(a), + A._loadBones(r), + A._loadNodes(s), + A.offLine && A.loadAttribute(), + A._loadGeo(o) + } + , + UC.prototype.loadSceneAndGeos = function(A) { + this._loadGeo(A) + } + , + UC.prototype._loadGeometrie = function(A) { + var e = this; + if (vc.getDataFromIndexedDB && !this.offLine) { + var t = this.url + , i = [] + , o = []; + i.push(o); + for (var n = 0, r = 0; A.length > r; r += 1) + 50 > n || (i.push(o = []), + n = 0), + n += 1, + o.push(t.mpkUrl(A[r])); + var a = this.model.getStorage(); + if (a) + for (var s = function(t, o) { + var n = i[o]; + a.getBatch(n, (function(A) { + for (var t = function(t) { + if (-1 === (o = n[t].indexOf("fileKey="))) + return Bh.error("url is not has fileKey"), + { + v: void 0 + }; + var i = n[t].slice(o + 8); + if (A[n[t]]) + if (!0 === A[n[t]].split) { + var s = A[n[t]].list + , l = new Uint8Array(A[n[t]].length); + a.getBatch(s, (function(A) { + for (var t = 0; s.length > t; t += 1) + A[s[t]] ? l.set(new Uint8Array(A[s[t]]), 4e7 * t) : Bh.error("获取分割几何失败"); + e._parseGeometrie(l.buffer, i), + Bh.debug("load geo from local"), + e._onTaskFinished() + } + ), (function() { + Bh.error("获取分割几何失败") + } + )) + } else + e._parseGeometrie(A[n[t]], i), + Bh.debug("load geo from local"), + e._onTaskFinished(); + else { + if (r = e.taskGeometrieManager, + -1 === n[t].indexOf("fileKey=")) + return Bh.error("url is not has fileKey"), + { + v: void 0 + }; + r.addTask(i), + Bh.debug("load geo from net") + } + }, i = 0; n.length > i; i += 1) { + var o, r, s = t(i); + if ("object" === lc(s)) + return s.v + } + e.taskGeometrieManager.processTasks(e.loadGeometrie.bind(e)) + } + ), (function() { + for (var t = e.taskGeometrieManager, i = 0; A.length > i; i += 1) + t.addTask(A[i]); + t.processTasks(e.loadGeometrie.bind(e)) + } + )) + }, l = 0, c = i.length; c > l; l += 1) + s(0, l) + } else { + for (var h = this.taskGeometrieManager, d = 0; A.length > d; d += 1) + h.addTask(A[d]); + h.processTasks(e.loadGeometrie.bind(e)) + } + } + , + UC.prototype._loadKDTree = function(A) { + var e = this; + if (vc.getDataFromIndexedDB && !this.offLine) { + var t = this.url + , i = [] + , o = []; + i.push(o); + for (var n = 0, r = 0; A.length > r; r += 1) + 50 > n || (i.push(o = []), + n = 0), + n += 1, + o.push(t.mpkUrl(A[r])); + var a = this.model.getStorage(); + if (a) + for (var s = function(t, o) { + var n = i[o]; + a.getBatch(n, (function(A) { + for (var t = 0; n.length > t; t += 1) { + var i = n[t].indexOf("fileKey="); + if (-1 === i) + return void Bh.error("url is not has fileKey"); + var o = n[t].slice(i + 8); + if (A[n[t]]) + e._parseKDTree(A[n[t]], o), + Bh.debug("load kdtree from local"), + e._onTaskFinished(); + else { + var r = e.taskComponentManager; + if (-1 === n[t].indexOf("fileKey=")) + return void Bh.error("url is not has fileKey"); + r.addTask(o), + r.processTasks(e.loadKDTree.bind(e)), + Bh.debug("load kdtree from net") + } + } + } + ), (function() { + for (var t = e.taskComponentManager, i = 0; A.length > i; i += 1) + t.addTask(A[i]); + t.processTasks(e.loadKDTree.bind(e)) + } + )) + }, l = 0, c = i.length; c > l; l += 1) + s(0, l) + } else { + for (var h = this.taskComponentManager, d = 0; A.length > d; d += 1) + h.addTask(A[d]); + h.processTasks(e.loadKDTree.bind(e)) + } + } + , + UC.prototype._loadBones = function(A) { + var e = this; + if (vc.getDataFromIndexedDB && !this.offLine) { + for (var t = this.url, i = [], o = 0; A.length > o; o += 1) + i.push(t.bonesUrl(A[o])); + var n = this.model.getStorage(); + n && n.getBatch(i, (function(A) { + for (var t = 0; i.length > t; t += 1) { + var o = i[t].indexOf("fileKey="); + if (-1 === o) + return void Bh.error("url is not has fileKey"); + var n = i[t].slice(o + 8); + if (A[i[t]]) + e._parseBones(A[i[t]], n), + Bh.debug("load Bones from local"), + e._onTaskFinished(); + else { + if (-1 === i[t].indexOf("fileKey=")) + return void Bh.error("url is not has fileKey"); + e.loadBones(i[t].slice(o + 8), (function() {} + )), + Bh.debug("load Bones from net") + } + } + } + ), (function() { + for (var t = 0; A.length > t; t += 1) + e.loadBones(A[t], (function() {} + )) + } + )) + } else { + for (var r = this.taskComponentManager, a = 0; A.length > a; a += 1) + r.addTask(A[a]); + r.processTasks(e.loadBones.bind(e)) + } + } + , + UC.prototype._loadClips = function(A) { + var e = this; + if (vc.getDataFromIndexedDB && !this.offLine) { + for (var t = this.url, i = [], o = 0; A.length > o; o += 1) + i.push(t.clipsUrl(A[o])); + var n = this.model.getStorage(); + n && n.getBatch(i, (function(A) { + for (var t = 0; i.length > t; t += 1) { + var o = i[t].indexOf("fileKey="); + if (-1 === o) + return void Bh.error("url is not has fileKey"); + var n = i[t].slice(o + 8); + if (A[i[t]]) + e._parseClips(A[i[t]], n), + Bh.debug("load Clips from local"), + e._onTaskFinished(); + else { + if (-1 === i[t].indexOf("fileKey=")) + return void Bh.error("url is not has fileKey"); + e.loadClips(i[t].slice(o + 8), (function() {} + )), + Bh.debug("load Clips from net") + } + } + } + ), (function() { + for (var t = 0; A.length > t; t += 1) + e.loadClips(A[t], (function() {} + )) + } + )) + } else { + for (var r = this.taskComponentManager, a = 0; A.length > a; a += 1) + r.addTask(A[a]); + r.processTasks(e.loadClips.bind(e)) + } + } + , + UC.prototype._loadNodes = function(A) { + var e = this; + if (vc.getDataFromIndexedDB && !this.offLine) { + for (var t = this.url, i = [], o = 0; A.length > o; o += 1) + i.push(t.nodesUrl(A[o])); + var n = this.model.getStorage(); + n && n.getBatch(i, (function(A) { + for (var t = 0; i.length > t; t += 1) { + var o = i[t].indexOf("fileKey="); + if (-1 === o) + return void Bh.error("url is not has fileKey"); + var n = i[t].slice(o + 8); + if (A[i[t]]) + e._parseNodes(A[i[t]], n), + Bh.debug("load Nodes from local"), + e._onTaskFinished(); + else { + if (-1 === i[t].indexOf("fileKey=")) + return void Bh.error("url is not has fileKey"); + e.loadNodes(i[t].slice(o + 8), (function() {} + )), + Bh.debug("load Nodes from net") + } + } + } + ), (function() { + for (var t = 0; A.length > t; t += 1) + e.loadNodes(A[t], (function() {} + )) + } + )) + } else { + for (var r = this.taskComponentManager, a = 0; A.length > a; a += 1) + r.addTask(A[a]); + r.processTasks(e.loadNodes.bind(e)) + } + } + , + UC.prototype._loadComponent = function(A) { + var e = this; + if (vc.getDataFromIndexedDB && !this.offLine) { + var t = this.url + , i = [] + , o = []; + i.push(o); + for (var n = 0, r = 0; A.length > r; r += 1) + 50 > n || (i.push(o = []), + n = 0), + n += 1, + o.push(t.mpkUrl(A[r])); + var a = this.model.getStorage(); + if (a) + for (var s = function(t, o) { + var n = i[o]; + a.getBatch(n, (function(A) { + for (var t = 0; n.length > t; t += 1) { + var i = n[t].indexOf("fileKey="); + if (-1 === i) + return void Bh.error("url is not has fileKey"); + var o = n[t].slice(i + 8); + if (A[n[t]]) + e._parseComponent(A[n[t]], o), + Bh.debug("load com from local"), + e._onTaskFinished(); + else { + var r = e.taskComponentManager; + if (-1 === n[t].indexOf("fileKey=")) + return void Bh.error("url is not has fileKey"); + r.addTask(o), + r.processTasks(e.loadComponent.bind(e)), + Bh.debug("load com from net") + } + } + } + ), (function() { + for (var t = e.taskComponentManager, i = 0; A.length > i; i += 1) + t.addTask(A[i]); + t.processTasks(e.loadComponent.bind(e)) + } + )) + }, l = 0, c = i.length; c > l; l += 1) + s(0, l) + } else { + for (var h = this.taskComponentManager, d = 0; A.length > d; d += 1) + h.addTask(A[d]); + h.processTasks(e.loadComponent.bind(e)) + } + } + , + UC.prototype._loadMaterial = function(A) { + var e = this; + if (vc.getDataFromIndexedDB && !this.offLine) { + for (var t = this.url, i = [], o = 0; A.length > o; o += 1) + i.push(t.mpkUrl(A[o])); + var n = this.model.getStorage(); + n && n.getBatch(i, (function(A) { + for (var t = 0; i.length > t; t += 1) { + var o = i[t].indexOf("fileKey="); + if (-1 === o) + return void Bh.error("url is not has fileKey"); + var n = i[t].slice(o + 8); + if (A[i[t]]) + e._parseMaterial(A[i[t]], n), + Bh.debug("load mat from local"), + e._onTaskFinished(); + else { + var r = e.taskMaterialManager; + if (-1 === i[t].indexOf("fileKey=")) + return void Bh.error("url is not has fileKey"); + r.addTask(n), + r.processTasks(e.loadMaterial.bind(e)), + Bh.debug("load mat from net") + } + } + } + ), (function() { + for (var t = e.taskMaterialManager, i = 0; A.length > i; i += 1) + t.addTask(A[i]); + t.processTasks(e.loadMaterial.bind(e)) + } + )) + } else { + for (var r = this.taskMaterialManager, a = 0; A.length > a; a += 1) + r.addTask(A[a]); + r.processTasks(e.loadMaterial.bind(e)) + } + } + , + UC.prototype._loadTextures = function(A) { + var e = this.model.materialManager.textures + , t = this; + if (vc.getDataFromIndexedDB && !this.offLine) { + for (var i = this.url, o = [], n = 0; A.length > n; n += 1) + o.push(i.mpkUrl(A[n])); + var r = this.model.getStorage(); + r && r.getBatch(o, (function(A) { + for (var i = 0; o.length > i; i += 1) + if (A[o[i]]) { + var n = o[i].indexOf("fileKey="); + if (-1 === n) + return void Bh.error("url is not has fileKey"); + var r = o[i].slice(n + 8) + , a = new d; + Bh.debug("load tex from local"), + e[r] = a; + var s = document.createElement("img"); + a.wrapS = a.wrapT = 1e3, + s.onload = function(e) { + "string" != typeof A[o[i]] && window.URL.revokeObjectURL(s.src), + t.model.textureNeedsUpdate = !0, + t._onLoadTexture() + } + , + s.onerror = function(A) { + t.model.dispatchEventEx({ + type: Tc.LOAD_TEXTURE_ERROR + }) + } + , + s.src = "string" == typeof A[o[i]] ? A[o[i]] : window.URL.createObjectURL(A[o[i]]), + a.image = s, + a.needsUpdate = !0 + } else { + var l = t.taskTexturesManager + , c = o[i].indexOf("fileKey="); + if (-1 === c) + return void Bh.error("url is not has fileKey"); + l.addTask(o[i].slice(c + 8)), + l.processTasks(t.loadTextures.bind(t)), + Bh.debug("load tex from net") + } + } + ), (function() { + for (var e = t.taskTexturesManager, i = 0; A.length > i; i += 1) + e.addTask(A[i]); + e.processTasks(t.loadTextures.bind(t)) + } + )) + } else { + for (var a = this.taskTexturesManager, s = 0; A.length > s; s += 1) + a.addTask(A[s]); + a.processTasks(t.loadTextures.bind(t)) + } + } + , + UC.prototype._parseGeometrie = function(A, e) { + var t = this.fileKeyFromModelKey[e] || "" + , i = new ku.GeometryReader(A,this.modelDataVersion[t]) + , o = this.descriptor; + if (o) { + for (var n = i.geoCount, r = 0; n > r; r += 1) { + var a = i.geomMap[r]; + void 0 !== a.position && void 0 !== a.index && void 0 !== a.normal ? o.cacheReferencedMeshBufferData(t + a.geoId, a) : Bh.error("Error Geometry!") + } + i = null + } + } + , + UC.prototype._parseMaterial = function(A, e) { + var t = this.descriptor; + if (t) { + var i = new Du(A,this.modelDataVersion[this.fileKeyFromModelKey[e] || ""]); + if (Array.isArray(i.materialMap)) { + var o = i.materialCount; + if (0 > o) + return; + for (var n = 0; o > n; n += 1) { + var r = i.materialMap[n]; + t.cacheReferencedMeshMaterialData(r.matId, r) + } + } else + for (var a in i.materialMap) + t.cacheReferencedMeshMaterialData(a, i.materialMap[a]); + i = null + } + } + , + UC.prototype._parseComponent = function(A, e) { + if (A) { + var t = new Uu(A) + , i = t.compArr.length + , o = this.descriptor; + if (o) { + for (var n = this.fileKeyFromModelKey[e] || "", r = 0; i > r; r += 1) { + var a = t.compArr[r]; + -1 !== a.geoId && (a.geoId = n + a.geoId, + -1 !== a.matId && (a.matId = n + a.matId), + this.model.submodel[n] = this.model.submodel[n] || [], + this.model.submodel[n].push(a.key)), + o.cacheReferencedMeshComponentData(a.key, a) + } + t = null + } + } else + Bh.error("没有数据") + } + , + UC.prototype._parseKDTree = function(A, e) { + var t = {}; + if (t = "string" == typeof A ? JSON.parse(A) : A, + this.model.kdTreeNode = this.model.kdTreeNode || [], + t) { + var i = new Zu; + i.init(t), + this.model.kdTreeNode.push(i) + } + } + , + UC.prototype._parseNodes = function(A, e) { + var t = this.descriptor; + if (t) { + var i = {}; + i = "string" == typeof A ? JSON.parse(A) : A, + Bh.debug("nodes", i), + t.cacheReferencedMeshNodesData(i) + } + } + , + UC.prototype._parseClips = function(A, e) { + var t = this.descriptor; + if (t) { + var i = {}; + i = "string" == typeof A ? JSON.parse(A) : A, + Bh.debug("clips", i), + t.cacheReferencedMeshClipsData(i) + } + } + , + UC.prototype._parseBones = function(A, e) { + var t = new ku.BoneReader(A) + , i = this.descriptor; + if (i) { + for (var o = t.boneCount, n = 0; o > n; n += 1) { + var r = t.boneMap[n]; + Bh.debug("bones", r), + i.cacheReferencedMeshBoneBufferData(r.geoId, r) + } + t = null + } + } + , + UC.prototype._loadComponent = function(A) { + var e = this; + if (vc.getDataFromIndexedDB && !this.offLine) { + var t = this.url + , i = [] + , o = []; + i.push(o); + for (var n = 0, r = 0; A.length > r; r += 1) + 50 > n || (i.push(o = []), + n = 0), + n += 1, + o.push(t.mpkUrl(A[r])); + var a = this.model.getStorage(); + if (a) + for (var s = function(t, o) { + var n = i[o]; + a.getBatch(n, (function(A) { + for (var t = 0; n.length > t; t += 1) { + var i = n[t].indexOf("fileKey="); + if (-1 === i) + return void Bh.error("url is not has fileKey"); + var o = n[t].slice(i + 8); + if (A[n[t]]) + e._parseComponent(A[n[t]], o), + Bh.debug("load com from local"), + e._onTaskFinished(); + else { + var r = e.taskComponentManager; + if (-1 === n[t].indexOf("fileKey=")) + return void Bh.error("url is not has fileKey"); + r.addTask(o), + r.processTasks(e.loadComponent.bind(e)), + Bh.debug("load com from net") + } + } + } + ), (function() { + for (var t = e.taskComponentManager, i = 0; A.length > i; i += 1) + t.addTask(A[i]); + t.processTasks(e.loadComponent.bind(e)) + } + )) + }, l = 0, c = i.length; c > l; l += 1) + s(0, l) + } else { + for (var h = this.taskComponentManager, d = 0; A.length > d; d += 1) + h.addTask(A[d]); + h.processTasks(e.loadComponent.bind(e)) + } + } + , + UC.prototype.loadGeometrie = function(A, e) { + var t = this + , i = this.loader + , o = this.url + , n = this.model + , r = vc.GeoWorkerUrl; + vc.UseGeoWorker ? (i.setResponseType("arraybuffer"), + i.load(o.mpkUrl(A), (function(A) { + var i = new Worker(r); + i.onmessage = function(A) { + var i = A.data; + for (var o in i) + i.hasOwnProperty(o); + e(), + t._onTaskFinished() + } + , + i.postMessage({ + msg: A + }) + } + ))) : (i.setResponseType("arraybuffer"), + i.setCacheViable(!this.offLine), + i.load(o.mpkUrl(A), (function(i) { + t._parseGeometrie(i, A, A), + Bh.debug("geo load from online"), + e(), + t._onTaskFinished() + } + ), void 0, (function(A) { + n.dispatchEventEx({ + type: Tc.LOAD_GEOMETRY_ERROR, + modelKey: n.modelKey + }) + } + ))) + } + , + UC.prototype.loadMaterial = function(A, e) { + var t = this + , i = this.loader + , o = this.url + , n = this.model + , r = vc.GeoWorkerUrl; + vc.UseGeoWorker ? (i.setResponseType("arraybuffer"), + i.load(o.mpkUrl(A), (function(A) { + var i = new Worker(r); + i.onmessage = function(A) { + var i = A.data; + for (var o in i) + i.hasOwnProperty(o); + e(), + t._onTaskFinished() + } + , + i.postMessage({ + msg: A + }) + } + ))) : (i.setResponseType(t.modelDataVersion[t.fileKeyFromModelKey[A] || ""] > 1 ? "json" : "arraybuffer"), + i.setCacheViable(!this.offLine), + i.load(o.mpkUrl(A), (function(i) { + t._parseMaterial(i, A), + Bh.debug("met load from online"), + e(), + t._onTaskFinished() + } + ), void 0, (function(A) { + n.dispatchEventEx({ + type: Tc.LOAD_MATERIAL_ERROR, + modelKey: n.modelKey + }) + } + ))) + } + , + UC.prototype.loadTextures = function(A, e) { + var t = this.model.materialManager.textures + , i = this + , o = this.Textureloader + , n = this.url + , r = this.model + , a = vc.GeoWorkerUrl; + vc.UseGeoWorker ? o.load(n.mpkUrl(A), (function(A) { + var t = new Worker(a); + t.onmessage = function(A) { + var t = A.data; + for (var o in t) + t.hasOwnProperty(o); + e(), + i._onTaskFinished() + } + , + t.postMessage({ + msg: A + }) + } + )) : (o.setResponseType("blob"), + o.setMimeType("text/plain"), + o.setCacheViable(!this.offLine), + o.load(n.textureUrl(A), (function(o) { + Bh.debug("tex load from online"); + var n = new d; + t[A] = n, + n.wrapS = n.wrapT = 1e3; + var a = document.createElement("img"); + a.onload = function(A) { + "string" != typeof o && window.URL.revokeObjectURL(a.src), + e(), + i.model.textureNeedsUpdate = !0, + i._onLoadTexture() + } + , + a.onerror = function(A) { + r.dispatchEventEx({ + type: Tc.LOAD_TEXTURE_ERROR, + modelKey: r.modelKey + }) + } + , + a.src = "string" == typeof o ? o : window.URL.createObjectURL(o), + n.image = a, + n.needsUpdate = !0 + } + ), void 0, (function(A) { + r.dispatchEventEx({ + type: Tc.LOAD_TEXTURE_ERROR, + modelKey: r.modelKey + }) + } + ))) + } + , + UC.prototype.loadComponent = function(A, e) { + var t = this + , i = this.jsonLoader + , o = this.model + , n = this.url + , r = vc.GeoWorkerUrl; + vc.UseGeoWorker ? (i.setResponseType("json"), + i.load(n.mpkUrl(A), (function(A) { + var i = new Worker(r); + i.onmessage = function(A) { + var i = A.data; + for (var o in i) + i.hasOwnProperty(o); + e(), + t._onTaskFinished() + } + , + i.postMessage({ + msg: A + }) + } + ), (function(A) {} + ))) : (i.setResponseType("json"), + i.setCacheViable(!this.offLine), + i.load(n.mpkUrl(A), (function(i) { + t._parseComponent(i, A), + Bh.debug("component load from online"), + e(), + t._onTaskFinished() + } + ), void 0, (function(A) { + o.dispatchEventEx({ + type: Tc.LOAD_COMPONENT_ERROR, + modelKey: o.modelKey + }) + } + ))) + } + , + UC.prototype.loadKDTree = function(A, e) { + var t = this + , i = this.loader + , o = this.model + , n = this.url + , r = vc.GeoWorkerUrl; + vc.UseGeoWorker ? (i.setResponseType("json"), + i.load(n.mpkUrl(A), (function(A) { + var i = new Worker(r); + i.onmessage = function(A) { + var i = A.data; + for (var o in i) + i.hasOwnProperty(o); + e(), + t._onTaskFinished() + } + , + i.postMessage({ + msg: A + }) + } + ), (function(A) {} + ))) : (i.setResponseType("json"), + i.setCacheViable(!this.offLine), + i.load(n.kdTreeUrl(A), (function(i) { + t._parseKDTree(i, A), + Bh.debug("kdtree load from online"), + e(), + t._onTaskFinished() + } + ), void 0, (function(A) { + o.dispatchEventEx({ + type: Tc.LOAD_COMPONENT_ERROR, + modelKey: o.modelKey + }) + } + ))) + } + , + UC.prototype.loadBones = function(A, e) { + var t = this + , i = this.loader + , o = this.model + , n = this.url + , r = vc.GeoWorkerUrl; + vc.UseGeoWorker ? (i.setResponseType("arraybuffer"), + i.load(n.bonesUrl(A), (function(A) { + var i = new Worker(r); + i.onmessage = function(A) { + var i = A.data; + for (var o in i) + i.hasOwnProperty(o); + e(), + t._onTaskFinished() + } + , + i.postMessage({ + msg: A + }) + } + ), (function(A) {} + ))) : (i.setResponseType("arraybuffer"), + i.setCacheViable(!this.offLine), + i.load(n.bonesUrl(A), (function(i) { + t._parseBones(i, A), + Bh.debug("bones load from online"), + e(), + t._onTaskFinished() + } + ), void 0, (function(A) { + o.dispatchEventEx({ + type: Tc.LOAD_COMPONENT_ERROR, + modelKey: o.modelKey + }) + } + ))) + } + , + UC.prototype.loadClips = function(A, e) { + var t = this + , i = this.loader + , o = this.model + , n = this.url + , r = vc.GeoWorkerUrl; + vc.UseGeoWorker ? (i.setResponseType("json"), + i.load(n.mpkUrl(A), (function(A) { + var i = new Worker(r); + i.onmessage = function(A) { + var i = A.data; + for (var o in i) + i.hasOwnProperty(o); + e(), + t._onTaskFinished() + } + , + i.postMessage({ + msg: A + }) + } + ), (function(A) {} + ))) : (i.setResponseType("json"), + i.setCacheViable(!this.offLine), + i.load(n.clipsUrl(A), (function(i) { + t._parseClips(i, A), + Bh.debug("Clips load from online"), + e(), + t._onTaskFinished() + } + ), void 0, (function(A) { + o.dispatchEventEx({ + type: Tc.LOAD_COMPONENT_ERROR, + modelKey: o.modelKey + }) + } + ))) + } + , + UC.prototype.loadNodes = function(A, e) { + var t = this + , i = this.loader + , o = this.model + , n = this.url + , r = vc.GeoWorkerUrl; + vc.UseGeoWorker ? (i.setResponseType("json"), + i.load(n.mpkUrl(A), (function(A) { + var i = new Worker(r); + i.onmessage = function(A) { + var i = A.data; + for (var o in i) + i.hasOwnProperty(o); + e(), + t._onTaskFinished() + } + , + i.postMessage({ + msg: A + }) + } + ), (function(A) {} + ))) : (i.setResponseType("json"), + i.setCacheViable(!this.offLine), + i.load(n.nodesUrl(A), (function(i) { + t._parseNodes(i, A), + Bh.debug("Nodes load from online"), + e(), + t._onTaskFinished() + } + ), void 0, (function(A) { + o.dispatchEventEx({ + type: Tc.LOAD_COMPONENT_ERROR, + modelKey: o.modelKey + }) + } + ))) + } + ; + var FC = function(A, e) { + tf.call(this, A), + this.defaultManager = new Of(e,A), + this.instancedManager = new Hf(A), + this.loader = new UC(this) + }; + FC.prototype = Object.create(Yf.prototype); + var KC = function(A) { + bC.call(this, A), + this.modelDataVersion = {} + }; + (KC.prototype = Object.assign(KC.prototype, bC.prototype)).load = function(A) { + var e = this + , t = this.model; + this.config = {}; + var i = t.dataUrl + , o = function(o) { + var n = {}; + if ("string" == typeof o) + try { + n = JSON.parse(o) + } catch (A) { + return t.setEmptyScene(!0), + void t.dispatchEventEx({ + type: Rc.ON_LOAD_INVALID_SCENE, + modelKey: t.modelKey + }) + } + else + n = o; + if (n && "SUCCESS" === n.code) { + if (vc.offLine) + e.model.getStorage().put(i.projectUrl(), n, e.model.modelKey, (function() {} + ), (function() {} + )); + if (-1 === Number(n.data.status)) + return void t.dispatchEventEx({ + type: Tc.PARSEFAILE, + modelKey: t.modelKey + }); + if (3 > Number(n.data.status)) + return void t.dispatchEventEx({ + type: Tc.PARSING, + modelKey: t.modelKey + }); + e.dataVersion = n.data.profiles.geo || "1.0.0", + i.apiVersion = n.data.profiles.api, + e.model.dataVersion = e.dataVersion, + e._parse(n.data), + t.dispatchEventEx({ + type: Rc.ON_LOAD_CONFIG_FINISH, + modelKey: t.modelKey + }), + A && A() + } else + Bh.log(t.modelKey, "config load error! ", n.message), + t.dispatchEventEx({ + type: Rc.ON_LOAD_ERROR, + modelKey: t.modelKey, + code: n.code, + message: n.message + }) + }; + if (vc.offLine) { + var n = this.model.getStorage(); + n && n.getBatch([i.projectUrl()], (function(A) { + A[i.projectUrl()] ? o(A[i.projectUrl()]) : _d({ + type: "GET", + url: i.projectUrl(), + headers: { + Authorization: t.accessToken + }, + success: o, + error: function(A) { + t.dispatchEventEx({ + type: Rc.ON_NETWORK_ERROR, + modelKey: t.modelKey, + data: A + }) + } + }) + } + ), (function() {} + )) + } else { + for (var r = [], a = function() { + var A = t.modelKeys[s]; + r.push(new Promise((function(e, o) { + _d({ + type: "GET", + url: i.projectUrl(A), + headers: { + Authorization: t.accessToken + }, + success: function(t) { + e({ + modelKey: A, + data: t + }) + }, + error: function(e, i) { + switch (e) { + case 401: + t.dispatchEventEx({ + type: Rc.ACCOUNT_NO_EXIST, + modelKey: A, + data: i + }); + break; + case 403: + t.dispatchEventEx({ + type: Rc.NO_PERMISSION, + modelKey: A, + data: i + }); + break; + default: + t.dispatchEventEx({ + type: Rc.ON_NETWORK_ERROR, + modelKey: A, + data: e + }) + } + o(e, i) + } + }) + } + ))) + }, s = 0; t.modelKeys.length > s; s += 1) + a(); + Promise.all(r).then((function(o) { + for (var n = [], r = 0, a = 0; o.length > a; a += 1) + if (o[a]) { + var s = o[a].data + , l = o[a].modelKey + , c = {}; + if ("string" == typeof s) + try { + c = JSON.parse(s) + } catch (A) { + return void t.dispatchEventEx({ + type: Rc.ON_LOAD_INVALID_SCENE, + modelKey: l + }) + } + else + c = s; + if (c && "SUCCESS" === c.code) { + if (vc.offLine) + e.model.getStorage().put(i.projectUrl(), c, e.model.modelKey, (function() {} + ), (function() {} + )); + var h = c.data.scene || null + , d = c.data.profiles.geo || "1.0.0"; + if (i.apiVersion = c.data.profiles.api, + n.push({ + scene: h, + modelKey: c.data.key, + dataVersion: d + }), + e.modelDataVersion[c.data.key] = d, + r += c.data.componentCount, + -1 === Number(c.data.status)) + return void t.dispatchEventEx({ + type: Tc.PARSEFAILE, + modelKey: l + }); + if (3 > Number(c.data.status)) + return void t.dispatchEventEx({ + type: Tc.PARSING, + modelKey: l + }); + e.dataVersion = c.data.profiles.geo || "1.0.0", + e.sceneReader = e.sceneReader || [], + t.setConfig(c.data), + e._parse(c.data) + } else + Bh.log(t.modelKey, "config load error! ", c.message), + t.dispatchEventEx({ + type: Rc.ON_LOAD_ERROR, + modelKey: l, + code: c.code, + message: c.message + }) + } + var p = new FC(t,!1); + t._handler = p, + e.model.componentCount = r, + t.dispatchEventEx({ + type: Rc.ON_LOAD_CONFIG_FINISH, + modelKey: t.modelKey + }), + e.scenes = n, + A && A() + } + )).catch((function(A) { + console.log(A) + } + )) + } + } + , + KC.prototype._parse = function(A) { + this.config = A, + A.lengthUnit && (this.model.originalLengthUnit = A.lengthUnit), + vc.MergeComponent = !0, + this._toStatistics(A), + this._setTransformInfos(A), + this._chooseRendering(A) + } + ; + var QC = {}; + QC.brdf_vs = ["varying vec2 vUV;", "void main() {", " vUV = uv;", " gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);", "}"].join("\n"), + QC.brdf_fs = ["varying vec2 vUV;", "uniform sampler2D HammersleyTable;", "const float PI = 3.14159265358979;", "float GGX(float NdotV, float alpha)", "{", " float alpha2 = pow(alpha, 2.0);", " return 2.0 * NdotV / (NdotV + sqrt(alpha2 + (1.0 - alpha2) * NdotV * NdotV));", "}", "float G_Smith(float NdotV, float NdotL, float roughness)", "{", " float alpha = pow(roughness, 2.0);", " return GGX(NdotV, alpha) * GGX(NdotL, alpha);", "}", "vec3 ImportanceSampleGGX(vec2 Xi, vec3 N, float roughness)", "{", " float a = roughness * roughness;", " float Phi = 2.0 * PI * Xi.x; ", " float CosTheta = sqrt((1.0 - Xi.y) / (1.0 + (a * a - 1.0) * Xi.y)); ", " float SinTheta = sqrt(1.0 - CosTheta * CosTheta);", " vec3 H;", " H.x = SinTheta * cos(Phi); ", " H.y = SinTheta * sin(Phi); ", " H.z = CosTheta;", " vec3 UpVector = abs(N.z) < 0.999 ? vec3(0.0, 0.0, 1.0) : vec3(1.0, 0.0, 0.0); ", " vec3 TangentX = normalize(cross(UpVector, N)); ", " vec3 TangentY = cross(N, TangentX);", " return normalize(TangentX * H.x + TangentY * H.y + N * H.z);", "}", "vec2 IntegrateBRDF(float NdotV, float roughness)", "{", " vec3 N = vec3(0.0, 0.0, 1.0);", " vec3 V = vec3(sqrt(1.0 - NdotV * NdotV), 0.0, NdotV);", " vec2 result = vec2(0.0, 0.0);", " const int NumSamples = 1024;", " for (int i = 0; i < NumSamples; i++)", " {", " float u = float(i) / float(NumSamples);", " vec2 Xi = vec2(u, texture2D(HammersleyTable, vec2(u)).r);", " vec3 H = ImportanceSampleGGX(Xi, N, roughness);", " vec3 L = 2.0 * dot(V, H) * H - V;", " float NdotL = saturate(L.z);", " float NdotH = saturate(H.z);", " float VdotH = saturate(dot(V, H));", " float NdotV = saturate(dot(N, V));", " if (NdotL > 0.0)", " {", " float G = G_Smith(NdotV, NdotL, roughness);", " float G_Vis = G * VdotH / (NdotH * NdotV); ", " float F = pow(1.0 - VdotH, 5.0);", " result.x += (1.0 - F) * G_Vis;", " result.y += F * G_Vis;", " }", " }", " return result / float(NumSamples);", "}", "void main()", "{", " vec2 brdf = IntegrateBRDF(vUV.x, vUV.y);", " gl_FragColor = vec4(brdf, 0.0, 1.0);", "}"].join("\n"), + QC.BRDFMap = function(A, e) { + this.texture = null, + this.resolution = e || 512, + this.brdfMaterial = new Pe({ + vertexShader: QC.brdf_vs, + fragmentShader: QC.brdf_fs, + uniforms: { + HammersleyTable: { + value: A + } + }, + lights: !1 + }), + this.quad = new Ue(new et(window.innerWidth,window.innerHeight),this.brdfMaterial), + this.quad.position.z = -100 + } + , + QC.BRDFMap.prototype.constructor = QC.BRDFMap, + QC.BRDFMap.prototype.generateMap = function(A) { + var e = new Y; + e.add(this.quad); + var t = new Ka(window.innerWidth / -2,window.innerWidth / 2,window.innerHeight / 2,window.innerHeight / -2,-1e4,1e4); + t.position.z = 100; + var i = new g(this.resolution,this.resolution,{ + minFilter: 1006, + magFilter: 1003, + format: 1022 + }); + A.setRenderTarget(i), + A.clear(), + A.render(e, t), + this.texture = i.texture + } + ; + var RC = function() { + this.instanceMaterials = {}, + this.materials = {}, + this.textures = {}, + this.lightmaps = {}, + this.ensureImagePowerOfTwo = !1 + }; + RC.prototype.changeAllMaterials = function(A, e) {} + , + RC.prototype.destroy = function() { + this.instanceMaterials = {}, + this.materials = {}, + this.textures = {}, + this.lightmaps = {} + } + , + RC.prototype.disposeInstanceMaterials = function(A) { + var e = this.instanceMaterials; + for (var t in e) { + var i = e[t]; + if (Array.isArray(i)) + for (var o = 0, n = i.length; n > o; o += 1) + i[o].dispose(); + else + i.dispose() + } + } + , + RC.prototype.disposeMaterials = function(A) { + for (var e in this.materials) + this.materials[e].dispose(); + this.disposeInstanceMaterials(A) + } + , + RC.prototype.updateMaterialsValue = function(A, e, t) { + var i = this.materials + , o = this.instanceMaterials + , n = null; + for (var r in i) + for (var r in (n = i[r]) && n[e] && (n[e] = t, + "function" == typeof n.refreshUniforms && n.refreshUniforms(), + n.needsUpdate = !0), + o) + if (n = o[r]) + if (Array.isArray(n)) + for (var a = 0, s = n.length; s > a; a += 1) + n[a][e] && (n[a][e] = t, + "function" == typeof n[a].refreshUniforms && n[a].refreshUniforms(), + n[a].needsUpdate = !0); + else + n[e] && (n[e] = t, + "function" == typeof n.refreshUniforms && n.refreshUniforms(), + n.needsUpdate = !0) + } + , + RC.prototype.enableColorWithoutLight = function(A) { + var e = this.materials + , t = this.instanceMaterials + , i = null; + if (A) { + for (var o in e) + (i = e[o]) && (i.defines.USE_COLORWITHOUTLIGHT = "", + i.needsUpdate = !0); + for (var o in t) + if (i = t[o]) + if (i instanceof Array) + for (var n = 0, r = i.length; r > n; n += 1) + i[n].defines.USE_COLORWITHOUTLIGHT = "", + i[n].needsUpdate = !0; + else + i.defines.USE_COLORWITHOUTLIGHT = "", + i.needsUpdate = !0 + } else { + for (var o in e) + (i = e[o]) && (delete i.defines.USE_COLORWITHOUTLIGHT, + i.needsUpdate = !0); + for (var o in t) + if (i = t[o]) + if (i instanceof Array) + for (n = 0, + r = i.length; r > n; n += 1) + delete i[n].defines.USE_COLORWITHOUTLIGHT, + i[n].needsUpdate = !0; + else + delete i.defines.USE_COLORWITHOUTLIGHT, + i.needsUpdate = !0 + } + } + , + RC.prototype._updateTextureMapping = function(A) { + var e = vc.EnableTextureMapping + , t = this.ensureImagePowerOfTwo; + function i(A, e) { + if (e) { + if (void 0 === e.length) + A.map = e; + else + for (var i = 0; e.length > i; i += 1) + t || (e[i].image = Kd.ensurePowerOfTwo(e[i].image)), + "map" === e[i].texturetype ? A.map = e[i] : "bumpMap" === e[i].texturetype ? e[i].depth && (A.bumpScale = e[i].depth) : "specularMap" === e[i].texturetype ? A.specularMap = e[i] : "alphaMap" === e[i].texturetype ? (A.alphaMap = e[i], + A.alphaTest = .01, + A.map = e[i], + A.transparent = !0) : "emissiveMap" === e[i].texturetype ? A.emissiveMap = e[i] : "environmentMap" === e[i].texturetype ? A.envMap = e[i] : "normalMap" === e[i].texturetype ? (A.normalMap = e[i], + e[i].depth && A.normalScale.set(e[i].depth, e[i].depth)) : Bh.warn("This map type is not supported yet:", e[i].texturetype); + vc.IBL && A.refreshUniforms(), + A.needsUpdate = !0 + } else + A.textureColor && A.color.setStyle(A.textureColor), + A.needsUpdate = !0 + } + if (this.lastTextureEnabled !== e) { + var o = this.textures + , n = this.materials; + if (A) + var r = A.manager.getMaterialOverrideSet() + , a = r ? r.materialsByName : null + , s = r ? r.textures : null; + var l = this.instanceMaterials + , c = null + , h = null; + if (e) { + for (c in n) { + if (h = n[c]) + i(h, d = o[c]) + } + for (c in l) + if (h = l[c]) { + var d = o[c]; + if (s && s[c] && (d = s[c]), + Array.isArray(h)) + for (var p = 0, g = h.length; g > p; p += 1) + i(h[p], d); + else + i(h, d) + } + for (c in a) { + if (h = a[c]) + i(h, d = s[c.split("#")[0]]) + } + this.ensureImagePowerOfTwo = !0 + } else { + if (!r) + for (c in n) + (h = n[c]) && (h.map = null, + h.needsUpdate = !0); + for (c in l) + if (h = l[c]) + if (Array.isArray(h)) + for (p = 0, + g = h.length; g > p; p += 1) + h[p].pureColor && (h[p].color.setStyle(h[p].pureColor), + h[p].map = null, + h[p].needsUpdate = !0), + r || (h[p].map = null, + h[p].needsUpdate = !0); + else + h.pureColor && (h.color.setStyle(h.pureColor), + h.map = null, + h.needsUpdate = !0), + r || (h.map = null, + h.needsUpdate = !0); + for (c in a) + (h = a[c]) && (h.map = null, + h.needsUpdate = !0, + h.pureColor && h.color.setStyle(h.pureColor)) + } + this.lastTextureEnabled = e + } + } + , + RC.prototype.updateMaterials = function(A) { + var e = this.materials; + for (var t in e) + if (e.hasOwnProperty(t)) { + var i = e[t]; + i.IBLMaps = A.manager.scene.IBLMaps, + i.refreshUniforms() + } + } + , + RC.prototype._updateIBL = function(A) { + var e = A.manager.scene; + if (vc.IBL && null !== e.iblProbe && e.iblProbe.isComputed) { + this.materialManager.updateMaterials(A); + var t = e.IBLcfg + , i = t[Object.keys(t)[e.IBLIndex]]; + for (var o in i) + this.materialManager.updateMaterialsValue(A, o, i[o]) + } + } + , + RC.prototype.changeAllMaterials = function(A, e) { + var t = this.materials; + for (var i in t) + if (t.hasOwnProperty(i)) { + var o = Kd.getMaterialParameters(t[i]) + , n = null; + e ? (delete o.textureColor, + delete o.pureColor, + delete o.imageFade, + o.lights = !0, + (n = new QC.IBLMaterial(o)).type = "IBL", + n.refreshUniforms()) : (delete o.iblProbe, + (n = Kd.createStandardMaterial(o)).roughness = o.originRoughness, + n.metalness = o.originMetalness, + n.refreshUniforms()), + n.name = i, + t[i] = n, + o = null + } + } + , + RC.prototype.switchNewStyleMaterial = function(A, e) { + var t = this.materials; + for (var i in t) + if (t.hasOwnProperty(i)) { + var o = Kd.getMaterialParameters(t[i]) + , n = null; + (n = e ? Kd.createNewStyleMaterial(o) : Kd.createStandardMaterial(o)).name = i, + t[i] = n, + o = null + } + } + , + RC.prototype.getInstanceMaterialById = function(A, e) { + if (this.instanceMaterials[A]) + return this.instanceMaterials[A]; + var t = Kd.getMaterialParameters(e.manager.getOverrideMaterialByName(A) || this.materials[A]) + , i = t.transparent + , o = Kd.createInstanceMaterial(t, !0); + o.transparent = !1; + var n = Kd.createInstanceMaterial(t, !0); + return n.transparent = !0, + vc.TranslucentDepthDisabled && (n.depthWrite = !1), + i === o.transparent ? (this.instanceMaterials[A] = [o, n], + n.defines.INSTANCE_STATE_SECONDARY = "") : (this.instanceMaterials[A] = [n, o], + o.defines.INSTANCE_STATE_SECONDARY = ""), + this.instanceMaterials[A] + } + , + RC.prototype.getMaterialById = function(A) { + return this.materials[A] + } + ; + var TC = function(A, e, t, i) { + var o = this; + this.manager = A, + this.modelKey = e.modelKey, + this.projectKey = e.dbName, + this.offLine = e.offLine, + this.accessToken = e.token || "", + this.shareKey = e.share || "", + this.dataVersion = null, + this.debut = i, + this.dataUrl = new eC(e), + this.submodel = {}, + this.loadingManager = new jr, + this.loadingManager.model = this, + this.fileLoader = new bu(this.loadingManager), + this.configLoader = new bC(this), + this.firstOctreeTransform = !0, + this.numOfElements = 0, + this.numOfTriangles = 0, + this.singleStepMode = !1, + this.sizeOfNextStep = 0, + this.needUpdate = !1, + this.boundingBoxWorld = null, + this.rotation = new f, + this.position = new y, + this.scale = new y(1,1,1), + this.transformMatrix = new M, + this.selectedMaterial = this.manager.sceneState.selectionMaterial, + this.materialManager = new RC, + this.wireframeManager = new au, + this.axisNetManager = void 0, + this.floorManager = void 0, + this.containsCamera = !1, + this.loaded = !1, + this.visible = !0, + this.emptyScene = !1, + this.cameraList = [], + this.index = 0, + this.modelConfig = null, + this.kdTreeNode = null, + this.parseCfgFinish = void 0, + this.progressPercentage = { + load: .4, + collect: .5, + merge: .1 + }, + this.progressFrequency = 10, + this._encodedDatabagId = this.modelKey, + this.groupName = gp.MODEL + "|" + this.modelKey, + this.group = this.manager.scene.getOrCreateGroup(this.groupName, { + pickableType: Qc.Geometry, + globalSpace: !0 + }), + this._handler = null, + this.lightmap = !1, + this.lightmapNum = 0, + this.enableLightmap = !1, + this.lightmapIntensity = vc.LightmapIntensity, + this.minDistanceObjects = {}, + this.prioritizedNodeCount = 0, + this.plugins = [], + this.merged = !1, + e.modelKeys && (this.modelGroup = !0, + this.groupKey = e.modelKey, + this.modelKeys = e.modelKeys, + this.progressFrequency = 100, + this.merged = !0, + this.configLoader = new KC(this)), + this.subModel = {}, + mh.isSupportIndexedDB() ? (this.storage = new AC({ + store: this.modelKey, + version: 1, + dbName: this.modelKey + }), + this.storage.addEventListener(Rc.ON_DATABASE_OPEN, (function(A) { + t && t(o, !0) + } + )), + this.storage.addEventListener(Rc.ON_DATABASE_EEEOR, (function(A) { + o.storage = void 0, + t && t(o, !1) + } + ))) : (o.storage = void 0, + t && t(this, !1)) + }; + Object.assign(TC.prototype, Ld.prototype), + TC.prototype.getStorage = function() { + return this.storage + } + , + TC.prototype.destroy = function() { + this.selectedMaterial = null, + this.cameraList = null, + this.occlusionCamera && (this.occlusionCamera = null), + this._removeMeshNodeGroup(), + this.removeAllFromOctantMap(), + this._handler && (this._handler.destroy(), + this._handler = null), + this.wireframeManager.destroy(), + this.wireframeManager = null, + this.materialManager.disposeMaterials(this), + this.materialManager.destroy(), + this.materialManager = null, + this.manager = null, + this.plugins = null, + this.dataUrl = null, + this.fileLoader = null, + this.configLoader.destroy(), + this.configLoader = null + } + , + TC.prototype._getWireframeGroupName = function() { + return gp.WIREFRAME + "|" + this.modelKey + } + , + TC.prototype.load = function(A) { + var e = this; + this.configLoader.load((function() { + e.parseCfgFinish && e.parseCfgFinish(), + e.manager.updateScene(), + e._getHandler().load(A) + } + )) + } + , + TC.prototype.setCrossOrigin = function(A) { + this.fileLoader.setCrossOrigin(A) + } + , + TC.prototype.prepare = function(A, e) { + var t = this._getHandler(); + t && t.prepare(A, e) + } + , + TC.prototype.dispatchEventEx = function(A) { + A.modelKey = this.modelKey, + this.manager.dispatchEvent(A) + } + , + TC.prototype.setLoaded = function(A) { + this.loaded = A + } + , + TC.prototype.isLoaded = function() { + return this.loaded + } + , + TC.prototype.getTransformMatrix = function() { + return this.transformMatrix + } + , + TC.prototype.isEmptyScene = function() { + return this.emptyScene + } + , + TC.prototype.setEmptyScene = function(A) { + this.emptyScene = A + } + , + TC.prototype.isLayerData = function() { + return !(!this._handler || "layer" !== this._handler.tag) + } + , + TC.prototype.setConfig = function(A) { + this.configLoader.config = A + } + , + TC.prototype.getConfig = function() { + return this.configLoader.config + } + , + TC.prototype.isVisible = function() { + return this.manager.filter._isModelVisible(this.modelKey) + } + , + TC.prototype.setVisible = function(A) { + A ? this.manager.filter.showModelByIds([this.modelKey]) : this.manager.filter.hideModelByIds([this.modelKey]) + } + , + TC.prototype.calculateCameraModelRelation = function(A) { + this.containsCamera = this.getModelDescriptor().isOctreeOuter(A) + } + , + TC.prototype.addCamera = function(A) { + this.cameraList.push(A) + } + , + TC.prototype.getCameraNameList = function() { + for (var A = [], e = this.cameraList.length - 1; e >= 0; e -= 1) + A.push(this.cameraList[e].name); + return A + } + , + TC.prototype.getCamera = function(A) { + for (var e = this.cameraList.length - 1; e >= 0; e -= 1) + if (this.cameraList[e].name === A) + return this.cameraList[e]; + return null + } + , + TC.prototype.updateOctreeNode = function(A) { + if (A || this.firstOctreeTransform) { + this.firstOctreeTransform && (this.firstOctreeTransform = !1); + var e = this.manager.scene.getMatrixGlobal(); + this.getModelDescriptor().updateOctreeNode(e) + } + } + , + TC.prototype.isDataReady = function() { + var A = this._handler; + return !!A && A.isDataReady() + } + , + TC.prototype.updateMeshNodes = function(A) { + var e = this._getHandler(); + if (e) { + if ("layer" === e.tag && !e.layerDataLoaded) + return; + e.updateNodes() + } + } + , + TC.prototype._getHandler = function(A) { + return this._handler + } + , + TC.prototype.getMeshesByUserIds = function(A) { + if (A) { + var e = this._getHandler(); + return e ? e.getMeshesByUserIds(A) : void 0 + } + } + , + TC.prototype.applyFilter = function() { + if (!1 !== this.manager.filter._isModelVisible(this.modelKey)) { + for (var A = 0, e = this.plugins.length; e > A; A += 1) + this.plugins[A].applyFilter(); + this.group.visible = !0; + var t = this._getHandler(); + t && t.applyFilter() + } else + this.group.visible = !1 + } + , + TC.prototype.applySelection = function() { + for (var A = 0, e = this.plugins.length; e > A; A += 1) + this.plugins[A].applySelection(); + var t = this._getHandler(); + t && t.applySelection() + } + , + TC.prototype.clearSelection = function() { + for (var A = 0, e = this.plugins.length; e > A; A += 1) + this.plugins[A].clearSelection(); + var t = this._getHandler(); + t && t.clearSelection() + } + , + TC.prototype.applyHover = function() { + for (var A = 0, e = this.plugins.length; e > A; A += 1) + this.plugins[A].applyHover(); + var t = this._getHandler(); + t && t.applyHover() + } + , + TC.prototype.clearHover = function() { + for (var A = 0, e = this.plugins.length; e > A; A += 1) + this.plugins[A].clearHover(); + var t = this._getHandler(); + t && t.clearHover() + } + , + TC.prototype.applyBlink = function() { + var A = this._getHandler(); + A && A.applyBlink() + } + , + TC.prototype.clearBlink = function() { + var A = this._getHandler(); + A && A.clearBlink() + } + , + TC.prototype.applyReplacement = function() { + var A = this._getHandler(); + A && A.applyReplacement() + } + , + TC.prototype._removeMeshNodeGroup = function() { + this._removeNodeGroup(gp.GEOMETRY), + this._removeNodeGroup(gp.INSTANCEGEOMETRY), + this._removeNodeGroup(gp.WIREFRAME), + this._removeNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY), + this._removeNodeGroup(gp.AXISNET), + this._removeSceneGroup(), + this.group = null + } + , + TC.prototype._getNodeGroup = function(A, e) { + for (var t = this.group.children, i = 0, o = t.length; o > i; i += 1) + if (t[i].name === A) + return t[i]; + var n = new ep(A,e); + return this.group.add(n), + n.globalSpace && (n.matrixAutoUpdate = !1, + n.updateMatrixWorld(!0)), + n + } + , + TC.prototype._removeNodeGroup = function(A) { + this.group.removeByName(A) + } + , + TC.prototype._hasNodeGroup = function(A) { + return this.group.hasChild(A) + } + , + TC.prototype._removeSceneGroup = function() { + this.manager.scene.removeGroupByName(this.groupName), + this.manager.scene.removeGroupByName(this._getWireframeGroupName()) + } + , + TC.prototype.removeAllFromOctantMap = function() { + this.manager.removeAllFromOctantMap(this.modelKey) + } + , + TC.prototype.clearMeshFromOctantMap = function() { + this.manager.removeMeshFromOctantMap(this.modelKey) + } + , + TC.prototype.getDatabagId = function() { + return this.modelKey + } + , + TC.prototype.getEncodedDatabagId = function() { + return this.modelKey + } + , + TC.prototype.getMaterialManager = function() { + return this.materialManager + } + , + TC.prototype.clearWireframeElementCount = function() { + this.wireframeElementCount = void 0 + } + , + TC.prototype.getWireframeElementCount = function() { + if (void 0 !== this.wireframeElementCount) + return this.wireframeElementCount; + var A = this.getModelDescriptor().getAllNodeInfos() + , e = this.manager.filter + , t = 0; + for (var i in A) { + var o = A[i]; + e._hasRenderWithBoardlineFilter() && !e._isRenderWithBoardline(o[0]) || (t += o.length) + } + return this.wireframeElementCount = t, + t + } + , + TC.prototype.isActivateWireframe = function() { + return this.manager.isDrawingBoardlineEnabled() + } + , + TC.prototype.isOnlyWireframe = function() { + return this.manager.isOnlyWireframe() + } + , + TC.prototype.getLoadedUserIdsObject = function() { + return this._handler && this._handler.getLoadedUserIdsObject ? this._handler.getLoadedUserIdsObject() : null + } + , + TC.prototype.clearNodeGroup = function() { + var A = this._getNodeGroup(gp.GEOMETRY, { + globalSpace: !0 + }); + A.clear(), + (A = this._getNodeGroup(gp.WIREFRAME, { + globalSpace: !0 + })).clear(), + (A = this._getNodeGroup(gp.INSTANCEGEOMETRY, { + globalSpace: !0 + })).clear(), + (A = this._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { + globalSpace: !0 + })).clear() + } + , + TC.prototype.getWireframeMaterial = function() { + return this.wireframeManager.wireframeMaterial + } + , + TC.prototype.getInstanceWireframeMaterial = function() { + return this.wireframeManager.instanceWireframeMaterial + } + , + TC.prototype.getMaterialByMaterialId = function(A) { + return this.materialManager.materials[A] + } + , + TC.prototype.adjustProgressPercentage = function(A, e, t) { + this.progressPercentage.load = A, + this.progressPercentage.collect = e, + this.progressPercentage.merge = t + } + , + TC.prototype.setReplacedUserIdMap = function(A) { + this.replacedUserIdMap = uh.isOwnEmptyObject(A) ? null : A + } + , + TC.prototype.hasReplacedUserId = function() { + return !uh.isEmptyObject(this.replacedUserIdMap) + } + , + TC.prototype.isReplacedUserId = function(A) { + return this.replacedUserIdMap && this.replacedUserIdMap[A] + } + , + TC.prototype.registerPlugin = function(A) { + this.plugins.push(A) + } + , + TC.prototype.disposeBufferAfterVbo = function() { + var A = this._getHandler(); + A && A.disposeBufferAfterVbo() + } + , + TC.prototype.isHiddenUserId = function(A) { + var e = this._getHandler(); + return !!e && e.isHiddenNode(A) + } + , + TC.prototype.hasHiddenUserId = function() { + return this.manager.hasHiddenUserId() + } + , + TC.prototype.isHiddenSourceObjectUserId = function(A) { + return this.manager.isHiddenSourceObjectUserId(A) + } + , + TC.prototype.hasHiddenSourceObjectUserId = function() { + return this.manager.hasHiddenSourceObjectUserId() + } + , + TC.prototype.getModelDescriptor = function() { + return this._handler.loader.getDescriptor() + } + , + TC.prototype.getLoader = function() { + return this._handler.loader + } + , + TC.prototype.getConfig = function() { + return this.configLoader.getConfig() + } + , + TC.prototype.getTransforms = function() { + return this.configLoader.getTransforms() + } + , + TC.prototype.getStatistics = function() { + return this.configLoader.getStatistics() + } + , + TC.prototype.setRenderableCount = function(A) { + this.configLoader.setRenderableCount(A), + this._handler && this._handler.clearPriorityNodesSet && this._handler.clearPriorityNodesSet(!0) + } + , + TC.prototype.getRenderableCount = function() { + return this.configLoader.getStatistics().renderableCount + } + , + TC.prototype.getBoundingBoxWorld = function() { + return this.configLoader.getTransforms().boundingBox + } + , + TC.prototype.calculateBoundingBox = function() { + var A = this.getModelDescriptor().getAllNodeInfos() + , e = new aA; + for (var t in A) + for (var i = A[t], o = 0, n = i.length; n > o; o += 1) { + var r = i[o]; + r.boundingBox && e.union(r.boundingBox) + } + var a = this.getModelMatrix(); + a && e.applyMatrix4(a), + this.configLoader.getTransforms().boundingBox.copy(e) + } + , + TC.prototype.calculateClippingIds = function() { + var A = this._getHandler(); + A && A.calculateClippingIds() + } + , + TC.prototype.explode = function(A) { + var e = this.getBoundingBoxWorld().getCenter() + , t = this._getHandler(); + t && t.explode(e, A) + } + , + TC.prototype.formatLayerIds = function(A) { + return this.getLayerProvider().formatLayerIds(A) + } + , + TC.prototype.getBoundingBoxOfGeometries = function(A) { + for (var e = !A, t = new aA, i = 0; A.length > i; i += 1) { + var o = this.group.getObjectByProperty("guid", A[i]); + if (o) { + var n = o.geometry; + if (n) { + if (e || n) { + n.boundingBox || n.computeBoundingBox(); + var r = n.boundingBox; + if (r) { + var a = r.clone(); + o.matrixWorld && a.applyMatrix4(o.matrixWorld), + t.expandByPoint(a.min), + t.expandByPoint(a.max) + } + } + } else + Bh.log("empty geometry!") + } + } + return t + } + , + TC.prototype.setModelMatrix = function(A) { + this.group.matrix.copy(A), + this.group.updateMatrixWorld(!0); + var e = this.configLoader.transformInfos; + e && e.boundingBox && (e.transformMatrix.copy(A), + e.originalBoundingBox ? this.calculateBoundingBox() : (e.originalBoundingBox = e.boundingBox.clone(), + e.boundingBox.applyMatrix4(A))), + this.manager.updateSceneBoundingBox() + } + , + TC.prototype.applyModelMatrix = function(A) { + var e = this.configLoader.transformInfos; + e && e.boundingBox && (e.transformMatrix.premultiply(A), + e.originalBoundingBox || (e.originalBoundingBox = e.boundingBox.clone()), + e.boundingBox.applyMatrix4(A)), + this.group.matrix.copy(e.transformMatrix), + this.group.updateMatrixWorld(!0), + this.manager.updateSceneBoundingBox() + } + , + TC.prototype.getModelMatrix = function() { + var A = null; + return this.group.matrix && (A = this.group.matrix.clone()), + A + } + , + TC.prototype.resetModelMatrix = function() { + var A = this.configLoader.transformInfos.originalMatrix; + A && this.setModelMatrix(A) + } + , + TC.prototype.overturnYAndZaxis = function() { + var A = (new M).makeRotationFromEuler(new F(Math.PI / 2,0,0)); + this.group.matrix && (A.multiply(this.group.matrix), + this.setModelMatrix(A)) + } + , + TC.prototype.hasComponent = function(A) { + return !!this.getModelDescriptor().getNodeInfosByUserId(A) + } + , + TC.prototype.getComponentInfo = function(A) { + return this.getModelDescriptor().getNodeInfosByComponentKey(A) + } + , + TC.prototype.getComponentlist = function() { + var A = [] + , e = this.getModelDescriptor(); + for (var t in e.mapNodeInfoByComponentKey) + e.mapNodeInfoByComponentKey.hasOwnProperty(t) && A.push(t); + return A + } + , + TC.prototype.addMeshToInfoMap = function(A, e, t, i, o) { + this.getModelDescriptor().addMeshToInfoMap(A, e, t, i, o) + } + , + TC.prototype.loadGeopkOnDemand = function(A, e, t) { + this._handler && "layer" === this._handler.tag && this._handler.loadGeopkOnDemand(A, e, t) + } + , + TC.prototype.unloadGeopkOnDemand = function(A, e) { + this._handler && "layer" === this._handler.tag && this._handler.unloadComponents(A, e) + } + , + TC.prototype.loadAllGeosOnDemand = function(A, e, t) { + this._handler && "layer" === this._handler.tag && this._handler.loadAllGeosOnDemand(A, e, t) + } + , + TC.prototype.getUnionBoundingBoxOnDemand = function() { + return this.getLayerProvider().getUnionBoundingBoxOnDemand() + } + , + TC.prototype.setConditionsChangedOnDemand = function(A) { + this.getLayerProvider().setConditionsChanged(A) + } + , + TC.prototype.explosion = function(A) { + var e = this._getHandler(); + Bh.time("模型离散用时"), + e && (this.explosioning = !0, + e.explosion(A)), + Bh.timeEnd("模型离散用时"), + this.calculateBoundingBox() + } + , + TC.prototype.closeExplosion = function() { + Bh.time("取消模型离散用时"); + var A = this._getHandler(); + A && (A.closeExplosion(), + this.explosioning = !1), + Bh.timeEnd("取消模型离散用时") + } + , + TC.prototype.componentsExplosion = function(A) { + var e = this._getHandler(); + if (1 === (A.coefficientX || 1) && 1 === (A.coefficientY || 1) && 1 === (A.coefficientZ || 1) && 0 === (A.offsetX || 0) && 0 === (A.offsetY || 0) && 0 === (A.offsetZ || 0)) + return this.explosioning = !1, + this.closeComponentsExplosion(A.componentKey), + void this.calculateBoundingBox(); + Bh.time("构件离散用时"), + e && (this.explosioning = !0, + e.componentsExplosion(A), + this.calculateBoundingBox()), + Bh.timeEnd("构件离散用时") + } + , + TC.prototype.closeComponentsExplosion = function(A) { + Bh.time("取消构件离散用时"); + var e = this._getHandler(); + e && (e.closeComponentsExplosion(A), + this.explosioning = !1), + Bh.timeEnd("取消构件离散用时") + } + , + TC.prototype.floorExplosion = function(A) { + if (this.floorManager) { + var e = this.floorManager.floorExplosionInfo; + this.explosioning = !0; + var t = this._getHandler(); + if (!t) + return !1; + if (!e.sortedFloors) { + for (var i = [], o = 0, n = e.floors.length; n > o; o += 1) { + var r = e.floors[o] + , a = this.manager.getBoundingBoxByIds(r.componentkeys); + if (!a.isEmpty()) { + r.box = a; + var s = new y; + r.box.getCenter(s), + r.center = s, + i.push(r) + } + } + i.sort((function(A, e) { + return A.center.z - e.center.z + } + )), + e.sortedFloors = i; + for (var l = 0, c = 1 / 0, h = 0, d = 0, p = i.length; p > d; d += 1) { + var g = Math.abs(i[d].center.z); + c > g && (l = d, + c = g); + var u = new y; + i[d].box.getSize(u), + h += u.z + } + e.baseFloorIndex = l, + e.averageHeight = h / i.length; + var f = i[l].center.toArray(); + e.center = f + } + for (var m = (A - 1) * e.averageHeight, C = 0, v = e.sortedFloors.length; v > C; C += 1) { + if (C !== e.baseFloorIndex) + t.componentsExplosion({ + offsetZ: (C - e.baseFloorIndex) * m, + componentKey: e.sortedFloors[C].componentkeys, + center: e.center + }) + } + return this.calculateBoundingBox(), + !0 + } + return !1 + } + , + TC.prototype.closeFloorExplosion = function() { + if (this.floorManager) { + var A = this.floorManager.floorExplosionInfo; + if (A && A.sortedFloors) { + var e = this._getHandler(); + if (e) { + for (var t = 0, i = A.sortedFloors.length; i > t; t += 1) { + e.closeComponentsExplosion(A.sortedFloors[t].componentkeys) + } + this.calculateBoundingBox(), + this.explosioning = !1 + } + } + } + } + , + TC.prototype.showModel = function(A) { + this.nodes.visible = A + } + , + TC.prototype.updateMaterials = function() { + var A = this.materials; + for (var e in A) + if (A.hasOwnProperty(e)) { + var t = A[e]; + t.IBLMaps = this.manager.scene.IBLMaps, + t.refreshUniforms() + } + } + , + TC.prototype.updateMaterialsValue = function(A, e) { + var t = this.materials; + for (var i in t) + if (t.hasOwnProperty(i)) { + var o = t[i]; + o.hasOwnProperty(A) && (o[A] = e, + o.refreshUniforms(), + o.needsUpdate = !0) + } + } + , + TC.prototype.changeAllMaterials = function(A) { + var e = this.materials; + for (var t in e) + if (e.hasOwnProperty(t)) { + var i = Kd.getMaterialParameters(e[t]) + , o = null; + A ? (delete i.textureColor, + delete i.pureColor, + delete i.imageFade, + i.lights = !0, + (o = new QC.IBLMaterial(i)).type = "IBL", + o.refreshUniforms()) : (delete i.iblProbe, + (o = Kd.createStandardMaterial(i)).roughness = i.originRoughness, + o.metalness = i.originMetalness, + o.refreshUniforms()), + o.name = t, + e[t] = o, + i = null + } + } + , + TC.prototype.getAllComponents = function() { + return this.getComponentlist() + } + , + TC.prototype.getComponentKeysByTypeFromList = function(A, e) { + for (var t = this.getModelDescriptor(), i = [], o = 0; A.length > o; o += 1) + t.mapNodeInfoByComponentKey.hasOwnProperty(A[o]) && t.mapNodeInfoByComponentKey[A[o]][0].type === e && i.push(A[o]); + return i + } + , + TC.prototype.getComponentKeysByType = function(A) { + var e = this.getModelDescriptor() + , t = []; + for (var i in e.mapNodeInfoByComponentKey) + e.mapNodeInfoByComponentKey.hasOwnProperty(i) && e.mapNodeInfoByComponentKey[i][0].type === A && t.push(i); + return t + } + , + TC.prototype.getAllComponentKeyType = function() { + var A = {} + , e = [] + , t = this.getModelDescriptor(); + for (var i in t.mapNodeInfoByComponentKey) + if (t.mapNodeInfoByComponentKey.hasOwnProperty(i)) { + var o = t.mapNodeInfoByComponentKey[i][0].type; + A[o] || (A[o] = !0, + e.push(o)) + } + return e + } + , + TC.prototype.getComponentKeysByName = function(A) { + var e = this.getModelDescriptor() + , t = []; + for (var i in e.mapNodeInfoByComponentKey) + e.mapNodeInfoByComponentKey.hasOwnProperty(i) && e.mapNodeInfoByComponentKey[i][0].name === A && t.push(i); + return t + } + , + TC.prototype.getComponentKeysByProperty = function(A, e) { + var t = this.getModelDescriptor() + , i = []; + for (var o in t.mapNodeInfoByComponentKey) + t.mapNodeInfoByComponentKey.hasOwnProperty(o) && t.mapNodeInfoByComponentKey[o][0][A] === e && i.push(o); + return i + } + , + TC.prototype._getLayerHandler = function() { + return this._layerHandler + } + , + TC.prototype.prepareData = function() { + var A = this; + this.materialManager._updateTextureMapping(), + this.materialManager._updateIBL(this); + var e = this._getHandler(); + e && e.prepareData((function() { + A.loaded = !0, + A.hasAnimation && vc.EnableAnimation && A.createPanel(), + A.debut(A) + } + )) + } + , + TC.prototype.isUserIdExist = function(A) { + return !!this.getModelDescriptor().getNodeInfosByUserId(A) + } + , + TC.prototype.getNodeInfosByUserId = function(A) { + return this.getModelDescriptor().getNodeInfosByUserId(A) + } + , + TC.prototype.getNodeInfos = function() { + return this.getModelDescriptor().getNodeInfosWithUserId() + } + , + TC.prototype.getFilter = function() { + return this.manager.filter + } + , + TC.prototype.getOctreeRoots = function(A) { + this.getModelDescriptor().getOctreeRoots(A) + } + , + TC.prototype.getPickingMeshes = function(A, e, t, i) { + this._dealNonInstancedNodesForPicking(A, e, t, i), + this._dealInstancedNodesForPicking(A, e, t, i), + this._dealPluginNodesForPicking(A, e, t, i) + } + , + TC.prototype._dealNonInstancedNodesForPicking = function(A, e, t, i) { + if (this._handler) { + var o = this._handler.defaultManager; + if (o.hasNodeInfo(this)) { + var n = o.getMeshManager().getPickingNodeGenerator().updatePickingMeshes(A.selectedMaterial, t, i); + n && e.meshes.push(n); + var r = o.getWireFrameManager().getPickingNodeGenerator().updatePickingMeshes(A.wireframeMaterial, t, i); + r && e.meshes.push(r) + } + } + } + , + TC.prototype._dealInstancedNodesForPicking = function(A, e, t, i) { + if (this._handler) { + var o = this._handler.instancedManager; + if (o.hasNodeInfo(this)) { + var n = o.getMeshManager().getPickingNodeGenerator().updatePickingMeshes(A.instancedSelectedMaterial, t, i); + n && e.meshes.push(n); + var r = o.getWireFrameManager().getPickingNodeGenerator().updatePickingMeshes(A.instancedWireFrameMaterial, t, i); + r && e.meshes.push(r) + } + } + } + , + TC.prototype._dealPluginNodesForPicking = function(A, e, t, i) { + if (this._handler) + for (var o = this.plugins, n = 0, r = o.length; r > n; n += 1) { + var a = o[n].getPickingNodeGenerator().updatePickingMeshes(A.selectedMaterial, t, i); + a && e.meshes.push(a) + } + } + , + TC.prototype.onWSWorkerMessage = function() {} + , + TC.prototype.onPDWorkerMessage = function() {} + , + TC.prototype._overrideOcclusionMaterial = function(A) { + var e = A.material; + if (e && !1 === e.transparent) { + var t = this.manager.acquireMaterial() + , i = t.material; + e.color ? i.color.copy(e.color) : t.resetColor(), + i.opacity = vc.OcclusionOpacity, + A.material = i, + A.material.needsUpdate = !0 + } + } + , + TC.prototype.showSkeleton = function(A) { + this.skeleton.visible = A + } + , + TC.prototype.deactivateAllActions = function() { + this.needUpdate = !1, + this.actions.forEach((function(A) { + A.stop() + } + )) + } + , + TC.prototype.activateAllActions = function() { + this.needUpdate = !0; + for (var A = 0; this.actions.length > A; A += 1) + this.setWeight(this.actions[A], 0 === A ? 1 : 0); + this.actions.forEach((function(A) { + A.play() + } + )) + } + , + TC.prototype.pauseAllActions = function() { + this.needUpdate = !1, + this.actions.forEach((function(A) { + A.paused = !0 + } + )) + } + , + TC.prototype.toSingleStepMode = function() { + this.unPauseAllActions(), + this.singleStepMode = !0, + this.sizeOfNextStep = this.settings["调整步长"] + } + , + TC.prototype.pauseContinue = function() { + this.singleStepMode ? (this.singleStepMode = !1, + this.unPauseAllActions()) : this.paused ? (this.paused = !1, + this.unPauseAllActions()) : (this.paused = !0, + this.pauseAllActions()) + } + , + TC.prototype.unPauseAllActions = function() { + this.needUpdate = !0, + this.actions.forEach((function(A) { + A.paused = !1 + } + )) + } + , + TC.prototype.setWeight = function(A, e) { + A.enabled = !0, + A.setEffectiveTimeScale(1), + A.setEffectiveWeight(e) + } + , + TC.prototype.modifyTimeScale = function(A) { + this.mixer.timeScale = A + } + , + TC.prototype.createPanel = function() { + var A = this + , e = new $m({ + width: 300 + }).addFolder(this.modelKey) + , t = e.addFolder("可见性") + , i = e.addFolder("激活/失活") + , o = e.addFolder("暂停/步进") + , n = e.addFolder("混合权重") + , r = e.addFolder("综合速度"); + this.settings = { + "显示模型": !0, + "显示骨骼": !1, + "关闭全部动画": this.deactivateAllActions.bind(A), + "激活所有动画": this.activateAllActions.bind(A), + "暂停/继续": this.pauseContinue.bind(A), + "单步动画": this.toSingleStepMode.bind(A), + "调整步长": .05, + "使用默认持续时间": !0, + "设置自定义持续时间": 3.5, + "modify idle weight": 0, + "modify walk weight": 1, + "modify run weight": 0, + "修改时间尺度": 1 + }; + var a = this.settings; + t.add(a, "显示模型").onChange(this.showModel.bind(A)), + t.add(a, "显示骨骼").onChange(this.showSkeleton.bind(A)), + i.add(a, "关闭全部动画"), + i.add(a, "激活所有动画"), + o.add(a, "暂停/继续"), + o.add(a, "单步动画"), + o.add(a, "调整步长", .01, .1, .001); + for (var s = this.actions, l = function(e) { + var t = s[e]._clip.name; + a[t] = 0 === e ? 1 : 0, + n.add(a, t, 0, 1, .01).listen().onChange((function(t) { + A.setWeight(s[e], t) + } + )) + }, c = 0; s.length > c; c += 1) + l(c); + r.add(a, "修改时间尺度", 0, 10, .01).onChange(this.modifyTimeScale.bind(A)), + t.open(), + i.open(), + o.open(), + n.open(), + r.open() + } + , + TC.prototype.getTransformGroup = function() { + return this.transformGroup || (this.transformGroup = this.manager.scene.getOrCreateGroup(gp.TRANSFORM), + this.group.add(this.transformGroup), + this.transformGroup.updateMatrixWorld(!0)), + this.transformGroup + } + , + TC.prototype.getComponentKeysBySubmodelKey = function(A) { + return this.submodel[A] || [] + } + , + TC.prototype.getTrianglesCount = function() { + var A = 0 + , e = 0 + , t = 0 + , i = 0 + , o = {}; + return this.group.traverse((function(n) { + if (n.isMesh) { + var r = n.geometry + , a = r.getAttribute("position").count + , s = r.index.count / 3 + , l = r.getAttribute("vState"); + o[r.id] || (t += a, + i += s, + o[r.id] = !0), + l && (a *= l.count, + s *= l.count), + A += a, + e += s + } + } + )), + o = null, + { + positionsCount: A, + trianglesCount: e, + realPositionCount: t, + realTrianglesCount: i + } + } + , + TC.prototype.addLights = function(A) { + this.lightGroup = this.lightGroup || new Xi, + this.group.add(this.lightGroup), + this.lightGroup.visible = !1; + for (var e = 0, t = A.length; t > e; e += 1) + this.lightGroup.add(A[e]), + A[e].updateMatrixWorld() + } + , + TC.prototype.hasLights = function() { + return this.lightGroup && this.lightGroup.children.length > 0 + } + , + TC.prototype.enabledLights = function() { + this.lightGroup.visible = !0 + } + , + TC.prototype.disabledLights = function() { + this.lightGroup.visible = !1 + } + , + Object.defineProperties(TC.prototype, { + modelConfig: { + get: function() { + return Bh.warn("EIMMODEL.Model: .modelConfig 现在为 .getConfig()"), + this.getConfig() + }, + set: function(A) { + this.setConfig(A) + } + }, + loader: { + get: function() { + return this._getHandler().loader + } + } + }); + var kC = { + getBoxFromTileBoundingVolumeBox: function(A) { + var e = new aA + , t = (new y).fromArray(A, 0) + , i = new y; + return i.fromArray(A, 3), + i.add(t), + e.expandByPoint(i), + i.fromArray(A, 6), + i.add(t), + e.expandByPoint(i), + i.fromArray(A, 9), + i.add(t), + e.expandByPoint(i), + e + }, + getSphereFromTileBoundingVolumeSphere: function(A) { + return new cA((new y).fromArray(A, 0),A[3] || 0) + }, + getTransfrom: function(A) { + return Array.isArray(A) ? (new M).fromArray(A) : new M + }, + getSSE: function(A) { + var e = this.getBoxByComponentsKey(A) + , t = this.viewerImpl.camera + , i = e.getCenter(new y) + , o = e.getSize().length() + , n = this.viewerImpl.getRenderer().domElement.width + , r = t.fov; + return o * n / (2 * t.position.clone().sub(i).length() * Math.tan(r / 2)) + } + } + , DC = function(A) { + bC.call(this, A) + }; + function LC(A, e, t) { + if (0 > e) + throw new Error("byteOffset cannot be negative."); + if (0 > t) + throw new Error("byteLength cannot be negative."); + if (e + t > A.byteLength) + throw new Error("sub-region exceeds array bounds."); + return A = A.subarray(e = e || 0, e + (t = t || A.byteLength - e)), + LC.decode(A) + } + function NC(A, e, t) { + return A >= e && t >= A + } + (DC.prototype = Object.create(bC.prototype)).load = function(A) { + var e = this + , t = this.model + , i = t.dataUrl; + _d({ + type: "GET", + url: i.rootTilesUrl(), + headers: { + Authorization: t.accessToken + }, + success: function(o) { + var n = {}; + if ("string" == typeof o) + try { + n = JSON.parse(o) + } catch (A) { + return t.setEmptyScene(!0), + void t.dispatchEventEx({ + type: Rc.ON_LOAD_INVALID_SCENE, + modelKey: t.modelKey + }) + } + else + n = o; + if (n) { + if (vc.offLine) + e.model.getStorage().put(i.projectUrl(), n, e.model.modelKey, (function() {} + ), (function() {} + )); + e._parse(n), + t.dispatchEventEx({ + type: Rc.ON_LOAD_CONFIG_FINISH, + modelKey: t.modelKey + }), + A && A() + } else + Bh.log(t.modelKey, "config load error! ", n.message), + t.dispatchEventEx({ + type: Rc.ON_LOAD_ERROR, + modelKey: t.modelKey, + code: n.code, + message: n.message + }) + }, + error: function(A, e) { + switch (A) { + case 401: + t.dispatchEventEx({ + type: Rc.ACCOUNT_NO_EXIST, + modelKey: t.modelKey, + data: e + }); + break; + case 403: + t.dispatchEventEx({ + type: Rc.NO_PERMISSION, + modelKey: t.modelKey, + data: e + }); + break; + default: + t.dispatchEventEx({ + type: Rc.ON_NETWORK_ERROR, + modelKey: t.modelKey, + data: A + }) + } + } + }) + } + , + DC.prototype._parse = function(A) { + this.config = A, + A.lengthUnit && (this.model.originalLengthUnit = A.lengthUnit || "m"), + this._toStatistics(A), + this._setTransformInfos(A), + this._chooseRendering(A) + } + , + DC.prototype._setTransformInfos = function(A) { + this.model.hasAnimation = !1, + this.transformInfos.octreeTransformed = !1, + this.transformInfos.boundingBox && this.transformInfos.boundingBox.isBox3 || (this.transformInfos.boundingBox = kC.getBoxFromTileBoundingVolumeBox(A.root.boundingVolume.box)), + this.transformInfos.transformMatrix.compose(this.transformInfos.position, this.transformInfos.rotation, this.transformInfos.scale), + this.transformInfos.transformMatrix.fromArray(A.matrix || [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]), + this.model.setModelMatrix(this.transformInfos.transformMatrix), + this.model.manager.updateScene() + } + , + LC.decodeWithTextDecoder = function(A) { + return new TextDecoder("utf-8").decode(A) + } + , + LC.decodeWithFromCharCode = function(A) { + for (var e = "", t = function(A) { + for (var e = 0, t = 0, i = 0, o = 128, n = 191, r = [], a = A.length, s = 0; a > s; s += 1) { + var l = A[s]; + if (0 === i) { + if (NC(l, 0, 127)) { + r.push(l); + continue + } + if (NC(l, 194, 223)) { + i = 1, + e = 31 & l; + continue + } + if (NC(l, 224, 239)) { + 224 === l && (o = 160), + 237 === l && (n = 159), + i = 2, + e = 15 & l; + continue + } + if (NC(l, 240, 244)) { + 240 === l && (o = 144), + 244 === l && (n = 143), + i = 3, + e = 7 & l; + continue + } + throw new Error("String decoding failed.") + } + NC(l, o, n) ? (o = 128, + n = 191, + e = e << 6 | 63 & l, + (t += 1) === i && (r.push(e), + e = i = t = 0)) : (e = i = t = 0, + o = 128, + n = 191, + s -= 1) + } + return r + }(A), i = t.length, o = 0; i > o; o += 1) { + var n = t[o]; + n > 65535 ? (n -= 65536, + e += String.fromCharCode(55296 + (n >> 10), 56320 + (1023 & n))) : e += String.fromCharCode(n) + } + return e + } + , + LC.decode = "undefined" != typeof TextDecoder ? LC.decodeWithTextDecoder : LC.decodeWithFromCharCode; + var OC = function() { + function A(A) { + Yr.call(this, A), + this.dracoLoader = null, + this.ddsLoader = null + } + function e() { + var A = {}; + return { + get: function(e) { + return A[e] + }, + add: function(e, t) { + A[e] = t + }, + remove: function(e) { + delete A[e] + }, + removeAll: function() { + A = {} + } + } + } + A.prototype = Object.assign(Object.create(Yr.prototype), { + constructor: A, + load: function(A, e, t, i) { + var o, n = this; + o = "" !== this.resourcePath ? this.resourcePath : "" !== this.path ? this.path : La.extractUrlBase(A), + n.manager.itemStart(A); + var r = function(e) { + i ? i(e) : console.error(e), + n.manager.itemError(A), + n.manager.itemEnd(A) + } + , a = new bu(n.manager); + a.setPath(this.path), + a.setResponseType("arraybuffer"), + "use-credentials" === n.crossOrigin && a.setWithCredentials(!0), + a.load(A, (function(t) { + try { + n.parse(t, o, (function(t) { + e(t), + n.manager.itemEnd(A) + } + ), r) + } catch (A) { + r(A) + } + } + ), t, r) + }, + setDRACOLoader: function(A) { + return this.dracoLoader = A, + this + }, + setDDSLoader: function(A) { + return this.ddsLoader = A, + this + }, + parse: function(A, e, a, s) { + var l, c = {}; + if ("string" == typeof A) + l = A; + else { + var g = La.decodeText(new Uint8Array(A,0,4)); + if (g === r) { + try { + c[t.KHR_BINARY_GLTF] = new h(A) + } catch (A) { + return void (s && s(A)) + } + l = c[t.KHR_BINARY_GLTF].content + } else if ("b3dm" === g) { + try { + c[t.KHR_BINARY_GLTF] = new h(function(A) { + var e = 0; + e = 0; + var t = Uint32Array.BYTES_PER_ELEMENT + , i = new Uint8Array(A) + , o = new DataView(A) + , n = o.getUint32(e += t, !0); + if (1 !== n) + throw new Error("Only Batched 3D Model version 1 is supported. Version " + n + " is not."); + var r, a = o.getUint32(e += t, !0), s = o.getUint32(e += t, !0), l = o.getUint32(e += t, !0), c = o.getUint32(e += t, !0), h = o.getUint32(e += t, !0); + if (e += t, + 570425344 > c ? 570425344 > h || (e -= t, + r = c, + c = s, + h = l, + s = 0, + l = 0) : (e -= 2 * t, + r = s, + c = l, + h = 0, + s = 0, + l = 0), + 0 === s) + ({ + BATCH_LENGTH: r || 0 + }); + else { + var d = LC(i, e, s); + JSON.parse(d), + e += s + } + if (e += l, + c > 0) { + var p = LC(i, e, c); + JSON.parse(p), + e += c, + h > 0 && (e += h) + } + var g = 0 + a - e; + if (0 === g) + throw new Error("glTF byte length must be greater than 0."); + var u = null; + return e % 4 == 0 ? (new Uint8Array(A,e,g), + u = A.slice(e)) : (new Uint8Array(i.subarray(e, e + g)), + u = A.slice(e)), + u + }(A)) + } catch (A) { + return void (s && s(A)) + } + l = c[t.KHR_BINARY_GLTF].content + } else + l = La.decodeText(new Uint8Array(A)) + } + var m = JSON.parse(l); + if (void 0 === m.asset || m.asset.version[0] < 2) + s && s(new Error("THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported.")); + else { + if (m.extensionsUsed) + for (var C = 0; m.extensionsUsed.length > C; ++C) { + var y = m.extensionsUsed[C] + , v = m.extensionsRequired || []; + switch (y) { + case t.KHR_LIGHTS_PUNCTUAL: + c[y] = new o(m); + break; + case t.KHR_MATERIALS_UNLIT: + c[y] = new n; + break; + case t.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS: + c[y] = new u; + break; + case t.KHR_DRACO_MESH_COMPRESSION: + c[y] = new d(m,this.dracoLoader); + break; + case t.MSFT_TEXTURE_DDS: + c[y] = new i(this.ddsLoader); + break; + case t.KHR_TEXTURE_TRANSFORM: + c[y] = new p; + break; + case t.KHR_MESH_QUANTIZATION: + c[y] = new f; + break; + default: + 0 > v.indexOf(y) || console.warn('THREE.GLTFLoader: Unknown extension "' + y + '".') + } + } + new q(m,c,{ + path: e || this.resourcePath || "", + crossOrigin: this.crossOrigin, + manager: this.manager + }).parse(a, s) + } + } + }); + var t = { + KHR_BINARY_GLTF: "KHR_binary_glTF", + KHR_DRACO_MESH_COMPRESSION: "KHR_draco_mesh_compression", + KHR_LIGHTS_PUNCTUAL: "KHR_lights_punctual", + KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS: "KHR_materials_pbrSpecularGlossiness", + KHR_MATERIALS_UNLIT: "KHR_materials_unlit", + KHR_TEXTURE_TRANSFORM: "KHR_texture_transform", + KHR_MESH_QUANTIZATION: "KHR_mesh_quantization", + MSFT_TEXTURE_DDS: "MSFT_texture_dds" + }; + function i(A) { + if (!A) + throw new Error("THREE.GLTFLoader: Attempting to load .dds texture without importing DDSLoader"); + this.name = t.MSFT_TEXTURE_DDS, + this.ddsLoader = A + } + function o(A) { + this.name = t.KHR_LIGHTS_PUNCTUAL, + this.lightDefs = (A.extensions && A.extensions[t.KHR_LIGHTS_PUNCTUAL] || {}).lights || [] + } + function n() { + this.name = t.KHR_MATERIALS_UNLIT + } + o.prototype.loadLight = function(A) { + var e, t = this.lightDefs[A], i = new LA(16777215); + void 0 !== t.color && i.fromArray(t.color); + var o = void 0 !== t.range ? t.range : 0; + switch (t.type) { + case "directional": + (e = new Ra(i)).target.position.set(0, 0, -1), + e.add(e.target); + break; + case "point": + (e = new Fa(i)).distance = o; + break; + case "spot": + (e = new ba(i)).distance = o, + t.spot = t.spot || {}, + t.spot.innerConeAngle = void 0 !== t.spot.innerConeAngle ? t.spot.innerConeAngle : 0, + t.spot.outerConeAngle = void 0 !== t.spot.outerConeAngle ? t.spot.outerConeAngle : Math.PI / 4, + e.angle = t.spot.outerConeAngle, + e.penumbra = 1 - t.spot.innerConeAngle / t.spot.outerConeAngle, + e.target.position.set(0, 0, -1), + e.add(e.target); + break; + default: + throw new Error('THREE.GLTFLoader: Unexpected light type, "' + t.type + '".') + } + return e.position.set(0, 0, 0), + e.decay = 2, + void 0 !== t.intensity && (e.intensity = t.intensity), + e.name = t.name || "light_" + A, + Promise.resolve(e) + } + , + n.prototype.getMaterialType = function() { + return jA + } + , + n.prototype.extendParams = function(A, e, t) { + var i = []; + A.color = new LA(1,1,1), + A.opacity = 1; + var o = e.pbrMetallicRoughness; + if (o) { + if (Array.isArray(o.baseColorFactor)) { + var n = o.baseColorFactor; + A.color.fromArray(n), + A.opacity = n[3] + } + void 0 !== o.baseColorTexture && i.push(t.assignTexture(A, "map", o.baseColorTexture)) + } + return Promise.all(i) + } + ; + var r = "glTF" + , l = 1313821514 + , c = 5130562; + function h(A) { + this.name = t.KHR_BINARY_GLTF, + this.content = null, + this.body = null; + var e = new DataView(A,0,12); + if (this.header = { + magic: La.decodeText(new Uint8Array(A.slice(0, 4))), + version: e.getUint32(4, !0), + length: e.getUint32(8, !0) + }, + this.header.magic !== r) + throw new Error("THREE.GLTFLoader: Unsupported glTF-Binary header."); + if (2 > this.header.version) + throw new Error("THREE.GLTFLoader: Legacy binary file detected."); + for (var i = new DataView(A,12), o = 0; i.byteLength > o; ) { + var n = i.getUint32(o, !0) + , a = i.getUint32(o += 4, !0); + if (o += 4, + a === l) { + var s = new Uint8Array(A,12 + o,n); + this.content = La.decodeText(s) + } else if (a === c) { + var h = 12 + o; + this.body = A.slice(h, h + n) + } + o += n + } + if (null === this.content) + throw new Error("THREE.GLTFLoader: JSON content not found.") + } + function d(A, e) { + if (!e) + throw new Error("THREE.GLTFLoader: No DRACOLoader instance provided."); + this.name = t.KHR_DRACO_MESH_COMPRESSION, + this.json = A, + this.dracoLoader = e, + this.dracoLoader.preload() + } + function p() { + this.name = t.KHR_TEXTURE_TRANSFORM + } + function g(A) { + yr.call(this), + this.isGLTFSpecularGlossinessMaterial = !0; + var e = ["#ifdef USE_SPECULARMAP", "\tuniform sampler2D specularMap;", "#endif"].join("\n") + , t = ["#ifdef USE_GLOSSINESSMAP", "\tuniform sampler2D glossinessMap;", "#endif"].join("\n") + , i = ["vec3 specularFactor = specular;", "#ifdef USE_SPECULARMAP", "\tvec4 texelSpecular = texture2D( specularMap, vUv );", "\ttexelSpecular = sRGBToLinear( texelSpecular );", "\t// reads channel RGB, compatible with a glTF Specular-Glossiness (RGBA) texture", "\tspecularFactor *= texelSpecular.rgb;", "#endif"].join("\n") + , o = ["float glossinessFactor = glossiness;", "#ifdef USE_GLOSSINESSMAP", "\tvec4 texelGlossiness = texture2D( glossinessMap, vUv );", "\t// reads channel A, compatible with a glTF Specular-Glossiness (RGBA) texture", "\tglossinessFactor *= texelGlossiness.a;", "#endif"].join("\n") + , n = ["PhysicalMaterial material;", "material.diffuseColor = diffuseColor.rgb;", "vec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );", "float geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );", "material.specularRoughness = max( 1.0 - glossinessFactor, 0.0525 );// 0.0525 corresponds to the base mip of a 256 cubemap.", "material.specularRoughness += geometryRoughness;", "material.specularRoughness = min( material.specularRoughness, 1.0 );", "material.specularColor = specularFactor.rgb;"].join("\n") + , r = { + specular: { + value: (new LA).setHex(16777215) + }, + glossiness: { + value: 1 + }, + specularMap: { + value: null + }, + glossinessMap: { + value: null + } + }; + this._extraUniforms = r, + this.onBeforeCompile = function(A) { + for (var a in r) + A.uniforms[a] = r[a]; + A.fragmentShader = A.fragmentShader.replace("uniform float roughness;", "uniform vec3 specular;"), + A.fragmentShader = A.fragmentShader.replace("uniform float metalness;", "uniform float glossiness;"), + A.fragmentShader = A.fragmentShader.replace("#include ", e), + A.fragmentShader = A.fragmentShader.replace("#include ", t), + A.fragmentShader = A.fragmentShader.replace("#include ", i), + A.fragmentShader = A.fragmentShader.replace("#include ", o), + A.fragmentShader = A.fragmentShader.replace("#include ", n) + } + , + Object.defineProperties(this, { + specular: { + get: function() { + return r.specular.value + }, + set: function(A) { + r.specular.value = A + } + }, + specularMap: { + get: function() { + return r.specularMap.value + }, + set: function(A) { + r.specularMap.value = A + } + }, + glossiness: { + get: function() { + return r.glossiness.value + }, + set: function(A) { + r.glossiness.value = A + } + }, + glossinessMap: { + get: function() { + return r.glossinessMap.value + }, + set: function(A) { + r.glossinessMap.value = A, + A ? (this.defines.USE_GLOSSINESSMAP = "", + this.defines.USE_ROUGHNESSMAP = "") : (delete this.defines.USE_ROUGHNESSMAP, + delete this.defines.USE_GLOSSINESSMAP) + } + } + }), + delete this.metalness, + delete this.roughness, + delete this.metalnessMap, + delete this.roughnessMap, + this.setValues(A) + } + function u() { + return { + name: t.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS, + specularGlossinessParams: ["color", "map", "lightMap", "lightMapIntensity", "aoMap", "aoMapIntensity", "emissive", "emissiveIntensity", "emissiveMap", "bumpMap", "bumpScale", "normalMap", "normalMapType", "displacementMap", "displacementScale", "displacementBias", "specularMap", "specular", "glossinessMap", "glossiness", "alphaMap", "envMap", "envMapIntensity", "refractionRatio"], + getMaterialType: function() { + return g + }, + extendParams: function(A, e, t) { + var i = e.extensions[this.name]; + A.color = new LA(1,1,1), + A.opacity = 1; + var o = []; + if (Array.isArray(i.diffuseFactor)) { + var n = i.diffuseFactor; + A.color.fromArray(n), + A.opacity = n[3] + } + if (void 0 !== i.diffuseTexture && o.push(t.assignTexture(A, "map", i.diffuseTexture)), + A.emissive = new LA(0,0,0), + A.glossiness = void 0 !== i.glossinessFactor ? i.glossinessFactor : 1, + A.specular = new LA(1,1,1), + Array.isArray(i.specularFactor) && A.specular.fromArray(i.specularFactor), + void 0 !== i.specularGlossinessTexture) { + var r = i.specularGlossinessTexture; + o.push(t.assignTexture(A, "glossinessMap", r)), + o.push(t.assignTexture(A, "specularMap", r)) + } + return Promise.all(o) + }, + createMaterial: function(A) { + var e = new g(A); + return e.fog = !0, + e.color = A.color, + e.map = void 0 === A.map ? null : A.map, + e.lightMap = null, + e.lightMapIntensity = 1, + e.aoMap = void 0 === A.aoMap ? null : A.aoMap, + e.aoMapIntensity = 1, + e.emissive = A.emissive, + e.emissiveIntensity = 1, + e.emissiveMap = void 0 === A.emissiveMap ? null : A.emissiveMap, + e.bumpMap = void 0 === A.bumpMap ? null : A.bumpMap, + e.bumpScale = 1, + e.normalMap = void 0 === A.normalMap ? null : A.normalMap, + e.normalMapType = 0, + A.normalScale && (e.normalScale = A.normalScale), + e.displacementMap = null, + e.displacementScale = 1, + e.displacementBias = 0, + e.specularMap = void 0 === A.specularMap ? null : A.specularMap, + e.specular = A.specular, + e.glossinessMap = void 0 === A.glossinessMap ? null : A.glossinessMap, + e.glossiness = A.glossiness, + e.alphaMap = null, + e.envMap = void 0 === A.envMap ? null : A.envMap, + e.envMapIntensity = 1, + e.refractionRatio = .98, + e + } + } + } + function f() { + this.name = t.KHR_MESH_QUANTIZATION + } + function m(A, e, t, i) { + Ur.call(this, A, e, t, i) + } + d.prototype.decodePrimitive = function(A, e) { + var t = this.json + , i = this.dracoLoader + , o = A.extensions[this.name].bufferView + , n = A.extensions[this.name].attributes + , r = {} + , a = {} + , s = {}; + for (var l in n) { + var c = K[l] || l.toLowerCase(); + r[c] = n[l] + } + for (l in A.attributes) { + c = K[l] || l.toLowerCase(); + if (void 0 !== n[l]) { + var h = t.accessors[A.attributes[l]]; + s[c] = w[h.componentType], + a[c] = !0 === h.normalized + } + } + return e.getDependency("bufferView", o).then((function(A) { + return new Promise((function(e) { + i.decodeDracoFile(A, (function(A) { + for (var t in A.attributes) { + var i = a[t]; + void 0 !== i && (A.attributes[t].normalized = i) + } + e(A) + } + ), r, s) + } + )) + } + )) + } + , + p.prototype.extendTexture = function(A, e) { + return A = A.clone(), + void 0 !== e.offset && A.offset.fromArray(e.offset), + void 0 !== e.rotation && (A.rotation = e.rotation), + void 0 !== e.scale && A.repeat.fromArray(e.scale), + void 0 !== e.texCoord && console.warn('THREE.GLTFLoader: Custom UV sets in "' + this.name + '" extension not yet supported.'), + A.needsUpdate = !0, + A + } + , + (g.prototype = Object.create(yr.prototype)).constructor = g, + g.prototype.copy = function(A) { + return yr.prototype.copy.call(this, A), + this.specularMap = A.specularMap, + this.specular.copy(A.specular), + this.glossinessMap = A.glossinessMap, + this.glossiness = A.glossiness, + delete this.metalness, + delete this.roughness, + delete this.metalnessMap, + delete this.roughnessMap, + this + } + , + (m.prototype = Object.create(Ur.prototype)).constructor = m, + m.prototype.beforeStart_ = m.prototype.copySampleValue_ = function(A) { + for (var e = this.resultBuffer, t = this.sampleValues, i = this.valueSize, o = A * i * 3 + i, n = 0; n !== i; n++) + e[n] = t[o + n]; + return e + } + , + m.prototype.afterEnd_ = m.prototype.copySampleValue_, + m.prototype.interpolate_ = function(A, e, t, i) { + for (var o = this.resultBuffer, n = this.sampleValues, r = this.valueSize, a = 2 * r, s = 3 * r, l = i - e, c = (t - e) / l, h = c * c, d = h * c, p = A * s, g = p - s, u = -2 * d + 3 * h, f = d - h, m = 1 - u, C = f - h + c, y = 0; y !== r; y++) { + o[y] = m * n[g + y + r] + C * (n[g + y + a] * l) + u * n[p + y + r] + f * (n[p + y] * l) + } + return o + } + ; + var C = 0 + , v = 1 + , I = 2 + , E = 3 + , B = 4 + , x = 5 + , S = 6 + , w = { + 5120: Int8Array, + 5121: Uint8Array, + 5122: Int16Array, + 5123: Uint16Array, + 5125: Uint32Array, + 5126: Float32Array + } + , b = { + 9728: 1003, + 9729: 1006, + 9984: 1004, + 9985: 1007, + 9986: 1005, + 9987: 1008 + } + , U = { + 33071: 1001, + 33648: 1002, + 10497: 1e3 + } + , F = { + SCALAR: 1, + VEC2: 2, + VEC3: 3, + VEC4: 4, + MAT2: 4, + MAT3: 9, + MAT4: 16 + } + , K = { + POSITION: "position", + NORMAL: "normal", + TANGENT: "tangent", + TEXCOORD_0: "uv", + TEXCOORD_1: "uv2", + COLOR_0: "color", + WEIGHTS_0: "skinWeight", + JOINTS_0: "skinIndex" + } + , Q = { + scale: "scale", + translation: "position", + rotation: "quaternion", + weights: "morphTargetInfluences" + } + , R = { + CUBICSPLINE: void 0, + LINEAR: 2301, + STEP: 2300 + } + , T = "OPAQUE" + , k = "MASK" + , D = "BLEND" + , L = { + "image/png": 1023, + "image/jpeg": 1022 + }; + function N(A, e) { + return "string" != typeof A || "" === A ? "" : (/^https?:\/\//i.test(e) && /^\//.test(A) && (e = e.replace(/(^https?:\/\/[^\/]+).*/i, "$1")), + /^(https?:)?\/\//i.test(A) || /^data:.*,.*$/i.test(A) || /^blob:.*$/i.test(A) ? A : e + A) + } + function O(A, e, t) { + for (var i in t.extensions) + void 0 === A[i] && (e.userData.gltfExtensions = e.userData.gltfExtensions || {}, + e.userData.gltfExtensions[i] = t.extensions[i]) + } + function V(A, e) { + void 0 !== e.extras && ("object" === lc(e.extras) ? Object.assign(A.userData, e.extras) : console.warn("THREE.GLTFLoader: Ignoring primitive type .extras, " + e.extras)) + } + function G(A, e) { + if (A.updateMorphTargets(), + void 0 !== e.weights) + for (var t = 0, i = e.weights.length; i > t; t++) + A.morphTargetInfluences[t] = e.weights[t]; + if (e.extras && Array.isArray(e.extras.targetNames)) { + var o = e.extras.targetNames; + if (A.morphTargetInfluences.length === o.length) { + A.morphTargetDictionary = {}; + for (t = 0, + i = o.length; i > t; t++) + A.morphTargetDictionary[o[t]] = t + } else + console.warn("THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.") + } + } + function P(A) { + for (var e = "", t = Object.keys(A).sort(), i = 0, o = t.length; o > i; i++) + e += t[i] + ":" + A[t[i]] + ";"; + return e + } + function q(A, t, i) { + this.json = A || {}, + this.extensions = t || {}, + this.options = i || {}, + this.cache = new e, + this.primitiveCache = {}, + this.textureLoader = new Aa(this.options.manager), + this.textureLoader.setCrossOrigin(this.options.crossOrigin), + this.fileLoader = new bu(this.options.manager), + this.fileLoader.setResponseType("arraybuffer"), + "use-credentials" === this.options.crossOrigin && this.fileLoader.setWithCredentials(!0) + } + function j(A, e, t) { + var i = e.attributes + , o = []; + function n(e, i) { + return t.getDependency("accessor", e).then((function(e) { + A.setAttribute(i, e) + } + )) + } + for (var r in i) { + var a = K[r] || r.toLowerCase(); + a in A.attributes || o.push(n(i[r], a)) + } + if (void 0 !== e.indices && !A.index) { + var s = t.getDependency("accessor", e.indices).then((function(e) { + A.setIndex(e) + } + )); + o.push(s) + } + return V(A, e), + function(A, e, t) { + var i = e.attributes + , o = new aA; + if (void 0 !== i.POSITION) { + var n = (h = t.json.accessors[i.POSITION]).max; + if (void 0 !== (d = h.min) && void 0 !== n) { + o.set(new y(d[0],d[1],d[2]), new y(n[0],n[1],n[2])); + var r = e.targets; + if (void 0 !== r) + for (var a = new y, s = 0, l = r.length; l > s; s++) { + var c = r[s]; + if (void 0 !== c.POSITION) { + var h, d; + n = (h = t.json.accessors[c.POSITION]).max; + void 0 !== (d = h.min) && void 0 !== n ? (a.setX(Math.max(Math.abs(d[0]), Math.abs(n[0]))), + a.setY(Math.max(Math.abs(d[1]), Math.abs(n[1]))), + a.setZ(Math.max(Math.abs(d[2]), Math.abs(n[2]))), + o.expandByVector(a)) : console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.") + } + } + A.boundingBox = o; + var p = new cA; + o.getCenter(p.center), + p.radius = o.min.distanceTo(o.max) / 2, + A.boundingSphere = p + } else + console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.") + } + }(A, e, t), + Promise.all(o).then((function() { + return void 0 !== e.targets ? function(A, e, t) { + for (var i = !1, o = !1, n = 0, r = e.length; r > n; n++) { + if (void 0 !== (l = e[n]).POSITION && (i = !0), + void 0 !== l.NORMAL && (o = !0), + i && o) + break + } + if (!i && !o) + return Promise.resolve(A); + var a = [] + , s = []; + for (n = 0, + r = e.length; r > n; n++) { + var l = e[n]; + if (i) { + var c = void 0 !== l.POSITION ? t.getDependency("accessor", l.POSITION) : A.attributes.position; + a.push(c) + } + if (o) { + c = void 0 !== l.NORMAL ? t.getDependency("accessor", l.NORMAL) : A.attributes.normal; + s.push(c) + } + } + return Promise.all([Promise.all(a), Promise.all(s)]).then((function(e) { + var t = e[1]; + return i && (A.morphAttributes.position = e[0]), + o && (A.morphAttributes.normal = t), + A.morphTargetsRelative = !0, + A + } + )) + }(A, e.targets, t) : A + } + )) + } + function Y(A, e) { + var t = A.getIndex(); + if (null === t) { + var i = [] + , o = A.getAttribute("position"); + if (void 0 === o) + return console.error("THREE.GLTFLoader.toTrianglesDrawMode(): Undefined position attribute. Processing not possible."), + A; + for (var n = 0; o.count > n; n++) + i.push(n); + A.setIndex(i), + t = A.getIndex() + } + var r = t.count - 2 + , a = []; + if (2 === e) + for (n = 1; r >= n; n++) + a.push(t.getX(0)), + a.push(t.getX(n)), + a.push(t.getX(n + 1)); + else + for (n = 0; r > n; n++) + n % 2 == 0 ? (a.push(t.getX(n)), + a.push(t.getX(n + 1)), + a.push(t.getX(n + 2))) : (a.push(t.getX(n + 2)), + a.push(t.getX(n + 1)), + a.push(t.getX(n))); + a.length / 3 !== r && console.error("THREE.GLTFLoader.toTrianglesDrawMode(): Unable to generate correct amount of triangles."); + var s = A.clone(); + return s.setIndex(a), + s + } + return q.prototype.parse = function(A, e) { + var t = this + , i = this.json + , o = this.extensions; + this.cache.removeAll(), + this.markDefs(), + Promise.all([this.getDependencies("scene"), this.getDependencies("animation"), this.getDependencies("camera")]).then((function(e) { + var n = { + scene: e[0][i.scene || 0], + scenes: e[0], + animations: e[1], + cameras: e[2], + asset: i.asset, + parser: t, + userData: {} + }; + O(o, n, i), + V(n, i), + A(n) + } + )).catch(e) + } + , + q.prototype.markDefs = function() { + for (var A = this.json.nodes || [], e = this.json.skins || [], t = this.json.meshes || [], i = {}, o = {}, n = 0, r = e.length; r > n; n++) + for (var a = e[n].joints, s = 0, l = a.length; l > s; s++) + A[a[s]].isBone = !0; + for (var c = 0, h = A.length; h > c; c++) { + var d = A[c]; + void 0 !== d.mesh && (void 0 === i[d.mesh] && (i[d.mesh] = o[d.mesh] = 0), + i[d.mesh]++, + void 0 !== d.skin && (t[d.mesh].isSkinnedMesh = !0)) + } + this.json.meshReferences = i, + this.json.meshUses = o + } + , + q.prototype.getDependency = function(A, e) { + var i = A + ":" + e + , o = this.cache.get(i); + if (!o) { + switch (A) { + case "scene": + o = this.loadScene(e); + break; + case "node": + o = this.loadNode(e); + break; + case "mesh": + o = this.loadMesh(e); + break; + case "accessor": + o = this.loadAccessor(e); + break; + case "bufferView": + o = this.loadBufferView(e); + break; + case "buffer": + o = this.loadBuffer(e); + break; + case "material": + o = this.loadMaterial(e); + break; + case "texture": + o = this.loadTexture(e); + break; + case "skin": + o = this.loadSkin(e); + break; + case "animation": + o = this.loadAnimation(e); + break; + case "camera": + o = this.loadCamera(e); + break; + case "light": + o = this.extensions[t.KHR_LIGHTS_PUNCTUAL].loadLight(e); + break; + default: + throw new Error("Unknown type: " + A) + } + this.cache.add(i, o) + } + return o + } + , + q.prototype.getDependencies = function(A) { + var e = this.cache.get(A); + if (!e) { + var t = this; + e = Promise.all((this.json[A + ("mesh" === A ? "es" : "s")] || []).map((function(e, i) { + return t.getDependency(A, i) + } + ))), + this.cache.add(A, e) + } + return e + } + , + q.prototype.loadBuffer = function(A) { + var e = this.json.buffers[A] + , i = this.fileLoader; + if (e.type && "arraybuffer" !== e.type) + throw new Error("THREE.GLTFLoader: " + e.type + " buffer type is not supported."); + if (void 0 === e.uri && 0 === A) + return Promise.resolve(this.extensions[t.KHR_BINARY_GLTF].body); + var o = this.options; + return new Promise((function(A, t) { + i.load(N(e.uri, o.path), A, void 0, (function() { + t(new Error('THREE.GLTFLoader: Failed to load buffer "' + e.uri + '".')) + } + )) + } + )) + } + , + q.prototype.loadBufferView = function(A) { + var e = this.json.bufferViews[A]; + return this.getDependency("buffer", e.buffer).then((function(A) { + var t = e.byteOffset || 0; + return A.slice(t, t + (e.byteLength || 0)) + } + )) + } + , + q.prototype.loadAccessor = function(A) { + var e = this + , t = this.json + , i = this.json.accessors[A]; + if (void 0 === i.bufferView && void 0 === i.sparse) + return Promise.resolve(null); + var o = []; + return o.push(void 0 !== i.bufferView ? this.getDependency("bufferView", i.bufferView) : null), + void 0 !== i.sparse && (o.push(this.getDependency("bufferView", i.sparse.indices.bufferView)), + o.push(this.getDependency("bufferView", i.sparse.values.bufferView))), + Promise.all(o).then((function(A) { + var o, n = A[0], r = F[i.type], a = w[i.componentType], s = a.BYTES_PER_ELEMENT, l = i.byteOffset || 0, c = void 0 !== i.bufferView ? t.bufferViews[i.bufferView].byteStride : void 0, h = !0 === i.normalized; + if (c && c !== s * r) { + var d = Math.floor(l / c) + , p = "InterleavedBuffer:" + i.bufferView + ":" + i.componentType + ":" + d + ":" + i.count + , g = e.cache.get(p); + g || (g = new to(new a(n,d * c,i.count * c / s),c / s), + e.cache.add(p, g)), + o = new no(g,r,l % c / s,h) + } else + o = new YA(null === n ? new a(i.count * r) : new a(n,l,i.count * r),r,h); + if (void 0 !== i.sparse) { + var u = i.sparse.values.byteOffset || 0 + , f = new (0, + w[i.sparse.indices.componentType])(A[1],i.sparse.indices.byteOffset || 0,i.sparse.count * F.SCALAR) + , m = new a(A[2],u,i.sparse.count * r); + null !== n && (o = new YA(o.array.slice(),o.itemSize,o.normalized)); + for (var C = 0, y = f.length; y > C; C++) { + var v = f[C]; + if (o.setX(v, m[C * r]), + 2 > r || o.setY(v, m[C * r + 1]), + 3 > r || o.setZ(v, m[C * r + 2]), + 4 > r || o.setW(v, m[C * r + 3]), + r >= 5) + throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.") + } + } + return o + } + )) + } + , + q.prototype.loadTexture = function(A) { + var e, i = this, o = this.json, n = this.options, r = this.textureLoader, a = window.URL || window.webkitURL, s = o.textures[A], l = s.extensions || {}, c = (e = l[t.MSFT_TEXTURE_DDS] ? o.images[l[t.MSFT_TEXTURE_DDS].source] : o.images[s.source]).uri, h = !1; + return void 0 !== e.bufferView && (c = i.getDependency("bufferView", e.bufferView).then((function(A) { + h = !0; + var t = new Blob([A],{ + type: e.mimeType + }); + return c = a.createObjectURL(t) + } + ))), + Promise.resolve(c).then((function(A) { + var e = n.manager.getHandler(A); + return e || (e = l[t.MSFT_TEXTURE_DDS] ? i.extensions[t.MSFT_TEXTURE_DDS].ddsLoader : r), + new Promise((function(t, i) { + e.load(N(A, n.path), t, void 0, i) + } + )) + } + )).then((function(A) { + !0 === h && a.revokeObjectURL(c), + A.flipY = !1, + s.name && (A.name = s.name), + e.mimeType in L && (A.format = L[e.mimeType]); + var t = (o.samplers || {})[s.sampler] || {}; + return A.magFilter = b[t.magFilter] || 1006, + A.minFilter = b[t.minFilter] || 1008, + A.wrapS = U[t.wrapS] || 1e3, + A.wrapT = U[t.wrapT] || 1e3, + A + } + )) + } + , + q.prototype.assignTexture = function(A, e, i) { + var o = this; + return this.getDependency("texture", i.index).then((function(n) { + if (!n.isCompressedTexture) + switch (e) { + case "aoMap": + case "emissiveMap": + case "metalnessMap": + case "normalMap": + case "roughnessMap": + n.format = 1022 + } + if (void 0 === i.texCoord || 0 == i.texCoord || "aoMap" === e && 1 == i.texCoord || console.warn("THREE.GLTFLoader: Custom UV set " + i.texCoord + " for texture " + e + " not yet supported."), + o.extensions[t.KHR_TEXTURE_TRANSFORM]) { + var r = void 0 !== i.extensions ? i.extensions[t.KHR_TEXTURE_TRANSFORM] : void 0; + r && (n = o.extensions[t.KHR_TEXTURE_TRANSFORM].extendTexture(n, r)) + } + A[e] = n + } + )) + } + , + q.prototype.assignFinalMaterial = function(A) { + var e = A.geometry + , t = A.material + , i = void 0 !== e.attributes.tangent + , o = void 0 !== e.attributes.color + , n = void 0 === e.attributes.normal + , r = !0 === A.isSkinnedMesh + , a = Object.keys(e.morphAttributes).length > 0 + , s = a && void 0 !== e.morphAttributes.normal; + if (A.isPoints) { + var l = this.cache.get(h = "PointsMaterial:" + t.uuid); + l || (l = new Yo, + qA.prototype.copy.call(l, t), + l.color.copy(t.color), + l.map = t.map, + l.sizeAttenuation = !1, + this.cache.add(h, l)), + t = l + } else if (A.isLine) { + var c = this.cache.get(h = "LineBasicMaterial:" + t.uuid); + c || (c = new ko, + qA.prototype.copy.call(c, t), + c.color.copy(t.color), + this.cache.add(h, c)), + t = c + } + if (i || o || n || r || a) { + var h = "ClonedMaterial:" + t.uuid + ":"; + t.isGLTFSpecularGlossinessMaterial && (h += "specular-glossiness:"), + r && (h += "skinning:"), + i && (h += "vertex-tangents:"), + o && (h += "vertex-colors:"), + n && (h += "flat-shading:"), + a && (h += "morph-targets:"), + s && (h += "morph-normals:"); + var d = this.cache.get(h); + d || (d = t.clone(), + r && (d.skinning = !0), + i && (d.vertexTangents = !0), + o && (d.vertexColors = !0), + n && (d.flatShading = !0), + a && (d.morphTargets = !0), + s && (d.morphNormals = !0), + this.cache.add(h, d)), + t = d + } + t.aoMap && void 0 === e.attributes.uv2 && void 0 !== e.attributes.uv && e.setAttribute("uv2", new YA(e.attributes.uv.array,2)), + t.normalScale && !i && (t.normalScale.y = -t.normalScale.y), + A.material = t + } + , + q.prototype.loadMaterial = function(A) { + var e, i = this.extensions, o = this.json.materials[A], n = {}, r = o.extensions || {}, a = []; + if (r[t.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS]) { + var l = i[t.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS]; + e = l.getMaterialType(), + a.push(l.extendParams(n, o, this)) + } else if (r[t.KHR_MATERIALS_UNLIT]) { + var c = i[t.KHR_MATERIALS_UNLIT]; + e = c.getMaterialType(), + a.push(c.extendParams(n, o, this)) + } else { + e = yr; + var h = o.pbrMetallicRoughness || {}; + if (n.color = new LA(1,1,1), + n.opacity = 1, + Array.isArray(h.baseColorFactor)) { + var d = h.baseColorFactor; + n.color.fromArray(d), + n.opacity = d[3] + } + void 0 !== h.baseColorTexture && a.push(this.assignTexture(n, "map", h.baseColorTexture)), + n.metalness = void 0 !== h.metallicFactor ? h.metallicFactor : 1, + n.roughness = void 0 !== h.roughnessFactor ? h.roughnessFactor : 1, + void 0 !== h.metallicRoughnessTexture && (a.push(this.assignTexture(n, "metalnessMap", h.metallicRoughnessTexture)), + a.push(this.assignTexture(n, "roughnessMap", h.metallicRoughnessTexture))) + } + !0 === o.doubleSided && (n.side = 2); + var p = o.alphaMode || T; + return p === D ? (n.transparent = !0, + n.depthWrite = !1) : (n.transparent = !1, + p === k && (n.alphaTest = void 0 !== o.alphaCutoff ? o.alphaCutoff : .5)), + void 0 !== o.normalTexture && e !== jA && (a.push(this.assignTexture(n, "normalMap", o.normalTexture)), + n.normalScale = new s(1,1), + void 0 !== o.normalTexture.scale && n.normalScale.set(o.normalTexture.scale, o.normalTexture.scale)), + void 0 !== o.occlusionTexture && e !== jA && (a.push(this.assignTexture(n, "aoMap", o.occlusionTexture)), + void 0 !== o.occlusionTexture.strength && (n.aoMapIntensity = o.occlusionTexture.strength)), + void 0 !== o.emissiveFactor && e !== jA && (n.emissive = (new LA).fromArray(o.emissiveFactor)), + void 0 !== o.emissiveTexture && e !== jA && a.push(this.assignTexture(n, "emissiveMap", o.emissiveTexture)), + Promise.all(a).then((function() { + var A; + return A = e === g ? i[t.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS].createMaterial(n) : new e(n), + o.name && (A.name = o.name), + A.map && (A.map.encoding = 3001), + A.emissiveMap && (A.emissiveMap.encoding = 3001), + V(A, o), + o.extensions && O(i, A, o), + A + } + )) + } + , + q.prototype.loadGeometries = function(A) { + var e = this + , i = this.extensions + , o = this.primitiveCache; + function n(A) { + return i[t.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(A, e).then((function(t) { + return j(t, A, e) + } + )) + } + for (var r, a, s = [], l = 0, c = A.length; c > l; l++) { + var h, d = A[l], p = (a = void 0, + (a = (r = d).extensions && r.extensions[t.KHR_DRACO_MESH_COMPRESSION]) ? "draco:" + a.bufferView + ":" + a.indices + ":" + P(a.attributes) : r.indices + ":" + P(r.attributes) + ":" + r.mode), g = o[p]; + if (g) + s.push(g.promise); + else + h = d.extensions && d.extensions[t.KHR_DRACO_MESH_COMPRESSION] ? n(d) : j(new he, d, e), + o[p] = { + primitive: d, + promise: h + }, + s.push(h) + } + return Promise.all(s) + } + , + q.prototype.loadMesh = function(A) { + for (var e, t = this, i = this.json.meshes[A], o = i.primitives, n = [], r = 0, a = o.length; a > r; r++) { + var s = void 0 === o[r].material ? (void 0 === (e = this.cache).DefaultMaterial && (e.DefaultMaterial = new yr({ + color: 16777215, + emissive: 0, + metalness: 1, + roughness: 1, + transparent: !1, + depthTest: !0, + side: 0 + })), + e.DefaultMaterial) : this.getDependency("material", o[r].material); + n.push(s) + } + return n.push(t.loadGeometries(o)), + Promise.all(n).then((function(e) { + for (var n = e.slice(0, e.length - 1), r = e[e.length - 1], a = [], s = 0, l = r.length; l > s; s++) { + var c, h = r[s], d = o[s], p = n[s]; + if (d.mode === B || d.mode === x || d.mode === S || void 0 === d.mode) + !0 !== (c = !0 === i.isSkinnedMesh ? new So(h,p) : new Ue(h,p)).isSkinnedMesh || c.geometry.attributes.skinWeight.normalized || c.normalizeSkinWeights(), + d.mode === x ? c.geometry = Y(c.geometry, 1) : d.mode === S && (c.geometry = Y(c.geometry, 2)); + else if (d.mode === v) + c = new jo(h,p); + else if (d.mode === E) + c = new Go(h,p); + else if (d.mode === I) + c = new Ho(h,p); + else { + if (d.mode !== C) + throw new Error("THREE.GLTFLoader: Primitive mode unsupported: " + d.mode); + c = new Xo(h,p) + } + Object.keys(c.geometry.morphAttributes).length > 0 && G(c, i), + c.name = i.name || "mesh_" + A, + r.length > 1 && (c.name += "_" + s), + V(c, i), + t.assignFinalMaterial(c), + a.push(c) + } + if (1 === a.length) + return a[0]; + var g = new Xi; + for (s = 0, + l = a.length; l > s; s++) + g.add(a[s]); + return g + } + )) + } + , + q.prototype.loadCamera = function(A) { + var e, t = this.json.cameras[A], i = t[t.type]; + if (i) + return "perspective" === t.type ? e = new je(a.radToDeg(i.yfov),i.aspectRatio || 1,i.znear || 1,i.zfar || 2e6) : "orthographic" === t.type && (e = new Ka(i.xmag / -2,i.xmag / 2,i.ymag / 2,i.ymag / -2,i.znear,i.zfar)), + t.name && (e.name = t.name), + V(e, t), + Promise.resolve(e); + console.warn("THREE.GLTFLoader: Missing camera parameters.") + } + , + q.prototype.loadSkin = function(A) { + var e = this.json.skins[A] + , t = { + joints: e.joints + }; + return void 0 === e.inverseBindMatrices ? Promise.resolve(t) : this.getDependency("accessor", e.inverseBindMatrices).then((function(A) { + return t.inverseBindMatrices = A, + t + } + )) + } + , + q.prototype.loadAnimation = function(A) { + for (var e = this.json.animations[A], t = [], i = [], o = [], n = [], r = [], a = 0, s = e.channels.length; s > a; a++) { + var l = e.channels[a] + , c = e.samplers[l.sampler] + , h = l.target + , d = void 0 !== e.parameters ? e.parameters[c.input] : c.input + , p = void 0 !== e.parameters ? e.parameters[c.output] : c.output; + t.push(this.getDependency("node", void 0 !== h.node ? h.node : h.id)), + i.push(this.getDependency("accessor", d)), + o.push(this.getDependency("accessor", p)), + n.push(c), + r.push(h) + } + return Promise.all([Promise.all(t), Promise.all(i), Promise.all(o), Promise.all(n), Promise.all(r)]).then((function(t) { + for (var i = t[0], o = t[1], n = t[2], r = t[3], a = t[4], s = [], l = 0, c = i.length; c > l; l++) { + var h = i[l] + , d = o[l] + , p = n[l] + , g = r[l] + , u = a[l]; + if (void 0 !== h) { + var f; + switch (h.updateMatrix(), + h.matrixAutoUpdate = !0, + Q[u.path]) { + case Q.weights: + f = Dr; + break; + case Q.rotation: + f = Nr; + break; + case Q.position: + case Q.scale: + default: + f = Vr + } + var C = h.name ? h.name : h.uuid + , y = void 0 !== g.interpolation ? R[g.interpolation] : 2301 + , v = []; + Q[u.path] === Q.weights ? h.traverse((function(A) { + !0 === A.isMesh && A.morphTargetInfluences && v.push(A.name ? A.name : A.uuid) + } + )) : v.push(C); + var I = p.array; + if (p.normalized) { + var E; + if (I.constructor === Int8Array) + E = 1 / 127; + else if (I.constructor === Uint8Array) + E = 1 / 255; + else if (I.constructor == Int16Array) + E = 1 / 32767; + else { + if (I.constructor !== Uint16Array) + throw new Error("THREE.GLTFLoader: Unsupported output accessor component type."); + E = 1 / 65535 + } + for (var B = new Float32Array(I.length), x = 0, S = I.length; S > x; x++) + B[x] = I[x] * E; + I = B + } + for (x = 0, + S = v.length; S > x; x++) { + var w = new f(v[x] + "." + Q[u.path],d.array,I,y); + "CUBICSPLINE" === g.interpolation && (w.createInterpolant = function(A) { + return new m(this.times,this.values,this.getValueSize() / 3,A) + } + , + w.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline = !0), + s.push(w) + } + } + } + return new Gr(e.name ? e.name : "animation_" + A,void 0,s) + } + )) + } + , + q.prototype.loadNode = function(A) { + var e, i = this.json, o = this.extensions, n = this, r = i.meshReferences, a = i.meshUses, s = i.nodes[A]; + return (e = [], + void 0 !== s.mesh && e.push(n.getDependency("mesh", s.mesh).then((function(A) { + var e; + if (r[s.mesh] > 1) { + var t = a[s.mesh]++; + (e = A.clone()).name += "_instance_" + t + } else + e = A; + return void 0 !== s.weights && e.traverse((function(A) { + if (A.isMesh) + for (var e = 0, t = s.weights.length; t > e; e++) + A.morphTargetInfluences[e] = s.weights[e] + } + )), + e + } + ))), + void 0 !== s.camera && e.push(n.getDependency("camera", s.camera)), + s.extensions && s.extensions[t.KHR_LIGHTS_PUNCTUAL] && void 0 !== s.extensions[t.KHR_LIGHTS_PUNCTUAL].light && e.push(n.getDependency("light", s.extensions[t.KHR_LIGHTS_PUNCTUAL].light)), + Promise.all(e)).then((function(A) { + var e; + if ((e = !0 === s.isBone ? new Uo : A.length > 1 ? new Xi : 1 === A.length ? A[0] : new H) !== A[0]) + for (var t = 0, i = A.length; i > t; t++) + e.add(A[t]); + if (s.name && (e.userData.name = s.name, + e.name = Fs.sanitizeNodeName(s.name)), + V(e, s), + s.extensions && O(o, e, s), + void 0 !== s.matrix) { + var n = new M; + n.fromArray(s.matrix), + e.applyMatrix4(n) + } else + void 0 !== s.translation && e.position.fromArray(s.translation), + void 0 !== s.rotation && e.quaternion.fromArray(s.rotation), + void 0 !== s.scale && e.scale.fromArray(s.scale); + return e + } + )) + } + , + q.prototype.loadScene = function() { + function A(e, t, i, o) { + var n = i.nodes[e]; + return o.getDependency("node", e).then((function(A) { + return void 0 === n.skin ? A : o.getDependency("skin", n.skin).then((function(A) { + for (var t = [], i = 0, n = (e = A).joints.length; n > i; i++) + t.push(o.getDependency("node", e.joints[i])); + return Promise.all(t) + } + )).then((function(t) { + return A.traverse((function(A) { + if (A.isMesh) { + for (var i = [], o = [], n = 0, r = t.length; r > n; n++) { + var a = t[n]; + if (a) { + i.push(a); + var s = new M; + void 0 !== e.inverseBindMatrices && s.fromArray(e.inverseBindMatrices.array, 16 * n), + o.push(s) + } else + console.warn('THREE.GLTFLoader: Joint "%s" could not be found.', e.joints[n]) + } + A.bind(new bo(i,o), A.matrixWorld) + } + } + )), + A + } + )); + var e + } + )).then((function(e) { + t.add(e); + var r = []; + if (n.children) + for (var a = n.children, s = 0, l = a.length; l > s; s++) { + r.push(A(a[s], e, i, o)) + } + return Promise.all(r) + } + )) + } + return function(e) { + var t = this.json + , i = this.extensions + , o = this.json.scenes[e] + , n = new Xi; + o.name && (n.name = o.name), + V(n, o), + o.extensions && O(i, n, o); + for (var r = o.nodes || [], a = [], s = 0, l = r.length; l > s; s++) + a.push(A(r[s], n, t, this)); + return Promise.all(a).then((function() { + return n + } + )) + } + }(), + A + }() + , VC = "REPLACE" + , GC = function A(e, t, i, o) { + H.call(this); + if (this.isRoot = o || !1, + o || (this.matrix = kC.getTransfrom(i.transform)), + this.refine = i.refine || VC, + this.geometricError = i.geometricError || 0, + this.boundingBox = kC.getBoxFromTileBoundingVolumeBox(i.boundingVolume.box), + this.scene = null, + this.model = e, + this.json = i, + this.level = t && t.level + 1 || 0, + this.matrixAutoUpdate = !1, + this.hasB3DM = !1, + i.content && (i.content.url.endsWith("json") ? this.loadContent(i.content.url) : i.content.url.endsWith("b3dm") && (this.hasB3DM = !0, + this.model.tilesList[i.content.url] = this, + t && t.hasB3DM || (this.firstB3DM = !0, + this.loadB3DM(i.content.url)))), + i.children) + for (var n = 0, r = i.children.length; r > n; n += 1) + this.add(new A(e,this,i.children[n])) + }; + (GC.prototype = Object.create(H.prototype)).loadContent = function(A) { + var e = this + , t = e.model + , i = t.dataUrl.tilesUrl(A); + function o() { + var A = t.fileLoader; + A.setResponseType("json"), + A.setCacheViable(!0), + A.setRequestHeader({ + Authorization: t.accessToken + }), + A.load(i, (function(A) { + var i = {}; + if ("string" == typeof A) + try { + i = JSON.parse(A) + } catch (A) { + return void t.dispatchEventEx({ + type: Rc.ON_LOAD_INVALID_DATA, + modelKey: t.modelKey + }) + } + else + i = A; + e.add(new GC(t,parent,i.root,parent.level + 1,!0)) + } + ), (function(A, e) { + switch (A) { + case 401: + t.dispatchEventEx({ + type: Rc.ACCOUNT_NO_EXIST, + modelKey: t.modelKey, + data: e + }); + break; + case 403: + t.dispatchEventEx({ + type: Rc.NO_PERMISSION, + modelKey: t.modelKey, + data: e + }); + break; + default: + t.dispatchEventEx({ + type: Rc.ON_NETWORK_ERROR, + modelKey: t.modelKey, + data: A + }) + } + } + )) + } + if (vc.getDataFromIndexedDB) { + var n = t.getStorage(); + n && n.get(i, (function(A) { + if (A) { + var i = {}; + if ("string" == typeof A) + try { + i = JSON.parse(A) + } catch (A) { + return void t.dispatchEventEx({ + type: Rc.ON_LOAD_INVALID_DATA, + modelKey: t.modelKey + }) + } + else + i = A; + e.add(new GC(t,parent,i.root,!0)) + } else + o() + } + ), (function() { + o() + } + )) + } else + o() + } + , + GC.prototype.loadB3DM = function(A) { + var e = this + , t = e.model; + e.loaderManager = new wu, + e.loaderManager.model = t; + var i = new OC(e.loaderManager); + function o(A) { + e.scene = A, + e.loading = !1, + e.loaded = !0, + e.add(A.scene), + t.tileLoadFinish() + } + e.loading = !0; + var n = t.dataUrl.b3dmUrl(A || e.json.content.url); + if (vc.getDataFromIndexedDB) { + var r = t.getStorage(); + r && r.get(n, (function(t) { + t ? i.parse(t, A || e.json.content.url, o) : i.load(n, o) + } + ), (function() { + i.load(n, o) + } + )) + } else + i.load(n, o) + } + ; + var PC = function(A, e, t, i) { + TC.call(this, A, e, t, i), + this.configLoader = new DC(this), + this.tilesList = {}, + this.isTilesModel = !0 + }; + (PC.prototype = Object.create(TC.prototype)).load = function(A) { + var e = this; + this.configLoader.load((function() { + e.parseCfgFinish && e.parseCfgFinish(), + e.manager.updateScene(), + e.group.add(new GC(e,null,e.configLoader.config.root,!0)), + e.loaded = !0 + } + )) + } + , + PC.prototype.tileLoadStart = function() {} + , + PC.prototype.tileLoadFinish = function() { + this.group.updateMatrixWorld(!0, !0), + this.manager.viewerImpl.render() + } + , + PC.prototype.tileUnloadStart = function() {} + , + PC.prototype.tileUnloadFinish = function() {} + , + PC.prototype.checkTilesDataChanged = function(A) { + for (var e in Bh.time("checkTilesDataChanged"), + this.tilesList) + if (this.tilesList.hasOwnProperty(e)) { + var t = this.tilesList[e]; + this.tilesNeedLoad(t.boundingBox.getCenter((new y).applyMatrix4(t.parent.matrixWorld).applyMatrix4(t.matrix)), t.boundingBox.getSize(new y).length()) || t.firstB3DM ? t.scene || t.loading ? t.visible = !0 : t.loadB3DM() : A ? (t.remove(t.scene), + t.scene = null) : t.visible = !1 + } + Bh.timeEnd("checkTilesDataChanged") + } + , + PC.prototype.tilesNeedLoad = function(A, e) { + var t, i = this.manager.cameraFov; + return t = (e || 0) * this.manager.domElementWidth / (2 * this.manager.cameraPosition.clone().sub(A).length() * Math.tan(i / 2)), + Bh.debug("几何误差:", t), + t > vc.geometricErrorThresholdValue + } + ; + var qC = function() { + this.size = 0, + this.counter = 0, + this.expansion = 1, + this._pool = null + }; + qC.prototype.init = function(A, e) { + this.classType = A, + this._pool = [], + this._expand(e) + } + , + qC.prototype._expand = function(A) { + this.size += A; + for (var e = 0; A > e; e += 1) + this._pool.push(new this.classType) + } + , + qC.prototype.acquire = function() { + return this.size > this.counter || (this.expansion = Math.round(1.2 * this.expansion) + 1, + this._expand(this.expansion)), + this._pool[this.counter++] + } + , + qC.prototype.clear = function() { + this.counter = 0 + } + , + qC.prototype.destroy = function() { + for (var A = 0, e = this.size; e > A; A += 1) + this._pool[A].destroy(); + this.counter = 0, + this.size = 0, + this.expansion = 1, + this._pool = null + } + , + qC.prototype.getObjects = function() { + return this._pool + } + ; + var jC = function(A) { + Pe.call(this), + this.type = "PhoneLightingMaterial", + this.color = new LA(16777215), + this.specular = new LA(1118481), + this.shininess = 30, + this.emissive = new LA(0), + this.map = null, + this.shadowMapEnabled = !1, + this.defines = {}, + this.uniforms = Ge.merge([Xe.common, Xe.lights, { + diffuse: { + value: new LA(16711680) + }, + opacity: { + value: 1 + }, + specular: { + value: new LA(1118481) + }, + shininess: { + value: 30 + }, + emissive: { + value: new LA(0) + } + }]), + this.vertexShader = ["varying vec3 vViewPosition;", "varying vec3 vNormal;", "#include ", "void main() {", " #include ", " #include ", " #include ", " #include ", " #include ", " vNormal = normalize( transformedNormal );", " vViewPosition = - mvPosition.xyz;", "}"].join("\n"), + this.fragmentShader = ["uniform vec3 diffuse;", "uniform float opacity;", "uniform vec3 specular;", "uniform float shininess;", "uniform vec3 emissive;", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "void main() {", " vec4 diffuseColor = vec4( diffuse, opacity );", "#ifdef USE_MAP", " vec4 texelColor = texture2D( map, vUv );", " texelColor = mapTexelToLinear( texelColor );", " diffuseColor = vec4(texelColor.rgb, opacity);", "#endif", " ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );", " vec3 totalEmissiveRadiance = emissive;", " float specularStrength = 1.0;", " #include ", " #include ", " gl_FragColor = linearToOutputTexel( diffuseColor );", "}"].join("\n"), + this.lights = !1, + this.defaultAttributeValues = { + color: [1, 1, 1], + uv: [0, 0], + uv2: [0, 0] + }, + void 0 !== A && (void 0 !== A.attributes && console.error("PhoneLightingMaterial: attributes should now be defined in THREE.BufferGeometry instead."), + this.setValues(A)), + this.refreshUniforms() + }; + (jC.prototype = Object.create(Pe.prototype)).constructor = jC, + jC.prototype.isShaderMaterial = !0, + jC.prototype.copy = function(A) { + return Pe.prototype.copy.call(this, A), + this.color.copy(A.color), + this.specular.copy(A.specular), + this.shininess = A.shininess, + this.emissive.copy(A.emissive), + this + } + , + jC.prototype.refreshUniforms = function() { + this.uniforms.diffuse.value.set(this.color), + this.uniforms.opacity.value = this.opacity, + this.uniforms.specular.value.set(this.specular), + this.uniforms.shininess.value = this.shininess, + this.uniforms.emissive.value.set(this.emissive), + this.uniforms.map.value = this.map + } + ; + var HC = function(A, e) { + ep.call(this, gp.CLIPPLANE, { + priority: 20 + }); + var t = []; + t.push("clipPlane_right"), + t.push("clipPlane_left"), + t.push("clipPlane_back"), + t.push("clipPlane_front"), + t.push("clipPlane_top"), + t.push("clipPlane_bottom"), + this.cubeSize = A.clone(), + this.center = e.clone(), + this.visible = !1, + this.rotatable = !1, + this.selectIndex = null, + this.planeOffset = new Array(6), + this.planeRotate = [0, 0, 0], + this.observer = null, + this.uniforms = { + iClipPlane: { + type: "i", + value: 0 + }, + vClipPlane: { + type: "v4v", + value: [new p, new p, new p, new p, new p, new p] + } + }, + this.clipplanes = null, + this.calculation = !0, + this.boundingBox = new aA, + this.calculateClipBoundingBox = function(A) { + this.boundingBox.makeEmpty(); + for (var e = new y, t = 0; A.length > t; t += 1) { + var i = A[t].coplanarPoint(e); + 0 !== i.x && (i.x > this.boundingBox.max.x ? this.boundingBox.max.x = i.x : this.boundingBox.min.x > i.x && (this.boundingBox.min.x = i.x)), + 0 !== i.y && (i.y > this.boundingBox.max.y ? this.boundingBox.max.y = i.y : this.boundingBox.min.y > i.y && (this.boundingBox.min.y = i.y)), + 0 !== i.z && (i.z > this.boundingBox.max.z ? this.boundingBox.max.z = i.z : this.boundingBox.min.z > i.z && (this.boundingBox.min.z = i.z)) + } + } + , + this.getClipBoundingBox = function() { + return this.boundingBox + } + , + this.isVisible = function() { + return this.visible + } + , + this.getPlaneNormal = function(A) { + var e = new p + , t = Math.floor(A / 2); + return e.setComponent(t, Math.pow(-1, A % 2)), + e.w = .5 * -this.cubeSize.getComponent(t), + this.planeOffset[A] = 0, + e + } + , + this.planeMaterial = new jC({ + color: 8158334, + opacity: .3, + transparent: !0, + side: 0, + lights: !1 + }), + this.planeHighLightMatrial = new jC({ + color: 255, + opacity: .3, + transparent: !0, + side: 0, + lights: !1 + }), + this.initPlaneModel = function(A) { + var e = Math.floor(A / 2) + , i = A % 2 + , o = new Ue(new et(0 === e ? this.cubeSize.z : this.cubeSize.x,1 === e ? this.cubeSize.z : this.cubeSize.y),this.planeMaterial); + switch (o.name = t[A], + o.customTag = !0, + o.position.setComponent(e, Math.pow(-1, i) * this.cubeSize.getComponent(e) * .5), + A) { + case 0: + o.rotation.y = .5 * Math.PI; + break; + case 1: + o.rotation.y = .5 * -Math.PI; + break; + case 2: + o.rotation.x = .5 * -Math.PI; + break; + case 3: + o.rotation.x = .5 * Math.PI; + break; + case 4: + break; + case 5: + o.rotation.x = Math.PI + } + o.renderOrder = 90, + this.add(o) + } + , + this.initCapsBox = function() { + if (this.boxMesh) + return this.boxMesh; + var A = new Ne(this.cubeSize.x,this.cubeSize.y,this.cubeSize.z); + A.groups = null; + var e = new Ue(A,new jC({ + color: 16776960, + side: 2, + stencilWrite: !0, + stencilFunc: 515, + stencilRef: 1, + stencilFuncMask: 255, + stencilFail: 7680, + stencilZFail: 7680, + stencilZPass: 7680 + })); + return e.matrixWorld = this.matrixWorld, + e.matrix = this.matrix, + e.name = "capsBox", + this.boxMesh = e, + e + } + , + this.initWireframes = function() { + var A = [.5 * -this.cubeSize.x, .5 * -this.cubeSize.y, .5 * -this.cubeSize.z, .5 * this.cubeSize.x, .5 * -this.cubeSize.y, .5 * -this.cubeSize.z, .5 * this.cubeSize.x, .5 * this.cubeSize.y, .5 * -this.cubeSize.z, .5 * -this.cubeSize.x, .5 * this.cubeSize.y, .5 * -this.cubeSize.z, .5 * -this.cubeSize.x, .5 * -this.cubeSize.y, .5 * this.cubeSize.z, .5 * this.cubeSize.x, .5 * -this.cubeSize.y, .5 * this.cubeSize.z, .5 * this.cubeSize.x, .5 * this.cubeSize.y, .5 * this.cubeSize.z, .5 * -this.cubeSize.x, .5 * this.cubeSize.y, .5 * this.cubeSize.z] + , e = new he + , t = new jC({ + color: 0, + lights: !0 + }); + e.setIndex([0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 3, 7, 1, 5, 2, 6]), + e.setAttribute("position", new Ae(A,3)), + e.setAttribute("color", new Ae([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],3)), + e.computeBoundingSphere(); + var i = new jo(e,t); + i.name = "Wireframes", + i.customTag = !0, + this.add(i) + } + , + this.updateClippingParams = function(A) {} + , + this.enable = function(A, e) { + this.visible = e, + this.uniforms.iClipPlane.value = A ? 6 : 0, + this.updateClippingParams(this.uniforms), + this.boxMesh && (this.boxMesh.visible = e) + } + , + this.isEnabled = function() { + return 0 !== this.uniforms.iClipPlane.value + } + ; + var i = function(A, e, t, i, o, n, r, a, s, l, c, h) { + this.enable = A, + this.visible = e, + this.rotatable = t, + this.calculation = i, + this.planeOffset = o.slice(0), + this.planeRotate = n.slice(0), + this.position = r, + this.scale = a, + this.quaternion = s, + this.cubeSize = l, + this.center = c, + this.boundingBox = h + }; + this.store = function() { + return new i(!!this.uniforms.iClipPlane.value,this.visible,this.rotatable,this.calculation,this.planeOffset,this.planeRotate,this.position.clone(),this.scale.clone(),this.quaternion.clone(),this.cubeSize.clone(),this.center.clone(),this.boundingBox.clone()) + } + , + this.restore = function(A) { + this.calculation = !0, + this.calculationPlanes(A.cubeSize, A.center), + this.enable(A.enable, A.visible), + this.rotatable = A.rotatable, + this.calculation = A.calculation; + for (var e = 0; 6 > e; e += 1) + this.planeOffset[e] = A.planeOffset[e]; + for (var t = 0; 3 > t; t += 1) + this.planeRotate[t] = A.planeRotate[t]; + this.position.copy(A.position), + this.scale.copy(A.scale), + this.quaternion._w = A.quaternion._w, + this.quaternion._x = A.quaternion._x, + this.quaternion._y = A.quaternion._y, + this.quaternion._z = A.quaternion._z, + this.update() + } + , + this.reset = function() { + this.calculation = !0; + for (var A = 0; 6 > A; A += 1) + this.planeOffset[A] = 0; + for (A = 0; 3 > A; A += 1) + this.planeRotate[A] = 0; + this.position.copy(this.center), + this.scale.copy(new y(1,1,1)), + this.quaternion.copy(new f), + this.update() + } + , + this.calculationPlanes = function(A, e, t) { + if (this.calculation || t) { + this.cubeSize.copy(A), + this.center.copy(e); + for (var i = this.children.length - 1; i >= 0; i -= 1) + this.remove(this.children[i]); + for (i = 0; 6 > i; i += 1) + this.uniforms.vClipPlane.value[i] = this.getPlaneNormal(i), + this.initPlaneModel(i); + this.initWireframes(), + this.clipplanes = this.uniforms.vClipPlane.value.slice(0), + this.reset() + } + } + , + this.update = function() { + this.updateMatrixWorld(); + var A = new M; + A.getInverse(this.matrix), + A.transpose(); + for (var e = 0; 6 > e; e += 1) + this.uniforms.vClipPlane.value[e] = this.clipplanes[e].clone().applyMatrix4(A); + this.updateClippingParams(this.uniforms), + this.observer && this.observer() + } + , + this.offset = function(A, e) { + this.calculation = !1; + var t = Math.floor(A / 2); + this.cubeSize.getComponent(t); + A % 2 == 0 && this.planeOffset[A] + e > 0 && (e = -this.planeOffset[A]), + A % 2 == 1 && 0 > this.planeOffset[A] + e && (e = -this.planeOffset[A]), + this.planeOffset[A] += e; + for (var i = new y, o = 0; 6 > o; o += 1) { + var n = this.clipplanes[o].clone() + , r = this.planeOffset[o] + , a = new y(n.x * r,n.y * r,n.z * r); + i.add(a) + } + var s = 1 + i.getComponent(t) / this.cubeSize.getComponent(t); + if ((s = 0 === s ? 1e-5 : s) > 0) { + this.scale.setComponent(t, s); + var l = this.uniforms.vClipPlane.value[A].clone() + , c = new y(l.x,l.y,l.z); + c.normalize(); + var h = new y(c.x * (a = e),c.y * a,c.z * a); + A % 2 == 1 ? this.position.sub(h.multiplyScalar(.5)) : this.position.add(h.multiplyScalar(.5)), + this.update() + } else + this.planeOffset[A] -= e + } + ; + var o = new f + , n = new y(1,0,0); + this.rotX = function(A) { + this.calculation = !1, + o.setFromAxisAngle(n, A), + this.quaternion.multiply(o), + this.update() + } + ; + var r = new y(0,1,0); + this.rotY = function(A) { + this.calculation = !1, + o.setFromAxisAngle(r, A), + this.quaternion.multiply(o), + this.update() + } + , + this.setSectionBox = function(A, e) { + this.calculation = !0; + var t = new y(e.x - A.x,e.y - A.y,e.z - A.z) + , i = new y(.5 * (A.x + e.x),.5 * (A.y + e.y),.5 * (A.z + e.z)); + this.calculationPlanes(t, i) + } + , + this.calculateOffsetByBox = function(A, e) { + var t = e.x - this.center.x - .5 * this.cubeSize.x; + this.planeOffset[0] > t ? (this.moveSectionPlane("left", this.center.x - .5 * this.cubeSize.x - A.x), + this.moveSectionPlane("right", t)) : (this.moveSectionPlane("right", t), + this.moveSectionPlane("left", this.center.x - .5 * this.cubeSize.x - A.x)); + var i = e.y - this.center.y - .5 * this.cubeSize.y; + this.planeOffset[2] > i ? (this.moveSectionPlane("bottom", this.center.y - .5 * this.cubeSize.y - A.y), + this.moveSectionPlane("top", i)) : (this.moveSectionPlane("top", i), + this.moveSectionPlane("bottom", this.center.y - .5 * this.cubeSize.y - A.y)); + var o = e.z - this.center.z - .5 * this.cubeSize.z; + this.planeOffset[4] > o ? (this.moveSectionPlane("back", this.center.z - .5 * this.cubeSize.z - A.z), + this.moveSectionPlane("front", o)) : (this.moveSectionPlane("front", o), + this.moveSectionPlane("back", this.center.z - .5 * this.cubeSize.z - A.z)) + } + , + this.getPlaneIndexByName = function(A) { + var e = -1; + return "right" === A ? e = 0 : "left" === A ? e = 1 : "top" === A ? e = 2 : "bottom" === A ? e = 3 : "front" === A ? e = 4 : "back" === A && (e = 5), + e + } + , + this.moveSectionPlane = function(A, e) { + var t = this.getPlaneIndexByName(A); + -1 !== t && (t % 2 != 0 && (e = -e), + this.offset(t, e - this.planeOffset[t])) + } + , + this.recalculate = function() { + return this.filter.getVisibleComponentsBbox() + } + , + this.setProcess = function(A, e) { + var t = this.getPlaneIndexByName(A) + , i = 0; + (2 > t ? i = this.cubeSize.x : 4 > t ? i = this.cubeSize.y : 6 > t && (i = this.cubeSize.z), + e > 1 ? e = 1 : 0 > e && (e = 0), + -1 !== t) && (t % 2 != 1 && (e = -e), + this.offset(t, e * i - this.planeOffset[t])) + } + , + this.getProcess = function(A) { + var e = this.getPlaneIndexByName(A); + -1 === e && console.log("faceName is illegal"); + var t = 0; + 2 > e ? t = this.cubeSize.x : 4 > e ? t = this.cubeSize.y : 6 > e && (t = this.cubeSize.z); + var i = 1; + e % 2 != 1 && (i = -1); + var o = i * this.planeOffset[e] / t; + return o > 1 ? o = 1 : 0 > o && (o = 0), + o + } + ; + var a = new y(0,0,1); + this.rotateSectionBox = function(A, e) { + "x" === A ? this.planeRotate[0] = e : "y" === A ? this.planeRotate[1] = e : "z" === A && (this.planeRotate[2] = e), + this.calculation = !0; + var t = new f; + t.setFromAxisAngle(n, this.planeRotate[0]); + var i = new f; + i.setFromAxisAngle(r, this.planeRotate[1]); + var o = new f; + o.setFromAxisAngle(a, this.planeRotate[2]); + var s = new f; + s.multiply(t), + s.multiply(i), + s.multiply(o), + this.quaternion.copy(s), + this.update() + } + , + this.highLight = function() { + null !== this.selectIndex && (this.children[this.selectIndex].material = this.planeHighLightMatrial) + } + , + this.cancelHighLight = function() { + null !== this.selectIndex && (this.children[this.selectIndex].material = this.planeMaterial, + this.selectIndex = null) + } + }; + (HC.prototype = Object.create(ep.prototype)).constructor = HC, + HC.prototype.init = function() { + this.calculationPlanes(this.cubeSize, this.center) + } + , + HC.prototype.hitTest = function(A) { + var e = null + , t = null; + if (this.raycast(A), + null !== this.selectIndex) { + var i = A.ray + , o = new EA + , n = this.uniforms.vClipPlane.value[this.selectIndex]; + o.setComponents(n.x, n.y, n.z, n.w), + e = i.distanceToPlane(o), + t = 0 > i.direction.dot(o.normal) + } + return { + sign: t, + distance: e + } + } + , + HC.prototype.raycast = function(A) { + if (this.visible) { + var e = [] + , t = null; + this.selectIndex = null; + for (var i = 0; 6 > i; i += 1) + if (this.children[i].raycast(A, e), + e.length > 0) { + var o = e.pop(); + t && o.distance >= t.distance || (t = o, + this.selectIndex = i), + e = [] + } + } + } + , + Xe.line = { + linewidth: { + value: 1 + }, + resolution: { + value: new s(1,1) + }, + dashScale: { + value: 1 + }, + dashSize: { + value: 1 + }, + dashOffset: { + value: 0 + }, + gapSize: { + value: 1 + }, + opacity: { + value: 1 + } + }, + it.line = { + uniforms: Ge.merge([Xe.common, Xe.fog, Xe.line]), + vertexShader: "\n #include \n #include \n #include \n #include \n #include \n\n uniform float linewidth;\n uniform vec2 resolution;\n\n attribute vec3 instanceStart;\n attribute vec3 instanceEnd;\n\n attribute vec3 instanceColorStart;\n attribute vec3 instanceColorEnd;\n\n varying vec2 vUv;\n\n #ifdef USE_DASH\n\n uniform float dashScale;\n attribute float instanceDistanceStart;\n attribute float instanceDistanceEnd;\n varying float vLineDistance;\n\n #endif\n\n void trimSegment( const in vec4 start, inout vec4 end ) {\n\n // trim end segment so it terminates between the camera plane and the near plane\n\n // conservative estimate of the near plane\n float a = projectionMatrix[ 2 ][ 2 ]; // 3nd entry in 3th column\n float b = projectionMatrix[ 3 ][ 2 ]; // 3nd entry in 4th column\n float nearEstimate = - 0.5 * b / a;\n\n float alpha = ( nearEstimate - start.z ) / ( end.z - start.z );\n\n end.xyz = mix( start.xyz, end.xyz, alpha );\n\n }\n\n void main() {\n\n #ifdef USE_COLOR\n\n vColor.xyz = ( position.y < 0.5 ) ? instanceColorStart : instanceColorEnd;\n\n #endif\n\n #ifdef USE_DASH\n\n vLineDistance = ( position.y < 0.5 ) ? dashScale * instanceDistanceStart : dashScale * instanceDistanceEnd;\n\n #endif\n\n float aspect = resolution.x / resolution.y;\n\n vUv = uv;\n\n // camera space\n vec4 start = modelViewMatrix * vec4( instanceStart, 1.0 );\n vec4 end = modelViewMatrix * vec4( instanceEnd, 1.0 );\n\n // special case for perspective projection, and segments that terminate either in, or behind, the camera plane\n // clearly the gpu firmware has a way of addressing this issue when projecting into ndc space\n // but we need to perform ndc-space calculations in the shader, so we must address this issue directly\n // perhaps there is a more elegant solution -- WestLangley\n\n bool perspective = ( projectionMatrix[ 2 ][ 3 ] == - 1.0 ); // 4th entry in the 3rd column\n\n if ( perspective ) {\n\n if ( start.z < 0.0 && end.z >= 0.0 ) {\n\n trimSegment( start, end );\n\n } else if ( end.z < 0.0 && start.z >= 0.0 ) {\n\n trimSegment( end, start );\n\n }\n\n }\n\n // clip space\n vec4 clipStart = projectionMatrix * start;\n vec4 clipEnd = projectionMatrix * end;\n\n // ndc space\n vec2 ndcStart = clipStart.xy / clipStart.w;\n vec2 ndcEnd = clipEnd.xy / clipEnd.w;\n\n // direction\n vec2 dir = ndcEnd - ndcStart;\n\n // account for clip-space aspect ratio\n dir.x *= aspect;\n dir = normalize( dir );\n\n // perpendicular to dir\n vec2 offset = vec2( dir.y, - dir.x );\n\n // undo aspect ratio adjustment\n dir.x /= aspect;\n offset.x /= aspect;\n\n // sign flip\n if ( position.x < 0.0 ) offset *= - 1.0;\n\n // endcaps\n if ( position.y < 0.0 ) {\n\n offset += - dir;\n\n } else if ( position.y > 1.0 ) {\n\n offset += dir;\n\n }\n\n // adjust for linewidth\n offset *= linewidth;\n\n // adjust for clip-space to screen-space conversion // maybe resolution should be based on viewport ...\n offset /= resolution.y;\n\n // select end\n vec4 clip = ( position.y < 0.5 ) ? clipStart : clipEnd;\n\n // back to clip space\n offset *= clip.w;\n\n clip.xy += offset;\n\n gl_Position = clip;\n\n vec4 mvPosition = ( position.y < 0.5 ) ? start : end; // this is an approximation\n\n #include \n #include \n #include \n\n }\n ", + fragmentShader: "\n uniform vec3 diffuse;\n uniform float opacity;\n\n #ifdef USE_DASH\n\n uniform float dashSize;\n uniform float dashOffset;\n uniform float gapSize;\n\n #endif\n\n varying float vLineDistance;\n\n #include \n #include \n #include \n #include \n #include \n\n varying vec2 vUv;\n\n void main() {\n\n #include \n\n #ifdef USE_DASH\n\n if ( vUv.y < - 1.0 || vUv.y > 1.0 ) discard; // discard endcaps\n\n if ( mod( vLineDistance + dashOffset, dashSize + gapSize ) > dashSize ) discard; // todo - FIX\n\n #endif\n\n if ( abs( vUv.y ) > 1.0 ) {\n\n float a = vUv.x;\n float b = ( vUv.y > 0.0 ) ? vUv.y - 1.0 : vUv.y + 1.0;\n float len2 = a * a + b * b;\n\n if ( len2 > 1.0 ) discard;\n\n }\n\n vec4 diffuseColor = vec4( diffuse, opacity );\n\n #include \n #include \n\n gl_FragColor = vec4( diffuseColor.rgb, diffuseColor.a );\n\n #include \n #include \n #include \n #include \n\n }\n " + }; + var YC = function(A) { + Pe.call(this, { + type: "LineMaterial", + uniforms: Ge.clone(it.line.uniforms), + vertexShader: it.line.vertexShader, + fragmentShader: it.line.fragmentShader, + clipping: !0 + }), + this.dashed = !1, + Object.defineProperties(this, { + color: { + enumerable: !0, + get: function() { + return this.uniforms.diffuse.value + }, + set: function(A) { + this.uniforms.diffuse.value = A + } + }, + linewidth: { + enumerable: !0, + get: function() { + return this.uniforms.linewidth.value + }, + set: function(A) { + this.uniforms.linewidth.value = A + } + }, + dashScale: { + enumerable: !0, + get: function() { + return this.uniforms.dashScale.value + }, + set: function(A) { + this.uniforms.dashScale.value = A + } + }, + dashSize: { + enumerable: !0, + get: function() { + return this.uniforms.dashSize.value + }, + set: function(A) { + this.uniforms.dashSize.value = A + } + }, + dashOffset: { + enumerable: !0, + get: function() { + return this.uniforms.dashOffset.value + }, + set: function(A) { + this.uniforms.dashOffset.value = A + } + }, + gapSize: { + enumerable: !0, + get: function() { + return this.uniforms.gapSize.value + }, + set: function(A) { + this.uniforms.gapSize.value = A + } + }, + resolution: { + enumerable: !0, + get: function() { + return this.uniforms.resolution.value + }, + set: function(A) { + this.uniforms.resolution.value.copy(A) + } + }, + opacity: { + enumerable: !0, + get: function() { + return this.uniforms.opacity.value + }, + set: function(A) { + this.uniforms.opacity.value = A + } + } + }), + this.setValues(A) + }; + (YC.prototype = Object.create(Pe.prototype)).constructor = YC, + YC.prototype.isLineMaterial = !0; + var WC, JC = function() { + Na.call(this), + this.type = "LineSegmentsGeometry"; + this.setIndex([0, 2, 1, 2, 3, 1, 2, 4, 3, 4, 5, 3, 4, 6, 5, 6, 7, 5]), + this.setAttribute("position", new Ae([-1, 2, 0, 1, 2, 0, -1, 1, 0, 1, 1, 0, -1, 0, 0, 1, 0, 0, -1, -1, 0, 1, -1, 0],3)), + this.setAttribute("uv", new Ae([-1, 2, 1, 2, -1, 1, 1, 1, -1, -1, 1, -1, -1, -2, 1, -2],2)) + }; + JC.prototype = Object.assign(Object.create(Na.prototype), { + constructor: JC, + isLineSegmentsGeometry: !0, + applyMatrix4: function(A) { + var e = this.attributes.instanceStart + , t = this.attributes.instanceEnd; + return void 0 !== e && (e.applyMatrix4(A), + t.applyMatrix4(A), + e.needsUpdate = !0), + null !== this.boundingBox && this.computeBoundingBox(), + null !== this.boundingSphere && this.computeBoundingSphere(), + this + }, + setPositions: function(A) { + var e = null; + A instanceof Float32Array ? e = A : Array.isArray(A) && (e = new Float32Array(A)); + var t = new ks(e,6,1); + return this.setAttribute("instanceStart", new no(t,3,0)), + this.setAttribute("instanceEnd", new no(t,3,3)), + this.computeBoundingBox(), + this.computeBoundingSphere(), + this + }, + setColors: function(A) { + var e = null; + A instanceof Float32Array ? e = A : Array.isArray(A) && (e = new Float32Array(A)); + var t = new ks(e,6,1); + return this.setAttribute("instanceColorStart", new no(t,3,0)), + this.setAttribute("instanceColorEnd", new no(t,3,3)), + this + }, + fromWireframeGeometry: function(A) { + return this.setPositions(A.attributes.position.array), + this + }, + fromEdgesGeometry: function(A) { + return this.setPositions(A.attributes.position.array), + this + }, + fromMesh: function(A) { + return this.fromWireframeGeometry(new on(A.geometry)), + this + }, + fromLineSegements: function(A) { + var e = A.geometry; + return e.isGeometry ? this.setPositions(e.vertices) : e.isBufferGeometry && this.setPositions(e.attributes.position.array), + this + }, + computeBoundingBox: function() { + var A = new aA; + return function() { + null === this.boundingBox && (this.boundingBox = new aA); + var e = this.attributes.instanceStart + , t = this.attributes.instanceEnd; + void 0 !== e && void 0 !== t && (this.boundingBox.setFromBufferAttribute(e), + A.setFromBufferAttribute(t), + this.boundingBox.union(A)) + } + }(), + computeBoundingSphere: (WC = new y, + function() { + null === this.boundingSphere && (this.boundingSphere = new cA), + null === this.boundingBox && this.computeBoundingBox(); + var A = this.attributes.instanceStart + , e = this.attributes.instanceEnd; + if (void 0 !== A && void 0 !== e) { + var t = this.boundingSphere.center; + this.boundingBox.getCenter(t); + for (var i = 0, o = 0, n = A.count; n > o; o += 1) + WC.fromBufferAttribute(A, o), + i = Math.max(i, t.distanceToSquared(WC)), + WC.fromBufferAttribute(e, o), + i = Math.max(i, t.distanceToSquared(WC)); + this.boundingSphere.radius = Math.sqrt(i), + isNaN(this.boundingSphere.radius) && console.error("THREE.LineSegmentsGeometry.computeBoundingSphere(): Computed radius is NaN. The instanced position data is likely to have NaN values.", this) + } + } + ), + toJSON: function() {}, + applyMatrix: function(A) { + return console.warn("THREE.LineSegmentsGeometry: applyMatrix() has been renamed to applyMatrix4()."), + this.applyMatrix4(A) + } + }); + var zC, ZC, XC = function(A, e) { + void 0 === A && (A = new JC), + void 0 === e && (e = new YC({ + color: 16777215 * Math.random() + })), + Ue.call(this, A, e), + this.type = "LineSegments2" + }; + XC.prototype = Object.assign(Object.create(Ue.prototype), { + constructor: XC, + isLineSegments2: !0, + computeLineDistances: (zC = new y, + ZC = new y, + function() { + for (var A = this.geometry, e = A.attributes.instanceStart, t = A.attributes.instanceEnd, i = new Float32Array(2 * e.data.count), o = 0, n = 0, r = e.data.count; r > o; o += 1, + n += 2) + zC.fromBufferAttribute(e, o), + ZC.fromBufferAttribute(t, o), + i[n] = 0 === n ? 0 : i[n - 1], + i[n + 1] = i[n] + zC.distanceTo(ZC); + var a = new ks(i,2,1); + return A.setAttribute("instanceDistanceStart", new no(a,1,0)), + A.setAttribute("instanceDistanceEnd", new no(a,1,1)), + this + } + ), + raycast: function() { + var A = new p + , e = new p + , t = new p + , i = new y + , o = new M + , n = new Hs + , r = new y; + return function(s, l) { + null === s.camera && console.error('LineSegments2: "Raycaster.camera" needs to be set in order to raycast against LineSegments2.'); + var c = s.ray + , h = s.camera + , d = h.projectionMatrix + , p = this.geometry + , g = this.material + , u = g.resolution + , f = g.linewidth + (void 0 !== s.params.Line2 && s.params.Line2.threshold || 0) + , m = p.attributes.instanceStart + , C = p.attributes.instanceEnd; + c.at(1, t), + t.w = 1, + t.applyMatrix4(h.matrixWorldInverse), + t.applyMatrix4(d), + t.multiplyScalar(1 / t.w), + t.x *= u.x / 2, + t.y *= u.y / 2, + t.z = 0, + i.copy(t); + var v = this.matrixWorld; + o.multiplyMatrices(h.matrixWorldInverse, v); + for (var I = 0, E = m.count; E > I; I += 1) { + if (A.fromBufferAttribute(m, I), + e.fromBufferAttribute(C, I), + A.w = 1, + e.w = 1, + A.applyMatrix4(o), + e.applyMatrix4(o), + A.applyMatrix4(d), + e.applyMatrix4(d), + A.multiplyScalar(1 / A.w), + e.multiplyScalar(1 / e.w), + !(-1 > A.z && -1 > e.z) && !(A.z > 1 && e.z > 1)) { + A.x *= u.x / 2, + A.y *= u.y / 2, + e.x *= u.x / 2, + e.y *= u.y / 2, + n.start.copy(A), + n.start.z = 0, + n.end.copy(e), + n.end.z = 0; + var B = n.closestPointToPointParameter(i, !0); + n.at(B, r); + var x = a.lerp(A.z, e.z, B) + , S = x >= -1 && 1 >= x + , w = i.distanceTo(r) < .5 * f; + if (S && w) { + n.start.fromBufferAttribute(m, I), + n.end.fromBufferAttribute(C, I), + n.start.applyMatrix4(v), + n.end.applyMatrix4(v); + var M = new y + , b = new y; + c.distanceSqToSegment(n.start, n.end, b, M), + l.push({ + point: b, + pointOnLine: M, + distance: c.origin.distanceTo(b), + object: this, + face: null, + faceIndex: I, + uv: null, + uv2: null + }) + } + } + } + } + }() + }); + var _C = function(A, e) { + ep.call(this, gp.FILLCLIPPLANE, { + priority: 20 + }), + this.cubeSize = A.clone(), + this.originBoundingBox = (new aA).setFromCenterAndSize(e, A), + this.boundingBox = this.originBoundingBox.clone(), + this.center = e.clone(), + this.length = .8 * this.originBoundingBox.getSize(new y).length(), + this.planeOffset = 0, + this.normalIndex = 3, + this.visible = !1, + this.rotatable = !1, + this.hit = !1, + this.clipplane = new p, + this.observer = null, + this.renderClipPlane = new EA, + this.angleA = 0, + this.angleB = 0, + this.uniforms = { + iClipPlane: { + value: 0 + }, + vClipPlane: { + value: new Array(new p) + } + }, + this.planeMaterial = new jC({ + color: 6724044, + opacity: .3, + transparent: !0, + side: 2, + lights: !0 + }), + this.planeMaterial.visible = !1, + this.planeHighLightMatrial = new jC({ + color: 6724044, + opacity: .3, + transparent: !0, + side: 2, + lights: !0 + }), + this.initPlaneModel = function() { + for (var A = this.children.length - 1; A >= 0; A -= 1) + this.remove(this.children[A]); + this.planeOffset = 0; + var e = this.length + , t = new Ue(new At(e,e),this.planeMaterial); + t.name = "fillClipPlane", + t.customTag = !0, + t.renderOrder = 90, + this.position.copy(this.center), + this.clipplane.set(0, 0, 1, 0), + this.planeMesh = t, + this.add(t) + } + , + this.initWireframes = function() { + var A = .5 * this.length + , e = [-A, A, 0, A, A, 0, -A, -A, 0, A, -A, 0] + , t = new he + , i = new jC({ + color: 2003199, + lights: !0 + }); + t.setIndex([0, 1, 1, 3, 3, 2, 2, 0]), + t.setAttribute("position", new Ae(e,3)); + var o = new jo(t,i); + o.name = "Wireframes", + o.customTag = !0, + this.wireframeMesh = o, + this.add(o) + } + , + this.getCoordinate = function() { + var A = .5 * this.length + , e = new y(-A,A,0); + e.applyMatrix4(this.matrix); + var t = new y(A,A,0); + t.applyMatrix4(this.matrix); + var i = new y(-A,-A,0); + return i.applyMatrix4(this.matrix), + { + axisX: e.clone().sub(t).normalize(), + axisY: e.clone().sub(i).normalize() + } + } + , + this.initCapsPlane = function() { + if (this.capPlane) + return this.capPlane; + this.planeMesh || this.initPlaneModel(); + var A = this.length + , e = new Ue(new At(A,A),new jC({ + color: 16776960, + side: 2, + stencilWrite: !0, + stencilFunc: 515, + stencilRef: 1, + stencilFuncMask: 255, + stencilFail: 7680, + stencilZFail: 7680, + stencilZPass: 7680 + })) + , t = this.planeMesh; + e.matrixWorld = t.matrixWorld, + e.matrix = this.matrix; + for (var i = .5 * this.length, o = .01 * this.length, n = [], r = i - o; r > -i; r -= o) + n.push(r, i, 0), + n.push(i, r, 0); + for (r = -i + o; i > r; r += o) + n.push(-i, r, 0), + n.push(r, -i, 0); + var a = new YC({ + color: 2236962, + stencilWrite: !0, + stencilFunc: 515, + stencilRef: 1, + stencilFuncMask: 255, + stencilFail: 7680, + stencilZFail: 7680, + stencilZPass: 7680 + }); + a.linewidth = 1, + a.resolution.set(window.innerWidth, window.innerHeight), + a.depthTest = !1; + var s = new JC; + s.setPositions(n); + var l = new XC(s,a); + return l.matrix = this.matrix, + l.matrixWorld = t.matrixWorld, + this.capPlane = { + planeMesh: e, + lineMesh: l + }, + this.capPlane + } + , + this.updateClippingParams = function(A) {} + , + this.getFillClipBoundingBox = function() { + return this.boundingBox + } + , + this.calculateFillClipBoundingBox = function(A) { + this.boundingBox = this.originBoundingBox.clone(), + 0 !== this.clipplane.x ? 1 === this.clipplane.x ? this.boundingBox.max.x = A.x : this.boundingBox.min.x = A.x : 0 !== this.clipplane.y ? 1 === this.clipplane.y ? this.boundingBox.max.y = A.y : this.boundingBox.min.y = A.y : 0 !== this.clipplane.z && (1 === this.clipplane.z ? this.boundingBox.max.z = A.z : this.boundingBox.min.z = A.z) + } + , + this.enable = function(A, e) { + this.visible = e, + this.uniforms.iClipPlane.value = A ? 1 : 0, + this.capPlane && (this.capPlane.lineMesh.visible = e, + this.capPlane.planeMesh.visible = e), + this.update() + } + , + this.isEnabled = function() { + return 0 !== this.uniforms.iClipPlane.value + } + , + this.update = function() { + this.updateMatrixWorld(); + var A = new M; + A.getInverse(this.matrix), + A.transpose(), + this.uniforms.vClipPlane.value[0] = this.clipplane.clone().applyMatrix4(A), + this.updateClippingParams(this.uniforms), + this.observer && this.observer() + } + , + this.getClipPlane = function() { + return this.clipplane.clone() + } + , + this.offset = function(A) { + var e = this.cubeSize.length(); + this.planeOffset += A, + Math.abs(this.planeOffset) > .5 * e && (this.planeOffset = this.planeOffset > 0 ? .5 * e : .5 * -e); + var t = this.uniforms.vClipPlane.value[0].clone() + , i = new y(t.x,t.y,t.z); + i.normalize(); + var o = new y(i.x * this.planeOffset,i.y * this.planeOffset,i.z * this.planeOffset); + this.position.copy(this.center).add(o), + this.update() + } + , + this.setOffset = function(A) { + var e = this.cubeSize.length(); + this.planeOffset = A, + Math.abs(A) > .5 * e && (this.planeOffset = A > 0 ? .5 * e : .5 * -e); + var t = this.uniforms.vClipPlane.value[0].clone() + , i = new y(t.x,t.y,t.z); + i.normalize(); + var o = new y(i.x * this.planeOffset,i.y * this.planeOffset,i.z * this.planeOffset); + this.position.copy(this.center).add(o), + this.update() + } + , + this.changeNormal = function(A) { + this.quaternion.set(0, 0, 0, 1), + this.angleA = 0, + this.angleB = 0, + this.setNormal(A) + } + , + this.setNormal = function(A) { + var e = this.planeMesh + , t = this.wireframeMesh; + 0 === A ? (this.clipplane.set(1, 0, 0, 0), + e.rotation.set(0, Math.PI / 2, 0), + t.rotation.set(0, Math.PI / 2, 0)) : 1 === A ? (this.clipplane.set(-1, 0, 0, 0), + e.rotation.set(0, -Math.PI / 2, 0), + t.rotation.set(0, -Math.PI / 2, 0)) : 2 === A ? (this.clipplane.set(0, 0, 1, 0), + e.rotation.set(Math.PI, 0, 0), + t.rotation.set(Math.PI, 0, 0)) : 3 === A ? (this.clipplane.set(0, 0, -1, 0), + e.rotation.set(0, 0, 0), + t.rotation.set(0, 0, 0)) : 4 === A ? (this.clipplane.set(0, 1, 0, 0), + e.rotation.set(-Math.PI / 2, 0, 0), + t.rotation.set(-Math.PI / 2, 0, 0)) : 5 === A && (this.clipplane.set(0, -1, 0, 0), + e.rotation.set(Math.PI / 2, 0, 0), + t.rotation.set(Math.PI / 2, 0, 0)), + this.normalIndex = A, + e.updateMatrixWorld(), + t.updateMatrixWorld(), + this.capPlane && (this.capPlane.planeMesh.matrixWorld = e.matrixWorld, + this.capPlane.lineMesh.matrixWorld = e.matrixWorld), + this.update() + } + ; + var t = new f + , i = new y(1,0,0); + this.rotX = function(A) { + t.setFromAxisAngle(i, A), + this.quaternion.multiply(t), + this.update() + } + ; + var o = new y(0,1,0); + this.rotY = function(A) { + t.setFromAxisAngle(o, A), + this.quaternion.multiply(t), + this.update() + } + ; + var n = new y(0,0,1); + this.rotateByAxis = function(A, e) { + t.setFromAxisAngle(A, e), + this.quaternion.multiply(t) + } + , + this.rotateAngleOffset = function(A, e) { + var t = this.normalIndex; + A = A % 360 / 180 * Math.PI, + 0 === t || 1 === t ? ("y" === e && this.rotateByAxis(n, A), + "z" === e && this.rotateByAxis(o, A)) : 2 === t || 3 === t ? ("x" === e && this.rotateByAxis(i, A), + "z" === e && this.rotateByAxis(o, A)) : 4 !== t && 5 !== t || ("x" === e && this.rotateByAxis(i, A), + "y" === e && this.rotateByAxis(n, A)), + this.update() + } + , + this.setRotateAngle = function(A, e) { + this.quaternion.set(0, 0, 0, 1); + var t = this.normalIndex; + e = 0 > (e = void 0 === e ? this.angleB : e % 360) ? 360 + e : e, + this.angleA = A = 0 > (A = void 0 === A ? this.angleA : A % 360) ? 360 + A : A, + this.angleB = e, + A = A / 180 * Math.PI, + e = e / 180 * Math.PI, + 0 === t || 1 === t ? (e = 0 === t ? e : -e, + this.rotateByAxis(n, A = 0 === t ? -A : A), + this.rotateByAxis(o, e)) : 2 === t || 3 === t ? (this.rotateByAxis(i, A), + this.rotateByAxis(o, e)) : 4 !== t && 5 !== t || (e = 3 === t ? e : -e, + this.rotateByAxis(i, A = 3 === t ? -A : A), + this.rotateByAxis(n, e)), + this.update() + } + , + this.getRotateAngle = function() { + return { + angleA: this.angleA, + angleB: this.angleB + } + } + , + this.highLight = function() { + this.planeMesh.material = this.planeHighLightMatrial + } + , + this.cancelHighLight = function() { + this.planeMesh.material = this.planeMaterial, + this.hit = !1 + } + ; + var r = function(A, e, t, i, o, n, r, a, s) { + this.enable = A, + this.visible = e, + this.rotatable = t, + this.planeOffset = i, + this.position = o, + this.scale = n, + this.quaternion = r, + this.cubeSize = a, + this.center = s + }; + this.store = function() { + return new r(!!this.uniforms.iClipPlane.value,this.visible,this.rotatable,this.planeOffset,this.position.clone(),this.scale.clone(),this.quaternion.clone(),this.cubeSize.clone(),this.center.clone()) + } + , + this.restore = function(A) { + this.enable(A.enable, A.visible), + this.rotatable = A.rotatable, + this.planeOffset = A.planeOffset, + this.position.copy(A.position), + this.scale.copy(A.scale), + this.quaternion._w = A.quaternion._w, + this.quaternion._x = A.quaternion._x, + this.quaternion._y = A.quaternion._y, + this.quaternion._z = A.quaternion._z, + this.normalIndex = void 0 === A.normalIndex ? this.normalIndex : A.normalIndex, + this.setNormal(this.normalIndex) + } + , + this.setProcess = function(A) { + var e = this.cubeSize.length(); + A > 1 ? A = 1 : -1 > A && (A = -1), + this.planeOffset = A * e * .5; + var t = this.uniforms.vClipPlane.value[0].clone() + , i = new y(t.x,t.y,t.z); + i.normalize(); + var o = new y(i.x * this.planeOffset,i.y * this.planeOffset,i.z * this.planeOffset); + this.position.copy(this.center).add(o), + this.update() + } + , + this.restoreRotation = function() { + this.quaternion.set(0, 0, 0, 1), + this.update() + } + , + this.getProcess = function() { + var A = this.cubeSize.length(); + return this.planeOffset / A * 2 + } + }; + (_C.prototype = Object.create(ep.prototype)).constructor = _C, + _C.prototype.init = function() { + this.initPlaneModel(), + this.initWireframes() + } + , + _C.prototype.hitTest = function(A) { + if (this.visible) { + var e = null + , t = null; + if (this.hit = this.raycast(A), + this.hit) { + var i = A.ray + , o = new EA + , n = this.uniforms.vClipPlane.value[0]; + o.setComponents(n.x, n.y, n.z, n.w), + e = i.distanceToPlane(o), + t = 0 > i.direction.dot(o.normal) + } + return { + sign: t, + distance: e + } + } + this.hit = !1 + } + , + _C.prototype.raycast = function(A, e) { + var t = []; + return this.planeMesh.raycast(A, t), + t.length > 0 + } + , + _C.prototype.resize = function(A, e) { + var t = A.length() / this.length; + this.scale.set(t, t, t), + this.cubeSize.copy(A), + e && (this.center = e.clone(), + this.position.copy(this.center)), + this.offset(0), + this.updateMatrixWorld() + } + , + _C.prototype.getSideLength = function() { + return this.length * this.scale.x + } + ; + var $C = function(A, e) { + this.cls = A, + this.size = e, + this._pool = [], + this.counter = 0 + }; + $C.prototype.init = function(A) { + for (var e = 0, t = this.size; t > e; e += 1) { + var i = new this.cls; + i.init(A), + this._pool[e] = i + } + } + , + $C.prototype.resize = function(A, e) { + this.size = A, + this.collect(), + this.init(e) + } + , + $C.prototype.get = function(A) { + return this.size > this.counter ? (this._pool[this.counter].spawn(A), + this.counter += 1, + this.counter - 1) : (Bh.log("the pool is full"), + -1) + } + , + $C.prototype.clear = function() { + for (var A = 0, e = this.size; e > A; A += 1) + this._pool[A].clear(); + this.counter = 0 + } + , + $C.prototype.destroy = function() { + this.collect() + } + , + $C.prototype.collect = function() { + this._pool = [], + this.counter = 0 + } + , + $C.prototype.getObjects = function() { + return this._pool + } + ; + var Ay = function(A, e) { + var t = new he; + t.setAttribute("position", new YA(new Float32Array(72),3)), + jo.call(this, t, new ko({ + color: e + })), + void 0 !== A && this.updateBBox(A) + }; + (Ay.prototype = Object.create(jo.prototype)).constructor = Ay, + Ay.prototype.unload = function() {} + , + Ay.prototype.updateBBox = function(A) { + var e = A.min + , t = A.max + , i = this.geometry.attributes.position.array; + i[0] = t.x, + i[1] = t.y, + i[2] = t.z, + i[3] = e.x, + i[4] = t.y, + i[5] = t.z, + i[6] = e.x, + i[7] = t.y, + i[8] = t.z, + i[9] = e.x, + i[10] = e.y, + i[11] = t.z, + i[12] = e.x, + i[13] = e.y, + i[14] = t.z, + i[15] = t.x, + i[16] = e.y, + i[17] = t.z, + i[18] = t.x, + i[19] = e.y, + i[20] = t.z, + i[21] = t.x, + i[22] = t.y, + i[23] = t.z, + i[24] = t.x, + i[25] = t.y, + i[26] = e.z, + i[27] = e.x, + i[28] = t.y, + i[29] = e.z, + i[30] = e.x, + i[31] = t.y, + i[32] = e.z, + i[33] = e.x, + i[34] = e.y, + i[35] = e.z, + i[36] = e.x, + i[37] = e.y, + i[38] = e.z, + i[39] = t.x, + i[40] = e.y, + i[41] = e.z, + i[42] = t.x, + i[43] = e.y, + i[44] = e.z, + i[45] = t.x, + i[46] = t.y, + i[47] = e.z, + i[48] = t.x, + i[49] = t.y, + i[50] = t.z, + i[51] = t.x, + i[52] = t.y, + i[53] = e.z, + i[54] = e.x, + i[55] = t.y, + i[56] = t.z, + i[57] = e.x, + i[58] = t.y, + i[59] = e.z, + i[60] = e.x, + i[61] = e.y, + i[62] = t.z, + i[63] = e.x, + i[64] = e.y, + i[65] = e.z, + i[66] = t.x, + i[67] = e.y, + i[68] = t.z, + i[69] = t.x, + i[70] = e.y, + i[71] = e.z, + this.geometry.attributes.position.needsUpdate = !0, + this.geometry.computeBoundingBox(), + this.geometry.computeBoundingSphere(), + this.matrixAutoUpdate = !1 + } + ; + var ey = function() { + ep.call(this, gp.EXTERNALSCENEMANAGER, { + pickableType: Qc.Geometry, + priority: 20 + }), + this.globalSpace = !0 + }; + (ey.prototype = Object.create(ep.prototype)).constructor = ey, + ey.prototype.getNode = function(A) { + for (var e = this.children, t = 0, i = e.length; i > t; t += 1) + if (e[t].name === A.toString()) + return e[t]; + return null + } + , + ey.prototype.removeNodeByName = function(A) { + var e = this.getNode(A); + return !!e && (this.remove(e), + !0) + } + , + ey.prototype.clearNodes = function() { + this.clear() + } + , + ey.prototype.setNodeVisibleByName = function(A, e) { + var t = this.getNode(A); + return !!t && (t.visible = e, + !0) + } + , + ey.prototype.showAllNodes = function() { + for (var A = this.children, e = 0, t = A.length; t > e; e += 1) + A[e].visible = !0 + } + , + ey.prototype.hideAllNodes = function() { + for (var A = this.children, e = 0, t = A.length; t > e; e += 1) + A[e].visible = !1 + } + ; + var ty = function() { + ep.call(this, gp.EXTRUDEBODYMANAGER, { + pickableType: Qc.Geometry, + priority: 20 + }), + this.globalSpace = !0, + this.mapColorToNodeId = {}, + this.selectionIds = {}, + this.selectionColor = { + red: 50, + green: 224, + blue: 240, + alpha: .3 + }, + this.selectionEdgeColor = { + red: 50, + green: 224, + blue: 240, + alpha: 1 + } + }; + function iy(A) { + this.scene = A, + this.lightArray = void 0, + this.lightHelperArray = void 0, + this.lightHelper = !1, + this._currentPreset = void 0, + this._intensityFactor = vc.LightIntensityFactor, + this.defaultShadowLightDir = new y(100,-100,-160), + this.defaultLightDir = new y(100,-100,-160), + this.shadowLightDir = new y(100,-100,-160), + this.lightDir = new y(100,-100,-160), + this._ambientLight = void 0, + this.setLightPreset(vc.LightPreset) + } + (ty.prototype = Object.create(ep.prototype)).constructor = ty, + ty.prototype.addNode = function(A, e, t, i, o, n) { + n = void 0 === n || n; + var r = this.getNode(A); + if (r) + return r.material = i, + this.setColorInMap(r.name, i), + void ((r = this.getNode("wireframe_" + A)) && (r.material = o, + this.setColorInMap(r.name, o))); + var a = [] + , l = 0; + if (e.belong && "user" === e.belong) + a = e.roomBoundary, + l = e.offsetZ; + else { + e.version && "2.0" === e.version && (e = e.loops && e.loops.length > 0 ? e.loops[0] : []); + for (var c = e.length, h = 0; c > h; h += 1) + for (var d = e[h], p = d.length, g = 0; p - 1 > g; g += 1) { + var u = d[g]; + a.push(new s(u.x,u.y)), + 0 === h && 0 === g && (l = u.z) + } + a.length > 0 && a.push(a[0]) + } + var f = new Jn(new Ba(a),{ + amount: t + }); + i.depthTest = !n, + f.boundingBox || f.computeBoundingBox(); + var m = new Ue(f,i); + m.name = A.toString(), + m.translateZ(l), + this.setColorInMap(m.name, i), + this.add(m), + this.updateMatrixWorld(!0); + var C = m.geometry.faces + , y = []; + for (h = 0, + p = C.length; p > h; h += 1) + y.push(C[h].a), + y.push(C[h].b), + y.push(C[h].c); + var v = m.geometry.vertices + , I = []; + for (h = 0, + p = v.length; p > h; h += 1) + I.push(v[h].x), + I.push(v[h].y), + I.push(v[h].z); + var E = Up(I, y, Math.PI / 3.5) + , B = new he; + B.setIndex(new $A(E,1)), + B.setAttribute("position", new Ae(I,3)), + o.depthTest = !n, + o.transparent = !0; + var x = new jo(B,o); + x.translateZ(l), + x.name = "wireframe_" + A, + this.setColorInMap(x.name, o), + this.add(x), + this.updateMatrixWorld(!0) + } + , + ty.prototype.setColorInMap = function(A, e) { + this.mapColorToNodeId[A] = { + red: 255 * e.color.r, + green: 255 * e.color.g, + blue: 255 * e.color.b, + alpha: e.opacity + } + } + , + ty.prototype.createMaterial = function(A) { + return Kd.createStandardMaterial(A) + } + , + ty.prototype.setNodeMaterial = function(A, e, t) { + var i = this.getNode(A); + if (i) { + var o = i.material; + for (var n in e) { + o.hasOwnProperty(r = n) && (o[r] = "color" === r ? new LA(e[n]) : e[n]) + } + } + if (i = this.getNode("wireframe_" + A)) { + o = i.material; + for (var n in t) { + var r; + o.hasOwnProperty(r = n) && (o[r] = "color" === r ? new LA(t[n]) : t[n]) + } + } + } + , + ty.prototype.getNode = function(A) { + for (var e = this.children, t = 0, i = e.length; i > t; t += 1) + if (e[t].name === A.toString()) + return e[t]; + return null + } + , + ty.prototype.removeNodeById = function(A) { + var e = this.getNode(A); + return e && (delete this.mapColorToNodeId[e.name], + this.remove(e)), + !!(e = this.getNode("wireframe_" + A)) && (delete this.mapColorToNodeId[e.name], + this.remove(e), + !0) + } + , + ty.prototype.clearNodes = function() { + this.clear(), + this.mapColorToNodeId = {} + } + , + ty.prototype.setNodeVisibleById = function(A, e) { + var t = this.getNode(A); + return t && (t.visible = e), + !!(t = this.getNode("wireframe_" + A)) && (t.visible = e, + !0) + } + , + ty.prototype.showAllNodes = function() { + for (var A = this.children, e = 0, t = A.length; t > e; e += 1) + A[e].visible = !0 + } + , + ty.prototype.hideAllNodes = function() { + for (var A = this.children, e = 0, t = A.length; t > e; e += 1) + A[e].visible = !1 + } + , + ty.prototype.setNodeColorById = function(A, e) { + var t = this.getNode(A); + if (t) { + var i = t.material; + return i.color = new LA(e.red / 255,e.green / 255,e.blue / 255), + i.opacity = e.alpha, + e !== this.selectionColor && e !== this.selectionEdgeColor && this.setColorInMap(t.name, i), + !0 + } + return !1 + } + , + ty.prototype.getNodeColorById = function(A) { + return this.mapColorToNodeId[A] + } + , + ty.prototype.setWireframeColorById = function(A, e) { + return this.setNodeColorById("wireframe_" + A, e) + } + , + ty.prototype.getWireframeColorById = function(A) { + return this.getNodeColorById("wireframe_" + A) + } + , + ty.prototype.applySelection = function(A) { + this.clearSelection(); + var e = this.selectionIds + , t = this.mapColorToNodeId + , i = A.sceneState.selectionSet; + for (var o in i) + t[o] && (e[o] = !0, + this.setNodeColorById(o, this.selectionColor), + this.setWireframeColorById(o, this.selectionEdgeColor)) + } + , + ty.prototype.clearSelection = function() { + var A = this.mapColorToNodeId; + if (this.selectionIds) { + for (var e = this.children, t = 0, i = e.length; i > t; t += 1) { + var o = e[t] + , n = A[o.name]; + o.material.color = new LA(n.red / 255,n.green / 255,n.blue / 255), + o.material.opacity = n.alpha + } + this.selectionIds = {} + } + } + , + ty.prototype.applyHover = function(A) { + var e = A.sceneState; + if (e.hoverId && !e.isSelected(e.hoverId)) { + var t = this.getNode(e.hoverId); + if (t) { + this.hoveredId = e.hoverId; + var i = this.mapColorToNodeId[this.hoveredId] + , o = Kd.getHoverColorByColor({ + r: i.red / 255, + g: i.green / 255, + b: i.blue / 255, + a: i.alpha + }); + t.material.color.setRGB(o.r, o.g, o.b), + t.material.opacity = o.a + } + } + } + , + ty.prototype.clearHover = function() { + var A = this.hoveredId; + if (A) + if (this.selectionIds[A]) + this.hoveredId = null; + else { + var e = this.getNode(A); + if (e) { + var t = this.mapColorToNodeId[A]; + e.material.color.setRGB(t.red / 255, t.green / 255, t.blue / 255), + e.material.opacity = t.alpha, + this.hoveredId = null + } else + this.hoveredId = null + } + } + , + iy.prototype.destroy = function() { + this.scene = void 0, + this._clearLights(), + this._clearLightHelpers() + } + , + iy.prototype.currentLights = function() { + if (this.lightArray) + return [].concat(this.lightArray) + } + , + iy.prototype.setLightPreset = function(A) { + this._currentPreset !== A && (vc.LightPreset = A, + this._currentPreset = A, + this._clearLights(), + this._clearLightHelpers(), + this._createLights(), + this.setIntensityFactor(this._intensityFactor), + this.lightHelper && this._createLightHelpers()) + } + , + iy.prototype.getLightPreset = function() { + return this._currentPreset + } + , + iy.prototype.updateLights = function(A) { + if (this.lightArray) { + var e = new y(0,0,1) + , t = Math.PI / 4 + , i = A.position.clone(); + i.sub(A.target), + i.normalize(); + var o = null; + if (0 === this._currentPreset) { + var n = this.lightArray[1]; + n.position.set(i.x, i.y, i.z), + n.updateMatrixWorld(!0) + } else if (1 === this._currentPreset || 3 === this._currentPreset) { + var r = this.lightArray[2] + , a = this.lightArray[3]; + o = i.clone().applyAxisAngle(e, -1.2 * t), + r.position.copy(o).normalize(), + r.position.multiplyScalar(1e3), + r.position.z = 600, + r.updateMatrixWorld(), + o = i.clone().applyAxisAngle(e, Number(t)), + a.position.copy(o).normalize(), + a.position.multiplyScalar(1e3), + a.position.z = 600, + a.updateMatrixWorld() + } else if (2 === this._currentPreset) { + var s = this.lightArray[1] + , l = this.scene.getBoundingBox().getCenter(new y) + , c = new y(l.x - (o = this.lightDir).x,l.y - o.y,l.z - o.z); + s.position.copy(c), + s.target.position.set(l.x, l.y, l.z), + s.target.updateMatrixWorld(!0), + s.updateMatrixWorld(!0) + } else { + s = this.lightArray[1]; + o = i.clone().applyAxisAngle(e, -2 * t), + s.position.copy(o).normalize(), + s.position.multiplyScalar(1e3), + s.position.z = 600, + s.updateMatrixWorld() + } + this.lightHelperArray && this.updateLightHelper() + } + } + , + iy.prototype.updateLightHelper = function() { + for (var A = 0; this.lightHelperArray.length > A; A += 1) { + var e = this.lightHelperArray[A]; + e.update(), + e.updateMatrixWorld(!0) + } + } + , + iy.prototype.setIntensityFactor = function(A) { + if (!isNaN(A)) { + var e = Number(A); + if (e >= 0 && (this._intensityFactor = e, + vc.LightIntensityFactor = this._intensityFactor, + this.lightArray)) + for (var t = 0, i = this.lightArray.length; i > t; t += 1) { + var o = this.lightArray[t]; + o.intensity = o.initIntensity * this._intensityFactor + } + } + } + , + iy.prototype.getIntensityFactor = function() { + return this._intensityFactor + } + , + iy.prototype.setAmbientLightIntensity = function(A) { + if (this._ambientLight) { + if (isNaN(A)) + return; + var e = Number(A); + if (0 > e) + return; + this._ambientLight.intensity = e + } + } + , + iy.prototype.getAmbientLightIntensity = function() { + if (this._ambientLight) + return this._ambientLight.intensity + } + , + iy.prototype._createLights = function() { + var A = null; + switch (this._currentPreset) { + case 0: + A = this._lightPreset0(); + break; + case 1: + A = this._lightPreset1(); + break; + case 2: + A = this._lightPreset2(); + break; + case 3: + A = this._lightPreset3(); + break; + case 4: + A = this._lightPreset4(); + break; + default: + (A = this._commonLights(.72))[1].color.setHex(16777215) + } + if (this.lightArray = A, + this.scene && this.lightArray) + for (var e = 0, t = this.lightArray.length; t > e; e += 1) + this.scene.add(this.lightArray[e]), + this.lightArray[e].updateMatrixWorld() + } + , + iy.prototype._clearLights = function() { + if (this.lightArray) { + for (var A = 0; this.lightArray.length > A; A += 1) { + var e = this.lightArray[A]; + e.parent && e.parent.remove(e) + } + this.lightArray = void 0 + } + this._ambientLight = void 0 + } + , + iy.prototype._createLightHelpers = function() { + if (this.lightArray) + for (var A = 0; this.lightArray.length > A; A += 1) { + var e = this.lightArray[A]; + if (e instanceof Ra) { + var t = new ll(e,6e3); + this.lightHelperArray || (this.lightHelperArray = []), + this.lightHelperArray.push(t), + this.scene && this.scene.add(t) + } + } + } + , + iy.prototype._clearLightHelpers = function() { + if (this.lightHelperArray) { + for (var A = 0; this.lightHelperArray.length > A; A += 1) { + var e = this.lightHelperArray[A]; + e.parent && e.parent.remove(e) + } + this.lightHelperArray = void 0 + } + } + , + iy.prototype._commonLights = function(A, e) { + var t = [] + , i = new Ta(16777215,.6); + i.intensity = .3, + i.initIntensity = i.intensity, + t.push(i), + this._ambientLight = i; + var o = new Ra(16777215,1); + return o.color.setHex(14800580), + o.position.set(-100, 100, 160), + o.intensity = .72, + o.initIntensity = o.intensity, + o.distance = 300, + o.updateMatrixWorld(), + t.push(o), + vc.EnableShadow && (o.castShadow = !0, + o.shadow.camera.near = 0, + o.shadow.camera.far = 5e6, + o.shadow.camera.left = -2e5, + o.shadow.camera.right = 2e5, + o.shadow.camera.top = 2e5, + o.shadow.camera.bottom = -2e5, + o.distance = 1110, + o.shadow.mapSize.height = 1028, + o.shadow.mapSize.width = 1028), + t + } + , + iy.prototype._lightPreset0 = function() { + var A = null; + if (!vc.EnableLightmap) { + A = []; + var e = .3 + , t = new Sa(16777215,16777215,e); + A.push(t), + t.initIntensity = e, + t.position.set(0, 0, 500), + t.updateMatrixWorld(!0); + var i = new Ra(16777215,e = .7); + A.push(i), + i.initIntensity = e, + i.color.setHSL(.1, .95, 1), + i.position.set(-1, 1, .75), + i.position.multiplyScalar(50) + } + return A + } + , + iy.prototype._lightPreset1 = function() { + var A = this._commonLights(.4, .56); + A || (A = []); + var e = new Ra(16777215,1); + A.push(e), + e.color.setHex(16777215), + e.position.set(100, 100, 100), + e.intensity = .4, + e.initIntensity = e.intensity, + e.updateMatrixWorld(); + var t = new Ra(16777215,1); + return A.push(t), + t.color.setHex(16777215), + t.position.set(-100, -100, 100), + t.intensity = .18, + t.initIntensity = t.intensity, + t.updateMatrixWorld(), + A + } + , + iy.prototype._lightPreset2 = function() { + var A = this._commonLights(); + A || (A = []); + var e = new Ra(16777215,1); + A.push(e), + e.position.set(60, 130, 80), + e.intensity = .28, + e.initIntensity = e.intensity, + e.updateMatrixWorld(); + var t = new Ra(16777215,1); + A.push(t), + t.color.setHex(8100788), + t.position.set(100, -100, 80), + t.intensity = .22, + t.initIntensity = t.intensity, + t.updateMatrixWorld(); + var i = new Ra(16777215,1); + return A.push(i), + i.color.setHex(8100788), + i.position.set(-140, -50, 80), + i.intensity = .18, + i.initIntensity = i.intensity, + i.updateMatrixWorld(), + A + } + , + iy.prototype._lightPreset3 = function() { + var A = this._commonLights(.4, .56); + A || (A = []); + var e = new Ra(16777215,1); + A.push(e), + e.color.setHex(16777215), + e.position.set(100, 100, 100), + e.intensity = .22, + e.initIntensity = e.intensity, + e.updateMatrixWorld(); + var t = new Ra(16777215,1); + return A.push(t), + t.color.setHex(16777215), + t.position.set(-100, -100, 100), + t.intensity = .18, + t.initIntensity = t.intensity, + t.updateMatrixWorld(), + A + } + , + iy.prototype._lightPreset4 = function() { + var A = this._commonLights(.4, .56); + A || (A = []); + var e = new Ra(16777215,1); + A.push(e), + e.color.setHex(16777215), + e.position.set(100, 100, 100), + e.intensity = .4, + e.initIntensity = e.intensity, + e.updateMatrixWorld(); + var t = new Ra(16777215,1); + return A.push(t), + t.color.setHex(16777215), + t.position.set(-100, -100, 100), + t.intensity = .1, + t.initIntensity = t.intensity, + t.updateMatrixWorld(), + A[0].intensity = .3, + A[1].intensity = .2, + this.enableShadowLight(), + A + } + , + iy.prototype.enableShadowLight = function() { + this.lightCastShadow ? this.lightCastShadow.visible = !0 : (this.lightCastShadow = new Ra(16777215,.15), + this.lightCastShadow.intensity = .5, + this.lightCastShadow.initIntensity = .5, + this.lightCastShadow.castShadow = !0, + this.lightCastShadow.shadow.mapSize.width = 1024, + this.lightCastShadow.shadow.mapSize.height = 1024, + this.lightCastShadow.shadow.bias = -9e-4, + this.scene.add(this.lightCastShadow)), + this.lightCastShadow.updateMatrixWorld() + } + , + iy.prototype.getLightDirFromAltitudeAndAzimuth = function(A, e) { + var t = Math.sin(e) + , i = Math.cos(e); + return e > 0 && (i = -i), + new y(t,i,Math.sin(A) / Math.cos(A)).multiplyScalar(-100) + } + , + iy.prototype.disableShadowLight = function() { + this.lightCastShadow && (this.lightCastShadow.visible = !1) + } + , + iy.prototype.updateShadowLight = function() { + if (null !== this.scene.geometryGroup.boundingBox && this.lightCastShadow && this.lightCastShadow.visible) { + var A = this.scene.getBoundingBox().clone() + , e = new y + , t = A.getSize(e); + t.multiplyScalar(.2), + A.min.sub(t), + A.max.add(t); + var i = A.getCenter(new y) + , o = this.shadowLightDir + , n = new y(i.x - o.x,i.y - o.y,i.z - o.z); + this.lightCastShadow.position.set(n.x, n.y, n.z), + this.lightCastShadow.target.position.set(i.x, i.y, i.z), + this.lightCastShadow.target.updateMatrixWorld(!0), + this.lightCastShadow.updateMatrixWorld(!0); + var r = this.lightCastShadow.shadow.camera; + r.position.set(n.x, n.y, n.z), + r.lookAt(i), + r.updateMatrixWorld(), + r.matrixWorldInverse.getInverse(r.matrixWorld), + t = A.getSize(new y), + A.min.z = A.min.z - .05 * t.z; + var a = new EA(new y(0,0,1),-A.min.z) + , s = a.normal.dot(o) + , l = A.max.clone() + , c = -(l.dot(a.normal) + a.constant) / s + , h = new y; + h.copy(o).multiplyScalar(c).add(l), + A.expandByPoint(h), + A.applyMatrix4(r.matrixWorldInverse), + r.left = A.min.x, + r.right = A.max.x, + r.top = A.max.y, + r.bottom = A.min.y, + r.far = 1.5 * -A.min.z, + r.near = -A.max.z, + r.updateProjectionMatrix() + } + } + , + iy.prototype.disableLights = function() { + if (this.lightArray) + for (var A = 0, e = this.lightArray.length; e > A; A += 1) + this.lightArray[A].visible = !1 + } + , + iy.prototype.enableLights = function() { + if (this.lightArray) + for (var A = 0, e = this.lightArray.length; e > A; A += 1) + this.lightArray[A].visible = !0 + } + ; + var oy = function() { + H.call(this), + this.type = "Scene", + this.autoUpdate = !1, + this.tempVector3 = new y, + this.objectGroups = new ep, + this.add(this.objectGroups), + this.geometryGroup = new ep(gp.GEOMETRY,{ + pickableType: Qc.Geometry, + globalSpace: !0 + }), + this.geometryGroup.boundingBox = new aA, + this.pool = new $C(Kf,0), + this.expandScalar = 1.01, + this.clipPlanes = null, + this.fillClipPlane = null, + this.areaNode = null, + this.extrudeBodyManager = null, + this.externalScene = null, + this.externalComponentManager = null, + this.customPlaneManager = null, + this.axisGridManager = null, + this.lightManager = new iy(this), + this.selectedMeshes = [], + this.nonSelectedMeshes = [], + this.selectedInstanceMeshes = [], + this.nonSelectedInstanceMeshes = [], + this.componentTransformControl = void 0 + }; + (oy.prototype = Object.create(H.prototype)).constructor = oy, + oy.prototype.createCapStencilMaterials = function() { + this.backMaterial || (this.backMaterial = Kd.createStandardMaterial({ + color: 16711680, + colorWrite: !1, + depthWrite: !1, + depthTest: !1, + side: 1, + stencilWrite: !0, + stencilFunc: 519, + stencilRef: 1, + stencilFuncMask: 255, + stencilFail: 7680, + stencilZFail: 7680, + stencilZPass: 7682 + }), + this.frontMaterial = Kd.createStandardMaterial({ + color: 255, + colorWrite: !1, + depthWrite: !1, + depthTest: !1, + side: 0, + stencilWrite: !0, + stencilFunc: 519, + stencilRef: 1, + stencilFuncMask: 255, + stencilFail: 7680, + stencilZFail: 7680, + stencilZPass: 7683 + }), + this.backInstanceMaterial = Kd.createStandardMaterial({ + color: 16711680, + colorWrite: !1, + depthWrite: !1, + depthTest: !1, + side: 1, + stencilWrite: !0, + stencilFunc: 519, + stencilRef: 1, + stencilFuncMask: 255, + stencilFail: 7680, + stencilZFail: 7680, + stencilZPass: 7682 + }), + this.backInstanceMaterial.defines.USE_INSTANCE = "", + this.backInstanceMaterial.defines.USE_INSTANCE_NORMAL = "", + this.frontInstanceMaterial = Kd.createStandardMaterial({ + color: 255, + colorWrite: !1, + depthWrite: !1, + depthTest: !1, + side: 0, + stencilWrite: !0, + stencilFunc: 519, + stencilRef: 1, + stencilFuncMask: 255, + stencilFail: 7680, + stencilZFail: 7680, + stencilZPass: 7683 + }), + this.frontInstanceMaterial.defines.USE_INSTANCE = "", + this.frontInstanceMaterial.defines.USE_INSTANCE_NORMAL = "") + } + , + oy.prototype.destroy = function() { + this.lightManager.destroy(), + this.clearAll(), + this.pool.destroy(), + this.pool = null, + this.geometryGroup = null, + this.objectGroups = null, + this.clipPlanes = null, + this.fillClipPlane = null, + this.areaNode = null, + this.extrudeBodyManager = null, + this.externalComponentManager = null, + this.axisGridManager = null, + this.IBLMaps = null, + this.transformMatrix = null, + this.selectedMeshes = null, + this.nonSelectedMeshes = null, + this.selectedInstanceMeshes = null, + this.nonSelectedInstanceMeshes = null + } + , + oy.prototype.resizePool = function(A) { + vc.MergeComponent || (this.geometryGroup.clear(), + this.pool.resize(A, { + parent: this.geometryGroup + })) + } + , + oy.prototype.clearAll = function() { + this.pool.clear(), + this.autoUpdate = !1 + } + , + oy.prototype.getRootNode = function() { + return this.geometryGroup + } + , + oy.prototype.getBoundingBox = function() { + var A = this.getBoundingBoxWorld(); + return A.applyMatrix4(this.geometryGroup.matrix), + A + } + , + oy.prototype.getGeometryBoundingBox = function() { + var A = new aA; + A.copy(this.geometryGroup.boundingBox); + var e = new y + , t = A.getSize(e); + return t.multiplyScalar(this.expandScalar - 1), + A.min.sub(t), + A.max.add(t), + A.applyMatrix4(this.geometryGroup.matrix), + A + } + , + oy.prototype.getBoundingBoxWorld = function() { + var A = new aA + , e = new y; + return function() { + A.copy(this.geometryGroup.boundingBox), + this.componentTransformControl && A.union(this.componentTransformControl.getBoundingBox()); + var t = A.getSize(e); + return t.multiplyScalar(this.expandScalar - 1), + A.min.sub(t), + A.max.add(t), + this.fillClipPlane && this.fillClipPlane.visible ? A.expandByObject(this.fillClipPlane) : this.clipPlanes && this.clipPlanes.visible && A.expandByObject(this.clipPlanes), + A + } + }(), + oy.prototype.setBoundingBoxWorld = function(A) { + this.geometryGroup.boundingBox ? this.geometryGroup.boundingBox.copy(A) : this.geometryGroup.boundingBox = A; + var e = A.clone(); + if (this.clipPlanes && this.clipPlanes.visible) { + var t = e.getSize(new y); + t.multiplyScalar(this.expandScalar - 1), + e.min.sub(t), + e.max.add(t), + this.clipPlanes.setSectionBox(e.min, e.max) + } + if (this.fillClipPlane && this.fillClipPlane.visible) { + var i = new y; + e.getSize(i), + i.multiplyScalar(.05), + e.min.sub(i), + e.max.add(i), + this.fillClipPlane.resize(e.getSize(i), e.getCenter(new y)) + } + } + , + oy.prototype.expandBoundingBoxWorldBy = function(A) { + if (A) { + var e = A; + A instanceof Array == !1 && (e = [A]); + for (var t = 0, i = e.length; i > t; t += 1) { + var o = e[t]; + (o instanceof Ue || o instanceof H) && this.geometryGroup.boundingBox.expandByObject(o) + } + } + } + , + oy.prototype.getTransformMatrixGlobal = function() { + return this.transformMatrix + } + , + oy.prototype.getMatrixGlobal = function() { + return this.geometryGroup.matrix.clone() + } + , + oy.prototype.getGlobalScaleFactor = function() { + return this.geometryGroup.matrix.elements[0] + } + , + oy.prototype.getMatrixWorldGlobal = function() { + return this.geometryGroup.matrixWorld + } + , + oy.prototype.getRotationGlobal = function() { + if (this.geometryGroup.matrix) { + var A = new M; + A.extractRotation(this.geometryGroup.matrix); + var e = new F; + return e.setFromRotationMatrix(A), + e + } + return null + } + , + oy.prototype.getTrackingPointFromBoundingBox = function(A, e) { + if (!this.geometryGroup.boundingBox) + return null; + var t = e.origin + , i = this.getBoundingBox() + , o = 0 + , n = [new y, new y, new y, new y, new y, new y, new y, new y]; + n[0].set(i.min.x, i.min.y, i.min.z), + n[1].set(i.min.x, i.min.y, i.max.z), + n[2].set(i.min.x, i.max.y, i.min.z), + n[3].set(i.min.x, i.max.y, i.max.z), + n[4].set(i.max.x, i.min.y, i.min.z), + n[5].set(i.max.x, i.min.y, i.max.z), + n[6].set(i.max.x, i.max.y, i.min.z), + n[7].set(i.max.x, i.max.y, i.max.z); + for (var r = 0; 8 > r; r += 1) { + var a = new y; + a.subVectors(n[r], t); + var s = a.dot(A); + s > o && (o = s) + } + var l = A.clone().multiplyScalar(o) + , c = t.clone().add(l) + , h = new EA; + return h.setFromNormalAndCoplanarPoint(A, c), + e.intersectPlane(h, new y) + } + , + oy.prototype.getNearDepthByRect = function() { + var A = new aA + , e = 1 / 0 + , t = new M + , i = new y; + function o(A) { + i.setFromMatrixPosition(A.matrixWorld), + i.applyProjection(t); + var o = i.z; + o >= e || 0 > o || o > 1 || (e = o) + } + return function(i, n) { + function r(e) { + if (e instanceof Kf) { + if (!function(e, t) { + if (!t.boundingBox || t instanceof Ue) { + var i = t.geometry; + null === i.boundingBox && i.computeBoundingBox(), + A.copy(i.boundingBox), + A.applyMatrix4(t.matrixWorld) + } else + A.copy(t.boundingBox), + A.applyMatrix4(t.matrixWorld); + return e.intersectsBox(A) + }(i, e)) + return; + o(e) + } else if (e.worldBoundingBox) { + if (!i.intersectsBox(e.worldBoundingBox)) + return; + o(e) + } + var t = e.children; + if (t) + for (var n = 0, a = t.length; a > n; n += 1) { + var s = t[n]; + s.visible && r(s) + } + } + e = 1 / 0, + t.multiplyMatrices(n.projectionMatrix, n.matrixWorldInverse); + for (var a = this.geometryGroup.children, s = 0, l = a.length; l > s; s += 1) { + var c = a[s]; + c.visible && r(c) + } + return e + } + }(), + oy.prototype.getExpandScalar = function() { + return this.expandScalar + } + , + oy.prototype.hasClipPlanes = function() { + return null !== this.clipPlanes + } + , + oy.prototype.getClipPlanes = function(A) { + var e = this.getBoundingBox() + , t = e.getSize(new y) + , i = e.getCenter(this.tempVector3); + return null === this.clipPlanes ? (this.clipPlanes = new HC(t,i), + this.objectGroups.add(this.clipPlanes)) : A && this.clipPlanes.setSectionBox(e.min, e.max), + this.clipPlanes + } + , + oy.prototype.setClipPlanes = function(A) { + if (A) { + var e = this.getClipPlanes(); + A.setFromCenterAndSize(A.getCenter(new y), A.getSize(new y).multiplyScalar(this.expandScalar)), + e.setSectionBox(A.min, A.max) + } + } + , + oy.prototype.resetClipPlanes = function() { + var A = this.getClipPlanes() + , e = this.getBoundingBox(); + A.reset(), + e.max.x !== -1 / 0 && e.max.y !== -1 / 0 && e.max.z !== -1 / 0 && e.min.x !== 1 / 0 && e.min.y !== 1 / 0 && e.min.z !== 1 / 0 ? (e.setFromCenterAndSize(e.getCenter(new y), e.getSize(new y)), + A.setSectionBox(e.min, e.max)) : this.clipPlanes = null + } + , + oy.prototype.hasFillClipPlanes = function() { + return null != this.fillClipPlane + } + , + oy.prototype.getFillClipPlane = function() { + var A = new aA; + A.copy(this.geometryGroup.boundingBox), + A.applyMatrix4(this.geometryGroup.matrix); + var e = A.getSize(new y); + e.multiplyScalar(.05), + A.min.sub(e), + A.max.add(e); + var t = A.getSize(new y) + , i = A.getCenter(new y); + return null === this.fillClipPlane ? (this.fillClipPlane = new _C(t,i), + this.objectGroups.add(this.fillClipPlane)) : this.fillClipPlane.cubeSize.equals(t) || this.fillClipPlane.resize(t, i), + this.fillClipPlane + } + , + oy.prototype.disableClipPlanes = function() { + null != this.clipPlanes && (this.clipPlanes.enable(!1, !1), + this.clipPlanes.update()), + null != this.fillClipPlane && (this.fillClipPlane.enable(!1, !1), + this.fillClipPlane.update()) + } + , + oy.prototype.getAreaNode = function() { + return this.areaNode + } + , + oy.prototype.getAxisGridManager = function() { + return this.axisGridManager + } + , + oy.prototype.getExtrudeBodyManager = function() { + return null === this.extrudeBodyManager && (this.extrudeBodyManager = new ty, + this.objectGroups.add(this.extrudeBodyManager), + this.extrudeBodyManager.matrix.copy(this.geometryGroup.matrix), + this.extrudeBodyManager.matrixAutoUpdate = !1, + this.extrudeBodyManager.updateMatrixWorld(!0)), + this.extrudeBodyManager + } + , + oy.prototype.getCustomPlaneManager = function() { + return this.customPlaneManager + } + , + oy.prototype.getExternalScene = function() { + return null === this.externalScene && (this.externalScene = new ey, + this.add(this.externalScene), + this.externalScene.updateMatrixWorld(!0)), + this.externalScene + } + , + oy.prototype.shrinkScopeByClipPlane = function(A, e) { + if (this.clipPlanes && this.clipPlanes.isEnabled()) { + var t = this.clipPlanes.hitTest(A); + if (null === t.distance && void 0 === t.distance) + return; + t.sign ? t.distance > e.near && (e.near = t.distance) : e.far > t.distance && (e.far = t.distance) + } + } + , + oy.prototype.updateWorldMatrixByMatrix = function(A) { + for (var e = this.objectGroups.children, t = 0, i = e.length; i > t; t += 1) + e[t].globalSpace && (e[t].matrix.copy(A), + e[t].matrixAutoUpdate = !1, + e[t].updateMatrixWorld(!0)) + } + , + oy.prototype.currentLights = function() { + return this.lightManager.currentLights() + } + , + oy.prototype.setLightPreset = function(A) { + this.lightManager.setLightPreset(A) + } + , + oy.prototype.getLightPreset = function() { + return this.lightManager.getLightPreset() + } + , + oy.prototype.setLightIntensityFactor = function(A) { + this.lightManager.setIntensityFactor(A) + } + , + oy.prototype.updateLights = function(A) { + this.lightManager.updateLights(A) + } + , + oy.prototype.setAmbientLightIntensity = function(A) { + this.lightManager.setAmbientLightIntensity(A) + } + , + oy.prototype.getAmbientLightIntensity = function() { + return this.lightManager.getAmbientLightIntensity() + } + , + oy.prototype.getOrCreateGroup = function(A, e) { + for (var t = this.objectGroups.children, i = 0, o = t.length; o > i; i += 1) + if (t[i].name === A) + return t[i]; + var n = new ep(A,e); + return n.isGlobalSpace() && (n.matrix.copy(this.geometryGroup.matrix), + n.matrixAutoUpdate = !1, + n.updateMatrixWorld(!0)), + this.objectGroups.add(n), + n + } + , + oy.prototype.getGroup = function(A) { + for (var e = this.objectGroups.children, t = 0, i = e.length; i > t; t += 1) + if (e[t].name === A) + return e[t]; + return null + } + , + oy.prototype.getGroupType = function(A) { + var e = A.split("|"); + return { + groupType: e[0], + modelKey: e.length > 1 ? e[1] : void 0 + } + } + , + oy.prototype.getGroups = function() { + return this.objectGroups.children + } + , + oy.prototype.removeGroup = function(A) { + this.objectGroups.remove(A) + } + , + oy.prototype.removeGroupByName = function(A) { + this.objectGroups.removeByName(A) + } + , + oy.prototype.hasGroup = function(A) { + return this.objectGroups.hasChild(A) + } + , + oy.prototype.prepareScene = function() {} + , + oy.prototype.parseRootNode = function(A) { + var e = this.geometryGroup + , t = uh.box3FromObject(A.minBoundary, A.maxBoundary); + null === e.boundingBox || e.boundingBox.isEmpty() ? e.boundingBox = t : (e.boundingBox.expandByPoint(t.min), + e.boundingBox.expandByPoint(t.max)), + e.updateMatrixWorld(!0) + } + , + oy.prototype.intersectToWorld = function(A, e) { + var t = this.getMatrixGlobal(); + A.worldPosition = Tu.getWorldPositionOfMesh(A.point, t); + var i = e.getComponentInfoByUserId(A.userId); + i && (A.worldBoundingBox = i.boundingBox.clone()) + } + , + oy.prototype.worldToDrawing = function(A) { + var e = this.getMatrixGlobal() + , t = new y(A.x,A.y,A.z); + return t.applyMatrix4(e), + t + } + , + oy.prototype.drawingToWorld = function(A) { + var e = this.getMatrixGlobal() + , t = new M; + t.getInverse(e); + var i = new y(A.x,A.y,A.z); + return i.applyMatrix4(t), + i + } + , + oy.prototype.getBoundingBoxWorldByMesh = function(A) { + var e = this.getMatrixGlobal() + , t = A.boundingBox; + t || (A.geometry.boundingBox || A.geometry.computeBoundingBox(), + t = A.geometry.boundingBox); + var i = t.clone(); + i.applyMatrix4(A.matrixWorld); + var o = new M; + return o.getInverse(e), + i.applyMatrix4(o), + i + } + , + oy.prototype.getObjectPool = function() { + return this.pool + } + , + oy.prototype.getBoundingBoxOfGeometries = function(A) { + var e = new aA + , t = []; + if (Array.isArray(A)) + t = A; + else + for (var i in A) + A.hasOwnProperty(i) && t.push(i); + for (var o = 0, n = t.length; n > o; o += 1) { + var r = this.objectGroups.getObjectByProperty("key", t[o]); + if (r) { + var a = r.geometry; + if (a) { + a.boundingBox || a.computeBoundingBox(); + var s = a.boundingBox; + if (s) { + var l = s.clone(); + r.matrixWorld && l.applyMatrix4(r.matrixWorld), + e.expandByPoint(l.min), + e.expandByPoint(l.max) + } + } else + Bh.log("empty geometry!") + } + } + return e + } + , + oy.prototype.adjustInstanceVisibility = function(A) { + this.traverse((function(e) { + if ((e instanceof Ue || e instanceof jo) && e.geometry instanceof Na) { + var t = e.visible; + A && !e.bVisible || (e.visible = A), + e.bVisible = t + } + } + )) + } + , + oy.prototype.adjustVisibility = function(A) { + this.traverse((function(e) { + if ((e instanceof Ue || e instanceof jo) && !(e.geometry instanceof Na)) { + var t = e.visible; + A && !e.bVisible || (e.visible = A), + e.bVisible = t + } + } + )) + } + , + oy.prototype.changeVisibilityOfSelectedObjects = function(A) { + var e = this; + A || (e.selectedMeshes.length = 0, + e.selectedInstanceMeshes.length = 0); + var t = e.selectedMeshes + , i = e.selectedInstanceMeshes; + this.traverse((function(o) { + (o instanceof Ue || o instanceof jo) && (o.geometry instanceof Na ? A ? function(A) { + for (var t = 0, i = e.selectedInstanceMeshes.length; i > t; t += 1) { + if (A === e.selectedInstanceMeshes[t].object) { + for (var o = e.selectedInstanceMeshes[t].indices, n = A.geometry.getAttribute("vState").array, r = 0, a = o.length; a > r; r += 1) + n[o[r]] = Hc.SELECTED; + A.geometry.getAttribute("vState").needsUpdate = !0 + } + } + }(o) : function(A) { + if (A.visible) { + for (var e = [], t = A.geometry.getAttribute("vState").array, o = 0; t.length > o; o += 1) + t[o] === Hc.SELECTED && (e.push(o), + t[o] = Hc.HIDDEN); + e.length && (A.geometry.getAttribute("vState").needsUpdate = !0, + i.push({ + object: A, + indices: e + })) + } + }(o) : A ? function(A) { + for (var t = 0, i = e.selectedMeshes.length; i > t; t += 1) { + if (A === e.selectedMeshes[t].object) + for (var o = e.selectedMeshes[t].indices, n = 0, r = o.length; r > n; n += 1) { + var a = o[n] + , s = A.geometry.groups[a.idx]; + s.start = a.start, + s.count = a.count + } + } + }(o) : function(A) { + if (A._indicesGroup && A.visible) { + var e = [] + , i = A.geometry.groups; + if (i && i.length) { + for (var o = 0, n = i.length; n > o; o += 1) { + var r = i[o]; + r.materialIndex === zc.SELECTED && (e.push({ + idx: o, + start: r.start, + count: r.count + }), + r.start = 0, + r.count = 0) + } + e.length && t.push({ + object: A, + indices: e + }) + } + } + }(o)) + } + )) + } + , + oy.prototype.changeVisibilityOfNonSelectedObjects = function(A) { + var e = this; + A || (e.nonSelectedMeshes.length = 0, + e.nonSelectedInstanceMeshes.length = 0); + var t = e.nonSelectedMeshes + , i = e.nonSelectedInstanceMeshes; + this.traverse((function(o) { + (o instanceof Ue || o instanceof jo) && (o.geometry instanceof Na ? A ? function(A) { + for (var t = 0, i = e.nonSelectedInstanceMeshes.length; i > t; t += 1) { + if (A === e.nonSelectedInstanceMeshes[t].object) { + for (var o = e.nonSelectedInstanceMeshes[t].indices, n = A.geometry.getAttribute("vState").array, r = 0, a = o.length; a > r; r += 1) + n[o[r].idx] = o[r].state; + A.geometry.getAttribute("vState").needsUpdate = !0 + } + } + }(o) : function(A) { + if (A.visible) { + for (var e = [], t = A.geometry.getAttribute("vState").array, o = 0, n = t.length; n > o; o += 1) + t[o] !== Hc.SELECTED && t[o] !== Hc.HIDDEN && (e.push({ + idx: o, + state: t[o] + }), + t[o] = Hc.HIDDEN); + e.length && (A.geometry.getAttribute("vState").needsUpdate = !0, + i.push({ + object: A, + indices: e + })) + } + }(o) : A ? function(A) { + for (var t = 0, i = e.nonSelectedMeshes.length; i > t; t += 1) { + if (A === e.nonSelectedMeshes[t].object) { + var o = e.nonSelectedMeshes[t].indices; + if (null === o) + A.visible = !0; + else + for (var n = 0, r = o.length; r > n; n += 1) { + var a = o[n] + , s = A.geometry.groups[a.idx]; + s.start = a.start, + s.count = a.count + } + } + } + }(o) : function(A) { + if (A._indicesGroup && A.visible) { + var e = [] + , i = A.geometry.groups; + if (i && i.length) { + for (var o = 0, n = i.length; n > o; o += 1) { + var r = i[o]; + r.materialIndex !== zc.SELECTED && (e.push({ + idx: o, + start: r.start, + count: r.count + }), + r.start = 0, + r.count = 0) + } + e.length ? t.push({ + object: A, + indices: e + }) : (A.visible = !1, + t.push({ + object: A, + indices: null + })) + } else + A.visible = !1, + t.push({ + object: A, + indices: null + }) + } + }(o)) + } + )) + } + , + oy.prototype.clearSelectedAndNonSelectedMeshes = function() { + this.selectedMeshes.length = 0, + this.nonSelectedMeshes.length = 0, + this.selectedInstanceMeshes.length = 0, + this.nonSelectedInstanceMeshes.length = 0 + } + , + oy.prototype.setSkyBox = function(A, e, t, i, o) { + var n = A + , r = e || [Pd.skyBoxLeft, Pd.skyBoxRight, Pd.skyBoxBack, Pd.skyBoxFront, Pd.skyBoxUp, Pd.skyBoxDown] + , a = this; + (new $r).setPath(n).load(r, (function(A) { + a.background = A, + t && t() + } + ), i, o) + } + , + oy.prototype.drawBoundingBox = function(A) { + if (A) { + var e = this.getOrCreateGroup("BoundingBox", { + pickable: 0, + priority: 2 + }) + , t = this.getBoundingBox(); + void 0 === this.boudingBoxNode ? (this.boudingBoxNode = new Ay(t,16711680), + e.add(this.boudingBoxNode)) : this.boudingBoxNode.updateBBox(t), + this.boudingBoxNode.updateMatrixWorld(!0) + } else + this.removeGroupByName("BoundingBox") + } + , + oy.prototype.calculateGisMapBox = function(A) { + var e = this.getGroup("ExternalComponentManager") + , t = this.getBoundingBoxWorld() + , i = t.clone(); + if (e) { + var o = A.position.clone() + , n = this.getMatrixWorldGlobal() + , r = (new M).getInverse(n); + o.applyMatrix4(r); + var a = 6370856e3 + , s = o.z - t.min.z; + s = Math.abs(s); + var l = a * Math.acos(a / (a + s)); + i.min.x = o.x - l, + i.max.x = o.x + l, + i.min.y = o.y - l, + i.max.y = o.y + l, + i.min.z = t.min.z, + i.max.z = t.max.z + } + return i + } + , + oy.prototype.getReceivingPlane = function(A) { + if (!this.receivingPlane) { + this.receivingPlane = this.getOrCreateGroup(gp.RECEIVESHADOWPLANE); + var e = new mr; + e.transparent = !0, + e.opacity = .2, + e.side = 2; + var t = new Ue(new et(1e6,1e6),e); + t.receiveShadow = !0, + this.receivingPlane.add(t), + this.add(this.receivingPlane), + this.receivingPlane.matrixAutoUpdate = !1, + this.updateReceivingPlane() + } + return this.receivingPlane.visible = A, + this.receivingPlane + } + , + oy.prototype.updateReceivingPlane = function() { + var A = this.receivingPlane.children[0] + , e = this.getBoundingBoxWorld() + , t = e.getCenter(new y) + , i = e.getSize(new y); + A.position.z = e.min.z - .05 * i.z, + A.position.x = t.x, + A.position.y = t.y, + A.scale.x = i.x / 1e4, + A.scale.y = i.y / 1e4, + this.receivingPlane.updateMatrixWorld(!0) + } + , + Object.defineProperties(oy.prototype, { + lightArray: { + get: function() { + return Bh.warn("EIMMODEL.Scene: .lightArray 现在为 .lightManager.lightArray"), + this.lightManager.lightArray + } + }, + lightHelperArray: { + get: function() { + return Bh.warn("EIMMODEL.Scene: .lightHelperArray 现在为 .lightManager.lightHelperArray"), + this.lightManager.lightHelperArray + } + } + }); + var ny = function(A) { + this.selectionSet = {}, + this.selectionMaterial = Kd.createHighlightMaterial(), + this.selectionMaterial.colorState = Yc.SELECT, + this.selectionMaterial.name = "selection", + this.selectionMaterial.refreshUniforms(), + this.hoverId = void 0, + this.hoverMaterialDefaultParams = { + color: 14540253, + opacity: .9, + transparent: !0, + side: 2 + }, + this.hoverMaterial = Kd.createStandardMaterial(this.hoverMaterialDefaultParams), + this.hoverMaterial.name = "hover", + this.boxMaterialDefaultParams = { + color: 16776960, + opacity: 1, + transparent: !1 + }, + this.boxMaterial = new ko(this.boxMaterialDefaultParams), + this.boxMaterial.name = "box", + this.modelManager = A, + this.blinkComponentIds = {}; + var e = this; + this.filter = A.filter, + this.filter.observerForSceneState = function(t) { + e.removeSelection(t), + e.clearBlinkComponentsById(t), + A.viewerImpl.render() + } + , + this.phongHoverMaterial = new Ir(this.hoverMaterialDefaultParams), + this.phongSelectionMaterial = new Ir(vc.SelectionColor) + }; + ny.prototype = { + constructor: ny, + destroy: function() { + this.selectionSet = null, + this.blinkComponentIds = null, + this.modelManager = null, + this.selectionMaterial.destroy(), + this.selectionMaterial = null, + this.hoverMaterial.destroy(), + this.hoverMaterial = null, + this.phongHoverMaterial.dispose(), + this.phongHoverMaterial = null, + this.phongSelectionMaterial.dispose(), + this.phongSelectionMaterial = null + }, + _dispatchChangeEvent: function() { + var A = this.getSelection(); + if (vc.EnableSelectionBoundingBox) { + var e = this.modelManager.scene.getOrCreateGroup("BoundingBox"); + if (A && A.length > 0) { + var t = this.modelManager.viewerImpl.getBoundingBoxByIds(A); + if (t.isEmpty()) + return void (e.visible = !1); + e.visible = !0; + var i = e.getObjectByName("Box"); + if (!i) { + var o = new Uint16Array([0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7]) + , n = new Float32Array(24) + , r = new he; + r.setIndex(new YA(o,1)), + r.setAttribute("position", new YA(n,3)), + (i = new jo(r,this.boxMaterial)).name = "Box", + i.matrixAutoUpdate = !1, + e.add(i) + } + var a = i.geometry.attributes.position + , s = a.array + , l = t.min + , c = t.max; + s[0] = c.x, + s[1] = c.y, + s[2] = c.z, + s[3] = l.x, + s[4] = c.y, + s[5] = c.z, + s[6] = l.x, + s[7] = l.y, + s[8] = c.z, + s[9] = c.x, + s[10] = l.y, + s[11] = c.z, + s[12] = c.x, + s[13] = c.y, + s[14] = l.z, + s[15] = l.x, + s[16] = c.y, + s[17] = l.z, + s[18] = l.x, + s[19] = l.y, + s[20] = l.z, + s[21] = c.x, + s[22] = l.y, + s[23] = l.z, + a.needsUpdate = !0 + } else + e.visible = !1 + } else { + var h = this.modelManager.scene.getObjectByName("BoundingBox"); + h && (h.visible = !1) + } + this.modelManager.dispatchEvent({ + type: Rc.ON_SELECTION_CHANGED, + selectionList: A + }) + }, + clearSelection: function(A) { + var e, t = !1; + if (void 0 === A) { + var i = []; + for (var o in this.selectionSet) { + for (var n in t = !1, + e = this.getSelectionSet(o)) + if (e.hasOwnProperty(n)) { + t = !0; + break + } + t && i.push(o) + } + if (i.length) { + for (var r = 0, a = i.length; a > r; r += 1) + this.selectionSet[i[r]] = {}, + this.modelManager.clearSelection(i[r]); + this._dispatchChangeEvent() + } + } else { + for (var n in e = this.getSelectionSet(A)) + if (e.hasOwnProperty(n)) { + t = !0; + break + } + t && (this.selectionSet[A] = {}, + this.modelManager.clearSelection(A), + this._dispatchChangeEvent()) + } + }, + addSelection: function(A, e) { + if (A && A.length >= 1) { + var t, i = [], o = !1, n = this.modelManager, r = this.filter; + if (void 0 === e) { + for (var a = {}, s = n.getModelKeys(), l = [], c = 0, h = s.length; h > c; c += 1) { + var d = s[c]; + t = this.getSelectionSet(d), + o = !1; + for (var p = A.length - 1; p >= 0; p -= 1) { + n.isUserIdExist(f = A[p], d) && (!t[f] && r.isComponentActive(f, d) && (t[f] = !0, + o = !0), + a[f] = !0) + } + o && l.push(d) + } + for (p = A.length - 1; p >= 0; p -= 1) { + a[f = A[p]] || i.push(f) + } + if (i.length > 0 && n.dispatchEvent({ + type: Rc.ON_SELECTION_FAILED, + failedId: i + }), + l.length) { + for (var g = 0, u = l.length; u > g; g += 1) + this.modelManager.applySelection(l[g]); + this._dispatchChangeEvent() + } + } else { + t = this.getSelectionSet(e); + for (p = A.length - 1; p >= 0; p -= 1) { + var f; + n.isUserIdExist(f = A[p], e) ? !t[f] && r.isComponentActive(f, e) && (t[f] = !0, + o = !0) : i.push(f) + } + i.length > 0 && n.dispatchEvent({ + type: Rc.ON_SELECTION_FAILED, + failedId: i + }), + o && (this.modelManager.applySelection(e), + this._dispatchChangeEvent()) + } + } + }, + setSelection: function(A, e) { + if (A && A.length >= 1) + if (void 0 === e) { + for (var t in this.selectionSet) + delete this.selectionSet[t]; + this.addSelection(A) + } else + this.selectionSet[e] = {}, + this.addSelection(A, e) + }, + removeSelection: function(A, e) { + if (A && A.length >= 1) { + var t = !1; + if (void 0 === e) { + var i = []; + for (var o in this.selectionSet) { + var n = this.getSelectionSet(o); + t = !1; + for (var r = 0, a = A.length; a > r; r += 1) { + var s = A[r]; + n[s] && (delete n[s], + t = !0) + } + t && i.push(o) + } + if (i.length) { + for (var l = 0, c = i.length; c > l; l += 1) + this.modelManager.applySelection(i[l]); + this._dispatchChangeEvent() + } + } else { + for (var h = this.getSelectionSet(e), d = 0, p = A.length; p > d; d += 1) { + var g = A[d]; + h[g] && (delete h[g], + t = !0) + } + t && (this.modelManager.applySelection(e), + this._dispatchChangeEvent()) + } + } + }, + getSelection: function(A) { + var e = {}; + if (void 0 === A) + for (var t in this.selectionSet) + for (var i = this.getSelectionSet(t), o = Object.keys(i), n = 0, r = o.length; r > n; n += 1) + e[o[n]] = !0; + else + e = this.getSelectionSet(t); + return Object.keys(e) + }, + hasSelection: function(A) { + var e, t = !1; + if (void 0 === A) + for (var i in this.selectionSet) { + for (var o in e = this.getSelectionSet(i)) + if (e.hasOwnProperty[o]) { + t = !0; + break + } + if (t) + break + } + else + for (var o in e = this.getSelection(A)) + if (e.hasOwnProperty[o]) { + t = !0; + break + } + return t + }, + getSelectionSet: function(A) { + if (void 0 === A) { + var e = {}; + for (var t in this.selectionSet) + for (var i = this.getSelectionSet(t), o = Object.keys(i), n = 0, r = o.length; r > n; n += 1) + e[o[n]] = !0; + return e + } + return void 0 === this.selectionSet[A] && (this.selectionSet[A] = {}), + this.selectionSet[A] + }, + isSelected: function(A, e) { + var t, i = !1; + if (void 0 === e) { + for (var o in this.selectionSet) + if ((t = this.selectionSet[o]) && t[A]) { + i = !0; + break + } + } else + (t = this.selectionSet[e]) && t[A] && (i = !0); + return i + }, + setHoverId: function(A, e) { + this.hoverId = A, + this.modelManager.applyHover(e) + }, + clearHover: function(A) { + this.hoverId = void 0, + this.modelManager.clearHover(A) + }, + getHoverMaterial: function(A) { + var e = A && A.isMeshPhongMaterial ? this.phongHoverMaterial.clone() : this.hoverMaterial.clone(); + if (A && A.hasOwnProperty("color")) { + var t = A.color.clone() + , i = Math.max(t.r, Math.max(t.g, t.b)); + 0 === i && (i = .5), + t.r += 0 === t.r ? .3 * i : .2 * t.r, + t.g += 0 === t.g ? .3 * i : .2 * t.g, + t.b += 0 === t.b ? .3 * i : .2 * t.b, + t.r > 1 && (t.r = 1), + t.g > 1 && (t.g = 1), + t.b > 1 && (t.b = 1), + 1 === t.r && 1 === t.g && 1 === t.b && (t.r = .87, + t.g = .87, + t.b = .87), + e.color.setHex(t.getHex()), + e.opacity = void 0 !== A.opacity ? A.opacity : this.hoverMaterialDefaultParams.opacity, + e.transparent = void 0 !== A.transparent ? A.transparent : this.hoverMaterialDefaultParams.transparent, + e.side = void 0 !== A.side ? A.side : this.hoverMaterialDefaultParams.side, + void 0 !== A.metalness && (e.metalness = A.metalness), + void 0 !== A.roughness && (e.roughness = A.roughness), + void 0 !== A.bumpMap && (e.bumpMap = A.bumpMap), + void 0 !== A.alphaMap && (e.alphaMap = A.alphaMap), + void 0 !== A.emissiveMap && (e.emissiveMap = A.emissiveMap), + void 0 !== A.envMap && (e.envMap = A.envMap), + void 0 !== A.envMapIntensity && (e.envMapIntensity = A.envMapIntensity), + null != A.map && (e.map = A.map), + e.opacity = Kd.getHoverOpacity(e.opacity), + e.transparent = !0, + e.needsUpdate = !0 + } + return e + }, + getHoverColorByMaterial: function(A) { + var e = void 0 !== A.opacity ? A.opacity : this.hoverMaterialDefaultParams.opacity; + if (e = Kd.getHoverOpacity(e), + !A.hasOwnProperty("color")) + return { + rgbaColor: [this.hoverMaterial.color.r, this.hoverMaterial.color.g, this.hoverMaterial.color.b, e], + transparent: !0 + }; + var t = A.color.clone(); + return { + rgbaColor: [t.r, t.g, t.b, e], + transparent: !0 + } + }, + setSelectionColor: function(A, e) { + var t = this.selectionMaterial.opacity; + e = void 0 === e ? t : e, + "0x" + this.selectionMaterial.color.getHexString() === A && t === e || (this.selectionMaterial.color.setHex(A), + e && (this.selectionMaterial.opacity = e), + this.selectionMaterial.needsUpdate = !0) + }, + getSelectionColor: function() { + var A = this.selectionMaterial.opacity; + return new Xh(this.selectionMaterial.color.getHex(),A) + }, + getSelectionMaterial: function() { + return this.selectionMaterial.clone() + }, + setBlinkComponentsById: function(A, e) { + if (this.blinkComponentIds = {}, + A && 0 !== A.length) { + for (var t = A.length - 1; t >= 0; t -= 1) { + this.filter.isComponentActive(A[t], e) && (this.blinkComponentIds[A[t]] = !0) + } + this.modelManager.applyBlink() + } + }, + addBlinkComponentsById: function(A, e) { + if (A && A.length) { + for (var t = this.blinkComponentIds, i = !1, o = A.length - 1; o >= 0; o -= 1) { + var n = A[o]; + !t[n] && this.filter.isComponentActive(n) && (t[n] = !0, + i = !0) + } + i && this.modelManager.applyBlink() + } + }, + clearBlinkComponentsById: function(A, e) { + if (A && A.length) { + for (var t = !1, i = this.blinkComponentIds, o = 0, n = A.length; n > o; o += 1) { + var r = A[o]; + i[r] && (delete i[r], + t = !0) + } + t && this.modelManager.applyBlink() + } + }, + clearAllBlinkComponents: function() { + var A = !1; + uh.isOwnEmptyObject(this.blinkComponentIds) || (A = !0, + this.blinkComponentIds = {}), + A && this.modelManager.clearBlink() + }, + getBlinkComponents: function() { + return Object.keys(this.blinkComponentIds) + }, + getBlinkComponentsIdMap: function(A) { + var e = this; + if (this.modelManager.getBlinkEnabled()) { + if (A) { + var t = this.getBlinkComponents() + , i = {}; + return t.forEach((function(t) { + var o = e.modelManager.filterHelper.distributeId(t) + , n = o.modelKey + , r = o.objectId; + n && n.toString() !== A.toString() || (i[r] = e.blinkComponentIds[t]) + } + )), + i + } + return this.blinkComponentIds + } + return null + }, + getBlinkMaterial: function(A) { + return Kd.getBlinkMaterial(A, this.modelManager.getBlinkColor()) + }, + getBoxMaterial: function() { + return this.boxMaterial.clone() + }, + setBoxColor: function(A, e) { + var t = this.boxMaterial.opacity; + e = void 0 === e ? t : e, + "0x" + this.boxMaterial.color.getHexString() === A && t === e || (this.boxMaterial.color.setHex(A), + e && (this.boxMaterial.opacity = e), + this.boxMaterial.needsUpdate = !0, + this.boxMaterial.color.setHex(A), + this.boxMaterial.needsUpdate = !0) + } + }; + var ry = function() { + this.hiddenUserIdMap = {} + }; + ry.prototype.destroy = function() { + this.hiddenUserIdMap = null + } + , + ry.prototype.hideByUserId = function(A, e) { + this.hiddenUserIdMap || (this.hiddenUserIdMap = {}), + this.hiddenUserIdMap[A] = !!e + } + , + ry.prototype.cancelHiddenByUserId = function(A) { + this.hiddenUserIdMap && delete this.hiddenUserIdMap[A] + } + , + ry.prototype.cancelAllHidden = function() { + this.hiddenUserIdMap = null + } + , + ry.prototype.isHidden = function(A) { + return !!this.hiddenUserIdMap[A] + } + , + ry.prototype.hasHidden = function() { + return !uh.isEmptyObject(this.hiddenUserIdMap) + } + ; + var ay = function() { + this.materialDefaultParams = { + color: 14540253, + opacity: .5, + transparent: !0, + side: 0 + }, + this.material = Kd.createPhongMaterial(this.materialDefaultParams) + }; + ay.prototype.destroy = function() { + this.material = null + } + , + ay.prototype.resetColor = function() { + this.material.color.setHex(this.materialDefaultParams.color) + } + , + ay.prototype.resetOpacity = function() { + this.material.opacity = this.materialDefaultParams.opacity + } + , + ay.prototype.reset = function() { + this.material.color.setHex(this.materialDefaultParams.color), + this.material.opacity = this.materialDefaultParams.opacity, + this.material.transparent = this.materialDefaultParams.transparent, + this.material.side = this.materialDefaultParams.side, + this.material.needsUpdate = !0 + } + ; + var sy = function(A) { + this.manager = A, + this.requestCount = 0, + this.maxRequestCount = 1e5, + this.loading = !1, + this.delayIntervalTime = 300 + }; + sy.prototype.destroy = function() { + this.manager = null, + this.currentConditions = null, + this.delayLoadTimer && (clearTimeout(this.delayLoadTimer), + this.delayLoadTimer = null) + } + , + sy.prototype.isValidModel = function(A) { + return !(A.isEmptyScene() || !A.isLayerData()) + } + , + sy.prototype.loadGeopkOnDemandByConditionsWithDelay = function(A, e, t, i) { + var o = this + , n = this.delayIntervalTime; + o.delayLoadTimer && clearTimeout(o.delayLoadTimer), + o.delayLoadTimer = setTimeout((function() { + o.loadGeopkOnDemandByConditions(A, e, t, i) + } + ), n) + } + , + sy.prototype.loadGeopkOnDemandByConditions = function(A, e, t, i) { + if (this.currentConditions = A, + this.requestCount += 1, + this.requestCount > this.maxRequestCount && (this.requestCount = 0), + !this.loading) { + this.loading = !0; + var o = this; + requestAnimationFrame(function A(n) { + var r = n + , a = o.currentConditions; + return function() { + o._loadGeopkOnDemandByConditions(a, e, t, (function() { + r !== o.requestCount ? requestAnimationFrame(A(o.requestCount)) : (o.loading = !1, + i && i(a), + a = null) + } + )) + } + }(this.requestCount)) + } + } + , + sy.prototype._loadGeopkOnDemandByConditions = function(A, e, t, i) { + var o = this; + this.manager.traverseModels((function(n) { + o.isValidModel(n) && n._getHandler().loadGeopkOnDemand(A, e, t, i) + } + )) + } + , + sy.prototype.getBoundingBoxOnDemand = function() { + var A = new aA + , e = this; + return this.manager.traverseModels((function(t) { + if (e.isValidModel(t)) { + var i = t._getHandler().getLayerProvider().getUnionBoundingBoxOnDemand(); + i && A.union(i) + } + } + )), + A.isEmpty() ? null : A + } + , + sy.prototype.isLoading = function() { + return this.loading + } + , + sy.prototype.getBoundingBoxForUsedComponent = function() { + var A = this.manager + , e = new aA; + return A.traverseModels((function(t) { + var i = t.getLoadedUserIdsObject(); + i && e.union(A.getBoundingBoxByIds(i)) + } + )), + e.isEmpty() ? null : e + } + ; + var ly = function(A, e) { + vc.UseWorker && mh.isSupportWorker() && (this.websocketWorker = new Worker("src/worker/WebsocketWorker.js"), + this.prepareDataWorkers = new Worker("src/worker/PrepareDataWorker.js")), + mh.isMobileDevice() && (vc.maxObjectNumInPool = 6e3, + vc.maxDrawCacheNum = 4e3), + this.scene = new oy(this), + this.filter = A, + this.crossOrigin = !0, + this.models = {}, + this.viewerImpl = e, + this.materialPool = null, + this.occlusionCamera = null, + this.containsCamera = !1, + this.highPriorityCategories = { + inner: {}, + outer: {} + }, + this.octantToObjectMap = {}, + this.instanceGeometries = {}, + this.sceneState = new ny(this), + this.modelState = new ny(this), + this.filter.setSceneStateHelper(this.sceneState), + this.rotation = new f, + this.boundingBox = new aA, + this.explosionList = {}, + this.IBLMaterial = !1, + this.clippingCaps = !1, + this.blinkStartTime = null, + this.blinkEnabled = !1, + this.blinkIntervalTime = 600, + this.blinkPermited = !1, + this.defaultBlinkColor = (new LA).setHex(3330982), + this.defaultBlinkAlpha = 1, + this.blinkColor = new p(this.defaultBlinkColor.r,this.defaultBlinkColor.g,this.defaultBlinkColor.b,this.defaultBlinkAlpha), + this.selectPriority = !0, + this.materialOverrideSet = null, + this.plugins = [], + this.cameraFov = 0, + this.cameraPosition = new y, + this.domElementWidth = 1, + this.transformComponent = {} + }; + Object.assign(ly.prototype, Ld.prototype), + ly.prototype.destroy = function() { + for (var A in this.removeAllEventListener(), + this.models) + this.models[A].destroy(); + this.models = null, + this.octantToObjectMap = null, + this.materialPool && (this.materialPool.destroy(), + this.materialPool = null), + this.occlusionCamera && (this.occlusionCamera = null); + for (var e = 0, t = this.plugins.length; t > e; e += 1) + this.plugins[e].destroy(); + this.plugins = null, + this.loadOnDemandDirector && (this.loadOnDemandDirector.destroy(), + this.loadOnDemandDirector = null), + this.highPriorityCategories = null, + this.rotation = null, + this.boundingBox = null, + this.scene.destroy(), + this.scene = null, + this.filter = null, + this.sceneState.destroy(), + this.sceneState = null, + this.modelState.destroy(), + this.modelState = null, + this.blinkStartTime = null, + this.defaultBlinkColor = null, + this.blinkColor = null, + this.floorExplosionList = null, + this.explosionTranslation = null + } + , + ly.prototype.registerPlugin = function(A) { + this.plugins.push(A) + } + , + ly.prototype.removeAllEventListener = function() { + this._listeners = void 0 + } + , + ly.prototype.prepareCapScene = function() { + this.capsScene ? this.clippingCaps || (this.initCapPlane(), + this.initCapBox()) : (this.capsScene = new oy, + this.clippingCaps || (this.initCapPlane(), + this.initCapBox()), + this.scene.createCapStencilMaterials()) + } + , + ly.prototype.initCapPlane = function() { + var A = this.scene.getFillClipPlane().initCapsPlane(); + this.capsScene.add(A.planeMesh), + this.capsScene.add(A.lineMesh), + this.clippingCaps = !0 + } + , + ly.prototype.initCapBox = function() { + var A = this.scene.getClipPlanes().initCapsBox(); + A.material.needsUpdate = !0, + A.visible = !0, + this.capsScene.add(A), + this.clippingCaps = !0 + } + , + ly.prototype.getAllComponents = function() { + return this.scene.pool._pool + } + , + ly.prototype.getAllComponentsKey = function() { + var A = []; + for (var e in this.models) + if (this.models.hasOwnProperty(e)) { + var t = this.models[e]; + if (t) { + var i = t.getComponentlist(); + A = A.concat(i) + } + } + return A + } + , + ly.prototype.getComponentsKeyByModelKey = function(A) { + var e = []; + if (this.models.hasOwnProperty(A)) { + var t = this.models[A]; + if (t) + e = t.getComponentlist() + } + return e + } + , + ly.prototype.getComponent = function(A) { + for (var e in this.models) + if (this.models.hasOwnProperty(e)) { + var t = this.models[e]; + if (t.isLoaded() && t.getComponentInfo(A)) { + var i = t.getComponentInfo(A); + if (i) + return i + } + } + for (var o = 0, n = this.plugins.length; n > o; o += 1) + if (this.plugins[o].getNodeInfosByUserId) { + var r = this.plugins[o].getNodeInfosByUserId(A); + if (r) + return r + } + } + , + ly.prototype.getStorage = function() { + return this.storage + } + , + ly.prototype.updateTransformComponentList = function(A) { + this.transformComponent[A] = !0 + } + , + ly.prototype._updateOcclusionCamera = function(A) { + var e = A.near + , t = A.distanceFromWorldToDrawing(this.getMatrixWorldGlobal(), vc.OcclusionDistanceToCamera); + this.occlusionCamera ? this.occlusionCamera.copy(A) : this.occlusionCamera = A.clone(), + this.occlusionCamera.setNearFar(e, t), + this.occlusionCamera.updateMVP() + } + , + ly.prototype._clearMaterialPool = function() { + this.materialPool && this.materialPool.clear() + } + , + ly.prototype.acquireMaterial = function() { + return this.materialPool ? this.materialPool.acquire() : null + } + , + ly.prototype.getObjectPool = function() { + return this.scene.getObjectPool() + } + , + ly.prototype.getFrustumFromOcclusionCamera = function() { + return this.occlusionCamera.getFrustum(!1) + } + , + ly.prototype.getOcclusionCamera = function() { + return this.occlusionCamera + } + , + ly.prototype.prepareScene = function(A, e) { + var t = this.models; + for (var i in vc.MergeComponent || (this.clearPool(), + this.clearObjectRangeFromOctantMap()), + vc.OcclusionTranslucentEnabled && (null === this.materialPool && (this.materialPool = new qC, + this.materialPool.init(ay, 50)), + this._clearMaterialPool(), + this._updateOcclusionCamera(A)), + t) + if (t.hasOwnProperty(i)) { + var o = t[i]; + !vc.RendererWhenLoad && !o.isLoaded() || o.isEmptyScene() || o.prepare(A, e) + } + this.dealStateChanged() + } + , + ly.prototype.clearPool = function() { + this.scene.getObjectPool().clear() + } + , + ly.prototype.clearObjectRangeFromOctantMap = function() { + this.octantToObjectMap && this.octantToObjectMap.pool && (this.octantToObjectMap.pool = {}) + } + , + ly.prototype.setDrawableModel = function(A) { + this.isDrawableModel = A + } + , + ly.prototype.isDrawable = function() { + return this.isDrawableModel + } + , + ly.prototype.load = function(A, e, t) { + var i = this.models + , o = i[A.modelKey] + , n = this; + if (this.setDrawableModel(!1), + void 0 !== o) + return this.setDrawableModel(!0), + o.isVisible() || (o.setVisible(!0), + o.dispatchEventEx({ + type: Rc.ON_LOAD_COMPLETE + })), + o; + var r = []; + for (var a in i) + i.hasOwnProperty(a) && r.push(i[a].index); + r.sort(); + for (var s = 0; r.length > s && r[s] === s; s += 1) + ; + return o = new ("GIS" === A.type ? PC : TC)(this,A,(function(e, t) { + if (vc.UseWorker) { + if (n.websocketWorker && n.prepareDataWorkers) { + var i = JSON.parse(window.localStorage.getItem("bos_IndexedDB")); + i || (i = { + version: 1 + }), + window.localStorage.setItem("bos_IndexedDB", JSON.stringify(i)); + var r = i.version; + n.websocketWorker.postMessage({ + type: "INITIALIZE_DATABASE", + data: { + modelKey: o.modelKey, + dbName: o.projectKey, + version: r + } + }), + n.websocketWorker.onmessage = o.onWSWorkerMessage, + n.prepareDataWorkers.postMessage({ + type: "INITIALIZE_DATABASE", + data: { + modelKey: o.modelKey, + dbName: o.projectKey, + version: r + } + }), + n.prepareDataWorkers.onmessage = o.onPDWorkerMessage + } + } else + e.load(A.notifyProgress) + } + ),t), + this.filter.addModel(o.modelKey), + this.models[A.modelKey] = o, + o + } + , + ly.prototype.loadTiles = function(A, e, t) { + var i = this.models + , o = i[A.modelKey] + , n = this; + if (void 0 !== o) + return o.isVisible() || (o.setVisible(!0), + o.dispatchEventEx({ + type: Rc.ON_LOAD_COMPLETE + })), + o; + var r = []; + for (var a in i) + i.hasOwnProperty(a) && r.push(i[a].index); + r.sort(); + for (var s = 0; r.length > s && r[s] === s; s += 1) + ; + return o = new PC(this,A,(function(e, t) { + if (vc.UseWorker) { + if (n.websocketWorker && n.prepareDataWorkers) { + var i = JSON.parse(window.localStorage.getItem("bos_IndexedDB")); + i || (i = { + version: 1 + }), + window.localStorage.setItem("bos_IndexedDB", JSON.stringify(i)); + var r = i.version; + n.websocketWorker.postMessage({ + type: "INITIALIZE_DATABASE", + data: { + modelKey: o.modelKey, + dbName: o.projectKey, + version: r + } + }), + n.websocketWorker.onmessage = o.onWSWorkerMessage, + n.prepareDataWorkers.postMessage({ + type: "INITIALIZE_DATABASE", + data: { + modelKey: o.modelKey, + dbName: o.projectKey, + version: r + } + }), + n.prepareDataWorkers.onmessage = o.onPDWorkerMessage + } + } else + e.load(A.notifyProgress) + } + ),t), + this.models[A.modelKey] = o, + o + } + , + ly.prototype.loadModels = function(A) { + var e = this.models[A.modelKey] + , t = this; + return void 0 !== e ? (e.isVisible() || (e.setVisible(!0), + e.dispatchEventEx({ + type: Rc.ON_LOAD_COMPLETE + })), + e) : (e = new TC(this,A,(function() { + if (vc.UseWorker) { + if (t.websocketWorker && t.prepareDataWorkers) { + var i = JSON.parse(window.localStorage.getItem("bos_IndexedDB")); + i || (i = { + version: 1 + }), + window.localStorage.setItem("bos_IndexedDB", JSON.stringify(i)); + var o = i.version; + t.websocketWorker.postMessage({ + type: "INITIALIZE_DATABASE", + data: { + modelKey: e.modelKey, + dbName: e.projectKey, + version: o + } + }), + t.websocketWorker.onmessage = e.onWSWorkerMessage, + t.prepareDataWorkers.postMessage({ + type: "INITIALIZE_DATABASE", + data: { + modelKey: e.modelKey, + dbName: e.projectKey, + version: o + } + }), + t.prepareDataWorkers.onmessage = e.onPDWorkerMessage + } + } else + e.load(A.notifyProgress) + } + )), + this.models[A.modelKey] = e, + e) + } + , + ly.prototype.unload = function(A) { + var e = this.models[A]; + return !!e && (e.destroy(), + delete this.models[A], + this.filter.removeModel(A), + this.filter.reinitFilterManager(this.getNodeInfos()), + this.updateScene(), + this.updateFilterManager(), + this.filter.getObjectInfoManager().calculateVisibleComponentsBbox(), + !0) + } + , + ly.prototype.unloadAll = function() { + for (var A = this.getModelKeys(), e = 0, t = A.length; t > e; e += 1) + this.unload(A[e]); + this.clearPool(), + this.models = {} + } + , + ly.prototype.showModel = function(A) { + var e = this.models[A]; + return !!e && (e.setVisible(!0), + !0) + } + , + ly.prototype.hideModel = function(A) { + var e = this.models[A]; + return !!e && (e.setVisible(!1), + !0) + } + , + ly.prototype.getModelKeys = function() { + var A = this.models + , e = []; + for (var t in A) + A.hasOwnProperty(t) && e.push(t); + return e + } + , + ly.prototype.updateScene = function() { + this.updateSceneBoundingBox() + } + , + ly.prototype.updateSceneBoundingBox = function() { + var A = this.models + , e = this.boundingBox; + for (var t in e.makeEmpty(), + A) + if (A.hasOwnProperty(t)) { + var i = A[t]; + if (!i.isEmptyScene()) { + var o = i.getBoundingBoxWorld(); + if (!o || o.isEmpty()) + continue; + e.isEmpty() ? e.copy(o) : (e.expandByPoint(o.min), + e.expandByPoint(o.max)) + } + } + for (var n = 0, r = this.plugins.length; r > n; n += 1) { + var a = this.plugins[n]; + if ("function" == typeof a.getBoundingBoxWorld) { + var s = a.getBoundingBoxWorld(); + s && e.union(s) + } + } + this.scene.setBoundingBoxWorld(e) + } + , + ly.prototype.parseSceneRootNode = function(A) { + this.scene.parseRootNode(A), + this.updateSceneBoundingBox() + } + , + ly.prototype.updateSceneRootMatrix = function() { + var A = !1 + , e = new M + , t = new M + , i = new f + , o = this.models; + for (var n in this.models) + if (o.hasOwnProperty(n)) { + var r = o[n]; + if (!r.isEmptyScene()) { + i.copy(r.getTransforms().rotation), + e.copy(r.getTransforms().transformMatrix), + A = r.getTransforms().transformed; + break + } + } + if (this.scene.setTransformMatrixGlobal(e), + A) + t.copy(e); + else { + var a = new y(1,1,1) + , s = vc.SceneSize + , l = this.boundingBox.getSize(new y) + , c = Math.max(l.x, l.y, l.z); + a.multiplyScalar(s / c), + t.makeRotationFromQuaternion(i), + t.scale(a) + } + this.scene.updateWorldMatrixByMatrix(t) + } + , + ly.prototype.updateSceneRenderable = function() { + var A = this.models + , e = vc.maxObjectNumInPool + , t = [] + , i = 0; + for (var o in A) { + if (A.hasOwnProperty(o)) + (a = A[o]).isEmptyScene() || (i += a.model.getStatistics().renderableTotalForPool, + t.push(o)) + } + for (var n = 0, r = t.length; r > n; n += 1) { + var a = A[o = t[n]] + , s = Math.floor(a.getStatistics().renderableTotalForPool / i * e); + s > a.getStatistics().renderableTotalForPool && (s = a.getStatistics().renderableTotalForPool), + a.setRenderableCount(s) + } + } + , + ly.prototype.updateOctreeNode = function() { + var A = this.models; + for (var e in this.models) + if (A.hasOwnProperty(e)) { + var t = A[e]; + t.isLoaded() && !t.isEmptyScene() && t.updateOctreeNode(!0) + } + } + , + ly.prototype.updateMaterials = function() { + var A = this.models; + for (var e in this.models) + if (A.hasOwnProperty(e)) { + var t = A[e]; + t.isLoaded() && !t.isEmptyScene() && t.materialManager.updateMaterials(t) + } + } + , + ly.prototype.updateMaterialsValue = function(A, e) { + var t = this.models; + for (var i in this.models) + if (t.hasOwnProperty(i)) { + var o = t[i]; + o.isLoaded() && !o.isEmptyScene() && o.materialManager.updateMaterialsValue(o, A, e) + } + this.materialOverrideSet && this.materialOverrideSet.updateMaterialsValue(A, e) + } + , + ly.prototype.enableColorWithoutLight = function(A) { + var e = this.models; + for (var t in this.models) + if (e.hasOwnProperty(t)) { + var i = e[t]; + i.isLoaded() && i.isEmptyScene() + } + } + , + ly.prototype.switchNewStyleMaterial = function(A) { + var e = this.models; + for (var t in this.models) + if (e.hasOwnProperty(t)) { + var i = e[t]; + i.isLoaded() && !i.isEmptyScene() && i.materialManager.switchNewStyleMaterial(i, A) + } + } + , + ly.prototype.changeAllMaterials = function(A) { + if (this.IBLMaterial !== A) { + var e = this.models; + for (var t in this.models) + if (e.hasOwnProperty(t)) { + var i = e[t]; + i.isEmptyScene() || i.materialManager.changeAllMaterials(i, A) + } + this.IBLMaterial = A + } + } + , + ly.prototype.setCrossOrigin = function(A) { + this.crossOrigin = A + } + , + ly.prototype.getMatrixWorldGlobal = function() { + return this.scene.getMatrixWorldGlobal() + } + , + ly.prototype.hasModel = function() { + var A = this.models; + for (var e in A) { + if (A.hasOwnProperty(e)) + if (A[e].isLoaded()) + return !0 + } + return !1 + } + , + ly.prototype.isEmpty = function() { + if (this.hasModel()) + return !1; + for (var A = !1, e = 0, t = this.plugins.length; t > e; e += 1) { + var i = this.plugins[e]; + if ("function" == typeof i.isEmpty && !i.isEmpty()) { + A = !0; + break + } + } + return !A + } + , + ly.prototype.hasModelDataReady = function() { + var A = this.models + , e = !1; + for (var t in A) { + if (A.hasOwnProperty(t)) + if (e = !0, + !A[t].isDataReady()) + return !1 + } + return e + } + , + ly.prototype.isLayerData = function() { + var A = this.models; + for (var e in A) { + if (A.hasOwnProperty(e)) + if (A[e].isLayerData()) + return !0 + } + return !1 + } + , + ly.prototype.getModel = function(A) { + var e = this.models[A]; + return e || null + } + , + ly.prototype.getFirstModel = function() { + var A = Object.keys(this.models)[0]; + return this.models[A] + } + , + ly.prototype.showOctreeBox = function(A) { + vc.ShowOctant || this.scene.removeGroupByName(gp.OCTREENODE) + } + , + ly.prototype.setCategoriesToHighPriority = function(A, e) { + var t = A.length; + if (t >= 1) + for (var i = this.highPriorityCategories[e] = {}, o = 0; t > o; o += 1) + i[A[o]] = !0 + } + , + ly.prototype.getCategoriesFromHighPriority = function(A) { + return this.highPriorityCategories[A] + } + , + ly.prototype.clearCategoriesFromHighPriority = function(A) { + this.highPriorityCategories[A] = {} + } + , + ly.prototype.clearAllCategoriesFromHighPriority = function() { + this.clearCategoriesFromHighPriority("inner"), + this.clearCategoriesFromHighPriority("outer") + } + , + ly.prototype.calculateCameraModelRelation = function(A) { + var e = !1 + , t = this.models; + for (var i in t) + if (t.hasOwnProperty(i)) { + var o = t[i]; + o && o.isLoaded() && !o.isEmptyScene() && (o.calculateCameraModelRelation(A), + e = e || o.containsCamera) + } + this.containsCamera = e + } + , + ly.prototype.getCameraNameList = function() { + var A = this.models + , e = []; + for (var t in A) + if (A.hasOwnProperty(t)) { + var i = A[t]; + i.isEmptyScene() || (e = e.concat(i.getCameraNameList())) + } + return e + } + , + ly.prototype.getCamera = function(A) { + var e = this.models + , t = null; + for (var i in e) + if (e.hasOwnProperty(i)) { + var o = e[i]; + if (!o.isEmptyScene() && (t = o.getCamera(A))) + break + } + return t + } + , + ly.prototype.getNumOfElements = function() { + var A = this.models + , e = 0; + for (var t in this.models) + if (A.hasOwnProperty(t)) { + var i = A[t]; + i.isEmptyScene() || (e += i.getStatistics().numOfElements) + } + return e + } + , + ly.prototype.getNumOfRenderables = function() { + var A = this.models + , e = 0; + for (var t in this.models) + if (A.hasOwnProperty(t)) { + var i = A[t]; + i.isEmptyScene() || (e += i.getStatistics().renderableTotal) + } + return e + } + , + ly.prototype.getNumOfTriangles = function() { + var A = this.models + , e = 0; + for (var t in this.models) + if (A.hasOwnProperty(t)) { + var i = A[t]; + i.isEmptyScene() || (e += i.getStatistics().numOfTriangles) + } + return e + } + , + ly.prototype.getScene = function() { + return this.scene + } + , + ly.prototype.getOctreeRoots = function() { + var A = this.models + , e = {}; + for (var t in A) + if (A.hasOwnProperty(t)) { + var i = A[t]; + if (i.isLoaded() && !i.isEmptyScene()) { + var o = i.getEncodedDatabagId(); + e[o] = [], + i.getModelDescriptor().getOctreeRoots(e[o]) + } + } + return e + } + , + ly.prototype.getModelSnapshotPhoto = function() { + return this.viewerImpl.render(), + { + imgURL: this.viewerImpl.getRenderer().domElement.toDataURL("image/png"), + height: this.viewerImpl.domElement.offsetHeight, + width: this.viewerImpl.domElement.offsetWidth + } + } + , + ly.prototype.addMeshToOctantMap = function(A, e, t) { + var i = this.octantToObjectMap; + i[A] || (i[A] = {}), + i[A].mesh || (i[A].mesh = {}), + i[A].mesh[e] || (i[A].mesh[e] = []), + i[A].mesh[e].push(t) + } + , + ly.prototype.addNodeInfoToOctantMap = function(A, e, t) { + var i = this.octantToObjectMap; + i[A] || (i[A] = {}), + i[A].info || (i[A].info = {}), + i[A].info[e] || (i[A].info[e] = []), + i[A].info[e].push(t) + } + , + ly.prototype.removeNodeInfoFromOctantMap = function(A, e) { + var t = this.octantToObjectMap; + if (t[A] && t[A].info && t[A].info[e.componentKey]) + for (var i = t[A].info[e.componentKey], o = i.length - 1; o >= 0; o -= 1) + if (e.nodeId === i[o].nodeId) { + i.splice(o); + break + } + } + , + ly.prototype.clearNodeInfosFromOctantMap = function(A) { + var e = this.octantToObjectMap; + e[A] && e[A].info && (e[A] = null) + } + , + ly.prototype.removeAllFromOctantMap = function(A) { + var e = this.octantToObjectMap; + e[A] && delete e[A] + } + , + ly.prototype.clearMeshFromOctantMap = function(A) { + var e = this.octantToObjectMap; + e[A] && e[A].mesh && delete e[A].mesh + } + , + ly.prototype.removeMeshFromOctantMap = function(A, e) { + var t = this.octantToObjectMap; + if (t[A] && t[A].mesh) { + var i = 0 + , o = t[A].mesh[e]; + for (i = o.length - 1; i >= 0; i -= 1) + delete o[i]; + delete t[A].mesh[e] + } + } + , + ly.prototype.removeBatchedMeshFromOctantMap = function(A, e) { + var t = this.octantToObjectMap; + if (t[A] && t[A].mesh && t[A].info) { + var i = 0 + , o = t[A].info[e]; + for (i = o.length - 1; i >= 0; i -= 1) + o.splice(i); + delete t[A].info[e] + } + } + , + ly.prototype.getOctantMap = function() { + return this.octantToObjectMap + } + , + ly.prototype.isFilterApplied = function() { + return this.filterApplied + } + , + ly.prototype.setFilterApplied = function(A) { + this.filterApplied = A + } + , + ly.prototype.applyFilter = function() { + for (var A in Bh.time("applyFilter"), + this.models) { + this.models[A].applyFilter() + } + for (var e = 0, t = this.plugins.length; t > e; e += 1) + this.plugins[e].applyFilter(); + this.setFilterApplied(!0), + Bh.timeEnd("applyFilter") + } + , + ly.prototype.applySelection = function() { + for (var A in this.selectPriority = !0, + this.models) { + this.models[A].applySelection() + } + this.scene.getExtrudeBodyManager().applySelection(this); + for (var e = 0, t = this.plugins.length; t > e; e += 1) + this.plugins[e].applySelection() + } + , + ly.prototype.clearSelection = function() { + for (var A in this.selectPriority = !0, + this.models) { + this.models[A].clearSelection() + } + this.scene.getExtrudeBodyManager().clearSelection(); + for (var e = 0, t = this.plugins.length; t > e; e += 1) + this.plugins[e].clearSelection() + } + , + ly.prototype.applyHover = function() { + if (vc.Hover && !vc.EnableRenderPass) + for (var A in this.models) { + this.models[A].applyHover() + } + this.scene.getExtrudeBodyManager().applyHover(this); + for (var e = 0, t = this.plugins.length; t > e; e += 1) + this.plugins[e].applyHover() + } + , + ly.prototype.clearHover = function() { + if (vc.Hover && !vc.EnableRenderPass) + for (var A in this.models) { + this.models[A].clearHover() + } + this.scene.getExtrudeBodyManager().clearHover(); + for (var e = 0, t = this.plugins.length; t > e; e += 1) + this.plugins[e].clearHover() + } + , + ly.prototype.chooseRendering = function(A) {} + , + ly.prototype.isUserIdExist = function(A) { + var e = !1; + for (var t in this.models) { + if (this.models.hasOwnProperty(t)) + if (this.models[t].getModelDescriptor().isUserIdExist(A)) { + e = !0; + break + } + } + for (var i = 0, o = this.plugins.length; o > i; i += 1) + if (this.plugins[i].isUserIdExist && this.plugins[i].isUserIdExist(A)) { + e = !0; + break + } + return e + } + , + ly.prototype.getNodeInfosByUserId = function(A) { + var e = []; + for (var t in this.models) { + var i = this.models[t]; + if (i && i.isLoaded()) { + var o = this.models[t].getModelDescriptor().getNodeInfosByUserId(A); + o && (e = e.concat(o)) + } + } + for (var n = 0, r = this.plugins.length; r > n; n += 1) + if (this.plugins[n].getNodeInfosByUserId) { + var a = this.plugins[n].getNodeInfosByUserId(A); + a && (e = e.concat(a)) + } + return e.length ? e : null + } + , + ly.prototype.getNodeInfos = function() { + var A = {}; + for (var e in this.models) + if (this.models[e].isLoaded()) { + var t = this.models[e].getModelDescriptor().getAllNodeInfos(); + t && (A[e] = t) + } + var i = this.getNodeInfosInPlugins(); + return Object.assign(A, i), + A + } + , + ly.prototype.getNodeInfosInPlugins = function() { + for (var A = {}, e = 0, t = this.plugins.length; t > e; e += 1) + this.plugins[e].getAllNodeInfos && this.plugins[e].getAllNodeInfos(A); + return A + } + , + ly.prototype.getMaterialByNodeId = function(A, e, t) { + var i = this.models[A]; + if (!i) + return null; + for (var o = i.getModelDescriptor().getNodeInfosByUserId(e), n = -1, r = 0, a = o.length; a > r; r += 1) + if (o[r].nodeId === t) { + n = r; + break + } + return -1 !== n ? i.getMaterialByMaterialId(o[n].materialId) : null + } + , + ly.prototype.getNodeInfoByNodeId = function(A, e, t) { + var i = this.models[A]; + if (!i) + return null; + for (var o = i.getModelDescriptor().getNodeInfosByUserId(e), n = -1, r = 0, a = o.length; a > r; r += 1) + if (o[r].nodeId === t) { + n = r; + break + } + return -1 !== n ? o[n] : null + } + , + ly.prototype.getComponentInfoByUserId = function(A) { + var e = this.getNodeInfosByUserId(A); + if (e && e.length > 0) { + for (var t = new aA, i = [], o = 0, n = e.length; n > o; o += 1) + t.union(e[o].boundingBox), + -1 === i.indexOf(e[o].materialId) && i.push(e[o].materialId); + return { + userId: A, + state: 0, + materials: i, + boundingBox: t, + userData: e[0].userData + } + } + return null + } + , + ly.prototype.getBoundingBoxByIds = function(A) { + var e = this.getScene() + , t = new aA; + for (var i in A) + if (!this.isHiddenUserId(i)) { + Array.isArray(A) && (i = A[i]); + var o = this.getComponentInfoByUserId(i); + if (o) + t.union(o.boundingBox); + else { + var n = e.getExtrudeBodyManager().getNode(i); + if (n) { + var r = n.geometry.boundingBox.clone(); + n.matrix && r.applyMatrix4(n.matrix), + t.union(r) + } + } + } + return t + } + , + ly.prototype.createMaterialOverrideSet = function(A, e) { + this.materialOverrideSet = new MaterialOverriderSet(A,e), + vc.EnableTextureMapping = !0 + } + , + ly.prototype.getMaterialOverrideSet = function() { + return this.materialOverrideSet + } + , + ly.prototype.getOverrideMaterialByNodeInfo = function(A) { + return this.materialOverrideSet ? this.materialOverrideSet.getOverrideMaterialByNodeInfo(A) : null + } + , + ly.prototype.getOverrideMaterialByName = function(A) { + return this.materialOverrideSet ? this.materialOverrideSet.getOverrideMaterialByName(A) : null + } + , + ly.prototype.loadOverrideMaterialsByDemand = function(A, e) { + if (this.materialOverrideSet) { + var t = this.getConditions(); + this.materialOverrideSet.loadByDemand(t, A, e) + } else + e && e() + } + , + ly.prototype.getConditions = function() { + var A = {} + , e = {} + , t = {}; + for (var i in this.models) { + var o = this.models[i].getModelDescriptor().getAllNodeInfos(); + if (o) + for (var i in o) + if (o.hasOwnProperty(i)) + for (var n = 0, r = o[i].length; r > n; n += 1) { + var a = o[i][n].userData; + e[o[i][n].userId] = !0, + t[a.systemTypeId] = !0, + A[a.familyId] = !0 + } + } + return { + familyIds: A, + elementIds: e, + systemTypeIds: t + } + } + , + ly.prototype.isHiddenUserId = function(A) { + var e = !1; + for (var t in this.models) { + if (this.models.hasOwnProperty(t)) + if ((t = this.models[t]).isHiddenUserId(A)) { + e = !0; + break + } + } + return e + } + , + ly.prototype.isHiddenSourceObjectUserId = function(A) { + return !!this.sourceObjectManager && this.sourceObjectManager.isHidden(A) + } + , + ly.prototype.hasHiddenSourceObjectUserId = function() { + return !!this.sourceObjectManager && this.sourceObjectManager.hasHidden() + } + , + ly.prototype.updateMeshNodes = function() { + for (var A in this.models) { + if (this.models.hasOwnProperty(A)) + (A = this.models[A]).updateMeshNodes() + } + } + , + ly.prototype.getMinDistanceObjects = function(A, e) { + var t = this + , i = {}; + for (var o in this.models) + if (this.models.hasOwnProperty(o)) { + (o = this.models[o]).minDistanceObjects = {}; + var n = o.getMeshesByUserIds(A) + , r = o.getMeshesByUserIds(e); + if (n && n.length > 0 && (i[A] = n), + r && r.length > 0 && (i[e] = r), + i[A] && i[e]) + return i + } + var a = null + , s = null + , l = null + , c = null + , h = null + , d = function() { + var i = {} + , o = function(A, e, t) { + var o = {}; + o.mesh = A; + var n = new M; + t ? n.multiplyMatrices(t, A.matrix) : n = A.matrix, + o.matrix = n; + var r = A.geometry.boundingBox; + r || (A.geometry.computeBoundingBox(), + r = o.mesh.geometry.boundingBox); + var a = r.clone().applyMatrix4(n); + o.boundingBox = a, + i[e] && (i[e] = []), + i[e].push(o) + }; + if (!(a = t.scene.getGroup("ExternalComponentManager"))) + return { + v: void 0 + }; + for (l = 0, + c = (s = a.children).length; c > l; l += 1) + (h = s[l]).name !== A && h.name !== e || (uh.isGroupObject(h) ? h.traverseVisible((function(A) { + uh.isMeshObject(A) && o(A, h.name, h.matrix) + } + )) : o(h, h.name)); + return { + v: i + } + }(); + return d && d.v && (d.v[A] && d.v[A].length > 0 && (i[A] = d.v[A]), + d.v[e] && d.v[e].length > 0 && (i[e] = d.v[e]), + i[A] && i[e]) || i[A] && i[e] ? i : null + } + , + ly.prototype.getMeshByUserId = function(A) { + for (var e in this.models) + if (this.models.hasOwnProperty(e)) { + var t = (e = this.models[e]).getMeshesByUserIds(A); + if (t) + return t + } + return null + } + , + ly.prototype.adjustVisibility = function(A) { + for (var e in this.models) + this.models[e] && this.models[e]._getHandler().adjustVisibility(A); + for (var t = 0, i = this.plugins.length; i > t; t += 1) { + var o = this.plugins[t]; + o.adjustVisibility && "function" == typeof o.adjustVisibility && o.adjustVisibility(A) + } + this.otherAdjustVisibility && this.otherAdjustVisibility(A) + } + , + ly.prototype.changeVisibilityOfSelectedObjects = function(A) { + for (var e in this.models) + this.models[e] && this.models[e]._getHandler().changeVisibilityOfSelectedObjects(A); + for (var t = 0, i = this.plugins.length; i > t; t += 1) { + var o = this.plugins[t]; + o.changeVisibilityOfSelectedObjects && "function" == typeof o.changeVisibilityOfSelectedObjects && o.changeVisibilityOfSelectedObjects(A) + } + } + , + ly.prototype.changeVisibilityOfNonSelectedObjects = function(A) { + for (var e in this.models) + this.models[e] && this.models[e]._getHandler().changeVisibilityOfNonSelectedObjects(A); + this.otherAdjustVisibility && this.otherAdjustVisibility(A); + for (var t = 0, i = this.plugins.length; i > t; t += 1) { + var o = this.plugins[t]; + o.changeVisibilityOfNonSelectedObjects && "function" == typeof o.changeVisibilityOfNonSelectedObjects && o.changeVisibilityOfNonSelectedObjects(A) + } + } + , + ly.prototype.adjustInstanceVisibility = function(A) { + for (var e in this.models) + this.models[e] && this.models[e].merged && this.models[e]._getHandler().adjustInstanceVisibility(A) + } + , + ly.prototype.adjustVisibilityOfObjectsWithoutOutline = function(A) { + for (var e in this.models) + if (this.models[e]) { + var t = this.models[e].axisNetManager; + t && t.visibleByUser && (A ? this.models[e].axisNetManager.privateShow() : this.models[e].axisNetManager.privateHide()) + } + for (var i = 0, o = this.plugins.length; o > i; i += 1) { + var n = this.plugins[i]; + n.adjustVisibilityOfObjectsWithoutOutline && "function" == typeof n.adjustVisibilityOfObjectsWithoutOutline && n.adjustVisibilityOfObjectsWithoutOutline(A) + } + var r; + this.scene.hasClipPlanes() && ((r = this.scene.getClipPlanes()).isEnabled() && (!1 === A && r.visible ? (r.visible = !1, + r._hideByModelManager = !0) : !0 === A && r._hideByModelManager && (r.visible = !0, + delete r._hideByModelManager))); + this.scene.hasFillClipPlanes() && ((r = this.scene.getFillClipPlane()).isEnabled() && (!1 === A && r.visible ? (r.visible = !1, + r._hideByModelManager = !0) : !0 === A && r._hideByModelManager && (r.visible = !0, + delete r._hideByModelManager))); + this.scene.receivingPlane && (!1 === A && this.scene.receivingPlane.visible ? (this.scene.receivingPlane.visible = !1, + this.scene.receivingPlane._hideByModelManager = !0) : !0 === A && this.scene.receivingPlane._hideByModelManager && (this.scene.receivingPlane.visible = !0, + delete this.scene.receivingPlane._hideByModelManager)), + this.otherAdjustVisibility && this.otherAdjustVisibility(A); + for (var a = this.scene.children, s = (i = 0, + a.length); s > i; i += 1) { + var l = a[i]; + l !== this.scene.objectGroups && !0 !== l.isLight && !0 === l.isObject3D && (l.visible = A) + } + } + , + ly.prototype.changeInstanceVisibilityOfSelectedObjects = function(A) { + for (var e in this.models) + this.models[e] && this.models[e].merged && this.models[e]._getHandler().changeInstanceVisibilityOfSelectedObjects(A) + } + , + ly.prototype.changeInstanceVisibilityOfNonSelectedObjects = function(A) { + for (var e in this.models) + this.models[e] && this.models[e].merged && this.models[e]._getHandler().changeInstanceVisibilityOfNonSelectedObjects(A) + } + , + ly.prototype.restoreVisibilityOfObjects = function() { + for (var A in this.models) + this.models[A] && this.models[A]._getHandler().restoreVisibilityOfObjects(); + this.otherAdjustVisibility && this.otherAdjustVisibility(!0) + } + , + ly.prototype.getComponentKeysByTypeFromList = function(A, e) { + var t = []; + for (var i in this.models) { + if (this.models.hasOwnProperty(i)) + if ((i = this.models[i]).isLoaded()) { + var o = i.getComponentKeysByTypeFromList(A, e); + o && (t = t.concat(o)) + } + } + return t + } + , + ly.prototype.getComponentKeysByType = function(A) { + var e = []; + for (var t in this.models) { + if (this.models.hasOwnProperty(t)) + if ((t = this.models[t]).isLoaded()) { + var i = t.getComponentKeysByType(A); + i && (e = e.concat(i)) + } + } + return e + } + , + ly.prototype.getComponentKeysByName = function(A) { + var e = []; + for (var t in this.models) + if (this.models.hasOwnProperty(t)) { + var i = (t = this.models[t]).getComponentKeysByName(A); + i && (e = e.concat(i)) + } + return e + } + , + ly.prototype.getComponentKeysByProperty = function(A, e) { + var t = []; + for (var i in this.models) + if (this.models.hasOwnProperty(i)) { + var o = (i = this.models[i]).getComponentKeysByProperty(A, e); + o && (t = t.concat(o)) + } + return t + } + , + ly.prototype.getBlinkMaterials = function() { + var A = []; + for (var e in this.models) + this.models[e] && this.models[e]._getHandler().getBlinkMaterials && (A = A.concat(this.models[e]._getHandler().getBlinkMaterials())); + return A + } + , + ly.prototype.resetBlinkMaterial = function() { + for (var A = this.getBlinkMaterials(), e = 0, t = A.length; t > e; e += 1) + A[e].resetBlinkUniformValue() + } + , + ly.prototype.updateBlinkMaterial = function() { + if (null !== this.blinkStartTime) { + if (Date.now() - this.blinkStartTime >= this.blinkIntervalTime) { + this.blinkStartTime = Date.now(), + this.indexSwitch = !this.indexSwitch; + for (var A = this.indexSwitch ? Yc.BLINK : Yc.NONE, e = this.getBlinkMaterials(), t = 0, i = e.length; i > t; t += 1) + e[t].updateBlinkUniformValue(A, this.blinkColor) + } + } else + this.blinkStartTime = Date.now() + } + , + ly.prototype.getBlinkColor = function() { + return this.blinkColor + } + , + ly.prototype.setBlinkColor = function(A, e) { + if (A) { + var t = uh.hexToRgb(A); + this.blinkColor.fromArray([t.r, t.g, t.b, e || 1]) + } else + this.blinkColor.set(this.defaultBlinkColor.r, this.defaultBlinkColor.g, this.defaultBlinkColor.b, this.defaultBlinkAlpha) + } + , + ly.prototype.setBlinkIntervalTime = function(A) { + this.blinkIntervalTime > 0 && (this.blinkIntervalTime = A) + } + , + ly.prototype.enableBlink = function(A) { + this.blinkEnabled = A, + A ? null === this.blinkStartTime && (this.blinkStartTime = Date.now()) : (this.blinkStartTime = null, + this.resetBlinkMaterial()), + this.applyBlink() + } + , + ly.prototype.getBlinkEnabled = function() { + return !this.isBlinkPermited() && this.blinkEnabled + } + , + ly.prototype.getBlinkComponentsIdMap = function() { + return this.isBlinkPermited() ? null : this.sceneState.getBlinkComponentsIdMap() + } + , + ly.prototype.applyBlink = function() { + if (!this.isBlinkPermited()) + for (var A in this.selectPriority = !1, + this.models) { + this.models[A].applyBlink() + } + } + , + ly.prototype.clearBlink = function() { + if (!this.isBlinkPermited()) + for (var A in this.selectPriority = !1, + this.models) { + this.models[A].clearBlink() + } + } + , + ly.prototype.permitBlink = function(A) { + this.blinkPermited = A + } + , + ly.prototype.isBlinkPermited = function() { + return this.blinkPermited + } + , + ly.prototype.isSelectPriority = function() { + return this.selectPriority + } + , + ly.prototype.getSceneState = function() { + return this.sceneState + } + , + ly.prototype.getModelSceneState = function() { + return this.modelState + } + , + ly.prototype.disposeBufferAfterVbo = function() { + if (vc.EnableDisposeBufferAfterVbo) + for (var A in this.models) { + this.models[A].disposeBufferAfterVbo() + } + } + , + ly.prototype.getSourceObjectManager = function() { + return this.sourceObjectManager || (this.sourceObjectManager = new ry), + this.sourceObjectManager + } + , + ly.prototype.isHiddenUserId = function(A) { + return !!this.sourceObjectManager && this.sourceObjectManager.isHidden(A) + } + , + ly.prototype.hasHiddenUserId = function() { + return !!this.sourceObjectManager && this.sourceObjectManager.hasHidden() + } + , + ly.prototype.traverseModels = function(A, e) { + for (var t in this.models) { + var i = this.models[t]; + if (e && e(i)) + break; + A && A(i) + } + } + , + ly.prototype.traverseLoadedModels = function(A) { + for (var e in this.models) { + var t = this.models[e]; + t && t.isLoaded() && A(t) + } + } + , + ly.prototype.getStatisticsInfo = function() { + var A = 0 + , e = 0 + , t = 0 + , i = 0; + for (var o in this.models) { + var n = this.models[o]; + if (n && n.isLoaded()) { + var r = n.getTrianglesCount(); + A += r.positionsCount, + e += r.trianglesCount, + t += r.realPositionCount, + i += r.realTrianglesCount + } + } + return { + positionsCount: A, + trianglesCount: e, + realPositionCount: t, + realTrianglesCount: i, + componentCount: this.getAllComponentsKey().length + } + } + , + ly.prototype.dealStateChanged = function() { + this.hasModelDataReady() && (this.isRenderStateChanged() || this.filter.isStateChanged()) && (this.isRenderStateChanged() && this.setRenderStateChanged(!1), + this.filter.isStateChanged() && this.filter.disableStateChanged(), + this.applyFilter()) + } + , + ly.prototype.setRenderStateChanged = function(A) { + this._renderStateChanged = A + } + , + ly.prototype.isRenderStateChanged = function() { + return this._renderStateChanged + } + , + ly.prototype.hasLoadOnDemandDirector = function() { + return !!this.loadOnDemandDirector + } + , + ly.prototype.getLoadOnDemandDirector = function() { + return this.loadOnDemandDirector || (this.loadOnDemandDirector = new sy(this)), + this.loadOnDemandDirector + } + , + ly.prototype.checkLayerDataLoading = function() { + return !!(this.isLayerData() && this.hasLoadOnDemandDirector() && this.getLoadOnDemandDirector().isLoading()) && (this.filter.isStateChanged() && this.filter.disableStateChanged(), + !0) + } + , + ly.prototype.updateFilterManager = function() { + var A = this.getNodeInfos() + , e = this.filter; + e.clearFilterManager(), + e.initFilterManager(A), + e.isStateChanged() && e.disableStateChanged(), + this.updateMeshNodes(), + this.applyFilter() + } + , + ly.prototype.isDrawingBoardlineEnabled = function() { + return !(!vc.DrawingBoardlineEnabled || vc.DrawingStyle !== jc.BOARDLINE && vc.DrawingStyle !== jc.SHADINGWITHLINE) + } + , + ly.prototype.isOnlyWireframe = function() { + return vc.DrawingStyle === jc.BOARDLINE + } + , + ly.prototype.getExplosionExtent = function() { + return this.explosionExtent + } + , + ly.prototype.setExplosionExtent = function(A) { + var e = A - this.explosionExtent; + for (var t in this.models) + this.models[t] && this.models[t].explode(e); + this.explosionExtent = A + } + , + ly.prototype.updateAnimation = function() { + var A = this.viewerImpl.clock.getDelta(); + for (var e in this.models) + if (this.models.hasOwnProperty(e)) { + var t = this.models[e]; + if (t.hasAnimation && t.mixer) { + var i = t.mixer; + t.singleStepMode ? (i.update(t.sizeOfNextStep), + t.sizeOfNextStep = 0) : i.update(A) + } + } + } + , + ly.prototype.needUpdateAnimation = function() { + for (var A in this.models) + if (this.models.hasOwnProperty(A)) { + var e = this.models[A]; + if (e.hasAnimation && e.mixer && e.needUpdate) + return !0 + } + return !1 + } + , + ly.prototype.unloadGeopkOnDemand = function(A, e) { + var t = this.models; + for (var i in t) + if (t.hasOwnProperty(i)) { + var o = t[i]; + o.isLoaded() && !o.isEmptyScene() && o.isLayerData() && o.unloadGeopkOnDemand(A, e) + } + } + , + ly.prototype.loadGeopkOnDemand = function(A, e, t, i) { + this.getLoadOnDemandDirector().loadGeopkOnDemandByConditions(A, e, t, i) + } + , + ly.prototype.loadAllGeosOnDemand = function(A, e) { + var t = this.models; + for (var i in t) + if (t.hasOwnProperty(i)) { + var o = t[i]; + o.isLoaded() && !o.isEmptyScene() && o.isLayerData() && o.loadAllGeosOnDemand(A, e) + } + } + , + ly.prototype.getBoundingBoxOnDemand = function() { + var A = this.models + , e = new aA; + for (var t in A) + if (A.hasOwnProperty(t)) { + var i = A[t]; + if (i.isLoaded() && !i.isEmptyScene() && i.isLayerData()) { + var o = i.getUnionBoundingBoxOnDemand(); + o && e.union(o) + } + } + return e + } + , + ly.prototype.setConditionsOnDemandLoad = function(A) { + this.conditionsOnDemandLoad = A; + var e = this.models; + for (var t in e) + if (e.hasOwnProperty(t)) { + var i = e[t]; + i.isLoaded() && !i.isEmptyScene() && i.isLayerData() && i.setConditionsChangedOnDemand(!0) + } + } + , + ly.prototype.getConditionsOnDemandLoad = function() { + return this.conditionsOnDemandLoad + } + , + ly.prototype.componentsExplosion = function(A) { + var e = this.models; + for (var t in e) { + if (e.hasOwnProperty(t)) + e[t].componentsExplosion(A) + } + } + , + ly.prototype.closeComponentsExplosion = function(A) { + var e = this.models; + for (var t in e) { + if (e.hasOwnProperty(t)) + e[t].closeComponentsExplosion(A) + } + } + , + ly.prototype.canFloorExplosion = function() { + var A = this.models + , e = !1; + for (var t in A) { + if (A.hasOwnProperty(t)) + A[t].floorManager && (e = !0) + } + return e + } + , + ly.prototype.floorExplosion = function(A) { + var e = this.models + , t = !1; + for (var i in e) { + if (e.hasOwnProperty(i)) + e[i].floorExplosion(A) && (this.updateSceneBoundingBox(), + t = !0) + } + return t + } + , + ly.prototype.closeFloorExplosion = function() { + var A = this.models; + for (var e in A) { + if (A.hasOwnProperty(e)) + A[e].closeFloorExplosion() + } + } + , + ly.prototype.checkTilesDataChanged = function(A, e) { + if (!this.cameraPosition.equals(A.position) || this.cameraFov !== A.fov || this.domElementWidth !== e.domElement.width) { + this.cameraFov = A.fov || 45, + this.cameraPosition = A.position.clone() || new y, + this.domElementWidth = e.domElement.width || 1e3; + var t = !1 + , i = this.checkMemory(); + for (var o in i > vc.MaximumAvailableMemory && (t = !0), + this.models) + if (this.models.hasOwnProperty(o)) { + var n = this.models[o]; + n.isTilesModel && n.checkTilesDataChanged(t) + } + } + } + , + ly.prototype.checkMemory = function() { + var A = 0 + , e = this.viewerImpl.getRenderer().info; + return A += 6 * (e.render.triangles || 0), + A += 1024 * (e.memory.textures || 0) * 1024 / 4, + A += 1024 * (e.render.calls || 0) / 4, + A += 1024 * (e.memory.geometries || 0) / 4, + A *= 1 / 1048576, + A = Math.ceil(A) + } + , + ly.prototype.getMeshIdFromOctantMap = function(A) { + return A.single ? A.nodeId : A.instanceOrNot ? uh.getCombinedKeyString(A.uv2Info ? [A.materialId, A.geometryId, A.uv2Info.byteOffset] : [A.materialId, A.geometryId]) : vc.MergeComponent ? uh.getCombinedKeyString([A.materialId, A.uv ? "1" : "0", A.type === $u.EnumNodeItemType.LINE ? "lines" : "meshes"]) : A.nodeId + } + ; + var cy, hy, dy, py = { + uniforms: { + tDiffuse: { + value: null + }, + opacity: { + value: 1 + } + }, + vertexShader: ["varying vec2 vUv;", "void main() {", "vUv = uv;", "gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );", "}"].join("\n"), + fragmentShader: ["uniform float opacity;", "uniform sampler2D tDiffuse;", "varying vec2 vUv;", "void main() {", "vec4 texel = texture2D( tDiffuse, vUv );", "gl_FragColor = opacity * texel;", "}"].join("\n") + }; + function gy() { + this.enabled = !0, + this.needsSwap = !0, + this.clear = !1, + this.renderToScreen = !1 + } + Object.assign(gy.prototype, { + setSize: function() {}, + render: function() { + console.error("THREE.Pass: .render() must be implemented in derived pass.") + } + }), + gy.FullScreenQuad = (cy = new Ka(-1,1,1,-1,0,1), + hy = new et(2,2), + dy = function(A) { + this._mesh = new Ue(hy,A) + } + , + Object.defineProperty(dy.prototype, "material", { + get: function() { + return this._mesh.material + }, + set: function(A) { + this._mesh.material = A + } + }), + Object.assign(dy.prototype, { + render: function(A) { + A.render(this._mesh, cy) + } + }), + dy); + var uy = function(A, e) { + gy.call(this), + this.textureID = void 0 !== e ? e : "tDiffuse", + A instanceof Pe ? (this.uniforms = A.uniforms, + this.material = A) : A && (this.uniforms = Ge.clone(A.uniforms), + this.material = new Pe({ + defines: Object.assign({}, A.defines), + uniforms: this.uniforms, + vertexShader: A.vertexShader, + fragmentShader: A.fragmentShader + })), + this.fsQuad = new gy.FullScreenQuad(this.material) + }; + uy.prototype = Object.assign(Object.create(gy.prototype), { + constructor: uy, + render: function(A, e, t) { + this.uniforms[this.textureID] && (this.uniforms[this.textureID].value = t.texture), + this.fsQuad.material = this.material, + this.renderToScreen ? (A.setRenderTarget(null), + this.fsQuad.render(A)) : (A.setRenderTarget(e), + this.clear && A.clear(A.autoClearColor, A.autoClearDepth, A.autoClearStencil), + this.fsQuad.render(A)) + } + }); + var fy = function(A, e) { + gy.call(this), + this.scene = A, + this.camera = e, + this.clear = !0, + this.needsSwap = !1, + this.inverse = !1 + }; + fy.prototype = Object.assign(Object.create(gy.prototype), { + constructor: fy, + render: function(A, e, t) { + var i = A.getContext() + , o = A.state; + o.buffers.color.setMask(!1), + o.buffers.depth.setMask(!1), + o.buffers.color.setLocked(!0), + o.buffers.depth.setLocked(!0); + var n = null + , r = null; + this.inverse ? (r = 0, + n = 1) : (r = 1, + n = 0), + o.buffers.stencil.setTest(!0), + o.buffers.stencil.setOp(i.REPLACE, i.REPLACE, i.REPLACE), + o.buffers.stencil.setFunc(i.ALWAYS, r, 4294967295), + o.buffers.stencil.setClear(n), + o.buffers.stencil.setLocked(!0), + A.setRenderTarget(t), + this.clear && A.clear(), + A.render(this.scene, this.camera), + A.setRenderTarget(e), + this.clear && A.clear(), + A.render(this.scene, this.camera), + o.buffers.color.setLocked(!1), + o.buffers.depth.setLocked(!1), + o.buffers.stencil.setLocked(!1), + o.buffers.stencil.setFunc(i.EQUAL, 1, 4294967295), + o.buffers.stencil.setOp(i.KEEP, i.KEEP, i.KEEP), + o.buffers.stencil.setLocked(!0) + } + }); + var my = function() { + gy.call(this), + this.needsSwap = !1 + }; + my.prototype = Object.create(gy.prototype), + Object.assign(my.prototype, { + render: function(A) { + A.state.buffers.stencil.setLocked(!1), + A.state.buffers.stencil.setTest(!1) + } + }); + var Cy = function(A, e) { + if (this.renderer = A, + void 0 === e) { + var t = { + minFilter: 1006, + magFilter: 1006, + format: 1023, + stencilBuffer: !1 + } + , i = A.getSize(new s); + this._pixelRatio = A.getPixelRatio(), + this._width = i.width, + this._height = i.height, + (e = new g(this._width * this._pixelRatio,this._height * this._pixelRatio,t)).texture.name = "EffectComposer.rt1" + } else + this._pixelRatio = 1, + this._width = e.width, + this._height = e.height; + this.renderTarget1 = e, + this.renderTarget2 = e.clone(), + this.renderTarget2.texture.name = "EffectComposer.rt2", + this.writeBuffer = this.renderTarget1, + this.readBuffer = this.renderTarget2, + this.renderToScreen = !0, + this.passes = [], + void 0 === py && console.error("THREE.EffectComposer relies on CopyShader"), + void 0 === uy && console.error("THREE.EffectComposer relies on ShaderPass"), + this.copyPass = new uy(py), + this.clock = new as + }; + Object.assign(Cy.prototype, { + swapBuffers: function() { + var A = this.readBuffer; + this.readBuffer = this.writeBuffer, + this.writeBuffer = A + }, + addPass: function(A) { + this.passes.push(A), + A.setSize(this._width * this._pixelRatio, this._height * this._pixelRatio) + }, + insertPass: function(A, e) { + this.passes.splice(e, 0, A) + }, + isLastEnabledPass: function(A) { + for (var e = A + 1; this.passes.length > e; e += 1) + if (this.passes[e].enabled) + return !1; + return !0 + }, + render: function(A) { + void 0 === A && (A = this.clock.getDelta()); + var e = this.renderer.getRenderTarget() + , t = !1 + , i = null + , o = null + , n = this.passes.length; + for (o = 0; n > o; o += 1) + if (!1 !== (i = this.passes[o]).enabled) { + if (i.renderToScreen = this.renderToScreen && this.isLastEnabledPass(o), + i.render(this.renderer, this.writeBuffer, this.readBuffer, A, t), + i.needsSwap) { + if (t) { + var r = this.renderer.getContext() + , a = this.renderer.state.buffers.stencil; + a.setFunc(r.NOTEQUAL, 1, 4294967295), + this.copyPass.render(this.renderer, this.writeBuffer, this.readBuffer, A), + a.setFunc(r.EQUAL, 1, 4294967295) + } + this.swapBuffers() + } + void 0 !== fy && (i instanceof fy ? t = !0 : i instanceof my && (t = !1)) + } + this.renderer.setRenderTarget(e) + }, + reset: function(A) { + if (void 0 === A) { + var e = this.renderer.getSize(new s); + this._pixelRatio = this.renderer.getPixelRatio(), + this._width = e.width, + this._height = e.height, + (A = this.renderTarget1.clone()).setSize(this._width * this._pixelRatio, this._height * this._pixelRatio) + } + this.renderTarget1.dispose(), + this.renderTarget2.dispose(), + this.renderTarget1 = A, + this.renderTarget2 = A.clone(), + this.writeBuffer = this.renderTarget1, + this.readBuffer = this.renderTarget2 + }, + setSize: function(A, e) { + this._width = A, + this._height = e; + var t = this._width * this._pixelRatio + , i = this._height * this._pixelRatio; + this.renderTarget1.setSize(t, i), + this.renderTarget2.setSize(t, i); + for (var o = 0; this.passes.length > o; o += 1) + this.passes[o].setSize(t, i) + }, + setPixelRatio: function(A) { + this._pixelRatio = A, + this.setSize(this._width, this._height) + } + }); + var yy = function() { + this.enabled = !0, + this.needsSwap = !0, + this.clear = !1, + this.renderToScreen = !1 + }; + Object.assign(yy.prototype, { + setSize: function() {}, + render: function() { + console.error("THREE.Pass: .render() must be implemented in derived pass.") + } + }), + yy.FullScreenQuad = function() { + var A = new Ka(-1,1,1,-1,0,1) + , e = new et(2,2) + , t = function(A) { + this._mesh = new Ue(e,A) + }; + return Object.defineProperty(t.prototype, "material", { + get: function() { + return this._mesh.material + }, + set: function(A) { + this._mesh.material = A + } + }), + Object.assign(t.prototype, { + render: function(e) { + e.render(this._mesh, A) + } + }), + t + }(); + var vy = { + uniforms: { + tDiffuse: { + value: null + }, + resolution: { + value: new s(1 / 1024,1 / 512) + } + }, + vertexShader: ["varying vec2 vUv;", "void main() {", "vUv = uv;", "gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );", "}"].join("\n"), + fragmentShader: ["precision highp float;", "", "uniform sampler2D tDiffuse;", "", "uniform vec2 resolution;", "", "varying vec2 vUv;", "", "// FXAA 3.11 implementation by NVIDIA, ported to WebGL by Agost Biro (biro@archilogic.com)", "", "//----------------------------------------------------------------------------------", "// File: es3-kepler FXAA assets shaders/FXAA_DefaultES.frag", "// SDK Version: v3.00", "// Email: gameworks@nvidia.com", "// Site: http://developer.nvidia.com/", "//", "// Copyright (c) 2014-2015, NVIDIA CORPORATION. All rights reserved.", "//", "// Redistribution and use in source and binary forms, with or without", "// modification, are permitted provided that the following conditions", "// are met:", "// * Redistributions of source code must retain the above copyright", "// notice, this list of conditions and the following disclaimer.", "// * Redistributions in binary form must reproduce the above copyright", "// notice, this list of conditions and the following disclaimer in the", "// documentation and/or other materials provided with the distribution.", "// * Neither the name of NVIDIA CORPORATION nor the names of its", "// contributors may be used to endorse or promote products derived", "// from this software without specific prior written permission.", "//", "// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY", "// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE", "// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR", "// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR", "// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,", "// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,", "// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR", "// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY", "// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT", "// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE", "// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.", "//", "//----------------------------------------------------------------------------------", "", "#define FXAA_PC 1", "#define FXAA_GLSL_100 1", "#define FXAA_QUALITY_PRESET 12", "", "#define FXAA_GREEN_AS_LUMA 1", "", "/*--------------------------------------------------------------------------*/", "#ifndef FXAA_PC_CONSOLE", " //", " // The console algorithm for PC is included", " // for developers targeting really low spec machines.", " // Likely better to just run FXAA_PC, and use a really low preset.", " //", " #define FXAA_PC_CONSOLE 0", "#endif", "/*--------------------------------------------------------------------------*/", "#ifndef FXAA_GLSL_120", " #define FXAA_GLSL_120 0", "#endif", "/*--------------------------------------------------------------------------*/", "#ifndef FXAA_GLSL_130", " #define FXAA_GLSL_130 0", "#endif", "/*--------------------------------------------------------------------------*/", "#ifndef FXAA_HLSL_3", " #define FXAA_HLSL_3 0", "#endif", "/*--------------------------------------------------------------------------*/", "#ifndef FXAA_HLSL_4", " #define FXAA_HLSL_4 0", "#endif", "/*--------------------------------------------------------------------------*/", "#ifndef FXAA_HLSL_5", " #define FXAA_HLSL_5 0", "#endif", "/*==========================================================================*/", "#ifndef FXAA_GREEN_AS_LUMA", " //", " // For those using non-linear color,", " // and either not able to get luma in alpha, or not wanting to,", " // this enables FXAA to run using green as a proxy for luma.", " // So with this enabled, no need to pack luma in alpha.", " //", " // This will turn off AA on anything which lacks some amount of green.", " // Pure red and blue or combination of only R and B, will get no AA.", " //", " // Might want to lower the settings for both,", " // fxaaConsoleEdgeThresholdMin", " // fxaaQualityEdgeThresholdMin", " // In order to insure AA does not get turned off on colors", " // which contain a minor amount of green.", " //", " // 1 = On.", " // 0 = Off.", " //", " #define FXAA_GREEN_AS_LUMA 0", "#endif", "/*--------------------------------------------------------------------------*/", "#ifndef FXAA_EARLY_EXIT", " //", " // Controls algorithm's early exit path.", " // On PS3 turning this ON adds 2 cycles to the shader.", " // On 360 turning this OFF adds 10ths of a millisecond to the shader.", " // Turning this off on console will result in a more blurry image.", " // So this defaults to on.", " //", " // 1 = On.", " // 0 = Off.", " //", " #define FXAA_EARLY_EXIT 1", "#endif", "/*--------------------------------------------------------------------------*/", "#ifndef FXAA_DISCARD", " //", " // Only valid for PC OpenGL currently.", " // Probably will not work when FXAA_GREEN_AS_LUMA = 1.", " //", " // 1 = Use discard on pixels which don't need AA.", " // For APIs which enable concurrent TEX+ROP from same surface.", " // 0 = Return unchanged color on pixels which don't need AA.", " //", " #define FXAA_DISCARD 0", "#endif", "/*--------------------------------------------------------------------------*/", "#ifndef FXAA_FAST_PIXEL_OFFSET", " //", " // Used for GLSL 120 only.", " //", " // 1 = GL API supports fast pixel offsets", " // 0 = do not use fast pixel offsets", " //", " #ifdef GL_EXT_gpu_shader4", " #define FXAA_FAST_PIXEL_OFFSET 1", " #endif", " #ifdef GL_NV_gpu_shader5", " #define FXAA_FAST_PIXEL_OFFSET 1", " #endif", " #ifdef GL_ARB_gpu_shader5", " #define FXAA_FAST_PIXEL_OFFSET 1", " #endif", " #ifndef FXAA_FAST_PIXEL_OFFSET", " #define FXAA_FAST_PIXEL_OFFSET 0", " #endif", "#endif", "/*--------------------------------------------------------------------------*/", "#ifndef FXAA_GATHER4_ALPHA", " //", " // 1 = API supports gather4 on alpha channel.", " // 0 = API does not support gather4 on alpha channel.", " //", " #if (FXAA_HLSL_5 == 1)", " #define FXAA_GATHER4_ALPHA 1", " #endif", " #ifdef GL_ARB_gpu_shader5", " #define FXAA_GATHER4_ALPHA 1", " #endif", " #ifdef GL_NV_gpu_shader5", " #define FXAA_GATHER4_ALPHA 1", " #endif", " #ifndef FXAA_GATHER4_ALPHA", " #define FXAA_GATHER4_ALPHA 0", " #endif", "#endif", "", "", "/*============================================================================", " FXAA QUALITY - TUNING KNOBS", "------------------------------------------------------------------------------", "NOTE the other tuning knobs are now in the shader function inputs!", "============================================================================*/", "#ifndef FXAA_QUALITY_PRESET", " //", " // Choose the quality preset.", " // This needs to be compiled into the shader as it effects code.", " // Best option to include multiple presets is to", " // in each shader define the preset, then include this file.", " //", " // OPTIONS", " // -----------------------------------------------------------------------", " // 10 to 15 - default medium dither (10=fastest, 15=highest quality)", " // 20 to 29 - less dither, more expensive (20=fastest, 29=highest quality)", " // 39 - no dither, very expensive", " //", " // NOTES", " // -----------------------------------------------------------------------", " // 12 = slightly faster then FXAA 3.9 and higher edge quality (default)", " // 13 = about same speed as FXAA 3.9 and better than 12", " // 23 = closest to FXAA 3.9 visually and performance wise", " // _ = the lowest digit is directly related to performance", " // _ = the highest digit is directly related to style", " //", " #define FXAA_QUALITY_PRESET 12", "#endif", "", "", "/*============================================================================", "", " FXAA QUALITY - PRESETS", "", "============================================================================*/", "", "/*============================================================================", " FXAA QUALITY - MEDIUM DITHER PRESETS", "============================================================================*/", "#if (FXAA_QUALITY_PRESET == 10)", " #define FXAA_QUALITY_PS 3", " #define FXAA_QUALITY_P0 1.5", " #define FXAA_QUALITY_P1 3.0", " #define FXAA_QUALITY_P2 12.0", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_QUALITY_PRESET == 11)", " #define FXAA_QUALITY_PS 4", " #define FXAA_QUALITY_P0 1.0", " #define FXAA_QUALITY_P1 1.5", " #define FXAA_QUALITY_P2 3.0", " #define FXAA_QUALITY_P3 12.0", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_QUALITY_PRESET == 12)", " #define FXAA_QUALITY_PS 5", " #define FXAA_QUALITY_P0 1.0", " #define FXAA_QUALITY_P1 1.5", " #define FXAA_QUALITY_P2 2.0", " #define FXAA_QUALITY_P3 4.0", " #define FXAA_QUALITY_P4 12.0", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_QUALITY_PRESET == 13)", " #define FXAA_QUALITY_PS 6", " #define FXAA_QUALITY_P0 1.0", " #define FXAA_QUALITY_P1 1.5", " #define FXAA_QUALITY_P2 2.0", " #define FXAA_QUALITY_P3 2.0", " #define FXAA_QUALITY_P4 4.0", " #define FXAA_QUALITY_P5 12.0", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_QUALITY_PRESET == 14)", " #define FXAA_QUALITY_PS 7", " #define FXAA_QUALITY_P0 1.0", " #define FXAA_QUALITY_P1 1.5", " #define FXAA_QUALITY_P2 2.0", " #define FXAA_QUALITY_P3 2.0", " #define FXAA_QUALITY_P4 2.0", " #define FXAA_QUALITY_P5 4.0", " #define FXAA_QUALITY_P6 12.0", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_QUALITY_PRESET == 15)", " #define FXAA_QUALITY_PS 8", " #define FXAA_QUALITY_P0 1.0", " #define FXAA_QUALITY_P1 1.5", " #define FXAA_QUALITY_P2 2.0", " #define FXAA_QUALITY_P3 2.0", " #define FXAA_QUALITY_P4 2.0", " #define FXAA_QUALITY_P5 2.0", " #define FXAA_QUALITY_P6 4.0", " #define FXAA_QUALITY_P7 12.0", "#endif", "", "/*============================================================================", " FXAA QUALITY - LOW DITHER PRESETS", "============================================================================*/", "#if (FXAA_QUALITY_PRESET == 20)", " #define FXAA_QUALITY_PS 3", " #define FXAA_QUALITY_P0 1.5", " #define FXAA_QUALITY_P1 2.0", " #define FXAA_QUALITY_P2 8.0", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_QUALITY_PRESET == 21)", " #define FXAA_QUALITY_PS 4", " #define FXAA_QUALITY_P0 1.0", " #define FXAA_QUALITY_P1 1.5", " #define FXAA_QUALITY_P2 2.0", " #define FXAA_QUALITY_P3 8.0", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_QUALITY_PRESET == 22)", " #define FXAA_QUALITY_PS 5", " #define FXAA_QUALITY_P0 1.0", " #define FXAA_QUALITY_P1 1.5", " #define FXAA_QUALITY_P2 2.0", " #define FXAA_QUALITY_P3 2.0", " #define FXAA_QUALITY_P4 8.0", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_QUALITY_PRESET == 23)", " #define FXAA_QUALITY_PS 6", " #define FXAA_QUALITY_P0 1.0", " #define FXAA_QUALITY_P1 1.5", " #define FXAA_QUALITY_P2 2.0", " #define FXAA_QUALITY_P3 2.0", " #define FXAA_QUALITY_P4 2.0", " #define FXAA_QUALITY_P5 8.0", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_QUALITY_PRESET == 24)", " #define FXAA_QUALITY_PS 7", " #define FXAA_QUALITY_P0 1.0", " #define FXAA_QUALITY_P1 1.5", " #define FXAA_QUALITY_P2 2.0", " #define FXAA_QUALITY_P3 2.0", " #define FXAA_QUALITY_P4 2.0", " #define FXAA_QUALITY_P5 3.0", " #define FXAA_QUALITY_P6 8.0", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_QUALITY_PRESET == 25)", " #define FXAA_QUALITY_PS 8", " #define FXAA_QUALITY_P0 1.0", " #define FXAA_QUALITY_P1 1.5", " #define FXAA_QUALITY_P2 2.0", " #define FXAA_QUALITY_P3 2.0", " #define FXAA_QUALITY_P4 2.0", " #define FXAA_QUALITY_P5 2.0", " #define FXAA_QUALITY_P6 4.0", " #define FXAA_QUALITY_P7 8.0", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_QUALITY_PRESET == 26)", " #define FXAA_QUALITY_PS 9", " #define FXAA_QUALITY_P0 1.0", " #define FXAA_QUALITY_P1 1.5", " #define FXAA_QUALITY_P2 2.0", " #define FXAA_QUALITY_P3 2.0", " #define FXAA_QUALITY_P4 2.0", " #define FXAA_QUALITY_P5 2.0", " #define FXAA_QUALITY_P6 2.0", " #define FXAA_QUALITY_P7 4.0", " #define FXAA_QUALITY_P8 8.0", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_QUALITY_PRESET == 27)", " #define FXAA_QUALITY_PS 10", " #define FXAA_QUALITY_P0 1.0", " #define FXAA_QUALITY_P1 1.5", " #define FXAA_QUALITY_P2 2.0", " #define FXAA_QUALITY_P3 2.0", " #define FXAA_QUALITY_P4 2.0", " #define FXAA_QUALITY_P5 2.0", " #define FXAA_QUALITY_P6 2.0", " #define FXAA_QUALITY_P7 2.0", " #define FXAA_QUALITY_P8 4.0", " #define FXAA_QUALITY_P9 8.0", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_QUALITY_PRESET == 28)", " #define FXAA_QUALITY_PS 11", " #define FXAA_QUALITY_P0 1.0", " #define FXAA_QUALITY_P1 1.5", " #define FXAA_QUALITY_P2 2.0", " #define FXAA_QUALITY_P3 2.0", " #define FXAA_QUALITY_P4 2.0", " #define FXAA_QUALITY_P5 2.0", " #define FXAA_QUALITY_P6 2.0", " #define FXAA_QUALITY_P7 2.0", " #define FXAA_QUALITY_P8 2.0", " #define FXAA_QUALITY_P9 4.0", " #define FXAA_QUALITY_P10 8.0", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_QUALITY_PRESET == 29)", " #define FXAA_QUALITY_PS 12", " #define FXAA_QUALITY_P0 1.0", " #define FXAA_QUALITY_P1 1.5", " #define FXAA_QUALITY_P2 2.0", " #define FXAA_QUALITY_P3 2.0", " #define FXAA_QUALITY_P4 2.0", " #define FXAA_QUALITY_P5 2.0", " #define FXAA_QUALITY_P6 2.0", " #define FXAA_QUALITY_P7 2.0", " #define FXAA_QUALITY_P8 2.0", " #define FXAA_QUALITY_P9 2.0", " #define FXAA_QUALITY_P10 4.0", " #define FXAA_QUALITY_P11 8.0", "#endif", "", "/*============================================================================", " FXAA QUALITY - EXTREME QUALITY", "============================================================================*/", "#if (FXAA_QUALITY_PRESET == 39)", " #define FXAA_QUALITY_PS 12", " #define FXAA_QUALITY_P0 1.0", " #define FXAA_QUALITY_P1 1.0", " #define FXAA_QUALITY_P2 1.0", " #define FXAA_QUALITY_P3 1.0", " #define FXAA_QUALITY_P4 1.0", " #define FXAA_QUALITY_P5 1.5", " #define FXAA_QUALITY_P6 2.0", " #define FXAA_QUALITY_P7 2.0", " #define FXAA_QUALITY_P8 2.0", " #define FXAA_QUALITY_P9 2.0", " #define FXAA_QUALITY_P10 4.0", " #define FXAA_QUALITY_P11 8.0", "#endif", "", "", "", "/*============================================================================", "", " API PORTING", "", "============================================================================*/", "#if (FXAA_GLSL_100 == 1) || (FXAA_GLSL_120 == 1) || (FXAA_GLSL_130 == 1)", " #define FxaaBool bool", " #define FxaaDiscard discard", " #define FxaaFloat float", " #define FxaaFloat2 vec2", " #define FxaaFloat3 vec3", " #define FxaaFloat4 vec4", " #define FxaaHalf float", " #define FxaaHalf2 vec2", " #define FxaaHalf3 vec3", " #define FxaaHalf4 vec4", " #define FxaaInt2 ivec2", " #define FxaaSat(x) clamp(x, 0.0, 1.0)", " #define FxaaTex sampler2D", "#else", " #define FxaaBool bool", " #define FxaaDiscard clip(-1)", " #define FxaaFloat float", " #define FxaaFloat2 float2", " #define FxaaFloat3 float3", " #define FxaaFloat4 float4", " #define FxaaHalf half", " #define FxaaHalf2 half2", " #define FxaaHalf3 half3", " #define FxaaHalf4 half4", " #define FxaaSat(x) saturate(x)", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_GLSL_100 == 1)", " #define FxaaTexTop(t, p) texture2D(t, p, 0.0)", " #define FxaaTexOff(t, p, o, r) texture2D(t, p + (o * r), 0.0)", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_GLSL_120 == 1)", " // Requires,", " // #version 120", " // And at least,", " // #extension GL_EXT_gpu_shader4 : enable", " // (or set FXAA_FAST_PIXEL_OFFSET 1 to work like DX9)", " #define FxaaTexTop(t, p) texture2DLod(t, p, 0.0)", " #if (FXAA_FAST_PIXEL_OFFSET == 1)", " #define FxaaTexOff(t, p, o, r) texture2DLodOffset(t, p, 0.0, o)", " #else", " #define FxaaTexOff(t, p, o, r) texture2DLod(t, p + (o * r), 0.0)", " #endif", " #if (FXAA_GATHER4_ALPHA == 1)", " // use #extension GL_ARB_gpu_shader5 : enable", " #define FxaaTexAlpha4(t, p) textureGather(t, p, 3)", " #define FxaaTexOffAlpha4(t, p, o) textureGatherOffset(t, p, o, 3)", " #define FxaaTexGreen4(t, p) textureGather(t, p, 1)", " #define FxaaTexOffGreen4(t, p, o) textureGatherOffset(t, p, o, 1)", " #endif", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_GLSL_130 == 1)", ' // Requires "#version 130" or better', " #define FxaaTexTop(t, p) textureLod(t, p, 0.0)", " #define FxaaTexOff(t, p, o, r) textureLodOffset(t, p, 0.0, o)", " #if (FXAA_GATHER4_ALPHA == 1)", " // use #extension GL_ARB_gpu_shader5 : enable", " #define FxaaTexAlpha4(t, p) textureGather(t, p, 3)", " #define FxaaTexOffAlpha4(t, p, o) textureGatherOffset(t, p, o, 3)", " #define FxaaTexGreen4(t, p) textureGather(t, p, 1)", " #define FxaaTexOffGreen4(t, p, o) textureGatherOffset(t, p, o, 1)", " #endif", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_HLSL_3 == 1)", " #define FxaaInt2 float2", " #define FxaaTex sampler2D", " #define FxaaTexTop(t, p) tex2Dlod(t, float4(p, 0.0, 0.0))", " #define FxaaTexOff(t, p, o, r) tex2Dlod(t, float4(p + (o * r), 0, 0))", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_HLSL_4 == 1)", " #define FxaaInt2 int2", " struct FxaaTex { SamplerState smpl; Texture2D tex; };", " #define FxaaTexTop(t, p) t.tex.SampleLevel(t.smpl, p, 0.0)", " #define FxaaTexOff(t, p, o, r) t.tex.SampleLevel(t.smpl, p, 0.0, o)", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_HLSL_5 == 1)", " #define FxaaInt2 int2", " struct FxaaTex { SamplerState smpl; Texture2D tex; };", " #define FxaaTexTop(t, p) t.tex.SampleLevel(t.smpl, p, 0.0)", " #define FxaaTexOff(t, p, o, r) t.tex.SampleLevel(t.smpl, p, 0.0, o)", " #define FxaaTexAlpha4(t, p) t.tex.GatherAlpha(t.smpl, p)", " #define FxaaTexOffAlpha4(t, p, o) t.tex.GatherAlpha(t.smpl, p, o)", " #define FxaaTexGreen4(t, p) t.tex.GatherGreen(t.smpl, p)", " #define FxaaTexOffGreen4(t, p, o) t.tex.GatherGreen(t.smpl, p, o)", "#endif", "", "", "/*============================================================================", " GREEN AS LUMA OPTION SUPPORT FUNCTION", "============================================================================*/", "#if (FXAA_GREEN_AS_LUMA == 0)", " FxaaFloat FxaaLuma(FxaaFloat4 rgba) { return rgba.w; }", "#else", " FxaaFloat FxaaLuma(FxaaFloat4 rgba) { return rgba.y; }", "#endif", "", "", "", "", "/*============================================================================", "", " FXAA3 QUALITY - PC", "", "============================================================================*/", "#if (FXAA_PC == 1)", "/*--------------------------------------------------------------------------*/", "FxaaFloat4 FxaaPixelShader(", " //", " // Use noperspective interpolation here (turn off perspective interpolation).", " // {xy} = center of pixel", " FxaaFloat2 pos,", " //", " // Used only for FXAA Console, and not used on the 360 version.", " // Use noperspective interpolation here (turn off perspective interpolation).", " // {xy_} = upper left of pixel", " // {_zw} = lower right of pixel", " FxaaFloat4 fxaaConsolePosPos,", " //", " // Input color texture.", " // {rgb_} = color in linear or perceptual color space", " // if (FXAA_GREEN_AS_LUMA == 0)", " // {__a} = luma in perceptual color space (not linear)", " FxaaTex tex,", " //", " // Only used on the optimized 360 version of FXAA Console.", ' // For everything but 360, just use the same input here as for "tex".', " // For 360, same texture, just alias with a 2nd sampler.", " // This sampler needs to have an exponent bias of -1.", " FxaaTex fxaaConsole360TexExpBiasNegOne,", " //", " // Only used on the optimized 360 version of FXAA Console.", ' // For everything but 360, just use the same input here as for "tex".', " // For 360, same texture, just alias with a 3nd sampler.", " // This sampler needs to have an exponent bias of -2.", " FxaaTex fxaaConsole360TexExpBiasNegTwo,", " //", " // Only used on FXAA Quality.", " // This must be from a constant/uniform.", " // {x_} = 1.0/screenWidthInPixels", " // {_y} = 1.0/screenHeightInPixels", " FxaaFloat2 fxaaQualityRcpFrame,", " //", " // Only used on FXAA Console.", " // This must be from a constant/uniform.", " // This effects sub-pixel AA quality and inversely sharpness.", " // Where N ranges between,", " // N = 0.50 (default)", " // N = 0.33 (sharper)", " // {x__} = -N/screenWidthInPixels", " // {_y_} = -N/screenHeightInPixels", " // {_z_} = N/screenWidthInPixels", " // {__w} = N/screenHeightInPixels", " FxaaFloat4 fxaaConsoleRcpFrameOpt,", " //", " // Only used on FXAA Console.", " // Not used on 360, but used on PS3 and PC.", " // This must be from a constant/uniform.", " // {x__} = -2.0/screenWidthInPixels", " // {_y_} = -2.0/screenHeightInPixels", " // {_z_} = 2.0/screenWidthInPixels", " // {__w} = 2.0/screenHeightInPixels", " FxaaFloat4 fxaaConsoleRcpFrameOpt2,", " //", " // Only used on FXAA Console.", " // Only used on 360 in place of fxaaConsoleRcpFrameOpt2.", " // This must be from a constant/uniform.", " // {x__} = 8.0/screenWidthInPixels", " // {_y_} = 8.0/screenHeightInPixels", " // {_z_} = -4.0/screenWidthInPixels", " // {__w} = -4.0/screenHeightInPixels", " FxaaFloat4 fxaaConsole360RcpFrameOpt2,", " //", " // Only used on FXAA Quality.", " // This used to be the FXAA_QUALITY_SUBPIX define.", " // It is here now to allow easier tuning.", " // Choose the amount of sub-pixel aliasing removal.", " // This can effect sharpness.", " // 1.00 - upper limit (softer)", " // 0.75 - default amount of filtering", " // 0.50 - lower limit (sharper, less sub-pixel aliasing removal)", " // 0.25 - almost off", " // 0.00 - completely off", " FxaaFloat fxaaQualitySubpix,", " //", " // Only used on FXAA Quality.", " // This used to be the FXAA_QUALITY_EDGE_THRESHOLD define.", " // It is here now to allow easier tuning.", " // The minimum amount of local contrast required to apply algorithm.", " // 0.333 - too little (faster)", " // 0.250 - low quality", " // 0.166 - default", " // 0.125 - high quality", " // 0.063 - overkill (slower)", " FxaaFloat fxaaQualityEdgeThreshold,", " //", " // Only used on FXAA Quality.", " // This used to be the FXAA_QUALITY_EDGE_THRESHOLD_MIN define.", " // It is here now to allow easier tuning.", " // Trims the algorithm from processing darks.", " // 0.0833 - upper limit (default, the start of visible unfiltered edges)", " // 0.0625 - high quality (faster)", " // 0.0312 - visible limit (slower)", " // Special notes when using FXAA_GREEN_AS_LUMA,", " // Likely want to set this to zero.", " // As colors that are mostly not-green", " // will appear very dark in the green channel!", " // Tune by looking at mostly non-green content,", " // then start at zero and increase until aliasing is a problem.", " FxaaFloat fxaaQualityEdgeThresholdMin,", " //", " // Only used on FXAA Console.", " // This used to be the FXAA_CONSOLE_EDGE_SHARPNESS define.", " // It is here now to allow easier tuning.", " // This does not effect PS3, as this needs to be compiled in.", " // Use FXAA_CONSOLE_PS3_EDGE_SHARPNESS for PS3.", " // Due to the PS3 being ALU bound,", " // there are only three safe values here: 2 and 4 and 8.", " // These options use the shaders ability to a free *|/ by 2|4|8.", " // For all other platforms can be a non-power of two.", " // 8.0 is sharper (default!!!)", " // 4.0 is softer", " // 2.0 is really soft (good only for vector graphics inputs)", " FxaaFloat fxaaConsoleEdgeSharpness,", " //", " // Only used on FXAA Console.", " // This used to be the FXAA_CONSOLE_EDGE_THRESHOLD define.", " // It is here now to allow easier tuning.", " // This does not effect PS3, as this needs to be compiled in.", " // Use FXAA_CONSOLE_PS3_EDGE_THRESHOLD for PS3.", " // Due to the PS3 being ALU bound,", " // there are only two safe values here: 1/4 and 1/8.", " // These options use the shaders ability to a free *|/ by 2|4|8.", " // The console setting has a different mapping than the quality setting.", " // Other platforms can use other values.", " // 0.125 leaves less aliasing, but is softer (default!!!)", " // 0.25 leaves more aliasing, and is sharper", " FxaaFloat fxaaConsoleEdgeThreshold,", " //", " // Only used on FXAA Console.", " // This used to be the FXAA_CONSOLE_EDGE_THRESHOLD_MIN define.", " // It is here now to allow easier tuning.", " // Trims the algorithm from processing darks.", " // The console setting has a different mapping than the quality setting.", " // This only applies when FXAA_EARLY_EXIT is 1.", " // This does not apply to PS3,", " // PS3 was simplified to avoid more shader instructions.", " // 0.06 - faster but more aliasing in darks", " // 0.05 - default", " // 0.04 - slower and less aliasing in darks", " // Special notes when using FXAA_GREEN_AS_LUMA,", " // Likely want to set this to zero.", " // As colors that are mostly not-green", " // will appear very dark in the green channel!", " // Tune by looking at mostly non-green content,", " // then start at zero and increase until aliasing is a problem.", " FxaaFloat fxaaConsoleEdgeThresholdMin,", " //", " // Extra constants for 360 FXAA Console only.", " // Use zeros or anything else for other platforms.", " // These must be in physical constant registers and NOT immediates.", " // Immediates will result in compiler un-optimizing.", " // {xyzw} = float4(1.0, -1.0, 0.25, -0.25)", " FxaaFloat4 fxaaConsole360ConstDir", ") {", "/*--------------------------------------------------------------------------*/", " FxaaFloat2 posM;", " posM.x = pos.x;", " posM.y = pos.y;", " #if (FXAA_GATHER4_ALPHA == 1)", " #if (FXAA_DISCARD == 0)", " FxaaFloat4 rgbyM = FxaaTexTop(tex, posM);", " #if (FXAA_GREEN_AS_LUMA == 0)", " #define lumaM rgbyM.w", " #else", " #define lumaM rgbyM.y", " #endif", " #endif", " #if (FXAA_GREEN_AS_LUMA == 0)", " FxaaFloat4 luma4A = FxaaTexAlpha4(tex, posM);", " FxaaFloat4 luma4B = FxaaTexOffAlpha4(tex, posM, FxaaInt2(-1, -1));", " #else", " FxaaFloat4 luma4A = FxaaTexGreen4(tex, posM);", " FxaaFloat4 luma4B = FxaaTexOffGreen4(tex, posM, FxaaInt2(-1, -1));", " #endif", " #if (FXAA_DISCARD == 1)", " #define lumaM luma4A.w", " #endif", " #define lumaE luma4A.z", " #define lumaS luma4A.x", " #define lumaSE luma4A.y", " #define lumaNW luma4B.w", " #define lumaN luma4B.z", " #define lumaW luma4B.x", " #else", " FxaaFloat4 rgbyM = FxaaTexTop(tex, posM);", " #if (FXAA_GREEN_AS_LUMA == 0)", " #define lumaM rgbyM.w", " #else", " #define lumaM rgbyM.y", " #endif", " #if (FXAA_GLSL_100 == 1)", " FxaaFloat lumaS = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 0.0, 1.0), fxaaQualityRcpFrame.xy));", " FxaaFloat lumaE = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 1.0, 0.0), fxaaQualityRcpFrame.xy));", " FxaaFloat lumaN = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 0.0,-1.0), fxaaQualityRcpFrame.xy));", " FxaaFloat lumaW = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2(-1.0, 0.0), fxaaQualityRcpFrame.xy));", " #else", " FxaaFloat lumaS = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 0, 1), fxaaQualityRcpFrame.xy));", " FxaaFloat lumaE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1, 0), fxaaQualityRcpFrame.xy));", " FxaaFloat lumaN = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 0,-1), fxaaQualityRcpFrame.xy));", " FxaaFloat lumaW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 0), fxaaQualityRcpFrame.xy));", " #endif", " #endif", "/*--------------------------------------------------------------------------*/", " FxaaFloat maxSM = max(lumaS, lumaM);", " FxaaFloat minSM = min(lumaS, lumaM);", " FxaaFloat maxESM = max(lumaE, maxSM);", " FxaaFloat minESM = min(lumaE, minSM);", " FxaaFloat maxWN = max(lumaN, lumaW);", " FxaaFloat minWN = min(lumaN, lumaW);", " FxaaFloat rangeMax = max(maxWN, maxESM);", " FxaaFloat rangeMin = min(minWN, minESM);", " FxaaFloat rangeMaxScaled = rangeMax * fxaaQualityEdgeThreshold;", " FxaaFloat range = rangeMax - rangeMin;", " FxaaFloat rangeMaxClamped = max(fxaaQualityEdgeThresholdMin, rangeMaxScaled);", " FxaaBool earlyExit = range < rangeMaxClamped;", "/*--------------------------------------------------------------------------*/", " if(earlyExit)", " #if (FXAA_DISCARD == 1)", " FxaaDiscard;", " #else", " return rgbyM;", " #endif", "/*--------------------------------------------------------------------------*/", " #if (FXAA_GATHER4_ALPHA == 0)", " #if (FXAA_GLSL_100 == 1)", " FxaaFloat lumaNW = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2(-1.0,-1.0), fxaaQualityRcpFrame.xy));", " FxaaFloat lumaSE = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 1.0, 1.0), fxaaQualityRcpFrame.xy));", " FxaaFloat lumaNE = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 1.0,-1.0), fxaaQualityRcpFrame.xy));", " FxaaFloat lumaSW = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2(-1.0, 1.0), fxaaQualityRcpFrame.xy));", " #else", " FxaaFloat lumaNW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1,-1), fxaaQualityRcpFrame.xy));", " FxaaFloat lumaSE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1, 1), fxaaQualityRcpFrame.xy));", " FxaaFloat lumaNE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1,-1), fxaaQualityRcpFrame.xy));", " FxaaFloat lumaSW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 1), fxaaQualityRcpFrame.xy));", " #endif", " #else", " FxaaFloat lumaNE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(1, -1), fxaaQualityRcpFrame.xy));", " FxaaFloat lumaSW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 1), fxaaQualityRcpFrame.xy));", " #endif", "/*--------------------------------------------------------------------------*/", " FxaaFloat lumaNS = lumaN + lumaS;", " FxaaFloat lumaWE = lumaW + lumaE;", " FxaaFloat subpixRcpRange = 1.0/range;", " FxaaFloat subpixNSWE = lumaNS + lumaWE;", " FxaaFloat edgeHorz1 = (-2.0 * lumaM) + lumaNS;", " FxaaFloat edgeVert1 = (-2.0 * lumaM) + lumaWE;", "/*--------------------------------------------------------------------------*/", " FxaaFloat lumaNESE = lumaNE + lumaSE;", " FxaaFloat lumaNWNE = lumaNW + lumaNE;", " FxaaFloat edgeHorz2 = (-2.0 * lumaE) + lumaNESE;", " FxaaFloat edgeVert2 = (-2.0 * lumaN) + lumaNWNE;", "/*--------------------------------------------------------------------------*/", " FxaaFloat lumaNWSW = lumaNW + lumaSW;", " FxaaFloat lumaSWSE = lumaSW + lumaSE;", " FxaaFloat edgeHorz4 = (abs(edgeHorz1) * 2.0) + abs(edgeHorz2);", " FxaaFloat edgeVert4 = (abs(edgeVert1) * 2.0) + abs(edgeVert2);", " FxaaFloat edgeHorz3 = (-2.0 * lumaW) + lumaNWSW;", " FxaaFloat edgeVert3 = (-2.0 * lumaS) + lumaSWSE;", " FxaaFloat edgeHorz = abs(edgeHorz3) + edgeHorz4;", " FxaaFloat edgeVert = abs(edgeVert3) + edgeVert4;", "/*--------------------------------------------------------------------------*/", " FxaaFloat subpixNWSWNESE = lumaNWSW + lumaNESE;", " FxaaFloat lengthSign = fxaaQualityRcpFrame.x;", " FxaaBool horzSpan = edgeHorz >= edgeVert;", " FxaaFloat subpixA = subpixNSWE * 2.0 + subpixNWSWNESE;", "/*--------------------------------------------------------------------------*/", " if(!horzSpan) lumaN = lumaW;", " if(!horzSpan) lumaS = lumaE;", " if(horzSpan) lengthSign = fxaaQualityRcpFrame.y;", " FxaaFloat subpixB = (subpixA * (1.0/12.0)) - lumaM;", "/*--------------------------------------------------------------------------*/", " FxaaFloat gradientN = lumaN - lumaM;", " FxaaFloat gradientS = lumaS - lumaM;", " FxaaFloat lumaNN = lumaN + lumaM;", " FxaaFloat lumaSS = lumaS + lumaM;", " FxaaBool pairN = abs(gradientN) >= abs(gradientS);", " FxaaFloat gradient = max(abs(gradientN), abs(gradientS));", " if(pairN) lengthSign = -lengthSign;", " FxaaFloat subpixC = FxaaSat(abs(subpixB) * subpixRcpRange);", "/*--------------------------------------------------------------------------*/", " FxaaFloat2 posB;", " posB.x = posM.x;", " posB.y = posM.y;", " FxaaFloat2 offNP;", " offNP.x = (!horzSpan) ? 0.0 : fxaaQualityRcpFrame.x;", " offNP.y = ( horzSpan) ? 0.0 : fxaaQualityRcpFrame.y;", " if(!horzSpan) posB.x += lengthSign * 0.5;", " if( horzSpan) posB.y += lengthSign * 0.5;", "/*--------------------------------------------------------------------------*/", " FxaaFloat2 posN;", " posN.x = posB.x - offNP.x * FXAA_QUALITY_P0;", " posN.y = posB.y - offNP.y * FXAA_QUALITY_P0;", " FxaaFloat2 posP;", " posP.x = posB.x + offNP.x * FXAA_QUALITY_P0;", " posP.y = posB.y + offNP.y * FXAA_QUALITY_P0;", " FxaaFloat subpixD = ((-2.0)*subpixC) + 3.0;", " FxaaFloat lumaEndN = FxaaLuma(FxaaTexTop(tex, posN));", " FxaaFloat subpixE = subpixC * subpixC;", " FxaaFloat lumaEndP = FxaaLuma(FxaaTexTop(tex, posP));", "/*--------------------------------------------------------------------------*/", " if(!pairN) lumaNN = lumaSS;", " FxaaFloat gradientScaled = gradient * 1.0/4.0;", " FxaaFloat lumaMM = lumaM - lumaNN * 0.5;", " FxaaFloat subpixF = subpixD * subpixE;", " FxaaBool lumaMLTZero = lumaMM < 0.0;", "/*--------------------------------------------------------------------------*/", " lumaEndN -= lumaNN * 0.5;", " lumaEndP -= lumaNN * 0.5;", " FxaaBool doneN = abs(lumaEndN) >= gradientScaled;", " FxaaBool doneP = abs(lumaEndP) >= gradientScaled;", " if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P1;", " if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P1;", " FxaaBool doneNP = (!doneN) || (!doneP);", " if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P1;", " if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P1;", "/*--------------------------------------------------------------------------*/", " if(doneNP) {", " if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));", " if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));", " if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;", " if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;", " doneN = abs(lumaEndN) >= gradientScaled;", " doneP = abs(lumaEndP) >= gradientScaled;", " if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P2;", " if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P2;", " doneNP = (!doneN) || (!doneP);", " if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P2;", " if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P2;", "/*--------------------------------------------------------------------------*/", " #if (FXAA_QUALITY_PS > 3)", " if(doneNP) {", " if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));", " if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));", " if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;", " if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;", " doneN = abs(lumaEndN) >= gradientScaled;", " doneP = abs(lumaEndP) >= gradientScaled;", " if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P3;", " if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P3;", " doneNP = (!doneN) || (!doneP);", " if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P3;", " if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P3;", "/*--------------------------------------------------------------------------*/", " #if (FXAA_QUALITY_PS > 4)", " if(doneNP) {", " if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));", " if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));", " if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;", " if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;", " doneN = abs(lumaEndN) >= gradientScaled;", " doneP = abs(lumaEndP) >= gradientScaled;", " if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P4;", " if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P4;", " doneNP = (!doneN) || (!doneP);", " if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P4;", " if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P4;", "/*--------------------------------------------------------------------------*/", " #if (FXAA_QUALITY_PS > 5)", " if(doneNP) {", " if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));", " if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));", " if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;", " if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;", " doneN = abs(lumaEndN) >= gradientScaled;", " doneP = abs(lumaEndP) >= gradientScaled;", " if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P5;", " if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P5;", " doneNP = (!doneN) || (!doneP);", " if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P5;", " if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P5;", "/*--------------------------------------------------------------------------*/", " #if (FXAA_QUALITY_PS > 6)", " if(doneNP) {", " if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));", " if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));", " if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;", " if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;", " doneN = abs(lumaEndN) >= gradientScaled;", " doneP = abs(lumaEndP) >= gradientScaled;", " if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P6;", " if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P6;", " doneNP = (!doneN) || (!doneP);", " if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P6;", " if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P6;", "/*--------------------------------------------------------------------------*/", " #if (FXAA_QUALITY_PS > 7)", " if(doneNP) {", " if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));", " if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));", " if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;", " if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;", " doneN = abs(lumaEndN) >= gradientScaled;", " doneP = abs(lumaEndP) >= gradientScaled;", " if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P7;", " if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P7;", " doneNP = (!doneN) || (!doneP);", " if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P7;", " if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P7;", "/*--------------------------------------------------------------------------*/", " #if (FXAA_QUALITY_PS > 8)", " if(doneNP) {", " if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));", " if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));", " if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;", " if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;", " doneN = abs(lumaEndN) >= gradientScaled;", " doneP = abs(lumaEndP) >= gradientScaled;", " if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P8;", " if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P8;", " doneNP = (!doneN) || (!doneP);", " if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P8;", " if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P8;", "/*--------------------------------------------------------------------------*/", " #if (FXAA_QUALITY_PS > 9)", " if(doneNP) {", " if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));", " if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));", " if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;", " if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;", " doneN = abs(lumaEndN) >= gradientScaled;", " doneP = abs(lumaEndP) >= gradientScaled;", " if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P9;", " if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P9;", " doneNP = (!doneN) || (!doneP);", " if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P9;", " if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P9;", "/*--------------------------------------------------------------------------*/", " #if (FXAA_QUALITY_PS > 10)", " if(doneNP) {", " if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));", " if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));", " if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;", " if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;", " doneN = abs(lumaEndN) >= gradientScaled;", " doneP = abs(lumaEndP) >= gradientScaled;", " if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P10;", " if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P10;", " doneNP = (!doneN) || (!doneP);", " if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P10;", " if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P10;", "/*--------------------------------------------------------------------------*/", " #if (FXAA_QUALITY_PS > 11)", " if(doneNP) {", " if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));", " if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));", " if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;", " if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;", " doneN = abs(lumaEndN) >= gradientScaled;", " doneP = abs(lumaEndP) >= gradientScaled;", " if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P11;", " if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P11;", " doneNP = (!doneN) || (!doneP);", " if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P11;", " if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P11;", "/*--------------------------------------------------------------------------*/", " #if (FXAA_QUALITY_PS > 12)", " if(doneNP) {", " if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));", " if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));", " if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;", " if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;", " doneN = abs(lumaEndN) >= gradientScaled;", " doneP = abs(lumaEndP) >= gradientScaled;", " if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P12;", " if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P12;", " doneNP = (!doneN) || (!doneP);", " if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P12;", " if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P12;", "/*--------------------------------------------------------------------------*/", " }", " #endif", "/*--------------------------------------------------------------------------*/", " }", " #endif", "/*--------------------------------------------------------------------------*/", " }", " #endif", "/*--------------------------------------------------------------------------*/", " }", " #endif", "/*--------------------------------------------------------------------------*/", " }", " #endif", "/*--------------------------------------------------------------------------*/", " }", " #endif", "/*--------------------------------------------------------------------------*/", " }", " #endif", "/*--------------------------------------------------------------------------*/", " }", " #endif", "/*--------------------------------------------------------------------------*/", " }", " #endif", "/*--------------------------------------------------------------------------*/", " }", " #endif", "/*--------------------------------------------------------------------------*/", " }", "/*--------------------------------------------------------------------------*/", " FxaaFloat dstN = posM.x - posN.x;", " FxaaFloat dstP = posP.x - posM.x;", " if(!horzSpan) dstN = posM.y - posN.y;", " if(!horzSpan) dstP = posP.y - posM.y;", "/*--------------------------------------------------------------------------*/", " FxaaBool goodSpanN = (lumaEndN < 0.0) != lumaMLTZero;", " FxaaFloat spanLength = (dstP + dstN);", " FxaaBool goodSpanP = (lumaEndP < 0.0) != lumaMLTZero;", " FxaaFloat spanLengthRcp = 1.0/spanLength;", "/*--------------------------------------------------------------------------*/", " FxaaBool directionN = dstN < dstP;", " FxaaFloat dst = min(dstN, dstP);", " FxaaBool goodSpan = directionN ? goodSpanN : goodSpanP;", " FxaaFloat subpixG = subpixF * subpixF;", " FxaaFloat pixelOffset = (dst * (-spanLengthRcp)) + 0.5;", " FxaaFloat subpixH = subpixG * fxaaQualitySubpix;", "/*--------------------------------------------------------------------------*/", " FxaaFloat pixelOffsetGood = goodSpan ? pixelOffset : 0.0;", " FxaaFloat pixelOffsetSubpix = max(pixelOffsetGood, subpixH);", " if(!horzSpan) posM.x += pixelOffsetSubpix * lengthSign;", " if( horzSpan) posM.y += pixelOffsetSubpix * lengthSign;", " #if (FXAA_DISCARD == 1)", " return FxaaTexTop(tex, posM);", " #else", " return FxaaFloat4(FxaaTexTop(tex, posM).xyz, lumaM);", " #endif", "}", "/*==========================================================================*/", "#endif", "", "void main() {", " gl_FragColor = FxaaPixelShader(", " vUv,", " vec4(0.0),", " tDiffuse,", " tDiffuse,", " tDiffuse,", " resolution,", " vec4(0.0),", " vec4(0.0),", " vec4(0.0),", " 0.75,", " 0.166,", " 0.0833,", " 0.0,", " 0.0,", " 0.0,", " vec4(0.0)", " );", "", " // TODO avoid querying texture twice for same texel", " gl_FragColor.a = texture2D(tDiffuse, vUv).a;", "}"].join("\n") + } + , Iy = function(A, e, t, i, o) { + gy.call(this), + this.scene = A, + this.camera = e, + this.overrideMaterial = t, + this.clearColor = i, + this.clearAlpha = void 0 !== o ? o : 0, + this.clear = !0, + this.clearDepth = !1, + this.needsSwap = !1 + }; + Iy.prototype = Object.assign(Object.create(gy.prototype), { + constructor: Iy, + render: function(A, e, t) { + var i = A.autoClear; + A.autoClear = !1, + this.scene.overrideMaterial = this.overrideMaterial; + var o = null + , n = null; + this.clearColor && (n = A.getClearColor().getHex(), + o = A.getClearAlpha(), + A.setClearColor(this.clearColor, this.clearAlpha)), + this.clearDepth && A.clearDepth(), + A.setRenderTarget(this.renderToScreen ? null : t), + this.clear && A.clear(A.autoClearColor, A.autoClearDepth, A.autoClearStencil), + A.render(this.scene, this.camera), + this.clearColor && A.setClearColor(n, o), + this.scene.overrideMaterial = null, + A.autoClear = i + } + }); + var Ey = function(A, e, t, i, o) { + gy.call(this), + this.modelManager = e, + this.renderScene = t, + this.renderCamera = i, + this.selectedObjectIds = void 0 !== o ? o : [], + this.defaultEdgeColor = (new LA).setHex(4173056), + this.defaultEdgeAlpha = .95, + this.edgeColor = new p(this.defaultEdgeColor.r,this.defaultEdgeColor.g,this.defaultEdgeColor.b,this.defaultEdgeAlpha), + this.edgeLength = 2, + this.resolution = void 0 !== A ? new s(A.x,A.y) : new s(256,256); + var n = { + minFilter: 1006, + magFilter: 1006, + format: 1023 + }; + this.renderTargetDepthBuffer = new g(this.resolution.x,this.resolution.y,n), + this.renderTargetDepthBuffer.texture.name = "OutlinePass.depth", + this.renderTargetDepthBuffer.texture.generateMipmaps = !1, + this.renderTargetMaskBuffer = new g(this.resolution.x,this.resolution.y,n), + this.renderTargetMaskBuffer.texture.name = "OutlinePass.mask", + this.renderTargetMaskBuffer.texture.generateMipmaps = !1, + this.renderTargetMaskDownSampleBuffer = new g(this.resolution.x,this.resolution.y,n), + this.renderTargetMaskDownSampleBuffer.texture.name = "OutlinePass.depthDownSample", + this.renderTargetMaskDownSampleBuffer.texture.generateMipmaps = !1, + this.renderTargetEdgeBuffer = new g(this.resolution.x,this.resolution.y,n), + this.renderTargetEdgeBuffer.texture.name = "OutlinePass.edge", + this.renderTargetEdgeBuffer.texture.generateMipmaps = !1, + this.renderTargetColorBuffer = new g(this.resolution.x,this.resolution.y,n), + this.renderTargetColorBuffer.texture.name = "OutlinePass.color", + this.renderTargetColorBuffer.texture.generateMipmaps = !1, + this.depthMaterial = new ji, + this.depthMaterial.side = 2, + this.depthMaterial.depthPacking = 3201, + this.depthMaterial.blending = 0, + this.InstancedDepthMaterial = new Su, + this.InstancedDepthMaterial.side = 2, + this.InstancedDepthMaterial.depthPacking = 3201, + this.InstancedDepthMaterial.blending = 0, + this.prepareMaskMaterial = this.getPrepareMaskMaterial(), + this.prepareMaskMaterial.side = 2, + this.prepareMaskInstancedMaterial = this.getPrepareMaskInstancedMaterial(), + this.prepareMaskInstancedMaterial.side = 2, + this.edgeDetectionMaterial = this.getEdgeDetectionMaterial(), + this.overlayMaterial = this.getOverlayMaterial(), + void 0 === py && console.error("OutlinePass relies on THREE.CopyShader"); + var r = py; + return this.copyUniforms = Ge.clone(r.uniforms), + this.copyUniforms.opacity.value = 1, + this.materialCopy = new Pe({ + uniforms: this.copyUniforms, + vertexShader: r.vertexShader, + fragmentShader: r.fragmentShader, + blending: 0, + depthTest: !1, + depthWrite: !1, + transparent: !0 + }), + this.enabled = !0, + this.needsSwap = !1, + this.oldClearColor = new LA, + this.oldClearAlpha = 1, + this.camera = new Ka(-1,1,1,-1,0,1), + this.scene = new Y, + this.quad = new Ue(new et(2,2),null), + this.quad.frustumCulled = !1, + this.scene.add(this.quad), + this.textureMatrix = new M, + this + }; + Ey.prototype.dispose = function() { + this.renderTargetDepthBuffer.dispose(), + this.renderTargetMaskBuffer.dispose(), + this.renderTargetMaskDownSampleBuffer.dispose(), + this.renderTargetEdgeBuffer.dispose(), + this.renderTargetColorBuffer.dispose() + } + , + Ey.prototype.setSize = function(A, e) { + this.renderTargetDepthBuffer.setSize(A, e), + this.renderTargetMaskBuffer.setSize(A, e), + this.renderTargetMaskDownSampleBuffer.setSize(A, e), + this.renderTargetEdgeBuffer.setSize(A, e), + this.renderTargetColorBuffer.setSize(A, e) + } + , + Ey.prototype.adjustVisibilityOfObjectsWithoutOutline = function(A) { + this.modelManager.adjustVisibilityOfObjectsWithoutOutline(A) + } + , + Ey.prototype.adjustVisibility = function(A) { + this.modelManager.adjustVisibility(A) + } + , + Ey.prototype.changeVisibilityOfSelectedObjects = function(A) { + this.modelManager.changeVisibilityOfSelectedObjects(A) + } + , + Ey.prototype.changeVisibilityOfNonSelectedObjects = function(A) { + this.modelManager.changeVisibilityOfNonSelectedObjects(A) + } + , + Ey.prototype.adjustInstanceVisibility = function(A) { + this.modelManager.adjustInstanceVisibility(A) + } + , + Ey.prototype.changeInstanceVisibilityOfSelectedObjects = function(A) { + this.modelManager.changeInstanceVisibilityOfSelectedObjects(A) + } + , + Ey.prototype.changeInstanceVisibilityOfNonSelectedObjects = function(A) { + this.modelManager.changeInstanceVisibilityOfNonSelectedObjects(A) + } + , + Ey.prototype.restoreVisibilityOfObjects = function() { + this.modelManager.restoreVisibilityOfObjects() + } + , + Ey.prototype.updateTextureMatrix = function() { + this.textureMatrix.set(.5, 0, 0, .5, 0, .5, 0, .5, 0, 0, .5, .5, 0, 0, 0, 1), + this.textureMatrix.multiply(this.renderCamera.projectionMatrix), + this.textureMatrix.multiply(this.renderCamera.matrixWorldInverse) + } + , + Ey.prototype.render = function(A, e, t, i, o) { + this.oldClearColor.copy(A.getClearColor()), + this.oldClearAlpha = A.getClearAlpha(); + var n = A.autoClear; + A.autoClear = !1, + o && A.state.buffers.stencil.setTest(!1), + A.setClearColor(0, 0), + this.adjustVisibilityOfObjectsWithoutOutline(!1), + this.adjustInstanceVisibility(!1), + this.changeVisibilityOfSelectedObjects(!1), + this.renderScene.overrideMaterial = this.depthMaterial, + A.setRenderTarget(this.renderTargetDepthBuffer), + A.clear(), + A.render(this.renderScene, this.renderCamera), + this.adjustInstanceVisibility(!0), + this.changeVisibilityOfSelectedObjects(!0), + this.adjustVisibility(!1), + this.changeInstanceVisibilityOfSelectedObjects(!1), + this.renderScene.overrideMaterial = this.InstancedDepthMaterial, + A.setRenderTarget(this.renderTargetDepthBuffer), + A.render(this.renderScene, this.renderCamera), + this.adjustVisibility(!0), + this.changeInstanceVisibilityOfSelectedObjects(!0), + this.updateTextureMatrix(), + this.adjustInstanceVisibility(!1), + this.changeVisibilityOfNonSelectedObjects(!1), + this.adjustVisibilityOfObjectsWithoutOutline(!1), + this.renderScene.overrideMaterial = this.prepareMaskMaterial, + this.prepareMaskMaterial.uniforms.cameraNearFar.value = new s(this.renderCamera.near,this.renderCamera.far), + this.prepareMaskMaterial.uniforms.depthTexture.value = this.renderTargetDepthBuffer.texture, + this.prepareMaskMaterial.uniforms.textureMatrix.value = this.textureMatrix, + A.setRenderTarget(this.renderTargetMaskBuffer), + A.clear(), + A.render(this.renderScene, this.renderCamera), + this.adjustInstanceVisibility(!0), + this.changeVisibilityOfNonSelectedObjects(!0), + this.adjustVisibility(!1), + this.changeInstanceVisibilityOfNonSelectedObjects(!1), + this.adjustVisibilityOfObjectsWithoutOutline(!1), + this.renderScene.overrideMaterial = this.prepareMaskInstancedMaterial, + this.prepareMaskInstancedMaterial.uniforms.cameraNearFar.value = new s(this.renderCamera.near,this.renderCamera.far), + this.prepareMaskInstancedMaterial.uniforms.depthTexture.value = this.renderTargetDepthBuffer.texture, + this.prepareMaskInstancedMaterial.uniforms.textureMatrix.value = this.textureMatrix, + A.setRenderTarget(this.renderTargetMaskBuffer), + A.render(this.renderScene, this.renderCamera), + this.renderScene.overrideMaterial = null, + this.adjustVisibility(!0), + this.changeInstanceVisibilityOfNonSelectedObjects(!0), + this.restoreVisibilityOfObjects(), + this.quad.material = this.materialCopy, + this.copyUniforms.tDiffuse.value = this.renderTargetMaskBuffer.texture, + A.setRenderTarget(this.renderTargetMaskDownSampleBuffer), + A.clear(), + A.render(this.scene, this.camera), + this.quad.material = this.edgeDetectionMaterial, + this.edgeDetectionMaterial.uniforms.maskTexture.value = this.renderTargetMaskDownSampleBuffer.texture, + this.edgeDetectionMaterial.uniforms.texSize.value = new s(this.renderTargetMaskDownSampleBuffer.width,this.renderTargetMaskDownSampleBuffer.height), + this.edgeDetectionMaterial.uniforms.edgeColor.value = this.edgeColor, + this.edgeDetectionMaterial.uniforms.edgeLength.value = this.edgeLength, + A.setRenderTarget(this.renderTargetEdgeBuffer), + A.clear(), + A.render(this.scene, this.camera), + this.quad.material = this.overlayMaterial, + this.overlayMaterial.uniforms.colorTexture.value = t.texture, + this.overlayMaterial.uniforms.outlineTexture.value = this.renderTargetEdgeBuffer.texture, + A.setRenderTarget(this.renderTargetColorBuffer), + A.clear(), + A.render(this.scene, this.camera), + this.quad.material = this.materialCopy, + this.copyUniforms.tDiffuse.value = this.renderTargetColorBuffer.texture, + o && A.state.buffers.stencil.setTest(!0), + A.setRenderTarget(t), + A.clear(), + this.adjustVisibilityOfObjectsWithoutOutline(!0), + A.render(this.scene, this.camera), + A.setClearColor(this.oldClearColor, this.oldClearAlpha), + A.autoClear = n + } + , + Ey.prototype.getPrepareMaskMaterial = function() { + return new Pe({ + uniforms: { + depthTexture: { + value: null + }, + cameraNearFar: { + value: new s(.5,.5) + }, + textureMatrix: { + value: new M + } + }, + vertexShader: "varying vec2 vUv;\n\t\t\t\tvarying vec4 projTexCoord;\n\t\t\t\tvarying vec4 vPosition;\n\t\t\t\tuniform mat4 textureMatrix;\n\t\t\t\tvoid main() {\n\t\t\t\t\tvUv = uv;\n\t\t\t\t\tvPosition = modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t\tvec4 worldPosition = modelMatrix * vec4( position, 1.0 );\n\t\t\t\t\tprojTexCoord = textureMatrix * worldPosition;\n\t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t}", + fragmentShader: "\n #include \n\t\t\t\tvarying vec2 vUv;\n\t\t\t\tvarying vec4 vPosition;\n\t\t\t\tvarying vec4 projTexCoord;\n\t\t\t\tuniform sampler2D depthTexture;\n\t\t\t\tuniform vec2 cameraNearFar;\n\t\t\t\t\n\t\t\t\tfloat linearDepth(float depth)\n {\n float far = cameraNearFar.y;\n float near = cameraNearFar.x;\n return (2.0 * near) / (far + near - depth * (far - near));\n }\n\t\t\t\t\n\t\t\t\tvoid main() {\n\t\t\t\t\tfloat depth = unpackRGBAToDepth(texture2DProj( depthTexture, projTexCoord ));\t\t\t\t\t\n\t\t\t\t\tgl_FragColor = vec4(depth);\n\t\t\t\t}" + }) + } + , + Ey.prototype.getPrepareMaskInstancedMaterial = function() { + return new Pe({ + uniforms: { + depthTexture: { + value: null + }, + cameraNearFar: { + value: new s(.5,.5) + }, + textureMatrix: { + value: new M + } + }, + vertexShader: "\n attribute float vState; \n attribute vec4 aColor; \n attribute vec3 mcol0;\n attribute vec3 mcol1;\n attribute vec3 mcol2;\n attribute vec3 mcol3;\n #if defined(USE_MAP)\n attribute vec2 muvCol0;\n attribute vec2 muvCol1;\n attribute vec2 muvCol2;\n #endif\n \n varying float vfState;\n varying vec2 vUv;\n\t\t\t\tvarying vec4 projTexCoord;\n\t\t\t\tvarying vec4 vPosition;\n\t\t\t\tuniform mat4 textureMatrix;\n\t\t\t\t\n\t\t\t\tvec3 getInstancePosition(vec3 position) {\n return vec3(mat4(vec4(mcol0, 0.0),\n vec4(mcol1, 0.0),\n vec4(mcol2, 0.0),\n vec4(mcol3, 1.0)) * vec4(position, 1.0));\n }\n \n vec2 getInstanceUV(vec2 uv) {\n \n #if defined(USE_MAP)\n return vec2(mat3(vec3(muvCol0, 0.0),\n vec3(muvCol1, 0.0), \n vec3(muvCol2, 1.0)) * vec3(uv, 1.0));\n #else\n return uv;\n #endif \n \n }\n \n\t\t\t\tvoid main() {\n\t\t\t\t vfState = vState;\n\t\t\t\t\tvUv = uv;\n\t\t\t\t\tvPosition = vec4(getInstancePosition(position), 1.0);\n\t\t\t\t\tvec4 worldPosition = modelMatrix * vPosition;\n\t\t\t\t\tprojTexCoord = textureMatrix * worldPosition;\n\t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vPosition;\n\t\t\t\t}", + fragmentShader: "#include \n varying float vfState;\n varying vec2 vUv;\n varying vec4 vPosition;\n varying vec4 projTexCoord;\n uniform sampler2D depthTexture;\n uniform vec2 cameraNearFar;\n \n float linearDepth(float depth)\n {\n float far = cameraNearFar.y;\n float near = cameraNearFar.x;\n return (2.0 * near) / (far + near - depth * (far - near));\n }\n \n void main() {\n if (vfState <= -0.99 && vfState >= -1.01) discard;\n float depth = unpackRGBAToDepth(texture2DProj( depthTexture, projTexCoord ));\n gl_FragColor = vec4(depth);\n }" + }) + } + , + Ey.prototype.getEdgeDetectionMaterial = function() { + return new Pe({ + uniforms: { + maskTexture: { + value: null + }, + texSize: { + value: new s(.5,.5) + }, + edgeColor: { + value: new p(1,1,1,1) + }, + edgeLength: { + value: 2 + } + }, + vertexShader: "\n varying vec2 vUv;\n\t\t\t\tvoid main() {\n\t\t\t\t\tvUv = uv;\n\t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t}", + fragmentShader: "\n varying vec2 vUv;\n\t\t\t\tuniform sampler2D maskTexture;\n\t\t\t\tuniform vec2 texSize;\n\t\t\t\tuniform vec4 edgeColor;\n uniform float edgeLength; \n \n void main(void)\n {\n float directions[3];\n directions[0] = -1.0;\n directions[1] = 0.0;\n directions[2] = 1.0;\n \n float scalars[3];\n scalars[0] = 3.0;\n scalars[1] = 10.0;\n scalars[2] = 3.0;\n \n float padx = 1.0 / texSize.x;\n float pady = 1.0 / texSize.y ; \n \n float edgeSize = 0.0; \n float horizEdge = 0.0;\n float vertEdge = 0.0; \n \n for (int i = 0; i < 3; ++i)\n {\n float dir = directions[i];\n float scale = scalars[i];\n \n horizEdge -= texture2D(maskTexture, vUv + vec2(-padx, dir * pady)).x * scale;\n horizEdge += texture2D(maskTexture, vUv + vec2(padx, dir * pady)).x * scale;\n \n vertEdge -= texture2D(maskTexture, vUv + vec2(dir * padx, -pady)).x * scale;\n vertEdge += texture2D(maskTexture, vUv + vec2(dir * padx, pady)).x * scale;\n } \n \n float len = sqrt(horizEdge * horizEdge + vertEdge * vertEdge); \n float alpha = len > edgeLength ? edgeColor.a : (texture2D(maskTexture, vUv).w > 0.1 ? 0.1 : 0.0);\n gl_FragColor = vec4(edgeColor.rgb, alpha);\n }" + }) + } + , + Ey.prototype.getOverlayMaterial = function() { + return new Pe({ + uniforms: { + colorTexture: { + value: null + }, + outlineTexture: { + value: null + } + }, + vertexShader: "varying vec2 vUv;\n\t\t\t\tvoid main() {\n\t\t\t\t\tvUv = uv;\n\t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t}", + fragmentShader: "varying vec2 vUv;\n\t\t\t\tuniform sampler2D colorTexture;\n\t\t\t\tuniform sampler2D outlineTexture;\n\t\t\t\t\n\t\t\t\tvoid main() {\n\t\t\t\t\tvec4 outlineColor = texture2D(outlineTexture, vUv);\t\t\t\t\t\n\t\t\t\t\tgl_FragColor = mix(texture2D(colorTexture, vUv), outlineColor, outlineColor.a);\t\t\t\t\t\n\t\t\t\t}", + blending: 2, + depthTest: !1, + depthWrite: !1, + transparent: !0 + }) + } + , + Ey.prototype.setOutlineEdgeColor = function(A) { + this.edgeColor.fromArray([A.r, A.g, A.b, A.opacity ? A.opacity : 1]) + } + , + Ey.prototype.getOutlineEdgeColor = function(A) { + return (new Xh).fromArray(this.edgeColor.toArray()) + } + ; + var By = function(A) { + this.renderer = A, + this.composer = null, + this.renderPass = null, + this.outlinePass = null, + this.effectFXAA = null, + this.selectedObjectIds = [] + }; + By.prototype.destroy = function() { + this.renderer = null, + this.composer = null, + this.renderPass = null, + this.outlinePass = null, + this.effectFXAA = null, + this.selectedObjectIds = null + } + , + By.prototype.init = function(A, e, t, i, o) { + this.composer = new Cy(this.renderer), + this.renderPass = new Iy(e,t), + this.composer.addPass(this.renderPass), + this.outlinePass = new Ey(new s(i,o),A,e,t), + this.composer.addPass(this.outlinePass), + this.effectFXAA = new uy(vy), + this.effectFXAA.uniforms.resolution.value.set(1 / i, 1 / o), + this.effectFXAA.renderToScreen = !0, + this.composer.addPass(this.effectFXAA) + } + , + By.prototype.reinit = function(A, e, t, i, o, n) { + this.renderer = A, + this.composer = new Cy(this.renderer), + this.renderPass = this.renderPass || new Iy(t,i), + this.composer.addPass(this.renderPass), + this.outlinePass = this.outlinePass || new Ey(new s(o,n),e,t,i), + this.composer.addPass(this.outlinePass), + this.effectFXAA = this.effectFXAA || new uy(vy), + this.effectFXAA.uniforms.resolution.value.set(1 / o, 1 / n), + this.effectFXAA.renderToScreen = !0, + this.composer.addPass(this.effectFXAA) + } + , + By.prototype.render = function() { + this.composer.render() + } + , + By.prototype.setSize = function(A, e) { + this.composer.setSize(A, e), + this.effectFXAA.uniforms.resolution.value.set(1 / A, 1 / e) + } + , + By.prototype.addSelectedId = function(A) { + this.selectedObjectIds.push(A) + } + , + By.prototype.clearSelectedIds = function() { + this.selectedObjectIds.length = 0 + } + , + By.prototype.setSelectedIds = function(A) { + if (this.outlinePass) { + this.clearSelectedIds(); + for (var e = 0, t = A.length; t > e; e += 1) + this.addSelectedId(A[e]); + this.outlinePass.selectedObjectIds = this.selectedObjectIds + } + } + , + By.prototype.setOutlineEdgeColor = function(A) { + this.outlinePass.setOutlineEdgeColor(A) + } + , + By.prototype.getOutlineEdgeColor = function() { + return this.outlinePass.getOutlineEdgeColor() + } + ; + var xy = function(A) { + jA.call(this, A), + this.type = "InstancedMeshBasicMaterial", + this.uniforms = it.basic.uniforms, + this.vertexShader = function(A) { + return A.replace("#include ", "\n vec4 mvPosition = modelViewMatrix * vec4(getInstancePosition(transformed), 1.0);\n gl_Position = projectionMatrix * mvPosition;\n ") + }(it.basic.vertexShader.replace("void main() {", "\n attribute float vState; \n attribute vec3 mcol0;\n attribute vec3 mcol1;\n attribute vec3 mcol2;\n attribute vec3 mcol3; \n varying float vfState;\n \n vec3 getInstancePosition(vec3 position) {\n return vec3(mat4(vec4(mcol0, 0.0),\n vec4(mcol1, 0.0),\n vec4(mcol2, 0.0),\n vec4(mcol3, 1.0)) * vec4(position, 1.0));\n }\n \n void main() {\n vfState = vState;\n ")), + this.fragmentShader = it.basic.fragmentShader.replace("void main() {", "\n varying float vfState; \n void main() {\n if (vfState <= -0.99 && vfState >= -1.01) discard;\n \n ") + }; + (xy.prototype = Object.create(jA.prototype)).constructor = xy; + var Sy = function(A) { + this.viewer = A; + var e = vc.SelectionColor.color; + this.wireframeMaterial = new jA({ + color: e, + opacity: 1, + transparent: !0, + blending: 5, + blendSrc: 201, + blendDst: 200, + blendEquation: 100 + }), + this.selectedMaterial = new jA({ + color: e, + opacity: .3, + transparent: !0 + }), + this.skinningWireframeMaterial = new jA({ + color: e, + opacity: 1, + transparent: !0, + blending: 5, + blendSrc: 201, + blendDst: 200, + blendEquation: 100, + skinning: !0 + }), + this.skinningSelectedMaterial = new jA({ + color: e, + opacity: .3, + transparent: !0, + skinning: !0 + }), + this.selectedLineMaterial = new YC({ + color: e, + opacity: 1, + transparent: !0, + linewidth: 2, + dashed: !1 + }), + this.instancedWireFrameMaterial = new xy({ + color: e, + opacity: 1, + transparent: !0, + blending: 5, + blendSrc: 201, + blendDst: 200, + blendEquation: 100 + }), + this.instancedSelectedMaterial = new xy({ + color: e, + opacity: .3, + transparent: !0 + }), + this.selectionScene = new Y, + this.selectionScene.autoUpdate = !1, + this.selectionObjectGroup = new ep, + this.selectionObjectGroup.name = "PickingObjectGroup", + this.selectionObjectGroup.matrixAutoUpdate = !1, + this.selectionScene.add(this.selectionObjectGroup), + this.lastSelectedUserIdMap = null, + this.lastSelectedUserIds = null + }; + Sy.prototype.destroy = function() { + this.wireframeMaterial.dispose(), + this.wireframeMaterial = null, + this.selectedMaterial.dispose(), + this.selectedMaterial = null, + this.skinningWireframeMaterial.dispose(), + this.skinningWireframeMaterial = null, + this.skinningSelectedMaterial.dispose(), + this.skinningSelectedMaterial = null, + this.selectedLineMaterial.dispose(), + this.selectedLineMaterial = null, + this.instancedWireFrameMaterial.dispose(), + this.instancedWireFrameMaterial = null, + this.instancedSelectedMaterial.dispose(), + this.instancedSelectedMaterial = null, + this.selectionObjectGroup.clear(), + this.selectionObjectGroup = null, + this.selectionScene = null, + this.lastSelectedUserIdMap = null, + this.lastSelectedUserIds = null, + this.viewer = null + } + , + Sy.prototype.apply = function(A) { + var e = this.viewer + , t = e.getSelection(); + if (!t || !t.length) + return this._clearSelectedUserIdsCache(), + void this._clearMeshesFromScene(); + (A || this._isSelectionsChanged()) && (this._cacheSelectedUserIds(t), + this._updateScene(t)), + this._render(e.rendererManager.getRenderer(), e.camera) + } + , + Sy.prototype._isSelectionsChanged = function() { + var A = this.lastSelectedUserIds; + if (!A) + return !0; + var e = this.viewer.getSelection() + , t = e.length; + if (t !== A.length) + return !0; + for (var i = !1, o = this.lastSelectedUserIdMap, n = t - 1; n >= 0; n -= 1) + if (!o[e[n]]) { + i = !0; + break + } + return i + } + , + Sy.prototype._cacheSelectedUserIds = function(A) { + this.lastSelectedUserIds = A.slice(0), + this.lastSelectedUserIdMap = uh.arrayToMap(A) + } + , + Sy.prototype._clearSelectedUserIdsCache = function() { + this.lastSelectedUserIds = null, + this.lastSelectedUserIdMap = null + } + , + Sy.prototype._render = function(A, e) { + var t = A.autoClearColor + , i = A.autoClearDepth + , o = A.autoClearStencil; + A.autoClearColor = !1, + A.autoClearDepth = !0, + A.autoClearStencil = !1, + A.render(this.selectionScene, e), + A.autoClearColor = t, + A.autoClearDepth = i, + A.autoClearStencil = o + } + , + Sy.prototype._updateScene = function(A) { + this._clearMeshesFromScene(), + this._addMeshesToScene(this._getSelectedMeshes(A)), + this._updateMatrixWorldForScene(), + this._updateSelectedLineMaterial() + } + , + Sy.prototype._clearMeshesFromScene = function() { + this.selectionObjectGroup.clear() + } + , + Sy.prototype._addMeshesToScene = function(A) { + for (var e = 0, t = A.length; t > e; e += 1) + this.selectionObjectGroup.add(A[e]) + } + , + Sy.prototype._updateMatrixWorldForScene = function() { + this.selectionObjectGroup.matrix.copy(this.viewer.getScene().getMatrixGlobal()), + this.selectionObjectGroup.updateMatrixWorld(!0) + } + , + Sy.prototype._getSelectedMeshes = function(A) { + var e = { + meshes: [] + } + , t = this + , i = uh.arrayToMap(A); + return this.viewer.getModelManager().traverseLoadedModels((function(o) { + o.getPickingMeshes(t, e, A, i) + } + )), + e.meshes + } + , + Sy.prototype._updateSelectedLineMaterial = function() { + vc.PickingLineWidthEnabled && this.selectedLineMaterial.resolution.set(this.viewer.domElement.offsetWidth, this.viewer.domElement.offsetHeight) + } + , + Sy.prototype.setSelectionColor = function(A, e) { + var t = this.selectedMaterial.opacity; + e = void 0 === e ? t : e, + "0x" + this.selectedMaterial.color.getHexString() === A && t === e || (this.selectedMaterial.color.setHex(A), + this.skinningSelectedMaterial.color.setHex(A), + this.instancedSelectedMaterial.color.setHex(A), + void 0 === e && null === e || (this.selectedMaterial.opacity = e, + this.skinningSelectedMaterial.opacity = e, + this.instancedSelectedMaterial.opacity = e, + 1 > e ? (this.selectedMaterial.transparent = !0, + this.skinningSelectedMaterial.transparent = !0, + this.instancedSelectedMaterial.transparent = !0) : (this.selectedMaterial.transparent = !1, + this.skinningSelectedMaterial.transparent = !1, + this.instancedSelectedMaterial.transparent = !1)), + this.selectedMaterial.needsUpdate = !0, + this.skinningSelectedMaterial.needsUpdate = !0, + this.instancedSelectedMaterial.needsUpdate = !0) + } + , + Sy.prototype.getSelectionColor = function(A, e) { + var t = this.selectedMaterial.opacity; + return new Xh(this.selectedMaterial.color.getHex(),t) + } + , + Sy.prototype.setLineSelectionColor = function(A, e) { + var t = this.wireframeMaterial.opacity; + e = void 0 === e ? t : e, + "0x" + this.wireframeMaterial.color.getHexString() === A && t === e || (this.wireframeMaterial.color.setHex(A), + this.skinningWireframeMaterial.color.setHex(A), + this.selectedLineMaterial.color.setHex(A), + this.instancedWireFrameMaterial.color.setHex(A), + void 0 === e && null === e || (this.wireframeMaterial.opacity = e, + this.skinningWireframeMaterial.opacity = e, + this.selectedLineMaterial.opacity = e, + this.instancedWireFrameMaterial.opacity = e, + 1 > e ? (this.wireframeMaterial.transparent = !0, + this.skinningWireframeMaterial.transparent = !0, + this.selectedLineMaterial.transparent = !0, + this.instancedWireFrameMaterial.transparent = !0) : (this.wireframeMaterial.transparent = !1, + this.skinningWireframeMaterial.transparent = !1, + this.selectedLineMaterial.transparent = !1, + this.instancedWireFrameMaterial.transparent = !1)), + this.wireframeMaterial.needsUpdate = !0, + this.skinningWireframeMaterial.needsUpdate = !0, + this.selectedLineMaterial.needsUpdate = !0, + this.instancedWireFrameMaterial.needsUpdate = !0) + } + , + Sy.prototype.getLineSelectionColor = function() { + var A = this.wireframeMaterial.opacity; + return new Xh(this.wireframeMaterial.color.getHex(),A) + } + ; + var wy = new M + , My = function() { + function A(e) { + cc(this, A), + e = e || {}, + this.vertices = { + near: [new y, new y, new y, new y], + far: [new y, new y, new y, new y] + }, + void 0 !== e.projectionMatrix && this.setFromProjectionMatrix(e.projectionMatrix, e.maxFar || 1e4) + } + return dc(A, [{ + key: "setFromProjectionMatrix", + value: function(A, e) { + var t = 0 === A.elements[11]; + return wy.getInverse(A), + this.vertices.near[0].set(1, 1, -1), + this.vertices.near[1].set(1, -1, -1), + this.vertices.near[2].set(-1, -1, -1), + this.vertices.near[3].set(-1, 1, -1), + this.vertices.near.forEach((function(A) { + A.applyMatrix4(wy) + } + )), + this.vertices.far[0].set(1, 1, 1), + this.vertices.far[1].set(1, -1, 1), + this.vertices.far[2].set(-1, -1, 1), + this.vertices.far[3].set(-1, 1, 1), + this.vertices.far.forEach((function(A) { + A.applyMatrix4(wy); + var i = Math.abs(A.z); + t ? A.z *= Math.min(e / i, 1) : A.multiplyScalar(Math.min(e / i, 1)) + } + )), + this.vertices + } + }, { + key: "split", + value: function(e, t) { + for (; e.length > t.length; ) + t.push(new A); + t.length = e.length; + for (var i = 0; e.length > i; i += 1) { + var o = t[i]; + if (0 === i) + for (var n = 0; 4 > n; n += 1) + o.vertices.near[n].copy(this.vertices.near[n]); + else + for (var r = 0; 4 > r; r += 1) + o.vertices.near[r].lerpVectors(this.vertices.near[r], this.vertices.far[r], e[i - 1]); + if (i === e - 1) + for (var a = 0; 4 > a; a += 1) + o.vertices.far[a].copy(this.vertices.far[a]); + else + for (var s = 0; 4 > s; s += 1) + o.vertices.far[s].lerpVectors(this.vertices.near[s], this.vertices.far[s], e[i]) + } + } + }, { + key: "toSpace", + value: function(A, e) { + for (var t = 0; 4 > t; t += 1) + e.vertices.near[t].copy(this.vertices.near[t]).applyMatrix4(A), + e.vertices.far[t].copy(this.vertices.far[t]).applyMatrix4(A) + } + }]), + A + }() + , by = { + lights_fragment_begin: "\nGeometricContext geometry;\n\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n\n#ifdef CLEARCOAT\n\n\tgeometry.clearcoatNormal = clearcoatNormal;\n\n#endif\n\nIncidentLight directLight;\n\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\n\t\tpointLight = pointLights[ i ];\n\n\t\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\n\t}\n\n#endif\n\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\n\tSpotLight spotLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\n\t\tspotLight = spotLights[ i ];\n\n\t\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\n\t}\n\n#endif\n\n#if ( NUM_DIR_LIGHTS > 0) && defined( RE_Direct ) && defined( USE_CSM ) && defined( CSM_CASCADES )\n\n\tDirectionalLight directionalLight;\n\tfloat linearDepth = (vViewPosition.z) / (shadowFar - cameraNear);\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\n\t#if defined( USE_SHADOWMAP ) && defined( CSM_FADE )\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\n\t\t// NOTE: Depth gets larger away from the camera.\n\t\t// cascade.x is closer, cascade.y is further\n\t\tvec2 cascade = CSM_cascades[ i ];\n\t\tfloat cascadeCenter = ( cascade.x + cascade.y ) / 2.0;\n\t\tfloat closestEdge = linearDepth < cascadeCenter ? cascade.x : cascade.y;\n\t\tfloat margin = 0.25 * pow( closestEdge, 2.0 );\n\t\tfloat csmx = cascade.x - margin / 2.0;\n\t\tfloat csmy = cascade.y + margin / 2.0;\n\t\tif( i < NUM_DIR_LIGHT_SHADOWS && linearDepth >= csmx && ( linearDepth < csmy || i == CSM_CASCADES - 1 ) ) {\n\n\t\t\tfloat dist = min( linearDepth - csmx, csmy - linearDepth );\n\t\t\tfloat ratio = clamp( dist / margin, 0.0, 1.0 );\n\t\t\tif( i < NUM_DIR_LIGHT_SHADOWS ) {\n\n\t\t\t\tvec3 prevColor = directLight.color;\n\t\t\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\t\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\n\t\t\t\tbool shouldFadeLastCascade = i == CSM_CASCADES - 1 && linearDepth > cascadeCenter;\n\t\t\t\tdirectLight.color = mix( prevColor, directLight.color, shouldFadeLastCascade ? ratio : 1.0 );\n\n\t\t\t}\n\n\t\t\tReflectedLight prevLight = reflectedLight;\n\t\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\n\t\t\tbool shouldBlend = i != CSM_CASCADES - 1 || i == CSM_CASCADES - 1 && linearDepth < cascadeCenter;\n\t\t\tfloat blendRatio = shouldBlend ? ratio : 1.0;\n\n\t\t\treflectedLight.directDiffuse = mix( prevLight.directDiffuse, reflectedLight.directDiffuse, blendRatio );\n\t\t\treflectedLight.directSpecular = mix( prevLight.directSpecular, reflectedLight.directSpecular, blendRatio );\n\t\t\treflectedLight.indirectDiffuse = mix( prevLight.indirectDiffuse, reflectedLight.indirectDiffuse, blendRatio );\n\t\t\treflectedLight.indirectSpecular = mix( prevLight.indirectSpecular, reflectedLight.indirectSpecular, blendRatio );\n\n\t\t}\n\n\t}\n\t#else\n\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tif(linearDepth >= CSM_cascades[UNROLLED_LOOP_INDEX].x && linearDepth < CSM_cascades[UNROLLED_LOOP_INDEX].y) directLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\n\t\t#endif\n\n\t\tif(linearDepth >= CSM_cascades[UNROLLED_LOOP_INDEX].x && (linearDepth < CSM_cascades[UNROLLED_LOOP_INDEX].y || UNROLLED_LOOP_INDEX == CSM_CASCADES - 1)) RE_Direct( directLight, geometry, material, reflectedLight );\n\n\t}\n\n\t#endif\n\n#endif\n\n\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct ) && !defined( USE_CSM ) && !defined( CSM_CASCADES )\n\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\n\t\tdirectionalLight = directionalLights[ i ];\n\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\n\t}\n\n#endif\n\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\n\tRectAreaLight rectAreaLight;\n\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\n\t}\n\n#endif\n\n#if defined( RE_IndirectDiffuse )\n\n\tvec3 iblIrradiance = vec3( 0.0 );\n\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\n\tirradiance += getLightProbeIrradiance( lightProbe, geometry );\n\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\n\t\t#pragma unroll_loop\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\n\t\t}\n\n\t#endif\n\n#endif\n\n#if defined( RE_IndirectSpecular )\n\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n\n#endif\n", + lights_pars_begin: "\n#if defined( USE_CSM ) && defined( CSM_CASCADES )\nuniform vec2 CSM_cascades[CSM_CASCADES];\nuniform float cameraNear;\nuniform float shadowFar;\n#endif\n\t" + tt.lights_pars_begin + } + , Uy = new M + , Fy = new My + , Ky = new My + , Qy = new y + , Ry = new aA + , Ty = [] + , ky = [] + , Dy = function() { + function A(e) { + cc(this, A), + this.camera = (e = e || {}).camera, + this.parent = e.parent, + this.cascades = e.cascades || 3, + this.maxFar = e.maxFar || 1e5, + this.mode = e.mode || "practical", + this.shadowMapSize = e.shadowMapSize || 2048, + this.shadowBias = e.shadowBias || 1e-6, + this.lightDirection = e.lightDirection || new y(1,-1,1).normalize(), + this.lightIntensity = e.lightIntensity || 1, + this.lightNear = e.lightNear || 1, + this.lightFar = e.lightFar || 2e3, + this.lightMargin = e.lightMargin || 200, + this.customSplitsCallback = e.customSplitsCallback, + this.fade = !1, + this.mainFrustum = new My, + this.frustums = [], + this.breaks = [], + this.lights = [], + this.shaders = new Map, + this.createLights(), + this.getBreaks(), + this.initCascades(), + this.injectInclude() + } + return dc(A, [{ + key: "createLights", + value: function() { + for (var A = 0; this.cascades > A; A++) { + var e = new Ra(16777215,this.lightIntensity); + e.castShadow = !0, + e.intensity = .72, + e.distance = 300, + e.color.setHex(14800580), + e.position.set(-100, 100, 160), + e.shadow.mapSize.width = this.shadowMapSize, + e.shadow.mapSize.height = this.shadowMapSize, + e.shadow.camera.near = this.lightNear, + e.shadow.camera.far = this.lightFar, + e.shadow.bias = this.shadowBias, + e.updateMatrixWorld(), + this.parent.add(e), + this.parent.add(e.target), + this.lights.push(e) + } + } + }, { + key: "initCascades", + value: function() { + var A = this.camera; + A.updateProjectionMatrix(), + this.mainFrustum.setFromProjectionMatrix(A.projectionMatrix, this.maxFar), + this.mainFrustum.split(this.breaks, this.frustums) + } + }, { + key: "getBreaks", + value: function() { + var A = this.camera + , e = Math.min(A.far, this.maxFar); + switch (this.breaks.length = 0, + this.mode) { + case "uniform": + t(this.cascades, A.near, e, this.breaks); + break; + case "logarithmic": + i(this.cascades, A.near, e, this.breaks); + break; + case "practical": + !function(A, e, o, n, r) { + Ty.length = 0, + ky.length = 0, + i(A, e, o, ky), + t(A, e, o, Ty); + for (var s = 1; A > s; s++) + r.push(a.lerp(Ty[s - 1], ky[s - 1], n)); + r.push(1) + }(this.cascades, A.near, e, .5, this.breaks); + break; + case "custom": + void 0 === this.customSplitsCallback && console.error("CSM: Custom split scheme callback not defined."), + this.customSplitsCallback(this.cascades, A.near, e, this.breaks) + } + function t(A, e, t, i) { + for (var o = 1; A > o; o++) + i.push((e + (t - e) * o / A) / t); + i.push(1) + } + function i(A, e, t, i) { + for (var o = 1; A > o; o++) + i.push(e * (t / e) * (o / A) / t); + i.push(1) + } + } + }, { + key: "update", + value: function(A) { + for (var e = this.frustums, t = 0; e.length > t; t++) { + var i = this.lights[t]; + i.shadow.camera.updateMatrixWorld(!0), + Uy.multiplyMatrices(i.shadow.camera.matrixWorldInverse, A), + e[t].toSpace(Uy, Fy); + var o = Fy.vertices.near + , n = Fy.vertices.far + , r = n[0] + , a = void 0; + a = r.distanceTo(n[2]) > r.distanceTo(o[2]) ? n[2] : o[2]; + var s = r.distanceTo(a); + Ry.makeEmpty(); + for (var l = 0; 4 > l; l++) + Ry.expandByPoint(o[l]), + Ry.expandByPoint(n[l]); + if (this.fade) { + var c = this.camera + , h = Math.max(c.far, this.maxFar); + s += .25 * Math.pow(e[t].vertices.far[0].z / (h - c.near), 2) * (h - c.near) + } + var d = s / this.shadowMapSize; + Ry.getCenter(Qy), + Qy.z = Ry.max.z + this.lightMargin, + Qy.x = Math.floor(Qy.x / d) * d, + Qy.y = Math.floor(Qy.y / d) * d, + Qy.applyMatrix4(i.shadow.camera.matrixWorld), + i.shadow.camera.left = -s / 2, + i.shadow.camera.right = s / 2, + i.shadow.camera.top = s / 2, + i.shadow.camera.bottom = -s / 2, + i.position.copy(Qy), + i.target.position.copy(Qy), + i.target.position.x += this.lightDirection.x, + i.target.position.y += this.lightDirection.y, + i.target.position.z += this.lightDirection.z, + i.shadow.camera.updateProjectionMatrix(), + i.shadow.camera.updateMatrixWorld() + } + } + }, { + key: "injectInclude", + value: function() { + tt.lights_fragment_begin = by.lights_fragment_begin, + tt.lights_pars_begin = by.lights_pars_begin + } + }, { + key: "setupMaterial", + value: function(A) { + A.defines = A.defines || {}, + A.defines.USE_CSM = 1, + A.defines.CSM_CASCADES = this.cascades, + this.fade && (A.defines.CSM_FADE = ""); + var e = [] + , t = this + , i = this.shaders; + A.onBeforeCompile = function(o) { + var n = Math.min(t.camera.far, t.maxFar); + t.getExtendedBreaks(e), + console.log("www", e, e.length), + o.uniforms.CSM_cascades = { + value: e + }, + o.uniforms.cameraNear = { + value: t.camera.near + }, + o.uniforms.shadowFar = { + value: n + }, + i.set(A, o) + } + , + i.set(A, null) + } + }, { + key: "updateUniforms", + value: function() { + var A = Math.min(this.camera.far, this.maxFar); + this.shaders.forEach((function(e, t) { + if (null !== e) { + var i = e.uniforms; + this.getExtendedBreaks(i.CSM_cascades.value), + i.cameraNear.value = this.camera.near, + i.shadowFar.value = A + } + !this.fade && "CSM_FADE"in t.defines ? (delete t.defines.CSM_FADE, + t.needsUpdate = !0) : this.fade && !("CSM_FADE"in t.defines) && (t.defines.CSM_FADE = "", + t.needsUpdate = !0) + } + ), this) + } + }, { + key: "getExtendedBreaks", + value: function(A) { + for (; this.breaks.length > A.length; ) + A.push(new s); + A.length = this.breaks.length; + for (var e = 0; this.cascades > e; e++) { + var t = this.breaks[e]; + A[e].x = this.breaks[e - 1] || 0, + A[e].y = t + } + } + }, { + key: "updateFrustums", + value: function() { + this.getBreaks(), + this.initCascades(), + this.updateUniforms() + } + }, { + key: "helper", + value: function(A) { + for (var e, t, i = new ko({ + color: 16777215 + }), o = new H, n = 0; this.frustums.length > n; n++) { + this.frustums[n].toSpace(A, Ky), + e = new he, + t = []; + for (var r = 0; 5 > r; r++) { + var a = Ky.vertices.near[4 === r ? 0 : r]; + t.push(a.x, a.y, a.z) + } + e.setAttribute("position", new YA(new Float32Array(t),3)), + o.add(new Go(e,i)), + e = new he, + t = []; + for (var s = 0; 5 > s; s++) { + var l = Ky.vertices.far[4 === s ? 0 : s]; + t.push(l.x, l.y, l.z) + } + e.setAttribute("position", new YA(new Float32Array(t),3)), + o.add(new Go(e,i)); + for (var c = 0; 4 > c; c++) { + e = new he; + var h = Ky.vertices.near[c] + , d = Ky.vertices.far[c]; + (t = []).push(h.x, h.y, h.z), + t.push(d.x, d.y, d.z), + e.setAttribute("position", new YA(new Float32Array(t),3)), + o.add(new Go(e,i)) + } + } + return o + } + }, { + key: "remove", + value: function() { + for (var A = 0; this.lights.length > A; A++) + this.parent.remove(this.lights[A]) + } + }, { + key: "dispose", + value: function() { + var A = this.shaders; + A.forEach((function(A, e) { + delete e.onBeforeCompile, + delete e.defines.USE_CSM, + delete e.defines.CSM_CASCADES, + delete e.defines.CSM_FADE, + delete A.uniforms.CSM_cascades, + delete A.uniforms.cameraNear, + delete A.uniforms.shadowFar, + e.needsUpdate = !0 + } + )), + A.clear() + } + }]), + A + }() + , Ly = function(A) { + this.viewer = A, + this.renderer = null, + this.countRenderRequest = 0, + this.maxCountRenderRequest = 1e4, + this.rendering = !1, + this.incrementRenderHandle = 0, + this.composer = null, + this.blinkHandle = 0, + this.transparentSort = function(A, e) { + return A.groupOrder !== e.groupOrder ? A.groupOrder - e.groupOrder : A.renderOrder !== e.renderOrder ? A.renderOrder - e.renderOrder : A.z !== e.z ? e.z - A.z : A.id - e.id + } + }; + Ly.prototype.destroy = function() { + this.incrementRenderHandle > 0 && cancelAnimationFrame(this.incrementRenderHandle), + this.blinkHandle > 0 && cancelAnimationFrame(this.blinkHandle), + this.composer && (this.composer.destroy(), + this.composer = null), + this.renderer && (this.renderer.destroy && this.orderedRenderer && (this.renderer.destroy(), + this.renderer.setRenderer && this.renderer.setRenderer(null), + this.orderedRenderer = null), + this.renderer.dispose(), + this.renderer.domElement.parentNode && this.renderer.domElement.parentNode.removeChild(this.renderer.domElement)), + this.renderer = null, + this.pickingEffecter && (this.pickingEffecter.destroy(), + this.pickingEffecter = null), + this.viewer = null + } + , + Ly.prototype.setupRenderer = function(A) { + if (!this.renderer) { + var e = this.viewer; + this.renderer = new $i(A); + var t = e.domElement.offsetWidth + , i = e.domElement.offsetHeight; + this.renderer.toneMapping = 1, + this.renderer.setTransparentSort(this.transparentSort), + this.renderer.setClearColor(0, 0), + this.renderer.setPixelRatio(window.devicePixelRatio || 1), + this.renderer.setSize(t, i), + this.renderer.sortObjects = !0, + this.renderer.domElement.setAttribute("tabindex", "0"), + this.renderer.domElement.setAttribute("class", "main-canvas"), + e.domElement.appendChild(this.renderer.domElement), + this.composer = new By(this.renderer), + this.composer.init(e.modelManager, e.getScene(), e.camera, t, i), + this.composer.setOutlineEdgeColor(new Xh(vc.SelectionColor.color,vc.SelectionColor.opacity)) + } + } + , + Ly.prototype.resetupRenderer = function(A) { + var e = this.viewer; + A.context = this.renderer.getContext(); + var t = new $i(A); + t.setClearColor(this.renderer.getClearColor(), this.renderer.getClearAlpha()), + t.setPixelRatio(this.renderer.getPixelRatio()); + var i = this.renderer.getSize(new s); + t.setSize(i.x, i.y), + t.gammaFactor = this.renderer.gammaFactor, + t.sortObjects = this.renderer.sortObjects, + t.domElement = this.renderer.domElement, + t.toneMapping = this.renderer.toneMapping, + t.shadowMap.enabled = this.renderer.shadowMap.enabled, + t.clippingPlanes = this.renderer.clippingPlanes, + t.shadowMap.enabled = this.renderer.shadowMap.enabled, + t.shadowMap.type = this.renderer.shadowMap.type, + t.shadowMap.autoUpdate = this.renderer.shadowMap.autoUpdate, + t.shadowMap.needsUpdate = this.renderer.shadowMap.needsUpdate, + t.setTransparentSort(this.transparentSort), + this.renderer = t, + this.composer.reinit(this.renderer, e.modelManager, e.getScene(), e.camera, i.x, i.y) + } + , + Ly.prototype.setupShadowMap = function(A) { + var e = this.viewer + , t = new Dy({ + maxFar: A.far, + cascades: 4, + mode: A.mode, + parent: e.getScene().getExternalScene(), + shadowMapSize: 1024, + lightDirection: new y(A.lightX,A.lightY,A.lightZ).normalize(), + camera: e.camera + }); + this.csm = t; + var i = new $m; + i.add(A, "orthographic").onChange((function(A) {} + )), + i.add(A, "fade").onChange((function(A) { + t.fade = A, + t.updateFrustums() + } + )), + i.add(A, "far", 1, 5e7).step(1).name("shadow far").onChange((function(A) { + t.maxFar = A, + t.updateFrustums() + } + )), + i.add(A, "mode", ["uniform", "logarithmic", "practical"]).name("frustum split mode").onChange((function(A) { + t.mode = A, + t.updateFrustums() + } + )), + i.add(A, "lightX", -1, 1).name("light direction x").onChange((function(A) { + t.lightDirection.x = A + } + )), + i.add(A, "lightY", -1, 1).name("light direction y").onChange((function(A) { + t.lightDirection.y = A + } + )), + i.add(A, "lightZ", -1, 1).name("light direction z").onChange((function(A) { + t.lightDirection.z = A + } + )), + i.add(A, "margin", 0, 2e6).name("light margin").onChange((function(A) { + t.lightMargin = A + } + )), + i.add(A, "lightNear", 1, 1e7).name("light near").onChange((function(A) { + for (var e = 0; t.lights.length > e; e += 1) + t.lights[e].shadow.camera.near = A, + t.lights[e].shadow.camera.updateProjectionMatrix() + } + )), + i.add(A, "lightFar", 1, 1e8).name("light far").onChange((function(A) { + for (var e = 0; t.lights.length > e; e += 1) + t.lights[e].shadow.camera.far = A, + t.lights[e].shadow.camera.updateProjectionMatrix() + } + )) + } + , + Ly.prototype._applyPickingEffectForIncrement = function() { + if (this.getPickingEffecter()) { + var A = this.viewer.modelManager.isFilterApplied(); + this.orderedRenderer.restart(), + this.orderedRenderer.setNonBreakingRender(!0), + this.pickingEffecter.apply(A), + this.orderedRenderer.setNonBreakingRender(!1) + } + } + , + Ly.prototype._applyPickingEffect = function() { + if (this.getPickingEffecter()) { + var A = this.viewer.modelManager.isFilterApplied(); + this.pickingEffecter.apply(A) + } + } + , + Ly.prototype._forceRenderOneFrame = function() { + var A = this.viewer + , e = A.camera + , t = A.modelManager.getScene(); + this.orderedRenderer ? (this.orderedRenderer.restart(), + this.orderedRenderer.setNonBreakingRender(!0), + this.renderer.render(t, e, null, !0), + this.orderedRenderer.setNonBreakingRender(!1)) : (this.renderer.setRenderTarget(null), + this.renderer.clear(), + this.renderer.render(t, e)) + } + , + Ly.prototype.incrementRender = function(A) { + if (this.countRenderRequest += 1, + this.countRenderRequest > this.maxCountRenderRequest && (this.countRenderRequest = 0), + !this.rendering && !this.pickingEffectRendering) { + this.rendering = !0; + var e = this + , t = this.viewer + , i = t.camera + , o = t.modelManager + , n = t.editorManager + , r = t.getScene() + , a = this.renderer; + o.calculateCameraModelRelation(i.position), + t.cameraControl.updateCamera(), + t.calculateNearFar(), + r.updateLights(i); + var s = n.isUpdateRenderList; + a.resetIncrementRender(), + a.setObjectListUpdateState(s), + s && o.prepareScene(i), + this.incrementRenderHandle = requestAnimationFrame(function A(s, l) { + var c = s; + return function() { + a.autoClear = l, + n.cameraChange ? (a.resetIncrementRender(), + a.autoClear = !0, + n.cameraChange = !1) : a.autoClear = l, + a.render(r, i) || c !== e.countRenderRequest ? (e.rendering = !1, + c !== e.countRenderRequest ? t.render() : (e.pickingEffectRendering = !0, + e._applyPickingEffectForIncrement(), + o.setFilterApplied(!1), + t.onRenderFinishedCallback(), + o.disposeBufferAfterVbo(), + e.pickingEffectRendering = !1)) : e.incrementRenderHandle = requestAnimationFrame(A(c, !1)) + } + }(e.countRenderRequest, !0)), + t.onRenderCallback(), + t.cameraControl.setCameraChanging(!1) + } + } + , + Ly.prototype.fullRender = function() { + var A = this + , e = this.viewer + , t = e.camera + , i = e.modelManager + , o = e.getScene() + , n = this.renderer; + this.blinkHandle > 0 && cancelAnimationFrame(this.blinkHandle), + function r() { + e.cameraControl.updateCamera(), + e.calculateNearFar(), + o.updateLights(t), + i.getBlinkEnabled() && i.updateBlinkMaterial(); + var a = o.fillClipPlane && o.fillClipPlane.visible + , s = o.clipPlanes && o.clipPlanes.visible && vc.EnableBoxClippingCaps; + if (vc.ClippingCaps && (a || s) && vc.EnableClippingCaps) { + if (a || s) { + var l = o.getFillClipPlane() + , c = o.getClipPlanes() + , h = e.modelManager.getModelKeys(); + i.prepareCapScene(), + n.clear(), + n.autoClear = !1, + a ? (l.capPlane.planeMesh.visible = !0, + l.capPlane.lineMesh.visible = !0, + c.boxMesh.visible = !1) : (l.capPlane.planeMesh.visible = !1, + l.capPlane.lineMesh.visible = !1, + c.boxMesh.visible = !0), + l.planeHighLightMatrial.visible = !1, + c.planeHighLightMatrial.visible = !1, + c.planeMaterial.visible = !1, + o.overrideMaterial = o.backMaterial; + for (var d = {}, p = 0, g = h.length; g > p; p += 1) { + var u = h[p] + , f = e.modelManager.getModel(u); + if (d[u] = {}, + f) { + var m = f._getNodeGroup(gp.GEOMETRY, { + globalSpace: !0 + }); + d[u][gp.GEOMETRY] = m.visible, + m = f._getNodeGroup(gp.WIREFRAME, { + globalSpace: !0 + }), + d[u][gp.WIREFRAME] = m.visible, + m = f._getNodeGroup(gp.INSTANCEGEOMETRY, { + globalSpace: !0 + }), + d[u][gp.INSTANCEGEOMETRY] = m.visible, + m.visible = !1, + m = f._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { + globalSpace: !0 + }), + d[u][gp.INSTANCEWIREFRAMEGEOMETRY] = m.visible, + m.visible = !1 + } + } + n.render(o, t), + o.overrideMaterial = o.backInstanceMaterial; + for (var C = 0, y = h.length; y > C; C += 1) { + var v = h[C] + , I = e.modelManager.getModel(v); + if (I) { + var E = I._getNodeGroup(gp.GEOMETRY, { + globalSpace: !0 + }); + E.visible = !1, + (E = I._getNodeGroup(gp.WIREFRAME, { + globalSpace: !0 + })).visible = !1, + (E = I._getNodeGroup(gp.INSTANCEGEOMETRY, { + globalSpace: !0 + })).visible = d[v][gp.INSTANCEGEOMETRY], + (E = I._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { + globalSpace: !0 + })).visible = d[v][gp.INSTANCEWIREFRAMEGEOMETRY] + } + } + n.render(o, t), + o.overrideMaterial = o.frontMaterial; + for (var B = 0, x = h.length; x > B; B += 1) { + var S = h[B] + , w = e.modelManager.getModel(S); + if (w) { + var M = w._getNodeGroup(gp.GEOMETRY, { + globalSpace: !0 + }); + M.visible = d[S][gp.GEOMETRY], + (M = w._getNodeGroup(gp.WIREFRAME, { + globalSpace: !0 + })).visible = d[S][gp.WIREFRAME], + M = w._getNodeGroup(gp.INSTANCEGEOMETRY, { + globalSpace: !0 + }), + d[S][gp.INSTANCEGEOMETRY] = M.visible, + M.visible = !1, + M = w._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { + globalSpace: !0 + }), + d[S][gp.INSTANCEWIREFRAMEGEOMETRY] = M.visible, + M.visible = !1 + } + } + n.render(o, t), + o.overrideMaterial = o.frontInstanceMaterial; + for (var b = 0, U = h.length; U > b; b += 1) { + var F = h[b] + , K = e.modelManager.getModel(F); + if (K) { + var Q = K._getNodeGroup(gp.GEOMETRY, { + globalSpace: !0 + }); + Q.visible = !1, + (Q = K._getNodeGroup(gp.WIREFRAME, { + globalSpace: !0 + })).visible = !1, + (Q = K._getNodeGroup(gp.INSTANCEGEOMETRY, { + globalSpace: !0 + })).visible = d[F][gp.INSTANCEGEOMETRY], + (Q = K._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { + globalSpace: !0 + })).visible = d[F][gp.INSTANCEWIREFRAMEGEOMETRY] + } + } + n.render(o, t), + n.render(i.capsScene, t), + o.overrideMaterial = null, + l.planeHighLightMatrial.visible = !0, + c.planeHighLightMatrial.visible = !0, + c.planeMaterial.visible = !0; + for (var R = 0, T = h.length; T > R; R += 1) { + var k = h[R] + , D = e.modelManager.getModel(k); + if (D) { + var L = D._getNodeGroup(gp.GEOMETRY, { + globalSpace: !0 + }); + L.visible = d[k][gp.GEOMETRY], + (L = D._getNodeGroup(gp.WIREFRAME, { + globalSpace: !0 + })).visible = d[k][gp.WIREFRAME], + (L = D._getNodeGroup(gp.INSTANCEGEOMETRY, { + globalSpace: !0 + })).visible = d[k][gp.INSTANCEGEOMETRY], + (L = D._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { + globalSpace: !0 + })).visible = d[k][gp.INSTANCEWIREFRAMEGEOMETRY] + } + } + d = null, + n.render(o, t) + } + } else + !vc.PickingEffect && vc.EnableSelectionOutline && A.composer && e.getSelection().length > 0 ? A.composer.render() : (n.setRenderTarget(null), + n.clear(), + n.render(o, t)); + A._applyPickingEffect(), + i.setFilterApplied(!1), + e.onRenderListener(), + e.onRenderFinishedListener(), + e.cameraControl.isCameraChanging() && i.dispatchEvent({ + type: Rc.ON_CAMERA_CHANGED_AND_RENDERED + }), + e.cameraControl.setCameraChanging(!1), + i.getBlinkEnabled() && (A.blinkHandle = requestAnimationFrame(r)), + i.disposeBufferAfterVbo() + }() + } + , + Ly.prototype.fillCavityRender = function(A) { + var e = this.viewer + , t = e.camera + , i = e.modelManager + , o = this.renderer + , n = e.getScene(); + function r(A, e, t, i) { + var o = new Xi + , n = new jA; + n.depthWrite = !1, + n.depthTest = !1, + n.colorWrite = !1, + n.stencilWrite = !0, + n.stencilFunc = 519; + var r = n.clone(); + r.side = 1, + r.clippingPlanes = [e], + r.stencilFail = 34055, + r.stencilZFail = 34055, + r.stencilZPass = 34055; + var a = new Ue(A,r); + a.matrixWorld = i.matrixWorld, + a.renderOrder = t, + o.add(a); + var s = n.clone(); + s.side = 0, + s.clippingPlanes = [e], + s.stencilFail = 34056, + s.stencilZFail = 34056, + s.stencilZPass = 34056; + var l = new Ue(A,s); + return l.renderOrder = t, + l.matrixWorld = i.matrixWorld, + o.add(l), + o + } + this.blinkHandle > 0 && cancelAnimationFrame(this.blinkHandle), + function A() { + e.cameraControl.updateCamera(), + e.calculateNearFar(), + n.updateLights(t), + i.getBlinkEnabled() && i.updateBlinkMaterial(); + var a = n.fillClipPlane && n.fillClipPlane.visible + , s = n.clipPlanes && n.clipPlanes.visible + , l = o.autoClear + , c = o.sortObjects; + if (vc.ClippingCaps && (a || s)) { + if (a) { + var h = n.getFillClipPlane() + , d = n.getClipPlanes() + , p = e.modelManager.getModelKeys(); + i.prepareCapScene(), + o.clear(), + o.autoClear = !1, + a ? (h.capPlane.planeMesh.visible = !0, + h.capPlane.lineMesh.visible = !0, + d.boxMesh.visible = !1) : (h.capPlane.planeMesh.visible = !1, + h.capPlane.lineMesh.visible = !1, + d.boxMesh.visible = !0), + h.planeHighLightMatrial.visible = !1, + d.planeHighLightMatrial.visible = !1, + d.planeMaterial.visible = !1, + n.overrideMaterial = n.backMaterial; + for (var g = {}, u = 0, f = p.length; f > u; u += 1) { + var m = p[u] + , C = e.modelManager.getModel(m); + if (g[m] = {}, + C) { + var y = C._getNodeGroup(gp.GEOMETRY, { + globalSpace: !0 + }); + g[m][gp.GEOMETRY] = y.visible, + y = C._getNodeGroup(gp.WIREFRAME, { + globalSpace: !0 + }), + g[m][gp.WIREFRAME] = y.visible, + y = C._getNodeGroup(gp.INSTANCEGEOMETRY, { + globalSpace: !0 + }), + g[m][gp.INSTANCEGEOMETRY] = y.visible, + y.visible = !1, + y = C._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { + globalSpace: !0 + }), + g[m][gp.INSTANCEWIREFRAMEGEOMETRY] = y.visible, + y.visible = !1 + } + } + o.render(n, t), + n.overrideMaterial = n.backInstanceMaterial; + for (var v = 0, I = p.length; I > v; v += 1) { + var E = p[v] + , B = e.modelManager.getModel(E); + if (B) { + var x = B._getNodeGroup(gp.GEOMETRY, { + globalSpace: !0 + }); + x.visible = !1, + (x = B._getNodeGroup(gp.WIREFRAME, { + globalSpace: !0 + })).visible = !1, + (x = B._getNodeGroup(gp.INSTANCEGEOMETRY, { + globalSpace: !0 + })).visible = g[E][gp.INSTANCEGEOMETRY], + (x = B._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { + globalSpace: !0 + })).visible = g[E][gp.INSTANCEWIREFRAMEGEOMETRY] + } + } + o.render(n, t), + n.overrideMaterial = n.frontMaterial; + for (var S = 0, w = p.length; w > S; S += 1) { + var M = p[S] + , b = e.modelManager.getModel(M); + if (b) { + var U = b._getNodeGroup(gp.GEOMETRY, { + globalSpace: !0 + }); + U.visible = g[M][gp.GEOMETRY], + (U = b._getNodeGroup(gp.WIREFRAME, { + globalSpace: !0 + })).visible = g[M][gp.WIREFRAME], + U = b._getNodeGroup(gp.INSTANCEGEOMETRY, { + globalSpace: !0 + }), + g[M][gp.INSTANCEGEOMETRY] = U.visible, + U.visible = !1, + U = b._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { + globalSpace: !0 + }), + g[M][gp.INSTANCEWIREFRAMEGEOMETRY] = U.visible, + U.visible = !1 + } + } + o.render(n, t), + n.overrideMaterial = n.frontInstanceMaterial; + for (var F = 0, K = p.length; K > F; F += 1) { + var Q = p[F] + , R = e.modelManager.getModel(Q); + if (R) { + var T = R._getNodeGroup(gp.GEOMETRY, { + globalSpace: !0 + }); + T.visible = !1, + (T = R._getNodeGroup(gp.WIREFRAME, { + globalSpace: !0 + })).visible = !1, + (T = R._getNodeGroup(gp.INSTANCEGEOMETRY, { + globalSpace: !0 + })).visible = g[Q][gp.INSTANCEGEOMETRY], + (T = R._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { + globalSpace: !0 + })).visible = g[Q][gp.INSTANCEWIREFRAMEGEOMETRY] + } + } + o.render(n, t), + o.render(i.capsScene, t), + n.overrideMaterial = null, + a ? h.planeHighLightMatrial.visible = !0 : (d.planeHighLightMatrial.visible = !0, + d.planeMaterial.visible = !0); + for (var k = 0, D = p.length; D > k; k += 1) { + var L = p[k] + , N = e.modelManager.getModel(L); + if (N) { + var O = N._getNodeGroup(gp.GEOMETRY, { + globalSpace: !0 + }); + O.visible = g[L][gp.GEOMETRY], + (O = N._getNodeGroup(gp.WIREFRAME, { + globalSpace: !0 + })).visible = g[L][gp.WIREFRAME], + (O = N._getNodeGroup(gp.INSTANCEGEOMETRY, { + globalSpace: !0 + })).visible = g[L][gp.INSTANCEGEOMETRY], + (O = N._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { + globalSpace: !0 + })).visible = g[L][gp.INSTANCEWIREFRAMEGEOMETRY] + } + } + g = null, + o.render(n, t) + } + if (s) { + o.clear(), + o.autoClear = !1, + o.sortObjects = !0, + o.localClippingEnabled = !0; + var V = e.modelManager.getModelKeys() + , G = o.clippingPlanes; + o.clippingPlanes = []; + var P = n.getClipPlanes() + , q = new Y; + q.autoUpdate = !1; + for (var j = 0, H = n.lightArray.length; H > j; j += 1) + q.add(n.lightArray[j].clone()); + for (var W = [], J = 0; 6 > J; J += 1) + W[J] = P.children[J].clone(); + for (var z = 0, Z = V.length; Z > z; z += 1) { + var X = e.modelManager.getModel(V[z]); + if (X) + for (var _ = X._getNodeGroup(gp.GEOMETRY, { + globalSpace: !0 + }), $ = 0, AA = _.children.length; AA > $; $ += 1) { + var eA = new Xi; + eA.name = "object"; + var tA = [] + , iA = []; + q.add(eA); + var oA = _.children[$]; + if (oA.visible) { + for (var nA = oA.geometry, rA = [], aA = 0; 6 > aA; aA += 1) + rA[aA] = G[aA].clone(); + for (var sA = function(A) { + (cA = new Xi).name = "poGroup"; + var e = rA[A]; + (hA = r(nA, e, A + 1, oA)).name = "stencilGroup", + dA = new yr({ + color: oA.material[0].color, + metalness: .1, + roughness: .75, + clippingPlanes: rA.filter((function(A) { + return A !== e + } + )), + stencilWrite: !0, + stencilRef: 0, + stencilFunc: 517, + stencilFail: 7681, + stencilZFail: 7681, + stencilZPass: 7681 + }); + var t = W[A].clone(); + t.material = dA, + t.testNumber = A, + t.onAfterRender = function() { + o.clearStencil() + } + , + t.renderOrder = A + 1.1, + eA.add(hA), + cA.add(t), + tA.push(t), + q.add(cA), + iA.push(cA) + }, lA = 0; 6 > lA; lA += 1) { + var cA, hA, dA; + sA(lA) + } + for (var pA = oA.clone(), gA = 0, uA = pA.material.length; uA > gA; gA += 1) + pA.material[gA].clippingPlanes = rA; + pA.renderOrder = 6, + eA.add(pA), + o.render(q, t), + q.remove(eA); + for (var fA = 0, mA = iA.length; mA > fA; fA += 1) + q.remove(iA[fA]); + tA = null + } + } + } + o.sortObjects = c, + o.clippingPlanes = G, + o.autoClear = l, + o.localClippingEnabled = !1 + } + } else + vc.EnableSelectionOutline && e.composer && e.getSelection().length > 0 ? e.composer.render() : (o.setRenderTarget(null), + o.clear(), + o.render(n, t)); + e.onRenderListener(), + e.onRenderFinishedListener(), + e.cameraControl.setCameraChanging(!1), + i.getBlinkEnabled() && (e.blinkHandle = requestAnimationFrame(A)), + i.disposeBufferAfterVbo() + }() + } + , + Ly.prototype.fillCavityRender2 = function(A) { + var e = this.viewer + , t = e.camera + , i = e.modelManager + , o = this.renderer + , n = e.getScene(); + this.blinkHandle > 0 && cancelAnimationFrame(this.blinkHandle), + function A() { + e.cameraControl.updateCamera(), + e.calculateNearFar(), + n.updateLights(t), + i.getBlinkEnabled() && i.updateBlinkMaterial(); + var r = n.fillClipPlane && n.fillClipPlane.visible + , a = n.clipPlanes && n.clipPlanes.visible + , s = o.autoClear; + if (vc.ClippingCaps && (r || a)) { + if (r) { + var l = n.getFillClipPlane() + , c = n.getClipPlanes() + , h = e.modelManager.getModelKeys(); + i.prepareCapScene(), + o.clear(), + o.autoClear = !1, + r ? (l.capPlane.planeMesh.visible = !0, + l.capPlane.lineMesh.visible = !0, + c.boxMesh.visible = !1) : (l.capPlane.planeMesh.visible = !1, + l.capPlane.lineMesh.visible = !1, + c.boxMesh.visible = !0), + l.planeHighLightMatrial.visible = !1, + c.planeHighLightMatrial.visible = !1, + c.planeMaterial.visible = !1, + n.overrideMaterial = n.backMaterial; + for (var d = {}, p = 0, g = h.length; g > p; p += 1) { + var u = h[p] + , f = e.modelManager.getModel(u); + if (d[u] = {}, + f) { + var m = f._getNodeGroup(gp.GEOMETRY, { + globalSpace: !0 + }); + d[u][gp.GEOMETRY] = m.visible, + m = f._getNodeGroup(gp.WIREFRAME, { + globalSpace: !0 + }), + d[u][gp.WIREFRAME] = m.visible, + m = f._getNodeGroup(gp.INSTANCEGEOMETRY, { + globalSpace: !0 + }), + d[u][gp.INSTANCEGEOMETRY] = m.visible, + m.visible = !1, + m = f._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { + globalSpace: !0 + }), + d[u][gp.INSTANCEWIREFRAMEGEOMETRY] = m.visible, + m.visible = !1 + } + } + o.render(n, t), + n.overrideMaterial = n.backInstanceMaterial; + for (var C = 0, y = h.length; y > C; C += 1) { + var v = h[C] + , I = e.modelManager.getModel(v); + if (I) { + var E = I._getNodeGroup(gp.GEOMETRY, { + globalSpace: !0 + }); + E.visible = !1, + (E = I._getNodeGroup(gp.WIREFRAME, { + globalSpace: !0 + })).visible = !1, + (E = I._getNodeGroup(gp.INSTANCEGEOMETRY, { + globalSpace: !0 + })).visible = d[v][gp.INSTANCEGEOMETRY], + (E = I._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { + globalSpace: !0 + })).visible = d[v][gp.INSTANCEWIREFRAMEGEOMETRY] + } + } + o.render(n, t), + n.overrideMaterial = n.frontMaterial; + for (var B = 0, x = h.length; x > B; B += 1) { + var S = h[B] + , w = e.modelManager.getModel(S); + if (w) { + var M = w._getNodeGroup(gp.GEOMETRY, { + globalSpace: !0 + }); + M.visible = d[S][gp.GEOMETRY], + (M = w._getNodeGroup(gp.WIREFRAME, { + globalSpace: !0 + })).visible = d[S][gp.WIREFRAME], + M = w._getNodeGroup(gp.INSTANCEGEOMETRY, { + globalSpace: !0 + }), + d[S][gp.INSTANCEGEOMETRY] = M.visible, + M.visible = !1, + M = w._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { + globalSpace: !0 + }), + d[S][gp.INSTANCEWIREFRAMEGEOMETRY] = M.visible, + M.visible = !1 + } + } + o.render(n, t), + n.overrideMaterial = n.frontInstanceMaterial; + for (var b = 0, U = h.length; U > b; b += 1) { + var F = h[b] + , K = e.modelManager.getModel(F); + if (K) { + var Q = K._getNodeGroup(gp.GEOMETRY, { + globalSpace: !0 + }); + Q.visible = !1, + (Q = K._getNodeGroup(gp.WIREFRAME, { + globalSpace: !0 + })).visible = !1, + (Q = K._getNodeGroup(gp.INSTANCEGEOMETRY, { + globalSpace: !0 + })).visible = d[F][gp.INSTANCEGEOMETRY], + (Q = K._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { + globalSpace: !0 + })).visible = d[F][gp.INSTANCEWIREFRAMEGEOMETRY] + } + } + o.render(n, t), + o.render(i.capsScene, t), + n.overrideMaterial = null, + r ? l.planeHighLightMatrial.visible = !0 : (c.planeHighLightMatrial.visible = !0, + c.planeMaterial.visible = !0); + for (var R = 0, T = h.length; T > R; R += 1) { + var k = h[R] + , D = e.modelManager.getModel(k); + if (D) { + var L = D._getNodeGroup(gp.GEOMETRY, { + globalSpace: !0 + }); + L.visible = d[k][gp.GEOMETRY], + (L = D._getNodeGroup(gp.WIREFRAME, { + globalSpace: !0 + })).visible = d[k][gp.WIREFRAME], + (L = D._getNodeGroup(gp.INSTANCEGEOMETRY, { + globalSpace: !0 + })).visible = d[k][gp.INSTANCEGEOMETRY], + (L = D._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { + globalSpace: !0 + })).visible = d[k][gp.INSTANCEWIREFRAMEGEOMETRY] + } + } + d = null, + o.render(n, t) + } + if (a) { + o.clear(), + o.autoClear = !1; + for (var N = e.modelManager.getModelKeys(), O = o.clippingPlanes, V = o.tempPlanes || [], G = 0; 6 > G; G += 1) { + if (V[G]) { + if (V[G].equals(O[G])) + continue; + V[G] = O[G].clone() + } else + V[G] = O[G].clone(); + for (var P = 0, q = N.length; q > P; P += 1) { + var j = e.modelManager.getModel(N[P]); + if (j) { + var H = j._getNodeGroup(gp.GEOMETRY, { + globalSpace: !0 + }) + , Y = j._getNodeGroup("sectionFill_" + G); + Y.clear(); + for (var W = 0, J = H.children.length; J > W; W += 1) { + var z = H.children[W]; + if (z.visible) { + var Z = V[G].clone().applyMatrix4(z.matrixWorld) + , X = z.geometry; + if (X.boundingBox || X.computeBoundingBox(), + X.boundingBox.intersectsPlane(Z)) { + var _ = Tu.getShapeGeometryFromGeometryAndPlane(X, Z); + if (_) { + var $ = new Ue(_,z.material[0]); + Y.add($), + $.matrixWorld.copy(z.matrixWorld) + } + } + } + } + } + } + } + o.tempPlanes = V, + o.autoClear = s, + o.setRenderTarget(null), + o.clear(), + o.render(n, t) + } + } else + vc.EnableSelectionOutline && e.composer && e.getSelection().length > 0 ? e.composer.render() : (o.setRenderTarget(null), + o.clear(), + o.render(n, t)); + e.onRenderListener(), + e.onRenderFinishedListener(), + e.cameraControl.setCameraChanging(!1), + i.getBlinkEnabled() && (e.blinkHandle = requestAnimationFrame(A)), + i.disposeBufferAfterVbo() + }() + } + , + Ly.prototype.render = function(A) { + if (this.renderer) { + var e = this.viewer + , t = e.modelManager; + if (t.isEmpty()) + return Bh.log("model not loaded!"), + void this._forceRenderOneFrame(); + if (!t.checkLayerDataLoading()) { + e._checkDataChanged(); + e.getScene(); + e.camera.updateMatrixWorld(), + this.csm && (this.csm.update(e.camera.matrixWorld), + this.csm.updateFrustums()), + vc.IncrementRender ? this.incrementRender(A) : vc.FillCavity ? this.fillCavityRender2(A) : this.fullRender(A) + } + } + } + , + Ly.prototype.getRenderer = function() { + return this.renderer + } + , + Ly.prototype.setSize = function(A, e) { + this.renderer.setSize(A, e), + this.composer && this.composer.setSize(A, e) + } + , + Ly.prototype.getRendererSize = function() { + return this.renderer ? this.renderer.getSize() : { + width: 0, + height: 0 + } + } + , + Ly.prototype.getPickingEffecter = function() { + return vc.PickingEffect ? (this.pickingEffecter || (this.pickingEffecter = new Sy(this.viewer)), + this.pickingEffecter) : null + } + ; + var Ny = function(A, e) { + jo.call(this, A, e), + this.type = "SkinnedMesh", + this.bindMode = "attached", + this.bindMatrix = new M, + this.bindMatrixInverse = new M; + var t = new bo(this.initBones()); + this.bind(t, this.matrixWorld), + this.normalizeSkinWeights() + }; + Ny.prototype = Object.assign(Object.create(jo.prototype), { + constructor: Ny, + isSkinnedMesh: !0, + initBones: function() { + var A = [] + , e = null + , t = null + , i = null + , o = null; + if (this.geometry && void 0 !== this.geometry.bones) { + for (i = 0, + o = this.geometry.bones.length; o > i; i += 1) + t = this.geometry.bones[i], + e = new Uo, + A.push(e), + e.name = t.name, + e.position.fromArray(t.pos), + e.quaternion.fromArray(t.rotq), + void 0 !== t.scl && e.scale.fromArray(t.scl); + for (i = 0, + o = this.geometry.bones.length; o > i; i += 1) + -1 !== (t = this.geometry.bones[i]).parent && null !== t.parent && void 0 !== A[t.parent] ? A[t.parent].add(A[i]) : this.add(A[i]) + } + return this.updateMatrixWorld(!0), + A + }, + bind: function(A, e) { + this.skeleton = A, + void 0 === e && (this.updateMatrixWorld(!0), + this.skeleton.calculateInverses(), + e = this.matrixWorld), + this.bindMatrix.copy(e), + this.bindMatrixInverse.getInverse(e) + }, + pose: function() { + this.skeleton.pose() + }, + normalizeSkinWeights: function() { + var A = null + , e = null; + if (this.geometry && this.geometry.isGeometry) + for (e = 0; this.geometry.skinWeights.length > e; e += 1) { + var t = this.geometry.skinWeights[e]; + (A = 1 / t.lengthManhattan()) !== 1 / 0 ? t.multiplyScalar(A) : t.set(1, 0, 0, 0) + } + else if (this.geometry && this.geometry.isBufferGeometry) { + var i = new p + , o = this.geometry.attributes.skinWeight; + for (e = 0; o.count > e; e += 1) + i.x = o.getX(e), + i.y = o.getY(e), + i.z = o.getZ(e), + i.w = o.getW(e), + (A = 1 / i.lengthManhattan()) !== 1 / 0 ? i.multiplyScalar(A) : i.set(1, 0, 0, 0), + o.setXYZW(e, i.x, i.y, i.z, i.w) + } + }, + updateMatrixWorld: function(A) { + jo.prototype.updateMatrixWorld.call(this, A), + "attached" === this.bindMode ? this.bindMatrixInverse.getInverse(this.matrixWorld) : "detached" === this.bindMode ? this.bindMatrixInverse.getInverse(this.bindMatrix) : console.warn("THREE.SkinnedMesh: Unrecognized bindMode: " + this.bindMode) + }, + clone: function() { + return new this.constructor(this.geometry,this.material).copy(this) + } + }); + var Oy = function(A) { + of.call(this, A), + this.nodeGroupName = "PickingExternalMeshGroup", + this.pickingEffecter = this.manager.viewer.rendererManager.getPickingEffecter() + }; + Object.assign(Oy.prototype, of.prototype), + eu(Oy, [{ + key: "destroy", + value: function() { + this.pickingEffecter = null + } + }, { + key: "_disposeGeometryByNode", + value: function(A) { + A.traverseVisible((function(e) { + e !== A && (e.isMesh || e.isLine) && (e.material = null, + e.geometry.dispose()) + } + )) + } + }, { + key: "disposePickingNodeById", + value: function(A) { + for (var e = this.pickingNodeMap[A], t = 0, i = e.length; i > t; t += 1) + this._disposeGeometryByNode(e[t]), + e[t] = null + } + }, { + key: "updatePickingMeshes", + value: function(A, e, t) { + if (this.pickingNodeMap) { + for (var i = Object.keys(this.pickingNodeMap), o = 0, n = i.length; n > o; o += 1) { + var r = i[o] + , a = this.pickingNodeMap[r] + , s = 0 + , l = 0; + if (t[r] && this.manager.isPickableNode({ + userId: r, + name: r + })) + for (s = 0, + l = a.length; l > s; s += 1) + a[s].visible = !0; + else + for (s = 0, + l = a.length; l > s; s += 1) + a[s].visible = !1 + } + return this.getPickingNodeGroup() + } + } + }, { + key: "addNode", + value: function(A, e) { + this.addToPickingNodeMap(A, e) + } + }, { + key: "removeNodeById", + value: function(A) { + this.removeFromPickingNodeMap(A) + } + }, { + key: "clearNodes", + value: function() { + this.clearData() + } + }, { + key: "addToPickingNodeMap", + value: function(A, e) { + for (var t = [], i = !vc.BatchMergeEnabled, o = 0, n = e.length; n > o; o += 1) { + var r = this._createPickingNodeBy(e[o], i); + if (r) + if (Array.isArray(r)) + for (var a = 0, s = r.length; s > a; a += 1) + r[a].name = A, + t.push(r[a]); + else + r.name = A, + t.push(r) + } + this.pickingNodeMap || (this.pickingNodeMap = {}), + this.pickingNodeMap[A] = t, + this.addToPickingNodeGroup(t) + } + }, { + key: "_createPickingNodeBy", + value: function(A, e) { + var t = this + , i = {} + , o = {}; + if ("Object3D" === A.type || A instanceof Xi || A instanceof ep) { + var n = new Xi; + n.copy(A, !1), + A.animations && (n.animations = A.animations), + A.traverseVisible((function(n) { + if (n !== A) { + var r = null; + if ("Object3D" === n.type || n instanceof Xi || n instanceof ep || n instanceof Uo) + (r = n instanceof Uo ? new Uo : new Xi).copy(n, !1), + i[n.uuid] = { + destination: r, + source: n + }; + else { + if (!n.isMesh && !n.isLine) + return; + (r = t._createPickingMeshesBy(n, e)) && (o[n.uuid] = { + destination: r, + source: n + }) + } + r = null + } + } + )); + var r = 0 + , a = 0 + , s = null + , l = Object.keys(i); + for (r = 0, + a = l.length; a > r; r += 1) { + var c = i[l[r]]; + c.source.parent !== A ? i[s = c.source.parent.uuid].destination.add(c.destination) : n.add(c.destination) + } + var h = Object.keys(o); + for (r = 0, + a = h.length; a > r; r += 1) { + var d = o[h[r]] + , p = 0 + , g = 0; + if (d.source.parent === A) + if (Array.isArray(d.destination)) + for (p = 0, + g = d.destination.length; g > p; p += 1) + n.add(d.destination[p]); + else + n.add(d.destination); + else if (s = d.source.parent.uuid, + Array.isArray(d.destination)) + for (p = 0, + g = d.destination.length; g > p; p += 1) + i[s].destination.add(d.destination[p]); + else + i[s].destination.add(d.destination) + } + return n + } + return A.isMesh || A.isLine ? t._createPickingMeshesBy(A, e) : null + } + }, { + key: "_createLineMeshBy", + value: function(A, e, t) { + var i = null + , o = null + , n = this.pickingEffecter; + if (vc.PickingLineWidthEnabled) { + i = n.selectedLineMaterial; + var r = new JC; + A.isLineSegments ? r.fromLineSegments(A) : A.isLineLoop ? r.fromLineLoop(A) : r.fromLine(A), + o = new XC(r,i), + Tu.copyMeshProperties(o, A), + o.renderOrder = t ? 1 : 0 + } else + i = n.selectedMaterial, + o = A.isLineSegments ? new jo(e,i) : A.isLineLoop ? new Ho(e,i) : new Go(e,i), + Tu.copyMeshProperties(o, A), + o.renderOrder = t ? 1 : 0; + return o + } + }, { + key: "_createMeshBy", + value: function(A, e, t) { + var i = new Ue(e,this.pickingEffecter.selectedMaterial); + return Tu.copyMeshProperties(i, A), + i.renderOrder = t ? 1 : 0, + i + } + }, { + key: "_createSkinnedMeshBy", + value: function(A, e, t) { + var i = new So(e,this.pickingEffecter.skinningSelectedMaterial); + return Tu.copyMeshProperties(i, A), + i.renderOrder = t ? 1 : 0, + i.bindMatrix.copy(A.bindMatrix), + i.bindMatrixInverse.copy(A.bindMatrixInverse), + i.bindMode = A.bindMode, + i.userData = A.userData, + i.skeleton = A.skeleton, + i + } + }, { + key: "_createSkinnedWireFrameBy", + value: function(A, e, t) { + if (!e.index) + return null; + var i = this.pickingEffecter.skinningWireframeMaterial + , o = Up(e.attributes.position.array, e.index.array) + , n = new he; + n.setIndex(new $A(o,1)), + n.setAttribute("position", e.getAttribute("position")), + n.setAttribute("skinIndex", e.getAttribute("skinIndex")), + n.setAttribute("skinWeight", e.getAttribute("skinWeight")); + var r = new Ny(n,i); + return Tu.copyMeshProperties(r, A), + r.bindMatrix.copy(A.bindMatrix), + r.bindMatrixInverse.copy(A.bindMatrixInverse), + r.bindMode = A.bindMode, + r.userData = A.userData, + r.skeleton = A.skeleton, + r.renderOrder = t ? 0 : 1, + r + } + }, { + key: "_createWireFrameBy", + value: function(A, e, t) { + if (!e.index) + return null; + var i = this.pickingEffecter.wireframeMaterial + , o = Up(e.attributes.position.array, e.index.array) + , n = new he; + n.setIndex(new $A(o,1)), + n.setAttribute("position", e.getAttribute("position")); + var r = new jo(n,i); + return Tu.copyMeshProperties(r, A), + r.renderOrder = t ? 0 : 1, + r + } + }, { + key: "_createPickingMeshesBy", + value: function(A, e) { + var t = Tu.createBufferGeometryWithPosAndSkin(A.geometry); + if (!t) + return null; + if (A.isLineSegments) + return this._createLineMeshBy(A, t, e); + var i = null + , o = null; + return A.isSkinnedMesh ? (i = this._createSkinnedMeshBy(A, t, e), + o = this._createSkinnedWireFrameBy(A, t, e)) : (i = this._createMeshBy(A, t, e), + o = this._createWireFrameBy(A, t, e)), + o ? [i, o] : i + } + }, { + key: "setAccumulateTransform", + value: function(A, e, t, i) { + if (this.pickingNodeMap && this.pickingNodeMap[A]) + for (var o = this.pickingNodeMap[A], n = 0, r = o.length; r > n; n += 1) { + var a = o[n]; + e && (a.position.x += e.x, + a.position.y += e.y, + a.position.z += e.z), + t && (a.scale.x *= t.x, + a.scale.y *= t.y, + a.scale.z *= t.z), + i && (a.rotation.x += i.x, + a.rotation.y += i.y, + a.rotation.z += i.z), + a.updateMatrixWorld() + } + } + }, { + key: "setTransform", + value: function(A, e, t, i, o) { + if (this.pickingNodeMap && this.pickingNodeMap[A]) + for (var n = this.pickingNodeMap[A], r = 0, a = n.length; a > r; r += 1) { + var s = n[r]; + o ? this.manager.setTransformForClonedMesh(s, e, t, i) : this.manager.setTransformForMesh(s, e, t, i) + } + } + }, { + key: "rotateOnBasePoint", + value: function(A, e, t, i) { + if (this.pickingNodeMap && this.pickingNodeMap[A]) { + var o = this.pickingNodeMap[A]; + if (o) + for (var n = 0, r = o.length; r > n; n += 1) { + var a = o[n] + , s = (new f).setFromAxisAngle(t, i); + a.quaternion.premultiply(s), + a.position.sub(e), + a.position.applyQuaternion(s), + a.position.add(e), + a.updateMatrixWorld() + } + } + } + }, { + key: "applyTransform", + value: function(A, e, t, i) { + if (this.pickingNodeMap && this.pickingNodeMap[A]) { + var o = this.manager.getTransformMatrix(e, t, i); + this.applyTransformMatrix(A, o) + } + } + }, { + key: "applyTransformMatrix", + value: function(A, e) { + if (this.pickingNodeMap && this.pickingNodeMap[A]) + for (var t = this.pickingNodeMap[A], i = 0, o = t.length; o > i; i += 1) + this.manager.updateMatrixWorldForMesh(t[i], e) + } + }]); + var Vy = function(A) { + this.viewer = A, + this.viewer.modelManager.registerPlugin(this), + this.meshes = {}, + this.customSelectMaterials = {}, + this.databagId = "ExternalComponent", + this.objectIds = null, + this.lastFilteredIds = null, + this.firstAnimation = !0, + this.animationIds = {}, + this.animationLength = 0, + this.animationId = 0, + this.invalidObjectType = ["invalidPlane"], + this.floorExplosion = !1, + this.boundingBoxWorld = void 0 + }; + Vy.prototype.destroy = function() { + this.pickingNodeGenerator && (this.pickingNodeGenerator.destroy(), + this.pickingNodeGenerator = null), + this._removeNodeGroup(), + this.meshes = null, + this.customSelectMaterials = null, + this.objectIds = null, + this.lastFilteredIds = null, + this._cancelAnimate(), + this.firstAnimation = null, + this.animationIds = null, + this.invalidObjectType = null, + this.viewer = null + } + , + Vy.prototype.addExternalObject = function(A) { + if (A && (A instanceof Xi || A instanceof Ue)) { + var e = uh.createUUID(); + this.meshes[e] = [A]; + var t = { + name: e, + userId: e, + nodeId: e, + state: Lc.Visible, + mesh: [A], + isExternalComponent: !0, + matrix: A.matrixWorld.clone() + } + , i = new aA; + return i.setFromObject(A), + t.boundingBox = i, + A.key = e, + this._getNodeGroup().add(A), + this._addToNodeInfoMap(t), + this._cacheNodeMaterial(A), + this.boundingBoxWorld ? this.boundingBoxWorld.union(i) : this.boundingBoxWorld = i.clone(), + this.viewer.modelManager.updateSceneBoundingBox(), + this._updateFilterManager(), + this.objectIds = Object.keys(this.meshes), + { + nodeId: e + } + } + } + , + Vy.prototype.getObjectCenterAndMatrixByNodeId = function(A) { + var e = void 0 + , t = this.getNodeInfosByUserId(A); + if (t && t.length > 0) { + e = { + matrix: [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], + center: [0, 0, 0] + }; + var i = t[0]; + if (i.matrix && (e.matrix = i.matrix.toArray()), + i.boundingBox) { + var o = new y; + i.boundingBox.getCenter(o), + e.center = o.toArray() + } + } + return e + } + , + Vy.prototype.addNode = function(A, e, t, i) { + if (this.meshes[A]) + Bh.error("Warning: name is already exist, please change name "); + else if (-1 === this.invalidObjectType.indexOf(e.type)) { + e instanceof Array || (e = [e]), + this.meshes[A] = e, + this._isPickingEffectEnabled() && this.getPickingNodeGenerator().addNode(A, e), + void 0 === t && (t = !1), + i && (this.customSelectMaterials[A] = i); + for (var o = new aA, n = 0, r = e.length; r > n; n += 1) { + var a = new aA; + a.setFromObject(e[n]), + a.isEmpty() && a.min.x === 1 / 0 && e[n].position && (a.min.copy(e[n].position), + a.max.copy(e[n].position)), + o.union(a), + e[n].box = a, + e[n].originBox = a.clone(); + var s = new M; + s.getInverse(e[n].matrix), + e[n].originBox.applyMatrix4(s), + this._initializeAnimation(e[n], A); + var l = e[n]; + l.key = A, + this._getNodeGroup().add(l), + l.updateMatrixWorld(!0), + t || this._cacheNodeMaterial(l) + } + var c = { + name: A, + userId: A, + state: Lc.Visible, + boundingBox: o, + mesh: e, + isExternalComponent: !0 + }; + 1 === e.length && (c.matrix = e[0].matrixWorld.clone()), + this._addToNodeInfoMap(c), + this.boundingBoxWorld ? this.boundingBoxWorld.union(o) : this.boundingBoxWorld = o.clone(), + this.viewer.modelManager.updateSceneBoundingBox(), + this._updateFilterManager(), + this.objectIds = Object.keys(this.meshes) + } else + Bh.error("Warning: the object is invalid") + } + , + Vy.prototype.getNodeById = function(A) { + var e = this.meshes[A]; + return e && 1 === e.length ? e[0] : e + } + , + Vy.prototype.removeNodeById = function(A) { + var e = this.meshes[A]; + if (!e) + return !1; + e[0].autoAnimation && (delete this.animationIds[A], + this.animationLength -= 1, + 0 === this.animationLength && this._cancelAnimate()), + delete this.meshes[A], + this._isPickingEffectEnabled() && this.getPickingNodeGenerator().removeNodeById(A), + this.customSelectMaterials[A] && delete this.customSelectMaterials[A]; + for (var t = this._getNodeGroup(), i = 0, o = e.length; o > i; i += 1) + t.remove(e[i]); + return this.filteredIds && this.filteredIds[A] && delete this.filteredIds[A], + this.lastFilteredIds && this.lastFilteredIds[A] && delete this.lastFilteredIds[A], + this.viewer.removeFromSelection([A]), + this.viewer.cancelTransformComponentByKey(A), + this._removeFromNodeInfoMap(A), + this._updateFilterManager(), + this.objectIds = Object.keys(this.meshes), + !0 + } + , + Vy.prototype.clearNodes = function() { + this._isPickingEffectEnabled() && this.getPickingNodeGenerator().clearNodes(), + this._getNodeGroup().clear(), + this._clearNodeInfoMap(), + this.meshes = {}, + this.customSelectMaterials = {}, + this.objectIds = null, + this.animationIds = {}, + this.animationLength = 0, + this._cancelAnimate() + } + , + Vy.prototype.getAllNodes = function() { + return this.meshes + } + , + Vy.prototype.isEmpty = function() { + return !this._hasNode() + } + , + Vy.prototype.setTransform = function(A, e, t, i, o) { + if (this.floorExplosion && o) + o(); + else { + var n = this.meshes[A]; + if (n) { + for (var r = 0, a = n.length; a > r; r += 1) { + var s = n[r]; + s.position.x = (e = e || s.position).x, + s.position.y = e.y, + s.position.z = e.z, + s.scale.x = (t = t || s.scale).x, + s.scale.y = t.y, + s.scale.z = t.z, + s.setRotationFromQuaternion(i = i || s.quaternion), + s.updateMatrixWorld(); + var l = s.originBox.clone(); + s.box = l.applyMatrix4(s.matrix), + s.levelName = null + } + this._isPickingEffectEnabled() && this.getPickingNodeGenerator().setTransform(A, e, t, i) + } + } + } + , + Vy.prototype.getTransform = function(A) { + var e = this.meshes[A]; + return e ? { + position: e[0].position, + scale: e[0].scale, + rotate: e[0].quaternion + } : null + } + , + Vy.prototype.applyTransform = function(A, e, t, i) { + if (this.meshes[A]) { + e = e || new y, + t = t || new y(1,1,1), + i = i || new f; + var o = new M; + o.compose(e, i, t), + this.applyTransformMatrix(A, o), + this._isPickingEffectEnabled() && this.getPickingNodeGenerator().applyTransformMatrix(A, o) + } + } + , + Vy.prototype.applyTransformMatrix = function(A, e) { + var t = this.meshes[A]; + if (t) + for (var i = 0, o = t.length; o > i; i += 1) { + var n = t[i]; + n._oriMatrix || (n._oriMatrix = n.matrix.clone()), + n.matrix.multiplyMatrices(e, n._oriMatrix), + n.updateMatrixWorld(!0); + var r = n.originBox.clone(); + n.box = r.applyMatrix4(n.matrix) + } + } + , + Vy.prototype.applyFilter = function() { + this._hasNode() && (this._collectFilteredIds(), + this._collectSelectedIds(), + this._collectHoveredIds(), + this._updateNodes()) + } + , + Vy.prototype.applySelection = function() { + this._hasNode() && (this._collectSelectedIds(), + this._collectHoveredIds(), + this._updateNodes()) + } + , + Vy.prototype.clearSelection = function() { + this._hasNode() && (this._clearSelectedIds(), + this.applyHover()) + } + , + Vy.prototype.applyHover = function() { + this._hasNode() && (this._collectHoveredIds(), + this._updateNodes()) + } + , + Vy.prototype.clearHover = function() { + this._hasNode() && (this._clearHoveredIds(), + this._updateNodes()) + } + , + Vy.prototype.getNodeInfosByUserId = function(A) { + if (this.nodeInfoMap) + return this.nodeInfoMap[A] + } + , + Vy.prototype.getAllNodeInfos = function(A) { + A[this.databagId] = this.nodeInfoMap || {} + } + , + Vy.prototype.calculateBoundingBox = function() { + if (this.nodeInfoMap) { + var A = new aA + , e = new aA; + for (var t in this.nodeInfoMap) + for (var i = this.nodeInfoMap[t], o = 0, n = i.length; n > o; o += 1) { + var r = i[o] + , a = r.mesh + , s = new aA; + for (o = 0, + n = a.length; n > o; o += 1) + e.makeEmpty(), + e.setFromObject(a[o]), + e.isEmpty() && e.min.x === 1 / 0 && a[o].position && (e.min.copy(a[o].position), + e.max.copy(a[o].position)), + s.union(e); + r.boundingBox.copy(s), + A.union(r.boundingBox) + } + this.boundingBoxWorld ? this.boundingBoxWorld.copy(A) : this.boundingBoxWorld = A + } + } + , + Vy.prototype.recalculateComponentBoundingbox = function(A) { + var e = this.getNodeInfosByUserId(A); + if (e) + for (var t = 0, i = e.length; i > t; t += 1) { + var o = e[t] + , n = o.mesh + , r = new aA + , a = new aA; + for (t = 0, + i = n.length; i > t; t += 1) + a.setFromObject(n[t]), + a.isEmpty() && a.min.x === 1 / 0 && n[t].position && (a.min.copy(n[t].position), + a.max.copy(n[t].position)), + r.union(a); + o.boundingBox.copy(r) + } + } + , + Vy.prototype.getBoundingBoxWorld = function() { + if (this.boundingBoxWorld) + return this.boundingBoxWorld.clone() + } + , + Vy.prototype.adjustVisibility = function(A) { + this._getNodeGroup().visible = A + } + , + Vy.prototype.changeVisibilityOfSelectedObjects = function(A) { + if (this.selectedIds) + for (var e = this.viewer.modelManager.filter, t = 0, i = this.selectedIds.length; i > t; t += 1) { + var o = this.selectedIds[t] + , n = this.meshes[o]; + if (n && e._isVisible({ + userId: o + })) + for (var r = 0, a = n.length; a > r; r += 1) + n[r].visible = A + } + } + , + Vy.prototype.changeVisibilityOfNonSelectedObjects = function(A) { + if (this.objectIds) { + var e = {}; + if (this.selectedIds) + for (var t = 0, i = this.selectedIds.length; i > t; t += 1) + e[this.selectedIds[t]] = !0; + for (var o = this.viewer.modelManager.filter, n = 0, r = this.objectIds.length; r > n; n += 1) { + var a = this.objectIds[n]; + if (!e[a] && o._isVisible({ + userId: a + })) + for (var s = this.meshes[a], l = 0, c = s.length; c > l; l += 1) + s[l].visible = A + } + } + } + , + Vy.prototype.adjustVisibilityOfObjectsWithoutOutline = function(A) { + if (this.objectIds) + for (var e = this.viewer.modelManager.filter, t = 0, i = this.objectIds.length; i > t; t += 1) { + var o = this.objectIds[t]; + if (e._isVisible({ + userId: o + })) + for (var n = this.meshes[o], r = 0, a = n.length; a > r; r += 1) + n[r].isSprite && (n[r].visible = A) + } + } + , + Vy.prototype._addToNodeInfoMap = function(A) { + this.nodeInfoMap || (this.nodeInfoMap = {}), + this.nodeInfoMap[A.userId] || (this.nodeInfoMap[A.userId] = []), + this.nodeInfoMap[A.userId].push(A) + } + , + Vy.prototype._removeFromNodeInfoMap = function(A) { + this.nodeInfoMap && this.nodeInfoMap[A] && delete this.nodeInfoMap[A] + } + , + Vy.prototype._clearNodeInfoMap = function() { + this.nodeInfoMap = null + } + , + Vy.prototype._updateFilterManager = function() { + var A = this.viewer.modelManager; + A.filter.reinitFilterManager(A.getNodeInfos()) + } + , + Vy.prototype._canBePick = function(A) { + return !!A._oriMaterial + } + , + Vy.prototype._getNodeGroup = function() { + return this.viewer.modelManager.scene.getOrCreateGroup(gp.EXTERNALCOMPONENTMANAGER, { + pickableType: Qc.Geometry, + globalSpace: !0 + }) + } + , + Vy.prototype._removeNodeGroup = function() { + this.viewer.modelManager.scene.removeGroupByName(gp.EXTERNALCOMPONENTMANAGER) + } + , + Vy.prototype._cacheNodeMaterial = function(A) { + uh.isGroupObject(A) ? A.traverse((function(A) { + if (uh.isMeshObject(A) && !A._oriMaterial && (A._oriMaterial = A.material, + !A.geometry.index && A.geometry.attributes && A.geometry.attributes.position)) { + for (var e = [], t = 0, i = A.geometry.attributes.position.array.length / 3; i > t; t += 1) + e.push(t); + A.geometry.setIndex(new YA(new Uint32Array(e),1)) + } + } + )) : A._oriMaterial || (A._oriMaterial = A.material) + } + , + Vy.prototype._collectFilteredIds = function() { + var A = this.filteredIds = {} + , e = this.viewer.modelManager.filter + , t = e._hasHiddenFileIdFilter() + , i = e._hasVisibleFilter() + , o = e._hasOverrideMaterialFilter() + , n = e._hasTransparentFilter(); + if (t || i || o || n) + for (var r = this.objectIds, a = zc, s = 0, l = r.length; l > s; s += 1) { + var c = r[s] + , h = { + userId: c + }; + if (i && !1 === e._isVisible(h)) + A[c] || (A[c] = {}), + A[c][a.HIDDEN] = !0; + else if (n && e._isTransparent(h)) + A[c] || (A[c] = {}), + A[c][a.TRANSPARENT] = !0; + else if (o && e._hasOverrideMaterial(h)) { + var d = e._getOverrideMaterial(h) + , p = d ? d.name : ""; + A[c] || (A[c] = {}), + A[c][a.OVERRIDED] = p + } + } + } + , + Vy.prototype._collectSelectedIds = function() { + var A = this.filteredIds = this.filteredIds || {} + , e = zc + , t = this.viewer.modelManager.sceneState.getSelection() + , i = {}; + this._clearSelectedIds(); + for (var o = 0, n = t.length; n > o; o += 1) { + var r = t[o]; + this.canBeSelectedId(r) && (A[r] || (A[r] = {}), + A[r][e.SELECTED] = !0, + i[r] = !0) + } + this.selectedIds = Object.keys(i) + } + , + Vy.prototype._clearSelectedIds = function() { + if (this.filteredIds && this.selectedIds && this.selectedIds.length) { + for (var A = 0, e = this.selectedIds.length; e > A; A += 1) { + var t = this.selectedIds[A]; + this.filteredIds[t] && delete this.filteredIds[t][zc.SELECTED] + } + this.selectedIds = null + } + } + , + Vy.prototype._collectHoveredIds = function() { + var A = this.viewer.modelManager.sceneState.hoverId; + if (A && this._hasObjectId(A)) { + var e = this.filteredIds = this.filteredIds || {}; + this.hoveredId = A, + e[A] || (e[A] = {}), + e[A][zc.HOVER] = !0 + } + } + , + Vy.prototype._clearHoveredIds = function() { + this.filteredIds && this.hoveredId && this.filteredIds[this.hoveredId] && (delete this.filteredIds[this.hoveredId][zc.HOVER], + this.hoveredId = void 0) + } + , + Vy.prototype._hasObjectId = function(A) { + return !!this.meshes[A] + } + , + Vy.prototype.isUserIdExist = function(A) { + return this._hasObjectId(A) + } + , + Vy.prototype.canBeSelectedId = function(A) { + var e = this.meshes[A]; + return !(!e || e[0].disPickable) + } + , + Vy.prototype._hasNode = function() { + return !(!this.objectIds || !this.objectIds.length) + } + , + Vy.prototype._traverseNodeById = function(A, e) { + if (this._hasObjectId(A)) + for (var t = this, i = this.meshes[A], o = 0, n = i.length; n > o; o += 1) { + var r = i[o]; + uh.isGroupObject(r) ? r.traverseVisible((function(A) { + uh.isMeshObject(A) && t._canBePick(A) && e && e(A) + } + )) : (uh.isMeshObject(r) || r.isSprite) && t._canBePick(r) && e && e(r) + } + } + , + Vy.prototype._resetNodeMaterial = function() { + var A = this.lastFilteredIds; + if (A && A.length) + for (var e = 0, t = A.length; t > e; e += 1) + this._updateNodeVisible(A[e], !0), + this._traverseNodeById(A[e], (function(A) { + A.material = A._oriMaterial + } + )) + } + , + Vy.prototype._updateNodeVisible = function(A, e) { + if (this._hasObjectId(A)) + for (var t = this.meshes[A], i = 0, o = t.length; o > i; i += 1) + t[i].visible = e + } + , + Vy.prototype._updateNodeById = function(A, e) { + if (this._hasObjectId(A)) { + var t = this.viewer.modelManager.sceneState + , i = zc + , o = this.filteredIds[A]; + if (o) + if (o[i.HIDDEN]) + this._updateNodeVisible(A, !1); + else { + var n = function(A, e) { + if (A._oriMaterial instanceof Array) { + for (var t = [], i = 0, o = A._oriMaterial.length; o > i; i += 1) { + var n = A._oriMaterial[i]; + n instanceof ld ? t.push(e) : t.push = Kd.cloneMaterialBaseOnColor(n, e) + } + A.material = t + } else + A.material = A._oriMaterial instanceof ld ? e : Kd.cloneMaterialBaseOnColor(A._oriMaterial, e) + }; + if (o[i.TRANSPARENT]) { + var r = e._getMaterialByName("scene"); + this._traverseNodeById(A, (function(A) { + n(A, r) + } + )) + } else if (this._isPickingEffectEnabled() || !o[i.SELECTED]) { + if (o[i.HOVER]) + if (o[i.OVERRIDED]) { + var a = t.getHoverMaterial(e._getMaterialByName(o[i.OVERRIDED])); + this._traverseNodeById(A, (function(A) { + n(A, a) + } + )) + } else + this._traverseNodeById(A, (function(A) { + var e = t.getHoverMaterial(A._oriMaterial); + n(A, e) + } + )); + else if (o[i.OVERRIDED]) { + var s = e._getMaterialByName(o[i.OVERRIDED]); + this._traverseNodeById(A, (function(A) { + n(A, s) + } + )) + } + } else { + var l = t.selectionMaterial + , c = this.customSelectMaterials[A]; + this._traverseNodeById(A, (function(A) { + c ? A.material = c : A._oriMaterial.isMeshPhongMaterial ? (A.material = t.phongSelectionMaterial, + A.material.skinning = A._oriMaterial.skinning) : n(A, l) + } + )) + } + } + } + } + , + Vy.prototype._updateNodes = function() { + var A = this.viewer.modelManager.filter; + if (this._resetNodeMaterial(), + this.filteredIds) { + for (var e in this.filteredIds) + this._updateNodeById(e, A); + this.lastFilteredIds = Object.keys(this.filteredIds) + } + } + , + Vy.prototype._initializeAnimation = function(A, e) { + if (A.autoAnimation) { + if ("fire" === A.type) { + var t = vc.SceneSize + , i = this.viewer.getBoundingBoxWorld().getSize() + , o = Math.max(i.x, i.y, i.z); + A._initializeSizetween(t / o / .01421) + } + this.firstAnimation && (this._animate(), + this.firstAnimation = !1), + this.animationIds[e] = !0, + this.animationLength += 1 + } + } + , + Vy.prototype._animate = function() { + var A = this; + !function e() { + for (var t in A.animationId = requestAnimationFrame(e), + A.animationIds) + for (var i = A.meshes[t], o = 0, n = i.length; n > o; o += 1) + i[o].autoAnimation && i[o].update && i[o].update(); + A.viewer.render() + }() + } + , + Vy.prototype._cancelAnimate = function() { + this.firstAnimation = !0, + cancelAnimationFrame(this.animationId), + this.animationId = 0 + } + , + Vy.prototype.isPickableNode = function(A) { + if (!this.canBeSelectedId(A.userId)) + return !1; + var e = this.viewer.modelManager.filter; + return !e._isHiddenFileId(A) && !1 !== e._isVisible(A) && !e._isTransparent(A) + } + , + Vy.prototype._isPickingEffectEnabled = function() { + return !1 + } + , + Vy.prototype.getPickingNodeGenerator = function() { + return this.pickingNodeGenerator || (this.pickingNodeGenerator = new Oy(this)), + this.pickingNodeGenerator + } + , + Vy.prototype.setCloneComponentMaterialsByKey = function(A, e, t) { + var i = this.meshes[A][0]; + if (!i) + return { + result: !1, + message: "mesh isn`t exist", + code: -1 + }; + if (!i.byClone) + return { + result: !1, + message: "mesh isn`t qualified", + code: -2 + }; + var o = 0 === t || Boolean(t); + if (Array.isArray(e) || (e = [e]), + o && (Array.isArray(t) || (t = [t])), + Array.isArray(i.material)) + if (o) { + var n = 0 + , r = !0 + , a = !1 + , s = void 0; + try { + for (var l, c = t[Symbol.iterator](); !(r = (l = c.next()).done); r = !0) { + var h = l.value; + if (!i.material[h] || !e[n]) + break; + i.material[h] = e[n], + n += 1 + } + } catch (A) { + a = !0, + s = A + } finally { + try { + r || null == c.return || c.return() + } finally { + if (a) + throw s + } + } + } else { + var d = 0 + , p = !0 + , g = !1 + , u = void 0; + try { + for (var f, m = e[Symbol.iterator](); !(p = (f = m.next()).done); p = !0) { + var C = f.value; + if (!i.material[d]) + break; + i.material[d] = C, + d += 1 + } + } catch (A) { + g = !0, + u = A + } finally { + try { + p || null == m.return || m.return() + } finally { + if (g) + throw u + } + } + } + else + i.material = e[0] + } + , + Vy.prototype.getModelManager = function() { + return this.viewer.modelManager + } + ; + var Gy = function() { + this.domElement = null, + this.camera = null, + this.highlightManager = null, + this.controller = document.getElementById("viewerController"), + this.countRenderRequest = 0, + this.maxCountRenderRequest = 1e4, + this.rendering = !1, + this.incrementRenderHandle = 0, + this.callbacks = {}, + this.tempBox = new aA, + this.tempVector3 = new y, + this.enableCameraNearFar = !0, + this.currentHomeView = Uc.Home, + this.initialView = Uc.Home, + this.filter = new xu, + this.modelManager = new ly(this.filter,this), + this.isRecalculationPlanes = !1, + this.calculationPlanesBind = this.calculationPlanes.bind(this), + this.addRenderFinishedListener(this.calculationPlanesBind), + this.uuid = "", + this.transitionAnimationState = !0, + this.animator = new dp, + this._renderStateChanged = !1; + var A = this; + this._renderTimer = null, + this.blinkHandle = 0, + this.needCheckTilesDataChange = !1, + this.clock = new as, + this.rendererManager = new Ly(this), + this.cameraStateWithFrustum = !1, + this.checkNeedRender = function() { + (A.needRender || A.modelManager.needUpdateAnimation()) && (A.needRender = vc.continueRender || !1, + A.modelManager.updateAnimation(), + A._render()), + A._renderTimer = requestAnimationFrame(A.checkNeedRender) + } + , + this.checkNeedApplyFilter = function() { + A.needApplyFilter && (A.needApplyFilter = !1, + A.modelManager.applyFilter(), + A.render()), + A._applyFilterTimer = requestAnimationFrame(A.checkNeedApplyFilter) + } + , + this.blink = {} + }; + Object.assign(Gy.prototype, Ld.prototype), + Object.assign(Gy.prototype, { + constructor: Gy, + addRenderListener: function(A) { + this.addEventListener("render", A) + }, + removeRenderListener: function(A) { + this.removeEventListener("render", A) + }, + onRenderListener: function() { + this.dispatchEvent("render") + }, + addRenderFinishedListener: function(A) { + this.addEventListener("renderFinished", A) + }, + removeRenderFinishedListener: function(A) { + this.removeEventListener("renderFinished", A) + }, + onRenderFinishedListener: function() { + this.dispatchEvent("renderFinished") + }, + removeAllListeners: function() { + this.removeAllEventListener() + }, + destroy: function() { + if (this.stopRedner(), + this.stopApplyFilter(), + this.removeAllListeners(), + this.controlManager.unregisterDomEventListeners(this.domElement), + this.renderer) { + var A = document.getElementById(this.uuid); + this.domElement.contains(this.getRenderer().domElement) && this.domElement.removeChild(A) + } + this.domElement = null, + this.renderSettings.canvas = null, + this.renderSettings.context = null, + this.renderSettings = null, + this.rendererManager.destroy(), + this.rendererManager = null, + this.camera = null, + this.defaultCamera = null, + this.cameraControl.destroy(), + this.cameraControl = null, + this.controlManager.destroy(), + this.modelManager.destroy(), + this.modelManager = null, + this.controlManager = null, + this.tmpBox = null, + this.filter = null, + this.calculationPlanesBind = null, + this.animator = null + }, + init: function(A) { + var e = this; + e.uuid = a.generateUUID(), + this.domElement = A, + this.resetBackgroundColor(); + var t = { + alpha: !0, + preserveDrawingBuffer: !0, + antialias: !0, + depth: !0, + maxDrawCacheNum: vc.maxDrawCacheNum, + logarithmicDepthBuffer: !1, + stencil: !0 + }; + vc.logarithmicDepthBuffer && (t.logarithmicDepthBuffer = !0), + vc.DisableAntialias && (t.antialias = !1); + var i = null; + try { + (i = document.createElement("canvas")).style.outline = "none", + i.getContext("webgl", t) || i.getContext("experimental-webgl", t) || (t.antialias = !1) + } catch (A) { + return !1 + } + Tu.initializeUnitInstances(); + var o = document.createElement("div"); + o.setAttribute("id", e.uuid), + o.style.width = "100%", + o.style.height = "100%", + t.canvas = i, + this.renderSettings = t, + this.camera = this.defaultCamera = new cp(45,A.offsetWidth,A.offsetHeight,.1,200 * vc.SceneSize), + this.camera.up = new y(0,0,1), + this.camera.realUp = new y(0,0,1), + this.camera.lookAt(this.camera.target), + this.cameraControl = new mp(this,this.camera,A,(function(A) { + e.render(A) + } + )), + this.controlManager = new Og, + this.controlManager.setControlMode(this, "pick"), + this.setOrbitButton("left"), + this.setReverseWheelDirection(!1), + this.registerDomEventListener(Rc.ON_CONTROL_END, (function() { + e.needCheckTilesDataChange = !0 + } + )), + this.registerDomEventListener(Rc.ON_CONTROL_ZOOM, (function() { + e.needCheckTilesDataChange = !0 + } + )), + e.rendererManager.setupRenderer(e.renderSettings), + o.appendChild(this.getRenderer().domElement), + this.domElement.appendChild(o), + this.controlManager.registerDomEventListeners(o), + this.startRender(), + this.startApplyFilter() + }, + getDomElement: function() { + return this.domElement ? this.domElement : null + }, + getRendererDomElement: function() { + return this.getRenderer() && this.getRenderer().domElement ? this.getRenderer().domElement : null + }, + render: function() { + this.needRender = !0 + }, + startRender: function() { + this._renderTimer = requestAnimationFrame(this.checkNeedRender) + }, + stopRedner: function() { + cancelAnimationFrame(this._renderTimer) + }, + startApplyFilter: function() { + this._applyFilterTimer = requestAnimationFrame(this.checkNeedApplyFilter) + }, + stopApplyFilter: function() { + cancelAnimationFrame(this._applyFilterTimer) + }, + _render: function(A) { + this.rendererManager.render(A) + }, + incrementRender: function(A) { + var e = this + , t = this.camera + , i = this.modelManager + , o = this.getRenderer() + , n = this.getScene(); + if (this.countRenderRequest += 1, + this.countRenderRequest > this.maxCountRenderRequest && (this.countRenderRequest = 0), + !this.rendering) { + this.rendering = !0, + i.calculateCameraModelRelation(t.position), + this.ar(), + this.cameraControl.updateCamera(), + n.updateLights(t); + var r = this.controlManager.isUpdateRenderList; + o.resetIncrementRender(), + o.setObjectListUpdateState(r), + this.incrementRenderHandle = requestAnimationFrame(function A(i, r) { + var a = i; + return function() { + o.autoClear = r, + e.controlManager.cameraChange ? (o.resetIncrementRender(), + o.autoClear = !0, + e.controlManager.cameraChange = !1) : o.autoClear = r, + o.render(n, t) || a !== e.countRenderRequest ? (e.rendering = !1, + a !== e.countRenderRequest ? e.render() : e.onRenderFinishedListener()) : e.incrementRenderHandle = requestAnimationFrame(A(a, !1)) + } + }(e.countRenderRequest, !0)), + r && i.prepareScene(t), + this.onRenderFinishedListener(), + this.cameraControl.setCameraChanging(!1) + } + }, + fullRender: function(A) { + var e = this + , t = this.camera + , i = this.modelManager + , o = this.getRenderer() + , n = this.getScene(); + this.blinkHandle > 0 && cancelAnimationFrame(this.blinkHandle), + function A() { + e.calculateNearFar(), + e.cameraControl.updateCamera(), + n.updateLights(t), + i.getBlinkEnabled() && i.updateBlinkMaterial(); + var r = n.fillClipPlane && n.fillClipPlane.visible + , a = n.clipPlanes && n.clipPlanes.visible && vc.EnableBoxClippingCaps; + if (vc.ClippingCaps && (r || a) && vc.EnableClippingCaps) { + if (r || a) { + var s = n.getFillClipPlane() + , l = n.getClipPlanes() + , c = e.modelManager.getModelKeys(); + i.prepareCapScene(), + o.clear(), + o.autoClear = !1, + r ? (s.capPlane.planeMesh.visible = !0, + s.capPlane.lineMesh.visible = !0, + l.boxMesh.visible = !1) : (s.capPlane.planeMesh.visible = !1, + s.capPlane.lineMesh.visible = !1, + l.boxMesh.visible = !0), + s.planeHighLightMatrial.visible = !1, + l.planeHighLightMatrial.visible = !1, + l.planeMaterial.visible = !1, + n.overrideMaterial = n.backMaterial; + for (var h = {}, d = 0, p = c.length; p > d; d += 1) { + var g = c[d] + , u = e.modelManager.getModel(g); + if (h[g] = {}, + u) { + var f = u._getNodeGroup(gp.GEOMETRY, { + globalSpace: !0 + }); + h[g][gp.GEOMETRY] = f.visible, + f = u._getNodeGroup(gp.WIREFRAME, { + globalSpace: !0 + }), + h[g][gp.WIREFRAME] = f.visible, + f = u._getNodeGroup(gp.INSTANCEGEOMETRY, { + globalSpace: !0 + }), + h[g][gp.INSTANCEGEOMETRY] = f.visible, + f.visible = !1, + f = u._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { + globalSpace: !0 + }), + h[g][gp.INSTANCEWIREFRAMEGEOMETRY] = f.visible, + f.visible = !1 + } + } + o.render(n, t), + n.overrideMaterial = n.backInstanceMaterial; + for (var m = 0, C = c.length; C > m; m += 1) { + var y = c[m] + , v = e.modelManager.getModel(y); + if (v) { + var I = v._getNodeGroup(gp.GEOMETRY, { + globalSpace: !0 + }); + I.visible = !1, + (I = v._getNodeGroup(gp.WIREFRAME, { + globalSpace: !0 + })).visible = !1, + (I = v._getNodeGroup(gp.INSTANCEGEOMETRY, { + globalSpace: !0 + })).visible = h[y][gp.INSTANCEGEOMETRY], + (I = v._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { + globalSpace: !0 + })).visible = h[y][gp.INSTANCEWIREFRAMEGEOMETRY] + } + } + o.render(n, t), + n.overrideMaterial = n.frontMaterial; + for (var E = 0, B = c.length; B > E; E += 1) { + var x = c[E] + , S = e.modelManager.getModel(x); + if (S) { + var w = S._getNodeGroup(gp.GEOMETRY, { + globalSpace: !0 + }); + w.visible = h[x][gp.GEOMETRY], + (w = S._getNodeGroup(gp.WIREFRAME, { + globalSpace: !0 + })).visible = h[x][gp.WIREFRAME], + w = S._getNodeGroup(gp.INSTANCEGEOMETRY, { + globalSpace: !0 + }), + h[x][gp.INSTANCEGEOMETRY] = w.visible, + w.visible = !1, + w = S._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { + globalSpace: !0 + }), + h[x][gp.INSTANCEWIREFRAMEGEOMETRY] = w.visible, + w.visible = !1 + } + } + o.render(n, t), + n.overrideMaterial = n.frontInstanceMaterial; + for (var M = 0, b = c.length; b > M; M += 1) { + var U = c[M] + , F = e.modelManager.getModel(U); + if (F) { + var K = F._getNodeGroup(gp.GEOMETRY, { + globalSpace: !0 + }); + K.visible = !1, + (K = F._getNodeGroup(gp.WIREFRAME, { + globalSpace: !0 + })).visible = !1, + (K = F._getNodeGroup(gp.INSTANCEGEOMETRY, { + globalSpace: !0 + })).visible = h[U][gp.INSTANCEGEOMETRY], + (K = F._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { + globalSpace: !0 + })).visible = h[U][gp.INSTANCEWIREFRAMEGEOMETRY] + } + } + o.render(n, t), + o.render(i.capsScene, t), + n.overrideMaterial = null, + s.planeHighLightMatrial.visible = !0, + l.planeHighLightMatrial.visible = !0, + l.planeMaterial.visible = !0; + for (var Q = 0, R = c.length; R > Q; Q += 1) { + var T = c[Q] + , k = e.modelManager.getModel(T); + if (k) { + var D = k._getNodeGroup(gp.GEOMETRY, { + globalSpace: !0 + }); + D.visible = h[T][gp.GEOMETRY], + (D = k._getNodeGroup(gp.WIREFRAME, { + globalSpace: !0 + })).visible = h[T][gp.WIREFRAME], + (D = k._getNodeGroup(gp.INSTANCEGEOMETRY, { + globalSpace: !0 + })).visible = h[T][gp.INSTANCEGEOMETRY], + (D = k._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { + globalSpace: !0 + })).visible = h[T][gp.INSTANCEWIREFRAMEGEOMETRY] + } + } + h = null, + o.render(n, t) + } + } else + vc.EnableSelectionOutline && e.composer && e.getSelection().length > 0 ? e.composer.render() : (o.setRenderTarget(null), + o.clear(), + o.render(n, t)); + e.onRenderListener(), + e.onRenderFinishedListener(), + e.cameraControl.setCameraChanging(!1), + i.getBlinkEnabled() && (e.blinkHandle = requestAnimationFrame(A)), + i.disposeBufferAfterVbo() + }() + }, + resize: function(A, e) { + if (this.camera && this.getRenderer()) { + var t = this.getDomElement(); + t && (t.style.height = e + "px", + t.style.width = A + "px"), + this.camera.setSize(A, e), + this.camera.updateProjectionMatrix(), + this.rendererManager.setSize(A, e), + this.dispatchEvent({ + type: "resize", + data: { + width: A, + height: e + } + }), + this.render() + } + }, + resizeByFrustum: function(A, e) { + this.camera && this.getRenderer() && (this.camera.updateProjectionMatrixByFrustum = !0, + this.camera.setSizeByFrustum(A, e), + this.render(), + this.camera.updateProjectionMatrixByFrustum = !1) + }, + calculateNearFar: function() { + this.calculateNearFar2() + }, + calculateNearFar2: function() { + var A = this.getScene() + , e = A.getBoundingBoxWorld() + , t = this.getRenderer(); + if (this.enableCameraNearFar) { + var i = this.camera + , o = i.position.clone().sub(A.getBoundingBoxWorld().getCenter(new y)).length() + , n = A.getBoundingBoxWorld().getSize(new y).length(); + if (null !== e && !e.isEmpty()) { + e.expandByScalar(1.1); + e.applyMatrix4(i.matrixWorldInverse); + var r = e.getSize(new y).length() / 1e3 + , a = 100; + 1e-4 > r ? a = .001 : .001 > r ? a = .01 : .01 > r ? a = .1 : .1 > r ? a = 1 : 1 > r && (a = 10); + var s = 1 + , l = 0; + e.max.z > 0 && 0 > e.min.z ? (l = -e.min.z, + s = Math.min(r / 2, a / 2)) : (l = -e.min.z, + s = Math.max(Math.min(r, a), -e.max.z)), + t.shadowMap.enabled && (l *= 3, + s /= 3), + l = Math.max(s + 1, l), + .1 > (l = Math.min(l, o + n)) - s && (s /= 2), + i.setNearFar(s, l) + } + } + }, + resetSelectionColor: function(A, e) { + this.modelManager.sceneState.setSelectionColor(A, e) + }, + calculateMinDistance: function(A, e) { + if (Bh.time("计算最小距离"), + A === e) { + var t = this.getBoundingBoxByIds([A]).getCenter(new y); + return { + start: t, + end: t, + minDistance: 0 + } + } + function i(A, e) { + for (var t = 0, i = 0, o = 0; 3 > o; o += 1) { + var n = A.min.getComponent(o) + , r = A.max.getComponent(o) + , a = e.min.getComponent(o) + , s = e.max.getComponent(o) + , l = 0; + n > s ? l = n - s : a > r && (l = a - r), + t += l * l; + var c = Math.max(s, r) - Math.min(n, a); + i += c * c + } + return { + minDis: Math.sqrt(t), + maxDis: Math.sqrt(i) + } + } + var o = new y + , n = new y + , r = new y; + function a(A, e, t, i, o, n, r, a, s) { + r.fromBufferAttribute(e, t), + a.fromBufferAttribute(e, i), + s.fromBufferAttribute(e, o), + n && (r.applyMatrix4(n), + a.applyMatrix4(n), + s.applyMatrix4(n)), + A.push(r), + A.push(a), + A.push(s) + } + function s(A, e, t) { + var i = { + start: null, + end: null, + minDistance: t + } + , s = A.mesh + , l = A.indexInfo + , c = s.matrix.clone().multiply(A.matrix) + , h = s.geometry + , d = h.attributes.position + , p = l ? l.indexStart : 0 + , g = h.getIndex().array + , u = l ? l.indexStart + l.indexCount : g.length + , f = e.mesh + , m = e.indexInfo + , C = f.matrix.clone().multiply(e.matrix) + , v = f.geometry + , I = v.attributes.position + , E = m ? m.indexStart : 0 + , B = v.getIndex().array + , x = m ? m.indexStart + m.indexCount : B.length + , S = A.boundingBox + , w = e.boundingBox; + if (S.intersectsBox(w)) { + for (var M = p, b = u; b > M; M += 3) { + var U = []; + a(U, d, g[M], g[M + 1], g[M + 2], c, o, n, r); + var F = Tu.minDistanceBetweenTriToMesh(U, f, m, C); + i.minDistance > F.minDistance && (i.minDistance = F.minDistance, + i.start = F.start, + i.end = F.end) + } + return i + } + var K = S.getSize(new y) + , Q = w.getSize(new y) + , R = S.min.x - w.max.x + , T = S.min.y - w.max.y + , k = S.min.z - w.max.z + , D = w.min.x - S.max.x + , L = w.min.y - S.max.y + , N = w.min.z - S.max.z + , O = w.min.x > S.min.x ? S.min.x : w.min.x + , V = w.min.y > S.min.y ? S.min.y : w.min.y + , G = w.min.z > S.min.z ? S.min.z : w.min.z + , P = S.max.x > w.max.x ? S.max.x : w.max.x + , q = S.max.y > w.max.y ? S.max.y : w.max.y + , j = S.max.z > w.max.z ? S.max.z : w.max.z + , H = R; + switch (T > H && (H = T), + k > H && (H = k), + D > H && (H = D), + L > H && (H = L), + N > H && (H = N), + H) { + case R: + O += Q.x / 2, + P -= K.x / 2; + break; + case T: + V += Q.y / 2, + q -= K.y / 2; + break; + case k: + G += Q.z / 2, + j -= K.z / 2; + break; + case D: + O += K.x / 2, + P -= Q.x / 2; + break; + case L: + V += K.y / 2, + q -= Q.y / 2; + break; + case N: + G += K.z / 2, + j -= Q.z / 2 + } + for (var Y = new aA(new y(O,V,G),new y(P,q,j)), W = [], J = [], z = [], Z = [], X = p, _ = u; _ > X; X += 3) { + var $ = []; + a($, d, g[X], g[X + 1], g[X + 2], c, new y, new y, new y), + z.push($); + for (var AA = 0, eA = $.length; eA > AA; AA += 1) + if (Y.containsPoint($[AA])) { + W.push($); + break + } + } + for (var tA = E, iA = x; iA > tA; tA += 3) { + var oA = []; + a(oA, I, B[tA], B[tA + 1], B[tA + 2], C, new y, new y, new y), + Z.push(oA); + for (var nA = 0, rA = oA.length; rA > nA; nA += 1) + if (Y.containsPoint(oA[nA])) { + J.push(oA); + break + } + } + W.length || (W = z), + J.length || (J = Z); + var sA = Tu.minDistanceBetweenTriToTri(W, J); + return i.minDistance > sA.minDistance && (i.minDistance = sA.minDistance, + i.start = sA.start, + i.end = sA.end), + i + } + var l = this.modelManager.getMinDistanceObjects(A, e); + if (!l) + return -1; + var c = [] + , h = { + start: null, + end: null, + minDistance: Number.POSITIVE_INFINITY + }; + for (var d in l) { + if (!l[d].boundingBox) { + var p = this.getBoundingBoxByIds([d]); + l[d].boundingBox = p + } + c.push(l[d]) + } + if (1 > c[0].length || 1 > c[1].length) + return Bh.timeEnd("计算最小距离"), + -1; + var g = c[0] + , u = c[1] + , f = g.length + , m = u.length + , C = null + , v = Number.POSITIVE_INFINITY; + if (f > 1 || m > 1) { + C = {}; + for (var I = 0; f > I; I += 1) + for (var E = g[I], B = 0; m > B; B += 1) { + var x = u[B]; + x.boundingBox = u.boundingBox, + E.boundingBox = g.boundingBox; + var S = i(E.boundingBox, x.boundingBox); + v = S.maxDis > v ? v : S.maxDis, + C[I + "_" + B] = S + } + } + for (var w = 0; f > w; w += 1) + for (var M = g[w], b = 0; m > b; b += 1) { + if (C) { + var U = C[w + "_" + b].minDis; + if (U > v || U > h.minDistance) + continue + } + var F = u[b]; + F.boundingBox = u.boundingBox, + M.boundingBox = g.boundingBox; + var K = s(M, F, h.minDistance); + if (h.minDistance > K.minDistance && (h.minDistance = K.minDistance, + h.start = K.start, + h.end = K.end), + 0 === h.minDistance) + return Bh.timeEnd("计算最小距离"), + h + } + return C = null, + Bh.timeEnd("计算最小距离"), + h + }, + registerDomEventListeners: function() { + this.domElement && this.controlManager.registerDomEventListeners(this.domElement) + }, + unregisterDomEventListeners: function() { + this.domElement && this.controlManager.unregisterDomEventListeners(this.domElement) + }, + registerEventListener: function(A, e) { + this.modelManager.addEventListener(A, e) + }, + unregisterEventListener: function(A, e) { + this.modelManager.removeEventListener(A, e) + }, + registerCameraEventListener: function(A, e) { + this.cameraControl.addEventListener(A, e) + }, + unregisterCameraEventListener: function(A, e) { + this.cameraControl.removeEventListener(A, e) + }, + registerDomEventListener: function(A, e) { + this.controlManager.addEventListener(A, e) + }, + unregisterDomEventListener: function(A, e) { + this.controlManager.removeEventListener(A, e) + }, + load: function(A) { + var e = this; + return this.modelManager.load(A, (function() {} + ), (function(A) { + Bh.time("Rendering: "), + e.camera.dirty = !0, + e.camera.dirty ? e.render() : (e.zoomAll(), + e.goToInitialView()), + Bh.timeEnd("Rendering: ") + } + )) + }, + loadWithType: function() {}, + loadTiles: function(A) { + var e = this; + return this.modelManager.loadTiles(A, (function() { + void 0 === e._useBatchMerge && (e._useBatchMerge = e.modelManager.shouldUseBatchRendering(), + vc.MergeComponent = e._useBatchMerge, + e._setupRenderer()) + } + ), (function(A) { + Bh.time("Rendering: "), + e.camera.dirty = !0, + e.camera.dirty ? e.render() : (e.zoomAll(), + e.goToInitialView()), + Bh.timeEnd("Rendering: ") + } + )) + }, + unload: function(A) { + var e = this.modelManager.unload(A); + return e && (vc.UserControlView || this.zoomAll(), + this.render()), + e + }, + unloadAll: function() { + this.modelManager.unloadAll(), + this.render() + }, + showModel: function(A) { + this.modelManager.showModel(A) && this.render() + }, + hideModel: function(A) { + this.modelManager.hideModel(A) && this.render() + }, + translateModel: function(A) { + var e = this._transformModelByKey(A); + e && e.switchToTranslateMode() + }, + rotateModel: function(A) { + var e = this._transformModelByKey(A); + e && e.switchToRotateMode() + }, + scaleModel: function(A) {}, + showScene: function(A, e) { + A && (A.setVisible(e), + this.render()) + }, + clearAll: function() { + this.getScene().clearAll() + }, + restore: function() { + this.getFilter().clear(), + this.getScene().disableClipPlanes(), + this.modelManager.dispatchEvent({ + type: Rc.ON_VIEWER_RESTORED + }) + }, + getScene: function() { + return this.modelManager.scene + }, + getCapsScene: function() { + return this.modelManager.capsScene + }, + getControlManager: function() { + return this.controlManager + }, + getUserdataByUserId: function(A) { + var e = this.modelManager.getNodeInfosByUserId(A); + return e && e instanceof Array ? e[0].userData : null + }, + getFilter: function() { + return this.filter + }, + getCurrentControlName: function() { + return this.controlManager.getCurrentControlName() + }, + getCurrentControlMode: function() { + return this.controlManager.getCurrentControlMode() + }, + setControlMode: function(A) { + this.controlManager.setControlMode(this, A), + this.render() + }, + setControlDefault: function() { + this.setControlMode(Gc.PICK) + }, + getBoundingBoxWorld: function() { + return this.getScene().getBoundingBoxWorld() + }, + getBoundingBox: function() { + return this.getScene().getBoundingBox() + }, + getModel: function(A) { + return this.modelManager.getModel(A) + }, + getModelManager: function() { + return this.modelManager + }, + setModelMatrix: function(A, e) { + var t = this.getModel(e); + t && t.setModelMatrix(A) + }, + getModelMatrix: function(A) { + var e = null + , t = this.getModel(A); + return t && (e = t.getModelMatrix()), + e + }, + overturnYAndZaxis: function(A) { + var e = this.getModel(A); + e && e.overturnYAndZaxis() + }, + zoomIn: function(A) { + void 0 === A && (A = .1), + 0 > A && (A = 0), + this.cameraControl.zoom(A) + }, + zoomOut: function(A) { + void 0 === A && (A = .1), + A > 0 ? A *= -1 : A = 0, + this.cameraControl.zoom(A) + }, + zoomAll: function(A, e, t) { + var i = this.getScene().getBoundingBox(); + this._zoomToLocalBox(i, A, e, t) + }, + zoomToBuilding: function(A, e, t) { + this.zoomAll(A, e, t) + }, + zoomToSelection: function(A, e, t) { + var i = this.getScene() + , o = this.getBoundingBoxByIds(this.modelManager.sceneState.getSelection()); + o.isEmpty() && (o = i.getBoundingBox()), + !0 === this.getTransitionAnimationState() ? this.animator.setStandardView(Uc.Keep, this, o, A) : this._zoomToLocalBox(o, A, e, t) + }, + _zoomToLocalBox: function(A, e, t, i) { + this.camera.zoomToBox(A, e, t, i), + this.cameraControl.update(!0, !0), + this.cameraControl.dirtyCamera(!0) + }, + zoomToBox: function(A, e, t, i) { + var o = new aA; + A ? (o.copy(A), + o.applyMatrix4(this.getScene().getMatrixGlobal())) : o.copy(this.getScene().getBoundingBox()), + !0 === this.getTransitionAnimationState() ? this.animator.setStandardView(Uc.Keep, this, o, e) : this._zoomToLocalBox(o, e, t, i) + }, + zoomToBoxByDirection: function(A, e, t, i) { + if (e) { + if (e && A) { + var o = A.clone() + , n = o.getCenter(new y).clone().add(e); + o.applyMatrix4(this.getScene().getMatrixGlobal()), + n.applyMatrix4(this.getScene().getMatrixGlobal()); + var r = n.clone().sub(o.getCenter(new y)); + r.length() > 1e-4 ? (r.normalize(), + this.camera.realUp.copy(H.DefaultUp), + this._zoomToLocalBox(o, t, i, r)) : this._zoomToLocalBox(o, t, i) + } + } else + this.zoomToBox(A, t, i) + }, + zoomToBoxWithOuterBox: function(A, e, t, i) { + if (e) { + if (e && A) { + var o = A.clone() + , n = e.getCenter(new y); + o.applyMatrix4(this.getScene().getMatrixGlobal()), + n.applyMatrix4(this.getScene().getMatrixGlobal()); + var r = n.clone().sub(o.getCenter(new y)); + r.length() > 1e-4 ? (r.normalize(), + this.camera.realUp.copy(H.DefaultUp), + this.controlManager.zoomToBox(this, o, t, i, r)) : this.controlManager.zoomToBox(this, o, t, i) + } + } else + this.zoomToBox(A, t, i) + }, + getObjectsInBox: function(A, e) { + var t = new aA; + return t.copy(A), + t.applyMatrix4(this.getScene().getMatrixGlobal()), + wg.getObjectsInBox(this.getScene(), t, this.modelManager, this, e) + }, + setStandardView: function(A, e, t, i) { + var o = this.camera + , n = this.getScene().getBoundingBox(); + if (this.transitionAnimationState) + this.animator.setStandardView(A, this, n, e, t, i); + else { + o.setStandardView(A, n); + this.camera.zoomToBox(n, e); + this.cameraControl.update(!0, !0), + i && i() + } + }, + rotateCameraByViewCubeSide: function(A) { + this._viewCubeAnimator && (this._viewCubeAnimator.cancelAnimation(), + this._viewCubeAnimator = void 0); + var e = this.camera + , t = this.getScene().getGeometryBoundingBox() + , i = new Cp + , o = this; + i.rotateCameraByViewCubeSide(e, t, A, (function(A, e, t, i) { + o.camera.position.copy(t); + var n = new y(0,1,0); + n.applyQuaternion(e), + o.camera.up = n, + o.camera.realUp = n.clone(), + o.camera.lookAt(i), + o.camera.target = i, + 1 > A || o.camera.quaternion.copy(e), + o.cameraControl.update(!0) + } + )), + this._viewCubeAnimator = i + }, + cancelCurrentAnimationByViewCube: function() { + this._viewCubeAnimator && (this._viewCubeAnimator.cancelAnimation(), + this._viewCubeAnimator = void 0) + }, + getLineSelectRange: function() { + return vc.LineSelectRange + }, + setLineSelectRange: function(A) { + vc.LineSelectRange = A + }, + _setStandardView: function(A, e) { + var t = this.camera + , i = this.getScene().getBoundingBox(); + t.setStandardView(A, i), + t.zoomToBox(i, e) + }, + setStandardViewWithBox: function(A, e, t, i) { + if (e ? e.applyMatrix4(this.getScene().getMatrixGlobal()) : e = this.getScene().getBoundingBox(), + this.transitionAnimationState) + this.animator.setStandardView(A, this, e, t); + else { + var o = this.camera; + o.setStandardView(A, e), + o.zoomToBox(e, t, i), + this.cameraControl.update(!0, !0) + } + }, + setTopView: function(A, e, t) { + this.setStandardViewWithBox(Uc.Top, A, e, t) + }, + setInitialView: function(A) { + this.initialView = A, + this._setStandardView(A) + }, + goToInitialView: function(A) { + this.setStandardView(this.initialView, A, null) + }, + setHomeView: function(A) { + this.currentHomeView = A, + this._setStandardView(A) + }, + getHomeView: function() { + return this.currentHomeView + }, + goToHomeView: function(A) { + this.setStandardView(this.currentHomeView, A, null) + }, + rotateByAxis: function(A, e, t) { + var i = t || this.cameraControl.calculatePivot(kc.CENTER, null) + , o = 2 * Math.PI / 60 / 60 * A; + if (e && "x" !== e) { + if ("y" !== e) + return void Bh.warn("Illegal rotation axis for ViewerImpl.rotateByAxis()."); + this.cameraControl.handleRotation(0, -o, i) + } else + this.cameraControl.handleRotation(-o, 0, i); + this.cameraControl.update(!0) + }, + lookAt: function(A, e, t) { + var i = new y; + i.subVectors(e, A), + this.camera.lookAtEx(e, i, t), + this.cameraControl.updateCamera(e), + this.render() + }, + setImageResPath: function(A) { + vc.TextureResRoot = A + }, + setLimitFrameTime: function(A) { + vc.IncrementRender && (A > 0 || (A = 30), + vc.LimitFrameTime = A) + }, + limitFrameRate: function(A) { + vc.IncrementRender && (A > 0 || (A = 4), + vc.LimitFrameTime = 1e3 / A) + }, + transformCamera: function(A) { + return Rd.transformCamera(A, this.modelManager.scene) + }, + getCamera: function() { + var A = this.getScene().getMatrixGlobal() + , e = this.cameraControl.getCamera() + , t = this.cameraControl.getCameraName() + , i = new Qd(t,e.position,e.target,e.up); + i = cp.drawingToWorld(i, A); + var o = {}; + if (this.cameraStateWithFrustum) { + var n = 2 * (e.near * Math.tan(.5 * a.DEG2RAD * e.fov) / e.zoom); + o = new Qd(t,i.position,i.target,i.up,e.fov,void 0,e.aspect * n,n) + } else + o = new Qd(t,i.position,i.target,i.up,e.fov,void 0); + return JSON.stringify(o) + }, + setCameraStateWithFrustum: function(A) { + this.cameraStateWithFrustum = A + }, + setCamera: function(A, e, t) { + this.camera.dirty = !0; + var i = this + , o = Rd.parseCameraInfo(A); + if (null === o) + Bh.log("Invalid camera info string. Fail to set camera."); + else if (this.switchToCamera(o.name)) { + var n = this.getScene().getMatrixGlobal() + , r = cp.worldToDrawing(o, n); + if (this.transitionAnimationState) { + var a = { + position: this.camera.position.clone(), + target: this.camera.target.clone(), + up: this.camera.realUp.clone() || this.camera.up.clone() + }; + this.animator.active(a, r, this, (function(A) { + i.cameraControl.update(!0, !0) + } + ), (function() { + o.frustumWidth && o.frustumHeight && i.resizeByFrustum(o.frustumWidth, o.frustumHeight), + t && t() + } + )) + } else { + var s = new y; + s.subVectors(r.target, r.position), + this.camera.lookAtEx(r.target, s, r.up), + e && this.cameraControl.updateCamera(), + o.frustumWidth && o.frustumHeight && (i.cameraControl.update(!0, !0), + i.resizeByFrustum(o.frustumWidth, o.frustumHeight)), + t && t() + } + } + }, + getRenderBufferScreenShot: function(A, e, t, i) { + this._render(); + var o = this.getRenderer().domElement + , n = o.toDataURL("image/png") + , r = o.width + , a = o.height + , s = window.devicePixelRatio || 1 + , l = e || r / s + , c = t || a / s; + if (!l || !c) + return i ? (i(n), + null) : n; + var h, d = null, p = null, g = 0, u = 0; + if (l > c || l / c > r / a ? (d = l, + u = c / 2 - (p = a / r * l) / 2) : (p = c, + g = l / 2 - (d = r / a * c) / 2), + i) + return (h = new Image).onload = function() { + var e = document.createElement("canvas") + , t = e.getContext("2d"); + e.width = l, + e.height = c, + A && (t.fillStyle = A, + t.fillRect(0, 0, l, c)), + t.drawImage(h, g, u, d, p); + var o = e.toDataURL("image/png"); + i(o) + } + , + h.src = n, + null; + (h = new Image).src = n; + var f = document.createElement("canvas") + , m = f.getContext("2d"); + return f.width = l, + f.height = c, + A && (m.fillStyle = A, + m.fillRect(0, 0, l, c)), + m.drawImage(h, g, u, d, p), + f.toDataURL("image/png") + }, + screenShot: function(A, e, t) { + var i = this; + return this._render(), + function() { + var o = i.getRenderer().domElement + , n = o.toDataURL("image/png") + , r = o.width + , a = o.height + , s = (window, + A) + , l = e; + if (!s || !l) + return t ? (t(n), + null) : n; + var c = null + , h = null + , d = 0 + , p = 0; + if (s > l || s / l > r / a ? (c = s, + p = l / 2 - (h = a / r * s) / 2) : (h = l, + d = s / 2 - (c = r / a * l) / 2), + t) { + var g = new Image; + return g.onload = function() { + var A = document.createElement("canvas") + , e = A.getContext("2d"); + A.width = s, + A.height = l, + e.drawImage(g, d, p, c, h); + var i = A.toDataURL("image/png"); + t(i) + } + , + g.src = n, + null + } + }() + }, + canvas2image: function(A, e, t, i) { + var o = null + , n = this; + return i ? (this.getRenderBufferScreenShot(A, e, t, (function(A) { + i(A), + n.render() + } + )), + null) : (o = this.getRenderBufferScreenShot(A, e, t), + this.render(), + o) + }, + lockAxisZ: function(A, e) { + var t = this.cameraControl; + if (t) { + var i = t.getZenith() + , o = this.getBoundingBox().getCenter().clone(); + if (A && void 0 !== e || (e = null), + e) { + var n = e[0] + , r = e[1]; + i > r ? t.handleRotation(0, r - i, o) : n > i && t.handleRotation(0, n - i, o), + this.render() + } + this.cameraControl.lockAxisZ(A), + this.cameraControl.setLockAxisZRange(e) + } + }, + isLockedAxisZ: function() { + return this.cameraControl.isLockedAxisZ() + }, + enableTranslucentByDClick: function(A) { + vc.EnableDemolishByDClick = A + }, + enableHitDetection: function(A) { + vc.EnableHitDetection = A + }, + enableRotate: function(A) { + jh.NoRotate = !A + }, + rotateCamera: function(A, e) { + this.cameraControl.processRotate(A, e), + this.cameraControl.update() + }, + getActiveCameraInfo: function() { + var A = {}; + A.up = new y, + A.dir = new y; + var e = this.camera + , t = e.getWorldDirection(new y); + return A.up.copy(e.realUp || e.up), + A.dir.copy(t), + A.quaternion = e.quaternion.clone(), + A + }, + calculationPlanes: function() { + if (this.isRecalculationPlanes) { + this.isRecalculationPlanes = !1; + var A = this.getScene() + , e = this.getBoundingBoxByIds(); + e.isEmpty() && (e = A.getBoundingBox()), + A.getClipPlanes().calculationPlanes(e.getSize(new y), e.getCenter(new y)), + this.render() + } + }, + recalculationPlanes: function() { + this.isRecalculationPlanes = !0 + }, + setOctantDepth: function(A) { + vc.OctantDepth = A + }, + resizePool: function(A) { + vc.maxObjectNumInPool = A, + this.modelManager.updateSceneRenderable(), + this.render() + }, + setCategoriesToHighPriority: function(A, e) { + this.modelManager.setCategoriesToHighPriority(A, 0 === e ? "inner" : "outer") + }, + clearCategoriesFromHighPriority: function(A) { + this.modelManager.clearCategoriesFromHighPriority(0 === A ? "inner" : "outer") + }, + clearAllCategoriesFromHighPriority: function() { + this.modelManager.clearAllCategoriesFromHighPriority() + }, + isolate: function(A, e) { + var t = this.getFilter(); + switch (e) { + case "hide": + t.setIsolateConditions(A, Nc.HIDDEN_OTHERS); + break; + case "translucent": + t.setIsolateConditions(A, Nc.TRANSLUCENT_OTHERS); + break; + default: + Bh.warn("no this isolate state : " + e) + } + }, + setIsolateMaterial: function(A) { + this.getFilter().setIsolateMaterial(A) + }, + resetIsolateMaterial: function() { + this.getFilter().resetIsolateMaterial() + }, + setOrbitButton: function(A) { + var e = this.controlManager._getControlByName(this, Gc.ORBIT) + , i = this.controlManager._getControlByName(this, Gc.PICK) + , o = {}; + "left" === A ? o = { + ORBIT: t.LEFT, + PAN2: t.MIDDLE, + PAN: t.RIGHT + } : "right" === A && (o = { + ORBIT: t.RIGHT, + PAN2: t.MIDDLE, + PAN: t.LEFT + }), + e && e.updateButtons(o), + i && i.updateButtons(o) + }, + showPickedInformation: function(A) {}, + setOrbitEnabled: function(A) { + jh.NoRotate = !0 !== A + }, + getOrbitEnabled: function() { + return !jh.NoRotate + }, + setSelectPadCallback: function(A) { + var e = this.controlManager.getCurrentControlMode(); + e && e.selectPad && (e.selectPad.callback = A) + }, + setDeviceMobile: function(A) { + vc.IsMobile = A || !1 + }, + setPointRotateMode: function(A) { + jh.RotatePivotMode = A + }, + worldToDrawing: function(A) { + if (!this.cameraControl) + return Bh.warn("camera is not initialized!!!"), + null; + var e = this.getScene().worldToDrawing(A); + return { + x: e.x, + y: e.y, + z: e.z + } + }, + drawingToWorld: function(A) { + if (!this.cameraControl) + return Bh.warn("camera is not initialized!!!"), + null; + var e = this.getScene().drawingToWorld(A); + return { + x: e.x, + y: e.y, + z: e.z + } + }, + worldToCanvas: function(A) { + var e = this.cameraControl; + if (!e) + return Bh.warn("camera is not initialized!!!"), + null; + var t = e.getContainerDimensions(); + if (!t) + return null; + var i = e.getCamera() + , o = this.getScene().worldToDrawing(A); + return Rd.drawingToCanvas(i, o, t.width, t.height) + }, + canvasToWorld: function(A) { + var e = this.cameraControl; + if (!e) + return Bh.warn("camera is not initialized!!!"), + null; + var t = e.getContainerDimensions(); + if (!t) + return null; + var i = e.getCamera() + , o = this.getScene() + , n = Rd.canvasToDrawing(i, A, t.width, t.height) + , r = o.drawingToWorld(n); + return { + x: r.x, + y: r.y, + z: r.z + } + }, + worldToClient: function(A) { + var e = this.cameraControl; + if (!e) + return Bh.warn("camera is not initialized!!!"), + null; + var t = e.getContainerDimensions(); + if (!t) + return null; + var i = e.getCamera() + , o = this.getScene().worldToDrawing(A) + , n = Rd.drawingToCanvas(i, o, t.width, t.height); + return n ? (n.x += t.left, + n.y += t.top, + n) : null + }, + worldPointsToClient: function(A, e) { + var t = this.cameraControl; + if (!t) + return Bh.warn("camera is not initialized!!!"), + null; + var i = t.getContainerDimensions(); + if (!i) + return null; + var o = t.getCamera() + , n = this.getScene() + , r = n.worldToDrawing(A) + , a = n.worldToDrawing(e) + , s = Rd.drawingPointsToCanvas(o, r, a, i.width, i.height); + return s ? (s.start.x += i.left, + s.start.y += i.top, + s.end.x += i.left, + s.end.y += i.top, + s) : null + }, + clientToWorld: function(A) { + var e = this.cameraControl; + if (!e) + return Bh.warn("camera is not initialized!!!"), + null; + var t = e.getContainerDimensions(); + if (!t) + return null; + (n = { + x: A.x, + y: A.y, + z: A.z + }).x -= t.left, + n.y -= t.top; + var i = e.getCamera() + , o = this.getScene() + , n = Rd.canvasToDrawing(i, n, t.width, t.height) + , r = o.drawingToWorld(n); + return { + x: r.x, + y: r.y, + z: r.z + } + }, + insideCamera: function(A) { + var e = this.cameraControl; + if (!e) + return Bh.warn("camera is not initialized!!!"), + !1; + var t = this.getScene().worldToDrawing(A); + return e.getFrustum().containsPoint(t) + }, + locateToPointWithParallelEye: function(A) { + var e = this.cameraControl; + if (!e) + return Bh.warn("camera is not initialized!!!"), + !1; + var t = this.getScene().worldToDrawing(A); + e.flyToPointWithParallelEye(t) + }, + locateToPoint: function(A) { + var e = this.cameraControl; + if (!e) + return Bh.warn("camera is not initialized!!!"), + !1; + var t = this.getScene().worldToDrawing(A); + e.flyToPoint(t) + }, + enableHover: function(A) { + vc.Hover = A + }, + getObjectsByClientCoordinates: function(A) { + return new fp(this).getObjectsByClientCoordinates(A) + }, + getIBLManager: function() { + return this.IBLManager + }, + loadEnvMap: function(A) { + for (var e = ["posx.hdr", "negx.hdr", "posy.hdr", "negy.hdr", "posz.hdr", "negz.hdr"], t = [], i = 0; 6 > i; i += 1) + t.push("/" + A + "/" + e[i]); + var o = this; + (new (void 0)).load(1015, t, (function(A) { + o.environmentCubeMap = A, + o.modelManager.updateMaterialsValue("envMap", A), + o.render() + } + )) + }, + setEnvMapIntensity: function(A) { + this.modelManager.updateMaterialsValue("envMapIntensity", A), + this.setRenderStateChanged(!0), + this.render() + }, + closeEnvMap: function() { + this.modelManager.updateMaterialsValue("envMap", null), + this.render() + }, + enableSSAO: function(A) { + return !vc.IncrementRender && (vc.EnableRenderPass = A, + vc.SSAO = A, + this.setRenderStateChanged(!0), + this.render(), + !0) + }, + switchNewStyleMaterial: function(A) { + this.modelManager.switchNewStyleMaterial(A), + this.setRenderStateChanged(!0), + this.render() + }, + enableColorWithoutLight: function(A) { + this.modelManager.enableColorWithoutLight(A), + this.setRenderStateChanged(!0), + this.render() + }, + addPlane: function(A, e, t, i) { + var o = new y; + o.addVectors(new y(A.x,A.y,A.z), new y(e.x,e.y,e.z)), + o.multiplyScalar(.5); + var n = new Ue(new et(e.x - A.x,e.y - A.y),new jA({ + side: 2, + transparent: !0, + depthTest: !0 + })); + n.position.copy(o), + n.renderOrder = 10, + this.getScene().getOrCreateGroup(gp.CUSTOMPLANE, { + globalSpace: !0 + }).add(n), + n.updateMatrixWorld(!0); + var r = this; + return (new Aa).load(t, (function(A) { + n.material.map = A, + n.material.needsUpdate = !0, + r.setRenderStateChanged(!0), + i && i() + } + )), + n + }, + removePlane: function(A) { + var e = this.getScene().getGroup(gp.CUSTOMPLANE); + e && e.remove(A) + }, + clearPlane: function() { + var A = this.getScene().getGroup(gp.CUSTOMPLANE); + A && A.clear() + }, + enableTextureMapping: function(A) { + vc.EnableTextureMapping = A + }, + enableLightmap: function(A) { + vc.EnableLightmap !== A && (vc.EnableLightmap = A) + }, + setLightmapIntensity: function(A) { + vc.LightmapIntensity !== A && (vc.LightmapIntensity = A) + }, + setReverseWheelDirection: function(A) { + jh.ReverseWheelDirection = Boolean(A) + }, + getReverseWheelDirection: function() { + return jh.ReverseWheelDirection + }, + setMovementSpeedRate: function(A) { + void 0 !== A && (jh.MovementSpeedRate = A) + }, + getMovementSpeedRate: function() { + return jh.MovementSpeedRate + }, + moveTo: function(A, e, t) { + var i = this.controlManager.control; + i && i.moveTo(A, e, t) + }, + rotateTo: function(A) { + var e = this.controlManager.control; + e && e.rotateTo(A) + }, + enableOcclusionTranslucent: function(A) { + vc.OcclusionTranslucentEnabled = Boolean(A) + }, + setOcclusionOpacity: function(A) { + vc.OcclusionOpacity = A + }, + setOcclusionDistanceToCamera: function(A) { + vc.OcclusionDistanceToCamera = A + }, + fitAndRotateBySelection: function() { + this.cameraControl && this.cameraControl.fitAndRotateBySelection() + }, + setRoamingWalkHeight: function(A, e, t) { + if (Array.isArray(A)) { + var i = this.cameraControl; + if (!i) + return Bh.log("camera is not initialized!!!"), + !1; + if (e > 0 || (e = 1750), + void 0 === t && (t = !0), + i.setCameraHeight(A, e), + t) { + var o = this.controlManager.getCurrentControl(); + o && o.name === Gc.WALK && o.update && i.flyOnWorld() + } + } else + Bh.log("elevations is not arry") + }, + setRoamingWalkAbsoluteHeight: function(A, e) { + var t = this.cameraControl; + if (!t) + return Bh.log("camera is not initialized!!!"), + !1; + if (void 0 === e && (e = !0), + t.setCameraAbsoluteHeight(A), + e) { + var i = this.controlManager.getCurrentControl(); + i && i.name === Gc.WALK && i.update && t.flyOnWorld() + } + }, + cameraToWorld: function(A) { + return this.camera ? cp.drawingToWorld(A, this.getScene().getMatrixGlobal()) : null + }, + cameraToDrawing: function(A) { + return this.camera ? cp.worldToDrawing(A, this.getScene().getMatrixGlobal()) : null + }, + clearSelection: function() { + this.modelManager.sceneState.clearSelection() + }, + clearModelSelection: function() { + this.modelManager.modelState.clearSelection() + }, + addToSelection: function(A) { + this.modelManager.sceneState.addSelection(A) + }, + addToModelSelection: function(A) { + this.modelManager.modelState.addSelection(A) + }, + removeFromSelection: function(A) { + this.modelManager.sceneState.removeSelection(A) + }, + removeFromModelSelection: function(A) { + this.modelManager.modelState.removeSelection(A) + }, + setSelection: function(A) { + this.modelManager.sceneState.setSelection(A) + }, + setModelSelection: function(A) { + this.modelManager.modelState.setSelection(A) + }, + getSelection: function() { + return this.modelManager.sceneState.getSelection() + }, + getModelSelection: function() { + return this.modelManager.modelState.getSelection() + }, + setSelectionColor: function(A, e) { + var t = A + , i = e; + A instanceof Xh && (t = A.getHex(), + i = A.getAlpha()), + this.modelManager.sceneState.setSelectionColor(t, i); + var o = this.rendererManager.getPickingEffecter(); + o && o.setSelectionColor(t, i) + }, + getSelectionColor: function() { + return this.modelManager.sceneState.getSelectionColor() + }, + restoreSelectionColor: function() { + this.setSelectionColor(new Xh(vc.SelectionColor.color,vc.SelectionColor.opacity)) + }, + setModelSelectionColor: function(A, e) { + this.modelManager.modelState.setSelectionColor(A, e) + }, + getScreenCoordFromSceneCoordAndCheckCover: function(A) { + var e = void 0 + , t = !1; + if ("[object Array]" == Object.prototype.toString.call(A)) + e = new y(A[0],A[1],A[2]); + else { + if ("[object Object]" != Object.prototype.toString.call(A)) + return; + e = new y(A.x,A.y,A.z) + } + if (e) { + var i = this.camera.position + , o = i.distanceTo(e) + , n = new Ds(i,e.clone().sub(i).normalize()) + , r = this.cameraControl.getIntersectContext({ + x: 100, + y: 100 + }) + , a = this.cameraControl.intersector.getIntersectByRay(r, n.ray); + if (!a) + return; + t = o - 300 > i.distanceTo(a.point) + } + return { + screenCoord: this.getScreenCoordFromSceneCoord(e), + cover: t + } + }, + pickByPoint: function(A) { + var e = this.cameraControl; + if (!1 === e.enabled) + return !1; + var t = new s(A.x,A.y) + , i = e.getIntersectContext(t) + , o = e.intersector.pick(i) + , n = this.getScene(); + if (o) { + n.intersectToWorld(o, this); + var r = {}; + return r.faceIndex = o.faceIndex, + r.componentKey = o.userId, + r.worldPosition = o.worldPosition, + r.worldBoundingBox = o.worldBoundingBox, + r + } + return null + }, + pickByPointWithNormal: function(A) { + var e = this.getScene() + , t = this.cameraControl; + if (!1 === t.enabled) + return null; + var i = new s(A.x,A.y) + , o = t.getIntersectContext(i) + , n = t.intersector.pick(o); + if (!n) + return null; + e.intersectToWorld(n, this), + n.cx = i.x, + n.cy = i.y; + var r = []; + r.push(n); + var a = e.getMatrixGlobal() + , l = n.face.normal.clone() + , c = new CA(n.worldPosition.clone(),l); + c.applyMatrix4(a); + var h = t.intersector.getIntersectByRay(o, c); + return h && (e.intersectToWorld(h, this), + r.push(h)), + r + }, + toDefaultOrthographicCamera: function(A) { + this.switchToCamera(Ec.ORTHOGRAPHIC), + (A || void 0 === A) && this.render() + }, + toDefaultPerspectiveCamera: function(A) { + this.switchToCamera(Ec.PERSPECTIVE), + (A || void 0 === A) && this.render() + }, + getCameraNameList: function() { + return ["pesp", "orth"].concat(this.modelManager.getCameraNameList()) + }, + switchToCamera: function(A) { + var e = !0; + if (A === Ec.PERSPECTIVE) + this.camera = this.defaultCamera, + this.camera.toPerspective(); + else if (A === Ec.ORTHOGRAPHIC) + this.camera = this.defaultCamera, + this.camera.toOrthographic(); + else { + var t = this.modelManager.getCamera(A); + t ? this.camera = t : (Bh.log("Fail to switch because not found camera '" + A + "'"), + e = !1) + } + return e && this.cameraControl.setCamera(this.camera), + this.render(), + e + }, + getNumOfElements: function() { + return this.modelManager.getNumOfElements() + }, + getNumOfRenderables: function() { + return this.modelManager.getNumOfRenderables() + }, + getNumOfTriangles: function() { + return this.modelManager.getNumOfTriangles() + }, + setLightPreset: function(A) { + this.getScene().setLightPreset(A), + this.setRenderStateChanged(!0) + }, + getLightPreset: function() { + return this.getScene().getLightPreset() + }, + setLightIntensityFactor: function(A) { + this.getScene().setLightIntensityFactor(A), + this.render() + }, + setAmbientLightIntensity: function(A) { + this.getScene().setAmbientLightIntensity(A), + this.render() + }, + getAmbientLightIntensity: function() { + return this.getScene().getAmbientLightIntensity() + }, + setWalkHeightLocked: function(A) { + var e = this.controlManager.getCurrentControl(); + e && e.name === Gc.WALK && e.setHeightLocked(A) + }, + setWalkLookMousePressed: function(A) { + var e = this.controlManager.getCurrentControl(); + e && e.name === Gc.WALK && e.setDragLook(A) + }, + setWalkSpeedRate: function(A) { + var e = this.controlManager.getCurrentControl(); + e && e.name === Gc.WALK && (jh.MovementSpeedRate = A) + }, + getWalkSpeedRate: function() { + return jh.WalkSpeedRate + }, + setDrawingStyle: function(A) { + vc.DrawingStyle = A, + this.modelManager.applyFilter(), + this.setRenderStateChanged(!0) + }, + getWireframeColor: function(A) { + var e = this.modelManager; + if (A && e.models[A]) + return e.models[A].wireframeManager.getWireframeColor(); + for (var t in e.models) { + return e.models[t].wireframeManager.getWireframeColor() + } + }, + setWireframeColor: function(A, e) { + var t = this.modelManager; + if (e && t.models[e]) + t.models[e].wireframeManager.setWireframeColor(new LA(A), A.a || 1); + else + for (var i in t.models) + t.models[i].wireframeManager.setWireframeColor(new LA(A), A.a || 1); + this.setRenderStateChanged(!0) + }, + restoreWireframeColor: function(A) { + var e = this.modelManager; + if (A && e.models[A]) + e.models[A].wireframeManager.restoreWireframeColor(); + else + for (var t in e.models) + e.models[t].wireframeManager.restoreWireframeColor(); + this.setRenderStateChanged(!0) + }, + setInstanceMode: function(A) { + !vc.Instance === A && (vc.Instance = A, + this.getScene().getOrCreateGroup(gp.INSTANCEGEOMETRY, { + globalSpace: !0 + }).visible = !!A) + }, + setTransitionAnimationState: function(A) { + this.transitionAnimationState = A + }, + getTransitionAnimationState: function() { + return this.transitionAnimationState + }, + clipPoint: function(A) { + var e = this.getRenderer().clippingPlanes; + if (e && e.length > 0) + for (var t = 0; e.length > t; t += 1) { + var i = e[t]; + if (A.dot(i.normal) < -i.constant) + return !0 + } + return !1 + }, + setExposureShift: function(A) { + vc.ToneMapping = 1, + this.modelManager.updateMaterialsValue("shift", A > 0 ? -.4 * A + .5 : -4 * A + .5), + this.setRenderStateChanged(!0) + }, + setRenderStateChanged: function(A) { + this.modelManager && this.modelManager.setRenderStateChanged(A) + }, + isRenderStateChanged: function() { + return this.modelManager._renderStateChanged + }, + getComponentInfoByUserId: function(A) { + return this.modelManager.getComponentInfoByUserId(A) + }, + getBoundingBoxByIds: function(A) { + var e = new aA; + if (Array.isArray(A)) { + for (var t = 0; A.length > t; t += 1) + if (!this.modelManager.isHiddenUserId(A[t])) { + var i = this.getModelByComponentKey(A[t]) + , o = this.getComponentInfoByUserId(A[t]); + if (o) + if (i) { + var n = o.boundingBox.clone().applyMatrix4(i.getModelMatrix()); + e.union(n) + } else + e.union(o.boundingBox) + } + } else + for (var r in A) + if (!this.modelManager.isHiddenUserId(r)) { + var a = this.getModelByComponentKey(r) + , s = this.getComponentInfoByUserId(r); + if (s) + if (a) { + var l = s.boundingBox.clone().applyMatrix4(a.getModelMatrix()); + e.union(l) + } else + e.union(s.boundingBox) + } + return e.isEmpty() || e.applyMatrix4(this.getScene().getMatrixGlobal()), + e + }, + setConditionsOnDemandLoad: function(A, e, t, i) { + e = e || !0, + this.modelManager.setConditionsOnDemandLoad(A), + e && this.modelManager.loadGeopkOnDemand(t, i) + }, + loadGeopkOnDemand: function(A, e, t, i) { + var o = this; + this.modelManager.loadGeopkOnDemand(A, e, t, (function() { + var A = o.modelManager.getNodeInfos(); + o.filter.reinitFilterManager(A), + o.setRenderStateChanged(!0), + o.render(), + i && i() + } + )) + }, + unloadGeopkOnDemand: function(A, e) { + var t = this; + this.filter._hasVisibleFilter() && (this.filter.showByIds(A), + this.filter.removeFromIsolateList(A)), + this.filter._hasOverrideMaterialFilter() && (this.filter.addToOverrideListByColor(A, null), + this.filter.addToWireframeByWireframe(A, null)), + this.filter._hasTransparentFilter() && this.filter.opaqueByIds(A), + this.removeFromSelection(A); + for (var i = 0, o = A.length; o > i; i += 1) + ; + this.modelManager.unloadGeopkOnDemand(A, (function() { + var A = t.modelManager.getNodeInfos(); + t.filter.reinitFilterManager(A), + t.setRenderStateChanged(!0), + t.render(), + e && e() + } + )) + }, + getBoundingBoxOnDemand: function() { + return this.modelManager.getBoundingBoxOnDemand() + }, + getScreenCoordFromSceneCoord: function(A) { + var e = []; + if (A.isVector3) { + var t = A.clone(); + t.applyMatrix4(this.camera.matrixWorldInverse); + var i = t.z > 0; + return t.applyMatrix4(this.camera.projectionMatrix), + e[0] = (t.x + 1) * this.domElement.clientWidth / 2, + e[1] = (1 - t.y) * this.domElement.clientHeight / 2, + e[2] = i ? 1 : 0, + e + } + if (Array.isArray(A)) { + var o = new y(A[0],A[1],A[2]); + o.applyMatrix4(this.camera.matrixWorldInverse); + i = o.z > 0; + return o.applyMatrix4(this.camera.projectionMatrix), + e[0] = (o.x + 1) * this.domElement.clientWidth / 2, + e[1] = (1 - o.y) * this.domElement.clientHeight / 2, + e[2] = i ? 1 : 0, + o = null, + e + } + }, + _checkDataChanged: function() { + var A = this.modelManager; + A.hasModelDataReady() && (this.getFilter().isStateChanged() || this.isRenderStateChanged()) && (this.isRenderStateChanged() && this.setRenderStateChanged(!1), + this.getFilter().isStateChanged() && this.getFilter().disableStateChanged(), + this.needApplyFilter = !0), + this.needCheckTilesDataChange && (this.needCheckTilesDataChange = !1, + A.checkTilesDataChanged(this.camera, this.getRenderer())) + }, + _checkLayerDataLoading: function() { + return !(!this.modelManager.isLayerData() || !this._layerDataLoading) && (this.getFilter().isStateChanged() && this.getFilter().disableStateChanged(), + !0) + }, + setOutlineEdgeColor: function(A) { + this.rendererManager.composer && this.rendererManager.composer.setOutlineEdgeColor(A); + var e = this.rendererManager.getPickingEffecter(); + e && e.setLineSelectionColor(A.getHex(), A.opacity) + }, + getOutlineEdgeColor: function() { + if (this.rendererManager.composer) + return this.rendererManager.composer.getOutlineEdgeColor(); + var A = this.rendererManager.getPickingEffecter(); + return A ? A.getLineSelectionColor() : void 0 + }, + restoreOutlineEdgeColor: function(A) { + this.setOutlineEdgeColor(new Xh(vc.SelectionColor.color,vc.SelectionColor.opacity)) + }, + enableSelectedColorIsAffectedByLight: function(A) { + vc.InfluencedByLight = A, + vc.InfluencedByLight ? delete this.modelManager.getSceneState().selectionMaterial.defines.NOTAFFECTEDBYLIGHT : this.modelManager.getSceneState().selectionMaterial.defines.NOTAFFECTEDBYLIGHT = "" + }, + enableLogarithmicDepthBuffer: function(A) { + vc.logarithmicDepthBuffer !== A && (vc.logarithmicDepthBuffer = A, + this.renderSettings.logarithmicDepthBuffer = A, + this.rendererManager.resetupRenderer(this.renderSettings || {}), + this._render(), + this.updateShadowLight()) + }, + enableBlinkComponents: function(A) { + this.modelManager.isBlinkPermited() || (this.modelManager.enableBlink(A), + this.render()) + }, + setBlinkComponentsById: function(A) { + this.modelManager.isBlinkPermited() || this.modelManager.sceneState.setBlinkComponentsById(A) + }, + addBlinkComponentsById: function(A) { + this.modelManager.isBlinkPermited() || this.modelManager.sceneState.addBlinkComponentsById(A) + }, + clearBlinkComponentsById: function(A) { + this.modelManager.isBlinkPermited() || this.modelManager.sceneState.clearBlinkComponentsById(A) + }, + clearAllBlinkComponents: function() { + this.modelManager.isBlinkPermited() || this.modelManager.sceneState.clearAllBlinkComponents() + }, + getBlinkComponents: function() { + return this.modelManager.isBlinkPermited() ? null : this.modelManager.sceneState.getBlinkComponents() + }, + setBlinkColor: function(A) { + this.modelManager.isBlinkPermited() || this.modelManager.setBlinkColor(A.color, A.opacity) + }, + setBlinkIntervalTime: function(A) { + this.modelManager.isBlinkPermited() || this.modelManager.setBlinkIntervalTime(A) + }, + getModelByComponentKey: function(A) { + var e = null; + for (var t in this.modelManager.models) + if (this.modelManager.models.hasOwnProperty(t) && (e = this.modelManager.getModel(t)) && e.isLoaded() && e.hasComponent(A)) + return e + }, + getSceneState: function() { + return { + state: this.getFilter().saveState(), + camera: this.getCamera(), + selection: this.getSelection(), + modelSelection: this.getModelSelection() + } + }, + setSceneState: function(A) { + void 0 !== A.camera && "object" !== lc(A.camera) || (A.camera = JSON.stringify(A.camera)), + this.setCamera(A.camera, !1), + this.setSelection(A.selection), + this.setModelSelection(A.modelSelection), + this.getFilter().loadState(A.state) + }, + setComponentPositionByKey: function(A, e) { + var t = (new y).fromArray(e) + , i = (this.getModelManager(), + new M, + this.modelManager.getComponent(A)); + if (i && i.length >= 1) { + for (var o = new aA, n = 0, r = i.length; r > n; n += 1) { + o && o.union(i[n].boundingBox) + } + var a = new y; + o.getCenter(a); + var s = this.getModelByComponentKey(A); + if (s) { + var l = s.getModelMatrix(); + if (l) { + var c = new M; + c.getInverse(l), + t.applyMatrix4(c) + } + } + t.sub(a); + var h = (new M).makeTranslation(t.x, t.y, t.z); + this.componentApplyMatrix2(A, h, !0), + this.updateTransformControlIfBindingComKeyEqual(A) + } + }, + setBackgroundColor: function(A, e) { + if (e) + this.setBackgroundColors([{ + color: A, + stop: "0%" + }, { + color: e, + stop: "100%" + }], "180deg"); + else { + var t = this.getDomElement(); + t && (t.style.background = A.getRGBA()) + } + }, + setBackgroundColors: function(A, e) { + var t = this.getDomElement() + , i = e || "0deg" + , o = []; + if (A && A.length > 0) { + 1 === A.length && this.setBackgroundColor(A[0].color || A[0]); + for (var n = 0; A.length > n; n += 1) { + var r = A[n].color.getRGBA() + " " + A[n].stop; + o.push(r) + } + var a = i + ", " + o.join(","); + t && (t.style.background = "linear-gradient(" + a + ")") + } + }, + resetBackgroundColor: function() { + this.getDomElement() && (this.domElement.style.background = "linear-gradient(rgb(135,206,250) 0%, rgb(245, 245, 245) 100%)") + }, + getComponentLocalMatrixByKey: function(A) { + if (A) { + var e = this.modelManager.getComponent(A); + if (e && e.length > 0 && e[0].matrix) + return e[0].matrix.clone() + } + }, + getComponentWorldMatrixByKey: function(A) { + var e = this.getComponentLocalMatrixByKey(A); + if (e) { + var t = this.getModelByComponentKey(A); + if (t) { + var i = t.getModelMatrix(); + e.premultiply(i) + } + return e + } + }, + setComponentLocalMatrixByKey: function(A, e) { + if (A) { + var t = this.modelManager.getComponent(A); + if (t && t.length > 0) { + var i = t[0].mesh; + return i.matrix.fromArray(e), + i.updateMatrixWorld(!0), + this.render(), + !0 + } + } + return !1 + }, + _transformComponentByKey: function(A, e, t) { + var i = this; + if (A) { + var o = this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM); + if (o && o.bindingComponentKey === A) + return o; + var n = this.getModelByComponentKey(A) + , r = function(A) { + i.render() + } + , a = function(t) { + "string" == typeof A && t.matrix && t.object && (i.componentApplyMatrix2(A, t.matrix, !1), + i.getScene().expandBoundingBoxWorldBy(t.object)), + e && e(A) + }; + if ("string" != typeof A) { + if (A instanceof H) { + var s = A; + return this.controlManager.enableTool(this, Pc.COMPONENT_TRANSFORM), + (o = this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM)).transformComponent(s, r, a), + o.bindingComponentKey = void 0, + o + } + return + } + var l = this.modelManager.getComponent(A); + if (l && l.length > 0) { + var c = i.externalComponentManager; + c && c.getNodeInfosByUserId(A) && c.recalculateComponentBoundingbox(A); + for (var h = new aA, d = 0, p = l.length; p > d; d += 1) + h.union(l[d].transformationOriginalBoundingBox ? l[d].transformationOriginalBoundingBox : l[d].boundingBox); + var g = new Ue(Tu.getGeometryFromBox3(h)); + if (g.matrixAutoUpdate = !1, + l[0].transformation && g.matrix.copy(l[0].applyMatrix), + n) { + var u = n.getModelMatrix(); + if (u) { + var f = new Xi; + f.matrixAutoUpdate = !1, + f.matrix.copy(u), + f.updateMatrixWorld(!0), + f.add(g) + } + } + return g.updateMatrixWorld(!0), + this.controlManager.enableTool(this, Pc.COMPONENT_TRANSFORM), + (o = this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM)).transformComponent(g, r, a, void 0, (function(e) { + if (n) + n.calculateBoundingBox(); + else { + var o = i.externalComponentManager; + o && o.getNodeInfosByUserId(A) && o.calculateBoundingBox() + } + i.modelManager.updateSceneBoundingBox(), + t && t(A) + } + )), + o.bindingComponentKey = A, + this.modelManager.updateTransformComponentList(A), + o + } + } + }, + _transformModelByKey: function(A) { + if (A && "string" == typeof A) { + var e = this.getModel(A); + if (e && e.isLoaded() && e.isVisible()) { + var t = this + , i = e.getBoundingBoxWorld(); + if (i.isEmpty()) + return; + var o = new Ue(Tu.getGeometryFromBox3(i)); + o.matrixAutoUpdate = !1, + o.updateMatrixWorld(!0), + this.controlManager.enableTool(this, Pc.COMPONENT_TRANSFORM); + var n = this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM); + return n.transformComponent(o, (function(A) { + t.render() + } + ), (function(A) { + A && A.matrix && e.applyModelMatrix(A.matrix) + } + )), + n + } + } + }, + translateComponentByKey: function(A, e, t) { + var i = this._transformComponentByKey(A, e, t); + i && i.switchToTranslateMode() + }, + scaleComponentByKey: function(A, e, t) { + var i = this._transformComponentByKey(A, e, t); + i && i.switchToScaleMode() + }, + rotateComponentByKey: function(A, e, t) { + var i = this._transformComponentByKey(A, e, t); + i && i.switchToRotateMode() + }, + cancelTransformComponent: function(A) { + var e = this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM); + e && (A && this.restoreComponentTransform(), + e.cancelTransformComponent(), + this.controlManager.disableTool(e.name)) + }, + cancelTransformComponentByKey: function(A) { + if (A && "string" == typeof A) { + var e = this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM); + e && e.bindingComponentKey === A && (e.cancelTransformComponent(), + this.controlManager.disableTool(e.name)) + } + }, + restoreComponentTransform: function() { + var A = this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM); + A && (A.bindingComponentKey ? this.restoreComponentTransformByKey(A.bindingComponentKey) : A.restoreComponentOriginalTransformState() && this.render()) + }, + restoreComponentTransformByKey: function(A) { + A && "string" == typeof A && (this.resetComponentMatrix(A), + this.updateTransformControlIfBindingComKeyEqual(A)) + }, + updateTransformControlIfBindingComKeyEqual: function(A) { + var e = this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM); + e && e.bindingComponentKey === A && (e.cancelTransformComponent(), + this._transformComponentByKey(A)) + }, + increaseComponentTransformControlSize: function() { + var A = this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM); + A && A.increaseTransformControlSize() && this.render() + }, + decreaseComponentTransformControlSize: function() { + var A = this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM); + A && A.decreaseTransformControlSize() && this.render() + }, + setComponentTransformSpaceToLocalSpace: function() { + var A = this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM); + A && A.setTransformSpaceToLocalSpace() && this.render() + }, + setComponentTransformSpaceToWorldSpace: function() { + var A = this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM); + A && A.setTransformSpaceToWorldSpace() && this.render() + }, + switchComponentTransformSpaceBetweenLocalAndWorld: function() { + var A = this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM); + A && A.switchTransformSpace() && this.render() + }, + showComponentTransformOnAxis: function(A) { + var e = this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM); + e && e.showTransformOnAxis(A) && this.render() + }, + hideComponentTransformOnAxis: function(A) { + var e = this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM); + e && e.hideTransformOnAxis(A) && this.render() + }, + disableComponentTransform: function() { + var A = this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM); + A && A.disableTransform() && this.render() + }, + enableComponentTransform: function() { + var A = this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM); + A && A.enableTransform() && this.render() + }, + componentApplyMatrix: function(A, e) { + var t = this.getModelManager() + , i = this.getModelByComponentKey(A); + if (i) { + t.explosionList[A] || (t.explosionList[A] = !0); + var o = i._getHandler(); + if (o instanceof MC) { + var n = this.modelManager.getComponent(A); + if (n && n[0] && n[0].mesh) { + var r = n[0].mesh; + if (r) { + r.userData.originalMatrix || (r.userData.originalMatrix = r.matrixWorld.clone()); + var a = new y(r.userData.originalMatrix.elements[12],r.userData.originalMatrix.elements[13],r.userData.originalMatrix.elements[14]) + , s = new M; + s.setPosition(a); + var l = new M; + l.setPosition(a.multiplyScalar(-1)), + r.matrixWorld.multiply(l).multiply(e).multiply(s) + } + } + } else if (o instanceof Yf) { + var c = i.getModelDescriptor() + , h = c.mapNodeInfoByCategory[1] + , d = c.mapNodeInfoByCategory[0]; + if (h.hasOwnProperty(A)) + for (var p = h[A], g = 0; p.length > g; g += 1) { + var u = p[g] + , f = u.mesh; + if (f) { + var m = u.index + , C = f.geometry.attributes.position; + Tu.applyMatrix4ToBuffer(e, C.array, m.positionStart, m.positionStart + m.positionCount), + C.needsUpdate = !0 + } + } + if (d.hasOwnProperty(A)) + for (var v = d[A], I = o.instancedManager.meshManager, E = 0; v.length > E; E += 1) + for (var B = v[E], x = I.getMeshIdByNodeInfo(B), S = I.nodeIdxMapFromUserId[A][x], w = 0, b = S.length; b > w; w += 1) { + var U = S[w] + , F = I.instanceGeometryMap[x][w] + , K = F.getAttribute("mcol0") + , Q = F.getAttribute("mcol1") + , R = F.getAttribute("mcol2") + , T = F.getAttribute("mcol3"); + B.transformation || (B.transformation = !0, + B.transformationOriginalMatrix = B.matrix.clone()); + var k = (new y).fromArray(B.transformationOriginalMatrix.elements, 12) + , D = new M; + D.setPosition(k); + var L = new M; + L.setPosition(k.multiplyScalar(-1)); + var N = new M; + N.fromArray([K.array[3 * U], K.array[3 * U + 1], K.array[3 * U + 2], 0, Q.array[3 * U], Q.array[3 * U + 1], Q.array[3 * U + 2], 0, R.array[3 * U], R.array[3 * U + 1], R.array[3 * U + 2], 0, T.array[3 * U], T.array[3 * U + 1], T.array[3 * U + 2], 1], 0), + N.multiply(L).multiply(e).multiply(D), + K.array[3 * U] = N.elements[0], + K.array[3 * U + 1] = N.elements[1], + K.array[3 * U + 2] = N.elements[2], + K.needsUpdate = !0, + Q.array[3 * U] = N.elements[4], + Q.array[3 * U + 1] = N.elements[5], + Q.array[3 * U + 2] = N.elements[6], + Q.needsUpdate = !0, + R.array[3 * U] = N.elements[8], + R.array[3 * U + 1] = N.elements[9], + R.array[3 * U + 2] = N.elements[10], + R.needsUpdate = !0, + T.array[3 * U] = N.elements[12], + T.array[3 * U + 1] = N.elements[13], + T.array[3 * U + 2] = N.elements[14], + T.needsUpdate = !0, + B.matrix = N + } + } else + Bh.warn("当前模式下暂不支持构件变换") + } + this.render() + }, + componentApplyMatrix2: function(A, e, t) { + var i = this.getModelByComponentKey(A) + , o = this.getModelManager().getComponent(A); + if (o && o.length > 0) { + for (var n = 0; o.length > n; n += 1) { + var r = o[n]; + if (r.matrix || (r.matrix = new M), + r.transformation || (r.transformation = !0, + r.transformationOriginalMatrix = r.matrix.clone(), + r.applyMatrix = new M, + r.boundingBox && (r.transformationOriginalBoundingBox = r.boundingBox.clone())), + r.matrix.premultiply(e), + r.applyMatrix.premultiply(e), + r.boundingBox && r.boundingBox.copy(r.transformationOriginalBoundingBox).applyMatrix4(r.applyMatrix), + r.isBatched) { + var a = i._getHandler(); + if (!0 === r.instanceOrNot) + for (var s = a.instancedManager.meshManager, l = s.getMeshIdByNodeInfo(r), c = s.nodeIdxMapFromUserId[A][l], h = 0, d = c.length; d > h; h += 1) { + var p = c[h] + , g = s.instanceGeometryMap[l][h] + , u = g.getAttribute("mcol0") + , f = g.getAttribute("mcol1") + , m = g.getAttribute("mcol2") + , C = g.getAttribute("mcol3") + , y = r.matrix; + u.array[3 * p] = y.elements[0], + u.array[3 * p + 1] = y.elements[1], + u.array[3 * p + 2] = y.elements[2], + u.needsUpdate = !0, + f.array[3 * p] = y.elements[4], + f.array[3 * p + 1] = y.elements[5], + f.array[3 * p + 2] = y.elements[6], + f.needsUpdate = !0, + m.array[3 * p] = y.elements[8], + m.array[3 * p + 1] = y.elements[9], + m.array[3 * p + 2] = y.elements[10], + m.needsUpdate = !0, + C.array[3 * p] = y.elements[12], + C.array[3 * p + 1] = y.elements[13], + C.array[3 * p + 2] = y.elements[14], + C.needsUpdate = !0 + } + else { + var v = r.mesh; + if (!v) + continue; + var I = r.index + , E = v.geometry; + v.geometry.boundingBox = null; + var B = E.attributes.position; + Tu.applyMatrix4ToBuffer(e, B.array, I.positionStart, I.positionStart + I.positionCount), + B.needsUpdate = !0; + var x = a.defaultManager.wireframeManager.wireframeLineSegment; + if (x) + for (var S = x._indicesGroup[A], w = 0, b = S.length; b > w; w += 1) { + var U = S[w]; + if (S[w].nodeId === r.nodeId) { + var F = x.geometry.attributes.position; + Tu.applyMatrix4ToBuffer(e, F.array, 3 * U.positionStart, 3 * (U.positionStart + U.positionCount)), + F.needsUpdate = !0; + break + } + } + } + } else { + var K = null; + if (r.mesh instanceof Array) + K = r.mesh; + else { + if (!(r.mesh instanceof H)) + continue; + K = [r.mesh] + } + for (var Q = 0, R = K.length; R > Q; Q += 1) { + var T = K[Q]; + r.isExternalComponent && (T.userData.originalMatrix || (T.userData.originalMatrix = T.matrix.clone())); + var k = T.matrixAutoUpdate; + T.matrixAutoUpdate = !1, + T.applyMatrix4(e), + T.matrixAutoUpdate = k, + T.updateMatrixWorld(!0) + } + var D = r.wireframeMeshs; + if (D) + for (var L = 0, N = D.length; N > L; L += 1) { + var O = D[L]; + k = O.matrixAutoUpdate, + O.matrixAutoUpdate = !1, + O.matrix.copy(r.matrix), + O.updateMatrixWorld(!0), + O.matrixAutoUpdate = k + } + } + } + if (void 0 === t && (t = !0), + t) { + if (i) + i.calculateBoundingBox(); + else { + var V = this.externalComponentManager; + V && V.getNodeInfosByUserId(A) && V.calculateBoundingBox() + } + this.modelManager.updateSceneBoundingBox() + } + } + this.modelManager.updateTransformComponentList(A), + this.render() + }, + setComponentMatrix: function(A, e) { + this.setComponentMatrix2(A, e) + }, + setComponentMatrix2: function(A, e, t) { + var i = this.getModelManager().getComponent(A); + if (i && i.length > 0) + for (var o = 0; i.length > o; o += 1) { + var n = i[o]; + n.matrix || (n.matrix = new M); + var r = null; + n.transformation ? r = (new M).getInverse(n.applyMatrix) : (n.transformation = !0, + n.transformationOriginalMatrix = n.matrix.clone(), + n.applyMatrix = new M, + n.boundingBox && (n.transformationOriginalBoundingBox = n.boundingBox.clone())), + n.matrix.copy(n.transformationOriginalMatrix).premultiply(e), + n.applyMatrix.copy(e), + n.boundingBox && n.boundingBox.copy(n.transformationOriginalBoundingBox).applyMatrix4(n.applyMatrix); + var a = this.getModelByComponentKey(A); + if (n.isBatched) { + var s = a._getHandler(); + if (!0 === n.instanceOrNot) + for (var l = s.instancedManager.meshManager, c = l.getMeshIdByNodeInfo(n), h = l.nodeIdxMapFromUserId[A][c], d = 0, p = h.length; p > d; d += 1) { + var g = h[d] + , u = l.instanceGeometryMap[c][d] + , f = u.getAttribute("mcol0") + , m = u.getAttribute("mcol1") + , C = u.getAttribute("mcol2") + , y = u.getAttribute("mcol3") + , v = n.matrix; + f.array[3 * g] = v.elements[0], + f.array[3 * g + 1] = v.elements[1], + f.array[3 * g + 2] = v.elements[2], + f.needsUpdate = !0, + m.array[3 * g] = v.elements[4], + m.array[3 * g + 1] = v.elements[5], + m.array[3 * g + 2] = v.elements[6], + m.needsUpdate = !0, + C.array[3 * g] = v.elements[8], + C.array[3 * g + 1] = v.elements[9], + C.array[3 * g + 2] = v.elements[10], + C.needsUpdate = !0, + y.array[3 * g] = v.elements[12], + y.array[3 * g + 1] = v.elements[13], + y.array[3 * g + 2] = v.elements[14], + y.needsUpdate = !0 + } + else { + var I = n.mesh; + if (!I) + continue; + var E = n.index + , B = I.geometry.attributes.position; + r && Tu.applyMatrix4ToBuffer(r, B.array, E.positionStart, E.positionStart + E.positionCount), + Tu.applyMatrix4ToBuffer(n.applyMatrix, B.array, E.positionStart, E.positionStart + E.positionCount), + B.needsUpdate = !0; + var x = s.defaultManager.wireframeManager.wireframeLineSegment; + if (x) + for (var S = x._indicesGroup[A], w = 0, b = S.length; b > w; w += 1) { + var U = S[w]; + if (S[w].nodeId === n.nodeId) { + var F = x.geometry.attributes.position; + r && Tu.applyMatrix4ToBuffer(r, F.array, 3 * U.positionStart, 3 * (U.positionStart + U.positionCount)), + Tu.applyMatrix4ToBuffer(e, F.array, 3 * U.positionStart, 3 * (U.positionStart + U.positionCount)), + F.needsUpdate = !0; + break + } + } + } + } else { + var K = null; + if (n.mesh instanceof Array) + K = n.mesh; + else { + if (!(n.mesh instanceof H)) + continue; + K = [n.mesh] + } + for (var Q = 0, R = K.length; R > Q; Q += 1) { + var T = K[o]; + n.isExternalComponent && (T.userData.originalMatrix || (T.userData.originalMatrix = T.matrix.clone())); + var k = T.matrixAutoUpdate; + T.matrixAutoUpdate = !1, + T.matrix.copy(n.matrix), + T.applyMatrix4(new M), + T.matrixAutoUpdate = k, + T.updateMatrixWorld(!0) + } + var D = n.wireframeMeshs; + if (D) + for (var L = 0, N = D.length; N > L; L += 1) { + var O = D[L]; + k = O.matrixAutoUpdate, + O.matrixAutoUpdate = !1, + O.matrix.copy(n.matrix), + O.updateMatrixWorld(!0), + O.matrixAutoUpdate = k + } + } + if (void 0 === t && (t = !0), + t) { + if (a) + a.calculateBoundingBox(); + else { + var V = this.externalComponentManager; + V && V.getNodeInfosByUserId(A) && V.calculateBoundingBox() + } + this.modelManager.updateSceneBoundingBox() + } + } + this.render() + }, + resetComponentMatrix: function(A, e) { + var t = this.getModelManager().getComponent(A); + if (t && t.length > 0) + for (var i = 0; t.length > i; i += 1) { + var o = t[i]; + if (o.transformation) { + o.matrix.copy(o.transformationOriginalMatrix), + o.transformationOriginalBoundingBox && (o.boundingBox = o.transformationOriginalBoundingBox.clone()); + var n = (new M).getInverse(o.applyMatrix) + , r = this.getModelByComponentKey(A); + if (o.isBatched) { + var a = r._getHandler(); + if (!0 === o.instanceOrNot) + for (var s = a.instancedManager.meshManager, l = s.getMeshIdByNodeInfo(o), c = s.nodeIdxMapFromUserId[A][l], h = 0, d = c.length; d > h; h += 1) { + var p = c[h] + , g = s.instanceGeometryMap[l][h] + , u = g.getAttribute("mcol0") + , f = g.getAttribute("mcol1") + , m = g.getAttribute("mcol2") + , C = g.getAttribute("mcol3") + , y = o.matrix; + u.array[3 * p] = y.elements[0], + u.array[3 * p + 1] = y.elements[1], + u.array[3 * p + 2] = y.elements[2], + u.needsUpdate = !0, + f.array[3 * p] = y.elements[4], + f.array[3 * p + 1] = y.elements[5], + f.array[3 * p + 2] = y.elements[6], + f.needsUpdate = !0, + m.array[3 * p] = y.elements[8], + m.array[3 * p + 1] = y.elements[9], + m.array[3 * p + 2] = y.elements[10], + m.needsUpdate = !0, + C.array[3 * p] = y.elements[12], + C.array[3 * p + 1] = y.elements[13], + C.array[3 * p + 2] = y.elements[14], + C.needsUpdate = !0 + } + else { + var v = o.mesh; + if (!v) + continue; + var I = o.index + , E = v.geometry.attributes.position; + n && (Tu.applyMatrix4ToBuffer(n, E.array, I.positionStart, I.positionStart + I.positionCount), + E.needsUpdate = !0); + var B = a.defaultManager.wireframeManager.wireframeLineSegment; + if (B) + for (var x = B._indicesGroup[A], S = 0, w = x.length; w > S; S += 1) { + var b = x[S]; + if (x[S].nodeId === o.nodeId) { + var U = B.geometry.attributes.position; + n && (Tu.applyMatrix4ToBuffer(n, U.array, 3 * b.positionStart, 3 * (b.positionStart + b.positionCount)), + U.needsUpdate = !0); + break + } + } + } + } else { + var F = null; + if (o.mesh instanceof Array) + F = o.mesh; + else { + if (!(o.mesh instanceof H)) + continue; + F = [o.mesh] + } + for (var K = 0, Q = F.length; Q > K; K += 1) { + var R = F[i] + , T = void 0; + if (T = o.isExternalComponent ? R.userData.originalMatrix : o.matrix) { + var k = R.matrixAutoUpdate; + R.matrixAutoUpdate = !1, + R.matrix.copy(T), + R.applyMatrix4(new M), + R.matrixAutoUpdate = k, + R.updateMatrixWorld(!0), + R.userData.originalMatrix = void 0 + } + } + var D = o.wireframeMeshs; + if (D) + for (var L = 0, N = D.length; N > L; L += 1) { + var O = D[L]; + k = O.matrixAutoUpdate, + O.matrixAutoUpdate = !1, + O.matrix.copy(o.matrix), + O.updateMatrixWorld(!0), + O.matrixAutoUpdate = k + } + } + if (void 0 === e && (e = !0), + e) { + if (r) + r.calculateBoundingBox(); + else { + var V = this.externalComponentManager; + V && V.getNodeInfosByUserId(A) && V.calculateBoundingBox() + } + this.modelManager.updateSceneBoundingBox() + } + o.transformationOriginalMatrix = void 0, + o.transformationOriginalBoundingBox = void 0, + o.applyMatrix = void 0, + o.transformation = void 0 + } + } + this.render() + }, + calculateComponentVolume: function(A) { + var e = this.modelManager.getComponent(A) + , t = this.modelManager.getMeshByUserId(A); + if (e && e.length > 0) { + Bh.time("计算体积"); + for (var i = 0, o = 0, n = e.length; n > o; o += 1) { + var r = e[o]; + if (r.isExternalComponent) + for (var a = r.mesh, s = 0, l = a.length; l > s; s += 1) { + var c = a[s].geometry + , h = Tu.calculateVolumeOfGeometry(c.attributes.position.array, c.index.array); + h && (i += h) + } + else if (t) { + var d = r.mesh || t[o].mesh; + if (d) { + var p = d.geometry + , g = d._indicesGroup; + if (g && !r.instanceOrNot) + for (var u = g[A], f = 0, m = u.length; m > f; f += 1) { + var C = u[f] + , v = Tu.calculateVolumeOfGeometry(p.attributes.position.array, p.index.array, C.indexStart, C.indexCount); + v && (i += v) + } + else { + var I = Tu.calculateVolumeOfGeometry(p.attributes.position.array, p.index.array); + I && (i += I) + } + } + } + } + var E = this.getBoundingBoxByIds([A]) + , B = new y; + return E.getCenter(B), + Bh.timeEnd("计算体积"), + { + volume: i, + position: B.toArray() + } + } + }, + setAxisNetColor: function(A, e) { + var t = !1 + , i = this.modelManager; + for (var o in i.models) { + var n = i.models[o]; + n.axisNetManager && (n.axisNetManager.setupColor(A, e), + t = !0) + } + t && this.render(!0) + }, + showAxisNet: function() { + var A = !1 + , e = this.modelManager; + for (var t in e.models) { + var i = e.models[t]; + i.axisNetManager && (i.axisNetManager.show(), + A = !0) + } + A && this.render(!0) + }, + hideAxisNet: function() { + var A = !1 + , e = this.modelManager; + for (var t in e.models) { + var i = e.models[t]; + i.axisNetManager && (i.axisNetManager.hide(), + A = !0) + } + A && this.render(!0) + }, + enableAxisNetStayInFront: function() { + var A = !1 + , e = this.modelManager; + for (var t in e.models) { + var i = e.models[t]; + i.axisNetManager && (i.axisNetManager.enableStayInFront(), + A = !0) + } + A && this.render(!0) + }, + disableAxisNetStayInFront: function() { + var A = !1 + , e = this.modelManager; + for (var t in e.models) { + var i = e.models[t]; + i.axisNetManager && (i.axisNetManager.disableStayInFront(), + A = !0) + } + A && this.render(!0) + }, + enableSnap: function(A) { + this.controlManager.getToolByName(Pc.PICK_BY_RECT).enableSnap(A) + }, + pickToPoint: function(A, e) { + return this.controlManager.control.pickHelper.pickToPoint(A, e) + }, + getViewportSize: function() { + return this.rendererManager.getRendererSize() + }, + getRenderer: function() { + return this.rendererManager.getRenderer() + }, + getExternalComponentManager: function() { + return this.externalComponentManager || (this.externalComponentManager = new Vy(this)), + this.externalComponentManager + }, + addExternalObject: function(A, e, t, i) { + A = A || uh.createUUID(); + this.getExternalComponentManager().addNode(A, e, t, i), + this.render() + }, + addExternalObjects: function(A, e, t) { + for (var i = this.getExternalComponentManager(), o = [], n = 0; A.length > n; n += 1) { + var r = uh.createUUID(); + i.addNode(r, A[n], e, t), + o.push(r) + } + return this.render(), + o + }, + removeExternalObjectByName: function(A) { + this.getExternalComponentManager().removeNodeById(A), + this.render() + }, + clearExternalObjects: function() { + this.getExternalComponentManager().clearNodes(), + this.render() + }, + getExternalObjectByName: function(A) { + return this.getExternalComponentManager().getNodeById(A) + }, + getAllExternalObjects: function() { + return Object.values(this.getExternalComponentManager().getAllNodes()) + }, + getModelFloorMapsByKey: function(A, e) { + var t = this.modelManager.models[A]; + if (t && t.floorManager) { + if ("function" != typeof e) + return t.floorManager.getMimiMaps(); + t.floorManager.getServerMimiMaps(e) + } + }, + getReceivingPlane: function(A) { + return this.getScene().getReceivingPlane(A) + }, + enableShadow: function(A) { + this.getReceivingPlane(A), + A ? this.getScene().lightManager.enableShadowLight() : this.getScene().lightManager.disableShadowLight(); + var e = this.getRenderer(); + e.shadowMap.enabled = A, + e.shadowMap.type = 2, + e.shadowMap.autoUpdate = !1, + e.shadowMap.needsUpdate = !0; + for (var t = this.getScene().getGroups(), i = this.getScene(), o = 0; t.length > o; o += 1) { + var n = i.getGroupType(t[o].name); + n.groupType !== gp.IBLCUBE && ("ClipPlane" !== n.groupType && this.traverseGroupEnableShadow(t[o], A)) + } + this.updateShadowLight() + }, + updateShadowLight: function() { + this.getScene().lightManager.updateShadowLight(), + this.getRenderer().shadowMap.needsUpdate = !0, + this._render(), + this.rendererManager.renderer.setClearColor(0, 0), + this._render() + }, + traverseGroupEnableShadow: function(A, e) { + var t = this; + this.getRenderer(); + !function(A) { + if (A instanceof Ue) { + var i = A.material; + if (i instanceof Array) { + var o = null; + if ("PhoneLightingMaterial" === i[0].type) + return; + A.castShadow = e, + A.receiveShadow = e; + for (var n = 0; i.length > n; n += 1) + i[n].needsUpdate = !0, + o = i[n].defines; + A.customDepthMaterial = e && o && o.hasOwnProperty("USE_INSTANCE") ? t.getInstanceDepthMaterial() : void 0 + } else { + if ("PhoneLightingMaterial" === i.type) + return; + A.castShadow = e, + A.receiveShadow = e, + i.needsUpdate = !0; + var r = i.defines; + A.customDepthMaterial = e && r && r.hasOwnProperty("USE_INSTANCE") ? t.getInstanceDepthMaterial() : void 0, + i.needsUpdate = !0 + } + } + }(A); + for (var i = A.children, o = 0, n = i.length; n > o; o += 1) + this.traverseGroupEnableShadow(i[o], e) + }, + getInstanceDepthMaterial: function() { + if (this.instanceDepthMaterial) + return this.instanceDepthMaterial; + var A = new Su; + return A.depthPacking = 3201, + this.instanceDepthMaterial = A, + this.instanceDepthMaterial + }, + updateShadowMap: function() { + 4 === vc.LightPreset && (this.getRenderer().shadowMap.needsUpdate = !0) + }, + cloneComponent: function(A) { + function e(A) { + for (var e in A) + A.hasOwnProperty(e) && (A[e]instanceof d || A[e]instanceof ut) && (A[e] = A[e].clone(), + A[e].needsUpdate = !0) + } + var t, i = this.modelManager.getComponent(A), o = new he, n = i[0].model, r = n.materialManager, a = this.getExternalComponentManager(), s = []; + if (i[0].isBatched && !i[0].instanceOrNot) + !function() { + var A = [] + , n = [] + , l = [] + , c = [] + , h = [] + , d = 0 + , p = 0 + , g = [] + , u = 0 + , f = !0 + , m = !1 + , C = void 0; + try { + for (var y, v = function() { + var t, i, a, f, m = y.value, C = m.index, v = m.mesh.geometry, I = m.mesh.geometry.attributes, E = I.position.array.slice(C.positionStart, C.positionStart + C.positionCount), B = I.normal.array.slice(C.positionStart, C.positionStart + C.positionCount), x = void 0; + if (I.uv) + x = I.uv.array.slice(C.positionStart / 3 * 2, (C.positionStart + C.positionCount) / 3 * 2); + else { + var S = E.length / 3 * 2; + (x = new Array(S)).fill(0, 0, S) + } + var w = void 0; + if (I.uv2) + w = I.uv2.array.slice(C.positionStart / 3 * 2, (C.positionStart + C.positionCount) / 3 * 2); + else { + var M = x.length; + (w = new Array(M)).fill(0, 0, M) + } + var b = C.positionStart / 3 + , U = v.index.array + , F = C.indexCount + , K = m.originMId; + s.push(K); + var Q = Kd.getMaterialParameters(r.getMaterialById(K)) + , R = Kd.createStandardMaterial(Q); + e(R), + g.push(R), + h.push.apply(h, yc(U.slice(C.indexStart, C.indexStart + C.indexCount).map((function(A) { + return A - b + p + } + )))), + A = (t = A).concat.apply(t, yc(E)), + n = (i = n).concat.apply(i, yc(B)), + l = (a = l).concat.apply(a, yc(x)), + c = (f = c).concat.apply(f, yc(w)), + o.groups.push({ + start: d, + count: F, + materialIndex: u + }), + d += F, + p += C.positionCount / 3, + u += 1 + }, I = i[Symbol.iterator](); !(f = (y = I.next()).done); f = !0) + v() + } catch (A) { + m = !0, + C = A + } finally { + try { + f || null == I.return || I.return() + } finally { + if (m) + throw C + } + } + o.setAttribute("position", new YA(new Float32Array(A),3)), + o.setAttribute("uv", new YA(new Float32Array(l),2)), + o.setAttribute("uv2", new YA(new Float32Array(c),2)), + o.setAttribute("normal", new YA(new Float32Array(n),3)), + o.setIndex(new YA(new Uint32Array(h),1)), + t = new Ue(o,g), + a.addExternalObject(t) + }(); + else if (i[0].isBatched && i[0].instanceOrNot) + !function() { + var i = n._handler.instancedManager.meshManager + , r = i.getNodeIdxMapByUserId(A) + , l = [] + , c = [] + , h = [] + , d = [] + , p = i.matrixInfoMapFromUserId[A][Object.keys(i.matrixInfoMapFromUserId[A])[0]][0].matrix + , g = 0 + , u = 0 + , f = 0 + , m = [] + , C = 0; + for (var y in r) { + var v, I, E, B = i.getInstanceGeometries(y), x = B[0].index.array; + if (u = B[0].index.count, + l = (v = l).concat.apply(v, yc(B[0].attributes.position.array)), + c = (I = c).concat.apply(I, yc(B[0].attributes.normal.array)), + B[0].attributes.uv) { + var S; + h = (S = h).concat.apply(S, yc(B[0].attributes.uv.array)) + } else { + var w = 2 * u + , M = new Array(w); + M.fill(0, 0, w), + h = h.concat(M) + } + d = (E = d).concat.apply(E, yc(x.map((function(A) { + return A + g + } + )))), + g = l.length / 3; + var b = i.getMaterialIdByMeshId(y) + , U = i.manager.model.materialManager.getInstanceMaterialById(b)[0] + , F = Kd.getMaterialParameters(U) + , K = Kd.createStandardMaterial(F); + s.push(b), + e(K), + m.push(K), + o.groups.push({ + start: f, + count: u, + materialIndex: C + }), + f += u, + C += 1 + } + o.setAttribute("position", new YA(new Float32Array(l),3)), + o.setAttribute("uv", new YA(new Float32Array(h),2)), + o.setAttribute("normal", new YA(new Float32Array(c),3)), + o.setIndex(new YA(new Uint32Array(d),1)), + (t = new Ue(o,m)).applyMatrix4(p), + t.updateMatrixWorld(), + a.addExternalObject(t) + }(); + else { + var l = n.getModelDescriptor().getNodeInfosByComponentKey(A)[0].originMId; + if (s = l, + t = i[0].mesh.clone(), + Array.isArray(l)) + t.material = l.map((function(A) { + var t = r.getMaterialById(A) + , i = Kd.getMaterialParameters(t) + , o = Kd.createStandardMaterial(i); + return e(o), + o + } + )); + else { + var c = r.getMaterialById(l) + , h = Kd.getMaterialParameters(c) + , p = Kd.createStandardMaterial(h); + e(p), + t.material = p + } + a.addExternalObject(t) + } + return t ? (t.byClone = !0, + t.originMId = s, + t.originComponentKey = A, + t) : null + }, + setComponentsBlink: function() {} + }), + Object.defineProperties(Gy.prototype, { + renderer: { + get: function() { + return console.warn("EIMMODEL.ViewerImpl: .renderer 现在为 .getRenderer()"), + this.getRenderer() + } + }, + composer: { + get: function() { + return console.warn("EIMMODEL.ViewerImpl: .composer 现在为 .rendererManager.composer"), + this.rendererManager.composer + } + } + }); + var Py = function(A) { + var e = window.performance.timing; + Ch.PERFORMANCE > Bh.level || Bh.warn("页面加载时间:", e.domInteractive - e.navigationStart, "ms"); + var t = mh.detectWebGL(); + if (1 === t) { + vc.language = mh.language(), + H.DefaultUp.set(0, 0, 1); + var i = uh.extend({}, { + host: "https://bos3d.bimwinner.com", + viewport: "" + }, A); + this.host = i.host, + this.viewerImpl = new Gy; + var o = document.getElementById(i.viewport); + o.style.position = "relative"; + var n = this; + this.getViewerImpl().init(o), + vc.EnableViewController && !mh.isMobileDevice() && (this.viewController = new lp(this,(function() { + return !0 + } + )), + this.viewController.init(this.getViewerImpl().getDomElement()), + this.viewController.render(), + this.getViewerImpl().addRenderFinishedListener((function() { + n.viewController.render() + } + ))), + this.filter = this.getViewerImpl().filter, + this.SVGRect = new tp(this), + this.SVGRect.creatSVG(), + this.viewport = A.viewport, + this.viewportDiv = document.getElementById(A.viewport), + this.getViewerImpl().modelManager.addEventListener(Rc.ON_LOAD_CONFIG_FINISH, (function(A) { + Bh.time("模型".concat(A.modelKey, "加载时间")); + var e = n.getViewerImpl().getBoundingBox() + , t = n.getViewerImpl().getModel(A.modelKey) + , i = t.getConfig(); + i.type !== Zc.I_MODEL && i.type !== Zc.OBJ || n.setLightIntensityFactor(1), + op(t.dataVersion, "1.0"); + var o = e.getCenter(new y) + , r = e.getSize(new y) + , a = new y(o.x + r.x,o.y + r.y,o.z + r.z); + n.originalView && vc.UserControlView ? n.viewerImpl.lookAt(n.originalView.position, n.originalView.target, n.originalView.up) : (n.viewerImpl.lookAt(a, o, n.viewerImpl.camera.up), + n.setOriginalView(a, o, n.viewerImpl.camera.up)) + } + )), + this.getViewerImpl().modelManager.addEventListener(Rc.ON_LOAD_PROGRESS, (function(A) { + Bh.log(A.progress) + } + )), + this.getViewerImpl().modelManager.addEventListener(Rc.ON_LOAD_COMPLETE, (function(A) { + Bh.log(A.modelKey, " is load "), + Bh.timeEnd("模型".concat(A.modelKey, "加载时间")); + var e = n.getViewerImpl().getModel(A.modelKey); + for (var t in e.floorManager && vc.EnableCreateMiniMap && (Bh.time("小地图生成"), + e.floorManager.generateMiniMap(n.getViewerImpl()), + Bh.timeEnd("小地图生成")), + e && e.getConfig() && n.getViewerImpl().cameraControl.setSceneUnit(e.getConfig().lengthUnit), + bc) + if (e && bc.hasOwnProperty(t) && !0 === bc[t]) { + var i = t + , o = e.getComponentKeysByType(i) + , r = e.getConfig() + , a = []; + !r || r.type !== Zc.RVT && r.type !== Zc.MERGE || (a = e.getComponentKeysByProperty("buildInCategory", i)), + n.deactivateComponentsByKey(o.concat(a)) + } + n.getViewerImpl().getBoundingBox().isEmpty() && (n.getViewerImpl().zoomAll(), + n.getViewerImpl().goToInitialView()) + } + )), + this.getViewerImpl().modelManager.addEventListener(Rc.ON_CLICK_PICK, (function(A) { + if (A.intersectInfo) { + Bh.log("构件key", A.intersectInfo.selectedObjectId); + var e = A.intersectInfo.object; + e && Bh.log(e) + } + } + )), + this.getViewerImpl().getControlManager().addEventListener(Rc.ON_CONTROL_EXIST, (function(A) { + if (A.name === Pc.CLIP_BY_BOX) + for (var e = n.getViewerImpl().modelManager.getModelKeys(), t = 0, i = e.length; i > t; t += 1) { + var o = n.getViewerImpl().modelManager.getModel(e[t]); + if (o) + for (var r = 0; 6 > r; r += 1) { + o._getNodeGroup("sectionFill_" + r).clear() + } + } + } + )), + this.viewerImpl.modelManager.addEventListener(Rc.ON_CONTROL_UPDATEUI, (function(A) { + n.SVGRect.creatRect(A) + } + )) + } else + mh.showWebGLMessage(t) + }; + Object.assign(Py.prototype, Ld.prototype), + Object.assign(Py.prototype, { + constructor: Py, + addView: function(A, e, t, i) { + this.getViewerImpl().load({ + serverUrl: this.host, + modelKey: A, + dbName: e, + token: t, + share: i || "", + notifyProgress: !0, + type: A.startsWith("G") ? "GIS" : "" + }) + }, + addViews: function(A, e, t, i) { + vc.AutoMergeComponent = !1, + vc.MergeComponent = !0, + this.getViewerImpl().load({ + serverUrl: this.host, + modelKey: A, + modelKeys: e, + dbName: t, + token: i, + notifyProgress: !0 + }) + }, + addTilesView: function(A, e, t) { + this.getViewerImpl().loadTiles({ + serverUrl: this.host, + modelKey: A, + dbName: e, + token: t, + notifyProgress: !0 + }) + }, + addTilesViewFromLocal: function(A) { + this.getViewerImpl().loadTiles({ + serverUrl: ".", + modelKey: A, + dbName: "", + token: "", + notifyProgress: !0, + offLine: !0 + }) + }, + getSSE: function(A) { + var e = this.getBoxByComponentsKey(A) + , t = this.viewerImpl.camera + , i = e.getCenter(new y) + , o = e.getSize().length() + , n = this.viewerImpl.getRenderer().domElement.width + , r = t.fov; + return o * n / (2 * t.position.clone().sub(i).length() * Math.tan(r / 2)) + }, + removeView: function(A) { + return this.getViewerImpl().unload(A) + }, + removeAllView: function() { + this.getViewerImpl().unloadAll() + }, + addViewFromLocal: function(A) { + this.getViewerImpl().load({ + serverUrl: ".", + modelKey: A, + dbName: "", + notifyProgress: !0, + offLine: !0 + }) + }, + loadComponents: function(A, e, t, i) { + Array.isArray(A) || (A = [A]), + this.getViewerImpl().loadGeopkOnDemand(A, e, t, i) + }, + unloadCompomemts: function(A, e) { + Array.isArray(A) || (A = [A]), + this.getViewerImpl().unloadGeopkOnDemand(A, e) + }, + getOriginalView: function() { + return this.originalView + }, + setOriginalView: function(A, e, t) { + A && e && t ? (this.originalView || (this.originalView = {}), + this.originalView.position = Array.isArray(A) ? new y(A[0],A[1],A[2]) : new y(A.x,A.y,A.z), + this.originalView.target = Array.isArray(e) ? new y(e[0],e[1],e[2]) : new y(e.x,e.y,e.z), + this.originalView.up = Array.isArray(t) ? new y(t[0],t[1],t[2]) : new y(t.x,t.y,t.z)) : this.originalView = void 0 + }, + getViewerImpl: function() { + return this.viewerImpl + }, + getAllComponents: function() { + return this.getViewerImpl().getModelManager().getAllComponents() + }, + getAllComponentsKey: function() { + return this.getViewerImpl().getModelManager().getAllComponentsKey() + }, + getComponentsKeyByModelKey: function(A) { + return this.getViewerImpl().getModelManager().getComponentsKeyByModelKey(A) + }, + getComponentKeysByName: function(A) { + return this.getViewerImpl().getModelManager().getComponentKeysByName(A) + }, + getComponentKeysByType: function(A) { + return this.getViewerImpl().getModelManager().getComponentKeysByType(A) + }, + getComponentKeysByProperty: function(A, e) { + return this.getViewerImpl().getModelManager().getComponentKeysByProperty(A, e) + }, + getScreenCoordFromSceneCoordAndCheckCover: function(A) { + return this.getViewerImpl().getScreenCoordFromSceneCoordAndCheckCover(A) + }, + pickByPoint: function(A) { + return this.getViewerImpl().pickByPoint(A) + }, + calculateMinDistance: function(A, e) { + return this.getViewerImpl().calculateMinDistance(A, e) + }, + otherObjectsInScene: function(A) {}, + getComponentsByKey: function(A) { + Array.isArray(A) || (A = [A]); + var e = [] + , t = this; + return A.forEach((function(A) { + var i = t.getViewerImpl().modelManager.getComponent(A); + if (i) { + var o = {}; + o[A] = i, + e.push(o) + } + } + )), + e + }, + getModelFloorMapsByKey: function(A, e) { + var t = this.getViewerImpl().getModel(A); + if (!t) + return { + msg: "没有此模型" + }; + var i = t.getConfig().type; + return i !== Zc.RVT && i !== Zc.IFC && i !== Zc.MERGE ? { + msg: "该模型不支持小地图" + } : t.floorManager ? this.getViewerImpl().getModelFloorMapsByKey(A, e) : { + msg: "该模型不支持小地图" + } + }, + showComponentsById: function(A, e) { + Array.isArray(A) || (A = [A]); + for (var t = [], i = 0; A.length > i; i += 1) + t[i] = e + "_" + A[i]; + this.getViewerImpl().getFilter().showByIds(t), + this.render() + }, + showComponentsByKey: function(A) { + Array.isArray(A) || (A = [A]), + this.getViewerImpl().getFilter().showByIds(A), + this.render() + }, + hideComponentsById: function(A, e) { + Array.isArray(A) || (A = [A]); + for (var t = [], i = 0; A.length > i; i += 1) + t[i] = e + "_" + A[i]; + this.filter.hideByIds(t), + this.render() + }, + hideComponentsByKey: function(A) { + Array.isArray(A) || (A = [A]), + this.filter.hideByIds(A), + this.render() + }, + activateComponentsByKey: function(A) { + Array.isArray(A) || (A = [A]), + this.filter.activateByIds(A), + this.render() + }, + deactivateComponentsByKey: function(A) { + Array.isArray(A) || (A = [A]), + this.filter.deactivateByIds(A), + this.render() + }, + hideAllComponents: function() { + this.getViewerImpl().getFilter().hideAll(), + this.render() + }, + showAllComponents: function() { + this.getViewerImpl().getFilter().showAll(), + this.render() + }, + highlightComponentsById: function(A, e) { + Array.isArray(A) || (A = [A]); + for (var t = [], i = 0; A.length > i; i += 1) + t[i] = e + "_" + A[i]; + this.getViewerImpl().setSelection(t), + this.render() + }, + highlightComponentsByKey: function(A, e) { + Array.isArray(A) || (A = [A]), + this.getViewerImpl().setSelection(A); + var t = e; + "boolean" != typeof e && (t = !0), + t && this.render() + }, + addHighlightComponentsByKey: function(A) { + Array.isArray(A) || (A = [A]), + this.getViewerImpl().addToSelection(A), + this.render() + }, + closeHighlightComponentsById: function(A, e) { + Array.isArray(A) || (A = [A]); + for (var t = [], i = 0; A.length > i; i += 1) + t[i] = e + "_" + A[i]; + this.getViewerImpl().removeFromSelection(t), + this.render() + }, + closeHighlightComponentsByKey: function(A) { + Array.isArray(A) || (A = [A]), + this.getViewerImpl().removeFromSelection(A), + this.render() + }, + getHighlightComponentsKey: function() { + return this.getViewerImpl().getSelection() + }, + clearHighlightList: function() { + this.getViewerImpl().clearSelection(), + this.render() + }, + getHighlightComponents: function() { + var A = this.getHighlightComponentsKey() + , e = [] + , t = this; + return A.forEach((function(A) { + var i = t.getViewerImpl().modelManager.getComponent(A); + if (i) { + var o = {}; + o[A] = i, + e.push(o) + } + } + )), + e + }, + setComponentsOpacityState: function(A, e) { + Array.isArray(A) || (A = [A]), + e === Oc.TRANSLUCENT ? this.transparentComponentsByKey(A) : e === Oc.OPAQUE && this.closeTransparentComponentsByKey(A) + }, + transparentComponentsById: function(A, e) { + Array.isArray(A) || (A = [A]); + for (var t = [], i = 0; A.length > i; i += 1) + t[i] = e + "_" + A[i]; + this.getViewerImpl().getFilter().makeTranslucentByIds(t), + this.render() + }, + transparentComponentsByKey: function(A, e) { + Array.isArray(A) || (A = [A]); + var t = this.getViewerImpl().getFilter(); + if (e) { + var i = this.getComponentsByKey(A); + if (Array.isArray(A) && i.length !== A.length) { + i = []; + var o = !0 + , n = !1 + , r = void 0; + try { + for (var a, s = A[Symbol.iterator](); !(o = (a = s.next()).done); o = !0) { + var l = this.getComponentsByKey(a.value); + l.length > 0 && i.push(l[0]) + } + } catch (A) { + n = !0, + r = A + } finally { + try { + o || null == s.return || s.return() + } finally { + if (n) + throw r + } + } + } + t.transparentComponentsByKey(this.getViewerImpl().getModelManager(), i, e) + } else + t.makeTranslucentByIds(A); + this.render() + }, + transparentOtherComponentsByKey: function(A) { + Array.isArray(A) || (A = [A]), + this.getViewerImpl().getFilter().makeTranslucentOthersByIds(A), + this.render() + }, + transparentAllComponents: function() { + this.getViewerImpl().getFilter().makeTranslucentOthersByIds([]), + this.render() + }, + closeTransparentComponentsById: function(A, e) { + Array.isArray(A) || (A = [A]); + for (var t = [], i = 0; A.length > i; i += 1) + t[i] = e + "_" + A[i]; + this.getViewerImpl().getFilter().opaqueByIds(t), + this.render() + }, + closeTransparentComponentsByKey: function(A) { + Array.isArray(A) || (A = [A]), + this.getViewerImpl().getFilter().opaqueByIds(A), + this.render() + }, + clearTransparentList: function() { + this.clearComponentTransparentList(), + this.clearModelTransparentList() + }, + clearComponentTransparentList: function() { + var A = this.getViewerImpl().getFilter(); + A.opaqueAll(), + A.opaqueByIds([]), + this.render() + }, + colorfulComponentsById: function(A, e, t, i) { + Array.isArray(A) || (A = [A]); + for (var o = [], n = 0; A.length > n; n += 1) + o[n] = e + "_" + A[n]; + var r = this.getViewerImpl().getFilter() + , a = {}; + a.color = t, + "number" == typeof i && (a.opacity = i), + r.addToOverrideListByColor(o, a), + this.render() + }, + colorfulComponentsByKey: function(A, e, t) { + Array.isArray(A) || (A = [A]); + var i = this.getViewerImpl().getFilter() + , o = {}; + o.color = e, + "number" == typeof t && (o.opacity = t), + i.addToOverrideListByColor(A, o), + this.render() + }, + setComponentsMaterialByKey: function(A, e, t, i) { + var o = this.getComponentsByKey(A); + if (Array.isArray(e)) { + var n = 0 + , r = !0 + , a = !1 + , s = void 0; + try { + for (var l, c = e[Symbol.iterator](); !(r = (l = c.next()).done); r = !0) { + var h = l.value; + "" === h.name && (h.name = "custMat_" + (new Date).getTime() + "_" + n, + n += 1) + } + } catch (A) { + a = !0, + s = A + } finally { + try { + r || null == c.return || c.return() + } finally { + if (a) + throw s + } + } + } else + "" === e.name && (e.name = "custMat_" + (new Date).getTime()); + var d = this.getViewerImpl().getFilter().addToOverrideListByCustomerMaterial(this.getViewerImpl().getModelManager(), o, e, t, i); + return this.render(), + d + }, + closeMaterialByKey: function(A) { + var e = this; + Array.isArray(A) ? A.forEach((function(A) { + var t = e.getComponentsByKey(A)[0][A][0]; + if (!t.isBatched && !t.instanceOrNot && !t.RenderTypeChange) { + var i = t.originMId; + e.getComponentsByKey(A)[0][A][0].materialId = Array.isArray(i) ? [].concat(i) : i + } + e.closeColorfulComponentsByKey(A) + } + )) : this.closeColorfulComponentsByKey(A) + }, + closeColorfulComponentsById: function(A, e) { + Array.isArray(A) || (A = [A]); + for (var t = [], i = 0; A.length > i; i += 1) + t[i] = e + "_" + A[i]; + this.getViewerImpl().getFilter().addToOverrideListByColor(t, null), + this.render() + }, + closeColorfulComponentsByKey: function(A) { + Array.isArray(A) || (A = [A]), + this.getViewerImpl().getFilter().addToOverrideListByColor(A, null), + this.render() + }, + clearColorfulList: function() { + this.getViewerImpl().getFilter().clearAllOverrideList(), + this.render() + }, + wireFrameComponentsById: function(A, e) { + Array.isArray(A) || (A = [A]); + for (var t = [], i = 0; A.length > i; i += 1) + t[i] = e + "_" + A[i]; + this.getViewerImpl().getFilter().addToWireframeByWireframe(t, { + wireframe: !0 + }), + this.render() + }, + wireFrameComponentsByKey: function(A) { + Array.isArray(A) || (A = [A]); + this.getViewerImpl().getFilter().addToWireframeByWireframe(A, { + wireframe: !0 + }), + this.render() + }, + closeWireFrameComponentsById: function(A, e) { + Array.isArray(A) || (A = [A]); + for (var t = [], i = 0; A.length > i; i += 1) + t[i] = e + "_" + A[i]; + this.getViewerImpl().getFilter().addToWireframeByWireframe(t, null), + this.render() + }, + closeWireFrameComponentsByKey: function(A) { + Array.isArray(A) || (A = [A]), + this.getViewerImpl().getFilter().addToWireframeByWireframe(A, null), + this.render() + }, + clearWireframeList: function() { + this.getViewerImpl().getFilter().clearAllWireframeList(), + this.render() + }, + isolateComponentsById: function(A, e, t) { + Array.isArray(A) || (A = [A]); + for (var i = [], o = 0; A.length > o; o += 1) + i[o] = e + "_" + A[o]; + this.getViewerImpl().getFilter().setIsolateList(i, !1 !== t), + this.render() + }, + isolateComponentsByKey: function(A, e) { + Array.isArray(A) || (A = [A]), + this.getViewerImpl().getFilter().setIsolateList(A, !1 !== e), + this.render() + }, + closeIsolateComponentsById: function(A, e) { + Array.isArray(A) || (A = [A]); + for (var t = [], i = 0; A.length > i; i += 1) + t[i] = e + "_" + A[i]; + this.getViewerImpl().getFilter().removeFromIsolateList(t), + this.render() + }, + closeIsolateComponentsByKey: function(A) { + Array.isArray(A) || (A = [A]), + this.getViewerImpl().getFilter().removeFromIsolateList(A), + this.render() + }, + clearIsolation: function() { + this.getViewerImpl().getFilter().clearIsolation() + }, + showModelsByKey: function(A) { + Array.isArray(A) || (A = [A]), + this.getViewerImpl().getFilter().showModelByIds(A), + this.render() + }, + hideModelsByKey: function(A) { + Array.isArray(A) || (A = [A]), + this.filter.hideModelByIds(A), + this.render() + }, + hideAllModels: function() { + this.getViewerImpl().getFilter().hideAllModel(), + this.render() + }, + showAllModels: function() { + this.getViewerImpl().getFilter().showAllModel(), + this.render() + }, + highlightModelsByKey: function(A) { + Array.isArray(A) || (A = [A]), + this.getViewerImpl().setModelSelection(A), + this.render() + }, + addHighlightModelsByKey: function(A) { + Array.isArray(A) || (A = [A]), + this.getViewerImpl().addToModelSelection(A), + this.render() + }, + closeHighlightModelsByKey: function(A) { + Array.isArray(A) || (A = [A]), + this.getViewerImpl().removeFromModelSelection(A), + this.render() + }, + getHighlightModelsKey: function() { + return this.getViewerImpl().getModelSelection() + }, + clearModelHighlightList: function() { + this.getViewerImpl().clearModelSelection(), + this.render() + }, + transparentModelsByKey: function(A, e, t) { + var i = this; + Array.isArray(A) || (A = [A]), + this.closeTransparentModelsByKey(A); + var o = this.getViewerImpl().getFilter(); + e ? A.forEach((function(A) { + o.transparentModelOrigMatByKey(i.getViewerImpl().getModelManager(), A, t) + } + )) : o.makeModelTranslucentByIds(A), + this.render() + }, + transparentOtherModelsByKey: function(A, e, t) { + Array.isArray(A) || (A = [A]); + for (var i = Object.keys(this.viewerImpl.modelManager.models), o = [], n = 0; i.length > n; n++) { + var r = i[n]; + A.includes(r) || o.push(r) + } + (this.closeTransparentModelsByKey(o), + e) ? this.transparentModelsByKey(o, e, t) : this.getViewerImpl().getFilter().makeTranslucentOthersModelByIds(A); + this.render() + }, + transparentAllModels: function(A, e) { + if (this.clearModelTransparentList(), + A) { + var t = Object.keys(this.viewerImpl.modelManager.models); + this.transparentModelsByKey(t, A, e) + } else { + this.getViewerImpl().getFilter().makeTranslucentOthersModelByIds([]) + } + this.render() + }, + closeTransparentModelsByKey: function(A) { + var e = this + , t = this.getViewerImpl().getFilter(); + Array.isArray(A) || (A = [A]), + A.forEach((function(A) { + t.closeOrigMatModelTransparent(e.viewerImpl.modelManager, A) + } + )), + t.opaqueModelByIds(A), + this.render() + }, + clearModelTransparentList: function() { + var A = this + , e = this.getViewerImpl().getFilter(); + Object.keys(this.viewerImpl.modelManager.models).forEach((function(t) { + e.closeOrigMatModelTransparent(A.viewerImpl.modelManager, t) + } + )), + e.opaqueAllModel(), + e.opaqueModelByIds([]), + this.render() + }, + colorfulModelsByKey: function(A, e, t) { + Array.isArray(A) || (A = [A]); + var i = this.getViewerImpl().getFilter() + , o = {}; + o.color = e, + "number" == typeof t && (o.opacity = t), + i.addToModelOverrideListByColor(A, o), + this.render() + }, + closeColorfulModelsByKey: function(A) { + Array.isArray(A) || (A = [A]), + this.getViewerImpl().getFilter().addToModelOverrideListByColor(A, null), + this.render() + }, + clearModelColorfulList: function() { + this.getViewerImpl().getFilter().clearModelAllOverrideList(), + this.render() + }, + isolateModelsByKey: function(A, e) { + Array.isArray(A) || (A = [A]), + this.getViewerImpl().getFilter().setModelIsolateList(A, !1 !== e), + this.render() + }, + closeIsolateModelsByKey: function(A) { + Array.isArray(A) || (A = [A]), + this.getViewerImpl().getFilter().removeModelFromIsolateList(A), + this.render() + }, + clearModelIsolation: function() { + this.getViewerImpl().getFilter().clearModelIsolation(), + this.render() + }, + setModelMatrix: function(A, e) { + this.getViewerImpl().setModelMatrix(e, A) + }, + getModelMatrix: function(A) { + return this.getViewerImpl().getModelMatrix(A) + }, + disableComponentsSelectionByKey: function(A) { + Array.isArray(A) || (A = [A]), + this.filter.addToFrozenList(A) + }, + enableComponentsSelectionByKey: function(A) { + Array.isArray(A) || (A = [A]), + this.filter.removeFromFrozenList(A) + }, + clearDisableSelectionList: function() { + this.filter.clearFrozen() + }, + overturnYAndZaxis: function(A) { + this.getViewerImpl().overturnYAndZaxis(A), + this.render() + }, + translateModel: function(A) { + this.getViewerImpl().translateModel(A) + }, + rotateModel: function(A) { + this.getViewerImpl().rotateModel(A) + }, + scaleModel: function(A) { + this.getViewerImpl().scaleModel(A) + }, + modelsExplosion: function(A) { + for (var e = { + modelKey: [], + coefficientX: 1, + coefficientY: 1, + coefficientZ: 1, + center: this.getViewerImpl().getScene().getBoundingBoxWorld().getCenter(new y).toArray() + }, t = uh.extend(!0, {}, e, A), i = Array.isArray(t.modelKey) ? t.modelKey : [t.modelKey], o = 0; i.length > o; o += 1) { + var n = this.getViewerImpl().getModel(i[o]); + n && n.explosion(t) + } + this.getViewerImpl().getModelManager().updateSceneBoundingBox(), + this.render() + }, + closeModelsExplosion: function(A) { + var e = Array.isArray(A) ? A : [A]; + this.modelsExplosion({ + modelKey: e + }), + this.render() + }, + componentsExplosion: function(A) { + var e = { + componentKey: [], + coefficientX: 1, + coefficientY: 1, + coefficientZ: 1, + offsetX: 0, + offsetY: 0, + offsetZ: 0, + center: this.getViewerImpl().getScene().getBoundingBoxWorld().getCenter(new y).toArray() + } + , t = uh.extend(!0, {}, e, A) + , i = this.getViewerImpl().getModelManager(); + i.componentsExplosion(t), + i.updateSceneBoundingBox(), + this.render() + }, + closeComponentsExplosion: function(A) { + var e = Array.isArray(A) ? A : [A]; + this.getViewerImpl().getModelManager().componentsExplosion({ + componentKey: e + }), + this.render() + }, + canFloorExplosion: function() { + return this.getViewerImpl().getModelManager().canFloorExplosion() + }, + floorExplosion: function(A) { + return !!this.getViewerImpl().getModelManager().floorExplosion(A) && (this.render(), + !0) + }, + closeFloorExplosion: function() { + var A = this.getViewerImpl().getModelManager(); + A.closeFloorExplosion(), + A.updateSceneBoundingBox(), + this.render() + }, + componentApplyMatrix: function(A, e) { + return !(!e || !e.isMatrix4) && (this.getViewerImpl().componentApplyMatrix2(A, e), + this.render(), + !0) + }, + getMatrix4FromEuler: function(A, e, t) { + var i = 0 + , o = 0 + , n = 0; + Array.isArray(A) ? (i = A[0], + o = A[1], + n = A[2]) : (i = A.x, + o = A.y, + n = A.z); + var r = e || [0, 0, 0] + , a = 0 + , s = 0 + , l = 0; + Array.isArray(r) ? (a = r[0], + s = r[1], + l = r[2]) : (a = r.x, + s = r.y, + l = r.z); + var c = new M; + c.setPosition(-a, -s, -l); + var h = new M + , d = new F(i,o,n,t || "XYZ"); + h.makeRotationFromEuler(d); + var p = new M; + return p.setPosition(a, s, l), + p.multiply(h).multiply(c), + p + }, + isolateComponentsByIdForJDS: function(A, e) { + Array.isArray(A) || (A = [A]); + for (var t = [], i = 0; A.length > i; i += 1) + t[i] = e + "_" + A[i]; + this.filter.addToIsolateList(Nc.HIDDEN_OTHERS, t); + for (var o = this.getViewerImpl().modelManager.getScene().pool._pool, n = 0; o.length > n; n += 1) { + o[n].visible = !1; + for (var r = 0; t.length > r; r += 1) + o[n].key === t[r] && (o[n].visible = !0) + } + return this.render(), + !0 + }, + sortComponentsById: function(A, e, t) { + Array.isArray(A) || (A = [A]); + for (var i = this.getViewerImpl().getModel(e), o = [], n = 0; A.length > n; n += 1) + o[n] = e + "_" + A[n]; + return i ? i.getComponentKeysByTypeFromList(o, t) : [] + }, + sortComponentsByKey: function(A, e) { + return Array.isArray(A) || (A = [A]), + this.getViewerImpl().modelManager.getComponentKeysByTypeFromList(A, e) + }, + conditionSortComponentsById: function(A, e, t, i, o) { + var n = this.filter.setConditions(A, e); + Array.isArray(t) || (t = [t]); + for (var r = [], a = 0; t.length > a; a += 1) + r[a] = i + "_" + t[a]; + var s = this.getComponentsByKey(r) + , l = []; + if (null !== n) + switch (A) { + case 0: + for (var c = 0; s.length > c; c += 1) + n.match(s[c]) && l.push(s[c].key); + this.isolateComponentsByKey(l); + break; + case 1: + for (var h = 0; s.length > h; h += 1) + n.match(s[h]) && l.push(s[h].key); + var d = this.otherObjectsInScene(l); + this.transparentComponentsByKey(d, .5, !1); + break; + case 2: + for (var p = 0; s.length > p; p += 1) + null !== n.getMatchItem(s[p]) && l.push(s[p].key); + !0 === o.highLight ? this.highlightComponentsByKey(l) : this.colorfulComponentsByKey(l, o.color) + } + return l + }, + conditionSortComponentsByKey: function(A, e, t, i) { + var o = this.filter.setConditions(A, e); + Array.isArray(t) || (t = [t]); + var n = this.getComponentsByKey(t) + , r = []; + if (null !== o) + switch (A) { + case 0: + for (var a = 0; n.length > a; a += 1) + o.match(n[a]) && r.push(n[a].key); + this.isolateComponentsByKey(r); + break; + case 1: + for (var s = 0; n.length > s; s += 1) + o.match(n[s]) && r.push(n[s].key); + var l = this.otherObjectsInScene(r); + this.transparentComponentsByKey(l, .5, !1); + break; + case 2: + for (var c = 0; n.length > c; c += 1) + null !== o.getMatchItem(n[c]) && r.push(n[c].key); + !0 === i.highLight ? this.highlightComponentsByKey(r) : this.colorfulComponentsByKey(r, i.color) + } + return r + }, + resetScene: function(A) { + if (A = A || {}, + this.getViewerImpl().getModelManager().dispatchEvent({ + type: Rc.BEFORE_RESETSCENE, + data: A + }), + uh.isEmptyObject(A)) { + this.clearIsolation(), + this.clearModelIsolation(), + this.clearHighlightList(), + this.clearModelHighlightList(), + this.showAllComponents(), + this.showAllModels(), + this.clearWireframeList(), + this.clearTransparentList(), + this.clearModelTransparentList(), + this.clearColorfulList(), + this.clearModelColorfulList(); + var e = this.viewerImpl.modelManager.scene.getBoundingBox() + , t = e.getCenter(new y) + , i = e.getSize(new y) + , o = new y(t.x + i.x,t.y + i.y,t.z + i.z); + this.originalView ? this.viewerImpl.lookAt(this.originalView.position, this.originalView.target, this.originalView.up) : this.viewerImpl.lookAt(o, t, new y(0,0,1)) + } else if (A.visible && (this.clearIsolation(), + this.clearModelIsolation(), + this.showAllComponents(), + this.showAllModels()), + A.selected && (this.clearHighlightList(), + this.clearModelHighlightList()), + A.transparent && (this.clearTransparentList(), + this.clearModelTransparentList()), + A.wireframed && this.clearWireframeList(), + A.colorfully && (this.clearColorfulList(), + this.clearModelColorfulList()), + A.view) + if (this.originalView) + this.viewerImpl.lookAt(this.originalView.position, this.originalView.target, this.originalView.up); + else { + var n = this.viewerImpl.modelManager.scene.getBoundingBox() + , r = n.getCenter(new y) + , a = n.getSize(new y) + , s = new y(r.x + a.x,r.y + a.y,r.z + a.z); + this.viewerImpl.lookAt(s, r, new y(0,0,1)) + } + this.getViewerImpl().getModelManager().dispatchEvent({ + type: Rc.AFTER_RESETSCENE, + data: A + }), + this.render() + }, + getScreenCoordFromSceneCoord: function(A) { + return this.getViewerImpl().getScreenCoordFromSceneCoord(A) + }, + getWorldPositionFromLocalPositionByModelKey: function(A, e) { + var t = this.getModelMatrix(e); + if (t) { + if (A.isVector3) { + var i = A.clone(); + return i.applyMatrix4(t), + i.toArray() + } + if (Array.isArray(A)) { + var o = (new y).fromArray(A); + return o.applyMatrix4(t), + o.toArray() + } + } else + Bh.error("模型key无效") + }, + getLocalPositionFromWorldPositionByModelKey: function(A, e) { + var t = this.getModelMatrix(e); + if (t) { + var i = (new M).getInverse(t); + if (A.isVector3) { + var o = A.clone(); + return o.applyMatrix4(i), + o.toArray() + } + if (Array.isArray(A)) { + var n = (new y).fromArray(A); + return n.applyMatrix4(i), + n.toArray() + } + } else + Bh.error("模型key无效") + }, + getWorldPositionListFromLocalPositionListByModelKey: function(A, e) { + var t = this.getModelMatrix(e); + if (t) { + for (var i = [], o = 0, n = A.length; n > o; o += 1) { + var r = A[o]; + if (r.isVector3) { + var a = r.clone(); + a.applyMatrix4(t), + i.push(a.toArray()) + } else if (Array.isArray(r)) { + var s = (new y).fromArray(r); + s.applyMatrix4(t), + i.push(s.toArray()) + } + } + return i + } + Bh.error("模型key无效") + }, + getLocalPositionListFromWorldPositionListByModelKey: function(A, e) { + var t = this.getModelMatrix(e); + if (t) { + for (var i = (new M).getInverse(t), o = [], n = 0, r = A.length; r > n; n += 1) { + var a = A[n]; + if (a.isVector3) { + var s = a.clone(); + s.applyMatrix4(i), + o.push(s.toArray()) + } else if (Array.isArray(a)) { + var l = (new y).fromArray(a); + l.applyMatrix4(i), + o.push(l.toArray()) + } + } + return o + } + Bh.error("模型key无效") + }, + getWorldPositionArrayFromLocalPositionArrayByModelKey: function(A, e) { + var t = this.getModelMatrix(e); + if (t) { + for (var i = [], o = 0, n = A.length; n > o; o += 3) { + var r = (new y).fromArray(A, o); + r.applyMatrix4(t), + i.push.apply(i, yc(r.toArray())) + } + return i + } + Bh.error("模型key无效") + }, + getLocalPositionArrayFromWorldPositionArrayByModelKey: function(A, e) { + var t = this.getModelMatrix(e); + if (t) { + for (var i = (new M).getInverse(t), o = [], n = 0, r = A.length; r > n; n += 3) { + var a = (new y).fromArray(A, n); + a.applyMatrix4(i), + o.push.apply(o, yc(a.toArray())) + } + return o + } + Bh.error("模型key无效") + }, + render: function() { + this.getViewerImpl().render() + }, + syncRender: function() { + this.getViewerImpl()._render() + }, + resize: function(A, e) { + this.getViewerImpl().resize(A, e) + }, + autoResize: function() { + this.getViewerImpl().resize(window.innerWidth - 5, window.innerHeight - 5) + }, + setSceneBackGroundColor: function(A, e) { + this.getViewerImpl().setBackgroundColor(new Xh(A,e)) + }, + resetSceneBackgroundColor: function() { + this.getViewerImpl().resetBackgroundColor() + }, + getComponentsAttributeById: function(A, e, t) { + this.getComponentsAttributeByKey(e + "_" + A, t) + }, + getComponentsAttributeByKey: function(A, e) { + var t = this.getViewerImpl().getModelByComponentKey(A); + if (t) { + if (t.offLine) { + if (t.attributes && t.attributes[A]) + return void e({ + attribute: t.attributes[A] + }); + e(null) + } + _d({ + type: "GET", + url: (t.loader.url.serverUrl || this.host) + "/api/" + t.projectKey + "/components?componentKey=" + A + ("" === t.shareKey ? "" : "&share=" + t.shareKey), + headers: { + Authorization: t.accessToken + }, + success: function(A) { + try { + A = JSON.parse(A) + } catch (A) { + Bh.log("解析属性失败") + } + e("SUCCESS" === A.code ? A.data : null) + }, + error: function(A) { + e(null) + } + }) + } else + e(null) + }, + mergeMesh: function(A, e) { + var t = this.getViewerImpl().modelManager.getModel(e); + if (!t) + return null; + var i = new ep("mergeGroup"); + i.modelKey = e; + for (var o = new he, n = [], r = [], a = [], s = [], l = [], c = [], h = t.cache, d = [], p = [], g = null, u = 0, f = 0; A.length > f; f += 1) + if (t.cache.components.hasOwnProperty(A)) { + u += 1; + var m = {} + , C = r.length + , y = n.length / 3; + m.start = C; + var v = l.length + , I = t.cache.components[A] + , E = h.geometries[I.geoId]; + if (!E) + continue; + var B = E.clone() + , x = new M; + x.fromArray(I.matrix); + var S = B.attributes; + B.applyMatrix(x); + for (var w = 0; S.position.array.length > w; w += 1) + n.push(S.position.array[w]); + for (var b = 0; S.normal.array.length > b; b += 1) + s.push(S.normal.array[b]); + if (S.uv) + for (var U = 0; S.uv.array.length > U; U += 1) + a.push(S.uv.array[U]); + for (var F = 0; B.index.array.length > F; F += 1) + r.push(B.index.array[F] + y); + if (B.groups.length > 0) + for (var K = 0; B.groups.length > K; K += 1) { + var Q = {}; + Q.start = B.groups[K].start + C, + Q.count = B.groups[K].count, + -1 !== B.groups[K].materialIndex && (Q.materialIndex = B.groups[K].materialIndex + v), + c.push(Q) + } + else { + var R = {}; + R.start = C, + R.count = B.index.count, + R.materialIndex = v, + c.push(R) + } + var T = h.materials[I.matId]; + if (!T) + continue; + for (F = 0; T.materials.length > F; F += 1) + l.push(T.materials[F]); + if (m.end = r.length / 3, + m.guid = I.guid, + u > vc.MaxMergeCount) { + if (u = 0, + o.setAttribute("position", new YA(new Float32Array(n),3)), + o.setAttribute("normal", new YA(new Float32Array(s),3)), + o.setAttribute("uv", new YA(new Float32Array(a),2)), + d = [], + Array.fill) + d = Array(n.length).fill(1); + else + for (var k = 0; n.length > k; k += 1) + d.push(1); + p = new Float32Array(d), + o.setAttribute("color", new YA(p,3,!0)), + o.setIndex(r), + o.groups = c, + g = new Ue(o,l), + i.add(g), + o = new he, + n = [], + r = [], + a = [], + s = [], + l = [], + c = [] + } + } + if (o.setAttribute("position", new YA(new Float32Array(n),3)), + o.setAttribute("normal", new YA(new Float32Array(s),3)), + o.setAttribute("uv", new YA(new Float32Array(a),2)), + d = [], + Array.fill) + d = Array(n.length).fill(1); + else + for (k = 0; n.length > k; k += 1) + d.push(1); + return p = new Float32Array(d), + o.setAttribute("color", new YA(p,3,!0)), + o.setIndex(r), + o.groups = c, + g = new Ue(o,l), + i.add(g), + d = null, + n = null, + r = null, + a = null, + s = null, + l = null, + c = null, + i + }, + setComponentPositionByKey: function(A, e) { + this.getViewerImpl().setComponentPositionByKey(A, e), + this.render() + }, + setComponentPositionById: function(A, e, t) {}, + getBoxByComponentsKey: function(A) { + return Array.isArray(A) || (A = [A]), + this.getViewerImpl().getBoundingBoxByIds(A) + }, + getAttributeByComponentKey: function() {}, + zoomToBox: function(A, e, t) { + this.getViewerImpl().zoomToBox(A, e, t) + }, + zoomIn: function(A, e, t) { + this.getViewerImpl().zoomIn(A, e, t) + }, + zoomOut: function(A, e, t) { + this.getViewerImpl().zoomOut(A, e, t) + }, + flyToStandardView: function(A, e, t, i) { + this.getViewerImpl().setStandardView(A, e, t, i) + }, + setStandardViewWithBox: function(A, e, t, i) { + this.getViewerImpl().setStandardViewWithBox(A, e, t, i) + }, + adaptiveSize: function() { + this.getViewerImpl().zoomToSelection() + }, + adaptiveSizeByKey: function(A) { + Array.isArray(A) || (A = [A]); + var e = this.getViewerImpl().getBoundingBoxByIds(A); + e && !e.isEmpty() && this.getViewerImpl().zoomToBox(e) + }, + flyTo: function(A, e) { + var t = this; + this.getViewerImpl().animator.slerpFlyTo(A, this.viewerImpl, (function(A) { + t.viewerImpl.cameraControl.update(!0, !0) + } + ), e) + }, + linearFlyTo: function(A, e) { + var t = this; + this.getViewerImpl().animator.linearFlyTo(A, this.viewerImpl, (function(A) { + t.viewerImpl.cameraControl.update(!0, !0) + } + ), e) + }, + slerpFlyTo: function(A, e) { + var t = this; + this.getViewerImpl().animator.slerpFlyTo(A, this.viewerImpl, (function(A) { + t.viewerImpl.cameraControl.update(!0, !0) + } + ), e) + }, + setAnimatorDuration: function(A) { + var e = this.getViewerImpl().animator; + return !(!e || "number" != typeof A) && (e.setDuration(A), + !0) + }, + getAnimatorDuration: function() { + var A = this.getViewerImpl().animator; + if (A) + return A.getDuration() + }, + enableViewController: function() { + var A = this; + return this.viewController ? (this.viewController.enable(), + !0) : (this.viewController = new lp(this.viewerImpl,(function() { + return !0 + } + )), + this.viewController.init(this.getViewerImpl().getDomElement()), + this.viewController.render(), + this.getViewerImpl().addRenderFinishedListener((function() { + A.viewController.render() + } + )), + !0) + }, + disableViewController: function() { + return !!this.viewController && (this.viewController.disable(), + !0) + }, + enabledCameraRotateOfVerticalPolarAngle: function(A) { + this.getViewerImpl().cameraControl.enabledPolar(A), + Bh.warn("请改用 lockAxisZ 方法") + }, + lockAxisZ: function(A, e) { + this.getViewerImpl().lockAxisZ(A, e) + }, + setMinPolarAngle: function(A) { + this.getViewerImpl().cameraControl.setMinPolarAngle(A), + Bh.warn("请改用 lockAxisZ 方法") + }, + setMaxPolarAngle: function(A) { + this.getViewerImpl().cameraControl.setMaxPolarAngle(A), + Bh.warn("请改用 lockAxisZ 方法") + }, + getMinPolarAngle: function() { + return this.getViewerImpl().cameraControl.getMinPolarAngle() + }, + getMaxPolarAngle: function() { + return this.getViewerImpl().cameraControl.getMaxPolarAngle() + }, + enableRotate: function(A) { + return jh.NoRotate = !A, + !jh.NoRotate + }, + enablePan: function(A) { + return jh.NoPan = !A, + !jh.NoPan + }, + enableZoom: function(A) { + return jh.NoZoom = !A, + !jh.NoZoom + }, + setPointRotateMode: function(A) { + return this.getViewerImpl().setPointRotateMode(A), + jh.RotatePivotMode + }, + rotateCamera: function(A, e) { + var t = new s + , i = new y; + Array.isArray(A) ? t.set(A[0], A[1]) : t.set(A.x, A.y), + e ? Array.isArray(e) ? i.fromArray(e) : i.set(e.x, e.y, e.z) : i = this.getViewerImpl().getScene().getBoundingBoxWorld().getCenter(i), + this.getViewerImpl().rotateCamera(t, i) + }, + requestPointerLock: function() { + this.getViewerImpl().getControlManager().requestPointerLock() + }, + translateComponentByKey: function(A, e, t) { + this.getViewerImpl().translateComponentByKey(A, e, t) + }, + scaleComponentByKey: function(A, e, t) { + this.getViewerImpl().scaleComponentByKey(A, e, t) + }, + rotateComponentByKey: function(A, e, t) { + this.getViewerImpl().rotateComponentByKey(A, e, t) + }, + cancelTransformComponent: function(A) { + this.getViewerImpl().cancelTransformComponent(A) + }, + restoreComponentTransform: function() { + this.getViewerImpl().restoreComponentTransform() + }, + getComponentLocalMatrixByKey: function(A) { + return this.getViewerImpl().getComponentLocalMatrixByKey(A) + }, + getComponentWorldMatrixByKey: function(A) { + return this.getViewerImpl().getComponentWorldMatrixByKey(A) + }, + setComponentLocalMatrixByKey: function(A, e) { + return this.getViewerImpl().setComponentLocalMatrixByKey(A, e) + }, + resetComponentMatrix: function(A, e) { + return this.getViewerImpl().resetComponentMatrix(A, e) + }, + increaseComponentTransformControlSize: function() { + this.getViewerImpl().increaseComponentTransformControlSize() + }, + decreaseComponentTransformControlSize: function() { + this.getViewerImpl().decreaseComponentTransformControlSize() + }, + setComponentTransformSpaceToLocalSpace: function() { + this.getViewerImpl().setComponentTransformSpaceToLocalSpace() + }, + setComponentTransformSpaceToWorldSpace: function() { + this.getViewerImpl().setComponentTransformSpaceToWorldSpace() + }, + switchComponentTransformSpaceBetweenLocalAndWorld: function() { + this.getViewerImpl().switchComponentTransformSpaceBetweenLocalAndWorld() + }, + showComponentTransformOnAxis: function(A) { + this.getViewerImpl().showComponentTransformOnAxis(A) + }, + hideComponentTransformOnAxis: function(A) { + this.getViewerImpl().hideComponentTransformOnAxis(A) + }, + disableComponentTransform: function() { + this.getViewerImpl().disableComponentTransform() + }, + enableComponentTransform: function() { + this.getViewerImpl().enableComponentTransform() + }, + enableSectionBox: function() { + var A = this.getViewerImpl(); + A.controlManager.enableTool(A, Pc.CLIP_BY_BOX), + this._sectionTool = new Ap(A), + this._sectionTool.toggle(!0, !0), + this._sectionTool.setVisible(!0), + this._sectionTool.reset(), + this._isSection = !0, + this.render() + }, + disableSectionBox: function() { + this.getViewerImpl().controlManager.disableTool(Pc.CLIP_BY_BOX), + this._isSection = !1, + this.render() + }, + resetSectionBox: function() { + this._isSection ? (this.showSectionBox(), + this.setSectionBoxMode(), + this._sectionTool.reset("Rotate")) : Bh.log(fh[vc.language].SectionBoxLockHint) + }, + setSectionBoxMode: function(A) { + this._isSection ? this._sectionTool.setRotatable("Rotate" === A) : Bh.log(fh[vc.language].SectionBoxLockHint) + }, + showSectionBox: function() { + this._isSection ? (this._sectionTool.setVisible(!0), + this.render()) : Bh.log(fh[vc.language].SectionBoxLockHint) + }, + hideSectionBox: function() { + this._isSection ? (this._sectionTool.setVisible(!1), + this.render()) : Bh.log(fh[vc.language].SectionBoxLockHint) + }, + setSectionBox: function(A) { + var e = this.getViewerImpl() + , t = e.getScene().getClipPlanes() + , i = e.worldToDrawing(A.min) + , o = e.worldToDrawing(A.max); + this.enableSectionBox(), + t.setSectionBox(i, o), + this.hideSectionBox() + }, + getSectionBoxState: function() { + if (this._isSection) + return this._sectionTool.saveState(); + Bh.log(fh[vc.language].SectionBoxLockHint) + }, + setSectionBoxState: function(A) { + this._isSection ? (this._sectionTool.loadState(A), + this.render()) : Bh.log(fh[vc.language].SectionBoxLockHint) + }, + getSceneState: function() { + return this.getViewerImpl().getSceneState() + }, + setSceneState: function(A) { + this.getViewerImpl().setSceneState(A) + }, + getScreenShot: function(A) { + var e, t, i, o; + return A.color && A.color instanceof Xh && (e = A.color.getRGBA()), + A.width > 0 && A.height > 0 && (i = A.width, + o = A.height), + "function" == typeof A.callback && (t = A.callback), + this.getViewerImpl().canvas2image(e, i, o, t) + }, + registerModelEventListener: function(A, e) { + this.getViewerImpl().registerEventListener(A, e) + }, + unregisterModelEventListener: function(A, e) { + this.getViewerImpl().unregisterEventListener(A, e) + }, + registerControlEventListener: function(A, e) { + this.getViewerImpl().registerDomEventListener(A, e) + }, + unregisterControlEventListener: function(A, e) { + this.getViewerImpl().unregisterDomEventListener(A, e) + }, + registerCameraEventListener: function(A, e) { + this.getViewerImpl().registerCameraEventListener(A, e) + }, + unregisterCameraEventListener: function(A, e) { + this.getViewerImpl().unregisterCameraEventListener(A, e) + }, + enableLogarithmicDepthBuffer: function(A) { + this.getViewerImpl().enableLogarithmicDepthBuffer(A) + }, + setSkyBox: function(A, e, t, i) { + var o = this.getRootScene(); + o && (A ? o.setSkyBox(void 0, A, e, t, i) : o.background = null) + }, + setDrawingStyle: function(A) { + this.getViewerImpl().setDrawingStyle(A), + this.render() + }, + setExposure: function(A) { + this.getViewerImpl().setExposureShift(A), + this.render() + }, + getBoardlineColor: function(A) { + var e = this.getViewerImpl().getWireframeColor(A); + return new Xh(e,e.opacity) + }, + setBoardlineColor: function(A, e) { + var t = null; + t = A instanceof Xh ? A : new Xh(A), + this.getViewerImpl().setWireframeColor(t, e) + }, + restoreBoardlineColor: function(A) { + this.getViewerImpl().restoreWireframeColor(A) + }, + getSelectionBoardlineColor: function() { + return this.getViewerImpl().getOutlineEdgeColor() || new Xh + }, + setSelectionBoardlineColor: function(A) { + var e = null; + e = A instanceof Xh ? A : new Xh(A), + this.getViewerImpl().setOutlineEdgeColor(e) + }, + restoreSelectionBoardlineColor: function() { + this.getViewerImpl().restoreOutlineEdgeColor() + }, + getSelectionColor: function() { + return this.getViewerImpl().getSelectionColor() + }, + setSelectionColor: function(A) { + var e = null; + e = A instanceof Xh ? A : new Xh(A), + this.getViewerImpl().setSelectionColor(e) + }, + restoreSelectionColor: function() { + this.getViewerImpl().restoreSelectionColor() + }, + setAxisNetColor: function(A, e) { + this.viewerImpl.setAxisNetColor(A, e) + }, + showAxisNet: function() { + this.viewerImpl.showAxisNet() + }, + hideAxisNet: function() { + this.viewerImpl.hideAxisNet() + }, + enableAxisNetStayInFront: function() { + this.viewerImpl.enableAxisNetStayInFront() + }, + disableAxisNetStayInFront: function() { + this.viewerImpl.disableAxisNetStayInFront() + }, + getScene: function() { + return this.getViewerImpl().getScene().getExternalScene() + }, + getRootScene: function() { + return this.getViewerImpl().getScene() + }, + updateSceneBoundingBox: function() { + this.getExternalComponentManager().calculateBoundingBox(), + this.getViewerImpl().modelManager.updateSceneBoundingBox() + }, + getCurrentControlName: function() { + return this.getViewerImpl().getCurrentControlName() + }, + setControlMode: function(A) { + this.getViewerImpl().setControlMode(A), + this.render() + }, + setControlDefault: function() { + this.setControlMode(Gc.PICK) + }, + setZoomSpeed: function(A) { + this.getViewerImpl().cameraControl.setZoomSpeed(A) + }, + getZoomSpeed: function() { + return this.getViewerImpl().cameraControl.getZoomSpeed() + }, + setZoomOutLimitRate: function(A) { + this.getViewerImpl().cameraControl.setZoomOutLimitRate(A) + }, + getZoomOutLimitRate: function() { + return this.getViewerImpl().cameraControl.getZoomOutLimitRate() + }, + setLightIntensityFactor: function(A) { + this.getViewerImpl().setLightIntensityFactor(A) + }, + enableShadow: function(A) { + this.getViewerImpl().enableShadow(A) + }, + updateShadowLight: function() { + this.getViewerImpl().updateShadowLight() + }, + setShadowLightDir: function(A) { + var e; + A ? (e = Array.isArray(A) ? (new y).fromArray(A) : A.isVector3 ? A : new y(A.x,A.y,A.z), + this.getViewerImpl().getScene().lightManager.shadowLightDir = e) : Bh.error("无效参数") + }, + getShadowLightDir: function() { + return this.getViewerImpl().getScene().lightManager.shadowLightDir.clone() + }, + getLightDirFromAltitudeAndAzimuth: function(A, e) { + if (void 0 !== A && void 0 !== e) + return this.getViewerImpl().getScene().lightManager.getLightDirFromAltitudeAndAzimuth(A, e); + Bh.error("参数不合法") + }, + getExternalComponentManager: function() { + return this.getViewerImpl().getExternalComponentManager() + }, + addExternalObject: function(A, e, t, i) { + this.getViewerImpl().addExternalObject(A, e, t, i) + }, + addExternalObjects: function(A, e, t) { + return this.getViewerImpl().addExternalObjects(A, e, t) + }, + removeExternalObjectByName: function(A) { + this.getViewerImpl().removeExternalObjectByName(A) + }, + clearExternalObjects: function() { + this.getViewerImpl().clearExternalObjects() + }, + getExternalObjectByName: function(A) { + return this.getViewerImpl().getExternalObjectByName(A) + }, + getAllExternalObjects: function() { + return this.getViewerImpl().getAllExternalObjects() + }, + showFPS: function() { + this.fpsStats = new $d; + var A = this; + this.viewportDiv.appendChild(this.fpsStats.dom), + this.fpsStats.listener = function() { + A.fpsStats.update() + } + , + this.getViewerImpl().addRenderListener(this.fpsStats.listener) + }, + hideFPS: function() { + this.fpsStats && (this.viewportDiv.removeChild(this.fpsStats.dom), + this.getViewerImpl().removeRenderListener(this.fpsStats.listener)), + this.fpsStats = null + }, + cloneComponentByKey: function(A, e) { + var t = this.getViewerImpl().cloneComponent(A); + return "translate" === e ? this.translateComponentByKey(t.key) : "scale" === e ? this.scaleComponentByKey(t.key) : "rotate" === e && this.rotateComponentByKey(t.key), + null !== t ? { + mesh: t, + key: t.key + } : null + }, + setCloneComponentMaterialsByKey: function(A, e, t) { + return this.getViewerImpl().getExternalComponentManager().setCloneComponentMaterialsByKey(A, e, t) + }, + createSmoothCurve: function(A) { + return this.getViewerImpl().catmullRomCurve(A) + }, + destroy: function() { + this.getViewerImpl().destroy(), + this.viewController && (this.viewController.destroy(), + this.viewController = null) + } + }); + var qy, jy, Hy, Yy, Wy = function(A) { + var e = A.lobibox + , t = A.toolId + , i = A.Flag + , o = document.createElement("div"); + return o.className = "tab-body", + o.id = "tab-compare-" + t, + e.window({ + title: ("old" === t ? "新-旧" : "旧-新") + "模型对比结果", + width: 334, + height: 705, + closeOnEsc: !1, + closeButton: !0, + afterWindowHide: function() { + var A = document.getElementById("modelCompares" + t); + i.modelCompares = !1, + A && (A.style.backgroundColor = "", + A.querySelector(".yj-icon").className = "yj-icon modelCompares-icon") + }, + afterWindowShow: function() { + var A = document.getElementById("modelCompares" + t); + i.modelCompares = !0, + A && (A.style.backgroundColor = "#1f89de", + A.querySelector(".yj-icon").className = "yj-icon modelCompares-icon active") + }, + content: o + }) + }, Jy = function(A) { + var e = A.lobibox + , t = A.toolId + , i = document.createElement("div"); + i.className = "tab-body", + i.id = "tab-compare-properties-" + t; + var o = document.createElement("table"); + o.classList.add("sx-table"), + o.classList.add("table-no-top"), + i.appendChild(o); + var n = document.createElement("thead"); + o.appendChild(n); + var r = document.createElement("tbody"); + o.appendChild(r); + var a = document.createElement("tr"); + a.className = "noprop", + r.appendChild(a); + var s = document.createElement("td"); + return s.innerText = "尚未选择构件", + a.appendChild(s), + e.window({ + title: "属性对比详情", + width: 500, + height: 400, + closeOnEsc: !1, + closeButton: !0, + afterWindowHide: function() {}, + content: i + }) + }, zy = { + AGGREGATION: "AGGREGATION", + SEPARATION: "SEPARATION", + MULTIWINDOW: "MULTIWINDOW" + }, Zy = { + added: "added", + deleted: "deleted", + changed: "changed", + noChanged: "noChanged", + oldChanged: "oldChanged", + newChanged: "newChanged", + oldNoChanged: "oldNoChanged", + newNoChanged: "newNoChanged" + }, Xy = { + addedColor: { + color: 32768, + opacity: 1 + }, + deletedColor: { + color: 16711680, + opacity: 1 + }, + changedColor: { + color: 16753920, + opacity: 1 + } + }, _y = { + ACCOUNT_NO_EXIST: "ACCOUNT_NO_EXIST", + NO_PERMISSION: "NO_PERMISSION", + ON_NETWORK_ERROR: "ON_NETWORK_ERROR", + ON_LOAD_INVALID_COMPARES: "ON_LOAD_INVALID_COMPARES", + ON_LOAD_INVALID_CONTRASTDETAILS: "ON_LOAD_INVALID_CONTRASTDETAILS", + ON_LOAD_INVALID_STATE: "ON_LOAD_INVALID_STATE", + ON_LOAD_ERROR: "ON_LOAD_ERROR" + }, $y = function(A, e) { + var t = this + , i = uh.extend({}, { + host: "https://bos3d.bimwinner.com", + viewport: "", + toolbar: !0, + coloringImmediately: !1, + showPanel: !1 + }, A); + this.host = i.host, + this.coloringImmediately = i.coloringImmediately, + this.domElement = document.getElementById(i.viewport), + this.domElement.style.position = "relative", + this.oldModelKey = "", + this.newModelKey = "", + this.displayModel = e || zy.SEPARATION, + t.oldNoChangedList = [], + t.newNoChangedList = [], + t.oldChangedList = [], + t.newChangedList = [], + t.deletedList = [], + t.addedList = [], + this.useNewUI = Boolean(window.EIMMODELUI); + var o = { + modelCompares: i.showPanel + } + , n = { + modelCompares: i.showPanel + }; + switch (this.displayModel) { + case zy.AGGREGATION: + case zy.SEPARATION: + if (this.firstViewer = new Py(A), + this.secondViewer = this.firstViewer, + t.oldLobibox = new bh, + t.oldLobibox.viewport = document.querySelector("#" + t.firstViewer.viewport), + t.newLobibox = t.oldLobibox, + i.toolbar) { + this.useNewUI ? this.firstTool = new window.EIMMODELUI({ + viewer3D: this.firstViewer, + EIM: window.EIM, + EIMMODEL: window.EIMMODEL + }) : (this.firstTool = new Xd(this.firstViewer), + this.firstTool.createTool()), + this.secondTool = this.firstTool, + this.oldCompareWindow = Wy({ + toolId: "old", + lobibox: t.oldLobibox, + Flag: o + }), + this.newCompareWindow = this.oldCompareWindow, + this.oldContrastDetailsWindow = Jy({ + toolId: "old", + lobibox: t.oldLobibox + }), + this.newContrastDetailsWindow = this.oldContrastDetailsWindow, + this.oldCompareWindow.setPosition({ + left: "", + right: 5, + top: 60 + }), + this.oldContrastDetailsWindow.setPosition({ + left: t.domElement.offsetWidth / 2 + t.domElement.offsetLeft / 2 - 250, + top: 200 + }), + t.oldContrastDetailsWindow.windowHide(); + var r = document.createElement("div"); + r.className = "yj-group", + this.useNewUI ? this.firstTool.plugin.addIcon("topRight", r) : this.firstTool.toolbarTop.appendChild(r); + var a = document.createElement("button"); + a.className = "yj-but", + a.title = "模型对比结果", + a.id = "modelComparesold"; + var s = document.createElement("div"); + s.classList.add("yj-icon"), + s.classList.add("modelCompares-icon"), + a.appendChild(s), + r.appendChild(a), + a.addEventListener("click", (function(A) { + o.modelCompares ? t.oldCompareWindow.windowHide() : (o.modelCompares = !o.modelCompares, + t.oldCompareWindow.windowShow()) + } + )) + } + break; + case zy.MULTIWINDOW: + var l = document.createElement("div"); + l.setAttribute("id", "firstViewer"), + l.style.width = "50%", + l.style.height = "100%", + l.style.float = "left", + this.domElement.appendChild(l); + var c = document.createElement("div"); + if (c.setAttribute("id", "secondViewer"), + c.style.width = "50%", + c.style.height = "100%", + c.style.float = "left", + this.domElement.appendChild(l), + this.domElement.appendChild(c), + this.firstViewer = new Py({ + host: this.host, + viewport: "firstViewer" + }), + this.secondViewer = new Py({ + host: this.host, + viewport: "secondViewer" + }), + t.oldLobibox = new bh, + t.oldLobibox.viewport = document.querySelector("#" + t.firstViewer.viewport), + t.newLobibox = new bh, + t.newLobibox.viewport = document.querySelector("#" + t.secondViewer.viewport), + i.toolbar) { + this.useNewUI ? (this.firstTool = new window.EIMMODELUI({ + viewer3D: this.firstViewer, + EIM: window.EIM, + EIMMODEL: window.EIMMODEL + }), + this.secondTool = new window.EIMMODELUI({ + viewer3D: this.secondViewer, + EIM: window.EIM, + EIMMODEL: window.EIMMODEL + })) : (this.firstTool = new Xd(this.firstViewer), + this.firstTool.createTool(), + this.secondTool = new Xd(this.secondViewer), + this.secondTool.createTool()), + this.oldCompareWindow = Wy({ + toolId: "old", + lobibox: t.oldLobibox, + Flag: o + }), + this.newCompareWindow = Wy({ + toolId: "new", + lobibox: t.newLobibox, + Flag: n + }), + this.oldContrastDetailsWindow = Jy({ + toolId: "old", + lobibox: t.oldLobibox + }), + this.newContrastDetailsWindow = Jy({ + toolId: "new", + lobibox: t.newLobibox + }), + t.oldContrastDetailsWindow.windowHide(), + t.newContrastDetailsWindow.windowHide(), + this.oldContrastDetailsWindow.setTitle("旧-新属性对比详情"), + this.newContrastDetailsWindow.setTitle("新-旧属性对比详情"), + this.oldCompareWindow.setPosition({ + left: "", + right: 5 + t.domElement.offsetWidth / 2 + t.domElement.offsetLeft / 2, + top: 60 + }), + this.oldContrastDetailsWindow.setPosition({ + left: t.domElement.offsetWidth / 4 + t.domElement.offsetLeft / 4 - 250, + top: 200 + }), + this.newCompareWindow.setPosition({ + left: "", + right: 5, + top: 60 + }), + this.newContrastDetailsWindow.setPosition({ + left: t.domElement.offsetWidth / 4 * 3 + t.domElement.offsetLeft / 4 * 3 - 250, + top: 200 + }); + var h = document.createElement("div"); + h.className = "yj-group", + this.useNewUI ? this.firstTool.plugin.addIcon("topRight", h) : this.firstTool.toolbarTop.appendChild(h); + var d = document.createElement("button"); + d.className = "yj-but", + d.title = "模型对比结果", + d.id = "modelComparesold"; + var p = document.createElement("div"); + p.classList.add("yj-icon"), + p.classList.add("modelCompares-icon"), + d.appendChild(p), + h.appendChild(d), + d.addEventListener("click", (function(A) { + o.modelCompares ? t.oldCompareWindow.windowHide() : (o.modelCompares = !o.modelCompares, + t.oldCompareWindow.windowShow()) + } + )); + var g = document.createElement("div"); + g.className = "yj-group", + this.useNewUI ? this.secondTool.plugin.addIcon("topRight", g) : this.secondTool.toolbarTop.appendChild(g); + var u = document.createElement("button"); + u.className = "yj-but", + u.title = "模型对比结果", + u.id = "modelComparesnew"; + var f = document.createElement("div"); + f.classList.add("yj-icon"), + f.classList.add("modelCompares-icon"), + u.appendChild(f), + g.appendChild(u), + u.addEventListener("click", (function(A) { + n.modelCompares ? t.newCompareWindow.windowHide() : (n.modelCompares = !n.modelCompares, + t.newCompareWindow.windowShow()) + } + )) + } + break; + default: + Bh.error("无效的显示模式!") + } + i.showPanel || (t.newCompareWindow && t.newCompareWindow.windowHide(), + t.oldCompareWindow && t.oldCompareWindow.windowHide()), + this.firstViewer.getViewerImpl().modelManager.addEventListener(Rc.ON_LOAD_COMPLETE, (function(A) { + A.modelKey === t.oldModelKey && (t.oldModelLoaded = !0, + t._applyCompareData(), + t._initCompareResultPlane(t.compareData)) + } + )), + this.secondViewer.getViewerImpl().modelManager.addEventListener(Rc.ON_LOAD_COMPLETE, (function(A) { + A.modelKey === t.newModelKey && (t.newModelLoaded = !0, + t._applyCompareData(), + t._initCompareResultPlane(t.compareData)) + } + )) + }; + Object.assign($y.prototype, Ld.prototype), + Object.assign($y.prototype, { + resize: function(A, e) { + switch (this.domElement && (this.domElement.style.height = e + "px", + this.domElement.style.width = A + "px"), + this.displayModel) { + case zy.AGGREGATION: + case zy.SEPARATION: + this.firstViewer.resize(A, e); + break; + case zy.MULTIWINDOW: + this.firstViewer.resize(A / 2, e), + this.secondViewer.resize(A / 2, e); + break; + default: + this.firstViewer.resize(A, e) + } + }, + autoResize: function() { + this.resize(this.getClientWidth(), this.getClientHeight()) + }, + getClientHeight: function() { + return xh.getClientHeight() + }, + getClientWidth: function() { + return xh.getClientWidth() + }, + resetOldScene: function(A) { + this.firstViewer.resetScene(A) + }, + resetNewScene: function(A) { + this.secondViewer.resetScene(A) + }, + resetScene: function(A) { + this.firstViewer.resetScene(A), + this.secondViewer.resetScene(A), + this._applyCompareData() + }, + transparentComponentsByType: function(A) { + var e = this._getDataByType(A); + this.firstViewer.transparentComponentsByKey(e.oldList), + this.secondViewer.transparentComponentsByKey(e.newList) + }, + transparentOtherComponentsByType: function(A) { + var e = this._getDataByType(A); + switch (this.displayModel) { + case zy.AGGREGATION: + case zy.SEPARATION: + this.firstViewer.transparentOtherComponentsByKey([].concat(e.oldList).concat(e.newList)); + break; + case zy.MULTIWINDOW: + this.firstViewer.transparentOtherComponentsByKey(e.oldList), + this.secondViewer.transparentOtherComponentsByKey(e.newList) + } + }, + closeTransparentComponentsByType: function(A) { + var e = this._getDataByType(A); + switch (this.displayModel) { + case zy.AGGREGATION: + case zy.SEPARATION: + this.firstViewer.closeTransparentComponentsByKey([].concat(e.oldList).concat(e.newList)); + break; + case zy.MULTIWINDOW: + this.firstViewer.closeTransparentComponentsByKey(e.oldList), + this.secondViewer.closeTransparentComponentsByKey(e.newList) + } + }, + clearComponentTransparentList: function() { + switch (this.displayModel) { + case zy.AGGREGATION: + case zy.SEPARATION: + this.firstViewer.clearComponentTransparentList(); + break; + case zy.MULTIWINDOW: + this.firstViewer.clearComponentTransparentList(), + this.secondViewer.clearComponentTransparentList() + } + }, + showComponentsByType: function(A) { + var e = this._getDataByType(A); + switch (this.displayModel) { + case zy.AGGREGATION: + case zy.SEPARATION: + this.firstViewer.showComponentsByKey([].concat(e.oldList).concat(e.newList)); + break; + case zy.MULTIWINDOW: + this.firstViewer.showComponentsByKey(e.oldList), + this.secondViewer.showComponentsByKey(e.newList) + } + }, + hideComponentsByType: function(A) { + var e = this._getDataByType(A); + switch (this.displayModel) { + case zy.AGGREGATION: + case zy.SEPARATION: + this.firstViewer.hideComponentsByKey([].concat(e.oldList).concat(e.newList)); + break; + case zy.MULTIWINDOW: + this.firstViewer.hideComponentsByKey(e.oldList), + this.secondViewer.hideComponentsByKey(e.newList) + } + }, + highlightComponentsByType: function(A) { + var e = this._getDataByType(A); + switch (this.displayModel) { + case zy.AGGREGATION: + case zy.SEPARATION: + this.firstViewer.highlightComponentsByKey([].concat(e.oldList).concat(e.newList)); + break; + case zy.MULTIWINDOW: + this.firstViewer.highlightComponentsByKey(e.oldList), + this.secondViewer.highlightComponentsByKey(e.newList) + } + }, + addHighlightComponentsByType: function(A) { + var e = this._getDataByType(A); + switch (this.displayModel) { + case zy.AGGREGATION: + case zy.SEPARATION: + this.firstViewer.addHighlightComponentsByKey([].concat(e.oldList).concat(e.newList)); + break; + case zy.MULTIWINDOW: + this.firstViewer.addHighlightComponentsByKey(e.oldList), + this.secondViewer.addHighlightComponentsByKey(e.newList) + } + }, + closeHighlightComponentsByType: function(A) { + var e = this._getDataByType(A); + switch (this.displayModel) { + case zy.AGGREGATION: + case zy.SEPARATION: + this.firstViewer.closeHighlightComponentsByKey([].concat(e.oldList).concat(e.newList)); + break; + case zy.MULTIWINDOW: + this.firstViewer.closeHighlightComponentsByKey(e.oldList), + this.secondViewer.closeHighlightComponentsByKey(e.newList) + } + }, + getHighlightComponentsKey: function() { + switch (this.displayModel) { + case zy.AGGREGATION: + case zy.SEPARATION: + return this.firstViewer.getHighlightComponentsKey(); + case zy.MULTIWINDOW: + return [].concat(this.firstViewer.getHighlightComponentsKey()).concat(this.secondViewer.getHighlightComponentsKey()); + default: + return [] + } + }, + clearHighlightList: function() { + switch (this.displayModel) { + case zy.AGGREGATION: + case zy.SEPARATION: + this.firstViewer.clearHighlightList(); + break; + case zy.MULTIWINDOW: + this.firstViewer.clearHighlightList(), + this.secondViewer.clearHighlightList() + } + }, + getHighlightComponents: function() { + switch (this.displayModel) { + case zy.AGGREGATION: + case zy.SEPARATION: + return this.firstViewer.getHighlightComponents(); + case zy.MULTIWINDOW: + return [].concat(this.firstViewer.getHighlightComponents()).concat(this.secondViewer.getHighlightComponents()); + default: + return [] + } + }, + colorfulComponentsByType: function(A, e, t) { + var i = this._getDataByType(A); + switch (this.displayModel) { + case zy.AGGREGATION: + case zy.SEPARATION: + this.firstViewer.colorfulComponentsByKey([].concat(i.oldList).concat(i.newList), e, t); + break; + case zy.MULTIWINDOW: + this.firstViewer.colorfulComponentsByKey(i.oldList, e, t), + this.secondViewer.colorfulComponentsByKey(i.newList, e, t) + } + }, + closeColorfulComponentsByType: function(A) { + var e = this._getDataByType(A); + switch (this.displayModel) { + case zy.AGGREGATION: + case zy.SEPARATION: + this.firstViewer.closeColorfulComponentsByKey([].concat(e.oldList).concat(e.newList)); + break; + case zy.MULTIWINDOW: + this.firstViewer.closeColorfulComponentsByKey(e.oldList), + this.secondViewer.closeColorfulComponentsByKey(e.newList) + } + }, + clearColorfulList: function() { + switch (this.displayModel) { + case zy.AGGREGATION: + case zy.SEPARATION: + this.firstViewer.clearColorfulList(); + break; + case zy.MULTIWINDOW: + this.firstViewer.clearColorfulList(), + this.secondViewer.clearColorfulList() + } + }, + wireFrameComponentsByType: function(A) { + var e = this._getDataByType(A); + switch (this.displayModel) { + case zy.AGGREGATION: + case zy.SEPARATION: + this.firstViewer.wireFrameComponentsByKey([].concat(e.oldList).concat(e.newList)); + break; + case zy.MULTIWINDOW: + this.firstViewer.wireFrameComponentsByKey(e.oldList), + this.secondViewer.wireFrameComponentsByKey(e.newList) + } + }, + closeWireFrameComponentsByType: function(A) { + var e = this._getDataByType(A); + switch (this.displayModel) { + case zy.AGGREGATION: + case zy.SEPARATION: + this.firstViewer.closeWireFrameComponentsByKey([].concat(e.oldList).concat(e.newList)); + break; + case zy.MULTIWINDOW: + this.firstViewer.closeWireFrameComponentsByKey(e.oldList), + this.secondViewer.closeWireFrameComponentsByKey(e.newList) + } + }, + clearWireframeList: function() { + switch (this.displayModel) { + case zy.AGGREGATION: + case zy.SEPARATION: + this.firstViewer.clearWireframeList(); + break; + case zy.MULTIWINDOW: + this.firstViewer.clearWireframeList(), + this.secondViewer.clearWireframeList() + } + }, + isolateComponentsByType: function(A, e) { + var t = this._getDataByType(A); + switch (this.displayModel) { + case zy.AGGREGATION: + case zy.SEPARATION: + this.firstViewer.isolateComponentsByKey([].concat(t.oldList).concat(t.newList), e); + break; + case zy.MULTIWINDOW: + this.firstViewer.isolateComponentsByKey(t.oldList, e), + this.secondViewer.isolateComponentsByKey(t.newList, e) + } + }, + closeIsolateComponentsByType: function(A) { + var e = this._getDataByType(A); + switch (this.displayModel) { + case zy.AGGREGATION: + case zy.SEPARATION: + this.firstViewer.closeIsolateComponentsByKey([].concat(e.oldList).concat(e.newList)); + break; + case zy.MULTIWINDOW: + this.firstViewer.closeIsolateComponentsByKey(e.oldList), + this.secondViewer.closeIsolateComponentsByKey(e.newList) + } + }, + clearIsolation: function() { + switch (this.displayModel) { + case zy.AGGREGATION: + case zy.SEPARATION: + this.firstViewer.clearIsolation(); + break; + case zy.MULTIWINDOW: + this.firstViewer.clearIsolation(), + this.secondViewer.clearIsolation() + } + }, + getAddedList: function() { + return this.addedList + }, + getDeletedList: function() { + return this.deletedList + }, + getChangedList: function() { + return [].concat(this.oldChangedList).concat(this.newChangedList) + }, + getNoChangedList: function() { + return [].concat(this.oldNoChangedList).concat(this.newNoChangedList) + }, + getNewChangedList: function() { + return this.newChangedList + }, + getOldChangedList: function() { + return this.oldChangedList + }, + getNewNoChangedList: function() { + return this.newNoChangedList + }, + getOldNoChangedList: function() { + return this.oldNoChangedList + }, + setAddedColor: function(A, e) { + Xy.addedColor.color = A, + Xy.addedColor.opacity = e + }, + setChangedColor: function(A, e) { + Xy.changedColor.color = A, + Xy.changedColor.opacity = e + }, + setDeletedColor: function(A, e) { + Xy.deletedColor.color = A, + Xy.deletedColor.opacity = e + }, + getAddedColor: function() { + return Xy.addedColor + }, + getChangedColor: function() { + return Xy.changedColor + }, + getDeletedColor: function() { + return Xy.deletedColor + }, + getOldViewer: function() { + return this.firstViewer + }, + getNewViewer: function() { + return this.secondViewer + }, + getOldToolbar: function() { + return this.firstTool + }, + getNewToolbar: function() { + return this.secondTool + }, + getComponentAttribute: function(A, e) { + var t = this.firstViewer.viewerImpl.getModelByComponentKey(A) + , i = this.secondViewer.viewerImpl.getModelByComponentKey(A); + t ? this.firstViewer.getComponentsAttributeByKey(A, (function(A) { + A && e(A.attribute) + } + )) : i && this.secondViewer.getComponentsAttributeByKey(A, (function(A) { + A && e(A.attribute) + } + )) + }, + getContrastDetails: function(A, e, t) { + var i = this; + _d({ + type: "GET", + url: this.host + "/api/" + this.projectKey + "/compares/changes?compareKey=" + this.compareKey + "&newComponentKey=" + e + "&oldComponentKey=" + A, + headers: { + Authorization: this.accessToken + }, + success: function(A) { + var e = {}; + if ("string" == typeof A) + try { + e = JSON.parse(A) + } catch (A) { + return void i.dispatchEvent({ + type: _y.ON_LOAD_INVALID_CONTRASTDETAILS, + compareKey: i.compareKey + }) + } + else + e = A; + e && "SUCCESS" === e.code ? t && t(e.data) : (Bh.log(i.compareKey, "获取对比详情出错! ", e.message), + i.dispatchEvent({ + type: _y.ON_LOAD_ERROR, + compareKey: i.compareKey, + code: e.code, + message: e.message + })) + }, + error: function(A, e) { + switch (A) { + case 401: + i.dispatchEvent({ + type: _y.ACCOUNT_NO_EXIST, + compareKey: i.compareKey, + data: e + }); + break; + case 403: + i.dispatchEvent({ + type: _y.NO_PERMISSION, + compareKey: i.compareKey, + data: e + }); + break; + default: + i.dispatchEvent({ + type: _y.ON_NETWORK_ERROR, + compareKey: i.compareKey, + data: A + }) + } + } + }) + }, + showOldContrastDetails: (qy = "", + jy = document.getElementById("tab-compare-properties-old"), + Hy = function(A, e, t, i, o) { + var n = document.createElement("tr"); + i.parentNode.appendChild(n), + n.classList.add(o); + var r = document.createElement("td"); + r.innerText = A || "", + n.appendChild(r); + var a = document.createElement("td"); + a.innerText = e || "", + n.appendChild(a); + var s = document.createElement("td"); + s.innerText = t || "", + n.appendChild(s) + } + , + Yy = function(A, e, t, i) { + var o = document.createElement("tr"); + o.className = "sx-active", + jy.querySelector("table tbody").appendChild(o); + var n = document.createElement("td"); + for (var r in n.colSpan = 2, + n.style.fontSize = "14px", + o.appendChild(n), + n.appendChild(document.createElement("b")), + n.firstElementChild.innerHTML = A, + e) + if (e.hasOwnProperty(r)) { + if (!(t && t[r] || i && i[r])) { + Hy(r, e[r], e[r], o, "compares_noChanged"); + continue + } + if (t && t[r] && i && i[r]) { + Hy(r, e[r], i[r], o, "compares_changed"), + delete i[r]; + continue + } + if ((!t || !t[r]) && i && i[r]) { + Hy(r, "", i[r], o, "compares_added"), + delete i[r]; + continue + } + !t || !t[r] || i && i[r] || Hy(r, e[r], "", o, "compares_deleted") + } + for (var a in i) + i.hasOwnProperty(a) && (void 0 !== e[a] ? Hy(a, e[a], i[a], o, "compares_changed") : Hy(a, "", i[a], o, "compares_added")) + } + , + function(A) { + var e = this; + if ((jy = document.querySelector("#tab-compare-properties-old")) && (e.showOldContrastDetailsWindow(), + A !== qy)) { + if (void 0 === A) { + var t = jy.querySelectorAll("table tbody tr"); + jy.querySelector("table tbody").removeChild(t[0]), + jy.querySelector("table tbody").innerHTML = ""; + var i = document.createElement("tr"); + i.className = "noprop"; + var o = document.createElement("td"); + return o.setAttribute("colspan", "2"), + o.innerHTML = "未选中构件", + i.appendChild(o), + jy.querySelector("table tbody").appendChild(i), + void (qy = A) + } + qy = A; + var n = jy.querySelectorAll("table tbody tr"); + jy.querySelector("table tbody").removeChild(n[0]), + e.getComponentAttribute(qy, (function(A) { + if (jy.querySelector("table tbody").innerHTML = "", + null === A) { + var t = document.createElement("tr"); + t.className = "noprop"; + var i = document.createElement("td"); + return i.innerHTML = "没有属性", + t.appendChild(i), + void jy.querySelector("table tbody").appendChild(t) + } + if (void 0 === A) { + var o = document.createElement("tr"); + o.className = "noprop"; + var n = document.createElement("td"); + return n.innerHTML = "属性加载失败", + o.appendChild(n), + void jy.querySelector("table tbody").appendChild(o) + } + var r = qy.indexOf("_"); + if (-1 !== r) { + var a = e.newModelKey + qy.slice(r); + e.getContrastDetails(qy, a, (function(e) { + var t = e.old.attribute + , i = e.new.attribute + , o = document.createElement("tr"); + o.className = "noprop"; + var n = document.createElement("th"); + o.appendChild(n); + var r = document.createElement("span"); + r.classList.add("value"), + r.classList.add("nonEditable"), + r.innerHTML = "属性名", + n.appendChild(r); + var a = document.createElement("th"); + o.appendChild(a); + var s = document.createElement("span"); + s.classList.add("value"), + s.classList.add("nonEditable"), + s.innerHTML = "修改前", + a.appendChild(s); + var l = document.createElement("th"); + o.appendChild(l); + var c = document.createElement("span"); + c.classList.add("value"), + c.classList.add("nonEditable"), + c.innerHTML = "修改后", + l.appendChild(c), + jy.querySelector("table tbody").appendChild(o); + var h = A; + for (var d in h) + "object" === lc(h[d]) ? (Yy(d, h[d], t[d], i[d]), + delete i[d]) : "string" == typeof h[d] && Hy(d, h[d], i[d], o); + for (var p in i) + "object" === lc(h[p]) ? Yy(p, h[p], t[p], i[p]) : "string" == typeof h[p] && Hy(p, h[p], i[p], o) + } + )) + } + } + )) + } + } + ), + showNewContrastDetails: function() { + var A = "" + , e = document.getElementById("tab-compare-properties-new") + , t = function(A, e, t, i, o) { + var n = document.createElement("tr"); + i.parentNode.appendChild(n), + n.classList.add(o); + var r = document.createElement("td"); + r.innerText = A || "", + n.appendChild(r); + var a = document.createElement("td"); + a.innerText = e || "", + n.appendChild(a); + var s = document.createElement("td"); + s.innerText = t || "", + n.appendChild(s) + } + , i = function(A, i, o, n) { + var r = document.createElement("tr"); + r.className = "sx-active", + e.querySelector("table tbody").appendChild(r); + var a = document.createElement("td"); + for (var s in a.colSpan = 2, + a.style.fontSize = "14px", + r.appendChild(a), + a.appendChild(document.createElement("b")), + a.firstElementChild.innerHTML = A, + i) + if (i.hasOwnProperty(s)) { + if (!(o && o[s] || n && n[s])) { + t(s, i[s], i[s], r, "compares_noChanged"); + continue + } + if (o && o[s] && n && n[s]) { + t(s, i[s], n[s], r, "compares_changed"), + delete n[s]; + continue + } + if ((!o || !o[s]) && n && n[s]) { + t(s, "", n[s], r, "compares_added"), + delete n[s]; + continue + } + !o || !o[s] || n && n[s] || t(s, i[s], "", r, "compares_deleted") + } + for (var l in n) + n.hasOwnProperty(l) && (void 0 !== i[l] ? t(l, i[l], n[l], r, "compares_changed") : t(l, "", n[l], r, "compares_added")) + }; + return function(o) { + var n = this; + if ((e = document.querySelector("#tab-compare-properties-new")) && (n.showNewContrastDetailsWindow(), + o !== A)) { + if (void 0 === o) { + var r = e.querySelectorAll("table tbody tr"); + e.querySelector("table tbody").removeChild(r[0]), + e.querySelector("table tbody").innerHTML = ""; + var a = document.createElement("tr"); + a.className = "noprop"; + var s = document.createElement("td"); + return s.setAttribute("colspan", "2"), + s.innerHTML = "未选中构件", + a.appendChild(s), + e.querySelector("table tbody").appendChild(a), + void (A = o) + } + A = o; + var l = e.querySelectorAll("table tbody tr"); + e.querySelector("table tbody").removeChild(l[0]), + n.getComponentAttribute(A, (function(o) { + if (e.querySelector("table tbody").innerHTML = "", + null === o) { + var r = document.createElement("tr"); + r.className = "noprop"; + var a = document.createElement("td"); + return a.innerHTML = "没有属性", + r.appendChild(a), + void e.querySelector("table tbody").appendChild(r) + } + if (void 0 === o) { + var s = document.createElement("tr"); + s.className = "noprop"; + var l = document.createElement("td"); + return l.innerHTML = "属性加载失败", + s.appendChild(l), + void e.querySelector("table tbody").appendChild(s) + } + var c = A.indexOf("_"); + if (-1 !== c) { + var h = n.oldModelKey + A.slice(c); + n.getContrastDetails(h, A, (function(A) { + var n = A.new.attribute + , r = A.old.attribute + , a = document.createElement("tr"); + a.className = "noprop"; + var s = document.createElement("th"); + a.appendChild(s); + var l = document.createElement("span"); + l.classList.add("value"), + l.classList.add("nonEditable"), + l.innerHTML = "属性名", + s.appendChild(l); + var c = document.createElement("th"); + a.appendChild(c); + var h = document.createElement("span"); + h.classList.add("value"), + h.classList.add("nonEditable"), + h.innerHTML = "修改前", + c.appendChild(h); + var d = document.createElement("th"); + a.appendChild(d); + var p = document.createElement("span"); + p.classList.add("value"), + p.classList.add("nonEditable"), + p.innerHTML = "修改后", + d.appendChild(p), + e.querySelector("table tbody").appendChild(a); + var g = o; + for (var u in g) + "object" === lc(g[u]) ? (i(u, g[u], n[u], r[u]), + delete r[u]) : "string" == typeof g[u] && t(u, g[u], r[u], a); + for (var f in r) + "object" === lc(g[f]) ? i(f, g[f], n[f], r[f]) : "string" == typeof g[f] && t(f, g[f], r[f], a) + } + )) + } + } + )) + } + } + }(), + showOldContrastDetailsWindow: function() { + this.oldContrastDetailsWindow && this.oldContrastDetailsWindow.windowShow && this.oldContrastDetailsWindow.windowShow() + }, + showNewContrastDetailsWindow: function() { + this.newContrastDetailsWindow && this.newContrastDetailsWindow.windowShow && this.newContrastDetailsWindow.windowShow() + }, + hideOldContrastDetailsWindow: function() { + this.oldContrastDetailsWindow && this.oldContrastDetailsWindow.windowHide && this.oldContrastDetailsWindow.windowHide() + }, + hideNewContrastDetailsWindow: function() { + this.newContrastDetailsWindow && this.newContrastDetailsWindow.windowHide() && this.newContrastDetailsWindow.windowHide() + }, + showContrastDetailsWindow: function() { + this.showOldContrastDetailsWindow(), + this.showNewContrastDetailsWindow() + }, + hideContrastDetailsWindow: function() { + this.hideOldContrastDetailsWindow(), + this.hideNewContrastDetailsWindow() + }, + showOldCompareWindow: function() { + this.oldCompareWindow && this.oldCompareWindow.windowShow && this.oldCompareWindow.windowShow() + }, + showNewCompareWindow: function() { + this.newCompareWindow && this.newCompareWindow.windowShow && this.newCompareWindow.windowShow() + }, + hideOldCompareWindow: function() { + this.oldCompareWindow && this.oldCompareWindow.windowHide && this.oldCompareWindow.windowHide() + }, + hideNewCompareWindow: function() { + this.newCompareWindow && this.newCompareWindow.windowHide() && this.newCompareWindow.windowHide() + }, + showCompareWindow: function() { + this.showOldCompareWindow(), + this.showNewCompareWindow() + }, + hideCompareWindow: function() { + this.hideOldCompareWindow(), + this.hideNewCompareWindow() + } + }), + $y.prototype.addView = function(A, e, t) { + var i = this; + this.compareKey = A, + this.projectKey = e, + this.accessToken = t || "", + _d({ + type: "GET", + url: this.host + "/api/" + e + "/compares/status?compareKey=" + A, + headers: { + Authorization: this.accessToken + }, + success: i._loadSuccess.bind(i), + error: function(e, t) { + switch (e) { + case 401: + i.dispatchEvent({ + type: _y.ACCOUNT_NO_EXIST, + compareKey: A, + data: t + }); + break; + case 403: + i.dispatchEvent({ + type: _y.NO_PERMISSION, + compareKey: A, + data: t + }); + break; + default: + i.dispatchEvent({ + type: _y.ON_NETWORK_ERROR, + compareKey: A, + data: e + }) + } + } + }), + i._loadCompares() + } + , + $y.prototype._loadCompares = function() { + var A = this; + _d({ + type: "GET", + url: this.host + "/api/" + this.projectKey + "/compares?compareKey=" + this.compareKey, + headers: { + Authorization: this.accessToken + }, + success: A._loadComparesSuccess.bind(A), + error: function(e, t) { + switch (e) { + case 401: + A.dispatchEvent({ + type: _y.ACCOUNT_NO_EXIST, + compareKey: A.compareKey, + data: t + }); + break; + case 403: + A.dispatchEvent({ + type: _y.NO_PERMISSION, + compareKey: A.compareKey, + data: t + }); + break; + default: + A.dispatchEvent({ + type: _y.ON_NETWORK_ERROR, + compareKey: A.compareKey, + data: e + }) + } + } + }) + } + , + $y.prototype._loadComparesSuccess = function(A) { + var e = {}; + if ("string" == typeof A) + try { + e = JSON.parse(A) + } catch (A) { + return void this.dispatchEvent({ + type: _y.ON_LOAD_INVALID_COMPARES, + compareKey: this.compareKey + }) + } + else + e = A; + if (e && "SUCCESS" === e.code) { + this.compareData = e.data, + this.compareDataLoaded = !0; + for (var t = [], i = [], o = [], n = [], r = null, a = 0, s = this.compareData.changed.categories.length; s > a; a += 1) + for (var l = 0, c = this.compareData.changed.categories[a].elements.length; c > l; l += 1) + t.push((r = this.compareData.changed.categories[a].elements[l]).oldComponentKey), + i.push(r.newComponentKey); + for (var h = 0, d = this.compareData.added.categories.length; d > h; h += 1) + for (var p = 0, g = this.compareData.added.categories[h].elements.length; g > p; p += 1) + o.push((r = this.compareData.added.categories[h].elements[p]).componentKey); + for (var u = 0, f = this.compareData.deleted.categories.length; f > u; u += 1) + for (var m = 0, C = this.compareData.deleted.categories[u].elements.length; C > m; m += 1) + n.push((r = this.compareData.deleted.categories[u].elements[m]).componentKey); + this.oldChangedList = t, + this.newChangedList = i, + this.deletedList = n, + this.addedList = o, + this._initCompareResultPlane(e.data), + this._applyCompareData() + } else + Bh.log(this.compareKey, "config load error! ", e.message), + this.dispatchEvent({ + type: _y.ON_LOAD_ERROR, + compareKey: this.compareKey, + code: e.code, + message: e.message + }) + } + , + $y.prototype._loadSuccess = function(A) { + var e = {}; + if ("string" == typeof A) + try { + e = JSON.parse(A) + } catch (A) { + return void this.dispatchEvent({ + type: _y.ON_LOAD_INVALID_STATE, + compareKey: this.compareKey + }) + } + else + e = A; + if (e && "SUCCESS" === e.code) + if ("1" !== e.data.status) + ; + else + switch (this.oldModelKey = e.data.old, + this.newModelKey = e.data.new, + this.name = e.data.name, + this.displayModel) { + case zy.AGGREGATION: + case zy.SEPARATION: + this.firstViewer.addView(this.oldModelKey, this.projectKey, this.accessToken), + this.firstViewer.addView(this.newModelKey, this.projectKey, this.accessToken); + break; + case zy.MULTIWINDOW: + this.firstViewer.addView(this.oldModelKey, this.projectKey, this.accessToken), + this.secondViewer.addView(this.newModelKey, this.projectKey, this.accessToken); + break; + default: + this.firstViewer.addView(this.oldModelKey, this.projectKey, this.accessToken), + this.firstViewer.addView(this.newModelKey, this.projectKey, this.accessToken) + } + else + Bh.log(this.compareKey, "config load error! ", e.message), + this.dispatchEvent({ + type: _y.ON_LOAD_ERROR, + compareKey: this.compareKey, + code: e.code, + message: e.message + }) + } + , + $y.prototype._applyCompareData = function() { + if (this.oldModelLoaded && this.newModelLoaded && this.compareDataLoaded) { + var A = this.firstViewer.getViewerImpl().getModel(this.oldModelKey) + , e = null + , t = null; + if (A) { + var i = A.getComponentlist(); + e = this.firstViewer.getBoxByComponentsKey(i); + for (var o = 0, n = this.deletedList.length; n > o; o += 1) + i.remove(this.deletedList[o]); + for (var r = 0, a = this.oldChangedList.length; a > r; r += 1) + i.remove(this.oldChangedList[r]); + this.oldNoChangedList = i + } + var s = this.secondViewer.getViewerImpl().getModel(this.newModelKey); + if (s) { + var l = s.getComponentlist(); + t = this.firstViewer.getBoxByComponentsKey(l); + for (var c = 0, h = this.addedList.length; h > c; c += 1) + l.remove(this.addedList[c]); + for (var d = 0, p = this.newChangedList.length; p > d; d += 1) + l.remove(this.newChangedList[d]); + this.newNoChangedList = l + } + if (this.displayModel === zy.SEPARATION && !e.isEmpty() && !t.isEmpty()) { + var g = e.getSize() + , u = t.getSize() + , f = 1 + , m = 1 + , C = 0; + f = u.x > g.x ? g.x : u.x, + m = u.y > g.y ? g.y : u.y; + var y = s.getModelMatrix() + , v = this.firstViewer.viewerImpl.modelManager.scene.getBoundingBoxWorld(); + f > m ? (y.elements[14] += C = 1.5 * m, + v.min.y -= C / 2, + v.max.y += C / 2) : (y.elements[13] += C = 1.5 * f, + v.min.x -= C / 2, + v.max.x += C / 2), + s.setModelMatrix(y), + this.firstViewer.viewerImpl.modelManager.scene.setBoundingBoxWorld(v), + this.firstViewer.adaptiveSize() + } + this.coloringImmediately && (this.firstViewer.colorfulComponentsByKey(this.deletedList, Xy.deletedColor.color, Xy.deletedColor.opacity), + this.secondViewer.colorfulComponentsByKey(this.addedList, Xy.addedColor.color, Xy.addedColor.opacity), + this.firstViewer.colorfulComponentsByKey(this.oldChangedList, Xy.changedColor.color, Xy.changedColor.opacity), + this.secondViewer.colorfulComponentsByKey(this.newChangedList, Xy.changedColor.color, Xy.changedColor.opacity)) + } + } + , + $y.prototype._getDataByType = function(A) { + var e = [] + , t = []; + switch (A) { + case Zy.added: + t = this.addedList; + break; + case Zy.deleted: + e = this.deletedList; + break; + case Zy.changed: + e = this.oldChangedList, + t = this.newChangedList; + break; + case Zy.noChanged: + e = this.oldNoChangedList, + t = this.newNoChangedList; + break; + case Zy.oldChanged: + e = this.oldChangedList; + break; + case Zy.newChanged: + t = this.newChangedList; + break; + case Zy.oldNoChanged: + e = this.oldNoChangedList; + break; + case Zy.newNoChanged: + t = this.newNoChangedList + } + return { + oldList: e, + newList: t + } + } + , + $y.prototype._addProperty = function(A, e, t) { + var i = this + , o = document.createElement("tr"); + o.classList.add("compares_list_tr"); + var n = document.createElement("td"); + n.innerText = A || "", + o.appendChild(n); + var r = document.createElement("td"); + if (r.innerText = e || "", + o.appendChild(r), + void 0 !== t) { + var a = document.createElement("td") + , s = document.createElement("a"); + s.classList.add("showDetails"), + t ? (s.innerHTML = "查看详情", + s.addEventListener("click", (function(A) { + A.stopPropagation(); + for (var e = A.target.parentNode.parentNode.oldKey, t = A.target.parentNode.parentNode.newKey, o = 0, n = A.path.length; n > o; o += 1) { + if ("tab-compare-old" === A.path[o].id) { + i.showOldContrastDetails(e); + break + } + if ("tab-compare-new" === A.path[o].id) { + i.showNewContrastDetails(t); + break + } + } + } + ))) : s.innerHTML = "无", + a.appendChild(s), + o.appendChild(a) + } + return o + } + , + $y.prototype._initCompareResultPlane = function(A) { + if (this.oldModelLoaded && this.newModelLoaded && this.compareDataLoaded) + switch (this.displayModel) { + case zy.AGGREGATION: + case zy.SEPARATION: + var e = document.getElementById("tab-compare-old"); + if (!e) + return; + this._createPanel(e, A); + break; + case zy.MULTIWINDOW: + var t = document.getElementById("tab-compare-old"); + if (!t) + return; + this._createInversionPanel(t, A); + var i = document.getElementById("tab-compare-new"); + if (!i) + return; + this._createPanel(i, A) + } + } + , + $y.prototype._createPanel = function(A, e) { + var t = this; + if (A) { + var i = document.createElement("div"); + i.classList.add("compares_list_body"), + A.appendChild(i); + var o = document.createElement("div"); + o.classList.add("compares_list_title"), + o.innerText = "新增构件列表(" + t.addedList.length + ")", + o.addEventListener("click", (function(A) { + for (var e = A.target.parentNode.querySelectorAll("tr"), i = [], o = 0, n = e.length; n > o; o += 1) + e[o].newKey && i.push(e[o].newKey); + t.secondViewer.adaptiveSizeByKey(i), + t.secondViewer.clearColorfulList(), + t.secondViewer.clearTransparentList(), + t.secondViewer.transparentOtherComponentsByKey(i), + t.secondViewer.colorfulComponentsByKey(i, Xy.addedColor.color, Xy.addedColor.opacity) + } + )), + i.appendChild(o); + var n = document.createElement("table"); + n.classList.add("sx-table"), + n.classList.add("compares_list_table"), + n.classList.add("table-no-top"), + i.appendChild(n); + var r = document.createElement("thead"); + n.appendChild(r); + var a = document.createElement("tbody"); + n.appendChild(a); + var s = document.createElement("tr"); + s.style.backgroundColor = "rgba(0, 128, 0, 0.8)", + s.className = "noprop"; + var l = document.createElement("th"); + s.appendChild(l); + var c = document.createElement("span"); + c.classList.add("value"), + c.classList.add("nonEditable"), + c.innerHTML = "名称", + l.appendChild(c); + var h = document.createElement("th"); + s.appendChild(h); + var d = document.createElement("span"); + d.classList.add("value"), + d.classList.add("nonEditable"), + d.innerHTML = "类型", + h.appendChild(d), + r.appendChild(s); + for (var p = 0, g = t.addedList.length; g > p; p += 1) { + var u = t.secondViewer.getComponentsByKey(t.addedList[p]); + if (u && u[0] && u[0][t.addedList[p]] && u[0][t.addedList[p]][0]) { + var f = t._addProperty(u[0][t.addedList[p]][0].name, u[0][t.addedList[p]][0].type); + f.oldKey = "", + f.newKey = t.addedList[p], + f.addEventListener("click", (function(A) { + var e = A.target.parentNode.newKey; + e && (t.secondViewer.adaptiveSizeByKey(e), + t.secondViewer.clearColorfulList(), + t.secondViewer.clearTransparentList(), + t.secondViewer.transparentOtherComponentsByKey(e), + t.secondViewer.colorfulComponentsByKey(e, Xy.addedColor.color, Xy.addedColor.opacity)) + } + )), + a.appendChild(f) + } + } + var m = t.oldChangedList + , C = t.newChangedList + , y = document.createElement("div"); + y.classList.add("compares_list_body"), + A.appendChild(y); + var v = document.createElement("div"); + v.classList.add("compares_list_title"), + v.innerText = "变更构件列表(" + m.length + ")", + v.addEventListener("click", (function(A) { + for (var e = A.target.parentNode.querySelectorAll("tr"), i = [], o = [], n = 0, r = e.length; r > n; n += 1) + e[n].oldKey && o.push(e[n].oldKey), + e[n].newKey && i.push(e[n].newKey); + switch (t.displayModel) { + case zy.AGGREGATION: + case zy.SEPARATION: + t.secondViewer.adaptiveSizeByKey(i.concat(o)), + t.secondViewer.clearColorfulList(), + t.secondViewer.clearTransparentList(), + t.secondViewer.transparentOtherComponentsByKey(i.concat(o)), + t.secondViewer.colorfulComponentsByKey(i.concat(o), Xy.changedColor.color, Xy.changedColor.opacity); + break; + case zy.MULTIWINDOW: + t.firstViewer.adaptiveSizeByKey(o), + t.firstViewer.clearColorfulList(), + t.firstViewer.clearTransparentList(), + t.firstViewer.transparentOtherComponentsByKey(o), + t.firstViewer.colorfulComponentsByKey(o, Xy.changedColor.color, Xy.changedColor.opacity), + t.secondViewer.adaptiveSizeByKey(i), + t.secondViewer.clearColorfulList(), + t.secondViewer.clearTransparentList(), + t.secondViewer.transparentOtherComponentsByKey(i), + t.secondViewer.colorfulComponentsByKey(i, Xy.changedColor.color, Xy.changedColor.opacity) + } + } + )), + y.appendChild(v); + var I = document.createElement("table"); + I.classList.add("sx-table"), + I.classList.add("compares_list_table"), + I.classList.add("table-no-top"), + y.appendChild(I); + var E = document.createElement("thead"); + I.appendChild(E); + var B = document.createElement("tbody"); + I.appendChild(B); + var x = document.createElement("tr"); + x.style.backgroundColor = "rgba(255, 165, 0, 0.8)", + x.className = "noprop"; + var S = document.createElement("th"); + x.appendChild(S); + var w = document.createElement("span"); + w.classList.add("value"), + w.classList.add("nonEditable"), + w.innerHTML = "名称", + S.appendChild(w); + var M = document.createElement("th"); + x.appendChild(M); + var b = document.createElement("span"); + b.classList.add("value"), + b.classList.add("nonEditable"), + b.innerHTML = "类型", + M.appendChild(b); + var U = document.createElement("th"); + x.appendChild(U); + var F = document.createElement("span"); + F.classList.add("value"), + F.classList.add("nonEditable"), + F.innerHTML = "操作", + U.appendChild(F), + E.appendChild(x); + for (var K = 0, Q = C.length; Q > K; K += 1) { + var R = t.secondViewer.getComponentsByKey(C[K]); + if (R && R[0] && R[0][C[K]] && R[0][C[K]][0]) { + var T = t._addProperty(R[0][C[K]][0].name, R[0][C[K]][0].type, "geometry" !== C[K].type); + T.oldKey = m[K], + T.newKey = C[K], + T.addEventListener("click", (function(A) { + var e = A.target.parentNode.oldKey + , i = A.target.parentNode.newKey; + if (e && i) + switch (t.displayModel) { + case zy.AGGREGATION: + case zy.SEPARATION: + t.secondViewer.adaptiveSizeByKey([e, i]), + t.secondViewer.clearColorfulList(), + t.secondViewer.clearTransparentList(), + t.secondViewer.transparentOtherComponentsByKey([e, i]), + t.secondViewer.colorfulComponentsByKey([e, i], Xy.changedColor.color, Xy.changedColor.opacity); + break; + case zy.MULTIWINDOW: + t.firstViewer.adaptiveSizeByKey(e), + t.firstViewer.clearColorfulList(), + t.firstViewer.clearTransparentList(), + t.firstViewer.transparentOtherComponentsByKey(e), + t.firstViewer.colorfulComponentsByKey(e, Xy.changedColor.color, Xy.changedColor.opacity), + t.secondViewer.adaptiveSizeByKey(i), + t.secondViewer.clearColorfulList(), + t.secondViewer.clearTransparentList(), + t.secondViewer.transparentOtherComponentsByKey(i), + t.secondViewer.colorfulComponentsByKey(i, Xy.changedColor.color, Xy.changedColor.opacity) + } + } + )), + B.appendChild(T) + } + } + var k = document.createElement("div"); + k.classList.add("compares_list_body"), + A.appendChild(k); + var D = document.createElement("div"); + D.classList.add("compares_list_title"), + D.innerText = "移除构件列表(" + t.deletedList.length + ")", + D.addEventListener("click", (function(A) { + for (var e = A.target.parentNode.querySelectorAll("tr"), i = [], o = 0, n = e.length; n > o; o += 1) + e[o].oldKey && i.push(e[o].oldKey); + t.secondViewer.adaptiveSizeByKey(i), + t.secondViewer.clearColorfulList(), + t.secondViewer.clearTransparentList(), + t.secondViewer.transparentOtherComponentsByKey(i), + t.secondViewer.colorfulComponentsByKey(i, Xy.deletedColor.color, Xy.deletedColor.opacity) + } + )), + k.appendChild(D); + var L = document.createElement("table"); + L.classList.add("sx-table"), + L.classList.add("compares_list_table"), + L.classList.add("table-no-top"), + k.appendChild(L); + var N = document.createElement("thead"); + L.appendChild(N); + var O = document.createElement("tbody"); + L.appendChild(O); + var V = document.createElement("tr"); + V.style.backgroundColor = "rgba(255, 0, 0, 0.8)", + V.className = "noprop"; + var G = document.createElement("th"); + V.appendChild(G); + var P = document.createElement("span"); + P.classList.add("value"), + P.classList.add("nonEditable"), + P.innerHTML = "名称", + G.appendChild(P); + var q = document.createElement("th"); + V.appendChild(q); + var j = document.createElement("span"); + j.classList.add("value"), + j.classList.add("nonEditable"), + j.innerHTML = "类型", + q.appendChild(j), + N.appendChild(V); + for (var H = 0, Y = t.deletedList.length; Y > H; H += 1) { + var W = t.firstViewer.getComponentsByKey(t.deletedList[H]); + if (W && W[0] && W[0][t.deletedList[H]] && W[0][t.deletedList[H]][0]) { + var J = t._addProperty(W[0][t.deletedList[H]][0].name, W[0][t.deletedList[H]][0].type); + J.oldKey = t.deletedList[H], + J.newKey = "", + J.addEventListener("click", (function(A) { + var e = A.target.parentNode.oldKey; + e && (t.firstViewer.adaptiveSizeByKey(e), + t.firstViewer.clearColorfulList(), + t.firstViewer.clearTransparentList(), + t.firstViewer.transparentOtherComponentsByKey(e), + t.firstViewer.colorfulComponentsByKey(e, Xy.deletedColor.color, Xy.deletedColor.opacity)) + } + )), + O.appendChild(J) + } + } + } + } + , + $y.prototype._createInversionPanel = function(A, e) { + var t = this; + if (A) { + var i = t.deletedList + , o = t.addedList + , n = document.createElement("div"); + n.classList.add("compares_list_body"), + A.appendChild(n); + var r = document.createElement("div"); + r.classList.add("compares_list_title"), + r.innerText = "新增构件列表(" + i.length + ")", + r.addEventListener("click", (function(A) { + for (var e = A.target.parentNode.querySelectorAll("tr"), i = [], o = 0, n = e.length; n > o; o += 1) + e[o].newKey && i.push(e[o].newKey); + t.firstViewer.adaptiveSizeByKey(i), + t.firstViewer.clearColorfulList(), + t.firstViewer.clearTransparentList(), + t.firstViewer.transparentOtherComponentsByKey(i), + t.firstViewer.colorfulComponentsByKey(i, Xy.addedColor.color, Xy.addedColor.opacity) + } + )), + n.appendChild(r); + var a = document.createElement("table"); + a.classList.add("sx-table"), + a.classList.add("compares_list_table"), + a.classList.add("table-no-top"), + n.appendChild(a); + var s = document.createElement("thead"); + a.appendChild(s); + var l = document.createElement("tbody"); + a.appendChild(l); + var c = document.createElement("tr"); + c.style.backgroundColor = "rgba(0, 128, 0, 0.8)", + c.className = "noprop"; + var h = document.createElement("th"); + c.appendChild(h); + var d = document.createElement("span"); + d.classList.add("value"), + d.classList.add("nonEditable"), + d.innerHTML = "名称", + h.appendChild(d); + var p = document.createElement("th"); + c.appendChild(p); + var g = document.createElement("span"); + g.classList.add("value"), + g.classList.add("nonEditable"), + g.innerHTML = "类型", + p.appendChild(g), + s.appendChild(c); + for (var u = 0, f = i.length; f > u; u += 1) { + var m = t.firstViewer.getComponentsByKey(i[u]); + if (m && m[0] && m[0][i[u]] && m[0][i[u]][0]) { + var C = t._addProperty(m[0][i[u]][0].name, m[0][i[u]][0].type); + C.oldKey = "", + C.newKey = i[u], + C.addEventListener("click", (function(A) { + var e = A.target.parentNode.newKey; + e && (t.firstViewer.adaptiveSizeByKey(e), + t.firstViewer.clearColorfulList(), + t.firstViewer.clearTransparentList(), + t.firstViewer.transparentOtherComponentsByKey(e), + t.firstViewer.colorfulComponentsByKey(e, Xy.addedColor.color, Xy.addedColor.opacity)) + } + )), + l.appendChild(C) + } + } + var y = t.oldChangedList + , v = t.newChangedList + , I = document.createElement("div"); + I.classList.add("compares_list_body"), + A.appendChild(I); + var E = document.createElement("div"); + E.classList.add("compares_list_title"), + E.innerText = "变更构件列表(" + y.length + ")", + E.addEventListener("click", (function(A) { + for (var e = A.target.parentNode.querySelectorAll("tr"), i = [], o = [], n = 0, r = e.length; r > n; n += 1) + e[n].oldKey && o.push(e[n].oldKey), + e[n].newKey && i.push(e[n].newKey); + switch (t.displayModel) { + case zy.AGGREGATION: + case zy.SEPARATION: + t.secondViewer.adaptiveSizeByKey(i.concat(o)), + t.secondViewer.clearColorfulList(), + t.secondViewer.clearTransparentList(), + t.secondViewer.transparentOtherComponentsByKey(i.concat(o)), + t.secondViewer.colorfulComponentsByKey(i.concat(o), Xy.changedColor.color, Xy.changedColor.opacity); + break; + case zy.MULTIWINDOW: + t.firstViewer.adaptiveSizeByKey(o), + t.firstViewer.clearColorfulList(), + t.firstViewer.clearTransparentList(), + t.firstViewer.transparentOtherComponentsByKey(o), + t.firstViewer.colorfulComponentsByKey(o, Xy.changedColor.color, Xy.changedColor.opacity), + t.secondViewer.adaptiveSizeByKey(i), + t.secondViewer.clearColorfulList(), + t.secondViewer.clearTransparentList(), + t.secondViewer.transparentOtherComponentsByKey(i), + t.secondViewer.colorfulComponentsByKey(i, Xy.changedColor.color, Xy.changedColor.opacity) + } + } + )), + I.appendChild(E); + var B = document.createElement("table"); + B.classList.add("sx-table"), + B.classList.add("compares_list_table"), + B.classList.add("table-no-top"), + I.appendChild(B); + var x = document.createElement("thead"); + B.appendChild(x); + var S = document.createElement("tbody"); + B.appendChild(S); + var w = document.createElement("tr"); + w.style.backgroundColor = "rgba(255, 165, 0, 0.8)", + w.className = "noprop"; + var M = document.createElement("th"); + w.appendChild(M); + var b = document.createElement("span"); + b.classList.add("value"), + b.classList.add("nonEditable"), + b.innerHTML = "名称", + M.appendChild(b); + var U = document.createElement("th"); + w.appendChild(U); + var F = document.createElement("span"); + F.classList.add("value"), + F.classList.add("nonEditable"), + F.innerHTML = "类型", + U.appendChild(F); + var K = document.createElement("th"); + w.appendChild(K); + var Q = document.createElement("span"); + Q.classList.add("value"), + Q.classList.add("nonEditable"), + Q.innerHTML = "操作", + K.appendChild(Q), + x.appendChild(w); + for (var R = 0, T = v.length; T > R; R += 1) { + var k = t.secondViewer.getComponentsByKey(v[R]); + if (k && k[0] && k[0][v[R]] && k[0][v[R]][0]) { + var D = t._addProperty(k[0][v[R]][0].name, k[0][v[R]][0].type, "geometry" !== v[R].type); + D.oldKey = y[R], + D.newKey = v[R], + D.addEventListener("click", (function(A) { + var e = A.target.parentNode.oldKey + , i = A.target.parentNode.newKey; + if (e && i) + switch (t.displayModel) { + case zy.AGGREGATION: + case zy.SEPARATION: + t.secondViewer.adaptiveSizeByKey([e, i]), + t.secondViewer.clearColorfulList(), + t.secondViewer.clearTransparentList(), + t.secondViewer.transparentOtherComponentsByKey([e, i]), + t.secondViewer.colorfulComponentsByKey([e, i], Xy.changedColor.color, Xy.changedColor.opacity); + break; + case zy.MULTIWINDOW: + t.firstViewer.adaptiveSizeByKey(e), + t.firstViewer.clearColorfulList(), + t.firstViewer.clearTransparentList(), + t.firstViewer.transparentOtherComponentsByKey(e), + t.firstViewer.colorfulComponentsByKey(e, Xy.changedColor.color, Xy.changedColor.opacity), + t.secondViewer.adaptiveSizeByKey(i), + t.secondViewer.clearColorfulList(), + t.secondViewer.clearTransparentList(), + t.secondViewer.transparentOtherComponentsByKey(i), + t.secondViewer.colorfulComponentsByKey(i, Xy.changedColor.color, Xy.changedColor.opacity) + } + } + )), + S.appendChild(D) + } + } + var L = document.createElement("div"); + L.classList.add("compares_list_body"), + A.appendChild(L); + var N = document.createElement("div"); + N.classList.add("compares_list_title"), + N.innerText = "移除构件列表(" + o.length + ")", + N.addEventListener("click", (function(A) { + for (var e = A.target.parentNode.querySelectorAll("tr"), i = [], o = 0, n = e.length; n > o; o += 1) + e[o].oldKey && i.push(e[o].oldKey); + t.secondViewer.adaptiveSizeByKey(i), + t.secondViewer.clearColorfulList(), + t.secondViewer.clearTransparentList(), + t.secondViewer.transparentOtherComponentsByKey(i), + t.secondViewer.colorfulComponentsByKey(i, Xy.deletedColor.color, Xy.deletedColor.opacity) + } + )), + L.appendChild(N); + var O = document.createElement("table"); + O.classList.add("sx-table"), + O.classList.add("compares_list_table"), + O.classList.add("table-no-top"), + L.appendChild(O); + var V = document.createElement("thead"); + O.appendChild(V); + var G = document.createElement("tbody"); + O.appendChild(G); + var P = document.createElement("tr"); + P.style.backgroundColor = "rgba(255, 0, 0, 0.8)", + P.className = "noprop"; + var q = document.createElement("th"); + P.appendChild(q); + var j = document.createElement("span"); + j.classList.add("value"), + j.classList.add("nonEditable"), + j.innerHTML = "名称", + q.appendChild(j); + var H = document.createElement("th"); + P.appendChild(H); + var Y = document.createElement("span"); + Y.classList.add("value"), + Y.classList.add("nonEditable"), + Y.innerHTML = "类型", + H.appendChild(Y), + V.appendChild(P); + for (var W = 0, J = o.length; J > W; W += 1) { + var z = t.secondViewer.getComponentsByKey(o[W]); + if (z && z[0] && z[0][o[W]] && z[0][o[W]][0]) { + var Z = t._addProperty(z[0][o[W]][0].name, z[0][o[W]][0].type); + Z.oldKey = o[W], + Z.newKey = "", + Z.addEventListener("click", (function(A) { + var e = A.target.parentNode.oldKey; + e && (t.secondViewer.adaptiveSizeByKey(e), + t.secondViewer.clearColorfulList(), + t.secondViewer.clearTransparentList(), + t.secondViewer.transparentOtherComponentsByKey(e), + t.secondViewer.colorfulComponentsByKey(e, Xy.deletedColor.color, Xy.deletedColor.opacity)) + } + )), + G.appendChild(Z) + } + } + } + } + ; + var Av = "ON_VIEWER3D_CAMERA_CHANGE" + , ev = function(A, e) { + this.viewer2D = e, + this.viewer3D = A, + this.enableFocus(), + this.show3DCameraOn2DViewer() + }; + ev.prototype.enableFocus = function() { + var A = this.viewer2D + , e = this.viewer3D; + e && A && (A.setOnSelectComponentCallback((function(A) { + A && A.length > 0 ? (e.highlightComponentsByKey(A), + e.adaptiveSizeByKey(A)) : e.clearHighlightList() + } + )), + e.registerModelEventListener(Rc.ON_CLICK_PICK, (function(e) { + e.intersectInfo && e.intersectInfo.selectedObjectId && A.focusOnComponentByKey(e.intersectInfo.selectedObjectId, !0) + } + ))) + } + , + ev.prototype.enableMove2DCamera = function() { + this.viewer2D.getViewerImpl().controlManager.enableTool(this.viewer2D.getViewerImpl(), "viewer3DCameraControl") + } + , + ev.prototype.disableMove2DCamera = function() { + this.viewer2D.getViewerImpl().controlManager.disableTool("viewer3DCameraControl") + } + , + ev.prototype.show3DCameraOn2DViewer = function() { + var A = this.viewer2D + , e = this.viewer3D; + if (e && A) { + var t = e.getViewerImpl(); + e.registerCameraEventListener(Rc.ON_CAMERA_CHANGE, (function(e) { + var t = e.camera + , i = t.getWorldPosition(new y) + , o = t.getWorldDirection(new y); + A.show3DCamera([i.x, i.y], [o.x, o.y]) + } + )), + A.getViewerImpl().cameraControl.addEventListener(Av, (function(A) { + var e = A.position; + t.locateToPoint({ + x: e[0], + y: e[1], + z: t.camera.position.z + }) + } + )) + } + } + ; + var tv = function A(e, t) { + Ue.call(this, e), + this.type = "Reflector"; + var i = this + , o = new LA(void 0 !== (t = t || {}).color ? t.color : 16777215) + , n = t.textureWidth || 512 + , r = t.textureHeight || 512 + , s = t.clipBias || 0 + , l = t.shader || A.ReflectorShader + , c = void 0 !== t.recursion ? t.recursion : 0 + , h = new EA + , d = new y + , u = new y + , f = new y + , m = new M + , C = new y(0,0,-1) + , v = new p + , I = new y + , E = new y + , B = new p + , x = new M + , S = new je + , w = new g(n,r,{ + minFilter: 1006, + magFilter: 1006, + format: 1022, + stencilBuffer: !1 + }); + a.isPowerOfTwo(n) && a.isPowerOfTwo(r) || (w.texture.generateMipmaps = !1); + var b = new Pe({ + uniforms: Ge.clone(l.uniforms), + fragmentShader: l.fragmentShader, + vertexShader: l.vertexShader + }); + b.uniforms.tDiffuse.value = w.texture, + b.uniforms.color.value = o, + b.uniforms.textureMatrix.value = x, + this.material = b, + this.onBeforeRender = function(A, e, t) { + if ("recursion"in t.userData) { + if (t.userData.recursion === c) + return; + t.userData.recursion += 1 + } + if (u.setFromMatrixPosition(i.matrixWorld), + f.setFromMatrixPosition(t.matrixWorld), + m.extractRotation(i.matrixWorld), + d.set(0, 0, 1), + d.applyMatrix4(m), + I.subVectors(u, f), + 0 >= I.dot(d)) { + I.reflect(d).negate(), + I.add(u), + m.extractRotation(t.matrixWorld), + C.set(0, 0, -1), + C.applyMatrix4(m), + C.add(f), + E.subVectors(u, C), + E.reflect(d).negate(), + E.add(u), + S.position.copy(I), + S.up.set(0, 1, 0), + S.up.applyMatrix4(m), + S.up.reflect(d), + S.lookAt(E), + S.far = t.far, + S.updateMatrixWorld(), + S.matrixWorldInverse.getInverse(S.matrixWorld), + S.projectionMatrix.copy(t.projectionMatrix), + S.userData.recursion = 0, + x.set(.5, 0, 0, .5, 0, .5, 0, .5, 0, 0, .5, .5, 0, 0, 0, 1), + x.multiply(S.projectionMatrix), + x.multiply(S.matrixWorldInverse), + x.multiply(i.matrixWorld), + h.setFromNormalAndCoplanarPoint(d, u), + h.applyMatrix4(S.matrixWorldInverse), + v.set(h.normal.x, h.normal.y, h.normal.z, h.constant); + var o = S.projectionMatrix; + B.x = (Math.sign(v.x) + o.elements[8]) / o.elements[0], + B.y = (Math.sign(v.y) + o.elements[9]) / o.elements[5], + B.z = -1, + B.w = (1 + o.elements[10]) / o.elements[14], + v.multiplyScalar(2 / v.dot(B)), + o.elements[2] = v.x, + o.elements[6] = v.y, + o.elements[10] = v.z + 1 - s, + o.elements[14] = v.w, + w.texture.encoding = A.outputEncoding, + i.visible = !1; + var n = A.getRenderTarget() + , r = A.xr.enabled + , a = A.shadowMap.autoUpdate; + A.xr.enabled = !1, + A.shadowMap.autoUpdate = !1, + A.setRenderTarget(w), + A.state.buffers.depth.setMask(!0), + !1 === A.autoClear && A.clear(), + A.render(e, S), + A.xr.enabled = r, + A.shadowMap.autoUpdate = a, + A.setRenderTarget(n); + var l = t.viewport; + void 0 !== l && A.state.viewport(l), + i.visible = !0 + } + } + , + this.getRenderTarget = function() { + return w + } + }; + (tv.prototype = Object.create(Ue.prototype)).constructor = tv, + tv.ReflectorShader = { + uniforms: { + color: { + value: null + }, + tDiffuse: { + value: null + }, + textureMatrix: { + value: null + } + }, + vertexShader: ["uniform mat4 textureMatrix;", "varying vec4 vUv;", "void main() {", " vUv = textureMatrix * vec4( position, 1.0 );", " gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );", "}"].join("\n"), + fragmentShader: ["uniform vec3 color;", "uniform sampler2D tDiffuse;", "varying vec4 vUv;", "float blendOverlay( float base, float blend ) {", " return( base < 0.5 ? ( 2.0 * base * blend ) : ( 1.0 - 2.0 * ( 1.0 - base ) * ( 1.0 - blend ) ) );", "}", "vec3 blendOverlay( vec3 base, vec3 blend ) {", " return vec3( blendOverlay( base.r, blend.r ), blendOverlay( base.g, blend.g ), blendOverlay( base.b, blend.b ) );", "}", "void main() {", " vec4 base = texture2DProj( tDiffuse, vUv );", " gl_FragColor = vec4( blendOverlay( base.rgb, color ), 1.0 );", "}"].join("\n") + }; + var iv = function A(e, t) { + Ue.call(this, e), + this.type = "Refractor"; + var i = this + , o = new LA(void 0 !== (t = t || {}).color ? t.color : 8355711) + , n = t.textureWidth || 512 + , r = t.textureHeight || 512 + , s = t.clipBias || 0 + , l = t.shader || A.RefractorShader + , c = new je; + c.matrixAutoUpdate = !1, + c.userData.refractor = !0; + var h = new EA + , d = new M + , u = new g(n,r,{ + minFilter: 1006, + magFilter: 1006, + format: 1022, + stencilBuffer: !1 + }); + a.isPowerOfTwo(n) && a.isPowerOfTwo(r) || (u.texture.generateMipmaps = !1), + this.material = new Pe({ + uniforms: Ge.clone(l.uniforms), + vertexShader: l.vertexShader, + fragmentShader: l.fragmentShader, + transparent: !0 + }), + this.material.uniforms.color.value = o, + this.material.uniforms.tDiffuse.value = u.texture, + this.material.uniforms.textureMatrix.value = d; + var m, C, v, I = function() { + var A = new y + , e = new y + , t = new M + , o = new y + , n = new y; + return function(r) { + return A.setFromMatrixPosition(i.matrixWorld), + e.setFromMatrixPosition(r.matrixWorld), + o.subVectors(A, e), + t.extractRotation(i.matrixWorld), + n.set(0, 0, 1), + n.applyMatrix4(t), + 0 > o.dot(n) + } + }(), E = function() { + var A = new y + , e = new y + , t = new f + , o = new y; + return function() { + i.matrixWorld.decompose(e, t, o), + A.set(0, 0, 1).applyQuaternion(t).normalize(), + A.negate(), + h.setFromNormalAndCoplanarPoint(A, e) + } + }(), B = (m = new EA, + C = new p, + v = new p, + function(A) { + c.matrixWorld.copy(A.matrixWorld), + c.matrixWorldInverse.getInverse(c.matrixWorld), + c.projectionMatrix.copy(A.projectionMatrix), + c.far = A.far, + m.copy(h), + m.applyMatrix4(c.matrixWorldInverse), + C.set(m.normal.x, m.normal.y, m.normal.z, m.constant); + var e = c.projectionMatrix; + v.x = (Math.sign(C.x) + e.elements[8]) / e.elements[0], + v.y = (Math.sign(C.y) + e.elements[9]) / e.elements[5], + v.z = -1, + v.w = (1 + e.elements[10]) / e.elements[14], + C.multiplyScalar(2 / C.dot(v)), + e.elements[2] = C.x, + e.elements[6] = C.y, + e.elements[10] = C.z + 1 - s, + e.elements[14] = C.w + } + ); + this.onBeforeRender = function(A, e, t) { + u.texture.encoding = A.outputEncoding, + !0 !== t.userData.refractor && !0 != !I(t) && (E(), + function(A) { + d.set(.5, 0, 0, .5, 0, .5, 0, .5, 0, 0, .5, .5, 0, 0, 0, 1), + d.multiply(A.projectionMatrix), + d.multiply(A.matrixWorldInverse), + d.multiply(i.matrixWorld) + }(t), + B(t), + function(A, e, t) { + i.visible = !1; + var o = A.getRenderTarget() + , n = A.xr.enabled + , r = A.shadowMap.autoUpdate; + A.xr.enabled = !1, + A.shadowMap.autoUpdate = !1, + A.setRenderTarget(u), + !1 === A.autoClear && A.clear(), + A.render(e, c), + A.xr.enabled = n, + A.shadowMap.autoUpdate = r, + A.setRenderTarget(o); + var a = t.viewport; + void 0 !== a && A.state.viewport(a), + i.visible = !0 + }(A, e, t)) + } + , + this.getRenderTarget = function() { + return u + } + }; + (iv.prototype = Object.create(Ue.prototype)).constructor = iv, + iv.RefractorShader = { + uniforms: { + color: { + value: null + }, + tDiffuse: { + value: null + }, + textureMatrix: { + value: null + } + }, + vertexShader: ["uniform mat4 textureMatrix;", "varying vec4 vUv;", "void main() {", " vUv = textureMatrix * vec4( position, 1.0 );", " gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );", "}"].join("\n"), + fragmentShader: ["uniform vec3 color;", "uniform sampler2D tDiffuse;", "varying vec4 vUv;", "float blendOverlay( float base, float blend ) {", " return( base < 0.5 ? ( 2.0 * base * blend ) : ( 1.0 - 2.0 * ( 1.0 - base ) * ( 1.0 - blend ) ) );", "}", "vec3 blendOverlay( vec3 base, vec3 blend ) {", " return vec3( blendOverlay( base.r, blend.r ), blendOverlay( base.g, blend.g ), blendOverlay( base.b, blend.b ) );", "}", "void main() {", " vec4 base = texture2DProj( tDiffuse, vUv );", " gl_FragColor = vec4( blendOverlay( base.rgb, color ), 1.0 );", "}"].join("\n") + }; + var ov = function(A) { + return he.call(this), + this.points = A, + this.handlePoints = [], + this.minX = 0, + this.minY = 0, + this.maxX = 0, + this.maxY = 0, + this.invalid = !1, + this._createPlaneGeometry(), + this + }; + (ov.prototype = Object.create(he.prototype)).constructor = he, + ov.prototype._createPlaneGeometry = function() { + if (this._RemoveDuplicatePoints(this.points)) + this.invalid = !0; + else { + if (3 > this.handlePoints.length) + return Bh.warn("Failed to create plane, the number of the points must be more than three."), + void (this.invalid = !0); + if (3 === this.handlePoints.length && 0 === this._area(this.handlePoints[0], this.handlePoints[1], this.handlePoints[2])) + return Bh.warn("Failed to create plane, points are collinear."), + void (this.invalid = !0); + if (this._checkIntersect()) + return Bh.warn("Failed to create plane, the plane border is self-intersecting."), + void (this.invalid = !0); + this.handlePoints.push(new s(this.points[0].x,this.points[0].y)); + var A = new ar(new Ba(this.handlePoints)) + , e = new Float32Array(this._updateUv(A)); + A.setAttribute("uv", new YA(e,2)), + this.attributes = A.attributes, + this.groups = A.groups, + this.index = A.index + } + } + , + ov.prototype._updateUv = function(A) { + for (var e = [], t = A.attributes.position.array, i = 0; t.length > i; i += 3) { + var o = (t[i + 1] - this.minY) / (this.maxY - this.minY); + e.push((t[i] - this.minX) / (this.maxX - this.minX)), + e.push(o) + } + return e + } + , + ov.prototype._RemoveDuplicatePoints = function(A) { + var e = new s(A[0].x,A[0].y); + this.handlePoints.push(e), + this.minX = e.x, + this.maxX = e.x, + this.minY = e.y, + this.maxY = e.y; + for (var t = 1; A.length > t; t += 1) { + var i = !1; + if (void 0 === A[t].x || void 0 === A[t].y) + return Bh.log("Failed to create plane, the format of plane is not right, please follow [{x:,y:},...]"), + !0; + for (var o = 0; this.handlePoints.length > o; o += 1) + if (A[t].x === this.handlePoints[o].x && A[t].y === this.handlePoints[o].y) { + i = !0; + break + } + if (!1 === i) { + e = new s(A[t].x,A[t].y); + this.handlePoints.push(e), + this.minX > e.x && (this.minX = e.x), + this.minY > e.y && (this.minY = e.y), + e.x > this.maxX && (this.maxX = e.x), + e.y > this.maxY && (this.maxY = e.y) + } + } + return !1 + } + , + ov.prototype._checkIntersect = function() { + for (var A = null, e = null, t = this.handlePoints.length, i = 0; t > i; i += 1) { + A = this.handlePoints[i], + e = this.handlePoints[i === t - 1 ? 0 : i + 1]; + for (var o = i + 2; t > o; o += 1) + if ((0 !== i || o !== t - 1) && this._intersectSegments(A, e, this.handlePoints[o], this.handlePoints[o === t - 1 ? 0 : o + 1])) + return !0 + } + return !1 + } + , + ov.prototype._area = function(A, e, t) { + return (e.x - A.x) * (t.y - A.y) - (t.x - A.x) * (e.y - A.y) + } + , + ov.prototype._collinearIntersectCheck = function(A, e, t, i) { + return (Math.min(A.x, e.x) > t.x || t.x > Math.max(A.x, e.x) || Math.min(A.y, e.y) > t.y || t.y > Math.max(A.y, e.y)) && (Math.min(A.x, e.x) > i.x || i.x > Math.max(A.x, e.x) || Math.min(A.y, e.y) > i.y || i.y > Math.max(A.y, e.y)) + } + , + ov.prototype._intersectSegments = function(A, e, t, i) { + var o = this._area(A, e, t) * this._area(A, e, i) + , n = this._area(t, i, A) * this._area(t, i, e); + return 0 >= o && (0 >= n && (0 !== o || 0 !== n || !this._collinearIntersectCheck(A, e, t, i))) + } + ; + var nv = "data:image/jpeg;base64,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" + , rv = "data:image/jpeg;base64,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" + , av = function A(e, t) { + Ue.call(this, e), + this.type = "Water"; + var i = this + , o = t || {} + , n = void 0 !== o.color ? o.color : new p(1,1,1,1) + , r = o.textureWidth || 512 + , a = o.textureHeight || 512 + , l = o.clipBias || 0 + , c = o.flowDirection || new s(1,0) + , h = o.flowSpeed || .03 + , d = o.reflectivity || 1 + , g = o.scale || 1 + , u = o.shader || A.WaterShader; + this.reflectorTexturePosition = o.reflectorTexturePosition, + this.refractorTexturePosition = o.refractorTexturePosition; + var f = new Aa + , m = o.flowMap || void 0 + , C = o.normalMap0 || f.load(nv) + , y = o.normalMap1 || f.load(rv) + , v = new M + , I = new as; + if (void 0 !== tv) + if (void 0 !== iv) { + var E = new tv(e,{ + textureWidth: r, + textureHeight: a, + clipBias: l + }); + E.position.copy(this.reflectorTexturePosition), + E.updateMatrixWorld(!0); + var B = new iv(e,{ + textureWidth: r, + textureHeight: a, + clipBias: l + }); + B.position.copy(this.refractorTexturePosition), + B.updateMatrixWorld(!0), + this.material = new Pe({ + uniforms: Ge.merge([u.uniforms]), + vertexShader: u.vertexShader, + fragmentShader: u.fragmentShader, + transparent: !0 + }), + this.material.clipping = !0, + this.material.side = 2, + void 0 !== m ? (this.material.defines.USE_FLOWMAP = "", + this.material.uniforms.tFlowMap = { + type: "t", + value: m + }) : this.material.uniforms.flowDirection = { + type: "v2", + value: c + }, + C.wrapS = 1e3, + C.wrapT = 1e3, + y.wrapS = 1e3, + y.wrapT = 1e3, + this.material.uniforms.tReflectionMap.value = E.getRenderTarget().texture, + this.material.uniforms.tRefractionMap.value = B.getRenderTarget().texture, + this.material.uniforms.tNormalMap0.value = C, + this.material.uniforms.tNormalMap1.value = y, + this.material.uniforms.color.value = n, + this.material.uniforms.reflectivity.value = d, + this.material.uniforms.textureMatrix.value = v, + this.material.uniforms.config.value.x = 0, + this.material.uniforms.config.value.y = .075, + this.material.uniforms.config.value.z = .075, + this.material.uniforms.config.value.w = g, + this.onBeforeRender = function(A, e, t) { + var o, n; + !function(A) { + v.set(.5, 0, 0, .5, 0, .5, 0, .5, 0, 0, .5, .5, 0, 0, 0, 1), + v.multiply(A.projectionMatrix), + v.multiply(A.matrixWorldInverse), + v.multiply(i.matrixWorld) + }(t), + o = I.getDelta(), + (n = i.material.uniforms.config).value.x += h * o, + n.value.y = n.value.x + .075, + .15 > n.value.x ? .15 > n.value.y || (n.value.y = n.value.y - .15) : (n.value.x = 0, + n.value.y = .075), + i.visible = !1, + E.position.equals(this.reflectorTexturePosition) || (E.position.copy(this.reflectorTexturePosition), + E.updateMatrixWorld(!0)), + B.position.equals(this.refractorTexturePosition) || (B.position.copy(this.refractorTexturePosition), + B.updateMatrixWorld(!0)), + i.cameraProjectionMatrix || (i.cameraProjectionMatrix = t.projectionMatrix.clone()), + t.projectionMatrix.equals(i.cameraProjectionMatrix) || (i.needUpdate = !0), + i.waterMatrixWorld || (i.waterMatrixWorld = i.matrixWorld.clone()), + i.matrixWorld.equals(i.waterMatrixWorld) || (i.needUpdate = !0), + i.needUpdate && (E.onBeforeRender(A, e, t), + B.onBeforeRender(A, e, t), + i.needUpdate = !1), + i.material.uniforms.tReflectionMap.value = E.getRenderTarget().texture, + i.material.uniforms.tRefractionMap.value = B.getRenderTarget().texture, + i.visible = !0 + } + } else + Bh.error("THREE.Water: Required component THREE.Refractor not found."); + else + Bh.error("THREE.Water: Required component THREE.Reflector not found.") + }; + (av.prototype = Object.create(Ue.prototype)).constructor = av, + av.WaterShader = { + uniforms: { + color: { + type: "v4", + value: null + }, + reflectivity: { + type: "f", + value: 0 + }, + tReflectionMap: { + type: "t", + value: null + }, + tRefractionMap: { + type: "t", + value: null + }, + tNormalMap0: { + type: "t", + value: null + }, + tNormalMap1: { + type: "t", + value: null + }, + textureMatrix: { + type: "m4", + value: null + }, + config: { + type: "v4", + value: new p + } + }, + vertexShader: ["#include ", "uniform mat4 textureMatrix;", "varying vec4 vCoord;", "varying vec2 vUv;", "varying vec3 vToEye;", "#include ", "void main() {", " vUv = uv;", " vCoord = textureMatrix * vec4( position, 1.0 );", " vec4 worldPosition = modelMatrix * vec4( position, 1.0 );", " vToEye = cameraPosition - worldPosition.xyz;", " vec4 mvPosition = viewMatrix * worldPosition;", " gl_Position = projectionMatrix * mvPosition;", " #include ", " #include ", "}"].join("\n"), + fragmentShader: ["#include ", "#include ", "uniform sampler2D tReflectionMap;", "uniform sampler2D tRefractionMap;", "uniform sampler2D tNormalMap0;", "uniform sampler2D tNormalMap1;", "#ifdef USE_FLOWMAP", " uniform sampler2D tFlowMap;", "#else", " uniform vec2 flowDirection;", "#endif", "uniform vec4 color;", "uniform float reflectivity;", "uniform vec4 config;", "#include ", "varying vec4 vCoord;", "varying vec2 vUv;", "varying vec3 vToEye;", "void main() {", " #include ", " float flowMapOffset0 = config.x;", " float flowMapOffset1 = config.y;", " float halfCycle = config.z;", " float scale = config.w;", " vec3 toEye = normalize( vToEye );", " vec2 flow;", " #ifdef USE_FLOWMAP", " flow = texture2D( tFlowMap, vUv ).rg * 2.0 - 1.0;", " #else", " flow = flowDirection;", " #endif", " flow.x *= - 1.0;", " vec4 normalColor0 = texture2D( tNormalMap0, ( vUv * scale ) + flow * flowMapOffset0 );", " vec4 normalColor1 = texture2D( tNormalMap1, ( vUv * scale ) + flow * flowMapOffset1 );", " float flowLerp = abs( halfCycle - flowMapOffset0 ) / halfCycle;", " vec4 normalColor = mix( normalColor0, normalColor1, flowLerp );", " vec3 normal = normalize( vec3( normalColor.r * 2.0 - 1.0, normalColor.b, normalColor.g * 2.0 - 1.0 ) );", " float theta = max( dot( toEye, normal ), 0.0 );", " float reflectance = reflectivity + ( 1.0 - reflectivity ) * pow( ( 1.0 - theta ), 5.0 );", " vec3 coord = vCoord.xyz / vCoord.w;", " vec2 uv = coord.xy + coord.z * normal.xz * 0.05;", " vec4 reflectColor = texture2D( tReflectionMap, vec2( 1.0 - uv.x, uv.y ) );", " vec4 refractColor = texture2D( tRefractionMap, uv );", " gl_FragColor = color * mix( refractColor, reflectColor, reflectance );", " #include ", " #include ", " #include ", "}"].join("\n") + }; + var sv = function(A) { + A ? (this.boundary = A.boundary, + this.color = A.color, + this.viewer = A.viewer, + this.scale = A.scale, + this.xDirection = A.xDirection, + this.yDirection = A.yDirection, + this.reflectivity = A.reflectivity, + A.reflectorTexturePosition ? "number" == typeof A.reflectorTexturePosition.x ? "number" == typeof A.reflectorTexturePosition.y ? "number" == typeof A.reflectorTexturePosition.z ? (this.reflectorTexturePosition = (new y).copy(A.reflectorTexturePosition), + A.refractorTexturePosition ? "number" == typeof A.refractorTexturePosition.x ? "number" == typeof A.refractorTexturePosition.y ? "number" == typeof A.refractorTexturePosition.z ? (this.refractorTexturePosition = (new y).copy(A.refractorTexturePosition), + this.viewer && this.viewer instanceof Gy ? (A.geometry || 0 !== this.boundary.length) && (this.geometry = A.geometry || new ov(this.boundary), + this.water = new av(this.geometry,{ + color: new p(this.color.r,this.color.g,this.color.b,this.color.a), + scale: this.scale, + reflectivity: this.reflectivity, + flowDirection: new s(this.xDirection,this.yDirection), + textureWidth: 1024, + textureHeight: 1024, + reflectorTexturePosition: this.reflectorTexturePosition, + refractorTexturePosition: this.refractorTexturePosition + }), + this.height = A.height, + this.water.translateZ(this.height), + this.water.renderOrder = -1, + this.water.disPickable = !0, + this.id = uh.createUUID(), + this.water.name = this.id, + this.water.autoAnimation = !0, + this.viewer.addExternalObject(this.id, this.water)) : Bh.log("ERROR::viewer must not support.")) : Bh.error("缺少参数 reflectorTexturePosition.z") : Bh.error("缺少参数 reflectorTexturePosition.y") : Bh.error("缺少参数 reflectorTexturePosition.x") : Bh.error("缺少参数 reflectorTexturePosition")) : Bh.error("缺少参数 reflectorTexturePosition.z") : Bh.error("缺少参数 reflectorTexturePosition.y") : Bh.error("缺少参数 reflectorTexturePosition.x") : Bh.error("缺少参数 reflectorTexturePosition")) : Bh.error("ERROR::waterEffectConfig 不能为空.") + }; + sv.prototype.getBoundary = function() { + return this.boundary + } + , + sv.prototype.getColor = function() { + return this.color + } + , + sv.prototype.getScale = function() { + return this.scale + } + , + sv.prototype.getXDirection = function() { + return this.xDirection + } + , + sv.prototype.getYDirection = function() { + return this.yDirection + } + , + sv.prototype.setColor = function(A) { + A instanceof Xh ? (this.color = A, + this.water.material.uniforms.color.value.set(this.color.r, this.color.g, this.color.b, this.color.a)) : Bh.log("ERROR::color should be instance of EIMMODEL.Color") + } + , + sv.prototype.setScale = function(A) { + this.scale = A, + this.water.material.uniforms.config.value.w = A + } + , + sv.prototype.setReflectivity = function(A) { + this.reflectivity = A, + this.water.material.uniforms.reflectivity.value = A + } + , + sv.prototype.getReflectivity = function() { + return this.reflectivity + } + , + sv.prototype.getReflectorTexturePosition = function() { + return this.reflectorTexturePosition.clone() + } + , + sv.prototype.getRefractorTexturePosition = function() { + return this.refractorTexturePosition.clone() + } + , + sv.prototype.setReflectorTexturePosition = function(A) { + A ? "number" == typeof A.x ? "number" == typeof A.y ? "number" == typeof A.z ? (this.reflectorTexturePosition = new y(A.x,A.y,A.z), + this.water.reflectorTexturePosition = this.reflectorTexturePosition) : Bh.error("缺少参数 position.z") : Bh.error("缺少参数 position.y") : Bh.error("缺少参数 position.x") : Bh.error("缺少参数 position") + } + , + sv.prototype.setRefractorTexturePosition = function(A) { + A ? "number" == typeof A.x ? "number" == typeof A.y ? "number" == typeof A.z ? (this.refractorTexturePosition = new y(A.x,A.y,A.z), + this.water.refractorTexturePosition = this.refractorTexturePosition) : Bh.error("缺少参数 position.z") : Bh.error("缺少参数 position.y") : Bh.error("缺少参数 position.x") : Bh.error("缺少参数 position") + } + , + sv.prototype.setXDirection = function(A) { + this.xDirection = A, + this.water.material.uniforms.flowDirection.value.x = A + } + , + sv.prototype.setYDirection = function(A) { + this.yDirection = A, + this.water.material.uniforms.flowDirection.value.y = A + } + , + sv.prototype.remove = function() { + this.viewer.removeExternalObjectByName(this.id) + } + , + sv.prototype.setHeight = function(A) { + this.height = A, + this.water.translateZ(A), + this.water.updateMatrixWorld(!0) + } + , + sv.prototype.getHeight = function() { + return this.height + } + , + sv.prototype.setGeometry = function(A) { + A.isGeometry || A.isBufferGeometry ? (this.geometry = A, + this.water.geometry = A) : Bh.log("ERROR::geometry type not support") + } + , + sv.prototype.getGeometry = function() { + return this.geometry + } + , + sv.prototype.getWaterObject = function() { + return this.water + } + ; + var lv = Symbol("_flowing") + , cv = function() { + function A(e) { + cc(this, A), + this.viewer = e.viewer3D; + var t = e.opt; + this.arrowParameters = t, + this.arrowParameters.speed = this.arrowParameters.speed || 5, + this.arrowParameters.spacing = this.arrowParameters.spacing || 100, + this.arrowArray = [], + this.pathNumb = 0, + this.totalLength = 0, + this.path = [], + !0 === t.customizeMesh ? this.geometricModelLength = t.meshLength : t.arrowShape ? (t.arrowShape.rectangleLength = t.arrowShape.rectangleLength || 500, + t.arrowShape.triangleBottomHeight = t.arrowShape.triangleBottomHeight || 260, + this.geometricModelLength = t.arrowShape.rectangleLength + t.arrowShape.triangleBottomHeight ? t.arrowShape.triangleBottomHeight : 260) : this.geometricModelLength = 760, + this.intervalLength = this.geometricModelLength + t.spacing, + this.materialObject = {}, + this.materialsInit = this.arrowParameters.materialsInit || "default", + this.materialsUpdate = this.arrowParameters.materialsUpdate || "fixed", + this.isFlowing = !1, + t.callback && (t.callback.enter && (this.callbackEnter = t.callback.enter), + t.callback.out && (this.callbackOut = t.callback.out)), + this.meshGroupId = (new Date).getTime(), + this.meshGroup ? this.meshGroup.children = [] : this.meshGroup = new Xi + } + return dc(A, [{ + key: "calculationPathOffset", + value: function() { + for (var A = this.path, e = 0; A.length > e; e += 1) { + var t = (new y).copy(A[e].startingPoint) + , i = new f + , o = new f + , n = new y(1,1,1); + if (A[e].offset) { + var r = (new y).copy(A[e].offset.pathDepthAxis).applyQuaternion(i); + t.add(r.multiplyScalar(A[e].offset.depth)), + o.setFromAxisAngle(A[e].startPoint2EndPointAxis, A[e].angle), + i.premultiply(o), + o.setFromAxisAngle(A[e].vectorNormalize, A[e].offset.angle), + i.premultiply(o) + } else + o.setFromAxisAngle(A[e].startPoint2EndPointAxis, A[e].angle), + i.premultiply(o); + A[e].rotationComponent = {}, + A[e].rotationComponent.position = t, + A[e].rotationComponent.quaternion = i, + A[e].rotationComponent.scale = n + } + } + }, { + key: "translationPath", + value: function() { + var A = new y(1,0,0) + , e = this.arrowParameters.points + , t = e.length - 1 + , i = []; + this.totalLength = 0; + for (var o = 0; t > o; o += 1) { + var n = {}; + if (n.startingPoint = new y(e[o].x,e[o].y,e[o].z), + n.endingPoint = new y(e[o + 1].x,e[o + 1].y,e[o + 1].z), + n.length = n.startingPoint.distanceTo(n.endingPoint), + n.vector = (new y).subVectors(n.endingPoint, n.startingPoint), + n.vectorNormalize = (new y).subVectors(n.endingPoint, n.startingPoint).normalize(), + n.startPoint2EndPointAxis = (new y).crossVectors(A, n.vectorNormalize).normalize(), + n.numb = o, + n.angle = A.angleTo(n.vectorNormalize), + this.arrowParameters.offset && this.arrowParameters.offset[o + 1]) { + var r = {} + , a = this.arrowParameters.offset[o + 1] + , s = a.depth + , l = a.angle + , c = void 0 === l ? 0 : l; + r.depth = void 0 === s ? 0 : s, + r.angle = Math.PI / 180 * c, + r.pathDepthAxis = new y(0,1,0).applyAxisAngle(n.startPoint2EndPointAxis, n.angle), + r.pathDepthAxis.applyAxisAngle(n.vectorNormalize, r.angle).normalize(), + n.offset = r + } + this.totalLength += n.length, + i.push(n) + } + this.path = i, + this.pathNumb = this.path.length + } + }, { + key: "calculationArrowAmount", + value: function() { + var A = this.arrowParameters + , e = 0; + if (A.createMode && "number" === A.createMode && A.arrowAmount && A.arrowAmount > 0) + if (A.intervalMode && "strict" === A.intervalMode) { + if (e = Math.floor(this.totalLength / this.intervalLength), + A.arrowAmount > e) + return { + code: "001", + message: "Too many arrows,over the length of the path" + }; + this.arrowAmount = A.arrowAmount, + this.CreateMode = "number", + this.IntervalMode = "strict" + } else { + if (e = Math.floor(this.totalLength / this.geometricModelLength), + A.arrowAmount > e) + return { + code: "001", + message: "Too many arrows,over the length of the path" + }; + this.arrowAmount = A.arrowAmount, + this.CreateMode = "number"; + var t = Math.floor(100 * (this.totalLength - this.intervalLength * A.arrowAmount) / A.arrowAmount) / 100; + this.intervalLength += t, + this.IntervalMode = "free" + } + else { + if (A.createMode && "number" === A.createMode && A.arrowAmount && 1 > A.arrowAmount) + return { + code: "002", + message: "the number is error" + }; + if (e = Math.floor(this.totalLength / this.intervalLength), + A.intervalMode && "strict" === A.intervalMode) + this.IntervalMode = "strict"; + else { + var i = Math.floor(100 * (this.totalLength % this.intervalLength) / e) / 100; + this.intervalLength += i, + this.IntervalMode = "free" + } + this.arrowAmount = e, + this.CreateMode = "space" + } + } + }, { + key: "createArrowArray", + value: function() { + var A = this.arrowAmount; + if (!0 === this.arrowParameters.customizeMesh) + for (var e = 0; A > e; e += 1) { + var t = this.arrowParameters.mesh.clone(); + t.material = this.materialObject.default, + this.arrowArray.push(t), + this.meshGroup.add(t) + } + else + for (var i = this.arrowParameters.arrowShape, o = void 0 === i ? {} : i, n = o.triangleBottomLength || 400, r = o.triangleBottomHeight || 260, a = o.rectangleWidth || 180, s = o.rectangleLength || 500, l = o.arrowHeight || 80, c = new Float32Array([r + s, l, 0, s, l, n / 2, s, l, -n / 2, r + s, 0, 0, s, 0, n / 2, s, 0, -n / 2, s, l, -a / 2, s, l, a / 2, 0, l, a / 2, 0, l, -a / 2, s, 0, -a / 2, s, 0, a / 2, 0, 0, a / 2, 0, 0, -a / 2]), h = [2, 1, 0, 3, 4, 5, 0, 1, 4, 0, 4, 3, 1, 2, 4, 4, 2, 5, 5, 2, 0, 3, 5, 0, 8, 7, 6, 9, 8, 6, 13, 9, 6, 10, 13, 6, 12, 8, 9, 9, 13, 12, 12, 13, 10, 12, 10, 11, 7, 8, 12, 11, 7, 12], d = 0; A > d; d += 1) { + var p = this.createArrowMesh(c, h); + p.arrowID = d, + this.arrowArray.push(p), + this.meshGroup.add(p) + } + } + }, { + key: "createArrowMesh", + value: function(A, e) { + var t = new he; + t.setIndex(e); + var i = new YA(A,3); + return t.attributes.position = i, + new Ue(t,this.materialObject.default) + } + }, { + key: "createMaterialArray", + value: function() { + for (var A = this.arrowParameters.colors, e = this.arrowParameters.materials, t = this.path.length, i = 1; t >= i; i += 1) + e && e[i] ? this.materialObject[i] = e[i] : A && A[i] && (this.materialObject[i] = new jA({ + color: A[i] + })); + e && e.default ? this.materialObject.default = e.default : A && A.default ? this.materialObject.default = new jA({ + color: A.default + }) : (this.materialObject.default = new jA({ + color: 10606038 + }), + this.materialObject.default.transparent = !0, + this.materialObject.default.opacity = .8) + } + }, { + key: "initPostition", + value: function() { + var A = this.arrowArray + , e = this.path + , t = A.length + , i = 0 + , o = this.intervalLength + , n = 0 + , r = new f; + if (this.arrowParameters.enterSceMod && "progressive" === this.arrowParameters.enterSceMod) + for (var a = 0; t > a; a += 1) { + var s = A[a]; + s.quaternion.copy(r), + s.position.x = e[i].startingPoint.x, + s.position.y = e[i].startingPoint.y, + s.position.z = e[i].startingPoint.z, + s.pathOrder = i, + e[i].offset ? (s.translateOnAxis(e[i].vectorNormalize, -o * n), + s.translateOnAxis(e[i].offset.pathDepthAxis, e[i].offset.depth), + s.rotateOnWorldAxis(e[i].startPoint2EndPointAxis, e[i].angle), + s.rotateOnWorldAxis(e[i].vectorNormalize, e[i].offset.angle)) : (s.translateOnAxis(e[i].vectorNormalize, -o * n), + s.rotateOnWorldAxis(e[i].startPoint2EndPointAxis, e[i].angle)), + s.visible = !1, + s.userData.BosArrowExt = {}, + s.userData.BosArrowExt.enterState = "unenter", + "path" === this.materialsInit && this.materialObject[i + 1] && (s.material = this.materialObject[i + 1]), + s.updateMatrixWorld(), + n += 1 + } + else + for (var l = 0, c = 0; t > c; c += 1) { + var h = A[c]; + h.quaternion.copy(r); + var d = e[i]; + d.offset ? (h.position.x = d.startingPoint.x, + h.position.y = d.startingPoint.y, + h.position.z = d.startingPoint.z, + h.translateOnAxis(d.vectorNormalize, o * n + l), + h.translateOnAxis(d.offset.pathDepthAxis, d.offset.depth), + h.rotateOnWorldAxis(d.startPoint2EndPointAxis, d.angle), + h.rotateOnWorldAxis(d.vectorNormalize, d.offset.angle)) : (h.position.x = d.startingPoint.x, + h.position.y = d.startingPoint.y, + h.position.z = d.startingPoint.z, + h.translateOnAxis(d.vectorNormalize, o * n + l), + h.rotateOnWorldAxis(d.startPoint2EndPointAxis, d.angle)), + h.pathOrder = i, + "path" === this.materialsInit && this.materialObject[i + 1] && (h.material = this.materialObject[i + 1]), + d.length - l > o * (n + 1) || (l = o * (n + 1) - d.length + l, + i += 1, + n = -1), + h.updateMatrixWorld(), + n += 1 + } + this.viewer.removeExternalObjectByName(this.meshGroupId), + this.viewer.addExternalObject(this.meshGroupId, this.meshGroup) + } + }, { + key: "setSpeed", + value: function(A) { + this.isFlowing ? (this.stopFlow(), + this.arrowParameters.speed = A, + this.startFlow()) : this.arrowParameters.speed = A + } + }, { + key: "init", + value: function() { + this.translationPath(), + this.calculationPathOffset(), + this.calculationArrowAmount(), + this.createMaterialArray(), + this.createArrowArray(), + this.initPostition() + } + }, { + key: "updatePosition", + value: function() { + var A = this + , e = this.path + , t = this.arrowParameters.speed; + this.arrowArray.forEach((function(i) { + if (!i.lockPosUpDate || !0 !== i.lockPosUpDate) { + var o = 0; + if (i.userData.BosArrowExt && i.userData.BosArrowExt.enterState && "unenter" === i.userData.BosArrowExt.enterState) { + var n = i.position.distanceTo(e[0].endingPoint); + return e[0].length > n && ("fixed" !== A.materialsUpdate && A.materialObject[0] ? i.material = A.materialObject[0] : "fixed" === A.materialsUpdate || A.materialObject[0] || (i.material = A.materialObject.default), + A.callbackEnter && "function" == typeof A.callbackEnter && A.callbackEnter(i, e[0]), + i.visible = !0, + i.userData.BosArrowExt.enterState = "enter", + "fixed" !== A.materialsUpdate && A.materialObject[1] ? i.material = A.materialObject[1] : "fixed" === A.materialsUpdate || A.materialObject[1] || (i.material = A.materialObject.default)), + i.translateX(t + o), + void i.updateMatrixWorld() + } + var r = i.position.distanceTo(e[i.pathOrder].startingPoint); + r > e[i.pathOrder].length - A.geometricModelLength && !1 !== i.visible && (i.visible = !1, + A.callbackOut && "function" == typeof A.callbackOut && A.callbackOut(i, e[i.pathOrder])), + !1 === i.visible && (i.pathOrder + 1 === A.pathNumb ? e[i.pathOrder].length > r || (o = r - e[i.pathOrder].length, + i.pathOrder = 0, + i.position.copy(e[i.pathOrder].rotationComponent.position), + i.scale.copy(e[i.pathOrder].rotationComponent.scale), + i.setRotationFromQuaternion(e[i.pathOrder].rotationComponent.quaternion), + "fixed" !== A.materialsUpdate && A.materialObject[1] ? i.material = A.materialObject[1] : "fixed" === A.materialsUpdate || A.materialObject[1] || (i.material = A.materialObject.default), + A.callbackEnter && "function" == typeof A.callbackEnter && A.callbackEnter(i, e[i.pathOrder]), + i.visible = !0) : e[i.pathOrder].length > r || (o = r - e[i.pathOrder].length, + i.pathOrder += 1, + i.position.copy(e[i.pathOrder].rotationComponent.position), + i.scale.copy(e[i.pathOrder].rotationComponent.scale), + i.setRotationFromQuaternion(e[i.pathOrder].rotationComponent.quaternion), + "fixed" !== A.materialsUpdate && A.materialObject[i.pathOrder + 1] ? i.material = A.materialObject[i.pathOrder + 1] : "fixed" === A.materialsUpdate || A.materialObject[i.pathOrder + 1] || (i.material = A.materialObject.default), + i.visible = !0, + A.callbackEnter && "function" == typeof A.callbackEnter && A.callbackEnter(i, e[i.pathOrder]))), + i.translateX(t + o), + i.updateMatrixWorld() + } + } + )), + this.viewer.render() + } + }, { + key: lv, + value: function() { + this.requestAnimationFrameID = requestAnimationFrame(this[lv].bind(this)), + this.updatePosition() + } + }, { + key: "startFlow", + value: function() { + if (this.isFlowing) + return { + code: "003", + message: "Do not open repeatedly" + }; + this.isFlowing = !0, + this.requestAnimationFrameID = requestAnimationFrame(this[lv].bind(this)) + } + }, { + key: "stopFlow", + value: function() { + cancelAnimationFrame(this.requestAnimationFrameID), + this.isFlowing = !1 + } + }, { + key: "hide", + value: function() { + this.viewer.removeExternalObjectByName(this.meshGroupId) + } + }, { + key: "show", + value: function() { + this.hide(), + this.viewer.addExternalObject(this.meshGroupId, this.meshGroup) + } + }, { + key: "clear", + value: function() { + this.hide(), + this.meshGroup.children = [], + this.arrowArray = [] + } + }]), + A + }(); + function hv(A, e) { + return A === e || A != A && e != e + } + function dv(A, e) { + for (var t = A.length; t--; ) + if (hv(A[t][0], e)) + return t; + return -1 + } + var pv = Array.prototype.splice; + function gv(A) { + var e = -1 + , t = null == A ? 0 : A.length; + for (this.clear(); ++e < t; ) { + var i = A[e]; + this.set(i[0], i[1]) + } + } + gv.prototype.clear = function() { + this.__data__ = [], + this.size = 0 + } + , + gv.prototype.delete = function(A) { + var e = this.__data__ + , t = dv(e, A); + return t >= 0 && (t == e.length - 1 ? e.pop() : pv.call(e, t, 1), + --this.size, + !0) + } + , + gv.prototype.get = function(A) { + var e = this.__data__ + , t = dv(e, A); + return 0 > t ? void 0 : e[t][1] + } + , + gv.prototype.has = function(A) { + return dv(this.__data__, A) > -1 + } + , + gv.prototype.set = function(A, e) { + var t = this.__data__ + , i = dv(t, A); + return 0 > i ? (++this.size, + t.push([A, e])) : t[i][1] = e, + this + } + ; + var uv = "object" == typeof global && global && global.Object === Object && global + , fv = "object" == typeof self && self && self.Object === Object && self + , mv = uv || fv || Function("return this")() + , Cv = mv.Symbol + , yv = Object.prototype + , vv = yv.hasOwnProperty + , Iv = yv.toString + , Ev = Cv ? Cv.toStringTag : void 0; + var Bv = Object.prototype.toString; + var xv = Cv ? Cv.toStringTag : void 0; + function Sv(A) { + return null == A ? void 0 === A ? "[object Undefined]" : "[object Null]" : xv && xv in Object(A) ? function(A) { + var e = vv.call(A, Ev) + , t = A[Ev]; + try { + A[Ev] = void 0; + var i = !0 + } catch (A) {} + var o = Iv.call(A); + return i && (e ? A[Ev] = t : delete A[Ev]), + o + }(A) : function(A) { + return Bv.call(A) + }(A) + } + function wv(A) { + var e = typeof A; + return null != A && ("object" == e || "function" == e) + } + function Mv(A) { + if (!wv(A)) + return !1; + var e = Sv(A); + return "[object Function]" == e || "[object GeneratorFunction]" == e || "[object AsyncFunction]" == e || "[object Proxy]" == e + } + var bv, Uv = mv["__core-js_shared__"], Fv = (bv = /[^.]+$/.exec(Uv && Uv.keys && Uv.keys.IE_PROTO || "")) ? "Symbol(src)_1." + bv : ""; + var Kv = Function.prototype.toString; + function Qv(A) { + if (null != A) { + try { + return Kv.call(A) + } catch (A) {} + try { + return A + "" + } catch (A) {} + } + return "" + } + var Rv = /^\[object .+?Constructor\]$/ + , Tv = RegExp("^" + Function.prototype.toString.call(Object.prototype.hasOwnProperty).replace(/[\\^$.*+?()[\]{}|]/g, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$"); + function kv(A) { + return !(!wv(A) || (e = A, + Fv && Fv in e)) && (Mv(A) ? Tv : Rv).test(Qv(A)); + var e + } + function Dv(A, e) { + var t = function(A, e) { + return null == A ? void 0 : A[e] + }(A, e); + return kv(t) ? t : void 0 + } + var Lv = Dv(mv, "Map") + , Nv = Dv(Object, "create"); + var Ov = Object.prototype.hasOwnProperty; + var Vv = Object.prototype.hasOwnProperty; + function Gv(A) { + var e = -1 + , t = null == A ? 0 : A.length; + for (this.clear(); ++e < t; ) { + var i = A[e]; + this.set(i[0], i[1]) + } + } + function Pv(A, e) { + var t, i, o = A.__data__; + return ("string" == (i = typeof (t = e)) || "number" == i || "symbol" == i || "boolean" == i ? "__proto__" !== t : null === t) ? o["string" == typeof e ? "string" : "hash"] : o.map + } + function qv(A) { + var e = -1 + , t = null == A ? 0 : A.length; + for (this.clear(); ++e < t; ) { + var i = A[e]; + this.set(i[0], i[1]) + } + } + Gv.prototype.clear = function() { + this.__data__ = Nv ? Nv(null) : {}, + this.size = 0 + } + , + Gv.prototype.delete = function(A) { + var e = this.has(A) && delete this.__data__[A]; + return this.size -= e ? 1 : 0, + e + } + , + Gv.prototype.get = function(A) { + var e = this.__data__; + if (Nv) { + var t = e[A]; + return "__lodash_hash_undefined__" === t ? void 0 : t + } + return Ov.call(e, A) ? e[A] : void 0 + } + , + Gv.prototype.has = function(A) { + var e = this.__data__; + return Nv ? void 0 !== e[A] : Vv.call(e, A) + } + , + Gv.prototype.set = function(A, e) { + var t = this.__data__; + return this.size += this.has(A) ? 0 : 1, + t[A] = Nv && void 0 === e ? "__lodash_hash_undefined__" : e, + this + } + , + qv.prototype.clear = function() { + this.size = 0, + this.__data__ = { + hash: new Gv, + map: new (Lv || gv), + string: new Gv + } + } + , + qv.prototype.delete = function(A) { + var e = Pv(this, A).delete(A); + return this.size -= e ? 1 : 0, + e + } + , + qv.prototype.get = function(A) { + return Pv(this, A).get(A) + } + , + qv.prototype.has = function(A) { + return Pv(this, A).has(A) + } + , + qv.prototype.set = function(A, e) { + var t = Pv(this, A) + , i = t.size; + return t.set(A, e), + this.size += t.size == i ? 0 : 1, + this + } + ; + function jv(A) { + var e = this.__data__ = new gv(A); + this.size = e.size + } + jv.prototype.clear = function() { + this.__data__ = new gv, + this.size = 0 + } + , + jv.prototype.delete = function(A) { + var e = this.__data__ + , t = e.delete(A); + return this.size = e.size, + t + } + , + jv.prototype.get = function(A) { + return this.__data__.get(A) + } + , + jv.prototype.has = function(A) { + return this.__data__.has(A) + } + , + jv.prototype.set = function(A, e) { + var t = this.__data__; + if (t instanceof gv) { + var i = t.__data__; + if (!Lv || 199 > i.length) + return i.push([A, e]), + this.size = ++t.size, + this; + t = this.__data__ = new qv(i) + } + return t.set(A, e), + this.size = t.size, + this + } + ; + var Hv = function() { + try { + var A = Dv(Object, "defineProperty"); + return A({}, "", {}), + A + } catch (A) {} + }(); + function Yv(A, e, t) { + "__proto__" == e && Hv ? Hv(A, e, { + configurable: !0, + enumerable: !0, + value: t, + writable: !0 + }) : A[e] = t + } + var Wv = Object.prototype.hasOwnProperty; + function Jv(A, e, t) { + var i = A[e]; + Wv.call(A, e) && hv(i, t) && (void 0 !== t || e in A) || Yv(A, e, t) + } + function zv(A, e, t, i) { + var o = !t; + t || (t = {}); + for (var n = -1, r = e.length; ++n < r; ) { + var a = e[n] + , s = i ? i(t[a], A[a], a, t, A) : void 0; + void 0 === s && (s = A[a]), + o ? Yv(t, a, s) : Jv(t, a, s) + } + return t + } + function Zv(A) { + return null != A && "object" == typeof A + } + function Xv(A) { + return Zv(A) && "[object Arguments]" == Sv(A) + } + var _v = Object.prototype + , $v = _v.hasOwnProperty + , AI = _v.propertyIsEnumerable + , eI = Xv(function() { + return arguments + }()) ? Xv : function(A) { + return Zv(A) && $v.call(A, "callee") && !AI.call(A, "callee") + } + , tI = Array.isArray; + var iI = "object" == typeof A && A && !A.nodeType && A + , oI = iI && "object" == typeof module && module && !module.nodeType && module + , nI = oI && oI.exports === iI ? mv.Buffer : void 0 + , rI = (nI ? nI.isBuffer : void 0) || function() { + return !1 + } + , aI = /^(?:0|[1-9]\d*)$/; + function sI(A, e) { + var t = typeof A; + return !!(e = null == e ? 9007199254740991 : e) && ("number" == t || "symbol" != t && aI.test(A)) && A > -1 && A % 1 == 0 && e > A + } + function lI(A) { + return "number" == typeof A && A > -1 && A % 1 == 0 && 9007199254740991 >= A + } + var cI = {}; + function hI(A) { + return function(e) { + return A(e) + } + } + cI["[object Float32Array]"] = cI["[object Float64Array]"] = cI["[object Int8Array]"] = cI["[object Int16Array]"] = cI["[object Int32Array]"] = cI["[object Uint8Array]"] = cI["[object Uint8ClampedArray]"] = cI["[object Uint16Array]"] = cI["[object Uint32Array]"] = !0, + cI["[object Arguments]"] = cI["[object Array]"] = cI["[object ArrayBuffer]"] = cI["[object Boolean]"] = cI["[object DataView]"] = cI["[object Date]"] = cI["[object Error]"] = cI["[object Function]"] = cI["[object Map]"] = cI["[object Number]"] = cI["[object Object]"] = cI["[object RegExp]"] = cI["[object Set]"] = cI["[object String]"] = cI["[object WeakMap]"] = !1; + var dI = "object" == typeof A && A && !A.nodeType && A + , pI = dI && "object" == typeof module && module && !module.nodeType && module + , gI = pI && pI.exports === dI && uv.process + , uI = function() { + try { + var A = pI && pI.require && pI.require("util").types; + return A || gI && gI.binding && gI.binding("util") + } catch (A) {} + }() + , fI = uI && uI.isTypedArray + , mI = fI ? hI(fI) : function(A) { + return Zv(A) && lI(A.length) && !!cI[Sv(A)] + } + , CI = Object.prototype.hasOwnProperty; + function yI(A, e) { + var t = tI(A) + , i = !t && eI(A) + , o = !t && !i && rI(A) + , n = !t && !i && !o && mI(A) + , r = t || i || o || n + , a = r ? function(A, e) { + for (var t = -1, i = Array(A); ++t < A; ) + i[t] = e(t); + return i + }(A.length, String) : [] + , s = a.length; + for (var l in A) + !e && !CI.call(A, l) || r && ("length" == l || o && ("offset" == l || "parent" == l) || n && ("buffer" == l || "byteLength" == l || "byteOffset" == l) || sI(l, s)) || a.push(l); + return a + } + var vI = Object.prototype; + function II(A) { + var e = A && A.constructor; + return A === ("function" == typeof e && e.prototype || vI) + } + function EI(A, e) { + return function(t) { + return A(e(t)) + } + } + var BI = EI(Object.keys, Object) + , xI = Object.prototype.hasOwnProperty; + function SI(A) { + return null != A && lI(A.length) && !Mv(A) + } + function wI(A) { + return SI(A) ? yI(A) : function(A) { + if (!II(A)) + return BI(A); + var e = []; + for (var t in Object(A)) + xI.call(A, t) && "constructor" != t && e.push(t); + return e + }(A) + } + var MI = Object.prototype.hasOwnProperty; + function bI(A) { + if (!wv(A)) + return function(A) { + var e = []; + if (null != A) + for (var t in Object(A)) + e.push(t); + return e + }(A); + var e = II(A) + , t = []; + for (var i in A) + ("constructor" != i || !e && MI.call(A, i)) && t.push(i); + return t + } + function UI(A) { + return SI(A) ? yI(A, !0) : bI(A) + } + var FI = "object" == typeof A && A && !A.nodeType && A + , KI = FI && "object" == typeof module && module && !module.nodeType && module + , QI = KI && KI.exports === FI ? mv.Buffer : void 0 + , RI = QI ? QI.allocUnsafe : void 0; + function TI() { + return [] + } + var kI = Object.prototype.propertyIsEnumerable + , DI = Object.getOwnPropertySymbols + , LI = DI ? function(A) { + return null == A ? [] : (A = Object(A), + function(A, e) { + for (var t = -1, i = null == A ? 0 : A.length, o = 0, n = []; ++t < i; ) { + var r = A[t]; + e(r, t, A) && (n[o++] = r) + } + return n + }(DI(A), (function(e) { + return kI.call(A, e) + } + ))) + } + : TI; + function NI(A, e) { + for (var t = -1, i = e.length, o = A.length; ++t < i; ) + A[o + t] = e[t]; + return A + } + var OI = EI(Object.getPrototypeOf, Object) + , VI = Object.getOwnPropertySymbols ? function(A) { + for (var e = []; A; ) + NI(e, LI(A)), + A = OI(A); + return e + } + : TI; + function GI(A, e, t) { + var i = e(A); + return tI(A) ? i : NI(i, t(A)) + } + function PI(A) { + return GI(A, wI, LI) + } + function qI(A) { + return GI(A, UI, VI) + } + var jI = Dv(mv, "DataView") + , HI = Dv(mv, "Promise") + , YI = Dv(mv, "Set") + , WI = Dv(mv, "WeakMap") + , JI = Qv(jI) + , zI = Qv(Lv) + , ZI = Qv(HI) + , XI = Qv(YI) + , _I = Qv(WI) + , $I = Sv; + (jI && "[object DataView]" != $I(new jI(new ArrayBuffer(1))) || Lv && "[object Map]" != $I(new Lv) || HI && "[object Promise]" != $I(HI.resolve()) || YI && "[object Set]" != $I(new YI) || WI && "[object WeakMap]" != $I(new WI)) && ($I = function(A) { + var e = Sv(A) + , t = "[object Object]" == e ? A.constructor : void 0 + , i = t ? Qv(t) : ""; + if (i) + switch (i) { + case JI: + return "[object DataView]"; + case zI: + return "[object Map]"; + case ZI: + return "[object Promise]"; + case XI: + return "[object Set]"; + case _I: + return "[object WeakMap]" + } + return e + } + ); + var AE = $I + , eE = Object.prototype.hasOwnProperty; + var tE = mv.Uint8Array; + function iE(A) { + var e = new A.constructor(A.byteLength); + return new tE(e).set(new tE(A)), + e + } + var oE = /\w*$/; + var nE = Cv ? Cv.prototype : void 0 + , rE = nE ? nE.valueOf : void 0; + function aE(A, e, t) { + var i, o = A.constructor; + switch (e) { + case "[object ArrayBuffer]": + return iE(A); + case "[object Boolean]": + case "[object Date]": + return new o(+A); + case "[object DataView]": + return function(A, e) { + var t = e ? iE(A.buffer) : A.buffer; + return new A.constructor(t,A.byteOffset,A.byteLength) + }(A, t); + case "[object Float32Array]": + case "[object Float64Array]": + case "[object Int8Array]": + case "[object Int16Array]": + case "[object Int32Array]": + case "[object Uint8Array]": + case "[object Uint8ClampedArray]": + case "[object Uint16Array]": + case "[object Uint32Array]": + return function(A, e) { + var t = e ? iE(A.buffer) : A.buffer; + return new A.constructor(t,A.byteOffset,A.length) + }(A, t); + case "[object Map]": + return new o; + case "[object Number]": + case "[object String]": + return new o(A); + case "[object RegExp]": + return function(A) { + var e = new A.constructor(A.source,oE.exec(A)); + return e.lastIndex = A.lastIndex, + e + }(A); + case "[object Set]": + return new o; + case "[object Symbol]": + return i = A, + rE ? Object(rE.call(i)) : {} + } + } + var sE = Object.create + , lE = function() { + function A() {} + return function(e) { + if (!wv(e)) + return {}; + if (sE) + return sE(e); + A.prototype = e; + var t = new A; + return A.prototype = void 0, + t + } + }(); + var cE = uI && uI.isMap + , hE = cE ? hI(cE) : function(A) { + return Zv(A) && "[object Map]" == AE(A) + } + ; + var dE = uI && uI.isSet + , pE = dE ? hI(dE) : function(A) { + return Zv(A) && "[object Set]" == AE(A) + } + , gE = {}; + function uE(A, e, t, i, o, n) { + var r, a = 1 & e, s = 2 & e, l = 4 & e; + if (t && (r = o ? t(A, i, o, n) : t(A)), + void 0 !== r) + return r; + if (!wv(A)) + return A; + var c = tI(A); + if (c) { + if (r = function(A) { + var e = A.length + , t = new A.constructor(e); + return e && "string" == typeof A[0] && eE.call(A, "index") && (t.index = A.index, + t.input = A.input), + t + }(A), + !a) + return function(A, e) { + var t = -1 + , i = A.length; + for (e || (e = Array(i)); ++t < i; ) + e[t] = A[t]; + return e + }(A, r) + } else { + var h = AE(A) + , d = "[object Function]" == h || "[object GeneratorFunction]" == h; + if (rI(A)) + return function(A, e) { + if (e) + return A.slice(); + var t = A.length + , i = RI ? RI(t) : new A.constructor(t); + return A.copy(i), + i + }(A, a); + if ("[object Object]" == h || "[object Arguments]" == h || d && !o) { + if (r = s || d ? {} : function(A) { + return "function" != typeof A.constructor || II(A) ? {} : lE(OI(A)) + }(A), + !a) + return s ? function(A, e) { + return zv(A, VI(A), e) + }(A, function(A, e) { + return A && zv(e, UI(e), A) + }(r, A)) : function(A, e) { + return zv(A, LI(A), e) + }(A, function(A, e) { + return A && zv(e, wI(e), A) + }(r, A)) + } else { + if (!gE[h]) + return o ? A : {}; + r = aE(A, h, a) + } + } + n || (n = new jv); + var p = n.get(A); + if (p) + return p; + n.set(A, r), + pE(A) ? A.forEach((function(i) { + r.add(uE(i, e, t, i, A, n)) + } + )) : hE(A) && A.forEach((function(i, o) { + r.set(o, uE(i, e, t, o, A, n)) + } + )); + var g = l ? s ? qI : PI : s ? keysIn : wI + , u = c ? void 0 : g(A); + return function(A, e) { + for (var t = -1, i = null == A ? 0 : A.length; ++t < i && !1 !== e(A[t], t, A); ) + ; + }(u || A, (function(i, o) { + u && (i = A[o = i]), + Jv(r, o, uE(i, e, t, o, A, n)) + } + )), + r + } + gE["[object Arguments]"] = gE["[object Array]"] = gE["[object ArrayBuffer]"] = gE["[object DataView]"] = gE["[object Boolean]"] = gE["[object Date]"] = gE["[object Float32Array]"] = gE["[object Float64Array]"] = gE["[object Int8Array]"] = gE["[object Int16Array]"] = gE["[object Int32Array]"] = gE["[object Map]"] = gE["[object Number]"] = gE["[object Object]"] = gE["[object RegExp]"] = gE["[object Set]"] = gE["[object String]"] = gE["[object Symbol]"] = gE["[object Uint8Array]"] = gE["[object Uint8ClampedArray]"] = gE["[object Uint16Array]"] = gE["[object Uint32Array]"] = !0, + gE["[object Error]"] = gE["[object Function]"] = gE["[object WeakMap]"] = !1; + function fE(A) { + return uE(A, 5) + } + var mE = function() { + var A, e = { + defaultRadius: 40, + defaultRenderer: "canvas2d", + defaultGradient: { + .25: "rgb(0,0,255)", + .55: "rgb(0,255,0)", + .85: "yellow", + 1: "rgb(255,0,0)" + }, + defaultMaxOpacity: 1, + defaultMinOpacity: 0, + defaultBlur: .85, + defaultXField: "x", + defaultYField: "y", + defaultValueField: "value", + plugins: {} + }, t = function() { + var A = function(A) { + this._coordinator = {}, + this._data = [], + this._radi = [], + this._min = 10, + this._max = 1, + this._xField = A.xField || A.defaultXField, + this._yField = A.yField || A.defaultYField, + this._valueField = A.valueField || A.defaultValueField, + A.radius && (this._cfgRadius = A.radius) + } + , t = e.defaultRadius; + return A.prototype = { + _organiseData: function(A, e) { + var i = A[this._xField] + , o = A[this._yField] + , n = this._radi + , r = this._data + , a = this._max + , s = this._min + , l = A[this._valueField] || 1 + , c = A.radius || this._cfgRadius || t; + r[i] || (r[i] = [], + n[i] = []), + r[i][o] ? r[i][o] += l : (r[i][o] = l, + n[i][o] = c); + var h = r[i][o]; + return h > a ? (e ? this.setDataMax(h) : this._max = h, + !1) : s > h ? (e ? this.setDataMin(h) : this._min = h, + !1) : { + x: i, + y: o, + value: l, + radius: c, + min: s, + max: a + } + }, + _unOrganizeData: function() { + var A = [] + , e = this._data + , t = this._radi; + for (var i in e) + for (var o in e[i]) + A.push({ + x: i, + y: o, + radius: t[i][o], + value: e[i][o] + }); + return { + min: this._min, + max: this._max, + data: A + } + }, + _onExtremaChange: function() { + this._coordinator.emit("extremachange", { + min: this._min, + max: this._max + }) + }, + addData: function() { + if (arguments[0].length > 0) + for (var A = arguments[0], e = A.length; e--; ) + this.addData.call(this, A[e]); + else { + var t = this._organiseData(arguments[0], !0); + t && (0 === this._data.length && (this._min = this._max = t.value), + this._coordinator.emit("renderpartial", { + min: this._min, + max: this._max, + data: [t] + })) + } + return this + }, + setData: function(A) { + var e = A.data + , t = e.length; + this._data = [], + this._radi = []; + for (var i = 0; t > i; i++) + this._organiseData(e[i], !1); + return this._max = A.max, + this._min = A.min || 0, + this._onExtremaChange(), + this._coordinator.emit("renderall", this._getInternalData()), + this + }, + removeData: function() {}, + setDataMax: function(A) { + return this._max = A, + this._onExtremaChange(), + this._coordinator.emit("renderall", this._getInternalData()), + this + }, + setDataMin: function(A) { + return this._min = A, + this._onExtremaChange(), + this._coordinator.emit("renderall", this._getInternalData()), + this + }, + setCoordinator: function(A) { + this._coordinator = A + }, + _getInternalData: function() { + return { + max: this._max, + min: this._min, + data: this._data, + radi: this._radi + } + }, + getData: function() { + return this._unOrganizeData() + } + }, + A + }(), i = function() { + var A = function(A) { + var e = A.gradient || A.defaultGradient + , t = document.createElement("canvas") + , i = t.getContext("2d"); + t.width = 256, + t.height = 1; + var o = i.createLinearGradient(0, 0, 256, 1); + for (var n in e) + o.addColorStop(n, e[n]); + return i.fillStyle = o, + i.fillRect(0, 0, 256, 1), + i.getImageData(0, 0, 256, 1).data + } + , e = function(A, e) { + var t = document.createElement("canvas") + , i = t.getContext("2d") + , o = A + , n = A; + if (t.width = t.height = 2 * A, + 1 == e) + i.beginPath(), + i.arc(o, n, A, 0, 2 * Math.PI, !1), + i.fillStyle = "rgba(0,0,0,1)", + i.fill(); + else { + var r = i.createRadialGradient(o, n, A * e, o, n, A); + r.addColorStop(0, "rgba(0,0,0,1)"), + r.addColorStop(1, "rgba(0,0,0,0)"), + i.fillStyle = r, + i.fillRect(0, 0, 2 * A, 2 * A) + } + return t + }; + function t(e) { + var t = e.container + , i = this.shadowCanvas = document.createElement("canvas") + , o = this.canvas = e.canvas || document.createElement("canvas") + , n = (this._renderBoundaries = [1e4, 1e4, 0, 0], + getComputedStyle(e.container) || {}); + o.className = "heatmap-canvas", + this._width = o.width = i.width = e.width || +n.width.replace(/px/, ""), + this._height = o.height = i.height = e.height || +n.height.replace(/px/, ""), + this.shadowCtx = i.getContext("2d"), + this.ctx = o.getContext("2d"), + o.style.cssText = i.style.cssText = "position:absolute;left:0;top:0;", + t.style.position = "relative", + t.appendChild(o), + this._palette = A(e), + this._templates = {}, + this._setStyles(e) + } + return t.prototype = { + renderPartial: function(A) { + A.data.length > 0 && (this._drawAlpha(A), + this._colorize()) + }, + renderAll: function(A) { + this._clear(), + A.data.length > 0 && (this._drawAlpha(function(A) { + for (var e = [], t = A.min, i = A.max, o = A.radi, n = (A = A.data, + Object.keys(A)), r = n.length; r--; ) + for (var a = n[r], s = Object.keys(A[a]), l = s.length; l--; ) { + var c = s[l]; + e.push({ + x: a, + y: c, + value: A[a][c], + radius: o[a][c] + }) + } + return { + min: t, + max: i, + data: e + } + }(A)), + this._colorize()) + }, + _updateGradient: function(e) { + this._palette = A(e) + }, + updateConfig: function(A) { + A.gradient && this._updateGradient(A), + this._setStyles(A) + }, + setDimensions: function(A, e) { + this._width = A, + this._height = e, + this.canvas.width = this.shadowCanvas.width = A, + this.canvas.height = this.shadowCanvas.height = e + }, + _clear: function() { + this.shadowCtx.clearRect(0, 0, this._width, this._height), + this.ctx.clearRect(0, 0, this._width, this._height) + }, + _setStyles: function(A) { + this._blur = 0 == A.blur ? 0 : A.blur || A.defaultBlur, + A.backgroundColor && (this.canvas.style.backgroundColor = A.backgroundColor), + this._width = this.canvas.width = this.shadowCanvas.width = A.width || this._width, + this._height = this.canvas.height = this.shadowCanvas.height = A.height || this._height, + this._opacity = 255 * (A.opacity || 0), + this._maxOpacity = 255 * (A.maxOpacity || A.defaultMaxOpacity), + this._minOpacity = 255 * (A.minOpacity || A.defaultMinOpacity), + this._useGradientOpacity = !!A.useGradientOpacity + }, + _drawAlpha: function(A) { + for (var t = this._min = A.min, i = this._max = A.max, o = (A = A.data || []).length, n = 1 - this._blur; o--; ) { + var r, a = A[o], s = a.x, l = a.y, c = a.radius, h = Math.min(a.value, i), d = s - c, p = l - c, g = this.shadowCtx; + this._templates[c] ? r = this._templates[c] : this._templates[c] = r = e(c, n); + var u = (h - t) / (i - t); + g.globalAlpha = .01 > u ? .01 : u, + g.drawImage(r, d, p), + this._renderBoundaries[0] > d && (this._renderBoundaries[0] = d), + this._renderBoundaries[1] > p && (this._renderBoundaries[1] = p), + d + 2 * c > this._renderBoundaries[2] && (this._renderBoundaries[2] = d + 2 * c), + p + 2 * c > this._renderBoundaries[3] && (this._renderBoundaries[3] = p + 2 * c) + } + }, + _colorize: function() { + var A = this._renderBoundaries[0] + , e = this._renderBoundaries[1] + , t = this._renderBoundaries[2] - A + , i = this._renderBoundaries[3] - e + , o = this._width + , n = this._height + , r = this._opacity + , a = this._maxOpacity + , s = this._minOpacity + , l = this._useGradientOpacity; + 0 > A && (A = 0), + 0 > e && (e = 0), + A + t > o && (t = o - A), + e + i > n && (i = n - e); + for (var c = this.shadowCtx.getImageData(A, e, t, i), h = c.data, d = h.length, p = this._palette, g = 3; d > g; g += 4) { + var u, f = h[g], m = 4 * f; + if (m) + u = r > 0 ? r : a > f ? s > f ? s : f : a, + h[g - 3] = p[m], + h[g - 2] = p[m + 1], + h[g - 1] = p[m + 2], + h[g] = l ? p[m + 3] : u + } + this.shadowCtx.putImageData(c, A, e), + this.ctx.putImageData(c, A, e), + this._renderBoundaries = [1e3, 1e3, 0, 0] + }, + getValueAt: function(A) { + var e = this.shadowCtx.getImageData(A.x, A.y, 1, 1).data[3]; + return Math.abs(this._max - this._min) * (e / 255) >> 0 + }, + getDataURL: function() { + return this.canvas.toDataURL() + } + }, + t + }(), o = (A = !1, + "canvas2d" === e.defaultRenderer && (A = i), + A), n = function() { + for (var A = {}, e = arguments.length, t = 0; e > t; t++) { + var i = arguments[t]; + for (var o in i) + A[o] = i[o] + } + return A + }, r = function() { + var A = function() { + function A() { + this.cStore = {} + } + return A.prototype = { + on: function(A, e, t) { + var i = this.cStore; + i[A] || (i[A] = []), + i[A].push((function(A) { + return e.call(t, A) + } + )) + }, + emit: function(A, e) { + var t = this.cStore; + if (t[A]) + for (var i = t[A].length, o = 0; i > o; o++) { + (0, + t[A][o])(e) + } + } + }, + A + }() + , i = function(A) { + var e = A._renderer + , t = A._coordinator + , i = A._store; + t.on("renderpartial", e.renderPartial, e), + t.on("renderall", e.renderAll, e), + t.on("extremachange", (function(e) { + A._config.onExtremaChange && A._config.onExtremaChange({ + min: e.min, + max: e.max, + gradient: A._config.gradient || A._config.defaultGradient + }) + } + )), + i.setCoordinator(t) + }; + function r() { + var r = this._config = n(e, arguments[0] || {}); + if (this._coordinator = new A, + r.plugin) { + var a = r.plugin; + if (!e.plugins[a]) + throw new Error("Plugin '" + a + "' not found. Maybe it was not registered."); + var s = e.plugins[a]; + this._renderer = new s.renderer(r), + this._store = new s.store(r) + } else + this._renderer = new o(r), + this._store = new t(r); + i(this) + } + return r.prototype = { + addData: function() { + return this._store.addData.apply(this._store, arguments), + this + }, + removeData: function() { + return this._store.removeData && this._store.removeData.apply(this._store, arguments), + this + }, + setData: function() { + return this._store.setData.apply(this._store, arguments), + this + }, + setDataMax: function() { + return this._store.setDataMax.apply(this._store, arguments), + this + }, + setDataMin: function() { + return this._store.setDataMin.apply(this._store, arguments), + this + }, + configure: function(A) { + return this._config = n(this._config, A), + this._renderer.updateConfig(this._config), + this._coordinator.emit("renderall", this._store._getInternalData()), + this + }, + repaint: function() { + return this._coordinator.emit("renderall", this._store._getInternalData()), + this + }, + getData: function() { + return this._store.getData() + }, + getDataURL: function() { + return this._renderer.getDataURL() + }, + getValueAt: function(A) { + return this._store.getValueAt ? this._store.getValueAt(A) : this._renderer.getValueAt ? this._renderer.getValueAt(A) : null + } + }, + r + }(); + return { + create: function(A) { + return new r(A) + }, + register: function(A, t) { + e.plugins[A] = t + } + } + }() + , CE = function() { + function A(e) { + cc(this, A), + this.viewer = e.viewer3D, + this.id = e.id, + this.boundary = [], + this.quaternion = new f, + this.xMin = 1 / 0, + this.yMax = -1 / 0, + this.zoomRate = .05 + } + return dc(A, [{ + key: "createInstance", + value: function(A, e) { + var t = document.createElement("div"); + t.id = "heatmap-" + this.id || (new Date).getTime(), + t.style.width = "10px", + t.style.height = "10px", + t.style.position = "absolute", + t.style.top = "0", + t.style.left = "0", + t.style.zIndex = "-10", + t.style.overflow = "scroll"; + var i = document.createElement("div"); + i.style.width = A + "px", + i.style.height = e + "px", + t.appendChild(i), + this.viewer.viewportDiv.appendChild(t), + this.container = t, + this.heatmap = mE.create({ + container: i + }) + } + }, { + key: "getHeatmap", + value: function() { + return this.heatmap + } + }, { + key: "isPlane", + value: function(A) { + if (3 > A.length) + return !1; + if (3 === A.length) + return !0; + for (var e = !0, t = (new y).subVectors(A[0], A[1]), i = (new y).subVectors(A[1], A[2]), o = t.cross(i).normalize(), n = 3; A.length > n; n++) { + var r = (new y).subVectors(A[n - 1], A[n]).cross(i).normalize() + , a = .001; + if (Math.abs(Math.abs(o.x) - Math.abs(r.x)) > a || Math.abs(Math.abs(o.y) - Math.abs(r.y)) > a || Math.abs(Math.abs(o.z) - Math.abs(r.z)) > a) { + e = !1; + break + } + } + return e + } + }, { + key: "addHeatmap", + value: function(A, e) { + var t = fE(e.boundary); + if (e.data.data.forEach((function(A) { + t.push(A.point) + } + )), + this.isPlane(t)) { + this.boundary = fE(e.boundary); + var i = new f + , o = (new y).subVectors(e.boundary[1], e.boundary[0]).cross((new y).subVectors(e.boundary[2], e.boundary[1])); + i.setFromUnitVectors(o.normalize(), new y(0,0,1)); + var n = fE(e.boundary).map((function(A) { + return A.applyQuaternion(i) + } + )); + this.quaternion = i.clone(); + var r = 1 / 0 + , a = -1 / 0 + , s = 1 / 0 + , l = -1 / 0; + n.forEach((function(A) { + r > A.x && (r = A.x), + A.x > a && (a = A.x), + s > A.y && (s = A.y), + A.y > l && (l = A.y) + } + )); + var c = a - r + , h = l - s; + this.xMin = r, + this.yMax = l; + var d = e.quality || .05; + this.zoomRate = d, + this.createInstance(Math.round(c * d), Math.round(h * d)); + var p = e.data.data.map((function(A) { + return A.point.applyQuaternion(i) + } + )) + , g = []; + e.data.data.forEach((function(A, e) { + var t = p[e]; + g.push({ + x: Math.round((t.x - r) * d), + y: Math.round((l - t.y) * d), + value: A.value, + radius: (A.radius || 1e3) * d + }) + } + )), + this.heatmap.setData({ + min: e.data.min, + max: e.data.max, + data: g + }); + var u = new ov(n) + , m = new jA({ + map: new en(this.container.querySelector("canvas")), + side: 2, + transparent: !0, + polygonOffset: !0, + polygonOffsetFactor: -1, + polygonOffsetUnits: -1 + }) + , C = new Kf(u,m); + C.visible = !0; + var v = new M; + v.elements[14] = n[0].z; + var I = new M; + return I.makeRotationFromQuaternion(i.inverse()), + C.applyMatrix4(I.multiply(v)), + this.viewer.addExternalObject(A, C), + C.disPickable = !0, + this.viewer.disableComponentsSelectionByKey(A), + !0 + } + return !1 + } + }, { + key: "updateHeatmap", + value: function(A) { + var e = this + , t = fE(this.boundary); + if (A.data.data.forEach((function(A) { + t.push(A.point) + } + )), + this.isPlane(t)) { + var i = [] + , o = A.data.data.map((function(A) { + return new y(A.point.x,A.point.y,A.point.z).applyQuaternion(e.quaternion) + } + )) + , n = this.zoomRate; + return A.data.data.forEach((function(A, t) { + var r = o[t]; + i.push({ + x: Math.round((r.x - e.xMin) * n), + y: Math.round((e.yMax - r.y) * n), + value: A.value, + radius: (A.radius || 1e3) * n + }) + } + )), + this.heatmap.setData({ + min: A.data.min, + max: A.data.max, + data: i + }), + this.viewer.getExternalObjectByName(A.id).material.map.needsUpdate = !0, + this.viewer.render(), + !0 + } + return !1 + } + }, { + key: "removeHeatmap", + value: function(A) { + this.viewer.removeExternalObjectByName(A), + this.viewer.viewportDiv.removeChild(this.container) + } + }]), + A + }() + , yE = function(A) { + this.maxEdgeLength = A + }; + yE.prototype.modify = function(A) { + for (var e, t = [], i = [], o = this.maxEdgeLength * this.maxEdgeLength, n = 0, r = A.faceVertexUvs.length; r > n; n++) + i[n] = []; + for (n = 0, + r = A.faces.length; r > n; n++) { + var a = A.faces[n]; + if (a instanceof GA) { + var s = a.a + , l = a.b + , c = a.c + , h = A.vertices[s] + , d = A.vertices[l] + , p = A.vertices[c] + , g = h.distanceToSquared(d) + , u = d.distanceToSquared(p) + , f = h.distanceToSquared(p); + if (g > o || u > o || f > o) { + var m = A.vertices.length + , C = a.clone() + , y = a.clone(); + if (g < u || g < f) + if (u < g || u < f) { + if ((v = h.clone()).lerp(p, .5), + C.a = s, + C.b = l, + C.c = m, + y.a = m, + y.b = l, + y.c = c, + 3 === a.vertexNormals.length) + (I = a.vertexNormals[0].clone()).lerp(a.vertexNormals[2], .5), + C.vertexNormals[2].copy(I), + y.vertexNormals[0].copy(I); + if (3 === a.vertexColors.length) + (E = a.vertexColors[0].clone()).lerp(a.vertexColors[2], .5), + C.vertexColors[2].copy(E), + y.vertexColors[0].copy(E); + e = 2 + } else { + if ((v = d.clone()).lerp(p, .5), + C.a = s, + C.b = l, + C.c = m, + y.a = m, + y.b = c, + y.c = s, + 3 === a.vertexNormals.length) + (I = a.vertexNormals[1].clone()).lerp(a.vertexNormals[2], .5), + C.vertexNormals[2].copy(I), + y.vertexNormals[0].copy(I), + y.vertexNormals[1].copy(a.vertexNormals[2]), + y.vertexNormals[2].copy(a.vertexNormals[0]); + if (3 === a.vertexColors.length) + (E = a.vertexColors[1].clone()).lerp(a.vertexColors[2], .5), + C.vertexColors[2].copy(E), + y.vertexColors[0].copy(E), + y.vertexColors[1].copy(a.vertexColors[2]), + y.vertexColors[2].copy(a.vertexColors[0]); + e = 1 + } + else { + var v, I, E; + if ((v = h.clone()).lerp(d, .5), + C.a = s, + C.b = m, + C.c = c, + y.a = m, + y.b = l, + y.c = c, + 3 === a.vertexNormals.length) + (I = a.vertexNormals[0].clone()).lerp(a.vertexNormals[1], .5), + C.vertexNormals[1].copy(I), + y.vertexNormals[0].copy(I); + if (3 === a.vertexColors.length) + (E = a.vertexColors[0].clone()).lerp(a.vertexColors[1], .5), + C.vertexColors[1].copy(E), + y.vertexColors[0].copy(E); + e = 0 + } + t.push(C, y), + A.vertices.push(v); + for (var B = 0, x = A.faceVertexUvs.length; x > B; B++) + if (A.faceVertexUvs[B].length) { + var S = A.faceVertexUvs[B][n] + , w = S[0] + , M = S[1] + , b = S[2]; + if (0 === e) { + (K = w.clone()).lerp(M, .5); + var U = [w.clone(), K.clone(), b.clone()] + , F = [K.clone(), M.clone(), b.clone()] + } else if (1 === e) { + (K = M.clone()).lerp(b, .5); + U = [w.clone(), M.clone(), K.clone()], + F = [K.clone(), b.clone(), w.clone()] + } else { + var K; + (K = w.clone()).lerp(b, .5); + U = [w.clone(), M.clone(), K.clone()], + F = [K.clone(), M.clone(), b.clone()] + } + i[B].push(U, F) + } + } else { + t.push(a); + for (B = 0, + x = A.faceVertexUvs.length; x > B; B++) + i[B].push(A.faceVertexUvs[B][n]) + } + } + } + A.faces = t, + A.faceVertexUvs = i + } + ; + var vE = function() { + function A(e) { + cc(this, A), + this.viewer = e.viewer3D, + this.id = e.id, + this.boundary = [], + this.quaternion = new f, + this.xMin = 1 / 0, + this.yMax = -1 / 0, + this.zoomRate = .05, + this._canvasSize = new s, + this.detailFactor = .5, + this._offsetToNagZ = !1, + this._mesh = void 0, + this._originalGeo = void 0, + this._currentGeo = void 0 + } + return dc(A, [{ + key: "createInstance", + value: function(A, e) { + var t = document.createElement("div"); + t.id = "heatmap-" + this.id || (new Date).getTime(), + t.style.width = "10px", + t.style.height = "10px", + t.style.position = "absolute", + t.style.top = "0", + t.style.left = "0", + t.style.zIndex = "-10", + t.style.overflow = "scroll"; + var i = document.createElement("div"); + i.style.width = A + "px", + i.style.height = e + "px", + this._canvas = i, + t.appendChild(i), + this.viewer.viewportDiv.appendChild(t), + this.container = t, + this.heatmap = mE.create({ + container: i + }), + this._canvasSize.set(A, e) + } + }, { + key: "getHeatmap", + value: function() { + return this.heatmap + } + }, { + key: "isPlane", + value: function(A) { + if (3 > A.length) + return !1; + if (3 === A.length) + return !0; + for (var e = !0, t = (new y).subVectors(A[0], A[1]), i = (new y).subVectors(A[1], A[2]), o = t.cross(i).normalize(), n = 3; A.length > n; n += 1) { + var r = (new y).subVectors(A[n - 1], A[n]).cross(i).normalize() + , a = .001; + if (Math.abs(Math.abs(o.x) - Math.abs(r.x)) > a || Math.abs(Math.abs(o.y) - Math.abs(r.y)) > a || Math.abs(Math.abs(o.z) - Math.abs(r.z)) > a) { + e = !1; + break + } + } + return e + } + }, { + key: "addHeatmap", + value: function(A, e) { + var t = fE(e.boundary); + if (e.data.data.forEach((function(A) { + t.push(A.point) + } + )), + this.isPlane(t)) { + this.boundary = fE(e.boundary); + var i = new f + , o = (new y).subVectors(e.boundary[1], e.boundary[0]).cross((new y).subVectors(e.boundary[2], e.boundary[1])); + i.setFromUnitVectors(o.normalize(), new y(0,0,1)), + 2 * o.angleTo(new y(0,0,1)) > Math.PI && (this._offsetToNagZ = !0); + var n = fE(e.boundary).map((function(A) { + return A.applyQuaternion(i) + } + )); + this.quaternion = i.clone(); + var r = 1 / 0 + , a = -1 / 0 + , s = 1 / 0 + , l = -1 / 0; + n.forEach((function(A) { + r > A.x && (r = A.x), + A.x > a && (a = A.x), + s > A.y && (s = A.y), + A.y > l && (l = A.y) + } + )); + var c = a - r + , h = l - s; + this.xMin = r, + this.yMax = l; + var d = e.quality || .05; + this.zoomRate = d, + this.createInstance(Math.round(c * d), Math.round(h * d)); + var p = e.data.data.map((function(A) { + return A.point.applyQuaternion(i) + } + )) + , g = []; + e.data.data.forEach((function(A, e) { + var t = p[e]; + g.push({ + x: Math.round((t.x - r) * d), + y: Math.round((l - t.y) * d), + value: A.value, + radius: (A.radius || 1e3) * d + }) + } + )), + this.heatmap.setData({ + min: e.data.min, + max: e.data.max, + data: g + }); + var u = new ov(n) + , m = new De; + m.fromBufferGeometry(u), + this._originalGeo = m.clone(); + var C = this._tessellateGeometry(m); + u = (new he).fromGeometry(C), + this._offsetZ(u); + var v = new jA({ + map: new en(this.container.querySelector("canvas")), + transparent: !0, + side: 2, + polygonOffset: !0, + polygonOffsetFactor: -1, + polygonOffsetUnits: -1, + wireframe: !1 + }) + , I = new Kf(u,v); + I.visible = !0; + var E = new M; + E.elements[14] = n[0].z; + var B = new M; + return B.makeRotationFromQuaternion(i.inverse()), + I.applyMatrix4(B.multiply(E)), + this.viewer.addExternalObject(A, I), + I.disPickable = !0, + this.viewer.disableComponentsSelectionByKey(A), + this._mesh = I, + !0 + } + return !1 + } + }, { + key: "updateHeatmap", + value: function(A) { + var e = this + , t = fE(this.boundary); + if (A.data.data.forEach((function(A) { + t.push(A.point) + } + )), + this.isPlane(t)) { + var i = [] + , o = A.data.data.map((function(A) { + return new y(A.point.x,A.point.y,A.point.z).applyQuaternion(e.quaternion) + } + )) + , n = this.zoomRate; + A.data.data.forEach((function(A, t) { + var r = o[t]; + i.push({ + x: Math.round((r.x - e.xMin) * n), + y: Math.round((e.yMax - r.y) * n), + value: A.value, + radius: (A.radius || 1e3) * n + }) + } + )), + this.heatmap.setData({ + min: A.data.min, + max: A.data.max, + data: i + }); + var r = this.viewer.getExternalObjectByName(A.id); + if (r) + return r.material.map.needsUpdate = !0, + this.viewer.render(), + !0 + } + return !1 + } + }, { + key: "removeHeatmap", + value: function(A) { + this.viewer.removeExternalObjectByName(A), + this.viewer.viewportDiv.removeChild(this.container) + } + }, { + key: "setDetailFactor", + value: function(A) { + if (this.detailFactor !== A && (this.detailFactor = A, + this._originalGeo && this._mesh)) { + var e = this._originalGeo.clone() + , t = this._tessellateGeometry(e) + , i = (new he).fromGeometry(t); + this._offsetZ(i), + this._mesh.geometry = i + } + } + }, { + key: "_tessellateGeometry", + value: function(A) { + for (var e = new yE(100), t = 10 + Math.round(10 * this.detailFactor), i = 0; t > i; i += 1) + e.modify(A); + return A + } + }, { + key: "_easeInOutQuad", + value: function(A) { + return 1 - (1 - A) * (1 - A) + } + }, { + key: "_offsetZ", + value: function(A) { + for (var e = A.getAttribute("uv").array, t = A.getAttribute("position").array, i = this.heatmap.getData(), o = 0, n = e.length; n > o; o += 2) { + var r = (this.heatmap.getValueAt({ + x: e[o] * this._canvasSize.x, + y: (1 - e[o + 1]) * this._canvasSize.y + }) - i.min) / (i.max - i.min); + r = this._easeInOutQuad(r), + t[o / 2 * 3 + 2] = 1e3 * r * (this._offsetToNagZ ? -1 : 1) + } + A.getAttribute("position").needsUpdate = !0 + } + }]), + A + }() + , IE = function() { + function A(e, t) { + cc(this, A), + this.viewer = t, + this.maxHeatValue = 1 / 0, + this.minHeatValue = -1 / 0, + this._init(e) + } + return dc(A, [{ + key: "show", + value: function(A) { + var e = this; + function t(A) { + if (0 === A.uniforms.heatmapPoints.value.length) + A.fragmentShader = "#define HEATMAPPOINTSCOUNT " + e.shaderData.heatmapPoints.length + "\n" + A.fragmentShader, + A.vertexShader = "#define HEATMAPPOINTSCOUNT " + e.shaderData.heatmapPoints.length + "\n" + A.vertexShader; + else { + var t = "#define HEATMAPPOINTSCOUNT " + A.uniforms.heatmapPoints.value.length; + A.fragmentShader = A.fragmentShader.replace(t, "#define HEATMAPPOINTSCOUNT " + e.shaderData.heatmapPoints.length), + A.vertexShader = A.vertexShader.replace(t, "#define HEATMAPPOINTSCOUNT " + e.shaderData.heatmapPoints.length) + } + A.uniforms.heatmapPoints.value = e.shaderData.heatmapPoints, + A.uniforms.heatmapTexture.value = e.shaderData.heatmapTexture, + A.needsUpdate = !0 + } + if (A) { + if (!this.viewer.getViewerImpl().getModelByComponentKey(A)) + return; + var i = this.viewer.getViewerImpl().modelManager.getComponent(A); + if (i && i.length > 0) + for (var o = i[0].mesh.material, n = 0, r = o.length; r > n; n += 1) + o[n] = o[n].clone(), + t(o[n]) + } else + this.shaderData.heatmapPoints && this.shaderData.heatmapTexture && (this.viewer.getViewerImpl().getModelManager().traverseModels((function(A) { + var e = A.materialManager.materials; + for (var i in e) { + t(e[i]) + } + } + )), + this.viewer.syncRender()) + } + }, { + key: "hide", + value: function() { + var A = this; + this.shaderData.heatmapPoints && this.shaderData.heatmapTexture && (this.viewer.getViewerImpl().getModelManager().traverseModels((function(e) { + var t = e.materialManager.materials; + for (var i in t) { + var o = t[i]; + if (o.uniforms.heatmapPoints.value.length > 0) { + o.uniforms.heatmapPoints.value = [], + o.uniforms.heatmapTexture.value = null; + var n = "#define HEATMAPPOINTSCOUNT " + A.shaderData.heatmapPoints.length; + o.fragmentShader = o.fragmentShader.replace(n, ""), + o.vertexShader = o.vertexShader.replace(n, ""), + o.needsUpdate = !0 + } + } + } + )), + this.viewer.render()) + } + }, { + key: "removeHeatmap", + value: function() { + this.hide(), + this.shaderData.heatmapPoints && delete this.shaderData.heatmapPoints, + this.shaderData.heatmapTexture && delete this.shaderData.heatmapTexture + } + }, { + key: "updateHeatmap", + value: function(A) { + var e = A.data; + this.maxHeatValue = e.max ? e.max : 1 / 0, + this.minHeatValue = e.min ? e.min : -1 / 0, + this.shaderData.heatmapPoints = this._createHeatmapBuffer(A.data), + this.show() + } + }, { + key: "_init", + value: function(A) { + var e = A.data; + this.maxHeatValue = e.max ? e.max : 1 / 0, + this.minHeatValue = e.min ? e.min : -1 / 0, + this.shaderData = { + heatmapPoints: this._createHeatmapBuffer(e), + heatmapTexture: this._createHeatmapTexture() + } + } + }, { + key: "_createHeatmapBuffer", + value: function(A) { + if (A.data && 0 !== A.data.length) { + if (this.maxHeatValue === 1 / 0 || this.minHeatValue === -1 / 0) + for (var e = 0, t = A.data.length; t > e; e += 1) { + var i = A.data[e]; + i.value > this.maxHeatValue && (this.maxHeatValue = i.value), + this.minHeatValue > i.value && (this.minHeatValue = i.value) + } + for (var o = [], n = 0, r = A.data.length; r > n; n += 1) { + var a = A.data[n] + , s = Math.max(this.minHeatValue, Math.min(a.value, this.maxHeatValue)); + o.push(a.point.x, a.point.y, a.point.z, (s - this.minHeatValue) / (this.maxHeatValue - this.minHeatValue), a.radius ? a.radius : 1e3) + } + return new Float32Array(o) + } + } + }, { + key: "_createHeatmapTexture", + value: function() { + var A = document.createElement("canvas"); + A.width = 256, + A.height = 1; + var e = A.getContext("2d") + , t = e.createLinearGradient(0, 0, 256, 1) + , i = { + 0: "#44f", + .1: "#0ff", + .2: "#0f0", + .4: "#ff0", + 1: "#f00" + }; + for (var o in i) + t.addColorStop(o, i[o]); + return e.fillStyle = t, + e.fillRect(0, 0, 256, 1), + new en(A) + } + }]), + A + }() + , EE = function() { + function A(e, t) { + cc(this, A), + this.heatSpheres = [], + this.viewer = t, + this.maxHeatValue = 1 / 0, + this.minHeatValue = -1 / 0, + this._animating = !1, + this._lastAnimateTime = void 0, + this._localTime = 0, + this._duration = 2e3, + this._init(e) + } + return dc(A, [{ + key: "getColorIndexAndValueOfHeatValue", + value: function(e) { + A.colorBoard || (A.colorBoard = this._createColorBoard()); + var t = (Math.max(this.minHeatValue, Math.min(e, this.maxHeatValue)) - this.minHeatValue) / (this.maxHeatValue - this.minHeatValue) * 255 + , i = 4 * (t = Math.round(t)); + return { + color: new LA(A.colorBoard[i] / 255,A.colorBoard[i + 1] / 255,A.colorBoard[i + 2] / 255), + index: t + } + } + }, { + key: "updateHeatmap", + value: function(A) { + this.removeHeatmap(), + this._init(A), + this.startAnimation(this._duration) + } + }, { + key: "startAnimation", + value: function(A) { + var e = this; + this._animating || (this._animating = !0, + A && (this._duration = A), + requestAnimationFrame((function(A) { + return e._animate(A) + } + ))) + } + }, { + key: "stopAnimation", + value: function() { + this._animating = !1, + this._lastAnimateTime = void 0, + this._localTime = 0 + } + }, { + key: "removeHeatmap", + value: function() { + var A = this; + this.stopAnimation(), + this.heatSpheres.forEach((function(e) { + A.viewer.removeExternalObjectByName(e.uuid) + } + )) + } + }, { + key: "_animate", + value: function(e) { + var t = this + , i = this._lastAnimateTime ? e - this._lastAnimateTime : 0; + if (!this._lastAnimateTime || i > 100) { + this._localTime += i / this._duration, + 1 > this._localTime || (this._localTime = 0); + var o = this._easeOutSine(this._localTime); + this.heatSpheres.forEach((function(e) { + e.scale.set(o, o, o), + e.updateMatrixWorld(!0); + var i = e.userData._heatColorIndex; + i = 4 * Math.round(i * (1 - t._localTime)), + e.material.color.setRGB(A.colorBoard[i] / 255, A.colorBoard[i + 1] / 255, A.colorBoard[i + 2] / 255), + e.material.needsUpdate = !0 + } + )), + this.viewer.render(), + this._lastAnimateTime = e + } + this._animating && requestAnimationFrame((function(A) { + return t._animate(A) + } + )) + } + }, { + key: "_init", + value: function(A) { + var e = A.data; + if (this.maxHeatValue = e.max ? e.max : 1 / 0, + this.minHeatValue = e.min ? e.min : -1 / 0, + this._sphereOpacity = e.alpha ? e.alpha : .7, + this.maxHeatValue === 1 / 0 || this.minHeatValue === -1 / 0) + for (var t = 0, i = e.data.length; i > t; t += 1) { + var o = e.data[t]; + o.value > this.maxHeatValue && (this.maxHeatValue = o.value), + this.minHeatValue > o.value && (this.minHeatValue = o.value) + } + for (var n = 0, r = e.data.length; r > n; n += 1) + this._addHeatPoint(e.data[n]) + } + }, { + key: "_addHeatPoint", + value: function(A) { + var e = A + , t = e.radius ? e.radius : 1e3 + , i = 10 * Math.log10(t) + , o = new er(t,i,i) + , n = this.getColorIndexAndValueOfHeatValue(e.value) + , r = n.index + , a = new Ue(o,new xr({ + color: n.color, + depthTest: !0, + transparent: !0, + opacity: this._sphereOpacity + })); + a.position.set(e.point.x, e.point.y, e.point.z), + a.updateMatrixWorld(!0), + a.userData._heatValue = e.value, + a.userData._heatColorIndex = r, + a.disPickable = !0, + this.viewer.disableComponentsSelectionByKey(a.uuid), + this.heatSpheres.push(a), + this.viewer.addExternalObject(a.uuid, a) + } + }, { + key: "_createColorBoard", + value: function() { + var A = document.createElement("canvas"); + A.width = 256, + A.height = 1; + var e = A.getContext("2d") + , t = e.createLinearGradient(0, 0, 256, 1) + , i = { + 0: "#44f", + .1: "#0ff", + .2: "#0f0", + .4: "#ff0", + 1: "#f00" + }; + for (var o in i) + t.addColorStop(o, i[o]); + return e.fillStyle = t, + e.fillRect(0, 0, 256, 1), + e.getImageData(0, 0, 256, 1).data + } + }, { + key: "_easeOutCubic", + value: function(A) { + return 1 - Math.pow(1 - A, 3) + } + }, { + key: "_easeOutSine", + value: function(A) { + return Math.sin(A * Math.PI / 2) + } + }, { + key: "_easeInCubic", + value: function(A) { + return A * A * A + } + }]), + A + }() + , BE = function() { + function A(e) { + cc(this, A), + this.viewer = e.viewer3D, + this.mapCollection = {} + } + return dc(A, [{ + key: "createHeatmap", + value: function(A) { + var e = ((new Date).getTime() * (Math.random() + 1)).toString(36).slice(0, 8) + , t = new CE({ + viewer3D: this.viewer, + id: e + }) + , i = fE(A); + return i.data.data.forEach((function(A) { + A.point = new y(A.point.x,A.point.y,A.point.z) + } + )), + i.boundary = i.boundary.map((function(A) { + return new y(A.x,A.y,A.z) + } + )), + t.addHeatmap(e, i) ? (this.mapCollection[e] = t, + { + code: "success", + id: e + }) : { + code: "error", + message: "输入的点不共面" + } + } + }, { + key: "updateHeatmap", + value: function(A) { + var e = this.mapCollection[A.id]; + if (e && e.updateHeatmap) + return e.updateHeatmap(A) + } + }, { + key: "removeHeatmap", + value: function(A) { + return !!this.mapCollection[A] && (this.mapCollection[A].removeHeatmap(A), + delete this.mapCollection[A], + !0) + } + }, { + key: "createHeatmap3D", + value: function(A) { + var e = ((new Date).getTime() * (Math.random() + 1)).toString(36).slice(0, 8) + , t = new vE({ + viewer3D: this.viewer, + id: e + }) + , i = fE(A); + return i.data.data.forEach((function(A) { + A.point = new y(A.point.x,A.point.y,A.point.z) + } + )), + i.boundary = i.boundary.map((function(A) { + return new y(A.x,A.y,A.z) + } + )), + t.addHeatmap(e, i) ? (this.mapCollection[e] = t, + { + code: "success", + id: e, + map: t + }) : { + code: "error", + message: "输入的点不共面" + } + } + }, { + key: "createSphereHeatmap", + value: function(A) { + if (A.data && A.data.data) { + var e = ((new Date).getTime() * (Math.random() + 1)).toString(36).slice(0, 8) + , t = new EE(A,this.viewer); + return t.startAnimation(5e3), + this.mapCollection[e] = t, + { + code: "success", + id: e, + map: t + } + } + return { + code: "error", + message: "参数错误" + } + } + }, { + key: "createSphereColorOverrideHeatmap", + value: function(A) { + if (A.data && A.data.data) { + if (A.data.data.length > 150) + return { + code: "error", + message: "热力源个数不能超过150" + }; + var e = new IE(A,this.viewer) + , t = ((new Date).getTime() * (Math.random() + 1)).toString(36).slice(0, 8); + return this.mapCollection[t] = e, + e.show(), + { + code: "success", + id: t, + map: e + } + } + return { + code: "error", + message: "参数错误" + } + } + }]), + A + }() + , xE = function(A, e) { + Xo.call(this, A, e), + this.pointIds = [] + }; + (xE.prototype = Object.create(Xo.prototype)).constructor = xE, + xE.prototype.raycast = function() { + var A = new M + , e = new CA + , t = new cA; + return function(i, o) { + var n = this + , r = this.geometry + , a = this.matrixWorld + , s = this.size + , l = i.camera || i._camera + , c = i.viewportSize.height + , h = this.pointIds; + function d(e, t) { + var i = e.clone(); + return i.applyMatrix4(a), + i.project(l), + i.y += t / c, + i.unproject(l), + i.applyMatrix4(A), + i + } + A.getInverse(a), + null === r.boundingSphere && r.computeBoundingSphere(), + t.copy(r.boundingSphere); + var p = t.center + , g = d(p, s) + , u = g.distanceToSquared(p); + if (t.radius += u, + t.center.copy(g), + t.applyMatrix4(a), + !1 !== i.ray.intersectsSphere(t)) { + e.copy(i.ray).applyMatrix4(A); + var f = new y + , m = s; + if (r.isBufferGeometry) { + var C = r.index + , v = r.attributes + , I = v.position.array + , E = !1 + , B = null; + if (v.attrSize && (E = !0, + B = v.attrSize.array), + null !== C) + for (var x = C.array, S = 0, w = x.length; w > S; S += 1) { + var M = x[S]; + f.fromArray(I, 3 * M), + E && (m = B[M]), + F(f, m, M) + } + else { + S = 0; + for (var b = I.length / 3; b > S; S += 1) + f.fromArray(I, 3 * S), + E && (m = B[S]), + F(f, m, S) + } + } else { + var U = r.vertices; + for (S = 0, + b = U.length; b > S; S += 1) + F(U[S], m, S) + } + } + function F(A, t, r) { + var s = d(A, t) + , l = s.distanceToSquared(A) + , c = e.distanceSqToPoint(s); + if (l > c) { + var p = e.closestPointToPoint(s); + p.applyMatrix4(a); + var g = i.ray.origin.distanceTo(p); + if (i.near > g || g > i.far) + return; + o.push({ + id: h[r], + distance: g, + distanceToRay: Math.sqrt(c), + point: p.clone(), + index: r, + face: null, + object: n + }) + } + } + } + }(), + xE.prototype.setAttributeSize = function(A, e) { + var t = this.geometry.attributes; + t.attrSize && (t.attrSize.array[A] = e, + t.attrSize.needsUpdate = !0) + } + , + xE.prototype.getAttributeSize = function(A) { + var e = this.geometry.attributes + , t = this.size; + return e.attrSize && (t = e.attrSize.array[A]), + t + } + ; + var SE = ["attribute vec3 customColor;", "attribute float customOpacity;", "attribute float customSize;", "attribute float customAngle;", "attribute float customVisible;", "varying vec4 vColor;", "varying float vAngle;", "void main()", "{", "if ( customVisible > 0.5 )", "vColor = vec4( customColor, customOpacity );", "else", "vColor = vec4(0.0, 0.0, 0.0, 0.0);", "vAngle = customAngle;", "vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );", "gl_PointSize = customSize * ( 3000.0 / length( mvPosition.xyz ) );", "gl_Position = projectionMatrix * mvPosition;", "}"].join("\n") + , wE = ["uniform sampler2D texture;", "varying vec4 vColor;", "varying float vAngle;", "void main()", "{", "gl_FragColor = vColor;", "float c = cos(vAngle);", "float s = sin(vAngle);", "vec2 rotatedUV = vec2(c * (gl_PointCoord.x - 0.5) + s * (gl_PointCoord.y - 0.5) + 0.5,", "c * (gl_PointCoord.y - 0.5) - s * (gl_PointCoord.x - 0.5) + 0.5);", "vec4 rotatedTexture = texture2D( texture, rotatedUV );", "gl_FragColor = gl_FragColor * rotatedTexture;", "}"].join("\n"); + function ME(A, e) { + this.times = A || [], + this.values = e || [] + } + function bE() { + this.position = new y, + this.velocity = new y, + this.acceleration = new y, + this.angle = 0, + this.angleVelocity = 0, + this.angleAcceleration = 0, + this.size = 16, + this.color = new LA, + this.opacity = 1, + this.age = 0, + this.alive = 0 + } + function UE() { + this.positionStyle = 1, + this.positionBase = new y, + this.positionSpread = new y, + this.positionRadius = 0, + this.velocityStyle = 1, + this.velocityBase = new y, + this.velocitySpread = new y, + this.speedBase = 0, + this.speedSpread = 0, + this.accelerationBase = new y, + this.accelerationSpread = new y, + this.angleBase = 0, + this.angleSpread = 0, + this.angleVelocityBase = 0, + this.angleVelocitySpread = 0, + this.angleAccelerationBase = 0, + this.angleAccelerationSpread = 0, + this.sizeBase = 0, + this.sizeSpread = 0, + this.sizeTween = new ME, + this.colorBase = new y(0,1,.5), + this.colorSpread = new y(0,0,0), + this.colorTween = new ME, + this.opacityBase = 1, + this.opacitySpread = 0, + this.opacityTween = new ME, + this.blendStyle = 1, + this.particleArray = [], + this.particlesPerSecond = 100, + this.particleDeathAge = 1, + this.emitterAge = 0, + this.emitterAlive = !0, + this.emitterDeathAge = 60, + this.particleCount = this.particlesPerSecond * Math.min(this.particleDeathAge, this.emitterDeathAge) + } + ME.prototype.lerp = function(A) { + for (var e = 0, t = this.times.length; t > e && A > this.times[e]; ) + e += 1; + if (0 === e) + return this.values[0]; + if (e === t) + return this.values[t - 1]; + var i = (A - this.times[e - 1]) / (this.times[e] - this.times[e - 1]); + return this.values[0]instanceof y ? this.values[e - 1].clone().lerp(this.values[e], i) : this.values[e - 1] + i * (this.values[e] - this.values[e - 1]) + } + , + bE.prototype.update = function(A) { + if (this.position.add(this.velocity.clone().multiplyScalar(A)), + this.velocity.add(this.acceleration.clone().multiplyScalar(A)), + this.angle += .01745329251 * this.angleVelocity * A, + this.angleVelocity += .01745329251 * this.angleAcceleration * A, + this.age += A, + this.sizeTween.times.length > 0 && (this.size = this.sizeTween.lerp(this.age)), + this.colorTween.times.length > 0) { + var e = this.colorTween.lerp(this.age); + this.color = (new LA).setHSL(e.x, e.y, e.z) + } + this.opacityTween.times.length > 0 && (this.opacity = this.opacityTween.lerp(this.age)) + } + , + UE.prototype.setValues = function(A) { + if (void 0 !== A) { + for (var e in this.sizeTween = new ME, + this.colorTween = new ME, + this.opacityTween = new ME, + A) + this[e] = A[e]; + this.particleArray = [], + this.emitterAlive = !0, + this.particleCount = this.particlesPerSecond * Math.min(this.particleDeathAge, this.emitterDeathAge), + this.particleGeometry = new he, + this.particleMaterial = new Pe({ + uniforms: { + texture: { + value: this.particleTexture + } + }, + vertexShader: SE, + fragmentShader: wE, + transparent: !0, + blending: 1, + depthWrite: !1 + }), + this.particleMesh = new xE + } + } + , + UE.prototype.randomValue = function(A, e) { + return A + e * (Math.random() - .5) + } + , + UE.prototype.randomVector3 = function(A, e) { + var t = new y(Math.random() - .5,Math.random() - .5,Math.random() - .5); + return (new y).addVectors(A, t.multiplyVectors(e, t)) + } + , + UE.prototype.updateVector3 = function(A, e, t) { + var i = new y(Math.random() - .5,Math.random() - .5,Math.random() - .5); + A.set(0, 0, 0), + A.addVectors(e, i.multiplyVectors(t, i)) + } + , + UE.prototype.createParticle = function() { + var A = new bE; + if (1 === this.positionStyle && (A.position = this.randomVector3(this.positionBase, this.positionSpread)), + 2 === this.positionStyle) { + var e = 2 * Math.random() - 1 + , t = 6.2832 * Math.random() + , i = Math.sqrt(1 - e * e) + , o = new y(i * Math.cos(t),i * Math.sin(t),e); + A.position = (new y).addVectors(this.positionBase, o.multiplyScalar(this.positionRadius)) + } + if (1 === this.velocityStyle && (A.velocity = this.randomVector3(this.velocityBase, this.velocitySpread)), + 2 === this.velocityStyle) { + var n = (new y).subVectors(A.position, this.positionBase) + , r = this.randomValue(this.speedBase, this.speedSpread); + A.velocity = n.normalize().multiplyScalar(r) + } + A.acceleration = this.randomVector3(this.accelerationBase, this.accelerationSpread), + A.angle = this.randomValue(this.angleBase, this.angleSpread), + A.angleVelocity = this.randomValue(this.angleVelocityBase, this.angleVelocitySpread), + A.angleAcceleration = this.randomValue(this.angleAccelerationBase, this.angleAccelerationSpread), + A.size = this.randomValue(this.sizeBase, this.sizeSpread); + var a = this.randomVector3(this.colorBase, this.colorSpread); + return A.color = (new LA).setHSL(a.x, a.y, a.z), + A.opacity = this.randomValue(this.opacityBase, this.opacitySpread), + A.age = 0, + A.alive = 0, + A.sizeTween = this.sizeTween, + A.colorTween = this.colorTween, + A.opacityTween = this.opacityTween, + A + } + , + UE.prototype.updateParticle = function(A) { + if (1 === this.positionStyle && this.updateVector3(A.position, this.positionBase, this.positionSpread), + 2 === this.positionStyle) { + var e = 2 * Math.random() - 1 + , t = 6.2832 * Math.random() + , i = Math.sqrt(1 - e * e) + , o = new y(i * Math.cos(t),i * Math.sin(t),e); + A.position = (new y).addVectors(this.positionBase, o.multiplyScalar(this.positionRadius)) + } + if (1 === this.velocityStyle && this.updateVector3(A.velocity, this.velocityBase, this.velocitySpread), + 2 === this.velocityStyle) { + var n = (new y).subVectors(A.position, this.positionBase) + , r = this.randomValue(this.speedBase, this.speedSpread); + A.velocity = n.normalize().multiplyScalar(r) + } + this.updateVector3(A.acceleration, this.accelerationBase, this.accelerationSpread), + A.angle = this.randomValue(this.angleBase, this.angleSpread), + A.angleVelocity = this.randomValue(this.angleVelocityBase, this.angleVelocitySpread), + A.angleAcceleration = this.randomValue(this.angleAccelerationBase, this.angleAccelerationSpread), + A.size = this.randomValue(this.sizeBase, this.sizeSpread); + var a = this.randomVector3(this.colorBase, this.colorSpread); + A.color = A.color.setHSL(a.x, a.y, a.z), + A.opacity = this.randomValue(this.opacityBase, this.opacitySpread), + A.age = 0, + A.alive = 0 + } + , + UE.prototype.initialize = function() { + this.sortArray = [], + this.positions = new Float32Array(3 * this.particleCount), + this.customVisible = new Float32Array(this.particleCount), + this.customSize = new Float32Array(this.particleCount), + this.customColor = new Float32Array(3 * this.particleCount), + this.customOpacity = new Float32Array(this.particleCount), + this.maxSize = 200; + for (var A = 0; this.particleCount > A; A += 1) + this.particleArray[A] = this.createParticle(), + this.positions[3 * A] = this.particleArray[A].position.x, + this.positions[3 * A + 1] = this.particleArray[A].position.y, + this.positions[3 * A + 2] = this.particleArray[A].position.z, + this.customVisible[A] = this.particleArray[A].alive, + this.customColor[3 * A] = this.particleArray[A].color.r, + this.customColor[3 * A + 1] = this.particleArray[A].color.g, + this.customColor[3 * A + 2] = this.particleArray[A].color.b, + this.customOpacity[A] = this.particleArray[A].opacity, + this.customSize[A] = this.particleArray[A].size, + this.maxSize = this.maxSize > this.customSize[A] ? this.maxSize : this.customSize[A]; + this.particleMaterial.blending = this.blendStyle, + this.particleGeometry.setAttribute("position", new YA(this.positions,3)), + this.particleGeometry.setAttribute("customColor", new YA(this.customColor,3)), + this.particleGeometry.setAttribute("customVisible", new YA(this.customVisible,1)), + this.particleGeometry.setAttribute("customSize", new YA(this.customSize,1)), + this.particleGeometry.setAttribute("customOpacity", new YA(this.customOpacity,1)), + this.particleMesh = new xE(this.particleGeometry,this.particleMaterial), + this.particleMesh.dynamic = !0, + this.particleMesh.size = this.maxSize, + this.particleMesh.renderOrder = -1 + } + , + UE.prototype.update = function(A) { + A = void 0 === A ? .015 : A; + for (var e = [], t = 0; this.particleCount > t; t += 1) + this.particleArray[t].alive && (this.particleArray[t].update(A), + this.particleArray[t].age > this.particleDeathAge && (this.particleArray[t].alive = 0, + e.push(t)), + this.customVisible[t] = this.particleArray[t].alive, + this.customOpacity[t] = this.particleArray[t].opacity, + this.customSize[t] = this.particleArray[t].size, + this.customColor[3 * t] = this.particleArray[t].color.r, + this.customColor[3 * t + 1] = this.particleArray[t].color.g, + this.customColor[3 * t + 2] = this.particleArray[t].color.b, + this.positions[3 * t] = this.particleArray[t].position.x, + this.positions[3 * t + 1] = this.particleArray[t].position.y, + this.positions[3 * t + 2] = this.particleArray[t].position.z, + this.maxSize = this.maxSize > this.customSize[t] ? this.maxSize : this.customSize[t]); + if (this.particleGeometry.getAttribute("customVisible").needsUpdate = !0, + this.particleGeometry.getAttribute("customOpacity").needsUpdate = !0, + this.particleGeometry.getAttribute("customSize").needsUpdate = !0, + this.particleGeometry.getAttribute("customColor").needsUpdate = !0, + this.particleGeometry.getAttribute("position").needsUpdate = !0, + this.emitterAlive) { + var i = Math.round(this.particlesPerSecond * (this.emitterAge + 0)) + , o = Math.round(this.particlesPerSecond * (this.emitterAge + A)); + o > this.particleCount && (o = this.particleCount); + for (t = i; o > t; t += 1) + this.particleArray[t].alive = 1; + for (var n = 0; e.length > n; n += 1) { + this.updateParticle(this.particleArray[t = e[n]]), + this.particleArray[t].alive = 1, + this.positions[3 * t] = this.particleArray[t].position.x, + this.positions[3 * t + 1] = this.particleArray[t].position.y, + this.positions[3 * t + 2] = this.particleArray[t].position.z + } + this.emitterAge += A + } + } + , + UE.prototype.setScale = function(A) { + for (var e = 0, t = this.sizeTween.values.length; t > e; e += 1) + this.sizeTween.values[e] = this.sizeTween.values[e] * A; + this.maxSize *= A + } + , + UE.prototype.initializeSizetween = function(A) { + for (var e = 0, t = this.sizeTween.values.length; t > e; e += 1) + this.sizeTween.values[e] = this.sizeTween.values[e] * A; + for (e = 0; this.particleCount > e; e += 1) + this.particleArray[e].size *= A, + this.customSize[e] = this.particleArray[e].size, + this.maxSize = this.maxSize > this.customSize[e] ? this.maxSize : this.customSize[e]; + this.particleGeometry.getAttribute("customSize").needsUpdate = !0 + } + , + UE.prototype.destroy = function() {} + ; + var FE = function() { + return Xi.call(this), + this.firePosition = { + x: 0, + y: 0, + z: 0 + }, + this.position.set(this.firePosition.x, this.firePosition.y, this.firePosition.z), + this.fireScale = 1, + this.type = "fire", + this.disPickable = !0, + this.autoAnimation = !0, + this._loadTexture(), + this._initialize(), + this + }; + (FE.prototype = Object.create(Xi.prototype)).constructor = Xi.prototype, + FE.prototype._initialize = function() { + this.fire = new UE, + this.fire.setValues({ + positionStyle: 1, + positionBase: new y(0,0,600), + positionSpread: new y(1500,1500,600), + velocityStyle: 1, + velocityBase: new y(0,0,4600), + velocitySpread: new y(1e3,1e3,4600), + accelerationBase: new y(0,0,2600), + particleTexture: this.fireParticle, + sizeTween: new ME([0, .1],[32, 200]), + opacityTween: new ME([.7, 1],[.8, 0]), + colorBase: new y(.04,1,.4), + blendStyle: 2, + particlesPerSecond: 80, + particleDeathAge: 1.5 + }), + this.fire.initialize(), + this.smoke = new UE, + this.smoke.setValues({ + positionStyle: 1, + positionBase: new y(0,0,2600), + positionSpread: new y(1500,1500,600), + velocityStyle: 1, + velocityBase: new y(0,0,3600), + velocitySpread: new y(1800,1800,1100), + accelerationBase: new y(0,0,2600), + particleTexture: this.smokeParticle, + sizeTween: new ME([0, 1],[32, 200]), + opacityTween: new ME([.5, 1, 1.7],[0, .3, 0]), + colorTween: new ME([.4, 1],[new y(0,0,0), new y(0,0,.2)]), + blendStyle: 1, + particlesPerSecond: 40, + particleDeathAge: 2 + }), + this.smoke.initialize(), + this.add(this.fire.particleMesh), + this.add(this.smoke.particleMesh) + } + , + FE.prototype._initializeSizetween = function(A) { + this.fire.initializeSizetween(A), + this.smoke.initializeSizetween(A) + } + , + FE.prototype.update = function() { + this.fire.update(), + this.smoke.update() + } + , + FE.prototype.getPosition = function() { + return this.firePosition + } + , + FE.prototype.setPosition = function(A) { + if (A) + if ("number" == typeof A.x) + if ("number" == typeof A.y) + if ("number" == typeof A.z) { + if (this.firePosition = A, + this.position.set(this.firePosition.x, this.firePosition.y, this.firePosition.z), + this.updateMatrixWorld(), + this.originBox) { + var e = this.originBox.clone(); + this.box = e.applyMatrix4(this.matrix), + this.levelName = null + } + } else + Bh.error("缺少参数 position.z"); + else + Bh.error("缺少参数 position.y"); + else + Bh.error("缺少参数 position.x"); + else + Bh.error("缺少参数 position") + } + , + FE.prototype.getScale = function() { + return this.fireScale + } + , + FE.prototype.setScale = function(A) { + this.scale.set(A, A, A), + this.updateMatrixWorld(), + this.fire.setScale(A / this.fireScale), + this.smoke.setScale(A / this.fireScale), + this.fireScale = A + } + , + FE.prototype._loadTexture = function() { + var A = new Aa; + this.fireParticle = A.load("data:image/png;base64,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"), + this.smokeParticle = A.load("data:image/png;base64,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") + } + ; + var KE = function() { + JC.call(this), + this.type = "LineGeometry" + }; + KE.prototype = Object.assign(Object.create(JC.prototype), { + constructor: KE, + isLineGeometry: !0, + setPositions: function(A) { + for (var e = A.length - 3, t = new Float32Array(2 * e), i = 0; e > i; i += 3) + t[2 * i] = A[i], + t[2 * i + 1] = A[i + 1], + t[2 * i + 2] = A[i + 2], + t[2 * i + 3] = A[i + 3], + t[2 * i + 4] = A[i + 4], + t[2 * i + 5] = A[i + 5]; + return JC.prototype.setPositions.call(this, t), + this + }, + setColors: function(A) { + for (var e = A.length - 3, t = new Float32Array(2 * e), i = 0; e > i; i += 3) + t[2 * i] = A[i], + t[2 * i + 1] = A[i + 1], + t[2 * i + 2] = A[i + 2], + t[2 * i + 3] = A[i + 3], + t[2 * i + 4] = A[i + 4], + t[2 * i + 5] = A[i + 5]; + return JC.prototype.setColors.call(this, t), + this + }, + fromLine: function(A) { + var e = A.geometry; + return e.isGeometry ? this.setPositions(e.vertices) : e.isBufferGeometry && this.setPositions(e.position.array), + this + }, + copy: function() { + return this + } + }); + var QE = function(A, e) { + XC.call(this), + this.type = "Line2", + this.geometry = void 0 !== A ? A : new KE, + this.material = void 0 !== e ? e : new YC({ + color: 16777215 * Math.random() + }) + }; + QE.prototype = Object.assign(Object.create(XC.prototype), { + constructor: QE, + isLine2: !0, + copy: function() { + return this + } + }); + function RE(A) { + return "symbol" == typeof A || Zv(A) && "[object Symbol]" == Sv(A) + } + var TE = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/ + , kE = /^\w*$/; + function DE(A, e) { + if ("function" != typeof A || null != e && "function" != typeof e) + throw new TypeError("Expected a function"); + var t = function() { + var i = arguments + , o = e ? e.apply(this, i) : i[0] + , n = t.cache; + if (n.has(o)) + return n.get(o); + var r = A.apply(this, i); + return t.cache = n.set(o, r) || n, + r + }; + return t.cache = new (DE.Cache || qv), + t + } + DE.Cache = qv; + var LE = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g + , NE = /\\(\\)?/g + , OE = function(A) { + var e = DE(A, (function(A) { + return 500 === t.size && t.clear(), + A + } + )) + , t = e.cache; + return e + }((function(A) { + var e = []; + return 46 === A.charCodeAt(0) && e.push(""), + A.replace(LE, (function(A, t, i, o) { + e.push(i ? o.replace(NE, "$1") : t || A) + } + )), + e + } + )); + var VE = Cv ? Cv.prototype : void 0 + , GE = VE ? VE.toString : void 0; + function PE(A) { + if ("string" == typeof A) + return A; + if (tI(A)) + return function(A, e) { + for (var t = -1, i = null == A ? 0 : A.length, o = Array(i); ++t < i; ) + o[t] = e(A[t], t, A); + return o + }(A, PE) + ""; + if (RE(A)) + return GE ? GE.call(A) : ""; + var e = A + ""; + return "0" == e && 1 / A == -1 / 0 ? "-0" : e + } + function qE(A, e) { + return tI(A) ? A : function(A, e) { + if (tI(A)) + return !1; + var t = typeof A; + return !("number" != t && "symbol" != t && "boolean" != t && null != A && !RE(A)) || (kE.test(A) || !TE.test(A) || null != e && A in Object(e)) + }(A, e) ? [A] : OE(function(A) { + return null == A ? "" : PE(A) + }(A)) + } + function jE(A) { + if ("string" == typeof A || RE(A)) + return A; + var e = A + ""; + return "0" == e && 1 / A == -1 / 0 ? "-0" : e + } + function HE(A, e, t) { + var i = null == A ? void 0 : function(A, e) { + for (var t = 0, i = (e = qE(e, A)).length; null != A && i > t; ) + A = A[jE(e[t++])]; + return t && t == i ? A : void 0 + }(A, e); + return void 0 === i ? t : i + } + var YE = { + height: 0, + speed: 1e3, + frameTime: 14 + } + , WE = new hp + , JE = function() { + function A(e) { + cc(this, A), + this.roadnet = {}, + this.shortestPathLineMap = {}, + this.roadNetLineMap = {}, + this.roadNetPointMap = {}, + this.roadNetInfoMap = {}, + this.roadNetEdgeMap = {}, + this.roadNetPointMap = {}, + this.mapRoadNetListByModelKey = {}, + this.mapModelKeyByRoadNetKey = {}, + this.modelInfo = {}, + this.viewer3D = e + } + return dc(A, [{ + key: "_getRoadNetListByModelKey", + value: function(A) { + var e = this + , t = this; + return new Promise((function(i, o) { + (function(A) { + var e = A.viewer3D.getViewerImpl().getModel(A.modelKey) + , t = HE(e, ["loader", "url", "serverUrl"]) || HE(A, ["viewer3D", "host"], "") + , i = e.projectKey + , o = e.accessToken + , n = ""; + e.share && (n = "&share=" + e.share); + var r = { + url: "".concat(t, "/").concat(A.apiVersion || "api", "/").concat(i, "/routes/list?modelKey=").concat(A.modelKey).concat(n) + }; + return o && (r.headers = { + Authorization: o + }), + _d(r) + } + )({ + viewer3D: e.viewer3D, + modelKey: A + }).then((function(e) { + var n, r = t.viewer3D.getViewerImpl().getModel(A); + if (!r) + return Bh.error(A + "模型不存在"), + void o(A + "模型不存在"); + if (t.modelInfo[A] = r, + "SUCCESS" === (n = "string" == typeof e ? JSON.parse(e) : e).code) { + var a = t.mapRoadNetListByModelKey; + a[A] = {}; + for (var s = 0, l = n.data.length; l > s; s += 1) { + var c = n.data[s] + , h = c.key; + a[A][h] = c, + t.roadNetInfoMap[h] = c, + t.mapModelKeyByRoadNetKey[h] = A + } + i() + } else + o(n.message) + } + )).catch((function() { + Bh.error("获取模型路网列表失败"), + o("获取模型路网列表失败") + } + )) + } + )) + } + }, { + key: "_getRoadNetDataByRouteKey", + value: function(A, e, t) { + var i = this + , o = this + , n = [] + , r = this.mapModelKeyByRoadNetKey[A]; + if (r) + return n.push(new Promise((function(e, t) { + (function(A) { + var e = A.viewer3D.getViewerImpl().getModel(A.modelKey) + , t = HE(e, ["loader", "url", "serverUrl"]) || HE(A, ["viewer3D", "host"], "") + , i = e.projectKey + , o = e.accessToken + , n = ""; + e.share && (n = "&share=" + e.share); + var r = { + url: "".concat(t, "/").concat(A.apiVersion || "api", "/").concat(i, "/routes/points?routeKey=").concat(A.routeKey).concat(n) + }; + return o && (r.headers = { + Authorization: o + }), + _d(r) + } + )({ + viewer3D: i.viewer3D, + routeKey: A, + modelKey: r + }).then((function(i) { + var n; + if ("SUCCESS" === (n = "string" == typeof i ? JSON.parse(i) : i).code) { + var r = o.roadNetPointMap; + r[A] = {}; + for (var a = 0, s = n.data.length; s > a; a += 1) { + var l = n.data[a]; + r[A][l.key] = l + } + e() + } else + t(n.message) + } + )).catch((function() { + Bh.error("获取模型路网列表失败"), + t("获取模型路网列表失败") + } + )) + } + ))), + n.push(new Promise((function(e, t) { + (function(A) { + var e = A.viewer3D.getViewerImpl().getModel(A.modelKey) + , t = HE(e, ["loader", "url", "serverUrl"]) || HE(A, ["viewer3D", "host"], "") + , i = e.projectKey + , o = e.accessToken + , n = ""; + e.share && (n = "&share=" + e.share); + var r = { + url: "".concat(t, "/").concat(A.apiVersion || "api", "/").concat(i, "/routes/edges?routeKey=").concat(A.routeKey).concat(n) + }; + return o && (r.headers = { + Authorization: o + }), + _d(r) + } + )({ + viewer3D: i.viewer3D, + routeKey: A, + modelKey: r + }).then((function(i) { + var n; + "SUCCESS" === (n = "string" == typeof i ? JSON.parse(i) : i).code ? (o.roadNetEdgeMap[A] = n.data, + e()) : t(n.message) + } + )).catch((function() { + Bh.error("获取模型路网列表失败"), + t("获取模型路网列表失败") + } + )) + } + ))), + Promise.all(n); + Bh.error("模型路网未初始化") + } + }, { + key: "initRoadNetByModelKey", + value: function(A) { + var e = this; + return new Promise((function(t, i) { + e._getRoadNetListByModelKey(A).then(t).catch(i) + } + )) + } + }, { + key: "getRoadNetInfoListByModelKey", + value: function(A) { + return this.mapRoadNetListByModelKey[A] + } + }, { + key: "addRoadNetByKey", + value: function(A, e) { + var t = this + , i = this + , o = e.color + , n = e.width + , r = void 0 === n ? 1 : n + , a = e.block + , s = void 0 === a || a; + return new Promise((function(e, n) { + return o instanceof Xh ? "number" != typeof r ? (Bh.error("width 参数非法"), + void n("width 参数非法")) : void (i.roadNetLineMap[A] ? e() : t._getRoadNetDataByRouteKey(A).then((function() { + for (var t = i.roadNetEdgeMap[A], a = i.roadNetPointMap[A], l = [], c = 0, h = t.length; h > c; c += 1) { + var d = t[c] + , p = d._from.split("/")[1] + , g = d._to.split("/")[1] + , u = a[p].xyz; + u || (Bh.error("点", p, "不存在"), + n("点" + p + "不存在")), + l.push.apply(l, yc(u)); + var f = a[g].xyz; + f || (Bh.error("点", g, "不存在"), + n("点" + g + "不存在")), + l.push.apply(l, yc(f)) + } + var m = new JC; + m.setPositions(l); + var C = new YC({ + color: o.getHex(), + linewidth: r / 1e3 + }); + s || (C.depthTest = !1, + C.transparent = !0); + var y = new XC(m,C); + y.matrixAutoUpdate = !1; + var v = i.mapModelKeyByRoadNetKey[A]; + if (!v) + return Bh.error("模型路网未初始化"), + void n("模型路网未初始化"); + var I = i.viewer3D.getModelMatrix(v); + y.matrix.copy(I), + i.viewer3D.getScene().add(y), + y.updateMatrixWorld(!0), + i.roadNetLineMap[A] = y, + i.viewer3D.render(), + e() + } + )).catch((function(A) { + n(A) + } + ))) : (Bh.error("color 参数非法"), + void n("color 参数非法")) + } + )) + } + }, { + key: "removeRoadNetByKey", + value: function(A) { + this.roadNetLineMap[A] ? (this.viewer3D.getScene().remove(this.roadNetLineMap[A]), + delete this.roadNetLineMap[A], + this.viewer3D.render()) : Bh.warn("路网", A, "不存在") + } + }, { + key: "showRoadNetByKey", + value: function(A) { + this.roadNetLineMap[A] ? (this.roadNetLineMap[A].visible = !0, + this.viewer3D.render()) : Bh.warn("路网", A, "不存在") + } + }, { + key: "hideRoadNetByKey", + value: function(A) { + this.roadNetLineMap[A] ? (this.roadNetLineMap[A].visible = !1, + this.viewer3D.render()) : Bh.warn("路网", A, "不存在") + } + }, { + key: "setRoadNetColorByKey", + value: function(A, e) { + if (this.roadNetLineMap[A]) { + if (!(e instanceof Xh)) + return void Bh.warn("color 参数非法"); + this.roadNetLineMap[A].material.color = e.getHex(), + this.viewer3D.render() + } else + Bh.warn("路网", A, "不存在") + } + }, { + key: "setRoadNetBlockByKey", + value: function(A, e) { + this.roadNetLineMap[A] ? (e ? (this.roadNetLineMap[A].material.depthTest = !0, + this.roadNetLineMap[A].material.transparent = !1) : (this.roadNetLineMap[A].material.depthTest = !1, + this.roadNetLineMap[A].material.transparent = !0), + this.viewer3D.render()) : Bh.warn("路网", A, "不存在") + } + }, { + key: "setRoadNetLineWidthByKey", + value: function(A, e) { + this.roadNetLineMap[A] ? (this.roadNetLineMap[A].material.linewidth = e / 1e3, + this.viewer3D.render()) : Bh.warn("路网", A, "不存在") + } + }, { + key: "update", + value: function() { + for (var A in this.roadNetLineMap) + if (this.roadNetLineMap.hasOwnProperty(A)) { + var e = this.roadNetLineMap[A] + , t = this.viewer3D.getModelMatrix(this.mapModelKeyByRoadNetKey[A]); + e.matrix.copy(t), + e.updateMatrixWorld(!0) + } + for (var i in this.shortestPathLineMap) + if (this.shortestPathLineMap.hasOwnProperty(i)) { + var o = this.shortestPathLineMap[i] + , n = this.viewer3D.getModelMatrix(o.userData.modelKey); + o.matrix.copy(n), + o.updateMatrixWorld(!0) + } + this.viewer3D.render() + } + }, { + key: "getShortestPath", + value: function(A, e, t, i) { + var o = this + , n = this; + return new Promise((function(i, r) { + o.roadNetInfoMap[A] || r({ + code: "error", + detail: "路网".concat(A, "未初始化"), + start: e, + end: t + }); + var a = o.mapModelKeyByRoadNetKey[A]; + if (!a) + return Bh.error("模型路网未初始化"), + void r("模型路网未初始化"); + (function(A) { + var e = A.viewer3D.getViewerImpl().getModel(A.modelKey) + , t = HE(e, ["loader", "url", "serverUrl"]) || HE(A, ["viewer3D", "host"], "") + , i = e.projectKey + , o = e.accessToken + , n = ""; + e.share && (n = "&share=" + e.share); + var r = { + url: "".concat(t, "/").concat(A.apiVersion || "api", "/").concat(i, "/routes/shortestPath?routeKey=").concat(A.routeKey, "&start=").concat(A.start.toString(), "&end=").concat(A.end.toString()).concat(n) + }; + return o && (r.headers = { + Authorization: o + }), + _d(r) + } + )({ + modelKey: a, + viewer3D: n.viewer3D, + routeKey: A, + start: e, + end: t + }).then((function(o) { + var n; + "SUCCESS" === (n = "string" == typeof o ? JSON.parse(o) : o).code && i({ + code: "success", + data: { + routeKey: A, + points: n.data + }, + start: e, + end: t + }) + } + )).catch((function(A) { + r({ + code: "error", + detail: A, + start: e, + end: t + }) + } + )) + } + )) + } + }, { + key: "addShortestPathByPoints", + value: function(A, e) { + var t = this + , i = e.color + , o = e.width + , n = void 0 === o ? 1 : o + , r = e.block + , a = void 0 === r || r; + return new Promise((function(e, o) { + if (!A.routeKey) + return Bh.error("缺少参数routeKey"), + void o("缺少参数routeKey"); + if (!A.points) + return Bh.error("缺少参数points"), + void o("缺少参数points"); + if (!(i instanceof Xh)) + return Bh.error("color 参数非法"), + void o("color 参数非法"); + if ("number" != typeof n) + return Bh.error("width 参数非法"), + void o("width 参数非法"); + A.key || (A.key = uh.createUUID()); + for (var r = [], s = 0, l = A.points.length; l > s; s += 1) + r.push.apply(r, yc(A.points[s])); + var c = new KE; + c.setPositions(r); + var h = new YC({ + color: i.getHex(), + linewidth: n / 1e3 + }); + a || (h.depthTest = !1, + h.transparent = !0); + var d = new QE(c,h); + d.matrixAutoUpdate = !1; + var p = t.mapModelKeyByRoadNetKey[A.routeKey]; + if (!p) + return Bh.error("模型路网未初始化"), + void o("模型路网未初始化"); + var g = t.viewer3D.getModelMatrix(p); + d.matrix.copy(g), + d.userData.modelKey = p, + d.userData.routeKey = A.routeKey, + t.viewer3D.getScene().add(d), + d.updateMatrixWorld(!0), + t.shortestPathLineMap[A.key] = d, + t.viewer3D.render(), + e(A) + } + )) + } + }, { + key: "showShortestPathByKey", + value: function(A) { + this.shortestPathLineMap[A] ? (this.shortestPathLineMap[A].visible = !0, + this.viewer3D.render()) : Bh.warn("最短路径", A, "不存在") + } + }, { + key: "hideShortestPathByKey", + value: function(A) { + this.shortestPathLineMap[A] ? (this.shortestPathLineMap[A].visible = !1, + this.viewer3D.render()) : Bh.warn("最短路径", A, "不存在") + } + }, { + key: "removeShortestPathByKey", + value: function(A) { + this.shortestPathLineMap[A] ? (this.viewer3D.getScene().remove(this.shortestPathLineMap[A]), + delete this.shortestPathLineMap[A], + this.viewer3D.render()) : Bh.warn("最短路径", A, "不存在") + } + }, { + key: "setShortestPathColorByKey", + value: function(A, e) { + if (this.shortestPathLineMap[A]) { + if (!(e instanceof Xh)) + return void Bh.warn("color 参数非法"); + this.shortestPathLineMap[A].material.color = e.getHex(), + this.viewer3D.render() + } else + Bh.warn("最短路径", A, "不存在") + } + }, { + key: "setShortestPathBlockByKey", + value: function(A, e) { + this.shortestPathLineMap[A] ? (e ? (this.shortestPathLineMap[A].material.depthTest = !0, + this.shortestPathLineMap[A].material.transparent = !1) : (this.shortestPathLineMap[A].material.depthTest = !1, + this.shortestPathLineMap[A].material.transparent = !0), + this.viewer3D.render()) : Bh.warn("最短路径", A, "不存在") + } + }, { + key: "setShortestPathLineWidthByKey", + value: function(A, e) { + this.shortestPathLineMap[A] ? (this.shortestPathLineMap[A].material.linewidth = e / 1e3, + this.viewer3D.render()) : Bh.warn("最短路径", A, "不存在") + } + }, { + key: "roamByShortestPathData", + value: function(A, e) { + var t = this + , i = uh.extend({}, YE, e); + if (A.routeKey) + if (A.points) + if (i.speed) { + var o = t.viewer3D.getModelMatrix(t.mapModelKeyByRoadNetKey[A.routeKey]); + if (o) { + var n = this.viewer3D.getViewerImpl().camera; + !function A(e, r) { + if (e.length - 1 > r) { + var a, s = new y(e[r][0],e[r][1],e[r][2] + i.height).applyMatrix4(o), l = new y(e[r + 1][0],e[r + 1][1],e[r + 1][2] + i.height).applyMatrix4(o), c = new y(e[r + 1][0],e[r + 1][1],e[r + 1][2] + i.height).applyMatrix4(o); + if (r > e.length - 3 || (a = new y(e[r + 2][0],e[r + 2][1],e[r + 2][2] + i.height).applyMatrix4(o)), + r === e.length - 2) { + var h = new y(e[r + 1][0],e[r + 1][1],e[r + 1][2] + i.height).sub(new y(e[r][0],e[r][1],e[r][2] + i.height)).setLength(.1); + a = new y(e[r + 1][0],e[r + 1][1],e[r + 1][2] + i.height).add(h).applyMatrix4(o) + } + var d = s.distanceTo(c) / i.speed * 1e3; + t.viewer3D.getViewerImpl().getControlManager().setInteractiveState(!1), + WE.from({ + animPosition: s, + animTarget: l, + animUp: n.up + }).to({ + animPosition: c, + animTarget: a, + animUp: n.up + }, d).onUpdate((function(A) { + var e = A.animPosition; + n.lookAtEXForTargetPositionUp(A.animTarget, e, n.up), + t.viewer3D.getViewerImpl().cameraControl.update(!0, !0), + i.callbackProcess && i.callbackProcess(e) + } + )).onComplete((function() { + n.lookAtEXForTargetPositionUp(a, c, n.up), + t.viewer3D.getViewerImpl().cameraControl.update(!0, !0), + i.callbackProcess && i.callbackProcess(c), + i.callbackFinish && i.callbackFinish(), + t.viewer3D.getViewerImpl().getControlManager().setInteractiveState(!0), + A(e, r += 1) + } + )).start(i.frameTime, !0) + } else + i.callbackAllFinish && i.callbackAllFinish() + }(A.points, 0) + } else + Bh.error("无法获取路径对应的模型矩阵") + } else + Bh.error("speed参数非法"); + else + Bh.error("缺少参数points"); + else + Bh.error("缺少参数routeKey") + } + }]), + A + }() + , zE = { + fontSize: 100, + color: "#ff0000", + opacity: 1, + side: 2, + transparent: !0 + } + , ZE = function() { + function A() { + cc(this, A) + } + return dc(A, [{ + key: "createMesh", + value: function(A, e) { + var t = Object.assign({}, zE, e) + , i = A.generateShapes(t.text, t.fontSize) + , o = new jA(t) + , n = new Ue(new ar(i),o); + return t.position && this.setPos(n, t.position), + t.rotation && this.setRotation(n, t.rotation), + t.matrix && this.setMat(n, t.matrix), + n + } + }, { + key: "setPos", + value: function(A, e) { + var t; + (t = A.position).set.apply(t, yc(e)), + A.updateMatrixWorld(!0) + } + }, { + key: "setMat", + value: function(A, e) { + A.applyMatrix4(e), + A.updateMatrixWorld(!0) + } + }, { + key: "setRotation", + value: function(A, e) { + var t; + (t = A.rotation).set.apply(t, yc(e)), + A.updateMatrixWorld(!0) + } + }]), + A + }() + , XE = function() { + function A(e) { + cc(this, A), + this.fonts = {}, + this.host = e.host + } + return dc(A, [{ + key: "loadFont", + value: function(A, e) { + var t = this; + return new Promise((function(i, o) { + _d({ + type: "POST", + url: "".concat(t.host, "/api/fonts"), + headers: { + "Content-type": "application/json;charset=UTF-8" + }, + data: JSON.stringify({ + font: A, + text: e + }), + responseType: "json", + success: function(e) { + "success" === e.code.toLowerCase() ? (t.fonts[A] ? Object.assign(t.fonts[A].data.glyphs, e.data.glyphs) : (t.fonts[A] = {}, + t.fonts[A].data = e.data), + t.fonts[A].font = new za(t.fonts[A].data), + i(t.fonts[A].font)) : o(e) + }, + error: function(A, e) { + o(e) + } + }) + } + )) + } + }, { + key: "getFont", + value: function(A, e) { + var t = this; + return new Promise((function(i, o) { + if (t.fonts[A]) { + for (var n = e.length, r = "", a = 0; n > a; a += 1) + t.fonts[A].data.glyphs[e[a]] || (r += e[a]); + r ? t.loadFont(A, r).then(i).catch(o) : i(t.fonts[A].font) + } else + t.loadFont(A, e).then(i).catch(o) + } + )) + } + }]), + A + }() + , _E = function() { + function A(e) { + cc(this, A), + this.viewer = e.viewer.getViewerImpl(), + this.meshes = {}, + this.fontLib = new XE({ + host: e.viewer.host + }), + this.text = new ZE, + this.draggingId = "" + } + return dc(A, [{ + key: "addText", + value: function(A) { + var e = this; + return this.fontLib.getFont(A.fontName, A.text).then((function(t) { + var i = e.text.createMesh(t, A) + , o = uh.createUUID(); + return e.meshes[o] = i, + e.viewer.getScene().add(i), + e.viewer.render(), + { + code: "success", + id: o + } + } + )).catch((function(A) { + return { + code: "error", + err: A + } + } + )) + } + }, { + key: "removeText", + value: function(A) { + if (this.draggingId !== A) { + var e = this.meshes[A]; + e && (this.viewer.getScene().remove(e), + delete this.meshes[A], + this.viewer.render()) + } + } + }, { + key: "setPosition", + value: function(A, e) { + if (this.draggingId !== A) { + var t = this.meshes[A]; + t && (this.text.setPos(t, e), + this.viewer.render()) + } + } + }, { + key: "setMatrix", + value: function(A, e) { + if (this.draggingId !== A) { + var t = this.meshes[A]; + t && (this.text.setMat(t, e), + this.viewer.render()) + } + } + }, { + key: "setRotation", + value: function(A, e) { + if (this.draggingId !== A) { + var t = this.meshes[A]; + t && (this.text.setRotation(t, e), + this.viewer.render()) + } + } + }, { + key: "getTextIDs", + value: function() { + return Object.keys(this.meshes) + } + }, { + key: "dragText", + value: function(A) { + if ("" === this.draggingId) { + var e = this.meshes[A]; + e && (this.viewer.translateComponentByKey(e), + this.draggingId = A) + } + } + }, { + key: "saveDragText", + value: function() { + "" !== this.draggingId && (this.viewer.cancelTransformComponent(!1), + this.draggingId = "") + } + }]), + A + }() + , $E = function() { + function A(e) { + cc(this, A), + this.curves = {}, + this.viewer = e.viewer3D, + this.modelKey = e.modelKey + } + return dc(A, [{ + key: "getId", + value: function(A) { + return Bd(JSON.stringify(A)).slice(0, 8) + } + }, { + key: "getCurve", + value: function(A) { + return this.curves[A] + } + }, { + key: "_setCurve", + value: function(A, e) { + this.curves[A] = e + } + }, { + key: "_rmCurve", + value: function(A) { + delete this.curves[A] + } + }, { + key: "genTHREELine", + value: function(A) { + var e = A.num + , t = void 0 === e ? 100 : e + , i = A.debug + , o = void 0 !== i && i + , n = new la(A.points,A.closed,A.curveType,A.tension) + , r = this.getId(A) + , a = new De; + a.vertices = n.getSpacedPoints(t); + var s = new Go(a,new ko({ + color: A.color || 16777215 * Math.random(), + linewidth: 6.18, + depthTest: !0, + transparent: !1 + })); + o && (this.viewer.getViewerImpl().modelManager.getModel(this.modelKey).group.add(s), + s.updateMatrixWorld(), + this.viewer.render()); + return this._setCurve(r, { + curve: n, + num: t, + line: s + }), + r + } + }, { + key: "rmCurve", + value: function(A) { + var e = this.getCurve(A).line; + this.viewer.getViewerImpl().modelManager.getModel(this.modelKey).group.remove(e), + e.updateMatrixWorld(), + this.viewer.render(), + this._rmCurve(A) + } + }]), + A + }() + , AB = function() { + function A(e) { + cc(this, A), + this.trackSet = {}, + this.lineManager = new $E(e), + this.viewer = e.viewer3D + } + return dc(A, [{ + key: "_genLine", + value: function(A) { + return this.lineManager.genTHREELine(A) + } + }, { + key: "addTrack", + value: function(A) { + var e = ((new Date).getTime() * (Math.random() + 1)).toString(36).slice(0, 8) + , t = this._genLine(A); + return this.trackSet[e] = { + componentKey: A.componentKey, + lineId: [t] + }, + e + } + }, { + key: "appendTrack", + value: function(A) { + var e = this.trackSet[A.trackId]; + if (e) { + var t = this._genLine(A); + e.lineId.push(t) + } + } + }, { + key: "removeTrack", + value: function(A) { + var e = this + , t = this.trackSet[A]; + t && (t.lineId.forEach((function(A) { + e.lineManager.rmCurve(A) + } + )), + delete this.trackSet[A]) + } + }, { + key: "startMove", + value: function(A) { + var e = this + , t = A.trackId + , i = A.startDir + , o = A.pointFn; + return new Promise((function(A, n) { + var r = e.trackSet[t]; + if (r) { + var a = r.lineId + , s = r.componentKey + , l = new M + , c = a.length + , h = e.lineManager.getCurve(a[0]).curve.getPoint(0) + , d = e.viewer.getBoxByComponentsKey(s) + , p = d.min + , g = d.max + , u = (new y).addVectors(p, g).divideScalar(2); + l.elements[12] = h.x - u.x, + l.elements[13] = h.y - u.y, + l.elements[14] = h.z - u.z, + e.viewer.componentApplyMatrix(s, l); + var m = 0 + , C = new M + , v = i.clone().normalize() + , I = function i(n) { + var r = e.lineManager.getCurve(a[Math.trunc(m)]).curve.getPoint(m - Math.trunc(m)) + , h = c > n ? e.lineManager.getCurve(a[Math.trunc(n)]).curve.getPoint(n - Math.trunc(n)) : e.lineManager.getCurve(a[c - 1]).curve.getPoint(1) + , d = new M; + d.elements[12] = -r.x, + d.elements[13] = -r.y, + d.elements[14] = -r.z; + var p = new f + , g = new y(h.x - r.x,h.y - r.y,h.z - r.z).normalize(); + p.setFromUnitVectors(v, g), + v.applyQuaternion(p); + var u = (new M).makeRotationFromQuaternion(p) + , I = new M; + I.elements[12] = h.x, + I.elements[13] = h.y, + I.elements[14] = h.z, + l.elements = C.elements, + e.viewer.componentApplyMatrix(s, I.multiply(u).multiply(d)), + m = n, + c > n ? "function" == typeof o ? requestAnimationFrame((function() { + i(o(t, n, h)) + } + )) : requestAnimationFrame((function() { + return i(parseFloat((n + .01).toFixed(2))) + } + )) : A({ + code: "success", + trackId: t + }) + }; + "function" == typeof o ? requestAnimationFrame((function() { + I(o(t, 0, h)) + } + )) : requestAnimationFrame((function() { + return I(.01) + } + )) + } else + n({ + code: "error", + message: "找不到指定轨迹" + }) + } + )) + } + }]), + A + }() + , eB = function(A, e) { + Ue.call(this, A); + var t = this + , i = void 0 !== (e = e || {}).textureWidth ? e.textureWidth : 512 + , o = void 0 !== e.textureHeight ? e.textureHeight : 512 + , n = void 0 !== e.clipBias ? e.clipBias : 0 + , r = void 0 !== e.alpha ? e.alpha : 1 + , s = void 0 !== e.time ? e.time : 0 + , l = void 0 !== e.waterNormals ? e.waterNormals : null + , c = void 0 !== e.sunDirection ? e.sunDirection : new y(.70707,.70707,0) + , h = new LA(void 0 !== e.sunColor ? e.sunColor : 16777215) + , d = new LA(void 0 !== e.waterColor ? e.waterColor : 8355711) + , u = void 0 !== e.eye ? e.eye : new y(0,0,0) + , f = void 0 !== e.distortionScale ? e.distortionScale : 20 + , m = void 0 !== e.side ? e.side : 0 + , C = void 0 !== e.fog && e.fog + , v = new EA + , I = new y + , E = new y + , B = new y + , x = new M + , S = new y(0,0,-1) + , w = new p + , b = new y + , U = new y + , F = new p + , K = new M + , Q = new je + , R = new g(i,o,{ + minFilter: 1006, + magFilter: 1006, + format: 1022, + stencilBuffer: !1 + }); + a.isPowerOfTwo(i) && a.isPowerOfTwo(o) || (R.texture.generateMipmaps = !1); + var T = { + uniforms: Ge.merge([Xe.fog, Xe.lights, { + normalSampler: { + value: null + }, + mirrorSampler: { + value: null + }, + alpha: { + value: 1 + }, + time: { + value: 0 + }, + size: { + value: 1 + }, + distortionScale: { + value: 20 + }, + textureMatrix: { + value: new M + }, + sunColor: { + value: new LA(8355711) + }, + sunDirection: { + value: new y(.70707,.70707,0) + }, + eye: { + value: new y + }, + waterColor: { + value: new LA(5592405) + } + }]), + vertexShader: ["uniform mat4 textureMatrix;", "uniform float time;", "varying vec4 mirrorCoord;", "varying vec4 worldPosition;", tt.fog_pars_vertex, tt.shadowmap_pars_vertex, "void main() {", " mirrorCoord = modelMatrix * vec4( position, 1.0 );", " worldPosition = mirrorCoord.xyzw;", " mirrorCoord = textureMatrix * mirrorCoord;", " vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );", " gl_Position = projectionMatrix * mvPosition;", tt.fog_vertex, tt.shadowmap_vertex, "}"].join("\n"), + fragmentShader: ["uniform sampler2D mirrorSampler;", "uniform float alpha;", "uniform float time;", "uniform float size;", "uniform float distortionScale;", "uniform sampler2D normalSampler;", "uniform vec3 sunColor;", "uniform vec3 sunDirection;", "uniform vec3 eye;", "uniform vec3 waterColor;", "varying vec4 mirrorCoord;", "varying vec4 worldPosition;", "vec4 getNoise( vec2 uv ) {", " vec2 uv0 = ( uv / 103.0 ) + vec2(time / 17.0, time / 29.0);", " vec2 uv1 = uv / 107.0-vec2( time / -19.0, time / 31.0 );", " vec2 uv2 = uv / vec2( 8907.0, 9803.0 ) + vec2( time / 101.0, time / 97.0 );", " vec2 uv3 = uv / vec2( 1091.0, 1027.0 ) - vec2( time / 109.0, time / -113.0 );", " vec4 noise = texture2D( normalSampler, uv0 ) +", " texture2D( normalSampler, uv1 ) +", " texture2D( normalSampler, uv2 ) +", " texture2D( normalSampler, uv3 );", " return noise * 0.5 - 1.0;", "}", "void sunLight( const vec3 surfaceNormal, const vec3 eyeDirection, float shiny, float spec, float diffuse, inout vec3 diffuseColor, inout vec3 specularColor ) {", " vec3 reflection = normalize( reflect( -sunDirection, surfaceNormal ) );", " float direction = max( 0.0, dot( eyeDirection, reflection ) );", " specularColor += pow( direction, shiny ) * sunColor * spec;", " diffuseColor += max( dot( sunDirection, surfaceNormal ), 0.0 ) * sunColor * diffuse;", "}", tt.common, tt.packing, tt.bsdfs, tt.fog_pars_fragment, tt.lights_pars_begin, tt.shadowmap_pars_fragment, tt.shadowmask_pars_fragment, "void main() {", " vec4 noise = getNoise( worldPosition.xz * size );", " vec3 surfaceNormal = normalize( noise.xzy * vec3( 1.5, 1.0, 1.5 ) );", " vec3 diffuseLight = vec3(0.0);", " vec3 specularLight = vec3(0.0);", " vec3 worldToEye = eye-worldPosition.xyz;", " vec3 eyeDirection = normalize( worldToEye );", " sunLight( surfaceNormal, eyeDirection, 100.0, 2.0, 0.5, diffuseLight, specularLight );", " float distance = length(worldToEye);", " vec2 distortion = surfaceNormal.xz * ( 0.001 + 1.0 / distance ) * distortionScale;", " vec3 reflectionSample = vec3( texture2D( mirrorSampler, mirrorCoord.xy / mirrorCoord.w + distortion ) );", " float theta = max( dot( eyeDirection, surfaceNormal ), 0.0 );", " float rf0 = 0.3;", " float reflectance = rf0 + ( 1.0 - rf0 ) * pow( ( 1.0 - theta ), 5.0 );", " vec3 scatter = max( 0.0, dot( surfaceNormal, eyeDirection ) ) * waterColor;", " vec3 albedo = mix( ( sunColor * diffuseLight * 0.3 + scatter ) * getShadowMask(), ( vec3( 0.1 ) + reflectionSample * 0.9 + reflectionSample * specularLight ), reflectance);", " vec3 outgoingLight = albedo;", " gl_FragColor = vec4( outgoingLight, alpha );", tt.tonemapping_fragment, tt.fog_fragment, "}"].join("\n") + } + , k = new Pe({ + fragmentShader: T.fragmentShader, + vertexShader: T.vertexShader, + uniforms: Ge.clone(T.uniforms), + transparent: 1 > r, + lights: !0, + side: m, + fog: C + }); + k.uniforms.mirrorSampler.value = R.texture, + k.uniforms.textureMatrix.value = K, + k.uniforms.alpha.value = r, + k.uniforms.time.value = s, + k.uniforms.normalSampler.value = l, + k.uniforms.sunColor.value = h, + k.uniforms.waterColor.value = d, + k.uniforms.sunDirection.value = c, + k.uniforms.distortionScale.value = f, + k.uniforms.eye.value = u, + t.material = k, + t.onBeforeRender = function(A, e, i) { + if (E.setFromMatrixPosition(t.matrixWorld), + B.setFromMatrixPosition(i.matrixWorld), + x.extractRotation(t.matrixWorld), + I.set(0, 0, 1), + I.applyMatrix4(x), + b.subVectors(E, B), + 0 >= b.dot(I)) { + b.reflect(I).negate(), + b.add(E), + x.extractRotation(i.matrixWorld), + S.set(0, 0, -1), + S.applyMatrix4(x), + S.add(B), + U.subVectors(E, S), + U.reflect(I).negate(), + U.add(E), + Q.position.copy(b), + Q.up.set(0, 1, 0), + Q.up.applyMatrix4(x), + Q.up.reflect(I), + Q.lookAt(U), + Q.far = i.far, + Q.updateMatrixWorld(), + Q.projectionMatrix.copy(i.projectionMatrix), + K.set(.5, 0, 0, .5, 0, .5, 0, .5, 0, 0, .5, .5, 0, 0, 0, 1), + K.multiply(Q.projectionMatrix), + K.multiply(Q.matrixWorldInverse), + v.setFromNormalAndCoplanarPoint(I, E), + v.applyMatrix4(Q.matrixWorldInverse), + w.set(v.normal.x, v.normal.y, v.normal.z, v.constant); + var o = Q.projectionMatrix; + F.x = (Math.sign(w.x) + o.elements[8]) / o.elements[0], + F.y = (Math.sign(w.y) + o.elements[9]) / o.elements[5], + F.z = -1, + F.w = (1 + o.elements[10]) / o.elements[14], + w.multiplyScalar(2 / w.dot(F)), + o.elements[2] = w.x, + o.elements[6] = w.y, + o.elements[10] = w.z + 1 - n, + o.elements[14] = w.w, + u.setFromMatrixPosition(i.matrixWorld); + var r = A.getRenderTarget() + , a = A.xr.enabled + , s = A.shadowMap.autoUpdate; + t.visible = !1, + A.xr.enabled = !1, + A.shadowMap.autoUpdate = !1, + A.setRenderTarget(R), + A.clear(), + A.render(e, Q), + t.visible = !0, + A.xr.enabled = a, + A.shadowMap.autoUpdate = s, + A.setRenderTarget(r) + } + } + }; + (eB.prototype = Object.create(Ue.prototype)).constructor = eB; + var tB = function(A) { + this.name = A.name || "", + this.id = A.id || "", + this.keyFrameList = [], + this.roamTime = 5, + this.interpolateType = 1, + this.fps = 50, + this.parts = 100, + this.rotateSpeed = Math.PI / this.roamTime / this.fps / 4, + this.parameters = { + segments: this.roamTime * this.fps * this.parts, + closed: !1, + curveType: "centripetal", + tension: .25 + }, + this.modificationId = 0, + this.mapDeltaAngle = {}, + this.mapDeltaOffset = {}, + this.allocateSegmentList = null, + this.positionCurve = void 0, + this.init(A) + }; + tB.prototype.init = function(A) { + this.setKeyFrameList(A.keyFrameList), + this.setParameters(A.parameters), + this.setInterpolateType(A.type), + this.setFps(A.fps), + this.setRoamTime(A.roamTime) + } + , + tB.prototype.addKeyFrame = function(A) { + var e = new y(A.position.x,A.position.y,A.position.z) + , t = new y(A.target.x,A.target.y,A.target.z) + , i = new y(A.up.x,A.up.y,A.up.z) + , o = null; + if (A.quaternion) + o = new f(A.quaternion.x,A.quaternion.y,A.quaternion.z,A.quaternion.w); + else { + var n = new M; + n.lookAt(e, t, i), + o = (new f).setFromRotationMatrix(n) + } + this.keyFrameList.push({ + position: e, + target: t, + up: i, + id: A.id, + quaternion: o, + curve: A.curve + }), + this.modificationId += 1 + } + , + tB.prototype.setKeyFrameList = function(A) { + this.keyFrameList = []; + for (var e = 0, t = A.length; t > e; e += 1) + this.addKeyFrame(A[e]); + this.calRotateSpeed() + } + , + tB.prototype.removeKeyFrame = function(A) { + A >= 0 && this.keyFrameList.length > A && (this.keyFrameList.splice(A, 1), + this.modificationId += 1) + } + , + tB.prototype.getKeyFrames = function() { + return this.keyFrameList + } + , + tB.prototype.getKeyFrameCount = function() { + return this.keyFrameList.length + } + , + tB.prototype.clearFrames = function() { + this.keyFrameList = [] + } + , + tB.prototype.getJumpCounts = function(A) { + var e = A / (1e3 / this.fps) * this.parts; + return e = parseInt(e, 0) + } + , + tB.prototype.setRoamTime = function(A) { + this.roamTime = A, + this.setSegments(A * this.fps * this.parts), + this.calRotateSpeed() + } + , + tB.prototype.calRotateSpeed = function() { + var A = this.getKeyFrames().length; + A > 1 && (this.rotateSpeed = Math.PI * (A - 1) / this.roamTime / this.fps / 4) + } + , + tB.prototype.setInterpolateType = function(A) { + this.interpolateType = A || 1, + 1 === this.interpolateType && this.setSplineTension(0) + } + , + tB.prototype.getInterpolateType = function() { + return this.interpolateType + } + , + tB.prototype.setName = function(A) { + this.name = A + } + , + tB.prototype.getName = function() { + return this.name + } + , + tB.prototype.getId = function() { + return this.id + } + , + tB.prototype.getKeyFramePositions = function() { + for (var A = [], e = 0, t = this.keyFrameList.length; t > e; e += 1) { + A.push(this.keyFrameList[e].position) + } + return A + } + , + tB.prototype.getKeyFramePosition = function(A) { + return this.keyFrameList[A].position + } + , + tB.prototype.getKeyFrameDirection = function(A) { + var e = this.keyFrameList[A]; + return e.target.clone().sub(e.position) + } + , + tB.prototype.getKeyFrameTarget = function(A) { + return this.keyFrameList[A].target + } + , + tB.prototype.getKeyFrameUp = function(A) { + return this.keyFrameList[A].up + } + , + tB.prototype.allocateSegments = function() { + for (var A = [], e = 0, t = this.keyFrameList.length; t - 1 > e; e += 1) { + var i = this.keyFrameList[e].position; + A.push(this.keyFrameList[e + 1].position.clone().sub(i).length()) + } + for (var o = 0, n = 0, r = A.length; r > n; n += 1) + o += A[n]; + for (var a = this.getSegments(), s = 0, l = A.length; 0 !== o && l > s; s += 1) + A[s] /= o, + A[s] *= this.getSegments(), + A[s] = Math.floor(A[s]), + a -= A[s]; + for (var c = 0; a > c; c += 1) + A[c] > 0 && (A[c] += 1); + this.allocateSegmentList = A + } + , + tB.prototype.getAllocateSegmentCount = function(A) { + return null === this.allocateSegmentList && this.allocateSegments(), + this.allocateSegmentList[A] + } + , + tB.prototype.getSplineParam = function(A, e) { + return null === this.allocateSegmentList && this.allocateSegments(), + (A + e / this.allocateSegmentList[A]) / this.allocateSegmentList.length + } + , + tB.prototype.getDeltaAngle = function(A) { + return this.mapDeltaAngle[A] + } + , + tB.prototype.calculateDeltaAngle = function() { + for (var A = this.allocateSegmentList, e = 0; A.length > e; e += 1) { + var t = 0; + if (this.keyFrameList[e].quaternion && this.keyFrameList[e + 1].quaternion) { + var i = this.keyFrameList[e].quaternion + , o = this.keyFrameList[e + 1].quaternion + , n = (new f).multiplyQuaternions(o, i.clone().inverse()); + n.normalize(), + t = 2 * Math.acos(n.w) + } else { + var r = this.getKeyFrameDirection(e) + , a = this.getKeyFrameDirection(e + 1); + t = r.angleTo(a) + } + var s = A[e]; + if (0 === s) { + var l = Math.floor(t / this.rotateSpeed) * this.parts; + A[e] = l, + this.mapDeltaAngle[e] = t / l + } else + this.mapDeltaAngle[e] = t / s + } + } + , + tB.prototype.getRotateAxis = function(A) { + var e = this.keyFrameList[A].quaternion + , t = this.keyFrameList[A + 1].quaternion; + if (e && t) { + var i = (new f).multiplyQuaternions(t, e.clone().inverse()); + return i.normalize(), + new y(i.x,i.y,i.z).normalize() + } + var o = this.getKeyFrameDirection(A) + , n = this.getKeyFrameDirection(A + 1); + return o.clone().cross(n.clone()).normalize() + } + , + tB.prototype.getDeltaOffset = function(A) { + return this.mapDeltaOffset[A] + } + , + tB.prototype.getPositionAtCurve = function(A, e) { + var t = this.keyFrameList[A + 1]; + if (t && t.curve) + return t.curve.getPointAt(e) + } + , + tB.prototype.getPositionAtCurve = function(A, e) { + var t = this.keyFrameList[A + 1]; + if (t && t.curve) + return t.curve.getPointAt(e) + } + , + tB.prototype.getLatestPositionAtCurve = function(A) { + var e = this.keyFrameList[A]; + if (e && e.curve) + return e.position + } + , + tB.prototype.calculateDeltaOffset = function() { + for (var A = this.allocateSegmentList, e = this.getKeyFramePositions(), t = 0; A.length > t; t += 1) { + var i = e[t] + , o = e[t + 1] + , n = this.allocateSegmentList[t]; + this.mapDeltaOffset[t] = 0 === n ? new y : o.clone().sub(i).divideScalar(n) + } + } + , + tB.prototype.setSplineTension = function(A) { + 0 > A || A > 1 || (this.parameters.tension = A, + this.modificationId += 1) + } + , + tB.prototype.setSegments = function(A) { + this.parameters.segments = A, + this.modificationId += 1 + } + , + tB.prototype.getSegments = function() { + return this.parameters.segments + } + , + tB.prototype.setParameters = function(A) { + A && (this.parameters = A, + this.modificationId += 1) + } + , + tB.prototype.getParameters = function() { + return this.parameters + } + , + tB.prototype.setFps = function(A) { + this.fps = A || 50, + this.calRotateSpeed(), + this.modificationId += 1 + } + , + tB.prototype.getFps = function() { + return this.fps + } + , + tB.prototype.getModificationId = function() { + return this.modificationId + } + , + tB.prototype.export = function() { + return { + name: this.name, + id: this.id, + fps: this.fps, + roamTime: this.roamTime, + type: this.interpolateType, + keyFrameList: this.keyFrameList + } + } + ; + var iB = function(A) { + this.viewer = A.viewer, + this.roam = null, + this.bPause = !1, + this.bContinue = !1, + this.spline = null, + this.reqid = 0, + this.playBinded = this._play.bind(this), + this.recordId = -1, + this.keyFrameIdx = 0, + this.count = -1, + this.camera = this.viewer.cameraControl.camera, + this.pausePlayCallback = [], + this.stopPlayCallback = [], + this.keyFrameCallback = [], + this.timeRecorder = { + last: 0, + pause: 0, + deltaTime: 0 + }, + this.setRoam(A.roamData) + }; + iB.prototype.setRoam = function(A) { + this.roam = A, + this.bPause = !1, + this.recordId = -1, + this.spline = null, + this.keyFrameIdx = 0, + this.count = -1 + } + , + iB.prototype.updateCamera = function(A, e, t) { + this.camera.position.add(A), + this.camera.target.addVectors(this.camera.position, e), + this.camera.up.copy(t) + } + , + iB.prototype.updateCameraToFrame = function(A) { + var e = this.roam.getKeyFramePosition(A) + , t = this.roam.getKeyFrameTarget(A) + , i = this.roam.getKeyFrameUp(A); + this.camera.position.copy(e), + this.camera.target.copy(t), + this.camera.up.copy(i) + } + , + iB.prototype.reAllocate = function() { + this.recordId !== this.roam.getModificationId() && (this.roam.allocateSegments(), + this.roam.calculateDeltaOffset(), + this.roam.calculateDeltaAngle(), + this.recordId = this.roam.getModificationId()) + } + , + iB.prototype._play = function() { + var A = new f + , e = new f + , t = new y + , i = new y(0,1,0) + , o = new y; + return function() { + this.reqid = setTimeout(this.playBinded, this.roam.getFps()), + !1 === this.bContinue ? (this.bContinue = !0, + this.timeRecorder.deltaTime = this.timeRecorder.pause - this.timeRecorder.last) : this.timeRecorder.deltaTime = performance.now() - this.timeRecorder.last, + this.timeRecorder.last = performance.now(); + var n = this.roam.getJumpCounts(this.timeRecorder.deltaTime); + if (this.reAllocate(), + this.bPause) + return this.timeRecorder.pause = performance.now(), + clearTimeout(this.reqid), + this.triggerPausePlayCallback(), + this.bPause = !1, + void (this.bContinue = !1); + var r = this.roam.getKeyFrameCount() + , a = this.roam.getAllocateSegmentCount(this.keyFrameIdx); + if (0 === a) + this.keyFrameIdx += 1, + this.triggerKeyFrameCallback(this.keyFrameIdx), + this.count = -1; + else if (this.keyFrameIdx === r - 1) + this.updateCameraToFrame(this.keyFrameIdx), + this.stop(); + else if (-1 === this.count) + this.timeStart = performance.now(), + 0 === this.keyFrameIdx && this.triggerKeyFrameCallback(0), + this.updateCameraToFrame(this.keyFrameIdx), + this.count = 0; + else if (a > this.count) { + this.count + n > a && (n = a - this.count); + var s = this.count / a + , l = this.roam.keyFrameList[this.keyFrameIdx].quaternion + , c = this.roam.keyFrameList[this.keyFrameIdx + 1].quaternion; + A.copy(c), + l.equals(c) || f.slerp(l, c, A, s); + var h = this.roam.keyFrameList[this.keyFrameIdx]; + t.subVectors(h.target, h.position), + t.applyQuaternion(e.copy(l).inverse()), + t.applyQuaternion(A), + i.set(0, 1, 0), + i.applyQuaternion(A); + var d = this.roam.getPositionAtCurve(this.keyFrameIdx, s); + if (d) + this.camera.position.copy(d); + else { + var p = this.roam.getDeltaOffset(this.keyFrameIdx); + o.copy(p).multiplyScalar(n), + this.camera.position.add(o) + } + if (this.camera.target.addVectors(this.camera.position, t), + this.camera.up.copy(i), + a > this.count + n) + this.count += n; + else { + this.keyFrameIdx += 1; + var g = this.roam.getLatestPositionAtCurve(this.keyFrameIdx); + g && this.camera.position.copy(g), + this.triggerKeyFrameCallback(this.keyFrameIdx), + this.count = 0 + } + } + this.viewer.render() + } + }(), + iB.prototype.play = function() { + this.bPause = !1, + this._play() + } + , + iB.prototype.pause = function() { + this.bPause = !0 + } + , + iB.prototype.continue = function() { + this.bContinue = !0, + this.bPause = !1, + this._play() + } + , + iB.prototype.stop = function() { + this.bPause = !1, + this.keyFrameIdx = 0, + this.count = -1, + clearTimeout(this.reqid), + this.triggerStopPlayCallback() + } + , + iB.prototype.startFrom = function(A) { + for (var e = this.roam, t = e.getKeyFrameCount(), i = e.getKeyFrames(), o = 0; t > o; o += 1) + if (i[o].id === A) + return this.keyFrameIdx = o, + void (this.count = -1) + } + , + iB.prototype.addKeyFrameCallback = function(A) { + this.keyFrameCallback.push(A) + } + , + iB.prototype.addPausePlayCallback = function(A) { + this.pausePlayCallback.push(A) + } + , + iB.prototype.addStopPlayCallback = function(A) { + this.stopPlayCallback.push(A) + } + , + iB.prototype.triggerKeyFrameCallback = function(A) { + this.keyFrameCallback.forEach((function(e) { + e(A) + } + )) + } + , + iB.prototype.triggerPausePlayCallback = function() { + this.pausePlayCallback.forEach((function(A) { + A() + } + )) + } + , + iB.prototype.triggerStopPlayCallback = function() { + this.stopPlayCallback.forEach((function(A) { + A() + } + )) + } + , + iB.prototype.updataSpline = function() { + var A = this.roam.getKeyFramePositions() + , e = this.roam.getParameters(); + this.spline = new la(A,e.closed,e.curveType,e.tension) + } + ; + var oB = function() { + this.roamList = [] + }; + oB.prototype.clear = function() { + this.roamList = [] + } + , + oB.prototype.add = function(A) { + this.roamList.push(A) + } + , + oB.prototype.remove = function(A) { + for (var e = 0, t = this.roamList.length; t > e; e += 1) { + if (this.roamList[e].getName() === A) + return void this.roamList.splice(e, 1) + } + } + , + oB.prototype.save = function() { + return JSON.stringify(this.roamList) + } + , + oB.prototype.load = function(A) { + this.clear(); + for (var e = JSON.parse(A), t = 0, i = e.length; i > t; t += 1) { + var o = new tB({ + name: e[t].name, + keyFrameList: e[t].keyFrameList, + parameters: e[t].parameters, + roamTime: e[t].roamTime, + type: e[t].type, + fps: e[t].fps + }); + this.add(o) + } + return this.roamList + } + ; + var nB = function(A, e) { + this.coordinateSystem = A, + this.viewer = A.viewer, + this.drawingImpl = e, + this.viewportOffset = this.viewer.domElement.getBoundingClientRect(), + this.cameraControl = this.viewer.cameraControl, + this.fillClipPlane = this.viewer.getScene().getFillClipPlane(), + this.initialize() + }; + nB.prototype.initialize = function() { + this.arrowMouseDown = !1, + this.circleXMouseDown = !1, + this.circleYMouseDown = !1, + this.firstClickDown = !0, + this.firstRotate = !0, + this.lineOut = !0, + this.arrowOut = !0, + this.translateStartPt = new s, + this.translateEndPt = new s, + this.rotateAngleA = 0, + this.rotateAngleB = 0, + this.config = this.coordinateSystem.config + } + , + nB.prototype.registerArrowEvents = function() { + var A = this.drawingImpl.getDrawable("axisZ") + , e = this + , t = this.config.colors; + A.onmouseover = function() { + !0 !== e.circleXMouseDown && !0 !== e.circleYMouseDown && (e.drawingImpl.setColor("axisZ", t.highLight), + e.drawingImpl.fill("arrow", t.highLight), + e.drawingImpl.setColor("tipArcX", t.default), + e.drawingImpl.fill("cubeX", t.default), + e.drawingImpl.setColor("tipArcY", t.default), + e.drawingImpl.fill("cubeY", t.default), + e.lineOut = !1) + } + , + A.onmouseout = function() { + !0 !== e.circleXMouseDown && !0 !== e.circleYMouseDown && !1 === e.arrowMouseDown && !0 === e.arrowOut && (e.drawingImpl.setColor("axisZ", t.arrow), + e.drawingImpl.fill("arrow", t.arrow), + e.drawingImpl.setColor("tipArcX", t.tipArcX), + e.drawingImpl.fill("cubeX", t.cubeX), + e.drawingImpl.setColor("tipArcY", t.tipArcY), + e.drawingImpl.fill("cubeY", t.cubeY), + e.lineOut = !0) + } + , + A.onmousedown = function(A) { + e.arrowMouseDown = !0, + e.lineOut = !1; + var t = e.config.colors; + e.drawingImpl.setColor("axisZ", t.highLight), + e.drawingImpl.fill("arrow", t.highLight), + e.coordinateSystem.colorUpdate = !1, + e.translateStartPt.set(A.clientX, A.clientY) + } + ; + var i = this.drawingImpl.getDrawable("arrow"); + i.onmouseover = function() { + if (!0 !== e.circleXMouseDown && !0 !== e.circleYMouseDown) { + e.arrowOut = !1; + var A = e.config.colors; + e.drawingImpl.fill("arrow", A.highLight), + e.drawingImpl.setColor("axisZ", A.highLight), + e.drawingImpl.setColor("tipArcX", A.default), + e.drawingImpl.fill("cubeX", A.default), + e.drawingImpl.setColor("tipArcY", A.default), + e.drawingImpl.fill("cubeY", A.default) + } + } + , + i.onmouseout = function() { + if (!0 !== e.circleXMouseDown && !0 !== e.circleYMouseDown && !1 === e.arrowMouseDown && !0 === e.lineOut) { + e.arrowOut = !0; + var A = e.config.colors; + e.drawingImpl.setColor("axisZ", A.arrow), + e.drawingImpl.fill("arrow", A.arrow), + e.drawingImpl.setColor("tipArcX", A.tipArcX), + e.drawingImpl.fill("cubeX", A.cubeX), + e.drawingImpl.setColor("tipArcY", A.tipArcY), + e.drawingImpl.fill("cubeY", A.cubeY) + } + } + , + i.onmousedown = function(A) { + e.arrowMouseDown = !0, + e.arrowOut = !1; + var t = e.config.colors; + e.drawingImpl.setColor("axisZ", t.highLight), + e.drawingImpl.fill("arrow", t.highLight), + e.translateStartPt.set(A.clientX, A.clientY) + } + , + document.onmousemove = function(A) { + if (!0 === e.arrowMouseDown) { + if (!(A.clientX === e.translateStartPt.x && A.clientY === e.translateStartPt.y)) { + var t = e.fillClipPlane.renderClipPlane + , i = t.normal.clone(); + i.w = t.constant; + var o = e.cameraControl.movePlane(i, A, e.translateStartPt, !1, e.fillClipPlane.position.clone()); + null !== o && e.fillClipPlane.offset(o), + e.translateStartPt.set(A.clientX, A.clientY), + e.cameraControl.update(!0) + } + e.coordinateSystem.update(); + var n = e.config.colors; + e.drawingImpl.setColor("axisZ", n.highLight), + e.drawingImpl.fill("arrow", n.highLight), + e.drawingImpl.setColor("tipArcX", n.default), + e.drawingImpl.fill("cubeX", n.default), + e.drawingImpl.setColor("tipArcY", n.default), + e.drawingImpl.fill("cubeY", n.default), + A.preventDefault(), + A.stopPropagation() + } + } + , + document.onmouseup = function() { + if (!1 !== e.arrowMouseDown) { + e.arrowMouseDown = !1, + e.coordinateSystem.colorUpdate = !0; + var A = e.config.colors; + e.drawingImpl.setColor("axisZ", A.arrow), + e.drawingImpl.fill("arrow", A.arrow), + e.drawingImpl.setColor("tipArcX", A.tipArcX), + e.drawingImpl.fill("cubeX", A.cubeX), + e.drawingImpl.setColor("tipArcY", A.tipArcY), + e.drawingImpl.fill("cubeY", A.cubeY), + vc.ClippingCaps = !0, + e.viewer.render() + } + } + } + , + nB.prototype.registerCircleXEvents = function() { + var A = this + , e = this.config.colors + , t = this.drawingImpl.getDrawable("tipArcX"); + t.onmousedown = function() { + A.circleXMouseDown = !0, + A.drawingImpl.setColor("axisZ", e.default), + A.drawingImpl.fill("arrow", e.default), + A.enableCircleXMovement() + } + , + t.onmouseout = function() { + !1 === A.circleXMouseDown && (A.drawingImpl.setColor("axisZ", e.arrow), + A.drawingImpl.fill("arrow", e.arrow), + A.drawingImpl.setColor("tipArcY", e.tipArcY), + A.drawingImpl.fill("cubeY", e.cubeY), + A.coordinateSystem.circleToArc("tipArcX")) + } + , + document.addEventListener("mouseup", (function() { + !0 === A.circleXMouseDown && (vc.ClippingCaps = !0, + A.viewer.render()), + A.circleXMouseDown = !1, + A.firstClickDown = !0, + A.firstRotate = !1, + A.lastRotateX = 0, + A.lastRotateY = 0, + A.drawingImpl.show("tipArcY", !0), + A.drawingImpl.show("axisY", !0), + A.drawingImpl.show("axisZ", !0), + A.drawingImpl.show("cubeY", !0), + A.coordinateSystem.update(), + A.drawingImpl.show("dashLineX", !1), + A.drawingImpl.setColor("axisZ", e.arrow), + A.drawingImpl.fill("arrow", e.arrow) + } + )) + } + , + nB.prototype.registerCircleYEvents = function() { + var A = this + , e = this.config.colors + , t = this.drawingImpl.getDrawable("tipArcY"); + t.onmousedown = function() { + A.circleYMouseDown = !0, + A.drawingImpl.setColor("axisZ", e.default), + A.drawingImpl.fill("arrow", e.default), + A.enableCircleYMovement() + } + , + t.onmouseout = function() { + !1 === A.circleYMouseDown && (A.drawingImpl.setColor("axisZ", e.arrow), + A.drawingImpl.fill("arrow", e.arrow), + A.coordinateSystem.circleToArc("tipArcY"), + A.drawingImpl.setColor("tipArcX", e.tipArcX), + A.drawingImpl.fill("cubeX", e.cubeX)) + } + , + document.addEventListener("mouseup", (function() { + !0 === A.circleYMouseDown && (vc.ClippingCaps = !0, + A.viewer.render()), + A.circleYMouseDown = !1, + A.drawingImpl.show("tipArcX", !0), + A.drawingImpl.show("cubeX", !0), + A.coordinateSystem.update(), + A.drawingImpl.show("dashLineY", !1), + A.drawingImpl.setColor("axisZ", e.arrow), + A.drawingImpl.fill("arrow", e.arrow) + } + )) + } + , + nB.prototype.enableCircleXMovement = function() { + var A = this + , e = this.config.colors; + document.addEventListener("mousemove", (function(t) { + if (!0 === A.circleXMouseDown) { + A.drawingImpl.show("dashLineX", !0), + A.drawingImpl.setColor("axisZ", e.default), + A.drawingImpl.fill("arrow", e.default), + vc.ClippingCaps = !1; + var i = A.fillClipPlane.normalIndex + , o = A.viewportOffset + , n = new s(t.clientX - o.left,t.clientY - o.top) + , r = A.calcRotateAngleIndex(n, A.coordinateSystem.discretePointsX); + !0 === A.firstClickDown && (A.lastIndex = r); + var a = 2 * (r - A.lastIndex); + i > 3 && (a = -a), + A.drawingImpl.show("tipArcY", !1), + A.coordinateSystem.updateAxisZ(); + var l = A.fillClipPlane.renderClipPlane.normal.clone() + , c = A.coordinateSystem.getCoordinateAxis() + , h = A.config.styles; + A.coordinateSystem.drawClipPlaneCircle("tipArcZ", c.start.clone(), h.auxCircleRadius, A.coordinateSystem.dirX, l); + var d = A.coordinateSystem.drawingToCanvas(c.start.clone()) + , p = A.coordinateSystem.drawingToCanvas(c.endY.clone()); + A.coordinateSystem.drawAxisY(d, p, e.highLight), + A.coordinateSystem.drawCubeX("cubeX", p, h.cubeRadius), + A.drawingImpl.show("cubeY", !1); + var g = "x"; + 2 > i && (g = "y"), + A.fillClipPlane.rotateAngleOffset(a, g), + A.coordinateSystem.backwardCoordinate(), + !0 === A.firstClickDown ? A.firstClickDown = !1 : A.lastIndex = r, + A.translateStartPt.set(t.clientX, t.clientY), + A.viewer.render(), + t.preventDefault(), + t.stopPropagation() + } + } + )) + } + , + nB.prototype.enableCircleYMovement = function() { + var A = this + , e = this.config.colors; + document.addEventListener("mousemove", (function(t) { + if (!0 === A.circleYMouseDown) { + A.drawingImpl.show("dashLineY", !0), + A.drawingImpl.setColor("axisZ", e.default), + A.drawingImpl.fill("arrow", e.default), + vc.ClippingCaps = !1; + var i = A.fillClipPlane.normalIndex + , o = A.viewportOffset + , n = new s(t.clientX - o.left,t.clientY - o.top) + , r = A.calcRotateAngleIndex(n, A.coordinateSystem.discretePointsY); + !0 === A.firstClickDown && (A.lastIndex = r); + var a = 2 * (r - A.lastIndex); + i > 3 && (a = -a), + A.drawingImpl.show("tipArcX", !1), + A.coordinateSystem.updateAxisZ(); + var l = A.fillClipPlane.renderClipPlane.normal.clone() + , c = A.coordinateSystem.getCoordinateAxis() + , h = A.config.styles; + A.coordinateSystem.drawClipPlaneCircle("tipArcZ", c.start.clone(), h.auxCircleRadius, A.coordinateSystem.dirX.clone(), l.clone()); + var d = A.coordinateSystem.drawingToCanvas(c.start.clone()) + , p = A.coordinateSystem.drawingToCanvas(c.endX.clone()); + A.coordinateSystem.drawAxisX(d, p, e.highLight), + A.coordinateSystem.drawCubeY("cubeY", p, h.cubeRadius), + A.drawingImpl.show("cubeX", !1); + var g = "z"; + i > 3 && (g = "y"), + A.fillClipPlane.rotateAngleOffset(a, g), + A.coordinateSystem.backwardCoordinate(), + !0 === A.firstClickDown ? A.firstClickDown = !1 : A.lastIndex = r, + A.translateStartPt.set(t.clientX, t.clientY), + A.viewer.render(), + t.preventDefault(), + t.stopPropagation() + } + } + )) + } + , + nB.prototype.registerTipArcXEvents = function() { + var A = this + , e = this.config.colors + , t = this.drawingImpl.getDrawable("tipArcX"); + t.onmouseover = function() { + !1 === A.circleYMouseDown && (A.coordinateSystem.arcToCircle("tipArcX"), + A.drawingImpl.setColor("tipArcY", e.default), + A.drawingImpl.fill("cubeY", e.default), + A.drawingImpl.setColor("axisZ", e.default), + A.drawingImpl.fill("arrow", e.default), + A.registerCircleXEvents()) + } + , + t.onmouseout = function() { + !1 === A.circleXMouseDown && A.coordinateSystem.circleToArc("tipArcX") + } + } + , + nB.prototype.registerTipArcYEvents = function() { + var A = this + , e = this.config.colors + , t = this.drawingImpl.getDrawable("tipArcY"); + t.onmouseover = function() { + !1 === A.circleXMouseDown && (A.coordinateSystem.arcToCircle("tipArcY"), + A.drawingImpl.setColor("tipArcX", e.default), + A.drawingImpl.fill("cubeX", e.default), + A.drawingImpl.setColor("axisZ", e.default), + A.drawingImpl.fill("arrow", e.default), + A.registerCircleYEvents()) + } + , + t.onmouseout = function() { + !1 === A.circleYMouseDown && A.coordinateSystem.circleToArc("tipArcY") + } + } + , + nB.prototype.calcRotateAngleIndex = function(A, e) { + for (var t = this.createLine(A, this.coordinateSystem.cOrigin), i = -1, o = Number.POSITIVE_INFINITY, n = 0; 90 > n; n += 1) { + var r = e[n].clone() + , a = this.disPointToLine(r, t); + o > a && (o = a, + i = n) + } + var s = 90 + i + , l = e[i].clone().distanceTo(A); + return e[s].clone().distanceTo(A) > l ? i : s + } + , + nB.prototype.createLine = function(A, e) { + var t = {}; + if (A.x === e.x) + t.A = 1, + t.B = 0, + t.C = -A.x; + else { + var i = (e.y - A.y) / (e.x - A.x) + , o = e.y - i * e.x; + t.A = i, + t.B = -1, + t.C = o + } + return t + } + , + nB.prototype.disPointToLine = function(A, e) { + return Math.abs(e.A * A.x + e.B * A.y + e.C) / Math.sqrt(e.A * e.A + e.B * e.B) + } + ; + var rB = function() { + return { + colors: { + tipArcX: "#0000FF", + cubeX: "#0000FF", + tipArcY: "#FF0000", + cubeY: "#FF0000", + highLight: "#FFFF00", + tipLine: "#4dc0ff", + arrow: "#4dc0ff", + default: "#A9A9A9" + }, + styles: { + dashArray: "10 8", + originRadius: 5, + auxCircleRadius: .1, + tipLineLength: .1, + cubeRadius: 5, + axisXWidth: 2, + axisYWidth: 2, + axisZWidth: 3, + axisXLength: .1, + axisYLength: .1, + axisZLength: .14, + segments: 180, + tipArcLeftCounts: 45, + tipArcRightCounts: 45 + } + } + } + , aB = function(A, e) { + this.coordinateSystem = A, + this.viewer = e, + this.container = this.viewer.domElement.querySelector("div:first-child"), + this.mapDrawables = {}, + this.initialize() + }; + aB.prototype.initialize = function() { + this.xmlns = "http://www.w3.org/2000/svg"; + var A = document.createElement("div"); + A.style.left = "0px", + A.style.top = "0px", + A.style.width = this.container.offsetWidth + "px", + A.style.height = this.container.offsetHeight + "px", + A.style.position = "absolute", + this.group = document.createElementNS(this.xmlns, "svg"), + this.group.setAttribute("width", String(this.container.offsetWidth)), + this.group.setAttribute("height", String(this.container.offsetHeight)), + A.appendChild(this.group), + this.container.appendChild(A) + } + , + aB.prototype.makeCircle = function(A, e) { + var t = this.mapDrawables; + void 0 === t[A] && (t[A] = document.createElementNS(this.xmlns, "circle"), + this.group.appendChild(t[A])); + var i = t[A]; + i.style.fill = e.color || "#FF0000", + i.setAttribute("r", String(e.radius)), + i.setAttribute("transform", "translate(" + e.center.x + "," + e.center.y + ")") + } + , + aB.prototype.show = function(A, e) { + var t = this.getDrawable(A); + t && (t.style.display = e ? "block" : "none") + } + , + aB.prototype.fill = function(A, e) { + this.getDrawable(A).style.fill = e ? "block" : "none" + } + , + aB.prototype.makeLine = function(A, e) { + var t = this.mapDrawables; + void 0 === t[A] && (t[A] = document.createElementNS(this.xmlns, "line"), + this.group.appendChild(t[A])); + var i = t[A]; + i.setAttribute("stroke", e.color || "#000000"), + i.setAttribute("stroke-width", e.width || 3), + i.setAttribute("x1", String(e.start.x)), + i.setAttribute("y1", String(e.start.y)), + i.setAttribute("x2", String(e.end.x)), + i.setAttribute("y2", String(e.end.y)) + } + , + aB.prototype.makeDashLine = function(A, e) { + this.makeLine(A, e), + this.mapDrawables[A].setAttribute("stroke-dasharray", e.dashArray) + } + , + aB.prototype.makePolyline = function(A, e) { + var t = null + , i = this.mapDrawables; + void 0 === i[A] && (i[A] = document.createElementNS(this.xmlns, "polyline"), + this.group.appendChild(i[A])), + (t = i[A]).setAttribute("stroke", e.color || "#A9A9A9"), + t.setAttribute("stroke-width", e.width || 3), + t.style.fill = "none", + t.setAttribute("points", e.points) + } + , + aB.prototype.makeDefs = function(A) { + var e = this.mapDrawables; + void 0 === e[A] && (e[A] = document.createElementNS(this.xmlns, "defs"), + void 0 === e.marker && (e.marker = this.makeMarker(), + e[A].appendChild(e.marker)), + this.group.appendChild(e[A])) + } + , + aB.prototype.makeMarker = function() { + var A = document.createElementNS(this.xmlns, "marker"); + A.setAttribute("id", "arrow"), + A.setAttribute("viewBox", "0 0 10 10"), + A.setAttribute("refX", "5"), + A.setAttribute("refY", "5"), + A.setAttribute("markerWidth", "6"), + A.setAttribute("markerHeight", "6"), + A.setAttribute("orient", "auto-start-reverse"); + var e = document.createElementNS(this.xmlns, "path"); + return e.setAttribute("d", "M 0 0 L 10 5 L 0 10 z"), + e.style.fill = "#11DAB7", + this.mapDrawables.arrow = e, + A.appendChild(e), + A + } + , + aB.prototype.getDrawable = function(A) { + return this.mapDrawables[A] + } + , + aB.prototype.attach = function() { + this.getDrawable("axisZ").setAttribute("marker-end", "url(#arrow)") + } + , + aB.prototype.setColor = function(A, e) { + this.getDrawable(A).setAttribute("stroke", e) + } + , + aB.prototype.fill = function(A, e) { + this.getDrawable(A).style.fill = e + } + , + aB.prototype.hideAll = function(A) { + this.group.style.display = !0 === A ? "none" : "block" + } + , + aB.prototype.destroy = function() { + for (var A = this.group.children, e = 0; A.length > e; e += 1) + this.group.removeChild(A[e]); + this.group.parentNode.removeChild(this.group) + } + ; + var sB = function(A) { + this.viewer = A, + this.enable = !0, + this.cameraControl = A.cameraControl, + this.fillClipPlane = A.getScene().getFillClipPlane(), + this.container = A.domElement.querySelector("div:first-child"), + this.config = new rB, + this.drawingImpl = new aB(this,A), + this.coordinateAction = new nB(this,this.drawingImpl), + this.initialize() + }; + sB.prototype.initialize = function() { + this.enable = !0, + this.boundingBox = new Ps, + this.bRegisterArrowEvent = !1, + this.bRegisterAuxCircleEvent = !1, + this.mapDrawableName = { + ORIGIN: "origin", + AXISX: "axisX", + AXISY: "axisY", + CUBEX: "cubeX", + CUBEY: "cubeY", + AXISZ: "axisZ", + ARROW: "arrow", + DASHLINE: "dashLine", + TIPARC_X: "tipArcX", + TIPARC_Y: "tipArcY", + TIPARC_Z: "tipArcZ", + DASHLINE_X: "dashLineX", + DASHLINE_Y: "dashLineY" + } + } + , + sB.prototype.saveTransform = function(A) { + this.savedCamera = A.clone() + } + , + sB.prototype.drawingToCanvas = function(A) { + var e = Rd.drawingToCanvas(this.cameraControl.camera, A, this.container.offsetWidth, this.container.offsetHeight); + return new s(e.x,e.y) + } + , + sB.prototype.getCoordinateAxis = function() { + var A = this.fillClipPlane.renderClipPlane.normal.clone() + , e = this.fillClipPlane.getCoordinate() + , t = e.axisY.clone() + , i = A.clone().cross(t.clone()); + this.fillClipPlane.normalIndex > 3 && (t = (i = e.axisX.clone()).clone().cross(A.clone())); + var o = this.config.styles + , n = this.fillClipPlane.position.clone() + , r = this.cameraControl.getCamera().position.clone().sub(n).length() + , a = n.clone().add(i.clone().multiplyScalar(o.axisXLength * r)) + , s = n.clone().add(t.clone().multiplyScalar(o.axisYLength * r)) + , l = n.clone().add(A.clone().multiplyScalar(o.axisZLength * r)); + return this.dirX = i, + this.dirY = t, + { + start: n, + endX: a, + endY: s, + endZ: l + } + } + , + sB.prototype.drawOrigin = function(A, e) { + this.drawingImpl.makeCircle(this.mapDrawableName.ORIGIN, { + center: A, + radius: e, + color: this.config.colors.default + }) + } + , + sB.prototype.drawAxisX = function(A, e, t) { + this.drawingImpl.makeLine(this.mapDrawableName.AXISX, { + start: A, + end: e, + width: this.config.styles.axisXWidth, + color: t || this.config.colors.default + }) + } + , + sB.prototype.drawAxisY = function(A, e, t) { + var i = this.config; + this.drawingImpl.makeLine(this.mapDrawableName.AXISY, { + start: A, + end: e, + width: i.styles.axisYWidth, + color: t || i.colors.default + }) + } + , + sB.prototype.drawAxisZ = function(A, e) { + var t = this.config; + this.drawingImpl.makeLine(this.mapDrawableName.AXISZ, { + start: A, + end: e, + width: t.styles.axisZWidth, + color: t.colors.arrow + }), + this.drawingImpl.attach(), + !1 === this.bRegisterArrowEvent && (this.coordinateAction.registerArrowEvents(), + this.bRegisterArrowEvent = !0) + } + , + sB.prototype.updateAxisZ = function() { + var A = this.getCoordinateAxis() + , e = this.drawingToCanvas(A.start.clone()) + , t = this.drawingToCanvas(A.endZ.clone()); + this.drawingImpl.makeLine(this.mapDrawableName.AXISZ, { + start: e, + end: t, + color: this.config.colors.default + }) + } + , + sB.prototype.drawArrow = function(A, e) { + var t = this.mapDrawableName; + this.drawingImpl.makeLine(t.AXISZ, { + start: A, + end: e + }), + this.drawingImpl.attach(), + this.drawingImpl.setColor(t.AXISZ, this.config.colors.default), + !1 === this.bRegisterArrowEvent && (this.coordinateAction.registerArrowEvents(), + this.bRegisterArrowEvent = !0) + } + , + sB.prototype.drawClipPlaneCircle = function(A, e, t, i, o) { + for (var n = { + center: e.clone(), + radius: t, + normal: i.clone(), + rotateAxis: o.clone() + }, r = this.config.styles.segments, a = this.discreteCircle(n, r), s = "", l = 0; r > l; l += 1) + s += a[l].x + "," + a[l].y, + s += " "; + s += a[0].x + "," + a[0].y, + this.drawingImpl.makePolyline(A, { + points: s += " ", + color: this.config.colors.default, + width: 2 + }) + } + , + sB.prototype.drawTipArc = function(A, e, t, i, o) { + var n = { + center: e.clone(), + radius: t, + normal: i.clone(), + rotateAxis: o.clone() + } + , r = this.config.styles + , a = r.tipArcRightCounts + , s = r.tipArcLeftCounts + , l = r.segments + , c = this.discreteCircle(n, l); + A === this.mapDrawableName.TIPARC_X ? (this.discretePointsX = c, + a = r.tipArcLeftCounts, + s = r.tipArcRightCounts) : this.discretePointsY = c; + for (var h = "", d = l - a - 1; l > d; d += 1) + h += c[d].x + "," + c[d].y, + h += " "; + for (var p = 0; s >= p; p += 1) + h += c[p].x + "," + c[p].y, + h += " "; + var g = { + points: h, + color: this.config.colors.tipArcX + }; + A === this.mapDrawableName.TIPARC_X ? (this.drawingImpl.makePolyline(A, g), + this.coordinateAction.registerTipArcXEvents()) : A === this.mapDrawableName.TIPARC_Y && (g.color = this.config.colors.tipArcY, + this.drawingImpl.makePolyline(A, g), + this.coordinateAction.registerTipArcYEvents()) + } + , + sB.prototype.drawTipLine = function(A, e, t) { + var i = this.drawingToCanvas(e.clone()) + , o = this.drawingToCanvas(t.clone()) + , n = this.config; + this.drawingImpl.makeDashLine(A, { + start: i, + end: o, + color: n.colors.tipLine, + dashArray: n.styles.dashArray + }), + this.drawingImpl.show(A, !1) + } + , + sB.prototype.drawCubeX = function(A, e, t) { + this.drawingImpl.makeCircle(A, { + center: e, + radius: t, + color: this.config.colors.cubeX + }) + } + , + sB.prototype.drawCubeY = function(A, e, t, i) { + this.drawingImpl.makeCircle(A, { + center: e, + radius: t, + color: i || this.config.colors.cubeY + }) + } + , + sB.prototype.discreteCircle = function(A, e) { + for (var t = A.center.clone(), i = A.radius, o = A.rotateAxis.clone(), n = A.normal.clone(), r = [], a = 0; e > a; a += 1) { + n.applyAxisAngle(o, 2 * Math.PI / e); + var s = t.clone().add(n.clone().multiplyScalar(i)) + , l = this.drawingToCanvas(s.clone()); + r.push(l) + } + return r + } + , + sB.prototype.arcToCircle = function(A) { + var e = "" + , t = this.discretePointsX; + A === this.mapDrawableName.TIPARC_Y && (t = this.discretePointsY); + for (var i = 0, o = t.length; o > i; i += 1) + e += t[i].x + "," + t[i].y, + e += " "; + e += t[0].x + "," + t[0].y, + this.drawingImpl.makePolyline(A, { + points: e += " ", + color: this.config.colors.highLight + }) + } + , + sB.prototype.circleToArc = function(A) { + var e = this.config.styles + , t = e.tipArcLeftCounts + , i = e.tipArcRightCounts + , o = e.segments + , n = this.discretePointsX + , r = { + color: this.config.colors.tipArcX + }; + A === this.mapDrawableName.TIPARC_Y && (n = this.discretePointsY, + r.color = this.config.colors.tipArcY, + t = e.tipArcRightCounts, + i = e.tipArcLeftCounts); + for (var a = "", s = o - t - 1; o > s; s += 1) + a += n[s].x + "," + n[s].y, + a += " "; + for (var l = 0; i >= l; l += 1) + a += n[l].x + "," + n[l].y, + a += " "; + r.points = a, + this.drawingImpl.makePolyline(A, r) + } + , + sB.prototype.update = function() { + if (this.enable) { + var A = this.fillClipPlane.position.clone() + , e = this.cameraControl.getCamera().position.clone().sub(A).length() + , t = this.getCoordinateAxis() + , i = this.drawingToCanvas(t.start.clone()) + , o = this.drawingToCanvas(t.endX.clone()) + , n = this.drawingToCanvas(t.endY.clone()) + , r = this.drawingToCanvas(t.endZ.clone()); + void 0 === this.createRefs && (this.drawingImpl.makeDefs("refs"), + this.createRefs = !0), + this.cOrigin = i.clone(), + this.drawAxisZ(i, r), + this.drawAxisX(i, o), + this.drawAxisY(i, n); + var a = this.config.styles + , s = this.mapDrawableName + , l = this.fillClipPlane.renderClipPlane.normal.clone(); + this.drawClipPlaneCircle(s.TIPARC_Z, t.start.clone(), a.auxCircleRadius * e, this.dirX, l), + this.drawTipArc(s.TIPARC_X, t.start.clone(), a.auxCircleRadius * e, l, this.dirX), + this.drawTipArc(s.TIPARC_Y, t.start.clone(), a.auxCircleRadius * e, l, this.dirY); + var c = t.start.clone().add(this.dirX.clone().multiplyScalar(a.tipLineLength * e)) + , h = t.start.clone().sub(this.dirX.clone().multiplyScalar(a.tipLineLength * e)); + this.drawTipLine(s.DASHLINE_X, c, h); + var d = t.start.clone().add(this.dirY.clone().multiplyScalar(a.tipLineLength * e)) + , p = t.start.clone().sub(this.dirY.clone().multiplyScalar(a.tipLineLength * e)); + this.drawTipLine(s.DASHLINE_Y, d, p), + this.drawOrigin(i, a.originRadius); + var g = this.discretePointsX[44].clone(); + this.drawCubeX(s.CUBEX, g, a.cubeRadius); + var u = this.discretePointsY[134].clone(); + this.drawCubeY(s.CUBEY, u, a.cubeRadius), + this.updateBbox() + } else + this.hide(!0) + } + , + sB.prototype.hide = function(A) { + this.drawingImpl.hideAll(A) + } + , + sB.prototype.enabled = function(A) { + this.enable = A + } + , + sB.prototype.destroy = function() { + this.drawingImpl.destroy() + } + , + sB.prototype.updateBbox = function() { + this.boundingBox.makeEmpty(); + for (var A = 0; this.discretePointsX.length > A; A += 1) { + var e = this.discretePointsX[A].clone(); + this.boundingBox.expandByPoint(e) + } + for (A = 0; this.discretePointsY.length > A; A += 1) { + e = this.discretePointsY[A].clone(); + this.boundingBox.expandByPoint(e) + } + var t = this.getCoordinateAxis() + , i = this.drawingToCanvas(t.start.clone()) + , o = this.drawingToCanvas(t.endZ.clone()); + this.boundingBox.expandByPoint(i), + this.boundingBox.expandByPoint(o), + this.boundingBox.expandByScalar(5) + } + , + sB.prototype.insideBoundingBox = function(A) { + return this.boundingBox.containsPoint(A.clone()) + } + , + sB.prototype.backwardCoordinate = function() { + var A = this.cameraControl.camera.position + , e = this.cameraControl.camera.target.clone().sub(A.clone()).normalize() + , t = this.fillClipPlane.renderClipPlane.normal.clone(); + e.angleTo(t); + Math + } + ; + var lB = { + Forward: 0, + Reverse: 1 + } + , cB = { + X: 0, + Y: 4, + Z: 2 + } + , hB = function(A) { + var e = A.viewer; + if (e) { + if (e._sectionBox && e._sectionBox.exit(), + e._sectionPlane) + return e._sectionPlane; + e._sectionPlane = this, + this.id = A.id, + this._opt = A, + this.mode = A.mode, + this._plane = A.plane, + this._direction = A.direction, + this._progress = A.progress, + this.init(), + this.setPlane(A.plane) + } else + Bh.log("domElement must not be empty.") + }; + hB.prototype = { + init: function() { + this.enableCoordinate = !0; + var A = this._opt.viewer.getViewerImpl(); + this.coordinateSystem = new sB(A), + A.controlManager.enableTool(A, Pc.CLIP_FILL), + this._sectionTool = A.getScene().getFillClipPlane(), + this._sectionTool.enable(!0, !0), + this.hookEvens() + }, + hookEvens: function() { + var A = this + , e = this.coordinateSystem + , t = this._opt.viewer.getViewerImpl(); + t.getDomElement(); + t.registerEventListener(Rc.ON_CLIP_HOVER, (function(t) { + if (!1 !== A.enableCoordinate) + if (t.onClipPlane) + e.enable && (e.update(), + e.hide(!1)); + else { + var i = new s(t.event.clientX,t.event.clientY); + e.insideBoundingBox(i) ? e.hide(!1) : e.hide(!0) + } + } + )), + t.registerEventListener(Rc.ON_CLIP_MOUSE_DOWN, (function(A) {} + )), + t.registerEventListener(Rc.ON_CLIP_MOUSE_MOVE, (function(A) { + e.update() + } + )), + t.registerDomEventListener(Rc.ON_CONTROL_ZOOM, (function(A) { + e.update() + } + )) + }, + exit: function() { + var A = this._opt.viewer.getViewerImpl() + , e = A.getScene().getFillClipPlane(); + A.controlManager.disableTool(Pc.CLIP_FILL), + e.enable(!1, !1), + this.coordinateSystem.destroy(), + this._sectionTool = null, + this._opt.viewer._sectionPlane = null + }, + setProgress: function(A) { + var e = 1 - A / 50; + this._progress = A, + this._sectionTool.setProcess(e) + }, + getProgress: function() { + return 50 * (1 - this._sectionTool.getProcess()) + }, + setPlane: function(A) { + var e = lB[this._direction] + cB[A]; + this._plane = A, + this._sectionTool.changeNormal(e), + this.setProgress(this._opt.progress) + }, + getPlane: function() { + return this._plane + }, + setDirection: function(A) { + var e = lB[A] + cB[this._plane]; + this._direction = A, + this._sectionTool.changeNormal(e), + this.setProgress(this._opt.progress) + }, + getDirection: function() { + return this._direction + }, + setRotateAngle: function(A, e) { + this._sectionTool.setRotateAngle(A, e) + }, + getRotateAngle: function() { + return this._sectionTool.getRotateAngle() + }, + hidePlane: function() { + this._sectionTool.visible = !1, + this.enableCoordinate = !1, + this.coordinateSystem.hide(!0) + }, + showPlane: function() { + this._sectionTool.visible = !0, + this.enableCoordinate = !0 + }, + reset: function() { + this.setPlane(this._opt.plane), + this.setDirection(this._opt.direction), + this.setProgress(this._opt.progress) + }, + getState: function() { + return this._sectionTool.store() + }, + setState: function(A) { + this._sectionTool.restore(A) + } + }; + var dB = function(A) { + var e = this + , t = A; + "function" == typeof A.getViewerImpl && (t = A.getViewerImpl()), + this.marks = {}, + this.SelectedMark = {}, + this.components = {}, + this.allOids = []; + var i = { + id: "", + name: "mark", + scale: 20, + alwaysVisible: !1, + color: [99, 99, 99], + wordColor: [0, 0, 0], + position: [0, 0, 0] + } + , o = new s + , n = 0 + , r = 0; + function a(A) { + var e = [0, 0]; + if (A) { + for (var t = A.target, i = 0, o = 0; t.offsetParent; ) + i += t.offsetLeft, + o += t.offsetTop, + t = t.offsetParent; + e[0] = A.pageX - i, + e[1] = A.pageY - o + } else + A = window.event, + e.x = A.x, + e.y = A.y; + return e + } + function l(A) { + var i = new Dd + , n = new y(o.x / t.domElement.clientWidth * 2 - 1,-o.y / t.domElement.clientHeight * 2 + 1,.5); + i.setFromCamera(n, t.camera), + i.camera = t.camera, + i._camera = t.camera; + var r = Object.values(e.components) + , a = i.intersectObjects(r); + a && a.length > 0 && e.SelectedMark !== a[0].object ? (e.SelectedMark = a[0].object, + e.dispatchEvent("updated", { + added: { + objects: e.SelectedMark + } + })) : (e.SelectedMark = {}, + e.dispatchEvent("updated", { + removed: { + objects: e.SelectedMark + } + })) + } + function c(A) { + var e = a(A); + o.x = n = e[0], + o.y = r = e[1] + } + function h(A) { + var e = a(A); + (e[0] > n ? 5 > e[0] - n : 5 > n - e[0]) && (e[1] > r ? 5 > e[1] - r : 5 > r - e[1]) && (o.x = n = e[0], + o.y = r = e[1], + l()) + } + function p(A) { + o.x = n = A.changedTouches[0].clientX, + o.y = r = A.changedTouches[0].clientY + } + function g(A) { + (A.changedTouches[0].clientX > n ? 5 > A.changedTouches[0].clientX - n : 5 > n - A.changedTouches[0].clientX) && (A.changedTouches[0].clientY > r ? 5 > A.changedTouches[0].clientY - r : 5 > r - A.changedTouches[0].clientY) && (o.x = n = A.changedTouches[0].clientX, + o.y = r = A.changedTouches[0].clientY, + l()) + } + this.active = !0, + e.domElement = t.domElement, + this.enabled = function() { + this.mousedown = t.domElement.addEventListener("mousedown", c, !1), + this.mouseup = t.domElement.addEventListener("mouseup", h, !1) + } + , + this.disabled = function() { + this.mousedown = t.domElement.removeEventListener("mousedown", c, !1), + this.mouseup = t.domElement.removeEventListener("mouseup", h, !1) + } + , + this.touchEnabled = function() { + this.touchstart = t.domElement.addEventListener("touchstart", p, !1), + this.touchend = t.domElement.addEventListener("touchend", g, !1) + } + , + this.touchDisabled = function() { + this.touchstart = t.domElement.removeEventListener("touchstart", p, !1), + this.touchend = t.domElement.removeEventListener("touchend", g, !1) + } + , + this.enabled(), + this.add = function(A, t) { + var o = Object.assign({}, i, A); + if ("" !== o.id) + for (var n = 0; e.allOids.length > n; n += 1) + if (o.id === e.allOids[n]) + return { + data: "标签id重复" + }; + (o.position.isVector3 || (o.position = new y(o.position[0],o.position[1],o.position[2])), + Array.isArray(o.color)) && (o.color = "rgb(" + o.color[0] + "," + o.color[1] + "," + o.color[2] + ")"); + Array.isArray(o.wordColor) && (o.wordColor = "rgb(" + o.wordColor[0] + "," + o.wordColor[1] + "," + o.wordColor[2] + ")"); + var r = document.createElement("canvas"); + r.width = 28 * o.name.length, + r.height = 150; + var a = r.getContext("2d"); + a.fillStyle = "rgba(255, 255, 255, 0)", + a.lineWidth = 2, + a.strokeStyle = o.color, + a.strokeRect(5, 0, r.width - 5, 30), + a.moveTo(5, 141), + a.lineTo(5, 30), + a.stroke(), + a.fillStyle = o.color, + a.beginPath(), + a.arc(5, 145, 4, 0, 2 * Math.PI), + a.fill(), + a.fillRect(10, 5, r.width - 15, 20), + a.font = "bold 18px Arial", + a.fillStyle = o.wordColor, + a.textAlign = "center", + a.fillText(o.name, r.width / 2, 20); + var s = new d(r); + s.needsUpdate = !0; + var l = new ro({ + map: s, + color: 16777215, + depthTest: o.alwaysVisible + }) + , c = new vo(l); + c.center.x = 0, + c.center.y = 0, + c.scale.set(o.scale * l.map.image.width, o.scale * l.map.image.height, 1), + c.position.copy(o.position), + c.updateMatrixWorld(), + c.key = "" !== o.id ? o.id : c.uuid, + e.addObjectToScene(o, c), + "function" == typeof t && t(c.key) + } + , + this.addObjectToScene = function(A, e) { + A && A.id && e && (this.components[A.id] = e, + this.allOids.push(A.id), + this.marks[A.id] = A, + t.addExternalObject(A.id, e)) + } + , + this.updateMark = function(A, i) { + if (e.marks[A]) { + var o = Object.assign({}, e.marks[A], i) + , n = this.components[A]; + if (n) { + if (o.position.isVector3 || (o.position = new y(o.position[0],o.position[1],o.position[2])), + Array.isArray(o.color)) + o.color = "rgb(" + o.color[0] + "," + o.color[1] + "," + o.color[2] + ")"; + if (Array.isArray(o.wordColor)) + o.wordColor = "rgb(" + o.color[0] + "," + o.color[1] + "," + o.color[2] + ")"; + var r = document.createElement("canvas"); + r.width = 28 * o.name.length, + r.height = 150; + var a = r.getContext("2d"); + a.fillStyle = "rgba(255, 255, 255, 0)", + a.lineWidth = 2, + a.strokeStyle = o.color, + a.strokeRect(5, 0, r.width - 5, 30), + a.moveTo(5, 141), + a.lineTo(5, 30), + a.stroke(), + a.fillStyle = o.color, + a.beginPath(), + a.arc(5, 145, 4, 0, 2 * Math.PI), + a.fill(), + a.fillRect(10, 5, r.width - 15, 20), + a.font = "bold 18px Arial", + a.fillStyle = o.wordColor, + a.textAlign = "center", + a.fillText(o.name, r.width / 2, 20); + var s = new d(r); + s.needsUpdate = !0; + var l = new ro({ + map: s, + color: 16777215, + depthTest: o.alwaysVisible + }); + n.material = l, + n.scale.set(o.scale * n.material.map.image.width, o.scale * n.material.map.image.height, 1), + n.position.copy(o.position), + n.updateMatrixWorld(), + t.render(), + e.marks[A] = o + } + } + } + , + this.remove = function(A) { + if (null == A) + return { + data: "未选中mark" + }; + Array.isArray(A) || (A = [A]); + for (var i = 0; A.length > i; i += 1) { + var o = e.allOids.indexOf(A[i]); + e.allOids.splice(o, 1), + delete e.components[A[i]], + t.removeExternalObjectByName(A[i]) + } + } + , + this.hide = function(A) { + if (null == A) + return { + data: "未选中mark" + }; + Array.isArray(A) || (A = [A]); + for (var e = null, t = 0; A.length > t; t += 1) + (e = this.components[A[t]]) && (e.visible = !1) + } + , + this.show = function(A) { + var t = null; + if (A) { + Array.isArray(A) || (A = [A]); + for (var i = 0; A.length > i; i += 1) + (t = this.components[A[i]]) && (t.visible = !0) + } else + for (var o in e.components) + (t = e.components[o]) && (t.visible = !0) + } + , + this.isolation = function(A) { + if (null == A) + return { + data: "未选中mark" + }; + if (e.show(), + e.allOids.length > 0) { + var t = e.allOids.concat(); + Array.isArray(A) || (A = [A]); + for (var i = 0; A.length > i; i += 1) { + var o = A[i]; + if (-1 === e.allOids.indexOf(o)) + return { + data: "mark不存在" + }; + for (var n = 0; t.length > n; n += 1) + if (o === t[n]) { + t.splice(n, 1); + break + } + } + var r = null; + for (n = 0; t.length > n; n += 1) + (r = e.components[t[n]]) && (r.visible = !1) + } + } + , + this.listentoSelectMarks = function(A) { + e.addEventListener("updated", (function() { + e.SelectedMark !== {} ? A(e.SelectedMark.key ? e.SelectedMark.key : e.SelectedMark.uuid, e.SelectedMark) : A(null, null) + } + )) + } + }; + Object.assign(dB.prototype, Ld.prototype); + var pB = function(A) { + var e = this; + this.Marks = new H, + A.modelManager.scene.add(e.Marks), + this.SelectedMark = {}, + this.components = {}, + this.allOids = []; + var t = { + id: "", + name: "mark", + scale: 20, + width: 1, + height: 1, + alwaysVisible: !1, + useImageSize: !0, + color: "#000000", + position: [0, 0, 0] + } + , i = new s + , o = 0 + , n = 0; + function r(A) { + var e = [0, 0]; + if (A) { + for (var t = A.target, i = 0, o = 0; t.offsetParent; ) + i += t.offsetLeft, + o += t.offsetTop, + t = t.offsetParent; + e[0] = A.pageX - i, + e[1] = A.pageY - o + } else + A = window.event, + e.x = A.x, + e.y = A.y; + return e + } + function a(t) { + var o = new Dd + , n = new y(i.x / A.domElement.clientWidth * 2 - 1,-i.y / A.domElement.clientHeight * 2 + 1,.5); + o.setFromCamera(n, A.camera); + var r = o.intersectObjects(e.Marks.children); + r && r.length > 0 && e.SelectedMark !== r[0].object ? (e.SelectedMark = r[0].object, + e.dispatchEvent("updated", { + added: { + objects: e.SelectedMark + } + })) : (e.SelectedMark = {}, + e.dispatchEvent("updated", { + removed: { + objects: e.SelectedMark + } + })) + } + function l(A) { + var e = r(A); + i.x = o = e[0], + i.y = n = e[1] + } + function c(A) { + var e = r(A); + (e[0] > o ? 5 > e[0] - o : 5 > o - e[0]) && (e[1] > n ? 5 > e[1] - n : 5 > n - e[1]) && (i.x = o = e[0], + i.y = n = e[1], + a()) + } + function h(A) { + i.x = o = A.changedTouches[0].clientX, + i.y = n = A.changedTouches[0].clientY + } + function p(A) { + (A.changedTouches[0].clientX > o ? 5 > A.changedTouches[0].clientX - o : 5 > o - A.changedTouches[0].clientX) && (A.changedTouches[0].clientY > n ? 5 > A.changedTouches[0].clientY - n : 5 > n - A.changedTouches[0].clientY) && (i.x = o = A.changedTouches[0].clientX, + i.y = n = A.changedTouches[0].clientY, + a()) + } + this.active = !0, + e.domElement = A.domElement, + this.enabled = function() { + this.mousedown = A.domElement.addEventListener("mousedown", l, !1), + this.mouseup = A.domElement.addEventListener("mouseup", c, !1) + } + , + this.disabled = function() { + this.mousedown = A.domElement.removeEventListener("mousedown", l, !1), + this.mouseup = A.domElement.removeEventListener("mouseup", c, !1) + } + , + this.touchEnabled = function() { + this.touchstart = A.domElement.addEventListener("touchstart", h, !1), + this.touchend = A.domElement.addEventListener("touchend", p, !1) + } + , + this.touchDisabled = function() { + this.touchstart = A.domElement.removeEventListener("touchstart", h, !1), + this.touchend = A.domElement.removeEventListener("touchend", p, !1) + } + , + this.enabled(), + this.add = function(i, o) { + var n = Object.assign({}, t, i); + if ("" !== n.id) + for (var r = 0; e.allOids.length > r; r += 1) + if (n.id === e.allOids[r]) + return { + data: "标签id重复" + }; + var a = document.createElement("canvas"); + a.width = 24 * n.name.length, + a.height = 32; + var s = a.getContext("2d"); + s.lineWidth = 3, + s.strokeStyle = "#0000FF", + s.strokeRect(0, 0, a.width, 32), + s.fillStyle = "#FFFFFF", + s.fillRect(3, 3, a.width - 6, 26), + s.font = " bold 24px Arial", + s.fillStyle = n.color, + s.textAlign = "center", + s.fillText(n.name, a.width / 2, 26), + console.log(a.width); + var l = new d(a); + l.needsUpdate = !0; + var c = new ro({ + map: l, + color: 16777215, + depthTest: n.alwaysVisible + }) + , h = new vo(c); + h.scale.set(n.scale * c.map.image.width, n.scale * c.map.image.height, 1), + n.position.isVector3 ? h.position.copy(n.position) : h.position.set(n.position[0], n.position[1], n.position[2]), + h.updateMatrixWorld(), + e.Marks.add(h), + A.render(), + "" !== n.id ? (h.key = n.id, + e.components[n.id] = h, + e.allOids.push(n.id)) : (h.key = h.uuid, + e.components[h.uuid] = h, + e.allOids.push(h.uuid)), + "function" == typeof o && o(h.key) + } + , + this.updateMark = function(i, o) { + var n = Object.assign({}, t, o) + , r = null; + if (e.components[i]) { + r = e.components[i]; + var a = document.createElement("canvas"); + a.width = 24 * n.name.length, + a.height = 32; + var s = a.getContext("2d"); + s.lineWidth = 3, + s.strokeStyle = "#0000FF", + s.strokeRect(0, 0, a.width, 32), + s.fillStyle = "#FFFFFF", + s.fillRect(3, 3, a.width - 6, 26), + s.font = " bold 24px Arial", + s.fillStyle = n.color, + s.textAlign = "center", + s.fillText(n.name, a.width / 2, 26); + var l = new d(a); + l.needsUpdate = !0; + var c = new ro({ + map: l, + color: 16777215, + depthTest: n.alwaysVisible + }); + r.material = c, + r.scale.set(n.scale * r.material.map.image.width, n.scale * r.material.map.image.height, 1), + n.position.isVector3 ? r.position.copy(n.position) : r.position.set(n.position[0], n.position[1], n.position[2]), + r.updateMatrixWorld(), + A.render() + } + } + , + this.remove = function(A) { + if (null == A) + return { + data: "未选中mark" + }; + Array.isArray(A) || (A = [A]); + for (var t = null, i = 0; A.length > i; i += 1) { + t = e.components[A[i]]; + var o = e.allOids.indexOf(A[i]); + e.allOids.splice(o, 1), + e.Marks.remove(t) + } + } + , + this.hide = function(A) { + if (null == A) + return { + data: "未选中mark" + }; + Array.isArray(A) || (A = [A]); + for (var t = null, i = 0; A.length > i; i += 1) + (t = e.components[A[i]]) && (t.visible = !1) + } + , + this.show = function(A) { + var t = null; + if (A) { + Array.isArray(A) || (A = [A]); + for (var i = 0; A.length > i; i += 1) + (t = e.components[A[i]]) && (t.visible = !0) + } else + for (var o in e.components) + (t = e.components[o]) && (t.visible = !0) + } + , + this.isolation = function(A) { + if (null == A) + return { + data: "未选中mark" + }; + if (e.show(), + e.allOids.length > 0) { + var t = e.allOids.concat(); + Array.isArray(A) || (A = [A]); + for (var i = 0; A.length > i; i += 1) { + var o = A[i]; + if (-1 === e.allOids.indexOf(o)) + return { + data: "mark不存在" + }; + for (var n = 0; t.length > n; n += 1) + if (o === t[n]) { + t.splice(n, 1); + break + } + } + var r = null; + for (n = 0; t.length > n; n += 1) + (r = e.components[t[n]]) && (r.visible = !1) + } + } + , + this.listentoSelectMarks = function(A) { + e.addEventListener("updated", (function() { + e.SelectedMark !== {} ? A(e.SelectedMark.key ? e.SelectedMark.key : e.SelectedMark.uuid, e.SelectedMark) : A(null, null) + } + )) + } + }; + Object.assign(pB.prototype, Ld.prototype); + var gB = function A() { + cc(this, A), + this.type = "circle", + this.lineHeight = 2, + this.color = "#ff0000", + this.titleColor = "#000000", + this.titleBackgroundColor = "#ff0000", + this.lineTitleBackgroundColor = "#ffffff" + } + , uB = function() { + function A(e, t, i, o, n, r) { + cc(this, A), + this.lineTitle = t, + this.icon = o, + this.title = i, + this.type = e.type, + this.lineHeight = e.lineHeight, + this.color = e.color, + this.titleBackgroundColor = e.titleBackgroundColor, + this.titleColor = e.titleColor, + this.lineTitleBackgroundColor = e.lineTitleBackgroundColor, + this.id = n, + this.scenePoint = r, + this.rootDiv = void 0, + this.lineTitleDiv = void 0, + this.contentDiv = void 0, + this.lineStartPosition = { + x: 0, + y: 0 + }, + this.lineEndPosition = { + x: 100, + y: 100 + }, + this._iconSize = 30, + this._marginLeft = 10, + this._dragStart = this._dragStart.bind(this), + this._dragMove = this._dragMove.bind(this), + this._dragEnd = this._dragEnd.bind(this), + this._lastDragPoint = void 0, + this._init() + } + return dc(A, [{ + key: "_init", + value: function() { + this.rootDiv = document.createElement("div"), + this.rootDiv.style.cssText = "position:absolute; left: 0px; top: 0px;-moz-user-select: none; -webkit-user-select: none; -ms-user-select: none; -khtml-user-select: none; user-select: none;"; + var A = document.createElementNS("http://www.w3.org/2000/svg", "svg"); + A.setAttribute("xmlns", "http://www.w3.org/2000/svg"), + A.style.overflow = "visible", + this.svg = A; + var e = document.createElementNS("http://www.w3.org/2000/svg", "path"); + e.style.fill = this.color, + this.arrow = e, + this.svg.appendChild(e), + this.rootDiv.appendChild(A); + var t = document.createElement("div"); + t.style.position = "absolute", + t.style.backgroundColor = "#ffffff", + t.style.color = this.titleColor, + t.innerText = this.lineTitle, + this.lineTitleDiv = t, + this.rootDiv.appendChild(t); + var i = document.createElement("div"); + this.contentDiv = i, + this.contentDiv.addEventListener("mousedown", this._dragStart); + var o = document.createElement("div"); + if (this.titleDiv = o, + o.style.display = "inline-block", + o.style.color = this.titleColor, + o.style.whiteSpace = "nowrap", + o.style.overflow = "hidden", + o.style.textOverflow = "ellipsis", + o.style.maxWidth = "150px", + o.style.position = "absolute", + o.style.top = "50%", + this.icon ? "circle" === this.type ? (o.style.left = "50%", + o.style.transform = "translate(-50%, 5px)") : (o.style.left = "".concat(this._marginLeft + this._iconSize + 5, "px"), + o.style.transform = "translate(0px, -50%)") : (o.style.left = "50%", + o.style.transform = "translate(-50%, -50%)"), + o.innerText = this.title, + this.contentDiv.appendChild(o), + this.icon) { + var n = document.createElement("img"); + n.style.width = "".concat(this._iconSize, "px"), + n.style.height = "".concat(this._iconSize, "px"), + n.style.position = "absolute", + n.style.pointerEvents = "none", + "circle" === this.type ? (n.style.left = "50%", + n.style.top = "50%", + n.style.transform = "translate(-50%, -100%)") : (n.style.left = "".concat(this._marginLeft, "px"), + n.style.top = "50%", + n.style.transform = "translate(0px, -50%)"), + n.src = this.icon, + this.contentDiv.appendChild(n) + } + this.rootDiv.appendChild(i) + } + }, { + key: "setLineStartPosition", + value: function(A, e) { + this.lineStartPosition.x = A, + this.lineStartPosition.y = e, + this.update() + } + }, { + key: "setLineEndPosition", + value: function(A, e) { + this.lineEndPosition.x = A, + this.lineEndPosition.y = e, + this.update() + } + }, { + key: "setLineStartAndEndPoint", + value: function(A, e, t, i) { + this.lineStartPosition.x = A, + this.lineStartPosition.y = e, + this.lineEndPosition.x = t, + this.lineEndPosition.y = i, + this.update() + } + }, { + key: "update", + value: function() { + var A = this.titleDiv.getBoundingClientRect(); + A.width += 2 * this._marginLeft, + "rectangle" === this.type && (this.icon && (A.width += this._iconSize, + A.width += 5), + A.height = 40); + var e = this.lineEndPosition.x - this.lineStartPosition.x + , t = this.lineEndPosition.y - this.lineStartPosition.y + , i = Math.atan2(t, e); + i > 0 || (i += 2 * Math.PI); + var o = i / Math.PI * 180 + , n = Math.sqrt(e * e + t * t); + if ("circle" === this.type) + n -= A.width / 2; + else { + var r = Math.tan(i); + Math.abs(r) > A.height / A.width ? n -= A.height / 2 / Math.abs(Math.sin(i)) : n -= A.width / 2 / Math.abs(Math.cos(i)) + } + n = Math.max(15, n); + var a = 0 + , s = 0 + , l = "M".concat(a, " ").concat(s); + l += "L".concat(a, " ").concat(s - this.lineHeight / 2), + l += "L".concat(a + n - 10, " ").concat(s - this.lineHeight / 2), + l += "A".concat(20, " ").concat(20, " 0 0 0 ").concat(a + n - 15, " ").concat(s - this.lineHeight / 2 - 10), + l += "L".concat(a + n, " ").concat(s), + l += "L".concat(a + n - 15, " ").concat(s + this.lineHeight / 2 + 10), + l += "A".concat(20, " ").concat(20, " 0 0 0 ").concat(a + n - 10, " ").concat(s + this.lineHeight / 2), + l += "L".concat(a, " ").concat(s + this.lineHeight / 2, "Z"), + this.arrow.setAttributeNS(null, "d", l); + var c = "translate(".concat(this.lineStartPosition.x, ", ").concat(this.lineStartPosition.y, ") rotate(").concat(o, ")"); + this.arrow.setAttributeNS(null, "transform", c); + var h = (this.lineStartPosition.y + this.lineEndPosition.y) / 2 + , d = "\n left:".concat((this.lineStartPosition.x + this.lineEndPosition.x) / 2, "px;top:").concat(h, "px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width:150px;\n position:absolute;\n transform:translate(-50%, -50%);\n background-color: ").concat(this.lineTitleBackgroundColor, ";\n "); + this.lineTitleDiv.style.cssText = d; + var p = this.lineEndPosition.x + , g = this.lineEndPosition.y; + d = "\n background-color:".concat(this.titleBackgroundColor, ";\n position: absolute;\n left:").concat(p, "px;\n top:").concat(g, "px;\n transform:translate(-50%,-50%);\n width:").concat(A.width, "px;\n cursor: move;\n "), + d += "circle" === this.type ? "\n height:".concat(A.width, "px;\n border-radius:").concat(A.width, "px;\n ") : "\n height:".concat(A.height, "px;\n border-radius:4px;\n "), + this.contentDiv.style.cssText = d + } + }, { + key: "_dragStart", + value: function(A) { + 0 === A.button && (document.addEventListener("mousemove", this._dragMove), + document.addEventListener("mouseup", this._dragEnd), + this._lastDragPoint = { + x: A.clientX, + y: A.clientY + }) + } + }, { + key: "_dragMove", + value: function(A) { + if (this._lastDragPoint) { + var e = A.clientY - this._lastDragPoint.y; + this.lineEndPosition.x += A.clientX - this._lastDragPoint.x, + this.lineEndPosition.y += e, + this.update(), + this._lastDragPoint.x = A.clientX, + this._lastDragPoint.y = A.clientY + } else + this._lastDragPoint = { + x: A.clientX, + y: A.clientY + } + } + }, { + key: "_dragEnd", + value: function(A) { + this._lastDragPoint = void 0, + document.removeEventListener("mousemove", this._dragMove), + document.removeEventListener("mouseup", this._dragEnd) + } + }]), + A + }() + , fB = function() { + function A(e, t) { + cc(this, A), + this.viewer3D = e, + this.EIMMODEL = t, + this.THREE = t.THREE, + this.marks = {}, + this.arrowConfig = new gB, + this.flag = 1, + this.update = this.update.bind(this), + e.registerCameraEventListener(this.EIMMODEL.EVENTS.ON_CAMERA_CHANGE, this.update) + } + return dc(A, [{ + key: "testData", + value: function() { + return [{ + lineTitle: "测试1", + title: "测试1胜利大街发", + icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACoAAAAoCAYAAACIC2hQAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAKqADAAQAAAABAAAAKAAAAACu2vZrAAAFXElEQVRYCe1YX0ybVRQvMB1ghyImq7CMxITyH8nmNPAwfDFb4iRj7mU+7GFbgEIIYMiWaaIsDpSwPQCJMDCYAZkvgEENGSEwQdbZEalCZjeB8bBRDIaAyYCFUurvfLmnu7RfW5AWXnaSH+fcc8495/Te+91zg0bznPy7AkH+DOdwOFIRLxmIFnGt4PeCgoLGxHjnGIrTAp8BDwFPRDby0e5IpUh8HPgb2CiR7/FtLRYJLwJrUoWPIF8F3gfeFCCZdGRjojkXt6VYJMrlrOArwAVgt6fkZBM+5MuU68nfL3pkSQc44RPIh+XAGMcAOcARWU8ydFkAzSGiGOmuPn4bI3gvZRGUw4Ex3gN8A9DWUjHvsU3m0NOPYOqVbX6TEf0QZwDv5MCQo4BJyXaFbcxhC5HkTsn3EOu98WBvRhXbCUn3pSTXQn5DGj+WZBY/QnH7xOArVoLLMSX1FkQkMomVmAZXmgX4QaGT2S3XNDDeBK6RHjwIoBhEJlffLY8R1KqExjnlYBjTF69GN6DMAN4GWoSDRZrHZ32add74Lm9GFVuU0M1JNtZJKkU8hb8EmfQoOAQt1Q4lx3hNdvAkb/aM/iMCycXdF7qn4COAQ4zV2L+iSLJxDI6p5u/UbbZQs5iZhJXhB81vQvcuijgIudoZ3V1QjoyYmyTMHNPdW9JsttAfxVx6HSnXCor7A/L3wIvCxlwMnWwJ0qdiRHP5hfWD08NfAlaCLvV5gEi+R1/HeAqwAGpkh/Ic1wGZ71GKtYf1fuUIfBlgkjtTJJTfsUHi9yFncBGQ5c70Bev9zpGI3p+PASK1Xr8f+hPAKeAtgM8y3Z+HAe71FCOw71MkOAkw0ePi/7yeTvp9FdUCorjrXKng9Oa8Ari+R0knv0fJ/bpazIDokIyOwF+UdZNEcwK75a6/GAkTgYVNFEq+ia5xNjJ2HnRPzqWlpa8uLS3pyB4cHLzLbrdbGhsbbeyPxEch/wQ4n3Fsc+HUNo/h3r3J+qKiot2IRz+W5kYCj+rr6x+wXeZee31hYWFUZmbmjZSUlAMhIAR9OjAw0J2bm2vgYikxEhkQtFEOrCIb5CLJHh0d/W12dvZRrVZLV5vGZDJNRkREfFhVVUVNZOPU1NT0ydzcHGI8o87Ozj8LCgrctg8e5595uUnnXbMWFxfvbWtrM8qei4uLjtbW1mvl5eUb75jYln2Dg4O/UyCbzebo7+8f6+3t/aWysrLCNSmP4VohJxayR/+KioozKOxWe3v7rzhe1L0cIyMjD7GTeo7pkzc0NHw8Ozur5BoaGrqXl5cXhy33+STDBLlzXfaVqKys7CXE3d/T03N7bW3NMT8/72hubr7ka55ix9bq+vr67lKVVCwOuNvWeQuEaZcI3nxcbTU1NedmZmaUVcV3YM7Pz4+RfVTPQlJSUk5ycjK1P83o6OjdsbGxFnmSLxkfzecEX36yfWJiogu57lDOhISE9LS0tA9ku5tM24ttUA759PS0rba29oybU4AUdXV1Z61Wq52OQHd3988lJSWvcCq3FU1MTDyWmpr6Dq4ijdlsHrBYLPTW3BbCznUBdygZdjRDp9NlqSY2GAyR9EvoF01NTS1VV1c7n3GqEwKgpB3Eqq7STdPR0dGFqyqU0qy78OPi4o5gNTNpNY1G4wNcxDp8/fkBqMdjyOXlZe3w8PAkGoEetWThujoAZ+O6QuPj40/HxMS8gA9BA8f0lZWVrz1GDKAhLCxMiR4bG/uyXq+nf6atL3RhYWEvrSZRaGioAmWwA39WV1c1OIIaXFlKF1y3ouPj4xdaWlpOh4eH70Bp7ilxTp+ghV91tzzXbH0F/gPRY0VbSFn/swAAAABJRU5ErkJggg==", + type: "rectangle" + }, { + lineTitle: "测试2", + title: "测试2胜利大街发", + icon: void 0, + type: "rectangle" + }, { + lineTitle: "测试3", + title: "测试3胜利大街发", + icon: void 0, + type: "rectangle" + }, { + lineTitle: "测试4", + title: "测试4胜利大街发", + icon: "data:image/png;base64,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", + type: "circle" + }, { + lineTitle: "测试5", + title: "测试5胜利大街发", + icon: void 0, + type: "rectangle" + }, { + lineTitle: "测试6", + title: "测试6胜利大街发", + icon: void 0, + type: "circle" + }, { + lineTitle: "测试7", + title: "测试7胜利大街发", + icon: "data:image/png;base64,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", + type: "rectangle" + }] + } + }, { + key: "addMarksAtComponent", + value: function(A, e, t) { + var i = this.viewer3D.getBoxByComponentsKey(A) + , o = new this.THREE.Vector3; + i.getCenter(o); + var n = o.toArray() + , r = this.viewer3D.getViewerImpl().domElement + , a = r.getBoundingClientRect() + , s = this.viewer3D.getScreenCoordFromSceneCoord(o) + , l = e || this.arrowConfig + , c = l.type + , h = 0 + , d = [s[0] + 250, s[1]] + , p = 250 + , g = 0 + , u = 0; + this.marks[A] || (this.marks[A] = []); + for (var f = 0, m = t.length; m > f; f += 1) { + var C = t[f]; + l.type = C.type || c; + var y = new uB(l,C.lineTitle,C.title,C.icon,this.flag,n); + r.appendChild(y.rootDiv), + y.setLineStartAndEndPoint(s[0], s[1], d[0], d[1]); + var v = y.contentDiv.getBoundingClientRect(); + if (f > 0) { + u += 2 * Math.asin((v.height / 2 + h / 2) / 2 / 250), + u += .1; + var I = Math.cos(u) + , E = Math.sin(u) + , B = p * I + g * -E + s[0] + , x = p * E + g * I + s[1]; + 0 > B ? B = v.width / 2 : B > a.width && (B = a.width - v.width / 2), + 0 > x ? x = v.height / 2 : x > a.height && (x = a.height - v.height / 2), + y.setLineEndPosition(B, x) + } + h = v.height, + this.flag += 1, + this.marks[A].push(y) + } + } + }, { + key: "addMarkAt", + value: function(A, e, t, i, o) { + var n = parseInt(A.x, 10).toString() + "_" + parseInt(A.y, 10).toString() + "_" + parseInt(A.z, 10).toString() + , r = new uB(o || this.arrowConfig,e,t,i,this.flag,A) + , a = this.viewer3D.getViewerImpl().domElement; + a.appendChild(r.rootDiv); + var s = a.getBoundingClientRect() + , l = this.viewer3D.getScreenCoordFromSceneCoord(A) + , c = [l[0], l[1]]; + return l.x > s.width / 2 ? c[0] -= 250 : c[0] += 250, + r.setLineStartAndEndPoint(l[0], l[1], c[0], c[1]), + this.flag += 1, + this.marks[n] || (this.marks[n] = []), + this.marks[n].push(r), + r + } + }, { + key: "update", + value: function() { + var A = this + , e = (new Date).getTime(); + this._lastTime && e - this._lastTime < 25 || (this._lastTime = e, + Object.keys(this.marks).forEach((function(e) { + var t = A.marks[e] + , i = A.viewer3D.getScreenCoordFromSceneCoord(t[0].scenePoint); + t.forEach((function(A) { + A.setLineStartPosition(i[0], i[1]) + } + )) + } + ))) + } + }, { + key: "destroy", + value: function() { + this.viewer3D.unregisterCameraEventListener(this.EIMMODEL.EVENTS.ON_CAMERA_CHANGE, this.update) + } + }]), + A + }() + , mB = function(A) { + this.Measurement = { + pointMove: new y, + pointPick: [], + pointPickToScreen: [], + pointAssist: [], + pointAssistToScreen: [], + needUpdatedObjects: [], + pickLineP1: new y, + pickLineP2: new y, + planeSquare: {}, + planeVolume: {}, + measureWindow: {} + }, + this.renderer = A.viewerImpl.modelManager.renderer, + this.scene = A.viewerImpl.modelManager.scene, + this.camera = A.viewerImpl.camera.cameraPerspective, + this.cameraControl = A.viewerImpl.cameraControl, + this.intersect = null, + this.domElement = A.viewerImpl.domElement, + this.viewer = A.viewerImpl, + this.SVG = document.getElementById("svgid" + A.getViewerImpl().uuid), + this.SVGRect = A.SVGRect; + var e = this; + function t() { + e.updatePos() + } + function i() { + var t = A.getScreenCoordFromSceneCoord(e.Measurement.pickLineP1) + , i = A.getScreenCoordFromSceneCoord(e.Measurement.pickLineP2) + , o = new s(t[0],t[1]) + , n = new s(i[0],i[1]); + e.SVGRect.createMoveLine(o, n) + } + this.movePoint = function(t) { + if (t.pickLine || t.pickPlane || t.pickPoint) { + e.SVGRect.deleteCircle(); + var i = A.viewerImpl.cameraControl.screenToCanvas(t.event.clientX, t.event.clientY); + e.SVGRect.creatMoveCircle(i); + var o = e.cameraControl.getIntersectContext(new s(t.event.clientX,t.event.clientY)); + if (e.cameraControl.intersector.pick(o, (function(t) { + for (var o = t.object.geometry, n = o.attributes.position.array, r = o.attributes.position.count, a = 0; r > a; a += 1) { + var s = new y(n[3 * a],n[3 * a + 1],n[3 * a + 2]); + s.applyMatrix4(t.object.matrixWorld); + var l = A.getScreenCoordFromSceneCoord(s); + 15 > Math.sqrt((l[0] - i.x) * (l[0] - i.x) + (l[1] - i.y) * (l[1] - i.y)) && (e.Measurement.pointMove = s, + e.SVGRect.changeMoveCircleStyle(l)) + } + } + )), + t.pickLine) { + e.Measurement.pickLineP1 = t.pickLine[0], + e.Measurement.pickLineP2 = t.pickLine[1]; + var n = A.getScreenCoordFromSceneCoord(t.pickLine[0].clone()) + , r = A.getScreenCoordFromSceneCoord(t.pickLine[1].clone()) + , a = new s(n[0],n[1]) + , l = new s(r[0],r[1]); + e.SVGRect.createMoveLine(a, l) + } + } + } + , + this.pickPoint = function(t) { + if (t.pickLine || t.pickPlane || t.pickPoint) { + 1 > e.Measurement.needUpdatedObjects.length || (e.SVGRect.deleteCircle(), + e.SVGRect.deleteMoveLine(), + e.SVGRect.deleteLineAndCircle(), + e.Measurement.pointPick = [], + e.Measurement.pointPickToScreen = [], + e.Measurement.pointAssist = [], + e.Measurement.pointAssistToScreen = [], + e.Measurement.needUpdatedObjects = [], + e.updatePos()); + new y, + new y, + new y, + new y; + var i = null + , o = t.pickPoint + , n = (new s).fromArray(A.getScreenCoordFromSceneCoord(o)); + e.Measurement.pointPick.push(o), + e.Measurement.pointPickToScreen.push(n); + var r = e.Measurement.pointPickToScreen.length; + if (e.SVGRect.creatPickCircle(n, r - 1), + r % 2 == 0 && r > 0) { + var a = new y(e.Measurement.pointPick[r - 1].x,e.Measurement.pointPick[r - 2].y,e.Measurement.pointPick[r - 2].z) + , l = new y(e.Measurement.pointPick[r - 1].x,e.Measurement.pointPick[r - 2].y,e.Measurement.pointPick[r - 1].z); + e.Measurement.pointAssist.push(a), + e.Measurement.pointAssist.push(l); + var c = A.getScreenCoordFromSceneCoord(a) + , h = A.getScreenCoordFromSceneCoord(l) + , d = new s(c[0],c[1]) + , p = new s(h[0],h[1]); + e.SVGRect.creatLine(e.Measurement.pointPickToScreen[r - 2], d, "red", "red" + (r - 1)), + e.SVGRect.creatLine(p, e.Measurement.pointPickToScreen[r - 1], "green", "green" + (r - 1)), + e.SVGRect.creatLine(d, p, "blue", "blue" + (r - 1)), + e.SVGRect.creatLine(e.Measurement.pointPickToScreen[r - 1], e.Measurement.pointPickToScreen[r - 2], "yellow", "yellow" + (r - 1)), + e.Measurement.needUpdatedObjects.push({ + point1: e.Measurement.pointPick[r - 2], + point2: e.Measurement.pointPick[r - 1], + asPot1: e.Measurement.pointAssist[r - 2], + asPot2: e.Measurement.pointAssist[r - 1] + }); + var g = Math.abs(e.Measurement.pointPick[r - 1].x - e.Measurement.pointPick[r - 2].x) + , u = Math.abs(e.Measurement.pointPick[r - 1].y - e.Measurement.pointPick[r - 2].y) + , f = Math.abs(e.Measurement.pointPick[r - 1].z - e.Measurement.pointPick[r - 2].z) + , m = e.Measurement.pointPick[r - 1].distanceTo(e.Measurement.pointPick[r - 2]); + i = { + dx: g.toFixed(3), + dy: u.toFixed(3), + dz: f.toFixed(3), + dis: m.toFixed(3) + } + } + return i + } + } + , + this.clear = function() { + e.SVGRect.deleteCircle(), + e.SVGRect.deleteMoveLine(), + e.SVGRect.deleteLineAndCircle(), + e.Measurement.pointPick = [], + e.Measurement.pointPickToScreen = [], + e.Measurement.pointAssist = [], + e.Measurement.pointAssistToScreen = [], + e.Measurement.needUpdatedObjects = [], + e.cameraControl.removeEventListener(Rc.ON_CAMERA_CHANGE, t), + e.cameraControl.removeEventListener(Rc.ON_CAMERA_CHANGE, i) + } + , + this.updatePos = function() { + var t = e.Measurement.pointPick.length + , i = e.Measurement.pointAssist.length + , o = e.Measurement.needUpdatedObjects; + if (i) + for (var n = 0; o.length > n; n += 1) { + var r = 2 * n + , a = A.getScreenCoordFromSceneCoord(o[n].point1) + , l = A.getScreenCoordFromSceneCoord(o[n].point2) + , c = new s(a[0],a[1]) + , h = new s(l[0],l[1]); + e.Measurement.pointPickToScreen[r] = c, + e.Measurement.pointPickToScreen[r + 1] = h; + var d = A.getScreenCoordFromSceneCoord(o[n].asPot1) + , p = A.getScreenCoordFromSceneCoord(o[n].asPot2) + , g = new s(d[0],d[1]) + , u = new s(p[0],p[1]); + e.Measurement.pointAssistToScreen[r] = g, + e.Measurement.pointAssistToScreen[r + 1] = u; + var f = e.Measurement.pointPickToScreen[r].x + , m = e.Measurement.pointPickToScreen[r].y + , C = e.Measurement.pointPickToScreen[r + 1].x + , y = e.Measurement.pointPickToScreen[r + 1].y + , v = e.Measurement.pointAssistToScreen[r].x + , I = e.Measurement.pointAssistToScreen[r].y + , E = e.Measurement.pointAssistToScreen[r + 1].x + , B = e.Measurement.pointAssistToScreen[r + 1].y + , x = document.getElementById("circlePick" + A.getViewerImpl().uuid + r) + , S = document.getElementById("circlePick" + A.getViewerImpl().uuid + (r + 1)); + x.setAttribute("cx", f), + x.setAttribute("cy", m), + S.setAttribute("cx", C), + S.setAttribute("cy", y); + var w = document.getElementById("pickline" + A.getViewerImpl().uuid + "red" + (r + 1)) + , M = document.getElementById("pickline" + A.getViewerImpl().uuid + "green" + (r + 1)) + , b = document.getElementById("pickline" + A.getViewerImpl().uuid + "blue" + (r + 1)) + , U = document.getElementById("pickline" + A.getViewerImpl().uuid + "yellow" + (r + 1)); + w.setAttribute("x1", f), + w.setAttribute("y1", m), + w.setAttribute("x2", v), + w.setAttribute("y2", I), + M.setAttribute("x1", E), + M.setAttribute("y1", B), + M.setAttribute("x2", C), + M.setAttribute("y2", y), + b.setAttribute("x1", v), + b.setAttribute("y1", I), + b.setAttribute("x2", E), + b.setAttribute("y2", B), + U.setAttribute("x1", f), + U.setAttribute("y1", m), + U.setAttribute("x2", C), + U.setAttribute("y2", y) + } + if (t % 2 == 1 && t !== i) { + var F = A.getScreenCoordFromSceneCoord(e.Measurement.pointPick[t - 1]) + , K = new s(F[0],F[1]); + e.Measurement.pointPickToScreen[t - 1] = K; + f = K.x, + m = K.y; + (x = document.getElementById("circlePick" + A.getViewerImpl().uuid + (t - 1))).setAttribute("cx", f), + x.setAttribute("cy", m) + } + } + , + this.addEventListener = function() { + e.cameraControl.addEventListener(Rc.ON_CAMERA_CHANGE, t), + e.cameraControl.addEventListener(Rc.ON_CAMERA_CHANGE, i) + } + }; + Object.assign(mB.prototype, Ld.prototype); + var CB = function() { + function A(e) { + cc(this, A), + this.coef = e.coef || .5, + this.controlPoints = e.controlPoints || [], + this.pointCountRecord = e.pointCountRecord, + this.formatConPoints = [], + this.matrix = [], + this.update = !0, + this.points = [], + this.controlPointsIndex = [], + this.straightLineDistance = 0, + this.curveLength = 0, + this.updateCurveLength = !0, + this.updateList = [], + this.setCoef(this.coef), + this._forMatConPoints() + } + return dc(A, [{ + key: "setControlPoints", + value: function(A) { + this.controlPoints = A, + this._forMatConPoints(), + this.update = !0, + this.updateList.push("controlPoints"), + this.updateStraightLineDistance = !0 + } + }, { + key: "getPoints", + value: function() { + return this.update && this._createPoints(this.pointCountRecord), + this.points + } + }, { + key: "setPointsCount", + value: function(A) { + this.updateList.push("count"), + this.update = !0, + this.pointCountRecord = A + } + }, { + key: "getCurveLength", + value: function() { + return this.update ? { + info: "参数已修改,请先更新曲线", + code: -1, + updateList: this.updateList + } : (this.updateCurveLength && function() { + var A = this.points + , e = A.length; + this.curveLength = A.reduce((function(A, t, i, o) { + return e > i + 1 && (A += o[i].distanceTo(o[i + 1])), + A + } + ), 0), + this.updateCurveLength = !1 + } + .bind(this)(), + this.curveLength) + } + }, { + key: "getStraightLineDistance", + value: function() { + return this.updateStraightLineDistance && function() { + var A = this.controlPoints + , e = A.length; + this.straightLineDistance = A.reduce((function(A, t, i, o) { + return e > i + 1 && (A += o[i].distanceTo(o[i + 1])), + A + } + ), 0), + this.updateStraightLineDistance = !1 + } + .bind(this)(), + this.straightLineDistance + } + }, { + key: "setCoef", + value: function(A) { + this.updateList.push("coef"), + this.update = !0, + this.matrix = [[-A, 2 - A, A - 2, A], [2 * A, A - 3, 3 - 2 * A, -A], [-A, 0, A, 0], [0, 1, 0, 0]] + } + }, { + key: "updateCurve", + value: function() { + return this.getPoints() + } + }, { + key: "getPointsInfo", + value: function() { + return this.update ? { + info: "参数已修改,请先更新曲线", + code: -1, + updateList: this.updateList + } : { + points: this.getPoints(), + controlPointsIndex: this.controlPointsIndex, + curveLength: this.getCurveLength(), + straightLineDistance: this.getStraightLineDistance() + } + } + }, { + key: "_forMatConPoints", + value: function() { + var A = this.controlPoints; + this.formatConPoints = []; + for (var e = 0, t = A.length; t > e; e += 1) + 0 === e ? this.formatConPoints.push(A[e].clone(), A[e].clone()) : t > e + 1 ? this.formatConPoints.push(A[e].clone()) : this.formatConPoints.push(A[e].clone(), A[e].clone()) + } + }, { + key: "_createPoints", + value: function(A) { + var e = [] + , t = this.matrix; + function i(A) { + e[0] = new y, + e[1] = new y, + e[2] = new y, + e[3] = new y; + var i = []; + i[0] = [], + i[1] = [], + i[2] = [], + i[3] = [], + i[0][0] = A[0].clone().multiplyScalar(t[0][0]), + i[0][1] = A[1].clone().multiplyScalar(t[0][1]), + i[0][2] = A[2].clone().multiplyScalar(t[0][2]), + i[0][3] = A[3].clone().multiplyScalar(t[0][3]), + i[1][0] = A[0].clone().multiplyScalar(t[1][0]), + i[1][1] = A[1].clone().multiplyScalar(t[1][1]), + i[1][2] = A[2].clone().multiplyScalar(t[1][2]), + i[1][3] = A[3].clone().multiplyScalar(t[1][3]), + i[2][0] = A[0].clone().multiplyScalar(t[2][0]), + i[2][1] = A[1].clone().multiplyScalar(t[2][1]), + i[2][2] = A[2].clone().multiplyScalar(t[2][2]), + i[2][3] = A[3].clone().multiplyScalar(t[2][3]), + i[3][0] = A[0].clone().multiplyScalar(t[3][0]), + i[3][1] = A[1].clone().multiplyScalar(t[3][1]), + i[3][2] = A[2].clone().multiplyScalar(t[3][2]), + i[3][3] = A[3].clone().multiplyScalar(t[3][3]); + for (var o = 0; 4 > o; o += 1) + for (var n = 0; 4 > n; n += 1) + e[o].add(i[o][n]) + } + function o(A) { + var t = A * A + , i = t * A; + return e[0].clone().multiplyScalar(i).add(e[1].clone().multiplyScalar(t)).add(e[2].clone().multiplyScalar(A)).add(e[3].clone()) + } + var n = this.formatConPoints + , r = this.points = [] + , a = this.controlPointsIndex = [] + , s = this.controlPoints; + if (A) { + for (var l = this.getStraightLineDistance(), c = 1 / A, h = 0, d = 0, p = 0, g = s.length - 1; g > p; p += 1) { + h += s[p].distanceTo(s[p + 1]); + var u = Math.floor(h / l / c) - d; + i([n[p], n[p + 1], n[p + 2], n[p + 3]]); + for (var f = 1 / u, m = 0; u > m; m += 1) { + r.push(o(f * m)) + } + d += u + } + r.push(s[s.length - 1]) + } else + for (var C = 0, v = n.length; v > C; C += 1) { + var I = 0 === C ? 0 : 1; + if (C + 3 >= v) { + r.push(n[C + 2]), + a.push({ + j: n[C + 1], + order: -1 + }); + break + } + r.push(n[C + 1]), + a.push({ + j: n[C + 1], + order: 100 * C + I + }), + i([n[C], n[C + 1], n[C + 2], n[C + 3]]); + for (var E = 1; 100 > E; E += 1) + r.push(o(E / 100)) + } + this.update = !1, + this.updateCurveLength = !0, + this.updateList = [] + } + }]), + A + }() + , yB = function() { + function A(e) { + cc(this, A), + this.coef = e.coef || .5, + this.points = e.controlPoints || [], + this.pointCountRecord = e.pointCountRecord, + this.formatConPoints = [], + this.matrix = [], + this._points = [], + this.controlPointsIndex = [], + this.straightLineDistance = 0, + this.count = 0, + this.setCoef(this.coef), + this._forMatConPoints(), + this._calCount(), + this.update = !0 + } + return dc(A, [{ + key: "setControlPoints", + value: function(A) { + this.points = A, + this._forMatConPoints(), + this._calCount(), + this._createPoints(), + this.update = !0 + } + }, { + key: "getPointAt", + value: function(A) { + this.update && this.getPoints(); + var e = Math.ceil(A * this.count); + return this._points[e > this.count ? this.count : e] + } + }, { + key: "getPoints", + value: function() { + return this.update && this._createPoints(this.pointCountRecord), + this._points + } + }, { + key: "setCoef", + value: function(A) { + this.update = !0, + this.matrix = [[-A, 2 - A, A - 2, A], [2 * A, A - 3, 3 - 2 * A, -A], [-A, 0, A, 0], [0, 1, 0, 0]] + } + }, { + key: "getPointsInfo", + value: function() { + return { + points: this.getPoints(), + controlPointsIndex: this.controlPointsIndex + } + } + }, { + key: "_forMatConPoints", + value: function() { + var A = this.points; + this.formatConPoints = []; + for (var e = 0, t = A.length; t > e; e += 1) + 0 === e ? this.formatConPoints.push(A[e].clone(), A[e].clone()) : t > e + 1 ? this.formatConPoints.push(A[e].clone()) : this.formatConPoints.push(A[e].clone(), A[e].clone()) + } + }, { + key: "_calCount", + value: function() { + var A, e, t = this, i = 1 / 0; + e = (A = t.points).length, + t.straightLineDistance = A.reduce((function(A, t, o, n) { + if (e > o + 1) { + var r = n[o].distanceTo(n[o + 1]); + i = r > i ? i : r, + A += r + } + return A + } + ), 0), + t.updateStraightLineDistance = !1; + var o = Math.ceil(t.straightLineDistance / i); + this.count = o > 100 ? o : 100 + } + }, { + key: "_createPoints", + value: function() { + var A = [] + , e = this.matrix; + function t(t) { + A[0] = new y, + A[1] = new y, + A[2] = new y, + A[3] = new y; + var i = []; + i[0] = [], + i[1] = [], + i[2] = [], + i[3] = [], + i[0][0] = t[0].clone().multiplyScalar(e[0][0]), + i[0][1] = t[1].clone().multiplyScalar(e[0][1]), + i[0][2] = t[2].clone().multiplyScalar(e[0][2]), + i[0][3] = t[3].clone().multiplyScalar(e[0][3]), + i[1][0] = t[0].clone().multiplyScalar(e[1][0]), + i[1][1] = t[1].clone().multiplyScalar(e[1][1]), + i[1][2] = t[2].clone().multiplyScalar(e[1][2]), + i[1][3] = t[3].clone().multiplyScalar(e[1][3]), + i[2][0] = t[0].clone().multiplyScalar(e[2][0]), + i[2][1] = t[1].clone().multiplyScalar(e[2][1]), + i[2][2] = t[2].clone().multiplyScalar(e[2][2]), + i[2][3] = t[3].clone().multiplyScalar(e[2][3]), + i[3][0] = t[0].clone().multiplyScalar(e[3][0]), + i[3][1] = t[1].clone().multiplyScalar(e[3][1]), + i[3][2] = t[2].clone().multiplyScalar(e[3][2]), + i[3][3] = t[3].clone().multiplyScalar(e[3][3]); + for (var o = 0; 4 > o; o += 1) + for (var n = 0; 4 > n; n += 1) + A[o].add(i[o][n]) + } + for (var i, o, n, r = this.formatConPoints, a = this._points = [], s = this.controlPointsIndex = [], l = this.points, c = this.straightLineDistance, h = 0, d = 0, p = 0, g = l.length - 1; g > p; p += 1) { + var u = (h += l[p].distanceTo(l[p + 1])) / c * this.count - d; + t([r[p], r[p + 1], r[p + 2], r[p + 3]]), + a.push(r[p + 1]), + s.push({ + j: r[p + 1], + order: d + }), + d += 1; + for (var f = 1; u > f; f += 1) + a.push((o = void 0, + n = void 0, + n = (o = (i = f / u) * i) * i, + A[0].clone().multiplyScalar(n).add(A[1].clone().multiplyScalar(o)).add(A[2].clone().multiplyScalar(i)).add(A[3].clone()))), + d += 1 + } + a.push(l[l.length - 1]), + s.push({ + to: r[l.length - 1], + order: -1 + }), + this.update = !1 + } + }]), + A + }() + , vB = function() { + function A(e) { + return cc(this, A), + A.shareInstance || (A.shareInstance = this, + this.maxRequestCount = e || 300, + this.currentPendingCount = 0, + this._requests = [], + this._requestDidLoad = this._requestDidLoad.bind(this), + this._requestDidError = this._requestDidError.bind(this), + this._requestDidAbort = this._requestDidAbort.bind(this), + this._requestDidTimeout = this._requestDidTimeout.bind(this)), + A.shareInstance + } + return dc(A, [{ + key: "addRequest", + value: function(A, e) { + A.addEventListener("load", this._requestDidLoad), + A.addEventListener("error", this._requestDidError), + A.addEventListener("abort", this._requestDidAbort), + A.addEventListener("timeout", this._requestDidTimeout), + this.maxRequestCount > this.currentPendingCount ? (A.send(e), + this.currentPendingCount += 1) : this._requests.push({ + request: A, + dataToSend: e + }) + } + }, { + key: "_sendNextRequest", + value: function() { + if (this._requests.length > 0) { + var A = this._requests.shift(); + A.request.send(A.dataToSend), + this.currentPendingCount += 1 + } + } + }, { + key: "_requestDidLoad", + value: function() { + this.currentPendingCount -= 1, + this._sendNextRequest() + } + }, { + key: "_requestDidError", + value: function() { + this.currentPendingCount -= 1, + this._sendNextRequest() + } + }, { + key: "_requestDidAbort", + value: function() { + this.currentPendingCount -= 1, + this._sendNextRequest() + } + }, { + key: "_requestDidTimeout", + value: function() { + this.currentPendingCount -= 1, + this._sendNextRequest() + } + }]), + A + }() + , IB = { + group: "group", + model: "model", + component: "component", + components: "components" + } + , EB = function A() { + cc(this, A), + this.type = void 0, + this.nodeId = void 0, + this.matrix = void 0, + this.center = void 0, + this.modelKey = void 0, + this.componentKey = void 0, + this.componentsKey = void 0, + this.children = void 0 + } + , BB = function() { + function A(e, t, i, o) { + cc(this, A), + this.host = e, + this.projectUrl = t, + this.accessToken = i, + this._cachedComponents = {}, + this._cachedMaterials = {}, + this._cachedGeometries = {}, + this._cachedFile = {}, + this._requestQueue = new vB(o) + } + return dc(A, [{ + key: "destroy", + value: function() { + delete this._cachedComponents, + delete this._cachedMaterials, + delete this._cachedGeometries, + delete this._cachedFile + } + }, { + key: "getExternalObjectByModelKey", + value: function(A) { + var e = this; + return "string" != typeof A ? Promise.reject("参数不合法") : this._loadModelInfo(A).then((function() { + return e._loadComponentsListIn(A) + } + )).then((function(A) { + return e.getExternalObjectByComponentsKey(A) + } + )) + } + }, { + key: "getExternalObjectByComponentKey", + value: function(A) { + var e = this; + if ("string" != typeof A) + return Promise.reject("参数不合法"); + var t = this._cachedComponents[A]; + return t ? Promise.resolve(this._createMesh(t, !0)) : this._loadComponentsInfo([A]).then((function(A) { + return e._generateMeshByComponentInfo(A[0]) + } + )).then((function(A) { + return A + } + )) + } + }, { + key: "getExternalObjectByComponentsKeyBackup", + value: function(A) { + var e = this; + if (A instanceof Array == !1) + return Promise.reject("参数不合法"); + for (var t = [], i = [], o = {}, n = function(n, r) { + var a = e.getExternalObjectByComponentKey(A[n]).then((function(A) { + i.push(A) + } + )).catch((function(e) { + o[A[n]] = e + } + )); + t.push(a) + }, r = 0, a = A.length; a > r; r += 1) + n(r); + return Promise.all(t).then((function() { + if (i.length > 0) { + i.length !== A.length && Bh.error(o); + for (var e = new Xi, t = 0, n = i.length; n > t; t += 1) + e.add(i[t]); + return e + } + return Promise.reject(o) + } + )) + } + }, { + key: "getExternalObjectByComponentsKey", + value: function(A) { + var e = this; + if (A instanceof Array == !1) + return Promise.reject("参数不合法"); + for (var t = [], i = {}, o = [], n = 0, r = A.length; r > n; n += 1) { + var a = A[n] + , s = this._cachedComponents[a]; + s ? t.push(this._createMesh(s, !0)) : o.push(a) + } + if (o.length > 0) + return this._loadComponentsInfo(o).then((function(o) { + for (var n = [], r = 0, a = o.length; a > r; r += 1) { + var s = e._generateMeshByComponentInfo(o[r]).then((function(A) { + t.push(A) + } + )).catch((function(A) { + i[A.componentKey] = A.message + } + )); + n.push(s) + } + return Promise.all(n).then((function() { + if (t.length > 0) { + t.length !== A.length && Bh.error(i); + for (var e = new Xi, o = 0, n = t.length; n > o; o += 1) + e.add(t[o]); + return e + } + return Promise.reject(i) + } + )) + } + )); + for (var l = new Xi, c = 0, h = t.length; h > c; c += 1) + l.add(t[c]); + return Promise.resolve(l) + } + }, { + key: "testData", + value: function() { + var A = new EB; + A.type = IB.group; + var e = new EB; + e.type = IB.component, + e.componentKey = "M1577676674083_265272"; + var t = new EB; + t.type = IB.component, + t.componentKey = "M1577676674083_265916"; + var i = new EB; + i.type = IB.component, + i.componentKey = "M1577676674083_244449"; + var o = (new M).makeTranslation(0, 0, 5e3); + i.matrix = o.toArray(); + var n = new EB; + n.type = IB.group; + var r = new EB; + r.type = IB.component, + r.componentKey = "M1577676674083_246705"; + var a = new EB; + a.type = IB.component, + a.componentKey = "M1577676674083_247372", + a.matrix = o.makeTranslation(0, 0, 7e3).toArray(); + var s = new EB; + return s.type = IB.component, + s.componentKey = "M1577676674083_244910", + A.children = [e, t, i, n], + n.children = [r, a, s], + A + } + }, { + key: "getExternalObjectByNodeInfo", + value: function(A) { + var e = this + , t = void 0; + return A.type === IB.component && A.componentKey ? t = this.getExternalObjectByComponentKey(A.componentKey) : A.type === IB.components && A.componentsKey && A.componentsKey instanceof Array && A.componentsKey.length > 0 ? t = this.getExternalObjectByComponentsKey(A.componentsKey) : A.type === IB.model && A.modelKey ? t = this.getExternalObjectByModelKey(A.modelKey) : A.type === IB.group && A.children && A.children.length > 0 ? function() { + for (var i = new Xi, o = [], n = function(t, n) { + var r = A.children[t] + , a = e.getExternalObjectByNodeInfo(r).then((function(A) { + i.add(A) + } + )).catch((function(A) { + return Bh.error(r, A), + A + } + )); + o.push(a) + }, r = 0, a = A.children.length; a > r; r += 1) + n(r); + t = Promise.all(o).then((function() { + return i + } + )) + }() : t = Promise.reject("参数不合法"), + t.then((function(e) { + if (A.matrix) { + var t = (new M).fromArray(A.matrix); + e.matrix.identity(), + e.applyMatrix4(t), + e.updateMatrixWorld(!0) + } + if (A.center) { + var i = (new aA).setFromObject(e) + , o = new y; + if (i.getCenter(o), + parseInt(A.center[0], 10) !== parseInt(o.x, 10) || parseInt(A.center[1], 10) !== parseInt(o.y, 10) || parseInt(A.center[2], 10) !== parseInt(o.z, 10)) { + var n = (new y).fromArray(A.center).sub(o) + , r = (new M).makeTranslation(n.x, n.y, n.z); + e.applyMatrix4(r), + e.updateMatrixWorld(!0) + } + } + return e + } + )) + } + }, { + key: "exportNodeInfoByComponents", + value: function(A, e) { + if (e) { + var t = new EB; + return 1 === e.length ? (t.type = IB.component, + t.componentKey = e[0]) : (t.type = IB.components, + t.componentsKey = e), + t.nodeId = A, + t + } + } + }, { + key: "exportNodeInfoByModelKey", + value: function(A, e) { + if (e) { + var t = new EB; + return t.type = IB.model, + t.modelKey = e, + t.nodeId = A, + t + } + } + }, { + key: "_loadModelInfo", + value: function(A) { + return this._httpGet(this.host + "/api/" + this.projectUrl + "/models?modelKey=" + A) + } + }, { + key: "_loadComponentsListIn", + value: function(A) { + return this._httpGet(this.host + "/api/" + this.projectUrl + "/components/keys?modelKey=" + A) + } + }, { + key: "_loadComponentsInfo", + value: function(A, e, t) { + return this._httpPost(this.host + "/api/" + this.projectUrl + "/components/geometry", { + components: A + }) + } + }, { + key: "_generateMeshByComponentInfo", + value: function(A) { + var e = this; + if (!A.geometry) + return Promise.reject({ + componentKey: A.component, + message: "几何为空" + }); + var t = {}; + if (t.componentKey = A.component, + A.matrix) { + var i = (new M).fromArray(A.matrix); + t.matrix = i + } + var o = A.materials + , n = [] + , r = []; + if (A.materials.length > 0) + for (var a = function(t, i) { + n.push(e._loadMaterial(o[t]).then((function(A) { + r[t] = A + } + )).catch((function(i) { + Bh.error(i, "用默认材质代替"), + r[t] = e._loadMaterialByType(A.type) + } + ))) + }, s = 0, l = o.length; l > s; s += 1) + a(s); + else { + var c = this._loadMaterialByType(A.type); + r.push(c), + n.push(Promise.resolve(c)) + } + return Promise.all(n).then((function() { + return t.materials = r, + e._loadGeometry(A.geometry) + } + )).then((function(A) { + t.geometry = A; + for (var i = 0, o = t.materials.length; o > i; i += 1) { + var n = t.materials[i]; + if (n.aoMap || n.lightMap) { + t.geometry.setAttribute("uv2", new YA(t.geometry.attributes.uv.array,2)); + break + } + } + return e._cachedComponents[t.componentKey] = t, + e._createMesh(t, !1) + } + )) + } + }, { + key: "_loadMaterial", + value: function(A) { + var e = this + , t = this._cachedMaterials[A.key]; + if (t) + return Promise.resolve(t.clone()); + var i = A.data; + return this._loadAllTextures(i).then((function(t) { + var o = e._createMaterial(i, t); + return e._cachedMaterials[A.key] = o, + o + } + )) + } + }, { + key: "_loadMaterialByType", + value: function(A) { + var e = _u[A] ? _u[A].color : void 0; + e || (e = _u.DEFAULT.color); + var t = new LA(e[0],e[1],e[2]) + , i = t.getHexString() + "_" + e[3] + , o = this._cachedMaterials[i]; + return o || ((o = Kd.createStandardMaterial({ + color: t + })).side = 2, + this._cachedMaterials[i] = o), + o + } + }, { + key: "_loadGeometry", + value: function(A) { + var e = this + , t = this._cachedGeometries[A]; + return t ? Promise.resolve(t) : this._loadFile(A).then((function(t) { + try { + var i = new TextDecoder("utf-8").decode(t) + , o = JSON.parse(i) + , n = e._createGeometry(o); + return n ? (e._cachedGeometries[A] = n, + n) : Promise.reject("几何为空") + } catch (A) { + return Promise.reject(A.message) + } + } + )) + } + }, { + key: "_loadAllTextures", + value: function(A) { + for (var e = this, t = [], i = this._getAllTextureFileKey(A), o = {}, n = function(A, n) { + var r = i[A]; + t.push(e._loadFile(r).then((function(A) { + var t = e._createTexture(A); + o[r] = t + } + )).catch((function(A) { + Bh.error(A) + } + ))) + }, r = 0, a = i.length; a > r; r += 1) + n(r); + return t.length > 0 ? new Promise((function(A, e) { + Promise.all(t).then((function() { + Object.keys(o).length > 0 ? A(o) : e("加载纹理失败") + } + )) + } + )) : Promise.resolve(o) + } + }, { + key: "_getAllTextureFileKey", + value: function(A) { + var e = {}; + return A.map && (e[A.map] = !0), + A.aoMap && (e[A.aoMap] = !0), + A.alphaMap && (e[A.alphaMap] = !0), + A.envMap && (e[A.envMap] = !0), + A.lightMap && (e[A.lightMap] = !0), + A.emissiveMap && (e[A.emissiveMap] = !0), + A.specularMap && (e[A.specularMap] = !0), + A.specularMap && (e[A.specularMap] = !0), + Object.keys(e) + } + }, { + key: "_createTexture", + value: function(A) { + var e = new d + , t = document.createElement("img"); + e.wrapS = e.wrapT = 1e3, + t.onerror = function(A) { + Bh.error("加载纹理出错") + } + , + t.onload = function(i) { + "string" != typeof A && window.URL.revokeObjectURL(t.src), + e.image = t, + e.needsUpdate = !0 + } + ; + var i = new Blob([A]); + return t.src = window.URL.createObjectURL(i), + e + } + }, { + key: "_createGeometry", + value: function(A) { + if (A.positions && 0 !== A.positions.length) { + var e = null; + e = new he; + var t = new Float32Array(A.positions); + e.setAttribute("position", new YA(t,3)); + var i = new Uint32Array(A.indices); + if (e.setIndex(new YA(i,1)), + A.normals && A.normals.length > 0) { + var o = new Float32Array(A.normals); + e.setAttribute("normal", new YA(o,3)) + } else + e.computeVertexNormals(); + if (A.uv && A.uv.length > 0) { + var n = new Float32Array(A.uv); + e.setAttribute("uv", new YA(n,2)) + } + if (void 0 !== A.materialIndices) { + for (var r = null, a = [], s = void 0, l = 0; A.materialIndices.length > l; l += 1) { + var c = A.materialIndices[l]; + c !== s && (s = c, + null != r && (r.count = 3 * l - r.start, + a.push(r)), + r = { + start: 3 * l, + materialIndex: s + }) + } + null != r && (r.count = 3 * A.materialIndices.length - r.start, + a.push(r)), + e.groups = a + } + return e + } + } + }, { + key: "_createMaterial", + value: function(A, e) { + return Kd.createMaterialByMaterialBufferAndTexture(A, e) + } + }, { + key: "_createMesh", + value: function(A, e) { + var t = null; + if (e) { + t = []; + for (var i = 0, o = A.materials.length; o > i; i += 1) + t.push(A.materials[i].clone()) + } else + t = A.materials; + var n = new Kf(A.geometry,t); + return n.visible = !0, + n.key = A.componentKey, + A.matrix && (n.applyMatrix4(A.matrix), + n.updateMatrixWorld(!0)), + n + } + }, { + key: "_loadFile", + value: function(A) { + var e = this._cachedFile[A]; + return e ? Promise.resolve(e) : this._http("GET", this.host + "/api/" + this.projectUrl + "/files?fileKey=" + A, "arraybuffer").then((function(A) { + return A + } + )) + } + }, { + key: "_httpGet", + value: function(A) { + return this._http("GET", A) + } + }, { + key: "_httpPost", + value: function(A, e) { + return this._http("POST", A, void 0, e) + } + }, { + key: "_http", + value: function(A, e, t, i) { + var o = this; + return new Promise((function(n, r) { + var a = {}; + "POST" === A && (a["Content-type"] = "application/json;charset=UTF-8"), + o.accessToken && (a.Authorization = o.accessToken), + _d({ + type: A, + url: e, + headers: a, + data: JSON.stringify(i), + responseType: t || "json", + requestQueue: o._requestQueue, + success: function(A) { + if (A) + try { + t && "json" !== t ? n(A) : A.data ? n(A.data) : "success" !== A.code.toLowerCase() && r(A.message ? A.message : "未知错误") + } catch (A) { + r(A.message) + } + else + r("数据为空") + }, + error: function(A, e) { + r(e) + } + }) + } + )) + } + }]), + A + }() + , xB = {}; + xB.ToolBar = Xd; + var SB = {}; + SB.ModelCompares = $y, + SB.DISPLAYMODEL = zy, + SB.CompareGlobalData = Xy, + SB.CompareComponentType = Zy, + SB.COMPAREEVENTS = _y, + SB.ViewerConnector = ev, + SB.RoadNetManager = JE, + SB.TextLoader = _E, + SB.TrackSimulator = AB, + SB.Heatmap = BE, + SB.Fire = FE, + SB.Water = eB, + SB.WaterEffect = sv, + SB.WaterEffectConfig = function() { + this.boundary = [], + this.color = new Xh("#80FDFF",.8), + this.scale = 4, + this.viewer = null, + this.xDirection = 1, + this.yDirection = 1, + this.reflectivity = 1, + this.reflectorTexturePosition = new y, + this.refractorTexturePosition = new y, + this.height = 0, + this.geometry = null + } + , + SB.ArrowManager = cv; + var wB = {}; + wB.Line2 = QE, + wB.LineMaterial = YC, + wB.LineGeometry = KE; + for (var MB = {}, bB = Object.keys(sc), UB = 0; bB.length > UB; UB += 1) { + var FB = bB[UB]; + Object.defineProperty(MB, FB, { + value: sc[FB], + enumerable: !0, + configurable: !0, + writable: !1 + }) + } + A.Animation = hp, + A.ArrowDomMark = uB, + A.ArrowDomMarkManager = fB, + A.BOSCatmullRomCurve3 = CB, + A.BOSCatmullRomCurve3ForFrameEdit = yB, + A.BaseControl = Fg, + A.CAMERATYPE = Ec, + A.Camera = cp, + A.CameraAnimator = dp, + A.CameraControl = mp, + A.CameraInfo = Qd, + A.CameraUtil = Rd, + A.ClipPlaneService = Ap, + A.ClipPlanes = HC, + A.ClipPlanesTool = vp, + A.CollisionDetection = function(A) { + this.cameraControl = A, + this.intersector = A.intersector; + var e = new Dd + , t = new Dd + , i = new Dd + , o = new Dd + , n = new Dd + , r = new Dd; + this.run = function(a, s) { + var l = {} + , c = this.cameraControl.getIntersectContext(null); + e.set(a, new y(0,0,1)), + t.set(a, new y(0,0,-1)), + n.set(a, s), + r.set(a, new y(-s.x,-s.y,-s.z)), + i.set(a, new y(-s.y,s.x,s.z)), + o.set(a, new y(s.y,-s.x,s.z)), + l.top = this.intersector.getIntersectByRay(c, e.ray), + l.down = this.intersector.getIntersectByRay(c, t.ray), + l.front = this.intersector.getIntersectByRay(c, n.ray), + l.back = this.intersector.getIntersectByRay(c, r.ray), + l.left = this.intersector.getIntersectByRay(c, i.ray), + l.right = this.intersector.getIntersectByRay(c, o.ray); + var h = new y(a.x,a.y,a.z - .8 * A.manHeight) + , d = new Dd; + d.set(h, s); + var p = new Dd; + p.set(h, new y(-s.x,-s.y,-s.z)); + var g = new Dd; + g.set(h, new y(-s.y,s.x,s.z)); + var u = new Dd; + return u.set(h, new y(s.y,-s.x,s.z)), + l.frontMiddle = this.intersector.getIntersectByRay(c, d.ray), + l.backMiddle = this.intersector.getIntersectByRay(c, p.ray), + l.leftMiddle = this.intersector.getIntersectByRay(c, g.ray), + l.rightMiddle = this.intersector.getIntersectByRay(c, u.ray), + l + } + } + , + A.Color = Xh, + A.ColorPicker = Hh, + A.ControlConfig = jh, + A.ControlManager = Og, + A.ControlMode = Gc, + A.DOMMark = Od, + A.DefaultInvisibleComponentType = bc, + A.DefaultMaterial = _u, + A.DeviceTest = mh, + A.DomUtil = xh, + A.DrawingStyle = jc, + A.EIMMODELMaterial = ld, + A.EVENTS = Rc, + A.Edge = wp, + A.EnumCesiumImageryLayerType = { + AUTO: 0, + BAIDU: 1, + GAODE: 2, + MAPBOX: 3, + ARCGIS: 4, + GOOGLE: 5 + }, + A.EnumConditionType = { + HIDDEN_OTHERS: 0, + TRANSLUCENT_OTHERS: 1, + OVERRIDE: 2, + BORDERLINE: 3 + }, + A.EnumDataProvider = Wc, + A.EnumFilterState = zc, + A.EnumIdBasedType = Dc, + A.EnumInstanceState = Hc, + A.EnumIsolateState = Nc, + A.EnumObjectState = Lc, + A.EnumRenderType = { + RENDER: 0, + RENDER_FINISHED: 1, + RESIZE: 2 + }, + A.EnumRendererType = { + AUTO: 0, + FULL: 1, + INCREMENT: 2 + }, + A.EnumSceneState = Vc, + A.EnumShaderColorState = Yc, + A.EnumTransparentState = Oc, + A.EnumUserType = { + HIDDEN_DATA: 0, + OVERRIDE_DATA: 1, + WITH_BOARDLINE: 2 + }, + A.EventDispatcher = Ld, + A.ExternalObjectConverter = BB, + A.ExternalObjectNodeInfo = EB, + A.ExternalObjectNodeInfoType = IB, + A.ExternalScene = ey, + A.FillClipPlane = _C, + A.FillClipPlaneTool = Sp, + A.FilterResultMode = Jc, + A.FullScreen = Wh, + A.GLTFLoader = OC, + A.GeomUtil = Tu, + A.GlobalData = vc, + A.Group = ep, + A.IDENTITYMATRIX3 = xc, + A.IDENTITYMATRIX4 = Bc, + A.ImageResources = Pd, + A.IntersectHelper = fp, + A.KDNode = Zu, + A.LOADERROREVENTS = Tc, + A.LightType = Fc, + A.LineSegmentsEx = cf, + A.Lobibox = bh, + A.LogLevels = Ch, + A.MarkObject = Hd, + A.MaterialEx = ay, + A.MaterialUtil = Kd, + A.MeasureTool = Eg, + A.MeasurementManager = mB, + A.MeshEx = Kf, + A.ModelType = Zc, + A.MoveDirection = qc, + A.NodeItemType = { + SYMBOL: 0, + MESH: 1, + TUBE: 2, + PIPE: 3, + BOX: 4, + BOX_M: 5, + PIPE_M: 6, + MESH_REF: 7, + LINE: 8 + }, + A.NoiseTextureType = xd, + A.NormalControl = Qg, + A.OPSELECTIONTYPE = Kc, + A.OrbitControl = Rg, + A.PICKABLETYPE = Qc, + A.PhongLightingMaterial = jC, + A.PickControl = kg, + A.PickHelper = kp, + A.PickUtil = wg, + A.PlaneMark = Vd, + A.Plugins = SB, + A.PostilObject = Jd, + A.PrimitiveCount = { + vertexCount: 0, + triangleCount: 0 + }, + A.Raycaster = Dd, + A.RectOpTool = Mg, + A.RectPickTool = bg, + A.RectZoomTool = Ug, + A.Roam = tB, + A.RoamManager = oB, + A.RoamPlayer = iB, + A.RotatePivotMode = kc, + A.RotationOrders = Ic, + A.SVGRect = tp, + A.Scene = oy, + A.SceneStateHelper = ny, + A.SectionPlane = hB, + A.SelectPad = Dg, + A.Snapshot = Zd, + A.SpriteMark = Gd, + A.StorageCache = AC, + A.THREE = MB, + A.THREEEX = wB, + A.ThreeMark = dB, + A.Tool = yp, + A.ToolBar = Xd, + A.ToolMode = Pc, + A.UI = xB, + A.Utils = uh, + A.Version = "4.18.0", + A.ViewController = lp, + A.Viewer = Py, + A.ViewerImpl = Gy, + A.WalkControl = Lg, + A.WordPlaneMark = pB, + A.ajax = _d, + A.buildEdge = Up, + A.createNoiseTexture = Fd, + A.getFaceIndex = Fp, + A.getScript = function(A, e) { + var t = {}; + if (t[A]) + e && e(); + else { + var i = document.createElement("script"); + i.type = "text/javascript", + i.src = A, + document.head.appendChild(i), + t[A] = !0, + i.readyState ? i.onreadystatechange = function() { + "loaded" !== i.readyState && "complete" !== i.readyState || (i.onreadystatechange = null, + e && e()) + } + : i.onload = function() { + e && e() + } + } + } + , + A.i18nMessage = fh, + A.logger = Bh, + A.message = jd, + A.removeDuplicateIndex = Mp, + A.removeDuplicateVertex = bp, + A.standardView = Uc, + Object.defineProperty(A, "__esModule", { + value: !0 + }) +} +)); +//# sourceMappingURL=EIMMODEL.min.js.map diff --git a/public/eim-0225/EIMMODEL.min.css b/public/eim-0225/EIMMODEL.min.css new file mode 100644 index 0000000..4916b60 --- /dev/null +++ b/public/eim-0225/EIMMODEL.min.css @@ -0,0 +1 @@ +.lobibox .lobibox-header .btn-close,.snapshot-node-delete{-webkit-transition:all .3s;-o-transition:all .3s;outline:0}.lobibox-notify-wrapper-large.bottom,.lobibox-notify-wrapper.bottom{bottom:0}.postil-node-name,.snapshot-node-name{-o-text-overflow:ellipsis;white-space:nowrap}@font-face{font-family:'Glyphicons Halflings';src:url(fonts/glyphicons-halflings-regular.eot);src:url(fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(fonts/glyphicons-halflings-regular.woff) format('woff'),url(fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.lobibox,.lobibox-notify{font-family:'Open Sans',Arial,Helvetica,sans-serif}@font-face{font-family:'Open Sans';font-style:normal;font-weight:300;src:local('Open Sans Light'),local('OpenSans-Light'),url(woff2/DXI1ORHCpsQm3Vp6mXoaTa-j2U0lmluP9RWlSytm3ho.woff2) format('woff2');unicode-range:U+0460-052F,U+20B4,U+2DE0-2DFF,U+A640-A69F}@font-face{font-family:'Open Sans';font-style:normal;font-weight:300;src:local('Open Sans Light'),local('OpenSans-Light'),url(woff2/DXI1ORHCpsQm3Vp6mXoaTZX5f-9o1vgP2EXwfjgl7AY.woff2) format('woff2');unicode-range:U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:'Open Sans';font-style:normal;font-weight:300;src:local('Open Sans Light'),local('OpenSans-Light'),url(woff2/DXI1ORHCpsQm3Vp6mXoaTRWV49_lSm1NYrwo-zkhivY.woff2) format('woff2');unicode-range:U+1F00-1FFF}@font-face{font-family:'Open Sans';font-style:normal;font-weight:300;src:local('Open Sans Light'),local('OpenSans-Light'),url(woff2/DXI1ORHCpsQm3Vp6mXoaTaaRobkAwv3vxw3jMhVENGA.woff2) format('woff2');unicode-range:U+0370-03FF}@font-face{font-family:'Open Sans';font-style:normal;font-weight:300;src:local('Open Sans Light'),local('OpenSans-Light'),url(woff2/DXI1ORHCpsQm3Vp6mXoaTf8zf_FOSsgRmwsS7Aa9k2w.woff2) format('woff2');unicode-range:U+0102-0103,U+1EA0-1EF9,U+20AB}@font-face{font-family:'Open Sans';font-style:normal;font-weight:300;src:local('Open Sans Light'),local('OpenSans-Light'),url(woff2/DXI1ORHCpsQm3Vp6mXoaTT0LW-43aMEzIO6XUTLjad8.woff2) format('woff2');unicode-range:U+0100-024F,U+1E00-1EFF,U+20A0-20AB,U+20AD-20CF,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:'Open Sans';font-style:normal;font-weight:300;src:local('Open Sans Light'),local('OpenSans-Light'),url(woff2/DXI1ORHCpsQm3Vp6mXoaTegdm0LZdjqr5-oayXSOefg.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2212,U+2215,U+E0FF,U+EFFD,U+F000}@font-face{font-family:'Open Sans';font-style:normal;font-weight:400;src:local('Open Sans'),local('OpenSans'),url(woff2/K88pR3goAWT7BTt32Z01mxJtnKITppOI_IvcXXDNrsc.woff2) format('woff2');unicode-range:U+0460-052F,U+20B4,U+2DE0-2DFF,U+A640-A69F}@font-face{font-family:'Open Sans';font-style:normal;font-weight:400;src:local('Open Sans'),local('OpenSans'),url(woff2/RjgO7rYTmqiVp7vzi-Q5URJtnKITppOI_IvcXXDNrsc.woff2) format('woff2');unicode-range:U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:'Open Sans';font-style:normal;font-weight:400;src:local('Open Sans'),local('OpenSans'),url(woff2/LWCjsQkB6EMdfHrEVqA1KRJtnKITppOI_IvcXXDNrsc.woff2) format('woff2');unicode-range:U+1F00-1FFF}@font-face{font-family:'Open Sans';font-style:normal;font-weight:400;src:local('Open Sans'),local('OpenSans'),url(woff2/xozscpT2726on7jbcb_pAhJtnKITppOI_IvcXXDNrsc.woff2) format('woff2');unicode-range:U+0370-03FF}@font-face{font-family:'Open Sans';font-style:normal;font-weight:400;src:local('Open Sans'),local('OpenSans'),url(woff2/59ZRklaO5bWGqF5A9baEERJtnKITppOI_IvcXXDNrsc.woff2) format('woff2');unicode-range:U+0102-0103,U+1EA0-1EF9,U+20AB}@font-face{font-family:'Open Sans';font-style:normal;font-weight:400;src:local('Open Sans'),local('OpenSans'),url(woff2/u-WUoqrET9fUeobQW7jkRRJtnKITppOI_IvcXXDNrsc.woff2) format('woff2');unicode-range:U+0100-024F,U+1E00-1EFF,U+20A0-20AB,U+20AD-20CF,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:'Open Sans';font-style:normal;font-weight:400;src:local('Open Sans'),local('OpenSans'),url(woff2/cJZKeOuBrn4kERxqtaUH3VtXRa8TVwTICgirnJhmVJw.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2212,U+2215,U+E0FF,U+EFFD,U+F000}@font-face{font-family:'Open Sans';font-style:normal;font-weight:600;src:local('Open Sans Semibold'),local('OpenSans-Semibold'),url(woff2/MTP_ySUJH_bn48VBG8sNSq-j2U0lmluP9RWlSytm3ho.woff2) format('woff2');unicode-range:U+0460-052F,U+20B4,U+2DE0-2DFF,U+A640-A69F}@font-face{font-family:'Open Sans';font-style:normal;font-weight:600;src:local('Open Sans Semibold'),local('OpenSans-Semibold'),url(woff2/MTP_ySUJH_bn48VBG8sNSpX5f-9o1vgP2EXwfjgl7AY.woff2) format('woff2');unicode-range:U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:'Open Sans';font-style:normal;font-weight:600;src:local('Open Sans Semibold'),local('OpenSans-Semibold'),url(woff2/MTP_ySUJH_bn48VBG8sNShWV49_lSm1NYrwo-zkhivY.woff2) format('woff2');unicode-range:U+1F00-1FFF}@font-face{font-family:'Open Sans';font-style:normal;font-weight:600;src:local('Open Sans Semibold'),local('OpenSans-Semibold'),url(woff2/MTP_ySUJH_bn48VBG8sNSqaRobkAwv3vxw3jMhVENGA.woff2) format('woff2');unicode-range:U+0370-03FF}@font-face{font-family:'Open Sans';font-style:normal;font-weight:600;src:local('Open Sans Semibold'),local('OpenSans-Semibold'),url(woff2/MTP_ySUJH_bn48VBG8sNSv8zf_FOSsgRmwsS7Aa9k2w.woff2) format('woff2');unicode-range:U+0102-0103,U+1EA0-1EF9,U+20AB}@font-face{font-family:'Open Sans';font-style:normal;font-weight:600;src:local('Open Sans Semibold'),local('OpenSans-Semibold'),url(woff2/MTP_ySUJH_bn48VBG8sNSj0LW-43aMEzIO6XUTLjad8.woff2) format('woff2');unicode-range:U+0100-024F,U+1E00-1EFF,U+20A0-20AB,U+20AD-20CF,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:'Open Sans';font-style:normal;font-weight:600;src:local('Open Sans Semibold'),local('OpenSans-Semibold'),url(woff2/MTP_ySUJH_bn48VBG8sNSugdm0LZdjqr5-oayXSOefg.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2212,U+2215,U+E0FF,U+EFFD,U+F000}@font-face{font-family:'Open Sans';font-style:normal;font-weight:700;src:local('Open Sans Bold'),local('OpenSans-Bold'),url(woff2/k3k702ZOKiLJc3WVjuplzK-j2U0lmluP9RWlSytm3ho.woff2) format('woff2');unicode-range:U+0460-052F,U+20B4,U+2DE0-2DFF,U+A640-A69F}@font-face{font-family:'Open Sans';font-style:normal;font-weight:700;src:local('Open Sans Bold'),local('OpenSans-Bold'),url(woff2/k3k702ZOKiLJc3WVjuplzJX5f-9o1vgP2EXwfjgl7AY.woff2) format('woff2');unicode-range:U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:'Open Sans';font-style:normal;font-weight:700;src:local('Open Sans Bold'),local('OpenSans-Bold'),url(woff2/k3k702ZOKiLJc3WVjuplzBWV49_lSm1NYrwo-zkhivY.woff2) format('woff2');unicode-range:U+1F00-1FFF}@font-face{font-family:'Open Sans';font-style:normal;font-weight:700;src:local('Open Sans Bold'),local('OpenSans-Bold'),url(woff2/k3k702ZOKiLJc3WVjuplzKaRobkAwv3vxw3jMhVENGA.woff2) format('woff2');unicode-range:U+0370-03FF}@font-face{font-family:'Open Sans';font-style:normal;font-weight:700;src:local('Open Sans Bold'),local('OpenSans-Bold'),url(woff2/k3k702ZOKiLJc3WVjuplzP8zf_FOSsgRmwsS7Aa9k2w.woff2) format('woff2');unicode-range:U+0102-0103,U+1EA0-1EF9,U+20AB}@font-face{font-family:'Open Sans';font-style:normal;font-weight:700;src:local('Open Sans Bold'),local('OpenSans-Bold'),url(woff2/k3k702ZOKiLJc3WVjuplzD0LW-43aMEzIO6XUTLjad8.woff2) format('woff2');unicode-range:U+0100-024F,U+1E00-1EFF,U+20A0-20AB,U+20AD-20CF,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:'Open Sans';font-style:normal;font-weight:700;src:local('Open Sans Bold'),local('OpenSans-Bold'),url(woff2/k3k702ZOKiLJc3WVjuplzOgdm0LZdjqr5-oayXSOefg.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2212,U+2215,U+E0FF,U+EFFD,U+F000}.animated-super-fast{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.animated,.animated-fast{-webkit-animation-fill-mode:both}.animated-fast{-webkit-animation-duration:.5s;animation-duration:.5s;animation-fill-mode:both}.animated{-webkit-animation-duration:1s;animation-duration:1s;animation-fill-mode:both}.animated-slow{-webkit-animation-duration:1.3s;animation-duration:1.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both}@-webkit-keyframes bounce{0%,100%,20%,50%,80%{-webkit-transform:translateY(0);transform:translateY(0)}40%{-webkit-transform:translateY(-30px);transform:translateY(-30px)}60%{-webkit-transform:translateY(-15px);transform:translateY(-15px)}}@keyframes bounce{0%,100%,20%,50%,80%{transform:translateY(0)}40%{transform:translateY(-30px)}60%{transform:translateY(-15px)}}@-webkit-keyframes jumpUp{0%{-webkit-transform:translate3d(0,calc(230%),0) scale3d(0,1,1);-webkit-animation-timing-function:ease-in}40%{-webkit-transform:translate3d(0,0,0) scale3d(.02,1.1,1);-webkit-animation-timing-function:ease-out}70%{-webkit-transform:translate3d(0,-40px,0) scale3d(.8,1.1,1)}100%{-webkit-transform:translate3d(0,0,0) scale3d(1,1,1)}}@keyframes jumpUp{0%{transform:translate3d(0,calc(230%),0) scale3d(0,1,1);animation-timing-function:ease-in}40%{transform:translate3d(0,0,0) scale3d(.02,1.1,1);animation-timing-function:ease-out}70%{transform:translate3d(0,-40px,0) scale3d(.8,1.1,1)}100%{transform:translate3d(0,0,0) scale3d(1,1,1)}}@-webkit-keyframes expandOpen{0%{-webkit-transform:scale(1.8)}50%{-webkit-transform:scale(.95)}80%{-webkit-transform:scale(1.05)}90%{-webkit-transform:scale(.98)}100%{-webkit-transform:scale(1)}}@keyframes expandOpen{0%{transform:scale(1.8)}50%{transform:scale(.95)}80%{transform:scale(1.05)}90%{transform:scale(.98)}100%{transform:scale(1)}}@keyframes fadeInScale{0%{transform:scale(0);opacity:0}100%{transform:scale(1);opacity:1}}@-webkit-keyframes fadeInScale{0%{-webkit-transform:scale(0);opacity:0}100%{-webkit-transform:scale(1);opacity:1}}@-webkit-keyframes zoomIn{0%{opacity:0;-webkit-transform:scale(.3);transform:scale(.3)}50%{opacity:1}}@keyframes zoomIn{0%{opacity:0;-webkit-transform:scale(.3);-ms-transform:scale(.3);transform:scale(.3)}50%{opacity:1}}@-webkit-keyframes zoomOut{0%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}50%{opacity:0;-webkit-transform:scale(.3);transform:scale(.3)}100%{opacity:0}}@keyframes zoomOut{0%{opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}50%{opacity:0;-webkit-transform:scale(.3);-ms-transform:scale(.3);transform:scale(.3)}100%{opacity:0}}@-webkit-keyframes fadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:none;transform:none}}.postilTitle,.tool-wrap{transform:translateX(-50%)}.fadeInDown{-webkit-animation-name:fadeInDown;animation-name:fadeInDown}.zoomIn{-webkit-animation-name:zoomIn;animation-name:zoomIn}.zoomOut{-webkit-animation-name:zoomOut;animation-name:zoomOut}.bounce{-webkit-animation-name:bounce;animation-name:bounce}.jumpUp{-webkit-animation-name:jumpUp;animation-name:jumpUp}.expandOpen{animation-name:expandOpen;-webkit-animation-name:expandOpen}.fadeInScale{animation-name:fadeInScale;-webkit-animation-name:fadeInScale}.lobibox div{margin:0;padding:0;border:0}body.lobibox-open{overflow:hidden}.lobibox{position:fixed;z-index:4001}.lobibox *{box-sizing:border-box;-webkit-box-sizing:border-box}.yj-multiple-range,.yj-range,.yj-slider{box-sizing:border-box}.lobibox .lobibox-header{height:32px;font-size:14px;padding:5px 10px;color:#eee}.lobibox .lobibox-header .btn-close{float:right;background-color:transparent;cursor:pointer;border:none;transition:all .3s;font-size:18px;color:#4DC0FF}.lobibox .lobibox-header .btn-close:hover{text-shadow:2px 2px 3px rgba(0,0,0,.7)}.lobibox .lobibox-body{overflow:hidden;display:table;position:relative;width:100%;padding:15px 20px;font-size:16px;background:rgba(0,0,0,.5);color:#FFF;box-sizing:border-box}.lobibox .lobibox-body .lobibox-icon-wrapper{position:relative;height:100%;display:table;font-size:60px}.lobibox .lobibox-body .lobibox-icon-wrapper .lobibox-icon{display:table-cell;vertical-align:middle}.lobibox .lobibox-body .lobibox-body-text-wrapper{display:table-cell;vertical-align:middle;width:100%;padding-left:10px;word-wrap:break-word;word-break:break-all}.lobibox .lobibox-footer{text-align:center;padding:20px 14px}.lobibox .lobibox-footer>*{margin:0 10px 0 0}.btn,.lobibox.lobibox-progress .lobibox-body .lobibox-progress-outer,.modal-footer{margin-bottom:0}.lobibox .lobibox-footer.text-center{text-align:center}.lobibox .lobibox-footer.text-left{text-align:left}.lobibox .lobibox-footer.text-right{text-align:right}.lobibox.lobibox-confirm{border:none}.lobibox.lobibox-confirm .lobibox-header{color:#fff;background-color:#000}.lobibox.lobibox-confirm .lobibox-body .lobibox-icon{color:#3C2D2D}.lobibox.lobibox-confirm .lobibox-footer{background:rgba(0,0,0,.5)}.lobibox.lobibox-success{border:1px solid #29B87E}.lobibox.lobibox-success .lobibox-header{color:#eee;background-color:#29B87E}.lobibox.lobibox-success .lobibox-body .lobibox-icon{color:#29B87E}.lobibox.lobibox-success .lobibox-footer{background-color:#40d498}.lobibox.lobibox-error{border:1px solid #CA2121}.lobibox.lobibox-error .lobibox-header{color:#eee;background-color:#CA2121}.lobibox.lobibox-error .lobibox-body .lobibox-icon{color:#CA2121}.lobibox.lobibox-error .lobibox-footer{background-color:#e03e3e}.lobibox.lobibox-info .lobibox-header{color:#FFF;background:#000}.lobibox.lobibox-info .lobibox-body .lobibox-icon{color:#2E79B4}.lobibox.lobibox-info .lobibox-footer{background-color:rgba(0,0,0,.5)}.lobibox.lobibox-warning{border:1px solid #CE812E}.lobibox.lobibox-warning .lobibox-header{color:#eee;background-color:#CE812E}.lobibox.lobibox-warning .lobibox-body .lobibox-icon{color:#CE812E}.lobibox.lobibox-warning .lobibox-footer{background-color:#d99a56}.lobibox.lobibox-prompt{border:none}.lobibox.lobibox-prompt .lobibox-header{background-color:#000;color:#FFF}.lobibox.lobibox-prompt .lobibox-body{padding:20px}.lobibox.lobibox-prompt .lobibox-body .lobibox-input{min-height:38px;border:1px solid #21cb91;width:100%;padding:5px;font-size:18px;outline:0}.lobibox.lobibox-prompt .lobibox-body .lobibox-input:focus{background-color:#EEE}.lobibox.lobibox-prompt .lobibox-body .lobibox-input.invalid{border-color:#DC2B2A}.lobibox.lobibox-prompt .lobibox-body .lobibox-input-error-message{margin-top:5px;margin-bottom:0;font-size:13px;color:#DC2B2A}.lobibox.lobibox-prompt .lobibox-footer{background:rgba(0,0,0,.5);color:#FFF}.lobibox.lobibox-progress .lobibox-header{background-color:#2F5D6D}.lobibox.lobibox-progress .lobibox-body{padding:15px;font-size:16px}.lobibox.lobibox-progress .lobibox-body .lobibox-progress-bar-wrapper{position:relative;height:20px;border:1px solid #c3c3c3;border-radius:10px;background-color:#d5d5d5}.lobibox.lobibox-progress .lobibox-body .lobibox-progress-bar-wrapper .lobibox-progress-bar{width:0;border-radius:10px;background-color:#468ba2;height:100%;text-align:center}.lobibox.lobibox-progress .lobibox-body .lobibox-progress-bar-wrapper .lobibox-progress-text{position:absolute;text-align:center;top:0;width:100%}.lobibox-notify-wrapper,.lobibox-notify-wrapper-large{position:fixed;z-index:5000}.lobibox.lobibox-progress .lobibox-body .lobibox-progress-outer .progress-bar{transition:none}.lobibox.lobibox-progress .lobibox-body .lobibox-progress-outer [data-role=progress-text]{font-weight:700;color:rgba(0,0,0,.7)}/*!*background-color:rgba(0,0,0,0.4) ;*!*//*!*border: 3px solid #808080;*!*//*!*border-radius: 6px;*!*/.lobibox.lobibox-window .lobibox-header{background-color:#000;color:#FFF;font-size:14px;padding:0 8px;line-height:32px}.lobibox.lobibox-window .lobibox-body{overflow:auto;display:block;font-size:14px;padding:15px}.lobibox.lobibox-window ::-webkit-scrollbar{width:5px}.lobibox.lobibox-window ::-webkit-scrollbar-thumb{border-radius:5px;-webkit-box-shadow:inset 0 0 5px rgba(0,0,0,.2);background:#535353}.lobibox.lobibox-window ::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 1px transparent;border-radius:5px;background:#ccc}.lobibox .lobibox-btn.lobibox-btn-cancel.active,.lobibox .lobibox-btn.lobibox-btn-cancel:active,.lobibox .lobibox-btn.lobibox-btn-default.active,.lobibox .lobibox-btn.lobibox-btn-default:active,.lobibox .lobibox-btn.lobibox-btn-no.active,.lobibox .lobibox-btn.lobibox-btn-no:active,.lobibox .lobibox-btn.lobibox-btn-ok.active,.lobibox .lobibox-btn.lobibox-btn-ok:active,.lobibox .lobibox-btn.lobibox-btn-yes.active,.lobibox .lobibox-btn.lobibox-btn-yes:active,.open>.dropdown-toggle.lobibox .lobibox-btn.lobibox-btn-cancel,.open>.dropdown-toggle.lobibox .lobibox-btn.lobibox-btn-default,.open>.dropdown-toggle.lobibox .lobibox-btn.lobibox-btn-no,.open>.dropdown-toggle.lobibox .lobibox-btn.lobibox-btn-ok,.open>.dropdown-toggle.lobibox .lobibox-btn.lobibox-btn-yes{background-image:none}.lobibox.lobibox-window .lobibox-footer{background-color:#8ab0e9}.lobibox.draggable .lobibox-header{cursor:move}.lobibox .lobibox-btn{display:inline-block;padding:8px 14px;font-size:14px;cursor:pointer;border-radius:4px;line-height:initial;outline:0}.lobibox .lobibox-btn.lobibox-btn-cancel.active,.lobibox .lobibox-btn.lobibox-btn-cancel.focus,.lobibox .lobibox-btn.lobibox-btn-cancel:active,.lobibox .lobibox-btn.lobibox-btn-cancel:focus,.lobibox .lobibox-btn.lobibox-btn-cancel:hover,.open>.dropdown-toggle.lobibox .lobibox-btn.lobibox-btn-cancel{color:#FFF;background-color:#9e1a1a;border-color:#951818}.lobibox .lobibox-btn.lobibox-btn-cancel.disabled,.lobibox .lobibox-btn.lobibox-btn-cancel.disabled.active,.lobibox .lobibox-btn.lobibox-btn-cancel.disabled.focus,.lobibox .lobibox-btn.lobibox-btn-cancel.disabled:active,.lobibox .lobibox-btn.lobibox-btn-cancel.disabled:focus,.lobibox .lobibox-btn.lobibox-btn-cancel.disabled:hover,.lobibox .lobibox-btn.lobibox-btn-cancel[disabled],.lobibox .lobibox-btn.lobibox-btn-cancel[disabled].active,.lobibox .lobibox-btn.lobibox-btn-cancel[disabled].focus,.lobibox .lobibox-btn.lobibox-btn-cancel[disabled]:active,.lobibox .lobibox-btn.lobibox-btn-cancel[disabled]:focus,.lobibox .lobibox-btn.lobibox-btn-cancel[disabled]:hover,fieldset[disabled] .lobibox .lobibox-btn.lobibox-btn-cancel,fieldset[disabled] .lobibox .lobibox-btn.lobibox-btn-cancel.active,fieldset[disabled] .lobibox .lobibox-btn.lobibox-btn-cancel.focus,fieldset[disabled] .lobibox .lobibox-btn.lobibox-btn-cancel:active,fieldset[disabled] .lobibox .lobibox-btn.lobibox-btn-cancel:focus,fieldset[disabled] .lobibox .lobibox-btn.lobibox-btn-cancel:hover{background-color:#CA2121;border-color:#CA2121}.lobibox .lobibox-btn.lobibox-btn-cancel .badge{color:#CA2121;background-color:#FFF}.lobibox .lobibox-btn.lobibox-btn-yes{color:#FFF;background-color:#29B87E;border-color:#29B87E}.lobibox .lobibox-btn.lobibox-btn-yes.active,.lobibox .lobibox-btn.lobibox-btn-yes.focus,.lobibox .lobibox-btn.lobibox-btn-yes:active,.lobibox .lobibox-btn.lobibox-btn-yes:focus,.lobibox .lobibox-btn.lobibox-btn-yes:hover,.open>.dropdown-toggle.lobibox .lobibox-btn.lobibox-btn-yes{color:#FFF;background-color:#208e61;border-color:#1e865c}.lobibox .lobibox-btn.lobibox-btn-yes.disabled,.lobibox .lobibox-btn.lobibox-btn-yes.disabled.active,.lobibox .lobibox-btn.lobibox-btn-yes.disabled.focus,.lobibox .lobibox-btn.lobibox-btn-yes.disabled:active,.lobibox .lobibox-btn.lobibox-btn-yes.disabled:focus,.lobibox .lobibox-btn.lobibox-btn-yes.disabled:hover,.lobibox .lobibox-btn.lobibox-btn-yes[disabled],.lobibox .lobibox-btn.lobibox-btn-yes[disabled].active,.lobibox .lobibox-btn.lobibox-btn-yes[disabled].focus,.lobibox .lobibox-btn.lobibox-btn-yes[disabled]:active,.lobibox .lobibox-btn.lobibox-btn-yes[disabled]:focus,.lobibox .lobibox-btn.lobibox-btn-yes[disabled]:hover,fieldset[disabled] .lobibox .lobibox-btn.lobibox-btn-yes,fieldset[disabled] .lobibox .lobibox-btn.lobibox-btn-yes.active,fieldset[disabled] .lobibox .lobibox-btn.lobibox-btn-yes.focus,fieldset[disabled] .lobibox .lobibox-btn.lobibox-btn-yes:active,fieldset[disabled] .lobibox .lobibox-btn.lobibox-btn-yes:focus,fieldset[disabled] .lobibox .lobibox-btn.lobibox-btn-yes:hover{background-color:#29B87E;border-color:#29B87E}.lobibox .lobibox-btn.lobibox-btn-yes .badge{color:#29B87E;background-color:#FFF}.lobibox .lobibox-btn.lobibox-btn-no{color:#FFF;background-color:#0760B3;border-color:#0760B3}.lobibox .lobibox-btn.lobibox-btn-no.active,.lobibox .lobibox-btn.lobibox-btn-no.focus,.lobibox .lobibox-btn.lobibox-btn-no:active,.lobibox .lobibox-btn.lobibox-btn-no:focus,.lobibox .lobibox-btn.lobibox-btn-no:hover,.open>.dropdown-toggle.lobibox .lobibox-btn.lobibox-btn-no{color:#FFF;background-color:#054682;border-color:#054078}.lobibox .lobibox-btn.lobibox-btn-no.disabled,.lobibox .lobibox-btn.lobibox-btn-no.disabled.active,.lobibox .lobibox-btn.lobibox-btn-no.disabled.focus,.lobibox .lobibox-btn.lobibox-btn-no.disabled:active,.lobibox .lobibox-btn.lobibox-btn-no.disabled:focus,.lobibox .lobibox-btn.lobibox-btn-no.disabled:hover,.lobibox .lobibox-btn.lobibox-btn-no[disabled],.lobibox .lobibox-btn.lobibox-btn-no[disabled].active,.lobibox .lobibox-btn.lobibox-btn-no[disabled].focus,.lobibox .lobibox-btn.lobibox-btn-no[disabled]:active,.lobibox .lobibox-btn.lobibox-btn-no[disabled]:focus,.lobibox .lobibox-btn.lobibox-btn-no[disabled]:hover,fieldset[disabled] .lobibox .lobibox-btn.lobibox-btn-no,fieldset[disabled] .lobibox .lobibox-btn.lobibox-btn-no.active,fieldset[disabled] .lobibox .lobibox-btn.lobibox-btn-no.focus,fieldset[disabled] .lobibox .lobibox-btn.lobibox-btn-no:active,fieldset[disabled] .lobibox .lobibox-btn.lobibox-btn-no:focus,fieldset[disabled] .lobibox .lobibox-btn.lobibox-btn-no:hover{background-color:#0760B3;border-color:#0760B3}.lobibox .lobibox-btn.lobibox-btn-no .badge{color:#0760B3;background-color:#FFF}.lobibox .lobibox-btn.lobibox-btn-ok{color:#FFF;background-color:#0760B3;border-color:#0760B3}.lobibox .lobibox-btn.lobibox-btn-ok.active,.lobibox .lobibox-btn.lobibox-btn-ok.focus,.lobibox .lobibox-btn.lobibox-btn-ok:active,.lobibox .lobibox-btn.lobibox-btn-ok:focus,.lobibox .lobibox-btn.lobibox-btn-ok:hover,.open>.dropdown-toggle.lobibox .lobibox-btn.lobibox-btn-ok{color:#FFF;background-color:#054682;border-color:#054078}.lobibox .lobibox-btn.lobibox-btn-ok.disabled,.lobibox .lobibox-btn.lobibox-btn-ok.disabled.active,.lobibox .lobibox-btn.lobibox-btn-ok.disabled.focus,.lobibox .lobibox-btn.lobibox-btn-ok.disabled:active,.lobibox .lobibox-btn.lobibox-btn-ok.disabled:focus,.lobibox .lobibox-btn.lobibox-btn-ok.disabled:hover,.lobibox .lobibox-btn.lobibox-btn-ok[disabled],.lobibox .lobibox-btn.lobibox-btn-ok[disabled].active,.lobibox .lobibox-btn.lobibox-btn-ok[disabled].focus,.lobibox .lobibox-btn.lobibox-btn-ok[disabled]:active,.lobibox .lobibox-btn.lobibox-btn-ok[disabled]:focus,.lobibox .lobibox-btn.lobibox-btn-ok[disabled]:hover,fieldset[disabled] .lobibox .lobibox-btn.lobibox-btn-ok,fieldset[disabled] .lobibox .lobibox-btn.lobibox-btn-ok.active,fieldset[disabled] .lobibox .lobibox-btn.lobibox-btn-ok.focus,fieldset[disabled] .lobibox .lobibox-btn.lobibox-btn-ok:active,fieldset[disabled] .lobibox .lobibox-btn.lobibox-btn-ok:focus,fieldset[disabled] .lobibox .lobibox-btn.lobibox-btn-ok:hover{background-color:#0760B3;border-color:#0760B3}.lobibox .lobibox-btn.lobibox-btn-ok .badge{color:#0760B3;background-color:#FFF}.lobibox .lobibox-btn.lobibox-btn-default,.lobibox-btn-cancel{color:#000;background-color:#4DC0FF;border:none;width:154px;height:32px}.lobibox .lobibox-btn.lobibox-btn-default.active,.lobibox .lobibox-btn.lobibox-btn-default.focus,.lobibox .lobibox-btn.lobibox-btn-default:active,.lobibox .lobibox-btn.lobibox-btn-default:focus,.lobibox .lobibox-btn.lobibox-btn-default:hover,.open>.dropdown-toggle.lobibox .lobibox-btn.lobibox-btn-default{color:#000;background-color:#c9c9c9;border-color:#bcbcbc}.lobibox .lobibox-btn.lobibox-btn-default.disabled,.lobibox .lobibox-btn.lobibox-btn-default.disabled.active,.lobibox .lobibox-btn.lobibox-btn-default.disabled.focus,.lobibox .lobibox-btn.lobibox-btn-default.disabled:active,.lobibox .lobibox-btn.lobibox-btn-default.disabled:focus,.lobibox .lobibox-btn.lobibox-btn-default.disabled:hover,.lobibox .lobibox-btn.lobibox-btn-default[disabled],.lobibox .lobibox-btn.lobibox-btn-default[disabled].active,.lobibox .lobibox-btn.lobibox-btn-default[disabled].focus,.lobibox .lobibox-btn.lobibox-btn-default[disabled]:active,.lobibox .lobibox-btn.lobibox-btn-default[disabled]:focus,.lobibox .lobibox-btn.lobibox-btn-default[disabled]:hover,fieldset[disabled] .lobibox .lobibox-btn.lobibox-btn-default,fieldset[disabled] .lobibox .lobibox-btn.lobibox-btn-default.active,fieldset[disabled] .lobibox .lobibox-btn.lobibox-btn-default.focus,fieldset[disabled] .lobibox .lobibox-btn.lobibox-btn-default:active,fieldset[disabled] .lobibox .lobibox-btn.lobibox-btn-default:focus,fieldset[disabled] .lobibox .lobibox-btn.lobibox-btn-default:hover{background-color:#e2e2e2;border-color:#dadada}.lobibox .lobibox-btn.lobibox-btn-default .badge{color:#e2e2e2;background-color:#000}.lobibox.lobibox-hidden{display:none}.lobibox-backdrop{position:fixed;z-index:4000;left:0;top:0;width:100%;height:100%;background-color:rgba(0,0,0,.5)}.lobibox-notify-wrapper.top{top:0}.lobibox-notify-wrapper.left{left:0;margin-right:0}.lobibox-notify-wrapper.right{right:0;margin-left:0}.lobibox-notify-wrapper.right .lobibox-notify{margin-left:auto}.lobibox-notify-wrapper.center{left:50%}.lobibox-notify-wrapper-large.top{top:0}.lobibox-notify-wrapper-large.left{left:0}.lobibox-notify-wrapper-large.left .lb-notify-tabs>li{float:left;margin-left:0;margin-right:2px}.lobibox-notify-wrapper-large.right{right:0}.lobibox-notify-wrapper-large .lb-notify-tabs{list-style:none;padding:0;margin:0 0 -5px}.lobibox-notify-wrapper-large .lb-notify-tabs>li{float:right;margin-left:2px}.lobibox-notify-wrapper-large .lb-notify-tabs>li>a{text-align:center;display:table;text-decoration:none;font-size:18px;height:32px;color:#FFF;width:28px;opacity:.6}.lobibox-notify-wrapper-large .lb-notify-tabs>li>a:active,.lobibox-notify-wrapper-large .lb-notify-tabs>li>a:focus,.lobibox-notify-wrapper-large .lb-notify-tabs>li>a:hover,.lobibox-notify-wrapper-large .lb-notify-tabs>li>a:hover:active{color:#FFF}.lobibox-notify-wrapper-large .lb-notify-tabs>li>a .tab-control-icon{display:table-cell;vertical-align:middle}.lobibox-notify-wrapper-large .lb-notify-tabs>li.lobibox-notify-default>a{background-color:rgba(28,28,28,.9);border-color:#141414}.lobibox-notify-wrapper-large .lb-notify-tabs>li.lobibox-notify-default>a:hover{background-color:#1c1c1c;border-color:#0f0f0f}.lobibox-notify-wrapper-large .lb-notify-tabs>li.lobibox-notify-error>a{background-color:rgba(202,33,33,.9);border-color:#bd1f1f}.lobibox-notify-wrapper-large .lb-notify-tabs>li.lobibox-notify-error>a:hover{background-color:#CA2121;border-color:#b41d1d}.lobibox-notify-wrapper-large .lb-notify-tabs>li.lobibox-notify-success>a{background-color:rgba(41,184,126,.9);border-color:#26ab75}.lobibox-notify-wrapper-large .lb-notify-tabs>li.lobibox-notify-success>a:hover{background-color:#29B87E;border-color:#24a370}.lobibox-notify-wrapper-large .lb-notify-tabs>li.lobibox-notify-warning>a{background-color:rgba(206,129,46,.9);border-color:#c1792b}.lobibox-notify-wrapper-large .lb-notify-tabs>li.lobibox-notify-warning>a:hover{background-color:#CE812E;border-color:#b97429}.lobibox-notify-wrapper-large .lb-notify-tabs>li.lobibox-notify-info>a{background-color:rgba(46,121,180,.9);border-color:#2b71a8}.lobibox-notify-wrapper-large .lb-notify-tabs>li.lobibox-notify-info>a:hover{background-color:#2E79B4;border-color:#296ba0}.lobibox-notify-wrapper-large .lb-notify-tabs>li.active>a{opacity:1}.lobibox-notify-wrapper-large .lb-notify-tabs:after{content:"";display:block;clear:both}.lobibox-notify-wrapper-large .lb-notify-wrapper{background-color:transparent;padding:0;border:none}.lobibox-notify-wrapper-large .lb-notify-wrapper .lb-tab-pane{display:none}.lobibox-notify-wrapper-large .lb-notify-wrapper .lb-tab-pane.active{display:block}.lobibox-notify-wrapper-large .lb-notify-wrapper .lobibox-notify{min-height:150px}.lobibox-notify-wrapper-large .lb-notify-wrapper .lobibox-notify .lobibox-notify-icon-wrapper{width:100px}.lobibox-notify-wrapper-large .lb-notify-wrapper .lobibox-notify .lobibox-notify-icon>div .icon-el{font-size:78px}.lobibox-notify-wrapper-large .lb-notify-wrapper .lobibox-notify .lobibox-notify-body{margin:13px 20px 13px 130px}.lobibox-notify{position:relative;min-height:85px;font-size:14px;margin:7px 0;border-radius:0;border:1px solid transparent;-webkit-box-shadow:2px 2px 5px #aaa;box-shadow:2px 2px 5px #aaa;-webkit-transition:all .2s;-o-transition:all .2s;transition:all .2s}.lobibox-notify .lobibox-notify-icon-wrapper{position:absolute;left:15px;width:60px;height:100%}.lobibox-notify .lobibox-notify-icon{display:table;width:100%;height:100%}.lobibox-notify .lobibox-notify-icon>div{display:table-cell;vertical-align:middle}.lobibox-notify .lobibox-notify-icon>div>img{width:100%;max-width:100%;margin-top:3px;border-radius:4px}.lobibox-notify .lobibox-notify-icon>div .icon-el{text-align:center;font-size:55px}.lobibox-notify .lobibox-notify-body{margin:10px 20px 10px 90px}.lobibox-notify .lobibox-notify-title{font-size:20px}.lobibox-notify .lobibox-notify-msg{overflow:hidden}.lobibox-notify .lobibox-close{position:absolute;text-align:center;border-radius:50%;right:10px;top:10px;font-size:20px;line-height:19px;width:19px;height:19px;-webkit-transition:all .2s;-o-transition:all .2s;transition:all .2s}.lobibox-notify .lobibox-close:hover{background-color:rgba(0,0,0,.5);font-weight:700}.lobibox-notify .lobibox-delay-indicator{position:absolute;left:0;right:0;bottom:0;height:3px}.lobibox-notify .lobibox-delay-indicator>div{position:relative;height:100%;width:0;background-color:#e8e8e8}.lobibox-notify.lobibox-notify-default{border-color:#0f0f0f;background-color:#1c1c1c;color:#FFF}.lobibox-notify.lobibox-notify-default:hover{background-color:#1c1c1c;border-color:#FFF}.lobibox-notify.lobibox-notify-default .lobibox-close:hover{background-color:#4f4f4f}.lobibox-notify.lobibox-notify-error{border-color:#b41d1d;background-color:#CA2121;color:#FFF}.lobibox-notify.lobibox-notify-error:hover{background-color:#CA2121;border-color:#FFF}.lobibox-notify.lobibox-notify-success{border-color:#24a370;background-color:#29B87E;color:#FFF}.lobibox-notify.lobibox-notify-success:hover{background-color:#29B87E;border-color:#FFF}.lobibox-notify.lobibox-notify-warning{border-color:#b97429;background-color:#CE812E;color:#FFF}.lobibox-notify.lobibox-notify-warning:hover{background-color:#CE812E;border-color:#FFF}.lobibox-notify.lobibox-notify-info{border-color:#296ba0;background-color:#2E79B4;color:#FFF}.lobibox-notify.lobibox-notify-info:hover{background-color:#2E79B4;border-color:#FFF}.lobibox-notify.rounded{border-radius:30px}.lobibox-notify:hover{cursor:pointer;-webkit-box-shadow:3px 3px 10px #aaa;box-shadow:3px 3px 10px #aaa}.lobibox-notify.notify-mini{min-height:36px}.lobibox-notify.notify-mini .lobibox-notify-title{margin-top:-5px;font-size:20px;line-height:22px}.lobibox-notify.notify-mini .lobibox-notify-msg{line-height:16px}.lobibox-notify.notify-mini .lobibox-notify-icon-wrapper{left:12px;width:32px}.lobibox-notify.notify-mini .lobibox-notify-icon>div .icon-el{font-size:32px}.lobibox-notify.notify-mini .lobibox-notify-body{margin:15px 30px 15px 56px}.lobibox-notify.without-icon .lobibox-notify-body{margin-left:20px}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before,.glyphicon-btc:before,.glyphicon-xbt:before{content:"\e227"}.glyphicon-jpy:before,.glyphicon-yen:before{content:"\00a5"}.glyphicon-rub:before,.glyphicon-ruble:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}nav h1{padding-left:40px;background:url(../img/images/logo.png) left center/auto 80% no-repeat;display:inline-block;float:left;margin:0;font-size:16px;line-height:1.2em}#menu>li>ul>li{position:relative}#menu>li>ul>li i{position:absolute;right:15px;color:#888;opacity:.8}.container-fluid{position:relative;height:84%;top:55px;overflow-y:auto;overflow-x:auto;border:2px solid;margin-left:2px;margin-right:2px}.canvas-wrap{position:relative;background:#fff;box-shadow:0 0 3px #999}.postilTitle,.tool-wrap{position:absolute;left:50%}.tool button,.tool-panel button{background-repeat:no-repeat;background-size:80% 80%;background-position:center center}.modal,.restoreModal{-webkit-background-clip:padding-box}.canvas-paint{position:absolute;top:0;left:0;cursor:none}#canvas-mouse[data-mouse=Pen]{cursor:url(data:image/gif;base64,R0lGODlhGQAZAPeQAEVFRf7+/ldXV/z8/P39/VhYWIeHh+rq6omJiVZWVkRERExMTOjo6CsrK15eXv/////+/vv1+CgoKIyMjFVVVUhISO7u7ufn59+QtVxcXEZGRlBQUOjo6erH2VJSUcSIpuvr6/j5+vr6+t69m42NjePIqk9OTe/v7/79/OPTw9JzojQ0NGBgYLPHv3d3d/v05+7r7QEBAcSjfIMzWAQEBNdvotVsm8xomPn5+fGz0NFdleTFqu7o4sjIyMhViIiGiOfH2CYmJnh7f/Xhxs/Pzw8WGbVFe//kvQUFBTExMYiIiEpKSiwsLC8vL/Hx8bOLWuHKrebm5kZJTT09PSopKoV5bqeQdubSub19m6Ganv38+vPp3ePk5pQ0Y+/izWZmZnBwcICAgaCgoPT/+dKyi/fz6saieVhYV42MjdJsms6PrDY5Ody/lvbr8KiyrfDfzcWgePXy71JSUj4zKK6ursutiLu5ucKMpdbLvzg4OFNPTv39/Dg2NpubmyoqKktLS+Lg4PPz9Pz7+erg0/bm7dS4mDw6NicnJ6ysrI6OjuTRt/Dn7FNTU9u9mJOTkwAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo1OTZBRkNEQ0MwNTgxMUUyQkNEMEM1REY3NUE3QjE5NyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1OTZBRkNEQkMwNTgxMUUyQkNEMEM1REY3NUE3QjE5NyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IFdpbmRvd3MiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0iRUQ1NUYxMzE1OTEwODAyNzAxNzlGRERCODhFNDUwNDgiIHN0UmVmOmRvY3VtZW50SUQ9IkVENTVGMTMxNTkxMDgwMjcwMTc5RkREQjg4RTQ1MDQ4Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+Af/+/fz7+vn49/b19PPy8fDv7u3s6+rp6Ofm5eTj4uHg397d3Nva2djX1tXU09LR0M/OzczLysnIx8bFxMPCwcC/vr28u7q5uLe2tbSzsrGwr66trKuqqainpqWko6KhoJ+enZybmpmYl5aVlJOSkZCPjo2Mi4qJiIeGhYSDgoGAf359fHt6eXh3dnV0c3JxcG9ubWxramloZ2ZlZGNiYWBfXl1cW1pZWFdWVVRTUlFQT05NTEtKSUhHRkVEQ0JBQD8+PTw7Ojk4NzY1NDMyMTAvLi0sKyopKCcmJSQjIiEgHx4dHBsaGRgXFhUUExIREA8ODQwLCgkIBwYFBAMCAQAAIfkEAQAAkAAsAAAAABkAGQAACP8AIQkcSLBgwQBAIhhcyBCCmhsYCDGcKDDAhzQ5VPhQSNFgADRZOtioYeROx4NKxIxpgUVHl0UnBxJwhIiAHTc/ZrSJKZCAAwpEetAJwwcGT0gBwAgwkMRFnxUgjuJgkYCEnClN8lg4OqAAhQkLADR45ISrAwGJNgBg8ogB1wwCEPwBIIHGVp4DEgiYsASAn0cHjhL4wsjAAgUNYkQ5KqJAAQQVABxqezSEhzMGKmiQ8OjCUS1VpAgxoSBI56OQ2AwBZGgNFSQnUJfZ8eCIlSKAUUMo8QJKoxFzuKCGtOXNFTJwnsQZ/sCLIjMyUuwZDolHoTqDBFGHFEgPHhTbBR4F4BB+YEAAOw==) 0 24,crosshair}#canvas-mouse[data-mouse=Eraser]{cursor:url(data:image/png;base64,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) 9 24,crosshair}#canvas-mouse[data-mouse=FloodFill]{cursor:url(data:image/png;base64,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) 9 24,crosshair}#canvas-mouse[data-mouse=EyeDropper]{cursor:url(data:image/png;base64,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) 2 24,crosshair}#canvas-mouse[data-mouse=Text]{cursor:text}.tool-wrap{margin-top:10px;width:300px;height:100px;bottom:-10px}.tool-panel{display:flex}.tool button.active,.tool button:hover{background-color:#1f89de}.tool button[data-current-tool=Line]{background-image:url(data:image/png;base64,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)}.tool button[data-current-tool=CurveClosed]{background-image:url(data:image/png;base64,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)}.tool button[data-current-tool=Rect]{background-image:url(data:image/png;base64,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)}.tool button[data-current-tool=Circle]{background-image:url(data:image/png;base64,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)}.tool button[data-current-tool=Ellipes]{background-image:url(data:image/png;base64,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)}.tool button[data-current-tool=Arrow]{background-image:url(data:image/png;base64,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)}.tool button[data-current-tool=Pen]{background-image:url(data:image/png;base64,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)}.tool button[data-current-tool=CurveClosedStroke]{background-image:url(data:image/png;base64,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)}.tool button[data-current-tool=RectStroke]{background-image:url(data:image/png;base64,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)}.tool button[data-current-tool=CircleStroke]{background-image:url(data:image/png;base64,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)}.tool button[data-current-tool=EllipesStroke]{background-image:url(data:image/png;base64,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)}.tool button[data-current-tool=ArrowStroke]{background-image:url(../img/imgedit/arrow.hollow.postil.png)}.tool button[data-current-tool=Text]{background-image:url(data:image/png;base64,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)}.tool button[data-current-tool=TextStroke]{background-image:url(data:image/png;base64,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)}.tool .flood-fill{background-image:url(data:image/png;base64,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)}.tool .eraser{background-image:url(data:image/png;base64,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)}.tool .select{background-image:url(data:image/png;base64,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)}.tool .eye-dropper{background-image:url(data:image/png;base64,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)}.tool .image{background-image:url(data:image/png;base64,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)}.tool .spectrum-color{margin:4px 0 0 .1%}.tool .save{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsTAAALEwEAmpwYAAAKTWlDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVN3WJP3Fj7f92UPVkLY8LGXbIEAIiOsCMgQWaIQkgBhhBASQMWFiApWFBURnEhVxILVCkidiOKgKLhnQYqIWotVXDjuH9yntX167+3t+9f7vOec5/zOec8PgBESJpHmomoAOVKFPDrYH49PSMTJvYACFUjgBCAQ5svCZwXFAADwA3l4fnSwP/wBr28AAgBw1S4kEsfh/4O6UCZXACCRAOAiEucLAZBSAMguVMgUAMgYALBTs2QKAJQAAGx5fEIiAKoNAOz0ST4FANipk9wXANiiHKkIAI0BAJkoRyQCQLsAYFWBUiwCwMIAoKxAIi4EwK4BgFm2MkcCgL0FAHaOWJAPQGAAgJlCLMwAIDgCAEMeE80DIEwDoDDSv+CpX3CFuEgBAMDLlc2XS9IzFLiV0Bp38vDg4iHiwmyxQmEXKRBmCeQinJebIxNI5wNMzgwAABr50cH+OD+Q5+bk4eZm52zv9MWi/mvwbyI+IfHf/ryMAgQAEE7P79pf5eXWA3DHAbB1v2upWwDaVgBo3/ldM9sJoFoK0Hr5i3k4/EAenqFQyDwdHAoLC+0lYqG9MOOLPv8z4W/gi372/EAe/tt68ABxmkCZrcCjg/1xYW52rlKO58sEQjFu9+cj/seFf/2OKdHiNLFcLBWK8ViJuFAiTcd5uVKRRCHJleIS6X8y8R+W/QmTdw0ArIZPwE62B7XLbMB+7gECiw5Y0nYAQH7zLYwaC5EAEGc0Mnn3AACTv/mPQCsBAM2XpOMAALzoGFyolBdMxggAAESggSqwQQcMwRSswA6cwR28wBcCYQZEQAwkwDwQQgbkgBwKoRiWQRlUwDrYBLWwAxqgEZrhELTBMTgN5+ASXIHrcBcGYBiewhi8hgkEQcgIE2EhOogRYo7YIs4IF5mOBCJhSDSSgKQg6YgUUSLFyHKkAqlCapFdSCPyLXIUOY1cQPqQ28ggMor8irxHMZSBslED1AJ1QLmoHxqKxqBz0XQ0D12AlqJr0Rq0Hj2AtqKn0UvodXQAfYqOY4DRMQ5mjNlhXIyHRWCJWBomxxZj5Vg1Vo81Yx1YN3YVG8CeYe8IJAKLgBPsCF6EEMJsgpCQR1hMWEOoJewjtBK6CFcJg4Qxwicik6hPtCV6EvnEeGI6sZBYRqwm7iEeIZ4lXicOE1+TSCQOyZLkTgohJZAySQtJa0jbSC2kU6Q+0hBpnEwm65Btyd7kCLKArCCXkbeQD5BPkvvJw+S3FDrFiOJMCaIkUqSUEko1ZT/lBKWfMkKZoKpRzame1AiqiDqfWkltoHZQL1OHqRM0dZolzZsWQ8ukLaPV0JppZ2n3aC/pdLoJ3YMeRZfQl9Jr6Afp5+mD9HcMDYYNg8dIYigZaxl7GacYtxkvmUymBdOXmchUMNcyG5lnmA+Yb1VYKvYqfBWRyhKVOpVWlX6V56pUVXNVP9V5qgtUq1UPq15WfaZGVbNQ46kJ1Bar1akdVbupNq7OUndSj1DPUV+jvl/9gvpjDbKGhUaghkijVGO3xhmNIRbGMmXxWELWclYD6yxrmE1iW7L57Ex2Bfsbdi97TFNDc6pmrGaRZp3mcc0BDsax4PA52ZxKziHODc57LQMtPy2x1mqtZq1+rTfaetq+2mLtcu0W7eva73VwnUCdLJ31Om0693UJuja6UbqFutt1z+o+02PreekJ9cr1Dund0Uf1bfSj9Rfq79bv0R83MDQINpAZbDE4Y/DMkGPoa5hpuNHwhOGoEctoupHEaKPRSaMnuCbuh2fjNXgXPmasbxxirDTeZdxrPGFiaTLbpMSkxeS+Kc2Ua5pmutG003TMzMgs3KzYrMnsjjnVnGueYb7ZvNv8jYWlRZzFSos2i8eW2pZ8ywWWTZb3rJhWPlZ5VvVW16xJ1lzrLOtt1ldsUBtXmwybOpvLtqitm63Edptt3xTiFI8p0in1U27aMez87ArsmuwG7Tn2YfYl9m32zx3MHBId1jt0O3xydHXMdmxwvOuk4TTDqcSpw+lXZxtnoXOd8zUXpkuQyxKXdpcXU22niqdun3rLleUa7rrStdP1o5u7m9yt2W3U3cw9xX2r+00umxvJXcM970H08PdY4nHM452nm6fC85DnL152Xlle+70eT7OcJp7WMG3I28Rb4L3Le2A6Pj1l+s7pAz7GPgKfep+Hvqa+It89viN+1n6Zfgf8nvs7+sv9j/i/4XnyFvFOBWABwQHlAb2BGoGzA2sDHwSZBKUHNQWNBbsGLww+FUIMCQ1ZH3KTb8AX8hv5YzPcZyya0RXKCJ0VWhv6MMwmTB7WEY6GzwjfEH5vpvlM6cy2CIjgR2yIuB9pGZkX+X0UKSoyqi7qUbRTdHF09yzWrORZ+2e9jvGPqYy5O9tqtnJ2Z6xqbFJsY+ybuIC4qriBeIf4RfGXEnQTJAntieTE2MQ9ieNzAudsmjOc5JpUlnRjruXcorkX5unOy553PFk1WZB8OIWYEpeyP+WDIEJQLxhP5aduTR0T8oSbhU9FvqKNolGxt7hKPJLmnVaV9jjdO31D+miGT0Z1xjMJT1IreZEZkrkj801WRNberM/ZcdktOZSclJyjUg1plrQr1zC3KLdPZisrkw3keeZtyhuTh8r35CP5c/PbFWyFTNGjtFKuUA4WTC+oK3hbGFt4uEi9SFrUM99m/ur5IwuCFny9kLBQuLCz2Lh4WfHgIr9FuxYji1MXdy4xXVK6ZHhp8NJ9y2jLspb9UOJYUlXyannc8o5Sg9KlpUMrglc0lamUycturvRauWMVYZVkVe9ql9VbVn8qF5VfrHCsqK74sEa45uJXTl/VfPV5bdra3kq3yu3rSOuk626s91m/r0q9akHV0IbwDa0b8Y3lG19tSt50oXpq9Y7NtM3KzQM1YTXtW8y2rNvyoTaj9nqdf13LVv2tq7e+2Sba1r/dd3vzDoMdFTve75TsvLUreFdrvUV99W7S7oLdjxpiG7q/5n7duEd3T8Wej3ulewf2Re/ranRvbNyvv7+yCW1SNo0eSDpw5ZuAb9qb7Zp3tXBaKg7CQeXBJ9+mfHvjUOihzsPcw83fmX+39QjrSHkr0jq/dawto22gPaG97+iMo50dXh1Hvrf/fu8x42N1xzWPV56gnSg98fnkgpPjp2Snnp1OPz3Umdx590z8mWtdUV29Z0PPnj8XdO5Mt1/3yfPe549d8Lxw9CL3Ytslt0utPa49R35w/eFIr1tv62X3y+1XPK509E3rO9Hv03/6asDVc9f41y5dn3m978bsG7duJt0cuCW69fh29u0XdwruTNxdeo94r/y+2v3qB/oP6n+0/rFlwG3g+GDAYM/DWQ/vDgmHnv6U/9OH4dJHzEfVI0YjjY+dHx8bDRq98mTOk+GnsqcTz8p+Vv9563Or59/94vtLz1j82PAL+YvPv655qfNy76uprzrHI8cfvM55PfGm/K3O233vuO+638e9H5ko/ED+UPPR+mPHp9BP9z7nfP78L/eE8/sl0p8zAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAADfSURBVHja7Je9CsIwFEZPpbObs1gXVxHfQEfF3c2xSJ/CxRdwcPYpdNBZcHH1QQoun0uGUppqWyEK+eBC/u8JSe4lgSRcqoVjeQAP8NMAEXABnoBq2OYTgKAkDlyBcaa+rbCxFdABdsDaABVLks3yso1LJJ2MJabtnpl3kBTa5odfOMYBMDHlR0H/EmgDc5eXcPazr6DsEuY7phXW3QO9vK+mAI03+7eRMDb0dSz2ucADeIB3MaUsGd2AEbAAujUdDzOpvXI67ks6S0pVX6mko6TI5ifwHxMP4AFcA7wGAMhKBskj91R5AAAAAElFTkSuQmCC)}.tool .saveAs{background-image:url(data:image/png;base64,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)}.tool .undo{background-image:url(data:image/png;base64,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)}.tool .open{background-image:url(data:image/png;base64,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)}.tool .export{background-image:url(data:image/png;base64,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)}.tool .exit{background-image:url(data:image/png;base64,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)}.postilTitle{top:5px;opacity:.6;z-index:5000;padding:10px;background-color:#555;border-radius:5px}.postilTitleDiv{color:#fff;padding-bottom:2px;overflow:hidden;text-overflow:ellipsis;word-break:keep-all;white-space:nowrap;display:flex;font-size:large}#tool-text-attribute-panel .checkbox,.tool-attribute-panel,.tool-attribute-panel .radios label{display:inline-block}.titleText{width:100%;text-align:center}.tool-attribute-panel legend{font-size:14px;margin-bottom:5px;font-weight:700;line-height:1.2em}.btn,.close{line-height:20px}.tool-attribute-panel input{width:80px}.tool-attribute-panel input[type=radio]{width:auto}.tool-attribute-panel .radios input{vertical-align:top;margin-right:5px}#tool-text-attribute-panel input[type=checkbox]{width:auto;vertical-align:top;display:inline-block;float:none;margin-left:5px}.btn,.input-group-addon input,.input-group-addon label{vertical-align:middle}#tool-text-attribute-panel .checkbox{padding-left:0}.tool-panel .wrap{display:none;height:100%}.tool-panel .wrap button:hover{background-color:#1f89de}.tool-panel .shape{display:block}.tool-panel .shape .line{background-image:url(../img/imgedit/line.postil.png)}.tool-panel .shape .curve-closed{background-image:url(../img/imgedit/block.postil.png)}.tool-panel .shape .rect{background-image:url(../img/imgedit/rectangle.postil.png)}.tool-panel .shape .circle{background-image:url(../img/imgedit/circle.postil.png)}.tool-panel .shape .ellipes{background-image:url(../img/imgedit/ellipse.postil.png)}.tool-panel .shape .arrow{background-image:url(../img/imgedit/arrow.postil.png)}.tool-panel .stroke .pen{background-image:url(../img/imgedit/freeLine.postil.png)}.tool-panel .stroke .curve-closed-stroke{background-image:url(../img/imgedit/block.hollow.postil.png)}.tool-panel .stroke .rect-stroke{background-image:url(../img/imgedit/rectangle.hollow.postil.png)}.tool-panel .stroke .circle-stroke{background-image:url(../img/imgedit/circle.hollow.postil.png)}.tool-panel .stroke .ellipes-stroke{background-image:url(../img/imgedit/ellipse.hollow.postil.png)}.tool-panel .stroke .arrow-stroke{background-image:url(../img/imgedit/arrow.hollow.postil.png)}.tool-panel .text .text{background-image:url(../img/imgedit/text.postil.png)}.tool-panel .text .text-stroke{background-image:url(../img/imgedit/text.hollow.postil.png)}#tool-text-attribute-panel .font{font-size:18px}#tool-text-attribute-panel .font option{font-size:24px;font-weight:bolder}#tool-text-attribute-panel .font .serif{font-family:serif}#tool-text-attribute-panel .font .sans-serif{font-family:sans-serif}#tool-text-attribute-panel .font .arial{font-family:Arial}#tool-text-attribute-panel .font .arial-black{font-family:"Arial Black"}#tool-text-attribute-panel .font .terminal{font-family:Terminal}#tool-text-attribute-panel .font .verdana{font-family:Verdana}#tool-text-attribute-panel .font .fangzhengshuti{font-family:"方正舒体"}#tool-text-attribute-panel .font .fangzhengyaoti{font-family:"方正姚体"}#tool-text-attribute-panel .font .heiti{font-family:"黑体"}#tool-text-attribute-panel .font .huawencaiyun{font-family:"华文彩云"}#tool-text-attribute-panel .font .huawenhupo{font-family:"华文琥珀"}#tool-text-attribute-panel .font .huawenxinwei{font-family:"华文新魏"}#tool-text-attribute-panel .font .huawenzhongsong{font-family:"华文中宋"}#tool-text-attribute-panel .font .kaiti{font-family:"楷体_GB2312"}#tool-text-attribute-panel .font .lishu{font-family:"隶书"}#tool-text-attribute-panel .font .songti{font-family:"宋体"}#tool-text-attribute-panel .font .weiruanyahei{font-family:"微软黑体"}#tool-text-attribute-panel .font .youyuan{font-family:"幼圆"}.cl-table td,.modelTree,.search-body,.search-result-body,.tab-body{font-family:roboto,'微软雅黑','Microsoft YaHei'}#tool-text-attribute-panel .text{width:100%}footer p{text-align:center}.alipay img{width:auto;height:1.5em}.modal{position:fixed;top:10%;left:50%;z-index:1050;width:560px;margin-left:-280px;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,.3);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;outline:0;-webkit-box-shadow:0 3px 7px rgba(0,0,0,.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,.3);box-shadow:0 3px 7px rgba(0,0,0,.3);-moz-background-clip:padding-box;background-clip:padding-box}.fade{opacity:0;-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.modal-header{padding:9px 15px;border-bottom:1px solid #eee}.modal-body{position:relative;max-height:400px;padding:15px;overflow-y:auto}.modal-footer{padding:14px 15px 15px;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}/*!* top: -25%; *!*/.modal-backdrop{opacity:.8;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.yj-tool,.yj-tool2{position:absolute;left:10px;z-index:1}button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.btn{display:inline-block;padding:4px 12px;font-size:14px;color:#333;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,.75);cursor:pointer;background-color:#f5f5f5;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border:1px solid #ccc;border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05)}.modal-header .close{margin-top:2px}.close{float:right;font-size:20px;font-weight:700;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.lobibox .tool-attribute-panel label{display:inherit}body,div,html,img,li,ul{margin:0;padding:0}.list-item2 .scene{position:absolute;top:0;width:150px;height:150px}.clearfix:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.yj-tool{top:50%;width:40px;margin-top:-195px}.yj-tool2{top:10px;display:flex;height:42px}.yj-but,.yj-icon{position:relative}.yj-but{height:42px;width:40px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;background-color:rgba(0,0,0,.5);border-color:#767676;color:#000;cursor:pointer;outline:0}.yj-icon{height:24px;width:24px;background-repeat:no-repeat}.history,.restoreModal{z-index:1000;left:60px;width:163px;padding:5px 0;text-align:left;background-color:#fff;font-size:14px;float:left;list-style:none}.yj-group{margin-left:14px;border-radius:4px}.restoreModal{margin:2px 0 0;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.history{margin:2px 0 0 170px;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.reset,.roamModal{border-radius:5px}.history_li{background-color:rgba(0,0,0,.4);text-align:center;cursor:pointer;margin-top:5px}.history_undo{color:#555;font-style:oblique}.history_redo{color:#fff}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:rgba(128,128,128,0)}.input-group-addon:last-child{padding-left:5px}.input-group-addon label{color:#fff}.reset{background:#4DC0FF;padding:9px;border:none;margin-left:5px}.colorModal,.history,.modelPartitionModal,.restoreModal,.roamModal,.sceneColorModal,.transparentModal{position:absolute;bottom:45px;display:none;background-color:rgba(0,0,0,.5)}#postilEdit #toolColorModal{left:175px}.setModal,.toolComponentModal,.toolModelModal,.toolPostilModal,.viewerModal{position:relative;left:5px;border-radius:4px;display:none}.setModal{background-color:rgba(0,0,0,.5)}.sceneColorDiv{margin-left:8px;margin-top:6px;margin-bottom:3px}.roamModal{padding:5px;width:180px;height:90px;margin-left:50px}.modelPartitionModal,.transparentModal{padding:5px 10px;width:180px;height:40px;border-radius:5px}.transparentModal{background-color:rgba(128,128,128,.8);margin-left:190px}.modelPartitionModal{margin-left:305px}.search-input,.sx-table td{padding-left:10px;font-size:12px}.distance-info,.height-info,.modelPartition-info,.transparent-info{margin-left:40px;color:#fff}.add,.subtract{width:10px;font-size:18px;color:#fff;line-height:24px;float:left;margin-left:3px;cursor:pointer}.colorModalDiv{margin-left:5px;margin-top:6px}.distanceRange,.heightRange,.modelPartitionRange,.transparentRange{-webkit-appearance:none;width:129px;border-radius:5px;margin-left:13px}@media all and (-ms-high-contrast:none){.modelPartitionRange,.transparentRange{margin-top:-7px;height:10px}}@-moz-document url-prefix(){.add,.subtract{margin-top:-5px}}.distanceRange,.heightRange:focus,.modelPartitionRange,.transparentRange{outline:0}.distanceRange::-webkit-slider-runnable-track,.heightRange::-webkit-slider-runnable-track,.modelPartitionRange::-webkit-slider-runnable-track,.transparentRange::-webkit-slider-runnable-track{height:8px;border-radius:5px;box-shadow:0 1px 1px #def3f8,inset 0 .125em .125em #0d1112}.distanceRange::-webkit-slider-thumb,.heightRange::-webkit-slider-thumb,.modelPartitionRange::-webkit-slider-thumb,.transparentRange::-webkit-slider-thumb{-webkit-appearance:none;height:12px;width:12px;margin-top:-3px;background:#fff;border-radius:50%;border:.125em solid rgba(205,224,230,.5);box-shadow:0 .125em .125em #3b4547}.distanceRange::-moz-range-track,.heightRange::-moz-range-track,.modelPartitionRange::-moz-range-track,.transparentRange::-moz-range-track{height:8px;border-radius:5px;box-shadow:0 1px 1px #def3f8,inset 0 .125em .125em #0d1112}.distanceRange::-moz-range-thumb,.heightRange::-moz-range-thumb,.modelPartitionRange::-moz-range-thumb,.transparentRange::-moz-range-thumb{appearance:none;height:12px;width:12px;margin-top:-5px;background:#fff;border-radius:50%;border:.125em solid rgba(205,224,230,.5);box-shadow:0 .125em .125em #3b4547}.distanceRange::-moz-range-progress,.heightRange::-moz-range-progress,.modelPartitionRange::-moz-range-progress,.transparentRange::-moz-range-progress{background:#fff;height:6px;border-radius:5px}.distanceRange::-ms-track,.heightRange::-ms-track,.modelPartitionRange::-ms-track,.transparentRange::-ms-track{height:10px;border-radius:5px;margin-top:-5px;border-color:transparent;color:transparent}.distanceRange::-ms-thumb,.heightRange::-ms-thumb,.modelPartitionRange::-ms-thumb,.transparentRange::-ms-thumb{border:.125em solid rgba(205,224,230,.5);height:10px;width:10px;border-radius:50%;background:#fff;box-shadow:0 .125em .125em #3b4547}.distanceRange::-ms-fill-lower,.heightRange::-ms-fill-lower,.modelPartitionRange::-ms-fill-lower,.transparentRange::-ms-fill-lower{height:10px;border-radius:5px;background:#fff}.distanceRange::-ms-fill-upper,.heightRange::-ms-fill-upper,.modelPartitionRange::-ms-fill-upper,.transparentRange::-ms-fill-upper{height:10px;border-radius:5px;background:#fff}.distanceRange:focus::-ms-fill-upper,.heightRange:focus::-ms-fill-upper,.modelPartitionRange:focus::-ms-fill-upper,.transparentRange:focus::-ms-fill-upper{background:#fff}.distanceRangeParent,.heightRangeParent,.modelPartitionRangeParent,.transparentRangeParent{width:150px;float:left}#colorOperatorDiv,.color,.set{border:1px solid #fff;background:#000;width:30px;height:30px;margin-left:-1px;position:relative}.color,.set{top:-2px}.color{display:none}#colorOperatorDiv{top:-1px}.colorModal{border-radius:4px;left:60px}.sceneColorSet{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAACXBIWXMAAAsSAAALEgHS3X78AAAA/klEQVRIie2VPwrCMBTGf0oHB8EODrp18CAewRvoEXRy1MlZcHH1BvYGHqGrOOikjh3dIoFUQmrSRBQU/OBRXt7r+/L+tTUhBJ9GpMXvASugEciZAmvgZvWQmSiZidfR1+KUJLJwL4HcI4u5ek6BoXpnA2Q+mSSum2nyDLnpVw+ovQsTJRIt089WrmMgSeYy6pmkgYELyB7sXA56JvI23RdG+FTlYJbr6vAdAYnDbrd5TtEgYINK02VrvImx0rOKJu+BrXnoS1Ig1RbQG+/aEzcqetEWQlyMmks99uyl18Y3gY5xJvX468r1J/mT/DhJ1bfrDCzUUhY4+PxDHgDubMJuA0rMIzgAAAAASUVORK5CYII=);background-size:contain;border:none;outline:0}.sceneColorSet:hover{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAACXBIWXMAAAsSAAALEgHS3X78AAAA/klEQVRIie2VPwrCMBTGf0oHB8EODrp18CAewRvoEXRy1MlZcHH1BvYGHqGrOOikjh3dIoFUQmrSRBQU/OBRXt7r+/L+tTUhBJ9GpMXvASugEciZAmvgZvWQmSiZidfR1+KUJLJwL4HcI4u5ek6BoXpnA2Q+mSSum2nyDLnpVw+ovQsTJRIt089WrmMgSeYy6pmkgYELyB7sXA56JvI23RdG+FTlYJbr6vAdAYnDbrd5TtEgYINK02VrvImx0rOKJu+BrXnoS1Ig1RbQG+/aEzcqetEWQlyMmks99uyl18Y3gY5xJvX468r1J/mT/DhJ1bfrDCzUUhY4+PxDHgDubMJuA0rMIzgAAAAASUVORK5CYII=);background-size:contain}.fullScreen,.fullScreen:hover{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAACXBIWXMAAAsSAAALEgHS3X78AAABcklEQVRIie2WMU7DQBBFP8iFS7dIHAAqUrpIkZvgSCkofQtK0iEqXEZKQ6QUlLmBnRNAl5SWaNJ9tGI2mPXs2paSjieNlOzOzJ/deMa5IAkA9wAytDkAmALYK3tNRgAeAcTK3j6SDxMxly2AukPA8AngCsCdtnkZCFwDSOU0XdTiux4qct1TwHKQmEEi5p6LASKFxLQxPzzJV/6wJJmT3PGXJ/Hx2Q3JsuG/kxxLu2ADH0i+kYzle+IIFQERVyCR9VhybkIVjh2hVPFJHYGxliskYk/0TjIL+Myl4sTnY5vxrISerpPxL3JykYVnQlvmYn4GdHJXn5QS4+2TTOn4j0aCytMH7mQoG3sm18ZMC3d25RJYeUaFZjn/YkfQcd0V+XIq846KhkXKUC0llypCRyB0gq6rOxJ6uhY9X72WWmJahERmAHIAUcDHEovvTN2Voz5rxxRGPa5qEoinrfIFwK1SQyXWhfm3sgKQKI7F+Uc9gG+HdXPTnJ54VgAAAABJRU5ErkJggg==)}.fullScreenDiv{margin:6px 5px 3px 8px}.fullScreen{border:none}.cancelFullScreen{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAARtJREFUSA3NlksKwjAQhidF9ASewiMIUl0KRQR7Ce+jl+hCRHRrFTyCl9AL+IDGzOKXJA2lj1TMZqZJ838zSSatiE5yT5Km1EYTdBBRKmUb2tDswNmFQsD3YRF4YIvNUrmMz7Jv99d9NgAsnhGtnhkddQhHg4iqggxAN6BErdNVbcrAhlQVxvsGIBmJey+gsU+IAWCqC4Jo6tgcwAWpI4w532OKDmzmQ+22j+bMwIcwNHIZ+C6432eA1Ios9sn1jr0C/5mBHjkXJRcn14/eD79RBmUqvhGgzLXSCOC6VvRbmJepEYAFbMgro5j70XKFhoEiax9FhswvcpK9abENxVqfWwugC8DfDMVN+YY4j7X+0Q9I/VogCu9WaX8AvEp1c0D/KGAAAAAASUVORK5CYII=);height:24px;width:24px;border:none}.cancelFullScreen:hover{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAP9JREFUSA29VYERgyAM1F5X0KE6ivvVSdp56D+YNCfYA4zNHU3A5J/XQMcQwnMYhgfGFbaOIAhXIAvmXYIRJrGHl43f9mB4sGBM+/XuOZloBIAjOO2FoSRxBT8tJFqjQSKYMCc4TUnS1IFgU5GRuBIckESO06/IAgDRKukm0DYVcCJJ7OGzNvUAtRiZAu8D938FVt5R/Os77d/A5Qo8CN5QOnPntEx1bPDG1pQa+OxaEQLJ4QUXTR7UeKmBt4dR7y5iSM43qEHecrQ4ARVJNEeDTgKWAcOSLNtahO5SUNoL0GaMCG4J9D+52AElpMo1bp+pSlBZ15zGc7A2V9UXrB+AB6MTKJ72FwAAAABJRU5ErkJggg==)}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.hide{display:none!important}.show{display:block!important}.sx-table{border-collapse:separate;border-spacing:2px}.cl-table,.ss-table{border-collapse:collapse}.sx-table td{width:145px;height:28px;margin-right:2px;background-color:rgba(0,0,0,.4)}.sx-table .noprop td{background:0 0}.sx-table th{background-color:rgba(255,255,255,.2)}.sx-table .sx-active td{height:3px;background:0 0}.search-body{width:290px;height:688px}.search-input-div{height:30px;display:flex}.search-input{width:250px;background-color:rgba(238,238,238,.8);color:#aaa;border-style:solid;border-width:0}.search-but{position:relative;height:30px;width:40px;background-color:#0068b7;border:none;cursor:pointer;outline:0}.ss-table,.ss-table td{border:1px solid #ededed}.search-icon{height:30px;width:40px;margin-left:-5px;background-image:url(../img/tubiao/search-input.png)}.search-info{font-size:14px;color:#3b3b3b;margin-top:20px}.search-result{margin-top:10px;background-color:rgba(238,238,238,.8)}.search-type-icon{margin-left:10px;margin-right:5px;margin-top:15px;height:30px;width:28px}.search-result-info{display:flex}.ss-table{background-color:rgba(247,247,247,.8);margin-left:5px;width:245px}.ss-table td{font-size:12px;width:250px}.door{background-image:url(img/ifcType/door.png)}.window{background-image:url(./img/ifcType/window.png)}.other{background-image:url(./img/ifcType/other.png)}.pipeline{background-image:url(./img/ifcType/pipeline.png)}.beam{background-image:url(./img/ifcType/beam.png)}.stairs{background-image:url(./img/ifcType/stairs.png)}.wall{background-image:url(./img/ifcType/wall.png)}.equipment{background-image:url(./img/ifcType/equipment.png)}.treeNodeIcon{width:20px!important;height:20px;display:inline-block}.door_small{background-image:url(./img/ifcType/door_small.png)}.window_small{background-image:url(./img/ifcType/window_small.png)}.other_small{background-image:url(./img/ifcType/other_small.png)}.pipeline_small{background-image:url(./img/ifcType/pipeline_small.png)}.beam_small{background-image:url(./img/ifcType/beam_small.png)}.stairs_small{background-image:url(./img/ifcType/stairs_small.png)}.wall_small{background-image:url(./img/ifcType/wall_small.png)}.equipment_small{background-image:url(./img/ifcType/equipment_small.png)}.more-but{position:relative;height:20px;width:40px;left:250px;border:none;cursor:pointer;outline:0;background-color:rgba(238,238,238,.8)}.more-icon-close,.more-icon-open{height:20px;width:40px;margin-left:-6px}.search-key-highlight{color:red}.searching{margin-left:100px}.cl-table{margin-left:20px;margin-right:20px}.cl-table td{border-bottom:1px solid rgba(255,255,255,.3);font-size:12px;width:100px;margin-right:5px}.cl-table tr td:nth-of-type(2){width:135px}.cl-table span{margin-left:10px}.modelTree{width:300px;margin-left:6px}.modelTree-head{height:24px;width:300px;display:flex;margin-left:-5px;z-index:1}.but-tree{background-color:#696969;margin-right:15px;margin-left:5px;color:#fff;height:21px;width:61px;border:none}.modelTree-body{overflow:auto;height:570px}.list-group-item{position:relative;display:flex;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}#blocker,.roamReticle{position:absolute;top:0}.list-group{padding-left:0;margin-bottom:20px}.restore-icon,.restore-icon.active,.restore-icon:hover{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAACXBIWXMAAAsSAAALEgHS3X78AAABjElEQVRIibWWrU5DQRCFP0hFBeImmOIqmmAQFYQgKxBNECBx8AbgIOEhqENgeAMqwQCahNCq4lpBAoYEQQLBDNlkgcNy//YCJ5lkendnzs7O7tlOmRn/jenI/AlwCOxGRblKIqxjXzguGxdbiWITOPjrSrp+9SEKKypK3DazfkriEL28PLWMAlvAPrAB1H+xpbnbdROsdGJmO95CbMVu13JAcGRmTRnvBATbZfqpP+pm9lRwRJWksII0Ek0wzgho+vGTmPuljV8Vv5fRwgkwBzzH9F1JFsU/y4l5iCEg0K6G+JPYRHnQSvQ+vFbM5+7VPDAE+p9fpUFjaXyscOqhcLjIEshb8RcqVNES/04HlGQg/koFEj2d11kkQ/HXKpB0xR98G5G9S8xsJPvqlHWmRC/a/nJ+4NTMannalXgxTG1giq0HWnZZ9j1xK3tJUeBE5jR8pTrvPpiTS4J/BUf2E+6Yu2QhXMVOwUtJfWh7KQkV7lnQpyDVyvzvcnLTBpaAWf/tETgHroC33GjgHapcR66Hz1DGAAAAAElFTkSuQmCC)}.homeViewer-icon{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAARCAYAAAAougcOAAAACXBIWXMAAAsSAAALEgHS3X78AAAA40lEQVQ4jdWV7Q2CMBCGHwn/ZQPZQNwAN3ADGUE3cARHYAQ3kBFgA90AJzhzsSa1tprUauKTNCFHube9LyYiAlACK6AgjhNwAEbv1yLSSBpGESn10O7KgF3k6V2mQON7kQMz8zwAm0iBo8fWAmtgkVtGjWcXKWJTGD9zYyvywMY9UDm20YTDn1zj0BG4YaW8sxIWovYl9k3Z1KGbbD3lHB3OV+FKRpbSWYi/FBl+IaLzawlcvimCqcDaFtLqOpvRUiXqeKU3/rR5e22kNtEUVnSiPzWr3uQ+FPWf8gkaBR2KjwBXaf40RDIABD0AAAAASUVORK5CYII=)}.toolComponent-icon{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAACXBIWXMAAAsSAAALEgHS3X78AAABNklEQVRIidVW0W2DMBB9qfIfNigb1BskI7BByQbZoMkG3SCMkBHoBozQbkAnuOjIWTIXl3MMitQnnQTm2c93nO8MInJE1JONmoggVhBRlzCnYT5PaBPIHl7k+MCcwxpjfOEeDsAmMu7xA+BbjZUAXuW50CK7yCItgO2ESAPgqMb4/cO/vExMXgzakzaysJsrpkWmwpINDtcBwG/CAvs5nnQSknKC1wsvWwSSgjoNF4MXqYwfzJ58/vFtF0nh0VFgkRrAOWHXTrgaWzNhMstKar1jjtMpfIrsow5KhEcnIakM7y8DV3mCiFnfTXtKWckVKSRkZBgXz7uykgquEm8J3HfeTK5ICLOfLPFPGsm00JqQ8G/6SR3pqKNiu0Q/4djrwxqif8qVaDXci27uPdpP+KxYoWwB4AogyPtcRsR9hQAAAABJRU5ErkJggg==)}.toolModel-icon{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAVCAYAAACzK0UYAAAACXBIWXMAAAsSAAALEgHS3X78AAABEUlEQVRIia2VgQ2CMBBFvyxgR2ADHcERGIER2EA2kREYoSMwgiPgBGfOtLFeeu0B/qQx0Fxfe/5+TkSEDRoBtOH3aS5jiHEM9NVCRM5aawX0CSDKDNoLiPL/gFyJaC1AWNMRSAkwi7kiSJtwlROMmU30GqTJGM4B8ADOFWMuAPrk+SGeVQu74JqaxoIxulq7ZgOABESC1tDKLGQyAnIQWf8D2gPQIDmQi5DSZdsKQbigUZ9UaFRH7JdPKi+8fiNeHlEXkvmerPECMMcj3sQxt7RLqx3T/0Ra8WmEtIphpjBXjZWhEiu5jXh5PywB6cKOa2Igt2x31PPQ2sKLq6GYji3feP62s4M4QDkc2ZVrtQrAG53hc7wrqjiSAAAAAElFTkSuQmCC)}.toolPostil-icon{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAZCAYAAAAxFw7TAAAACXBIWXMAAAsSAAALEgHS3X78AAAA+klEQVQ4je2V4Q2CMBCFT8MAjMAGOgIbyAiMwAhs4AqMgBPoCIzQEWCCZx5p44mtQiHGH76kgR65r6+9ktsBSEWkERE+16gTkUoAtNhOVaKcDXaVpWL+weakiUomLI8AMufqJvuV5/ai3wcmgXg14xq1viKGgOcZZnJfEUNbHmYAvVcs5DD6r/laUVqPy15Eiljgabm398BLwGE08OPWQvr/y6NYjFIVhe3B2HfGM/tu7LdnAbjZBmAAZAC6SUPoARwBNJ5GwVih5vXWPaUgkKvThRZdpgFXpR0+t+OWp1AHc980lCAX19ARpoEcPL96AtPJuSfO2GMRQO4tIMzPQ26pCQAAAABJRU5ErkJggg==)}.home-icon,.home-icon:active,.home-icon:hover{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAACXBIWXMAAAsSAAALEgHS3X78AAABFklEQVRIie2WoW4CQRCGP0hFHQqPLOEheAAMKCxoHEnfo6YKg2uCgkdAYykJCQmqqkkrqeH+ZpO7sLnu7S1wFxCdZMXM3M63M3NztxVJlC3V0gmBkD6wA76t9RHbw8SUy7NGkiK5JYr9eTG8kL4HkEgUP3cRpBUACAZlAdaBABuUWbpLSnR2Rrbia/I5oJmkugtyTQYumaUhjYIBSpfODOMYqBQ85CbeG/CcTPxTwQAb1Ekgx5IgJ5HUlDSQ9FlgTyZxzJrpif2p3wMNxznmwNJhbwPdjLMPgWmiPOQk+gP0MnwvwAF4zIlxP/+Tf8jtIBuHf5uz3+X/Ala2wZ6TGrBIbRgB7x5IC3i1dHPJ+PPKl3/vAn4BW0lNokneTh8AAAAASUVORK5CYII=)}.fit-icon,.fit-icon:active,.fit-icon:hover{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAACXBIWXMAAAsSAAALEgHS3X78AAABb0lEQVRIid2WoUsEURDGf8oFm8YzCBeNRqPBYNPm+RcYDNqMHghyIqKCXQ2iBvGCwWY926JFMGgwbDzBYFBG3jJ6j2V33i7HneAHy84+5u03M9+82R0SEfqNCjAJrOo9jQOgZcSwDNQz1l90b5Q8iciV5OPIZWpct8bejojU3F6XyZSyR7/MXVwGKnmsUfuoAnPAqGbZdNE8K/NGIOqi14yXTcPtGe676jAYkkoJ32mtdRTouEySlop/F/DdBGbVngBec/wegWt9902yUkJQv11rZZrhzzVZAOa9Z38i7ADvwCewqyXKh5FmUTR6Kddbb0XqwprC1VSJ9rwRtATEareBD4vE0iT2XuTQ8ex2xswySRY14ouggMUwBqwAXzpA4zIDcl/9IhEZMfx6GpBrTkPVxdQgjf8zhQdC4oR6ME72eqAZzgJTof4jvPUdz/qD8eEObB5OgHNnuHOypd0ynuF9GiDZBu4z1p+Aw8QCvgH+wSyiSyG2lgAAAABJRU5ErkJggg==)}.roam-icon,.roam-icon.active,.roam-icon:hover{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAACXBIWXMAAAsSAAALEgHS3X78AAABbElEQVRIib1Vr0/DQBT+RshSMTExUTmCWVB1WCQCgUT2T5hDIgFXHLIJBsfccOw/gIQQzJINQrIpwE1+5JLX5NH0end04yWX1+vdfd+9n9ciiU3LViD+EYAFAHOzZwB9r1PGkoAx5m/Jfc6GWvJRms83YcmA5Fxsufc99y+B3/bYY4KbAtiX7wjAEsAtgCsvFoepCckF7ZL6uKtuMVXQqxqikyYkjwJi0jarANcWTmRPEkryJQAHAlKWtOLfOITkUA4Zop7FTR2SfZLnJB9IzkjehJCMBCgXoLI8hdSXLYVHkqoZgO+Kdb9K90zhYhyrRCiqveNrSWhbuVNE2TpJIpIXkp6xIlpJ5q2FZKhuX9RBrhLDieFq9V0Ap2oeiZ6ITpoGfqCC/SrBL9ZiZV23ibvOVPuoApqpjvBnd72JvrTUylJ07PJWHUkOYAfAtWV9KnrXReJ6tOoq+0V0z0XS5PltA9gD8A7g07oLwA+ib4/O7UBBFgAAAABJRU5ErkJggg==)}.roamReticle{background:url(./img/roaming/reticle.png);left:0;z-index:1;height:60px;width:60px}#blocker,#instructions{width:100%;height:100%}.multiple-icon,.multiple-icon.active,.multiple-icon:hover{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAACXBIWXMAAAsSAAALEgHS3X78AAABkklEQVRIie1WoU4DQRB9NBUVFQhEZVFU3gdUVCIr+ICTWAQBV/4AEgTycBiSNkGUBNGiQBaFBIe5hBMkxT0yl1kyd7nbbUKKgZdMstmZt7OzM5nZDZJYNxoA9gAsAbAkS9X50AfwVsEVGQOIci7JGeshOngk8XAFc+E2zS0XACa6jgF0AfQAJIFIHCZ6huCkYGUiScyNfdHVITb8QiSNtWcdgFTXDMAAwAeAVPc7AFoa/oGHfwRgV9epngF9asG9nC05eVInbRULMZp7nETGyZaKxWW+JtkmeVzKw1j32oHqapLcJzki+WL4pyQjZ2cJI2MUBw6vEnvJrtX/SuL/nfxRJ1JifS0/W+fPJKcke4Gy7ZC8Uv674T+QPFN9sNVPA04uAk1zpQbZ+qE+h3VyDWBb5VH3BjVTz0ls+IeGX4AdWtJBX3X9ucoNS0gNv9ZJZCaaa9WZduk67OhYEAwNrwiSd57E3QQSfx5I/K2rrqHH6Ltde0o4q+EuSG6Knft3SYLLkKdyHwMf5Imqnkm4GQB8Acvb/DO+HWDmAAAAAElFTkSuQmCC)}.transparent-icon{background-image:url(../img/tubiao/transparent.png)}.hide-icon,.hide-icon:hover{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAACXBIWXMAAAsSAAALEgHS3X78AAABxElEQVRIid1WLU8DQRB9NIRUVFxQJysQlZUVJFTiKElFDUl/AhJHJfIchqSyJIirowmi/IPWlQRBUeBagqioeGRhFobNXvcI1DDJ5Ho7u/PmzcdtN0hi3VJYO4ICaQDYXxsKyW1+yIJkQjI2KfxLtTVpA+gK7guACoBnAEUANQB1ABGAMoCx2AYApnmZWE35JYmsVblaLkmWQ6z1i0nTUFwuBagkQCaAJ5IP8nRlRLKZB8QXdZJxMBbbLM9+DaAjvJFGWAaawayfCBMr5veOCxI70Rwr4IVarwZyr2vac0GaythxDibKlgZAdLpNcJEGuRDDledgw2GZBhi1FPsByaIFuZXFludQO6OBVwEl7r6CDJaRPc8YzTPG6zRjPZLBNvIog/vO5EhQXyVyHZXJ63UGm9TpugrJiapJTddki+RcHe7bXDq1sS0+VfOhm+FM+Tj3zUns9PpQHLtgVncV6Ej2lmRmeu5cuYOlGVHom7mpe7po7Oxt5Pms2Br0M2oQklFeEKt1yev9CsczqUnHk7pv/vLc8aYtq3LHxNKWd6J6z0TsRg4B9H33yW9Vfx262tdmiMYPxERuGBzIrfkp/+QvEYA3g0lqeZ1zG1QAAAAASUVORK5CYII=)}.insulate-icon,.insulate-icon:hover{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAACXBIWXMAAAsSAAALEgHS3X78AAABsklEQVRIid2Wr0tDURTHP8qCzed/sLhgWDQYFgyLC4JG40DEgUHjok2bUZvCyoLBNpsLwgaGBYOLNicKIgpfuW93cnf33tvuwOKBy2P3/Pie873n3LsFSfy1LP45QiDIEXAL7ASjGLpmXI8aym2AT7xyAfnsAWtAM7QQc/BV4Hke5wzJAxHQjU0kfVgaGpIKGWWvSipJWsqwMf7Hkl5s3GLcvZqU05RAT9aymQKwkxDLJDXWXe/2uw+0gJLHxj3QB9refhk4B85S2XNQTSZ9L5P6lM6pe/ZdS9FYJXgbkaXLlVoKQM2zu7P+fswJkFGATUk9R2fOI+/oG46uZyuKHP1MIEmZlhKCdFKqHPNJu1bM7Jw4v19/e34oA/st2vmKMqfGQd2QVJF0KenLoWI7oaXXJbUcXzMXB45dKl1tj56ux3N+NFzzdNebZ2iy2k3g+cHqq85eTlJZ0rlzc0ycozvJsu0bpRzmqNsqoRPvglxMGbxCAl3+MgkMfBBzC28Bn8A18J3ZJbPJEnAIrAD1uBMDHp+OzXJaNRMr5Pk1M7EMVEJLC3kZr+zQ3YSC/JO/RMAPeFlwdwtayEsAAAAASUVORK5CYII=)}.sectioning-icon,.sectioning-icon.active,.sectioning-icon:hover{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAACXBIWXMAAAsSAAALEgHS3X78AAABkElEQVRIia2WIU8DQRCFH6TiBKISWYFAkFCJPIFAnqxEQEJCSPoTkJAKkDhwyIKirhBEFQkOEkTPFcclCBIQj2wyB9tltzt39CWbbHZn5tudvczcAkkotARgC8CKmD4AuAPwqXGGgUTGIcmCf5WTXFX4ByEJyQ7JkRX7neQ5yRuSX7L2RvKEZEqyUQXSJDlwDm5usmHZZJ6bnWkhmaTB1oWAXds2ybFjeyvrQUjPMjbp6JPcjOR7Wd5s5MD2QxBbl5oHdYYNGvsgqSfHTyR3IoHX5GOYePxVkFK57LuALskPy87Mr+pCSnUtx1PP/p4TpxbEaChpLPUi8JYnzg+koSoLv0qt+TWAbQBFzGmxIqTUMYBMA/gPZFDFuC6kkuYNSXyLJSSfA6AF4EjmU29lQ1SPGFATQB/Auu/Qdrp2AbxWDG665RDABEBb1p4BHExZKcqFT5lTQigNzFd+gp2xE4G4PacIAWZBIKWiF7nVvdwqqdPj3XbsFkQDtgvmzFGlKZkqa9L0KKdX+2r/u+oLwDdWexE3FboX4QAAAABJRU5ErkJggg==)}.modelPartition-icon,.modelPartition-icon:hover{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAYCAYAAAAPtVbGAAAACXBIWXMAAAsSAAALEgHS3X78AAAA6klEQVRIicVW2w2DQAxzq/6XERiBETpCR+kIjNBRYANGYBSYwNVJuRZQAjletXR8AHmZOAEkPacg2fCHRu657D0vlbRRbg2ST7K30C5VZT14kewcASI6sXEF8WZvoREfZpBnYvbuqsIlI1nt4HyKSnzjEiIDuOMY9ADy60HORwhBcgD1Ab5r8d2d9uFPbeFTxBjoeu8wVkqPTjQjC8MBWYhtxFcnUGjRBp5n1E+DRBqzm9J6mZwhWgCP1c08M1Zcu2KG0hFdczpZ2hUWRat0olWltflmncSqtESSlpanqlRK//8jkaoT/ZD4AJMuzi9V3ET+AAAAAElFTkSuQmCC)}.wireframe-icon,.wireframe-icon:hover{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAACXBIWXMAAAsSAAALEgHS3X78AAABZElEQVRIibWVsS8EQRTGf+QKheLKLRQKxUV1lWgkRxRatUahUKI5pVYUIkp/gEZBNFRIJEQlUSAUl1AoScghkieTfBNj18btZedLJvPm25n5Zt57s6/HzAAmgCWgn+5xD6wBt5kdnIiZnVk5WNd+v1pFWon6VeCg4F3c2m3Z1b8mVFLjG+C4oMjgfxN6C25YBPP+ZjFFmsA1UI8pguJVT8ekTOwCNeAipsiiN2K7K7rIFnAEjMR016Te0HBMkT2XWcBpTJEFb8SMiUvfBsG/6yv9oQCSnKn7wBAw40UeRTTVusVzsM4f/NO766QkFx0G9jQwDuz4ytgHTOXVgw7RyisTXqRszKo5zOWJVJXj6IStFB9yNQXf36Khl+7wAgxk6rFaYmZtVf2rgN8U19Ycx92JW9Z4ReMHMxt1XN47eQI2ZL8G/Jv6D+Bdts8iP77Uax8DzjuJiXONS8si7sogVuB/AHwDx2P3UaeCjqgAAAAASUVORK5CYII=)}.color-icon,.color-icon:hover{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAACXBIWXMAAAsSAAALEgHS3X78AAABYElEQVRIia1UoU4DQRScVp0g4WRlZS0O0Q9AIiAp7v4ACQ4+gIRK5KEQiCJwmP5B6+gfgGwDCQIxZJMtvLzu29s9bpIT93ZeJvve7PRIIoIBgAsAGwA3AD5jZBNOJPJd8Q/TBq75NREOSX55mW8vNOha5Ji7WOcKNREWARHmjs46GCmBGckTkm9qdHv/EZEClaiXJJe5NwrtQAqcB5oKko85ZogtuYo0FupGUTNYI5oljKEUO4qOzlpyqkXHATPs9LpYeQAw8YlwD6DODI3S9+z7/42v/cKJvAIYtcokGz150gdQdCyw1IV+xwJu3AchkeeOBKYAquBJwPNtUHsnubc11w6zPJ+DrcBQ9Fxaj3HcQuhW9L+I+gfJIyu7dADGUIu+yuANrRROGd1C9cwN3rU7D1l4DeAUwLvhIvcOzlRtZXBXW3elBqCDHFEytykAJz7GHe4yuE86IDPeWwsA+AGkWrF1Y70BfAAAAABJRU5ErkJggg==)}.set-icon,.set-icon:hover{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAACXBIWXMAAAsSAAALEgHS3X78AAAB10lEQVRIibVWr0tDURT+FMPCwGEaaJhgGGjYH2AwCJrEYLDaFhTWNC4urhksgsUmpg0Et7aiuGCwOUWYbQuGtU+ungdnZ/e+H4gfXHj3nV/3nvOd894cSfw35lP4LwBoAnhV6yLTudxNElaNfqSx/VlJCiWSw0CQFsl81iAFcarf3QQCRGga/S3xEwzSE8M+yQbJQUKACF2SdZJt2Y9JlnWQiF0NAKeBsnUB9AE8AvgAUASwDuAAQDlgcwngSBd+LeaU9YR8X8bYlnS6VgNKLmULCUHyQgAfirYmTaP0lIWinvpdhwqvT3TucdQVmXNYMTLbS8VQkKpSOjZO2sZJy8iLSmZpPTVWJur5y7Blx+wtqz7V89hSLTS7cmZ/a/YvZl8I+PmFXClH8k5d+cKTjiuSHUnVppGfKduRbcaIhmOT81EGZpU89B3amiwDWPRcvyPdHQdXm55H7uwqOl35QDNR+mVm4MmqxEzokbaLDOoxgcZCy7JKTyNGnzK9ZwakY9MVgA1hzrM873qYpuHo2habFQDbQucTAA+WXaFVTTjxYRpyJP1IOAIMPMRweJPCTzyyKST9SLh01AKy/TQBfpCyF+x3Y6qwf02Xxh6AJXlxD+A9lRWAb2GFKlgBFzpaAAAAAElFTkSuQmCC)}.modelTree-icon{background-image:url(../img/tubiao/modelTree.png)}.attribute-icon,.attribute-icon.active,.attribute-icon:hover{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAZCAYAAAArK+5dAAAACXBIWXMAAAsSAAALEgHS3X78AAAB6klEQVRIia2WoU9cQRDGf70gEE0gNUVUXALiTJMTFVT16s71/gHCSRw4bFEgSSoraFOJ6DlkjwRx8kRFEYSraKhp7lDXpCRDBublhu2+XR5hksnbffvNfDO7s/PeExGhRFaA18BL4Bnw1MGmwC9gCJwAv8ucoAQR3Zdq0heRxZivMIMOsA2s2lwj6wE/gZHNl4DnhmkDi4b9DqxZVtEMOkHMvbKonNZFZBjYdT3Gg7850NeM41A/BST1kGDPLR6JyFJFAtUPzscXT9BwC/2EAyVt+egCnReRUZiFLmzai4vMnn803DSBaYrI2HC6bdRcxfSBSWk9wx97niYwWkGfbbyuFVazssPKMCV7wFuglcH13Lg5B7ywyVnGcGJZ5mTg1luawZxNrjKGXSPYz+D++kntHhEV8sZ0s4LNDUGx98tVDBPSdktDJfhhk1ePRLBhz0s9cCU4thdaHc2E4ch0kMDoOb2z8e1Z2eUqZJK4qTmtOz/jAluz8tsx1gWr4/kHbM2WG8/ugsz6iO+mhxUaXsM+UP9cy2nG2rVveoV0Ms63Avx/WxxrVpPAqGeOGjLb627kQ3MRO79YVHrou64r5uRcRA5cAFkCr+8jGRWivX8jd0ap3xYvej/q9tSWrPfh7se9RO5L8DABrgE31vyEV8bhWQAAAABJRU5ErkJggg==)}.modelCompares-icon{background-image:url(data:image/png;base64,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)}.modelCompares-icon.active,.modelCompares-icon:hover{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAABAVJREFUWAm1l1lIVGEUx2e01GxfoCKiDKIisocWe1IIWiDakyyigh4iaLGHiOitt57qIWghKhGCNjMIoQ0NnIqCClugnQrKQkHRIqOafv/r/S7f3GWcoenAb875zvm2e77l3onFcizJZLIAlsE5eA6lOR4i2B2DxKEcjkM72NJNYUWwVQ48dFwKB+EDSH5BI+yAr2DkD8b+HAwZi9HRRNgHT0HyA67CFhhlBsH+CH45aeJZaXoZBdugGfQ0XXAeqmBwWGf4wybwIqxuWh8dTYGf0AanYSkUwdB0DYlnNIG8dJ24sXb0YhgD1TAC6kATugNzsP+fMMBAWAf1oPX2i5bkDIy1Z0E5owzYbTybxkrxKtA6fwcj2tmnQEvil0avAwyCGU2gn2lEgwLshbAWloPZXG+xr0A9JOLx+G/qVmH3B1syWU67vmP3o7MFWOpwJQx3vLHYI7QGrGfAFtf3X5QycM3tuQltBv3g+hzFJLXxlkGtMmDH/tXWBOLQTcfz7c4YVJtqBayGClDdsxA1gT/EbJlHoRjUzxRYAhMgVRhI0mW82LsgAdrdftE+0QazN2YP5cMw2vQRpalT6I/pJZLEqQw4m45iJ+Uh/oqUVa+IejoB37EHwHuoxPcArYlpYypb5TAOlN3PkIBb1OtBpwqNJHYGOntdzu9Lfo9CJYw0LbGVgdegy0kD58N2aIUo0VtyDzhZNH2pscSewDHKm2G8V8lnEPsMJXKjR8ANyFTuUlH7olfcVt4EjF+amJZoBuj1egmcs4/e4MYLsXUdp5OwrDyhQe8947b0JkBZ7/idUAe6721JSR+BQ3Ywwj6AX/ilxnlY12tPwN4D/kbeBAiUQNiV7G9zwM3WbgL2yZI907uKndmE/+jcv4DHYN8B6ylrSZrhCETJMwU4AcqWTtgJyJcLNoZtwptU1M7fCnNBxy0g+JtAUhsIpnFQfzXo7pC0BO6BqLZULrTPMeU31J0EHZBydUf1Yfl1I+qDpjOwBHSswDSXqZatNS9mEj/xSZwTgR7mIl+20j9sCTLdhPeYkKQDykH/BzLlCHUlLwMZyOIRtPnKQBlrgOVk5xZaDyXfSNkRMsj1Nwf2AI3vE/wGX1xaLbuBQfRO0CCzUc47QGVE9/w64peJVWMfkrMPWRRYgj4apIQZSLejLfpjsgmqbWeE3aTOwjKgO17p00eIvpCkjb2XJ9QnWQX6NlovI2VsPBhRhh7CLOMI0W34yujjbSADdNrnJqTOK3A+39DT4R1kKnqRzfUm5bbK6iqmjV7H10FfPHoI/XOqAWUnSnT1XgB9J3gStgTviZovYq+ia4whbbr/X1HWDXkHNuL7oTj+yag1YD5I8rA/QQIuUs+5lrE9+Qt4jOP+cyMcOAAAAABJRU5ErkJggg==)}.measurement-icon,.measurement-icon.active,.measurement-icon:hover{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAACXBIWXMAAAsSAAALEgHS3X78AAABcElEQVRIia2WsUoDQRCGfyFIihSWKX0B4R7AwtLSQlCsfAN9hJSWdoKN6S0MpNAuhQ9gOsuUZ6WBFFek+GVhDiaTvb3JbQYWdudm97v9Z4a7A5LItBMAVwAGAH4APAP43TgyQDLGEcmSm7YkWegzcwCnClCRfCG5UuvLXIi9wUT898oXQMddIQEw57aNSPbNszAf5EgU7I3kVOalxATQg4q5yZFooQ49k+eQpC9V3Lnn8J5orQF/JNe2iiTZlcSsZN+hB2KTeSFvfW3iCgWg7HNVl5XouyHOSjQXGVshtg/q+ZdDor6O8dygkjetfWOPRG0Q2wdNEg1TEqUgWqK1zGNVFACfKYmaIDbJj+KzAJvkqEQxiO3kYK+RDbEk97yQmUryRIFcfeCFLGTjk6zHplSTfeCFvMvmUjp6pz7wQgqTj7oXbo3fLVFTddkDR2a9k0SpPrnjtnWSKAXZm0RtkDDCR+hDgJ1vUI99/HelDcA/1xBozHuSPa8AAAAASUVORK5CYII=)}.search-tool-icon{background-image:url(../img/tubiao/search.png)}.label-icon,.label-icon.active,.label-icon:hover{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAACXBIWXMAAAsSAAALEgHS3X78AAABEklEQVRIie2WsYoCQQyGPw8Ryyt8BEELQbtrLCwtbe0UfABLfQM7fQQ7WxvBTq+78h7B7ix9ACESiJhd3F139bDZHwIzmcl8k0yRKYgI/62iO78CjIDaE8wj8A1sA17NxGwur1PLnRvIpOHGywxZVIG2jVvA73XBQ/x4mAEycJCAPjIcllo5JIfkkBzyRsgC2Jv10kCKD+zpGKDpfF/A1PyJistEe8IK2BngDByAE1AG5rbWtXm0XAfbub44udMjx7bvM7RXdRKRmZsPfGeMgngdRKTngwy0j2nWAUhcubQ0Y6AOrENrWjJ9qz7wk/gojrhyN1mHbp5kHRH5c/HdqHJVrQT6HqWUEDX9oWws/uYX4QJtecfG8Br19QAAAABJRU5ErkJggg==)}.treeview .list-group-item{background-color:rgba(158,158,158,0)}#blocker{background-color:rgba(0,0,0,.5)}#instructions{display:-webkit-box;display:-moz-box;display:box;-webkit-box-orient:horizontal;-moz-box-orient:horizontal;box-orient:horizontal;-webkit-box-pack:center;-moz-box-pack:center;box-pack:center;-webkit-box-align:center;-moz-box-align:center;box-align:center;color:#fff;text-align:center;cursor:pointer}.snapshot-node{margin-bottom:30px}.snapshot-icon,.snapshot-icon.active,.snapshot-icon:hover{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAACXBIWXMAAAsSAAALEgHS3X78AAABqElEQVRIib2WMUsDQRCFPyVICsEUFhEsUlrGyiCCKRQtBLW3UPAHxMpCsBERKyMICiLmB1hYCFooJmARIWAKCwuLlJZXBEw3sjIr53mXDUnOB8tmZy777r2ZXW5ARIgbg7EzAIk2uSSwA8wAmUCuCbwDF8CNk8XYFTKSIlIXNz5FJBuxx8+IShQ6ILDwXESm8MPAktqTBqaAOcDET4B94CPEyhxwCkwALeAKeNC8ef7Ob9duxBuuu2wQkYwqCUPRr+QWWARKQEW5a8BrSJOMRqjKqiLzewFY0dwkUDdMZRFptHnblIiUtMgWBYfCF30ub9a2hRsRzWdq9AaMBOJHgKfqw+D5Y67DuOcjuAfOgLKuL4G84//faHcY0a5DazXviz8qwbKPNBIuJWmdi4F4VedUB0KcJE2dc4H4uM6tTkhcdtXUlm0tZlXXa5p/7gfJoaow/X8QyF3rcMJll7kaxoDjgDVbwGqwVbtVgm5U0NEVLMkssKlnoRektGa/GiXhu4vOeyQIQx2tyVMMmxts2JqZW3gImO4zgWdVWJI+7/8X//K1Ej8J8AVvtZvM9OSwdgAAAABJRU5ErkJggg==)}.but-new-create,.snapshot-play{width:300px;height:32px;line-height:32px;z-index:1;background:#4DC0FF;border:none;border-radius:4px}.snapshot{margin-top:30px}.snapshot-body{height:550px;overflow:auto}.snapshot-node-name{width:90%;display:inline-block}.snapshot-content .snapshot-node-header{padding:0 10px;color:#FFF;background-color:#666;height:28px;font-size:12px;line-height:28px}.snapshot-content .snapshot-node-footer{display:flex;justify-content:space-between;align-items:center;color:#FFF;background-color:#666;padding:0 10px;font-size:12px;height:36px;line-height:36px;margin-top:-4px}.snapshot-node-delete{float:right;background-color:transparent;cursor:pointer;border:none;transition:all .3s}.snapshot-node-button-update{display:inline-block;height:20px;font-size:12px;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-moz-user-select:none;user-select:none;background-image:none;border:1px solid #4DC0FF;border-radius:4px;color:#4DC0FF;background-color:rgba(213,214,214,0)}.group-node-com-update,.snapshot-node-button,.snapshot-node-button-update{text-align:center;vertical-align:middle;-webkit-user-select:none;-ms-user-select:none;line-height:1.42857143;white-space:nowrap}.markWindow .lobibox-body{overflow:hidden}.mark{max-height:780px}.mark,.updateMark{font-family:MicrosoftYaHei;color:#FFF}.mark .show-pic-list,.mark .showColorModal,.updateMark .show-pic-list,.updateMark .showColorModal{background-color:rgba(0,0,0,0)!important}.mark .size::-webkit-input-placeholder,.updateMark .size::-webkit-input-placeholder{color:#EEE}.mark .size:-moz-placeholder,.updateMark .size:-moz-placeholder{color:#EEE}.mark .size::-moz-placeholder,.updateMark .size::-moz-placeholder{color:#EEE}.mark .size:-ms-input-placeholder,.updateMark .size:-ms-input-placeholder{color:#EEE}.mark input,.mark select,.updateMark input{width:214px;height:28px;opacity:.8;background:rgba(0,0,0,.4);color:#FFF;border:none;padding:5px}.mark select{border:0;appearance:none;-moz-appearance:none;-webkit-appearance:none;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAh9JREFUSA21lb0uRUEUhffxEzo3cXkJDyAhUdCT0CkkCk+l0yv0KBQSUXsJf6EgRHHsb86ssc09VyjsZO6eWbPW2rPnnJzbtG07aV20nhofyhkuKeJxLoIw5YRP5d0Iqghbf5nDJb5pJhyQOVlDZAnIRB/+o14d1GJEimgAphOSNRdOJoqeAjVJhokZfuAp+jTsCS/ceEV9YhUja8ATPmLoe8ISTx2wiBuax5wE/IRQISBx47xRBxAVEPtCZjWXdY0VvR6yTJutCzvx3cHijO0cLtt9YX6dUFwVtIMrW7h9t2PnPp2s2WbWJB4dKHSSQdva6u2bne1f24I2PcdTFvNdzJ2LxjkDHxgzEj8WSBtzU7btkxvfXXp8tVNO52QFnBJ7lzb/grlz0dC1byZjz3DbJn8qABNARvj8YecSzk3b+tGKPSDwQYxwFmdtw6/0jj0f4lnsQEUMMwSciiIU806GWcydD+sDBHOnpSIUauiAIiwUpbp3MmI0M2lNuvN8LaG7ET1ALCDjWCydNhoioiu6G3Mt3/S9z6DzwKqL9BrmhwmCeT45rzGGHK7ODnUd/Or/wF/H4Uv3rhtvWn7oyST/1EUSXHcgQbyu387j1RQNDzhWZq61ikVh31x8abVOen0qWEQxJIUEwuAJ0xxur15f0z6xCihHg9p4rD5eUTSSQCcla8ATrkLjirfqAJHIcS5MBhjHUCEwceP8//8PPgE7CQFG2pHOlwAAAABJRU5ErkJggg==) 180px center no-repeat rgba(0,0,0,.4);background-size:24px;outline:0}.mark button{width:147px;height:32px;background:#4DC0FF;border:none;border-radius:4px;font-size:14px;color:#000;text-align:center;line-height:32px;outline:0}.mark button:hover{cursor:pointer}.mark table,.updateMark table{font-size:12px;table-layout:fixed}.mark tr,.updataMark tr{margin-top:8px}.mark .first-floor table tr td:first-child,.second-floor table tr td:first-child,.updateMark table tr td:first-child{width:92px;height:28px;line-height:28px;vertical-align:top}.mark .third-floor{padding:15px 0}.mark .forth-floor .tables{border-top:1px solid #FFF;padding:0;height:300px;overflow-y:auto;overflow-x:hidden}.mark .forth-floor .tables::-webkit-scrollbar{width:5px}.mark .forth-floor .tables::-webkit-scrollbar-thumb{border-radius:5px;-webkit-box-shadow:inset 0 0 5px rgba(0,0,0,.2);background:#535353}.mark .forth-floor .tables::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 1px transparent;border-radius:5px;background:#ccc}.mark .forth-floor table{table-layout:fixed;margin:10px 0;width:324px}.mark .forth-floor thead td{background:rgba(255,255,255,.2);font-size:12px;height:24px}.mark .forth-floor table td{height:20px}.mark .forth-floor .id,.markTitle{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mark .forth-floor .id,.markTitle:hover{cursor:pointer}.img,.mark .forth-floor .id,.markTitle{background:rgba(0,0,0,.2);margin:5px 1px}.mark .forth-floor button{color:#000;width:48px;height:20px;font-size:12px;background:#4DC0FF;border:none;border-radius:4px;line-height:20px;margin:0 1px}.mark .second-floor .picture .file-choose,.updateMark .picture .file-choose{width:40px;height:28px;display:inline-block;text-align:center;line-height:28px;background:rgba(0,0,0,.2);border:1px solid #FFF;float:right}.mark .second-floor .picture .file-choose input,.updateMark .picture .file-choose input{display:none}.mark .second-floor .picture .chosed-pic,.updateMark .picture .chosed-pic{background:rgba(0,0,0,.2);width:214px;height:28px;display:inline-block}.mark .second-floor .chosed-pic,.updateMark .chosed-pic{position:relative}.mark .second-floor .chosed-pic>img,.mark .second-floor .pic-list img,.updateMark .chosed-pic>img,.updateMark .pic-list img{width:22px;height:22px;position:absolute;left:5px;top:3px}.mark .second-floor .chosed-pic button,.updateMark .chosed-pic button{float:right;right:5px}.mark .second-floor .pic-list,.updateMark .pic-list{width:214px;height:100px;list-style:none;overflow-y:auto}.mark .second-floor .pic-list li,.updateMark .pic-list li{position:relative;width:214px;height:28px;background:rgba(0,0,0,.2);border-bottom:1px solid #999}.markColorModal{position:absolute;right:356px;top:60px;display:none;background-color:rgba(0,0,0,.5)}.postil-node{margin-bottom:30px}.postil-body{height:580px;overflow:auto}.postil-icon,.postil-icon.active,.postil-icon:hover{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAZCAYAAAArK+5dAAAACXBIWXMAAAsSAAALEgHS3X78AAABaUlEQVRIibWWr04EMRDGf5A1JAjkORCIk/cACCyKNQgEYe8NuAcgQFAocEh2PQmgwIFAIDfBIBDHG5xAQEIypJuyaZq2u9s9vqTZdtJ+s9/M9M+CiPCfSIAhcAmsdfCzBzw77CmwD4yAF+AEETmX7siUcqulDpZSKVjR3qdA3uLvv4Frh/3UYXtLjMG0khSPT2tlAWSLPQhtnBnjUpGrTh8HKqGvwI1O6i2wBYyBnXqWiFzphDw6EudrroSOXHNjFKS6rG2suyYnLmMAua5zG4WnsjopSAPkmW9RWwW+sFwAE4f9Xp8Qd22SnHv2eR4oghpNIfKFpQyFxUTIwdATFlXvu23IacjBAzCwbOOW51UNn4JNYNWyHXQlJ6Bg2+h/6Hg/dSUnoOBLfyf6IooiDzk4BJZ0nfeCL0Q/uvWG6UCF4ngepCaUg5nh4GjO/IXa1gMRmUVc/E2ojpK/d9EysOHYWLF4r541wC9b0Ix8m5LSJgAAAABJRU5ErkJggg==)}.postil-node-name{width:90%;display:inline-block}.postil-content .postil-node-header{color:#FFF;background-color:#666;padding:0 10px;height:28px;font-size:12px;line-height:28px}.postil-content .postil-node-footer{display:flex;justify-content:flex-end;color:#eee;background-color:#666;padding:5px 10px;height:30px;margin-top:-4px}.postil-node-delete{float:right;background-color:transparent;cursor:pointer;border:none;outline:0;-webkit-transition:all .3s;-o-transition:all .3s;transition:all .3s}.postil-node-button,.postil-node-button-edit,.postil-node-button-update{display:inline-block;margin-bottom:0;font-size:12px;height:20px;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-moz-user-select:none;user-select:none;background-image:none;border:1px solid #4DC0FF;border-radius:4px;background-color:rgba(213,214,214,0);color:#4DC0FF}.collision,.gravity,.roamOnOff{display:none}.group-node-com-update,.postil-node-button,.postil-node-button-edit,.postil-node-button-update{text-align:center;vertical-align:middle;-webkit-user-select:none;-ms-user-select:none;line-height:1.42857143;white-space:nowrap}.roam{width:40%;height:40%;text-align:center;font-weight:600;position:relative;left:30%;top:20%}.roam .first-floor,.roam .second-floor{width:100%;height:45%;margin-bottom:5%;padding:5%;border:2px solid #FFF}.first-floor div img{float:left;width:30%;height:90%;margin:0 10%;opacity:.6}.direct,.second-floor .height,.speed{float:left;width:33.3%;height:100%}.roam .second-floor img{width:40%;height:40%;margin-top:10%;opacity:.6}.second-floor .left{margin-left:8%;margin-right:1%}.second-floor .right{margin-left:1%;margin-right:8%}.second-floor .center{margin-left:4%;margin-right:4%}.roamOnOff{background-color:rgba(0,0,0,.5);border-radius:5px;padding:5px;width:140px;height:80px;margin-left:50px;position:absolute;left:0;bottom:45px}.roamOnOff span{color:#fff;font-size:14px;font-weight:400}.collisionControl,.gravityControl{text-align:center;margin-top:10px;margin-bottom:10px}.roamOnOff .choose-label{box-shadow:#ccc 0 0 0 1px;width:40px;height:20px;display:inline-block;border-radius:20px;position:relative;background-color:#bdbdbd;overflow:hidden}.roamOnOff .choose-label:before{content:'';position:absolute;left:0;width:20px;height:20px;display:inline-block;border-radius:20px;background-color:#fff;z-index:20;-webkit-transition:all .5s;transition:all .5s}.collision:checked+label.choose-label:before,.gravity:checked+label.choose-label:before{left:20px}.collision:checked+label.choose-label,.gravity:checked+label.choose-label{background-color:#51ccee}.pathRoam{font-family:MicrosoftYaHei;color:#FFF}.pathRoam .path-roaming{padding:13px}.pathRoam button{height:32px;background:#4DC0FF;border:none;border-radius:4px;font-size:14px;text-align:center;line-height:32px;cursor:pointer;color:#000}.pathRoam .viewList{padding:12px}.pathRoam .pathList button,.pathRoam .viewList button{height:20px;width:68px;font-size:12px;line-height:17px}.pathRoam .saveBtns button{width:138px;margin:5px;font-size:14px}.pathRoam .viewList input{width:214px;height:28px;opacity:.8;background:rgba(0,0,0,.2);color:#FFF;border:none;padding:5px}.pathRoam table{font-size:12px;table-layout:fixed}.pathRoam tr{margin-top:9px}.pathRoam table tr td:first-child{width:64px;height:24px;line-height:24px;vertical-align:top}.pathRoam .lobibox-body .third-floor{margin-top:10px;border-top:1px solid #FFF;padding:10px 0}.pathRoam .pathList tr td:first-child{width:148px;height:20px;display:block;line-height:20px;overflow:hidden;background:rgba(0,0,0,.2);margin:1px}.pathRoam .pathList thead td{background:rgba(255,255,255,.2);font-size:12px;height:24px}.pathRoam .second-floor .viewList{padding:10px 0 0;max-height:270px;overflow-y:auto;overflow-x:hidden}.pathRoam .second-floor .viewList::-webkit-scrollbar{width:5px}.pathRoam .second-floor .viewList::-webkit-scrollbar-thumb{border-radius:5px;-webkit-box-shadow:inset 0 0 5px rgba(0,0,0,.2);background:#535353}.pathRoam .second-floor .viewList::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 1px transparent;border-radius:5px;background:#ccc}.pathRoam .third-floor div{padding:10px 0 0;max-height:270px;overflow-y:auto;overflow-x:hidden}.pathRoam .third-floor div::-webkit-scrollbar{width:5px}.pathRoam .third-floor div::-webkit-scrollbar-thumb{border-radius:5px;-webkit-box-shadow:inset 0 0 5px rgba(0,0,0,.2);background:#535353}.pathRoam .third-floor div::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 1px transparent;border-radius:5px;background:#ccc}.yj-panel,.yj-resize{height:8px;width:8px;position:absolute;bottom:0;right:0;z-index:9}.yj-panel,.yj-resize:after{display:block;float:right;content:'';width:8px;height:8px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAABGdBTUEAALGPC/xhBQAAAF5JREFUCB1jYEADq1at4r927dpOJmRxkKC+vv5ORkbGG3BxkODNmzdPXL9+fSJWwf///zNfvnx5CTNM+79//05qaGgUAXUtBeoQYARZBDJTU1MzH6SSiYlJaMaMGYEA7E42FFiHq5AAAAAASUVORK5CYII=) no-repeat;cursor:nw-resize}.yj-setting .yj-input-range{margin:0;background:linear-gradient(to right,#4a90e2 0,#4a90e2 19.6429%,#999 19.6429%,#999 100%)}input[type=range]{-webkit-appearance:none;width:100%;border-radius:6px;border:none}input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;height:14px;width:14px;margin-top:-5px;background:#fff;border-radius:10px}input[type=range]::-webkit-slider-runnable-track{height:6px;border-radius:6px}input[type=range]::-moz-range-progress{height:4px;border-radius:2px;background:#4a90e2}input[type=range]:focus{outline:0}.yj-range{width:100%;height:100%;position:relative;padding:0 10px;font-size:12px;line-height:25px}.yj-range:focus{outline:0}.yj-range .yj-input-range{width:100%;padding:0;height:6px}.yj-range .yj-range-cur,.yj-range .yj-range-max,.yj-range .yj-range-min{position:absolute;bottom:0;color:#999}.yj-range .yj-range-min{left:10px}.yj-range .yj-range-cur{left:50%;transform:translate(-50%,0);color:#fff}.yj-range .yj-range-max{right:10px;text-align:right}.yj-multiple-range{position:relative;width:100%;height:6px;background:#ccc;border-radius:5px;margin:5px 0}.yj-range-track{position:absolute;height:100%}.yj-slider{position:absolute;width:12px;height:12px;background:#ddd;border:1px solid #979797;border-radius:100px;top:-3px;cursor:pointer}.yj-slider-max{transform:translate(-100%,0)}.compares_changed{background-color:rgba(255,165,0,.8)}.compares_deleted{background-color:rgba(255,0,0,.8)}.compares_added{background-color:rgba(0,128,0,.8)}.compares_list_body{height:202px;overflow-y:auto;margin-bottom:8px!important;border:1px solid #000!important}.compares_list_title{font-size:medium;text-align:center;cursor:pointer}.compares_list_tr{cursor:pointer}.compares_list_table{height:175px;overflow-y:auto;display:inline-block}a.showDetails:link{color:red}a.showDetails:visited{color:#0F0}a.showDetails:hover{color:rgba(255,165,0,1)}a.showDetails:active{color:#00F}.dg ul{list-style:none;margin:0;padding:0;width:100%;clear:both}.dg.ac{position:fixed;top:0;left:0;right:0;height:0;z-index:0}.dg:not(.ac) .main{overflow:hidden}.dg.main{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear}.dg.main.taller-than-window{overflow-y:auto}.dg.main.taller-than-window .close-button{opacity:1;margin-top:-1px;border-top:1px solid #2c2c2c}.dg.main ul.closed .close-button{opacity:1!important}.dg.main .close-button.drag,.dg.main:hover .close-button{opacity:1}.dg.main .close-button{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear;border:0;line-height:19px;height:20px;cursor:pointer;text-align:center;background-color:#000}.dg.main .close-button.close-top{position:relative}.dg.main .close-button.close-bottom{position:absolute}.dg.main .close-button:hover{background-color:#111}.dg.a{float:right;margin-right:15px;overflow-y:visible}.dg.a.has-save>ul.close-top{margin-top:0}.dg.a.has-save>ul.close-bottom{margin-top:27px}.dg.a.has-save>ul.closed{margin-top:0}.dg.a .save-row{top:0;z-index:1002}.dg.a .save-row.close-top{position:relative}.dg.a .save-row.close-bottom{position:fixed}.dg li{-webkit-transition:overflow .1s linear;-o-transition:overflow .1s linear;-moz-transition:overflow .1s linear;transition:overflow .1s linear}.dg li:not(.folder){cursor:auto;height:27px;line-height:27px;padding:0 4px 0 5px}.dg li.folder{padding:0;border-left:4px solid transparent}.dg li.title{margin-left:-4px}.dg .closed li:not(.title),.dg .closed ul li,.dg .closed ul li>*{height:0;overflow:hidden;border:0}.dg .cr{clear:both;padding-left:3px;height:27px;overflow:hidden}.dg .property-name{cursor:default;float:left;clear:left;width:40%;overflow:hidden;text-overflow:ellipsis}.dg .cr.boolean,.dg .cr.boolean *,.dg .cr.function,.dg .cr.function *,.dg .cr.function .property-name,.dg li.title{cursor:pointer}.dg .c{float:left;width:60%;position:relative}.dg .c input[type=text]{border:0;margin-top:4px;padding:3px;width:100%;float:right}.dg .has-slider input[type=text]{width:30%;margin-left:0}.dg .slider{float:left;width:66%;margin-left:-5px;margin-right:0;height:19px;margin-top:4px}.dg .slider-fg{height:100%}.dg .c input[type=checkbox]{margin-top:7px}.dg .c select{margin-top:5px}.dg .cr.color{overflow:visible}.dg .selector{display:none;position:absolute;margin-left:-9px;margin-top:23px;z-index:10}.dg .c:hover .selector,.dg .selector.drag{display:block}.dg li.save-row{padding:0}.dg li.save-row .button{display:inline-block}.dg.dialogue{background-color:#222;width:460px;padding:15px;font-size:13px;line-height:15px}#dg-new-constructor{padding:10px;color:#222;font-family:Monaco,monospace;font-size:10px;border:0;resize:none;box-shadow:inset 1px 1px 1px #888;word-wrap:break-word;margin:12px 0;display:block;width:440px;overflow-y:scroll;height:100px;position:relative}#dg-local-explain{display:none;font-size:11px;line-height:17px;border-radius:3px;background-color:#333;padding:8px;margin-top:10px}#dg-local-explain code{font-size:10px}#dat-gui-save-locally{display:none}.dg{color:#eee;font:11px 'Lucida Grande',sans-serif;text-shadow:0 -1px 0 #111}.dg.main::-webkit-scrollbar{width:5px;background:#1a1a1a}.dg.main::-webkit-scrollbar-corner{height:0;display:none}.dg.main::-webkit-scrollbar-thumb{border-radius:5px;background:#676767}.dg li:not(.folder){background:#1a1a1a;border-bottom:1px solid #2c2c2c}.dg li.save-row{line-height:25px;background:#dad5cb;border:0}.dg li.save-row select{margin-left:5px;width:108px}.dg li.save-row .button{margin-left:5px;margin-top:1px;border-radius:2px;font-size:9px;line-height:7px;padding:4px 4px 5px;background:#c5bdad;color:#fff;text-shadow:0 1px 0 #b0a58f;box-shadow:0 -1px 0 #b0a58f;cursor:pointer}.dg li.save-row .button.gears{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAANCAYAAAB/9ZQ7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQJJREFUeNpiYKAU/P//PwGIC/ApCABiBSAW+I8AClAcgKxQ4T9hoMAEUrxx2QSGN6+egDX+/vWT4e7N82AMYoPAx/evwWoYoSYbACX2s7KxCxzcsezDh3evFoDEBYTEEqycggWAzA9AuUSQQgeYPa9fPv6/YWm/Acx5IPb7ty/fw+QZblw67vDs8R0YHyQhgObx+yAJkBqmG5dPPDh1aPOGR/eugW0G4vlIoTIfyFcA+QekhhHJhPdQxbiAIguMBTQZrPD7108M6roWYDFQiIAAv6Aow/1bFwXgis+f2LUAynwoIaNcz8XNx3Dl7MEJUDGQpx9gtQ8YCueB+D26OECAAQDadt7e46D42QAAAABJRU5ErkJggg==) 2px 1px no-repeat #c5bdad;height:7px;width:8px}.dg li.save-row .button:hover{background-color:#bab19e;box-shadow:0 -1px 0 #b0a58f}.dg li.folder{border-bottom:0}.dg li.title{padding-left:16px;background:url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat #000;border-bottom:1px solid rgba(255,255,255,.2)}.dg .closed li.title{background-image:url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==)}.dg .cr.boolean{border-left:3px solid #806787}.dg .cr.color{border-left:3px solid}.dg .cr.function{border-left:3px solid #e61d5f}.dg .cr.number{border-left:3px solid #2FA1D6}.dg .cr.number input[type=text]{color:#2FA1D6}.dg .cr.string{border-left:3px solid #1ed36f}.dg .cr.string input[type=text]{color:#1ed36f}.dg .cr.boolean:hover,.dg .cr.function:hover{background:#111}.dg .c input[type=text]{background:#303030;outline:0}.dg .c input[type=text]:hover{background:#3c3c3c}.dg .c input[type=text]:focus{background:#494949;color:#fff}.dg .c .slider{background:#303030;cursor:ew-resize}.dg .c .slider-fg{background:#2FA1D6;max-width:100%}.dg .c .slider:hover{background:#3c3c3c}.dg .c .slider:hover .slider-fg{background:#44abda} \ No newline at end of file diff --git a/public/eim-0225/EIMMODEL.min.js b/public/eim-0225/EIMMODEL.min.js new file mode 100644 index 0000000..90a988c --- /dev/null +++ b/public/eim-0225/EIMMODEL.min.js @@ -0,0 +1,11 @@ +/*!!** + * EIMMODEL V1.0.0 + * A WebGL-based 3D Viewer for threejs + * http://www.i3vsoft.com/ + * Built on 2021-2-25 7:24:06 PM + * commitHash 2611d22d + + * Copyright 2021, 广州君和信息技术有限公司 + ***/ +!function(A,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((A=A||self).EIMMODEL={})}(this,(function(A){"use strict";console.log("EIMMODEL Version: 1.0.0");var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};!function(A,e){A(e={exports:{}},e.exports)}((function(A){!function(e,t){var i=function(){function A(A){return"[object Array]"===Object.prototype.toString.call(A)}function e(A,e){for(var t in e)e.hasOwnProperty(t)&&(A[t]=e[t])}function t(A){if(!(this instanceof t))throw new TypeError(this+"is not a promise");if("function"!=typeof A)throw new TypeError("Promise resolver "+A+" is not a function");var e=new i;this._resolver=e;try{A((function(A){e.resolve(A)}),(function(A){e.reject(A)}))}catch(A){e.reject(A)}}function i(){this._callbacks=[],this._errbacks=[],this._status="pending",this._result=null}return e(t.prototype,{then:function(A,e){var i,o,n=new this.constructor((function(A,e){i=A,o=e}));return this._resolver._addCallbacks("function"==typeof A?t._makeCallback(n,i,o,A):i,"function"==typeof e?t._makeCallback(n,i,o,e):o),n},catch:function(A){return this.then(void 0,A)}}),t._makeCallback=function(A,e,t,i){return function(o){var n;try{n=i(o)}catch(A){return void t(A)}n!==A?e(n):t(new TypeError("Cannot resolve a promise with itself"))}},t.resolve=function(A){return A&&A.constructor===this?A:new this((function(e){e(A)}))},t.reject=function(A){var e=new this((function(){}));return e._resolver._result=A,e._resolver._status="rejected",e},t.all=function(e){var t=this;return new t((function(i,o){if(A(e)){var n=e.length,r=0,a=e.length,s=[];if(1>a)return i(s);for(;a>r;r++)t.resolve(e[r]).then(l(r),o)}else o(new TypeError("Promise.all expects an array of values or promises"));function l(A){return function(e){s[A]=e,--n||i(s)}}}))},t.race=function(e){var t=this;return new t((function(i,o){if(A(e))for(var n=0,r=e.length;r>n;n++)t.resolve(e[n]).then(i,o);else o(new TypeError("Promise.race expects an array of values or promises"))}))},t.async="undefined"!=typeof setImmediate?function(A){setImmediate(A)}:"undefined"!=typeof process&&process.nextTick?process.nextTick:function(A){setTimeout(A,0)},e(i.prototype,{fulfill:function(A){var e=this._status;"pending"!==e&&"accepted"!==e||(this._result=A,this._status="fulfilled"),"fulfilled"===this._status&&(this._notify(this._callbacks,this._result),this._callbacks=[],this._errbacks=null)},reject:function(A){var e=this._status;"pending"!==e&&"accepted"!==e||(this._result=A,this._status="rejected"),"rejected"===this._status&&(this._notify(this._errbacks,this._result),this._callbacks=null,this._errbacks=[])},resolve:function(A){"pending"===this._status&&(this._status="accepted",this._value=A,(this._callbacks&&this._callbacks.length||this._errbacks&&this._errbacks.length)&&this._unwrap(this._value))},_unwrap:function(A){var e,t=this,i=!1;if(!A||"object"!=typeof A&&"function"!=typeof A)t.fulfill(A);else try{"function"==typeof(e=A.then)?e.call(A,(function(A){i||(i=!0,t._unwrap(A))}),(function(A){i||(i=!0,t.reject(A))})):t.fulfill(A)}catch(A){i||t.reject(A)}},_addCallbacks:function(A,e){var t=this._callbacks,i=this._errbacks;switch(t&&t.push(A),i&&i.push(e),this._status){case"accepted":this._unwrap(this._value);break;case"fulfilled":this.fulfill(this._result);break;case"rejected":this.reject(this._result)}},_notify:function(A,e){A.length&&t.async((function(){var t,i;for(t=0,i=A.length;i>t;++t)A[t](e)}))}}),t.Resolver=i,t}();A&&(A.exports=i),(e=e||self).PromisePolyfill=i,e.Promise||(e.Promise=i)}(e)}));void 0===Number.EPSILON&&(Number.EPSILON=Math.pow(2,-52)),void 0===Number.isInteger&&(Number.isInteger=function(A){return"number"==typeof A&&isFinite(A)&&Math.floor(A)===A}),void 0===Math.sign&&(Math.sign=function(A){return 0>A?-1:A>0?1:+A}),"name"in Function.prototype==!1&&Object.defineProperty(Function.prototype,"name",{get:function(){return this.toString().match(/^\s*function\s*([^\(\s]*)/)[1]}}),void 0===Object.assign&&(Object.assign=function(A){if(null==A)throw new TypeError("Cannot convert undefined or null to object");for(var e=Object(A),t=1;arguments.length>t;t++){var i=arguments[t];if(null!=i)for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(e[o]=i[o])}return e});var t={LEFT:0,MIDDLE:1,RIGHT:2,ROTATE:0,DOLLY:1,PAN:2};function i(){}Object.assign(i.prototype,{addEventListener:function(A,e){void 0===this._listeners&&(this._listeners={});var t=this._listeners;void 0===t[A]&&(t[A]=[]),-1===t[A].indexOf(e)&&t[A].push(e)},hasEventListener:function(A,e){if(void 0===this._listeners)return!1;var t=this._listeners;return void 0!==t[A]&&-1!==t[A].indexOf(e)},removeEventListener:function(A,e){if(void 0!==this._listeners){var t=this._listeners[A];if(void 0!==t){var i=t.indexOf(e);-1!==i&&t.splice(i,1)}}},dispatchEvent:function(A){if(void 0!==this._listeners){var e=this._listeners[A.type];if(void 0!==e){A.target=this;for(var t=e.slice(0),i=0,o=t.length;o>i;i++)t[i].call(this,A)}}}});for(var o=[],n=0;256>n;n++)o[n]=(16>n?"0":"")+n.toString(16);var r,a={DEG2RAD:Math.PI/180,RAD2DEG:180/Math.PI,generateUUID:function(){var A=4294967295*Math.random()|0,e=4294967295*Math.random()|0,t=4294967295*Math.random()|0,i=4294967295*Math.random()|0;return(o[255&A]+o[A>>8&255]+o[A>>16&255]+o[A>>24&255]+"-"+o[255&e]+o[e>>8&255]+"-"+o[e>>16&15|64]+o[e>>24&255]+"-"+o[63&t|128]+o[t>>8&255]+"-"+o[t>>16&255]+o[t>>24&255]+o[255&i]+o[i>>8&255]+o[i>>16&255]+o[i>>24&255]).toUpperCase()},clamp:function(A,e,t){return Math.max(e,Math.min(t,A))},euclideanModulo:function(A,e){return(A%e+e)%e},mapLinear:function(A,e,t,i,o){return i+(A-e)*(o-i)/(t-e)},lerp:function(A,e,t){return(1-t)*A+t*e},smoothstep:function(A,e,t){return A>e?t>A?(A=(A-e)/(t-e))*A*(3-2*A):1:0},smootherstep:function(A,e,t){return A>e?t>A?(A=(A-e)/(t-e))*A*A*(A*(6*A-15)+10):1:0},randInt:function(A,e){return A+Math.floor(Math.random()*(e-A+1))},randFloat:function(A,e){return A+Math.random()*(e-A)},randFloatSpread:function(A){return A*(.5-Math.random())},degToRad:function(A){return A*a.DEG2RAD},radToDeg:function(A){return A*a.RAD2DEG},isPowerOfTwo:function(A){return 0==(A&A-1)&&0!==A},ceilPowerOfTwo:function(A){return Math.pow(2,Math.ceil(Math.log(A)/Math.LN2))},floorPowerOfTwo:function(A){return Math.pow(2,Math.floor(Math.log(A)/Math.LN2))},setQuaternionFromProperEuler:function(A,e,t,i,o){var n=Math.cos,r=Math.sin,a=n(t/2),s=r(t/2),l=n((e+i)/2),c=r((e+i)/2),h=n((e-i)/2),d=r((e-i)/2),p=n((i-e)/2),g=r((i-e)/2);"XYX"===o?A.set(a*c,s*h,s*d,a*l):"YZY"===o?A.set(s*d,a*c,s*h,a*l):"ZXZ"===o?A.set(s*h,s*d,a*c,a*l):"XZX"===o?A.set(a*c,s*g,s*p,a*l):"YXY"===o?A.set(s*p,a*c,s*g,a*l):"ZYZ"===o?A.set(s*g,s*p,a*c,a*l):console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order.")}};function s(A,e){this.x=A||0,this.y=e||0}function l(){this.elements=[1,0,0,0,1,0,0,0,1],arguments.length>0&&console.error("THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.")}Object.defineProperties(s.prototype,{width:{get:function(){return this.x},set:function(A){this.x=A}},height:{get:function(){return this.y},set:function(A){this.y=A}}}),Object.assign(s.prototype,{isVector2:!0,set:function(A,e){return this.x=A,this.y=e,this},setScalar:function(A){return this.x=A,this.y=A,this},setX:function(A){return this.x=A,this},setY:function(A){return this.y=A,this},setComponent:function(A,e){switch(A){case 0:this.x=e;break;case 1:this.y=e;break;default:throw new Error("index is out of range: "+A)}return this},getComponent:function(A){switch(A){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+A)}},clone:function(){return new this.constructor(this.x,this.y)},copy:function(A){return this.x=A.x,this.y=A.y,this},add:function(A,e){return void 0!==e?(console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(A,e)):(this.x+=A.x,this.y+=A.y,this)},addScalar:function(A){return this.x+=A,this.y+=A,this},addVectors:function(A,e){return this.x=A.x+e.x,this.y=A.y+e.y,this},addScaledVector:function(A,e){return this.x+=A.x*e,this.y+=A.y*e,this},sub:function(A,e){return void 0!==e?(console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(A,e)):(this.x-=A.x,this.y-=A.y,this)},subScalar:function(A){return this.x-=A,this.y-=A,this},subVectors:function(A,e){return this.x=A.x-e.x,this.y=A.y-e.y,this},multiply:function(A){return this.x*=A.x,this.y*=A.y,this},multiplyScalar:function(A){return this.x*=A,this.y*=A,this},divide:function(A){return this.x/=A.x,this.y/=A.y,this},divideScalar:function(A){return this.multiplyScalar(1/A)},applyMatrix3:function(A){var e=this.x,t=this.y,i=A.elements;return this.x=i[0]*e+i[3]*t+i[6],this.y=i[1]*e+i[4]*t+i[7],this},min:function(A){return this.x=Math.min(this.x,A.x),this.y=Math.min(this.y,A.y),this},max:function(A){return this.x=Math.max(this.x,A.x),this.y=Math.max(this.y,A.y),this},clamp:function(A,e){return this.x=Math.max(A.x,Math.min(e.x,this.x)),this.y=Math.max(A.y,Math.min(e.y,this.y)),this},clampScalar:function(A,e){return this.x=Math.max(A,Math.min(e,this.x)),this.y=Math.max(A,Math.min(e,this.y)),this},clampLength:function(A,e){var t=this.length();return this.divideScalar(t||1).multiplyScalar(Math.max(A,Math.min(e,t)))},floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this},round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},roundToZero:function(){return this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x),this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y),this},negate:function(){return this.x=-this.x,this.y=-this.y,this},dot:function(A){return this.x*A.x+this.y*A.y},cross:function(A){return this.x*A.y-this.y*A.x},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)},normalize:function(){return this.divideScalar(this.length()||1)},angle:function(){return Math.atan2(-this.y,-this.x)+Math.PI},distanceTo:function(A){return Math.sqrt(this.distanceToSquared(A))},distanceToSquared:function(A){var e=this.x-A.x,t=this.y-A.y;return e*e+t*t},manhattanDistanceTo:function(A){return Math.abs(this.x-A.x)+Math.abs(this.y-A.y)},setLength:function(A){return this.normalize().multiplyScalar(A)},lerp:function(A,e){return this.x+=(A.x-this.x)*e,this.y+=(A.y-this.y)*e,this},lerpVectors:function(A,e,t){return this.subVectors(e,A).multiplyScalar(t).add(A)},equals:function(A){return A.x===this.x&&A.y===this.y},fromArray:function(A,e){return void 0===e&&(e=0),this.x=A[e],this.y=A[e+1],this},toArray:function(A,e){return void 0===A&&(A=[]),void 0===e&&(e=0),A[e]=this.x,A[e+1]=this.y,A},fromBufferAttribute:function(A,e,t){return void 0!==t&&console.warn("THREE.Vector2: offset has been removed from .fromBufferAttribute()."),this.x=A.getX(e),this.y=A.getY(e),this},rotateAround:function(A,e){var t=Math.cos(e),i=Math.sin(e),o=this.x-A.x,n=this.y-A.y;return this.x=o*t-n*i+A.x,this.y=o*i+n*t+A.y,this}}),Object.assign(l.prototype,{isMatrix3:!0,set:function(A,e,t,i,o,n,r,a,s){var l=this.elements;return l[0]=A,l[1]=i,l[2]=r,l[3]=e,l[4]=o,l[5]=a,l[6]=t,l[7]=n,l[8]=s,this},identity:function(){return this.set(1,0,0,0,1,0,0,0,1),this},clone:function(){return(new this.constructor).fromArray(this.elements)},copy:function(A){var e=this.elements,t=A.elements;return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],this},extractBasis:function(A,e,t){return A.setFromMatrix3Column(this,0),e.setFromMatrix3Column(this,1),t.setFromMatrix3Column(this,2),this},setFromMatrix4:function(A){var e=A.elements;return this.set(e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]),this},multiply:function(A){return this.multiplyMatrices(this,A)},premultiply:function(A){return this.multiplyMatrices(A,this)},multiplyMatrices:function(A,e){var t=A.elements,i=e.elements,o=this.elements,n=t[0],r=t[3],a=t[6],s=t[1],l=t[4],c=t[7],h=t[2],d=t[5],p=t[8],g=i[0],u=i[3],f=i[6],m=i[1],C=i[4],y=i[7],v=i[2],I=i[5],E=i[8];return o[0]=n*g+r*m+a*v,o[3]=n*u+r*C+a*I,o[6]=n*f+r*y+a*E,o[1]=s*g+l*m+c*v,o[4]=s*u+l*C+c*I,o[7]=s*f+l*y+c*E,o[2]=h*g+d*m+p*v,o[5]=h*u+d*C+p*I,o[8]=h*f+d*y+p*E,this},multiplyScalar:function(A){var e=this.elements;return e[0]*=A,e[3]*=A,e[6]*=A,e[1]*=A,e[4]*=A,e[7]*=A,e[2]*=A,e[5]*=A,e[8]*=A,this},determinant:function(){var A=this.elements,e=A[0],t=A[1],i=A[2],o=A[3],n=A[4],r=A[5],a=A[6],s=A[7],l=A[8];return e*n*l-e*r*s-t*o*l+t*r*a+i*o*s-i*n*a},getInverse:function(A,e){void 0!==e&&console.warn("THREE.Matrix3: .getInverse() can no longer be configured to throw on degenerate.");var t=A.elements,i=this.elements,o=t[0],n=t[1],r=t[2],a=t[3],s=t[4],l=t[5],c=t[6],h=t[7],d=t[8],p=d*s-l*h,g=l*c-d*a,u=h*a-s*c,f=o*p+n*g+r*u;if(0===f)return this.set(0,0,0,0,0,0,0,0,0);var m=1/f;return i[0]=p*m,i[1]=(r*h-d*n)*m,i[2]=(l*n-r*s)*m,i[3]=g*m,i[4]=(d*o-r*c)*m,i[5]=(r*a-l*o)*m,i[6]=u*m,i[7]=(n*c-h*o)*m,i[8]=(s*o-n*a)*m,this},transpose:function(){var A,e=this.elements;return A=e[1],e[1]=e[3],e[3]=A,A=e[2],e[2]=e[6],e[6]=A,A=e[5],e[5]=e[7],e[7]=A,this},getNormalMatrix:function(A){return this.setFromMatrix4(A).getInverse(this).transpose()},transposeIntoArray:function(A){var e=this.elements;return A[0]=e[0],A[1]=e[3],A[2]=e[6],A[3]=e[1],A[4]=e[4],A[5]=e[7],A[6]=e[2],A[7]=e[5],A[8]=e[8],this},setUvTransform:function(A,e,t,i,o,n,r){var a=Math.cos(o),s=Math.sin(o);this.set(t*a,t*s,-t*(a*n+s*r)+n+A,-i*s,i*a,-i*(-s*n+a*r)+r+e,0,0,1)},scale:function(A,e){var t=this.elements;return t[0]*=A,t[3]*=A,t[6]*=A,t[1]*=e,t[4]*=e,t[7]*=e,this},rotate:function(A){var e=Math.cos(A),t=Math.sin(A),i=this.elements,o=i[0],n=i[3],r=i[6],a=i[1],s=i[4],l=i[7];return i[0]=e*o+t*a,i[3]=e*n+t*s,i[6]=e*r+t*l,i[1]=-t*o+e*a,i[4]=-t*n+e*s,i[7]=-t*r+e*l,this},translate:function(A,e){var t=this.elements;return t[0]+=A*t[2],t[3]+=A*t[5],t[6]+=A*t[8],t[1]+=e*t[2],t[4]+=e*t[5],t[7]+=e*t[8],this},equals:function(A){for(var e=this.elements,t=A.elements,i=0;9>i;i++)if(e[i]!==t[i])return!1;return!0},fromArray:function(A,e){void 0===e&&(e=0);for(var t=0;9>t;t++)this.elements[t]=A[t+e];return this},toArray:function(A,e){void 0===A&&(A=[]),void 0===e&&(e=0);var t=this.elements;return A[e]=t[0],A[e+1]=t[1],A[e+2]=t[2],A[e+3]=t[3],A[e+4]=t[4],A[e+5]=t[5],A[e+6]=t[6],A[e+7]=t[7],A[e+8]=t[8],A}});var c={getDataURL:function(A){var e;if("undefined"==typeof HTMLCanvasElement)return A.src;if(A instanceof HTMLCanvasElement)e=A;else{void 0===r&&(r=document.createElementNS("http://www.w3.org/1999/xhtml","canvas")),r.width=A.width,r.height=A.height;var t=r.getContext("2d");A instanceof ImageData?t.putImageData(A,0,0):t.drawImage(A,0,0,A.width,A.height),e=r}return e.width>2048||e.height>2048?e.toDataURL("image/jpeg",.6):e.toDataURL("image/png")}},h=0;function d(A,e,t,i,o,n,r,c,p,g){Object.defineProperty(this,"id",{value:h++}),this.uuid=a.generateUUID(),this.name="",this.image=void 0!==A?A:d.DEFAULT_IMAGE,this.mipmaps=[],this.mapping=void 0!==e?e:d.DEFAULT_MAPPING,this.wrapS=void 0!==t?t:1001,this.wrapT=void 0!==i?i:1001,this.magFilter=void 0!==o?o:1006,this.minFilter=void 0!==n?n:1008,this.anisotropy=void 0!==p?p:1,this.format=void 0!==r?r:1023,this.internalFormat=null,this.type=void 0!==c?c:1009,this.offset=new s(0,0),this.repeat=new s(1,1),this.center=new s(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new l,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.encoding=void 0!==g?g:3e3,this.version=0,this.onUpdate=null}function p(A,e,t,i){this.x=A||0,this.y=e||0,this.z=t||0,this.w=void 0!==i?i:1}function g(A,e,t){this.width=A,this.height=e,this.scissor=new p(0,0,A,e),this.scissorTest=!1,this.viewport=new p(0,0,A,e),this.texture=new d(void 0,(t=t||{}).mapping,t.wrapS,t.wrapT,t.magFilter,t.minFilter,t.format,t.type,t.anisotropy,t.encoding),this.texture.image={},this.texture.image.width=A,this.texture.image.height=e,this.texture.generateMipmaps=void 0!==t.generateMipmaps&&t.generateMipmaps,this.texture.minFilter=void 0!==t.minFilter?t.minFilter:1006,this.depthBuffer=void 0===t.depthBuffer||t.depthBuffer,this.stencilBuffer=void 0===t.stencilBuffer||t.stencilBuffer,this.depthTexture=void 0!==t.depthTexture?t.depthTexture:null}function u(A,e,t){g.call(this,A,e,t),this.samples=4}function f(A,e,t,i){this._x=A||0,this._y=e||0,this._z=t||0,this._w=void 0!==i?i:1}d.DEFAULT_IMAGE=void 0,d.DEFAULT_MAPPING=300,d.prototype=Object.assign(Object.create(i.prototype),{constructor:d,isTexture:!0,updateMatrix:function(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)},clone:function(){return(new this.constructor).copy(this)},copy:function(A){return this.name=A.name,this.image=A.image,this.mipmaps=A.mipmaps.slice(0),this.mapping=A.mapping,this.wrapS=A.wrapS,this.wrapT=A.wrapT,this.magFilter=A.magFilter,this.minFilter=A.minFilter,this.anisotropy=A.anisotropy,this.format=A.format,this.internalFormat=A.internalFormat,this.type=A.type,this.offset.copy(A.offset),this.repeat.copy(A.repeat),this.center.copy(A.center),this.rotation=A.rotation,this.matrixAutoUpdate=A.matrixAutoUpdate,this.matrix.copy(A.matrix),this.generateMipmaps=A.generateMipmaps,this.premultiplyAlpha=A.premultiplyAlpha,this.flipY=A.flipY,this.unpackAlignment=A.unpackAlignment,this.encoding=A.encoding,this},toJSON:function(A){var e=void 0===A||"string"==typeof A;if(!e&&void 0!==A.textures[this.uuid])return A.textures[this.uuid];var t={metadata:{version:4.5,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,mapping:this.mapping,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,type:this.type,encoding:this.encoding,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};if(void 0!==this.image){var i=this.image;if(void 0===i.uuid&&(i.uuid=a.generateUUID()),!e&&void 0===A.images[i.uuid]){var o;if(Array.isArray(i)){o=[];for(var n=0,r=i.length;r>n;n++)o.push(c.getDataURL(i[n]))}else o=c.getDataURL(i);A.images[i.uuid]={uuid:i.uuid,url:o}}t.image=i.uuid}return e||(A.textures[this.uuid]=t),t},dispose:function(){this.dispatchEvent({type:"dispose"})},transformUv:function(A){if(300!==this.mapping)return A;if(A.applyMatrix3(this.matrix),0>A.x||A.x>1)switch(this.wrapS){case 1e3:A.x=A.x-Math.floor(A.x);break;case 1001:A.x=0>A.x?0:1;break;case 1002:A.x=1===Math.abs(Math.floor(A.x)%2)?Math.ceil(A.x)-A.x:A.x-Math.floor(A.x)}if(0>A.y||A.y>1)switch(this.wrapT){case 1e3:A.y=A.y-Math.floor(A.y);break;case 1001:A.y=0>A.y?0:1;break;case 1002:A.y=1===Math.abs(Math.floor(A.y)%2)?Math.ceil(A.y)-A.y:A.y-Math.floor(A.y)}return this.flipY&&(A.y=1-A.y),A}}),Object.defineProperty(d.prototype,"needsUpdate",{set:function(A){!0===A&&this.version++}}),Object.defineProperties(p.prototype,{width:{get:function(){return this.z},set:function(A){this.z=A}},height:{get:function(){return this.w},set:function(A){this.w=A}}}),Object.assign(p.prototype,{isVector4:!0,set:function(A,e,t,i){return this.x=A,this.y=e,this.z=t,this.w=i,this},setScalar:function(A){return this.x=A,this.y=A,this.z=A,this.w=A,this},setX:function(A){return this.x=A,this},setY:function(A){return this.y=A,this},setZ:function(A){return this.z=A,this},setW:function(A){return this.w=A,this},setComponent:function(A,e){switch(A){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;case 3:this.w=e;break;default:throw new Error("index is out of range: "+A)}return this},getComponent:function(A){switch(A){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+A)}},clone:function(){return new this.constructor(this.x,this.y,this.z,this.w)},copy:function(A){return this.x=A.x,this.y=A.y,this.z=A.z,this.w=void 0!==A.w?A.w:1,this},add:function(A,e){return void 0!==e?(console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(A,e)):(this.x+=A.x,this.y+=A.y,this.z+=A.z,this.w+=A.w,this)},addScalar:function(A){return this.x+=A,this.y+=A,this.z+=A,this.w+=A,this},addVectors:function(A,e){return this.x=A.x+e.x,this.y=A.y+e.y,this.z=A.z+e.z,this.w=A.w+e.w,this},addScaledVector:function(A,e){return this.x+=A.x*e,this.y+=A.y*e,this.z+=A.z*e,this.w+=A.w*e,this},sub:function(A,e){return void 0!==e?(console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(A,e)):(this.x-=A.x,this.y-=A.y,this.z-=A.z,this.w-=A.w,this)},subScalar:function(A){return this.x-=A,this.y-=A,this.z-=A,this.w-=A,this},subVectors:function(A,e){return this.x=A.x-e.x,this.y=A.y-e.y,this.z=A.z-e.z,this.w=A.w-e.w,this},multiplyScalar:function(A){return this.x*=A,this.y*=A,this.z*=A,this.w*=A,this},applyMatrix4:function(A){var e=this.x,t=this.y,i=this.z,o=this.w,n=A.elements;return this.x=n[0]*e+n[4]*t+n[8]*i+n[12]*o,this.y=n[1]*e+n[5]*t+n[9]*i+n[13]*o,this.z=n[2]*e+n[6]*t+n[10]*i+n[14]*o,this.w=n[3]*e+n[7]*t+n[11]*i+n[15]*o,this},divideScalar:function(A){return this.multiplyScalar(1/A)},setAxisAngleFromQuaternion:function(A){this.w=2*Math.acos(A.w);var e=Math.sqrt(1-A.w*A.w);return 1e-4>e?(this.x=1,this.y=0,this.z=0):(this.x=A.x/e,this.y=A.y/e,this.z=A.z/e),this},setAxisAngleFromRotationMatrix:function(A){var e,t,i,o,n=A.elements,r=n[0],a=n[4],s=n[8],l=n[1],c=n[5],h=n[9],d=n[2],p=n[6],g=n[10];if(.01>Math.abs(a-l)&&.01>Math.abs(s-d)&&.01>Math.abs(h-p)){if(.1>Math.abs(a+l)&&.1>Math.abs(s+d)&&.1>Math.abs(h+p)&&.1>Math.abs(r+c+g-3))return this.set(1,0,0,0),this;e=Math.PI;var u=(r+1)/2,f=(c+1)/2,m=(g+1)/2,C=(a+l)/4,y=(s+d)/4,v=(h+p)/4;return u>f&&u>m?.01>u?(t=0,i=.707106781,o=.707106781):(i=C/(t=Math.sqrt(u)),o=y/t):f>m?.01>f?(t=.707106781,i=0,o=.707106781):(t=C/(i=Math.sqrt(f)),o=v/i):.01>m?(t=.707106781,i=.707106781,o=0):(t=y/(o=Math.sqrt(m)),i=v/o),this.set(t,i,o,e),this}var I=Math.sqrt((p-h)*(p-h)+(s-d)*(s-d)+(l-a)*(l-a));return.001>Math.abs(I)&&(I=1),this.x=(p-h)/I,this.y=(s-d)/I,this.z=(l-a)/I,this.w=Math.acos((r+c+g-1)/2),this},min:function(A){return this.x=Math.min(this.x,A.x),this.y=Math.min(this.y,A.y),this.z=Math.min(this.z,A.z),this.w=Math.min(this.w,A.w),this},max:function(A){return this.x=Math.max(this.x,A.x),this.y=Math.max(this.y,A.y),this.z=Math.max(this.z,A.z),this.w=Math.max(this.w,A.w),this},clamp:function(A,e){return this.x=Math.max(A.x,Math.min(e.x,this.x)),this.y=Math.max(A.y,Math.min(e.y,this.y)),this.z=Math.max(A.z,Math.min(e.z,this.z)),this.w=Math.max(A.w,Math.min(e.w,this.w)),this},clampScalar:function(A,e){return this.x=Math.max(A,Math.min(e,this.x)),this.y=Math.max(A,Math.min(e,this.y)),this.z=Math.max(A,Math.min(e,this.z)),this.w=Math.max(A,Math.min(e,this.w)),this},clampLength:function(A,e){var t=this.length();return this.divideScalar(t||1).multiplyScalar(Math.max(A,Math.min(e,t)))},floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this},ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this},round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this},roundToZero:function(){return this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x),this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y),this.z=0>this.z?Math.ceil(this.z):Math.floor(this.z),this.w=0>this.w?Math.ceil(this.w):Math.floor(this.w),this},negate:function(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this},dot:function(A){return this.x*A.x+this.y*A.y+this.z*A.z+this.w*A.w},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)},normalize:function(){return this.divideScalar(this.length()||1)},setLength:function(A){return this.normalize().multiplyScalar(A)},lerp:function(A,e){return this.x+=(A.x-this.x)*e,this.y+=(A.y-this.y)*e,this.z+=(A.z-this.z)*e,this.w+=(A.w-this.w)*e,this},lerpVectors:function(A,e,t){return this.subVectors(e,A).multiplyScalar(t).add(A)},equals:function(A){return A.x===this.x&&A.y===this.y&&A.z===this.z&&A.w===this.w},fromArray:function(A,e){return void 0===e&&(e=0),this.x=A[e],this.y=A[e+1],this.z=A[e+2],this.w=A[e+3],this},toArray:function(A,e){return void 0===A&&(A=[]),void 0===e&&(e=0),A[e]=this.x,A[e+1]=this.y,A[e+2]=this.z,A[e+3]=this.w,A},fromBufferAttribute:function(A,e,t){return void 0!==t&&console.warn("THREE.Vector4: offset has been removed from .fromBufferAttribute()."),this.x=A.getX(e),this.y=A.getY(e),this.z=A.getZ(e),this.w=A.getW(e),this}}),g.prototype=Object.assign(Object.create(i.prototype),{constructor:g,isWebGLRenderTarget:!0,setSize:function(A,e){this.width===A&&this.height===e||(this.width=A,this.height=e,this.texture.image.width=A,this.texture.image.height=e,this.dispose()),this.viewport.set(0,0,A,e),this.scissor.set(0,0,A,e)},clone:function(){return(new this.constructor).copy(this)},copy:function(A){return this.width=A.width,this.height=A.height,this.viewport.copy(A.viewport),this.texture=A.texture.clone(),this.depthBuffer=A.depthBuffer,this.stencilBuffer=A.stencilBuffer,this.depthTexture=A.depthTexture,this},dispose:function(){this.dispatchEvent({type:"dispose"})}}),u.prototype=Object.assign(Object.create(g.prototype),{constructor:u,isWebGLMultisampleRenderTarget:!0,copy:function(A){return g.prototype.copy.call(this,A),this.samples=A.samples,this}}),Object.assign(f,{slerp:function(A,e,t,i){return t.copy(A).slerp(e,i)},slerpFlat:function(A,e,t,i,o,n,r){var a=t[i+0],s=t[i+1],l=t[i+2],c=t[i+3],h=o[n+0],d=o[n+1],p=o[n+2],g=o[n+3];if(c!==g||a!==h||s!==d||l!==p){var u=1-r,f=a*h+s*d+l*p+c*g,m=0>f?-1:1,C=1-f*f;if(C>Number.EPSILON){var y=Math.sqrt(C),v=Math.atan2(y,f*m);u=Math.sin(u*v)/y,r=Math.sin(r*v)/y}var I=r*m;if(a=a*u+h*I,s=s*u+d*I,l=l*u+p*I,c=c*u+g*I,u===1-r){var E=1/Math.sqrt(a*a+s*s+l*l+c*c);a*=E,s*=E,l*=E,c*=E}}A[e]=a,A[e+1]=s,A[e+2]=l,A[e+3]=c}}),Object.defineProperties(f.prototype,{x:{get:function(){return this._x},set:function(A){this._x=A,this._onChangeCallback()}},y:{get:function(){return this._y},set:function(A){this._y=A,this._onChangeCallback()}},z:{get:function(){return this._z},set:function(A){this._z=A,this._onChangeCallback()}},w:{get:function(){return this._w},set:function(A){this._w=A,this._onChangeCallback()}}}),Object.assign(f.prototype,{isQuaternion:!0,set:function(A,e,t,i){return this._x=A,this._y=e,this._z=t,this._w=i,this._onChangeCallback(),this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._w)},copy:function(A){return this._x=A.x,this._y=A.y,this._z=A.z,this._w=A.w,this._onChangeCallback(),this},setFromEuler:function(A,e){if(!A||!A.isEuler)throw new Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.");var t=A._x,i=A._y,o=A._z,n=A.order,r=Math.cos,a=Math.sin,s=r(t/2),l=r(i/2),c=r(o/2),h=a(t/2),d=a(i/2),p=a(o/2);return"XYZ"===n?(this._x=h*l*c+s*d*p,this._y=s*d*c-h*l*p,this._z=s*l*p+h*d*c,this._w=s*l*c-h*d*p):"YXZ"===n?(this._x=h*l*c+s*d*p,this._y=s*d*c-h*l*p,this._z=s*l*p-h*d*c,this._w=s*l*c+h*d*p):"ZXY"===n?(this._x=h*l*c-s*d*p,this._y=s*d*c+h*l*p,this._z=s*l*p+h*d*c,this._w=s*l*c-h*d*p):"ZYX"===n?(this._x=h*l*c-s*d*p,this._y=s*d*c+h*l*p,this._z=s*l*p-h*d*c,this._w=s*l*c+h*d*p):"YZX"===n?(this._x=h*l*c+s*d*p,this._y=s*d*c+h*l*p,this._z=s*l*p-h*d*c,this._w=s*l*c-h*d*p):"XZY"===n&&(this._x=h*l*c-s*d*p,this._y=s*d*c-h*l*p,this._z=s*l*p+h*d*c,this._w=s*l*c+h*d*p),!1!==e&&this._onChangeCallback(),this},setFromAxisAngle:function(A,e){var t=e/2,i=Math.sin(t);return this._x=A.x*i,this._y=A.y*i,this._z=A.z*i,this._w=Math.cos(t),this._onChangeCallback(),this},setFromRotationMatrix:function(A){var e,t=A.elements,i=t[0],o=t[4],n=t[8],r=t[1],a=t[5],s=t[9],l=t[2],c=t[6],h=t[10],d=i+a+h;return d>0?(e=.5/Math.sqrt(d+1),this._w=.25/e,this._x=(c-s)*e,this._y=(n-l)*e,this._z=(r-o)*e):i>a&&i>h?(e=2*Math.sqrt(1+i-a-h),this._w=(c-s)/e,this._x=.25*e,this._y=(o+r)/e,this._z=(n+l)/e):a>h?(e=2*Math.sqrt(1+a-i-h),this._w=(n-l)/e,this._x=(o+r)/e,this._y=.25*e,this._z=(s+c)/e):(e=2*Math.sqrt(1+h-i-a),this._w=(r-o)/e,this._x=(n+l)/e,this._y=(s+c)/e,this._z=.25*e),this._onChangeCallback(),this},setFromUnitVectors:function(A,e){var t=A.dot(e)+1;return 1e-6>t?(t=0,Math.abs(A.x)>Math.abs(A.z)?(this._x=-A.y,this._y=A.x,this._z=0,this._w=t):(this._x=0,this._y=-A.z,this._z=A.y,this._w=t)):(this._x=A.y*e.z-A.z*e.y,this._y=A.z*e.x-A.x*e.z,this._z=A.x*e.y-A.y*e.x,this._w=t),this.normalize()},angleTo:function(A){return 2*Math.acos(Math.abs(a.clamp(this.dot(A),-1,1)))},rotateTowards:function(A,e){var t=this.angleTo(A);if(0===t)return this;var i=Math.min(1,e/t);return this.slerp(A,i),this},inverse:function(){return this.conjugate()},conjugate:function(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this},dot:function(A){return this._x*A._x+this._y*A._y+this._z*A._z+this._w*A._w},lengthSq:function(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w},length:function(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)},normalize:function(){var A=this.length();return 0===A?(this._x=0,this._y=0,this._z=0,this._w=1):(this._x=this._x*(A=1/A),this._y=this._y*A,this._z=this._z*A,this._w=this._w*A),this._onChangeCallback(),this},multiply:function(A,e){return void 0!==e?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."),this.multiplyQuaternions(A,e)):this.multiplyQuaternions(this,A)},premultiply:function(A){return this.multiplyQuaternions(A,this)},multiplyQuaternions:function(A,e){var t=A._x,i=A._y,o=A._z,n=A._w,r=e._x,a=e._y,s=e._z,l=e._w;return this._x=t*l+n*r+i*s-o*a,this._y=i*l+n*a+o*r-t*s,this._z=o*l+n*s+t*a-i*r,this._w=n*l-t*r-i*a-o*s,this._onChangeCallback(),this},slerp:function(A,e){if(0===e)return this;if(1===e)return this.copy(A);var t=this._x,i=this._y,o=this._z,n=this._w,r=n*A._w+t*A._x+i*A._y+o*A._z;if(0>r?(this._w=-A._w,this._x=-A._x,this._y=-A._y,this._z=-A._z,r=-r):this.copy(A),r>=1)return this._w=n,this._x=t,this._y=i,this._z=o,this;var a=1-r*r;if(Number.EPSILON>=a){var s=1-e;return this._w=s*n+e*this._w,this._x=s*t+e*this._x,this._y=s*i+e*this._y,this._z=s*o+e*this._z,this.normalize(),this._onChangeCallback(),this}var l=Math.sqrt(a),c=Math.atan2(l,r),h=Math.sin((1-e)*c)/l,d=Math.sin(e*c)/l;return this._w=n*h+this._w*d,this._x=t*h+this._x*d,this._y=i*h+this._y*d,this._z=o*h+this._z*d,this._onChangeCallback(),this},equals:function(A){return A._x===this._x&&A._y===this._y&&A._z===this._z&&A._w===this._w},fromArray:function(A,e){return void 0===e&&(e=0),this._x=A[e],this._y=A[e+1],this._z=A[e+2],this._w=A[e+3],this._onChangeCallback(),this},toArray:function(A,e){return void 0===A&&(A=[]),void 0===e&&(e=0),A[e]=this._x,A[e+1]=this._y,A[e+2]=this._z,A[e+3]=this._w,A},fromBufferAttribute:function(A,e){return this._x=A.getX(e),this._y=A.getY(e),this._z=A.getZ(e),this._w=A.getW(e),this},_onChange:function(A){return this._onChangeCallback=A,this},_onChangeCallback:function(){}});var m=new y,C=new f;function y(A,e,t){this.x=A||0,this.y=e||0,this.z=t||0}Object.assign(y.prototype,{isVector3:!0,set:function(A,e,t){return this.x=A,this.y=e,this.z=t,this},setScalar:function(A){return this.x=A,this.y=A,this.z=A,this},setX:function(A){return this.x=A,this},setY:function(A){return this.y=A,this},setZ:function(A){return this.z=A,this},setComponent:function(A,e){switch(A){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;default:throw new Error("index is out of range: "+A)}return this},getComponent:function(A){switch(A){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+A)}},clone:function(){return new this.constructor(this.x,this.y,this.z)},copy:function(A){return this.x=A.x,this.y=A.y,this.z=A.z,this},add:function(A,e){return void 0!==e?(console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(A,e)):(this.x+=A.x,this.y+=A.y,this.z+=A.z,this)},addScalar:function(A){return this.x+=A,this.y+=A,this.z+=A,this},addVectors:function(A,e){return this.x=A.x+e.x,this.y=A.y+e.y,this.z=A.z+e.z,this},addScaledVector:function(A,e){return this.x+=A.x*e,this.y+=A.y*e,this.z+=A.z*e,this},sub:function(A,e){return void 0!==e?(console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(A,e)):(this.x-=A.x,this.y-=A.y,this.z-=A.z,this)},subScalar:function(A){return this.x-=A,this.y-=A,this.z-=A,this},subVectors:function(A,e){return this.x=A.x-e.x,this.y=A.y-e.y,this.z=A.z-e.z,this},multiply:function(A,e){return void 0!==e?(console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(A,e)):(this.x*=A.x,this.y*=A.y,this.z*=A.z,this)},multiplyScalar:function(A){return this.x*=A,this.y*=A,this.z*=A,this},multiplyVectors:function(A,e){return this.x=A.x*e.x,this.y=A.y*e.y,this.z=A.z*e.z,this},applyEuler:function(A){return A&&A.isEuler||console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order."),this.applyQuaternion(C.setFromEuler(A))},applyAxisAngle:function(A,e){return this.applyQuaternion(C.setFromAxisAngle(A,e))},applyMatrix3:function(A){var e=this.x,t=this.y,i=this.z,o=A.elements;return this.x=o[0]*e+o[3]*t+o[6]*i,this.y=o[1]*e+o[4]*t+o[7]*i,this.z=o[2]*e+o[5]*t+o[8]*i,this},applyNormalMatrix:function(A){return this.applyMatrix3(A).normalize()},applyMatrix4:function(A){var e=this.x,t=this.y,i=this.z,o=A.elements,n=1/(o[3]*e+o[7]*t+o[11]*i+o[15]);return this.x=(o[0]*e+o[4]*t+o[8]*i+o[12])*n,this.y=(o[1]*e+o[5]*t+o[9]*i+o[13])*n,this.z=(o[2]*e+o[6]*t+o[10]*i+o[14])*n,this},applyQuaternion:function(A){var e=this.x,t=this.y,i=this.z,o=A.x,n=A.y,r=A.z,a=A.w,s=a*e+n*i-r*t,l=a*t+r*e-o*i,c=a*i+o*t-n*e,h=-o*e-n*t-r*i;return this.x=s*a+h*-o+l*-r-c*-n,this.y=l*a+h*-n+c*-o-s*-r,this.z=c*a+h*-r+s*-n-l*-o,this},project:function(A){return this.applyMatrix4(A.matrixWorldInverse).applyMatrix4(A.projectionMatrix)},unproject:function(A){return this.applyMatrix4(A.projectionMatrixInverse).applyMatrix4(A.matrixWorld)},transformDirection:function(A){var e=this.x,t=this.y,i=this.z,o=A.elements;return this.x=o[0]*e+o[4]*t+o[8]*i,this.y=o[1]*e+o[5]*t+o[9]*i,this.z=o[2]*e+o[6]*t+o[10]*i,this.normalize()},divide:function(A){return this.x/=A.x,this.y/=A.y,this.z/=A.z,this},divideScalar:function(A){return this.multiplyScalar(1/A)},min:function(A){return this.x=Math.min(this.x,A.x),this.y=Math.min(this.y,A.y),this.z=Math.min(this.z,A.z),this},max:function(A){return this.x=Math.max(this.x,A.x),this.y=Math.max(this.y,A.y),this.z=Math.max(this.z,A.z),this},clamp:function(A,e){return this.x=Math.max(A.x,Math.min(e.x,this.x)),this.y=Math.max(A.y,Math.min(e.y,this.y)),this.z=Math.max(A.z,Math.min(e.z,this.z)),this},clampScalar:function(A,e){return this.x=Math.max(A,Math.min(e,this.x)),this.y=Math.max(A,Math.min(e,this.y)),this.z=Math.max(A,Math.min(e,this.z)),this},clampLength:function(A,e){var t=this.length();return this.divideScalar(t||1).multiplyScalar(Math.max(A,Math.min(e,t)))},floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this},ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this},round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this},roundToZero:function(){return this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x),this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y),this.z=0>this.z?Math.ceil(this.z):Math.floor(this.z),this},negate:function(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this},dot:function(A){return this.x*A.x+this.y*A.y+this.z*A.z},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)},normalize:function(){return this.divideScalar(this.length()||1)},setLength:function(A){return this.normalize().multiplyScalar(A)},lerp:function(A,e){return this.x+=(A.x-this.x)*e,this.y+=(A.y-this.y)*e,this.z+=(A.z-this.z)*e,this},lerpVectors:function(A,e,t){return this.subVectors(e,A).multiplyScalar(t).add(A)},cross:function(A,e){return void 0!==e?(console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(A,e)):this.crossVectors(this,A)},crossVectors:function(A,e){var t=A.x,i=A.y,o=A.z,n=e.x,r=e.y,a=e.z;return this.x=i*a-o*r,this.y=o*n-t*a,this.z=t*r-i*n,this},projectOnVector:function(A){var e=A.lengthSq();if(0===e)return this.set(0,0,0);var t=A.dot(this)/e;return this.copy(A).multiplyScalar(t)},projectOnPlane:function(A){return m.copy(this).projectOnVector(A),this.sub(m)},reflect:function(A){return this.sub(m.copy(A).multiplyScalar(2*this.dot(A)))},angleTo:function(A){var e=Math.sqrt(this.lengthSq()*A.lengthSq());if(0===e)return Math.PI/2;var t=this.dot(A)/e;return Math.acos(a.clamp(t,-1,1))},distanceTo:function(A){return Math.sqrt(this.distanceToSquared(A))},distanceToSquared:function(A){var e=this.x-A.x,t=this.y-A.y,i=this.z-A.z;return e*e+t*t+i*i},manhattanDistanceTo:function(A){return Math.abs(this.x-A.x)+Math.abs(this.y-A.y)+Math.abs(this.z-A.z)},setFromSpherical:function(A){return this.setFromSphericalCoords(A.radius,A.phi,A.theta)},setFromSphericalCoords:function(A,e,t){var i=Math.sin(e)*A;return this.x=i*Math.sin(t),this.y=Math.cos(e)*A,this.z=i*Math.cos(t),this},setFromCylindrical:function(A){return this.setFromCylindricalCoords(A.radius,A.theta,A.y)},setFromCylindricalCoords:function(A,e,t){return this.x=A*Math.sin(e),this.y=t,this.z=A*Math.cos(e),this},setFromMatrixPosition:function(A){var e=A.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this},setFromMatrixScale:function(A){var e=this.setFromMatrixColumn(A,0).length(),t=this.setFromMatrixColumn(A,1).length(),i=this.setFromMatrixColumn(A,2).length();return this.x=e,this.y=t,this.z=i,this},setFromMatrixColumn:function(A,e){return this.fromArray(A.elements,4*e)},setFromMatrix3Column:function(A,e){return this.fromArray(A.elements,3*e)},equals:function(A){return A.x===this.x&&A.y===this.y&&A.z===this.z},fromArray:function(A,e){return void 0===e&&(e=0),this.x=A[e],this.y=A[e+1],this.z=A[e+2],this},toArray:function(A,e){return void 0===A&&(A=[]),void 0===e&&(e=0),A[e]=this.x,A[e+1]=this.y,A[e+2]=this.z,A},fromBufferAttribute:function(A,e,t){return void 0!==t&&console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute()."),this.x=A.getX(e),this.y=A.getY(e),this.z=A.getZ(e),this}});var v=new y,I=new M,E=new y(0,0,0),B=new y(1,1,1),x=new y,S=new y,w=new y;function M(){this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],arguments.length>0&&console.error("THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.")}Object.assign(M.prototype,{isMatrix4:!0,set:function(A,e,t,i,o,n,r,a,s,l,c,h,d,p,g,u){var f=this.elements;return f[0]=A,f[4]=e,f[8]=t,f[12]=i,f[1]=o,f[5]=n,f[9]=r,f[13]=a,f[2]=s,f[6]=l,f[10]=c,f[14]=h,f[3]=d,f[7]=p,f[11]=g,f[15]=u,this},identity:function(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this},clone:function(){return(new M).fromArray(this.elements)},copy:function(A){var e=this.elements,t=A.elements;return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],this},copyPosition:function(A){var e=this.elements,t=A.elements;return e[12]=t[12],e[13]=t[13],e[14]=t[14],this},extractBasis:function(A,e,t){return A.setFromMatrixColumn(this,0),e.setFromMatrixColumn(this,1),t.setFromMatrixColumn(this,2),this},makeBasis:function(A,e,t){return this.set(A.x,e.x,t.x,0,A.y,e.y,t.y,0,A.z,e.z,t.z,0,0,0,0,1),this},extractRotation:function(A){var e=this.elements,t=A.elements,i=1/v.setFromMatrixColumn(A,0).length(),o=1/v.setFromMatrixColumn(A,1).length(),n=1/v.setFromMatrixColumn(A,2).length();return e[0]=t[0]*i,e[1]=t[1]*i,e[2]=t[2]*i,e[3]=0,e[4]=t[4]*o,e[5]=t[5]*o,e[6]=t[6]*o,e[7]=0,e[8]=t[8]*n,e[9]=t[9]*n,e[10]=t[10]*n,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this},makeRotationFromEuler:function(A){A&&A.isEuler||console.error("THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.");var e=this.elements,t=A.x,i=A.y,o=A.z,n=Math.cos(t),r=Math.sin(t),a=Math.cos(i),s=Math.sin(i),l=Math.cos(o),c=Math.sin(o);if("XYZ"===A.order){var h=n*l,d=n*c,p=r*l,g=r*c;e[0]=a*l,e[4]=-a*c,e[8]=s,e[1]=d+p*s,e[5]=h-g*s,e[9]=-r*a,e[2]=g-h*s,e[6]=p+d*s,e[10]=n*a}else if("YXZ"===A.order){var u=a*c,f=s*l;e[0]=(m=a*l)+(C=s*c)*r,e[4]=f*r-u,e[8]=n*s,e[1]=n*c,e[5]=n*l,e[9]=-r,e[2]=u*r-f,e[6]=C+m*r,e[10]=n*a}else if("ZXY"===A.order){var m,C;u=a*c,f=s*l;e[0]=(m=a*l)-(C=s*c)*r,e[4]=-n*c,e[8]=f+u*r,e[1]=u+f*r,e[5]=n*l,e[9]=C-m*r,e[2]=-n*s,e[6]=r,e[10]=n*a}else if("ZYX"===A.order){h=n*l,d=n*c,p=r*l,g=r*c;e[0]=a*l,e[4]=p*s-d,e[8]=h*s+g,e[1]=a*c,e[5]=g*s+h,e[9]=d*s-p,e[2]=-s,e[6]=r*a,e[10]=n*a}else if("YZX"===A.order){var y=n*a,v=n*s,I=r*a,E=r*s;e[0]=a*l,e[4]=E-y*c,e[8]=I*c+v,e[1]=c,e[5]=n*l,e[9]=-r*l,e[2]=-s*l,e[6]=v*c+I,e[10]=y-E*c}else if("XZY"===A.order){y=n*a,v=n*s,I=r*a,E=r*s;e[0]=a*l,e[4]=-c,e[8]=s*l,e[1]=y*c+E,e[5]=n*l,e[9]=v*c-I,e[2]=I*c-v,e[6]=r*l,e[10]=E*c+y}return e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this},makeRotationFromQuaternion:function(A){return this.compose(E,A,B)},lookAt:function(A,e,t){var i=this.elements;return w.subVectors(A,e),0===w.lengthSq()&&(w.z=1),w.normalize(),x.crossVectors(t,w),0===x.lengthSq()&&(1===Math.abs(t.z)?w.x+=1e-4:w.z+=1e-4,w.normalize(),x.crossVectors(t,w)),x.normalize(),S.crossVectors(w,x),i[0]=x.x,i[4]=S.x,i[8]=w.x,i[1]=x.y,i[5]=S.y,i[9]=w.y,i[2]=x.z,i[6]=S.z,i[10]=w.z,this},multiply:function(A,e){return void 0!==e?(console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."),this.multiplyMatrices(A,e)):this.multiplyMatrices(this,A)},premultiply:function(A){return this.multiplyMatrices(A,this)},multiplyMatrices:function(A,e){var t=A.elements,i=e.elements,o=this.elements,n=t[0],r=t[4],a=t[8],s=t[12],l=t[1],c=t[5],h=t[9],d=t[13],p=t[2],g=t[6],u=t[10],f=t[14],m=t[3],C=t[7],y=t[11],v=t[15],I=i[0],E=i[4],B=i[8],x=i[12],S=i[1],w=i[5],M=i[9],b=i[13],U=i[2],F=i[6],K=i[10],Q=i[14],R=i[3],T=i[7],k=i[11],D=i[15];return o[0]=n*I+r*S+a*U+s*R,o[4]=n*E+r*w+a*F+s*T,o[8]=n*B+r*M+a*K+s*k,o[12]=n*x+r*b+a*Q+s*D,o[1]=l*I+c*S+h*U+d*R,o[5]=l*E+c*w+h*F+d*T,o[9]=l*B+c*M+h*K+d*k,o[13]=l*x+c*b+h*Q+d*D,o[2]=p*I+g*S+u*U+f*R,o[6]=p*E+g*w+u*F+f*T,o[10]=p*B+g*M+u*K+f*k,o[14]=p*x+g*b+u*Q+f*D,o[3]=m*I+C*S+y*U+v*R,o[7]=m*E+C*w+y*F+v*T,o[11]=m*B+C*M+y*K+v*k,o[15]=m*x+C*b+y*Q+v*D,this},multiplyScalar:function(A){var e=this.elements;return e[0]*=A,e[4]*=A,e[8]*=A,e[12]*=A,e[1]*=A,e[5]*=A,e[9]*=A,e[13]*=A,e[2]*=A,e[6]*=A,e[10]*=A,e[14]*=A,e[3]*=A,e[7]*=A,e[11]*=A,e[15]*=A,this},determinant:function(){var A=this.elements,e=A[0],t=A[4],i=A[8],o=A[12],n=A[1],r=A[5],a=A[9],s=A[13],l=A[2],c=A[6],h=A[10],d=A[14];return A[3]*(+o*a*c-i*s*c-o*r*h+t*s*h+i*r*d-t*a*d)+A[7]*(+e*a*d-e*s*h+o*n*h-i*n*d+i*s*l-o*a*l)+A[11]*(+e*s*c-e*r*d-o*n*c+t*n*d+o*r*l-t*s*l)+A[15]*(-i*r*l-e*a*c+e*r*h+i*n*c-t*n*h+t*a*l)},transpose:function(){var A,e=this.elements;return A=e[1],e[1]=e[4],e[4]=A,A=e[2],e[2]=e[8],e[8]=A,A=e[6],e[6]=e[9],e[9]=A,A=e[3],e[3]=e[12],e[12]=A,A=e[7],e[7]=e[13],e[13]=A,A=e[11],e[11]=e[14],e[14]=A,this},setPosition:function(A,e,t){var i=this.elements;return A.isVector3?(i[12]=A.x,i[13]=A.y,i[14]=A.z):(i[12]=A,i[13]=e,i[14]=t),this},getInverse:function(A,e){void 0!==e&&console.warn("THREE.Matrix4: .getInverse() can no longer be configured to throw on degenerate.");var t=this.elements,i=A.elements,o=i[0],n=i[1],r=i[2],a=i[3],s=i[4],l=i[5],c=i[6],h=i[7],d=i[8],p=i[9],g=i[10],u=i[11],f=i[12],m=i[13],C=i[14],y=i[15],v=p*C*h-m*g*h+m*c*u-l*C*u-p*c*y+l*g*y,I=f*g*h-d*C*h-f*c*u+s*C*u+d*c*y-s*g*y,E=d*m*h-f*p*h+f*l*u-s*m*u-d*l*y+s*p*y,B=f*p*c-d*m*c-f*l*g+s*m*g+d*l*C-s*p*C,x=o*v+n*I+r*E+a*B;if(0===x)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);var S=1/x;return t[0]=v*S,t[1]=(m*g*a-p*C*a-m*r*u+n*C*u+p*r*y-n*g*y)*S,t[2]=(l*C*a-m*c*a+m*r*h-n*C*h-l*r*y+n*c*y)*S,t[3]=(p*c*a-l*g*a-p*r*h+n*g*h+l*r*u-n*c*u)*S,t[4]=I*S,t[5]=(d*C*a-f*g*a+f*r*u-o*C*u-d*r*y+o*g*y)*S,t[6]=(f*c*a-s*C*a-f*r*h+o*C*h+s*r*y-o*c*y)*S,t[7]=(s*g*a-d*c*a+d*r*h-o*g*h-s*r*u+o*c*u)*S,t[8]=E*S,t[9]=(f*p*a-d*m*a-f*n*u+o*m*u+d*n*y-o*p*y)*S,t[10]=(s*m*a-f*l*a+f*n*h-o*m*h-s*n*y+o*l*y)*S,t[11]=(d*l*a-s*p*a-d*n*h+o*p*h+s*n*u-o*l*u)*S,t[12]=B*S,t[13]=(d*m*r-f*p*r+f*n*g-o*m*g-d*n*C+o*p*C)*S,t[14]=(f*l*r-s*m*r-f*n*c+o*m*c+s*n*C-o*l*C)*S,t[15]=(s*p*r-d*l*r+d*n*c-o*p*c-s*n*g+o*l*g)*S,this},scale:function(A){var e=this.elements,t=A.x,i=A.y,o=A.z;return e[0]*=t,e[4]*=i,e[8]*=o,e[1]*=t,e[5]*=i,e[9]*=o,e[2]*=t,e[6]*=i,e[10]*=o,e[3]*=t,e[7]*=i,e[11]*=o,this},getMaxScaleOnAxis:function(){var A=this.elements;return Math.sqrt(Math.max(A[0]*A[0]+A[1]*A[1]+A[2]*A[2],A[4]*A[4]+A[5]*A[5]+A[6]*A[6],A[8]*A[8]+A[9]*A[9]+A[10]*A[10]))},makeTranslation:function(A,e,t){return this.set(1,0,0,A,0,1,0,e,0,0,1,t,0,0,0,1),this},makeRotationX:function(A){var e=Math.cos(A),t=Math.sin(A);return this.set(1,0,0,0,0,e,-t,0,0,t,e,0,0,0,0,1),this},makeRotationY:function(A){var e=Math.cos(A),t=Math.sin(A);return this.set(e,0,t,0,0,1,0,0,-t,0,e,0,0,0,0,1),this},makeRotationZ:function(A){var e=Math.cos(A),t=Math.sin(A);return this.set(e,-t,0,0,t,e,0,0,0,0,1,0,0,0,0,1),this},makeRotationAxis:function(A,e){var t=Math.cos(e),i=Math.sin(e),o=1-t,n=A.x,r=A.y,a=A.z,s=o*n,l=o*r;return this.set(s*n+t,s*r-i*a,s*a+i*r,0,s*r+i*a,l*r+t,l*a-i*n,0,s*a-i*r,l*a+i*n,o*a*a+t,0,0,0,0,1),this},makeScale:function(A,e,t){return this.set(A,0,0,0,0,e,0,0,0,0,t,0,0,0,0,1),this},makeShear:function(A,e,t){return this.set(1,e,t,0,A,1,t,0,A,e,1,0,0,0,0,1),this},compose:function(A,e,t){var i=this.elements,o=e._x,n=e._y,r=e._z,a=e._w,s=o+o,l=n+n,c=r+r,h=o*s,d=o*l,p=o*c,g=n*l,u=n*c,f=r*c,m=a*s,C=a*l,y=a*c,v=t.x,I=t.y,E=t.z;return i[0]=(1-(g+f))*v,i[1]=(d+y)*v,i[2]=(p-C)*v,i[3]=0,i[4]=(d-y)*I,i[5]=(1-(h+f))*I,i[6]=(u+m)*I,i[7]=0,i[8]=(p+C)*E,i[9]=(u-m)*E,i[10]=(1-(h+g))*E,i[11]=0,i[12]=A.x,i[13]=A.y,i[14]=A.z,i[15]=1,this},decompose:function(A,e,t){var i=this.elements,o=v.set(i[0],i[1],i[2]).length(),n=v.set(i[4],i[5],i[6]).length(),r=v.set(i[8],i[9],i[10]).length();0>this.determinant()&&(o=-o),A.x=i[12],A.y=i[13],A.z=i[14],I.copy(this);var a=1/o,s=1/n,l=1/r;return I.elements[0]*=a,I.elements[1]*=a,I.elements[2]*=a,I.elements[4]*=s,I.elements[5]*=s,I.elements[6]*=s,I.elements[8]*=l,I.elements[9]*=l,I.elements[10]*=l,e.setFromRotationMatrix(I),t.x=o,t.y=n,t.z=r,this},makePerspective:function(A,e,t,i,o,n){void 0===n&&console.warn("THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.");var r=this.elements,a=2*o/(t-i),s=(e+A)/(e-A),l=(t+i)/(t-i),c=-(n+o)/(n-o),h=-2*n*o/(n-o);return r[0]=2*o/(e-A),r[4]=0,r[8]=s,r[12]=0,r[1]=0,r[5]=a,r[9]=l,r[13]=0,r[2]=0,r[6]=0,r[10]=c,r[14]=h,r[3]=0,r[7]=0,r[11]=-1,r[15]=0,this},makeOrthographic:function(A,e,t,i,o,n){var r=this.elements,a=1/(e-A),s=1/(t-i),l=1/(n-o),c=(e+A)*a,h=(t+i)*s,d=(n+o)*l;return r[0]=2*a,r[4]=0,r[8]=0,r[12]=-c,r[1]=0,r[5]=2*s,r[9]=0,r[13]=-h,r[2]=0,r[6]=0,r[10]=-2*l,r[14]=-d,r[3]=0,r[7]=0,r[11]=0,r[15]=1,this},equals:function(A){for(var e=this.elements,t=A.elements,i=0;16>i;i++)if(e[i]!==t[i])return!1;return!0},fromArray:function(A,e){void 0===e&&(e=0);for(var t=0;16>t;t++)this.elements[t]=A[t+e];return this},toArray:function(A,e){void 0===A&&(A=[]),void 0===e&&(e=0);var t=this.elements;return A[e]=t[0],A[e+1]=t[1],A[e+2]=t[2],A[e+3]=t[3],A[e+4]=t[4],A[e+5]=t[5],A[e+6]=t[6],A[e+7]=t[7],A[e+8]=t[8],A[e+9]=t[9],A[e+10]=t[10],A[e+11]=t[11],A[e+12]=t[12],A[e+13]=t[13],A[e+14]=t[14],A[e+15]=t[15],A}});var b=new M,U=new f;function F(A,e,t,i){this._x=A||0,this._y=e||0,this._z=t||0,this._order=i||F.DefaultOrder}function K(){this.mask=1}F.RotationOrders=["XYZ","YZX","ZXY","XZY","YXZ","ZYX"],F.DefaultOrder="XYZ",Object.defineProperties(F.prototype,{x:{get:function(){return this._x},set:function(A){this._x=A,this._onChangeCallback()}},y:{get:function(){return this._y},set:function(A){this._y=A,this._onChangeCallback()}},z:{get:function(){return this._z},set:function(A){this._z=A,this._onChangeCallback()}},order:{get:function(){return this._order},set:function(A){this._order=A,this._onChangeCallback()}}}),Object.assign(F.prototype,{isEuler:!0,set:function(A,e,t,i){return this._x=A,this._y=e,this._z=t,this._order=i||this._order,this._onChangeCallback(),this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._order)},copy:function(A){return this._x=A._x,this._y=A._y,this._z=A._z,this._order=A._order,this._onChangeCallback(),this},setFromRotationMatrix:function(A,e,t){var i=a.clamp,o=A.elements,n=o[0],r=o[4],s=o[8],l=o[1],c=o[5],h=o[9],d=o[2],p=o[6],g=o[10];return"XYZ"===(e=e||this._order)?(this._y=Math.asin(i(s,-1,1)),.9999999>Math.abs(s)?(this._x=Math.atan2(-h,g),this._z=Math.atan2(-r,n)):(this._x=Math.atan2(p,c),this._z=0)):"YXZ"===e?(this._x=Math.asin(-i(h,-1,1)),.9999999>Math.abs(h)?(this._y=Math.atan2(s,g),this._z=Math.atan2(l,c)):(this._y=Math.atan2(-d,n),this._z=0)):"ZXY"===e?(this._x=Math.asin(i(p,-1,1)),.9999999>Math.abs(p)?(this._y=Math.atan2(-d,g),this._z=Math.atan2(-r,c)):(this._y=0,this._z=Math.atan2(l,n))):"ZYX"===e?(this._y=Math.asin(-i(d,-1,1)),.9999999>Math.abs(d)?(this._x=Math.atan2(p,g),this._z=Math.atan2(l,n)):(this._x=0,this._z=Math.atan2(-r,c))):"YZX"===e?(this._z=Math.asin(i(l,-1,1)),.9999999>Math.abs(l)?(this._x=Math.atan2(-h,c),this._y=Math.atan2(-d,n)):(this._x=0,this._y=Math.atan2(s,g))):"XZY"===e?(this._z=Math.asin(-i(r,-1,1)),.9999999>Math.abs(r)?(this._x=Math.atan2(p,c),this._y=Math.atan2(s,n)):(this._x=Math.atan2(-h,g),this._y=0)):console.warn("THREE.Euler: .setFromRotationMatrix() given unsupported order: "+e),this._order=e,!1!==t&&this._onChangeCallback(),this},setFromQuaternion:function(A,e,t){return b.makeRotationFromQuaternion(A),this.setFromRotationMatrix(b,e,t)},setFromVector3:function(A,e){return this.set(A.x,A.y,A.z,e||this._order)},reorder:function(A){return U.setFromEuler(this),this.setFromQuaternion(U,A)},equals:function(A){return A._x===this._x&&A._y===this._y&&A._z===this._z&&A._order===this._order},fromArray:function(A){return this._x=A[0],this._y=A[1],this._z=A[2],void 0!==A[3]&&(this._order=A[3]),this._onChangeCallback(),this},toArray:function(A,e){return void 0===A&&(A=[]),void 0===e&&(e=0),A[e]=this._x,A[e+1]=this._y,A[e+2]=this._z,A[e+3]=this._order,A},toVector3:function(A){return A?A.set(this._x,this._y,this._z):new y(this._x,this._y,this._z)},_onChange:function(A){return this._onChangeCallback=A,this},_onChangeCallback:function(){}}),Object.assign(K.prototype,{set:function(A){this.mask=1<1){for(var e=0;arguments.length>e;e++)this.add(arguments[e]);return this}return A===this?(console.error("THREE.Object3D.add: object can't be added as a child of itself.",A),this):(A&&A.isObject3D?(null!==A.parent&&A.parent.remove(A),A.parent=this,this.children.push(A),A.dispatchEvent(q)):console.error("THREE.Object3D.add: object not an instance of THREE.Object3D.",A),this)},remove:function(A){if(arguments.length>1){for(var e=0;arguments.length>e;e++)this.remove(arguments[e]);return this}var t=this.children.indexOf(A);return-1!==t&&(A.parent=null,this.children.splice(t,1),A.dispatchEvent(j)),this},attach:function(A){return this.updateWorldMatrix(!0,!1),k.getInverse(this.matrixWorld),null!==A.parent&&(A.parent.updateWorldMatrix(!0,!1),k.multiply(A.parent.matrixWorld)),A.applyMatrix4(k),A.updateWorldMatrix(!1,!1),this.add(A),this},getObjectById:function(A){return this.getObjectByProperty("id",A)},getObjectByName:function(A){return this.getObjectByProperty("name",A)},getObjectByProperty:function(A,e){if(this[A]===e)return this;for(var t=0,i=this.children.length;i>t;t++){var o=this.children[t].getObjectByProperty(A,e);if(void 0!==o)return o}},getWorldPosition:function(A){return void 0===A&&(console.warn("THREE.Object3D: .getWorldPosition() target is now required"),A=new y),this.updateMatrixWorld(!0),A.setFromMatrixPosition(this.matrixWorld)},getWorldQuaternion:function(A){return void 0===A&&(console.warn("THREE.Object3D: .getWorldQuaternion() target is now required"),A=new f),this.updateMatrixWorld(!0),this.matrixWorld.decompose(L,A,N),A},getWorldScale:function(A){return void 0===A&&(console.warn("THREE.Object3D: .getWorldScale() target is now required"),A=new y),this.updateMatrixWorld(!0),this.matrixWorld.decompose(L,O,A),A},getWorldDirection:function(A){void 0===A&&(console.warn("THREE.Object3D: .getWorldDirection() target is now required"),A=new y),this.updateMatrixWorld(!0);var e=this.matrixWorld.elements;return A.set(e[8],e[9],e[10]).normalize()},raycast:function(){},traverse:function(A){A(this);for(var e=this.children,t=0,i=e.length;i>t;t++)e[t].traverse(A)},traverseVisible:function(A){if(!1!==this.visible){A(this);for(var e=this.children,t=0,i=e.length;i>t;t++)e[t].traverseVisible(A)}},traverseAncestors:function(A){var e=this.parent;null!==e&&(A(e),e.traverseAncestors(A))},updateMatrix:function(){this.matrix.compose(this.position,this.quaternion,this.scale),this.matrixWorldNeedsUpdate=!0},updateMatrixWorld:function(A){this.matrixAutoUpdate&&this.updateMatrix(),(this.matrixWorldNeedsUpdate||A)&&(null===this.parent?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix),this.matrixWorldNeedsUpdate=!1,A=!0);for(var e=this.children,t=0,i=e.length;i>t;t++)e[t].updateMatrixWorld(A)},updateWorldMatrix:function(A,e){var t=this.parent;if(!0===A&&null!==t&&t.updateWorldMatrix(!0,!1),this.matrixAutoUpdate&&this.updateMatrix(),null===this.parent?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix),!0===e)for(var i=this.children,o=0,n=i.length;n>o;o++)i[o].updateWorldMatrix(!1,!0)},toJSON:function(A){var e=void 0===A||"string"==typeof A,t={};e&&(A={geometries:{},materials:{},textures:{},images:{},shapes:{}},t.metadata={version:4.5,type:"Object",generator:"Object3D.toJSON"});var i={};function o(e,t){return void 0===e[t.uuid]&&(e[t.uuid]=t.toJSON(A)),t.uuid}if(i.uuid=this.uuid,i.type=this.type,""!==this.name&&(i.name=this.name),!0===this.castShadow&&(i.castShadow=!0),!0===this.receiveShadow&&(i.receiveShadow=!0),!1===this.visible&&(i.visible=!1),!1===this.frustumCulled&&(i.frustumCulled=!1),0!==this.renderOrder&&(i.renderOrder=this.renderOrder),"{}"!==JSON.stringify(this.userData)&&(i.userData=this.userData),i.layers=this.layers.mask,i.matrix=this.matrix.toArray(),!1===this.matrixAutoUpdate&&(i.matrixAutoUpdate=!1),this.isInstancedMesh&&(i.type="InstancedMesh",i.count=this.count,i.instanceMatrix=this.instanceMatrix.toJSON()),this.isMesh||this.isLine||this.isPoints){i.geometry=o(A.geometries,this.geometry);var n=this.geometry.parameters;if(void 0!==n&&void 0!==n.shapes){var r=n.shapes;if(Array.isArray(r))for(var a=0,s=r.length;s>a;a++){o(A.shapes,r[a])}else o(A.shapes,r)}}if(void 0!==this.material)if(Array.isArray(this.material)){var l=[];for(a=0,s=this.material.length;s>a;a++)l.push(o(A.materials,this.material[a]));i.material=l}else i.material=o(A.materials,this.material);if(this.children.length>0){i.children=[];for(a=0;this.children.length>a;a++)i.children.push(this.children[a].toJSON(A).object)}if(e){var c=g(A.geometries),h=g(A.materials),d=g(A.textures),p=g(A.images);r=g(A.shapes);c.length>0&&(t.geometries=c),h.length>0&&(t.materials=h),d.length>0&&(t.textures=d),p.length>0&&(t.images=p),r.length>0&&(t.shapes=r)}return t.object=i,t;function g(A){var e=[];for(var t in A){var i=A[t];delete i.metadata,e.push(i)}return e}},clone:function(A){return(new this.constructor).copy(this,A)},copy:function(A,e){if(void 0===e&&(e=!0),this.name=A.name,this.up.copy(A.up),this.position.copy(A.position),this.quaternion.copy(A.quaternion),this.scale.copy(A.scale),this.matrix.copy(A.matrix),this.matrixWorld.copy(A.matrixWorld),this.matrixAutoUpdate=A.matrixAutoUpdate,this.matrixWorldNeedsUpdate=A.matrixWorldNeedsUpdate,this.layers.mask=A.layers.mask,this.visible=A.visible,this.castShadow=A.castShadow,this.receiveShadow=A.receiveShadow,this.frustumCulled=A.frustumCulled,this.renderOrder=A.renderOrder,this.userData=JSON.parse(JSON.stringify(A.userData)),!0===e)for(var t=0;A.children.length>t;t++){this.add(A.children[t].clone())}return this}}),Y.prototype=Object.assign(Object.create(H.prototype),{constructor:Y,isScene:!0,copy:function(A,e){return H.prototype.copy.call(this,A,e),null!==A.background&&(this.background=A.background.clone()),null!==A.environment&&(this.environment=A.environment.clone()),null!==A.fog&&(this.fog=A.fog.clone()),null!==A.overrideMaterial&&(this.overrideMaterial=A.overrideMaterial.clone()),this.autoUpdate=A.autoUpdate,this.matrixAutoUpdate=A.matrixAutoUpdate,this},toJSON:function(A){var e=H.prototype.toJSON.call(this,A);return null!==this.background&&(e.object.background=this.background.toJSON(A)),null!==this.environment&&(e.object.environment=this.environment.toJSON(A)),null!==this.fog&&(e.object.fog=this.fog.toJSON()),e},dispose:function(){this.dispatchEvent({type:"dispose"})}});var W=[new y,new y,new y,new y,new y,new y,new y,new y],J=new y,z=new aA,Z=new y,X=new y,_=new y,AA=new y,eA=new y,tA=new y,iA=new y,oA=new y,nA=new y,rA=new y;function aA(A,e){this.min=void 0!==A?A:new y(1/0,1/0,1/0),this.max=void 0!==e?e:new y(-1/0,-1/0,-1/0)}function sA(A,e,t,i,o){var n,r;for(n=0,r=A.length-3;r>=n;n+=3){rA.fromArray(A,n);var a=o.x*Math.abs(rA.x)+o.y*Math.abs(rA.y)+o.z*Math.abs(rA.z),s=e.dot(rA),l=t.dot(rA),c=i.dot(rA);if(Math.max(-Math.max(s,l,c),Math.min(s,l,c))>a)return!1}return!0}Object.assign(aA.prototype,{isBox3:!0,set:function(A,e){return this.min.copy(A),this.max.copy(e),this},setFromArray:function(A){for(var e=1/0,t=1/0,i=1/0,o=-1/0,n=-1/0,r=-1/0,a=0,s=A.length;s>a;a+=3){var l=A[a],c=A[a+1],h=A[a+2];e>l&&(e=l),t>c&&(t=c),i>h&&(i=h),l>o&&(o=l),c>n&&(n=c),h>r&&(r=h)}return this.min.set(e,t,i),this.max.set(o,n,r),this},setFromBufferAttribute:function(A){for(var e=1/0,t=1/0,i=1/0,o=-1/0,n=-1/0,r=-1/0,a=0,s=A.count;s>a;a++){var l=A.getX(a),c=A.getY(a),h=A.getZ(a);e>l&&(e=l),t>c&&(t=c),i>h&&(i=h),l>o&&(o=l),c>n&&(n=c),h>r&&(r=h)}return this.min.set(e,t,i),this.max.set(o,n,r),this},setFromPoints:function(A){this.makeEmpty();for(var e=0,t=A.length;t>e;e++)this.expandByPoint(A[e]);return this},setFromCenterAndSize:function(A,e){var t=J.copy(e).multiplyScalar(.5);return this.min.copy(A).sub(t),this.max.copy(A).add(t),this},setFromObject:function(A){return this.makeEmpty(),this.expandByObject(A)},clone:function(){return(new this.constructor).copy(this)},copy:function(A){return this.min.copy(A.min),this.max.copy(A.max),this},makeEmpty:function(){return this.min.x=this.min.y=this.min.z=1/0,this.max.x=this.max.y=this.max.z=-1/0,this},isEmpty:function(){return this.min.x>this.max.x||this.min.y>this.max.y||this.min.z>this.max.z},getCenter:function(A){return void 0===A&&(console.warn("THREE.Box3: .getCenter() target is now required"),A=new y),this.isEmpty()?A.set(0,0,0):A.addVectors(this.min,this.max).multiplyScalar(.5)},getSize:function(A){return void 0===A&&(console.warn("THREE.Box3: .getSize() target is now required"),A=new y),this.isEmpty()?A.set(0,0,0):A.subVectors(this.max,this.min)},expandByPoint:function(A){return this.min.min(A),this.max.max(A),this},expandByVector:function(A){return this.min.sub(A),this.max.add(A),this},expandByScalar:function(A){return this.min.addScalar(-A),this.max.addScalar(A),this},expandByObject:function(A){A.updateWorldMatrix(!1,!1);var e=A.geometry;void 0!==e&&(null===e.boundingBox&&e.computeBoundingBox(),z.copy(e.boundingBox),z.applyMatrix4(A.matrixWorld),this.union(z));for(var t=A.children,i=0,o=t.length;o>i;i++)this.expandByObject(t[i]);return this},containsPoint:function(A){return!(this.min.x>A.x||A.x>this.max.x||this.min.y>A.y||A.y>this.max.y||this.min.z>A.z||A.z>this.max.z)},containsBox:function(A){return!(this.min.x>A.min.x||A.max.x>this.max.x||this.min.y>A.min.y||A.max.y>this.max.y||this.min.z>A.min.z||A.max.z>this.max.z)},getParameter:function(A,e){return void 0===e&&(console.warn("THREE.Box3: .getParameter() target is now required"),e=new y),e.set((A.x-this.min.x)/(this.max.x-this.min.x),(A.y-this.min.y)/(this.max.y-this.min.y),(A.z-this.min.z)/(this.max.z-this.min.z))},intersectsBox:function(A){return!(this.min.x>A.max.x||A.min.x>this.max.x||this.min.y>A.max.y||A.min.y>this.max.y||this.min.z>A.max.z||A.min.z>this.max.z)},intersectsSphere:function(A){return this.clampPoint(A.center,J),J.distanceToSquared(A.center)<=A.radius*A.radius},intersectsPlane:function(A){var e,t;return A.normal.x>0?(e=A.normal.x*this.min.x,t=A.normal.x*this.max.x):(e=A.normal.x*this.max.x,t=A.normal.x*this.min.x),A.normal.y>0?(e+=A.normal.y*this.min.y,t+=A.normal.y*this.max.y):(e+=A.normal.y*this.max.y,t+=A.normal.y*this.min.y),A.normal.z>0?(e+=A.normal.z*this.min.z,t+=A.normal.z*this.max.z):(e+=A.normal.z*this.max.z,t+=A.normal.z*this.min.z),-A.constant>=e&&t>=-A.constant},intersectsTriangle:function(A){if(this.isEmpty())return!1;this.getCenter(iA),oA.subVectors(this.max,iA),Z.subVectors(A.a,iA),X.subVectors(A.b,iA),_.subVectors(A.c,iA),AA.subVectors(X,Z),eA.subVectors(_,X),tA.subVectors(Z,_);var e=[0,-AA.z,AA.y,0,-eA.z,eA.y,0,-tA.z,tA.y,AA.z,0,-AA.x,eA.z,0,-eA.x,tA.z,0,-tA.x,-AA.y,AA.x,0,-eA.y,eA.x,0,-tA.y,tA.x,0];return!!sA(e,Z,X,_,oA)&&(!!sA(e=[1,0,0,0,1,0,0,0,1],Z,X,_,oA)&&(nA.crossVectors(AA,eA),sA(e=[nA.x,nA.y,nA.z],Z,X,_,oA)))},clampPoint:function(A,e){return void 0===e&&(console.warn("THREE.Box3: .clampPoint() target is now required"),e=new y),e.copy(A).clamp(this.min,this.max)},distanceToPoint:function(A){return J.copy(A).clamp(this.min,this.max).sub(A).length()},getBoundingSphere:function(A){return void 0===A&&console.error("THREE.Box3: .getBoundingSphere() target is now required"),this.getCenter(A.center),A.radius=.5*this.getSize(J).length(),A},intersect:function(A){return this.min.max(A.min),this.max.min(A.max),this.isEmpty()&&this.makeEmpty(),this},union:function(A){return this.min.min(A.min),this.max.max(A.max),this},applyMatrix4:function(A){return this.isEmpty()||(W[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(A),W[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(A),W[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(A),W[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(A),W[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(A),W[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(A),W[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(A),W[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(A),this.setFromPoints(W)),this},translate:function(A){return this.min.add(A),this.max.add(A),this},equals:function(A){return A.min.equals(this.min)&&A.max.equals(this.max)}});var lA=new aA;function cA(A,e){this.center=void 0!==A?A:new y,this.radius=void 0!==e?e:0}Object.assign(cA.prototype,{set:function(A,e){return this.center.copy(A),this.radius=e,this},setFromPoints:function(A,e){var t=this.center;void 0!==e?t.copy(e):lA.setFromPoints(A).getCenter(t);for(var i=0,o=0,n=A.length;n>o;o++)i=Math.max(i,t.distanceToSquared(A[o]));return this.radius=Math.sqrt(i),this},clone:function(){return(new this.constructor).copy(this)},copy:function(A){return this.center.copy(A.center),this.radius=A.radius,this},empty:function(){return 0>=this.radius},containsPoint:function(A){return A.distanceToSquared(this.center)<=this.radius*this.radius},distanceToPoint:function(A){return A.distanceTo(this.center)-this.radius},intersectsSphere:function(A){var e=this.radius+A.radius;return A.center.distanceToSquared(this.center)<=e*e},intersectsBox:function(A){return A.intersectsSphere(this)},intersectsPlane:function(A){return Math.abs(A.distanceToPoint(this.center))<=this.radius},clampPoint:function(A,e){var t=this.center.distanceToSquared(A);return void 0===e&&(console.warn("THREE.Sphere: .clampPoint() target is now required"),e=new y),e.copy(A),t>this.radius*this.radius&&(e.sub(this.center).normalize(),e.multiplyScalar(this.radius).add(this.center)),e},getBoundingBox:function(A){return void 0===A&&(console.warn("THREE.Sphere: .getBoundingBox() target is now required"),A=new aA),A.set(this.center,this.center),A.expandByScalar(this.radius),A},applyMatrix4:function(A){return this.center.applyMatrix4(A),this.radius=this.radius*A.getMaxScaleOnAxis(),this},translate:function(A){return this.center.add(A),this},equals:function(A){return A.center.equals(this.center)&&A.radius===this.radius}});var hA=new y,dA=new y,pA=new y,gA=new y,uA=new y,fA=new y,mA=new y;function CA(A,e){this.origin=void 0!==A?A:new y,this.direction=void 0!==e?e:new y(0,0,-1)}Object.assign(CA.prototype,{set:function(A,e){return this.origin.copy(A),this.direction.copy(e),this},clone:function(){return(new this.constructor).copy(this)},copy:function(A){return this.origin.copy(A.origin),this.direction.copy(A.direction),this},at:function(A,e){return void 0===e&&(console.warn("THREE.Ray: .at() target is now required"),e=new y),e.copy(this.direction).multiplyScalar(A).add(this.origin)},lookAt:function(A){return this.direction.copy(A).sub(this.origin).normalize(),this},recast:function(A){return this.origin.copy(this.at(A,hA)),this},closestPointToPoint:function(A,e){void 0===e&&(console.warn("THREE.Ray: .closestPointToPoint() target is now required"),e=new y),e.subVectors(A,this.origin);var t=e.dot(this.direction);return 0>t?e.copy(this.origin):e.copy(this.direction).multiplyScalar(t).add(this.origin)},distanceToPoint:function(A){return Math.sqrt(this.distanceSqToPoint(A))},distanceSqToPoint:function(A){var e=hA.subVectors(A,this.origin).dot(this.direction);return 0>e?this.origin.distanceToSquared(A):(hA.copy(this.direction).multiplyScalar(e).add(this.origin),hA.distanceToSquared(A))},distanceSqToSegment:function(A,e,t,i){dA.copy(A).add(e).multiplyScalar(.5),pA.copy(e).sub(A).normalize(),gA.copy(this.origin).sub(dA);var o,n,r,a,s=.5*A.distanceTo(e),l=-this.direction.dot(pA),c=gA.dot(this.direction),h=-gA.dot(pA),d=gA.lengthSq(),p=Math.abs(1-l*l);if(p>0)if(n=l*c-h,a=s*p,0>(o=l*h-c))n>-a?n>a?r=-(o=Math.max(0,-(l*s+c)))*o+(n=o>0?s:Math.min(Math.max(-s,-h),s))*(n+2*h)+d:(o=0,r=(n=Math.min(Math.max(-s,-h),s))*(n+2*h)+d):r=-(o=Math.max(0,-(-l*s+c)))*o+(n=o>0?-s:Math.min(Math.max(-s,-h),s))*(n+2*h)+d;else if(n<-a)n=-s,r=-(o=Math.max(0,-(l*n+c)))*o+n*(n+2*h)+d;else if(a0?-s:s,r=-(o=Math.max(0,-(l*n+c)))*o+n*(n+2*h)+d;return t&&t.copy(this.direction).multiplyScalar(o).add(this.origin),i&&i.copy(pA).multiplyScalar(n).add(dA),r},intersectSphere:function(A,e){hA.subVectors(A.center,this.origin);var t=hA.dot(this.direction),i=hA.dot(hA)-t*t,o=A.radius*A.radius;if(i>o)return null;var n=Math.sqrt(o-i),r=t-n,a=t+n;return 0>r&&0>a?null:this.at(0>r?a:r,e)},intersectsSphere:function(A){return this.distanceSqToPoint(A.center)<=A.radius*A.radius},distanceToPlane:function(A){var e=A.normal.dot(this.direction);if(0===e)return 0===A.distanceToPoint(this.origin)?0:null;var t=-(this.origin.dot(A.normal)+A.constant)/e;return 0>t?null:t},intersectPlane:function(A,e){var t=this.distanceToPlane(A);return null===t?null:this.at(t,e)},intersectsPlane:function(A){var e=A.distanceToPoint(this.origin);return 0===e||0>A.normal.dot(this.direction)*e},intersectBox:function(A,e){var t,i,o,n,r,a,s=1/this.direction.x,l=1/this.direction.y,c=1/this.direction.z,h=this.origin;return 0>s?(t=(A.max.x-h.x)*s,i=(A.min.x-h.x)*s):(t=(A.min.x-h.x)*s,i=(A.max.x-h.x)*s),0>l?(o=(A.max.y-h.y)*l,n=(A.min.y-h.y)*l):(o=(A.min.y-h.y)*l,n=(A.max.y-h.y)*l),t>n||o>i?null:((o>t||t!=t)&&(t=o),(i>n||i!=i)&&(i=n),0>c?(r=(A.max.z-h.z)*c,a=(A.min.z-h.z)*c):(r=(A.min.z-h.z)*c,a=(A.max.z-h.z)*c),t>a||r>i?null:((r>t||t!=t)&&(t=r),(i>a||i!=i)&&(i=a),0>i?null:this.at(0>t?i:t,e)))},intersectsBox:function(A){return null!==this.intersectBox(A,hA)},intersectTriangle:function(A,e,t,i,o){uA.subVectors(e,A),fA.subVectors(t,A),mA.crossVectors(uA,fA);var n,r=this.direction.dot(mA);if(r>0){if(i)return null;n=1}else{if(r>=0)return null;n=-1,r=-r}gA.subVectors(this.origin,A);var a=n*this.direction.dot(fA.crossVectors(gA,fA));if(0>a)return null;var s=n*this.direction.dot(uA.cross(gA));if(0>s)return null;if(a+s>r)return null;var l=-n*gA.dot(mA);return 0>l?null:this.at(l/r,o)},applyMatrix4:function(A){return this.origin.applyMatrix4(A),this.direction.transformDirection(A),this},equals:function(A){return A.origin.equals(this.origin)&&A.direction.equals(this.direction)}});var yA=new y,vA=new y,IA=new l;function EA(A,e){this.normal=void 0!==A?A:new y(1,0,0),this.constant=void 0!==e?e:0}Object.assign(EA.prototype,{isPlane:!0,set:function(A,e){return this.normal.copy(A),this.constant=e,this},setComponents:function(A,e,t,i){return this.normal.set(A,e,t),this.constant=i,this},setFromNormalAndCoplanarPoint:function(A,e){return this.normal.copy(A),this.constant=-e.dot(this.normal),this},setFromCoplanarPoints:function(A,e,t){var i=yA.subVectors(t,e).cross(vA.subVectors(A,e)).normalize();return this.setFromNormalAndCoplanarPoint(i,A),this},clone:function(){return(new this.constructor).copy(this)},copy:function(A){return this.normal.copy(A.normal),this.constant=A.constant,this},normalize:function(){var A=1/this.normal.length();return this.normal.multiplyScalar(A),this.constant*=A,this},negate:function(){return this.constant*=-1,this.normal.negate(),this},distanceToPoint:function(A){return this.normal.dot(A)+this.constant},distanceToSphere:function(A){return this.distanceToPoint(A.center)-A.radius},projectPoint:function(A,e){return void 0===e&&(console.warn("THREE.Plane: .projectPoint() target is now required"),e=new y),e.copy(this.normal).multiplyScalar(-this.distanceToPoint(A)).add(A)},intersectLine:function(A,e){void 0===e&&(console.warn("THREE.Plane: .intersectLine() target is now required"),e=new y);var t=A.delta(yA),i=this.normal.dot(t);if(0===i)return 0===this.distanceToPoint(A.start)?e.copy(A.start):void 0;var o=-(A.start.dot(this.normal)+this.constant)/i;return 0>o||o>1?void 0:e.copy(t).multiplyScalar(o).add(A.start)},intersectsLine:function(A){var e=this.distanceToPoint(A.start),t=this.distanceToPoint(A.end);return 0>e&&t>0||0>t&&e>0},intersectsBox:function(A){return A.intersectsPlane(this)},intersectsSphere:function(A){return A.intersectsPlane(this)},coplanarPoint:function(A){return void 0===A&&(console.warn("THREE.Plane: .coplanarPoint() target is now required"),A=new y),A.copy(this.normal).multiplyScalar(-this.constant)},applyMatrix4:function(A,e){var t=e||IA.getNormalMatrix(A),i=this.coplanarPoint(yA).applyMatrix4(A),o=this.normal.applyMatrix3(t).normalize();return this.constant=-i.dot(o),this},translate:function(A){return this.constant-=A.dot(this.normal),this},equals:function(A){return A.normal.equals(this.normal)&&A.constant===this.constant}});var BA=new y,xA=new y,SA=new y,wA=new y,MA=new y,bA=new y,UA=new y,FA=new y,KA=new y,QA=new y;function RA(A,e,t){this.a=void 0!==A?A:new y,this.b=void 0!==e?e:new y,this.c=void 0!==t?t:new y}Object.assign(RA,{getNormal:function(A,e,t,i){void 0===i&&(console.warn("THREE.Triangle: .getNormal() target is now required"),i=new y),i.subVectors(t,e),BA.subVectors(A,e),i.cross(BA);var o=i.lengthSq();return o>0?i.multiplyScalar(1/Math.sqrt(o)):i.set(0,0,0)},getBarycoord:function(A,e,t,i,o){BA.subVectors(i,e),xA.subVectors(t,e),SA.subVectors(A,e);var n=BA.dot(BA),r=BA.dot(xA),a=BA.dot(SA),s=xA.dot(xA),l=xA.dot(SA),c=n*s-r*r;if(void 0===o&&(console.warn("THREE.Triangle: .getBarycoord() target is now required"),o=new y),0===c)return o.set(-2,-1,-1);var h=1/c,d=(s*a-r*l)*h,p=(n*l-r*a)*h;return o.set(1-d-p,p,d)},containsPoint:function(A,e,t,i){return RA.getBarycoord(A,e,t,i,wA),wA.x>=0&&wA.y>=0&&1>=wA.x+wA.y},getUV:function(A,e,t,i,o,n,r,a){return this.getBarycoord(A,e,t,i,wA),a.set(0,0),a.addScaledVector(o,wA.x),a.addScaledVector(n,wA.y),a.addScaledVector(r,wA.z),a},isFrontFacing:function(A,e,t,i){return BA.subVectors(t,e),xA.subVectors(A,e),0>BA.cross(xA).dot(i)}}),Object.assign(RA.prototype,{set:function(A,e,t){return this.a.copy(A),this.b.copy(e),this.c.copy(t),this},setFromPointsAndIndices:function(A,e,t,i){return this.a.copy(A[e]),this.b.copy(A[t]),this.c.copy(A[i]),this},clone:function(){return(new this.constructor).copy(this)},copy:function(A){return this.a.copy(A.a),this.b.copy(A.b),this.c.copy(A.c),this},getArea:function(){return BA.subVectors(this.c,this.b),xA.subVectors(this.a,this.b),.5*BA.cross(xA).length()},getMidpoint:function(A){return void 0===A&&(console.warn("THREE.Triangle: .getMidpoint() target is now required"),A=new y),A.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)},getNormal:function(A){return RA.getNormal(this.a,this.b,this.c,A)},getPlane:function(A){return void 0===A&&(console.warn("THREE.Triangle: .getPlane() target is now required"),A=new EA),A.setFromCoplanarPoints(this.a,this.b,this.c)},getBarycoord:function(A,e){return RA.getBarycoord(A,this.a,this.b,this.c,e)},getUV:function(A,e,t,i,o){return RA.getUV(A,this.a,this.b,this.c,e,t,i,o)},containsPoint:function(A){return RA.containsPoint(A,this.a,this.b,this.c)},isFrontFacing:function(A){return RA.isFrontFacing(this.a,this.b,this.c,A)},intersectsBox:function(A){return A.intersectsTriangle(this)},closestPointToPoint:function(A,e){void 0===e&&(console.warn("THREE.Triangle: .closestPointToPoint() target is now required"),e=new y);var t,i,o=this.a,n=this.b,r=this.c;MA.subVectors(n,o),bA.subVectors(r,o),FA.subVectors(A,o);var a=MA.dot(FA),s=bA.dot(FA);if(0>=a&&0>=s)return e.copy(o);KA.subVectors(A,n);var l=MA.dot(KA),c=bA.dot(KA);if(l>=0&&l>=c)return e.copy(n);var h=a*c-l*s;if(0>=h&&a>=0&&0>=l)return t=a/(a-l),e.copy(o).addScaledVector(MA,t);QA.subVectors(A,r);var d=MA.dot(QA),p=bA.dot(QA);if(p>=0&&p>=d)return e.copy(r);var g=d*s-a*p;if(0>=g&&s>=0&&0>=p)return i=s/(s-p),e.copy(o).addScaledVector(bA,i);var u=l*p-d*c;if(0>=u&&c-l>=0&&d-p>=0)return UA.subVectors(r,n),i=(c-l)/(c-l+(d-p)),e.copy(n).addScaledVector(UA,i);var f=1/(u+g+h);return t=g*f,i=h*f,e.copy(o).addScaledVector(MA,t).addScaledVector(bA,i)},equals:function(A){return A.a.equals(this.a)&&A.b.equals(this.b)&&A.c.equals(this.c)}});var TA={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},kA={h:0,s:0,l:0},DA={h:0,s:0,l:0};function LA(A,e,t){return void 0===e&&void 0===t?this.set(A):this.setRGB(A,e,t)}function NA(A,e,t){return 0>t&&(t+=1),t>1&&(t-=1),1/6>t?A+6*(e-A)*t:.5>t?e:2/3>t?A+6*(e-A)*(2/3-t):A}function OA(A){return.04045>A?.0773993808*A:Math.pow(.9478672986*A+.0521327014,2.4)}function VA(A){return.0031308>A?12.92*A:1.055*Math.pow(A,.41666)-.055}function GA(A,e,t,i,o,n){this.a=A,this.b=e,this.c=t,this.normal=i&&i.isVector3?i:new y,this.vertexNormals=Array.isArray(i)?i:[],this.color=o&&o.isColor?o:new LA,this.vertexColors=Array.isArray(o)?o:[],this.materialIndex=void 0!==n?n:0}Object.assign(LA.prototype,{isColor:!0,r:1,g:1,b:1,set:function(A){return A&&A.isColor?this.copy(A):"number"==typeof A?this.setHex(A):"string"==typeof A&&this.setStyle(A),this},setScalar:function(A){return this.r=A,this.g=A,this.b=A,this},setHex:function(A){return A=Math.floor(A),this.r=(A>>16&255)/255,this.g=(A>>8&255)/255,this.b=(255&A)/255,this},setRGB:function(A,e,t){return this.r=A,this.g=e,this.b=t,this},setHSL:function(A,e,t){if(A=a.euclideanModulo(A,1),e=a.clamp(e,0,1),t=a.clamp(t,0,1),0===e)this.r=this.g=this.b=t;else{var i=t>.5?t+e-t*e:t*(1+e),o=2*t-i;this.r=NA(o,i,A+1/3),this.g=NA(o,i,A),this.b=NA(o,i,A-1/3)}return this},setStyle:function(A){function e(e){void 0!==e&&1>parseFloat(e)&&console.warn("THREE.Color: Alpha component of "+A+" will be ignored.")}var t;if(t=/^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec(A)){var i,o=t[2];switch(t[1]){case"rgb":case"rgba":if(i=/^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(o))return this.r=Math.min(255,parseInt(i[1],10))/255,this.g=Math.min(255,parseInt(i[2],10))/255,this.b=Math.min(255,parseInt(i[3],10))/255,e(i[5]),this;if(i=/^(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(o))return this.r=Math.min(100,parseInt(i[1],10))/100,this.g=Math.min(100,parseInt(i[2],10))/100,this.b=Math.min(100,parseInt(i[3],10))/100,e(i[5]),this;break;case"hsl":case"hsla":if(i=/^([0-9]*\.?[0-9]+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(o)){var n=parseFloat(i[1])/360,r=parseInt(i[2],10)/100,a=parseInt(i[3],10)/100;return e(i[5]),this.setHSL(n,r,a)}}}else if(t=/^\#([A-Fa-f0-9]+)$/.exec(A)){var s=t[1],l=s.length;if(3===l)return this.r=parseInt(s.charAt(0)+s.charAt(0),16)/255,this.g=parseInt(s.charAt(1)+s.charAt(1),16)/255,this.b=parseInt(s.charAt(2)+s.charAt(2),16)/255,this;if(6===l)return this.r=parseInt(s.charAt(0)+s.charAt(1),16)/255,this.g=parseInt(s.charAt(2)+s.charAt(3),16)/255,this.b=parseInt(s.charAt(4)+s.charAt(5),16)/255,this}return A&&A.length>0?this.setColorName(A):this},setColorName:function(A){var e=TA[A];return void 0!==e?this.setHex(e):console.warn("THREE.Color: Unknown color "+A),this},clone:function(){return new this.constructor(this.r,this.g,this.b)},copy:function(A){return this.r=A.r,this.g=A.g,this.b=A.b,this},copyGammaToLinear:function(A,e){return void 0===e&&(e=2),this.r=Math.pow(A.r,e),this.g=Math.pow(A.g,e),this.b=Math.pow(A.b,e),this},copyLinearToGamma:function(A,e){void 0===e&&(e=2);var t=e>0?1/e:1;return this.r=Math.pow(A.r,t),this.g=Math.pow(A.g,t),this.b=Math.pow(A.b,t),this},convertGammaToLinear:function(A){return this.copyGammaToLinear(this,A),this},convertLinearToGamma:function(A){return this.copyLinearToGamma(this,A),this},copySRGBToLinear:function(A){return this.r=OA(A.r),this.g=OA(A.g),this.b=OA(A.b),this},copyLinearToSRGB:function(A){return this.r=VA(A.r),this.g=VA(A.g),this.b=VA(A.b),this},convertSRGBToLinear:function(){return this.copySRGBToLinear(this),this},convertLinearToSRGB:function(){return this.copyLinearToSRGB(this),this},getHex:function(){return 255*this.r<<16^255*this.g<<8^255*this.b<<0},getHexString:function(){return("000000"+this.getHex().toString(16)).slice(-6)},getHSL:function(A){void 0===A&&(console.warn("THREE.Color: .getHSL() target is now required"),A={h:0,s:0,l:0});var e,t,i=this.r,o=this.g,n=this.b,r=Math.max(i,o,n),a=Math.min(i,o,n),s=(a+r)/2;if(a===r)e=0,t=0;else{var l=r-a;switch(t=s>.5?l/(2-r-a):l/(r+a),r){case i:e=(o-n)/l+(n>o?6:0);break;case o:e=(n-i)/l+2;break;case n:e=(i-o)/l+4}e/=6}return A.h=e,A.s=t,A.l=s,A},getStyle:function(){return"rgb("+(255*this.r|0)+","+(255*this.g|0)+","+(255*this.b|0)+")"},offsetHSL:function(A,e,t){return this.getHSL(kA),kA.h+=A,kA.s+=e,kA.l+=t,this.setHSL(kA.h,kA.s,kA.l),this},add:function(A){return this.r+=A.r,this.g+=A.g,this.b+=A.b,this},addColors:function(A,e){return this.r=A.r+e.r,this.g=A.g+e.g,this.b=A.b+e.b,this},addScalar:function(A){return this.r+=A,this.g+=A,this.b+=A,this},sub:function(A){return this.r=Math.max(0,this.r-A.r),this.g=Math.max(0,this.g-A.g),this.b=Math.max(0,this.b-A.b),this},multiply:function(A){return this.r*=A.r,this.g*=A.g,this.b*=A.b,this},multiplyScalar:function(A){return this.r*=A,this.g*=A,this.b*=A,this},lerp:function(A,e){return this.r+=(A.r-this.r)*e,this.g+=(A.g-this.g)*e,this.b+=(A.b-this.b)*e,this},lerpHSL:function(A,e){this.getHSL(kA),A.getHSL(DA);var t=a.lerp(kA.h,DA.h,e),i=a.lerp(kA.s,DA.s,e),o=a.lerp(kA.l,DA.l,e);return this.setHSL(t,i,o),this},equals:function(A){return A.r===this.r&&A.g===this.g&&A.b===this.b},fromArray:function(A,e){return void 0===e&&(e=0),this.r=A[e],this.g=A[e+1],this.b=A[e+2],this},toArray:function(A,e){return void 0===A&&(A=[]),void 0===e&&(e=0),A[e]=this.r,A[e+1]=this.g,A[e+2]=this.b,A},toJSON:function(){return this.getHex()}}),LA.NAMES=TA,Object.assign(GA.prototype,{clone:function(){return(new this.constructor).copy(this)},copy:function(A){this.a=A.a,this.b=A.b,this.c=A.c,this.normal.copy(A.normal),this.color.copy(A.color),this.materialIndex=A.materialIndex;for(var e=0,t=A.vertexNormals.length;t>e;e++)this.vertexNormals[e]=A.vertexNormals[e].clone();for(e=0,t=A.vertexColors.length;t>e;e++)this.vertexColors[e]=A.vertexColors[e].clone();return this}});var PA=0;function qA(){Object.defineProperty(this,"id",{value:PA++}),this.uuid=a.generateUUID(),this.name="",this.type="Material",this.fog=!0,this.blending=1,this.side=0,this.flatShading=!1,this.vertexColors=!1,this.opacity=1,this.transparent=!1,this.blendSrc=204,this.blendDst=205,this.blendEquation=100,this.blendSrcAlpha=null,this.blendDstAlpha=null,this.blendEquationAlpha=null,this.depthFunc=3,this.depthTest=!0,this.depthWrite=!0,this.stencilWriteMask=255,this.stencilFunc=519,this.stencilRef=0,this.stencilFuncMask=255,this.stencilFail=7680,this.stencilZFail=7680,this.stencilZPass=7680,this.stencilWrite=!1,this.clippingPlanes=null,this.clipIntersection=!1,this.clipShadows=!1,this.shadowSide=null,this.colorWrite=!0,this.precision=null,this.polygonOffset=!1,this.polygonOffsetFactor=0,this.polygonOffsetUnits=0,this.dithering=!1,this.alphaTest=0,this.premultipliedAlpha=!1,this.visible=!0,this.toneMapped=!0,this.userData={},this.version=0}function jA(A){qA.call(this),this.type="MeshBasicMaterial",this.color=new LA(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.skinning=!1,this.morphTargets=!1,this.setValues(A)}qA.prototype=Object.assign(Object.create(i.prototype),{constructor:qA,isMaterial:!0,onBeforeCompile:function(){},setValues:function(A){if(void 0!==A)for(var e in A){var t=A[e];if(void 0!==t)if("shading"!==e){var i=this[e];void 0!==i?i&&i.isColor?i.set(t):i&&i.isVector3&&t&&t.isVector3?i.copy(t):this[e]=t:console.warn("THREE."+this.type+": '"+e+"' is not a property of this material.")}else console.warn("THREE."+this.type+": .shading has been removed. Use the boolean .flatShading instead."),this.flatShading=1===t;else console.warn("THREE.Material: '"+e+"' parameter is undefined.")}},toJSON:function(A){var e=void 0===A||"string"==typeof A;e&&(A={textures:{},images:{}});var t={metadata:{version:4.5,type:"Material",generator:"Material.toJSON"}};function i(A){var e=[];for(var t in A){var i=A[t];delete i.metadata,e.push(i)}return e}if(t.uuid=this.uuid,t.type=this.type,""!==this.name&&(t.name=this.name),this.color&&this.color.isColor&&(t.color=this.color.getHex()),void 0!==this.roughness&&(t.roughness=this.roughness),void 0!==this.metalness&&(t.metalness=this.metalness),this.sheen&&this.sheen.isColor&&(t.sheen=this.sheen.getHex()),this.emissive&&this.emissive.isColor&&(t.emissive=this.emissive.getHex()),this.emissiveIntensity&&1!==this.emissiveIntensity&&(t.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(t.specular=this.specular.getHex()),void 0!==this.shininess&&(t.shininess=this.shininess),void 0!==this.clearcoat&&(t.clearcoat=this.clearcoat),void 0!==this.clearcoatRoughness&&(t.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(t.clearcoatMap=this.clearcoatMap.toJSON(A).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(t.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(A).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(t.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(A).uuid,t.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),this.map&&this.map.isTexture&&(t.map=this.map.toJSON(A).uuid),this.matcap&&this.matcap.isTexture&&(t.matcap=this.matcap.toJSON(A).uuid),this.alphaMap&&this.alphaMap.isTexture&&(t.alphaMap=this.alphaMap.toJSON(A).uuid),this.lightMap&&this.lightMap.isTexture&&(t.lightMap=this.lightMap.toJSON(A).uuid),this.aoMap&&this.aoMap.isTexture&&(t.aoMap=this.aoMap.toJSON(A).uuid,t.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(t.bumpMap=this.bumpMap.toJSON(A).uuid,t.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(t.normalMap=this.normalMap.toJSON(A).uuid,t.normalMapType=this.normalMapType,t.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(t.displacementMap=this.displacementMap.toJSON(A).uuid,t.displacementScale=this.displacementScale,t.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(t.roughnessMap=this.roughnessMap.toJSON(A).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(t.metalnessMap=this.metalnessMap.toJSON(A).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(t.emissiveMap=this.emissiveMap.toJSON(A).uuid),this.specularMap&&this.specularMap.isTexture&&(t.specularMap=this.specularMap.toJSON(A).uuid),this.envMap&&this.envMap.isTexture&&(t.envMap=this.envMap.toJSON(A).uuid,t.reflectivity=this.reflectivity,t.refractionRatio=this.refractionRatio,void 0!==this.combine&&(t.combine=this.combine),void 0!==this.envMapIntensity&&(t.envMapIntensity=this.envMapIntensity)),this.gradientMap&&this.gradientMap.isTexture&&(t.gradientMap=this.gradientMap.toJSON(A).uuid),void 0!==this.size&&(t.size=this.size),void 0!==this.sizeAttenuation&&(t.sizeAttenuation=this.sizeAttenuation),1!==this.blending&&(t.blending=this.blending),!0===this.flatShading&&(t.flatShading=this.flatShading),0!==this.side&&(t.side=this.side),this.vertexColors&&(t.vertexColors=!0),1>this.opacity&&(t.opacity=this.opacity),!0===this.transparent&&(t.transparent=this.transparent),t.depthFunc=this.depthFunc,t.depthTest=this.depthTest,t.depthWrite=this.depthWrite,t.stencilWrite=this.stencilWrite,t.stencilWriteMask=this.stencilWriteMask,t.stencilFunc=this.stencilFunc,t.stencilRef=this.stencilRef,t.stencilFuncMask=this.stencilFuncMask,t.stencilFail=this.stencilFail,t.stencilZFail=this.stencilZFail,t.stencilZPass=this.stencilZPass,this.rotation&&0!==this.rotation&&(t.rotation=this.rotation),!0===this.polygonOffset&&(t.polygonOffset=!0),0!==this.polygonOffsetFactor&&(t.polygonOffsetFactor=this.polygonOffsetFactor),0!==this.polygonOffsetUnits&&(t.polygonOffsetUnits=this.polygonOffsetUnits),this.linewidth&&1!==this.linewidth&&(t.linewidth=this.linewidth),void 0!==this.dashSize&&(t.dashSize=this.dashSize),void 0!==this.gapSize&&(t.gapSize=this.gapSize),void 0!==this.scale&&(t.scale=this.scale),!0===this.dithering&&(t.dithering=!0),this.alphaTest>0&&(t.alphaTest=this.alphaTest),!0===this.premultipliedAlpha&&(t.premultipliedAlpha=this.premultipliedAlpha),!0===this.wireframe&&(t.wireframe=this.wireframe),this.wireframeLinewidth>1&&(t.wireframeLinewidth=this.wireframeLinewidth),"round"!==this.wireframeLinecap&&(t.wireframeLinecap=this.wireframeLinecap),"round"!==this.wireframeLinejoin&&(t.wireframeLinejoin=this.wireframeLinejoin),!0===this.morphTargets&&(t.morphTargets=!0),!0===this.morphNormals&&(t.morphNormals=!0),!0===this.skinning&&(t.skinning=!0),!1===this.visible&&(t.visible=!1),!1===this.toneMapped&&(t.toneMapped=!1),"{}"!==JSON.stringify(this.userData)&&(t.userData=this.userData),e){var o=i(A.textures),n=i(A.images);o.length>0&&(t.textures=o),n.length>0&&(t.images=n)}return t},clone:function(){return(new this.constructor).copy(this)},copy:function(A){this.name=A.name,this.fog=A.fog,this.blending=A.blending,this.side=A.side,this.flatShading=A.flatShading,this.vertexColors=A.vertexColors,this.opacity=A.opacity,this.transparent=A.transparent,this.blendSrc=A.blendSrc,this.blendDst=A.blendDst,this.blendEquation=A.blendEquation,this.blendSrcAlpha=A.blendSrcAlpha,this.blendDstAlpha=A.blendDstAlpha,this.blendEquationAlpha=A.blendEquationAlpha,this.depthFunc=A.depthFunc,this.depthTest=A.depthTest,this.depthWrite=A.depthWrite,this.stencilWriteMask=A.stencilWriteMask,this.stencilFunc=A.stencilFunc,this.stencilRef=A.stencilRef,this.stencilFuncMask=A.stencilFuncMask,this.stencilFail=A.stencilFail,this.stencilZFail=A.stencilZFail,this.stencilZPass=A.stencilZPass,this.stencilWrite=A.stencilWrite;var e=A.clippingPlanes,t=null;if(null!==e){var i=e.length;t=new Array(i);for(var o=0;o!==i;++o)t[o]=e[o].clone()}return this.clippingPlanes=t,this.clipIntersection=A.clipIntersection,this.clipShadows=A.clipShadows,this.shadowSide=A.shadowSide,this.colorWrite=A.colorWrite,this.precision=A.precision,this.polygonOffset=A.polygonOffset,this.polygonOffsetFactor=A.polygonOffsetFactor,this.polygonOffsetUnits=A.polygonOffsetUnits,this.dithering=A.dithering,this.alphaTest=A.alphaTest,this.premultipliedAlpha=A.premultipliedAlpha,this.visible=A.visible,this.toneMapped=A.toneMapped,this.userData=JSON.parse(JSON.stringify(A.userData)),this},dispose:function(){this.dispatchEvent({type:"dispose"})}}),Object.defineProperty(qA.prototype,"needsUpdate",{set:function(A){!0===A&&this.version++}}),(jA.prototype=Object.create(qA.prototype)).constructor=jA,jA.prototype.isMeshBasicMaterial=!0,jA.prototype.copy=function(A){return qA.prototype.copy.call(this,A),this.color.copy(A.color),this.map=A.map,this.lightMap=A.lightMap,this.lightMapIntensity=A.lightMapIntensity,this.aoMap=A.aoMap,this.aoMapIntensity=A.aoMapIntensity,this.specularMap=A.specularMap,this.alphaMap=A.alphaMap,this.envMap=A.envMap,this.combine=A.combine,this.reflectivity=A.reflectivity,this.refractionRatio=A.refractionRatio,this.wireframe=A.wireframe,this.wireframeLinewidth=A.wireframeLinewidth,this.wireframeLinecap=A.wireframeLinecap,this.wireframeLinejoin=A.wireframeLinejoin,this.skinning=A.skinning,this.morphTargets=A.morphTargets,this};var HA=new y;function YA(A,e,t){if(Array.isArray(A))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.name="",this.array=A,this.itemSize=e,this.count=void 0!==A?A.length/e:0,this.normalized=!0===t,this.usage=35044,this.updateRange={offset:0,count:-1},this.version=0}function WA(A,e,t){YA.call(this,new Int8Array(A),e,t)}function JA(A,e,t){YA.call(this,new Uint8Array(A),e,t)}function zA(A,e,t){YA.call(this,new Uint8ClampedArray(A),e,t)}function ZA(A,e,t){YA.call(this,new Int16Array(A),e,t)}function XA(A,e,t){YA.call(this,new Uint16Array(A),e,t)}function _A(A,e,t){YA.call(this,new Int32Array(A),e,t)}function $A(A,e,t){YA.call(this,new Uint32Array(A),e,t)}function Ae(A,e,t){YA.call(this,new Float32Array(A),e,t)}function ee(A,e,t){YA.call(this,new Float64Array(A),e,t)}function te(){this.vertices=[],this.normals=[],this.colors=[],this.uvs=[],this.uvs2=[],this.groups=[],this.morphTargets={},this.skinWeights=[],this.skinIndices=[],this.boundingBox=null,this.boundingSphere=null,this.verticesNeedUpdate=!1,this.normalsNeedUpdate=!1,this.colorsNeedUpdate=!1,this.uvsNeedUpdate=!1,this.groupsNeedUpdate=!1}function ie(A){if(0===A.length)return-1/0;for(var e=A[0],t=1,i=A.length;i>t;++t)A[t]>e&&(e=A[t]);return e}Object.defineProperty(YA.prototype,"needsUpdate",{set:function(A){!0===A&&this.version++}}),Object.assign(YA.prototype,{isBufferAttribute:!0,onUploadCallback:function(){},setUsage:function(A){return this.usage=A,this},copy:function(A){return this.name=A.name,this.array=new A.array.constructor(A.array),this.itemSize=A.itemSize,this.count=A.count,this.normalized=A.normalized,this.usage=A.usage,this},copyAt:function(A,e,t){A*=this.itemSize,t*=e.itemSize;for(var i=0,o=this.itemSize;o>i;i++)this.array[A+i]=e.array[t+i];return this},copyArray:function(A){return this.array.set(A),this},copyColorsArray:function(A){for(var e=this.array,t=0,i=0,o=A.length;o>i;i++){var n=A[i];void 0===n&&(console.warn("THREE.BufferAttribute.copyColorsArray(): color is undefined",i),n=new LA),e[t++]=n.r,e[t++]=n.g,e[t++]=n.b}return this},copyVector2sArray:function(A){for(var e=this.array,t=0,i=0,o=A.length;o>i;i++){var n=A[i];void 0===n&&(console.warn("THREE.BufferAttribute.copyVector2sArray(): vector is undefined",i),n=new s),e[t++]=n.x,e[t++]=n.y}return this},copyVector3sArray:function(A){for(var e=this.array,t=0,i=0,o=A.length;o>i;i++){var n=A[i];void 0===n&&(console.warn("THREE.BufferAttribute.copyVector3sArray(): vector is undefined",i),n=new y),e[t++]=n.x,e[t++]=n.y,e[t++]=n.z}return this},copyVector4sArray:function(A){for(var e=this.array,t=0,i=0,o=A.length;o>i;i++){var n=A[i];void 0===n&&(console.warn("THREE.BufferAttribute.copyVector4sArray(): vector is undefined",i),n=new p),e[t++]=n.x,e[t++]=n.y,e[t++]=n.z,e[t++]=n.w}return this},applyMatrix3:function(A){for(var e=0,t=this.count;t>e;e++)HA.x=this.getX(e),HA.y=this.getY(e),HA.z=this.getZ(e),HA.applyMatrix3(A),this.setXYZ(e,HA.x,HA.y,HA.z);return this},applyMatrix4:function(A){for(var e=0,t=this.count;t>e;e++)HA.x=this.getX(e),HA.y=this.getY(e),HA.z=this.getZ(e),HA.applyMatrix4(A),this.setXYZ(e,HA.x,HA.y,HA.z);return this},applyNormalMatrix:function(A){for(var e=0,t=this.count;t>e;e++)HA.x=this.getX(e),HA.y=this.getY(e),HA.z=this.getZ(e),HA.applyNormalMatrix(A),this.setXYZ(e,HA.x,HA.y,HA.z);return this},transformDirection:function(A){for(var e=0,t=this.count;t>e;e++)HA.x=this.getX(e),HA.y=this.getY(e),HA.z=this.getZ(e),HA.transformDirection(A),this.setXYZ(e,HA.x,HA.y,HA.z);return this},set:function(A,e){return void 0===e&&(e=0),this.array.set(A,e),this},getX:function(A){return this.array[A*this.itemSize]},setX:function(A,e){return this.array[A*this.itemSize]=e,this},getY:function(A){return this.array[A*this.itemSize+1]},setY:function(A,e){return this.array[A*this.itemSize+1]=e,this},getZ:function(A){return this.array[A*this.itemSize+2]},setZ:function(A,e){return this.array[A*this.itemSize+2]=e,this},getW:function(A){return this.array[A*this.itemSize+3]},setW:function(A,e){return this.array[A*this.itemSize+3]=e,this},setXY:function(A,e,t){return this.array[(A*=this.itemSize)+0]=e,this.array[A+1]=t,this},setXYZ:function(A,e,t,i){return this.array[(A*=this.itemSize)+0]=e,this.array[A+1]=t,this.array[A+2]=i,this},setXYZW:function(A,e,t,i,o){return this.array[(A*=this.itemSize)+0]=e,this.array[A+1]=t,this.array[A+2]=i,this.array[A+3]=o,this},onUpload:function(A){return this.onUploadCallback=A,this},clone:function(){return new this.constructor(this.array,this.itemSize).copy(this)},toJSON:function(){return{itemSize:this.itemSize,type:this.array.constructor.name,array:Array.prototype.slice.call(this.array),normalized:this.normalized}}}),(WA.prototype=Object.create(YA.prototype)).constructor=WA,(JA.prototype=Object.create(YA.prototype)).constructor=JA,(zA.prototype=Object.create(YA.prototype)).constructor=zA,(ZA.prototype=Object.create(YA.prototype)).constructor=ZA,(XA.prototype=Object.create(YA.prototype)).constructor=XA,(_A.prototype=Object.create(YA.prototype)).constructor=_A,($A.prototype=Object.create(YA.prototype)).constructor=$A,(Ae.prototype=Object.create(YA.prototype)).constructor=Ae,(ee.prototype=Object.create(YA.prototype)).constructor=ee,Object.assign(te.prototype,{computeGroups:function(A){for(var e,t=[],i=void 0,o=A.faces,n=0;o.length>n;n++){var r=o[n];r.materialIndex!==i&&(i=r.materialIndex,void 0!==e&&(e.count=3*n-e.start,t.push(e)),e={start:3*n,materialIndex:i})}void 0!==e&&(e.count=3*n-e.start,t.push(e)),this.groups=t},fromGeometry:function(A){var e,t=A.faces,i=A.vertices,o=A.faceVertexUvs,n=o[0]&&o[0].length>0,r=o[1]&&o[1].length>0,a=A.morphTargets,l=a.length;if(l>0){e=[];for(var c=0;l>c;c++)e[c]={name:a[c].name,data:[]};this.morphTargets.position=e}var h,d=A.morphNormals,p=d.length;if(p>0){h=[];for(c=0;p>c;c++)h[c]={name:d[c].name,data:[]};this.morphTargets.normal=h}var g=A.skinIndices,u=A.skinWeights,f=g.length===i.length,m=u.length===i.length;i.length>0&&0===t.length&&console.error("THREE.DirectGeometry: Faceless geometries are not supported.");for(c=0;t.length>c;c++){var C=t[c];this.vertices.push(i[C.a],i[C.b],i[C.c]);var y=C.vertexNormals;if(3===y.length)this.normals.push(y[0],y[1],y[2]);else{var v=C.normal;this.normals.push(v,v,v)}var I,E=C.vertexColors;if(3===E.length)this.colors.push(E[0],E[1],E[2]);else{var B=C.color;this.colors.push(B,B,B)}if(!0===n)void 0!==(I=o[0][c])?this.uvs.push(I[0],I[1],I[2]):(console.warn("THREE.DirectGeometry.fromGeometry(): Undefined vertexUv ",c),this.uvs.push(new s,new s,new s));if(!0===r)void 0!==(I=o[1][c])?this.uvs2.push(I[0],I[1],I[2]):(console.warn("THREE.DirectGeometry.fromGeometry(): Undefined vertexUv2 ",c),this.uvs2.push(new s,new s,new s));for(var x=0;l>x;x++){var S=a[x].vertices;e[x].data.push(S[C.a],S[C.b],S[C.c])}for(x=0;p>x;x++){var w=d[x].vertexNormals[c];h[x].data.push(w.a,w.b,w.c)}f&&this.skinIndices.push(g[C.a],g[C.b],g[C.c]),m&&this.skinWeights.push(u[C.a],u[C.b],u[C.c])}return this.computeGroups(A),this.verticesNeedUpdate=A.verticesNeedUpdate,this.normalsNeedUpdate=A.normalsNeedUpdate,this.colorsNeedUpdate=A.colorsNeedUpdate,this.uvsNeedUpdate=A.uvsNeedUpdate,this.groupsNeedUpdate=A.groupsNeedUpdate,null!==A.boundingSphere&&(this.boundingSphere=A.boundingSphere.clone()),null!==A.boundingBox&&(this.boundingBox=A.boundingBox.clone()),this}});var oe=1,ne=new M,re=new H,ae=new y,se=new aA,le=new aA,ce=new y;function he(){Object.defineProperty(this,"id",{value:oe+=2}),this.uuid=a.generateUUID(),this.name="",this.type="BufferGeometry",this.index=null,this.attributes={},this.morphAttributes={},this.morphTargetsRelative=!1,this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.drawRange={start:0,count:1/0},this.userData={}}he.prototype=Object.assign(Object.create(i.prototype),{constructor:he,isBufferGeometry:!0,getIndex:function(){return this.index},setIndex:function(A){this.index=Array.isArray(A)?new(ie(A)>65535?$A:XA)(A,1):A},getAttribute:function(A){return this.attributes[A]},setAttribute:function(A,e){return this.attributes[A]=e,this},deleteAttribute:function(A){return delete this.attributes[A],this},addGroup:function(A,e,t){this.groups.push({start:A,count:e,materialIndex:void 0!==t?t:0})},clearGroups:function(){this.groups=[]},setDrawRange:function(A,e){this.drawRange.start=A,this.drawRange.count=e},applyMatrix4:function(A){var e=this.attributes.position;void 0!==e&&(e.applyMatrix4(A),e.needsUpdate=!0);var t=this.attributes.normal;if(void 0!==t){var i=(new l).getNormalMatrix(A);t.applyNormalMatrix(i),t.needsUpdate=!0}var o=this.attributes.tangent;return void 0!==o&&(o.transformDirection(A),o.needsUpdate=!0),null!==this.boundingBox&&this.computeBoundingBox(),null!==this.boundingSphere&&this.computeBoundingSphere(),this},rotateX:function(A){return ne.makeRotationX(A),this.applyMatrix4(ne),this},rotateY:function(A){return ne.makeRotationY(A),this.applyMatrix4(ne),this},rotateZ:function(A){return ne.makeRotationZ(A),this.applyMatrix4(ne),this},translate:function(A,e,t){return ne.makeTranslation(A,e,t),this.applyMatrix4(ne),this},scale:function(A,e,t){return ne.makeScale(A,e,t),this.applyMatrix4(ne),this},lookAt:function(A){return re.lookAt(A),re.updateMatrix(),this.applyMatrix4(re.matrix),this},center:function(){return this.computeBoundingBox(),this.boundingBox.getCenter(ae).negate(),this.translate(ae.x,ae.y,ae.z),this},setFromObject:function(A){var e=A.geometry;if(A.isPoints||A.isLine){var t=new Ae(3*e.vertices.length,3),i=new Ae(3*e.colors.length,3);if(this.setAttribute("position",t.copyVector3sArray(e.vertices)),this.setAttribute("color",i.copyColorsArray(e.colors)),e.lineDistances&&e.lineDistances.length===e.vertices.length){var o=new Ae(e.lineDistances.length,1);this.setAttribute("lineDistance",o.copyArray(e.lineDistances))}null!==e.boundingSphere&&(this.boundingSphere=e.boundingSphere.clone()),null!==e.boundingBox&&(this.boundingBox=e.boundingBox.clone())}else A.isMesh&&e&&e.isGeometry&&this.fromGeometry(e);return this},setFromPoints:function(A){for(var e=[],t=0,i=A.length;i>t;t++){var o=A[t];e.push(o.x,o.y,o.z||0)}return this.setAttribute("position",new Ae(e,3)),this},updateFromObject:function(A){var e,t=A.geometry;if(A.isMesh){var i=t.__directGeometry;if(!0===t.elementsNeedUpdate&&(i=void 0,t.elementsNeedUpdate=!1),void 0===i)return this.fromGeometry(t);i.verticesNeedUpdate=t.verticesNeedUpdate,i.normalsNeedUpdate=t.normalsNeedUpdate,i.colorsNeedUpdate=t.colorsNeedUpdate,i.uvsNeedUpdate=t.uvsNeedUpdate,i.groupsNeedUpdate=t.groupsNeedUpdate,t.verticesNeedUpdate=!1,t.normalsNeedUpdate=!1,t.colorsNeedUpdate=!1,t.uvsNeedUpdate=!1,t.groupsNeedUpdate=!1,t=i}return!0===t.verticesNeedUpdate&&(void 0!==(e=this.attributes.position)&&(e.copyVector3sArray(t.vertices),e.needsUpdate=!0),t.verticesNeedUpdate=!1),!0===t.normalsNeedUpdate&&(void 0!==(e=this.attributes.normal)&&(e.copyVector3sArray(t.normals),e.needsUpdate=!0),t.normalsNeedUpdate=!1),!0===t.colorsNeedUpdate&&(void 0!==(e=this.attributes.color)&&(e.copyColorsArray(t.colors),e.needsUpdate=!0),t.colorsNeedUpdate=!1),t.uvsNeedUpdate&&(void 0!==(e=this.attributes.uv)&&(e.copyVector2sArray(t.uvs),e.needsUpdate=!0),t.uvsNeedUpdate=!1),t.lineDistancesNeedUpdate&&(void 0!==(e=this.attributes.lineDistance)&&(e.copyArray(t.lineDistances),e.needsUpdate=!0),t.lineDistancesNeedUpdate=!1),t.groupsNeedUpdate&&(t.computeGroups(A.geometry),this.groups=t.groups,t.groupsNeedUpdate=!1),this},fromGeometry:function(A){return A.__directGeometry=(new te).fromGeometry(A),this.fromDirectGeometry(A.__directGeometry)},fromDirectGeometry:function(A){var e=new Float32Array(3*A.vertices.length);if(this.setAttribute("position",new YA(e,3).copyVector3sArray(A.vertices)),A.normals.length>0){var t=new Float32Array(3*A.normals.length);this.setAttribute("normal",new YA(t,3).copyVector3sArray(A.normals))}if(A.colors.length>0){var i=new Float32Array(3*A.colors.length);this.setAttribute("color",new YA(i,3).copyColorsArray(A.colors))}if(A.uvs.length>0){var o=new Float32Array(2*A.uvs.length);this.setAttribute("uv",new YA(o,2).copyVector2sArray(A.uvs))}if(A.uvs2.length>0){var n=new Float32Array(2*A.uvs2.length);this.setAttribute("uv2",new YA(n,2).copyVector2sArray(A.uvs2))}for(var r in this.groups=A.groups,A.morphTargets){for(var a=[],s=A.morphTargets[r],l=0,c=s.length;c>l;l++){var h=s[l],d=new Ae(3*h.data.length,3);d.name=h.name,a.push(d.copyVector3sArray(h.data))}this.morphAttributes[r]=a}if(A.skinIndices.length>0){var p=new Ae(4*A.skinIndices.length,4);this.setAttribute("skinIndex",p.copyVector4sArray(A.skinIndices))}if(A.skinWeights.length>0){var g=new Ae(4*A.skinWeights.length,4);this.setAttribute("skinWeight",g.copyVector4sArray(A.skinWeights))}return null!==A.boundingSphere&&(this.boundingSphere=A.boundingSphere.clone()),null!==A.boundingBox&&(this.boundingBox=A.boundingBox.clone()),this},computeBoundingBox:function(){null===this.boundingBox&&(this.boundingBox=new aA);var A=this.attributes.position,e=this.morphAttributes.position;if(void 0!==A){if(this.boundingBox.setFromBufferAttribute(A),e)for(var t=0,i=e.length;i>t;t++){se.setFromBufferAttribute(e[t]),this.morphTargetsRelative?(ce.addVectors(this.boundingBox.min,se.min),this.boundingBox.expandByPoint(ce),ce.addVectors(this.boundingBox.max,se.max),this.boundingBox.expandByPoint(ce)):(this.boundingBox.expandByPoint(se.min),this.boundingBox.expandByPoint(se.max))}}else this.boundingBox.makeEmpty();(isNaN(this.boundingBox.min.x)||isNaN(this.boundingBox.min.y)||isNaN(this.boundingBox.min.z))&&console.error('THREE.BufferGeometry.computeBoundingBox: Computed min/max have NaN values. The "position" attribute is likely to have NaN values.',this)},computeBoundingSphere:function(){null===this.boundingSphere&&(this.boundingSphere=new cA);var A=this.attributes.position,e=this.morphAttributes.position;if(A){var t=this.boundingSphere.center;if(se.setFromBufferAttribute(A),e)for(var i=0,o=e.length;o>i;i++){le.setFromBufferAttribute(r=e[i]),this.morphTargetsRelative?(ce.addVectors(se.min,le.min),se.expandByPoint(ce),ce.addVectors(se.max,le.max),se.expandByPoint(ce)):(se.expandByPoint(le.min),se.expandByPoint(le.max))}se.getCenter(t);var n=0;for(i=0,o=A.count;o>i;i++)ce.fromBufferAttribute(A,i),n=Math.max(n,t.distanceToSquared(ce));if(e)for(i=0,o=e.length;o>i;i++)for(var r,a=this.morphTargetsRelative,s=0,l=(r=e[i]).count;l>s;s++)ce.fromBufferAttribute(r,s),a&&(ae.fromBufferAttribute(A,s),ce.add(ae)),n=Math.max(n,t.distanceToSquared(ce));this.boundingSphere.radius=Math.sqrt(n),isNaN(this.boundingSphere.radius)&&console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.',this)}},computeFaceNormals:function(){},computeVertexNormals:function(){var A=this.index,e=this.attributes;if(e.position){var t=e.position.array;if(void 0===e.normal)this.setAttribute("normal",new YA(new Float32Array(t.length),3));else for(var i=e.normal.array,o=0,n=i.length;n>o;o++)i[o]=0;var r,a,s,l=e.normal.array,c=new y,h=new y,d=new y,p=new y,g=new y;if(A){var u=A.array;for(o=0,n=A.count;n>o;o+=3)a=3*u[o+1],s=3*u[o+2],c.fromArray(t,r=3*u[o+0]),h.fromArray(t,a),d.fromArray(t,s),p.subVectors(d,h),g.subVectors(c,h),p.cross(g),l[r]+=p.x,l[r+1]+=p.y,l[r+2]+=p.z,l[a]+=p.x,l[a+1]+=p.y,l[a+2]+=p.z,l[s]+=p.x,l[s+1]+=p.y,l[s+2]+=p.z}else for(o=0,n=t.length;n>o;o+=9)c.fromArray(t,o),h.fromArray(t,o+3),d.fromArray(t,o+6),p.subVectors(d,h),g.subVectors(c,h),p.cross(g),l[o]=p.x,l[o+1]=p.y,l[o+2]=p.z,l[o+3]=p.x,l[o+4]=p.y,l[o+5]=p.z,l[o+6]=p.x,l[o+7]=p.y,l[o+8]=p.z;this.normalizeNormals(),e.normal.needsUpdate=!0}},merge:function(A,e){if(A&&A.isBufferGeometry){void 0===e&&(e=0,console.warn("THREE.BufferGeometry.merge(): Overwriting original geometry, starting at offset=0. Use BufferGeometryUtils.mergeBufferGeometries() for lossless merge."));var t=this.attributes;for(var i in t)if(void 0!==A.attributes[i])for(var o=t[i].array,n=A.attributes[i],r=n.array,a=n.itemSize*e,s=Math.min(r.length,o.length-a),l=0,c=a;s>l;l++,c++)o[c]=r[l];return this}console.error("THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.",A)},normalizeNormals:function(){for(var A=this.attributes.normal,e=0,t=A.count;t>e;e++)ce.x=A.getX(e),ce.y=A.getY(e),ce.z=A.getZ(e),ce.normalize(),A.setXYZ(e,ce.x,ce.y,ce.z)},toNonIndexed:function(){function A(A,e){for(var t=A.array,i=A.itemSize,o=new t.constructor(e.length*i),n=0,r=0,a=0,s=e.length;s>a;a++){n=e[a]*i;for(var l=0;i>l;l++)o[r++]=t[n++]}return new YA(o,i)}if(null===this.index)return console.warn("THREE.BufferGeometry.toNonIndexed(): Geometry is already non-indexed."),this;var e=new he,t=this.index.array,i=this.attributes;for(var o in i){var n=A(i[o],t);e.setAttribute(o,n)}var r=this.morphAttributes;for(o in r){for(var a=[],s=r[o],l=0,c=s.length;c>l;l++){n=A(s[l],t);a.push(n)}e.morphAttributes[o]=a}e.morphTargetsRelative=this.morphTargetsRelative;for(var h=this.groups,d=(l=0,h.length);d>l;l++){var p=h[l];e.addGroup(p.start,p.count,p.materialIndex)}return e},toJSON:function(){var A={metadata:{version:4.5,type:"BufferGeometry",generator:"BufferGeometry.toJSON"}};if(A.uuid=this.uuid,A.type=this.type,""!==this.name&&(A.name=this.name),Object.keys(this.userData).length>0&&(A.userData=this.userData),void 0!==this.parameters){var e=this.parameters;for(var t in e)void 0!==e[t]&&(A[t]=e[t]);return A}A.data={attributes:{}};var i=this.index;null!==i&&(A.data.index={type:i.array.constructor.name,array:Array.prototype.slice.call(i.array)});var o=this.attributes;for(var t in o){var n=(d=o[t]).toJSON();""!==d.name&&(n.name=d.name),A.data.attributes[t]=n}var r={},a=!1;for(var t in this.morphAttributes){for(var s=this.morphAttributes[t],l=[],c=0,h=s.length;h>c;c++){var d;n=(d=s[c]).toJSON();""!==d.name&&(n.name=d.name),l.push(n)}l.length>0&&(r[t]=l,a=!0)}a&&(A.data.morphAttributes=r,A.data.morphTargetsRelative=this.morphTargetsRelative);var p=this.groups;p.length>0&&(A.data.groups=JSON.parse(JSON.stringify(p)));var g=this.boundingSphere;return null!==g&&(A.data.boundingSphere={center:g.center.toArray(),radius:g.radius}),A},clone:function(){return(new he).copy(this)},copy:function(A){var e,t,i;this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.name=A.name;var o=A.index;null!==o&&this.setIndex(o.clone());var n=A.attributes;for(e in n){this.setAttribute(e,n[e].clone())}var r=A.morphAttributes;for(e in r){var a=[],s=r[e];for(t=0,i=s.length;i>t;t++)a.push(s[t].clone());this.morphAttributes[e]=a}this.morphTargetsRelative=A.morphTargetsRelative;var l=A.groups;for(t=0,i=l.length;i>t;t++){var c=l[t];this.addGroup(c.start,c.count,c.materialIndex)}var h=A.boundingBox;null!==h&&(this.boundingBox=h.clone());var d=A.boundingSphere;return null!==d&&(this.boundingSphere=d.clone()),this.drawRange.start=A.drawRange.start,this.drawRange.count=A.drawRange.count,this.userData=A.userData,this},dispose:function(){this.dispatchEvent({type:"dispose"})}});var de=new M,pe=new CA,ge=new cA,ue=new y,fe=new y,me=new y,Ce=new y,ye=new y,ve=new y,Ie=new y,Ee=new y,Be=new y,xe=new s,Se=new s,we=new s,Me=new y,be=new y;function Ue(A,e){H.call(this),this.type="Mesh",this.geometry=void 0!==A?A:new he,this.material=void 0!==e?e:new jA,this.updateMorphTargets()}function Fe(A,e,t,i,o,n,r,a){if(null===(1===e.side?i.intersectTriangle(r,n,o,!0,a):i.intersectTriangle(o,n,r,2!==e.side,a)))return null;be.copy(a),be.applyMatrix4(A.matrixWorld);var s=t.ray.origin.distanceTo(be);return t.near>s||s>t.far?null:{distance:s,point:be.clone(),object:A}}function Ke(A,e,t,i,o,n,r,a,l,c,h,d){ue.fromBufferAttribute(o,c),fe.fromBufferAttribute(o,h),me.fromBufferAttribute(o,d);var p=A.morphTargetInfluences;if(e.morphTargets&&n&&p){Ie.set(0,0,0),Ee.set(0,0,0),Be.set(0,0,0);for(var g=0,u=n.length;u>g;g++){var f=p[g],m=n[g];0!==f&&(Ce.fromBufferAttribute(m,c),ye.fromBufferAttribute(m,h),ve.fromBufferAttribute(m,d),r?(Ie.addScaledVector(Ce,f),Ee.addScaledVector(ye,f),Be.addScaledVector(ve,f)):(Ie.addScaledVector(Ce.sub(ue),f),Ee.addScaledVector(ye.sub(fe),f),Be.addScaledVector(ve.sub(me),f)))}ue.add(Ie),fe.add(Ee),me.add(Be)}var C=Fe(A,e,t,i,ue,fe,me,Me);if(C){a&&(xe.fromBufferAttribute(a,c),Se.fromBufferAttribute(a,h),we.fromBufferAttribute(a,d),C.uv=RA.getUV(Me,ue,fe,me,xe,Se,we,new s)),l&&(xe.fromBufferAttribute(l,c),Se.fromBufferAttribute(l,h),we.fromBufferAttribute(l,d),C.uv2=RA.getUV(Me,ue,fe,me,xe,Se,we,new s));var y=new GA(c,h,d);RA.getNormal(ue,fe,me,y.normal),C.face=y}return C}Ue.prototype=Object.assign(Object.create(H.prototype),{constructor:Ue,isMesh:!0,copy:function(A){return H.prototype.copy.call(this,A),void 0!==A.morphTargetInfluences&&(this.morphTargetInfluences=A.morphTargetInfluences.slice()),void 0!==A.morphTargetDictionary&&(this.morphTargetDictionary=Object.assign({},A.morphTargetDictionary)),this},updateMorphTargets:function(){var A,e,t,i=this.geometry;if(i.isBufferGeometry){var o=i.morphAttributes,n=Object.keys(o);if(n.length>0){var r=o[n[0]];if(void 0!==r)for(this.morphTargetInfluences=[],this.morphTargetDictionary={},A=0,e=r.length;e>A;A++)t=r[A].name||String(A),this.morphTargetInfluences.push(0),this.morphTargetDictionary[t]=A}}else{var a=i.morphTargets;void 0!==a&&a.length>0&&console.error("THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.")}},raycast:function(A,e){var t,i=this.geometry,o=this.material,n=this.matrixWorld;if(void 0!==o&&(null===i.boundingSphere&&i.computeBoundingSphere(),ge.copy(i.boundingSphere),ge.applyMatrix4(n),!1!==A.ray.intersectsSphere(ge)&&(de.getInverse(n),pe.copy(A.ray).applyMatrix4(de),null===i.boundingBox||!1!==pe.intersectsBox(i.boundingBox))))if(i.isBufferGeometry){var r,a,l,c,h,d,p,g,u,f=i.index,m=i.attributes.position,C=i.morphAttributes.position,y=i.morphTargetsRelative,v=i.attributes.uv,I=i.attributes.uv2,E=i.groups,B=i.drawRange;if(null!==f)if(Array.isArray(o)){for(c=0,d=E.length;d>c;c++)if(u=o[(g=E[c]).materialIndex])for(h=Math.max(g.start,B.start),p=Math.min(g.start+g.count,B.start+B.count);p>h;h+=3)r=f.getX(h),a=f.getX(h+1),l=f.getX(h+2),(t=Ke(this,u,A,pe,m,C,y,v,I,r,a,l))&&(t.faceIndex=Math.floor(h/3),t.face.materialIndex=g.materialIndex,e.push(t))}else for(c=Math.max(0,B.start),d=Math.min(f.count,B.start+B.count);d>c;c+=3)r=f.getX(c),a=f.getX(c+1),l=f.getX(c+2),(t=Ke(this,o,A,pe,m,C,y,v,I,r,a,l))&&(t.faceIndex=Math.floor(c/3),e.push(t));else if(void 0!==m)if(Array.isArray(o))for(c=0,d=E.length;d>c;c++)for(u=o[(g=E[c]).materialIndex],h=Math.max(g.start,B.start),p=Math.min(g.start+g.count,B.start+B.count);p>h;h+=3)(t=Ke(this,u,A,pe,m,C,y,v,I,r=h,a=h+1,l=h+2))&&(t.faceIndex=Math.floor(h/3),t.face.materialIndex=g.materialIndex,e.push(t));else for(c=Math.max(0,B.start),d=Math.min(m.count,B.start+B.count);d>c;c+=3)(t=Ke(this,o,A,pe,m,C,y,v,I,r=c,a=c+1,l=c+2))&&(t.faceIndex=Math.floor(c/3),e.push(t))}else if(i.isGeometry){var x,S,w,M,b=Array.isArray(o),U=i.vertices,F=i.faces,K=i.faceVertexUvs[0];K.length>0&&(M=K);for(var Q=0,R=F.length;R>Q;Q++){var T=F[Q],k=b?o[T.materialIndex]:o;if(void 0!==k&&(t=Fe(this,k,A,pe,x=U[T.a],S=U[T.b],w=U[T.c],Me))){if(M&&M[Q]){var D=M[Q];xe.copy(D[0]),Se.copy(D[1]),we.copy(D[2]),t.uv=RA.getUV(Me,x,S,w,xe,Se,we,new s)}t.face=T,t.faceIndex=Q,e.push(t)}}}},clone:function(){return new this.constructor(this.geometry,this.material).copy(this)}});var Qe=0,Re=new M,Te=new H,ke=new y;function De(){Object.defineProperty(this,"id",{value:Qe+=2}),this.uuid=a.generateUUID(),this.name="",this.type="Geometry",this.vertices=[],this.colors=[],this.faces=[],this.faceVertexUvs=[[]],this.morphTargets=[],this.morphNormals=[],this.skinWeights=[],this.skinIndices=[],this.lineDistances=[],this.boundingBox=null,this.boundingSphere=null,this.elementsNeedUpdate=!1,this.verticesNeedUpdate=!1,this.uvsNeedUpdate=!1,this.normalsNeedUpdate=!1,this.colorsNeedUpdate=!1,this.lineDistancesNeedUpdate=!1,this.groupsNeedUpdate=!1}De.prototype=Object.assign(Object.create(i.prototype),{constructor:De,isGeometry:!0,applyMatrix4:function(A){for(var e=(new l).getNormalMatrix(A),t=0,i=this.vertices.length;i>t;t++){this.vertices[t].applyMatrix4(A)}for(t=0,i=this.faces.length;i>t;t++){var o=this.faces[t];o.normal.applyMatrix3(e).normalize();for(var n=0,r=o.vertexNormals.length;r>n;n++)o.vertexNormals[n].applyMatrix3(e).normalize()}return null!==this.boundingBox&&this.computeBoundingBox(),null!==this.boundingSphere&&this.computeBoundingSphere(),this.verticesNeedUpdate=!0,this.normalsNeedUpdate=!0,this},rotateX:function(A){return Re.makeRotationX(A),this.applyMatrix4(Re),this},rotateY:function(A){return Re.makeRotationY(A),this.applyMatrix4(Re),this},rotateZ:function(A){return Re.makeRotationZ(A),this.applyMatrix4(Re),this},translate:function(A,e,t){return Re.makeTranslation(A,e,t),this.applyMatrix4(Re),this},scale:function(A,e,t){return Re.makeScale(A,e,t),this.applyMatrix4(Re),this},lookAt:function(A){return Te.lookAt(A),Te.updateMatrix(),this.applyMatrix4(Te.matrix),this},fromBufferGeometry:function(A){var e=this,t=null!==A.index?A.index.array:void 0,i=A.attributes;if(void 0===i.position)return console.error("THREE.Geometry.fromBufferGeometry(): Position attribute required for conversion."),this;var o=i.position.array,n=void 0!==i.normal?i.normal.array:void 0,r=void 0!==i.color?i.color.array:void 0,a=void 0!==i.uv?i.uv.array:void 0,l=void 0!==i.uv2?i.uv2.array:void 0;void 0!==l&&(this.faceVertexUvs[1]=[]);for(var c=0;o.length>c;c+=3)e.vertices.push((new y).fromArray(o,c)),void 0!==r&&e.colors.push((new LA).fromArray(r,c));function h(A,t,i,o){var c=void 0===r?[]:[e.colors[A].clone(),e.colors[t].clone(),e.colors[i].clone()],h=new GA(A,t,i,void 0===n?[]:[(new y).fromArray(n,3*A),(new y).fromArray(n,3*t),(new y).fromArray(n,3*i)],c,o);e.faces.push(h),void 0!==a&&e.faceVertexUvs[0].push([(new s).fromArray(a,2*A),(new s).fromArray(a,2*t),(new s).fromArray(a,2*i)]),void 0!==l&&e.faceVertexUvs[1].push([(new s).fromArray(l,2*A),(new s).fromArray(l,2*t),(new s).fromArray(l,2*i)])}var d=A.groups;if(d.length>0)for(c=0;d.length>c;c++)for(var p=d[c],g=p.start,u=g,f=g+p.count;f>u;u+=3)void 0!==t?h(t[u],t[u+1],t[u+2],p.materialIndex):h(u,u+1,u+2,p.materialIndex);else if(void 0!==t)for(c=0;t.length>c;c+=3)h(t[c],t[c+1],t[c+2]);else for(c=0;o.length/3>c;c+=3)h(c,c+1,c+2);return this.computeFaceNormals(),null!==A.boundingBox&&(this.boundingBox=A.boundingBox.clone()),null!==A.boundingSphere&&(this.boundingSphere=A.boundingSphere.clone()),this},center:function(){return this.computeBoundingBox(),this.boundingBox.getCenter(ke).negate(),this.translate(ke.x,ke.y,ke.z),this},normalize:function(){this.computeBoundingSphere();var A=this.boundingSphere.center,e=this.boundingSphere.radius,t=0===e?1:1/e,i=new M;return i.set(t,0,0,-t*A.x,0,t,0,-t*A.y,0,0,t,-t*A.z,0,0,0,1),this.applyMatrix4(i),this},computeFaceNormals:function(){for(var A=new y,e=new y,t=0,i=this.faces.length;i>t;t++){var o=this.faces[t],n=this.vertices[o.a],r=this.vertices[o.b];A.subVectors(this.vertices[o.c],r),e.subVectors(n,r),A.cross(e),A.normalize(),o.normal.copy(A)}},computeVertexNormals:function(A){var e,t,i,o,n,r;for(void 0===A&&(A=!0),r=new Array(this.vertices.length),e=0,t=this.vertices.length;t>e;e++)r[e]=new y;if(A){var a,s,l=new y,c=new y;for(i=0,o=this.faces.length;o>i;i++)a=this.vertices[(n=this.faces[i]).a],l.subVectors(this.vertices[n.c],s=this.vertices[n.b]),c.subVectors(a,s),l.cross(c),r[n.a].add(l),r[n.b].add(l),r[n.c].add(l)}else for(this.computeFaceNormals(),i=0,o=this.faces.length;o>i;i++)r[(n=this.faces[i]).a].add(n.normal),r[n.b].add(n.normal),r[n.c].add(n.normal);for(e=0,t=this.vertices.length;t>e;e++)r[e].normalize();for(i=0,o=this.faces.length;o>i;i++){var h=(n=this.faces[i]).vertexNormals;3===h.length?(h[0].copy(r[n.a]),h[1].copy(r[n.b]),h[2].copy(r[n.c])):(h[0]=r[n.a].clone(),h[1]=r[n.b].clone(),h[2]=r[n.c].clone())}this.faces.length>0&&(this.normalsNeedUpdate=!0)},computeFlatVertexNormals:function(){var A,e,t;for(this.computeFaceNormals(),A=0,e=this.faces.length;e>A;A++){var i=(t=this.faces[A]).vertexNormals;3===i.length?(i[0].copy(t.normal),i[1].copy(t.normal),i[2].copy(t.normal)):(i[0]=t.normal.clone(),i[1]=t.normal.clone(),i[2]=t.normal.clone())}this.faces.length>0&&(this.normalsNeedUpdate=!0)},computeMorphNormals:function(){var A,e,t,i,o;for(t=0,i=this.faces.length;i>t;t++)for((o=this.faces[t]).__originalFaceNormal?o.__originalFaceNormal.copy(o.normal):o.__originalFaceNormal=o.normal.clone(),o.__originalVertexNormals||(o.__originalVertexNormals=[]),A=0,e=o.vertexNormals.length;e>A;A++)o.__originalVertexNormals[A]?o.__originalVertexNormals[A].copy(o.vertexNormals[A]):o.__originalVertexNormals[A]=o.vertexNormals[A].clone();var n=new De;for(n.faces=this.faces,A=0,e=this.morphTargets.length;e>A;A++){if(!this.morphNormals[A]){this.morphNormals[A]={},this.morphNormals[A].faceNormals=[],this.morphNormals[A].vertexNormals=[];var r=this.morphNormals[A].faceNormals,a=this.morphNormals[A].vertexNormals;for(t=0,i=this.faces.length;i>t;t++)s=new y,l={a:new y,b:new y,c:new y},r.push(s),a.push(l)}var s,l,c=this.morphNormals[A];for(n.vertices=this.morphTargets[A].vertices,n.computeFaceNormals(),n.computeVertexNormals(),t=0,i=this.faces.length;i>t;t++)l=c.vertexNormals[t],(s=c.faceNormals[t]).copy((o=this.faces[t]).normal),l.a.copy(o.vertexNormals[0]),l.b.copy(o.vertexNormals[1]),l.c.copy(o.vertexNormals[2])}for(t=0,i=this.faces.length;i>t;t++)(o=this.faces[t]).normal=o.__originalFaceNormal,o.vertexNormals=o.__originalVertexNormals},computeBoundingBox:function(){null===this.boundingBox&&(this.boundingBox=new aA),this.boundingBox.setFromPoints(this.vertices)},computeBoundingSphere:function(){null===this.boundingSphere&&(this.boundingSphere=new cA),this.boundingSphere.setFromPoints(this.vertices)},merge:function(A,e,t){if(A&&A.isGeometry){var i,o=this.vertices.length,n=this.vertices,r=A.vertices,a=this.faces,s=A.faces,c=this.colors,h=A.colors;void 0===t&&(t=0),void 0!==e&&(i=(new l).getNormalMatrix(e));for(var d=0,p=r.length;p>d;d++){var g=r[d].clone();void 0!==e&&g.applyMatrix4(e),n.push(g)}for(d=0,p=h.length;p>d;d++)c.push(h[d].clone());for(d=0,p=s.length;p>d;d++){var u,f,m=s[d],C=m.vertexNormals,y=m.vertexColors;(u=new GA(m.a+o,m.b+o,m.c+o)).normal.copy(m.normal),void 0!==i&&u.normal.applyMatrix3(i).normalize();for(var v=0,I=C.length;I>v;v++)f=C[v].clone(),void 0!==i&&f.applyMatrix3(i).normalize(),u.vertexNormals.push(f);u.color.copy(m.color);for(v=0,I=y.length;I>v;v++)u.vertexColors.push(y[v].clone());u.materialIndex=m.materialIndex+t,a.push(u)}for(d=0,p=A.faceVertexUvs.length;p>d;d++){var E=A.faceVertexUvs[d];void 0===this.faceVertexUvs[d]&&(this.faceVertexUvs[d]=[]);for(v=0,I=E.length;I>v;v++){for(var B=E[v],x=[],S=0,w=B.length;w>S;S++)x.push(B[S].clone());this.faceVertexUvs[d].push(x)}}}else console.error("THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.",A)},mergeMesh:function(A){A&&A.isMesh?(A.matrixAutoUpdate&&A.updateMatrix(),this.merge(A.geometry,A.matrix)):console.error("THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.",A)},mergeVertices:function(){var A,e,t,i,o,n,r,a,s={},l=[],c=[],h=Math.pow(10,4);for(t=0,i=this.vertices.length;i>t;t++)A=this.vertices[t],void 0===s[e=Math.round(A.x*h)+"_"+Math.round(A.y*h)+"_"+Math.round(A.z*h)]?(s[e]=t,l.push(this.vertices[t]),c[t]=l.length-1):c[t]=c[s[e]];var d=[];for(t=0,i=this.faces.length;i>t;t++){(o=this.faces[t]).a=c[o.a],o.b=c[o.b],o.c=c[o.c],n=[o.a,o.b,o.c];for(var p=0;3>p;p++)if(n[p]===n[(p+1)%3]){d.push(t);break}}for(t=d.length-1;t>=0;t--){var g=d[t];for(this.faces.splice(g,1),r=0,a=this.faceVertexUvs.length;a>r;r++)this.faceVertexUvs[r].splice(g,1)}var u=this.vertices.length-l.length;return this.vertices=l,u},setFromPoints:function(A){this.vertices=[];for(var e=0,t=A.length;t>e;e++){var i=A[e];this.vertices.push(new y(i.x,i.y,i.z||0))}return this},sortFacesByMaterialIndex:function(){for(var A=this.faces,e=A.length,t=0;e>t;t++)A[t]._id=t;A.sort((function(A,e){return A.materialIndex-e.materialIndex}));var i,o,n=this.faceVertexUvs[0],r=this.faceVertexUvs[1];n&&n.length===e&&(i=[]),r&&r.length===e&&(o=[]);for(t=0;e>t;t++){var a=A[t]._id;i&&i.push(n[a]),o&&o.push(r[a])}i&&(this.faceVertexUvs[0]=i),o&&(this.faceVertexUvs[1]=o)},toJSON:function(){var A={metadata:{version:4.5,type:"Geometry",generator:"Geometry.toJSON"}};if(A.uuid=this.uuid,A.type=this.type,""!==this.name&&(A.name=this.name),void 0!==this.parameters){var e=this.parameters;for(var t in e)void 0!==e[t]&&(A[t]=e[t]);return A}for(var i=[],o=0;this.vertices.length>o;o++){var n=this.vertices[o];i.push(n.x,n.y,n.z)}var r=[],a=[],s={},l=[],c={},h=[],d={};for(o=0;this.faces.length>o;o++){var p=this.faces[o],g=void 0!==this.faceVertexUvs[0][o],u=p.normal.length()>0,f=p.vertexNormals.length>0,m=1!==p.color.r||1!==p.color.g||1!==p.color.b,C=p.vertexColors.length>0,y=0;if(y=B(y,0,0),y=B(y,1,!0),y=B(y,2,!1),y=B(y,3,g),y=B(y,4,u),y=B(y,5,f),y=B(y,6,m),y=B(y,7,C),r.push(y),r.push(p.a,p.b,p.c),r.push(p.materialIndex),g){var v=this.faceVertexUvs[0][o];r.push(w(v[0]),w(v[1]),w(v[2]))}if(u&&r.push(x(p.normal)),f){var I=p.vertexNormals;r.push(x(I[0]),x(I[1]),x(I[2]))}if(m&&r.push(S(p.color)),C){var E=p.vertexColors;r.push(S(E[0]),S(E[1]),S(E[2]))}}function B(A,e,t){return t?A|1<0&&(A.data.colors=l),h.length>0&&(A.data.uvs=[h]),A.data.faces=r,A},clone:function(){return(new De).copy(this)},copy:function(A){var e,t,i,o,n,r;this.vertices=[],this.colors=[],this.faces=[],this.faceVertexUvs=[[]],this.morphTargets=[],this.morphNormals=[],this.skinWeights=[],this.skinIndices=[],this.lineDistances=[],this.boundingBox=null,this.boundingSphere=null,this.name=A.name;var a=A.vertices;for(e=0,t=a.length;t>e;e++)this.vertices.push(a[e].clone());var s=A.colors;for(e=0,t=s.length;t>e;e++)this.colors.push(s[e].clone());var l=A.faces;for(e=0,t=l.length;t>e;e++)this.faces.push(l[e].clone());for(e=0,t=A.faceVertexUvs.length;t>e;e++){var c=A.faceVertexUvs[e];for(void 0===this.faceVertexUvs[e]&&(this.faceVertexUvs[e]=[]),i=0,o=c.length;o>i;i++){var h=c[i],d=[];for(n=0,r=h.length;r>n;n++){d.push(h[n].clone())}this.faceVertexUvs[e].push(d)}}var p=A.morphTargets;for(e=0,t=p.length;t>e;e++){var g={};if(g.name=p[e].name,void 0!==p[e].vertices)for(g.vertices=[],i=0,o=p[e].vertices.length;o>i;i++)g.vertices.push(p[e].vertices[i].clone());if(void 0!==p[e].normals)for(g.normals=[],i=0,o=p[e].normals.length;o>i;i++)g.normals.push(p[e].normals[i].clone());this.morphTargets.push(g)}var u=A.morphNormals;for(e=0,t=u.length;t>e;e++){var f={};if(void 0!==u[e].vertexNormals)for(f.vertexNormals=[],i=0,o=u[e].vertexNormals.length;o>i;i++){var m=u[e].vertexNormals[i],C={};C.a=m.a.clone(),C.b=m.b.clone(),C.c=m.c.clone(),f.vertexNormals.push(C)}if(void 0!==u[e].faceNormals)for(f.faceNormals=[],i=0,o=u[e].faceNormals.length;o>i;i++)f.faceNormals.push(u[e].faceNormals[i].clone());this.morphNormals.push(f)}var y=A.skinWeights;for(e=0,t=y.length;t>e;e++)this.skinWeights.push(y[e].clone());var v=A.skinIndices;for(e=0,t=v.length;t>e;e++)this.skinIndices.push(v[e].clone());var I=A.lineDistances;for(e=0,t=I.length;t>e;e++)this.lineDistances.push(I[e]);var E=A.boundingBox;null!==E&&(this.boundingBox=E.clone());var B=A.boundingSphere;return null!==B&&(this.boundingSphere=B.clone()),this.elementsNeedUpdate=A.elementsNeedUpdate,this.verticesNeedUpdate=A.verticesNeedUpdate,this.uvsNeedUpdate=A.uvsNeedUpdate,this.normalsNeedUpdate=A.normalsNeedUpdate,this.colorsNeedUpdate=A.colorsNeedUpdate,this.lineDistancesNeedUpdate=A.lineDistancesNeedUpdate,this.groupsNeedUpdate=A.groupsNeedUpdate,this},dispose:function(){this.dispatchEvent({type:"dispose"})}});class Le extends De{constructor(A,e,t,i,o,n){super(),this.type="BoxGeometry",this.parameters={width:A,height:e,depth:t,widthSegments:i,heightSegments:o,depthSegments:n},this.fromBufferGeometry(new Ne(A,e,t,i,o,n)),this.mergeVertices()}}class Ne extends he{constructor(A,e,t,i,o,n){super(),this.type="BoxBufferGeometry",this.parameters={width:A,height:e,depth:t,widthSegments:i,heightSegments:o,depthSegments:n};var r=this;A=A||1,e=e||1,t=t||1,i=Math.floor(i)||1,o=Math.floor(o)||1,n=Math.floor(n)||1;var a=[],s=[],l=[],c=[],h=0,d=0;function p(A,e,t,i,o,n,p,g,u,f,m){var C,v,I=n/u,E=p/f,B=n/2,x=p/2,S=g/2,w=u+1,M=f+1,b=0,U=0,F=new y;for(v=0;M>v;v++){var K=v*E-x;for(C=0;w>C;C++){F[A]=(C*I-B)*i,F[e]=K*o,F[t]=S,s.push(F.x,F.y,F.z),F[A]=0,F[e]=0,F[t]=g>0?1:-1,l.push(F.x,F.y,F.z),c.push(C/u),c.push(1-v/f),b+=1}}for(v=0;f>v;v++)for(C=0;u>C;C++){var Q=h+C+w*(v+1),R=h+(C+1)+w*(v+1),T=h+(C+1)+w*v;a.push(h+C+w*v,Q,T),a.push(Q,R,T),U+=6}r.addGroup(d,U,m),d+=U,h+=b}p("z","y","x",-1,-1,t,e,A,n,o,0),p("z","y","x",1,-1,t,e,-A,n,o,1),p("x","z","y",1,1,A,t,e,i,n,2),p("x","z","y",1,-1,A,t,-e,i,n,3),p("x","y","z",1,-1,A,e,t,i,o,4),p("x","y","z",-1,-1,A,e,-t,i,o,5),this.setIndex(a),this.setAttribute("position",new Ae(s,3)),this.setAttribute("normal",new Ae(l,3)),this.setAttribute("uv",new Ae(c,2))}}function Oe(A){var e={};for(var t in A)for(var i in e[t]={},A[t]){var o=A[t][i];e[t][i]=o&&(o.isColor||o.isMatrix3||o.isMatrix4||o.isVector2||o.isVector3||o.isVector4||o.isTexture)?o.clone():Array.isArray(o)?o.slice():o}return e}function Ve(A){for(var e={},t=0;A.length>t;t++){var i=Oe(A[t]);for(var o in i)e[o]=i[o]}return e}var Ge={clone:Oe,merge:Ve};function Pe(A){qA.call(this),this.type="ShaderMaterial",this.defines={},this.uniforms={},this.vertexShader="void main() {\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}",this.fragmentShader="void main() {\n\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}",this.linewidth=1,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.lights=!1,this.clipping=!1,this.skinning=!1,this.morphTargets=!1,this.morphNormals=!1,this.extensions={derivatives:!1,fragDepth:!1,drawBuffers:!1,shaderTextureLOD:!1},this.defaultAttributeValues={color:[1,1,1],uv:[0,0],uv2:[0,0]},this.index0AttributeName=void 0,this.uniformsNeedUpdate=!1,void 0!==A&&(void 0!==A.attributes&&console.error("THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead."),this.setValues(A))}function qe(){H.call(this),this.type="Camera",this.matrixWorldInverse=new M,this.projectionMatrix=new M,this.projectionMatrixInverse=new M}function je(A,e,t,i){qe.call(this),this.type="PerspectiveCamera",this.fov=void 0!==A?A:50,this.zoom=1,this.near=void 0!==t?t:.1,this.far=void 0!==i?i:2e3,this.focus=10,this.aspect=void 0!==e?e:1,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix()}(Pe.prototype=Object.create(qA.prototype)).constructor=Pe,Pe.prototype.isShaderMaterial=!0,Pe.prototype.copy=function(A){return qA.prototype.copy.call(this,A),this.fragmentShader=A.fragmentShader,this.vertexShader=A.vertexShader,this.uniforms=Oe(A.uniforms),this.defines=Object.assign({},A.defines),this.wireframe=A.wireframe,this.wireframeLinewidth=A.wireframeLinewidth,this.lights=A.lights,this.clipping=A.clipping,this.skinning=A.skinning,this.morphTargets=A.morphTargets,this.morphNormals=A.morphNormals,this.extensions=A.extensions,this},Pe.prototype.toJSON=function(A){var e=qA.prototype.toJSON.call(this,A);for(var t in e.uniforms={},this.uniforms){var i=this.uniforms[t].value;e.uniforms[t]=i&&i.isTexture?{type:"t",value:i.toJSON(A).uuid}:i&&i.isColor?{type:"c",value:i.getHex()}:i&&i.isVector2?{type:"v2",value:i.toArray()}:i&&i.isVector3?{type:"v3",value:i.toArray()}:i&&i.isVector4?{type:"v4",value:i.toArray()}:i&&i.isMatrix3?{type:"m3",value:i.toArray()}:i&&i.isMatrix4?{type:"m4",value:i.toArray()}:{value:i}}Object.keys(this.defines).length>0&&(e.defines=this.defines),e.vertexShader=this.vertexShader,e.fragmentShader=this.fragmentShader;var o={};for(var n in this.extensions)!0===this.extensions[n]&&(o[n]=!0);return Object.keys(o).length>0&&(e.extensions=o),e},qe.prototype=Object.assign(Object.create(H.prototype),{constructor:qe,isCamera:!0,copy:function(A,e){return H.prototype.copy.call(this,A,e),this.matrixWorldInverse.copy(A.matrixWorldInverse),this.projectionMatrix.copy(A.projectionMatrix),this.projectionMatrixInverse.copy(A.projectionMatrixInverse),this},getWorldDirection:function(A){void 0===A&&(console.warn("THREE.Camera: .getWorldDirection() target is now required"),A=new y),this.updateMatrixWorld(!0);var e=this.matrixWorld.elements;return A.set(-e[8],-e[9],-e[10]).normalize()},updateMatrixWorld:function(A){H.prototype.updateMatrixWorld.call(this,A),this.matrixWorldInverse.getInverse(this.matrixWorld)},updateWorldMatrix:function(A,e){H.prototype.updateWorldMatrix.call(this,A,e),this.matrixWorldInverse.getInverse(this.matrixWorld)},clone:function(){return(new this.constructor).copy(this)}}),je.prototype=Object.assign(Object.create(qe.prototype),{constructor:je,isPerspectiveCamera:!0,copy:function(A,e){return qe.prototype.copy.call(this,A,e),this.fov=A.fov,this.zoom=A.zoom,this.near=A.near,this.far=A.far,this.focus=A.focus,this.aspect=A.aspect,this.view=null===A.view?null:Object.assign({},A.view),this.filmGauge=A.filmGauge,this.filmOffset=A.filmOffset,this},setFocalLength:function(A){var e=.5*this.getFilmHeight()/A;this.fov=2*a.RAD2DEG*Math.atan(e),this.updateProjectionMatrix()},getFocalLength:function(){var A=Math.tan(.5*a.DEG2RAD*this.fov);return.5*this.getFilmHeight()/A},getEffectiveFOV:function(){return 2*a.RAD2DEG*Math.atan(Math.tan(.5*a.DEG2RAD*this.fov)/this.zoom)},getFilmWidth:function(){return this.filmGauge*Math.min(this.aspect,1)},getFilmHeight:function(){return this.filmGauge/Math.max(this.aspect,1)},setViewOffset:function(A,e,t,i,o,n){this.aspect=A/e,null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=A,this.view.fullHeight=e,this.view.offsetX=t,this.view.offsetY=i,this.view.width=o,this.view.height=n,this.updateProjectionMatrix()},clearViewOffset:function(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()},updateProjectionMatrix:function(){var A=this.near,e=A*Math.tan(.5*a.DEG2RAD*this.fov)/this.zoom,t=2*e,i=this.aspect*t,o=-.5*i,n=this.view;if(null!==this.view&&this.view.enabled){var r=n.fullWidth,s=n.fullHeight;o+=n.offsetX*i/r,e-=n.offsetY*t/s,i*=n.width/r,t*=n.height/s}var l=this.filmOffset;0!==l&&(o+=A*l/this.getFilmWidth()),this.projectionMatrix.makePerspective(o,o+i,e,e-t,A,this.far),this.projectionMatrixInverse.getInverse(this.projectionMatrix)},toJSON:function(A){var e=H.prototype.toJSON.call(this,A);return e.object.fov=this.fov,e.object.zoom=this.zoom,e.object.near=this.near,e.object.far=this.far,e.object.focus=this.focus,e.object.aspect=this.aspect,null!==this.view&&(e.object.view=Object.assign({},this.view)),e.object.filmGauge=this.filmGauge,e.object.filmOffset=this.filmOffset,e}});function He(A,e,t,i){H.call(this),this.type="CubeCamera";var o=new je(90,1,A,e);o.up.set(0,-1,0),o.lookAt(new y(1,0,0)),this.add(o);var n=new je(90,1,A,e);n.up.set(0,-1,0),n.lookAt(new y(-1,0,0)),this.add(n);var r=new je(90,1,A,e);r.up.set(0,0,1),r.lookAt(new y(0,1,0)),this.add(r);var a=new je(90,1,A,e);a.up.set(0,0,-1),a.lookAt(new y(0,-1,0)),this.add(a);var s=new je(90,1,A,e);s.up.set(0,-1,0),s.lookAt(new y(0,0,1)),this.add(s);var l=new je(90,1,A,e);l.up.set(0,-1,0),l.lookAt(new y(0,0,-1)),this.add(l),this.renderTarget=new Ye(t,i=i||{format:1022,magFilter:1006,minFilter:1006}),this.renderTarget.texture.name="CubeCamera",this.update=function(A,e){null===this.parent&&this.updateMatrixWorld();var t=A.getRenderTarget(),i=this.renderTarget,c=i.texture.generateMipmaps;i.texture.generateMipmaps=!1,A.setRenderTarget(i,0),A.render(e,o),A.setRenderTarget(i,1),A.render(e,n),A.setRenderTarget(i,2),A.render(e,r),A.setRenderTarget(i,3),A.render(e,a),A.setRenderTarget(i,4),A.render(e,s),i.texture.generateMipmaps=c,A.setRenderTarget(i,5),A.render(e,l),A.setRenderTarget(t)},this.clear=function(A,e,t,i){for(var o=A.getRenderTarget(),n=this.renderTarget,r=0;6>r;r++)A.setRenderTarget(n,r),A.clear(e,t,i);A.setRenderTarget(o)}}function Ye(A,e,t){Number.isInteger(e)&&(console.warn("THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )"),e=t),g.call(this,A,A,e)}function We(A,e,t,i,o,n,r,a,s,l,c,h){d.call(this,null,n,r,a,s,l,i,o,c,h),this.image={data:A||null,width:e||1,height:t||1},this.magFilter=void 0!==s?s:1003,this.minFilter=void 0!==l?l:1003,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1,this.needsUpdate=!0}(He.prototype=Object.create(H.prototype)).constructor=He,(Ye.prototype=Object.create(g.prototype)).constructor=Ye,Ye.prototype.isWebGLCubeRenderTarget=!0,Ye.prototype.fromEquirectangularTexture=function(A,e){this.texture.type=e.type,this.texture.format=e.format,this.texture.encoding=e.encoding;var t=new Y,i={uniforms:{tEquirect:{value:null}},vertexShader:["varying vec3 vWorldDirection;","vec3 transformDirection( in vec3 dir, in mat4 matrix ) {","\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );","}","void main() {","\tvWorldDirection = transformDirection( position, modelMatrix );","\t#include ","\t#include ","}"].join("\n"),fragmentShader:["uniform sampler2D tEquirect;","varying vec3 vWorldDirection;","#define RECIPROCAL_PI 0.31830988618","#define RECIPROCAL_PI2 0.15915494","void main() {","\tvec3 direction = normalize( vWorldDirection );","\tvec2 sampleUV;","\tsampleUV.y = asin( clamp( direction.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;","\tsampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;","\tgl_FragColor = texture2D( tEquirect, sampleUV );","}"].join("\n")},o=new Pe({type:"CubemapFromEquirect",uniforms:Oe(i.uniforms),vertexShader:i.vertexShader,fragmentShader:i.fragmentShader,side:1,blending:0});o.uniforms.tEquirect.value=e;var n=new Ue(new Ne(5,5,5),o);t.add(n);var r=new He(1,10,1);return r.renderTarget=this,r.renderTarget.texture.name="CubeCameraTexture",r.update(A,t),n.geometry.dispose(),n.material.dispose(),this},(We.prototype=Object.create(d.prototype)).constructor=We,We.prototype.isDataTexture=!0;var Je=new cA,ze=new y;function Ze(A,e,t,i,o,n){this.planes=[void 0!==A?A:new EA,void 0!==e?e:new EA,void 0!==t?t:new EA,void 0!==i?i:new EA,void 0!==o?o:new EA,void 0!==n?n:new EA]}Object.assign(Ze.prototype,{set:function(A,e,t,i,o,n){var r=this.planes;return r[0].copy(A),r[1].copy(e),r[2].copy(t),r[3].copy(i),r[4].copy(o),r[5].copy(n),this},clone:function(){return(new this.constructor).copy(this)},copy:function(A){for(var e=this.planes,t=0;6>t;t++)e[t].copy(A.planes[t]);return this},setFromProjectionMatrix:function(A){var e=this.planes,t=A.elements,i=t[0],o=t[1],n=t[2],r=t[3],a=t[4],s=t[5],l=t[6],c=t[7],h=t[8],d=t[9],p=t[10],g=t[11],u=t[12],f=t[13],m=t[14],C=t[15];return e[0].setComponents(r-i,c-a,g-h,C-u).normalize(),e[1].setComponents(r+i,c+a,g+h,C+u).normalize(),e[2].setComponents(r+o,c+s,g+d,C+f).normalize(),e[3].setComponents(r-o,c-s,g-d,C-f).normalize(),e[4].setComponents(r-n,c-l,g-p,C-m).normalize(),e[5].setComponents(r+n,c+l,g+p,C+m).normalize(),this},intersectsObject:function(A){var e=A.geometry;return null===e.boundingSphere&&e.computeBoundingSphere(),Je.copy(e.boundingSphere).applyMatrix4(A.matrixWorld),this.intersectsSphere(Je)},intersectsSprite:function(A){return Je.center.set(0,0,0),Je.radius=.7071067811865476,Je.applyMatrix4(A.matrixWorld),this.intersectsSphere(Je)},intersectsSphere:function(A){for(var e=this.planes,t=A.center,i=-A.radius,o=0;6>o;o++){if(i>e[o].distanceToPoint(t))return!1}return!0},intersectsBox:function(A){for(var e=this.planes,t=0;6>t;t++){var i=e[t];if(ze.x=i.normal.x>0?A.max.x:A.min.x,ze.y=i.normal.y>0?A.max.y:A.min.y,ze.z=i.normal.z>0?A.max.z:A.min.z,0>i.distanceToPoint(ze))return!1}return!0},containsPoint:function(A){for(var e=this.planes,t=0;6>t;t++)if(0>e[t].distanceToPoint(A))return!1;return!0}});var Xe={common:{diffuse:{value:new LA(15658734)},opacity:{value:1},map:{value:null},uvTransform:{value:new l},uv2Transform:{value:new l},alphaMap:{value:null}},specularmap:{specularMap:{value:null}},envmap:{envMap:{value:null},flipEnvMap:{value:-1},reflectivity:{value:1},refractionRatio:{value:.98},maxMipLevel:{value:0}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1}},emissivemap:{emissiveMap:{value:null}},bumpmap:{bumpMap:{value:null},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalScale:{value:new s(1,1)}},displacementmap:{displacementMap:{value:null},displacementScale:{value:1},displacementBias:{value:0}},roughnessmap:{roughnessMap:{value:null}},metalnessmap:{metalnessMap:{value:null}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new LA(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowBias:{},shadowRadius:{},shadowMapSize:{}}},spotShadowMap:{value:[]},spotShadowMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}}},points:{diffuse:{value:new LA(15658734)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},uvTransform:{value:new l}},sprite:{diffuse:{value:new LA(15658734)},opacity:{value:1},center:{value:new s(.5,.5)},rotation:{value:0},map:{value:null},alphaMap:{value:null},uvTransform:{value:new l}}};function _e(){var A=null,e=!1,t=null;function i(o,n){!1!==e&&(t(o,n),A.requestAnimationFrame(i))}return{start:function(){!0!==e&&null!==t&&(A.requestAnimationFrame(i),e=!0)},stop:function(){e=!1},setAnimationLoop:function(A){t=A},setContext:function(e){A=e}}}function $e(A,e){var t=e.isWebGL2,i=new WeakMap;return{get:function(A){return A.isInterleavedBufferAttribute&&(A=A.data),i.get(A)},remove:function(e){e.isInterleavedBufferAttribute&&(e=e.data);var t=i.get(e);t&&(A.deleteBuffer(t.buffer),i.delete(e))},update:function(e,o){e.isInterleavedBufferAttribute&&(e=e.data);var n=i.get(e);void 0===n?i.set(e,function(e,t){var i=e.array,o=e.usage,n=A.createBuffer();A.bindBuffer(t,n),A.bufferData(t,i,o),e.onUploadCallback();var r=5126;return i instanceof Float32Array?r=5126:i instanceof Float64Array?console.warn("THREE.WebGLAttributes: Unsupported data buffer format: Float64Array."):i instanceof Uint16Array?r=5123:i instanceof Int16Array?r=5122:i instanceof Uint32Array?r=5125:i instanceof Int32Array?r=5124:i instanceof Int8Array?r=5120:i instanceof Uint8Array&&(r=5121),{buffer:n,type:r,bytesPerElement:i.BYTES_PER_ELEMENT,version:e.version}}(e,o)):e.version>n.version&&(!function(e,i,o){var n=i.array,r=i.updateRange;A.bindBuffer(o,e),-1===r.count?A.bufferSubData(o,0,n):(t?A.bufferSubData(o,r.offset*n.BYTES_PER_ELEMENT,n,r.offset,r.count):A.bufferSubData(o,r.offset*n.BYTES_PER_ELEMENT,n.subarray(r.offset,r.offset+r.count)),r.count=-1)}(n.buffer,e,o),n.version=e.version)}}}function At(A,e,t,i){De.call(this),this.type="PlaneGeometry",this.parameters={width:A,height:e,widthSegments:t,heightSegments:i},this.fromBufferGeometry(new et(A,e,t,i)),this.mergeVertices()}function et(A,e,t,i){he.call(this),this.type="PlaneBufferGeometry",this.parameters={width:A,height:e,widthSegments:t,heightSegments:i};var o,n,r=(A=A||1)/2,a=(e=e||1)/2,s=Math.floor(t)||1,l=Math.floor(i)||1,c=s+1,h=l+1,d=A/s,p=e/l,g=[],u=[],f=[],m=[];for(n=0;h>n;n++){var C=n*p-a;for(o=0;c>o;o++){u.push(o*d-r,-C,0),f.push(0,0,1),m.push(o/s),m.push(1-n/l)}}for(n=0;l>n;n++)for(o=0;s>o;o++){var y=o+c*(n+1),v=o+1+c*(n+1),I=o+1+c*n;g.push(o+c*n,y,I),g.push(y,v,I)}this.setIndex(g),this.setAttribute("position",new Ae(u,3)),this.setAttribute("normal",new Ae(f,3)),this.setAttribute("uv",new Ae(m,2))}(At.prototype=Object.create(De.prototype)).constructor=At,(et.prototype=Object.create(he.prototype)).constructor=et;var tt={alphamap_fragment:"#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\n#endif",alphamap_pars_fragment:"#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif",alphatest_fragment:"#ifdef ALPHATEST\n\tif ( diffuseColor.a < ALPHATEST ) discard;\n#endif",aomap_fragment:"#ifdef USE_AOMAP\n\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\n\treflectedLight.indirectDiffuse *= ambientOcclusion;\n\t#if defined( USE_ENVMAP ) && defined( STANDARD )\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\n\t#endif\n#endif",aomap_pars_fragment:"#ifdef USE_AOMAP\n\tuniform sampler2D aoMap;\n\tuniform float aoMapIntensity;\n#endif",begin_vertex:"vec3 transformed = vec3( position );",beginnormal_vertex:"vec3 objectNormal = vec3( normal );\n#ifdef USE_TANGENT\n\tvec3 objectTangent = vec3( tangent.xyz );\n#endif",bsdfs:"vec2 integrateSpecularBRDF( const in float dotNV, const in float roughness ) {\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\treturn vec2( -1.04, 1.04 ) * a004 + r.zw;\n}\nfloat punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\tif( cutoffDistance > 0.0 ) {\n\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t}\n\treturn distanceFalloff;\n#else\n\tif( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\t}\n\treturn 1.0;\n#endif\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nvec3 F_Schlick_RoughnessDependent( const in vec3 F0, const in float dotNV, const in float roughness ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotNV - 6.98316 ) * dotNV );\n\tvec3 Fr = max( vec3( 1.0 - roughness ), F0 ) - F0;\n\treturn Fr * fresnel + F0;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\treturn 1.0 / ( gl * gv );\n}\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + viewDir );\n\tfloat dotNL = saturate( dot( normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( G * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\nvec3 BRDF_Specular_GGX_Environment( const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\treturn specularColor * brdf.x + brdf.y;\n}\nvoid BRDF_Specular_Multiscattering_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tvec3 F = F_Schlick_RoughnessDependent( specularColor, dotNV, roughness );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\tvec3 FssEss = F * brdf.x + brdf.y;\n\tfloat Ess = brdf.x + brdf.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie(float roughness, float NoH) {\n\tfloat invAlpha = 1.0 / roughness;\n\tfloat cos2h = NoH * NoH;\n\tfloat sin2h = max(1.0 - cos2h, 0.0078125);\treturn (2.0 + invAlpha) * pow(sin2h, invAlpha * 0.5) / (2.0 * PI);\n}\nfloat V_Neubelt(float NoV, float NoL) {\n\treturn saturate(1.0 / (4.0 * (NoL + NoV - NoL * NoV)));\n}\nvec3 BRDF_Specular_Sheen( const in float roughness, const in vec3 L, const in GeometricContext geometry, vec3 specularColor ) {\n\tvec3 N = geometry.normal;\n\tvec3 V = geometry.viewDir;\n\tvec3 H = normalize( V + L );\n\tfloat dotNH = saturate( dot( N, H ) );\n\treturn specularColor * D_Charlie( roughness, dotNH ) * V_Neubelt( dot(N, V), dot(N, L) );\n}\n#endif",bumpmap_pars_fragment:"#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n\t\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 );\n\t\tfDet *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif",clipping_planes_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#pragma unroll_loop_end\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\tif ( clipped ) discard;\n\t#endif\n#endif",clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif",color_fragment:"#ifdef USE_COLOR\n\tdiffuseColor.rgb *= vColor;\n#endif",color_pars_fragment:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif",color_pars_vertex:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif",color_vertex:"#ifdef USE_COLOR\n\tvColor.xyz = color.xyz;\n#endif",common:"#define PI 3.14159265359\n#define PI2 6.28318530718\n#define PI_HALF 1.5707963267949\n#define RECIPROCAL_PI 0.31830988618\n#define RECIPROCAL_PI2 0.15915494\n#define LOG2 1.442695\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement(a) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract(sin(sn) * c);\n}\n#ifdef HIGH_PRECISION\n\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n\tfloat max3( vec3 v ) { return max( max( v.x, v.y ), v.z ); }\n\tfloat precisionSafeLength( vec3 v ) {\n\t\tfloat maxComponent = max3( abs( v ) );\n\t\treturn length( v / maxComponent ) * maxComponent;\n\t}\n#endif\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n#ifdef CLEARCOAT\n\tvec3 clearcoatNormal;\n#endif\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\n\treturn - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat linearToRelativeLuminance( const in vec3 color ) {\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\treturn dot( weights, color.rgb );\n}\nbool isPerspectiveMatrix( mat4 m ) {\n return m[ 2 ][ 3 ] == - 1.0;\n}",cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UV\n#define cubeUV_maxMipLevel 8.0\n#define cubeUV_minMipLevel 4.0\n#define cubeUV_maxTileSize 256.0\n#define cubeUV_minTileSize 16.0\nfloat getFace(vec3 direction) {\n vec3 absDirection = abs(direction);\n float face = -1.0;\n if (absDirection.x > absDirection.z) {\n if (absDirection.x > absDirection.y)\n face = direction.x > 0.0 ? 0.0 : 3.0;\n else\n face = direction.y > 0.0 ? 1.0 : 4.0;\n } else {\n if (absDirection.z > absDirection.y)\n face = direction.z > 0.0 ? 2.0 : 5.0;\n else\n face = direction.y > 0.0 ? 1.0 : 4.0;\n }\n return face;\n}\nvec2 getUV(vec3 direction, float face) {\n vec2 uv;\n if (face == 0.0) {\n uv = vec2(-direction.z, direction.y) / abs(direction.x);\n } else if (face == 1.0) {\n uv = vec2(direction.x, -direction.z) / abs(direction.y);\n } else if (face == 2.0) {\n uv = direction.xy / abs(direction.z);\n } else if (face == 3.0) {\n uv = vec2(direction.z, direction.y) / abs(direction.x);\n } else if (face == 4.0) {\n uv = direction.xz / abs(direction.y);\n } else {\n uv = vec2(-direction.x, direction.y) / abs(direction.z);\n }\n return 0.5 * (uv + 1.0);\n}\nvec3 bilinearCubeUV(sampler2D envMap, vec3 direction, float mipInt) {\n float face = getFace(direction);\n float filterInt = max(cubeUV_minMipLevel - mipInt, 0.0);\n mipInt = max(mipInt, cubeUV_minMipLevel);\n float faceSize = exp2(mipInt);\n float texelSize = 1.0 / (3.0 * cubeUV_maxTileSize);\n vec2 uv = getUV(direction, face) * (faceSize - 1.0);\n vec2 f = fract(uv);\n uv += 0.5 - f;\n if (face > 2.0) {\n uv.y += faceSize;\n face -= 3.0;\n }\n uv.x += face * faceSize;\n if(mipInt < cubeUV_maxMipLevel){\n uv.y += 2.0 * cubeUV_maxTileSize;\n }\n uv.y += filterInt * 2.0 * cubeUV_minTileSize;\n uv.x += 3.0 * max(0.0, cubeUV_maxTileSize - 2.0 * faceSize);\n uv *= texelSize;\n vec3 tl = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n uv.x += texelSize;\n vec3 tr = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n uv.y += texelSize;\n vec3 br = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n uv.x -= texelSize;\n vec3 bl = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n vec3 tm = mix(tl, tr, f.x);\n vec3 bm = mix(bl, br, f.x);\n return mix(tm, bm, f.y);\n}\n#define r0 1.0\n#define v0 0.339\n#define m0 -2.0\n#define r1 0.8\n#define v1 0.276\n#define m1 -1.0\n#define r4 0.4\n#define v4 0.046\n#define m4 2.0\n#define r5 0.305\n#define v5 0.016\n#define m5 3.0\n#define r6 0.21\n#define v6 0.0038\n#define m6 4.0\nfloat roughnessToMip(float roughness) {\n float mip = 0.0;\n if (roughness >= r1) {\n mip = (r0 - roughness) * (m1 - m0) / (r0 - r1) + m0;\n } else if (roughness >= r4) {\n mip = (r1 - roughness) * (m4 - m1) / (r1 - r4) + m1;\n } else if (roughness >= r5) {\n mip = (r4 - roughness) * (m5 - m4) / (r4 - r5) + m4;\n } else if (roughness >= r6) {\n mip = (r5 - roughness) * (m6 - m5) / (r5 - r6) + m5;\n } else {\n mip = -2.0 * log2(1.16 * roughness); }\n return mip;\n}\nvec4 textureCubeUV(sampler2D envMap, vec3 sampleDir, float roughness) {\n float mip = clamp(roughnessToMip(roughness), m0, cubeUV_maxMipLevel);\n float mipF = fract(mip);\n float mipInt = floor(mip);\n vec3 color0 = bilinearCubeUV(envMap, sampleDir, mipInt);\n if (mipF == 0.0) {\n return vec4(color0, 1.0);\n } else {\n vec3 color1 = bilinearCubeUV(envMap, sampleDir, mipInt + 1.0);\n return vec4(mix(color0, color1, mipF), 1.0);\n }\n}\n#endif",defaultnormal_vertex:"vec3 transformedNormal = objectNormal;\n#ifdef USE_INSTANCING\n\tmat3 m = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\n\ttransformedNormal = m * transformedNormal;\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif",displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif",displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\n#endif",emissivemap_fragment:"#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif",emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif",encodings_fragment:"gl_FragColor = linearToOutputTexel( gl_FragColor );",encodings_pars_fragment:"\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\n\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract( Le );\n\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\n\treturn vec4( max( vRGB, 0.0 ), 1.0 );\n}",envmap_fragment:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvec3 cameraToFrag;\n\t\t\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\n\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\tvec2 sampleUV;\n\t\treflectVec = normalize( reflectVec );\n\t\tsampleUV.y = asin( clamp( reflectVec.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\t\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\tvec4 envColor = texture2D( envMap, sampleUV );\n\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\treflectVec = normalize( reflectVec );\n\t\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0, 0.0, 1.0 ) );\n\t\tvec4 envColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifndef ENVMAP_TYPE_CUBE_UV\n\t\tenvColor = envMapTexelToLinear( envColor );\n\t#endif\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif",envmap_common_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\tuniform int maxMipLevel;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\t\n#endif",envmap_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif",envmap_pars_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif",envmap_physical_pars_fragment:"#if defined( USE_ENVMAP )\n\t#ifdef ENVMAP_MODE_REFRACTION\n\t\tuniform float refractionRatio;\n\t#endif\n\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\n\t\t#else\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\t\t#endif\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t}\n\tfloat getSpecularMIPLevel( const in float roughness, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat sigma = PI * roughness * roughness / ( 1.0 + roughness );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar + log2( sigma );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t vec3 reflectVec = reflect( -viewDir, normal );\n\t\t reflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t#else\n\t\t vec3 reflectVec = refract( -viewDir, normal, refractionRatio );\n\t\t#endif\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( roughness, maxMIPLevel );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\n\t\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\t\tvec2 sampleUV;\n\t\t\tsampleUV.y = asin( clamp( reflectVec.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\t\t\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, sampleUV, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = texture2D( envMap, sampleUV, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\t\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0,0.0,1.0 ) );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#endif\n\t\treturn envMapColor.rgb * envMapIntensity;\n\t}\n#endif",envmap_vertex:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex;\n\t\tif ( isOrthographic ) { \n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif",fog_vertex:"#ifdef USE_FOG\n\tfogDepth = -mvPosition.z;\n#endif",fog_pars_vertex:"#ifdef USE_FOG\n\tvarying float fogDepth;\n#endif",fog_fragment:"#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif",fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float fogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif",gradientmap_pars_fragment:"#ifdef USE_GRADIENTMAP\n\tuniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\tfloat dotNL = dot( normal, lightDirection );\n\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t#ifdef USE_GRADIENTMAP\n\t\treturn texture2D( gradientMap, coord ).rgb;\n\t#else\n\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t#endif\n}",lightmap_fragment:"#ifdef USE_LIGHTMAP\n\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\treflectedLight.indirectDiffuse += PI * lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n#endif",lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif",lights_lambert_vertex:"vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\nvIndirectFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n\tvIndirectBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\n#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif",lights_pars_begin:"uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\nuniform vec3 lightProbe[ 9 ];\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n\treturn result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in GeometricContext geometry ) {\n\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treturn irradiance;\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tdirectLight.color = directionalLight.color;\n\t\tdirectLight.direction = directionalLight.direction;\n\t\tdirectLight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tdirectLight.color = pointLight.color;\n\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n\t\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\n\t\tif ( angleCos > spotLight.coneCos ) {\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\t\tdirectLight.color = spotLight.color;\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tdirectLight.visible = true;\n\t\t} else {\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tirradiance *= PI;\n\t\t#endif\n\t\treturn irradiance;\n\t}\n#endif",lights_toon_fragment:"ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;",lights_toon_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct ToonMaterial {\n\tvec3\tdiffuseColor;\n\tvec3\tspecularColor;\n\tfloat\tspecularShininess;\n\tfloat\tspecularStrength;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon\n#define Material_LightProbeLOD( material )\t(0)",lights_phong_fragment:"BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;",lights_phong_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct BlinnPhongMaterial {\n\tvec3\tdiffuseColor;\n\tvec3\tspecularColor;\n\tfloat\tspecularShininess;\n\tfloat\tspecularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)",lights_physical_fragment:"PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.specularRoughness = max( roughnessFactor, 0.0525 );material.specularRoughness += geometryRoughness;\nmaterial.specularRoughness = min( material.specularRoughness, 1.0 );\n#ifdef REFLECTIVITY\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#endif\n#ifdef CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;\n\t#endif\n\tmaterial.clearcoat = saturate( material.clearcoat );\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n\tmaterial.clearcoatRoughness += geometryRoughness;\n\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_SHEEN\n\tmaterial.sheenColor = sheen;\n#endif",lights_physical_pars_fragment:"struct PhysicalMaterial {\n\tvec3\tdiffuseColor;\n\tfloat\tspecularRoughness;\n\tvec3\tspecularColor;\n#ifdef CLEARCOAT\n\tfloat clearcoat;\n\tfloat clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tvec3 sheenColor;\n#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearcoatDHRApprox( const in float roughness, const in float dotNL ) {\n\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.specularRoughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3( 0, 1, 0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNL = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = ccDotNL * directLight.color;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tccIrradiance *= PI;\n\t\t#endif\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t\treflectedLight.directSpecular += ccIrradiance * material.clearcoat * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_Sheen(\n\t\t\tmaterial.specularRoughness,\n\t\t\tdirectLight.direction,\n\t\t\tgeometry,\n\t\t\tmaterial.sheenColor\n\t\t);\n\t#else\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.normal, material.specularColor, material.specularRoughness);\n\t#endif\n\treflectedLight.directDiffuse += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNV = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular += clearcoatRadiance * material.clearcoat * BRDF_Specular_GGX_Environment( geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t\tfloat ccDotNL = ccDotNV;\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\tfloat clearcoatInv = 1.0 - clearcoatDHR;\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\tBRDF_Specular_Multiscattering_Environment( geometry, material.specularColor, material.specularRoughness, singleScattering, multiScattering );\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\n\treflectedLight.indirectSpecular += clearcoatInv * radiance * singleScattering;\n\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}",lights_fragment_begin:"\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n#ifdef CLEARCOAT\n\tgeometry.clearcoatNormal = clearcoatNormal;\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\tirradiance += getLightProbeIrradiance( lightProbe, geometry );\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n#endif",lights_fragment_maps:"#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.normal, material.specularRoughness, maxMipLevel );\n\t#ifdef CLEARCOAT\n\t\tclearcoatRadiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness, maxMipLevel );\n\t#endif\n#endif",lights_fragment_end:"#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\n#endif",logdepthbuf_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif",logdepthbuf_pars_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif",logdepthbuf_pars_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t\tvarying float vIsPerspective;\n\t#else\n\t\tuniform float logDepthBufFC;\n\t#endif\n#endif",logdepthbuf_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n\t#else\n\t\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\n\t\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\t\tgl_Position.z *= gl_Position.w;\n\t\t}\n\t#endif\n#endif",map_fragment:"#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif",map_pars_fragment:"#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif",map_particle_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n#endif\n#ifdef USE_MAP\n\tvec4 mapTexel = texture2D( map, uv );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif",map_particle_pars_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tuniform mat3 uvTransform;\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif",metalnessmap_fragment:"float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif",metalnessmap_pars_fragment:"#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif",morphnormal_vertex:"#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\n\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\n\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\n\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\n#endif",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n\tuniform float morphTargetBaseInfluence;\n\t#ifndef USE_MORPHNORMALS\n\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif",morphtarget_vertex:"#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\n\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\n\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\n\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\n\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\n\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\n\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\n\t#endif\n#endif",normal_fragment_begin:"#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\t#ifdef USE_TANGENT\n\t\tvec3 tangent = normalize( vTangent );\n\t\tvec3 bitangent = normalize( vBitangent );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\ttangent = tangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t\tbitangent = bitangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t#endif\n\t\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tmat3 vTBN = mat3( tangent, bitangent, normal );\n\t\t#endif\n\t#endif\n#endif\nvec3 geometryNormal = normal;",normal_fragment_maps:"#ifdef OBJECTSPACE_NORMALMAP\n\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( TANGENTSPACE_NORMALMAP )\n\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\t#ifdef USE_TANGENT\n\t\tnormal = normalize( vTBN * mapN );\n\t#else\n\t\tnormal = perturbNormal2Arb( -vViewPosition, normal, mapN );\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif",normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN ) {\n\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tfloat scale = sign( st1.t * st0.s - st0.t * st1.s );\n\t\tvec3 S = normalize( ( q0 * st1.t - q1 * st0.t ) * scale );\n\t\tvec3 T = normalize( ( - q0 * st1.s + q1 * st0.s ) * scale );\n\t\tvec3 N = normalize( surf_norm );\n\t\tmat3 tsn = mat3( S, T, N );\n\t\tmapN.xy *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\treturn normalize( tsn * mapN );\n\t}\n#endif",clearcoat_normal_fragment_begin:"#ifdef CLEARCOAT\n\tvec3 clearcoatNormal = geometryNormal;\n#endif",clearcoat_normal_fragment_maps:"#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\t#ifdef USE_TANGENT\n\t\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\n\t#else\n\t\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN );\n\t#endif\n#endif",clearcoat_pars_fragment:"#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif",packing:"vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nvec4 pack2HalfToRGBA( vec2 v ) {\n\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ));\n\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w);\n}\nvec2 unpackRGBATo2Half( vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}",premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif",project_vertex:"vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;",dithering_fragment:"#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif",dithering_pars_fragment:"#ifdef DITHERING\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif",roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif",roughnessmap_pars_fragment:"#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif",shadowmap_pars_fragment:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n\t\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\n\t}\n\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n\t\tfloat occlusion = 1.0;\n\t\tvec2 distribution = texture2DDistribution( shadow, uv );\n\t\tfloat hard_shadow = step( compare , distribution.x );\n\t\tif (hard_shadow != 1.0 ) {\n\t\t\tfloat distance = compare - distribution.x ;\n\t\t\tfloat variance = max( 0.00000, distribution.y * distribution.y );\n\t\t\tfloat softness_probability = variance / (variance + distance * distance );\t\t\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\t\t\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n\t\t}\n\t\treturn occlusion;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif",shadowmap_pars_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n#endif",shadowmap_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * worldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * worldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * worldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n#endif",shadowmask_pars_fragment:"float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tdirectionalLight = directionalLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tspotLight = spotLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tpointLight = pointLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#endif\n\treturn shadow;\n}",skinbase_vertex:"#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform highp sampler2D boneTexture;\n\t\tuniform int boneTextureSize;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif",skinning_vertex:"#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif",skinnormal_vertex:"#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif",specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif",specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif",tonemapping_fragment:"#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif",tonemapping_pars_fragment:"#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nuniform float toneMappingWhitePoint;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\n#define Uncharted2Helper( x ) max( ( ( x * ( 0.15 * x + 0.10 * 0.50 ) + 0.20 * 0.02 ) / ( x * ( 0.15 * x + 0.50 ) + 0.20 * 0.30 ) ) - 0.02 / 0.30, vec3( 0.0 ) )\nvec3 Uncharted2ToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( Uncharted2Helper( color ) / Uncharted2Helper( vec3( toneMappingWhitePoint ) ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( ( color * ( 2.51 * color + 0.03 ) ) / ( color * ( 2.43 * color + 0.59 ) + 0.14 ) );\n}",uv_pars_fragment:"#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\n\tvarying vec2 vUv;\n#endif",uv_pars_vertex:"#ifdef USE_UV\n\t#ifdef UVS_VERTEX_ONLY\n\t\tvec2 vUv;\n\t#else\n\t\tvarying vec2 vUv;\n\t#endif\n\tuniform mat3 uvTransform;\n#endif",uv_vertex:"#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif",uv2_pars_fragment:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif",uv2_pars_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n\tuniform mat3 uv2Transform;\n#endif",uv2_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif",background_frag:"uniform sampler2D t2D;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}",background_vert:"varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}",cube_frag:"#include \nuniform float opacity;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 vReflect = vWorldDirection;\n\t#include \n\tgl_FragColor = envColor;\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}",cube_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}",depth_frag:"#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\t#endif\n}",depth_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvHighPrecisionZW = gl_Position.zw;\n}",distanceRGBA_frag:"#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}",distanceRGBA_vert:"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}",equirect_frag:"uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV;\n\tsampleUV.y = asin( clamp( direction.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\tsampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;\n\tvec4 texColor = texture2D( tEquirect, sampleUV );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}",equirect_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}",linedashed_frag:"uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}",linedashed_vert:"uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvLineDistance = scale * lineDistance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshbasic_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}",meshbasic_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_ENVMAP\n\t#include \n\t#include \n\t#include \n\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_frag:"uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\treflectedLight.indirectDiffuse = getAmbientLightIrradiance( ambientLightColor );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\n\t#else\n\t\treflectedLight.indirectDiffuse += vIndirectFront;\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_vert:"#define LAMBERT\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshmatcap_frag:"#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t\tmatcapColor = matcapTexelToLinear( matcapColor );\n\t#else\n\t\tvec4 matcapColor = vec4( 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}",meshmatcap_vert:"#define MATCAP\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifndef FLAT_SHADED\n\t\tvNormal = normalize( transformedNormal );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n}",meshtoon_frag:"#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshtoon_vert:"#define TOON\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}",meshphong_frag:"#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphong_vert:"#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphysical_frag:"#define STANDARD\n#ifdef PHYSICAL\n\t#define REFLECTIVITY\n\t#define CLEARCOAT\n\t#define TRANSPARENCY\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef TRANSPARENCY\n\tuniform float transparency;\n#endif\n#ifdef REFLECTIVITY\n\tuniform float reflectivity;\n#endif\n#ifdef CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheen;\n#endif\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#ifdef TRANSPARENCY\n\t\tdiffuseColor.a *= saturate( 1. - transparency + linearToRelativeLuminance( reflectedLight.directSpecular + reflectedLight.indirectSpecular ) );\n\t#endif\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphysical_vert:"#define STANDARD\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}",normal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}",normal_vert:"#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}",points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}",points_vert:"uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}",shadow_frag:"uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n\t#include \n\t#include \n}",shadow_vert:"#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",sprite_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n}",sprite_vert:"uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}"},it={basic:{uniforms:Ve([Xe.common,Xe.specularmap,Xe.envmap,Xe.aomap,Xe.lightmap,Xe.fog]),vertexShader:tt.meshbasic_vert,fragmentShader:tt.meshbasic_frag},lambert:{uniforms:Ve([Xe.common,Xe.specularmap,Xe.envmap,Xe.aomap,Xe.lightmap,Xe.emissivemap,Xe.fog,Xe.lights,{emissive:{value:new LA(0)}}]),vertexShader:tt.meshlambert_vert,fragmentShader:tt.meshlambert_frag},phong:{uniforms:Ve([Xe.common,Xe.specularmap,Xe.envmap,Xe.aomap,Xe.lightmap,Xe.emissivemap,Xe.bumpmap,Xe.normalmap,Xe.displacementmap,Xe.fog,Xe.lights,{emissive:{value:new LA(0)},specular:{value:new LA(1118481)},shininess:{value:30}}]),vertexShader:tt.meshphong_vert,fragmentShader:tt.meshphong_frag},standard:{uniforms:Ve([Xe.common,Xe.envmap,Xe.aomap,Xe.lightmap,Xe.emissivemap,Xe.bumpmap,Xe.normalmap,Xe.displacementmap,Xe.roughnessmap,Xe.metalnessmap,Xe.fog,Xe.lights,{emissive:{value:new LA(0)},roughness:{value:.5},metalness:{value:.5},envMapIntensity:{value:1}}]),vertexShader:tt.meshphysical_vert,fragmentShader:tt.meshphysical_frag},toon:{uniforms:Ve([Xe.common,Xe.specularmap,Xe.aomap,Xe.lightmap,Xe.emissivemap,Xe.bumpmap,Xe.normalmap,Xe.displacementmap,Xe.gradientmap,Xe.fog,Xe.lights,{emissive:{value:new LA(0)},specular:{value:new LA(1118481)},shininess:{value:30}}]),vertexShader:tt.meshtoon_vert,fragmentShader:tt.meshtoon_frag},matcap:{uniforms:Ve([Xe.common,Xe.bumpmap,Xe.normalmap,Xe.displacementmap,Xe.fog,{matcap:{value:null}}]),vertexShader:tt.meshmatcap_vert,fragmentShader:tt.meshmatcap_frag},points:{uniforms:Ve([Xe.points,Xe.fog]),vertexShader:tt.points_vert,fragmentShader:tt.points_frag},dashed:{uniforms:Ve([Xe.common,Xe.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:tt.linedashed_vert,fragmentShader:tt.linedashed_frag},depth:{uniforms:Ve([Xe.common,Xe.displacementmap]),vertexShader:tt.depth_vert,fragmentShader:tt.depth_frag},normal:{uniforms:Ve([Xe.common,Xe.bumpmap,Xe.normalmap,Xe.displacementmap,{opacity:{value:1}}]),vertexShader:tt.normal_vert,fragmentShader:tt.normal_frag},sprite:{uniforms:Ve([Xe.sprite,Xe.fog]),vertexShader:tt.sprite_vert,fragmentShader:tt.sprite_frag},background:{uniforms:{uvTransform:{value:new l},t2D:{value:null}},vertexShader:tt.background_vert,fragmentShader:tt.background_frag},cube:{uniforms:Ve([Xe.envmap,{opacity:{value:1}}]),vertexShader:tt.cube_vert,fragmentShader:tt.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:tt.equirect_vert,fragmentShader:tt.equirect_frag},distanceRGBA:{uniforms:Ve([Xe.common,Xe.displacementmap,{referencePosition:{value:new y},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:tt.distanceRGBA_vert,fragmentShader:tt.distanceRGBA_frag},shadow:{uniforms:Ve([Xe.lights,Xe.fog,{color:{value:new LA(0)},opacity:{value:1}}]),vertexShader:tt.shadow_vert,fragmentShader:tt.shadow_frag}};function ot(A,e,t,i){var o,n,r=new LA(0),a=0,s=null,l=0,c=null;function h(A,t){e.buffers.color.setClear(A.r,A.g,A.b,t,i)}return{getClearColor:function(){return r},setClearColor:function(A,e){r.set(A),h(r,a=void 0!==e?e:1)},getClearAlpha:function(){return a},setClearAlpha:function(A){h(r,a=A)},render:function(e,i,d,p){var g=i.background,u=A.xr,f=u.getSession&&u.getSession();if(f&&"additive"===f.environmentBlendMode&&(g=null),null===g?h(r,a):g&&g.isColor&&(h(g,1),p=!0),(A.autoClear||p)&&A.clear(A.autoClearColor,A.autoClearDepth,A.autoClearStencil),g&&(g.isCubeTexture||g.isWebGLCubeRenderTarget||306===g.mapping)){void 0===n&&((n=new Ue(new Ne(1,1,1),new Pe({type:"BackgroundCubeMaterial",uniforms:Oe(it.cube.uniforms),vertexShader:it.cube.vertexShader,fragmentShader:it.cube.fragmentShader,side:1,depthTest:!1,depthWrite:!1,fog:!1}))).geometry.deleteAttribute("normal"),n.geometry.deleteAttribute("uv"),n.onBeforeRender=function(A,e,t){this.matrixWorld.copyPosition(t.matrixWorld)},Object.defineProperty(n.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),t.update(n));var m=g.isWebGLCubeRenderTarget?g.texture:g;n.material.uniforms.envMap.value=m,n.material.uniforms.flipEnvMap.value=m.isCubeTexture?-1:1,s===g&&l===m.version&&c===A.toneMapping||(n.material.needsUpdate=!0,s=g,l=m.version,c=A.toneMapping),e.unshift(n,n.geometry,n.material,0,0,null)}else g&&g.isTexture&&(void 0===o&&((o=new Ue(new et(2,2),new Pe({type:"BackgroundMaterial",uniforms:Oe(it.background.uniforms),vertexShader:it.background.vertexShader,fragmentShader:it.background.fragmentShader,side:0,depthTest:!1,depthWrite:!1,fog:!1}))).geometry.deleteAttribute("normal"),Object.defineProperty(o.material,"map",{get:function(){return this.uniforms.t2D.value}}),t.update(o)),o.material.uniforms.t2D.value=g,!0===g.matrixAutoUpdate&&g.updateMatrix(),o.material.uniforms.uvTransform.value.copy(g.matrix),s===g&&l===g.version&&c===A.toneMapping||(o.material.needsUpdate=!0,s=g,l=g.version,c=A.toneMapping),e.unshift(o,o.geometry,o.material,0,0,null))}}}function nt(A,e,t,i){var o,n=i.isWebGL2;this.setMode=function(A){o=A},this.render=function(e,i){A.drawArrays(o,e,i),t.update(i,o)},this.renderInstances=function(i,r,a,s){if(0!==s){var l,c;if(n)l=A,c="drawArraysInstanced";else if(c="drawArraysInstancedANGLE",null===(l=e.get("ANGLE_instanced_arrays")))return void console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");l[c](o,r,a,s),t.update(a,o,s)}}}function rt(A,e,t){var i;function o(e){if("highp"===e){if(A.getShaderPrecisionFormat(35633,36338).precision>0&&A.getShaderPrecisionFormat(35632,36338).precision>0)return"highp";e="mediump"}return"mediump"===e&&A.getShaderPrecisionFormat(35633,36337).precision>0&&A.getShaderPrecisionFormat(35632,36337).precision>0?"mediump":"lowp"}var n="undefined"!=typeof WebGL2RenderingContext&&A instanceof WebGL2RenderingContext||"undefined"!=typeof WebGL2ComputeRenderingContext&&A instanceof WebGL2ComputeRenderingContext,r=void 0!==t.precision?t.precision:"highp",a=o(r);a!==r&&(console.warn("THREE.WebGLRenderer:",r,"not supported, using",a,"instead."),r=a);var s=!0===t.logarithmicDepthBuffer,l=A.getParameter(34930),c=A.getParameter(35660),h=A.getParameter(3379),d=A.getParameter(34076),p=A.getParameter(34921),g=A.getParameter(36347),u=A.getParameter(36348),f=A.getParameter(36349),m=c>0,C=n||!!e.get("OES_texture_float");return{isWebGL2:n,getMaxAnisotropy:function(){if(void 0!==i)return i;var t=e.get("EXT_texture_filter_anisotropic");return i=null!==t?A.getParameter(t.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0},getMaxPrecision:o,precision:r,logarithmicDepthBuffer:s,maxTextures:l,maxVertexTextures:c,maxTextureSize:h,maxCubemapSize:d,maxAttributes:p,maxVertexUniforms:g,maxVaryings:u,maxFragmentUniforms:f,vertexTextures:m,floatFragmentTextures:C,floatVertexTextures:m&&C,maxSamples:n?A.getParameter(36183):0}}function at(){var A=this,e=null,t=0,i=!1,o=!1,n=new EA,r=new l,a={value:null,needsUpdate:!1};function s(){a.value!==e&&(a.value=e,a.needsUpdate=t>0),A.numPlanes=t,A.numIntersection=0}function c(e,t,i,o){var s=null!==e?e.length:0,l=null;if(0!==s){if(l=a.value,!0!==o||null===l){var c=i+4*s,h=t.matrixWorldInverse;r.getNormalMatrix(h),(null===l||c>l.length)&&(l=new Float32Array(c));for(var d=0,p=i;d!==s;++d,p+=4)n.copy(e[d]).applyMatrix4(h,r),n.normal.toArray(l,p),l[p+3]=n.constant}a.value=l,a.needsUpdate=!0}return A.numPlanes=s,A.numIntersection=0,l}this.uniform=a,this.numPlanes=0,this.numIntersection=0,this.init=function(A,o,n){var r=0!==A.length||o||0!==t||i;return i=o,e=c(A,n,0),t=A.length,r},this.beginShadows=function(){o=!0,c(null)},this.endShadows=function(){o=!1,s()},this.setState=function(A,n,r,l,h,d){if(!i||null===A||0===A.length||o&&!r)o?c(null):s();else{var p=o?0:t,g=4*p,u=h.clippingState||null;a.value=u,u=c(A,l,g,d);for(var f=0;f!==g;++f)u[f]=e[f];h.clippingState=u,this.numIntersection=n?this.numPlanes:0,this.numPlanes+=p}}}function st(A){var e={};return{get:function(t){if(void 0!==e[t])return e[t];var i;switch(t){case"WEBGL_depth_texture":i=A.getExtension("WEBGL_depth_texture")||A.getExtension("MOZ_WEBGL_depth_texture")||A.getExtension("WEBKIT_WEBGL_depth_texture");break;case"EXT_texture_filter_anisotropic":i=A.getExtension("EXT_texture_filter_anisotropic")||A.getExtension("MOZ_EXT_texture_filter_anisotropic")||A.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case"WEBGL_compressed_texture_s3tc":i=A.getExtension("WEBGL_compressed_texture_s3tc")||A.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||A.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");break;case"WEBGL_compressed_texture_pvrtc":i=A.getExtension("WEBGL_compressed_texture_pvrtc")||A.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;default:i=A.getExtension(t)}return null===i&&console.warn("THREE.WebGLRenderer: "+t+" extension not supported."),e[t]=i,i}}}function lt(A,e,t){var i=new WeakMap,o=new WeakMap;function n(A){var r=A.target,a=i.get(r);for(var s in null!==a.index&&e.remove(a.index),a.attributes)e.remove(a.attributes[s]);r.removeEventListener("dispose",n),i.delete(r);var l=o.get(a);l&&(e.remove(l),o.delete(a)),t.memory.geometries--}function r(A){var t=[],i=A.index,n=A.attributes.position,r=0;if(null!==i){r=i.version;for(var a=0,s=(l=i.array).length;s>a;a+=3){t.push(c=l[a+0],h=l[a+1],h,d=l[a+2],d,c)}}else{var l;r=n.version;for(a=0,s=(l=n.array).length/3-1;s>a;a+=3){var c,h,d;t.push(c=a+0,h=a+1,h,d=a+2,d,c)}}var p=new(ie(t)>65535?$A:XA)(t,1);p.version=r,e.update(p,34963);var g=o.get(A);g&&e.remove(g),o.set(A,p)}return{get:function(A,e){var o=i.get(e);return o||(e.addEventListener("dispose",n),e.isBufferGeometry?o=e:e.isGeometry&&(void 0===e._bufferGeometry&&(e._bufferGeometry=(new he).setFromObject(A)),o=e._bufferGeometry),i.set(e,o),t.memory.geometries++,o)},update:function(A){var t=A.index,i=A.attributes;for(var o in null!==t&&e.update(t,34963),i)e.update(i[o],34962);var n=A.morphAttributes;for(var o in n)for(var r=n[o],a=0,s=r.length;s>a;a++)e.update(r[a],34962)},getWireframeAttribute:function(A){var e=o.get(A);if(e){var t=A.index;null!==t&&t.version>e.version&&r(A)}else r(A);return o.get(A)}}}function ct(A,e,t,i){var o,n,r,a=i.isWebGL2;this.setMode=function(A){o=A},this.setIndex=function(A){n=A.type,r=A.bytesPerElement},this.render=function(e,i){A.drawElements(o,i,n,e*r),t.update(i,o)},this.renderInstances=function(i,s,l,c){if(0!==c){var h,d;if(a)h=A,d="drawElementsInstanced";else if(d="drawElementsInstancedANGLE",null===(h=e.get("ANGLE_instanced_arrays")))return void console.error("THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");h[d](o,l,n,s*r,c),t.update(l,o,c)}}}function ht(A){var e={frame:0,calls:0,triangles:0,points:0,lines:0};return{memory:{geometries:0,textures:0},render:e,programs:null,autoReset:!0,reset:function(){e.frame++,e.calls=0,e.triangles=0,e.points=0,e.lines=0},update:function(A,t,i){switch(i=i||1,e.calls++,t){case 4:e.triangles+=i*(A/3);break;case 1:e.lines+=i*(A/2);break;case 3:e.lines+=i*(A-1);break;case 2:e.lines+=i*A;break;case 0:e.points+=i*A;break;default:console.error("THREE.WebGLInfo: Unknown draw mode:",t)}}}}function dt(A,e){return Math.abs(e[1])-Math.abs(A[1])}function pt(A){var e={},t=new Float32Array(8);return{update:function(i,o,n,r){var a=i.morphTargetInfluences,s=void 0===a?0:a.length,l=e[o.id];if(void 0===l){l=[];for(var c=0;s>c;c++)l[c]=[c,0];e[o.id]=l}var h=n.morphTargets&&o.morphAttributes.position,d=n.morphNormals&&o.morphAttributes.normal;for(c=0;s>c;c++){0!==(g=l[c])[1]&&(h&&o.deleteAttribute("morphTarget"+c),d&&o.deleteAttribute("morphNormal"+c))}for(c=0;s>c;c++){(g=l[c])[0]=c,g[1]=a[c]}l.sort(dt);var p=0;for(c=0;8>c;c++){var g;if(g=l[c]){var u=g[0],f=g[1];if(f){h&&o.setAttribute("morphTarget"+c,h[u]),d&&o.setAttribute("morphNormal"+c,d[u]),t[c]=f,p+=f;continue}}t[c]=0}var m=o.morphTargetsRelative?1:1-p;r.getUniforms().setValue(A,"morphTargetBaseInfluence",m),r.getUniforms().setValue(A,"morphTargetInfluences",t)}}}function gt(A,e,t,i){var o=new WeakMap;return{update:function(A){var n=i.render.frame,r=A.geometry,a=e.get(A,r);return o.get(a)!==n&&(r.isGeometry&&a.updateFromObject(A),e.update(a),o.set(a,n)),A.isInstancedMesh&&t.update(A.instanceMatrix,34962),a},dispose:function(){o=new WeakMap}}}function ut(A,e,t,i,o,n,r,a,s,l){d.call(this,A=void 0!==A?A:[],e=void 0!==e?e:301,t,i,o,n,r=void 0!==r?r:1022,a,s,l),this.flipY=!1}function ft(A,e,t,i){d.call(this,null),this.image={data:A||null,width:e||1,height:t||1,depth:i||1},this.magFilter=1003,this.minFilter=1003,this.wrapR=1001,this.generateMipmaps=!1,this.flipY=!1,this.needsUpdate=!0}function mt(A,e,t,i){d.call(this,null),this.image={data:A||null,width:e||1,height:t||1,depth:i||1},this.magFilter=1003,this.minFilter=1003,this.wrapR=1001,this.generateMipmaps=!1,this.flipY=!1,this.needsUpdate=!0}it.physical={uniforms:Ve([it.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatNormalScale:{value:new s(1,1)},clearcoatNormalMap:{value:null},sheen:{value:new LA(0)},transparency:{value:0}}]),vertexShader:tt.meshphysical_vert,fragmentShader:tt.meshphysical_frag},(ut.prototype=Object.create(d.prototype)).constructor=ut,ut.prototype.isCubeTexture=!0,Object.defineProperty(ut.prototype,"images",{get:function(){return this.image},set:function(A){this.image=A}}),(ft.prototype=Object.create(d.prototype)).constructor=ft,ft.prototype.isDataTexture2DArray=!0,(mt.prototype=Object.create(d.prototype)).constructor=mt,mt.prototype.isDataTexture3D=!0;var Ct=new d,yt=new ft,vt=new mt,It=new ut,Et=[],Bt=[],xt=new Float32Array(16),St=new Float32Array(9),wt=new Float32Array(4);function Mt(A,e,t){var i=A[0];if(0>=i||i>0)return A;var o=e*t,n=Et[o];if(void 0===n&&(n=new Float32Array(o),Et[o]=n),0!==e){i.toArray(n,0);for(var r=1,a=0;r!==e;++r)A[r].toArray(n,a+=t)}return n}function bt(A,e){if(A.length!==e.length)return!1;for(var t=0,i=A.length;i>t;t++)if(A[t]!==e[t])return!1;return!0}function Ut(A,e){for(var t=0,i=e.length;i>t;t++)A[t]=e[t]}function Ft(A,e){var t=Bt[e];void 0===t&&(t=new Int32Array(e),Bt[e]=t);for(var i=0;i!==e;++i)t[i]=A.allocateTextureUnit();return t}function Kt(A,e){var t=this.cache;t[0]!==e&&(A.uniform1f(this.addr,e),t[0]=e)}function Qt(A,e){var t=this.cache;if(void 0!==e.x)t[0]===e.x&&t[1]===e.y||(A.uniform2f(this.addr,e.x,e.y),t[0]=e.x,t[1]=e.y);else{if(bt(t,e))return;A.uniform2fv(this.addr,e),Ut(t,e)}}function Rt(A,e){var t=this.cache;if(void 0!==e.x)t[0]===e.x&&t[1]===e.y&&t[2]===e.z||(A.uniform3f(this.addr,e.x,e.y,e.z),t[0]=e.x,t[1]=e.y,t[2]=e.z);else if(void 0!==e.r)t[0]===e.r&&t[1]===e.g&&t[2]===e.b||(A.uniform3f(this.addr,e.r,e.g,e.b),t[0]=e.r,t[1]=e.g,t[2]=e.b);else{if(bt(t,e))return;A.uniform3fv(this.addr,e),Ut(t,e)}}function Tt(A,e){var t=this.cache;if(void 0!==e.x)t[0]===e.x&&t[1]===e.y&&t[2]===e.z&&t[3]===e.w||(A.uniform4f(this.addr,e.x,e.y,e.z,e.w),t[0]=e.x,t[1]=e.y,t[2]=e.z,t[3]=e.w);else{if(bt(t,e))return;A.uniform4fv(this.addr,e),Ut(t,e)}}function kt(A,e){var t=this.cache,i=e.elements;if(void 0===i){if(bt(t,e))return;A.uniformMatrix2fv(this.addr,!1,e),Ut(t,e)}else{if(bt(t,i))return;wt.set(i),A.uniformMatrix2fv(this.addr,!1,wt),Ut(t,i)}}function Dt(A,e){var t=this.cache,i=e.elements;if(void 0===i){if(bt(t,e))return;A.uniformMatrix3fv(this.addr,!1,e),Ut(t,e)}else{if(bt(t,i))return;St.set(i),A.uniformMatrix3fv(this.addr,!1,St),Ut(t,i)}}function Lt(A,e){var t=this.cache,i=e.elements;if(void 0===i){if(bt(t,e))return;A.uniformMatrix4fv(this.addr,!1,e),Ut(t,e)}else{if(bt(t,i))return;xt.set(i),A.uniformMatrix4fv(this.addr,!1,xt),Ut(t,i)}}function Nt(A,e,t){var i=this.cache,o=t.allocateTextureUnit();i[0]!==o&&(A.uniform1i(this.addr,o),i[0]=o),t.safeSetTexture2D(e||Ct,o)}function Ot(A,e,t){var i=this.cache,o=t.allocateTextureUnit();i[0]!==o&&(A.uniform1i(this.addr,o),i[0]=o),t.setTexture2DArray(e||yt,o)}function Vt(A,e,t){var i=this.cache,o=t.allocateTextureUnit();i[0]!==o&&(A.uniform1i(this.addr,o),i[0]=o),t.setTexture3D(e||vt,o)}function Gt(A,e,t){var i=this.cache,o=t.allocateTextureUnit();i[0]!==o&&(A.uniform1i(this.addr,o),i[0]=o),t.safeSetTextureCube(e||It,o)}function Pt(A,e){var t=this.cache;t[0]!==e&&(A.uniform1i(this.addr,e),t[0]=e)}function qt(A,e){var t=this.cache;bt(t,e)||(A.uniform2iv(this.addr,e),Ut(t,e))}function jt(A,e){var t=this.cache;bt(t,e)||(A.uniform3iv(this.addr,e),Ut(t,e))}function Ht(A,e){var t=this.cache;bt(t,e)||(A.uniform4iv(this.addr,e),Ut(t,e))}function Yt(A,e){var t=this.cache;t[0]!==e&&(A.uniform1ui(this.addr,e),t[0]=e)}function Wt(A,e){A.uniform1fv(this.addr,e)}function Jt(A,e){A.uniform1iv(this.addr,e)}function zt(A,e){A.uniform2iv(this.addr,e)}function Zt(A,e){A.uniform3iv(this.addr,e)}function Xt(A,e){A.uniform4iv(this.addr,e)}function _t(A,e){var t=Mt(e,this.size,2);A.uniform2fv(this.addr,t)}function $t(A,e){var t=Mt(e,this.size,3);A.uniform3fv(this.addr,t)}function Ai(A,e){var t=Mt(e,this.size,4);A.uniform4fv(this.addr,t)}function ei(A,e){var t=Mt(e,this.size,4);A.uniformMatrix2fv(this.addr,!1,t)}function ti(A,e){var t=Mt(e,this.size,9);A.uniformMatrix3fv(this.addr,!1,t)}function ii(A,e){var t=Mt(e,this.size,16);A.uniformMatrix4fv(this.addr,!1,t)}function oi(A,e,t){var i=e.length,o=Ft(t,i);A.uniform1iv(this.addr,o);for(var n=0;n!==i;++n)t.safeSetTexture2D(e[n]||Ct,o[n])}function ni(A,e,t){var i=e.length,o=Ft(t,i);A.uniform1iv(this.addr,o);for(var n=0;n!==i;++n)t.safeSetTextureCube(e[n]||It,o[n])}function ri(A,e,t){this.id=A,this.addr=t,this.cache=[],this.setValue=function(A){switch(A){case 5126:return Kt;case 35664:return Qt;case 35665:return Rt;case 35666:return Tt;case 35674:return kt;case 35675:return Dt;case 35676:return Lt;case 5124:case 35670:return Pt;case 35667:case 35671:return qt;case 35668:case 35672:return jt;case 35669:case 35673:return Ht;case 5125:return Yt;case 35678:case 36198:case 36298:case 36306:case 35682:return Nt;case 35679:case 36299:case 36307:return Vt;case 35680:case 36300:case 36308:case 36293:return Gt;case 36289:case 36303:case 36311:case 36292:return Ot}}(e.type)}function ai(A,e,t){this.id=A,this.addr=t,this.cache=[],this.size=e.size,this.setValue=function(A){switch(A){case 5126:return Wt;case 35664:return _t;case 35665:return $t;case 35666:return Ai;case 35674:return ei;case 35675:return ti;case 35676:return ii;case 5124:case 35670:return Jt;case 35667:case 35671:return zt;case 35668:case 35672:return Zt;case 35669:case 35673:return Xt;case 35678:case 36198:case 36298:case 36306:case 35682:return oi;case 35680:case 36300:case 36308:case 36293:return ni}}(e.type)}function si(A){this.id=A,this.seq=[],this.map={}}ai.prototype.updateCache=function(A){var e=this.cache;A instanceof Float32Array&&e.length!==A.length&&(this.cache=new Float32Array(A.length)),Ut(e,A)},si.prototype.setValue=function(A,e,t){for(var i=this.seq,o=0,n=i.length;o!==n;++o){var r=i[o];r.setValue(A,e[r.id],t)}};var li=/([\w\d_]+)(\])?(\[|\.)?/g;function ci(A,e){A.seq.push(e),A.map[e.id]=e}function hi(A,e,t){var i=A.name,o=i.length;for(li.lastIndex=0;;){var n=li.exec(i),r=n[1],a=n[3];if("]"===n[2]&&(r|=0),void 0===a||"["===a&&li.lastIndex+2===o){ci(t,void 0===a?new ri(r,A,e):new ai(r,A,e));break}var s=t.map[r];void 0===s&&ci(t,s=new si(r)),t=s}}function di(A,e){this.seq=[],this.map={};for(var t=A.getProgramParameter(e,35718),i=0;t>i;++i){var o=A.getActiveUniform(e,i);hi(o,A.getUniformLocation(e,o.name),this)}}function pi(A,e,t){var i=A.createShader(e);return A.shaderSource(i,t),A.compileShader(i),i}di.prototype.setValue=function(A,e,t,i){var o=this.map[e];void 0!==o&&o.setValue(A,t,i)},di.prototype.setOptional=function(A,e,t){var i=e[t];void 0!==i&&this.setValue(A,t,i)},di.upload=function(A,e,t,i){for(var o=0,n=e.length;o!==n;++o){var r=e[o],a=t[r.id];!1!==a.needsUpdate&&r.setValue(A,a.value,i)}},di.seqWithValue=function(A,e){for(var t=[],i=0,o=A.length;i!==o;++i){var n=A[i];n.id in e&&t.push(n)}return t};var gi=0;function ui(A){switch(A){case 3e3:return["Linear","( value )"];case 3001:return["sRGB","( value )"];case 3002:return["RGBE","( value )"];case 3004:return["RGBM","( value, 7.0 )"];case 3005:return["RGBM","( value, 16.0 )"];case 3006:return["RGBD","( value, 256.0 )"];case 3007:return["Gamma","( value, float( GAMMA_FACTOR ) )"];case 3003:return["LogLuv","( value )"];default:throw new Error("unsupported encoding: "+A)}}function fi(A,e,t){var i=A.getShaderParameter(e,35713),o=A.getShaderInfoLog(e).trim();return i&&""===o?"":"THREE.WebGLShader: gl.getShaderInfoLog() "+t+"\n"+o+function(A){for(var e=A.split("\n"),t=0;e.length>t;t++)e[t]=t+1+": "+e[t];return e.join("\n")}(A.getShaderSource(e))}function mi(A,e){var t=ui(e);return"vec4 "+A+"( vec4 value ) { return "+t[0]+"ToLinear"+t[1]+"; }"}function Ci(A,e){var t;switch(e){case 1:t="Linear";break;case 2:t="Reinhard";break;case 3:t="Uncharted2";break;case 4:t="OptimizedCineon";break;case 5:t="ACESFilmic";break;default:throw new Error("unsupported toneMapping: "+e)}return"vec3 "+A+"( vec3 color ) { return "+t+"ToneMapping( color ); }"}function yi(A){return""!==A}function vi(A,e){return A.replace(/NUM_DIR_LIGHTS/g,e.numDirLights).replace(/NUM_SPOT_LIGHTS/g,e.numSpotLights).replace(/NUM_RECT_AREA_LIGHTS/g,e.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g,e.numPointLights).replace(/NUM_HEMI_LIGHTS/g,e.numHemiLights).replace(/NUM_DIR_LIGHT_SHADOWS/g,e.numDirLightShadows).replace(/NUM_SPOT_LIGHT_SHADOWS/g,e.numSpotLightShadows).replace(/NUM_POINT_LIGHT_SHADOWS/g,e.numPointLightShadows)}function Ii(A,e){return A.replace(/NUM_CLIPPING_PLANES/g,e.numClippingPlanes).replace(/UNION_CLIPPING_PLANES/g,e.numClippingPlanes-e.numClipIntersection)}var Ei=/^[ \t]*#include +<([\w\d./]+)>/gm;function Bi(A){return A.replace(Ei,xi)}function xi(A,e){var t=tt[e];if(void 0===t)throw new Error("Can not resolve #include <"+e+">");return Bi(t)}var Si=/#pragma unroll_loop[\s]+?for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g,wi=/#pragma unroll_loop_start[\s]+?for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}[\s]+?#pragma unroll_loop_end/g;function Mi(A){return A.replace(wi,Ui).replace(Si,bi)}function bi(A,e,t,i){return console.warn("WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead."),Ui(A,e,t,i)}function Ui(A,e,t,i){for(var o="",n=parseInt(e);n0?A.gammaFactor:1,m=t.isWebGL2?"":function(A){return[A.extensionDerivatives||A.envMapCubeUV||A.bumpMap||A.tangentSpaceNormalMap||A.clearcoatNormalMap||A.flatShading||"physical"===A.shaderID?"#extension GL_OES_standard_derivatives : enable":"",(A.extensionFragDepth||A.logarithmicDepthBuffer)&&A.rendererExtensionFragDepth?"#extension GL_EXT_frag_depth : enable":"",A.extensionDrawBuffers&&A.rendererExtensionDrawBuffers?"#extension GL_EXT_draw_buffers : require":"",(A.extensionShaderTextureLOD||A.envMap)&&A.rendererExtensionShaderTextureLod?"#extension GL_EXT_shader_texture_lod : enable":""].filter(yi).join("\n")}(t),C=function(A){var e=[];for(var t in A){var i=A[t];!1!==i&&e.push("#define "+t+" "+i)}return e.join("\n")}(l),y=s.createProgram();if(t.isRawShaderMaterial?((i=[C].filter(yi).join("\n")).length>0&&(i+="\n"),(o=[m,C].filter(yi).join("\n")).length>0&&(o+="\n")):(i=[Fi(t),"#define SHADER_NAME "+t.shaderName,C,t.instancing?"#define USE_INSTANCING":"",t.supportsVertexTextures?"#define VERTEX_TEXTURES":"","#define GAMMA_FACTOR "+f,"#define MAX_BONES "+t.maxBones,t.useFog&&t.fog?"#define USE_FOG":"",t.useFog&&t.fogExp2?"#define FOG_EXP2":"",t.map?"#define USE_MAP":"",t.envMap?"#define USE_ENVMAP":"",t.envMap?"#define "+g:"",t.lightMap?"#define USE_LIGHTMAP":"",t.aoMap?"#define USE_AOMAP":"",t.emissiveMap?"#define USE_EMISSIVEMAP":"",t.bumpMap?"#define USE_BUMPMAP":"",t.normalMap?"#define USE_NORMALMAP":"",t.normalMap&&t.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",t.normalMap&&t.tangentSpaceNormalMap?"#define TANGENTSPACE_NORMALMAP":"",t.clearcoatMap?"#define USE_CLEARCOATMAP":"",t.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",t.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",t.displacementMap&&t.supportsVertexTextures?"#define USE_DISPLACEMENTMAP":"",t.specularMap?"#define USE_SPECULARMAP":"",t.roughnessMap?"#define USE_ROUGHNESSMAP":"",t.metalnessMap?"#define USE_METALNESSMAP":"",t.alphaMap?"#define USE_ALPHAMAP":"",t.vertexTangents?"#define USE_TANGENT":"",t.vertexColors?"#define USE_COLOR":"",t.vertexUvs?"#define USE_UV":"",t.uvsVertexOnly?"#define UVS_VERTEX_ONLY":"",t.flatShading?"#define FLAT_SHADED":"",t.skinning?"#define USE_SKINNING":"",t.useVertexTexture?"#define BONE_TEXTURE":"",t.morphTargets?"#define USE_MORPHTARGETS":"",t.morphNormals&&!1===t.flatShading?"#define USE_MORPHNORMALS":"",t.doubleSided?"#define DOUBLE_SIDED":"",t.flipSided?"#define FLIP_SIDED":"",t.shadowMapEnabled?"#define USE_SHADOWMAP":"",t.shadowMapEnabled?"#define "+d:"",t.sizeAttenuation?"#define USE_SIZEATTENUATION":"",t.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",t.logarithmicDepthBuffer&&t.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;","#ifdef USE_INSTANCING"," attribute mat4 instanceMatrix;","#endif","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_TANGENT","\tattribute vec4 tangent;","#endif","#ifdef USE_COLOR","\tattribute vec3 color;","#endif","#ifdef USE_MORPHTARGETS","\tattribute vec3 morphTarget0;","\tattribute vec3 morphTarget1;","\tattribute vec3 morphTarget2;","\tattribute vec3 morphTarget3;","\t#ifdef USE_MORPHNORMALS","\t\tattribute vec3 morphNormal0;","\t\tattribute vec3 morphNormal1;","\t\tattribute vec3 morphNormal2;","\t\tattribute vec3 morphNormal3;","\t#else","\t\tattribute vec3 morphTarget4;","\t\tattribute vec3 morphTarget5;","\t\tattribute vec3 morphTarget6;","\t\tattribute vec3 morphTarget7;","\t#endif","#endif","#ifdef USE_SKINNING","\tattribute vec4 skinIndex;","\tattribute vec4 skinWeight;","#endif","\n"].filter(yi).join("\n"),o=[m,Fi(t),"#define SHADER_NAME "+t.shaderName,C,t.alphaTest?"#define ALPHATEST "+t.alphaTest+(t.alphaTest%1?"":".0"):"","#define GAMMA_FACTOR "+f,t.useFog&&t.fog?"#define USE_FOG":"",t.useFog&&t.fogExp2?"#define FOG_EXP2":"",t.map?"#define USE_MAP":"",t.matcap?"#define USE_MATCAP":"",t.envMap?"#define USE_ENVMAP":"",t.envMap?"#define "+p:"",t.envMap?"#define "+g:"",t.envMap?"#define "+u:"",t.lightMap?"#define USE_LIGHTMAP":"",t.aoMap?"#define USE_AOMAP":"",t.emissiveMap?"#define USE_EMISSIVEMAP":"",t.bumpMap?"#define USE_BUMPMAP":"",t.normalMap?"#define USE_NORMALMAP":"",t.normalMap&&t.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",t.normalMap&&t.tangentSpaceNormalMap?"#define TANGENTSPACE_NORMALMAP":"",t.clearcoatMap?"#define USE_CLEARCOATMAP":"",t.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",t.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",t.specularMap?"#define USE_SPECULARMAP":"",t.roughnessMap?"#define USE_ROUGHNESSMAP":"",t.metalnessMap?"#define USE_METALNESSMAP":"",t.alphaMap?"#define USE_ALPHAMAP":"",t.sheen?"#define USE_SHEEN":"",t.vertexTangents?"#define USE_TANGENT":"",t.vertexColors?"#define USE_COLOR":"",t.vertexUvs?"#define USE_UV":"",t.uvsVertexOnly?"#define UVS_VERTEX_ONLY":"",t.gradientMap?"#define USE_GRADIENTMAP":"",t.flatShading?"#define FLAT_SHADED":"",t.doubleSided?"#define DOUBLE_SIDED":"",t.flipSided?"#define FLIP_SIDED":"",t.shadowMapEnabled?"#define USE_SHADOWMAP":"",t.shadowMapEnabled?"#define "+d:"",t.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",t.physicallyCorrectLights?"#define PHYSICALLY_CORRECT_LIGHTS":"",t.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",t.logarithmicDepthBuffer&&t.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"",(t.extensionShaderTextureLOD||t.envMap)&&t.rendererExtensionShaderTextureLod?"#define TEXTURE_LOD_EXT":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;",0!==t.toneMapping?"#define TONE_MAPPING":"",0!==t.toneMapping?tt.tonemapping_pars_fragment:"",0!==t.toneMapping?Ci("toneMapping",t.toneMapping):"",t.dithering?"#define DITHERING":"",t.outputEncoding||t.mapEncoding||t.matcapEncoding||t.envMapEncoding||t.emissiveMapEncoding||t.lightMapEncoding?tt.encodings_pars_fragment:"",t.mapEncoding?mi("mapTexelToLinear",t.mapEncoding):"",t.matcapEncoding?mi("matcapTexelToLinear",t.matcapEncoding):"",t.envMapEncoding?mi("envMapTexelToLinear",t.envMapEncoding):"",t.emissiveMapEncoding?mi("emissiveMapTexelToLinear",t.emissiveMapEncoding):"",t.lightMapEncoding?mi("lightMapTexelToLinear",t.lightMapEncoding):"",t.outputEncoding?(n="linearToOutputTexel",r=t.outputEncoding,a=ui(r),"vec4 "+n+"( vec4 value ) { return LinearTo"+a[0]+a[1]+"; }"):"",t.depthPacking?"#define DEPTH_PACKING "+t.depthPacking:"","\n"].filter(yi).join("\n")),c=Ii(c=vi(c=Bi(c),t),t),h=Ii(h=vi(h=Bi(h),t),t),c=Mi(c),h=Mi(h),t.isWebGL2&&!t.isRawShaderMaterial){var v=!1,I=/^\s*#version\s+300\s+es\s*\n/;t.isShaderMaterial&&null!==c.match(I)&&null!==h.match(I)&&(v=!0,c=c.replace(I,""),h=h.replace(I,"")),i=["#version 300 es\n","#define attribute in","#define varying out","#define texture2D texture"].join("\n")+"\n"+i,o=["#version 300 es\n","#define varying in",v?"":"out highp vec4 pc_fragColor;",v?"":"#define gl_FragColor pc_fragColor","#define gl_FragDepthEXT gl_FragDepth","#define texture2D texture","#define textureCube texture","#define texture2DProj textureProj","#define texture2DLodEXT textureLod","#define texture2DProjLodEXT textureProjLod","#define textureCubeLodEXT textureLod","#define texture2DGradEXT textureGrad","#define texture2DProjGradEXT textureProjGrad","#define textureCubeGradEXT textureGrad"].join("\n")+"\n"+o}var E,B,x=o+h,S=pi(s,35633,i+c),w=pi(s,35632,x);if(s.attachShader(y,S),s.attachShader(y,w),void 0!==t.index0AttributeName?s.bindAttribLocation(y,0,t.index0AttributeName):!0===t.morphTargets&&s.bindAttribLocation(y,0,"position"),s.linkProgram(y),A.debug.checkShaderErrors){var M=s.getProgramInfoLog(y).trim(),b=s.getShaderInfoLog(S).trim(),U=s.getShaderInfoLog(w).trim(),F=!0,K=!0;if(!1===s.getProgramParameter(y,35714)){F=!1;var Q=fi(s,S,"vertex"),R=fi(s,w,"fragment");console.error("THREE.WebGLProgram: shader error: ",s.getError(),"35715",s.getProgramParameter(y,35715),"gl.getProgramInfoLog",M,Q,R)}else""!==M?console.warn("THREE.WebGLProgram: gl.getProgramInfoLog()",M):""!==b&&""!==U||(K=!1);K&&(this.diagnostics={runnable:F,programLog:M,vertexShader:{log:b,prefix:i},fragmentShader:{log:U,prefix:o}})}return s.detachShader(y,S),s.detachShader(y,w),s.deleteShader(S),s.deleteShader(w),this.getUniforms=function(){return void 0===E&&(E=new di(s,y)),E},this.getAttributes=function(){return void 0===B&&(B=function(A,e){for(var t={},i=A.getProgramParameter(e,35721),o=0;i>o;o++){var n=A.getActiveAttrib(e,o).name;t[n]=A.getAttribLocation(e,n)}return t}(s,y)),B},this.destroy=function(){s.deleteProgram(y),this.program=void 0},this.name=t.shaderName,this.id=gi++,this.cacheKey=e,this.usedTimes=1,this.program=y,this.vertexShader=S,this.fragmentShader=w,this}function Qi(A,e,t){var i=[],o=t.isWebGL2,n=t.logarithmicDepthBuffer,r=t.floatVertexTextures,a=t.precision,s=t.maxVertexUniforms,l=t.vertexTextures,c={MeshDepthMaterial:"depth",MeshDistanceMaterial:"distanceRGBA",MeshNormalMaterial:"normal",MeshBasicMaterial:"basic",MeshLambertMaterial:"lambert",MeshPhongMaterial:"phong",MeshToonMaterial:"toon",MeshStandardMaterial:"physical",MeshPhysicalMaterial:"physical",MeshMatcapMaterial:"matcap",LineBasicMaterial:"basic",LineDashedMaterial:"dashed",PointsMaterial:"points",ShadowMaterial:"shadow",SpriteMaterial:"sprite"},h=["precision","isWebGL2","supportsVertexTextures","outputEncoding","instancing","map","mapEncoding","matcap","matcapEncoding","envMap","envMapMode","envMapEncoding","envMapCubeUV","lightMap","lightMapEncoding","aoMap","emissiveMap","emissiveMapEncoding","bumpMap","normalMap","objectSpaceNormalMap","tangentSpaceNormalMap","clearcoatMap","clearcoatRoughnessMap","clearcoatNormalMap","displacementMap","specularMap","roughnessMap","metalnessMap","gradientMap","alphaMap","combine","vertexColors","vertexTangents","vertexUvs","uvsVertexOnly","fog","useFog","fogExp2","flatShading","sizeAttenuation","logarithmicDepthBuffer","skinning","maxBones","useVertexTexture","morphTargets","morphNormals","maxMorphTargets","maxMorphNormals","premultipliedAlpha","numDirLights","numPointLights","numSpotLights","numHemiLights","numRectAreaLights","numDirLightShadows","numPointLightShadows","numSpotLightShadows","shadowMapEnabled","shadowMapType","toneMapping","physicallyCorrectLights","alphaTest","doubleSided","flipSided","numClippingPlanes","numClipIntersection","depthPacking","dithering","sheen"];function d(A){var e;return A?A.isTexture?e=A.encoding:A.isWebGLRenderTarget&&(console.warn("THREE.WebGLPrograms.getTextureEncodingFromMap: don't use render targets as textures. Use their .texture property instead."),e=A.texture.encoding):e=3e3,e}this.getParameters=function(i,h,p,g,u,f,m){var C=g.fog,y=i.envMap||(i.isMeshStandardMaterial?g.environment:null),v=c[i.type],I=m.isSkinnedMesh?function(A){var e=A.skeleton.bones;if(r)return 1024;var t=Math.floor((s-20)/4),i=Math.min(t,e.length);return e.length>i?(console.warn("THREE.WebGLRenderer: Skeleton has "+e.length+" bones. This GPU supports "+i+"."),0):i}(m):0;null!==i.precision&&(a=t.getMaxPrecision(i.precision))!==i.precision&&console.warn("THREE.WebGLProgram.getParameters:",i.precision,"not supported, using",a,"instead.");var E=function(A,e){var t;if(e){var i=it[e];t={name:A.type,uniforms:Ge.clone(i.uniforms),vertexShader:i.vertexShader,fragmentShader:i.fragmentShader}}else t={name:A.type,uniforms:A.uniforms,vertexShader:A.vertexShader,fragmentShader:A.fragmentShader};return t}(i,v);i.onBeforeCompile(E,A);var B=A.getRenderTarget();return{isWebGL2:o,shaderID:v,shaderName:E.name,uniforms:E.uniforms,vertexShader:E.vertexShader,fragmentShader:E.fragmentShader,defines:i.defines,isRawShaderMaterial:i.isRawShaderMaterial,isShaderMaterial:i.isShaderMaterial,precision:a,instancing:!0===m.isInstancedMesh,supportsVertexTextures:l,outputEncoding:null!==B?d(B.texture):A.outputEncoding,map:!!i.map,mapEncoding:d(i.map),matcap:!!i.matcap,matcapEncoding:d(i.matcap),envMap:!!y,envMapMode:y&&y.mapping,envMapEncoding:d(y),envMapCubeUV:!!y&&(306===y.mapping||307===y.mapping),lightMap:!!i.lightMap,lightMapEncoding:d(i.lightMap),aoMap:!!i.aoMap,emissiveMap:!!i.emissiveMap,emissiveMapEncoding:d(i.emissiveMap),bumpMap:!!i.bumpMap,normalMap:!!i.normalMap,objectSpaceNormalMap:1===i.normalMapType,tangentSpaceNormalMap:0===i.normalMapType,clearcoatMap:!!i.clearcoatMap,clearcoatRoughnessMap:!!i.clearcoatRoughnessMap,clearcoatNormalMap:!!i.clearcoatNormalMap,displacementMap:!!i.displacementMap,roughnessMap:!!i.roughnessMap,metalnessMap:!!i.metalnessMap,specularMap:!!i.specularMap,alphaMap:!!i.alphaMap,gradientMap:!!i.gradientMap,sheen:!!i.sheen,combine:i.combine,vertexTangents:i.normalMap&&i.vertexTangents,vertexColors:i.vertexColors,vertexUvs:!!(i.map||i.bumpMap||i.normalMap||i.specularMap||i.alphaMap||i.emissiveMap||i.roughnessMap||i.metalnessMap||i.clearcoatMap||i.clearcoatRoughnessMap||i.clearcoatNormalMap||i.displacementMap),uvsVertexOnly:!(i.map||i.bumpMap||i.normalMap||i.specularMap||i.alphaMap||i.emissiveMap||i.roughnessMap||i.metalnessMap||i.clearcoatNormalMap||!i.displacementMap),fog:!!C,useFog:i.fog,fogExp2:C&&C.isFogExp2,flatShading:i.flatShading,sizeAttenuation:i.sizeAttenuation,logarithmicDepthBuffer:n,skinning:i.skinning&&I>0,maxBones:I,useVertexTexture:r,morphTargets:i.morphTargets,morphNormals:i.morphNormals,maxMorphTargets:A.maxMorphTargets,maxMorphNormals:A.maxMorphNormals,numDirLights:h.directional.length,numPointLights:h.point.length,numSpotLights:h.spot.length,numRectAreaLights:h.rectArea.length,numHemiLights:h.hemi.length,numDirLightShadows:h.directionalShadowMap.length,numPointLightShadows:h.pointShadowMap.length,numSpotLightShadows:h.spotShadowMap.length,numClippingPlanes:u,numClipIntersection:f,dithering:i.dithering,shadowMapEnabled:A.shadowMap.enabled&&p.length>0,shadowMapType:A.shadowMap.type,toneMapping:i.toneMapped?A.toneMapping:0,physicallyCorrectLights:A.physicallyCorrectLights,premultipliedAlpha:i.premultipliedAlpha,alphaTest:i.alphaTest,doubleSided:2===i.side,flipSided:1===i.side,depthPacking:void 0!==i.depthPacking&&i.depthPacking,index0AttributeName:i.index0AttributeName,extensionDerivatives:i.extensions&&i.extensions.derivatives,extensionFragDepth:i.extensions&&i.extensions.fragDepth,extensionDrawBuffers:i.extensions&&i.extensions.drawBuffers,extensionShaderTextureLOD:i.extensions&&i.extensions.shaderTextureLOD,rendererExtensionFragDepth:o||null!==e.get("EXT_frag_depth"),rendererExtensionDrawBuffers:o||null!==e.get("WEBGL_draw_buffers"),rendererExtensionShaderTextureLod:o||null!==e.get("EXT_shader_texture_lod"),onBeforeCompile:i.onBeforeCompile}},this.getProgramCacheKey=function(e){var t=[];if(e.shaderID?t.push(e.shaderID):(t.push(e.fragmentShader),t.push(e.vertexShader)),void 0!==e.defines)for(var i in e.defines)t.push(i),t.push(e.defines[i]);if(void 0===e.isRawShaderMaterial){for(var o=0;h.length>o;o++)t.push(e[h[o]]);t.push(A.outputEncoding),t.push(A.gammaFactor)}return t.push(e.onBeforeCompile.toString()),t.join()},this.acquireProgram=function(e,t){for(var o,n=0,r=i.length;r>n;n++){var a=i[n];if(a.cacheKey===t){++(o=a).usedTimes;break}}return void 0===o&&(o=new Ki(A,t,e),i.push(o)),o},this.releaseProgram=function(A){if(0==--A.usedTimes){var e=i.indexOf(A);i[e]=i[i.length-1],i.pop(),A.destroy()}},this.programs=i}function Ri(){var A=new WeakMap;return{get:function(e){var t=A.get(e);return void 0===t&&A.set(e,t={}),t},remove:function(e){A.delete(e)},update:function(e,t,i){A.get(e)[t]=i},dispose:function(){A=new WeakMap}}}function Ti(A,e){return A.groupOrder!==e.groupOrder?A.groupOrder-e.groupOrder:A.renderOrder!==e.renderOrder?A.renderOrder-e.renderOrder:A.program!==e.program?A.program.id-e.program.id:A.material.id!==e.material.id?A.material.id-e.material.id:A.z!==e.z?A.z-e.z:A.id-e.id}function ki(A,e){return A.groupOrder!==e.groupOrder?A.groupOrder-e.groupOrder:A.renderOrder!==e.renderOrder?A.renderOrder-e.renderOrder:A.z!==e.z?e.z-A.z:A.id-e.id}function Di(){var A=[],e=0,t=[],i=[],o={id:-1};function n(t,i,n,r,a,s){var l=A[e];return void 0===l?A[e]=l={id:t.id,object:t,geometry:i,material:n,program:n.program||o,groupOrder:r,renderOrder:t.renderOrder,z:a,group:s}:(l.id=t.id,l.object=t,l.geometry=i,l.material=n,l.program=n.program||o,l.groupOrder=r,l.renderOrder=t.renderOrder,l.z=a,l.group=s),e++,l}return{opaque:t,transparent:i,init:function(){e=0,t.length=0,i.length=0},push:function(A,e,o,r,a,s){var l=n(A,e,o,r,a,s);(!0===o.transparent?i:t).push(l)},unshift:function(A,e,o,r,a,s){var l=n(A,e,o,r,a,s);(!0===o.transparent?i:t).unshift(l)},finish:function(){for(var t=e,i=A.length;i>t;t++){var o=A[t];if(null===o.id)break;o.id=null,o.object=null,o.geometry=null,o.material=null,o.program=null,o.group=null}},sort:function(A,e){t.length>1&&t.sort(A||Ti),i.length>1&&i.sort(e||ki)}}}function Li(){var A=new WeakMap;function e(t){var i=t.target;i.removeEventListener("dispose",e),A.delete(i)}return{get:function(t,i){var o,n=A.get(t);return void 0===n?(o=new Di,A.set(t,new WeakMap),A.get(t).set(i,o),t.addEventListener("dispose",e)):void 0===(o=n.get(i))&&(o=new Di,n.set(i,o)),o},dispose:function(){A=new WeakMap}}}function Ni(){var A={};return{get:function(e){if(void 0!==A[e.id])return A[e.id];var t;switch(e.type){case"DirectionalLight":t={direction:new y,color:new LA};break;case"SpotLight":t={position:new y,direction:new y,color:new LA,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":t={position:new y,color:new LA,distance:0,decay:0};break;case"HemisphereLight":t={direction:new y,skyColor:new LA,groundColor:new LA};break;case"RectAreaLight":t={color:new LA,position:new y,halfWidth:new y,halfHeight:new y}}return A[e.id]=t,t}}}var Oi=0;function Vi(A,e){return(e.castShadow?1:0)-(A.castShadow?1:0)}function Gi(){for(var A,e=new Ni,t=(A={},{get:function(e){if(void 0!==A[e.id])return A[e.id];var t;switch(e.type){case"DirectionalLight":case"SpotLight":t={shadowBias:0,shadowRadius:1,shadowMapSize:new s};break;case"PointLight":t={shadowBias:0,shadowRadius:1,shadowMapSize:new s,shadowCameraNear:1,shadowCameraFar:1e3}}return A[e.id]=t,t}}),i={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotShadow:[],spotShadowMap:[],spotShadowMatrix:[],rectArea:[],point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[]},o=0;9>o;o++)i.probe.push(new y);var n=new y,r=new M,a=new M;return{setup:function(A,o,s){for(var l=0,c=0,h=0,d=0;9>d;d++)i.probe[d].set(0,0,0);var p=0,g=0,u=0,f=0,m=0,C=0,y=0,v=0,I=s.matrixWorldInverse;A.sort(Vi),d=0;for(var E=A.length;E>d;d++){var B=A[d],x=B.color,S=B.intensity,w=B.distance,M=B.shadow&&B.shadow.map?B.shadow.map.texture:null;if(B.isAmbientLight)l+=x.r*S,c+=x.g*S,h+=x.b*S;else if(B.isLightProbe)for(var b=0;9>b;b++)i.probe[b].addScaledVector(B.sh.coefficients[b],S);else if(B.isDirectionalLight){if((K=e.get(B)).color.copy(B.color).multiplyScalar(B.intensity),K.direction.setFromMatrixPosition(B.matrixWorld),n.setFromMatrixPosition(B.target.matrixWorld),K.direction.sub(n),K.direction.transformDirection(I),B.castShadow){var U=B.shadow;(F=t.get(B)).shadowBias=U.bias,F.shadowRadius=U.radius,F.shadowMapSize=U.mapSize,i.directionalShadow[p]=F,i.directionalShadowMap[p]=M,i.directionalShadowMatrix[p]=B.shadow.matrix,C++}i.directional[p]=K,p++}else if(B.isSpotLight){if((K=e.get(B)).position.setFromMatrixPosition(B.matrixWorld),K.position.applyMatrix4(I),K.color.copy(x).multiplyScalar(S),K.distance=w,K.direction.setFromMatrixPosition(B.matrixWorld),n.setFromMatrixPosition(B.target.matrixWorld),K.direction.sub(n),K.direction.transformDirection(I),K.coneCos=Math.cos(B.angle),K.penumbraCos=Math.cos(B.angle*(1-B.penumbra)),K.decay=B.decay,B.castShadow){U=B.shadow;(F=t.get(B)).shadowBias=U.bias,F.shadowRadius=U.radius,F.shadowMapSize=U.mapSize,i.spotShadow[u]=F,i.spotShadowMap[u]=M,i.spotShadowMatrix[u]=B.shadow.matrix,v++}i.spot[u]=K,u++}else if(B.isRectAreaLight){(K=e.get(B)).color.copy(x).multiplyScalar(S),K.position.setFromMatrixPosition(B.matrixWorld),K.position.applyMatrix4(I),a.identity(),r.copy(B.matrixWorld),r.premultiply(I),a.extractRotation(r),K.halfWidth.set(.5*B.width,0,0),K.halfHeight.set(0,.5*B.height,0),K.halfWidth.applyMatrix4(a),K.halfHeight.applyMatrix4(a),i.rectArea[f]=K,f++}else if(B.isPointLight){if((K=e.get(B)).position.setFromMatrixPosition(B.matrixWorld),K.position.applyMatrix4(I),K.color.copy(B.color).multiplyScalar(B.intensity),K.distance=B.distance,K.decay=B.decay,B.castShadow){var F;U=B.shadow;(F=t.get(B)).shadowBias=U.bias,F.shadowRadius=U.radius,F.shadowMapSize=U.mapSize,F.shadowCameraNear=U.camera.near,F.shadowCameraFar=U.camera.far,i.pointShadow[g]=F,i.pointShadowMap[g]=M,i.pointShadowMatrix[g]=B.shadow.matrix,y++}i.point[g]=K,g++}else if(B.isHemisphereLight){var K;(K=e.get(B)).direction.setFromMatrixPosition(B.matrixWorld),K.direction.transformDirection(I),K.direction.normalize(),K.skyColor.copy(B.color).multiplyScalar(S),K.groundColor.copy(B.groundColor).multiplyScalar(S),i.hemi[m]=K,m++}}i.ambient[0]=l,i.ambient[1]=c,i.ambient[2]=h;var Q=i.hash;Q.directionalLength===p&&Q.pointLength===g&&Q.spotLength===u&&Q.rectAreaLength===f&&Q.hemiLength===m&&Q.numDirectionalShadows===C&&Q.numPointShadows===y&&Q.numSpotShadows===v||(i.directional.length=p,i.spot.length=u,i.rectArea.length=f,i.point.length=g,i.hemi.length=m,i.directionalShadow.length=C,i.directionalShadowMap.length=C,i.pointShadow.length=y,i.pointShadowMap.length=y,i.spotShadow.length=v,i.spotShadowMap.length=v,i.directionalShadowMatrix.length=C,i.pointShadowMatrix.length=y,i.spotShadowMatrix.length=v,Q.directionalLength=p,Q.pointLength=g,Q.spotLength=u,Q.rectAreaLength=f,Q.hemiLength=m,Q.numDirectionalShadows=C,Q.numPointShadows=y,Q.numSpotShadows=v,i.version=Oi++)},state:i}}function Pi(){var A=new Gi,e=[],t=[];return{init:function(){e.length=0,t.length=0},state:{lightsArray:e,shadowsArray:t,lights:A},setupLights:function(i){A.setup(e,t,i)},pushLight:function(A){e.push(A)},pushShadow:function(A){t.push(A)}}}function qi(){var A=new WeakMap;function e(t){var i=t.target;i.removeEventListener("dispose",e),A.delete(i)}return{get:function(t,i){var o;return!1===A.has(t)?(o=new Pi,A.set(t,new WeakMap),A.get(t).set(i,o),t.addEventListener("dispose",e)):!1===A.get(t).has(i)?(o=new Pi,A.get(t).set(i,o)):o=A.get(t).get(i),o},dispose:function(){A=new WeakMap}}}function ji(A){qA.call(this),this.type="MeshDepthMaterial",this.depthPacking=3200,this.skinning=!1,this.morphTargets=!1,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.setValues(A)}function Hi(A){qA.call(this),this.type="MeshDistanceMaterial",this.referencePosition=new y,this.nearDistance=1,this.farDistance=1e3,this.skinning=!1,this.morphTargets=!1,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.fog=!1,this.setValues(A)}(ji.prototype=Object.create(qA.prototype)).constructor=ji,ji.prototype.isMeshDepthMaterial=!0,ji.prototype.copy=function(A){return qA.prototype.copy.call(this,A),this.depthPacking=A.depthPacking,this.skinning=A.skinning,this.morphTargets=A.morphTargets,this.map=A.map,this.alphaMap=A.alphaMap,this.displacementMap=A.displacementMap,this.displacementScale=A.displacementScale,this.displacementBias=A.displacementBias,this.wireframe=A.wireframe,this.wireframeLinewidth=A.wireframeLinewidth,this},(Hi.prototype=Object.create(qA.prototype)).constructor=Hi,Hi.prototype.isMeshDistanceMaterial=!0,Hi.prototype.copy=function(A){return qA.prototype.copy.call(this,A),this.referencePosition.copy(A.referencePosition),this.nearDistance=A.nearDistance,this.farDistance=A.farDistance,this.skinning=A.skinning,this.morphTargets=A.morphTargets,this.map=A.map,this.alphaMap=A.alphaMap,this.displacementMap=A.displacementMap,this.displacementScale=A.displacementScale,this.displacementBias=A.displacementBias,this};function Yi(A,e,t){var i=new Ze,o=new s,n=new s,r=new p,a=[],l=[],c={},h={0:1,1:0,2:2},d=new Pe({defines:{SAMPLE_RATE:2/8,HALF_SAMPLE_RATE:1/8},uniforms:{shadow_pass:{value:null},resolution:{value:new s},radius:{value:4}},vertexShader:"void main() {\n\tgl_Position = vec4( position, 1.0 );\n}",fragmentShader:"uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include \nvoid main() {\n float mean = 0.0;\n float squared_mean = 0.0;\n\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );\n for ( float i = -1.0; i < 1.0 ; i += SAMPLE_RATE) {\n #ifdef HORIZONAL_PASS\n vec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( i, 0.0 ) * radius ) / resolution ) );\n mean += distribution.x;\n squared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n #else\n float depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, i ) * radius ) / resolution ) );\n mean += depth;\n squared_mean += depth * depth;\n #endif\n }\n mean = mean * HALF_SAMPLE_RATE;\n squared_mean = squared_mean * HALF_SAMPLE_RATE;\n float std_dev = sqrt( squared_mean - mean * mean );\n gl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}"}),u=d.clone();u.defines.HORIZONAL_PASS=1;var f=new he;f.setAttribute("position",new YA(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));var m=new Ue(f,d),C=this;function y(t,i){var o=e.update(m);d.uniforms.shadow_pass.value=t.map.texture,d.uniforms.resolution.value=t.mapSize,d.uniforms.radius.value=t.radius,A.setRenderTarget(t.mapPass),A.clear(),A.renderBufferDirect(i,null,o,d,m,null),u.uniforms.shadow_pass.value=t.mapPass.texture,u.uniforms.resolution.value=t.mapSize,u.uniforms.radius.value=t.radius,A.setRenderTarget(t.map),A.clear(),A.renderBufferDirect(i,null,o,u,m,null)}function v(A,e,t){var i=A<<0|e<<1|t<<2,o=a[i];return void 0===o&&(o=new ji({depthPacking:3201,morphTargets:A,skinning:e}),a[i]=o),o}function I(A,e,t){var i=A<<0|e<<1|t<<2,o=l[i];return void 0===o&&(o=new Hi({morphTargets:A,skinning:e}),l[i]=o),o}function E(e,t,i,o,n,r){var a=e.geometry,s=null,l=v,d=e.customDepthMaterial;if(!0===i.isPointLight&&(l=I,d=e.customDistanceMaterial),void 0===d){var p=!1;!0===t.morphTargets&&(!0===a.isBufferGeometry?p=a.morphAttributes&&a.morphAttributes.position&&a.morphAttributes.position.length>0:!0===a.isGeometry&&(p=a.morphTargets&&a.morphTargets.length>0));var g=!1;!0===e.isSkinnedMesh&&(!0===t.skinning?g=!0:console.warn("THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:",e)),s=l(p,g,!0===e.isInstancedMesh)}else s=d;if(A.localClippingEnabled&&!0===t.clipShadows&&0!==t.clippingPlanes.length){var u=s.uuid,f=t.uuid,m=c[u];void 0===m&&(c[u]=m={});var C=m[f];void 0===C&&(C=s.clone(),m[f]=C),s=C}return s.visible=t.visible,s.wireframe=t.wireframe,s.side=3===r?null!==t.shadowSide?t.shadowSide:t.side:null!==t.shadowSide?t.shadowSide:h[t.side],s.clipShadows=t.clipShadows,s.clippingPlanes=t.clippingPlanes,s.clipIntersection=t.clipIntersection,s.wireframeLinewidth=t.wireframeLinewidth,s.linewidth=t.linewidth,!0===i.isPointLight&&!0===s.isMeshDistanceMaterial&&(s.referencePosition.setFromMatrixPosition(i.matrixWorld),s.nearDistance=o,s.farDistance=n),s}function B(t,o,n,r,a){if(!1!==t.visible){if(t.layers.test(o.layers)&&(t.isMesh||t.isLine||t.isPoints)&&(t.castShadow||t.receiveShadow&&3===a)&&(!t.frustumCulled||i.intersectsObject(t))){t.modelViewMatrix.multiplyMatrices(n.matrixWorldInverse,t.matrixWorld);var s=e.update(t),l=t.material;if(Array.isArray(l))for(var c=s.groups,h=0,d=c.length;d>h;h++){var p=c[h],g=l[p.materialIndex];if(g&&g.visible&&g.opacity>.9){var u=E(t,g,r,n.near,n.far,a);A.renderBufferDirect(n,null,s,u,t,p)}}else if(l.visible&&l.opacity>.9){u=E(t,l,r,n.near,n.far,a);A.renderBufferDirect(n,null,s,u,t,null)}}for(var f=t.children,m=0,C=f.length;C>m;m++)B(f[m],o,n,r,a)}}this.enabled=!1,this.autoUpdate=!0,this.needsUpdate=!1,this.type=1,this.render=function(e,a,s){if(!1!==C.enabled&&(!1!==C.autoUpdate||!1!==C.needsUpdate)&&0!==e.length){var l=A.getRenderTarget(),c=A.getActiveCubeFace(),h=A.getActiveMipmapLevel(),d=A.state;d.setBlending(0),d.buffers.color.setClear(1,1,1,1),d.buffers.depth.setTest(!0),d.setScissorTest(!1);for(var p=0,u=e.length;u>p;p++){var f=e[p],m=f.shadow;if(void 0!==m){o.copy(m.mapSize);var v,I=m.getFrameExtents();if(o.multiply(I),n.copy(m.mapSize),(o.x>t||o.y>t)&&(console.warn("THREE.WebGLShadowMap:",f,"has shadow exceeding max texture size, reducing"),o.x>t&&(n.x=Math.floor(t/I.x),o.x=n.x*I.x,m.mapSize.x=n.x),o.y>t&&(n.y=Math.floor(t/I.y),o.y=n.y*I.y,m.mapSize.y=n.y)),null===m.map&&!m.isPointLightShadow&&3===this.type)m.map=new g(o.x,o.y,v={minFilter:1006,magFilter:1006,format:1023}),m.map.texture.name=f.name+".shadowMap",m.mapPass=new g(o.x,o.y,v),m.camera.updateProjectionMatrix();if(null===m.map)m.map=new g(o.x,o.y,v={minFilter:1003,magFilter:1003,format:1023}),m.map.texture.name=f.name+".shadowMap",m.camera.updateProjectionMatrix();A.setRenderTarget(m.map),A.clear();for(var E=m.getViewportCount(),x=0;E>x;x++){var S=m.getViewport(x);r.set(n.x*S.x,n.y*S.y,n.x*S.z,n.y*S.w),d.viewport(r),m.updateMatrices(f,x),i=m.getFrustum(),B(a,s,m.camera,f,this.type)}m.isPointLightShadow||3!==this.type||y(m,s)}else console.warn("THREE.WebGLShadowMap:",f,"has no shadow.")}C.needsUpdate=!1,A.setRenderTarget(l,c,h)}}}function Wi(A,e,t){var i=t.isWebGL2;var o=new function(){var e=!1,t=new p,i=null,o=new p(0,0,0,0);return{setMask:function(t){i===t||e||(A.colorMask(t,t,t,t),i=t)},setLocked:function(A){e=A},setClear:function(e,i,n,r,a){!0===a&&(e*=r,i*=r,n*=r),t.set(e,i,n,r),!1===o.equals(t)&&(A.clearColor(e,i,n,r),o.copy(t))},reset:function(){e=!1,i=null,o.set(-1,0,0,0)}}},n=new function(){var e=!1,t=null,i=null,o=null;return{setTest:function(A){A?O(2929):V(2929)},setMask:function(i){t===i||e||(A.depthMask(i),t=i)},setFunc:function(e){if(i!==e){if(e)switch(e){case 0:A.depthFunc(512);break;case 1:A.depthFunc(519);break;case 2:A.depthFunc(513);break;case 3:A.depthFunc(515);break;case 4:A.depthFunc(514);break;case 5:A.depthFunc(518);break;case 6:A.depthFunc(516);break;case 7:A.depthFunc(517);break;default:A.depthFunc(515)}else A.depthFunc(515);i=e}},setLocked:function(A){e=A},setClear:function(e){o!==e&&(A.clearDepth(e),o=e)},reset:function(){e=!1,t=null,i=null,o=null}}},r=new function(){var e=!1,t=null,i=null,o=null,n=null,r=null,a=null,s=null,l=null;return{setTest:function(A){e||(A?O(2960):V(2960))},setMask:function(i){t===i||e||(A.stencilMask(i),t=i)},setFunc:function(e,t,r){i===e&&o===t&&n===r||(A.stencilFunc(e,t,r),i=e,o=t,n=r)},setOp:function(e,t,i){r===e&&a===t&&s===i||(A.stencilOp(e,t,i),r=e,a=t,s=i)},setLocked:function(A){e=A},setClear:function(e){l!==e&&(A.clearStencil(e),l=e)},reset:function(){e=!1,t=null,i=null,o=null,n=null,r=null,a=null,s=null,l=null}}},a=A.getParameter(34921),s=new Uint8Array(a),l=new Uint8Array(a),c=new Uint8Array(a),h={},d=null,g=null,u=null,f=null,m=null,C=null,y=null,v=null,I=null,E=!1,B=null,x=null,S=null,w=null,M=null,b=A.getParameter(35661),U=!1,F=0,K=A.getParameter(7938);-1!==K.indexOf("WebGL")?(F=parseFloat(/^WebGL\ ([0-9])/.exec(K)[1]),U=F>=1):-1!==K.indexOf("OpenGL ES")&&(F=parseFloat(/^OpenGL\ ES\ ([0-9])/.exec(K)[1]),U=F>=2);var Q=null,R={},T=new p,k=new p;function D(e,t,i){var o=new Uint8Array(4),n=A.createTexture();A.bindTexture(e,n),A.texParameteri(e,10241,9728),A.texParameteri(e,10240,9728);for(var r=0;i>r;r++)A.texImage2D(t+r,0,6408,1,1,0,6408,5121,o);return n}var L={};function N(t,o){(s[t]=1,0===l[t]&&(A.enableVertexAttribArray(t),l[t]=1),c[t]!==o)&&((i?A:e.get("ANGLE_instanced_arrays"))[i?"vertexAttribDivisor":"vertexAttribDivisorANGLE"](t,o),c[t]=o)}function O(e){!0!==h[e]&&(A.enable(e),h[e]=!0)}function V(e){!1!==h[e]&&(A.disable(e),h[e]=!1)}L[3553]=D(3553,3553,1),L[34067]=D(34067,34069,6),o.setClear(0,0,0,1),n.setClear(1),r.setClear(0),O(2929),n.setFunc(3),H(!1),Y(1),O(2884),j(0);var G={100:32774,101:32778,102:32779};if(i)G[103]=32775,G[104]=32776;else{var P=e.get("EXT_blend_minmax");null!==P&&(G[103]=P.MIN_EXT,G[104]=P.MAX_EXT)}var q={200:0,201:1,202:768,204:770,210:776,208:774,206:772,203:769,205:771,209:775,207:773};function j(e,t,i,o,n,r,a,s){if(0!==e){if(g||(O(3042),g=!0),5===e)n=n||t,r=r||i,a=a||o,t===f&&n===y||(A.blendEquationSeparate(G[t],G[n]),f=t,y=n),i===m&&o===C&&r===v&&a===I||(A.blendFuncSeparate(q[i],q[o],q[r],q[a]),m=i,C=o,v=r,I=a),u=e,E=null;else if(e!==u||s!==E){if(100===f&&100===y||(A.blendEquation(32774),f=100,y=100),s)switch(e){case 1:A.blendFuncSeparate(1,771,1,771);break;case 2:A.blendFunc(1,1);break;case 3:A.blendFuncSeparate(0,0,769,771);break;case 4:A.blendFuncSeparate(0,768,0,770);break;default:console.error("THREE.WebGLState: Invalid blending: ",e)}else switch(e){case 1:A.blendFuncSeparate(770,771,1,771);break;case 2:A.blendFunc(770,1);break;case 3:A.blendFunc(0,769);break;case 4:A.blendFunc(0,768);break;default:console.error("THREE.WebGLState: Invalid blending: ",e)}m=null,C=null,v=null,I=null,u=e,E=s}}else g&&(V(3042),g=!1)}function H(e){B!==e&&(A.frontFace(e?2304:2305),B=e)}function Y(e){0!==e?(O(2884),e!==x&&A.cullFace(1===e?1029:2===e?1028:1032)):V(2884),x=e}function W(e,t,i){e?(O(32823),w===t&&M===i||(A.polygonOffset(t,i),w=t,M=i)):V(32823)}function J(e){void 0===e&&(e=33984+b-1),Q!==e&&(A.activeTexture(e),Q=e)}return{buffers:{color:o,depth:n,stencil:r},initAttributes:function(){for(var A=0,e=s.length;e>A;A++)s[A]=0},enableAttribute:function(A){N(A,0)},enableAttributeAndDivisor:N,disableUnusedAttributes:function(){for(var e=0,t=l.length;e!==t;++e)l[e]!==s[e]&&(A.disableVertexAttribArray(e),l[e]=0)},enable:O,disable:V,useProgram:function(e){return d!==e&&(A.useProgram(e),d=e,!0)},setBlending:j,setMaterial:function(A,e){2===A.side?V(2884):O(2884);var t=1===A.side;e&&(t=!t),H(t),1===A.blending&&!1===A.transparent?j(0):j(A.blending,A.blendEquation,A.blendSrc,A.blendDst,A.blendEquationAlpha,A.blendSrcAlpha,A.blendDstAlpha,A.premultipliedAlpha),n.setFunc(A.depthFunc),n.setTest(A.depthTest),n.setMask(A.depthWrite),o.setMask(A.colorWrite);var i=A.stencilWrite;r.setTest(i),i&&(r.setMask(A.stencilWriteMask),r.setFunc(A.stencilFunc,A.stencilRef,A.stencilFuncMask),r.setOp(A.stencilFail,A.stencilZFail,A.stencilZPass)),W(A.polygonOffset,A.polygonOffsetFactor,A.polygonOffsetUnits)},setFlipSided:H,setCullFace:Y,setLineWidth:function(e){e!==S&&(U&&A.lineWidth(e),S=e)},setPolygonOffset:W,setScissorTest:function(A){A?O(3089):V(3089)},activeTexture:J,bindTexture:function(e,t){null===Q&&J();var i=R[Q];void 0===i&&(R[Q]=i={type:void 0,texture:void 0}),i.type===e&&i.texture===t||(A.bindTexture(e,t||L[e]),i.type=e,i.texture=t)},unbindTexture:function(){var e=R[Q];void 0!==e&&void 0!==e.type&&(A.bindTexture(e.type,null),e.type=void 0,e.texture=void 0)},compressedTexImage2D:function(){try{A.compressedTexImage2D.apply(A,arguments)}catch(A){console.error("THREE.WebGLState:",A)}},texImage2D:function(){try{A.texImage2D.apply(A,arguments)}catch(A){console.error("THREE.WebGLState:",A)}},texImage3D:function(){try{A.texImage3D.apply(A,arguments)}catch(A){console.error("THREE.WebGLState:",A)}},scissor:function(e){!1===T.equals(e)&&(A.scissor(e.x,e.y,e.z,e.w),T.copy(e))},viewport:function(e){!1===k.equals(e)&&(A.viewport(e.x,e.y,e.z,e.w),k.copy(e))},reset:function(){for(var e=0;l.length>e;e++)1===l[e]&&(A.disableVertexAttribArray(e),l[e]=0);h={},Q=null,R={},d=null,u=null,B=null,x=null,o.reset(),n.reset(),r.reset()}}}function Ji(A,e,t,i,o,n,r){var s,l=o.isWebGL2,c=o.maxTextures,h=o.maxCubemapSize,d=o.maxTextureSize,p=o.maxSamples,g=new WeakMap,u=!1;try{u="undefined"!=typeof OffscreenCanvas&&null!==new OffscreenCanvas(1,1).getContext("2d")}catch(A){}function f(A,e){return u?new OffscreenCanvas(A,e):document.createElementNS("http://www.w3.org/1999/xhtml","canvas")}function m(A,e,t,i){var o=1;if((A.width>i||A.height>i)&&(o=i/Math.max(A.width,A.height)),1>o||!0===e){if("undefined"!=typeof HTMLImageElement&&A instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&A instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&A instanceof ImageBitmap){var n=e?a.floorPowerOfTwo:Math.floor,r=n(o*A.width),l=n(o*A.height);void 0===s&&(s=f(r,l));var c=t?f(r,l):s;return c.width=r,c.height=l,c.getContext("2d").drawImage(A,0,0,r,l),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+A.width+"x"+A.height+") to ("+r+"x"+l+")."),c}return"data"in A&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+A.width+"x"+A.height+")."),A}return A}function C(A){return a.isPowerOfTwo(A.width)&&a.isPowerOfTwo(A.height)}function y(A,e){return A.generateMipmaps&&e&&1003!==A.minFilter&&1006!==A.minFilter}function v(e,t,o,n){A.generateMipmap(e),i.get(t).__maxMipLevel=Math.log(Math.max(o,n))*Math.LOG2E}function I(t,i,o){if(!1===l)return i;if(null!==t){if(void 0!==A[t])return A[t];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+t+"'")}var n=i;return 6403===i&&(5126===o&&(n=33326),5131===o&&(n=33325),5121===o&&(n=33321)),6407===i&&(5126===o&&(n=34837),5131===o&&(n=34843),5121===o&&(n=32849)),6408===i&&(5126===o&&(n=34836),5131===o&&(n=34842),5121===o&&(n=32856)),33325!==n&&33326!==n&&34842!==n&&34836!==n||e.get("EXT_color_buffer_float"),n}function E(A){return 1003===A||1004===A||1005===A?9728:9729}function B(e){var t=e.target;t.removeEventListener("dispose",B),function(e){var t=i.get(e);if(void 0===t.__webglInit)return;A.deleteTexture(t.__webglTexture),i.remove(e)}(t),t.isVideoTexture&&g.delete(t),r.memory.textures--}function x(e){var t=e.target;t.removeEventListener("dispose",x),function(e){var t=i.get(e),o=i.get(e.texture);if(!e)return;void 0!==o.__webglTexture&&A.deleteTexture(o.__webglTexture);e.depthTexture&&e.depthTexture.dispose();if(e.isWebGLCubeRenderTarget)for(var n=0;6>n;n++)A.deleteFramebuffer(t.__webglFramebuffer[n]),t.__webglDepthbuffer&&A.deleteRenderbuffer(t.__webglDepthbuffer[n]);else A.deleteFramebuffer(t.__webglFramebuffer),t.__webglDepthbuffer&&A.deleteRenderbuffer(t.__webglDepthbuffer),t.__webglMultisampledFramebuffer&&A.deleteFramebuffer(t.__webglMultisampledFramebuffer),t.__webglColorRenderbuffer&&A.deleteRenderbuffer(t.__webglColorRenderbuffer),t.__webglDepthRenderbuffer&&A.deleteRenderbuffer(t.__webglDepthRenderbuffer);i.remove(e.texture),i.remove(e)}(t),r.memory.textures--}var S=0;function w(A,e){var o=i.get(A);if(A.isVideoTexture&&function(A){var e=r.render.frame;g.get(A)!==e&&(g.set(A,e),A.update())}(A),A.version>0&&o.__version!==A.version){var n=A.image;if(void 0===n)console.warn("THREE.WebGLRenderer: Texture marked for update but image is undefined");else{if(!1!==n.complete)return void R(o,A,e);console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete")}}t.activeTexture(33984+e),t.bindTexture(3553,o.__webglTexture)}function M(e,o){if(6===e.image.length){var r=i.get(e);if(e.version>0&&r.__version!==e.version){Q(r,e),t.activeTexture(33984+o),t.bindTexture(34067,r.__webglTexture),A.pixelStorei(37440,e.flipY);for(var a=e&&(e.isCompressedTexture||e.image[0].isCompressedTexture),s=e.image[0]&&e.image[0].isDataTexture,c=[],d=0;6>d;d++)c[d]=a||s?s?e.image[d].image:e.image[d]:m(e.image[d],!1,!0,h);var p,g=c[0],u=C(g)||l,f=n.convert(e.format),E=n.convert(e.type),B=I(e.internalFormat,f,E);if(K(34067,e,u),a){for(d=0;6>d;d++){p=c[d].mipmaps;for(var x=0;p.length>x;x++){var S=p[x];1023!==e.format&&1022!==e.format?null!==f?t.compressedTexImage2D(34069+d,x,B,S.width,S.height,0,S.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()"):t.texImage2D(34069+d,x,B,S.width,S.height,0,f,E,S.data)}}r.__maxMipLevel=p.length-1}else{p=e.mipmaps;for(d=0;6>d;d++)if(s){t.texImage2D(34069+d,0,B,c[d].width,c[d].height,0,f,E,c[d].data);for(x=0;p.length>x;x++){var w=(S=p[x]).image[d].image;t.texImage2D(34069+d,x+1,B,w.width,w.height,0,f,E,w.data)}}else{t.texImage2D(34069+d,0,B,f,E,c[d]);for(x=0;p.length>x;x++){t.texImage2D(34069+d,x+1,B,f,E,(S=p[x]).image[d])}}r.__maxMipLevel=p.length}y(e,u)&&v(34067,e,g.width,g.height),r.__version=e.version,e.onUpdate&&e.onUpdate(e)}else t.activeTexture(33984+o),t.bindTexture(34067,r.__webglTexture)}}function b(A,e){t.activeTexture(33984+e),t.bindTexture(34067,i.get(A).__webglTexture)}var U={1e3:10497,1001:33071,1002:33648},F={1003:9728,1004:9984,1005:9986,1006:9729,1007:9985,1008:9987};function K(t,n,r){r?(A.texParameteri(t,10242,U[n.wrapS]),A.texParameteri(t,10243,U[n.wrapT]),32879!==t&&35866!==t||A.texParameteri(t,32882,U[n.wrapR]),A.texParameteri(t,10240,F[n.magFilter]),A.texParameteri(t,10241,F[n.minFilter])):(A.texParameteri(t,10242,33071),A.texParameteri(t,10243,33071),32879!==t&&35866!==t||A.texParameteri(t,32882,33071),1001===n.wrapS&&1001===n.wrapT||console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping."),A.texParameteri(t,10240,E(n.magFilter)),A.texParameteri(t,10241,E(n.minFilter)),1003!==n.minFilter&&1006!==n.minFilter&&console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter."));var a=e.get("EXT_texture_filter_anisotropic");if(a){if(1015===n.type&&null===e.get("OES_texture_float_linear"))return;if(1016===n.type&&null===(l||e.get("OES_texture_half_float_linear")))return;(n.anisotropy>1||i.get(n).__currentAnisotropy)&&(A.texParameterf(t,a.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(n.anisotropy,o.getMaxAnisotropy())),i.get(n).__currentAnisotropy=n.anisotropy)}}function Q(e,t){void 0===e.__webglInit&&(e.__webglInit=!0,t.addEventListener("dispose",B),e.__webglTexture=A.createTexture(),r.memory.textures++)}function R(e,i,o){var r=3553;i.isDataTexture2DArray&&(r=35866),i.isDataTexture3D&&(r=32879),Q(e,i),t.activeTexture(33984+o),t.bindTexture(r,e.__webglTexture),A.pixelStorei(37440,i.flipY),A.pixelStorei(37441,i.premultiplyAlpha),A.pixelStorei(3317,i.unpackAlignment);var a=function(A){return!l&&(1001!==A.wrapS||1001!==A.wrapT||1003!==A.minFilter&&1006!==A.minFilter)}(i)&&!1===C(i.image),s=m(i.image,a,!1,d),c=C(s)||l,h=n.convert(i.format),p=n.convert(i.type),g=I(i.internalFormat,h,p);K(r,i,c);var u,f=i.mipmaps;if(i.isDepthTexture)g=6402,l?g=1015===i.type?36012:1014===i.type?33190:1020===i.type?35056:33189:1015===i.type&&console.error("WebGLRenderer: Floating point depth texture requires WebGL2."),1026===i.format&&6402===g&&1012!==i.type&&1014!==i.type&&(console.warn("THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture."),i.type=1012,p=n.convert(i.type)),1027===i.format&&6402===g&&(g=34041,1020!==i.type&&(console.warn("THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture."),i.type=1020,p=n.convert(i.type))),t.texImage2D(3553,0,g,s.width,s.height,0,h,p,null);else if(i.isDataTexture)if(f.length>0&&c){for(var E=0,B=f.length;B>E;E++)t.texImage2D(3553,E,g,(u=f[E]).width,u.height,0,h,p,u.data);i.generateMipmaps=!1,e.__maxMipLevel=f.length-1}else t.texImage2D(3553,0,g,s.width,s.height,0,h,p,s.data),e.__maxMipLevel=0;else if(i.isCompressedTexture){for(E=0,B=f.length;B>E;E++)u=f[E],1023!==i.format&&1022!==i.format?null!==h?t.compressedTexImage2D(3553,E,g,u.width,u.height,0,u.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()"):t.texImage2D(3553,E,g,u.width,u.height,0,h,p,u.data);e.__maxMipLevel=f.length-1}else if(i.isDataTexture2DArray)t.texImage3D(35866,0,g,s.width,s.height,s.depth,0,h,p,s.data),e.__maxMipLevel=0;else if(i.isDataTexture3D)t.texImage3D(32879,0,g,s.width,s.height,s.depth,0,h,p,s.data),e.__maxMipLevel=0;else if(f.length>0&&c){for(E=0,B=f.length;B>E;E++)t.texImage2D(3553,E,g,h,p,u=f[E]);i.generateMipmaps=!1,e.__maxMipLevel=f.length-1}else t.texImage2D(3553,0,g,h,p,s),e.__maxMipLevel=0;y(i,c)&&v(r,i,s.width,s.height),e.__version=i.version,i.onUpdate&&i.onUpdate(i)}function T(e,o,r,a){var s=n.convert(o.texture.format),l=n.convert(o.texture.type),c=I(o.texture.internalFormat,s,l);t.texImage2D(a,0,c,o.width,o.height,0,s,l,null),A.bindFramebuffer(36160,e),A.framebufferTexture2D(36160,r,a,i.get(o.texture).__webglTexture,0),A.bindFramebuffer(36160,null)}function k(e,t,i){if(A.bindRenderbuffer(36161,e),t.depthBuffer&&!t.stencilBuffer){var o=33189;if(i){var r=t.depthTexture;r&&r.isDepthTexture&&(1015===r.type?o=36012:1014===r.type&&(o=33190));var a=L(t);A.renderbufferStorageMultisample(36161,a,o,t.width,t.height)}else A.renderbufferStorage(36161,o,t.width,t.height);A.framebufferRenderbuffer(36160,36096,36161,e)}else if(t.depthBuffer&&t.stencilBuffer){if(i){a=L(t);A.renderbufferStorageMultisample(36161,a,35056,t.width,t.height)}else A.renderbufferStorage(36161,34041,t.width,t.height);A.framebufferRenderbuffer(36160,33306,36161,e)}else{var s=n.convert(t.texture.format),l=n.convert(t.texture.type);o=I(t.texture.internalFormat,s,l);if(i){a=L(t);A.renderbufferStorageMultisample(36161,a,o,t.width,t.height)}else A.renderbufferStorage(36161,o,t.width,t.height)}A.bindRenderbuffer(36161,null)}function D(e){var t=i.get(e),o=!0===e.isWebGLCubeRenderTarget;if(e.depthTexture){if(o)throw new Error("target.depthTexture not supported in Cube render targets");!function(e,t){if(t&&t.isWebGLCubeRenderTarget)throw new Error("Depth Texture with cube render targets is not supported");if(A.bindFramebuffer(36160,e),!t.depthTexture||!t.depthTexture.isDepthTexture)throw new Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture");i.get(t.depthTexture).__webglTexture&&t.depthTexture.image.width===t.width&&t.depthTexture.image.height===t.height||(t.depthTexture.image.width=t.width,t.depthTexture.image.height=t.height,t.depthTexture.needsUpdate=!0),w(t.depthTexture,0);var o=i.get(t.depthTexture).__webglTexture;if(1026===t.depthTexture.format)A.framebufferTexture2D(36160,36096,3553,o,0);else{if(1027!==t.depthTexture.format)throw new Error("Unknown depthTexture format");A.framebufferTexture2D(36160,33306,3553,o,0)}}(t.__webglFramebuffer,e)}else if(o){t.__webglDepthbuffer=[];for(var n=0;6>n;n++)A.bindFramebuffer(36160,t.__webglFramebuffer[n]),t.__webglDepthbuffer[n]=A.createRenderbuffer(),k(t.__webglDepthbuffer[n],e,!1)}else A.bindFramebuffer(36160,t.__webglFramebuffer),t.__webglDepthbuffer=A.createRenderbuffer(),k(t.__webglDepthbuffer,e,!1);A.bindFramebuffer(36160,null)}function L(A){return l&&A.isWebGLMultisampleRenderTarget?Math.min(p,A.samples):0}var N=!1,O=!1;this.allocateTextureUnit=function(){var A=S;return c>A||console.warn("THREE.WebGLTextures: Trying to use "+A+" texture units while this GPU supports only "+c),S+=1,A},this.resetTextureUnits=function(){S=0},this.setTexture2D=w,this.setTexture2DArray=function(A,e){var o=i.get(A);A.version>0&&o.__version!==A.version?R(o,A,e):(t.activeTexture(33984+e),t.bindTexture(35866,o.__webglTexture))},this.setTexture3D=function(A,e){var o=i.get(A);A.version>0&&o.__version!==A.version?R(o,A,e):(t.activeTexture(33984+e),t.bindTexture(32879,o.__webglTexture))},this.setTextureCube=M,this.setTextureCubeDynamic=b,this.setupRenderTarget=function(e){var o=i.get(e),a=i.get(e.texture);e.addEventListener("dispose",x),a.__webglTexture=A.createTexture(),r.memory.textures++;var s=!0===e.isWebGLCubeRenderTarget,c=!0===e.isWebGLMultisampleRenderTarget,h=C(e)||l;if(!l||1022!==e.texture.format||1015!==e.texture.type&&1016!==e.texture.type||(e.texture.format=1023,console.warn("THREE.WebGLRenderer: Rendering to textures with RGB format is not supported. Using RGBA format instead.")),s){o.__webglFramebuffer=[];for(var d=0;6>d;d++)o.__webglFramebuffer[d]=A.createFramebuffer()}else if(o.__webglFramebuffer=A.createFramebuffer(),c)if(l){o.__webglMultisampledFramebuffer=A.createFramebuffer(),o.__webglColorRenderbuffer=A.createRenderbuffer(),A.bindRenderbuffer(36161,o.__webglColorRenderbuffer);var p=n.convert(e.texture.format),g=n.convert(e.texture.type),u=I(e.texture.internalFormat,p,g),f=L(e);A.renderbufferStorageMultisample(36161,f,u,e.width,e.height),A.bindFramebuffer(36160,o.__webglMultisampledFramebuffer),A.framebufferRenderbuffer(36160,36064,36161,o.__webglColorRenderbuffer),A.bindRenderbuffer(36161,null),e.depthBuffer&&(o.__webglDepthRenderbuffer=A.createRenderbuffer(),k(o.__webglDepthRenderbuffer,e,!0)),A.bindFramebuffer(36160,null)}else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.");if(s){t.bindTexture(34067,a.__webglTexture),K(34067,e.texture,h);for(d=0;6>d;d++)T(o.__webglFramebuffer[d],e,36064,34069+d);y(e.texture,h)&&v(34067,e.texture,e.width,e.height),t.bindTexture(34067,null)}else t.bindTexture(3553,a.__webglTexture),K(3553,e.texture,h),T(o.__webglFramebuffer,e,36064,3553),y(e.texture,h)&&v(3553,e.texture,e.width,e.height),t.bindTexture(3553,null);e.depthBuffer&&D(e)},this.updateRenderTargetMipmap=function(A){var e=A.texture;if(y(e,C(A)||l)){var o=A.isWebGLCubeRenderTarget?34067:3553,n=i.get(e).__webglTexture;t.bindTexture(o,n),v(o,e,A.width,A.height),t.bindTexture(o,null)}},this.updateMultisampleRenderTarget=function(e){if(e.isWebGLMultisampleRenderTarget)if(l){var t=i.get(e);A.bindFramebuffer(36008,t.__webglMultisampledFramebuffer),A.bindFramebuffer(36009,t.__webglFramebuffer);var o=e.width,n=e.height,r=16384;e.depthBuffer&&(r|=256),e.stencilBuffer&&(r|=1024),A.blitFramebuffer(0,0,o,n,0,0,o,n,r,9728),A.bindFramebuffer(36160,t.__webglMultisampledFramebuffer)}else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.")},this.safeSetTexture2D=function(A,e){A&&A.isWebGLRenderTarget&&(!1===N&&(console.warn("THREE.WebGLTextures.safeSetTexture2D: don't use render targets as textures. Use their .texture property instead."),N=!0),A=A.texture),w(A,e)},this.safeSetTextureCube=function(A,e){A&&A.isWebGLCubeRenderTarget&&(!1===O&&(console.warn("THREE.WebGLTextures.safeSetTextureCube: don't use cube render targets as textures. Use their .texture property instead."),O=!0),A=A.texture),A&&A.isCubeTexture||Array.isArray(A.image)&&6===A.image.length?M(A,e):b(A,e)}}function zi(A,e,t){var i=t.isWebGL2;return{convert:function(A){var t;if(1009===A)return 5121;if(1017===A)return 32819;if(1018===A)return 32820;if(1019===A)return 33635;if(1010===A)return 5120;if(1011===A)return 5122;if(1012===A)return 5123;if(1013===A)return 5124;if(1014===A)return 5125;if(1015===A)return 5126;if(1016===A)return i?5131:null!==(t=e.get("OES_texture_half_float"))?t.HALF_FLOAT_OES:null;if(1021===A)return 6406;if(1022===A)return 6407;if(1023===A)return 6408;if(1024===A)return 6409;if(1025===A)return 6410;if(1026===A)return 6402;if(1027===A)return 34041;if(1028===A)return 6403;if(1029===A)return 36244;if(1030===A)return 33319;if(1031===A)return 33320;if(1032===A)return 36248;if(1033===A)return 36249;if(33776===A||33777===A||33778===A||33779===A){if(null===(t=e.get("WEBGL_compressed_texture_s3tc")))return null;if(33776===A)return t.COMPRESSED_RGB_S3TC_DXT1_EXT;if(33777===A)return t.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(33778===A)return t.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(33779===A)return t.COMPRESSED_RGBA_S3TC_DXT5_EXT}if(35840===A||35841===A||35842===A||35843===A){if(null===(t=e.get("WEBGL_compressed_texture_pvrtc")))return null;if(35840===A)return t.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(35841===A)return t.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(35842===A)return t.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(35843===A)return t.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}if(36196===A)return null!==(t=e.get("WEBGL_compressed_texture_etc1"))?t.COMPRESSED_RGB_ETC1_WEBGL:null;if((37492===A||37496===A)&&null!==(t=e.get("WEBGL_compressed_texture_etc"))){if(37492===A)return t.COMPRESSED_RGB8_ETC2;if(37496===A)return t.COMPRESSED_RGBA8_ETC2_EAC}return 37808===A||37809===A||37810===A||37811===A||37812===A||37813===A||37814===A||37815===A||37816===A||37817===A||37818===A||37819===A||37820===A||37821===A||37840===A||37841===A||37842===A||37843===A||37844===A||37845===A||37846===A||37847===A||37848===A||37849===A||37850===A||37851===A||37852===A||37853===A?null!==(t=e.get("WEBGL_compressed_texture_astc"))?A:null:36492===A?null!==(t=e.get("EXT_texture_compression_bptc"))?A:null:1020===A?i?34042:null!==(t=e.get("WEBGL_depth_texture"))?t.UNSIGNED_INT_24_8_WEBGL:null:void 0}}}function Zi(A){je.call(this),this.cameras=A||[]}function Xi(){H.call(this),this.type="Group"}function _i(A,e){var t=this,i=null,o=1,n=null,r="local-floor",a=null,s=[],l=new Map,c=new je;c.layers.enable(1),c.viewport=new p;var h=new je;h.layers.enable(2),h.viewport=new p;var d=new Zi([c,h]);d.layers.enable(1),d.layers.enable(2);var g=null,u=null;function f(A){var e=l.get(A.inputSource);e&&(e.targetRay&&e.targetRay.dispatchEvent({type:A.type}),e.grip&&e.grip.dispatchEvent({type:A.type}))}function m(){l.forEach((function(A,e){A.targetRay&&(A.targetRay.dispatchEvent({type:"disconnected",data:e}),A.targetRay.visible=!1),A.grip&&(A.grip.dispatchEvent({type:"disconnected",data:e}),A.grip.visible=!1)})),l.clear(),A.setFramebuffer(null),A.setRenderTarget(A.getRenderTarget()),S.stop(),t.isPresenting=!1,t.dispatchEvent({type:"sessionend"})}function C(A){n=A,S.setContext(i),S.start(),t.isPresenting=!0,t.dispatchEvent({type:"sessionstart"})}function v(A){for(var e=i.inputSources,t=0;s.length>t;t++)l.set(e[t],s[t]);for(t=0;A.removed.length>t;t++){(n=l.get(o=A.removed[t]))&&(n.targetRay&&n.targetRay.dispatchEvent({type:"disconnected",data:o}),n.grip&&n.grip.dispatchEvent({type:"disconnected",data:o}),l.delete(o))}for(t=0;A.added.length>t;t++){var o,n;(n=l.get(o=A.added[t]))&&(n.targetRay&&n.targetRay.dispatchEvent({type:"connected",data:o}),n.grip&&n.grip.dispatchEvent({type:"connected",data:o}))}}this.enabled=!1,this.isPresenting=!1,this.getController=function(A){var e=s[A];return void 0===e&&(s[A]=e={}),void 0===e.targetRay&&(e.targetRay=new Xi,e.targetRay.matrixAutoUpdate=!1,e.targetRay.visible=!1),e.targetRay},this.getControllerGrip=function(A){var e=s[A];return void 0===e&&(s[A]=e={}),void 0===e.grip&&(e.grip=new Xi,e.grip.matrixAutoUpdate=!1,e.grip.visible=!1),e.grip},this.setFramebufferScaleFactor=function(A){o=A,1==t.isPresenting&&console.warn("WebXRManager: Cannot change framebuffer scale while presenting VR content")},this.setReferenceSpaceType=function(A){r=A},this.getReferenceSpace=function(){return n},this.getSession=function(){return i},this.setSession=function(A){if(null!==(i=A)){i.addEventListener("select",f),i.addEventListener("selectstart",f),i.addEventListener("selectend",f),i.addEventListener("squeeze",f),i.addEventListener("squeezestart",f),i.addEventListener("squeezeend",f),i.addEventListener("end",m);var t=e.getContextAttributes(),n=new XRWebGLLayer(i,e,{antialias:t.antialias,alpha:t.alpha,depth:t.depth,stencil:t.stencil,framebufferScaleFactor:o});i.updateRenderState({baseLayer:n}),i.requestReferenceSpace(r).then(C),i.addEventListener("inputsourceschange",v)}};var I=new y,E=new y;function B(A,e){null===e?A.matrixWorld.copy(A.matrix):A.matrixWorld.multiplyMatrices(e.matrixWorld,A.matrix),A.matrixWorldInverse.getInverse(A.matrixWorld)}this.getCamera=function(A){d.near=h.near=c.near=A.near,d.far=h.far=c.far=A.far,g===d.near&&u===d.far||(i.updateRenderState({depthNear:d.near,depthFar:d.far}),g=d.near,u=d.far);var e=A.parent,t=d.cameras;B(d,e);for(var o=0;t.length>o;o++)B(t[o],e);A.matrixWorld.copy(d.matrixWorld);for(var n=A.children,r=(o=0,n.length);r>o;o++)n[o].updateMatrixWorld(!0);return function(A,e,t){I.setFromMatrixPosition(e.matrixWorld),E.setFromMatrixPosition(t.matrixWorld);var i=I.distanceTo(E),o=e.projectionMatrix.elements,n=t.projectionMatrix.elements,r=o[14]/(o[10]-1),a=o[14]/(o[10]+1),s=(o[9]+1)/o[5],l=(o[9]-1)/o[5],c=(o[8]-1)/o[0],h=(n[8]+1)/n[0],d=r*c,p=r*h,g=i/(-c+h),u=g*-c;e.matrixWorld.decompose(A.position,A.quaternion,A.scale),A.translateX(u),A.translateZ(g),A.matrixWorld.compose(A.position,A.quaternion,A.scale),A.matrixWorldInverse.getInverse(A.matrixWorld);var f=r+g,m=a+g;A.projectionMatrix.makePerspective(d-u,p+(i-u),s*a/m*f,l*a/m*f,f,m)}(d,c,h),d};var x=null;var S=new _e;S.setAnimationLoop((function(e,t){if(null!==(a=t.getViewerPose(n))){var o=a.views,r=i.renderState.baseLayer;A.setFramebuffer(r.framebuffer);for(var l=0;o.length>l;l++){var c=o[l],h=r.getViewport(c),p=d.cameras[l];p.matrix.fromArray(c.transform.matrix),p.projectionMatrix.fromArray(c.projectionMatrix),p.viewport.set(h.x,h.y,h.width,h.height),0===l&&d.matrix.copy(p.matrix)}}var g=i.inputSources;for(l=0;s.length>l;l++){var u=s[l],f=g[l],m=null,C=null;f&&(u.targetRay&&null!==(m=t.getPose(f.targetRaySpace,n))&&(u.targetRay.matrix.fromArray(m.transform.matrix),u.targetRay.matrix.decompose(u.targetRay.position,u.targetRay.rotation,u.targetRay.scale)),u.grip&&f.gripSpace&&null!==(C=t.getPose(f.gripSpace,n))&&(u.grip.matrix.fromArray(C.transform.matrix),u.grip.matrix.decompose(u.grip.position,u.grip.rotation,u.grip.scale))),u.targetRay&&(u.targetRay.visible=null!==m),u.grip&&(u.grip.visible=null!==C)}x&&x(e,t)})),this.setAnimationLoop=function(A){x=A},this.dispose=function(){}}function $i(A){var e=void 0!==(A=A||{}).canvas?A.canvas:document.createElementNS("http://www.w3.org/1999/xhtml","canvas"),t=void 0!==A.context?A.context:null,i=void 0!==A.alpha&&A.alpha,o=void 0===A.depth||A.depth,n=void 0===A.stencil||A.stencil,r=void 0!==A.antialias&&A.antialias,l=void 0===A.premultipliedAlpha||A.premultipliedAlpha,c=void 0!==A.preserveDrawingBuffer&&A.preserveDrawingBuffer,h=void 0!==A.powerPreference?A.powerPreference:"default",d=void 0!==A.failIfMajorPerformanceCaveat&&A.failIfMajorPerformanceCaveat,g=null,u=null;this.domElement=e,this.debug={checkShaderErrors:!0},this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this.gammaFactor=2,this.outputEncoding=3e3,this.physicallyCorrectLights=!1,this.toneMapping=1,this.toneMappingExposure=1,this.toneMappingWhitePoint=1,this.maxMorphTargets=8,this.maxMorphNormals=4;var f,m,C,v,I,E,B,x,S,w,b,U,F,K,Q,R,T,k,D=this,L=!1,N=null,O=0,V=0,G=null,P=null,q=-1,j={geometry:null,program:null,wireframe:!1},H=null,W=null,J=new p,z=new p,Z=null,X=e.width,_=e.height,$=1,AA=null,eA=null,tA=new p(0,0,X,_),iA=new p(0,0,X,_),oA=!1,nA=new Ze,rA=new at,aA=!1,sA=!1,lA=new M,cA=new y;function hA(){return null===G?$:1}try{var dA={alpha:i,depth:o,stencil:n,antialias:r,premultipliedAlpha:l,preserveDrawingBuffer:c,powerPreference:h,failIfMajorPerformanceCaveat:d,xrCompatible:!0};if(e.addEventListener("webglcontextlost",fA,!1),e.addEventListener("webglcontextrestored",mA,!1),null===(f=t||e.getContext("webgl",dA)||e.getContext("experimental-webgl",dA)))throw null!==e.getContext("webgl")?new Error("Error creating WebGL context with your selected attributes."):new Error("Error creating WebGL context.");void 0===f.getShaderPrecisionFormat&&(f.getShaderPrecisionFormat=function(){return{rangeMin:1,rangeMax:1,precision:1}})}catch(A){throw console.error("THREE.WebGLRenderer: "+A.message),A}function pA(){m=new st(f),!1===(C=new rt(f,m,A)).isWebGL2&&(m.get("WEBGL_depth_texture"),m.get("OES_texture_float"),m.get("OES_texture_half_float"),m.get("OES_texture_half_float_linear"),m.get("OES_standard_derivatives"),m.get("OES_element_index_uint"),m.get("ANGLE_instanced_arrays")),m.get("OES_texture_float_linear"),k=new zi(f,m,C),(v=new Wi(f,m,C)).scissor(z.copy(iA).multiplyScalar($).floor()),v.viewport(J.copy(tA).multiplyScalar($).floor()),I=new ht(f),E=new Ri,B=new Ji(f,m,v,E,C,k,I),x=new $e(f,C),S=new lt(f,x,I),w=new gt(f,S,x,I),Q=new pt(f),b=new Qi(D,m,C),U=new Li,F=new qi,K=new ot(D,v,w,l),R=new nt(f,m,I,C),T=new ct(f,m,I,C),I.programs=b.programs,D.capabilities=C,D.extensions=m,D.properties=E,D.renderLists=U,D.state=v,D.info=I}pA();var gA=new _i(D,f);this.xr=gA;var uA=new Yi(D,w,C.maxTextureSize);function fA(A){A.preventDefault(),console.log("THREE.WebGLRenderer: Context Lost."),L=!0}function mA(){console.log("THREE.WebGLRenderer: Context Restored."),L=!1,pA()}function CA(A){var e=A.target;e.removeEventListener("dispose",CA),function(A){yA(A),E.remove(A)}(e)}function yA(A){var e=E.get(A).program;A.program=void 0,void 0!==e&&b.releaseProgram(e)}this.shadowMap=uA,this.getContext=function(){return f},this.getContextAttributes=function(){return f.getContextAttributes()},this.forceContextLoss=function(){var A=m.get("WEBGL_lose_context");A&&A.loseContext()},this.forceContextRestore=function(){var A=m.get("WEBGL_lose_context");A&&A.restoreContext()},this.getPixelRatio=function(){return $},this.setPixelRatio=function(A){void 0!==A&&($=A,this.setSize(X,_,!1))},this.getSize=function(A){return void 0===A&&(console.warn("WebGLRenderer: .getsize() now requires a Vector2 as an argument"),A=new s),A.set(X,_)},this.setSize=function(A,t,i){gA.isPresenting?console.warn("THREE.WebGLRenderer: Can't change size while VR device is presenting."):(X=A,_=t,e.width=Math.floor(A*$),e.height=Math.floor(t*$),!1!==i&&(e.style.width=A+"px",e.style.height=t+"px"),this.setViewport(0,0,A,t))},this.getDrawingBufferSize=function(A){return void 0===A&&(console.warn("WebGLRenderer: .getdrawingBufferSize() now requires a Vector2 as an argument"),A=new s),A.set(X*$,_*$).floor()},this.setDrawingBufferSize=function(A,t,i){X=A,_=t,$=i,e.width=Math.floor(A*i),e.height=Math.floor(t*i),this.setViewport(0,0,A,t)},this.getCurrentViewport=function(A){return void 0===A&&(console.warn("WebGLRenderer: .getCurrentViewport() now requires a Vector4 as an argument"),A=new p),A.copy(J)},this.getViewport=function(A){return A.copy(tA)},this.setViewport=function(A,e,t,i){A.isVector4?tA.set(A.x,A.y,A.z,A.w):tA.set(A,e,t,i),v.viewport(J.copy(tA).multiplyScalar($).floor())},this.getScissor=function(A){return A.copy(iA)},this.setScissor=function(A,e,t,i){A.isVector4?iA.set(A.x,A.y,A.z,A.w):iA.set(A,e,t,i),v.scissor(z.copy(iA).multiplyScalar($).floor())},this.getScissorTest=function(){return oA},this.setScissorTest=function(A){v.setScissorTest(oA=A)},this.setOpaqueSort=function(A){AA=A},this.setTransparentSort=function(A){eA=A},this.getClearColor=function(){return K.getClearColor()},this.setClearColor=function(){K.setClearColor.apply(K,arguments)},this.getClearAlpha=function(){return K.getClearAlpha()},this.setClearAlpha=function(){K.setClearAlpha.apply(K,arguments)},this.clear=function(A,e,t){var i=0;(void 0===A||A)&&(i|=16384),(void 0===e||e)&&(i|=256),(void 0===t||t)&&(i|=1024),f.clear(i)},this.clearColor=function(){this.clear(!0,!1,!1)},this.clearDepth=function(){this.clear(!1,!0,!1)},this.clearStencil=function(){this.clear(!1,!1,!0)},this.dispose=function(){e.removeEventListener("webglcontextlost",fA,!1),e.removeEventListener("webglcontextrestored",mA,!1),U.dispose(),F.dispose(),E.dispose(),w.dispose(),gA.dispose(),EA.stop(),this.forceContextLoss()},this.renderBufferImmediate=function(A,e){v.initAttributes();var t=E.get(A);A.hasPositions&&!t.position&&(t.position=f.createBuffer()),A.hasNormals&&!t.normal&&(t.normal=f.createBuffer()),A.hasUvs&&!t.uv&&(t.uv=f.createBuffer()),A.hasColors&&!t.color&&(t.color=f.createBuffer());var i=e.getAttributes();A.hasPositions&&(f.bindBuffer(34962,t.position),f.bufferData(34962,A.positionArray,35048),v.enableAttribute(i.position),f.vertexAttribPointer(i.position,3,5126,!1,0,0)),A.hasNormals&&(f.bindBuffer(34962,t.normal),f.bufferData(34962,A.normalArray,35048),v.enableAttribute(i.normal),f.vertexAttribPointer(i.normal,3,5126,!1,0,0)),A.hasUvs&&(f.bindBuffer(34962,t.uv),f.bufferData(34962,A.uvArray,35048),v.enableAttribute(i.uv),f.vertexAttribPointer(i.uv,2,5126,!1,0,0)),A.hasColors&&(f.bindBuffer(34962,t.color),f.bufferData(34962,A.colorArray,35048),v.enableAttribute(i.color),f.vertexAttribPointer(i.color,3,5126,!1,0,0)),v.disableUnusedAttributes(),f.drawArrays(4,0,A.count),A.count=0};var vA=new Y;this.renderBufferDirect=function(A,e,t,i,o,n){null===e&&(e=vA);var r=o.isMesh&&0>o.matrixWorld.determinant(),a=MA(A,e,i,o);v.setMaterial(i,r);var s=!1;j.geometry===t.id&&j.program===a.id&&j.wireframe===(!0===i.wireframe)||(j.geometry=t.id,j.program=a.id,j.wireframe=!0===i.wireframe,s=!0),(i.morphTargets||i.morphNormals)&&(Q.update(o,t,i,a),s=!0);var l=t.index,c=t.attributes.position;if(null===l){if(void 0===c||0===c.count)return}else if(0===l.count)return;var h,d=1;!0===i.wireframe&&(l=S.getWireframeAttribute(t),d=2);var p=R;null!==l&&(h=x.get(l),(p=T).setIndex(h)),s&&(!function(A,e,t,i){if(!1===C.isWebGL2&&(A.isInstancedMesh||e.isInstancedBufferGeometry)&&null===m.get("ANGLE_instanced_arrays"))return;v.initAttributes();var o=e.attributes,n=i.getAttributes(),r=t.defaultAttributeValues;for(var a in n){var s=n[a];if(s>=0){var l=o[a];if(void 0!==l){var c=l.normalized,h=l.itemSize;if(void 0===(E=x.get(l)))continue;var d=E.buffer,p=E.type,g=E.bytesPerElement;if(l.isInterleavedBufferAttribute){var u=l.data,y=u.stride,I=l.offset;u&&u.isInstancedInterleavedBuffer?(v.enableAttributeAndDivisor(s,u.meshPerAttribute),void 0===e.maxInstancedCount&&(e.maxInstancedCount=u.meshPerAttribute*u.count)):v.enableAttribute(s),f.bindBuffer(34962,d),f.vertexAttribPointer(s,h,p,c,y*g,I*g)}else l.isInstancedBufferAttribute?(v.enableAttributeAndDivisor(s,l.meshPerAttribute),void 0===e.maxInstancedCount&&(e.maxInstancedCount=l.meshPerAttribute*l.count)):v.enableAttribute(s),f.bindBuffer(34962,d),f.vertexAttribPointer(s,h,p,c,0,0)}else if("instanceMatrix"===a){var E;if(void 0===(E=x.get(A.instanceMatrix)))continue;d=E.buffer,p=E.type;v.enableAttributeAndDivisor(s+0,1),v.enableAttributeAndDivisor(s+1,1),v.enableAttributeAndDivisor(s+2,1),v.enableAttributeAndDivisor(s+3,1),f.bindBuffer(34962,d),f.vertexAttribPointer(s+0,4,p,!1,64,0),f.vertexAttribPointer(s+1,4,p,!1,64,16),f.vertexAttribPointer(s+2,4,p,!1,64,32),f.vertexAttribPointer(s+3,4,p,!1,64,48)}else if(void 0!==r){var B=r[a];if(void 0!==B)switch(B.length){case 2:f.vertexAttrib2fv(s,B);break;case 3:f.vertexAttrib3fv(s,B);break;case 4:f.vertexAttrib4fv(s,B);break;default:f.vertexAttrib1fv(s,B)}}}}v.disableUnusedAttributes()}(o,t,i,a),null!==l&&f.bindBuffer(34963,h.buffer));var g=null!==l?l.count:c.count,u=t.drawRange.start*d,y=t.drawRange.count*d,I=null!==n?n.start*d:0,E=null!==n?n.count*d:1/0,B=Math.max(u,I),w=Math.min(g,u+y,I+E)-1,M=Math.max(0,w-B+1);if(0!==M){if(o.isMesh)!0===i.wireframe?(v.setLineWidth(i.wireframeLinewidth*hA()),p.setMode(1)):p.setMode(4);else if(o.isLine){var b=i.linewidth;void 0===b&&(b=1),v.setLineWidth(b*hA()),p.setMode(o.isLineSegments?1:o.isLineLoop?2:3)}else o.isPoints?p.setMode(0):o.isSprite&&p.setMode(4);o.isInstancedMesh?p.renderInstances(t,B,M,o.count):t.isInstancedBufferGeometry?p.renderInstances(t,B,M,t.maxInstancedCount):p.render(B,M)}},this.compile=function(A,e){(u=F.get(A,e)).init(),A.traverse((function(A){A.isLight&&(u.pushLight(A),A.castShadow&&u.pushShadow(A))})),u.setupLights(e);var t={};A.traverse((function(e){if(e.material)if(Array.isArray(e.material))for(var i=0;e.material.length>i;i++)e.material[i].uuid in t==!1&&(wA(e.material[i],A,e),t[e.material[i].uuid]=!0);else e.material.uuid in t==!1&&(wA(e.material,A,e),t[e.material.uuid]=!0)}))};var IA=null;var EA=new _e;function BA(A,e,t,i){if(!1!==A.visible){if(A.layers.test(e.layers))if(A.isGroup)t=A.renderOrder;else if(A.isLOD)!0===A.autoUpdate&&A.update(e);else if(A.isLight)u.pushLight(A),A.castShadow&&u.pushShadow(A);else if(A.isSprite){if(!A.frustumCulled||nA.intersectsSprite(A)){i&&cA.setFromMatrixPosition(A.matrixWorld).applyMatrix4(lA);var o=w.update(A);(n=A.material).visible&&g.push(A,o,n,t,cA.z,null)}}else if(A.isImmediateRenderObject)i&&cA.setFromMatrixPosition(A.matrixWorld).applyMatrix4(lA),g.push(A,null,A.material,t,cA.z,null);else if((A.isMesh||A.isLine||A.isPoints)&&(A.isSkinnedMesh&&A.skeleton.frame!==I.render.frame&&(A.skeleton.update(),A.skeleton.frame=I.render.frame),!A.frustumCulled||nA.intersectsObject(A))){i&&cA.setFromMatrixPosition(A.matrixWorld).applyMatrix4(lA);o=w.update(A);var n=A.material;if(Array.isArray(n))for(var r=o.groups,a=0,s=r.length;s>a;a++){var l=r[a],c=n[l.materialIndex];c&&c.visible&&g.push(A,o,c,t,cA.z,l)}else n.visible&&g.push(A,o,n,t,cA.z,null)}var h=A.children;for(a=0,s=h.length;s>a;a++)BA(h[a],e,t,i)}}function xA(A,e,t,i){for(var o=0,n=A.length;n>o;o++){var r=A[o],a=r.object,s=r.geometry,l=void 0===i?r.material:i,c=r.group;if(t.isArrayCamera){W=t;for(var h=t.cameras,d=0,p=h.length;p>d;d++){var g=h[d];a.layers.test(g.layers)&&(v.viewport(J.copy(g.viewport)),u.setupLights(g),SA(a,e,g,s,l,c))}}else W=null,SA(a,e,t,s,l,c)}}function SA(A,e,t,i,o,n){if(A.onBeforeRender(D,e,t,i,o,n),u=F.get(e,W||t),A.modelViewMatrix.multiplyMatrices(t.matrixWorldInverse,A.matrixWorld),A.normalMatrix.getNormalMatrix(A.modelViewMatrix),A.isImmediateRenderObject){var r=MA(t,e,o,A);v.setMaterial(o),j.geometry=null,j.program=null,j.wireframe=!1,function(A,e){A.render((function(A){D.renderBufferImmediate(A,e)}))}(A,r)}else D.renderBufferDirect(t,e,i,o,A,n);A.onAfterRender(D,e,t,i,o,n),u=F.get(e,W||t)}function wA(A,e,t){var i=E.get(A),o=u.state.lights,n=o.state.version,r=b.getParameters(A,o.state,u.state.shadowsArray,e,rA.numPlanes,rA.numIntersection,t),a=b.getProgramCacheKey(r),s=i.program,l=!0;if(void 0===s)A.addEventListener("dispose",CA);else if(s.cacheKey!==a)yA(A);else if(i.lightsStateVersion!==n)i.lightsStateVersion=n,l=!1;else{if(void 0!==r.shaderID)return;l=!1}l&&(s=b.acquireProgram(r,a),i.program=s,i.uniforms=r.uniforms,i.environment=A.isMeshStandardMaterial?e.environment:null,i.outputEncoding=D.outputEncoding,A.program=s);var c=s.getAttributes();if(A.morphTargets){A.numSupportedMorphTargets=0;for(var h=0;D.maxMorphTargets>h;h++)0>c["morphTarget"+h]||A.numSupportedMorphTargets++}if(A.morphNormals){A.numSupportedMorphNormals=0;for(h=0;D.maxMorphNormals>h;h++)0>c["morphNormal"+h]||A.numSupportedMorphNormals++}var d=i.uniforms;(A.isShaderMaterial||A.isRawShaderMaterial)&&!0!==A.clipping||(i.numClippingPlanes=rA.numPlanes,i.numIntersection=rA.numIntersection,d.clippingPlanes=rA.uniform),i.fog=e.fog,i.needsLights=function(A){return A.isMeshLambertMaterial||A.isMeshToonMaterial||A.isMeshPhongMaterial||A.isMeshStandardMaterial||A.isShadowMaterial||A.isShaderMaterial&&!0===A.lights}(A),i.lightsStateVersion=n,i.needsLights&&(d.ambientLightColor.value=o.state.ambient,d.lightProbe.value=o.state.probe,d.directionalLights.value=o.state.directional,d.directionalLightShadows.value=o.state.directionalShadow,d.spotLights.value=o.state.spot,d.spotLightShadows.value=o.state.spotShadow,d.rectAreaLights.value=o.state.rectArea,d.pointLights.value=o.state.point,d.pointLightShadows.value=o.state.pointShadow,d.hemisphereLights.value=o.state.hemi,d.directionalShadowMap.value=o.state.directionalShadowMap,d.directionalShadowMatrix.value=o.state.directionalShadowMatrix,d.spotShadowMap.value=o.state.spotShadowMap,d.spotShadowMatrix.value=o.state.spotShadowMatrix,d.pointShadowMap.value=o.state.pointShadowMap,d.pointShadowMatrix.value=o.state.pointShadowMatrix);var p=i.program.getUniforms(),g=di.seqWithValue(p.seq,d);i.uniformsList=g}function MA(A,e,t,i){B.resetTextureUnits();var o=e.fog,n=t.isMeshStandardMaterial?e.environment:null,r=E.get(t),s=u.state.lights;aA&&((sA||A!==H)&&rA.setState(t.clippingPlanes,t.clipIntersection,t.clipShadows,A,r,A===H&&t.id===q));t.version===r.__version?void 0===r.program||t.fog&&r.fog!==o||r.environment!==n||r.needsLights&&r.lightsStateVersion!==s.state.version?wA(t,e,i):void 0===r.numClippingPlanes||r.numClippingPlanes===rA.numPlanes&&r.numIntersection===rA.numIntersection?r.outputEncoding!==D.outputEncoding&&wA(t,e,i):wA(t,e,i):(wA(t,e,i),r.__version=t.version);var l,c,h=!1,d=!1,p=!1,g=r.program,m=g.getUniforms(),y=r.uniforms;if(v.useProgram(g.program)&&(h=!0,d=!0,p=!0),t.id!==q&&(q=t.id,d=!0),h||H!==A){if(m.setValue(f,"projectionMatrix",A.projectionMatrix),C.logarithmicDepthBuffer&&m.setValue(f,"logDepthBufFC",2/(Math.log(A.far+1)/Math.LN2)),H!==A&&(H=A,d=!0,p=!0),t.isShaderMaterial||t.isMeshPhongMaterial||t.isMeshToonMaterial||t.isMeshStandardMaterial||t.envMap){var I=m.map.cameraPosition;void 0!==I&&I.setValue(f,cA.setFromMatrixPosition(A.matrixWorld))}(t.isMeshPhongMaterial||t.isMeshToonMaterial||t.isMeshLambertMaterial||t.isMeshBasicMaterial||t.isMeshStandardMaterial||t.isShaderMaterial)&&m.setValue(f,"isOrthographic",!0===A.isOrthographicCamera),(t.isMeshPhongMaterial||t.isMeshToonMaterial||t.isMeshLambertMaterial||t.isMeshBasicMaterial||t.isMeshStandardMaterial||t.isShaderMaterial||t.skinning)&&m.setValue(f,"viewMatrix",A.matrixWorldInverse)}if(t.skinning){m.setOptional(f,i,"bindMatrix"),m.setOptional(f,i,"bindMatrixInverse");var x=i.skeleton;if(x)if(C.floatVertexTextures){if(void 0===x.boneTexture){var S=Math.sqrt(4*x.bones.length);S=a.ceilPowerOfTwo(S),S=Math.max(S,4);var w=new Float32Array(S*S*4);w.set(x.boneMatrices);var M=new We(w,S,S,1023,1015);x.boneMatrices=w,x.boneTexture=M,x.boneTextureSize=S}m.setValue(f,"boneTexture",x.boneTexture,B),m.setValue(f,"boneTextureSize",x.boneTextureSize)}else m.setOptional(f,x,"boneMatrices")}return(d||r.receiveShadow!==i.receiveShadow)&&(r.receiveShadow=i.receiveShadow,m.setValue(f,"receiveShadow",i.receiveShadow)),d&&(m.setValue(f,"toneMappingExposure",D.toneMappingExposure),m.setValue(f,"toneMappingWhitePoint",D.toneMappingWhitePoint),r.needsLights&&((l=y).ambientLightColor.needsUpdate=c=p,l.lightProbe.needsUpdate=c,l.directionalLights.needsUpdate=c,l.directionalLightShadows.needsUpdate=c,l.pointLights.needsUpdate=c,l.pointLightShadows.needsUpdate=c,l.spotLights.needsUpdate=c,l.spotLightShadows.needsUpdate=c,l.rectAreaLights.needsUpdate=c,l.hemisphereLights.needsUpdate=c),o&&t.fog&&function(A,e){A.fogColor.value.copy(e.color),e.isFog?(A.fogNear.value=e.near,A.fogFar.value=e.far):e.isFogExp2&&(A.fogDensity.value=e.density)}(y,o),t.isMeshBasicMaterial?bA(y,t):t.isMeshLambertMaterial?(bA(y,t),function(A,e){e.emissiveMap&&(A.emissiveMap.value=e.emissiveMap)}(y,t)):t.isMeshToonMaterial?(bA(y,t),function(A,e){A.specular.value.copy(e.specular),A.shininess.value=Math.max(e.shininess,1e-4),e.gradientMap&&(A.gradientMap.value=e.gradientMap);e.emissiveMap&&(A.emissiveMap.value=e.emissiveMap);e.bumpMap&&(A.bumpMap.value=e.bumpMap,A.bumpScale.value=e.bumpScale,1===e.side&&(A.bumpScale.value*=-1));e.normalMap&&(A.normalMap.value=e.normalMap,A.normalScale.value.copy(e.normalScale),1===e.side&&A.normalScale.value.negate());e.displacementMap&&(A.displacementMap.value=e.displacementMap,A.displacementScale.value=e.displacementScale,A.displacementBias.value=e.displacementBias)}(y,t)):t.isMeshPhongMaterial?(bA(y,t),function(A,e){A.specular.value.copy(e.specular),A.shininess.value=Math.max(e.shininess,1e-4),e.emissiveMap&&(A.emissiveMap.value=e.emissiveMap);e.bumpMap&&(A.bumpMap.value=e.bumpMap,A.bumpScale.value=e.bumpScale,1===e.side&&(A.bumpScale.value*=-1));e.normalMap&&(A.normalMap.value=e.normalMap,A.normalScale.value.copy(e.normalScale),1===e.side&&A.normalScale.value.negate());e.displacementMap&&(A.displacementMap.value=e.displacementMap,A.displacementScale.value=e.displacementScale,A.displacementBias.value=e.displacementBias)}(y,t)):t.isMeshStandardMaterial?(bA(y,t,n),t.isMeshPhysicalMaterial?function(A,e,t){UA(A,e,t),A.reflectivity.value=e.reflectivity,A.clearcoat.value=e.clearcoat,A.clearcoatRoughness.value=e.clearcoatRoughness,e.sheen&&A.sheen.value.copy(e.sheen);e.clearcoatMap&&(A.clearcoatMap.value=e.clearcoatMap);e.clearcoatRoughnessMap&&(A.clearcoatRoughnessMap.value=e.clearcoatRoughnessMap);e.clearcoatNormalMap&&(A.clearcoatNormalScale.value.copy(e.clearcoatNormalScale),A.clearcoatNormalMap.value=e.clearcoatNormalMap,1===e.side&&A.clearcoatNormalScale.value.negate());A.transparency.value=e.transparency}(y,t,n):UA(y,t,n)):t.isMeshMatcapMaterial?(bA(y,t),function(A,e){e.matcap&&(A.matcap.value=e.matcap);e.bumpMap&&(A.bumpMap.value=e.bumpMap,A.bumpScale.value=e.bumpScale,1===e.side&&(A.bumpScale.value*=-1));e.normalMap&&(A.normalMap.value=e.normalMap,A.normalScale.value.copy(e.normalScale),1===e.side&&A.normalScale.value.negate());e.displacementMap&&(A.displacementMap.value=e.displacementMap,A.displacementScale.value=e.displacementScale,A.displacementBias.value=e.displacementBias)}(y,t)):t.isMeshDepthMaterial?(bA(y,t),function(A,e){e.displacementMap&&(A.displacementMap.value=e.displacementMap,A.displacementScale.value=e.displacementScale,A.displacementBias.value=e.displacementBias)}(y,t)):t.isMeshDistanceMaterial?(bA(y,t),function(A,e){e.displacementMap&&(A.displacementMap.value=e.displacementMap,A.displacementScale.value=e.displacementScale,A.displacementBias.value=e.displacementBias);A.referencePosition.value.copy(e.referencePosition),A.nearDistance.value=e.nearDistance,A.farDistance.value=e.farDistance}(y,t)):t.isMeshNormalMaterial?(bA(y,t),function(A,e){e.bumpMap&&(A.bumpMap.value=e.bumpMap,A.bumpScale.value=e.bumpScale,1===e.side&&(A.bumpScale.value*=-1));e.normalMap&&(A.normalMap.value=e.normalMap,A.normalScale.value.copy(e.normalScale),1===e.side&&A.normalScale.value.negate());e.displacementMap&&(A.displacementMap.value=e.displacementMap,A.displacementScale.value=e.displacementScale,A.displacementBias.value=e.displacementBias)}(y,t)):t.isLineBasicMaterial?(function(A,e){A.diffuse.value.copy(e.color),A.opacity.value=e.opacity}(y,t),t.isLineDashedMaterial&&function(A,e){A.dashSize.value=e.dashSize,A.totalSize.value=e.dashSize+e.gapSize,A.scale.value=e.scale}(y,t)):t.isPointsMaterial?function(A,e){A.diffuse.value.copy(e.color),A.opacity.value=e.opacity,A.size.value=e.size*$,A.scale.value=.5*_,e.map&&(A.map.value=e.map);e.alphaMap&&(A.alphaMap.value=e.alphaMap);var t;e.map?t=e.map:e.alphaMap&&(t=e.alphaMap);void 0!==t&&(!0===t.matrixAutoUpdate&&t.updateMatrix(),A.uvTransform.value.copy(t.matrix))}(y,t):t.isSpriteMaterial?function(A,e){A.diffuse.value.copy(e.color),A.opacity.value=e.opacity,A.rotation.value=e.rotation,e.map&&(A.map.value=e.map);e.alphaMap&&(A.alphaMap.value=e.alphaMap);var t;e.map?t=e.map:e.alphaMap&&(t=e.alphaMap);void 0!==t&&(!0===t.matrixAutoUpdate&&t.updateMatrix(),A.uvTransform.value.copy(t.matrix))}(y,t):t.isShadowMaterial&&(y.color.value.copy(t.color),y.opacity.value=t.opacity),void 0!==y.ltc_1&&(y.ltc_1.value=Xe.LTC_1),void 0!==y.ltc_2&&(y.ltc_2.value=Xe.LTC_2),di.upload(f,r.uniformsList,y,B),t.isShaderMaterial&&(t.uniformsNeedUpdate=!1)),t.isShaderMaterial&&!0===t.uniformsNeedUpdate&&(di.upload(f,r.uniformsList,y,B),t.uniformsNeedUpdate=!1),t.isSpriteMaterial&&m.setValue(f,"center",i.center),m.setValue(f,"modelViewMatrix",i.modelViewMatrix),m.setValue(f,"normalMatrix",i.normalMatrix),m.setValue(f,"modelMatrix",i.matrixWorld),g}function bA(A,e,t){A.opacity.value=e.opacity,e.color&&A.diffuse.value.copy(e.color),e.emissive&&A.emissive.value.copy(e.emissive).multiplyScalar(e.emissiveIntensity),e.map&&(A.map.value=e.map),e.alphaMap&&(A.alphaMap.value=e.alphaMap),e.specularMap&&(A.specularMap.value=e.specularMap);var i,o,n=e.envMap||t;n&&(A.envMap.value=n,A.flipEnvMap.value=n.isCubeTexture?-1:1,A.reflectivity.value=e.reflectivity,A.refractionRatio.value=e.refractionRatio,A.maxMipLevel.value=E.get(n).__maxMipLevel),e.lightMap&&(A.lightMap.value=e.lightMap,A.lightMapIntensity.value=e.lightMapIntensity),e.aoMap&&(A.aoMap.value=e.aoMap,A.aoMapIntensity.value=e.aoMapIntensity),e.map?i=e.map:e.specularMap?i=e.specularMap:e.displacementMap?i=e.displacementMap:e.normalMap?i=e.normalMap:e.bumpMap?i=e.bumpMap:e.roughnessMap?i=e.roughnessMap:e.metalnessMap?i=e.metalnessMap:e.alphaMap?i=e.alphaMap:e.emissiveMap&&(i=e.emissiveMap),void 0!==i&&(i.isWebGLRenderTarget&&(i=i.texture),!0===i.matrixAutoUpdate&&i.updateMatrix(),A.uvTransform.value.copy(i.matrix)),e.aoMap?o=e.aoMap:e.lightMap&&(o=e.lightMap),void 0!==o&&(o.isWebGLRenderTarget&&(o=o.texture),!0===o.matrixAutoUpdate&&o.updateMatrix(),A.uv2Transform.value.copy(o.matrix))}function UA(A,e,t){A.roughness.value=e.roughness,A.metalness.value=e.metalness,e.roughnessMap&&(A.roughnessMap.value=e.roughnessMap),e.metalnessMap&&(A.metalnessMap.value=e.metalnessMap),e.emissiveMap&&(A.emissiveMap.value=e.emissiveMap),e.bumpMap&&(A.bumpMap.value=e.bumpMap,A.bumpScale.value=e.bumpScale,1===e.side&&(A.bumpScale.value*=-1)),e.normalMap&&(A.normalMap.value=e.normalMap,A.normalScale.value.copy(e.normalScale),1===e.side&&A.normalScale.value.negate()),e.displacementMap&&(A.displacementMap.value=e.displacementMap,A.displacementScale.value=e.displacementScale,A.displacementBias.value=e.displacementBias),(e.envMap||t)&&(A.envMapIntensity.value=e.envMapIntensity)}EA.setAnimationLoop((function(A){gA.isPresenting||IA&&IA(A)})),"undefined"!=typeof window&&EA.setContext(window),this.setAnimationLoop=function(A){IA=A,gA.setAnimationLoop(A),EA.start()},this.render=function(A,e){var t,i;if(void 0!==arguments[2]&&(console.warn("THREE.WebGLRenderer.render(): the renderTarget argument has been removed. Use .setRenderTarget() instead."),t=arguments[2]),void 0!==arguments[3]&&(console.warn("THREE.WebGLRenderer.render(): the forceClear argument has been removed. Use .clear() instead."),i=arguments[3]),e&&e.isCamera){if(!L){j.geometry=null,j.program=null,j.wireframe=!1,q=-1,H=null,!0===A.autoUpdate&&A.updateMatrixWorld(),null===e.parent&&e.updateMatrixWorld(),gA.enabled&&gA.isPresenting&&(e=gA.getCamera(e)),(u=F.get(A,e)).init(),A.onBeforeRender(D,A,e,t||G),lA.multiplyMatrices(e.projectionMatrix,e.matrixWorldInverse),nA.setFromProjectionMatrix(lA),aA=rA.init(this.clippingPlanes,sA=this.localClippingEnabled,e),(g=U.get(A,e)).init(),BA(A,e,0,D.sortObjects),g.finish(),!0===D.sortObjects&&g.sort(AA,eA),aA&&rA.beginShadows();var o=u.state.shadowsArray;uA.render(o,A,e),u.setupLights(e),aA&&rA.endShadows(),this.info.autoReset&&this.info.reset(),void 0!==t&&this.setRenderTarget(t),K.render(g,A,e,i);var n=g.opaque,r=g.transparent;if(A.overrideMaterial){var a=A.overrideMaterial;n.length&&xA(n,A,e,a),r.length&&xA(r,A,e,a)}else n.length&&xA(n,A,e),r.length&&xA(r,A,e);A.onAfterRender(D,A,e),null!==G&&(B.updateRenderTargetMipmap(G),B.updateMultisampleRenderTarget(G)),v.buffers.depth.setTest(!0),v.buffers.depth.setMask(!0),v.buffers.color.setMask(!0),v.setPolygonOffset(!1),g=null,u=null}}else console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.")},this.setFramebuffer=function(A){N!==A&&null===G&&f.bindFramebuffer(36160,A),N=A},this.getActiveCubeFace=function(){return O},this.getActiveMipmapLevel=function(){return V},this.getRenderTarget=function(){return G},this.setRenderTarget=function(A,e,t){G=A,O=e,V=t,A&&void 0===E.get(A).__webglFramebuffer&&B.setupRenderTarget(A);var i=N,o=!1;if(A){var n=E.get(A).__webglFramebuffer;A.isWebGLCubeRenderTarget?(i=n[e||0],o=!0):i=A.isWebGLMultisampleRenderTarget?E.get(A).__webglMultisampledFramebuffer:n,J.copy(A.viewport),z.copy(A.scissor),Z=A.scissorTest}else J.copy(tA).multiplyScalar($).floor(),z.copy(iA).multiplyScalar($).floor(),Z=oA;if(P!==i&&(f.bindFramebuffer(36160,i),P=i),v.viewport(J),v.scissor(z),v.setScissorTest(Z),o){var r=E.get(A.texture);f.framebufferTexture2D(36160,36064,34069+(e||0),r.__webglTexture,t||0)}},this.readRenderTargetPixels=function(A,e,t,i,o,n,r){if(A&&A.isWebGLRenderTarget){var a=E.get(A).__webglFramebuffer;if(A.isWebGLCubeRenderTarget&&void 0!==r&&(a=a[r]),a){var s=!1;a!==P&&(f.bindFramebuffer(36160,a),s=!0);try{var l=A.texture,c=l.format,h=l.type;if(1023!==c&&k.convert(c)!==f.getParameter(35739))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");if(!(1009===h||k.convert(h)===f.getParameter(35738)||1015===h&&(C.isWebGL2||m.get("OES_texture_float")||m.get("WEBGL_color_buffer_float"))||1016===h&&m.get(C.isWebGL2?"EXT_color_buffer_float":"EXT_color_buffer_half_float")))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");36053===f.checkFramebufferStatus(36160)?0>e||e>A.width-i||0>t||t>A.height-o||f.readPixels(e,t,i,o,k.convert(c),k.convert(h),n):console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.")}finally{s&&f.bindFramebuffer(36160,P)}}}else console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.")},this.copyFramebufferToTexture=function(A,e,t){void 0===t&&(t=0);var i=Math.pow(2,-t),o=Math.floor(e.image.width*i),n=Math.floor(e.image.height*i),r=k.convert(e.format);B.setTexture2D(e,0),f.copyTexImage2D(3553,t,r,A.x,A.y,o,n,0),v.unbindTexture()},this.copyTextureToTexture=function(A,e,t,i){var o=e.image.width,n=e.image.height,r=k.convert(t.format),a=k.convert(t.type);B.setTexture2D(t,0),e.isDataTexture?f.texSubImage2D(3553,i||0,A.x,A.y,o,n,r,a,e.image.data):f.texSubImage2D(3553,i||0,A.x,A.y,r,a,e.image),v.unbindTexture()},this.initTexture=function(A){B.setTexture2D(A,0),v.unbindTexture()},"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}function Ao(A,e){this.name="",this.color=new LA(A),this.density=void 0!==e?e:25e-5}function eo(A,e,t){this.name="",this.color=new LA(A),this.near=void 0!==e?e:1,this.far=void 0!==t?t:1e3}function to(A,e){this.array=A,this.stride=e,this.count=void 0!==A?A.length/e:0,this.usage=35044,this.updateRange={offset:0,count:-1},this.version=0}Zi.prototype=Object.assign(Object.create(je.prototype),{constructor:Zi,isArrayCamera:!0}),Xi.prototype=Object.assign(Object.create(H.prototype),{constructor:Xi,isGroup:!0}),Object.assign(_i.prototype,i.prototype),Object.assign(Ao.prototype,{isFogExp2:!0,clone:function(){return new Ao(this.color,this.density)},toJSON:function(){return{type:"FogExp2",color:this.color.getHex(),density:this.density}}}),Object.assign(eo.prototype,{isFog:!0,clone:function(){return new eo(this.color,this.near,this.far)},toJSON:function(){return{type:"Fog",color:this.color.getHex(),near:this.near,far:this.far}}}),Object.defineProperty(to.prototype,"needsUpdate",{set:function(A){!0===A&&this.version++}}),Object.assign(to.prototype,{isInterleavedBuffer:!0,onUploadCallback:function(){},setUsage:function(A){return this.usage=A,this},copy:function(A){return this.array=new A.array.constructor(A.array),this.count=A.count,this.stride=A.stride,this.usage=A.usage,this},copyAt:function(A,e,t){A*=this.stride,t*=e.stride;for(var i=0,o=this.stride;o>i;i++)this.array[A+i]=e.array[t+i];return this},set:function(A,e){return void 0===e&&(e=0),this.array.set(A,e),this},clone:function(){return(new this.constructor).copy(this)},onUpload:function(A){return this.onUploadCallback=A,this}});var io,oo=new y;function no(A,e,t,i){this.data=A,this.itemSize=e,this.offset=t,this.normalized=!0===i}function ro(A){qA.call(this),this.type="SpriteMaterial",this.color=new LA(16777215),this.map=null,this.alphaMap=null,this.rotation=0,this.sizeAttenuation=!0,this.transparent=!0,this.setValues(A)}Object.defineProperties(no.prototype,{count:{get:function(){return this.data.count}},array:{get:function(){return this.data.array}}}),Object.assign(no.prototype,{isInterleavedBufferAttribute:!0,applyMatrix4:function(A){for(var e=0,t=this.data.count;t>e;e++)oo.x=this.getX(e),oo.y=this.getY(e),oo.z=this.getZ(e),oo.applyMatrix4(A),this.setXYZ(e,oo.x,oo.y,oo.z);return this},setX:function(A,e){return this.data.array[A*this.data.stride+this.offset]=e,this},setY:function(A,e){return this.data.array[A*this.data.stride+this.offset+1]=e,this},setZ:function(A,e){return this.data.array[A*this.data.stride+this.offset+2]=e,this},setW:function(A,e){return this.data.array[A*this.data.stride+this.offset+3]=e,this},getX:function(A){return this.data.array[A*this.data.stride+this.offset]},getY:function(A){return this.data.array[A*this.data.stride+this.offset+1]},getZ:function(A){return this.data.array[A*this.data.stride+this.offset+2]},getW:function(A){return this.data.array[A*this.data.stride+this.offset+3]},setXY:function(A,e,t){return this.data.array[(A=A*this.data.stride+this.offset)+0]=e,this.data.array[A+1]=t,this},setXYZ:function(A,e,t,i){return this.data.array[(A=A*this.data.stride+this.offset)+0]=e,this.data.array[A+1]=t,this.data.array[A+2]=i,this},setXYZW:function(A,e,t,i,o){return this.data.array[(A=A*this.data.stride+this.offset)+0]=e,this.data.array[A+1]=t,this.data.array[A+2]=i,this.data.array[A+3]=o,this}}),(ro.prototype=Object.create(qA.prototype)).constructor=ro,ro.prototype.isSpriteMaterial=!0,ro.prototype.copy=function(A){return qA.prototype.copy.call(this,A),this.color.copy(A.color),this.map=A.map,this.alphaMap=A.alphaMap,this.rotation=A.rotation,this.sizeAttenuation=A.sizeAttenuation,this};var ao=new y,so=new y,lo=new y,co=new s,ho=new s,po=new M,go=new y,uo=new y,fo=new y,mo=new s,Co=new s,yo=new s;function vo(A){if(H.call(this),this.type="Sprite",void 0===io){io=new he;var e=new to(new Float32Array([-.5,-.5,0,0,0,.5,-.5,0,1,0,.5,.5,0,1,1,-.5,.5,0,0,1]),5);io.setIndex([0,1,2,0,2,3]),io.setAttribute("position",new no(e,3,0,!1)),io.setAttribute("uv",new no(e,2,3,!1))}this.geometry=io,this.material=void 0!==A?A:new ro,this.center=new s(.5,.5)}function Io(A,e,t,i,o,n){co.subVectors(A,t).addScalar(.5).multiply(i),void 0!==o?(ho.x=n*co.x-o*co.y,ho.y=o*co.x+n*co.y):ho.copy(co),A.copy(e),A.x+=ho.x,A.y+=ho.y,A.applyMatrix4(po)}vo.prototype=Object.assign(Object.create(H.prototype),{constructor:vo,isSprite:!0,raycast:function(A,e){null===A.camera&&console.error('THREE.Sprite: "Raycaster.camera" needs to be set in order to raycast against sprites.'),so.setFromMatrixScale(this.matrixWorld),po.copy(A.camera.matrixWorld),this.modelViewMatrix.multiplyMatrices(A.camera.matrixWorldInverse,this.matrixWorld),lo.setFromMatrixPosition(this.modelViewMatrix),A.camera.isPerspectiveCamera&&!1===this.material.sizeAttenuation&&so.multiplyScalar(-lo.z);var t,i,o=this.material.rotation;0!==o&&(i=Math.cos(o),t=Math.sin(o));var n=this.center;Io(go.set(-.5,-.5,0),lo,n,so,t,i),Io(uo.set(.5,-.5,0),lo,n,so,t,i),Io(fo.set(.5,.5,0),lo,n,so,t,i),mo.set(0,0),Co.set(1,0),yo.set(1,1);var r=A.ray.intersectTriangle(go,uo,fo,!1,ao);if(null!==r||(Io(uo.set(-.5,.5,0),lo,n,so,t,i),Co.set(0,1),null!==(r=A.ray.intersectTriangle(go,fo,uo,!1,ao)))){var a=A.ray.origin.distanceTo(ao);A.near>a||a>A.far||e.push({distance:a,point:ao.clone(),uv:RA.getUV(ao,go,uo,fo,mo,Co,yo,new s),face:null,object:this})}},clone:function(){return new this.constructor(this.material).copy(this)},copy:function(A){return H.prototype.copy.call(this,A),void 0!==A.center&&this.center.copy(A.center),this}});var Eo=new y,Bo=new y;function xo(){H.call(this),this._currentLevel=0,this.type="LOD",Object.defineProperties(this,{levels:{enumerable:!0,value:[]}}),this.autoUpdate=!0}function So(A,e){A&&A.isGeometry&&console.error("THREE.SkinnedMesh no longer supports THREE.Geometry. Use THREE.BufferGeometry instead."),Ue.call(this,A,e),this.type="SkinnedMesh",this.bindMode="attached",this.bindMatrix=new M,this.bindMatrixInverse=new M}xo.prototype=Object.assign(Object.create(H.prototype),{constructor:xo,isLOD:!0,copy:function(A){H.prototype.copy.call(this,A,!1);for(var e=A.levels,t=0,i=e.length;i>t;t++){var o=e[t];this.addLevel(o.object.clone(),o.distance)}return this.autoUpdate=A.autoUpdate,this},addLevel:function(A,e){void 0===e&&(e=0),e=Math.abs(e);for(var t=this.levels,i=0;t.length>i&&t[i].distance<=e;i++);return t.splice(i,0,{distance:e,object:A}),this.add(A),this},getCurrentLevel:function(){return this._currentLevel},getObjectForDistance:function(A){var e=this.levels;if(e.length>0){for(var t=1,i=e.length;i>t&&e[t].distance<=A;t++);return e[t-1].object}return null},raycast:function(A,e){if(this.levels.length>0){Eo.setFromMatrixPosition(this.matrixWorld);var t=A.ray.origin.distanceTo(Eo);this.getObjectForDistance(t).raycast(A,e)}},update:function(A){var e=this.levels;if(e.length>1){Eo.setFromMatrixPosition(A.matrixWorld),Bo.setFromMatrixPosition(this.matrixWorld);var t=Eo.distanceTo(Bo)/A.zoom;e[0].object.visible=!0;for(var i=1,o=e.length;o>i&&e[i].distance<=t;i++)e[i-1].object.visible=!1,e[i].object.visible=!0;for(this._currentLevel=i-1;o>i;i++)e[i].object.visible=!1}},toJSON:function(A){var e=H.prototype.toJSON.call(this,A);!1===this.autoUpdate&&(e.object.autoUpdate=!1),e.object.levels=[];for(var t=this.levels,i=0,o=t.length;o>i;i++){var n=t[i];e.object.levels.push({object:n.object.uuid,distance:n.distance})}return e}}),So.prototype=Object.assign(Object.create(Ue.prototype),{constructor:So,isSkinnedMesh:!0,bind:function(A,e){this.skeleton=A,void 0===e&&(this.updateMatrixWorld(!0),this.skeleton.calculateInverses(),e=this.matrixWorld),this.bindMatrix.copy(e),this.bindMatrixInverse.getInverse(e)},pose:function(){this.skeleton.pose()},normalizeSkinWeights:function(){for(var A=new p,e=this.geometry.attributes.skinWeight,t=0,i=e.count;i>t;t++){A.x=e.getX(t),A.y=e.getY(t),A.z=e.getZ(t),A.w=e.getW(t);var o=1/A.manhattanLength();o!==1/0?A.multiplyScalar(o):A.set(1,0,0,0),e.setXYZW(t,A.x,A.y,A.z,A.w)}},updateMatrixWorld:function(A){Ue.prototype.updateMatrixWorld.call(this,A),"attached"===this.bindMode?this.bindMatrixInverse.getInverse(this.matrixWorld):"detached"===this.bindMode?this.bindMatrixInverse.getInverse(this.bindMatrix):console.warn("THREE.SkinnedMesh: Unrecognized bindMode: "+this.bindMode)},clone:function(){return new this.constructor(this.geometry,this.material).copy(this)}});var wo=new M,Mo=new M;function bo(A,e){if(this.bones=(A=A||[]).slice(0),this.boneMatrices=new Float32Array(16*this.bones.length),this.frame=-1,void 0===e)this.calculateInverses();else if(this.bones.length===e.length)this.boneInverses=e.slice(0);else{console.warn("THREE.Skeleton boneInverses is the wrong length."),this.boneInverses=[];for(var t=0,i=this.bones.length;i>t;t++)this.boneInverses.push(new M)}}function Uo(){H.call(this),this.type="Bone"}Object.assign(bo.prototype,{calculateInverses:function(){this.boneInverses=[];for(var A=0,e=this.bones.length;e>A;A++){var t=new M;this.bones[A]&&t.getInverse(this.bones[A].matrixWorld),this.boneInverses.push(t)}},pose:function(){var A,e,t;for(e=0,t=this.bones.length;t>e;e++)(A=this.bones[e])&&A.matrixWorld.getInverse(this.boneInverses[e]);for(e=0,t=this.bones.length;t>e;e++)(A=this.bones[e])&&(A.parent&&A.parent.isBone?(A.matrix.getInverse(A.parent.matrixWorld),A.matrix.multiply(A.matrixWorld)):A.matrix.copy(A.matrixWorld),A.matrix.decompose(A.position,A.quaternion,A.scale))},update:function(){for(var A=this.bones,e=this.boneInverses,t=this.boneMatrices,i=this.boneTexture,o=0,n=A.length;n>o;o++){wo.multiplyMatrices(A[o]?A[o].matrixWorld:Mo,e[o]),wo.toArray(t,16*o)}void 0!==i&&(i.needsUpdate=!0)},clone:function(){return new bo(this.bones,this.boneInverses)},getBoneByName:function(A){for(var e=0,t=this.bones.length;t>e;e++){var i=this.bones[e];if(i.name===A)return i}},dispose:function(){this.boneTexture&&(this.boneTexture.dispose(),this.boneTexture=void 0)}}),Uo.prototype=Object.assign(Object.create(H.prototype),{constructor:Uo,isBone:!0});var Fo=new M,Ko=new M,Qo=[],Ro=new Ue;function To(A,e,t){Ue.call(this,A,e),this.instanceMatrix=new YA(new Float32Array(16*t),16),this.count=t,this.frustumCulled=!1}function ko(A){qA.call(this),this.type="LineBasicMaterial",this.color=new LA(16777215),this.linewidth=1,this.linecap="round",this.linejoin="round",this.setValues(A)}To.prototype=Object.assign(Object.create(Ue.prototype),{constructor:To,isInstancedMesh:!0,getMatrixAt:function(A,e){e.fromArray(this.instanceMatrix.array,16*A)},raycast:function(A,e){var t=this.matrixWorld,i=this.count;if(Ro.geometry=this.geometry,Ro.material=this.material,void 0!==Ro.material)for(var o=0;i>o;o++)this.getMatrixAt(o,Fo),Ko.multiplyMatrices(t,Fo),Ro.matrixWorld=Ko,Ro.raycast(A,Qo),Qo.length>0&&(Qo[0].instanceId=o,Qo[0].object=this,e.push(Qo[0]),Qo.length=0)},setMatrixAt:function(A,e){e.toArray(this.instanceMatrix.array,16*A)},updateMorphTargets:function(){}}),(ko.prototype=Object.create(qA.prototype)).constructor=ko,ko.prototype.isLineBasicMaterial=!0,ko.prototype.copy=function(A){return qA.prototype.copy.call(this,A),this.color.copy(A.color),this.linewidth=A.linewidth,this.linecap=A.linecap,this.linejoin=A.linejoin,this};var Do=new y,Lo=new y,No=new M,Oo=new CA,Vo=new cA;function Go(A,e,t){1===t&&console.error("THREE.Line: parameter THREE.LinePieces no longer supported. Use THREE.LineSegments instead."),H.call(this),this.type="Line",this.geometry=void 0!==A?A:new he,this.material=void 0!==e?e:new ko}Go.prototype=Object.assign(Object.create(H.prototype),{constructor:Go,isLine:!0,computeLineDistances:function(){var A=this.geometry;if(A.isBufferGeometry)if(null===A.index){for(var e=A.attributes.position,t=[0],i=1,o=e.count;o>i;i++)Do.fromBufferAttribute(e,i-1),Lo.fromBufferAttribute(e,i),t[i]=t[i-1],t[i]+=Do.distanceTo(Lo);A.setAttribute("lineDistance",new Ae(t,1))}else console.warn("THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.");else if(A.isGeometry){var n=A.vertices;(t=A.lineDistances)[0]=0;for(i=1,o=n.length;o>i;i++)t[i]=t[i-1],t[i]+=n[i-1].distanceTo(n[i])}return this},raycast:function(A,e){var t=this.geometry,i=this.matrixWorld,o=A.params.Line.threshold;if(null===t.boundingSphere&&t.computeBoundingSphere(),Vo.copy(t.boundingSphere),Vo.applyMatrix4(i),Vo.radius+=o,!1!==A.ray.intersectsSphere(Vo)){No.getInverse(i),Oo.copy(A.ray).applyMatrix4(No);var n=o/((this.scale.x+this.scale.y+this.scale.z)/3),r=n*n,a=new y,s=new y,l=new y,c=new y,h=this&&this.isLineSegments?2:1;if(t.isBufferGeometry){var d=t.index,p=t.attributes.position.array;if(null!==d)for(var g=d.array,u=0,f=g.length-1;f>u;u+=h){var m=g[u+1];if(a.fromArray(p,3*g[u]),s.fromArray(p,3*m),r>=Oo.distanceSqToSegment(a,s,c,l)){c.applyMatrix4(this.matrixWorld);var C=A.ray.origin.distanceTo(c);A.near>C||C>A.far||e.push({distance:C,point:l.clone().applyMatrix4(this.matrixWorld),index:u,face:null,faceIndex:null,object:this})}}else for(u=0,f=p.length/3-1;f>u;u+=h){if(a.fromArray(p,3*u),s.fromArray(p,3*u+3),r>=Oo.distanceSqToSegment(a,s,c,l)){c.applyMatrix4(this.matrixWorld);C=A.ray.origin.distanceTo(c);A.near>C||C>A.far||e.push({distance:C,point:l.clone().applyMatrix4(this.matrixWorld),index:u,face:null,faceIndex:null,object:this})}}}else if(t.isGeometry){var v=t.vertices,I=v.length;for(u=0;I-1>u;u+=h){if(r>=Oo.distanceSqToSegment(v[u],v[u+1],c,l)){c.applyMatrix4(this.matrixWorld);C=A.ray.origin.distanceTo(c);A.near>C||C>A.far||e.push({distance:C,point:l.clone().applyMatrix4(this.matrixWorld),index:u,face:null,faceIndex:null,object:this})}}}}},clone:function(){return new this.constructor(this.geometry,this.material).copy(this)}});var Po=new y,qo=new y;function jo(A,e){Go.call(this,A,e),this.type="LineSegments"}function Ho(A,e){Go.call(this,A,e),this.type="LineLoop"}function Yo(A){qA.call(this),this.type="PointsMaterial",this.color=new LA(16777215),this.map=null,this.alphaMap=null,this.size=1,this.sizeAttenuation=!0,this.morphTargets=!1,this.setValues(A)}jo.prototype=Object.assign(Object.create(Go.prototype),{constructor:jo,isLineSegments:!0,computeLineDistances:function(){var A=this.geometry;if(A.isBufferGeometry)if(null===A.index){for(var e=A.attributes.position,t=[],i=0,o=e.count;o>i;i+=2)Po.fromBufferAttribute(e,i),qo.fromBufferAttribute(e,i+1),t[i]=0===i?0:t[i-1],t[i+1]=t[i]+Po.distanceTo(qo);A.setAttribute("lineDistance",new Ae(t,1))}else console.warn("THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.");else if(A.isGeometry){var n=A.vertices;for(t=A.lineDistances,i=0,o=n.length;o>i;i+=2)Po.copy(n[i]),qo.copy(n[i+1]),t[i]=0===i?0:t[i-1],t[i+1]=t[i]+Po.distanceTo(qo)}return this}}),Ho.prototype=Object.assign(Object.create(Go.prototype),{constructor:Ho,isLineLoop:!0}),(Yo.prototype=Object.create(qA.prototype)).constructor=Yo,Yo.prototype.isPointsMaterial=!0,Yo.prototype.copy=function(A){return qA.prototype.copy.call(this,A),this.color.copy(A.color),this.map=A.map,this.alphaMap=A.alphaMap,this.size=A.size,this.sizeAttenuation=A.sizeAttenuation,this.morphTargets=A.morphTargets,this};var Wo=new M,Jo=new CA,zo=new cA,Zo=new y;function Xo(A,e){H.call(this),this.type="Points",this.geometry=void 0!==A?A:new he,this.material=void 0!==e?e:new Yo,this.updateMorphTargets()}function _o(A,e,t,i,o,n,r){var a=Jo.distanceSqToPoint(A);if(t>a){var s=new y;Jo.closestPointToPoint(A,s),s.applyMatrix4(i);var l=o.ray.origin.distanceTo(s);if(o.near>l||l>o.far)return;n.push({distance:l,distanceToRay:Math.sqrt(a),point:s,index:e,face:null,object:r})}}function $o(A,e,t,i,o,n,r,a,s){d.call(this,A,e,t,i,o,n,r,a,s),this.format=void 0!==r?r:1022,this.minFilter=void 0!==n?n:1006,this.magFilter=void 0!==o?o:1006,this.generateMipmaps=!1}function An(A,e,t,i,o,n,r,a,s,l,c,h){d.call(this,null,n,r,a,s,l,i,o,c,h),this.image={width:e,height:t},this.mipmaps=A,this.flipY=!1,this.generateMipmaps=!1}function en(A,e,t,i,o,n,r,a,s){d.call(this,A,e,t,i,o,n,r,a,s),this.needsUpdate=!0}function tn(A,e,t,i,o,n,r,a,s,l){if(1026!==(l=void 0!==l?l:1026)&&1027!==l)throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");void 0===t&&1026===l&&(t=1012),void 0===t&&1027===l&&(t=1020),d.call(this,null,i,o,n,r,a,l,t,s),this.image={width:A,height:e},this.magFilter=void 0!==r?r:1003,this.minFilter=void 0!==a?a:1003,this.flipY=!1,this.generateMipmaps=!1}function on(A){he.call(this),this.type="WireframeGeometry";var e,t,i,o,n,r,a,s,l,c,h=[],d=[0,0],p={},g=["a","b","c"];if(A&&A.isGeometry){var u=A.faces;for(e=0,i=u.length;i>e;e++){var f=u[e];for(t=0;3>t;t++)a=f[g[t]],s=f[g[(t+1)%3]],d[0]=Math.min(a,s),d[1]=Math.max(a,s),void 0===p[l=d[0]+","+d[1]]&&(p[l]={index1:d[0],index2:d[1]})}for(l in p)h.push((c=A.vertices[(r=p[l]).index1]).x,c.y,c.z),h.push((c=A.vertices[r.index2]).x,c.y,c.z)}else if(A&&A.isBufferGeometry){var m,C,v,I,E;if(c=new y,null!==A.index){for(m=A.attributes.position,C=A.index,0===(v=A.groups).length&&(v=[{start:0,count:C.count,materialIndex:0}]),o=0,n=v.length;n>o;++o)for(e=E=(I=v[o]).start,i=E+I.count;i>e;e+=3)for(t=0;3>t;t++)a=C.getX(e+t),s=C.getX(e+(t+1)%3),d[0]=Math.min(a,s),d[1]=Math.max(a,s),void 0===p[l=d[0]+","+d[1]]&&(p[l]={index1:d[0],index2:d[1]});for(l in p)c.fromBufferAttribute(m,(r=p[l]).index1),h.push(c.x,c.y,c.z),c.fromBufferAttribute(m,r.index2),h.push(c.x,c.y,c.z)}else for(e=0,i=(m=A.attributes.position).count/3;i>e;e++)for(t=0;3>t;t++)c.fromBufferAttribute(m,3*e+t),h.push(c.x,c.y,c.z),c.fromBufferAttribute(m,3*e+(t+1)%3),h.push(c.x,c.y,c.z)}this.setAttribute("position",new Ae(h,3))}function nn(A,e,t){De.call(this),this.type="ParametricGeometry",this.parameters={func:A,slices:e,stacks:t},this.fromBufferGeometry(new rn(A,e,t)),this.mergeVertices()}function rn(A,e,t){he.call(this),this.type="ParametricBufferGeometry",this.parameters={func:A,slices:e,stacks:t};var i,o,n=[],r=[],a=[],s=[],l=1e-5,c=new y,h=new y,d=new y,p=new y,g=new y;3>A.length&&console.error("THREE.ParametricGeometry: Function must now modify a Vector3 as third parameter.");var u=e+1;for(i=0;t>=i;i++){var f=i/t;for(o=0;e>=o;o++){var m=o/e;A(m,f,h),r.push(h.x,h.y,h.z),0>m-l?(A(m+l,f,d),p.subVectors(d,h)):(A(m-l,f,d),p.subVectors(h,d)),0>f-l?(A(m,f+l,d),g.subVectors(d,h)):(A(m,f-l,d),g.subVectors(h,d)),c.crossVectors(p,g).normalize(),a.push(c.x,c.y,c.z),s.push(m,f)}}for(i=0;t>i;i++)for(o=0;e>o;o++){var C=i*u+o+1,v=(i+1)*u+o+1,I=(i+1)*u+o;n.push(i*u+o,C,I),n.push(C,v,I)}this.setIndex(n),this.setAttribute("position",new Ae(r,3)),this.setAttribute("normal",new Ae(a,3)),this.setAttribute("uv",new Ae(s,2))}function an(A,e,t,i){De.call(this),this.type="PolyhedronGeometry",this.parameters={vertices:A,indices:e,radius:t,detail:i},this.fromBufferGeometry(new sn(A,e,t,i)),this.mergeVertices()}function sn(A,e,t,i){he.call(this),this.type="PolyhedronBufferGeometry",this.parameters={vertices:A,indices:e,radius:t,detail:i},t=t||1;var o=[],n=[];function r(A,e,t,i){var o,n,r=Math.pow(2,i),s=[];for(o=0;r>=o;o++){s[o]=[];var l=A.clone().lerp(t,o/r),c=e.clone().lerp(t,o/r),h=r-o;for(n=0;h>=n;n++)s[o][n]=0===n&&o===r?l:l.clone().lerp(c,n/h)}for(o=0;r>o;o++)for(n=0;2*(r-o)-1>n;n++){var d=Math.floor(n/2);n%2==0?(a(s[o][d+1]),a(s[o+1][d]),a(s[o][d])):(a(s[o][d+1]),a(s[o+1][d+1]),a(s[o+1][d]))}}function a(A){o.push(A.x,A.y,A.z)}function l(e,t){var i=3*e;t.x=A[i+0],t.y=A[i+1],t.z=A[i+2]}function c(A,e,t,i){0>i&&1===A.x&&(n[e]=A.x-1),0===t.x&&0===t.z&&(n[e]=i/2/Math.PI+.5)}function h(A){return Math.atan2(A.z,-A.x)}!function(A){for(var t=new y,i=new y,o=new y,n=0;e.length>n;n+=3)l(e[n+0],t),l(e[n+1],i),l(e[n+2],o),r(t,i,o,A)}(i=i||0),function(A){for(var e=new y,t=0;o.length>t;t+=3)e.x=o[t+0],e.y=o[t+1],e.z=o[t+2],e.normalize().multiplyScalar(A),o[t+0]=e.x,o[t+1]=e.y,o[t+2]=e.z}(t),function(){for(var A=new y,e=0;o.length>e;e+=3){A.x=o[e+0],A.y=o[e+1],A.z=o[e+2];var t=h(A)/2/Math.PI+.5,i=(r=A,Math.atan2(-r.y,Math.sqrt(r.x*r.x+r.z*r.z))/Math.PI+.5);n.push(t,1-i)}var r;(function(){for(var A=new y,e=new y,t=new y,i=new y,r=new s,a=new s,l=new s,d=0,p=0;o.length>d;d+=9,p+=6){A.set(o[d+0],o[d+1],o[d+2]),e.set(o[d+3],o[d+4],o[d+5]),t.set(o[d+6],o[d+7],o[d+8]),r.set(n[p+0],n[p+1]),a.set(n[p+2],n[p+3]),l.set(n[p+4],n[p+5]),i.copy(A).add(e).add(t).divideScalar(3);var g=h(i);c(r,p+0,A,g),c(a,p+2,e,g),c(l,p+4,t,g)}})(),function(){for(var A=0;n.length>A;A+=6){var e=n[A+0],t=n[A+2],i=n[A+4],o=Math.max(e,t,i),r=Math.min(e,t,i);o>.9&&.1>r&&(.2>e&&(n[A+0]+=1),.2>t&&(n[A+2]+=1),.2>i&&(n[A+4]+=1))}}()}(),this.setAttribute("position",new Ae(o,3)),this.setAttribute("normal",new Ae(o.slice(),3)),this.setAttribute("uv",new Ae(n,2)),0===i?this.computeVertexNormals():this.normalizeNormals()}function ln(A,e){De.call(this),this.type="TetrahedronGeometry",this.parameters={radius:A,detail:e},this.fromBufferGeometry(new cn(A,e)),this.mergeVertices()}function cn(A,e){sn.call(this,[1,1,1,-1,-1,1,-1,1,-1,1,-1,-1],[2,1,0,0,3,2,1,3,0,2,3,1],A,e),this.type="TetrahedronBufferGeometry",this.parameters={radius:A,detail:e}}function hn(A,e){De.call(this),this.type="OctahedronGeometry",this.parameters={radius:A,detail:e},this.fromBufferGeometry(new dn(A,e)),this.mergeVertices()}function dn(A,e){sn.call(this,[1,0,0,-1,0,0,0,1,0,0,-1,0,0,0,1,0,0,-1],[0,2,4,0,4,3,0,3,5,0,5,2,1,2,5,1,5,3,1,3,4,1,4,2],A,e),this.type="OctahedronBufferGeometry",this.parameters={radius:A,detail:e}}function pn(A,e){De.call(this),this.type="IcosahedronGeometry",this.parameters={radius:A,detail:e},this.fromBufferGeometry(new gn(A,e)),this.mergeVertices()}function gn(A,e){var t=(1+Math.sqrt(5))/2;sn.call(this,[-1,t,0,1,t,0,-1,-t,0,1,-t,0,0,-1,t,0,1,t,0,-1,-t,0,1,-t,t,0,-1,t,0,1,-t,0,-1,-t,0,1],[0,11,5,0,5,1,0,1,7,0,7,10,0,10,11,1,5,9,5,11,4,11,10,2,10,7,6,7,1,8,3,9,4,3,4,2,3,2,6,3,6,8,3,8,9,4,9,5,2,4,11,6,2,10,8,6,7,9,8,1],A,e),this.type="IcosahedronBufferGeometry",this.parameters={radius:A,detail:e}}function un(A,e){De.call(this),this.type="DodecahedronGeometry",this.parameters={radius:A,detail:e},this.fromBufferGeometry(new fn(A,e)),this.mergeVertices()}function fn(A,e){var t=(1+Math.sqrt(5))/2,i=1/t;sn.call(this,[-1,-1,-1,-1,-1,1,-1,1,-1,-1,1,1,1,-1,-1,1,-1,1,1,1,-1,1,1,1,0,-i,-t,0,-i,t,0,i,-t,0,i,t,-i,-t,0,-i,t,0,i,-t,0,i,t,0,-t,0,-i,t,0,-i,-t,0,i,t,0,i],[3,11,7,3,7,15,3,15,13,7,19,17,7,17,6,7,6,15,17,4,8,17,8,10,17,10,6,8,0,16,8,16,2,8,2,10,0,12,1,0,1,18,0,18,16,6,10,2,6,2,13,6,13,15,2,16,18,2,18,3,2,3,13,18,1,9,18,9,11,18,11,3,4,14,12,4,12,0,4,0,8,11,9,5,11,5,19,11,19,7,19,5,14,19,14,4,19,4,17,1,12,14,1,14,5,1,5,9],A,e),this.type="DodecahedronBufferGeometry",this.parameters={radius:A,detail:e}}function mn(A,e,t,i,o,n){De.call(this),this.type="TubeGeometry",this.parameters={path:A,tubularSegments:e,radius:t,radialSegments:i,closed:o},void 0!==n&&console.warn("THREE.TubeGeometry: taper has been removed.");var r=new Cn(A,e,t,i,o);this.tangents=r.tangents,this.normals=r.normals,this.binormals=r.binormals,this.fromBufferGeometry(r),this.mergeVertices()}function Cn(A,e,t,i,o){he.call(this),this.type="TubeBufferGeometry",this.parameters={path:A,tubularSegments:e,radius:t,radialSegments:i,closed:o},t=t||1,i=i||8;var n=A.computeFrenetFrames(e=e||64,o=o||!1);this.tangents=n.tangents,this.normals=n.normals,this.binormals=n.binormals;var r,a,l=new y,c=new y,h=new s,d=new y,p=[],g=[],u=[],f=[];function m(o){d=A.getPointAt(o/e,d);var r=n.normals[o],s=n.binormals[o];for(a=0;i>=a;a++){var h=a/i*Math.PI*2,u=Math.sin(h),f=-Math.cos(h);c.x=f*r.x+u*s.x,c.y=f*r.y+u*s.y,c.z=f*r.z+u*s.z,c.normalize(),g.push(c.x,c.y,c.z),l.x=d.x+t*c.x,l.y=d.y+t*c.y,l.z=d.z+t*c.z,p.push(l.x,l.y,l.z)}}!function(){for(r=0;e>r;r++)m(r);m(!1===o?e:0),function(){for(r=0;e>=r;r++)for(a=0;i>=a;a++)h.x=r/e,h.y=a/i,u.push(h.x,h.y)}(),function(){for(a=1;e>=a;a++)for(r=1;i>=r;r++){var A=(i+1)*a+(r-1),t=(i+1)*a+r,o=(i+1)*(a-1)+r;f.push((i+1)*(a-1)+(r-1),A,o),f.push(A,t,o)}}()}(),this.setIndex(f),this.setAttribute("position",new Ae(p,3)),this.setAttribute("normal",new Ae(g,3)),this.setAttribute("uv",new Ae(u,2))}function yn(A,e,t,i,o,n,r){De.call(this),this.type="TorusKnotGeometry",this.parameters={radius:A,tube:e,tubularSegments:t,radialSegments:i,p:o,q:n},void 0!==r&&console.warn("THREE.TorusKnotGeometry: heightScale has been deprecated. Use .scale( x, y, z ) instead."),this.fromBufferGeometry(new vn(A,e,t,i,o,n)),this.mergeVertices()}function vn(A,e,t,i,o,n){he.call(this),this.type="TorusKnotBufferGeometry",this.parameters={radius:A,tube:e,tubularSegments:t,radialSegments:i,p:o,q:n},A=A||1,e=e||.4,t=Math.floor(t)||64,i=Math.floor(i)||8,o=o||2,n=n||3;var r,a,s=[],l=[],c=[],h=[],d=new y,p=new y,g=new y,u=new y,f=new y,m=new y,C=new y;for(r=0;t>=r;++r){var v=r/t*o*Math.PI*2;for(M(v,o,n,A,g),M(v+.01,o,n,A,u),m.subVectors(u,g),C.addVectors(u,g),f.crossVectors(m,C),C.crossVectors(f,m),f.normalize(),C.normalize(),a=0;i>=a;++a){var I=a/i*Math.PI*2,E=-e*Math.cos(I),B=e*Math.sin(I);d.x=g.x+(E*C.x+B*f.x),d.y=g.y+(E*C.y+B*f.y),d.z=g.z+(E*C.z+B*f.z),l.push(d.x,d.y,d.z),p.subVectors(d,g).normalize(),c.push(p.x,p.y,p.z),h.push(r/t),h.push(a/i)}}for(a=1;t>=a;a++)for(r=1;i>=r;r++){var x=(i+1)*a+(r-1),S=(i+1)*a+r,w=(i+1)*(a-1)+r;s.push((i+1)*(a-1)+(r-1),x,w),s.push(x,S,w)}function M(A,e,t,i,o){var n=Math.cos(A),r=Math.sin(A),a=t/e*A,s=Math.cos(a);o.x=i*(2+s)*.5*n,o.y=i*(2+s)*r*.5,o.z=i*Math.sin(a)*.5}this.setIndex(s),this.setAttribute("position",new Ae(l,3)),this.setAttribute("normal",new Ae(c,3)),this.setAttribute("uv",new Ae(h,2))}function In(A,e,t,i,o){De.call(this),this.type="TorusGeometry",this.parameters={radius:A,tube:e,radialSegments:t,tubularSegments:i,arc:o},this.fromBufferGeometry(new En(A,e,t,i,o)),this.mergeVertices()}function En(A,e,t,i,o){he.call(this),this.type="TorusBufferGeometry",this.parameters={radius:A,tube:e,radialSegments:t,tubularSegments:i,arc:o},A=A||1,e=e||.4,t=Math.floor(t)||8,i=Math.floor(i)||6,o=o||2*Math.PI;var n,r,a=[],s=[],l=[],c=[],h=new y,d=new y,p=new y;for(n=0;t>=n;n++)for(r=0;i>=r;r++){var g=r/i*o,u=n/t*Math.PI*2;d.x=(A+e*Math.cos(u))*Math.cos(g),d.y=(A+e*Math.cos(u))*Math.sin(g),d.z=e*Math.sin(u),s.push(d.x,d.y,d.z),h.x=A*Math.cos(g),h.y=A*Math.sin(g),p.subVectors(d,h).normalize(),l.push(p.x,p.y,p.z),c.push(r/i),c.push(n/t)}for(n=1;t>=n;n++)for(r=1;i>=r;r++){var f=(i+1)*(n-1)+r-1,m=(i+1)*(n-1)+r,C=(i+1)*n+r;a.push((i+1)*n+r-1,f,C),a.push(f,m,C)}this.setIndex(a),this.setAttribute("position",new Ae(s,3)),this.setAttribute("normal",new Ae(l,3)),this.setAttribute("uv",new Ae(c,2))}Xo.prototype=Object.assign(Object.create(H.prototype),{constructor:Xo,isPoints:!0,raycast:function(A,e){var t=this.geometry,i=this.matrixWorld,o=A.params.Points.threshold;if(null===t.boundingSphere&&t.computeBoundingSphere(),zo.copy(t.boundingSphere),zo.applyMatrix4(i),zo.radius+=o,!1!==A.ray.intersectsSphere(zo)){Wo.getInverse(i),Jo.copy(A.ray).applyMatrix4(Wo);var n=o/((this.scale.x+this.scale.y+this.scale.z)/3),r=n*n;if(t.isBufferGeometry){var a=t.index,s=t.attributes.position.array;if(null!==a)for(var l=a.array,c=0,h=l.length;h>c;c++){var d=l[c];Zo.fromArray(s,3*d),_o(Zo,d,r,i,A,e,this)}else{c=0;for(var p=s.length/3;p>c;c++)Zo.fromArray(s,3*c),_o(Zo,c,r,i,A,e,this)}}else{var g=t.vertices;for(c=0,p=g.length;p>c;c++)_o(g[c],c,r,i,A,e,this)}}},updateMorphTargets:function(){var A,e,t,i=this.geometry;if(i.isBufferGeometry){var o=i.morphAttributes,n=Object.keys(o);if(n.length>0){var r=o[n[0]];if(void 0!==r)for(this.morphTargetInfluences=[],this.morphTargetDictionary={},A=0,e=r.length;e>A;A++)t=r[A].name||String(A),this.morphTargetInfluences.push(0),this.morphTargetDictionary[t]=A}}else{var a=i.morphTargets;void 0!==a&&a.length>0&&console.error("THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.")}},clone:function(){return new this.constructor(this.geometry,this.material).copy(this)}}),$o.prototype=Object.assign(Object.create(d.prototype),{constructor:$o,isVideoTexture:!0,update:function(){var A=this.image;A.HAVE_CURRENT_DATA>A.readyState||(this.needsUpdate=!0)}}),(An.prototype=Object.create(d.prototype)).constructor=An,An.prototype.isCompressedTexture=!0,(en.prototype=Object.create(d.prototype)).constructor=en,en.prototype.isCanvasTexture=!0,(tn.prototype=Object.create(d.prototype)).constructor=tn,tn.prototype.isDepthTexture=!0,(on.prototype=Object.create(he.prototype)).constructor=on,(nn.prototype=Object.create(De.prototype)).constructor=nn,(rn.prototype=Object.create(he.prototype)).constructor=rn,(an.prototype=Object.create(De.prototype)).constructor=an,(sn.prototype=Object.create(he.prototype)).constructor=sn,(ln.prototype=Object.create(De.prototype)).constructor=ln,(cn.prototype=Object.create(sn.prototype)).constructor=cn,(hn.prototype=Object.create(De.prototype)).constructor=hn,(dn.prototype=Object.create(sn.prototype)).constructor=dn,(pn.prototype=Object.create(De.prototype)).constructor=pn,(gn.prototype=Object.create(sn.prototype)).constructor=gn,(un.prototype=Object.create(De.prototype)).constructor=un,(fn.prototype=Object.create(sn.prototype)).constructor=fn,(mn.prototype=Object.create(De.prototype)).constructor=mn,(Cn.prototype=Object.create(he.prototype)).constructor=Cn,Cn.prototype.toJSON=function(){var A=he.prototype.toJSON.call(this);return A.path=this.parameters.path.toJSON(),A},(yn.prototype=Object.create(De.prototype)).constructor=yn,(vn.prototype=Object.create(he.prototype)).constructor=vn,(In.prototype=Object.create(De.prototype)).constructor=In,(En.prototype=Object.create(he.prototype)).constructor=En;var Bn=function(A,e,t){t=t||2;var i,o,n,r,a,s,l,c=e&&e.length,h=c?e[0]*t:A.length,d=xn(A,0,h,t,!0),p=[];if(!d||d.next===d.prev)return p;if(c&&(d=function(A,e,t,i){var o,n,r,a=[];for(o=0,n=e.length;n>o;o++)(r=xn(A,e[o]*i,n-1>o?e[o+1]*i:A.length,i,!1))===r.next&&(r.steiner=!0),a.push(Tn(r));for(a.sort(Kn),o=0;a.length>o;o++)Qn(a[o],t),t=Sn(t,t.next);return t}(A,e,d,t)),A.length>80*t){i=n=A[0],o=r=A[1];for(var g=t;h>g;g+=t)i>(a=A[g])&&(i=a),o>(s=A[g+1])&&(o=s),a>n&&(n=a),s>r&&(r=s);l=0!==(l=Math.max(n-i,r-o))?1/l:0}return wn(d,p,t,i,o,l),p};function xn(A,e,t,i,o){var n,r;if(o===function(A,e,t,i){for(var o=0,n=e,r=t-i;t>n;n+=i)o+=(A[r]-A[n])*(A[n+1]+A[r+1]),r=n;return o}(A,e,t,i)>0)for(n=e;t>n;n+=i)r=Pn(n,A[n],A[n+1],r);else for(n=t-i;n>=e;n-=i)r=Pn(n,A[n],A[n+1],r);return r&&Nn(r,r.next)&&(qn(r),r=r.next),r}function Sn(A,e){if(!A)return A;e||(e=A);var t,i=A;do{if(t=!1,i.steiner||!Nn(i,i.next)&&0!==Ln(i.prev,i,i.next))i=i.next;else{if(qn(i),(i=e=i.prev)===i.next)break;t=!0}}while(t||i!==e);return e}function wn(A,e,t,i,o,n,r){if(A){!r&&n&&function(A,e,t,i){var o=A;do{null===o.z&&(o.z=Rn(o.x,o.y,e,t,i)),o.prevZ=o.prev,o.nextZ=o.next,o=o.next}while(o!==A);o.prevZ.nextZ=null,o.prevZ=null,function(A){var e,t,i,o,n,r,a,s,l=1;do{for(t=A,A=null,n=null,r=0;t;){for(r++,i=t,a=0,e=0;l>e&&(a++,i=i.nextZ);e++);for(s=l;a>0||s>0&&i;)0===a||0!==s&&i&&t.z>i.z?(o=i,i=i.nextZ,s--):(o=t,t=t.nextZ,a--),n?n.nextZ=o:A=o,o.prevZ=n,n=o;t=i}n.nextZ=null,l*=2}while(r>1)}(o)}(A,i,o,n);for(var a,s,l=A;A.prev!==A.next;)if(a=A.prev,s=A.next,n?bn(A,i,o,n):Mn(A))e.push(a.i/t),e.push(A.i/t),e.push(s.i/t),qn(A),A=s.next,l=s.next;else if((A=s)===l){r?1===r?wn(A=Un(A,e,t),e,t,i,o,n,2):2===r&&Fn(A,e,t,i,o,n):wn(Sn(A),e,t,i,o,n,1);break}}}function Mn(A){var e=A.prev,t=A,i=A.next;if(Ln(e,t,i)>=0)return!1;for(var o=A.next.next;o!==A.prev;){if(kn(e.x,e.y,t.x,t.y,i.x,i.y,o.x,o.y)&&Ln(o.prev,o,o.next)>=0)return!1;o=o.next}return!0}function bn(A,e,t,i){var o=A.prev,n=A,r=A.next;if(Ln(o,n,r)>=0)return!1;for(var a=o.x>n.x?o.x>r.x?o.x:r.x:n.x>r.x?n.x:r.x,s=o.y>n.y?o.y>r.y?o.y:r.y:n.y>r.y?n.y:r.y,l=Rn(n.x>o.x?r.x>o.x?o.x:r.x:r.x>n.x?n.x:r.x,n.y>o.y?r.y>o.y?o.y:r.y:r.y>n.y?n.y:r.y,e,t,i),c=Rn(a,s,e,t,i),h=A.prevZ,d=A.nextZ;h&&h.z>=l&&d&&c>=d.z;){if(h!==A.prev&&h!==A.next&&kn(o.x,o.y,n.x,n.y,r.x,r.y,h.x,h.y)&&Ln(h.prev,h,h.next)>=0)return!1;if(h=h.prevZ,d!==A.prev&&d!==A.next&&kn(o.x,o.y,n.x,n.y,r.x,r.y,d.x,d.y)&&Ln(d.prev,d,d.next)>=0)return!1;d=d.nextZ}for(;h&&h.z>=l;){if(h!==A.prev&&h!==A.next&&kn(o.x,o.y,n.x,n.y,r.x,r.y,h.x,h.y)&&Ln(h.prev,h,h.next)>=0)return!1;h=h.prevZ}for(;d&&c>=d.z;){if(d!==A.prev&&d!==A.next&&kn(o.x,o.y,n.x,n.y,r.x,r.y,d.x,d.y)&&Ln(d.prev,d,d.next)>=0)return!1;d=d.nextZ}return!0}function Un(A,e,t){var i=A;do{var o=i.prev,n=i.next.next;!Nn(o,n)&&On(o,i,i.next,n)&&Vn(o,n)&&Vn(n,o)&&(e.push(o.i/t),e.push(i.i/t),e.push(n.i/t),qn(i),qn(i.next),i=A=n),i=i.next}while(i!==A);return i}function Fn(A,e,t,i,o,n){var r=A;do{for(var a=r.next.next;a!==r.prev;){if(r.i!==a.i&&Dn(r,a)){var s=Gn(r,a);return r=Sn(r,r.next),s=Sn(s,s.next),wn(r,e,t,i,o,n),void wn(s,e,t,i,o,n)}a=a.next}r=r.next}while(r!==A)}function Kn(A,e){return A.x-e.x}function Qn(A,e){if(e=function(A,e){var t,i=e,o=A.x,n=A.y,r=-1/0;do{if(i.y>=n&&n>=i.next.y&&i.next.y!==i.y){var a=i.x+(n-i.y)*(i.next.x-i.x)/(i.next.y-i.y);if(o>=a&&a>r){if(r=a,a===o){if(n===i.y)return i;if(n===i.next.y)return i.next}t=i.next.x>i.x?i:i.next}}i=i.next}while(i!==e);if(!t)return null;if(o===r)return t.prev;var s,l=t,c=t.x,h=t.y,d=1/0;i=t.next;for(;i!==l;)i.x>o||c>i.x||o===i.x||!kn(h>n?o:r,n,c,h,h>n?r:o,n,i.x,i.y)||(s=Math.abs(n-i.y)/(o-i.x),(d>s||s===d&&i.x>t.x)&&Vn(i,A)&&(t=i,d=s)),i=i.next;return t}(A,e)){var t=Gn(e,A);Sn(t,t.next)}}function Rn(A,e,t,i,o){return(A=1431655765&((A=858993459&((A=252645135&((A=16711935&((A=32767*(A-t)*o)|A<<8))|A<<4))|A<<2))|A<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-i)*o)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function Tn(A){var e=A,t=A;do{(t.x>e.x||e.x===t.x&&t.y>e.y)&&(t=e),e=e.next}while(e!==A);return t}function kn(A,e,t,i,o,n,r,a){return(o-r)*(e-a)-(A-r)*(n-a)>=0&&(A-r)*(i-a)-(t-r)*(e-a)>=0&&(t-r)*(n-a)-(o-r)*(i-a)>=0}function Dn(A,e){return A.next.i!==e.i&&A.prev.i!==e.i&&!function(A,e){var t=A;do{if(t.i!==A.i&&t.next.i!==A.i&&t.i!==e.i&&t.next.i!==e.i&&On(t,t.next,A,e))return!0;t=t.next}while(t!==A);return!1}(A,e)&&Vn(A,e)&&Vn(e,A)&&function(A,e){var t=A,i=!1,o=(A.x+e.x)/2,n=(A.y+e.y)/2;do{t.y>n!=t.next.y>n&&t.next.y!==t.y&&(t.next.x-t.x)*(n-t.y)/(t.next.y-t.y)+t.x>o&&(i=!i),t=t.next}while(t!==A);return i}(A,e)}function Ln(A,e,t){return(e.y-A.y)*(t.x-e.x)-(e.x-A.x)*(t.y-e.y)}function Nn(A,e){return A.x===e.x&&A.y===e.y}function On(A,e,t,i){return!!(Nn(A,t)&&Nn(e,i)||Nn(A,i)&&Nn(t,e))||Ln(A,e,t)>0!=Ln(A,e,i)>0&&Ln(t,i,A)>0!=Ln(t,i,e)>0}function Vn(A,e){return 0>Ln(A.prev,A,A.next)?Ln(A,e,A.next)>=0&&Ln(A,A.prev,e)>=0:0>Ln(A,e,A.prev)||0>Ln(A,A.next,e)}function Gn(A,e){var t=new jn(A.i,A.x,A.y),i=new jn(e.i,e.x,e.y),o=A.next,n=e.prev;return A.next=e,e.prev=A,t.next=o,o.prev=t,i.next=t,t.prev=i,n.next=i,i.prev=n,i}function Pn(A,e,t,i){var o=new jn(A,e,t);return i?(o.next=i.next,o.prev=i,i.next.prev=o,i.next=o):(o.prev=o,o.next=o),o}function qn(A){A.next.prev=A.prev,A.prev.next=A.next,A.prevZ&&(A.prevZ.nextZ=A.nextZ),A.nextZ&&(A.nextZ.prevZ=A.prevZ)}function jn(A,e,t){this.i=A,this.x=e,this.y=t,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}var Hn={area:function(A){for(var e=A.length,t=0,i=e-1,o=0;e>o;i=o++)t+=A[i].x*A[o].y-A[o].x*A[i].y;return.5*t},isClockWise:function(A){return 0>Hn.area(A)},triangulateShape:function(A,e){var t=[],i=[],o=[];Yn(A),Wn(t,A);var n=A.length;e.forEach(Yn);for(var r=0;e.length>r;r++)i.push(n),n+=e[r].length,Wn(t,e[r]);var a=Bn(t,i);for(r=0;a.length>r;r+=3)o.push(a.slice(r,r+3));return o}};function Yn(A){var e=A.length;e>2&&A[e-1].equals(A[0])&&A.pop()}function Wn(A,e){for(var t=0;e.length>t;t++)A.push(e[t].x),A.push(e[t].y)}function Jn(A,e){De.call(this),this.type="ExtrudeGeometry",this.parameters={shapes:A,options:e},this.fromBufferGeometry(new zn(A,e)),this.mergeVertices()}function zn(A,e){he.call(this),this.type="ExtrudeBufferGeometry",this.parameters={shapes:A,options:e},A=Array.isArray(A)?A:[A];for(var t=this,i=[],o=[],n=0,r=A.length;r>n;n++){a(A[n])}function a(A){var n=[],r=void 0!==e.curveSegments?e.curveSegments:12,a=void 0!==e.steps?e.steps:1,l=void 0!==e.depth?e.depth:100,c=void 0===e.bevelEnabled||e.bevelEnabled,h=void 0!==e.bevelThickness?e.bevelThickness:6,d=void 0!==e.bevelSize?e.bevelSize:h-2,p=void 0!==e.bevelOffset?e.bevelOffset:0,g=void 0!==e.bevelSegments?e.bevelSegments:3,u=e.extrudePath,f=void 0!==e.UVGenerator?e.UVGenerator:Zn;void 0!==e.amount&&(console.warn("THREE.ExtrudeBufferGeometry: amount has been renamed to depth."),l=e.amount);var m,C,v,I,E,B,x,S,w=!1;u&&(m=u.getSpacedPoints(a),w=!0,c=!1,C=u.computeFrenetFrames(a,!1),v=new y,I=new y,E=new y),c||(g=0,h=0,d=0,p=0);var M=A.extractPoints(r),b=M.shape,U=M.holes;if(!Hn.isClockWise(b))for(b=b.reverse(),x=0,S=U.length;S>x;x++)Hn.isClockWise(B=U[x])&&(U[x]=B.reverse());var F=Hn.triangulateShape(b,U),K=b;for(x=0,S=U.length;S>x;x++)b=b.concat(B=U[x]);function Q(A,e,t){return e||console.error("THREE.ExtrudeGeometry: vec does not exist"),e.clone().multiplyScalar(t).add(A)}var R,T,k,D,L,N,O=b.length,V=F.length;function G(A,e,t){var i,o,n,r=A.x-e.x,a=A.y-e.y,l=t.x-A.x,c=t.y-A.y,h=r*r+a*a;if(Math.abs(r*c-a*l)>Number.EPSILON){var d=Math.sqrt(h),p=Math.sqrt(l*l+c*c),g=e.x-a/d,u=e.y+r/d,f=((t.x-c/p-g)*c-(t.y+l/p-u)*l)/(r*c-a*l),m=(i=g+r*f-A.x)*i+(o=u+a*f-A.y)*o;if(2>=m)return new s(i,o);n=Math.sqrt(m/2)}else{var C=!1;r>Number.EPSILON?l>Number.EPSILON&&(C=!0):-Number.EPSILON>r?-Number.EPSILON>l&&(C=!0):Math.sign(a)===Math.sign(c)&&(C=!0),C?(i=-a,o=r,n=Math.sqrt(h)):(i=r,o=a,n=Math.sqrt(h/2))}return new s(i/n,o/n)}for(var P=[],q=0,j=K.length,H=j-1,Y=q+1;j>q;q++,H++,Y++)H===j&&(H=0),Y===j&&(Y=0),P[q]=G(K[q],K[H],K[Y]);var W,J,z=[],Z=P.concat();for(x=0,S=U.length;S>x;x++){for(W=[],H=(j=(B=U[x]).length)-1,Y=(q=0)+1;j>q;q++,H++,Y++)H===j&&(H=0),Y===j&&(Y=0),W[q]=G(B[q],B[H],B[Y]);z.push(W),Z=Z.concat(W)}for(R=0;g>R;R++){for(k=R/g,D=h*Math.cos(k*Math.PI/2),T=d*Math.sin(k*Math.PI/2)+p,q=0,j=K.length;j>q;q++)_((L=Q(K[q],P[q],T)).x,L.y,-D);for(x=0,S=U.length;S>x;x++)for(W=z[x],q=0,j=(B=U[x]).length;j>q;q++)_((L=Q(B[q],W[q],T)).x,L.y,-D)}for(T=d+p,q=0;O>q;q++)L=c?Q(b[q],Z[q],T):b[q],w?(I.copy(C.normals[0]).multiplyScalar(L.x),v.copy(C.binormals[0]).multiplyScalar(L.y),E.copy(m[0]).add(I).add(v),_(E.x,E.y,E.z)):_(L.x,L.y,0);for(J=1;a>=J;J++)for(q=0;O>q;q++)L=c?Q(b[q],Z[q],T):b[q],w?(I.copy(C.normals[J]).multiplyScalar(L.x),v.copy(C.binormals[J]).multiplyScalar(L.y),E.copy(m[J]).add(I).add(v),_(E.x,E.y,E.z)):_(L.x,L.y,l/a*J);for(R=g-1;R>=0;R--){for(k=R/g,D=h*Math.cos(k*Math.PI/2),T=d*Math.sin(k*Math.PI/2)+p,q=0,j=K.length;j>q;q++)_((L=Q(K[q],P[q],T)).x,L.y,l+D);for(x=0,S=U.length;S>x;x++)for(W=z[x],q=0,j=(B=U[x]).length;j>q;q++)L=Q(B[q],W[q],T),w?_(L.x,L.y+m[a-1].y,m[a-1].x+D):_(L.x,L.y,l+D)}function X(A,e){var t,i;for(q=A.length;--q>=0;){t=q,0>(i=q-1)&&(i=A.length-1);var o=0,n=a+2*g;for(o=0;n>o;o++){var r=O*o,s=O*(o+1);AA(e+t+r,e+i+r,e+i+s,e+t+s)}}}function _(A,e,t){n.push(A),n.push(e),n.push(t)}function $(A,e,o){eA(A),eA(e),eA(o);var n=i.length/3,r=f.generateTopUV(t,i,n-3,n-2,n-1);tA(r[0]),tA(r[1]),tA(r[2])}function AA(A,e,o,n){eA(A),eA(e),eA(n),eA(e),eA(o),eA(n);var r=i.length/3,a=f.generateSideWallUV(t,i,r-6,r-3,r-2,r-1);tA(a[0]),tA(a[1]),tA(a[3]),tA(a[1]),tA(a[2]),tA(a[3])}function eA(A){i.push(n[3*A+0]),i.push(n[3*A+1]),i.push(n[3*A+2])}function tA(A){o.push(A.x),o.push(A.y)}!function(){var A=i.length/3;if(c){var e=0,o=O*e;for(q=0;V>q;q++)$((N=F[q])[2]+o,N[1]+o,N[0]+o);for(o=O*(e=a+2*g),q=0;V>q;q++)$((N=F[q])[0]+o,N[1]+o,N[2]+o)}else{for(q=0;V>q;q++)$((N=F[q])[2],N[1],N[0]);for(q=0;V>q;q++)$((N=F[q])[0]+O*a,N[1]+O*a,N[2]+O*a)}t.addGroup(A,i.length/3-A,0)}(),function(){var A=i.length/3,e=0;for(X(K,e),e+=K.length,x=0,S=U.length;S>x;x++)X(B=U[x],e),e+=B.length;t.addGroup(A,i.length/3-A,1)}()}this.setAttribute("position",new Ae(i,3)),this.setAttribute("uv",new Ae(o,2)),this.computeVertexNormals()}(Jn.prototype=Object.create(De.prototype)).constructor=Jn,Jn.prototype.toJSON=function(){var A=De.prototype.toJSON.call(this);return Xn(this.parameters.shapes,this.parameters.options,A)},(zn.prototype=Object.create(he.prototype)).constructor=zn,zn.prototype.toJSON=function(){var A=he.prototype.toJSON.call(this);return Xn(this.parameters.shapes,this.parameters.options,A)};var Zn={generateTopUV:function(A,e,t,i,o){var n=e[3*i],r=e[3*i+1],a=e[3*o],l=e[3*o+1];return[new s(e[3*t],e[3*t+1]),new s(n,r),new s(a,l)]},generateSideWallUV:function(A,e,t,i,o,n){var r=e[3*t],a=e[3*t+1],l=e[3*t+2],c=e[3*i],h=e[3*i+1],d=e[3*i+2],p=e[3*o],g=e[3*o+1],u=e[3*o+2],f=e[3*n],m=e[3*n+1],C=e[3*n+2];return.01>Math.abs(a-h)?[new s(r,1-l),new s(c,1-d),new s(p,1-u),new s(f,1-C)]:[new s(a,1-l),new s(h,1-d),new s(g,1-u),new s(m,1-C)]}};function Xn(A,e,t){if(t.shapes=[],Array.isArray(A))for(var i=0,o=A.length;o>i;i++){t.shapes.push(A[i].uuid)}else t.shapes.push(A.uuid);return void 0!==e.extrudePath&&(t.options.extrudePath=e.extrudePath.toJSON()),t}function _n(A,e){De.call(this),this.type="TextGeometry",this.parameters={text:A,parameters:e},this.fromBufferGeometry(new $n(A,e)),this.mergeVertices()}function $n(A,e){var t=(e=e||{}).font;if(!t||!t.isFont)return console.error("THREE.TextGeometry: font parameter is not an instance of THREE.Font."),new De;var i=t.generateShapes(A,e.size);e.depth=void 0!==e.height?e.height:50,void 0===e.bevelThickness&&(e.bevelThickness=10),void 0===e.bevelSize&&(e.bevelSize=8),void 0===e.bevelEnabled&&(e.bevelEnabled=!1),zn.call(this,i,e),this.type="TextBufferGeometry"}function Ar(A,e,t,i,o,n,r){De.call(this),this.type="SphereGeometry",this.parameters={radius:A,widthSegments:e,heightSegments:t,phiStart:i,phiLength:o,thetaStart:n,thetaLength:r},this.fromBufferGeometry(new er(A,e,t,i,o,n,r)),this.mergeVertices()}function er(A,e,t,i,o,n,r){he.call(this),this.type="SphereBufferGeometry",this.parameters={radius:A,widthSegments:e,heightSegments:t,phiStart:i,phiLength:o,thetaStart:n,thetaLength:r},A=A||1,e=Math.max(3,Math.floor(e)||8),t=Math.max(2,Math.floor(t)||6),i=void 0!==i?i:0,o=void 0!==o?o:2*Math.PI,n=void 0!==n?n:0,r=void 0!==r?r:Math.PI;var a,s,l=Math.min(n+r,Math.PI),c=0,h=[],d=new y,p=new y,g=[],u=[],f=[],m=[];for(s=0;t>=s;s++){var C=[],v=s/t,I=0;for(0==s&&0==n?I=.5/e:s==t&&l==Math.PI&&(I=-.5/e),a=0;e>=a;a++){var E=a/e;d.x=-A*Math.cos(i+E*o)*Math.sin(n+v*r),d.y=A*Math.cos(n+v*r),d.z=A*Math.sin(i+E*o)*Math.sin(n+v*r),u.push(d.x,d.y,d.z),p.copy(d).normalize(),f.push(p.x,p.y,p.z),m.push(E+I,1-v),C.push(c++)}h.push(C)}for(s=0;t>s;s++)for(a=0;e>a;a++){var B=h[s][a],x=h[s+1][a],S=h[s+1][a+1];(0!==s||n>0)&&g.push(h[s][a+1],B,S),(s!==t-1||l=a;a++){for(l=0;t>=l;l++)r=o+l/t*n,f.x=g*Math.cos(r),f.y=g*Math.sin(r),h.push(f.x,f.y,f.z),d.push(0,0,1),m.x=(f.x/e+1)/2,m.y=(f.y/e+1)/2,p.push(m.x,m.y);g+=u}for(a=0;i>a;a++){var C=a*(t+1);for(l=0;t>l;l++){var v=(r=l+C)+t+1,I=r+t+2,E=r+1;c.push(r,v,E),c.push(v,I,E)}}this.setIndex(c),this.setAttribute("position",new Ae(h,3)),this.setAttribute("normal",new Ae(d,3)),this.setAttribute("uv",new Ae(p,2))}function or(A,e,t,i){De.call(this),this.type="LatheGeometry",this.parameters={points:A,segments:e,phiStart:t,phiLength:i},this.fromBufferGeometry(new nr(A,e,t,i)),this.mergeVertices()}function nr(A,e,t,i){he.call(this),this.type="LatheBufferGeometry",this.parameters={points:A,segments:e,phiStart:t,phiLength:i},e=Math.floor(e)||12,t=t||0,i=i||2*Math.PI,i=a.clamp(i,0,2*Math.PI);var o,n,r,l=[],c=[],h=[],d=1/e,p=new y,g=new s;for(n=0;e>=n;n++){var u=t+n*d*i,f=Math.sin(u),m=Math.cos(u);for(r=0;A.length-1>=r;r++)p.x=A[r].x*f,p.y=A[r].y,p.z=A[r].x*m,c.push(p.x,p.y,p.z),g.x=n/e,g.y=r/(A.length-1),h.push(g.x,g.y)}for(n=0;e>n;n++)for(r=0;A.length-1>r;r++){var C=(o=r+n*A.length)+A.length,v=o+A.length+1,I=o+1;l.push(o,C,I),l.push(C,v,I)}if(this.setIndex(l),this.setAttribute("position",new Ae(c,3)),this.setAttribute("uv",new Ae(h,2)),this.computeVertexNormals(),i===2*Math.PI){var E=this.attributes.normal.array,B=new y,x=new y,S=new y;for(o=e*A.length*3,n=0,r=0;A.length>n;n++,r+=3)B.x=E[r+0],B.y=E[r+1],B.z=E[r+2],x.x=E[o+r+0],x.y=E[o+r+1],x.z=E[o+r+2],S.addVectors(B,x).normalize(),E[r+0]=E[o+r+0]=S.x,E[r+1]=E[o+r+1]=S.y,E[r+2]=E[o+r+2]=S.z}}function rr(A,e){De.call(this),this.type="ShapeGeometry","object"==typeof e&&(console.warn("THREE.ShapeGeometry: Options parameter has been removed."),e=e.curveSegments),this.parameters={shapes:A,curveSegments:e},this.fromBufferGeometry(new ar(A,e)),this.mergeVertices()}function ar(A,e){he.call(this),this.type="ShapeBufferGeometry",this.parameters={shapes:A,curveSegments:e},e=e||12;var t=[],i=[],o=[],n=[],r=0,a=0;if(!1===Array.isArray(A))l(A);else for(var s=0;A.length>s;s++)l(A[s]),this.addGroup(r,a,s),r+=a,a=0;function l(A){var r,s,l,c=i.length/3,h=A.extractPoints(e),d=h.shape,p=h.holes;for(!1===Hn.isClockWise(d)&&(d=d.reverse()),r=0,s=p.length;s>r;r++)!0===Hn.isClockWise(l=p[r])&&(p[r]=l.reverse());var g=Hn.triangulateShape(d,p);for(r=0,s=p.length;s>r;r++)d=d.concat(l=p[r]);for(r=0,s=d.length;s>r;r++){var u=d[r];i.push(u.x,u.y,0),o.push(0,0,1),n.push(u.x,u.y)}for(r=0,s=g.length;s>r;r++){var f=g[r];t.push(f[0]+c,f[1]+c,f[2]+c),a+=3}}this.setIndex(t),this.setAttribute("position",new Ae(i,3)),this.setAttribute("normal",new Ae(o,3)),this.setAttribute("uv",new Ae(n,2))}function sr(A,e){if(e.shapes=[],Array.isArray(A))for(var t=0,i=A.length;i>t;t++){e.shapes.push(A[t].uuid)}else e.shapes.push(A.uuid);return e}function lr(A,e){he.call(this),this.type="EdgesGeometry",this.parameters={thresholdAngle:e},e=void 0!==e?e:1;var t,i,o,n,r=[],s=Math.cos(a.DEG2RAD*e),l=[0,0],c={},h=["a","b","c"];A.isBufferGeometry?(n=new De).fromBufferGeometry(A):n=A.clone(),n.mergeVertices(),n.computeFaceNormals();for(var d=n.vertices,p=n.faces,g=0,u=p.length;u>g;g++)for(var f=p[g],m=0;3>m;m++)t=f[h[m]],i=f[h[(m+1)%3]],l[0]=Math.min(t,i),l[1]=Math.max(t,i),void 0===c[o=l[0]+","+l[1]]?c[o]={index1:l[0],index2:l[1],face1:g,face2:void 0}:c[o].face2=g;for(o in c){var C=c[o];if(void 0===C.face2||p[C.face1].normal.dot(p[C.face2].normal)<=s){var y=d[C.index1];r.push(y.x,y.y,y.z),r.push((y=d[C.index2]).x,y.y,y.z)}}this.setAttribute("position",new Ae(r,3))}function cr(A,e,t,i,o,n,r,a){De.call(this),this.type="CylinderGeometry",this.parameters={radiusTop:A,radiusBottom:e,height:t,radialSegments:i,heightSegments:o,openEnded:n,thetaStart:r,thetaLength:a},this.fromBufferGeometry(new hr(A,e,t,i,o,n,r,a)),this.mergeVertices()}function hr(A,e,t,i,o,n,r,a){he.call(this),this.type="CylinderBufferGeometry",this.parameters={radiusTop:A,radiusBottom:e,height:t,radialSegments:i,heightSegments:o,openEnded:n,thetaStart:r,thetaLength:a};var l=this;A=void 0!==A?A:1,e=void 0!==e?e:1,t=t||1,i=Math.floor(i)||8,o=Math.floor(o)||1,n=void 0!==n&&n,r=void 0!==r?r:0,a=void 0!==a?a:2*Math.PI;var c=[],h=[],d=[],p=[],g=0,u=[],f=t/2,m=0;function C(t){var o,n,u,C=new s,v=new y,I=0,E=!0===t?A:e,B=!0===t?1:-1;for(n=g,o=1;i>=o;o++)h.push(0,f*B,0),d.push(0,B,0),p.push(.5,.5),g++;for(u=g,o=0;i>=o;o++){var x=o/i*a+r,S=Math.cos(x),w=Math.sin(x);v.x=E*w,v.y=f*B,v.z=E*S,h.push(v.x,v.y,v.z),d.push(0,B,0),C.x=.5*S+.5,C.y=.5*w*B+.5,p.push(C.x,C.y),g++}for(o=0;i>o;o++){var M=n+o,b=u+o;!0===t?c.push(b,b+1,M):c.push(b+1,b,M),I+=3}l.addGroup(m,I,!0===t?1:2),m+=I}!function(){var n,s,C=new y,v=new y,I=0,E=(e-A)/t;for(s=0;o>=s;s++){var B=[],x=s/o,S=x*(e-A)+A;for(n=0;i>=n;n++){var w=n/i,M=w*a+r,b=Math.sin(M),U=Math.cos(M);v.x=S*b,v.y=-x*t+f,v.z=S*U,h.push(v.x,v.y,v.z),C.set(b,E,U).normalize(),d.push(C.x,C.y,C.z),p.push(w,1-x),B.push(g++)}u.push(B)}for(n=0;i>n;n++)for(s=0;o>s;s++){var F=u[s+1][n],K=u[s+1][n+1],Q=u[s][n+1];c.push(u[s][n],F,Q),c.push(F,K,Q),I+=6}l.addGroup(m,I,0),m+=I}(),!1===n&&(A>0&&C(!0),e>0&&C(!1)),this.setIndex(c),this.setAttribute("position",new Ae(h,3)),this.setAttribute("normal",new Ae(d,3)),this.setAttribute("uv",new Ae(p,2))}function dr(A,e,t,i,o,n,r){cr.call(this,0,A,e,t,i,o,n,r),this.type="ConeGeometry",this.parameters={radius:A,height:e,radialSegments:t,heightSegments:i,openEnded:o,thetaStart:n,thetaLength:r}}function pr(A,e,t,i,o,n,r){hr.call(this,0,A,e,t,i,o,n,r),this.type="ConeBufferGeometry",this.parameters={radius:A,height:e,radialSegments:t,heightSegments:i,openEnded:o,thetaStart:n,thetaLength:r}}function gr(A,e,t,i){De.call(this),this.type="CircleGeometry",this.parameters={radius:A,segments:e,thetaStart:t,thetaLength:i},this.fromBufferGeometry(new ur(A,e,t,i)),this.mergeVertices()}function ur(A,e,t,i){he.call(this),this.type="CircleBufferGeometry",this.parameters={radius:A,segments:e,thetaStart:t,thetaLength:i},A=A||1,e=void 0!==e?Math.max(3,e):8,t=void 0!==t?t:0,i=void 0!==i?i:2*Math.PI;var o,n,r=[],a=[],l=[],c=[],h=new y,d=new s;for(a.push(0,0,0),l.push(0,0,1),c.push(.5,.5),n=0,o=3;e>=n;n++,o+=3){var p=t+n/e*i;h.x=A*Math.cos(p),h.y=A*Math.sin(p),a.push(h.x,h.y,h.z),l.push(0,0,1),d.x=(a[o]/A+1)/2,d.y=(a[o+1]/A+1)/2,c.push(d.x,d.y)}for(o=1;e>=o;o++)r.push(o,o+1,0);this.setIndex(r),this.setAttribute("position",new Ae(a,3)),this.setAttribute("normal",new Ae(l,3)),this.setAttribute("uv",new Ae(c,2))}(_n.prototype=Object.create(De.prototype)).constructor=_n,($n.prototype=Object.create(zn.prototype)).constructor=$n,(Ar.prototype=Object.create(De.prototype)).constructor=Ar,(er.prototype=Object.create(he.prototype)).constructor=er,(tr.prototype=Object.create(De.prototype)).constructor=tr,(ir.prototype=Object.create(he.prototype)).constructor=ir,(or.prototype=Object.create(De.prototype)).constructor=or,(nr.prototype=Object.create(he.prototype)).constructor=nr,(rr.prototype=Object.create(De.prototype)).constructor=rr,rr.prototype.toJSON=function(){var A=De.prototype.toJSON.call(this);return sr(this.parameters.shapes,A)},(ar.prototype=Object.create(he.prototype)).constructor=ar,ar.prototype.toJSON=function(){var A=he.prototype.toJSON.call(this);return sr(this.parameters.shapes,A)},(lr.prototype=Object.create(he.prototype)).constructor=lr,(cr.prototype=Object.create(De.prototype)).constructor=cr,(hr.prototype=Object.create(he.prototype)).constructor=hr,(dr.prototype=Object.create(cr.prototype)).constructor=dr,(pr.prototype=Object.create(hr.prototype)).constructor=pr,(gr.prototype=Object.create(De.prototype)).constructor=gr,(ur.prototype=Object.create(he.prototype)).constructor=ur;var fr=Object.freeze({__proto__:null,WireframeGeometry:on,ParametricGeometry:nn,ParametricBufferGeometry:rn,TetrahedronGeometry:ln,TetrahedronBufferGeometry:cn,OctahedronGeometry:hn,OctahedronBufferGeometry:dn,IcosahedronGeometry:pn,IcosahedronBufferGeometry:gn,DodecahedronGeometry:un,DodecahedronBufferGeometry:fn,PolyhedronGeometry:an,PolyhedronBufferGeometry:sn,TubeGeometry:mn,TubeBufferGeometry:Cn,TorusKnotGeometry:yn,TorusKnotBufferGeometry:vn,TorusGeometry:In,TorusBufferGeometry:En,TextGeometry:_n,TextBufferGeometry:$n,SphereGeometry:Ar,SphereBufferGeometry:er,RingGeometry:tr,RingBufferGeometry:ir,PlaneGeometry:At,PlaneBufferGeometry:et,LatheGeometry:or,LatheBufferGeometry:nr,ShapeGeometry:rr,ShapeBufferGeometry:ar,ExtrudeGeometry:Jn,ExtrudeBufferGeometry:zn,EdgesGeometry:lr,ConeGeometry:dr,ConeBufferGeometry:pr,CylinderGeometry:cr,CylinderBufferGeometry:hr,CircleGeometry:gr,CircleBufferGeometry:ur,BoxGeometry:Le,BoxBufferGeometry:Ne});function mr(A){qA.call(this),this.type="ShadowMaterial",this.color=new LA(0),this.transparent=!0,this.setValues(A)}function Cr(A){Pe.call(this,A),this.type="RawShaderMaterial"}function yr(A){qA.call(this),this.defines={STANDARD:""},this.type="MeshStandardMaterial",this.color=new LA(16777215),this.roughness=1,this.metalness=0,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new LA(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new s(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.roughnessMap=null,this.metalnessMap=null,this.alphaMap=null,this.envMap=null,this.envMapIntensity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.skinning=!1,this.morphTargets=!1,this.morphNormals=!1,this.vertexTangents=!1,this.setValues(A)}function vr(A){yr.call(this),this.defines={STANDARD:"",PHYSICAL:""},this.type="MeshPhysicalMaterial",this.clearcoat=0,this.clearcoatMap=null,this.clearcoatRoughness=0,this.clearcoatRoughnessMap=null,this.clearcoatNormalScale=new s(1,1),this.clearcoatNormalMap=null,this.reflectivity=.5,this.sheen=null,this.transparency=0,this.setValues(A)}function Ir(A){qA.call(this),this.type="MeshPhongMaterial",this.color=new LA(16777215),this.specular=new LA(1118481),this.shininess=30,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new LA(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new s(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.skinning=!1,this.morphTargets=!1,this.morphNormals=!1,this.setValues(A)}function Er(A){qA.call(this),this.defines={TOON:""},this.type="MeshToonMaterial",this.color=new LA(16777215),this.specular=new LA(1118481),this.shininess=30,this.map=null,this.gradientMap=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new LA(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new s(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.skinning=!1,this.morphTargets=!1,this.morphNormals=!1,this.setValues(A)}function Br(A){qA.call(this),this.type="MeshNormalMaterial",this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new s(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.skinning=!1,this.morphTargets=!1,this.morphNormals=!1,this.setValues(A)}function xr(A){qA.call(this),this.type="MeshLambertMaterial",this.color=new LA(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new LA(0),this.emissiveIntensity=1,this.emissiveMap=null,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.skinning=!1,this.morphTargets=!1,this.morphNormals=!1,this.setValues(A)}function Sr(A){qA.call(this),this.defines={MATCAP:""},this.type="MeshMatcapMaterial",this.color=new LA(16777215),this.matcap=null,this.map=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new s(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.skinning=!1,this.morphTargets=!1,this.morphNormals=!1,this.setValues(A)}function wr(A){ko.call(this),this.type="LineDashedMaterial",this.scale=1,this.dashSize=3,this.gapSize=1,this.setValues(A)}(mr.prototype=Object.create(qA.prototype)).constructor=mr,mr.prototype.isShadowMaterial=!0,mr.prototype.copy=function(A){return qA.prototype.copy.call(this,A),this.color.copy(A.color),this},(Cr.prototype=Object.create(Pe.prototype)).constructor=Cr,Cr.prototype.isRawShaderMaterial=!0,(yr.prototype=Object.create(qA.prototype)).constructor=yr,yr.prototype.isMeshStandardMaterial=!0,yr.prototype.copy=function(A){return qA.prototype.copy.call(this,A),this.defines={STANDARD:""},this.color.copy(A.color),this.roughness=A.roughness,this.metalness=A.metalness,this.map=A.map,this.lightMap=A.lightMap,this.lightMapIntensity=A.lightMapIntensity,this.aoMap=A.aoMap,this.aoMapIntensity=A.aoMapIntensity,this.emissive.copy(A.emissive),this.emissiveMap=A.emissiveMap,this.emissiveIntensity=A.emissiveIntensity,this.bumpMap=A.bumpMap,this.bumpScale=A.bumpScale,this.normalMap=A.normalMap,this.normalMapType=A.normalMapType,this.normalScale.copy(A.normalScale),this.displacementMap=A.displacementMap,this.displacementScale=A.displacementScale,this.displacementBias=A.displacementBias,this.roughnessMap=A.roughnessMap,this.metalnessMap=A.metalnessMap,this.alphaMap=A.alphaMap,this.envMap=A.envMap,this.envMapIntensity=A.envMapIntensity,this.refractionRatio=A.refractionRatio,this.wireframe=A.wireframe,this.wireframeLinewidth=A.wireframeLinewidth,this.wireframeLinecap=A.wireframeLinecap,this.wireframeLinejoin=A.wireframeLinejoin,this.skinning=A.skinning,this.morphTargets=A.morphTargets,this.morphNormals=A.morphNormals,this.vertexTangents=A.vertexTangents,this},(vr.prototype=Object.create(yr.prototype)).constructor=vr,vr.prototype.isMeshPhysicalMaterial=!0,vr.prototype.copy=function(A){return yr.prototype.copy.call(this,A),this.defines={STANDARD:"",PHYSICAL:""},this.clearcoat=A.clearcoat,this.clearcoatMap=A.clearcoatMap,this.clearcoatRoughness=A.clearcoatRoughness,this.clearcoatRoughnessMap=A.clearcoatRoughnessMap,this.clearcoatNormalMap=A.clearcoatNormalMap,this.clearcoatNormalScale.copy(A.clearcoatNormalScale),this.reflectivity=A.reflectivity,this.sheen=A.sheen?(this.sheen||new LA).copy(A.sheen):null,this.transparency=A.transparency,this},(Ir.prototype=Object.create(qA.prototype)).constructor=Ir,Ir.prototype.isMeshPhongMaterial=!0,Ir.prototype.copy=function(A){return qA.prototype.copy.call(this,A),this.color.copy(A.color),this.specular.copy(A.specular),this.shininess=A.shininess,this.map=A.map,this.lightMap=A.lightMap,this.lightMapIntensity=A.lightMapIntensity,this.aoMap=A.aoMap,this.aoMapIntensity=A.aoMapIntensity,this.emissive.copy(A.emissive),this.emissiveMap=A.emissiveMap,this.emissiveIntensity=A.emissiveIntensity,this.bumpMap=A.bumpMap,this.bumpScale=A.bumpScale,this.normalMap=A.normalMap,this.normalMapType=A.normalMapType,this.normalScale.copy(A.normalScale),this.displacementMap=A.displacementMap,this.displacementScale=A.displacementScale,this.displacementBias=A.displacementBias,this.specularMap=A.specularMap,this.alphaMap=A.alphaMap,this.envMap=A.envMap,this.combine=A.combine,this.reflectivity=A.reflectivity,this.refractionRatio=A.refractionRatio,this.wireframe=A.wireframe,this.wireframeLinewidth=A.wireframeLinewidth,this.wireframeLinecap=A.wireframeLinecap,this.wireframeLinejoin=A.wireframeLinejoin,this.skinning=A.skinning,this.morphTargets=A.morphTargets,this.morphNormals=A.morphNormals,this},(Er.prototype=Object.create(qA.prototype)).constructor=Er,Er.prototype.isMeshToonMaterial=!0,Er.prototype.copy=function(A){return qA.prototype.copy.call(this,A),this.color.copy(A.color),this.specular.copy(A.specular),this.shininess=A.shininess,this.map=A.map,this.gradientMap=A.gradientMap,this.lightMap=A.lightMap,this.lightMapIntensity=A.lightMapIntensity,this.aoMap=A.aoMap,this.aoMapIntensity=A.aoMapIntensity,this.emissive.copy(A.emissive),this.emissiveMap=A.emissiveMap,this.emissiveIntensity=A.emissiveIntensity,this.bumpMap=A.bumpMap,this.bumpScale=A.bumpScale,this.normalMap=A.normalMap,this.normalMapType=A.normalMapType,this.normalScale.copy(A.normalScale),this.displacementMap=A.displacementMap,this.displacementScale=A.displacementScale,this.displacementBias=A.displacementBias,this.specularMap=A.specularMap,this.alphaMap=A.alphaMap,this.wireframe=A.wireframe,this.wireframeLinewidth=A.wireframeLinewidth,this.wireframeLinecap=A.wireframeLinecap,this.wireframeLinejoin=A.wireframeLinejoin,this.skinning=A.skinning,this.morphTargets=A.morphTargets,this.morphNormals=A.morphNormals,this},(Br.prototype=Object.create(qA.prototype)).constructor=Br,Br.prototype.isMeshNormalMaterial=!0,Br.prototype.copy=function(A){return qA.prototype.copy.call(this,A),this.bumpMap=A.bumpMap,this.bumpScale=A.bumpScale,this.normalMap=A.normalMap,this.normalMapType=A.normalMapType,this.normalScale.copy(A.normalScale),this.displacementMap=A.displacementMap,this.displacementScale=A.displacementScale,this.displacementBias=A.displacementBias,this.wireframe=A.wireframe,this.wireframeLinewidth=A.wireframeLinewidth,this.skinning=A.skinning,this.morphTargets=A.morphTargets,this.morphNormals=A.morphNormals,this},(xr.prototype=Object.create(qA.prototype)).constructor=xr,xr.prototype.isMeshLambertMaterial=!0,xr.prototype.copy=function(A){return qA.prototype.copy.call(this,A),this.color.copy(A.color),this.map=A.map,this.lightMap=A.lightMap,this.lightMapIntensity=A.lightMapIntensity,this.aoMap=A.aoMap,this.aoMapIntensity=A.aoMapIntensity,this.emissive.copy(A.emissive),this.emissiveMap=A.emissiveMap,this.emissiveIntensity=A.emissiveIntensity,this.specularMap=A.specularMap,this.alphaMap=A.alphaMap,this.envMap=A.envMap,this.combine=A.combine,this.reflectivity=A.reflectivity,this.refractionRatio=A.refractionRatio,this.wireframe=A.wireframe,this.wireframeLinewidth=A.wireframeLinewidth,this.wireframeLinecap=A.wireframeLinecap,this.wireframeLinejoin=A.wireframeLinejoin,this.skinning=A.skinning,this.morphTargets=A.morphTargets,this.morphNormals=A.morphNormals,this},(Sr.prototype=Object.create(qA.prototype)).constructor=Sr,Sr.prototype.isMeshMatcapMaterial=!0,Sr.prototype.copy=function(A){return qA.prototype.copy.call(this,A),this.defines={MATCAP:""},this.color.copy(A.color),this.matcap=A.matcap,this.map=A.map,this.bumpMap=A.bumpMap,this.bumpScale=A.bumpScale,this.normalMap=A.normalMap,this.normalMapType=A.normalMapType,this.normalScale.copy(A.normalScale),this.displacementMap=A.displacementMap,this.displacementScale=A.displacementScale,this.displacementBias=A.displacementBias,this.alphaMap=A.alphaMap,this.skinning=A.skinning,this.morphTargets=A.morphTargets,this.morphNormals=A.morphNormals,this},(wr.prototype=Object.create(ko.prototype)).constructor=wr,wr.prototype.isLineDashedMaterial=!0,wr.prototype.copy=function(A){return ko.prototype.copy.call(this,A),this.scale=A.scale,this.dashSize=A.dashSize,this.gapSize=A.gapSize,this};var Mr=Object.freeze({__proto__:null,ShadowMaterial:mr,SpriteMaterial:ro,RawShaderMaterial:Cr,ShaderMaterial:Pe,PointsMaterial:Yo,MeshPhysicalMaterial:vr,MeshStandardMaterial:yr,MeshPhongMaterial:Ir,MeshToonMaterial:Er,MeshNormalMaterial:Br,MeshLambertMaterial:xr,MeshDepthMaterial:ji,MeshDistanceMaterial:Hi,MeshBasicMaterial:jA,MeshMatcapMaterial:Sr,LineDashedMaterial:wr,LineBasicMaterial:ko,Material:qA}),br={arraySlice:function(A,e,t){return br.isTypedArray(A)?new A.constructor(A.subarray(e,void 0!==t?t:A.length)):A.slice(e,t)},convertArray:function(A,e,t){return!A||!t&&A.constructor===e?A:"number"==typeof e.BYTES_PER_ELEMENT?new e(A):Array.prototype.slice.call(A)},isTypedArray:function(A){return ArrayBuffer.isView(A)&&!(A instanceof DataView)},getKeyframeOrder:function(A){for(var e=A.length,t=new Array(e),i=0;i!==e;++i)t[i]=i;return t.sort((function(e,t){return A[e]-A[t]})),t},sortedArray:function(A,e,t){for(var i=A.length,o=new A.constructor(i),n=0,r=0;r!==i;++n)for(var a=t[n]*e,s=0;s!==e;++s)o[r++]=A[a+s];return o},flattenJSON:function(A,e,t,i){for(var o=1,n=A[0];void 0!==n&&void 0===n[i];)n=A[o++];if(void 0!==n){var r=n[i];if(void 0!==r)if(Array.isArray(r))do{void 0!==(r=n[i])&&(e.push(n.time),t.push.apply(t,r)),n=A[o++]}while(void 0!==n);else if(void 0!==r.toArray)do{void 0!==(r=n[i])&&(e.push(n.time),r.toArray(t,t.length)),n=A[o++]}while(void 0!==n);else do{void 0!==(r=n[i])&&(e.push(n.time),t.push(r)),n=A[o++]}while(void 0!==n)}},subclip:function(A,e,t,i,o){o=o||30;var n=A.clone();n.name=e;for(var r=[],a=0;n.tracks.length>a;++a){for(var s=n.tracks[a],l=s.getValueSize(),c=[],h=[],d=0;s.times.length>d;++d){var p=s.times[d]*o;if(p>=t&&i>p){c.push(s.times[d]);for(var g=0;l>g;++g)h.push(s.values[d*l+g])}}0!==c.length&&(s.times=br.convertArray(c,s.times.constructor),s.values=br.convertArray(h,s.values.constructor),r.push(s))}n.tracks=r;var u=1/0;for(a=0;n.tracks.length>a;++a)u>n.tracks[a].times[0]&&(u=n.tracks[a].times[0]);for(a=0;n.tracks.length>a;++a)n.tracks[a].shift(-1*u);return n.resetDuration(),n}};function Ur(A,e,t,i){this.parameterPositions=A,this._cachedIndex=0,this.resultBuffer=void 0!==i?i:new e.constructor(t),this.sampleValues=e,this.valueSize=t}function Fr(A,e,t,i){Ur.call(this,A,e,t,i),this._weightPrev=-0,this._offsetPrev=-0,this._weightNext=-0,this._offsetNext=-0}function Kr(A,e,t,i){Ur.call(this,A,e,t,i)}function Qr(A,e,t,i){Ur.call(this,A,e,t,i)}function Rr(A,e,t,i){if(void 0===A)throw new Error("THREE.KeyframeTrack: track name is undefined");if(void 0===e||0===e.length)throw new Error("THREE.KeyframeTrack: no keyframes in track named "+A);this.name=A,this.times=br.convertArray(e,this.TimeBufferType),this.values=br.convertArray(t,this.ValueBufferType),this.setInterpolation(i||this.DefaultInterpolation)}function Tr(A,e,t){Rr.call(this,A,e,t)}function kr(A,e,t,i){Rr.call(this,A,e,t,i)}function Dr(A,e,t,i){Rr.call(this,A,e,t,i)}function Lr(A,e,t,i){Ur.call(this,A,e,t,i)}function Nr(A,e,t,i){Rr.call(this,A,e,t,i)}function Or(A,e,t,i){Rr.call(this,A,e,t,i)}function Vr(A,e,t,i){Rr.call(this,A,e,t,i)}function Gr(A,e,t){this.name=A,this.tracks=t,this.duration=void 0!==e?e:-1,this.uuid=a.generateUUID(),0>this.duration&&this.resetDuration()}function Pr(A){if(void 0===A.type)throw new Error("THREE.KeyframeTrack: track type undefined, can not parse");var e=function(A){switch(A.toLowerCase()){case"scalar":case"double":case"float":case"number":case"integer":return Dr;case"vector":case"vector2":case"vector3":case"vector4":return Vr;case"color":return kr;case"quaternion":return Nr;case"bool":case"boolean":return Tr;case"string":return Or}throw new Error("THREE.KeyframeTrack: Unsupported typeName: "+A)}(A.type);if(void 0===A.times){var t=[],i=[];br.flattenJSON(A.keys,t,i,"value"),A.times=t,A.values=i}return void 0!==e.parse?e.parse(A):new e(A.name,A.times,A.values,A.interpolation)}Object.assign(Ur.prototype,{evaluate:function(A){var e=this.parameterPositions,t=this._cachedIndex,i=e[t],o=e[t-1];A:{e:{var n;t:{i:if(i<=A){for(var r=t+2;;){if(void 0===i){if(o>A)break i;return this._cachedIndex=t=e.length,this.afterEnd_(t-1,A,o)}if(t===r)break;if(o=i,(i=e[++t])>A)break e}n=e.length;break t}if(A>=o)break A;var a=e[1];a>A&&(t=2,o=a);for(r=t-2;;){if(void 0===o)return this._cachedIndex=0,this.beforeStart_(0,A,i);if(t===r)break;if(i=o,A>=(o=e[--t-1]))break e}n=t,t=0}for(;n>t;){var s=t+n>>>1;e[s]>A?n=s:t=s+1}if(i=e[t],void 0===(o=e[t-1]))return this._cachedIndex=0,this.beforeStart_(0,A,i);if(void 0===i)return this._cachedIndex=t=e.length,this.afterEnd_(t-1,o,A)}this._cachedIndex=t,this.intervalChanged_(t,o,i)}return this.interpolate_(t,o,A,i)},settings:null,DefaultSettings_:{},getSettings_:function(){return this.settings||this.DefaultSettings_},copySampleValue_:function(A){for(var e=this.resultBuffer,t=this.sampleValues,i=this.valueSize,o=A*i,n=0;n!==i;++n)e[n]=t[o+n];return e},interpolate_:function(){throw new Error("call to abstract method")},intervalChanged_:function(){}}),Object.assign(Ur.prototype,{beforeStart_:Ur.prototype.copySampleValue_,afterEnd_:Ur.prototype.copySampleValue_}),Fr.prototype=Object.assign(Object.create(Ur.prototype),{constructor:Fr,DefaultSettings_:{endingStart:2400,endingEnd:2400},intervalChanged_:function(A,e,t){var i=this.parameterPositions,o=A-2,n=A+1,r=i[o],a=i[n];if(void 0===r)switch(this.getSettings_().endingStart){case 2401:o=A,r=2*e-t;break;case 2402:r=e+i[o=i.length-2]-i[o+1];break;default:o=A,r=t}if(void 0===a)switch(this.getSettings_().endingEnd){case 2401:n=A,a=2*t-e;break;case 2402:n=1,a=t+i[1]-i[0];break;default:n=A-1,a=e}var s=.5*(t-e),l=this.valueSize;this._weightPrev=s/(e-r),this._weightNext=s/(a-t),this._offsetPrev=o*l,this._offsetNext=n*l},interpolate_:function(A,e,t,i){for(var o=this.resultBuffer,n=this.sampleValues,r=this.valueSize,a=A*r,s=a-r,l=this._offsetPrev,c=this._offsetNext,h=this._weightPrev,d=this._weightNext,p=(t-e)/(i-e),g=p*p,u=g*p,f=-h*u+2*h*g-h*p,m=(1+h)*u+(-1.5-2*h)*g+(-.5+h)*p+1,C=(-1-d)*u+(1.5+d)*g+.5*p,y=d*u-d*g,v=0;v!==r;++v)o[v]=f*n[l+v]+m*n[s+v]+C*n[a+v]+y*n[c+v];return o}}),Kr.prototype=Object.assign(Object.create(Ur.prototype),{constructor:Kr,interpolate_:function(A,e,t,i){for(var o=this.resultBuffer,n=this.sampleValues,r=this.valueSize,a=A*r,s=a-r,l=(t-e)/(i-e),c=1-l,h=0;h!==r;++h)o[h]=n[s+h]*c+n[a+h]*l;return o}}),Qr.prototype=Object.assign(Object.create(Ur.prototype),{constructor:Qr,interpolate_:function(A){return this.copySampleValue_(A-1)}}),Object.assign(Rr,{toJSON:function(A){var e,t=A.constructor;if(void 0!==t.toJSON)e=t.toJSON(A);else{e={name:A.name,times:br.convertArray(A.times,Array),values:br.convertArray(A.values,Array)};var i=A.getInterpolation();i!==A.DefaultInterpolation&&(e.interpolation=i)}return e.type=A.ValueTypeName,e}}),Object.assign(Rr.prototype,{constructor:Rr,TimeBufferType:Float32Array,ValueBufferType:Float32Array,DefaultInterpolation:2301,InterpolantFactoryMethodDiscrete:function(A){return new Qr(this.times,this.values,this.getValueSize(),A)},InterpolantFactoryMethodLinear:function(A){return new Kr(this.times,this.values,this.getValueSize(),A)},InterpolantFactoryMethodSmooth:function(A){return new Fr(this.times,this.values,this.getValueSize(),A)},setInterpolation:function(A){var e;switch(A){case 2300:e=this.InterpolantFactoryMethodDiscrete;break;case 2301:e=this.InterpolantFactoryMethodLinear;break;case 2302:e=this.InterpolantFactoryMethodSmooth}if(void 0===e){var t="unsupported interpolation for "+this.ValueTypeName+" keyframe track named "+this.name;if(void 0===this.createInterpolant){if(A===this.DefaultInterpolation)throw new Error(t);this.setInterpolation(this.DefaultInterpolation)}return console.warn("THREE.KeyframeTrack:",t),this}return this.createInterpolant=e,this},getInterpolation:function(){switch(this.createInterpolant){case this.InterpolantFactoryMethodDiscrete:return 2300;case this.InterpolantFactoryMethodLinear:return 2301;case this.InterpolantFactoryMethodSmooth:return 2302}},getValueSize:function(){return this.values.length/this.times.length},shift:function(A){if(0!==A)for(var e=this.times,t=0,i=e.length;t!==i;++t)e[t]+=A;return this},scale:function(A){if(1!==A)for(var e=this.times,t=0,i=e.length;t!==i;++t)e[t]*=A;return this},trim:function(A,e){for(var t=this.times,i=t.length,o=0,n=i-1;o!==i&&A>t[o];)++o;for(;-1!==n&&t[n]>e;)--n;if(++n,0!==o||n!==i){n>o||(o=(n=Math.max(n,1))-1);var r=this.getValueSize();this.times=br.arraySlice(t,o,n),this.values=br.arraySlice(this.values,o*r,n*r)}return this},validate:function(){var A=!0,e=this.getValueSize();e-Math.floor(e)!=0&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),A=!1);var t=this.times,i=this.values,o=t.length;0===o&&(console.error("THREE.KeyframeTrack: Track is empty.",this),A=!1);for(var n=null,r=0;r!==o;r++){var a=t[r];if("number"==typeof a&&isNaN(a)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,r,a),A=!1;break}if(null!==n&&n>a){console.error("THREE.KeyframeTrack: Out of order keys.",this,r,a,n),A=!1;break}n=a}if(void 0!==i&&br.isTypedArray(i)){r=0;for(var s=i.length;r!==s;++r){var l=i[r];if(isNaN(l)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,r,l),A=!1;break}}}return A},optimize:function(){for(var A=br.arraySlice(this.times),e=br.arraySlice(this.values),t=this.getValueSize(),i=2302===this.getInterpolation(),o=1,n=A.length-1,r=1;n>r;++r){var a=!1,s=A[r];if(s!==A[r+1]&&(1!==r||s!==s[0]))if(i)a=!0;else for(var l=r*t,c=l-t,h=l+t,d=0;d!==t;++d){var p=e[l+d];if(p!==e[c+d]||p!==e[h+d]){a=!0;break}}if(a){if(r!==o){A[o]=A[r];var g=r*t,u=o*t;for(d=0;d!==t;++d)e[u+d]=e[g+d]}++o}}if(n>0){A[o]=A[n];for(g=n*t,u=o*t,d=0;d!==t;++d)e[u+d]=e[g+d];++o}return o!==A.length?(this.times=br.arraySlice(A,0,o),this.values=br.arraySlice(e,0,o*t)):(this.times=A,this.values=e),this},clone:function(){var A=br.arraySlice(this.times,0),e=br.arraySlice(this.values,0),t=new(0,this.constructor)(this.name,A,e);return t.createInterpolant=this.createInterpolant,t}}),Tr.prototype=Object.assign(Object.create(Rr.prototype),{constructor:Tr,ValueTypeName:"bool",ValueBufferType:Array,DefaultInterpolation:2300,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0}),kr.prototype=Object.assign(Object.create(Rr.prototype),{constructor:kr,ValueTypeName:"color"}),Dr.prototype=Object.assign(Object.create(Rr.prototype),{constructor:Dr,ValueTypeName:"number"}),Lr.prototype=Object.assign(Object.create(Ur.prototype),{constructor:Lr,interpolate_:function(A,e,t,i){for(var o=this.resultBuffer,n=this.sampleValues,r=this.valueSize,a=A*r,s=(t-e)/(i-e),l=a+r;a!==l;a+=4)f.slerpFlat(o,0,n,a-r,n,a,s);return o}}),Nr.prototype=Object.assign(Object.create(Rr.prototype),{constructor:Nr,ValueTypeName:"quaternion",DefaultInterpolation:2301,InterpolantFactoryMethodLinear:function(A){return new Lr(this.times,this.values,this.getValueSize(),A)},InterpolantFactoryMethodSmooth:void 0}),Or.prototype=Object.assign(Object.create(Rr.prototype),{constructor:Or,ValueTypeName:"string",ValueBufferType:Array,DefaultInterpolation:2300,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0}),Vr.prototype=Object.assign(Object.create(Rr.prototype),{constructor:Vr,ValueTypeName:"vector"}),Object.assign(Gr,{parse:function(A){for(var e=[],t=A.tracks,i=1/(A.fps||1),o=0,n=t.length;o!==n;++o)e.push(Pr(t[o]).scale(i));return new Gr(A.name,A.duration,e)},toJSON:function(A){for(var e=[],t=A.tracks,i={name:A.name,duration:A.duration,tracks:e,uuid:A.uuid},o=0,n=t.length;o!==n;++o)e.push(Rr.toJSON(t[o]));return i},CreateFromMorphTargetSequence:function(A,e,t,i){for(var o=e.length,n=[],r=0;o>r;r++){var a=[],s=[];a.push((r+o-1)%o,r,(r+1)%o),s.push(0,1,0);var l=br.getKeyframeOrder(a);a=br.sortedArray(a,1,l),s=br.sortedArray(s,1,l),i||0!==a[0]||(a.push(o),s.push(s[0])),n.push(new Dr(".morphTargetInfluences["+e[r].name+"]",a,s).scale(1/t))}return new Gr(A,-1,n)},findByName:function(A,e){var t=A;if(!Array.isArray(A)){t=A.geometry&&A.geometry.animations||A.animations}for(var i=0;t.length>i;i++)if(t[i].name===e)return t[i];return null},CreateClipsFromMorphTargetSequences:function(A,e,t){for(var i={},o=/^([\w-]*?)([\d]+)$/,n=0,r=A.length;r>n;n++){var a=A[n],s=a.name.match(o);if(s&&s.length>1){var l=i[h=s[1]];l||(i[h]=l=[]),l.push(a)}}var c=[];for(var h in i)c.push(Gr.CreateFromMorphTargetSequence(h,i[h],e,t));return c},parseAnimation:function(A,e){if(!A)return console.error("THREE.AnimationClip: No animation in JSONLoader data."),null;for(var t=function(A,e,t,i,o){if(0!==t.length){var n=[],r=[];br.flattenJSON(t,n,r,i),0!==n.length&&o.push(new A(e,n,r))}},i=[],o=A.name||"default",n=A.length||-1,r=A.fps||30,a=A.hierarchy||[],s=0;a.length>s;s++){var l=a[s].keys;if(l&&0!==l.length)if(l[0].morphTargets){for(var c={},h=0;l.length>h;h++)if(l[h].morphTargets)for(var d=0;l[h].morphTargets.length>d;d++)c[l[h].morphTargets[d]]=-1;for(var p in c){var g=[],u=[];for(d=0;d!==l[h].morphTargets.length;++d){var f=l[h];g.push(f.time),u.push(f.morphTarget===p?1:0)}i.push(new Dr(".morphTargetInfluence["+p+"]",g,u))}n=c.length*(r||1)}else{var m=".bones["+e[s].name+"]";t(Vr,m+".position",l,"pos",i),t(Nr,m+".quaternion",l,"rot",i),t(Vr,m+".scale",l,"scl",i)}}return 0===i.length?null:new Gr(o,n,i)}}),Object.assign(Gr.prototype,{resetDuration:function(){for(var A=0,e=0,t=this.tracks.length;e!==t;++e){var i=this.tracks[e];A=Math.max(A,i.times[i.times.length-1])}return this.duration=A,this},trim:function(){for(var A=0;this.tracks.length>A;A++)this.tracks[A].trim(0,this.duration);return this},validate:function(){for(var A=!0,e=0;this.tracks.length>e;e++)A=A&&this.tracks[e].validate();return A},optimize:function(){for(var A=0;this.tracks.length>A;A++)this.tracks[A].optimize();return this},clone:function(){for(var A=[],e=0;this.tracks.length>e;e++)A.push(this.tracks[e].clone());return new Gr(this.name,this.duration,A)}});var qr={enabled:!1,files:{},add:function(A,e){!1!==this.enabled&&(this.files[A]=e)},get:function(A){if(!1!==this.enabled)return this.files[A]},remove:function(A){delete this.files[A]},clear:function(){this.files={}}};function jr(A,e,t){var i=this,o=!1,n=0,r=0,a=void 0,s=[];this.onStart=void 0,this.onLoad=A,this.onProgress=e,this.onError=t,this.itemStart=function(A){r++,!1===o&&void 0!==i.onStart&&i.onStart(A,n,r),o=!0},this.itemEnd=function(A){n++,void 0!==i.onProgress&&i.onProgress(A,n,r),n===r&&(o=!1,void 0!==i.onLoad&&i.onLoad())},this.itemError=function(A){void 0!==i.onError&&i.onError(A)},this.resolveURL=function(A){return a?a(A):A},this.setURLModifier=function(A){return a=A,this},this.addHandler=function(A,e){return s.push(A,e),this},this.removeHandler=function(A){var e=s.indexOf(A);return-1!==e&&s.splice(e,2),this},this.getHandler=function(A){for(var e=0,t=s.length;t>e;e+=2){var i=s[e],o=s[e+1];if(i.global&&(i.lastIndex=0),i.test(A))return o}return null}}var Hr=new jr;function Yr(A){this.manager=void 0!==A?A:Hr,this.crossOrigin="anonymous",this.path="",this.resourcePath=""}Object.assign(Yr.prototype,{load:function(){},parse:function(){},setCrossOrigin:function(A){return this.crossOrigin=A,this},setPath:function(A){return this.path=A,this},setResourcePath:function(A){return this.resourcePath=A,this}});var Wr={};function Jr(A){Yr.call(this,A)}function zr(A){Yr.call(this,A)}function Zr(A){Yr.call(this,A)}function Xr(A){Yr.call(this,A)}function _r(A){Yr.call(this,A)}function $r(A){Yr.call(this,A)}function Aa(A){Yr.call(this,A)}function ea(){this.type="Curve",this.arcLengthDivisions=200}function ta(A,e,t,i,o,n,r,a){ea.call(this),this.type="EllipseCurve",this.aX=A||0,this.aY=e||0,this.xRadius=t||1,this.yRadius=i||1,this.aStartAngle=o||0,this.aEndAngle=n||2*Math.PI,this.aClockwise=r||!1,this.aRotation=a||0}function ia(A,e,t,i,o,n){ta.call(this,A,e,t,t,i,o,n),this.type="ArcCurve"}function oa(){var A=0,e=0,t=0,i=0;function o(o,n,r,a){A=o,e=r,t=-3*o+3*n-2*r-a,i=2*o-2*n+r+a}return{initCatmullRom:function(A,e,t,i,n){o(e,t,n*(t-A),n*(i-e))},initNonuniformCatmullRom:function(A,e,t,i,n,r,a){var s=(e-A)/n-(t-A)/(n+r)+(t-e)/r,l=(t-e)/r-(i-e)/(r+a)+(i-t)/a;o(e,t,s*=r,l*=r)},calc:function(o){var n=o*o;return A+e*o+t*n+i*(n*o)}}}Jr.prototype=Object.assign(Object.create(Yr.prototype),{constructor:Jr,load:function(A,e,t,i){void 0===A&&(A=""),void 0!==this.path&&(A=this.path+A),A=this.manager.resolveURL(A);var o=this,n=qr.get(A);if(void 0!==n)return o.manager.itemStart(A),setTimeout((function(){e&&e(n),o.manager.itemEnd(A)}),0),n;if(void 0===Wr[A]){var r=A.match(/^data:(.*?)(;base64)?,(.*)$/);if(r){var a=r[1],s=!!r[2],l=r[3];l=decodeURIComponent(l),s&&(l=atob(l));try{var c,h=(this.responseType||"").toLowerCase();switch(h){case"arraybuffer":case"blob":for(var d=new Uint8Array(l.length),p=0;l.length>p;p++)d[p]=l.charCodeAt(p);c="blob"===h?new Blob([d.buffer],{type:a}):d.buffer;break;case"document":var g=new DOMParser;c=g.parseFromString(l,a);break;case"json":c=JSON.parse(l);break;default:c=l}setTimeout((function(){e&&e(c),o.manager.itemEnd(A)}),0)}catch(e){setTimeout((function(){i&&i(e),o.manager.itemError(A),o.manager.itemEnd(A)}),0)}}else{Wr[A]=[],Wr[A].push({onLoad:e,onProgress:t,onError:i});var u=new XMLHttpRequest;for(var f in u.open("GET",A,!0),u.addEventListener("load",(function(e){var t=this.response,i=Wr[A];if(delete Wr[A],200===this.status||0===this.status){0===this.status&&console.warn("THREE.FileLoader: HTTP Status 0 received."),qr.add(A,t);for(var n=0,r=i.length;r>n;n++){(a=i[n]).onLoad&&a.onLoad(t)}o.manager.itemEnd(A)}else{for(n=0,r=i.length;r>n;n++){var a;(a=i[n]).onError&&a.onError(e)}o.manager.itemError(A),o.manager.itemEnd(A)}}),!1),u.addEventListener("progress",(function(e){for(var t=Wr[A],i=0,o=t.length;o>i;i++){var n=t[i];n.onProgress&&n.onProgress(e)}}),!1),u.addEventListener("error",(function(e){var t=Wr[A];delete Wr[A];for(var i=0,n=t.length;n>i;i++){var r=t[i];r.onError&&r.onError(e)}o.manager.itemError(A),o.manager.itemEnd(A)}),!1),u.addEventListener("abort",(function(e){var t=Wr[A];delete Wr[A];for(var i=0,n=t.length;n>i;i++){var r=t[i];r.onError&&r.onError(e)}o.manager.itemError(A),o.manager.itemEnd(A)}),!1),void 0!==this.responseType&&(u.responseType=this.responseType),void 0!==this.withCredentials&&(u.withCredentials=this.withCredentials),u.overrideMimeType&&u.overrideMimeType(void 0!==this.mimeType?this.mimeType:"text/plain"),this.requestHeader)u.setRequestHeader(f,this.requestHeader[f]);u.send(null)}return o.manager.itemStart(A),u}Wr[A].push({onLoad:e,onProgress:t,onError:i})},setResponseType:function(A){return this.responseType=A,this},setWithCredentials:function(A){return this.withCredentials=A,this},setMimeType:function(A){return this.mimeType=A,this},setRequestHeader:function(A){return this.requestHeader=A,this}}),zr.prototype=Object.assign(Object.create(Yr.prototype),{constructor:zr,load:function(A,e,t,i){var o=this,n=new Jr(o.manager);n.setPath(o.path),n.load(A,(function(A){e(o.parse(JSON.parse(A)))}),t,i)},parse:function(A){for(var e=[],t=0;A.length>t;t++){var i=Gr.parse(A[t]);e.push(i)}return e}}),Zr.prototype=Object.assign(Object.create(Yr.prototype),{constructor:Zr,load:function(A,e,t,i){var o=this,n=[],r=new An;r.image=n;var a=new Jr(this.manager);function s(s){a.load(A[s],(function(A){var t=o.parse(A,!0);n[s]={width:t.width,height:t.height,format:t.format,mipmaps:t.mipmaps},6===(l+=1)&&(1===t.mipmapCount&&(r.minFilter=1006),r.format=t.format,r.needsUpdate=!0,e&&e(r))}),t,i)}if(a.setPath(this.path),a.setResponseType("arraybuffer"),Array.isArray(A))for(var l=0,c=0,h=A.length;h>c;++c)s(c);else a.load(A,(function(A){var t=o.parse(A,!0);if(t.isCubemap)for(var i=t.mipmaps.length/t.mipmapCount,a=0;i>a;a++){n[a]={mipmaps:[]};for(var s=0;t.mipmapCount>s;s++)n[a].mipmaps.push(t.mipmaps[a*t.mipmapCount+s]),n[a].format=t.format,n[a].width=t.width,n[a].height=t.height}else r.image.width=t.width,r.image.height=t.height,r.mipmaps=t.mipmaps;1===t.mipmapCount&&(r.minFilter=1006),r.format=t.format,r.needsUpdate=!0,e&&e(r)}),t,i);return r}}),Xr.prototype=Object.assign(Object.create(Yr.prototype),{constructor:Xr,load:function(A,e,t,i){var o=this,n=new We,r=new Jr(this.manager);return r.setResponseType("arraybuffer"),r.setPath(this.path),r.load(A,(function(A){var t=o.parse(A);t&&(void 0!==t.image?n.image=t.image:void 0!==t.data&&(n.image.width=t.width,n.image.height=t.height,n.image.data=t.data),n.wrapS=void 0!==t.wrapS?t.wrapS:1001,n.wrapT=void 0!==t.wrapT?t.wrapT:1001,n.magFilter=void 0!==t.magFilter?t.magFilter:1006,n.minFilter=void 0!==t.minFilter?t.minFilter:1006,n.anisotropy=void 0!==t.anisotropy?t.anisotropy:1,void 0!==t.format&&(n.format=t.format),void 0!==t.type&&(n.type=t.type),void 0!==t.mipmaps&&(n.mipmaps=t.mipmaps,n.minFilter=1008),1===t.mipmapCount&&(n.minFilter=1006),n.needsUpdate=!0,e&&e(n,t))}),t,i),n}}),_r.prototype=Object.assign(Object.create(Yr.prototype),{constructor:_r,load:function(A,e,t,i){void 0!==this.path&&(A=this.path+A),A=this.manager.resolveURL(A);var o=this,n=qr.get(A);if(void 0!==n)return o.manager.itemStart(A),setTimeout((function(){e&&e(n),o.manager.itemEnd(A)}),0),n;var r=document.createElementNS("http://www.w3.org/1999/xhtml","img");function a(){r.removeEventListener("load",a,!1),r.removeEventListener("error",s,!1),qr.add(A,this),e&&e(this),o.manager.itemEnd(A)}function s(e){r.removeEventListener("load",a,!1),r.removeEventListener("error",s,!1),i&&i(e),o.manager.itemError(A),o.manager.itemEnd(A)}return r.addEventListener("load",a,!1),r.addEventListener("error",s,!1),"data:"!==A.substr(0,5)&&void 0!==this.crossOrigin&&(r.crossOrigin=this.crossOrigin),o.manager.itemStart(A),r.src=A,r}}),$r.prototype=Object.assign(Object.create(Yr.prototype),{constructor:$r,load:function(A,e,t,i){var o=new ut,n=new _r(this.manager);n.setCrossOrigin(this.crossOrigin),n.setPath(this.path);var r=0;function a(t){n.load(A[t],(function(A){o.images[t]=A,6===++r&&(o.needsUpdate=!0,e&&e(o))}),void 0,i)}for(var s=0;A.length>s;++s)a(s);return o}}),Aa.prototype=Object.assign(Object.create(Yr.prototype),{constructor:Aa,load:function(A,e,t,i){var o=new d,n=new _r(this.manager);return n.setCrossOrigin(this.crossOrigin),n.setPath(this.path),n.load(A,(function(t){o.image=t;var i=A.search(/\.jpe?g($|\?)/i)>0||0===A.search(/^data\:image\/jpeg/);o.format=i?1022:1023,o.needsUpdate=!0,void 0!==e&&e(o)}),t,i),o}}),Object.assign(ea.prototype,{getPoint:function(){return console.warn("THREE.Curve: .getPoint() not implemented."),null},getPointAt:function(A,e){var t=this.getUtoTmapping(A);return this.getPoint(t,e)},getPoints:function(A){void 0===A&&(A=5);for(var e=[],t=0;A>=t;t++)e.push(this.getPoint(t/A));return e},getSpacedPoints:function(A){void 0===A&&(A=5);for(var e=[],t=0;A>=t;t++)e.push(this.getPointAt(t/A));return e},getLength:function(){var A=this.getLengths();return A[A.length-1]},getLengths:function(A){if(void 0===A&&(A=this.arcLengthDivisions),this.cacheArcLengths&&this.cacheArcLengths.length===A+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;var e,t,i=[],o=this.getPoint(0),n=0;for(i.push(0),t=1;A>=t;t++)n+=(e=this.getPoint(t/A)).distanceTo(o),i.push(n),o=e;return this.cacheArcLengths=i,i},updateArcLengths:function(){this.needsUpdate=!0,this.getLengths()},getUtoTmapping:function(A,e){var t,i=this.getLengths(),o=0,n=i.length;t=e||A*i[n-1];for(var r,a=0,s=n-1;s>=a;)if(0>(r=i[o=Math.floor(a+(s-a)/2)]-t))a=o+1;else{if(0>=r){s=o;break}s=o-1}if(i[o=s]===t)return o/(n-1);var l=i[o];return(o+(t-l)/(i[o+1]-l))/(n-1)},getTangent:function(A){var e=A-1e-4,t=A+1e-4;0>e&&(e=0),t>1&&(t=1);var i=this.getPoint(e);return this.getPoint(t).clone().sub(i).normalize()},getTangentAt:function(A){var e=this.getUtoTmapping(A);return this.getTangent(e)},computeFrenetFrames:function(A,e){var t,i,o=new y,n=[],r=[],s=[],l=new y,c=new M;for(t=0;A>=t;t++)n[t]=this.getTangentAt(t/A),n[t].normalize();r[0]=new y,s[0]=new y;var h=Number.MAX_VALUE,d=Math.abs(n[0].x),p=Math.abs(n[0].y),g=Math.abs(n[0].z);for(d>h||(h=d,o.set(1,0,0)),p>h||(h=p,o.set(0,1,0)),g>h||o.set(0,0,1),l.crossVectors(n[0],o).normalize(),r[0].crossVectors(n[0],l),s[0].crossVectors(n[0],r[0]),t=1;A>=t;t++)r[t]=r[t-1].clone(),s[t]=s[t-1].clone(),l.crossVectors(n[t-1],n[t]),l.length()>Number.EPSILON&&(l.normalize(),i=Math.acos(a.clamp(n[t-1].dot(n[t]),-1,1)),r[t].applyMatrix4(c.makeRotationAxis(l,i))),s[t].crossVectors(n[t],r[t]);if(!0===e)for(i=Math.acos(a.clamp(r[0].dot(r[A]),-1,1)),i/=A,n[0].dot(l.crossVectors(r[0],r[A]))>0&&(i=-i),t=1;A>=t;t++)r[t].applyMatrix4(c.makeRotationAxis(n[t],i*t)),s[t].crossVectors(n[t],r[t]);return{tangents:n,normals:r,binormals:s}},clone:function(){return(new this.constructor).copy(this)},copy:function(A){return this.arcLengthDivisions=A.arcLengthDivisions,this},toJSON:function(){var A={metadata:{version:4.5,type:"Curve",generator:"Curve.toJSON"}};return A.arcLengthDivisions=this.arcLengthDivisions,A.type=this.type,A},fromJSON:function(A){return this.arcLengthDivisions=A.arcLengthDivisions,this}}),(ta.prototype=Object.create(ea.prototype)).constructor=ta,ta.prototype.isEllipseCurve=!0,ta.prototype.getPoint=function(A,e){for(var t=e||new s,i=2*Math.PI,o=this.aEndAngle-this.aStartAngle,n=Math.abs(o)o;)o+=i;for(;o>i;)o-=i;Number.EPSILON>o&&(o=n?0:i),!0!==this.aClockwise||n||(o===i?o=-i:o-=i);var r=this.aStartAngle+A*o,a=this.aX+this.xRadius*Math.cos(r),l=this.aY+this.yRadius*Math.sin(r);if(0!==this.aRotation){var c=Math.cos(this.aRotation),h=Math.sin(this.aRotation),d=a-this.aX,p=l-this.aY;a=d*c-p*h+this.aX,l=d*h+p*c+this.aY}return t.set(a,l)},ta.prototype.copy=function(A){return ea.prototype.copy.call(this,A),this.aX=A.aX,this.aY=A.aY,this.xRadius=A.xRadius,this.yRadius=A.yRadius,this.aStartAngle=A.aStartAngle,this.aEndAngle=A.aEndAngle,this.aClockwise=A.aClockwise,this.aRotation=A.aRotation,this},ta.prototype.toJSON=function(){var A=ea.prototype.toJSON.call(this);return A.aX=this.aX,A.aY=this.aY,A.xRadius=this.xRadius,A.yRadius=this.yRadius,A.aStartAngle=this.aStartAngle,A.aEndAngle=this.aEndAngle,A.aClockwise=this.aClockwise,A.aRotation=this.aRotation,A},ta.prototype.fromJSON=function(A){return ea.prototype.fromJSON.call(this,A),this.aX=A.aX,this.aY=A.aY,this.xRadius=A.xRadius,this.yRadius=A.yRadius,this.aStartAngle=A.aStartAngle,this.aEndAngle=A.aEndAngle,this.aClockwise=A.aClockwise,this.aRotation=A.aRotation,this},(ia.prototype=Object.create(ta.prototype)).constructor=ia,ia.prototype.isArcCurve=!0;var na=new y,ra=new oa,aa=new oa,sa=new oa;function la(A,e,t,i){ea.call(this),this.type="CatmullRomCurve3",this.points=A||[],this.closed=e||!1,this.curveType=t||"centripetal",this.tension=i||.5}function ca(A,e,t,i,o){var n=.5*(i-e),r=.5*(o-t),a=A*A;return(2*t-2*i+n+r)*(A*a)+(-3*t+3*i-2*n-r)*a+n*A+t}function ha(A,e,t,i){return function(A,e){var t=1-A;return t*t*e}(A,e)+function(A,e){return 2*(1-A)*A*e}(A,t)+function(A,e){return A*A*e}(A,i)}function da(A,e,t,i,o){return function(A,e){var t=1-A;return t*t*t*e}(A,e)+function(A,e){var t=1-A;return 3*t*t*A*e}(A,t)+function(A,e){return 3*(1-A)*A*A*e}(A,i)+function(A,e){return A*A*A*e}(A,o)}function pa(A,e,t,i){ea.call(this),this.type="CubicBezierCurve",this.v0=A||new s,this.v1=e||new s,this.v2=t||new s,this.v3=i||new s}function ga(A,e,t,i){ea.call(this),this.type="CubicBezierCurve3",this.v0=A||new y,this.v1=e||new y,this.v2=t||new y,this.v3=i||new y}function ua(A,e){ea.call(this),this.type="LineCurve",this.v1=A||new s,this.v2=e||new s}function fa(A,e){ea.call(this),this.type="LineCurve3",this.v1=A||new y,this.v2=e||new y}function ma(A,e,t){ea.call(this),this.type="QuadraticBezierCurve",this.v0=A||new s,this.v1=e||new s,this.v2=t||new s}function Ca(A,e,t){ea.call(this),this.type="QuadraticBezierCurve3",this.v0=A||new y,this.v1=e||new y,this.v2=t||new y}function ya(A){ea.call(this),this.type="SplineCurve",this.points=A||[]}(la.prototype=Object.create(ea.prototype)).constructor=la,la.prototype.isCatmullRomCurve3=!0,la.prototype.getPoint=function(A,e){var t,i,o,n,r=e||new y,a=this.points,s=a.length,l=(s-(this.closed?0:1))*A,c=Math.floor(l),h=l-c;if(this.closed?c+=c>0?0:(Math.floor(Math.abs(c)/s)+1)*s:0===h&&c===s-1&&(c=s-2,h=1),this.closed||c>0?t=a[(c-1)%s]:(na.subVectors(a[0],a[1]).add(a[0]),t=na),i=a[c%s],o=a[(c+1)%s],this.closed||s>c+2?n=a[(c+2)%s]:(na.subVectors(a[s-1],a[s-2]).add(a[s-1]),n=na),"centripetal"===this.curveType||"chordal"===this.curveType){var d="chordal"===this.curveType?.5:.25,p=Math.pow(t.distanceToSquared(i),d),g=Math.pow(i.distanceToSquared(o),d),u=Math.pow(o.distanceToSquared(n),d);1e-4>g&&(g=1),1e-4>p&&(p=g),1e-4>u&&(u=g),ra.initNonuniformCatmullRom(t.x,i.x,o.x,n.x,p,g,u),aa.initNonuniformCatmullRom(t.y,i.y,o.y,n.y,p,g,u),sa.initNonuniformCatmullRom(t.z,i.z,o.z,n.z,p,g,u)}else"catmullrom"===this.curveType&&(ra.initCatmullRom(t.x,i.x,o.x,n.x,this.tension),aa.initCatmullRom(t.y,i.y,o.y,n.y,this.tension),sa.initCatmullRom(t.z,i.z,o.z,n.z,this.tension));return r.set(ra.calc(h),aa.calc(h),sa.calc(h)),r},la.prototype.copy=function(A){ea.prototype.copy.call(this,A),this.points=[];for(var e=0,t=A.points.length;t>e;e++){this.points.push(A.points[e].clone())}return this.closed=A.closed,this.curveType=A.curveType,this.tension=A.tension,this},la.prototype.toJSON=function(){var A=ea.prototype.toJSON.call(this);A.points=[];for(var e=0,t=this.points.length;t>e;e++){A.points.push(this.points[e].toArray())}return A.closed=this.closed,A.curveType=this.curveType,A.tension=this.tension,A},la.prototype.fromJSON=function(A){ea.prototype.fromJSON.call(this,A),this.points=[];for(var e=0,t=A.points.length;t>e;e++){var i=A.points[e];this.points.push((new y).fromArray(i))}return this.closed=A.closed,this.curveType=A.curveType,this.tension=A.tension,this},(pa.prototype=Object.create(ea.prototype)).constructor=pa,pa.prototype.isCubicBezierCurve=!0,pa.prototype.getPoint=function(A,e){var t=e||new s,i=this.v0,o=this.v1,n=this.v2,r=this.v3;return t.set(da(A,i.x,o.x,n.x,r.x),da(A,i.y,o.y,n.y,r.y)),t},pa.prototype.copy=function(A){return ea.prototype.copy.call(this,A),this.v0.copy(A.v0),this.v1.copy(A.v1),this.v2.copy(A.v2),this.v3.copy(A.v3),this},pa.prototype.toJSON=function(){var A=ea.prototype.toJSON.call(this);return A.v0=this.v0.toArray(),A.v1=this.v1.toArray(),A.v2=this.v2.toArray(),A.v3=this.v3.toArray(),A},pa.prototype.fromJSON=function(A){return ea.prototype.fromJSON.call(this,A),this.v0.fromArray(A.v0),this.v1.fromArray(A.v1),this.v2.fromArray(A.v2),this.v3.fromArray(A.v3),this},(ga.prototype=Object.create(ea.prototype)).constructor=ga,ga.prototype.isCubicBezierCurve3=!0,ga.prototype.getPoint=function(A,e){var t=e||new y,i=this.v0,o=this.v1,n=this.v2,r=this.v3;return t.set(da(A,i.x,o.x,n.x,r.x),da(A,i.y,o.y,n.y,r.y),da(A,i.z,o.z,n.z,r.z)),t},ga.prototype.copy=function(A){return ea.prototype.copy.call(this,A),this.v0.copy(A.v0),this.v1.copy(A.v1),this.v2.copy(A.v2),this.v3.copy(A.v3),this},ga.prototype.toJSON=function(){var A=ea.prototype.toJSON.call(this);return A.v0=this.v0.toArray(),A.v1=this.v1.toArray(),A.v2=this.v2.toArray(),A.v3=this.v3.toArray(),A},ga.prototype.fromJSON=function(A){return ea.prototype.fromJSON.call(this,A),this.v0.fromArray(A.v0),this.v1.fromArray(A.v1),this.v2.fromArray(A.v2),this.v3.fromArray(A.v3),this},(ua.prototype=Object.create(ea.prototype)).constructor=ua,ua.prototype.isLineCurve=!0,ua.prototype.getPoint=function(A,e){var t=e||new s;return 1===A?t.copy(this.v2):(t.copy(this.v2).sub(this.v1),t.multiplyScalar(A).add(this.v1)),t},ua.prototype.getPointAt=function(A,e){return this.getPoint(A,e)},ua.prototype.getTangent=function(){return this.v2.clone().sub(this.v1).normalize()},ua.prototype.copy=function(A){return ea.prototype.copy.call(this,A),this.v1.copy(A.v1),this.v2.copy(A.v2),this},ua.prototype.toJSON=function(){var A=ea.prototype.toJSON.call(this);return A.v1=this.v1.toArray(),A.v2=this.v2.toArray(),A},ua.prototype.fromJSON=function(A){return ea.prototype.fromJSON.call(this,A),this.v1.fromArray(A.v1),this.v2.fromArray(A.v2),this},(fa.prototype=Object.create(ea.prototype)).constructor=fa,fa.prototype.isLineCurve3=!0,fa.prototype.getPoint=function(A,e){var t=e||new y;return 1===A?t.copy(this.v2):(t.copy(this.v2).sub(this.v1),t.multiplyScalar(A).add(this.v1)),t},fa.prototype.getPointAt=function(A,e){return this.getPoint(A,e)},fa.prototype.copy=function(A){return ea.prototype.copy.call(this,A),this.v1.copy(A.v1),this.v2.copy(A.v2),this},fa.prototype.toJSON=function(){var A=ea.prototype.toJSON.call(this);return A.v1=this.v1.toArray(),A.v2=this.v2.toArray(),A},fa.prototype.fromJSON=function(A){return ea.prototype.fromJSON.call(this,A),this.v1.fromArray(A.v1),this.v2.fromArray(A.v2),this},(ma.prototype=Object.create(ea.prototype)).constructor=ma,ma.prototype.isQuadraticBezierCurve=!0,ma.prototype.getPoint=function(A,e){var t=e||new s,i=this.v0,o=this.v1,n=this.v2;return t.set(ha(A,i.x,o.x,n.x),ha(A,i.y,o.y,n.y)),t},ma.prototype.copy=function(A){return ea.prototype.copy.call(this,A),this.v0.copy(A.v0),this.v1.copy(A.v1),this.v2.copy(A.v2),this},ma.prototype.toJSON=function(){var A=ea.prototype.toJSON.call(this);return A.v0=this.v0.toArray(),A.v1=this.v1.toArray(),A.v2=this.v2.toArray(),A},ma.prototype.fromJSON=function(A){return ea.prototype.fromJSON.call(this,A),this.v0.fromArray(A.v0),this.v1.fromArray(A.v1),this.v2.fromArray(A.v2),this},(Ca.prototype=Object.create(ea.prototype)).constructor=Ca,Ca.prototype.isQuadraticBezierCurve3=!0,Ca.prototype.getPoint=function(A,e){var t=e||new y,i=this.v0,o=this.v1,n=this.v2;return t.set(ha(A,i.x,o.x,n.x),ha(A,i.y,o.y,n.y),ha(A,i.z,o.z,n.z)),t},Ca.prototype.copy=function(A){return ea.prototype.copy.call(this,A),this.v0.copy(A.v0),this.v1.copy(A.v1),this.v2.copy(A.v2),this},Ca.prototype.toJSON=function(){var A=ea.prototype.toJSON.call(this);return A.v0=this.v0.toArray(),A.v1=this.v1.toArray(),A.v2=this.v2.toArray(),A},Ca.prototype.fromJSON=function(A){return ea.prototype.fromJSON.call(this,A),this.v0.fromArray(A.v0),this.v1.fromArray(A.v1),this.v2.fromArray(A.v2),this},(ya.prototype=Object.create(ea.prototype)).constructor=ya,ya.prototype.isSplineCurve=!0,ya.prototype.getPoint=function(A,e){var t=e||new s,i=this.points,o=(i.length-1)*A,n=Math.floor(o),r=o-n,a=i[0===n?n:n-1],l=i[n],c=i[n>i.length-2?i.length-1:n+1],h=i[n>i.length-3?i.length-1:n+2];return t.set(ca(r,a.x,l.x,c.x,h.x),ca(r,a.y,l.y,c.y,h.y)),t},ya.prototype.copy=function(A){ea.prototype.copy.call(this,A),this.points=[];for(var e=0,t=A.points.length;t>e;e++){this.points.push(A.points[e].clone())}return this},ya.prototype.toJSON=function(){var A=ea.prototype.toJSON.call(this);A.points=[];for(var e=0,t=this.points.length;t>e;e++){A.points.push(this.points[e].toArray())}return A},ya.prototype.fromJSON=function(A){ea.prototype.fromJSON.call(this,A),this.points=[];for(var e=0,t=A.points.length;t>e;e++){var i=A.points[e];this.points.push((new s).fromArray(i))}return this};var va=Object.freeze({__proto__:null,ArcCurve:ia,CatmullRomCurve3:la,CubicBezierCurve:pa,CubicBezierCurve3:ga,EllipseCurve:ta,LineCurve:ua,LineCurve3:fa,QuadraticBezierCurve:ma,QuadraticBezierCurve3:Ca,SplineCurve:ya});function Ia(){ea.call(this),this.type="CurvePath",this.curves=[],this.autoClose=!1}function Ea(A){Ia.call(this),this.type="Path",this.currentPoint=new s,A&&this.setFromPoints(A)}function Ba(A){Ea.call(this,A),this.uuid=a.generateUUID(),this.type="Shape",this.holes=[]}function xa(A,e){H.call(this),this.type="Light",this.color=new LA(A),this.intensity=void 0!==e?e:1,this.receiveShadow=void 0}function Sa(A,e,t){xa.call(this,A,t),this.type="HemisphereLight",this.castShadow=void 0,this.position.copy(H.DefaultUp),this.updateMatrix(),this.groundColor=new LA(e)}function wa(A){this.camera=A,this.bias=0,this.radius=1,this.mapSize=new s(512,512),this.map=null,this.mapPass=null,this.matrix=new M,this._frustum=new Ze,this._frameExtents=new s(1,1),this._viewportCount=1,this._viewports=[new p(0,0,1,1)]}function Ma(){wa.call(this,new je(50,1,.5,500))}function ba(A,e,t,i,o,n){xa.call(this,A,e),this.type="SpotLight",this.position.copy(H.DefaultUp),this.updateMatrix(),this.target=new H,Object.defineProperty(this,"power",{get:function(){return this.intensity*Math.PI},set:function(A){this.intensity=A/Math.PI}}),this.distance=void 0!==t?t:0,this.angle=void 0!==i?i:Math.PI/3,this.penumbra=void 0!==o?o:0,this.decay=void 0!==n?n:1,this.shadow=new Ma}function Ua(){wa.call(this,new je(90,1,.5,500)),this._frameExtents=new s(4,2),this._viewportCount=6,this._viewports=[new p(2,1,1,1),new p(0,1,1,1),new p(3,1,1,1),new p(1,1,1,1),new p(3,0,1,1),new p(1,0,1,1)],this._cubeDirections=[new y(1,0,0),new y(-1,0,0),new y(0,0,1),new y(0,0,-1),new y(0,1,0),new y(0,-1,0)],this._cubeUps=[new y(0,1,0),new y(0,1,0),new y(0,1,0),new y(0,1,0),new y(0,0,1),new y(0,0,-1)]}function Fa(A,e,t,i){xa.call(this,A,e),this.type="PointLight",Object.defineProperty(this,"power",{get:function(){return 4*this.intensity*Math.PI},set:function(A){this.intensity=A/(4*Math.PI)}}),this.distance=void 0!==t?t:0,this.decay=void 0!==i?i:1,this.shadow=new Ua}function Ka(A,e,t,i,o,n){qe.call(this),this.type="OrthographicCamera",this.zoom=1,this.view=null,this.left=void 0!==A?A:-1,this.right=void 0!==e?e:1,this.top=void 0!==t?t:1,this.bottom=void 0!==i?i:-1,this.near=void 0!==o?o:.1,this.far=void 0!==n?n:2e3,this.updateProjectionMatrix()}function Qa(){wa.call(this,new Ka(-5,5,5,-5,.5,500))}function Ra(A,e){xa.call(this,A,e),this.type="DirectionalLight",this.position.copy(H.DefaultUp),this.updateMatrix(),this.target=new H,this.shadow=new Qa}function Ta(A,e){xa.call(this,A,e),this.type="AmbientLight",this.castShadow=void 0}function ka(A,e,t,i){xa.call(this,A,e),this.type="RectAreaLight",this.width=void 0!==t?t:10,this.height=void 0!==i?i:10}function Da(A){Yr.call(this,A),this.textures={}}Ia.prototype=Object.assign(Object.create(ea.prototype),{constructor:Ia,add:function(A){this.curves.push(A)},closePath:function(){var A=this.curves[0].getPoint(0),e=this.curves[this.curves.length-1].getPoint(1);A.equals(e)||this.curves.push(new ua(e,A))},getPoint:function(A){for(var e=A*this.getLength(),t=this.getCurveLengths(),i=0;t.length>i;){if(t[i]>=e){var o=t[i]-e,n=this.curves[i],r=n.getLength();return n.getPointAt(0===r?0:1-o/r)}i++}return null},getLength:function(){var A=this.getCurveLengths();return A[A.length-1]},updateArcLengths:function(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()},getCurveLengths:function(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;for(var A=[],e=0,t=0,i=this.curves.length;i>t;t++)e+=this.curves[t].getLength(),A.push(e);return this.cacheLengths=A,A},getSpacedPoints:function(A){void 0===A&&(A=40);for(var e=[],t=0;A>=t;t++)e.push(this.getPoint(t/A));return this.autoClose&&e.push(e[0]),e},getPoints:function(A){A=A||12;for(var e,t=[],i=0,o=this.curves;o.length>i;i++)for(var n=o[i],r=n.getPoints(n&&n.isEllipseCurve?2*A:n&&(n.isLineCurve||n.isLineCurve3)?1:n&&n.isSplineCurve?A*n.points.length:A),a=0;r.length>a;a++){var s=r[a];e&&e.equals(s)||(t.push(s),e=s)}return this.autoClose&&t.length>1&&!t[t.length-1].equals(t[0])&&t.push(t[0]),t},copy:function(A){ea.prototype.copy.call(this,A),this.curves=[];for(var e=0,t=A.curves.length;t>e;e++){this.curves.push(A.curves[e].clone())}return this.autoClose=A.autoClose,this},toJSON:function(){var A=ea.prototype.toJSON.call(this);A.autoClose=this.autoClose,A.curves=[];for(var e=0,t=this.curves.length;t>e;e++){A.curves.push(this.curves[e].toJSON())}return A},fromJSON:function(A){ea.prototype.fromJSON.call(this,A),this.autoClose=A.autoClose,this.curves=[];for(var e=0,t=A.curves.length;t>e;e++){var i=A.curves[e];this.curves.push((new va[i.type]).fromJSON(i))}return this}}),Ea.prototype=Object.assign(Object.create(Ia.prototype),{constructor:Ea,setFromPoints:function(A){this.moveTo(A[0].x,A[0].y);for(var e=1,t=A.length;t>e;e++)this.lineTo(A[e].x,A[e].y);return this},moveTo:function(A,e){return this.currentPoint.set(A,e),this},lineTo:function(A,e){var t=new ua(this.currentPoint.clone(),new s(A,e));return this.curves.push(t),this.currentPoint.set(A,e),this},quadraticCurveTo:function(A,e,t,i){var o=new ma(this.currentPoint.clone(),new s(A,e),new s(t,i));return this.curves.push(o),this.currentPoint.set(t,i),this},bezierCurveTo:function(A,e,t,i,o,n){var r=new pa(this.currentPoint.clone(),new s(A,e),new s(t,i),new s(o,n));return this.curves.push(r),this.currentPoint.set(o,n),this},splineThru:function(A){var e=new ya([this.currentPoint.clone()].concat(A));return this.curves.push(e),this.currentPoint.copy(A[A.length-1]),this},arc:function(A,e,t,i,o,n){return this.absarc(A+this.currentPoint.x,e+this.currentPoint.y,t,i,o,n),this},absarc:function(A,e,t,i,o,n){return this.absellipse(A,e,t,t,i,o,n),this},ellipse:function(A,e,t,i,o,n,r,a){return this.absellipse(A+this.currentPoint.x,e+this.currentPoint.y,t,i,o,n,r,a),this},absellipse:function(A,e,t,i,o,n,r,a){var s=new ta(A,e,t,i,o,n,r,a);if(this.curves.length>0){var l=s.getPoint(0);l.equals(this.currentPoint)||this.lineTo(l.x,l.y)}this.curves.push(s);var c=s.getPoint(1);return this.currentPoint.copy(c),this},copy:function(A){return Ia.prototype.copy.call(this,A),this.currentPoint.copy(A.currentPoint),this},toJSON:function(){var A=Ia.prototype.toJSON.call(this);return A.currentPoint=this.currentPoint.toArray(),A},fromJSON:function(A){return Ia.prototype.fromJSON.call(this,A),this.currentPoint.fromArray(A.currentPoint),this}}),Ba.prototype=Object.assign(Object.create(Ea.prototype),{constructor:Ba,getPointsHoles:function(A){for(var e=[],t=0,i=this.holes.length;i>t;t++)e[t]=this.holes[t].getPoints(A);return e},extractPoints:function(A){return{shape:this.getPoints(A),holes:this.getPointsHoles(A)}},copy:function(A){Ea.prototype.copy.call(this,A),this.holes=[];for(var e=0,t=A.holes.length;t>e;e++){this.holes.push(A.holes[e].clone())}return this},toJSON:function(){var A=Ea.prototype.toJSON.call(this);A.uuid=this.uuid,A.holes=[];for(var e=0,t=this.holes.length;t>e;e++){A.holes.push(this.holes[e].toJSON())}return A},fromJSON:function(A){Ea.prototype.fromJSON.call(this,A),this.uuid=A.uuid,this.holes=[];for(var e=0,t=A.holes.length;t>e;e++){var i=A.holes[e];this.holes.push((new Ea).fromJSON(i))}return this}}),xa.prototype=Object.assign(Object.create(H.prototype),{constructor:xa,isLight:!0,copy:function(A){return H.prototype.copy.call(this,A),this.color.copy(A.color),this.intensity=A.intensity,this},toJSON:function(A){var e=H.prototype.toJSON.call(this,A);return e.object.color=this.color.getHex(),e.object.intensity=this.intensity,void 0!==this.groundColor&&(e.object.groundColor=this.groundColor.getHex()),void 0!==this.distance&&(e.object.distance=this.distance),void 0!==this.angle&&(e.object.angle=this.angle),void 0!==this.decay&&(e.object.decay=this.decay),void 0!==this.penumbra&&(e.object.penumbra=this.penumbra),void 0!==this.shadow&&(e.object.shadow=this.shadow.toJSON()),e}}),Sa.prototype=Object.assign(Object.create(xa.prototype),{constructor:Sa,isHemisphereLight:!0,copy:function(A){return xa.prototype.copy.call(this,A),this.groundColor.copy(A.groundColor),this}}),Object.assign(wa.prototype,{_projScreenMatrix:new M,_lightPositionWorld:new y,_lookTarget:new y,getViewportCount:function(){return this._viewportCount},getFrustum:function(){return this._frustum},updateMatrices:function(A){var e=this.camera,t=this.matrix,i=this._projScreenMatrix,o=this._lookTarget,n=this._lightPositionWorld;n.setFromMatrixPosition(A.matrixWorld),e.position.copy(n),o.setFromMatrixPosition(A.target.matrixWorld),e.lookAt(o),e.updateMatrixWorld(),i.multiplyMatrices(e.projectionMatrix,e.matrixWorldInverse),this._frustum.setFromProjectionMatrix(i),t.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),t.multiply(e.projectionMatrix),t.multiply(e.matrixWorldInverse)},getViewport:function(A){return this._viewports[A]},getFrameExtents:function(){return this._frameExtents},copy:function(A){return this.camera=A.camera.clone(),this.bias=A.bias,this.radius=A.radius,this.mapSize.copy(A.mapSize),this},clone:function(){return(new this.constructor).copy(this)},toJSON:function(){var A={};return 0!==this.bias&&(A.bias=this.bias),1!==this.radius&&(A.radius=this.radius),512===this.mapSize.x&&512===this.mapSize.y||(A.mapSize=this.mapSize.toArray()),A.camera=this.camera.toJSON(!1).object,delete A.camera.matrix,A}}),Ma.prototype=Object.assign(Object.create(wa.prototype),{constructor:Ma,isSpotLightShadow:!0,updateMatrices:function(A){var e=this.camera,t=2*a.RAD2DEG*A.angle,i=this.mapSize.width/this.mapSize.height,o=A.distance||e.far;t===e.fov&&i===e.aspect&&o===e.far||(e.fov=t,e.aspect=i,e.far=o,e.updateProjectionMatrix()),wa.prototype.updateMatrices.call(this,A)}}),ba.prototype=Object.assign(Object.create(xa.prototype),{constructor:ba,isSpotLight:!0,copy:function(A){return xa.prototype.copy.call(this,A),this.distance=A.distance,this.angle=A.angle,this.penumbra=A.penumbra,this.decay=A.decay,this.target=A.target.clone(),this.shadow=A.shadow.clone(),this}}),Ua.prototype=Object.assign(Object.create(wa.prototype),{constructor:Ua,isPointLightShadow:!0,updateMatrices:function(A,e){void 0===e&&(e=0);var t=this.camera,i=this.matrix,o=this._lightPositionWorld,n=this._lookTarget,r=this._projScreenMatrix;o.setFromMatrixPosition(A.matrixWorld),t.position.copy(o),n.copy(t.position),n.add(this._cubeDirections[e]),t.up.copy(this._cubeUps[e]),t.lookAt(n),t.updateMatrixWorld(),i.makeTranslation(-o.x,-o.y,-o.z),r.multiplyMatrices(t.projectionMatrix,t.matrixWorldInverse),this._frustum.setFromProjectionMatrix(r)}}),Fa.prototype=Object.assign(Object.create(xa.prototype),{constructor:Fa,isPointLight:!0,copy:function(A){return xa.prototype.copy.call(this,A),this.distance=A.distance,this.decay=A.decay,this.shadow=A.shadow.clone(),this}}),Ka.prototype=Object.assign(Object.create(qe.prototype),{constructor:Ka,isOrthographicCamera:!0,copy:function(A,e){return qe.prototype.copy.call(this,A,e),this.left=A.left,this.right=A.right,this.top=A.top,this.bottom=A.bottom,this.near=A.near,this.far=A.far,this.zoom=A.zoom,this.view=null===A.view?null:Object.assign({},A.view),this},setViewOffset:function(A,e,t,i,o,n){null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=A,this.view.fullHeight=e,this.view.offsetX=t,this.view.offsetY=i,this.view.width=o,this.view.height=n,this.updateProjectionMatrix()},clearViewOffset:function(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()},updateProjectionMatrix:function(){var A=(this.right-this.left)/(2*this.zoom),e=(this.top-this.bottom)/(2*this.zoom),t=(this.right+this.left)/2,i=(this.top+this.bottom)/2,o=t-A,n=t+A,r=i+e,a=i-e;if(null!==this.view&&this.view.enabled){var s=(this.right-this.left)/this.view.fullWidth/this.zoom,l=(this.top-this.bottom)/this.view.fullHeight/this.zoom;n=(o+=s*this.view.offsetX)+s*this.view.width,a=(r-=l*this.view.offsetY)-l*this.view.height}this.projectionMatrix.makeOrthographic(o,n,r,a,this.near,this.far),this.projectionMatrixInverse.getInverse(this.projectionMatrix)},toJSON:function(A){var e=H.prototype.toJSON.call(this,A);return e.object.zoom=this.zoom,e.object.left=this.left,e.object.right=this.right,e.object.top=this.top,e.object.bottom=this.bottom,e.object.near=this.near,e.object.far=this.far,null!==this.view&&(e.object.view=Object.assign({},this.view)),e}}),Qa.prototype=Object.assign(Object.create(wa.prototype),{constructor:Qa,isDirectionalLightShadow:!0,updateMatrices:function(A){wa.prototype.updateMatrices.call(this,A)}}),Ra.prototype=Object.assign(Object.create(xa.prototype),{constructor:Ra,isDirectionalLight:!0,copy:function(A){return xa.prototype.copy.call(this,A),this.target=A.target.clone(),this.shadow=A.shadow.clone(),this}}),Ta.prototype=Object.assign(Object.create(xa.prototype),{constructor:Ta,isAmbientLight:!0}),ka.prototype=Object.assign(Object.create(xa.prototype),{constructor:ka,isRectAreaLight:!0,copy:function(A){return xa.prototype.copy.call(this,A),this.width=A.width,this.height=A.height,this},toJSON:function(A){var e=xa.prototype.toJSON.call(this,A);return e.object.width=this.width,e.object.height=this.height,e}}),Da.prototype=Object.assign(Object.create(Yr.prototype),{constructor:Da,load:function(A,e,t,i){var o=this,n=new Jr(o.manager);n.setPath(o.path),n.load(A,(function(A){e(o.parse(JSON.parse(A)))}),t,i)},parse:function(A){var e=this.textures;function t(A){return void 0===e[A]&&console.warn("THREE.MaterialLoader: Undefined texture",A),e[A]}var i=new Mr[A.type];if(void 0!==A.uuid&&(i.uuid=A.uuid),void 0!==A.name&&(i.name=A.name),void 0!==A.color&&i.color.setHex(A.color),void 0!==A.roughness&&(i.roughness=A.roughness),void 0!==A.metalness&&(i.metalness=A.metalness),void 0!==A.sheen&&(i.sheen=(new LA).setHex(A.sheen)),void 0!==A.emissive&&i.emissive.setHex(A.emissive),void 0!==A.specular&&i.specular.setHex(A.specular),void 0!==A.shininess&&(i.shininess=A.shininess),void 0!==A.clearcoat&&(i.clearcoat=A.clearcoat),void 0!==A.clearcoatRoughness&&(i.clearcoatRoughness=A.clearcoatRoughness),void 0!==A.fog&&(i.fog=A.fog),void 0!==A.flatShading&&(i.flatShading=A.flatShading),void 0!==A.blending&&(i.blending=A.blending),void 0!==A.combine&&(i.combine=A.combine),void 0!==A.side&&(i.side=A.side),void 0!==A.opacity&&(i.opacity=A.opacity),void 0!==A.transparent&&(i.transparent=A.transparent),void 0!==A.alphaTest&&(i.alphaTest=A.alphaTest),void 0!==A.depthTest&&(i.depthTest=A.depthTest),void 0!==A.depthWrite&&(i.depthWrite=A.depthWrite),void 0!==A.colorWrite&&(i.colorWrite=A.colorWrite),void 0!==A.stencilWrite&&(i.stencilWrite=A.stencilWrite),void 0!==A.stencilWriteMask&&(i.stencilWriteMask=A.stencilWriteMask),void 0!==A.stencilFunc&&(i.stencilFunc=A.stencilFunc),void 0!==A.stencilRef&&(i.stencilRef=A.stencilRef),void 0!==A.stencilFuncMask&&(i.stencilFuncMask=A.stencilFuncMask),void 0!==A.stencilFail&&(i.stencilFail=A.stencilFail),void 0!==A.stencilZFail&&(i.stencilZFail=A.stencilZFail),void 0!==A.stencilZPass&&(i.stencilZPass=A.stencilZPass),void 0!==A.wireframe&&(i.wireframe=A.wireframe),void 0!==A.wireframeLinewidth&&(i.wireframeLinewidth=A.wireframeLinewidth),void 0!==A.wireframeLinecap&&(i.wireframeLinecap=A.wireframeLinecap),void 0!==A.wireframeLinejoin&&(i.wireframeLinejoin=A.wireframeLinejoin),void 0!==A.rotation&&(i.rotation=A.rotation),1!==A.linewidth&&(i.linewidth=A.linewidth),void 0!==A.dashSize&&(i.dashSize=A.dashSize),void 0!==A.gapSize&&(i.gapSize=A.gapSize),void 0!==A.scale&&(i.scale=A.scale),void 0!==A.polygonOffset&&(i.polygonOffset=A.polygonOffset),void 0!==A.polygonOffsetFactor&&(i.polygonOffsetFactor=A.polygonOffsetFactor),void 0!==A.polygonOffsetUnits&&(i.polygonOffsetUnits=A.polygonOffsetUnits),void 0!==A.skinning&&(i.skinning=A.skinning),void 0!==A.morphTargets&&(i.morphTargets=A.morphTargets),void 0!==A.morphNormals&&(i.morphNormals=A.morphNormals),void 0!==A.dithering&&(i.dithering=A.dithering),void 0!==A.vertexTangents&&(i.vertexTangents=A.vertexTangents),void 0!==A.visible&&(i.visible=A.visible),void 0!==A.toneMapped&&(i.toneMapped=A.toneMapped),void 0!==A.userData&&(i.userData=A.userData),void 0!==A.vertexColors&&(i.vertexColors="number"==typeof A.vertexColors?A.vertexColors>0:A.vertexColors),void 0!==A.uniforms)for(var o in A.uniforms){var n=A.uniforms[o];switch(i.uniforms[o]={},n.type){case"t":i.uniforms[o].value=t(n.value);break;case"c":i.uniforms[o].value=(new LA).setHex(n.value);break;case"v2":i.uniforms[o].value=(new s).fromArray(n.value);break;case"v3":i.uniforms[o].value=(new y).fromArray(n.value);break;case"v4":i.uniforms[o].value=(new p).fromArray(n.value);break;case"m3":i.uniforms[o].value=(new l).fromArray(n.value);case"m4":i.uniforms[o].value=(new M).fromArray(n.value);break;default:i.uniforms[o].value=n.value}}if(void 0!==A.defines&&(i.defines=A.defines),void 0!==A.vertexShader&&(i.vertexShader=A.vertexShader),void 0!==A.fragmentShader&&(i.fragmentShader=A.fragmentShader),void 0!==A.extensions)for(var r in A.extensions)i.extensions[r]=A.extensions[r];if(void 0!==A.shading&&(i.flatShading=1===A.shading),void 0!==A.size&&(i.size=A.size),void 0!==A.sizeAttenuation&&(i.sizeAttenuation=A.sizeAttenuation),void 0!==A.map&&(i.map=t(A.map)),void 0!==A.matcap&&(i.matcap=t(A.matcap)),void 0!==A.alphaMap&&(i.alphaMap=t(A.alphaMap)),void 0!==A.bumpMap&&(i.bumpMap=t(A.bumpMap)),void 0!==A.bumpScale&&(i.bumpScale=A.bumpScale),void 0!==A.normalMap&&(i.normalMap=t(A.normalMap)),void 0!==A.normalMapType&&(i.normalMapType=A.normalMapType),void 0!==A.normalScale){var a=A.normalScale;!1===Array.isArray(a)&&(a=[a,a]),i.normalScale=(new s).fromArray(a)}return void 0!==A.displacementMap&&(i.displacementMap=t(A.displacementMap)),void 0!==A.displacementScale&&(i.displacementScale=A.displacementScale),void 0!==A.displacementBias&&(i.displacementBias=A.displacementBias),void 0!==A.roughnessMap&&(i.roughnessMap=t(A.roughnessMap)),void 0!==A.metalnessMap&&(i.metalnessMap=t(A.metalnessMap)),void 0!==A.emissiveMap&&(i.emissiveMap=t(A.emissiveMap)),void 0!==A.emissiveIntensity&&(i.emissiveIntensity=A.emissiveIntensity),void 0!==A.specularMap&&(i.specularMap=t(A.specularMap)),void 0!==A.envMap&&(i.envMap=t(A.envMap)),void 0!==A.envMapIntensity&&(i.envMapIntensity=A.envMapIntensity),void 0!==A.reflectivity&&(i.reflectivity=A.reflectivity),void 0!==A.refractionRatio&&(i.refractionRatio=A.refractionRatio),void 0!==A.lightMap&&(i.lightMap=t(A.lightMap)),void 0!==A.lightMapIntensity&&(i.lightMapIntensity=A.lightMapIntensity),void 0!==A.aoMap&&(i.aoMap=t(A.aoMap)),void 0!==A.aoMapIntensity&&(i.aoMapIntensity=A.aoMapIntensity),void 0!==A.gradientMap&&(i.gradientMap=t(A.gradientMap)),void 0!==A.clearcoatMap&&(i.clearcoatMap=t(A.clearcoatMap)),void 0!==A.clearcoatRoughnessMap&&(i.clearcoatRoughnessMap=t(A.clearcoatRoughnessMap)),void 0!==A.clearcoatNormalMap&&(i.clearcoatNormalMap=t(A.clearcoatNormalMap)),void 0!==A.clearcoatNormalScale&&(i.clearcoatNormalScale=(new s).fromArray(A.clearcoatNormalScale)),i},setTextures:function(A){return this.textures=A,this}});var La={decodeText:function(A){if("undefined"!=typeof TextDecoder)return(new TextDecoder).decode(A);for(var e="",t=0,i=A.length;i>t;t++)e+=String.fromCharCode(A[t]);try{return decodeURIComponent(escape(e))}catch(A){return e}},extractUrlBase:function(A){var e=A.lastIndexOf("/");return-1===e?"./":A.substr(0,e+1)}};function Na(){he.call(this),this.type="InstancedBufferGeometry",this.maxInstancedCount=void 0}function Oa(A,e,t,i){"number"==typeof t&&(i=t,t=!1,console.error("THREE.InstancedBufferAttribute: The constructor now expects normalized as the third argument.")),YA.call(this,A,e,t),this.meshPerAttribute=i||1}function Va(A){Yr.call(this,A)}Na.prototype=Object.assign(Object.create(he.prototype),{constructor:Na,isInstancedBufferGeometry:!0,copy:function(A){return he.prototype.copy.call(this,A),this.maxInstancedCount=A.maxInstancedCount,this},clone:function(){return(new this.constructor).copy(this)},toJSON:function(){var A=he.prototype.toJSON.call(this);return A.maxInstancedCount=this.maxInstancedCount,A.isInstancedBufferGeometry=!0,A}}),Oa.prototype=Object.assign(Object.create(YA.prototype),{constructor:Oa,isInstancedBufferAttribute:!0,copy:function(A){return YA.prototype.copy.call(this,A),this.meshPerAttribute=A.meshPerAttribute,this},toJSON:function(){var A=YA.prototype.toJSON.call(this);return A.meshPerAttribute=this.meshPerAttribute,A.isInstancedBufferAttribute=!0,A}}),Va.prototype=Object.assign(Object.create(Yr.prototype),{constructor:Va,load:function(A,e,t,i){var o=this,n=new Jr(o.manager);n.setPath(o.path),n.load(A,(function(A){e(o.parse(JSON.parse(A)))}),t,i)},parse:function(A){var e=A.isInstancedBufferGeometry?new Na:new he,t=A.data.index;if(void 0!==t){var i=new Ga[t.type](t.array);e.setIndex(new YA(i,1))}var o=A.data.attributes;for(var n in o){i=new Ga[(d=o[n]).type](d.array);var r=new(d.isInstancedBufferAttribute?Oa:YA)(i,d.itemSize,d.normalized);void 0!==d.name&&(r.name=d.name),e.setAttribute(n,r)}var a=A.data.morphAttributes;if(a)for(var n in a){for(var s=a[n],l=[],c=0,h=s.length;h>c;c++){var d;r=new YA(i=new Ga[(d=s[c]).type](d.array),d.itemSize,d.normalized);void 0!==d.name&&(r.name=d.name),l.push(r)}e.morphAttributes[n]=l}A.data.morphTargetsRelative&&(e.morphTargetsRelative=!0);var p=A.data.groups||A.data.drawcalls||A.data.offsets;if(void 0!==p){c=0;for(var g=p.length;c!==g;++c){var u=p[c];e.addGroup(u.start,u.count,u.materialIndex)}}var f=A.data.boundingSphere;if(void 0!==f){var m=new y;void 0!==f.center&&m.fromArray(f.center),e.boundingSphere=new cA(m,f.radius)}return A.name&&(e.name=A.name),A.userData&&(e.userData=A.userData),e}});var Ga={Int8Array:Int8Array,Uint8Array:Uint8Array,Uint8ClampedArray:"undefined"!=typeof Uint8ClampedArray?Uint8ClampedArray:Uint8Array,Int16Array:Int16Array,Uint16Array:Uint16Array,Int32Array:Int32Array,Uint32Array:Uint32Array,Float32Array:Float32Array,Float64Array:Float64Array};function Pa(A){Yr.call(this,A)}Pa.prototype=Object.assign(Object.create(Yr.prototype),{constructor:Pa,load:function(A,e,t,i){var o=this,n=""===this.path?La.extractUrlBase(A):this.path;this.resourcePath=this.resourcePath||n;var r=new Jr(o.manager);r.setPath(this.path),r.load(A,(function(t){var n=null;try{n=JSON.parse(t)}catch(e){return void 0!==i&&i(e),void console.error("THREE:ObjectLoader: Can't parse "+A+".",e.message)}var r=n.metadata;void 0!==r&&void 0!==r.type&&"geometry"!==r.type.toLowerCase()?o.parse(n,e):console.error("THREE.ObjectLoader: Can't load "+A)}),t,i)},parse:function(A,e){var t=this.parseShape(A.shapes),i=this.parseGeometries(A.geometries,t),o=this.parseImages(A.images,(function(){void 0!==e&&e(a)})),n=this.parseTextures(A.textures,o),r=this.parseMaterials(A.materials,n),a=this.parseObject(A.object,i,r);return A.animations&&(a.animations=this.parseAnimations(A.animations)),void 0!==A.images&&0!==A.images.length||void 0!==e&&e(a),a},parseShape:function(A){var e={};if(void 0!==A)for(var t=0,i=A.length;i>t;t++){var o=(new Ba).fromJSON(A[t]);e[o.uuid]=o}return e},parseGeometries:function(A,e){var t={};if(void 0!==A)for(var i=new Va,o=0,n=A.length;n>o;o++){var r,a=A[o];switch(a.type){case"PlaneGeometry":case"PlaneBufferGeometry":r=new fr[a.type](a.width,a.height,a.widthSegments,a.heightSegments);break;case"BoxGeometry":case"BoxBufferGeometry":case"CubeGeometry":r=new fr[a.type](a.width,a.height,a.depth,a.widthSegments,a.heightSegments,a.depthSegments);break;case"CircleGeometry":case"CircleBufferGeometry":r=new fr[a.type](a.radius,a.segments,a.thetaStart,a.thetaLength);break;case"CylinderGeometry":case"CylinderBufferGeometry":r=new fr[a.type](a.radiusTop,a.radiusBottom,a.height,a.radialSegments,a.heightSegments,a.openEnded,a.thetaStart,a.thetaLength);break;case"ConeGeometry":case"ConeBufferGeometry":r=new fr[a.type](a.radius,a.height,a.radialSegments,a.heightSegments,a.openEnded,a.thetaStart,a.thetaLength);break;case"SphereGeometry":case"SphereBufferGeometry":r=new fr[a.type](a.radius,a.widthSegments,a.heightSegments,a.phiStart,a.phiLength,a.thetaStart,a.thetaLength);break;case"DodecahedronGeometry":case"DodecahedronBufferGeometry":case"IcosahedronGeometry":case"IcosahedronBufferGeometry":case"OctahedronGeometry":case"OctahedronBufferGeometry":case"TetrahedronGeometry":case"TetrahedronBufferGeometry":r=new fr[a.type](a.radius,a.detail);break;case"RingGeometry":case"RingBufferGeometry":r=new fr[a.type](a.innerRadius,a.outerRadius,a.thetaSegments,a.phiSegments,a.thetaStart,a.thetaLength);break;case"TorusGeometry":case"TorusBufferGeometry":r=new fr[a.type](a.radius,a.tube,a.radialSegments,a.tubularSegments,a.arc);break;case"TorusKnotGeometry":case"TorusKnotBufferGeometry":r=new fr[a.type](a.radius,a.tube,a.tubularSegments,a.radialSegments,a.p,a.q);break;case"TubeGeometry":case"TubeBufferGeometry":r=new fr[a.type]((new va[a.path.type]).fromJSON(a.path),a.tubularSegments,a.radius,a.radialSegments,a.closed);break;case"LatheGeometry":case"LatheBufferGeometry":r=new fr[a.type](a.points,a.segments,a.phiStart,a.phiLength);break;case"PolyhedronGeometry":case"PolyhedronBufferGeometry":r=new fr[a.type](a.vertices,a.indices,a.radius,a.details);break;case"ShapeGeometry":case"ShapeBufferGeometry":for(var s=[],l=0,c=a.shapes.length;c>l;l++){s.push(e[a.shapes[l]])}r=new fr[a.type](s,a.curveSegments);break;case"ExtrudeGeometry":case"ExtrudeBufferGeometry":for(s=[],l=0,c=a.shapes.length;c>l;l++){s.push(e[a.shapes[l]])}var h=a.options.extrudePath;void 0!==h&&(a.options.extrudePath=(new va[h.type]).fromJSON(h)),r=new fr[a.type](s,a.options);break;case"BufferGeometry":case"InstancedBufferGeometry":r=i.parse(a);break;case"Geometry":console.error('THREE.ObjectLoader: Loading "Geometry" is not supported anymore.');break;default:console.warn('THREE.ObjectLoader: Unsupported geometry type "'+a.type+'"');continue}r.uuid=a.uuid,void 0!==a.name&&(r.name=a.name),!0===r.isBufferGeometry&&void 0!==a.userData&&(r.userData=a.userData),t[a.uuid]=r}return t},parseMaterials:function(A,e){var t={},i={};if(void 0!==A){var o=new Da;o.setTextures(e);for(var n=0,r=A.length;r>n;n++){var a=A[n];if("MultiMaterial"===a.type){for(var s=[],l=0;a.materials.length>l;l++){var c=a.materials[l];void 0===t[c.uuid]&&(t[c.uuid]=o.parse(c)),s.push(t[c.uuid])}i[a.uuid]=s}else void 0===t[a.uuid]&&(t[a.uuid]=o.parse(a)),i[a.uuid]=t[a.uuid]}}return i},parseAnimations:function(A){for(var e=[],t=0;A.length>t;t++){var i=A[t],o=Gr.parse(i);void 0!==i.uuid&&(o.uuid=i.uuid),e.push(o)}return e},parseImages:function(A,e){var t=this,i={};function o(A){return t.manager.itemStart(A),n.load(A,(function(){t.manager.itemEnd(A)}),void 0,(function(){t.manager.itemError(A),t.manager.itemEnd(A)}))}if(void 0!==A&&A.length>0){var n=new _r(new jr(e));n.setCrossOrigin(this.crossOrigin);for(var r=0,a=A.length;a>r;r++){var s=A[r],l=s.url;if(Array.isArray(l)){i[s.uuid]=[];for(var c=0,h=l.length;h>c;c++){var d=l[c],p=/^(\/\/)|([a-z]+:(\/\/)?)/i.test(d)?d:t.resourcePath+d;i[s.uuid].push(o(p))}}else{p=/^(\/\/)|([a-z]+:(\/\/)?)/i.test(s.url)?s.url:t.resourcePath+s.url;i[s.uuid]=o(p)}}}return i},parseTextures:function(A,e){function t(A,e){return"number"==typeof A?A:(console.warn("THREE.ObjectLoader.parseTexture: Constant should be in numeric form.",A),e[A])}var i={};if(void 0!==A)for(var o=0,n=A.length;n>o;o++){var r,a=A[o];void 0===a.image&&console.warn('THREE.ObjectLoader: No "image" specified for',a.uuid),void 0===e[a.image]&&console.warn("THREE.ObjectLoader: Undefined image",a.image),(r=Array.isArray(e[a.image])?new ut(e[a.image]):new d(e[a.image])).needsUpdate=!0,r.uuid=a.uuid,void 0!==a.name&&(r.name=a.name),void 0!==a.mapping&&(r.mapping=t(a.mapping,ja)),void 0!==a.offset&&r.offset.fromArray(a.offset),void 0!==a.repeat&&r.repeat.fromArray(a.repeat),void 0!==a.center&&r.center.fromArray(a.center),void 0!==a.rotation&&(r.rotation=a.rotation),void 0!==a.wrap&&(r.wrapS=t(a.wrap[0],Ha),r.wrapT=t(a.wrap[1],Ha)),void 0!==a.format&&(r.format=a.format),void 0!==a.type&&(r.type=a.type),void 0!==a.encoding&&(r.encoding=a.encoding),void 0!==a.minFilter&&(r.minFilter=t(a.minFilter,Ya)),void 0!==a.magFilter&&(r.magFilter=t(a.magFilter,Ya)),void 0!==a.anisotropy&&(r.anisotropy=a.anisotropy),void 0!==a.flipY&&(r.flipY=a.flipY),void 0!==a.premultiplyAlpha&&(r.premultiplyAlpha=a.premultiplyAlpha),void 0!==a.unpackAlignment&&(r.unpackAlignment=a.unpackAlignment),i[a.uuid]=r}return i},parseObject:function(A,e,t){var i;function o(A){return void 0===e[A]&&console.warn("THREE.ObjectLoader: Undefined geometry",A),e[A]}function n(A){if(void 0!==A){if(Array.isArray(A)){for(var e=[],i=0,o=A.length;o>i;i++){var n=A[i];void 0===t[n]&&console.warn("THREE.ObjectLoader: Undefined material",n),e.push(t[n])}return e}return void 0===t[A]&&console.warn("THREE.ObjectLoader: Undefined material",A),t[A]}}switch(A.type){case"Scene":i=new Y,void 0!==A.background&&Number.isInteger(A.background)&&(i.background=new LA(A.background)),void 0!==A.fog&&("Fog"===A.fog.type?i.fog=new eo(A.fog.color,A.fog.near,A.fog.far):"FogExp2"===A.fog.type&&(i.fog=new Ao(A.fog.color,A.fog.density)));break;case"PerspectiveCamera":i=new je(A.fov,A.aspect,A.near,A.far),void 0!==A.focus&&(i.focus=A.focus),void 0!==A.zoom&&(i.zoom=A.zoom),void 0!==A.filmGauge&&(i.filmGauge=A.filmGauge),void 0!==A.filmOffset&&(i.filmOffset=A.filmOffset),void 0!==A.view&&(i.view=Object.assign({},A.view));break;case"OrthographicCamera":i=new Ka(A.left,A.right,A.top,A.bottom,A.near,A.far),void 0!==A.zoom&&(i.zoom=A.zoom),void 0!==A.view&&(i.view=Object.assign({},A.view));break;case"AmbientLight":i=new Ta(A.color,A.intensity);break;case"DirectionalLight":i=new Ra(A.color,A.intensity);break;case"PointLight":i=new Fa(A.color,A.intensity,A.distance,A.decay);break;case"RectAreaLight":i=new ka(A.color,A.intensity,A.width,A.height);break;case"SpotLight":i=new ba(A.color,A.intensity,A.distance,A.angle,A.penumbra,A.decay);break;case"HemisphereLight":i=new Sa(A.color,A.groundColor,A.intensity);break;case"SkinnedMesh":console.warn("THREE.ObjectLoader.parseObject() does not support SkinnedMesh yet.");case"Mesh":i=new Ue(r=o(A.geometry),a=n(A.material));break;case"InstancedMesh":var r=o(A.geometry),a=n(A.material),s=A.instanceMatrix;(i=new To(r,a,A.count)).instanceMatrix=new YA(new Float32Array(s.array),16);break;case"LOD":i=new xo;break;case"Line":i=new Go(o(A.geometry),n(A.material),A.mode);break;case"LineLoop":i=new Ho(o(A.geometry),n(A.material));break;case"LineSegments":i=new jo(o(A.geometry),n(A.material));break;case"PointCloud":case"Points":i=new Xo(o(A.geometry),n(A.material));break;case"Sprite":i=new vo(n(A.material));break;case"Group":i=new Xi;break;default:i=new H}if(i.uuid=A.uuid,void 0!==A.name&&(i.name=A.name),void 0!==A.matrix?(i.matrix.fromArray(A.matrix),void 0!==A.matrixAutoUpdate&&(i.matrixAutoUpdate=A.matrixAutoUpdate),i.matrixAutoUpdate&&i.matrix.decompose(i.position,i.quaternion,i.scale)):(void 0!==A.position&&i.position.fromArray(A.position),void 0!==A.rotation&&i.rotation.fromArray(A.rotation),void 0!==A.quaternion&&i.quaternion.fromArray(A.quaternion),void 0!==A.scale&&i.scale.fromArray(A.scale)),void 0!==A.castShadow&&(i.castShadow=A.castShadow),void 0!==A.receiveShadow&&(i.receiveShadow=A.receiveShadow),A.shadow&&(void 0!==A.shadow.bias&&(i.shadow.bias=A.shadow.bias),void 0!==A.shadow.radius&&(i.shadow.radius=A.shadow.radius),void 0!==A.shadow.mapSize&&i.shadow.mapSize.fromArray(A.shadow.mapSize),void 0!==A.shadow.camera&&(i.shadow.camera=this.parseObject(A.shadow.camera))),void 0!==A.visible&&(i.visible=A.visible),void 0!==A.frustumCulled&&(i.frustumCulled=A.frustumCulled),void 0!==A.renderOrder&&(i.renderOrder=A.renderOrder),void 0!==A.userData&&(i.userData=A.userData),void 0!==A.layers&&(i.layers.mask=A.layers),void 0!==A.children)for(var l=A.children,c=0;l.length>c;c++)i.add(this.parseObject(l[c],e,t));if("LOD"===A.type){void 0!==A.autoUpdate&&(i.autoUpdate=A.autoUpdate);for(var h=A.levels,d=0;h.length>d;d++){var p=h[d],g=i.getObjectByProperty("uuid",p.object);void 0!==g&&i.addLevel(g,p.distance)}}return i}});var qa,ja={UVMapping:300,CubeReflectionMapping:301,CubeRefractionMapping:302,EquirectangularReflectionMapping:303,EquirectangularRefractionMapping:304,SphericalReflectionMapping:305,CubeUVReflectionMapping:306,CubeUVRefractionMapping:307},Ha={RepeatWrapping:1e3,ClampToEdgeWrapping:1001,MirroredRepeatWrapping:1002},Ya={NearestFilter:1003,NearestMipmapNearestFilter:1004,NearestMipmapLinearFilter:1005,LinearFilter:1006,LinearMipmapNearestFilter:1007,LinearMipmapLinearFilter:1008};function Wa(A){"undefined"==typeof createImageBitmap&&console.warn("THREE.ImageBitmapLoader: createImageBitmap() not supported."),"undefined"==typeof fetch&&console.warn("THREE.ImageBitmapLoader: fetch() not supported."),Yr.call(this,A),this.options=void 0}function Ja(){this.type="ShapePath",this.color=new LA,this.subPaths=[],this.currentPath=null}function za(A){this.type="Font",this.data=A}function Za(A,e,t,i,o){var n=o.glyphs[A]||o.glyphs["?"];if(n){var r,a,s,l,c,h,d,p,g=new Ja;if(n.o)for(var u=n._cachedOutline||(n._cachedOutline=n.o.split(" ")),f=0,m=u.length;m>f;){switch(u[f++]){case"m":r=u[f++]*e+t,a=u[f++]*e+i,g.moveTo(r,a);break;case"l":r=u[f++]*e+t,a=u[f++]*e+i,g.lineTo(r,a);break;case"q":s=u[f++]*e+t,l=u[f++]*e+i,c=u[f++]*e+t,h=u[f++]*e+i,g.quadraticCurveTo(c,h,s,l);break;case"b":s=u[f++]*e+t,l=u[f++]*e+i,c=u[f++]*e+t,h=u[f++]*e+i,d=u[f++]*e+t,p=u[f++]*e+i,g.bezierCurveTo(c,h,d,p,s,l)}}return{offsetX:n.ha*e,path:g}}console.error('THREE.Font: character "'+A+'" does not exists in font family '+o.familyName+".")}function Xa(A){Yr.call(this,A)}Wa.prototype=Object.assign(Object.create(Yr.prototype),{constructor:Wa,setOptions:function(A){return this.options=A,this},load:function(A,e,t,i){void 0===A&&(A=""),void 0!==this.path&&(A=this.path+A),A=this.manager.resolveURL(A);var o=this,n=qr.get(A);if(void 0!==n)return o.manager.itemStart(A),setTimeout((function(){e&&e(n),o.manager.itemEnd(A)}),0),n;fetch(A).then((function(A){return A.blob()})).then((function(A){return void 0===o.options?createImageBitmap(A):createImageBitmap(A,o.options)})).then((function(t){qr.add(A,t),e&&e(t),o.manager.itemEnd(A)})).catch((function(e){i&&i(e),o.manager.itemError(A),o.manager.itemEnd(A)})),o.manager.itemStart(A)}}),Object.assign(Ja.prototype,{moveTo:function(A,e){return this.currentPath=new Ea,this.subPaths.push(this.currentPath),this.currentPath.moveTo(A,e),this},lineTo:function(A,e){return this.currentPath.lineTo(A,e),this},quadraticCurveTo:function(A,e,t,i){return this.currentPath.quadraticCurveTo(A,e,t,i),this},bezierCurveTo:function(A,e,t,i,o,n){return this.currentPath.bezierCurveTo(A,e,t,i,o,n),this},splineThru:function(A){return this.currentPath.splineThru(A),this},toShapes:function(A,e){function t(A){for(var e=[],t=0,i=A.length;i>t;t++){var o=A[t],n=new Ba;n.curves=o.curves,e.push(n)}return e}function i(A,e){for(var t=e.length,i=!1,o=t-1,n=0;t>n;o=n++){var r=e[o],a=e[n],s=a.x-r.x,l=a.y-r.y;if(Math.abs(l)>Number.EPSILON){if(0>l&&(r=e[n],s=-s,a=e[o],l=-l),r.y>A.y||A.y>a.y)continue;if(A.y===r.y){if(A.x===r.x)return!0}else{var c=l*(A.x-r.x)-s*(A.y-r.y);if(0===c)return!0;if(0>c)continue;i=!i}}else{if(A.y!==r.y)continue;if(A.x>=a.x&&r.x>=A.x||A.x>=r.x&&a.x>=A.x)return!0}}return i}var o=Hn.isClockWise,n=this.subPaths;if(0===n.length)return[];if(!0===e)return t(n);var r,a,s,l=[];if(1===n.length)return a=n[0],(s=new Ba).curves=a.curves,l.push(s),l;var c=!o(n[0].getPoints());c=A?!c:c;var h,d,p=[],g=[],u=[],f=0;g[f]=void 0,u[f]=[];for(var m=0,C=n.length;C>m;m++)r=o(h=(a=n[m]).getPoints()),(r=A?!r:r)?(!c&&g[f]&&f++,g[f]={s:new Ba,p:h},g[f].s.curves=a.curves,c&&f++,u[f]=[]):u[f].push({h:a,p:h[0]});if(!g[0])return t(n);if(g.length>1){for(var y=!1,v=[],I=0,E=g.length;E>I;I++)p[I]=[];for(I=0,E=g.length;E>I;I++)for(var B=u[I],x=0;B.length>x;x++){for(var S=B[x],w=!0,M=0;g.length>M;M++)i(S.p,g[M].p)&&(I!==M&&v.push({froms:I,tos:M,hole:x}),w?(w=!1,p[M].push(S)):y=!0);w&&p[I].push(S)}v.length>0&&(y||(u=p))}m=0;for(var b=g.length;b>m;m++){l.push(s=g[m].s);for(var U=0,F=(d=u[m]).length;F>U;U++)s.holes.push(d[U].h)}return l}}),Object.assign(za.prototype,{isFont:!0,generateShapes:function(A,e){void 0===e&&(e=100);for(var t=[],i=function(A,e,t){for(var i=Array.from?Array.from(A):String(A).split(""),o=e/t.resolution,n=(t.boundingBox.yMax-t.boundingBox.yMin+t.underlineThickness)*o,r=[],a=0,s=0,l=0;i.length>l;l++){var c=i[l];if("\n"===c)a=0,s-=n;else{var h=Za(c,o,a,s,t);a+=h.offsetX,r.push(h.path)}}return r}(A,e,this.data),o=0,n=i.length;n>o;o++)Array.prototype.push.apply(t,i[o].toShapes());return t}}),Xa.prototype=Object.assign(Object.create(Yr.prototype),{constructor:Xa,load:function(A,e,t,i){var o=this,n=new Jr(this.manager);n.setPath(this.path),n.load(A,(function(A){var t;try{t=JSON.parse(A)}catch(e){console.warn("THREE.FontLoader: typeface.js support is being deprecated. Use typeface.json instead."),t=JSON.parse(A.substring(65,A.length-2))}var i=o.parse(t);e&&e(i)}),t,i)},parse:function(A){return new za(A)}});var _a={getContext:function(){return void 0===qa&&(qa=new(window.AudioContext||window.webkitAudioContext)),qa},setContext:function(A){qa=A}};function $a(A){Yr.call(this,A)}function As(){this.coefficients=[];for(var A=0;9>A;A++)this.coefficients.push(new y)}function es(A,e){xa.call(this,void 0,e),this.sh=void 0!==A?A:new As}function ts(A,e,t){es.call(this,void 0,t);var i=(new LA).set(A),o=(new LA).set(e),n=new y(i.r,i.g,i.b),r=new y(o.r,o.g,o.b),a=Math.sqrt(Math.PI),s=a*Math.sqrt(.75);this.sh.coefficients[0].copy(n).add(r).multiplyScalar(a),this.sh.coefficients[1].copy(n).sub(r).multiplyScalar(s)}function is(A,e){es.call(this,void 0,e);var t=(new LA).set(A);this.sh.coefficients[0].set(t.r,t.g,t.b).multiplyScalar(2*Math.sqrt(Math.PI))}$a.prototype=Object.assign(Object.create(Yr.prototype),{constructor:$a,load:function(A,e,t,i){var o=new Jr(this.manager);o.setResponseType("arraybuffer"),o.setPath(this.path),o.load(A,(function(A){var t=A.slice(0);_a.getContext().decodeAudioData(t,(function(A){e(A)}))}),t,i)}}),Object.assign(As.prototype,{isSphericalHarmonics3:!0,set:function(A){for(var e=0;9>e;e++)this.coefficients[e].copy(A[e]);return this},zero:function(){for(var A=0;9>A;A++)this.coefficients[A].set(0,0,0);return this},getAt:function(A,e){var t=A.x,i=A.y,o=A.z,n=this.coefficients;return e.copy(n[0]).multiplyScalar(.282095),e.addScaledVector(n[1],.488603*i),e.addScaledVector(n[2],.488603*o),e.addScaledVector(n[3],.488603*t),e.addScaledVector(n[4],t*i*1.092548),e.addScaledVector(n[5],i*o*1.092548),e.addScaledVector(n[6],.315392*(3*o*o-1)),e.addScaledVector(n[7],t*o*1.092548),e.addScaledVector(n[8],.546274*(t*t-i*i)),e},getIrradianceAt:function(A,e){var t=A.x,i=A.y,o=A.z,n=this.coefficients;return e.copy(n[0]).multiplyScalar(.886227),e.addScaledVector(n[1],1.023328*i),e.addScaledVector(n[2],1.023328*o),e.addScaledVector(n[3],1.023328*t),e.addScaledVector(n[4],.858086*t*i),e.addScaledVector(n[5],.858086*i*o),e.addScaledVector(n[6],.743125*o*o-.247708),e.addScaledVector(n[7],.858086*t*o),e.addScaledVector(n[8],.429043*(t*t-i*i)),e},add:function(A){for(var e=0;9>e;e++)this.coefficients[e].add(A.coefficients[e]);return this},addScaledSH:function(A,e){for(var t=0;9>t;t++)this.coefficients[t].addScaledVector(A.coefficients[t],e);return this},scale:function(A){for(var e=0;9>e;e++)this.coefficients[e].multiplyScalar(A);return this},lerp:function(A,e){for(var t=0;9>t;t++)this.coefficients[t].lerp(A.coefficients[t],e);return this},equals:function(A){for(var e=0;9>e;e++)if(!this.coefficients[e].equals(A.coefficients[e]))return!1;return!0},copy:function(A){return this.set(A.coefficients)},clone:function(){return(new this.constructor).copy(this)},fromArray:function(A,e){void 0===e&&(e=0);for(var t=this.coefficients,i=0;9>i;i++)t[i].fromArray(A,e+3*i);return this},toArray:function(A,e){void 0===A&&(A=[]),void 0===e&&(e=0);for(var t=this.coefficients,i=0;9>i;i++)t[i].toArray(A,e+3*i);return A}}),Object.assign(As,{getBasisAt:function(A,e){var t=A.x,i=A.y,o=A.z;e[0]=.282095,e[1]=.488603*i,e[2]=.488603*o,e[3]=.488603*t,e[4]=1.092548*t*i,e[5]=1.092548*i*o,e[6]=.315392*(3*o*o-1),e[7]=1.092548*t*o,e[8]=.546274*(t*t-i*i)}}),es.prototype=Object.assign(Object.create(xa.prototype),{constructor:es,isLightProbe:!0,copy:function(A){return xa.prototype.copy.call(this,A),this.sh.copy(A.sh),this.intensity=A.intensity,this},toJSON:function(A){return xa.prototype.toJSON.call(this,A)}}),ts.prototype=Object.assign(Object.create(es.prototype),{constructor:ts,isHemisphereLightProbe:!0,copy:function(A){return es.prototype.copy.call(this,A),this},toJSON:function(A){return es.prototype.toJSON.call(this,A)}}),is.prototype=Object.assign(Object.create(es.prototype),{constructor:is,isAmbientLightProbe:!0,copy:function(A){return es.prototype.copy.call(this,A),this},toJSON:function(A){return es.prototype.toJSON.call(this,A)}});var os=new M,ns=new M;function rs(){this.type="StereoCamera",this.aspect=1,this.eyeSep=.064,this.cameraL=new je,this.cameraL.layers.enable(1),this.cameraL.matrixAutoUpdate=!1,this.cameraR=new je,this.cameraR.layers.enable(2),this.cameraR.matrixAutoUpdate=!1,this._cache={focus:null,fov:null,aspect:null,near:null,far:null,zoom:null,eyeSep:null}}function as(A){this.autoStart=void 0===A||A,this.startTime=0,this.oldTime=0,this.elapsedTime=0,this.running=!1}Object.assign(rs.prototype,{update:function(A){var e=this._cache;if(e.focus!==A.focus||e.fov!==A.fov||e.aspect!==A.aspect*this.aspect||e.near!==A.near||e.far!==A.far||e.zoom!==A.zoom||e.eyeSep!==this.eyeSep){e.focus=A.focus,e.fov=A.fov,e.aspect=A.aspect*this.aspect,e.near=A.near,e.far=A.far,e.zoom=A.zoom,e.eyeSep=this.eyeSep;var t,i,o=A.projectionMatrix.clone(),n=e.eyeSep/2,r=n*e.near/e.focus,s=e.near*Math.tan(a.DEG2RAD*e.fov*.5)/e.zoom;ns.elements[12]=-n,os.elements[12]=n,o.elements[0]=2*e.near/((i=s*e.aspect+r)-(t=-s*e.aspect+r)),o.elements[8]=(i+t)/(i-t),this.cameraL.projectionMatrix.copy(o),o.elements[0]=2*e.near/((i=s*e.aspect-r)-(t=-s*e.aspect-r)),o.elements[8]=(i+t)/(i-t),this.cameraR.projectionMatrix.copy(o)}this.cameraL.matrixWorld.copy(A.matrixWorld).multiply(ns),this.cameraR.matrixWorld.copy(A.matrixWorld).multiply(os)}}),Object.assign(as.prototype,{start:function(){this.startTime=("undefined"==typeof performance?Date:performance).now(),this.oldTime=this.startTime,this.elapsedTime=0,this.running=!0},stop:function(){this.getElapsedTime(),this.running=!1,this.autoStart=!1},getElapsedTime:function(){return this.getDelta(),this.elapsedTime},getDelta:function(){var A=0;if(this.autoStart&&!this.running)return this.start(),0;if(this.running){var e=("undefined"==typeof performance?Date:performance).now();A=(e-this.oldTime)/1e3,this.oldTime=e,this.elapsedTime+=A}return A}});var ss=new y,ls=new f,cs=new y,hs=new y;function ds(){H.call(this),this.type="AudioListener",this.context=_a.getContext(),this.gain=this.context.createGain(),this.gain.connect(this.context.destination),this.filter=null,this.timeDelta=0,this._clock=new as}function ps(A){H.call(this),this.type="Audio",this.listener=A,this.context=A.context,this.gain=this.context.createGain(),this.gain.connect(A.getInput()),this.autoplay=!1,this.buffer=null,this.detune=0,this.loop=!1,this.loopStart=0,this.loopEnd=0,this.offset=0,this.duration=void 0,this.playbackRate=1,this.isPlaying=!1,this.hasPlaybackControl=!0,this.sourceType="empty",this._startedAt=0,this._pausedAt=0,this.filters=[]}ds.prototype=Object.assign(Object.create(H.prototype),{constructor:ds,getInput:function(){return this.gain},removeFilter:function(){return null!==this.filter&&(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination),this.gain.connect(this.context.destination),this.filter=null),this},getFilter:function(){return this.filter},setFilter:function(A){return null!==this.filter?(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination)):this.gain.disconnect(this.context.destination),this.filter=A,this.gain.connect(this.filter),this.filter.connect(this.context.destination),this},getMasterVolume:function(){return this.gain.gain.value},setMasterVolume:function(A){return this.gain.gain.setTargetAtTime(A,this.context.currentTime,.01),this},updateMatrixWorld:function(A){H.prototype.updateMatrixWorld.call(this,A);var e=this.context.listener,t=this.up;if(this.timeDelta=this._clock.getDelta(),this.matrixWorld.decompose(ss,ls,cs),hs.set(0,0,-1).applyQuaternion(ls),e.positionX){var i=this.context.currentTime+this.timeDelta;e.positionX.linearRampToValueAtTime(ss.x,i),e.positionY.linearRampToValueAtTime(ss.y,i),e.positionZ.linearRampToValueAtTime(ss.z,i),e.forwardX.linearRampToValueAtTime(hs.x,i),e.forwardY.linearRampToValueAtTime(hs.y,i),e.forwardZ.linearRampToValueAtTime(hs.z,i),e.upX.linearRampToValueAtTime(t.x,i),e.upY.linearRampToValueAtTime(t.y,i),e.upZ.linearRampToValueAtTime(t.z,i)}else e.setPosition(ss.x,ss.y,ss.z),e.setOrientation(hs.x,hs.y,hs.z,t.x,t.y,t.z)}}),ps.prototype=Object.assign(Object.create(H.prototype),{constructor:ps,getOutput:function(){return this.gain},setNodeSource:function(A){return this.hasPlaybackControl=!1,this.sourceType="audioNode",this.source=A,this.connect(),this},setMediaElementSource:function(A){return this.hasPlaybackControl=!1,this.sourceType="mediaNode",this.source=this.context.createMediaElementSource(A),this.connect(),this},setMediaStreamSource:function(A){return this.hasPlaybackControl=!1,this.sourceType="mediaStreamNode",this.source=this.context.createMediaStreamSource(A),this.connect(),this},setBuffer:function(A){return this.buffer=A,this.sourceType="buffer",this.autoplay&&this.play(),this},play:function(A){if(void 0===A&&(A=0),!0!==this.isPlaying){if(!1!==this.hasPlaybackControl){this._startedAt=this.context.currentTime+A;var e=this.context.createBufferSource();return e.buffer=this.buffer,e.loop=this.loop,e.loopStart=this.loopStart,e.loopEnd=this.loopEnd,e.onended=this.onEnded.bind(this),e.start(this._startedAt,this._pausedAt+this.offset,this.duration),this.isPlaying=!0,this.source=e,this.setDetune(this.detune),this.setPlaybackRate(this.playbackRate),this.connect()}console.warn("THREE.Audio: this Audio has no playback control.")}else console.warn("THREE.Audio: Audio is already playing.")},pause:function(){if(!1!==this.hasPlaybackControl)return!0===this.isPlaying&&(this._pausedAt+=Math.max(this.context.currentTime-this._startedAt,0)*this.playbackRate,this.source.stop(),this.source.onended=null,this.isPlaying=!1),this;console.warn("THREE.Audio: this Audio has no playback control.")},stop:function(){if(!1!==this.hasPlaybackControl)return this._pausedAt=0,this.source.stop(),this.source.onended=null,this.isPlaying=!1,this;console.warn("THREE.Audio: this Audio has no playback control.")},connect:function(){if(this.filters.length>0){this.source.connect(this.filters[0]);for(var A=1,e=this.filters.length;e>A;A++)this.filters[A-1].connect(this.filters[A]);this.filters[this.filters.length-1].connect(this.getOutput())}else this.source.connect(this.getOutput());return this},disconnect:function(){if(this.filters.length>0){this.source.disconnect(this.filters[0]);for(var A=1,e=this.filters.length;e>A;A++)this.filters[A-1].disconnect(this.filters[A]);this.filters[this.filters.length-1].disconnect(this.getOutput())}else this.source.disconnect(this.getOutput());return this},getFilters:function(){return this.filters},setFilters:function(A){return A||(A=[]),!0===this.isPlaying?(this.disconnect(),this.filters=A,this.connect()):this.filters=A,this},setDetune:function(A){if(this.detune=A,void 0!==this.source.detune)return!0===this.isPlaying&&this.source.detune.setTargetAtTime(this.detune,this.context.currentTime,.01),this},getDetune:function(){return this.detune},getFilter:function(){return this.getFilters()[0]},setFilter:function(A){return this.setFilters(A?[A]:[])},setPlaybackRate:function(A){if(!1!==this.hasPlaybackControl)return this.playbackRate=A,!0===this.isPlaying&&this.source.playbackRate.setTargetAtTime(this.playbackRate,this.context.currentTime,.01),this;console.warn("THREE.Audio: this Audio has no playback control.")},getPlaybackRate:function(){return this.playbackRate},onEnded:function(){this.isPlaying=!1},getLoop:function(){return!1===this.hasPlaybackControl?(console.warn("THREE.Audio: this Audio has no playback control."),!1):this.loop},setLoop:function(A){if(!1!==this.hasPlaybackControl)return this.loop=A,!0===this.isPlaying&&(this.source.loop=this.loop),this;console.warn("THREE.Audio: this Audio has no playback control.")},setLoopStart:function(A){return this.loopStart=A,this},setLoopEnd:function(A){return this.loopEnd=A,this},getVolume:function(){return this.gain.gain.value},setVolume:function(A){return this.gain.gain.setTargetAtTime(A,this.context.currentTime,.01),this}});var gs=new y,us=new f,fs=new y,ms=new y;function Cs(A){ps.call(this,A),this.panner=this.context.createPanner(),this.panner.panningModel="HRTF",this.panner.connect(this.gain)}function ys(A,e){this.analyser=A.context.createAnalyser(),this.analyser.fftSize=void 0!==e?e:2048,this.data=new Uint8Array(this.analyser.frequencyBinCount),A.getOutput().connect(this.analyser)}function vs(A,e,t){this.binding=A,this.valueSize=t;var i,o=Float64Array;switch(e){case"quaternion":i=this._slerp;break;case"string":case"bool":o=Array,i=this._select;break;default:i=this._lerp}this.buffer=new o(4*t),this._mixBufferRegion=i,this.cumulativeWeight=0,this.useCount=0,this.referenceCount=0}Cs.prototype=Object.assign(Object.create(ps.prototype),{constructor:Cs,getOutput:function(){return this.panner},getRefDistance:function(){return this.panner.refDistance},setRefDistance:function(A){return this.panner.refDistance=A,this},getRolloffFactor:function(){return this.panner.rolloffFactor},setRolloffFactor:function(A){return this.panner.rolloffFactor=A,this},getDistanceModel:function(){return this.panner.distanceModel},setDistanceModel:function(A){return this.panner.distanceModel=A,this},getMaxDistance:function(){return this.panner.maxDistance},setMaxDistance:function(A){return this.panner.maxDistance=A,this},setDirectionalCone:function(A,e,t){return this.panner.coneInnerAngle=A,this.panner.coneOuterAngle=e,this.panner.coneOuterGain=t,this},updateMatrixWorld:function(A){if(H.prototype.updateMatrixWorld.call(this,A),!0!==this.hasPlaybackControl||!1!==this.isPlaying){this.matrixWorld.decompose(gs,us,fs),ms.set(0,0,1).applyQuaternion(us);var e=this.panner;if(e.positionX){var t=this.context.currentTime+this.listener.timeDelta;e.positionX.linearRampToValueAtTime(gs.x,t),e.positionY.linearRampToValueAtTime(gs.y,t),e.positionZ.linearRampToValueAtTime(gs.z,t),e.orientationX.linearRampToValueAtTime(ms.x,t),e.orientationY.linearRampToValueAtTime(ms.y,t),e.orientationZ.linearRampToValueAtTime(ms.z,t)}else e.setPosition(gs.x,gs.y,gs.z),e.setOrientation(ms.x,ms.y,ms.z)}}}),Object.assign(ys.prototype,{getFrequencyData:function(){return this.analyser.getByteFrequencyData(this.data),this.data},getAverageFrequency:function(){for(var A=0,e=this.getFrequencyData(),t=0;e.length>t;t++)A+=e[t];return A/e.length}}),Object.assign(vs.prototype,{accumulate:function(A,e){var t=this.buffer,i=this.valueSize,o=A*i+i,n=this.cumulativeWeight;if(0===n){for(var r=0;r!==i;++r)t[o+r]=t[r];n=e}else{this._mixBufferRegion(t,o,0,e/(n+=e),i)}this.cumulativeWeight=n},apply:function(A){var e=this.valueSize,t=this.buffer,i=A*e+e,o=this.cumulativeWeight,n=this.binding;(this.cumulativeWeight=0,1>o)&&this._mixBufferRegion(t,i,3*e,1-o,e);for(var r=e,a=e+e;r!==a;++r)if(t[r]!==t[r+e]){n.setValue(t,i);break}},saveOriginalState:function(){var A=this.buffer,e=this.valueSize,t=3*e;this.binding.getValue(A,t);for(var i=e,o=t;i!==o;++i)A[i]=A[t+i%e];this.cumulativeWeight=0},restoreOriginalState:function(){this.binding.setValue(this.buffer,3*this.valueSize)},_select:function(A,e,t,i,o){if(i>=.5)for(var n=0;n!==o;++n)A[e+n]=A[t+n]},_slerp:function(A,e,t,i){f.slerpFlat(A,e,A,e,A,t,i)},_lerp:function(A,e,t,i,o){for(var n=1-i,r=0;r!==o;++r){var a=e+r;A[a]=A[a]*n+A[t+r]*i}}});var Is=new RegExp("[\\[\\]\\.:\\/]","g"),Es="[^"+"\\[\\]\\.:\\/".replace("\\.","")+"]",Bs=/((?:WC+[\/:])*)/.source.replace("WC","[^\\[\\]\\.:\\/]"),xs=/(WCOD+)?/.source.replace("WCOD",Es),Ss=/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC","[^\\[\\]\\.:\\/]"),ws=/\.(WC+)(?:\[(.+)\])?/.source.replace("WC","[^\\[\\]\\.:\\/]"),Ms=new RegExp("^"+Bs+xs+Ss+ws+"$"),bs=["material","materials","bones"];function Us(A,e,t){var i=t||Fs.parseTrackName(e);this._targetGroup=A,this._bindings=A.subscribe_(e,i)}function Fs(A,e,t){this.path=e,this.parsedPath=t||Fs.parseTrackName(e),this.node=Fs.findNode(A,this.parsedPath.nodeName)||A,this.rootNode=A}function Ks(){this.uuid=a.generateUUID(),this._objects=Array.prototype.slice.call(arguments),this.nCachedObjects_=0;var A={};this._indicesByUUID=A;for(var e=0,t=arguments.length;e!==t;++e)A[arguments[e].uuid]=e;this._paths=[],this._parsedPaths=[],this._bindings=[],this._bindingsIndicesByPath={};var i=this;this.stats={objects:{get total(){return i._objects.length},get inUse(){return this.total-i.nCachedObjects_}},get bindingsPerObject(){return i._bindings.length}}}function Qs(A,e,t){this._mixer=A,this._clip=e,this._localRoot=t||null;for(var i=e.tracks,o=i.length,n=new Array(o),r={endingStart:2400,endingEnd:2400},a=0;a!==o;++a){var s=i[a].createInterpolant(null);n[a]=s,s.settings=r}this._interpolantSettings=r,this._interpolants=n,this._propertyBindings=new Array(o),this._cacheIndex=null,this._byClipCacheIndex=null,this._timeScaleInterpolant=null,this._weightInterpolant=null,this.loop=2201,this._loopCount=-1,this._startTime=null,this.time=0,this.timeScale=1,this._effectiveTimeScale=1,this.weight=1,this._effectiveWeight=1,this.repetitions=1/0,this.paused=!1,this.enabled=!0,this.clampWhenFinished=!1,this.zeroSlopeAtStart=!0,this.zeroSlopeAtEnd=!0}function Rs(A){this._root=A,this._initMemoryManager(),this._accuIndex=0,this.time=0,this.timeScale=1}function Ts(A){"string"==typeof A&&(console.warn("THREE.Uniform: Type parameter is no longer needed."),A=arguments[1]),this.value=A}function ks(A,e,t){to.call(this,A,e),this.meshPerAttribute=t||1}function Ds(A,e,t,i){this.ray=new CA(A,e),this.near=t||0,this.far=i||1/0,this.camera=null,this.layers=new K,this.params={Mesh:{},Line:{threshold:1},LOD:{},Points:{threshold:1},Sprite:{}},Object.defineProperties(this.params,{PointCloud:{get:function(){return console.warn("THREE.Raycaster: params.PointCloud has been renamed to params.Points."),this.Points}}})}function Ls(A,e){return A.distance-e.distance}function Ns(A,e,t,i){if(A.layers.test(e.layers)&&A.raycast(e,t),!0===i)for(var o=A.children,n=0,r=o.length;r>n;n++)Ns(o[n],e,t,!0)}function Os(A,e,t){return this.radius=void 0!==A?A:1,this.phi=void 0!==e?e:0,this.theta=void 0!==t?t:0,this}function Vs(A,e,t){return this.radius=void 0!==A?A:1,this.theta=void 0!==e?e:0,this.y=void 0!==t?t:0,this}Object.assign(Us.prototype,{getValue:function(A,e){this.bind();var t=this._bindings[this._targetGroup.nCachedObjects_];void 0!==t&&t.getValue(A,e)},setValue:function(A,e){for(var t=this._bindings,i=this._targetGroup.nCachedObjects_,o=t.length;i!==o;++i)t[i].setValue(A,e)},bind:function(){for(var A=this._bindings,e=this._targetGroup.nCachedObjects_,t=A.length;e!==t;++e)A[e].bind()},unbind:function(){for(var A=this._bindings,e=this._targetGroup.nCachedObjects_,t=A.length;e!==t;++e)A[e].unbind()}}),Object.assign(Fs,{Composite:Us,create:function(A,e,t){return A&&A.isAnimationObjectGroup?new Fs.Composite(A,e,t):new Fs(A,e,t)},sanitizeNodeName:function(A){return A.replace(/\s/g,"_").replace(Is,"")},parseTrackName:function(A){var e=Ms.exec(A);if(!e)throw new Error("PropertyBinding: Cannot parse trackName: "+A);var t={nodeName:e[2],objectName:e[3],objectIndex:e[4],propertyName:e[5],propertyIndex:e[6]},i=t.nodeName&&t.nodeName.lastIndexOf(".");if(void 0!==i&&-1!==i){var o=t.nodeName.substring(i+1);-1!==bs.indexOf(o)&&(t.nodeName=t.nodeName.substring(0,i),t.objectName=o)}if(null===t.propertyName||0===t.propertyName.length)throw new Error("PropertyBinding: can not parse propertyName from trackName: "+A);return t},findNode:function(A,e){if(!e||""===e||"."===e||-1===e||e===A.name||e===A.uuid)return A;if(A.skeleton){var t=A.skeleton.getBoneByName(e);if(void 0!==t)return t}if(A.children){var i=function(A){for(var t=0;A.length>t;t++){var o=A[t];if(o.name===e||o.uuid===e)return o;var n=i(o.children);if(n)return n}return null},o=i(A.children);if(o)return o}return null}}),Object.assign(Fs.prototype,{_getValue_unavailable:function(){},_setValue_unavailable:function(){},BindingType:{Direct:0,EntireArray:1,ArrayElement:2,HasFromToArray:3},Versioning:{None:0,NeedsUpdate:1,MatrixWorldNeedsUpdate:2},GetterByBindingType:[function(A,e){A[e]=this.node[this.propertyName]},function(A,e){for(var t=this.resolvedProperty,i=0,o=t.length;i!==o;++i)A[e++]=t[i]},function(A,e){A[e]=this.resolvedProperty[this.propertyIndex]},function(A,e){this.resolvedProperty.toArray(A,e)}],SetterByBindingTypeAndVersioning:[[function(A,e){this.targetObject[this.propertyName]=A[e]},function(A,e){this.targetObject[this.propertyName]=A[e],this.targetObject.needsUpdate=!0},function(A,e){this.targetObject[this.propertyName]=A[e],this.targetObject.matrixWorldNeedsUpdate=!0}],[function(A,e){for(var t=this.resolvedProperty,i=0,o=t.length;i!==o;++i)t[i]=A[e++]},function(A,e){for(var t=this.resolvedProperty,i=0,o=t.length;i!==o;++i)t[i]=A[e++];this.targetObject.needsUpdate=!0},function(A,e){for(var t=this.resolvedProperty,i=0,o=t.length;i!==o;++i)t[i]=A[e++];this.targetObject.matrixWorldNeedsUpdate=!0}],[function(A,e){this.resolvedProperty[this.propertyIndex]=A[e]},function(A,e){this.resolvedProperty[this.propertyIndex]=A[e],this.targetObject.needsUpdate=!0},function(A,e){this.resolvedProperty[this.propertyIndex]=A[e],this.targetObject.matrixWorldNeedsUpdate=!0}],[function(A,e){this.resolvedProperty.fromArray(A,e)},function(A,e){this.resolvedProperty.fromArray(A,e),this.targetObject.needsUpdate=!0},function(A,e){this.resolvedProperty.fromArray(A,e),this.targetObject.matrixWorldNeedsUpdate=!0}]],getValue:function(A,e){this.bind(),this.getValue(A,e)},setValue:function(A,e){this.bind(),this.setValue(A,e)},bind:function(){var A=this.node,e=this.parsedPath,t=e.objectName,i=e.propertyName,o=e.propertyIndex;if(A||(A=Fs.findNode(this.rootNode,e.nodeName)||this.rootNode,this.node=A),this.getValue=this._getValue_unavailable,this.setValue=this._setValue_unavailable,A){if(t){var n=e.objectIndex;switch(t){case"materials":if(!A.material)return void console.error("THREE.PropertyBinding: Can not bind to material as node does not have a material.",this);if(!A.material.materials)return void console.error("THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.",this);A=A.material.materials;break;case"bones":if(!A.skeleton)return void console.error("THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.",this);A=A.skeleton.bones;for(var r=0;A.length>r;r++)if(A[r].name===n){n=r;break}break;default:if(void 0===A[t])return void console.error("THREE.PropertyBinding: Can not bind to objectName of node undefined.",this);A=A[t]}if(void 0!==n){if(void 0===A[n])return void console.error("THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.",this,A);A=A[n]}}var a=A[i];if(void 0!==a){var s=this.Versioning.None;this.targetObject=A,void 0!==A.needsUpdate?s=this.Versioning.NeedsUpdate:void 0!==A.matrixWorldNeedsUpdate&&(s=this.Versioning.MatrixWorldNeedsUpdate);var l=this.BindingType.Direct;if(void 0!==o){if("morphTargetInfluences"===i){if(!A.geometry)return void console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.",this);if(A.geometry.isBufferGeometry){if(!A.geometry.morphAttributes)return void console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.",this);for(r=0;this.node.geometry.morphAttributes.position.length>r;r++)if(A.geometry.morphAttributes.position[r].name===o){o=r;break}}else{if(!A.geometry.morphTargets)return void console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphTargets.",this);for(r=0;this.node.geometry.morphTargets.length>r;r++)if(A.geometry.morphTargets[r].name===o){o=r;break}}}l=this.BindingType.ArrayElement,this.resolvedProperty=a,this.propertyIndex=o}else void 0!==a.fromArray&&void 0!==a.toArray?(l=this.BindingType.HasFromToArray,this.resolvedProperty=a):Array.isArray(a)?(l=this.BindingType.EntireArray,this.resolvedProperty=a):this.propertyName=i;this.getValue=this.GetterByBindingType[l],this.setValue=this.SetterByBindingTypeAndVersioning[l][s]}else{console.error("THREE.PropertyBinding: Trying to update property for track: "+e.nodeName+"."+i+" but it wasn't found.",A)}}else console.error("THREE.PropertyBinding: Trying to update node for track: "+this.path+" but it wasn't found.")},unbind:function(){this.node=null,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}}),Object.assign(Fs.prototype,{_getValue_unbound:Fs.prototype.getValue,_setValue_unbound:Fs.prototype.setValue}),Object.assign(Ks.prototype,{isAnimationObjectGroup:!0,add:function(){for(var A=this._objects,e=A.length,t=this.nCachedObjects_,i=this._indicesByUUID,o=this._paths,n=this._parsedPaths,r=this._bindings,a=r.length,s=void 0,l=0,c=arguments.length;l!==c;++l){var h=arguments[l],d=h.uuid,p=i[d];if(void 0===p){p=e++,i[d]=p,A.push(h);for(var g=0,u=a;g!==u;++g)r[g].push(new Fs(h,o[g],n[g]))}else if(t>p){s=A[p];var f=--t,m=A[f];i[m.uuid]=p,A[p]=m,i[d]=f,A[f]=h;for(g=0,u=a;g!==u;++g){var C=r[g],y=C[f],v=C[p];C[p]=y,void 0===v&&(v=new Fs(h,o[g],n[g])),C[f]=v}}else A[p]!==s&&console.error("THREE.AnimationObjectGroup: Different objects with the same UUID detected. Clean the caches or recreate your infrastructure when reloading scenes.")}this.nCachedObjects_=t},remove:function(){for(var A=this._objects,e=this.nCachedObjects_,t=this._indicesByUUID,i=this._bindings,o=i.length,n=0,r=arguments.length;n!==r;++n){var a=arguments[n],s=a.uuid,l=t[s];if(void 0!==l&&l>=e){var c=e++,h=A[c];t[h.uuid]=l,A[l]=h,t[s]=c,A[c]=a;for(var d=0,p=o;d!==p;++d){var g=i[d],u=g[c],f=g[l];g[l]=u,g[c]=f}}}this.nCachedObjects_=e},uncache:function(){for(var A=this._objects,e=A.length,t=this.nCachedObjects_,i=this._indicesByUUID,o=this._bindings,n=o.length,r=0,a=arguments.length;r!==a;++r){var s=arguments[r],l=s.uuid,c=i[l];if(void 0!==c)if(delete i[l],t>c){var h=--t,d=A[h],p=A[C=--e];i[d.uuid]=c,A[c]=d,i[p.uuid]=h,A[h]=p,A.pop();for(var g=0,u=n;g!==u;++g){var f=(y=o[g])[h],m=y[C];y[c]=f,y[h]=m,y.pop()}}else{var C;i[(p=A[C=--e]).uuid]=c,A[c]=p,A.pop();for(g=0,u=n;g!==u;++g){var y;(y=o[g])[c]=y[C],y.pop()}}}this.nCachedObjects_=t},subscribe_:function(A,e){var t=this._bindingsIndicesByPath,i=t[A],o=this._bindings;if(void 0!==i)return o[i];var n=this._paths,r=this._parsedPaths,a=this._objects,s=this.nCachedObjects_,l=new Array(a.length);t[A]=i=o.length,n.push(A),r.push(e),o.push(l);for(var c=s,h=a.length;c!==h;++c){l[c]=new Fs(a[c],A,e)}return l},unsubscribe_:function(A){var e=this._bindingsIndicesByPath,t=e[A];if(void 0!==t){var i=this._paths,o=this._parsedPaths,n=this._bindings,r=n.length-1,a=n[r];e[A[r]]=t,n[t]=a,n.pop(),o[t]=o[r],o.pop(),i[t]=i[r],i.pop()}}}),Object.assign(Qs.prototype,{play:function(){return this._mixer._activateAction(this),this},stop:function(){return this._mixer._deactivateAction(this),this.reset()},reset:function(){return this.paused=!1,this.enabled=!0,this.time=0,this._loopCount=-1,this._startTime=null,this.stopFading().stopWarping()},isRunning:function(){return this.enabled&&!this.paused&&0!==this.timeScale&&null===this._startTime&&this._mixer._isActiveAction(this)},isScheduled:function(){return this._mixer._isActiveAction(this)},startAt:function(A){return this._startTime=A,this},setLoop:function(A,e){return this.loop=A,this.repetitions=e,this},setEffectiveWeight:function(A){return this.weight=A,this._effectiveWeight=this.enabled?A:0,this.stopFading()},getEffectiveWeight:function(){return this._effectiveWeight},fadeIn:function(A){return this._scheduleFading(A,0,1)},fadeOut:function(A){return this._scheduleFading(A,1,0)},crossFadeFrom:function(A,e,t){if(A.fadeOut(e),this.fadeIn(e),t){var i=this._clip.duration,o=A._clip.duration,n=i/o;A.warp(1,o/i,e),this.warp(n,1,e)}return this},crossFadeTo:function(A,e,t){return A.crossFadeFrom(this,e,t)},stopFading:function(){var A=this._weightInterpolant;return null!==A&&(this._weightInterpolant=null,this._mixer._takeBackControlInterpolant(A)),this},setEffectiveTimeScale:function(A){return this.timeScale=A,this._effectiveTimeScale=this.paused?0:A,this.stopWarping()},getEffectiveTimeScale:function(){return this._effectiveTimeScale},setDuration:function(A){return this.timeScale=this._clip.duration/A,this.stopWarping()},syncWith:function(A){return this.time=A.time,this.timeScale=A.timeScale,this.stopWarping()},halt:function(A){return this.warp(this._effectiveTimeScale,0,A)},warp:function(A,e,t){var i=this._mixer,o=i.time,n=this._timeScaleInterpolant,r=this.timeScale;null===n&&(n=i._lendControlInterpolant(),this._timeScaleInterpolant=n);var a=n.parameterPositions,s=n.sampleValues;return a[0]=o,a[1]=o+t,s[0]=A/r,s[1]=e/r,this},stopWarping:function(){var A=this._timeScaleInterpolant;return null!==A&&(this._timeScaleInterpolant=null,this._mixer._takeBackControlInterpolant(A)),this},getMixer:function(){return this._mixer},getClip:function(){return this._clip},getRoot:function(){return this._localRoot||this._mixer._root},_update:function(A,e,t,i){if(this.enabled){var o=this._startTime;if(null!==o){var n=(A-o)*t;if(0>n||0===t)return;this._startTime=null,e=t*n}e*=this._updateTimeScale(A);var r=this._updateTime(e),a=this._updateWeight(A);if(a>0)for(var s=this._interpolants,l=this._propertyBindings,c=0,h=s.length;c!==h;++c)s[c].evaluate(r),l[c].accumulate(i,a)}else this._updateWeight(A)},_updateWeight:function(A){var e=0;if(this.enabled){e=this.weight;var t=this._weightInterpolant;if(null!==t){var i=t.evaluate(A)[0];e*=i,A>t.parameterPositions[1]&&(this.stopFading(),0===i&&(this.enabled=!1))}}return this._effectiveWeight=e,e},_updateTimeScale:function(A){var e=0;if(!this.paused){e=this.timeScale;var t=this._timeScaleInterpolant;if(null!==t)e*=t.evaluate(A)[0],A>t.parameterPositions[1]&&(this.stopWarping(),0===e?this.paused=!0:this.timeScale=e)}return this._effectiveTimeScale=e,e},_updateTime:function(A){var e=this.time+A,t=this._clip.duration,i=this.loop,o=this._loopCount,n=2202===i;if(0===A)return-1===o?e:n&&1==(1&o)?t-e:e;if(2200===i){-1===o&&(this._loopCount=0,this._setEndings(!0,!0,!1));A:{if(e=0){this.time=e;break A}e=0}else e=t;this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=e,this._mixer.dispatchEvent({type:"finished",action:this,direction:0>A?-1:1})}}else{if(-1===o&&(0>A?this._setEndings(0===this.repetitions,!0,n):(o=0,this._setEndings(!0,0===this.repetitions,n))),e>=t||0>e){var r=Math.floor(e/t);e-=t*r,o+=Math.abs(r);var a=this.repetitions-o;if(0A;this._setEndings(s,!s,n)}else this._setEndings(!1,!1,n);this._loopCount=o,this.time=e,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:r})}else this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=e=A>0?t:0,this._mixer.dispatchEvent({type:"finished",action:this,direction:A>0?1:-1})}else this.time=e;if(n&&1==(1&o))return t-e}return e},_setEndings:function(A,e,t){var i=this._interpolantSettings;t?(i.endingStart=2401,i.endingEnd=2401):(i.endingStart=A?this.zeroSlopeAtStart?2401:2400:2402,i.endingEnd=e?this.zeroSlopeAtEnd?2401:2400:2402)},_scheduleFading:function(A,e,t){var i=this._mixer,o=i.time,n=this._weightInterpolant;null===n&&(n=i._lendControlInterpolant(),this._weightInterpolant=n);var r=n.parameterPositions,a=n.sampleValues;return r[0]=o,a[0]=e,r[1]=o+A,a[1]=t,this}}),Rs.prototype=Object.assign(Object.create(i.prototype),{constructor:Rs,_bindAction:function(A,e){var t=A._localRoot||this._root,i=A._clip.tracks,o=i.length,n=A._propertyBindings,r=A._interpolants,a=t.uuid,s=this._bindingsByRootAndName,l=s[a];void 0===l&&(s[a]=l={});for(var c=0;c!==o;++c){var h=i[c],d=h.name,p=l[d];if(void 0!==p)n[c]=p;else{if(void 0!==(p=n[c])){null===p._cacheIndex&&(++p.referenceCount,this._addInactiveBinding(p,a,d));continue}++(p=new vs(Fs.create(t,d,e&&e._propertyBindings[c].binding.parsedPath),h.ValueTypeName,h.getValueSize())).referenceCount,this._addInactiveBinding(p,a,d),n[c]=p}r[c].resultBuffer=p.buffer}},_activateAction:function(A){if(!this._isActiveAction(A)){if(null===A._cacheIndex){var e=(A._localRoot||this._root).uuid,t=A._clip.uuid,i=this._actionsByClip[t];this._bindAction(A,i&&i.knownActions[0]),this._addInactiveAction(A,t,e)}for(var o=A._propertyBindings,n=0,r=o.length;n!==r;++n){var a=o[n];0==a.useCount++&&(this._lendBinding(a),a.saveOriginalState())}this._lendAction(A)}},_deactivateAction:function(A){if(this._isActiveAction(A)){for(var e=A._propertyBindings,t=0,i=e.length;t!==i;++t){var o=e[t];0==--o.useCount&&(o.restoreOriginalState(),this._takeBackBinding(o))}this._takeBackAction(A)}},_initMemoryManager:function(){this._actions=[],this._nActiveActions=0,this._actionsByClip={},this._bindings=[],this._nActiveBindings=0,this._bindingsByRootAndName={},this._controlInterpolants=[],this._nActiveControlInterpolants=0;var A=this;this.stats={actions:{get total(){return A._actions.length},get inUse(){return A._nActiveActions}},bindings:{get total(){return A._bindings.length},get inUse(){return A._nActiveBindings}},controlInterpolants:{get total(){return A._controlInterpolants.length},get inUse(){return A._nActiveControlInterpolants}}}},_isActiveAction:function(A){var e=A._cacheIndex;return null!==e&&this._nActiveActions>e},_addInactiveAction:function(A,e,t){var i=this._actions,o=this._actionsByClip,n=o[e];if(void 0===n)n={knownActions:[A],actionByRoot:{}},A._byClipCacheIndex=0,o[e]=n;else{var r=n.knownActions;A._byClipCacheIndex=r.length,r.push(A)}A._cacheIndex=i.length,i.push(A),n.actionByRoot[t]=A},_removeInactiveAction:function(A){var e=this._actions,t=e[e.length-1],i=A._cacheIndex;t._cacheIndex=i,e[i]=t,e.pop(),A._cacheIndex=null;var o=A._clip.uuid,n=this._actionsByClip,r=n[o],a=r.knownActions,s=a[a.length-1],l=A._byClipCacheIndex;s._byClipCacheIndex=l,a[l]=s,a.pop(),A._byClipCacheIndex=null,delete r.actionByRoot[(A._localRoot||this._root).uuid],0===a.length&&delete n[o],this._removeInactiveBindingsForAction(A)},_removeInactiveBindingsForAction:function(A){for(var e=A._propertyBindings,t=0,i=e.length;t!==i;++t){var o=e[t];0==--o.referenceCount&&this._removeInactiveBinding(o)}},_lendAction:function(A){var e=this._actions,t=A._cacheIndex,i=this._nActiveActions++,o=e[i];A._cacheIndex=i,e[i]=A,o._cacheIndex=t,e[t]=o},_takeBackAction:function(A){var e=this._actions,t=A._cacheIndex,i=--this._nActiveActions,o=e[i];A._cacheIndex=i,e[i]=A,o._cacheIndex=t,e[t]=o},_addInactiveBinding:function(A,e,t){var i=this._bindingsByRootAndName,o=i[e],n=this._bindings;void 0===o&&(i[e]=o={}),o[t]=A,A._cacheIndex=n.length,n.push(A)},_removeInactiveBinding:function(A){var e=this._bindings,t=A.binding,i=t.rootNode.uuid,o=t.path,n=this._bindingsByRootAndName,r=n[i],a=e[e.length-1],s=A._cacheIndex;a._cacheIndex=s,e[s]=a,e.pop(),delete r[o],0===Object.keys(r).length&&delete n[i]},_lendBinding:function(A){var e=this._bindings,t=A._cacheIndex,i=this._nActiveBindings++,o=e[i];A._cacheIndex=i,e[i]=A,o._cacheIndex=t,e[t]=o},_takeBackBinding:function(A){var e=this._bindings,t=A._cacheIndex,i=--this._nActiveBindings,o=e[i];A._cacheIndex=i,e[i]=A,o._cacheIndex=t,e[t]=o},_lendControlInterpolant:function(){var A=this._controlInterpolants,e=this._nActiveControlInterpolants++,t=A[e];return void 0===t&&((t=new Kr(new Float32Array(2),new Float32Array(2),1,this._controlInterpolantsResultBuffer)).__cacheIndex=e,A[e]=t),t},_takeBackControlInterpolant:function(A){var e=this._controlInterpolants,t=A.__cacheIndex,i=--this._nActiveControlInterpolants,o=e[i];A.__cacheIndex=i,e[i]=A,o.__cacheIndex=t,e[t]=o},_controlInterpolantsResultBuffer:new Float32Array(1),clipAction:function(A,e){var t=e||this._root,i=t.uuid,o="string"==typeof A?Gr.findByName(t,A):A,n=null!==o?o.uuid:A,r=this._actionsByClip[n],a=null;if(void 0!==r){var s=r.actionByRoot[i];if(void 0!==s)return s;a=r.knownActions[0],null===o&&(o=a._clip)}if(null===o)return null;var l=new Qs(this,o,e);return this._bindAction(l,a),this._addInactiveAction(l,n,i),l},existingAction:function(A,e){var t=e||this._root,i=t.uuid,o="string"==typeof A?Gr.findByName(t,A):A,n=this._actionsByClip[o?o.uuid:A];return void 0!==n&&n.actionByRoot[i]||null},stopAllAction:function(){var A=this._actions,e=this._nActiveActions,t=this._bindings,i=this._nActiveBindings;this._nActiveActions=0,this._nActiveBindings=0;for(var o=0;o!==e;++o)A[o].reset();for(o=0;o!==i;++o)t[o].useCount=0;return this},update:function(A){for(var e=this._actions,t=this._nActiveActions,i=this.time+=A*=this.timeScale,o=Math.sign(A),n=this._accuIndex^=1,r=0;r!==t;++r){e[r]._update(i,A,o,n)}var a=this._bindings,s=this._nActiveBindings;for(r=0;r!==s;++r)a[r].apply(n);return this},setTime:function(A){this.time=0;for(var e=0;this._actions.length>e;e++)this._actions[e].time=0;return this.update(A)},getRoot:function(){return this._root},uncacheClip:function(A){var e=this._actions,t=A.uuid,i=this._actionsByClip,o=i[t];if(void 0!==o){for(var n=o.knownActions,r=0,a=n.length;r!==a;++r){var s=n[r];this._deactivateAction(s);var l=s._cacheIndex,c=e[e.length-1];s._cacheIndex=null,s._byClipCacheIndex=null,c._cacheIndex=l,e[l]=c,e.pop(),this._removeInactiveBindingsForAction(s)}delete i[t]}},uncacheRoot:function(A){var e=A.uuid,t=this._actionsByClip;for(var i in t){var o=t[i].actionByRoot[e];void 0!==o&&(this._deactivateAction(o),this._removeInactiveAction(o))}var n=this._bindingsByRootAndName[e];if(void 0!==n)for(var r in n){var a=n[r];a.restoreOriginalState(),this._removeInactiveBinding(a)}},uncacheAction:function(A,e){var t=this.existingAction(A,e);null!==t&&(this._deactivateAction(t),this._removeInactiveAction(t))}}),Ts.prototype.clone=function(){return new Ts(void 0===this.value.clone?this.value:this.value.clone())},ks.prototype=Object.assign(Object.create(to.prototype),{constructor:ks,isInstancedInterleavedBuffer:!0,copy:function(A){return to.prototype.copy.call(this,A),this.meshPerAttribute=A.meshPerAttribute,this}}),Object.assign(Ds.prototype,{set:function(A,e){this.ray.set(A,e)},setFromCamera:function(A,e){e&&e.isPerspectiveCamera?(this.ray.origin.setFromMatrixPosition(e.matrixWorld),this.ray.direction.set(A.x,A.y,.5).unproject(e).sub(this.ray.origin).normalize(),this.camera=e):e&&e.isOrthographicCamera?(this.ray.origin.set(A.x,A.y,(e.near+e.far)/(e.near-e.far)).unproject(e),this.ray.direction.set(0,0,-1).transformDirection(e.matrixWorld),this.camera=e):console.error("THREE.Raycaster: Unsupported camera type.")},intersectObject:function(A,e,t){var i=t||[];return Ns(A,this,i,e),i.sort(Ls),i},intersectObjects:function(A,e,t){var i=t||[];if(!1===Array.isArray(A))return console.warn("THREE.Raycaster.intersectObjects: objects is not an Array."),i;for(var o=0,n=A.length;n>o;o++)Ns(A[o],this,i,e);return i.sort(Ls),i}}),Object.assign(Os.prototype,{set:function(A,e,t){return this.radius=A,this.phi=e,this.theta=t,this},clone:function(){return(new this.constructor).copy(this)},copy:function(A){return this.radius=A.radius,this.phi=A.phi,this.theta=A.theta,this},makeSafe:function(){return this.phi=Math.max(1e-6,Math.min(Math.PI-1e-6,this.phi)),this},setFromVector3:function(A){return this.setFromCartesianCoords(A.x,A.y,A.z)},setFromCartesianCoords:function(A,e,t){return this.radius=Math.sqrt(A*A+e*e+t*t),0===this.radius?(this.theta=0,this.phi=0):(this.theta=Math.atan2(A,t),this.phi=Math.acos(a.clamp(e/this.radius,-1,1))),this}}),Object.assign(Vs.prototype,{set:function(A,e,t){return this.radius=A,this.theta=e,this.y=t,this},clone:function(){return(new this.constructor).copy(this)},copy:function(A){return this.radius=A.radius,this.theta=A.theta,this.y=A.y,this},setFromVector3:function(A){return this.setFromCartesianCoords(A.x,A.y,A.z)},setFromCartesianCoords:function(A,e,t){return this.radius=Math.sqrt(A*A+t*t),this.theta=Math.atan2(A,t),this.y=e,this}});var Gs=new s;function Ps(A,e){this.min=void 0!==A?A:new s(1/0,1/0),this.max=void 0!==e?e:new s(-1/0,-1/0)}Object.assign(Ps.prototype,{set:function(A,e){return this.min.copy(A),this.max.copy(e),this},setFromPoints:function(A){this.makeEmpty();for(var e=0,t=A.length;t>e;e++)this.expandByPoint(A[e]);return this},setFromCenterAndSize:function(A,e){var t=Gs.copy(e).multiplyScalar(.5);return this.min.copy(A).sub(t),this.max.copy(A).add(t),this},clone:function(){return(new this.constructor).copy(this)},copy:function(A){return this.min.copy(A.min),this.max.copy(A.max),this},makeEmpty:function(){return this.min.x=this.min.y=1/0,this.max.x=this.max.y=-1/0,this},isEmpty:function(){return this.min.x>this.max.x||this.min.y>this.max.y},getCenter:function(A){return void 0===A&&(console.warn("THREE.Box2: .getCenter() target is now required"),A=new s),this.isEmpty()?A.set(0,0):A.addVectors(this.min,this.max).multiplyScalar(.5)},getSize:function(A){return void 0===A&&(console.warn("THREE.Box2: .getSize() target is now required"),A=new s),this.isEmpty()?A.set(0,0):A.subVectors(this.max,this.min)},expandByPoint:function(A){return this.min.min(A),this.max.max(A),this},expandByVector:function(A){return this.min.sub(A),this.max.add(A),this},expandByScalar:function(A){return this.min.addScalar(-A),this.max.addScalar(A),this},containsPoint:function(A){return!(this.min.x>A.x||A.x>this.max.x||this.min.y>A.y||A.y>this.max.y)},containsBox:function(A){return!(this.min.x>A.min.x||A.max.x>this.max.x||this.min.y>A.min.y||A.max.y>this.max.y)},getParameter:function(A,e){return void 0===e&&(console.warn("THREE.Box2: .getParameter() target is now required"),e=new s),e.set((A.x-this.min.x)/(this.max.x-this.min.x),(A.y-this.min.y)/(this.max.y-this.min.y))},intersectsBox:function(A){return!(this.min.x>A.max.x||A.min.x>this.max.x||this.min.y>A.max.y||A.min.y>this.max.y)},clampPoint:function(A,e){return void 0===e&&(console.warn("THREE.Box2: .clampPoint() target is now required"),e=new s),e.copy(A).clamp(this.min,this.max)},distanceToPoint:function(A){return Gs.copy(A).clamp(this.min,this.max).sub(A).length()},intersect:function(A){return this.min.max(A.min),this.max.min(A.max),this},union:function(A){return this.min.min(A.min),this.max.max(A.max),this},translate:function(A){return this.min.add(A),this.max.add(A),this},equals:function(A){return A.min.equals(this.min)&&A.max.equals(this.max)}});var qs=new y,js=new y;function Hs(A,e){this.start=void 0!==A?A:new y,this.end=void 0!==e?e:new y}function Ys(A){H.call(this),this.material=A,this.render=function(){}}Object.assign(Hs.prototype,{set:function(A,e){return this.start.copy(A),this.end.copy(e),this},clone:function(){return(new this.constructor).copy(this)},copy:function(A){return this.start.copy(A.start),this.end.copy(A.end),this},getCenter:function(A){return void 0===A&&(console.warn("THREE.Line3: .getCenter() target is now required"),A=new y),A.addVectors(this.start,this.end).multiplyScalar(.5)},delta:function(A){return void 0===A&&(console.warn("THREE.Line3: .delta() target is now required"),A=new y),A.subVectors(this.end,this.start)},distanceSq:function(){return this.start.distanceToSquared(this.end)},distance:function(){return this.start.distanceTo(this.end)},at:function(A,e){return void 0===e&&(console.warn("THREE.Line3: .at() target is now required"),e=new y),this.delta(e).multiplyScalar(A).add(this.start)},closestPointToPointParameter:function(A,e){qs.subVectors(A,this.start),js.subVectors(this.end,this.start);var t=js.dot(js),i=js.dot(qs)/t;return e&&(i=a.clamp(i,0,1)),i},closestPointToPoint:function(A,e,t){var i=this.closestPointToPointParameter(A,e);return void 0===t&&(console.warn("THREE.Line3: .closestPointToPoint() target is now required"),t=new y),this.delta(t).multiplyScalar(i).add(this.start)},applyMatrix4:function(A){return this.start.applyMatrix4(A),this.end.applyMatrix4(A),this},equals:function(A){return A.start.equals(this.start)&&A.end.equals(this.end)}}),(Ys.prototype=Object.create(H.prototype)).constructor=Ys,Ys.prototype.isImmediateRenderObject=!0;var Ws=new y;function Js(A,e){H.call(this),this.light=A,this.light.updateMatrixWorld(),this.matrix=A.matrixWorld,this.matrixAutoUpdate=!1,this.color=e;for(var t=new he,i=[0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,-1,0,1,0,0,0,0,1,1,0,0,0,0,-1,1],o=0,n=1;32>o;o++,n++){var r=o/32*Math.PI*2,a=n/32*Math.PI*2;i.push(Math.cos(r),Math.sin(r),1,Math.cos(a),Math.sin(a),1)}t.setAttribute("position",new Ae(i,3));var s=new ko({fog:!1,toneMapped:!1});this.cone=new jo(t,s),this.add(this.cone),this.update()}(Js.prototype=Object.create(H.prototype)).constructor=Js,Js.prototype.dispose=function(){this.cone.geometry.dispose(),this.cone.material.dispose()},Js.prototype.update=function(){this.light.updateMatrixWorld();var A=this.light.distance?this.light.distance:1e3,e=A*Math.tan(this.light.angle);this.cone.scale.set(e,e,A),Ws.setFromMatrixPosition(this.light.target.matrixWorld),this.cone.lookAt(Ws),void 0!==this.color?this.cone.material.color.set(this.color):this.cone.material.color.copy(this.light.color)};var zs=new y,Zs=new M,Xs=new M;function _s(A){for(var e=function A(e){var t=[];e&&e.isBone&&t.push(e);for(var i=0;e.children.length>i;i++)t.push.apply(t,A(e.children[i]));return t}(A),t=new he,i=[],o=[],n=new LA(0,0,1),r=new LA(0,1,0),a=0;e.length>a;a++){var s=e[a];s.parent&&s.parent.isBone&&(i.push(0,0,0),i.push(0,0,0),o.push(n.r,n.g,n.b),o.push(r.r,r.g,r.b))}t.setAttribute("position",new Ae(i,3)),t.setAttribute("color",new Ae(o,3));var l=new ko({vertexColors:!0,depthTest:!1,depthWrite:!1,toneMapped:!1,transparent:!0});jo.call(this,t,l),this.root=A,this.bones=e,this.matrix=A.matrixWorld,this.matrixAutoUpdate=!1}function $s(A,e,t){this.light=A,this.light.updateMatrixWorld(),this.color=t;var i=new er(e,4,2),o=new jA({wireframe:!0,fog:!1,toneMapped:!1});Ue.call(this,i,o),this.matrix=this.light.matrixWorld,this.matrixAutoUpdate=!1,this.update()}(_s.prototype=Object.create(jo.prototype)).constructor=_s,_s.prototype.isSkeletonHelper=!0,_s.prototype.updateMatrixWorld=function(A){var e=this.bones,t=this.geometry,i=t.getAttribute("position");Xs.getInverse(this.root.matrixWorld);for(var o=0,n=0;e.length>o;o++){var r=e[o];r.parent&&r.parent.isBone&&(Zs.multiplyMatrices(Xs,r.matrixWorld),zs.setFromMatrixPosition(Zs),i.setXYZ(n,zs.x,zs.y,zs.z),Zs.multiplyMatrices(Xs,r.parent.matrixWorld),zs.setFromMatrixPosition(Zs),i.setXYZ(n+1,zs.x,zs.y,zs.z),n+=2)}t.getAttribute("position").needsUpdate=!0,H.prototype.updateMatrixWorld.call(this,A)},($s.prototype=Object.create(Ue.prototype)).constructor=$s,$s.prototype.dispose=function(){this.geometry.dispose(),this.material.dispose()},$s.prototype.update=function(){void 0!==this.color?this.material.color.set(this.color):this.material.color.copy(this.light.color)};var Al=new y,el=new LA,tl=new LA;function il(A,e,t){H.call(this),this.light=A,this.light.updateMatrixWorld(),this.matrix=A.matrixWorld,this.matrixAutoUpdate=!1,this.color=t;var i=new dn(e);i.rotateY(.5*Math.PI),this.material=new jA({wireframe:!0,fog:!1,toneMapped:!1}),void 0===this.color&&(this.material.vertexColors=!0);var o=i.getAttribute("position"),n=new Float32Array(3*o.count);i.setAttribute("color",new YA(n,3)),this.add(new Ue(i,this.material)),this.update()}function ol(A,e,t,i){A=A||10,e=e||10,t=new LA(void 0!==t?t:4473924),i=new LA(void 0!==i?i:8947848);for(var o=e/2,n=A/e,r=A/2,a=[],s=[],l=0,c=0,h=-r;e>=l;l++,h+=n){a.push(-r,0,h,r,0,h),a.push(h,0,-r,h,0,r);var d=l===o?t:i;d.toArray(s,c),d.toArray(s,c+=3),d.toArray(s,c+=3),d.toArray(s,c+=3),c+=3}var p=new he;p.setAttribute("position",new Ae(a,3)),p.setAttribute("color",new Ae(s,3));var g=new ko({vertexColors:!0,toneMapped:!1});jo.call(this,p,g)}function nl(A,e,t,i,o,n){A=A||10,e=e||16,t=t||8,i=i||64,o=new LA(void 0!==o?o:4473924),n=new LA(void 0!==n?n:8947848);var r,a,s,l,c,h,d,p=[],g=[];for(l=0;e>=l;l++)s=l/e*(2*Math.PI),r=Math.sin(s)*A,a=Math.cos(s)*A,p.push(0,0,0),p.push(r,0,a),g.push((d=1&l?o:n).r,d.g,d.b),g.push(d.r,d.g,d.b);for(l=0;t>=l;l++)for(d=1&l?o:n,h=A-A/t*l,c=0;i>c;c++)s=c/i*(2*Math.PI),r=Math.sin(s)*h,a=Math.cos(s)*h,p.push(r,0,a),g.push(d.r,d.g,d.b),s=(c+1)/i*(2*Math.PI),r=Math.sin(s)*h,a=Math.cos(s)*h,p.push(r,0,a),g.push(d.r,d.g,d.b);var u=new he;u.setAttribute("position",new Ae(p,3)),u.setAttribute("color",new Ae(g,3));var f=new ko({vertexColors:!0,toneMapped:!1});jo.call(this,u,f)}(il.prototype=Object.create(H.prototype)).constructor=il,il.prototype.dispose=function(){this.children[0].geometry.dispose(),this.children[0].material.dispose()},il.prototype.update=function(){var A=this.children[0];if(void 0!==this.color)this.material.color.set(this.color);else{var e=A.geometry.getAttribute("color");el.copy(this.light.color),tl.copy(this.light.groundColor);for(var t=0,i=e.count;i>t;t++){var o=i/2>t?el:tl;e.setXYZ(t,o.r,o.g,o.b)}e.needsUpdate=!0}A.lookAt(Al.setFromMatrixPosition(this.light.matrixWorld).negate())},ol.prototype=Object.assign(Object.create(jo.prototype),{constructor:ol,copy:function(A){return jo.prototype.copy.call(this,A),this.geometry.copy(A.geometry),this.material.copy(A.material),this},clone:function(){return(new this.constructor).copy(this)}}),(nl.prototype=Object.create(jo.prototype)).constructor=nl;var rl=new y,al=new y,sl=new y;function ll(A,e,t){H.call(this),this.light=A,this.light.updateMatrixWorld(),this.matrix=A.matrixWorld,this.matrixAutoUpdate=!1,this.color=t,void 0===e&&(e=1);var i=new he;i.setAttribute("position",new Ae([-e,e,0,e,e,0,e,-e,0,-e,-e,0,-e,e,0],3));var o=new ko({fog:!1,toneMapped:!1});this.lightPlane=new Go(i,o),this.add(this.lightPlane),(i=new he).setAttribute("position",new Ae([0,0,0,0,0,1],3)),this.targetLine=new Go(i,o),this.add(this.targetLine),this.update()}(ll.prototype=Object.create(H.prototype)).constructor=ll,ll.prototype.dispose=function(){this.lightPlane.geometry.dispose(),this.lightPlane.material.dispose(),this.targetLine.geometry.dispose(),this.targetLine.material.dispose()},ll.prototype.update=function(){rl.setFromMatrixPosition(this.light.matrixWorld),al.setFromMatrixPosition(this.light.target.matrixWorld),sl.subVectors(al,rl),this.lightPlane.lookAt(al),void 0!==this.color?(this.lightPlane.material.color.set(this.color),this.targetLine.material.color.set(this.color)):(this.lightPlane.material.color.copy(this.light.color),this.targetLine.material.color.copy(this.light.color)),this.targetLine.lookAt(al),this.targetLine.scale.z=sl.length()};var cl=new y,hl=new qe;function dl(A){var e=new he,t=new ko({color:16777215,vertexColors:!0,toneMapped:!1}),i=[],o=[],n={},r=new LA(16755200),a=new LA(16711680),s=new LA(43775),l=new LA(16777215),c=new LA(3355443);function h(A,e,t){d(A,t),d(e,t)}function d(A,e){i.push(0,0,0),o.push(e.r,e.g,e.b),void 0===n[A]&&(n[A]=[]),n[A].push(i.length/3-1)}h("n1","n2",r),h("n2","n4",r),h("n4","n3",r),h("n3","n1",r),h("f1","f2",r),h("f2","f4",r),h("f4","f3",r),h("f3","f1",r),h("n1","f1",r),h("n2","f2",r),h("n3","f3",r),h("n4","f4",r),h("p","n1",a),h("p","n2",a),h("p","n3",a),h("p","n4",a),h("u1","u2",s),h("u2","u3",s),h("u3","u1",s),h("c","t",l),h("p","c",c),h("cn1","cn2",c),h("cn3","cn4",c),h("cf1","cf2",c),h("cf3","cf4",c),e.setAttribute("position",new Ae(i,3)),e.setAttribute("color",new Ae(o,3)),jo.call(this,e,t),this.camera=A,this.camera.updateProjectionMatrix&&this.camera.updateProjectionMatrix(),this.matrix=A.matrixWorld,this.matrixAutoUpdate=!1,this.pointMap=n,this.update()}function pl(A,e,t,i,o,n,r){cl.set(o,n,r).unproject(i);var a=e[A];if(void 0!==a)for(var s=t.getAttribute("position"),l=0,c=a.length;c>l;l++)s.setXYZ(a[l],cl.x,cl.y,cl.z)}(dl.prototype=Object.create(jo.prototype)).constructor=dl,dl.prototype.update=function(){var A=this.geometry,e=this.pointMap;hl.projectionMatrixInverse.copy(this.camera.projectionMatrixInverse),pl("c",e,A,hl,0,0,-1),pl("t",e,A,hl,0,0,1),pl("n1",e,A,hl,-1,-1,-1),pl("n2",e,A,hl,1,-1,-1),pl("n3",e,A,hl,-1,1,-1),pl("n4",e,A,hl,1,1,-1),pl("f1",e,A,hl,-1,-1,1),pl("f2",e,A,hl,1,-1,1),pl("f3",e,A,hl,-1,1,1),pl("f4",e,A,hl,1,1,1),pl("u1",e,A,hl,.7,1.1,-1),pl("u2",e,A,hl,-.7,1.1,-1),pl("u3",e,A,hl,0,2,-1),pl("cf1",e,A,hl,-1,0,1),pl("cf2",e,A,hl,1,0,1),pl("cf3",e,A,hl,0,-1,1),pl("cf4",e,A,hl,0,1,1),pl("cn1",e,A,hl,-1,0,-1),pl("cn2",e,A,hl,1,0,-1),pl("cn3",e,A,hl,0,-1,-1),pl("cn4",e,A,hl,0,1,-1),A.getAttribute("position").needsUpdate=!0};var gl=new aA;function ul(A,e){this.object=A,void 0===e&&(e=16776960);var t=new Uint16Array([0,1,1,2,2,3,3,0,4,5,5,6,6,7,7,4,0,4,1,5,2,6,3,7]),i=new Float32Array(24),o=new he;o.setIndex(new YA(t,1)),o.setAttribute("position",new YA(i,3)),jo.call(this,o,new ko({color:e,toneMapped:!1})),this.matrixAutoUpdate=!1,this.update()}function fl(A,e){this.type="Box3Helper",this.box=A,e=e||16776960;var t=new Uint16Array([0,1,1,2,2,3,3,0,4,5,5,6,6,7,7,4,0,4,1,5,2,6,3,7]),i=new he;i.setIndex(new YA(t,1)),i.setAttribute("position",new Ae([1,1,1,-1,1,1,-1,-1,1,1,-1,1,1,1,-1,-1,1,-1,-1,-1,-1,1,-1,-1],3)),jo.call(this,i,new ko({color:e,toneMapped:!1})),this.geometry.computeBoundingSphere()}function ml(A,e,t){this.type="PlaneHelper",this.plane=A,this.size=void 0===e?1:e;var i=void 0!==t?t:16776960,o=new he;o.setAttribute("position",new Ae([1,-1,1,-1,1,1,-1,-1,1,1,1,1,-1,1,1,-1,-1,1,1,-1,1,1,1,1,0,0,1,0,0,0],3)),o.computeBoundingSphere(),Go.call(this,o,new ko({color:i,toneMapped:!1}));var n=new he;n.setAttribute("position",new Ae([1,1,1,-1,1,1,-1,-1,1,1,1,1,-1,-1,1,1,-1,1],3)),n.computeBoundingSphere(),this.add(new Ue(n,new jA({color:i,opacity:.2,transparent:!0,depthWrite:!1,toneMapped:!1})))}(ul.prototype=Object.create(jo.prototype)).constructor=ul,ul.prototype.update=function(A){if(void 0!==A&&console.warn("THREE.BoxHelper: .update() has no longer arguments."),void 0!==this.object&&gl.setFromObject(this.object),!gl.isEmpty()){var e=gl.min,t=gl.max,i=this.geometry.attributes.position,o=i.array;o[0]=t.x,o[1]=t.y,o[2]=t.z,o[3]=e.x,o[4]=t.y,o[5]=t.z,o[6]=e.x,o[7]=e.y,o[8]=t.z,o[9]=t.x,o[10]=e.y,o[11]=t.z,o[12]=t.x,o[13]=t.y,o[14]=e.z,o[15]=e.x,o[16]=t.y,o[17]=e.z,o[18]=e.x,o[19]=e.y,o[20]=e.z,o[21]=t.x,o[22]=e.y,o[23]=e.z,i.needsUpdate=!0,this.geometry.computeBoundingSphere()}},ul.prototype.setFromObject=function(A){return this.object=A,this.update(),this},ul.prototype.copy=function(A){return jo.prototype.copy.call(this,A),this.object=A.object,this},ul.prototype.clone=function(){return(new this.constructor).copy(this)},(fl.prototype=Object.create(jo.prototype)).constructor=fl,fl.prototype.updateMatrixWorld=function(A){var e=this.box;e.isEmpty()||(e.getCenter(this.position),e.getSize(this.scale),this.scale.multiplyScalar(.5),H.prototype.updateMatrixWorld.call(this,A))},(ml.prototype=Object.create(Go.prototype)).constructor=ml,ml.prototype.updateMatrixWorld=function(A){var e=-this.plane.constant;1e-8>Math.abs(e)&&(e=1e-8),this.scale.set(.5*this.size,.5*this.size,e),this.children[0].material.side=0>e?1:0,this.lookAt(this.plane.normal),H.prototype.updateMatrixWorld.call(this,A)};var Cl,yl,vl=new y;function Il(A,e,t,i,o,n){H.call(this),void 0===A&&(A=new y(0,0,1)),void 0===e&&(e=new y(0,0,0)),void 0===t&&(t=1),void 0===i&&(i=16776960),void 0===o&&(o=.2*t),void 0===n&&(n=.2*o),void 0===Cl&&((Cl=new he).setAttribute("position",new Ae([0,0,0,0,1,0],3)),(yl=new hr(0,.5,1,5,1)).translate(0,-.5,0)),this.position.copy(e),this.line=new Go(Cl,new ko({color:i,toneMapped:!1})),this.line.matrixAutoUpdate=!1,this.add(this.line),this.cone=new Ue(yl,new jA({color:i,toneMapped:!1})),this.cone.matrixAutoUpdate=!1,this.add(this.cone),this.setDirection(A),this.setLength(t,o,n)}function El(A){var e=[0,0,0,A=A||1,0,0,0,0,0,0,A,0,0,0,0,0,0,A],t=new he;t.setAttribute("position",new Ae(e,3)),t.setAttribute("color",new Ae([1,0,0,1,.6,0,0,1,0,.6,1,0,0,0,1,0,.6,1],3));var i=new ko({vertexColors:!0,toneMapped:!1});jo.call(this,t,i)}(Il.prototype=Object.create(H.prototype)).constructor=Il,Il.prototype.setDirection=function(A){if(A.y>.99999)this.quaternion.set(0,0,0,1);else if(-.99999>A.y)this.quaternion.set(1,0,0,0);else{vl.set(A.z,0,-A.x).normalize();var e=Math.acos(A.y);this.quaternion.setFromAxisAngle(vl,e)}},Il.prototype.setLength=function(A,e,t){void 0===e&&(e=.2*A),void 0===t&&(t=.2*e),this.line.scale.set(1,Math.max(1e-4,A-e),1),this.line.updateMatrix(),this.cone.scale.set(t,e,t),this.cone.position.y=A,this.cone.updateMatrix()},Il.prototype.setColor=function(A){this.line.material.color.set(A),this.cone.material.color.set(A)},Il.prototype.copy=function(A){return H.prototype.copy.call(this,A,!1),this.line.copy(A.line),this.cone.copy(A.cone),this},Il.prototype.clone=function(){return(new this.constructor).copy(this)},(El.prototype=Object.create(jo.prototype)).constructor=El;var Bl,xl,Sl,wl,Ml=Math.pow(2,8),bl=[.125,.215,.35,.446,.526,.582],Ul=5+bl.length,Fl={3e3:0,3001:1,3002:2,3004:3,3005:4,3006:5,3007:6},Kl=new Ka,Ql=(Bl=20,xl=new Float32Array(Bl),Sl=new y(0,1,0),(wl=new Cr({defines:{n:Bl},uniforms:{envMap:{value:null},samples:{value:1},weights:{value:xl},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:Sl},inputEncoding:{value:Fl[3e3]},outputEncoding:{value:Fl[3e3]}},vertexShader:ec(),fragmentShader:`\nprecision mediump float;\nprecision mediump int;\nvarying vec3 vOutputDirection;\nuniform sampler2D envMap;\nuniform int samples;\nuniform float weights[n];\nuniform bool latitudinal;\nuniform float dTheta;\nuniform float mipInt;\nuniform vec3 poleAxis;\n\n${tc()}\n\n#define ENVMAP_TYPE_CUBE_UV\n#include \n\nvec3 getSample(float theta, vec3 axis) {\n\tfloat cosTheta = cos(theta);\n\t// Rodrigues' axis-angle rotation\n\tvec3 sampleDirection = vOutputDirection * cosTheta\n\t\t+ cross(axis, vOutputDirection) * sin(theta)\n\t\t+ axis * dot(axis, vOutputDirection) * (1.0 - cosTheta);\n\treturn bilinearCubeUV(envMap, sampleDirection, mipInt);\n}\n\nvoid main() {\n\tvec3 axis = latitudinal ? poleAxis : cross(poleAxis, vOutputDirection);\n\tif (all(equal(axis, vec3(0.0))))\n\t\taxis = vec3(vOutputDirection.z, 0.0, - vOutputDirection.x);\n\taxis = normalize(axis);\n\tgl_FragColor = vec4(0.0);\n\tgl_FragColor.rgb += weights[0] * getSample(0.0, axis);\n\tfor (int i = 1; i < n; i++) {\n\t\tif (i >= samples)\n\t\t\tbreak;\n\t\tfloat theta = dTheta * float(i);\n\t\tgl_FragColor.rgb += weights[i] * getSample(-1.0 * theta, axis);\n\t\tgl_FragColor.rgb += weights[i] * getSample(theta, axis);\n\t}\n\tgl_FragColor = linearToOutputTexel(gl_FragColor);\n}\n\t\t`,blending:0,depthTest:!1,depthWrite:!1})).type="SphericalGaussianBlur",wl),Rl=null,Tl=null,{_lodPlanes:kl,_sizeLods:Dl,_sigmas:Ll}=function(){for(var A=[],e=[],t=[],i=8,o=0;Ul>o;o++){var n=Math.pow(2,i);e.push(n);var r=1/n;o>4?r=bl[o-8+4-1]:0==o&&(r=0),t.push(r);for(var a=1/(n-1),s=-a/2,l=1+a/2,c=[s,s,l,s,l,l,s,s,l,l,s,l],h=new Float32Array(108),d=new Float32Array(72),p=new Float32Array(36),g=0;6>g;g++){var u=g%3*2/3-1,f=g>2?0:-1;h.set([u,f,0,u+2/3,f,0,u+2/3,f+1,0,u,f,0,u+2/3,f+1,0,u,f+1,0],18*g),d.set(c,12*g),p.set([g,g,g,g,g,g],6*g)}var m=new he;m.setAttribute("position",new YA(h,3)),m.setAttribute("uv",new YA(d,2)),m.setAttribute("faceIndex",new YA(p,1)),A.push(m),i>4&&i--}return{_lodPlanes:A,_sizeLods:e,_sigmas:t}}(),Nl=null,Ol=null,Vl=null,Gl=(1+Math.sqrt(5))/2,Pl=1/Gl,ql=[new y(1,1,1),new y(-1,1,1),new y(1,1,-1),new y(-1,1,-1),new y(0,Gl,Pl),new y(0,Gl,-Pl),new y(Pl,0,Gl),new y(-Pl,0,Gl),new y(Gl,Pl,0),new y(-Gl,Pl,0)];function jl(A){Ol=A,Wl(Ql)}function Hl(A){var e={magFilter:1003,minFilter:1003,generateMipmaps:!1,type:A?A.type:1009,format:A?A.format:1023,encoding:A?A.encoding:3002,depthBuffer:!1,stencilBuffer:!1},t=Jl(e);return t.depthBuffer=!A,Nl=Jl(e),t}function Yl(A){Nl.dispose(),Ol.setRenderTarget(Vl),A.scissorTest=!1,A.setSize(A.width,A.height)}function Wl(A){var e=new Y;e.add(new Ue(kl[0],A)),Ol.compile(e,Kl)}function Jl(A){var e=new g(3*Ml,3*Ml,A);return e.texture.mapping=306,e.texture.name="PMREM.cubeUv",e.scissorTest=!0,e}function zl(A,e,t,i,o){A.viewport.set(e,t,i,o),A.scissor.set(e,t,i,o)}function Zl(A){var e=Ol.autoClear;Ol.autoClear=!1;for(var t=1;Ul>t;t++){Xl(A,t-1,t,Math.sqrt(Ll[t]*Ll[t]-Ll[t-1]*Ll[t-1]),ql[(t-1)%ql.length])}Ol.autoClear=e}function Xl(A,e,t,i,o){_l(A,Nl,e,t,i,"latitudinal",o),_l(Nl,A,t,t,i,"longitudinal",o)}function _l(A,e,t,i,o,n,r){"latitudinal"!==n&&"longitudinal"!==n&&console.error("blur direction must be either latitudinal or longitudinal!");var a=new Y;a.add(new Ue(kl[i],Ql));var s=Ql.uniforms,l=Dl[t]-1,c=isFinite(o)?Math.PI/(2*l):2*Math.PI/39,h=o/c,d=isFinite(o)?1+Math.floor(3*h):20;d>20&&console.warn(`sigmaRadians, ${o}, is too large and will clip, as it requested ${d} samples when the maximum is set to 20`);for(var p=[],g=0,u=0;20>u;++u){var f=u/h,m=Math.exp(-f*f/2);p.push(m),0==u?g+=m:d>u&&(g+=2*m)}for(u=0;p.length>u;u++)p[u]=p[u]/g;s.envMap.value=A.texture,s.samples.value=d,s.weights.value=p,s.latitudinal.value="latitudinal"===n,r&&(s.poleAxis.value=r),s.dTheta.value=c,s.mipInt.value=8-t,s.inputEncoding.value=Fl[A.texture.encoding],s.outputEncoding.value=Fl[A.texture.encoding];var C=Dl[i];zl(e,f=3*Math.max(0,Ml-2*C),(0===i?0:2*Ml)+2*C*(i>4?i-8+4:0),3*C,2*C),Ol.setRenderTarget(e),Ol.render(a,Kl)}function $l(){var A=new Cr({uniforms:{envMap:{value:null},texelSize:{value:new s(1,1)},inputEncoding:{value:Fl[3e3]},outputEncoding:{value:Fl[3e3]}},vertexShader:ec(),fragmentShader:`\nprecision mediump float;\nprecision mediump int;\nvarying vec3 vOutputDirection;\nuniform sampler2D envMap;\nuniform vec2 texelSize;\n\n${tc()}\n\n#define RECIPROCAL_PI 0.31830988618\n#define RECIPROCAL_PI2 0.15915494\n\nvoid main() {\n\tgl_FragColor = vec4(0.0);\n\tvec3 outputDirection = normalize(vOutputDirection);\n\tvec2 uv;\n\tuv.y = asin(clamp(outputDirection.y, -1.0, 1.0)) * RECIPROCAL_PI + 0.5;\n\tuv.x = atan(outputDirection.z, outputDirection.x) * RECIPROCAL_PI2 + 0.5;\n\tvec2 f = fract(uv / texelSize - 0.5);\n\tuv -= f * texelSize;\n\tvec3 tl = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n\tuv.x += texelSize.x;\n\tvec3 tr = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n\tuv.y += texelSize.y;\n\tvec3 br = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n\tuv.x -= texelSize.x;\n\tvec3 bl = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n\tvec3 tm = mix(tl, tr, f.x);\n\tvec3 bm = mix(bl, br, f.x);\n\tgl_FragColor.rgb = mix(tm, bm, f.y);\n\tgl_FragColor = linearToOutputTexel(gl_FragColor);\n}\n\t\t`,blending:0,depthTest:!1,depthWrite:!1});return A.type="EquirectangularToCubeUV",A}function Ac(){var A=new Cr({uniforms:{envMap:{value:null},inputEncoding:{value:Fl[3e3]},outputEncoding:{value:Fl[3e3]}},vertexShader:ec(),fragmentShader:`\nprecision mediump float;\nprecision mediump int;\nvarying vec3 vOutputDirection;\nuniform samplerCube envMap;\n\n${tc()}\n\nvoid main() {\n\tgl_FragColor = vec4(0.0);\n\tgl_FragColor.rgb = envMapTexelToLinear(textureCube(envMap, vec3( - vOutputDirection.x, vOutputDirection.yz ))).rgb;\n\tgl_FragColor = linearToOutputTexel(gl_FragColor);\n}\n\t\t`,blending:0,depthTest:!1,depthWrite:!1});return A.type="CubemapToCubeUV",A}function ec(){return"\nprecision mediump float;\nprecision mediump int;\nattribute vec3 position;\nattribute vec2 uv;\nattribute float faceIndex;\nvarying vec3 vOutputDirection;\nvec3 getDirection(vec2 uv, float face) {\n\tuv = 2.0 * uv - 1.0;\n\tvec3 direction = vec3(uv, 1.0);\n\tif (face == 0.0) {\n\t\tdirection = direction.zyx;\n\t\tdirection.z *= -1.0;\n\t} else if (face == 1.0) {\n\t\tdirection = direction.xzy;\n\t\tdirection.z *= -1.0;\n\t} else if (face == 3.0) {\n\t\tdirection = direction.zyx;\n\t\tdirection.x *= -1.0;\n\t} else if (face == 4.0) {\n\t\tdirection = direction.xzy;\n\t\tdirection.y *= -1.0;\n\t} else if (face == 5.0) {\n\t\tdirection.xz *= -1.0;\n\t}\n\treturn direction;\n}\nvoid main() {\n\tvOutputDirection = getDirection(uv, faceIndex);\n\tgl_Position = vec4( position, 1.0 );\n}\n\t"}function tc(){return"\nuniform int inputEncoding;\nuniform int outputEncoding;\n\n#include \n\nvec4 inputTexelToLinear(vec4 value){\n\tif(inputEncoding == 0){\n\t\treturn value;\n\t}else if(inputEncoding == 1){\n\t\treturn sRGBToLinear(value);\n\t}else if(inputEncoding == 2){\n\t\treturn RGBEToLinear(value);\n\t}else if(inputEncoding == 3){\n\t\treturn RGBMToLinear(value, 7.0);\n\t}else if(inputEncoding == 4){\n\t\treturn RGBMToLinear(value, 16.0);\n\t}else if(inputEncoding == 5){\n\t\treturn RGBDToLinear(value, 256.0);\n\t}else{\n\t\treturn GammaToLinear(value, 2.2);\n\t}\n}\n\nvec4 linearToOutputTexel(vec4 value){\n\tif(outputEncoding == 0){\n\t\treturn value;\n\t}else if(outputEncoding == 1){\n\t\treturn LinearTosRGB(value);\n\t}else if(outputEncoding == 2){\n\t\treturn LinearToRGBE(value);\n\t}else if(outputEncoding == 3){\n\t\treturn LinearToRGBM(value, 7.0);\n\t}else if(outputEncoding == 4){\n\t\treturn LinearToRGBM(value, 16.0);\n\t}else if(outputEncoding == 5){\n\t\treturn LinearToRGBD(value, 256.0);\n\t}else{\n\t\treturn LinearToGamma(value, 2.2);\n\t}\n}\n\nvec4 envMapTexelToLinear(vec4 color) {\n\treturn inputTexelToLinear(color);\n}\n\t"}jl.prototype={constructor:jl,fromScene:function(A,e=0,t=.1,i=100){Vl=Ol.getRenderTarget();var o=Hl();return function(A,e,t,i){var o=new je(90,1,e,t),n=[1,1,1,1,-1,1],r=[1,1,-1,-1,-1,1],a=Ol.outputEncoding,s=Ol.toneMapping,l=Ol.toneMappingExposure,c=Ol.getClearColor(),h=Ol.getClearAlpha();Ol.toneMapping=1,Ol.toneMappingExposure=1,Ol.outputEncoding=3e3,A.scale.z*=-1;var d=A.background;if(d&&d.isColor){d.convertSRGBToLinear();var p=Math.max(d.r,d.g,d.b),g=Math.min(Math.max(Math.ceil(Math.log2(p)),-128),127);d=d.multiplyScalar(Math.pow(2,-g)),Ol.setClearColor(d,(g+128)/255),A.background=null}for(var u=0;6>u;u++){var f=u%3;0==f?(o.up.set(0,n[u],0),o.lookAt(r[u],0,0)):1==f?(o.up.set(0,0,n[u]),o.lookAt(0,r[u],0)):(o.up.set(0,n[u],0),o.lookAt(0,0,r[u])),zl(i,f*Ml,u>2?Ml:0,Ml,Ml),Ol.setRenderTarget(i),Ol.render(A,o)}Ol.toneMapping=s,Ol.toneMappingExposure=l,Ol.outputEncoding=a,Ol.setClearColor(c,h),A.scale.z*=-1}(A,t,i,o),e>0&&Xl(o,0,0,e),Zl(o),Yl(o),o},fromEquirectangular:function(A){return A.magFilter=1003,A.minFilter=1003,A.generateMipmaps=!1,this.fromCubemap(A)},fromCubemap:function(A){Vl=Ol.getRenderTarget();var e=Hl(A);return function(A,e){var t=new Y;A.isCubeTexture?null==Tl&&(Tl=Ac()):null==Rl&&(Rl=$l());var i=A.isCubeTexture?Tl:Rl;t.add(new Ue(kl[0],i));var o=i.uniforms;o.envMap.value=A,A.isCubeTexture||o.texelSize.value.set(1/A.image.width,1/A.image.height);o.inputEncoding.value=Fl[A.encoding],o.outputEncoding.value=Fl[A.encoding],zl(e,0,0,3*Ml,2*Ml),Ol.setRenderTarget(e),Ol.render(t,Kl)}(A,e),Zl(e),Yl(e),e},compileCubemapShader:function(){null==Tl&&Wl(Tl=Ac())},compileEquirectangularShader:function(){null==Rl&&Wl(Rl=$l())},dispose:function(){Ql.dispose(),null!=Tl&&Tl.dispose(),null!=Rl&&Rl.dispose();for(var A=0;kl.length>A;A++)kl[A].dispose()}};function ic(A){console.warn("THREE.ClosedSplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead."),la.call(this,A),this.type="catmullrom",this.closed=!0}function oc(A){console.warn("THREE.SplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead."),la.call(this,A),this.type="catmullrom"}function nc(A){console.warn("THREE.Spline has been removed. Use THREE.CatmullRomCurve3 instead."),la.call(this,A),this.type="catmullrom"}ea.create=function(A,e){return console.log("THREE.Curve.create() has been deprecated"),A.prototype=Object.create(ea.prototype),A.prototype.constructor=A,A.prototype.getPoint=e,A},Object.assign(Ia.prototype,{createPointsGeometry:function(A){console.warn("THREE.CurvePath: .createPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.");var e=this.getPoints(A);return this.createGeometry(e)},createSpacedPointsGeometry:function(A){console.warn("THREE.CurvePath: .createSpacedPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.");var e=this.getSpacedPoints(A);return this.createGeometry(e)},createGeometry:function(A){console.warn("THREE.CurvePath: .createGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.");for(var e=new De,t=0,i=A.length;i>t;t++){var o=A[t];e.vertices.push(new y(o.x,o.y,o.z||0))}return e}}),Object.assign(Ea.prototype,{fromPoints:function(A){return console.warn("THREE.Path: .fromPoints() has been renamed to .setFromPoints()."),this.setFromPoints(A)}}),ic.prototype=Object.create(la.prototype),oc.prototype=Object.create(la.prototype),nc.prototype=Object.create(la.prototype),Object.assign(nc.prototype,{initFromArray:function(){console.error("THREE.Spline: .initFromArray() has been removed.")},getControlPointsArray:function(){console.error("THREE.Spline: .getControlPointsArray() has been removed.")},reparametrizeByArcLength:function(){console.error("THREE.Spline: .reparametrizeByArcLength() has been removed.")}}),ol.prototype.setColors=function(){console.error("THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.")},_s.prototype.update=function(){console.error("THREE.SkeletonHelper: update() no longer needs to be called.")},Object.assign(Yr.prototype,{extractUrlBase:function(A){return console.warn("THREE.Loader: .extractUrlBase() has been deprecated. Use THREE.LoaderUtils.extractUrlBase() instead."),La.extractUrlBase(A)}}),Yr.Handlers={add:function(){console.error("THREE.Loader: Handlers.add() has been removed. Use LoadingManager.addHandler() instead.")},get:function(){console.error("THREE.Loader: Handlers.get() has been removed. Use LoadingManager.getHandler() instead.")}},Object.assign(Pa.prototype,{setTexturePath:function(A){return console.warn("THREE.ObjectLoader: .setTexturePath() has been renamed to .setResourcePath()."),this.setResourcePath(A)}}),Object.assign(Ps.prototype,{center:function(A){return console.warn("THREE.Box2: .center() has been renamed to .getCenter()."),this.getCenter(A)},empty:function(){return console.warn("THREE.Box2: .empty() has been renamed to .isEmpty()."),this.isEmpty()},isIntersectionBox:function(A){return console.warn("THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox()."),this.intersectsBox(A)},size:function(A){return console.warn("THREE.Box2: .size() has been renamed to .getSize()."),this.getSize(A)}}),Object.assign(aA.prototype,{center:function(A){return console.warn("THREE.Box3: .center() has been renamed to .getCenter()."),this.getCenter(A)},empty:function(){return console.warn("THREE.Box3: .empty() has been renamed to .isEmpty()."),this.isEmpty()},isIntersectionBox:function(A){return console.warn("THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox()."),this.intersectsBox(A)},isIntersectionSphere:function(A){return console.warn("THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere()."),this.intersectsSphere(A)},size:function(A){return console.warn("THREE.Box3: .size() has been renamed to .getSize()."),this.getSize(A)}}),Ze.prototype.setFromMatrix=function(A){return console.warn("THREE.Frustum: .setFromMatrix() has been renamed to .setFromProjectionMatrix()."),this.setFromProjectionMatrix(A)},Hs.prototype.center=function(A){return console.warn("THREE.Line3: .center() has been renamed to .getCenter()."),this.getCenter(A)},Object.assign(a,{random16:function(){return console.warn("THREE.Math: .random16() has been deprecated. Use Math.random() instead."),Math.random()},nearestPowerOfTwo:function(A){return console.warn("THREE.Math: .nearestPowerOfTwo() has been renamed to .floorPowerOfTwo()."),a.floorPowerOfTwo(A)},nextPowerOfTwo:function(A){return console.warn("THREE.Math: .nextPowerOfTwo() has been renamed to .ceilPowerOfTwo()."),a.ceilPowerOfTwo(A)}}),Object.assign(l.prototype,{flattenToArrayOffset:function(A,e){return console.warn("THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead."),this.toArray(A,e)},multiplyVector3:function(A){return console.warn("THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead."),A.applyMatrix3(this)},multiplyVector3Array:function(){console.error("THREE.Matrix3: .multiplyVector3Array() has been removed.")},applyToBufferAttribute:function(A){return console.warn("THREE.Matrix3: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix3( matrix ) instead."),A.applyMatrix3(this)},applyToVector3Array:function(){console.error("THREE.Matrix3: .applyToVector3Array() has been removed.")}}),Object.assign(M.prototype,{extractPosition:function(A){return console.warn("THREE.Matrix4: .extractPosition() has been renamed to .copyPosition()."),this.copyPosition(A)},flattenToArrayOffset:function(A,e){return console.warn("THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead."),this.toArray(A,e)},getPosition:function(){return console.warn("THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead."),(new y).setFromMatrixColumn(this,3)},setRotationFromQuaternion:function(A){return console.warn("THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion()."),this.makeRotationFromQuaternion(A)},multiplyToArray:function(){console.warn("THREE.Matrix4: .multiplyToArray() has been removed.")},multiplyVector3:function(A){return console.warn("THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead."),A.applyMatrix4(this)},multiplyVector4:function(A){return console.warn("THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead."),A.applyMatrix4(this)},multiplyVector3Array:function(){console.error("THREE.Matrix4: .multiplyVector3Array() has been removed.")},rotateAxis:function(A){console.warn("THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead."),A.transformDirection(this)},crossVector:function(A){return console.warn("THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead."),A.applyMatrix4(this)},translate:function(){console.error("THREE.Matrix4: .translate() has been removed.")},rotateX:function(){console.error("THREE.Matrix4: .rotateX() has been removed.")},rotateY:function(){console.error("THREE.Matrix4: .rotateY() has been removed.")},rotateZ:function(){console.error("THREE.Matrix4: .rotateZ() has been removed.")},rotateByAxis:function(){console.error("THREE.Matrix4: .rotateByAxis() has been removed.")},applyToBufferAttribute:function(A){return console.warn("THREE.Matrix4: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix4( matrix ) instead."),A.applyMatrix4(this)},applyToVector3Array:function(){console.error("THREE.Matrix4: .applyToVector3Array() has been removed.")},makeFrustum:function(A,e,t,i,o,n){return console.warn("THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead."),this.makePerspective(A,e,i,t,o,n)}}),EA.prototype.isIntersectionLine=function(A){return console.warn("THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine()."),this.intersectsLine(A)},f.prototype.multiplyVector3=function(A){return console.warn("THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead."),A.applyQuaternion(this)},Object.assign(CA.prototype,{isIntersectionBox:function(A){return console.warn("THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox()."),this.intersectsBox(A)},isIntersectionPlane:function(A){return console.warn("THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane()."),this.intersectsPlane(A)},isIntersectionSphere:function(A){return console.warn("THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere()."),this.intersectsSphere(A)}}),Object.assign(RA.prototype,{area:function(){return console.warn("THREE.Triangle: .area() has been renamed to .getArea()."),this.getArea()},barycoordFromPoint:function(A,e){return console.warn("THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord()."),this.getBarycoord(A,e)},midpoint:function(A){return console.warn("THREE.Triangle: .midpoint() has been renamed to .getMidpoint()."),this.getMidpoint(A)},normal:function(A){return console.warn("THREE.Triangle: .normal() has been renamed to .getNormal()."),this.getNormal(A)},plane:function(A){return console.warn("THREE.Triangle: .plane() has been renamed to .getPlane()."),this.getPlane(A)}}),Object.assign(RA,{barycoordFromPoint:function(A,e,t,i,o){return console.warn("THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord()."),RA.getBarycoord(A,e,t,i,o)},normal:function(A,e,t,i){return console.warn("THREE.Triangle: .normal() has been renamed to .getNormal()."),RA.getNormal(A,e,t,i)}}),Object.assign(Ba.prototype,{extractAllPoints:function(A){return console.warn("THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead."),this.extractPoints(A)},extrude:function(A){return console.warn("THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead."),new Jn(this,A)},makeGeometry:function(A){return console.warn("THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead."),new rr(this,A)}}),Object.assign(s.prototype,{fromAttribute:function(A,e,t){return console.warn("THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute()."),this.fromBufferAttribute(A,e,t)},distanceToManhattan:function(A){return console.warn("THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo()."),this.manhattanDistanceTo(A)},lengthManhattan:function(){return console.warn("THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength()."),this.manhattanLength()}}),Object.assign(y.prototype,{setEulerFromRotationMatrix:function(){console.error("THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.")},setEulerFromQuaternion:function(){console.error("THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.")},getPositionFromMatrix:function(A){return console.warn("THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition()."),this.setFromMatrixPosition(A)},getScaleFromMatrix:function(A){return console.warn("THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale()."),this.setFromMatrixScale(A)},getColumnFromMatrix:function(A,e){return console.warn("THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn()."),this.setFromMatrixColumn(e,A)},applyProjection:function(A){return console.warn("THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead."),this.applyMatrix4(A)},fromAttribute:function(A,e,t){return console.warn("THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute()."),this.fromBufferAttribute(A,e,t)},distanceToManhattan:function(A){return console.warn("THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo()."),this.manhattanDistanceTo(A)},lengthManhattan:function(){return console.warn("THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength()."),this.manhattanLength()}}),Object.assign(p.prototype,{fromAttribute:function(A,e,t){return console.warn("THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute()."),this.fromBufferAttribute(A,e,t)},lengthManhattan:function(){return console.warn("THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength()."),this.manhattanLength()}}),Object.assign(De.prototype,{computeTangents:function(){console.error("THREE.Geometry: .computeTangents() has been removed.")},computeLineDistances:function(){console.error("THREE.Geometry: .computeLineDistances() has been removed. Use THREE.Line.computeLineDistances() instead.")},applyMatrix:function(A){return console.warn("THREE.Geometry: .applyMatrix() has been renamed to .applyMatrix4()."),this.applyMatrix4(A)}}),Object.assign(H.prototype,{getChildByName:function(A){return console.warn("THREE.Object3D: .getChildByName() has been renamed to .getObjectByName()."),this.getObjectByName(A)},renderDepth:function(){console.warn("THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.")},translate:function(A,e){return console.warn("THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead."),this.translateOnAxis(e,A)},getWorldRotation:function(){console.error("THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.")},applyMatrix:function(A){return console.warn("THREE.Object3D: .applyMatrix() has been renamed to .applyMatrix4()."),this.applyMatrix4(A)}}),Object.defineProperties(H.prototype,{eulerOrder:{get:function(){return console.warn("THREE.Object3D: .eulerOrder is now .rotation.order."),this.rotation.order},set:function(A){console.warn("THREE.Object3D: .eulerOrder is now .rotation.order."),this.rotation.order=A}},useQuaternion:{get:function(){console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.")},set:function(){console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.")}}}),Object.assign(Ue.prototype,{setDrawMode:function(){console.error("THREE.Mesh: .setDrawMode() has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.")}}),Object.defineProperties(Ue.prototype,{drawMode:{get:function(){return console.error("THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode."),0},set:function(){console.error("THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.")}}}),Object.defineProperties(xo.prototype,{objects:{get:function(){return console.warn("THREE.LOD: .objects has been renamed to .levels."),this.levels}}}),Object.defineProperty(bo.prototype,"useVertexTexture",{get:function(){console.warn("THREE.Skeleton: useVertexTexture has been removed.")},set:function(){console.warn("THREE.Skeleton: useVertexTexture has been removed.")}}),So.prototype.initBones=function(){console.error("THREE.SkinnedMesh: initBones() has been removed.")},Object.defineProperty(ea.prototype,"__arcLengthDivisions",{get:function(){return console.warn("THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions."),this.arcLengthDivisions},set:function(A){console.warn("THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions."),this.arcLengthDivisions=A}}),je.prototype.setLens=function(A,e){console.warn("THREE.PerspectiveCamera.setLens is deprecated. Use .setFocalLength and .filmGauge for a photographic setup."),void 0!==e&&(this.filmGauge=e),this.setFocalLength(A)},Object.defineProperties(xa.prototype,{onlyShadow:{set:function(){console.warn("THREE.Light: .onlyShadow has been removed.")}},shadowCameraFov:{set:function(A){console.warn("THREE.Light: .shadowCameraFov is now .shadow.camera.fov."),this.shadow.camera.fov=A}},shadowCameraLeft:{set:function(A){console.warn("THREE.Light: .shadowCameraLeft is now .shadow.camera.left."),this.shadow.camera.left=A}},shadowCameraRight:{set:function(A){console.warn("THREE.Light: .shadowCameraRight is now .shadow.camera.right."),this.shadow.camera.right=A}},shadowCameraTop:{set:function(A){console.warn("THREE.Light: .shadowCameraTop is now .shadow.camera.top."),this.shadow.camera.top=A}},shadowCameraBottom:{set:function(A){console.warn("THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom."),this.shadow.camera.bottom=A}},shadowCameraNear:{set:function(A){console.warn("THREE.Light: .shadowCameraNear is now .shadow.camera.near."),this.shadow.camera.near=A}},shadowCameraFar:{set:function(A){console.warn("THREE.Light: .shadowCameraFar is now .shadow.camera.far."),this.shadow.camera.far=A}},shadowCameraVisible:{set:function(){console.warn("THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.")}},shadowBias:{set:function(A){console.warn("THREE.Light: .shadowBias is now .shadow.bias."),this.shadow.bias=A}},shadowDarkness:{set:function(){console.warn("THREE.Light: .shadowDarkness has been removed.")}},shadowMapWidth:{set:function(A){console.warn("THREE.Light: .shadowMapWidth is now .shadow.mapSize.width."),this.shadow.mapSize.width=A}},shadowMapHeight:{set:function(A){console.warn("THREE.Light: .shadowMapHeight is now .shadow.mapSize.height."),this.shadow.mapSize.height=A}}}),Object.defineProperties(YA.prototype,{length:{get:function(){return console.warn("THREE.BufferAttribute: .length has been deprecated. Use .count instead."),this.array.length}},dynamic:{get:function(){return console.warn("THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead."),35048===this.usage},set:function(){console.warn("THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead."),this.setUsage(35048)}}}),Object.assign(YA.prototype,{setDynamic:function(A){return console.warn("THREE.BufferAttribute: .setDynamic() has been deprecated. Use .setUsage() instead."),this.setUsage(!0===A?35048:35044),this},copyIndicesArray:function(){console.error("THREE.BufferAttribute: .copyIndicesArray() has been removed.")},setArray:function(){console.error("THREE.BufferAttribute: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers")}}),Object.assign(he.prototype,{addIndex:function(A){console.warn("THREE.BufferGeometry: .addIndex() has been renamed to .setIndex()."),this.setIndex(A)},addAttribute:function(A,e){return console.warn("THREE.BufferGeometry: .addAttribute() has been renamed to .setAttribute()."),e&&e.isBufferAttribute||e&&e.isInterleavedBufferAttribute?"index"===A?(console.warn("THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute."),this.setIndex(e),this):this.setAttribute(A,e):(console.warn("THREE.BufferGeometry: .addAttribute() now expects ( name, attribute )."),this.setAttribute(A,new YA(arguments[1],arguments[2])))},addDrawCall:function(A,e,t){void 0!==t&&console.warn("THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset."),console.warn("THREE.BufferGeometry: .addDrawCall() is now .addGroup()."),this.addGroup(A,e)},clearDrawCalls:function(){console.warn("THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups()."),this.clearGroups()},computeTangents:function(){console.warn("THREE.BufferGeometry: .computeTangents() has been removed.")},computeOffsets:function(){console.warn("THREE.BufferGeometry: .computeOffsets() has been removed.")},removeAttribute:function(A){return console.warn("THREE.BufferGeometry: .removeAttribute() has been renamed to .deleteAttribute()."),this.deleteAttribute(A)},applyMatrix:function(A){return console.warn("THREE.BufferGeometry: .applyMatrix() has been renamed to .applyMatrix4()."),this.applyMatrix4(A)}}),Object.defineProperties(he.prototype,{drawcalls:{get:function(){return console.error("THREE.BufferGeometry: .drawcalls has been renamed to .groups."),this.groups}},offsets:{get:function(){return console.warn("THREE.BufferGeometry: .offsets has been renamed to .groups."),this.groups}}}),Object.defineProperties(Ds.prototype,{linePrecision:{get:function(){return console.warn("THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead."),this.params.Line.threshold},set:function(A){console.warn("THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead."),this.params.Line.threshold=A}}}),Object.defineProperties(to.prototype,{dynamic:{get:function(){return console.warn("THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead."),35048===this.usage},set:function(A){console.warn("THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead."),this.setUsage(A)}}}),Object.assign(to.prototype,{setDynamic:function(A){return console.warn("THREE.InterleavedBuffer: .setDynamic() has been deprecated. Use .setUsage() instead."),this.setUsage(!0===A?35048:35044),this},setArray:function(){console.error("THREE.InterleavedBuffer: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers")}}),Object.assign(zn.prototype,{getArrays:function(){console.error("THREE.ExtrudeBufferGeometry: .getArrays() has been removed.")},addShapeList:function(){console.error("THREE.ExtrudeBufferGeometry: .addShapeList() has been removed.")},addShape:function(){console.error("THREE.ExtrudeBufferGeometry: .addShape() has been removed.")}}),Object.defineProperties(Ts.prototype,{dynamic:{set:function(){console.warn("THREE.Uniform: .dynamic has been removed. Use object.onBeforeRender() instead.")}},onUpdate:{value:function(){return console.warn("THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead."),this}}}),Object.defineProperties(qA.prototype,{wrapAround:{get:function(){console.warn("THREE.Material: .wrapAround has been removed.")},set:function(){console.warn("THREE.Material: .wrapAround has been removed.")}},overdraw:{get:function(){console.warn("THREE.Material: .overdraw has been removed.")},set:function(){console.warn("THREE.Material: .overdraw has been removed.")}},wrapRGB:{get:function(){return console.warn("THREE.Material: .wrapRGB has been removed."),new LA}},shading:{get:function(){console.error("THREE."+this.type+": .shading has been removed. Use the boolean .flatShading instead.")},set:function(A){console.warn("THREE."+this.type+": .shading has been removed. Use the boolean .flatShading instead."),this.flatShading=1===A}},stencilMask:{get:function(){return console.warn("THREE."+this.type+": .stencilMask has been removed. Use .stencilFuncMask instead."),this.stencilFuncMask},set:function(A){console.warn("THREE."+this.type+": .stencilMask has been removed. Use .stencilFuncMask instead."),this.stencilFuncMask=A}}}),Object.defineProperties(Ir.prototype,{metal:{get:function(){return console.warn("THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead."),!1},set:function(){console.warn("THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead")}}}),Object.defineProperties(Pe.prototype,{derivatives:{get:function(){return console.warn("THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives."),this.extensions.derivatives},set:function(A){console.warn("THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives."),this.extensions.derivatives=A}}}),Object.assign($i.prototype,{clearTarget:function(A,e,t,i){console.warn("THREE.WebGLRenderer: .clearTarget() has been deprecated. Use .setRenderTarget() and .clear() instead."),this.setRenderTarget(A),this.clear(e,t,i)},animate:function(A){console.warn("THREE.WebGLRenderer: .animate() is now .setAnimationLoop()."),this.setAnimationLoop(A)},getCurrentRenderTarget:function(){return console.warn("THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget()."),this.getRenderTarget()},getMaxAnisotropy:function(){return console.warn("THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy()."),this.capabilities.getMaxAnisotropy()},getPrecision:function(){return console.warn("THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision."),this.capabilities.precision},resetGLState:function(){return console.warn("THREE.WebGLRenderer: .resetGLState() is now .state.reset()."),this.state.reset()},supportsFloatTextures:function(){return console.warn("THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( 'OES_texture_float' )."),this.extensions.get("OES_texture_float")},supportsHalfFloatTextures:function(){return console.warn("THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( 'OES_texture_half_float' )."),this.extensions.get("OES_texture_half_float")},supportsStandardDerivatives:function(){return console.warn("THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( 'OES_standard_derivatives' )."),this.extensions.get("OES_standard_derivatives")},supportsCompressedTextureS3TC:function(){return console.warn("THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( 'WEBGL_compressed_texture_s3tc' )."),this.extensions.get("WEBGL_compressed_texture_s3tc")},supportsCompressedTexturePVRTC:function(){return console.warn("THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( 'WEBGL_compressed_texture_pvrtc' )."),this.extensions.get("WEBGL_compressed_texture_pvrtc")},supportsBlendMinMax:function(){return console.warn("THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( 'EXT_blend_minmax' )."),this.extensions.get("EXT_blend_minmax")},supportsVertexTextures:function(){return console.warn("THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures."),this.capabilities.vertexTextures},supportsInstancedArrays:function(){return console.warn("THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( 'ANGLE_instanced_arrays' )."),this.extensions.get("ANGLE_instanced_arrays")},enableScissorTest:function(A){console.warn("THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest()."),this.setScissorTest(A)},initMaterial:function(){console.warn("THREE.WebGLRenderer: .initMaterial() has been removed.")},addPrePlugin:function(){console.warn("THREE.WebGLRenderer: .addPrePlugin() has been removed.")},addPostPlugin:function(){console.warn("THREE.WebGLRenderer: .addPostPlugin() has been removed.")},updateShadowMap:function(){console.warn("THREE.WebGLRenderer: .updateShadowMap() has been removed.")},setFaceCulling:function(){console.warn("THREE.WebGLRenderer: .setFaceCulling() has been removed.")},allocTextureUnit:function(){console.warn("THREE.WebGLRenderer: .allocTextureUnit() has been removed.")},setTexture:function(){console.warn("THREE.WebGLRenderer: .setTexture() has been removed.")},setTexture2D:function(){console.warn("THREE.WebGLRenderer: .setTexture2D() has been removed.")},setTextureCube:function(){console.warn("THREE.WebGLRenderer: .setTextureCube() has been removed.")},getActiveMipMapLevel:function(){return console.warn("THREE.WebGLRenderer: .getActiveMipMapLevel() is now .getActiveMipmapLevel()."),this.getActiveMipmapLevel()}}),Object.defineProperties($i.prototype,{shadowMapEnabled:{get:function(){return this.shadowMap.enabled},set:function(A){console.warn("THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled."),this.shadowMap.enabled=A}},shadowMapType:{get:function(){return this.shadowMap.type},set:function(A){console.warn("THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type."),this.shadowMap.type=A}},shadowMapCullFace:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.")}},context:{get:function(){return console.warn("THREE.WebGLRenderer: .context has been removed. Use .getContext() instead."),this.getContext()}},vr:{get:function(){return console.warn("THREE.WebGLRenderer: .vr has been renamed to .xr"),this.xr}},gammaInput:{get:function(){return console.warn("THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead."),!1},set:function(){console.warn("THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.")}},gammaOutput:{get:function(){return console.warn("THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead."),!1},set:function(A){console.warn("THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead."),this.outputEncoding=!0===A?3001:3e3}}}),Object.defineProperties(Yi.prototype,{cullFace:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.")}},renderReverseSided:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.")}},renderSingleSided:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.")}}}),Object.defineProperties(g.prototype,{wrapS:{get:function(){return console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS."),this.texture.wrapS},set:function(A){console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS."),this.texture.wrapS=A}},wrapT:{get:function(){return console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT."),this.texture.wrapT},set:function(A){console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT."),this.texture.wrapT=A}},magFilter:{get:function(){return console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter."),this.texture.magFilter},set:function(A){console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter."),this.texture.magFilter=A}},minFilter:{get:function(){return console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter."),this.texture.minFilter},set:function(A){console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter."),this.texture.minFilter=A}},anisotropy:{get:function(){return console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy."),this.texture.anisotropy},set:function(A){console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy."),this.texture.anisotropy=A}},offset:{get:function(){return console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset."),this.texture.offset},set:function(A){console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset."),this.texture.offset=A}},repeat:{get:function(){return console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat."),this.texture.repeat},set:function(A){console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat."),this.texture.repeat=A}},format:{get:function(){return console.warn("THREE.WebGLRenderTarget: .format is now .texture.format."),this.texture.format},set:function(A){console.warn("THREE.WebGLRenderTarget: .format is now .texture.format."),this.texture.format=A}},type:{get:function(){return console.warn("THREE.WebGLRenderTarget: .type is now .texture.type."),this.texture.type},set:function(A){console.warn("THREE.WebGLRenderTarget: .type is now .texture.type."),this.texture.type=A}},generateMipmaps:{get:function(){return console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps."),this.texture.generateMipmaps},set:function(A){console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps."),this.texture.generateMipmaps=A}}}),Object.defineProperties(ps.prototype,{load:{value:function(A){console.warn("THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead.");var e=this;return(new $a).load(A,(function(A){e.setBuffer(A)})),this}},startTime:{set:function(){console.warn("THREE.Audio: .startTime is now .play( delay ).")}}}),ys.prototype.getData=function(){return console.warn("THREE.AudioAnalyser: .getData() is now .getFrequencyData()."),this.getFrequencyData()},He.prototype.updateCubeMap=function(A,e){return console.warn("THREE.CubeCamera: .updateCubeMap() is now .update()."),this.update(A,e)};var rc={merge:function(A,e,t){var i;console.warn("THREE.GeometryUtils: .merge() has been moved to Geometry. Use geometry.merge( geometry2, matrix, materialIndexOffset ) instead."),e.isMesh&&(e.matrixAutoUpdate&&e.updateMatrix(),i=e.matrix,e=e.geometry),A.merge(e,i,t)},center:function(A){return console.warn("THREE.GeometryUtils: .center() has been moved to Geometry. Use geometry.center() instead."),A.center()}};c.crossOrigin=void 0,c.loadTexture=function(A,e,t,i){console.warn("THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead.");var o=new Aa;o.setCrossOrigin(this.crossOrigin);var n=o.load(A,t,void 0,i);return e&&(n.mapping=e),n},c.loadTextureCube=function(A,e,t,i){console.warn("THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead.");var o=new $r;o.setCrossOrigin(this.crossOrigin);var n=o.load(A,t,void 0,i);return e&&(n.mapping=e),n},c.loadCompressedTexture=function(){console.error("THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.")},c.loadCompressedTextureCube=function(){console.error("THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.")};var ac={createMultiMaterialObject:function(){console.error("THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js")},detach:function(){console.error("THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js")},attach:function(){console.error("THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js")}};"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register",{detail:{revision:"115"}}));var sc=Object.freeze({ACESFilmicToneMapping:5,AddEquation:100,AddOperation:2,AdditiveBlending:2,AlphaFormat:1021,AlwaysDepth:1,AlwaysStencilFunc:519,AmbientLight:Ta,AmbientLightProbe:is,AnimationClip:Gr,AnimationLoader:zr,AnimationMixer:Rs,AnimationObjectGroup:Ks,AnimationUtils:br,ArcCurve:ia,ArrayCamera:Zi,ArrowHelper:Il,Audio:ps,AudioAnalyser:ys,AudioContext:_a,AudioListener:ds,AudioLoader:$a,AxesHelper:El,AxisHelper:function(A){return console.warn("THREE.AxisHelper has been renamed to THREE.AxesHelper."),new El(A)},BackSide:1,BasicDepthPacking:3200,BasicShadowMap:0,BinaryTextureLoader:function(A){return console.warn("THREE.BinaryTextureLoader has been renamed to THREE.DataTextureLoader."),new Xr(A)},Bone:Uo,BooleanKeyframeTrack:Tr,BoundingBoxHelper:function(A,e){return console.warn("THREE.BoundingBoxHelper has been deprecated. Creating a THREE.BoxHelper instead."),new ul(A,e)},Box2:Ps,Box3:aA,Box3Helper:fl,BoxBufferGeometry:Ne,BoxGeometry:Le,BoxHelper:ul,BufferAttribute:YA,BufferGeometry:he,BufferGeometryLoader:Va,ByteType:1010,Cache:qr,Camera:qe,CameraHelper:dl,CanvasRenderer:function(){console.error("THREE.CanvasRenderer has been removed")},CanvasTexture:en,CatmullRomCurve3:la,CineonToneMapping:4,CircleBufferGeometry:ur,CircleGeometry:gr,ClampToEdgeWrapping:1001,Clock:as,ClosedSplineCurve3:ic,Color:LA,ColorKeyframeTrack:kr,CompressedTexture:An,CompressedTextureLoader:Zr,ConeBufferGeometry:pr,ConeGeometry:dr,CubeCamera:He,CubeGeometry:Le,CubeReflectionMapping:301,CubeRefractionMapping:302,CubeTexture:ut,CubeTextureLoader:$r,CubeUVReflectionMapping:306,CubeUVRefractionMapping:307,CubicBezierCurve:pa,CubicBezierCurve3:ga,CubicInterpolant:Fr,CullFaceBack:1,CullFaceFront:2,CullFaceFrontBack:3,CullFaceNone:0,Curve:ea,CurvePath:Ia,CustomBlending:5,CylinderBufferGeometry:hr,CylinderGeometry:cr,Cylindrical:Vs,DataTexture:We,DataTexture2DArray:ft,DataTexture3D:mt,DataTextureLoader:Xr,DecrementStencilOp:7683,DecrementWrapStencilOp:34056,DefaultLoadingManager:Hr,DepthFormat:1026,DepthStencilFormat:1027,DepthTexture:tn,DirectionalLight:Ra,DirectionalLightHelper:ll,DirectionalLightShadow:Qa,DiscreteInterpolant:Qr,DodecahedronBufferGeometry:fn,DodecahedronGeometry:un,DoubleSide:2,DstAlphaFactor:206,DstColorFactor:208,DynamicBufferAttribute:function(A,e){return console.warn("THREE.DynamicBufferAttribute has been removed. Use new THREE.BufferAttribute().setUsage( THREE.DynamicDrawUsage ) instead."),new YA(A,e).setUsage(35048)},DynamicCopyUsage:35050,DynamicDrawUsage:35048,DynamicReadUsage:35049,EdgesGeometry:lr,EdgesHelper:function(A,e){return console.warn("THREE.EdgesHelper has been removed. Use THREE.EdgesGeometry instead."),new jo(new lr(A.geometry),new ko({color:void 0!==e?e:16777215}))},EllipseCurve:ta,EqualDepth:4,EqualStencilFunc:514,EquirectangularReflectionMapping:303,EquirectangularRefractionMapping:304,Euler:F,EventDispatcher:i,ExtrudeBufferGeometry:zn,ExtrudeGeometry:Jn,Face3:GA,Face4:function(A,e,t,i,o,n,r){return console.warn("THREE.Face4 has been removed. A THREE.Face3 will be created instead."),new GA(A,e,t,o,n,r)},FaceColors:1,FileLoader:Jr,FlatShading:1,Float32Attribute:function(A,e){return console.warn("THREE.Float32Attribute has been removed. Use new THREE.Float32BufferAttribute() instead."),new Ae(A,e)},Float32BufferAttribute:Ae,Float64Attribute:function(A,e){return console.warn("THREE.Float64Attribute has been removed. Use new THREE.Float64BufferAttribute() instead."),new ee(A,e)},Float64BufferAttribute:ee,FloatType:1015,Fog:eo,FogExp2:Ao,Font:za,FontLoader:Xa,FrontFaceDirectionCCW:1,FrontFaceDirectionCW:0,FrontSide:0,Frustum:Ze,GammaEncoding:3007,Geometry:De,GeometryUtils:rc,GreaterDepth:6,GreaterEqualDepth:5,GreaterEqualStencilFunc:518,GreaterStencilFunc:516,GridHelper:ol,Group:Xi,HalfFloatType:1016,HemisphereLight:Sa,HemisphereLightHelper:il,HemisphereLightProbe:ts,IcosahedronBufferGeometry:gn,IcosahedronGeometry:pn,ImageBitmapLoader:Wa,ImageLoader:_r,ImageUtils:c,ImmediateRenderObject:Ys,IncrementStencilOp:7682,IncrementWrapStencilOp:34055,InstancedBufferAttribute:Oa,InstancedBufferGeometry:Na,InstancedInterleavedBuffer:ks,InstancedMesh:To,Int16Attribute:function(A,e){return console.warn("THREE.Int16Attribute has been removed. Use new THREE.Int16BufferAttribute() instead."),new ZA(A,e)},Int16BufferAttribute:ZA,Int32Attribute:function(A,e){return console.warn("THREE.Int32Attribute has been removed. Use new THREE.Int32BufferAttribute() instead."),new _A(A,e)},Int32BufferAttribute:_A,Int8Attribute:function(A,e){return console.warn("THREE.Int8Attribute has been removed. Use new THREE.Int8BufferAttribute() instead."),new WA(A,e)},Int8BufferAttribute:WA,IntType:1013,InterleavedBuffer:to,InterleavedBufferAttribute:no,Interpolant:Ur,InterpolateDiscrete:2300,InterpolateLinear:2301,InterpolateSmooth:2302,InvertStencilOp:5386,JSONLoader:function(){console.error("THREE.JSONLoader has been removed.")},KeepStencilOp:7680,KeyframeTrack:Rr,LOD:xo,LatheBufferGeometry:nr,LatheGeometry:or,Layers:K,LensFlare:function(){console.error("THREE.LensFlare has been moved to /examples/jsm/objects/Lensflare.js")},LessDepth:2,LessEqualDepth:3,LessEqualStencilFunc:515,LessStencilFunc:513,Light:xa,LightProbe:es,LightShadow:wa,Line:Go,Line3:Hs,LineBasicMaterial:ko,LineCurve:ua,LineCurve3:fa,LineDashedMaterial:wr,LineLoop:Ho,LinePieces:1,LineSegments:jo,LineStrip:0,LinearEncoding:3e3,LinearFilter:1006,LinearInterpolant:Kr,LinearMipMapLinearFilter:1008,LinearMipMapNearestFilter:1007,LinearMipmapLinearFilter:1008,LinearMipmapNearestFilter:1007,LinearToneMapping:1,Loader:Yr,LoaderUtils:La,LoadingManager:jr,LogLuvEncoding:3003,LoopOnce:2200,LoopPingPong:2202,LoopRepeat:2201,LuminanceAlphaFormat:1025,LuminanceFormat:1024,MOUSE:t,Material:qA,MaterialLoader:Da,Math:a,MathUtils:a,Matrix3:l,Matrix4:M,MaxEquation:104,Mesh:Ue,MeshBasicMaterial:jA,MeshDepthMaterial:ji,MeshDistanceMaterial:Hi,MeshFaceMaterial:function(A){return console.warn("THREE.MeshFaceMaterial has been removed. Use an Array instead."),A},MeshLambertMaterial:xr,MeshMatcapMaterial:Sr,MeshNormalMaterial:Br,MeshPhongMaterial:Ir,MeshPhysicalMaterial:vr,MeshStandardMaterial:yr,MeshToonMaterial:Er,MinEquation:103,MirroredRepeatWrapping:1002,MixOperation:1,MultiMaterial:function(A){return void 0===A&&(A=[]),console.warn("THREE.MultiMaterial has been removed. Use an Array instead."),A.isMultiMaterial=!0,A.materials=A,A.clone=function(){return A.slice()},A},MultiplyBlending:4,MultiplyOperation:0,NearestFilter:1003,NearestMipMapLinearFilter:1005,NearestMipMapNearestFilter:1004,NearestMipmapLinearFilter:1005,NearestMipmapNearestFilter:1004,NeverDepth:0,NeverStencilFunc:512,NoBlending:0,NoColors:0,NoToneMapping:0,NormalBlending:1,NotEqualDepth:7,NotEqualStencilFunc:517,NumberKeyframeTrack:Dr,Object3D:H,ObjectLoader:Pa,ObjectSpaceNormalMap:1,OctahedronBufferGeometry:dn,OctahedronGeometry:hn,OneFactor:201,OneMinusDstAlphaFactor:207,OneMinusDstColorFactor:209,OneMinusSrcAlphaFactor:205,OneMinusSrcColorFactor:203,OrthographicCamera:Ka,PCFShadowMap:1,PCFSoftShadowMap:2,PMREMGenerator:jl,ParametricBufferGeometry:rn,ParametricGeometry:nn,Particle:function(A){return console.warn("THREE.Particle has been renamed to THREE.Sprite."),new vo(A)},ParticleBasicMaterial:function(A){return console.warn("THREE.ParticleBasicMaterial has been renamed to THREE.PointsMaterial."),new Yo(A)},ParticleSystem:function(A,e){return console.warn("THREE.ParticleSystem has been renamed to THREE.Points."),new Xo(A,e)},ParticleSystemMaterial:function(A){return console.warn("THREE.ParticleSystemMaterial has been renamed to THREE.PointsMaterial."),new Yo(A)},Path:Ea,PerspectiveCamera:je,Plane:EA,PlaneBufferGeometry:et,PlaneGeometry:At,PlaneHelper:ml,PointCloud:function(A,e){return console.warn("THREE.PointCloud has been renamed to THREE.Points."),new Xo(A,e)},PointCloudMaterial:function(A){return console.warn("THREE.PointCloudMaterial has been renamed to THREE.PointsMaterial."),new Yo(A)},PointLight:Fa,PointLightHelper:$s,Points:Xo,PointsMaterial:Yo,PolarGridHelper:nl,PolyhedronBufferGeometry:sn,PolyhedronGeometry:an,PositionalAudio:Cs,PropertyBinding:Fs,PropertyMixer:vs,QuadraticBezierCurve:ma,QuadraticBezierCurve3:Ca,Quaternion:f,QuaternionKeyframeTrack:Nr,QuaternionLinearInterpolant:Lr,REVISION:"115",RGBADepthPacking:3201,RGBAFormat:1023,RGBAIntegerFormat:1033,RGBA_ASTC_10x10_Format:37819,RGBA_ASTC_10x5_Format:37816,RGBA_ASTC_10x6_Format:37817,RGBA_ASTC_10x8_Format:37818,RGBA_ASTC_12x10_Format:37820,RGBA_ASTC_12x12_Format:37821,RGBA_ASTC_4x4_Format:37808,RGBA_ASTC_5x4_Format:37809,RGBA_ASTC_5x5_Format:37810,RGBA_ASTC_6x5_Format:37811,RGBA_ASTC_6x6_Format:37812,RGBA_ASTC_8x5_Format:37813,RGBA_ASTC_8x6_Format:37814,RGBA_ASTC_8x8_Format:37815,RGBA_BPTC_Format:36492,RGBA_ETC2_EAC_Format:37496,RGBA_PVRTC_2BPPV1_Format:35843,RGBA_PVRTC_4BPPV1_Format:35842,RGBA_S3TC_DXT1_Format:33777,RGBA_S3TC_DXT3_Format:33778,RGBA_S3TC_DXT5_Format:33779,RGBDEncoding:3006,RGBEEncoding:3002,RGBEFormat:1023,RGBFormat:1022,RGBIntegerFormat:1032,RGBM16Encoding:3005,RGBM7Encoding:3004,RGB_ETC1_Format:36196,RGB_ETC2_Format:37492,RGB_PVRTC_2BPPV1_Format:35841,RGB_PVRTC_4BPPV1_Format:35840,RGB_S3TC_DXT1_Format:33776,RGFormat:1030,RGIntegerFormat:1031,RawShaderMaterial:Cr,Ray:CA,Raycaster:Ds,RectAreaLight:ka,RedFormat:1028,RedIntegerFormat:1029,ReinhardToneMapping:2,RepeatWrapping:1e3,ReplaceStencilOp:7681,ReverseSubtractEquation:102,RingBufferGeometry:ir,RingGeometry:tr,SRGB8_ALPHA8_ASTC_10x10_Format:37851,SRGB8_ALPHA8_ASTC_10x5_Format:37848,SRGB8_ALPHA8_ASTC_10x6_Format:37849,SRGB8_ALPHA8_ASTC_10x8_Format:37850,SRGB8_ALPHA8_ASTC_12x10_Format:37852,SRGB8_ALPHA8_ASTC_12x12_Format:37853,SRGB8_ALPHA8_ASTC_4x4_Format:37840,SRGB8_ALPHA8_ASTC_5x4_Format:37841,SRGB8_ALPHA8_ASTC_5x5_Format:37842,SRGB8_ALPHA8_ASTC_6x5_Format:37843,SRGB8_ALPHA8_ASTC_6x6_Format:37844,SRGB8_ALPHA8_ASTC_8x5_Format:37845,SRGB8_ALPHA8_ASTC_8x6_Format:37846,SRGB8_ALPHA8_ASTC_8x8_Format:37847,Scene:Y,SceneUtils:ac,ShaderChunk:tt,ShaderLib:it,ShaderMaterial:Pe,ShadowMaterial:mr,Shape:Ba,ShapeBufferGeometry:ar,ShapeGeometry:rr,ShapePath:Ja,ShapeUtils:Hn,ShortType:1011,Skeleton:bo,SkeletonHelper:_s,SkinnedMesh:So,SmoothShading:2,Sphere:cA,SphereBufferGeometry:er,SphereGeometry:Ar,Spherical:Os,SphericalHarmonics3:As,SphericalReflectionMapping:305,Spline:nc,SplineCurve:ya,SplineCurve3:oc,SpotLight:ba,SpotLightHelper:Js,SpotLightShadow:Ma,Sprite:vo,SpriteMaterial:ro,SrcAlphaFactor:204,SrcAlphaSaturateFactor:210,SrcColorFactor:202,StaticCopyUsage:35046,StaticDrawUsage:35044,StaticReadUsage:35045,StereoCamera:rs,StreamCopyUsage:35042,StreamDrawUsage:35040,StreamReadUsage:35041,StringKeyframeTrack:Or,SubtractEquation:101,SubtractiveBlending:3,TOUCH:{ROTATE:0,PAN:1,DOLLY_PAN:2,DOLLY_ROTATE:3},TangentSpaceNormalMap:0,TetrahedronBufferGeometry:cn,TetrahedronGeometry:ln,TextBufferGeometry:$n,TextGeometry:_n,Texture:d,TextureLoader:Aa,TorusBufferGeometry:En,TorusGeometry:In,TorusKnotBufferGeometry:vn,TorusKnotGeometry:yn,Triangle:RA,TriangleFanDrawMode:2,TriangleStripDrawMode:1,TrianglesDrawMode:0,TubeBufferGeometry:Cn,TubeGeometry:mn,UVMapping:300,Uint16Attribute:function(A,e){return console.warn("THREE.Uint16Attribute has been removed. Use new THREE.Uint16BufferAttribute() instead."),new XA(A,e)},Uint16BufferAttribute:XA,Uint32Attribute:function(A,e){return console.warn("THREE.Uint32Attribute has been removed. Use new THREE.Uint32BufferAttribute() instead."),new $A(A,e)},Uint32BufferAttribute:$A,Uint8Attribute:function(A,e){return console.warn("THREE.Uint8Attribute has been removed. Use new THREE.Uint8BufferAttribute() instead."),new JA(A,e)},Uint8BufferAttribute:JA,Uint8ClampedAttribute:function(A,e){return console.warn("THREE.Uint8ClampedAttribute has been removed. Use new THREE.Uint8ClampedBufferAttribute() instead."),new zA(A,e)},Uint8ClampedBufferAttribute:zA,Uncharted2ToneMapping:3,Uniform:Ts,UniformsLib:Xe,UniformsUtils:Ge,UnsignedByteType:1009,UnsignedInt248Type:1020,UnsignedIntType:1014,UnsignedShort4444Type:1017,UnsignedShort5551Type:1018,UnsignedShort565Type:1019,UnsignedShortType:1012,VSMShadowMap:3,Vector2:s,Vector3:y,Vector4:p,VectorKeyframeTrack:Vr,Vertex:function(A,e,t){return console.warn("THREE.Vertex has been removed. Use THREE.Vector3 instead."),new y(A,e,t)},VertexColors:2,VideoTexture:$o,WebGLCubeRenderTarget:Ye,WebGLMultisampleRenderTarget:u,WebGLRenderTarget:g,WebGLRenderTargetCube:function(A,e,t){return console.warn("THREE.WebGLRenderTargetCube( width, height, options ) is now WebGLCubeRenderTarget( size, options )."),new Ye(A,t)},WebGLRenderer:$i,WebGLUtils:zi,WireframeGeometry:on,WireframeHelper:function(A,e){return console.warn("THREE.WireframeHelper has been removed. Use THREE.WireframeGeometry instead."),new jo(new on(A.geometry),new ko({color:void 0!==e?e:16777215}))},WrapAroundEnding:2402,XHRLoader:function(A){return console.warn("THREE.XHRLoader has been renamed to THREE.FileLoader."),new Jr(A)},ZeroCurvatureEnding:2400,ZeroFactor:200,ZeroSlopeEnding:2401,ZeroStencilOp:0,sRGBEncoding:3001});function lc(A){return(lc="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(A){return typeof A}:function(A){return A&&"function"==typeof Symbol&&A.constructor===Symbol&&A!==Symbol.prototype?"symbol":typeof A})(A)}function cc(A,e){if(!(A instanceof e))throw new TypeError("Cannot call a class as a function")}function hc(A,e){for(var t=0;e.length>t;t++){var i=e[t];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(A,i.key,i)}}function dc(A,e,t){return e&&hc(A.prototype,e),t&&hc(A,t),A}function pc(A,e,t){return e in A?Object.defineProperty(A,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):A[e]=t,A}function gc(A){for(var e=1;arguments.length>e;e++){var t=null!=arguments[e]?Object(arguments[e]):{},i=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(i=i.concat(Object.getOwnPropertySymbols(t).filter((function(A){return Object.getOwnPropertyDescriptor(t,A).enumerable})))),i.forEach((function(e){pc(A,e,t[e])}))}return A}function uc(A,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");A.prototype=Object.create(e&&e.prototype,{constructor:{value:A,writable:!0,configurable:!0}}),e&&mc(A,e)}function fc(A){return(fc=Object.setPrototypeOf?Object.getPrototypeOf:function(A){return A.__proto__||Object.getPrototypeOf(A)})(A)}function mc(A,e){return(mc=Object.setPrototypeOf||function(A,e){return A.__proto__=e,A})(A,e)}function Cc(A,e){return!e||"object"!=typeof e&&"function"!=typeof e?function(A){if(void 0===A)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return A}(A):e}function yc(A){return function(A){if(Array.isArray(A)){for(var e=0,t=new Array(A.length);A.length>e;e++)t[e]=A[e];return t}}(A)||function(A){if(Symbol.iterator in Object(A)||"[object Arguments]"===Object.prototype.toString.call(A))return Array.from(A)}(A)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}()}var vc={SceneSize:1e3,getDataFromIndexedDB:!0,TextureResRoot:"images/",UserControlView:!1,FillCavity:!1,EnableClippingCaps:!0,EnableBoxClippingCaps:!1,EnableTextureMapping:!0,EnableTextureLoading:!0,EnableLightmap:!1,EnableTransformAoMap:!0,LightmapIntensity:1,ClippingCaps:!1,SelectionColor:{color:2205669,side:2,opacity:.8,transparent:!0},DisableAntialias:!1,EnableDemolishByDClick:!1,IsMobile:!1,UseWorker:!1,ZipResourcePostfix:"",HasLayerData:!1,Renderer:1,Instance:!0,MergeComponent:!1,AutoMergeComponent:!0,AutoMergeComponentCount:1e4,MaxMergeCount:1e3,MergedTriangleNumberThreshold:2e7,MaxMergedTriangleNumber:2e7,IncrementRender:!1,EnableRenderPass:!1,LimitFrameTime:250,maxObjectNumInPool:1e3,maxDrawCacheNum:4e4,OctantDepth:15,MaximumDepth:0,TargetDistance:1e4,ConcurrencyRequestCount:16,ShowOctant:!1,EnableOctant:!1,EnableViewController:!0,DirectionalLight:!0,LightPreset:2,IBL:!1,ToneMapping:4,LightIntensityFactor:1,Hover:!1,OcclusionTranslucentEnabled:!1,OcclusionOpacity:.5,OcclusionDistanceToCamera:1e3,LineSelectRange:30,DrawingStyle:0,DrawingBoardlineEnabled:!0,InitWireframeData:!1,EnableHitDetection:!1,TranslucentDepthDisabled:!1,SharedMeshInstanceEnable:!1,DataProvider:0,EnableSelectionOutline:!0,EnableSelectionByTranslucent:!1,EnableSelectionBoundingBox:!1,EnableShadow:!1,EnableAnimation:!0,UseLods:!1,AutoPrepare:!0,DEBUG:!1,WalkingWithGravity:!1,WalkingWithViewLock:!1,RendererWhenLoad:!1,language:"zh-cn",LoadComponentOnDemand:!1,logarithmicDepthBuffer:!1,InfluencedByLight:!0,geometricErrorThresholdValue:80,MaximumAvailableMemory:500,DataReduction:!1,ConstraintZoom:!1,stepLoad:!1,useGzip:!1,notDepthWriteByTransparent:!1,PickingEffect:!0,PickingLineWidthEnabled:!0,loadBatch:!0,MiniMapSize:1024,alphaTest:.5,EnableCreateMiniMap:!1,MultipleSelectComponents:!0},Ic=F.RotationOrders,Ec={ORTHOGRAPHIC:"orth",PERSPECTIVE:"persp"},Bc={elements:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]},xc={elements:[1,0,0,0,1,0,0,0,1]},Sc={IfcOpeningElement:!0,IfcSpace:!0,OST_Rooms:!0,"房间":!0};Object.defineProperties(Sc,{"房间":{get:function(){return Sc.OST_Rooms},set:function(A){Sc.OST_Rooms=A}}});var wc,Mc,bc=new(Proxy||function(A){return A})(Sc,{deleteProperty:function(A,e){e in A&&("房间"===e&&delete A.OST_Rooms,delete A[e])}}),Uc={Keep:0,Home:135,Top:1,Bottom:2,Front:3,Back:4,Right:5,Left:6,TopFrontRight:135,TopFrontLeft:136,TopBackRight:145,TopBackLeft:146,BottomFrontRight:235,BottomFrontLeft:236,BottomBackRight:245,BottomBackLeft:246,TopFront:13,TopBack:14,TopRight:15,TopLeft:16,BottomFront:23,BottomBack:24,BottomRight:25,BottomLeft:26,FrontRight:35,FrontLeft:36,BackRight:45,BackLeft:46,TopToRight:105,TopToLeft:106,TopToFront:103,TopToBack:104,BottomToRight:205,BottomToLeft:206,BottomToFront:203,BottomToBack:204,FrontToTop:301,FrontToBottom:302,FrontToRight:305,FrontToLeft:306,BackToTop:401,BackToBottom:402,BackToRight:405,BackToLeft:406,RightToTop:501,RightToBottom:502,RightToFront:503,RightToBack:504,LeftToTop:601,LeftTopBottom:602,LeftTopFront:603,LeftTopBack:604},Fc={DirectionalLight:"directional",AmbientLight:"ambient",PointLight:"point",SpotLight:"spot"},Kc={Clear:0,Add:1,Remove:2},Qc={Geometry:1,Marker3d:2,Room:3,ExternalComponent:4,UnPickable:0},Rc={ON_LOAD_START:"ON_LOAD_START",ON_LOAD_PROGRESS:"ON_LOAD_PROGRESS",ON_LOAD_COMPLETE:"ON_LOAD_COMPLETE",ON_DEMAND_LOAD_COMPLETE:"ON_DEMAND_LOAD_COMPLETE",ON_LOAD_EMPTY_SCENE:"ON_LOAD_EMPTY_SCENE",ON_LOAD_CONFIG_FINISH:"ON_LOAD_CONFIG_FINISH",ON_LOAD_INVALID_SCENE:"ON_LOAD_INVALID_SCENE",ON_LOAD_INVALID_DATA:"ON_LOAD_INVALID_DATA",ON_NETWORK_ERROR:"ON_NETWORK_ERROR",ACCOUNT_NO_EXIST:"ACCOUNT_NO_EXIST",NO_PERMISSION:"NO_PERMISSION",ON_LOAD_ERROR:"ON_LOAD_ERROR",ON_SELECTION_CHANGED:"ON_SELECTION_CHANGED",ON_RECTPICK_ADD:"ON_RECTPICK_ADD",ON_RECTPICK_REMOVE:"ON_RECTPICK_REMOVE",ON_CLICK_PICK:"ON_CLICK_PICK",ON_HOVER_PICK:"ON_HOVER_PICK",ON_MEASURE_PICK:"ON_MEASURE_PICK",ON_SELECTION_FAILED:"ON_SELECTION_FAILED",ON_CLIP_HOVER:"ON_CLIP_HOVER",ON_HOVER_SNAP:"ON_HOVER_SNAP",ON_CLIP_MOUSE_MOVE:"ON_CLIP_MOUSE_MOVE",ON_CLIP_MOUSE_DOWN:"ON_CLIP_MOUSE_DOWN",ON_VERSION_NO_MATCH:"ON_VERSION_NO_MATCH",ON_VIEWER_RESTORED:"ON_VIEWER_RESTORED",ON_CAMERA_HEIGHT_CHANGED:"ON_CAMERA_HEIGHT_CHANGED",ON_CAMERA_CHANGED_AND_RENDERED:"ON_CAMERA_CHANGED_AND_RENDERED",ON_DATABASE_OPEN:"ON_DATABASE_OPEN",ON_DATABASE_CLOSE:"ON_DATABASE_CLOSE",ON_DATABASE_ADD:"ON_DATABASE_ADD",ON_DATABASE_DELETE:"ON_DATABASE_DELETE",ON_DATABASE_CLERA:"ON_DATABASE_CLERA",ON_DATABASE_EEEOR:"ON_DATABASE_EEEOR",BEFORE_RESETSCENE:"BEFORE_RESETSCENE",AFTER_RESETSCENE:"AFTER_RESETSCENE",ON_CAMERA_CHANGE:"ON_CAMERA_CHANGE",ON_CONTROL_ENTER:"ON_CONTROL_ENTER",ON_CONTROL_EXIST:"ON_CONTROL_EXIST",ON_POINTERLOCK_EXIST:"ON_POINTERLOCK_EXIST",ON_CONTROL_BEGIN:"ON_CONTROL_BEGIN",ON_CONTROL_END:"ON_CONTROL_END",ON_CONTROL_ZOOM:"ON_CONTROL_ZOOM",ON_CONTROL_UPDATEUI:"ON_CONTROL_UPDATEUI",ON_CONTROL_KEYDOWN:"ON_CONTROL_KEYDOWN",ON_CONTROL_KEYUP:"ON_CONTROL_KEYUP",ON_CAMERA_ANIMATION_UPDATE:"ON_CAMERA_ANIMATION_UPDATE",ON_MOUSE_DRAGGED:"ON_MOUSE_DRAGGED"},Tc={LOAD_COMPONENT_ERROR:"LOAD_COMPONENT_ERROR",LOAD_MATERIAL_ERROR:"LOAD_MATERIAL_ERROR",LOAD_GEOMETRY_ERROR:"LOAD_GEOMETRY_ERROR",LOAD_COMPONENTNODE_ERROR:"LOAD_COMPONENTNODE_ERROR",LOAD_TEXTURE_ERROR:"LOAD_TEXTURE_ERROR",LOAD_AXISNET_ERROR:"LOAD_AXISNET_ERROR",LOAD_FLOORINFO_ERROR:"LOAD_FLOORINFO_ERROR",PARSEFAILE:"PARSEFAILE",PARSING:"PARSING",IS2D:"IS2D",LOAD_ERROR:"LOAD_ERROR",SCENE_NOT_CLOSE:"SCENE_NOT_CLOSE",SCENE_NOTHING_TO_LOAD:"SCENE_NOTHING_TO_LOAD",LOAD_SCENE_ERROR:"LOAD_SCENE_ERROR",LOAD_SYMBOL_ERROR:"LOAD_SYMBOL_ERROR",LOAD_OCTREEINNER_ERROR:"LOAD_OCTREEINNER_ERROR",LOAD_OCTREEOUTER_ERROR:"LOAD_OCTREEOUTER_ERROR",LOAD_USERID_ERROR:"LOAD_USERID_ERROR",LOAD_USERDATA_ERROR:"LOAD_USERDATA_ERROR",LOAD_CAMERA_ERROR:"LOAD_CAMERA_ERROR",LOAD_MPK_ERROR:"LOAD_MPK_ERROR",LOAD_IBLCONFIG_ERROR:"LOAD_IBLCONFIG_ERROR"},kc={MOUSEPOINT:0,SELECTION:1,CENTER:2,CAMERA:3},Dc={FILE_VISIBLE:0,FILE_HIDDEN:1,SELECTED:2,VISIBLE:3,HIDDEN:4,TRANSLUCENT:5,TRANSLUCENT_OTHERS:6,WIREFRAME:7,COLORFUL:8},Lc={Visible:1,HideByIsolate:2,Transparent:4,TransparentByIsolate:8},Nc={HIDDEN:0,HIDDEN_OTHERS:1,TRANSLUCENT:2,TRANSLUCENT_OTHERS:3},Oc={TRANSLUCENT:"TRANSLUCENT",OPAQUE:"OPAQUE"},Vc={DISABLED:0,TRANSLUCENT:1,HIDDEN:2},Gc={ORBIT:"orbit",PICK:"pick",PAN:"pan",ZOOM:"zoom",FLY:"fly",WALK:"walk"},Pc={PICK_BY_RECT:"pickByRect",ZOOM_BY_RECT:"zoomByRect",CLIP_BY_BOX:"clipByBox",CLIP_FILL:"fillClip",PICK_BY_MEASURE:"pickByMeasure",COMPONENT_TRANSFORM:"componentTransform"},qc={NONE:0,UP:1,DOWN:2,LEFT:4,RIGHT:8,FORWARD:16,BACK:32},jc={SHADING:0,BOARDLINE:1,SHADINGWITHLINE:2},Hc={HIDDEN:-1,NONE:0,HOVER:1,SELECTED:2,OVERRIDED:3,TRANSPARENT:4,BLINK:5},Yc={NONE:0,BLINK:1,SELECT:2},Wc={AUTO:0,DEFAULT:1,MERGED:2,LAYER:3,LAYER_SCENE:4},Jc={MATCH_RETURN_TRUE:0,MATCH_RETURN_FALSE:1,NOMATCH_RETURN_TRUE:2,NOMATCH_RETURN_FALSE:3},zc={CLIPPING:-2,HIDDEN:-1,NONE:0,SELECTED:1,BLINK:2,HOVER:3,TRANSPARENT:4,OVERRIDED:5},Zc={RVT:"RVT",IFC:"IFC",I_MODEL:"I-MODEL",THREE_DS:"3DS",MERGE:"MERGE",DAE:"DAE",DWG:"DWG",OBJ:"OBJ",FBX:"FBX"},Xc={};function _c(A,e,t,i){this._x=A||0,this._y=e||0,this._z=t||0,this._w=void 0!==i?i:1}function $c(A,e,t){this.x=A||0,this.y=e||0,this.z=t||0}Xc.clamp=function(A,e,t){return Math.max(e,Math.min(t,A))},Xc.euclideanModulo=function(A,e){return(A%e+e)%e},Object.assign(_c,{slerp:function(A,e,t,i){return t.copy(A).slerp(e,i)},slerpFlat:function(A,e,t,i,o,n,r){var a=t[i+0],s=t[i+1],l=t[i+2],c=t[i+3],h=o[n+0],d=o[n+1],p=o[n+2],g=o[n+3];if(c!==g||a!==h||s!==d||l!==p){var u=1-r,f=a*h+s*d+l*p+c*g,m=0>f?-1:1,C=1-f*f;if(C>Number.EPSILON){var y=Math.sqrt(C),v=Math.atan2(y,f*m);u=Math.sin(u*v)/y,r=Math.sin(r*v)/y}var I=r*m;if(a=a*u+h*I,s=s*u+d*I,l=l*u+p*I,c=c*u+g*I,u===1-r){var E=1/Math.sqrt(a*a+s*s+l*l+c*c);a*=E,s*=E,l*=E,c*=E}}A[e]=a,A[e+1]=s,A[e+2]=l,A[e+3]=c}}),Object.defineProperties(_c.prototype,{x:{get:function(){return this._x},set:function(A){this._x=A,this._onChangeCallback()}},y:{get:function(){return this._y},set:function(A){this._y=A,this._onChangeCallback()}},z:{get:function(){return this._z},set:function(A){this._z=A,this._onChangeCallback()}},w:{get:function(){return this._w},set:function(A){this._w=A,this._onChangeCallback()}}}),Object.assign(_c.prototype,{isQuaternion:!0,set:function(A,e,t,i){return this._x=A,this._y=e,this._z=t,this._w=i,this._onChangeCallback(),this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._w)},copy:function(A){return this._x=A.x,this._y=A.y,this._z=A.z,this._w=A.w,this._onChangeCallback(),this},setFromEuler:function(A,e){if(!A||!A.isEuler)throw new Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.");var t=A._x,i=A._y,o=A._z,n=A.order,r=Math.cos,a=Math.sin,s=r(t/2),l=r(i/2),c=r(o/2),h=a(t/2),d=a(i/2),p=a(o/2);return"XYZ"===n?(this._x=h*l*c+s*d*p,this._y=s*d*c-h*l*p,this._z=s*l*p+h*d*c,this._w=s*l*c-h*d*p):"YXZ"===n?(this._x=h*l*c+s*d*p,this._y=s*d*c-h*l*p,this._z=s*l*p-h*d*c,this._w=s*l*c+h*d*p):"ZXY"===n?(this._x=h*l*c-s*d*p,this._y=s*d*c+h*l*p,this._z=s*l*p+h*d*c,this._w=s*l*c-h*d*p):"ZYX"===n?(this._x=h*l*c-s*d*p,this._y=s*d*c+h*l*p,this._z=s*l*p-h*d*c,this._w=s*l*c+h*d*p):"YZX"===n?(this._x=h*l*c+s*d*p,this._y=s*d*c+h*l*p,this._z=s*l*p-h*d*c,this._w=s*l*c-h*d*p):"XZY"===n&&(this._x=h*l*c-s*d*p,this._y=s*d*c-h*l*p,this._z=s*l*p+h*d*c,this._w=s*l*c+h*d*p),!1!==e&&this._onChangeCallback(),this},setFromAxisAngle:function(A,e){var t=e/2,i=Math.sin(t);return this._x=A.x*i,this._y=A.y*i,this._z=A.z*i,this._w=Math.cos(t),this._onChangeCallback(),this},setFromRotationMatrix:function(A){var e,t=A.elements,i=t[0],o=t[4],n=t[8],r=t[1],a=t[5],s=t[9],l=t[2],c=t[6],h=t[10],d=i+a+h;return d>0?(e=.5/Math.sqrt(d+1),this._w=.25/e,this._x=(c-s)*e,this._y=(n-l)*e,this._z=(r-o)*e):i>a&&i>h?(e=2*Math.sqrt(1+i-a-h),this._w=(c-s)/e,this._x=.25*e,this._y=(o+r)/e,this._z=(n+l)/e):a>h?(e=2*Math.sqrt(1+a-i-h),this._w=(n-l)/e,this._x=(o+r)/e,this._y=.25*e,this._z=(s+c)/e):(e=2*Math.sqrt(1+h-i-a),this._w=(r-o)/e,this._x=(n+l)/e,this._y=(s+c)/e,this._z=.25*e),this._onChangeCallback(),this},setFromUnitVectors:function(A,e){var t=A.dot(e)+1;return 1e-6>t?(t=0,Math.abs(A.x)>Math.abs(A.z)?(this._x=-A.y,this._y=A.x,this._z=0,this._w=t):(this._x=0,this._y=-A.z,this._z=A.y,this._w=t)):(this._x=A.y*e.z-A.z*e.y,this._y=A.z*e.x-A.x*e.z,this._z=A.x*e.y-A.y*e.x,this._w=t),this.normalize()},angleTo:function(A){return 2*Math.acos(Math.abs(Xc.clamp(this.dot(A),-1,1)))},rotateTowards:function(A,e){var t=this.angleTo(A);if(0===t)return this;var i=Math.min(1,e/t);return this.slerp(A,i),this},inverse:function(){return this.conjugate()},conjugate:function(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this},dot:function(A){return this._x*A._x+this._y*A._y+this._z*A._z+this._w*A._w},lengthSq:function(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w},length:function(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)},normalize:function(){var A=this.length();return 0===A?(this._x=0,this._y=0,this._z=0,this._w=1):(this._x=this._x*(A=1/A),this._y=this._y*A,this._z=this._z*A,this._w=this._w*A),this._onChangeCallback(),this},multiply:function(A,e){return void 0!==e?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."),this.multiplyQuaternions(A,e)):this.multiplyQuaternions(this,A)},premultiply:function(A){return this.multiplyQuaternions(A,this)},multiplyQuaternions:function(A,e){var t=A._x,i=A._y,o=A._z,n=A._w,r=e._x,a=e._y,s=e._z,l=e._w;return this._x=t*l+n*r+i*s-o*a,this._y=i*l+n*a+o*r-t*s,this._z=o*l+n*s+t*a-i*r,this._w=n*l-t*r-i*a-o*s,this._onChangeCallback(),this},slerp:function(A,e){if(0===e)return this;if(1===e)return this.copy(A);var t=this._x,i=this._y,o=this._z,n=this._w,r=n*A._w+t*A._x+i*A._y+o*A._z;if(0>r?(this._w=-A._w,this._x=-A._x,this._y=-A._y,this._z=-A._z,r=-r):this.copy(A),r>=1)return this._w=n,this._x=t,this._y=i,this._z=o,this;var a=1-r*r;if(Number.EPSILON>=a){var s=1-e;return this._w=s*n+e*this._w,this._x=s*t+e*this._x,this._y=s*i+e*this._y,this._z=s*o+e*this._z,this.normalize(),this._onChangeCallback(),this}var l=Math.sqrt(a),c=Math.atan2(l,r),h=Math.sin((1-e)*c)/l,d=Math.sin(e*c)/l;return this._w=n*h+this._w*d,this._x=t*h+this._x*d,this._y=i*h+this._y*d,this._z=o*h+this._z*d,this._onChangeCallback(),this},equals:function(A){return A._x===this._x&&A._y===this._y&&A._z===this._z&&A._w===this._w},fromArray:function(A,e){return void 0===e&&(e=0),this._x=A[e],this._y=A[e+1],this._z=A[e+2],this._w=A[e+3],this._onChangeCallback(),this},toArray:function(A,e){return void 0===A&&(A=[]),void 0===e&&(e=0),A[e]=this._x,A[e+1]=this._y,A[e+2]=this._z,A[e+3]=this._w,A},_onChange:function(A){return this._onChangeCallback=A,this},_onChangeCallback:function(){}}),Object.assign($c.prototype,{isVector3:!0,set:function(A,e,t){return this.x=A,this.y=e,this.z=t,this},setScalar:function(A){return this.x=A,this.y=A,this.z=A,this},setX:function(A){return this.x=A,this},setY:function(A){return this.y=A,this},setZ:function(A){return this.z=A,this},setComponent:function(A,e){switch(A){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;default:throw new Error("index is out of range: "+A)}return this},getComponent:function(A){switch(A){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+A)}},clone:function(){return new this.constructor(this.x,this.y,this.z)},copy:function(A){return this.x=A.x,this.y=A.y,this.z=A.z,this},add:function(A,e){return void 0!==e?(console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(A,e)):(this.x+=A.x,this.y+=A.y,this.z+=A.z,this)},addScalar:function(A){return this.x+=A,this.y+=A,this.z+=A,this},addVectors:function(A,e){return this.x=A.x+e.x,this.y=A.y+e.y,this.z=A.z+e.z,this},addScaledVector:function(A,e){return this.x+=A.x*e,this.y+=A.y*e,this.z+=A.z*e,this},sub:function(A,e){return void 0!==e?(console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(A,e)):(this.x-=A.x,this.y-=A.y,this.z-=A.z,this)},subScalar:function(A){return this.x-=A,this.y-=A,this.z-=A,this},subVectors:function(A,e){return this.x=A.x-e.x,this.y=A.y-e.y,this.z=A.z-e.z,this},multiply:function(A,e){return void 0!==e?(console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(A,e)):(this.x*=A.x,this.y*=A.y,this.z*=A.z,this)},multiplyScalar:function(A){return this.x*=A,this.y*=A,this.z*=A,this},multiplyVectors:function(A,e){return this.x=A.x*e.x,this.y=A.y*e.y,this.z=A.z*e.z,this},applyEuler:(Mc=new _c,function(A){return A&&A.isEuler||console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order."),this.applyQuaternion(Mc.setFromEuler(A))}),applyAxisAngle:function(){var A=new _c;return function(e,t){return this.applyQuaternion(A.setFromAxisAngle(e,t))}}(),applyMatrix3:function(A){var e=this.x,t=this.y,i=this.z,o=A.elements;return this.x=o[0]*e+o[3]*t+o[6]*i,this.y=o[1]*e+o[4]*t+o[7]*i,this.z=o[2]*e+o[5]*t+o[8]*i,this},applyMatrix4:function(A){var e=this.x,t=this.y,i=this.z,o=A.elements,n=1/(o[3]*e+o[7]*t+o[11]*i+o[15]);return this.x=(o[0]*e+o[4]*t+o[8]*i+o[12])*n,this.y=(o[1]*e+o[5]*t+o[9]*i+o[13])*n,this.z=(o[2]*e+o[6]*t+o[10]*i+o[14])*n,this},applyQuaternion:function(A){var e=this.x,t=this.y,i=this.z,o=A.x,n=A.y,r=A.z,a=A.w,s=a*e+n*i-r*t,l=a*t+r*e-o*i,c=a*i+o*t-n*e,h=-o*e-n*t-r*i;return this.x=s*a+h*-o+l*-r-c*-n,this.y=l*a+h*-n+c*-o-s*-r,this.z=c*a+h*-r+s*-n-l*-o,this},project:function(A){return this.applyMatrix4(A.matrixWorldInverse).applyMatrix4(A.projectionMatrix)},unproject:function(A){return this.applyMatrix4(A.projectionMatrixInverse).applyMatrix4(A.matrixWorld)},transformDirection:function(A){var e=this.x,t=this.y,i=this.z,o=A.elements;return this.x=o[0]*e+o[4]*t+o[8]*i,this.y=o[1]*e+o[5]*t+o[9]*i,this.z=o[2]*e+o[6]*t+o[10]*i,this.normalize()},divide:function(A){return this.x/=A.x,this.y/=A.y,this.z/=A.z,this},divideScalar:function(A){return this.multiplyScalar(1/A)},min:function(A){return this.x=Math.min(this.x,A.x),this.y=Math.min(this.y,A.y),this.z=Math.min(this.z,A.z),this},max:function(A){return this.x=Math.max(this.x,A.x),this.y=Math.max(this.y,A.y),this.z=Math.max(this.z,A.z),this},clamp:function(A,e){return this.x=Math.max(A.x,Math.min(e.x,this.x)),this.y=Math.max(A.y,Math.min(e.y,this.y)),this.z=Math.max(A.z,Math.min(e.z,this.z)),this},clampScalar:function(A,e){return this.x=Math.max(A,Math.min(e,this.x)),this.y=Math.max(A,Math.min(e,this.y)),this.z=Math.max(A,Math.min(e,this.z)),this},clampLength:function(A,e){var t=this.length();return this.divideScalar(t||1).multiplyScalar(Math.max(A,Math.min(e,t)))},floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this},ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this},round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this},roundToZero:function(){return this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x),this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y),this.z=0>this.z?Math.ceil(this.z):Math.floor(this.z),this},negate:function(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this},dot:function(A){return this.x*A.x+this.y*A.y+this.z*A.z},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)},normalize:function(){return this.divideScalar(this.length()||1)},setLength:function(A){return this.normalize().multiplyScalar(A)},lerp:function(A,e){return this.x+=(A.x-this.x)*e,this.y+=(A.y-this.y)*e,this.z+=(A.z-this.z)*e,this},lerpVectors:function(A,e,t){return this.subVectors(e,A).multiplyScalar(t).add(A)},cross:function(A,e){return void 0!==e?(console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(A,e)):this.crossVectors(this,A)},crossVectors:function(A,e){var t=A.x,i=A.y,o=A.z,n=e.x,r=e.y,a=e.z;return this.x=i*a-o*r,this.y=o*n-t*a,this.z=t*r-i*n,this},projectOnVector:function(A){var e=A.dot(this)/A.lengthSq();return this.copy(A).multiplyScalar(e)},projectOnPlane:(wc=new $c,function(A){return wc.copy(this).projectOnVector(A),this.sub(wc)}),reflect:function(){var A=new $c;return function(e){return this.sub(A.copy(e).multiplyScalar(2*this.dot(e)))}}(),angleTo:function(A){var e=this.dot(A)/Math.sqrt(this.lengthSq()*A.lengthSq());return Math.acos(Xc.clamp(e,-1,1))},distanceTo:function(A){return Math.sqrt(this.distanceToSquared(A))},distanceToSquared:function(A){var e=this.x-A.x,t=this.y-A.y,i=this.z-A.z;return e*e+t*t+i*i},manhattanDistanceTo:function(A){return Math.abs(this.x-A.x)+Math.abs(this.y-A.y)+Math.abs(this.z-A.z)},setFromSpherical:function(A){return this.setFromSphericalCoords(A.radius,A.phi,A.theta)},setFromSphericalCoords:function(A,e,t){var i=Math.sin(e)*A;return this.x=i*Math.sin(t),this.y=Math.cos(e)*A,this.z=i*Math.cos(t),this},setFromCylindrical:function(A){return this.setFromCylindricalCoords(A.radius,A.theta,A.y)},setFromCylindricalCoords:function(A,e,t){return this.x=A*Math.sin(e),this.y=t,this.z=A*Math.cos(e),this},setFromMatrixPosition:function(A){var e=A.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this},setFromMatrixScale:function(A){var e=this.setFromMatrixColumn(A,0).length(),t=this.setFromMatrixColumn(A,1).length(),i=this.setFromMatrixColumn(A,2).length();return this.x=e,this.y=t,this.z=i,this},setFromMatrixColumn:function(A,e){return this.fromArray(A.elements,4*e)},equals:function(A){return A.x===this.x&&A.y===this.y&&A.z===this.z},fromArray:function(A,e){return void 0===e&&(e=0),this.x=A[e],this.y=A[e+1],this.z=A[e+2],this},toArray:function(A,e){return void 0===A&&(A=[]),void 0===e&&(e=0),A[e]=this.x,A[e+1]=this.y,A[e+2]=this.z,A},fromBufferAttribute:function(A,e,t){return void 0!==t&&console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute()."),this.x=A.getX(e),this.y=A.getY(e),this.z=A.getZ(e),this}});var Ah=[new $c,new $c,new $c,new $c,new $c,new $c,new $c,new $c],eh=new $c,th=new $c,ih=new $c,oh=new $c,nh=new $c,rh=new $c,ah=new $c,sh=new $c,lh=new $c,ch=new $c,hh=new $c;function dh(A,e,t,i,o){var n,r=0;for(r=0,n=A.length-3;n>=r;r+=3){hh.fromArray(A,r);var a=o.x*Math.abs(hh.x)+o.y*Math.abs(hh.y)+o.z*Math.abs(hh.z),s=e.dot(hh),l=t.dot(hh),c=i.dot(hh);if(Math.max(-Math.max(s,l,c),Math.min(s,l,c))>a)return!1}return!0}function ph(A,e){this.min=void 0!==A?A:new $c(1/0,1/0,1/0),this.max=void 0!==e?e:new $c(-1/0,-1/0,-1/0)}var gh=new ph;Object.assign(ph.prototype,{isBox3:!0,set:function(A,e){return this.min.copy(A),this.max.copy(e),this},setFromArray:function(A){for(var e=1/0,t=1/0,i=1/0,o=-1/0,n=-1/0,r=-1/0,a=0,s=A.length;s>a;a+=3){var l=A[a],c=A[a+1],h=A[a+2];e>l&&(e=l),t>c&&(t=c),i>h&&(i=h),l>o&&(o=l),c>n&&(n=c),h>r&&(r=h)}return this.min.set(e,t,i),this.max.set(o,n,r),this},toArray:function(A){return void 0===A&&(A=[]),this.min.toArray(A),this.max.toArray(A,3),A},setFromBufferAttribute:function(A){for(var e=1/0,t=1/0,i=1/0,o=-1/0,n=-1/0,r=-1/0,a=0,s=A.count;s>a;a+=1){var l=A.getX(a),c=A.getY(a),h=A.getZ(a);e>l&&(e=l),t>c&&(t=c),i>h&&(i=h),l>o&&(o=l),c>n&&(n=c),h>r&&(r=h)}return this.min.set(e,t,i),this.max.set(o,n,r),this},setFromPoints:function(A){this.makeEmpty();for(var e=0,t=A.length;t>e;e+=1)this.expandByPoint(A[e]);return this},setFromCenterAndSize:function(A,e){var t=eh.copy(e).multiplyScalar(.5);return this.min.copy(A).sub(t),this.max.copy(A).add(t),this},setFromObject:function(A){return this.makeEmpty(),this.expandByObject(A)},clone:function(){return(new this.constructor).copy(this)},copy:function(A){return this.min.copy(A.min),this.max.copy(A.max),this},makeEmpty:function(){return this.min.x=this.min.y=this.min.z=1/0,this.max.x=this.max.y=this.max.z=-1/0,this},isEmpty:function(){return this.min.x>this.max.x||this.min.y>this.max.y||this.min.z>this.max.z},getCenter:function(A){return void 0===A&&(console.warn("THREE.Box3: .getCenter() target is now required"),A=new $c),this.isEmpty()?A.set(0,0,0):A.addVectors(this.min,this.max).multiplyScalar(.5)},getSize:function(A){return void 0===A&&(console.warn("THREE.Box3: .getSize() target is now required"),A=new $c),this.isEmpty()?A.set(0,0,0):A.subVectors(this.max,this.min)},expandByPoint:function(A){return this.min.min(A),this.max.max(A),this},expandByVector:function(A){return this.min.sub(A),this.max.add(A),this},expandByScalar:function(A){return this.min.addScalar(-A),this.max.addScalar(A),this},expandByObject:function(A){A.updateWorldMatrix(!1,!1);var e=A.geometry;void 0!==e&&(null===e.boundingBox&&e.computeBoundingBox(),gh.copy(e.boundingBox),gh.applyMatrix4(A.matrixWorld),this.union(gh));for(var t=A.children,i=0,o=t.length;o>i;i+=1)this.expandByObject(t[i]);return this},containsPoint:function(A){return!(this.min.x>A.x||A.x>this.max.x||this.min.y>A.y||A.y>this.max.y||this.min.z>A.z||A.z>this.max.z)},containsBox:function(A){return!(this.min.x>A.min.x||A.max.x>this.max.x||this.min.y>A.min.y||A.max.y>this.max.y||this.min.z>A.min.z||A.max.z>this.max.z)},getParameter:function(A,e){return void 0===e&&(console.warn("THREE.Box3: .getParameter() target is now required"),e=new $c),e.set((A.x-this.min.x)/(this.max.x-this.min.x),(A.y-this.min.y)/(this.max.y-this.min.y),(A.z-this.min.z)/(this.max.z-this.min.z))},intersectsBox:function(A){return!(this.min.x>A.max.x||A.min.x>this.max.x||this.min.y>A.max.y||A.min.y>this.max.y||this.min.z>A.max.z||A.min.z>this.max.z)},intersectsSphere:function(A){return this.clampPoint(A.center,eh),eh.distanceToSquared(A.center)<=A.radius*A.radius},intersectsPlane:function(A){var e=null,t=null;return A.normal.x>0?(e=A.normal.x*this.min.x,t=A.normal.x*this.max.x):(e=A.normal.x*this.max.x,t=A.normal.x*this.min.x),A.normal.y>0?(e+=A.normal.y*this.min.y,t+=A.normal.y*this.max.y):(e+=A.normal.y*this.max.y,t+=A.normal.y*this.min.y),A.normal.z>0?(e+=A.normal.z*this.min.z,t+=A.normal.z*this.max.z):(e+=A.normal.z*this.max.z,t+=A.normal.z*this.min.z),-A.constant>=e&&t>=-A.constant},intersectsTriangle:function(A){if(this.isEmpty())return!1;this.getCenter(sh),lh.subVectors(this.max,sh),th.subVectors(A.a,sh),ih.subVectors(A.b,sh),oh.subVectors(A.c,sh),nh.subVectors(ih,th),rh.subVectors(oh,ih),ah.subVectors(th,oh);var e=[0,-nh.z,nh.y,0,-rh.z,rh.y,0,-ah.z,ah.y,nh.z,0,-nh.x,rh.z,0,-rh.x,ah.z,0,-ah.x,-nh.y,nh.x,0,-rh.y,rh.x,0,-ah.y,ah.x,0];return!!dh(e,th,ih,oh,lh)&&(!!dh(e=[1,0,0,0,1,0,0,0,1],th,ih,oh,lh)&&(ch.crossVectors(nh,rh),dh(e=[ch.x,ch.y,ch.z],th,ih,oh,lh)))},clampPoint:function(A,e){return void 0===e&&(console.warn("THREE.Box3: .clampPoint() target is now required"),e=new $c),e.copy(A).clamp(this.min,this.max)},distanceToPoint:function(A){return eh.copy(A).clamp(this.min,this.max).sub(A).length()},getBoundingSphere:function(A){return void 0===A&&console.error("THREE.Box3: .getBoundingSphere() target is now required"),this.getCenter(A.center),A.radius=.5*this.getSize(eh).length(),A},intersect:function(A){return this.min.max(A.min),this.max.min(A.max),this.isEmpty()&&this.makeEmpty(),this},union:function(A){return this.min.min(A.min),this.max.max(A.max),this},applyMatrix4:function(A){return this.isEmpty()||(Ah[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(A),Ah[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(A),Ah[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(A),Ah[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(A),Ah[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(A),Ah[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(A),Ah[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(A),Ah[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(A),this.setFromPoints(Ah)),this},translate:function(A){return this.min.add(A),this.max.add(A),this},equals:function(A){return A.min.equals(this.min)&&A.max.equals(this.max)}});var uh={MinusEpsilon:-1e-6,byteArr2Int:function(A){return(255&A[0])<<24|(255&A[1])<<16|(255&A[2])<<8|(255&A[3])<<0},int2ByteArr:function(A){var e=[];return e[0]=A>>24,e[1]=A>>16,e[2]=A>>8,e[3]=A>>0,e},isPlainObject:function(A){var e,t;return!(!A||"[object Object]"!==Object.prototype.toString.call(A))&&(!(e=Object.getPrototypeOf(A))||"function"==typeof(t=Object.hasOwnProperty.call(e,"constructor")&&e.constructor)&&Object.hasOwnProperty.toString.call(t)===Object.hasOwnProperty.toString.call(Object))},extend:function(){var A=null,e=null,t=null,i=null,o=null,n=null,r=arguments[0]||{},a=1,s=arguments.length,l=!1;for("boolean"==typeof r&&(l=r,r=arguments[a]||{},a+=1),"object"!==lc(r)&&"function"===!lc(r)&&(r={}),a===s&&(r=this,a-=1);s>a;a+=1)if(null!==(A=arguments[a])&&void 0!==(A=arguments[a]))for(e in A)t=r[e],r!==(i=A[e])&&(l&&i&&(uh.isPlainObject(i)||(o=Array.isArray(i)))?(o?(o=!1,n=t&&Array.isArray(t)?t:[]):n=t&&uh.isPlainObject(t)?t:{},r[e]=uh.extend(l,n,i)):null!=i&&(r[e]=i));return r},supportWorker:function(){return"undefined"!=typeof Worker||(console.log("Web Worker is not supported."),!1)},box3FromArray:function(A,e){if(Array.isArray(A)){var t=e||new ph;return t.min.fromArray(A,0),t.max.fromArray(A,3),t}return null},box3FromArrayRange:function(A,e,t){for(var i=new ph,o=Number(1/0),n=Number(1/0),r=Number(1/0),a=-1/0,s=-1/0,l=-1/0,c=e,h=t;h>c;c+=3){var d=A[c],p=A[c+1],g=A[c+2];o>d&&(o=d),n>p&&(n=p),r>g&&(r=g),d>a&&(a=d),p>s&&(s=p),g>l&&(l=g)}return i.min.set(o,n,r),i.max.set(a,s,l),i},box3FromObject:function(A,e,t){if(void 0!==A&&void 0!==e&&void 0!==A.x&&void 0!==A.y&&void 0!==A.z&&void 0!==e.x&&void 0!==e.y&&void 0!==e.z){var i=t||new ph;return i.min.set(A.x,A.y,A.z),i.max.set(e.x,e.y,e.z),i}return null},computeBBox:function(A){for(var e=new ph,t=new $c,i=0,o=A.length;o>i;i+=1)t.fromArray(A[i],0),e.expandByPoint(t);return e},mergeBBox:function(A){if(1>A.length)return null;for(var e=new ph,t=new $c,i=new $c,o=new ph,n=0,r=A.length;r>n;n+=1)t.set(A[n].max.x,A[n].max.y,A[n].max.z),i.set(A[n].min.x,A[n].min.y,A[n].min.z),o.set(i,t),e.union(o);return e},parseTransform:function(A,e,t){var i=!1;if(e.rotation&&(A.rotation.fromArray(e.rotation),i=!0),e.position&&(A.position.fromArray(e.position),i=!0),e.scale&&(A.scale.fromArray(e.scale),i=!0),e.quaternion&&(A.quaternion.fromArray(e.quaternion),i=!0),i&&A.updateMatrix(),e.matrix&&A.matrix.fromArray(e.matrix),t){var o=A.matrix.clone();o.multiplyMatrices(t,A.matrix),A.matrix=o}A.matrixAutoUpdate=!1,void 0!==A.boundingBox&&(A.boundingBox=uh.box3FromArray(e.bbox))},isEmptyObject:function(A){if(!A)return!0;if(A.length>0)return!1;if(0===A.length)return!0;for(var e in A)if(A.hasOwnProperty(e))return!1;return!0},isEmptyObjectSimple:function(A){for(var e in A)return!1;return!0},isOwnEmptyObject:function(A){for(var e in A)if(A.hasOwnProperty(e))return!1;return!0},hexStrToRgb:function(A){var e=A.replace("#",""),t=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);return t?{r:parseInt(t[1],16)/255,g:parseInt(t[2],16)/255,b:parseInt(t[3],16)/255}:null},hexToRgb:function(A){var e={};return e.r=(A>>16&255)/255,e.g=(A>>8&255)/255,e.b=(255&A)/255,e},getMin:function(A){for(var e=A.length,t=1/0;(e-=1)>=0;)t=t>A[e]?A[e]:t;return t},getMax:function(A){for(var e=A.length,t=-1/0;(e-=1)>=0;)t=A[e]>t?A[e]:t;return t},findRange:function(A,e){if(eMath.max.apply(null,A))return A.length-1;for(var t=0,i=0,o=A.length;o>i;i+=1)if(A[i]>e){t=i-1;break}return t},stringToByte:function(A){for(var e=[],t=A.length,i=null,o=0;t>o;o+=1)65536>(i=A.charCodeAt(o))||i>1114111?2048>i||i>65535?128>i||i>2047?e.push(255&i):(e.push(i>>6&31|192),e.push(63&i|128)):(e.push(i>>12&15|224),e.push(i>>6&63|128),e.push(63&i|128)):(e.push(i>>18&7|240),e.push(i>>12&63|128),e.push(i>>6&63|128),e.push(63&i|128));return e},byteToString:function(A){if("string"==typeof A)return A;for(var e="",t=A,i=0;t.length>i;i+=1){var o=t[i].toString(2),n=o.match(/^1+?(?=0)/);if(n&&8===o.length){for(var r=n[0].length,a=t[i].toString(2).slice(7-r),s=1;r>s;s+=1)a+=t[s+i].toString(2).slice(2);e+=String.fromCharCode(parseInt(a,2)),i+=r-1}else e+=String.fromCharCode(t[i])}return e},strToBinary:function(A){for(var e=[],t=A.split(""),i=0;t.length>i;i+=1){0!==i&&e.push(" ");var o=t[i].charCodeAt().toString(2);e.push(o)}return e.join("")},binaryToStr:function(A){for(var e=[],t=A.split(" "),i=0;t.length>i;i+=1){var o=parseInt(t[i],2),n=String.fromCharCode(o);e.push(n)}return e.join("")},isMirror:function(A){var e=new $c(A[0],A[1],A[2]),t=new $c(A[4],A[5],A[6]),i=new $c(A[8],A[9],A[10]);return 0>(new $c).crossVectors(e,t).dot(i)},decodeUTF8:function(A){for(var e="",t=0;A.length>t;t+=1)e+=String.fromCharCode(A[t]);return decodeURIComponent(escape(e))},unique:function(A){for(var e,t=[],i={},o=0;null!==(e=A[o])&&void 0!==(e=A[o]);o+=1)i[e]||(t.push(e),i[e]=!0);return i=null,t},getValue:function(A,e){var t=e.split("."),i=A;return t.map((function(A,e){i=i[A]})),i},sortByName:function(A,e,t){t=t||"asc";var i=!1;e?e.indexOf(".")>-1&&(i=!0):e="name",A=A.sort((function(A,o){if(i){var n=uh.getValue(A,e),r=uh.getValue(o,e);return"asc"===t?n.localeCompare(r):r.localeCompare(n)}return"asc"===t?A[e].localeCompare(o[e]):o[e].localeCompare(A[e])}));var o=[],n=[],r=[],a=[];return A.map((function(A,t){var s=null;s=i?uh.getValue(A,e):A[e],/^[a-zA-Z]*$/.test(s.slice(0,1))?o.push(A):/^[\u4e00-\u9fa5]*$/.test(s.slice(0,1))?n.push(A):/^\d+(\.\d+)?$/.test(s.slice(0,1))?r.push(A):a.push(A)})),a.concat(r,o,n)},PointToLineDistance:function(A,e,t,i,o,n){var r=void 0,a=void 0,s=void 0,l=void 0,c=Math.sqrt((t-A)*(t-A)+(i-e)*(i-e));if(0===c)return[0,{x:t,y:i}];var h=Math.sqrt((o-A)*(o-A)+(n-e)*(n-e));if(0===h)return[0,{x:o,y:n}];var d=Math.sqrt((t-o)*(t-o)+(i-n)*(i-n));if(0===d)return[c,{x:t,y:i}];if(h>c){if(i===n?r=o>t?0:Math.PI:((l=(o-t)/d)-1>1e-5&&(l=1),r=Math.acos(l),i>n&&(r=2*Math.PI-r)),(l=(A-t)/c)-1>1e-5&&(l=1),a=Math.acos(l),i>e&&(a=2*Math.PI-a),0>(s=a-r)&&(s=-s),s>Math.PI&&(s=2*Math.PI-s),s>Math.PI/2)return[c,{x:t,y:i}];if(t===o)return[h*Math.sin(s),{x:t,y:e}];if(i===n)return[h*Math.sin(s),{x:A,y:i}];var p,g,u=(n-i)/o-t,f=-1/u,m=e-A*f;return g=f*(p=(n-o*u-m)/(f-u))+m,[c*Math.sin(s),{x:p,y:g}]}if(i===n?r=o>t?Math.PI:0:((l=(t-o)/d)-1>1e-5&&(l=1),r=Math.acos(l),n>i&&(r=2*Math.PI-r)),(l=(A-o)/h)-1>1e-5&&(l=1),a=Math.acos(l),n>e&&(a=2*Math.PI-a),0>(s=a-r)&&(s=-s),s>Math.PI&&(s=2*Math.PI-s),s>Math.PI/2)return[h,{x:o,y:n}];if(t===o)return[h*Math.sin(s),{x:t,y:e}];if(i===n)return[h*Math.sin(s),{x:A,y:i}];var C,y,v=(n-i)/o-t,I=-1/v,E=e-A*I;return y=I*(C=(n-o*v-E)/(I-v))+E,[h*Math.sin(s),{x:C,y:y}]},freezeObject:function(A){return Object.freeze?Object.freeze(A):A},getEncodedId:function(A){return A},arrayToMap:function(A,e){e=e||{};for(var t=0,i=A.length;i>t;t+=1)e[A[t]]=!0;return e},getDifferentialIdxs:function(A,e){var t=null,i={},o={},n={};if(e)if(this.isEmptyObject(A))o=e;else{for(t in e)A[t]&&(n[t]=!0);if(this.isEmptyObject(n))i=A,o=e;else{for(t in e)n[t]||(o[t]=!0);for(t in A)n[t]||(i[t]=!0)}}else this.isEmptyObject(A)||(i=A);return{objCurrUsedIdxs:A,addIdxs:Object.keys(i),removeIdxs:Object.keys(o)}},getCombinedKeyString:function(A,e){return A.join(e=e||"&")},splitCombinedKeyString:function(A,e){return A.split(e=e||"&")},getModelKeyFromComponentKey:function(A){return A.split("_")[0]},isGroupObject:function(A){return!(!A.children||!A.children.length)},isMeshObject:function(A){return!!(A.isMesh||A.isLine||A.isPoints)},asyncProcess:function(A,e,t,i,o){requestAnimationFrame(function n(r){var a=r;return function(){var r=null,s=null;for(s=a+t>e?e:a+t,r=a;s>r;r+=1){i&&i(A,r),r===s-1&&(s!==e?requestAnimationFrame(n(r+1)):o&&o(A))}}}(0))},hasSimilarProperty:function(A,e){if(!(A instanceof Object&&e instanceof Object))return!1;for(var t in A)if(A.hasOwnProperty(t)&&!e.hasOwnProperty(t))return!1;return!0},equalsWithEpsilon:function(A,e){var t=Math.abs(A.x-e.x),i=Math.abs(A.y-e.y),o=Math.abs(A.z-e.z);return 1e-7>=t&&1e-7>=i&&1e-7>=o},arrayMax:function(A){if(0===A.length)return-1/0;for(var e=A[0],t=1,i=A.length;i>t;t+=1)A[t]>e&&(e=A[t]);return e},arrayMin:function(A){if(0===A.length)return 1/0;for(var e=A[0],t=1,i=A.length;i>t;t+=1)e>A[t]&&(e=A[t]);return e},ab2str:function(A){return(new TextDecoder).decode(new Uint8Array(A))},str2ab:function(A){return(new TextEncoder).encode(A).buffer}};uh.createUUID=function(){for(var A=[],e=0;36>e;e+=1)A[e]="0123456789abcdef".substr(Math.floor(16*Math.random()),1);return A[14]="4",A[19]="0123456789abcdef".substr(3&A[19]|8,1),A[8]=A[13]=A[18]=A[23]="-",A.join("")};var fh={"zh-cn":{YourGraphicsCardDoesNotSeemToSupportWebGL:"您的显卡似乎不支持WebGL",YourBrowserDoesNotSeemToSupportWebGL:"您的浏览器似乎不支持WebGL",FindOutHowToGetItHere:"您可以在这里查看相关信息",SectionBoxLockHint:"请在使用此方法之前调用enableSectionBox。",APIAxisLockHint:"The API supports AxisOption.Z only for now."},en:{YourGraphicsCardDoesNotSeemToSupportWebGL:"Your graphics card does not seem to support WebGL",YourBrowserDoesNotSeemToSupportWebGL:"Your browser does not seem to support WebGL",FindOutHowToGetItHere:"Find out how to get it here",SectionBoxLockHint:"Please call enableSectionBox before using this method.",APIAxisLockHint:"The API supports AxisOption.Z only for now."}},mh={getAndroidVersion:function(A){var e=(A=A||navigator.userAgent).match(/Android\s([0-9.]*)/);return!!e&&e[1]},isTouchDevice:function(){return"undefined"!=typeof window&&"ontouchstart"in window},isBrowser:function(){return"undefined"!=typeof navigator},isIE11:function(){return mh.isBrowser()&&Boolean(navigator.userAgent.match(/Edge|Trident\/7\./))},isIOSDevice:function(){return!!mh.isBrowser()&&/ip(ad|hone|od)/.test(navigator.userAgent.toLowerCase())},isAndroidDevice:function(){return!!mh.isBrowser()&&-1!==navigator.userAgent.toLowerCase().indexOf("android")},isMobileDevice:function(){return!!mh.isBrowser()&&(mh.isIOSDevice()||mh.isAndroidDevice())},isSafari:function(){if(!mh.isBrowser())return!1;var A=navigator.userAgent.toLowerCase();return-1!==A.indexOf("safari")&&-1===A.indexOf("chrome")},isFirefox:function(){return!!mh.isBrowser()&&-1!==navigator.userAgent.toLowerCase().indexOf("firefox")},isChrome:function(){return!!mh.isBrowser()&&-1!==navigator.userAgent.toLowerCase().indexOf("chrome")},isMac:function(){return!!mh.isBrowser()&&-1!==navigator.userAgent.toLowerCase().indexOf("mac os")},isLinux:function(){return!!mh.isBrowser()&&-1!==navigator.userAgent.toLowerCase().indexOf("linux x86_64")},isWindows:function(){if(!mh.isBrowser())return!1;var A=navigator.userAgent.toLowerCase();return-1!==A.indexOf("win32")||-1!==A.indexOf("windows")},isWindowsPhone:function(){var A=navigator.userAgent.toLowerCase();return/(?:Windows Phone)/.test(A)},isSymbian:function(){var A=navigator.userAgent.toLowerCase();return/(?:SymbianOS)/.test(A)||mh.isWindowsPhone()},isTablet:function(){var A=navigator.userAgent.toLowerCase();return/(?:iPad|PlayBook)/.test(A)||mh.isAndroidDevice()&&!/(?:Mobile)/.test(A)||mh.isFirefox()&&/(?:Tablet)/.test(A)},isPc:function(){return!mh.isMobileDevice()&&!mh.isTablet()&&!mh.isSymbian()},isOpera:function(){return navigator.userAgent.indexOf("Opera")>-1}};mh.isSafari();mh.detectWebGL=function(){if(window.WebGLRenderingContext){for(var A=document.createElement("canvas"),e=["webgl","experimental-webgl"],t=!1,i=0;e.length>i;i+=1)try{if((t=A.getContext(e[i]))&&"function"==typeof t.getParameter)return 1}catch(A){}return 0}return-1},mh.detectWebGL2=function(){if(window.WebGL2RenderingContext){for(var A=document.createElement("canvas"),e=["webgl2"],t=!1,i=0;e.length>i;i+=1)try{if((t=A.getContext(e[i]))&&"function"==typeof t.getParameter)return 1}catch(A){}return 0}return-1},mh.showWebGLMessage=function(A,e,t){var i,o=null,n=null;o=void 0!==(t=t||{}).parent?t.parent:document.body,i=void 0!==t.id?t.id:"oldie",(n=mh.getWebGLErrorMessage(A,e)).id=i,o.appendChild(n)},mh.language=function(){return(navigator.browserLanguage||navigator.language).toLowerCase()},mh.getWebGLErrorMessage=function(A,e){var t=document.createElement("div");t.id="webgl-error-message",t.style.fontSize="16px",t.style.fontWeight="normal",t.style.textAlign="center",t.style.background="#f4c8c8",t.style.color="#000",t.style.padding="1.5em",t.style.width="400px",t.style.position="absolute",t.style.left=document.body.clientWidth/2-224+"px";var i=document.body.clientHeight/2-45;return 0>i&&(i=0),t.style.top=i+"px",e||(e="zh-cn"),0===A?t.innerHTML=[' '+fh[e].YourGraphicsCardDoesNotSeemToSupportWebGL+".
",' '+fh[e].FindOutHowToGetItHere+"."].join("\n"):-1===A&&(t.innerHTML=[''+fh[e].YourBrowserDoesNotSeemToSupportWebGL+".
",''+fh[e].FindOutHowToGetItHere+"."].join("\n")),t},mh.isSupportIndexedDB=function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},mh.isSupportWorker=function(){return window.Worker};var Ch={DEBUG:6,PERFORMANCE:5,LOG:4,INFO:3,WARNING:2,ERROR:1,NONE:0},yh={},vh=function(A){yh[A]?console.warn("Timer '"+A+"' already exists"):yh[A]=Date.now()},Ih=function(A){yh[A]?(console.warn(A+":",Date.now()-yh[A],"ms"),delete yh[A]):console.warn("Timer '"+A+"' does not exist")};function Eh(){this.level=-1,this.setLevel(Ch.LOG)}Eh.prototype.setLevel=function(A){if(this.level!==A){this.level=A;var e=function(){},t=Ch,i=this;this.debug=t.DEBUG>A?e:console.debug.bind(console),this.trace=t.DEBUG>A?e:console.trace.bind(console),this.assert=t.DEBUG>A?e:console.assert.bind(console),this.count=t.DEBUG>A?e:console.count.bind(console),this.dir=t.DEBUG>A?e:console.dir.bind(console),this.time=t.PERFORMANCE>A?e:vh,this.timeEnd=t.PERFORMANCE>A?e:Ih,this.log=t.LOG>A?e:console.log.bind(console),this.info=t.INFO>A?e:console.info.bind(console),this.warn=t.WARNING>A?e:console.warn.bind(console),this.error=t.ERROR>A?e:function(){if(i.callback){var A=Array.prototype.slice.call(arguments).join(" ");i.callback({category:"error",message:A},{adp:!1})}console.error.apply(console,arguments)}}};var Bh=new Eh,xh={splitStr:function(A){return A.trim().split(/\s+/g)},getClientHeight:function(){return document.body.clientHeight&&document.documentElement.clientHeight?document.body.clientHeightdocument.documentElement.clientHeight?document.body.clientHeight:document.documentElement.clientHeight},getClientWidth:function(){return document.body.clientWidth&&document.documentElement.clientWidth?document.body.clientWidthdocument.documentElement.clientWidth?document.body.clientWidth:document.documentElement.clientWidth},getDomOffsetToClient:function(A){var e,t=null;if(A!==document){var i=(e=A).getBoundingClientRect?function(A){var e=A.getBoundingClientRect(),t=document.body,i=document.documentElement,o=e.left-(i.clientLeft||t.clientLeft);return{top:Math.round(e.top-(i.clientTop||t.clientTop)),left:Math.round(o)}}(e):function(A){for(var e=0,t=0;A;)e+=A.offsetTop,t+=A.offsetLeft,A=A.offsetParent;var i=document.body,o=document.documentElement;return{top:e-=window.pageYOffset||o.scrollTop||i.scrollTop,left:t-=window.pageXOffset||o.scrollLeft||i.scrollLeft}}(e);t={width:A.offsetWidth,height:A.offsetHeight,left:i.left,top:i.top}}else t={width:window.innerWidth,height:window.innerHeight,left:0,top:0};return t},setClassName:function(A,e){var t=document.getElementById(A);t&&(t.className=e)},addClassName:function(A,e){var t=null,i=null,o=null,n=null,r=null,a=document.getElementById(A);if(a&&(i=a,e&&"string"==typeof e&&(t=e.split(/\s+/),1===i.nodeType)))if(i.className||1!==t.length){for(o=" "+i.className+" ",n=0,r=t.length;r>n;n+=1)0>o.indexOf(" "+t[n]+" ")&&(o+=t[0]+" ");i.className=String.trim(o)}else i.className=e},removeClassName:function(A,e){var t=null,i=null,o=null,n=null,r=null,a=document.getElementById(A);if(a&&(o=a,e&&"string"==typeof e&&(t=(e||"").split(/\s+/),1===o.nodeType&&o.className))){for(i=(" "+o.className+" ").replace(0," "),n=0,r=t.length;r>n;n+=1)for(;i.indexOf(" "+t[n]+" ")>=0;)i=i.replace(" "+t[n]+" "," ");o.className=e?String.trim(i):""}},showOrHideElement:function(A,e){var t=document.getElementById(A);t&&(t.style.display=e?"":"none")},getStyleString:function(A){var e=[];for(var t in A){var i=A[t];e.push(t),e.push(":"),e.push(i),e.push("; ")}return e.join("")},cloneStyle:function(A){var e={};for(var t in A)e[t]=A[t];return e},removeStyleAttribute:function(A,e){Array.isArray(e)||(e=[e]),e.forEach((function(e){e in A&&delete A[e]}))},trimRight:function(A){if(0===A.length)return"";for(var e=A.length-1,t=e;t>=0;t-=1)if(" "!==A.charAt(t)){e=t;break}return A.substr(0,e+1)},trimLeft:function(A){if(0===A.length)return"";for(var e=0,t=0;A.length>t;t+=1)if(" "!==A.charAt(t)){e=t;break}return A.substr(e)},trim:function(A){return A.replace(/(^\s*)|(\s*$)/g,"")},matchesSelector:function(A,e){if(A.matches)return A.matches(e);if(A.matchesSelector)return A.matchesSelector(e);if(A.webkitMatchesSelector)return A.webkitMatchesSelector(e);if(A.msMatchesSelector)return A.msMatchesSelector(e);if(A.mozMatchesSelector)return A.mozMatchesSelector(e);if(A.oMatchesSelector)return A.oMatchesSelector(e);if(A.querySelectorAll){for(var t=(A.document||A.ownerDocument).querySelectorAll(e),i=0;t[i]&&void 0!==t[i];)i+=1;return!!t[i]}return!1},toTranslate3d:function(A,e){return"translate3d("+A+"px,"+e+"px,0)"},setCursorStyle:function(A,e){var t=null;switch(e){case"n":case"s":t="ns-resize";break;case"w":case"e":t="ew-resize";break;case"ne":case"sw":t="nesw-resize";break;case"nw":case"se":t="nwse-resize"}A.style.cursor=t},css:function(A,e){for(var t=A.getAttribute("style")||"",i=Object.keys(e),o=t.split(";"),n=[],r=0,a=o.length;a>r;r+=1){""!==(s=o[r])?n.push(s.replace(/:.+/,"")):o.splice(r,1)}for(r=0,a=i.length;a>r;r+=1){var s=i[r],l=-1;o.map((function(A,e){return A.indexOf(s)>-1&&(l=e),null})),l>-1?o[l]=s+":"+e[s]:o.push(s+":"+e[s])}var c=o.join(";");A.setAttribute("style",c+";")},append:function(A,e){if("string"==typeof e){var t=document.createElement("div");t.innerHTML=e;for(var i=document.createDocumentFragment();t.firstChild;)i.appendChild(t.firstChild);A.appendChild(i)}else A.appendChild(e)},scrollTop:function(A,e){var t=A.scrollTop;if(t>e)var i=setInterval((function(){var t=A.scrollTop,o=Math.floor(-t/6);A.scrollTop=t=o+t,A.scrollTop>e||(A.scrollTop=A.scrollTop=e,clearTimeout(i))}),20);else if(0===t)var o=setInterval((function(){var i=A.scrollTop,n=Math.floor(70);A.scrollTop=i=n+i,t>A.scrollTop&&(A.scrollTop=e,clearTimeout(o))}),20);else if(e>t)var n=setInterval((function(){var i=A.scrollTop,o=Math.floor(i/6);A.scrollTop=i=o+i,t>A.scrollTop&&(A.scrollTop=e,clearTimeout(n))}),20);else if(e===t)return!1},closest:function(A,e){if(!A)return null;for(var t=A.matches||A.webkitMatchesSelector||A.mozMatchesSelector||A.msMatchesSelector;A&&!t.call(A,e);)A=A.parentElement;return A},addEventListener:function(A,e,t){if(A)if(A.length)for(var i=0;A.length>i;i+=1)A[i].addEventListener(e,(function(A){t&&"function"==typeof t&&t(A)}));else A.addEventListener(e,(function(A){t&&"function"==typeof t&&t(A)}))},remove:function(A){if(A)if(A.removeNode=[],void 0!==A.length){for(var e=A.length,t=0;e>t;t+=1)A.removeNode.push({parent:A[t].parentNode,inner:A[t].outerHTML,next:A[t].nextSibling});for(t=0;e>t;t+=1)A[0].parentNode.removeChild(A[0])}else A.removeNode.push({parent:A.parentNode,inner:A.outerHTML,next:A.nextSibling}),A.parentNode.removeChild(A)},getStyleValue:function(A,e){var t=A.ownerDocument.defaultView;return t&&t.opener||(t=window),A.currentStyle?A.currentStyle[e]:t.getComputedStyle(A)[e]},isShow:function(A){return"none"!==this.getStyleValue(A,"display")},getHeight:function(A){if(null!=A){if(this.isShow(A)){if(null!=A.style.height&&A.style.height.length>0)return parseFloat(A.style.height);if(parseFloat(this.getStyleValue(A,"height"))>0)return parseFloat(this.getStyleValue(A,"height"));if(A.offsetHeight>0){var e=this.getStyleValue(A,"borderTopWidth"),t=this.getStyleValue(A,"borderBottomWidth"),i=this.getStyleValue(A,"paddingTop"),o=this.getStyleValue(A,"paddingBottom"),n=parseFloat(A.offsetHeight)-parseFloat(e)-parseFloat(t)-parseFloat(i)-parseFloat(o);return parseFloat(n)}return 0}var r=A.getAttribute("style")||"";A.setAttribute("style",r+"visibility:hidden;display:block !important;");var a=this.getHeight(A);return A.setAttribute("style",r),Math.ceil(a)}},getWidth:function(A){if(null!=A){if(this.isShow(A)){if(null!=A.style.width&&A.style.width.length>0)return parseFloat(A.style.width);if(parseFloat(this.getStyleValue(A,"width"))>0)return parseFloat(this.getStyleValue(A,"width"));if(A.offsetWidth>0){var e=this.getStyleValue(A,"borderLeftWidth"),t=this.getStyleValue(A,"borderRightWidth"),i=this.getStyleValue(A,"paddingLeft"),o=this.getStyleValue(A,"paddingRight"),n=parseFloat(A.offsetWidth)-parseFloat(e)-parseFloat(t)-parseFloat(i)-parseFloat(o);return parseFloat(n)}return 0}var r=A.getAttribute("style")||"";A.setAttribute("style",r+"visibility:hidden;display:inline-block !important;");var a=this.getWidth(A);return A.setAttribute("style",r),Math.ceil(a)}},outerHeight:function(A,e){var t=A.offsetHeight;if(e){var i=A.currentStyle||getComputedStyle(A);t+=parseInt(i.marginTop,0)+parseInt(i.marginBottom,0)}return t},outerWidth:function(A,e){var t=A.offsetWidth;if(e){var i=A.currentStyle||getComputedStyle(A);t+=parseInt(i.marginLeft,0)+parseInt(i.marginRight,0)}return t},isEmptyObject:function(A){var e=null;for(e in A)return!1;return!0},hasClass:function(A,e){if(A){var t=A.className.match&&A.className.match(new RegExp("(\\s|^)"+e+"(\\s|$)"));return Boolean(t)}return!1},addClass:function(A,e){A&&(this.hasClass(A,e)||(A.className+=" "+e))},removeClass:function(A,e){if(this.hasClass(A,e)){var t=new RegExp("(\\s|^)"+e+"(\\s|$)");A.className=A.className.replace(t," ")}},toggleClass:function(A,e){this.hasClass(A,e)?this.removeClass(A,e):this.addClass(A,e)},simulateEvent:function(A,e){var t=document.createEvent("Event");t.initEvent(e,!0,!0);A.dispatchEvent(t)},bind:function(A,e,t){A&&(A.addEventListener?A.addEventListener(e,t,!1):A.attachEvent?A.attachEvent("on"+e,t):A["on"+e]=t)},delegate:function(A,e,t,i){if(A)if(A.length)for(var o=0;A.length>o;o+=1)this.delegateFn(A[o],e,t,i);else this.delegateFn(A,e,t,i)},delegateFn:function(A,e,t,i){var o=this;function n(A){var n=(A=A||window.event).target||A.srcElement;o.matchSelector(n,e)&&i&&("mouseenter"===t||"mouseleave"===t?o.fixedMouse(A,n)&&i.call(n,A):i.call(n,A))}t=t.toLowerCase(),A.addEventListener?A.addEventListener("mouseenter"===t?"mouseover":"mouseleave"===t?"mouseout":t,n):A.attachEvent("mouseenter"===t?"onmouseover":"mouseleave"===t?"onmouseout":"on"+t,n)},matchSelector:function(A,e){return"#"===e.charAt(0)?A.id===e.slice(1):"."===e.charAt(0)?-1!==(" "+A.className+" ").indexOf(" "+e.slice(1)+" "):A.tagName.toLowerCase()===e.toLowerCase()},contains:function(A,e){return A.contains?A!==e&&A.contains(e):Boolean(16&A.compareDocumentPosition(e))},fixedMouse:function(A,e){var t=null,i=A.type.toLowerCase();if("mouseover"===i)t=A.relatedTarget||A.fromElement;else{if("mouseout"!==i)return!0;t=A.relatedTarget||A.toElement}return t&&"xul"!==t.prefix&&!this.contains(e,t)&&t!==e},fireEvent:function(A,e){var t=null;if(A.ownerDocument)t=A.ownerDocument;else{if(9!==A.nodeType)throw new Error("Invalid node passed to fireEvent: "+A.id);t=A}if(A.dispatchEvent){var i="";switch(e){case"click":case"mousedown":case"mouseup":i="MouseEvents";break;case"focus":case"change":case"blur":case"select":i="HTMLEvents";break;default:Bh.error("fireEvent: Couldn't find an event class for event '"+e+"'.")}(o=t.createEvent(i)).initEvent(e,"change"!==e,!0),o.synthetic=!0,A.dispatchEvent(o,!0)}else if(A.fireEvent){var o;(o=t.createEventObject()).synthetic=!0,A.fireEvent("on"+e,o)}}};xh.create=function(A,e){var t=document.createElement(A);return t.setAttribute("class",e),t};xh.createNS=function(A,e){var t=document.createElementNS("http://www.w3.org/2000/svg",A);return t.setAttribute("class",e),t};xh.select=function(A){return A.indexof("#")?document.getElementById(A.replace("#","")):A.indexof(".")?document.getElementsByClassName(A.replace(".","")):document.getElementsByTagName(A)};var Sh=function(A){if(""===A)return 0;if("string"==typeof A){if(-1===A.indexOf("px")){var e=Number(A);return isNaN(e)?0:e}var t=A.split("px"),i=Number(t[0]);return isNaN(i)?0:i}return 0};xh.drag=function(A){var e=mh.isPc(),t=Object.assign({element:null,handle:null,axis:"all",cursor:"move",distance:0,start:null,move:null,stop:null},A),i=t.element;if(!i)return!1;var o=t.handle||i,n=void 0,r=!1,a=function(A){if(e)var o={x:A.clientX,y:A.clientY};else o={x:A.touches[0].clientX,y:A.touches[0].clientY};var a={x:o.x-n.x,y:o.y-n.y};r?(t.move&&t.move(n,o,a),n=o,function(A){var e=i.offsetLeft,o=i.offsetTop,n=Sh(getComputedStyle(i).marginLeft),r=Sh(getComputedStyle(i).marginTop),a=0>(e-=n)+A.x?0:e+A.x,s=0>(o-=r)+A.y?0:o+A.y;switch(t.axis){case"x":i.style.left=a+"px";break;case"y":i.style.top=s+"px";break;case"all":default:i.style.left=a+"px",i.style.top=s+"px"}}(a)):r=function(A){return Math.pow(A.x,2)+Math.pow(A.y,2)>Math.pow(t.distance,2)&&(t.start&&t.start(n),!0)}(a)},s=function(A){var i,r,s=A;if(e){if(i=s.button,!((r=navigator.userAgent).indexOf("compatible")>-1&&r.indexOf("MSIE")>-1&&!mh.isOpera()?1===i:0===i))return;n={x:s.clientX,y:s.clientY},document.addEventListener("mousemove",a)}else n={x:s.touches[0].clientX,y:s.touches[0].clientY},o.addEventListener("touchmove",a);t.start&&t.start(n)},l=function(){r&&t.end&&t.end(n),r=!1,document.removeEventListener("mousemove",a),o.removeEventListener("touchmove",a)};e?(o.style.cursor=t.cursor,o.style.userSelect="none",o.addEventListener("mousedown",s),document.addEventListener("mouseup",l)):(o.addEventListener("touchend",l),o.addEventListener("touchstart",s))};xh.sizable=function(A){var e=Object.assign({element:null,axis:"all",minWidth:100,minHeight:100,distance:0,start:null,sizable:null,stop:null},A),t=e.element;if(!t)return!1;var i=void 0,o=!1,n=xh.create("div","yj-resize"),r=void 0,a=void 0,s=function(A){var n={x:A.clientX,y:A.clientY},s={x:n.x-i.x,y:n.y-i.y};o?(e.sizable&&e.sizable(i,n,s),function(A){var i=t.offsetLeft,o=t.offsetTop,n=e.minWidth>r+A.x?e.minWidth:r+A.x,s=e.minHeight>a+A.y?e.minHeight:a+A.y;switch(e.resize&&e.resize(n,s),t.style.left=i+"px",t.style.top=o+"px",e.axis){case"x":t.style.width=n+"px";break;case"y":t.style.height=s+"px";break;case"all":default:t.style.width=n+"px",t.style.height=s+"px"}}(s)):o=function(A){return Math.pow(A.x,2)+Math.pow(A.y,2)>Math.pow(e.distance,2)&&(e.start&&e.start(i),!0)}(s)},l=function(A){r=t.clientWidth,a=t.clientHeight;var e,o,n=A;(e=n.button,(o=navigator.userAgent).indexOf("compatible")>-1&&o.indexOf("MSIE")>-1&&!mh.isOpera()?1===e:0===e)&&(i={x:n.clientX,y:n.clientY},document.addEventListener("mousemove",s),document.addEventListener("touchmove",s))},c=function(){o&&e.end&&e.end(i),o=!1,document.removeEventListener("mousemove",s),document.removeEventListener("touchmove",s)};xh.addClass(t,"yj-sizable"),t.appendChild(n),n.addEventListener("mousedown",l),n.addEventListener("touchstart",l),document.addEventListener("mouseup",c),document.addEventListener("touchend",c)};var wh=function(A){var e=this,t=Object.assign({element:null,min:0,max:100,cur:50,step:1,isShowProgress:!0,input:null,change:null,currentColor:"#11dab7",defaultColor:"#999"},A);this._opt=t;var i=xh.create("div","yj-range"),o=xh.create("input","yj-input-range");e.input=o,o.setAttribute("type","range"),o.setAttribute("step",t.step),o.setAttribute("min",t.min),o.setAttribute("max",t.max),o.setAttribute("value",t.cur);var n=xh.create("span","yj-range-min");n.innerText=t.min;var r=xh.create("span","yj-range-cur");e.cur=r,r.innerText=t.cur;var a=xh.create("span","yj-range-max");a.innerText=t.max;var s=xh.create("span","yj-range-progress");i.appendChild(o),t.isShowProgress&&(i.appendChild(n),i.appendChild(r),i.appendChild(a)),i.appendChild(s),t.element.appendChild(i),e.setProgress(t.cur),o.addEventListener("input",(function(){e.setProgress(this.value),t.input&&t.input(this.value)})),o.addEventListener("change",(function(){e.setProgress(this.value),t.change&&t.change(this.value)}))};wh.prototype.setProgress=function(A){var e=this._opt,t=this.input,i=this.cur,o=(A-e.min)/(e.max-e.min)*100;t.value=A,t.style.background="linear-gradient(to right,"+e.currentColor+" 0%,"+e.currentColor+" "+o+"%,"+e.defaultColor+" "+o+"%, "+e.defaultColor+" 100%)",i.innerText=A},wh.prototype.reset=function(){this.setProgress(this._opt.cur)},xh.range=wh;var Mh=function(A){this._opt=Object.assign({element:null,min:0,max:100,from:null,to:null,step:1,currentColor:"#11dab7",defaultColor:"#999",change:null},A),this._opt.from=this._opt.from||this._opt.min,this._opt.to=this._opt.to||this._opt.max,this.init()};Mh.prototype={init:function(){var A=xh.create("div","yj-multiple-range"),e=xh.create("div","yj-range-track"),t=xh.create("span","yj-slider yj-slider-min");t.id="minSlider",t.type="minimum";var i=xh.create("span","yj-slider yj-slider-max");i.id="maxSlider",i.type="maximum",this._state={from:this._opt.from,to:this._opt.to},e.style.backgroundColor=this._opt.currentColor,A.style.backgroundColor=this._opt.defaultColor,A.appendChild(e),A.appendChild(t),A.appendChild(i),this._opt.element.appendChild(A),this._track=e,this._sliders={min:t,max:i},this._element=A,this.bindEvent(),this.update(!1)},bindEvent:function(){var A=this,e=!1,t=null,i=null,o=function(A){A=A||event;i=A.screenX,t=this,e=!0};this._sliders.min.addEventListener("mousedown",o),this._sliders.max.addEventListener("mousedown",o),document.addEventListener("mousemove",(function(o){if(e){o=o||event;var n=Math.round((o.screenX-i)/A._pix/A._opt.step)*A._opt.step;0!==n&&(i=n*A._pix+i,"minimum"===t.type?A._state.from+=n:A._state.to+=n,A.recalculate(t),A.update(!0))}})),document.addEventListener("mouseup",(function(){t=null,e=!1}))},update:function(A){var e=this._sliders.min.offsetWidth,t=this._sliders.max.offsetWidth;this._pix||(this._pix=(this._element.offsetWidth-e-t)/(this._opt.max-this._opt.min));var i=(this._state.from-this._opt.min)*this._pix,o=(this._state.to-this._opt.min)*this._pix+e+t;this._track.style.left=i+e/2+"px",this._track.style.width=o-i-e/2-t/2+"px",this._sliders.min.style.left=i+"px",this._sliders.max.style.left=o+"px",this._opt.change&&A&&this._opt.change(this._state)},recalculate:function(A){this._opt.max>this._state.to||(this._state.to=this._opt.max),this._state.from>this._opt.min||(this._state.from=this._opt.min),A&&("maximum"===A.type&&(this._state.to>this._state.from||(this._state.to=this._state.from)),"minimum"===A.type&&(this._state.to>this._state.from||(this._state.from=this._state.to)))},getProgress:function(){return this._state},setProgress:function(A){this._state=A,this.recalculate(),this.update(!1)}},xh.multipleRange=Mh;var bh=function(){var A=this;Math.randomString=function(A){for(var e="",t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",i=0;A>i;i+=1)e+=t.charAt(Math.floor(Math.random()*t.length));return e},A.viewport=document.body,A.counter=0,A.prompt=function(A,e){return new t(A,e)},A.confirm=function(A){return new i(A)},A.progress=function(A){return new n(A)},A.error={},A.success={},A.warning={},A.info={},A.alert=function(A,e){if(["success","error","warning","info"].indexOf(A)>-1)return new o(A,e)},A.window=function(A){return new r("window",A)};var e={$type:null,$el:null,$options:null,debug:function(){this.$options.debug&&window.console.debug.apply(window.console,arguments)},_processInput:function(e){if(Array.isArray(e.buttons)){for(var t={},i=0;e.buttons.length>i;i+=1)t[e.buttons[i]]=A.base.OPTIONS.buttons[e.buttons[i]];e.buttons=t}for(var i in e.customBtnClass=e.customBtnClass?e.customBtnClass:A.base.DEFAULTS.customBtnClass,e.buttons)if(e.buttons.hasOwnProperty(i)){var o=e.buttons[i];(o=uh.extend(!0,{},A.base.OPTIONS.buttons[i],o)).class||(o.class=e.customBtnClass),e.buttons[i]=o}return void 0===(e=uh.extend(!0,{},A.base.DEFAULTS,e)).showClass&&(e.showClass=A.base.OPTIONS.showClass),void 0===e.hideClass&&(e.hideClass=A.base.OPTIONS.hideClass),void 0===e.baseClass&&(e.baseClass=A.base.OPTIONS.baseClass),void 0===e.delayToRemove&&(e.delayToRemove=A.base.OPTIONS.delayToRemove),e.iconClass||(e.iconClass=A.base.OPTIONS.icons[e.iconSource][this.$type]),e},_init:function(){var A=this;A._createMarkup(),A.setTitle(A.$options.title),A.$options.draggable&&(A.$el.classList.add("draggable"),A._enableDrag()),A.$options.closeButton&&A._addCloseButton(),A.$options.closeOnEsc&&document.addEventListener("keyup.lobibox",(function(e){27===e.which&&A.destroy()})),A.$options.baseClass&&A.$el.classList.add(A.$options.baseClass),A.$options.showClass&&(A.$el.classList.remove(A.$options.hideClass),A.$el.classList.add(A.$options.showClass)),A.$options.id&&A.$el.setAttribute("id",A.$options.id),A.$el.dataset.lobibox=A},_calculatePosition:function(A){var e;return e="top"===A?30:"bottom"===A?window.outerHeight-xh.outerHeight(this.$el)-30:(window.outerHeight-xh.outerHeight(this.$el))/2,"left:"+(window.outerWidth-xh.outerWidth(this.$el))/2+"px;top:"+e+"px;"},_createButton:function(A,e){var t=this,i=document.createElement("button"),o=[];return e&&e.class&&(o=e.class.split(" ")),o.map((function(A,e){i.classList.add(A)})),i.dataset.type=A,i.innerHTML=e.text,t.$options.callback&&"function"==typeof t.$options.callback&&i.addEventListener("click",(function(e){t._onButtonClick(t.$options.buttons[A],A),t.$options.callback(t,this.dataset.type,e)})),i},_onButtonClick:function(A,e){("ok"===e&&"prompt"===this.$type&&this.isValid()||"prompt"!==this.$type||"ok"!==e)&&A&&A.closeOnClick&&this.destroy()},_generateButtons:function(){var A=[];for(var e in this.$options.buttons)if(this.$options.buttons.hasOwnProperty(e)){var t=this._createButton(e,this.$options.buttons[e]);A.push(t)}return A},_createMarkup:function(){var e=this,t=document.createElement("div");t.className="lobibox",t.dataset.isModal=e.$options.modal,t.dataset.backdrop=!!e.$options.backdrop;var i=document.createElement("div");i.className="lobibox-header",t.appendChild(i);var o=document.createElement("span");o.className="lobibox-title",i.appendChild(o);var n=document.createElement("div");if(n.className="lobibox-body",t.appendChild(n),e.$options.buttons&&!uh.isEmptyObject(e.$options.buttons)){var r=document.createElement("div");r.className="lobibox-footer",e._generateButtons().map((function(A,e){r.appendChild(A)})),t.appendChild(r),A.base.OPTIONS.buttonsAlign.indexOf(e.$options.buttonsAlign)>-1&&r.classList.add("text-"+e.$options.buttonsAlign)}t.classList.add(A.base.OPTIONS.modalClasses[e.$type]),e.$el=t},_setSize:function(){var A=this;A.setWidth(A.$options.width),A.setHeight("auto"===A.$options.height?xh.outerHeight(A.$el):A.$options.height)},_calculateBodyHeight:function(A){var e=this.$el.querySelector(".lobibox-header").outerHeight,t=this.$el.querySelector(".lobibox-footer").outerHeight;return A-(e||0)-(t||0)},_addBackdrop:function(){if(0===document.querySelectorAll(".lobibox-backdrop").length){var e=document.createElement("div");e.className="lobibox-backdrop",A.viewport.appendChild(e)}},_removeBackdrop:function(){for(var A=document.querySelectorAll(".lobibox-backdrop"),e=0;A.length>e;e+=1)A[e].remove()},_triggerEvent:function(A){this.$options[A]&&"function"==typeof this.$options[A]&&this.$options[A](this)},_calculateWidth:function(A){return(A=Math.min(Math.max(A,this.$options.width),window.outerWidth))===window.outerWidth&&(A-=2*this.$options.horizontalOffset),A},_calculateHeight:function(A){return(A=Math.min(Math.max(A,this.$options.height),window.outerHeight))===window.outerHeight&&(A-=2*this.$options.verticalOffset),A},_addCloseButton:function(){var A=this,e=document.createElement("span");e.className="btn-close",e.innerHTML="×",A.$el.querySelector(".lobibox-header").appendChild(e),e.addEventListener("mousedown",(function(A){A.stopPropagation()})),e.addEventListener("click",(function(){A.destroy()}))},_position:function(){this._setSize();var A=this._calculatePosition();this.setPosition(A.left,A.top)},_isMobileScreen:function(){return 768>window.outerHeight},_enableDrag:function(){var A=this.$el,e=A.querySelector(".lobibox-header");e.addEventListener("mousedown",(function(e){e.preventDefault(),A.setAttribute("offset-left",e.offsetX),A.setAttribute("offset-top",e.offsetY),A.setAttribute("allow-drag","true")})),document.addEventListener("mouseup",(function(){A.setAttribute("allow-drag","false")})),document.addEventListener("mousemove",(function(e){if("true"===A.getAttribute("allow-drag")){var t=e.clientX,i=e.clientY;0>i&&(i=5),i>document.body.clientHeight&&(i=document.body.clientHeight-10),0>t&&(t=5),t>document.body.clientWidth-A.offsetWidth&&(t=document.body.clientWidth-A.offsetWidth),A.style.cssText+="left:"+t+"px;top:"+i+"px;"}})),e.addEventListener("touchstart",(function(e){var t=A.style.top,i=e.originalEvent.targetTouches[0].clientY;A.setAttribute("offset-left",e.originalEvent.targetTouches[0].clientX-A.style.left),A.setAttribute("offset-top",i-t),A.setAttribute("allow-drag","true")})),document.addEventListener("touchend",(function(){A.setAttribute("allow-drag","false")})),document.addEventListener("touchmove",(function(e){if("true"===A.getAttribute("allow-drag")){var t=e.originalEvent.targetTouches[0].clientX,i=e.originalEvent.targetTouches[0].clientY;0>i&&(i=5),i>document.body.clientHeight&&(i=document.body.clientHeight-10),0>t&&(t=5),t>document.body.clientWidth-A.offsetWidth&&(t=document.body.clientWidth-A.offsetWidth),A.style.cssText+="left:"+t+"px;top:"+i+"px;"}}))},_setContent:function(A){return A&&("string"==typeof A&&A.constructor==String?this.$el.querySelector(".lobibox-body").innerHTML=A:this.$el.querySelector(".lobibox-body").appendChild(A)),this},_beforeShow:function(){this._triggerEvent("onShow")},_afterShow:function(){var e=this;A.counter++,e.$el.setAttribute("data-nth",A.counter),e.$options.draggable||window.addEventListener("resize.lobibox-"+e.$el.getAttribute("data-nth"),(function(){e.refreshWidth(),e.refreshHeight(),e.$el.style.cssText+="left:50%;top:50%;margin-left:"+-e.$el.width/2+"px;margin-top:"+-e.$el.height/2+"px;"})),e._triggerEvent("shown")},_beforeClose:function(){this._triggerEvent("beforeClose")},_afterClose:function(){this.$options.draggable||window.removeEventListener("resize.lobibox-"+this.$el.getAttribute("data-nth")),this._triggerEvent("closed")},_beforeHide:function(){this._triggerEvent("beforeHide")},_afterHide:function(){this._triggerEvent("afterHide")},hide:function(){var e=this;function t(){e.$el.classList.add("lobibox-hidden");for(var t=document.querySelectorAll(".lobibox"),i=[].slice.call(t),o=0;i.length>o;o+=1)!0!==i[o].dataset.isModal&&i.splice(o,1);for(o=0;i.length>o;o+=1)i[o].classList.contains("lobibox-hidden")&&i.splice(o,1);if(0===i.length){var n=document.querySelectorAll(".lobibox-backdrop");for(o=0;n.length>o;o+=1)A.viewport.removeChild(n[o]);A.viewport.classList.remove(A.base.OPTIONS.bodyClass)}e._afterHide()}return e._beforeHide(),e.$options.hideClass?(e.$el.classList.remove(e.$options.showClass),e.$el.classList.add(e.$options.hideClass),setTimeout((function(){t()}),e.$options.delayToRemove)):t(),this},destroy:function(){var e=this;function t(){e.$el.remove();for(var t=document.querySelectorAll(".lobibox"),i=[].slice.call(t),o=0;i.length>o;o+=1)"true"!==i[o].dataset.isModal&&i.splice(o,1);if(0===i.length){var n=document.querySelectorAll(".lobibox-backdrop");for(o=0;n.length>o;o+=1)A.viewport.removeChild(n[o]);A.viewport.classList.remove(A.base.OPTIONS.bodyClass)}var r=!1;for(o=0;i.length>o;o+=1)if("true"===i[o].dataset.backdrop){r=!0;break}r||e._removeBackdrop(),e._afterClose()}return e._beforeClose(),e.$options.hideClass?(xh.removeClass(e.$el,e.$options.showClass),xh.addClass(e.$el,e.$options.hideClass),setTimeout((function(){t()}),e.$options.delayToRemove)):t(),this},setWidth:function(A){return this.$el.style.cssText+="width:"+this._calculateWidth(A)+"px;",this},refreshWidth:function(){this.setWidth(this.$el.style.width)},refreshHeight:function(){this.setHeight(this.$el.style.height)},setHeight:function(A){var e=this;return e.$el.style.cssText+="height:"+e._calculateHeight(A)+"px",e.$el.querySelector(".lobibox-body").style.cssText+="height:"+(e.$options.height-41)+"px",e},setSize:function(A,e){return this.setWidth(A),this.setHeight(e),this},setPosition:function(A,e){var t;return"number"==typeof A&&"number"==typeof e?t="left:"+A+"px;top:"+e+"px;":"string"==typeof A?t=this._calculatePosition(A):"object"===lc(A)&&(t="left:"+A.left+"px;top:"+A.top+"px;right:"+A.right+"px;bottom:"+A.bottom+"px;"),this.$el.style.cssText+=t,this},setTitle:function(A){return this.$el.querySelector(".lobibox-title").innerHTML=A},getTitle:function(){return this.$el.querySelector(".lobibox-title").innerHTML},show:function(){var e=this,t=A.viewport;(e._beforeShow(),e.$el.classList.remove("lobibox-hidden"),t.appendChild(e.$el),e.$options.buttons)&&e.$el.querySelector(".lobibox-footer").children[0].focus();return(e.$options.modal||e.$options.backdrop)&&(t.classList.add(A.base.OPTIONS.bodyClass),e._addBackdrop()),!1!==e.$options.delay&&setTimeout((function(){e.destroy()}),e.$options.delay),e._afterShow(),e}};function t(e,t){this.$input=null,this.$type="prompt","object"==lc(e)?t=e:this.$promptType=e,t=uh.extend(!0,{},A.prompt.DEFAULT_OPTIONS,t),this.$options=this._processInput(t),this._init(),this.debug(this)}function i(A){this.$type="confirm",this.$options=this._processInput(A),this._init(),this.debug(this)}function o(A,e){this.$type=A,this.$options=this._processInput(e),this._init(),this.debug(this)}function n(A){this.$type="progress",this.$progressBarElement=null,this.$options=this._processInput(A),this.$progress=0,this._init(),this.debug(this)}function r(A,e){this.$type=A,this.$options=this._processInput(e),this._init(),this.debug(this)}A.base={},A.base.OPTIONS={bodyClass:"lobibox-open",modalClasses:{error:"lobibox-error",success:"lobibox-success",info:"lobibox-info",warning:"lobibox-warning",confirm:"lobibox-confirm",progress:"lobibox-progress",prompt:"lobibox-prompt",default:"lobibox-default",window:"lobibox-window"},buttonsAlign:["left","center","right"],buttons:{ok:{class:"lobibox-btn lobibox-btn-default",text:"OK",closeOnClick:!0},cancel:{class:"lobibox-btn lobibox-btn-cancel",text:"Cancel",closeOnClick:!0},yes:{class:"lobibox-btn lobibox-btn-yes",text:"确定",closeOnClick:!0},no:{class:"lobibox-btn lobibox-btn-no",text:"取消",closeOnClick:!0}},icons:{bootstrap:{confirm:"glyphicon glyphicon-question-sign",success:"glyphicon glyphicon-ok-sign",error:"glyphicon glyphicon-remove-sign",warning:"glyphicon glyphicon-exclamation-sign",info:"glyphicon glyphicon-info-sign"},fontAwesome:{confirm:"fa fa-question-circle",success:"fa fa-check-circle",error:"fa fa-times-circle",warning:"fa fa-exclamation-circle",info:"fa fa-info-circle"}}},A.base.DEFAULTS={horizontalOffset:5,verticalOffset:5,width:600,height:"auto",closeButton:!0,draggable:!0,customBtnClass:"lobibox-btn lobibox-btn-default",modal:!1,debug:!1,buttonsAlign:"center",closeOnEsc:!0,delayToRemove:200,delay:!1,baseClass:"animated-super-fast",showClass:"zoomIn",hideClass:"zoomOut",iconSource:"bootstrap",onShow:null,shown:null,beforeClose:null,closed:null},t.prototype=uh.extend(!0,{},e,{constructor:t,_processInput:function(i){var o=e._processInput.call(this,i);return o.buttons={ok:A.base.OPTIONS.buttons.ok,cancel:A.base.OPTIONS.buttons.cancel},i=uh.extend(!0,{},o,t.DEFAULT_OPTIONS,i)},_init:function(){e._init.call(this),this._setContent(this.$options.content),this.show()},_afterShow:function(){var A=this;A._setContent(A._createInput())._position(),A.$input&&A.$input.focus();var t=(window.innerHeight-xh.outerHeight(A.$el))/2,i=(window.innerWidth-xh.outerWidth(A.$el))/2;A.setPosition(i,t),e._afterShow.call(A)},_createInput:function(){var A,e=this;if(e.$options.multiline)e.$input=document.createElement("textarea"),e.$input.setAttribute("rows",e.$options.lines);else{if(!e.$promptType)return;e.$input=document.createElement("input"),e.$input.setAttribute("type","' + me.$promptType + '")}if(e.$input.classList.add("lobibox-input"),"[object Object]"===Object.prototype.toString.call(e.$options.attrs))for(var t in e.$options.attrs)e.$input.setAttribute(t,e.$options.attrs[t]);e.$options.value&&e.setValue(e.$options.value),e.$options.label&&((A=document.createElement("label")).innerHTML=e.$options.label);var i=document.createElement("div");return e.$options.label&&i.appendChild(A),i.appendChild(e.$input),i},setValue:function(A){return this.$input.value=A,this},getValue:function(){return this.$input.value},isValid:function(){var A=this,e=A.$el.querySelectorAll(".lobibox-input-error-message");if(A.$options.required&&!A.getValue()){if(A.$input.classList.add("invalid"),0===e.length){var t=document.createElement("p");t.className="lobibox-input-error-message",t.innerHTML=A.$options.errorMessage,A.$el.querySelector(".lobibox-body").appendChild(t),A._position(),A.$input.focus()}return!1}A.$input.classList.remove("invalid");for(var i=0;e.length>i;i+=1)e[i].remove();return A._position(),A.$input.focus(),A._removeBackdrop(),!0},_beforePromptShow:function(){this._triggerEvent("beforeWindowShow")},_beforePromptHide:function(){this._triggerEvent("beforeWindowHide")},_afterPromptShow:function(){this._triggerEvent("afterWindowShow")},_afterPromptHide:function(){this._triggerEvent("afterWindowHide")},promptHide:function(){return this._beforePromptHide(),this.$el.classList.add("hide"),this._afterPromptHide(),this},promptShow:function(){return this._beforePromptShow(),this.$el.classList.remove("hide"),this._afterPromptShow(),this.$el.style.zIndex=(new Date).getTime()-A.window.startTime,this}}),t.DEFAULT_OPTIONS={width:400,attrs:{},value:"",multiline:!1,lines:3,type:"text",label:"",required:!0,errorMessage:"The field is required"},i.prototype=uh.extend(!0,{},e,{constructor:i,_processInput:function(t){var i=e._processInput.call(this,t);return i.buttons={yes:A.base.OPTIONS.buttons.yes,no:A.base.OPTIONS.buttons.no},t=uh.extend(!0,{},i,A.confirm.DEFAULTS,t)},_init:function(){e._init.call(this),this.show()},_afterShow:function(){var A=this,t=document.createElement("div");if(A.$options.iconClass){var i=document.createElement("div");i.className="lobibox-icon-wrapper",t.appendChild(i);var o=document.createElement("i");o.className="lobibox-icon"+A.$options.iconClass,t.appendChild(o)}var n=document.createElement("div");n.className="lobibox-body-text-wrapper",t.appendChild(n);var r=document.createElement("span");r.className="lobibox-body-text",r.innerHTML=A.$options.msg,n.appendChild(r),A._setContent(t.innerHTML),A._position(),e._afterShow.call(A)},_beforeConfirmShow:function(){this._triggerEvent("beforeWindowShow")},_beforeConfirmHide:function(){this._triggerEvent("beforeWindowHide")},_afterConfirmShow:function(){this._triggerEvent("afterWindowShow")},_afterConfirmHide:function(){this._triggerEvent("afterWindowHide")},confirmHide:function(){return this._beforeConfirmHide(),this.$el.classList.add("hide"),this._afterConfirmHide(),this},confirmShow:function(){return this._beforeConfirmShow(),this.$el.classList.remove("hide"),this._afterConfirmShow(),this.$el.style.zIndex=(new Date).getTime()-A.window.startTime,this}}),A.confirm.DEFAULTS={title:"Question",width:500},o.prototype=uh.extend(!0,{},e,{constructor:o,_processInput:function(t){var i=e._processInput.call(this,t);return i.buttons={},t=uh.extend(!0,{},i,A.alert.OPTIONS[this.$type],A.alert.DEFAULTS,t)},_init:function(){e._init.call(this),this.show()},_afterShow:function(){var A=this,t=document.createElement("div");if(A.$options.iconClass){var i=document.createElement("div");i.className="lobibox-icon-wrapper",t.appendChild(i);var o=document.createElement("i");o.className="lobibox-icon"+A.$options.iconClass,t.appendChild(o)}var n=document.createElement("div");n.className="lobibox-body-text-wrapper",t.appendChild(n);var r=document.createElement("span");r.className="lobibox-body-text",r.innerHTML=A.$options.msg,n.appendChild(r),A._setContent(t.innerHTML),A._setSize();var a=(window.innerHeight-xh.outerHeight(A.$el))/2,s=(window.innerWidth-xh.outerWidth(A.$el))/2;A.setPosition(s,a),e._afterShow.call(A)}}),A.alert.OPTIONS={warning:{title:"Warning"},info:{title:"Information"},success:{title:"Success"},error:{title:"Error"}},A.alert.DEFAULTS={},n.prototype=uh.extend(!0,{},e,{constructor:n,_processInput:function(t){var i=e._processInput.call(this,t);return t=uh.extend(!0,{},i,A.progress.DEFAULTS,t)},_init:function(){e._init.call(this),this.show()},_afterShow:function(){var A,t=this;t.$progressBarElement=t.$options.progressTpl?t.$options.progressTpl:t._createProgressbar(),t.$options.label&&((A=document.createElement("label")).innerHTML=t.$options.label);var i=document.createElement("div").appendChild(A);i.appendChild(t.$progressBarElement),t._setContent(i),t._position(),e._afterShow.call(t)},_createProgressbar:function(){var A=document.createElement("div");A.classList.add("lobibox-progress-bar-wrapper"),A.classList.add("lobibox-progress-outer");var e=document.createElement("div");if(e.classList.add("lobibox-progress-bar"),e.classList.add("lobibox-progress-element"),A.appendChild(e),this.$options.showProgressLabel){var t=document.createElement("span");t.className="lobibox-progress-text",t.dataset.role="progress-text",A.appendChild(t)}return A},setProgress:function(A){var e=this;if(100!==e.$progress)return A=Math.min(100,Math.max(0,A)),e.$progress=A,e._triggerEvent("progressUpdated"),100===e.$progress&&e._triggerEvent("progressCompleted"),e.$el.querySelector(".lobibox-progress-element").style.cssText+="width"+A.toFixed(1)+"%",e.$el.querySelector(".lobibox-progress-text").innerHTML=A.toFixed(1)+"%",e},getProgress:function(){return this.$progress}}),A.progress.DEFAULTS={width:500,showProgressLabel:!0,label:"",progressTpl:!1,progressUpdated:null,progressCompleted:null},r.prototype=uh.extend(!0,{},e,{constructor:r,_processInput:function(t){var i=e._processInput.call(this,t);return t.content&&"function"==typeof t.content&&(t.content=t.content()),t=uh.extend(!0,{},i,A.window.DEFAULTS,t)},_init:function(){var A=this;e._init.call(A),A.setContent(A.$options.content),A.$options.url&&A.$options.autoload?(A.$options.showAfterLoad||A.show(),A.load((function(){A.$options.showAfterLoad&&A.show()}))):A.show()},_afterShow:function(){this._position(),e._afterShow.call(this)},_addCloseButton:function(){var A=this,e=document.createElement("span");e.className="btn-close",e.innerHTML="×",A.$el.querySelector(".lobibox-header").appendChild(e),e.addEventListener("mousedown",(function(A){A.stopPropagation()})),e.addEventListener("click",(function(){A.windowHide()}))},_beforeWindowShow:function(){this._triggerEvent("beforeWindowShow")},_beforeWindowHide:function(){this._triggerEvent("beforeWindowHide")},_afterWindowShow:function(){this._triggerEvent("afterWindowShow")},_afterWindowHide:function(){this._triggerEvent("afterWindowHide")},windowHide:function(){return this._beforeWindowHide(),this.$el.classList.add("hide"),this._afterWindowHide(),this},windowShow:function(){return this._beforeWindowShow(),this.$el.classList.remove("hide"),this._afterWindowShow(),this.$el.style.zIndex=(new Date).getTime()-A.window.startTime,this},setParams:function(A){return this.$options.params=A,this},getParams:function(){return this.$options.params},setLoadMethod:function(A){return this.$options.loadMethod=A,this},getLoadMethod:function(){return this.$options.loadMethod},setContent:function(A){return this.$options.content=A,this.$el.querySelector(".lobibox-body").innerHTML="",xh.append(this.$el.querySelector(".lobibox-body"),A),this},getContent:function(){return this.$options.content},setUrl:function(A){return this.$options.url=A,this},getUrl:function(){return this.$options.url},load:function(A){var e=this;return e.$options.url?($.ajax(e.$options.url,{method:e.$options.loadMethod,data:e.$options.params}).done((function(t){e.setContent(t),A&&"function"==typeof A&&A(t)})),e):e}}),A.window.DEFAULTS={width:480,height:600,content:"",url:"",draggable:!0,autoload:!0,loadMethod:"GET",showAfterLoad:!0,params:{}},A.window.startTime=(new Date).getTime();var a=function(e,t){this.$type=null,this.$options=null,this.$el=null;var i=this,o=function(A){for(var e=xh.closest(A,".lb-notify-tabs").childNodes,t=0;e.length>t;t+=1)"li"==e[t].nodeType&&e[t].classList.remove("active");A.classList.add("active");var i=A.querySelector("a").getAttribute("href"),o=xh.closest(i,".lb-notify-wrapper").querySelectorAll(".lb-tab-pane");for(t=0;o.length>t;t+=1)o[t].classList.remove("active");i.addClass("active")},n=function(e){var t=document.createElement("li");t.className=A.notify.OPTIONS[i.$type].class;var o=document.createElement("a");o.setAttribute("href","#"+e),t.appendChild(o);var n=document.createElement("i");return n.className="tab-control-icon"+i.$options.icon,o.appendChild(n),t},r=function(){var A=document.createElement("div");return A.className="lb-tab-pane",A.id=Math.randomString(10),A},a=function(A){if(i.$options.closable){var e=document.createElement("span");e.className="lobibox-close",e.innerHTML="×",A.appendChild(e),e.addEventListener("click",(function(){i.remove()}))}},s=function(A){i.$options.closeOnClick&&A.click((function(){i.remove()}))},l=function(A){if(i.$options.delay){if(i.$options.delayIndicator){var e=document.createElement("div");e.className="lobibox-delay-indicator";var t=document.createElement("div");e.appendChild(t),A.appendChild(e)}var o=0,n=1e3/30,r=(new Date).getTime(),a=setInterval((function(){i.$options.continueDelayOnInactiveTab?o=(new Date).getTime()-r:o+=n;var A=100*o/i.$options.delay;if(100>A||(A=100,i.remove(),a=clearInterval(a)),i.$options.delayIndicator)for(var t=e.querySelectorAll("div"),s=0;t.length>s;s+=1)t[s].style.cssText+="width:"+A+"%"}),n);i.$options.pauseDelayOnHover&&(A.addEventListener("mouseenter.lobibox",(function(){n=0})),A.addEventListener("mouseleave.lobibox",(function(){n=1e3/30})))}},c=function(A){return A=Math.min(window.outerWidth,A)};this.remove=function(){i.$el.classList.remove(i.$options.showClass),i.$el.classList.add(i.$options.hideClass);var e=i.$el.parentNode,t=xh.closest(e,".lobibox-notify-wrapper-large")||xh.closest(e,".lobibox-notify-wrapper");if(e){for(var n="#"+e.getAttribute("id"),r=t.querySelectorAll(".lb-notify-tabs li"),a=0;r.length>a;a+=1)r[a].querySelector("a").getAttribute("href")!==n&&r.splice(1,a);if(r.length>0)for(a=0;r.length>a;a+=1)r[a].classList.remove(A.notify.OPTIONS.class),r[a].classList.add(i.$options.hideClass);return setTimeout((function(){if("normal"===i.$options.size||"mini"===i.$options.size)i.$el.parentElement.removeChild(i.$el);else if("large"===i.$options.size){var t=function(A){var e=A.prev();return 0===e.length&&(e=A.next()),0===e.length?null:e}(r);t&&o(t),r.parentElement.removeChild(r),e.parentElement.removeChild(e)}var n=A.notify.list,a=n.indexOf(i);n.splice(a,1);var s=n[a];s&&s.$options.showAfterPrevious&&s._init()}),500),i}},i._init=function(){var e=function(){var e,t,o,n,r,h=A.notify.OPTIONS,d=document.createElement("div");if(d.classList.add("lobibox-notify"),d.classList.add(h[i.$type].class),d.classList.add(h.class),d.classList.add(i.$options.showClass),(o=document.createElement("div")).className="lobibox-notify-icon-wrapper",d.appendChild(o),(e=document.createElement("div")).className="lobibox-notify-icon",o.appendChild(e),t=document.createElement("div"),e.appendChild(t),i.$options.img){var p=document.createElement("img");p.src=i.$options.img,t.appendChild(p)}else if(i.$options.icon){var g=document.createElement("div");g.className="icon-el";var u=document.createElement("i");u.className=i.$options.icon,g.appendChild(u),t.appendChild(g)}else d.classList.add("without-icon");if((r=document.createElement("div")).className="lobibox-notify-msg",r.innerHTML=i.$options.msg,!1!==i.$options.messageHeight&&(r.style.cssText+="max-height:"+i.$options.messageHeight+"px;"),(n=document.createElement("div")).className="lobibox-notify-body",n.appendChild(r),d.appendChild(n),i.$options.title){var f=document.createElement("div");f.className="lobibox-notify-title",f.innerHTML=i.$options.title,n.insertBefore(f,r)}return a(d),"normal"!==i.$options.size&&"mini"!==i.$options.size||(s(d),l(d)),i.$options.width&&(d.style.cssText+="width:"+c(i.$options.width)+"px"),d}();if("mini"===i.$options.size&&e.classList.add("notify-mini"),"string"==typeof i.$options.position){var t=function(){var e,t=("large"===i.$options.size?".lobibox-notify-wrapper-large":".lobibox-notify-wrapper")+"."+i.$options.position.replace(/\s/gi,".");if(0!==(e=document.querySelectorAll(t)).length)return e[0];e=document.createElement("div");for(var o=t.split("."),n=1;o.length>n;n+=1)e.classList.add(o[n]);if(A.viewport.appendChild(e),"large"===i.$options.size){var r=document.createElement("ul");r.className="lb-notify-tabs";var a=document.createElement("div");a.className="lb-notify-wrapper",e.appendChild(r),e.appendChild(a)}return e}();!function(A,e){if("normal"===i.$options.size)e.classList.contains("bottom")?e.insertBefore(A,e.firstChild):e.appendChild(A);else if("mini"===i.$options.size)e.classList.contains("bottom")?e.insertBefore(A,e.firstChild):e.appendChild(A);else if("large"===i.$options.size){var t=r().appendChild(A),a=n(t.getAttribute("id"));e.querySelector(".lb-notify-wrapper").appendChild(t),e.querySelector(".lb-notify-tabs").appendChild(a),o(a);for(var s=a.querySelectorAll("a"),l=0;s.length>l;l+=1)s[l].click((function(){o(a)}))}}(e,t),t.classList.contains("center")&&(t.style.cssText+="margin-left:"+-t.offsetWidth/2+"px")}else A.viewport.appendChild(e),e.style.cssText+="position:fixed;left:"+i.$options.position.left+"px;top:"+i.$options.position.top+"px;";(i.$el=e,i.$options.sound)&&new Audio(i.$options.sound).play();i.$options.rounded&&i.$el.classList.add("rounded"),i.$el.addEventListener("click",(function(A){i.$options.onClickUrl&&(window.location.href=i.$options.onClickUrl),i.$options.onClick&&"function"==typeof i.$options.onClick&&i.$options.onClick.call(i,A)})),i.$el.dataset.lobibox=i},this.$type=e,this.$options=function(e){return"mini"!==e.size&&"large"!==e.size||(e=uh.extend(!0,{},A.notify.OPTIONS[e.size],e)),"mini"!==(e=uh.extend(!0,{},A.notify.OPTIONS[i.$type],A.notify.DEFAULTS,e)).size&&!0===e.title?e.title=A.notify.OPTIONS[i.$type].title:"mini"===e.size&&!0===e.title&&(e.title=!1),!0===e.icon&&(e.icon=A.notify.OPTIONS.icons[e.iconSource][i.$type]),!0===e.sound&&(e.sound=A.notify.OPTIONS[i.$type].sound),e.sound&&(e.sound=e.soundPath+e.sound+e.soundExt),e}(t),i.$options.showAfterPrevious&&0!==A.notify.list.length||this._init()};A.notify=function(e,t){if(["default","info","warning","error","success"].indexOf(e)>-1){var i=new a(e,t);return A.notify.list.push(i),i}},A.notify.list=[],A.notify.closeAll=function(){var e=A.notify.list;for(var t in e){e[t].parentNode.removeChild(e[t])}},A.notify.DEFAULTS={title:!0,size:"normal",soundPath:"sounds/",soundExt:".ogg",showClass:"fadeInDown",hideClass:"zoomOut",icon:!0,msg:"",img:null,closable:!0,hideCloseButton:!1,delay:5e3,delayIndicator:!0,closeOnClick:!0,width:400,sound:!0,position:"bottom right",iconSource:"bootstrap",rounded:!1,messageHeight:60,pauseDelayOnHover:!0,onClickUrl:null,showAfterPrevious:!1,continueDelayOnInactiveTab:!0,onClick:null},A.notify.OPTIONS={class:"animated-fast",large:{width:500,messageHeight:96},mini:{class:"notify-mini",messageHeight:32},default:{class:"lobibox-notify-default",title:"Default",sound:!1},success:{class:"lobibox-notify-success",title:"Success",sound:"sound2"},error:{class:"lobibox-notify-error",title:"Error",sound:"sound4"},warning:{class:"lobibox-notify-warning",title:"Warning",sound:"sound5"},info:{class:"lobibox-notify-info",title:"Information",sound:"sound6"},icons:{bootstrap:{success:"glyphicon glyphicon-ok-sign",error:"glyphicon glyphicon-remove-sign",warning:"glyphicon glyphicon-exclamation-sign",info:"glyphicon glyphicon-info-sign"},fontAwesome:{success:"fa fa-check-circle",error:"fa fa-times-circle",warning:"fa fa-exclamation-circle",info:"fa fa-info-circle"}}}},Uh=37,Fh=38,Kh=39,Qh=40,Rh=65,Th=68,kh=69,Dh=81,Lh=83,Nh=87,Oh=90,Vh=187,Gh=189,Ph=48,qh=27,jh={ReverseWheelDirection:!1,MovementSpeedRate:1,WalkSpeedRate:1,RotatePivotMode:kc.MOUSEPOINT,NoPan:!1,NoRotate:!1,NoZoom:!1,NoKey:!1,LockAxisZ:!1,LockAxisZRange:null},Hh=function(A,e){this.defaultSetting={colorRects:!0,picker:!0,colorCode:!0,hasOpacity:!0},this.color={hex:void 0,rgb:void 0,rgba:void 0,hsl:void 0},this.colorInputDom=A,this.element=this.create(e)};Hh.prototype={constructor:Hh,create:function(A){var e=this.defaultSetting;A&&(e=uh.extend(!0,this.defaultSetting,A));var t=document.createElement("div");return t.style.cssText+="width:190px;position:absolute;",e.colorRects&&t.appendChild(this.createRects(!!e.hasOpacity)),e.picker&&t.appendChild(this.createPicker(!!e.hasOpacity)),e.colorCode&&t.appendChild(this.createColorCode()),t.appendChild(this.createBtn()),this.element=t,t},createBtn:function(){var A=this,e=document.createElement("div"),t=document.createElement("button");t.className="btn-yes",t.innerHTML="确定",t.style.cssText+="display:inline-block;margin:10px;color:#000;background-color: #FFFFFF;border: 2px solid #FFFFFF;border-radius: 4px; width: 73px;height: 32px;",t.addEventListener("click",(function(){A.element.style.display="none"}));var i=document.createElement("button");return i.className="btn-no",i.innerHTML="取消",i.style.cssText+="display:inline-block;margin:10px;color:#000;background-color: #FFFFFF;border: 2px solid #FFFFFF;border-radius: 4px; width: 73px;height: 32px;",i.addEventListener("click",(function(){A.element.style.display="none"})),e.appendChild(t),e.appendChild(i),e},createRects:function(A){var e=this,t=document.createElement("div");t.className="rectFather",t.style.cssText+="width:180px;height:180px;margin-top:10px;margin-left:10px;display:flex;flex-wrap:wrap;align-items:flex-start;";for(var i=[],o=["00","55","AA","FF"],n=0,r=0,a=0,s="",l=0;64>l;)s="#"+o[n]+o[r]+o[a],i[l]=document.createElement("span"),i[l].className="spans"+l,i[l].style.cssText+="width:15px;height:15px;margin:1px 2px;border:1px solid #FFFFFF;background-color:"+s+";",i[l].setAttribute("color",s),t.appendChild(i[l]),(l+=1)%16==0?n+=1:l%4==0?(r+=1)>3&&(r=0):(a+=1)>3&&(a=0);var c=t.querySelectorAll("span");return xh.addEventListener(c,"click",(function(t){for(var i=0;c.length>i;i+=1)c[i].style.cssText+="border:1px solid #FFFFFF;";var o=t.target;o.style.cssText+="border:2px solid #000000;";var n=o.getAttribute("color");A?e.setColor(n,1):e.setColor(n),t.stopPropagation?t.stopPropagation():t.cancelBubble=!0})),t},createPicker:function(A){var e=this,t=document.createElement("div");t.style.cssText+="width:180px;margin-left:10px;";var i=document.createElement("span");i.className="colorShow",i.style.cssText+="display:block;width:170px;height:30px;border-radius:5px;margin-top:10px;margin-bottom:10px;background-color:#FFFFFF;",t.appendChild(i);var o=document.createElement("span");o.innerHTML="红 : ",o.style.color="#FF0000";var n=document.createElement("input");n.type="range",n.className="redRange",n.style.cssText+="background:linear-gradient(#FFFFFF, #FFFFFF) no-repeat, #FF0000;",n.setAttribute("step","1"),n.setAttribute("min","0"),n.setAttribute("max","255"),n.setAttribute("value","255");var r=document.createElement("div");r.appendChild(o),r.appendChild(n),t.appendChild(r);var a=document.createElement("span");a.innerHTML="绿 : ",a.style.color="#00FF00";var s=document.createElement("input");s.type="range",s.className="greenRange",s.style.cssText+="background:linear-gradient(#FFFFFF, #FFFFFF) no-repeat, #00FF00;",s.setAttribute("step","1"),s.setAttribute("min","0"),s.setAttribute("max","255"),s.setAttribute("value","255");var l=document.createElement("div");l.appendChild(a),l.appendChild(s),t.appendChild(l);var c=document.createElement("span");c.innerHTML="蓝 : ",c.style.color="#0000FF";var h=document.createElement("input");h.type="range",h.className="blueRange",h.style.cssText+="background:linear-gradient(#FFFFFF, #FFFFFF) no-repeat, #0000FF;",h.setAttribute("step","1"),h.setAttribute("min","0"),h.setAttribute("max","255"),h.setAttribute("value","255");var d=document.createElement("div");d.appendChild(c),d.appendChild(h),t.appendChild(d);var p=t.querySelector(".redRange"),g=t.querySelector(".greenRange"),u=t.querySelector(".blueRange"),f=null;if(p.addEventListener("input",(function(){var t="#"+((1<<24)+(Number(p.value)<<16)+(Number(g.value)<<8)+Number(u.value)).toString(16).slice(1);if(A){var i=Number(f.value);e.setColor(t,i)}else e.setColor(t)})),g.addEventListener("input",(function(){var t="#"+((1<<24)+(Number(p.value)<<16)+(Number(g.value)<<8)+Number(u.value)).toString(16).slice(1);if(A){var i=Number(f.value);e.setColor(t,i)}else e.setColor(t)})),u.addEventListener("input",(function(){var t="#"+((1<<24)+(Number(p.value)<<16)+(Number(g.value)<<8)+Number(u.value)).toString(16).slice(1);if(A){var i=Number(f.value);e.setColor(t,i)}else e.setColor(t)})),A){var m=document.createElement("span");m.innerHTML="透明度 : ",m.style.color="#FFFFFF";var C=document.createElement("input");C.type="range",C.className="opacityRange",C.style.cssText+="width:97px;background:linear-gradient(#FFFFFF, #FFFFFF) no-repeat, #FFFFFF;",C.setAttribute("step","0.01"),C.setAttribute("min","0"),C.setAttribute("max","1"),C.setAttribute("value","1");var y=document.createElement("div");y.appendChild(m),y.appendChild(C),t.appendChild(y),(f=t.querySelector(".opacityRange")).addEventListener("input",(function(){var A="#"+((1<<24)+(Number(p.value)<<16)+(Number(g.value)<<8)+Number(u.value)).toString(16).slice(1),t=Number(f.value);e.setColor(A,t)}))}return t},createColorCode:function(){var A=this,e=document.createElement("div");e.style.cssText+="width:180px;margin-left:10px;";var t=document.createElement("input");t.className="colorCode",t.type="text",t.style.cssText+="display:block;float:left;width:110px;margin:10px 10px 10px 0;padding-left:3px;",t.value="#ffffff",e.appendChild(t);var i=document.createElement("span");return i.className="colorCodeBtn",i.style.cssText+="display:block;float:left;width:38px;height:21px;border-radius:5px;margin-top:10px;background-color:#FFFFFF;font-size:13px;text-align:center;line-height:21px;cursor:default;",i.innerHTML="HEX",i.addEventListener("click",(function(e){var t=e.target.textContent,i=A.element.querySelector(".colorCode").value;if(A.element.querySelector(".opacityRange"))var o=Number(A.element.querySelector(".opacityRange").value);"HEX"===t?e.target.innerHTML="RGB":"RGB"===t&&(e.target.innerHTML="HEX"),A.setColor(i,o)})),e.appendChild(i),e},colorRgbToHex:function(A){if(A){var e=(A=A.toLowerCase()).replace(/rgba?\(/,"").replace(/\)/,"").replace(/[\s+]/g,"").split(","),t=parseFloat(e[3]||1),i=Math.floor(t*parseInt(e[0],0)+255*(1-t)),o=Math.floor(t*parseInt(e[1],0)+255*(1-t)),n=Math.floor(t*parseInt(e[2],0)+255*(1-t));return"#"+("0"+i.toString(16)).slice(-2)+("0"+o.toString(16)).slice(-2)+("0"+n.toString(16)).slice(-2)}return A},colorHexToRgb:function(A,e){var t=A.toLowerCase();if(t&&/^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/.test(t)){if(4===t.length){for(var i="#",o=1;4>o;o+=1)i+=t.slice(o,o+1).concat(t.slice(o,o+1));t=i}for(var n=[],r=1;7>r;r+=2)n.push(parseInt("0x"+t.slice(r,r+2),0));if(!isNaN(e)){var a=Number(e);return 0>a||a>1?t:"rgba("+n.join(",")+","+a+")"}return"rgb("+n.join(",")+")"}return t},checkColor:function(A){var e={};if(A){var t=A.toLowerCase();t&&/^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/.test(t)?(e.color=!0,e.hex=!0,e.rgb=!1,e.hsl=!1,e.hexLength=4===t.length?3:6):t&&/^rgb/.test(t)?(e.color=!0,e.hex=!1,e.rgb=!0,e.hsl=!1):t&&/^hsl/.test(t)?(e.color=!0,e.hex=!1,e.rgb=!1,e.hsl=!0):(e.color=!1,e.hex=!1,e.rgb=!1,e.hsl=!1)}else e.color=!1,e.hex=!1,e.rgb=!1,e.hsl=!1;return e},setColor:function(A,e){var t=this.defaultSetting;if(t.picker||t.colorCode){var i=this.checkColor(A);if(i.color){var o="",n="",r=A.toLowerCase();if(i.hex){if(3===i.hexLength){for(var a="#",s=1;4>s;s+=1)a+=r.slice(s,s+1).concat(r.slice(s,s+1));r=a}n=r,o=this.colorHexToRgb(A,e)}else i.rgb&&(n=this.colorRgbToHex(A),o=r);if(o){if(t.picker){xh.css(this.element.querySelector(".colorShow"),{"background-color":o});var l=this.getRgbNumber(n);3===l.length&&(this.element.querySelector(".redRange").value=l[0],this.element.querySelector(".greenRange").value=l[1],this.element.querySelector(".blueRange").value=l[2],e&&(this.element.querySelector(".opacityRange").value=e))}if(t.colorCode){var c=this.element.querySelector(".colorCode");c.value=n;var h=this.element.querySelector(".colorCodeBtn").textContent;"HEX"===h?c.value=n:"RGB"===h&&(c.value=o)}this.colorInputDom.value=o,xh.simulateEvent(this.colorInputDom,"change")}}}},getRgbNumber:function(A){var e=[],t=this.checkColor(A);if(t.color){var i=A.toLowerCase();if(t.hex){if(3===t.hexLength){for(var o="#",n=1;4>n;n+=1)o+=i.slice(n,n+1).concat(i.slice(n,n+1));i=o}for(var r=1;7>r;r+=2)e.push(parseInt("0x"+i.slice(r,r+2),0))}}return e}};var Yh={};Yh.fullScreen=function(A){if(!A)return!1;if(A.requestFullscreen)A.requestFullscreen();else if(A.mozRequestFullScreen)A.mozRequestFullScreen();else if(A.webkitRequestFullscreen)A.webkitRequestFullscreen();else{if(!A.msRequestFullscreen)return!1;A.msRequestFullscreen()}},Yh.exitFullScreen=function(){document.exitFullscreen?document.exitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitCancelFullScreen?document.webkitCancelFullScreen():document.msExitFullscreen&&document.msExitFullscreen()},Yh.onFullScreenChanged=function(A){var e=function(){A&&A()};document.onfullscreenchange=e,document.onwebkitfullscreenchange=e,document.documentElement.onwebkitfullscreenchange=e,document.onmozfullscreenchange=e,document.onmsfullscreenchange=e},Yh.inFullScreen=function(){return"webkitIsFullScreen"in document?Boolean(document.webkitIsFullScreen):"fullscreenElement"in document?Boolean(document.fullscreenElement):"mozFullScreenElement"in document?Boolean(document.mozFullScreenElement):"msFullscreenElement"in document?Boolean(document.msFullscreenElement):Boolean(document.querySelector(".viewer-fill-browser"))},Yh.findFullScreenElement=function(){return document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement},Yh.isFullScreenAvailable=function(A){return A.requestFullscreen||A.mozRequestFullScreen||A.webkitRequestFullscreen||A.msRequestFullscreen};var Wh=Yh,Jh={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};function zh(A,e,t){return 0>t&&(t+=1),t>1&&(t-=1),1/6>t?A+6*(e-A)*t:.5>t?e:2/3>t?A+6*(e-A)*(2/3-t):A}var Zh,Xh=function(A,e,t,i){return void 0===i&&void 0===t?this.set(A,e):this.setRGB(A,e,t,i)};Object.assign(Xh.prototype,{isColor:!0,r:1,g:1,b:1,a:1,set:function(A,e){return"number"==typeof A?this.setHex(A):"string"==typeof A&&this.setStyle(A),void 0!==e&&this.setAlpha(e),this},setHex:function(A,e){return A=Math.floor(A),this.r=(A>>16&255)/255,this.g=(A>>8&255)/255,this.b=(255&A)/255,this.setAlpha(e),this},setAlpha:function(A){return"number"==typeof A?(A>1&&(A=1),0>A&&(A=0),this.a=A):isNaN(parseFloat(A))?this.a=1:((A=parseFloat(A))>1&&(A=1),0>A&&(A=0),this.a=A),this},setRGB:function(A,e,t,i){return this.r=A>1?Math.min(255,parseInt(A,10))/255:A,this.g=e>1?Math.min(255,parseInt(e,10))/255:e,this.b=t>1?Math.min(255,parseInt(t,10))/255:t,this.setAlpha(i),this},setHSL:function(A,e,t,i){if(A=Xc.euclideanModulo(A,1),e=Xc.clamp(e,0,1),t=Xc.clamp(t,0,1),0===e)this.r=this.g=this.b=t;else{var o=t>.5?t+e-t*e:t*(1+e),n=2*t-o;this.r=zh(n,o,A+1/3),this.g=zh(n,o,A),this.b=zh(n,o,A-1/3)}return this.a=i,this},setStyle:function(A){var e=null;if(e=/^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec(A)){var t=null,i=e[2];switch(e[1]){case"rgb":case"rgba":if(t=/^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(i))return this.r=Math.min(255,parseInt(t[1],10))/255,this.g=Math.min(255,parseInt(t[2],10))/255,this.b=Math.min(255,parseInt(t[3],10))/255,this.setAlpha(t[5]),this;if(t=/^(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(i))return this.r=Math.min(100,parseInt(t[1],10))/100,this.g=Math.min(100,parseInt(t[2],10))/100,this.b=Math.min(100,parseInt(t[3],10))/100,this.setAlpha(t[5]),this;break;case"hsl":case"hsla":if(t=/^([0-9]*\.?[0-9]+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(i)){var o=parseFloat(t[1])/360,n=parseInt(t[2],10)/100,r=parseInt(t[3],10)/100;return this.setAlpha(t[5]),this.setHSL(o,n,r)}}}else if(e=/^\#([A-Fa-f0-9]+)$/.exec(A)){var a,s=(a=e[1]).length;if(3===s)return this.r=parseInt(a.charAt(0)+a.charAt(0),16)/255,this.g=parseInt(a.charAt(1)+a.charAt(1),16)/255,this.b=parseInt(a.charAt(2)+a.charAt(2),16)/255,this;if(6===s)return this.r=parseInt(a.charAt(0)+a.charAt(1),16)/255,this.g=parseInt(a.charAt(2)+a.charAt(3),16)/255,this.b=parseInt(a.charAt(4)+a.charAt(5),16)/255,this}A&&A.length>0&&(void 0!==(a=Jh[A])?this.setHex(a):Bh.warn("Color: Unknown color "+A));return this},getHex:function(){return 255*this.r<<16^255*this.g<<8^255*this.b<<0},getHexString:function(){return("000000"+this.getHex().toString(16)).slice(-6)},getHSL:function(){var A={h:0,s:0,l:0,a:1},e=this.r,t=this.g,i=this.b,o=Math.max(e,t,i),n=Math.min(e,t,i),r=0,a=0,s=(n+o)/2;if(n===o)r=0,a=0;else{var l=o-n;switch(a=s>.5?l/(2-o-n):l/(o+n),o){case e:r=(t-i)/l+(i>t?6:0);break;case t:r=(i-e)/l+2;break;case i:r=(e-t)/l+4}r/=6}return A.h=r,A.s=a,A.l=s,A.a=this.a,A},getRGB:function(){return"rgb("+(255*this.r|0)+","+(255*this.g|0)+","+(255*this.b|0)+")"},getRGBA:function(){return"rgba("+(255*this.r|0)+","+(255*this.g|0)+","+(255*this.b|0)+","+this.a+")"},getAlpha:function(){return this.a},getStyle:function(){return"rgb("+(255*this.r|0)+","+(255*this.g|0)+","+(255*this.b|0)+")"},offsetHSL:(Zh={},function(A,e,t){return this.getHSL(Zh),Zh.h+=A,Zh.s+=e,Zh.l+=t,this.setHSL(Zh.h,Zh.s,Zh.l),this}),fromArray:function(A,e){return void 0===e&&(e=0),this.r=A[e],this.g=A[e+1],this.b=A[e+2],this.a=A[e+3]||1,this},toArray:function(A,e){return void 0===A&&(A=[]),void 0===e&&(e=0),A[e]=this.r,A[e+1]=this.g,A[e+2]=this.b,A[e+3]=this.a,A},toRGBArray:function(A,e){return void 0===A&&(A=[]),void 0===e&&(e=0),A[e]=255*this.r,A[e+1]=255*this.g,A[e+2]=255*this.b,A[e+3]=255*this.a,A},toJSON:function(){return this.getHex()}}),Object.defineProperties(Xh.prototype,{red:{get:function(){return this.r},set:function(A){this.r=A}},green:{get:function(){return this.g},set:function(A){this.g=A}},blue:{get:function(){return this.b},set:function(A){this.b=A}},alpha:{get:function(){return this.a},set:function(A){this.a=A}},opacity:{get:function(){return this.a},set:function(A){this.a=A}}});var _h=["uniform bool receiveShadow;","uniform vec3 ambientLightColor;","uniform vec3 lightProbe[ 9 ];","vec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {"," float x = normal.x, y = normal.y, z = normal.z;"," vec3 result = shCoefficients[ 0 ] * 0.886227;"," result += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;"," result += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;"," result += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;"," result += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;"," result += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;"," result += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );"," result += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;"," result += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );"," return result;","}","vec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in GeometricContext geometry ) {"," vec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );"," vec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );"," return irradiance;","}","vec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {"," vec3 irradiance = ambientLightColor;"," #ifndef PHYSICALLY_CORRECT_LIGHTS"," irradiance *= PI;"," #endif"," return irradiance;","}","#if NUM_DIR_LIGHTS > 0"," struct DirectionalLight {"," vec3 direction;"," vec3 color;"," };"," uniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];"," #if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0"," struct DirectionalLightShadow {"," float shadowBias;"," float shadowRadius;"," vec2 shadowMapSize;"," };"," uniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];"," #endif"," void getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {"," directLight.color = directionalLight.color;"," directLight.direction = directionalLight.direction;"," directLight.visible = true;"," }","#endif","#if NUM_POINT_LIGHTS > 0"," struct PointLight {"," vec3 position;"," vec3 color;"," float distance;"," float decay;"," };"," uniform PointLight pointLights[ NUM_POINT_LIGHTS ];"," #if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0"," struct PointLightShadow {"," float shadowBias;"," float shadowRadius;"," vec2 shadowMapSize;"," float shadowCameraNear;"," float shadowCameraFar;"," };"," uniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];"," #endif"," void getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {"," vec3 lVector = pointLight.position - geometry.position;"," directLight.direction = normalize( lVector );"," float lightDistance = length( lVector );"," directLight.color = pointLight.color;"," directLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );"," directLight.visible = ( directLight.color != vec3( 0.0 ) );"," }","#endif","#if NUM_SPOT_LIGHTS > 0"," struct SpotLight {"," vec3 position;"," vec3 direction;"," vec3 color;"," float distance;"," float decay;"," float coneCos;"," float penumbraCos;"," };"," uniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];"," #if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0"," struct SpotLightShadow {"," float shadowBias;"," float shadowRadius;"," vec2 shadowMapSize;"," };"," uniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];"," #endif"," void getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {"," vec3 lVector = spotLight.position - geometry.position;"," directLight.direction = normalize( lVector );"," float lightDistance = length( lVector );"," float angleCos = dot( directLight.direction, spotLight.direction );"," if ( angleCos > spotLight.coneCos ) {"," float spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );"," directLight.color = spotLight.color;"," directLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );"," directLight.visible = true;"," } else {"," directLight.color = vec3( 0.0 );"," directLight.visible = false;"," }"," }","#endif","#if NUM_RECT_AREA_LIGHTS > 0"," struct RectAreaLight {"," vec3 color;"," vec3 position;"," vec3 halfWidth;"," vec3 halfHeight;"," };"," uniform sampler2D ltcMat; uniform sampler2D ltcMag;"," uniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];","#endif","#if NUM_HEMI_LIGHTS > 0"," struct HemisphereLight {"," vec3 direction;"," vec3 skyColor;"," vec3 groundColor;"," };"," uniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];"," vec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {"," float dotNL = dot( geometry.normal, hemiLight.direction );"," float hemiDiffuseWeight = 0.5 * dotNL + 0.5;"," vec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );"," #ifndef PHYSICALLY_CORRECT_LIGHTS"," irradiance *= PI;"," #endif"," return irradiance;"," }","#endif","#if defined( USE_ENVMAP ) && defined( PHYSICAL )"," vec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {"," vec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );"," #ifdef ENVMAP_TYPE_CUBE"," vec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );"," #ifdef TEXTURE_LOD_EXT"," vec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );"," #else"," vec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );"," #endif"," envMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;"," #elif defined( ENVMAP_TYPE_CUBE_UV )"," vec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );"," vec4 envMapColor = textureCubeUV( queryVec, 1.0 );"," #else"," vec4 envMapColor = vec4( 0.0 );"," #endif"," return PI * envMapColor.rgb * envMapIntensity;"," }"," float getSpecularMIPLevel( const in float blinnShininessExponent, const in int maxMIPLevel ) {"," float maxMIPLevelScalar = float( maxMIPLevel );"," float desiredMIPLevel = maxMIPLevelScalar - 0.79248 - 0.5 * log2( pow2( blinnShininessExponent ) + 1.0 );"," return clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );"," }"," vec3 getLightProbeIndirectRadiance( const in GeometricContext geometry, const in float blinnShininessExponent, const in int maxMIPLevel ) {"," #ifdef ENVMAP_MODE_REFLECTION"," vec3 reflectVec = reflect( -geometry.viewDir, geometry.normal );"," #else"," vec3 reflectVec = refract( -geometry.viewDir, geometry.normal, refractionRatio );"," #endif"," reflectVec = inverseTransformDirection( reflectVec, viewMatrix );"," float specularMIPLevel = getSpecularMIPLevel( blinnShininessExponent, maxMIPLevel );"," #ifdef ENVMAP_TYPE_CUBE"," vec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );"," #ifdef TEXTURE_LOD_EXT"," vec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );"," #else"," vec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );"," #endif"," envMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;"," #elif defined( ENVMAP_TYPE_CUBE_UV )"," vec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );"," vec4 envMapColor = textureCubeUV(queryReflectVec, BlinnExponentToGGXRoughness(blinnShininessExponent));"," #elif defined( ENVMAP_TYPE_EQUIREC )"," vec2 sampleUV;"," sampleUV.y = saturate( reflectVec.y * 0.5 + 0.5 );"," sampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;"," #ifdef TEXTURE_LOD_EXT"," vec4 envMapColor = texture2DLodEXT( envMap, sampleUV, specularMIPLevel );"," #else"," vec4 envMapColor = texture2D( envMap, sampleUV, specularMIPLevel );"," #endif"," envMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;"," #elif defined( ENVMAP_TYPE_SPHERE )"," vec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0,0.0,1.0 ) );"," #ifdef TEXTURE_LOD_EXT"," vec4 envMapColor = texture2DLodEXT( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );"," #else"," vec4 envMapColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );"," #endif"," envMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;"," #endif"," return envMapColor.rgb * envMapIntensity;"," }","#endif"].join("\n"),$h=["","GeometricContext geometry;","geometry.position = - vViewPosition;","geometry.normal = normal;","geometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );","#ifdef CLEARCOAT","geometry.clearcoatNormal = clearcoatNormal;","#endif","IncidentLight directLight;","#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )","PointLight pointLight;","#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0","PointLightShadow pointLightShadow;","#endif","#pragma unroll_loop_start","for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {","pointLight = pointLights[ i ];","getPointDirectLightIrradiance( pointLight, geometry, directLight );","#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )","pointLightShadow = pointLightShadows[ i ];","directLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;","#endif","RE_Direct( directLight, geometry, material, reflectedLight );","}","#endif","#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )","SpotLight spotLight;","#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0","SpotLightShadow spotLightShadow;","#endif","#pragma unroll_loop_start","for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {","spotLight = spotLights[ i ];","getSpotDirectLightIrradiance( spotLight, geometry, directLight );","#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )","spotLightShadow = spotLightShadows[ i ];","directLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;","#endif","RE_Direct( directLight, geometry, material, reflectedLight );","}","#pragma unroll_loop_end","#endif","#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )","DirectionalLight directionalLight;","#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0","DirectionalLightShadow directionalLightShadow;","#endif","#pragma unroll_loop_start","for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {","directionalLight = directionalLights[ i ];","getDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );","#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )","directionalLightShadow = directionalLightShadows[ i ];","directLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;","#endif","RE_Direct( directLight, geometry, material, reflectedLight );","}","#pragma unroll_loop_end","#endif","#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )","RectAreaLight rectAreaLight;","#pragma unroll_loop_start","for ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {","rectAreaLight = rectAreaLights[ i ];","RE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );","}","#pragma unroll_loop_end","#endif","#if defined( RE_IndirectDiffuse )","vec3 iblIrradiance = vec3( 0.0 );","vec3 irradiance = getAmbientLightIrradiance( ambientLightColor );","irradiance += getLightProbeIrradiance( lightProbe, geometry );","#if ( NUM_HEMI_LIGHTS > 0 )","#pragma unroll_loop_start","for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {","irradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );","}","#pragma unroll_loop_end","#endif","#endif","#if defined( RE_IndirectSpecular )","vec3 radiance = vec3( 0.0 );","vec3 clearcoatRadiance = vec3( 0.0 );","#endif"].join("\n"),Ad=["#ifdef DOUBLE_SIDED"," float flipNormal = ( float( gl_FrontFacing ) * 2.0 - 1.0 );","#else"," float flipNormal = 1.0;","#endif\n"].join("\n"),ed=["#ifdef FLAT_SHADED"," vec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );"," vec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );"," vec3 normal = normalize( cross( fdx, fdy ) );","#else"," vec3 normal = normalize( vNormal ) * flipNormal;","#endif","#ifdef USE_NORMALMAP"," normal = perturbNormal2Arb( -vViewPosition, normal );","#elif defined( USE_BUMPMAP )"," normal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );","#endif","vec3 geometryNormal = normal;"].join("\n"),td=["GeometricContext geometry;","geometry.position = - vViewPosition;","#if NUM_CLIPPING_PLANES == 1"," if (gl_FrontFacing) geometry.normal = normal;"," else if (fillFaceClipDistance < 0.0) geometry.normal = -clippingPlanes[0].xyz;"," else geometry.normal = -normal;","#else"," geometry.normal = normal;","#endif","geometry.viewDir = normalize( vViewPosition );","IncidentLight directLight;","#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )"," PointLight pointLight;"," for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {"," pointLight = pointLights[ i ];"," getPointDirectLightIrradiance( pointLight, geometry, directLight );"," #ifdef USE_SHADOWMAP"," directLight.color *= all( bvec2( pointLight.shadow, directLight.visible ) ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ] ,pointLight.shadowCameraNear, pointLight.shadowCameraFar) : 1.0;"," #endif"," RE_Direct( directLight, geometry, material, reflectedLight );"," }","#endif","#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )"," SpotLight spotLight;"," for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {"," spotLight = spotLights[ i ];"," getSpotDirectLightIrradiance( spotLight, geometry, directLight );"," #ifdef USE_SHADOWMAP"," directLight.color *= all( bvec2( spotLight.shadow, directLight.visible ) ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;"," #endif"," RE_Direct( directLight, geometry, material, reflectedLight );"," }","#endif","#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )"," DirectionalLight directionalLight;"," for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {"," directionalLight = directionalLights[ i ];"," getDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );"," #ifdef USE_SHADOWMAP"," directLight.color *= all( bvec2( directionalLight.shadow, directLight.visible ) ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;"," #endif"," RE_Direct( directLight, geometry, material, reflectedLight );"," }","#endif","#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )"," RectAreaLight rectAreaLight;"," for ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {"," rectAreaLight = rectAreaLights[ i ];"," RE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );"," }","#endif","#if defined( RE_IndirectDiffuse )"," vec3 irradiance = getAmbientLightIrradiance( ambientLightColor );"," #ifdef USE_LIGHTMAP"," vec3 lightMapIrradiance = texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;"," #ifndef PHYSICALLY_CORRECT_LIGHTS"," lightMapIrradiance *= PI; // factor of PI should not be present; included here to prevent breakage"," #endif"," irradiance += lightMapIrradiance;"," #endif"," #if ( NUM_HEMI_LIGHTS > 0 )"," for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {"," irradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );"," }"," #endif"," #if defined( USE_ENVMAP ) && defined( PHYSICAL ) && defined( ENVMAP_TYPE_CUBE_UV )"," irradiance += getLightProbeIndirectIrradiance( /*lightProbe,*/ geometry, 8 );"," #endif"," RE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );","#endif","#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )"," vec3 radiance = getLightProbeIndirectRadiance( /*specularLightProbe,*/ geometry, Material_BlinnShininessExponent( material ), 8 );"," #ifndef STANDARD"," vec3 clearCoatRadiance = getLightProbeIndirectRadiance( /*specularLightProbe,*/ geometry, Material_ClearCoat_BlinnShininessExponent( material ), 8 );"," #else"," vec3 clearCoatRadiance = vec3( 0.0 );"," #endif"," RE_IndirectSpecular( radiance, clearCoatRadiance, geometry, material, reflectedLight );","#endif"].join("\n"),id=["#define PHONG","uniform vec3 diffuse;","uniform vec3 emissive;","uniform vec3 specular;","uniform float shininess;","uniform float opacity;","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","void main() {"," #include "," vec4 diffuseColor = vec4( diffuse, opacity );"," ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );"," vec3 totalEmissiveRadiance = emissive;"," #include "," #include "," #include "," #include "," #include "," #include "," #include "," #include "," #include "," float fillFaceClipDistance = 0.0;"," #if NUM_CLIPPING_PLANES == 1"," vec4 plane = clippingPlanes[ 0 ];"," fillFaceClipDistance = dot( vViewPosition, plane.xyz ) - plane.w;"," #endif"," #include "," #include "," #include "," vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;"," #include "," gl_FragColor = vec4( outgoingLight, diffuseColor.a );"," #include "," #include "," #include "," #include "," #include ","}"].join("\n"),od=["#define PHONG","varying vec3 vViewPosition;","#ifndef FLAT_SHADED","varying vec3 vNormal;","#endif","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","void main() {","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#ifndef FLAT_SHADED","vNormal = normalize( transformedNormal );","#endif","#include ","#include ","#include ","#include ","#include ","#include ","#include ","vViewPosition = - mvPosition.xyz;","#include ","#include ","#include ","#include ","}"].join("\n"),nd=["#define PHYSICAL","varying vec3 vViewPosition;","#ifndef FLAT_SHADED","varying vec3 vNormal;","#endif","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","void main() {","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#ifndef FLAT_SHADED","vNormal = normalize( transformedNormal );","#endif","#include ","#include ","#include ","#include ","#include ","#include ","#include ","vViewPosition = - mvPosition.xyz;","#include ","#include ","#include ","}"].join("\n"),rd=["#define PHYSICAL","uniform vec3 diffuse;","uniform vec3 emissive;","uniform float roughness;","uniform float metalness;","uniform float opacity;","#ifndef STANDARD","uniform float clearCoat;","uniform float clearCoatRoughness;","#endif","varying vec3 vViewPosition;","#ifndef FLAT_SHADED","varying vec3 vNormal;","#endif","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","void main() {","#include ","vec4 diffuseColor = vec4( diffuse, opacity );","vec3 totalEmissiveRadiance = emissive;","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","const mat4 diffuseMatrix = mat4(-0.07425443828105927, -0.05652861297130585, 0.12247831374406815, 0.2297295778989792,"," -0.05652860924601555, 0.034799136221408844, -0.08437120914459229, -0.13896968960762024,"," 0.12247832119464874, -0.08437121659517288, 0.021763987839221954, 0.12510454654693604,"," 0.2297295778989792, -0.13896968960762024, 0.12510454654693604, 0.6190560460090637);","const vec3 sunDir = vec3(-0.6632131338119507, 0.5486575961112976, -0.509041428565979);","vec3 viewDir = normalize( vViewPosition );","vec4 diffuseDir = diffuseMatrix * vec4(normal, 1.0);","float diffuseTerm = dot(vec4(normal, 1.0), diffuseDir);","float nv = max(dot(normal, -viewDir), 0.0);","float vl = max(dot(viewDir, sunDir), 0.0);","diffuseTerm = diffuseTerm + (nv * (1.0 - vl)) * 0.8;","vec3 H = -normalize(sunDir + viewDir);","float nh = max(dot(normal, H), 0.0);","float specularTerm = pow(nh, 100.0);","vec3 color = 1.05 * vec3(0.5, 0.497, 0.49) * (diffuse * diffuseTerm + vec3(specularTerm)) + diffuse * 0.5;","vec3 outgoingLight = color + totalEmissiveRadiance;","gl_FragColor = vec4( outgoingLight, diffuseColor.a );","#include ","#include ","#include ","#include ","#include ","}"].join("\n"),ad=["#define EIMMODELPHYSICAL","mat3 transpose2( const in mat3 v ) {\n mat3 tmp;\n tmp[0] = vec3(v[0].x, v[1].x, v[2].x);\n tmp[1] = vec3(v[0].y, v[1].y, v[2].y);\n tmp[2] = vec3(v[0].z, v[1].z, v[2].z);\n return tmp;\n}\n","varying vec3 vViewPosition;","varying vec3 vWorldPosition;","#ifndef FLAT_SHADED"," varying vec3 vNormal;"," #ifdef USE_TANGENT"," varying vec3 vTangent;"," varying vec3 vBitangent;"," #endif","#endif","#ifdef USE_INSTANCE"," attribute float vState;"," attribute float vState2;"," varying float fState;"," attribute float vMirror;"," attribute vec4 aColor;"," varying vec4 vaColor;"," attribute vec3 mcol0;"," attribute vec3 mcol1;"," attribute vec3 mcol2;"," attribute vec3 mcol3;","#ifdef INSTANCE_STATE_TERTIARY"," attribute float vState3;","#endif","#endif","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","mat3 inverse_mat3(in mat3 m)","{"," float determinant ="," m[0][0] * (m[1][1] * m[2][2] - m[2][1] * m[1][2])"," - m[1][0] * (m[0][1] * m[2][2] - m[2][1] * m[0][2])"," + m[2][0] * (m[0][1] * m[1][2] - m[1][1] * m[0][2]);"," mat3 inverse;"," inverse[0][0] = + (m[1][1] * m[2][2] - m[2][1] * m[1][2]);"," inverse[1][0] = - (m[1][0] * m[2][2] - m[2][0] * m[1][2]);"," inverse[2][0] = + (m[1][0] * m[2][1] - m[2][0] * m[1][1]);"," inverse[0][1] = - (m[0][1] * m[2][2] - m[2][1] * m[0][2]);"," inverse[1][1] = + (m[0][0] * m[2][2] - m[2][0] * m[0][2]);"," inverse[2][1] = - (m[0][0] * m[2][1] - m[2][0] * m[0][1]);"," inverse[0][2] = + (m[0][1] * m[1][2] - m[1][1] * m[0][2]);"," inverse[1][2] = - (m[0][0] * m[1][2] - m[1][0] * m[0][2]);"," inverse[2][2] = + (m[0][0] * m[1][1] - m[1][0] * m[0][1]);"," inverse /= determinant;"," return inverse;","}","void main() {"," #include "," #ifdef USE_TRANSFORM_AOMAP"," #if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )"," vUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;"," #endif"," #endif "," #include "," #include "," #include "," #include "," #include "," #include "," #include ","#ifdef USE_INSTANCE"," vaColor = aColor;"," #ifdef INSTANCE_STATE_SECONDARY"," fState = vState2;"," #else"," fState = vState;"," #endif"," #ifdef INSTANCE_STATE_TERTIARY"," fState = vState3;"," #endif"," transformed = vec3(mat4(vec4(mcol0, 0.0),"," vec4(mcol1, 0.0),"," vec4(mcol2, 0.0),"," vec4(mcol3, 1.0)) * vec4(transformed, 1.0));"," #ifdef USE_INSTANCE_NORMAL"," mat3 normalMat = mat3(mcol0, mcol1, mcol2);"," normalMat = inverse_mat3(normalMat);"," normalMat = transpose2(normalMat);"," transformedNormal = normalMat * objectNormal;"," transformedNormal = normalMatrix * transformedNormal;"," #ifdef FLIP_SIDED"," transformedNormal = - transformedNormal;"," #endif"," transformedNormal = normalize( transformedNormal );"," #endif","#endif","#ifndef FLAT_SHADED"," vNormal = normalize( transformedNormal );"," #ifdef USE_TANGENT"," vTangent = normalize( transformedTangent );"," vBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );"," #endif","#endif"," #include "," #include "," #include "," #include "," #include "," #include "," vViewPosition = - mvPosition.xyz;"," // 热力图"," #if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )|| defined(HEATMAPPOINTSCOUNT)"," vec4 worldPosition = vec4( transformed, 1.0 );"," #ifdef USE_INSTANCING"," worldPosition = instanceMatrix * worldPosition;"," #endif"," worldPosition = modelMatrix * worldPosition;"," vWorldPosition = vec3(worldPosition.xyz);"," #endif"," #include "," #include ","#ifdef USE_INSTANCE"," if (vMirror <= - 0.01){"," vNormal = vNormal * - 1.0;}","#endif","}"].join("\n"),sd=["#define EIMMODELPHYSICAL","#ifdef PHYSICAL"," #define REFLECTIVITY"," #define CLEARCOAT"," #define TRANSPARENCY","#endif","uniform vec3 diffuse;","uniform vec3 emissive;","uniform float roughness;","uniform float metalness;","uniform float opacity;","#ifdef TRANSPARENCY"," uniform float transparency;","#endif","#ifdef REFLECTIVITY"," uniform float reflectivity;","#endif","#ifdef CLEARCOAT"," uniform float clearcoat;"," uniform float clearcoatRoughness;","#endif","#ifdef USE_SHEEN"," uniform vec3 sheen;","#endif","uniform float imageFade;","varying vec3 vViewPosition;","varying vec3 vWorldPosition;","#ifndef FLAT_SHADED"," varying vec3 vNormal;"," #ifdef USE_TANGENT"," varying vec3 vTangent;"," varying vec3 vBitangent;"," #endif","#endif","#ifdef USE_INSTANCE"," varying vec4 vaColor;"," varying float fState;","#endif","uniform float shift;","uniform float A;","uniform float B;","uniform float C;","uniform float D;","uniform float E;","uniform float F;","uniform float scale;","uniform vec4 blinkColor;","uniform float colorState;","#ifdef HEATMAPPOINTSCOUNT"," uniform float heatmapPoints[HEATMAPPOINTSCOUNT];"," uniform sampler2D heatmapTexture;","#endif","vec3 toneMapCanonFilmic(vec3 color)","{"," color *= (1.0 / shift);"," return (((color * (A * color + C * B)) / (color * (A * color + B) + D * F))) * (1.0 / scale);","}","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","vec3 hdrDecode(in vec4 rgbm) {","const float rgbmScale = 2.82842712;","vec3 r = rgbm.rgb * (rgbmScale * (1.0 - rgbm.a));","return r * r;","}","vec3 linearToGammaUnreal(in vec3 rgb) {"," return rgb / (rgb + 0.187) * 1.035 * (0.5 / shift);","}","bool floatEqual(in float x, in float y) {"," return (x >= y - 0.01) && (x <= y + 0.01);","}","bool floatNotEqual(in float x, in float y) {"," return (x <= y - 0.01) || (x >= y + 0.01);","}","void main() {"," #include "," vec4 diffuseColor = vec4( diffuse, opacity );"," #ifdef USE_INSTANCE"," if (floatEqual(fState, -1.0)) "," discard;"," if (floatNotEqual(fState, 0.0)) "," diffuseColor = vaColor;"," #endif"," vec4 selectedColor = diffuseColor;"," ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );"," vec3 totalEmissiveRadiance = emissive;"," #include "," #ifdef USE_MAP"," vec4 texelColor = texture2D( map, vUv );"," texelColor = mapTexelToLinear( texelColor );"," diffuseColor = vec4( mix(diffuseColor.rgb , texelColor.rgb, imageFade),opacity);"," #ifdef USE_INSTANCE"," if (floatNotEqual(fState, 0.0)) "," diffuseColor = vaColor;"," #endif"," #endif"," #include "," #include "," #include "," #include "," #include "," #include ","float flipNormal = 1.0;"," #include "," #include "," #include "," #include "," #include "," #include "," #include "," #include "," #include "," #include ","vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;","#ifdef USE_COLORWITHOUTLIGHT"," gl_FragColor = diffuseColor;","#else"," #ifdef TRANSPARENCY"," diffuseColor.a *= saturate( 1. - transparency + linearToRelativeLuminance( reflectedLight.directSpecular + reflectedLight.indirectSpecular ) );"," #endif"," gl_FragColor = vec4( outgoingLight, diffuseColor.a );","#endif","#ifdef USE_INSTANCE"," #ifdef NOTAFFECTEDBYLIGHT"," if (floatEqual(fState, 2.0))"," gl_FragColor = selectedColor;"," #endif"," #ifdef USE_MAP"," if (floatEqual(fState, 3.0))"," gl_FragColor = vaColor;"," #endif","#endif","#if defined( TONE_MAPPING )"," #if defined(USE_LIGHTMAP)"," gl_FragColor.rgb = linearToGammaUnreal(gl_FragColor.rgb );"," #else"," gl_FragColor.rgb = toneMapCanonFilmic( gl_FragColor.rgb );"," #endif","#endif","#ifdef USE_INSTANCE"," if (floatEqual(fState, 5.0) && floatEqual(colorState, 1.0))"," gl_FragColor = blinkColor;","#else"," if (floatEqual(colorState, 1.0))"," gl_FragColor = blinkColor;"," #ifdef NOTAFFECTEDBYLIGHT"," if (floatEqual(colorState, 2.0))"," gl_FragColor = selectedColor;"," #endif","#endif","#include ","#include ","#include ","#include ","#ifdef HEATMAPPOINTSCOUNT"," float heatvalue = 0.0;"," for ( int i = 0; i < HEATMAPPOINTSCOUNT; i += 5 ) {"," float heatpointX = heatmapPoints[i];"," float heatpointY = heatmapPoints[i + 1];"," float heatpointZ = heatmapPoints[i + 2];"," // heatpointIndex保存的是当前热力点的热力值比上(最大热力和最小热力差)"," // 也就是在热力区间中的百分比位置,为0的时候表示最小热力值,1的时候表示最大热力值"," // 可以理解为就是热力点中心的热力值,只不过范围是0-1"," // 热力最大值和最小值分别是所有热力点中热力最大和最小的值"," float heatpointIndex = heatmapPoints[i + 3];"," float heatpointRadius = heatmapPoints[i + 4];"," float dis = distance(vWorldPosition, vec3(heatpointX, heatpointY, heatpointZ));"," if(dis < heatpointRadius) {"," float step = dis / heatpointRadius;"," // 根据距离计算当前片元在当前热力点下的热力值"," // step表示距离,范围0-1,越小表示距离热力点越近,热力越大,将距离区间0-1和热力区间heatpointIndex-0对应起来"," float currentvalue = (1.0 - step) * heatpointIndex;"," // 这里用到了一个颜色叠加的公式,把每个热点对当前片元产生的热力进行叠加,"," // 没有特殊逻辑,也可以简单相加"," heatvalue = heatvalue + currentvalue - heatvalue * currentvalue;"," if (heatvalue > 1.0) {"," heatvalue = 1.0;"," break;"," }"," }"," }"," if (heatvalue > 0.0) {"," vec4 color = texture2D(heatmapTexture, vec2(heatvalue, 0.5));"," heatvalue = 0.5*heatvalue + 0.5;//使下列因子范围为1-0.5"," color = vec4( mix(gl_FragColor.rgb, color.rgb, heatvalue),gl_FragColor.a);"," gl_FragColor = color;"," }","#endif","}"].join("\n");tt.lights_pars=_h,tt.lights_template=$h,tt.normal_flip=Ad,tt.normal_fragment=ed,tt.meshphong_id_vert=od,tt.lights_fillFace_template=td,tt.fillFaceFragment=id,tt.standardVertex=ad,tt.bos3dStandardFragment=sd,tt.newStyleVertex=nd,tt.newStyleFragment=rd,it.fillFacePhong={uniforms:Ge.merge([Xe.common,Xe.aomap,Xe.lightmap,Xe.emissivemap,Xe.bumpmap,Xe.normalmap,Xe.displacementmap,Xe.gradientmap,Xe.fog,Xe.lights,{emissive:{value:new LA(0)},specular:{value:new LA(1118481)},shininess:{value:30}}]),vertexShader:tt.meshphong_id_vert,fragmentShader:tt.fillFaceFragment},it.newStyle={vertexShader:tt.newStyleVertex,fragmentShader:tt.newStyleFragment},it.bos3dStandard={vertexShader:tt.standardVertex,fragmentShader:tt.bos3dStandardFragment};var ld=function(A){yr.call(this),this.type="bos3dStandard",this.roughness=1,this.metalness=0,this.originRoughness=1,this.originMetalness=0,this.pureColor=0,this.textureColor=0,this.imageFade=1,this.transparentEx=!1,this.shift=.5,this.A=.64,this.B=.03,this.C=.02,this.D=.54,this.E=0,this.F=.81,this.scale=.92,this.shininess=30,this.specular=new LA(0);var e=(new LA).setHex(3330982),t=[e.r,e.g,e.b,1];this.colorState=Yc.NONE,this.blinkColor=(new p).fromArray(t),this.uniforms=Ge.merge([Xe.common,Xe.specularmap,Xe.envmap,Xe.aomap,Xe.lightmap,Xe.emissivemap,Xe.bumpmap,Xe.normalmap,Xe.displacementmap,Xe.roughnessmap,Xe.metalnessmap,Xe.fog,Xe.lights,{emissive:{value:new LA(0)},specular:{value:new LA(0)},roughness:{value:.5},metalness:{value:.5},envMapIntensity:{value:1}},{shift:{value:.5},A:{value:.64},B:{value:.03},C:{value:.02},D:{value:.54},E:{value:0},F:{value:.81},scale:{value:.92},colorState:{value:0},blinkColor:{value:(new p).fromArray(t)},imageFade:{value:1},heatmapPoints:{value:[]},heatmapTexture:{value:null}}]),this.vertexShader=tt.standardVertex,this.fragmentShader=tt.bos3dStandardFragment,this.defaultAttributeValues={color:[1,1,1],uv:[0,0],uv2:[0,0]},void 0!==A&&(void 0!==A.attributes&&Bh.error("IBLMaterial: attributes should now be defined in THREE.BufferGeometry instead."),this.setValues(A)),this.lights&&(this.uniforms=Ge.merge([this.uniforms,Xe.lights])),this.refreshUniforms&&this.refreshUniforms()};function cd(A,e){var t=(65535&A)+(65535&e);return(A>>16)+(e>>16)+(t>>16)<<16|65535&t}function hd(A,e,t,i,o,n){return cd((r=cd(cd(e,A),cd(i,n)))<<(a=o)|r>>>32-a,t);var r,a}function dd(A,e,t,i,o,n,r){return hd(e&t|~e&i,A,e,o,n,r)}function pd(A,e,t,i,o,n,r){return hd(e&i|t&~i,A,e,o,n,r)}function gd(A,e,t,i,o,n,r){return hd(e^t^i,A,e,o,n,r)}function ud(A,e,t,i,o,n,r){return hd(t^(e|~i),A,e,o,n,r)}function fd(A,e){var t,i,o,n,r;A[e>>5]|=128<>>9<<4)]=e;var a=1732584193,s=-271733879,l=-1732584194,c=271733878;for(t=0;A.length>t;t+=16)i=a,o=s,n=l,r=c,a=dd(a,s,l,c,A[t],7,-680876936),c=dd(c,a,s,l,A[t+1],12,-389564586),l=dd(l,c,a,s,A[t+2],17,606105819),s=dd(s,l,c,a,A[t+3],22,-1044525330),a=dd(a,s,l,c,A[t+4],7,-176418897),c=dd(c,a,s,l,A[t+5],12,1200080426),l=dd(l,c,a,s,A[t+6],17,-1473231341),s=dd(s,l,c,a,A[t+7],22,-45705983),a=dd(a,s,l,c,A[t+8],7,1770035416),c=dd(c,a,s,l,A[t+9],12,-1958414417),l=dd(l,c,a,s,A[t+10],17,-42063),s=dd(s,l,c,a,A[t+11],22,-1990404162),a=dd(a,s,l,c,A[t+12],7,1804603682),c=dd(c,a,s,l,A[t+13],12,-40341101),l=dd(l,c,a,s,A[t+14],17,-1502002290),a=pd(a,s=dd(s,l,c,a,A[t+15],22,1236535329),l,c,A[t+1],5,-165796510),c=pd(c,a,s,l,A[t+6],9,-1069501632),l=pd(l,c,a,s,A[t+11],14,643717713),s=pd(s,l,c,a,A[t],20,-373897302),a=pd(a,s,l,c,A[t+5],5,-701558691),c=pd(c,a,s,l,A[t+10],9,38016083),l=pd(l,c,a,s,A[t+15],14,-660478335),s=pd(s,l,c,a,A[t+4],20,-405537848),a=pd(a,s,l,c,A[t+9],5,568446438),c=pd(c,a,s,l,A[t+14],9,-1019803690),l=pd(l,c,a,s,A[t+3],14,-187363961),s=pd(s,l,c,a,A[t+8],20,1163531501),a=pd(a,s,l,c,A[t+13],5,-1444681467),c=pd(c,a,s,l,A[t+2],9,-51403784),l=pd(l,c,a,s,A[t+7],14,1735328473),a=gd(a,s=pd(s,l,c,a,A[t+12],20,-1926607734),l,c,A[t+5],4,-378558),c=gd(c,a,s,l,A[t+8],11,-2022574463),l=gd(l,c,a,s,A[t+11],16,1839030562),s=gd(s,l,c,a,A[t+14],23,-35309556),a=gd(a,s,l,c,A[t+1],4,-1530992060),c=gd(c,a,s,l,A[t+4],11,1272893353),l=gd(l,c,a,s,A[t+7],16,-155497632),s=gd(s,l,c,a,A[t+10],23,-1094730640),a=gd(a,s,l,c,A[t+13],4,681279174),c=gd(c,a,s,l,A[t],11,-358537222),l=gd(l,c,a,s,A[t+3],16,-722521979),s=gd(s,l,c,a,A[t+6],23,76029189),a=gd(a,s,l,c,A[t+9],4,-640364487),c=gd(c,a,s,l,A[t+12],11,-421815835),l=gd(l,c,a,s,A[t+15],16,530742520),a=ud(a,s=gd(s,l,c,a,A[t+2],23,-995338651),l,c,A[t],6,-198630844),c=ud(c,a,s,l,A[t+7],10,1126891415),l=ud(l,c,a,s,A[t+14],15,-1416354905),s=ud(s,l,c,a,A[t+5],21,-57434055),a=ud(a,s,l,c,A[t+12],6,1700485571),c=ud(c,a,s,l,A[t+3],10,-1894986606),l=ud(l,c,a,s,A[t+10],15,-1051523),s=ud(s,l,c,a,A[t+1],21,-2054922799),a=ud(a,s,l,c,A[t+8],6,1873313359),c=ud(c,a,s,l,A[t+15],10,-30611744),l=ud(l,c,a,s,A[t+6],15,-1560198380),s=ud(s,l,c,a,A[t+13],21,1309151649),a=ud(a,s,l,c,A[t+4],6,-145523070),c=ud(c,a,s,l,A[t+11],10,-1120210379),l=ud(l,c,a,s,A[t+2],15,718787259),s=ud(s,l,c,a,A[t+9],21,-343485551),a=cd(a,i),s=cd(s,o),l=cd(l,n),c=cd(c,r);return[a,s,l,c]}function md(A){var e,t="",i=32*A.length;for(e=0;i>e;e+=8)t+=String.fromCharCode(A[e>>5]>>>e%32&255);return t}function Cd(A){var e,t=[];for(t[(A.length>>2)-1]=void 0,e=0;t.length>e;e+=1)t[e]=0;var i=8*A.length;for(e=0;i>e;e+=8)t[e>>5]|=(255&A.charCodeAt(e/8))<t;t+=1)e=A.charCodeAt(t),i+="0123456789abcdef".charAt(e>>>4&15)+"0123456789abcdef".charAt(15&e);return i}function vd(A){return unescape(encodeURIComponent(A))}function Id(A){return function(A){return md(fd(Cd(A),8*A.length))}(vd(A))}function Ed(A,e){return function(A,e){var t,i,o=Cd(A),n=[],r=[];for(n[15]=r[15]=void 0,o.length>16&&(o=fd(o,8*A.length)),t=0;16>t;t+=1)n[t]=909522486^o[t],r[t]=1549556828^o[t];return i=fd(n.concat(Cd(e)),512+8*e.length),md(fd(r.concat(i),640))}(vd(A),vd(e))}function Bd(A,e,t){return e?t?Ed(e,A):yd(Ed(e,A)):t?Id(A):yd(Id(A))}(ld.prototype=Object.create(yr.prototype)).constructor=ld,ld.prototype.destroy=function(){yr.prototype.dispose.call(this),this.blinkColor=null,this.uniforms=null,this.defaultAttributeValues=null,this.lights=null},ld.prototype.copy=function(A){return yr.prototype.copy.call(this,A),this.shift=A.shift,this.A=A.A,this.B=A.B,this.C=A.C,this.D=A.D,this.E=A.E,this.F=A.F,this.scale=A.scale,this.colorState=A.colorState,this.blinkColor.copy(A.blinkColor),this.imageFade=A.imageFade,Object.assign(this.defines,A.defines),this},ld.prototype.refreshUniforms=function(){this.uniforms.shift.value=this.shift,this.uniforms.A.value=this.A,this.uniforms.B.value=this.B,this.uniforms.C.value=this.C,this.uniforms.D.value=this.D,this.uniforms.E.value=this.E,this.uniforms.F.value=this.F,this.uniforms.scale.value=this.scale,this.uniforms.blinkColor.value.copy(this.blinkColor),this.uniforms.colorState.value=this.colorState,this.uniforms.imageFade.value=this.imageFade},ld.prototype.setBlinkColor=function(A){this.blinkColor.fromArray(A.toArray()),this.uniforms.blinkColor.value.copy(this.blinkColor),this.uniforms.colorState.value=Yc.BLINK},ld.prototype.updateBlinkUniformValue=function(A,e){this.uniforms.colorState.value=A,this.uniforms.blinkColor.value.copy(e)},ld.prototype.resetBlinkUniformValue=function(){this.uniforms.colorState.value=this.colorState,this.uniforms.blinkColor.value.copy(this.blinkColor)},Object.defineProperties(ld.prototype,{transparent:{set:function(A){this.transparentEx=A,vc.notDepthWriteByTransparent&&(this.depthWrite=!A)},get:function(){return this.transparentEx}}});var xd={REGULAR:0,FRACTAL:1,DISORDER:2},Sd={type:xd.REGULAR,color1:new Xh(0,0,0,1),color2:new Xh(255,255,255,1),size:10,level:1,phase:1,width:32,height:32,thresholdLow:0,thresholdHigh:1};function wd(){this.m=2147483647,this.a=16807,this.q=127773,this.r=2836,this.seed=1,this.setSeed=function(A){A>0||(A=-A%(this.m-1)+1),A>this.m-1&&(A=this.m-1),this.seed=A},this.nextLong=function(){var A=this.a*(this.seed%this.q)-this.r*Math.floor(this.seed/this.q);return A>0||(A+=this.m),this.seed=A,A},this.next=function(){return this.nextLong()/this.m}}function Md(A,e,t){this.width=A,this.height=e,this.randseed=t,this.gradients=new Array(A*e*2);var i=new wd;i.setSeed(t);for(var o=0;this.gradients.length>o;o+=2){var n,r,a=i.next()*Math.PI*2;n=Math.sin(a),r=Math.cos(a),this.gradients[o]=n,this.gradients[o+1]=r}this.dot=function(A,e,t,i){var o=2*(A+e*this.width);return this.gradients[o]*t+this.gradients[o+1]*i},this.lerp=function(A,e,t){return A+t*(e-A)},this.sCurve=function(A){return A*A*(3-2*A)},this.getValue=function(A,e,t,i){var o=Math.floor(A),n=Math.floor(e),r=A-o,a=e-n,s=o,l=n,c=o===this.width-1?0:o+1,h=n===this.height-1?0:n+1,d=this.dot(s,l,r,a),p=this.dot(c,l,r-1,a),g=this.dot(s,h,r,a-1),u=this.dot(c,h,r-1,a-1),f=this.lerp(d,p,this.sCurve(r)),m=this.lerp(g,u,this.sCurve(r));return this.lerp(f,m,this.sCurve(a))}}var bd,Ud,Fd=function(A){var e=Object.assign({},Sd,A);switch(e.type){case xd.REGULAR:return function(A){var e=10*A.width,t=10*A.height;if(!(A.color1 instanceof Xh))return Bh.warn("color1 不合法"),null;if(!(A.color2 instanceof Xh))return Bh.warn("color2 不合法"),null;var i=A.color1.toRGBArray(),o=A.color2.toRGBArray(),n=A.thresholdLow,r=A.thresholdHigh,a=10*A.size,s=A.phase;1===a&&(a=1.1);for(var l=new Array(e*t*4),c=new Md(Math.ceil(e/a),Math.ceil(t/a),s),h=0,d=0,p=0,g=0,u=0,f=0,m=0;t>m;m+=1)for(var C=0;e>C;C+=1){var y=(c.getValue(C/a,m/a)+1)/2;if(y>r)h=o[0],d=o[1],p=o[2];else if(n>y)h=i[0],d=i[1],p=i[2];else if(y>=n&&r>=y||n===r){var v=(y-n)/(r-n||1);g=o[0]*v,u=o[1]*v,f=o[2]*v,h=i[0]*(v=1-v)+g,d=i[1]*v+u,p=i[2]*v+f}var I=4*(m*e+C);l[I]=h,l[I+1]=d,l[I+2]=p,l[I+3]=255}var E=document.createElement("canvas");E.width=e,E.height=t;for(var B=E.getContext("2d"),x=B.createImageData(e,t),S=0,w=e*t*4;w>S;S+=1)x.data[S]=l[S];return B.putImageData(x,0,0),E.toDataURL()}(e);case xd.FRACTAL:return function(A){var e=10*A.width,t=10*A.height;if(!(A.color1 instanceof Xh))return Bh.warn("color1 不合法"),null;if(!(A.color2 instanceof Xh))return Bh.warn("color2 不合法"),null;var i=A.color1.toRGBArray(),o=A.color2.toRGBArray(),n=A.thresholdLow,r=A.thresholdHigh,a=10*A.size,s=A.phase,l=A.level;1===a&&(a=1.1);for(var c=new Array(e*t*4),h=[],d=a,p=0,g=l;g>p;p+=1){var u=new Md(Math.ceil(e/d),Math.ceil(t/d),s);d/=2,h.push(u)}for(var f=0,m=0,C=0,y=0,v=0,I=0,E=0;t>E;E+=1)for(var B=0;e>B;B+=1){for(var x=0,S=a,w=0,M=l;M>w;w+=1)x+=h[w].getValue(B/S,E/S,s)*(l-w),S/=2;var b=((x/=l)+1)/2;if(b>r)f=o[0],m=o[1],C=o[2];else if(n>b)f=i[0],m=i[1],C=i[2];else if(b>=n&&r>=b||n===r){var U=(b-n)/(r-n||1);y=o[0]*U,v=o[1]*U,I=o[2]*U,f=i[0]*(U=1-U)+y,m=i[1]*U+v,C=i[2]*U+I}var F=4*(E*e+B);c[F]=f,c[F+1]=m,c[F+2]=C,c[F+3]=255}var K=document.createElement("canvas");K.width=e,K.height=t;for(var Q=K.getContext("2d"),R=Q.createImageData(e,t),T=0,k=e*t*4;k>T;T+=1)R.data[T]=c[T];return Q.putImageData(R,0,0),K.toDataURL()}(e);case xd.DISORDER:return function(A){var e=10*A.width,t=10*A.height;if(!(A.color1 instanceof Xh))return Bh.warn("color1 不合法"),null;if(!(A.color2 instanceof Xh))return Bh.warn("color2 不合法"),null;var i=A.color1.toRGBArray(),o=A.color2.toRGBArray(),n=A.thresholdLow,r=A.thresholdHigh,a=10*A.size,s=A.phase,l=A.level;1===a&&(a=1.1);for(var c=new Array(e*t*4),h=[],d=a,p=0,g=l;g>p;p+=1){var u=new Md(Math.ceil(e/d),Math.ceil(t/d),s);d/=2,h.push(u)}for(var f=0,m=0,C=0,y=0,v=0,I=0,E=0;t>E;E+=1)for(var B=0;e>B;B+=1){for(var x=0,S=a,w=0,M=l;M>w;w+=1)x+=h[w].getValue(B/S,E/S,s)*(l-w),S/=2;x/=l;var b=Math.abs(x)+.05;if(b>r)f=o[0],m=o[1],C=o[2];else if(n>b)f=i[0],m=i[1],C=i[2];else if(b>=n&&r>=b||n===r){var U=(b-n)/(r-n||1);y=o[0]*U,v=o[1]*U,I=o[2]*U,f=i[0]*(U=1-U)+y,m=i[1]*U+v,C=i[2]*U+I}var F=4*(E*e+B);c[F]=f,c[F+1]=m,c[F+2]=C,c[F+3]=255}var K=document.createElement("canvas");K.width=e,K.height=t;for(var Q=K.getContext("2d"),R=Q.createImageData(e,t),T=0,k=e*t*4;k>T;T+=1)R.data[T]=c[T];return Q.putImageData(R,0,0),K.toDataURL()}(e);default:return Bh.warn("不支持的噪波类型"),null}},Kd={DefaultMaterial:new Ir({color:255,side:2}),DefaultWireframeColor:{color:new LA(0,0,0),opacity:.4},getDefaultStandardMaterial:(bd=null,function(){return bd||(bd=new ld({color:0,side:2})),bd}),createInstancePhongMaterial:function(A){return A.clone()},updateBasicMaterial:function(A,e){A.needsUpdate=!0},setMatrixUniform:function(A){},createPhongMaterial:function(A){var e=new Ir(A);return e.type="FillFacePhong",e.uniforms=Ge.merge([it.fillFacePhong.uniforms]),e.vertexShader=it.fillFacePhong.vertexShader,e.fragmentShader=it.fillFacePhong.fragmentShader,e.side=2,e},createStandardMaterial:function(A){var e=new ld(A);return vc.EnableTransformAoMap&&(e.defines.USE_TRANSFORM_AOMAP=""),e},createInstanceMaterial:function(A,e){var t=Kd.createStandardMaterial(A);return t.defines.USE_INSTANCE="",e&&(t.defines.USE_INSTANCE_NORMAL=""),t.colorState=Yc.BLINK,vc.InfluencedByLight||(t.defines.NOTAFFECTEDBYLIGHT=""),t.refreshUniforms(),t},createMaterialByMaterialBufferAndTexture:function(A,e){var t,i,o,n,r,a,l,c,h=Kd.createStandardMaterial();if((h.name=A.name||A.id,h.key=A.id,A.emissive&&h.emissive&&(1===A.emissive[0]&&1===A.emissive[1]&&1===A.emissive[2]||h.emissive.setRGB(A.emissive[0],A.emissive[1],A.emissive[2])),A.specular&&h.specular&&h.specular.setRGB(A.specular[0],A.specular[1],A.specular[2]),A.color?h.color.setRGB(A.color[0],A.color[1],A.color[2]):A.emissive&&h.emissive?h.color.setRGB(0,0,0):h.color.setRGB(.72,.72,.72),A.tint&&(h.imageFade=void 0===A.imageFade||0>A.imageFade||A.imageFade>10?.5:A.imageFade,h.color.setRGB(A.tint[0],A.tint[1],A.tint[2])),A.map&&vc.EnableTextureLoading)&&("string"==typeof A.map?void 0!==A.mapOffsetY&&0!==A.mapOffsetY||void 0!==A.mapOffsetX&&0!==A.mapOfsfetX||void 0!==A.mapScaleX&&1!==A.mapScaleX||void 0!==A.mapScaleY&&1!==A.mapScaleY||void 0!==A.mapWAngle&&0!==A.mapWAngle?t=A.mapOffsetX+"_"+A.mapOffsetY+"_"+A.mapScaleX+"_"+A.mapScaleY+"_"+A.mapWAngle+"_"+A.map:e[A.map]?h.map=e[A.map]:Bh.warn(h.name," 中map贴图未找到:",A.map):t=Bd(JSON.stringify(A.map)),t))if(e[t])h.map=e[t];else{var p=new d;if(p.wrapS=p.wrapT=1e3,"string"==typeof A.map)p.image=e[A.map]&&e[A.map].image?e[A.map].image:null;else{var g=A.map,u=document.createElement("img"),f=Fd({type:Number(g.noise_Type),color1:(new Xh).fromArray(g.noise_Color1),color2:(new Xh).fromArray(g.noise_Color2),size:g.noise_Size,level:g.noise_Levels,phase:g.noise_Phase,width:32,height:32,thresholdLow:g.noise_ThresholdLow,thresholdHigh:g.noise_ThresholdHigh});f&&(u.src=f,p.image=u)}p.needsUpdate=!0,p.image&&(p.offset.x=A.mapOffsetX?A.mapOffsetX:0,p.offset.y=A.mapOffsetY?A.mapOffsetY:0,p.repeat.x=A.mapScaleX?A.mapScaleX:1,p.repeat.y=A.mapScaleY?A.mapScaleY:1,p.rotation=A.mapWAngle?A.mapWAngle:0,e[t]=p,h.map=p)}if(A.bumpMap&&vc.EnableTextureLoading&&("string"==typeof A.bumpMap?void 0!==A.bumpMapOffsetY&&0!==A.bumpMapOffsetY||void 0!==A.bumpMapOffsetX&&0!==A.bumpMapOfsfetX||void 0!==A.bumpMapScaleX&&1!==A.bumpMapScaleX||void 0!==A.bumpMapScaleY&&1!==A.bumpMapScaleY||void 0!==A.bumpMapWAngle&&0!==A.bumpMapWAngle?i=A.bumpMapOffsetX+"_"+A.bumpMapOffsetY+"_"+A.bumpMapScaleX+"_"+A.bumpMapScaleY+"_"+A.bumpMapWAngle+"_"+A.bumpMap:e[A.bumpMap]?h.bumpMap=e[A.bumpMap]:Bh.warn(h.name," 中bumpMap贴图未找到:",A.bumpMap):i=Bd(JSON.stringify(A.bumpMap)),i))if(e[i])h.bumpMap=e[i];else{var m=new d;if(m.wrapS=m.wrapT=1e3,"string"==typeof A.bumpMap)m.image=e[A.bumpMap]&&e[A.bumpMap].image?e[A.bumpMap].image:null;else{var C=A.bumpMap,y=document.createElement("img"),v=Fd({type:Number(C.noise_Type),color1:(new Xh).fromArray(C.noise_Color1),color2:(new Xh).fromArray(C.noise_Color2),size:C.noise_Size,level:C.noise_Levels,phase:C.noise_Phase,width:32,height:32,thresholdLow:C.noise_ThresholdLow,thresholdHigh:C.noise_ThresholdHigh});v&&(y.src=v,m.image=y)}m.needsUpdate=!0,m.image&&(m.offset.x=A.bumpMapOffsetX?A.bumpMapOffsetX:0,m.offset.y=A.bumpMapOffsetY?A.bumpMapOffsetY:0,m.repeat.x=A.bumpMapScaleX?A.bumpMapScaleX:1,m.repeat.y=A.bumpMapScaleY?A.bumpMapScaleY:1,m.rotation=A.bumpMapWAngle?A.bumpMapWAngle:0,e[i]=m,h.bumpMap=m)}if((void 0!==A.bumpScale&&(h.bumpScale=A.bumpScale),A.aoMap&&vc.EnableTextureLoading)&&("string"==typeof A.aoMap?void 0!==A.aoMapOffsetY&&0!==A.aoMapOffsetY||void 0!==A.aoMapOffsetX&&0!==A.aoMapOfsfetX||void 0!==A.aoMapScaleX&&1!==A.aoMapScaleX||void 0!==A.aoMapScaleY&&1!==A.aoMapScaleY||void 0!==A.aoMapWAngle&&0!==A.aoMapWAngle?o=A.aoMapOffsetX+"_"+A.aoMapOffsetY+"_"+A.aoMapScaleX+"_"+A.aoMapScaleY+"_"+A.aoMapWAngle+"_"+A.aoMap:e[A.aoMap]?h.aoMap=e[A.aoMap]:Bh.warn(h.name," 中aoMap贴图未找到:",A.aoMap):o=Bd(JSON.stringify(A.aoMap)),o))if(e[o])h.aoMap=e[o];else{var I=new d;if(I.wrapS=I.wrapT=1e3,"string"==typeof A.aoMap)I.image=e[A.aoMap]&&e[A.aoMap].image?e[A.aoMap].image:null;else{var E=A.aoMap,B=document.createElement("img"),x=Fd({type:Number(E.noise_Type),color1:(new Xh).fromArray(E.noise_Color1),color2:(new Xh).fromArray(E.noise_Color2),size:E.noise_Size,level:E.noise_Levels,phase:E.noise_Phase,width:32,height:32,thresholdLow:E.noise_ThresholdLow,thresholdHigh:E.noise_ThresholdHigh});x&&(B.src=x,I.image=B)}I.needsUpdate=!0,I.image&&(I.offset.x=A.aoMapOffsetX?A.aoMapOffsetX:0,I.offset.y=A.aoMapOffsetY?A.aoMapOffsetY:0,I.repeat.x=A.aoMapScaleX?A.aoMapScaleX:1,I.repeat.y=A.aoMapScaleY?A.aoMapScaleY:1,I.rotation=A.aoMapWAngle?A.aoMapWAngle:0,e[o]=I,h.aoMap=I)}if((void 0!==A.aoMapIntensity&&(h.aoMapIntensity=A.aoMapIntensity),A.normalMap&&vc.EnableTextureLoading)&&("string"==typeof A.normalMap?void 0!==A.normalMapOffsetY&&0!==A.normalMapOffsetY||void 0!==A.normalMapOffsetX&&0!==A.normalMapOfsfetX||void 0!==A.normalMapScaleX&&1!==A.normalMapScaleX||void 0!==A.normalMapScaleY&&1!==A.normalMapScaleY||void 0!==A.normalMapWAngle&&0!==A.normalMapWAngle?n=A.normalMapOffsetX+"_"+A.normalMapOffsetY+"_"+A.normalMapScaleX+"_"+A.normalMapScaleY+"_"+A.normalMapWAngle+"_"+A.normalMap:e[A.normalMap]?h.normalMap=e[A.normalMap]:Bh.warn(h.name," 中normalMap贴图未找到:",A.normalMap):n=Bd(JSON.stringify(A.normalMap)),n))if(e[n])h.normalMap=e[n];else{var S=new d;if(S.wrapS=S.wrapT=1e3,"string"==typeof A.normalMap)S.image=e[A.normalMap]&&e[A.normalMap].image?e[A.normalMap].image:null;else{var w=A.normalMap,M=document.createElement("img"),b=Fd({type:Number(w.noise_Type),color1:(new Xh).fromArray(w.noise_Color1),color2:(new Xh).fromArray(w.noise_Color2),size:w.noise_Size,level:w.noise_Levels,phase:w.noise_Phase,width:32,height:32,thresholdLow:w.noise_ThresholdLow,thresholdHigh:w.noise_ThresholdHigh});b&&(M.src=b,S.image=M)}S.needsUpdate=!0,S.image&&(S.offset.x=A.normalMapOffsetX?A.normalMapOffsetX:0,S.offset.y=A.normalMapOffsetY?A.normalMapOffsetY:0,S.repeat.x=A.normalMapScaleX?A.normalMapScaleX:1,S.repeat.y=A.normalMapScaleY?A.normalMapScaleY:1,S.rotation=A.normalMapWAngle?A.normalMapWAngle:0,e[n]=S,h.normalMap=S)}if(void 0!==A.normalScale&&(h.normalScale=(new s).fromArray(A.normalScale)),A.alphaMap&&vc.EnableTextureLoading){var U;if("string"==typeof A.alphaMap?void 0!==A.alphaMapOffsetY&&0!==A.alphaMapOffsetY||void 0!==A.alphaMapOffsetX&&0!==A.alphaMapOfsfetX||void 0!==A.alphaMapScaleX&&1!==A.alphaMapScaleX||void 0!==A.alphaMapScaleY&&1!==A.alphaMapScaleY||void 0!==A.alphaMapWAngle&&0!==A.alphaMapWAngle?U=A.alphaMapOffsetX+"_"+A.alphaMapOffsetY+"_"+A.alphaMapScaleX+"_"+A.alphaMapScaleY+"_"+A.alphaMapWAngle+"_"+A.alphaMap:e[A.alphaMap]?h.alphaMap=e[A.alphaMap]:Bh.warn(h.name," 中alphaMap贴图未找到:",A.alphaMap):U=Bd(JSON.stringify(A.alphaMap)),U)if(e[U])h.alphaMap=e[U];else{var F=new d;if(F.wrapS=F.wrapT=1e3,"string"==typeof A.alphaMap)F.image=e[A.alphaMap]&&e[A.alphaMap].image?e[A.alphaMap].image:null;else{var K=A.alphaMap,Q=document.createElement("img"),R=Fd({type:Number(K.noise_Type),color1:(new Xh).fromArray(K.noise_Color1),color2:(new Xh).fromArray(K.noise_Color2),size:K.noise_Size,level:K.noise_Levels,phase:K.noise_Phase,width:32,height:32,thresholdLow:K.noise_ThresholdLow,thresholdHigh:K.noise_ThresholdHigh});R&&(Q.src=R,F.image=Q)}F.needsUpdate=!0,F.image&&(F.offset.x=A.alphaMapOffsetX?A.alphaMapOffsetX:0,F.offset.y=A.alphaMapOffsetY?A.alphaMapOffsetY:0,F.repeat.x=A.alphaMapScaleX?A.alphaMapScaleX:1,F.repeat.y=A.alphaMapScaleY?A.alphaMapScaleY:1,F.rotation=A.alphaMapWAngle?A.alphaMapWAngle:0,e[U]=F,h.alphaMap=F)}h.transparent=!0,h.alphaTest=Number.isNaN(vc.alphaTest)?.5:vc.alphaTest}if(A.envMap&&vc.EnableTextureLoading&&("string"==typeof A.envMap?void 0!==A.envMapOffsetY&&0!==A.envMapOffsetY||void 0!==A.envMapOffsetX&&0!==A.envMapOfsfetX||void 0!==A.envMapScaleX&&1!==A.envMapScaleX||void 0!==A.envMapScaleY&&1!==A.envMapScaleY||void 0!==A.envMapWAngle&&0!==A.envMapWAngle?r=A.envMapOffsetX+"_"+A.envMapOffsetY+"_"+A.envMapScaleX+"_"+A.envMapScaleY+"_"+A.envMapWAngle+"_"+A.envMap:e[A.envMap]?h.envMap=e[A.envMap]:Bh.warn(h.name," 中envMap贴图未找到:",A.envMap):r=Bd(JSON.stringify(A.envMap)),r))if(e[r])h.envMap=e[r];else{var T=new d;if(T.wrapS=T.wrapT=1e3,"string"==typeof A.envMap)T.image=e[A.envMap]&&e[A.envMap].image?e[A.envMap].image:null;else{var k=A.envMap,D=document.createElement("img"),L=Fd({type:Number(k.noise_Type),color1:(new Xh).fromArray(k.noise_Color1),color2:(new Xh).fromArray(k.noise_Color2),size:k.noise_Size,level:k.noise_Levels,phase:k.noise_Phase,width:32,height:32,thresholdLow:k.noise_ThresholdLow,thresholdHigh:k.noise_ThresholdHigh});L&&(D.src=L,T.image=D)}T.needsUpdate=!0,T.image&&(T.offset.x=A.envMapOffsetX?A.envMapOffsetX:0,T.offset.y=A.envMapOffsetY?A.envMapOffsetY:0,T.repeat.x=A.envMapScaleX?A.envMapScaleX:1,T.repeat.y=A.envMapScaleY?A.envMapScaleY:1,T.rotation=A.envMapWAngle?A.envMapWAngle:0,e[r]=T,h.envMap=T)}if(A.lightMap&&vc.EnableTextureLoading&&("string"==typeof A.lightMap?void 0!==A.lightMapOffsetY&&0!==A.lightMapOffsetY||void 0!==A.lightMapOffsetX&&0!==A.lightMapOfsfetX||void 0!==A.lightMapScaleX&&1!==A.lightMapScaleX||void 0!==A.lightMapScaleY&&1!==A.lightMapScaleY||void 0!==A.lightMapWAngle&&0!==A.lightMapWAngle?a=A.lightMapOffsetX+"_"+A.lightMapOffsetY+"_"+A.lightMapScaleX+"_"+A.lightMapScaleY+"_"+A.lightMapWAngle+"_"+A.lightMap:e[A.lightMap]?h.lightMap=e[A.lightMap]:Bh.warn(h.name," 中lightMap贴图未找到:",A.lightMap):a=Bd(JSON.stringify(A.lightMap)),a))if(e[a])h.lightMap=e[a];else{var N=new d;if(N.wrapS=N.wrapT=1e3,"string"==typeof A.lightMap)N.image=e[A.lightMap]&&e[A.lightMap].image?e[A.lightMap].image:null;else{var O=A.lightMap,V=document.createElement("img"),G=Fd({type:Number(O.noise_Type),color1:(new Xh).fromArray(O.noise_Color1),color2:(new Xh).fromArray(O.noise_Color2),size:O.noise_Size,level:O.noise_Levels,phase:O.noise_Phase,width:32,height:32,thresholdLow:O.noise_ThresholdLow,thresholdHigh:O.noise_ThresholdHigh});G&&(V.src=G,N.image=V)}N.needsUpdate=!0,N.image&&(N.offset.x=A.lightMapOffsetX?A.lightMapOffsetX:0,N.offset.y=A.lightMapOffsetY?A.lightMapOffsetY:0,N.repeat.x=A.lightMapScaleX?A.lightMapScaleX:1,N.repeat.y=A.lightMapScaleY?A.lightMapScaleY:1,N.rotation=A.lightMapWAngle?A.lightMapWAngle:0,e[a]=N,h.lightMap=N)}if((void 0!==A.lightMapIntensity&&(h.lightMapIntensity=A.lightMapIntensity),A.emissiveMap&&vc.EnableTextureLoading)&&("string"==typeof A.emissiveMap?void 0!==A.emissiveMapOffsetY&&0!==A.emissiveMapOffsetY||void 0!==A.emissiveMapOffsetX&&0!==A.emissiveMapOfsfetX||void 0!==A.emissiveMapScaleX&&1!==A.emissiveMapScaleX||void 0!==A.emissiveMapScaleY&&1!==A.emissiveMapScaleY||void 0!==A.emissiveMapWAngle&&0!==A.emissiveMapWAngle?l=A.emissiveMapOffsetX+"_"+A.emissiveMapOffsetY+"_"+A.emissiveMapScaleX+"_"+A.emissiveMapScaleY+"_"+A.emissiveMapWAngle+"_"+A.emissiveMap:e[A.emissiveMap]?h.emissiveMap=e[A.emissiveMap]:Bh.warn(h.name," 中emissiveMap贴图未找到:",A.emissiveMap):l=Bd(JSON.stringify(A.emissiveMap)),l))if(e[l])h.emissiveMap=e[l];else{var P=new d;if(P.wrapS=P.wrapT=1e3,"string"==typeof A.emissiveMap)P.image=e[A.emissiveMap]&&e[A.emissiveMap].image?e[A.emissiveMap].image:null;else{var q=A.emissiveMap,j=document.createElement("img"),H=Fd({type:Number(q.noise_Type),color1:(new Xh).fromArray(q.noise_Color1),color2:(new Xh).fromArray(q.noise_Color2),size:q.noise_Size,level:q.noise_Levels,phase:q.noise_Phase,width:32,height:32,thresholdLow:q.noise_ThresholdLow,thresholdHigh:q.noise_ThresholdHigh});H&&(j.src=H,P.image=j)}P.needsUpdate=!0,P.image&&(P.offset.x=A.emissiveMapOffsetX?A.emissiveMapOffsetX:0,P.offset.y=A.emissiveMapOffsetY?A.emissiveMapOffsetY:0,P.repeat.x=A.emissiveMapScaleX?A.emissiveMapScaleX:1,P.repeat.y=A.emissiveMapScaleY?A.emissiveMapScaleY:1,P.rotation=A.emissiveMapWAngle?A.emissiveMapWAngle:0,e[l]=P,h.emissiveMap=P)}if((void 0!==A.emissiveIntensity&&(h.emissiveIntensity=A.emissiveIntensity),A.specularMap&&vc.EnableTextureLoading)&&("string"==typeof A.specularMap?void 0!==A.specularMapOffsetY&&0!==A.specularMapOffsetY||void 0!==A.specularMapOffsetX&&0!==A.specularMapOfsfetX||void 0!==A.specularMapScaleX&&1!==A.specularMapScaleX||void 0!==A.specularMapScaleY&&1!==A.specularMapScaleY||void 0!==A.specularMapWAngle&&0!==A.specularMapWAngle?c=A.specularMapOffsetX+"_"+A.specularMapOffsetY+"_"+A.specularMapScaleX+"_"+A.specularMapScaleY+"_"+A.specularMapWAngle+"_"+A.specularMap:e[A.specularMap]?h.specularMap=e[A.specularMap]:Bh.warn(h.name," 中specularMap贴图未找到:",A.specularMap):c=Bd(JSON.stringify(A.specularMap)),c))if(e[c])h.specularMap=e[c];else{var Y=new d;if(Y.wrapS=Y.wrapT=1e3,"string"==typeof A.specularMap)Y.image=e[A.specularMap]&&e[A.specularMap].image?e[A.specularMap].image:null;else{var W=A.specularMap,J=document.createElement("img"),z=Fd({type:Number(W.noise_Type),color1:(new Xh).fromArray(W.noise_Color1),color2:(new Xh).fromArray(W.noise_Color2),size:W.noise_Size,level:W.noise_Levels,phase:W.noise_Phase,width:32,height:32,thresholdLow:W.noise_ThresholdLow,thresholdHigh:W.noise_ThresholdHigh});z&&(J.src=z,Y.image=J)}Y.needsUpdate=!0,Y.image&&(Y.offset.x=A.specularMapOffsetX?A.specularMapOffsetX:0,Y.offset.y=A.specularMapOffsetY?A.specularMapOffsetY:0,Y.repeat.x=A.specularMapScaleX?A.specularMapScaleX:1,Y.repeat.y=A.specularMapScaleY?A.specularMapScaleY:1,Y.rotation=A.specularMapWAngle?A.specularMapWAngle:0,e[c]=Y,h.specularMap=Y)}return void 0!==A.shininess&&(h.shininess=A.shininess),void 0!==A.opacity&&(h.opacity=A.opacity,1>A.opacity&&(h.transparent=!0),A.opacity>0||(h.opacity=.1)),h.side=2,h.refreshUniforms&&h.refreshUniforms(),h},createNewStyleMaterial:function(A){var e=new yr(A);return e.type="NewStyle",e.uniforms=Ge.merge([it.standard.uniforms]),e.vertexShader=it.newStyle.vertexShader,e.fragmentShader=it.newStyle.fragmentShader,e.metalness=0,e},createHighlightMaterial:function(){var A=this.createStandardMaterial(vc.SelectionColor);return vc.InfluencedByLight||(A.defines.NOTAFFECTEDBYLIGHT=""),A},getBlinkMaterial:function(A,e){var t=Kd.getMaterialParameters(A),i=Kd.createStandardMaterial(t);return i.blinkColor.copy(e),i.colorState=Yc.BLINK,i.refreshUniforms(),i},getMaterialParameters:function(A){var e={};return A.hasOwnProperty("color")&&(e.color=A.color),e.opacity=1,e.transparent=!1,A.hasOwnProperty("opacity")&&(e.opacity=A.opacity,1>A.opacity&&(e.transparent=!0)),A.hasOwnProperty("side")&&(e.side=A.side),A.hasOwnProperty("name")&&(e.name=A.name||""),A.hasOwnProperty("emissive")&&(e.emissive=A.emissive),A.hasOwnProperty("emissiveIntensity")&&(e.emissive=A.emissiveIntensity),A.hasOwnProperty("specular")&&(e.specular=A.specular),A.hasOwnProperty("shininess")&&(e.shininess=A.shininess),A.hasOwnProperty("map")&&(e.map=A.map),A.hasOwnProperty("aoMap")&&(e.aoMap=A.aoMap),A.hasOwnProperty("aoMapIntensity")&&(e.aoMapIntensity=A.aoMapIntensity),A.hasOwnProperty("bumpMap")&&(e.bumpMap=A.bumpMap),A.hasOwnProperty("bumpScale")&&(e.bumpScale=A.bumpScale),A.hasOwnProperty("normalMap")&&(e.normalMap=A.normalMap),A.hasOwnProperty("normalScale")&&(e.normalScale=A.normalScale),A.hasOwnProperty("alphaMap")&&(e.alphaMap=A.alphaMap),A.hasOwnProperty("alphaTest")&&(e.alphaTest=A.alphaTest),A.hasOwnProperty("transparent")&&(e.transparent=A.transparent),A.hasOwnProperty("emissiveMap")&&(e.emissiveMap=A.emissiveMap),A.hasOwnProperty("envMap")&&(e.envMap=A.envMap),A.hasOwnProperty("envMapIntensity")&&(e.envMapIntensity=A.envMapIntensity),A.hasOwnProperty("roughness")&&(e.roughness=A.roughness),A.hasOwnProperty("metalness")&&(e.metalness=A.metalness),A.hasOwnProperty("originRoughness")&&(e.originRoughness=A.originRoughness),A.hasOwnProperty("originMetalness")&&(e.originMetalness=A.originMetalness),A.hasOwnProperty("iblProbe")&&(e.iblProbe=A.iblProbe),A.hasOwnProperty("shift")&&(e.shift=A.shift),A.hasOwnProperty("wireframe")&&(e.wireframe=A.wireframe),A.hasOwnProperty("pureColor")&&(e.pureColor=A.pureColor),A.hasOwnProperty("textureColor")&&(e.textureColor=A.textureColor),A.hasOwnProperty("imageFade")&&(e.imageFade=A.imageFade),"bos3d"===A.type&&A.hasOwnProperty("lights")&&(e.lights=A.lights),A.hasOwnProperty("lightMap")&&(e.lightMap=A.lightMap),A.hasOwnProperty("lightMapIntensity")&&(e.lightMapIntensity=A.lightMapIntensity),A.hasOwnProperty("viewportSize")&&(e.viewportSize=A.viewportSize),A.hasOwnProperty("fillMap")&&(e.fillMap=A.fillMap),e},nextHighestPowerOfTwo:function(A){A-=1;for(var e=1;32>e;e<<=1)A|=A>>e;return A+1},ensurePowerOfTwo:function(A){if(0===A.width||0===A.height)return A;if(!a.isPowerOfTwo(A.width)||!a.isPowerOfTwo(A.height)){var e=document.createElement("canvas");return e.width=Kd.nextHighestPowerOfTwo(A.width),e.height=Kd.nextHighestPowerOfTwo(A.height),e.getContext("2d").drawImage(A,0,0,A.width,A.height,0,0,e.width,e.height),e}return A},ensureQuadrate:function(A){var e=A.width,t=A.height;if(0===e||0===t||a.isPowerOfTwo(e)&&a.isPowerOfTwo(t)&&e===t)return A;a.isPowerOfTwo(e)||(e=Kd.nextHighestPowerOfTwo(e)),a.isPowerOfTwo(t)||(t=Kd.nextHighestPowerOfTwo(t));var i=0,o=0;t>e?i=.5*(t-e):o=.5*(e-t);var n=document.createElement("canvas");return n.width=n.height=Math.max(e,t),n.getContext("2d").drawImage(A,0,0,A.width,A.height,i,o,e,t),n},getRGBAFromColorArray:function(A){var e=A[0],t=A[1],i=A[2],o=A[3];return void 0!==o?"rgba("+e+","+t+","+i+","+o+")":"rgb("+e+","+t+","+i+")"},getRGBAFromArray:function(A){var e=255*A[0],t=255*A[1],i=255*A[2],o=255*A[3];return void 0!==o?"rgba("+e+","+t+","+i+","+o+")":"rgb("+e+","+t+","+i+")"},getArrayFromRGBA:function(A){var e=A.split(","),t=parseInt(e[0].split("(")[1],0)/255,i=parseInt(e[1],0)/255,o=parseInt(e[2].split(")")[0],0)/255;return void 0!==e[3]?[t,i,o,parseFloat(e[3].split(")")[0])]:[t,i,o]},getColorArrayFromRGBA:function(A){var e=A.split(","),t=parseInt(e[0].split("(")[1],0),i=parseInt(e[1],0),o=parseInt(e[2].split(")")[0],0);return void 0!==e[3]?[t,i,o,parseFloat(e[3].split(")")[0])]:[t,i,o]},getHexStringFromRGB:function(A){return"#"+("000000"+Kd.getHex(Kd.getArrayFromRGBA(A)).toString(16)).slice(-6)},getArrayFromColorArray:function(A){return[A[0]/255,A[1]/255,A[2]/255]},getHexStringFromColorArray:function(A){return"#"+("000000"+Kd.getHex(Kd.getArrayFromColorArray(A)).toString(16)).slice(-6)},getHexStringFromArray:function(A){return"#"+("000000"+Kd.getHex(A).toString(16)).slice(-6)},getHex:function(A){return 255*A[0]<<16^255*A[1]<<8^255*A[2]<<0},getColorParamsByMaterial:function(A){return{rgbaColor:[A.color.r,A.color.g,A.color.b,A.opacity],transparent:A.transparent,wireframe:A.wireframe}},getHoverColorByColor:function(A){var e={};return e.r=A.r,e.g=A.g,e.b=A.b,e.a=Kd.getHoverOpacity(A.a),e},getHoverOpacity:function(A){return.4>A?A+.3:A-.3},cloneMaterialBaseOnColor:function(A,e){if(!A.color&&!A.diffuse)return A;var t=A.clone();return t.wireframe=e.wireframe,t.opacity=e.opacity,t.transparent=e.transparent,t.color&&t.color.isColor&&e.color&&e.color.isColor&&t.color.copy(e.color),t.diffuse&&t.diffuse.isColor&&e.diffuse&&e.diffuse.isColor&&t.diffuse.copy(e.diffuse),t}},Qd=function(A,e,t,i,o,n,r,a){this.name=A,this.position=e,this.target=t,this.up=i,this.fov=o,this.frustumWidth=r,this.frustumHeight=a,this.version=n},Rd={createCameraInfo:function(A){var e=A.camera,t=new Qd(A.getCameraName(),e.position,e.target,e.up);return JSON.stringify(t)},transformCamera:function(A,e){var t=new y,i=function(A){return[parseFloat(A[0]),parseFloat(A[1]),parseFloat(A[2])]};t.fromArray(i(A.position.split(",")));var o=new y;o.fromArray(i(A.direction.split(",")));var n=new y;n.fromArray(i(A.up.split(",")));var r=new y;r.addVectors(t,o),t.applyMatrix4(e.rootNode.matrix),r.applyMatrix4(e.rootNode.matrix);var a=new M;return a.makeRotationFromEuler(e.rootNode.rotation),n.applyMatrix4(a),n.normalize(),new Qd(A.name,t,r,n)},parseCameraInfo:function(A){if(!A)return null;var e=JSON.parse(A);if(!e.hasOwnProperty("position")||!e.hasOwnProperty("target")||!e.hasOwnProperty("up"))return null;var t=e.name||Ec.PERSPECTIVE,i=new y;i.x=e.position.x,i.y=e.position.y,i.z=e.position.z;var o=new y;o.x=e.target.x,o.y=e.target.y,o.z=e.target.z;var n=new y;return n.x=e.up.x,n.y=e.up.y,n.z=e.up.z,new Qd(t,i,o,n,void 0,void 0===e.version?0:e.version,e.frustumWidth,e.frustumHeight)},canvasToNormalized:function(A,e,t){var i={x:0,y:0,z:0};return i.x=A.x/e*2-1,i.y=-A.y/t*2+1,i.z=A.z||0,i},normalizedToCanvas:function(A,e,t){var i={x:0,y:0,z:0};return i.x=Math.floor(.5*(A.x+1)*e+.5),i.y=Math.floor(-.5*(A.y-1)*t+.5),i.z=A.z||0,i},drawingToCanvas:function(A,e,t,i){var o=new y(e.x,e.y,e.z);return o.project(A),this.normalizedToCanvas(o,t,i)},drawingPointsToCanvas:function(A,e,t,i,o){var n={},r=(new M).getInverse(A.matrixWorld),a=new y(e.x,e.y,e.z);a.applyMatrix4(r);var s=new y(t.x,t.y,t.z);if(s.applyMatrix4(r),a.z>0&&s.z>0)return null;var l=a.clone().sub(s);if(l.normalize(),a.z>0)a.sub(l.multiplyScalar((a.z+A.near)/l.z));else if(s.z>0){s.sub(l.multiplyScalar((s.z+A.near)/l.z))}return a.applyMatrix4(A.projectionMatrix),s.applyMatrix4(A.projectionMatrix),n.start=this.normalizedToCanvas(a,i,o),n.end=this.normalizedToCanvas(s,i,o),n},lineIntersectWithRect:function(A,e){if(A&&A.start.x===A.end.x&&A.start.y===A.end.y)return Bh.log("Invalid line."),null;var t,i=0;A.start.x!==A.end.x&&(i=(A.start.y-A.end.y)/(A.start.x-A.end.x));var o=[],n=e.min,r=e.max;return n.y>i*n.x+(t=A.start.y-i*A.start.x)||i*n.x+t>r.y||o.push(new s(n.x,i*n.x+t)),n.y>i*r.x+t||i*r.x+t>r.y||o.push(new s(r.x,i*r.x+t)),0===i&&(o.push(new s(n.x,t)),o.push(new s(r.x,t))),(n.y-t)/i>n.x&&r.x>(n.y-t)/i&&o.push(new s((n.y-t)/i,n.y)),(r.y-t)/i>n.x&&r.x>(r.y-t)/i&&o.push(new s((r.y-t)/i,r.y)),o},canvasToDrawing:function(A,e,t,i){var o=this.canvasToNormalized(e,t,i),n=new y(o.x,o.y,o.z);return n.unproject(A),{x:n.x,y:n.y,z:n.z}},intersectBoxByRay:function(A,e){var t=0,i=0,o=0,n=0,r=0,a=0,s=1/A.direction.x,l=1/A.direction.y,c=1/A.direction.z,h=A.origin;return 0>s?(t=(e.max.x-h.x)*s,i=(e.min.x-h.x)*s):(t=(e.min.x-h.x)*s,i=(e.max.x-h.x)*s),0>l?(o=(e.max.y-h.y)*l,n=(e.min.y-h.y)*l):(o=(e.min.y-h.y)*l,n=(e.max.y-h.y)*l),t>n||o>i?null:((o>t||isNaN(t))&&(t=o),(i>n||isNaN(i))&&(i=n),0>c?(r=(e.max.z-h.z)*c,a=(e.min.z-h.z)*c):(r=(e.min.z-h.z)*c,a=(e.max.z-h.z)*c),t>a||r>i?null:((r>t||isNaN(t))&&(t=r),(i>a||isNaN(i))&&(i=a),0>i?null:0>t?i:t))},intersectObject:function(A,e,t,i){if(A.visible){A.raycast(e,t);if(!0===i&&A.children)for(var o=A.children,n=0,r=o.length;r>n;n+=1)Rd.intersectObject(o[n],e,t,!0)}},intersectObjectWithFrustum:(Ud=new aA,function(A,e){if(!A.boundingBox||A instanceof Ue){var t=A.geometry;null===t.boundingBox&&t.computeBoundingBox(),Ud.copy(t.boundingBox)}else Ud.copy(A.boundingBox);return Ud.applyMatrix4(A.matrixWorld),e.intersectsBox(Ud)})},Td=function(A,e,t,i){je.call(this,A,e,t,i),this.projectOnWidth=!1};(Td.prototype=Object.create(je.prototype)).constructor=Td,Td.prototype.updateProjectionMatrixByFrustum=function(A,e){var t=this.near,i=null,o=null,n=null,r=null;this.projectOnWidth?(o=-.5*(n=A),i=.5*(r=this.aspect*n)):(i=.5*(r=e),o=-.5*(n=this.aspect*r));var a=this.view;if(null!==a){var s=a.fullWidth,l=a.fullHeight;o+=a.offsetX*n/s,i-=a.offsetY*r/l,n*=a.width/s,r*=a.height/l}var c=this.filmOffset;0!==c&&(o+=t*c/this.getFilmWidth()),this.projectionMatrix.makePerspective(o,o+n,i,i-r,t,this.far)},Td.prototype.setProjectOnWidth=function(A){this.projectOnWidth=A};var kd=function(A,e){qe.call(this),this.target=new y,this.name=A||"",this.fov=e.fov,this.near=e.near,this.far=e.far,A===Ec.PERSPECTIVE?(this.aspect=e.width/e.height,this.fov=e.fov,this.left=-e.width/2,this.right=e.width/2,this.top=e.height/2,this.bottom=-e.height/2,this.perspectiveCamera=new Td(this.fov,this.aspect,this.near,this.far),this.orthoCamera=null,this.toPerspective()):(this.left=e.left,this.right=e.right,this.top=e.top,this.bottom=e.bottom,this.fov=45,this.aspect=(this.right-this.left)/(this.top-this.bottom),this.orthoCamera=new Ka(this.left,this.right,this.top,this.bottom,this.near,this.far),this.perspectiveCamera=null,this.orthoCamera.updateProjectionMatrix(),this.projectionMatrix=this.orthoCamera.projectionMatrix,this.isPerspective=!1),this.zoom=e.zoom||1,this.updateProjectionMatrixByFrustum=!1};(kd.prototype=Object.create(qe.prototype)).constructor=kd,kd.prototype.toPerspective=function(){null!==this.perspectiveCamera?this.updateProjectionMatrixByFrustum||(this.perspectiveCamera.aspect=this.aspect,this.perspectiveCamera.near=this.near,this.perspectiveCamera.far=this.far,this.perspectiveCamera.fov=this.fov,this.perspectiveCamera.updateProjectionMatrix(),this.projectionMatrix=this.perspectiveCamera.projectionMatrix,this.projectionMatrixInverse=this.perspectiveCamera.projectionMatrixInverse,this.isPerspective=!0,this.dirty=!0):Bh.log("Can not convert to perspective camera because the camera original type is orthographic.")},kd.prototype.toOrthographic=function(){null===this.orthoCamera&&(this.orthoCamera=new Ka(this.left,this.right,this.top,this.bottom,this.near,this.far));var A=this.fov,e=this.target.clone().sub(this.position).length(),t=Math.tan(A*Math.PI/180/2)*e,i=t*this.aspect;t/=this.zoom,this.left=this.orthoCamera.left=-(i/=this.zoom),this.right=this.orthoCamera.right=i,this.top=this.orthoCamera.top=t,this.bottom=this.orthoCamera.bottom=-t,this.orthoCamera.near=this.near,this.orthoCamera.far=this.far,this.orthoCamera.updateProjectionMatrix(),this.projectionMatrix=this.orthoCamera.projectionMatrix,this.projectionMatrixInverse=this.orthoCamera.projectionMatrixInverse,this.isPerspective=!1,this.dirty=!0},kd.prototype.setSize=function(A,e){this.perspectiveCamera.aspect=A/e,this.left=-A/2,this.right=A/2,this.top=e/2,this.bottom=-e/2,this.aspect=A/e,this.dirty=!0},kd.prototype.setSizeByFrustum=function(A,e){var t=2*this.right,i=2*this.top;this.aspect=t/i;var o=null;A/e>t/i?(o=i/t,this.perspectiveCamera.setProjectOnWidth(!0)):(o=t/i,this.perspectiveCamera.setProjectOnWidth(!1)),this.dirty=!0,this.isPerspective&&(this.perspectiveCamera.aspect=o,this.perspectiveCamera.near=this.near,this.perspectiveCamera.far=this.far,this.perspectiveCamera.fov=this.fov,this.perspectiveCamera.updateProjectionMatrixByFrustum(A,e),this.projectionMatrix=this.perspectiveCamera.projectionMatrix,this.isPerspective=!0,this.dirty=!0)},kd.prototype.setFov=function(A){this.fov=A,this.dirty=!0,this.updateProjectionMatrix()},kd.prototype.setNearFar=function(A,e){this.near=A,this.far=e,this.dirty=!0,this.updateProjectionMatrix()},kd.prototype.updateProjectionMatrix=function(){this.isPerspective?this.toPerspective():this.toOrthographic()},kd.prototype.setLens=function(A,e){void 0===e&&(e=24);var t=2*a.radToDeg(Math.atan(e/(2*A)));return this.setFov(t),this.dirty=!0,t},kd.prototype.setZoom=function(A){this.zoom=A,this.dirty=!0,this.updateProjectionMatrix()},kd.prototype.copy=function(A){qe.prototype.copy.call(this,A),this.target.copy(A.target),this.aspect=A.aspect,this.fov=A.fov,this.near=A.near,this.far=A.far,this.left=A.left,this.right=A.right,this.top=A.top,this.bottom=A.bottom,this.zoom=A.zoom,this.isPerspective=A.isPerspective,A.orthoCamera&&(this.orthoCamera?this.orthoCamera.copy(A.orthoCamera):this.orthoCamera=A.orthoCamera.clone()),A.perspectiveCamera&&(this.perspectiveCamera?this.perspectiveCamera.copy(A.perspectiveCamera):this.perspectiveCamera=A.perspectiveCamera.clone())},kd.prototype.isDirty=function(){return this.dirty},kd.prototype.toFrontView=function(){this.rotation.x=0,this.rotation.y=0,this.rotation.z=0},kd.prototype.toBackView=function(){this.rotation.x=0,this.rotation.y=Math.PI,this.rotation.z=0},kd.prototype.toLeftView=function(){this.rotation.x=0,this.rotation.y=-Math.PI/2,this.rotation.z=0},kd.prototype.toRightView=function(){this.rotation.x=0,this.rotation.y=Math.PI/2,this.rotation.z=0},kd.prototype.toTopView=function(){this.rotation.x=-Math.PI/2,this.rotation.y=0,this.rotation.z=0},kd.prototype.toBottomView=function(){this.rotation.x=Math.PI/2,this.rotation.y=0,this.rotation.z=0};var Dd=function(A,e,t,i){this.ray=new CA(A,e),this.near=t||0,this.far=i||1/0,this.params={Sprite:{},Mesh:{},Points:{threshold:1},LOD:{},Line:{}}};Dd.prototype={constructor:Dd,precision:1e-4,linePrecision:1,descSort:function(A,e){return A.distance-e.distance},set:function(A,e){this.ray.set(A,e)},setFromCamera:function(A,e){e instanceof kd?e.isPerspective?(this.ray.origin.copy(e.position),this.ray.direction.set(A.x,A.y,.5).unproject(e).sub(e.position).normalize()):(this.ray.origin.set(A.x,A.y,-1).unproject(e),this.ray.direction.set(0,0,-1).transformDirection(e.matrixWorld)):e instanceof je?(this.ray.origin.copy(e.position),this.ray.direction.set(A.x,A.y,.5).unproject(e).sub(e.position).normalize()):e instanceof Ka?(this.ray.origin.set(A.x,A.y,-1).unproject(e),this.ray.direction.set(0,0,-1).transformDirection(e.matrixWorld)):Bh.error("Raycaster: Unsupported camera type.")},intersectObject:function(A,e){var t=[];return Rd.intersectObject(A,this,t,e),t.sort(this.descSort),t.length>0?t[0]:null},intersectObjects:function(A,e){for(var t=[],i=0,o=A.length;o>i;i+=1)Rd.intersectObject(A[i],this,t,e);return t.sort(this.descSort),t.length>0?t[0]:null},intersectOctantForNode:function(A,e){var t=this,i=new aA;!function A(o){var n=null,r=null;if(i.set(o.min,o.max),t.ray.intersectBox(i)&&(e.push(o),o.childOctants))for(n=0,r=o.childOctants.length;r>n;n+=1)A(o.childOctants[n])}(A)}},CA.prototype.intersectBoxWithDistance=function(A){var e=null,t=null,i=null,o=null,n=null,r=null,a=1/this.direction.x,s=1/this.direction.y,l=1/this.direction.z,c=this.origin;if(0>a?(t=(A.max.x-c.x)*a,e=(A.min.x-c.x)*a):(t=(A.min.x-c.x)*a,e=(A.max.x-c.x)*a),0>s?(o=(A.max.y-c.y)*s,i=(A.min.y-c.y)*s):(o=(A.min.y-c.y)*s,i=(A.max.y-c.y)*s),t>i||o>e)return-1;if((o>t||isNaN(t))&&(t=o),(e>i||isNaN(e))&&(e=i),0>l?(r=(A.max.z-c.z)*l,n=(A.min.z-c.z)*l):(r=(A.min.z-c.z)*l,n=(A.max.z-c.z)*l),t>n||r>e)return-1;if((r>t||isNaN(t))&&(t=r),(e>n||isNaN(e))&&(e=n),0>e)return-1;if(0>t)return 0;var h=new y;this.at(0>t?e:t,h);var d=h.x-c.x,p=h.y-c.y,g=h.z-c.z;return Math.sqrt(d*d+p*p+g*g)};var Ld=function(){},Nd=function(){};Nd.prototype=uh.extend(!0,{},Ld.prototype={constructor:Ld,apply:function(A){A.addEventListener=Ld.prototype.addEventListener,A.hasEventListener=Ld.prototype.hasEventListener,A.removeEventListener=Ld.prototype.removeEventListener,A.fireEvent=Ld.prototype.dispatchEvent,A.dispatchEvent=Ld.prototype.dispatchEvent},addEventListener:function(A,e){A&&(void 0===this._listeners&&(this._listeners={}),void 0===this._listeners[A]&&(this._listeners[A]=[]),this._listeners[A].push(e))},hasEventListener:function(A,e){if(!A)return!1;if(void 0===this._listeners)return!1;var t=this._listeners;return void 0!==t[A]&&-1!==t[A].indexOf(e)},removeEventListener:function(A,e){if(A&&(void 0===this._listeners&&(this._listeners={}),Array.isArray(this._listeners[A])))for(var t=this._listeners[A],i=0,o=t.length;o>i;i+=1)if(t[i]===e){t.splice(i,1);break}},removeAllEventListenerByType:function(A){A&&(void 0===this._listeners&&(this._listeners={}),Array.isArray(this._listeners[A])&&this._listeners[A]&&(this._listeners[A]=void 0))},removeAllEventListener:function(){for(var A in void 0===this._listeners&&(this._listeners={}),this._listeners)if(this._listeners.hasOwnProperty(A))for(var e=this._listeners[A],t=0,i=e.length;i>t;t+=1)e.splice(t,1);this._listeners={}},dispatchEvent:function(A){if(void 0===this._listeners&&(this._listeners={}),"string"==typeof A&&(A={type:A}),!A.target)try{A.target=this}catch(A){}if(null==A.type)throw Bh.trace("事件类型未知."),new Error("事件类型未知.");if(Array.isArray(this._listeners[A.type]))for(var e=this._listeners[A.type].slice(),t=0;e.length>t;t+=1)e[t].call(this,A)},fireEvent:function(A){this.dispatchEvent(A)}},{init:function(A){this.marks={},this.allOids=[],this.components={},this.SelectedMark={},this.mouse=new s,this.lastX=0,this.lastY=0,this.active=!0,this.viewer=A},addObjectToScene:function(A,e){A&&A.id&&e&&(this.viewer.addExternalObject(A.id,e),this.components[A.id]=e,this.allOids.push(A.id),this.marks[A.id]=A)},enabled:function(){this.mousedown=this.viewer.domElement.addEventListener("mousedown",this.onMouseDown.bind(this),!1),this.mouseup=this.viewer.domElement.addEventListener("mouseup",this.onMouseUp.bind(this),!1)},disabled:function(){this.mousedown=this.viewer.domElement.removeEventListener("mousedown",this.onMouseDown.bind(this),!1),this.mouseup=this.viewer.domElement.removeEventListener("mouseup",this.onMouseUp.bind(this),!1)},touchEnabled:function(){this.touchstart=document.getElementById(this.viewer.uuid).addEventListener("touchstart",this.onTouchStart.bind(this),!1),this.touchend=document.getElementById(this.viewer.uuid).addEventListener("touchend",this.onTouchEnd.bind(this),!1)},touchDisabled:function(){this.touchstart=this.viewer.domElement.removeEventListener("touchstart",this.onTouchStart.bind(this),!1),this.touchend=this.viewer.domElement.removeEventListener("touchend",this.onTouchEnd.bind(this),!1)},onMouseDown:function(A){this.mouse.x=this.lastX=A.clientX,this.mouse.y=this.lastY=A.clientY},onMouseUp:function(A){var e=[A.clientX,A.clientY];(e[0]>this.lastX?5>e[0]-this.lastX:5>this.lastX-e[0])&&(e[1]>this.lastY?5>e[1]-this.lastY:5>this.lastY-e[1])&&(this.mouse.x=this.lastX=e[0],this.mouse.y=this.lastY=e[1],this.pick("pick"))},onTouchStart:function(A){this.mouse.x=this.lastX=A.changedTouches[0].clientX,this.mouse.y=this.lastY=A.changedTouches[0].clientY},onTouchEnd:function(A){(A.changedTouches[0].clientX>this.lastX?5>A.changedTouches[0].clientX-this.lastX:5>this.lastX-A.changedTouches[0].clientX)&&(A.changedTouches[0].clientY>this.lastY?5>A.changedTouches[0].clientY-this.lastY:5>this.lastY-A.changedTouches[0].clientY)&&(this.mouse.x=this.lastX=A.changedTouches[0].clientX,this.mouse.y=this.lastY=A.changedTouches[0].clientY,this.pick("pick"))},pick:function(){var A=this.viewer.cameraControl.getIntersectContext(this.mouse),e=new Dd;e.setFromCamera(A.mouse,A.camera),e.camera=A.camera,e._camera=A.camera,e.viewportSize=A.viewportSize;var t=Object.values(this.components),i=e.intersectObjects(t);i?this.SelectedMark!==i.object?(this.SelectedMark=i.object,this.dispatchEvent({type:"updated",added:{objects:this.SelectedMark}})):(this.dispatchEvent({type:"updated",removed:{objects:this.SelectedMark}}),this.SelectedMark={}):(this.SelectedMark={},this.dispatchEvent({type:"updated",removed:{objects:this.SelectedMark}}))},getClickCoordsWithinElement:function(A){var e=[0,0];if(A){for(var t=A.target,i=0,o=0;t.offsetParent;)i+=t.offsetLeft,o+=t.offsetTop,t=t.offsetParent;e[0]=A.pageX-i,e[1]=A.pageY-o}else A=window.event,e.x=A.x,e.y=A.y;return e},listentoSelectMarks:function(A){var e=this;this.addEventListener("updated",(function(t){t.added&&e.SelectedMark!=={}?A(e.SelectedMark.key,e.SelectedMark):A(null,null)}))},hasTheSameId:function(A){if(""!==A.id)for(var e=0;this.allOids.length>e;e+=1)if(A.id===this.allOids[e])return{data:"标签id重复"}},findMark:function(A){return this.components[A]},idsToArray:function(A){return null==A?{data:"未选中mark"}:(Array.isArray(A)||(A=[A]),A)},removeIdAndInfo:function(A){var e=this.allOids.indexOf(A);this.allOids.splice(e,1),delete this.marks[A],delete this.components[A]},remove:function(A){if(A=this.idsToArray(A),!Array.isArray(A))return A;for(var e=0;A.length>e;e+=1)this.removeIdAndInfo(A[e]),this.viewer.removeExternalObjectByName(A[e]);this.viewer.render()},hide:function(A){if(A=this.idsToArray(A),!Array.isArray(A))return A;for(var e=0;A.length>e;e+=1){var t=this.findMark(A[e]);t&&(t.visible=!1)}this.viewer.render()},show:function(A){var e=null;if(A){A=this.idsToArray(A);for(var t=0;A.length>t;t+=1)(e=this.findMark(A[t]))&&(e.visible=!0)}else for(var i in this.components)(e=this.components[i])&&(e.visible=!0);this.viewer.render()},isolation:function(A){if(this.allOids.length>0){A=this.idsToArray(A);this.show();for(var e=this.allOids.concat(),t=0;A.length>t;t+=1){var i=A[t];if(-1===this.allOids.indexOf(i))return{data:"mark不存在"};for(var o=0;e.length>o;o+=1)if(i===e[o]){e.splice(o,1);break}}var n=null;for(o=0;e.length>o;o+=1)(n=this.findMark(e[o]))&&(n.visible=!1);this.viewer.render()}}});var Od=function(A){this.defaultSettings={id:"",mode:"absolute",startPosition:[0,0,0],endPosition:[0,0],color:[255,0,0],colorLine:[0,0,0],offset:[0,0],draggable:!0,componentId:"",domElement:null,title:"标签",showPoint:!0,showLine:!0},this.initStartPos={};var e=A;"function"==typeof A.getViewerImpl&&(e=A.getViewerImpl()),this.dragging=!1,this.init(e),this.markState={};var t=this;this.showPoint=!0,this.showLine=!0,e.cameraControl.addEventListener(Rc.ON_CAMERA_CHANGE,(function(){t._update()}))};Od.prototype=uh.extend(!0,{},Nd.prototype,{constructor:Od,add:function(A,e){var t=document.createElement("div"),i=Object.assign({},this.defaultSettings,A),o=this.hasTheSameId(i);if(o)return o;""===i.id&&(i.id=a.generateUUID()),t.id="label"+i.id,this.marks[i.id]=Object.assign({},i);var n=this.viewer.getScreenCoordFromSceneCoord(i.startPosition),r=i.offset,s=i.endPosition.concat(),l=[];("relativeute"===i.mode?(s=[n[0]+r[0],n[1]+r[1]],i.endPosition=[0,0]):i.offset=[0,0],Array.isArray(i.colorLine))&&(i.colorLine="rgb("+i.colorLine[0]+","+i.colorLine[1]+","+i.colorLine[2]+")");var c=document.createElement("div");(c.id="labelStart"+i.id,c.className="labelStart",c.style.cssText="border:2px solid red; border-radius:5px; -moz-border-radius:5px; height: 4px;width: 4px;position: absolute;margin-left: -3px;margin-top: -3px;top:"+n[1]+"px;left:"+n[0]+"px; background-color: red;",t.appendChild(c),this.showPoint&&i.showPoint||(c.style.display="none"),Array.isArray(i.color))&&(i.color="rgb("+i.color[0]+","+i.color[1]+","+i.color[2]+")");var h=document.createElement("div");h.id=i.id,h.className="labelingDiv",h.style.cssText="border:2px solid "+i.colorLine+";text-align:center;border-radius:5px;-moz-border-radius:5px;min-width: 66px;position: absolute;width:-webkit-fit-content;width: -moz-fit-content;background-color:"+i.color+";",t.appendChild(h);var d=document.createElement("span");d.id="labelTitle"+i.id,d.className="labelTitle",d.onmouseover=function(){d.style.cursor="move"},d.onmouseout=function(){d.style.cursor="auto"},d.style.cssText="display:block;padding:2%;text-align:center;color: #000000;white-space:nowrap",d.innerText=i.title,h.appendChild(d),0>s[0]&&(s[0]=5),0>s[1]&&(s[1]=5),s[0]>this.viewer.domElement.offsetWidth-h.offsetWidth&&(s[0]=this.viewer.domElement.offsetWidth-h.offsetWidth),s[1]>this.viewer.domElement.offsetHeight-h.offsetHeight&&(s[1]=this.viewer.domElement.offsetHeight-h.offsetHeight),h.style.cssText+="left:"+s[0]+"px; top:"+s[1]+"px",i.domElement&&h.appendChild(i.domElement),s[0]>n[0]?s[1]>n[1]?(l[0]=s[0],l[1]=s[1]):(l[0]=s[0],l[1]=s[1]+h.offsetHeight):s[1]>n[1]?(l[0]=s[0]+h.offsetWidth,l[1]=s[1]):(l[0]=s[0]+h.offsetWidth,l[1]=s[1]+h.offsetHeight);var p=n[0]-l[0],g=n[1]-l[1],u=Math.sqrt(p*p+g*g),f=Math.atan(g/p)/Math.PI*180;p>0||(g>0?f+=180:f-=180);var m=document.createElement("div");m.id="labelLine"+i.id,m.className="labelLine",m.style.cssText=" height: 2px;position: absolute;transform-origin: left center;width:"+u+"px;-ms-transform:rotateZ("+f+"deg);-moz-transform:rotateZ("+f+"deg);-webkit-transform:rotateZ("+f+"deg);-o-transform:rotateZ("+f+"deg);transform:rotateZ("+f+"deg);left:"+l[0]+"px;top:"+l[1]+"px;background-color:"+i.colorLine+";",t.appendChild(m),this.showLine&&i.showLine||(m.style.display="none"),this.viewer.domElement.appendChild(t),i.draggable&&this._enableDrag(h),this.allOids.push(i.id),this.markState[i.id]={userHide:!1,outOfBoundary:!1},"function"==typeof e&&e(i.id)},enablePoint:function(A){this.showPoint=A,this._update()},enableLine:function(A){this.showLine=A,this._update()},_update:function(){for(var A in this.marks){var e=this.viewer.getScreenCoordFromSceneCoord(this.marks[A].startPosition),t=this.marks[A].endPosition.concat(),i=this.marks[A].offset;"relativeute"===this.marks[A].mode&&(0!==t[0]||0!==t[1]?(i=[t[0]-e[0],t[1]-e[1]],this.marks[A].endPosition=[0,0],this.marks[A].offset=i):t=[e[0]+i[0],e[1]+i[1]]);var o=[0,0],n=document.getElementById(A);t[0]>e[0]?t[1]>e[1]?(o[0]=t[0],o[1]=t[1]):(o[0]=t[0],o[1]=t[1]+n.offsetHeight):t[1]>e[1]?(o[0]=t[0]+n.offsetWidth,o[1]=t[1]):(o[0]=t[0]+n.offsetWidth,o[1]=t[1]+n.offsetHeight);var r=e[0]-o[0],a=e[1]-o[1],s=Math.sqrt(r*r+a*a),l=Math.atan(a/r)/Math.PI*180;r>0||(a>0?l+=180:l-=180);var c=getComputedStyle(this.viewer.domElement),h=parseInt(c.width,10),d=parseInt(c.height,10);0>e[1]||e[1]>d||0>e[0]||e[0]>h?(this.markState[A].outOfBoundary=!0,document.getElementById("labelStart"+A).setCss({display:"none"}),document.getElementById("labelLine"+A).setCss({display:"none"}),document.getElementById(A).setCss({display:"none"})):(this.markState[A].outOfBoundary=!1,this.dragging||"relativeute"!==this.marks[A].mode||(document.getElementById(A).style.left=t[0]+"px",document.getElementById(A).style.top=t[1]+"px"),this.markState[A].userHide||(document.getElementById(A).setCss({display:"block"}),this.showPoint&&this.marks[A].showPoint?document.getElementById("labelStart"+A).style.cssText+=";display:block;top:"+e[1]+"px; left:"+e[0]+"px":document.getElementById("labelStart"+A).setCss({display:"none"}),this.showLine&&this.marks[A].showLine?document.getElementById("labelLine"+A).style.cssText+=";display:block;width:"+s+"px;transform-origin: left center;-ms-transform:rotateZ("+l+"deg);-moz-transform:rotateZ("+l+"deg);-webkit-transform:rotateZ("+l+"deg);-o-transform:rotateZ("+l+"deg);transform:rotateZ("+l+"deg);left:"+o[0]+"px; top:"+o[1]+"px":document.getElementById("labelLine"+A).setCss({display:"none"})))}},_enableDrag:function(A){var e=this,t=A,i=A.id,o=t.querySelector("#labelTitle"+i),n=this.viewer.domElement,r=n.offsetLeft,a=n.offsetTop,s=this;o.addEventListener("mousedown",(function(e){e.preventDefault(),s.dragging=!0,t.setAttribute("offset-left",e.offsetX),t.setAttribute("offset-top",e.offsetY),t.setAttribute("allow-drag","true"),[A.style.left,A.style.top]})),document.addEventListener("mousemove",function(A){if("true"===t.getAttribute("allow-drag")){A.preventDefault();var e=A.clientX-parseInt(t.getAttribute("offset-left"),10)-parseInt(t.style.borderWidth,10)-r,o=A.clientY-parseInt(t.getAttribute("offset-top"),10)-parseInt(t.style.borderWidth,10)-a;0>o&&(o=5),o>n.offsetHeight-t.offsetHeight&&(o=n.offsetHeight-t.offsetHeight),0>e&&(e=5),e>n.offsetWidth-t.offsetWidth&&(e=n.offsetWidth-t.offsetWidth),t.style.cssText+=";left:"+e+"px;top:"+o+"px",this.marks[i].endPosition=[e,o],this._update()}}.bind(this)),document.addEventListener("mouseup",(function(A){"true"===t.getAttribute("allow-drag")&&(A.preventDefault(),t.setAttribute("allow-drag","false"),s.dragging=!1)})),o.addEventListener("touchstart",(function(e){e.preventDefault();var i=parseInt(t.style.left,10),o=parseInt(t.style.top,10),n=e.targetTouches[0].clientY;t.setAttribute("offset-left",e.targetTouches[0].clientX-i),t.setAttribute("offset-top",n-o),t.setAttribute("allow-drag","true"),[A.style.left,A.style.top]})),document.addEventListener("touchmove",(function(A){if("true"===t.getAttribute("allow-drag")){A.preventDefault();var o=A.targetTouches[0].clientX-parseInt(t.getAttribute("offset-left"),10)-parseInt(t.style.borderWidth,10)-r,n=A.targetTouches[0].clientY-parseInt(t.getAttribute("offset-top"),10)-parseInt(t.style.borderWidth,10)-a;0>n&&(n=5),n>e.viewer.domElement.offsetHeight-t.offsetHeight&&(n=e.viewer.domElement.offsetHeight-t.offsetHeight),0>o&&(o=5),o>e.viewer.domElement.offsetWidth-t.offsetWidth&&(o=e.viewer.domElement.offsetWidth-t.offsetWidth),t.style.cssText+=";left:"+o+"px;top:"+n+"px",e.marks[i].endPosition=[o,n],e._update()}})),document.addEventListener("touchend",(function(A){"true"===t.getAttribute("allow-drag")&&(A.preventDefault(),t.setAttribute("allow-drag","false"))}))},updateMark:function(A,e){if(!this.marks[A])return{id:A,data:"该标签不存在"};var t=Object.assign({},this.marks[A],e);this.marks[A]=Object.assign({},t);var i=this.viewer.getScreenCoordFromSceneCoord(t.startPosition),o=t.offset,n=t.endPosition.concat(),r=[];"relativeute"===t.mode?(n=[i[0]+o[0],i[1]+o[1]],t.endPosition=[0,0]):t.offset=[0,0],Array.isArray(t.colorLine)&&(t.colorLine="rgb("+t.colorLine[0]+","+t.colorLine[1]+","+t.colorLine[2]+")");var a=document.getElementById("labelStart"+A);a.style.cssText="border:2px solid red; border-radius:5px; -moz-border-radius:5px; height: 4px;width: 4px;position: absolute;margin-left: -3px;margin-top: -3px;top:"+i[1]+"px;left:"+i[0]+"px;background-color:"+t.colorLine+";",this.showPoint&&t.showPoint||(a.style.display="none"),Array.isArray(t.color)&&(t.color="rgb("+t.color[0]+","+t.color[1]+","+t.color[2]+")");var s=document.getElementById(A);s.style.cssText="border:2px solid "+t.colorLine+";text-align:center;border-radius:5px;-moz-border-radius:5px;min-width: 66px;position: absolute;width:-webkit-fit-content;width: -moz-fit-content;background-color:"+t.color+";";var l=document.getElementById("labelTitle"+A);l.innerText=t.title,0>n[0]&&(n[0]+=5),0>n[1]&&(n[1]+=5),n[0]>this.viewer.domElement.offsetWidth-s.offsetWidth&&(n[0]=this.viewer.domElement.offsetWidth-s.offsetWidth),n[1]>this.viewer.domElement.offsetHeight-s.offsetHeight&&(n[1]=this.viewer.domElement.offsetHeight-s.offsetHeight),s.style.cssText+="left:"+n[0]+"px; top:"+n[1]+"px";var c=l.nextElementSibling||l.nextSibling;c&&s.removeChild(c),t.domElement&&s.appendChild(t.domElement),t.draggable&&this._enableDrag(s),n[0]>i[0]?n[1]>i[1]?(r[0]=n[0],r[1]=n[1]):(r[0]=n[0],r[1]=n[1]+s.offsetHeight):n[1]>i[1]?(r[0]=n[0]+s.offsetWidth,r[1]=n[1]):(r[0]=n[0]+s.offsetWidth,r[1]=n[1]+s.offsetHeight);var h=i[0]-r[0],d=i[1]-r[1],p=Math.sqrt(h*h+d*d),g=Math.atan(d/h)/Math.PI*180;h>0||(d>0?g+=180:g-=180);var u=document.getElementById("labelLine"+A);u.style.cssText="height: 2px;position: absolute;transform-origin: left center;width:"+p+"px;-ms-transform:rotateZ("+g+"deg);-moz-transform:rotateZ("+g+"deg);-webkit-transform:rotateZ("+g+"deg);-o-transform:rotateZ("+g+"deg);transform:rotateZ("+g+"deg);left:"+r[0]+"px;top:"+r[1]+"px;background-color:"+t.colorLine+";",this.showLine&&t.showLine||(u.style.display="none")},updateColor:function(A,e){Array.isArray(A)||(A=[A]);for(var t=0;A.length>t;t+=1){var i=A[t];if(!this.marks[i])return{id:i,data:"该标签不存在"};Array.isArray(e)?document.getElementById(i).style.cssText+=";background-color:rgb("+e[0]+","+e[1]+","+e[2]+")":document.getElementById(i).style.cssText+=";background-color:"+e,this.marks[i].color=e}},updateTitle:function(A,e){Array.isArray(A)||(A=[A]);for(var t=0;A.length>t;t+=1){var i=A[t];if(!this.marks[i])return{id:i,data:"该标签不存在"};document.getElementById("labelTitle"+i).innerText=e,this.marks[i].title=e}},updateDomElement:function(A,e){if(this.marks[A]){var t=document.getElementById(A),i=t.querySelector(".labelTitle"),o=i.nextElementSibling||i.nextSibling;return o&&t.removeChild(o),e&&t.appendChild(e),this.marks[A].domElement=e,!0}return{id:A,data:"该标签不存在"}},remove:function(A){A=this.idsToArray(A);for(var e=0;A.length>e;e+=1){var t=A[e];if(!this.marks[t])return{id:t,data:"该标签不存在"};this.viewer.domElement.removeChild(document.getElementById("label"+t)),delete this.marks[t],delete this.markState[t];var i=this.allOids.indexOf(t);this.allOids.splice(i,1)}},hide:function(A){A=this.idsToArray(A);for(var e=0;A.length>e;e+=1){var t=A[e];if(!this.marks[t])return{id:t,data:"该标签不存在"};this.markState[t].userHide=!0,this.markState[t].outOfBoundary||(document.getElementById("labelLine"+t).style.display="none",document.getElementById("labelStart"+t).style.display="none",document.getElementById(t).style.display="none")}},show:function(A){if(A){A=this.idsToArray(A);for(var e=0;A.length>e;e+=1){if(!this.marks[o=A[e]])return{id:o,data:"该标签不存在"};this.markState[o].userHide=!1,this.markState[o].outOfBoundary||(this.showPoint&&this.marks[o].showPoint&&(document.getElementById("labelStart"+o).style.display="block"),this.showLine&&this.marks[o].showLine&&(document.getElementById("labelLine"+o).style.display="block"),document.getElementById(o).style.display="block")}}else for(var t=this.allOids.concat(),i=0;t.length>i;i+=1){var o;this.markState[o=t[i]].userHide=!1,this.markState[o].outOfBoundary||(this.showPoint&&this.marks[o].showPoint&&(document.getElementById("labelStart"+o).style.display="block"),this.showLine&&this.marks[o].showLine&&(document.getElementById("labelLine"+o).style.display="block"),document.getElementById(o).style.display="block")}},isolation:function(A){if(this.allOids.length>0){A=this.idsToArray(A),this.show();for(var e=this.allOids.concat(),t=0;A.length>t;t+=1){var i=A[t];if(!this.marks[i])return{data:"mark不存在"};for(var o=0;e.length>o;o+=1)if(i===e[o]){e.splice(o,1);break}}for(var n=0;e.length>n;n+=1)document.getElementById("labelLine"+e[n]).style.display="none",document.getElementById("labelStart"+e[n]).style.display="none",document.getElementById(e[n]).style.display="none"}},addEventListener:function(A,e,t){document.getElementById(A).addEventListener(e,t)},removeEventListener:function(A,e,t){document.getElementById(A).removeEventListener(e,t)}});var Vd=function(A){this.defaultSettings={id:"",URL:"",side:2,scale:1,width:1,height:1,opacity:1,transparent:!1,alwaysVisible:!1,useImageSize:!0,faceToCamera:!1,color:[1,1,1],emissive:[0,0,0],position:[0,0,0],face:"z",useFaceMatrix:!0,matrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]},this.faceMatrix={x:[0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,1],y:[1,0,0,0,0,0,1,0,0,-1,0,0,0,0,0,1],z:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]};var e=A;"function"==typeof A.getViewerImpl&&(e=A.getViewerImpl()),this.init(e),this.enabled()};Vd.prototype=uh.extend(!0,{},Nd.prototype,{constructor:Vd,add:function(A,e){var t=this,i=gc({},this.defaultSettings,A),o=this.hasTheSameId(i);if(o)return o;var n=1,r=1,a=(new Aa).load(i.URL,(function(A){t.viewer.render()}),(function(){}),(function(A){t.dispatchEvent({type:Tc.LOAD_TEXTURE_ERROR,data:"加载材质出错"})}));!0===i.alwaysVisible&&(i.transparent=!0);var s=new xr({color:new LA(i.color[0],i.color[1],i.color[2]),emissive:new LA(i.emissive[0],i.emissive[1],i.emissive[2]),map:a,depthTest:!i.alwaysVisible,side:i.side,opacity:i.opacity,transparent:i.transparent});n=i.width?i.width:s.map.image.width,r=i.height?i.height:s.map.image.height;var l=new Ue(new et(1,1,1,1),s),c=new M;if(i.matrix&&(3===i.matrix.length?(c.elements[12]=i.matrix[0],c.elements[13]=i.matrix[1],c.elements[14]=i.matrix[2]):c.fromArray(i.matrix)),l.applyMatrix4(c),i.faceToCamera){var h=new y,d=new y,p=new f;l.onBeforeRender=function(){t.viewer.camera.matrixWorld.decompose(h,p,d),l.quaternion.copy(p),l.updateMatrixWorld(!0)}}return l.scale.set(i.scale*n,i.scale*r,1),l.updateMatrixWorld(!0),""!==i.id?l.key=i.id:(l.key=l.uuid,i.id=l.uuid),t.addObjectToScene(i,l),"function"==typeof e&&e(l.key),l.componentKey=i.componentKey&&Array.isArray(i.componentKey)?i.componentKey:i.componentKey?[i.componentKey]:[],l},updateMark:function(A,e){var t=this,i=this.findMark(A);if(i){i.applyMatrix4((new M).getInverse(i.matrix));var o=gc({},t.marks[A],e),n=new M;if(o.matrix&&(3===o.matrix.length?(n.elements[12]=o.matrix[0],n.elements[13]=o.matrix[1],n.elements[14]=o.matrix[2]):n.fromArray(o.matrix)),i.applyMatrix4(n),o.faceToCamera){var r=new y,a=new y,s=new f;i.onBeforeRender=function(){t.viewer.camera.matrixWorld.decompose(r,s,a),i.quaternion.copy(s),i.updateMatrixWorld(!0)}}else delete i.onBeforeRender;if(i.scale.set(o.scale*o.width,o.scale*o.height,1),i.updateMatrixWorld(!0),i.componentKey=o.componentKey&&Array.isArray(o.componentKey)?o.componentKey:o.componentKey?[o.componentKey]:[],t.marks[A]=o,e.URL)(new Aa).load(o.URL,(function(A){!0===o.alwaysVisible&&(o.transparent=!0);var e=new xr({color:new LA(o.color[0],o.color[1],o.color[2]),emissive:new LA(o.emissive[0],o.emissive[1],o.emissive[2]),map:A,depthTest:!o.alwaysVisible,side:o.side,opacity:o.opacity,transparent:o.transparent});i.material=e}));else!0===o.alwaysVisible&&(o.transparent=!0),i.material.depthTest=!o.alwaysVisible,i.material.transparent=o.transparent,i.material.opacity=o.opacity,i.material.side=o.side,i.material.emissive=new LA(o.emissive[0],o.emissive[1],o.emissive[2])}this.viewer.render()}});var Gd=function(A){this.defaultSettings={id:"",url:"",width:1,height:1,scale:1,alwaysVisible:!1,position:[0,0,0],componentId:"",useImageSize:!0};var e=A;"function"==typeof A.getViewerImpl&&(e=A.getViewerImpl()),this.init(e),this.enabled()};Gd.prototype=uh.extend(!0,{},Nd.prototype,{constructor:Gd,add:function(A,e){var t=this;!A.url&&A.URL&&(A.url=A.URL);var i=Object.assign({},this.defaultSettings,A),o=this.hasTheSameId(i);if(o)return o;var n=1,r=1;(new Aa).load(i.URL||i.url,(function(A){var o=new ro({map:A,color:16777215,depthTest:!i.alwaysVisible,transparent:i.alwaysVisible});n=i.useImageSize&&o.map&&o.map.image&&o.map.image.width?o.map.image.width:i.width,r=i.useImageSize&&o.map&&o.map.image&&o.map.image.width?o.map.image.height:i.height;var a=new vo(o);a.scale.set(i.scale*n,i.scale*r,1),i.position.isVector3?a.position.copy(i.position):a.position.set(i.position[0],i.position[1],i.position[2]),a.updateMatrixWorld(!0),""!==i.id?a.key=i.id:(a.key=a.uuid,i.id=a.uuid),t.addObjectToScene(i,a),"function"==typeof e&&e(a.key)}),(function(){}),(function(A){t.dispatchEvent({type:Tc.LOAD_TEXTURE_ERROR,data:"加载材质出错"})}))},updateMark:function(A,e,t){var i=this,o=this.findMark(A);if(o){var n=Object.assign({},i.marks[A],e),r=1,a=1;(new Aa).load(n.URL||n.url,(function(e){var s=new ro({map:e,color:16777215,depthTest:!n.alwaysVisible});r=n.useImageSize&&s.map&&s.map.image&&s.map.image.width?s.map.image.width:n.width,a=n.useImageSize&&s.map&&s.map.image&&s.map.image.width?s.map.image.height:n.height,o.material=s,o.scale.set(n.scale*r,n.scale*a,1),n.position.isVector3?o.position.copy(n.position):o.position.set(n.position[0],n.position[1],n.position[2]),o.updateMatrixWorld(),i.viewer.render(),i.marks[A]=n,"function"==typeof t&&t(A)}),(function(){}),(function(A){i.dispatchEvent({type:Tc.LOAD_TEXTURE_ERROR,data:"加载材质出错"})}))}},resize:function(A,e,t){if(null==A)return{data:"未选中mark"};if(!e||!t)return{data:"未指定尺寸"};Array.isArray(A)||(A=[A]);for(var i=null,o=0;A.length>o;o+=1)(i=this.findMark(A[o]))&&(i.scale.set(e,t,1),i.updateMatrixWorld(),this.viewer.render())}});var Pd={front:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAMAAAD04JH5AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAA8UExURf/////UgCsAAABVqgArgAAAK4DU/wAAAKpVANT//1Wq////1IArAFUAAP//qqr//wAAVdSAK/+qVSuA1JRKhuAAAAEWSURBVHja7ZnbEoIgEEAtK4iu0P//a7dRcYVJZ1jL5pxHd8Y9yAK1VBUAAAAAAAAAAMBUgtnsxz4tzvlknrhcQFcimIbrRcZ8G0vYFcO2SWoRWa2zIYUJeLDd9QKHY5tfdxJ8Jk/3XJiVJhqpS34ZjQKI3j6RYakigAACsFxsfqLl5t+ci2UPpU8CtjuJEUDgzwXc8McRAgiwDBFAgH0AAVYBAgiwD8z75/SXBJrOzdcEQqY/YM08Am3rSgh4oy0Q9au7VpgfLs+y1wbxFxDJXiON7isabmoCIZEo0Ut0agL90b6bkXJeil+cxAL9ZE7UntLFRW8V2ESPLqhWgBDwiV6wqELFm7sRHe26AgAAAAAAAABYFne2vz8kSdzJgQAAAABJRU5ErkJggg==",back:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAMAAAD04JH5AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAA/UExURf///1Wq/6pVAAAAVf//qtSAKwBVqgAAACuA1FUAAKr//wAAK4DU/wArgNT///+qVf/UgIArACsAAP//1CtVqjYJRWAAAAEgSURBVHja7ZnpCsIwEAZrNaae8Xr/ZxWRpFGEJrDppzjzr1LouFfJtusAAAAAAAAAAAAAoIb9znsfdM8/HvwLm9XMAoOfIMyQgHLM4/OegNkFBq8VqEyAuUBtAlr1SIVH8ybdLsUCU6GZfUxFFggg0ERgqueatyECCCAgF2ASIvAVAiUHA/dFApfTvwqkI1RQCziRQJracoFeJJDOSOdrI4FP/2ydhX3dekMxJTC0WhlVCziRQJxE5kVQKpDawLoISgXGVUHQCKQL6xwUC6QiMH4fFQuMGz2nmIR5EdiWYbFAdqfTCIw5MA1BuUC2s+slAvmtQSKQcmDaiBUCsS1tJ1GNwDMEvWgUxx9Ur+MYAuH3vQe3UwcAAAAAAADwE9wBUPU3ZdIk2/EAAAAASUVORK5CYII=",left:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAMAAAD04JH5AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAA8UExURf//////1IArANT//ysAAKr//wAAVQAAAP/UgABVqgArgNSAK1UAAP//qoDU/wAAK6pVAF6q/yuA1P+qVQ6MhkQAAAEuSURBVHja7ZjJEoIwEAXjCogLwf//Vy1B4sFEQzF5pdV95UDXzCNMxjkAAAAAAAAAAAD4FzaH6k4revv5Ug2sVxqB3X4UOJ5EJWhGgW0tEuhHgeqqDkHnxCFQpbBECJ6vyGQ5IwQQQEAu8PVhKPshTSVSTSW+Eg8Fw1CmLEGvLsEUQ1kJGnUJprlIXwKjsyDk/COdWsBmPM4RMMlhjoBJE7IELJqQJ2DQhDwBgyZkCthfFN9fyPpy01DkRhiGN+ubYkQg/BWtL8uxO7EPMWglAi9NsI1BVODlczEdDeJriTAZmAYxsRfxRUqQWsz0JWKY3Aw1BVKYFBiDaHoWpXdjw9PWyQQen4LoHAgGC3agmbEX8Et2YI6A87VYQLgpRQAB2a4MAAAAAAAAAODnuAFrzi75vcAeswAAAABJRU5ErkJggg==",right:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAMAAAD04JH5AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAA/UExURQAAAP//qlUAAAAAVapVAABVqtSAK////wArgNT//6r//4ArAP//1P+qVSuA1FWq/4DU///UgCsAAKpVK1VVAIkZng4AAAE4SURBVHja7dbZEoIwDIXhqEBdwe39n9VlpOiIo6nFo+Pfe8k3zTGpBfExAAAAAAAAAAAAAAAAAAAAAAAAAABSf7gys1oJKOxyGg1gNL7Un8w1gFV7AaWoBbEDaw0gdmA60wCq9gJqzb9gucgUwVcA8bad50UbAAAAfgDwcA29PYXTAN2FNEECKHLt4URAbMDbezgN0DWgDgpA3IKZEugGxGdApgR6AV0AyqAAbLaW7R2SAnCMREdCLCGAGoCn/iCAwrQAV/0BAL76+QHO+rkBrvwNAOipXz4Z1VkBffPno4Dq6pm3VwCuN0AhbcFxA0kAbdXTRzWAqvumBnAOQXkzkD4LOIWgDkLAcRA1QQkIu3XQAu6XEgDJoxQAAABfBWAS/i9ggAMAAAAAAAAAAAAAAAAAAAAAAHAAYMKWUHJ5EqMAAAAASUVORK5CYII=",top:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACABAMAAAAxEHz4AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAAYUExURf///wAAANSAKwAAVar///+qVSuA1ABVqmCk4p4AAABFSURBVGje7dOxDQAQFEBBkRjg72IgI9i/olSpJCLuBnjdSwkAgLfkmKqAgIDAqcCiC/wb8IKAgIDAzUCJjSbwSwAA4H0D+R0wJ+LbGcwAAAAASUVORK5CYII=",bottom:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAMAAAD04JH5AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAA5UExURf///6pVAAAAVar/////1FWq//+qVQAAAABVqoArADwAAP/UgNT/////qgArgIDU/wAAKyuA1NSAKz7z6MUAAADNSURBVHja7dZZEoIwEEVRWg2JOLP/xTqmtBF/LOs1hfdsgGsnJmkaAAAAAAAAAMDkpfyllgACCJhLwGelfmq9ijmiCCDgnwNOFhqwXORsgQH3o9HCAupnLSbgOv5aEBEwfjPpAkoODXgZ/+26VS9BGv5qcYAff68+B/z4u436JPTj73bqu8CP39SX0XD3y2/D8r782oDtfvzM0e2BZ4EFPUjqLmjDXkSHo19+/ZPsUvD490e9CZPxKiaAAAIIIIAAAgiYXgAAAAAAAPiJM0UCIODiZq/rAAAAAElFTkSuQmCC",add:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAcQAAAG/CAMAAADxZFcvAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAABRUExURf////3Xw/vKtf3i1oqPlGms5f/6+EdQWf/IlOPk5faQa0dTlMbIy4pQWcb8/2lweP//y//27P/o5PixlZmPo+Px/2msy4pweOPIlIqs5fSEXoY3FXkAAAXBSURBVHja7dxdcxM3GIDRaNUK2LZQSYW2+f8/tLuZaYbgOLEdb7yvOM+V4YIJOtGXveO7O0nhKr33SZu2jPBmfq2nXFpKKWvTlhG+Kzn1dHXAqbbUarEWvdOK11rOdboe5DIFF0B+N5BMy4SsV/iXas+pGdBbtexfPb/1l2Fq2Ry87XzMecpvmoXVJNzDdMwXz8ZlIUW4m1X1sr2xTw4zezrkXDAZ62wv3Fc1nzsZS7eS7m9NPWsylp6qMdvhZJzOmFrdUrrTnfHkyVVn03DH55vKcICNsTL8GRQZBlBsrhbhe+0DiZKNUXTFMhmhCL1066/d+ERXLLM7fpTDTbUhDrAtZovpqAtqubeYBur5Zy5qMjKRevbBm9m4BFtQDw83zakm/tnGRIw/FU3EgLtiNRHDV354AMPRdID1tLsjRrwrpids3qwJ2dwca8Y62piIUY82EMc62jibxkecPOEWtO+Op/dGI+olo7glDnA+LYevFHZT9KDiAIie+h5gOVX846lzzQCIHnMLfMf4/4UHvwcIIkRBFERBhCiIgiiIEAVREAURoiAKoiBCFERBFESIgiiIgghREAVRECEKoiAKIkRBFERBhCiIgiiIEAVREAVRECEKoiBqLMS29vvpfV6DCBHizRE/QTQTIUKEeNjHtQ+n9+saRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQ4yHWpb/Wftmmv9fOQPxtbaOf5eH/+XUJIkSIryJ+2Q7xG0QzESLEzfpz6Y+1D+P38AvyeQkiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECHEoxLW29mmb/lk7Y6C/rW30s3x9568EgwgRIkSIECHeAHHLdvVF7uXu3YcU4gBBhAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChLgLxC+n9+8aRIgQIUKEOCDizx5EiIIoiIIIURAFURAhCqIgCiJEQRREQYQoiIIoiBAFURAFEaIgCqIgQhREQRREiIIoiIIIURAFURAhCqIgCqIgQhREQRREiIIoiIIIURAFURAhCqIgCiJEQRREHas92kEMW2I3EmI2GFGbHhGTwYhar4+vLKxhD6XV8RSibl79Tq4ZjujnmuW14Yh+rlnWU8MxAKJNMWTtiZubYviJaD0dAvHpnxSj/MMu+NGQRJ+ITy8cCnLTP1g/HW3CT8TlbwxKsMohYjIVgzU9cxj1QX/0HfFB1sDE3hGPTU/t9o545D7hbBPoVHNk9yuTBTXOqeboR8DJh8NBSi+8T+qJqRi1l64S2bYY+GT6uNTaFiNsiK/c6RPF/Ru+akRx94YnnFwoxjekOIIhxREM16uk0dplpZ/xWdPkwak9lttZLK36jHiH18Oz1S2pe1tKz39TtORuMu5qGtZL3tiuebYz7qTWL356pjYHnD1U+5seCy559tUatz6TzlN540eEJc2eDr/hcWaac7nC+Jfld8HzjDcSnK73dV/lLt33ZH98z31w6nPa4gvbFsk+JW3c1Pu9W7oUrv8AKiG7XScCG+oAAAAASUVORK5CYII=",plus:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAcQAAAG/BAMAAAA0lLouAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAwUExURf///0dQWYqPlP/6+P3Xw/3i1vvKtePk5faQa0ePy/7x6vm2nfelhopQWYqs5dGJeGZxbd4AAAQxSURBVHja7dhBS9t3GAfwPyQGSbzsuOtewMhhytCLoJVhLwF1K7qDYFdGt8NuuxaEHtZXsNsf1G1UD4O2MNoeCp07dLvsjew1TBPTqEmMgwn9f/t5DklIcvDj8/ye5/ekKERuLLy4V7F4sf1ffM2na+vLGxWL5c7s7cXrAv+YX92rYuXNb2x+ey3k0a3VdlWPV219/fnkbx2ul1XuIc3lZ5O+MnfQrnafrG1MMB4+rv4wuNp4tJkw8PavOI+tr9oJxNpWZ+xRPY4QnkC2xrXMhbIIieaY47iwmnP//Gl0qT5r5xBrI9P1S1kExfyIrlr7IWtVOhzO2KdlFrE5lMbmbtrGO5TGhTKNWL8sms374eLWpWaznUdsXZyNR0VgHF9I4m4i8cJiWOskEuvnVYdFEV6pmXV6oVKbi5nExqBSp4vQGFziDlKJg+n/IJXY6l/ipjqpxEaZfhSL2trZi/1Y4tt+8zqXuN/uPb/KJU73DmOzk0s86zczucL+fpFMLN70do5kYq+l3k8mLmVf305jL30snrTU7mB8kkyc6U6N7WRib9co8ws1OuqnxFY7njgdTWwW8cQCERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERHxfSf+/P2NxnfvAPGLfOLfH9xofPgjIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIuI7RPzoZuPjfxAR/w9iNQIRERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERHxfSc2u7poYj2/RnvETjKx1SUu5hNfRzfT8vRxN5k4k0/c6z5OJRN3uo+NZOKb3onMJ84EXwCmzmzBg7FV9p4fpM+Mfr1Gxlo/m+ndpn+Pi9wWn/dfxfabfrcpilepxIW3xOVU4v347X9wFItiO3kfvpzQqPj8HHEmUlhbOp/RyEodjIzTWE0k3i7HHcyYfrp0ca/6Nb1Oi+JeHvHupcqsxzWcxpBoJY34zVB7SUtj48nweyvpSUxL46gknkzKpLvb05GDvhH0M9VmOfr9x4sxZTpWspVSpn+OvY/O/h5yr9kb/9lBxHH8cumqTxOMRztXfz57XPkc7kxaDD95WOnVsfb12uS/v31nqbrCuYe1a/0j6o8q+jvH3G+L1y/Bz/66u1yxWHn5qBCx8S/INvmwxH9NtQAAAABJRU5ErkJggg==",E:"data:image/png;base64,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",Q:"data:image/png;base64,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",downArrow:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAh9JREFUSA21lb0uRUEUhffxEzo3cXkJDyAhUdCT0CkkCk+l0yv0KBQSUXsJf6EgRHHsb86ssc09VyjsZO6eWbPW2rPnnJzbtG07aV20nhofyhkuKeJxLoIw5YRP5d0Iqghbf5nDJb5pJhyQOVlDZAnIRB/+o14d1GJEimgAphOSNRdOJoqeAjVJhokZfuAp+jTsCS/ceEV9YhUja8ATPmLoe8ISTx2wiBuax5wE/IRQISBx47xRBxAVEPtCZjWXdY0VvR6yTJutCzvx3cHijO0cLtt9YX6dUFwVtIMrW7h9t2PnPp2s2WbWJB4dKHSSQdva6u2bne1f24I2PcdTFvNdzJ2LxjkDHxgzEj8WSBtzU7btkxvfXXp8tVNO52QFnBJ7lzb/grlz0dC1byZjz3DbJn8qABNARvj8YecSzk3b+tGKPSDwQYxwFmdtw6/0jj0f4lnsQEUMMwSciiIU806GWcydD+sDBHOnpSIUauiAIiwUpbp3MmI0M2lNuvN8LaG7ET1ALCDjWCydNhoioiu6G3Mt3/S9z6DzwKqL9BrmhwmCeT45rzGGHK7ODnUd/Or/wF/H4Uv3rhtvWn7oyST/1EUSXHcgQbyu387j1RQNDzhWZq61ikVh31x8abVOen0qWEQxJIUEwuAJ0xxur15f0z6xCihHg9p4rD5eUTSSQCcla8ATrkLjirfqAJHIcS5MBhjHUCEwceP8//8PPgE7CQFG2pHOlwAAAABJRU5ErkJggg==",upArrow:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAhVJREFUSA2VlTFuFEEQRXswFmQODL4EB0AixEdwTsapyMjhBnYGEgfwJYwdODPC0lCvd15tbc/IQEm9Xf37/1/VPbO70zzPR20Xc0xTDOcFzqniNZcg5tzx58tuBS3C1v/kcIkDzbMANGd2SFbATGzhT+o9wShGZFQDMDtkNhdnJlJPgZGkYWeWD3jGloY98eTWK9oSW4zZAU98ZRh7Yp3nCVjUDfM6dwEfJSwEJLfmkyeAaEDcCs1GLusRS70PWdOxiyR+/NFe3/xqXwDOXrSLT2/bz0irjq2VfoovGqdYbQSWHXfzh3YZwJvF5frsZTuPIreVx16ERbu+Ftht741Zz9U8lNcdjELkJ8ft/ed3vYimy/a+yNh9do35h+/t1c3SuYaYknOa+9/tigbg4hxxoAeggOEm6wkhBhhhyJVEt3d0TG4RGqCR0Bzo8WD4FvVFAASdn9bOx/vmAdci5SRdj4djPEG/87Hz5Y1BbEw84FpkOclpEGw2T0CSx+NV9Fq478W8cuAS8+okj+3rbmt9gjQI9f00tW90x52HgL0ayQ1wf5LQoA2MBuD0wWvKH45gpD1YE5r9Sw7XSH19yICOSv5bjsZGVnp/KqhcjSAa1QBMM2ZzcWYi9f6aCihgHqNi8uBs5cmtV6RhFdTuyW1EXG4aDgVnT4C55JqLaWABOISFyOXWPL/JVagZxBqajVzWI5a6P0EACOseq1UCAAAAAElFTkSuQmCC",mouseLeft:"data:image/jpeg;base64,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",sxzy:"data:image/png;base64,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",wasd:"data:image/png;base64,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",fire:"data:image/png;base64,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",in:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACABAMAAAAxEHz4AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAtUExURUxpcRv7KSD/MBr6KRv6Kxn6KBn6KRr6KRr6KBj3KBr7KRj3KBr6KRr6Khr6KbH1JwQAAAAOdFJOUwCPEO8wd7/PWCCvQN+ffgtVrQAABJxJREFUaN6lWd1LFFEUHwctvwIrCnyRkRIhLCJSKmOwTAr6QNPIyGSp7MOHfdiKPhAxTBBEWYiCoAeJfFQMEgtKAh96kwi0N2Fbd01d79/Q7r2zO3dm7j33zMx50rlzfvs75545555zNU0q+oWOlfsDP/unl79qAUSfe0QKkpma9as+wqlTmWrxo183SDySqcbrfzKJSB5g6V8nEknEMfoVewkJg6AD+oRsKhH0YQJKQgUwz72cfLGve+zL6LUVHuEErF9rv9nUFbejImo/fw7plxb2L91lOFbmbIh2wAGr+ZeeeOKurKeALQd4mzf+o2j1ex7huDQCliz9aoWDZEZ0Wvo3ZL9QYgGk4B94KLfxsPVKROjBGbb4DNqmS4AfD7G1RgMMlF72VkywxLYwOQRHWjFz9Lp3pUjpAAfRiIRbylB+rr1iL5SgDKDRwihUuR4PYz41Jlfoq/9cvjGxBPLvEufXUg8HuVNe05ePOZ7V4AlkKXjdWIr3QE4WPJ8Us2AIC8A2Ys1tQUJDy4QrGpkFH/AA5S7G1IKMgQfQl5z7QC1o9lN9aTBtF/KlqUi2stzUwv/nx4Ks0Po/af1zQBDbqFDY4D/QKn8A5ZwT9JwLknF/ADp1Qtx2gShT6+2qvPKL/tmQ+/OkKHsBRUw7YjthQrKJ2TwfkQMU2bwPnsuKIUyfaYUTMqCbZmQliCsDcVX+TiucAG3+jLwKUqnMLR9VJl85hVJ3UhFnPjkFHSj0OAo5Gze1EBRy8ZPUQlCg2zAbgkKlOg3BFHbxOSUIhVJVIKgolOXW/mrBKeiqSFJSMBGpFKQQVYWiikKNKhRVFHopQMduWKJyChN0wSQoiUgA1rEAaQlABgsgorBAP0csQFq8Q3iAdSMkQExsAtoHAgIUAL0LMek24gJJRMAKJNzJOiYPZYW0ygnQ6rgdggAtDIkQBLQldUIBCej8QS0IgWI1AEiAHc5+BCfAjoqR4ARYaasKToDl26HgBGggJo3gBGgcpUMQoEfsVAgCJaomIQoT0HZ421fN2w3LCbBNgHZRHwQJsPM+PSK9y4mYAkCA+nAdPu4PQgS4NkXacNQDBFintqFoeX6rWp5JOzH4brpM7phZY/dPaKEdzyZ/Zl3zB0Abzy3+yJnxBxDlj6k6Cdh8zzr6J182tDrafxYJfmygYc59SRVEmR9Fk7t2V4eWwgPQKEpzcdpAlN2Hd/y8BQ6GEPWiytNlJluQozDTbUHeBuQw7r1gGMdswFGwxqpDovlaM94DCfHQGjMSNYUjUWsqjIgFNkDfNoRdoKoPtKfjMVkhybTgBtOCbLmTIIzQO+X3JLp1PfYYApgnQMW0huNkj1y/1jpZ34aG3kDBq7P0EwY49JYi5PXl2e98HkF4yXLGVN9VzeQR+jwk7TvAdFyVbGnN6HKutN0pXKBdhbbpst2jnLpp/3rbH/v5XTjSvvGXpNPdY58vjo7sX+QeNhqYfAm0j8oibN+3CfURKad4NZx+Vnpk+k3IrKuNi/X78IeQN4J2NNnlp/qWjbsgkn1n/R0gNP0ld32e8a1OZfTWvYHF00/7l18BwfMfTNVTTzWqIHcAAAAASUVORK5CYII=",info:"data:image/png;base64,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",wall:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAMAAAD04JH5AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAABOUExURUxpcf2oAP+oAP2oAP6mAP6oAP+pAP+nAP+tAP2oAP2oAP+vAP+oAP2nAP+nAP2nAP6oAP+pAP+nAP6oAP+qAP+oAP+yAP+uAP+rAP+wAGKXuTAAAAAVdFJOUwCPScm8hTVXCd2aDx/4e5RqFWPuQojXR7cAAAHpSURBVHja7ZrZboMwEEUBsxoaJ0CM/f8/2qosyZO5do2sVPc8R5MTFuvOTLKMENI++kuABebuEsoWFSj0cgFa4AL2eQELBT5RwMQhXOArDqECi6ijcDehAmWcg7VYb0LIFWijCDQUoAAFKEABClAgVMBGygPzKmBF5n0FitlF0WAovdJhAWpAU7HpVI5RrXQTwleOpmLvOyQ0kKAXrdArsJS91/e3AiprcwrgAp7HhIcANB/Qh0AL0Qt3WfMSACckQq6oCkO4y00vgfaB0Oe/v8hqNWCclJP2EACp9Pos3OKc2CpYoIojIClAAQpQgAIUoIC3wG3N+TZSHsj1ITDcEcZyG4aXI8ZJvXI5BBptAfTeOqI94uQua95juUHys3drxs6IrZm3gDl5C9CG5GjNoJdLHgJmKp1IsCWT68dFVyKIOz4lw5rS9udYCVtexxrTcWtGAQpQgAIUoEBygSL11qyw27/pMk8BM0nlorphyH0e7i63IZu3UKqdiBlaw831Fk6FhpB4LGdr9p8FUrfn2NZs/7ffXGBM7qd/eQkMFfSK7yOafXv2N5QwiYdUlU48psspQAEKUIACFKBAaoHwPJA6kDyxKfgpnQkVMDYKb1szT4G4UOCzBMwF6OQCEhaox+YCxjojJDXf4uSKYGN3ygkAAAAASUVORK5CYII=",window:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACABAMAAAAxEHz4AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAVUExURUxpcSyV3S2U3SyV3C2U3C2U3S+Z4+9tYbwAAAAGdFJOUwDEcEWk8vaFTOAAAAHnSURBVGje7ZnLVsIwEIaD4QG42K4LR7oOVFyjgmsvNPtKM+//COZCrBsmYwMePeZfkCwyH38n0/Z0wlhSkhav4sSWECXFsmiA8nPpR0mI86NxsN9aSbi24z2ocUgZNC4oN4CRy+YTCDteQRPM/ADe3aT8AsgT4KyAYP0ucYCqg8IBhErEAQRJPAfzkBapkP4MgM/N76roDVjDRlNk2xfAJTwbiuoLWIN2oCl9HejQRhjKqCdAh04tpecuuNATBigAG3rKAAWQYwZoAMQABbDADJCSWCAGyKV8ygC5lJuouxExQC7lqOcBZoBeyhEA1AC5lOMAIxRwCF5CE/lU5oLFObj4i+WQAPCWHCQH53CQAAmQAAmQAAnwg4BtSDscQOkjYQClCISLOgAVm4NUSAnwSwCEpmzkzaRwgIy9GyH2eRDOweycu7DrAMUR0H7r49vvCPc9jwEBMPRrntTn+qFPzJ2nYwd0oMRxNIHWegmy6XqxIUlnd6DzpQNe/eZNXfumCANK03BlPDcfXyXARKxypetHPVQ3krAJ9oL3gu9M41fPJdS6+Fr931B3NYIr12v14tYdslltuCthJRjNgg2yG28DdSLc2eUjI2nmk2b671ldT8zkNoMXYrxePB53a6ujbV4J9v/0Aa21qAtzThtwAAAAAElFTkSuQmCC",kitchen:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACABAMAAAAxEHz4AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAqUExURUxpcfTqKvXrKu/vMPXqKfTqKfTqKvTqK/LqKvPnKO/nKPTrK/TqKvTqKgvPVicAAAANdFJOUwCfrxB3x+8wWUAgj9+fNmOEAAADXElEQVRo3u1YzWsTQRRP3ZTdND1YqN4K2oN6ERbBaNFCSls/GxA/EDQLRStWaKBQ9KTgoYKggRx6VMhFEEQQ/ECQgBcPCgumbbb24/0vzm6aNDM7M29eQ724v1NmZt8v8/He772ZVCpBggT/AKcWvw1eqOza3JosQYjb1d3ZjxyBbTTGd2N/pgQ7OEq3z3jQiQ/k9deahvdu+M0fT4kEL0OjrYsL7OdiNJfGPMk+Hf37QrNhT4WtdRJBgVnMuO3mM+oisuKcQ8JVwg4OAQTjYg/kjWyXPhfnfrCvb/L9DvOKreLc1UHEsU8fbDmf6L6PWh5xTGf/ru19t8Qhuz1Urxp471b8o/YUYFN5+Dve/ys+ujMF1XlEO33n/IL19sVhVza/4U/Px4oRwxUpwRs2ct3FjmnJk21xNEU/dnZS2CHDfckA26SfRm7msH8K4qFlefKJKRz9e6z3BMBHQqg1Yp01QrBk2BT2x/sIqvUaYE3o6oWGS9IbcQ1leEARnOMxffHMor2FUfEcHFimauYfrqNHaKO640Od6+iHuzTZr0HAtZ/AIRoB24QK71vEzNMv+I0XuDSCrHAMfoOY+hyA6c62WucU6ANY4ZqrRAILYKNTZYhuwFDism2GTuBzJg55CQKBTSfgCwaLGEvRKWx0RWDzx8hWRPTEtJCeakAsaPcJslqOqSyCnKBpo9yWGKAMUOWjs04j8ARZdgRCg2DkPccq0TahF0QNrNEq0UKs6MvJMrY6OZZAlDAHKLqck9RJHpirGqsl4JrY+V7Sp8JjVqJUZDnfUNozPsgEqACGNY71RV54h5WPibBZr1TFangn2ESDMjPJPgvyqsoHveA1L3Oz8sGHBtezIe0FLFyEPk33hV8EyousFTKsYAVecEnzwRROoL9Is5D4jRCspBIClGAaIdjYWwJ7YiKP5FRiBkoI9oRg7X8gGLk8IIO7rYkoAfeK14GqIYHwikcnOAfdEWRKXRKcDF/xhmVoEayj1dOMq81MegJW7mmLLZTAQV79UII0oroWRtCjeqUyJch2S5BGZB0NJgcptBxMkSzQH2MOWWJUA83qIw15bjrLXHl5QIED4TOci79yaYHWogWEAH0ws32t/Qx+Qe3R2RuV487YsApf51MJEiTYI/wFfnAD3ltxHQAAAAAASUVORK5CYII=",livingRoom:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIEAAACABAMAAADe0hfGAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAnUExURUxpcRQgeBMiehQiexIgeRAggBIieRIiehMjehMiehMjeRMheRMieiZedJ0AAAAMdFJOUwBA748mEHTYYKlQvyvHdt4AAAL1SURBVGje7ZjNaxNBGMY32k3SrYcEQaH0ICJGZQ+lUiu0Bz+IQchBUCJqDoIUkeZQelACe8jNiwdtsRLMwYs3D6JUQbxkYxNj5o9yPnZ2Zmc3OzMbEIrzXHaf3Znfzryzw7wzlmVkZPTvdO+O4K/p1b+1A0C7w3zjS9RLddIFSMvU3xS8VHdJBTAKWp4PvP8hpdKp7y+g3uB7uwcCDZP9S1S2vZn4VdzO0yAU9jXm3yJ/O2hRJC70K6MSo9FSom9Q/4cD5FmZvXf4Urmy5QYeXyv7zzzsu2sh0OcGuAAETeDLouBznljqMSM0hVc+fveAeRy1eZHwmhGWUAi63TDml8jjDeovCP5i9z3qyxlG+ERilOfajJRzo37OY//JfIwwYBGdlMII4yqTzSTviQQyNM66V9nnQuxsxf23Ku1SlPBLd/IagiEYgiEcKQKo7JXUqz9c33FjBJ38IMgnGIGuZ75ilhLmFzRTslfoWjRQAsx5wtrGrY9gW4Vwg5XvCMshXI5UmsDlE32WPPjtNXFBn6ZHuPzXXZZCoEaNPsIVDXVP4bdoobbCla8Rdhuu+f4qujkOn4ylANulg1YLMiH0ZMjo0tQVdfocufVI4NCTA/JkQSUQBVaoTr5YYCmVHc0qklVnXS0S2Amu8z2FULZYGmiTXKoehgG/7SsQwq94eDCWuNQSzrDfMkKP6ymZ4a84ZpNrTwrhM9eeQ33Cz/+DIJsYticjyCYGmgQSwqCcpsVeOuEYUNLydMKCGqEzneAoAdjuKE5AQyXX0Eoh3NcKQxLBeirvww8rlWDlyhJVLQlBS4ZgCIZgCIZwhAj9rIQNShhnBKB8hhDAajYAOo49DHaK/tksCnaMTTCTthNOWPUEdwe5mQB409qahYD3rEU3OyA4f3WewCRxfFlT8F8YXK3Ocv7QE08PhjMTfE2AEzttBufLOlpciRKamf9HzYx8emoaP9NXUyk60fUVOXOpZSEcRAZnVx/wXBjf62VNVS0jowT9BdaXVla6cjkQAAAAAElFTkSuQmCC",skyBoxLeft:"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAFA3PEY8MlBGQUZaVVBfeMiCeG5uePWvuZHI////////////////////////////////////////////////////2wBDAVVaWnhpeOuCguv/////////////////////////////////////////////////////////////////////////wAARCAgACAADAREAAhEBAxEB/8QAGAABAQEBAQAAAAAAAAAAAAAAAAECBAP/xAAVEAEBAAAAAAAAAAAAAAAAAAAAAf/EABcBAQEBAQAAAAAAAAAAAAAAAAABAgP/xAAUEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwDDbIAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAACgAAAAAIAAAAKAAAAAAAAACgAAAAAAAAAAAACiACAgICAgIACAAAAAAAAAICgAAAAAAAAAAAgAoAAAAAAAICgAooCgoAAIACAAAAIAAoAAACgAAAAAAAAAIAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAy6sAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAKAAAAAAgAAAAoAAAAAAAAAKAAAAAAAAAAAAAKIAICAgICAgAIAAAAAAAAAgKAAAAAAAAAACACgAAAKCAAAAAACigKCgAAgAIAAAAgCgAAAKAAAAAAAAAAgAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAgAAAAAAAAMurAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAACgAAAAAIAAAAKAAAAAAAAACgAAAAAAAAAAACgCACAgICAgIACAAAAAAAAAICgAAAAAAAAAAgAoAAAAAAAAAAAKKAoKACAAAgAACAAKAAAAoAAAAAAAAACAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAACAAAAAAAAy6sAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAKAAAAAAgAAAAoAAAAAAAAAKAAAAAAAAAAAAKAIAICAgICAgAIAAAAAAAAgAKAAAAAAAAAACACgAAAAAAAAAAAoqgAoAIAACAAAIAAoAAACgAAAAAAAAIAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAIAAAAAAADLqwAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAoAAAAACAAAACgAAAAAAAAAoAAAAAAAAAAAAoAgAgICAgICAAgAAAAAAACAAoAAAAAAAAAAIAKAAAAAAAAAAACiqACgAgAIAAAAgACgAAKAAAAAAAAAAgAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAIAAAACgAgAAAAAAAAKAAAAAAAAAAAAACAAAAAoAMOrAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACgAAAAAIAAAAKAAAAAAAAACgAAAAAAAAAAACgCCAAgICAgIAACAAAAAAAIACgAAAAAAAAAAgAoAAAAAAAAAAKAKoAKCAAAgAACAAKAAAAoAAAAAAAACAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAADDqwAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAoAAAAACAAAACgAAAAAAAAAoAAAAAAAAAAAAoAggAICAgICAAAgAAAAAAACAoAAAAAAAAAAIKAAAAAAAAAAACigKAAAAACAAAIAAoAACgAAAAAAAAAIAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAMOrAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACgAAAAAIAAAAKAAAAAAAAACgAAAAAAAAAAACgCCAAgICAgIAACAAAAAAAAAAAAAAAAAAAAIKAAAAAAAAAAACiqAAAAACAAAAIAAoAACgAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAMOrAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACgAAAAAIAAAAKAAAAAAAAACgAAAAAAAAAAACgCCAAgICAgIAAAACAAAAAAAAAAAAAAAAAAIKAAAAAAAAAACgCqAAAAACAAAAIAAoACgAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAMurACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAoAAAAACAAAACgAAAAAAAAAoAAAAAAAAAAAAoAggAICAgICAAAAAAAgAAAAAAAAAAAAAACACgAAAAAAAAAAoAqgAAAAAgAACAAAKAAoAAAAAAACAoIAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAMurAACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAoAAAAAACAAACgAAAAAAAAAoAAAAAAAAAAKCCgCCAAgICAgIAAAAAAACAAAAAAAAAAAAAAIAKAAAAAAAAACgAooCgAgAIAAAAgACgAAKAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAy6sAAAIAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACgAAAAAAAIAAKAAAAAAAAACgAAAAAAAAAoAIKAIIACAgICAgAAAAAAAIAAAAAAAAAAAAAgAAoAAAAAAAAAKACiqAACAAgAAACAAKAAoAAAAAAAACAAAAAAAAAAAAAAAAAAAACAAAoAAKAAAAAAAAACAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAICOrAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAKAAAAAAAAgAAoAAAAAAAAAKAAAAAAAACgAAgoAggAICAgIACAAAAAAAAgAAAAAAAAAAAACACgAAAAAAAAoAKAKoAAIACAAAAIAAoACgAAAAAAAAIAAAAAAAAAAAAAAAAAAAAIAAACgAoAAAAAAAAAAIAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAy6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAICgAAAAAAAAAAAAACgAAAAAAAIAKAAAAAAAAACgAAAAAAAAoAAIKAIIACAgICAAgAAAAAAAIAAAAAAAAAAAAgAoAAAAAAAAAKACgooAACAAgAACAAAKAoAAAAAAAACAAAAAAAAAAAAAAAAAAAACAAAAoAAKAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAMurAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAACAAoAAAAAAAAAAAAAAoAAAAAAACACgAAAAAAAAAoAAAAAAAAKAAAKgCCAAgICAgAIAAAAAAACAAAAAAAAAAAAIAKAAAAAAAACgAoKAKAAAgAIAAAgACgAKAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAgAAKAACgAAAAAAAAAAAAgAAAAAKAAACAoAAAAAAAAAAAAAAAAAAAAAAAMurAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAACAoIACgAAAAAAAAAAAACgAAAAAAAIAKAAAAAAAAACgAAAAAAAAoAAAqAIIACAgICAAgAAAAAAIAAAAAAAAAAAAAgAoAAAAAAAAKACgoqgAgAIACAAAIAAoACgAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAMOrAACgAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAgAAKAAAAAAAAAAAAAKAAAAAAAAAgoAAAAAAAAAKAAAAAAAACgAACoAgAgICAgIACAAAAAAAgAAAAAAAAAAAACACgAAAAAAAAoKCgCqAACAgAIAAAgACgKAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAw6sAAAKAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAACAAAoAAAAAAAAAAAAAoAAAAAAAACCgAAAAAAAAAoAAAAAAAAKAAAKgCACAgICAgAIAAAAAACAAAAAAAAAoAIAAgoAAAAAAAAKACgoKKAAAgIACAAIAAoACgAAAAAAAIAAAAAAAAAAAAAAKACAAAAAAAAAAAoAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAw6sAAAAAKAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAACAAAAAoAAAAAAAAAAAoAAAAAAAAACCgAAAAAAAAAoAAAAAAAAKAAAKgACCAgICAAgAIAAAAAACAAAAAAAAoAAIAgoAAAAAAAAKCgAoqgAAAgIACAAIAAoACgAAAAAAAIAAAAAAAAAAAAAKAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAw6sAAAAAAKAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAACAAAAoAAAAAAAAAAAAoAAAAAAAAAAKgAAAAAAAAAoAAAAAAAAKAAAKgACCAgICAAgAIAAAAAACAAAAAAAAoAAAIgoAAAAAAAAKCgoAqgAAgAIACAAIAAoCgAAAAAAAAIAAAAAAAAAAAAKAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAIAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAw6sAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAACAAAAoAAAAAAAAAAAoAAAAAAAAAAKgAAAAAAAAAoAAAAAAAAKAAAKAgCCAAgICAgAIAAAAAAACAAAAAAoAAAACAAAAAAAACgAoKCigAAICAAgACAAAKAoAAAAAAKAggAAAAAAAAAAAAKAACAAAAAAAAAAAAoAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAw6sAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAACAAAAAoAAAAAAAAAAoAAAAAAAAAAKgAAAAAAAAoAAAAAAAAAKAAAAKgCCAAgICAgAAIAAAAAACAAAAAAoAAAACAAAAAAAACgAoKCigAIACAAgACAAAKoAAAAAAKAgAAgAAAAAAAAAAKAAACAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAw6sAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAACAAAAAoAAAAAAAAAAoAAAAAAAAAAKgAAAAAAAAoAAAAAAAAAKAAAAKgCACAgICAAgAIAAAAAACAAAAAAoAAACAAAAAAAAACgoAKKoAAIACAAgACAACigAAAAAKAAgAAAgAAAAAAAAAKAAACAAAAgAKAAAAAAAAACgAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDqwAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAIAAAAACgAAAAAAAAACgAAAAAAAAAAqAAAAAAAACgAAAAAAAAAoAAAAqAIAICAgAICAAgAAAAAAIAAAAACgAAAIAAAAAAAAAKCgoAqgAgAIACAAIAAAKKAAAAAAoCAAAACAAAAAAAAAoAAAAIAACAAAoAAAAAAAAAKAAAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMOrAAAAAACgAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAgAAAAAKAAAAAAAAAAKAAAAAAAAAACoAAAAAAAAKAAAAAAAAACgAAACgIgAgAICAgIAACAAAAAAAgAAAAKAAAAgAAAAAAAAoAKCgCqACAAgAIAAgAAAooAAAACgAIAAAAAIAAAAAAACgAAAAgAAIAACgAAAAAAAAAAoAAAAIAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAw6sAAAAAKAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoACAAAAAAoAAAAAAAAAAoAAAAAAAAAKgAAAAAAAAAoAAAAAAAAAKAAAAKAiACAAgICAgAAIAAAAAACAAAAAoACAAAAAAAAAACgAoKKoAAIACAAgACAACgCgAAAAKgAAAAAAAAgAAAAAAKAAAACAAAAgAKAAAAAAAAAACgAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDqwAAAAAoAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAIAAAACgAAAAAAAAACgAAAAAAAAAqAAAAAAAAACgAAAAAAAAoAAAAAoCIAAICAgICAAAAgAAAAAIAAAACgAIAAAAAAAAAAKCgoAqgAAgAIACAIAAAKKAAAAAAqAAAAAAAACAAAAAAoAAAAAIAAAAAAAAAAAAAAACgAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAy6sAAAAAKAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAACAAAAAoAAAAAAAAAAoAAAAAAAAAKgAAAAAAAAAoAAAAAAAAKAAAAAKAiAACAgICAAgAAIAAAAACAICgACoCggAAAAAAAAAoAKCgCqAACAAgAIAgAAoAoAAAACgIAAAAAAAAAIAAAACgAAAAAgAAAAAAAAAAAAAAKAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAADLqwAAAAAoAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAIAAACgAAAAAAAACgAAAAAAAAAAIKAAAAAAAACgAAAAAAAAoAAAAAoCIAAICAgIACAAAAgAAAAIAgKAAKgKACAAAAAAAACgAoKCigAIACAAAAiAACgCgAAAAKAgAAAAAAAAAgAAAAKAAAAAACAAAAAAAAAAAAAoAAAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAMurAAAAACgAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAgAAAKAAAAAAAAAKAAAAAAAAAACoAAAAAAAAKAAAAAAAAACgAAAACgCCAAgIACAgIAAACAAAAAgCAoICioCgAgAAAAAAAAoKACiqAACAAgAAAIgAoAAoAAAACgIAAAAAAAAAIAAAACgAAAAAAgAAAAAAAAAAAKAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAADLqwAAAAAAoAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAIAAAACgAAAAAAACgAAAAAAAAAAqAAAAAAAACgAAAAAAAAAoAAAAAoAggAIACAgIACAAAgAAAAAIAgAKKgAAAAAAAAAAoAKCgCqAACAAgAACAAAAAKAAAAAoCAAAAAAAAAACAAAAoAAAAAAAIAAAAAAAAACgAAAAAAAAgKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAy6sAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAACAAAAoAAAAAAAAoAAAAAAAAAAKgAAAAAAAAoAAAAAAAAAKAAAAAKAIIAACAgICAAgAAAIAAAACAIACioAAAAAAAAAAKACgoAqgAAgAIAAAgAAAACgAAAKAgAAAAAAAAAAAgAAKAAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAADLqwAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAIAAAACgAAAAAACgAAAAAAAAAAqAAAAAAAACgAAAAAAAAAoAAAAoAACIAAICAgIACAAAAgAACACKCAAoqAAAAAAAAAACgAoKCigAAIACAAAIAAAAoAAAACgIAAAAAAAAAAAAIACgAAAAAAAAAgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAy6sAAAAAAAKAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAACAAAAAAoAAAAAAoAAAAAAAAAAKAgAAAAAAAoAAAAAAAAAKAAAAKgACAAACAgIACAgAAIAAAAgAiggAAoAAAAAAAAAAKACgoqgAAAgAIAAAgAAACgAAAKAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAy6sAAAAAAAKAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAACAAAAAoAAAAAAAoAAAAAAAAAAKAgAAAAAAAoAAAAAAAAAAAAAoAAAgAAgAICAAgIAACAAAAIAIoIAAAKAAAAAAAACgAoKAKoAAAIACAAIAAAAAoAACgAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAADLqwAAAAAAAoAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAIAAACgAAAAAACgAAAAAAAAAAoACAAAAAACgAAAAAAAAAAAACgACAACAAAgICAAgAAIAAAAAggAAAAKAAAAAAAACgAoKCigAAAIACAAIAAAAAoACgAAAIAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAMurAAAAAACgAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAgAAAAKAAAAAAKAAAAAAAAAACgAIAAAAAAKAAAAAAAAAAAAKAAAIIAAACAgAICAAAgAAACAoIIAAACgAAAAAAAAAoAKCgooAAACAAgACAAAAAKAoAAAACACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAADLqwAAAAAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAIAAACgAAAAACgAAAAAAAAAAAoCAAAAAAACgAAAAAAAAAAACgIAgAAAAgAIACAgAAIAAAAgKCCAAAAoAAAAAAAAAKCgAoqgAAAAgAIAgAAAAACgKAAAAAAggAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAy6sAAKAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAACAAAoAAAAAAoAAAAAAAAAAAKAgAAAAAAAoAAAAAAAAAAAoACIAAAAIAACAAgIAACAAIAAAAIAAACgAAAAAAAAoAKCgooCggAIACAAIAAAAAAqgAAAAAIIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAjqwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAgKCAoAAAAAAoAAAAAAAAAAAKAAgAAAAAAoAAAAAAAAAAAoACIAAAAAIACAAgAIAACAIAAAAIAAACgAAAAAAAAoAKCgooCggAIACAAIAAAAAoCgAAAAAAiAAAAAAACgAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAACAAAoAAAAAAIAAAAAAAAAAAAAAAAAACOrAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAKAAAAAAAAAACgAAIAAAAAAKAAAAAAAAAAAAKAIIAAAAACAAgAIACAAAiAAAAACAAoAAAAAAAAAKCgAoKKoAIACAAgCAAAAAAKoAAAAAAAIgAAAAAAAoAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAgAAAAAKAAAACAAAAAgAAAKAAAAAAAAAACOrAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAKAAAAAAAAAACgAAAIAAAAKAAAAAAAAAAAAAKAIAAAAAIACAAgAIACAAIIAAAACAAoAAAAAAAAKACgoKKAoAIACAgACAAAAAAKoAAAAAAIAgAAAAAAAoAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAgAAAAAAKAAAACAAAAgAAAAAAAKAAAAAAACOrAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAKAAAAAAAAAAACgAAIAAAAAKAAAAAAAAACgAAgAoAgAAAAAgAAICAAgAIACAIAAAIACgAAAAAAAAoAKCgoqgAAgAICAIAAAAAAKKAAAAAAAgCAAAAAAACgAAAAAAAAAAAAAAAAAAAgAAAAAAKAAAAAAAAAAAAACAAAAAAAAAoAAIAAAACAAAAAAAAAAAAoAAAAI6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAoAAAAAAAAAAAKAAAgAAAAAoAAAAAAAAKAAAAAAKIAAAAIAACAAgIACAgAIAgAAAgAAKAAAAAAACgAoKCiqAACAgAIAgAAAAACqAAAAAAACIAAAAAAAAKAAAAAAACAAAoAAAAAAAAIAAAAAACgAAAAAAAAAAAAgAAAAAAAAAKACAAAAAgAAAAAAAAAAAAKAAAACOrAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAKAAAAAAAAAAACgAAIAAAAAKAAAAAAAACgAAAAACiAAAAACAAAgIACAgAIACAIAAAIACgAAAAAAoAKCgAoqgAgAIACIAAAAAAKKAAAAAAAgCAAAAAAAACgAAAAAgAAAAAKAAAAAAAACAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAoAAAAI6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAoAAAAAAAAAAAKAAAgAAAAAoAAAAAAAAKAAAAAAKIAAAAAAIACAAgICAAgAIAgAAAgKAAAAAAACgAoKCgCqACAAgIAgAAAAAoAoAAAAAACAIAAAAAAAAKAAAAACAAAAAAAoAAAAAAAIAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAjqwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACgAAAAAAAAAAAAoAACAAAAACgAAAAAAAoAAAAAAAogAAAAAAgAIACAgIACAAgCAAAAAAAAAAAACgAoKCgCqACAgAIAgAAAAAooAAAAAAACAIAAAAAAAKAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAoAAAAI6sAAAAAAAAAAAACAoIKAAACAKAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAoAAAAAAAAAAAAKAAAgAAAAAoAAAAAAAKAAAAAAAKIAAAAAAIACAAgIACAgAIAgAAAAAAAAAAAoAKACgooCggAIACAIAAAAKAKAAAAAAAAiAAAAAAAACgAAAAAgAAAAAAAAKAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAKAAAAACOrAAAAAAAAAAgAAAAoAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAoAAAAAAAAAAAAKAAAAgAAAAAoAAAAAAAKAAAAAAAKIKAACAAAAgAICAgAICAAgCAAAAAAAAAAACgAoKACigAAAIACIAAAAAKAKAAAAAAAAgCAAAAAACgAAAAAAgAAAAAAAAAKAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAKAAAACAOrAAAAAAAAAAgAAAoAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAoAAAAAAAAAAAAAKAAAAgAAAAAoAAAAAAAKAAAAAAAKqAAACAAAAgAICAAgICAAgCAAAAAAAAAAACgAoKACigAAIAACIAAAAKAKAAAAAAAAAgCAAAAACgAAAAAAAgAAAICgAAAAAAoAIAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAACgAAAAAgDqwAAAAAAAAAICggAoAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAoAAAAAAAAAAAAAAKAAAAgAAAAoAAAAAAAAKAAAAAAAKqAAACAAAAgAICAAgICAAgCAAAAAAAAAACgAAoKCgCgAAIACAIAAAAKAKAAAAAAAAAgCAAAACgAAAAAAAAgAAAAICgAAAAAAAAAAAAAAoAAAAAAAIAAAAACAoAAAAAAAAAAAAAAAAAAAAAAIAAACgAAAAAgDqwAAAAAAAAAIAAAAKAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAKAAAAAAAAAAAAAACgAAAIAAAAKAAAAAAAACgAAAAAACqAgAAAgAAIACAAgICAAgIAgAAAAAAAAAAoAKACgoAoAACAAgCAAACgACgAAAAAAAACCAAAAoAAAAAAAAAIAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgDqwAAAAAAAAAAIAAAKAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAKAAAAAAAAAAAAAAACgAAAIAAAAKAAAAAAACgAAAAAAAoogAAAAgAAIACAAgIACAgAIgAAAAAAAAAAoAKCgoAKKAgAIACIAAAAKAAKAAAAAAAAIAAIACgAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACOrAAAAAAAAAAAAAgKCCgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAACgAAAAAAAAAAAAAAAoAACAAAAACgAAAAAAAoAAAAAAAKKAIAAAIAACAAgAICAAgIACIAAAAAAAAAKAACgoKCgCgIACAAiAAAACgCgAAAAAAAACAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI6sAAAAAAAAAAAACAAAACgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACgAAAAAAAAAAAAAAAoAACAAAAACgAAAAAAAoAAAAAAAKAKIAAAIAACAAAgIACAgIACIAAAAAAAAAKACgoAKCgCgIACAAiAAACgACgAAAAAAAACAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI6sAAAAAAAAAAAAACAoIAAACgAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoIACgAAAAAAAAAAAAAoAAAAAAAAAAAAAAKAAAAgAAAAAoAAAAAAAKAAAAAAACgCiAAACAAAAgAICAAgICAAiAAAAAAAAACgAoKCgAoAoCAAgCACAAoAAAoAAAAAAAAAgAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACOrAAAAAAAAAAAAAAAAAAgAAKAAAAAKAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAKAAAAgAAAAAoAAAAAAAKAAAAAAACgCiAAAACAAAgAIACAgICAAgCAAAAAAAACgAoKCgoAoACAAgCACAAoAAoAAAAAAAAAAgAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjqwAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAoAAACAAAAACgAAAAAAAoAAAAAAAKAKIAAAAIAACAAgAICAgIACAIAAAAAAAKACgAoKCgCgAIACAIAICgAACgAAAKACAAAAAIAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI6sAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAKAAAAgAAAAoAAAAAAAKAAAAAAAACgCiAAAACAAAgAIACAgICAAgCAAAAAAACgAoKACgoAoACAgACAAAAAAKAAAoAAIAAAgKCAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACOrAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACgAAAIAAAAKAAAAAAACgAAAAAAAAoAoAgAAAgAAIACAAgICAgAIAgAAAAAAAoAKCgoAKAKAgAIAgAAAAACgAAKAAACAAIAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI6sAACAAoAAIACgAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACgAAIAAAAAKAAAAAAACgAAAAAAAAoAAogAAAAgAIACAAgICAgAIgAAAAAAAAoAKCgoKAAKAgAIAgAAAAACgAAKAAACAAIAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIA6MAACgAgAAAKAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAKAAAAgAAAAAoAAAAAAAKAAAAAAACgAACiAAAACAAgAIACAgICAAiAAAAAAAACgoAKCgoAoACAAgCAAAAAKAAAoAAAAIAAgAAAAAAAAAAAAAAAAAAAgAAACggAAAAAAAAAAAAoAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAOjAAAAAAAAoAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAoAACAAAAAACgAAAAAAAoAAAAAAAKAAAKIAAAAIACAAgICAAgIACIAAAAAAAKACgAoKCgCgIACAIAAAAAAoAACgAAAAgACAAAAAAAAAAAAAAAACAAAAAKAAACAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAAgAAAADowAAAAAAAAAAKAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAKAgAAAAAAAAoAAAAAAAKAAAAAAACgAAAIoAAACAAgIACAgIACAAiAAAAAAACgAoKCgAoAoCAAgCAAAAAAKAAoAAAAAIAAAAgAAAAAKCAAAAAACAAKAAAAACAoIAAAKAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAACAAAAAAOjAAAAAAAAAAoAAICgAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACgIAAAAAAAAAKAAAAAAACgAAAAAAAoAAACKAAAAgAICAgAICAgAIAgAAAAAAAoAKCgoAKKAAgAIAgAAAAACgAKAAAAACAAAAAAAIACgAAAAAACAAAAAAAAAAIAAAKAAAAAAACAAAAAgAAAAKAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAIAAAAAAA6MAAAAAAAAAAAAACgAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAKAAAAAAAAAAgKCCgAKCAAAAAAACgAAAAAAAAoAAAAAAAKAAAAigAAAICAAgICAgAIACAIAAAAAAAKACgoKACigIAACIAAAAAAoAACgAAAAAAgAAAAAAACAoAAAAAgAAAAAAAAAAAACCgAAAAAAAgAAAAIoAAIAAAKAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAIAAAAAAAA6MAAAAAAAAAAAACgAgKAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAoAAAAAAAAACAACgAAAAAAAAAAoAAAAAAAAKAAAAAAACgAAAIoAAACAgAICAgIACAAiAAAAAAACgAAoKCgAooCAAgCAAAAAAKAAoAAAAAAAIAAAAAAAAAAAAAACAAAAgAKAAAAAAgAAAoAAAAAIAAAogAAAACAACgAAAAAAAAAAAAAAAAAoAAAIAAAAAAACAAAAAAAAAAOjAAAAAAAAAAAAoIACgAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAgKCACgAAAAAAAAAAoAAAAAAAAAKAAAAAAACgAAAIoAAACAgAICAgICAAAiAAAAAAACgAoAKCgAooCAAgCAAAAAAKAAoAAAAAAAAIAAAAAAAAAAAAACAAAgAAKAAAAAAgKCAACgAAAgAACiAAAAAAIAAKAAAAAAAAAAAAAAAAACgAAgAAAAAIAAAAAAAAAAAAA6MAAAAAAAAAAKAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAKAAAAAAAAAgAAoAAAAAAAAAAAKAAAAAAAACgAAAAAAAAoAAACKAAAAgIACAgICAAgAIgAAAAAAAoAKACgoAoAAACAIAAAAAAoACgAAAAAAAAgAAAAAAAAAAAAAIAACAAAoAAAAKCAAIAAKAACAAKAIAAAAAAAgAAoAAAAAAAAAAAAAAAAAKACAAAAAgAAAAAAAAAAAAAKCOjAAAAAAAACgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACgAAAAAAAIAAKAAAAAAAAAAACgAAAAAAAAAoAAAAAAAAKAAAAigAAAIACAgICAgIAACIAAAAAAKAACgAoKAKAAAAiAAAAAAKAAAoAAAAAAAAIAAAAAAAAAAAAACAAAAgKAAAACgAgACAACgAAgCgACAAAAAAAIAKAAAAAAAAAAAAAAAAAACggAAAAIAAAAAAAAAAAAACgAjqwIAAAAAAKAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAKAAAAAAAAAgAAoAAAAAAAAAAAKAAAAAAAAACgAAAAAAAoAAAAogAAAAgAICAgICAgACCAAAAAAAoAAKACgoAoAAACIAAAAAoAACgAAAAAAAAAgAAAAAAAAAAAAAIAAAAAAAACgAAgACAoqAAACAKAIAAAAAAAgAoAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAOjAAAACAoAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAoAAAAAAAACAAACgAAAAAAAAAAAoAAAAAAAAAKAAAAAAACgAAACiAAAACAAgICAgICAAIIAAAAACgAAAoAKCgCgAAAIgAAAACgAAKAAAAAAAAACAAAAAAAAgAKAAAACAAAAAAAoAAAIAAgAoAAAIAoAgAAAAACACgAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAKAAAAA6MAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAoAAAAAAAACAACgAAAAAAAAAAAoAAAAAAAAAAKAAAAAAACgAAAIoAAAACAAgICAgICAAIIAAAAACgAAAoAKACigAACCAAAAACgAAKAAAAAAAAACAAAAAAAgAAKAAAACAAAAAAoAAAAIAAgAAoAAIAoAAgAAACCgAAAAAoAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAoAAAAADowAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAIAAKAAAAAAAAAAAAACgAAAAAAAAAoAAAAAAAKAAAAigAAAAAICAgICAgIAAgAgAAAKAAAACgAoAqgAAAiAAAAAKAAAAoAAAAAAAAAIAAAAAACAAoAAAAAAAIACgAAAAAAgAACAACgAgACgACAAqAAAAACgAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAOjAAAAAAAAAAAAAAAAAAAoICgAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAoAAAAAAAACAACgAAAAAAAAAAAAAoAAAAAAAAKAAAAAAACgAAAAIoAAAAACAgICAgICAIAAIAACgAAAAAoAKAKoAAAIgAAAACgAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAgACAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAKAAAAACAAAAAgAAAAAAKAAAAAAAAAA6MAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAoAAAAAAACAACgAAAAAAAAAAAAAAoAAAAAAAAKAAAAAAACgAAACgCAAAAACAgICAgICIAAAIACgAAAAAAoAKAKoAAAIgAAACgAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAgAACAAAAAAAAAAAAAACgAAAAAAAAgAAAAAKAAAAAAACAAAAAgAAAKAAAAAAAAAAAA6MAAAAAAAAAAAAAAAAAAAAAACggKAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAIKAAAAAAAAAAAAAAACgAAAAAAAAoAAAAAAAKAAAAAigAAAAAICAgICAgIgAAAAAAAAAAAAoAKAKoAACCAAAAACgAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAgAACAAAAAAAAAAAAACgAAAAAAAAAAgAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAAOjAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAgAAoAAAAAAAAAAAAAAAKAAAAAAAACgAAAAAAAoAAAAogAAAAAAgICUEBARBAAAAAAAAAAAAAUAFFUAAABBAAAABQAAAFAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAQAAABAAAAAAAAAAABQAAAAAAAAAAAAQFAAAAAAAAAAAABAAAAAAAAAAAUAAAAEAAAdGAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAABABQAAAAAAAAAAAAAAAUAAAAAAAFAAAAAAABQAAABQBAAAAAABASglBmggIgAAgKAAAAAAAACgAoAqgAAAiAAAAKAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAIAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAIAAA6MAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAACAACgAAAAAAAAAAAAAAAoAAAAAAAAKAAAAAAACgAAACiAAAAAAACAlBmglBARABAAAUAAAAAAAFABQBVAAABEAAAAUAAAABQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAQAAAAFABAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAFAAAAAAAABAAAAHRgAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAQAAUAAAAAAAAAAAAAAAFAAAAAAAABQAAAAAAAUAAAAUQAAUEAABAAZoJQZoIgAgAAAKAAAAAAACgAoKKAAAIIAAAAAKAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAICggKAAACAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAADowAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAIAAAKAAAAAAAAAAAAAAACgAAAAAAAAoAAAAAAKAAAAAKIAAKACAAgJQSglBmgiCAAAAAoAAAAAAAKACgooAAAggAAAAAoAACgAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAgAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAA6MAAAAAAAAAAAAAAAAAAAAAAAAACgAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAACAACgAAAAAAAAAAAAAAAAoAAAAAAAAKAAAAAACgAAACgCAACgAgAICUEoM0EoIggAAAAKAAAAAACgAoAKKAAAIIAAAAKAAAoAAAAAAAAAAAIICgAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAgAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAA6MAAAAAAAAAAAAAAAAAAAAAAAAAAKoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAACAAACgAAAAAAAAAAAAAAAoAAAAAAAAKAAAAAAACgAAACgCACgAAgAICUEoM0EoMoAAAAAKAAAAAACgAoAqgAAIAIAAAAKAAAoAAAAAAAAAAiAAAACgAgKAAAAAAAAAAAAAAAAgAAAAAAAAAAAAACAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAICujAAAAAAAAAAAAAAAAAAAAAAAACgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAgAAoAAAAAAAAAAAAAAAAKAAAAAAAACgAAAAAAAoAAAAogAAoAAIACAlBmglBmgiAAAAACgAAAAAAoAKAKoAACACAAAACgAKAAAAAAAAAAAIgAAAAAAoAAAAAAAAAAAAAAACAAAAAAAAAAAAAAIAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAiitsAAAAAAAAAAAAAAAAAAAAKAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAACAACgAAAAAAAAAAAAAAAAoAAAAAAAAAKAAAAAACgAAAACiAACgAAgAICUGaCUGaCIAAAAAKAAAAAACgAoAqgAAIAIAAAAKAAoAAAAAAAAAAIIAAAAACgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAgAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACKK2wAAAAAAAAAAAAAAAAAoAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAIAKAAAAAAAAAAAAAAAACgAAAAAAAAoAAAAAAAKAAAAAKAIKAAACAAgJQZoJQZqCAAAAAAoAAAAAAKACgCqAAAgAgAAAAoCgAAAAAAAAAAAggAAAAAKAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAggCgKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAKICtsAAAAAAAAAAAAAKAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAACACgAAAAAAAAAAAAAAAAoAAAAAAAAAKAAAAAAACgAAACgCACgAAAAgICUGaCUGaggAAAAAKAAAAACgAAoKKAAAIAIAAAKAAoAAAAAAAAAAAIIAAAAACgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAIIAqgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAACiArbAAAAAAAAAACgAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAgAAoAAAAAAAAAAAAAAAKAAAAAAAAACgAAAAAAAoAAAAAoAgAoAAAAICAlBmglBmoIAAAACgAAAAAAoAKACigACAACAAACgKAAAAAAAAAAAACACAAAAoAAAAAAAAAAAAAAAAAAACAAoAAAAIAAIIAqgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAACg2wAAAAAAAoAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAIAKAAAAAAAAAAAAAAAACgAAAAAAAAAoAAAAAAAKAAAAAKAIKAAAAACAgJQZoJQZQQAAAAFAAAAAABQAUAFFAAEAAEAAFAUAAAAAAAAAAAAAAEAEABQAAAAAAAAAAAAAAAAAAAAAAAAAAAQABEVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAB0YAAAUAAAAAAAAAAAAAAAAAAAAAAAABQQFAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAQAUAAAAAAAAAAAAAAAAFAAAAAAAAAABQAAAAAAAUAAAAUAAQUAAAAAEBASgzQZoJUEAAAABQAAAAAAUAFAFUAABAAABBQAFAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAABAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAFdGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAEFAAAAAAAAAAAAAAAAABQAAAAAAAAAUAAAAAAAFAAAAAAFAEFAAAAABASglBmgzQSoICAoAAKAAAAACgAAoAqgAAIAAIAKAoAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAICgggAAAACgAAAAAAAAAAAAAAAAAAAAAAAIAAAACgAAAAAgAAAAAAKAAAAAAAACAAAArowAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCAAoAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAACACgAAAAAAAAAAAAAAAAoAAAAAAAAAAKAAAAAAACgAAAACgAKgAAAAAAgJQSgzQZoJUEBAAUAFAAAAABQAAUAVQAEAAAEFAAUAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAEBREAAAAAABQAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAABQAAAAAAAAQAAFdGAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAQFAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAQAAUAAAAAAAAAAAAAAAAFAAAAAAAAAABQAAAAAAAAUAAAAAUAQUAAAAAAEBKDNBKDNBEEBAAUAAFAAAABQAUAFFAAEAAAEFAUAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAQFBEAAAAABQAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAQAFdGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQQAFBAUAAAAAAAAUAAAAAAAAAAAAAAAABAABQAAAAAAAAAAAAAAAAAUAAAAAAAAAAFAAAAAAABQAAAAABQAFQAAAAAAQEoM0EoM0GUAEABQAAUAAAFAABQBVAAAQAAQAUBQAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABAEAAAABQAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAQFdGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQABQAAEBQAAAAAAAAAAAAAAAAAAQUAAAAAAAAAAAAAAAAAFAAAAAAAAAABQAAAAAAAAUAAAAAUABUAAAAAAAEBKDNBmglBlBAAAUAAFAAABQAAUAVQAAEAAEFAUAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAQFBAAAAAAAAAAAAAAAAAAAUEAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAQFdGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAUEAAAABQAAAAAAAAAAAAAAAQUAAAAAAAAAAAAAAAAAFAAAAAAAAAAABQAAAAAAAAUAAAAAAUBUAAAAAAAEBKDNBmglBlBAAAUAAFAABQAAUAFFAAEAAAAVAUAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAFBAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAEBXRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAFAAAAAAAAAAAABBQAAAAAAAAAAAAAAAAAUAAAAAAAAAAAFAAAAAAAABQAAAAABQFAQAAAAAAAQGaCUGaDNBEEAABQAUAAAFAABQAUUAAQAABQAAAAAAAAAAAAAAEAAAABQAAQAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAEBXRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAFAAAAAAAAAABBQAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAFAAAAAAAABQAAAAABQFAQAAAAAAAQGaCUGaDNBEEAABQAUAAAFAABQAUUAAQAABQAAAAAAAAAAAAAEAAAABQAAAAAQAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAEABXRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAFAAAAAABBQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAFAAAAAAAAABQAAAAABVAQAAAAAAAAQGaCUGaDNBEEAABQAUAAFAABQAUUAAAQAAABQAAAAAAAAAAAEAAAAABQAAAAAAQAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAV0YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAABQAAQFBBQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAAAAAAAABQAAAAAABVAAQAAAAAAAQGaCUGaDNBEEAABQAUAAFAABQAUUABQRAAAFAAAAAAAAAAAAQAAAAAFAAAAAAABAAAUAAEAAAAAAQFBAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAV0YAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAAQUAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAABQAAAAAAAAAUAAAAAAUBQEAAAAAAAAEoM0EoM0GaCIIAACgAoAKAACgAoAoCgIIAAAAKAAAAAAAAAAAgAAAAKAAAAAAAAACAAoAAAIAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK6MAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAKAAAAAAAACgAAAAAAAooAAgAAAAAAgJQSgzQSgzUEBAAUAFAABQAAUAFAFAUBBAAABQAAAAAAAAAAAEAAABQAAAAAAAAAAQAFAAAABAAAAAEAAAAAAAAAAAAAAAAAAAAEAAABQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFdGAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAABQAAAAAABVAAQAAAAAAAQEoJQZoM0EqCAgAKACgAAoAAKACgCqAAggAAAAoAAAAAAAAACAAAoAAAAAAAAAAAAIAACgAAAAgAAACAAAAAAAAAAAAAAAAAAAACAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACujAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAACgAAAAAAAAoAAAAAAAKKAAAIAAAAAAICUGaCUGaCIICAoAAKACgAAoAKAKAoACACAAACgAAAAAAAAAIACgAAAAAAAAAAAAAAgAKAAAAACAAIAAAAAAAAAAAAAAAAAAAAAIAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK6MAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAKAAAAAAAAACgAAAAAAAooAAgAAAAAAAgJQZoM0EoIggAoIAoAAKAACgAoAqgAAIAIAAAKAAAAAAAAAAAAAAAAgKAAAAAAAAAAAAAAAAAAACAAAAAIAAAAAAAAAAAAAAAAIAAAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK6MAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAKAAAAAAAACgAAAAAAAoAoAAgAAAAAAAgM0EoM0EoMoAoAIAoAKAAACgAoKKAAIAAIAAAAAKAAAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAACAAAAAAIAAKAAACAAAAAAAAgAAAKAAAAAAAAAACAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAADTowAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACgAAAAAAAAAoAAAAAAAKKAAAIAAAKCAAAlBmglBmgzQRAFAABFABQAAUAFABRQABAABAAAABQAAAAAAAAAAAAAEAAAAABQAAAAAAAAAAAAAAAAQAAAAABAABQAAAQAAAAAAAAAAAAAAAAAAAAAEAAAAABAAAAUAAAAAAAAAAAAAAAAAAAAAAAEABt0YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAABQAAAAAAAAAUAAAAAAAFAFAAAEAAFAABAASgzQZoJQZoIgCgAKIAoAAAKACgooAAAgAAgAAAoICgAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAAAAAgAAAAACACgAAAAAgAAAAAAAAAAAAAAAAAAAAIAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAIAAADbowAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAoAAAAAAAKAKAAIAAAKAACAAzQSgzQZoJQRAFAAUQBQAAUAFABRQAABAABAAABQQFAAAAAAAAAAAAAAAQAFAAAAAAAAAAAAAAAAABAAAAAAAEAFAAAAABAAAAAAAAAAAAAAAAAAAAQAAAAAAEAABQAAAAAAAAAAAAAAAAAAAAAAQAAAG3RgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAABQAAAAAAAUAAUAAAQAUAAAEBASglBmgzQQEQBQAFAEUAAFABQAUUAAQAAQAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAEFAAAAAAABAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAABAejowAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAoAAAAAAAKAKAAAIAAKAAACAgJQSgzQZoICIIKoAKAIoAKAACgoAoAAgAAgAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAIKAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACA9HRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAABQAAAAAAAUAAUAAAQAUAAAAEBASgzQSgzQQEQBQAFBQBAFABQAUUBQARAABAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABBAFAAFAAVAAAAAAAAAAAAAAAAABAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAABAejoyACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAKAAAAAAAACgCgAAACACgAAAAgICUGaCUGaCAiAKAAoKAIAoAKACigKACIAAIAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAIAIAAAoAAoCoAAAAAAAAAAAAAAAAAAIAAAAAACAAAAAAAAAAAAoAAIAAAAAAAAAAAAAAAAACAAAAA26MgAAAAgAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACgAAAAAAAoAAoAAAAgoAAAAAICAlBKDNBmgiCACgAKCgCKAACgAooCgiAAACACgAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAgAAIAAIAAAoAAoCgIAAAAAAAAAAAAAAAAAAIAAAAACAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAACAAAAA26MgAAAAAAgAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACgAAAAAAAoAAAoAAAgAoAAAAAIADNBKDNBmgiCACgKACgCKACgAoAoCgiAAACACgAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAAAAAgAAIAAAIAAoAoACgAIAAAAAAAAAAAAAAAAAIAAAACAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAACAAAA26MgAAAAAAAAgAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACgAAAAAAAoAAAoAAAgoAAAAAAAIDNBKDNBmgiCACgKACgAogCgAooACgiAAACACgAAAAIAACgAAAAAAoIAAAAAAAAAAAAAAAAAACAAAgAAAgCgACgAKAAAgKCAAAAAAAAAAAAAAACAAAAgAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAAAAAgAANujIACgAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAoAAAAAAAKAAAKAAAAIKAAAAAAACAlBmgzQSgyggAoCgAoKAIAoAKKAAAIAAIAKAAAAAAgAAKAAAAAACgAAgAAAAAAAKAAAACAAAAgAIAAAACiAoAACgAAIACggAAAAAAAAAAAAAAAgAAIAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAID0dGQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAFAAAAAAABQAABQAABBQAAAAAAAAQEoM0EoM0EQQEFAUAFBQBFABQBQFBEAAAEAFAAAAAAQAFAAAAAAAAAAAAAAAAAAAAAAAAAAABAAQAAAAFAAAABQAAAEBQAQAAAAAAAAAAAAAAQABRAAAQBBQAAAAAAAAAUAEAAAAAAAAAAAAAAAAAAAAAABt0ZAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAAAAAAFAAAAFAAAEFAAAAAAAABASgzQSgzQSoICCgKACgoAigAooCgAiAAACCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAACAAAAAoAAAKAAAAAAAAgAAAAAAAAAAAAAAgCgCAAAgAKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA26MgAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAKAAAAAAACgAACgAAAKgAAAAAAAAAgJQSgzQZoIggIAKoKACgoAKACgAAiAAACCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACAAAAAoAAAKAAAAAAAAAgAAAAAAAAAAAAAAgCgCAAAgAKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA26MgAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAKAAAAAAAACgAACgAACCgAAAAAAAAAgJQSgzQZoJUEBAUUBQUAFBQAUAABABAAAQUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAQAAAAFAABQAAAAAAAAAEBQAQAAAAAAAAAAAQBQBAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG3RkAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAABQAAAAAAAAUAAAAUAAAQUAAAAAAFBAAQEoJQZoM0EqCAgKKAoKCgAoKAAAAggAAAIKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAIAAAAACgAAoAAAAAAAAAAACAAAAAAAAAAAACAAKAIAAgAAAAAAAAAAAAAAAAAAAAAgAKAAAAAAAAAAAADboyAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAoAAAAAAAAAKAAAAKAAAqAAAAAACgAgAICUEoM0GaCVBAABQFBQUFBQAAAAEEAAAABBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAABAAAAAAUAFAAAAAAAAAAAAQFBAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAABQAAAAAUAEAAABt0ZAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAFAAAAFAAAAVAAAAAABQAAQEBKCUGaDNBKggAAoCgoKCgoAAACACAAAAAgAoAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAgAAAAKAACgAAAAAAAAAAAAAAIAAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAKAAAACgAAAAgANujIAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAoAAAAoAACgIAAAAAKAAACAAzQSgzQSgzUEAAFUFBQUFABQAQBABAAAAAAQAUAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAQAAAFAAABQAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAAABAAAAAAAAAAAAAAAAQAAAAAFAAABQAAAAAAAadGQAAAAAAAAAAAAAQAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAABQAAAABQAAFAQAAAAAUAAAEABKDNBmglBmoIAAKoKCgoKACgAgCACAAAAAAAgAoAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAACAACAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAIAAACgAAAAoAAAAAAANOjIAAAAAAAAAAAAAIAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAoAAAAAoACgIAAAAAAKAAACAAlBmglBmgzUEAABRVBQUFABQQBAABAAAAAAAQAAAUAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAUAAAAAAAAAAAAAAABAAABAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAEABQAAAAUAAAAAAAAGnRkAAAAAAAAAAAAAAEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAUAAAAAUAABQEAAAAAFAAAAABAQGaCUGaCVBAQAFBRVBQUAABAAABAAAAAAAAQAAAAUAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAUAAAAAAAAAAAAAAAABAUEEAAAAAAAAAAAAAAAAAAAABAAAAUAAEAAAAAAAAAAAAABQAAAAAAAAadGQAAAAAAAAAAAFAAEAAAAAABQQAAAAAAAAAAFABAUEAAAAAAAAUUEBQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAUAAAAAUABQAEAAAAAFAAAAABAQEoM0GaglBAQAFBRVABQUABAABAAAAAAAAAAQAAAAAAAAUEAABQAAAAAAAAAAAAAEAAAAAAAAAABQAAAAAAAAAAAAAAAAAAQBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAUAAAAAAAAGnRkAAAAAABQAAAAABAAUAAAAAAAAAAAEBQAAAAAAAAAAAQAAFUAAAQFBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAABQAAAAABQAFAAQAAAAUAAAAAAEBASgzQZqCUEBAAUAVQUFAQAAAAAAAAAAAAAAAAQAAAAAAAAAAUAAAAAAAAAAAAAABAAAAAAUAAAAAAAAAAAAAAAAAAAAABAURAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAUAAAAAAAAG3RkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAABQAAAAABQAFAAAQAAAAUAAAAAAEBKCUGaDNQSggIAACiqCgAqAAAAAAAAAAAAAAAAAAAAAACAoIAAAAKAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAACgAAAAAAAAA26MgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAKAAAAAAKAAoACAAAACgAAAAAAAgJQSgzQZqCUEBAAAUVQAVABQAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAUAAAAAAAAAAABAAUAAAAAEAAABQAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAUAAEAABQAAAbdGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAFAUAABAAAABQAAAAAAAQEoJQZoM1BKDIAAAKKoCCgAAoAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAKAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACgAAAAgAAAAAKDboyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAgAKCAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACgAAAAAAACgKAAAgAAAoAAAAAAAAICUGaCUGaglBkAAAFFAVBQAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAFAAAAAAAAAAAAAAAAAQAAAAAFAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAB6OjIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACgAAAAAAACgKAAAAgAAAoAAAAAAAAICUGaCVBmglBkAAAFFUBABQAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAFAAAAAAAAAAAAAAAAQAAAAAAFAAAAAAAAAAAAAAAAABAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAABQbdGQAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAEBQQAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAUAAAAAAAUABQAAEAAAFAAAAAAAAABASgzQSoM0EoMgAAAoqoAKAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgoAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAIAAAAAgAAAAAAAoAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADboyAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAoAAAAAAAAoCgAAAIAAAKAAAAAAAAACAlBmglQZoJQQEABQBVQAUAAAAFAAAAAAAAAAAAAAAABAAAUAAAAAAAAAAVAAAAAAAAAAAAAAAQAAAAAAFAAAAAAAAAAAAAAAABAAAAAAEAAAAAAFAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbdGQAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAABQAQAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAUABQAAAEAAFAAAAAAAAAABASgzQSoM0EoICAAoAqoAKAAAACgAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAAKgAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAgAAAAAACAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANujIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAACgKAAAAgAAAoAAAAAKAACAAgJQZoJUGaCUEBAAUUBUFAAAAAABQAAAAAAAAAAAAAAAQAAAFAAAAAAAAAAFAQAAAAAAAAAAAAEAAAAAABQAAAAAAAAAAAAAAAQAAAAAAABAAAAABQAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHo6MgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAACAAAAACAAAoAAIAAAAAooAIACgAAAgKCAAAAAAAAAAAAAAAKAAAAAAAAAKAAoAAACAACgAAAAAoAAAIACAlBmglQZoJQQEABRQFQUAAFAAAAAAAAAAAAAAAAAAABAAAAUAAAAAAAAAAAVAAAAAAAAAAAAAAQAAAAFAAAAAABAAAAAAAAAAAAAAAAAAEAAAAAFAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAejoyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAIAooAAAAAAAAAAAAICggAAAAAAAAAAAACgAAAAAAAAACgKAAAAgAAAoAAAAAKAAACAAgJQZoJUGaCUEBAAUUBUFAABQAAAAAAAAAUAAAAEAAAAABAAAUAAAAAAAAAAAVAAAAAAAAAAAAAAAQAAAFAAAAABAAAAAAAAAAAAAAAAAAAEAAAAAFAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAejoyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAACAoIAAAAAAAAAAAoAAAAAAAAAAoACgAAAIAAKAAAAAACgAAAgAICUGaDNQSgzQAQAFFAVBQAUAAAAAAAAAFAAAAAABAAAAAQAFAAAAAAAAAAAAAFQAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAQAAAAUAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6OjIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAKAAAAAAAAAAAAKAoAAACAAACgAAAAAAoAAAIACAlBmoM0EoMggAAKAiqCgAoAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAACgIAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAIAAAAAAKAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9HRkAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAFAAAAAAAAAAAAFAAUAAABAABQAAAAAAAUAAAEABAZoJUGaCUGQQAAFARVBQAUAAAAAAAFAAAAAAAAAABAAAAAAAAAAAAAAAAAABQAEAAAABQAQAAAAAAAAAAAAEAAAAAAAAAAAAAAAABQAQABAAAAAABQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHo6MgAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACiAAAAAAAAAAAAAAoCgAAAIAAAKAAAAAAACgAAAgAIDNBKgzQZoICAAAoCKoKACgAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAKAAgAKAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAKAAACAAAIAAAAAKAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9HRkAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUQFBAUEAAAAAAAAABQFAAAAAQAAUAAAAAAAAFAAABAAQGaCVBmgzQQEAABQBVQUAFAAAAAABQAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAUAAAAAAAAAAABAAAAAAAAAQAAAAAAAAAAAAFAAAAABAAAAEAAAAFAAABAAAAAAAAAQAAAFAAAAAAAAAAAAAAAAABAAeroyAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAIAAAAAAAACgKAAAAAgAoAAAAAAAAKAAAACAAgM0EqDNBmggIAACgCqgoAKAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAoAACAAAAoAAAAAAIAAAAACAAAAAAAAAAAAoAAAAAAAIAAAgAAAAoAAIAAAAAAAACAAAAAoAAAAAAAAAAAAAAIAAAAD2dGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAEAAAAABQAFAAAAAQAAUAAAAAAAAFAAAABAASgzQSoM0GaCAgAAKCiiCgAoAAAKAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAACgIAAAAAACgAAAAgAAAAAIAAAAAAAAACgAAAAAAAAAgAAAACAAAAAoAAAIAAICgAgAAAAAKAAAAAAAAAAACAAAAAAA9nRkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAABAAAUBQAAAAAEAFAAAAAAAAABQAAAAQAEBmglQZoM0EABAAUVQEFABQAAAUAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABBQAAAAAAFAAABAAAAAAQAAAAAAAAFAAAAAAAAAABAAAAAAAAAAAAAQABAAAAAAAAABQAAAAAAAAAAQAAAAAAAAHs6MgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACgAAAAAIAKAAAAAAAACgAAAAAgAIDNBKgzQZoIACAoAqgIKACgAAoAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACAACgAAAAAAAKACAAAAAAgAAAAAAAKAAAAAAAAAAACAAAAAAAAAAAgAAACAAAACggAAAKAAAAAAAAAACAAAAAAAAgPd0ZAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAUAAAAABABQAAAAAAAAAUAAAAAEABKDNBKgzQZoIACAoAqgIKACgAAoAAAAAAAAAAAAAAAAAAIAACgAAAAAgAAAAAAAAAIAAKAAAAAAAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAACAAAAAAAAgAAAAAACAAACgAgAAKAAAAAAAAAACAAAAAAAgAPd0ZAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAABABQAAAAAAAAAUAAAAAAEBKDNBKgzQZoIAAAAKoKgAAoAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAgAAIAAACgIAAAKAACAAoAAAAAAAAAAAIAAAAACAA93RkAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAQAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAEAFAAAAAAAAABQAAAAAAQAEoM1BKDNBmggAAAAqgqAACgAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAIAACgAAAAAgAAAAAIAACAAAAAAqAACgAAAAAAAAAAAAAAAAAgAAAAAIAD3dGQAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAEAAFAAAAAAAAABQAAAAAAQAEoM1BmglBmggAAAqgAqACgAAAAAoAAAAAAAAAAAAAAIACgAAAAAAAAAgAAAAAAAAIAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAKAAAACAAAAAAgAAIAAAACoAAAKAAAAAAAAAAAAAAAAACAAAAAgAAPd0ZAAAAAAAAAAAAAAAAUAAAAAAAABAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAABABQAAAAAAAAAUAAAAAAAEABKDNQZoJQZoIAAAKoCCgAoAAAAAAKAAAAAAAAAAAACAAAAoAAAAAAAAIAAAAAAAACAAAAACgAAAAAAAAAAAAAAAAAAAAAAAIAAAACgAAAAgAAAAAIAACAAAAIKAACgAAAAAAAAAAAAAAAAAAgAAAAIAAD3dGQAFAAAABAUAAAAAAAAAAAAAABAAAAUEABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAEAAFAAAAAAAAABQAAAAAAAQAGaCVBmglBmggAAAqgIKACgAAAAAAoAAAAAAAAAAAAIAAAACgAAAAAAAgAAAAAAAAAIAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAgAAAKAAgKCAogCAoICiAAAAAAAIAAKAAAAAAAAAAAAAAAAAACAAAAAgAAAOhtkAAUAAAAAAAAAAAAAAAAAAAEAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAEAFAAAAAAAABQAAAAAAAAQAGaCVBmglBkEAAAFUBBQAUAAAAAAAFAAAAAAAAAAAABAAAAAUAAAAAAEAAAAAAAAAABAAABQAAAAAAAAAAAAAAAAAAAAAAAAEAABQAAEAAAEAAAAABFAAABAAABQAAAAAAAAAAAAAAAAAAQAAAAEAAABAdLbIAAAAAoAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAIAKAAAAAAAAACgAAAAAAAAgAM1BKDNBKDIIAAAKoCCgAoAAAICgAAAoAAAAAAAAAAAIAAAACgAAAAAAAgAAAAAAAAAIAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAACAAAAoAAAAAAAAAAAAAAAIAAAAAAAACAAAAgAOltkAAAAAAAAUAAAAAAAAEAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAEFAAAAAAAAABQAAAAAAAAAQAGaglBmglBkEAAAFUBBQUAAAEAABQAAUAAAAAAAAAAAAEAABQAAAAAAAAQAAAAAAAAAEAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAABRAEAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAABAAAAQABR0tMgAAAAAAAAAAACgAgKCAAAAAAAAAAAAAAoIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAIAKAAAAAAAACgAAAAAAAAAAgAM1BKDNBmggIAAAKoCCgoAAAIAACgAAoAAAAAAAAAAAAAIACgAAAAAAAAgAAAAAAAAAIAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICgCAAIAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAACAAAgAACjpaZAAAAAAAAAAAAAAAAAAAAAUAAEAAAAAAAAAAUAAAEAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAEFAAAAAAAAABQAAAAAAAAAAQAGaglBmgzQQEAAAFUBBQAUAAEAABQAAUAAAAAAAAAAAAAAEBQAAAAAAAAQAAAAAAAAAEAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAEABQBAAAAEAAAAFBAAAAAAAAUAAAEAAAABAAAAAAAAAAAAQAAAAEAB0tsgAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAKCAAAAoAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAIKAAAAAAAACgAAAAAAAAAAAgIglBKDNBmggIAAAKAqACgAAAAAAoAAAKAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAgAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAIAAAKAAAAAAAAAAAAAACAAAAgAAAAAAAAAAAAIAAAAADobZAAAAAAAAAAAAAAUAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAABBQAAAAAAAUAAAAAAAAAAAAEAQZoJQZoM0EBAAQAFFEFABQAAAAAAUAAFAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAQAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAEAAAFAAAAAAAAAAAAAAABAAAAQAAAAAAAAAAAAAAEAAB0NsgAAAAAAAAAAKAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAgoAAAAAAAAKAAAAAAAAAAAAACIM0EoM0GaCAgIAAAKqACgAAAoAAAKAACgAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAIAAAAAKAAAAAAAAAAAAAAAAAAAAAIACggAAKIAAACAoCAACgAAAAAAAAAAAAAAAgAAAIAAAAAAAAAAAAAAAAAD3bZAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAABQAAAQBQAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAEFAAAAAAABQAAAAAAAAAAAAAARBmglBmgzQQEBAAAABRBQAUAAFAABQAAAUAAEBQAAAAAAAAAAAAQFAAAAAAAABAAAAAAAAQAAAAAUAAAAAAAAABAAAAAUAAAABAAAAAABFAAAEBQEAAFAAAAAABAAUAAAAAAEAAAAABAAAAAAAAUAAAAAEAB0NsgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIoAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAKgAAAAAAAAoAAAAAAAAAAKCAAAiDNBKDNBKDIICAAgAKKAIKACgAAoAKAAAAAAAAACgAAAAAAAAAAgKAAAAAAAAAACAAAAAAgAAAAAAoAAAAAACAAAAAAAAAAoAACAAAAACKAAAAACAACgAAAAAgAAAAKAAAACAAAAAAAAgAAAAAKAAAAAAAD3bZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBQAAAAAAAUAAAAAAAAAAAFBAAARBmglBmglBmggIACAAAoogoAKAACgAoAAAAAAAAAAKAAAAAAAAACAAoAAAAAAAAAAIAAAAACAAAAACgAAAAAAIAAAAAAAAAAACoCggAAAAgCgAAAgAAAoAAAAIAAAAAAAAAAAAAAAAAAACAAAAAoAAAAAAAPdtkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAVAAAAAAAABQAAAAAAAAAAUAAEABEGaCUGaCUGaCAgAIAAAKqCgAoAKAACgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAIAAAAACAAAACgAAAAAIAAAAAAAAAAAAACgIAAAAAIAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAIAAACgAAAAAAA922QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQQAAAAAFAABAAAAUAAAAAAAAAAAAAAAAAAAVAAAAAAAABQAAAAAAAAAAAUAAEABEGaCUGaCUGaCAgIAAAAKqCgAoAKAACgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACAACgAAAAAIAAAAAAAAAAAAAAACoACgAggAAAAAAAKAAAACAAAAAAAAAAAAAAAAAAAAAAgAAAAKAAAAAD3bZAAAAAAAAAAAAAUAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAEFAAAAAAAAABQAAAAAAAAAAUAAAEABEGaCUGaDNBKCAgIAAAAKqCgAoAKACgAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAIAAAAAAACACgAAAAAIAAAAAAAAAAAAAAAAAgoAAAIAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAA922QAAAAAAAAFAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAABABQAAAAAAAAAAUAAAAAAAAAAFAAABAARBmglBmgzQSggICAAAAAqKoAKACgAoAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACAAAAAAAAgoAAAAAACAAAAAAAAAAAAAAAAAAqACAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAA6G2QAAAAAFAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAABAABQAAAAAAAAAAUAAAAAAAAAAFAAAABAEEoM0EoM0GaCUEBAQAAAAFFVABQAUAFAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAQAAAAAAEFAAAAAAAQAAAAAAAAAAAAAAAAABAAAAAAAAABQAAAAQAAAAEAABQAAAAAAAAAAAAAAQAAAAAAAAAHQ2yAoAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoIAACggAAAAoAAAAAAAAAAAAKAAAAAAAAAACgAAAAgCCUGaDNBKDNBKCAgIAAACgCqgAoKAACgAAAAAAAAAAAAAAAAAAAAoAAAAIAACgAAAAAAAAAAgAAAAAoCAAAAAAAgAAAAAAAAAAAAAAAAACAAAAAAAAACgAAAAgAAAAIAAACgAAAAAAAAAAAAAgAAAAAAAAIDqbZAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAABQAAAAAAAAAAUAAAAAEBEEoJQZoM0EoM0EABAAAUAVUAFABQAUAAAAAAAAAAAAAAAAAAAAAAFAABAAAAAUAAAAAAAAAAEAAAAFAQAAAAAAAEBQAAAAQAAAAAAAAAAABAAAAAAAAABQAAQAAAAAEAAAABQAAAAAAAAAAAAAQAAAAEAAAB1NsgAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAoAAAAAAAAAAKAAAAACAiCUEoM0GaDNBAQAEBQABVBUAFAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAEAAAFAQAAAAAAAAAAAAAAAAEAAAAAAAAQAAAAAAAAAAAAAAAAAAAQAAAAAFAAAAAAAAAAAAABAAAAQAAAHU2yAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACgAAAAAAAAAoAAAAAAIggJQZoM0EoM0EBAAAAAUVUAFABQAAAAAAAAUAAAEAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAQAUAABAAAAAAAAAAAAAAAAAQAAAAAAABAAAAAAAAAAAAAAAAAAABAAAAAAUAAAAAAAAAAAAAEAABAAAAdTbIAAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAoAAAAAAAAAKAAAAAAACIICUGaDNBmglBkAAAAFFVBQAUAAFAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAEAFAAAAQAAAAAAAAAAAAAAAAEAAAAAAQAAAAAAAAAAAAAAAAAAAAAQAAAAAFAAAAAAAAAAAABAAAQAAAHU2yAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAKAAAAAAAACgAAAAAAAgCCUGaCUGaDNBmggAICgAqKoKCgAoAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAoAAAACAAAAAAAAAAICgAAAgigAAAgKCAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAIAACAAA6m2QFAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAUAAAAAAAEQASgzQZoM0GaCUEBAAUFFEGgUAFAAAAAAAAAAAAAAAAABAAAAAAQFAAAAAAAAAAAAAAAAABQAAAAAQAUAAAAABAAAAAAAAAEABQQAFBBFABAAAAAAAAAAAAAAAAABQAAQAAAAEAAAAABQAAAAAAAAAAAAQAAEAAB1tsgAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACgAAAAAAAAiADNBKDNBmgzQSggIACgoqoKCgoAAAAAAAAAAAAAAAAAAAIAAACAAoAAAAAAAAAAAAAAAAAAKAAAACACgACAoAAAgAAAAAAAAAAACAoIIoAAAAIAAAAAAAAAAAAAAKAAACAAAAAgAAAAKAAAAAAAAAAAACAAAAgAOttkAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAUAAAAAAAAEQAZoJQZoM0GaCAgIACgoqoKCgoAAKCAAAAAAAAAAAAAAAgAAAAIACgAAAAAAAAAAAAAAAAAAAoAAAIKICggAKAAAAIAAAAAAAAAAAAgKIgKAAAACAAAAAAAAAAAAACgAAAgAAAAAIAAACgAAAAAAAAAAAAgAAAIADrbZAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAFAAAAAAAABEAGaCUGaDNBmggICAAoKKqCgoKAACgAgAAAAAAAAAAAAAIAAAACAAoAAAAAAAAAAAAAAAAAAAAKAAggooICggKAAAAAIAAAAAAAAAAAACAAAAAAAIAAAAAAAAAAAAKAAACAAAAAAgAAAKAAAAAAAAAAACAAAAgAKDqbZBQAAAAAQAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAFAAAAAAAAQQAGaCUGaDNBmgyACAAoKiqCgoKAACgAAgAAAAAAAAAAAAIAAAACAAAoAAAAAAAAAAAAAAAAAAAAAACKKACAoAAAAAAgAAAAAAAAAAAAAIAAAAAAAgAAAAAAAAAAAoAAAAIAAAAACAAAoAAAAAAAAAAIAAACAAAoOptAAAFBAAABAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAUAAAAAAAABBAQEoM0GaDNBKDIAIACiqgsBQUFAABQAAAQAAAAAAAAAAAEAAAABAAAUAAAAAAAAAAAAAAAAAAAAAABAFAAFAAAAAAAEAAAAAAAAAAAABAAAAAAQAFQAAAAAAAAAAUAAAAEAAAAABAAAUAAAAAAAAAEAAABFABABQdbaAAAAAIAAIAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACgAAAAAAAAIICCpRGaDNBmglBkAEABRVQWAoKCgAAoAAAAIAAAAAAAAAACAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAgCgCgAAAAAAAAACAAAAAAAAAAAAAgAAAAIAAAgoAAAAAAAAAKAAACAAAAAgAAAKAAAAAAACAAAAAKIAAgAA7G0AAAAAAQAAQAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAFAAAAAAAAAQQEoqURmgzQZoM0EBAAAUVUFgKCgoAKAAAAAACAAAAAAAAAAgAAAAIAAAACgAAAAAAAAAAAAAAAAAAAAICqAICgAAAAAAAACAAAAAAAAAAAAAgAAAAIAAgAoAAAAAAAAKAACAAAAAAgAAAKAAAAAACAAAAAAKIAAAgA7G0AAAAAAQAAQAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAFAAAAAAAAAQQEoqURmgzQZoM0EBAAAUVUFgKCgoAKAAAAAACAAAAAAAAAAgAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAIoAoAAAAAAAAAAAAgAAAAAAAAAAAIAAAAACAAAqAAAAAAAAAAAAAAAAACAAAAoAAAAAIAAAAAAAogACAADsbQAAAAAABABAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAUAAAAAAAABBBUojNBmgzQSgzQQEAABRVBUFgKCgAoAAAAAAIAAAAAAAACAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAgAAAAAAAAAAAIAAAAACAAAAIKAAAAAAAAAAAAAACAAAoAAAAAAIAAAAAAACKACAADsbQAAAAAAABABAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAUAAAAAAAAAEQAZoJQZoM0GaCUEBAAAUUBpBQUFABQAAAAAAQAAAAAAAEAAAAAABAAAAAAUAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAABAAAAAAAAAAAAQAAAAAAEAQFBBQAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAEAAAB2NoAAAAAAAAAgAgAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAKAAAAAAAAAggICUGaDNBmglBmggAAAAqg1EFgKCgAoAAAAAAAIAAAAACAAAAAAAAAgAAAKAAAAAAAAAAAAAAACggAAACKKAAAAAAAAAAAAAAAIAAAAAAAAAAAACAAAAAAgAAACCgAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAOttAAAAAAAAAAAEEAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAABQAAAAAAAAEEBKCUGaDNBmgzQQEABAUAVUGgWAoKACgAAAAAAAgAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAIAAAAACAAAIKAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAA620EBQAAAAAAAAAAAABBAAUEAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAABQAAAAAAAEAEBKDNBmgzQZoJQZABAAUAVUGoCwFBQAUAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAEAAAAAAAAAAAABAAAAAAQAAFAQAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAHW0goAAAAAAAAAAAAAAAAAgAAgAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAKAAAAAAAAgAgJQZoM0GaDNBmggIAACgCqg1AWAoKACgAAAAAAAgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAOtpABQAAAAAAAAAAAAAAAABAAABAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAUAAAAAAABBAAZoJQYoM0EoM0EBAAAUAVYg1AWAoKACgAAAAAAAAgAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAOxpEAAAUAAAAAAAAAAAAAAAAAQAAQAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAFAAAAAAAAAQQEBKDNBmgzQZoJQQEAABRQFiDUBYCgoAKAAAAAAAACAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAA7GkAAQABQAAAAAAAAAAAAAAAABABAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAUAAAAAAAABBAQEoM0GaDNBmggICAAAoAqxBqAsBQUAFAAAAAAAAABAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAQAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAdjSAAAIAAoAAAAAAAAAAAAAAAAAggAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAKAAAAAAAAAggJQSgzQZoM0GaDIAIAACgCtRBYCgoKACgAAAAAAAAAgAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAICiICgAAAAAAACAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAIAAAAAAAAAAAADsaQAAABAAFAAAAAAAAAAAAAAAAAEEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAABQAAAAAAAAEEBKDNBKDFBmglBkAEAABQBWkFgKCgoKAAAAAAAAAACAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAgAAAgCgAAAAAAACAAAAAAAAAAAAgAACACgAAAAAAAAAAAAAAAgAAAAAAAAAAAOxpAAAAAEAUAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAAAAAAAAQAQEoM0GaDNBmglBkAEAABQUUQaBYCgoKAAAAAAAAAAACAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAgAAKAAAIAAAAAAAACAAAAAAAAAgAAAACACgAAAAAAAAAAAAAAgAAAAAAAAAAAOxpAAAAAAEAUAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAFAAAAAAAAAQAQEoM0GaDNBmgzQQAEAABQUUQagLAUFBQAAAAAAAAAAAQAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAQAAAAFAAAAAAAAAQAAAAAAAFAAAEAAAAAAAABAAAAAAQAAAABAABQAAAAAAAAAAAAAAQAAAAAFAAAAB1tIAAAAAAAAigAAAAAAAAAAAAAAAAAAAAIAgAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAoAAAAAAAAAIgAzQSgzQZoM0GaCAAgAKACiiDUBYCgoKAAAAAAAAAAACAAAAAAAAgAAAAAAIACgAAAAAAAAAAACgAAAAAAIAAAAAAACgAAAAAAAIAAAAAACgAAAACAAAAAAAAAgAAAAIAAAAAAgAAoAAAAAAAAAAAAAAIAACgAAAAAA62kAAAAAAAAAFAEAAAAAAAAAAAAAAAAAAAAEQAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAUAAAAAAAAAEQAZoM0GaCUGaDIIAAAAAKqADUBYCgoKAAAAAAAAAAACAAAAAAAAAgAAAAIAACgAAAAAAAAACgAAAAAIAAAAAAAAAAAACgAAAAAAAIAAAACggKAAAAIAAAAAAACAAAAAgAAAAACAACgAAAAAAAAAAAAAAAAAAAAAAAA62kAAAAAAAAAAFAAAEAAAAAAAAAAAAAAAAAAEQAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAUAAAAAAAAAEQQEoM0GaDNBKDIIAAAAAKqCgsBQUFBQAAAAAAAAAAAQAAAAAAAAEAAAAAAAAAAAAAAAAAFAAAAAAQAAAAAAAAAAAAAAAAFAAAAQAAAAAAAFBAUAAAQAAAAAAAEAAAABAAAAAAEAAAFAAAAAAAAAAAAAAAAAAAAAAB1tIAAAAAAAAAAAKAAAAIAAAAAAAAAAAAAAAAAIgAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAoAAAAAAAAAAIgAzQSgzQZoM0GQAQAAABFUFBQUFBQUAAAAAAAAAAAEAAAAAAAAABAAAAAAAAAAAAAAABQAAAAAEAAAAAAABAUAAAAAAAAAFAAQAAAAAAAAAAAAFAAAEAAAAAABAAAAAQAAAAABAAABQAAAAAAAAAAAAAAAAAAAAAdbSAAAAAAAAAAAAACgAACAAAAAAAAAAAAAAAAggAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAKAAAAAAAAAAAggM0EoM0GaDNBAQEAAAFEFBQWAoKCgoAAAAAAAAAAAAIAAAAAAAAACAAAAAAAAAAAAAACgAAAAIAAAAAAACAAAAoAAAAAAAAKgAAAAAgAAAAKAAoAAAAAgAAAAAAIAAAACAAAAAAIAAAKAAAAAAAAAAAAAAAAAAAADraQAAAAAAAAAAAAAAAUEBREBQAAAAAAAAAAAEAQAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAUAAAAAAAAAABBASgzQZoM0GaCUEBAAABVQAUFBQUFBQAAAAAAAAAAAAQAAAAAAAAAAEAAAAAAAAAAAAFAAAAQAAAAAAAAAEAAABQAAAAAAAAEFAAAABAAAAAAUABQAAABAAAAAAAEEAUAAAQAAAABAAAABQAAAAAAAAAAAAAAAAAAAdjSIAAAAAAAAAAAAAAAAAACKAAAAAAAAAAAAgCAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACgAAAAAAAAAAAIICUGaDNBmgzQSggIAAAKqACgoKCgoKAAAAAAAAAAAACAAAAAAAAAAAAAgAAAAAAAAAAoAACAAAAAAAAAAgAAAAKAAAAAAAAAgAoAAIAAAAAAACgAKAAAIAAAAAAAggACgAACAAAAAIAAAKAAAAAAAAAAAAAAAAAAADsaQBAAAAAAAAAAAAAAAAAAQBQAAAAAAAAAEAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAUAAAAAAAAAAABBASgzQZoM0GaCUEBAAABVQAUFBoFABQAAAAAAAAAAAQAAAAAAAAAAAAAAAEAAAAAAAFAAAQAAAAAAAAAAEAAAABQAAAAAAAAEAAAAAAAAAAAAAABQAAAAAAAAAAQARQQFAAAEAAAAQAAAUAAAAAAAAAAAAAAAAAAAHY0gACAAAAAAAAAAAAAAAAAgCgAAAAAAAAAIAgAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAoAAAAAAAAAAACCCpQZojNBmgzQSggIAAAKqACgoNAoAKAAAAAAAAAAACAAAAAAAAAAAAAAAAgAAAAAAAoCAAAAAAAAAAAAAAgAAKAAAAAAAAAAgAAAAAAAAAAAAAAKAAAAAAAAAAACCAKAAAAAIAAAgAoAAAAAAAAAAAAAAAAAAAAAOxpAAAEAAAAAAAAAAAAAAAABFAAAAAAAAAQBAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAABQAAAAAAAAAAAEEFSgzQZojNBmglBAQAAAVUAFBQaBQAUAAAAAAAAAAAEAAAAAAAAAAAAAAAABAAAAABQAEAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAFAAAAAAAAAAAAAAAEQFAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAB2NIAAAAgAAAAAAAAAAAAAAAIoAAAAAAAACAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAKAAAAAAAAAAAAggqUGaDNEZoM0EoICAAACqgAoKDQKACgAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAKAAgAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAADsaQAAAAAABAAAAAAAAAAAAQBQAAAAAAAAEAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAUAAAAAAAAAABABBUoM0GaIzQZoJQQEAAFAVABQUGgUAFAAAAAAAAAABAAAAAAAAAAAAAAAAAAQAAAAUAABAAAAAQAFAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAFAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAdjSAAAAAAAAIAAAAAAAAAACKAAAAAAAAAgACAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACgAAAAAAAAAAAIAIKlBmgzQZojNBKCAgAAoCoAKCg0CgAoAAAAAAAAAAAIAAAAAAAAAAAAAAAAACACgAAAAIAAACAAAAoAAAAAAAAAAAAAAAAAACAoIAAAAAAACgAACAAAoAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAA7GkAAAAAAAAQAAAAAAAAAAEUAAAAAAABAAAEAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAFAAAAAAAAAAAAQBUBKDNBmgzRGaCUEFQQFAAEFBQagKCgAoAAAAAAAAAAAIAAAAAAAAAAAAAAAAKAgAAAAAAIAAACAAAAoAAAAAAAAAAAAAAAAAAACAoIAAAAAAACgACAAAAoAAAAAAAAIAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAA7GkAAAAAAAAQAAAAAAAAAAEUAAAAAAABAUEAQAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAAAAAAAAAABABBUoM0GaDNBmiJQQVAAAAAVBQagLAUAFAAAAAAAAAABAAAAAAAAAAAAAAAAABQEAAAAAABAAAAQAAFAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAFAAEAAAABQAAAAQAAAAAAAAAAAAABBVABBAAAAAAAAAAAAAAAAAAAAdjSAAAAAAAAIAAAAAAAAACAKAAAAAAAAAgACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAACgAAAAAAAAAAAIoCAlBmgzQZoM0EoICAAAAAqCwGgUFABQAAAAAAAAAAQAAAAAAAAAAAAAAAAAUABAAAAAAQAAAAAAAAAAAAAAAFAAABAAAAAAEBQQFBAAAAAAAUAAAAQAAAAAAAAAAAAAAAAAAAAAAAFAAQAQAAAAAAAAAAAAAAAAAAHY0gAAAAAACAAAAAAAAAAAigAAAAAAAAAIAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAoAAAAAAAAAAACKAgJQZoM0GaDNBKCAgAAAKAgoNQFBQAUAUAAAAEAAAAQAAAAAAAAAAAAAAAAAUAABAAAAAAQAAAAAAAAAAAAAAFAAABAAAAAAAAAEAAABQQAAAFAAAAAAAAAEAAAAAAAAAAAAAAAAABUBQAQQAAAAAAAAAAAAAAAAAAHY0gAAAAACAAAAAAAAAAAAigAAAAAAAAAIAAgAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAoAAAAAAAAAAACKAgJQZoM0GaDNBKCAgAAAKAg0CwFBQAUUAAAAAAEAAQAAAAAAAAAAAAAAAAAVBAVQQAAAAAAEAAAAAAAAAAAAAABQAAAQAAAAABAUEBQAAAAAAQFAAAAAAABAUEEUAAAAAAAAAAAAAAAAAUBAAABAAAAAAAAAAAAAAAAAAdjSAAAAAAIAAAAAAAAAAACKAAAAAAAAAAgKCAIAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAKAAAAAAAAAAAAigICUGaDNBmgzQZoIAAAACgINAoKCgCqAAAAAAAAAIgAAAAAAAAAAAAAAoAACAAoIAAAAAACAAAAAAAAAAAAAAAAoAAIAAAAAAAAAgAKAAAAAAAAAAAAACAAACKAAAAAAAAAAAAAAAKgKCAAAACAAAAAAAAAAAAAAAAA7GkAAAAAQAAAAAAAAAAAAEUAAAAAAAAAABAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAFAAAAAAAAAAAQBQEBKDNBmgzQZoM0EAAAABQEGoCgoKKAoAAAAAAAAIAIAAAAAAAAAAAAAACgAAAAAIAAAAAACAAAAAAAAAAAAAAAAoIAAAAAAAgKACAAoAAAAAAAAAAAIAAAAAIAoAAAAAAAAAAAAAIKAoIAAAAAIAAAAAAAAAAAAAAADsaQAAAABAAAAAAAAAAAAFEAAAAAAAAAAAAEAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAAAAAAAAABAFAQGaCUGaDNBmgyCAAAAAqADUBQUFFAUAAAAAAAAEAAAEBQQAFABAUEBQAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAEBQAAAAAAAAAAAAQAAAAAAFEAAAAAAAAAAAAAQAUBQQAAAAAAAAQAAAAAAAAAAAAHY0gAAACAAAAAAAAAAAAAigAAAAAAAAAAAAIAgAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAoAAAAAAAAAACAKAgM0EoMUGaCUGQQAAAAFQUFBQUFFAUAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBQAAEAAAAAAAEUAAAAAAAAAAAAEAFAAAAAAAAAAABAAAAAAAAAAAAdjSAAAAIAAAAAAAAAAAACKAAAAAAAAAAAAAAiAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAACgAAAAAAAAAAAIAoCAzQZoM0GaCUGQQAAAAFQUFBYCgooCgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAIAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAKAgAAAAAAKAAAACAoAgAAAAACACgAAAAAAAAAAAAgAAAAAAAAAAOxpAAAEAAAAAAAAAAAAAAUQAAAAAAAAAAAAAEEAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAABQAAAAAAAAAAAEAUBAZoM0GaDNBKDIIAAAACoKCgoKKoAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAqAAAAAAAAoICggAAKAIAAAAgKCACgAAAAAAAAAAAgAAAAAAAAAAOxpAAAEAAAAAAAAAAAAAAUQAAAAAAAAAAAAAEEAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAABQAAAAAAAAAAEAUABKDNBmgzQZoJQZABAAAAVBQUFBRVABQAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAFQAAAAAAAAFBAAAUAAAQAAABAAABQAAAAAAAAAAAQAAAAAAAAAHY0gAAACAAAAAAAAAAAAAKIAAAAAAAAAAAAACCAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAoAAAAAAAAAACAKAgFBmgzQZoM0EoMgAgAAAKgoLAUFFUAFAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAQAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAVAAAAAAAAAAAAAAUAQAAABAAAAAABQAAAAAAAQAAAAAAAAAAHY0gAAACAAAAAAAAAAAAAKIAAAAAAAAAAAAAIgAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAoAAAAAAAAAACAAKgJQSgzQZoM0GaCAgAAAAKgoLAUFFUAFAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAQAAAEAAAAAAAAAABQAAAAQAAAAAAAAAAAAAAAEAAAAAEBQAAABBQAAAAAAAAAAAFAAAEAAAQAAAAAAAAUAAAAAEAAAAAAAAAAB2NIAAAAgAAAAAAAAAAAACiAAAAAAAAAAAAACIAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAKAAAAAAAAAAAgACoCUEoM0GaDNBmggIAAAACoKCwFBRVABQAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAEAAABAAAQAFAAAABQAAAAAAQAAAAAAAAAAAAAEAAAABBAAFFAAAEFAAAAAAAAAAAAAUAAAQBAAAAAAAAAAABQAAQAAAAAAAAAAAHY0gAAACAAAAAAAAAAAAAigAAAAAAAAAAAAAIgAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAoAAAAAAAAAACAAKgJQZoM0GaDNBKCAgAICgAqCgsBQUVQAUAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAABAAAQAAEAAABQAAAUAAAAAAEAAAAAAAAAAAAAABAAAAQQABQBQABABQAAAAAAAAAAAAFAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAdjSAAAAIAAAAAAAAAAAAogAAAAAAAAAAAAAAiAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACgAAAAAAAAAAIoACAlBmgzQZoM0EoMgAgAAKCoKCwFBRVABQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAABAAAQAAAFAAABQAAAAAAQAAAAAAAAABAUAAAQAAAAEEBVEBQABABQAAAAAAAAAAAFAAAABABAAAAAAAAAAAAAAAAAAAAAAAAAdjSAAAAIAAAAAAAAAAACKAAAAAAAAAAAAAAgCAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACgAAAAAAAAAAAIoACAlBmgzQZoM0GaCAgAAAKCoLAWA0AKoAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAgAAAIAACAAAAoAAAKAAAAAACAAAAAAAAAAICgAACAAAAAACAoAAAgAoAAAAAAAAAAAACgAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAOxpAAAEAAAAAAAAAAAUAQAAAAAAAAAAAAAAQBAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAABQAAAAAAAAAABRAABAZoJQZoM0GaDNBAQAAAFBUFgLAaAFUAFAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAQAAQBBQAAEAABQAAAUAAAAAAEAAABAAAUAAAAABAABAFAAAAAAABAABQAAAAAAAAAAAAFBAUEAAAAEAAAAAAAAAAAAAAAAAAAAAAB2NIAAAgAAAAAAAAAACiAAAAAAAAAAAAAAACAAIAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAKIAAIDNBmgzQZoM0EoICAAAAoLEFgNAoKKAAoAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACAAACAIKAAAAAAAAAoAAAAAAIAACAAAAoAAAAAACAACAAKAAAAACAACgAAAAAAAAAAAAAAKCAAAAACAAAAAAAAAAAAAAAAAAAAAA7GkAAQAAAAAAAAAABQBAAAAAAAAAAAAAAABAAEAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAFEAEABmgzQZoM0GaCUGQAAAAUFiCwFgNAooACgAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAICggKgAAAAAAAAAKAAAAAACAAAgAAAAKAAAAAgKCAACAAKAAACAAACgAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAKCAAAAAAA7GkAQAAAAAAAAAAABRAAAAAAAAAAAAAAAABAAEAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAFEAEBKCUGaDNBmgzQZoIACAoAKCoLAWA0AKoAKAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAgAAAKAgAAAAAAAAKAAAAACAAAAgAAAAKAAAAgAKACAACAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAACgAAAgAAAAOxpAEAAAAAAAAAAAAUQAAAAAAAAAAAAAAAAAQABAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAABQAAAAAAAAABQBABASglBmgxQZoM0EoICAAAoKCxBYCgsBRVABQAAAAAAAAAAAAQAAAAAAAAAAAAAAAEAAAAEAABQAEAAAAAAABQAAAAAAQAAEAAAAABQAAAAAAEBQQAAQAAAAAAFAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAUAAAEAAAAB2NIgAAAAAAAAAAACgCAAAAAAAAAAAAAAAACAAAAIAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAKAIAICUGaDNBmgzQZoJQQEAABQAVBqAsBYCiqAACgAAAAAAAAAAAgAAAAAAAAAAAAAIAAAAIAAAACgAAIAAAAAACgAAAAAAgAAIAAAAACgAAAAAAIAAAAAAAAIAACgAAAAgAAKACAAAAoAAAAAAIAAAAAAAAAAAAACgAAAAgAAAOtpAAAAAAAAAAAABRAAAAAAAAAAAAAAAAABAAAAEAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAFAEAEBKDNBmgzQYoJQZABAAAAUFQWA1AWAoKKAAoAAAAAAAAAAAIAAAAAAAAAAAAACAAAAAACAAoAAACAAAAAAAAoAAAAAIAAACAAAAoAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAACgAAAAAgAAOtpAAAAAAAAAAAABRAAAAAAAAAAAAAAAAABAAAAEAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAFEAAEBmgzQZoM0GaDNBAQAAAAFBUFgNQFgKCigAKAAAAAAAAAAAACAAAAAAAAAAAAgAAgKCAAAAAAoAACAAAAAAAAAoAAAAIAAACAAAAoAAAAAAAAAAACAAAAAAAACAAAAAAAAAAAKACAAACggAAAAAAAAAAAAAAAKAAAAACAAA62kAAAAAAAAAAAAFEAAAAAAAAAAAAAAAAAEAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAUQAQEoJQZoM0GKDNBKCAgAAAAKCoLAagLAUFFAAUAAAAAAAAAAAAEAAAAAAAAAAABAABAUEAAAAAABQAEAAAAAAAAABQAAAQAAAAEABQAAAAAAAAAAAAEAAAAAAAEAAAAAAAAAAAUAAEAAAAAAAAAAAAAAAAAAAAAAFAAABAAAdbSAAAAAAAAAAAACiAAAAAAAAAAAAAAAAACAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAigICUGaDNBmgzQZoJQQEAAAABQVBYDUBYCgooACgAAAAAAAAAAAAAAgAAAAAAAAAIAAAAAAIAAAACgAAIAAAAAAAAACgAAgAAAAIACgAAAAAAAAAAAAAIAAAAAIAAAAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAOxpEAAAAAAAAAAAAUAQAAAAAAAAAAAAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAFAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAABRABAZoJQZoMUGaCUGQQAAAAAFBUFgNQFgKCigAKACAAAoAAAAAAAAAAAAAAIAAAAACAAAAACAoIAACgAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAgAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAoOtpEAAAAAAAAAAAAABFAAAAAAAAAAAAAAAQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAFAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAABQBBAQEoM0GaDNBmgzQQEAAAAABQVBYDUBYCgooACggAAAAKAAAAAAAAAAAAACAAAAAAgAAgAKCAoICgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAoOtpEAAAAAAAAAAAAAAUQAAAAAAAAAAAAAAQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAFAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAABQBBASglBmgzQYoJQZoICAAAAAAoKgsBqAsBQUUAAAAAAABQAAAAAAAAAAAAAAQAAAAEAAAEBQQFBAAAUAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAEAAAAAAAAUEAABQAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAUHU0gAAAAAAAAAAAAAAogAAAAAAAAAAAAAAgAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAACgIglBmgzQZoM0GaCAgIAAAACgIKDUBYCwFBRQAAAAAAAAFAAAAAAAAAAAAABAAAAAQAAAAAQFBAAAAUAAABAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAFAAAAAAQAAQAABQAQFAABAAUAAAAAEAAAAAAAAAAAAAAAAAAAEAABQAAAdbSAAAAAAAAAAAAAACiAAAAAAAAAAAAAACAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAoAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAKAiCUGaDNBmgzQZoICAgAAAAKAgoNQFgKCgooAAAAAAAACgAAAAAAAAAAAAAgAAAAIAAAICggAAAAKAAAAAgAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAgAAAAAAAACAAAoAAAAIAAAAAAAAAAAAAAAAAAIAAAACgAA62kAAAAAAAAAAAAAAFEAAAAAAAAAAAAAAEAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAFAQBBmgzQZoM0GaCUEBAQAAAAFBUFBYCwGgAUUAAAAAAAABQAAAAAAAAQAFAABAAAAAAQAAAAAAQAFAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAEAAAAABQAAAAAAAAAAQAAAAABAAAAAUAAAEAAAAAAAAAAAAAAAAAAEAAAAABQAdbSAAAAAAAAAAAACiAAAAAAAAAAAAAAAACAoIAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAKAgJUEoM0GaDNBmglBAQAEAABQAVBQWA1AUFAFAAAAAAAAAUAAAAAAAEAAAABQQAAAAAEAAAAAEABQFAABAAAAAQAAAAAAEABQAAAAAAAAAAAQAAAAAAFAAAAAAAAAAABAAAAEAAAAAAABQQAAAAAAAAAAAAAAAAAAAAQAAAAFAB1tIAAAAAAAAKAIAAAAAAAAAAAAAAAAAAIAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAKgJUEoM0GaDNBmglBAQAAAAABBQWA1AWAoKKAAoIAAAAAACgAAAAAAAgAAAAAAAAAAAIAAAAICgAAKAAACAAAAAAgAAAIAAAACgAAAAAAAAAAgAAAAKAAAAAAAAAAAAAACAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACgA62kAAAAAAFEAAAAAAAAAAAAAAAAAAAEAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAFQEqDNBKDFBmglBkAEAAAAABUFBYCwFgKCigKACAAAAAAAoAAAAAAIAAAAAAAAAAAAACAAAAAAAoAAAAIAAAAAACAAAAgAAAKAAAAAAAAAACAAAoAAAAAAAAAAAAAAAAAIAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAKADraQAAAAUQAAAAAAAAAAAAAAAAAAQAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAERUoM0GaDNBmglBkAEAAAABUAFBQUFBQUUBQAQAAAAAAAFAAAAABAAAAAAAAAAAAAAQAAAFEBQAAAAEAAAAAAABAAAAQQAAFAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAUAAAAEAAAAAAAAAAAAAAB1tIAAAKIAAAAAAAAAAAAAAAAAIAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACIqUGaDNBmgzQSgyAAAAAAgAAoKCgoKCigKACAAAAAAAAoAAAAAIAAAAIACgAAAAAAIAICgKAAICgIAAAAAAAAAACAAAggAAKAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIgAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAACAAA7GkAAFEAAAAAAAAAAAAAAAAAEAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAABEGaKlBmgzQZoM0EAAAAAQAAUAFBQUFFUAFAABAAAAAAAUAAAAAEAAAEAAAABQAAAAAEAABQAAAAQAAAAAAAAAAEAABABAAUABQAAAUEAAAAAAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAFAAAAAAAABAAAAAAAAAQAAAHY0gACKAAAAAAAAAAAAAAAAAgAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAgzRUoMUEoM0GQAQAAABBQAAUAFBQUVQAUAAEAAAAABQAAAAAAQAAEEAAAUAAAUAAEAQUEBVAAABAAAAAAAAAAAAAQAAEEABQAFAAABQAQAAAAAAAAAAAAAAAAAAAAAAAAEQAUAAAAAAAAAAAAAAAAAAAAAEAAAAAAABAAAAAdjSACiAAAAAAAAAAAAAAAACAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAgIglFZoM0GaCUGQAQAAFQAAAAUFABQUVQAUAAEAAAAABQAAAAAAQAARAAAAAUAAUAEAAQAAVQAAAQAAAAAAAAAAAAEAABBAAUBQAAAUAAAEAAAAAAAAAAAAAAAAAAAAAAABEAFAAAAAAAAAAAAAAAAAAAAABAAAAAAAQAAAAAH/2Q==",skyBoxRight:"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAFA3PEY8MlBGQUZaVVBfeMiCeG5uePWvuZHI////////////////////////////////////////////////////2wBDAVVaWnhpeOuCguv/////////////////////////////////////////////////////////////////////////wAARCAgACAADAREAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAAECA//EABUQAQEAAAAAAAAAAAAAAAAAAAAB/8QAFwEBAQEBAAAAAAAAAAAAAAAAAAECA//EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhEDEQA/ADKgAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgCgACAAAACKCqKACggAICCIogAIAAAAAAAAAAAAAAIAAAAAACggKoAKDQKCgoAKAACgAAAKgACAAAAAAAAgAAAACgCAAAAAAAAgAAAAAAAIAAAAAAAACAAAAACAoAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAoAAgAAAAigAqigAAAgIIgIoAAgAAAAAAAAAAAAAgAAAAAAKAAoAKDQKCgoAKAACgAAAKgACAAAAAAAAgAAAACgCAAAAAAAAgAAAAAAIAAAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAOrk2AAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAKAAIAAAIoAKooAAAICCICKAAIAAAAAAAAAAAAAIAAAAACgAAKACgoNAoKACgAAoAAAgoAAgAAAAAAAIAAAAAoAgAAAAAAAIAAAAAACAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgCgACAAAACKCqAKAACAgiAKIAACAAAAAAAAAAAAACAAAAAoAACgAoKDQKCgAoAAKAAAIKAAIAAAAAAACAAAAAKAIAAAAAAACAAAAAAAgAAAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAKAAIAAAAIoCigoAAIACCIogAAIAAAAAAAAAAAAAIAAAACgAAKACgoNAoAKCgAAoAAAgoAAgAAAAAAAIAAAAoAAgAAAAAAAIAAAAAACAAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAoAAgAAAigAqgCgAAgIIgCiAAAgAAAAAAAAAAAAgAAAAKAAAoAKCg0CgAoKAACgAACCgACAAAAAAAAgAAACgACAAAAAAAAgAAAAAAIAAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAOrk2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAigACAAAACKCqAKAACAggCKIAACAAAAAAAAAAAACAAAAAoAACgAoKDQKACgoAAKAAAIKAAIAAAAAAACAAAAKAAIAAAAAACAAAAAAAAgAAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACKAAAIAAAIoAKooAAAICCIoAgAAIAAAAAAAAAAAIAAAACgAAKACgoNAoAKCgAAoAACoAAAgAAAAAAAIAAAAoAAgAAAAAAIAAAAAAACAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIoAAAgAAAigAqigAAAAgiAiiAAAgAAAAAAAAAAAgAAAKAAAAoAKCg0CgAoKAACgAAKgAACAAAAAAAAgAAACgACAAAAAAAgAAAAAAAIAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAOrk2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAigACAAAACKCqKACgAgIIgIoAgAAIAAAAAAAAAAAAIACgAAAKACgoNAoAKCgAAoAACoAAAgAAAAAAIAAAAAoAAgAAAAAAIAAAAAAACAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAigAACAAACKCgKKCgAAgIIiiAgAAIAAAAAAAAAAAAICgAgKAAoAKCgoNAAoKAACgAAKgAACAAAAAAAgAAAACgACAAAAAAAgAAAAAAAIAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAOrk2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAACAKAAIAAACiAKooKAAACCIDKgCAAgAAAAAAAAAAAAAAgAKAAoAKCgoNAAoKAACgAAKgAACAAAAAAAgAAAACgCAAAAAAAAgAAAAAAAIAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAOrk2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAACAKAAIAAACiAKCqKCgAgIIlBFEBAAQAAAAAAAAAAAAAAQFAAAUAFBQUGgAUFAABQAAFQAABAAAAAAAQAAAABQBAAAAAAAAQAAAAAAEAAAAAAAAABAAAAAAAAAAQAAAAAAAAAAAEAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAHVybAAAAAAAAAAAAAAAAAAAAAUAAAAAEAAAAAAAAAAAAAAAAAAAAAABQAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAEAAUAAQAAFAEUFUUFAABAZoiKICAAAgAAAAAAAAAAAAAgKAAAoAKCgoKCgoKAACgAAKgAACAAAAAAAgAAACgACAAAAAAAgAAAAAAAIAAAAAAAAACAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAOrk2AAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAIAoAAgAAAKIoKooKAACAlESgyoAgAIAAAAAAAAAAAAAICgAAKACgoKCgoKCgAAoAACgIAAgAAAAAAIAAAAoAAgAAAAAAIAAAAAAACAAAAAAAAAAgAAAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAACAAKAAIAACiKCgqigAAgJREoIogIACAAAAAAAAAAAAAAAAAAoAKCgoKCgoKAACgAAKAgACAAAAAAAgAAAACgCAAAAAAAgAAAAAAAIAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAOrk2AAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAIAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAIAoAAgAAKAIoKooKAACCM0EUQEABAAAAAAAAAAAAAAAAAAUAFBQUFBQUFAABQAAFAQABAAAAAAAQAAAABQBAAAAAAAQAAAAAAEAAAAAAAAABAAAAAAAAAAAQAAAAAAAAAAEAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAHVybAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAEAAAAAAAAAAAAAAAAABQAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAUAQAAFAEUFUUFAABASiM0EUQAEAAAAAAAAAAAAAAAAABQAUFBQUFBQUAAFAAAUBAAEAAAAAABAAAAAFAEAAAAAABAAAAAAAQAAAAAAAAAEAAAAAAAAAABAAAAAAAAAAAQAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAdXJsAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAQAAAAAAAAAAAAAAAAFAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBQABAAUARQVRQUAAEBKIlBlQBAAQAAAAAAAAAAAAAAAAFABQUFBQUFBQAAUAABQEAAQAAAAAAEAAAAAUAQAAAAAAEAAAAAABAAAAAAAAAAQAAAAAAAAAAEAAAAAAAAAABAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAB1cmwAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAABAAAAAAAAAAAAAAAAUAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAABAFAAAEBQBFBQVQBQAQEoiUEUQEABAAAAAAAAAAAAAAAAAUAFBQUFBQUFAABQAAFAQABAAAAAAAQAAAABQBAAAAAAAQAAAAAAEAAAAAAAABAAAAAAAAAAAAQAAAAAAAAAAEAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAHVybAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAEAAAAAAAAAAAAAAABQAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAEAUAAAQAFAEUFUUFABAAZoiKICAAgAAAAAAAAAAAAAAAAKACgoKCgoKCgAAoAACgIAAgAAAAAAIAAAAAogAAAAAAAIAAAAAACAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAKAACAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAIAoAAgAKAIoKooKAACAgjNBFEAABAAAAAAAAAAAAAAAAUAFBQUFBQUFAABQAAFAQABAAAAAAAQAAAABRAAAAAAAQAAAAAAAEAAAAAAAABAAAAAAAAAAAAQAAAAAAAAAAEAAAAAAAAAAAABAUAEAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAdXJsAAAAAAAAAAABQAAAQAAAAAAAAAAAFAAAAAABAAAAAAAAAAAAAAAUAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAFAAAEBQBFBQVQBQAQEESgiiAgAIAAAAAAAAAAAAAAACgAoKCgoKCgoAAKAAAoCAAIAAAAACAAAAAAKIAAAAAACAAAAAAAAgAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAA6uTYAAAAAAAAAAAACgAAgAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACKAAAICgACKCqKAAACAgiKICAAgAAAAAAAAAAAAAAAKACgoKCgoKCgAAoAACgIAAgAAAAAIAAAAAAogAAAAAAIAAAAAAACAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACKAAAAICgCKCqAKAACAgiAiiAAAgAAAAAAAAAAAAAAKACgoKCgoKCgAAoAACgIAAgAAAAAIAAAAAAogAAAAAAIAAAAAAACAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACKAAAICgCAKCqKAACACIDKgCAAgAAAAAAAAAAAAAAKACgoKCgoKCgAAoAACgIAAgAAAAAIAAAAAAogAAAAAAIAAAAAAACAAAAAAAAAgAAAAAAAAAAIAAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKACAAAAAAAAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACKAAAAAAAigqgCgAAgIIgIogAIAAAAAAAAAAAAAACgAoKCgoKCgoAAKAAAoCAAIAAAAACAAAAAKAIAAAAAACAAAAAAAAgAAAAAAAAIAAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAACiAAAAgKAIoAKooAAICCICKIAACAAAAAAAAAAAAAAoAKCgoKCgoKAACgAAKAgACAAAAAAgAAAACgCAAAAAAAgAAAAAAAIAAAAAAACAAAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAOrk2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAACKAAAAAAAigqgCgAgAiAiiAgAIAAAAAAAAAAAAACgAoKCgoKCgoAAKAAAoCAAIAAAAACAAAAAKAIAAAAAACAAAAAAAgAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAACiAAAAAACKAooKAACAgiKICAAgAAAAAAAAAAAAAKACgoKCgoKCgAAoAACgIAAgAAAAAIAAAAAoAgAAAAAAIAAAAAACAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAigAAAAAIoCigoAAICCIogIAACAAAAAAAAAAAAAoAKCgoKCgoKAACgAAKAgACAAAAAAgAAAACgCAAAAAAAgAAAAAAIAAAAAAAACAAAAAAAAAAAgAAAAAAAAAIAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAOrk2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAIAAAACgAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAIoAAAACAKCqAKACAgiKICAAAgAAAAAAAAAAAAKACgoKCgoKCgAAoAACgIAAgAAAAAIAAAAAoAgAAAAAAIAAAAAACAAAAAAAAAgAAAAAAAAAAIAAAAAAAAACAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAoAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACKAAAAAAigqgCgAgIIiiAgAAIAAAAAAAAAAAACgAoKCgoKCgoAAKAAAoCAAIAAAAACAAAAAKAIAAAAAACAAAAAAAgAAAAAAAAIAAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAIAoAAAACKAooAKCAgiKIACAAgAAAAAAAAAAAAKACgoKCgoKCgAAoAAAgoAAgAAAAAIAAAAAoAgAAAAAAIAAAAAACAAAAAAAAAgAAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAigAAAAIAqigAAAgiKICAAAgAAAAAAAAAAAAKACgoKCgoKCgAAoAAAgoAAgAAAAAIAAAAAoAgAAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAigAAAAIAqigAAAgiAiiAAgAAAAAAAAAAAAAKACgoKCgoKCgAAoAAAgoAAgAAAAAIAAAAAoAgAAAAAIAAAAAAACAAAAAAAAgAAAAAAAAAAIAAAAAAAAACAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgCgAAAAIqgCgAgAiAiiAAgAAAAAAAAAAAAAKACgoKCgoKCgAAoAAAgoAAgAAAAAIAAAAAoAgAAAAAIAAAAAAACAAAAAAAAgAAAAAAAAAAIAAAAAAAAACAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAigAAAAIAqgAACCAIogAIAAAAAAAAAAAAACgAoKCgoKCgoAAKAAAIKAAIAAAAACAAAAAKAIAAAAACAAAAAAAAgAAAAAAAIAAAAAAAAAACAAAAAAAAAAgAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAA6uTYAAAAAAACAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgCgAAAIAKKAACCIAogAIAAAAAAAAAAAAACgAoKCgoKCgoAAKAAAIKAAIAAAAACAAAAAKIAAAAAACAAAAAAAAgAAAAAAAIAAAAAAAAACAAAAAAAAAAgAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAA6uTYAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAigAAAIAKAAAAIIKIACAAAAAAAAAAAAAAoAKCgoKCgoKAACgAACCgACAAAAAAgAAAACiAAAAAAAgAAAAAAIAAAAAAAACAAAAAAAAAAgAAAAAAAAAIAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAIDs5NgAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAIoAAAACCgAAACCCiAAgAAAAAAAAAAAAAKACgoKCgoKCgAAoAAAgoAAgAAAAAIAAAAAogAAAAAAIAAAAAACAAAAAAAAAgAAAAAAAAAIAAAAAAAAACAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACAA6uTagAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAAigAAAIAKAAIAIAigACAAAAAAAAAAAAAoAKCgoKCgoKAACgAACCgACAAAAAAgAAACgCAAAAAAAgAAAAAAIAAAAAAACAAAAAAAAAAAgAAAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAIADq5NqAACAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAoAAAIAAAAAAAAAAAAACgAAAgAAAAAAAAAAIoAAACACgAACACIoAAgAAAAAAAAAAAAKACgoKCgoKCgAAoAAAgoAAgAAAAAIAAAAoAgAAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACAAA6uTagAAAgAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAKAAAAACAAAAAAAAAAAoAAAAIAAAAAAAAAAAAogAAAAgoAAAgAiKAAIAAAAAAAAAAAACgAoKCgoKCgoAAKAAAIKAAIAAAAACAAAAKAIAAAAAACAAAAAAAgAAAAAAAIAAAAAAAAACAAAAAAAAAAgAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAgAAOzk2AAAAgAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAKAAAAAAACAAAAAAAAAAoAAIAAAAAAAAAAAAAAogAAAAgoAAAAggCKAIAAAAAAAAAAAACgAoKCgoKCgoAAKAAAoCAAIAAAACAAAAAKAIAAAAAACAAAAAAAgAAAAAAAIAAAAAAAAACAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAgAAAOzk2AAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAAAAAAAAKACAAAAAAAAAAAAAAAAKIAAAIAKAAAAiAigACAAAAAAAAAAAAoAKCgoKCgoKAACgAAKAgACAAAAAgAAAACgCAAAAAAgAAAAAAAIAAAAAAACAAAAAAAAAAgAAAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAIAAADs5NgAAAAAAIAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAogAAAgAoAAAAggogAIAAAAAAAAAAACgAoKCgoKCgAoAKAAAoCAAIAAAACAAAAAKAIAAAAACAAAAAAAgAAAAAAAAIAAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAgAAAOzk2AAAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAACgCAAACCgCggAIIKIACAAAAAAAAAAAAoAKCgoKCgoAKACgAAKAgACAAAAAgAAAACgCAAAAAAgAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAIAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAIAAADs5NgAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAogAAAgCqAAIAIgIoAAgAAAAAAAAAAKACgoKCgoKACgAoAACgIAAgAAAAIAAAAAogAAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAIAAAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAA7OTYAAAAAAACAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAoAIAAAAAAogAAAgCqAAIACCIoAAgAAAAAAAAAAKACgoKCgoKACgAoAACgIAAgAAAAIAAAAAogAAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAIAAAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAACAAA7OTYAAAAAAACAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAIAAAAAoAgAAgAooAIACCCiAAgAAAAAAAAAAKACgoKCgoKACgAoAACgIAgAAAAAIAAAAAogAAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAACAAA7OTYAAAAAAACAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAAAAAAoAAIAAAAAoAgAAAgoAoIACCCiAAgAAAAAAAAAAKACgoKCgoKACgAoAACgIAgAAAAAIAAAAAogAAAAAIAAAAAAACAAAAAAAAgAAAAAAAAAIAAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACAAAA7OTYAAAAAAAACAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAAAAAAoAAIAAAAAAogAAAgAoAAAggogAIAAAAAAAAAACgAoKCgoKCgAoAKAAAoCAIAAAAACAAAAAKIAAAAACAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAOzk2AAAAAAAAAgAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAKAAACAAAAAKAIAAIAKAAAIAIigCAAAAAAAAAAAoAKCgoKCgoAKACgAKAAgCAAAAAAgAAAACiAAAAAAgAAAAAAIAAAAAAACAAAAAAAAAAgAAAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAIAAADs5NgAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoIAAAAAAAAAAAAAAAAAAAAAACgAAgAAAACgCAACACgAACACIoAAgAAAAAAAAAKACgoKCgoKACgAAoCgAIAgAAAAAIAAAAAogAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACAAAA7OTYAAAAAAAACAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAAAogAAAgoAAAgAiKAAIAAAAAAAAACgAoKCgoKCgAoAAKAoACAIAAAAACAAAAAKIAAAAACAAAAAAAgAAAAAAAIAAAAAAAAACAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAOzk2AAAAAAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAAKAIAAIAKAAIAIKIACAAAAAAAAAAoAKCgoKCgoAKAACgAKAgCAAAAAgAAAAACiAAAAAAgAAAAAAIAAAAAAACAAAAAAAAAAgAAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAIAAADs5NgAAAAAAAAAAIAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAACgCAAACCgACAAKiAAgAAAAAAAAAKACgoKCgoKACgAAoACgIAgAAAAIAAAAAAogAAAAIAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACAAAAA7OTYAAAAAAAAAAACAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAoAgAAAgoAAgACogAAIAAAAAAAACgAoKCgoKCgAoAAKAoACAIAAAACAAAAAAigAAAACAAAAAAAgAAAAAAAIAAAAAAAAACAAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAOzk2AAAAAAAAAAAAgAAAAAAAAAAAKAAAAACgAgAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAoAgAAAgoAgAAiKAAIAAAAAAAACgAoKCgoKCgAoAAKAoACAIAAAACAAAAAKIAAAAACAAAAAAAgAAAAAAAIAAAAAAAAACAAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAOzk2AAAAAAAAAAAAAgAAAAAAAAAAKAAAAACgAAgAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAACgAAAgAAACgCAAACCgCAACIoAAgAAAAAAAAKACgoKCgoKACgAAoCgAIAgAAAAIAAAAAogAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAIAAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAOrk2AAAAAAAAAAAAAAgAAAAAAAAAKAAAAACgAAgAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAACgAAAgAACgCAAACCgACAAKiAAgAAAAAAAAKACgoKCgoKACgAAoCgAIgAAAAAIAAAAACKAAAAAIAAAAAACAAAAAAAAgAAAAAAAAIAAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAIAAAAAACgAAAAAoAIAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAKAAAAAAAAAACAAAAAAAAAAAoAAAIAAAAoAgAAAgoAgACogAAIAAAAAAAACgoKCgoKCgAoAAKAoACIAAAAACAAAAAAigAAAACAAAAAAAgAAAAAAAIAAAAAAAACAAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAIAAAAAAAAAACgAAgAAACgCAAACCgACACCiAAgAAAAAAAAKCgoKCgoKACgAAoCgAIgAAAAAIAAAAAogAAAAAIAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAAAAACgAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAACiAAACCgACAAKiAAAgAAAAAAAKCgoKCgoKACgAAoCgAIgAAAAAIAAAAAogAAAAAIAAAAACAAAAAAAAgAAAAAAAAAIAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADq5NgIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAoAgAAAgoAAgCoAgAIAAAAAAACgoKCgoKCgAoAAKAoACIAAAAACAAAAAKIAAAACAAAAAAAgAAAAAAAIAAAAAAAACAAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAACgCAAACCgAACCCiAAAgAAAAAKACgoKCgoKACgAAqgAAIgAAAAAIAAAAAogAAAAIAAAAAACAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAKAIAAAIKAAAAiKAIACAAAAAAoAKCgoKCgoAKAACqAAAiAAAAAAgAAAAIoAAAAAgAAAAAIAAAAAAACAAAAAAAAAAgAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKADo5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAKAIAAIAKAAAIqAIACAAAAAAoAKCgoKCgoAKAACqAAAiAAAAAAgAAACiAAAAAAgAAAAAIAAAAAAACAAAAAAAAAAgAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAgAA6ObYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAACgCAAACCgAAAIiiAAAgAAAAKACgoKCgoKACgAAqgAAIgAAAAAIAAAAogAAAAAIAAAAACAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAIAKAADbm2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAoAgAAAgoAAACIogAAIAAAACgAoKCgoKCgAoAAKoAACIAAAAACAAAAKIAAAAACAAAAAAgAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAoACACgAAoArTm0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAoAgAAgoAAAggogAAIAAAACgAoKCgoKCgAoAAKoAACIAAAAACAAAAAigAAAACAAAAAAgAAAAAAIAAAAAAAAACAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAoACACgAoAoACgrm0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAgAAgAoAAggogAAIAAAACgAoKCgoKCgAoAAKoAACIAAAAACAAAAAigAAAACAAAAAAgAAAAAAIAAAAAAAAACAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAoAACCgAAooCgAAArm0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAgAAAgoAgACogAAIAAAACgAoKCgoKCgAoAAKoACAIAAAACAAAAAKIAAAAACAAAAAAgAAAAAAIAAAAAAAAACAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAoACCgAAoAqgAAoAADm0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAgAAgogAAAiKAAAIAAACgAoKCgoKCgAoAAKAoCAIAAAACAAAAAKIAAAAACAAAAAAgAAAAAAIAAAAAAAAACAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAoAACCgAoAoCgAoAAAKCObQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgCAACCiAAACIoAAAgAAAKACgoKCgoKACgAAKKACCAAAAAIAAAAAogAAAAAIAAAAACAAAAAAAgAAAAAAAAAIAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACgAAIKAACgCqACgAAAoAAI5tAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAAAKAIAAIAigAAIigAAACAAAoAKCgoKCgoAKAAAooAIIAAAAAgAAAACiAAAAAAgAAAAAIAAAAAACAAAAAAAAAAgAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAKAAAAgoAAKAAKoAKAAACgAAAjm0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAAoAgAAAiKAAAiKAAAAIAACgAoKCgoKACgoAACigAggAAAACAAAAAigAAAACAAAAAAAgAAAAAAIAAAAAAAACAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAoAAACCgAAoAAqgAAoAAAAKAAACObQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAACgCAACIoAAAioAAAAgAAKACgoKCgoAKCgAAKKACCAAAAAIAAAACKAAAAAIAAAAAACAAAAAAAgAAAAAAAAIAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAqAAACgACqAACgAAAAAoAAAI5tAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAKAIAAIgCgACKgAAAACAAoAKCgoKCgAoKAAAooAIIAAAAAgAAAAIoAAAAAgAAAAAAIAAAAAACAAAAAAAAAgAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAKAAAACoAAAKAAKoAAAKAAAAAAAAAAA5tAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAKAIAACCCgACCCgAAACAoAAKCgoKCgAoKAAAooAIIAAAAAgAAAAIoAAAAAgAAAAAAIAAAAAACAAAAAAAAAgAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAKAAAAAgoAAKAACigAAAKAAAAAAAAAAAA5tAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAKIAAAIigAAIigAAAAAAACgoKCgoAKCgAAKKACCAAAAAIAAAACKAAAAAIAAAAAACAAAAAAgAAAAAAAAAIAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAACgAAAAAqAACgAAAooAAACgAAAAAAAAAAAAjm0oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAKAIAAIigAAIigAAAAAAACgoKCgoAKCgAAKKACCAAAAAIAAAACKAAAAAIAAAAACAAAAAAAgAAAAAAAAAIAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAACgAAAAAAAqAACgAAAooAAACgAAAAAAAAAAAAAjm0AoAAAAAAAAAAAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAogAAiAKAAIqAAAAAAAAKCgoKCgAoKAAAooAIIAAAAAgAAAAIoAAAAAgAAAAAIAAAAAACAAAAAAAAAAgAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqAACgAAAooAAAAAAAACgAAAAAAAAAjm0AAoAAAAAAAAAAAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAogAAAiKAACogAAAAAAAKCgoKCgAoKAAAoAACAAAAAIAAAACKAAAAAIAAAAACAAAAAAAgAAAAAAAAIAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKgAAAoAAAKKAAAAAAAAAAAoAAAAAAAI5tAAKAAAAAAAAAAAAAAAAAAAAAAAACAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAKAIAAIigAAqIAAAAAAACgoKCgoAKCgAAKAAAgAAACAAAAAAigAAAACAAAAAAgAAAAAAIAAAAAAAACAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACoAAKAAAACgCgAAAAAAAAAAAAAAAAADm0AAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAKAIAAIigAAIigAAAAAACgoKCgoAKCgAAKAAAgAAACAAAAAgCgAAACAAAAAAAgAAAAAAIAAAAAAAACAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAACgIAAAKAAAAAACigAAAAAAAAAAAAAAADm0AAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAKIAAIAigAAqIAAAAAACgoKCgoAKACgAKAAAgAAACAAAAAgCgAAACAAAAAAAgAAAAAIAAAAAAAAACAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACoAAAAKAAAAAAAAKAAoAAAAAAAAAAADm0AAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAKAIAAIigAAqIAAAAAACgoKCgoAKACgAKAAAgAAACAAAAAgCgAAACAAAAAAAgAAAAAIAAAAAAAAACAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACoAAAAAAKAAAAAAAKAAAAAAAAAAAArm0AAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAAAAAKAIAAIKIAAqIAAAAAACgoKCgoAKACgAKAAAgAAACAAAAAgCgAAACAAAAAAgAAAAAAIAAAAAAAAACAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAoAAAAAAAAAKgAAAAAAAoAAAAAAAoAAAAAAAAACubQCgAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAACgACACCiAACIoAAAAAAoKCgoAKCgAoACgAAIAAAAgAAAAIAAoAAAgAAAAAIAAAAAACAAAAAAAAAAgAAAAAAIAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAKAAAAAAAAAAAgoAAAAAAAAAKAAAAKAAAAAAAArm0oAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAIAAAoAgAAiKAACogAAAAAKCgoAKCgoAKAAoAACAAAAIAAAACAKAAAAIAAAAACAAAAAAAgAAAAAAAAIAAAAAAACAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAIKAAAAAAAAAAAAAAAAAACigNObQAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAACAAAKAAIAIKIAAqIAAAAACgoKACgoKACgAKAAAgAAACAAAAAgCgAAACAAAAAAgAAAAAAIAAAAAAAACAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAACAACgAAAAAAAAAAAAAAAAA25tgAAAAAAAIAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAIAAoAAgAgogACogAAAAAKCgoAKCgoAKAAoAACAAAAIAAAACAKAAAIAAAAAACAAAAAAAgAAAAAAAAIAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAIAAAAAAKAAAAAAAAAADbm2AAAAAAAgAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAgACgACACACiACCiAAAAAoKCgAoKCgAoACgAAIAAAAgAAAAIAoAAAgAAAAAAIAAAAACAAAAAAAAAAgAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAKAAAAAAAAAAAAgAAAAAAoAAAAANubYAAAAACAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAACAAAKAAIAIKIAAqIAAAACgoKCgAoKACgAKAAAgAAACAAAAAgCgAACAAAAAAgAAAAAAIAAAAAAAAACAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAACAAACgAAA25tgAAAAIAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAIAAAoAAgAgogACogAAAAKCgoKACgoAKAAoAACAAAAIAAAACAKAAAIAAAAACAAAAAAAgAAAAAAAAAIAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAIAAAAAKDbm2AAAAgAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAKAAAIIKAIAqIAAAACgoKCgAoKACgAKAAAgAAACAAAAgACgAACAAAAAAgAAAAAAIAAAAAAAAACAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAACAAAADbm2AAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAoAAgAgogAgogAAKACgoKACgoAKAoAAACAAAAIAAACAAKAAAIAAAAACAAAAAAAgAAAAAAAAIAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAIAAANubYAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAgAgogACogAAKACgoKACgoAKAAoAACAAAAIAAACAAKAAAIAAAAACAAAAAAAgAAAAAAAAIAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAIAANubYAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAggoAgCogAAKACgoKACgoAKAAoAACAAAAIAAACAAKAAAIAAAAACAAAAAAgAAAAAAAAAIAAAAAAACAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAICjbk2AAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAIIAKIAIKIACgAoKCgAoKACgAKAAAgAAACAAAAgACgAACAAAAAAgAAAAAIAAAAAAAAACAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAANuTYAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAIAIKIAIKIACgAoKCgoAKACgAKAAAgAAACAAAAgACgAACAAAAAAgAAAAAIAAAAAAAAACAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6OTYAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAIAIKIAIKAAAAKCgoKACgAoACgAAIAAAgAAAAIAAoAAAgAAAAIAAAAAACAAAAAAAAAAgAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOjk2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgACCCiAAKgAAACgoKCgAoAKAAAoACAAAIAAAACAAAKAIAAAAACAAAAAAAgAAAAAAAAIAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAgAAAAAAACgACCACiACCgACgAoKCgAoAKAAAoACAAAIAAAACAAAKAIAAAAACAAAAAAAgAAAAAAAAIAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAACgCACCiACCgACgAoKCgAoAKAAoAAACAAIAAAACAAKAAIAAAAACAAAAAAAgAAAAAAAAIAAAAAAACAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAOjk2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAAKAIAIKIAAqAAKACgoKACgAoACgAAAIAAgAAAAIAAoAAgAAAAAIAAAAAACAAAAAAAAAgAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAA6OTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAoAAggoAgCoAAoAKCgoAKAACgKAAAAgACAAAAAgACgACAAAAAAgAAAAAAIAAAAAAAACAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAOrk2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAAAKAIIAKIAIKAKACgoKACgAAoCgAAIAAAgAAAAIAAoAAgAAAAAIAAAAAACAAAAAAAAAgAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAACgACCCgCAKigAoAKCgAoAAKAoAAACAAIAAAACAAAKAIAAAAACAAAAAAAgAAAAAAAAIAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAoAAggoAACCgCgAoKACgAAoCgAAAIAAgAAAAIAAAoAgAAAAIAAAAAAACAAAAAAAAgAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAAACgAAIigAAAIKKCgAoAKAACgKAAAAgACAAAAgAAACgCAAAAAgAAAAAAAIAAAAAAACAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAOrk2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAAAKAAgCKAAAKIKKACgAoAAKAoAAACAAIAAACAAAKAAIAAAACAAAAAAAAgAAAAAAAIAAAAAAACAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAoAACCgAAAAqKACgAoAAKAoAAACAAIAAACAAAKAAIAAAACAAAAAAAAgAAAAAAAIAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAoAACCgAAACgKgCgAoAAKAoAAACAAIAAACAAAKAAIAAAACAAAAAAAAgAAAAAAAIAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAoAACACgAACgKgCgAoAAKAoAAACAAIAAACAAAAKIAAAAACAAAAAAAAgAAAAAAAIAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAoAACACgACgAqoAAoAAKAoAAAACIAAAACAAAAKIAAAAACAAAAAAAAgAAAAAAAIAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAoAACACgACgAqoAAoAAKAoAAAACIAAAACAAAKAIAAAAACAAAAAAAAgAAAAAAAIAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAACgAAAIAAKKAACqgCgAAoACgAAAIgAAAAIAAAoAgAAAAAIAAAAAAACAAAAAAAgAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAKAAAAgAooAAKqAKAACgAKAAAgCAAAAAgAAACiAAAAAAgAAAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAOrk2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAoAAAACACigAqoAoAAKAAoAACAIAAAACAAAAKIAAAAACAAAAAAAAgAAAAAAIAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAKAACAAKAAAAAgooAKqAKAACgAKAAAgCAAAAAgAAACiAAAAAAgAAAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAOrk2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAACgAAAAgAACgAAAIAKKAoogCgAoACgAAIAgAAAAIAAAAogAAAAAIAAAAAACAAAAAAAAgAAAAAAAIAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAACgAAAIKKACqgCgAoACgAAAIgAAAAIAAAAogAAAAAIAAAAAACAAAAAAAAgAAAAAAAIAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgACgAAAIKKACqgCgAoAACgAIAgAAAAIAAAACKAAAAAIAAAAAACAAAAAAAAgAAAAAAAIAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgACgAAAIKAKAqKCgAAoCgAAAIgAAAIAAAAACKAAAAIAAAAAAACAAAAAAAAgAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAgACgAAIKAKAqKCgAAoCgAAAIgAAAIAAAAACKAAAAIAAAAAAACAAAAAAAgAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAADq5NgIAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAKAAAgoAoCooAKACgKAAAiAAAAAgAAAAAIoAAAAgAAAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAOrk2gAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAACgAAIAKACooAKACgAKAAIIAAAAgAAAAAIoAAAAgAAAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAOrk2gAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAACgAAIAKACooKAACgAKAAIIAAAAgAAAAIAAoAAAgAAAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAOrk2gAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAACgAAIAKAKIKKAACgAKAAiAAAAAgAAAAIAAoAAAgAAAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOrk2gAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAACgAAIAKAKIKKAACgAKAAiAAAAAgAAAAIAAoAAAgAAAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOjk2AAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAoAIAAAAAoAACACgCgKgCgAoACgCACAAAAIAAAACAKAAAAIAAAAAAACAAAAAAAgAAAAAAAIAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAoAAAIACgKAAIIAKAAKqAKACgAKAIIAAAAAgAAAAIAoAAAAgAAAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOjk2AAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAoAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAKAAAAAAAAoAAgAgoAAqoAoAAKAoAggAAAACAAAAAgACgAACAAAAAAAgAAAAAAAIAAAAAAACAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAA6OTYAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAACgAAAAAAgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAoAAAAAAACgACACCgAAqKCgAAoCgCCAAAAAIAAAACAAKAAAIAAAAAACAAAAAAAAgAAAAAAAIAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAKAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACgAAAAAAKAAAIAIAiigKigAoAKAoAggAAAACAAAAAgACgAACAAAAAAAgAAAAAAAIAAAAAAACAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAA6OTYAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAACgAAAgAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAoAAAAAACgAACACIAooCooAKACgKAIAIAAAAgAAAAIAAoAAAgAAAAAAIAAAAAAACAAAAAAAAgAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAOjk2AAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAoAIAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAKAAAAAAAoAAAgAiAKAKIqgCgAoCgCCAAAAAIAAAACAAKAAAIAAAAAACAAAAAAAAgAAAAAAAIAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAKCAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAACgAAAoAIAoAAAAgAiAKAKIKKCgAoCgCACAAAAIAAAACAAKAAAIAAAAAACAAAAAAAAgAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAKCAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAACgAAAoAIoAAAAAgAiAKAKIKKCgAoCgCACAAAAIAAAACAKAAAAIAAAAAACAAAAAAAAgAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAoAAAKAoAgAAAAICCACgAIqigoAAKoAgAgAAACAAAAAgACgAACAAAAAAAgAAAAAAAIAAAAAAACAAAAAAAAAAgAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAA6OTYAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAKAACgKAAIAAAACAggAoACKooKAACqAIAIAAAAgAAAAIAAoAAAgAAAAAIAAAAAAAACAAAAAAAAgAAAAAAAAAIAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAOjk2AAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACgAAoCgACAAAAAgIIAiigCKooKAACgKIAIAAAAgAAAAIAoAAAAgAAAAAIAAAAAAACAAAAAAAAAgAAAAAAAAAIAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAOjk2AAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAICgAAAAAAAAAAAAAAoAAIAAAAAAACgAAAAoAAKoAAAgAAAIACCAIoAoiqKACgAoCiACAAAAIAAAACAKAAAIAAAAAACAAAAAAAAgAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAAAoAAAAAAAAAAAKAAAAACAAAAAAoAAAKAAACqAAAIAAAACAggCKAKIqigAoAKAoggAAAACAAAAAgCgAACAAAAAAAgAAAAAAAIAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAA6OTYAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAACgAgAAAAAAAAAKAAAAAAAAAACgAAAAAAgAAAAKAAACgAAAKKAAACAAAAgIIAigCiKooAKAACqIAIAAAAgAAAAIAoAAAgAAAAAAIAAAAAAACAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAOjk2AAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAoAIAAAAAAAAAAACgAAAAAAAAAoAAAAAAAIAAACgAAAoAAACigAAAgAAAICCAIoAoiqKACgAAqiACAAAAIAAACAAAKAAIAAAAAACAAAAAAAAgAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAADo5NgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAKACAAAAAAAAAAAAAAoAAAAAAAAAKAAAAAAACAAAAoAAAKAAAACqAAAIAAACAggCKAKIqigAoAAKogAgAACAAAAAgAACgACAAAAAAAgAAAAAAAIAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAA6OTYAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAoAAAAAAAIAAACgAAAAoAACgCgAAgAAAICCAIoAoiqKACgAAKAAgAACAAAAAgAACgACAAAAAAAgAAAAAAAIAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAA6OTYAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAoAAAAAAAIAACgAAAAAoAACgACgAgAAIACCAIoAoiqKACgAAKAgAAACAAAAAgAACgACAAAAAAAgAAAAAAAIAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAA6OTYAAAAACgAAAAAAAAAAAAAAAgKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAACgAAAAAAAgAAKAAAAACgAAKAAKACAAAgAIIAigCiKooAKAAAoACAAAIAAAACAAAAKAIAAAAAACAAAAAAAAgAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAKAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAKAAAAAAACAAAoAAAAAKAAAoAAoIAAACAAggCAqgCqigAoAACgAIAAAgAAAAIAAAAoAgAAAAAAIAAAAAAACAAAAAAAAAgAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAANuTYCgAAAAAAAAAoAAAAAAAIAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAoAAAAAAAIACgAAAAAAoAACgACggAAAAICCAACgCiKoAoAACgAIAAAgAAAAIAAAAAogAAAAAAIAAAAAAACAAAAAAAAAgAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAANuTYCgAAAAAAAAAAAAoAAAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAAAAAAAoAAAAAAAAIACgAAAAAAoAACgACgAgAAAICCAACgCiKooAAAACgIAAAgAAAAIAAAAAogAAAAAAIAAAAAAACAAAAAAAAAgAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAANuTYCgAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAAAAAAAoAAAAAAAAAAAAAAAKAAAAAAAAACAoAAAAAAKAAAAoAAoAIAAACACIAAooAiqKAAAAAoCAAAIAAAACAAAAAAgCgAAAACAAAAAAAAgAAAAAAAAIAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAADbk2oAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAgAAAAAAAKAAAAAAAAAAAAAAACgAAAAAAAAAgAAKAAAAACgAAAKAKAACAAAAgAIIAqgCiCigAAAKAAgAACAAAAAgAAAAAIoICgAAACAAAAAAAAgAAAAAAAAIAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAADo5NgAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAACgAAAAAAAAAAgAAAKAAAAACgAAAKAKAAACAAAgAAgAoAogooAAACgAIAAAgAAAAIAAAAACAKAAAAAIAAAAAAACAAAAAAAAAgAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAOjk2AAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACAoAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAAoAAAAKAAAAoAoAAAIAACAACACgCiCigAAAKAAgAACAAAAAgAAAAAIAoAAAAAgAAAAAAAIAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAA6OTYAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAAAoAAAAKAAAAAooAAAIAACAACACgCiCigAAAAKAgAACAAAAAgAAAAAIAoAAAAAgAAAAAAAIAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAA6OTYAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAAAAAoAAAKAAAAAooAAAIAACAACACgCiCigAAAAKAgAACAAAAAgAAAAAIAoAAAAAgAAAAAAAIAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAA6OTYAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAAAAAAoAAAKAAAAAoAoAAIAACAAggCqAKIKKAAAAAoCAAAIAAAACAAAAAAgACgAAACAAAAAAAAgAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAADo5NgAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAACgAAAoAAAACgCgAAgAAICACACigCKooAAAACgIAAAgAAAAIAAAAACAAKAAAAAIAAAAAACAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAOjk2AAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAgAAAAAAAAAAKAAAACgAAAKAKACAAAgAIAIAKAKIqigAAAAKAgAACAAAAAgAAAAAIAoAAAAAAgAAAAAAIAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAA6OTYAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAAAAAAAAoAAAAKAAAAoAAAAAAgAIIgAKoAoiqAKAAAAoCAAAIAAAACAAAAAAigAAAAAACAAAAAAAgAAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAADo5NgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAACgAAAAoAAAACgAAAACAgAiAAKKCiCigoAAACoAAAAgAAAAIAAAAACKAAAAAAAIAAAAAACAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAOjk2AAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAgAAAAAAAAAAAAAAKAAAACgAAAAKAAAAIACAggCAqgCiKooKAAAAqAAAAIAAAACAAAAAAKIAAAAAAACAAAAAAAgAAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIDo5NgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAACgAAAAAoAAACgAAACAAgiAgACigoiqKCgAAKAgAAACAAAAAgAAAACgCAAAAAAAAgAAAAAAIAAAAAAAACAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbk2AAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAKAAAAAACgAAAAKAAAICAgiAAAKKCiKooKAAAoCAAAAIAAAAACAAAAKAIAAAAAAACAAAAAAAgAAAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANuTYCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAAKAAAAAoAAAgICCICAKAKCwRqKKACgAKAgAAACAAAAAAgAAACgCAAAAAAAAgAAAAAAAIAAAAAAAACAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbk2AoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAoAAAACgACAAgjIIAAoAoLBGoooAKAAoCAAAAAIAAAACAAAAKAAIAAAAAACAAAAAAAAgAAAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANuTYCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAKAAAAoAAAgICURAQEAUUFBYIsUaABQAFAQAAAABAAAAAQAAABQABAAAAAAAAQAAAAAAEAAAAAAAAAABAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABtybAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAABAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAABQAAAAFAAAEBBEoICAgCgCwGoIsUaABQAFAQAAAABAAAAAAQAABQABAAAAAAAAQAAAAAAEAAAAAAAAAAABAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABtybAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAABAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAABQAAAAFAAAEBBEoM0EAUQFBYDUEWKNAAoACgIAAAAAAgAAAAIAAAAoAgAAAAAAAIAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA25NqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAoAAAACgAAACAlEZoJQQEUAUFgjUBYo0ACgAKAgAAAAACAAAAAgAAACgACAAAAAAAgAAAAAAAIAAAAAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAoAAAACgAAACAlEZoJQQEUAUFgjUUWA0ACgAKAgAAAAACAAAAAAgAACgACAAAAAAAgAAAAAAAIAAAAAAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAoAAAACgAAAACAzREoM0EAUAAagjUUWA0ACgAKAgAAAAACAAAAAAgAACgACAAAAAAAAgAAAAAAAIAAAAAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAKKAgKACAAoAAAAgAM0RKDNBFEABQagixRqA1AUAABQEAAAAAAAQAAAAEAAAUAAQAAAAAAAEAAAAAAABAAAAAAAAAAAAAAQAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdHJsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAABRQAAAAEABQAAABAQEoiUGaCKIACiNRRYDUBqAoAACgIAAAAAAAgAAAAIAAAAoAAgAAAAAAIAAAAAAAACAAAAAAAAAAAAAAgAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6OTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAACigAAAAAAAAAAAgICURKDNBFEABYI1FFgNQGgUAABQEAAAAAAQAAAAAEAAAAAUAQAAAAAAAEAAAAAAABAAAAAAAAAAAAAAQAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdHJsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAFFAAAAAAAAAAAABASglESgzQRRAAWCLFGoDUBoFAAAUBAAAAAEAAAAABAAAAAAFAEAAAAAAABAAAAAAAAAQAAAAAAAAAAAAAEAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHRybAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAEBQAAAAAAAAAAAAAAAAAAAAAAAAAUAAAEAAAAAAAAAAAAAAAAAAAAAAAAABQAAFAFAAAAAAAAAAAABASglESgzQRRAAWCLFGoDUBoFAAAVAAAAAEAAAAAABAAAAAAARQAAAAAAAABAAAAAAAAQAAAAAAAAAAAAAEAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHRybAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAUAABQABQAAAAAAAAAAAAQEoJRGaCUEUQAFgixRqA1AaBQAAFQAAABAAAAAAAQAAEAAAAAUAAAAAAAAAQAAAAAAAAEAAAAAAAAAAAABAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0cmwAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAFAAUAAAUAAAAAAAAAAAAEBASiM0EoIogALBFijUBqA0CgAAKgAACAAAAAAAAgAIAAAAAAAoAAAAAAAAgAAAAAAAAAIAAAAAAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAKAAoAAAoAAAAAAAAAAAAICUEojNBKDKgACwRYo1AagKCgoACoAAgAAAAAAAIACAAgAAAKAAAoAAAAAAAAgAAAAAAAAIAAAAAAAAAAAACAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAKAAoAAAoAAAAAAAAAAACAogJQSiM0EoMqAALBFijUBqAoKCgAKgCAAAAAAAAgAIACAAgKAACgAKAAAAAAAAIAAAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAA6OTYAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAACgAKAAAAKAAAAAAAAAgAAAKICAlEZoJQZUAAWCLFGoDUBQUFABBBQBAAAAAAAAQAEFQAAAQBQAUABQAAAAAABAAAAAAAAAAQAAAAAAAAAAAEAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAHRybAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAABQAAAAAAAEAAABQBASglEZoJQZUAAWCNRRYDUBQUFBAABEUAQAFAAAABAQEFRAAAUUQBQUABQAAAAAABAAAAAAAAAAQAAAAAAAAAAAEAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAHRybAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAABAAAAAAAAAAAAAAAAAAAAAAAAAAUAABQAAABQAAAAAAAAEAFABFAEBKCURmglBFEABYDUVFgNQFBQAAAQEEFAAAAAAAEBBUQAQAFAUURQAUBQAAAAAAABAAAAAAAAAQAAAAAAAAAAAEAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAHRybAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUAAAAAUAAAAAAABAABQAQBRASglEZoJQRRAAWA1FRYDUBQUAAEBAARQEAUAAAEABEVAQAAAFUUQBQUBQAAAAAAABAAAAAAAAAQAAAAAAAAAAAAEAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAHRybAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAUAAAAAUAAAAAABAUEAFABAFEBKCURmglBFEABQaiosBqAoAKCAAgIAAoCAAAAAIKiCAgAAKCqAigoAKAoAAAAAAAgAAAAAAAAIAAAAAAAAAAAACAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAKAAAAAKAAAAAAAgAAAoAIAogJQSiM0EoIogALAagixRqAoAAAICAAgACgIoAIAKiCAgAAAKAooigoAAKAoAAAAAAgAAAAAAAAIAAAAAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAKAAAAAAKAAAAAAAgAAAqgCAAgJQSiM0EoMgKAKCwRqKKCgAAAgAIAAAAoCAoCIICAAgAKACqKIoAKAAAAooAAAAIAAAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAA6OTYAAAAAAAAAAAAAAAAACgAAAAAAAAAACAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAoAAAAAAoAAAAACAoICgCgAgAICURKDNBKDICgCgsEWAqigAAAAgAIAAAAAACAgAIAACgAqiiAKAAACgAKAAKACAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAOjk2AAAAAAAAAAAAAAAAAAoAAAAAAAAgAKCAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAoAAAAAAoAAAAAAACAoAoAIACAlESgzQZoIoAAoKCiKAoAAAAgAAAAAAIACAAgAAAAKCgKKIAAAAoAKAAoAAAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAOjk2AAAAoAAAAIAAAAAAAACgAAAAAACAAAAoAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAACgAAAAACgAAAAAAAAAoAAIACAlEZoJQZoIAoAAoKCgCCgAACAAAAAAAgAIACAAAAoKACgAAAKAigAoAKAoAAAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAOjk2AAAoAAAAAIAAAAAAAAACgAAAAAACAAAAoAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAACgAAAAACgAAAAAAAAAoAAIACAlEZoJQZoIAoAAoKACgggAoAgAAAAAAIACAAAAAAoAAKAAAAACgKigoAKoAAAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAOjk2AoAAAAAAAIAAAAAAAAAACgAAAACAoIAAACgAAAAAAAAAAKAAACAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAKAAAAAAKAAAAAAAAACgAAgAICCM0EoM0EAUAAUAFAABBAEUAAAAAAAAQAEAAABQAAUAAAAAAFABVRQUAFUAAAAAAAAAAAQAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAHVybAAQAAAFABAAAAAAAAAAAAAUAAAAQFBAAAAUAAAAABQAAAAAAAAAQAAAAAAAAAAAAAAAAFAABAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAABQAAAAABQAAAAAAAAAAUAEABASiJQZoJQZAUAAUAAAAEAEAFEBQAAQAAEAAAAAAABQAAAAQFAABQUFVFBQAVQAAAAAAAAAABAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAdXJsBAAAAAAAAAAAAAAAAAAAAUAAAAAAAABQAQAAAUAAAAAAAAAAAEAAAAAAAAAAAAAAABQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAUAAAAAAAUAAAAAAAAAAFABAAQEoiUGaCUEBFAAFAAABAAQQAAUAAAAAQAAEQAAFFAAAAAAAAABQAUFBVRQUFUAAAAAAAAAAAQAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAHVybQAAAAAAAAAAAAAAAAAAAAAFAAAAAAAUAAAAEFAAAAAAAAAAAABAAAAAAAAAAAAAAAAUAAEAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAFAAAAAAAFAAAAAAAAAABQQAAEBKIlBmggICKAAKAAACAgAAiAKKAACAAAiAAKACAAAAAAAAAAAKCqANAoKqKACqAAAAAAAAAAIAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAADo5NgAAAAAAAAAAAAAAAAAAAAAKAAAAAAoAAAAAoCAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAACgAAAAAAACgAAAAAAAAAAAAAAgIIlBmglBARQABQAAQAEABABABQAAAAQQUAAAAAEAAAAAAAAAAUFUWAoKqKCgAqgAAAAAAAACAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAA6OTYAAAAAAAAAAAAAAAAAAAAACgAAAAAKAAAAAKAgAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAoAAAAAAAAAoAAAAAAAAAAAAAAICCJQSgzQQBRAAUAEAABAAQAAQAUAEAEFAAAAQFAAAEAAQUAABRAAFBVFBoFVAFAAAUAAUAAAAAEAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAB0cmwAAAAAAAAAAAAAAAAAAAAAFAAAAAAUAUAAABAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAABQAAAAAAAABQAAAAAAAAAAAAAAAQEESglBmggIoAAAAAAgAAIAAIAAAACoAACAAAAAAAAAAAAAAoAigqigoKqKAACgAKAAKAAAACAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAA6OTYAAAAAAAAAAAAAAAAAAAACgAAAAAAKKAAAAAAgAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAoAAAAAAAAAAoAAAAAAAAAAAAAAAICCJQSgzQQEUAAAAAAQAEAAAAEABQEAAABAAAAAAAAAAAAAAAUQBQVRQUFEFFAABQFAFAAAAABAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAdHJsAAAAAAAAAAAAAAAAAAAABQAAAAAAAVQAAAAQAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAUAAAAUAAEAAABQAAAAAAAAAAAAAAAQRASglBmgiiAgAAAAAAAAIAAAAAACAAAAAgAAAAAAAAAAAAAAKIoAKooKACqgCgAoCigAAAAAgAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAOjk2AAAAAAAAAAAAAAAAAAAAoAAAAAAAAKAAoIAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgKAAAKAAAAACAoAAAAAAAAAAAAAAAAIIgJQZoJQZUQAAAAAAAAAAQABAABQAEAAAABAAAAAAAAAAAAAAUQBQAVRQUAFVAFBQFFAAAAAABAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAdHJsBQQAAAAAAAAAAAAAAAAFAAAAAAAAAABQAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAUAAAAUAAAAAAAAAAAAAAAAAAAAAAAEESglBmgzQRRAAQAFAAAAEAAAAAAQUABAAAAAAAAQAAAAAAAAAAAFEAUAFUUAFBVRQUBRQAAAAAAQAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAHRybAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAFAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUBQAABQAAAAAAAAAAAAAAAAAAAAAAAAQRKDNBKDNBFEBAAAAUAARVAAAEAQAAQUBAAAAAAAAQAAAAAAAAAAAAFEAUAFUUFBVRQUAFUAAAAAAAQAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAHRybAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAABQAABQAAAAAAAAAAAAAAAAAAAAAAAAQRKDNBmglBFEBAAAUAFEFAAAAABBAAQUABAAAAAAAAQAAAAAAAAAAAAFEAUFBVFBVFEUAFUAAAAAAAAQAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAHRybAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAFAAAABAAAAAQAQABRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAUAAUAAAAAAAAAAAAAAAAAAAAAAAAAEESgzQZoJQZUAQAFABQFRQAAAAAQBBAAQUBAAAAAAAAAQAAAAAAAAAAAFEAUAFUUGgVUUAFUAAAAAAAAQAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAHRybAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAFAAAABAAAAAQQAAABRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAUAUAAAAAAAAAAAAAAAAAAAAAAAAAEEZoJQZoJQZUAQFABQBFUUAAAAEABEEABBQEAAAAAAAAABAAAAAAAAAAAAUQBQVRQaBVQBQVQAAAAAAAABAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABtybAAAAAAAAAAAAAAAAUAAAAAAAEABQAAAAAAUEAAAAABABAAAAFFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAABRQAAAAAAAAAAAAAAAAAAAAAAAAAAQRmglBmglBFEAABQUFEFFAAABAAQEQAQEAFQAAAAAAAAAAEAAAAAAAAAABRAFBVFBQVUUFAUUAAAAAAAAEAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGnJsBQAAAAAAAAAAAAAAUAAAAAAEAAABQAAAAAAAAAAAAQQAAAABRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAUUAAAAAAAAAAAAAAAAAAAAAAAAAAEEZoJQZoJQRRAAUFBRFUAUAAEABAQBBAQEAFQAAAAAAAAAAAEAAAAAAAAABRAFBVFBQVUUAFAUUAAAAAAAEAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGnJsABQAAAAAAAAAAAAUAAAAAAEAAAABQAAAAAAAAAAAQAQAUAEAFFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAABQABQAAAAAAAAAAAAAAAAAAAAAAAAAQRmglBmggIAoAoKCiKAoAoIACAAgICIIACCgIAAAAAAAAAACAAAAAAAAAAoAigqigAoiqKACgAqgAAAAAACAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTk2AAAoAAAAAAAAAAAKAAAAACAAAAAAoAAAAAAAAAAAIAIAKAACKoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAoAqAoAAAAAAAAAAAAAAAAAAAAAAAAgjNBKDNBAQBQBQUFEUFUAAAQAEBAQEQAQEAAAFAAQAAAAAAAEAAAAAAAABQBFABVFBQBFUUAFAAUUAAAAAEAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGnJsAABQAAAAAAUAAAAAAAAAEAAAAAABQAAAAAQAAAFABABAABQBUUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAFAFQAAFBAUAAAAAAAAAAAAAAAAAAAAQGaIlBmggIAoAoNACKCqAAAIACAgIACAgCACAAAACgAIAAAACAAAAAAAAAoAgCgqgCgoAKqKACgAqgAAAAACAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTk2AAAoAAAAAKAAAAAAAAACAAAAAAAAoAAAIAAAAAAAAAIAAAKqgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACgAAAAAAAKAAAAAAAAAAAAAACAoAAgM0RKDNBAQBQBQUFEUBQAAABAAQAEABAAAQABBAABQEAAAABAAAAAAAAAUAARQAVQBQAUFVFABQFFAAAAABAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAABpybAAUAAAAAFAAAAAAAAABAAAAAAAAUAAAAEAAEABQAFBABAAAUUVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAUAAAAQFAAAAAAAAFBAAAAUAEABQQFAAEBmiJQZoICAKAKCgoAiqAAAAIAACAAgAAIAACAIAIAKgAAAAIAAAAAAAACgACAKAAooKACgqooKAAooAAAAIAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAANOTagAAAAAAAoAAAAAAAAAIAAAAAACgAAAAAgAAgAAKoAAAIAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAKAIACgAAAAAAAAAAAAAAAAAAAACgACAzREoM0EBAFAFABQUQUUAAAEAAABAAAQAAEABAEEABBQAAAEAAAAAAAAABQABAFAABVFABRFUUFAAUUAAAAEAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAG3JsAAAAAABQAAAAAAAAAAQAAAAAFAAAAAABABAAAFFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAFAEBQAAQFAAAAAAAAAAAAAAAAAAAFAEBmiJQZoJQQEUUAFBQUQUUAAAAEAAAABAAAQAEBAEEABBQAAAEAAAAAAAAABQAABAAFABVFBQVUUAFAAUUAAAEAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAG3JsAAAAABQAAAAAAAAAAAAQAAAAFAAAAAABAABFAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAARQAAAAABQQFAAAAAAUAAAEAAAABQAARQBAZoiUGaCUEBFAFBQUARVAFAABAAAAAAAQAAEBAQBBABUAAAABAAAAAAAAAAAUAAAQABQAVRQUFVFABQFFAAABAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABtybAAAAAUAAAAAAAAAAAAAAEAAAABQAAAQAAARQABQAAAAAEAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAARQAAAAAABQQAAAAFAUAAAEAAAABQAARQBASiM0GaCUEUQAFABQURVAAAAAAAAAAEAAABAQEAQQAVAAAAAQAAAAAAAAAAAAFAEAAAUFAUUFEVRQUABRQAAQAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAbcmwAAAFAAAAAAAAAAAAAAAABAAAAAAAAABAAFAFAAAAAAQAABQQUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAEUAAAAAAAAAAAAAAAVQAAAQAAAFAAABAFEESgzQZoJQRRAAAUFBRAFUAAAAQAAAAAAAEABAQBBAQUAAABAAAAAAAAAAAAAAAAUQAABQUFUUFEFFBQFAFAABAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAB0cmwAAAAAAAAAAAAAAAAAAAAEAAAAAAAEBQQBQABQAAAAEEAFAUABUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABQBAAAAAAAAAAAAAAAFAAAFQAAAFAAABAFRASgzQZoJQZUAAAUAFEUABQAAAQQBQAAAAABAARBAAQUAAABAAAAAAAAAAAAAAAAAUQABQAVRQUFVFBQAFFAAABAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAB0cmwAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAUAUAAAABBABQAAFAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAUAAAQAAAAAAAAAAAAABQAABUAAABQAAAQBUQEoM0GaCUEBFAAAFBQBAFABAAAAQAABQAAABAEEABBQAAAEAAAAAAAAAAAAAAAAAEUAAFBQVRQURVAFAUUAAAEAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAHRybAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAABQBQAAAEAEFEABQABVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAFAAAEAAAAAAAAAAAAAAAUAAAVABAUEUUEBQARFEBKDNBmglBARRAUAAFAEUAAAEAABAAAAUBQBAEAEBBQAAAAEAAAAAAAAAAAAAAAAABRAAFABVFBQVUUFAUUAAAAEAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAHRybAAAAAAAAAAAAAAAAAAAAAAQAAAQAAAAABRQAAAEAAERQABQABVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAFAAAAEAAAAAAAAAAAAAAAUUEABUEAAAUAAUEARRASgzQSgzQQEUAAAAUAAQAAABBQAAQAAAAAABABUAAAABAAAAAAAAAAAAAAAAAAAAUARQAUFUUFVFBQFFAAAABAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAB0cmwAAAAAAAAAAAAAAAAAAAAAAEAAEAAAAAUUAAABAAABEUAAUAUQUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABQABAUEAAAAAAAAAAAAAAAAUUEBUEABQRQAAAARRASgzQSgzQQEUAAAAUAAAQABBQAEAAAEAAUAEAFAQAAAAEAAAAAAAAAAAAAAAAAAABQBAFBQVRQVUUFAUUAAAAAEAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAHRybAAAAAAAAAAAAAAAAAAAAAAAQAAQAAAAFUAAAEAAAAEQFUAAEVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAAEAAAAAAAAAAAAAAAAAAUUBBAUAAEUAAAAEUQEoM0EoM0EBFAAAFAAAAAEBUAABAAAAABAAAUBAAAAAAQAAAAAAAAAAAAAAAAAAAFAAEUFBVFBVRQUBRQAAAAAQAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAdHJsAAAAAAAAAAAAAAAAAAAAAABAABAAAAAAUAAAAAAAEAAABVAAAAAAAAABAAUAAAAAAAAAAAAAAAAAAFAAAAAAAAAAABQBAAAAAAAAAAAAAABQQAAAUAUBABAUAEUUEBQQBFEBKDNBKDNBAFAAAAAAAAAARBQEAAAAAAAAABAAAAAAQAAAAAAAAAAAAAAAAAAAAFAAEUFBVFgKqKCgKKAAAAAACAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAADo5NgAAAAIAAAAACgAAAAAAAAAAAgAgAAAAAAKAAAAAAAACAAqgAAAAAAAAAgAAAKAAAAAAAAAAAAAAAACgAAAAAAAAACAoIoAAAAAAAAAAAAAACgAgAAoAoACAAAACKKCAoAIiiAlBmglBmgAigAACgAAgAAgCCgIAAACAAoAAIAAAAAACAAAAAAAAAAAAAAAAAAAAAoAAigoKosBVRQUBRQAAAAAAAQAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAdHJsAAABAAAAAAAUAAAAAAAAAAEAEAAAAAAAABQAAAAAAAAFAAAAAAAAABAAAAAUAAAAAAAAAAAAAAAFAAAAAAAEBQQAAABQAAAAAAAAAAAFAAAABAABQABQEAAEBQFAAAAVEBASgzQSggICKAAKAAACAAAgAAIAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAKAAIoKCqLAVUUFABVAAAAAAAAEAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAHRybAAAQAAAAAAAFAAAAAAAAABAABAABQAQAAAAABQAAAAAFAAAAAAAAAABAAAAAUAAAAAAAAAAAAAAFAAAAAAAEBQQAAAABQAAAAAAAAAAAAFAAABBQABQAAAEAAABQAABBRAQEoM0EoICAigACgAAAgAAIACAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgACKCgqiwFVFBQAVQAAAAAAAABAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAB0cmwAEAAAAAAAABQAAAAAAAAAQAAAQVQBEFURAEAAAABQBQAFAAAAAAAAAABAAAAAAUAAAAAAAAAAAFAAAAAAAAAAAAEAAAAAUAAAAAAAAAAABQAAABUAAAUAAABAAAUAAAAQUQEBKDNBKDNBAFAAAFAABAAAQAEAABAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAFAAEUFBVFBVRQUAFUAAAAAAAAAQAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAdHJsBAAAAAAAAAAUAAAAAAAAAEAAAUAAAAERAAAFAABBQBQFAAAAAAAAAABAAAAAAUAAAAAAAAAAFAAAAAAAAAAAAEAAAAAUAAAAAAAAAABQQFAAAFAAQBQAAAAEAABQAAABBRAQEoM0EoM0EAUBAAFAAAFQQBBQEABAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAFAAEUFBVFBVRQUAFUAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAdHJtAAAAAAAAAAUAAAAAAAAAAEAAUAAAEAAEEAFAAAAFQBQFAAAAAAAAAABAAAAAAUAAAAAAAAAFAAAAAAAAAAAAAEAAAAAUAAAAAAAAAAABQAAABQEAAUEABQAEAAUVAAAEAFEBASgzQSgzQQBQEAAUAAAAEBABUAABAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAFAAEUFBVFBVRQUAFUAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAdHJtAAAAAAAAAUAAAAAAAAAAAAEUAAAEAAAEEFAAAAAFARVAAAAAAAAAABAAAAAAAUAAAAAAAAFAAAAAAAAAAAAAAAEAAAUAAAAAAAAAAABQAAAABQEAAAAAUABABBVVAUAEQUAQEBKDNBKDNBAFAARQAUAAEABAQAVAAAAAAAQAAAAAEAAAAAABQAAQAAAAAAAAAAAAAFAAEUFBVFBVRQUAFUAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAdHJtAAAAAAAAUAAAAAAAAAAAAAAAEAAAAAABBBQAAABQEFFAAAAAAAAAAQAAAAAFAAAAAAAABQAAAAAAAAAAAAAABAAAFAAAAAAAAAAAAAUAAAAUABAAAAFAAQABQBQAAEQUAQEBKDNBKCAgIoACKCgAoAIACAgIAKgAAAAAAAIAAACAAAAAAoAAAAAIAAAAAAAAAAACgACKCgqigqooKACqAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAOjk2AgAAAAKAAAAAAAAAAAAAAAAAoIAAIAAAAIigAACgAIKKAAAAAAAAAAAgAAAAKAAAAAAAACgAAAAAAAAAAAAAAACAAKAAAAAAAAAAAAAoAAAAoAACAAAKACIKAKAKAAAAIAgICUGaCUEBAQBRQUQBQAAAAQEBAQEFAAAAAAAAQAAEAAAAABQAAAAAQAAAAAAAAAAAFAAEUFUUFBVRQUAFUAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAdHJsAAAAAAAAAAAAAAAAAABAAAUAAAAAAEAAEFAEBQAAEAVQAAAAAAAAAAQAAAFAAAAAAAABQAAAAAAAAAAAAAAAAABFAAAAAAAAAAAAAAUAAAUAABAAAAAAFQQFAFFAAAAAEQEBKCUGaCAgACgCiKACgAAgICAgIACCgAgAAAKAAgAAIAAAACgAAAAAgAAAAAAAAAAKAAAIoKooKCqigoAKoAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA6OTYAAAAAAAAAAAAAAAAACAAAKKgAAAAAAAgAgAoAAAAIoAACgAAAAAAAAAgAKAAAAAAAACgAAAAAAAAAAAAAAAAAAogAAAAAAAAAAAAAAoAoAAACAoIAAAAIAKCCqAoAAAAgCAgJQSgzQQEAAUAUFEUAAAAEBAQEBAAAQFABAABQEAABAAAAAUAAAAAEAAAAAAAAAABQAABFBVFBQVUUFABVAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbcmwAAAAAAAAAAAAAAAAAEAAABQAAAAAAAAQQAAUAAAEUAAABQAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAFAEAAAAAAAAAAAAFAAFAAAAQFBAAAAABAABRQABQAABAEBASglBmggIAAAooKIoAAAAICAgICAAAgAAAAAAoCAAgAAAAAKAAAACAAAAAAAAAAAoAAgCgqigoKqKCgAqgAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAANuTYAAAAAAAAAAAAAAAAAACAAAoAAAAAAAAAAiAAACgAAAAAAKAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAACAoCgACAAAAAAAAAAAACgCgAAAAAICggAAAgAAooAAoAAgCAAgJQSgzQQEAAAUUARQUAAAEBAQEBAAAQAAAAAUBAAAQAAAAAFAAAABAAAAAAAAAAUAAARQAVRQUFVFBQAVQAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAG3JsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAUAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAEAAAUAUEAAAAAAAAAAAAAFFAAAAAAQFABAAABAABRQBQAABAEABASglBKDIAIAAoAoigAAoIACAgIACAAgAAoAAACAAAgAAAAAAAAAAAAAAAAAAAKAAAAIoAKooKCqigoAKoAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAADbk2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAKAAAAAAAAAAAAAACgAAAAAAAAAAAAAACAAAAKAAAAAAAAAAAAAAoAAoAAAAAAAACAAACAAKoACgAAACIACAlBKCAgICAAAKAigAoAAIACAgAIACAACgAIAAAAACAAAAAAAAAAAAAAAAAAoAAAAAigAqigoKqKCgoCgAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAANuTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAKAAAAAAAAAAAAAAICggAACgAAAAAAAAAAAAAKAAKAAAAAAAAAgAAAgAACqAoAAAAgCAgJQSggICAgAACgAIoAAAAAIACAgAIACCgAAAAAAAIAAAAAAAAAAAAAAAAACgAAAACKCgKKCgqooKCgKAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAA05NqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAKAAAAAAAAAAAAAAAIAAAAAoAAAAAAAAAAAACgACgAAAAAAAAAIAAAIAKKAAKAAAIAAgICAgICAgIAACAqgIAoAAAAIACAgAIAKgAAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAogCgKKCgqooKCgKAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAA05NgKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAKAAAAAAAAAAAAAAIAAAAAAoAAAAAAAAAAACgAACgAAAAAAIACggCggKgAAgqqAAAAIAAgICAgICAgIAAAAoCAKAAAAACAAgICAACoAAAAAAAAACAAAAAAAAAAAAAAAoAAAAAKIAoCigoKqKCgoCgAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAANOTYAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAgAAAAACgAAAAAAAAKAAAAAAKAAAAAAAAgAKCAKCAoCKAAKAAAAAIAgICAgICAgAIAAAoACKAAAAAACAgAICACgIAAAAAAAAACAAAAAAAAAAAAAAoAAAAAKIAoCigoKqKCgAoCgAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAANOTYAAAAAAACgAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAICgAKAAAAAAAAAAAAAIAAAAAAoAAAAAAAAACgAAACgAAAAAAAAICgAgCggKAigACgAAAACAICAgICAgIAACAAKAKIAAoAAIACAAgIACAAAAgoAAAAAACAAAAAAAAAAAAAAAoAAAAKIAoCigoKooigAoCgAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAANOTYAAAAAAACgAAAAAAAAAAAAAAAAAAAAAgACgAACgAIAAAAAAAAAAAAAAAAgAAAKoAAAAAAAAAAAgAAAAAAACgAAAAAAKAAAAAAKAAAAAAAAAAAAgCggKAgAACigAAAACAICAgICAgAIAACAqgAIoAAAAAIACAgAIACAAAACoAAAAACAAAAAAAAAAAAAAAoAAAAKIAoCigoKoogCgoCgAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAANOTYAAAAAAAACgAAAAAAAAAAAAAAAAAAAgACgAAAACgAIAAAAAAAAAAAAAAgAKCAqgAAAAAAAAAACAAAIACgAAAoAAAAAACgAAAACgAAAAAAAAAAAIAAoIACoAAoAoAAAAAgCAgICAgIACAAAAKAKIAAoAIAACAAgIACAAgAAAAIKAAAAgAAAAAAAAAAAAAAKAAAACiAKAooKCqAigoKAoAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAADTk2AAAAAAAAAoAAAAAAAAAAAAAAAAAAAIAAoAAAAAAoCAAAAAAAAAAAAAAAAAAIooAAAAAAAAAIAAAAgAKAACgAAAAAAKAAAAAKAAAAAAAAAAAAAAAgCgiCgAACigAICgAIAgICAgICAAgAAAKoAogAAAAoAgCCAAgICAAAgAAAIKAAAAgAAAAAAAAAAAAAAKAAACgCKACqAKCqAigoAKoAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAADTk2AAAAgCigIAKAAAAAAAAAAAAAAAAAACACAACgKAAAAoCAAAAAAAAAAAAAAAICgAKAAAACggAAAAgAACAAAoAAKAAAAAAAoAAAAAoAAAAAAAAAAAAAAoAgCIKCAooAoAAAAAgCAgICAgIAACAAoCigCKAAoAgAAIAggICAAgAAIAACACgAIAAAAAAAAAAAAAAACgAAAoAigKKCgAqgIoKACqAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAA/9k=",skyBoxBack:"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAFA3PEY8MlBGQUZaVVBfeMiCeG5uePWvuZHI////////////////////////////////////////////////////2wBDAVVaWnhpeOuCguv/////////////////////////////////////////////////////////////////////////wAARCAgACAADAREAAhEBAxEB/8QAGAABAQEBAQAAAAAAAAAAAAAAAAECAwT/xAAUEAEAAAAAAAAAAAAAAAAAAAAA/8QAFgEBAQEAAAAAAAAAAAAAAAAAAAEC/8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMRAD8AMqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAKACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAACAAAAAAAAAAAAAAAAAoAAAAAAAAAAAIAAACAAAAAAAoAAAAAAAAAAAAKAAAACggAAAAAAAAAAKAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAoAAAAAAAAAAIAAACAAAAAAAAoAAAAAAAAAAAAKAAAACggAAAAAAAAAAAKAACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAACAAAAAAAoAAAAAAAAAAAAAKAAACgAgAAAAAAAAAAAKACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAACAAAAAAAoAAAAAAAAAAAAAAKAAACgAgAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAoAAAAKCAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAKAAAAACggAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAKAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAIAAAAAACgAAAoAAAIAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACAAAAAAAAoAAAKAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAoAAAAAAAIAAAAAACgAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAIAAAAAAAACgAAAoAAAAAAIAAAACgAAAAAAAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAACAAAAAoAAIAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAoAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAIAAAAAAACgAAAoAAAAAAAAIAAACgAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAKAAAAAAAAACAoAAAAIAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAoAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAIAAACgAAAAAoAAAAAAAIAAACgAAAAAAAAAAAAAAAAAgAAAAAAKAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAgAAAKAAAAAAAAACgAgAAAAIAAAAAAACgAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAoAAAAAAAAAIAAACgAAAAAAAAAAAAAAAAgAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACgAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAoAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAAAAAAAAAAAAAAoAAKACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAKAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAACgAAoIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAoAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAoAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCAAAAAAAgAAAAAAKAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAoAAAAAAAAAIAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAgAAAKACAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAoAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAKAAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACgAgAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAoAAAAAAAAAIAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAAAAAAAAAAoAAAIAAAAAAACgAAAAAAAAAAgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAoAAAAAAAAIAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAAAACgAAAAgAAAAAAKAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAgAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAAKAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAKAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAKAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAACgAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAKAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAACgAAgAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAoAAAIAAAAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAKAAAACAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAKAAAAAACAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAKAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAAKAAAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAKAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAKAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAoAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACAAAAAAAoIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAACgAAAAgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAACgAAAAAAAAAAAAAAgAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAACggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAACgAAAAAAAAAAAAAAAAAAAgKCACgAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAACggKAAAAAAAAAAAAAAAAAAAAACAoIAAAKAACAAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAACoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAKCAoAAAAAAAAAAAAAAqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAgAAAAAAAKAAAAAAAAAAACAAAAAAAAAAoIAAAACgAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAKAAAAACAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAoAAAoAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAKAACAAAAoAAAAIAAACgAAAAAAAgKACAoAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAoAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAKAAACAAAAAAAAoIACgAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKACAoAAAAIAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIICggAAAAAAAAKAAAAAAAAAAACAAAAAAAAAoAAAAIooAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAoAAAAAAAAAAAAAAAAAAICggAAAAAAAAAAAAAAAACgAACgAAiAAAAAAAAAAAAAAAAAAAAoAAAAAoAIAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAKAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAIAAAKAACAAKAAAAAAAACAAAoAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAoIAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAoICggAAAAAAAAAKAACAAAAAAAAAAAAAAAoICgAAAAAAAAAgAKAAAAAAACAoAICggKCAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAIAAAAoAAAoAAAACAoIAAAAAAAAAAACgAAAACAAAAAAAAAAAAoAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAIAAAAAKAAAAAAAAAAAAACAAAAAAoAAAAAAAACgAAAAAAAAAAAAAACAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACggAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAoAAAAAICgAAAAAAAAAAgAAAAAAAKAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAACoAAAAAAAAAAKAAAAAACAAKAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgKAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAA0AAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAACAAAAAAAoAAAIAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAADYAIAACgAAAAAAAAAAAAAAAgAAAAAAAAKCAAAAAAAgAAAAAAAAAAAAAAAAAAAAKACAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAgAAKAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAoAANAAAAAAAAAAAoAAAAAAIAAACAAAAAAAAAAAAACIAAoAAIAAAAAAAAAAoAAAIAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAIAACgAAAAAgAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAoAAAANAAAAAAAAAAAAoAAAAAIAACAAAAAAAAAAACIAoAAAAAgAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAoAAAAAAAAIAAAAAAAAAgAAAACqCAAAoAAAAAAIAAAAAAAAAAAAAACgAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAACgAAAAAoAAAAAAKAAAACgoAIAAAACgAAAAAAAAAAAgAAAAIIAAAoIAAAAoAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAKAAAAAAAAAAgAAAAAAKAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAoAAIAAAAAAAAAAAACgAAAAoAAAAAKAAAACgAAAAAAAAAAAAAAAAAAAAggAAAAAAoAAAAgAAAAAAAIAAAACgAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAACAAAAAAIAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAICgAgKAACAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAoAAAAAAKAAAAIAAAAAAAAAAAAAAAAAAAgAAACgAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAIAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAKAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACgAAAAAAAoIIAAAAAAAAAAAAAKACAAAoAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAgAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACgAAAioAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAAAAAAAAAKgAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACggAKAAAAAAAAAAACAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAIAAAAAAAKAAAAAAAAAACAAoAIoAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAACggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICggKCAAAKAAAAAAAoAAAAgKAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAgKCAoAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAACAAAAAACAAAAAoAAAAAAAAAAAAAIoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAIAIAAACgAAAAAAAAAAAAigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAKACCKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAIAIoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAKAAAAAAAAAAAgigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICggAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAgKAAAAAAAAAAAAAAACAoAAAIAACggAAAAAAAAAAAAAAAAAAAAAKACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAKAACAoIAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACggAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoIAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKACAAAAAAAAAAAAAAoAIAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAAAAAoAAIAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAoIAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAKCAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAIAAACggAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAoIACgKIgKAKggAAAAKAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAgKAAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ACgAAgAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAADoAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAKAAACAAAAAAAAA6gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACAAoICggAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAKAAAAAAACAAAAAAAA7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAIAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAIAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAACAoAAAAAAAAAIAAAAAAADuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAgAAAAAAAIAAAAAAAAACgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAgAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAoACgACAAAAICgAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAO4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCAAAoAIAAAAAAAAAAAAAAAAAAAIAAAAACAAAAAAAAgAAAAAAIAAAAAAAACAAAAAAAAAAAAAAAAgAAAAAAAAAoACgAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAD0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAgAAAAAAAAIAAACAAAAAAAAgAAAAAAAAAAAAAAIAAAAAAAAACAAACgKAAAAAAAIAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAACAA9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAoICgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAIAAAAAAIAAAACAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAACAAAAACgAAAAAAAAigAAAAAAAAAAAAAAAAgAAAAAKAAACAAAAAAAAAA7gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAgAAAAAAAAAAAACAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAoAICgAAAAAAAAAAAAAAAAAAAAAAAIAAAAgAAAAAAgAAAAAAIAAAAAACAAAAAAAAAAAAAAAAAgAAAIAAAKAAoAAAgAAACgAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAD0AAAAAAAAAAAAAAAAAAAAAAAgAACgAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAACAAIAAAAAAAIAAAAACAAAAAAAAAAAAAAAAAAAgAAIAAAAAKAAACKAAAAACgAAAAAAAAAAAgAAAAAAAAAAAAAAAAIAAAADuAAAAAAAAAAAAAAAAAAAAAAAIAKoIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAgACAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAIAAAAAAAAAACgAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAA7AAAAAAAAAAAAAAAAACAAAACgAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoACAAAAAAAAAAAAAIAAAAAAAAIAAAACAAAAAAAAAAAoAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAOogAAAAAAAAAAAoAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACgAAAAAAAAAAAAAIgAAAAgAAKAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAOioAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACACgAACCAAAAAAAoAAAAAAAKoAAAAAAAIAAIAAAAAAAAAAAAAAAAAAAAADaoAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACACgAAAACAAoAAAAoAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAADSoAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACACgAAAAKAAAAICggAKCAAAoAAAAAAAAAAAAAAAAAAAAAAAAAgAAqoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAACiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAogAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgKCAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAIAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAKAAAAAAAAAAAAIAAAAAAAAAAAgAKCAAAAAAAAoAAAAAIACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAACgAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAgKCAAAoAIAACgAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAKAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACggKAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAoAAAAAAAIAAAAAoAAAAAAAAAIAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAoAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAoAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoCgAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAICgAgAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAgKAAAACAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAACAoAAIACgAAgKAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAoAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACggAAAKCAAoICgAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAACAAAAoIAAAAAAAAAAAAAAKAAAAAAAAAoAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACggAAAAAAKCAAqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAgAKAACAAAAAAAAAAAACgAAAAigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAIAAAAAAAAAAAAgAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAACgigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAACAoIACgAAAAAAAAAAgAAAAACAAAAAAAAAAAAAACggKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACggAKAAAAAAgAAgAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICggAAAAAACAAAAACgAAAAgAAAAAAAAAKCAAoIAAAAACggKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICggAACAAAAAAAACggAAAKACAoAIAAAAAAAAACgAgKACAAoICgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAoIgAAAAAAAAAAAAAAAAoIACggAKCAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAICgAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAgAAAAAAAAAAAAAAAAAKCAAoIACggAAAAAAAKAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAAAAAAAAAAAAAAAoAAAAICggAAAAAAAKCAoAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAIACggAKCAAAAAAoICgAAAAAgKACAAAAAAAAIKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAICgAAAAAAAAAAAAAAAgCAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAggKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAACACAoAICgAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAgAAAAAAgKAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAIAAAAAICggKCAoAAAAAAAAAAAAAAAACAACAoAAIACggAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAIAAAAAAICgAAAAAAAAAAAAAAAIAAIAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAAACAoAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAgKAAAAAAgAAAAAAAgAAAAAAAAAAAAAAAAKAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAICgAAIAAAAAAAAIAAAAAAAAAAAAAAAACgAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAgAAAAAAAAAAAAgAAAAAAAAAAAAAAAKAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACggAAAAAAIAIACgAAAAAAAAAAAgAAAAAAAAKCAAoIACgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAgAAAAKAAAAAAAAAACAAAAAAAAoAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAIAAAAACgAAAAAAAAAAgAAAAAKAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAIAACgAAAAAAAAAAAgAAAKAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAICgAAAAAAAAAAAgKCAAoAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAACggAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAgAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAgAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgKAAACAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAMgAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAKAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAADIAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAyAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAMgAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKDIAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAyAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAADIAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAoAAAAAAAAAAAAAKAAAAAAAAgAAAAKAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAADIAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAKAAAAAAgAAAAAAAAAAAAAKAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAADIAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAKAAAAAAgAAAoAAAAAAAAAIAAAAAAAAoAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAMgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICgAAAAAAAAAAAgAAAAAAAAAKAAAAAAAAAAAACgAAAAIAAAKAAAAAAAAAAAAAAAAAACAAAAAAKAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAADIAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAoAAIAAAAAAAAAACgAAAAAAAAAAAAAoAAAACAAAACgAAACgAgAAAAAAAAAAAAAAACAAAKAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAADIAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAKAAAAAgAAAAoAAAoAAAICggAKCAAAAAAAAAAAAIAAAoAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAMgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAoAAAACAAAACgACgAAAAAAAAgKCAqgCIAAAAAAAACAAAAKAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKADIAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAKAAAAAgAAAAoAoAAAAAAAAACgAACAoAIgAAAAAAAIAAAoAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACgAAAIAAAAqgAAAAAAAAAAoAAgKAACAIAAAAAAAACAAKAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAACgAAIAAAoACgAAAAAAAAAoAAAAAAAAgACAAAAAAgAACgAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAoAACAAAAKAAAoAAAAAAAAKAAAAAAAAAAAIgAAAAIAAAoAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAKAAAgAACgAAAKAAAAAAACgAAAAAAAAAAACIAAAACAAAKAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACgAAAIAAAoAACgAAAAAAAoAAAAAAAAAAAAIIAAAAAAgACgAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAoAAACAAAKAAAoAAAAAKAAAAAAAAAAAAAAIgAAAAAAIAAoAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAAAgAACgAKAAAAACgAAAAAAAAAAAAAAgAgAAAAACAKAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACgAAAIAAoACgAAAAoAAAAAAAAAAAAAAAAAIIAAAAAgACgAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAoAAACAAKAAoAAAKAAAAAAAAAAAAAAAAAAACCAAAAAIoAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAKAAAgACgKAAAACgAAAAAAAAAAAAAAAAAAACIAAAACAKAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAACgAAIAoACgAAAoAAAAAAAAAAAAAAAAAAAAAgCAAAAgCgAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAoACAKAAoAAAAKAAAAAAAAAAAAAAAAAAAAAIAgAAAIAoAAAAgAAAKCAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAD//2Q==",skyBoxFront:"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAFA3PEY8MlBGQUZaVVBfeMiCeG5uePWvuZHI////////////////////////////////////////////////////2wBDAVVaWnhpeOuCguv/////////////////////////////////////////////////////////////////////////wAARCAgACAADAREAAhEBAxEB/8QAGQABAQEBAQEAAAAAAAAAAAAAAAECBAUD/8QAFhABAQEAAAAAAAAAAAAAAAAAABEB/8QAFgEBAQEAAAAAAAAAAAAAAAAAAAEC/8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMRAD8Aw2yAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAgAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAKAAAAAAKAAAAAAAoAAAAAAAAAAAAKAAAAAAAAAAACgAAAAAAAoCAAAAAACgAAAAAAAAAAAAAoAAAAAAAAAAAKAKAAAAAAAAoAAAAAAAAAAKAAAAAAAgAoAAAAAAAAAAAAAAAAAAAAACgAAAAADhaZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAQAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAFAAAAAAFAAAAAAAUAAAAAAAAAAAAFAAAAAAAAAAABQAAAAAAAVAAAAAAABQAAAAAAAAAAAAAUAAAAAAAAAAAFAFAAAAAAAAUAAAAAAAAAAAFAAAAAAQAAUAAAAAAAAAAAAAAAAAAABQAAAAAABwtMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAIAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACgAAAAACgAAAAAAKAAAAAAAAAAAACgAAAAAAAAAAoAAAAAAAAKAgAAAAAAoAAAAAAAAAAAAAAKAAAAAAAAAAACgCgAAAAAAAKAAAAAAAAAACgAAAAAAIAAKAAAAAAAAAAAAAAAAAAAAoAAAgAAOJpkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAABAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAUAAAAAAAAUAAAABQAAAAAAAAAAAAAAUAAAAAAAAAFAAAAAAAABQEAAAAAAFAAAAAAAAAAAAAABQAAAAAAAAAAAUAAUAAAAAABQAAAAAAAAAAUAAAAAAABAUEAFUAEAAAAEAAAAAABQAAFAEAAAAABxNMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAIAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACgAAAAAACggKAAAAoAAAAAAAAAAAAAAKAAAAAAAACgAAAAAAAAAoACAAAAACgAAAAAAAAAAAAAAoAAAAAAAAAAAAKAKAAAAAAAAoAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAgAKAAAAAAAAOJpkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAABAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAUAAAAAAAAUAAAABQAAAAAAAAAAAAAAUAAAAAAAAFAAAAAAAABQAAAEAAAAFAAAAAAAAAAAAAABQAAAAAAAAAAAAUAAAUAAAAABQAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHE0yAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAgAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAKAAAAAAAAAKAAAoAAAAAAAAAAAAAAAKAAAAAAACgAAAAAAAAAoAAACAAAAACgAAAAAAAAAAAAAoAAAAAAAAAAAAKAAAAKAAAAAAoAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADiaZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAQAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAFAAUAAAAAAAAAAAAAAFAAAAAAABQAAAAAAAAAAUAAAABAAAABQAAAAAAAAAAAAAUAAAAAAAAAAAAFAAAAAFAAAAAUAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxNMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAIAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAACgKAAAAAAAAAAAAAACgAAAAAAoAAAAAAAAAAAKAAAAAgAAAAAoAAAAAAAAAAAAKAAAAAAAAAAAACgAAAAAAACggKoAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADiaZAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAQAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAABRQAAAAAAAAAAAAAAFAAAAAABQAAAAAAAAAAUAAAAAABAAAAABQAAAAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAFUAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxNMgAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAIAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAooICgAAAAAAAAAAAKAAAAAACgAAAAAAAAAAAoAAAAAAAACAoIAKAAAAAAAAAAACgAAAAAAAAAAAAAoAAAAAAAAAAKAKAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOJpkAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAABAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAAAFAAAAAAAAAAAAUAAAAAAFAAAAAAAAAABQAAAAAAAAAAAAAEFAAAAAAAAAABQAAAAAAAAAAAAAUAAAAAAAAAAFAFAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHE0yAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAgAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACgACggKAAAAAAAAAAoAAAAAAAKAAAAAAAAAACgAAAAAAAAAAAAAAoCAAAAAAAAACgAAAAAAAAAAAAAoAAAAAAAAAAAKKAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOJpkAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAABAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAFAAAAFAAAAAAAAAUAAAAAAAAFAAAAAAAAAABQAAAAAAAAAAAAAAUBAAAAAAAAAABQAAAAAAAAAAAAAUAAAAAAAAAAFAFAAAAAAAAABFAAAAAFAABAAUAAAAAAAAAAAAAAAAAAAABxNMgAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAIAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAoAAAAAoAAAAAAACgAAAAAAAAoAAAAAAAAAAKAAAAAAAAAAAAAACgIAAAAAAAAAAKAAAAAAAAAAAAACgAAAAAAAAAAoAoAAAAAAAAIAAAAAAAoAAAAAAAAoAAAAAAAAAAAAAAAADiaZAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAQAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAABQAAAAABQAAAAAAFAAAAAAAAABQAAAAAAAAAAUAAAAAAAAAAAAAAFAQAAAAAAAAAAAUAAAAAAAAAAAAFAAAAAAAAAABRQAAAAAAAAQAAAAAAAAAABQAAABQAAAAAAAAAAAAAAAAAHE0yAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAgAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAACgAAAACgAAAAAAKAAAAAAAAAACgAAAAAAAAAAoAAAAAAAAAAAAAAKAgAAAAAAAAAAAAoAAAAAAAAAAAKAAAAAAAAAAACigAAAAAAgAAAAAAAAAAAAACgAAAAAAAAAACgAAgAAKACArjaZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAABAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAFAAAAAFAAAAAAAUAAAAAAAAAAFAAAAAAAAAAABQAAAAAAAAAAAAAAUBAAAAAAAAAAAABQAAAAAAAAAAAUAAAAAAAAAAFAFAAABAAAAAAAAAAAAAAAAAFAAAAAAAAAAFABAAAAAAUEcbSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAACgAAAAACgAAAAAKAAAAAAAAAAACgAAAAAAAAAAAoAAAAAAAAAAAAAAKAgAAAAAAAAAAAAAoAAAAAAAAAAKAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAONpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAQAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAABQAAAAABQAAAAAFAAAAAAAAAAABQAAAAAAAAAAAAUAAAAAAAAAAAAAFAQAAAAAAAAAAAAAUAAAAAAAAAAAFAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAHG0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAIAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAoAAAAAAoAAAAAACgAAAAAAAAAAAoAAAAAAAAAAAAKAAAAAAAAAAAAACgIAAAAAAAAAAAAAKAAAAAAAAAAACgAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAADjaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAEAAAAAAAAAFAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAUAAAAAAUAAAAABQAAAAAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAAABQAEAAAAAAAAAAAAFAAAAAAAAAAABQAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFABxtIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAACAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAKAAAAAAAKAAAAAAoAAAAAAAAAAAAKAAAAAAAAAAAAACgAAAAAAAAAAAAoAAACAAAAAAAAAACgAAAAAAAAAAAAoAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADkaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAEAAAAAAAAAFAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAAAAAAUAAAAAABQAAAAAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAAAABQAAEAAAAAAAAAAFAAAAAAAAAAABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHI0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAIAAAAAAAAKAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAoAAAAAAAoAAAAAACgAAAAAAAAAAAAoAAAAAAAAAAAAAKAAAAAAAAAAAAACgAAIAAAAAAAAAAKAAAAAAAAAAAACgAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAORpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAQAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAABQAAAAAAAABQQFAAAUAAAAAAAAAAAAAFAAAAAAAAAAAAABQAAAAAAAAAAAAAAUAABAAAAAAAAABQAAAAAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByNIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAACAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAKAAAAAAAAAAAAKAAAoAAAAAAAAAAAAAKAAAAAAAAAAAAACgAAAAAAAAAAAAAAoAAACAAAAAAAACgAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADkaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAEAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAUAAAAAAAAAAAAAUBQAAAAAAAAAAAAAAUAAAAAAAAAAAAFAAAAAAAAAAAAAAAABQAAEAAAAAAAAAFAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHI0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAoAAAAAAAAAAAAAAoCgAAAAAAAAAAAAAAoAAAAAAAAAAAAKAAAAAAAAAAAAAAAACgAAAIAAAAAAAAKAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAORpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAQAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUUAAAAAAAAAAAAAABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAFAAAAAAQAAAAAAUAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAcjSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAooAAAAAAAAAAAAAACgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAKAAAAAAAgAAAAAAoAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAA5GkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAABAUEAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAFAFAAAAAAAAAAAAAAAUAAAAAAAAAAAFAAAAAAAAAAAAAAAAABQAAAAAAAEAAAAAFAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAHI0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAIAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAKKCAoAAAAAAAAAAAAACgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAKAAAAAAAAgAAAAAoAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAA5GkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAABAAAAAABQAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAAAAAAAAAAAAAAAAABQABQAAAAAAAAAAAAAFAAAAAAAAAABQAAAAAAAAAAAAAAAAAAUAAAAAAAABAAABQAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAByNIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAACAAAAACgAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACgACgAAAAgKACAoAAAACgAAAAAAAAAAoAAAAAAAAAAAAAAAAAAKAAAAAAAAAgAAAoAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAA5GkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAABAAAAABQAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAABQAABQQAAAAAAAFBAUABQAAAAAAAAAAUAAAAAAAAAAAAAAAAAAFAAAAAAAAAQAAAUAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAcjSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAgAAAoAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAoACgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAKAAAAAAAAAAgAAoAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAA5GkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAABAABQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAABQAFAAAAAAAAAAABQAAAAAAAAAAAAAAAAAUAAAAAAAAAABAABQAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAByNIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAACAACgAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAACgAKAAAAAAAAAAACgAAAAAAAAAAAAAAAAAoAAAAAAAAAACACgAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAADkaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAFAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAFAAUAAAAAAAAAAAFAAAAAAAAAAAAAAAAABQAAAAAAAAAAAEFAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAHI0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAKAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAKoAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACgAAAAAAAAAAAIKAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAORpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAVQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAFAAAAAAAAAAAABQAEAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAcjSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAoAAAAAAAAAAKAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAKKAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACgAIAAAAAAAAACggAKCAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAORpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAUAAAAAAAAFAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAVQAAAAAAAAAAAAAUAAAAAAAAAAAAAAAFAAAAAAAAAAAAAABQAAEAAAAAAAABQAQFABAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAHI0gAAAAAAAAAAAAAAAACgAgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgKAAAAACgAAAAAAoAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAooAAAAAAAAAAAACgAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAKAAAgAAAAAAAAKAAAAACAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAORpAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAAAAFAABQAAAAAUAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAUAUAAAAAAAAAAABQAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAFAAAAAQAAAAAAAFAAAAABAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAHI0gAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAACACgAAKAAIoAKAAAACgAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACigAAAAAAAAAAAAKAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAoAAAACAAAAAoIAACgAAAAgAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAADlaQAAAAABAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAABAAQAUBEAAAFAUAUFEAUAAAAFAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAFFAAAAAAAAAAABFFAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAFAAAAAQAAAAAAAAFAABAUEAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAcrSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCAIAAIACACogAAgAAKACgKKCiAKAAACgAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACgCgAAAAAAAAAgKAoAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACgAAAAAAIACggAAAAKAACAoIAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAA5WkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAEQAAAQAEFQBBAAAQAFABQUBRQUQBQAAAUAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUUAAAAAAAAAAABQAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAFAAAAAAAAAAAQFABAAUAEBQQAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAABytIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoACACAAAAgIAKiCAAgAAAAAKCgoCiiKACgAAoAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAooAAAAAAAAAAAAIooAICgAAAAAAAAAAAAKAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAICggKCAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAOVpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAQAAQAAAEBBUAQQEABAEAAFAUUFBQVQEUAFAABQAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAFUQFAAAAAAAAAAAAUAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAEBQQAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAABytIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoCAAAACAAAAgAIKgCCAgIAgAAAAoCigoKCqAKIAoAKAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAKKAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAIAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAA5WkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABAABAAAAAAAQAEFRBAQAEAQQAAAFBVFABQUFUAUFEAAUAAAAAAAAAFAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAABVAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAQAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABytIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAACCAAAAAAAAgAICCiCAgAICIAAAAKACqKCgAoKAooKIAoAAAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAACqAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAgAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAADlaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAEABQQQAAAAAEAABABUQQAEBAEEAAAAABQAVRQUAFBQVQEUFAAAAAAAAABQAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAVQAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAEAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcrSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAgAAgAAAIAAACAAgqIAICAAiAACAAoAAKCgKKCgAoKooKIAoAAAAAAAAKAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAACqAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAgAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAADlaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAEBQQAQAAEABAAAQUBEAEBAARABAAABQRQAUAFAUUFBQUFUUQBQAAAAAAAAAUAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAFUAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAHK0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAIAAAAIACAAgAIKAiACAAgAIgAgAAoAAACiAKACgAqigoKooKIAoAAAAAAAAKAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAooAAAAAAAAAAAACgAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAgKACAoIAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAA5WkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAABAUEAEABAAQEFEEABAAQEAQAQAAUAAAABQBAFABQFFBQaBVARQAAAUAAAAAFAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUUAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAQFBAUEAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcrSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAgAIACAgqIIACAAgCCAAACgAAAAAAKAIAoAKCqKCgqigogAAAACgAAAoAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAACigAAAAAAAAAAAAKAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAACAoICggAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAADlaQAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBQQAQAEABARFQEBAQABBAAABQAAAAAAAFAAEAUAFBVFBQVRRFAAAABQAAAUAAAAAAAAAAAAAAFAAAAAAAAAAAAAAABQBQAAAAAAAQFBAAUBQAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAQAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAABytIAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAgAICIrIAICAIIAAAAKgKAAAAAAACgACAKCgqigoKooAigAAAoAAAKAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAoAAoAAAAAAAIACgiigAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAICggAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAADlaQAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBQQAAQAEABARFZBAQAEQAAAQUABQAAAAAAAAUAARQUBRoFBQFFEUAAAFAAABQAAAAAAAAAAAAAUAAAAAAAAAAAAAAAFAAAAFAAAAAABAAUBQAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAQAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAABytIAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACAAgAIDKKgICAIIAACACgAKAAAAAAAACgACKACqKCgoKooAigAoAAAAKAAAAAAAAAAAAACgAAAAAAAAAAAAAAAoAAAoICgAAAgAKAAoAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAIAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAA5VQUAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAABAAQEBBUQQEBAEEAABBQAFAAAAAAAAAABQBAFBQVRQUFUUARQAUAAAAAFAAAAAAAAAAAABQAAAAAAAAAAAAAAUAAAAAUEABQQAAFAAUAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAEAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAciooACgACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIACAAgIioCAgICIAAAAAAoAAAAAAAAAAAIoAKCgKKDQKAooigAoAAAAAAAKAAAAAAAAACgAAAAAAAAAAAAAAAoAAAAAAoAICggKCAoCgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAgAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAADkVAFAAUAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAUEAAEABAQEFRBAQEAQQAAAAAUAAAAAAAAAAAEAUAFABVFBQUFUURQAUAAAAAAAAFAAAAAAAABQAAAAAAAAAAAAAAUAAAAAAAAAUEABQAFAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAABAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAHGqKACgAKAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgKAAAACAAACAgAICIqAgICIAIAAAAAAAKAAAAAAAAACAKAACgoKooKCgKKIoAAAAAAAKAACgAAAAAAoAAAAAAAAAAAAAAAKAAAAAAAAAAKCAoACgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAgAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAADjVAFABQAFFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAQEABkVEEBAQBBAAAAAAAABQAAAAAAAAAQABQAUAFUUFBQUBRRAAAAAAFAABQAUAAAAAFAAAAAAAAAAAAAABQAAAAAAAAAAAAABVAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAABAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAHGqAKACgAAqgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgKACAAAAAAACAAgIKzqCAgIAggAAAAAAAAAoICggKAAACAAAAKACgAqigoKACqAFAAAABQBFBQAUAAAAFAAAAAAAAAAAAAABQAAAAAAAAAAAAABQFAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAABAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAHEoogCgoAAKoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAICAgqaggMgAiCAAAAAAAAAAAAAAAAAAAAAAAoAKACqKCgAtAoFAAABQFFBRFABQAAAUAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAFUAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAcSigCKACgAqgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAoAAAAIAACAAgM6ipoICAgCACAAAAAAAAAAAAAAAAAAAAAAoAKACqAKBQUAAAAFBQVRRAFBQAAAUAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAFUAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAcQCiiKACgAoCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAoACggAAAAAAgAAICAgqaggICAgCAAAAAAAACAAAAAAAAAAAAAAAoAAKACqAAKAACgoAKo0IAoKAACgAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAoIooAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAACAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAOEFBVARQUAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABAAUEAAAAAAAAAAEAABAQEFRBAQEABAAEBQAQAAAAQAAAAAAAAAAAAAAFAABQAAVQBQAUFBVGhFABQAAUAAAAAAAAAAAAAAFAAAAAAAAAAAAAAABRQAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAEAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAcIAKCqKIAoAKAAAoAAICgAAAAAAAAAAAAAAAAAAAAAAACgAAAAAIAAAAAAAAAAAAAAAIACAAgIKiCAgIAAAAAAACIAAAIAAAAAAAAAAAAAAACgAAoAKoAoKCg0ooigAoAAKAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAooAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAACAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAOAFABQVRRAFABQAAAAAAAFAAAAAAAFQAAAAAAAFAAAAAAAAAABAAAAAAAAAAAAAAAAAABAAQAEBBUQQEAABAAAAAARAAAABAAAAAAAAAAAAAAAUAAFABVFBQUGlFBRAFAABQAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAFAFAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAQAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAB56CqKACgqiiAKACgAAAAAAAKCAoqAAAAAAAAAAoAAAICgAAAAAAAgAAAAAAAAAAAAAAAAAAAgAIACAgqIIACAAAAgAAAIgAAAAAgAAAAAAAAAAAAAKACgAqigoKCg0oCKCgAAoAAAAAAAAAAAAKAAAAAAAAAAAAAAAACgACgAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAIAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAA89ABVAFBQVQEUAFAABQAAAAAAAUAAAAAAAAAAAAAAABQAAAAAQAAAAAAAAAAAAAAAAAAAAAQAEABAQUBEEABAAAAQAAEQAAAAQAAAAAAAAAAAAAFABQAVRQUFBQVRRFBQAAUAAAAAAAAAAAAFAAAAAAAAAAAAAAAABQBQAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAEAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAecgAoCigoAKCqKIAAoAAAKAAAAAAAAAAAAACgAAAAAAAAKAAACAAAAAAAAAAAAAAAAAAAAAACAAAgIAKgIgAgIAACAAAiAAAACAAAAAAAAAAAAAAoAKACqKCgoKCqKIoAKAACgAAAAAAAAAAoAAAAAAAAAAAAAAAAKAKAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAgAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAADzUFABQFFABaC0AFUBFAAABQAUAAAAAAAAAAAAAAAAFAAAAAUEAAAAAAAAAAAAAAAAAAAAAAAAAAEABAAQEFRABAQAAEABEAAAEAAAAAAAAAAAAAABQAUFAUUFBQUFUUARQUAAFAAAAAAAAABQAAAAAAAAAAAAAAAAUAAAUAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAABAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAHmooIAoAKAooALQWgUAFAUBFABQAAAUAAAAAAAAAAAAAAFAAAAUEAAAAAAAAAAAAAAAAAAAAAAAAAAEABAAQEFRBAAQAEABEAAAEAAAAAAAAAAAAABQAUAFBVAFBQUFAUURQAUAAFAAAAAAABQAAAAAAAAAAAAAAAAUAAAUAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAABAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAHmooAAIAoAKAooFBaABQWgAoCiiAAAKAAAAAAAAAACgAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACAgIKAiCAgAIACIAAIAAAAAAAAAAAAACgAAoKAooKACgoKAooAigAoAAKAAAAAACgAAAAAAAAAAAAAAAoAAAoAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAACAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAPMRQAFAAAEUAFAAUUAAFABQAWgUCqFEKBQKBQAWgAAAoAAKAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIACAgqIICAAgAIgAgAAAAAAAAAAAAAKAACgAqigAoKACgAqgCgogCgAAoAAAAAKAAAAAAAAAAAAAAACgAACgAAAAAAAAAAKAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAIAAAKAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAA8xFAAAAAUAARQAAUAAFUAWgUCgtAoFAoFAoFAoFAoLQFRQAUAFAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEABAQVEEABAQEAQQAAAAAAAAAAAAAFAABQAUBRQAUFABQAUBRQBFBQAAUAAAAFAAAAAAAAAAAAAAABQAAABQAAAAAAAAAFAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAEAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeYigAAAAAAKAIAoAAAKAAooFAoFAoFAoFBaBQKBQWgAoCooAKCgAAoAAAAAAAKAAAAAAAAAAAAAACAAAAAAAgAIACAgqIIACAgIAggAAAAAAAAAAKAAAAACgAqgCgAoKACgAoCigCKCgAoAAAAKAAAAAAAAAAAAAAACgAAACgAAAAAAAAAKAAAAAAAAAAAACgAIAAAAAAAAAAAACgAAAAAAAAgAKCAACgAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPMRQAAAAAAAFAAAEUAAAAFAAAAAAUEABRQAAUFABQVUAUFABQAAAAUAAAAAAAAAAAAAAAEAAAAAAABAAQAEBABUQQAEBAQBBAAAAAAAUAAAAAAAFAAAABVFABQUAFABQFFBRAFABQAAAUAAAAAAAAAAAAAAAFAAAAAFAAAAAAAAAUAAAAAAAAAAAFAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB5iKAAAAAAAAAoAAAgACgAAAAAAAAAAAoAAKoAoKCgCKooKACgAAAoAAAAAAAAAAIAAAAAAAAACAAAgAAIACCiCAgAICAiCAAAAAAAoAAAAAAAKAAAAACqAKCgoAKCgKKCiAKACgAAAoAAAAAAAAAAAAAAKAAAAAAAKAAAAAAAAoAAAAAAAAAAKAgAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADzEUAAAAAAAAABQAABAAAAAAAAAAAFAAABQAUBRQUFABVRQUAFAABQAAAAAAAAQAAAAAAAAAEAABAAQAAAEAFEEABAQEBEEAAAAAABQAAAAAAUAAAAAAFAUUFBQUFAUUFAEUAFAAABQAAAAAAAAAAAAAAUAAAAAAAAUAAAAAABQAAAAAAAAAAUBAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHmIoAAAAAAAAAACgAACAAAAAAAAAAAAKAACgAoCigoKACqigoAKAACgAAAAAAgAAAAAIAAAACAAgAAIAKAAAAIIACAgICIIAAAAAACgAAAAAAAoAAAAAKoAoKCgoKCqKIAoAKAAACgAAAAAAAAAAAAAoAAAAAAAAAoAAAAACgAAAAAAAAAAAoCAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPMRQAAAAAAAAAAAFAAEAAAAAAAAAAAAUAAAFABQUBRQUFAEVRQAUAFAAAAABAAAAQAAAEAAABAAQAERQAAFAUAAEEBAQEBEEAAAAAAABQAAAAAAUAAAAFUAUFBQUFBVFEUAFAAABQAAAAAAAAAAAAAUAAAAAAAUEBQAAAAAAFAAAAAAAAAAAABQEAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeYigAAAAAAAAAAAAKAIAAAAAAAAAAAoAAAKAACgAoKoAoKIqigAoAKAAAAACAAgAAIAACAAAAgCCCgIAACgAoCgAAggJoIDICCAAAAAAAAAAoAAAAKAACqAKCgoKCgqigogCgAAAoAAAAAAAAAAAAAKAAAAAAAKAAAAAAAAoAAAAAAAAAAAAAKAgAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACg8tFAAAAAAAAAAAAUQAAAAAAAAAABQAAAAUAAFAABQFFBQUFEFFBQAUAAAAAEABAAQAEAABAEAEFAQAAAAAFBQFFEBUQQE0E0EBEEAAAAAAAAAAABQAAUAFUAUFBQUFBVFBRAFAAABQAAAAAAAAAAAAUAAAAAAUAAAAAAAABQAAAAAAAAAAAAAAUBAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAB5aKAAAAAAAAAAogAAAAAAAAACgAAAAAoAAAKAACgAqgCgoigqgCgAoAAAAAIACAAgIAACIAAIKAgAAIACgAoKAoogCCiCaDOggIggAAAAAAAAAAAKACgAoCigoKCgoKooKIAoAAKAAAAAAAAAAAAACgAAACggKAAAAAAAAAoAAAAAAAAAAAAAAAKAAgAAAAAAAoAAAAAKACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAADy0UAAAAAAAAEUAAAAAAFAAAAAAAAABQAAUAAFABVAFABQUQBVFABQAAAAAAQAEABAAQABBAABUABAAAAAUAFBVAQAFRBAZ0EBEAEAAAAAAAAAABQAUFAUUFBQUFBVFBRAFAABQAAAAAAAAAAAAAUAAAAAAUAAAAAAABQAAAAAAAAAAAAAAAAUABAUEAAAAAAFAAAAABQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAeWigAAAAAAgCgAAAAAoAAAAAAAAAKAAACgAoAKoAoAKACiAKooAKAAAAAAAACAAgAIACAAAIIAKgAAIACgAoKoACAqIAMggIAggAAAAAAAIACgAAoAKCqKCgoKCqKIoAKAACgAAAAAAAAAAAAAoAAAAAAAAoAAAAACgAAAAAAAAAAAAAAAAoACAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAADy0UAAAAAAEUAAAAAFAAAAAAAAABQAAUAAFABVFABQAUQBQFFABQAAAUAAAEAAABAAQAEAAABAEEAFAQFAABVAAQAFRBAQEBAARAAAAAAAAAAAABQUFUUFBQUFUURQAUAAFAAAAAAAAAAAAABQAAAAAAAAABQAAAAFAAAAAAAAAAAAAAABQAEAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAHlooAAAAAIoAAAAAKAAAAAAAACgAAAAoAKCqAKCgAogCgKKACgAAAoAAAAAAAIAACAAAgAAAIACAAIEFAFAFEAAQUQQEBAQEABEAAAFABAAAAAAUFBVFwFwFBQVRRFABQAUAAAAAAAAAAAAAAFAAAAAAAAAAAAFAAAUAAAAAAAAAAAAAAAFAAAQAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAeWigAAAAKIAAAAAoAAAAAKAAAAAAACgAoKAooKAIoKAooAKAAACgAAAAAAAAAAAgAAIAACAAAAgAAEAgAKACAAgqIICAgIAAggKAAAAAAAAAAACguKNYC4C4CqKIoKAACgAAAAAAAAAAAAAoAAAAAAAAAAAAAAoACgAAAAAAAAAAAAAAoACAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAADzEUABAAUQAAAABQAAAAAUAAAAAAFAABQAVRQUAFEUFUAUAAAFAAAAAAAAAAAAAABAAAQAAEAAAAAAAABQQAEBEVNBNBAQEABEAFAAAAAAAAAABQFGsBcBrAXAVUUFAABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAUBQAAAAAAAAAAAAAVAUEAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHmIoAAAIAAAAAoAAAAAKAAAAAACgAAoAKooAKCiKACqKAACgAAAAAAAAAAAAAAAAAgAIAACAAoAAAAAAAAIADOoqaCaDIIACIAAKAAACgAAAAgKACqLgNYC4DWKKIoAKAAAAAAAAAAAACgAAAAAAAAAAAAAAAACqAAAAAAAAAAAAAgoAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPMRQAQAAAABQAAEAAAFUAAAAAUAAFABQAVQBQUFEAVQBQAUAAAAAAAAAAAAAAAAAAEABAAQAFAABQAAAAAAQE0GdRU0GdBAQBBAAAAUAAFAAAAAAAUUFwGsBrAXFFEUFAAAAAAAAAABQAAAAAAAAAAAAAAAAAAUUAAAAAAAAAAQAUAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHmoAIAAAACgAIAAAAKAAoAAAAoAKACgAqgCgoAigoCigAoAAAAAAAAAAAAAAAAAAAIACAAgKAACgAoAAAAICAmgmorOgmgyCAIIAAACgAoAAAAAAACig1gLgNYCqKIoKAAAAAAACgAAAAAAAAAAAAAAAAAAoAoAAAAAAAAAAgAoAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPNQAAAAAAEAAAAAFAAUAAAUAAFABQAVRQAUARQUAFUAAUAAAAAFAAABAAAUAEAAAABAAQAAAAFABQAAAAAQEBNBNRWdBNBkAEQQAAAFABQAAAAAAAUFUXAXAawFwFVFABQAAAAUAAAAAAAAAAAAAAAAAAFFAAAAAAAAAAAEAFAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB5qAAAAAAAgAAAAAqgAAACgAAoAKACqAKCgogCgAqgACgAAAAoAAAAAAAAAAAAIAACAAAgAKAACgAAoAIAACAzoJqKmgzoICAiAAAAAACgAAAAAAAoKouAuAuA0CqAKIAoAAAKAAAAAAAAAAAAAAKAAoAAAAAAAAAACAACgAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAgAAAAKAAAAAAAADzkAEAAAAAAAAAABQAAUAAFAABQAVQBQUAFEUFAUAUAAAAAFAAAAAAAAAAAAAABAAAQAAAAFAABQAAAAQAEBNBNQZ0VNBAQEBEAAAAFAABQAAQAAFAUUGsBQUFBQFFABRAAFAAAAAAAFAAAAAAAUAAAAAAAAAABAAABQAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQFBAAAAAAUAeegAAAgAAAAAAAKAACgAoAKAACgAKKACgoKIAoKoAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAgAICAiCaKgICAgIgAgAKACgAAAAgAAKACqKCgoKCgAoKooAigAAAACgAAAAAAKAAAAAAAAAAAgAAAAoAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAACAAAAAAAAAAABQKBQAAAAAAAAAcIAAIACAAAAAAoAAKACgoKBAICxQAAABQAUFEUBRQAAUAAAAAAAAAAAAAAAAAAAAAAEAAAABQAAAAAAAAQAEBEEFQEBAQEBEAAAFAAAAABAAAAUAFUUFBQUFBQUBRQUAAAAAAAAAFAAAAAAAAAAAAQAAAAUAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAACggFQKBQKBQKBQKBQKBQKCUCgUCgUCgUCilBaBQKBQKBQKDjEAQAEABAAAAUAAFBQAUFBYoQFgAAAAAAAKCgogCqAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAgIggqAgICAiCAAoAAAAAAIAAACgAoCigoKCgoKCgqigAAAAAAoAAAAAAAAAACAAAAAACgAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAgFAoJQKBUCgUCgUEoFAoFAoFAoFAoFAoFFSgUCgUCgUCgtAoFAoFAoFBzCAIACAgAAAAAKACgAoKooKCgAQAAAEABQAUFAEVRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAEQQVATQZBAQBAAAAAAAABAAAAAUAFBVFBQUFwFBQUFUAAAAUAAAAABAAAAAAAAAAAABQAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAASgUCgUCgUCgUEoFQKCUCgUEoFAoFAopQSgUCgUCgUCgUCgUCgUEoFAoFAoFBaBQKBQKBQKBQfEQBAAQEABAAUAFABQAUFUUFBQAAAAAQAAAFBQBFBVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAABAAAAAQBBBU0GdBNBAQEQAAAAAAAAQAAAAFABQVQBQawFwFBQUAFAUAUAABAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFABAAAAAAAAAAAAAAAAAAAAAAAAAQACgAUCglAoJQKBQKBQKBUCglAoJQKBQSilAoFAoFAoJQKBQKBQKBQKBQKBQKBQSgUCgtAoFAoFAoFAoFBhUARABAQEAABQAUAFABVFBQUFAAAAABAAAAAUAFEUBQAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAQAAAAEQQE0VNBNBnQQBBAAAAAAAAQAAAAFABQAVRQUFBQaABQUAAAFAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAoFAoFAoJQKBQKBQKBQSgVAoJQKBQSgUCgUCgUEoFAoJRSgUEoFAoFAoFAoFAoFAoFAoFAoJQKBQKBQKBQKBQKBQKBQWgUCglAVAEBEEABAAAAUFABQFFBQUFABQAAAQAAEABQAUAFEAFAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAARAFZ0E0E0GdBAEEAAABQQAAEAAAABQAAUFUUFBQUFBQUAFAABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAQCgUCgUCglAoFAoFAoFBKBQKBQKBUEoFBKBQKCUCgUUoFAoJQKBQKCUCgUCglAoFAoFAAAAAAAAAAAAAAAAAAAAAAAAABpUQAEBEEABAUAFBQFFABQUAFBQAAAAAAQAAAAFABQBAAAAAFAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAQEFQE0E0GdBEAEAFAUQABAAAQAAAUEUAFABVFBQUFBQUAFBQAAUAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAACggFAoFAoJQKBQKBQKCUCgUEoFAoFAoFAoJQKBUCgUCglAoJQKKUEoFAoFAoFAoJQKBQKACAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAANKgACAiCAgAAKCgKKCgAoAKACgAAAoIAAACAAAoAAKAAAAAAAAIAAAAACggKCAAAoIACgAAAAAAAAAAAAAIAAAACAgJoJoM6CIAIAKoAgACAAAgAAoAACiAAKCgqigoKCgoAKACgAAoAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAIABQKBQKBQKBQSgUCgUCglAoFAoJQKBQKBQSgUCglAoFAoFBKBUCgUCilAoFBKBQKCUCgUCglAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAoNqiAAgIggIACgAoKooAKAACgAAoAAAAAAAAICgAAAAoAAAAAAAAAAAAAAAAAAAAAAIAAAAAACAAAAAUCgUAAAAEBAQE0EQQEAAFUAQABAAQAAVAAAUAARQAUFABpRQUAFBQAUAFAAAABQAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAEAAAAoFAoFBKBQKBQKBQSgVAoFAqhQKCUCgUCglAoFAoJQKBQKglAoFBKKUCglAoFAoFAoFAoFAoFABAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABQAbVAEBEEBAAQFBQAVRQAUAAAFAABQAAAAAAQAAAAFAAAAAAAAAAAAAAAAAAAAAAAABAAAKBQSgUCgUCgUCgUCgUCgUCgUEBAQEQQAEAAFUAAQBAAQAVAAAAAUAAFEAUFBQFFBaC0CgtAoLQKCgAAoAAAAAAAAAAKAAAAAACAAAoAAAAAAAAAAFAAAoFBKBQKBQKBQSoFAoFAoJQKKUCgUCglAoFAoFAoJQKBQKCUCgUCgUEoFAoJQKBQSgUCgUCgUCgAAUAAAAEAAAAABAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAFAAAABQAAbVAEQQEBAAQFBQUAFUUAAAAAFAAAAAAAAAAAAAAAAAAAAABQAAAAAQAAAAAAAAAEAoFAoJQKBQKBQKBQKBQSgUCgUCgUCgUEBEAEBAABQAFABBAEAFQAAAAAAFAABQBFBQUBRQKC0CgtAoLQKC0CgUCgtAoFAoFAoFAoFAoLQAAAQCgUCgUCgUCgUCgUCgUCgUCgUCgUCoFAopQSgUCgUCglAoFAoJQKBQKBQKBQSgUCgUCgUCglAoFAoAIAAACAAAgAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAoAAAKAgAA2qAICAgIACAoKACgoAKAAAoAAAAAAAAAAAAAAAAAAUAAAAAAFABAAAAUAAEAAABAAKBQSgUCglAAAoFAoFQKoUCgVAqhQEAEBAAQAEFAUAAAAAEBAAAQAFAABQAAUAFEAUABRaBQKC0CgtBaBQKC0CgUCgUCgUCgUCgtAoFAoFAoFAoFAoFAoFAoFQKKUEoFAoLQKBQSgUCgUCgUEoFAoFAoJQKBQKCUCgUCgUCgUCgUCgUEAAAAAAAABAAAAAQAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAFAQAAAAbVAEBAQEBAAUAFBQUAAAAAAAAAAABQAAQAASgUCgAAAoAAAAAAAAAAAKAAAACAAAgCgCIAAIAAAAAAAAAAAAAACAAAgAIAKAAoAAAIACAAgAAKAACgAAoAAKAIAAAUFoFBaBVFoFAoLQKBUCgUCgUCgUCgtAoFBaKUEoFAoFAoFAoFAoFAoFAoFAoFAoFBKBQKBQKBQSgUCgUCglAoFAoFBKBQKBQKBQAAAAAAAAAAAAAAAAAAQAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAUAAAAAFAAAAAAAAAAAAAAABQAAEFAAAAABpUAQEBBQEABQAURQAUAAAAAAAAAEAAABAAAAAAAAABVAAAAAAABQAAAAABAAAEBAAAQAAAEAAAAAAAAAAAAAABAAAQAUAAABQAQAAEABAAAUAFAABQAAAAAAAAAAUQBaBQKKtAoFAoFAoFAoFBaBQKBQWgUCgUCglAoFAoFAoFAoAAAAFAAoFAoFBKBQKBQKBQSgUCgUCgAgAAAAAAAAAKAAAAAAAAAACgAAgAAAIAACAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAACgAAAoAAAAAAIAAACgAAAqAAAAAAADSiAAgIAggAKoAoAKAIAAAAAAAAAgAAAIAAAAAAKAAoAAAAAAKAAAAACgAAAAgAiAgAAIAAAAAACAAAAAAAAAAAAAgAoAAAAAAAAACAAAAAAAoAAKAAAAAAAAAAAAACgAAAoAAAAAAAKAACgAAAAgAAAAAAAAAAAAAAAIAAAAACAAIACgAACAAAAAAAIKAAAAACgAAAAoAAAAAAACiAAAgAAAIAAAAAAAAAAAAAAAAAAAAAAAAACgAAIKAAACgAAgAAAAAAAAKAAAAAAACgKIAggAAIACgAqgAAAAAAAAAAAACCAAIAAAAKAoAACAAAACgAAAAAoAAKoAAAgIACACIAAAAACAAAAAAAAAAAACgAIAAAAgAqgACAAAAgAAAKAAACgAAAAAAAgAAAKAAAACgAAAAAoAAAAAKAAAAAAAAAgAAAKCAAAACAAAAAgAAAAAIAAAAAAAAAAAAAACgAAAAoAAAKAACgAAoIAAACAQCKIAACAAAAAAAAAAAAAAAAAAAAgAAAKAACoAAAKAAAAAAAAAAAAAAAAAAAACgAAgAIAAAAAAAACgAKAAAACAoAgAAAIAIAACgAAACAAACgAAAAAAoAAAKACgAigCAgAIAAAIAAgAAAAAIACgACqAgAgAAAAAAAAACgACAAAAAAAAoAAAAAAAAAAAAAAAAAKAAAAAAgoAAAAAKAAAAAAAAAAAAAAAAAAACAAAAgAAAIAAAAAAAAAAAAAAAACgAAoAAAKAACgAoAAKCAAAAQEAgEBIBAICAAKAAAAAAAACAAAAAAACAAAAoAAAKAACgAAAAAAAAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAACAAKIAAAAACoAAAAAAAAAKAAAACgAoAAAIoAgAIAAAAAggAAACgCCAKKIAKAAAAACAAAAoAAAAAIAAoIAAAAKAAAAAAAAACAKCCgAAAAAAAoAAAAAKAAAACgAAAAAAAAAAgAAAAAAAAAIAAACAAAAgAAAAAAAAAAAAAKAACgAAoAAKAACgAoAAAAAAAAIBAICQCAQEgEAgEAAgEAAAAAAAAAgEAgEAgEAgAEAgKAACgAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAACAAAAgAAAACggAAAoAAAAAAAAAAKAACgAAAAgAIAAAAAACAAAAAAAAAAoAKAAACAAAAAAoAAAAIAABAAAAAUAAAAAAAAAAAACAAAAAAQFAAAAABQAAABQFAAAAAAAAEAQAAAAAAAAAAEAABAAAAQAAAAAAAEAABQAAAAUAFAABQAAAUAAFABQAAAAAAAAQAAEgAEAgJAIBAIBAAAAIBAWAQCAQEgEAgEAgEAgEBYBAAAUAAAAAAAAAAAAAAAAAAEAABQAAfMAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAUAAAAAFAAAAAAAABAAAAAAAAAAQAAAAFAABQAAUEAAAAABQAAAAAIBASAQCAsAgAEAgAAAAAAEAgEAgEAgAEBQIBAIBAIBAABVAAAAAAABQAAAAAAAQAAAQAFBAAAAAAEAABAIBAQCAQAAACAAAgLAAAAAAUAFAABQAAAAAUAFAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAgAAAAKAD5AAAAAAAAAAAAAAAAAAAAgAAAAAIAAAAAAAAAAAAAAACgAAAAAAoAAAAAAAAAIAAAAAAAAAAAAACgAoAAAAAAAEBQAAAAAAAAAIBAABQAAAAAAAACCEAgAAAqgAAAAAAAAAoAAAAAAAAAAKAAAACAAAAAAAAAAAAAAgAgBASAQCAQEgEAgEAgEAgEAgAEAgAKAACgAoAAAAAAAKAAACgAAAAAACgIAAIAAAAAAAAAAACggKAAACAAoIAAAAACgKAAIAAAAAAAgAAAAAAAAAAAAAKK+QgAAAAAACAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACgAAoAAAKACAoAAAAAAAAAAAAoAAAAAAAAAAAAAAACgAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAIgAAAAEAgJAIABAIAACgQAAAFAABQAAAAAAAAUAAAUAAAAAAAAAAABAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAFAAfIQAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAACAQCAQCAQCAoAAAKAAAAACgAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAACAAAAAAAAAAAKAAAAAAAAAACgACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAIgAAAAAAAAAAAAoAAAAD5iAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAABAAAIBAIBAIABAAAAUAAAAAAAAAAAFAgEAgAAAAAEAgEAgAAKAAAAAAAAKoAAAAgKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAIACgAAAAAAKAAAAAAAAAICggKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAgCACggAKAAACAoAAAAADAgAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAKAAAAAAAAAAAAAAAACgAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAICgiCgAAAAAAAAAAAAAMiAAAIAAAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAAACgAAAAAAAAAAAAAAACgAKCAoAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAICggCCggAAKAAAAAAAAAAggACAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAACgAAAAAAAoAAAAAoICgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAIgAoICgAAAAAAAAAAAIIAAAAAgAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAoAAAAKAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACCAAAoICgAAAAAAAAAAgACAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAoAAKKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAICgAAgCAACggKCAoAAAAAAAAgCAAIoAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAoAAAAAAAKAAAAACgAooAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAIAAAAgAAAoAAAAAAAAAAgACAIAoAAAAAAAAAAgAAAAAAAAIAAAAAAAAAAAAAACAAAAAoAAAAAAAAKAAAACgCgKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAoAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAIAAgAAAoAAAAAAACgiAAAAIgCgAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAKAAAAAACgCgKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAoAAAAAAAAAgKAAACAAAIAKAAAAAAoAAAIgAAAAggqiIKAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAKAAKoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICgAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAICgAAgAAAAKAAAAAAAAAyAgAAAAKAAgAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAoCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAKAAAAAAAAAyAAgAAACCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAoAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAACAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAACgAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAKCAoAAAAAADICAoAAIAgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAoAAAIACgAgAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAoAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAAMgIgAKACAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAgAAAAAAAAAAAAAKCAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAACgAAAAAAMogAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAICggAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAIAAKoAAAMogAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAooAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgACAoAAIAAAAAAAAAAAAAAAAAgAKKAAAAAAAAAAAAAAAAAAAACAoIAAAAAAAgAAAAAAAAoiAAAAAAAIoAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAKAIAAgKACAoAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAICgAAAAAAAAAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAIAAAAAAAAAAAAAAAAgAAAoIAoAoAAAAAAAAAAAAAAAICgAgAAAAACAAAAAAAAAAAIAAAAACggAKAAAAAAAAAAAAAAoIAAAACgAAAAIAAAAAAAgAAACAAoAAAAAoAAAAoAAAAAAAIAAAAAAACgAAAgAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAogAAAAAACAAAAAAAAAAAAAAAAAAACgAAAAAAAAKAAAAIAAAAAAAAgAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAACgAAAgAKAAAAAAAAAAgAAKAAgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAICggKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAAAAACAoAAAICggACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAoAAAAIAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAoAAAAAgKAAAAAAAACAAAAoIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgKCAAAAAAKAACAAAAAAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAKAAACAoAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAACAoAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAIAAAAAAAAAACgAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAKIAAACgAAAgKCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoIAAAAAAAAoAAAAIAAKAAACAAIAACgAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAACAAAAAAAAoAAICgAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAACgAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAgACgAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAACgAAAIAAIAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAACAoAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAACAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAACgAAAAIAIAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAACAAoAAAAAgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAKAAACAAAAoAAAAAAIAAACAAAAoAAAAAAAAgAAKCAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAACgAAAAAAAIIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAKAAAAAIAAAAAAAACgACAAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAgAAAAAKAAAAAAAAIAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAKAAAAACIAAAAAAAAAAAAAAAAAAAAAAAACAAAAoAAAAAoAAAAIAAAACgAAIAAACoAgAAKAAKIAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAKAAAACAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAgAAAIAAAAAAACgAAAAAAACAAAAAAAAKAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAKAAACAoAAIAAgAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAACgAAgAAAAACCgAAAAgAgoAAAIAoAAAAAACgAAAKAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAgAAAAAAAAAACgAAAAAAgAAAKACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAKAAAAAAAAACAAACgAAAACIAAAoIAoAAAAAAAACgAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAACAAAAAAAAAAoAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAoAAAoIAAAgAAAAoAAiACgAgAAKAAAAAAAAAAAAoAAACgAAAAAgAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAACAAAAAAAAAoAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACggACgAAAAgAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACgAAAAAgAAAAoiACqAAAIgoAAICgAAAAAAAAAAAAAKAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAoAAAAIAAAAAAAAAAAACgAAAgAAAAAAAAAKAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoIAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAACAAAIAAooAIgAoAAAICgAAAAAAAAAAAAAAAAKACAAAAAAAAAAoAAAAAAAAAAAAACAAAoAAAIAAAAAACgAAAAAAAAAAAAAgAAAAAAAKAACAAAAAAAAAAAAAAoAAIAAAAAAAACgAAAAAAACAAAAAAAAIAAAACgAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAACgAAAgAAAKCAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAIIoAIAAAAoAoAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAACAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAAAACgAAgAAAAAAAAAAAAAKAACAAAAAAAAAoAAAAAAAAgAACAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAoAAAAAIAAAAAAAgKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAAAoAAAIAAAAACgAAAAgKAAACAAAAAAAAoAAAAAAAAAgCAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAACAAAAAAoAAAAAAAAAoICgAAAAAAAgAACCgAgCgAAAAAAgAAAAAAAAAAAAAAAAAAAAAACAoIAAoIAAAAAAAKCAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAAAAKAACAAAAAAoAAAAAAAAAIAAAAAAAACgAAAAAAAACAIAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAACgAAAAgAAAAAAAAKAAAAAKCAAoAAAAICgAAgAAAKgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAACggAAAAAAAAAoICgAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAoAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAKAAAAAAAAAIgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAKAAAAKAAAAAACAoAAIACgAAIAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAACggAAAKACAoAgAAAAAAAAAAAAAAAAAAAKgAKAoAAAAAAAACAAAAAAAAAAAAAAgAKAAAAAAAAAAACgAAAAAAAAAAAgAAAAAAAAAAAAAAKAACAAAAAAAAAAAAoAAAAAAAAAIIAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAoAAAoAAAAAICgAAAAAAAAIAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAACggAAAAAAAKIAAAAAAAAAAAAAAAAAAAAgKAqgAAAAAAAAgAAAIAAAAACgAAAgAAAAKAAAAAAAAAACgAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAACAAAAAAAKAAAACAAAAAoAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAoAAoAAAAICggKAAAAAAAAgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAKCAAAAAAAAACKAAAAAAAAAAAAAAACAoIAAACqAAoAAAAIAAAACAAAAAAAoAAAIAAAAAAAACgAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAgAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACgACgAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAoAAAAAAAAAAAAIAAAAAACqAAAAAAAAAAAAgAAAAAAAAKAACAAAAAAAAAAAoAAAAAKAACAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAACgAAAAAAAAgAAAgAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACAAoAAAAAAAAAoACgAAAACAoICgAAIAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAoICgAgKACAoIAAAAAAACqAAAAAAAAAAAAgAAAAAAAAKAACAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAIAAAAAAAAAAAgAAAAAKACAAAAAAAoAAAAAAAAAAKAAAAAAAAAAAACAAAAAoAAAAAAAAAAoAICggAACgAACoAAAAAIAAAAAAAAAAAAAAAAICgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAooAAAAAAAAAAAAgAAAAAAAKAAACAAAAAAAgKAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAAAAAAAIAAACggAAACAAAAAAAAAAAAAAAAAoAAAAAAAAKAAAAAAAAAAAACAAAAAAAoAAAAAAAAoICggAAAAAAAKAAAAAACAACAoAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACggAAAAAAAAAoAAAAAAoAAAAAAAAAgAAAAAAAKAAACAAAAAgAAAAAKAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAAAAAAAAAAICggAACAAAgAAAAKAAAAAAAAACgAAAAAAoAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAgAKAAAAAAAAKAAAAACAACAAoAAAAAAAAAAAAAAAAAAAgACCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAoAAAAAAAAAoAAAAAAAAAgAAAAAAAKAACAAAAAAgAAAAAAAKAAAACgAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAgAAIAAAAAAACgAAAAAAAoAAAAAKAAAAAAAAAAAAACAAAAAAAAoAAAAAAIAAAAAAAACgAAACgAAAACIAAKAAAAAAAAAAAAAACAoAAAAgACAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAoAAAAAAAAAAoAAAAAAAAAAgAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgCAAAAgAAAAAAAKAAAAAAACgAAAAAoAAAAAAAAAAAAIAAAAAAAAACgAAAgAAAAAAAAAAAKAAAKAAAAAIgAAAAAAoAAAAAAAAAIAAAAIAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAoAAAAAAAAAAAAAoAAAAAAAAgAAAAAAAAAAAAAAIAAAACAoAAAAAKAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAIAAACAAAAAAAoAAAAAAAAKAAAAAACgAAAAAAAgAAAAAAAAAAAAAAKCAAAAAAAAgAAAKAAKAoAAAAAACIAAAAAAAAKCAAoIAAAAAAAIAAAAAAAACgAAACgAAgAAAAAAAAAAAAAKCAAAAAIACgAAAgAoAAAAAAAACAAoAAAAAACgAAAACAAAAAAAAAAAAAAAgAAAAAIACgAAAAoAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIgAAAAIAAAAACgAAAoAAAIAACgAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAKCAoIgAAAAAqgAAAoAAAAACIAAAAAAAAAAAAAAAAAAAgAAAAAAAAAKAAKCAAAoAIAAAAAAAAACgAAgAAACAAAAAACgAAAAAAAAAIAAAACgAAAAAAKAAAIAAAAAAAAAAAAAACAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCAAAAAAAAAAAAKAAAAAACAAAAoAAAAAAAAAAAAAAIAAAAACgAAAAAAAAACgAAiAAAAACgKAAACgAAAAIgAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAoAAAICggAAAAAAAAAAKCAAAIAAAAAAAKAAAAAAAAAAgAAAAAAKAAAAAAAoAgAAAAAAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIIAAAAAAAAAAAoAAAAAAIAAAAACgAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAKACAIAAAAKAoAAAAKAAACIgAAAAAAAAAAACgAAAgAAAAoIAAAAAAoAAoAAAAAAAIAAAAAAAAAAAAAAgAAAAAAoAAAAAAAACAAAAAAAAAAAoAAAAIAoAAAAAAAAAAAAAgAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAACAAoAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACACAAAAAAAqgACAAAAAAAIAAAAAACgAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAKACIAAAAKAoAAAAAKCAAIgAAAAAAAAAAAAAAAAAAAKAACAAAAAKAKAAAAAAAAAAAACAAAAAAAAAAIAAAAAAAKAAAgAAAAAAAAAAAAAAAAAKACAAKAAAAAAAAAAAAAIAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAIAAAAACqAAAICggAAAACAAAAAAAAoAAAAAAAAIAACAAAAoAAAAKAAAAAAAAKAAAAgAAAKAAAAAAAAAAiAAAAAAAAAAAAAAAAAAAoAAIAAAAAAooAAAAAAAAAAAAIAAAAAAAAAAAgAAAAAAoAACAAAAAAAAAAAAAAAAAAAAAAAKAAIAACgAAAAAAAgAAAAAAAAAAAAAAKAAAAAAgKAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAIAAAIAACqAAAAAAAAIAAAgAAAAAAAAKAAAAAAACAAAgAAAAKAAAAAAAACgAAAoqAAAAAAAAAAoAAAAIAAiAAAAAAAAAAAAAAAAAAAAoIAACgAgACgCgAAAAAAAAAAAgAAAAAAAAAACAAAACgAAAIAAAAAAAAAAAAAAAAAAAAAAAAoAgAAAAKAAAAAAACAAAAAAAAAAAAAoAAAACAAAAAoAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAIAAgAAAAAAAAKAAAAAAACAAAgAAAAKAAAAAAAAACgAAooACAAAAAoAAAAAAAIAAiAAAAAAAAAAAAAoAAAAIAACgAAgAAAACigAAIAAAAAAAAAIAAAAAAAoAAIAAKAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAIoAAAAAoAAAAAAAIAAAAAAAAAAAACgAAIAAAAAAAACgAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAgAAAAAAKAAAAAAAAAAAAAACAAAAAoAAAAAAAAAAAAgACAAAAAAAoAAoAAAAIAgAAAIAAACgAAAAAAAAAoAAKKAAAAAAAAAAAAAAAgACIAAAAAAAAAAAACgAAAgAAAAAAAAAAAAKAAAAACAoICggAAAAAAAAAAAAAKAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAIoAAAAAoAAAAAAAAIAAACAAAoAAAAKAAgAAAAAAAAAAAKAAAACAoAAAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAACgAAAAAgAAAAKAAAAAAAAAAAAAAAAAIgAAAKAAKAAAAAACIAAACAAAAAAAAAAAAoAAKAAKoAAAAAAAAAAAAAAIAAiAAAAAAAAAAAAoAICggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAIoAAAAoAAAACAAAoAgAAIAAACgAAAoCAACgAgAAAAAAACgAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAiAAAAgAAAAAAAAAAKAACgAACqAAAAAAAAAAAAACAAIgAAAAAAAAAAAKAAAACAAAAAAAAAAAAAAoIAAAAAgAAKAAAAAAAAAAAKAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAIoAoAAAAACAAAAAogAAIAAACgAAAoCAAAAAAAAAAAAAoAAAAAAAAAAAAAAICgAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAIIAAAAgAAAAAAAAAKAAAACgACgAKAAAAAAAAAACAAAIgAAAAAAAAAAAKAAAAAACAAAAAAAAAAAoIAAAAgAAAAAAKAAAAAAAAKAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAKIAAACAoAAAAKgAAAAAAAAAAAAKAAIAACgAAAAAAAAAAICgAAAAAAACgAAAAgAAAAAAAAAAAAAgKAAAAAAAAoAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAggAAAACAAAAAAoAAAAAAAKAAKAAAAoAAAAAAAAIAAAiAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAKAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACggAAAAAAAAgCgAAAAAACgIAAAAAAAAAAAIoAAAAAAAAAoAAAACAoICgAAAAAAAAAACgAAgAAAAAAAAAAAAIACgAAAAAAoAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAgAgAAAACAAAAAoAAAAAAAAAKAAKAAAAAoAAAAAAIAAAiAAAAAAAAAAAoAAAAAICgAgAAAAAAAAAAAACAAAAAAAAAAoAAAAqAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAKAAAAACCgAAAAAAAAAgAACgAAACAoAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAoAAAAAAKAAAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAIAIAAAAAAgAAKAAAAKCAAAAAAAqgAAAAAAoAAAAAAIAAiAoIAAAAAAACgAAAAAgKAAACAAAAAAIAAACgAAgAAAAAAAKAAKAAAgAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgCgAgAoAAAAAAAAIAAAAAAAogAAAAAKAACoAAAAACgACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAIIAAAAAAAAACgAAAAAAAAAAAAKAAAAAAACgAAAAAgCAAAAAAAAAAAAAAAAAIAAAAAAAAAAgAAAKKCAAIAAAAACgCgAAAAAIACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAgAAAAAAAAAAIAoAAAAqAAACgAAAAKAIAAAAAACgAAIAAAACgAAAAAAAAAAAAAAAAAAAgAKKgKAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAgAgAKAAAAAAAAAoAAIAAAAAAACgAAAAAAAoAAAAAIgAAAAAAAAAAAAAAAAAACAAAAAAAIAAAACgCgAAgCAAAooAAAAAAACAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAoAAAAAAAAAAAAAAAIAAAAAAAAAACAAAAAAAoAAAKAAAAoAgAAAAAAAAKgAAAAAAAKAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAACgAAAAAgAAAAAAKAAAAAAACgAAAAiAAAAAAAAAAAAIACgAgAAAAAAAACAAAAAoAoAICggKCAoAAAAAAAAACAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAAACAAoAAAAAAAACgAAAAAAAAAAgoAAAAAAACgAAAAAAAAAAAAAAAgAAAAAAAAAAAKAAKAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAoAAAAAAIAAAAAAAACgAAAAoAAAAIgAAAAAAAAAAAACAoIAAAAAAAAAgAAAAKAAKAAAAAAAAAAAAAAAAgAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAKAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAACACgAAAAAAAAKAAAAAAAAAAAAACAAAAAAAAAAAAAAAoAAoAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAAgAAAAAAAAAAKAAAACgAAAiAAAAAAAAAAAAIACggAAAAAAACAAAAAoAoAAAAAAAAAAAAAACAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAKAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACgCggAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAoIAAAAAAAAAAAAAACgAAAoAAAIgAAAAAAAAAAAAACAAAAAAAAAIAAAAKoAAgKAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAACgCAAAAAqAAAAACgAAAAAAAAAKAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAKAAACIAAAAAAAAAAAAgAAAAAAAAAACAACgAiigAAAAAAAAAIAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAACiAAAAAAqAAAAACgAAAAAAAKAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAgAAgAAKoAAAAAAAAAAAAAAAAAAAAAAAKAAAACgAAiAAACAAoAAAAAgAAAAAAAAAAACACggKAAoAAAAAAAIAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAACiAAAAAAIKAAACgAAAAAAAAKAAAAAAAAAICgAAAIAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAACAACAAAAAAqgAAAAAAAAAAAAAAAAAAAAAAoAAAAAKADKAAICgAgAAACgAAAAAAAAAAAAgAAAAAoAAAAAAAAAAAAACAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAACgAAAAAgAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAigAAAAgoAAAAKAAAAAAAAoAAAAAAgAAAAAAKAAAAAAggKAAAAAAAAAAAAAAAAAoAAAAAAAAAAgAAAAAAAgCAAAAAoAoCgAAAAAAAAAAAAAAAAAAAAoAAAAAAAKDKAIAAAAAAAAAAoAAAAAAAIAAAAAAAAKAAAAAAAAAAAAAAgAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAIAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAoAIAKAAAAAACgAAAAAKAAAAIAAAAAAAAAAAAAAAAAgAAAAKCACgAAAAAAAAAKAAAAAAAAIAAAAAIAAgAAAAAAAAKKAoAAAAAAAAAAAAAAAAAAAKAAAAAAAACIAAgAAAAAAAAAACgAgAAAAAAAAoICgAAAAAAAAAAAAAAAIAAAAAAAAAAAAAACggAAAAAKAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAKAAAAAoAAAgAAAAIAAACgAAAAAAAAAIAACgAAgAoAAAAAAAAgKAKAAAAAAIAAAACCAAAAAAAAAAAKKAAoAAAAAAAAAAAAAAAAAKAAAAAAAAACIAAAgAAAAAAAAAAAAAAAAAKACAoAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAACoACgAAACAAAgAAAAgAACigAAAAAAACAoAAAIAKAAAAAIAACgACgAAAACAAAAAggAAAACAAAoAAAqgAAoAAAAAAAAAAAAAAAAAKAAAAAAAAACIAAAAgAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIKAAoAAgAAAIAAAIAAAAAAAooAAAAAgKAAACAACgACAAAAAAAoAoAAAgAAAAAIIAAAAgAAAKAAACigAKAAAAAAAAAAAAAAAACgAAAAAAAAAAiAAAAIAAAAAAAAAAAACggKAAAAAAAAAgAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIoAAAoACACgAAKIAAACAACAIAACgAAAAoAoAAAgAKAAACACiAoIAAAACgAAACiAAAAAAACIKAAAACAAAAAAAqgAoAAAAAAAAAAAAAAAAAKAAAAAAAAAACIAAAAAAAgKCAAAoICgAAAAAAAAAAAAAIAAAACgAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAoAAAAAAAAAIAAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAICgAAAAAAgCgAAACoAAKAAAogAAAIAACCAAAAKAAACgCgAAAAAAACAACiAoAAAAAAICgCggggqgAAAAAAIAAAAAAIAACgAKACgAAAAoIAAAAAAAAAACgAAAAAAAAAAAiAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAACAoAAAAAAIAAoAAIKAAACgAAigAACAAAggAAACgAAoAAoAAAAAAAAAgCAKAKAAAAAAAACAqAKAAAAAAAAAIAAAAAAAACgAAoAAAKAACAAAAAAAAAAAoAAAAACAoICgCIAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIACgAAAAAAgAAAAKAAACgAgACgACAAACIAAACgAAoAoAAAAAAAAAAiAAAKKAgAAKAAAAAAAoAAAAAgAAAAIAAAAAAACgAAoAAKAAACAAAAAAAAAAAAoAAAAAAACAoiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAoIAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAoAAAAAAIAAAACgAAAoAIAAAoAAgAAIIAAAoAAKKAAAAAAAAgKAIIAAAAoAAAAACgAAAAAKAAAAAAIAAACAAAAAAAoAAKAACgAAAgAAAAAAAAAAAAKAAAAAgAAKIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKACAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAICgAAAAAAAAAAAKAIAAAIgAKAAAKAoAAAAAIAAAAIqAAAKAAAAAAAoAAAAACgAAAAgAAAigACAAAAAoAAKAAACgAAAgAAAAAIACgAAAAAoAACAAAAoiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAogAAAAiCqIACgAAAAAAAAAAAgCoAAoAAAAAAACgAAAAAAAKCAAICgAIAoAAAgAKAAACgAAAoAAIAAAAACAAAAAoAAAAKAAAgAKCCAAAAAAAgAKAAAAAAAAAAAAAAAAACAAAAAAAAAAAAgAAAAKAAAAAAAAAAAACgAAAgAAAAAAKACAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACiAAAACAoAAAAAAAAAAAAAIAqAAKAAAAAAAAoAAAAAACggAAACAoACKAAAAAAAAKAAAACgAAgAAAAIAAAAAACgAAAAoAACAACAAAAAgAAAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAgAAAAAAAKAAAAAAAAAACgAAAAAAgAKCAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAACgAAAAgAAAAAACggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKIAAAAAAAAAAAAAAAAAAIAIKAKAAAAAAAAoAAAAAAAAAAAAAgKCACqgAgKAAAAoAAAAAAAAAAAAAIAAAAAACgAAAAoAAAAAIgAAAAgAAAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAgAAAAAAAKAAAAAAAAAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAKACAAAAAAAAAAAAAAAAAAoAAAIAAAAAAogAAAACACgAAAAAAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAogAAAAAAAAAAAAAAAAAggoAoAAAAAACgAAAAAAAAAAAAAACAoIAAKAoCAAAoAAAAAAAAAAAAAAIAAAACgAAAAAAoAAAAAIgAAAgAAAAAAKAAAAAAAAAAAAACAAAAAgAKAAAACAAAAAAAAAAoAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAoAIAAAAAAAAAAAAAAAAACgAAgAAAAIoAAAAAAAIAKAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAACiAAAAAAAAAAAAAAAAAqAICgAAKAAAAAAAAAAAAAICgAAAgAAAKCAACqAAAAAAAAAAAAAAAAAAAAgAKAAAAAAAAACgAAAAiAAACAAAAAAAoAAAAAAAAAAAAAIAAACAAAAAoAAIAAAAAAAACgAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAKACAAAAAAigACAAAAoCACgAAAAAAAAAAAAAAAgACgAAAAAAgAAAoAAAAAAAACiAAAAAAAAAAAAAAAqAAAACgAAAAAAAAAAAAAAAAAAAACAAAoAICioCgAAAIAACgAAAAICggKAAAAAAAAAAAAAAAKAAAACIAAIAAAAAAACgAAAAAAAAAAAAAgAAAIAAAAAAAAAAAAACgAAAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIoAAgAAAKAgAoAAAAAAAAAAAAAAIAoAAAgAAKAAgAAAoAAAAAAAACiAAAAAAAAAAAAAqAAAAACgAAAAAAAAAAAAAACAAAAoIACggAKCAAoAoAAAgAAAAAKAAAgAAAKAAAAAAAAAAAAAAKAAAACIAIAAAAAAACgAAAAAAAAAAAAAAAgAAIAAAAAAAAACgAAAAAAAAAAAAAAAAoAAAAAAAAAAAIAAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAKIACAAAAoCACgAAAAAAAAAAAAAgCgACAAAAAAoACAACgAAAAAAAAAigAAAAgqgAAAgAAAAAAAoAAAAAAAAAAAAAAAAgKAACAAAAAAoAAAAAAogAAAAAAAKAAAgAAAAKAAAAAAAAAAAAAAKAADKAAAAAAAACgAAAAAAAAAAAAAAAAgAAAIAAAAAAACgAAAAAAAAAAAAAAAAAoIAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAICgAKAAAAAACAAACKAAIAACgIAKAAAAAAAAAAAACAKAIAAAAAAAACgIAKAAAAAAAAAAACKACCgAAAAAAAAAAAAAAoAAAAAAAAAAAIIKAAAAqoAAgAAKCAoICgAAACiAAAAAAAAoACAAAAAAAAAAoAAAAAAAAAAAAAgACAAAAACgAAAAAAAAAAAAAAAAAgAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAAACAAoAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAigACAoCAACgAAAAAAAAAAAAgCiAAAAAAAAAAoCACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAqAAAAAoACoAgAAAAKAAAAAAigAAAACgAAAIAAAAAAAAAAACgAAAAAAAAAACAAAIAAKAAAAAAAAAAAAAAAAAAACAAAAAgAAAAAKAAAACgAAAAgAAAKAAACAAAAAAAAAAAAAAAoAAAAAAAAIAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAigAgAAAoAAAAAAAAAAAAIAAogAAAAAAAAKAAgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAKgCAAACqAAACoAAgAAKAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAoIACgAgAAAigAAgAoAAAAAAAAAICgAAAAAAAAAgAAAAIAAAAACgAAAoAAAAAAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAAgAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAKAAAACCggAAIAAAAACgAAAAAAAAAAAAgACiAAAAAAAAoACACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAoggAAAAAKAoAAKgCAoAICgAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAigAAAgoAAAAAAAAAIACgAAAAAAAAgAAAAIAAAACgAAAoAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAACgAAAAAgAAAIAAAAAAACgAAAAAAAAAAAAAAAAAAAAoAIAAoAAAIKCAAAAgAAAAKAAAAAAAAAAAACAAKIAAAAACgAAIAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAIAqAAIAAAACigKAAAgAoAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAioCgACCgAAAAAAAAAAAAAAAAAAAAgAAAAAIAACgAAAoAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAACgAAAgAAAIAAAAAAAACgAAAAAAAAAAAAAAAAAoAAAAAAIAoAAAIAAAAIAAACgAAAAAAAAAAAAAgAAIAoAAoACAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAACAKAgCAAgAAKACigKAAAgAoAAAAAAAAAAACggKCAAAAAAAAAAAAAAAAAAAAAAACgAyqAAogAoAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAKACAAAAAgAAAAAAAKAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAgAAAAAIACgAAAAAAAAAAAAAAgAAAIoAoACAAAACgAAAAAAAAAAAKCAAAAAAAAAAAAAAAAAAAAAAAAAACAKAAiAAAgAAAAKACigKAAgAoAAAAAAAAAACggAAAAAAAAAAAAAAAAAAAAAAAAoAAMqgAigAKAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAgAAAAAACggAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAoAACIACAAAAAAAoAKKAoACCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAMiAAoAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACAAAAAAKACAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgCgAACACAIAACAAAAoAKCigKACoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAADIgKAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAACgAACgAIAAAAAIAAAAAAAAAAAAAAAAAAAAAACAAAAAAKCAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgACgAACAACAAIACAAAAAoAKKoKAAgoAAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAoAAAAAMgAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAoAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgoAAAAAIAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAoAAgAAAAAiAAAgAAAAAKCgooCgIKAAACAAAAoAAAAAIAAAAACgAAAAAAAAAAAAoAAAAAMgAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAKAAAAKAAgAAAoAIAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAIACgAAAAAgAACiAAAAAAAACIAACAAAgKACgoAqgoACCgAgAAAAAKAAACAAAAAAAAoAAAAAAAAAAAKAAAAADIAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAKAAAAAAKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAACgAAgAAAAAAAAIoAAAIKAACAAAKIAAAAAAACACAAAAIAAAACgCqCgoACAAAAAAAAACgAAAgAAAAAAKAAAAAAAAAAAACgAAAAgAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAACgAAAAAAgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAoAAAAIAAAAAAACKAAAACAAAAogAAAAAAAAIAIAAAAgAAAAKCgAooCgAIAAAAAAAAKAAACAAAAKCACgAAAAAAAAAAAAAAoAAIAAAAACAAAoAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAoAAAIAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAKACAAAAAAAAAoAAAIAAAAAAACAKAAAAAAAIAAAAAAAACAACAAAAAAICgAAoAqgAoAAACAAAAAACgAAAgAAAAAAAKAAAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAgAAAAAAKAAAAAAAAAAAAAACAAAKAACACgAAAAoIAAAAAAAAAAAAAAAAAAAAAACKAAAAAIAAAAAAAAAACAAAACAAAAAAKACigAAKAAAAAgAAAAoAAAIAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAKIAACgIAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAKAAIAAAAAAAAAAACAAAAAAAoAAAKAAAAAAAAACgIAAAKAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAKAAAAIAAAACoAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAKAAIAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAoCAACgAAgAAAACggAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAIAAoAAAAgAAAAAAKgAAoAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAgAAAIoAAAAAAAAAAAAAAAAoAAAAAAAAIIAAACqACgIAAKCAAAAAKAAACACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoIAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAACgAAAAgACgCAAAAAAAAAAAqAACgAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAACAAAAAgCgAAAAAAAAAACgAAAAoIAACACAAAAAqgAoCAAAAAAAAoAAAAIKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAKAAAAACAKAIAACAAAoAAAACCgAAoAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAgAAAAAIAoAAAAAAAAoACAACgKCCKAAIIAgAKAKAoAKgAAAAAAigAACgAIAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAKACAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAoAAAAAAIAoAgIAAIAAACqAACoAAAKAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAgAAAIAAAACAKAAAAAKgAAAAoAAAAIAogAgCAAoAoCgAqAAAACAKAAAAKAAgAoAAAAAAAAAAAAKCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAgACiAgAiAAoAAKKAIKAACgAAAAAAAAAAAAAAAAAAAAAoAAAAAKACAAAAAgAAAAIAAACAAAAoAAAAAKAAAAACAAKIAAIgqiAoCgAAqAACAKAAAAAKAAgAoAAAAAAAAAAAKADIAAAKAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAIAogIAIgAAKACigKgAAAoAAAAAAAAAAAAAAAAAAAAAKAAAAACgAgAAAAAIAAAACAAAAAAAAAAAAAoAAAAAAIAAogAAAAAAKAAAAAAAAAAACgAIAKAAAAAAAAAAACgAgIACgAAAgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAIAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgCiAAggCAAoAKKAqAACgAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAACAAAAAAAAAAAoAAAAAAAIAACKAAAAAAKAAAAAAAAAAACgIAKAAAAAAAAAAACgAgAAAAAAAIAAAAAAACgAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAACAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAogIAAIAAAoogoAKAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAIAACAKAAAAAKAAAAAAAAAACgIAKAAAAAAAAAAACgAgAAAAAAAIAAAAAAAACgAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACKAAAICiAoCoAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAIAAACAKAAAAAAAAAAAAKAACgIAKAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAIAAACgAAAAAAAAAAAoAAAAAAIAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAigAgAoAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACKAAAAAAAAAAAAAKAACgIAKAAAAAAAAAAAAAAACgAAgAAIAAAAAAAAAAAAAAAACgAAAAAAAAAAAoAAAIAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAoAAAAAAIAAAAAAAAAAAACAAAAAAAAigAAAAAAAAAAAACgAAoAKgAAAAAAAAAAAAAAAoAAIAACAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAoAAAAAAAIAAAAAAAAAACAAAAAAAAAAKIAAAAAAAAAAAAACgAoCCgAAAAAAAAAAAiigIKAACAAAAgAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAIAAAoAAIAAAAACgAACAAAAAggAKoAKACgAIKAAAAAAAAAACKAKAgAAAAAAgAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAgAAAAAAIAAoAAAAIKAAACAAAAKAIAACCAAAqgAoAKAAgoAAAAAIAAAAoAAoCAAAAAAACAoAAAAAIAAAAAACgAAAAAAAAAAgAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAgAAAAAIAoAAAAoCAAAAAACAAAAigACCAKKAAoAKAAAgoAAIAAAAACKKAACoAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAgAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAKAAAAAAAAAAAAACAAAoAAAAAAAAAAKAAACAAAAAAAAAAAAAAAAAAKAACAAAAACggAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAgCgAAACgAIKAACAAAAgAAIoAAAAAAoAAKAAAgAAAAAAAAiigAIAKAAAAAAAAAAAAAAAAACAAoAAAAAAAAAAIAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAACAAAAAoAAAAAAAAAKAACAAAAAAAAAAAAgCgCgAgAAAAAKAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAACAKAAKAACoAAAAIAAACAAAKIAACgAAAAoAACAAAAAAAACAoAAAAKAAAAAAAAAAAAAAAAAAACAAAoAAAAAIAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAIAAAoAAAAAAAAAAAAoCAAAAAAoAAIAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAgCgACgAAoCAAAACAAAAAgACgAAAAACgAAAIAAAAIAACgAAAAAAAoAAAAAAAAAAAAAAAAAIAAAACgAAAAgAAAAAAAAAAAAAAAAKACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAKAAAAAAAAAAAAACAAAAAoAAAAAAAAAAAIAAAAAAAACgAAAAAAAAAAAAAAAAAAgAACgAAAAAAACAAAoAAKAgKAAIAAAAAAgoAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAigACgAAqAAAAACAAAAAAAAAAKAAAAAAACAAAACAAAoAAAAAAAKAAAAAAAAAAAAAAAACAAAAAAAoAAAIAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAAKCAAAAAAAAAAAgAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAoAAAAAAAAAAAAAAAIAAAAAogAAAAAAAAAAAAKAAAAAAAACAoAACCgAAAAAAAAAAAAAAAAAAAAoAAAIAAAAACAKKAAAgAoAAAAIAAAAAAAAAAAAAoAICggAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAIAAAAAACgAAAgAAAAAAAAAAAAAAAAKACAAAAAAAAAAAAAAAAAAAoAIAAAAAAAAACAAAAAAAAAAAAAoAAAAKAAACAAAAAAAAAAAAAAgKAACAAKAAACAAAAAACgAAAAAAAAAAAAgAAAAAAIoAAAAAAAAAAAAAAoAAAAIAAAAACgAqAAAAAAAAAAAAAAAAAAAAAACgAgAAAAAICgAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAD/9k=",skyBoxUp:"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAFA3PEY8MlBGQUZaVVBfeMiCeG5uePWvuZHI////////////////////////////////////////////////////2wBDAVVaWnhpeOuCguv/////////////////////////////////////////////////////////////////////////wAARCAgACAADAREAAhEBAxEB/8QAGQABAQADAQAAAAAAAAAAAAAAAAECBAUD/8QAFBABAAAAAAAAAAAAAAAAAAAAAP/EABYBAQEBAAAAAAAAAAAAAAAAAAABAv/EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhEDEQA/APJtkAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAQBQAAAFAAAAAABQAAAAAAAAAAAAAAAAAAAABEAAABAFAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAGIAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAqAAKAAAAoAAAAAKAAAAAAAAAAAAAAAAAAAAAIAgAAIAoAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAxAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFQABQAAAFAAAABQAAAAAAAAAAAAAAAAAAAAABEAAABAFAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAGIAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAqAAAKAAAoAAAAKAAAAAAAAAAAAAAAAAAAAAAIgAAAIAoAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAxAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAQAABQAAFAABQAAAAAAAAAAAAAAAAAAAAAABEAAABAFAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAGIAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAoCAAKAAoAAKAAAAAAAAAAAAAAAAAAAAAAAIgAAAIAoAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAxAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAFARQAAFAABQAAAAAAAAAAAAAAAAAAAAAABEAAABAFAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAqKAAAoAAAKAAAAAAAAAAAAAAAAAAAAACCAAAAIAoAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAxAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAVUAAAFAAABQAAAAAAAAAAAAAAAAAAAAAQQAABAAFAAAAEAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAACiCgAAAoAAAAKAAAAAAAAAAAAAAAAAAAACACAAIAoAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAxAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAUAAQUAAAAFAAAABQAAAAAAAAAAAAAAAAAAAQAQABAFAAAAEAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAFBgAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAoAAAgoAAAAAKAAACgAAAAAAAAAAAAAAAAAAgAAgCAAKAAAAIAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAKDAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAABQAAABABQAAAAUAAAFAAAAAAAAAAAAAAAAAABABAAEAAUAAAAQAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAUGAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgACgAAAAACCgAAAAoAAAKAAAAAAAAAAAAAAAAACAACAIAAAoAAAAgAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoMAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFFAAAAAAAAAEFAAABQAAAUAAAAAAAAAAAAAAAAEAAAEAQAABQAABAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABiAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAoAICggAKAIKAAACgAAAoAAAAAAAAAAAAAAAIAAAIAAgAACgAACAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAADEAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFUQFBAAAUABUAAAAFAAAABQAAAAAAAAAAAAAQAAAAQABAAAFAAEAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgCggAKAAIKAAAACgAAAAAoAAAAAAAAAAAIAAAAAIAAgAACgACAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAADEAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBAAAAAAAAAUEABQQFBFFABAUAAQUAAAAFAAAAAABQAAAAAAAAAQAAAAAAAQBAAFAAAEAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAACAAAoAAIACggAKCAoIooAAAAAgoAAAAKAAAAAAACgAAAAAAgAAAAAAAAAiAAKAAAIAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAMQAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAEABQAAAQFAABAAUEBQAQFBFFAAAAAAEFAAAABQAAAAAAUAAAAAEAAAAAAAAAEQAABQAABAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAABiAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAKAAACAoAICgAgKACAoIooAAAAAAgoAAAAKAAAAAACgAAAgAAAAAAAAAAIAIAKAAAAIAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAMQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUEAAAAABQAQFAAABAAUAAAAAEBQAQFABAUBQAAAAAAEFAAABQAAAAAAUAAAEAAAAAAAAAABABABQAAAABAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAABiAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAKACAAoAAAICgAAgKACAoAIACggKAoAAAAACACgAAAoAAAAAAKAACAAAAAAAAAAgAAgAAoAAAAAgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAxAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAABQAAAAAAAAAAAAAAFABAAAAAUAEABQAAAAAAAAAAQFABAAUEBQFEBQAAABABQAAAUAAAAAAFABAAAAAAAAAAQAAAQAAUAAAAAQAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAYgAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAoAAAAAAAAAAAAAAAAAACggAAAAKCAAAoAAAAAAICgAgAKACAAoICgiigAAAACCgAAAAoAAAAAAAAAAAAAAAAAIAAAIAAKAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAMQAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAUAAAABQQAAAAAAAAAAAAAAAAAAAAAAFAABAUAEBQAQAFABAUEBQRQABQAABABQAAAAUAAAAAAAAAAAAAAAAAEAAEAAFAAAAAAEAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAGIAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAKAACKKgAAAAAAAAAAAAAAAAAAAAAAAKAACAoAIACggAKCAAoIAAooIACgACACgAAAAoAAAAAAAAAAAAAAAAAIAAIAAKAAAAAAIAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAMQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFAAAFQQAAAAAAAAAAAFBFAABABQAAAAAAAAAAAAAAAAAAAAAFAABAUAEABQQFABAUEBQRQABQAAABABQAAAAUAAAAAAAAAAAAAAAAEAEAAAFAAAAAAEAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAGIAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAigACoAAAIoIAAAAAAAAACgAAAgAAoAAAAACggAAAAAAAAAAAAAKACAAoAICgAgKCAoAICgiigAAAAACACgAAAAoAAAAAAAAAAAAAAAAIAIAAKAAAAAAIAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAMQAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAUEUAAEAAAAAAABQAAAAAAQAUAAAABQAQAAAAAAAAAAAAAFABAAAAAUEBQAAAQFBFFBAUAAAAAQAUAAAAFAAAAAAAAAAAAAAABAABABQAAAAAABAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAABiAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAoAAAAIAAAAAACgAAAAAAgoAAAAAACgAgAAAAAAAAAAAAAKACAAoICgAAAAAAAAKAAAAAAAAAgoAAAAKAAAAAAAAAAAAAACAAACACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAxAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAUAAAAAAEAAAABQAAAAAAQAAUAAAAAABQAQAAAAAAAAAAAAFAABAAUEBQAAAAAQFBAVQAAAAAAAAEFAAAAABQAAAAAAAAAAAAAQAAAQAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAGIAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAACgAAAAAAAAgAAKAAAAAACAAAAACgAAAAAKACAAAAAAAAoAIACgAAgAKCAoAAAAAAAACgAAAAAAAAIAKAAAAACgAAAAAAAAAAAAgAAAgAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAMQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAFAAAAAAAABAAAUAAAAAEAAAAAAAAFAAAAAUEAAAAAAABQAAAAAAAQAFBAUAAAAAAAABQAAAAAAAAEAFAAAAABQAAAAAAAAAAAAQAAQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAGIAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAgAAAAoAAAAAAAAAICgAiigAAAAAAIACgAgKAAAAAAAAoAAAAAAAAACIoAoAAAACgAAAAAAAAAAAgAAAgAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAUAAAAEBQAAAAAAAAAAAAAAAAAAAAAAQAAAAAUAAAEBQAAAQFBFAFAAAAAAAQAFBAUAAAAAAAABRAUEBQAAAABEAUUAAAAAABQAAAAAAAAQAAAAQAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAKAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAIAAAAAKACAAAoAIACgigCgAAAAAIACggAKAAAAAAAAoAAAAAAAAAggAoAoAAAAAAAAAAAAAAAAAIAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAFQAAFAAAAEABQAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAUAEAAABQRQQFAFAAAAAAQAFBAAUAEBQAAAARRQQFBAUAAAAAAEEFAFAAAAAAAAAAAAAAABAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIKAAAAAoAAAAgAKAAAAAAAAAAAAAAAAACAAoAAAAIAAAAAKACAAAoIoICgACgAAAAAICgAgKAACAoICggKAogKCAoICgAAAACAIoAoAAAAAAAAAAAAAIAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAABBQAAAAAAFAAAAEBQAAAAAAAAAAAAAAAAAAAQFAAAAABAAAAAAAAAAUEABQBQAEBQAAQFABAUAAEBQAAAARRQQFBAUEBQAAAAAQQAUUAAAAAAAAEAAAAFAAAAEABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACgAIAAAIKAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAgKAAAAAACAAAoAIAACggAKAAKACAoAAAAAAAACAoAAAAACiAoICgAAAAAACIAAAACgAAAKAIAKAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAKDzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAEUAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAUEABQAABQQAFBAUAEBQAAEBQAQFBAUEUUEBQQFBAUAAAAAARAUAAAAAUEBQAEAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAABQAAeYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAigAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACggAAKAAKCAAoIACggAKAAgKAAAAAAAoAAAAAAAAAAgAAAiggAKAAKAAgAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAKAAAADzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAEUAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAUAAAAAAAAAAAUABAUAAAAEBQRRQQFBAUAAAAEBQQAAARQQUEUAUABAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAUAAAAAHmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAIAAoAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAoAAAAAAAAAAoIACgICgAAAAAAAKAAAAAAAAAICggAAiggoCiAoCAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAoAAAAAAPMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAQAABQAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVBFFAAAAAQFBFFBAUAAAAEBQQAAAAARRUAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAeYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAigAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqCKKAAAAAgKAAoAAAAAAAAAgKCAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAPMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAFEAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBQBQAAAAEBQQFUQFAAEQVQQFBAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAHmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAACiAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAoAoIACgAICgAKAAAgKCAqAoIAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAA8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAUAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQFAAAAAFAQRRQQUABQQAFQRRUBQQAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAB5gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAogAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgKAAAAAAKgigCggqoIoICggKCCgAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAADzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABQBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAUAAAAAAAAAABQAAAAFQRRUAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAeYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAKAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICgAAgKAAAoAgKCAoIKCKKgAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAADzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAEAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAUAAEBQAAFAEBQQFABAUAVAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAHmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAIAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAgKCAoAIKCAoAAACgAgAAKCAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAPMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAQABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAABAUEABQAQFBBQRQBQAEABQAQAAFABAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAHmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAIAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAgKAAAKAgKAACAAAoAIAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAA8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAABAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAUABAAUAAEAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAeYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAgAACgAAAAAAAAAAgKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAICgAACgIACgAAgAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAADAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAUAEAAAAAQAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAABAUAAAEFAUAAAEAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAQFAAAAAFAAAAAAAAAAAAAAAAAAABgAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAIAKogKAAgAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAACAoAAAAAoAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAABAAUAAAVBFAFQAQVQAQFBAUAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAABAUAEBQABQAAAAAAAAAAEABQQAFBAUAAEGCgAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAICgAAgAKACCggoCggAAAAAKAAAAAAACAoICgAAAAAACgAAAAAAAAAAAAAAAAICgAgKAKgKAAAAAAAACAAAAAAAAAAoIAAMFAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAEAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAQAFABBQRVEAAAAAAAAAFAAAAABAAAAAAUAAAAUAAAAAAAAAAAAAAAAAAABAUEFAUEBQAAAAAAQAAAAAAAAAAAAAAYKAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAIAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAgKAACAoCiAAAAAAAAAAAACgAAAgKCAoIACggKCCgKCAoICgAgKCAAoAAAAAAAAIACioAAACgAAAAAgAAAAAAAAAAAAAAAxUAAAAAAAAAQAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAABAAAAAAEAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFEABQQAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAFAAAAABAAUVAAAAAAAUEBQQAAAAAAAAAAAAAAAAYgAAAAAAAAAAAAAgACgAAAACAAAAAAAAAAAAAAAAAAAAAgAAAAACAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAACAoIAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAACggAAoAAAAAACggAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAIAAAAACAAKAAAAIAAAAAAAAAAAAAAAAACAAAAAAAIoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAIAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAoiAAAAAKAAAAACAAAIAAAACAAKAAIAAAAAAAAAAAAAAAACAAAAAAIoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAIAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAgAAAAIAAIgACgACAAAAAAAAAAAAAAAgAAAAACKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAACAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAooAAAAAAAAAACAAAAgAAAIAACCACgCAAAAAAAAACggACAAAAAAIoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAIAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIUAAAAAAAABAAAAQAAAEAABAAAQAQUAQAUAAAAAAEBQQBBQQAAAARQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAQAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBRVAAAABAAAAAQAAAAEAABAAAQAAEAEFUBAAAAAAAAAABEFBAAAAABFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAABAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUGQoAAAAAACAAAAgAAAIAAACAAgAAIAAoAgAAAAAAAAAIICgAgAAAgAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAgAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAADIUAAAAAABAAAQAAAAEAAABAAQAAEAAAUQAAAAAAAAAEAAAEAAAEAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAEAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAZCgAAAAAIAACAAAAgAAAAIAACAAAgACgCAAAAAAAAAAgAAAgAAgAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAgCgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAADIUAAABAAAAQAAAEAAAABAAAAQAAEAAUQAAAAAAAAAAEAAAEAAEAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAEAUAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAUUAAAAAABAAAAQAAAAAEAABAAAQAABRAAAAAAAAAAAQAAAQAAAQBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAARQAAAAAABQAAAQAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAFFAAAAAAAQAAAEAAAABAAAAQAAEAAAUAQAAAAAAAAAEAAAEAAAEAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAEUAAAAAAUEBQAAAAAAAAAAQBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAFFAAAAAAQAAAAAEAAABAAAAQAAAEAAAUQAAAAAAAAAEAAAQFQAAQABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAARQAAABQQFAAAAAAAAAAAUAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAUUAAAAABAAAAAAAQAAAEAABAAAAQAABQBAAAAAAAAAQAABAAVABAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAUQAAAAFAAAAAAAAAAUAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAUUAAAAABAAAAAAAQAAAEAAABAAAAQAABQBAAAAAAAAAQABAAAVBAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAUAAQAFAAAAAAAAAAUAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUUAAAAABAAAAAAAQAAAEAAABAAAAAQAAABRAAAAAAAAQABAAAAEAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAEABQAAAAAAAAAAFAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAFFAAAAQAAAAAAAEAAAABAAAAQAAAAAEAAAAUQAAAAAAAEAQAAAABAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAABQAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAEAAAABAAAAAQAAAAAAEAAABFAAAAAAAEAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAABAAAAAAQAAAAEAAAAAAAABAAAARQAAAAAABAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAUQAAABAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAABAAAAAAQAAAAAEAAAAAAAAABAAAAARQAAAAAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAAAAAAAAAQAAAAAAAABAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAABAAAAAAAAQAAAAAEAAAAAAAAAABAAAAQBQAAAAAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAABQAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBQAAAAAAAAAAAEAAAAAAABAAAAAAAAAAAQAAAEAUAAAEAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAABQAAAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAEBQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBQAAAAAAAAAAAEAAAAAAAAAAAAAABAAAAAQAAAEAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAUAAAAAAAAAAFAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEFAAAAAAAAAAAAAQAAAAAAAAAAAAAAEAAABAAAAAQAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAABQAAAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQUAAAAAAAAAAAABAAAAAAAAAAAAAAAQAAAAEAAABAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAABQAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAYigAAAAAAAAAAAAAIAAAAAAAAAAAAAACAAAAAgAAAIAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAoAAAAAAAAAAAKAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAADAUABQAAAAAAAAAAAQAAAAAAAAAAAAAAEAAAABAAAAQAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAABQAAAAAAAAAAUAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAGAAAoAAACgAAAAAgAAAAAAAAAAAAAAAAAIAAACAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAICgAKAAAAAAAAAACgAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAACgAAAAAAAAAAAwAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAABAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAQAAAFUAAAAAAAAAAAFAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAFAAAAAAAAAAAAAABgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAIAACAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAgAAKoAAAAAAAAAAAKAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAKAAAAAAAAAAAAAAAAAADzBQAABQAAAAAAAAAAAAAAAAAAAAAAAAAAEAAABAAAQAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAFAAAAAAAAAEAAAAUAUAAAAAAAAABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAABAAAABAAAAAAAFAAAAAAAAAAAAAAAAAAAAB5gAAoAAoAAAAAAAAAAAAAAAAAAAAAAAAACAAAAgAAIAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAACAAAKAKAAAAAAAAAAAoAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAgAACgAAAAAAAAAAAAAAAAAAAAAA8wAAAAUUAAAAAAAAAAAAAAAAAAAAAAAAAABAAAQAAEAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAABQAAAAAAAAABAAFAFAAAAAAAAAAAUAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAHmoIAAAAqgAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAIAACAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAgACgACgAAAAAAAAAAigAAAAAACgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAPNQAQAABQAFAAAAAAAAAAAAAAAAAAAAAAAAABAAAQAAEAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAABQAAAAAAAAABAAFAAFAAAAAAAAAABFAAAAAAAAAFAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAEBQQAAAAAAAAAAAAAAAAAAAAAB5KKAAAgACgAKAAAAAAAAAAAAAAAAAAAAAAAACAAAgAAIAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACgAAAAAAAAACAAKAAKAAAAAAAAAAogAAAAAAAAAAKoAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAADyUAAUABAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAEAABAAAQAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAFAAAAAAAAAAEAAAUAAUAAAAAAAABRAAAAAAAAAAAAVQAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAB5KAAAAKAgACgAAAAAAAAAAKAAAAAAAAAAAAAACAAAgAAAIAAAAAAAAAACAAAoAAAAIAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAKAAAAAAAAAICggACgAAAAACgAAAAiiggAAAAAAAAAACigAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAA8lAAAAAAFQABQAAAAAAAAAAAFAAAAAAAAAAAABAAAAQAAEAAAAAAAAABAAAAUAAAAAAAAEAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAFAAAAAAAAAAEAAAAUAAAAAAAUABQBAAAAAAAAAAAAAFFAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAB5KAAAAAAAAKgCgAAAAAAAAAAAAKAAAAAAAAAAACAAAAgAAIAAAAAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACgAAAAAAACAAAAAAKAAAAAAAAACiggAAAAAAAAAAAACgCgAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAoAAAAPFQAAAAAAAAAARQAAAAAAFAAAAAABQAAAAAAAAAQAAAEAAABAAAAAAAAAQAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAUAAAAAAAQAAAAAABQAAAAAAAAAUUAEAAAAAAAAAAAUAUAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAUAEAUAUEAAAAAAAeCgAACgAAAAAACgAACAAAAAACgAAAAAAoAAAAAAIAAAACAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACgAAAACAAAAAAAAAKAAAAAAAAACigAAAgAAAAAAAACgACgAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAACAAAAPBQAAAAAABQAAAABQAAABAAAAAABQAAAAAAAAAAAAAAAAQAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAUAAAAQAAAAAAAAABQAAAAAAAAABVAAAAEAAAAAAAAUAAUAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAQB4KAAAAAAAAAAAAAAoIAAooAgAAAAAAoAAAAAAAAAAAAAAIAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAgKAAoAAAgKCAAAAAAAAAKAAAAAKAAAAAoAAAAAgAAAAAACgCgAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAKAAAAAAAAAAAAAAAAADwVAAAAAAAAAAAAAAAAAAAUABQEAAAAAAFAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAEBQAFAAAEBQQAAAAAAAABQAAAABQAAAAFAAAAAEAABQQABQBQAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAQAAAAAAFAAAAAAAAAAAAAAAAAAAAAB4KgAAAAAAAAAAAAAAAAAAAKAAAIKAAAAAAAAAAAACgAAgAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAACAoACgAAACAAAAAAAAAKAAAAAKAAAAAAoAAAAAAAgKAoAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8FQAAAAAAAAAAAAAAAAAAAAFAAAEAAFAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAQFAAAUAAAAAQAAAAAAABQAAAABQAAAAAFAAAAAEBQQFAUAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeCoAAAAAAAAAAAAAAAAAAACgAAAACAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAICqAAAAAIAAAAAAAAAoAAAAoAAAAACgAAACAAAoICqAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPBUAAAAAAAAAAAAAAAAAABQAAAAAABAAAAAAAAAABQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAABQAAAABAUEAAAAAAAUAAAAUAAAAABQAAAABAAAAVQAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4KgAAAAAAAAAAAAAAAAAAKAAAAAAAIAAAAAAAAAAAAAAAKAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAKAICgAAgAAAAAAACgAAAACgAAAAKAAAAAAAIAAooAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPBUAAAAAAAAAAAAAAAAAAAABQAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAUAAAAAQAAAAAAABQAAAAABQAAAFAAAAAAAAABQAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4KgAAAAAAAAAAAAAAAAAAAAKAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAACgACAAAAAAAAAAKAAAAAAAAKAAoAAAAAAAAAKAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKDXVAAAAAAAAAAAAAAAAAAAAUAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAFAAAEAAAAAAAAAUAAAAAAAAAFFAAAAAAAAAUAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAGuqAAAAAAAAAAAAAAAAAAAAoAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAIAAAAAAAAAAoAAAAAAAAAKAAAKAAAAAoAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAoAAIAAAAAAAAAAAAAAAAAAAACgAAAAAAAAA11QAAAAAAAAAAAAAAAAAAAFAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAABQAAABAAAAAAAAFAAAAAAAAABQAAAABQAAFAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAFAAAAABAAAAAAAAAUAAAAAAAAAAAAAAAAAAAGuqAAAAAAAAAAAAAAAAAAAAAoAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAKAAIAAAAAAAAAoAAAAAAAAAKAAAAAAKAoAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAACgAAAAAAAAAAAAAAAAAAAAAA11QAAAAAAAAAAAAAAAAAAAAAAFEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAABQABAAAAAAAAAFAAAAAAAAABQAAAAAABVAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABrqgAAAAAAAAAAAAAAAAAAAAAAAigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAACiAAAAAAAAAAAAKAAAAAAAAACgAAAAAAAooAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADXVAAAAAAAAAAAAAAAAAAAAABFABAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAUQAAAAAAAAAAABQAAAAAAAAAUAAAAAAAAVQAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa6oAAAAAAAAAAAAAAAAAAAAIoAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAICgAgKAAAAAAAAAAAAAAoAgAAAAAAAAAACgAAAAAAAAAAoAAAAAAAKKAAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA11QAAAAAAAAAAAAAAAAAAAFEAAAAAQAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAQAFBAUAAAAAAAAAAAAAABQABAAAAAAAAAAFAAAAAAAAAABQAAAAAABQFAAAAAAABQAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABrqgAAAAAAAAAAAAAAAAAAAAigAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAogKACAAAAAoICgAAAAAAAAAAAAKAAIAAAAAAAAAoAAAAAAAAAAAKAAAAAAAKoAAAAAAAKAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANdUAAAAAAAAAAAAAAAAAAAABRAAAAAAEBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAEAAAAAAABQQFAAAAAAAAAAUAAAQAAAAAAABQAAAAAAAAAAAUAAAAAAAAVQAAAAAAAUAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa6oAAAAAAAAAAAAAAAAAAAAAAIoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAACAoIAAAAAAACgAAAAAAAAAAKAAAIAAAAAAAAAoAAAAAAAAAAKAAAAAAAACigAAAAAAAKAAAAAACgAAAAIKCAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAKAAAAAAADWVAAAAAAAAAAAAAAAAAAAAAABAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAQFABAAAAAAAAAAUAAAAAAABQAAABAAAAAAAAFAAAAAAAAAAABQAAAAAAAAUUAAAAAABQAAAAAAUAAABBQAAARQAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAEBQAAAAAAAAAAAAAAayoAAAAAAAAAAAAAAAAAAAAAAIAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAACAoIAAAAAAACggKAAAAAAoAAAAgAAAAAAACgAAAAAAAAAAAoAAAAAAAAKAKAAAAAAAoAAAAAKAAAACoAAAAIoAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADWVAAAAAAAAAAAAAAAAAAAAAABAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAQAAAAAAAAFAAAAAAUAAAAQAAAAAAABQAAAAAAAAAAAAUAAAAAAAAFAFAAAAAAAUAAAAAFAAAAQUAAAEUAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABrKgAAAAAAAAAAAAAAAAAAAAAAgAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAICgAgKAAAACAoIAAAAAACgAAAAAKAAAAIAAAAAAAAoAAAAAAAAAAAAKAAAAAAAACgACgAAAAAAKAAAAACgAAAAIKAogAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1lQAAAAAAAAAAAAAAAAAAAAAAQABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAEABQQAAAFBAUAAABQAAAABAAAAAAAFAAAAAAAAAAAABQAAAAAAAAAUAAUAAAAAABQAAAAAUAAAAABAUAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABrKgAAAAAAAAAAAAAAAAAAAAAgAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAICggKACAoIACgAAKAAAAAAIAAAAAAAoAAAAAAAAAAAKAAAAAAAAACgAACgAAAAAAKAAAAACgAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAANZUAAAAAAAAAAAAAAAAAAAAAAEAAAAUAEABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAEBQAAAAAAAAAQFABAUAEBQQFAUAAAAAAQAAAAAABQAAAAAAAAAAAUAAAAAAAAAAFAAFAAAAAAAUAAAAAFAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAFAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAayoAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAACAoAAAAAAAAAAAAICgAgKCAoCgAAAAAACAAAAAAKAAAAAAAAAAACgAAAAAAAAAAoAAoAAAAAAACgAAAAAoAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAADWVAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAQFAAAAAAAAAAAAAAAAABAUBQAAAAAAABAAAAAFAAAAAAAAAAABQAAAAAAAAAAUAAAUAAAAAABQAAAAAAUAAAAAAAAAFAAABAAUAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAABQAAAAAAAAAAQAAAAAFAAAAAAAAAAAAAAAAAAABqqgAAAAAAAAAAAAAAAAAAAgAKCAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAgKAAAAAAAAAAAAAAAAACAoIooAAAAAAIAAAAAAoAAAAAAAAAAAKAAAAAAAAAACgAACgAAAAAAKAAAAAAACgAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1VQAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAEBQAAAAAAAAAAAAAQFBFFAAAAAABAAAAAAFAAAAAAAAAAABQAAAAAAAAAAUAAAUAAAAAABQAAAAAAAAUAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGqqAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAgAKAAAAAAAAAAAAACAoIooAAAAAIAAAAAAAAoAAAAAAAAAAKAAAAAAAAAACgAACgAAAAAAKAAAAAAAACgAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1VQAAAAAAAAAAAAAAAAAAAAAAAAQAAAFBAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAQFAAAAAAAAAAAAAABAUEUUAEAAAAAAAAAAAAUAAAAAAAAAAAFAAAAAAAABQAAABQAAAAAAFAAAAAAAAABQAAAAAAAUAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaqoAAAAAAAAAAAAAAAAAAAAAAAAAAIAACggAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAICgAAAgKAAAAAAAAAAACKKACAoIAAAAAAAAAAoAAAAAAAAAAAKAAAAAAAAACgACgAAAAAAKAAAAAAAAAACgAAAAAAAAoAAACAoAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADVVAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAQFAAAAAABAUBQABAAAAAAAAAAAAAFAAAAAAAAAABQAAAAAAAAAUAUAAAAAAABQAAAAAAAAAAAUAAAAAAAAFAAAAAAQAFAAAAAAAAFAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAUBAUAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAGqqAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAICggAAAAAAAAAACgAAAAAAAAAAoAAAAAAAAAKAKAAAAAAAAoAAAAAAAAAAAKAAAAAAAACgAAAAAIAAKAAoAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAKAgAAAAAAKIAAAAAAAAAAAAACgAAAAAAAgAAAANVUAAAAAAAAAAAAAAAAAAAAAAAAAAEBQAQAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAABRAUEBQQAAAAAAAAAABQAAAAAAAAAAUAAAAAAAAAAVQAAAAAAAAAUAAAAAAAAAAFAAAAAAAAABQAAAAAEAFAAAAAUAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAFAQAAAAAAAAAFAAEABQAAAAAAAAAAAAAAAAAAAAAaioAAAAAAAAAAAAAAAAAAAAAAAAIAAACgAgAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAACAAAAAAAAAAAAKAAAAAAAAAACgAAAAAAACgKAAAAAAAAACgAAAAAAAAAAoAAAAAAAAAKAAAAAAAgoAAAAAAACgAAAAAAAAAgoAACgAAAAAAgKCAAAAAAACgAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAANRUAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAQAAAAAAAAAAABQAAAAAAAAAAUAAAAAAAAAUBQAAAAAAAAUAAAAAAAAAAFAAAAAAAAABQAAAAAAAVAAAAAAAAAAAAUAAAEFAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAGoqAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAoIAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAgAAAAAAAAAAACgAAAAAAAAAAoAAAAAAAAAoCgAAAAAAAAAoAAAAAAAAAKAAAAAAAAACgAAAAAAAAoCAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAACgAgAKAAAAAAAAAAAAAAAAAANRUAAAAAAAAAAAAAAAAAAAAAEAAAABQQAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAABAAAAAAAAAAAFAAAAAAAAAABQAAAAAAAABQRRQAAAAAAAAFAAAAAAAAABQAAAAAAAAAUAAAAAAAAFAAQAAAAUAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAABQAAAAQAAAAAAAAABQAAAAAAAAAAAAAAAABqKgAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAACAAAAAAAAAAKAAAAAAAAAAACgAAAAAACggKoAAAAAAAAAKAAAAAAAAACgAAAAAAAAAoAAAAAAAAKAAAgAAoAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAACgAAAAAAAAAAAAAADUVAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAUEAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAQAAAAAAAAABQAAAAAAAAAAUAAAAAAAAAVQAAAAAAAAAUAAAAAAAAAFAAAAAAAABQAAAAAAAAAUAAABAABQAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAABAAAAAAAAAFAAAAAAAAAAAAGoqAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAIAAAAAAAAAAoAAAAAAAAAAKAAAAAAAAAKAoAAAAAAAAKAAAAAAAAACgAAAAAAAAoAAAAAAAAAKAAAAAgAoAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAACgAAAADUVAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAEAAAAAAAAAAUAAAAAAUAEAAAUAAAAAAUAABQAAAAAAAAUAAAAAAAAAFAAAAAAAABQAAAAAAAAAUAAAABABQAAAAAAUAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABptIAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAACgAAACAoAAAICgAAAAAAAAAAAAAAAAAAAAAKAAAAAIAAAAAAAAAAoAAAAAAoAAIAAoAAAAAAAAoACgAAAAAAAoAAAAAAAAAKAAAAAAAACgAAAAAAAAoAAAAAACACgAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAANNpAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAUAAAAQFAABAAUAAAAAAAAAAAAAAAAAAAAAABQAAAAABAAAAAAAAAAFAAAAAAAFAAAUQAAAAAAAAFAUAAAAAAAFAAAAAAAAABQAAAAAAAAUAAAAAAAAFAAAAAAAQAUAAAAFAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAUAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAABptIAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAACgAAAAAAAACAoAAAAAAAAAAAAAAAAAAAAAAACgAAAAACAAAAAAAAAAKAAAAAAAAKAAAogAAAAAAAKAoAAAAAAAKAAAAAAAAACgAAAAAAAAoAAAAAAAKAAAAAAAgAAoAAAAKAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAoAAAAAAAIAgAAAAAAAAAAAAAAAAAAAAAAAAANNpAAAAAAAAAAAAAAAAAAABAUAAAEAAAAAAAAAAAAAAAAAAUAAAAAAAAAABQAAAAAAAABAAUAAAAAAAAAAAAAAAAAAAAAAAABQAAAABAAAAAAAAAAFAAAAAAAAAFAAUAAQAAAAAAFAUAAAAAAAFAAAAAAAABQAAAAAAAAUAAAAAAAFAAQAAAAAAAUAAAAAFAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAUAAAAAAAAAAAEAQAAAAAAAAAAAAAAAAAAAAAAAGm0gAAAAAAAAAAAAAAAAAAAgAAKAACAAAAAAAAAAAAAAAAKAAAAAAAAAoAAAAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAgAAAAAAAAAACgAAAAAAACgAAKAIAAAAAACgKAAAAAAAACgAAAAAAAAoAAAAAAAKAAAAAAACgIAAAAAAAAKAAAAACgAAAAoAAAAAAAAAAAAAAAoCgAAAACAAAAAAAAAoAAAAAAAAAAAAAAAAIAAAgAAAAAAAAAAAAAAAAAANNpAAAAAAAAAAAAAAAAAAAABAAAAUAAEAAAAAAAAAAAAAUAAAAAAAABQAAABAUAAAEABQAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAEAAAAAAAAAAAUAAAAAAAAAUABQABAAAAAAAUBQAAAAAAAUAAAAAAAAFAAAAAAABQAAAAAAAUBAAAAAAABQAAAAAAUAAAAFAAAAAFAABAAAAAVQAAAAAAAAAAAAAAAAAAAAAAAAUAAEAAAAAAAAAAAEAAAAQAAAAAAAAAAAAAGm0gAAAAAAAAAAAAAAAAAAAAAAgAAAAKCAAKAACAAAAAAoAAAAAAACgAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAACAAAAAAAAAAAAAKAAAAAAAAAAKoAgAAAAAAAAKoAAAAAAAAKAAAAAAAACgAAAAAAoAAAAAAAKAAgAAAAAAoAAAAAAKAAAACgAAAACgKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAAAAAAAAAAAgAAAAACAAAAAAAAA02kAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAUEAAAAAAAABQAAAAAAFAAAAAAAEABQAAQAAAFAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAQAAAAAAAAAABQAAAAAAAAAAAUUEAAAAAAABQFAAAAAAAABQAAAAAAAUAAAAAAAFAAAAAABQAEAAAAAAFAAAAAABQAAAAAUAAAAUBQAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAEAAAAAAAAAQAAAGm0gAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAACgAAAAAAKAAACAoAAAAAAAgKAACAAAoAAAAAAAAAAAAAAAAAAAAAAAACgAAAAACAAAAAAAAAAAKAAAAAAAAAAACgACgAgAAKAAAoAAAAAAAAKAAAAAAAACgAAAAAAoAAAAAAAKAAgAAAAoAAAAAAAKAAAAACgAAAACqAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAgAAAAAAAAAACA02kAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAUAAAAEAAUAUAAAAAAAAAAAAAAAEABQAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAEAAAAAAAAAAAUAAAAAAAAAAAAFAAAAFAAAAAAUAAAAAAAAFAAAAAAABQAAAAAAAUAAAAAFAAAAQAAAAUAAAAAAFAAAAABQAAAABVAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAAAABpNIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIoAAIAAAACqAAAAAIACgAAAAAAAAAgKAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAgAAAAAAAAAACgAAAAAAAAAAAAoAAAoAAAAAACgAAAAAAAAoAAAAAAAAKAAAAAACgAAAAAoAAAACAAACgAAAAAoAAAAAAKAAAAAKAoAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAIAAAAIAAAAAAAAAA0mkAAAAAAAAAAAAAAAAAAAAAAAAAAEUAAAAEAAABQFAAAAEAAABQQFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAQAAAAAAAAAABQAAAAAAAAAAAAUAAAAUAAAAABQAAAAAAAAUAAAAAAAAFAAAAAABQAAAAAUAAABAAABQAAAAAUAAAAAAFAAAAAFAUAAAAFAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAQAAAAAAAAAAAAAAAEAEAAAAAAAAAAaTSAAAAAAAAAKAAACAAAAAAAAAAAAIAoAIAAAAACqAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAIAAAAAAAAAAAoAAAAAAAAAAAAKAAAAAKAAAAAoAAAAAAAAAKAAAAAAACgAAAAAAoAAAAAKAAAAgAAoAAAAAAAKAAAAACgAAAACgKAAAACgAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAIAgAAAAAAAANJpAAAAAAFAAAAAAAAABAAAAAAAAAAEAAAAAFAFAAAAABAAAAAAAUAAAAAAAAAAAAAAAAAAAAEBQAAAAAAAAAAAAFAAAAAAEAAAAAAAAAAAAUAAAAAAAAAAAAFAAAAFAAAAAAUAAAAAAAAFAAAAAAAABQAAAAAAUAAAAFAAAAAQAUAAAAAAAFAAAAABQAAAABVAAAAAABQAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAEAAQAAAAAAAGm0gAAAAAAAAAAAAAAAAAAAAAAACAAAAqAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAgKCAAAAAAAAAAKAAAAAAAAAAAACgAAAACgAAAAAKAAAAAAAACgAAAAAAAoAAAAAAKAAAAACgAAAAIKAAAAAAACgAAAAAoAAAAAKKAAAAAAoAAAKAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAIAAAAgAAAAANNpAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAABAAAAAUAAAAAABQAAAAABAUEAAAAAAAAAAUAAAAAAAAAAAAFAAAAAFAAAAAAUAAAAAAAAFAAAAAAAABQAAAAAAUAAAAFAAAAABUAAAAAAAFAAAAABQAAAAAUUAAAAABQAAAAUBAAAAAAUAAAEAAAAAABQAAAAAABQAAAAAQAAAAAAAAAAAAAEAAAAAAAEAAAAQAAAAGm0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAACgAgKAAAAAAAAAAAAAAAAAACAAAKAAAAAAAAKAAAAAACAoIAAAAAAAAAAoAAAAAAAAAAAAAqgAACAAoAAAAACgAAAAAAAoAAAAAAAAKAAAAAACgAAAAAoAAAACCgAAAAAAoAAAAAKAAAAACigAAAAAKAAAAACgIAAAAAAAAAAKAAAAAAAAAAAAoIAAAAAACgCAAAAAAAAAAAAAAgAAAAAgAAAAAACAA02kAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAUAAEBQAAAAAAAAAAAAAAAAAAAQBQAAAAAAAABQAQFAAAAABAAAAAAAAAAFAAAAAAAAAAAAFAUAAAAAAAAAAAFAAAAAAAABQAAAAAAAAUAAAAAAFAAAAABQAAAAVAAAAABQAAAAAAUAAAAAVQAAAAAAUAAAAAFAAQAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAABQABAAAAAAAAAAAAAAQAAAQAAAAAAAABpNIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAoIACgAAAAAAAAAAAAAAAAAAAgCgAAAAAAAAAAACgAAAAAAAgAAAAAAAACgAAAAAAAAAAAACqAAAAAAAAAACgAAAAAAAAoAAAAAAAAAKAAAAAACgAAAAAoAAAAKgAAAAoAAAAAAAKAAAAKoAAAAAAKAAAAAACgAIAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAgAAAAAAAAAAAAIAAIAAAAAAAA0mkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAUAAEBQAAQAFAAAAAAAAAAABAFAAAAAAAAAAAAAFAAAAABAAAAAAAAAFAAAAAAAAAAAAABRQAAAAAAAAAAFAAAAAAAABQAAAAAAAAUAAAAAAAFAAAABQAAAAAVAAAABQAAAAAAUAAAAVQAAAAAAUAAAAAAFAAAQAUAAAAAAAAAAAAAAAAAAAAAAAAFABAAAAAFAAAAAAEAAAAAAAAAABAABAAAAAAAGk0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACggAAKACAAAoAAICgAAAAAAgCgAAAAAAAAAAAACgAAAAAgAAAAAAAACgAAAAAAAAAAAAACqAAAAAAAAAACgAAAAAAAAAoAAAAAAAAKAAAAAACgAAAAAoAAAAKgAAAAoAAAAAAKAAAKAAoAAAAAKAAAAAACgAAAIKAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAgAACgAAAAAACAAAAAAAAAAAgAAAgAAADSaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAABQAQAAAFAABAUEBQAQFABAFAAAAAAAAAAAAAAFAAABAAAAAAAAAFAAAAAAAAAAAAAABQABQAAAAAAAAFAAAAAAAABQAAAAAAAAUAAAAAAAFAAAAABQAAAAVAAAABQAAAAAUAAAUABQAAAAAUAAAAAAFAAAAQAUAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAFAAAAAAAAEAAAAAAAAABAAABAAGk0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAACgAAgKACAoIACggACgAAAAAAAAAAAACggKACAAAAAAAAAKAAAAAAAAAAAAAAACgCgAAAAAAAAKAAAAAAAAACgAAAAAAAAoAAAAAAKAAAAAACgAAAAqAAAACgAAAAoAAAoACgAAAAAoAAAAAKAAAAAgAoAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAKAAAAAAAAIAAAAAAAACAACANJpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAABQQAAAAAAAAABQAAAAAAAAAAAAAAAUAUAAAAAAAAABQAAAAAAAAAUAAAAAAAAFAAAAAABQAAAAAUAAAABBQAAAAUAAAAFAAFAAUAAAAAFAAAAABQAAAEAAFAAAABQAAAAAAAAAAUAAAAEAAAAAAAAAAAAAAAAAABAAAAFAAAAAAAAEAAAAAAABABGk0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAoIAAAAAAAAAAAoAAAAAAAAAAAAAAAKAAKCAoAAAAACgAAAAAAAAAoAAAAAAAAAKAAAAACgAAAAAAoAAAACCgAAAAoAAAKAAKAAoAAAAAKAAAAACgAAIAAKAAAAACgAAAAAAAAoAAAAAAAAAAAAAAAAAIAAAAAAAAAACAAAAKAAAAAAAIAAAAAAAADRaZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAAAUAAAAAABQAAAAAAAAAUAAAAAAAAFAAAAAABQAAAAAUAAAABABQAAAAUAAAFAAFAAUAAAAFAAAAABQAAEAAFAAAAABQAAAAAUAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAABAAAFAAAAAAAAEAAAAAABotMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAKAAAAKAAAAAAAAoAAAAAAAAAKAAAAAAAACgAAAAAoAAAAAAKAAAAAgoAAAAKAAAACgACgAKAAACgAAAAAoAACACgAAAAAAoAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAgAACgAAAAAACAAAAAA0WmQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAUEABQQAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAABQAAAABQAAAAAFAAAAAAAAABQAAAAAAAAAUAAAAAFAAAAABQAAAAAEFAAAABQAAAAUAAUBQAAAAUAAAAAFAAQAAUAAAAAFAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAEAUEBQAAAAABAAAAAaLTIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAKCAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAKAAAAAAKAAAAAoAAAAAAAAAAKAAAAAAAACgAAAAAoAAAAAAKAAAAAgAoAAAAKAAACgAACgKAAACgAAAAAoAACACgAAAAAoAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAgAAACgAAAAAACA0WmQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAFAAAAAAAFAAAAAUAAAAAAAAAFAAAAAAAAABQAAAAAUAAAAAAFAAAAAQAUAAAAFAAABQAAABVAAABQAAAAAUABABQAAAAAUAAAAAFAAAAAAAABQAAAAAAAQAAAFABAAAAAAAAAAAAAAQAAAAAAAAAEAAAAUAAAAAAaDTIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAACgAAAAAAAACgAAKAAAAAAAAAACgAAAAAAAAoAAAAAAKAAAAAACgAAAAIKAAAACgAAAAoAAAAKKAAAAoAAAKAAAgAoAAAAKAAAAACgAAAAAAAAoAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACAAAAAAAAAAgAAACgAAADQaZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAFAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAAAAAAAAUAAABQAAAAAAAAAUAAAAAAAAAFAAAAAABQAAAAAAUAAAABBQAAAAUAAAAFAAAABRQAAFAAAABQAAEAFAAABQAAAAAUAAAAAAAAFAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAQAAAAAAAAAAEAAAAAAUaDTIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAoAACggAAAAAKCAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAoAAAAAAAAAAoACgAAAAAAAAAAoAAAAAAAAAKAAAAAACgAAAAAAoAAAACCgAAAAoAAAKAAAAACgCgAKAAAACgAAAqAAAACgAAAAoAAAAAAAAKAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAgAAAAAAAAAAAAIAAADQbZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAUEAABQAQAFBAAUEAAAAAAAAAAAAAFAAAAAAAAAAAAAAABQAAAAAAAAAAABQFAAAAAAAAABQAAAAAAAAAUAAAAAAFAAAAAAABQAAAEAFAAAABQAAAUAAAAFAAFAAUAAAFAAAABUAAAFAAAAABQAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAABAAAAAAAAAAAAAQAGg2yAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoCAAoIAACgAAAAAAAAgAAAAAAAAAAAAAoAAAAAAAAAAAAAAAKAAAAAAAAAAAAKAoAAAAAAAAAAKAAAAAAAAACgAAAAAAoAAAAAAAKAAAAgAoAAAAKAAACgAAAAoAAAoCgAAAoAAAKAgAAAoAAAAKAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAACA0G2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAUAAAAAAAAAAAAAAAFAAAAAAAAAAAAABRQAAAAAAAAAFAAAAAAAAAABQAAAAAAUAAAAAAAFAAAQAUAAAAFAAAABQAAAAUAAAAVQAAAUAAAFAQAAUAAAAAFAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAEAAAAAAAAABz22QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAQFBAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAAAAAAAAAAAAFFAAAAAAAAAUAAAAAAAAAAFAAAAAAABQAAAAAAUAAAABBQAAAAUAAAAFAAAABQAAAUUAABQAAAUBAAABQAAAAUAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAQAAAAAAAAHPbZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAFFAAAAAAAAAUAAAAAAAAAAFAAAAAABQAAAAAAAUAAAABBQAAAAUAAAAFAAABQAAAAUUAABQAAAUBAABQAAAAAUAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAQAAAAAAAHPbZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAABAAAUEAAAAAAAAFAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAUAUAAAAAAABQAAAAAAAAAAUAAAAAAAFAAAAAAABQAAAEAFAAAABQAAAAUAAAFAAABQABQAFAAABQEAAFAAAABQAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAABAAAAAAAAc9tkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAFAAAAAAAAAAAAAAABQAAAAAAAAAAAAAUAAAUAAAAAABQAAAAAAAAAUAAAAAAAFAAAAAAAABQAAAEAFAAAABQAAAAUAAAFAAABQABQFAAABQEAAAFAAAABQAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAABAAAAAAAc9tkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAFAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAUAAUAAAAAAABQAAAAAAAAUAAAAAAAAFAAAAAAABQAAAEAFAAAAABQAAAAUAAAFAAABQABQFAAABQEAAFAAAABQAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAABAAAAAAAc9tkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAFAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAUAAAAUAAAAABQAAAAAAAAUAAAAAAAAFAAAAAAABQAAAEAAFAAAAABQAAAUAAAAFAAABQAABVAAABQEAAFAAAABQAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAABAAAAAAAc9tkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBQQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAABQAAABQAAAAFAAAAAAAAABQAAAAAAAUAAAAAAAFAAAAQAAAUAAAAAFAAABQAAAAUAAAFAAFUAAAFAQAAAUAAAFAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAEAAAAAABz22QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQFABAAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAFAAAFAAAAAAUAAAAAAAAFAAAAAAAABQAAAAAAUAAABAAABQAAAAAUAAAAFAAABQAAAAUAUBQAAAUBAAABQAAAUAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAQAAAAHPbZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAUAEAAAAAAAAAAAAFAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAAAUAAAAABQAAAAAAAAUAAAAAAAFAAAAAAABQAAEAAAFAAAAABQAAAAUAAAAFAAABQBQAFAAABQEAAFAAAABQAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAABAAAAc9tkAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAFAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAAUAAAAABQAAAAAAAAAUAAAAAAAFAAAAAABQAAAEAAAFAAAABQAAAAAUAAAAFAAAFUAAAFAAABUAAAFAAAABQAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAABAAc9tkAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAABQQAAAAAAAUAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAABQAAABQAAAAAFAAAAAAAAABQAAAAAAAUAAAAAAFAAAAQAAAUAAAAFAAAABQAAAAUAAAUBQAAAUAABBQAAAUAAAFAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAHObZAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAUAEAAAAAAFAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAUAAAAAUAAAABQAAAAAAAAAUAAAAAAAFAAAAAABQAAAEAAFAAAAABQAAAAUAAAAFAAFAAUAAFAAAQAUAAAFAAABQAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAABzm2QAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAFABAAAAAABQAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAFAAAAFAAAAAAAUAAAAAAAAAFAAAAAAABQAAAAAAUAAABAABQAAAAAUAAAAFAAAABQABQAFAAABQEAFAAAABQAAAUAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAc5tkAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABQAQAAAAAAUAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAABQAAAAABQAAAAFAAAAAAAAAABQAAAAAAAUAAAAAAAFAAAAQAUAAAAAFAAAABQAAAAUAAUABQAAUABABQAAAAUAAAFAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAHObZAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAUAAAEAAAAAFAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAUAAAAAAUAAAABQAAAAAAAAAAUAAAAAAAFAAAAAAABQAAAAEFAAAAABQAAAAUAAAAAFAFAAUAAAFAQAUAAAAFAAABQAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAABzm2QAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAUAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAABQAAAABQAAAAAFAAAAAAAAABQAAAAAAAAUAAAAAAAFAAAAAQUAAAAAFAAAABQAAAAAUAUABQAAAUABABQAAAUAAAAFAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAHObZAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAUEAAFAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAUAAAAAAAUAAABQAAAAAAAAAAUAAAAAAAAFAAAAAAABQAAAAAVAAAAABQAAAAAUAAAAFAFAAAUAAAFAQAUAAAFAAAABQAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAABzm2QAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAUAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAABQAAAAAABQAAAFAAAAAAAAAABQAAAAAAAAUAAAAAAAFAAAAABUAAAAAFAAAAABQAAAAAUAUABQAAAUABABQAAAUAAAAFAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAHObZAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAABQAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAFAAAAAAFAAAAAUAAAAAAAAAAFAAAAAAAABQAAAAAAAUAAAAAFQAAAAAAUAAAAFAAAAABQBQAFAAAABQAEFAAABQAAAAUAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAc5tkAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAFAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAUAAAAAAAAUAABQAAAAAAAAAAAUAAAAAAAAFAAAAAAABQAAAAAVAAAAAABQAAAAAUAAAAAFAFAAUAAAFAAAQUAAAFAAAABQAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABz22QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABQAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAFAAAAAAAAFAAAUAAAAAAAAAAAFAAAAAAAABQAAAAAAAUAAAAABBQAAAAAAUAAAAAFAAAABQBQAAFAAABQAAEFAAABQAAAAUAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAc9tkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAABQAAAAAAABQAFAAAAAAAAAAAABQAAAAAAAAAUAAAAAAFAAAAAABUAAAAAAFAAAAABQAAAAAUAUABQAAAAUAAFQAAAUAAAAFAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAHPbZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAABAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAUAAAAAAAAAUABQAAAAAAAAAAAAUAAAAAAAAAFAAAAAABQAAAAAEFAAAAAAABQAAAAAUAAAAFAFAAAUAAAFAAABUAAAFAAAABQAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAABz22QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAQAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAFAAAAAAAAAFAAUAAAAAAAAAAAFAAAAAAAAAABQAAAAAAUAAAAABBQAAAAAAAUAAAAAFAAAAABRQAAFAAAABQAAVAAABQAAAAUAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAc9tkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAEAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAABQAAAAAAAAABQAFAAAAAAAAAAABQAAAAAAAAAAUAAAAAAFAAAAAABUAAAAAAAFAAAAAABQAAAAUUAAABQAAAUAAAFQAAUAAAAAFAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAHPbZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAABAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAUAAAAAAAAAAUBQAAAAAAAAAAAUAAAAAAAAAAAFAAAAAABQAAAAAAUBAAAAAAABQAAAAAUAAAAFFAAAAUAAAAFAABUAAAFAAAABQAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEABz22QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAQAAAAFBAAAAAABQAAAAAAAAAAAAAAAAAUAAAAAAAAAAUABQAAAAAAAAAAAUAAAAAAAAAAAFAAAAAABQAAAAAAAUBAAAAAABQAAAAAUAAAAFFAAAAUAAAAFAABUAAAFAAAAABQAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEABz22QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAQFBAAUEBQQAAAAUAAAAAAAAAAAAAAAAAAFAAAAAAAAAFBAUBQAAAAAAAAAAUAAAAAAAAAAAFAAAAAAABQAAAAAAAUAABAAAABQAAAAAUAAAAFFAAAAUAAAAFAAAQUAAAFAAAAABQAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEABz22QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAQFBAAAAUVAAAAAAAAAAAAAAAAAABQAAAAAAAAABQAAFAAAAAAAAABQAAAAAAAAAAAAUAAAAAAAFAAAAAAABQAAEAAAAFAAAAABQAAAABVAAAABQAAAUAAAFQAAAAUAAAAFAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAHPbZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAABAAUEABQQFFQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAUAABQAAAAAAAAAUAAAAAAAAAAAAFAAAAAAABQAAAAAAAUAAABAAABQAAAAUAAAAAAFFAAAAUAAAFAAAABUAAAAFAAAABQAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAABz22QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAQFABAUEFAAAAAAAAAAAAAAAAAABQAAAAAAAAAABQAFAAAAAAAAABQAAAAAAAAAAAAAUAAAAAAAFAAAAAAABQAAAEAAAFAAAABQAAAAAAUUAAABQAAAAUAAAFAQAAAUAAAAAFAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAHPbZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAABAUEABQQUAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAFAAAUAAAAAAAAAFAAAAAAAAAAAABQAAAAAAAAUAAAAAAAFAAAAQAAAUAAAAAFAAAAABRQAAAFAAAABQAAAAUBAAABQAAAAUAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAc9tkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAEABQQUBQQAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAUABQAAAAAAAAAUAAAAAAAAAAAAFAAAAAAAABQAAAAAAUAAABAAAABQAAAAAUAAAAAAFFAAAAUAAAAFAAAABQEAAAFAAABQAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABz22QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAQAFBABVBAAAAAAAAAAAAAAAAAABQAAAAAAAAAAABQFAAAAAAAAAABQAAAAAAAAAAAAUAAAAAAAAFAAAAAABQAAAAEAAAFAAAAABQAAAAAAUUAAABQAAAAUAAAAFAAQAAUAAAAFAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAHPbZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAABAUAEAFUEAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAFAAUAAAAAAAAAFAAAAAAAAAAAAABQAAAAAAAUAAAAAAAFAAAAAQAAAUAAAAAFAAAAAABQBQAAAFAAAABQAAAAUBAABQAAAAUAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAc9tkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBQBUABQQFBAAAAAAAAAAAAAABQAAAAAAAAAAAABQFAAAAAAAAABQAAAAAAAAAAAAUAAAAAAAAFAAAAAABQAAAAAEAAAFAAAAAABQAAAAAAUAUAABQAAAAUAAAAFAAQAUAAAAAFAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAHPbZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAQFBAUEAAAAAAAAAAAAFAAAAAAAAAAAAAAFUAAAAAAAAAAFAAAAAAAAAAAABQAAAAAAAAUAAAAAAFAAAAAAQAAAUAAAAAAFAAAAAABQBQAAAFAAAABQAAAUABAABQAAAAAAUAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAc9tkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAABAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUUAAAAAAAAABQAAAAAAAAAAAAUAAAAAAAAFAAAAAABQAAAAAEAAAFAAAAAABQAAAAAAAUAUAABQAAAAUAAAFAAQAAUAAAAAAAAFAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAHPbZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAQFBAAAAAAAAAABQAAAAAAAAAAAAAAAUAAUAAAAAAAABQAAAAAAAAAAAAUAAAAAAAAFAAAAAABQAAAAAEAAAFAAAAAAABQAAAAAAUAAUABQAAAAUAAAAFAQAAUAAAAAAAAAFAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAHPbZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAQFBAAAAAAABQAAAAAAAAAAAAAAAUAAUEBQAAAAAAAFAAAAAAAAAAABQAAAAAAAAAUAAAAAAAFAAAAAAQAAUAAAAAAAFAAAAAAABQBQAAFAAABQAAAAUBAAAABQAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAc9tkAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAABAUEAAAAAAAFAAAAAAAAAAAAAAAABQAABQAAAAAAAAFAAAAAAAAAAABQAAAAAAAAAUAAAAAAAFAAAAAAQAAUAAAAAAAAFAAAAAABQABQAFAAABQAAAAUBAAAAAABQAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAc9tkAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAABAAAAAAAABQAAAAAAAAAAAAAAAUAAAAAAUAAAAAABQAAAAAAAAAAAUAAAAAAAAAFAAAAAABQAAAAAAEAAFAAAAAAAABQAAAAAAUAAUABQAAAUAAAAFAAQAAAAAAUAAAAAAAFAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAHPbZAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAQAAAAAAUAAAAAAAAAAAAAAAAFAAAAAAAFAAAAAAUAAAAAAAAAAAFAAAAAAAAABQAAAAAAUAAAAAABAABQAAAAAAAAUAAAAAAFAAAFAUAAAFAAAAABQAEAAAAAAAFAAAAAABQAAAAAAAAAAAAAAUAAEAAABQAAAAAAQAAAAAAAAAAAAAAAAHPbZAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAQAAAAAAAUAAAAAAAAAAAAAAAAFAAAAAAAAAFAAAAUAAAAAAAAAAAFAAAAAAAAABQAAAAAAUAAAAAABAABQAAAAAAAAUAAAAAAAFAAFAUAAAFAAAAAABQAAEAAAAAAFAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc9tkAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABAUEAAFAAAAAAAAAAAAAAAABQAAAAAAAAAABQAAFAAAAAAAAAABQAAAAAAAAAUAAAAAAAFAAAAAAAQAAUAAAAAAAAAFAAAAAABQAABQFAAABQAAAAAAAUAAABAAAABQAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHPbZAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAQAAAUAAAAAAAAAAAAAAAAFAAAAAAAAAAFAAAUAAAAAAAAAAAFAAAAAAAAABQAAAAAAAUAAAAAAABABQAAAAAAAAAUAAAAAAFAAAFAUAAAFAAAAAAAAABQAAEAAAFAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc9tkAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAABAAABQAAAAAAAAAAAAAAAAAUAAAAAAAAAAAUABQAAAAAAAAAAAUAAAAAAAAAFAAAAAAABQAAAAAAAAEFAAAAAAAAABQAAAAAAUAAAUBQAAAAUAAAAAAAAAFAAAQAAAUAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABz22QAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAEAFAAAAAAAAAAAAAAAABQAAAAAAAAAAABQFAAAAAAAAAAAABQAAAAAAAAAUAAAAAAAFAAAAAAAAAAQUAAAAAAAAFAAAAAABQAABQFAAAAABQAAAAAAAAAUAABAAABQAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHPbZAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAUAAAAAAAAAAAAAAAAAFAAAAAAAAAAAFAAUAAAAAAAAAAAAFAAAAAAAAABQAAAAAAAUAAAAAAAAABBQAAAAAAAAUAAAAAAFAAAFAUAAAAAAFAAAAAAAAABQAAAEAAFAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaDbIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqAAAAAAAAAAAAAAAAACgAAAAAAAAAAAACgKAAAAAAAAAAAACgAAAAAAAAoAAAAAAAAKAAAAAAAAAAgoAAAAAAAAAKAAAAACgAACgKAAAAAAACgAAAAAAAAAoAAACAACgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANBtkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAUEAAAAAAAAAAAAAAAFAAAAAAAAAAAAAFUAAAAAAAAAAAAFAAAAAAAAABQAAAAAAAAUAAAAAAAAAAFQAAAAAAAAAUAAAAAFAAAAFAUAAAAAAAFAAAAAAAAABQAAAEAAAFAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaDbIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqAoIAAAAAAAAAAAAAAAKAAAAAAAAAAAAAKAoAAAAAAAAAAAAKAAAAAAAAACgAAAAAAAAoAAAAAAAAAAKgAAAAAAAAAoAAAAAKAAAAAKAoAAAAAAAAKAAAAAAAACgAAAIAAAAKAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAADQbZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAQAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAUBQAAAAAAAAAAAAUAAAAAAAAAFAAAAAAAABQAAAAAAAAAAUBAAAAAAAABQAAAAAUAAAAAAUBQAAAAAAAAUAAAAAAAAFAAAAQAAAAAAUAAAAAAAAFAAAABAAAAAUAAAAAAAAAAEAAAAAAAABQaDbIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAACAoIAAAAAAAAAAAAAKAAAAAAAAAAAAAAKoAAAAAAAAAAAAAKAAAAAAAAACgAAAAAAAAAoAAAAAAAAAAKAgAAAAAAoAAAAAKAAAAAAAAACigAAAAAAAKAAAAAAAACgAAAAIAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAANFtkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABAAUEAAAAAAAAAAAAAAFAAAAAAAAAAAAAFBFFAAAAAAAAAAAAAUAAAAAAAAAFAAAAAAAAABQAAAAAAAAAAUBAAAAAABQAAAAAUAAAAAAAAAAFAFAAAAAAAUAAAAAAAAFAAAAAAQFBAAUEFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABotsgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAIAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAKogKAAAAAAAAAAAAoAAAAAAAAAKAAAAAAAAACgAAAAAAAAAAAoACAAAACgAAAAAoAAAAAAAAAAAKAAKAAAAAAAoAAAAAAAKAAAAAAAAAAAgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANFtkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAUAUEBQAAAAAAAAAAFAAAAAAAAABQAAAAAAAAAUAAAAAAAAAAAFAAQAAAAUAAAAAAFAAAAAAAAAAABQABQAAAAAAFAAAAAAAABQAAAAAAAAAEFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABotsgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAKKAgAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAKAKCAoAAAAAAAAAACgAAAAAAAAAoAAAAAAAAAAKAAAAAAAAAACgAIAAAAKAAAAAACgAAAAAAAAAAAoAAAoAAAAAACgAAAAAAAAoAAAAAAAAACCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0W2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQFFAQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAFAAFAAAAAAAAAAAUAAAAAAAAAAFAAAAAAAAAABQAAAAAAAAAAUABAAAABQAAAAAAUAAAAAAAAAAAAFAAAFAAAAAAAUAAAAAAAAFAAAAAAAAAQUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGi2yAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAACAAooCAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAoAAoAAAAAAAAAACgAAAAAAAAAAoAAAAAAAAAAAKAAAAAAAAACgIAAAAAKAAAAAACgAAAAAAAAAAAAAoAAoAAAAAAACgAAAAAAAAoAAAAAAAACCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0W2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQFFQAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAFAAFAAAAAAAAAAAUAAAAAAAAAAFAAAAAAAAAAABQAAAAAAAAAUBAAAABQAAAAAAAAUAAAAAAAAAAAAAFAAFAAAAAAAAUAAAAAAAAFAAAAAAAAQAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGi2yAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAgAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAKAAAKAAAAAAAAAAAoAAAAAAAAAAKAAAAAAAAAAACgAAAAAAAAoACAAAACgAAAAAAAAoAAAAAAAAAAAAAKAAKAAAAAAAAoAAAAAAAAAKAAAAAAAAgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANFtkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAUAAAUAAAAAAAAABQAAAAAAAAAAAAUAAAAAAAAAAAFAAAAAAABQEAAAAAFAAAAAAAAAABQAAAAAAAAAAAAUAAUAAAAAAABQAAAAAAAAUAAAAAAABABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/2Q==",skyBoxDown:"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAFA3PEY8MlBGQUZaVVBfeMiCeG5uePWvuZHI////////////////////////////////////////////////////2wBDAVVaWnhpeOuCguv/////////////////////////////////////////////////////////////////////////wAARCAgACAADAREAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAEC/8QAFBABAAAAAAAAAAAAAAAAAAAAAP/EABYBAQEBAAAAAAAAAAAAAAAAAAABAv/EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhEDEQA/ADKgAAAAAAAAAAIAAAAACgAgAAAAAAIAAACAAAAAAoAAAAAAAKAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAKAACAAAAAAAgAAAIAAAAACgAAAAAoAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAgAAIAAAACgAAAoAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACggAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAgAIAAAACgAAoAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAgAAIAACgAAoAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAACgAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAgAAAAAAKAAAACgAAgAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAgAAKAAAACgAAAAAgAAAAAAAAAAAAIAAAAAAAAAAAAAAACgAAgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAoAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAACAAAoAAAAAAAAAAAAAIAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAAgKAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAoAAAAAAAAAAAAAAAAAAAAAAAIAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAAAAAKAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAIACgAAAgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAKAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAoAAAAIACgAAAAAAAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAAAAIAAAAAACgAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAIAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACggAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAKAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAACgAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAKAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAICgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAIAAAAAAACgAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAKAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAIAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAIAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACgAAAAgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAgKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAACgAAAAAAAAAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAACAAoAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAKAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAoAAAAIAAAAACgAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAgAAAAAAAKAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAIAAAAAAAAAACgAAAAAAAAAAAAAgAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAgAAKAACAAAAAAAAoAAAAIAAAAAAACgAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAKAAAAAAAAAACAAAAAAAAAAAAAgAAKAAAAACAAAAAAoAAAIAAAAAAAAACgAAAAAAAAAAAAAgAAAAAAAKAAAAAAAAAAAACAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAgAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAACAAAAAAAAAAAAAgAKAAAAAAAACAAAAAoAIAAAAAAAAAACgAAAAAAAAAAAAAgAAAAAAAKAAAAAAAAAAAAAAAACAAAAAAAAAAAAoAAAAAIAAACgAAAAAAAAAAAgAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAACAoAAAAAAAAAAAAIAAAAAAAAAAAAAACgAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAACAAAAAAAAAAAoAAAAIAAAAACgAAAAAAAAAAgAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAICAoAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAIAAAAAACgAAAAAAAAAAgAAAAAAAAAAAAKAACAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAMgAoAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAKAAAAAACAoAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAADIAAKAAAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAICgAAAAAAAAAgAAAAAAAAAAAAAAAAAAKAAACAAAoAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAADIAAKAAAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAKAACAAAAAyAACgAAAAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAADIAKAAAAAAAAACAAAoAAAAAAAAAIAAAAAAACgAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAACAAAAAyCgAAAAAAAAAgAAAAKAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAgAAAAKAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAKAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAACAAAoAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAIAAAACgAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAoAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAgAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAACgAAAAAAAAgAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAACgAAAAAAAAgAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAIAAAAAAAAAAAAAAACgAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAKAAAAAAAAACAAAAAAAAAAAgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAKAAAAAAAAACAAAAAAAAAAAgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAKAAAAAAAACAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACggAAAAAAAAAAKAAAAACAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAIAAAAAAAAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAKAACAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAIAAAAAAAAAAAACAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAKAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAoAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAoAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAICAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAACAgAAAAKAAAAAAAAAACAoAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAAAAAAAACgAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAoAAAAAAAAMgAAoAAAAAAAAAAAAAAICgAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAgAAAAAAAAAKAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAACgAAAAAAAyCgAAAAAAAAAAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAIAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAKAAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAgAAAAAAKAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAAAoAAAAAAMgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAgAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAACgAAAAAAAAAAAAAgAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAgAAAAAAAAAAAAAAAKAAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAAAAAgAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICgAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAgAAAAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACgAgAAAAAAAAAKAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAKAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAKAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAKAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAACgAAAAgAAKAAAAAAAAAAACAAAAAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAIAAAAAAACgAAAAAgAAAAAKACAAAAAAAAAAAoAAAAAAIAAAAAAACgAAAAAAAAAAAgAAAAAAAAAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAIAAAAACgAAAAAAAAAgAAAAAAAAAAAAKAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAIAAAAAACgAAAgAAAAAAAAAKAAAAACAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAKAAACAAAAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAACgAAAAAAgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAAAgAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAoAAAAAIAAAAAAAACgAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACgAAAAAAgAAAAAKAAAAAAAAAAAAAAACAAAAAAoAAAIAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAgAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAIAAAAACgAAAAAgAAAAKAAAAAAAAAAAAAAACAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAgAAAAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAAAAAAAAAAAACAAAAAAAAoAAAAIAAACgAAAAAgAKAAAAAAAACAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAIAACgAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAAAAAAAACgAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAKAAACAAAoAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAIAAACgAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAAAAAAAACgAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAACgAAAgAAKAAAACAAAAAAAAAAAoAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAgAKAAAACAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAACAAAAAgAAAKAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACAAAAAAAAAAAAoAAAAAAAAAAAAAAIAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAgAAAAIAAACgAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAgAAAAAKAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAgAAAIAAAACgAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAgAAAAAAAAAAAAAAKAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAgAAAKAAAAACgAAAAAAgAAKAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAIACgAgAAAAAAAAAAAAKACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAAgKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAoAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAACgAAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAKAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAACgAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAoAAAAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAACgAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAKAAAAAAAAAAAAAAAAACAAAoAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAKAACAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAACgAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAACAAAoAAAAAIAAAAAAACgAAgAAAAAAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAICgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAKAACAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAKAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAACgAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAAoAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAKAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAAAAoAAAAAAAAAAKAAAAAACAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAgAAAAKAAAAAAAAAACgAAAAAAgAAAAIAAAACgAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAIAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAIAAAAAAAACgAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAgAAAAAAAAKAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAACAAAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAoAAAIAAAACAAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAACgAAAAAAoAAAAIAAAACAAAAAAoAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAACgAAAAAAoAAAAAIAAACAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAKAAAAACAAAAAgAAAAAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAoAAAAAIAAAACAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAgAAAAAAKAAACAAAAAgAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQIAAAAAAAAAAAAAACAAAAAAgKAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ACAAAAAAAAAAAAgAAAAIAAAACgAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAAgAAAAAAAAAAIAAACAAAAKACACgAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAACAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAoAAIAAAAAAAAAAAAAAAAAAAADQIAAAAAAAAAACAAAAgAAAAAAAAKAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAIAAACgAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAIAACAAAAAAAAAoAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAgAAKAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAAAAAAAgAAAIAAAACgAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAACAAAoAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAKAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAACAAAoAAAKAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAACAAAoAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAICgAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAAAAAAAAAgAAAAAAKACAAAAAAoAAAIAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACgAAAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAKCAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAACAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAACAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAgAAAAAKACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAIAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAKAAAACAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACggAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAACgAAAAAAAAAAgAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgCigIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAKAKAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAKAAACAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIoAoCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAAAIAAAACgAAAAAAAAgAAAAKAAAAAACAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACKAKAgAAAAAAAAAAAAAAAAAAAgAAAAAAAKAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAgAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAgKAAAAAAAAAAAAAAAAAACKKAAgAAAAAAAAAAAAAAAAAAgAAACgAAgAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAgAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAICgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKACAACggAAAAAAAAAAAAAAIAAACKAKAAAgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACggAoAAAAIAAAAAAAAAAACAAAAgCgCgAIAKACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAACAAAAAAAAKCAACgAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAAAAAIAAAAAAAAAAAACgAAoAAAAAAAAIAACgAAgAAAAAAAKAACAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAACAAAAAAAAAAAAoAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAgAAAAAAKAAAAAAAAAAACAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAACAAAAAoAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAgAAAAKAAAAAAAAAAAACAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAAAAIAACgAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAKAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAoAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAgAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAAoAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAIAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAKAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAIAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAKCAAAAAAAAAAoIACgAgAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAADIKAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAKAACAoIAAAAAAACgAAAAAgAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACAAKIAACgIAAKAAAAAAAAAAAAAAAACAoAAAAAAAAAAAAAAKCAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAgKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAKACAoIAAAAAAAAACgAAAAAgAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAAoAAAAIAAogAAAAKgAoAAAAAAAAAAAAAIAAAACgAAAAAAAAAAAAAoIAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAoAICggAAAAAAAAAAKAAAACACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAogAAAAKAgAoAAAAAAAAAAAAIAAAACgAAAAAAAAAAAAAoIAAAAAAAAAACAAAoAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAAKAACACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAoAgAAAKAgAoAAAAAAAAAAAAIAAAACgAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAKAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAoAAAAIAAAAAAAAAAAAKAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAACAKAAAACACgAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAACgCAAAoACAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIoAAAIAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAACgAACAAAoACAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAKCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAoICgAACAAAAoACAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAAAAAAACgAoAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAACgAAAAACAAAAAoAACAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAACgAAoAAAAIAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAKCAAoAAAAAAAAAAgAAAAKAAAgAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAoAAKAAAAAAACAAAAAAAAAAgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAgAAAAAACgACAAAAAoAAAAAAAIAAAACgAAIAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAKAACgAAAAAAAAgAAAAAAIAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAgAAAACgAACAAAAAAAoAAAAAAAIAACgAAAAIAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAgAAAAAAKAAACgAAAAAAAgAAAAAAAIAAAoAAIAAKAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAIAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAIAAAAAoAAgAAAAAAAKAAAAAAAAAAAAAAAgAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACAAAAAAoAAAAKAAAAAAACAAAAAAAgACgCAAAqAACgAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAACAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACAAAAAKAAAAAAIAAACgAAAAAAAAAAAAAAIAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAgAAAKAAAAACgAAAAAAgAAAAAAAIAoAgAAAKgAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAIAAAAAACAKAAKAgKAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAgAAACgAAAAAAAAAAAAAAAAAAAAAAAAgAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAIoAgAAAAKgAoAAAAAAAAIAAAAAAACAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAgAAAAAIAoAAAAAoACAAAAAAAAAAAAAAoAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACAAAKAAAAAAAAAAAAAAAAAAAAAAACAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAAAigCAAAAAqACgAAAAAAAAAgAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAACAAAAAigAAAAAAACoAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAIAAoAAAAAAAAAAAAAIAACgAgAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAIoAgAAAAKAgAoAAAAAAAAAAIAAACAAAoAAAAAKAAAACAAAAAAAAAAAoAAAAAAAIAAAACAAAAAigAAAAAAAgoAAAAAAAACgACAAoAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAgCgAAAAAAAAAAAAgAAAAAAAAAAAAAAAoAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAoAAIAAAAAAAAAAAAogAIAAACgIAKAAAAAAAAAAACAAAAgAKAAAACgAAAAAAgAAAAAAAAKAAAAAAAACAAAAAAgAACiAAAAAAAAIKAAAAAAAAAoAgAAAKAAAgAAAAAAAAAAAAAAAAAAAAAAAAAKCAAAACgAAAAAAAAAAAAAAAAAAAigAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAKAAAAAAAAAAACAAAKIAACAAAoAKgAAAAAAAAAAAAgAAAAAAAAAKAAAAAAAACAAAAAAAAoAAAAAAAAIAAAAACAAAKIAAACAoAACCgAAAAAAAKAAAIAACgAAIAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAoAAAAAAAAAAAAAAAAAAAIAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACggAAAKCACgAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACAKAIAAAAAACoAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAAAgAAAAAKAAAAAAAAACAAAAAAgACgCAAAAgKAAACoAAAAAAACgAAAAAAAAAgAAAAAAAAAAKCAoAIAAAAAACgAAAAAAgAAoAAAAAAAAAAAAAAAAAAAIAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAoAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAgCgACAAAAAoCAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACAAKAAIAAAAAAACoAAAAKACAKAAAAAAAAACAAAAAAAAAAoAAIAAAAAAAAAACgAAAAAgAoAAAAAAAAAAAAAAAAAAAIAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAACgAAAAAACoAAAAAAAAAAAAAAAAAKAAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAKAAAAAACAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAACAKAAIAAAAAACoAAAAAKACAKAAAAAAAACAAAAAAAAAAAoAAIAAAAAAAAACgAAAAAAAgoAAAAAAAAAAAAAAAAAAAIAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAACgAAAACgIAAAAAAAAAAAAAAAAAAKAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAKCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAgCgACAAAAAoCAAAAAACggACgAAAAAAAgAAAAAAAKAAAAACAAAAAAAAAAAAoAAAAIAKAAAAAAAAAAAAAAAAAAACAKAAAAAAACAAAAAAAAAAAAAAAAAAAACgAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAigAACAAAoCAAAAAAAAAAAoAAAAAIAAAAAACgAAAAAAAAAgAAAAAAAAAAAAKACACgAAAAAAAAAAAAAAAAAAAAgCgAACAAoAACAAAAAAAAAAAAAAAAACgAAAAAAAAAKCAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAoAAAICgAAAAAAAAAAAAAAgAAAAAAAAAAAICgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAIoAAAAAIAAAAAAAAAAACgAAAgAAAAAAAKAIACgAAAAIAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAKAAAIACgAAIAAAKACAAAAAAAAAAoAAAAAAAAAAAAACggAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAIAAAAAAAAAAACAKAACAAAAAAAAAAAAAAAACgAAgAAAAACgCAAAoAAACAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAgACgAAAAAAAAgAAoAAAIAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAoAgAAKAAAgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAoAAAAAAAAIAAKAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAgAAAKAAAAAAAAAAAAACAAAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAoAgAKAAAAAAgAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAIAoAAAAAAAAIAAAKAAAAACAAAAAAoAAAAAAAAAAAAAAKAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAACAAAAAgKAAAAACAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAAAACgAAAAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAAAgAAAACgAAAAAAAAAAAgAAAAAAAAoAAAAAIAAAoAAAAIAAKAAAAAAAACAKAAAAAAAAACAAACgAAAAAAgAAAAKAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACAAAoAAAAAIAACgAAAAAAAAAAgAAAAAAAAAAAAAAAAAAKAAAAAAAAAACAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAACAAAAAKAAAAAAAAAAAACAAAAAAACgAAAgAACgAAAAgAAAAoAAAAAAAIAoICgAAAAAAgAAAAoAAAAAAIAAAACgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAgAAKAAAAAACAAoAAAAAAAAAIAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAgAAAACgAAAAAAAAAAAAgKCAAAAAAAAAAAoAAAAAAAAAIAKAoAAIAAIAAoIAAAAAAAAAAAAKAAAAACAAAAAoAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAIAACgAAAAAAAAgKCAoAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAoAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAACgAAAAIAIAAAAAACgAAAAAAAAAAAAAAgAAAAAKAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAoAAACAoAAAAAAAAAgAAAAAAAKAAAAAAAAAAAKAAAAAgAiggAAAAAoAAAAAAAAAAAAAAAAIAAAACgAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAgAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAKAgAAKCAoAAAAAAgKCAAAAAAAAAoAAAAAAAAoAAAAAACAogCAAAACgAAAAAAAAAAAAAAAAAAgAAAKAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAoCAAAAoAAAAAgKAAAAAAACAAAAoAAAAAAoAAAAAAAACAoiAAAAACgAAAAAAAAAAAAAAAAAAAKCAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAICgAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAqAAAAoAAAAAgAKAAAAAACAAAAoAAAAAqAoAAAAAAAAIIoIAAAAKAAAAAAAAAAAAAACgAgAAACgAAgAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAoAAAAAAAAIAACgAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAoCAoiCqAAIAAACgAAAAAAAgAAAAKCAoqAAAAAAAAAoAIIAAAAACgAAAAAAAAAAAAoAAAAAAIAoAAIAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAgAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAoAIAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAKCIACgAAAAACgAAAAAAAAgAAAAAAAoAAAAAAAAAAAAIAAAACgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAKAAAACAAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAoIAAAAAAAAACgAAAAAAAAAgAAAAAAAoAAAAAAAAAAAAIAAAACgAAAAAAAAAAoAAAAKAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgNAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAACAAAAAAAAAAAAAAAAoAAIAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAKCAAAAAAAAAoICgCAAAoAACAAAAAAACgAAAAAAAAAAAAAgAAAKAAAAAAAAAACgAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAA0AAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAAAAAACAAAoAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAKAACAoIAAAAAAACgACAAoAAACAAAAACgAAAAAAAAAAAAAAgAAKAAAAAAAAAAACgAAAAoAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAA0AAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAKAAAAACAAAAAAAoAAgAAKAAAgAAAAoAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAoAAAAAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgNAAAAAAAAAAAgAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAACgAAAAAAAgAAAAAKAAAIAACgAAIAAAKAAAAAAAAAAAAAACAAAoAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAgAAAAAAAAAAAAAAAAKAAAACAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKIAAAAAAAgAAAAAKAAAAIACgAAIAAAAKAAAAAAAAAAAoIAIoIKAAAAAACgAgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAIAAAAAgAAAAAAAKAAAAAAAAACAAACgAAAAAAAAKCAoAIAAAAAAAAKAAACAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAoIAAAAAAAAAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAgAAACACgAAAgACgAAAAAAAAAgAAAoAAAAAACgAgKAAAACAAAAACgAAAAAgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAgAAAAAAAAKAAAAAAAAAAAACAAAAAAAAoAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAACAAKAAAAAAAACAAACgAAAAAAAKAAAAAACAAAAACgAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAgAAAAAAAAAKAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAgCgAAAAAAAgAAAoAAAAAAAAACgAAAAAgAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAigAAAgAAAAAAoAAAAAAAAAACgAAAAgAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAIAACgAAAAAAAAAAAKCAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAIAAAAAAAAAACgAgAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoIAAKAAAAAACAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAKAACAAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgCoAAAAAAAAAIAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAoAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAgAAAAKACAAAAAAAAAAAAAKAAAKgAAAAAAAAAgAAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKoAIAAAIAAAAAAAACqAAAAIgAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAIACgAAgAAAAAAAAAAKACKAAAKgAAAAAAAAAAgAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAKAAACAAAAAAAAAAAAAAAoAAAAAAAAIAAAAACgAAKACAAAACAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAigAAAgoAAAAAAAAAIAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAgAAAAAAAKAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAIAAAACgAAgAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAIAAACAAoAAAKACKAAACCgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAoAAAAIAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACAAAAgCggoAAKAACAKCCgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAACgAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACggAAAAAAAAAAAAAAAAAAAAIAACgAAAAgAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAIAACKAAKgAAoAAAICgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACggAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAgAAAAKAAAAAAAAAAACgAAAAAAAAAAAAAgAAAAAAAAAKAAACAAAAAAAAAoAAIAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAgAACiAAqAAACgAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAACgAAAAAoIAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAKAAAACAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAIAAoAAIAAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAgAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAIAoAIAAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACggAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAKAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoIAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACAoAAAAAAAAAAAAAAAAIAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAoAAAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAACgAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAKCAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAKAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAIAACgAAAAgAAAAAAAAKAAAAAAAAAAAAACggAAAAAAAAAAAAAAAAAICgAAAAAoAAAAAIAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAiAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAoIAAAAAAAAAAAAAACAAAAAAoAAAAKAAAACAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACCAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAACgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAoAAgACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAAAIAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICgAAAAAAAAAAAAAAAAgAAAAAAKAAAAAAAAAAAAAAAAAAAAACAAoAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAoAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAIAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAgAAAAAAKAAAAAAAAAACAoAAAAAAIAAAAAACgAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAICgAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAACAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAAAAIAAAAACgAAAAAAAAAAAgAAAAAAAAAAAAAAAKAACgAAAAAAAAAAgAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAoIAAAAAAAAACgAAAAAAAAAAAAAAAAAgAAAICgAAAAAAAAAAAAAAoAAAAAAAAIACgAAAAAAAAAAAAAAAAAgAAAAAAKAAAAACAAAAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAoAAAIAAAAAAACgAAAAAAAAAAAAgAAAAAAAAAAAAAAKAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAgAAAICgAAAAAAAAAAAAAAoAAAAAAAIAACggAAAKAAAAAAAAAAAAAACAAAAAAAoAAAIAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACKCAACgAAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAgKAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAACAAAoAAAAAAAAIAAAAAAAAAAAAACKAAACACgAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAAAACAAAAoAAAAKAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAIAAAAAAAACgAAAAAgAAAKCAAAAAAAoAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAIAAAACgAAAAAAAgAAIAoAAAAoACACKAAAAACACgAAAAAAAAAAAAoAAAAAAAAAAAAIAAAAACAAAAAqgAAgAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAoAAAIAAAAAACgAAAAAgAAAKACAAAAAAAAoAAAAAAAAAAAIAAAAAAAAACggAAAAAAAAAAKACAAAAAAAAAAgAAAAAKAAAAAACAAigAAAAAAAAAAAACAAoACACgAAgAAKAAAAAACgAAAAAAAAAAAgAAAAAIAAoAAoAAACAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAgAAAAAKAAAAAACAAAA/9k="},qd=new bh,jd=function(){var A="Success",e="",t="",i=!1,o=0,n=null;return function(r,a,s){return 5===r?document.querySelector(".loading").classList.add("hide"):A=r,"error"===r&&(i=!1),void 0!==a&&(e=a,void 0!==s&&(i=s)),5e3>(new Date).getTime()-o?e!==t&&(n=qd.notify(A,{size:"mini",rounded:!0,position:"center top",sound:!1,delay:i,msg:e}),o=(new Date).getTime(),n.$el.childNodes[1].childNodes[0].title=e):(n=qd.notify(A,{size:"mini",rounded:!0,position:"center top",sound:!1,delay:i,msg:e}),o=(new Date).getTime(),n.$el.childNodes[1].childNodes[0].title=e),t=e,n}}(),Hd=function(A,e){var t=A.toolId,i=A.Flag,o=A.viewer,n=e.toolbarTop,r=function(A){var e=o.viewerImpl.getBoundingBoxByIds([A]);return e.max.distanceTo(e.min)/10},a=this;this.deleteListener=null,this.addListener=null,this.updateListener=null,this.imageSize=100;var s=qd.window({title:"标签",id:"markWindow"+t,width:356,height:848,closeOnEsc:!1,closeButton:!0,afterWindowHide:function(){var A=document.getElementById("mark"+t);i.mark=!1,A&&(A.style.backgroundColor="",A.querySelector(".yj-icon").className="yj-icon label-icon"),document.getElementById("markColorModal"+t)&&(document.getElementById("markColorModal"+t).style.display="none"),o.viewerImpl.cameraControl.dispatchEvent(Rc.ON_CAMERA_CHANGE)},content:'
标签类型:
标签样式:
标题:
背景色:
标签位置(点击模型获取):
构件:
备注栏数:
'});s.$el.addClass("markWindow");var l=function(A){if(A.intersectInfo){var e="",i=function A(e){if(e.intersectInfo){o.viewerImpl.modelManager.removeEventListener(Rc.ON_CLICK_PICK,A);var t=o.viewerImpl.camera,i=e.intersectInfo.point.clone(),n=t.position.clone(),r=i.clone().sub(n),a=r.length(),s=o.viewerImpl.getBoundingBoxByIds([e.intersectInfo.selectedObjectId]),l=new CA(n,i.sub(n).normalize()).intersectBox(s),c=Math.min(s.max.x-l.x,l.x-s.min.x),h=Math.min(s.max.y-l.y,l.y-s.min.y),d=Math.min(s.max.z-l.z,l.z-s.min.z),p=Math.min(c,h,d);return{point:e.intersectInfo.point,distance:a,face:p===c?"x":p===h?"y":"z",eye:r,box:s}}}(A),n=document.getElementById("updateMark"+t);xh.hasClass(n,"hide")?(e=s.$el.querySelector(".mark .first-floor select").value,s.$el.querySelector(".mark ."+e+" .startX ").value=A.intersectInfo.point.x,s.$el.querySelector(".mark ."+e+" .startY ").value=A.intersectInfo.point.y,s.$el.querySelector(".mark ."+e+" .startZ ").value=A.intersectInfo.point.z,s.$el.querySelector(".mark ."+e+" .component ").value=A.intersectInfo.selectedObjectId,"plane"===e&&(s.$el.querySelector(".mark ."+e+" .face ").value=i.face)):(e="block"===n.querySelector(".dom").style.display?"dom":"block"===n.querySelector(".sprite").style.display?"sprite":"plane",n.querySelector("."+e+" .startX ").value=A.intersectInfo.point.x,n.querySelector("."+e+" .startY ").value=A.intersectInfo.point.y,n.querySelector("."+e+" .startZ ").value=A.intersectInfo.point.z,n.querySelector("."+e+" .component ").value=A.intersectInfo.selectedObjectId,"plane"===e&&(n.querySelector("."+e+" .face ").value=i.face))}},c=new Od(o.viewerImpl),h=new Gd(o.viewerImpl),d=new Vd(o.viewerImpl),p=s.$el.querySelector(".mark .dom .markColorInput"),g=new Hh(p,{hasOpacity:!1});p.value="rgb(255,0,0)";var u=g.element;u.id="markColorModal"+t,u.className="markColorModal",document.getElementById("mark"+t).parentNode.appendChild(u);var f=qd.prompt({title:"修改标签",id:"updateMark"+t,width:356,height:400,closeOnEsc:!1,closeButton:!1,buttons:{ok:{class:"lobibox-btn lobibox-btn-default",text:"确定",closeOnClick:!0},cancel:{class:"lobibox-btn lobibox-btn-cancel",text:"取消",closeOnClick:!0}},content:'
标签id:
标题:
背景色:
标签位置(点击模型获取):
构件:
备注栏数:
标签id:
图标选择:
标签大小:
标签位置(点击模型获取):
X:
Y:
Z:
构件:
标签id:
图标选择:
标签大小:
标签位置(点击模型获取):
X:
Y:
Z:
构件:
标签所在面:
'});f.setPosition({left:o.viewportDiv.offsetWidth-f.width-5,top:60}),f.promptHide(),f.$el.addClass("updateMark"),u.querySelector(".btn-yes").addEventListener("click",(function(){var A=document.getElementById("updateMark"+t);xh.hasClass(A,"hide")?s.$el.querySelector(".mark .dom .colorRect").style.backgroundColor=p.value:f.$el.querySelector(".updateMarkPrompt .dom .colorRect").style.backgroundColor=p.value}));var m=qd.confirm({title:"请再次确认:",id:"confirm-mark"+t,width:356,height:87,closeOnEsc:!1,closeButton:!1,iconClass:!1,msg:"是否要删除此标签?"});m.setPosition({left:(qd.viewport.offsetWidth-m.$options.width)/2,top:5}),m.confirmHide(),xh.addEventListener(n.querySelector("#mark"+t),"click",(function(){i.mark?(s.windowHide(),o.viewerImpl.modelManager.removeEventListener(Rc.ON_CLICK_PICK,l),f.promptHide(),u.style.display="none"):(document.getElementById("mark"+t).querySelector(".yj-icon").className="yj-icon label-icon active",i.mark=!i.mark,s.windowShow(),o.viewerImpl.modelManager.addEventListener(Rc.ON_CLICK_PICK,l))}));for(var C=s.$el.querySelectorAll(".lobibox .lobibox-body .showColorModal"),v=0;C.length>v;v+=1)C[v].addEventListener("click",(function(){u.style.display="none"===u.style.display?"block":"none"}));for(var I=f.$el.querySelectorAll(".lobibox .lobibox-body .showColorModal"),E=0;I.length>E;E+=1)I[E].addEventListener("click",(function(){u.style.display="none"===u.style.display?"block":"none"}));for(var B=s.$el.querySelectorAll(".lobibox .lobibox-body .picture .chosed-pic"),x=0;B.length>x;x+=1)B[x].addEventListener("click",(function(){var A=this.parentElement.lastChild;A.style.display="none"===A.style.display?"block":"none"}));for(var S=s.$el.querySelectorAll(".lobibox .lobibox-body .picture .file-choose span"),w=0;S.length>w;w+=1)S[w].addEventListener("click",(function(){this.parentElement.querySelector("input").click()}));for(var M=s.$el.querySelectorAll(".lobibox .lobibox-body .picture .pic-list li"),b=0;M.length>b;b+=1)M[b].addEventListener("click",(function(){var A=this.parentElement.parentElement.querySelector(".chosed-pic"),e=this.querySelector("img").getAttribute("src");A.dataset.chosedUrl=e,A.querySelector("img").setAttribute("src",e),A.parentElement.lastChild.style.display="none"}));s.$el.querySelector(".mark .first-floor select").addEventListener("change",(function(){for(var A=this.value,e=s.$el.querySelectorAll(".mark .second-floor"),t=0;e.length>t;t+=1)e[t].style.display="none";s.$el.querySelector(".mark ."+A).style.display="block",u.style.display="none"})),s.$el.querySelector(".mark .third-floor .showList").addEventListener("click",(function(){var A=s.$el.querySelector(".mark .forth-floor");"none"===A.style.display?(A.style.display="block",this.innerHTML="隐藏标签列表"):(A.style.display="none",this.innerHTML="展示标签列表")})),s.$el.querySelector(".mark .third-floor .addMark").addEventListener("click",(function(){u.style.display="none";var A=s.$el.querySelector(".mark .first-floor select").value,e=[],t=null;if("dom"===A){var i=s.$el.querySelector(".mark .dom .title ").value;""===i&&(i="标签");var n=Kd.getColorArrayFromRGBA(s.$el.querySelector(".mark .dom .colorRect").style.backgroundColor),l=parseInt(s.$el.querySelector(".mark .dom .text-tab ").value,0),c=null;if(l>10)return void jd("warning","备注栏不可超过10个",5e3);if(l>0){c=document.createElement("div");for(var h=0;l>h;h+=1)c.innerHTML+=''}var d=s.$el.querySelector(".mark .dom .component ").value;if(e[0]=Number(s.$el.querySelector(".mark .dom .startX ").value),e[1]=Number(s.$el.querySelector(".mark .dom .startY ").value),e[2]=Number(s.$el.querySelector(".mark .dom .startZ ").value),isNaN(e[0])||isNaN(e[1])||isNaN(e[2]))return void jd("warning","标签位置错误,无法新建标签",5e3);var p=o.getScreenCoordFromSceneCoord(e);t={title:i,color:n,startPosition:[e[0],e[1],e[2]],endPosition:[p[0]+100,p[1]-200],domElement:c,componentId:d}}else if("sprite"===A){try{var g=s.$el.querySelector(".mark .sprite .chosed-pic").dataset.chosedUrl}catch(A){return void jd("warning","未选择标签图标",5e3)}var f=Number(s.$el.querySelector(".mark .sprite .size ").value);f&&f>=0||(f=1);var m=s.$el.querySelector(".mark .sprite .component ").value;if(m&&(a.imageSize=r(m)),e[0]=Number(s.$el.querySelector(".mark .sprite .startX ").value),e[1]=Number(s.$el.querySelector(".mark .sprite .startY ").value),e[2]=Number(s.$el.querySelector(".mark .sprite .startZ ").value),isNaN(e[0])||isNaN(e[1])||isNaN(e[2]))return void jd("warning","标签位置错误,无法新建标签",5e3);t={url:g,scale:f,useImageSize:!1,width:a.imageSize,height:a.imageSize,position:e,alwaysVisible:!0,componentId:m}}else{try{g=s.$el.querySelector(".mark .plane .chosed-pic").dataset.chosedUrl}catch(A){return void a.message("warning","未选择标签图标",5e3)}var C=Number(s.$el.querySelector(".mark .plane .size ").value);C&&C>=0||(C=1);var y=s.$el.querySelector(".mark .plane .component ").value;if(y&&(a.imageSize=r(y)),e[0]=Number(s.$el.querySelector(".mark .plane .startX ").value),e[1]=Number(s.$el.querySelector(".mark .plane .startY ").value),e[2]=Number(s.$el.querySelector(".mark .plane .startZ ").value),isNaN(e[0])||isNaN(e[1])||isNaN(e[2]))return void a.message("warning","标签位置错误,无法新建标签",5e3);var v=s.$el.querySelector(".mark .plane .face").value;v||(v="x"),t={URL:g,scale:C,useImageSize:!1,width:a.imageSize,height:a.imageSize,position:e,alwaysVisible:!0,componentId:y,transparent:!0,face:v,useFaceMatrix:!0}}"function"==typeof a.addListener?a.addListener(A,t,(function(e,i){e&&a.add(A,i||t)})):a.add(A,t)})),s.$el.querySelector(".forth-floor").addEventListener("click",(function(A){switch(A.target.className){case"deleteMark":a.markDelete(A);break;case"updateMark":a.markUpdate(A);break;case"info":if("聚焦"===A.target.innerText){var e="",i=xh.closest(A.target,"tr"),n=i.querySelector(".id").innerHTML,r=xh.closest(i,"table").className;if("dom"===r?e=c.marks[n].componentId:"sprite"===r?e=h.marks[n].componentId:"plane"===r&&(e=d.marks[n].componentId),!e)return void jd("warning","该标签没有关联构件!",5e3);for(var s=document.querySelectorAll("#markWindow"+t+" .forth-floor .info"),l=0;s.length>l;l+=1)s[l].innerText="聚焦";A.target.innerText="失焦",function(A){var e=o.viewerImpl.getBoundingBoxByIds([A]);if(e.min.x!==-1/0&&e.min.x!==1/0){var t=e.getCenter(new y),i=o.viewerImpl.camera.getWorldDirection(),n=e.max.distanceTo(e.min),r=new y;r.copy(i),r.setLength(n);var a=new y;a.subVectors(t,r),o.flyTo({position:a,target:t,up:o.viewerImpl.camera.up},(function(){o.viewerImpl.cameraControl.dispatchEvent(Rc.ON_CAMERA_CHANGE)})),o.highlightComponentsByKey([A]),o.closeTransparentComponentsByKey([A]),o.transparentOtherComponentsByKey([A])}else jd("warning","该构件不存在!",5e3)}(e)}else A.target.innerText="聚焦",o.clearTransparentList(),o.clearHighlightList();break;default:if(xh.hasClass(A.target,"hideOrShow")){var p=xh.closest(A.target,"tr"),g=p.querySelector(".id").innerHTML,u=xh.closest(p,"table").className,f=null;f="dom"===u?c:"sprite"===u?h:c,xh.hasClass(A.target,"hideMark")?(f.hide(g),A.target.classList.remove("hideMark"),A.target.classList.add("showMark"),A.target.innerHTML="显示"):(f.show(g),A.target.classList.remove("showMark"),A.target.classList.add("hideMark"),A.target.innerHTML="隐藏")}}})),s.setPosition({left:"",right:5,top:60}),s.windowHide(),this.add=function(A,e){switch(A){case"dom":this.addDOMMark(e);break;case"sprite":this.addSpriteMark(e);break;case"plane":this.addPlaneMark(e)}},this.addDOMMark=function(A){c.add(A,(function(e){s.$el.querySelector(".mark .forth-floor .dom tbody").innerHTML+="'+e+''+A.title+''}))},this.addSpriteMark=function(A){h.add(A,(function(e){s.$el.querySelector(".mark .forth-floor .sprite tbody").innerHTML+="'+e+''}))},this.addPlaneMark=function(A){d.add(A,(function(e){s.$el.querySelector(".mark .forth-floor .plane tbody").innerHTML+="'+e+''}))},this.markDelete=function(A){var e=xh.closest(A.target,"tr"),i=e.querySelector(".id").innerHTML,o=xh.closest(e,"table").className;m.confirmShow();var n="";"dom"===o?n="文字标签":"sprite"===o?n="精灵标签":"plane"===o&&(n="平面标签"),document.querySelector("#confirm-mark"+t+" .lobibox-body-text").innerHTML="是否要删除编号为["+i+"]的"+n+"?",document.querySelector("#confirm-mark"+t+" .lobibox-btn-yes").onclick=function(){"function"==typeof a.deleteListener?a.deleteListener(o,i,(function(A){A&&a.delete(o,i)})):a.delete(o,i),m.confirmHide()},document.querySelector("#confirm-mark"+t+" .lobibox-btn-no").onclick=function(){m.confirmHide()}},this.delete=function(A,e){var t=null;if("dom"===A){if(t=c){t.remove(e);var i=s.$el.querySelector(".mark .forth-floor .dom tbody"),o=document.querySelector("tr[markId='"+e+"']");i.removeChild(o)}}else if("sprite"===A){if(t=h){t.remove(e);var n=s.$el.querySelector(".mark .forth-floor .sprite tbody"),r=document.querySelector("tr[markId='"+e+"']");n.removeChild(r)}}else if("plane"===A&&(t=d)){t.remove(e);var a=s.$el.querySelector(".mark .forth-floor .plane tbody"),l=document.querySelector("tr[markId='"+e+"']");a.removeChild(l)}},this.markUpdate=function(A){var e=xh.closest(A.target,"tr"),i=e.querySelector(".id").innerHTML,o=xh.closest(e,"table").className;f.promptShow();var n=document.getElementById("updateMark"+t);if(n.style.cssText+="z-index:"+(Number(document.getElementById("markWindow"+t).style.zIndex)+1),"dom"===o){for(var l=n.querySelectorAll(".sprite , .plane"),p=0;l.length>p;p+=1)l[p].style.display="none";n.querySelector(".dom ").style.display="block",n.querySelector(".dom .markId").value=i,n.querySelector(".dom .title").value=c.marks[i].title,n.querySelector(".dom .startX").value=c.marks[i].startPosition[0],n.querySelector(".dom .startY").value=c.marks[i].startPosition[1],n.querySelector(".dom .startZ").value=c.marks[i].startPosition[2],n.querySelector(".dom .component").value=c.marks[i].componentId,c.marks[i].domElement&&(n.querySelector(".dom .text-tab").value=c.marks[i].domElement.querySelectorAll("input").length),n.querySelector(".dom .colorRect").style.backgroundColor=Kd.getRGBAFromColorArray(c.marks[i].color),n.querySelector(".lobibox-btn-default").onclick=function(){var A=n.querySelector(".dom .title").value;""===A&&(A="标签");var e=Kd.getColorArrayFromRGBA(n.querySelector(".dom .colorRect").style.backgroundColor),t=[];if(t[0]=n.querySelector(".dom .startX").value,t[1]=n.querySelector(".dom .startY").value,t[2]=n.querySelector(".dom .startZ").value,isNaN(t[0])||isNaN(t[1])||isNaN(t[2]))jd("warning","标签位置无效,无法更新标签",5e3);else{var r=parseInt(n.querySelector(".dom .text-tab ").value,0),s=null;if(100){s=document.createElement("div");for(var l=0;r>l;l+=1)s.innerHTML+=''}var c={title:A,color:e,startPosition:t,domElement:s,componentId:n.querySelector(".dom .component").value};"function"==typeof a.updateListener?a.updateListener(o,i,c,(function(A,e){A&&a.update(o,i,e||c)})):a.update(o,i,c),f.promptHide(),u.style.display="none"}}}}else if("sprite"===o){for(var g=n.querySelectorAll(".dom , .plane"),m=0;g.length>m;m+=1)g[m].style.display="none";n.querySelector(".sprite ").style.display="block",n.querySelector(".sprite .markId").value=i,n.querySelector(".sprite .picture .chosed-pic").dataset.chosedUrl=h.marks[i].url,n.querySelector(".sprite .picture .chosed-pic img").setAttribute("src",h.marks[i].url),n.querySelector(".sprite .size").value=h.marks[i].scale,n.querySelector(".sprite .startX").value=h.marks[i].position[0],n.querySelector(".sprite .startY").value=h.marks[i].position[1],n.querySelector(".sprite .startZ").value=h.marks[i].position[2],n.querySelector(".sprite .component").value=h.marks[i].componentId,n.querySelector(".lobibox-btn-default").onclick=function(){try{var A=n.querySelector(".sprite .picture .chosed-pic").dataset.chosedUrl}catch(A){return void jd("warning","未选择标签图标",5e3)}var e=n.querySelector(".sprite .size").value;e&&e>=0||(e=1);var t=[];if(t[0]=Number(n.querySelector(".sprite .startX ").value),t[1]=Number(n.querySelector(".sprite .startY ").value),t[2]=Number(n.querySelector(" .sprite .startZ ").value),isNaN(t[0])||isNaN(t[1])||isNaN(t[2]))jd("warning","标签位置无效,无法更新标签",5e3);else{var s=n.querySelector(".sprite .component").value;s&&(a.imageSize=r(s));var l={url:A,scale:e,position:t,useImageSize:!1,width:a.imageSize,height:a.imageSize,alwaysVisible:!0,componentId:s};"function"==typeof a.updateListener?a.updateListener(o,i,l,(function(A,e){A&&a.update(o,i,e||l)})):a.update(o,i,l),f.promptHide()}}}else if("plane"===o){for(var C=n.querySelectorAll(".dom , .sprite"),y=0;C.length>y;y+=1)C[y].style.display="none";n.querySelector(".plane ").style.display="block",n.querySelector(".plane .markId").value=i,n.querySelector(".plane .picture .chosed-pic").dataset.chosedUrl=d.marks[i].URL,n.querySelector(".plane .picture .chosed-pic img").setAttribute("src",d.marks[i].URL),n.querySelector(".plane .size").value=d.marks[i].scale,n.querySelector(".plane .startX").value=d.marks[i].position[0],n.querySelector(".plane .startY").value=d.marks[i].position[1],n.querySelector(".plane .startZ").value=d.marks[i].position[2],n.querySelector(".plane .component").value=d.marks[i].componentId,n.querySelector(".plane .face").value=d.marks[i].face,n.querySelector(".lobibox-btn-default").onclick=function(){try{var A=n.querySelector(".plane .picture .chosed-pic").dataset.chosedUrl}catch(A){return void jd("warning","未选择标签图标",5e3)}var e=n.querySelector(".plane .size").value;e&&e>=0||(e=1);var t=[];if(t[0]=Number(n.querySelector(".plane .startX ").value),t[1]=Number(n.querySelector(".plane .startY ").value),t[2]=Number(n.querySelector(" .plane .startZ ").value),isNaN(t[0])||isNaN(t[1])||isNaN(t[2]))jd("warning","标签位置无效,无法更新标签",5e3);else{var l=n.querySelector(".plane .component").value;l&&(a.imageSize=r(l));var c=s.$el.querySelector(".updateMarkPrompt .plane .face").value;c||(c="x");var h={URL:A,scale:e,position:t,useImageSize:!1,width:a.imageSize,height:a.imageSize,alwaysVisible:!0,face:c,componentId:l};"function"==typeof a.updateListener?a.updateListener(o,i,h,(function(A,e){A&&a.update(o,i,e||h)})):a.update(o,i,h),f.promptHide()}}}n.querySelector(".lobibox-btn-cancel").onclick=function(){f.promptHide(),u.style.display="none"}},this.update=function(A,e,t){"dom"===A?a.updateDOMMark(e,t):"sprite"===A?a.updateSpriteMark(e,t):"plane"===A&&a.updatePlaneMark(e,t)},this.hide=function(A,e){var t=document.querySelector("tr[markId='"+e+"']");if(t){var i=t.querySelector(".hideOrShow");i.classList.remove("hideMark"),i.classList.add("showMark"),i.innerHTML="显示"}"dom"===A?c.hide(e):"sprite"===A&&h.hide(e)},this.show=function(A,e){var t=document.querySelector("tr[markId='"+e+"']");if(t){var i=t.querySelector(".hideOrShow");i.classList.remove("showMark"),i.classList.add("hideMark"),i.innerHTML="显示"}"dom"===A?c.show(e):"sprite"===A&&h.show(e)},this.updateDOMMark=function(A,e){var t=document.querySelector("tr[markId='"+A+"']");t&&(t.querySelector(".markTitle").innerHTML=e.title,t.querySelector(".markTitle").setAttribute("title",e.title)),c.updateMark(A,e)},this.updateSpriteMark=function(A,e){var t=document.querySelector("tr[markId='"+A+"']");t&&t.querySelector(".markImg").setAttribute("src",e.url),h.updateMark(A,e)},this.updatePlaneMark=function(A,e){var t=document.querySelector("tr[markId='"+A+"']");t&&t.querySelector(".markImg").setAttribute("src",e.URL),d.updateMark(A,e)},this.getDOMMark=function(){return c},this.getSpriteMark=function(){return h},this.getPlaneMark=function(){return d}},Yd=function(A,e,t,i,o){var n=A.toolId,r=A.Flag,s=A.viewer;function l(A,e){A.length>e&&s.flyTo(A[e],(function(){l(A,e+=1)}))}o.querySelector("#collision"+n).addEventListener("click",(function(A){"walk"===s.viewerImpl.controlManager.control.name&&(vc.EnableHitDetection=!vc.EnableHitDetection),s.viewerImpl.controlManager.setFocuse()})),o.querySelector("#gravity"+n).addEventListener("click",(function(){"walk"===s.viewerImpl.controlManager.control.name&&(vc.WalkingWithGravity=!vc.WalkingWithGravity),s.viewerImpl.controlManager.setFocuse()}));var c={},h=[],d=qd.window({title:"漫游路径",id:"pathRoam"+n,width:356,height:848,closeOnEsc:!1,closeButton:!0,afterWindowHide:function(){var A=document.getElementById("roam"+n);r.roam=!1,A&&(A.style.backgroundColor="",A.querySelector(".yj-icon").className="yj-icon roam-icon")},content:'
路径列表:
'});d.$el.addClass("pathRoam");var p=null;t.addEventListener("click",(function(){if(r.roam)return p&&p.destroy(),document.getElementById("instructions"+n)&&s.viewerImpl.domElement.removeChild(document.getElementById("instructions"+n)),o.style.display="none",this.style.backgroundColor="",this.querySelector(".yj-icon").className="yj-icon roam-icon",r.roam=!1,s.viewerImpl.controlManager.setControlMode(s.viewerImpl,"pick"),void(d&&d.windowHide&&d.windowHide());r.measurement&&(document.getElementById("measurement"+n).style.backgroundColor="",document.getElementById("measurement"+n).querySelector(".yj-icon").className="yj-icon measurement-icon",jd("info","漫游模式下将关闭测量功能",2e3),e.exitMeasure&&e.exitMeasure()),r.sectioning&&(document.getElementById("sectioning"+n).style.backgroundColor="",document.getElementById("sectioning"+n).querySelector(".yj-icon").className="yj-icon sectioning-icon",jd("info","漫游模式下将关闭剖切功能",2e3),s.viewerImpl.controlManager.disableTool(Pc.CLIP_BY_BOX),r.sectioning=!1),r.multiple&&(document.getElementById("multiple"+n).style.backgroundColor="",document.getElementById("multiple"+n).querySelector(".yj-icon").className="yj-icon multiple-icon",jd("info","漫游模式下将关闭框选功能",2e3),s.viewerImpl.controlManager.disableTool(Pc.PICK_BY_RECT),r.multiple=!1),s.render(),this.style.backgroundColor="#1f89de",this.querySelector(".yj-icon").className="yj-icon roam-icon active",r.roam=!r.roam,p=qd.prompt({title:"漫游",id:"roamChoose"+n,width:356,height:87,closeOnEsc:!1,closeButton:!1,afterWindowHide:function(){var A=document.getElementById("roam"+n);r.roam=!1,A&&(A.style.backgroundColor=""),p.destroy(),p=null},buttons:{ok:{class:"lobibox-btn lobibox-btn-default",text:"自由漫游",closeOnClick:!0},cancel:{class:"lobibox-btn lobibox-btn-cancel",text:"路径漫游",closeOnClick:!0}}});var A=document.getElementById("roamChoose"+n);A.querySelector(".lobibox-body").style.display="none",A.querySelector(".lobibox-btn-default").addEventListener("click",(function(){p.destroy(),p=null;var A=document.createElement("div");A.id="instructions"+n,A.style.cssText+="position:absolute;left:0;top:0;width:100%;height:100%;background:rgba(80,80,80,0.3);margin:0;padding:0;",A.innerHTML='
点击进入沉浸式浏览
移动方向
高度
视角
速度
'+A+'',h=[],d.$el.querySelector(".path-roaming .second-floor .viewList .name").value="",d.$el.querySelector(".path-roaming .second-floor .viewList table tbody").innerHTML=""}})),d.$el.querySelector(".path-roaming .second-floor .saveView").addEventListener("click",(function(){var A={};A.position=s.viewerImpl.camera.position.clone(),A.target=s.viewerImpl.camera.target.clone(),A.up={x:0,y:0,z:1},h.push(A);var e=h.length;d.$el.querySelector(".path-roaming .second-floor .viewList table tbody").innerHTML+="视角'+e+''}));var g=qd.confirm({title:"请再次确认:",id:"confirm-path"+n,width:356,height:87,closeOnEsc:!1,closeButton:!1,iconClass:!1,msg:"是否要删除此视角?"});return g.setPosition({left:(qd.viewport.offsetWidth-g.$options.width)/2,top:5}),g.confirmHide(),d.$el.addEventListener("click",(function(A){if("deleteView"===A.target.className){var e=(r=xh.closest(A.target,"tr")).dataset.index;g.confirmShow(),document.querySelector("#confirm-path"+n+" .lobibox-body-text").innerHTML="是否要删除编号为["+(Number(e)+1)+"]的视角?",document.querySelector("#confirm-path"+n+" .lobibox-btn-yes").onclick=function(){h.splice(e,1),d.$el.querySelector(".path-roaming .second-floor .viewList tbody").removeChild(r);for(var A=d.$el.querySelectorAll(".path-roaming .second-floor .viewList tbody tr"),t=0;A.length>t;t+=1)A[t].dataset.index=t,A[t].querySelector(".name").innerHTML="视角"+(t+1);g.confirmHide()},document.querySelector("#confirm-path"+n+" .lobibox-btn-no").onclick=function(){g.confirmHide()}}else if("updateView"===A.target.className){var t=xh.closest(A.target,"tr").dataset.index;g.confirmShow(),document.querySelector("#confirm-path"+n+" .lobibox-body-text").innerHTML="是否要修改编号为["+(Number(t)+1)+"]的视角为当前视角?",document.querySelector("#confirm-path"+n+" .lobibox-btn-yes").onclick=function(){var A={};A.position=s.viewerImpl.camera.position.clone(),A.target=s.viewerImpl.camera.target.clone(),A.up={x:0,y:0,z:1},h[t]=A,g.confirmHide()},document.querySelector("#confirm-path"+n+" .lobibox-btn-no").onclick=function(){g.confirmHide()}}else if("checkView"===A.target.className){var i=xh.closest(A.target,"tr").dataset.index;s.flyTo(h[i])}else if("roamPath"===A.target.className){var o=xh.closest(A.target,"tr").dataset.key;l(c[o].camera,0)}else if("deletePath"===A.target.className){var r,a=(r=xh.closest(A.target,"tr")).dataset.key;g.confirmShow(),document.querySelector("#confirm-path"+n+" .lobibox-body-text").innerHTML="是否要删除名称为["+c[a].name+"]的路径?",document.querySelector("#confirm-path"+n+" .lobibox-btn-yes").onclick=function(){d.$el.querySelector(".path-roaming .pathList tbody").removeChild(r),delete c[a],g.confirmHide()},document.querySelector("#confirm-path"+n+" .lobibox-btn-no").onclick=function(){g.confirmHide()}}})),d},Wd=function(A,e,t){var i=this;this.lobibox=new bh,A?(this.element=document.getElementById(A),this.lobibox.viewport=document.querySelector("#"+A)):this.element=document,this.change=!1;var o=function(){this.storage=null};o.prototype={init:function(){this.storage=function(){var A=!1;return"object"===lc(window.localStorage)?A=localStorage:"object"===lc(window.globalStorage)&&(A=window.globalStorage),A}()},getStorage:function(){return this.storage},save:function(A,e){var t=this.storage,i=!1;return!1!==t&&(i=t.setItem(A,e)),i},load:function(A){var e=this.storage,t=!1;return!1!==e&&(t=e.getItem(A)),t}},i.model=i.model||{},i.model.StorageModel=o;!function(){var A,e,t,o,n,r,a;(n=function(){this.name="Mouse",this.option={},this.mouseShape=null,this.init=function(A,e){this.setOption({lineWidth:1,strokeStyle:A.strokeStyle,radius:Math.ceil(A.lineWidth/2),opacity:100}),this.setPoints(e),this.setMouseShape(new i.model.shapeModel.CircleStroke),this.initMouseShape(),this.setImage()},this.paint=function(A){this.getMouseShape().paint(A)}}).prototype={getName:function(){return this.name},setOption:function(A){return"object"===lc(A)?(uh.extend(!0,this.option,A),this.getOption()):null},getOption:function(){return uh.extend(!0,{},this.option)},getMouseShape:function(){return this.mouseShape},setMouseShape:function(A){return this.mouseShape=A,A},setPoints:function(A){this.setOption(A)},initMouseShape:function(){this.getMouseShape().init(this.getOption())},setImage:function(){var A=this.getName();return[].map.call(document.querySelectorAll("#canvas-mouse"),(function(e,t){e.setAttribute("data-mouse",A)})),!0}},(A=function(){this.name="Cross",this.init=function(A,e){var t=this.getName();this.setOption({length:10,lineHeight:1,opacity:100,strokeStyle:A.strokeStyle,lineJoin:A.lineJoin,lineCap:A.lineCap,shadowOffsetX:A.shadowOffsetX,shadowOffsetY:A.shadowOffsetY,shadowBlur:A.shadowBlur,shadowColor:A.shadowColor}),this.setPoints(e),this.setMouseShape(new i.model.shapeModel[t]),this.initMouseShape(),this.setImage()},this.paint=function(A){this.getMouseShape().paint(A)}}).prototype=new n,(r=function(){this.name="Pen"}).prototype=new n,(e=function(){this.name="Eraser",this.init=function(A,e){this.setOption({strokeStyle:"#000",opacity:A.opacity,radius:Math.ceil(A.lineWidth/2,10),lineJoin:A.lineJoin,lineCap:A.lineCap,shadowOffsetX:A.shadowOffsetX,shadowOffsetY:A.shadowOffsetY,shadowBlur:A.shadowBlur,shadowColor:A.shadowColor}),this.setPoints(e),this.setMouseShape(new i.model.shapeModel.CircleStroke),this.initMouseShape(),this.setImage()},this.paint=function(A){this.getMouseShape().paint(A)}}).prototype=new n,(a=function(){this.name="Text",this.init=function(A,e){this.setImage()},this.paint=function(A){}}).prototype=new n,(o=function(){this.name="FloodFill",this.init=function(A,e){this.setOption({strokeStyle:"#000",opacity:90,radius:Math.ceil(A.lineWidth/2,10)}),this.setPoints(e),this.setMouseShape(new i.model.shapeModel.CircleStroke),this.initMouseShape(),this.setImage()},this.paint=function(A){this.getMouseShape().paint(A)}}).prototype=new n,(t=function(){this.name="EyeDropper",this.init=function(A,e){this.setOption({strokeStyle:"#000",opacity:90,radius:Math.ceil(A.lineWidth/2,10)}),this.setPoints(e),this.setMouseShape(new i.model.shapeModel.CircleStroke),this.initMouseShape(),this.setImage()},this.paint=function(A){this.getMouseShape().paint(A)}}).prototype=new n,i.model=i.model||{},i.model.mouseModel=i.model.mouseModel||{},i.model.mouseModel.Mouse=n,i.model.mouseModel.Cross=A,i.model.mouseModel.Pen=r,i.model.mouseModel.Eraser=e,i.model.mouseModel.Text=a,i.model.mouseModel.FloodFill=o,i.model.mouseModel.EyeDropper=t}();var n={list:[],add:function(A){return this.list.push({x:Math.round(A.x),y:Math.round(A.y)}),this.list},getStart:function(){return this.list[0]},getEnd:function(){return this.list[this.list.length-1]},getList:function(){return this.list},init:function(){return this.list=[],this.list}};i.model=i.model||{},i.model.PointList=n;(function(){var A,e,t,o,n,r,a,s,l,c,h,d,p,g,u,f,m,C,y,v;function I(A,e,t,i,o){var n=i/.75/2,r=o/2;return A.beginPath(),A.moveTo(e,t-r),A.bezierCurveTo(e+n,t-r,e+n,t+r,e,t+r),A.bezierCurveTo(e-n,t+r,e-n,t-r,e,t-r),A.closePath(),A}(m=function(){this.name="Shape",this.option={}}).prototype={init:function(A){this.initOption(A)},getName:function(){return this.name},initOption:function(A){this.option={},this.setOption(A)},setOption:function(A){return uh.extend(!0,this.option,A),this.option},getOption:function(){return this.option},repaint:function(A){this.paint(A)},setAttributes:function(A){}},(c=function(){this.name="FillStroke",this.setAttributes=function(A){var e=this.getOption();A.strokeStyle=e.strokeStyle,A.fillStyle=e.fillStyle,A.lineWidth=e.lineWidth,A.globalAlpha=e.opacity/100,A.lineJoin=e.lineJoin,A.lineCap=e.lineCap,A.shadowOffsetX=e.shadowOffsetX,A.shadowOffsetY=e.shadowOffsetY,A.shadowBlur=e.shadowBlur,A.shadowColor=e.shadowColor}}).prototype=new m,(p=function(){this.name="Line",this.paint=function(A){var e=this.getOption();A.save(),this.setAttributes(A),A.beginPath(),A.moveTo(e.startX,e.startY),A.lineTo(e.endX,e.endY),A.closePath(),A.stroke(),A.restore()}}).prototype=new c,(o=function(){this.name="CurveClosed",this.paint=function(A){var e=this.getOption().list,t=e[0],i=e.length,o=0;for(A.save(),this.setAttributes(A),A.beginPath(),A.moveTo(t.x,t.y);i>o;o+=1)A.lineTo(e[o].x,e[o].y);A.closePath(),A.fill(),A.stroke(),A.restore()}}).prototype=new c,(u=function(){this.name="Rect",this.paint=function(A){var e=this.getOption();A.save(),this.setAttributes(A),A.fillRect(e.left,e.top,e.width,e.height),A.strokeRect(e.left,e.top,e.width,e.height),A.restore()}}).prototype=new c,(A=function(){this.name="Circle",this.paint=function(A){var e=this.getOption();A.save(),this.setAttributes(A),A.beginPath(),A.arc(e.x,e.y,e.radius,0,2*Math.PI,!0),A.closePath(),A.fill(),A.stroke(),A.restore()}}).prototype=new c,(r=function(){this.name="Ellipes",this.paint=function(A){var e=this.getOption(),t=e.x,i=e.y,o=e.width,n=e.height;A.save(),this.setAttributes(A),I(A,t,i,o,n),A.fill(),A.stroke(),A.restore()}}).prototype=new c,(C=function(){this.name="Stroke",this.setAttributes=function(A){var e=this.getOption();A.strokeStyle=e.strokeStyle,A.lineWidth=e.lineWidth,A.globalAlpha=e.opacity/100,A.lineJoin=e.lineJoin,A.lineCap=e.lineCap,A.shadowOffsetX=e.shadowOffsetX,A.shadowOffsetY=e.shadowOffsetY,A.shadowBlur=e.shadowBlur,A.shadowColor=e.shadowColor}}).prototype=new m,(g=function(){this.name="Pen",this.paint=function(A){var e=this.getOption().list,t=e[0],i=e.length,o=0;for(A.save(),this.setAttributes(A),A.beginPath(),A.moveTo(t.x,t.y);i>o;o+=1)A.lineTo(e[o].x,e[o].y);A.stroke(),A.restore()}}).prototype=new C,(n=function(){this.name="CurveClosedStroke",this.paint=function(A){var e=this.getOption().list,t=e[0],i=e.length,o=0;for(A.save(),this.setAttributes(A),A.beginPath(),A.moveTo(t.x,t.y);i>o;o+=1)A.lineTo(e[o].x,e[o].y);A.closePath(),A.stroke(),A.restore()}}).prototype=new C,(f=function(){this.name="RectStroke",this.paint=function(A){var e=this.getOption();A.save(),this.setAttributes(A),A.strokeRect(e.left,e.top,e.width,e.height),A.restore()}}).prototype=new C,(e=function(){this.name="CircleStroke",this.paint=function(A){var e=this.getOption();A.save(),this.setAttributes(A),A.beginPath(),A.arc(e.x,e.y,e.radius,0,2*Math.PI,!0),A.closePath(),A.stroke(),A.restore()}}).prototype=new C,(a=function(){this.name="EllipesStroke",this.paint=function(A){var e=this.getOption(),t=e.x,i=e.y,o=e.width,n=e.height;A.save(),this.setAttributes(A),I(A,t,i,o,n),A.stroke(),A.restore()}}).prototype=new C,(s=function(){this.name="Eraser",this.paint=function(A){var e=this.getOption(),t=e.list,i=t[0],o=t.length,n=0;for(A.save(),A.strokeStyle=e.color,A.lineWidth=e.lineWidth,A.shadowOffsetX=e.shadowOffsetX,A.shadowOffsetY=e.shadowOffsetY,A.shadowBlur=e.shadowBlur,A.shadowColor=e.shadowColor,A.lineJoin=e.lineJoin,A.lineCap=e.lineCap,A.globalAlpha=e.opacity/100,A.beginPath(),A.moveTo(i.x,i.y);o>n;n+=1)A.lineTo(t[n].x,t[n].y);A.stroke(),A.restore()}}).prototype=new m,(h=function(){this.name="FloodFill",this.paint=function(A){var e=this.getOption(),t=e.allowance,i=e.fillStyle?e.fillStyle:"rgba(0,0,0,1)",o=i.indexOf("(")+1,n=i.slice(o,-1).split(","),r={r:parseInt(n[0],10),g:parseInt(n[1],10),b:parseInt(n[2],10),a:Math.ceil(255*(n[3]||1))},a=e.x,s=e.y,l=e.width,c=e.height,h=A.getImageData(0,0,l,c),d=h.data,p=4*(l*s+a),g=d[p],u=d[p+1],f=d[p+2],m=d[p+3]/255,C=[{x:a,y:s}];try{!function(A,e){var o=null,n=null,r=null,h=null,p=null,y=null,v={};for(Bh.time("floodFill");0!==C.length;)y=C.pop(),v[o=4*(l*y.y+y.x)]=!0,r=d[o+1],h=d[o+2],p=d[o+3]/255,((n=d[o])!==e.r||r!==e.g||h!==e.b||255*p!==e.a)&&Math.abs(n-g)0&&C.push({x:y.x-1,y:y.y}),!v[o+4]&&l>a&&C.push({x:y.x+1,y:y.y}),!v[o-4*l]&&s>0&&C.push({x:y.x,y:y.y-1}),!v[o+4*l]&&c>s&&C.push({x:y.x,y:y.y+1}));Bh.timeEnd("floodFill"),y=null,o=null,n=null,r=null,h=null,p=null,i=null}(0,r)}catch(A){window.console.log(A.message)}d=null,A.save(),A.putImageData(h,0,0),A.restore()}}).prototype=new m,(l=function(){this.name="EyeDropper",this.paint=function(A){var e=this.getOption(),t=document.querySelector("#tool-wrap .tool .color"),i=A.getImageData(e.x,e.y,1,1).data,o="rgba(".concat(i[0],",",i[1],",",i[2],",",i[3]/255,")");t.value=o,xh.css(document.querySelector("#tool-wrap #colorOperatorDiv"),{"background-color":o})},this.repaint=function(){}}).prototype=new m,(t=function(){this.name="Cross",this.paint=function(A){var e=this.getOption(),t=e.x,i=e.y,o=e.length,n=t-o,r=i,a=t+o,s=i,l=t,c=i-o,h=t,d=i+o;A.save(),A.strokeStyle=e.strokeStyle,A.lineWidth=e.lineWidth,A.shadowOffsetX=e.shadowOffsetX,A.shadowOffsetY=e.shadowOffsetY,A.shadowBlur=e.shadowBlur,A.shadowColor=e.shadowColor,A.lineJoin=e.lineJoin,A.lineCap=e.lineCap,A.globalAlpha=e.opacity/100,A.beginPath(),A.moveTo(n,r),A.lineTo(a,s),A.moveTo(l,c),A.lineTo(h,d),A.closePath(),A.stroke(),A.restore()}}).prototype=new m,(y=function(){this.name="Text",this.setAttributes=function(A){var e=this.getOption();A.shadowOffsetX=e.shadowOffsetX,A.shadowOffsetY=e.shadowOffsetY,A.shadowBlur=e.shadowBlur,A.shadowColor=e.shadowColor,A.strokeStyle=e.strokeStyle,A.fillStyle=e.fillStyle,A.globalAlpha=e.opacity/100,A.font=e.italic+" "+e.bold+" "+e.size+"px "+e.family,A.lineWidth=e.border,A.textAlign=e.textAlign},this.paint=function(A){var e=this.getOption(),t=e.x,i=e.y,o=e.text;A.save(),this.setAttributes(A),"string"==typeof o&&(o=o.match(/[\n\r]/)?o.split(/\r\n|\r|\n/g):[o]);for(var n=0;o.length>n;n+=1)A.fillText(o[n],t,i+e.size*n),A.strokeText(o[n],t,i+e.size*n);A.restore()}}).prototype=new m,(v=function(){this.name="TextStroke",this.paint=function(A){var e=this.getOption(),t=e.x,i=e.y,o=e.text;A.save(),this.setAttributes(A),A.strokeText(o,t,i),A.restore()}}).prototype=new y,(d=function(){this.name="ImageShape",this.paint=function(A){var e=this.getOption(),t=e.x,i=e.y,o=e.src,n=e.width,r=e.height,a=new Image,s=this;a.src=o,a.onload=function(){A.save(),s.setAttributes(A),A.drawImage(a,t,i,n,r),A.restore()}}}).prototype=new m,(i=i||{}).model=i.model||{},i.model.shapeModel=i.model.shapeModel||{},i.model.shapeModel.Line=p,i.model.shapeModel.CurveClosed=o,i.model.shapeModel.Rect=u,i.model.shapeModel.Circle=A,i.model.shapeModel.Pen=g,i.model.shapeModel.CurveClosedStroke=n,i.model.shapeModel.RectStroke=f,i.model.shapeModel.CircleStroke=e,i.model.shapeModel.Eraser=s,i.model.shapeModel.FloodFill=h,i.model.shapeModel.EyeDropper=l,i.model.shapeModel.Cross=t,i.model.shapeModel.Ellipes=r,i.model.shapeModel.EllipesStroke=a,i.model.shapeModel.Text=y,i.model.shapeModel.TextStroke=v,i.model.shapeModel.ImageShape=d})(),function(){var A,e,t,o,n,r,a,s,l,c,h,d,p,g,u,f,m,C,y;(y=function(A){this.name="Tool",this.className="shape",this.mouse="Mouse",this.option={strokeStyle:"#000",fillStyle:"#000",lineWidth:1},void 0!==A&&uh.extend(!0,this.option,A)}).prototype={getClassName:function(){return this.className},getName:function(){return this.name},setOption:function(A){return"object"===lc(A)?(uh.extend(!0,this.option,A),this.getOption()):null},getOption:function(){return uh.extend(!0,{},this.option)},getMouse:function(){return this.mouse}},(u=function(){this.name="Shape",this.mouse="Cross",this.initAttributes=function(){for(var A=document.querySelector("#tool-shape-attribute-panel"),e=A.querySelector(".width").value,t=A.querySelector(".opacity").value,i=document.querySelector("#tool-wrap .tool .color").value,o=A.querySelector(".shadow-offsetx").value,n=A.querySelector(".shadow-offsety").value,r=A.querySelector(".shadow-blur").value,a=A.querySelector(".shadow-color").value,s=A.getElementsByTagName("radio"),l=void 0,c=void 0,h=0;s.length>h;h+=1)"line-join"===s[h].name&&(l=s[h].value),"line-cap"===s[h].name&&(c=s[h].value);return this.setOption({lineWidth:e,opacity:t,strokeStyle:i,fillStyle:i,lineJoin:l,lineCap:c,shadowOffsetX:o,shadowOffsetY:n,shadowBlur:r,shadowColor:a})}}).prototype=new y,(h=function(){this.name="Line",this.init=function(){this.initAttributes()},this.setPoint=function(A){var e=A.getStart(),t=A.getEnd();return this.setOption({startX:e.x,startY:e.y,endX:t.x,endY:t.y})}}).prototype=new u,(o=function(){this.name="CurveClosed",this.init=function(){this.initAttributes()},this.setPoint=function(A){var e=A.getList();return this.option.list=[],this.setOption({list:e})}}).prototype=new u,(p=function(){this.name="Rect",this.init=function(){this.initAttributes()},this.setPoint=function(A){var e=A.getStart(),t=A.getEnd(),i=e.x,o=e.y;return this.setOption({left:i,top:o,width:t.x-i,height:t.y-o})}}).prototype=new u,(A=function(){this.name="Circle",this.init=function(){this.initAttributes()},this.setPoint=function(A){var e=A.getStart(),t=A.getEnd(),i=(e.x+t.x)/2,o=(e.y+t.y)/2,n=Math.abs(Math.sqrt(Math.pow(e.x,2)+Math.pow(e.y,2))-Math.sqrt(Math.pow(t.x,2)+Math.pow(t.y,2)))/2;return this.setOption({x:i,y:o,radius:n})}}).prototype=new u,(r=function(){this.name="Ellipes",this.init=function(){this.initAttributes()},this.setPoint=function(A){var e=A.getStart(),t=A.getEnd(),i=(e.x+t.x)/2,o=(e.y+t.y)/2,n=Math.abs(e.x-t.x),r=Math.abs(e.y-t.y);return this.setOption({x:i,y:o,width:n,height:r})}}).prototype=new u,(f=function(){this.name="Stroke",this.mouse="Cross",this.initAttributes=function(){for(var A=document.querySelector("#tool-stroke-attribute-panel"),e=A.querySelector(".width").value,t=A.querySelector(".opacity").value,i=document.querySelector("#tool-wrap .tool .color").value,o=A.querySelector(".shadow-offsetx").value,n=A.querySelector(".shadow-offsety").value,r=A.querySelector(".shadow-blur").value,a=A.querySelector(".shadow-color").value,s=A.getElementsByTagName("radio"),l=void 0,c=void 0,h=0;s.length>h;h+=1)"line-join"===s[h].name&&(l=s[h].value),"line-cap"===s[h].name&&(c=s[h].value);return this.setOption({lineWidth:e,opacity:t,strokeStyle:i,lineJoin:l,lineCap:c,shadowOffsetX:o,shadowOffsetY:n,shadowBlur:r,shadowColor:a})}}).prototype=new y,(d=function(){this.name="Pen",this.mouse="Pen",this.init=function(){this.initAttributes()},this.setPoint=function(A){var e=A.getList();return this.option.list=[],this.setOption({list:e})}}).prototype=new f,(n=function(){this.name="CurveClosedStroke",this.mouse="Cross"}).prototype=new d,(g=function(){this.name="RectStroke",this.init=function(){this.initAttributes()},this.setPoint=function(A){var e=A.getStart(),t=A.getEnd(),i=e.x,o=e.y;return this.setOption({left:i,top:o,width:t.x-i,height:t.y-o})}}).prototype=new f,(e=function(){this.name="CircleStroke",this.init=function(){this.initAttributes()},this.setPoint=function(A){var e=A.getStart(),t=A.getEnd(),i=(e.x+t.x)/2,o=(e.y+t.y)/2,n=Math.abs(Math.sqrt(Math.pow(e.x,2)+Math.pow(e.y,2))-Math.sqrt(Math.pow(t.x,2)+Math.pow(t.y,2)))/2;return this.setOption({x:i,y:o,radius:n})}}).prototype=new f,(a=function(){this.name="EllipesStroke",this.init=function(){this.initAttributes()},this.setPoint=function(A){var e=A.getStart(),t=A.getEnd(),i=(e.x+t.x)/2,o=(e.y+t.y)/2,n=Math.abs(e.x-t.x),r=Math.abs(e.y-t.y);return this.setOption({x:i,y:o,width:n,height:r})}}).prototype=new f,(s=function(){this.name="Eraser",this.mouse="Eraser",this.init=function(){for(var A=document.querySelector("#tool-eraser-attribute-panel"),e=A.querySelector(".size")?A.querySelector(".size").value:void 0,t=A.querySelector(".opacity")?A.querySelector(".opacity").value:void 0,i=A.querySelector(".shadow-offsetx")?A.querySelector(".shadow-offsetx").value:void 0,o=A.querySelector(".shadow-offsety")?A.querySelector(".shadow-offsety").value:void 0,n=A.querySelector(".shadow-blur")?A.querySelector(".shadow-blur").value:void 0,r=A.querySelector(".shadow-color")?A.querySelector(".shadow-color").value:void 0,a=A.getElementsByTagName("radio"),s=void 0,l=void 0,c=0;a.length>c;c+=1)"line-join"===a[c].name&&(s=a[c].value),"line-cap"===a[c].name&&(l=a[c].value);return this.setOption({opacity:t,lineWidth:e,color:"#fff",shadowOffsetX:i,shadowOffsetY:o,shadowBlur:n,shadowColor:r,lineJoin:s,lineCap:l})},this.setPoint=function(A){var e=A.getList();return this.option.list=[],this.setOption({list:e})}}).prototype=new y,(c=function(){this.name="FloodFill",this.mouse="FloodFill",this.init=function(){var A=document.querySelector("#tool-flood-fill-attribute-panel"),e=document.querySelector("#tool-wrap .tool .color").value,t=parseInt(A.querySelector(".allowance").value,10),o=i.canvas.currentCanvasContainer.getCanvas(),n=o.getWidth(),r=o.getHeight();return this.setOption({fillStyle:e,width:n,height:r,allowance:t})},this.setPoint=function(A){var e=A.getEnd();return this.setOption({x:e.x,y:e.y})}}).prototype=new y,(l=function(){this.name="EyeDropper",this.mouse="EyeDropper",this.init=function(){return this.setOption({})},this.setPoint=function(A){var e=A.getEnd();return this.setOption({x:e.x,y:e.y})}}).prototype=new y,(t=function(){this.name="Cross",this.init=function(){return this.setOption({lineWidth:1,strokeStyle:"#000000",length:10})},this.setPoint=function(A){var e=A.getEnd();return this.setOption({x:e.x,y:e.y})}}).prototype=new y,(m=function(){this.name="Text",this.mouse="Text",this.init=function(){this.initAttributes()},this.initAttributes=function(){var A=document.querySelector("#tool-text-attribute-panel"),e=A.querySelector(".opacity").value,t=A.querySelector(".text").value,i=A.querySelector(".size").value,o=A.querySelector(".border").value,n=A.querySelector(".font").value,r=document.querySelector("#tool-wrap .tool .color").value,a=A.querySelector(".shadow-offsetx").value,s=A.querySelector(".shadow-offsety").value,l=A.querySelector(".shadow-blur").value,c=A.querySelector(".shadow-color").value,h="checked"===A.querySelector(".bold").getAttribute("checked")?"bold":"",d="checked"===A.querySelector(".italic").getAttribute("checked")?"italic":"";return this.setOption({strokeStyle:r,opacity:e,fillStyle:r,text:t,size:i,border:o,family:n,bold:h,italic:d,shadowOffsetX:a,shadowOffsetY:s,shadowBlur:l,shadowColor:c})},this.setPoint=function(A){var e=A.getStart(),t=A.getEnd(),i=e.x;return this.setOption({x:i,y:e.y,textAlign:i>t.x?"right":"left"})}}).prototype=new y,(C=function(){this.name="TextStroke"}).prototype=new m,(i=i||{}).model=i.model||{},i.model.toolModel=i.model.toolModel||{},i.model.toolModel.Line=h,i.model.toolModel.CurveClosed=o,i.model.toolModel.Rect=p,i.model.toolModel.Circle=A,i.model.toolModel.Pen=d,i.model.toolModel.CurveClosedStroke=n,i.model.toolModel.RectStroke=g,i.model.toolModel.CircleStroke=e,i.model.toolModel.Eraser=s,i.model.toolModel.FloodFill=c,i.model.toolModel.EyeDropper=l,i.model.toolModel.Cross=t,i.model.toolModel.Ellipes=r,i.model.toolModel.EllipesStroke=a,i.model.toolModel.Text=m,i.model.toolModel.TextStroke=C}();this.init=function(){i.initImgDiv(),i.initCanvas(),i.initTitleDiv(),i.initTool(),i.initTopTool(),i.Index.init(),i.Nav.init(),i.Tool.init(),i.Canvas.init()},this.initTool=function(){xh.append(i.element,'
\n
\n
\n
\n \n \n \n \n \n \n
\n
\n
\n 属性\n \n \n
\n
\n 阴影\n \n \n \n \n
\n
\n
\n
\n
\n \n \n \n \n \n \n
\n
\n
\n 属性\n \n \n
\n
\n 阴影\n \n \n \n \n
\n
\n
\n
\n
\n
\n
\n
\n 属性\n \n \n
\n
\n
\n
\n
\n
\n
\n
\n 属性\n \n
\n
\n
\n
\n
\n \n \n
\n
\n \n
\n 属性\n \n \n \n \n \n \n
\n
\n 阴影\n \n \n \n \n
\n
\n
\n
\n
\n
\n
\n \n \n \n \n
\n
\n \n
\n
\n
\n
\n \n \n \n
\n
\n \n
\n
\n
')},this.initCanvas=function(){xh.append(i.element,'
\n \n \n \n \n
')},this.initTopTool=function(){xh.append(i.element,'
\n
\n \n \n \n \n
\n
'),xh.addEventListener(document.querySelectorAll("#edit-exit"),"click",i.exit)},this.initTitleDiv=function(){xh.append(i.element,'
\n
文件编号-文件名-版本
\n
')},this.initImgDiv=function(){xh.append(i.element,' ');var A=document.querySelector("#myModal");xh.addEventListener(A.querySelector(".close"),"click",(function(){xh.addClass(A,"hide"),xh.remove(document.querySelector(".modal-backdrop"))})),xh.addEventListener(A.querySelector(".btn"),"click",(function(){xh.addClass(A,"hide"),xh.remove(document.querySelector(".modal-backdrop"))}));xh.append(i.element,' ');var e=document.querySelector("#image-modal");xh.addEventListener(e.querySelector(".close"),"click",(function(){xh.addClass(e,"hide"),xh.remove(document.querySelector(".modal-backdrop"))})),xh.addEventListener(e.querySelector(".but-cancel"),"click",(function(){xh.addClass(e,"hide"),xh.remove(document.querySelector(".modal-backdrop"))})),xh.addEventListener(e.querySelector(".btn-primary"),"click",(function(){xh.addClass(e,"hide"),xh.remove(document.querySelector(".modal-backdrop"))}))},this.setTitle=function(A){[].map.call(document.querySelectorAll(".titleText"),(function(e,t){e.textContent=A}))},this.getTitle=function(){return document.querySelector(".titleText").textContent},this.exit=function(){i.hide(),e.postilExit()},this.hide=function(){i.element.style.display="none"},this.show=function(){i.element.style.display="block"},this.clear=function(){i.canvas.mouseCanvasContainer.getCanvas().clear(),i.canvas.bufferCanvasContainer.getCanvas().clear(),i.canvas.currentCanvasContainer.getCanvas().clear(),i.canvas.negativeCanvasContainer.getCanvas().clear(),i.change=!1},this.updateSize=function(A,e){i.canvas.currentCanvasContainer.getCanvas().updateSize(A,e),i.canvas.bufferCanvasContainer.getCanvas().updateSize(A,e),i.canvas.mouseCanvasContainer.getCanvas().updateSize(A,e),i.canvas.negativeCanvasContainer.getCanvas().updateSize(A,e)},this.bindEvent=function(){},this.getCoordsWithinElement=function(A){var e=[0,0];if(A){for(var t=A.target,i=0,o=0;t.offsetParent;)i+=t.offsetLeft-t.scrollLeft,o+=t.offsetTop-t.scrollTop,t=t.offsetParent;e[0]=Math.round(A.pageX-i),e[1]=Math.round(A.pageY-o)}else A=window.event,e[0]=Math.round(A.x),e[0]=Math.round(A.y);return e},this.Index={init:function(){this.bindEvent()},bindEvent:function(){var A=i.element,e=null,t=null;xh.bind(A,"keydown",(function(A){A.ctrlKey&&90===A.keyCode&&(xh.simulateEvent(document.querySelector("#nav-edit-undo"),"click"),A.preventDefault())})),xh.bind(A,"keydown",(function(A){A.ctrlKey&&83===A.keyCode&&(xh.simulateEvent(document.querySelector("#nav-file-save"),"click"),A.preventDefault())})),xh.bind(A,"keydown",(function(A){A.ctrlKey&&68===A.keyCode&&(xh.simulateEvent(document.querySelector("#nav-edit-clear"),"click"),A.preventDefault())})),xh.bind(A,"keydown",(function(A){A.ctrlKey&&69===A.keyCode&&(xh.simulateEvent(document.querySelector("#nav-file-export"),"click"),A.preventDefault())})),xh.bind(document,"resize",(function(A){var e=i.canvas,t=e.currentCanvasContainer.getCanvas(),o=e.bufferCanvasContainer.getCanvas(),n=e.mouseCanvasContainer.getCanvas(),r=i.canvas.negativeCanvasContainer.getCanvas();t.updateSize(),o.updateSize(),n.updateSize(),r.updateSize()})),xh.delegate(i.element,"#negative-modal-file","change",(function(A){var t=A.target.files,i=new FileReader;i.readAsDataURL(t[0]),i.onload=function(){var A=document.querySelector("#negative-modal").querySelector("#negative-modal-view");e=i.result,A.setAttribute("src",i.result),xh.bind(A,"load",(function(){var A=document.querySelector("#negative-modal"),e=A.querySelector("#negative-modal-width"),t=A.querySelector("#negative-modal-height");e.value=parseInt(xh.getStyleValue(this,"width"),0),t.value=parseInt(xh.getStyleValue(this,"height"),0)}))}})),xh.delegate(i.element,"#negative-modal-ok","click",(function(A){var t=i.canvas.negativeCanvasContainer.getCanvas(),o=new i.model.shapeModel.ImageShape,n=document.querySelector("#negative-modal"),r=n.querySelector("#negative-modal-x").value,a=n.querySelector("#negative-modal-y").value,s=parseInt(n.querySelector("#negative-modal-width").value,0),l=parseInt(n.querySelector("#negative-modal-height").value,0);o.init({x:r,y:a,width:s,height:l,src:e}),t.paint(o)})),xh.delegate(i.element,"#image-modal-file","change",(function(A){var e=A.target.files,i=new FileReader;i.readAsDataURL(e[0]),i.onload=function(){var A=document.querySelector("#image-modal").querySelector("#image-modal-view");t=i.result,A.setAttribute("src",i.result),xh.bind(A,"load",(function(){var A=document.querySelector("#image-modal"),e=A.querySelector("#image-modal-width"),t=A.querySelector("#image-modal-height");e.value=parseInt(xh.getStyleValue(this,"width"),0),t.value=parseInt(xh.getStyleValue(this,"height"),0)}))}})),xh.delegate(i.element,"#image-modal-ok","click",(function(A){var e=i.canvas.currentCanvasContainer.getCanvas(),o=new i.model.shapeModel.ImageShape,n=document.querySelector("#image-modal"),r=n.querySelector("#image-modal-x").value,a=n.querySelector("#image-modal-y").value,s=parseInt(n.querySelector("#image-modal-width").value,0),l=parseInt(n.querySelector("#image-modal-height").value,0);o.init({x:r,y:a,width:s,height:l,src:t}),e.paint(o)}))}},this.Canvas={clickStatus:!1,pointList:Object.create(n),getPointList:function(){return this.pointList},getClickStatus:function(){return this.clickStatus},setClickStatus:function(A){return this.clickStatus=A=A||!1,A},init:function(){var A=document.querySelectorAll(".canvas-negative")[0],e=new s,t=Object.create(a),o=document.querySelectorAll(".canvas-layer")[0],n=new s,r=Object.create(a),l=document.querySelectorAll(".canvas-buffer")[0],c=new s,h=Object.create(a),d=document.querySelectorAll(".canvas-mouse")[0],p=new s,g=Object.create(a);e.init(A,"negativeCanvas"),t.init(e),i.canvas=i.canvas||{},i.canvas.negativeCanvasContainer=t,n.init(o,"currentCanvas"),r.init(n),i.canvas=i.canvas||{},i.canvas.currentCanvasContainer=r,c.init(l,"bufferCanvas"),h.init(c),i.canvas=i.canvas||{},i.canvas.bufferCanvasContainer=h,p.init(d,"mouseCanvas"),g.init(p),i.canvas=i.canvas||{},i.canvas.mouseCanvasContainer=g,this.bindEvent()},bindEvent:function(){var A=i.element,e=i.canvas.mouseCanvasContainer.getCanvas(),t=i.canvas.bufferCanvasContainer.getCanvas(),o=i.canvas.currentCanvasContainer.getCanvas(),n=e.getLeft(),r=e.getTop(),a=this,s=i.tool.currentToolContainer.getTool();xh.delegate(A,"#canvas-mouse","mousemove",(function(A){var o=i.getCoordsWithinElement(A),n=null,r=null,l="",c=null,h=null,d=a.getClickStatus(),p="",g=null,u=null;"shape"===s.getClassName()&&(n={x:o[0],y:o[1]},p=s.getMouse(),g=s.getOption(),(u=new i.model.mouseModel[p]).init(g,n),e.clear(),e.paint(u),d&&(l=s.getName(),(r=a.getPointList()).add(n),h=s.setPoint(r),"FloodFill"!==(c=new i.model.shapeModel[l]).getName()&&(c.init(h),t.clear(),t.paint(c))))})),xh.delegate(A,"#canvas-mouse","mousedown",(function(A){var e=i.getCoordsWithinElement(A),t={x:e[0],y:e[1]};a.getPointList();a.getPointList().init(),a.getPointList().add(t),a.setClickStatus(!0)})),xh.delegate(A,"#canvas-mouse","mouseup",(function(A){var e=i.getCoordsWithinElement(A),n={x:e[0],y:e[1]},r=a.getPointList(),l=s.getName(),c=null,h=null;"shape"===s.getClassName()&&(a.getPointList().add(n),a.setClickStatus(!1),c=new i.model.shapeModel[l],h=s.setPoint(r),c.init(h),o.paint(c),t.clear())})),xh.delegate(A,"#canvas-mouse","mouseleave",(function(A){e.clear()})),xh.delegate(A,"#canvas-mouse","mouseenter",(function(A){e.clear(),s=i.tool.currentToolContainer.getTool()})),document.getElementById("canvas-mouse").addEventListener("touchmove",(function(A){var o=null,l=null,c="",h=null,d=null,p=a.getClickStatus(),g="",u=null,f=null,m=s.getClassName(),C=A.changedTouches[0];A.preventDefault(),"shape"===m&&(o={x:C.pageX-n,y:C.pageY-r},g=s.getMouse(),u=s.getOption(),(f=new i.model.mouseModel[g]).init(u,o),e.clear(),e.paint(f),p&&(c=s.getName(),(l=a.getPointList()).add(o),d=s.setPoint(l),(h=new i.model.shapeModel[c]).init(d),t.clear(),t.paint(h)))}),!1),document.getElementById("canvas-mouse").addEventListener("touchstart",(function(A){var e=A.touches[0],t={x:e.pageX-n,y:e.pageY-r};a.getPointList();A.preventDefault(),a.getPointList().init(),a.getPointList().add(t),a.setClickStatus(!0)}),!1),document.getElementById("canvas-mouse").addEventListener("touchend",(function(A){var e=A.changedTouches[0],l={x:e.pageX-n,y:e.pageY-r},c=a.getPointList(),h=s.getName(),d=null,p=null,g=s.getClassName();A.preventDefault(),"shape"===g&&(a.getPointList().add(l),a.setClickStatus(!1),d=new i.model.shapeModel[h],p=s.setPoint(c),d.init(p),o.paint(d),t.clear())}),!1)}},this.Nav={init:function(){this.bindEvent()},bindEvent:function(){var A=i.element;xh.delegate(A,"#nav-file-export","click",(function(e){var t=i.canvas.currentCanvasContainer.getCanvas(),o=i.canvas.negativeCanvasContainer.getCanvas(),n=document.createElement("canvas");n.width=t.width,n.height=t.height;var r=n.getContext("2d");r.drawImage(o.getCanvas(),0,0),r.drawImage(t.getCanvas(),0,0),document.querySelectorAll("#save-image")[0].src=n.toDataURL(),xh.append(A,""),[].map.call(document.querySelectorAll("#myModal"),(function(A,e){xh.removeClass(A,"hide")}))})),xh.delegate(A,"#nav-file-saveAs","click",(function(e){var t=i.canvas.currentCanvasContainer.getCanvas(),o=i.canvas.negativeCanvasContainer.getCanvas(),n=document.createElement("canvas");n.width=t.width,n.height=t.height;var r=n.getContext("2d");r.drawImage(o.getCanvas(),0,0),r.drawImage(t.getCanvas(),0,0),document.querySelectorAll("#save-image")[0].src=n.toDataURL(),xh.append(A,""),[].map.call(document.querySelectorAll("#myModal"),(function(A,e){xh.removeClass(A,"hide")}))})),xh.delegate(A,"#nav-file-save","click",(function(A){var t=i.canvas.currentCanvasContainer.getCanvas(),o=i.canvas.negativeCanvasContainer.getCanvas();t.save(),o.save();var n=i.lobibox.alert("success",{msg:"保存成功",title:"保存",backdrop:!0,buttons:{yes:{closeOnClick:!1,text:"关闭"}},callback:function(A,t){A.destroy(),e.postilSave()}}),r=(new Date).getTime()-i.lobibox.alert.startTime;n.$el.style.zIndex=r+2})),xh.delegate(A,"#nav-file-open","click",(function(e){xh.append(A,""),[].map.call(document.querySelectorAll("#image-modal"),(function(A,e){xh.removeClass(A,"hide")}))})),xh.delegate(A,"#nav-file-import-img","click",(function(e){xh.append(A,""),[].map.call(document.querySelectorAll("#image-modal"),(function(A,e){xh.removeClass(A,"hide")}))})),xh.delegate(A,"#nav-edit-undo","click",(function(A){i.canvas.currentCanvasContainer.getCanvas().undo(),e.undo()})),xh.delegate(A,"#nav-edit-clear","click",(function(A){i.canvas.currentCanvasContainer.getCanvas().clear()})),xh.delegate(A,"#nav-edit-clear-negative","click",(function(A){i.canvas.negativeCanvasContainer.getCanvas().clear()})),xh.delegate(A,"#nav-edit-convert","click",(function(A){i.canvas.currentCanvasContainer.getCanvas().convert()})),xh.delegate(A,"#nav-edit-flipx","click",(function(A){i.canvas.currentCanvasContainer.getCanvas().flipX()})),xh.delegate(A,"#nav-edit-flipy","click",(function(A){i.canvas.currentCanvasContainer.getCanvas().flipY()}))}};var r;(r=function(){this.currentOpenAttributePanel=null,this.colorPicker=void 0,this.attributePanelWindow=void 0}).prototype={init:function(){this.bindEvent(),this.initAttributePanel(),this.initColor(),i.tool=i.tool||{},i.tool.currentToolContainer=Object.create(i.model.ToolContainerModel),i.tool.currentToolContainer.init(new i.model.toolModel.Line)},initAttributePanel:function(){document.querySelector("#tool-wrap");var A=document.querySelector("#tool-shape-attribute-panel"),e=document.createElement("div");e.className="tool-attribute-panel-content",this.attributePanelWindow=i.lobibox.window({title:"属性面板",width:334,height:415,closeOnEsc:!1,closeButton:!0,afterWindowHide:function(A){},content:e}),this.attributePanelWindow.setPosition({left:"",right:35,bottom:120}),this.attributePanelWindow.windowHide();var t=document.querySelectorAll(".tool-attribute-panel");[].map.call(t,(function(A,t){A.style.display="none",e.appendChild(A)})),this.setCurrentAttributePanel(A),this.openAttributePanel(A)},initColor:function(){var A=document.querySelector("#tool-wrap .tool .color");this.colorPicker=new Hh(A),A.style.display="none";var e=A.parentNode;xh.append(e,'
');var t=e.querySelector("#colorOperatorDiv"),i=this.colorPicker.element;i.id="toolColorModal",i.className="colorModal",i.style.cssText+="margin-left:"+t.offsetLeft+"px;bottom:50px",t.addEventListener("click",(function(A){i.focus(),i.style.display="block"===i.style.display?"none":"block",A.stopPropagation?A.stopPropagation():A.cancelBubble=!0})),document.addEventListener("click",(function(A){})),xh.addEventListener(A,"change",(function(e){xh.css(t,{"background-color":A.value})})),A.parentNode.parentNode.appendChild(i)},openAttributePanel:function(A){document.querySelector("#tool-wrap"),document.querySelector(".tool-attribute-panel-content");var e=document.querySelectorAll(".tool-attribute-panel"),t=A||this.getCurrentAttributePanel();t&&([].map.call(e,(function(A,e){A.style.display=A.id==t.id?"block":"none"})),this.attributePanelWindow.windowShow())},getCurrentAttributePanel:function(){return this.currentOpenAttributePanel},setCurrentAttributePanel:function(A){return void 0!==A&&(this.currentOpenAttributePanel=A,!0)},bindEvent:function(){var A=document.querySelector("#tool-wrap"),e=this;xh.delegate(A.querySelector(".tool"),"button","click",(function(A){if("nav-file-import-img"===this.id)e.attributePanelWindow.$el.style.zIndex=888;else{var t=document.querySelector("#tool-wrap"),o=this.getAttribute("data-tool-panel"),n=t.querySelector(".tool-panel ."+o),r=t.querySelectorAll(".tool-panel .wrap"),a=document.querySelector("#tool-"+o+"-attribute-panel"),s=this.getAttribute("data-current-tool");[].map.call(t.querySelectorAll(".tool button.active"),(function(A,e){xh.removeClass(A,"active")})),xh.addClass(this,"active");for(var l=0;r.length>l;l+=1)r[l].style.display="none";if(n&&(n.style.display="block"),a){var c=a.getAttribute("title")?a.getAttribute("title"):"属性面板";i.Tool.attributePanelWindow.setTitle(c)}if(e.setCurrentAttributePanel(a),e.openAttributePanel(a),!s)return;-1===s.indexOf("Arrow")?i.tool.currentToolContainer.init(new i.model.toolModel[s]):console.log("currentTool: 箭头没有原型类实现")}})),xh.delegate(A.querySelectorAll(".tool-panel .wrap"),"button","click",(function(A){var e=this.getAttribute("data-tool"),t=this.getAttribute("data-tool-class"),i=document.querySelector("#tool-wrap .tool button[data-tool-panel='"+e+"']");i.setAttribute("data-current-tool",t),xh.simulateEvent(i,"click")})),xh.delegate(A,".color","change",(function(A){var e=this.value;i.tool.currentToolContainer.getTool().setOption({fillStyle:e,strokeStyle:e})})),xh.delegate(document.querySelectorAll(".tool-attribute-panel"),"select","change",(function(A){var e=A.target,t=e.getAttribute("data-attr"),o=e.value,n=i.tool.currentToolContainer.getTool(),r={};r[t]=o,n.setOption(r)})),[].map.call(i.element.querySelectorAll("input"),(function(A,e){var t=A.getAttribute("type");"checkbox"!==t&&"radio"!==t&&xh.addEventListener(A,"change",(function(A){var e=A.target,t=e.getAttribute("data-attr"),o=e.value,n=i.tool.currentToolContainer.getTool(),r={},a=e.parentNode.querySelector("span");a&&(a.textContent=o),r[t]=o,n.setOption(r)}))})),[].map.call(i.element.querySelectorAll(".tool-attribute-panel input"),(function(A,e){"checkbox"===A.getAttribute("type")&&xh.addEventListener(A,"change",(function(A){var e=A.target,t=e.getAttribute("data-attr"),o=e.value,n=e.getAttribute("checked"),r=i.tool.currentToolContainer.getTool(),a={};a[t]=!0===n?o:"",r.setOption(a),window.console.log(n)}))})),[].map.call(i.element.querySelectorAll(".tool-attribute-panel input"),(function(A,e){"radio"===A.getAttribute("type")&&xh.addEventListener(A,"change",(function(A){var e=A.target,t=e.attr("data-attr"),o=e.val(),n=i.tool.currentToolContainer.getTool(),r={};r[t]=o,n.setOption(r)}))}))}},this.Tool=new r;var a={canvas:null,init:function(A){this.setCanvas(A)},setCanvas:function(A){return this.canvas=A,!0},getCanvas:function(){return this.canvas}};i.model=i.model||{},i.model.CanvasContainerModel=a;var s=function(){this.canvas=null,this.documentName="",this.pictureName="",this.name="Canvas",this.shapeList=[],this.convertStatus="source-over",this.flipXStatus=!1,this.flipYStatus=!1,this.width=1e3,this.height=400,this.context2D=null,this.top=0,this.left=0};s.prototype={init:function(A,e){this.initCanvas(A),this.initHeight(),this.initWidth(),this.initLeft(),this.initTop(),this.initContext2D(),this.initName(e),this.load()},initName:function(A){this.setName(A)},setName:function(A){this.name=A},setDocumentName:function(A){this.documentName=A},setPictureName:function(A){this.pictureName=A},getDocumentName:function(){return this.documentName},getPictureName:function(){return this.pictureName},getName:function(){return this.name},initCanvas:function(A){this.setCanvas(A)},setCanvas:function(A){return null!=A&&(this.canvas=A,!0)},getCanvas:function(){return this.canvas},initContext2D:function(){this.setContext2D()},getContext2D:function(){return this.context2D},setContext2D:function(A){A=A||this.getCanvas().getContext("2d"),this.context2D=A},clearContext:function(){var A=this.getHeight(),e=this.getWidth(),t=this.getContext2D();return t.clearRect(0,0,e,A),t},initLeft:function(){this.updateLeft()},updateLeft:function(){var A;return A=function(A){for(var e=A.offsetLeft,t=A.offsetParent;null!==t;)e+=t.offsetLeft,t=t.offsetParent;return e}(this.getCanvas()),this.left=A,A},getLeft:function(){return this.left},initTop:function(){this.updateTop()},updateTop:function(){var A;return A=function(A){for(var e=A.offsetTop,t=A.offsetParent;null!==t;)e+=t.offsetTop,t=t.offsetParent;return e}(this.getCanvas()),this.top=A,A},getTop:function(){return this.top},updateSize:function(A,e){this.updateHeight(e),this.updateWidth(A),this.repaint()},initHeight:function(){this.updateHeight()},updateHeight:function(A){var e=this.getCanvas(),t=parseInt(xh.getStyleValue(e.parentNode,"height"));return A&&(t=A),e.setAttribute("height",t),this.setHeight(t)},setHeight:function(A){return this.height=A=A||600,A},getHeight:function(){return this.height},initWidth:function(){this.updateWidth()},updateWidth:function(A){var e=this.getCanvas(),t=parseInt(xh.getStyleValue(e.parentNode,"width"));return A&&(t=A),e.setAttribute("width",t),this.setWidth(t)},setWidth:function(A){return this.width=A=A||600,this.width},getWidth:function(){return this.width},initShapeList:function(){this.clearShapeList()},getShapeList:function(){return uh.extend(!0,[],this.shapeList)},setShapeList:function(A){return this.clearShapeList(),uh.extend(!0,this.shapeList,A),A},addShape:function(A){this.shapeList.push(A)},deleteShape:function(){this.shapeList.pop()},clearShapeList:function(){this.shapeList=[]},paint:function(A){this.addShape(A),A.paint(this.getContext2D()),"negativeCanvas"!=this.name&&"currentCanvas"!=this.name||(i.change=!0)},repaint:function(){var A,e=this.shapeList,t=e.length,o=0;for(A=this.clearContext();t>o;o+=1)e[o].paint(A);t>0&&("negativeCanvas"!=this.name&&"currentCanvas"!=this.name||(i.change=!0))},undo:function(){this.deleteShape(),this.repaint()},clear:function(){this.clearContext(),this.clearShapeList()},convert:function(){var A=this.getContext2D(),e=A.globalCompositeOperation,t="source-over"===this.convertStatus?"destination-over":"source-over";this.convertStatus=t,A.globalCompositeOperation=t,this.repaint(),A.globalCompositeOperation=e},save:function(A){var e=new i.model.StorageModel,t=[],o=this.shapeList,n=o.length,r=0,a=this.getName(),s="";if(a=a+"-"+this.getDocumentName()+"-"+this.getPictureName(),null!=A&&(a=A),e.init(),!1!==e.getStorage()){for(;n>r;r+=1)t[r]={name:o[r].getName(),option:o[r].getOption()};s=window.JSON.stringify(t),e.save(a,s)}},load:function(A){var e,t,o=new i.model.StorageModel,n=[],r=0,a=this.getName(),s=this.getDocumentName(),l=this.getPictureName(),c=this.shapeList;if(a=a+"-"+s+"-"+l,null!=A&&(a=A),o.init(),!1!==o.getStorage()){for(t=o.load(a)||"[]",e=(n=window.JSON.parse(t)).length;e>r;r+=1)c[r]=new i.model.shapeModel[n[r].name],c[r].init(n[r].option);this.repaint()}},autoSave:function(A){var e=this;window.setInterval((function(){e.save()}),A)},flipX:function(){var A=this.getContext2D(),e=this.getWidth();A.save(),this.flipXStatus?this.flipXStatus=!1:(this.flipXStatus=!0,A.translate(e,0),A.scale(-1,1)),this.repaint(),A.restore()},flipY:function(){var A=this.getContext2D(),e=this.getHeight();A.save(),this.flipYStatus?this.flipYStatus=!1:(this.flipYStatus=!0,A.translate(0,e),A.scale(1,-1)),this.repaint(),A.restore()}},i.model=i.model||{},i.model.CanvasModel=s;(i=i||{}).model=i.model||{},i.model.ToolContainerModel={tool:null,init:function(A){A.init(),this.setTool(A)},setTool:function(A){return this.tool=A,!0},getTool:function(){return this.tool}}},Jd=function(A,e){var t=A.toolId,i=A.Flag,o=A.viewer,n=e.toolbarTop,r=this;r.viewer=o,r.postilInfo={},this.editingPostilObj=void 0,this.editingNodeDom=void 0,this.postilDelConf=!0,this.eventDispatcher=new Ld;var a=0;this.deleteListener=null,this.addListener=null,this.renameListener=null,this.updateListener=null,this.exitListener=null,this.saveListener=null,this.openListener=null,this.restoreToPostilListener=null;var s=document.createElement("div");s.className="postil-content",xh.append(s,'
'),r.postilWindow=qd.window({title:"批注",width:334,height:688,closeOnEsc:!1,closeButton:!0,afterWindowHide:function(){var A=document.getElementById("postil"+t);i.postil=!1,A&&(A.style.backgroundColor="",A.querySelector(".yj-icon").className="yj-icon postil-icon")},content:s}),r.postilWindow.setPosition({left:"",right:5,top:60}),r.postilWindow.windowHide(),xh.addEventListener(n.querySelector("#postil"+t),"click",(function(A){if(i.postil)A.target.parentNode.style.backgroundColor="",A.target.className="yj-icon postil-icon active",r.postilWindow.windowHide();else{r.load([]),i.postil=!i.postil,r.postilWindow.windowShow();var e=o.viewerImpl.modelManager.sceneState;A.target.parentNode.style.backgroundColor="#1f89de",A.target.className="yj-icon postil-icon active",e.getSelection()}})),xh.append(document.querySelector("body"),'
'),document.querySelector("#postilEdit"+t).style.display="none",this.edit=new Wd("postilEdit"+t,this,o,t),r.edit.init(),xh.addEventListener(r.postilWindow.$el.querySelector(".postil-body"),"click",(function(A){switch(A.target.className){case"postil-node-delete":r.postilDelete(A);break;case"postil-node-img":r.postilflyto(A);break;case"postil-node-button-update":r.postilUpdate(A);break;case"postil-node-button-edit":r.postilEdit(A)}})),xh.addEventListener(r.postilWindow.$el.querySelector(".postil-body"),"dblclick",(function(A){switch(A.target.className){case"postil-node-name":r.postilRename(A)}})),this.makePostils=function(){var A,e,t,i,n,r=o.viewerImpl.modelManager.getModelSnapshotPhoto();A=r.imgURL;var s=r.width,l=r.height,c=o.viewerImpl.getSceneState();e=c.camera,t=c.state,i=c.selection.concat(),n=c.modelSelection.concat();var h=a;return a+=1,{cameraState:e,componentState:t,highlightComponentsKeys:i,highlightModelsKeys:n,imageURL:A,width:s,height:l,num:h,code:(new Date).getTime().toString(),name:"批注"+h}},this.clear=function(){[].map.call(r.postilWindow.$el.querySelectorAll(".postil .postil-body"),(function(A,e){A.innerHTML=""})),r.postilInfo={},r.postilDelConf=!0},this.load=function(A){Array.isArray(A)&&A.forEach((function(A){r.add(A)}))},xh.addEventListener(r.postilWindow.$el.querySelector("#postilAdd"+t),"click",(function(A){var e=r.makePostils();"function"==typeof r.addListener?r.addListener(e,(function(A,t){A&&r.add(t||e)})):r.add(e)})),this.add=function(A){var e=A.imageURL,t=A.width,i=A.height,o=A.code,n=A.name,a=A.num;if(A.cameraState&&A.componentState&&e&&o&&t&&i){for(var s=r.postilWindow.$el.querySelectorAll(".postil-node"),l=0;s.length>l;l+=1)xh.css(s[l],{border:"2px"});var c='
'+n+'×
';[].map.call(r.postilWindow.$el.querySelectorAll(".postil-body"),(function(A,e){xh.append(A,c)})),r.postilInfo[o]=A}},this.postilEdit=function(A){var e=document.querySelector("#postilEdit"+t);e.style.display="block",e.style.height=r.viewer.viewerImpl.getDomElement().style.height,e.style.width=r.viewer.viewerImpl.getDomElement().style.width;var i=A.target.parentNode.parentNode.parentNode.getAttribute("imgid");"function"==typeof r.openListener?r.openListener(i,(function(A){A&&r.open(i)})):r.open(i)},this.open=function(A){document.querySelector("#postilEdit"+t).style.display="block";var e=r.postilWindow.$el.querySelector("div[imgid='"+A+"']");if(e){this.editingNodeDom=e;var i=e.querySelector(".postil-node-name").textContent;r.editingPostilObj=r.postilInfo[A],r.edit.setTitle(i),xh.showOrHideElement(o.viewport,!1),r.edit.canvas.currentCanvasContainer.getCanvas().setDocumentName(A),r.edit.canvas.currentCanvasContainer.getCanvas().setPictureName(A),r.edit.canvas.negativeCanvasContainer.getCanvas().setDocumentName(A),r.edit.canvas.negativeCanvasContainer.getCanvas().setPictureName(A);var n=r.edit.canvas.negativeCanvasContainer.getCanvas(),a=new r.edit.model.shapeModel.ImageShape,s=e.children[1].children[0].naturalWidth,l=e.children[1].children[0].naturalHeight;a.init({x:0,y:0,width:s,height:l,src:e.children[1].children[0].src}),r.edit.clear(),n.paint(a),r.edit.updateSize(s,l)}},this.postilUpdate=function(A){var e=A.target.parentNode.parentNode.parentNode.getAttribute("imgid"),t=r.makePostils();"function"==typeof r.updateListener?r.updateListener(e,t,(function(A,i,o){A&&r.update(i||e,o||t)})):r.update(e,t)},this.update=function(A,e){var t=r.postilInfo[A];t&&(t.cameraState=e.cameraState,t.componentState=e.componentState,t.highlightComponentsKeys=e.highlightComponentsKeys,t.highlightModelsKeys=e.highlightModelsKeys,t.imageURL=e.imageURL);var i=r.postilWindow.$el.querySelector("div[imgid='"+A+"']");if(i){var o=i.querySelector(".postil-node-img");o&&(o.src=e.imageURL)}},this.postilDelete=function(A){var e=A.target.parentNode.parentNode.getAttribute("imgid");if(r.postilDelConf){var t=qd.alert("info",{msg:"删除不可恢复,确认删除?",title:"删除确认",backdrop:!0,buttons:{yes:{closeOnClick:!1,text:"删除并不再提示"},no:{closeOnClick:!1,text:"删除"}},callback:function(A,t){"no"!==t&&"yes"!==t||("yes"===t&&(r.postilDelConf=!1),"function"==typeof r.deleteListener?r.deleteListener(e,(function(A){A&&r.delete(e)})):r.delete(e)),A.destroy()}}),i=(new Date).getTime()-qd.window.startTime;[].map.call(r.postilWindow.$el.querySelectorAll(".lobibox-backdrop"),(function(A,e){xh.css(A,{"z-index":i})})),t.$el.style.zIndex=i+2}else"function"==typeof r.deleteListener?r.deleteListener(e,(function(A){A&&r.delete(e)})):r.delete(e)},this.delete=function(A){var e=r.postilWindow.$el.querySelector("div[imgid='"+A+"']");e&&e.remove(),delete r.postilInfo[A]},this.postilRename=function(A){o.viewerImpl.cameraControl.enabled=!1;var e=A.target,t=e.parentNode.parentNode.getAttribute("imgid"),i=e.innerText,n=document.createElement("input");n.type="text",n.value=i,e.innerText="",xh.append(e,n),n.focus(),n.select(),n.addEventListener("blur",(function(A){var e=A.target;e.removeEventListener("blur",(function(){})),e.value!==i&&""!==xh.trim(e.value)?"function"==typeof r.renameListener?r.renameListener(t,e.value,(function(A,o){A?r.rename(t,o||e.value):e.parentNode.innerText=i})):r.rename(t,e.value):e.parentNode.innerText=i,n.remove(),o.viewerImpl.cameraControl.enabled=!0}))},this.rename=function(A,e){var t=r.postilWindow.$el.querySelector("div[imgid='"+A+"']");if(t){var i=t.querySelector(".postil-node-name");i&&(i.innerText=e)}r.postilInfo[A].name=e},this.postilflyto=function(A){for(var e=r.postilWindow.$el.querySelectorAll(".postil-node"),t=0;e.length>t;t+=1)xh.css(e[t],{border:"2px"});var i=A.target.parentNode.parentNode.getAttribute("code");"function"==typeof r.restoreToPostilListener?r.restoreToPostilListener(i,(function(A){r.restoreToPostil(i)})):r.restoreToPostil(i)},this.restoreToPostil=function(A){var e=r.postilInfo[A];if(e){o.viewerImpl.setSceneState({camera:e.cameraState,state:e.componentState,selection:e.highlightComponentsKeys,modelSelection:e.highlightModelsKeys});var t=r.postilWindow.$el.querySelector("div[imgid='"+A+"']");t&&xh.css(t,{border:"2px solid #002553"})}},this.postilSave=function(){"function"==typeof r.saveListener?r.saveListener(this.editingPostilObj.code,(function(A){A&&r.save()})):r.save()},this.save=function(){r.edit.canvas.currentCanvasContainer.getCanvas().save(),r.edit.canvas.negativeCanvasContainer.getCanvas().save();var A=r.edit.canvas.currentCanvasContainer.getCanvas(),e=r.edit.canvas.negativeCanvasContainer.getCanvas(),t=document.createElement("canvas");t.width=A.width,t.height=A.height;var i=t.getContext("2d");i.drawImage(e.getCanvas(),0,0),i.drawImage(A.getCanvas(),0,0);var o=t.toDataURL();r.editingPostilObj.imageURL=o,this.editingNodeDom.children[1].children[0].setAttribute("src",o),r.eventDispatcher.dispatchEvent({type:"POSTIL-EDIT-SAVE",event:event,data:r.editingPostilObj})},this.undo=function(){r.eventDispatcher.dispatchEvent({type:"POSTIL-EDIT-UNDO",event:event})},this.postilExit=function(){"function"==typeof r.exitListener?r.exitListener(this.editingPostilObj.code,(function(A){A&&r.exit()})):r.exit()},this.exit=function(){r.edit.canvas.currentCanvasContainer.getCanvas().clear(),r.edit.canvas.negativeCanvasContainer.getCanvas().clear(),r.edit.canvas.currentCanvasContainer.getCanvas().setDocumentName(""),r.edit.canvas.currentCanvasContainer.getCanvas().setPictureName(""),r.edit.canvas.negativeCanvasContainer.getCanvas().setDocumentName(""),r.edit.canvas.negativeCanvasContainer.getCanvas().setPictureName(""),r.clearPostilStorage(),r.edit.hide(),r.editingPostilObj=void 0,document.querySelector("#"+o.viewport).style.display="block",r.eventDispatcher.dispatchEvent({type:"POSTIL-EDIT-CLOSE"})},this.clearPostilStorage=function(){for(var A=localStorage.length,e=[],t=0;A>t;t+=1){var i=localStorage.key(t);-1===i.indexOf("currentCanvas-")&&-1===i.indexOf("negativeCanvas-")||e.push(i)}e.map((function(A,e){return localStorage.removeItem(A)}))},this.clearPostilStorage(),this.getPostilByKey=function(A){return r.postilInfo?r.postilInfo[A]:null},this.getAllPostil=function(){return r.postilInfo?r.postilInfo:null}},zd=function(A,e){var t=document.getElementById("svgBar"+e),i=this;if(!t){this.svg=document.createElementNS("http://www.w3.org/2000/svg","svg"),this.svg.setAttribute("id","svgBar"+e),this.svg.setAttribute("style","width: 100%; height: 10px; position:absolute; left: 0; top:0;"),A.appendChild(this.svg);var o=Number(2).toString(),n=A.clientWidth.toString(),r=(A.clientWidth-2).toString();this.backBar=document.createElementNS("http://www.w3.org/2000/svg","line"),this.backBar.setAttribute("id","backBar"+e),this.backBar.setAttribute("class","progressBar"),this.backBar.setAttribute("x1",o),this.backBar.setAttribute("y1","1"),this.backBar.setAttribute("x2",n),this.backBar.setAttribute("y2","1"),this.backBar.setAttribute("stroke","#CFF9FE"),this.backBar.setAttribute("stroke-width","7"),this.backBar.setAttribute("stroke-linecap","round"),this.frontBar=document.createElementNS("http://www.w3.org/2000/svg","line"),this.frontBar.setAttribute("id","frontBar"+e),this.frontBar.setAttribute("class","progressBar"),this.frontBar.setAttribute("x1",o),this.frontBar.setAttribute("y1","1"),this.frontBar.setAttribute("x2",n),this.frontBar.setAttribute("y2","1"),this.frontBar.setAttribute("stroke","#58BDFD"),this.frontBar.setAttribute("stroke-dasharray",r),this.frontBar.setAttribute("stroke-dashoffset",r),this.frontBar.setAttribute("stroke-width","7"),this.frontBar.setAttribute("stroke-linecap","round"),this.svg.appendChild(this.backBar),this.svg.appendChild(this.frontBar)}this.setProgressBar=function(A,e){var t=A/e,o=r-r*t;i.svg.style.display="",i.frontBar.setAttribute("stroke-dashoffset",o.toString()),1>t||setTimeout((function(){i.deleteProgressBar()}),500)},this.deleteProgressBar=function(){document.getElementsByClassName("progressBar");i.svg.style.display="none"}},Zd=function(A,e){var t=A.toolId,i=A.Flag,o=A.viewer,n=e.toolbarTop,r=this,a=0;this.snapshotInfo={},this.snapshotDelConf=!0,this.deleteListener=null,this.addListener=null,this.renameListener=null,this.updateListener=null,this.annotationListener=null,this.restoreToSnapshotListener=null;var s=document.createElement("div");s.className="snapshot-content",xh.append(s,'
'),this.snapshotWindow=qd.window({title:"快照",width:334,height:688,closeOnEsc:!1,closeButton:!0,afterWindowHide:function(){var A=document.getElementById("snapshot"+t);i.snapshot=!1,A&&(A.style.backgroundColor="",A.querySelector(".yj-icon").className="yj-icon snapshot-icon")},content:s}),r.snapshotWindow.setPosition({left:"",right:5,top:60}),r.snapshotWindow.windowHide(),xh.addEventListener(n.querySelector("#snapshot"+t),"click",(function(A){if(i.snapshot)r.snapshotInfo=void 0,A.target.parentNode.style.backgroundColor="",A.target.className="yj-icon snapshot-icon",r.snapshotWindow.windowHide();else{r.load([]),i.snapshot=!i.snapshot,r.snapshotWindow.windowShow();var e=o.viewerImpl.modelManager.sceneState;A.target.parentNode.style.backgroundColor="#1f89de",A.target.className="yj-icon snapshot-icon active",e.getSelection()}})),xh.addEventListener(r.snapshotWindow.$el.querySelector("#add"+t),"click",(function(A){var e=r.makeSnapshots();"function"==typeof r.addListener?r.addListener(e,(function(A,t){A&&r.add(t||e)})):r.add(e)})),this.clear=function(){[].map.call(r.snapshotWindow.$el.querySelectorAll(".snapshot .snapshot-body"),(function(A,e){A.innerHTML=""})),r.snapshotInfo={},r.snapshotDelConf=!0},this.load=function(A){Array.isArray(A)&&A.forEach((function(A){r.add(A)}))},this.makeSnapshots=function(){var A,e,t,i,n,r=o.viewerImpl.modelManager.getModelSnapshotPhoto();A=r.imgURL;var s=r.width,l=r.height,c=o.viewerImpl.getSceneState();e=c.camera,t=c.state,i=c.selection.concat(),n=c.modelSelection.concat();var h=a;return a+=1,{cameraState:e,componentState:t,highlightComponentsKeys:i,highlightModelsKeys:n,imageURL:A,width:s,height:l,num:h,code:(new Date).getTime().toString(),name:"快照"+h,description:"无注释"}},xh.addEventListener(r.snapshotWindow.$el.querySelector(".snapshot-body"),"click",(function(A){switch(A.target.className){case"snapshot-node-delete":r.snapshotsDelete(A);break;case"snapshot-node-img":r.snapshotsflyto(A);break;case"snapshot-node-annotation":r.snapshotsAnnotation(A);break;case"snapshot-node-button-update":r.snapshotUpdate(A)}})),xh.addEventListener(r.snapshotWindow.$el.querySelector(".snapshot-body"),"dblclick",(function(A){switch(A.target.className){case"snapshot-node-name":r.snapshotsRename(A)}})),this.add=function(A){var e=A.imageURL,t=A.width,i=A.height,o=A.code,n=A.name,a=A.num,s=A.description;if(A.cameraState&&A.componentState&&e&&o&&t&&i){for(var l=r.snapshotWindow.$el.querySelectorAll(".snapshot-node"),c=0;l.length>c;c+=1)xh.css(l[c],{border:"2px"});var h='
'+n+'×
';[].map.call(r.snapshotWindow.$el.querySelectorAll(".snapshot-body"),(function(A,e){xh.append(A,h)})),r.snapshotInfo[o]=A}},this.snapshotsflyto=function(A){for(var e=r.snapshotWindow.$el.querySelectorAll(".snapshot-node"),t=0;e.length>t;t+=1)xh.css(e[t],{border:"2px"});var i=A.target.parentNode.parentNode.getAttribute("code");"function"==typeof r.restoreToSnapshotListener?r.restoreToSnapshotListener(i,(function(A){r.restoreToSnapshot(i)})):r.restoreToSnapshot(i)},this.restoreToSnapshot=function(A){var e=r.snapshotInfo[A];if(e){o.viewerImpl.setSceneState({camera:e.cameraState,state:e.componentState,selection:e.highlightComponentsKeys,modelSelection:e.highlightModelsKeys});var t=r.snapshotWindow.$el.querySelector("div[imgid='"+A+"']");t&&xh.css(t,{border:"2px solid #002553"})}},this.snapshotsPlay=function(){var A=null;function e(t){var i=r.snapshotWindow.$el.querySelectorAll(".snapshot-node");if(0!==i.length){var n,a=i[t].getAttribute("imgid");if(void 0===r.snapshotInfo[a])i.length>t&&e(t+1);else{for(var s=0;i.length>s;s+=1)xh.css(i[s],{border:"2px"});xh.css(i[t],{border:"2px solid #002553"}),o.viewerImpl.setSceneState({camera:r.snapshotInfo[a].cameraState,state:r.snapshotInfo[a].componentState,selection:r.snapshotInfo[a].highlightComponentsKeys,modelSelection:r.snapshotInfo[a].highlightModelsKeys}),i.length-1>t?A=setTimeout((n=t+1,function(){e(n)}),1e3):[].map.call(r.snapshotWindow.$el.querySelectorAll(".snapshot-play"),(function(A,e){A.innerHTML="播放模型快照"}))}i.length>t||[].map.call(r.snapshotWindow.$el.querySelectorAll(".snapshot-play"),(function(A,e){A.innerText="播放模型快照"}))}else[].map.call(r.snapshotWindow.$el.querySelectorAll(".snapshot-play"),(function(A,e){A.innerText="播放模型快照"}))}return function(t){if("播放模型快照"===t.target.innerText){t.target.innerText="停止播放";e(0)}else"停止播放"===t.target.innerText&&(t.target.innerText="播放模型快照",A&&clearTimeout(A))}}(),xh.addEventListener(r.snapshotWindow.$el.querySelector(".snapshot-play"),"click",(function(A){r.snapshotsPlay(A)})),this.snapshotsDelete=function(A){var e=A.target.parentNode.parentNode.getAttribute("imgid");if(r.snapshotDelConf){var t=qd.alert("info",{msg:"删除不可恢复,确认删除?",title:"删除确认",backdrop:!0,buttons:{yes:{closeOnClick:!1,text:"删除并不再提示"},no:{closeOnClick:!1,text:"删除"}},callback:function(A,t){"no"!==t&&"yes"!==t||("yes"===t&&(r.snapshotDelConf=!1),"function"==typeof r.deleteListener?r.deleteListener(e,(function(A){A&&r.delete(e)})):r.delete(e)),A.destroy()}}),i=(new Date).getTime()-qd.window.startTime;[].map.call(r.snapshotWindow.$el.querySelectorAll(".lobibox-backdrop"),(function(A,e){xh.css(A,{"z-index":i})})),t.$el.style.zIndex=i+2}else"function"==typeof r.deleteListener?r.deleteListener(e,(function(A){A&&r.delete(e)})):r.delete(e)},this.delete=function(A){var e=r.snapshotWindow.$el.querySelector("div[imgid='"+A+"']");e&&e.remove(),delete r.snapshotInfo[A]},this.snapshotsRename=function(A){o.viewerImpl.cameraControl.enabled=!1;var e=A.target,t=e.parentNode.parentNode.getAttribute("imgid"),i=e.innerText,n=document.createElement("input");n.type="text",n.value=i,e.innerText="",xh.append(e,n),n.focus(),n.select(),n.addEventListener("blur",(function(A){var e=A.target;e.removeEventListener("blur",(function(){})),e.value!==i&&""!==xh.trim(e.value)?"function"==typeof r.renameListener?r.renameListener(t,e.value,(function(A,o){A?r.rename(t,o||e.value):e.parentNode.innerText=i})):r.rename(t,e.value):e.parentNode.innerText=i,n.remove(),o.viewerImpl.cameraControl.enabled=!0}))},this.rename=function(A,e){var t=r.snapshotWindow.$el.querySelector("div[imgid='"+A+"']");if(t){var i=t.querySelector(".snapshot-node-name");i&&(i.innerText=e)}r.snapshotInfo[A].name=e},this.snapshotUpdate=function(A){var e=A.target.parentNode.parentNode.getAttribute("imgid"),t=r.makeSnapshots();"function"==typeof r.updateListener?r.updateListener(e,t,(function(A,i,o){A&&r.update(i||e,o||t)})):r.update(e,t)},this.update=function(A,e){var t=r.snapshotInfo[A];t&&(t.cameraState=e.cameraState,t.componentState=e.componentState,t.highlightComponentsKeys=e.highlightComponentsKeys,t.highlightModelsKeys=e.highlightModelsKeys,t.imageURL=e.imageURL);var i=r.snapshotWindow.$el.querySelector("div[imgid='"+A+"']");if(i){var o=i.querySelector(".snapshot-node-img");o&&(o.src=e.imageURL)}},this.snapshotsAnnotation=function(A){var e=A.target,t=e.parentNode.parentNode.getAttribute("imgid"),i=e.innerHTML,o=qd.prompt("text",{title:"添加/修改-注释/说明",value:e.innerHTML,multiline:!0,modal:!0,backdrop:!0,lines:6,attrs:{placeholder:"无注释"},buttons:{ok:{class:"btn btn-info",closeOnClick:!1,text:"确定"},cancel:{class:"btn btn-danger",closeOnClick:!1,text:"取消"}},callback:function(A,n){if("ok"===n){var a=o.getValue();a!==i&&""!==xh.trim(a)?"function"==typeof r.annotationListener?r.annotationListener(t,a,(function(A,e,i){A&&r.annotation(e||t,i||a)})):r.annotation(t,a):e.innerHTML=i,A.destroy()}else"cancel"===n&&A.destroy()}}),n=(new Date).getTime()-qd.window.startTime;[].map.call(r.snapshotWindow.$el.querySelectorAll(".lobibox-backdrop"),(function(A,e){xh.css(A,{"z-index":n})})),o.$el.style.zIndex=n+2},this.annotation=function(A,e){var t=r.snapshotWindow.$el.querySelector("div[imgid='"+A+"']");if(t){var i=t.querySelector(".snapshot-node-annotation");i&&(i.innerText=e)}r.snapshotInfo[A].description=e},this.getSnapshotByKey=function(A){return r.snapshotInfo?r.snapshotInfo[A]:null},this.getAllSnapshot=function(){return r.snapshotInfo?r.snapshotInfo:null}},Xd=function(A,e){var t=this;qd.viewport=document.querySelector("#"+A.viewport),A.getViewerImpl().getModelManager().addEventListener(Rc.ON_LOAD_ERROR,(function(A){jd("error",A.message||"加载出现错误",!1)})),A.getViewerImpl().getModelManager().addEventListener(Rc.ON_LOAD_INVALID_SCENE,(function(A){jd("error","key为 "+A.modelKey+" 的模型信息不合法",!1)})),A.getViewerImpl().getModelManager().addEventListener(Rc.ON_NETWORK_ERROR,(function(A){jd("error",A.message||"网络连接错误",!1)})),A.getViewerImpl().getModelManager().addEventListener(Rc.NO_PERMISSION,(function(A){jd("error",A.message||"权限不足",!1)})),A.getViewerImpl().getModelManager().addEventListener(Rc.ACCOUNT_NO_EXIST,(function(A){jd("error",A.message||"无法获取账户",!1)})),A.getViewerImpl().getModelManager().addEventListener(Rc.ON_LOAD_EMPTY_SCENE,(function(A){jd("error","key为 "+A.modelKey+" 的模型场景为空,请生成场景",!1)})),A.getViewerImpl().getModelManager().addEventListener(Tc.PARSEFAILE,(function(A){jd("error","key为 "+A.modelKey+" 的模型解析失败",!1)})),A.getViewerImpl().getModelManager().addEventListener(Tc.PARSING,(function(A){jd("error","key为 "+A.modelKey+" 的模型解析中",!1)})),A.getViewerImpl().getModelManager().addEventListener(Tc.SCENE_NOTHING_TO_LOAD,(function(A){jd("error","key为 "+A.modelKey+" 的模型没有可加载的内容",!1)}));var i=A.viewerImpl.uuid,o={roam:!1,sectioning:!1,multiple:!1,fullScreen:!1,attribute:!1,search:!1,measurement:!1,modelTree:!1,treeDataLoad:!1,snapshot:!1,postil:!1,mark:!1},n={home:!0,fit:!0,restore:!0,roam:!0,multiple:!0,transparent:!1,hide:!0,isolation:!0,sectioning:!0,modelPartition:!0,wireframe:!0,color:!0,setting:!0,modelTree:!1,attribute:!0,search:!1,measurement:!0,snapshot:!0,postil:!0,mark:!0},r={Flag:o,lobibox:qd,toolId:i,viewer:A};this.progressBar=new zd(A.viewerImpl.domElement,i);var a={};A.getViewerImpl().modelManager.addEventListener(Rc.ON_LOAD_PROGRESS,(function(A){a[A.progress.modelKey]=[A.progress.total,A.progress.loaded];var e=0,i=0;for(var o in a)if(a.hasOwnProperty(o)){var n=a[o];e+=n[0],i+=n[1]}t.progressBar.setProgressBar(i,e)})),A.getViewerImpl().modelManager.addEventListener(Rc.ON_LOAD_COMPLETE,(function(A){delete a[A.modelKey],0===Object.keys(a).length&&t.progressBar.setProgressBar(1,1)}));A.viewerImpl.getScene();this.undoList=[],this.redoList=[],this.maxUndoListLength=10;var s,l,c,h,d=0;function p(e){var i=t.undoList[e-1];if(i)switch(i.type){case"隐藏":A.showComponentsByKey(i.data);break;case"隔离":A.closeIsolateComponentsByKey(i.data);break;case"修改颜色":A.closeColorfulComponentsByKey(i.data.key);break;case"框选添加":A.closeHighlightComponentsByKey(i.data);break;case"框选移除":A.highlightComponentsByKey(i.data);break;case"修改线框":A.closeWireFrameComponentsByKey(i.data)}}function g(e){var i=t.redoList[e];if(i)switch(i.type){case"隐藏":A.hideComponentsByKey(i.data);break;case"隔离":A.isolateComponentsByKey(i.data);break;case"修改颜色":A.colorfulComponentsByKey(i.data.key,i.data.color,i.data.opacity);break;case"框选添加":A.highlightComponentsByKey(i.data);break;case"框选移除":A.closeHighlightComponentsByKey(i.data);break;case"修改线框":A.wireFrameComponentsByKey(i.data)}}function u(A){if(void 0!==A.target.undoNum){var e=Number(A.target.undoNum);1===e&&jd("info","无法再撤销、重做。请使用ctrl+z或ctrl+shift+z",3e3),isNaN(e)||t.undoOrRedo(e)}}this.className="Tool",this.getToolId=function(){return i},this.getFlag=function(){return o},this.createTool=function(e){t.options=uh.extend(!0,{},n,e);var a=document.createElement("div");a.id="my-tool"+i,a.className="yj-tool",A.viewerImpl.domElement.appendChild(a),this.toolbarTop=a,t.toolbar=a;var s=document.createElement("div");s.className="yj-group",a.appendChild(s);var l=document.createElement("div");l.className="homeViewer-div",l.id="homeViewerDiv"+i,l.style.display="flex";var c=document.createElement("button");c.className="yj-but",c.title="视图操作",c.id="homeViewer"+i;var h=document.createElement("div");h.classList.add("yj-icon"),h.classList.add("homeViewer-icon"),c.appendChild(h);var p=document.createElement("div");p.className="viewerModal",p.id="viewerModal"+i,l.appendChild(c),l.appendChild(p),t.options.home&&s.appendChild(l),c.addEventListener("click",(function(A){""===p.style.display||"none"===p.style.display?(DA(),p.style.display="flex"):p.style.display="none"}));var g=document.createElement("button");g.className="yj-but",g.title="初始化",g.id="home"+i;var u=document.createElement("div");u.classList.add("yj-icon"),u.classList.add("home-icon"),g.appendChild(u),t.options.home&&p.appendChild(g);var f=document.createElement("button");f.className="yj-but",f.title="聚焦",f.id="fit"+i;var m=document.createElement("div");m.classList.add("yj-icon"),m.classList.add("fit-icon"),f.appendChild(m),t.options.fit&&p.appendChild(f);var C=document.createElement("button");C.className="yj-but",C.title="复位",C.id="restore"+i;var y=document.createElement("div");y.classList.add("yj-icon"),y.classList.add("restore-icon"),C.appendChild(y);var v=document.createElement("ul");v.className="restoreModal",v.style.cssText+="display: none;",v.id="restoreModal"+i;for(var I=0;6>I;I+=1){var E=document.createElement("li");E.className="input-group-addon",v.appendChild(E);var B=document.createElement("input");B.type="checkbox",B.className=5===I?"checkAll":"check",E.appendChild(B);var x=document.createElement("label");switch(E.appendChild(x),I){case 0:B.id="showSet"+i,x.setAttribute("for","showSet"+i),x.innerHTML="复位构件可见设置";break;case 1:B.id="highlightSet"+i,x.setAttribute("for","highlightSet"+i),x.innerHTML="复位构件高亮设置";break;case 2:B.id="viewSet"+i,x.setAttribute("for","viewSet"+i),x.innerHTML="复位模型视角设置";break;case 3:B.id="wireframeSet"+i,x.setAttribute("for","wireframeSet"+i),x.innerHTML="复位构件线框设置";break;case 4:B.id="colorSet"+i,x.setAttribute("for","colorSet"+i),x.innerHTML="复位构件颜色设置";break;case 5:B.id="checkAll"+i,x.setAttribute("for","checkAll"+i),x.innerHTML="全选";var S=document.createElement("input");S.type="button",S.id="reset"+i,S.className="reset",S.value="复位选中项",E.appendChild(S)}}var w=document.createElement("ul");w.className="history",w.id="history"+i,w.style.cssText+="display: none;";var M=document.createElement("span");M.innerText="历史记录",M.style.cssText+="color:white",w.appendChild(M),t.options.restore&&(s.appendChild(C),s.appendChild(v),s.appendChild(w),v.style.cssText+="margin-left:"+C.style.left-v.style.width/2+"px");var b=document.createElement("button");b.className="yj-but",b.title="漫游",b.id="roam"+i;var U=document.createElement("div");U.classList.add("yj-icon"),U.classList.add("roam-icon"),b.appendChild(U);var F=document.createElement("div");F.classList.add("roamModal"),F.classList.add("clearfix"),F.id="roamModal"+i,F.innerHTML='
提示信息
-
+
提示信息
-
+
';var K=document.createElement("div");K.className="roamOnOff",K.innerHTML='
碰撞:
重力:
',t.options.roam&&(s.appendChild(b),s.appendChild(F),s.appendChild(K),F.style.cssText+="margin-left:"+b.style.left-F.style.width/2+"px");var Q=document.createElement("div");Q.className="yj-group",a.appendChild(Q);var R=null;t.options.multiple&&(R=function(A,e){var t=A.toolId,i=A.Flag,o=A.viewer,n=document.createElement("button");n.className="yj-but",n.title="框选",n.id="multiple"+t;var r=document.createElement("div");r.classList.add("yj-icon"),r.classList.add("multiple-icon"),n.appendChild(r);var a=null;return n.addEventListener("click",(function(){if(i.multiple)return this.style.backgroundColor="",this.querySelector(".yj-icon").className="yj-icon multiple-icon",i.multiple=!1,a&&a.remove(),a=null,void o.viewerImpl.controlManager.disableTool(Pc.PICK_BY_RECT);i.roam&&(document.getElementById("roam"+t).style.backgroundColor="",document.getElementById("roam"+t).querySelector(".yj-icon").className="yj-icon roam-icon",jd("info","框选模式下将关闭漫游功能",2e3),e.exitRoam()),i.measurement&&(document.getElementById("measurement"+t).style.backgroundColor="",document.getElementById("measurement"+t).querySelector(".yj-icon").className="yj-icon measurement-icon",jd("info","框选模式下将关闭测量功能",2e3),e.exitMeasure&&e.exitMeasure()),i.sectioning&&(document.getElementById("sectioning"+t).style.backgroundColor="",document.getElementById("sectioning"+t).querySelector(".yj-icon").className="yj-icon sectioning-icon",jd("info","框选模式下将关闭剖切功能",2e3),o.viewerImpl.controlManager.disableTool(Pc.CLIP_BY_BOX),i.sectioning=!1),o.render(),a=jd("info","按住'Ctrl'键,框选模式为增选;按住'Alt'键,框选模式为减选",5e3),this.style.backgroundColor="#1f89de",this.querySelector(".yj-icon").className="yj-icon multiple-icon active",i.multiple=!i.multiple,o.viewerImpl.controlManager.enableTool(o.viewerImpl,Pc.PICK_BY_RECT)})),n}(r,this),Q.appendChild(R));var T=document.createElement("button");T.className="yj-but",T.title="构件透明化",T.id="transparent"+i;var k=document.createElement("div");k.classList.add("yj-icon"),k.classList.add("transparent-icon"),T.appendChild(k);var D=document.createElement("div");D.classList.add("transparentModal"),D.classList.add("clearfix"),D.id="transparentModal"+i;var L=document.createElement("div");D.appendChild(L);var N=document.createElement("span");N.innerHTML="提示信息",N.className="transparent-info",L.appendChild(N),(uA=document.createElement("div")).className="subtract",uA.innerHTML="-",D.appendChild(uA);var O=document.createElement("div");O.className="transparentRangeParent",D.appendChild(O);var V=document.createElement("input");V.type="range",V.className="transparentRange",V.setAttribute("step","0.01"),V.setAttribute("min","0"),V.setAttribute("max","1"),O.appendChild(V),(CA=document.createElement("div")).className="add",CA.innerHTML="+",D.appendChild(CA),t.options.transparent&&(Q.appendChild(T),Q.appendChild(D),D.style.cssText+="margin-left:"+T.style.left-D.style.width/2+"px");var G=document.createElement("div");G.className="toolComponentDiv",G.id="toolComponentDiv"+i,G.style.display="flex";var P=document.createElement("button");P.className="yj-but",P.title="构件操作",P.id="toolComponent"+i;var q=document.createElement("div");q.classList.add("yj-icon"),q.classList.add("toolComponent-icon"),P.appendChild(q);var j=document.createElement("div");j.className="toolComponentModal",j.id="toolComponentModal"+i,G.appendChild(P),G.appendChild(j),Q.appendChild(G),P.addEventListener("click",(function(A){""===j.style.display||"none"===j.style.display?(DA(),j.style.display="flex"):j.style.display="none"}));var H=document.createElement("button");H.className="yj-but",H.title="构件隐藏",H.id="hide"+i;var Y=document.createElement("div");Y.classList.add("yj-icon"),Y.classList.add("hide-icon"),H.appendChild(Y),t.options.hide&&j.appendChild(H);var W=document.createElement("button");W.className="yj-but",W.title="构件隔离",W.id="insulate"+i;var J=document.createElement("div");J.classList.add("yj-icon"),J.classList.add("insulate-icon"),W.appendChild(J),t.options.isolation&&j.appendChild(W);var z=document.createElement("button");z.className="yj-but",z.title="构件属性",z.id="attribute"+i;var Z=document.createElement("div");Z.classList.add("yj-icon"),Z.classList.add("attribute-icon"),z.appendChild(Z),t.options.attribute&&(j.appendChild(z),this.attributeWindow=function(A){var e=A.lobibox,t=A.toolId,i=A.Flag,o=document.createElement("div");o.className="tab-body",o.id="tab-properties"+t;var n=document.createElement("table");n.classList.add("sx-table"),n.classList.add("table-no-top"),o.appendChild(n);var r=document.createElement("thead");n.appendChild(r);var a=document.createElement("tbody");n.appendChild(a);var s=document.createElement("tr");s.className="noprop",a.appendChild(s);var l=document.createElement("td");return l.innerText="尚未选择构件",s.appendChild(l),e.window({title:"属性",width:334,height:688,closeOnEsc:!1,closeButton:!0,afterWindowHide:function(){var A=document.getElementById("attribute"+t);i.attribute=!1,A&&(A.style.backgroundColor="",A.querySelector(".yj-icon").className="yj-icon attribute-icon")},content:o})}(r),t.attributeWindow.setPosition({left:"",right:5,top:60}),t.attributeWindow.windowHide(),z.addEventListener("click",(function(){if(o.attribute)this.style.backgroundColor="",t.attributeWindow.windowHide();else{o.attribute=!o.attribute,this.style.backgroundColor="#1f89de",this.querySelector(".yj-icon").className="yj-icon attribute-icon active",t.attributeWindow.windowShow();var e=A.viewerImpl.modelManager.sceneState;e.getSelection()&&t.showComponentAttribute(e.getSelection()[0])}})));var X=document.createElement("button");X.className="yj-but",X.title="构件线框化",X.id="wireframe"+i;var _=document.createElement("div");_.classList.add("yj-icon"),_.classList.add("wireframe-icon"),X.appendChild(_),t.options.wireframe&&j.appendChild(X);var $=document.createElement("button");$.className="yj-but",$.title="构件变色",$.id="color"+i,$.style.borderRadius="0 6px 6px 0";var AA=document.createElement("div");AA.classList.add("yj-icon"),AA.classList.add("color-icon"),$.appendChild(AA);var eA=document.createElement("input");eA.style.cssText+="display:none;",eA.className="toolColorInput",$.appendChild(eA);var tA=new Hh(eA,{hasOpacity:!0}).element;tA.id="colorModal"+i,tA.className="colorModal",t.options.color&&(j.appendChild($),Q.appendChild(tA),tA.style.cssText+="margin-left:"+$.offsetLeft+"px"),tA.querySelector(".btn-yes").addEventListener("click",(function(){var e=A.getHighlightComponentsKey(),i=Kd.getHexStringFromRGB(eA.value),o=Kd.getColorArrayFromRGBA(eA.value)[3];t.push({type:"修改颜色",data:{key:e,color:i,opacity:o}}),A.colorfulComponentsByKey(e,i,o)}));var iA=document.createElement("button");iA.className="yj-but",iA.title="模型测量",iA.id="measurement"+i;var oA=document.createElement("div");oA.classList.add("yj-icon"),oA.classList.add("measurement-icon"),iA.appendChild(oA),t.options.measurement&&(Q.appendChild(iA),iA.addEventListener("click",(function(e){o.measurement?(o.measurement=!1,this.style.backgroundColor="",this.querySelector(".yj-icon").className="yj-icon measurement-icon",A.viewerImpl.controlManager.disableTool(Pc.PICK_BY_MEASURE)):(o.measurement=!0,this.style.backgroundColor="#1f89de",this.querySelector(".yj-icon").className="yj-icon measurement-icon active",A.viewerImpl.controlManager.enableTool(A.viewerImpl,Pc.PICK_BY_MEASURE))})));var nA=document.createElement("div");nA.className="toolModelDiv",nA.id="toolModelDiv"+i,nA.style.display="flex";var rA=document.createElement("button");rA.className="yj-but",rA.title="模型操作",rA.id="toolModel"+i;var aA=document.createElement("div");aA.classList.add("yj-icon"),aA.classList.add("toolModel-icon"),rA.appendChild(aA);var sA=document.createElement("div");sA.className="toolModelModal",sA.id="toolModelModal"+i,nA.appendChild(rA),nA.appendChild(sA),Q.appendChild(nA),rA.addEventListener("click",(function(A){""===sA.style.display||"none"===sA.style.display?(DA(),sA.style.display="flex"):sA.style.display="none"}));var lA=document.createElement("button");lA.className="yj-but",lA.title="模型剖切",lA.id="sectioning"+i;var cA=document.createElement("div");cA.classList.add("yj-icon"),cA.classList.add("sectioning-icon"),lA.appendChild(cA),t.options.sectioning&&sA.appendChild(lA);var hA=document.createElement("button");hA.className="yj-but",hA.title="模型分解",hA.id="modelPartition"+i;var dA=document.createElement("div");dA.classList.add("yj-icon"),dA.classList.add("modelPartition-icon"),hA.appendChild(dA);var pA=document.createElement("div");pA.classList.add("modelPartitionModal"),pA.id="modelPartitionModal"+i,pA.style.cssText+="display: none;";var gA=document.createElement("div");pA.appendChild(gA);var uA,fA=document.createElement("span");fA.innerHTML="提示信息",fA.className="modelPartition-info",gA.appendChild(fA),(uA=document.createElement("div")).className="subtract",uA.innerHTML="-",pA.appendChild(uA);var mA=document.createElement("div");mA.className="modelPartitionRangeParent",pA.appendChild(mA);var CA,yA=document.createElement("input");yA.type="range",yA.className="modelPartitionRange",yA.setAttribute("value","1"),yA.setAttribute("name","points"),yA.setAttribute("step","0.01"),yA.setAttribute("min","1"),yA.setAttribute("max","3"),mA.appendChild(yA),(CA=document.createElement("div")).className="add",CA.innerHTML="+",pA.appendChild(CA),t.options.modelPartition&&(sA.appendChild(hA),Q.appendChild(pA),D.style.cssText+="margin-left:"+hA.style.left-pA.style.width/2+"px");var vA=document.createElement("div");vA.className="toolPostilDiv",vA.id="toolPostilDiv"+i,vA.style.display="flex",(wA=document.createElement("button")).className="yj-but",wA.title="批注操作",wA.id="toolPostil"+i;var IA=document.createElement("div");IA.classList.add("yj-icon"),IA.classList.add("toolPostil-icon"),wA.appendChild(IA);var EA=document.createElement("div");EA.className="toolPostilModal",EA.id="toolPostilModal"+i,vA.appendChild(wA),vA.appendChild(EA),Q.appendChild(vA),wA.addEventListener("click",(function(A){""===EA.style.display||"none"===EA.style.display?(DA(),EA.style.display="flex"):EA.style.display="none"}));var BA=document.createElement("button");BA.className="yj-but",BA.title="添加标签",BA.id="mark"+i;var xA=document.createElement("div");if(xA.classList.add("yj-icon"),xA.classList.add("label-icon"),BA.appendChild(xA),t.options.mark&&(EA.appendChild(BA),t.mark=new Hd(r,this)),t.options.snapshot){xh.append(EA,'');var SA=document.getElementById("snapshot"+i);SA.addEventListener("mouseover",(function(A){this.style.backgroundColor="#1f89de"})),SA.addEventListener("mouseout",(function(A){o[this.id.split(i)[0]]||(this.style.backgroundColor="")})),t.snapshot=new Zd(r,this)}if(t.options.postil){var wA;xh.append(EA,wA='');var MA=document.getElementById("postil"+i);MA.addEventListener("mouseover",(function(A){this.style.backgroundColor="#1f89de"})),MA.addEventListener("mouseout",(function(A){o[this.id.split(i)[0]]||(this.style.backgroundColor="")})),t.postil=new Jd(r,this)}var bA=document.createElement("div");bA.className="yj-group",bA.style.display="flex",bA.style.width="160px",a.appendChild(bA);var UA=document.createElement("button");UA.className="yj-but",UA.title="设置",UA.id="set"+i,UA.style.borderRadius="6px";var FA=document.createElement("div");FA.classList.add("yj-icon"),FA.classList.add("set-icon"),UA.appendChild(FA);var KA=document.createElement("div");KA.className="setModal",KA.id="setModal"+i;var QA=document.createElement("div");QA.className="sceneColorDiv",QA.title="选择背景颜色",KA.appendChild(QA);var RA=document.createElement("button");RA.id="sceneColorSet"+i,RA.classList.add("yj-icon"),RA.classList.add("sceneColorSet"),QA.appendChild(RA);var TA=document.createElement("input");TA.style.cssText+="display:none;",TA.className="sceneColorInput",QA.appendChild(TA);var kA=new Hh(TA,{hasOpacity:!0}).element;function DA(){v&&(v.style.display="none"),D&&(D.style.display="none"),pA&&(pA.style.display="none"),tA&&(tA.style.display="none"),p&&(p.style.display="none"),j&&(j.style.display="none"),sA&&(sA.style.display="none"),EA&&(EA.style.display="none"),KA&&(KA.style.display="none"),w&&(w.style.display="none")}kA.id="sceneColorModal"+i,kA.className="sceneColorModal",kA.querySelector(".btn-yes").addEventListener("click",(function(){DA();var e=Kd.getHexStringFromRGB(TA.value),t=Kd.getColorArrayFromRGBA(TA.value)[3];A.setSceneBackGroundColor(e,t)})),kA.querySelector(".btn-no").addEventListener("click",(function(){DA()}));var LA=document.createElement("div");LA.className="fullScreenDiv",LA.title="全屏显示",KA.appendChild(LA);var NA=document.createElement("button");function OA(A){A.stopPropagation?A.stopPropagation():A.cancelBubble=!0}NA.classList.add("yj-icon"),NA.classList.add("fullScreen"),NA.id="Fullscreen"+i,LA.appendChild(NA),t.options.setting&&(bA.appendChild(UA),bA.appendChild(KA),KA.appendChild(kA),kA.style.cssText+="margin-left:"+(UA.offsetWidth+5)+"px;"),document.addEventListener("click",(function(A){})),document.addEventListener("keydown",(function(A){27===(A.keyCode?A.keyCode:A.which)&&(o.roam&&b.click(),o.measurement&&document.querySelector("#measurement"+i).click(),o.multiple&&R&&R.click(),o.sectioning&&lA.click()),(A.keyCode?A.keyCode:A.which)===Oh&&(!0===A.ctrlKey&&!0===A.shiftKey&&t.undoOrRedo(d+1),!0===A.ctrlKey&&!1===A.shiftKey&&t.undoOrRedo(d-1))})),g.addEventListener("click",(function(){t.clearUndoList(),A.resetScene()})),f.addEventListener("click",(function(){A.adaptiveSize()})),C.addEventListener("click",(function(A){"none"===v.style.display&&DA(),v.addEventListener("click",(function(A){OA(A)})),w.addEventListener("click",(function(A){OA(A)})),v.style.display="none"===v.style.display?"block":"none",w.style.display="none"===w.style.display?"block":"none",OA(A)})),document.getElementById("reset"+i).addEventListener("click",(function(){var e=document.getElementById("showSet"+i).checked,t=document.getElementById("highlightSet"+i).checked,o=document.getElementById("viewSet"+i).checked,n=document.getElementById("wireframeSet"+i).checked,r=document.getElementById("colorSet"+i).checked,a={};a.visible=e,a.selected=t,a.wireframed=n,a.colorfully=r,a.view=o,A.resetScene(a)}));var VA=document.querySelectorAll("input[type=checkbox].check");document.querySelector("input[type=checkbox].checkAll").addEventListener("click",(function(){for(var A=0;VA.length>A;A+=1)VA[A].checked=this.checked}));for(var GA=0;VA.length>GA;GA+=1)VA[GA].addEventListener("click",(function(){document.querySelector("input[type=checkbox].checkAll").checked=VA.length===document.querySelectorAll("input[type=checkbox].check:checked").length}));this.pathRoam=Yd(r,this,b,0,K),t.pathRoam.setPosition({left:"",right:5,top:60}),t.pathRoam.windowHide();var PA=D.querySelector(".subtract"),qA=D.querySelector(".add"),jA=D.querySelector(".transparentRange");T.addEventListener("click",(function(e){if("none"===D.style.display&&DA(),D.addEventListener("click",(function(A){OA(A)})),D.style.display="none"===D.style.display?"block":"none",1>A.getHighlightComponentsKey().length)jd("warning","未选中构件",2e3),D.style.display="none";else{jA.value=1,document.querySelector(".transparent-info").innerText="透明度: "+100..toFixed(0)+"%"}OA(e)}));var HA=mh.isIE11();jA.addEventListener(HA?"change":"input",(function(e){var t=A.getHighlightComponentsKey();document.querySelector(".transparent-info").innerHTML="透明度: "+(100*Number(jA.value)).toFixed(0)+"%",A.transparentComponentsByKey(t,Number(jA.value),!1)})),PA.addEventListener("click",(function(){var e=Number(jA.value),t=Number(jA.getAttribute("step"));jA.value=e-t;var i=A.getHighlightComponentsKey();document.querySelector(".transparent-info").innerHTML="透明度: "+(100*Number(jA.value)).toFixed(0)+"%",A.transparentComponentsByKey(i,Number(jA.value),!1)})),qA.addEventListener("click",(function(){var e=Number(jA.value),t=Number(jA.getAttribute("step"));jA.value=e+t;var i=A.getHighlightComponentsKey();document.querySelector(".transparent-info").innerHTML="透明度: "+(100*Number(jA.value)).toFixed(0)+"%",A.transparentComponentsByKey(i,Number(jA.value),!1)})),H.addEventListener("click",(function(){var e=A.getHighlightComponentsKey();1>e.length?jd("warning","未选中构件",2e3):(t.push({type:"隐藏",data:e}),A.hideComponentsByKey(e))})),W.addEventListener("click",(function(){var e=A.getHighlightComponentsKey();1>e.length?jd("warning","未选中构件",2e3):(t.push({type:"隔离",data:e}),A.isolateComponentsByKey(e))}));var YA=document.createElement("div");YA.className="section-body";var WA=document.createElement("div");WA.style.cssText+="color: #ff6700;top: 10px;height: 60px;text-align: center;font-size: 16px;",YA.appendChild(WA);var JA=document.createElement("span");JA.innerHTML="是否显示剖切框",WA.appendChild(JA);var zA=document.createElement("input");zA.type="radio",zA.name="UIControl",zA.value=1,zA.checked="checked",WA.appendChild(zA);var ZA=document.createElement("span");ZA.innerHTML="显示",WA.appendChild(ZA);var XA=document.createElement("input");XA.type="radio",XA.name="UIControl",XA.value=0,XA.checked="",WA.appendChild(XA);var _A=document.createElement("span");_A.innerHTML="不显示",WA.appendChild(_A);var $A=document.createElement("button");$A.innerHTML="确定",$A.type="button",$A.style.cssText+="width:80px;height:30px;border-radius:10px;display:block;margin:0 auto;",YA.appendChild($A),this.sectionWindow=qd.window({title:"剖切",id:"sectionWindow",width:334,height:405,closeOnEsc:!1,closeButton:!0,afterWindowHide:function(){o.sectioning=!1,document.getElementById("sectioning"+i).style.backgroundColor="",zA.checked="checked",XA.checked="",A.viewerImpl.controlManager.disableTool(Pc.CLIP_BY_BOX),A.render()},content:YA}),t.sectionWindow.setPosition({left:"",right:5,top:60}),t.sectionWindow.windowHide(),lA.addEventListener("click",(function(){if(o.sectioning)return this.style.backgroundColor="",this.querySelector(".yj-icon").className="yj-icon sectioning-icon",t.sectionWindow.windowHide(),o.sectioning=!1,void A.disableSectionBox();o.multiple&&(document.getElementById("multiple"+i).style.backgroundColor="",document.getElementById("multiple"+i).querySelector(".yj-icon").className="yj-icon multiple-icon",jd("info","剖切模式下将关闭框选功能",2e3),A.viewerImpl.controlManager.disableTool(Pc.PICK_BY_RECT),o.multiple=!1),o.roam&&(document.getElementById("roam"+i).style.backgroundColor="",document.getElementById("roam"+i).querySelector(".yj-icon").className="yj-icon roam-icon",jd("info","剖切模式下将关闭漫游功能",2e3),t.exitRoam()),o.measurement&&(document.getElementById("measurement"+i).style.backgroundColor="",document.getElementById("measurement"+i).querySelector(".yj-icon").className="yj-icon measurement-icon",jd("info","剖切模式下将关闭测量功能",2e3),t.exitMeasure&&t.exitMeasure()),A.render(),this.style.backgroundColor="#1f89de",this.querySelector(".yj-icon").className="yj-icon sectioning-icon active",t.sectionWindow.windowShow(),o.sectioning=!o.sectioning,A.enableSectionBox(),$A.addEventListener("click",(function(){document.querySelector("#sectionWindow input[type=radio]:checked").value>0?A.showSectionBox():A.hideSectionBox()}))}));var Ae=pA.querySelector(".subtract"),ee=pA.querySelector(".add"),te=pA.querySelector(".modelPartitionRange");hA.addEventListener("click",(function(e){o.roam&&(document.getElementById("roam"+i).style.backgroundColor="",jd("info","模型分解模式下将关闭漫游功能",2e3),t.exitRoam()),A.render(),pA.addEventListener("click",(function(A){OA(A)})),"none"===pA.style.display?(DA(),pA.style.display="block"):pA.style.display="none",fA.innerText="离散系数: "+te.value,OA(e)})),te.addEventListener("change",(function(e){document.querySelector(".modelPartition-info").innerText="离散系数: "+te.value;var t=A.getViewerImpl().modelManager.getModelKeys(),i=Number(te.value);isNaN(i)||A.modelsExplosion({modelKey:t,coefficientX:i,coefficientY:i,coefficientZ:i})})),Ae.addEventListener("click",(function(){var e=te.value,t=Number(te.getAttribute("step"));te.value=Number(e)-t,document.querySelector(".modelPartition-info").innerText="离散系数: "+te.value;var i=A.getViewerImpl().modelManager.getModelKeys(),o=Number(te.value);isNaN(o)||A.modelsExplosion({modelKey:i,coefficientX:o,coefficientY:o,coefficientZ:o})})),ee.addEventListener("click",(function(){var e=te.value,t=Number(te.getAttribute("step"));te.value=Number(e)+t,document.querySelector(".modelPartition-info").innerText="离散系数: "+te.value;var i=A.getViewerImpl().modelManager.getModelKeys(),o=Number(te.value);isNaN(o)||A.modelsExplosion({modelKey:i,coefficientX:o,coefficientY:o,coefficientZ:o})})),X.addEventListener("click",(function(){var e=A.getHighlightComponentsKey();1>e.length?jd("warning","未选中构件",2e3):(t.push({type:"修改线框",data:e}),A.wireFrameComponentsByKey(e,!0))})),$.addEventListener("click",(function(e){"none"===tA.style.display&&DA(),tA.addEventListener("click",(function(A){OA(A)})),tA.style.display="none"===tA.style.display?"block":"none",1>A.getHighlightComponentsKey().length&&(jd("warning","未选中构件",2e3),tA.style.display="none"),OA(e)})),UA.addEventListener("click",(function(A){KA.addEventListener("click",(function(A){OA(A)})),""===KA.style.display||"none"===KA.style.display?(DA(),KA.style.display="flex"):KA.style.display="none",kA.style.display="none",OA(A)})),RA.addEventListener("click",(function(A){kA.addEventListener("click",(function(A){OA(A)})),kA.style.display="none"===kA.style.display?"block":"none",OA(A)})),NA.addEventListener("click",(function(e){DA();var t=document.getElementById("Fullscreen"+i);o.fullScreen?(o.fullScreen=!1,Wh.exitFullScreen(),t.className="fullScreen",t.title="全屏显示"):(o.fullScreen=!0,Wh.fullScreen(A.viewportDiv),t.className="cancelFullScreen",t.title="取消全屏")})),A.viewportDiv.focus()},this.createTool2=function(){var e=document.createElement("div");e.id="my-tool2"+i,e.className="yj-tool2",A.viewerImpl.domElement.appendChild(e),this.toolbarTop=e;var n=document.createElement("div");n.className="yj-group",e.appendChild(n);var a=document.createElement("button");a.className="yj-but",a.title="模型树",a.id="modelTree"+i;var s=document.createElement("div");s.classList.add("yj-icon"),s.classList.add("modelTree-icon"),a.appendChild(s),t.options.modelTree&&n.appendChild(a);var l=document.createElement("button");l.className="yj-but",l.title="查询",l.id="search"+i;var c=document.createElement("div");c.classList.add("yj-icon"),c.classList.add("search-icon"),l.appendChild(c);var h=document.createElement("div");h.className="yj-group",e.appendChild(h);var d=document.createElement("button");d.className="yj-but",d.title="添加标签",d.id="mark"+i;var p=document.createElement("div");p.classList.add("yj-icon"),p.classList.add("label-icon"),d.appendChild(p),t.options.mark&&(h.appendChild(d),t.mark=new Hd(r,this));for(var g=document.querySelectorAll("button"),u=0;g.length>u;u+=1)g[u].addEventListener("mouseover",(function(A){this.style.backgroundColor="#1f89de"})),g[u].addEventListener("mouseout",(function(A){this.id.split(i).length>1&&(o[this.id.split(i)[0]]||(this.style.backgroundColor=""))}));if(A.viewerImpl.modelManager.addEventListener(Rc.ON_CLICK_PICK,(function(e){o.attribute&&(e.intersectInfo?t.showComponentAttribute(A.viewerImpl.modelManager.sceneState.getSelection()[0]):t.showComponentAttribute())})),t.options.snapshot){xh.append(h,'');var f=document.getElementById("snapshot"+i);f.addEventListener("mouseover",(function(A){this.style.backgroundColor="#1f89de"})),f.addEventListener("mouseout",(function(A){o[this.id.split(i)[0]]||(this.style.backgroundColor="")})),t.snapshot=new Zd(r,this)}if(t.options.postil){xh.append(h,'');var m=document.getElementById("postil"+i);m.addEventListener("mouseover",(function(A){this.style.backgroundColor="#1f89de"})),m.addEventListener("mouseout",(function(A){o[this.id.split(i)[0]]||(this.style.backgroundColor="")})),t.postil=new Jd(r,this)}A.viewportDiv.focus()},this.showComponentAttribute=(s="",l=document.getElementById("tab-properties"+i),c=function(A,e,t){var i=document.createElement("tr");t.parentNode.appendChild(i),i.appendChild(document.createElement("td")),i.querySelector("td").innerHTML=A;var o=document.createElement("td"),n=null===e?"":e,r=document.createElement("span");r.classList.add("value"),r.classList.add("nonEditable"),r.innerHTML=n,o.appendChild(r),i.appendChild(o)},h=function(A,e){var t=document.createElement("tr");t.className="sx-active",l.querySelector("table tbody").appendChild(t);var i=document.createElement("td");for(var o in i.colSpan=2,i.style.fontSize="14px",t.appendChild(i),i.appendChild(document.createElement("b")),i.firstElementChild.innerHTML=A,e)c(o,e[o],t)},function(e){if(l=document.querySelector("#tab-properties"+i),e!==s){if(void 0===e){var o=l.querySelectorAll("table tbody tr");l.querySelector("table tbody").removeChild(o[0]),l.querySelector("table tbody").innerHTML="";var n=document.createElement("tr");n.className="noprop";var r=document.createElement("td");return r.setAttribute("colspan","2"),r.innerHTML="未选中构件",n.appendChild(r),l.querySelector("table tbody").appendChild(n),void(s=e)}s=e,l.querySelector("table tbody").innerHTML="";var a=A.viewerImpl.getModelByComponentKey(s),d="";a&&(d=a.projectKey),t.getComponentAttribute({key:s,projectKey:d},(function(A){if(l.querySelector("table tbody").innerHTML="",null===A){var e=document.createElement("tr");e.className="noprop";var t=document.createElement("td");return t.innerHTML="没有属性",e.appendChild(t),void l.querySelector("table tbody").appendChild(e)}if(void 0===A){var i=document.createElement("tr");i.className="noprop";var o=document.createElement("td");return o.innerHTML="属性加载失败",i.appendChild(o),void l.querySelector("table tbody").appendChild(i)}var n=document.createElement("tr");n.className="noprop";var r=document.createElement("th");n.appendChild(r);var a=document.createElement("span");a.classList.add("value"),a.classList.add("nonEditable"),a.innerHTML="名称",r.appendChild(a);var s=document.createElement("th");n.appendChild(s);var d=document.createElement("span");d.classList.add("value"),d.classList.add("nonEditable"),d.innerHTML="值",s.appendChild(d),l.querySelector("table tbody").appendChild(n);var p=A;for(var g in p)"object"===lc(p[g])?h(g,p[g]):"string"==typeof p[g]&&c(g,p[g],n)}))}}),this.undoOrRedo=function(A){t.maxUndoListLength>A||(A=t.maxUndoListLength),0>A&&(A=0);var e=document.querySelectorAll(".history_li");if(d>A)for(var i=d;i>=A;i-=1){p(i+1);var o=e[i];o&&(o.classList.remove("history_redo"),o.classList.add("history_undo"))}if(A>d)for(var n=d;A>n;n+=1){g(n);var r=e[n];r&&(r.classList.remove("history_undo"),r.classList.add("history_redo"))}d=A},this.clearUndoList=function(){d=0,t.undoList=[],t.redoList=[];var A=document.querySelector(".history");if(A){A.innerHTML="";var e=document.createElement("span");e.innerText="历史记录",e.style.cssText+="color:white",A.appendChild(e)}},this.push=function(A){if(t.undoList.length>d&&(t.undoList.splice(d,t.maxUndoListLength),t.redoList.splice(d,t.maxUndoListLength)),t.maxUndoListLength>t.undoList.length||(t.undoList.shift(),t.redoList.shift(),d-=1),t.maxUndoListLength-(d+=1),t.undoList.push(A),t.redoList.push(A),t.options.restore){var e=document.querySelector(".history");if(e){e.innerHTML="";var i=document.createElement("span");i.innerText="历史记录",i.style.cssText+="color:white",e.appendChild(i);for(var o=0;d>o;o+=1){var n=document.createElement("li");n.innerHTML=t.undoList[o].type,n.undoNum=o+1,n.title="点击执行撤销或重做",n.className="history_li history_redo",n.addEventListener("click",u),e.appendChild(n)}}}},A.getViewerImpl().getModelManager().addEventListener(Rc.ON_RECTPICK_ADD,(function(A){A.list&&t.push({type:"框选添加",data:A.list})})),A.getViewerImpl().getModelManager().addEventListener(Rc.ON_RECTPICK_REMOVE,(function(A){A.list&&t.push({type:"框选移除",data:A.list})})),this.getComponentAttribute=function(e,t){A.getComponentsAttributeByKey(e.key,(function(A){A&&t(A.attribute)}))},this.exitMeasure=function(){if(o.measurement){var A=document.getElementById("measurement"+i);A&&xh.fireEvent(A,"click")}},this.exitRoam=function(){if(o.roam){var A=document.getElementById("roam"+i);A&&(xh.fireEvent(A,"click"),o.roam=!1)}}},_d=function(A){return new Promise((function(e,t){var i=Object.assign({type:"get",cache:!0,headers:{"Content-type":"application/x-www-form-urlencoded"},data:null,async:!0,success:null,error:null,beforeSend:null,requestQueue:void 0},A),o=null;for(var n in(o=window.XMLHttpRequest?new XMLHttpRequest:new ActiveXObject("Microsoft.XMLHTTP")).onreadystatechange=function(){if(4===o.readyState||"4"===o.readyState){var A=o.status;A>=200&&300>A||0===A?(i.success&&i.success(o.response||o.responseText,""===o.responseType||"document"===o.responseType&&o.responseXML),e(o.response||o.responseText,""===o.responseType||"document"===o.responseType&&o.responseXML)):(i.error&&i.error(A,o.response||o.responseText,""===o.responseType||"document"===o.responseType&&o.responseXML),t(A,o.response||o.responseText,""===o.responseType||"document"===o.responseType&&o.responseXML))}},o.open(i.type,i.url,i.async),i.headers)o.setRequestHeader(n,i.headers[n]);i.responseType&&(o.responseType=i.responseType),i.requestQueue?i.requestQueue.addRequest(o,i.data):i.beforeSend?i.beforeSend(o,(function(){o.send(i.data)})):o.send(i.data)}))},$d=function(){var A=0,e=document.createElement("div");function t(A){return e.appendChild(A.dom),A}function i(t){for(var i=0;e.children.length>i;i++)e.children[i].style.display=i===t?"block":"none";A=t}e.style.cssText="position:fixed;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000",e.addEventListener("click",(function(t){t.preventDefault(),i(++A%e.children.length)}),!1);var o=(performance||Date).now(),n=o,r=0,a=t(new $d.Panel("FPS","#0ff","#002")),s=t(new $d.Panel("MS","#0f0","#020"));if(self.performance&&self.performance.memory)var l=t(new $d.Panel("MB","#f08","#201"));return i(0),{REVISION:16,dom:e,addPanel:t,showPanel:i,begin:function(){o=(performance||Date).now()},end:function(){r++;var A=(performance||Date).now();if(s.update(A-o,200),A>=n+1e3&&(a.update(1e3*r/(A-n),100),n=A,r=0,l)){var e=performance.memory;l.update(e.usedJSHeapSize/1048576,e.jsHeapSizeLimit/1048576)}return A},update:function(){o=this.end()},domElement:e,setMode:i}};$d.Panel=function(A,e,t){var i=1/0,o=0,n=Math.round,r=n(window.devicePixelRatio||1),a=80*r,s=48*r,l=3*r,c=2*r,h=3*r,d=15*r,p=74*r,g=30*r,u=document.createElement("canvas");u.width=a,u.height=s,u.style.cssText="width:80px;height:48px";var f=u.getContext("2d");return f.font="bold "+9*r+"px Helvetica,Arial,sans-serif",f.textBaseline="top",f.fillStyle=t,f.fillRect(0,0,a,s),f.fillStyle=e,f.fillText(A,l,c),f.fillRect(h,d,p,g),f.fillStyle=t,f.globalAlpha=.9,f.fillRect(h,d,p,g),{dom:u,update:function(s,m){i=Math.min(i,s),o=Math.max(o,s),f.fillStyle=t,f.globalAlpha=1,f.fillRect(0,0,a,d),f.fillStyle=e,f.fillText(n(s)+" "+A+" ("+n(i)+"-"+n(o)+")",l,c),f.drawImage(u,h+r,d,p-r,g,h,d,p-r,g),f.fillRect(h+p-r,d,r,g),f.fillStyle=t,f.globalAlpha=.9,f.fillRect(h+p-r,d,r,n((1-s/m)*g))}}};var Ap=function(A){this.viewer=A};Ap.prototype={construtor:Ap,destroy:function(){this.viewer=null},update:function(A){var e=this.getControl();e&&(e.update(A),this.viewer.render())},getControl:function(){for(var A=this.viewer.controlManager.tools,e=0;A.length>e;e+=1)if(A[e].getName()===Pc.CLIP_BY_BOX)return A[e];return null},setSectionBox:function(A,e){this.getControl().setSectionBox(A,e)},toggle:function(A,e){this.getControl().toggle(A,e)},setVisible:function(A){this.getControl().visible(A)},setRotatable:function(A){this.getControl().rotatable(A)},enablePick:function(A){this.getControl().enablePick=A},saveState:function(){return this.getControl().store()},loadState:function(A){this.getControl().restore(A)},reset:function(){this.viewer.getScene().resetClipPlanes()},recalculate:function(){return this.viewer.getFilter().getVisibleComponentsBbox()},setProcess:function(A,e){this.getControl().setProcess(A,e)},getProcess:function(A){return this.getControl().getProcess(A)}};var ep=function(A,e){H.call(this);var t={priority:5,pickableType:Qc.UnPickable,globalSpace:!1,hoverEnabled:!1};this.name=A;var i=uh.extend({},t,e);this.priority=i.priority,this.pickableType=i.pickableType,this.globalSpace=i.globalSpace,this.boundingBox=null,this.hoverEnabled=i.hoverEnabled};(ep.prototype=Object.create(H.prototype)).constructor=ep,Object.assign(ep,Ld),ep.prototype.removeByName=function(A){for(var e=this.children,t=0,i=e.length;i>t;t+=1)if(e[t].name===A){e.splice(t,1);break}},ep.prototype.clear=function(){this.children.length=0},ep.prototype.isGlobalSpace=function(){return this.globalSpace},ep.prototype.hasChild=function(A){for(var e=0,t=this.children.length;t>e;e+=1)if(this.children[e].name===A)return!0;return!1},ep.prototype.isPickable=function(){return this.pickableType!==Qc.UnPickable};var tp=function(A){this.viewer=A,this.viewportDIV=A.viewerImpl.getRenderer().domElement.parentElement,this.creatSVG=function(){document.getElementById("svgid"+this.viewer.getViewerImpl().uuid)||(this.svg=document.createElementNS("http://www.w3.org/2000/svg","svg"),this.svg.setAttribute("id","svgid"+this.viewer.getViewerImpl().uuid),this.svg.setAttribute("style","width: 100%; height: 100%; position:absolute; left: 0; top:0;"),this.viewportDIV.appendChild(this.svg))},this.creatRect=function(A){var e=A.data.left,t=A.data.top,i=A.data.width,o=A.data.height,n=A.data.visible;this.deleteRect(),n&&(this.rect=document.createElementNS("http://www.w3.org/2000/svg","rect"),this.rect.setAttribute("id","rectid"+this.viewer.getViewerImpl().uuid),this.rect.setAttribute("x",e),this.rect.setAttribute("y",t),this.rect.setAttribute("width",i),this.rect.setAttribute("height",o),this.rect.setAttribute("style","fill:#0DFFB2;stroke-width:2;stroke:rgb(0,255,0);fill-opacity:0.1;stroke-opacity:0.9"),this.svg.appendChild(this.rect))},this.deleteRect=function(){var A=document.getElementById("rectid"+this.viewer.getViewerImpl().uuid);A&&this.svg.removeChild(A)},this.deleteSVG=function(){if(this.svg){var A=document.getElementById("rectid"+this.viewer.getViewerImpl().uuid);A&&this.svg.removeChild(A),this.viewportDIV.removeChild(this.svg)}},this.creatMoveCircle=function(A){var e=A.x,t=A.y;this.circleMov=document.createElementNS("http://www.w3.org/2000/svg","circle"),this.circleMov.setAttribute("id","circleMove"+this.viewer.getViewerImpl().uuid),this.circleMov.setAttribute("cx",e),this.circleMov.setAttribute("cy",t),this.circleMov.setAttribute("r","5"),this.circleMov.setAttribute("style","fill:#500A11;stroke-width:2;stroke:rgb(0,255,0);fill-opacity:0.9;stroke-opacity:0.9"),this.svg.appendChild(this.circleMov)},this.changeMoveCircleStyle=function(A){var e=document.getElementById("circleMove"+this.viewer.getViewerImpl().uuid);e.setAttribute("cx",A[0]),e.setAttribute("cy",A[1]),e.setAttribute("style","fill:#00ff00;stroke-width:1;stroke:rgb(60,240,240);fill-opacity:0.9;stroke-opacity:0.9")},this.deleteCircle=function(){var A=document.getElementById("circleMove"+this.viewer.getViewerImpl().uuid);A&&this.svg.removeChild(A)},this.createMoveLine=function(A,e){var t=A.x,i=A.y,o=e.x,n=e.y;this.deleteMoveLine(),this.moveline=document.createElementNS("http://www.w3.org/2000/svg","line"),this.moveline.setAttribute("id","moveLine"+this.viewer.getViewerImpl().uuid),this.moveline.setAttribute("class","moveLine"),this.moveline.setAttribute("x1",t),this.moveline.setAttribute("y1",i),this.moveline.setAttribute("x2",o),this.moveline.setAttribute("y2",n),this.moveline.setAttribute("stroke","#0AEA06"),this.moveline.setAttribute("stroke-width","2"),this.svg.appendChild(this.moveline)},this.deleteMoveLine=function(){var A=document.getElementById("moveLine"+this.viewer.getViewerImpl().uuid);A&&this.svg.removeChild(A)},this.creatPickCircle=function(A,e){var t=A.x,i=A.y;this.circlePic=document.createElementNS("http://www.w3.org/2000/svg","circle"),this.circlePic.setAttribute("id","circlePick"+this.viewer.getViewerImpl().uuid+e),this.circlePic.setAttribute("class","circlePick"),this.circlePic.setAttribute("cx",t),this.circlePic.setAttribute("cy",i),this.circlePic.setAttribute("r","5"),this.circlePic.setAttribute("style","fill:#00ff00;stroke-width:1;stroke:rgb(60,240,240);fill-opacity:0.9;stroke-opacity:0.9"),this.svg.appendChild(this.circlePic)},this.creatLine=function(A,e,t,i){var o=A.x,n=A.y,r=e.x,a=e.y;this.line=document.createElementNS("http://www.w3.org/2000/svg","line"),this.line.setAttribute("id","pickline"+this.viewer.getViewerImpl().uuid+i),this.line.setAttribute("class","pickline"),this.line.setAttribute("x1",o),this.line.setAttribute("y1",n),this.line.setAttribute("x2",r),this.line.setAttribute("y2",a),this.line.setAttribute("stroke",t),this.line.setAttribute("stroke-width","2"),this.svg.appendChild(this.line)},this.deleteLineAndCircle=function(){for(var A=this.svg.getElementsByClassName("pickline"),e=this.svg.getElementsByClassName("circlePick");A.length;)this.svg.removeChild(A[A.length-1]);for(;e.length;)this.svg.removeChild(e[e.length-1])}};function ip(A,e){var t=A||0,i=e||0;return t===i?0:t>i?1:-1}function op(A,e){var t=A.split(".").map((function(A){return Number(A)||0})),i=e.split(".").map((function(A){return Number(A)||0}));return 0===(ip(t[0],i[0])||ip(t[1],i[1])||ip(t[2],i[2]))}function np(A,e){var t=A.split(".").map((function(A){return Number(A)||0})),i=e.split(".").map((function(A){return Number(A)||0}));return(ip(t[0],i[0])||ip(t[1],i[1])||ip(t[2],i[2]))>=0}function rp(A,e){var t=A.split(".").map((function(A){return Number(A)||0})),i=e.split(".").map((function(A){return Number(A)||0}));return(ip(t[0],i[0])||ip(t[1],i[1])||ip(t[2],i[2]))>0}function ap(A,e){return!np(A,e)}function sp(A,e){return!rp(A,e)}var lp=function(A,e){var i=this;this.viewer=A,this.preRotationHandle=e,this.mouseButtons={LEFT:t.LEFT,RIGHT:t.RIGHT},this.visible=!0,this.isAnimationFinish=!0,this.pickedColor=16763094,this.width=0,this.height=0,this.isDisable=!1;var o=null,n=null,r=0,a=1,l=2,c=220,h=150,d=80,p=1,g=2,u=5,f=6,m=3,C=4,v="Home",I="Bottom",E="Top",B="Left",x="Right",S="Front",w="Back",M="Bottom_Front",b="Bottom_Back",U="Bottom_Right",F="Bottom_Left",K="Top_Front",Q="Top_Back",R="Top_Right",T="Top_Left",k="LeftFront",D="LeftBack",L="RightFront",N="RightBack",O="Bottom_FrontRight",V="Bottom_FrontLeft",G="Bottom_BackLeft",P="Bottom_BackRight",q="Top_FrontRight",j="Top_FrontLeft",H="Top_BackLeft",W="Top_BackRight",J=new Y,z=new Ka(-h/2,h/2,h/2,-h/2,-h/2,h/2),Z=new Dd,X=new Xi,_=new Xi,$=new Xi;X.add(_),X.add($),this._cube=X;var AA=!1,eA=!1,tA=new s,iA=new s,oA=new s,nA=new s,rA=!1,aA="",sA=null,lA=-1,cA=!1;this.uninit=function(){this.removeDomEventListeners(),o&&(o.removeChild(n.domElement),o=null)},this.enable=function(){o&&n&&!n.domElement.parentNode&&(o.appendChild(n.domElement),this.addDomEventListeners())},this.disable=function(){o&&n&&n.domElement.parentNode&&(this.removeDomEventListeners(),o.removeChild(n.domElement))};!function(){var A=new ko({color:0,side:1}),e=new De;e.vertices.push(new y(-40,40,40),new y(40,40,40));var t=new Go(e,A);$.add(t);var i=new De;i.vertices.push(new y(40,40,40),new y(40,40,-40));var o=new Go(i,A);$.add(o);var n=new De;n.vertices.push(new y(40,40,-40),new y(-40,40,-40));var r=new Go(n,A);$.add(r);var a=new De;a.vertices.push(new y(-40,40,-40),new y(-40,40,40));var s=new Go(a,A);$.add(s);var l=new De;l.vertices.push(new y(-40,40,-40),new y(-40,-40,-40));var c=new Go(l,A);$.add(c);var h=new De;h.vertices.push(new y(40,40,-40),new y(40,-40,-40));var d=new Go(h,A);$.add(d);var p=new De;p.vertices.push(new y(40,40,40),new y(40,-40,40));var g=new Go(p,A);$.add(g);var u=new De;u.vertices.push(new y(-40,40,40),new y(-40,-40,40));var f=new Go(u,A);$.add(f);var m=new De;m.vertices.push(new y(-40,-40,40),new y(40,-40,40));var C=new Go(m,A);$.add(C);var v=new De;v.vertices.push(new y(40,-40,40),new y(40,-40,-40));var I=new Go(v,A);$.add(I);var E=new De;E.vertices.push(new y(40,-40,-40),new y(-40,-40,-40));var B=new Go(E,A);$.add(B);var x=new De;x.vertices.push(new y(-40,-40,-40),new y(-40,-40,40));var S=new Go(x,A);$.add(S);var w=new Aa;w.load(Pd.back,(function(A){var e=new Ue(new et(60,60),new jA({map:A,color:16777215,side:2}));e.position.set(0,40,0),e.rotation.x=.5*Math.PI,e.name="Back",_.add(e)})),w.load(Pd.front,(function(A){var e=new Ue(new et(60,60),new jA({map:A,color:16777215,side:2}));e.position.set(0,-40,0),e.rotation.x=.5*Math.PI,e.name="Front",_.add(e)})),w.load(Pd.left,(function(A){var e=new Ue(new et(60,60),new jA({map:A,color:16777215,side:2}));e.position.set(-40,0,0),e.rotation.y=.5*Math.PI,e.rotation.x=.5*Math.PI,e.name="Left",_.add(e)})),w.load(Pd.right,(function(A){var e=new Ue(new et(60,60),new jA({map:A,color:16777215,side:2}));e.position.set(40,0,0),e.rotation.y=.5*Math.PI,e.rotation.x=.5*Math.PI,e.name="Right",_.add(e)})),w.load(Pd.top,(function(A){var e=new Ue(new et(60,60),new jA({map:A,color:16777215,side:2}));e.position.set(0,0,40),e.name="Top",_.add(e)})),w.load(Pd.bottom,(function(A){var e=new Ue(new et(60,60),new jA({map:A,color:16777215,side:2}));e.position.set(0,0,-40),e.name="Bottom",_.add(e)}));var M=new Ne(10,60,10),b=new Ue(M,new jA({color:16777215}));b.position.set(35,0,35),b.name="Top_Front",_.add(b);var U=new Ue(M,new jA({color:16777215}));U.position.set(35,0,-35),U.name="Bottom_Front",_.add(U);var F=new Ue(M,new jA({color:16777215}));F.position.set(-35,0,35),F.name="Top_Back",_.add(F);var K=new Ue(M,new jA({color:16777215}));K.position.set(-35,0,-35),K.name="Bottom_Back",_.add(K);var Q=new Ne(60,10,10),R=new Ue(Q,new jA({color:16777215}));R.position.set(0,-35,35),R.name="Top_Left",_.add(R);var T=new Ue(Q,new jA({color:16777215}));T.position.set(0,-35,-35),T.name="Bottom_Left",_.add(T);var k=new Ue(Q,new jA({color:16777215}));k.position.set(0,35,35),k.name="Top_Right",_.add(k);var D=new Ue(Q,new jA({color:16777215}));D.position.set(0,35,-35),D.name="Bottom_Right",_.add(D);var L=new Ne(10,10,60),N=new Ue(L,new jA({color:16777215}));N.position.set(35,-35,0),N.name="LeftFront",_.add(N);var O=new Ue(L,new jA({color:16777215}));O.position.set(35,35,0),O.name="RightFront",_.add(O);var V=new Ue(L,new jA({color:16777215}));V.position.set(-35,-35,0),V.name="LeftBack",_.add(V);var G=new Ue(L,new jA({color:16777215}));G.position.set(-35,35,0),G.name="RightBack",_.add(G);var P=new Ne(10,10,10),q=new Ue(P,new jA({color:16777215}));q.position.set(35,-35,35),q.name="Top_FrontLeft",_.add(q);var j=new Ue(P,new jA({color:16777215}));j.position.set(35,-35,-35),j.name="Bottom_FrontLeft",_.add(j);var H=new Ue(P,new jA({color:16777215}));H.position.set(35,35,35),H.name="Top_FrontRight",_.add(H);var Y=new Ue(P,new jA({color:16777215}));Y.position.set(35,35,-35),Y.name="Bottom_FrontRight",_.add(Y);var W=new Ue(P,new jA({color:16777215}));W.position.set(-35,-35,35),W.name="Top_BackLeft",_.add(W);var J=new Ue(P,new jA({color:16777215}));J.position.set(-35,-35,-35),J.name="Bottom_BackLeft",_.add(J);var z=new Ue(P,new jA({color:16777215}));z.position.set(-35,35,35),z.name="Top_BackRight",_.add(z);var Z=new Ue(P,new jA({color:16777215}));Z.name="Bottom_BackRight",Z.position.set(-35,35,-35),_.add(Z)}(),J.add(X);var hA=function(A){eA=A;for(var e=A?.8:1,t=X.children,i=0;t.length>i;i+=1)for(var o=t[i].children,n=0;o.length>n;n+=1)o[n].material.transparent=A,o[n].material.opacity=e};hA(!1);var dA=function(){sA&&sA.material.color.set(sA.currentColor),sA=null},pA=function(A){if(void 0!==o){var e=xh.getDomOffsetToClient(o),t=new s;if(t.x=A.x-e.left,t.y=A.y-e.top,t.x>0&&i.width>t.x&&t.y>0&&i.height>t.y)return nA.x=t.x/i.width*2-1,nA.y=-t.y/i.height*2+1,!0}return!1},gA=function(){var A=new y(nA.x,nA.y,.5);Z.setFromCamera(A,z);var e,t=Z.intersectObjects(X.children[0].children);t?sA!==(e=t.object)&&(sA&&sA.material.color.set(sA.currentColor),(sA=e).currentColor=sA.material.color.clone(),""!==sA.name&&sA.material.color.set(i.pickedColor)):dA()};this.mouseUp=function(A){A.stopPropagation();var t=new s(A.clientX,A.clientY),o=pA(t);return AA?(AA=!1,iA.set(t.x,t.y),oA.subVectors(iA,tA),this.preRotationHandle&&!this.preRotationHandle()||(this.viewer.viewerImpl.rotateCamera(oA),tA.copy(iA))):o&&A.button===i.mouseButtons.LEFT&&sA&&(lA=-1,function(A){var e=-1;switch(A){case v:e=Uc.Home;break;case E:e=Uc.Top;break;case I:e=Uc.Bottom;break;case M:e=Uc.BottomFront;break;case b:e=Uc.BottomBack;break;case U:e=Uc.BottomRight;break;case F:e=Uc.BottomLeft;break;case O:e=Uc.BottomFrontRight;break;case V:e=Uc.BottomFrontLeft;break;case G:e=Uc.BottomBackLeft;break;case P:e=Uc.BottomBackRight;break;case K:e=Uc.TopFront;break;case Q:e=Uc.TopBack;break;case R:e=Uc.TopRight;break;case T:e=Uc.TopLeft;break;case q:e=Uc.TopFrontRight;break;case j:e=Uc.TopFrontLeft;break;case H:e=Uc.TopBackLeft;break;case W:e=Uc.TopBackRight;break;case S:e=Uc.Front;break;case w:e=Uc.Back;break;case B:e=Uc.Left;break;case x:e=Uc.Right;break;case k:e=Uc.FrontLeft;break;case D:e=Uc.BackLeft;break;case L:e=Uc.FrontRight;break;case N:e=Uc.BackRight}lA=e}(sA.name),-1!==lA&&(e(lA),null!=lA&&i.viewer.viewerImpl.rotateCameraByViewCubeSide(lA))),o},this.mouseMove=function(A){A.stopPropagation();var e=!1,t=new s(A.clientX,A.clientY),i=pA(t);if(AA)iA.set(t.x,t.y),oA.subVectors(iA,tA),this.preRotationHandle&&!this.preRotationHandle()||(this.viewer.viewerImpl.rotateCamera(oA),tA.copy(iA));else if(i){if(eA&&(hA(!1),e=!0),gA(),sA){if(""!==sA.name){var o=sA.name;aA!==o&&(aA=o,rA=!0,e=!0)}}else""!==aA&&(aA="",rA=!1,e=!0);e&&this.render(),cA=!0}else cA&&(cA=!1,rA&&(dA(),rA=!1,e=!0),e&&this.render());return i},this.mouseDown=function(A){A.preventDefault(),A.stopPropagation();var e=new s(A.clientX,A.clientY),t=pA(e);return t&&A.button===i.mouseButtons.LEFT&&(AA=!1),t},this.onMouseDownBinded=this.mouseDown.bind(this),this.onMouseMoveBinded=this.mouseMove.bind(this),this.onMouseUpBinded=this.mouseUp.bind(this),this.addDomEventListeners=function(){o&&(o.addEventListener("contextmenu",(function(A){A.preventDefault()}),!1),o.addEventListener("mousedown",this.onMouseDownBinded,!1),window.addEventListener("mousemove",this.onMouseMoveBinded,!1),o.addEventListener("mouseup",this.onMouseUpBinded,!1))},this.removeDomEventListeners=function(){o&&(o.removeEventListener("contextmenu",(function(A){A.preventDefault()}),!1),o.removeEventListener("mousedown",this.onMouseDownBinded,!1),window.removeEventListener("mousemove",this.onMouseMoveBinded,!1),window.removeEventListener("mouseup",this.onMouseUpBinded,!1))};var uA=function(A){switch(A){case r:i.width=c,i.height=c;break;case a:i.width=h,i.height=h;break;case l:default:i.width=d,i.height=d}o.style.width=i.width+"px",o.style.height=i.height+"px"};this.resize=function(A,e,t){uA(200>A||t?l:a),n.setSize(this.width,this.height)};this.init=function(A){(function(A){A.style.position="absolute",A.style.display="block",A.style.outline="0",A.style.right="52px",A.style.top="0px",A.style.opacity=".6",A.style.display="flex",A.style.webkitTransition="opacity .2s ease",A.style.mozTransition="opacity .2s ease",A.style.msTransform="opacity .2s ease",A.style.oTransform="opacity .2s ease",A.style.transition="opacity .2s ease"})(o=document.createElement("div")),A.appendChild(o),n=new $i({antialias:!0,alpha:!0,preserveDrawingBuffer:!0}),o.appendChild(n.domElement),this.resize(A.offsetWidth,A.offsetHeight,this.viewer.viewerImpl.isMobile),this.addDomEventListeners()};var fA=function(A,e,t){return A>e?t>=A-e:t>=e-A};this.render=function(){if(this.visible&&!this.isDisable&&n){var A=this.viewer.viewerImpl.getActiveCameraInfo(),e=A.quaternion.clone().inverse();this._cube.quaternion.copy(e),-1===lA&&(lA=function(A,e){var t=A.clone();t.normalize();var i=e.clone();if(i.normalize(),fA(t.x,0,1e-4)&&fA(t.y,-1,1e-4)&&fA(t.z,0,1e-4)&&fA(i.x,0,1e-4)&&fA(i.y,0,1e-4)&&fA(i.z,-1,1e-4))return p;if(fA(t.x,0,1e-4)&&fA(t.y,1,1e-4)&&fA(t.z,0,1e-4)){if(fA(i.x,0,1e-4)&&fA(i.y,0,1e-4)&&fA(i.z,1,1e-4))return g;if(fA(i.x,1,1e-4)&&fA(i.y,0,1e-4)&&fA(i.z,0,1e-4))return g}return fA(t.x,0,1e-4)&&fA(t.y,0,1e-4)&&fA(t.z,-1,1e-4)&&fA(i.x,0,1e-4)&&fA(i.y,1,1e-4)&&fA(i.z,0,1e-4)?u:fA(t.x,0,1e-4)&&fA(t.y,0,1e-4)&&fA(t.z,1,1e-4)&&fA(i.x,0,1e-4)&&fA(i.y,1,1e-4)&&fA(i.z,0,1e-4)?f:fA(t.x,-1,1e-4)&&fA(t.y,0,1e-4)&&fA(t.z,0,1e-4)&&fA(i.x,0,1e-4)&&fA(i.y,1,1e-4)&&fA(i.z,0,1e-4)?m:fA(t.x,1,1e-4)&&fA(t.y,0,1e-4)&&fA(t.z,0,1e-4)&&fA(i.x,0,1e-4)&&fA(i.y,1,1e-4)&&fA(i.z,0,1e-4)?C:-1}(A.dir,z.up)),n.autoClear=!0,n.render(J,z)}},this.destroy=function(){n.dispose(),this.disable()}},cp=function(A,e,t,i,o){kd.call(this,Ec.PERSPECTIVE,{width:e,height:t,fov:A,near:i,far:o}),this.realUp=this.up.clone(),this.target=new y,this.dirty=!1,this.orthoScale=1,this.positionPlane=new EA,this.projScreenMatrix=new M,this.viewProjInverse=new M,this.tempVector3=new y,this.frustum=new Ze};(cp.prototype=Object.create(kd.prototype)).constructor=cp,cp.prototype._updatePositionPlane=function(){this.positionPlane.setFromNormalAndCoplanarPoint(this.getWorldDirection(new y),this.position)},cp.prototype._updateFrustum=function(){this.frustum.setFromProjectionMatrix(this.projScreenMatrix)},cp.prototype.updateMVP=function(){this.dirty&&(null===this.parent&&this.updateMatrixWorld(),this.matrixWorldInverse.getInverse(this.matrixWorld),this.projScreenMatrix.multiplyMatrices(this.projectionMatrix,this.matrixWorldInverse),this.viewProjInverse.getInverse(this.projScreenMatrix),this._updateFrustum(),this._updatePositionPlane(),this.dirty=!1)},cp.prototype.getFrustum=function(){return this.dirty&&this.updateMVP(),this.frustum},cp.prototype.lookAtEx=function(A,e,t,i){var o=new y;o.copy(e),void 0!==i&&"number"==typeof i&&o.setLength(i),this.position.subVectors(A,o),this.up.copy(t),this.lookAt(A),this.realUp.copy(t),this.target.copy(A),this.dirty=!0},cp.prototype.lookAtEXForTargetPositionUp=function(A,e,t){this.position.copy(e),this.up=t,this.lookAt(A),this.realUp=t.clone(),this.target=A.clone(),this.dirty=!0},cp.prototype.clone=function(){var A=new cp(2*this.right,2*this.top,this.fov,this.near,this.far);return A.position.copy(this.position),A.quaternion.copy(this.quaternion),A.scale.copy(this.scale),A.up.copy(this.up),A.realUp.copy(this.realUp),A.target.copy(this.target),A.aspect=this.aspect,A.fov=this.fov,A.near=this.near,A.far=this.far,A.left=this.left,A.right=this.right,A.top=this.top,A.bottom=this.bottom,A.zoom=this.zoom,A.isPerspective=this.isPerspective,A.updateProjectionMatrix(),A.updateMVP(),A},cp.prototype.copy=function(A){return kd.prototype.copy.call(this,A),this.realUp.copy(A.realUp),this.orthoScale=A.orthoScale,this.dirty=A.dirty,this.updateProjectionMatrix(),this.updateMVP(),this},cp.prototype.setStandardView=function(A,e){var t=null,i=null;e?(t=e.getCenter(new y),i=e.getSize(new y)):t=new y(0,0,0);var o=vc.SceneSize,n=o/2;switch(i||(i=n),A){case Uc.ISO:var r=new y(-o,o,o),a=new y,s=new y(0,0,0);a.subVectors(s,r),this.lookAtEx(t,a,H.DefaultUp);break;case Uc.Top:this.lookAtEx(t,new y(0,0,-1),new y(0,1,0),i?i.x:n);break;case Uc.Bottom:this.lookAtEx(t,new y(0,0,1),new y(0,1,0),i?i.x:n);break;case Uc.Front:this.lookAtEx(t,new y(0,1,0),new y(0,0,1),i?i.z:n);break;case Uc.Back:this.lookAtEx(t,new y(0,-1,0),new y(0,0,1),i?i.z:n);break;case Uc.Right:this.lookAtEx(t,new y(-1,0,0),new y(0,0,1),i?i.y:n);break;case Uc.Left:this.lookAtEx(t,new y(1,0,0),new y(0,0,1),i?i.y:n);break;case Uc.FrontRight:this.lookAtEx(t,new y(-1,1,0),new y(0,0,1),i?i.x+i.y:n);break;case Uc.FrontLeft:this.lookAtEx(t,new y(1,1,0),new y(0,0,1),i?i.x+i.y:n);break;case Uc.BackLeft:this.lookAtEx(t,new y(1,-1,0),new y(0,0,1),i?i.x+i.y:n);break;case Uc.BackRight:this.lookAtEx(t,new y(-1,-1,0),new y(0,0,1),i?i.x+i.y:n);break;case Uc.BottomFront:this.lookAtEx(t,new y(0,1,1),new y(0,0,1),i?i.x+i.z:n);break;case Uc.BottomBack:this.lookAtEx(t,new y(0,-1,1),new y(0,0,1),i?i.x+i.z:n);break;case Uc.BottomRight:this.lookAtEx(t,new y(-1,0,1),new y(0,0,1),i?i.y+i.z:n);break;case Uc.BottomLeft:this.lookAtEx(t,new y(1,0,1),new y(0,0,1),i?i.y+i.z:n);break;case Uc.BottomFrontRight:this.lookAtEx(t,new y(-1,1,1),new y(0,0,1),i?i.x+i.y+i.z:n);break;case Uc.BottomFrontLeft:this.lookAtEx(t,new y(1,1,1),new y(0,0,1),i?i.x+i.y+i.z:n);break;case Uc.BottomBackLeft:this.lookAtEx(t,new y(1,-1,1),new y(0,0,1),i?i.x+i.y+i.z:n);break;case Uc.BottomBackRight:this.lookAtEx(t,new y(-1,-1,1),new y(0,0,1),i?i.x+i.y+i.z:n);break;case Uc.TopFront:this.lookAtEx(t,new y(0,1,-1),new y(0,0,1),i?i.x+i.z:n);break;case Uc.TopBack:this.lookAtEx(t,new y(0,-1,-1),new y(0,0,1),i?i.x+i.z:n);break;case Uc.TopRight:this.lookAtEx(t,new y(-1,0,-1),new y(0,0,1),i?i.y+i.z:n);break;case Uc.TopLeft:this.lookAtEx(t,new y(1,0,-1),new y(0,0,1),i?i.y+i.z:n);break;case Uc.TopFrontRight:this.lookAtEx(t,new y(-1,1,-1),new y(0,0,1),i?i.x+i.y+i.z:n);break;case Uc.TopFrontLeft:this.lookAtEx(t,new y(1,1,-1),new y(0,0,1),i?i.x+i.y+i.z:n);break;case Uc.TopBackLeft:this.lookAtEx(t,new y(1,-1,-1),new y(0,0,1),i?i.x+i.y+i.z:n);break;case Uc.TopBackRight:this.lookAtEx(t,new y(-1,-1,-1),new y(0,0,1),i?i.x+i.y+i.z:n);break;case Uc.TopToRight:this.lookAtEx(t,new y(0,1,0),new y(-1,0,0),n);break;case Uc.TopToBack:this.lookAtEx(t,new y(0,1,0),new y(0,0,1),n);break;case Uc.TopToLeft:this.lookAtEx(t,new y(0,1,0),new y(1,0,0),n);break;case Uc.TopToFront:this.lookAtEx(t,new y(0,1,0),new y(0,0,-1),n);break;case Uc.BottomToRight:this.lookAtEx(t,new y(0,-1,0),new y(-1,0,0),n);break;case Uc.BottomToBack:this.lookAtEx(t,new y(0,-1,0),new y(0,0,-1),n);break;case Uc.BottomToFront:this.lookAtEx(t,new y(0,-1,0),new y(0,0,1),n);break;case Uc.BottomToLeft:this.lookAtEx(t,new y(0,-1,0),new y(1,0,0),n);break;case Uc.FrontToTop:this.lookAtEx(t,new y(0,0,-1),new y(0,-1,0),n);break;case Uc.FrontToBottom:this.lookAtEx(t,new y(0,0,-1),new y(0,1,0),n);break;case Uc.FrontToLeft:this.lookAtEx(t,new y(0,0,-1),new y(1,0,0),n);break;case Uc.FrontToRight:this.lookAtEx(t,new y(0,0,-1),new y(-1,0,0),n);break;case Uc.RightToTop:this.lookAtEx(t,new y(-1,0,0),new y(0,-1,0),n);break;case Uc.RightToBottom:this.lookAtEx(t,new y(-1,0,0),new y(0,1,0),n);break;case Uc.RightToFront:this.lookAtEx(t,new y(-1,0,0),new y(0,0,-1),n);break;case Uc.RightToBack:this.lookAtEx(t,new y(-1,0,0),new y(0,0,1),n);break;case Uc.BackToTop:this.lookAtEx(t,new y(0,0,1),new y(0,-1,0),n);break;case Uc.BackToBottom:this.lookAtEx(t,new y(0,0,1),new y(0,1,0),n);break;case Uc.BackToLeft:this.lookAtEx(t,new y(0,0,1),new y(-1,0,0),n);break;case Uc.BackToRight:this.lookAtEx(t,new y(0,0,1),new y(1,0,0),n);break;case Uc.LeftToTop:this.lookAtEx(t,new y(1,0,0),new y(0,0,-1),n);break;case Uc.LeftTopBottom:this.lookAtEx(t,new y(1,0,0),new y(0,1,0),n);break;case Uc.LeftTopBack:this.lookAtEx(t,new y(1,0,0),new y(0,0,1),n);break;case Uc.LeftTopFront:this.lookAtEx(t,new y(1,0,0),new y(0,0,-1),n);break;case Uc.Keep:break;default:this.lookAtEx(t,new y(-1,-1,-1),new y(0,0,1),n)}return this.updateProjectionMatrix(),t},cp.prototype.zoomToBox=function(A,e,t,i){t=t||1,e=-1>(e=e||0)?-1:e;var o=new aA;if(o.copy(A),0!==e){var n=.5*A.getSize(new y).length(),r=new y;r.subVectors(o.max,o.min).normalize(),r.multiplyScalar(n*e),o.expandByVector(r)}var s=i||this.getWorldDirection(new y),l=this.up,c=this.aspect,h=a.degToRad(.5*this.fov),d=o.getSize(new y),p=o.getCenter(new y),g=.5*d.length()/Math.sin(h)*t,u=new y;u.copy(s),u.setLength(g);var f=new y;f.subVectors(p,u);var m=new y;m.crossVectors(s,l),m.normalize();var C=new y;C.crossVectors(s,m),C.normalize();var v=new EA;v.setFromNormalAndCoplanarPoint(m,f);var I=new EA;I.setFromNormalAndCoplanarPoint(C,f);var E=0,B=0,x=0,S=0,w=0,M=[new y,new y,new y,new y,new y,new y,new y,new y];M[0].set(o.min.x,o.min.y,o.min.z),M[1].set(o.min.x,o.min.y,o.max.z),M[2].set(o.min.x,o.max.y,o.min.z),M[3].set(o.min.x,o.max.y,o.max.z),M[4].set(o.max.x,o.min.y,o.min.z),M[5].set(o.max.x,o.min.y,o.max.z),M[6].set(o.max.x,o.max.y,o.min.z),M[7].set(o.max.x,o.max.y,o.max.z);for(var b=0;8>b;b+=1){var U=new y;U.subVectors(M[b],f);var F=Math.abs(U.dot(s)),K=Math.abs(I.distanceToPoint(M[b])),Q=K*c,R=Math.abs(v.distanceToPoint(M[b])),T=Math.max(K,R/c),k=Math.max(Q,R);T>E&&(E=T),B&&x&&B*F/x>=T||(B=T,x=F),S&&w&&S*F/w>=k||(S=k,w=F)}var D=S/Math.tan(h)+(g-w),L=B/Math.tan(h)+(g-x),N=0;if(N=1>c?Math.max(D,L):Math.min(D,L),this.near>N){this.near=(N*N+.001*N)/16777.216}if(u.copy(s).normalize().setLength(N),f.subVectors(p,u),this.position.copy(f),this.lookAt(p),this.target.copy(p),!this.isPerspective){var O=Math.tan(this.fov*Math.PI/180/2)*N;this.orthoScale=O/E,this.zoom=this.orthoScale}return this.updateProjectionMatrix(),this.dirty=!0,p},cp.prototype.computeRay=function(A,e,t){var i=new s;if(void 0===t)i.x=window.innerWidth,i.y=window.innerHeight;else{var o=t===document?t.body:t;i.x=o.offsetWidth,i.y=o.offsetHeight}var n=new s;n.x=A/i.x*2-1,n.y=-e/i.y*2+1;var r=new CA;return this.isPerspective?(r.origin.copy(this.position),r.direction.set(n.x,n.y,.5).unproject(this).sub(this.position).normalize()):(r.origin.set(n.x,n.y,-1).unproject(this),r.direction.set(0,0,-1).transformDirection(this.matrixWorld)),r},cp.prototype.screenToWorld=function(A,e,t,i){var o=this.computeRay(A,e,t),n=this.getWorldDirection(new y).normalize(),r=new EA(n);return r.setFromNormalAndCoplanarPoint(n,i),o.intersectPlane(r,i)},cp.prototype.getWorldFrustum=function(A){var e=new M,t=new Ze,i=this.clone(),o=this.target,n=o.clone().sub(this.position).length(),r=new M;r.getInverse(A);var a=new M;a.extractRotation(A);var s=new f;s.setFromRotationMatrix(a),s.inverse(),i.position.applyMatrix4(r);var l=o.clone();l.applyMatrix4(r);var c=l.clone().sub(i.position),h=c.length();return c.normalize(),i.far=this.far*(h/n),i.up.applyQuaternion(s).normalize(),i.realUp.applyQuaternion(s).normalize(),i.updateProjectionMatrix(),i.updateMatrixWorld(),e.getInverse(i.matrixWorld),t.setFromMatrix((new M).multiplyMatrices(i.projectionMatrix,e)),i=null,t},cp.prototype.distanceFromWorldToDrawing=function(A,e){var t=this.position.clone(),i=this.target.clone();i.subVectors(this.target,this.position),i.normalize();var o=new M;return o.getInverse(A),i.add(t).applyMatrix4(o),t.applyMatrix4(o),i.sub(t),i.normalize().multiplyScalar(e),i.add(t).applyMatrix4(A),i.sub(this.position),i.length()},cp.drawingToWorld=function(A,e){var t=A.position.clone(),i=A.target.clone(),o=A.up.clone(),n=new M;return n.getInverse(e),o.add(t),o.applyMatrix4(n),t.applyMatrix4(n),i.applyMatrix4(n),o.sub(t),o.normalize(),{position:t,target:i,up:o}},cp.worldToDrawing=function(A,e){var t=A.position.clone(),i=A.target.clone(),o=A.up.clone();return o.add(t),o.applyMatrix4(e),t.applyMatrix4(e),i.applyMatrix4(e),o.sub(t),o.normalize(),{position:t,target:i,up:o}};var hp=function(){var A=this,e=null,t={},i={},o=1e3,n=null,r=null,a=null,s=!1,l=null,c=null,h=null;this.from=function(A){for(var i in e=A)e.hasOwnProperty(i)&&(t[i]=e[i]);return this},this.to=function(A,e){return void 0!==e&&(o=e),i=A,this},this.onStart=function(A){return l=A,this},this.onUpdate=function(A){return c=A,this},this.onComplete=function(A){return h=A,this},this.start=function(A,d){s=!1,r&&cancelAnimationFrame(r),n=Date.now(),a=d?this.linearInterpolateForTargetPostionUp:this.interpolate,r=requestAnimationFrame((function d(){var p=t,g=i,u=Date.now();!1===s&&(null!==l&&l(e),s=!0);var f=(u-n)/o;e=a(p,g,f=f>1?1:f),1===f?(cancelAnimationFrame(r),null!==h&&h(e)):(r=requestAnimationFrame(d,A),null!==c&&c(e,f))}),A)},this.isAngleGreaterThanPi=function(A,e,t){var i=new y;return i.crossVectors(A,e),0>i.dot(t)},this.conicInterpolate=function(A,e,t,i){var o=-e.angleTo(A)*i,n=new y;n.crossVectors(e,A).normalize();var r=new f;r.setFromAxisAngle(n,o),t.copy(A),t.applyQuaternion(r)},this.quaternionInterpolate=function(A,e,t,i,o){var n=new f(A.x,A.y,A.z,1).normalize(),r=new f(e.x,e.y,e.z,1).normalize(),a=new f(0,0,0,1),s=new f(0,0,0,1),l=new y;l.crossVectors(A,t).normalize(),a.set(l.x,l.y,l.z,1).normalize();.5>o?(f.slerp(n,a,s,2*o),i.set(s.x,s.y,s.z)):(f.slerp(a,r,s,2*(o-.5)),i.set(s.x,s.y,s.z))},this.slerpInterpolate=function(A,e,t,i,o,n){var r=A.dot(e);r>n?i.copy(e):no?t.copy(e):-s>o?(o>Math.abs(A.dot(r))?a.crossVectors(A,r).normalize():a.crossVectors(A,n).normalize(),.5>i?t.lerpVectors(A,a,2*i):t.lerpVectors(a,e,2*(i-.5))):t.lerpVectors(A,e,i),t.normalize()}},this.linearInterpolatePosition=function(A,e,t,i){t.lerpVectors(A,e,i)},this.sphericalInterpolate=function(A,e,t,i,o,n){var r=A.clone().sub(e),a=t.clone().sub(i),s=new Os;s.setFromVector3(r);var l=new Os;l.setFromVector3(a);var c=s.theta+(l.theta-s.theta)*n,h=s.phi+(l.phi-s.phi)*n,d=r.length(),p=new Os;p.set(d,h,c);var g=new y;g.setFromSpherical(p),o.copy(g).multiplyScalar(-1)},this.interpolate=function(e,t,i){var o=new y,n=new y,r=new y,a=new y,s=e.animTarget,l=e.animUp,c=e.animFocal,h=t.animTarget,d=t.animUp,p=t.animFocal;return A.sphericalInterpolate(e.animPos,s,t.animPos,h,o,i),A.linearInterpolate(l,d,n,i,.9995),A.linearInterpolatePosition(s,h,r,i),A.linearInterpolatePosition(c,p,a,i),{animDir:o,animUp:n,animFocal:a,animTarget:r}},this.linearInterpolateForTargetPostionUp=function(e,t,i){var o=new y,n=new y,r=new y,a=e.animTarget,s=e.animPosition,l=t.animTarget,c=t.animPosition;return A.linearInterpolate(e.animUp,t.animUp,n,i,.9995),A.linearInterpolatePosition(a,l,r,i),A.linearInterpolatePosition(s,c,o,i),{animPosition:o,animUp:n,animTarget:r}}},dp=function(){var A=800,e=14,t=new hp;this.setDuration=function(e){A=e},this.getDuration=function(){return A},this.setFrameTime=function(A){e=A},this.setStandardView=function(i,o,n,r,a,s){var l=o.camera,c=l.position.clone(),h=l.target.clone(),d=l.getWorldDirection(new y);d.normalize();var p=new y;p.copy(l.realUp||l.up),p.normalize();var g=new y(l.position.clone().sub(h).length(),0,0),u=l.setStandardView(i,n);u=o.camera.zoomToBox(n,r);var f=l.position.clone(),m=l.getWorldDirection(new y);m.normalize();var C=new y;C.copy(l.realUp||l.up),C.normalize();var v=new y(l.position.clone().sub(u).length(),0,0);d.equals(m)&&p.equals(C)&&h.equals(u)&&g.equals(v)?s&&s():(o.getControlManager().setInteractiveState(!1),t.from({animPos:c,animDir:d,animUp:p,animTarget:h,animFocal:g}).to({animPos:f,animDir:m,animUp:C,animTarget:u,animFocal:v},A).onUpdate((function(A){o.camera.lookAtEx(A.animTarget,A.animDir,A.animUp,A.animFocal.x),o.cameraControl.update(!0,!0),o.controlManager.dispatchEvent({type:Rc.ON_CAMERA_ANIMATION_UPDATE}),a&&a()})).onComplete((function(){o.camera.lookAtEx(u,m,C,v.x),o.cameraControl.update(!0,!0),s&&s(),o.getControlManager().setInteractiveState(!0)})).start(e))},this.active=function(i,o,n,r,a){var s=n.camera,l=new y(i.position.x,i.position.y,i.position.z),c=new y(i.target.x,i.target.y,i.target.z),h=new y(c.distanceTo(l),0,0),d=c.clone().sub(l).normalize(),p=new y(i.up.x,i.up.y,i.up.z);p.normalize();var g=new y(o.position.x,o.position.y,o.position.z),u=new y(o.target.x,o.target.y,o.target.z),f=new y(u.distanceTo(g),0,0),m=u.clone().sub(g).normalize(),C=new y(o.up.x,o.up.y,o.up.z);C.normalize(),d.equals(m)&&p.equals(C)&&c.equals(u)&&h.equals(f)?a&&a():(n.getControlManager().setInteractiveState(!1),t.from({animPos:l,animDir:d,animUp:p,animTarget:c,animFocal:h}).to({animPos:g,animDir:m,animUp:C,animTarget:u,animFocal:f},A).onUpdate((function(A){var e=A.animTarget;s.lookAtEx(e,A.animDir,A.animUp,A.animFocal.x),r&&r(e)})).onComplete((function(){s.lookAtEx(u,m,C,f.x),r&&r(u),a&&a(),n.getControlManager().setInteractiveState(!0)})).start(e))},this.slerpFlyTo=function(i,o,n,r){var a=o.camera,s=a.position.clone(),l=a.getWorldDirection(new y),c=new y;c.copy(a.realUp||a.up),c.normalize();var h=a.target.clone(),d=new y(a.position.clone().sub(h).length(),0,0),p=(new y).set(i.position.x,i.position.y,i.position.z),g=(new y).set(i.target.x,i.target.y,i.target.z),u=(new y).set(i.up.x,i.up.y,i.up.z),f=g.clone().sub(p),m=new y(f.length(),0,0);f.normalize();var C=u.normalize();l.equals(f)&&c.equals(C)&&h.equals(g)&&d.equals(m)?r&&r():t.from({animPos:s,animDir:l,animUp:c,animTarget:h,animFocal:d}).to({animPos:p,animDir:f,animUp:C,animTarget:g,animFocal:m},A).onUpdate((function(A){var e=A.animTarget;a.lookAtEx(e,A.animDir,A.animUp,A.animFocal.x),n&&n(e)})).onComplete((function(){a.lookAtEx(g,f,C,m.x),n&&n(g),r&&r(),o.getControlManager().setInteractiveState(!0)})).start(e)},this.flyTo=this.slerpFlyTo,this.linearFlyTo=function(i,o,n,r){var a=o.camera,s=new y;s.copy(a.realUp||a.up),s.normalize();var l=a.target.clone(),c=a.position.clone(),h=(new y).set(i.position.x,i.position.y,i.position.z),d=(new y).set(i.target.x,i.target.y,i.target.z),p=(new y).set(i.up.x,i.up.y,i.up.z).normalize();c.equals(h)&&s.equals(p)&&l.equals(d)?r&&r():t.from({animPosition:c,animUp:s,animTarget:l}).to({animPosition:h,animUp:p,animTarget:d},A).onUpdate((function(A){var e=A.animTarget;a.lookAtEXForTargetPositionUp(e,A.animPosition,A.animUp),n&&n(e)})).onComplete((function(){a.lookAtEXForTargetPositionUp(d,h,p),n&&n(d),r&&r(),o.getControlManager().setInteractiveState(!0)})).start(e,!0)},this.linearActive=function(i,o,n,r,a){var s=n.camera,l=(new y).set(i.position.x,i.position.y,i.position.z),c=(new y).set(i.target.x,i.target.y,i.target.z),h=(new y).set(i.up.x,i.up.y,i.up.z);h.normalize();var d=(new y).set(o.position.x,o.position.y,o.position.z),p=(new y).set(o.target.x,o.target.y,o.target.z),g=(new y).set(o.up.x,o.up.y,o.up.z).normalize();l.equals(d)&&h.equals(g)&&c.equals(p)?a&&a():t.from({animPosition:l,animUp:h,animTarget:c}).to({animPosition:d,animUp:g,animTarget:p},A).onUpdate((function(A){var e=A.animTarget;s.lookAtEXForTargetPositionUp(e,A.animPosition,A.animUp),r&&r(e)})).onComplete((function(){s.lookAtEXForTargetPositionUp(p,d,g),r&&r(p),a&&a(),n.getControlManager().setInteractiveState(!0)})).start(e,!0)}},pp=function(){this.condition=[{type:"IfcWall"},{type:"IfcRoof"},{type:"IfcWallStandardCase"},{type:"IfcDoor"},{type:"墙"},{type:"门"}],this.distance=150,this.factor=1};pp.prototype.setCondition=function(A){Array.isArray(A)&&(this.condition=A)},pp.prototype.getCondition=function(){return this.condition},pp.prototype.getDistance=function(){return this.distance},pp.prototype.getFactor=function(){return this.factor},pp.prototype.setDistance=function(A){"number"==typeof A&&(this.distance=A)},pp.prototype.setFactor=function(A){"number"==typeof A&&(this.factor=A)},pp.prototype.matchConditions=function(A){var e=this.condition;if(0===e.length)return!1;for(var t=!0,i=0,o=e.length;o>i;i+=1){var n=e[i];for(var r in n)if(!A.hasOwnProperty(r)||A[r]!==n[r]){t=!1;break}if(!0===t)break;e.length-1>i&&(t=!0)}return t},pp.prototype.hasCollision=function(A,e){return!!A&&(this.matchConditions(A)&&this.distance*this.factor>=e)};var gp={MODEL:"Model",GEOMETRY:"Geometry",LINESEGMENTS:"LineSegments",INSTANCEGEOMETRY:"InstanceGeometry",INSTANCEWIREFRAMEGEOMETRY:"InstanceWireframeGeometry",WIREFRAME:"Wireframe",MARKER3D:"Marker3D",CLIPPLANE:"ClipPlane",FILLCLIPPLANE:"FillClipPlane",IBLCUBE:"IBLCube",CUSTOMPLANE:"CustomPlane",PIVOTBALL:"PivotBall",MEASUREPICKPOINT:"MeasurePickPoint",MEASUREPICKLINE:"MeasurePickLine",MEASUREPLANE:"MeasurePlane",MEASURELINE:"MeasureLine",OCTREENODE:"OctreeNode",AREANODE:"AreaNode",AXISNET:"AxisNet",AXISGRIDMANAGER:"AxisGridManager",EXTRUDEBODYMANAGER:"ExtrudeBodyManager",EXTERNALSCENEMANAGER:"ExternalSceneManager",EXTERNALCOMPONENTMANAGER:"ExternalComponentManager",TRANSFORM:"TRANSFORM",RECEIVESHADOWPLANE:"ReceiveShadowPlane"},up=function(){this.scene=null,this.camera=null,this.octreeRoots=null,this.octantMap=null,this.mouse=new s},fp=function(A){this.raycaster=new Dd,this.viewer=A,this.filter=A.getFilter(),this.recursive=!0,this.lastIntersect=null,this.highPriorities=[gp.EXTRUDEBODYMANAGER]};fp.prototype.destroy=function(){this.viewer=null,this.filter=null,this.raycaster=null,this.lastIntersect=null,this.highPriorities=null},fp.prototype.intersectExternalComponent=function(A,e,t,i,o){if(A.visible||o){for(var n=this.raycaster,r=this.filter,a=function A(e){var t=e,i=[];if(t.isGroup)for(var o=0,a=t.children.length;a>o;o+=1){var s=A(t.children[o]);i=i.concat(s)}else r._isPickable({userId:t.key})&&t.raycast(n,i);return i},s={},l=0,c=A.children.length;c>l;l+=1){var h=A.children[l],d=a(h);if(d.length>0){d.sort((function(A,e){return A.distance-e.distance})),d[0].userId=h.key;var p=s[h.key];p?p.distance>d[0].distance&&(s[h.key]=d[0]):s[h.key]=d[0]}}var g=[],u=Object.values(s);if(u.length>0)for(var f=0;u.length>f;f+=1)u[f].distance>t.far||t.near>u[f].distance||this.viewer.clipPoint(u[f].point)||g.push(u[f]);return i?g:(g.sort((function(A,e){return A.distance-e.distance})),g.length>0?g[0]:null)}},fp.prototype.defaultIntersect=function(A,e,t,i,o){if(A.visible||o){var n=[],r=this.raycaster;!function A(e){for(var t=0,i=e.children.length;i>t;t+=1){var o=e.children[t];o.isGroup?A(o):o.raycast(r,n)}}(A);var a=[];if(n.length>0)for(var s=0;n.length>s;s+=1)n[s].distance>t.far||t.near>n[s].distance||this.viewer.clipPoint(n[s].point)||a.push(n[s]);return i?a:(a.sort((function(A,e){return A.distance-e.distance})),a.length>0?a[0]:null)}},fp.prototype.intersectMeshesWithDistance=function(A,e,t,i,o,n,r,a){if(!e||!e.mesh)return null;var s=0,l=uh.MinusEpsilon,c=this.raycaster,h=[],d=this.filter,p=d._hasVisibleFilter(),g=d._hasPickableFilter(),u=this.viewer.modelManager,f=function(A,e){var t=u.isHiddenSourceObjectUserId(A.userId);if(e){if(p&&!d._isVisible(A)||g&&!d._isPickable(A)||t)return!0}else if(p&&!d._isVisible(A)||t)return!0;return!1};!0===this.byGravity?i.near=0:i.near+=l;var m=e.info,C=e.mesh,y=[];if(Bh.time("kdNode Pick"),o&&n&&!n.explosioning){var v=[],I=new M;I.getInverse(n.getModelMatrix());var E=c.ray.clone().applyMatrix4(I);if(Array.isArray(o))for(var B=new M,x=0;o.length>x;x+=1){var S=o[x],w=S.modelKey,b=E;if(w)B.getInverse(n.subModel[w]),b=E.clone().applyMatrix4(B);S.intersect(b,v)}else o.intersect(E,v);y=uh.unique(v)}else y=n.getComponentlist();Bh.timeEnd("kdNode Pick");var U=Object.keys(n.manager.explosionList);if(n&&n.manager&&U.length>0&&(y=y.concat(U),y=uh.unique(y)),Object.keys(u.transformComponent).length>0){for(var F in u.transformComponent)y.push(F);y=uh.unique(y)}var K=this.viewer.modelManager.getMatrixWorldGlobal();Bh.time("Box Pick");for(var Q=0,R=y.length;R>Q;Q+=1){var T=m[y[Q]];if(T){var k=T[0];if(k){var D=k.boundingBox.clone();if(D.applyMatrix4(n.getModelMatrix()).applyMatrix4(K),(s=c.ray.intersectBoxWithDistance(D))>=i.near&&i.far>=s)for(var L=0,N=T.length;N>L;L+=1){var O=T[L];if(!f(O,t)){var V=C[this.viewer.modelManager.getMeshIdFromOctantMap(O)];if(V)for(var G=0,P=V.length;P>G;G+=1)h.push({object:V[G],distance:s,nodeInfo:O})}}}}}Bh.timeEnd("Box Pick"),Bh.time("Ending Pick"),h.sort((function(A,e){return A.distance-e.distance}));for(var q=[],j=0;h.length>j;j+=1)h[j].distance>i.far||i.near>h[j].distance||h[j].object.raycast(c,h[j].nodeInfo,i,this.viewer,q,a);return q.sort((function(A,e){return A.distance-e.distance})),a?q:(Bh.timeEnd("Ending Pick"),q.length>0?q[0]:null)},fp.prototype.intersect=function(A,e,t,i){var o=this.raycaster;null===e?o.setFromCamera(A.mouse,A.camera):o.set(e.origin,e.direction);Bh.time("intersect time"),o.camera=A.camera,o._camera=A.camera,o.viewportSize=A.viewportSize;var n=new y;A.camera.getWorldDirection(n);for(var r=n.dot(o.ray.direction),a={near:A.camera.near/Math.abs(r),far:A.camera.far/Math.abs(r)},s=null,l=[],c=A.scene.getGroups(),h=0;c.length>h;h+=1)if(c[h].isPickable()&&0!==c[h].children.length){var d=A.scene.getGroupType(c[h].name),p=d.groupType,g=d.modelKey;if(-10){l.sort((function(A,e){return A.distance-e.distance}));for(var m=0;f>m;m+=1){var C=(s=l[m]).object;if(C.geometry)return s.userId=s.userId||C.key,s.modelKey=C.modelKey,this.lastIntersect=s,s}}return this.lastIntersect={intersect:s,pickable:t},null},fp.prototype.getObjectsByClientCoordinates=function(A){var e=this.viewer.cameraControl.getIntersectContext(A),t=this.raycaster;return t.setFromCamera(e.mouse,e.camera),t.camera=e.camera,t.viewportSize=e.viewportSize,this.getObjectsByRaycaster(e,t)},fp.prototype.getObjectsByRaycaster=function(A,e,t){this.raycaster=e;for(var i={near:t?0:A.camera.near,far:t?1/0:A.camera.far},o=[],n=A.scene.getGroups(),r=0;n.length>r;r+=1)if(n[r].isPickable()&&0!==n[r].children.length){var a=[],s=A.scene.getGroupType(n[r].name);switch(s.groupType){case gp.MODEL:var l=s.modelKey,c=this.viewer.modelManager.getModel(l);c&&c.isDataReady()&&c.isVisible()&&(a=this.intersectMeshesWithDistance([],A.octantMap[l],!1,i,c.kdTreeNode,c),o=o.concat(a));break;case gp.GEOMETRY:break;default:a=this.defaultIntersect(n[r],!1,i,!0),o=o.concat(a)}}return o.sort((function(A,e){return A.distance-e.distance})),o},fp.prototype.hitTest=function(A){var e=this.intersect(A,null,!1);return null!==e?e.point:null},fp.prototype.pick=function(A,e){var t=this.intersect(A,null,!0);return e&&e(t),t},fp.prototype.getIntersectByRay=function(A,e){return this.intersect(A,e,!0)};var mp=function(A,e,t,i){this.viewer=A,this.camera=e,this.domElement=t,this.scene=A.getScene(),this.intersector=new fp(A),this.enabled=!0,this.tempVector3=new y,this.pivot=null,this.movementSpeed=8e-4*vc.SceneSize,this.defaultMovementSpeed=this.movementSpeed,this.minMovementSpeed=.01,this.noZoom=!1,this.minDistance=.1,this.maxDistance=e.far-2*vc.SceneSize,this.defaultThroughOutDistance=.1,this.noRotate=!1,this.rotateSpeed=1,this.noPan=!1,this.keyPanSpeed=2,this.defaultKeyPanSpeed=this.keyPanSpeed,this.minKeyPanSpeed=.01,this.autoRotate=!0,this.autoRotateSpeed=2,this.minDistance=0,this.maxDistance=1/0,this.minZoom=0,this.maxZoom=1/0,this.enablePolar=!1,this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.minAzimuthAngle=-1/0,this.maxAzimuthAngle=1/0,this.enableDamping=!1,this.dampingFactor=.25,this.enableZoom=!0,this.zoomSpeed=1,this.enableRotate=!0,this.rotateSpeed=1,this.enablePan=!0,this.enablePassThrough=!0,this.isDisableRotate=!1,this.noKeys=!1,this._realManHeight=1650;var o,n,r,l,c,h,d,p=this,g=1e-6,u=new y(0,0,1),m=new y,C=new f,v=null,I=!1;function E(A,e,t){if(null==t)return!0;var i=t[0],o=t[1];if(i>=o)return!1;var n=p.camera,r=n.position;e||(e=r.clone());var a=n.getWorldDirection(new y),s=n.realUp||n.up,l=a.clone().cross(s).normalize(),c=(new f).setFromAxisAngle(l,A);r.clone().sub(e).normalize();var h=a.clone().negate(),d=Math.PI-h.angleTo(u.clone()),g=h.clone().projectOnPlane(u.clone()),m=g.angleTo(u.clone());0>g.x&&(m=2*Math.PI-m),a.applyQuaternion(c).normalize();var C=a.clone().negate(),v=Math.PI-C.angleTo(u.clone()),I=C.clone().projectOnPlane(u.clone()),E=I.angleTo(u.clone());if(0>I.x&&(E=2*Math.PI-E),Math.abs(E-m)>.001)return!1;if(d>i&&o>d){if(v>o||i>v)return!1}else if((d>o?v-d:d-v)>0)return!1;return!0}function B(){var A=p.viewer.modelManager.sceneState;if(A.hasSelection()){var e=p.viewer.getFilter(),t=p.viewer,i=e.getVisibleComponentSet(A.getSelectionSet()),o=t.getBoundingBoxByIds(i);if(o&&!o.isEmpty())return o.getCenter()}return p.pivot?p.pivot:p.scene.getBoundingBox().getCenter(new y)}function x(A,e,t,i){var o=new M;o.getInverse(e);var n=new y(A.position.x,A.position.y,A.position.z),r=n.clone();r.applyMatrix4(o);var a=new y(t.x,t.y,t.z);return a.add(n),a.applyMatrix4(o),a.sub(r).normalize().multiplyScalar(i),a.add(r),a.applyMatrix4(e),a.sub(n),a}this.collisionManager=new pp,this.pivotBallGroup=null,this.minDollyDistance=10,this.gravity=0,this.farFactor=11.4514,this.sceneLengthUnitFactor=1,this.destroy=function(){this.viewer=null,this.camera=null,this.domElement=null,this.scene=null,this.intersector.destroy(),this.intersector=null,this.collisionManager=null,this.pivotBallGroup=null},this.isCameraChanging=function(){return I},this.setCameraChanging=function(A){I=A},this.setCamera=function(A){this.camera=A},this.getCamera=function(){return this.camera.updateMVP(),this.camera},this.dirtyCamera=function(A){this.camera.dirty=A},this.getFrustum=function(){return this.camera.getFrustum()},this.lockAxisZ=function(A){jh.LockAxisZ=A},this.isLockedAxisZ=function(){return jh.LockAxisZ},this.setLockAxisZRange=function(A){jh.LockAxisZRange=A},this.getLockAxisZRange=function(){return jh.LockAxisZRange},this.getClientSize=function(){var A=p.domElement===document?p.domElement.body:p.domElement;return new s(A.clientWidth,A.clientHeight)},this.delayHandle=function(){this.timeoutId&&clearTimeout(this.timeoutId),this.timeoutId=setTimeout((function(){p.update(!0,!0)}),200),this.needUpdateRenderList(!1)},this.processRotate=function(A,e){var t=this.getClientSize(),i=-2*Math.PI*A.x/t.x,o=-2*Math.PI*A.y/t.y;p.handleRotation(i,o,e)},this.handleRotation=function(A,e,t){var i=this.camera,o=i.position,n=i.target.clone(),r=i.getWorldDirection(n),a=n.clone().sub(o).length(),s=null,l=function(A){var e=null,n=null,s=null,l=new y;t?(n=(e=o.clone().sub(t)).length(),e.normalize(),s=e.clone().applyQuaternion(A).normalize(),i.position.copy(t).add(s.multiplyScalar(n)),r.applyQuaternion(A).normalize(),l.copy(o).add(r.multiplyScalar(a)),i.target.copy(l)):(r.applyQuaternion(A).normalize(),l.copy(o).add(r.multiplyScalar(a)),i.target.copy(l))},c=i.realUp||i.up,h=r.clone().cross(c).normalize().clone().cross(r).normalize();i.realUp.copy(h);var d=null;if(jh.LockAxisZ){if(Math.abs(A)>Math.abs(e))d=u,l(s=(new f).setFromAxisAngle(d,A)),i.realUp.applyQuaternion(s).normalize();else if(null!=jh.LockAxisZRange&&Math.abs(e)>1e-4){E(e,t,jh.LockAxisZRange)&&(d=r.clone().cross(c).normalize(),l(s=(new f).setFromAxisAngle(d,e)),i.realUp.applyQuaternion(s).normalize(),this.adjustCameraUp())}}else Math.abs(A)1e-4&&(d=r.clone().cross(c).normalize(),l(s=(new f).setFromAxisAngle(d,e)),i.realUp.applyQuaternion(s).normalize(),this.adjustCameraUp()):(d=i.up.clone().normalize(),l(s=(new f).setFromAxisAngle(d,A)),i.realUp.applyQuaternion(s).normalize());this.dirtyCamera(!0),this.setCameraChanging(!0)},this.enabledPolar=function(A){jh.LockAxisZ=A},this.setMinPolarAngle=function(A){"number"==typeof A&&(Array.isArray(jh.LockAxisZRange)||(jh.LockAxisZRange=[]),jh.LockAxisZRange[0]=A)},this.setMaxPolarAngle=function(A){"number"==typeof A&&(Array.isArray(jh.LockAxisZRange)||(jh.LockAxisZRange=[]),jh.LockAxisZRange[1]=A)},this.getMinPolarAngle=function(){return jh.LockAxisZRange?jh.LockAxisZRange[0]:null},this.getMaxPolarAngle=function(){return jh.LockAxisZRange?jh.LockAxisZRange[1]:null},this.adjustCameraForPan=function(A){var e=this.camera;e.target.add(A),e.position.add(A),this.dirtyCamera(!0),this.setCameraChanging(!0)},this.updateCamera=function(){var A=this.camera;A.dirty&&(A.lookAt(A.target),A.updateMVP(),this.adjustCameraUp(),this.dispatchEvent({type:Rc.ON_CAMERA_CHANGE,camera:this.camera}))},this.update=function(A,e){this.updateCamera(),this.dispatchEvent({type:Rc.ON_CAMERA_CHANGE,camera:this.camera});var t=this.camera;A?(void 0!==e&&this.needUpdateRenderList(e),i(),m.copy(t.position),C.copy(t.quaternion)):(m.distanceToSquared(t.position)>g||8*(1-C.dot(t.quaternion))>g)&&(i(),m.copy(t.position),C.copy(t.quaternion))},this.updateView=function(A){void 0!==A&&this.needUpdateRenderList(A),this.dispatchEvent({type:Rc.ON_CAMERA_CHANGE,camera:this.camera}),i()},this.updateHighlight=function(){this.dispatchEvent({type:Rc.ON_CAMERA_CHANGE,camera:this.camera}),i(!0)},this.needUpdateRenderList=function(A){this.viewer.controlManager.isUpdateRenderList=A},this.pan=function(A,e){var t=p.domElement===document?p.domElement.body:p.domElement,i=new y;function o(A){var e=p.camera.matrix.elements;i.set(e[0],e[1],e[2]),i.multiplyScalar(-A),p.camera.target.add(i),p.camera.position.add(i)}function n(A){var e=p.camera.matrix.elements;i.set(e[4],e[5],e[6]),i.multiplyScalar(A),p.camera.target.add(i),p.camera.position.add(i)}if(p.camera.isPerspective){var r=p.camera.position.clone().sub(p.camera.target).length();o(2*A*(r*=Math.tan(p.camera.fov/2*Math.PI/180))/t.clientHeight),n(2*e*r/t.clientHeight)}else void 0!==p.camera.top?(o(A*(p.camera.right-p.camera.left)/t.clientWidth),n(e*(p.camera.top-p.camera.bottom)/t.clientHeight)):Bh.warn("WARNING: CloudPickEditor.js encountered an unknown camera type - pan disabled.");this.dirtyCamera(!0),this.setCameraChanging(!0)},this.panOnWorld=(o=new y,n=new y,r=new y,function(A,e,t,i){var a=p.getContainerDimensions(),s=A.x-a.left,l=A.y-a.top;o.x=s/a.width,o.y=l/a.height,l=e.y-a.top,n.x=(s=e.x-a.left)/a.width,n.y=l/a.height,r.subVectors(n,o);var c=-r.x*i.x,h=r.y*i.y,d=p.getWorldRight().multiplyScalar(c),g=p.getWorldUp().multiplyScalar(h);t.addVectors(d,g),p.dirtyCamera(!0),p.setCameraChanging(!0)}),this.adjustCameraForDolly=function(A,e){var t=A-1;if(t*=this.zoomSpeed,Math.abs(t)a&&r.normalize().multiplyScalar(this.minDollyDistance):(i.orthoScale*=A,i.setZoom(i.orthoScale));var s=new y;s.addVectors(o,r),this._goingToDolly(i,s,t)?(i.position.copy(s),i.target.copy(n.add(s)),this.dirtyCamera(!0),this.setCameraChanging(!0)):this.resetCameraToMaximumRange()},this._goingToDolly=function(A,e,t){if(!A.isPerspective||!vc.ConstraintZoom)return!0;var i=this.scene.getBoundingBox();if(t>0)return!!A.getFrustum().intersectsBox(i);var o=i.getSize(this.tempVector3).length(),n=i.getCenter(this.tempVector3),r=.5*o/Math.tan(a.degToRad(.5*A.fov))*this.farFactor;return e.distanceTo(n)r||r>t)},this.computeRotation=function(){var A=new M;A.lookAt(this.camera.position,this.camera.target,this.camera.up);var e=new f;e.setFromRotationMatrix(A);var t=new F;return t.setFromQuaternion(e,void 0,!1),t},this.adjustCameraUp=function(){this.camera.realUp.z>0?this.camera.up=new y(0,0,1):0>this.camera.realUp.z?this.camera.up=new y(0,0,-1):this.camera.realUp.x>0?this.camera.up=new y(1,0,0):0>this.camera.realUp.x?this.camera.up=new y(-1,0,0):this.camera.realUp.y>0?this.camera.up=new y(0,1,0):0>this.camera.realUp.y&&(this.camera.up=new y(0,-1,0))},this.getWorldEye=function(){return this.camera.target.clone().sub(this.camera.position)},this.getWorldRight=function(){var A=new y,e=this.camera.up,t=this.getWorldEye();return A.crossVectors(t,e),0===A.lengthSq()&&(e.z>e.y?t.y-=1e-4:t.z+=1e-4,A.crossVectors(t,e)),A.normalize()},this.getWorldRightByRealUp=function(){var A=new y,e=this.camera.realUp,t=this.getWorldEye();return A.crossVectors(t,e),0===A.lengthSq()&&(e.z>e.y?t.y-=1e-4:t.z+=1e-4,A.crossVectors(t,e)),A.normalize()},this.getWorldUp=function(){var A=this.getWorldRight(),e=this.getWorldEye();return A.cross(e).normalize()},this.getWorldDimension=function(A,e){var t=this.camera.position,i=this.getWorldEye().normalize(),o=this.getTrackingPoint(A,e).clone().sub(t),n=Math.abs(i.dot(o)),r=this.getContainerDimensions(),l=r.width/r.height,c=2*n*Math.tan(a.degToRad(.5*this.camera.fov));return new s(c*l,c)},this.getWorldPointFromNearPlane=function(A,e){var t=new y(A,e,0);return t.unproject(this.camera),t},this.getTrackingPoint=function(A,e){var t=new s(A,e),i=this.getIntersectContext(t),o=this.intersector.hitTest(i),n=this.camera.position;if(!o){var r=i.mouse,a=this.getWorldEye(),l=a.clone().normalize(),c=this.getWorldPointFromNearPlane(r.x,r.y),h=new CA;if(this.camera.isPerspective)h.origin.copy(n),h.direction.copy(c.clone().sub(n).normalize());else{var d=c.clone();d.sub(a),h.origin.copy(d),h.direction.copy(l)}if(v){var p=new EA;if(p.setFromNormalAndCoplanarPoint(l,v),o=h.intersectPlane(p,new y)){var u=o.distanceTo(n);g>u&&(o=this.getTrackingPointFromBoundingBox(l,h))}else o=this.getTrackingPointFromBoundingBox(l,h)}else o=this.getTrackingPointFromBoundingBox(l,h);o||(Bh.log("tracking point is default!"),o=c)}return n.equals(o)&&(o=null),v=o&&o.clone(),o},this.getTrackingPointFromBoundingBox=function(A,e){return this.viewer.getScene().getTrackingPointFromBoundingBox(A,e)},this.setCameraPosition=function(A){var e=this.camera,t=this.getWorldEye(),i=t.length(),o=t.clone();o.normalize(),o.setLength(i),e.position.copy(A),e.target.addVectors(e.position,o),this.dirtyCamera(!0),this.setCameraChanging(!0)},this.moveStraight=function(A,e){var t=this.camera.position,i=this.camera.target;if(e){var o=new y(i.x-t.x,0,i.z-t.z),n=A/o.length(),r=new y(o.x*n,0,o.z*n);t.add(r),i.add(r)}else{var a=i.clone().sub(t);this.camera.translateZ(-A),i.addVectors(t,a)}this.dirtyCamera(!0),this.setCameraChanging(!0)},this.getIntersectContext=function(A){var e=new up;return e.scene=p.viewer.getScene(),e.camera=this.camera,null!==A&&this.mapWindowToViewport(A.x,A.y,e.mouse),e.viewportSize=p.viewer.getRenderer().getSize(new s),e.octantMap=p.viewer.modelManager.octantToObjectMap,e},this.getLastIntersect=function(){return this.intersector.lastIntersect},this.calculatePivot=function(A,e){var t=this,i=this.viewer,o=i.getFilter(),n=i.getScene(),r=null;function a(A){var e=t.getIntersectContext(A),i=t.intersector.hitTest(e);if(i)return i;var o=n.getBoundingBox();if(n.hasClipPlanes()&&n.getClipPlanes().isEnabled()){var r=n.getClipPlanes().getClipBoundingBox();o.intersect(r)}else if(n.hasFillClipPlanes()&&n.getFillClipPlane().isEnabled()){var a=n.getFillClipPlane().getFillClipBoundingBox();o.intersect(a)}return o.getCenter(new y)}var s=null,l=null;switch(A){case kc.SELECTION:if(n.hasClipPlanes()&&n.getClipPlanes().isEnabled()&&(s=n.getClipPlanes().getClipBoundingBox())&&!s.isEmpty()&&n.getClipPlanes().isVisible()){r=s.getCenter();break}n.hasFillClipPlanes()&&n.getFillClipPlane().isEnabled()&&(l=n.getFillClipPlane().getFillClipBoundingBox());var c=o.getVisibleComponentSet(i.modelManager.sceneState.getSelectionSet(),i),h=i.getBoundingBoxByIds(c);mh.isMobileDevice()||!h||h.isEmpty()?r=a(e):(s?h.intersect(s):l&&h.intersect(l),r=h.getCenter(new y));break;case kc.CENTER:r=n.getBoundingBoxWorld().getCenter(new y);break;case kc.CAMERA:r=null;break;default:r=a(e)}return this.dirtyCamera(!0),this.setCameraChanging(!0),this.pivot=r,r},this.touchUpdateRotationInPersonView=function(A,e){this.dirtyCamera(!0),this.setCameraChanging(!0);var t=this,i=this.camera.position,o=this.camera.target.clone().sub(i).length(),n=this.camera.getWorldDirection(new y),r=this.camera.realUp||this.camera.up,a=n.clone().cross(r).normalize(),s=a.clone().cross(n).normalize();this.camera.realUp.copy(s);var l=jh.LockAxisZRange,c=null,h=null;if(Math.abs(A)>Math.abs(e))c=u,h=A;else{if(jh.LockAxisZ&&!E(e,this.camera.target,l))return;c=a;var d=new y(0,0,1).clone().cross(r),p=d.dot(a),m=Math.asin(d.length());0>p&&(m=-m),m+e>Math.PI/4-g?e=Math.PI/4-g-m:m+e<-Math.PI/4+g&&(e=-Math.PI/4+g-m),h=e}var C,v,I=(new f).setFromAxisAngle(c,h);C=I,v=new y,n.applyQuaternion(C).normalize(),v.copy(i).add(n.multiplyScalar(o)),t.camera.target.copy(v),this.camera.realUp.applyQuaternion(I).normalize()},this.touchUpdateRotationInModelView=function(A,e,t){this.dirtyCamera(!0),this.setCameraChanging(!0);var i=t||this.scene.getBoundingBox().getCenter(new y),o=this.camera.position,n=this.camera.target.clone().sub(o).length(),r=o.clone().sub(i),a=r.length(),s=null,l=this.camera.getWorldDirection(new y);r.normalize();var c=function(A){var e=new y,t=r.clone().applyQuaternion(A).normalize();o.copy(i).add(t.multiplyScalar(a)),l.applyQuaternion(A).normalize(),e.copy(o).add(l.multiplyScalar(n)),p.camera.target.copy(e)},h=this.camera.realUp||this.camera.up,d=l.clone().cross(h).normalize(),m=d.clone().cross(l).normalize();this.camera.realUp.copy(m);var C=null;if(jh.LockAxisZ){if(Math.abs(A)>Math.abs(e))C=u,c(s=(new f).setFromAxisAngle(C,A)),this.camera.realUp.applyQuaternion(s).normalize();else if(null!=jh.LockAxisZRange&&Math.abs(e)>1e-4){E(e,i,jh.LockAxisZRange)&&(C=l.clone().cross(h).normalize(),c(s=(new f).setFromAxisAngle(C,e)),this.camera.realUp.applyQuaternion(s).normalize(),this.adjustCameraUp())}}else if(Math.abs(A)>Math.abs(e))C=this.camera.up.clone().normalize(),c(s=(new f).setFromAxisAngle(C,A)),this.camera.realUp.applyQuaternion(s).normalize();else if(Math.abs(e)>.01){C=l.clone().cross(h).normalize();var v=new y(0,1,0).clone().cross(h),I=v.dot(d),x=Math.asin(v.length());0>I&&(x=-x),x+e>Math.PI/2-g?e=Math.PI/2-g-x:x+e<-Math.PI/2+g&&(e=-Math.PI/2+g-x),c(s=(new f).setFromAxisAngle(C,e)),this.camera.realUp.applyQuaternion(s).normalize(),this.adjustCameraUp()}this.pivotBallGroup||function(){p.pivotBallGroup=p.scene.getOrCreateGroup(gp.PIVOTBALL,{priority:10,globalSpace:!1});var A=new er(15,64,64),e=new Ue(A,new Ir({color:16777215,depthTest:!1,opacity:.5,transparent:!0,side:2})),t=new Ue(A=new er(1,64,64),new Ir({color:16711680,depthTest:!1,opacity:.5,transparent:!0,side:2}));p.pivotBallGroup.add(e),p.pivotBallGroup.add(t)}(),this.pivotBallGroup.visible=!0;for(var S=function(){var A=p.camera,e=A.position,t=p.camera.target.clone().sub(e);t.normalize();var i=new EA;i.setFromNormalAndCoplanarPoint(t.clone().negate(),B()),i.normalize();var o=i.distanceToPoint(e)*Math.tan(.5*A.fov),n=p.getContainerDimensions();return 2*o/(n.height-n.top)}(),w=B(),M=0;this.pivotBallGroup.children.length>M;M+=1){var b=this.pivotBallGroup.children[M];b.position.copy(w),b.scale.set(S,S,S),b.updateMatrixWorld()}},this.touchUpdateRotation=function(A,e){var t=this.camera.position;this.scene.getBoundingBox().containsPoint(t)?this.touchUpdateRotationInPersonView(A,e):this.touchUpdateRotationInModelView(A,e,B())},this.clearTouchRotateState=function(){this.pivotBallGroup&&(this.pivotBallGroup.visible=!1)},this.touchEndHandler=function(){this.viewer.controlManager.cameraChange=!1,this.clearTouchRotateState(),this.touchUpdate()},this._adjustCameraForDolly=function(A,e){var t=e-1;if(Math.abs(t)a&&r.normalize().multiplyScalar(this.minDollyDistance);var s=new y;return s.addVectors(o,r),i.isPerspective||(i.orthoScale*=e,i.setZoom(i.orthoScale)),i.position.copy(s),i.target.copy(n.add(s)),this.dirtyCamera(!0),this.setCameraChanging(!0),!0},this.touchDolly=function(A,e,t){var i=new s(A,e),o=this.getIntersectContext(i),n=this.intersector.hitTest(o);this._adjustCameraForDolly(null!==n?n:null,t)},this.touchUpdate=(h=new y,d=new f,function(){var A=new y;A.copy(p.camera.up),p.camera.up.copy(p.camera.realUp),p.camera.lookAt(p.camera.target),p.camera.up.copy(A),p.camera.updateMVP(),(h.distanceToSquared(p.camera.position)>g||8*(1-d.dot(this.camera.quaternion))>g)&&(this.dispatchEvent({type:Rc.ON_CAMERA_CHANGE,camera:this.camera}),i(),p.dirtyCamera(!1),h.copy(p.camera.position),d.copy(p.camera.quaternion))}),this.goTurnForWalk=function(A){var e=this.getCamera(),t=e.position,i=e.target,o=new y(i.x-t.x,i.y-t.y,0),n=Math.cos(A),r=Math.sin(A),a=new y(o.x*n-o.y*r,o.x*r+o.y*n,0);i.x=t.x+a.x,i.y=t.y+a.y,this.dirtyCamera(!0),this.setCameraChanging(!0)},this.goPitchForWalk=function(A){var e=this.getCamera(),t=e.position,i=e.target,o=i.x-t.x,n=i.y-t.y,r=new y(Math.sqrt(o*o+n*n),0,i.z-t.z),a=Math.cos(A),s=Math.sin(A),l=new y(r.x*a-r.z*s,0,r.x*s+r.z*a);i.z=t.z+l.z,this.dirtyCamera(!0),this.setCameraChanging(!0)},this.goUpDownForWalk=function(A){var e=this.getCamera(),t=e.position,i=e.target,o=new y(0,0,1),n=x(e,this.scene.getMatrixGlobal(),o,A);t.z+=n.z,i.z+=n.z,this.dirtyCamera(!0),this.setCameraChanging(!0)},this.stepCameraForWalk=function(A,e){var t=this.getCamera(),i=t.position,o=t.target,n=new y(o.x-i.x,o.y-i.y,0).normalize(),r=new y(0,0,1),a=n.clone().cross(r),s=this.scene.getMatrixGlobal(),l=null;switch(A){case qc.FORWARD:(l=x(t,s,n,e)).z=0;break;case qc.BACK:n.multiplyScalar(-1),(l=x(t,s,n,e)).z=0;break;case qc.LEFT:a.multiplyScalar(-1),(l=x(t,s,a,e)).z=0;break;case qc.RIGHT:(l=x(t,s,a,e)).z=0}i.add(l),o.add(l),this.dirtyCamera(!0),this.setCameraChanging(!0)},this.hitTestWithGround=function(){var A=this.getCamera(),e=A.up.clone().multiplyScalar(-1),t=new CA(A.position.clone(),e),i=this.getIntersectContext(null),o=this.intersector.byGravity;this.intersector.byGravity=!0;var n=this.intersector.intersect(i,t,!1);return this.intersector.byGravity=o,n},this.projectPositionToBottom=function(A){var e=void 0;if(A instanceof Array)e=new y(A[0],A[1],A[2]);else{if(!(A instanceof y))return;e=A}this.getCamera();var t=new CA(e,new y(0,0,-e.z).normalize()),i=this.getIntersectContext(null),o=this.intersector.byGravity;this.intersector.byGravity=!0;var n=this.intersector.intersect(i,t,!1);if(this.intersector.byGravity=o,n)return n.point},this.hitTestForward=function(A){var e=this.getCamera(),t=this.getWorldEye();t.normalize(),t=t.multiplyScalar(A);var i=new CA(e.position.clone(),t),o=this.getIntersectContext(null);return o.camera.near=-1,this.intersector.intersect(o,i,!1)},this.hitTestRight=function(A){var e=this.getCamera(),t=this.getWorldEye();t.normalize();var i=t.cross(e.up).normalize();i=i.multiplyScalar(A);var o=new CA(e.position.clone(),i),n=this.getIntersectContext(null);return n.camera.near=-1,this.intersector.intersect(n,o,!1)},this.computeGravity=function(){this.gravity=0;var A=this.hitTestWithGround();if(null===A){var e=this.scene.getMatrixGlobal(),t=new M;t.getInverse(e);var i=this.camera.position.clone();i.applyMatrix4(t),i.z=this.scene.getBoundingBoxWorld().min.z||0,i.applyMatrix4(e),this.distanceToGround=Math.abs(this.camera.position.z-i.z)}if(void 0===this.manHeight)this.computeManHeight();else{var o=A?A.distance-this.manHeight:this.distanceToGround-this.manHeight;if(o/=this.scene.getGlobalScaleFactor(),.1>Math.abs(o))return 0;this.gravity=o}},this.computeManHeight=function(){if(!this.manHeight){var A=this.hitTestWithGround(),e=this.scene.getMatrixGlobal(),t=new M;if(t.getInverse(e),null!=A){var i=A.point.clone();i.applyMatrix4(t),i.z+=this._realManHeight*this.sceneLengthUnitFactor,i.applyMatrix4(e),this.manHeight=Math.abs(A.point.z-i.z)}else{var o=this.camera.position.clone();o.applyMatrix4(t),o.z=0;var n=o.clone();n.z+=this._realManHeight*this.sceneLengthUnitFactor,o.applyMatrix4(e),n.applyMatrix4(e),this.manHeight=Math.abs(n.z-o.z)}}},this.setRealManHeight=function(A){A!==this._realManHeight&&(this._realManHeight=A,this.manHeight=void 0)},this.getRealManHeight=function(){return this._realManHeight},this.walkWithParallelEye=function(){var A=this.camera,e=this.getWorldEye().length(),t=this.scene.getBoundingBox().getCenter(new y),i=new y;i.subVectors(t,A.position);var o=i.length();i.z=0,i.normalize(),i.multiplyScalar(o),A.position.subVectors(t,i),A.target.addVectors(A.position,i.normalize().multiplyScalar(e));var n=new y(0,0,1);A.up.copy(n),A.realUp.copy(n),this.dirtyCamera(!0),this.setCameraChanging(!0),this.update(!0)},this.updateFlyMove=function(A,e){var t=this.camera;this.dirtyCamera(!0),this.setCameraChanging(!0);var i=qc;A&i.FORWARD&&t.translateZ(-e),A&i.BACK&&t.translateZ(e),A&i.LEFT&&t.translateX(-e),A&i.RIGHT&&t.translateX(e),A&i.UP&&t.translateY(e),A&i.DOWN&&t.translateY(-e),this.flyOnWorld()},this.flyOnWorld=function(){var A=this.camera,e=A.up.clone();A.realUp&&A.up.copy(A.realUp),A.lookAt(A.target),A.realUp&&A.up.copy(e),this.updateCamera(),this.adjustCameraUp(),i(),this.dirtyCamera(!1),m.copy(A.position),C.copy(A.quaternion)},this.rotateForFly=function(A,e,t,i){var o=this.camera,n=o.position,r=o.target,a=r.clone().sub(n),s=new y(0,1,0),l=o.realUp||o.up,c=a.clone().cross(l).normalize();if(this.dirtyCamera(!0),this.setCameraChanging(!0),jh.LockAxisZ&&(e=0),0!==e){var h=(new f).setFromAxisAngle(c,-e),d=a.clone();d.applyQuaternion(h);var p=d.angleTo(s);t>(p-=.5*Math.PI)||p>i||a.applyQuaternion(h)}if(0!==A){var g=(new f).setFromAxisAngle(s,-A);a.applyQuaternion(g)}r.addVectors(n,a),this.flyOnWorld()},this.fitAndRotateBySelection=function(){var A=this.viewer;A.setPointRotateMode(kc.SELECTION),A.zoomToSelection()},this.flyToPointWithParallelEye=function(A){var e=this.getWorldEye(),t=e.length(),i=e.clone();i.y=0,i.normalize(),i.setLength(t);var o=new y(0,0,1);this.camera.up=o,this.camera.realUp=o.clone(),this.camera.position.copy(A),this.camera.target.addVectors(this.camera.position,i),this.update(!0)},this.flyToPoint=function(A){var e=this.getWorldEye();this.camera.position.copy(A),this.camera.target.addVectors(this.camera.position,e),this.update(!0)},this.setRoamingWalkAbsoluteHeight=function(A){},this.setCameraHeight=function(A,e){this.cameraAbsoluteHeightEnabled=!1,this.cameraRelativeHeight=e,void 0===this.cameraConstraintHeights?this.cameraConstraintHeights=[]:this.cameraConstraintHeights.length=0;for(var t=0,i=A.length;i>t;t+=1)this.cameraConstraintHeights[t]=A[t]},this.setCameraAbsoluteHeight=function(A){this.cameraAbsoluteHeightEnabled=!0,this.cameraAbsoluteHeight=A},this.updateCameraHeight=function(){var A=this.scene,e=this.getCamera(),t=A.drawingToWorld(e.position),i=t.z,o=null,n=null;if(this.cameraAbsoluteHeightEnabled)void 0===this.cameraAbsoluteHeight&&(this.cameraAbsoluteHeight=i),o=this.cameraAbsoluteHeight;else if(void 0===this.cameraConstraintHeights)o=i;else{var r=uh.findRange(this.cameraConstraintHeights,i);if(o=this.cameraConstraintHeights[r],o+=this.cameraRelativeHeight,this.cameraConstraintHeights.length-1>r){var a=this.cameraConstraintHeights[r+1];o>a&&(o=a)}}o!==i&&(n=A.worldToDrawing({x:t.x,y:t.y,z:o}),this.setCameraPosition(n))},this.getRaycaster=function(A,e){var t=new Dd,i=new s;return this.mapWindowToViewport(A,e,i),t.setFromCamera(i,this.camera),t},this.translateCameraForWalk=function(A,e){var t=this.collisionManager;if(0!==A.x)if(!1===vc.EnableHitDetection)this.stepCameraForWalk(qc.RIGHT,A.x*e);else{var i=1;0>A.x&&(i=-1);var o=this.hitTestRight(i);if(o){var n=this.viewer.modelManager.getNodeInfosByUserId(o.userId);if(!t.hasCollision({type:n?n[0].type:null},o.distance)){var r=e;Math.abs(e)>o.distance&&(r=e>0?o.distance-t.distance*t.factor-.1*this.sceneLengthUnitFactor:t.distance*t.factor-o.distance+.1*this.sceneLengthUnitFactor),this.stepCameraForWalk(qc.RIGHT,A.x*r)}}else this.stepCameraForWalk(qc.RIGHT,A.x*e)}if(0!==A.y)if(!1===vc.EnableHitDetection)this.stepCameraForWalk(qc.BACK,A.y*e);else{var a=1;A.y>0&&(a=-1);var s=this.hitTestForward(a);if(s){var l=this.viewer.modelManager.getNodeInfosByUserId(s.userId);if(!t.hasCollision({type:l?l[0].type:null},s.distance)){var c=e;Math.abs(e)>s.distance&&(c=e>0?s.distance-t.distance*t.factor-.1*this.sceneLengthUnitFactor:t.distance*t.factor-s.distance+.1*this.sceneLengthUnitFactor),this.stepCameraForWalk(qc.BACK,A.y*c)}}else this.stepCameraForWalk(qc.BACK,A.y*e)}if(0!==A.z)this.goUpDownForWalk(A.z*e*.5);else{var h=e;if(0!==this.gravity){var d=Math.abs(this.gravity);h=d>h?.2*d:d}this.gravity>0?this.goUpDownForWalk(-h):0>this.gravity&&this.goUpDownForWalk(h)}},this.rotateCameraForWalk=function(A,e){0!==A.x&&(this.goPitchForWalk(A.x*Math.PI),A.x=0),0!==A.z&&(this.goTurnForWalk(-A.z*Math.PI*e),A.z=0)},this.zoomCameraForWalk=function(A){this.adjustCameraForDolly(A,null)},this.movePlane=function(A,e,t,i,o){if(void 0===o){var n=new EA;n.setComponents(A.x,A.y,A.z,A.w),o=new y,n.coplanarPoint(o)}var r=new y(A.x,A.y,A.z),a=this.camera.getWorldDirection(new y),s=new EA;s.setFromNormalAndCoplanarPoint(a,o);var l=this.getRaycaster(e.clientX,e.clientY),c=new y,h=this.getRaycaster(t.x,t.y),d=new y;if(l.ray.intersectPlane(s,c)&&h.ray.intersectPlane(s,d)){c.subVectors(c,d),c.projectOnVector(r);var p=c.length();if(0>c.dot(r)&&(p=-p),0!==p)return i&&(r.multiplyScalar(p),p=r.x+r.y+r.z),p}return null},this.getZenith=function(){var A=this.camera.position,e=p.viewer.getBoundingBox().getCenter();return A.clone().sub(e.clone()).clone().angleTo(u.clone())},this.getAzimuth=function(){var A=this.camera.position,e=p.viewer.getBoundingBox().getCenter(),t=A.clone().sub(e.clone()).clone().projectOnPlane(u.clone()),i=t.angleTo(u.clone());return 0>t.x&&(i=360-i),i},this.getCurrentRangeofCamera=function(){var A=this.camera,e=this.viewer.getBoundingBox(),t=e.getCenter(),i=A.position,o=.5*e.getSize().length()/Math.tan(a.degToRad(.5*A.fov));return t.distanceTo(i)/o},this.setMaximalRangeofCamera=function(A){this.farFactor=A||2},this.getMaximalRangeofCamera=function(){return this.farFactor},this.cameraWithinMaximumRange=function(A){var e=A||this.farFactor;return this.getCurrentRangeofCamera()<=e},this.resetCameraToMaximumRange=function(A){var e=this.camera,t=this.viewer.getBoundingBox(),i=t.getCenter(),o=e.position,n=this.farFactor;"number"==typeof A&&(n=A);var r=(new y).subVectors(i,o),s=.5*t.getSize().length()/Math.tan(a.degToRad(.5*e.fov));r.setLength(n*s);var l=i.clone().sub(r),c=this.getWorldEye();this.camera.position.copy(l),this.camera.target.copy(c.add(l)),this.updateView(!0)},this.setZoomSpeed=function(A){"number"==typeof A&&A>0&&(this.zoomSpeed=A)},this.getZoomSpeed=function(){return this.zoomSpeed},this.setZoomOutLimitRate=function(A){"number"==typeof A&&A>0&&(this.farFactor=A)},this.getZoomOutLimitRate=function(){return this.farFactor},this.setSceneUnit=function(A){var e=1;switch(A){case"m":e=.001;break;case"mm":e=1;break;case"km":e=1e-6;break;default:e=1}this.collisionManager.setFactor(e),this.sceneLengthUnitFactor=e}};Object.assign(mp.prototype,Ld.prototype);var Cp=function(){this.duration=500,this._state=null};Cp.prototype.rotateCameraByViewCubeSide=function(A,e,t,i){var o=A.target.clone(),n=e.getCenter(new y),r=A.quaternion.clone(),a=A.position.clone(),s=this._calculateDistanceAndEuler(t,e),l=(new f).setFromEuler(s.euler).inverse(),c=new M;c.makeRotationFromQuaternion(l);var h=c.elements,d=new y(-h[8],-h[9],-h[10]).normalize();d.setLength(s.distance);var p=n.clone().sub(d);if(!a.equals(p)||!r.equals(l)){var g=this._calculatePositionRotateInfo(r,l,a,p);this._state&&this._state.timerID&&(cancelAnimationFrame(this._state.timerID),this._state.timerID=void 0),this._state={startTime:Date.now(),startQuaternion:r,endQuaternion:l,startPosition:a,endPosition:p,startTarget:o,endTarget:n,positionRotateInfo:g,onUpdate:i},this._state.timerID=requestAnimationFrame(this._animate.bind(this))}},Cp.prototype.cancelAnimation=function(){this._state&&this._state.timerID&&(cancelAnimationFrame(this._state.timerID),this._state=void 0)},Cp.prototype._animate=function(){if(this._state){var A=Date.now(),e=this._state,t=e.startTarget,i=e.endTarget,o=e.startQuaternion,n=e.endQuaternion,r=e.startPosition,a=e.endPosition,s=e.positionRotateInfo,l=Math.min((A-e.startTime)/this.duration,1);l=this._easyOut(l);var c=n.clone();o.equals(n)||f.slerp(o,n,c,l);var h=a;r.equals(a)||(h=s?this._rotatePositionAroundCenter(s,r,a,l):r.clone().lerp(a,l));var d=i.clone();t.equals(i)||(d=d.lerpVectors(t,i,l)),"function"==typeof this._state.onUpdate&&this._state.onUpdate(l,c,h,d),1===l?(cancelAnimationFrame(this._state.timerID),this._state=null):this._state.timerID=requestAnimationFrame(this._animate.bind(this))}},Cp.prototype._calculateDistanceAndEuler=function(A,e){var t=-45,i=0,o=-135,n=0,r=e?e.getSize(new y):{x:0,y:0,z:0};switch(A){case Uc.Home:break;case Uc.Front:t=-90,i=0,o=0;break;case Uc.Right:t=-90,i=0,o=-90;break;case Uc.Back:t=-90,i=0,o=-180;break;case Uc.Left:t=-90,i=0,o=-270;break;case Uc.Top:t=0,i=0,o=0;break;case Uc.Bottom:t=-180,i=0,o=-180;break;case Uc.TopFront:t=-45,i=0,o=-90;break;case Uc.TopRight:t=-45,i=0,o=-180;break;case Uc.TopBack:t=-45,i=0,o=90;break;case Uc.TopLeft:t=-45,i=0,o=0;break;case Uc.BottomFront:t=-135,i=0,o=270;break;case Uc.BottomRight:t=-135,i=0,o=-180;break;case Uc.BottomBack:t=-135,i=0,o=90;break;case Uc.BottomLeft:t=-135,i=0,o=0;break;case Uc.FrontRight:t=-90,i=0,o=-135;break;case Uc.BackRight:t=-90,i=0,o=-225;break;case Uc.BackLeft:t=-90,i=0,o=45;break;case Uc.FrontLeft:t=-90,i=0,o=-45;break;case Uc.TopFrontRight:t=-45,i=-0,o=-135;break;case Uc.TopBackRight:t=-45,i=0,o=-225;break;case Uc.TopBackLeft:t=-45,i=0,o=-315;break;case Uc.TopFrontLeft:t=-45,i=0,o=-45;break;case Uc.BottomFrontRight:t=-135,i=0,o=-135;break;case Uc.BottomBackRight:t=-135,i=0,o=-225;break;case Uc.BottomBackLeft:t=-135,i=0,o=45;break;case Uc.BottomFrontLeft:t=-135,i=0,o=-45}var a=Math.PI/180,s=new F(t*a,i*a,o*a);return 0===(n=r.x+r.y+r.z)&&(n=vc.SceneSize/2),{euler:s,distance:n}},Cp.prototype._easyOut=function(A){return A*(2-A)},Cp.prototype._calculatePositionRotateInfo=function(A,e,t,i){var o=(new f).multiplyQuaternions(e,A.clone().inverse());o.normalize();var n=new y(o.x,o.y,o.z).normalize(),r=2*Math.acos(o.w);if(0!==r){var a=null;if(r===Math.PI)a=(new y).addVectors(t,i).divideScalar(2);else{var s=(new y).addVectors(t,i),l=(new y).subVectors(i,t),c=n.clone().cross(l).normalize(),h=.5*l.length()/Math.tan(r/2);c.setLength(h),a=(new y).addVectors(s.multiplyScalar(.5),c)}var d=null,p=null,g=(new y).subVectors(t,a),u=g.length(),m=(new y).subVectors(i,t);if(r===Math.PI)p=-1,d=(new y).crossVectors(m,n);else{var C=(new y).subVectors(i,a);p=Math.cos(r),p=Math.max(-1,Math.min(1,p)),d=C.clone().sub(g.clone().multiplyScalar(p))}return{center:a,dot:p,vec:d,start:g,radiusLength:u}}},Cp.prototype._rotatePositionAroundCenter=function(A,e,t,i){if(0===i)return e;if(i>=1)return t;var o=Math.acos(A.dot)*i,n=A.start.clone(),r=A.vec.clone().normalize(),a=n.multiplyScalar(Math.cos(o)),s=r.multiplyScalar(Math.sin(o)*A.radiusLength),l=a.add(s);return l.add(A.center),l};var yp=function(A){this.name=A,this._mousePressed=!1};yp.prototype.getName=function(){return this.name},yp.prototype.onExit=function(){},yp.prototype.destroy=function(){},yp.prototype.processMouseDown=function(A){return!1},yp.prototype.processMouseMove=function(A){return!1},yp.prototype.processMouseUp=function(A){return!1},yp.prototype.processMouseWheel=function(A){return!1},yp.prototype.processMouseDoubleClick=function(A){return!1},yp.prototype.processKeyDown=function(A){return!1},yp.prototype.processKeyUp=function(A){switch(A.keyCode){case qh:this._mousePressed=!1}return!1},yp.prototype.processTouchstart=function(A){return!1},yp.prototype.processTouchmove=function(A){return!1},yp.prototype.processTouchend=function(A){return!1},yp.prototype.processHover=function(A){return!1},yp.prototype.onEvent=function(A){var e=!1;switch(A.type){case"touchmove":e=this.processTouchmove(A);break;case"touchstart":e=this.processTouchstart(A);break;case"touchend":e=this.processTouchend(A);break;case"keydown":e=this.processKeyDown(A);break;case"keyup":e=this.processKeyUp(A);break;case"mousewheel":case"DOMMouseScroll":e=this.processMouseWheel(A);break;case"mousedown":this._mousePressed=!0,e=this.processMouseDown(A);break;case"mousemove":e=this._mousePressed?this.processMouseMove(A):this.processHover(A);break;case"mouseup":this._mousePressed=!1,e=this.processMouseUp(A);break;case"dblclick":e=this.processMouseDoubleClick(A)}return e};var vp=function(A){yp.call(this,Pc.CLIP_BY_BOX),this.viewer=A,this.scene=A.getScene(),this.enablePick=!1,this.cameraControl=A.cameraControl,this.clipStartPoint=new y,this.startPt=new s,this.onClipBox=!1,this.mapLockedBoxFaces={},this.mapBoxFaceIndex={0:"right",1:"left",2:"top",3:"bottom",4:"front",5:"back"};for(var e=[],t=0;6>t;t+=1)e.push(new EA);var i=this.scene.getClipPlanes(!0);i.updateClippingParams=function(t){if(0===t.iClipPlane.value)A.getRenderer().clippingPlanes=Object.freeze([]);else{for(var i=0,o=t.iClipPlane.value;o>i;i+=1){var n=t.vClipPlane.value[i],r=e[i];r.setComponents(-n.x,-n.y,-n.z,-n.w),r.normalize()}A.getRenderer().clippingPlanes=e,this.calculateClipBoundingBox(e)}},i.init(),this.selectIndex=null,this.planeDistance=0,this.offsetSpeed=.02,this.toggle=function(A,e){i.enable(A,e)},this.visible=function(A){i.visible=A},this.rotatable=function(A){i.rotatable=A},this.store=function(){return i.store()},this.restore=function(A){i.restore(A)},this.reset=function(){i.reset()},this.pointToScreen=function(A){var e=this.cameraControl.camera,t=new M;t.multiplyMatrices(e.projectionMatrix,e.matrixWorldInverse);var i=new p(A.x,A.y,A.z,1);i.applyMatrix4(t);var o=new s;o.x=(i.x/i.w+1)/2,o.y=1-(i.y/i.w+1)/2;var n=this.cameraControl.getContainerDimensions();return o.x=o.x*n.width+n.left,o.y=o.y*n.height+n.top,o},this.getPlaneDistanceInScreen=function(){if(null===this.selectIndex)return null;if(2>this.selectIndex){var A=i.center.clone(),e=i.center.clone();A.x-=i.cubeSize.x,e.x+=i.cubeSize.x;var t=this.pointToScreen(A),o=this.pointToScreen(e);return t.x-o.x}var n=i.center.clone(),r=i.center.clone();r.y-=i.cubeSize.y,n.y+=i.cubeSize.y;var a=this.pointToScreen(r),s=this.pointToScreen(n);return a.y-s.y},this.getPickPoint=function(A,e){var t=this.cameraControl.camera,i=this.cameraControl.getContainerDimensions(),o=(A-i.left)/i.width*2-1,n=(i.height-(e-i.top))/i.height*2-1,r=new Dd;return r.setFromCamera(new s(o,n),t),r.ray.intersectPlane(this.plane)},this.getSelectIndex=function(){return i.selectIndex},this._isVisible=function(){return i.visible},this.isRotate=function(){return i.rotatable},this.offset=function(A){var e=Math.floor(this.selectIndex/2);i.offset(this.selectIndex,this.selectIndex>3?this.selectIndex%2==1?-A*i.cubeSize.getComponent(e)*2:A*i.cubeSize.getComponent(e)*2:-A*i.cubeSize.getComponent(e)*2)},this.setSectionBox=function(A,e){var t=new aA(new y(A.x,A.y,A.z),new y(e.x,e.y,e.z));t.applyMatrix4(this.scene.getMatrixGlobal()),i.setSectionBox(t.min,t.max)},this.calculateOffsetByBox=function(A,e){var t=new aA(new y(A.x,A.y,A.z),new y(e.x,e.y,e.z));t.applyMatrix4(this.scene.getMatrixGlobal()),t.setFromCenterAndSize(t.getCenter(),t.getSize().multiplyScalar(this.scene.getExpandScalar())),i.calculateOffsetByBox(t.min,t.max)},this.moveSectionPlane=function(A,e){i.moveSectionPlane(A,e)},this.rotateSectionBox=function(A,e){i.rotateSectionBox(A,e)},this.rotate=function(A,e){2===this.selectIndex||3===this.selectIndex?i.rotX(e/180*Math.PI*.1):i.rotY(A/180*Math.PI*.1)},this.update=function(A){i.update(A)},this.cancelHighLight=function(){i.cancelHighLight()},this.highLight=function(){i.highLight()},this.lockBoxFaces=function(A){var e=!0;try{for(var t,i=A[Symbol.iterator]();!(e=(t=i.next()).done);e=!0){this.mapLockedBoxFaces[t.value]=!0}}catch(A){}finally{try{!e&&i.return&&i.return()}catch(A){}}},this.unlockBox=function(){this.mapLockedBoxFaces={}},this.setProcess=function(A,e){this.mapLockedBoxFaces[A]||i.setProcess(A,e)},this.getProcess=function(A){return i.getProcess(A)}};(vp.prototype=Object.create(yp.prototype)).constructor=vp,vp.prototype.destroy=function(){this.cameraControl=null,this.intersectPoint=null,this.selectIndex=null,this.normal=null,this.plane=null,this.pickHelper=null,this.scene=null,this.viewer=null},vp.prototype.onExit=function(){this.toggle(!1,!1)},vp.prototype.processMouseDown=function(A){if(this.startPt.set(A.clientX,A.clientY),!this.enablePick&&A.button===t.LEFT){var e=this.cameraControl.getRaycaster(A.clientX,A.clientY),i=this.scene.getClipPlanes().hitTest(e),o=this.cameraControl.getIntersectContext(new s(A.clientX,A.clientY)),n=this.cameraControl.intersector.intersect(o,null,!0);if(null!==n&&i.distance>=n.distance)return yp.prototype.processMouseDown(this,A);if(this.selectIndex=this.getSelectIndex(),this.planeDistance=this.getPlaneDistanceInScreen(),null!==this.selectIndex)return this.highLight(),this.cameraControl.needUpdateRenderList(!0),this.cameraControl.update(!0),this.enablePick=!0,this.clipStartPoint=e.ray.at(i.distance,this.clipStartPoint),!0}return yp.prototype.processMouseDown(this,A)},vp.prototype.processHover=function(A){if(!this.enablePick){var e=!1,t=this.cameraControl.getRaycaster(A.clientX,A.clientY),i=this.scene.getClipPlanes(),o=this.getSelectIndex();null!==o&&this.cancelHighLight();i.hitTest(t);if(this.selectIndex=this.getSelectIndex(),null!==this.selectIndex){if(this.highLight(),!this.onClipBox)this.onClipBox=!0,this.cameraControl.viewer.modelManager.dispatchEvent({type:Rc.ON_CLIP_HOVER,onClipBox:!0,event:A});e=!0}else if(this.onClipBox){this.onClipBox=!1,this.cameraControl.viewer.modelManager.dispatchEvent({type:Rc.ON_CLIP_HOVER,onClipBox:!1,event:A})}return this.selectIndex!==o&&(this.cameraControl.needUpdateRenderList(!0),this.cameraControl.update(!0)),e}return yp.prototype.processHover(this,A)},vp.prototype.processMouseUp=function(A){if(A.button===t.LEFT){var e=this.cameraControl.getRaycaster(A.clientX,A.clientY),i=this.scene.getClipPlanes();null!==this.getSelectIndex()&&(this.cancelHighLight(),this.cameraControl.needUpdateRenderList(!0),this.cameraControl.update(!0));i.hitTest(e);if(this.selectIndex=this.getSelectIndex(),vc.ClippingCaps=!0,null!==this.selectIndex){if(this.highLight(),this.cameraControl.needUpdateRenderList(!0),this.cameraControl.update(!0),!this.onClipBox)this.onClipBox=!0,this.cameraControl.viewer.modelManager.dispatchEvent({type:Rc.ON_CLIP_HOVER,onClipBox:!0,event:A})}else if(this.onClipBox){this.onClipBox=!1,this.cameraControl.viewer.modelManager.dispatchEvent({type:Rc.ON_CLIP_HOVER,onClipBox:!1,event:A})}if(this.enablePick)return this.planeDistance=0,this.enablePick=!1,!0}return yp.prototype.processMouseUp(this,A)},vp.prototype.processMouseMove=function(A){if(this.enablePick){if(this.isRotate())this.rotate(A.clientX-this.startPt.x,A.clientY-this.startPt.y),this.startPt.set(A.clientX,A.clientY);else{var e=this.mapBoxFaceIndex[this.selectIndex];if(this.mapLockedBoxFaces[e])return!0;if(!(A.clientX===this.startPt.x&&A.clientY===this.startPt.y)){vc.ClippingCaps=!1;var t=this.scene.getClipPlanes(),i=this.cameraControl.movePlane(t.clipplanes[this.selectIndex],A,this.startPt,!0,this.clipStartPoint);null!==i&&t.offset(this.selectIndex,i),this.startPt.set(A.clientX,A.clientY)}this.cameraControl.viewer.modelManager.dispatchEvent({type:Rc.ON_CLIP_MOUSE_MOVE,draggedFaceName:e})}return this.cameraControl.update(!0),!0}return yp.prototype.processMouseMove(this,A)},vp.prototype.processTouchstart=function(A){if(this.startPt.set(A.touches[0].clientX,A.touches[0].clientY),this.enablePick)return yp.prototype.processTouchstart(this,A);var e=this.cameraControl.getRaycaster(A.touches[0].clientX,A.touches[0].clientY);return this.scene.getClipPlanes().hitTest(e),this.selectIndex=this.getSelectIndex(),this.planeDistance=this.getPlaneDistanceInScreen(),null!==this.selectIndex?(this.highLight(),this.cameraControl.needUpdateRenderList(!0),this.cameraControl.update(!0),this.update(),!0):void 0},vp.prototype.processTouchmove=function(A){if(null!==this.selectIndex){if(this.isRotate())this.rotate(A.touches[0].clientX-this.startPt.x,A.touches[0].clientY-this.startPt.y),this.startPt.set(A.touches[0].clientX,A.touches[0].clientY);else{this.offset((2>this.selectIndex?A.touches[0].clientX-this.startPt.x:A.touches[0].clientY-this.startPt.y)/this.planeDistance),this.startPt.set(A.touches[0].clientX,A.touches[0].clientY)}return this.cameraControl.update(!0),this.update(),!0}return yp.prototype.processTouchmove(this,A)},vp.prototype.processTouchend=function(A){return this.selectIndex=null,this.planeDistance=0,this.enablePick&&(this.onUpdateUI({visible:!1}),this.startPt.x===A.touches[0].clientX&&this.startPt.y===A.touches[0].clientY&&this.pickHelper.click(A)),this.cameraControl.needUpdateRenderList(!0),this.cancelHighLight(),this.cameraControl.update(!0),this.update(),yp.prototype.processTouchend(this,A)};var Ip=function(A,e,t){yp.call(this,Pc.COMPONENT_TRANSFORM),this._callbackWrapper=void 0,this._objectCallbackWrapper=void 0,this._cancelCallback=void 0,this.transformControl=new Ep(A,e,t),this.bindingComponentKey=void 0};(Ip.prototype=Object.create(yp.prototype)).constructor=Ip,Ip.prototype.destroy=function(){this.transformControl.destory()},Ip.prototype.update=function(){this.transformControl.updateMatrixWorld()},Ip.prototype.transformComponent=function(A,e,t,i,o){if(A){var n=this.transformControl;n.object&&A!==n.object&&this.cancelTransformComponent(!1),this._callbackWrapper&&(this.transformControl.removeEventListener("change",this._callbackWrapper),this._callbackWrapper=void 0),this._objectCallbackWrapper&&(this.transformControl.removeEventListener("objectChange",this._objectCallbackWrapper),this._objectCallbackWrapper=void 0),this._cancelCallback&&(this._cancelCallback=void 0),this._pauseCallbackWrapper&&(this.transformControl.removeEventListener("mouseUp",this._pauseCallbackWrapper),this._pauseCallbackWrapper=void 0),e&&(this._callbackWrapper=function(A){e(A)},this.transformControl.addEventListener("change",this._callbackWrapper)),t&&(this._objectCallbackWrapper=function(A){t(A)},this.transformControl.addEventListener("objectChange",this._objectCallbackWrapper)),i&&(this._cancelCallback=i),o&&(this._pauseCallbackWrapper=function(A){o(A)},this.transformControl.addEventListener("mouseUp",this._pauseCallbackWrapper)),this._saveComponentOriginalTransformState(A),!0!==n.showX&&(n.showX=!0),!0!==n.showY&&(n.showY=!0),!0!==n.showZ&&(n.showZ=!0),!0!==n.enabled&&(n.enabled=!0),n.attach(A)}},Ip.prototype.cancelTransformComponent=function(){var A=this.transformControl.object;if(A)return this.transformControl.detach(),this._callbackWrapper&&(this.transformControl.removeEventListener("change",this._callbackWrapper),this._callbackWrapper=void 0),this._objectCallbackWrapper&&(this.transformControl.removeEventListener("objectChange",this._objectCallbackWrapper),this._objectCallbackWrapper=void 0),this._cancelCallback&&(this._cancelCallback(),this._cancelCallback=void 0),this.bindingComponentKey=void 0,A},Ip.prototype.switchToTranslateMode=function(){this.transformControl.setMode("translate")},Ip.prototype.switchToRotateMode=function(){this.transformControl.setMode("rotate")},Ip.prototype.switchToScaleMode=function(){this.transformControl.setMode("scale")},Ip.prototype._saveComponentOriginalTransformState=function(A){var e;if(A instanceof Array)e=A;else{if(!(A instanceof H))return;e=[A]}for(var t=0,i=e.length;i>t;t+=1){var o=e[t];if(!o.userData._originalTransformState){var n=o.position.clone(),r=o.quaternion.clone(),a=o.scale.clone(),s=o.matrix.clone(),l=o.matrixWorld.clone();o.userData._originalTransformState={position:n,quaternion:r,scale:a,matrix:s,matrixWorld:l}}}},Ip.prototype.restoreComponentOriginalTransformState=function(){if(!this.transformControl.object)return!1;var A,e=this.transformControl.object;if(e instanceof Array)A=e;else{if(!(e instanceof H))return!1;A=[e]}for(var t=!1,i=0,o=A.length;o>i;i+=1){var n=A[i],r=n.userData._originalTransformState;r&&(n.position.copy(r.position),n.quaternion.copy(r.quaternion),n.scale.copy(r.scale),n.matrix.copy(r.matrix),n.matrixWorld.copy(r.matrixWorld),this.transformControl.updateMatrixWorld(),this.transformControl.dispatchEvent({type:"objectChange"}),t=!0)}return t},Ip.prototype.increaseTransformControlSize=function(){var A=this.transformControl;if(A.object&&A.visible){var e=A.size;if(3>e)return A.setSize(e+.1),!0}return!1},Ip.prototype.decreaseTransformControlSize=function(){var A=this.transformControl;if(A.object&&A.visible){var e=A.size;if(e>.5)return A.setSize(e-.1),!0}return!1},Ip.prototype.setTransformSpaceToLocalSpace=function(){console.log("不再支持")},Ip.prototype.setTransformSpaceToWorldSpace=function(){console.log("不再支持")},Ip.prototype.switchTransformSpace=function(){console.log("不再支持")},Ip.prototype.showTransformOnAxis=function(A){var e=this.transformControl;if(e.object&&e.visible){var t=!1;switch(A){case"x":case"X":!0!==e.showX&&(t=!0,e.showX=!0);break;case"y":case"Y":!0!==e.showY&&(t=!0,e.showY=!0);break;case"z":case"Z":!0!==e.showZ&&(t=!0,e.showZ=!0)}return t}return!1},Ip.prototype.hideTransformOnAxis=function(A){var e=this.transformControl;if(e.object&&e.visible){var t=!1;switch(A){case"x":case"X":!1!==e.showX&&(t=!0,e.showX=!1);break;case"y":case"Y":!1!==e.showY&&(t=!0,e.showY=!1);break;case"z":case"Z":!1!==e.showZ&&(t=!0,e.showZ=!1)}return t}return!1},Ip.prototype.disableTransform=function(){var A=this.transformControl;return!(!A.object||!A.visible||!1===A.enabled)&&(A.enabled=!1,!0)},Ip.prototype.enableTransform=function(){var A=this.transformControl;return!(!A.object||!A.visible||!0===A.enabled)&&(A.enabled=!0,!0)},Ip.prototype.processMouseDown=function(A){return!!this.transformControl.enabled&&(!!this.transformControl.mouseHover(A)&&this.transformControl.mouseDown(A))},Ip.prototype.processMouseMove=function(A){return!!this.transformControl.enabled&&this.transformControl.mouseMove(A)},Ip.prototype.processMouseUp=function(A){return!!this.transformControl.enabled&&this.transformControl.mouseUp(A)},Ip.prototype.processHover=function(A){return!!this.transformControl.enabled&&this.transformControl.mouseHover(A)},Ip.onExit=function(){this.destroy()};var Ep=function(A,e,t){H.call(this),t=void 0!==t?t:document,this.scene=A,this.visible=!1;var i=new Bp;this.add(i);var o=new xp;this.add(o);var n=this;N("camera",e),N("object",void 0),N("enabled",!0),N("axis",null),N("mode","translate"),N("translationSnap",null),N("rotationSnap",null),N("space","world"),N("size",1),N("dragging",!1),N("showX",!0),N("showY",!0),N("showZ",!0);var r={type:"change"},a={type:"mouseDown"},s={type:"mouseUp",mode:n.mode},l={type:"objectChange"},c=new Dd,h=new y,d=new y,p=new f,g={X:new y(1,0,0),Y:new y(0,1,0),Z:new y(0,0,1)},u=new y,m=new y,C=new y,v=new y,I=new y,E=new y,B=0,x=new y,S=new f,w=new y,b=new y,U=new f,F=new f,K=new y(1,1,1),Q=new y,R=new y,T=new f,k=new f,D=new y,L=new y;function N(A,e){var t=e;Object.defineProperty(n,A,{get:function(){return void 0!==t?t:e},set:function(e){t!==e&&(t=e,o[A]=e,i[A]=e,n.dispatchEvent({type:A+"-changed",value:e}),n.dispatchEvent(r))}}),n[A]=e,o[A]=e,i[A]=e}function O(A){var e=A.changedTouches?A.changedTouches[0]:A,i=t.getBoundingClientRect();return{x:(e.clientX-i.left)/i.width*2-1,y:-(e.clientY-i.top)/i.height*2+1,button:A.button}}N("worldPosition",R),N("worldPositionStart",Q),N("worldQuaternion",T),N("cameraPosition",x),N("cameraQuaternion",S),N("pointStart",u),N("pointEnd",m),N("rotationAxis",v),N("rotationAngle",B),N("eye",L),this.attach=function(e){e&&(this.object!==e&&(this.scene.add(this),A.componentTransformControl=this,this.object=e,r.object=e,l.object=e,this.updateMatrixWorld()),this.visible=!0)},this.detach=function(){this.object&&(this.object=void 0,r.object=void 0),this.parent&&this.parent.remove(this),this.scene.componentTransformControl=void 0},this.destory=function(){this.scene.componentTransformControl=void 0,this.scene=void 0,this.axis=void 0,this.camera=void 0},this.updateMatrixWorld=function(){if(void 0!==this.object){var A,e=new aA;if(this.object instanceof Array)A=this.object;else{if(!(this.object instanceof H))return;A=[this.object]}for(var t=0,i=A.length;i>t;t+=1){var o=A[t];if(o.geometry)e.expandByObject(A[t]);else{var n=new y;o.getWorldPosition(n),e.expandByPoint(n)}}A[0].parent&&A[0].parent.matrixWorld.decompose(b,U,K),A[0].matrixWorld.decompose(R,T,D),e.getCenter(R),F.copy(U).inverse(),k.copy(T).inverse()}this.camera.updateMatrixWorld(),this.camera.matrixWorld.decompose(x,S,w),this.camera instanceof je?L.copy(x).sub(R).normalize():this.camera instanceof Ka?L.copy(x).normalize():this.camera instanceof kd&&(this.camera.isPerspective?L.copy(x).sub(R).normalize():L.copy(x).normalize()),H.prototype.updateMatrixWorld.call(this)},this.mouseHover=function(A){var e=O(A);if(void 0===this.object||!0===this.dragging||void 0!==e.button&&0!==e.button)return!1;c.setFromCamera(e,this.camera);var t,o=c.intersectObjects(i.picker[this.mode].children,!0)||!1;return o?(this.axis=o.object.name,t=!0):(this.axis=null,t=!1),this.updateMatrixWorld(),t},this.mouseDown=function(A){var e=O(A);if(void 0===this.object||!0===this.dragging||void 0!==e.button&&0!==e.button)return!1;if((0===e.button||void 0===e.button)&&null!==this.axis){c.setFromCamera(e,this.camera);var t=c.intersectObjects([o],!0)||!1;return!1!==t&&(t&&(Q.copy(R),u.copy(t.point).sub(Q)),this.dragging=!0,a.mode=this.mode,this.dispatchEvent(a),!0)}},this.mouseMove=function(A){var e=O(A),t=this.axis,i=this.mode,n=void 0;if(void 0===this.object||null===t||!1===this.dragging||void 0!==e.button&&0!==e.button)return!1;c.setFromCamera(e,this.camera);var a=c.intersectObjects([o],!0)||!1;if(!1===a)return!1;if(m.copy(a.point).sub(Q),"translate"===i)C.copy(m).sub(u),-1===t.indexOf("X")&&(C.x=0),-1===t.indexOf("Y")&&(C.y=0),-1===t.indexOf("Z")&&(C.z=0),C.applyQuaternion(F).divide(K),0===C.x&&0===C.y&&0===C.z||(n=this._translateCurrentObject(C));else if("scale"===i){if(-1!==t.search("XYZ")){var s=m.length()/u.length();0>m.dot(u)&&(s*=-1),d.set(s,s,s)}else h.copy(u),d.copy(m),h.applyQuaternion(k),d.applyQuaternion(k),d.divide(h),-1===t.search("X")&&(d.x=1),-1===t.search("Y")&&(d.y=1),-1===t.search("Z")&&(d.z=1);1===d.x&&1===d.y&&1===d.z||(n=this._scaleCurrentObject(d))}else if("rotate"===i){C.copy(m).sub(u);var y=20/R.distanceTo(h.setFromMatrixPosition(this.camera.matrixWorld));if("E"===t?(v.copy(L),B=m.angleTo(u),I.copy(u).normalize(),E.copy(m).normalize(),B*=0>E.cross(I).dot(L)?1:-1):"XYZE"===t?(v.copy(C).cross(L).normalize(),B=C.dot(h.copy(v).cross(this.eye))*y):"X"!==t&&"Y"!==t&&"Z"!==t||(v.copy(g[t]),h.copy(g[t]),B=C.dot(h.cross(L).normalize())*y),this.rotationAngle=B,0!==B){var x=new f;v.applyQuaternion(F),x.copy(p.setFromAxisAngle(v,B)),x.normalize(),n=this._rotateCurrentObject(x)}}return n?(this.updateMatrixWorld(),this.dispatchEvent(r),l.matrix=n.clone(),this.dispatchEvent(l),u.copy(m),!0):void 0},this.mouseUp=function(A){var e=O(A);return(void 0===e.button||0===e.button)&&(this.dragging&&null!==this.axis&&(s.mode=this.mode,this.dispatchEvent(s)),this.dragging=!1,void 0===e.button&&(this.axis=null),!0)},this.getMode=function(){return n.mode},this.setMode=function(A){n.mode=A,this.updateMatrixWorld()},this.setTranslationSnap=function(A){n.translationSnap=A},this.setRotationSnap=function(A){n.rotationSnap=A},this.setSize=function(A){n.size=A},this.setSpace=function(A){n.space=A},this.getBoundingBox=function(){return i.getBoundingBox()},this._scaleCurrentObject=function(){var A=new M,e=new M,t=new M,i=new M,o=new y;return function(n){var r;if(this.object instanceof Array)r=this.object;else{if(!(this.object instanceof H))return;r=[this.object]}for(var a=0,s=r.length;s>a;a+=1){var l=r[a];l.geometry?(l.geometry.boundingBox||l.geometry.computeBoundingBox(),l.geometry.boundingBox.getCenter(o),o.applyMatrix4(l.matrix)):o.copy(l.position),e.makeTranslation(-o.x,-o.y,-o.z),t.makeScale(n.x,n.y,n.z),i.makeTranslation(o.x,o.y,o.z),A.identity(),A.multiply(i),A.multiply(t),A.multiply(e);var c=l.matrixAutoUpdate;l.matrixAutoUpdate=!1,l.applyMatrix4(A),l.updateMatrixWorld(!0),l.matrixAutoUpdate=c}return A}}(),this._rotateCurrentObject=function(){var A=new M,e=new M,t=new M,i=new M,o=new y;return function(n){var r;if(this.object instanceof Array)r=this.object;else{if(!(this.object instanceof H))return;r=[this.object]}for(var a=0,s=r.length;s>a;a+=1){var l=r[a];l.geometry?(l.geometry.boundingBox||l.geometry.computeBoundingBox(),l.geometry.boundingBox.getCenter(o),o.applyMatrix4(l.matrix)):o.copy(l.position),A.makeTranslation(-o.x,-o.y,-o.z),e.makeRotationFromQuaternion(n),t.makeTranslation(o.x,o.y,o.z),i.identity(),i.multiply(t),i.multiply(e),i.multiply(A);var c=l.matrixAutoUpdate;l.matrixAutoUpdate=!1,l.applyMatrix4(i),l.matrixAutoUpdate=c,l.updateMatrixWorld(!0)}return i}}(),this._translateCurrentObject=function(){var A=new M;return function(e){var t;if(this.object instanceof Array)t=this.object;else{if(!(this.object instanceof H))return;t=[this.object]}A.makeTranslation(e.x,e.y,e.z);for(var i=0,o=t.length;o>i;i+=1){var n=t[i],r=n.matrixAutoUpdate;n.matrixAutoUpdate=!1,n.applyMatrix4(A),n.matrixAutoUpdate=r,n.updateMatrixWorld(!0)}return A}}()};Ep.prototype=Object.assign(Object.create(H.prototype),{constructor:Ep,isTransformControls:!0});var Bp=function(){H.call(this),this.type="TransformControlsGizmo";var A=new jA({depthTest:!1,depthWrite:!1,transparent:!0,side:2,fog:!1}),e=new ko({depthTest:!1,depthWrite:!1,transparent:!0,linewidth:1,fog:!1}),t=A.clone();t.opacity=.15;var i=A.clone();i.opacity=.33;var o=A.clone();o.color.set(16711680);var n=A.clone();n.color.set(65280);var r=A.clone();r.color.set(255);var a=A.clone();a.opacity=.25;var s=a.clone();s.color.set(16776960);var l=a.clone();l.color.set(65535);var c=a.clone();c.color.set(16711935),A.clone().color.set(16776960);var h=e.clone();h.color.set(16711680);var d=e.clone();d.color.set(65280);var p=e.clone();p.color.set(255);var g=e.clone();g.color.set(65535);var u=e.clone();u.color.set(16711935);var m=e.clone();m.color.set(16776960);var C=e.clone();C.color.set(7895160);var v=m.clone();v.opacity=.25;var I=new hr(0,.05,.2,12,1,!1),E=new Ne(.125,.125,.125),B=new he;B.setAttribute("position",new Ae([0,0,0,1,0,0],3));var x,S=function(A,e){for(var t=new he,i=[],o=0;64*e>=o;++o)i.push(0,Math.cos(o/32*Math.PI)*A,Math.sin(o/32*Math.PI)*A);return t.setAttribute("position",new Ae(i,3)),t},w={X:[[new Ue(I,o),[1,0,0],[0,0,-Math.PI/2],null,"fwd"],[new Ue(I,o),[1,0,0],[0,0,Math.PI/2],null,"bwd"],[new Go(B,h)]],Y:[[new Ue(I,n),[0,1,0],null,null,"fwd"],[new Ue(I,n),[0,1,0],[Math.PI,0,0],null,"bwd"],[new Go(B,d),null,[0,0,Math.PI/2]]],Z:[[new Ue(I,r),[0,0,1],[Math.PI/2,0,0],null,"fwd"],[new Ue(I,r),[0,0,1],[-Math.PI/2,0,0],null,"bwd"],[new Go(B,p),null,[0,-Math.PI/2,0]]],XYZ:[[new Ue(new dn(.1,0),a),[0,0,0],[0,0,0]]],XY:[[new Ue(new et(.295,.295),s),[.15,.15,0]],[new Go(B,m),[.18,.3,0],null,[.125,1,1]],[new Go(B,m),[.3,.18,0],[0,0,Math.PI/2],[.125,1,1]]],YZ:[[new Ue(new et(.295,.295),l),[0,.15,.15],[0,Math.PI/2,0]],[new Go(B,g),[0,.18,.3],[0,0,Math.PI/2],[.125,1,1]],[new Go(B,g),[0,.3,.18],[0,-Math.PI/2,0],[.125,1,1]]],XZ:[[new Ue(new et(.295,.295),c),[.15,0,.15],[-Math.PI/2,0,0]],[new Go(B,u),[.18,0,.3],null,[.125,1,1]],[new Go(B,u),[.3,0,.18],[0,-Math.PI/2,0],[.125,1,1]]]},b={X:[[new Ue(new hr(.2,0,1,4,1,!1),t),[.6,0,0],[0,0,-Math.PI/2]]],Y:[[new Ue(new hr(.2,0,1,4,1,!1),t),[0,.6,0]]],Z:[[new Ue(new hr(.2,0,1,4,1,!1),t),[0,0,.6],[Math.PI/2,0,0]]],XYZ:[[new Ue(new dn(.2,0),t)]],XY:[[new Ue(new et(.4,.4),t),[.2,.2,0]]],YZ:[[new Ue(new et(.4,.4),t),[0,.2,.2],[0,Math.PI/2,0]]],XZ:[[new Ue(new et(.4,.4),t),[.2,0,.2],[-Math.PI/2,0,0]]]},U={START:[[new Ue(new dn(.01,2),i),null,null,null,"helper"]],END:[[new Ue(new dn(.01,2),i),null,null,null,"helper"]],DELTA:[[new Go((x=new he,x.setAttribute("position",new Ae([0,0,0,1,1,1],3)),x),i),null,null,null,"helper"]],X:[[new Go(B,i.clone()),[-1e3,0,0],null,[1e6,1,1],"helper"]],Y:[[new Go(B,i.clone()),[0,-1e3,0],[0,0,Math.PI/2],[1e6,1,1],"helper"]],Z:[[new Go(B,i.clone()),[0,0,-1e3],[0,-Math.PI/2,0],[1e6,1,1],"helper"]]},K={X:[[new Go(S(1,.5),h)],[new Ue(new dn(.04,0),o),[0,0,.99],null,[1,3,1]]],Y:[[new Go(S(1,.5),d),null,[0,0,-Math.PI/2]],[new Ue(new dn(.04,0),n),[0,0,.99],null,[3,1,1]]],Z:[[new Go(S(1,.5),p),null,[0,Math.PI/2,0]],[new Ue(new dn(.04,0),r),[.99,0,0],null,[1,3,1]]],E:[[new Go(S(1.25,1),v),null,[0,Math.PI/2,0]],[new Ue(new hr(.03,0,.15,4,1,!1),v),[1.17,0,0],[0,0,-Math.PI/2],[1,1,.001]],[new Ue(new hr(.03,0,.15,4,1,!1),v),[-1.17,0,0],[0,0,Math.PI/2],[1,1,.001]],[new Ue(new hr(.03,0,.15,4,1,!1),v),[0,-1.17,0],[Math.PI,0,0],[1,1,.001]],[new Ue(new hr(.03,0,.15,4,1,!1),v),[0,1.17,0],[0,0,0],[1,1,.001]]],XYZE:[[new Go(S(1,1),C),null,[0,Math.PI/2,0]]]},Q={AXIS:[[new Go(B,i.clone()),[-1e3,0,0],null,[1e6,1,1],"helper"]]},R={X:[[new Ue(new En(1,.1,4,24),t),[0,0,0],[0,-Math.PI/2,-Math.PI/2]]],Y:[[new Ue(new En(1,.1,4,24),t),[0,0,0],[Math.PI/2,0,0]]],Z:[[new Ue(new En(1,.1,4,24),t),[0,0,0],[0,0,-Math.PI/2]]],E:[[new Ue(new En(1.25,.1,2,24),t)]],XYZE:[[new Ue(new er(.7,10,8),t)]]},T={X:[[new Ue(E,o),[.8,0,0],[0,0,-Math.PI/2]],[new Go(B,h),null,null,[.8,1,1]]],Y:[[new Ue(E,n),[0,.8,0]],[new Go(B,d),null,[0,0,Math.PI/2],[.8,1,1]]],Z:[[new Ue(E,r),[0,0,.8],[Math.PI/2,0,0]],[new Go(B,p),null,[0,-Math.PI/2,0],[.8,1,1]]],XY:[[new Ue(E,s),[.85,.85,0],null,[2,2,.2]],[new Go(B,m),[.855,.98,0],null,[.125,1,1]],[new Go(B,m),[.98,.855,0],[0,0,Math.PI/2],[.125,1,1]]],YZ:[[new Ue(E,l),[0,.85,.85],null,[.2,2,2]],[new Go(B,g),[0,.855,.98],[0,0,Math.PI/2],[.125,1,1]],[new Go(B,g),[0,.98,.855],[0,-Math.PI/2,0],[.125,1,1]]],XZ:[[new Ue(E,c),[.85,0,.85],null,[2,.2,2]],[new Go(B,u),[.855,0,.98],null,[.125,1,1]],[new Go(B,u),[.98,0,.855],[0,-Math.PI/2,0],[.125,1,1]]],XYZX:[[new Ue(new Ne(.125,.125,.125),a),[1.1,0,0]]],XYZY:[[new Ue(new Ne(.125,.125,.125),a),[0,1.1,0]]],XYZZ:[[new Ue(new Ne(.125,.125,.125),a),[0,0,1.1]]]},k={X:[[new Ue(new hr(.2,0,.8,4,1,!1),t),[.5,0,0],[0,0,-Math.PI/2]]],Y:[[new Ue(new hr(.2,0,.8,4,1,!1),t),[0,.5,0]]],Z:[[new Ue(new hr(.2,0,.8,4,1,!1),t),[0,0,.5],[Math.PI/2,0,0]]],XY:[[new Ue(E,t),[.85,.85,0],null,[3,3,.2]]],YZ:[[new Ue(E,t),[0,.85,.85],null,[.2,3,3]]],XZ:[[new Ue(E,t),[.85,0,.85],null,[3,.2,3]]],XYZX:[[new Ue(new Ne(.2,.2,.2),t),[1.1,0,0]]],XYZY:[[new Ue(new Ne(.2,.2,.2),t),[0,1.1,0]]],XYZZ:[[new Ue(new Ne(.2,.2,.2),t),[0,0,1.1]]]},D={X:[[new Go(B,i.clone()),[-1e3,0,0],null,[1e6,1,1],"helper"]],Y:[[new Go(B,i.clone()),[0,-1e3,0],[0,0,Math.PI/2],[1e6,1,1],"helper"]],Z:[[new Go(B,i.clone()),[0,0,-1e3],[0,-Math.PI/2,0],[1e6,1,1],"helper"]]},L=function(A){var e=new H;for(var t in A)for(var i=A[t].length;i--;){var o=A[t][i][0].clone(),n=A[t][i][1],r=A[t][i][2],a=A[t][i][3],s=A[t][i][4];o.name=t,o.tag=s,n&&o.position.set(n[0],n[1],n[2]),r&&o.rotation.set(r[0],r[1],r[2]),a&&o.scale.set(a[0],a[1],a[2]),o.updateMatrix();var l=o.geometry.clone();l.applyMatrix4(o.matrix),o.geometry=l,o.renderOrder=1/0,o.position.set(0,0,0),o.rotation.set(0,0,0),o.scale.set(1,1,1),e.add(o)}return e},N=new F,O=new y(0,1,0),V=new y(0,0,0),G=new M,P=new f,q=new f,j=new f,Y=new y(1,0,0),W=new y(0,1,0),J=new y(0,0,1);this.gizmo={},this.picker={},this.helper={},this.add(this.gizmo.translate=L(w)),this.add(this.gizmo.rotate=L(K)),this.add(this.gizmo.scale=L(T)),this.add(this.picker.translate=L(b)),this.add(this.picker.rotate=L(R)),this.add(this.picker.scale=L(k)),this.add(this.helper.translate=L(U)),this.add(this.helper.rotate=L(Q)),this.add(this.helper.scale=L(D)),this.picker.translate.visible=!1,this.picker.rotate.visible=!1,this.picker.scale.visible=!1,this.updateMatrixWorld=function(){var A=this.space;"scale"===this.mode&&(A="local");var e="local"===A?this.worldQuaternion:j;this.gizmo.translate.visible="translate"===this.mode,this.gizmo.rotate.visible="rotate"===this.mode,this.gizmo.scale.visible="scale"===this.mode,this.helper.translate.visible="translate"===this.mode,this.helper.rotate.visible="rotate"===this.mode,this.helper.scale.visible="scale"===this.mode;var t=[];t=(t=(t=t.concat(this.picker[this.mode].children)).concat(this.gizmo[this.mode].children)).concat(this.helper[this.mode].children);for(var i=this.boundingBox?this.boundingBox.makeEmpty():new aA,o=0;t.length>o;o++){var n=t[o];n.visible=!0,n.rotation.set(0,0,0),n.position.copy(this.worldPosition);var r=this.worldPosition.distanceTo(this.cameraPosition);if(n.scale.set(1,1,1).multiplyScalar(r*this.size/7),"helper"!==n.tag){if(n.quaternion.copy(e),"translate"===this.mode||"scale"===this.mode){"X"!==n.name&&"XYZX"!==n.name||Math.abs(O.copy(Y).applyQuaternion(e).dot(this.eye))>.99&&(n.scale.set(1e-10,1e-10,1e-10),n.visible=!1),"Y"!==n.name&&"XYZY"!==n.name||Math.abs(O.copy(W).applyQuaternion(e).dot(this.eye))>.99&&(n.scale.set(1e-10,1e-10,1e-10),n.visible=!1),"Z"!==n.name&&"XYZZ"!==n.name||Math.abs(O.copy(J).applyQuaternion(e).dot(this.eye))>.99&&(n.scale.set(1e-10,1e-10,1e-10),n.visible=!1),"XY"===n.name&&.2>Math.abs(O.copy(J).applyQuaternion(e).dot(this.eye))&&(n.scale.set(1e-10,1e-10,1e-10),n.visible=!1),"YZ"===n.name&&.2>Math.abs(O.copy(Y).applyQuaternion(e).dot(this.eye))&&(n.scale.set(1e-10,1e-10,1e-10),n.visible=!1),"XZ"===n.name&&.2>Math.abs(O.copy(W).applyQuaternion(e).dot(this.eye))&&(n.scale.set(1e-10,1e-10,1e-10),n.visible=!1),-1!==n.name.search("X")&&(0>O.copy(Y).applyQuaternion(e).dot(this.eye)?"fwd"===n.tag?n.visible=!1:n.scale.x*=-1:"bwd"===n.tag&&(n.visible=!1)),-1!==n.name.search("Y")&&(0>O.copy(W).applyQuaternion(e).dot(this.eye)?"fwd"===n.tag?n.visible=!1:n.scale.y*=-1:"bwd"===n.tag&&(n.visible=!1)),-1!==n.name.search("Z")&&(0>O.copy(J).applyQuaternion(e).dot(this.eye)?"fwd"===n.tag?n.visible=!1:n.scale.z*=-1:"bwd"===n.tag&&(n.visible=!1))}else"rotate"===this.mode&&(q.copy(e),O.copy(this.eye).applyQuaternion(P.copy(e).inverse()),-1!==n.name.search("E")&&n.quaternion.setFromRotationMatrix(G.lookAt(this.eye,V,W)),"X"===n.name&&(P.setFromAxisAngle(Y,Math.atan2(-O.y,O.z)),P.multiplyQuaternions(q,P),n.quaternion.copy(P)),"Y"===n.name&&(P.setFromAxisAngle(W,Math.atan2(O.x,O.z)),P.multiplyQuaternions(q,P),n.quaternion.copy(P)),"Z"===n.name&&(P.setFromAxisAngle(J,Math.atan2(O.y,O.x)),P.multiplyQuaternions(q,P),n.quaternion.copy(P)));n.visible=n.visible&&(-1===n.name.indexOf("X")||this.showX),n.visible=n.visible&&(-1===n.name.indexOf("Y")||this.showY),n.visible=n.visible&&(-1===n.name.indexOf("Z")||this.showZ),n.visible=n.visible&&(-1===n.name.indexOf("E")||this.showX&&this.showY&&this.showZ),n.material._opacity=n.material._opacity||n.material.opacity,n.material._color=n.material._color||n.material.color.clone(),n.material.color.copy(n.material._color),n.material.opacity=n.material._opacity,this.enabled?this.axis&&(n.name===this.axis||this.axis.split("").some((function(A){return n.name===A}))?(n.material.opacity=1,n.material.color.lerp(new LA(1,1,1),.5)):(n.material.opacity*=.25,n.material.color.lerp(new LA(1,1,1),.5))):(n.material.opacity*=.5,n.material.color.lerp(new LA(1,1,1),.5)),i.expandByObject(n)}else if(n.visible=!1,"AXIS"===n.name)n.position.copy(this.worldPositionStart),n.visible=!!this.axis,"X"===this.axis&&(P.setFromEuler(N.set(0,0,0)),n.quaternion.copy(e).multiply(P),Math.abs(O.copy(Y).applyQuaternion(e).dot(this.eye))>.9&&(n.visible=!1)),"Y"===this.axis&&(P.setFromEuler(N.set(0,0,Math.PI/2)),n.quaternion.copy(e).multiply(P),Math.abs(O.copy(W).applyQuaternion(e).dot(this.eye))>.9&&(n.visible=!1)),"Z"===this.axis&&(P.setFromEuler(N.set(0,Math.PI/2,0)),n.quaternion.copy(e).multiply(P),Math.abs(O.copy(J).applyQuaternion(e).dot(this.eye))>.9&&(n.visible=!1)),"XYZE"===this.axis&&(P.setFromEuler(N.set(0,Math.PI/2,0)),O.copy(this.rotationAxis),n.quaternion.setFromRotationMatrix(G.lookAt(V,O,W)),n.quaternion.multiply(P),n.visible=this.dragging),"E"===this.axis&&(n.visible=!1);else if("START"===n.name)n.position.copy(this.worldPositionStart),n.visible=this.dragging;else if("END"===n.name)n.position.copy(this.worldPosition),n.visible=this.dragging;else if("DELTA"===n.name){n.position.set(0,0,0),n.scale.set(1,1,1);var a=n.geometry.getAttribute("position");a.setXYZ(0,this.worldPositionStart.x,this.worldPositionStart.y,this.worldPositionStart.z),a.setXYZ(1,this.worldPosition.x,this.worldPosition.y,this.worldPosition.z),a.needsUpdate=!0,n.visible=this.dragging}else n.quaternion.copy(e),n.position.copy(this.dragging?this.worldPositionStart:this.worldPosition),this.axis&&(n.visible=-1!==this.axis.search(n.name))}this.boundingBox=i,H.prototype.updateMatrixWorld.call(this)},this.getBoundingBox=function(){return this.boundingBox||this.updateMatrixWorld(),this.boundingBox}};Bp.prototype=Object.assign(Object.create(H.prototype),{constructor:Bp,isTransformControlsGizmo:!0});var xp=function(){Ue.call(this,new et(4,4,2,2),new jA({visible:!1,wireframe:!0,side:2,transparent:!0,opacity:.1})),this.type="TransformControlsPlane";var A=new y(1,0,0),e=new y(0,1,0),t=new y(0,0,1),i=new y,o=new y,n=new y,r=new M,a=new f;this.updateMatrixWorld=function(){var s=this.space;switch(this.position.copy(this.worldPosition),"scale"===this.mode&&(s="local"),A.set(1,0,0).applyQuaternion("local"===s?this.worldQuaternion:a),e.set(0,1,0).applyQuaternion("local"===s?this.worldQuaternion:a),t.set(0,0,1).applyQuaternion("local"===s?this.worldQuaternion:a),n.copy(e),this.mode){case"translate":case"scale":switch(this.axis){case"X":n.copy(this.eye).cross(A),o.copy(A).cross(n);break;case"Y":n.copy(this.eye).cross(e),o.copy(e).cross(n);break;case"Z":n.copy(this.eye).cross(t),o.copy(t).cross(n);break;case"XY":o.copy(t);break;case"YZ":o.copy(A);break;case"XZ":n.copy(t),o.copy(e);break;case"XYZ":case"E":o.set(0,0,0)}break;case"rotate":default:o.set(0,0,0)}0===o.length()?this.quaternion.copy(this.cameraQuaternion):(r.lookAt(i.set(0,0,0),o,n),this.quaternion.setFromRotationMatrix(r));var l=this.worldPosition.distanceTo(this.cameraPosition);this.scale.set(1,1,1).multiplyScalar(l*this.size/7),H.prototype.updateMatrixWorld.call(this)}};xp.prototype=Object.assign(Object.create(Ue.prototype),{constructor:xp,isTransformControlsPlane:!0});var Sp=function(A){yp.call(this,Pc.CLIP_FILL),this.viewer=A,this.scene=A.getScene(),this.enablePick=!1,this.rotX=!0,this.onClipPlane=!1,this.cameraControl=A.cameraControl,this.startPt=new s,this.endPt=new s,this.frustum=new Ze,this.modelManager=this.cameraControl.viewer.modelManager;var e=this.scene.getFillClipPlane();e.updateClippingParams=function(e){if(0===e.iClipPlane.value)A.getRenderer().clippingPlanes=Object.freeze([]);else{var t=[new EA],i=e.vClipPlane.value[0],o=t[0];o.setComponents(-i.x,-i.y,-i.z,-i.w),o.normalize(),A.getRenderer().clippingPlanes=t,this.renderClipPlane=new EA,this.renderClipPlane.setComponents(i.x,i.y,i.z,-i.w),this.renderClipPlane.normalize(),this.calculateFillClipBoundingBox(o.coplanarPoint(new y))}},e.init(),this.planeDistance=0,this.offsetSpeed=.02,this.toggle=function(A,t){e.enable(A,t),e.update()},this.visible=function(A){e.visible=A,e.update()},this.rotatable=function(A){e.rotatable=A,e.update()},this.hit=function(){return e.hit},this.pointToScreen=function(A){var e=this.cameraControl.camera,t=new M;t.multiplyMatrices(e.projectionMatrix,e.matrixWorldInverse);var i=new p(A.x,A.y,A.z,1);i.applyMatrix4(t);var o=new s;o.x=(i.x/i.w+1)/2,o.y=1-(i.y/i.w+1)/2;var n=this.cameraControl.getContainerDimensions();return o.x=o.x*n.width+n.left,o.y=o.y*n.height+n.top,o},this.getPlaneDistanceInScreen=function(){if(null===this.selectIndex)return null;if(2>this.selectIndex){var A=e.clipPlanes.center.clone(),t=e.clipPlanes.center.clone();A.x-=e.clipPlanes.cubeSize.x,t.x+=e.clipPlanes.cubeSize.x;var i=this.pointToScreen(A),o=this.pointToScreen(t);return i.x-o.x}var n=e.clipPlanes.center.clone(),r=e.clipPlanes.center.clone();r.y-=e.clipPlanes.cubeSize.y,n.y+=e.clipPlanes.cubeSize.y;var a=this.pointToScreen(r),s=this.pointToScreen(n);return a.y-s.y},this.getPickPoint=function(A,e){var t=this.cameraControl.camera,i=this.cameraControl.getContainerDimensions(),o=(A-i.left)/i.width*2-1,n=(i.height-(e-i.top))/i.height*2-1,r=new Dd;return r.setFromCamera(new s(o,n),t),r.ray.intersectPlane(this.plane)},this._isVisible=function(){return e.visible},this.isRotate=function(){return e.rotatable},this.offset=function(A){e.offset(A)},this.setOffset=function(A){e.setOffset(A)},this.rotate=function(A,t){this.rotX?e.rotX(t/180*Math.PI*.1):e.rotY(A/180*Math.PI*.1)},this.rotateAngleOffset=function(A,t){e.rotateAngleOffset(A,t)},this.setRotateAngle=function(A,t){e.setRotateAngle(A,t)},this.getRotateAngle=function(){return e.getRotateAngle()},this.changeNormal=function(A){e.changeNormal(A)},this.update=function(A){e.update(A)},this.cancelHighLight=function(){e.cancelHighLight()},this.highLight=function(){e.highLight()},this.store=function(){return e.store()},this.restore=function(A){e.restore(A)},this.setProcess=function(A){e.setProcess(A)},this.getProcess=function(){return e.getProcess()}};(Sp.prototype=Object.create(yp.prototype)).constructor=Sp,Sp.prototype.destroy=function(){this.cameraControl=null,this.normal=null,this.plane=null,this.pickHelper=null,this.scene=null,this.viewer=null},Sp.prototype.onExit=function(){this.toggle(!1,!1)},Sp.prototype.processMouseDown=function(A){if(this.startPt.set(A.clientX,A.clientY),!this.enablePick&&A.button===t.LEFT){var e=this.cameraControl.getRaycaster(A.clientX,A.clientY);if(this.scene.getFillClipPlane().hitTest(e),this.hit())return this.highLight(),this.cameraControl.needUpdateRenderList(!0),this.cameraControl.update(!0),!0}return yp.prototype.processMouseDown(this,A)},Sp.prototype.processMouseUp=function(A){this.planeDistance=0;var e=!1;if(this.enablePick&&A.button===t.LEFT)if(this.startPt.x===A.clientX&&this.startPt.y===A.clientY)this.pickHelper.click(A);else if(A.shiftKey||A.ctrlKey||A.altKey){this.endPt.set(A.clientX,A.clientY);var i=Kc.Clear;A.ctrlKey?i=Kc.Add:A.altKey&&(i=Kc.Remove);var o=this;this.scene.pickByRect(this.frustum,i,(function(){o.pickHelper.notifySelectionChanged(null,0,A)})),this.cameraControl.updateView(!0),e=!0}var n=this.cameraControl.getRaycaster(A.clientX,A.clientY);return this.scene.getFillClipPlane().hitTest(n),this.hit()?(this.highLight(),this.cameraControl.needUpdateRenderList(!0),this.cameraControl.update(!0),this.onClipPlane||(this.onClipPlane=!0,this.modelManager.dispatchEvent({type:Rc.ON_CLIP_HOVER,onClipPlane:!0,event:A})),e=!0):(this.cancelHighLight(),this.cameraControl.needUpdateRenderList(!0),this.cameraControl.update(!0),this.onClipPlane&&(this.onClipPlane=!1,this.modelManager.dispatchEvent({type:Rc.ON_CLIP_HOVER,onClipPlane:!1,event:A}))),e},Sp.prototype.processMouseMove=function(A){return this.modelManager.dispatchEvent({type:Rc.ON_CLIP_MOUSE_MOVE,event:A}),yp.prototype.processMouseMove(this,A)},Sp.prototype.processTouchstart=function(A){if(this.startPt.set(A.touches[0].clientX,A.touches[0].clientY),!this.enablePick){var e=this.cameraControl.getRaycaster(A.touches[0].clientX,A.touches[0].clientY);this.scene.getFillClipPlane().hitTest(e)}return this.hit()?(this.highLight(),this.cameraControl.needUpdateRenderList(!0),this.cameraControl.update(!0),!0):yp.prototype.processTouchstart(this,A)},Sp.prototype.processTouchmove=function(A){if(this.hit()){if(this.isRotate())this.rotate(A.touches[0].clientX-this.startPt.x,A.touches[0].clientY-this.startPt.y),this.startPt.set(A.touches[0].clientX,A.touches[0].clientY);else{this.offset(Number(A.touches[0].clientX-this.startPt.x)),this.startPt.set(A.touches[0].clientX,A.touches[0].clientY)}return this.cameraControl.update(!0),!0}return yp.prototype.processTouchmove(this,A)},Sp.prototype.processTouchend=function(A){return this.enablePick&&(this.onUpdateUI({visible:!1}),this.startPt.x===A.touches[0].clientX&&this.startPt.y===A.touches[0].clientY&&this.pickHelper.click(A)),this.cameraControl.needUpdateRenderList(!0),this.cancelHighLight(),this.cameraControl.update(!0),yp.prototype.processTouchmove(this,A)},Sp.prototype.processHover=function(A){if(!this.enablePick){var e=!1,t=this.cameraControl.getRaycaster(A.clientX,A.clientY);return this.scene.getFillClipPlane().hitTest(t),this.hit()?(this.onClipPlane||(this.highLight(),this.cameraControl.needUpdateRenderList(!0),this.cameraControl.update(!0),this.onClipPlane=!0,this.modelManager.dispatchEvent({type:Rc.ON_CLIP_HOVER,onClipPlane:!0,event:A})),e=!0):this.onClipPlane?(this.cancelHighLight(),this.cameraControl.needUpdateRenderList(!0),this.cameraControl.update(!0),this.onClipPlane=!1,this.modelManager.dispatchEvent({type:Rc.ON_CLIP_HOVER,onClipPlane:!1,event:A})):this.modelManager.dispatchEvent({type:Rc.ON_CLIP_HOVER,onClipPlane:!1,event:A}),e}return yp.prototype.processHover(this,A)};var wp=function(){this.vertexIndex=new Array(2),this.faceIndex=new Array(2)},Mp=function(A,e){var t=A.length/3,i=new Array(t),o=new Array(t);function n(A,e){var t=i[A],o=i[e];return t.x!==o.x?t.x-o.x:t.y!==o.y?t.y-o.y:t.z-o.z}for(var r=0;t>r;r+=1)i[r]=new y(A[3*r],A[3*r+1],A[3*r+2]),o[r]=r;o.sort((function(A,e){var t=n(A,e);return 0===t?A-e:t}));var a={},s=o[0];for(r=1;t>r;r+=1)0===n(s,o[r])?a[o[r]]=s:s=o[r];var l=new Array(e.length);for(r=0;e.length>r;r+=1)l[r]=a.hasOwnProperty(e[r])?a[e[r]]:e[r];return l},bp=function(A,e){function t(A,e){return A-e}var i=Mp(A,e);i.sort(t);var o=[],n=i[0];o.push(n);for(var r=1;i.length>r;r+=1)i[r]!==n&&o.push(n=i[r]);return o.sort(t)},Up=function(A,e,t){t=void 0===t?Math.PI/4:t;var i=Mp(A,e),o=i.length,n=A.length/3,r=new Array(n+o),a=n,s=i.length/3;parseInt(s,0)!==s&&(Bh.error("triangleCount 不是整数"),s=parseInt(s,0));for(var l=0;n>l;l+=1)r[l]=-1;var c=new Array(o),h=0;for(l=0;s>l;l+=1)for(var d=i[3*l+2],p=0;3>p;p+=1){var g=!1,u=i[3*l+p];if(d>u){g=!0;var f=d;d=u,u=f}var m=new wp;m.vertexIndex[0]=d,m.vertexIndex[1]=u,m.faceIndex[0]=l,m.faceIndex[1]=l;var C=r[d];if(-1===C)r[d]=h,c[h]=m,r[a+h]=-1,h+=1;else for(;;){if((E=c[C]).vertexIndex[1]===u){E.faceIndex[1]=l;break}var v=r[a+C];if(-1===v){r[a+C]=h,c[h]=m,r[a+h]=-1,h+=1;break}C=v}g||(d=u)}var I=[];for(l=0;h>l;l+=1){var E;if((E=c[l]).faceIndex[0]===E.faceIndex[1])I.push(E.vertexIndex[0]),I.push(E.vertexIndex[1]);else{var B=E.faceIndex[0],x=i[3*B],S=i[3*B+1],w=i[3*B+2],M=new y(A[3*x],A[3*x+1],A[3*x+2]),b=new y(A[3*S],A[3*S+1],A[3*S+2]),U=new y(A[3*w],A[3*w+1],A[3*w+2]),F=M.sub(b),K=b.sub(U),Q=F.cross(K);Q.normalize();var R=E.faceIndex[1];S=i[3*R+1],w=i[3*R+2],M=new y(A[3*(x=i[3*R])],A[3*x+1],A[3*x+2]),b=new y(A[3*S],A[3*S+1],A[3*S+2]),U=new y(A[3*w],A[3*w+1],A[3*w+2]),F=M.sub(b),K=b.sub(U);var T=F.cross(K);T.normalize(),Math.abs(Q.dot(T))a;a+=1){var s=t[3*a],l=new y(e[3*s],e[3*s+1],e[3*s+2]),c=l.dot(o);if(.001>Math.abs(c-1)){var h=-new y(A[3*s],A[3*s+1],A[3*s+2]).dot(l),d=Math.abs(i.dot(l)+h);3>Math.abs(d)&&r.push(t[3*a],t[3*a+1],t[3*a+2])}}return r},Kp=new y,Qp=new y,Rp=new y,Tp=new y,kp=function(A){this.cameraControl=A,this.scene=A.scene,this.timerId=null,this.lastIntersected=null,this.edgeDataMap=null};kp.prototype={constructor:kp,destroy:function(){this.cameraControl=null,this.scene=null,this.lastIntersected=null,this.timerId&&(clearTimeout(this.timerId),this.timerId=null)},click:function(A,e){var i=this;function o(){e&&!1===e.pickable&&(e=null),i.handleMousePick(A,!1,e)}A.button!==t.RIGHT?(this.timerId&&clearTimeout(this.timerId),this.timerId=setTimeout(o,500)):o()},doubleClick:function(A){A.preventDefault(),this.timerId&&clearTimeout(this.timerId),this.handleMousePick(A,!0,null)},handleMousePick:function(A,e,i){var o=this.cameraControl,n=o.viewer.modelManager.sceneState,r=new s(A.clientX,A.clientY),a=o.screenToCanvas(A.clientX,A.clientY),l=o.viewer.modelManager;function c(t,i){var o=null;if(t&&t.objectType===Qc.Room){var n=t.face.contourIndex,r=t.object.geometry.contour;o=n?{startPoint:r[n.st],endPoint:r[n.ed]}:null}l.dispatchEvent({type:Rc.ON_CLICK_PICK,event:A,doubleClick:e,canvasPos:{x:a.x,y:a.y},intersectInfo:t?{selectedObjectId:t.userId,modelKey:t.modelKey,objectType:t.objectType,selectable:i,worldPosition:t.worldPosition,worldBoundingBox:t.worldBoundingBox,point:t.point,index:t.index,innnerDebugging:t.innnerDebugging,object:t.object,normal:t.face?t.face.normal:null,boundaryPoints:o}:null})}var h=null;if(A.button!==t.RIGHT){if(i)i.pickable&&(h=i.intersect);else{var d=o.getIntersectContext(r);h=o.intersector.pick(d,null)}if(!h){var p=n.getSelection();if(A.ctrlKey)return;return p.length>0&&(n.clearSelection(),o.updateView(!0)),this.setSelectedIdsForOutline(n.getSelection()),void(i&&!i.pickable?((h=i.intersect).cx=r.x,h.cy=r.y,c(h,!1)):c(null))}var g=h.userId;if(mh.isMobileDevice()&&(o.pivot=h.point),this.scene.intersectToWorld(h,o.viewer),h.innnerDebugging=A.altKey,h.cx=r.x,h.cy=r.y,this.lastPickedUserId=g,h.face&&h.face.normal){var u=h.face.normal;for(var f in u)u[f]=u[f]===-u[f]?Math.abs(u[f]):u[f]}if(A.button!==t.RIGHT)if(e)vc.EnableDemolishByDClick?(n.setSelection([g]),c(h,!0),o.updateView(!0)):(n.setSelection([g]),o.fitAndRotateBySelection(),c(h,!0));else{var m=n.getSelection();if(!!vc.MultipleSelectComponents&&A.ctrlKey){var C=m.indexOf(g);-1===C?n.addSelection([g]):(m.splice(C,1),n.setSelection(m))}else-1===m.indexOf(g)?n.setSelection([g]):n.clearSelection();this.setSelectedIdsForOutline(n.getSelection()),c(h,!0),o.updateView(!0)}else c(h,!1)}else c(h,!1)},handleShiftMeasure:function(A,e,t){var i=null,o=this.cameraControl,n=new s(A.clientX,A.clientY),r=o.getIntersectContext(n);function a(t,n,r,a,s,l){var c=o.viewer.modelManager;if(null!==t){var h=o.scene.drawingToWorld(t);t.copy(h)}if(null!==r){var d=o.scene.drawingToWorld(r[0]),p=o.scene.drawingToWorld(r[1]);r[0].copy(d),r[1].copy(p)}c.dispatchEvent(i={type:Rc.ON_MEASURE_PICK,event:A,pick:e,pickPoint:t,isAbsorbPoint:n,pickLine:r,pickPlane:a,userId:s,measureUnit:l})}return o.intersector.pick(r,(function(A){if(A){var i="",n=A.object.modelKey;if(n){var r=o.viewer.modelManager.getModel(n);r&&r.originalLengthUnit&&(i=r.originalLengthUnit)}var s=new y;s.subVectors(A.point,t),s.normalize();var l=new y(1,0,0),c=new y(0,1,0),h=new y(0,0,1),d=l.dot(s),p=c.dot(s),g=h.dot(s),u=new y;u.copy(t);.707>Math.abs(p)?Math.abs(g)R&&(x=R,A.copy(U)),(U=w.set(I[3*a.face.b],I[3*a.face.b+1],I[3*a.face.b+2])).applyMatrix4(g),(F=b.copy(U)).applyMatrix4(u),x>(R=(K=.5*(F.x-f.x)*m.width)*K+(Q=.5*(F.y-f.y)*m.height)*Q)&&(x=R,A.copy(U)),(U=w.set(I[3*a.face.c],I[3*a.face.c+1],I[3*a.face.c+2])).applyMatrix4(g),(F=b.copy(U)).applyMatrix4(u),x>(R=(K=.5*(F.x-f.x)*m.width)*K+(Q=.5*(F.y-f.y)*m.height)*Q)&&(x=R,A.copy(U));var T=d.clone(),k=!1,D=null,L=!1;if(t>x)o.hasGroup(gp.MEASUREPICKPLANE)&&o.removeGroupByName(gp.MEASUREPICKPLANE),T=A.clone(),k=!0;else{x=1/0;var N=new y,O=new y;A=new y;var V,G=this._getEegeData(a);if(!G)return Bh.error("no edge data"),null;S=G.positionsArray,V=G.edgeIndex;for(var P=0;V.length>P;P+=2){Rp.set(S[3*V[P]],S[3*V[P]+1],S[3*V[P]+2]),Rp.applyMatrix4(g),Tp.set(S[3*V[P+1]],S[3*V[P+1]+1],S[3*V[P+1]+2]),Tp.applyMatrix4(g);var q=this._pointToLine(Rp,Tp,d);(F=q.clone()).applyMatrix4(u),x>(R=(K=.5*(F.x-f.x)*m.width)*K+(Q=.5*(F.y-f.y)*m.height)*Q)&&(x=R,N.copy(Rp),O.copy(Tp),A.copy(q))}if(S=null,t>x)o.hasGroup(gp.MEASUREPICKPLANE)&&o.removeGroupByName(gp.MEASUREPICKPLANE),(D=[]).push(N),D.push(O),T=A.clone();else{if(vc.MeasureHighlightPlane){B=v.index.array;var j=new M;j.getInverse(g);var H=new y(d.x,d.y,d.z);H.applyMatrix4(j);var Y=Fp(I,E,B,H,a.face.normal),W=new he;W.setIndex(Y),W.setAttribute("position",p.attributes.position,3),W.setAttribute("normal",p.attributes.normal,3);var J=Up(I,Y),z=new he;z.setIndex(J),z.setAttribute("position",p.attributes.position,3),o.hasGroup(gp.MEASUREPICKPLANE)&&o.removeGroupByName(gp.MEASUREPICKPLANE);var Z=o.getOrCreateGroup(gp.MEASUREPICKPLANE,{priority:1,globalSpace:!0}),X=new Ue(W,new jA({color:1170103,opacity:.1,transparent:!0}));X.applyMatrix4(a.object.matrix),Z.add(X);var _=new jo(z,new ko({color:1170103}));_.applyMatrix4(a.object.matrix),Z.add(_),Z.updateMatrixWorld(!0),i.updateHighlight()}L=!0}}var $={};return $.pickPoint=T,$.isAbsorbPoint=k,$.measureUnit=l,$.pickLine=D,$.pickPlane=L,$.face=a.face,$.userId=a.userId,$}return null},_getEegeData:function(A){var e=A.object.geometry;this.edgeDataMap||(this.edgeDataMap={});var t=null;null!=A.indexInfo&&(t=A.indexInfo);var i=e.attributes?e:e._bufferGeometry,o=A.nodeId||A.userId;return this.edgeDataMap[i.id]?this.edgeDataMap[i.id].version!==i.attributes.position.version?(delete this.edgeDataMap[i.id].data,this.edgeDataMap[i.id].data[o]=this._getPositionArrayAndEdgeIndex(i,t)):this.edgeDataMap[i.id].data[o]||(this.edgeDataMap[i.id].data[o]=this._getPositionArrayAndEdgeIndex(i,t)):(this.edgeDataMap[i.id]={},this.edgeDataMap[i.id].version=i.attributes.position.version,this.edgeDataMap[i.id].data={},this.edgeDataMap[i.id].data[o]=this._getPositionArrayAndEdgeIndex(i,t)),this.edgeDataMap[i.id].data[o]},_getPositionArrayAndEdgeIndex:function(A,e){var t=[],i=0,o=0,n=[],r=[],a=A.attributes.position.array,s=[];if(e){e.positionStart/3;for(var l=uh.getMin((t=A.index.array).slice(i=e.indexStart,o=e.indexStart+e.indexCount)),c=i;o>c;c+=1)r.push(t[c]-l);n=a.slice(e.positionStart,e.positionStart+e.positionCount),s=Up(n,r)}else o=(t=bp(A.attributes.position.array,A.index.array)).length,n=a,s=Up(A.attributes.position.array,A.index.array);return{positionsArray:n,edgeIndex:s}},_pointToLine:function(A,e,t){Kp.subVectors(e,A),Qp.subVectors(t,A);var i=Kp.dot(Qp);if(0>i)return A;var o=Kp.dot(Kp);if(i>o)return e;i/=o;var n=A.clone();return n.addScaledVector(Kp,i),n}};var Dp="http://www.w3.org/2000/svg",Lp=function(){var A=document.createElementNS(Dp,"svg"),e=function(A,e,t,i){var o=document.createElementNS(Dp,"defs"),n=document.createElementNS(Dp,"filter");n.id=A,n.setAttributeNS(null,"x","-30%"),n.setAttributeNS(null,"y","-30%"),n.setAttributeNS(null,"width","200%"),n.setAttributeNS(null,"height","200%");var r=document.createElementNS(Dp,"feGaussianBlur");r.setAttributeNS(null,"in","SourceAlpha"),r.setAttributeNS(null,"stdDeviation","4");var a=document.createElementNS(Dp,"feOffset");a.setAttributeNS(null,"result","offsetblur");var s=document.createElementNS(Dp,"feMerge"),l=document.createElementNS(Dp,"feMergeNode"),c=document.createElementNS(Dp,"feMergeNode");return c.setAttributeNS(null,"in","SourceGraphic"),s.appendChild(l),s.appendChild(c),n.appendChild(r),n.appendChild(a),n.appendChild(s),o.appendChild(n),o}("drop-shadow");return A.appendChild(e),A},Np=function(){return document.createElementNS(Dp,"line")},Op=function(){return document.createElementNS(Dp,"path")},Vp=function(A){var e=document.createElementNS(Dp,"circle");return e.setAttributeNS(null,"r",A||0),e.setAttributeNS(null,"fill","none"),e},Gp=function(){return document.createElementNS(Dp,"text")},Pp=function(){return document.createElementNS(Dp,"g")},qp=function(A,e){var t=Math.pow(A[0]-e[0],2),i=Math.pow(A[1]-e[1],2),o=0;return 3===A.length&&3===e.length&&(o=Math.pow(A[2]-e[2],2)),Math.sqrt(t+i+o)},jp=function(A){var e=Math.pow(A[0],2),t=Math.pow(A[1],2),i=0;A.length>2&&(i=Math.pow(A[2],2));var o=Math.sqrt(e+t+i),n=[A[0]/o,A[1]/o];return A.length>2&&n.push(A[2]/o),n},Hp=function(A,e){var t=0;return A.length>2&&e.length>2&&(t=A[2]*e[2]),A[0]*e[0]+A[1]*e[1]+t},Yp=function(A,e){var t=A[0],i=A[1],o=A[2],n=e[0],r=e[1],a=e[2];return[i*a-o*r,o*n-t*a,t*r-i*n]},Wp=function(A){return"mm"===A?1:"cm"===A?10:"m"===A?1e3:1},Jp=function(A,e,t,i){var o=Wp(A);2===i?o*=o:3===i&&(o*=o*o);var n=Wp(e);return 2===i?n*=n:3===i&&(n*=n*n),t*o/n},zp=function(A,e){return!(e.x>A.x+A.width||A.x>e.x+e.width||e.y>A.y+A.height||A.y>e.y+e.height)},Zp=function(){return"undefined"!=typeof window&&"ontouchstart"in window},Xp=function(A){this.svg=A,this.maxPointsNeed=0,this.pickedPoints=[],this.svgGroup=Pp(),this.svg.appendChild(this.svgGroup),this.unitOfModel=void 0,this.unitOnUI=void 0,this.precision=3,this.adjustOption=void 0,this.is3DMode=!1,this.isSelected=!1,this.onclickCallback=void 0};Xp.prototype.addPickedPoint=function(A,e,t){return!this.isDone()&&(!!A&&(this.pickedPoints.push(A),e&&(this.unitOfModel=this.unitOfModel&&this.unitOfModel!==e?void 0:e),!0))},Xp.prototype.getAllPickedPoint=function(){return this.pickedPoints},Xp.prototype.draw=function(A,e){},Xp.prototype.adjustWithOption=function(A){this.adjustOption=A,A&&this.updateTexts()},Xp.prototype.unAdjustWithOption=function(A){this.adjustOption=void 0,this.updateTexts()},Xp.prototype.changeUnit=function(A){A&&(this.unitOnUI=A,this.updateTexts())},Xp.prototype.changePrecision=function(A){this.precision=A,A&&this.updateTexts()},Xp.prototype.updateTexts=function(){},Xp.prototype.isVisible=function(){return!!(this.svg&&this.svgGroup&&this.svgGroup.parentNode)},Xp.prototype.remove=function(){this.svg&&this.svgGroup&&this.svgGroup.parentNode&&(this.svg.removeChild(this.svgGroup),this.onclickCallback=void 0)},Xp.prototype.add=function(){this.svg&&this.svgGroup&&this.svg.appendChild(this.svgGroup)},Xp.prototype.isDone=function(){return this.pickedPoints.length===this.maxPointsNeed},Xp.prototype.setClickCallback=function(A){this.onclickCallback=A},Xp.prototype.measureResult=function(){},Xp.prototype.createCircle=function(){var A=Vp(5);return A.setAttributeNS(null,"fill","#ff9800"),A.setAttributeNS(null,"stroke","#ffffff"),A.setAttributeNS(null,"stroke-width",2),A.style.display="none",A},Xp.prototype.createLine=function(){var A=Np();return A.setAttributeNS(null,"stroke-width",2),A.setAttributeNS(null,"stroke","#ffff00"),A.style.display="none",A},Xp.prototype.createText=function(){var A=Gp();return A.style.fontSize="14",A.style.display="none",A.style.textAnchor="middle",A.setAttributeNS(null,"fill","#ffffff"),A},Xp.prototype.createPath=function(){var A=Op();return A.style.display="none",A.setAttributeNS(null,"fill","none"),A.setAttributeNS(null,"stroke","#0aea06"),A},Xp.prototype.resultToDisplayOfLength=function(A){var e=A,t=this.unitOfModel;return this.adjustOption&&(e=this.adjustOption.adjustLength(A),t=this.adjustOption.unit),this.unitOnUI&&(t&&(e=Jp(t,this.unitOnUI,e,0)),t=this.unitOnUI),t||(t=""),e=e.toFixed(this.precision),{value:Number(e),unit:t,text:e+t}},Xp.prototype.setSelected=function(A){return this.isSelected!==A&&(this.isSelected=A,!0)};var _p=function(){this.group=Pp(),this.group.style.display="none";var A=Op();this.textBackground=A,this.group.appendChild(A),A=Op(),this.prefixTextBackground=A,this.prefixTextBackground.style.display="none",this.group.appendChild(A);var e=Gp();e.style.fontSize="12",e.style.textAnchor="middle",e.style.dominantBaseline="central",e.style.cursor="default",e.setAttributeNS(null,"fill","#ffffff"),this.group.appendChild(e),this.text=e,(e=Gp()).style.fontSize="12",e.style.textAnchor="middle",e.style.dominantBaseline="central",e.style.display="none",e.setAttributeNS(null,"fill","#ffffff"),this.group.appendChild(e),this.prefixText=e,this.textColor="#ffffff",this.prefixTextColor="#ffffff",this.textBackgroundColor="#ffffff",this.prefixTextBackgroundColor="blue",this.textContent=void 0,this.prefixTextContent=void 0,this.textPosition={x:0,y:0},this.isShowShadow=!1,this.onclickCallback=void 0,this._onMouseDown=this._onMouseDown.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this._onMouseUp=this._onMouseUp.bind(this)};_p.prototype.draw=function(A){if(this.textContent&&this.textContent.length){this.group.style.display="",this.text.textContent=this.textContent;var e=null;this.prefixTextContent?(this.prefixText.textContent=this.prefixTextContent,this.prefixText.style.display="",e=this.prefixText.getBBox()):(this.prefixText.style.display="none",e={width:0,height:0});var t=this.text.getBBox(),i=5+t.width+5;this.prefixTextContent&&this.prefixTextContent.length>0&&(i=i+5+e.width+5),A&&(i=Math.max(A,i));var o=this.textPosition.x-i/2,n=this.textPosition.y-(5+t.height+5)/2,r=function(A,e,t,i,o){return"M"+A+","+(e+o)+"a"+o+","+o+" 0 0 1 "+o+","+-o+"h"+(t-2*o)+"a"+o+","+o+" 0 0 1 "+o+","+o+"v"+(i-2*o)+"a"+o+","+o+" 0 0 1 "+-o+","+o+"h"+(2*o-t)+"a"+o+","+o+" 0 0 1 "+-o+","+-o+"v"+(2*o-i)+"z"}(o,n,i,t.height+10,5);this.textBackground.setAttributeNS(null,"d",r),this.textBackground.setAttributeNS(null,"fill",this.textBackgroundColor),this.isShowShadow?this.group.setAttributeNS(null,"filter","url(#drop-shadow)"):this.group.removeAttributeNS(null,"filter"),this.prefixTextContent&&this.prefixTextContent.length>0?(r=function(A,e,t,i,o){return"M"+A+","+(e+o)+"a"+o+","+o+" 0 0 1 "+o+","+-o+"h"+(t-o)+"v"+i+"h"+(o-t)+"a"+o+","+o+" 0 0 1 "+-o+","+-o+"v"+(2*o-i)+"z"}(o,n,e.width+10,e.height+10,5),this.prefixTextBackground.setAttributeNS(null,"d",r),this.prefixTextBackground.setAttributeNS(null,"fill",this.prefixTextBackgroundColor),this.prefixTextBackground.style.display="",this.prefixText.setAttributeNS(null,"x",o+5+e.width/2),this.prefixText.setAttributeNS(null,"y",n+5+e.height/2),o=o+(10+e.width)/2+i/2):o+=i/2,this.text.setAttributeNS(null,"x",o),this.text.setAttributeNS(null,"y",n+5+t.height/2),this.text.setAttributeNS(null,"fill",this.textColor),this.prefixText.setAttributeNS(null,"fill",this.prefixTextColor)}},_p.prototype.setText=function(A,e){this.textContent=A,this.prefixTextContent=e},_p.prototype.setPosition=function(A,e){this.textPosition={x:A,y:e}},_p.prototype.hide=function(){this.group.style.display="none"},_p.prototype.show=function(){this.group.style.display=""},_p.prototype.setClickCallback=function(A){this.onclickCallback=A,A?(this.group.style.cursor="pointer",this.text.style.cursor="pointer",Zp()?(this.group.addEventListener("touchstart",this._onMouseDown),this.group.addEventListener("touchend",this._onMouseUp),this.group.addEventListener("touchmove",this._onMouseMove)):(this.group.addEventListener("mousedown",this._onMouseDown),this.group.addEventListener("mouseup",this._onMouseUp),this.group.addEventListener("mousemove",this._onMouseMove))):(this.group.style.cursor="default",this.text.style.cursor="default",Zp()?(this.group.removeEventListener("touchstart",this._onMouseDown),this.group.removeEventListener("touchend",this._onMouseUp),this.group.removeEventListener("touchmove",this._onMouseMove)):(this.group.removeEventListener("mousedown",this._onMouseDown),this.group.removeEventListener("mouseup",this._onMouseUp),this.group.removeEventListener("mousemove",this._onMouseMove)))},_p.prototype._onMouseMove=function(A){A.stopPropagation(),A.preventDefault()},_p.prototype._onMouseDown=function(A){A.stopPropagation(),A.preventDefault()},_p.prototype._onMouseUp=function(A){A.stopPropagation(),A.preventDefault(),this.onclickCallback&&this.onclickCallback()};var $p=function(A){Xp.call(this,A),this.maxPointsNeed=2,this.startCircle=this.createCircle(),this.startCircle.setAttributeNS(null,"fill","#ffffff"),this.endCircle=this.createCircle(),this.endCircle.setAttributeNS(null,"fill","#ffffff"),this.svgGroup.appendChild(this.startCircle),this.svgGroup.appendChild(this.endCircle),this.line=this.createLine(),this.line.setAttributeNS(null,"stroke","#ffffff"),this.line.setAttributeNS(null,"strokd-width",2),this.svgGroup.appendChild(this.line),this.text=new _p,this.text.textBackgroundColor="#ffffff",this.text.textColor="#000000",this.svgGroup.appendChild(this.text.group),this._distance=void 0};($p.prototype=Object.assign(Object.create(Xp.prototype),{constructor:$p})).addPickedPoint=function(A,e,t){Xp.prototype.addPickedPoint.call(this,A,e,t)&&this.isDone()&&(this._enableSelect(),this._distance=qp(this.pickedPoints[0],this.pickedPoints[1]))},$p.prototype.draw=function(A,e){if(this.svgGroup.parentNode){var t=this.pickedPoints;if(t.length>0){A&&!this.isDone()&&(t=t.concat([A]));var i=t;if(e){for(var o=[],n=0,r=t.length;r>n;n+=1)o[n]=e(t[n]);i=o}var a=i[0],s=i.length>1?i[1]:a;if(this.startCircle.setAttributeNS(null,"cx",a[0]),this.startCircle.setAttributeNS(null,"cy",a[1]),this.startCircle.style.display="",this.line.setAttributeNS(null,"x1",a[0]),this.line.setAttributeNS(null,"y1",a[1]),this.line.setAttributeNS(null,"x2",s[0]),this.line.setAttributeNS(null,"y2",s[1]),this.line.style.display="",this.text.setPosition((a[0]+s[0])/2,(a[1]+s[1])/2),t.length>1){var l=qp(t[0],t[1]);this._distance=l}2===this.pickedPoints.length?(this.endCircle.setAttributeNS(null,"cx",s[0]),this.endCircle.setAttributeNS(null,"cy",s[1]),this.endCircle.style.display=""):this.endCircle.style.display="none",this._updateText()}}},$p.prototype.measureResult=function(){if(this.isDone()){var A={};if(A.distance=this._distance,this.adjustOption){var e=this.resultToDisplayOfLength(this._distance);A.unit=e.unit,A.value=e.value}return A}},$p.prototype.adjustWithOption=function(A){Xp.prototype.adjustWithOption.call(this,A),this._updateText(),this._disableSelect()},$p.prototype.changeUnit=function(A){Xp.prototype.changeUnit.call(this,A),A&&this._updateText()},$p.prototype.changePrecision=function(A){Xp.prototype.changePrecision.call(this,A),A&&this._updateText()},$p.prototype._enableSelect=function(){var A=this;this.startCircle.onmousedown=function(e){A.isDone()&&(A.pickedPoints=A.pickedPoints.slice(1),e.stopPropagation(),A._disableSelect())},this.endCircle.onmousedown=function(e){A.isDone()&&(A.pickedPoints=A.pickedPoints.slice(0,1),e.stopPropagation(),A._disableSelect())}},$p.prototype._disableSelect=function(){this.startCircle.onmousedown=void 0,this.endCircle.onmousedown=void 0},$p.prototype._updateText=function(){this.isDone()&&this._distance&&this.adjustOption&&(this.text.setText(this.resultToDisplayOfLength(this._distance).text),this.text.draw())};var Ag=function(){this.unit=void 0,this.valueBeforeAdjust=void 0,this.valueAfterAdjust=void 0};Ag.prototype.adjustLength=function(A){return this.valueAfterAdjust&&this.valueBeforeAdjust?A*this.valueAfterAdjust/this.valueBeforeAdjust:A},Ag.prototype.adjustArea=function(A){return this.valueAfterAdjust&&this.valueBeforeAdjust?A*Math.pow(this.valueAfterAdjust/this.valueBeforeAdjust,2):A},Ag.prototype.adjustVolume=function(A){return this.valueAfterAdjust&&this.valueBeforeAdjust?A*Math.pow(this.valueAfterAdjust/this.valueBeforeAdjust,3):A};var eg=function(A){Xp.call(this,A),this.maxPointsNeed=3,this._angle=void 0,this.circle1=this.createCircle(),this.circle2=this.createCircle(),this.circle3=this.createCircle(),this.svgGroup.appendChild(this.circle1),this.svgGroup.appendChild(this.circle2),this.svgGroup.appendChild(this.circle3),this.line1=this.createLine(),this.line1.setAttributeNS(null,"stroke-width",2),this.svgGroup.appendChild(this.line1),this.line2=this.createLine(),this.line2.setAttributeNS(null,"stroke-width",2),this.svgGroup.appendChild(this.line2),this.arc=this.createPath(),this.svgGroup.appendChild(this.arc),this.angleText=new _p,this.angleText.textBackgroundColor="#009bff",this.svgGroup.appendChild(this.angleText.group);var e=this;this.angleText.setClickCallback((function(){e.onclickCallback&&e.onclickCallback(e)}))};(eg.prototype=Object.assign(Object.create(Xp.prototype),{constructor:eg})).addPickedPoint=function(A,e,t){if(Xp.prototype.addPickedPoint.call(this,A,e,t)&&this.isDone()){var i=this.pickedPoints[0],o=this.pickedPoints[1],n=this.pickedPoints[2],r=(a=[n[0]-o[0],n[1]-o[1],n[2]-o[2]],s=jp([i[0]-o[0],i[1]-o[1],i[2]-o[2]]),l=jp(a),c=Hp(s,l),Math.acos(c)/Math.PI*180);this._angle=r}var a,s,l,c},eg.prototype.draw=function(A,e){if(this.svgGroup.parentNode){var t=this.pickedPoints;if(t.length>0){A&&!this.isDone()&&(t=t.concat([A]));var i=t,o=!0;if(e){for(var n=!0,r=[],a=0,s=t.length;s>a;a+=1)r[a]=e(t[a]),o&&r[a][0]>0&&r[a][0]0&&r[a][1]=1){var l=i[0],c=i[1];this.circle1.setAttributeNS(null,"cx",l[0]),this.circle1.setAttributeNS(null,"cy",l[1]),this.circle1.style.display="",(A||this.pickedPoints.length>1)&&(this.line1.setAttributeNS(null,"x1",l[0]),this.line1.setAttributeNS(null,"y1",l[1]),this.line1.setAttributeNS(null,"x2",c[0]),this.line1.setAttributeNS(null,"y2",c[1]),this.line1.style.display="")}if(this.pickedPoints.length>=2){var h=i[1],d=i[2];this.circle2.setAttributeNS(null,"cx",h[0]),this.circle2.setAttributeNS(null,"cy",h[1]),this.circle2.style.display="",(A||this.pickedPoints.length>2)&&(this.line2.setAttributeNS(null,"x1",h[0]),this.line2.setAttributeNS(null,"y1",h[1]),this.line2.setAttributeNS(null,"x2",d[0]),this.line2.setAttributeNS(null,"y2",d[1]),this.line2.style.display="")}if(3===this.pickedPoints.length){if(o)return void(this.svgGroup.style.display="none");this.svgGroup.style.display="";var p=i[2];this.circle3.setAttributeNS(null,"cx",p[0]),this.circle3.setAttributeNS(null,"cy",p[1]),this.circle3.style.display="";var g=i[0].slice(0,2),u=i[1].slice(0,2),f=i[2].slice(0,2),m=qp(g,u),C=qp(u,f),y=Math.min(Math.min(m,C),30),v=jp([g[0]-u[0],g[1]-u[1]]),I=[u[0]+v[0]*y,u[1]+v[1]*y],E=jp([f[0]-u[0],f[1]-u[1]]),B=[u[0]+E[0]*y,u[1]+E[1]*y],x=[(I[0]+B[0])/2,(I[1]+B[1])/2],S=[x[0]-u[0],x[1]-u[1]],w=[u[0]+(S=[1.5*S[0],1.5*S[1]])[0],u[1]+S[1]],M="M"+I[0]+","+I[1];M+="Q"+w[0]+","+w[1],this.arc.setAttributeNS(null,"d",M+=" "+B[0]+","+B[1]),this.arc.style.display="",this.angleText.setText(this._angle.toFixed(this.precision)+"°"),this.angleText.setPosition(w[0],w[1]),this.angleText.draw()}}}},eg.prototype.setSelected=function(A){Xp.prototype.setSelected.call(this,A)&&(A?(this.angleText.isShowShadow=!0,this.angleText.textBackgroundColor="#ffffff",this.angleText.textColor="#009bff",this.angleText.draw()):(this.angleText.isShowShadow=!1,this.angleText.textBackgroundColor="#009bff",this.angleText.textColor="#ffffff",this.angleText.draw()))},eg.prototype.measureResult=function(){return this._angle};var tg=function(A){Xp.call(this,A),this.path=Op(),this.path.setAttributeNS(null,"fill","none"),this.path.setAttributeNS(null,"stroke","rgb(69,195,69)"),this.svgGroup.appendChild(this.path),this._isDone=!1,this._circles=[],this._area=-1,this.resultText=new _p,this.resultText.textBackgroundColor="#009bff",this.svgGroup.appendChild(this.resultText.group);var e=this;this.resultText.setClickCallback((function(){e.onclickCallback&&e.onclickCallback(e)}))};(tg.prototype=Object.assign(Object.create(Xp.prototype),{constructor:tg})).addPickedPoint=function(A,e,t){if(this._pointCanClosePath(A,t))this._isDone=!0,this._area=this.is3DMode?this._calculateArea3D():this._calculateArea2D();else if(Xp.prototype.addPickedPoint.call(this,A,e,t)){var i=this.createCircle();this.svgGroup.appendChild(i),this._circles.push(i)}},tg.prototype.isDone=function(){return this._isDone},tg.prototype.draw=function(A,e){if(this.svgGroup.parentNode){var t=this.pickedPoints;if(t.length>0){if(A&&!this.isDone()){if(this._pointCanClosePath(A,e)){var i=this.pickedPoints[0];A=[i[0],i[1],i[2]]}t=t.concat([A])}var o=t,n=!0;if(e){for(var r=!0,a=[],s=0,l=t.length;l>s;s+=1)a[s]=e(t[s]),n&&a[s][0]>0&&a[s][0]0&&a[s][1]d;d+=1){var g=this._circles[d],u=o[d];g.setAttributeNS(null,"cx",u[0]),g.setAttributeNS(null,"cy",u[1]),g.style.display=""}}}},tg.prototype.measureResult=function(){return this._area},tg.prototype.updateTexts=function(){this.isDone()&&(this.resultText.setText(this.resultToDisplayOfArea(this._area).text),this.resultText.draw())},tg.prototype.setSelected=function(A){Xp.prototype.setSelected.call(this,A)&&(A?(this.resultText.isShowShadow=!0,this.resultText.textBackgroundColor="#ffffff",this.resultText.textColor="#009bff",this.resultText.draw()):(this.resultText.isShowShadow=!1,this.resultText.textBackgroundColor="#009bff",this.resultText.textColor="#ffffff",this.resultText.draw()))},tg.prototype.resultToDisplayOfArea=function(A){var e=A,t=this.unitOfModel;return this.adjustOption&&(e=this.adjustOption.adjustArea(A),t=this.adjustOption.unit),this.unitOnUI&&(t&&(e=Jp(t,this.unitOnUI,e,2)),t=this.unitOnUI),t||(t=""),e=e.toFixed(this.precision),"mm"===t?t="mm²":"m"===t?t="m²":"cm"===t&&(t="cm²"),{value:Number(e),unit:t,text:e+t}},tg.prototype._pointCanClosePath=function(A,e){if(this.pickedPoints.length>0){var t=this.pickedPoints[0];e&&(t=e(t),A=e(A));var i=A[0]-t[0],o=A[1]-t[1];if(200>=i*i+o*o+0)return!0}return!1},tg.prototype._pathString=function(A){if(!A||0===A.length)return"";for(var e="M"+A[0][0]+" "+A[0][1],t=1,i=A.length;i>t;t+=1)e=e+"L"+A[t][0]+" "+A[t][1];return this.isDone()&&(e+="Z"),e},tg.prototype._calculateArea2D=function(){if(this.isDone()&&this.pickedPoints.length>=3){for(var A=this.pickedPoints,e=this.pickedPoints[0],t=[],i=1,o=A.length;o>i;i+=1)t.push([A[i][0]-e[0],A[i][1]-e[1]]);for(var n=0,r=0,a=t.length;a-1>r;r+=1){var s=t[r],l=t[r+1];n+=s[0]*l[1]-s[1]*l[0]}return Math.abs(n/2)}return 0},tg.prototype._calculateArea3D=function(){if(this.isDone()&&this.pickedPoints.length>=3){for(var A=this.pickedPoints,e=this.pickedPoints[0],t=jp(Yp([this.pickedPoints[1][0]-e[0],this.pickedPoints[1][1]-e[1],this.pickedPoints[1][2]-e[2]],[this.pickedPoints[2][0]-e[0],this.pickedPoints[2][1]-e[1],this.pickedPoints[2][2]-e[2]])),i=0,o=1,n=A.length;n>o;o+=1){i+=Hp(Yp([this.pickedPoints[o-1][0]-e[0],this.pickedPoints[o-1][1]-e[1],this.pickedPoints[o-1][2]-e[2]],[this.pickedPoints[o][0]-e[0],this.pickedPoints[o][1]-e[1],this.pickedPoints[o][2]-e[2]]),t)}return Math.abs(i/2)}return 0},tg.prototype._getPointsCenter=function(A){var e=A.length;return[A.reduce((function(A,e){return A+e[0]}),0)/e,A.reduce((function(A,e){return A+e[1]}),0)/e,A.reduce((function(A,e){return A+e[2]}),0)/e]},tg.prototype._crossProduct=function(A,e){var t=A[0],i=A[1],o=A[2],n=e[0],r=e[1],a=e[2];return[i*a-o*r,o*n-t*a,t*r-i*n]};var ig=function(A,e,t){Xp.call(this,A),this.maxPointsNeed=2,this.isMobile=e,this.number=t,this._drawPoints=[],this.startCircle=this.createCircle(),this.endCircle=this.createCircle(),this.svgGroup.appendChild(this.startCircle),this.svgGroup.appendChild(this.endCircle),this.distanceLine=this.createLine(),this.svgGroup.appendChild(this.distanceLine),this.deltaXLine=this.createLine(),this.deltaXLine.setAttributeNS(null,"stroke","#ec4545"),this.deltaXLine.setAttributeNS(null,"stroke-dasharray","6,4"),this.isMobile||this.svgGroup.appendChild(this.deltaXLine),this.deltaYLine=this.createLine(),this.deltaYLine.setAttributeNS(null,"stroke","#45c345"),this.deltaYLine.setAttributeNS(null,"stroke-dasharray","6,4"),this.isMobile||this.svgGroup.appendChild(this.deltaYLine),this.deltaZLine=this.createLine(),this.deltaZLine.setAttributeNS(null,"stroke","#5757da"),this.deltaZLine.setAttributeNS(null,"stroke-dasharray","6,4"),this.isMobile||this.svgGroup.appendChild(this.deltaZLine),this.deltaXText=new _p,this.deltaXText.textColor="#ec4545",this.deltaXText.prefixTextBackgroundColor="#ec4545",this.svgGroup.appendChild(this.deltaXText.group),this.deltaYText=new _p,this.deltaYText.textColor="#45c345",this.deltaYText.prefixTextBackgroundColor="#45c345",this.svgGroup.appendChild(this.deltaYText.group),this.deltaZText=new _p,this.deltaZText.textColor="#5757da",this.deltaZText.prefixTextBackgroundColor="#5757da",this.svgGroup.appendChild(this.deltaZText.group),this.distanceText=new _p,this.distanceText.textBackgroundColor="#009bff";var i=this;this.distanceText.setClickCallback((function(){i.onclickCallback&&i.onclickCallback(i)})),this.svgGroup.appendChild(this.distanceText.group),this._distance=void 0,this._deltaXDistance=void 0,this._deltaYDistance=void 0,this._deltaZDistance=void 0};(ig.prototype=Object.assign(Object.create(Xp.prototype),{constructor:ig})).addPickedPoint=function(A,e,t){if(Xp.prototype.addPickedPoint.call(this,A,e,t)&&(this._drawPoints.push(A),this.isDone())){if(3===A.length){var i=[];i[0]=this.pickedPoints[1][0],i[1]=this.pickedPoints[0][1],i[2]=this.pickedPoints[1][2];var o=[];o[0]=this.pickedPoints[1][0],o[1]=this.pickedPoints[0][1],o[2]=this.pickedPoints[0][2],this._drawPoints.push(i),this._drawPoints.push(o)}this._distance=qp(this._drawPoints[0],this._drawPoints[1]),this._deltaYDistance=qp(this._drawPoints[1],this._drawPoints[2]),this._deltaZDistance=qp(this._drawPoints[2],this._drawPoints[3]),this._deltaXDistance=qp(this._drawPoints[3],this._drawPoints[0]),this.updateTexts()}},ig.prototype.draw=function(A,e){if(this.svgGroup.parentNode){var t=this._drawPoints;if(t.length>0){A&&!this.isDone()&&(t=t.concat([A]));var i=t,o=!0;if(e){for(var n=!0,r=[],a=0,s=t.length;s>a;a+=1)r[a]=e(t[a]),o&&r[a][0]>0&&r[a][0]0&&r[a][1]1?i[1]:l;if(this.startCircle.setAttributeNS(null,"cx",l[0]),this.startCircle.setAttributeNS(null,"cy",l[1]),this.startCircle.style.display="",this.distanceLine.setAttributeNS(null,"x1",l[0]),this.distanceLine.setAttributeNS(null,"y1",l[1]),this.distanceLine.setAttributeNS(null,"x2",c[0]),this.distanceLine.setAttributeNS(null,"y2",c[1]),this.distanceLine.style.display="",2>t.length)return;if(this.distanceText.setPosition((l[0]+c[0])/2,(l[1]+c[1])/2),!this.isDone()){var h=qp(t[0],t[1]);this._distance=h}if(4===t.length){if(o)return void(this.svgGroup.style.display="none");this.svgGroup.style.display="",this.isSelected?(this.distanceText.isShowShadow=!0,this.distanceText.textBackgroundColor="#ffffff",this.distanceText.textColor="#009bff"):(this.distanceText.isShowShadow=!1,this.distanceText.textBackgroundColor="#009bff",this.distanceText.textColor="#ffffff"),this.distanceText.draw(),this.endCircle.style.display="",this.deltaYLine.style.display="",this.deltaXLine.style.display="",this.deltaZLine.style.display="",this.endCircle.setAttributeNS(null,"cx",c[0]),this.endCircle.setAttributeNS(null,"cy",c[1]);var d=i[2],p=i[3];this.deltaYLine.setAttributeNS(null,"x1",c[0]),this.deltaYLine.setAttributeNS(null,"y1",c[1]),this.deltaYLine.setAttributeNS(null,"x2",d[0]),this.deltaYLine.setAttributeNS(null,"y2",d[1]),this.deltaYText.setPosition((d[0]+c[0])/2,(d[1]+c[1])/2),this.deltaZLine.setAttributeNS(null,"x1",d[0]),this.deltaZLine.setAttributeNS(null,"y1",d[1]),this.deltaZLine.setAttributeNS(null,"x2",p[0]),this.deltaZLine.setAttributeNS(null,"y2",p[1]),this.deltaZText.setPosition((d[0]+p[0])/2,(d[1]+p[1])/2),this.deltaXLine.setAttributeNS(null,"x1",p[0]),this.deltaXLine.setAttributeNS(null,"y1",p[1]),this.deltaXLine.setAttributeNS(null,"x2",l[0]),this.deltaXLine.setAttributeNS(null,"y2",l[1]),this.deltaXText.setPosition((p[0]+l[0])/2,(p[1]+l[1])/2),this.isSelected&&(this.isMobile||(this.deltaXText.draw(),this.deltaYText.draw(),this.deltaZText.draw()),this.layoutResultText())}}}},ig.prototype.layoutResultText=function(){for(var A=this.distanceText.group.getBBox(),e=this.deltaXText.group.getBBox(),t=this.deltaYText.group.getBBox(),i=this.deltaZText.group.getBBox(),o=[e,t,i],n=!1,r=0;o.length>r;r+=1)if(zp(A,o[r])){n=!0;break}if(n||(n=zp(e,t)),n||(n=zp(e,i)),n||(n=zp(t,i)),n){var a=Math.max(A.width,e.width,t.width,i.width),s=A.x+A.width/2,l=A.y+A.height+8;return this.deltaXText.setPosition(s,l+e.height/2),this.deltaYText.setPosition(s,(l+=e.height)+t.height/2),this.deltaZText.setPosition(s,(l+=t.height)+i.height/2),this.isMobile||(this.deltaXText.draw(a),this.deltaYText.draw(a),this.deltaZText.draw(a)),this.distanceText.draw(a),n}},ig.prototype.measureResult=function(){if(this._distance)return[this._distance,this._deltaXDistance,this._deltaYDistance,this._deltaZDistance]},ig.prototype.updateTexts=function(){this._distance&&(this.distanceText.setText(this.isMobile?"线段"+this.number+": "+this.resultToDisplayOfLength(this._distance).text:this.resultToDisplayOfLength(this._distance).text,void 0),this.distanceText.draw(),this.isDone()&&(0!==this._deltaXDistance&&this.deltaXText.setText(this.resultToDisplayOfLength(this._deltaXDistance).text,"X"),0!==this._deltaYDistance&&this.deltaYText.setText(this.resultToDisplayOfLength(this._deltaYDistance).text,"Y"),0!==this._deltaZDistance&&this.deltaZText.setText(this.resultToDisplayOfLength(this._deltaZDistance).text,"Z"),this.isSelected&&!this.isMobile&&(this.deltaXText.draw(),this.deltaYText.draw(),this.deltaZText.draw())))},ig.prototype.setSelected=function(A){Xp.prototype.setSelected.call(this,A)&&(A?(this.distanceText.isShowShadow=!0,this.distanceText.textBackgroundColor="#ffffff",this.distanceText.textColor="#009bff",this.isMobile||(this.deltaXText.draw(),this.deltaYText.draw(),this.deltaZText.draw()),this.distanceText.draw(),this.layoutResultText()):(this.deltaXText.hide(),this.deltaYText.hide(),this.deltaZText.hide(),this.distanceText.isShowShadow=!1,this.distanceText.textBackgroundColor="#009bff",this.distanceText.textColor="#ffffff",this.distanceText.draw()))};var og=function(A){Xp.call(this,A),this.maxPointsNeed=2,this.startCircle=this.createCircle(),this.endCircle=this.createCircle(),this.svgGroup.appendChild(this.startCircle),this.svgGroup.appendChild(this.endCircle),this.distanceLine=this.createLine(),this.svgGroup.appendChild(this.distanceLine),this.distanceText=new _p,this.distanceText.textBackgroundColor="#009bff",this.svgGroup.appendChild(this.distanceText.group);var e=this;this.distanceText.setClickCallback((function(){e.onclickCallback&&e.onclickCallback(e)})),this.pickedComponentKeys=[],this._distance=void 0};(og.prototype=Object.assign(Object.create(Xp.prototype),{constructor:og})).setData=function(A,e,t){this.pickedPoints=A,this._distance=e,t&&(this.unitOfModel=this.unitOfModel&&this.unitOfModel!==t?void 0:t)},og.prototype.draw=function(A,e){if(this.svgGroup.parentNode&&this.isDone()){var t=this.pickedPoints;if(e){for(var i=[],o=0,n=t.length;n>o;o+=1)i[o]=e(t[o]);t=i}var r=t[0],a=t[1];this.startCircle.setAttributeNS(null,"cx",r[0]),this.startCircle.setAttributeNS(null,"cy",r[1]),this.startCircle.style.display="",this.endCircle.setAttributeNS(null,"cx",a[0]),this.endCircle.setAttributeNS(null,"cy",a[1]),this.endCircle.style.display="",this.distanceLine.setAttributeNS(null,"x1",r[0]),this.distanceLine.setAttributeNS(null,"y1",r[1]),this.distanceLine.setAttributeNS(null,"x2",a[0]),this.distanceLine.setAttributeNS(null,"y2",a[1]),this.distanceLine.style.display="",this.distanceText.setPosition((r[0]+a[0])/2,(r[1]+a[1])/2),this.updateTexts()}},og.prototype.measureResult=function(){if(void 0!==this._distance)return this._distance},og.prototype.updateTexts=function(){void 0!==this._distance&&(this.distanceText.setText(this.resultToDisplayOfLength(this._distance).text,void 0),this.distanceText.draw())},og.prototype.setSelected=function(A){Xp.prototype.setSelected.call(this,A)&&(A?(this.distanceText.isShowShadow=!0,this.distanceText.textBackgroundColor="#ffffff",this.distanceText.textColor="#009bff",this.distanceText.draw()):(this.distanceText.isShowShadow=!1,this.distanceText.textBackgroundColor="#009bff",this.distanceText.textColor="#ffffff",this.distanceText.draw()))};var ng=function(A){Xp.call(this,A),this.maxPointsNeed=2;var e=Np();e.setAttributeNS(null,"stroke-width","2"),e.setAttributeNS(null,"stroke","#0aea06"),this.svgGroup.appendChild(e),this._line=e,this.distanceText=new _p,this.distanceText.textBackgroundColor="#009bff",this.svgGroup.appendChild(this.distanceText.group)};(ng.prototype=Object.assign(Object.create(Xp.prototype),{constructor:ng})).setData=function(A,e){A&&e&&(this._points=[A,e])},ng.prototype.draw=function(A,e){if(2===this._points.length){var t=e(this._points[0]),i=e(this._points[1]);this._line.setAttributeNS(null,"x1",t[0]),this._line.setAttributeNS(null,"y1",t[1]),this._line.setAttributeNS(null,"x2",i[0]),this._line.setAttributeNS(null,"y2",i[1]),this.distanceText.setPosition((t[0]+i[0])/2,(t[1]+i[1])/2);var o=qp(this._points[0],this._points[1]);this.distanceText.setText(this.resultToDisplayOfLength(o).text,void 0),this.distanceText.draw()}};var rg,ag,sg=function(A,e){this.x=A||0,this.y=e||0};Object.defineProperties(sg.prototype,{width:{get:function(){return this.x},set:function(A){this.x=A}},height:{get:function(){return this.y},set:function(A){this.y=A}}}),Object.assign(sg.prototype,{isVector2:!0,set:function(A,e){return this.x=A,this.y=e,this},setScalar:function(A){return this.x=A,this.y=A,this},setX:function(A){return this.x=A,this},setY:function(A){return this.y=A,this},setComponent:function(A,e){switch(A){case 0:this.x=e;break;case 1:this.y=e;break;default:throw new Error("index is out of range: "+A)}return this},getComponent:function(A){switch(A){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+A)}},clone:function(){return new this.constructor(this.x,this.y)},copy:function(A){return this.x=A.x,this.y=A.y,this},add:function(A,e){return void 0!==e?(console.warn("Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(A,e)):(this.x+=A.x,this.y+=A.y,this)},addScalar:function(A){return this.x+=A,this.y+=A,this},addVectors:function(A,e){return this.x=A.x+e.x,this.y=A.y+e.y,this},addScaledVector:function(A,e){return this.x+=A.x*e,this.y+=A.y*e,this},sub:function(A,e){return void 0!==e?(console.warn("Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(A,e)):(this.x-=A.x,this.y-=A.y,this)},subScalar:function(A){return this.x-=A,this.y-=A,this},subVectors:function(A,e){return this.x=A.x-e.x,this.y=A.y-e.y,this},multiply:function(A){return this.x*=A.x,this.y*=A.y,this},multiplyScalar:function(A){return this.x*=A,this.y*=A,this},divide:function(A){return this.x/=A.x,this.y/=A.y,this},divideScalar:function(A){return this.multiplyScalar(1/A)},applyMatrix3:function(A){var e=this.x,t=this.y,i=A.elements;return this.x=i[0]*e+i[3]*t+i[6],this.y=i[1]*e+i[4]*t+i[7],this},min:function(A){return this.x>A.x&&(this.x=A.x),this.y>A.y&&(this.y=A.y),this},max:function(A){return A.x>this.x&&(this.x=A.x),A.y>this.y&&(this.y=A.y),this},clamp:function(A,e){return this.x=Math.max(A.x,Math.min(e.x,this.x)),this.y=Math.max(A.y,Math.min(e.y,this.y)),this},clampScalar:(rg=new sg,ag=new sg,function(A,e){return rg.set(A,A),ag.set(e,e),this.clamp(rg,ag)}),clampLength:function(A,e){var t=this.length();return this.divideScalar(t||1).multiplyScalar(Math.max(A,Math.min(e,t)))},floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this},round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},roundToZero:function(){return this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x),this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y),this},negate:function(){return this.x=-this.x,this.y=-this.y,this},dot:function(A){return this.x*A.x+this.y*A.y},cross:function(A){return this.x*A.y-this.y*A.x},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)},normalize:function(){return this.divideScalar(this.length()||1)},angle:function(){var A=Math.atan2(this.y,this.x);return 0>A&&(A+=2*Math.PI),A},distanceTo:function(A){return Math.sqrt(this.distanceToSquared(A))},distanceToSquared:function(A){var e=this.x-A.x,t=this.y-A.y;return e*e+t*t},manhattanDistanceTo:function(A){return Math.abs(this.x-A.x)+Math.abs(this.y-A.y)},setLength:function(A){return this.normalize().multiplyScalar(A)},lerp:function(A,e){return this.x+=(A.x-this.x)*e,this.y+=(A.y-this.y)*e,this},lerpVectors:function(A,e,t){return this.subVectors(e,A).multiplyScalar(t).add(A)},equals:function(A){return A.x===this.x&&A.y===this.y},fromArray:function(A,e){return void 0===e&&(e=0),this.x=A[e],this.y=A[e+1],this},toArray:function(A,e){return void 0===A&&(A=[]),void 0===e&&(e=0),A[e]=this.x,A[e+1]=this.y,A},rotateAround:function(A,e){var t=Math.cos(e),i=Math.sin(e),o=this.x-A.x,n=this.y-A.y;return this.x=o*t-n*i+A.x,this.y=o*i+n*t+A.y,this}});var lg=function(){this.elements=[1,0,0,0,1,0,0,0,1]};function cg(A,e){this.normal=void 0!==A?A:new $c(1,0,0),this.constant=void 0!==e?e:0}lg.prototype.clear=function(){return this.elements=[1,0,0,0,1,0,0,0,1],this},lg.prototype.set=function(A,e,t,i,o,n,r,a,s){var l=this.elements;return l[0]=A,l[1]=i,l[2]=r,l[3]=e,l[4]=o,l[5]=a,l[6]=t,l[7]=n,l[8]=s,this},lg.prototype.clone=function(){return(new this.constructor).fromArray(this.elements)},lg.prototype.fromArray=function(A,e){void 0===e&&(e=0);for(var t=0;9>t;t+=1)this.elements[t]=A[t+e];return this},lg.prototype.multiply=function(A){return this.multiplyMatrices(this,A)},lg.prototype.multiplyMatrices=function(A,e){var t=A.elements,i=e.elements,o=this.elements,n=t[0],r=t[3],a=t[6],s=t[1],l=t[4],c=t[7],h=t[2],d=t[5],p=t[8],g=i[0],u=i[3],f=i[6],m=i[1],C=i[4],y=i[7],v=i[2],I=i[5],E=i[8];return o[0]=n*g+r*m+a*v,o[3]=n*u+r*C+a*I,o[6]=n*f+r*y+a*E,o[1]=s*g+l*m+c*v,o[4]=s*u+l*C+c*I,o[7]=s*f+l*y+c*E,o[2]=h*g+d*m+p*v,o[5]=h*u+d*C+p*I,o[8]=h*f+d*y+p*E,this},lg.prototype.scale=function(A,e){var t=this.elements;return t[0]*=A,t[3]*=A,t[6]*=A,t[1]*=e,t[4]*=e,t[7]*=e,this},lg.prototype.rotate=function(A){var e=Math.cos(A),t=Math.sin(A),i=this.elements,o=i[0],n=i[3],r=i[6],a=i[1],s=i[4],l=i[7];return i[0]=e*o+t*a,i[3]=e*n+t*s,i[6]=e*r+t*l,i[1]=-t*o+e*a,i[4]=-t*n+e*s,i[7]=-t*r+e*l,this},lg.prototype.makeRotate=function(A){var e=Math.cos(A),t=Math.sin(A);return this.set(e,-t,0,t,e,0,0,0,1),this},lg.prototype.translate=function(A,e){var t=this.elements;return t[0]+=A*t[2],t[3]+=A*t[5],t[6]+=A*t[8],t[1]+=e*t[2],t[4]+=e*t[5],t[7]+=e*t[8],this},lg.prototype.makeShear=function(A,e){return this.set(1,e,0,A,1,0,0,0,1),this},lg.prototype.fromCanvasTransform=function(A,e,t,i,o,n){return this.set(A,t,o,e,i,n,0,0,1),this},lg.prototype.toCanvasTransform=function(){var A=this.elements;return[A[0],A[3],A[1],A[4],A[6],A[7]]},lg.prototype.getInverse=function(A,e){A&&A.isMatrix4&&console.error("THREE.Matrix3: .getInverse() no longer takes a Matrix4 argument.");var t=A.elements,i=this.elements,o=t[0],n=t[1],r=t[2],a=t[3],s=t[4],l=t[5],c=t[6],h=t[7],d=t[8],p=d*s-l*h,g=l*c-d*a,u=h*a-s*c,f=o*p+n*g+r*u;if(0===f){var m="THREE.Matrix3: .getInverse() can't invert matrix, determinant is 0";if(!0===e)throw new Error(m);return console.warn(m),this.identity()}var C=1/f;return i[0]=p*C,i[1]=(r*h-d*n)*C,i[2]=(l*n-r*s)*C,i[3]=g*C,i[4]=(d*o-r*c)*C,i[5]=(r*a-l*o)*C,i[6]=u*C,i[7]=(n*c-h*o)*C,i[8]=(s*o-n*a)*C,this},Object.assign(cg.prototype,{isPlane:!0,set:function(A,e){return this.normal.copy(A),this.constant=e,this},setComponents:function(A,e,t,i){return this.normal.set(A,e,t),this.constant=i,this},setFromNormalAndCoplanarPoint:function(A,e){return this.normal.copy(A),this.constant=-e.dot(this.normal),this},setFromCoplanarPoints:function(){var A=new $c,e=new $c;return function(t,i,o){var n=A.subVectors(o,i).cross(e.subVectors(t,i)).normalize();return this.setFromNormalAndCoplanarPoint(n,t),this}}(),clone:function(){return(new this.constructor).copy(this)},copy:function(A){return this.normal.copy(A.normal),this.constant=A.constant,this},normalize:function(){var A=1/this.normal.length();return this.normal.multiplyScalar(A),this.constant*=A,this},negate:function(){return this.constant*=-1,this.normal.negate(),this},distanceToPoint:function(A){return this.normal.dot(A)+this.constant},distanceToSphere:function(A){return this.distanceToPoint(A.center)-A.radius},projectPoint:function(A,e){return void 0===e&&(console.warn("THREE.Plane: .projectPoint() target is now required"),e=new $c),e.copy(this.normal).multiplyScalar(-this.distanceToPoint(A)).add(A)},intersectLine:function(){var A=new $c;return function(e,t){void 0===t&&(console.warn("THREE.Plane: .intersectLine() target is now required"),t=new $c);var i=e.delta(A),o=this.normal.dot(i);if(0===o)return 0===this.distanceToPoint(e.start)?t.copy(e.start):void 0;var n=-(e.start.dot(this.normal)+this.constant)/o;return 0>n||n>1?void 0:t.copy(i).multiplyScalar(n).add(e.start)}}(),intersectsLine:function(A){var e=this.distanceToPoint(A.start),t=this.distanceToPoint(A.end);return 0>e&&t>0||0>t&&e>0},intersectsBox:function(A){return A.intersectsPlane(this)},intersectsSphere:function(A){return A.intersectsPlane(this)},coplanarPoint:function(A){return void 0===A&&(console.warn("THREE.Plane: .coplanarPoint() target is now required"),A=new $c),A.copy(this.normal).multiplyScalar(-this.constant)},applyMatrix4:function(){var A=new $c,e=new lg;return function(t,i){var o=i||e.getNormalMatrix(t),n=this.coplanarPoint(A).applyMatrix4(t),r=this.normal.applyMatrix3(o).normalize();return this.constant=-n.dot(r),this}}(),translate:function(A){return this.constant-=A.dot(this.normal),this},equals:function(A){return A.normal.equals(this.normal)&&A.constant===this.constant}});var hg=function(A,e){this._point=void 0,this._normal=void 0,this.viewer=e,this.svg=A;var t=document.createElementNS(Dp,"polygon");t.setAttribute("fill","rgba(10,234,6,0.2)"),t.setAttribute("stroke","#0aea06"),t.setAttribute("stroke-width",1),t.style.pointerEvents="none",this._panel=t,this.hoverPanelSize={width:20,height:20}};hg.prototype.setupWithPoint=function(A,e){this._point=A,this._normal=e},hg.prototype.remove=function(){this.svg&&this._panel.parentNode&&this.svg.removeChild(this._panel)},hg.prototype.add=function(){this.svg&&this._panel&&this.svg.appendChild(this._panel)},hg.prototype.isVisible=function(){return!!this._panel.parentNode},hg.prototype.stretchOnDirection=function(A,e,t){var i=A.clone().add(e).multiplyScalar(.5),o=e.clone().sub(A).normalize();return[i.clone().sub(o.clone().multiplyScalar(t/2)),i.clone().add(o.clone().multiplyScalar(t/2))]},hg.prototype.draw=function(){var A=this.viewer.getScene().worldToDrawing(this._normal);A.normalize();var e=this.viewer.worldToClient(this._point),t=this.viewer.getScene().worldToDrawing(this._point),i=this.viewer.cameraControl,o=new cg;o.setFromNormalAndCoplanarPoint(A,t);var n=new sg(e.x-10,e.y-10),r=new sg(e.x+10,e.y-10),a=t,s=i.getRaycaster(n.x,n.y),l=new $c,c=new $c;if(s.ray.intersectPlane(o,l),(s=i.getRaycaster(r.x,r.y)).ray.intersectPlane(o,c),null!==l&&null!==c){var h=new $c(1,0,0),d=new $c(0,0,1),p=new $c(0,1,0),g=.0025>=Math.abs(A.clone().dot(h)),u=.0025>=Math.abs(A.clone().dot(p));if(g&&u)var f=h.clone(),m=p.clone();else f=d.clone().cross(A).normalize(),m=A.clone().cross(f).normalize();var C=l.distanceTo(c)/2,y=f.clone().multiplyScalar(C),v=m.clone().multiplyScalar(C),I=a.clone().sub(y).add(v),E=a.clone().add(y).add(v),B=a.clone().sub(y).sub(v),x=a.clone().add(y).sub(v),S=[];S.push(I,E,x,B);for(var w=[],M=i.getContainerDimensions(),b=0;S.length>b;b+=1){var U=new $c(S[b].x,S[b].y,S[b].z);U.project(i.camera);var F={x:0,y:0,z:0};F.x=Math.floor(.5*(U.x+1)*M.width+.5),F.y=Math.floor(-.5*(U.y-1)*M.height+.5),F.z=U.z||0,w.push(new $c(F.x,F.y,0))}var K=this.hoverPanelSize,Q=w[0].distanceTo(w[1]),R=w[0].distanceTo(w[3])/K.height;if(1!==Q/K.width){var T=this.stretchOnDirection(w[0],w[1],K.width),k=this.stretchOnDirection(w[2],w[3],K.width);w=T.concat(k)}if(1!==R){T=this.stretchOnDirection(w[0],w[3],K.height),k=this.stretchOnDirection(w[1],w[2],K.height);w=[T[0],k[0],k[1],T[1]]}for(var D="",L=0;w.length>L;L+=1)D+=w[L].x+",",D+=w[L].y+" ";this._panel.setAttribute("points",D)}};var dg=function(A){this._point=void 0,this.svg=A;var e=Vp(5);e.setAttributeNS(null,"fill","#00ff00"),this._circle=e};dg.prototype.setupWithPoint=function(A){A&&(this._point=A)},dg.prototype.remove=function(){this.svg&&this._circle.parentNode&&this.svg.removeChild(this._circle)},dg.prototype.add=function(){this.svg&&this._circle&&this.svg.appendChild(this._circle)},dg.prototype.isVisible=function(){return!!this._circle.parentNode},dg.prototype.draw=function(A){if(this._point){var e=A(this._point);this._circle.setAttributeNS(null,"cx",e[0]),this._circle.setAttributeNS(null,"cy",e[1])}};var pg=function(A){Xp.call(this,A),this.volumeText=new _p,this.volumeText.textBackgroundColor="#009bff",this.svgGroup.appendChild(this.volumeText.group);var e=this;this.volumeText.setClickCallback((function(){e.onclickCallback&&e.onclickCallback(e)})),this.pickedComponentKeys=[],this._position=void 0,this._volume=void 0};(pg.prototype=Object.assign(Object.create(Xp.prototype),{constructor:pg})).setData=function(A,e,t){this._position=A,this._volume=e,t&&(this.unitOfModel=this.unitOfModel&&this.unitOfModel!==t?void 0:t)},pg.prototype.isDone=function(){return this.pickedComponentKeys[0]&&this._position},pg.prototype.draw=function(A,e){if(this.svgGroup.parentNode&&this.isDone()){var t=this._position;e&&(t=e(t)),this.volumeText.setPosition(t[0],t[1]),this.updateTexts()}},pg.prototype.measureResult=function(){if(this._volume)return this._volume},pg.prototype.resultToDisplayOfVolume=function(A){var e=A,t=this.unitOfModel;return this.adjustOption&&(e=this.adjustOption.adjustVolume(A),t=this.adjustOption.unit),this.unitOnUI&&(t&&(e=Jp(t,this.unitOnUI,e,3)),t=this.unitOnUI),t||(t=""),e=e.toFixed(this.precision),"mm"===t?t="mm³":"m"===t?t="m³":"cm"===t&&(t="cm³"),{value:Number(e),unit:t,text:e+t}},pg.prototype.updateTexts=function(){this._volume&&(this.volumeText.setText(this.resultToDisplayOfVolume(this._volume).text,void 0),this.volumeText.draw())},pg.prototype.setSelected=function(A){Xp.prototype.setSelected.call(this,A)&&(A?(this.volumeText.isShowShadow=!0,this.volumeText.textBackgroundColor="#ffffff",this.volumeText.textColor="#009bff",this.volumeText.draw()):(this.volumeText.isShowShadow=!1,this.volumeText.textBackgroundColor="#009bff",this.volumeText.textColor="#ffffff",this.volumeText.draw()))};var gg=function(){this.pointTransformer=void 0,this.parentDom=void 0,this.viewer=void 0,this.is3DMode=!1,this.isMobile=!1},ug="Distance",fg="Angle",mg="Adjust",Cg="Area",yg="MinDistance",vg="Volume",Ig=function(A){this.config=A,this.config.viewer.measure=this,this.svg=this._createSVG(A.parentDom.clientWidth,A.parentDom.clientHeight),A.parentDom.appendChild(this.svg),this._resize=this._resize.bind(this),this.config.viewer.addEventListener("resize",this._resize),this.setCurrentMode(ug),this.isOpen=!1,this.didEndMeasureCallback=void 0,this._items=[],this._adjustItem=void 0,this._adjustOption=void 0,this._precision=3,this._unitSetByUser="mm",this._pickedLine=void 0,this._pickedPoint=void 0,this._pickedPanel=void 0,this._selectedItem=void 0,this.open()};Ig.prototype.supportUnits=function(){return[{unit:"mm",title:"毫米"},{unit:"cm",title:"厘米"},{unit:"m",title:"米"}]},Ig.prototype.open=function(){this.isOpen||(this.isOpen=!0,this._handleKeyUp=this._handleKeyUp.bind(this),document.addEventListener("keyup",this._handleKeyUp))},Ig.prototype.close=function(){this.svg.parentNode.removeChild(this.svg),this.isOpen=!1,this.config.is3DMode&&(this.config.viewer.clearSelection(),this.config.viewer.render()),this.config.viewer.measure=void 0,document.removeEventListener("keyup",this._handleKeyUp),this.config.viewer.removeEventListener("resize",this._resize)},Ig.prototype.setCurrentMode=function(A){if(this.config.is3DMode||A!==vg&&A!==yg)if(this._currentMode!==A&&(this._currentMode=A,this._currentMeasureItem&&(this._currentMeasureItem instanceof og&&this.config.is3DMode&&(this.config.viewer.clearSelection(),this.config.viewer.render()),this._currentMeasureItem.remove(),this._currentMeasureItem=void 0)),this._currentMode===mg){var e=this._adjustItem?this._adjustItem:this._currentMeasureItem;(e||e instanceof $p)&&e.isDone()&&(e.add(),e.draw(void 0,this.config.pointTransformer),this.didEndMeasureCallback&&this.didEndMeasureCallback(e.measureResult()))}else this._adjustItem&&this._adjustItem.remove()},Ig.prototype.getCurrentMode=function(){return this._currentMode},Ig.prototype.getCurrentUnit=function(){return this._unitSetByUser},Ig.prototype.setUnit=function(A){if(A&&this._unitSetByUser!==A){this._unitSetByUser=A;for(var e=0,t=this._items.length;t>e;e+=1){this._items[e].changeUnit(A)}this._adjustOption&&(this._adjustOption.valueAfterAdjust=Jp(this._adjustOption.unit,A,this._adjustOption.valueAfterAdjust,0),this._adjustOption.unit=A)}},Ig.prototype.getCurrentPrecision=function(){return this._precision},Ig.prototype.setPrecision=function(A){if(A&&this._precision!==A){this._precision=A;for(var e=0,t=this._items.length;t>e;e+=1){this._items[e].changePrecision(A)}this._adjustItem&&this._adjustItem.changePrecision(A)}},Ig.prototype.clearAllMeasure=function(){for(var A=0,e=this._items.length;e>A;A+=1){this._items[A].remove()}this._items=[],this._selectedItem=void 0},Ig.prototype.removeSelectedMeasure=function(){if(this._selectedItem){for(var A=0,e=this._items.length;e>A;A+=1)if(this._items[A]===this._selectedItem){this._selectedItem.remove(),this._items.splice(A,1);break}(this._selectedItem instanceof pg||this._selectedItem instanceof og)&&this.config.is3DMode&&(this.config.viewer.clearSelection(),this.config.viewer.render()),this._selectedItem=void 0,this._items.length>0&&(this._selectedItem=this._items[this._items.length-1],this._selectedItem.setSelected(!0))}},Ig.prototype.setAdjustForCurrentAdjustItem=function(A,e){if(A&&e&&this._currentMode===mg&&(this._currentMeasureItem&&this._currentMeasureItem instanceof $p&&this._currentMeasureItem.isDone()&&(this._adjustItem&&this._adjustItem.remove(),this._adjustItem=this._currentMeasureItem,this._currentMeasureItem=void 0),this._adjustItem&&this._adjustItem.isDone())){var t=new Ag;t.unit=A,t.valueBeforeAdjust=this._adjustItem.measureResult().distance,t.valueAfterAdjust=e,this._adjustOption=t;for(var i=0,o=this._items.length;o>i;i+=1){this._items[i].adjustWithOption(this._adjustOption)}this._adjustItem.adjustWithOption(this._adjustOption)}},Ig.prototype.cancelCurrentAdjust=function(){if(this._adjustItem&&(this._adjustItem.remove(),this._adjustItem=void 0),this._currentMeasureItem instanceof $p&&(this._currentMeasureItem.remove(),this._currentMeasureItem=void 0),this._adjustOption){for(var A=0,e=this._items.length;e>A;A+=1){this._items[A].unAdjustWithOption(this._adjustOption)}this._adjustOption=void 0}},Ig.prototype.cancelCurrentMeasure=function(){!this._currentMeasureItem||this._currentMeasureItem instanceof $p||(this._currentMeasureItem.remove(),this._currentMeasureItem=void 0)},Ig.prototype.processIntersect=function(A){if(this.isOpen){if(!A)return this._hidePickedLine(),void this._hidePickedPoint();if(A.pickPoint){var e=[A.pickPoint.x,A.pickPoint.y,void 0===A.pickPoint.z?0:A.pickPoint.z],t=e;if(A.pick){if(this._currentMode===mg&&this._currentMeasureItem&&this._currentMeasureItem.isDone()&&(this._currentMeasureItem.remove(),this._currentMeasureItem=void 0),this._currentMeasureItem||this._createNewItem(),!this._currentMeasureItem)return;if(this._currentMeasureItem instanceof og){var i=this._currentMeasureItem.pickedComponentKeys;if(i.push(A.userId),2===i.length){var o=this.config.viewer.calculateMinDistance(i[0],i[1]);if(o&&o.start&&o.end)this._currentMeasureItem.setData([[o.start.x,o.start.y,o.start.z],[o.end.x,o.end.y,o.end.z]],o.minDistance,A.measureUnit),this._currentMeasureItem.draw(void 0,this.config.pointTransformer);else this._currentMeasureItem=void 0}this.config.viewer.addToSelection(i),this.config.viewer.render()}else if(this._currentMeasureItem instanceof pg){var n=this._currentMeasureItem.pickedComponentKeys;if(0===n.length){n.push(A.userId);var r=this.config.viewer.calculateComponentVolume(n[0]);r&&(this._currentMeasureItem.setData(r.position,r.volume,A.measureUnit),this._currentMeasureItem.draw(void 0,this.config.pointTransformer)),this.config.viewer.addToSelection(n),this.config.viewer.render()}}else t=void 0,this._currentMeasureItem.addPickedPoint(e,A.measureUnit,this.config.pointTransformer),this._currentMeasureItem.draw(t,this.config.pointTransformer);if(this._currentMeasureItem&&this._currentMeasureItem.isDone()){this._currentMeasureItem instanceof $p||!this._adjustOption||this._currentMeasureItem.adjustWithOption(this._adjustOption);var a=this._currentMeasureItem.measureResult();this._currentMeasureItem instanceof $p||(this._items.push(this._currentMeasureItem),this._selectedItem&&(this._selectedItem.setSelected(!1),this._selectedItem=void 0),this._selectedItem=this._currentMeasureItem,this._selectedItem.setSelected(!0),this._currentMeasureItem=void 0),this.didEndMeasureCallback&&this.didEndMeasureCallback(a)}}else this._currentMeasureItem&&this._currentMeasureItem.draw(t,this.config.pointTransformer)}this._currentMode!==yg&&this._currentMode!==vg&&(A.pickPoint&&A.isAbsorbPoint?this._showPickedPoint(A.pickPoint):this._hidePickedPoint(),A.pickPlane?this._showPickedPanel(A.pickPoint,A.normal):this._hidePickedPanel(),A.pickLine?this._showPickedLine(A.pickLine[0],A.pickLine[1],A.measureUnit):this._hidePickedLine())}},Ig.prototype.update=function(){if(this.isOpen){for(var A=0,e=this._items.length;e>A;A+=1){this._items[A].draw(void 0,this.config.pointTransformer)}this._currentMeasureItem&&this._currentMeasureItem.draw(void 0,this.config.pointTransformer),this._adjustItem&&this._adjustItem.draw(void 0,this.config.pointTransformer),this._pickedLine&&this._pickedLine.isVisible()&&this._pickedLine.draw(void 0,this.config.pointTransformer),this._pickedPanel&&this._pickedPanel.isVisible()&&this._pickedPanel.draw(this.config.pointTransformer)}},Ig.prototype.changeSelect=function(){for(var A=0,e=this._items.length;e>A;A+=1){var t=this._items[A];t.setSelected(this._selectedItem===t)}},Ig.prototype._resize=function(){this.svg.style.width=this.config.parentDom.clientWidth,this.svg.style.height=this.config.parentDom.clientHeight},Ig.prototype._createNewItem=function(){switch(this._currentMode){case ug:this._currentMeasureItem=new ig(this.svg,this.config.isMobile,this._items.length+1);break;case fg:this._currentMeasureItem=new eg(this.svg);break;case mg:this._currentMeasureItem=new $p(this.svg);break;case Cg:this._currentMeasureItem=new tg(this.svg);break;case yg:this._currentMeasureItem=new og(this.svg);break;case vg:this._currentMeasureItem=new pg(this.svg)}if(this._currentMeasureItem){this._currentMeasureItem.is3DMode=this.config.is3DMode,this._currentMeasureItem instanceof $p||(this._adjustOption&&this._currentMeasureItem.adjustWithOption(this._adjustOption),this._unitSetByUser&&this._currentMeasureItem.changeUnit(this._unitSetByUser)),this._currentMeasureItem.changePrecision(this._precision);var A=this;this._currentMeasureItem.setClickCallback((function(e){e.isDone()&&(A._selectedItem=e,A.changeSelect())}))}},Ig.prototype._showPickedLine=function(A,e,t){var i=[A.x,A.y,void 0===A.z?0:A.z],o=[e.x,e.y,void 0===e.z?0:e.z];this._pickedLine||(this._pickedLine=new ng(this.svg),this._pickedLine.unitOfModel=t),this._adjustOption&&this._pickedLine.adjustWithOption(this._adjustOption),this._pickedLine.changeUnit(this._unitSetByUser?this._unitSetByUser:t),this._pickedLine.changePrecision(this._precision),this._pickedLine.add(),this._pickedLine.setData(i,o),this._pickedLine.draw(void 0,this.config.pointTransformer)},Ig.prototype._hidePickedLine=function(){this._pickedLine&&this._pickedLine.remove()},Ig.prototype._showPickedPoint=function(A){this._pickedPoint||(this._pickedPoint=new dg(this.svg)),this._pickedPoint.add(),this._pickedPoint.setupWithPoint(A),this._pickedPoint.draw(this.config.pointTransformer)},Ig.prototype._hidePickedPoint=function(){this._pickedPoint&&this._pickedPoint.remove()},Ig.prototype._showPickedPanel=function(A,e){this._pickedPanel||(this._pickedPanel=new hg(this.svg,this.config.viewer)),this._pickedPanel.add(),this._pickedPanel.setupWithPoint(A,e),this._pickedPanel.draw(this.config.pointTransformer)},Ig.prototype._hidePickedPanel=function(){this._pickedPanel&&this._pickedPanel.remove()},Ig.prototype._createSVG=function(A,e){var t=Lp();return t.style.width=A+"px",t.style.height=e+"px",t.style.position="absolute",t.style.left="0",t.style.top="0",t},Ig.prototype._handleKeyUp=function(A){var e=A.keyCode;27===e?this.cancelCurrentMeasure():46===e&&this.removeSelectedMeasure()};var Eg=function(A){yp.call(this,Pc.PICK_BY_MEASURE),this.controlManager=A.controlManager,this.pickHelper=new kp(A.cameraControl),this.mouseDown=new s,this.lastEvent=null,this.pick=!1,this.pickPoint=new y;var e=A.getRenderer().domElement.parentElement,t=new gg;t.parentDom=e,t.pointTransformer=A.getScreenCoordFromSceneCoord.bind(A),t.viewer=A,t.is3DMode=!0,this.measure=new Ig(t);var i=this;A.cameraControl.addEventListener(Rc.ON_CAMERA_CHANGE,(function(){i.measure.update()})),A.clearSelection()};(Eg.prototype=Object.create(yp.prototype)).constructor=Eg,Eg.prototype.destroy=function(){yp.prototype.destroy.call(this),this.editorManager=null,this.mouseDown=null,this.lastEvent=null,this.pickPoint=null,this.pickHelper.destroy(),this.pickHelper=null},Eg.prototype.processMouseDown=function(A){return!!mh.isMobileDevice()||(A.button===t.LEFT?(this.mouseDown.x=A.clientX,this.mouseDown.y=A.clientY,!1):yp.prototype.processMouseDown.call(this,A))},Eg.prototype.processMouseMove=function(A){return!1},Eg.prototype.processMouseUp=function(A){if(mh.isMobileDevice())return!0;if(A.button===t.LEFT){if(2>=new s(A.clientX,A.clientY).distanceTo(this.mouseDown)){var e=this.pickPoint.clone(),i=void 0;return i=A.shiftKey?this.pickHelper.handleShiftMeasure(A,!0,e):this.pickHelper.handleMouseMeasure(A,!0,e),this.measure.processIntersect(i),e.equals(this.pickPoint)||(this.pick=!this.pick,this.pickPoint.copy(e)),this.controlManager.isUpdateRenderList=!0,!0}return!0}return yp.prototype.processMouseUp.call(this,A)},Eg.prototype.processKeyDown=function(A){return 16===A.keyCode||yp.prototype.processKeyDown.call(this,A)},Eg.prototype.processHover=function(A){if(mh.isMobileDevice())return!0;var e=void 0;return e=A.shiftKey?this.pickHelper.handleShiftMeasure(A,!1,this.pickPoint):this.pickHelper.handleMouseMeasure(A,!1,this.pickPoint),this.measure.processIntersect(e),!0},Eg.prototype.processTouchstart=function(A){return this.mouseDown.x=A.touches[0].clientX,this.mouseDown.y=A.touches[0].clientY,A.clientX=A.touches[0].clientX,A.clientY=A.touches[0].clientY,this.lastEvent=A,yp.prototype.processTouchstart.call(this,A)},Eg.prototype.processTouchmove=function(A){return this.lastEvent=null,yp.prototype.processTouchmove.call(this,A)},Eg.prototype.processTouchend=function(A){if(null!==this.lastEvent){var e=this.pickHelper.handleMouseMeasure(this.lastEvent,!0,this.pickPoint);this.measure.processIntersect(e),this.controlManager.isUpdateRenderList=!0}return yp.prototype.processTouchend.call(this,A)},Eg.prototype.touchPointMove=function(A){this.measure.processIntersect(this.pickHelper.handleMouseMeasure(A,!1,this.pickPoint))},Eg.prototype.touchPointEnd=function(A){var e=this.pickPoint.clone(),t=this.pickHelper.handleMouseMeasure(A,!0,e);return this.measure.processIntersect(t),e.equals(this.pickPoint)||(this.pick=!this.pick,this.pickPoint.copy(e)),this.controlManager.isUpdateRenderList=!0,!0},Eg.prototype.onExit=function(A){this.measure.close();var e=this.pickHelper.scene;e.hasGroup(gp.MEASUREPICKPLANE)&&e.removeGroupByName(gp.MEASUREPICKPLANE)};var Bg,xg,Sg,wg={pickByRect:function(A,e,t,i,o,n){var r=[],a=i.octantToObjectMap,s=(A.getMatrixGlobal(),i.sceneState),l=new aA;function c(A,t,i){A&&A.frustumIntersect(e,t,i)}var h=i.filter,d=h._hasVisibleFilter(),p=h._hasPickableFilter();if(t!==Kc.Clear){var g,u,f=null,m=[];for(var C in a)if(a.hasOwnProperty(C)){var y=i.getModel(C);(f=a[C]).mesh;var v=y&&y.kdTreeNode,I=[];if(Array.isArray(v))for(var E=0,B=v.length;B>E;E+=1){var x=v[E],S=x.modelKey,w=(new M).copy(y.getModelMatrix());S&&w.multiply(y.subModel[S]),c(x,I,w)}else c(v,I,y.getModelMatrix());var b=Object.keys(y.manager.explosionList);y&&y.manager&&b.length>0&&(I=I.concat(b));for(var U=0,F=(m=uh.unique(I)).length;F>U;U+=1){var K=f.info[m[U]];if(K)for(var Q=0,R=K.length;R>Q;Q+=1){var T=K[Q];(u=void 0,u=i.isHiddenSourceObjectUserId((g=T).userId),d&&!h._isVisible(g)||p&&!h._isPickable(g)||u)||(l.copy(T.boundingBox),l.applyMatrix4(y.getModelMatrix()),this._intersectBox(e,l,n)&&!this._clipBox(o,l)&&r.push(T.userId))}}}return(r=r.concat(this.pickNonModelObjectsByRect(o,i,e,n))).length>0&&(Kc.Remove===t?(s.removeSelection(r),i.dispatchEvent({type:Rc.ON_RECTPICK_REMOVE,list:r})):Kc.Add===t&&(s.addSelection(r),i.dispatchEvent({type:Rc.ON_RECTPICK_ADD,list:r}))),r}s.clearSelection()},getObjectsInBox:function(A,e,t,i,o){var n={},r=t.octantToObjectMap,a=(A.getMatrixGlobal(),new aA);function s(A){for(var e=new y,t=0;8>t;t+=1)if(e.x=4>t?A.min.x:A.max.x,e.y=2>t/2?A.min.y:A.max.y,e.z=t%2==0?A.min.z:A.max.z,!i.clipPoint(e))return!1;return!0}function l(A){return o?!(e.min.x>A.min.x||A.max.x>e.max.x||e.min.y>A.min.y||A.max.y>e.max.y||e.min.z>A.min.z||A.max.z>e.max.z):!(e.min.x>A.max.x||A.min.x>e.max.x||e.min.y>A.max.y||A.min.y>e.max.y||e.min.z>A.max.z||A.min.z>e.max.z)}function c(A){return Boolean(!(e.max.x>A.max.x||A.min.x>e.min.x||e.max.y>A.max.y||A.min.y>e.min.y||e.max.z>A.max.z||A.min.z>e.min.z))}var h=t.filter,d=h._hasVisibleFilter(),p=h._hasPickableFilter();var g,u,f=null;for(var m in r)if(r.hasOwnProperty(m)){var C=t.getModel(m);for(var v in(f=r[m]).info)if(f.info.hasOwnProperty(v)){var I=f.info[v];if(!I)continue;for(var E=0,B=I.length;B>E;E+=1){var x=I[E];(u=void 0,u=t.isHiddenSourceObjectUserId((g=x).userId),d&&!h._isVisible(g)||p&&!h._isPickable(g)||u)||(a.copy(x.boundingBox),a.applyMatrix4(C.getModelMatrix()),!l(a)||c(a)||s(a)||(n[x.userId]=!0))}}}var S=[];for(var w in n)S.push(w);return S},pickNonModelObjectsByRect:function(A,e,t,i){var o=[],n=e.getNodeInfosInPlugins(),r=new aA;for(var a in n)if(n.hasOwnProperty(a)){var s=n[a];for(var a in s)if(s.hasOwnProperty(a)){var l=s[a][0].mesh;if(l){l instanceof Array||(l=[l]),r.empty();for(var c=0,h=l.length;h>c;c+=1){var d=l[c];d instanceof H&&r.expandByObject(d)}this._intersectBox(t,r,i)&&!this._clipBox(A,r)&&o.push(a)}}}return o},_intersectBox:(xg=new y,Sg=new y,function(A,e,t){for(var i=0,o=A.planes,n=0;6>n;n+=1){var r=o[n];xg.x=r.normal.x>0?e.min.x:e.max.x,Sg.x=r.normal.x>0?e.max.x:e.min.x,xg.y=r.normal.y>0?e.min.y:e.max.y,Sg.y=r.normal.y>0?e.max.y:e.min.y,xg.z=r.normal.z>0?e.min.z:e.max.z,Sg.z=r.normal.z>0?e.max.z:e.min.z;var a=r.distanceToPoint(xg),s=r.distanceToPoint(Sg);if(0>a&&0>s)return!1;0>a*s||(i+=1)}return t?i>=2:6===i}),_clipBox:(Bg=new y,function(A,e){for(var t=0;8>t;t+=1)if(Bg.x=4>t?e.min.x:e.max.x,Bg.y=2>t/2?e.min.y:e.max.y,Bg.z=t%2==0?e.min.z:e.max.z,!A.clipPoint(Bg))return!1;return!0})},Mg=function(A,e,t){yp.call(this,A),this.cameraControl=e,this.frustum=new Ze,this.startPt=new s,this.endPt=new s,this.eventDispatcher=t};(Mg.prototype=Object.create(yp.prototype)).constructor=Mg,Mg.prototype.destroy=function(A){yp.prototype.destroy.call(this),this.cameraControl=null,this.frustum=null,this.startPt=null,this.endPt=null,this.eventDispatcher=null},Mg.prototype.onUpdateUI=function(A){this.eventDispatcher.dispatchEvent({type:Rc.ON_CONTROL_UPDATEUI,data:A,editor:this.name})},Mg.prototype.updateFrustum=function(A,e){var t=this.startPt.x,i=this.endPt.x,o=this.startPt.y,n=this.endPt.y;if(t>i){var r=t;t=i,i=r}if(o>n){var a=o;o=n,n=a}if(i-t==0||n-o==0)return!1;var s=this.cameraControl,l=s.getContainerDimensions();return A&&s.computeFrustum(t,i,o,n,this.frustum,l),e&&this.onUpdateUI({visible:!0,dir:this.endPt.x>this.startPt.x,left:t-l.left,top:o-l.top,width:i-t,height:n-o}),!0};var bg=function(A){Mg.call(this,Pc.PICK_BY_RECT,A.cameraControl,A.modelManager),this.viewer=A,this.scene=A.getScene(),this.pickHelper=new kp(this.cameraControl),this.activatePick=!1,this.pressKey="",this.pickPoint=new y,this.snapIsEnabled=!1};(bg.prototype=Object.create(Mg.prototype)).constructor=bg,bg.prototype.destroy=function(){Mg.prototype.destroy.call(this),this.pickHelper.destroy(),this.pickHelper=null,this.viewer=null,this.scene=null,this.pickPoint=null},bg.prototype.setPressKey=function(A){this.pressKey=A},bg.prototype.processMouseDown=function(A){return A.preventDefault(),this.activatePick=A.ctrlKey||A.altKey,this.activatePick&&A.button===t.LEFT?(this.startPt.set(A.clientX,A.clientY),!0):Mg.prototype.processMouseDown(this,A)},bg.prototype.processMouseMove=function(A){return this.activatePick&&A.button===t.LEFT?(this.endPt.set(A.clientX,A.clientY),this.updateFrustum(!1,!0),!0):Mg.prototype.processMouseMove(this,A)},bg.prototype.processMouseUp=function(A){if(this.onUpdateUI({visible:!1}),this.activatePick&&A.button===t.LEFT){if(this.activatePick=!1,2>Math.abs(this.startPt.x-A.clientX)&&2>Math.abs(this.startPt.y-A.clientY))return this.pickHelper.click(A,null),!0;if(this.endPt.set(A.clientX,A.clientY),!this.updateFrustum(!0,!1))return this.pickHelper.click(A),!0;var e=Kc.Clear,i=this.pressKey||A.ctrlKey&&"ctrl"||A.altKey&&"alt"||"";return"ctrl"===i?e=Kc.Add:"alt"===i&&(e=Kc.Remove),wg.pickByRect(this.scene,this.frustum,e,this.cameraControl.viewer.modelManager,this.viewer,this.startPt.x>this.endPt.x),this.pickHelper.lastPickedUserId="",this.cameraControl.updateView(!0),!0}return Mg.prototype.processMouseUp(this,A)},bg.prototype.processTouchstart=function(A){return A.preventDefault(),this.pressKey?(this.startPt.set(A.changedTouches[0].pageX,A.changedTouches[0].pageY),!0):Mg.prototype.processTouchstart(this,A)},bg.prototype.processTouchmove=function(A){return this.pressKey?(this.endPt.set(A.changedTouches[0].pageX,A.changedTouches[0].pageY),this.updateFrustum(!1,!0),!0):Mg.prototype.processMouseMove(this,A)},bg.prototype.processTouchend=function(A){this.onUpdateUI({visible:!1});var e=A.changedTouches[0].pageX,t=A.changedTouches[0].pageY;if(this.pressKey){if(2>Math.abs(this.startPt.x-e)&&2>Math.abs(this.startPt.y-t))return this.pickHelper.click(A,null),!0;if(this.endPt.set(e,t),!this.updateFrustum(!0,!1))return this.pickHelper.click(A),!0;var i=Kc.Clear,o=this.pressKey;return"ctrl"===o?i=Kc.Add:"alt"===o&&(i=Kc.Remove),wg.pickByRect(this.scene,this.frustum,i,this.cameraControl.viewer.modelManager,this.viewer,this.startPt.x>this.endPt.x),this.pickHelper.lastPickedUserId="",this.cameraControl.updateView(!0),!0}return Mg.prototype.processTouchend(this,A)},bg.prototype.processHover=function(A){if(this.snapIsEnabled)return vc.IsMobile||this.pickHelper.handleMouseMeasure(A,!1,this.pickPoint,Rc.ON_HOVER_SNAP),!0},bg.prototype.enableSnap=function(A){this.snapIsEnabled=A};var Ug=function(A){Mg.call(this,Pc.ZOOM_BY_RECT,A.cameraControl,A.modelManager),this.scene=A.getScene(),this.activateZoom=!1};(Ug.prototype=Object.create(Mg.prototype)).constructor=Ug,Ug.prototype.destroy=function(){Mg.prototype.destroy.call(this),this.scene=null},Ug.prototype.processMouseDown=function(A){return A.button===t.LEFT?(this.startPt.set(A.clientX,A.clientY),this.activateZoom=!0,!0):Mg.prototype.processMouseDown.call(this,A)},Ug.prototype.processMouseMove=function(A){return this.activateZoom?(this.endPt.set(A.clientX,A.clientY),this.updateFrustum(!1,!0),!0):Mg.prototype.processMouseMove.call(this,A)},Ug.prototype.processMouseUp=function(A){return this.activateZoom?(this.activateZoom=!1,this.onUpdateUI({visible:!1}),this.endPt.set(A.clientX,A.clientY),this.updateFrustum(!0,!1)&&this.zoomToRectangle(),!0):Mg.prototype.processMouseUp.call(this,A)},Ug.prototype.zoomToRectangle=function(){var A=this.cameraControl.camera,e=this.cameraControl.camera.target,t=this.cameraControl.getContainerDimensions(),i=this.startPt.x,o=this.startPt.y,n=this.endPt.x,r=this.endPt.y,a=Math.abs(n-i),l=Math.abs(o-r);if(0!==a&&0!==l){var c=new s((i+n)/2,(o+r)/2),h=A.position.clone(),d=e.clone().sub(h),p=d.length(),g=0,u=this.cameraControl.getIntersectContext(c),f=this.cameraControl.intersector.hitTest(u);if(f){var m=a/l>t.width/t.height?a/t.width:l/t.height,C=f.distanceTo(h)*m;d.normalize(),g=d.clone().negate().multiplyScalar(C)}else{var v={};v.left=Math.min(i,n),v.top=Math.min(o,r),v.right=Math.max(i,n),v.bottom=Math.max(o,r);var I=this.scene.getNearDepthByRect(this.frustum,A);if(I===1/0)return;var E=new y((i+n)/2,(o+r)/2,I),B=new y(v.left,v.top,I),x=this.clientToWorld(E),S=this.clientToWorld(B),w=x.clone().sub(S).length();f=x.clone(),d.normalize(),g=d.clone().negate().multiplyScalar(w)}h=f.clone().add(g),A.position.copy(h),e.copy(h).sub(g.clone().normalize().multiplyScalar(p)),this.cameraControl.updateView(!0)}},Ug.prototype.worldToClient=function(A){var e=this.cameraControl.camera,t=new y(A.x,A.y,A.z);return t.project(e),t},Ug.prototype.clientToWorld=function(A){var e=this.cameraControl.getContainerDimensions(),t=this.cameraControl.camera,i=new y;return i.x=A.x/e.width*2-1,i.y=-A.y/e.height*2+1,i.z=A.z,i.unproject(t),i};var Fg=function(A,e){this.name=A,this.cameraControl=e,this.mouseButtons={ORBIT:t.LEFT,PAN2:t.MIDDLE,PAN:t.RIGHT},this.StateType={NONE:-1,ROTATE:0,DOLLY:1,PAN:2},this.state=this.StateType.NONE,this.zoomSpeed=Math.pow(.95,.2),this.defaultMovementSpeed=.005*vc.SceneSize,this.movementSpeed=this.defaultMovementSpeed,this.minMovementSpeed=.001,this.defaultKeyPanSpeed=2,this.keyPanSpeed=this.defaultKeyPanSpeed,this.minKeyPanSpeed=.01,this.wheelZoomFactor=45e-5,this.pointerLock=!1};Fg.prototype.getName=function(){return this.name},Fg.prototype.destroy=function(){this.scene=null,this.domElement=null,this.cameraControl=null,this.mouseButtons=null,this.StateType=null},Fg.prototype.onExit=function(){},Fg.prototype.onEnter=function(){},Fg.prototype.processMouseDown=function(A){},Fg.processMouseMove=function(A){},Fg.prototype.processMouseUp=function(A){},Fg.prototype.processMouseWheel=function(A){},Fg.prototype.processMouseDoubleClick=function(A){},Fg.prototype.processKeyDown=function(A){},Fg.prototype.processKeyUp=function(A){},Fg.prototype.processTouchstart=function(A){},Fg.prototype.processTouchmove=function(A){},Fg.prototype.processTouchend=function(A){},Fg.prototype.processHover=function(A){},Fg.prototype.processMovement=function(A){},Fg.prototype.processPointerLockEnter=function(A){},Fg.prototype.processPointerLockExit=function(A){},Fg.prototype.moveTo=function(A,e,t){},Fg.prototype.rotateTo=function(A){},Fg.prototype.dispatchEvent=function(A){this.cameraControl.viewer.getControlManager().dispatchEvent(A)},Fg.prototype.getDomElement=function(){return this.domElement},Fg.prototype.getRendererDomElement=function(){return this.rendererDomElement},Fg.prototype.updateButtons=function(A){void 0!==A.ORBIT&&(this.mouseButtons.ORBIT=A.ORBIT),void 0!==A.PAN&&(this.mouseButtons.PAN=A.PAN),void 0!==A.PAN2&&(this.mouseButtons.PAN2=A.PAN2),void 0!==A.ZOOM&&(this.mouseButtons.ZOOM=A.ZOOM)};var Kg=function(A){Fg.call(this,Gc.FLY,A),this.lookSpeed=.001,this.constrainPitch=!0,this.pitchMin=a.degToRad(5)-.5*Math.PI,this.pitchMax=.5*Math.PI-this.pitchMin,this.pitchDeltaTotal=0,this.moveState=qc.NONE,this.rotateStart=new s,this.rotateEnd=new s,this.rotateDelta=new s,this._panStart=new s,this._panEnd=new s,this._panDelta=new s,this._pan=new y,this._worldDimension=new s,this.lastMousePoint=new s,this.isLockHeight=!1,this.lockedHeight=0,this.pickHelper=new kp(A),this.intersectOfMouseDown=null};(Kg.prototype=Object.create(Fg.prototype)).constructor=Kg,Kg.prototype.destroy=function(){Fg.prototype.destroy.call(this),this.cameraControl=null,this.scene=null,this.rotateStart=null,this.rotateEnd=null,this.rotateDelta=null,this._panStart=null,this._panEnd=null,this._panDelta=null,this._pan=null,this._worldDimension=null,this.lastMousePoint=null,this.intersectOfMouseDown=null,this.pickHelper.destroy(),this.pickHelper=null},Kg.prototype.processMouseDown=function(A){A.preventDefault(),A.stopPropagation(),this.lastMousePoint.set(A.clientX,A.clientY);var e=this.cameraControl;if(this.intersectOfMouseDown=null,A.button===this.mouseButtons.ORBIT){if(jh.NoRotate)return;this.rotateStart.set(A.clientX,A.clientY),this.state=this.StateType.ROTATE,this.dispatchEvent({type:Rc.ON_CONTROL_BEGIN,name:"look",control:this.name})}else if(A.button===this.mouseButtons.PAN||A.button===this.mouseButtons.PAN2){if(jh.NoPan)return;this._panStart.set(A.clientX,A.clientY),this._worldDimension=e.getWorldDimension(A.clientX,A.clientY),this.intersectOfMouseDown=e.getLastIntersect(),this.state=this.StateType.PAN,this.isLockHeight&&(this.lockedHeight=A.clientY)}},Kg.prototype.doPan=function(A,e){var t=this.cameraControl;this._panEnd.set(A,this.isLockHeight?this.lockedHeight:e),this._panDelta.subVectors(this._panEnd,this._panStart),0===this._panDelta.x&&0===this._panDelta.y||(t.panOnWorld(this._panStart,this._panEnd,this._pan,this._worldDimension),t.adjustCameraForPan(this._pan),this._panStart.copy(this._panEnd),t.update(!0))},Kg.prototype.processMouseMove=function(A){var e=this.cameraControl;(A.preventDefault(),this.state===this.StateType.ROTATE)?(this.rotateEnd.set(A.clientX,A.clientY),this.rotateDelta.subVectors(this.rotateEnd,this.rotateStart),this.rotateStart.copy(this.rotateEnd),(0!==this.rotateDelta.x||0!==this.rotateDelta.y)&&e.rotateForFly(this.rotateDelta.x*this.lookSpeed,this.rotateDelta.y*this.lookSpeed,this.pitchMin,this.pitchMax)):this.state===this.StateType.PAN&&this.doPan(A.clientX,A.clientY)},Kg.prototype.processMouseUp=function(A){if(A.preventDefault(),A.stopPropagation(),A.button!==t.LEFT||this.lastMousePoint.x!==A.clientX||this.lastMousePoint.y!==A.clientY){this.intersectOfMouseDown=null;var e=this.cameraControl;switch(this.state){case this.StateType.ROTATE:this.rotateDelta.set(0,0);e.rotateForFly(0,0,this.pitchMin,this.pitchMax),this.dispatchEvent({type:Rc.ON_CONTROL_END,name:"look",control:this.name});break;case this.StateType.PAN:this.doPan(A.clientX,A.clientY)}e.endOperation(),this.state=this.StateType.NONE}else this.pickHelper.click(A,this.intersectOfMouseDown)},Kg.prototype.processHover=function(A){this.pickHelper.handleMouseHover(A)},Kg.prototype.processMouseWheel=function(A){A.preventDefault(),A.stopPropagation();var e=this.cameraControl;if(!jh.NoZoom){var t=A.wheelDelta||A.detail;t=Math.abs(t)>10?t:40*-t,t*=5e-4,jh.ReverseWheelDirection&&(t*=-1),this.cameraControl.delayHandle();var i=e.getContainerDimensions();e.zoom(t,i.left+.5*i.width,i.top+.5*i.height)}},Kg.prototype.processKeyDown=function(A){if(!jh.NoKey&&!A.altKey){var e=qc,t=e.NONE;switch(A.keyCode){case Ph:this.movementSpeed=this.defaultMovementSpeed;break;case Vh:this.movementSpeed*=1.1;break;case Gh:this.movementSpeed*=.9,this.minMovementSpeed>this.movementSpeed&&(this.movementSpeed=this.minMovementSpeed);break;case Fh:case Nh:t=e.FORWARD;break;case Qh:case Lh:t=e.BACK;break;case Uh:case Rh:t=e.LEFT;break;case Kh:case Th:t=e.RIGHT;break;case Dh:t=e.UP;break;case kh:t=e.DOWN}t!==e.NONE&&(this.moveState|=t,this.dispatchEvent({type:Rc.ON_CONTROL_KEYDOWN,event:A,state:t,direction:e,control:this.name}),this.cameraControl.delayHandle(),this.cameraControl.updateFlyMove(this.moveState,this.movementSpeed*jh.MovementSpeedRate))}},Kg.prototype.processKeyUp=function(A){if(!jh.NoKey){var e=qc,t=e.NONE;switch(A.keyCode){case Fh:case Nh:t=e.FORWARD;break;case Qh:case Lh:t=e.BACK;break;case Uh:case Rh:t=e.LEFT;break;case Kh:case Th:t=e.RIGHT;break;case Dh:t=e.UP;break;case kh:t=e.DOWN}t!==e.NONE&&(this.dispatchEvent({type:Rc.ON_CONTROL_KEYUP,event:A,state:t,direction:e,control:this.name}),this.moveState&=~t)}},Kg.prototype.moveTo=function(A){this.cameraControl.updateFlyMove(A,this.movementSpeed*jh.MovementSpeedRate)};var Qg=function(A,e){Fg.call(this,A,e),this.oldMouseX=-1,this.oldMouseY=-1,this.rotatePivot=null,this._rotateStart=new s,this._rotateEnd=new s,this._rotateDelta=new s,this._lastTrackingPoint=null,this.rotateSpeed=1,this._dollyStart=new s,this._dollyEnd=new s,this._dollyDelta=new s,this._dollyCenter=new s,this.zoomSpeed=Math.pow(.95,.2),this.modelManager=e.viewer.modelManager,this._panStart=new s,this._panEnd=new s,this._panDelta=new s,this._pan=new y,this._worldDimension=new s,this.pickHelper=new kp(e),this.intersectOfMouseDown=null,this.timeId=null,this.longTapFlag=!1,this.selectPad=(mh.isMobileDevice(),null),this.startPt=new s;var t=this;this.longTap=function(){t.longTapFlag=!0,Bh.log("long tap"),t.selectPad&&t.selectPad.showOverlay(t.startPt)},this._reqid=0,this._animateBinded=this._animate.bind(this),this._clock=new as,this._moving=!1};(Qg.prototype=Object.create(Fg.prototype)).constructor=Qg,Qg.prototype.destroy=function(){Fg.prototype.destroy.call(this),this.modelManager=null,this.intersectOfMouseDown=null,this.rotatePivot=null,this._rotateStart=null,this._rotateEnd=null,this._rotateDelta=null,this._lastTrackingPoint=null,this._dollyStart=null,this._dollyEnd=null,this._dollyDelta=null,this._dollyCenter=null,this._panStart=null,this._panEnd=null,this._panDelta=null,this._pan=null,this._worldDimension=null,this.startPt=null,this._animateBinded=null,this._clock=null,this.timeId&&(clearTimeout(this.timeId),this.timeId=null),this.pickHelper.destroy(),this.pickHelper=null,this.selectPad&&(this.selectPad.destroy(),this.selectPad=null)},Qg.prototype.beginPan=function(A,e){this._panStart.set(A,e),this._worldDimension=this.getWorldDimension(A,e)},Qg.prototype.processMouseDown=function(A){this.oldMouseX=A.clientX,this.oldMouseY=A.clientY;var e=this.cameraControl;this.intersectOfMouseDown=null,A.preventDefault();var t="";if(A.button===this.mouseButtons.ORBIT){if(jh.NoRotate)return;this.rotatePivot=e.calculatePivot(jh.RotatePivotMode,{x:A.clientX,y:A.clientY}),this.state=this.StateType.ROTATE,this._rotateStart.set(A.clientX,A.clientY),this._lastTrackingPoint=null,t=Gc.ORBIT}else if(A.button===this.mouseButtons.ZOOM){if(jh.NoZoom)return;this.state=this.StateType.DOLLY,this._dollyStart.set(A.clientX,A.clientY),t=Gc.ZOOM}else if(A.button===this.mouseButtons.PAN||A.button===this.mouseButtons.PAN2){if(jh.NoPan)return;this._panStart.set(A.clientX,A.clientY),this._worldDimension=e.getWorldDimension(A.clientX,A.clientY),this.state=this.StateType.PAN,t=Gc.PAN}this.dispatchEvent({type:Rc.ON_CONTROL_BEGIN,name:t,control:this.name})},Qg.prototype.processMouseMove=function(A){var e=this.cameraControl;switch(A.preventDefault(),this.state){case this.StateType.ROTATE:if(this._rotateEnd.set(A.clientX,A.clientY),this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart),0===this._rotateDelta.x&&0===this._rotateDelta.y)return;this._rotateStart.copy(this._rotateEnd),e.processRotate(this._rotateDelta,this.rotatePivot);break;case this.StateType.DOLLY:if(this._dollyEnd.set(A.clientX,A.clientY),this._dollyDelta.subVectors(this._dollyEnd,this._dollyStart),0===this._dollyDelta.x&&0===this._dollyDelta.y)return;this.cameraControl.adjustCameraForDolly(this._dollyDelta.y>0?this.zoomSpeed:1/this.zoomSpeed,null),this._dollyStart.copy(this._dollyEnd);break;case this.StateType.PAN:if(this._panEnd.set(A.clientX,A.clientY),this._panDelta.subVectors(this._panEnd,this._panStart),0===this._panDelta.x&&0===this._panDelta.y)return;this.cameraControl.panOnWorld(this._panStart,this._panEnd,this._pan,this._worldDimension),this.cameraControl.adjustCameraForPan(this._pan),this._panStart.copy(this._panEnd)}this.state!==this.StateType.NONE&&this.cameraControl.update(!0)},Qg.prototype.processMouseUp=function(A){if(this.state===this.StateType.NONE)return!1;this.intersectOfMouseDown=null;var e=this.cameraControl;this.oldMouseX===A.clientX&&this.oldMouseY===A.clientY||e.update(!0),this.state=this.StateType.NONE,this.rotatePivot=null,e.endOperation();var t="";return A.button===this.mouseButtons.ORBIT?t=Gc.ORBIT:A.button===this.mouseButtons.ZOOM?t=Gc.ZOOM:A.button!==this.mouseButtons.PAN&&A.button!==this.mouseButtons.PAN2||(t=Gc.PAN),this.dispatchEvent({type:Rc.ON_CONTROL_END,name:t,control:this.name}),!0},Qg.prototype.processMouseWheel=function(A){var e=this.cameraControl;if(!jh.NoZoom){A.preventDefault(),A.stopPropagation();var t=0;A.wheelDelta?t=A.wheelDelta:A.deltaY&&(t=40*-A.deltaY),Math.abs(t)>720&&(t=t>0?720:-720),t*=this.wheelZoomFactor,jh.ReverseWheelDirection&&(t*=-1),e.zoom(t,A.clientX,A.clientY),e.delayHandle(),this.dispatchEvent({type:Rc.ON_CONTROL_ZOOM})}},Qg.prototype.processKeyDown=function(A){if(!jh.NoKey&&!jh.NoPan){var e=this.cameraControl,t=null;vc.MergeComponent?(this.animationStarted||(this.animationStarted=!0,this._start()),t=!1):(t=!0,e.delayHandle()),this._moving=!0;var i=!1,o=this.movementSpeed*jh.MovementSpeedRate,n=this.keyPanSpeed*jh.MovementSpeedRate;switch(A.keyCode){case Ph:this.keyPanSpeed=e.defaultKeyPanSpeed,this.movementSpeed=e.defaultMovementSpeed;break;case Vh:this.keyPanSpeed*=1.1,this.movementSpeed*=1.1;break;case Gh:this.keyPanSpeed*=.9,this.minKeyPanSpeed>this.keyPanSpeed&&(this.keyPanSpeed=this.minKeyPanSpeed),this.movementSpeed*=.9,this.minMovementSpeed>this.movementSpeed&&(this.movementSpeed=this.minMovementSpeed);break;case Dh:e.pan(0,n),i=!0;break;case kh:e.pan(0,-n),i=!0;break;case Uh:e.processRotate({x:-10,y:0},this.rotatePivot),i=!0;break;case Rh:e.pan(n,0),i=!0;break;case Kh:e.processRotate({x:10,y:0},this.rotatePivot),i=!0;break;case Th:e.pan(-n,0),i=!0;break;case Fh:e.processRotate({x:0,y:-10},this.rotatePivot),i=!0;break;case Nh:e.moveStraight(o,!A.shiftKey),i=!0;break;case Qh:e.processRotate({x:0,y:10},this.rotatePivot),i=!0;break;case Lh:e.moveStraight(-o,!A.shiftKey),i=!0}i&&t&&e.update(!0)}},Qg.prototype.processKeyUp=function(A){if(!jh.NoKey&&!jh.NoPan)switch(A.keyCode){case qh:this.cameraControl.viewer.modelManager.sceneState.clearSelection(),this.pickHelper.lastPickedUserId=void 0,this.cameraControl.updateView(!0)}},Qg.prototype.processTouchstart=function(A){this.startPt.set(A.touches[0].clientX,A.touches[0].clientY),this.timeId&&clearTimeout(this.timeId);var e=this.cameraControl;switch(this.timeId=setTimeout(this.longTap,400),this.selectPad&&this.selectPad.hideOverlay(),A.touches.length){case 1:if(jh.NoRotate)return;this.rotatePivot=e.calculatePivot(jh.RotatePivotMode,{x:A.touches[0].clientX,y:A.touches[0].clientY}),this._rotateStart.set(A.touches[0].clientX,A.touches[0].clientY),this.state=this.StateType.ROTATE;break;case 2:if(!jh.NoZoom){var t=A.touches[0].clientX-A.touches[1].clientX,i=A.touches[0].clientY-A.touches[1].clientY;this._dollyStart.set(0,Math.sqrt(t*t+i*i))}if(!jh.NoPan)this._panStart.set(.5*(A.touches[0].clientX+A.touches[1].clientX),.5*(A.touches[0].clientY+A.touches[1].clientY));break;default:this.state=this.StateType.NONE}},Qg.prototype.processTouchmove=function(A){var e=this.cameraControl;switch(A.preventDefault(),A.touches.length){case 1:if(jh.NoRotate)return;this._rotateEnd.set(A.touches[0].clientX,A.touches[0].clientY),this._rotateDelta.subVectors(this._rotateStart,this._rotateEnd);var t=this.cameraControl.getClientSize(),i=2*Math.PI*this._rotateDelta.x/t.x*this.rotateSpeed,o=2*Math.PI*this._rotateDelta.y/t.y*this.rotateSpeed;e.handleRotation(i,o,this.rotatePivot),this._rotateStart.copy(this._rotateEnd);break;case 2:if(e.clearTouchRotateState(),!jh.NoZoom){var n=A.touches[0].clientX-A.touches[1].clientX,r=A.touches[0].clientY-A.touches[1].clientY,a=Math.sqrt(n*n+r*r);if(this._dollyEnd.set(0,a),this._dollyDelta.subVectors(this._dollyEnd,this._dollyStart),Math.abs(this._dollyDelta.y)>3){var s=0;this._dollyDelta.y>0?s=1/Math.pow(this.zoomSpeed,.5*this._dollyDelta.y):0>this._dollyDelta.y&&(s=Math.pow(this.zoomSpeed,.5*-this._dollyDelta.y)),this._dollyStart.copy(this._dollyEnd),e.touchDolly(.5*(A.touches[0].clientX+A.touches[1].clientX),.5*(A.touches[0].clientY+A.touches[1].clientY),s),this.state=this.StateType.DOLLY}}if(!jh.NoPan){var l=.5*(A.touches[0].clientX+A.touches[1].clientX),c=.5*(A.touches[0].clientY+A.touches[1].clientY);if(this._panEnd.set(l,c),this._panDelta.subVectors(this._panEnd,this._panStart),3>Math.abs(this._panDelta.x)&&3>Math.abs(this._panDelta.y))return;this._worldDimension=e.getWorldDimension(l,c),e.panOnWorld(this._panStart,this._panEnd,this._pan,this._worldDimension),e.adjustCameraForPan(this._pan),this._panStart.copy(this._panEnd),this.state=this.StateType.PAN}}e.touchUpdate()},Qg.prototype.processTouchend=function(A){this.timeId&&clearTimeout(this.timeId),this.longTapFlag&&(this.longTapFlag=!1,A.preventDefault());var e=this.cameraControl;switch(A.touches.length){case 0:this.state=this.StateType.NONE,e.touchEndHandler(A);break;case 1:if(jh.NoRotate)return;this._rotateStart.set(A.touches[0].clientX,A.touches[0].clientY),this.state=this.StateType.ROTATE}},Qg.prototype.processHover=function(A){this.pickHelper.handleMouseHover(A)},Qg.prototype.moveTo=function(A){if(void 0!==A){var e=this.cameraControl;if(!jh.NoKey&&!jh.NoPan){var t=this.movementSpeed*jh.MovementSpeedRate,i=this.keyPanSpeed*jh.MovementSpeedRate,o=qc;switch(A){case o.FORWARD:e.moveForward(t,!0);break;case o.BACK:e.moveBackward(t,!0);break;case o.LEFT:e.pan(i,0);break;case o.RIGHT:e.pan(-i,0);break;case o.UP:e.pan(0,i);break;case o.DOWN:e.pan(0,-i);break;default:A=o.NONE}A!==o.NONE&&e.update(!0,!0)}}},Qg.prototype._updateMove=function(){this._moving&&(this._moving=!1,this.cameraControl.update(!0))},Qg.prototype._animate=function(){this._reqid=requestAnimationFrame(this._animateBinded),this._updateMove()},Qg.prototype._start=function(){this._animate()},Qg.prototype._stop=function(){cancelAnimationFrame(this._reqid)},Qg.prototype.onExit=function(){vc.MergeComponent&&this.animationStarted&&(this._stop(),this.animationStarted=!1)};var Rg=function(A){Qg.call(this,Gc.ORBIT,A),this.mouseButtons={ORBIT:t.LEFT,PAN2:t.MIDDLE,PAN:t.RIGHT}};(Rg.prototype=Object.create(Qg.prototype)).constructor=Rg;var Tg=function(A){Qg.call(this,Gc.PAN,A),this.mouseButtons={ORBIT:t.RIGHT,PAN2:t.MIDDLE,PAN:t.LEFT}};(Tg.prototype=Object.create(Qg.prototype)).constructor=Tg;var kg=function(A){Rg.call(this,A,Gc.PICK)};(kg.prototype=Object.create(Rg.prototype)).constructor=kg,kg.prototype.processMouseUp=function(A){A.preventDefault();var e=1>=Math.abs(this.oldMouseX-A.clientX)&&1>=Math.abs(this.oldMouseY-A.clientY);A.button!==t.LEFT&&A.button!==t.RIGHT||e&&(this.pickHelper.click(A,this.intersectOfMouseDown),this.intersectOfMouseDown=null),e||A.button!==this.mouseButtons.ORBIT&&A.button!==this.mouseButtons.PAN||this.cameraControl.update(!0),this.intersectOfMouseDown=null,this.state=this.StateType.NONE;var i="";A.button===this.mouseButtons.ORBIT?i=Gc.ORBIT:A.button===this.mouseButtons.ZOOM?i=Gc.ZOOM:A.button!==this.mouseButtons.PAN&&A.button!==this.mouseButtons.PAN2||(i=Gc.PAN,e||this.dispatchEvent({type:Rc.ON_MOUSE_DRAGGED,event:A})),this.dispatchEvent({type:Rc.ON_CONTROL_END,name:i,Control:this.name})},kg.prototype.processMouseDoubleClick=function(A){A.button===t.LEFT&&this.pickHelper.doubleClick(A)};var Dg=function(A){this.control=A,this.cameraControl=A.cameraControl,this.dim=this.cameraControl.getContainerDimensions(),this.pad=null,this.padSize=96,this.startPt=new s,this.position=new s,this.callback=null,this.intersect=null,this.destroy=function(){this.control=null,this.cameraControl=null,this.dim=null,this.pad=null,this.startPt=null,this.position=null,this.callback=null,this.intersect=null},this.init=function(){window.addEventListener("resize",this.padInitBind,!1),this.pad=document.createElement("div"),this.padInit(),this.cameraControl.domElement.appendChild(this.pad),this.addEventListener()},this.addEventListener=function(){this.pad.addEventListener("touchstart",this.padOnTouchStartBind,!1),this.pad.addEventListener("touchmove",this.padOnTouchMoveBind,!1),this.pad.addEventListener("touchend",this.padOnTouchEndBind,!1)},this.padInit=function(){null!==this.pad&&(this.pad.style.backgroundImage="url(images/selectPad.png)",this.pad.style.backgroundSize="100%",this.pad.style.position="absolute",this.pad.style.width=this.padSize.toString()+"px",this.pad.style.height=this.padSize.toString()+"px",this.pad.style.zIndex="10",this.pad.style.display="none")},this.showOverlay=function(A){this.position=A,this.pad.style.left=this.position.x.toString()+"px",this.pad.style.top=(this.position.y-this.dim.top).toString()+"px",this.pad.style.display=""},this.hideOverlay=function(){this.pad.style.display="none"},this.pick=function(){var A=this.position.x,e=this.position.y,t=this.cameraControl,i=t.viewer.modelManager.sceneState,o=this,n=new s(A,e),r=t.getIntersectContext(n);t.intersector.pick(r,(function(A){if(i.clearSelection(),!A)return t.updateView(!0),void(o.intersect=null);var e=A.userId;t.viewer.getScene().intersectToWorld(A,t.viewer),i.addSelection([e]),o.intersect=A,t.updateView(!0)})),null!==o.intersect&&(o.intersect.cx=A,o.intersect.cy=e)},this.onTouchStart=function(A){1===A.touches.length&&(A.stopPropagation(),A.preventDefault(),this.startPt.set(A.touches[0].clientX,A.touches[0].clientY))},this.onTouchMove=function(A){if(1===A.touches.length){A.stopPropagation(),A.preventDefault();var e=A.touches[0].clientY-this.startPt.y;this.position.x+=A.touches[0].clientX-this.startPt.x,this.position.y+=e,this.pad.style.left=this.position.x.toString()+"px",this.pad.style.top=(this.position.y-this.dim.top).toString()+"px",this.startPt.set(A.touches[0].clientX,A.touches[0].clientY),this.pick(A)}},this.onTouchEnd=function(A){A.stopPropagation(),null!==this.callback?this.callback(this.intersect):console.log("selectPad click",this.intersect)},this.padInitBind=this.padInit.bind(this),this.padOnTouchStartBind=this.onTouchStart.bind(this),this.padOnTouchEndBind=this.onTouchEnd.bind(this),this.padOnTouchMoveBind=this.onTouchMove.bind(this),this.init()},Lg=function(A){Fg.call(this,Gc.WALK,A),this.mouseButtons={ORBIT:t.LEFT,PAN2:t.MIDDLE,PAN:t.RIGHT},this.pickHelper=new kp(A),this.lastMousePoint=new s,this._reqid=0,this._animateBinded=this._animate.bind(this),this._clock=new as,this.moveState={up:0,down:0,left:0,right:0,forward:0,back:0,pitchUp:0,pitchDown:0,yawLeft:0,yawRight:0,rollLeft:0,rollRight:0},this.startPt=new s,this.timeId=null,this.rotateSpeed=1,this._rotateStart=new s,this._rotateEnd=new s,this._rotateDelta=new s,this._dollyStart=new s,this._dollyEnd=new s,this._dollyDelta=new s,this._dollyCenter=new s,this.zoomSpeed=Math.pow(.95,.2),this._panStart=new s,this._panEnd=new s,this._panDelta=new s,this._pan=new y,this.selectPad=mh.isMobileDevice()?new Dg(this):null,this.moveVector=new y(0,0,0),this.rotationVector=new y(0,0,0),this.zoomDelta=0,this.rotateStart=new s,this.rotateEnd=new s,this.rotateDelta=new s,this.firstRotate=!0,this.dragLook=!0,this.lockHeightEnabled=!1,this.isLockHeight=!1,this.lockedHeight=0,this.pickEnabled=!0,this.mouseType=null;var e=A.viewer.getScene().getBoundingBoxWorld();this.defaultMovementSpeed=e?e.getSize(new y(0,0,0)).length()/10:1500,this.movementSpeed=this.defaultMovementSpeed,this.shiftSpeedup=!1,this.setFocuse=function(){var A=document.querySelector(".main-canvas");A&&A.focus&&A.focus()}};(Lg.prototype=Object.create(Fg.prototype)).constructor=Lg,Lg.prototype.destroy=function(){Fg.prototype.destroy.call(this),this.pickHelper.destroy(),this.pickHelper=null,this.selectPad&&(this.selectPad.destroy(),this.selectPad=null),this.timeId&&(clearTimeout(this.timeId),this.timeId=null),this._clock=null,this._animateBinded=null,this.mouseButtons=null,this.moveState=null,this.startPt=null,this.lastMousePoint=null,this.rotateStart=null,this.rotateEnd=null,this.rotateDelta=null,this._rotateStart=null,this._rotateEnd=null,this._rotateDelta=null,this._dollyStart=null,this._dollyEnd=null,this._dollyDelta=null,this._dollyCenter=null,this._panStart=null,this._panEnd=null,this._panDelta=null,this._pan=null,this.moveVector=null,this.rotationVector=null,this.rotateStart=null,this.rotateEnd=null,this.rotateDelta=null},Lg.prototype._animate=function(){this._reqid=requestAnimationFrame(this._animateBinded),this.updateWalkMove()},Lg.prototype._start=function(){this.moveState={up:0,down:0,left:0,right:0,forward:0,back:0,pitchUp:0,pitchDown:0,yawLeft:0,yawRight:0,rollLeft:0,rollRight:0},this._animate()},Lg.prototype._stop=function(){cancelAnimationFrame(this._reqid)},Lg.prototype._updateMovement=function(){this.moveVector.x=-this.moveState.left+this.moveState.right,this.moveVector.z=this.isLockHeight?0:-this.moveState.down+this.moveState.up,this.moveVector.y=-this.moveState.forward+this.moveState.back},Lg.prototype._updateRotation=function(){this.rotationVector.x=jh.LockAxisZ?0:-this.moveState.pitchDown+this.moveState.pitchUp,this.rotationVector.z=-this.moveState.yawRight+this.moveState.yawLeft,this.rotationVector.y=-this.moveState.rollRight+this.moveState.rollLeft},Lg.prototype._doRotate=function(A){vc.WalkingWithViewLock&&(A.y=0);var e=this.cameraControl.getClientSize(),t=e.y/2;this.moveState.yawLeft=A.x/(e.x/2),this.moveState.pitchDown=A.y/t,this._updateRotation()},Lg.prototype.processMouseDown=function(A){this.oldMouseX=A.clientX,this.oldMouseY=A.clientY;var e=this.cameraControl;if(A.button===this.mouseButtons.ORBIT){if(A.preventDefault(),A.stopPropagation(),this.mouseType=A.button,this.lastMousePoint.set(A.clientX,A.clientY),this.firstRotate=!1,A.button===this.mouseButtons.ORBIT){if(jh.NoRotate)return;this.rotateStart.set(A.clientX,A.clientY),this.state=this.StateType.ROTATE,this.dispatchEvent({type:Rc.ON_CONTROL_BEGIN,name:"look",control:this.name})}}else if(A.button===this.mouseButtons.PAN||A.button===this.mouseButtons.PAN2){if(jh.NoPan)return;this._panStart.set(A.clientX,A.clientY),this._worldDimension=e.getWorldDimension(A.clientX,A.clientY),this.state=this.StateType.PAN,this.dispatchEvent({type:Rc.ON_CONTROL_BEGIN,name:Gc.PAN,control:this.name})}},Lg.prototype.processMouseUp=function(A){return A.preventDefault(),A.stopPropagation(),A.button===this.mouseButtons.PAN&&this.setFocuse(),this.mouseType=null,this.pickEnabled&&(A.button===t.LEFT||A.button===t.RIGHT)&&2>Math.abs(this.lastMousePoint.x-A.clientX)&&2>Math.abs(this.lastMousePoint.y-A.clientY)?(this.state=this.StateType.NONE,void this.pickHelper.click(A)):(this.state===this.StateType.ROTATE&&(this.moveState.yawLeft=this.moveState.pitchDown=0,this.dispatchEvent({type:Rc.ON_CONTROL_END,name:"look",control:this.name})),this.state=this.StateType.NONE,!0)},Lg.prototype.processMouseMove=function(A){if(A.preventDefault(),this.dragLook&&this.state===this.StateType.ROTATE&&0===this.mouseType){if(this.rotateEnd.set(A.clientX,A.clientY),this.rotateDelta.subVectors(this.rotateEnd,this.rotateStart),0===this.rotateDelta.x&&0===this.rotateDelta.y)return;this.rotateStart.copy(this.rotateEnd),this._doRotate(this.rotateDelta)}else{switch(this.state){case this.StateType.DOLLY:if(this._dollyEnd.set(A.clientX,A.clientY),this._dollyDelta.subVectors(this._dollyEnd,this._dollyStart),0===this._dollyDelta.x&&0===this._dollyDelta.y)return;this.cameraControl.adjustCameraForDolly(this._dollyDelta.y>0?this.zoomSpeed:1/this.zoomSpeed,null),this._dollyStart.copy(this._dollyEnd);break;case this.StateType.PAN:if(this._panEnd.set(A.clientX,A.clientY),this._panDelta.subVectors(this._panEnd,this._panStart),0===this._panDelta.x&&0===this._panDelta.y)return;this.cameraControl.panOnWorld(this._panStart,this._panEnd,this._pan,this._worldDimension),this.cameraControl.adjustCameraForPan(this._pan),this._panStart.copy(this._panEnd)}this.state!==this.StateType.NONE&&this.cameraControl.update(!0)}},Lg.prototype.processTouchstart=function(A){this.startPt.set(A.touches[0].clientX,A.touches[0].clientY),this.timeId&&clearTimeout(this.timeId);switch(this.timeId=setTimeout(this.longTap,400),this.selectPad&&this.selectPad.hideOverlay(),A.touches.length){case 1:if(jh.NoRotate)return;this._rotateStart.set(A.touches[0].clientX,A.touches[0].clientY),this.state=this.StateType.ROTATE;break;case 2:if(!jh.NoZoom){var e=A.touches[0].clientX-A.touches[1].clientX,t=A.touches[0].clientY-A.touches[1].clientY;this._dollyStart.set(0,Math.sqrt(e*e+t*t))}if(!jh.NoPan)this._panStart.set(.5*(A.touches[0].clientX+A.touches[1].clientX),.5*(A.touches[0].clientY+A.touches[1].clientY));break;default:this.state=this.StateType.NONE}},Lg.prototype.processTouchmove=function(A){this.timeId&&clearTimeout(this.timeId);var e=this.cameraControl;switch(A.preventDefault(),A.touches.length){case 1:this.dragLook&&this.state===this.StateType.ROTATE&&(this._rotateEnd.set(A.touches[0].clientX,A.touches[0].clientY),this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart),this._rotateStart.copy(this._rotateEnd),this._doRotate(this._rotateDelta));break;case 2:if(e.clearTouchRotateState(),!jh.NoZoom){var t,i=A.touches[0].clientX-A.touches[1].clientX,o=A.touches[0].clientY-A.touches[1].clientY,n=Math.sqrt(i*i+o*o);if(this._dollyEnd.set(0,n),this._dollyDelta.subVectors(this._dollyEnd,this._dollyStart),Math.abs(this._dollyDelta.y)>3)this._dollyDelta.y>0?t=1/Math.pow(this.zoomSpeed,.5*this._dollyDelta.y):0>this._dollyDelta.y&&(t=Math.pow(this.zoomSpeed,.5*-this._dollyDelta.y)),this._dollyStart.copy(this._dollyEnd),e.touchDolly(.5*(A.touches[0].clientX+A.touches[1].clientX),.5*(A.touches[0].clientY+A.touches[1].clientY),t),this.state=this.StateType.DOLLY}if(!jh.NoPan){var r=.5*(A.touches[0].clientX+A.touches[1].clientX),a=.5*(A.touches[0].clientY+A.touches[1].clientY);if(this._panEnd.set(r,a),this._panDelta.subVectors(this._panEnd,this._panStart),3>Math.abs(this._panDelta.x)&&3>Math.abs(this._panDelta.y))return;this._worldDimension=e.getWorldDimension(r,a),e.panOnWorld(this._panStart,this._panEnd,this._pan,this._worldDimension),e.adjustCameraForPan(this._pan),this._panStart.copy(this._panEnd),this.state=this.StateType.PAN}}e.touchUpdate()},Lg.prototype.processTouchend=function(A){this.timeId&&clearTimeout(this.timeId),this.longTapFlag&&(this.longTapFlag=!1,A.preventDefault());var e=this.cameraControl;switch(A.touches.length){case 0:this.state=this.StateType.NONE,e.touchEndHandler(A);break;case 1:if(jh.NoRotate)return;this._rotateStart.set(A.touches[0].clientX,A.touches[0].clientY),this.state=this.StateType.ROTATE}},Lg.prototype.processHover=function(A){this.dragLook||(this.firstRotate&&(this.firstRotate=!1,this.rotateStart.set(A.clientX,A.clientY)),this.rotateEnd.set(A.clientX,A.clientY),this.rotateDelta.subVectors(this.rotateEnd,this.rotateStart),this.rotateStart.copy(this.rotateEnd),this._doRotate(this.rotateDelta))},Lg.prototype.processMouseWheel=function(A){var e=this.cameraControl;if(A.preventDefault(),A.stopPropagation(),!jh.NoZoom){var t=0;A.wheelDelta?t=A.wheelDelta:A.deltaY&&(t=40*-A.deltaY),Math.abs(t)>720&&(t=t>0?720:-720),t*=this.wheelZoomFactor,jh.ReverseWheelDirection&&(t*=-1),e.zoom(t,A.clientX,A.clientY),e.delayHandle(),this.dispatchEvent({type:Rc.ON_CONTROL_ZOOM})}},Lg.prototype.processKeyDown=function(A){if(!jh.NoKey&&!A.altKey){var e=qc.NONE;switch(A.key){case"0":this.movementSpeed=this.defaultMovementSpeed;break;case"=":case"+":this.movementSpeed*=1.1;break;case"-":case"——":this.movementSpeed*=.9,this.minMovementSpeed>this.movementSpeed&&(this.movementSpeed=this.minMovementSpeed);break;case"ArrowUp":case"w":case"W":e=qc.FORWARD,this.moveState.forward=1;break;case"ArrowDown":case"s":case"S":e=qc.BACK,this.moveState.back=1;break;case"ArrowLeft":case"a":case"A":e=qc.LEFT,this.moveState.left=1;break;case"ArrowRight":case"d":case"D":e=qc.RIGHT,this.moveState.right=1;break;case"q":case"Q":e=qc.UP,this.moveState.up=1;break;case"e":case"E":e=qc.DOWN,this.moveState.down=1;break;case"Shift":this.shiftSpeedup||(this.movementSpeed+=this.defaultMovementSpeed,this.shiftSpeedup=!0);break;case"Tab":return this.moveVector.set(0,0,0),this.moveState.forward=0,this.moveState.back=0,this.moveState.left=0,this.moveState.right=0,this.moveState.up=0,void(this.moveState.down=0)}this._updateMovement(),this._updateRotation(),e!==qc.NONE&&this.dispatchEvent({type:Rc.ON_CONTROL_KEYDOWN,event:A,direction:e,control:this.name})}},Lg.prototype.processKeyUp=function(A){if(!jh.NoKey){var e=qc.NONE;switch(A.key){case"ArrowUp":case"W":case"w":e=qc.FORWARD,this.moveState.forward=0;break;case"ArrowDown":case"s":case"S":e=qc.BACK,this.moveState.back=0;break;case"ArrowLeft":case"a":case"A":e=qc.LEFT,this.moveState.left=0;break;case"ArrowRight":case"d":case"D":e=qc.RIGHT,this.moveState.right=0;break;case"q":case"Q":e=qc.UP,this.moveState.up=0;break;case"e":case"E":e=qc.DOWN,this.moveState.down=0;break;case"Shift":this.shiftSpeedup&&(this.movementSpeed-=this.defaultMovementSpeed,this.shiftSpeedup=!1);break;default:e=qc.NONE}this._updateMovement(),this._updateRotation(),e!==qc.NONE&&this.dispatchEvent({type:Rc.ON_CONTROL_KEYUP,event:A,direction:e,control:this.name})}},Lg.prototype.updateWalkMove=function(){var A=this._clock.getDelta(),e=this.cameraControl,t=e.camera.position.z;if(0!==this.moveVector.x||0!==this.moveVector.y||0!==this.moveVector.z||0!==this.rotationVector.x||0!==this.rotationVector.y||0!==this.rotationVector.z||0!==this.zoomDelta){var i=this.movementSpeed*jh.WalkSpeedRate*A;if(!0===vc.WalkingWithGravity&&(this.moveVector.z=0,e.computeManHeight(),e.computeGravity()),e.dirtyCamera(!0),0!==this.zoomDelta)e.zoomCameraForWalk(1+this.zoomDelta*A),this.zoomDelta=0;0!==i&&e.translateCameraForWalk(this.moveVector,i),e.rotateCameraForWalk(this.rotationVector,this.dragLook?1:2),e.flyOnWorld(!1),this.moveState.pitchUp=0,this.moveState.pitchDown=0,this.moveState.yawLeft=0,this.moveState.yawRight=0,this.moveState.rollLeft=0,this.moveState.rollRight=0,t!==e.camera.position.z&&e.viewer.modelManager.dispatchEvent({type:Rc.ON_CAMERA_HEIGHT_CHANGED,cameraPosition:e.camera.position.clone()})}},Lg.prototype.onEnter=function(){var A=this.cameraControl.getCamera();A.isPerspective||(console.log("Current camera is Orthographic"),A.toPerspective()),this._start()},Lg.prototype.onExit=function(){this._stop()},Lg.prototype.rotateTo=function(A){this._doRotate(A)},Lg.prototype.moveTo=function(A,e,t){if(void 0===t&&(t=!0),void 0===e&&(e=1),t)switch(A){case qc.FORWARD:this.moveState.forward=e;break;case qc.BACK:this.moveState.back=e;break;case qc.LEFT:this.moveState.left=e;break;case qc.RIGHT:this.moveState.right=e;break;case qc.UP:this.moveState.up=e;break;case qc.DOWN:this.moveState.down=e}else switch(A){case qc.FORWARD:this.moveState.forward=0;break;case qc.BACK:this.moveState.back=0;break;case qc.LEFT:this.moveState.left=0;break;case qc.RIGHT:this.moveState.right=0;break;case qc.UP:this.moveState.up=0;break;case qc.DOWN:this.moveState.down=0}this._updateMovement()},Lg.prototype.setHeightLocked=function(A){this.lockHeightEnabled&&this.isLockHeight!==A&&(this.isLockHeight=A)},Lg.prototype.setDragLook=function(A){this.dragLook!==A&&(this.firstRotate=!0,this.dragLook=A)},Lg.prototype.processPointerLockEnter=function(){this.pointerLock=!0},Lg.prototype.processPointerLockExit=function(){this.pointerLock=!1},Lg.prototype.processMovement=function(A){this.rotateDelta.set(A.movementX||A.mozMovementX||A.webkitMovementX||0,A.movementY||A.mozMovementY||A.webkitMovementY||0),this._doRotate(this.rotateDelta)};var Ng=function(A){Qg.call(this,Gc.ZOOM,A),this.mouseButtons={ZOOM:t.LEFT,PAN2:t.MIDDLE,PAN:t.RIGHT}};(Ng.prototype=Object.create(Qg.prototype)).constructor=Ng;var Og=function(){this.control=null,this.controls={},this.tools=[],this.domElement=null,this.enabled=!0,this.isUpdateRenderList=!0;var A=!1,e=this;function t(t){if(e.enabled){for(var i=e.tools,o=i.length-1;o>=0;o-=1)if(i[o].onEvent(t)){switch(t.type){case"mouseup":A=!1}return}switch(t.type){case"touchmove":e.control.processTouchmove(t);break;case"touchstart":e.control.processTouchstart(t);break;case"touchend":e.control.processTouchend(t);break;case"keydown":e.control.processKeyDown(t);break;case"keyup":e.control.processKeyUp(t);break;case"wheel":case"mousewheel":case"DOMMouseScroll":e.cameraChange=!0,e.control.processMouseWheel(t);break;case"mousedown":!function(t){e.setFocuse(),A=!0,e.isUpdateRenderList=!1,e.control?e.control.processMouseDown(t):Bh.warn("control is null")}(t);break;case"mousemove":!function(t){e.pointerLock?e.control.processMovement(t):A?(e.isUpdateRenderList=!1,e.cameraChange=!0,e.control.processMouseMove(t)):e.control.processHover(t)}(t);break;case"mouseup":!function(t){e.isUpdateRenderList=!0,A&&(e.control.processMouseUp(t),A=!1)}(t);break;case"dblclick":e.control.processMouseDoubleClick(t)}}else e.cameraChange=!1}function i(A){A.preventDefault()}function o(A){document.pointerLockElement===e.domElement||document.mozPointerLockElement===e.domElement||document.webkitPointerLockElement===e.domElement?(e.pointerLock=!0,e.control.processPointerLockEnter(A)):(e.pointerLock=!1,e.control.processPointerLockExit(A),e.domElement.focus(),e.control.dispatchEvent({type:Rc.ON_POINTERLOCK_EXIST,name:e.control.getName()}))}function n(A){e.pointerLock=!1,e.control.processPointerLockExit(A),e.control.dispatchEvent({type:Rc.ON_POINTERLOCK_EXIST,name:e.control.getName()})}this.setFocuse=function(){if(e.domElement){var A=e.domElement.querySelector(".main-canvas");A&&A.focus&&A.focus()}},this.setFocus=this.setFocuse,this.getCameraControl=function(){return this.cameraControl},this.registerDomEventListeners=function(A){this.domElement=A,A.addEventListener("contextmenu",i,!1),A.addEventListener("mousedown",t,!1),A.addEventListener("mousewheel",t,!1),A.addEventListener("DOMMouseScroll",t,!1),A.addEventListener("wheel",t,!1),A.addEventListener("dblclick",t,!1),window.addEventListener("mousemove",t,!1),window.addEventListener("mouseup",t,!1),A.addEventListener("touchstart",t,!1),A.addEventListener("touchend",t,!1),A.addEventListener("touchmove",t,!1),window.addEventListener("touchmove",(function(A){}),!1),A.addEventListener("keydown",t,!1),window.addEventListener("keyup",t,!1),document.addEventListener("pointerlockchange",o,!1),document.addEventListener("mozpointerlockchange",o,!1),document.addEventListener("webkitpointerlockchange",o,!1),document.addEventListener("pointerlockerror",n,!1),document.addEventListener("mozpointerlockerror",n,!1),document.addEventListener("webkitpointerlockerror",n,!1),this.setFocuse()},this.unregisterDomEventListeners=function(A){A.removeEventListener("contextmenu",i,!1),A.removeEventListener("mousedown",t,!1),A.removeEventListener("mousewheel",t,!1),A.removeEventListener("DOMMouseScroll",t,!1),A.removeEventListener("dblclick",t,!1),window.removeEventListener("mousemove",t,!1),window.removeEventListener("mouseup",t,!1),A.removeEventListener("touchstart",t,!1),A.removeEventListener("touchend",t,!1),A.removeEventListener("touchmove",t,!1),A.removeEventListener("keydown",t,!1),window.removeEventListener("keyup",t,!1),document.removeEventListener("pointerlockchange",o,!1),document.removeEventListener("mozpointerlockchange",o,!1),document.removeEventListener("webkitpointerlockchange",o,!1),document.removeEventListener("pointerlockerror",n,!1),document.removeEventListener("mozpointerlockerror",n,!1),document.removeEventListener("webkitpointerlockerror",n,!1)}};Og.prototype={constructor:Og,destroy:function(){for(var A in this.control=null,this.controls){this.controls[A].destroy()}this.controls={};for(var e=0,t=this.tools.length;t>e;e+=1)this.tools[e].destroy();this.tools=null,this.unregisterDomEventListeners(this.domElement),this.domElement=null},getCurrentControlName:function(){return this.control?this.control.name:""},_getControlByName:function(A,e){var t=this.controls[e];if(t)return t;var i=Gc;this.viewer=A,this.cameraControl=A.cameraControl;var o=A.cameraControl;switch(e){case i.ORBIT:t=new Rg(o);break;case i.PICK:t=new kg(o);break;case i.PAN:t=new Tg(o);break;case i.FLY:t=new Kg(o);break;case i.WALK:t=new Lg(o);break;case i.ZOOM:t=new Ng(o);break;default:t=null,Bh.error("invalid control name")}return t&&(t.name=e,this.controls[e]=t),t},getCurrentControlMode:function(){return this.control},getCurrentControl:function(){return this.control},setControlMode:function(A,e){var t=this._getControlByName(A,e);t&&this.control!==t&&(null!==this.control&&(this.control.dispatchEvent({type:Rc.ON_CONTROL_EXIST,name:this.control.getName()}),this.control.onExit()),this.control=t,this.control.onEnter(),this.control.dispatchEvent({type:Rc.ON_CONTROL_ENTER,name:this.control.getName()}))},getToolByName:function(A){for(var e=this.tools.length,t=0;e>t;t+=1)if(this.tools[t].name===A)return this.tools[t]},enableTool:function(A,e){for(var t=Pc,i=this.tools,o=0,n=i.length;n>o;o+=1)if(i[o].name===e)return;var r=null;switch(e){case t.PICK_BY_RECT:r=new bg(A);break;case t.ZOOM_BY_RECT:r=new Ug(A);break;case t.CLIP_BY_BOX:r=new vp(A);break;case t.CLIP_FILL:r=new Sp(A);break;case t.PICK_BY_MEASURE:r=new Eg(A);break;case t.COMPONENT_TRANSFORM:r=new Ip(A.getScene(),A.camera,A.domElement)}r&&i.push(r)},disableTool:function(A){for(var e=this.tools,t=0,i=e.length;i>t;t+=1)if(e[t].name===A){e[t].onExit(),this.dispatchEvent({type:Rc.ON_CONTROL_EXIST,name:A}),e.splice(t,1);break}},setInteractiveState:function(A){this.enabled=A},requestPointerLock:function(){this.control instanceof Lg&&(this.domElement.requestPointerLock=this.domElement.requestPointerLock||this.domElement.mozRequestPointerLock||this.domElement.webkitRequestPointerLock,this.domElement.requestPointerLock())}},Object.assign(Og.prototype,Ld.prototype);var Vg=function(){this.className="FilterAction"};Vg.prototype.getClassName=function(){return this.className},Vg.prototype.applyFilter=function(A){};var Gg=function(){Vg.call(this),this.className="IdsFilterAction",this.ids=[]};(Gg.prototype=Object.create(Vg.prototype)).arrayToMap=function(A){for(var e={},t=0;A.length>t;t+=1){var i=A[t];e[i]=i}return e},Gg.prototype.constructor=Gg,Gg.prototype.setIds=function(A){this.ids=A};var Pg=function(A,e){Gg.call(this),this.className="VisibleIdsFA",this.flag=A,this.isVisible=e};(Pg.prototype=Object.create(Gg.prototype)).constructor=Pg,Pg.prototype.applyFilter=function(A){Array.isArray(this.ids)?(A.setVisible(this.ids,this.isVisible,this.flag),A.calculateVisibleComponentsBbox()):Bh.warn("Ids should be type of array.")};var qg=function(A,e){Gg.call(this),this.className="OverrideIdsFA",this.flag=A,this.material=e};(qg.prototype=Object.create(Gg.prototype)).constructor=qg,qg.prototype.applyFilter=function(A){Array.isArray(this.ids)?A.setMaterial(this.ids,this.material,this.flag):Bh.warn("Ids should be type of array.")};var jg=function(A,e){Gg.call(this),this.className="WireframeIdsFA",this.flag=A,this.material=e};(jg.prototype=Object.create(Gg.prototype)).constructor=jg,jg.prototype.applyFilter=function(A){Array.isArray(this.ids)?A.setMaterial(this.ids,this.material,this.flag):Bh.warn("Ids should be type of array.")};var Hg=function(A){Gg.call(this),this.className="IsolateIdsFA",this.isolateHide=A};(Hg.prototype=Object.create(Gg.prototype)).constructor=Hg,Hg.prototype.applyFilter=function(A){Array.isArray(this.ids)?(A.clearIsolates(),this.isolateHide?(A.setIsolateHide(this.ids,!0,!1),A.calculateVisibleComponentsBbox()):A.setIsolateTransparent(this.ids,!0,!1)):Bh.warn("Ids should be type of array.")};var Yg=function(A,e){Gg.call(this),this.className="TransparentIdsFA",this.flag=A,this.isOpaque=e};(Yg.prototype=Object.create(Gg.prototype)).constructor=Yg,Yg.prototype.applyFilter=function(A){Array.isArray(this.ids)?A.setTransparent(this.ids,!this.isOpaque,this.flag):Bh.warn("Ids should be type of array.")};var Wg=function(){Vg.call(this),this.className="ConditionFilterAction",this.conditions=null};(Wg.prototype=Object.create(Vg.prototype)).constructor=Wg;var Jg=function(A,e){Wg.call(this),this.className="VisibleConditionFA",this.flag=A,this.isVisible=e};(Jg.prototype=Object.create(Wg.prototype)).constructor=Jg,Jg.prototype.applyFilter=function(A){var e=this;Array.isArray(this.conditions)?(A.matchConditions(this.conditions,(function(t,i){e.flag===i&&(A.setVisible(t,e.isVisible),t=null)})),A.calculateVisibleComponentsBbox()):Bh.warn("Conditions should be type of array.")};var zg=function(A,e){Wg.call(this),this.className="OverrideConditionFA",this.flag=A,this.material=e};(zg.prototype=Object.create(Wg.prototype)).constructor=zg,zg.prototype.applyFilter=function(A,e){var t=this;Array.isArray(this.conditions)?A.matchConditions(this.conditions,(function(e,i){t.flag===i&&(A.setMaterial(e,t.material),e=null)})):Bh.warn("Conditions should be type of array.")};var Zg=function(A,e){Wg.call(this),this.className="TransparentConditionFA",this.flag=A,this.isOpaque=e};(Zg.prototype=Object.create(Wg.prototype)).constructor=Zg,Zg.prototype.applyFilter=function(A){var e=this;Array.isArray(this.conditions)?A.matchConditions(this.conditions,(function(t,i){e.flag===i&&(A.setTransparent(t,!e.isOpaque),t=null)})):Bh.warn("Conditions should be type of array.")};var Xg=function(A){Wg.call(this),this.className="IsolateConditionFA",this.isolateHide=A};(Xg.prototype=Object.create(Wg.prototype)).constructor=Xg,Xg.prototype.applyFilter=function(A){A.clearIsolates();var e=this.isolateHide;Array.isArray(this.conditions)?A.matchConditions(this.conditions,(function(t,i){!0!==i?(e?(A.setIsolateHide(t,!i),A.calculateVisibleComponentsBbox()):A.setIsolateTransparent(t,!i),t=null):t=null})):Bh.warn("Conditions should be type of array.")};var _g=function(A){this._activeFilterList=[],this._filterResultModes={},this._defaultReturnValue=A,this._filterPriority=null};_g.prototype.setFilterMode=function(A){this._filterResultModes=A},_g.prototype.setFilterPriority=function(A){this._filterPriority=A},_g.prototype.addBaseFilter=function(A){var e=this._activeFilterList,t=e.indexOf(A);if(null===this._filterPriority)-1===t?e.push(A):t!==e.length-1&&(e.splice(t,1),e.push(A));else if(0===e.length)e.push(A);else{-1!==t&&t!==e.length-1&&e.splice(t,1);for(var i=this._filterPriority[A.getType()],o=0,n=e.length;n>o;o+=1)if(this._filterPriority[e[o].getType()]>i){e.splice(o,0,A);break}o===n&&e.push(A)}},_g.prototype.removeBaseFilter=function(A){var e=this._activeFilterList.indexOf(A);-1!==e&&this._activeFilterList.splice(e,1)},_g.prototype.isEmpty=function(){return 0===this._activeFilterList.length},_g.prototype.hasFilterNotIn=function(A){for(var e=this._activeFilterList,t=e.length-1;t>=0;t-=1){if(void 0===A._filterResultModes[e[t].getType()])return!0}return!1},_g.prototype.apply=function(A){for(var e=Jc,t=null,i=this._activeFilterList.length-1;i>=0;i-=1)switch(this._filterResultModes[(t=this._activeFilterList[i]).getType()]){case e.MATCH_RETURN_TRUE:if(t.match(A))return!0;break;case e.MATCH_RETURN_FALSE:if(t.match(A))return!1;break;case e.NOMATCH_RETURN_TRUE:if(!t.match(A))return!0;break;case e.NOMATCH_RETURN_FALSE:if(!t.match(A))return!1;break;default:return!1}return this._defaultReturnValue},_g.prototype.getApplyFilterId=function(A){for(var e=Jc,t=null,i=this._activeFilterList.length-1;i>=0;i-=1)switch(this._filterResultModes[(t=this._activeFilterList[i]).getType()]){case e.MATCH_RETURN_TRUE:case e.MATCH_RETURN_FALSE:if(t.match(A))return t.getType();break;case e.NOMATCH_RETURN_TRUE:case e.NOMATCH_RETURN_FALSE:if(!t.match(A))return t.getType();break;default:return-1}return-1},Math.log2=Math.log2||function(A){return Math.log(A)/Math.LN2},"function"!=typeof String.prototype.startsWith&&(String.prototype.startsWith=function(A){return this.slice(0,A.length)===A}),Array.prototype.remove||Object.defineProperty(Array.prototype,"remove",{enumerable:!1,value:function(A){var e=this.indexOf(A);e>-1&&this.splice(e,1)}}),"undefined"!=typeof window&&mh.isIE11()&&function(){function A(A,e){e=e||{bubbles:!1,cancelable:!1,detail:void 0};var t=document.createEvent("CustomEvent");return t.initCustomEvent(A,e.bubbles,e.cancelable,e.detail),t}A.prototype=window.CustomEvent.prototype,window.CustomEvent=A}(),"function"!=typeof String.prototype.startsWith&&(String.prototype.startsWith=function(A){return this.slice(0,A.length)===A}),"function"!=typeof String.prototype.endsWith&&(String.prototype.endsWith=function(A){return-1!==this.indexOf(A,this.length-A.length)}),"undefined"!=typeof window&&(window.BlobBuilder=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder),Number.isInteger=Number.isInteger||function(A){return"number"==typeof A&&isFinite(A)&&Math.floor(A)===A},String.prototype.repeat=String.prototype.repeat||function(A){if(1>A)return"";for(var e="",t=this.valueOf();A>1;)1&A&&(e+=t),A>>=1,t+=t;return e+t},Array.prototype.fill||Object.defineProperty(Array.prototype,"fill",{enumerable:!1,value:function(A,e,t){t=void 0===t?this.length:t;for(var i=e=void 0===e?0:e;t>i;i+=1)this[i]=A}}),Array.prototype.find||Object.defineProperty(Array.prototype,"find",{enumerable:!1,value:function(A,e){for(var t=this.length,i=0;t>i;i+=1){var o=this[i];if(A.call(e,o,i,this))return o}}}),Array.prototype.hasValue||Object.defineProperty(Array.prototype,"hasValue",{enumerable:!1,value:function(A){return this.indexOf(A)>-1}}),"function"!=typeof Object.assign&&Object.defineProperty(Object,"assign",{value:function(A,e){if(null==A)throw new TypeError("Cannot convert undefined or null to object");for(var t=Object(A),i=1;arguments.length>i;i+=1){var o=arguments[i];if(null!=o)for(var n in o)Object.prototype.hasOwnProperty.call(o,n)&&(t[n]=o[n])}return t},writable:!0,configurable:!0}),ArrayBuffer.prototype.slice||(ArrayBuffer.prototype.slice=function(A,e){if(!e||e>this.byteLength?e=this.byteLength:0>e&&0>(e=this.byteLength+e)&&(e=0),0>A&&0>(A=this.byteLength+A)&&(A=0),A>=e)return new ArrayBuffer;for(var t=e-A,i=new Uint8Array(this,A,t),o=new Uint8Array(t),n=0;t>n;n+=1)o[n]=i[n];return o.buffer}),Float32Array.prototype.slice||(Float32Array.prototype.slice=Float32Array.prototype.subarray),Uint32Array.prototype.slice||(Uint32Array.prototype.slice=Uint32Array.prototype.subarray),Int32Array.prototype.slice||(Int32Array.prototype.slice=Int32Array.prototype.subarray),Int16Array.prototype.slice||(Int16Array.prototype.slice=Int16Array.prototype.subarray);var $g,Au="function"==typeof Symbol&&"symbol"===lc(Symbol.iterator)?function(A){return lc(A)}:function(A){return A&&"function"==typeof Symbol&&A.constructor===Symbol&&A!==Symbol.prototype?"symbol":lc(A)},eu=function(){function A(A,e){for(var t=0;e.length>t;t+=1){var i=e[t];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(A,i.key,i)}}return function(e,t,i){return t&&A(e.prototype,t),i&&A(e,i),e}}();HTMLElement.prototype.tap=function(A){var e=0;this.addEventListener("touchstart",(function(A){e=Date.now()})),this.addEventListener("touchend",(function(t){200>Date.now()-e&&A(t)}))},(Boolean(window.ActiveXObject)||"ActiveXObject"in window)&&(HTMLElement.prototype.remove=function(){var A=this.parentNode||this.parentElement;A&&A.removeChild(this)},window.Element&&(($g=Element.prototype).matches=$g.matches||$g.matchesSelector||$g.webkitMatchesSelector||$g.msMatchesSelector||function(A){for(var e=(this.parentNode||this.document).querySelectorAll(A),t=-1;e[t+=1]&&e[t]!==this;);return Boolean(e[t])}),window.Element&&function(A){A.closest=A.closest||function(A){for(var e=this;e.matches&&!e.matches(A);)e=e.parentNode;return e.matches?e:null}}(Element.prototype)),SVGElement.prototype.getClass=HTMLElement.prototype.getClass=function(A){return this.getAttribute("class")},SVGElement.prototype.hasClass=HTMLElement.prototype.hasClass=function(A){var e=this.getClass();return!!e&&(e&&e.split(" ")).indexOf(A)>-1},SVGElement.prototype.addClass=HTMLElement.prototype.addClass=function(A){var e=this.getClass(),t=e&&e.split(" ");return e?-1===t.indexOf(A)&&(t.push(A),e=t.join(" "),this.setAttribute("class",String(e))):this.setAttribute("class",String(A)),this},SVGElement.prototype.removeClass=HTMLElement.prototype.removeClass=function(A){if(!this.hasClass(A))return this;var e=this.getClass().replace(A,"").trim();return e?this.setAttribute("class",String(e)):this.removeAttribute("class"),this},SVGElement.prototype.toggleClass=HTMLElement.prototype.toggleClass=function(A,e){this.getClass();var t=this.hasClass(A);return null!=e?(e&&!t&&this.addClass(A),e||this.removeClass(A)):t?this.removeClass(A):this.addClass(A),!t},Array.prototype.getObjectByAttribute||Object.defineProperty(Array.prototype,"getObjectByAttribute",{enumerable:!1,value:function(A,e){for(var t=this.length,i=0;t>i;i+=1)if(this[i][A]===e)return this[i];return!1}}),Array.prototype.removeObjectByAttribute||Object.defineProperty(Array.prototype,"removeObjectByAttribute",{enumerable:!1,value:function(A,e){for(var t=this,i=t.length,o=0;i>o;o+=1)if(t[o][A]===e)return t=t.splice(o,1);return!1}}),Array.prototype.getAllObjectByAttribute||Object.defineProperty(Array.prototype,"getAllObjectByAttribute",{enumerable:!1,value:function(A,e){for(var t=this.length,i=0,o=[];t>i;i+=1)this[i][A]===e&&o.push(this[i]);return o}}),Array.prototype.removeByValue||Object.defineProperty(Array.prototype,"removeByValue",{enumerable:!1,value:function(A){for(var e=this.length-1;e>=0;e-=1)this[e]===A&&this.splice(e,1);return this}}),Array.prototype.insert||Object.defineProperty(Array.prototype,"insert",{enumerable:!1,value:function(A,e){return this.splice(A,0,e),this}}),SVGElement.prototype.setCss=HTMLElement.prototype.setCss=function(A){if(A)for(var e in A)this.style[e]=A[e]},SVGElement.prototype.getCss=HTMLElement.prototype.getCss=function(){return this.style};var tu=function(A,e){this._type=A,this._name=e,this._enabled=!1,this._items={},this._relatedCompoundFilterList=[]};tu.prototype.getType=function(){return this._type},tu.prototype.getName=function(){return this._name},tu.prototype.get=function(){return this._items},tu.prototype.getAll=function(){return this._items},tu.prototype.clearAll=function(){this._items={},this._enabled&&(this._enabled=!1,this.enableStateChanged())},tu.prototype.clear=function(){this.clearAll()},tu.prototype.isEmpty=function(){return!this._enabled},tu.prototype.forceEnable=function(){this._enabled||(this._enabled=!0,this.enableStateChanged())},tu.prototype.setByData=function(A){!function(A){if(null===A)return!0;if("object"!==(void 0===A?"undefined":Au(A)))return!0;for(var e in A)if(A.hasOwnProperty(e))return!1;return!0}(A)?(this._items=A,this._enabled||(this._enabled=!0,this.enableStateChanged())):(this._items={},this._enabled&&(this._enabled=!1,this.enableStateChanged()))},tu.prototype.match=function(A){return!1},tu.prototype.registerToCompoundFilter=function(A){this._relatedCompoundFilterList.push(A)},tu.prototype.enableStateChanged=function(){for(var A=0,e=this._relatedCompoundFilterList.length;e>A;A+=1)this._enabled?this._relatedCompoundFilterList[A].addBaseFilter(this):this._relatedCompoundFilterList[A].removeBaseFilter(this)};var iu=function(A,e){tu.call(this,A,e)};(iu.prototype=Object.create(tu.prototype)).constructor=iu,iu.prototype.match=function(A){var e=A.userData;return!e||function(A,e){for(var t=!1,i=0,o=A.length;o>i;i+=1){t=!0;var n=A[i];for(var r in n){if(!Array.isArray(n[r])&&e[r]!==n[r]){t=!1;break}if(Array.isArray(n[r])&&-1===n[r].indexOf(e[r])){t=!1;break}}if(t)return!0}return!1}(this._items,e)};var ou=function(A,e){tu.call(this,A,e)};(ou.prototype=Object.create(tu.prototype)).constructor=ou,ou.prototype.add=function(A){var e=this._items;if(A&&A.length>0){for(var t=0,i=A.length;i>t;t+=1)e[A[t]]=!0;this._enabled||(this._enabled=!0,this.enableStateChanged())}},ou.prototype.remove=function(A){var e=this._items;if(A&&A.length>0){for(var t=0,i=A.length;i>t;t+=1){var o=A[t];e.hasOwnProperty(o)&&delete e[o]}0===Object.keys(e).length&&this._enabled&&(this._enabled=!1,this.enableStateChanged())}};var nu=function(A,e){ou.call(this,A,e)};(nu.prototype=Object.create(ou.prototype)).constructor=nu,nu.prototype.match=function(A){var e=A.name;if(e){var t=e.indexOf(".");if(-1!==t){var i=e.substring(0,t);return!!this._items[i]}}var o=A.userData;if(o&&(i=o.sceneId))return!!this._items[i];return!1};var ru=function(A,e){ou.call(this,A,e)};(ru.prototype=Object.create(ou.prototype)).constructor=ru,ru.prototype.match=function(A){return!!this._items[A.name]};var au=function(){this.defaultWireframeColor={color:new LA(0,0,0),opacity:.4},this.wireframeMaterial=new jA(this.defaultWireframeColor),!1===vc.TranslucentDepthDisabled&&(this.wireframeMaterial.transparent=!0),this.instanceWireframeMaterial=Kd.createInstanceMaterial(Kd.getMaterialParameters(this.wireframeMaterial)),!1===vc.TranslucentDepthDisabled&&(this.instanceWireframeMaterial.transparent=!0),this.wireframeGeometryMap={}};au.prototype.destroy=function(){this.wireframeMaterial.dispose(),this.wireframeMaterial=null,this.instanceWireframeMaterial.destroy(),this.instanceWireframeMaterial=null,this.wireframeGeometryMap=null,this.defaultWireframeColor.color=null,this.defaultWireframeColor=null},au.prototype.setWireframeColor=function(A,e){this.wireframeMaterial.color=A,this.wireframeMaterial.opacity=e,this.wireframeMaterial.transparent=1!==e,this.instanceWireframeMaterial.color=A,this.instanceWireframeMaterial.opacity=e,this.instanceWireframeMaterial.transparent=1!==e},au.prototype.getWireframeColor=function(){var A=this.wireframeMaterial.color.clone();return A.opacity=this.wireframeMaterial.opacity,A},au.prototype.restoreWireframeColor=function(){var A=this.defaultWireframeColor;this.setWireframeColor(A.color,A.opacity)};var su=function(){new au;var A=[{name:"scene",param:{name:"scene",color:8947848,opacity:.4,transparent:!0,side:2}},{name:"darkRed",param:{name:"darkRed",color:10496040,opacity:1,transparent:!1,side:2}},{name:"lightBlue",param:{name:"lightBlue",color:1275840,opacity:1,transparent:!1,side:2}},{name:"black",param:{name:"black",color:0,opacity:.3,transparent:!0,side:2}},{name:"add",param:{name:"add",color:65280,opacity:1,transparent:!0,side:2}},{name:"delete",param:{name:"delete",color:16711680,opacity:.5,transparent:!0,side:2}},{name:"beforeEdit",param:{name:"beforeEdit",color:16432389,opacity:.5,transparent:!0,side:2}},{name:"afterEdit",param:{name:"afterEdit",color:16432389,opacity:1,transparent:!0,side:2}}],e={};e.selection=Kd.createHighlightMaterial(),e.selection.name="selection";for(var t=0,i=A.length;i>t;t+=1){var o=A[t],n=o.name;e[n]=Kd.createStandardMaterial(o.param),e[n].createByBos=!0}e.red=e.delete,e.green=e.add,e.yellow=e.beforeEdit,e.blue=e.selection;var r={color:8947848,opacity:.2,transparent:!0,side:2},a=Kd.createStandardMaterial(r);a.name="isolate";var s={color:8947848,opacity:.2,transparent:!0,side:2},l=Kd.createStandardMaterial(s);l.name="looming";var c={color:0,opacity:1,transparent:!1,wireframe:!0,side:2},h=Kd.createStandardMaterial(c);h.name="wireframe",e.wireframe=h;var d={color:15293,side:2},p=Kd.createStandardMaterial(d);for(var g in p.name="selected",this.getDefaultMaterialName=function(){return"lightBlue"},this.get=function(A){return e[A]},this.getAll=function(){return e},this.add=function(A){var t,i=null,o={};return A&&A.hasOwnProperty("color")&&(o.color=A.color,o.side=2,A.hasOwnProperty("opacity")&&(o.opacity=A.opacity,o.transparent=1!==A.opacity)),t=this._getMaterialName(A),(i=e[t])||(o.name=t,i=Kd.createStandardMaterial(o),e[t]=i,e[t].createByBos=!0),t},this.remove=function(A){var t;t=this._getMaterialName(A),e[t]&&delete e[t]},this.has=function(A){return Boolean(e[A])},this.getMaterialNameByColor=function(A){var t;return t=this._getMaterialName(A),e[t]?t:this.add(A)},this.getMaterialNameByWireframe=function(A){var t;return(t=this._getMaterialName(A))&&!e[t]?this.add(A):t},this.addOverrideMaterial=function(A){if(A){var t=A.name;e[t]||(e[t]=A)}},this.updateOverrideMaterial=function(A){A&&(e[A.name]=A)},this.getMaterialParamsFromName=function(A){var e={},t=A.split("_");return"mat"===t[0]?(e.color=parseInt(t[1],0),e.opacity=1):(e.color=parseInt(t[0],0),e.opacity=parseFloat(t[1],0)),e},this._getMaterialName=function(A){var e=null;return A&&A.hasOwnProperty("color")?e=A.hasOwnProperty("opacity")?A.color+"_"+A.opacity:"mat_"+A.color:A&&A.hasOwnProperty("wireframe")?A.wireframe&&(e="wireframe"):e="mat_"+A,e},this.setWireframeMaterial=function(A){e.wireframe.color.setHex(void 0!==A.color?A.color:c.color),e.wireframe.opacity=void 0!==A.opacity?A.opacity:c.opacity,e.wireframe.transparent=void 0!==A.transparent?A.transparent:c.transparent,e.wireframe.side=void 0!==A.side?A.side:c.side,e.wireframe.needsUpdate=!0},this.getWireframeMaterial=function(){return e.wireframe},this.setFrozonMaterial=function(A){l.color.setHex(void 0!==A.color?A.color:s.color),l.opacity=void 0!==A.opacity?A.opacity:s.opacity,l.transparent=void 0!==A.transparent?A.transparent:s.transparent,l.side=void 0!==A.side?A.side:s.side,l.needsUpdate=!0},this.getFrozonMaterial=function(){return l},this.setSelectedMaterial=function(A){p.color.setHex(void 0!==A.color?A.color:d.color),p.opacity=void 0!==A.opacity?A.opacity:d.opacity,p.transparent=void 0!==A.transparent?A.transparent:d.transparent,p.side=void 0!==A.side?A.side:d.side,p.needsUpdate=!0},this.getSelectedMaterial=function(){return p},this.setIsolateMaterial=function(A){a.color.setHex(void 0!==A.color?A.color:r.color),a.opacity=void 0!==A.opacity?A.opacity:r.opacity,a.transparent=void 0!==A.transparent?A.transparent:r.transparent,a.side=void 0!==A.side?A.side:r.side,a.needsUpdate=!0},this.getIsolateMaterial=function(){return a},this.resetIsolateMaterial=function(){a.color.setHex(r.color),a.opacity=r.opacity,a.transparent=r.transparent,a.side=r.side,a.needsUpdate=!0},e)e[g].createByBos=!0},lu=function(A,e){tu.call(this,A,e)};(lu.prototype=Object.create(tu.prototype)).constructor=lu,lu.prototype.match=function(A){return null!==this.getMatchItem(A)},lu.prototype.getMatchItem=function(A){var e=this._items,t=A.userData,i=!1;if(t)for(var o=e.length,n=0;o>n;n+=1){var r=e[n],a=r.condition;for(var s in i=!0,a)if(a[s]!==t[s]){i=!1;break}if(i)return r}return null};var cu=function(A,e){tu.call(this,A,e)};(cu.prototype=Object.create(tu.prototype)).constructor=cu,cu.prototype.remove=function(A,e){var t=this._items[A];if(t&&e&&e.length>0){for(var i=0,o=e.length;o>i;i+=1){var n=e[i];t.hasOwnProperty(n)&&delete t[n]}uh.isEmptyObject(this._items)&&this._enabled&&(this._enabled=!1,this.enableStateChanged())}},cu.prototype.add=function(A,e,t){var i=this._items,o=i[A];if(e&&e.length>0){void 0===t&&(t=!0),o||(o=i[A]={});for(var n=0,r=e.length;r>n;n+=1)o[e[n]]=t;this._enabled||(this._enabled=!0,this.enableStateChanged())}},cu.prototype.clear=function(A){var e=this._items;e.hasOwnProperty(A)&&(delete e[A],uh.isEmptyObject(e)&&this._enabled&&(this._enabled=!1,this.enableStateChanged()))};var hu=function(A,e){tu.call(this,A,e)};(hu.prototype=Object.create(cu.prototype)).constructor=hu,hu.prototype.match=function(A){return null!==this.getMatchItem(A)},hu.prototype.getMatchItem=function(A){var e=this._items,t=A.name;for(var i in e){var o=e[i];if(o[t])return o[t]}return null};var du=function(A,e){tu.call(this,A,e)};(du.prototype=Object.create(cu.prototype)).constructor=du,du.prototype.match=function(A){return null!==this.getMatchItem(A)},du.prototype.getMatchItem=function(A){var e=this._items,t=A.userData;if(t)for(var i in e){var o=e[i],n=t[i];if(n&&void 0!==o[n])return o[n]}return null};var pu=function(){var A=Jc,e={IDFILTER_OFFSET:0,FILE_VISIBLE:0,FILE_HIDDEN:1,VISIBLE:2,HIDDEN:3,TRANSLUCENT:4,TRANSLUCENT_OTHERS:5,WIREFRAME:24,COLORFUL:25,RENDER_PROMOTION:6,IDFILTER_ENDOFFSET:6,ISOLATEFILTER_OFFSET:7,ISOLATE_HIDDEN:7,ISOLATE_HIDDEN_OTHERS:8,ISOLATE_TRANSLUCENT:9,ISOLATE_TRANSLUCENT_OTHERS:10,ISOLATEFILTER_ENDOFFSET:10,USERFILTER_OFFSET:11,USER_HIDDEN:11,USER_OVERRIDE:12,USER_WITH_BOARDLINE:13,USERFILTER_ENDOFFSET:13,CONDITIONFILTER_OFFSET:14,CONDITION_HIDDEN_OTHERS:14,CONDITION_TRANSLUCENT_OTHERS:15,CONDITION_OVERRIDE:16,CONDITION_BORDERLINE:26,CONDITIONFILTER_ENDOFFSET:16,ISOLATECONDITIONFILTER_OFFSET:17,ISOLATE_CONDITION_HIDDEN:17,ISOLATE_CONDITION_HIDDEN_OTHERS:18,ISOLATE_CONDITION_TRANSLUCENT:19,ISOLATE_CONDITION_TRANSLUCENT_OTHERS:20,ISOLATECONDITIONFILTER_ENDOFFSET:20,FROZENFILTER:21,FROZENCONDITIONFILTER:22,OVERRIDEFILTER:23,BASICFILTER_COUNT:23},t=new _g(!0),i=new _g(!0),o=new _g(!1),n=new _g(!0),r=new _g(!1),a=new _g(!1),s=new _g(!1),l=[],c=null,h=null,d=Vc.DISABLED,p=new su;!function(){l[e.FILE_VISIBLE]=new nu(e.FILE_VISIBLE,"FILE_VISIBLE"),l[e.FILE_HIDDEN]=new nu(e.FILE_HIDDEN,"FILE_HIDDEN"),l[e.VISIBLE]=new ru(e.VISIBLE,"VISIBLE"),l[e.HIDDEN]=new ru(e.HIDDEN,"HIDDEN"),l[e.TRANSLUCENT]=new ru(e.TRANSLUCENT,"TRANSLUCENT"),l[e.TRANSLUCENT_OTHERS]=new ru(e.TRANSLUCENT_OTHERS,"TRANSLUCENT_OTHERS"),l[e.RENDER_PROMOTION]=new ru(e.RENDER_PROMOTION,"RENDER_PROMOTION"),l[e.WIREFRAME]=new ru(e.WIREFRAME,"WIREFRAME"),l[e.COLORFUL]=new ru(e.COLORFUL,"COLORFUL"),l[e.ISOLATE_HIDDEN]=new ru(e.ISOLATE_HIDDEN,"ISOLATE_HIDDEN"),l[e.ISOLATE_HIDDEN_OTHERS]=new ru(e.ISOLATE_HIDDEN_OTHERS,"ISOLATE_HIDDEN_OTHERS"),l[e.ISOLATE_TRANSLUCENT]=new ru(e.ISOLATE_TRANSLUCENT,"ISOLATE_TRANSLUCENT"),l[e.ISOLATE_TRANSLUCENT_OTHERS]=new ru(e.ISOLATE_TRANSLUCENT_OTHERS,"ISOLATE_TRANSLUCENT_OTHERS"),l[e.USER_HIDDEN]=new du(e.USER_HIDDEN,"USER_HIDDEN"),l[e.USER_OVERRIDE]=new du(e.USER_OVERRIDE,"USER_OVERRIDE"),l[e.CONDITION_BORDERLINE]=new iu(e.CONDITION_BORDERLINE,"CONDITION_BORDERLINE"),l[e.CONDITION_HIDDEN_OTHERS]=new iu(e.CONDITION_HIDDEN_OTHERS,"CONDITION_HIDDEN_OTHERS"),l[e.CONDITION_TRANSLUCENT_OTHERS]=new iu(e.CONDITION_TRANSLUCENT_OTHERS,"CONDITION_TRANSLUCENT_OTHERS"),l[e.CONDITION_OVERRIDE]=new lu(e.CONDITION_OVERRIDE,"CONDITION_OVERRIDE"),l[e.ISOLATE_CONDITION_HIDDEN]=new iu(e.ISOLATE_CONDITION_HIDDEN,"ISOLATE_CONDITION_HIDDEN"),l[e.ISOLATE_CONDITION_HIDDEN_OTHERS]=new iu(e.ISOLATE_CONDITION_HIDDEN_OTHERS,"ISOLATE_CONDITION_HIDDEN_OTHERS"),l[e.ISOLATE_CONDITION_TRANSLUCENT]=new iu(e.ISOLATE_CONDITION_TRANSLUCENT,"ISOLATE_CONDITION_TRANSLUCENT"),l[e.ISOLATE_CONDITION_TRANSLUCENT_OTHERS]=new iu(e.ISOLATE_CONDITION_TRANSLUCENT_OTHERS,"ISOLATE_CONDITION_TRANSLUCENT_OTHERS"),h=new ru(e.FROZENFILTER,"FROZENFILTER"),l[e.FROZENCONDITIONFILTER]=new iu(e.FROZENCONDITIONFILTER,"FROZENCONDITIONFILTER"),l[e.FROZENFILTER]=h,c=new hu(e.OVERRIDEFILTER,"OVERRIDEFILTER"),l[e.OVERRIDEFILTER]=c;var d=null,p={};for(d in p[e.HIDDEN]=A.MATCH_RETURN_FALSE,p[e.VISIBLE]=A.NOMATCH_RETURN_FALSE,p[e.USER_HIDDEN]=A.MATCH_RETURN_FALSE,p[e.CONDITION_HIDDEN_OTHERS]=A.NOMATCH_RETURN_FALSE,p[e.ISOLATE_HIDDEN]=A.MATCH_RETURN_FALSE,p[e.ISOLATE_HIDDEN_OTHERS]=A.NOMATCH_RETURN_FALSE,p[e.ISOLATE_CONDITION_HIDDEN_OTHERS]=A.NOMATCH_RETURN_FALSE,t.setFilterMode(p),p)l[d].registerToCompoundFilter(t);var g={};for(d in g[e.FROZENFILTER]=A.MATCH_RETURN_FALSE,g[e.FROZENCONDITIONFILTER]=A.MATCH_RETURN_FALSE,g[e.TRANSLUCENT]=A.MATCH_RETURN_FALSE,g[e.TRANSLUCENT_OTHERS]=A.NOMATCH_RETURN_FALSE,g[e.CONDITION_TRANSLUCENT_OTHERS]=A.NOMATCH_RETURN_FALSE,g[e.ISOLATE_TRANSLUCENT]=A.MATCH_RETURN_FALSE,g[e.ISOLATE_TRANSLUCENT_OTHERS]=A.NOMATCH_RETURN_FALSE,g[e.ISOLATE_CONDITION_TRANSLUCENT_OTHERS]=A.NOMATCH_RETURN_FALSE,n.setFilterMode(g),g)l[d].registerToCompoundFilter(n);var u={};u[e.ISOLATE_TRANSLUCENT]=A.MATCH_RETURN_TRUE,u[e.ISOLATE_TRANSLUCENT_OTHERS]=A.NOMATCH_RETURN_TRUE,u[e.ISOLATE_CONDITION_TRANSLUCENT_OTHERS]=A.NOMATCH_RETURN_TRUE,u[e.CONDITION_TRANSLUCENT_OTHERS]=A.NOMATCH_RETURN_TRUE,u[e.TRANSLUCENT]=A.MATCH_RETURN_TRUE,u[e.TRANSLUCENT_OTHERS]=A.NOMATCH_RETURN_TRUE,u[e.OVERRIDEFILTER]=A.MATCH_RETURN_TRUE,u[e.USER_OVERRIDE]=A.MATCH_RETURN_TRUE,u[e.CONDITION_OVERRIDE]=A.MATCH_RETURN_TRUE,u[e.FROZENFILTER]=A.MATCH_RETURN_TRUE,u[e.FROZENCONDITIONFILTER]=A.MATCH_RETURN_TRUE;var f={};for(d in f[e.ISOLATE_TRANSLUCENT]=5,f[e.ISOLATE_TRANSLUCENT_OTHERS]=5,f[e.ISOLATE_CONDITION_TRANSLUCENT_OTHERS]=5,f[e.CONDITION_TRANSLUCENT_OTHERS]=5,f[e.TRANSLUCENT]=5,f[e.TRANSLUCENT_OTHERS]=5,f[e.OVERRIDEFILTER]=0,f[e.USER_OVERRIDE]=0,f[e.CONDITION_OVERRIDE]=0,f[e.FROZENFILTER]=3,f[e.FROZENCONDITIONFILTER]=3,i.setFilterMode(u),i.setFilterPriority(f),u)l[d].registerToCompoundFilter(i);var m={};for(d in m[e.OVERRIDEFILTER]=A.MATCH_RETURN_TRUE,m[e.USER_OVERRIDE]=A.MATCH_RETURN_TRUE,m[e.CONDITION_OVERRIDE]=A.MATCH_RETURN_TRUE,m[e.CONDITION_TRANSLUCENT_OTHERS]=A.MATCH_RETURN_TRUE,o.setFilterMode(m),m)l[d].registerToCompoundFilter(o);var C={};for(d in C[e.FILE_VISIBLE]=A.NOMATCH_RETURN_TRUE,C[e.FILE_HIDDEN]=A.MATCH_RETURN_TRUE,r.setFilterMode(C),C)l[d].registerToCompoundFilter(r);var y={};for(d in y[e.RENDER_PROMOTION]=A.MATCH_RETURN_TRUE,y[e.ISOLATE_CONDITION_TRANSLUCENT_OTHERS]=A.MATCH_RETURN_TRUE,a.setFilterMode(y),y)l[d].registerToCompoundFilter(a);var v={};for(d in v[e.CONDITION_BORDERLINE]=A.MATCH_RETURN_TRUE,s.setFilterMode(v),v)l[d].registerToCompoundFilter(s)}(),this.getMaterialSelector=function(){return p},this.getBasicFilterList=function(){return l},this.getFilterType=function(){return e},this.saveState=function(){for(var A={},e=null,t=0,i=l.length;i>t;t+=1)A[(e=l[t]).getName()]=e.getAll();return A.sceneState=this.getSceneState(),A.version="1.0",A},this.loadState=function(A){if(this.clearAll(),A.hasOwnProperty("version")){if("1.0"===A.version){for(var t={},i=0,o=l.length;o>i;i+=1)t[l[i].getName()]=i;for(var n in A)"sceneState"!==n&&"version"!==n&&(t.hasOwnProperty(n)?l[t[n]].setByData(A[n]):Bh.warn("Warning: Not supported filter '"+n+"'"))}}else for(var r in A)"sceneState"!==r&&(2>r?l[r].setByData(A[r]):r>2?e.BASICFILTER_COUNT+2>r&&l[r-1].setByData(A[r]):2!==r&&"2"!==r||Bh.warn("Warning: Old version filter data! The selection state is out of the filter, can not restore it."));this.setSceneState(A.sceneState)},this.clear=function(){for(var A=0,t=l.length;t>A;A+=1){var i=l[A].getType();i!==e.FROZENFILTER&&i!==e.CONDITION_BORDERLINE&&l[A].clearAll()}this.setSceneState(Vc.DISABLED)},this.clearAll=function(){for(var A=0,e=l.length;e>A;A+=1)l[A].clearAll();this.setSceneState(Vc.DISABLED)},this.clearIsolate=function(){this.clearAllIsolateList(),this.clearAllIsolateConditions()},this.clearFrozenList=function(){h.clearAll()},this.addToFrozenList=function(A){h.add(A)},this.removeFromFrozenList=function(A){h.remove(A)},this.setFrozenList=function(A){this.clearFrozenList(),this.addToFrozenList(A)},this.setFrozenConditions=function(A){l[e.FROZENCONDITIONFILTER].setByData(A)},this.getFrozenConditions=function(){return l[e.FROZENCONDITIONFILTER].getAll()},this.clearFrozenConditions=function(){l[e.FROZENCONDITIONFILTER].clear()},this.clearFrozen=function(){this.clearFrozenList(),this.clearFrozenConditions()},this.clearAllIdList=function(){var A=null;for(A=e.IDFILTER_OFFSET;e.IDFILTER_ENDOFFSET>=A;A+=1)l[A].clearAll()},this.clearIdList=function(A){var t=e.IDFILTER_OFFSET+A;e.IDFILTER_OFFSET>t||t>e.IDFILTER_ENDOFFSET||l[t].clear()},this.addToIdList=function(A,t){var i=e.IDFILTER_OFFSET+A;e.IDFILTER_OFFSET>i||i>e.IDFILTER_ENDOFFSET||l[i].add(t)},this.removeFromIdList=function(A,t){var i=e.IDFILTER_OFFSET+A;e.IDFILTER_OFFSET>i||i>e.IDFILTER_ENDOFFSET||l[i].remove(t)},this.setIdList=function(A,e){this.clearIdList(A),this.addToIdList(A,e)},this.clearAllOverrideList=function(){c.clearAll()},this.clearOverrideList=function(A){c.clear(A)},this.addToOverrideList=function(A,e,t){e&&e.length>0&&(p.has(t)||(t=p.getDefaultMaterialName()),c.add(A,e,t))},this.removeFromOverrideList=function(A,e){c.remove(A,e)},this.setOverrideList=function(A,e,t){this.clearOverrideList(A),this.addToOverrideList(A,e,t)},this.addToOverrideListByColor=function(A,e,t){var i=p.add(t);c.add(A,e,i)},this.setOverrideListByColor=function(A,e,t){this.clearOverrideList(A),this.addToOverrideListByColor(A,e,t)},this.clearAllUserList=function(){var A=null;for(A=e.USERFILTER_OFFSET;e.USERFILTER_ENDOFFSET>=A;A+=1)l[A].clearAll()},this.clearUserListByType=function(A){var t=e.USERFILTER_OFFSET+A;e.USERFILTER_OFFSET>t||t>e.USERFILTER_ENDOFFSET||l[t].clearAll()},this.clearUserList=function(A,t){var i=e.USERFILTER_OFFSET+A;e.USERFILTER_OFFSET>i||i>e.USERFILTER_ENDOFFSET||l[i].clear(t)},this.addToUserList=function(A,t,i,o){var n=e.USERFILTER_OFFSET+A;e.USERFILTER_OFFSET>n||n>e.USERFILTER_ENDOFFSET||l[n].add(t,i,o)},this.removeFromUserList=function(A,t,i){var o=e.USERFILTER_OFFSET+A;e.USERFILTER_OFFSET>o||o>e.USERFILTER_ENDOFFSET||l[o].remove(t,i)},this.setUserList=function(A,e,t,i){this.clearUserList(A,e),this.addToUserList(A,e,t,i)},this.isIsolate=function(){var A=null;for(A=e.ISOLATEFILTER_OFFSET;e.ISOLATEFILTER_ENDOFFSET>=A;A+=1)if(!l[A].isEmpty())return!0;return!1},this.isFiltering=function(){return!!this.isIsolate()||!(l[e.HIDDEN].isEmpty()&&l[e.VISIBLE].isEmpty()&&l[e.TRANSLUCENT].isEmpty()&&l[e.TRANSLUCENT_OTHERS].isEmpty()&&this.getSceneState()===Vc.DISABLED)},this.setFrozonMaterial=function(A){p.setFrozonMaterial(A)},this.getFrozonMaterial=function(){return p.getFrozonMaterial()},this.setSelectedMaterial=function(A){p.setSelectedMaterial(A)},this.getSelectedMaterial=function(){return p.getSelectedMaterial()},this.setIsolateMaterial=function(A){p.setIsolateMaterial(A)},this.getIsolateMaterial=function(){return p.getIsolateMaterial()},this.resetIsolateMaterial=function(){p.resetIsolateMaterial()},this.clearAllIsolateList=function(){var A=null;for(A=e.ISOLATEFILTER_OFFSET;e.ISOLATEFILTER_ENDOFFSET>=A;A+=1)l[A].clear()},this.clearIsolateList=function(A){var t=e.ISOLATEFILTER_OFFSET+A;e.ISOLATEFILTER_OFFSET>t||t>e.ISOLATEFILTER_ENDOFFSET||l[t].clear()},this.addToIsolateList=function(A,t){var i=e.ISOLATEFILTER_OFFSET+A;e.ISOLATEFILTER_OFFSET>i||i>e.ISOLATEFILTER_ENDOFFSET||l[i].add(t)},this.removeFromIsolateList=function(A,t){var i=e.ISOLATEFILTER_OFFSET+A;e.ISOLATEFILTER_OFFSET>i||i>e.ISOLATEFILTER_ENDOFFSET||l[i].remove(t)},this.setIsolateList=function(A,e){this.clearIsolateList(A),this.addToIsolateList(A,e)},this.setIsolateConditions=function(A,t){var i=e.ISOLATECONDITIONFILTER_OFFSET+t;e.ISOLATECONDITIONFILTER_OFFSET>i||i>e.ISOLATECONDITIONFILTER_ENDOFFSET||l[i].setByData(A)},this.getIsolateConditions=function(A){var t=null,i=e.ISOLATECONDITIONFILTER_OFFSET+A;return e.ISOLATECONDITIONFILTER_OFFSET>i||i>e.ISOLATECONDITIONFILTER_ENDOFFSET||(t=l[i].getAll()),t},this.clearIsolateConditions=function(A){var t=e.ISOLATECONDITIONFILTER_OFFSET+A;e.ISOLATECONDITIONFILTER_OFFSET>t||t>e.ISOLATECONDITIONFILTER_ENDOFFSET||l[t].clear()},this.clearAllIsolateConditions=function(){var A=null;for(A=e.ISOLATECONDITIONFILTER_OFFSET;e.ISOLATECONDITIONFILTER_ENDOFFSET>=A;A+=1)l[A].clearAll()},this.setConditions=function(A,t){var i=e.CONDITIONFILTER_OFFSET+A;e.CONDITIONFILTER_OFFSET>i||i>e.CONDITIONFILTER_ENDOFFSET||l[i].setByData(t)},this.getConditions=function(A){var t=null,i=e.CONDITIONFILTER_OFFSET+A;return e.CONDITIONFILTER_OFFSET>i||i>e.CONDITIONFILTER_ENDOFFSET||(t=l[i].get()),t},this.clearConditions=function(A){var t=e.CONDITIONFILTER_OFFSET+A;e.CONDITIONFILTER_OFFSET>t||t>e.CONDITIONFILTER_ENDOFFSET||l[t].clearAll()},this.clearAllConditions=function(){var A=null;for(A=e.CONDITIONFILTER_OFFSET;e.CONDITIONFILTER_ENDOFFSET>=A;A+=1)l[A].clear()},this.makeSceneTranslucent=function(){this.setSceneState(Vc.TRANSLUCENT)},this.cancelSceneTranslucent=function(){this.setSceneState(Vc.DISABLED)},this.hideScene=function(){this.setSceneState(Vc.HIDDEN)},this.showScene=function(){this.setSceneState(Vc.DISABLED)},this.setSceneState=function(A){d=A},this.getSceneState=function(){return d},this.cancelTranslucent=function(){this.clearIdList(Dc.TRANSLUCENT),this.clearIdList(Dc.TRANSLUCENT_OTHERS)},this._addIdsToFilter=function(A,t){var i=e.IDFILTER_OFFSET+A;e.IDFILTER_OFFSET>i||i>e.IDFILTER_ENDOFFSET||l[i].add(t)},this.hideByIds=function(A){this._addIdsToFilter(Dc.HIDDEN,A)},this.showByIds=function(A){this._addIdsToFilter(Dc.VISIBLE,A)},this.makeTranslucentByIds=function(A){this._addIdsToFilter(Dc.TRANSLUCENT,A)},this.makeTranslucentOthersByIds=function(A){this._addIdsToFilter(Dc.TRANSLUCENT_OTHERS,A)},this._isVisible=function(A){return this.getSceneState()!==Vc.HIDDEN&&t.apply(A)},this._isSelectable=function(A){return this.getSceneState()!==Vc.TRANSLUCENT&&n.apply(A,this.getSceneState())},this._isSelectableById=function(A){return!h.get()[A]},this.getMaterialNameByColor=function(A){return p.getMaterialNameByColor(A)},this.getMaterialNameByWireframe=function(A){return p.getMaterialNameByWireframe(A)},this.addOverrideMaterial=function(A){p.addOverrideMaterial(A)},this.updateOverrideMaterial=function(A){p.updateOverrideMaterial(A)},this.getMaterialByName=function(A){return p.get(A)},this._getOverrideMaterial=function(A){if(this.getSceneState()===Vc.TRANSLUCENT)return p.get("scene");var t=i.getApplyFilterId(A),o=null,n="";switch(t){case e.ISOLATE_TRANSLUCENT:case e.ISOLATE_TRANSLUCENT_OTHERS:case e.ISOLATE_CONDITION_TRANSLUCENT_OTHERS:o=this.getIsolateMaterial();break;case e.CONDITION_TRANSLUCENT_OTHERS:case e.TRANSLUCENT:case e.TRANSLUCENT_OTHERS:o=p.get("scene");break;case e.FROZENFILTER:case e.FROZENCONDITIONFILTER:break;case e.OVERRIDEFILTER:case e.USER_OVERRIDE:case e.CONDITION_OVERRIDE:var r=l[t].getMatchItem(A);n=r.hasOwnProperty("color")?p.getMaterialNameByColor(r.color):r.material?r.material:r}return o||""===n||(p.has(n)||(n=p.getDefaultMaterialName()),o=p.get(n)),o},this._getMaterialName=function(A){if(this.getSceneState()===Vc.TRANSLUCENT)return"scene";var t=i.getApplyFilterId(A),o="";switch(t){case e.ISOLATE_TRANSLUCENT:case e.ISOLATE_TRANSLUCENT_OTHERS:case e.ISOLATE_CONDITION_TRANSLUCENT_OTHERS:o=this.getIsolateMaterial().name;break;case e.CONDITION_TRANSLUCENT_OTHERS:case e.TRANSLUCENT:case e.TRANSLUCENT_OTHERS:o="scene";break;case e.FROZENFILTER:case e.FROZENCONDITIONFILTER:break;case e.OVERRIDEFILTER:case e.USER_OVERRIDE:case e.CONDITION_OVERRIDE:var n=l[t].getMatchItem(A);o=n.hasOwnProperty("color")?p.getMaterialNameByColor(n.color):n.material?n.material:n}return o},this._getMaterialByName=function(A){return A instanceof qA?A:"isolate"===A?p.getIsolateMaterial():"looming"===A||"scene"===A?p.getFrozonMaterial():"selected"===A?p.getSelectedMaterial():p.get(A)},this._hasHighPriorityOverrideMaterial=function(A){return this.getSceneState()===Vc.TRANSLUCENT||o.apply(A)},this._hasOverrideMaterial=function(A){return this.getSceneState()===Vc.TRANSLUCENT||o.apply(A)||i.apply(A)},this._isHiddenFileId=function(A){return r.apply(A)},this._hasHiddenFileIdFilter=function(){return!r.isEmpty()},this._hasVisibleFilter=function(){return this.getSceneState()===Vc.HIDDEN||!t.isEmpty()},this._hasPickableFilter=function(){return this.getSceneState()===Vc.TRANSLUCENT||!n.isEmpty()},this._hasOverrideMaterialFilter=function(){return this.getSceneState()===Vc.TRANSLUCENT||!i.isEmpty()},this._hasLowPriorityOverride=function(){return i.hasFilterNotIn(o)},this._isRenderPromotion=function(A){return a.apply(A)},this._hasRenderPromotionFilter=function(){return!a.isEmpty()},this._isRenderWithBoardline=function(A){return s.apply(A)},this._hasRenderWithBoardlineFilter=function(){return!s.isEmpty()},this._getFilterObjectsKeys=function(A){var e=l[A].get(),t=[];for(var i in e)t.push(i);return t}},gu=function(A){this.materialSelector=A;var e=function(A){var e=[];for(var t in A)!0===A[t]&&e.push(t);return e};this.saveState=function(A){var e=A.getIsolateFilterAction(),t=A.getModelIsolateFilterAction(),i=A.getFilterActionList(),o={isolateAction:e,modelIsolateAction:t,modelActions:A.getModelFilterActionList(),actions:i,sceneState:A.getSceneState(),version:"1.0"};return JSON.stringify(o)},this.createAction=function(A){var e=A.className,t=null;switch(e){case"IsolateIdsFA":(t=new Hg(A.isolateHide)).ids=A.ids;break;case"VisibleIdsFA":(t=new Pg(A.flag,A.isVisible)).ids=A.ids;break;case"OverrideIdsFA":if(o=A.material){var i=this.materialSelector.getMaterialNameByColor({opacity:A.material.opacity,color:A.material.color});o=this.materialSelector.get(i)}(t=new qg(A.flag,o)).ids=A.ids;break;case"TransparentIdsFA":(t=new Yg(A.flag,A.isOpaque)).ids=A.ids;break;case"VisibleConditionFA":(t=new Jg(A.flag,A.isVisible)).conditions=A.conditions;break;case"OverrideConditionFA":var o;if(o=A.material){i=this.materialSelector.getMaterialNameByColor({opacity:o.opacity,color:o.color});o=this.materialSelector.get(i)}(t=new zg(A.flag,o)).conditions=A.conditions;break;case"TransparentConditionFA":(t=new Zg(A.flag,A.isOpaque)).conditions=A.conditions;break;case"IsolateConditionFA":(t=new Xg(A.isolateHide)).conditions=A.conditions;break;default:Bh.warn("Warning: Not supported filterAction '"+e+"'")}return t},this.createActionByOldFilter=function(A,t){var i=[];switch(A){case"CONDITION_OVERRIDE":for(var o=[],n=0;t.length>n;n+=1){var r=t[n];o.push(r.condition)}var a=this.materialSelector.add(p=r.color),s=this.materialSelector.get(a);(g=new zg(!0,s)).conditions=o,i.push(g);break;case"CONDITION_TRANSLUCENT_OTHERS":(g=new Zg(!1,!1)).conditions=t,i.push(g);break;case"ISOLATE_CONDITION_HIDEEN_OTHERS":(g=new Xg(!0)).conditions=t,i.push(g);break;case"ISOLATE_CONDITION_TRANSLUCENT_OTHERS":(g=new Xg(!1)).conditions=t,i.push(g);break;case"ISOLATE_HIDDEN_OTHERS":(g=new Hg(!0)).ids=e(t),i.push(g);break;case"ISOLATE_TRANSLUCENT_OTHERS":(g=new Hg(!1)).ids=e(t),i.push(g);break;case"OVERRIDEFILTER":for(var l in t)if(t.hasOwnProperty(l)){var c=[],h=t[l];for(var d in h)c.push(d);var p=this.materialSelector.getMaterialParamsFromName(h[d]);a=this.materialSelector.add(p),s=this.materialSelector.get(a);(g=new qg(!0,s)).ids=c,i.push(g)}break;case"TRANSLUCENT":(g=new Yg(!0,!1)).ids=e(t),i.push(g);break;case"TRANSLUCTANT_OTHERS":(g=new Yg(!1,!1)).ids=e(t),i.push(g);break;case"VISIBLE":var g;(g=new Pg(!0,!0)).ids=e(t),i.push(g);break;default:Bh.warn("Warning: Not supported filter '"+A+"'")}return i},this.loadState=function(A,e){e.clearFilterActionList(),e.clearModelFilterActionList(),e.getObjectInfoManager().resetAll(),e.getModelInfoManager().resetAll();var t=JSON.parse(A);if(t.hasOwnProperty("version")&&"1.0"===t.version){var i=t.isolateAction;if(i){var o=this.createAction(i);e.pushBack(o)}for(var n=t.actions,r=0;n.length>r;r+=1){o=this.createAction(n[r]);e.pushBack(o)}var a=t.modelIsolateAction;if(a){o=this.createAction(a);e.pushModelBack(o)}for(var s=t.modelActions,l=0;s.length>l;l+=1){o=this.createAction(s[l]);e.pushModelBack(o)}}e.setSceneState(t.sceneState)}},uu=function(){var A={},e=[],t=!1,i=!1,o=!1,n=!1,r=!1,a=new aA;this.init=function(A){},this.clearData=function(){},this.getObjectsMap=function(){},this.add=function(t){A[t]={state:Lc.Visible,modelKey:t,material:null},e=Object.keys(A)},this.remove=function(t){delete A[t],e=Object.keys(A)},this.calculateVisibleComponentsBbox=function(){},this.getVisibleComponentsBbox=function(){return a.isEmpty()&&this.calculateVisibleComponentsBbox(),a},this.arrayToMap=function(A){for(var e={},t=0;A.length>t;t+=1){var i=A[t];e[i]=i}return e},this.isMatchConditions=function(A,e){for(var t=!0,i=0,o=e.length;o>i;i+=1){var n=e[i];for(var r in n){if(!Array.isArray(n[r])&&A[r]!==n[r]){t=!1;break}if(Array.isArray(n[r])&&-1===n[r].indexOf(A[r])){t=!1;break}}if(!0===t)break;e.length-1>i&&(t=!0)}return t},this.matchConditions=function(A,e){},this.setVisible=function(t,o,n){var r=function(A){o?A.state=Lc.Visible:(i=!0,A.state&=~Lc.Visible)};if(void 0===n||!0===n)for(var a=0,s=t.length;s>a;a+=1)A.hasOwnProperty(t[a])&&r(A[t[a]]);else for(var l=this.arrayToMap(t),c=0,h=e.length;h>c;c+=1)l.hasOwnProperty(e[c])||r(A[e[c]])},this.isVisible=function(e){if(A.hasOwnProperty(e))return A[e].state&Lc.Visible>0},this.clearVisible=function(){for(var e in i=!1,A){if(A.hasOwnProperty(e))A[e].state=Lc.Visible}},this.hideAll=function(){for(var e in i=!0,A){if(A.hasOwnProperty(e))A[e].state&=~Lc.Visible}},this.setTransparent=function(i,o,r){var a=function(A){o?(A.state|=Lc.Transparent,t=!0,n=!0):A.state&=~Lc.Transparent};if(void 0===r||!0===r)for(var s=0,l=i.length;l>s;s+=1)A.hasOwnProperty(i[s])&&a(A[i[s]]);else for(var c=this.arrayToMap(i),h=0,d=e.length;d>h;h+=1)c.hasOwnProperty(e[h])||a(A[e[h]])},this.isTransparent=function(e){if(A.hasOwnProperty(e)){var t=A[e],i=(t.state&Lc.Transparent)>0;return i=i||(t.state&Lc.TransparentByIsolate)>0}},this.clearTransparent=function(){for(var e in n=!1,A){if(A.hasOwnProperty(e))A[e].state&=~Lc.Transparent}},this.setMaterial=function(i,o,n){if(void 0===n||!0===n)for(var r=0,a=i.length;a>r;r+=1){if(A.hasOwnProperty(i[r]))A[i[r]].material=o,t=!0}else for(var s=this.arrayToMap(i),l=0,c=e.length;c>l;l+=1){if(!s.hasOwnProperty(e[l]))A[e[l]].material=o,t=!0}},this.getMaterial=function(e){if(A.hasOwnProperty(e))return A[e].material},this.clearMaterial=function(){for(var e in A){A[e].material=null}},this.setIsolateHide=function(t,i,n){var r=function(A){i?(o=!0,A.state|=Lc.HideByIsolate):A.state&=~Lc.HideByIsolate};if(void 0===n||!0===n)for(var a=0,s=t.length;s>a;a+=1)A.hasOwnProperty(t[a])&&r(A[t[a]]);else for(var l=this.arrayToMap(t),c=0,h=e.length;h>c;c+=1)l.hasOwnProperty(e[c])||r(A[e[c]])},this.isIsolateHide=function(e){if(A.hasOwnProperty(e))return(A[e].state&Lc.HideByIsolate)>0},this.setIsolateTransparent=function(i,o,n){var a=function(A){o?(A.state|=Lc.TransparentByIsolate,t=!0,r=!0):A.state&=~Lc.TransparentByIsolate};if(void 0===n||!0===n)for(var s=0,l=i.length;l>s;s+=1)A.hasOwnProperty(i[s])&&a(A[i[s]]);else for(var c=this.arrayToMap(i),h=0,d=e.length;d>h;h+=1)c.hasOwnProperty(e[h])||a(A[e[h]])},this.isIsolateTransparent=function(e){if(A.hasOwnProperty(e))return(A[e].state&Lc.TransparentByIsolate)>0},this.clearIsolateHide=function(){o=!1;var e=Object.keys(A);e.length>0&&this.setIsolateHide(e,!1)},this.clearIsolates=function(){r=!1,o=!1;var e=Object.keys(A);e.length>0&&(this.setIsolateHide(e,!1),this.setIsolateTransparent(e,!1))},this.clearTransparentByIsolate=function(){for(var e in r=!1,A){if(A.hasOwnProperty(e))A[e].state&=~Lc.TransparentByIsolate}},this.isHidden=function(e){if(A.hasOwnProperty(e)){var t=A[e],i=0==(t.state&Lc.Visible);return i=i||(t.state&Lc.HideByIsolate)>0}},this.isFrozen=function(e){if(A.hasOwnProperty(e)){var t=A[e],i=(t.state&Lc.Transparent)>0;return i=i||(t.state&Lc.TransparentByIsolate)>0}},this.resetAll=function(){for(var e in A)A.hasOwnProperty(e)&&(A[e].state=Lc.Visible,A[e].material=null);t=!1,i=o=!1,n=r=!1},this.hasOverrideMaterial=function(e){return void 0===e?t:A.hasOwnProperty(e)?null!==A[e].material||this.isTransparent(e):void 0},this.hasObjectHidden=function(){return i||o},this.hasObjectCantSelected=function(){return i||n||r},this.hasObjectTransparent=function(){return n||r}},fu=function(){var A={},e={};this.init=function(t){for(var i in A=t)e.hasOwnProperty(i)&&!uh.isEmptyObject(e[i])||uh.isEmptyObject(A[i])||(e[i]=Object.keys(A[i]))},this.reinit=function(t){for(var i in e={},A=t)e[i]=Object.keys(t[i])},this.clear=function(){A={},e={}},this.getObjectsMap=function(){return A},this.getObjectIds=function(A){return e.hasOwnProperty(A)?e[A]:[]}},mu=function(){var A=new fu,e=!1,t=!1,i=!1,o=!1,n=!1,r=!1,a=new aA,s=!1;this.inactivatedIdMap={},this.inactivatedIds=[],this.bIsInactivateAll=!1,this.init=function(e){A.init(e)},this.reinit=function(e){A.reinit(e)},this.clearData=function(){A.clear()},this.getObjectsMap=function(){return A.getObjectsMap()},this.calculateVisibleComponentsBbox=function(){a.makeEmpty();var e=A.getObjectsMap();for(var t in e)for(var i=e[t],o=A.getObjectIds(t),n=null,r=0,l=o.length;l>r;r+=1){var c=o[r];if(!this.isHidden(c)){var h=i[c][0];if(h.boundingBox){!n&&h.model&&(n=h.model.getModelMatrix());var d=h.boundingBox.clone();n&&d.applyMatrix4(n),d.isEmpty()||(a.expandByPoint(d.min),a.expandByPoint(d.max))}}}s=!1},this.getVisibleComponentsBbox=function(){return(s||a.isEmpty())&&this.calculateVisibleComponentsBbox(),a},this.needUpdateBoxAfterExplode=function(){s=!0},this.arrayToMap=function(A){for(var e={},t=0;A.length>t;t+=1){var i=A[t];e[i]=i}return e},this.isMatchConditions=function(A,e){for(var t=!0,i=0,o=e.length;o>i;i+=1){var n=e[i];for(var r in n){if(!Array.isArray(n[r])&&A[r]!==n[r]){t=!1;break}if(Array.isArray(n[r])&&-1===n[r].indexOf(A[r])){t=!1;break}}if(!0===t)break;e.length-1>i&&(t=!0)}return t},this.matchConditions=function(e,t){var i=A.getObjectsMap();for(var o in i)for(var n=[],r=[],a=i[o],s=A.getObjectIds(o),l=0,c=s.length;c>l;l+=1){var h=s[l],d=a[h][0].userData||{};d.elementId=a[h][0].userId,this.isMatchConditions(d,e)?n.push(h):r.push(h)}t&&t(n,!0),t&&t(r,!1)},this.getMatchIds=function(e){var t=A.getObjectsMap(),i=[];for(var o in t)for(var n=t[o],r=A.getObjectIds(o),a=0,s=r.length;s>a;a+=1){var l=r[a],c=n[l][0].userData||{};c.elementId=n[l][0].userId,!0===this.isMatchConditions(c,e)&&i.push(l)}return i},this.setVisible=function(e,t,o){var n=function(A){t?A.state=Lc.Visible:(i=!0,A.state&=~Lc.Visible)},r=A.getObjectsMap();for(var a in r){var s=r[a];if(void 0===o||!0===o)for(var l=0,c=e.length;c>l;l+=1){if(s.hasOwnProperty(f=e[l])&&this.isActive(f)){var h=s[f][0];n(h)}}else{for(var d=this.arrayToMap(e),p=A.getObjectIds(a),g=0,u=p.length;u>g;g+=1){var f;!d.hasOwnProperty(f=p[g])&&this.isActive(f)&&n(h=s[f][0])}d=null}}},this.isVisible=function(e){var t=A.getObjectsMap();for(var i in t){var o=t[i];if(o.hasOwnProperty(e))return o[e][0].state&Lc.Visible>0}},this.clearVisible=function(){var e=A.getObjectsMap();for(var t in i=!1,this.inactivatedIds.length>0&&(i=!0),e)for(var o=e[t],n=A.getObjectIds(t),r=0,a=n.length;a>r;r+=1){var s=n[r],l=o[s][0];this.isActive(s)&&(l.state=Lc.Visible)}},this.hideAll=function(){var e=A.getObjectsMap();for(var t in i=!0,e)for(var o=e[t],n=A.getObjectIds(t),r=0,a=n.length;a>r;r+=1){o[n[r]][0].state&=~Lc.Visible}},this.setTransparent=function(t,i,o){var r=function(A){i?(A.state|=Lc.Transparent,e=!0,n=!0):A.state&=~Lc.Transparent},a=A.getObjectsMap();for(var s in a){var l=a[s];if(void 0===o||!0===o)for(var c=0,h=t.length;h>c;c+=1){if(this.isActive(m=t[c])&&l.hasOwnProperty(m)){var d=l[m][0];r(d)}}else{for(var p=this.arrayToMap(t),g=A.getObjectIds(s),u=0,f=g.length;f>u;u+=1){var m;this.isActive(m=g[u])&&!p.hasOwnProperty(m)&&r(d=l[m][0])}p=null}}},this.isTransparent=function(e){var t=A.getObjectsMap();for(var i in t){var o=t[i];if(o.hasOwnProperty(e)&&this.isActive(e)){var n=o[e][0],r=(n.state&Lc.Transparent)>0;return r=r||(n.state&Lc.TransparentByIsolate)>0}}},this.clearTransparent=function(){var e=A.getObjectsMap();for(var t in n=!1,e)for(var i=e[t],o=A.getObjectIds(t),r=0,a=o.length;a>r;r+=1){var s=o[r];if(this.isActive(s))i[s][0].state&=~Lc.Transparent}},this.setMaterial=function(t,i,o){var n=A.getObjectsMap();for(var r in n){var a=n[r];if(void 0===o||!0===o)for(var s=0,l=t.length;l>s;s+=1){if(this.isActive(u=t[s])&&a.hasOwnProperty(u)){var c=a[u][0];c.material=i,e=!0}}else{for(var h=this.arrayToMap(t),d=A.getObjectIds(r),p=0,g=d.length;g>p;p+=1){var u;this.isActive(u=d[p])&&!h.hasOwnProperty(u)&&((c=a[u][0]).material=i,e=!0)}h=null}}},this.getMaterial=function(e){var t=A.getObjectsMap();for(var i in t){var o=t[i];if(o.hasOwnProperty(e))return o[e][0].material}},this.clearMaterial=function(){var e=A.getObjectsMap();for(var t in e){var i=e[t];for(var o in i)this.isActive(o)&&(i[o][0].material=null)}},this.setWireFrameMaterial=function(e,i,o){var n=A.getObjectsMap();for(var r in n){var a=n[r];if(void 0===o||!0===o)for(var s=0,l=e.length;l>s;s+=1){if(a.hasOwnProperty(u=e[s])){var c=a[u][0];c.wireFrameMaterial=i,t=!0}}else{for(var h=this.arrayToMap(e),d=A.getObjectIds(r),p=0,g=d.length;g>p;p+=1){var u;h.hasOwnProperty(u=d[p])||((c=a[u][0]).wireFrameMaterial=i,t=!0)}h=null}}},this.getWireFrameMaterial=function(e){var t=A.getObjectsMap();for(var i in t){var o=t[i];if(o.hasOwnProperty(e))return o[e][0].wireFrameMaterial}},this.clearWireFrameMaterial=function(){var e=A.getObjectsMap();for(var t in e){var i=e[t];for(var o in i)i[o][0].wireFrameMaterial=null}},this.clearMaterialByKey=function(e){var t=A.getObjectsMap();for(var i in t){var o=t[i];for(var n in o)-1!==e.indexOf(n)&&(o[n][0].material=null)}},this.setIsolateHide=function(e,t,i){var n=function(A){t?(o=!0,A.state|=Lc.HideByIsolate):A.state&=~Lc.HideByIsolate},r=A.getObjectsMap();for(var a in r){var s=r[a];if(void 0===i||!0===i)for(var l=0,c=e.length;c>l;l+=1){if(this.isActive(f=e[l])&&s.hasOwnProperty(f)){var h=s[f][0];n(h)}}else{for(var d=this.arrayToMap(e),p=A.getObjectIds(a),g=0,u=p.length;u>g;g+=1){var f;this.isActive(f=p[g])&&!d.hasOwnProperty(f)&&n(h=s[f][0])}d=null}}},this.isIsolateHide=function(e){var t=A.getObjectsMap();for(var i in t){var o=t[i];if(o.hasOwnProperty(e))return(o[e][0].state&Lc.HideByIsolate)>0}},this.setIsolateTransparent=function(t,i,o){var n=function(A){i?(A.state|=Lc.TransparentByIsolate,e=!0,r=!0):A.state&=~Lc.TransparentByIsolate},a=A.getObjectsMap();for(var s in a){var l=a[s];if(void 0===o||!0===o)for(var c=0,h=t.length;h>c;c+=1){if(l.hasOwnProperty(m=t[c])){var d=l[m][0];n(d)}}else{for(var p=this.arrayToMap(t),g=A.getObjectIds(s),u=0,f=g.length;f>u;u+=1){var m;!p.hasOwnProperty(m=g[u])&&this.isActive(m)&&n(d=l[m][0])}p=null}}},this.isIsolateTransparent=function(e){var t=A.getObjectsMap();for(var i in t){var o=t[i];if(o.hasOwnProperty(e)&&this.isActive(e))return(o[e][0].state&Lc.TransparentByIsolate)>0}},this.clearIsolateHide=function(){var e=A.getObjectsMap();for(var t in o=!1,e){var i=A.getObjectIds(t);i.length>0&&this.setIsolateHide(i,!1)}},this.clearIsolates=function(){var e=A.getObjectsMap();for(var t in r=!1,o=!1,e){var i=A.getObjectIds(t);i.length>0&&(this.setIsolateHide(i,!1),this.setIsolateTransparent(i,!1))}},this.clearTransparentByIsolate=function(){var e=A.getObjectsMap();for(var t in r=!1,e)for(var i=e[t],o=A.getObjectIds(t),n=0,a=o.length;a>n;n+=1){var s=o[n];if(this.isActive(s))i[s][0].state&=~Lc.TransparentByIsolate}},this.isHidden=function(e){var t=A.getObjectsMap();for(var i in t){var o=t[i];if(o.hasOwnProperty(e)){var n=o[e][0],r=0==(n.state&Lc.Visible);return r=r||(n.state&Lc.HideByIsolate)>0}}},this.isFrozen=function(e){var t=A.getObjectsMap();for(var i in t){var o=t[i];if(o.hasOwnProperty(e)){var n=o[e][0],r=(n.state&Lc.Transparent)>0;return r=r||(n.state&Lc.TransparentByIsolate)>0}}},this.resetAll=function(){var t=A.getObjectsMap();for(var a in t)for(var s=t[a],l=A.getObjectIds(a),c=0,h=l.length;h>c;c+=1){var d=l[c];s[d][0].state=Lc.Visible,this.isActive(d)&&(s[d][0].material=null)}e=!1,i=o=!1,n=r=!1,this.inactivatedIds.length>0&&(i=!0)},this.hasOverrideMaterial=function(t){var i=A.getObjectsMap();if(void 0===t)return e;for(var o in i){var n=i[o];if(n.hasOwnProperty(t))return null!==n[t][0].material||this.isTransparent(t)}},this.hasOverrideMaterialForWireFrame=function(e){var i=A.getObjectsMap();if(null==e)return t;for(var o in i){var n=i[o];if(n.hasOwnProperty(e))return null!==n[e][0].wireFrameMaterial}},this.hasObjectInactivated=function(){return this.inactivatedIds.length>0},this.hasObjectHidden=function(){return i||o},this.hasObjectCantSelected=function(){return this.hasObjectHidden()||this.hasObjectTransparent()||this.hasObjectInactivated()},this.hasObjectTransparent=function(){if(this.hasObjectInactivated()){var A=!1,e=!0,t=!1,i=void 0;try{for(var o,a=this.inactivatedIds[Symbol.iterator]();!(e=(o=a.next()).done);e=!0){if(this.isTransparent(o.value)){A=!0;break}}}catch(A){t=!0,i=A}finally{try{!e&&a.return&&a.return()}finally{if(t)throw i}}return A}return n||r},this.deactivateByIds=function(e){var t=!0,o=!1,n=void 0,r=A.getObjectsMap();try{for(var a,s=e[Symbol.iterator]();!(t=(a=s.next()).done);t=!0){var l=a.value;for(var c in r){var h=r[c];if(h.hasOwnProperty(l))h[l][0].state&=~Lc.Visible}this.inactivatedIdMap[l]=!0}}catch(A){o=!0,n=A}finally{try{!t&&s.return&&s.return()}finally{if(o)throw n}}i=!0,this.inactivatedIds=Object.keys(this.inactivatedIdMap)},this.activateByIds=function(e){for(var t=A.getObjectsMap(),o=0,n=e.length;n>o;o+=1){var r=e[o];for(var a in delete this.inactivatedIdMap[r],t){var s=t[a];if(s.hasOwnProperty(r))s[r][0].state=Lc.Visible}}this.inactivatedIds=Object.keys(this.inactivatedIdMap),this.inactivatedIds.length>0&&(i=!0)},this.clearInactivatedIdMap=function(){this.inactivatedIdMap={},this.inactivatedIds=[]},this.isActive=function(A){return!1===this.bIsInactivateAll&&!(!0===this.inactivatedIdMap[A])},this.deactivateAll=function(){this.bIsInactivateAll=!0},this.activateAll=function(){this.bIsInactivateAll=!1},this.getInactivatedIdMap=function(){return this.inactivatedIdMap}},Cu=function(A,e){Wg.call(this),this.className="OverrideConditionForWireFrameFA",this.flag=A,this.material=e};(Cu.prototype=Object.create(Wg.prototype)).constructor=Cu,Cu.prototype.applyFilter=function(A,e){var t=this;this.conditions instanceof Array?A.matchConditions(this.conditions,(function(e,i){t.flag===i&&(A.setWireFrameMaterial(e,t.material),e=null)})):Bh.warn("Conditions should be type of array.")};var yu=function(A,e){Gg.call(this),this.className="OverrideIdsForWireFrameFA",this.flag=A,this.material=e};(yu.prototype=Object.create(Gg.prototype)).constructor=yu,yu.prototype.applyFilter=function(A){this.ids instanceof Array?A.setWireFrameMaterial(this.ids,this.material,this.flag):Bh.warn("Ids should be type of array.")};var vu=function(){function A(e,t){cc(this,A),this.id=e,this.object=t}return dc(A,[{key:"destroy",value:function(){this.object=null}},{key:"_inDistanceRange",value:function(A,e){return A>=e.near&&e.far>=A}},{key:"raycast",value:function(A,e,t,i,o){}}]),A}();vu.prototype.destroy=function(){};var Iu=function(A){function e(A,t){return cc(this,e),Cc(this,fc(e).call(this,A,t))}return uc(e,A),dc(e,[{key:"raycast",value:function(A,e,t,i,o,n){var r=[];if(this.object.raycast(A,r),r.length>0){r.sort((function(A,e){return A.distance-e.distance}));for(var a=0,s=r.length;s>a;a+=1){var l=r[a];if(this._inDistanceRange(l.distance,t)&&!i.clipPoint(l.point)){n||(t.far=l.distance-uh.MinusEpsilon),o.push(l);break}}}}}]),e}(vu),Eu=function(A){function e(A,t){return cc(this,e),Cc(this,fc(e).call(this,A,t))}return uc(e,A),dc(e,[{key:"raycast",value:function(A,e,t,i,o,n){var r=this.object,a=r._indicesGroup;if(a){var s=a[e.userId];if(s){for(var l,c=!1,h=0,d=s.length;d>h;h+=1)if(s[h].nodeId===e.nodeId){l=s[h],c=!0;break}if(c){var p=[];if(r.raycastByIndices(A,p,l),p.length>0){p.sort((function(A,e){return A.distance-e.distance}));for(var g=0,u=p.length;u>g;g+=1){var f=p[g];if(this._inDistanceRange(f.distance,t)&&!i.clipPoint(f.point)){n||(t.far=f.distance-uh.MinusEpsilon),f.userId=l.userId,f.indexInfo=l,o.push(f);break}}}}}}}}]),e}(vu),Bu=function(A){function e(A,t){return cc(this,e),Cc(this,fc(e).call(this,A,t))}return uc(e,A),dc(e,[{key:"raycast",value:function(A,e,t,i,o,n){var r=[];if(this.object.raycastByIndices(A,r,null,e.matrix),r.length>0){r.sort((function(A,e){return A.distance-e.distance}));for(var a=0,s=r.length;s>a;a+=1){var l=r[a];if(this._inDistanceRange(l.distance,t)&&!i.clipPoint(l.point)){n||(t.far=l.distance-uh.MinusEpsilon),l.userId=e.userId,l.matrix=e.matrix,o.push(l);break}}}}}]),e}(vu),xu=function(){this._filterImpl=new pu;var A=[],e=[],t=null,i=null,o=this._filterImpl.getMaterialSelector(),n=new mu,r=new uu,a=new gu(o);this.observerForSceneState=null,this.setObserverForSceneState=function(A){this.observerForSceneState=A},this.setSceneStateHelper=function(A){},this.getFilterActionList=function(){return A},this.getModelFilterActionList=function(){return e},this.addModel=function(A){r.add(A)},this.removeModel=function(A){r.remove(A)},this.clearFilterActionList=function(){A=[]},this.clearModelFilterActionList=function(){e=[]},this.initFilterManager=function(A){n.init(A)},this.reinitFilterManager=function(A){n.reinit(A)},this.clearFilterManager=function(){n.clearData()};var s=!1;this.isStateChanged=function(){return s},this.enableStateChanged=function(){s=!0},this.disableStateChanged=function(){s=!1},this.getIsolateFilterAction=function(){return t},this.getModelIsolateFilterAction=function(){return i},this.setIsolateAction=function(A){(t=A).apply()},this.getVisibleComponentsBbox=function(){return n.getVisibleComponentsBbox()},this.pushBack=function(e){var i=e.getClassName();"IsolateIdsFA"===i||"IsolateConditionFA"===i?t=e:A.push(e),s=!0,e.applyFilter(n)},this.pushModelBack=function(A){var t=A.getClassName();"IsolateIdsFA"===t||"IsolateConditionFA"===t?i=A:e.push(A),s=!0,A.applyFilter(r)};var l=function(e){for(var t=[],i=0;A.length>i;){var o=A[i];e===o.getClassName()?(t=t.concat(o.ids),A.splice(i,1)):i+=1}return t},c=function(A){for(var t=0;e.length>t;){A===e[t].getClassName()?e.splice(t,1):t+=1}};function h(A,e){var t=e||"";return A.map((function(A){var e=A.clone();for(var i in e.name+="_"+t,A)A.hasOwnProperty(i)&&(A[i]instanceof d||A[i]instanceof ut)&&(e[i]=A[i].clone(),e[i].needsUpdate=!0);return e}))}function p(A,e,t,i,o,n,r){var a=Boolean(r||0===r),s=[];a&&!Array.isArray(r)&&(r=[r]);var l=!0,c=!1,h=void 0;try{for(var d,p=o[Symbol.iterator]();!(l=(d=p.next()).done);l=!0){var g=d.value;A._filterImpl.getMaterialByName(g.name)||A._filterImpl.addOverrideMaterial(g)}}catch(A){c=!0,h=A}finally{try{l||null==p.return||p.return()}finally{if(c)throw h}}var u=t[0],f=u.materialId;if(u.originMId===f&&(u.originMId=[].concat(f)),null===u.material)for(var m=0,C=f.length;C>m;m+=1)s[m]=e.models[u.model.modelKey].materialManager.getMaterialById(f[m]);else s=u.material;for(var y=null,v=null,I=0,E=s.length;E>I;I+=1){if(a){if(!r[I])break;y=r[I].compMatOrder,v=r[I].replMatOrder}else y=v=I;if(!o[v]||y>=o.length){o[v]?console.log('构件材质数组越界,越界位置:{"componentKey":'.concat(i,',"order":').concat(y,"}")):console.log('替换材质数组越界,越界位置:{"componentKey":'.concat(i,',"order":').concat(v,"}"));break}s[y]=o[v],f[y]=o[v].name}var B=new qg(!0,s);B.ids=[u.componentKey],n[u.componentKey]=s,A.pushBack(B)}function g(A,e,t,i,o,n,r){var a,s=[];(a=Boolean(r||0===r))&&!Array.isArray(r)&&(r=[r]);var l=!0,c=!1,h=void 0;try{for(var d,p=o[Symbol.iterator]();!(l=(d=p.next()).done);l=!0){A._filterImpl.updateOverrideMaterial(d.value)}}catch(A){c=!0,h=A}finally{try{l||null==p.return||p.return()}finally{if(c)throw h}}for(var g=0,u=t.length;u>g;g+=1){var f=t[g],m=t[0].material;if(null===m)s[g]=e.models[f.model.modelKey].materialManager.getMaterialById(f.materialId),s[g].materialId=f.materialId;else if(Array.isArray(m)){s[g]=m[g]}else s[g]=m}for(var C=null,y=null,v=0,I=s.length;I>v;v+=1){if(a){if(!r[v])break;C=r[v].compMatOrder,y=r[v].replMatOrder}else C=y=v;if(!o[y]||C>=t.length){o[y]?console.log('构件材质数组越界,越界位置:{"componentKey":'.concat(i,',"order":').concat(C,"}")):console.log('替换材质数组越界,越界位置:{"componentKey":'.concat(i,',"order":').concat(y,"}"));break}var E=t[C].nodeId,B=s[C].mapNodeIdToOrigMatId&&s[C].mapNodeIdToOrigMatId[E]?s[C].mapNodeIdToOrigMatId[E]:s[C].materialId;t[C].mesh.geometry.getAttribute("uv")||null===o[y].map&&null===o[y].aoMap?(s[C]=o[y],s[C].mapNodeIdToOrigMatId||(s[C].mapNodeIdToOrigMatId={}),s[C].materialId=o[y].name,s[C].mapNodeIdToOrigMatId[E]=B):console.log('构件node缺少uv:{"componentKey":'.concat(i,',"order":').concat(y,",nodeId:").concat(t[C].nodeId,"}"))}var x=new qg(!0,s);x.ids=[i],n&&(n[i]=s),A.pushBack(x)}function u(A,e,t){var i=A.models[e],o=i._handler.defaultManager.meshManager,n=i._handler.instancedManager.meshManager,r=i.loader.getDescriptor(),a=n.getNodeIdxMapByUserId(t),s=i.group.children.find((function(A){return"Geometry"===A.name}));s||((s=new Xi).name="Geometry",i.group.add(s));var l=new Xi,c=[];s.add(l);var h=r.mapNodeInfoByComponentKey[t],d=function(r){var s=a[r][0],d=n.getInstanceGeometries(r);d[0].attributes.vState.array[s]=-1,d[0].attributes.vState.needsUpdate=!0;var p=new he;d[0].removed||(d[0].removed={}),d[0].removed[s]=!0;for(var g=d[0].attributes.position.array,u=[],f=new y,m=n.matrixInfoMapFromUserId[t][r][0].matrix,C=0,v=g.length;v>C;C+=3)f.set(g[C],g[C+1],g[C+2]).applyMatrix4(m),u.push(f.x,f.y,f.z);d[0].attributes.uv&&p.setAttribute("uv",d[0].attributes.uv.clone()),d[0].attributes.normal&&p.setAttribute("normal",d[0].attributes.normal.clone());var I=d[0].index.clone();p.setAttribute("position",new YA(new Float32Array(u),3)),p.setIndex(I);var E=n.getMaterialIdByMeshId(r),B=n.manager.model.materialManager.getInstanceMaterialById(E)[0],x=Kd.getMaterialParameters(B),S=Kd.createStandardMaterial(x),w=new Ue(p,S),M=r.split("&")[1],b=E+"_"+s+"_cm",U="",F=!0,K=!1,Q=void 0;try{for(var R,T=h[Symbol.iterator]();!(F=(R=T.next()).done);F=!0){var k=R.value;k.geometryId!==M&&k.geometryId.toString()!==M||(U=k.nodeId,k.instanceOrNot=!1,k.isBatched=!1,k.mesh=w,k.instancedRenderOrder=s,k.RenderTypeChange=!0,k.materialId=b,k.uv=!0,c.push(k))}}catch(A){K=!0,Q=A}finally{try{F||null==T.return||T.return()}finally{if(K)throw Q}}var D=b+"&1&meshes";l.add(w),w.geometry.computeBoundingBox(),w.modelKey=e;var L=pc({},t,[{boundingBox:w.geometry.boundingBox,indexCount:I.count,indexStart:0,lightmapIdx:void 0,nodeId:U,positionCount:p.attributes.position.count,positionStart:0,userId:t}]);o.mapMaterialIdToMergedNode[D]=[{geometry:p,indices:L,mesh:w,RenderTypeChange:!0}],w._indicesGroup=L,w.computeBoundingBox=function(){var A=this.matrixWorld,e=new aA;return e.copy(this.geometry.boundingBox),e.applyMatrix4(A),e},w.intersectBoxWithDistanceByIndices=function(A){return A.ray.intersectBoxWithDistance(this.computeBoundingBox())},w.raycastByIndices=function(A,e){w.raycast(A,e)},i.materialManager.materials[b]=S,A.addMeshToOctantMap(e,D,new Eu(D,w))};for(var p in a)d(p);return A.octantToObjectMap[e].info[t]=c,r.mapNodeInfoByCategory[1]||(r.mapNodeInfoByCategory[1]={}),r.mapNodeInfoByCategory[1][t]=c,delete r.instancedComponent[t],delete r.mapNodeInfoByCategory[0][t],delete n.nodeIdxMapFromUserId[t],o.getPickingNodeGenerator().clearData(),l}this.showAll=function(){l("VisibleIdsFA"),l("VisibleConditionFA"),n.clearVisible(),n.calculateVisibleComponentsBbox(),this.enableStateChanged()},this.showAllModel=function(){c("VisibleIdsFA"),r.clearVisible(),this.enableStateChanged()},this.hideAll=function(){var A=new Pg(!1,!1);A.ids=[],this.pushBack(A)},this.hideAllModel=function(){var A=new Pg(!1,!1);A.ids=[],this.pushModelBack(A)},this.getObjectInfoManager=function(){return n},this.getModelInfoManager=function(){return r},this.getMatchIds=function(A){return n.getMatchIds(A)},this._isVisible=function(A){return!n.isHidden(A.userId)},this._isModelVisible=function(A){return!r.isHidden(A)},this._isTransparent=function(A){return n.isTransparent(A.userId)},this._isModelTransparent=function(A){return r.isTransparent(A)},this._isModelPickable=function(A){return!r.isFrozen(A)||vc.EnableSelectionByTranslucent},this._isSelectable=function(A){if(vc.EnableSelectionByTranslucent)return!0;var e=A.userId;return!n.isFrozen(e)&&this._filterImpl._isSelectableById(e)},this._isPickable=function(A){var e=A.userId;return this.isComponentActive(e)&&this._filterImpl._isSelectableById(e)&&(!n.isFrozen(e)||vc.EnableSelectionByTranslucent)},this._isSelectableById=function(A){return!!vc.EnableSelectionByTranslucent||!n.isFrozen(A)&&this._filterImpl._isSelectableById(A)},this._getOverrideMaterial=function(A){var e=A.userId;return n.isFrozen(e)?this._filterImpl.getFrozonMaterial():n.getMaterial(e)},this._getModelOverrideMaterial=function(A){return r.isFrozen(A)?this._filterImpl.getFrozonMaterial():r.getMaterial(A)},this._getMaterialName=function(A){return this._filterImpl._getMaterialName(A)},this._getMaterialByName=function(A){return this._filterImpl._getMaterialByName(A)},this._hasOverrideMaterial=function(A){return n.hasOverrideMaterial(A.userId)},this._hasModelOverrideMaterial=function(A){return r.hasOverrideMaterial(A)},this._hasHighPriorityOverrideMaterial=function(A){return this._filterImpl._hasHighPriorityOverrideMaterial(A)},this._isHiddenFileId=function(A){return this._filterImpl._isHiddenFileId(A)},this._isRenderPromotion=function(A){return this._filterImpl._isRenderPromotion(A)},this._isRenderWithBoardline=function(A){return this._filterImpl._isRenderWithBoardline(A)},this._hasHiddenFileIdFilter=function(){return this._filterImpl._hasHiddenFileIdFilter()},this._hasVisibleFilter=function(){return n.hasObjectHidden()},this._hasPickableFilter=function(){return n.hasObjectCantSelected()||this._filterImpl._hasPickableFilter()},this._hasTransparentFilter=function(){return n.hasObjectTransparent()},this._hasOverrideMaterialFilter=function(){return n.hasOverrideMaterial()},this._hasModelVisibleFilter=function(){return r.hasObjectHidden()},this._hasModelSelectableFilter=function(){return r.hasObjectCantSelected()},this._hasModelTransparentFilter=function(){return r.hasObjectTransparent()},this._hasModelOverrideMaterialFilter=function(){return r.hasOverrideMaterial()},this._hasLowPriorityOverride=function(){return this._filterImpl._hasLowPriorityOverride()},this._hasRenderPromotionFilter=function(){return this._filterImpl._hasRenderPromotionFilter()},this._hasRenderWithBoardlineFilter=function(){return this._filterImpl._hasRenderWithBoardlineFilter()},this.saveState=function(){return a.saveState(this)},this.loadState=function(A){a.loadState(A,this)},this.clear=function(){n.resetAll(),s=!0},this.clearAll=function(){return this.enableStateChanged(),this._filterImpl.clearAll()},this.clearIsolate=function(){n.clearIsolates()},this.clearFrozenList=function(){return this.enableStateChanged(),this._filterImpl.clearFrozenList()},this.addToFrozenList=function(A){return this.enableStateChanged(),this._filterImpl.addToFrozenList(A)},this.removeFromFrozenList=function(A){return this.enableStateChanged(),this._filterImpl.removeFromFrozenList(A)},this.setFrozenList=function(A){return this.enableStateChanged(),this._filterImpl.setFrozenList(A)},this.setFrozenConditions=function(A){this.enableStateChanged(),this._filterImpl.setFrozenConditions(A)},this.getFrozenConditions=function(){return this._filterImpl.getFrozenConditions()},this.clearFrozenConditions=function(){this.enableStateChanged(),this._filterImpl.clearFrozenConditions()},this.clearFrozen=function(){this.enableStateChanged(),this.clearFrozenList(),this.clearFrozenConditions()},this.clearAllIdList=function(){return this.enableStateChanged(),this._filterImpl.clearAllIdList()},this.clearIdList=function(A){return this.enableStateChanged(),this._filterImpl.clearIdList(A)},this.addToIdList=function(A,e){return this.enableStateChanged(),this._filterImpl.addToIdList(A,e)},this.removeFromIdList=function(A,e){return this.enableStateChanged(),this._filterImpl.removeFromIdList(A,e)},this.setIdList=function(A,e){return this.enableStateChanged(),this._filterImpl.setIdList(A,e)},this.clearAllOverrideList=function(){l("OverrideIdsFA"),l("OverrideConditionFA"),n.clearMaterial();for(var e=0,t=A.length;t>e;e+=1){var i=A[e];"WireframeIdsFA"===i.getClassName()&&i.applyFilter(n)}this.enableStateChanged()},this.clearModelAllOverrideList=function(){c("OverrideIdsFA"),r.clearMaterial(),this.enableStateChanged()},this.clearOverrideList=function(A){return this.enableStateChanged(),this._filterImpl.clearOverrideList(A)},this.addToOverrideList=function(A,e,t){return this.enableStateChanged(),this._filterImpl.addToOverrideList(A,e,t)},this.removeFromOverrideList=function(A,e){return this.enableStateChanged(),this._filterImpl.removeFromOverrideList(A,e)},this.setOverrideList=function(A,e,t){return this.enableStateChanged(),this._filterImpl.setOverrideList(A,e,t)},this.addToOverrideListByColor=function(A,e){var t=null;if(e){var i=this._filterImpl.getMaterialNameByColor(e);t=this._filterImpl.getMaterialByName(i)}var o=new qg(!0,t);o.ids=A,this.pushBack(o)},this.addToOverrideListByCustomerMaterial=function(A,e,t,i,o){var n=this,r={};Array.isArray(t)||(t=[t]);var a=t;return e.forEach((function(e){for(var s in e)i||(a=h(t,s)),e[s][0].isBatched||e[s][0].instanceOrNot||e[s][0].RenderTypeChange?!e[s][0].instanceOrNot&&e[s][0].isBatched||e[s][0].RenderTypeChange?g(n,A,e[s],s,a,r,o):e[s][0].instanceOrNot&&e[s][0].isBatched&&(u(A,e[s][0].model.modelKey,s),g(n,A,e[s],s,a,r,o)):p(n,A,e[s],s,a,r,o)})),r},this.addToModelOverrideListByColor=function(A,e){var t=null;if(e){var i=this._filterImpl.getMaterialNameByColor(e);t=this._filterImpl.getMaterialByName(i)}var o=new qg(!0,t);o.ids=A,this.pushModelBack(o)},this.addToOverrideListByConditions=function(A,e){var t=null;if(e){var i=this._filterImpl.getMaterialNameByColor(e);t=this._filterImpl.getMaterialByName(i)}var o=new zg(!0,t);o.conditions=A,this.pushBack(o)},this.addToOverrideListByConditions=function(A,e){var t=null;if(e){var i=this._filterImpl.getMaterialNameByColor(e);t=this._filterImpl.getMaterialByName(i)}var o=new zg(!0,t);o.conditions=A,this.pushBack(o)},this.addToOverrideListByMaterial=function(A,e){this._filterImpl.addOverrideMaterial(e);var t=new zg(!0,e);t.conditions=A,this.pushBack(t)},this.setOverrideListByColor=function(A,e,t){for(var i=0;e.length>i;i+=1){var o=this._filterImpl.getMaterialNameByColor(t),r=this._filterImpl.getMaterialByName(o);n.setMaterial(e[i],r)}},this.getVisibleComponentSet=function(A){for(var e={},t=Object.keys(A),i=0;t.length>i;i+=1)this._isVisible({userId:t[i]})&&(e[t[i]]=!0);return e},this.clearAllWireframeList=function(){n.clearMaterialByKey(l("WireframeIdsFA")),this.enableStateChanged()},this.addToWireframeByWireframe=function(A,e){var t=null;if(e){var i=this._filterImpl.getMaterialNameByWireframe(e);t=this._filterImpl.getMaterialByName(i)}var o=new jg(!0,t);o.ids=A,this.pushBack(o)},this.clearAllUserList=function(){return this.enableStateChanged(),this._filterImpl.clearAllUserList()},this.clearUserListByType=function(A){return this.enableStateChanged(),this._filterImpl.clearUserListByType(A)},this.clearUserList=function(A,e){return this.enableStateChanged(),this._filterImpl.clearUserList(A,e)},this.addToUserList=function(A,e,t,i){return this.enableStateChanged(),this._filterImpl.addToUserList(A,e,t,i)},this.removeFromUserList=function(A,e,t){this.enableStateChanged(),this._filterImpl.removeFromUserList(A,e,t)},this.setUserList=function(A,e,t,i){this.enableStateChanged(),this._filterImpl.setUserList(A,e,t,i)},this.isIsolate=function(){var A=n.getObjectsMap();for(var e in A){if(A.hasOwnProperty(e))var t=A[e];for(var i in t){var o=n.isIsolateHide(i);if(o|=n.isIsolateTransparent(i))return!0}}return!1},this.isFiltering=function(){var A=this.filterActionList.length>0;return this.isIsolate()||A},this.getFrozonMaterial=function(){return this._filterImpl.getFrozonMaterial()},this.setIsolateMaterial=function(A){this.enableStateChanged(),this._filterImpl.setIsolateMaterial(A)},this.getIsolateMaterial=function(){return this._filterImpl.getIsolateMaterial()},this.resetIsolateMaterial=function(){this.enableStateChanged(),this._filterImpl.resetIsolateMaterial()},this.clearAllIsolateList=function(){n.clearIsolates()},this.clearIsolation=function(){n.clearIsolates(),t=null,s=!0},this.clearModelIsolation=function(){r.clearIsolates(),i=null,s=!0},this.addToIsolateList=function(A,e){var t=new Hg("HideOthers"===e);t.ids=A.concat(),this.pushBack(t),this.clearFilterActionList()},this.removeFromIsolateList=function(A){t&&Array.isArray(A)&&(A.forEach((function(A){t.ids.remove(A)})),1>t.ids.length?(n.clearIsolates(),t=null):t.applyFilter(n),this.enableStateChanged())},this.removeModelFromIsolateList=function(A){i&&Array.isArray(A)&&(A.forEach((function(A){i.ids.remove(A)})),1>i.ids.length?(r.clearIsolates(),i=null):i.applyFilter(r),this.enableStateChanged())},this.setIsolateList=function(A,e){var t=new Hg(e);t.ids=A.concat(),this.pushBack(t)},this.setModelIsolateList=function(A,e){var t=new Hg(e);t.ids=A.concat(),this.pushModelBack(t)},this.setIsolateConditions=function(A,e){var t=new Xg(e===Nc.HIDDEN_OTHERS);t.conditions=A,this.pushBack(t),this.clearFilterActionList()},this.getIsolateConditions=function(A){return this._filterImpl.getIsolateConditions(A)},this.clearIsolateConditions=function(A){this.enableStateChanged(),this._filterImpl.clearIsolateConditions(A)},this.clearAllIsolateConditions=function(){this.enableStateChanged(),this._filterImpl.clearAllIsolateConditions()},this.setConditions=function(A,e){if(0===A){n.hideAll();var t=new Jg(!0,!0);t.conditions=e,this.pushBack(t)}3===A&&this._filterImpl.setConditions(A,e)},this.getConditions=function(A){return this._filterImpl.getConditions(A)},this.clearConditions=function(A){this.enableStateChanged(),this._filterImpl.clearConditions(A)},this.clearAllConditions=function(){this.enableStateChanged(),this._filterImpl.clearAllConditions()},this.makeSceneTranslucent=function(){this.enableStateChanged(),this._filterImpl.makeSceneTranslucent()},this.cancelSceneTranslucent=function(){this.enableStateChanged(),this._filterImpl.cancelSceneTranslucent()},this.hideScene=function(){this.enableStateChanged(),this._filterImpl.hideScene()},this.showScene=function(){this.enableStateChanged(),this._filterImpl.showScene()},this.setSceneState=function(A){this.enableStateChanged(),this._filterImpl.setSceneState(A)},this.getSceneState=function(){return this._filterImpl.getSceneState()},this.cancelHidden=function(){this.enableStateChanged(),this._filterImpl.cancelHidden()},this.cancelTranslucent=function(){this.enableStateChanged(),this._filterImpl.cancelTranslucent()},this.hideByIds=function(A){var e=new Pg(!0,!1);e.ids=A,this.pushBack(e)},this.hideModelByIds=function(A){var e=new Pg(!0,!1);e.ids=A,this.pushModelBack(e)},this.hideByConditions=function(A){var e=new Jg(!0,!1);e.conditions=A,this.pushBack(e)},this.hideOthersByConditions=function(A){var e=new Jg(!1,!1);e.conditions=A,this.pushBack(e)},this.showByIds=function(A){var e=new Pg(!0,!0);e.ids=A,this.pushBack(e)},this.showModelByIds=function(A){var e=new Pg(!0,!0);e.ids=A,this.pushModelBack(e)},this.showByConditions=function(A){var e=new Jg(!0,!0);e.conditions=A,this.pushBack(e)},this.makeTranslucentByIds=function(A){var e=new Yg(!0,!1);e.ids=A,this.pushBack(e)},this.makeModelTranslucentByIds=function(A){var e=new Yg(!0,!1);e.ids=A,this.pushModelBack(e)},this.makeTranslucentByConditions=function(A){var e=new Zg(!0,!1);e.conditions=A,this.pushBack(e)},this.opaqueByIds=function(A){var e=new Yg(!0,!0);e.ids=A,this.pushBack(e)},this.opaqueModelByIds=function(A){var e=new Yg(!0,!0);e.ids=A,this.pushModelBack(e)},this.opaqueByConditions=function(A){var e=new Zg(!0,!0);e.conditions=A,this.pushBack(e)},this.setFrozonMaterial=function(A){this._filterImpl.setFrozonMaterial(A)},this.makeTranslucentOthersByIds=function(A){var e=new Yg(!1,!1);e.ids=A,this.pushBack(e)},this.makeTranslucentOthersModelByIds=function(A){var e=new Yg(!1,!1);e.ids=A,this.pushModelBack(e)},this.opaqueAll=function(){l("TransparentIdsFA"),l("TransparentConditionFA"),n.clearTransparent(),this.enableStateChanged()},this.opaqueAllModel=function(){c("TransparentIdsFA"),c("TransparentConditionFA"),r.clearTransparent(),this.enableStateChanged()},this.deactivateByIds=function(A){n.deactivateByIds(A),this.observerForSceneState&&this.observerForSceneState(A),this.enableStateChanged()},this.activateByIds=function(A){n.activateByIds(A),this.enableStateChanged()},this.clearInactivatedIdMap=function(){n.clearInactivatedIdMap()},this.getInactivatedIdMap=function(){return n.getInactivatedIdMap()},this.deactivateAll=function(){n.deactivateAll()},this.activateAll=function(){n.activateAll()},this.isComponentActive=function(A){return n.isActive(A)},this.getFilterType=function(){return this._filterImpl._getFilterType()},this._hasOverrideMaterialForWireFrame=function(A){return n.hasOverrideMaterialForWireFrame(A.name)},this._hasOverrideMaterialFilterForWireFrame=function(){return n.hasOverrideMaterialForWireFrame()},this._getOverrideMaterialForWireFrame=function(A){return n.getWireFrameMaterial(A.name)},this._getOverrideWireFrameMaterial=function(A){return n.getWireFrameMaterial(A.name)},this.addToOverrideListForWireFrameByColor=function(A,e){var t=null;if(e){var i=this._filterImpl.getMaterialNameByColor(e);t=this._filterImpl.getMaterialByName(i)}var o=new yu(!0,t);o.ids=A,this.pushBack(o)},this.addToOverrideListForWireFrameByConditions=function(A,e){var t=null;if(e){var i=this._filterImpl.getMaterialNameByColor(e);t=this._filterImpl.getMaterialByName(i)}var o=new Cu(!0,t);o.conditions=A,this.pushBack(o)},this._getFilterObjectsKeys=function(A){return this._filterImpl._getFilterObjectsKeys(A)},this.transparentComponentsByKey=function(A,e,t){},this.closeOrigMatModelTransparent=function(A,e){var t=A.models[e].materialManager.materials;for(var i in t){var o=t[i];void 0!==o._origTransparent&&(o.transparent=o._origTransparent,o.needsUpdate=!0),void 0!==o._origOpacity&&(o.opacity=o._origOpacity,o.needsUpdate=!0)}var n=A.models[e].materialManager.instanceMaterials;for(var r in n)n[r].forEach((function(A){void 0!==A._origTransparent&&(A.transparent=A._origTransparent,A.needsUpdate=!0),void 0!==A._origOpacity&&(A.opacity=A._origOpacity,A.needsUpdate=!0)}))},this.transparentModelOrigMatByKey=function(A,e){var t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:.5,i=A.models[e].materialManager.materials;for(var o in i){var n=i[o];void 0===n._origTransparent&&(n._origTransparent=n.transparent),void 0===n._origOpacity&&(n._origOpacity=n.opacity),n.transparent=!0,n.opacity=t,n.needsUpdate=!0}var r=A.models[e].materialManager.instanceMaterials;for(var a in r)r[a].forEach((function(A){void 0===A._origTransparent&&(A._origTransparent=A.transparent),void 0===A._origOpacity&&(A._origOpacity=A.opacity),A.transparent=!0,A.opacity=t,A.needsUpdate=!0}))}};var Su=function(A){ji.call(this),this.type="InstancedDepthMaterial",this.uniforms=it.depth.uniforms,this.vertexShader=function(A){return A.replace("#include ","\n vec4 mvPosition = modelViewMatrix * vec4(getInstancePosition(transformed), 1.0);\n gl_Position = projectionMatrix * mvPosition;\n ")}(it.depth.vertexShader.replace("void main() {","\n attribute float vState; \n attribute vec4 aColor; \n attribute vec3 mcol0;\n attribute vec3 mcol1;\n attribute vec3 mcol2;\n attribute vec3 mcol3;\n #if defined(USE_MAP)\n attribute vec2 muvCol0;\n attribute vec2 muvCol1;\n attribute vec2 muvCol2;\n #endif\n \n varying float vfState;\n \n vec3 getInstancePosition(vec3 position) {\n return vec3(mat4(vec4(mcol0, 0.0),\n vec4(mcol1, 0.0),\n vec4(mcol2, 0.0),\n vec4(mcol3, 1.0)) * vec4(position, 1.0));\n }\n \n void main() {\n vfState = vState;\n ")),this.fragmentShader=it.depth.fragmentShader.replace("void main() {","\n varying float vfState; \n void main() {\n if (vfState <= -0.99 && vfState >= -1.01) discard;\n \n "),void 0!==A&&this.setValues(A)};function wu(A,e,t){var i=this,o=!1,n=0,r=0,a=void 0,s=[];this.onStart=void 0,this.onLoad=A,this.onProgress=e,this.onError=t,this.itemStart=function(A){r+=1,!1===o&&void 0!==i.onStart&&i.onStart(A,n,r),o=!0},this.itemEnd=function(A){n+=1,void 0!==i.onProgress&&i.onProgress(A,n,r),n===r&&(o=!1,void 0!==i.onLoad&&i.onLoad())},this.itemError=function(A){void 0!==i.onError&&i.onError(A)},this.resolveURL=function(A){return a?a(A):A},this.setURLModifier=function(A){return a=A,this},this.addHandler=function(A,e){return s.push(A,e),this},this.removeHandler=function(A){var e=s.indexOf(A);return-1!==e&&s.splice(e,2),this},this.getHandler=function(A){for(var e=0,t=s.length;t>e;e+=2){var i=s[e],o=s[e+1];if(i.global&&(i.lastIndex=0),i.test(A))return o}return null}}(Su.prototype=Object.create(ji.prototype)).constructor=Su;var Mu=new wu,bu=function(A){this.manager=null!=A?A:Mu,this.model=A.model,this.cacheViable=!0,this.modelKey=A.model.modelKey};Object.assign(bu.prototype,{_load:function(A,e,t,i){void 0===A&&(A=""),null!=this.path&&(A=this.path+A);var o=this,n=A.match(/^data:(.*?)(;base64)?,(.*)$/);if(n){var r=n[1],a=Boolean(n[2]),s=n[3];s=window.decodeURIComponent(s),a&&(s=window.atob(s));try{var l=null,c=(this.responseType||"").toLowerCase();switch(c){case"arraybuffer":case"blob":l=new ArrayBuffer(s.length);for(var h=new Uint8Array(l),d=0;s.length>d;d+=1)h[d]=s.charCodeAt(d);"blob"===c&&(l=new Blob([l],{type:r}));break;case"document":var p=new DOMParser;l=p.parseFromString(s,r);break;case"json":l=JSON.parse(s);break;default:l=s}window.setTimeout((function(){e&&e(l),o.manager.itemEnd(A)}),0)}catch(e){window.setTimeout((function(){i&&i(e),o.manager.itemEnd(A),o.manager.itemError(A)}),0)}}else{var g=new XMLHttpRequest;for(var u in g.open("GET",A,!0),g.addEventListener("load",(function(t){var n=t.target.response;if(200===this.status){var r=o.model.getStorage();if(null==n)return i&&i(t),o.manager.itemEnd(A),o.manager.itemError(A),void Bh.error("response 为 null");if(!(n instanceof ArrayBuffer||n instanceof Array||n instanceof Blob||n instanceof Object))try{n=JSON.parse(n)}catch(A){}if(n instanceof Blob&&mh.isIOSDevice()){var a=new FileReader;a.readAsDataURL(n),a.onloadend=function(t){r&&o.cacheViable&&r.put(A,t.target.result,o.modelKey,(function(){o.manager.progress.loaded+=1}),(function(){Bh.warn(A,"缓存失败"),o.manager.progress.failed+=1})),e&&e(t.target.result)}}else{if(r&&o.cacheViable)if(n.byteLength&&n.byteLength>12e7){for(var s=[],l=Math.floor(n.byteLength/4e7),c=0;l>=c;c+=1){o.manager.progress.total+=1;var h=null;h=c===l?n.slice(4e7*c):n.slice(4e7*c,4e7*(c+1));var d=A+"_"+c;s.push(d),r.put(d,h,o.modelKey,(function(){o.manager.progress.loaded+=1}),(function(){o.manager.progress.failed+=1}))}r.put(A,{split:!0,list:s,length:n.byteLength},o.modelKey,(function(){}),(function(){Bh.warn(A,"缓存失败")}))}else r.put(A,n,o.modelKey,(function(){o.manager.progress&&(o.manager.progress.loaded+=1)}),(function(){o.manager.progress&&(Bh.warn(A,"缓存失败"),o.manager.progress.failed+=1)}));e&&e(n)}o.manager.itemEnd(A)}else 0===this.status?(Bh.warn("THREE.FileLoader: HTTP Status 0 received."),e&&e(n),o.manager.itemEnd(A)):(i&&i(t),o.manager.itemEnd(A),o.manager.itemError(A))}),!1),"function"==typeof t&&g.addEventListener("progress",(function(A){t(A)}),!1),g.addEventListener("error",(function(e){i&&i(e),o.manager.itemEnd(A),o.manager.itemError(A)}),!1),void 0!==this.responseType&&(g.responseType=this.responseType),void 0!==this.withCredentials&&(g.withCredentials=this.withCredentials),g.overrideMimeType&&g.overrideMimeType(void 0!==this.mimeType?this.mimeType:"text/plain"),this.requestHeader)g.setRequestHeader(u,this.requestHeader[u]);g.send(null)}return o.manager.itemStart(A),g},load:function(A,e,t,i){void 0===A&&(A=""),null!=this.path&&(A=this.path+A);return this._load.call(this,A,e,t,i)},setPath:function(A){return this.path=A,this},setResponseType:function(A){return this.responseType=A,this},setWithCredentials:function(A){return this.withCredentials=A,this},setMimeType:function(A){return this.mimeType=A,this},setCacheViable:function(A){return this.cacheViable=A,this},setRequestHeader:function(A){return this.requestHeader=A,this}});var Uu=function(A){this.compArr=[],this.compArr=A,Bh.debug(this.compArr)};Uu.prototype={constructor:Uu,getComponent:function(A){}};var Fu,Ku,Qu,Ru,Tu={EmptyGeometry:new he,UnitCylinderInstance:new hr(1,1,1,8,1,!1),UnitBoxInstance:new Ne(1,1,1),UnitTextureCylinder:null,UnitTextureBox:null,initializeUnitInstances:function(){Tu.UnitCylinderInstance.boundingBox||Tu.UnitCylinderInstance.computeBoundingBox(),Tu.UnitBoxInstance.boundingBox||Tu.UnitBoxInstance.computeBoundingBox()},destroyUnitInstances:function(){Tu.UnitCylinderInstance.dispose(),Tu.UnitBoxInstance.dispose()},getBoxData:function(A){for(var e=[[],[],[],[],[],[]],t=0;4>t;t+=1)e[0].push(-1,0,0);for(t=0;4>t;t+=1)e[1].push(0,-1,0);for(t=0;4>t;t+=1)e[2].push(0,0,-1);for(t=0;4>t;t+=1)e[3].push(0,0,1);for(t=0;4>t;t+=1)e[4].push(0,1,0);for(t=0;4>t;t+=1)e[5].push(1,0,0);var i=[[],[],[],[],[],[]];return i[0]=i[2]=i[4]=[-.5,-.5,-.5,.5,.5,-.5,.5,.5],i[1]=i[3]=i[5]=[-.5,-.5,-.5,.5,.5,-.5,.5,.5],{vertex:[[-.5,-.5,-.5,-.5,-.5,.5,-.5,.5,-.5,-.5,.5,.5],[-.5,-.5,-.5,-.5,-.5,.5,.5,-.5,-.5,.5,-.5,.5],[-.5,-.5,-.5,-.5,.5,-.5,.5,-.5,-.5,.5,.5,-.5],[-.5,-.5,.5,-.5,.5,.5,.5,-.5,.5,.5,.5,.5],[-.5,.5,-.5,-.5,.5,.5,.5,.5,-.5,.5,.5,.5],[.5,-.5,-.5,.5,-.5,.5,.5,.5,-.5,.5,.5,.5]][A],normal:e[A],uv:i[A],index:[[0,1,2,3,2,1],[2,1,0,1,2,3],[0,1,2,3,2,1],[2,1,0,1,2,3],[0,1,2,3,2,1],[2,1,0,1,2,3]][A]}},getPipeData2:(Fu=[.5,0,.5,.353530875,.353530875,.5,0,.5,.5,-.353530875,.353530875,.5,-.5,0,.5,-.353530875,-.353530875,.5,0,-.5,.5,.353530875,-.353530875,.5,.5,0,.5,.5,0,-.5,.353530875,.353530875,-.5,0,.5,-.5,-.353530875,.353530875,-.5,-.5,0,-.5,-.353530875,-.353530875,-.5,0,-.5,-.5,.353530875,-.353530875,-.5,.5,0,-.5,.5,0,.5,.353530875,.353530875,.5,0,.5,.5,-.353530875,.353530875,.5,-.5,0,.5,-.353530875,-.353530875,.5,0,-.5,.5,.353530875,-.353530875,.5,.5,0,-.5,.353530875,.353530875,-.5,0,.5,-.5,-.353530875,.353530875,-.5,-.5,0,-.5,-.353530875,-.353530875,-.5,0,-.5,-.5,.353530875,-.353530875,-.5],Ku=[0,9,1,1,9,10,1,10,2,2,10,11,2,11,3,3,11,12,3,12,4,4,12,13,4,13,5,5,13,14,5,14,6,6,14,15,6,15,7,7,15,16,7,16,8,8,16,17,18,19,20,18,20,21,18,21,22,18,22,23,18,23,24,18,24,25,26,28,27,26,29,28,26,30,29,26,31,30,26,32,31,26,33,32],Qu=[1,0,0,.7,.7,0,0,1,0,-.7,.7,0,-1,0,0,-.7,-.7,0,0,-1,0,.7,-.7,0,1,0,0,1,0,0,.7,.7,0,0,1,0,-.7,.7,0,-1,0,0,-.7,-.7,0,0,-1,0,.7,-.7,0,1,0,0,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1],Ru=[-.5,.5,-.375,.5,-.25,.5,-.125,.5,0,.5,.125,.5,.25,.5,.375,.5,.5,.5,-.5,-.5,-.375,-.5,-.25,-.5,-.125,-.5,0,-.5,.125,-.5,.25,-.5,.375,-.5,.5,-.5,.5,0,.353530875,.353530875,0,.5,-.353530875,.353530875,-.5,0,-.353530875,-.353530875,0,-.5,.353530875,-.353530875,.5,0,.353530875,.353530875,0,.5,-.353530875,.353530875,-.5,0,-.353530875,-.353530875,0,-.5,.353530875,-.353530875],function(){return{vertex:Fu,normal:Qu,uv:Ru,index:Ku}}),getPipeData:function(A){(void 0===A||8>A)&&(A=8),A>256&&(A=256);var e=4*A+2,t=3*(4*A-4),i=A+1,o=1/A,n=6.28318530714/A,r=null,a=null,s=[];for(r=0;A>r;r+=1)s.push(.5*Math.cos(r*n)),s.push(.5*Math.sin(r*n));s.push(.5),s.push(0);var l=[];for(a=2*i,r=0;a>r;r+=2)l.push(s[r]),l.push(s[r+1]),l.push(.5);for(r=0;a>r;r+=2)l.push(s[r]),l.push(s[r+1]),l.push(-.5);for(a=2*A,r=0;a>r;r+=2)l.push(s[r]),l.push(s[r+1]),l.push(.5);for(r=a;r>0;r-=2)l.push(s[r]),l.push(s[r+1]),l.push(-.5);var c=[],h=A+1;for(r=0;A>r;r+=1)c.push(r),c.push(r+h),c.push(r+1),c.push(r+1),c.push(r+h),c.push(r+h+1);var d=2*i;for(r=1;A-1>r;r+=1)c.push(d),c.push(d+r),c.push(d+r+1);for(d+=A,r=1;A-1>r;r+=1)c.push(d),c.push(d+r),c.push(d+r+1);var p=[];for(r=A;r>=0;r-=1)p.push(r*o-.5),p.push(-.5);for(r=A;r>=0;r-=1)p.push(r*o-.5),p.push(.5);for(a=2*A,r=0;a>r;r+=2)p.push(s[r]),p.push(s[r+1]);for(r=a;r>0;r-=2)p.push(s[r]),p.push(s[r+1]);a=3*e;var g=[];for(r=0;a>r;r+=1)g.push(0);var u=null,f=null,m=null,C=new y,v=new y,I=new y,E=new y,B=new y;for(r=0;t>r;r+=3)f=3*c[r+1],m=3*c[r+2],C.fromArray(l,u=3*c[r]),v.fromArray(l,f),I.fromArray(l,m),E.subVectors(I,v),B.subVectors(C,v),E.cross(B),g[u]+=E.x,g[u+1]+=E.y,g[u+2]+=E.z,g[f]+=E.x,g[f+1]+=E.y,g[f+2]+=E.z,g[m]+=E.x,g[m+1]+=E.y,g[m+2]+=E.z;var x=new y;for(a=3*e,r=0;a>r;r+=3)x.fromArray(g,r),x.normalize(),g[r]=x.x,g[r+1]=x.y,g[r+2]=x.z;return{vertex:l,normal:g,uv:p,index:c,edges:A}},getInstancePipeData:function(A,e){var t=this.getPipeData(A);(void 0===A||8>A)&&(A=8),A>256&&(A=256);var i=2*(A+1),o=i+A,n=4*A+2,r=[[],[],[]];r[0]=t.vertex.slice(0,3*i),r[1]=t.vertex.slice(3*i,3*o),r[2]=t.vertex.slice(3*o,3*n);var a=[[],[],[]],s=A+1,l=0;for(l=0;A>l;l+=1)a[0].push(l),a[0].push(l+s),a[0].push(l+1),a[0].push(l+1),a[0].push(l+s),a[0].push(l+s+1);for(l=1;A-1>l;l+=1)a[1].push(0),a[1].push(l),a[1].push(l+1);for(l=1;A-1>l;l+=1)a[2].push(0),a[2].push(l),a[2].push(l+1);var c=[[],[],[]];c[0]=t.uv.slice(0,2*i),c[1]=t.uv.slice(2*i,2*o),c[2]=t.uv.slice(2*o,2*n);var h=[[],[],[]];return h[0]=t.normal.slice(0,3*i),h[1]=t.normal.slice(3*i,3*o),h[2]=t.normal.slice(3*o,3*n),{vertex:r[e],normal:h[e],uv:c[e],index:a[e]}},getUnitTextureCylinder:function(){if(null===Tu.UnitTextureCylinder){Tu.UnitTextureCylinder=new Array(3);for(var A=0;3>A;A+=1){var e=Tu.getInstancePipeData(32,A);Tu.UnitTextureCylinder[A]=new he,Tu.UnitTextureCylinder[A].setIndex(e.index),Tu.UnitTextureCylinder[A].addAttribute("position",new Ae(e.vertex,3)),Tu.UnitTextureCylinder[A].addAttribute("normal",new Ae(e.normal,3)),Tu.UnitTextureCylinder[A].addAttribute("uv",new Ae(e.uv,2))}}return Tu.UnitTextureCylinder},getUnitTextureBox:function(){if(null===Tu.UnitTextureBox){Tu.UnitTextureBox=new Array(6);for(var A=0;6>A;A+=1){var e=Tu.getBoxData(A);Tu.UnitTextureBox[A]=new he,Tu.UnitTextureBox[A].setIndex(e.index),Tu.UnitTextureBox[A].addAttribute("position",new Ae(e.vertex,3)),Tu.UnitTextureBox[A].addAttribute("normal",new Ae(e.normal,3)),Tu.UnitTextureBox[A].addAttribute("uv",new Ae(e.uv,2))}}return Tu.UnitTextureBox},getBoxBufferGeometryWithUvMatrices:function(A){for(var e=[],t=null,i=new l,o=new y,n=!!A,r=0;6>r;r+=1){t=new he;var a=Tu.getBoxData(r);if(n){var s=[];i.set(A[6*r],A[6*r+2],A[6*r+4],A[6*r+1],A[6*r+3],A[6*r+5],0,0,1);for(var c=0,h=a.uv.length;h>c;c+=2)o.set(a.uv[c],a.uv[c+1],1),o.applyMatrix3(i),s.push(o.x),s.push(o.y);t.addAttribute("uv",new Ae(s,2))}t.setIndex(new YA(Uint32Array.from(a.index),1)),t.addAttribute("position",new Ae(a.vertex,3)),t.addAttribute("normal",new Ae(a.normal,3)),e.push(t)}return Tu.mergeBufferGeometries2(e)},getPipeBufferGeometryWithUvMatrices:function(A){var e=Tu.getPipeData(32),t=e.edges,i=!(!A||18!==A.length),o=new he;if(i){for(var n=[],r=0,a=A.length;a>r;r+=6){var s=new l;s.set(A[6*r],A[6*r+2],A[6*r+4],A[6*r+1],A[6*r+3],A[6*r+5],0,0,1),n.push(s)}for(var c=[],h=new y,d=4*(t+1),p=d+2*t,g=0,u=e.uv.length;u>g;g+=2)h.set(e.uv[g],e.uv[g+1],1),h.applyMatrix3(d>g?n[0]:p>g?n[1]:n[2]),c.push(h.x),c.push(h.y);o.addAttribute("uv",new Ae(c,2))}return o.setIndex(new $A(e.index,1)),o.addAttribute("position",new Ae(e.vertex,3)),o.addAttribute("normal",new Ae(e.normal,3)),o},getGeometryFromBox3:function(A){var e=new he,t=[],i=[],o=A.min,n=A.max,r=o.x,a=o.y,s=o.z,l=n.x,c=n.y,h=n.z;return t.push(r,a,s),t.push(l,a,s),t.push(r,a,h),t.push(l,a,h),t.push(r,c,s),t.push(l,c,s),t.push(r,c,h),t.push(l,c,h),i.push(0,1,3),i.push(0,3,2),i.push(1,5,7),i.push(1,7,3),i.push(5,4,6),i.push(5,6,7),i.push(4,2,6),i.push(4,0,2),i.push(0,4,5),i.push(0,5,1),i.push(2,3,7),i.push(2,7,6),e.setIndex(new YA(new Uint32Array(i),1)),e.setAttribute("position",new YA(new Float32Array(t),3)),e},getWorldMatrixOfMesh:function(A){for(var e=[],t=A.parent;t;)e.push(t.matrix),t=t.parent;var i=new M;if(e.length>0){i=e[e.length-1];for(var o=e.length-2;o>=0;o-=1)i.multiply(e[o])}var n=new M;return n.multiplyMatrices(i,A.matrix),n},getWorldPositionOfMesh:function(A,e){e||(e=new M);var t=new M;t.getInverse(e);var i=A.clone();return i.applyMatrix4(t),i},getBoundingBoxWorldOfMesh:function(A,e){var t=A.boundingBox;t||(A.geometry.boundingBox||A.geometry.computeBoundingBox(),t=A.geometry.boundingBox);var i=t.clone();i.applyMatrix4(A.matrixWorld);var o=new M;return o.getInverse(e),i.applyMatrix4(o),i},getBoundingBoxByBuffer:function(A){for(var e=1/0,t=1/0,i=1/0,o=-1/0,n=-1/0,r=-1/0,a=new ph,s=0,l=A.length;l>s;s+=3){var c=A[s],h=A[s+1],d=A[s+2];e>c&&(e=c),t>h&&(t=h),i>d&&(i=d),c>o&&(o=c),h>n&&(n=h),d>r&&(r=d)}return a.min.set(e,t,i),a.max.set(o,n,r),a},mergeBufferGeometriesFromMeshs:function(A,e){for(var t=null!==A[0].geometry.index,i=new Set(Object.keys(A[0].geometry.attributes)),o=new Set(Object.keys(A[0].geometry.morphAttributes)),n={},r={},a=new he,s=0;A.length>s;s+=1){var l=A[s].geometry;if(t!==(null!==l.index))return null;for(var c in l.attributes){if(!i.has(c))return console.log("attributes not Used: ",c),null;void 0===n[c]&&(n[c]=[]),n[c].push(l.attributes[c])}for(var c in l.morphAttributes){if(!o.has(c))return null;void 0===r[c]&&(r[c]=[]),r[c].push(l.morphAttributes[c])}null!=l.userData&&(a.userData=a.userData||{},a.userData.mergedUserData=a.userData.mergedUserData||[],a.userData.mergedUserData.push(l.userData))}if(t){var h=0,d=[],p=0,g=0;for(s=0;A.length>s;s+=1){var u=A[s].geometry.index;if(h>0){u=u.clone();for(var f=0;u.count>f;f+=1)u.setX(f,u.getX(f)+h)}d.push(u),h+=A[s].geometry.attributes.position.count,void 0===e[A[s].userId]&&(e[A[s].userId]=[]),e[A[s].userId].push({nodeId:A[s].nodeId,indexStart:p,indexCount:u.count,positionStart:g,positionCount:A[s].geometry.attributes.position.count}),g+=A[s].geometry.attributes.position.count,p+=u.count}var m=this.mergeBufferAttributes(d);if(!m)return null;a.index=m}for(var c in n){var C=this.mergeBufferAttributes(n[c]);if(!C)return null;a.setAttribute(c,C)}for(var c in r){var y=r[c][0].length;if(0===y)break;a.morphAttributes=a.morphAttributes||{},a.morphAttributes[c]=[];for(s=0;y>s;s+=1){var v=[];for(f=0;r[c].length>f;f+=1)v.push(r[c][f][s]);var I=this.mergeBufferAttributes(v);if(!I)return null;a.morphAttributes[c].push(I)}}return a},mergeBufferGeometries:function(A,e){for(var t=null!==A[0].index,i=new Set(Object.keys(A[0].attributes)),o={},n=new he,r=0;A.length>r;r+=1){var a=A[r];if(t!==(null!==a.index))return null;for(var s in a.attributes){if(!i.has(s))return null;void 0===o[s]&&(o[s]=[]),o[s].push(a.attributes[s])}}if(t){var l=0,c=[];for(r=0;A.length>r;r+=1){var h=A[r].index;if(l>0){h=h.clone();for(var d=0;h.count>d;d+=1)h.setX(d,h.getX(d)+l)}c.push(h),l+=A[r].attributes.position.count}var p=this.mergeBufferAttributes(c);if(!p)return null;n.index=p}for(var s in o){var g=this.mergeBufferAttributes(o[s],e);if(!g)return null;n.setAttribute(s,g)}return n},reducedGeometry:function(A,e){for(var t={},i=0,o=e.length;o>i;i+=1){var n=e[i];t[n]||(t[n]=[]),t[n].push(i)}var r=0,a=new Float32Array(3*Object.keys(t).length);for(var s in t){for(var l=t[s],c=0,h=l.length;h>c;c+=1)e[l[c]]=r,a[3*r]=A[3*s],a[3*r+1]=A[3*s+1],a[3*r+2]=A[3*s+2];r+=1}return{buffer:a,index:e}},mergeBufferAttributes:function(A,e){for(var t=null,i=null,o=null,n=0,r=0;A.length>r;r+=1){var a=A[r];if(a.isInterleavedBufferAttribute)return null;if(null===t&&(t=a.array.constructor),t!==a.array.constructor)return null;if(null===i&&(i=a.itemSize),i!==a.itemSize)return null;if(null===o&&(o=a.normalized),o!==a.normalized)return null;n+=a.array.length}for(var s=new t(n),c=0,h=!1,d=0;A.length>d;d+=1){if(e&&!e[d].equals(Bc)&&("position"===A[d].name||"normal"===A[d].name)){if("position"===A[d].name&&e[d].applyToBufferAttribute(A[d]),"normal"===A[d].name)(new l).getNormalMatrix(e[d]).applyToBufferAttribute(A[d]);h=!0}if(s.set(A[d].array,c),c+=A[d].array.length,h){var p=(new M).getInverse(e[d]);if("position"===A[d].name&&p.applyToBufferAttribute(A[d]),"normal"===A[d].name)(new l).getNormalMatrix(p).applyToBufferAttribute(A[d]);h=!1}}return new YA(s,i,o)},applyMatrix3ToBuffer:function(){var A=new y;return function(e,t,i,o){if(e.equals(xc))return t;for(var n=i||0,r=o||t.length;r>n;n+=3)A.x=t[n+0],A.y=t[n+1],A.z=t[n+2],A.applyMatrix3(e),t[n+0]=A.x,t[n+1]=A.y,t[n+2]=A.z;return t}}(),applyMatrix4ToBuffer:function(){var A=new y;return function(e,t,i,o){if(e.equals(Bc))return t;for(var n=i||0,r=o||t.length;r>n;n+=3)A.x=t[n+0],A.y=t[n+1],A.z=t[n+2],A.applyMatrix4(e),t[n+0]=A.x,t[n+1]=A.y,t[n+2]=A.z;return t}}(),normalizeBuffer:function(A){for(var e=null,t=null,i=null,o=null,n=0,r=A.length;r>n;n+=3)e=A[n],t=A[n+1],i=A[n+2],o=1/Math.sqrt(e*e+t*t+i*i),A[n]=e*o,A[n+1]=t*o,A[n+2]=i*o},disposeBufferFromGeometry:function(A,e){for(var t=0,i=e.length;i>t;t+=1){var o=A.getAttribute(e[t]);o&&(o.array=null)}},disposeIndexBufferFromGeometry:function(A){A.index&&(A.index.array=null)},copyMeshProperties:function(A,e){A.name=e.name,A.up.copy(e.up),A.position.copy(e.position),A.quaternion.copy(e.quaternion),A.scale.copy(e.scale),A.matrix.copy(e.matrix),A.matrixWorld.copy(e.matrixWorld),A.matrixAutoUpdate=e.matrixAutoUpdate,A.matrixWorldNeedsUpdate=e.matrixWorldNeedsUpdate},createBufferGeometryWithPosAndSkin:function(A){var e=new he;if(A.isBufferGeometry||A._bufferGeometry){var t=A.isBufferGeometry?A:A._bufferGeometry;e.addAttribute("position",t.getAttribute("position")),t.getAttribute("skinIndex")&&e.addAttribute("skinIndex",t.getAttribute("skinIndex")),t.getAttribute("skinWeight")&&e.addAttribute("skinWeight",t.getAttribute("skinWeight"));var i=t.getIndex();i&&e.setIndex(i)}else if(A.isGeometry){var o=new Ae(3*A.vertices.length,3);if(e.addAttribute("position",o.copyVector3sArray(A.vertices)),A.skinIndices.length>0){var n=new Ae(4*A.skinIndices.length,4);e.addAttribute("skinIndex",n.copyVector4sArray(A.skinIndices))}if(A.skinWeights.length>0){var r=new Ae(4*A.skinWeights.length,4);this.addAttribute("skinWeight",r.copyVector4sArray(A.skinWeights))}if(A.faces.length){for(var a=A.faces,s=[],l=0;a.length>l;l+=1){var c=a[l];s.push(c.a,c.b,c.c)}var h=new(uh.arrayMax(s)>65535?Uint32Array:Uint16Array)(3*s.length);e.setIndex(new YA(h,1).copyIndicesArray(s))}}return e},calculateVolumeOfGeometry:function(A,e,t,i){if(A&&e){var o=0,n=new y,r=new y,a=new y;t||(t=0),i||(i=e.length);for(var s=0,l=0,c=0,h=t,d=t+i;d>h;h+=3){l=e[h+1],c=e[h+2],n.set(A[3*(s=e[h])],A[3*s+1],A[3*s+2]),r.set(A[3*l],A[3*l+1],A[3*l+2]),a.set(A[3*c],A[3*c+1],A[3*c+2]),o+=n.clone().cross(r).dot(a)/6}return o}},minDistanceBetweenTriToMesh:function(A,e,t,i){function o(A,e){return new y(A.x-e.x,A.y-e.y,A.z-e.z)}function n(A,e){return new y(A.x+e.x,A.y+e.y,A.z+e.z)}function r(A,e,t){return new y(A.x+e.x*t,A.y+e.y*t,A.z+e.z*t)}function a(A,e){return A.x*e.x+A.y*e.y+A.z*e.z}function s(A,e){return new y(A.y*e.z-A.z*e.y,A.z*e.x-A.x*e.z,A.x*e.y-A.y*e.x)}function l(A,e,t,i){var l,c=a(e,i),h=a(e,e),d=a(i,i),p=o(t,A),g=a(e,p),u=a(i,p),f=null;0>(f=(g*d-u*c)/(h*d-c*c))||isNaN(f)?f=0:f>1&&(f=1);var m=null,C=null,y=null,v=null;return 0>=(l=(f*c-u)/d)||isNaN(l)?(C=t,0>=(f=g/h)||isNaN(f)?(m=A,y=o(t,A)):1>f?(m=r(A,e,f),v=s(p,e),y=s(e,v)):y=o(t,m=n(A,e))):1>l?(C=r(t,i,l),0>=f||isNaN(f)?(m=A,v=s(p,i),y=s(i,v)):1>f?(m=r(A,e,f),0>a(y=s(e,i),p)&&y.multiplyScalar(-1)):(v=s(p=o(t,m=n(A,e)),i),y=s(i,v))):(C=n(t,i),0>=(f=(c+g)/h)||isNaN(f)?(m=A,y=o(C,A)):1>f?(m=r(A,e,f),v=s(p=o(C,A),e),y=s(e,v)):y=o(C,m=n(A,e))),{vec:y,closestP:m,closestQ:C}}function c(A,e){var t=null,i=null,n=[],c=[],h=null;n[0]=o(A[1],A[0]),n[1]=o(A[2],A[1]),n[2]=o(A[0],A[2]),c[0]=o(e[1],e[0]),c[1]=o(e[2],e[1]),c[2]=o(e[0],e[2]);for(var d=null,p=null,g=null,u=0,f=A[0].distanceToSquared(e[0])+1,m=0;3>m;m+=1)for(var C=0;3>C;C+=1){var y=l(A[m],n[m],e[C],c[C]);h=y.vec;var v=a(d=o(i=y.closestQ,t=y.closestP),d);if(f>=v){p=t.clone(),g=i.clone(),f=v;var I=a(o(A[(m+2)%3],t),h),E=a(o(e[(C+2)%3],i),h);if(0>=I&&E>=0)return{start:t.clone(),end:i.clone(),minDistance:Math.sqrt(v)};0>I&&(I=0),E>0&&(E=0),a(d,h)-I+E>0&&(u=1)}}var B=s(n[0],n[1]),x=a(B,B);if(x>1e-15){var S=[];d=o(A[0],e[0]),S[0]=a(d,B),d=o(A[0],e[1]),S[1]=a(d,B),d=o(A[0],e[2]),S[2]=a(d,B);var w=-1;if(S[0]>0&&S[1]>0&&S[2]>0?S[w=S[1]>S[0]?0:1]>S[2]&&(w=2):0>S[0]&&0>S[1]&&0>S[2]&&S[2]>S[w=S[0]>S[1]?0:1]&&(w=2),w>=0&&(u=1,a(d=o(e[w],A[0]),s(B,n[0]))>0&&a(d=o(e[w],A[1]),s(B,n[1]))>0&&a(d=o(e[w],A[2]),s(B,n[2]))>0))return t=r(e[w],B,S[w]/x),i=e[w].clone(),{start:t.clone(),end:i,minDistance:t.distanceTo(i)}}var M=s(c[0],c[1]),b=a(M,M);if(b>1e-15){var U=[];d=o(e[0],A[0]),U[0]=a(d,M),d=o(e[0],A[1]),U[1]=a(d,M),d=o(e[0],A[2]),U[2]=a(d,M);w=-1;if(U[0]>0&&U[1]>0&&U[2]>0?U[w=U[1]>U[0]?0:1]>U[2]&&(w=2):0>U[0]&&0>U[1]&&0>U[2]&&U[2]>U[w=U[0]>U[1]?0:1]&&(w=2),w>=0&&(u=1,a(d=o(A[w],e[0]),s(M,c[0]))>0&&a(d=o(A[w],e[1]),s(M,c[1]))>0&&a(d=o(A[w],e[2]),s(M,c[2]))>0))return{start:t=A[w].clone(),end:(i=r(A[w],M,U[w]/b)).clone(),minDistance:t.distanceTo(i)}}return u?(t=p,i=g,{start:p.clone(),end:g.clone(),minDistance:Math.sqrt(f)}):{start:p.clone(),end:g.clone(),minDistance:0}}var h=new y,d=new y,p=new y;function g(A,e,t,i,o,n){h.fromBufferAttribute(e,t),d.fromBufferAttribute(e,i),p.fromBufferAttribute(e,o),n&&(h.applyMatrix4(n),d.applyMatrix4(n),p.applyMatrix4(n)),A.push(h),A.push(d),A.push(p)}for(var u={start:null,end:null,minDistance:Number.POSITIVE_INFINITY},f=e.geometry,m=f.attributes.position,C=t?t.indexStart:0,v=f.getIndex().array,I=C,E=t?t.indexStart+t.indexCount:v.length;E>I;I+=3){var B=[];g(B,m,v[I],v[I+1],v[I+2],i);var x=c(A,B);if(0>=x.minDistance)return u.minDistance=0,u.start=x.start.clone(),u.end=x.end.clone(),u;u.minDistance>x.minDistance&&(u.minDistance=x.minDistance,u.start=x.start.clone(),u.end=x.end.clone())}return u},minDistanceBetweenTriToTri:function(A,e){function t(A,e){return new y(A.x-e.x,A.y-e.y,A.z-e.z)}function i(A,e){return new y(A.x+e.x,A.y+e.y,A.z+e.z)}function o(A,e,t){return new y(A.x+e.x*t,A.y+e.y*t,A.z+e.z*t)}function n(A,e){return A.x*e.x+A.y*e.y+A.z*e.z}function r(A,e){return new y(A.y*e.z-A.z*e.y,A.z*e.x-A.x*e.z,A.x*e.y-A.y*e.x)}function a(A,e,a,s){var l,c=n(e,s),h=n(e,e),d=n(s,s),p=t(a,A),g=n(e,p),u=n(s,p),f=null;0>(f=(g*d-u*c)/(h*d-c*c))||isNaN(f)?f=0:f>1&&(f=1);var m=null,C=null,y=null,v=null;return 0>=(l=(f*c-u)/d)||isNaN(l)?(C=a,0>=(f=g/h)||isNaN(f)?(m=A,y=t(a,A)):1>f?(m=o(A,e,f),v=r(p,e),y=r(e,v)):y=t(a,m=i(A,e))):1>l?(C=o(a,s,l),0>=f||isNaN(f)?(m=A,v=r(p,s),y=r(s,v)):1>f?(m=o(A,e,f),0>n(y=r(e,s),p)&&y.multiplyScalar(-1)):(v=r(p=t(a,m=i(A,e)),s),y=r(s,v))):(C=i(a,s),0>=(f=(c+g)/h)||isNaN(f)?(m=A,y=t(C,A)):1>f?(m=o(A,e,f),v=r(p=t(C,A),e),y=r(e,v)):y=t(C,m=i(A,e))),{vec:y,closestP:m,closestQ:C}}function s(A,e){var i=null,s=null,l=[],c=[],h=null;l[0]=t(A[1],A[0]),l[1]=t(A[2],A[1]),l[2]=t(A[0],A[2]),c[0]=t(e[1],e[0]),c[1]=t(e[2],e[1]),c[2]=t(e[0],e[2]);for(var d=null,p=null,g=null,u=0,f=A[0].distanceToSquared(e[0])+1,m=0;3>m;m+=1)for(var C=0;3>C;C+=1){var y=a(A[m],l[m],e[C],c[C]);h=y.vec;var v=n(d=t(s=y.closestQ,i=y.closestP),d);if(f>=v){p=i.clone(),g=s.clone(),f=v;var I=n(t(A[(m+2)%3],i),h),E=n(t(e[(C+2)%3],s),h);if(0>=I&&E>=0)return{start:i.clone(),end:s.clone(),minDistance:Math.sqrt(v)};0>I&&(I=0),E>0&&(E=0),n(d,h)-I+E>0&&(u=1)}}var B=r(l[0],l[1]),x=n(B,B);if(x>1e-15){var S=[];d=t(A[0],e[0]),S[0]=n(d,B),d=t(A[0],e[1]),S[1]=n(d,B),d=t(A[0],e[2]),S[2]=n(d,B);var w=-1;if(S[0]>0&&S[1]>0&&S[2]>0?S[w=S[1]>S[0]?0:1]>S[2]&&(w=2):0>S[0]&&0>S[1]&&0>S[2]&&S[2]>S[w=S[0]>S[1]?0:1]&&(w=2),w>=0&&(u=1,n(d=t(e[w],A[0]),r(B,l[0]))>0&&n(d=t(e[w],A[1]),r(B,l[1]))>0&&n(d=t(e[w],A[2]),r(B,l[2]))>0))return i=o(e[w],B,S[w]/x),s=e[w].clone(),{start:i.clone(),end:s,minDistance:i.distanceTo(s)}}var M=r(c[0],c[1]),b=n(M,M);if(b>1e-15){var U=[];d=t(e[0],A[0]),U[0]=n(d,M),d=t(e[0],A[1]),U[1]=n(d,M),d=t(e[0],A[2]),U[2]=n(d,M);w=-1;if(U[0]>0&&U[1]>0&&U[2]>0?U[w=U[1]>U[0]?0:1]>U[2]&&(w=2):0>U[0]&&0>U[1]&&0>U[2]&&U[2]>U[w=U[0]>U[1]?0:1]&&(w=2),w>=0&&(u=1,n(d=t(A[w],e[0]),r(M,c[0]))>0&&n(d=t(A[w],e[1]),r(M,c[1]))>0&&n(d=t(A[w],e[2]),r(M,c[2]))>0))return{start:i=A[w].clone(),end:(s=o(A[w],M,U[w]/b)).clone(),minDistance:i.distanceTo(s)}}return u?(i=p,s=g,{start:p.clone(),end:g.clone(),minDistance:Math.sqrt(f)}):{start:p.clone(),end:g.clone(),minDistance:0}}for(var l={start:null,end:null,minDistance:Number.POSITIVE_INFINITY},c=0,h=A.length;h>c;c+=1)for(var d=0,p=e.length;p>d;d+=1){var g=s(A[c],e[d]);if(0>=g.minDistance)return l.minDistance=0,l.start=g.start.clone(),l.end=g.end.clone(),l;l.minDistance>g.minDistance&&(l.minDistance=g.minDistance,l.start=g.start.clone(),l.end=g.end.clone())}return l},calculateTheIntersectionOfGeometryAndPlane:function(A,e){var t=A.getIndex().array,i=A.attributes.position,o=t.length,n=e.clone(),r=0;-1===n.normal.x?r=0:1===n.normal.x?(n.normal.x=-1,n.constant*=-1,r=1):-1===n.normal.y?r=2:1===n.normal.y?(n.normal.y=-1,n.constant*=-1,r=3):-1===n.normal.z?r=4:1===n.normal.z&&(n.normal.z=-1,n.constant*=-1,r=5);for(var a,s,l,c,h,d,p,g,u=[],f=new Hs,m=0,C=o;C>m;m+=3){var v=[];a=v,s=i,l=t[m],c=t[m+1],h=t[m+2],d=new y,p=new y,g=new y,d.fromBufferAttribute(s,l),p.fromBufferAttribute(s,c),g.fromBufferAttribute(s,h),a.push(d),a.push(p),a.push(g);var I=v[0],E=v[1],B=v[2],x=!1,S=!1,w=!1;switch(r){case 0:case 1:x=n.constant>I.x,S=n.constant>E.x,w=n.constant>B.x;break;case 2:case 3:x=n.constant>I.y,S=n.constant>E.y,w=n.constant>B.y;break;case 4:case 5:x=n.constant>I.z,S=n.constant>E.z,w=n.constant>B.z}var M=null,b=null;x?S?w||(f.set(B,E),(M=n.intersectLine(f,new y))&&u.push(M),f.set(B,I),(b=n.intersectLine(f,new y))&&u.push(b)):w?(f.set(E,B),(M=n.intersectLine(f,new y))&&u.push(M),f.set(E,I),(b=n.intersectLine(f,new y))&&u.push(b)):(f.set(E,I),(M=n.intersectLine(f,new y))&&u.push(M),f.set(B,I),(b=n.intersectLine(f,new y))&&u.push(b)):S?w?(f.set(I,E),(M=n.intersectLine(f,new y))&&u.push(M),f.set(I,B),(b=n.intersectLine(f,new y))&&u.push(b)):(f.set(I,E),(M=n.intersectLine(f,new y))&&u.push(M),f.set(B,E),(b=n.intersectLine(f,new y))&&u.push(b)):w&&(f.set(I,B),(M=n.intersectLine(f,new y))&&u.push(M),f.set(E,B),(b=n.intersectLine(f,new y))&&u.push(b))}if(u.length>=1){for(var U={},F=[],K=[],Q=0,R=u.length;R>Q;Q+=1){var T=u[Q].toArray(F).toString();U[T]||(U[T]=[]),2>U[T].length||(T=T+"_"+Math.floor(U[T].length/2+.6),U[T]||(U[T]=[])),U[T].push(Q),K.push(T)}var k=[],D=K[0];return k.push(u[0],u[1]),function A(e,t){var i=U[K[e]],o=i[0]===e?i[1]:i[0],n=o%2?o-1:o+1;if(t.push(u[n]),K[n]!==D){if(isNaN(n))return void(k=null);A(n,t)}}(1,k),k}},getShapeGeometryFromGeometryAndPlane:function(A,e){var t=Tu.calculateTheIntersectionOfGeometryAndPlane(A,e);if(t){var i=0;-1===e.normal.x?i=0:1===e.normal.x?i=1:-1===e.normal.y?i=2:1===e.normal.y?i=3:-1===e.normal.z?i=4:1===e.normal.z&&(i=5);var o=[],n=[],r=[],a=[],l=[];A.boundingBox||A.computeBoundingBox();for(var c=A.boundingBox.getSize(new y),h=e.normal.x*c.x*1e-4,d=e.normal.y*c.y*1e-4,p=e.normal.z*c.z*1e-4,g=0,u=t.length;u>g;g+=1){var f=t[g],m=new s;switch(n.push(f.x+h,f.y+d,f.z+p),i){case 0:case 1:r.push(1,0,0),a.push(f.y,f.z),m.set(f.y,f.z);break;case 2:case 3:r.push(0,1,0),a.push(f.x,f.z),m.set(f.x,f.z);break;case 4:case 5:r.push(0,0,1),a.push(f.x,f.y),m.set(f.x,f.y)}l.push(m)}for(var C=Hn.triangulateShape(l,[]),v=0,I=C.length;I>v;v+=1){var E=C[v];o.push(E[0],E[1],E[2])}var B=new he;return B.setIndex(o),B.setAttribute("position",new Ae(n,3)),B.setAttribute("normal",new Ae(r,3)),B.setAttribute("uv",new Ae(a,2)),B}}};Tu.getBoxMBuffer=function(){for(var A=null,e=null,t=[],i=[],o=[],n=0,r=0;6>r;r+=1){var a=Tu.getBoxData(r);for(A=0,e=a.vertex.length;e>A;A+=1)t.push(a.vertex[A]);for(A=0,e=a.index.length;e>A;A+=1)o.push(a.index[A]+n);for(n+=a.vertex.length/3,A=0,e=a.normal.length;e>A;A+=1)i.push(a.normal[A])}return function(A){var e=null;if(A){var n=new l,r=new y;e=[];for(var a=0;6>a;a+=1){var s=Tu.getBoxData(a);n.set(A[6*a],A[6*a+2],A[6*a+4],A[6*a+1],A[6*a+3],A[6*a+5],0,0,1);for(var c=0,h=s.uv.length;h>c;c+=2)r.set(s.uv[c],s.uv[c+1],1),r.applyMatrix3(n),e.push(r.x),e.push(r.y)}}return{vertex:t,normal:i,uv:e,index:o}}}(),Tu.getPipeMBuffer=function(){var A=Tu.getPipeData(32),e=A.edges,t=A.vertex,i=A.normal,o=A.index;return function(A){var n=null;if(!(!A||18!==A.length)){n=[];for(var r=[],a=0,s=A.length/6;s>a;a+=1){var c=new l;c.set(A[6*a],A[6*a+2],A[6*a+4],A[6*a+1],A[6*a+3],A[6*a+5],0,0,1),r.push(c)}for(var h=Tu.getPipeData(32),d=4*(e+1),p=d+2*e,g=new y,u=0,f=h.uv.length;f>u;u+=2)g.set(h.uv[u],h.uv[u+1],1),g.applyMatrix3(d>u?r[0]:p>u?r[1]:r[2]),n.push(g.x),n.push(g.y)}return{vertex:t,normal:i,uv:n,index:o}}}();var ku={geoHeader:function(A){var e=new Int32Array(A);this.geoCount=e[0],this.headerBuffer=e.slice(1,4*this.geoCount+1)},GeometryReader:function(A,e){Bh.time("GeometryReader"),this.geomMap=[],this.geoCount=new Uint32Array(A,0,1)[0];var t=this.geoCount,i=[],o=0,n=null,r=null,a=null,s=null,l=null,c=null,h=null,d=0,p=null,g=0,u=null,f=0,m=null,C=0,y=null,v=0,I=null;if(np(e,"2"))for(var E=0;t>E;E+=1){if(i={},o=4*(1+7*t),r=(n=new Uint32Array(A,4*(1+7*E),7))[0],a=n[2],s=n[3],l=n[4],c=n[5],h=n[6],d=o+n[1],p=new Float32Array(A.slice(d,4*a+d)),g=4*a+d,u=new Float32Array(A.slice(g,g+4*s)),f=g+4*s,m=new Uint32Array(A.slice(f,f+4*l)),C=f+4*l,y=new Float32Array(A.slice(C,C+4*c)),v=C+4*c,I=new Int16Array(A.slice(v,v+2*h)),vc.DataReduction){var B=(new M).makeScale(.001,.001,.001);Tu.applyMatrix4ToBuffer(B,p)}i.position=p,i.normal=u,i.index=m,i.uv=y,i.materialIndex=I,i.geoId=r,this.geomMap.push(i)}else for(var x=0;t>x;x+=1)i={},o=4*(1+6*t),r=(n=new Uint32Array(A,4*(1+6*x),6))[0],a=n[2],s=n[3],l=n[4],c=n[5],d=o+n[1],p=new Float32Array(A.slice(d,4*a+d)),g=4*a+d,u=new Float32Array(A.slice(g,g+4*s)),f=g+4*s,m=new Uint32Array(A.slice(f,f+4*l)),C=f+4*l,y=new Float32Array(A.slice(C,C+4*c)),i.position=p,i.normal=u,i.index=m,i.uv=y,i.geoId=r,this.geomMap.push(i);Bh.debug(this.geomMap),Bh.timeEnd("GeometryReader")},BatchedGeometryReader:function(A,e){Bh.time("BatchedGeometryReader"),this.geomMap=[],this.geoCount=new Uint32Array(A,0,1)[0];for(var t=this.geoCount,i=0,o=0,n=0,r=[],a=4,s=0;t>s;s+=1){var l={};r.push(l);var c=new Uint32Array(A,a,7);l.geoId=c[0],l.offset=c[1],l.vertexLength=c[2],l.normalLength=c[5],l.indicesLength=c[3],l.uvLength=c[4],l.componentCount=o=c[6],l.nodeInfo=[],a+=28;for(var h=0;o>h;h+=1){var d=new Uint32Array(A,a,1)[0];a+=4;for(var p=0;d>p;p+=1){var g=new Uint32Array(A,a,3);a+=12,l.nodeInfo.push(g)}}l.materialKeyLength=new Uint32Array(A,a,1)[0],a+=4}for(var u=0;t>u;u+=1){var f=r[u],m=f.normalLength,C=f.indicesLength,y=f.uvLength;i=a+f.offset,n=4*f.vertexLength;var v=new Float32Array(A.slice(i,i+n));i+=n,n=4*C;var I=new Uint32Array(A.slice(i,i+n));i+=n,n=4*y;var E=new Float32Array(A.slice(i,i+n));i+=n,n=4*m;var B=new Float32Array(A.slice(i,i+n));i+=n,o=f.componentCount;for(var x={},S=0,w=f.nodeInfo.length;w>S;S+=1){var b=f.nodeInfo[S];n=2*b[0];var U=uh.ab2str(new Int16Array(A.slice(i,i+n)));i+=n,n=2*b[1];var F=uh.ab2str(new Int16Array(A.slice(i,i+n)));i+=n;var K=new Uint32Array(A.slice(i,i+4))[0];i+=4;var Q=new Uint32Array(A.slice(i,i+4))[0];i+=4;var R=new Uint32Array(A.slice(i,i+4))[0];i+=4;var T=new Uint32Array(A.slice(i,i+4))[0];i+=4;var k={};k.userId=U,k.nodeId=F,k.positionStart=K,k.positionCount=Q,k.indexStart=R,k.indexCount=T,x[U]||(x[U]=[]),x[U].push(k)}n=2*f.materialKeyLength;var D=uh.ab2str(new Int16Array(A.slice(i,i+n)));if(vc.DataReduction){var L=(new M).makeScale(.001,.001,.001);Tu.applyMatrix4ToBuffer(L,v)}var N={};N.position=v,N.normal=B,N.index=I,N.uv=E,N.materialIndex=null,N.geoId=f.geoId,N.materialKey=D,N.componentInfo=x,this.geomMap.push(N)}Bh.debug(this.geomMap),Bh.timeEnd("BatchedGeometryReader")},NodesReader:function(A,e){Bh.time("NodesReader"),this.geomMap=[],this.nodeCount=new Uint32Array(A,0,1)[0];for(var t=this.nodeCount,i=0,o=0,n=[],r=4,a=0;t>a;a+=1){var s={};n.push(s);var l=new Uint32Array(A,r,5);s.geoId=l[0],s.offset=l[1],s.nodeIdLength=l[2],s.materialKeyLength=l[3],s.matrixLength=l[4],r+=20}for(var c=0;t>c;c+=1){var h=n[c],d=h.materialKeyLength,p=h.matrixLength,g=uh.ab2str(A.slice(i=r+h.offset,i+(o=h.nodeIdLength))),u=uh.ab2str(A.slice(i+=o,i+(o=d)));i+=o,o=8*p;var f=new Float64Array(A.slice(i,i+o));i+=o;var m={};m.nodeId=g,m.geoId=h.geoId,m.material=u,m.matrix=f,this.geomMap.push(m)}Bh.debug(this.geomMap),Bh.timeEnd("NodesReader")},InstancedGeometryReader:function(A,e){Bh.time("InstancedGeometryReader"),this.geomMap=[],this.geoCount=new Uint32Array(A,0,1)[0];for(var t=this.geoCount,i=null,o=0,n=0,r=0,a=[],s=4,l=0;t>l;l+=1){var c={};a.push(c),i=new Uint32Array(A,s,7),c.geoId=i[0],c.offset=i[1],c.vertexLength=i[2],c.normalLength=i[5],c.indicesLength=i[3],c.uvLength=i[4],c.componentCount=n=i[6],c.nodeInfo={},s+=28;var h=[];c.componentKeyLength=h,c.matrixArrayLength=[];for(var d=0;n>d;d+=1){h.push(new Uint32Array(A,s,1)[0]),s+=4;var p=new Uint32Array(A,s,1)[0];s+=4,c.nodeInfo[d]=[];for(var g=0;p>g;g+=1){var u=new Uint32Array(A,s,1)[0];s+=4,c.nodeInfo[d].push(u)}}c.matrixArrayLength=new Uint32Array(A,s,1)[0],s+=4,c.materialKeyLength=new Uint32Array(A,s,1)[0],s+=4}for(var f=0;t>f;f+=1){var m=a[f],C=m.normalLength,y=m.indicesLength,v=m.uvLength;o=s+m.offset,r=4*m.vertexLength;var I=new Float32Array(A.slice(o,o+r));o+=r,r=4*y;var E=new Uint32Array(A.slice(o,o+r));o+=r,r=4*v;var B=new Float32Array(A.slice(o,o+r));o+=r,r=4*C;var x=new Float32Array(A.slice(o,o+r));o+=r;for(var S={},w=[],b=[],U=0,F=0,K=n=m.componentCount;K>F;F+=1){var Q=uh.ab2str(A.slice(o,o+(r=m.componentKeyLength[F])));o+=r,b.push(Q),S[Q]||(S[Q]=[]);for(var R=m.nodeInfo[F],T=0,k=R.length;k>T;T+=1){var D=uh.ab2str(A.slice(o,o+(r=R[T])));o+=r,S[Q].push(U),w.push(D),U+=1}}r=8*m.matrixArrayLength;var L=new Float64Array(A.slice(o,o+r));o+=r;var N=new Float64Array(A.slice(o,o+r));o+=r;var O=new Float64Array(A.slice(o,o+r));o+=r;var V=new Float64Array(A.slice(o,o+r)),G=uh.ab2str(A.slice(o+=r,o+(r=m.materialKeyLength)));o+=r,r=4*w.length*4;var P=new Float32Array(A.slice(o,o+r));if(o+=r,vc.DataReduction){var q=(new M).makeScale(.001,.001,.001);Tu.applyMatrix4ToBuffer(q,I)}var j={};j.position=I,j.normal=x,j.index=E,j.uv=B,j.materialIndex=null,j.geoId=m.geoId,j.materialKey=G,j.componentInfo=S,j.mcol0=L,j.mcol1=N,j.mcol2=O,j.mcol3=V,j.color=P,j.nodeIdInfo=w,j.componentKeyInfo=b,this.geomMap.push(j)}Bh.debug(this.geomMap),Bh.timeEnd("InstancedGeometryReader")},BoneReader:function(A,e){Bh.time("BoneReader"),this.boneMap=[],this.boneCount=new Uint32Array(A,0,1)[0];for(var t=this.boneCount,i=[],o=0,n=null,r=null,a=null,s=null,l=null,c=null,h=0,d=null,p=0,g=null,u=0,f=null,m=0,C=[],y="[]",v=0;t>v;v+=1){i={},o=4*(1+5*t),r=(n=new Uint32Array(A,4*(1+5*v),5))[0],a=n[2],s=n[3],l=n[3],c=n[4],h=o+n[1],d=new Float32Array(A.slice(h,4*a+h)),p=4*a+h,g=new Uint16Array(A.slice(p,p+2*s)),u=p+2*s,f=new Float32Array(A.slice(u,u+4*l)),m=u+4*l;var I=new Uint8Array(A.slice(m,m+c));y=mh.isIE11()?uh.decodeUTF8(I):new TextDecoder("utf-8").decode(I);try{C=JSON.parse(y)}catch(A){Bh.error("解析name出错:",A)}i.offsetMatrix=d,i.skinIndex=g,i.skinWeight=f,i.name=C,i.geoId=r,this.boneMap.push(i)}Bh.debug(this.boneMap),Bh.time("BoneReader")}};ku.GeometryReader.prototype={constructor:ku.GeometryReader,getPositionBuffer:function(A){return this.geos[A].position},getIndexBuffer:function(A){return this.geos[A].index},getNormalBuffer:function(A){return this.geos[A].normal},getUVBuffer:function(A){return[]}};var Du=function(A,e){if(this.materialMap=[],np(e,"2"))this.materialMap=A;else for(var t=this.materialCount=new Uint32Array(A,0,1)[0],i=4*(1+6*t),o=0;t>o;o+=1){var n=new Uint32Array(A,4*(1+6*o),6),r=n[0],a=n[1],s=n[2],l=n[3],c=n[4],h=n[5],d=new Float32Array(A.slice(i+a,4*s+i+a)),p=new Int16Array(A.slice(4*s+i+a,4*s+i+a+2*l)),g=new Uint8Array(A.slice(4*s+i+a+2*l,4*s+i+a+2*l+c)),u=4*s+i+a+2*l+c,f=new Int16Array(A.slice(u,u+2*h)),m="[]";m=mh.isIE11()?uh.decodeUTF8(g):new TextDecoder("utf-8").decode(g);var C=[];try{C=JSON.parse(m)}catch(A){Bh.error("解析纹理出错:",A)}var y={};y.matId=r,y.color=d,y.colorIndex=p,y.texture=C,y.textureIndex=f,this.materialMap.push(y)}Bh.debug(this.materialMap)},Lu={geoHeader:function(A){var e=new Int32Array(A);this.geoCount=e[0],this.headerBuffer=e.slice(1,4*this.geoCount+1)},GeometryReader:function(A,e){this.geomMap=[],this.geoCount=new Uint32Array(A,0,1)[0];for(var t=this.geoCount,i=[],o=0,n=null,r=null,a=null,s=null,l=0,c=null,h=null,d=0,p=0;t>p;p+=1)i={},o=4*(1+4*t),r=(n=new Uint32Array(A,4*(1+4*p),4))[0],a=n[3],s=n[2],l=o+n[1],h=new Uint32Array(A.slice(l,l+4*s)),d=l+4*s,c=new Float32Array(A.slice(d,4*a+d)),i.position=c,i.index=h,i.geoId=r,this.geomMap.push(i);Bh.debug(this.geomMap)},BoneReader:function(A,e){this.boneMap=[],this.boneCount=new Uint32Array(A,0,1)[0];for(var t=this.boneCount,i=[],o=0,n=null,r=null,a=null,s=null,l=null,c=null,h=0,d=null,p=0,g=null,u=0,f=null,m=0,C=[],y="[]",v=0;t>v;v+=1){i={},o=4*(1+5*t),r=(n=new Uint32Array(A,4*(1+5*v),5))[0],a=n[2],s=n[3],l=n[3],c=n[4],h=o+n[1],d=new Float32Array(A.slice(h,4*a+h)),p=4*a+h,g=new Uint16Array(A.slice(p,p+2*s)),u=p+2*s,f=new Float32Array(A.slice(u,u+4*l)),m=u+4*l;var I=new Uint8Array(A.slice(m,m+c));y=mh.isIE11()?uh.decodeUTF8(I):new TextDecoder("utf-8").decode(I);try{C=JSON.parse(y)}catch(A){Bh.error("解析name出错:",A)}i.offsetMatrix=d,i.skinIndex=g,i.skinWeight=f,i.name=C,i.geoId=r,this.boneMap.push(i)}Bh.debug(this.boneMap)}};Lu.GeometryReader.prototype={constructor:Lu.GeometryReader,getPositionBuffer:function(A){return this.geos[A].position},getIndexBuffer:function(A){return this.geos[A].index},getNormalBuffer:function(A){return this.geos[A].normal},getUVBuffer:function(A){return[]}};var Nu=function(A){this.MaxThreadCount=A||8,this.todoList=[],this.doingCount=0,this.addItem=function(A){void 0!==A&&this.todoList.push(A)},this.run=function(A,e,t){if(0>=this.doingCount)if(0!==this.todoList.length){var i=this.todoList,o=i.length;this.todoList=[],this.doingCount=o;for(var n=Math.min(this.MaxThreadCount,vc.ConcurrencyRequestCount,o),r=this,a=0;n>a;a+=1)s(a)}else t();function s(a){o>a?(e(r.doingCount,o),A(i[a],a+n,s)):1>r.doingCount&&(r.run(A,e,t),e(r.doingCount,o),t())}}},Ou=function(A,e){this.type=e,this.manager=A,this.worker=new Nu(4),this.working=!0};function Vu(A,e,t,i){for(var o=function(A,e){var t=void 0;t="Line"===e||"LineSegments"===e?new Ba:new Ja;for(var i=new s,o=new s,n=new s,r=!0,a=!1,l=A.match(/[a-df-z][^a-df-z]*/gi),c=0,h=l.length;h>c;c++){var d=l[c],p=(e=d.charAt(0),d.substr(1).trim());switch(!0===r&&(a=!0,r=!1),e){case"M":for(var g=Gu(p),u=0,f=g.length;f>u;u+=2)i.x=g[u+0],i.y=g[u+1],o.x=i.x,o.y=i.y,0===u?t.moveTo(i.x,i.y):t.lineTo(i.x,i.y),0===u&&!0===a&&n.copy(i);break;case"H":for(g=Gu(p),u=0,f=g.length;f>u;u++)i.x=g[u],o.x=i.x,o.y=i.y,t.lineTo(i.x,i.y),0===u&&!0===a&&n.copy(i);break;case"V":for(g=Gu(p),u=0,f=g.length;f>u;u++)i.y=g[u],o.x=i.x,o.y=i.y,t.lineTo(i.x,i.y),0===u&&!0===a&&n.copy(i);break;case"L":for(g=Gu(p),u=0,f=g.length;f>u;u+=2)i.x=g[u+0],i.y=g[u+1],o.x=i.x,o.y=i.y,t.lineTo(i.x,i.y),0===u&&!0===a&&n.copy(i);break;case"C":for(g=Gu(p),u=0,f=g.length;f>u;u+=6)t.bezierCurveTo(g[u+0],g[u+1],g[u+2],g[u+3],g[u+4],g[u+5]),o.x=g[u+2],o.y=g[u+3],i.x=g[u+4],i.y=g[u+5],0===u&&!0===a&&n.copy(i);break;case"S":for(g=Gu(p),u=0,f=g.length;f>u;u+=4)t.bezierCurveTo(Pu(i.x,o.x),Pu(i.y,o.y),g[u+0],g[u+1],g[u+2],g[u+3]),o.x=g[u+0],o.y=g[u+1],i.x=g[u+2],i.y=g[u+3],0===u&&!0===a&&n.copy(i);break;case"Q":for(g=Gu(p),u=0,f=g.length;f>u;u+=4)t.quadraticCurveTo(g[u+0],g[u+1],g[u+2],g[u+3]),o.x=g[u+0],o.y=g[u+1],i.x=g[u+2],i.y=g[u+3],0===u&&!0===a&&n.copy(i);break;case"T":for(g=Gu(p),u=0,f=g.length;f>u;u+=2){var m=Pu(i.x,o.x),C=Pu(i.y,o.y);t.quadraticCurveTo(m,C,g[u+0],g[u+1]),o.x=m,o.y=C,i.x=g[u+0],i.y=g[u+1],0===u&&!0===a&&n.copy(i)}break;case"A":for(g=Gu(p),u=0,f=g.length;f>u;u+=7){var y=i.clone();i.x=g[u+5],i.y=g[u+6],o.x=i.x,o.y=i.y,qu(t,g[u],g[u+1],g[u+2],g[u+3],g[u+4],y,i),0===u&&!0===a&&n.copy(i)}break;case"m":for(g=Gu(p),u=0,f=g.length;f>u;u+=2)i.x+=g[u+0],i.y+=g[u+1],o.x=i.x,o.y=i.y,0===u?t.moveTo(i.x,i.y):t.lineTo(i.x,i.y),0===u&&!0===a&&n.copy(i);break;case"h":for(g=Gu(p),u=0,f=g.length;f>u;u++)i.x+=g[u],o.x=i.x,o.y=i.y,t.lineTo(i.x,i.y),0===u&&!0===a&&n.copy(i);break;case"v":for(g=Gu(p),u=0,f=g.length;f>u;u++)i.y+=g[u],o.x=i.x,o.y=i.y,t.lineTo(i.x,i.y),0===u&&!0===a&&n.copy(i);break;case"l":for(g=Gu(p),u=0,f=g.length;f>u;u+=2)i.x+=g[u+0],i.y+=g[u+1],o.x=i.x,o.y=i.y,t.lineTo(i.x,i.y),0===u&&!0===a&&n.copy(i);break;case"c":for(g=Gu(p),u=0,f=g.length;f>u;u+=6)t.bezierCurveTo(i.x+g[u+0],i.y+g[u+1],i.x+g[u+2],i.y+g[u+3],i.x+g[u+4],i.y+g[u+5]),o.x=i.x+g[u+2],o.y=i.y+g[u+3],i.x+=g[u+4],i.y+=g[u+5],0===u&&!0===a&&n.copy(i);break;case"s":for(g=Gu(p),u=0,f=g.length;f>u;u+=4)t.bezierCurveTo(Pu(i.x,o.x),Pu(i.y,o.y),i.x+g[u+0],i.y+g[u+1],i.x+g[u+2],i.y+g[u+3]),o.x=i.x+g[u+0],o.y=i.y+g[u+1],i.x+=g[u+2],i.y+=g[u+3],0===u&&!0===a&&n.copy(i);break;case"q":for(g=Gu(p),u=0,f=g.length;f>u;u+=4)t.quadraticCurveTo(i.x+g[u+0],i.y+g[u+1],i.x+g[u+2],i.y+g[u+3]),o.x=i.x+g[u+0],o.y=i.y+g[u+1],i.x+=g[u+2],i.y+=g[u+3],0===u&&!0===a&&n.copy(i);break;case"t":for(g=Gu(p),u=0,f=g.length;f>u;u+=2){m=Pu(i.x,o.x),C=Pu(i.y,o.y);t.quadraticCurveTo(m,C,i.x+g[u+0],i.y+g[u+1]),o.x=m,o.y=C,i.x=i.x+g[u+0],i.y=i.y+g[u+1],0===u&&!0===a&&n.copy(i)}break;case"a":for(g=Gu(p),u=0,f=g.length;f>u;u+=7){y=i.clone();i.x+=g[u+5],i.y+=g[u+6],o.x=i.x,o.y=i.y,qu(t,g[u],g[u+1],g[u+2],g[u+3],g[u+4],y,i),0===u&&!0===a&&n.copy(i)}break;case"Z":case"z":t.currentPath.autoClose=!0,t.currentPath.curves.length>0&&(i.copy(n),t.currentPath.currentPoint.copy(i),r=!0);break;default:console.warn(d)}a=!1}return t}(A),n="Shape"===o.type?[o]:o.toShapes(!0),r=new H,a=0;n.length>a;a++){var l=n[a];if("Line"===e||"LineSegments"===e){for(var c=l.getPoints(),h=0;c.length>h;h+=1){var d=c[h];d.y=-d.y,i&&(d.z=i)}if("LineSegments"===e){var p=new jo((new De).setFromPoints(c),t);r.add(p)}else if("Line"===e){var g=new Go((new De).setFromPoints(c),t);r.add(g)}}else if("Mesh"===e){for(var u=new ar(l),f=u.getAttribute("position"),m=f.array,C=0,y=m.length;y>C;C+=3)m[C+1]=-m[C+1],m[C+2]=i;f.needsUpdate=!0;var v=new Ue(u,t);r.add(v)}}return r}function Gu(A){for(var e=A.split(/[\s,]+|(?=\s?[+\-])/),t=0;e.length>t;t+=1){var i=e[t];if(i.indexOf(".")!==i.lastIndexOf("."))for(var o=i.split("."),n=2;o.length>n;n+=1)e.splice(t+n-1,0,"0."+o[n]);e[t]=parseFloat(i)}return e}function Pu(A,e){return A-(e-A)}function qu(A,e,t,i,o,n,r,a){i=i*Math.PI/180,e=Math.abs(e),t=Math.abs(t);var s=(r.x-a.x)/2,l=(r.y-a.y)/2,c=Math.cos(i)*s+Math.sin(i)*l,h=-Math.sin(i)*s+Math.cos(i)*l,d=e*e,p=t*t,g=c*c,u=h*h,f=g/d+u/p;if(f>1){var m=Math.sqrt(f);d=(e*=m)*e,p=(t*=m)*t}var C=d*u+p*g,y=Math.sqrt(Math.max(0,(d*p-C)/C));o===n&&(y=-y);var v=y*e*h/t,I=-y*t*c/e,E=Math.cos(i)*v-Math.sin(i)*I+(r.x+a.x)/2,B=Math.sin(i)*v+Math.cos(i)*I+(r.y+a.y)/2,x=svgAngle(1,0,(c-v)/e,(h-I)/t),S=svgAngle((c-v)/e,(h-I)/t,(-c-v)/e,(-h-I)/t)%(2*Math.PI);A.currentPath.absellipse(E,B,e,t,x,x+S,0===n,i)}function ju(A){this.group=A;var e=new LA(16711680);this._lineMaterial=new ko({color:e,side:2}),this._meshMaterial=new jA({color:e,side:2})}function Hu(){this.axisNet=void 0,this.visibleByUser=!1}Ou.prototype={constructor:Ou,addTask:function(A){this.worker.addItem(A)},processTasks:function(A,e,t){var i=this,o=this.worker;this.worker.run((function(e,t,n){i.working&&A(e,(function(){o.doingCount-=1,n(t)}))}),e=e||function(){},t=t||function(){})},stop:function(){this.working=!1},start:function(){this.working=!0}},ju.prototype.fromJSON=function(A,e){for(var t in A)if(A.hasOwnProperty(t)){var i=A[t];for(var o in i)if(i.hasOwnProperty(o)){var n=i[o],r=n.G.Path;if(r&&r.length>0){var a=n.P.matrix||[0,0];if(n.P.Type&&"LINE"===n.P.Type){for(var s="",l=0,c=r.length;c>l;l+=1)s+=r[l];var h=Vu(s,"LineSegments",this._lineMaterial,e);h.position.setX(a[0]),h.position.setY(-a[1]),this.group.add(h),h.updateMatrixWorld(!0)}else for(var d=0,p=r.length;p>d;d+=1){var g=void 0,u=Vu(r[d],g=n.G.Fill&&n.G.Fill.length===p&&0!==n.G.Fill[d].length?"Mesh":"Line","Line"===g?this._lineMaterial:this._meshMaterial,e);u.position.setX(a[0]),u.position.setY(-a[1]),this.group.add(u),u.updateMatrixWorld(!0)}}}}},ju.prototype.setColor=function(A,e){if(A){var t=new LA(A);this._lineMaterial.color=t,e&&(this._lineMaterial.opacity=e,this._lineMaterial.transparent=1!==e),this._meshMaterial.color=t,e&&(this._meshMaterial.opacity=e,this._meshMaterial.transparent=1!==e),this._lineMaterial.needsUpdate=!0,this._meshMaterial.needsUpdate=!0}},ju.prototype.enableStayInFront=function(){this._lineMaterial.transparent=!0,this._meshMaterial.transparent=!0,this._lineMaterial.depthTest=!1,this._meshMaterial.depthTest=!1},ju.prototype.disableStayInFront=function(){this._lineMaterial.transparent=!1,this._meshMaterial.transparent=!1,this._lineMaterial.depthTest=!0,this._meshMaterial.depthTest=!0},Hu.prototype.setupColor=function(A,e){A&&this.axisNet.setColor(A,e)},Hu.prototype.hide=function(){this.axisNet&&(this.visibleByUser=!1,this.axisNet.group.visible=!1)},Hu.prototype.show=function(){this.axisNet&&(this.visibleByUser=!0,this.axisNet.group.visible=!0)},Hu.prototype.privateShow=function(){this.axisNet&&(this.axisNet.group.visible=!0)},Hu.prototype.privateHide=function(){this.axisNet&&(this.axisNet.group.visible=!1)},Hu.prototype.enableStayInFront=function(){this.axisNet.enableStayInFront()},Hu.prototype.disableStayInFront=function(){this.axisNet.disableStayInFront()};var Yu=function(){this.name="",this.componentkeys=[],this.box=void 0,this.center=void 0,this.map=void 0},Wu=function(){this.name="",this.image=void 0,this.width=0,this.height=0,this.sceneWidth=0,this.sceneHeight=0,this.box={x1:0,y1:0,z1:0,x2:0,y2:0,z2:0,offsetX:0,offsetY:0},this.componentKeys=void 0};Wu.prototype.clone=function(){var A=new Wu;return A.name=this.name,A.image=this.image,A.width=this.width,A.height=this.height,A.sceneWidth=this.sceneWidth,A.sceneHeight=this.sceneHeight,A.box=Object.assign({},this.box),A.componentKeys=this.componentKeys?[].concat(this.componentKeys):void 0,A},Yu.parseFloorInfos=function(A){for(var e=[],t=Object.keys(A),i=0,o=t.length;o>i;i+=1){var n=A[t[i]];if(n.length>0){var r=new Yu;r.componentkeys=n,r.name=t[i],e.push(r)}}if(e.length>0)return e};var Ju=function(){this.floors=void 0,this.sortedFloors=void 0,this.factor=1,this.baseFloorIndex=-1,this.averageHeight=0,this.center=void 0},zu=function(){function A(){cc(this,A),this.floors=void 0,this.floorExplosionInfo=void 0,this.modelType=void 0,this.modelKey=void 0,this.revitFilter={OST_CeilingOpening:!0,OST_FloorOpening:!0,OST_RoofOpening:!0,OST_Walls:!0,OST_StructuralFraming:!0,OST_CurtainWallPanels:!0,OST_CurtainWallMullions:!0,OST_CurtaSystem:!0,OST_ShaftOpening:!0},this.ifcFilter={IfcWallStandardCase:!0,IfcWall:!0,IfcCurtainWall:!0,IfcBeam:!0,IfcMember:!0}}return dc(A,[{key:"generateMiniMap",value:function(A){var e=this;if((this.modelType===Zc.RVT||this.modelType===Zc.IFC||this.modelType===Zc.MERGE)&&this.floors&&this.floors.length>0){var t=vc.MiniMapSize,i=t,o=A.rendererManager.renderer,n=new s(t,i),r=new g(n.x,n.y,{stencilBuffer:!1});o.setRenderTarget(r);var a=new p,l=o.getPixelRatio();o.getViewport(a),o.setPixelRatio(1),o.setViewport(0,0,n.width,n.height);var c=A.getScene(),h=new y,d=new y,u=A.getModel(this.modelKey).getBoundingBoxWorld();u.getCenter(h),u.getSize(d);var f=Math.ceil(Math.max(d.x,d.y)),m=f/2,C=new y(f,f,d.z);u.setFromCenterAndSize(h,C);var v=new Ka;v.up.set(0,1,0),v.position.set(h.x,h.y,u.max.z),v.lookAt(h.x,h.y,u.min.z),v.left=-m,v.right=m,v.top=m,v.bottom=-m,v.near=1,v.far=d.z,v.updateMatrixWorld(!0),v.updateProjectionMatrix();var I=document.createElement("canvas");I.width=n.width,I.height=n.height;var E=I.getContext("2d"),B=new Uint8Array(n.width*n.height*4),x=A.getFilter();this.floors.forEach((function(a){var s=e.findSpecificKeys(a.componentkeys,A);0===s.length&&(s=a.componentkeys);var l=A.getBoundingBoxByIds(s);l.getCenter(h),l.getSize(d);var p=new Wu;p.box.x1=l.min.x,p.box.y1=l.min.y,p.box.z1=l.min.z,p.box.x2=l.max.x,p.box.y2=l.max.y,p.box.z2=l.max.z,p.box.offsetX=l.min.x-u.min.x,p.box.offsetY=l.min.y-u.min.y,p.width=t,p.height=i,p.sceneWidth=f,p.sceneHeight=f,p.name=a.name,p.componentKeys=s,a.map=p,x.setIsolateList(s,!0),A.modelManager.applyFilter(),o.render(c,v),o.readRenderTargetPixels(r,0,0,n.width,n.height,B);for(var g=i/2,m=4*t,C=new Uint8Array(4*t),y=0;g>y;y+=1){var S=y*m,w=(i-y-1)*m;C.set(B.subarray(S,S+m)),B.copyWithin(S,w,w+m),B.set(C,w)}var M=new Uint8ClampedArray(B.buffer),b=new ImageData(M,n.width,n.height);E.putImageData(b,0,0),p.image=I.toDataURL()})),x.clearIsolation(),o.setRenderTarget(null),o.setPixelRatio(l),o.setViewport(a.x,a.y,a.width,a.height)}}},{key:"findSpecificKeys",value:function(A,e){for(var t=[],i=0,o=A.length;o>i;i+=1){var n=e.modelManager.getComponent(A[i]);if(n&&n.length>0){var r=n[0],a=r.buildInCategory,s=r.type;(a&&this.revitFilter[a]||s&&this.ifcFilter[s])&&t.push(A[i])}}return t}},{key:"getMimiMaps",value:function(){if(this.serverMapData)return{msg:"success",data:this.serverMapData.data};if(this.floors&&this.floors.length>0){for(var A=[],e=0,t=this.floors.length;t>e;e+=1){var i=this.floors[e].map;i&&A.push(i.clone())}if(A.length>0)return{msg:"success",data:A}}return{msg:"该模型不支持小地图"}}},{key:"getServerMimiMaps",value:function(A){var e=this.model.dataUrl.floorMapUrl(),t=this.model.accessToken,i=this;if(this.floors&&this.floors.length>0)if(this.serverMapData)A({msg:"success",data:i.serverMapData.data});else{var o={url:e,success:function(e){var t;"SUCCESS"===(t="string"==typeof e?JSON.parse(e):e).code?(i.serverMapData=t,A({msg:"success",data:t.data})):"FAILURE"===t.code?setTimeout((function(){i.getServerMimiMaps(A)}),3e3):A({msg:"获取模型小地图出错"})},error:function(){A({msg:"该模型不支持小地图"})}};t&&(o.headers={Authorization:t}),_d(o)}}}]),A}(),Zu=function(){this.leftChild=null,this.rightChild=null,this.boundingBox=null,this.level=-1,this.components=[]};Zu.prototype.init=function(A){if(A&&(void 0!==A.axis&&(this.level=A.axis),A.left&&(this.leftChild=new Zu,this.leftChild.init(A.left[0]?A.left[0]:A.left)),A.right&&(this.rightChild=new Zu,this.rightChild.init(A.right[0]?A.right[0]:A.right)),A.box&&!A.items&&(this.boundingBox=new aA((new y).fromArray(A.box.min),(new y).fromArray(A.box.max))),A.items))for(var e=0;A.items.length>e;e+=1)this.components.push(A.items[e].key)},Zu.prototype.intersect=function(A,e){if(this.boundingBox){if(!1===A.intersectsBox(this.boundingBox))return;this.leftChild&&this.leftChild.intersect(A,e),this.rightChild&&this.rightChild.intersect(A,e);for(var t=0;this.components.length>t;t+=1)e.push(this.components[t])}else for(var i=0;this.components.length>i;i+=1)e.push(this.components[i])},Zu.prototype.frustumIntersect=function(A,e,t){if(this.boundingBox){var i=this.boundingBox;if(t&&!t.equals(Bc)&&(i=this.boundingBox.clone()).applyMatrix4(t),!1===A.intersectsBox(i))return;this.leftChild&&this.leftChild.frustumIntersect(A,e,t),this.rightChild&&this.rightChild.frustumIntersect(A,e,t);for(var o=0;this.components.length>o;o+=1)e.push(this.components[o])}else for(var n=0;this.components.length>n;n+=1)e.push(this.components[n])},Zu.prototype.destroy=function(){this.leftChild&&this.leftChild.destroy(),this.rightChild&&this.rightChild.destroy(),this.leftChild=null,this.rightChild=null,this.boundingBox=null,this.level=-1,this.components=[]};var Xu=function(A){jr.call(this),this.handler=A,this.model=A.model,this.dataVersion=this.model.dataVersion,this.storage=this.model.getStorage(),this.url=A.model.dataUrl,this.offLine=A.model.offLine,this.fileLoader=A.model.fileLoader,this.descriptor=null,this.loader=new bu(this),this.Textureloader=new bu(this),this.jsonLoader=new bu(this),this.loadTaskCount=0,this.maxLoadTaskCount=0,this.loadTextureCount=0,this.maxLoadTextureCount=0,this.textruesLoaded=!1,this.dataLoaded=!1,this.taskComponentManager=new Ou(this,"component"),this.taskReuseNodeManager=new Ou(this,"component"),this.taskGeometrieManager=new Ou(this,"geometrie"),this.taskComponentNodeManager=new Ou(this,"nodes"),this.taskMaterialManager=new Ou(this,"material"),this.taskTexturesManager=new Ou(this,"textures"),this.fileKeyFromModelKey={},this.enableCompressedTexture=!1,this.enableSmallTexture=!1,this.startCallback=null,this.progressCallback=null,this.finishCallback=null,this.progress={total:0,loaded:0,failed:0},this.requests={}};Xu.prototype.destroy=function(){for(var A in this.requests)this.requests.hasOwnProperty(A)&&(this.requests[A].abort&&this.requests[A].abort(),delete this.requests[A]);this.taskComponentManager.stop(),this.taskComponentManager=null,this.taskGeometrieManager.stop(),this.taskGeometrieManager=null,this.taskMaterialManager.stop(),this.taskMaterialManager=null,this.taskTexturesManager.stop(),this.taskTexturesManager=null,this.url=null,this.model=null,this.fileLoader=null,this.descriptor=null,this.handler=null,this.startCallback=null,this.progressCallback=null,this.finishCallback=null,this.descriptor&&this.descriptor.destroy()},Xu.prototype.getStorage=function(){return this.storage},Xu.prototype.getDescriptor=function(){return this.descriptor},Xu.prototype.setNotifyProgress=function(A){this.notifyProgress=A},Xu.prototype.load=function(A,e,t){this.startCallback=A,this.progressCallback=e,this.finishCallback=t,this.loadData()},Xu.prototype.loadData=function(){var A=this.model,e=A.getConfig(),t=e.scene,i=e.animation;if(!t||!t.components||!t.geometries&&(!t.batchedGeometries&&!t.instancedGeometries||1>t.batchedGeometries.length&&1>t.instancedGeometries.length)||!t.materials||!t.textures)return A.setEmptyScene(!0),Bh.error("scene is null,modelKey is ",A.modelKey),void A.dispatchEventEx({type:Rc.ON_LOAD_EMPTY_SCENE,modelKey:A.modelKey});var o=0,n=0,r=0,a=t.components.length||0,s=t.materials.length||0,l=t.textures.length||0,c=t.lights&&t.lights.length||0,h=t.reuseNodes&&t.reuseNodes.length||0,d=[],p=[],g=[],u=[],f=[],m=[],C=[],y=t.textures,v=[],I=[];if(this.map={},ap(this.dataVersion,"2.0.0")){for(var E=0;a>E;E+=1)t.components[E].fileKey?d.push(t.components[E].fileKey):A.dispatchEventEx({type:Tc.SCENE_NOT_CLOSE,modelKey:A.modelKey});for(var B=0;s>B;B+=1)t.materials[B].fileKey?p.push(t.materials[B].fileKey):A.dispatchEventEx({type:Tc.SCENE_NOT_CLOSE,modelKey:A.modelKey})}else d=t.components,t.geometries,p=t.materials,Array.isArray(t.nodes)&&(C=t.nodes),I=t.reuseNodes||[];if(t.map&&(this.map=t.map),t.lights&&t.lights.length>0&&(m=t.lights),t.trees.length>0)for(var x=0;t.trees.length>x;x+=1){var S=t.trees[x];"partition"===S.type&&v.push(S.fileKey)}if(i&&(o=i.bones.length,n=1,r=1,g=i.bones,u.push(i.clips),f.push(i.nodes)),this.maxLoadTaskCount=0,this.maxLoadTaskCount+=a,this.maxLoadTaskCount+=s,this.maxLoadTaskCount+=o,this.maxLoadTaskCount+=n,this.maxLoadTaskCount+=r,this.maxLoadTaskCount+=c,this.maxLoadTaskCount+=v.length,this.maxLoadTaskCount+=h,this.maxLoadTaskCount+=C.length,1>this.maxLoadTaskCount)return Bh.info("Nothing to load ",A.modelKey),void A.dispatchEventEx({type:Tc.SCENE_NOTHING_TO_LOAD,modelKey:A.modelKey});this.progress.total+=this.maxLoadTaskCount,this.startCallback&&this.startCallback(),Bh.time("数据加载时间"),this._loadComponent(d),this._loadMaterial(p),this._loadComponentNode(C),this._loadReuseNode(I),vc.EnableTextureLoading&&l>0?(this.maxLoadTextureCount+=l,this._loadTextures(y)):this._onLoadTexture(),this._loadKDTree(v),this._loadClips(u),this._loadBones(g),this._loadNodes(f),c&&this._loadLights(m),this.offLine&&this.loadAttribute(),e.axis&&this._loadAxisNet(e.axis),this.loadFloorInfo(this.model.modelKey),this.loadSceneAndGeos(e)},Xu.prototype.loadSceneAndGeos=function(A){},Xu.prototype.getSceneTaskCount=function(A){return 0},Xu.prototype._loadLightmapConfig=function(A,e){var t=this.model,i=this.descriptor;i&&this.fileLoader.load(A,(function(A){var o;try{o=JSON.parse(A)}catch(A){return void console.log("Lightmap config data exceptions!")}void 0!==o.count.lightmapNum&&o.count.lightmapNum>0&&(t.lightmapNum=o.count.lightmapNum,t.lightmap=!0,i.lightmap=!0,vc.Instance=!1,vc.EnableLightmap=!0),e&&e()}))},Xu.prototype._onTaskFinished=function(){var A=this.model;this.loadTaskCount+=1;var e=this.dealProgressSegment(A,this.loadTaskCount);this.notifyProgress&&(this.progressCallback&&this.progressCallback({total:this.maxLoadTaskCount,loaded:e,modelKey:this.model.modelKey}));this.maxLoadTaskCount>this.loadTaskCount||(this.dataLoaded=!0,this.textruesLoaded&&(Bh.timeEnd("数据加载时间"),this.finishCallback&&this.finishCallback()))},Xu.prototype._onLoadTexture=function(){this.loadTextureCount+=1,this.maxLoadTextureCount>this.loadTextureCount||(this.textruesLoaded=!0,this.dataLoaded&&(Bh.timeEnd("数据加载时间"),this.finishCallback&&this.finishCallback()))},Xu.prototype._loadScene=function(A){var e=this,t=this.model,i=this.url,o=this.fileLoader;o.setResponseType("arraybuffer"),o.load(i.sceneUrl(A),(function(t){e._parseScene(t,A),e._onTaskFinished()}),void 0,(function(A){t.dispatchEvent({type:Tc.LOAD_ERROR,errorType:Tc.LOAD_SCENE_ERROR,event:A}),e._onTaskFinished()}))},Xu.prototype._parseScene=function(A,e){var t=new Loader.SceneReader(A);this.descriptor.mapSceneReader[e]=t,t=null},Xu.prototype._loadLine=function(){var A=this,e=this.model,t=this.url,i=this.fileLoader;i.setResponseType("arraybuffer"),i.load(t.lineUrl(),(function(e){A._parseLine(e),A._onTaskFinished()}),void 0,(function(t){e.dispatchEvent({type:Tc.LOAD_ERROR,errorType:Tc.LOAD_MATERIAL_ERROR,event:t}),A._onTaskFinished()}))},Xu.prototype._parseLine=function(A){for(var e=new Loader.LineReader(A),t=0,i=e.header.lineCount;i>t;++t){var o=e.getPtBuffer(t),n=e.getIdxBuffer(t);if(void 0!==o&&void 0!==n){var r=e.getLineData(t);if(0===r.lineType){for(var a=[],s=1,l=n.length;l>s;s++)a.push(n[s-1]),a.push(n[s]);a.length&&(n=a)}this.descriptor.cacheReferencedMeshBufferData("line-"+r.line_id,{P:o,I:n})}else Bh.log("Error Geometry!")}e=null},Xu.prototype._parseMaterialBinary=function(A){var e,t=this.url,i=this.model.materialManager,o=i.materials,n=i.textures,r=new Loader.MaterialReader(A),a=r.materialCount,s=this,l=[];if(a>=0){var c=this.model.manager.scene;for(e=0;a>e;++e){var h,d={},p=r.getMaterial(e);if(void 0!==p.color&&(d.color=p.color),void 0!==p.opacity&&(d.opacity=p.opacity,1>p.opacity&&(d.transparent=!0)),void 0!==p.side&&p.side&&(d.side=2),void 0!==p.emissive&&(d.emissive=p.emissive),void 0!==p.environment&&(d.envMapIntensity=p.environment),void 0!==p.roughness&&(d.roughness=p.roughness,d.originRoughness=p.roughness),void 0!==p.metalness&&(d.metalness=p.metalness,d.originMetalness=p.metalness),vc.IBL?(d.iblProbe=c.iblProbe,(h=new ImageBasedLighting.IBLMaterial(d)).type="IBL"):h=Kd.createStandardMaterial(d),h.name=e,o[e]=h,d=null,vc.EnableTextureLoading){var g=null;p.texture_n>0&&(g=r.getTexture(p.texture_id[0])),g&&l.push({id:e,data:g})}}if(l.length>0){for(a=this.maxLoadTextureCount=l.length,e=0;a>e;e+=1)this._parseTexture(t,l[e],n);l=null}else s._onLoadTexture();if(this.model.lightmap){var u=this.model.lightmapNum;for(this.maxLoadTextureCount+=u,e=0;u>e;e+=1){var f=this._loadTexture(t.textureUrl("lightmap-rgbm"+e+".png"),(function(){s._onLoadTexture()}),void 0,(function(){s._onLoadTexture()}));i.lightmaps[e]=f}}r=null}},Xu.prototype._parseMaterialJson=function(A){var e,t=this.url,i=this.model.materialManager,o=i.materials,n=i.textures,r=new Loader.MaterialReaderJson(A),a=r.count,s=this,l=[];if(a>=0){var c=this.model.manager.scene;for(e=0;a>e;++e){var h,d={},p=r.getMaterial(e),g=p.parameters;if(void 0!==g.color&&(d.color=g.color),void 0!==g.opacity&&(d.opacity=g.opacity,1>g.opacity&&(d.transparent=!0)),void 0!==g.side&&"double"===g.side&&(d.side=2),void 0!==g.emissive&&(d.emissive=g.emissive),void 0!==g.environment&&(d.envMapIntensity=g.environment),void 0!==g.roughness&&(d.roughness=g.roughness,d.originRoughness=g.roughness),void 0!==g.metalness&&(d.metalness=g.metalness,d.originMetalness=g.metalness),void 0!==g.refractionRatio&&(d.refractionRatio=g.refractionRatio),void 0!==g.imageFade&&(d.imageFade=g.imageFade),this.model.lightmap&&(d.lights=!1),vc.IBL?(d.iblProbe=c.iblProbe,(h=new ImageBasedLighting.IBLMaterial(d)).type="IBL"):(h=Kd.createStandardMaterial(d)).refreshUniforms(),h.name=e,o[e]=h,d=null,vc.EnableTextureLoading){var u=[],f=p.textures;for(var m in f){"reliefMap"==m&&f.bumpMap||u.push({type:m,data:f[m]})}u.length>0&&l.push({id:e,dataArray:u})}}if(l.length>0){for(a=l.length,e=0;a>e;e+=1){this.maxLoadTextureCount+=(u=l[e].dataArray).length}for(e=0;a>e;e+=1){for(var C=l[e].id,y=[],v=0,I=(u=l[e].dataArray).length;I>v;v++)this._parseTextureJson(t,u[v],y);n[C]=y}l=null}else s._onLoadTexture();if(this.model.lightmap){var E=this.model.lightmapNum;for(this.maxLoadTextureCount+=E,e=0;E>e;e+=1){var B=this._loadTexture(t.lightmapTexUrl("lightmap-rgbm"+e+".png"),(function(){s._onLoadTexture()}),void 0,(function(){s._onLoadTexture()}));i.lightmaps[e]=B}}r=null}},Xu.prototype._loadTexture=function(A,e,t,i){var o,n=Yr.Handlers.get(A),r=this;return null!==n?o=n.load(A,e):(o=new d,(n=new _r).setCrossOrigin("anonymous"),n.load(A,(function(A){o.image=Kd.ensurePowerOfTwo(A),o.needsUpdate=!0,e&&e(o)}),t,(function(A){void 0!==i&&i(A),r.model.dispatchEvent({type:Tc.LOAD_ERROR,errorType:Tc.LOAD_TEXTURE_ERROR,event:A})}))),o},Xu.prototype._loadCompressedTexture=function(A,e,t,i){},Xu.prototype._loadTextureByCrypto=function(A,e,t,i){var o,n=Yr.Handlers.get(A),r=this;return null!==n?o=n.load(A,e):(o=new d,(n=new TEST.CryptoResourceLoader).loadURL(A,(function(A){var t=new Blob([A],{type:"jpeg"}),n=new Image;n.onload=function(){o.image=Kd.ensurePowerOfTwo(n),o.needsUpdate=!0,e&&e(o)},n.onerror=function(A){i&&i(A),r.model.dispatchEvent({type:Tc.LOAD_ERROR,errorType:Tc.LOAD_TEXTURE_ERROR,event:A})},n.src=URL.createObjectURL(t)}),(function(A){void 0!==i&&i(A),r.model.dispatchEvent({type:Tc.LOAD_ERROR,errorType:Tc.LOAD_TEXTURE_ERROR,event:A})}))),o},Xu.prototype._parseTexture=function(A,e,t){var i=window.TEST||{},o=e.id,n=e.data,r=n.id+n.file_name_ext;this.textureLoader=this.enableCompressedTexture&&n.dds?this._loadCompressedTexture:i.CryptoResourceLoader?this._loadTextureByCrypto:this._loadTexture;var a=this;this.textureLoader(A.textureUrl(r),(function(A){A.repeat.fromArray([n.scale_u,n.scale_v]),A.offset.fromArray([n.offset_u,n.offset_v]),A.setRotateAngle&&A.setRotateAngle(n.angle),n.repeat_u&&(A.wrapS=1e3),n.repeat_v&&(A.wrapT=1e3),A&&(t[o]=A),a._onLoadTexture()}),void 0,(function(){a._onLoadTexture()}))},Xu.prototype._parseTextureJson=function(A,e,t){var i=window.TEST||{},o=e.type,n=e.data,r=A.textureUrl(n.sourceFile),a=this.enableSmallTexture&&n.texture_small;if(!a&&this.enableCompressedTexture&&n.dds)this.textureLoader=this._loadCompressedTexture;else if(this.textureLoader=i.CryptoResourceLoader?this._loadTextureByCrypto:this._loadTexture,a){var s=r.lastIndexOf(".");r=r.substring(0,s)+"_s"+r.substring(s)}var l=this;this.textureLoader(r,(function(A){A.repeat.fromArray([n.scale[0],n.scale[1]]),A.offset.fromArray([n.offset[0],n.offset[1]]),A.setRotateAngle&&A.setRotateAngle(n.angle),n.repeatU&&(A.wrapS=1e3),n.repeatV&&(A.wrapT=1e3),A.texturetype=o,"reliefMap"==o&&(A.texturetype="bumpMap"),n.dataType&&"NormalMap"==n.dataType&&(A.texturetype="normalMap"),n.alpha&&(A.texturetype="alphaMap"),n.depth&&(A.depth=n.depth),A&&t.push(A),l._onLoadTexture()}),void 0,(function(){l._onLoadTexture()}))},Xu.prototype._loadUV2=function(){var A=this,e=this.url,t=this.fileLoader;t.setResponseType("arraybuffer"),t.load(e.uv2Url(),(function(e){A.uv2Buffer=new Uint16Array(e),A._onTaskFinished()}),void 0,(function(e){A._onTaskFinished()})),t.setResponseType(""),t.load(e.uv2MapItemUrl(),(function(e){A.uv2MapItem=JSON.parse(e),A._onTaskFinished()}),void 0,(function(e){A._onTaskFinished()}))},Xu.prototype.getUV2ById=function(A,e){if(this.uv2MapItem&&e){var t=this.uv2MapItem[A];if(t){var i=t.uv1Scale,o=t.uv1Translation,n=t.uv1ByteOffset/2,r=2*e;if(this.uv2Buffer){for(var a=this.uv2Buffer.slice(n,n+r),s=[],l=0;r>l;l+=2)s.push(i[0]*(a[l]/65535)+o[0]),s.push(i[1]*(a[l+1]/65535)+o[1]);return{lightmapIdx:t.lightmapIdx,uv2:s}}}}},Xu.prototype._loadSymbol=function(){var A=this,e=this.url,t=this.fileLoader;t.setResponseType("arraybuffer"),t.load(e.symbolUrl(),(function(e){A.parseSymbol(e),A._onTaskFinished()}),void 0,(function(e){A.model.dispatchEvent({type:Tc.LOAD_ERROR,errorType:Tc.LOAD_SYMBOL_ERROR,event:e}),A._onTaskFinished()}))},Xu.prototype.parseSymbol=function(A){this.descriptor.symbolReader=new Loader.SymbolReader(A)},Xu.prototype._loadOctree=function(A,e){var t=null,i=this.model.configLoader.transformInfos.transformMatrix;this.model.configLoader.transformInfos.octreeTransformed&&(t=new M).getInverse(i),A&&this._loadOctreeBy(t,!1),e&&this._loadOctreeBy(t,!0)},Xu.prototype._loadOctreeBy=function(A,e){var t,i=this,o=this.url,n=this.fileLoader;t=o.octreeUrl(e?"i":"o"),n.setResponseType("arraybuffer"),n.load(t,(function(t){i._parseOctree(t,A,e),i._onTaskFinished()}),void 0,(function(A){i.model.dispatchEvent({type:Tc.LOAD_ERROR,errorType:Tc.LOAD_OCTREEINNER_ERROR,event:A}),i._onTaskFinished()}))},Xu.prototype._parseOctree=function(A,e,t){this.descriptor.octreeRootNode[t?"inner":"outer"]=this._getOctreeRootNode(A,e)},Xu.prototype._getOctreeRootNode=function(A,e){function t(A,t){e&&t.boundingBox.applyMatrix4(e),A.boundingBoxWorld=t.boundingBox.clone(),A.min=t.boundingBox.min,A.max=t.boundingBox.max,A.center=t.boundingBox.getCenter(),A.size=t.boundingBox.getSize().lengthSq(),A.childStart=t.child_s,A.childEnd=t.child_e}function i(A,e){A.octType=0,e.center.x>A.center.x&&(A.octType+=1),e.center.y>A.center.y&&(A.octType+=2),e.center.z>A.center.z&&(A.octType+=4)}var o=null,n=new Loader.OctreeReader(A);if(n.getCount()>0){var r=n.getNode(0);t(o=new Loader.OctreeNode(r.cell_id,0),r),function A(e,o){for(var n=e.childEnd,r=e.childStart;n>r;++r){var a=o.getNode(r),s=new Loader.OctreeNode(a.cell_id,e.depth);t(s,a),e.add(s),i(s,e),s.updateMaxDepth(),A(s,o)}}(o,n)}return n=null,o},Xu.prototype._loadUserId=function(){var A=this,e=this.url,t=this.fileLoader;t.setResponseType("arraybuffer"),t.load(e.userIdUrl(),(function(e){A._parseUserId(e),A._onTaskFinished()}),void 0,(function(e){A.model.dispatchEvent({type:Tc.LOAD_ERROR,errorType:Tc.LOAD_USERID_ERROR,event:e}),A._onTaskFinished()}))},Xu.prototype._parseUserId=function(A){this.descriptor.userIdReader=new Loader.IdReader(A)},Xu.prototype._loadUserData=function(){var A=this,e=this.url,t=this.fileLoader;t.setResponseType(""),t.load(e.userDataUrl(),(function(e){A._parseUserData(e),A._onTaskFinished()}),void 0,(function(e){A.model.dispatchEvent({type:Tc.LOAD_ERROR,errorType:Tc.LOAD_USERDATA_ERROR,event:e}),A._onTaskFinished()}))},Xu.prototype._parseUserData=function(A){this.descriptor.userDataReader=new Loader.UserDataReader(A)},Xu.prototype._loadCamera=function(){var A=this,e=this.url,t=this.fileLoader;t.setResponseType(""),t.load(e.cameraUrl(),(function(e){A._parseCamera(e),A._onTaskFinished()}),void 0,(function(e){A.model.dispatchEvent({type:Tc.LOAD_ERROR,errorType:Tc.LOAD_CAMERA_ERROR,event:e}),A._onTaskFinished()}))},Xu.prototype._parseCamera=function(A){var e=this.model.configLoader.transformInfos.transformMatrix;new Loader.CameraReader(A).parse(this.model,e)},Xu.prototype._parseGeo=function(A,e){for(var t=new Loader.MPKReader(A),i=new M,o=0,n=t.header.meshCount;n>o;++o){var r=t.getPtBuffer(o),a=t.getIdxBuffer(o),s=t.getNormalBuffer(o),l=t.getMeshData(o),c=t.getUVBuffer(o);null!=r&&null!=a?(0!==l.baseScale&&(r=new Float32Array(r),i.identity(),i.setPosition(new y(l.baseX,l.baseY,l.baseZ)),i.scale(new y(l.baseScale,l.baseScale,l.baseScale)),GeomUtil.applyMatrix4ToBuffer(i,r)),this.descriptor.cacheReferencedMeshBufferData(l.mesh_id,{P:r,I:a,N:s,UV:c}),this.descriptor.cacheReferencedMeshGeoIds(e,l.mesh_id)):Logger.log("Error Geometry!")}t=null},Xu.prototype._loadBorderline=function(A){var e=this,t=this.url,i=this.fileLoader,o=t.borderLineUrl(A?1:0);i.setResponseType("arraybuffer"),i.load(o,(function(t){e._parseBorderLine(t,A),e._onTaskFinished()}),void 0,(function(A){e.model.dispatchEvent({type:Tc.LOAD_ERROR,errorType:Tc.LOAD_MATERIAL_ERROR,event:A}),e._onTaskFinished()}))},Xu.prototype._parseBorderLine=function(A,e){for(var t=new Loader.LineReader(A),i=[],o=0,n=t.header.lineCount;n>o;++o){var r=t.getLineData(o);i.push({meshId:r.line_id,positionStart:r.ptOffset/4,positionCount:3*r.ptCount,indexStart:r.idxOffset/4,indexCount:r.idxCount})}this.descriptor.cacheBorderLine(e,{P:t.ptBuffer,I:t.idxBuffer,IndexInfos:i}),t=null},Xu.prototype._isLoadGeoBorderlines=function(){var A=this.model.getConfig().metadata;return!(!vc.BorderLineBatched||!A.outline_mpk)},Xu.prototype.getAllBorderlineCount=function(){var A=this.model.getConfig().metadata;return this._isLoadGeoBorderlines()?A.outline_mpk:A.outline_0+A.outline_1},Xu.prototype._loadAllBorderlines=function(A){this._isLoadGeoBorderlines()?A.outline_mpk&&this._loadAllGeoBorderLines(A.outline_mpk):(A.outline_0&&this._loadBorderline(!1),A.outline_1&&this._loadBorderline(!0))},Xu.prototype.delayLoadBorderlines=function(A){this.model.getConfig();this._isLoadGeoBorderlines()?this._delayLoadGeoBorderlines(A):this._delayLoadTogetherBorderlines(A)},Xu.prototype._delayLoadGeoBorderlines=function(A){var e=this.model.getConfig().metadata;this.startCallback=null,this.progressCallback=null,this.finishCallback=A,this.loadTaskCount=0,this.maxLoadTaskCount=e.outline_mpk,e.outline_mpk&&this._loadAllGeoBorderLines(e.outline_mpk)},Xu.prototype._delayLoadTogetherBorderlines=function(A){var e=this.model.getConfig().metadata;this.startCallback=null,this.progressCallback=null,this.finishCallback=A,this.loadTaskCount=0,this.maxLoadTaskCount=e.outline_0+e.outline_1,e.outline_0&&this._loadBorderline(!1),e.outline_1&&this._loadBorderline(!0)},Xu.prototype._loadAllGeoBorderLines=function(A){this.mpkBorderLineTaskManager||(this.mpkBorderLineTaskManager=new Ou);for(var e=0;A>e;++e)this.mpkBorderLineTaskManager.addTask(e);this.mpkBorderLineTaskManager.processTasks(this._loadGeoBorderLine.bind(this))},Xu.prototype._loadGeoBorderLine=function(A,e){var t=this,i=this.fileLoader,o=this.url,n=A>=this.model.getConfig().metadata.mpk_shared_index;i.setResponseType("arraybuffer"),i.load(o.mpkBorderLineUrl(A),(function(A){t._parseGeoBorderLine(A,n),e(),t._onTaskFinished()}),void 0,(function(A){t._onTaskFinished()}))},Xu.prototype._parseGeoBorderLine=function(A,e){for(var t=new Loader.LineReader(A),i=[],o=0,n=t.header.lineCount;n>o;++o){var r=t.getLineData(o);i.push({meshId:r.line_id,positionStart:r.ptOffset/4,positionCount:3*r.ptCount,indexStart:r.idxOffset/4,indexCount:r.idxCount})}this.descriptor.cacheBorderLine(e,{P:t.ptBuffer,I:t.idxBuffer,IndexInfos:i}),t=null},Xu.prototype.dealProgressSegment=function(A,e){return vc.MergeComponent?e*A.progressPercentage.load:e},Xu.prototype._loadWireframe=function(A){var e=this;if(vc.getDataFromIndexedDB&&!this.offLine){for(var t=this.url,i=[],o=0;A.length>o;o+=1)i.push(t.mpkUrl(A[o]));var n=this.model.getStorage();n&&n.getBatch(i,(function(A){for(var t=function(t){if(A[i[t]])if(!0===A[i[t]].split){var o=A[i[t]].list,s=new Uint8Array(A[i[t]].length);n.getBatch(o,(function(A){for(var n=!0,r=0;o.length>r;r+=1)A[o[r]]?s.set(new Uint8Array(A[o[r]]),4e7*r):(n=!1,Bh.error("获取分割几何失败"));if(n){var a=i[t].indexOf("fileKey=");e._parseWireframe(s.buffer,i[t].slice(a+8)),Bh.debug("load geo from local"),e._onTaskFinished()}else{var l=e.taskGeometrieManager;if(-1===(a=i[t].indexOf("fileKey=")))return void Bh.error("url is not has fileKey");l.addTask(i[t].slice(a+8)),Bh.debug("load geo from net"),e.taskGeometrieManager.processTasks(e.loadWireframe.bind(e))}}),(function(){Bh.error("获取分割几何失败")}))}else a=i[t].indexOf("fileKey="),e._parseWireframe(A[i[t]],i[t].slice(a+8)),Bh.debug("load geo from local"),e._onTaskFinished();else{if(r=e.taskGeometrieManager,-1===(a=i[t].indexOf("fileKey=")))return Bh.error("url is not has fileKey"),{v:void 0};r.addTask(i[t].slice(a+8)),Bh.debug("load geo from net")}},o=0;i.length>o;o+=1){var r,a,s=t(o);if("object"===lc(s))return s.v}e.taskGeometrieManager.processTasks(e.loadWireframe.bind(e))}),(function(){for(var t=e.taskGeometrieManager,i=0;A.length>i;i+=1)t.addTask(A[i]);t.processTasks(e.loadWireframe.bind(e))}))}else{for(var r=this.taskGeometrieManager,a=0;A.length>a;a+=1)r.addTask(A[a]);r.processTasks(e.loadWireframe.bind(e))}},Xu.prototype._loadGeo=function(A){var e=this;if(vc.getDataFromIndexedDB&&!this.offLine){for(var t=this.url,i=[],o=0;A.length>o;o+=1)i.push(t.mpkUrl(A[o]));var n=this.model.getStorage();n&&n.getBatch(i,(function(A){for(var t=function(t){if(A[i[t]])if(!0===A[i[t]].split){var o=A[i[t]].list,s=new Uint8Array(A[i[t]].length);n.getBatch(o,(function(A){for(var n=0;o.length>n;n+=1)A[o[n]]?s.set(new Uint8Array(A[o[n]]),4e7*n):Bh.error("获取分割几何失败");var r=i[t].indexOf("fileKey=");e._parseGeometrie(s.buffer,i[t].slice(r+8)),Bh.debug("load geo from local"),e._onTaskFinished()}),(function(){Bh.error("获取分割几何失败")}))}else a=i[t].indexOf("fileKey="),e._parseGeometrie(A[i[t]],i[t].slice(a+8)),Bh.debug("load geo from local"),e._onTaskFinished();else{if(r=e.taskGeometrieManager,-1===(a=i[t].indexOf("fileKey=")))return Bh.error("url is not has fileKey"),{v:void 0};r.addTask(i[t].slice(a+8)),Bh.debug("load geo from net")}},o=0;i.length>o;o+=1){var r,a,s=t(o);if("object"===lc(s))return s.v}e.taskGeometrieManager.processTasks(e.loadGeometrie.bind(e))}),(function(){for(var t=e.taskGeometrieManager,i=0;A.length>i;i+=1)t.addTask(A[i]);t.processTasks(e.loadGeometrie.bind(e))}))}else{for(var r=this.taskGeometrieManager,a=0;A.length>a;a+=1)r.addTask(A[a]);r.processTasks(e.loadGeometrie.bind(e))}},Xu.prototype._loadComponentNode=function(A){var e=this;if(vc.getDataFromIndexedDB&&!this.offLine){for(var t=this.url,i=[],o=0;A.length>o;o+=1)i.push(t.mpkUrl(A[o]));var n=this.model.getStorage();n&&n.getBatch(i,(function(A){for(var t=function(t){if(A[i[t]])if(!0===A[i[t]].split){var o=A[i[t]].list,s=new Uint8Array(A[i[t]].length);n.getBatch(o,(function(A){for(var n=0;o.length>n;n+=1)A[o[n]]?s.set(new Uint8Array(A[o[n]]),4e7*n):Bh.error("获取分割node失败");var r=i[t].indexOf("fileKey=");e._parseComponentNode(s.buffer,i[t].slice(r+8)),Bh.debug("load geo from local"),e._onTaskFinished()}),(function(){Bh.error("获取分割node失败")}))}else a=i[t].indexOf("fileKey="),e._parseComponentNode(A[i[t]],i[t].slice(a+8)),Bh.debug("load geo from local"),e._onTaskFinished();else{if(r=e.taskComponentNodeManager,-1===(a=i[t].indexOf("fileKey=")))return Bh.error("url is not has fileKey"),{v:void 0};r.addTask(i[t].slice(a+8)),Bh.debug("load component.node from net")}},o=0;i.length>o;o+=1){var r,a,s=t(o);if("object"===lc(s))return s.v}e.taskComponentNodeManager.processTasks(e.loadComponentNode.bind(e))}),(function(){for(var t=e.taskComponentNodeManager,i=0;A.length>i;i+=1)t.addTask(A[i]);t.processTasks(e.loadComponentNode.bind(e))}))}else{for(var r=this.taskComponentNodeManager,a=0;A.length>a;a+=1)r.addTask(A[a]);r.processTasks(e.loadComponentNode.bind(e))}},Xu.prototype._loadKDTree=function(A){var e=this;if(vc.getDataFromIndexedDB&&!this.offLine){for(var t=this.url,i=[],o=0;A.length>o;o+=1)i.push(t.kdTreeUrl(A[o]));var n=this.model.getStorage();n&&n.getBatch(i,(function(A){for(var t=0;i.length>t;t+=1){var o=i[t].indexOf("fileKey=");if(-1===o)return void Bh.error("url is not has fileKey");var n=i[t].slice(o+8);A[i[t]]?(e._parseKDTree(A[i[t]],n),Bh.debug("load kdTree from local"),e._onTaskFinished()):(e.loadKDTree(n,(function(){})),Bh.debug("load kdtree from net"))}}),(function(){for(var t=0;A.length>t;t+=1)e.loadKDTree(A[t],(function(){}))}))}else for(var r=0;A.length>r;r+=1)e.loadKDTree(A[r],(function(){}))},Xu.prototype._loadLights=function(A){var e=this;if(vc.getDataFromIndexedDB&&!this.offLine){for(var t=this.url,i=[],o=0;A.length>o;o+=1)i.push(t.lightUrl(A[o]));var n=this.model.getStorage();n&&n.getBatch(i,(function(A){for(var t=0;i.length>t;t+=1){var o=i[t].indexOf("fileKey=");if(-1===o)return void Bh.error("url is not has fileKey");var n=i[t].slice(o+8);A[i[t]]?(e._parseLight(A[i[t]],n),Bh.debug("load light from local"),e._onTaskFinished()):(e.loadLight(n,(function(){})),Bh.debug("load kdtree from net"))}}),(function(){for(var t=0;A.length>t;t+=1)e.loadLight(A[t],(function(){}))}))}else for(var r=0;A.length>r;r+=1)e.loadLight(A[r],(function(){}))},Xu.prototype._loadBones=function(A){var e=this;if(vc.getDataFromIndexedDB&&!this.offLine){for(var t=this.url,i=[],o=0;A.length>o;o+=1)i.push(t.bonesUrl(A[o]));var n=this.model.getStorage();n&&n.getBatch(i,(function(A){for(var t=0;i.length>t;t+=1)if(A[i[t]])e._parseBones(A[i[t]]),Bh.debug("load Bones from local"),e._onTaskFinished();else{var o=i[t].indexOf("fileKey=");if(-1===o)return void Bh.error("url is not has fileKey");e.loadBones(i[t].slice(o+8),(function(){})),Bh.debug("load Bones from net")}}),(function(){for(var t=0;A.length>t;t+=1)e.loadBones(A[t],(function(){}))}))}else{for(var r=this.taskComponentManager,a=0;A.length>a;a+=1)r.addTask(A[a]);r.processTasks(e.loadBones.bind(e))}},Xu.prototype._loadClips=function(A){var e=this;if(vc.getDataFromIndexedDB&&!this.offLine){for(var t=this.url,i=[],o=0;A.length>o;o+=1)i.push(t.clipsUrl(A[o]));var n=this.model.getStorage();n&&n.getBatch(i,(function(A){for(var t=0;i.length>t;t+=1)if(A[i[t]])e._parseClips(A[i[t]]),Bh.debug("load Clips from local"),e._onTaskFinished();else{var o=i[t].indexOf("fileKey=");if(-1===o)return void Bh.error("url is not has fileKey");e.loadClips(i[t].slice(o+8),(function(){})),Bh.debug("load Clips from net")}}),(function(){for(var t=0;A.length>t;t+=1)e.loadClips(A[t],(function(){}))}))}else{for(var r=this.taskComponentManager,a=0;A.length>a;a+=1)r.addTask(A[a]);r.processTasks(e.loadClips.bind(e))}},Xu.prototype._loadNodes=function(A){var e=this;if(vc.getDataFromIndexedDB&&!this.offLine){for(var t=this.url,i=[],o=0;A.length>o;o+=1)i.push(t.nodesUrl(A[o]));var n=this.model.getStorage();n&&n.getBatch(i,(function(A){for(var t=0;i.length>t;t+=1)if(A[i[t]])e._parseNodes(A[i[t]]),Bh.debug("load Nodes from local"),e._onTaskFinished();else{var o=i[t].indexOf("fileKey=");if(-1===o)return void Bh.error("url is not has fileKey");e.loadNodes(i[t].slice(o+8),(function(){})),Bh.debug("load Nodes from net")}}),(function(){for(var t=0;A.length>t;t+=1)e.loadNodes(A[t],(function(){}))}))}else{for(var r=this.taskComponentManager,a=0;A.length>a;a+=1)r.addTask(A[a]);r.processTasks(e.loadNodes.bind(e))}},Xu.prototype._loadComponent=function(A){var e=this;if(vc.getDataFromIndexedDB&&!this.offLine){for(var t=this.url,i=[],o=0;A.length>o;o+=1)i.push(t.mpkUrl(A[o]));var n=this.model.getStorage();n&&n.getBatch(i,(function(A){for(var t=0;i.length>t;t+=1){if(-1===(r=i[t].indexOf("fileKey="))&&!e.offLine)return void Bh.error("url is not has fileKey");var o=i[t].slice(r+8);if(A[i[t]])e._parseComponent(A[i[t]],o),Bh.debug("load com from local"),e._onTaskFinished();else{var n=e.taskComponentManager;if(e.offLine){var r;if(-1===(r=i[t].indexOf("data/")))return void Bh.error("url is not has data/");n.addTask(i[t].slice(r+5))}else n.addTask(o);n.processTasks(e.loadComponent.bind(e)),Bh.debug("load com from net")}}}),(function(){for(var t=e.taskComponentManager,i=0;A.length>i;i+=1)t.addTask(A[i]);t.processTasks(e.loadComponent.bind(e))}))}else{for(var r=this.taskComponentManager,a=0;A.length>a;a+=1)r.addTask(A[a]);r.processTasks(e.loadComponent.bind(e))}},Xu.prototype._loadReuseNode=function(A){var e=this;if(vc.getDataFromIndexedDB){for(var t=this.url,i=[],o=0;A.length>o;o+=1)i.push(t.mpkUrl(A[o]));var n=this.model.getStorage();n&&n.getBatch(i,(function(A){for(var t=0;i.length>t;t+=1)if(A[i[t]])e._parseReuseNodes(A[i[t]]),Bh.debug("load com from local"),e._onTaskFinished();else{var o=e.taskReuseNodeManager;if(e.offLine){if(-1===(n=i[t].indexOf("data/")))return void Bh.error("url is not has data/");o.addTask(i[t].slice(n+5))}else{var n;if(-1===(n=i[t].indexOf("fileKey=")))return void Bh.error("url is not has fileKey");o.addTask(i[t].slice(n+8))}o.processTasks(e.loadReuseNode.bind(e)),Bh.debug("load com from net")}}),(function(){for(var t=e.taskReuseNodeManager,i=0;A.length>i;i+=1)t.addTask(A[i]);t.processTasks(e.loadReuseNode.bind(e))}))}else{for(var r=this.taskReuseNodeManager,a=0;A.length>a;a+=1)r.addTask(A[a]);r.processTasks(e.loadReuseNode.bind(e))}},Xu.prototype._loadMaterial=function(A){var e=this;if(vc.getDataFromIndexedDB&&!this.offLine){for(var t=this.url,i=[],o=0;A.length>o;o+=1)i.push(t.mpkUrl(A[o]));var n=this.model.getStorage();n&&n.getBatch(i,(function(A){for(var t=0;i.length>t;t+=1)if(A[i[t]])e._parseMaterial(A[i[t]]),Bh.debug("load mat from local"),e._onTaskFinished();else{var o=e.taskMaterialManager,n=i[t].indexOf("fileKey=");if(-1===n)return void Bh.error("url is not has fileKey");o.addTask(i[t].slice(n+8)),o.processTasks(e.loadMaterial.bind(e)),Bh.debug("load mat from net")}}),(function(){for(var t=e.taskMaterialManager,i=0;A.length>i;i+=1)t.addTask(A[i]);t.processTasks(e.loadMaterial.bind(e))}))}else{for(var r=this.taskMaterialManager,a=0;A.length>a;a+=1)r.addTask(A[a]);r.processTasks(e.loadMaterial.bind(e))}},Xu.prototype._loadTextures=function(A){var e=this.model.materialManager.textures,t=this;if(vc.getDataFromIndexedDB&&!this.offLine){for(var i=this.url,o=[],n=0;A.length>n;n+=1)o.push(i.mpkUrl(A[n]));var r=this.model.getStorage();r&&r.getBatch(o,(function(A){for(var i=0;o.length>i;i+=1)if(A[o[i]]){var n,r=function(){if(-1===(n=o[i].indexOf("fileKey=")))return Bh.error("url is not has fileKey"),{v:void 0};var r=A[o[i]];A[o[i]]instanceof Blob||(r=new Blob([A[o[i]]],{type:"text/plain"}));var a=o[i].slice(n+8),s=new d;Bh.debug("load tex from local"),e[a]=s;var l=document.createElement("img");s.wrapS=s.wrapT=1e3,l.onload=function(e){"string"!=typeof A[o[i]]&&window.URL.revokeObjectURL(l.src),t.model.textureNeedsUpdate=!0,s.image=Kd.ensurePowerOfTwo(l),t._onLoadTexture()},l.onerror=function(A){t.model.dispatchEventEx({type:Tc.LOAD_TEXTURE_ERROR})},l.src="string"==typeof A[o[i]]?A[o[i]]:window.URL.createObjectURL(r),s.image=l,s.needsUpdate=!0}();if("object"===lc(r))return r.v}else{var a=t.taskTexturesManager,s=o[i].indexOf("fileKey=");if(-1===s)return void Bh.error("url is not has fileKey");a.addTask(o[i].slice(s+8)),a.processTasks(t.loadTextures.bind(t)),Bh.debug("load tex from net")}}),(function(){for(var e=t.taskTexturesManager,i=0;A.length>i;i+=1)e.addTask(A[i]);e.processTasks(t.loadTextures.bind(t))}))}else{for(var a=this.taskTexturesManager,s=0;A.length>s;s+=1)a.addTask(A[s]);a.processTasks(t.loadTextures.bind(t))}},Xu.prototype._loadAxisNet=function(A){if(A){var e=this;if(vc.getDataFromIndexedDB&&!this.offLine){var t=this.url.axisNetUrl(A),i=this.model.getStorage();i&&i.getBatch([t],(function(i){if(i[t])e._parseAxisNet(i[t]),Bh.debug("load axisnet from local");else{if(-1===t.indexOf("fileKey="))return void Bh.error("url is not has fileKey");e.loadAxisNet(A),Bh.debug("load axisnet from net")}}),(function(){e.loadAxisNet(A)}))}else e.loadAxisNet(A)}},Xu.prototype._parseWireframe=function(A,e){var t=new Lu.GeometryReader(A,this.dataVersion),i=this.descriptor;if(i){for(var o=t.geoCount,n=0;o>n;n+=1){var r=t.geomMap[n];void 0!==r.position&&void 0!==r.index?i.cacheReferencedMeshWireframeData(r.geoId,r):Bh.error("Error Geometry!")}t=null}},Xu.prototype._parseGeometrie=function(A,e){var t=this.fileKeyFromModelKey[e]||"",i=new ku.GeometryReader(A,this.dataVersion),o=this.descriptor;if(o){for(var n=i.geoCount,r=0;n>r;r+=1){var a=i.geomMap[r];void 0!==a.position&&void 0!==a.index&&void 0!==a.normal?(vc.DEBUG&&window.geoidToFileKeyMap&&(window.geoidToFileKeyMap[a.geoId]=e),o.cacheReferencedMeshBufferData(t+a.geoId,a)):Bh.error("Error Geometry!")}i=null}},Xu.prototype._parseComponentNode=function(A,e){var t=this.fileKeyFromModelKey[e]||"",i=new ku.NodesReader(A,this.dataVersion),o=this.descriptor;if(o){for(var n=i.nodeCount,r=0;n>r;r+=1){var a=i.geomMap[r];void 0!==a.matrix&&void 0!==a.material&&void 0!==a.nodeId?o.cacheReferencedMeshComponentNodeData(t+a.nodeId,a):Bh.error("Error Node!")}i=null}},Xu.prototype._parseMaterial=function(A,e){var t=this.descriptor;if(t){var i=new Du(A,this.dataVersion);if(Array.isArray(i.materialMap)){var o=i.materialCount;if(0>o)return;for(var n=0;o>n;n+=1){var r=i.materialMap[n];t.cacheReferencedMeshMaterialData(r.matId,r)}}else for(var a in i.materialMap)t.cacheReferencedMeshMaterialData(a,i.materialMap[a]);i=null}},Xu.prototype._parseComponent=function(A,e){if(A){var t=new Uu(A),i=t.compArr.length,o=this.descriptor;if(o){for(var n=0;i>n;n+=1){var r=t.compArr[n];o.cacheReferencedMeshComponentData(r.key,r)}t=null}}else Bh.error("没有数据")},Xu.prototype._parseKDTree=function(A,e){var t={};t="string"==typeof A?JSON.parse(A):A,!this.model.kdTreeNode&&t&&(this.model.kdTreeNode=new Zu,this.model.kdTreeNode.init(t))},Xu.prototype._parseLight=function(A,e){var t,i=[];if(t="string"==typeof A?JSON.parse(A):A)for(var o=0,n=t.length;n>o;o+=1){var r=t[o],a=void 0,s=r.pos||[0,0,0],l=void 0;switch(r.type){case Fc.DirectionalLight:(a=new Ra((new LA).fromArray(r.diffuse),.5)).position.set(s[0]-r.lookat[0],s[1]-r.lookat[1],s[2]-r.lookat[2]),a.name=r.parent,0===r.ambient[0]&&0===r.ambient[1]&&0===r.ambient[2]||(l=new Ta((new LA).fromArray(r.ambient),.5));break;case Fc.PointLight:(a=new Fa((new LA).fromArray(r.diffuse))).position.set(s[0],s[1],s[2]),a.name=r.parent,0===r.ambient[0]&&0===r.ambient[1]&&0===r.ambient[2]||(l=new Ta((new LA).fromArray(r.ambient),.5));break;case Fc.SpotLight:(a=new ba((new LA).fromArray(r.diffuse),.5)).position.set(s[0]-r.lookat[0],s[1]-r.lookat[1],s[2]-r.lookat[2]),a.angle=r.cone_inn||Math.PI/2,a.name=r.parent,0===r.ambient[0]&&0===r.ambient[1]&&0===r.ambient[2]||(l=new Ta((new LA).fromArray(r.ambient),.5))}a&&i.push(a),l&&i.push(l)}this.model.addLights(i)},Xu.prototype._parseNodes=function(A,e){var t=this.descriptor;if(t){var i={};i="string"==typeof A?JSON.parse(A):A,Bh.debug("nodes",i),t.cacheReferencedMeshNodesData(i)}},Xu.prototype._parseClips=function(A,e){var t=this.descriptor;if(t){var i={};i="string"==typeof A?JSON.parse(A):A,Bh.debug("clips",i),t.cacheReferencedMeshClipsData(i)}},Xu.prototype._parseBones=function(A,e){var t=new ku.BoneReader(A),i=this.descriptor;if(i){for(var o=t.boneCount,n=0;o>n;n+=1){var r=t.boneMap[n];Bh.debug("bones",r),i.cacheReferencedMeshBoneBufferData(r.geoId,r)}t=null}},Xu.prototype._parseAxisNet=function(A){var e=this.model.getBoundingBoxWorld(),t=0;e&&(t=e.min.z);var i=this.model._getNodeGroup(gp.AXISNET);i.visible=!1;var o=new ju(i);o.fromJSON(A,t);var n=new Hu;n.axisNet=o,this.model.axisNetManager=n},Xu.prototype.loadWireframe=function(A,e){var t=this,i=this.loader,o=this.url,n=this.model,r=vc.GeoWorkerUrl;if(vc.UseGeoWorker)i.setResponseType("arraybuffer"),i.load(o.mpkUrl(A),(function(A){var i=new Worker(r);i.onmessage=function(A){var i=A.data;for(var o in i)i.hasOwnProperty(o);e(),t._onTaskFinished()},i.postMessage({msg:A})}));else{i.setResponseType("arraybuffer"),i.setCacheViable(!this.offLine);var a=i.load(o.mpkUrl(A),(function(i){t._parseWireframe(i,A),Bh.debug("geo load from online"),e(),t._onTaskFinished()}),void 0,(function(A){n.dispatchEventEx({type:Tc.LOAD_GEOMETRY_ERROR,modelKey:n.modelKey})}));t.requests.loadGeometrie=a}},Xu.prototype.loadGeometrie=function(A,e){var t=this,i=this.loader,o=this.url,n=this.model;i.setResponseType("arraybuffer"),i.setCacheViable(!this.offLine);var r=i.load(o.mpkUrl(A),(function(i){t._parseGeometrie(i,A),Bh.debug("geo load from online"),e(),t._onTaskFinished()}),void 0,(function(A){n.dispatchEventEx({type:Tc.LOAD_GEOMETRY_ERROR,modelKey:n.modelKey}),e(),t._onTaskFinished()}));t.requests.loadGeometrie=r},Xu.prototype.loadComponentNode=function(A,e){var t=this,i=this.loader,o=this.url,n=this.model;i.setResponseType("arraybuffer"),i.setCacheViable(!this.offLine);var r=i.load(o.mpkUrl(A),(function(i){t._parseComponentNode(i,A),Bh.debug("geo load from online"),e(),t._onTaskFinished()}),void 0,(function(A){n.dispatchEventEx({type:Tc.LOAD_COMPONENTNODE_ERROR,modelKey:n.modelKey}),e(),t._onTaskFinished()}));t.requests.loadComponentNode=r},Xu.prototype.loadMaterial=function(A,e){var t=this,i=this.loader,o=this.url,n=this.model,r=vc.GeoWorkerUrl;if(vc.UseGeoWorker)i.setResponseType("arraybuffer"),i.load(o.mpkUrl(A),(function(A){var i=new Worker(r);i.onmessage=function(A){var i=A.data;for(var o in i)i.hasOwnProperty(o);e(),t._onTaskFinished()},i.postMessage({msg:A})}));else{rp(t.dataVersion,"1")?i.setResponseType("json"):i.setResponseType("arraybuffer"),i.setCacheViable(!this.offLine);var a=i.load(o.mpkUrl(A),(function(A){t._parseMaterial(A),Bh.debug("met load from online"),e(),t._onTaskFinished()}),void 0,(function(A){n.dispatchEventEx({type:Tc.LOAD_MATERIAL_ERROR,modelKey:n.modelKey})}));t.requests.loadMaterial=a}},Xu.prototype.loadTextures=function(A,e){var t=this.model.materialManager.textures,i=this,o=this.Textureloader,n=this.url,r=this.model,a=vc.GeoWorkerUrl;if(vc.UseGeoWorker)o.load(n.mpkUrl(A),(function(A){var t=new Worker(a);t.onmessage=function(A){var t=A.data;for(var o in t)t.hasOwnProperty(o);e(),i._onTaskFinished()},t.postMessage({msg:A})}));else{o.setResponseType("arraybuffer"),o.setCacheViable(!this.offLine);var s=o.load(n.textureUrl(A),(function(o){var n=o;o instanceof Blob||(n=new Blob([o],{type:"text/plain"})),Bh.debug("tex load from online");var a=new d;t[A]=a,a.wrapS=a.wrapT=1e3;var s=document.createElement("img");s.onload=function(A){"string"!=typeof n&&window.URL.revokeObjectURL(s.src),a.image=Kd.ensurePowerOfTwo(s),i._onLoadTexture(),e(),i.model.textureNeedsUpdate=!0},s.onerror=function(A){r.dispatchEventEx({type:Tc.LOAD_TEXTURE_ERROR,modelKey:r.modelKey})},s.src="string"==typeof n?n:window.URL.createObjectURL(n),a.image=s,a.needsUpdate=!0}),void 0,(function(A){r.dispatchEventEx({type:Tc.LOAD_TEXTURE_ERROR,modelKey:r.modelKey})}));i.requests.loadTextures=s}},Xu.prototype.loadComponent=function(A,e){var t=this,i=this.jsonLoader,o=this.model,n=this.url,r=vc.GeoWorkerUrl;if(vc.UseGeoWorker)i.setResponseType("json"),i.load(n.mpkUrl(A),(function(A){var i=new Worker(r);i.onmessage=function(A){var i=A.data;for(var o in i)i.hasOwnProperty(o);e(),t._onTaskFinished()},i.postMessage({msg:A})}),(function(A){}));else{i.setResponseType("json"),vc.useGzip&&i.setResponseType("arraybuffer"),i.setCacheViable(!0);var a=i.load(n.mpkUrl(A),(function(i){t._parseComponent(i,A),Bh.debug("component load from online"),e(),t._onTaskFinished()}),void 0,(function(A){o.dispatchEventEx({type:Tc.LOAD_COMPONENT_ERROR,modelKey:o.modelKey})}));t.requests.loadComponent=a}},Xu.prototype.loadKDTree=function(A,e){var t=this,i=this.loader,o=this.model,n=this.url,r=vc.GeoWorkerUrl;if(vc.UseGeoWorker)i.setResponseType("json"),i.load(n.mpkUrl(A),(function(A){var i=new Worker(r);i.onmessage=function(A){var i=A.data;for(var o in i)i.hasOwnProperty(o);e(),t._onTaskFinished()},i.postMessage({msg:A})}),(function(A){}));else{i.setResponseType("json"),i.setCacheViable(!this.offLine);var a=i.load(n.kdTreeUrl(A),(function(i){t._parseKDTree(i,A),Bh.debug("kdtree load from online"),e(),t._onTaskFinished()}),void 0,(function(A){o.dispatchEventEx({type:Tc.LOAD_COMPONENT_ERROR,modelKey:o.modelKey})}));t.requests.loadKDTree=a}},Xu.prototype.loadLight=function(A,e){var t=this,i=this.loader,o=this.model,n=this.url;i.setResponseType("json"),i.setCacheViable(!this.offLine);var r=i.load(n.lightUrl(A),(function(i){t._parseLight(i,A),Bh.debug("light load from online"),e(),t._onTaskFinished()}),void 0,(function(A){o.dispatchEventEx({type:Tc.LOAD_COMPONENT_ERROR,modelKey:o.modelKey})}));t.requests.loadLight=r},Xu.prototype.loadBones=function(A,e){var t=this,i=this.loader,o=this.model,n=this.url,r=vc.GeoWorkerUrl;if(vc.UseGeoWorker)i.setResponseType("arraybuffer"),i.load(n.bonesUrl(A),(function(A){var i=new Worker(r);i.onmessage=function(A){var i=A.data;for(var o in i)i.hasOwnProperty(o);e(),t._onTaskFinished()},i.postMessage({msg:A})}),(function(A){}));else{i.setResponseType("arraybuffer"),i.setCacheViable(!this.offLine);var a=i.load(n.bonesUrl(A),(function(A){t._parseBones(A),Bh.debug("bones load from online"),e(),t._onTaskFinished()}),void 0,(function(A){o.dispatchEventEx({type:Tc.LOAD_COMPONENT_ERROR,modelKey:o.modelKey})}));t.requests.loadBones=a}},Xu.prototype.loadClips=function(A,e){var t=this,i=this.loader,o=this.model,n=this.url,r=vc.GeoWorkerUrl;if(vc.UseGeoWorker)i.setResponseType("json"),i.load(n.mpkUrl(A),(function(A){var i=new Worker(r);i.onmessage=function(A){var i=A.data;for(var o in i)i.hasOwnProperty(o);e(),t._onTaskFinished()},i.postMessage({msg:A})}),(function(A){}));else{i.setResponseType("json"),i.setCacheViable(!this.offLine);var a=i.load(n.clipsUrl(A),(function(A){t._parseClips(A),Bh.debug("Clips load from online"),e(),t._onTaskFinished()}),void 0,(function(A){o.dispatchEventEx({type:Tc.LOAD_COMPONENT_ERROR,modelKey:o.modelKey})}));t.requests.loadClips=a}},Xu.prototype.loadNodes=function(A,e){var t=this,i=this.loader,o=this.model,n=this.url,r=vc.GeoWorkerUrl;if(vc.UseGeoWorker)i.setResponseType("json"),i.load(n.mpkUrl(A),(function(A){var i=new Worker(r);i.onmessage=function(A){var i=A.data;for(var o in i)i.hasOwnProperty(o);e(),t._onTaskFinished()},i.postMessage({msg:A})}),(function(A){}));else{i.setResponseType("json"),i.setCacheViable(!this.offLine);var a=i.load(n.nodesUrl(A),(function(A){t._parseNodes(A),Bh.debug("Nodes load from online"),e(),t._onTaskFinished()}),void 0,(function(A){o.dispatchEventEx({type:Tc.LOAD_COMPONENT_ERROR,modelKey:o.modelKey})}));t.requests.loadNodes=a}},Xu.prototype.loadAttribute=function(A,e){var t=this,i=this.loader,o=this.model,n=this.url,r=vc.GeoWorkerUrl;if(vc.UseGeoWorker)i.setResponseType("json"),i.load(n.mpkUrl(A),(function(A){var i=new Worker(r);i.onmessage=function(A){var i=A.data;for(var o in i)i.hasOwnProperty(o);e(),t._onTaskFinished()},i.postMessage({msg:A})}),(function(A){}));else{i.setResponseType("json"),i.setCacheViable(!this.offLine);var a=i.load(n.attributeUrl(),(function(A){if(A instanceof String)try{A=JSON.parse(A)}catch(A){}o.attributes=A,Bh.debug("Attribute load from online")}),void 0,(function(A){o.dispatchEventEx({type:Tc.LOAD_COMPONENT_ERROR,modelKey:o.modelKey})}));t.requests.loadAttribute=a}},Xu.prototype.loadGeopkOnDemand=function(A,e,t){this.loadTaskCount=0,this.maxLoadTaskCount=A.length,this._loadingOnDemand=!0,this.finishCallback=t;var i=this;if(vc.getDataFromIndexedDB&&!this.offLine){for(var o=this.url,n=[],r=0;A.length>r;r+=1)n.push(o.mpkUrl(A[r]));var a=this.model.getStorage();a&&a.getBatch(n,(function(A){for(var t=function(e){if(A[n[e]])if(!0===A[n[e]].split){var t=A[n[e]].list,o=new Uint8Array(A[n[e]].length);a.getBatch(t,(function(A){for(var r=0;t.length>r;r+=1)A[t[r]]?o.set(new Uint8Array(A[t[r]]),4e7*r):Bh.error("获取分割几何失败");var a=n[e].indexOf("fileKey=");i._parseGeometrie(o.buffer,n[e].slice(a+8)),Bh.debug("load geo from local"),i._onTaskFinished()}),(function(){Bh.error("获取分割几何失败")}))}else s=n[e].indexOf("fileKey="),i._parseGeometrie(A[n[e]],n[e].slice(s+8)),Bh.debug("load geo from local"),i._onTaskFinished();else{if(r=i.taskGeometrieManager,-1===(s=n[e].indexOf("fileKey=")))return Bh.error("url is not has fileKey"),{v:void 0};r.addTask(n[e].slice(s+8)),Bh.debug("load geo from net")}},o=0;n.length>o;o+=1){var r,s,l=t(o);if("object"===lc(l))return l.v}i.taskGeometrieManager.processTasks(i.loadGeometrie.bind(i),e)}),(function(){for(var t=i.taskGeometrieManager,o=0;A.length>o;o+=1)t.addTask(A[o]);t.processTasks(i.loadGeometrie.bind(i),e)}))}else{for(var s=this.taskGeometrieManager,l=0;A.length>l;l+=1)s.addTask(A[l]);s.processTasks(i.loadGeometrie.bind(i),e)}},Xu.prototype.loadAxisNet=function(A,e){var t=this,i=this.loader,o=this.url,n=this.model;rp(t.dataVersion,"1")?i.setResponseType("json"):i.setResponseType("arraybuffer"),i.setCacheViable(!this.offLine);var r=i.load(o.axisNetUrl(A),(function(A){t._parseAxisNet(A),Bh.debug("axis net load from online"),e&&e()}),void 0,(function(A){n.dispatchEventEx({type:Tc.LOAD_AXISNET_ERROR,modelKey:n.modelKey})}));t.requests.loadAxisNet=r},Xu.prototype.loadFloorInfo=function(A,e){var t=this;this._loadFloorInfoFromDB(A,(function(i){i&&i.data?(t._parseFloorInfo(i),e&&e(!0)):t._loadFloorInfoFromNet(A,(function(A){A?(t._parseFloorInfo(A),e&&e(!0)):e&&e(!1)}))}))},Xu.prototype._loadFloorInfoFromDB=function(A,e){if(vc.getDataFromIndexedDB&&!this.offLine){var t=this.url.floorInfoUrl(A),i=this.model.getStorage();i&&i.getBatch([t],(function(A){A[t]?(e(A[t]),Bh.debug("load floorinfo from local")):e()}),(function(){e()}))}else e()},Xu.prototype._loadFloorInfoFromNet=function(A,e){var t=new bu(this),i=this.url,o=this.model;this.model.accessToken&&t.setRequestHeader({Authorization:this.model.accessToken}),rp(this.dataVersion,"1")?t.setResponseType("json"):t.setResponseType("arraybuffer"),t.setCacheViable(!this.offLine);var n=t.load(i.floorInfoUrl(A),(function(A){Bh.debug("floor info load from online"),e&&e(A)}),void 0,(function(t){o.dispatchEventEx({type:Tc.LOAD_FLOORINFO_ERROR,modelKey:A}),e&&e()}));this.requests.loadFloorInfo=n},Xu.prototype._parseReuseNodes=function(A,e){if(A){vc.useGzip&&(A=JSON.parse(uh.ab2str(pako.ungzip(A))));var t=this.descriptor;t&&(t.referencedMeshCache.reuseNodes=A)}else Bh.error("没有数据")},Xu.prototype.loadReuseNode=function(A,e){var t=this,i=this.jsonLoader,o=this.model,n=this.url;i.setResponseType("json"),vc.useGzip&&i.setResponseType("arraybuffer"),i.setCacheViable(!0);i.load(n.mpkUrl(A),(function(A){t._parseReuseNodes(A),Bh.debug("component load from online"),e(),t._onTaskFinished()}),void 0,(function(A){o.dispatchEventEx({type:Tc.LOAD_COMPONENT_ERROR,modelKey:o.modelKey})}))},Xu.prototype._parseFloorInfo=function(A){if(A.data&&0!==Object.keys(A.data).length){var e=new zu;e.floors=Yu.parseFloorInfos(A.data),e.modelKey=this.model.modelKey;var t=new Ju;t.floors=e.floors,e.floorExplosionInfo=t,e.modelType=this.model.getConfig().type,this.model.floorManager=e,e.model=this.model}};var _u={IfcRoof:{color:[.837255,.203922,.270588,1]},IfcSlab:{color:[.637255,.603922,.670588,1]},IfcWall:{color:[.537255,.337255,.237255,1]},IfcWallStandardCase:{color:[.537255,.337255,.237255,1]},IfcDoor:{color:[.637255,.603922,.670588,1]},IfcWindow:{color:[.137255,.403922,.870588,.4]},IfcOpeningElement:{color:[.137255,.403922,.870588,.1]},IfcRailing:{color:[.137255,.403922,.870588,1]},IfcColumn:{color:[.137255,.403922,.870588,1]},IfcBeam:{color:[.137255,.403922,.870588,1]},IfcFurnishingElement:{color:[.137255,.403922,.870588,1]},IfcCurtainWall:{color:[.137255,.403922,.870588,1]},IfcStair:{color:[.637255,.603922,.670588,1]},IfcStairFlight:{color:[.637255,.603922,.670588,1]},IfcBuildingElementProxy:{color:[.5,.5,.5,1]},IfcFlowSegment:{color:[.137255,.403922,.870588,1]},IfcFlowitting:{color:[.137255,.403922,.870588,1]},IfcFlowTerminal:{color:[.137255,.403922,.870588,1]},IfcProxy:{color:[.137255,.403922,.870588,1]},IfcSite:{color:[.137255,.403922,.870588,1]},IfcLightFixture:{color:[.8470588235,.8470588235,.870588,1]},IfcDuctSegment:{color:[.8470588235,.427450980392,0,1]},IfcDistributionFlowElement:{color:[.8470588235,.427450980392,0,1]},IfcDuctFitting:{color:[.8470588235,.427450980392,0,1]},IfcPlate:{color:[.137255,.403922,.870588,.5]},IfcAirTerminal:{color:[.8470588235,.427450980392,0,1]},IfcMember:{color:[.8470588235,.427450980392,0,1]},IfcCovering:{color:[.8470588235,.427450980392,0,1]},IfcTransportElement:{color:[.8470588235,.427450980392,0,1]},IfcFlowController:{color:[.8470588235,.427450980392,0,1]},IfcFlowFitting:{color:[.8470588235,.427450980392,0,1]},IfcRamp:{color:[.8470588235,.427450980392,0,1]},IfcFurniture:{color:[.8470588235,.427450980392,0,1]},IfcFooting:{color:[.8470588235,.427450980392,0,1]},IfcSystemFurnitureElement:{color:[.8470588235,.427450980392,0,1]},IfcSpace:{color:[.137255,.303922,.570588,.5]},DEFAULT:{color:[.8470588235,.427450980392,0,1]}},$u=function(A){this.symbolReader=null,this.userIdReader=null,this.userDataReader=null,this.mapSceneReader={},this.lightmap=!1,this.mapNodeInfoByCategory={},this.mapNodeInfoByUserId={},this.mapNodeInfoByNodeId={},this.mapNodeInfoByComponentKey={},this.mapNodeInfoByParameterizedDesc={},this.mapNodeInfoByGeometryId={},this.referencedMeshCache={},this.componentCount=0,this.borderLines={},this.octreeRootNode={inner:null,outer:null,layer:null},this.meshCache={},this.allBones={},this.model=A};$u.EnumNodeItemType={SYMBOL:0,MESH:1,TUBE:2,PIPE:3,BOX:4,BOX_M:5,PIPE_M:6,MESH_REF:7,LINE:8},$u.NodeInfoCategory={INSTANCED:0,STANDARD:1},$u.EnumDataType={NONE:0,MERGE_DATA:1,LAYER:2,LAYER_SCENE:3,ANIMATION:4},$u.EnumKeyframeTrackType={position:"position",scale:"scale",quaternion:"quaternion",weights:"weights"},$u.prototype.destroy=function(){this.destroyReader(),this.octreeRootNode=null,this.mapNodeInfoByCategory={},this.mapNodeInfoByUserId={},this.mapNodeInfoByNodeId={},this.mapNodeInfoByComponentKey={},this.mapNodeInfoByParameterizedDesc={},this.mapNodeInfoByGeometryId={},this.referencedMeshCache={},this.componentCount=0,this.borderLines={}},$u.prototype.destroyReader=function(){this.userIdReader={},this.userDataReader={},this.symbolReader={},this.mapSceneReader={}},$u.prototype.getSceneReaderMap=function(){return this.mapSceneReader},$u.prototype.isValidScene=function(){return!uh.isEmptyObject(this.getSceneReaderMap())||(Bh.log("model load not started!"),!1)},$u.prototype.parseItemData=function(A){var e=this.model;(ap(e.dataVersion,"2.0.0")||void 0===e.dataVersion)&&(Bh.time("升级几何结构"),this._updateV1ToV2(e),e.dataVersion="2.0.0",Bh.timeEnd("升级几何结构")),this._readMaterialBuffer(e),e.hasAnimation&&vc.EnableAnimation?(this._parseClips(),this._parseBones()):this._parseGeo();var t={},i=this.referencedMeshCache;for(var o in Bh.time("_readItemData"),i.bufferData&&Object.keys(i.bufferData).length>0||A&&A(),i.components)this._readItemData(t,o,o,void 0,0);e.hasAnimation&&vc.EnableAnimation&&this._parseNodes(),Bh.timeEnd("_readItemData"),t=null,A&&A()},$u.prototype.asyncParseItemData=function(A){for(var e=this.getSceneReaderMap(),t=Object.keys(e),i=t.length,o=0,n=this,r=0;i>r;r+=1){var a=e[t[r]];uh.asyncProcess(a,a.header.componentCount,100,(function(A,e){n._parseItemDataBy(A,e)}),(function(){(o+=1)===i&&A&&A()}))}},$u.prototype._parseItemDataBy=function(A,e){for(var t=A.getComponentInfo(e),i=t.itemIndex;t.itemCount>i;i+=1)this._readItemData(A,i,e)},$u.prototype.parseItemDataByComponentKey=function(A){var e=this.getSceneReaderMap();for(var t in e)this._parseItemDataBy(e[t],A)},$u.prototype._readItemData=function(A,e,t){var i=this.referencedMeshCache.components[e];void 0!==i&&-1!==i.geoId&&this._readMeshInfo(A,t,i,null)},$u.prototype._readSymbolInfo=function(A,e,t){var i=this.symbolReader;if(i){var o=i.header.symbolCount,n=t.toData,r=A.getMatrixInfo(t.matrixId).matrix.clone(),a={matrix:r,ItemId:t.ItemId,originalId:t.originalId,userDataId:t.userDataId,materialId:t.materialId};if(n>=0&&o>n)for(var s=i.getSymbolInfo(n),l=s.itemIndex;s.itemCount>l;l+=1){var c=i.getItemInfo(l);c.type!==$u.EnumNodeItemType.SYMBOL&&this._readMeshInfo(i,e,c,a)}r=null,a=null,i=null}},$u.prototype._readMeshInfo=function(A,e,t,i){var o=null,n=null;null===i?(t.userDataId,o=t.originalId,n=t.materials||t.matId):(i.userDataId,o=i.originalId,n=i.materialId>-1?i.materialId:t.materialId);var r=null;if(r=this._getMeshNodeAttr(A,t,i)){if(t.buildInCategory&&(r.buildInCategory=t.buildInCategory),r.userId=e,r.name=t.name,r.type=t.type,r.componentKey=e,r.originalId=o,r.materialId=n,r.state=Lc.Visible,r.material=null,r.originMId=n,r.userData=null,r.categoryId=0,r.familyName=t.familyName,r.familySymbol=t.familySymbol,this.lightmap){var a=t.ItemId;i&&(a=i.ItemId+"_"+t.ItemId),r.itemIdUV2=a}r.instanceOrNot=!1,this._classifyNodeInfo(r),r=null}},$u.prototype._getMeshNodeAttrOfPipe=function(A,e,t){var i=A.getMatrixInfo(e.matrixId).matrix.clone();t&&i.multiplyMatrices(t.matrix,i);var o=e.boundingBox.clone();o.applyMatrix4(i);var n=A.getGeomPipeInfo(e.toData),r=n.startPt,a=n.endPt,s=new y;s.subVectors(a,r);var l=s.length();s.normalize();var c=n.radius;c>1||(c=100);var h=new y(0,1,0),d=new y(c,l,c),p=(new f).setFromUnitVectors(h,s),g=r.clone().addScaledVector(s,.5*l),u=(new M).compose(g,p,d);return i.multiply(u),n=null,{nodeId:(t?t.ItemId+"_"+e.ItemId:e.ItemId)+"_pipe",geometryId:"pipe",boundingBox:o,matrix:i}},$u.prototype._getMeshNodeAttrOfTube=function(A,e,t){var i=this._getMeshNodeAttrOfPipe(A,e,t);return i.nodeId+="_tube",i.geometryId="tube",i},$u.prototype._getMeshNodeAttrOfBox=function(A,e,t){var i=A.getMatrixInfo(e.matrixId).matrix.clone();t&&i.multiplyMatrices(t.matrix,i);var o=e.boundingBox.clone();o.applyMatrix4(i);var n=e.boundingBox,r=n.getSize(),a=n.getCenter(),s=(new M).scale(new y(r.x,r.y,r.z));return s.setPosition(a),i.multiply(s),{nodeId:(t?t.ItemId+"_"+e.ItemId:e.ItemId)+"_box",geometryId:"box",boundingBox:o,matrix:i}},$u.prototype._getMeshNodeAttrOfBoxM=function(A,e,t){var i=A.getMatrixInfo(e.matrixId).matrix.clone();t&&i.multiplyMatrices(t.matrix,i);var o=e.boundingBox.clone();return o.applyMatrix4(i),{nodeId:(t?t.ItemId+"_"+e.ItemId:e.ItemId)+"_boxM",geometryId:"boxM",boundingBox:o,matrix:i,uvArrayBuffer:A.getGeomBoxUvInfo(e.toData)}},$u.prototype._getMeshNodeAttrOfPipeM=function(A,e,t){var i=A.getMatrixInfo(e.matrixId).matrix.clone();t&&i.multiplyMatrices(t.matrix,i);var o=e.boundingBox.clone();return o.applyMatrix4(i),{nodeId:(t?t.ItemId+"_"+e.ItemId:e.ItemId)+"_pipeM",geometryId:"pipeM",boundingBox:o,matrix:i,uvArrayBuffer:A.getGeomPipeUvInfo(e.toData)}},$u.prototype._getMeshNodeAttrOfMeshRef=function(A,e,t){var i=A.getMatrixInfo(e.matrixId).matrix.clone();t&&i.multiplyMatrices(t.matrix,i);var o=e.boundingBox.clone();return o.applyMatrix4(i),{nodeId:"refMesh|"+(t?t.ItemId+"_"+e.ItemId:e.ItemId),geometryId:e.toData,boundingBox:o,matrix:i}},$u.prototype._getMeshNodeAttr=function(A,e,t,i){var o=new M;o.fromArray(e.matrix||[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]),vc.DataReduction&&o.scale(new y(1e3,1e3,1e3));var n=t?e.key+"_"+i:e.key,r=t?e.geoId+"_"+i:e.geoId;if(-1!==r){var a=new ph,s=this.getReferencedMeshBufferById(e.geoId);return s&&s.position?(a=Tu.getBoundingBoxByBuffer(s.position)).applyMatrix4(o):Bh.error("没有找到对应几何"),{nodeId:n,guid:e.guid,geometryId:r,originalGeometryId:e.geoId,matrix:o,boundingBox:a,model:this.model}}},$u.prototype._getComponentNodeAttr=function(A,e){var t=new M;t.fromArray(A.matrix||[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]),vc.DataReduction&&t.scale(new y(1e3,1e3,1e3)),e&&t.multiplyMatrices(e.matrix,t);var i=A.nodeId,o=A.geoId;if(-1!==o){var n=A.maxBoundary||e.maxBoundary,r=A.minBoundary||e.minBoundary,a=new ph;return a.set(r,n),{nodeId:i,guid:A.guid,geometryId:o,originalGeometryId:A.geoId,matrix:t,boundingBox:a,model:this.model}}},$u.prototype._getLineNodeAttr=function(A,e,t){var i=e.boundingBox.clone(),o=null;return-1!==e.matrixId?(o=A.getMatrixInfo(e.matrixId).matrix.clone(),t&&o.multiplyMatrices(t.matrix,o),i.applyMatrix4(o)):(o=new M,t&&i.applyMatrix4(t.matrix)),{nodeId:t?"line-"+t.ItemId+"-"+e.ItemId:"line-"+e.ItemId,geometryId:"line-"+e.toData,boundingBox:i,matrix:o}},$u.prototype._classifyNodeInfo=function(A){this._cacheNodeInfoByComponentKey(A),this._cacheNodeInfoByNodeId(A),this._cacheNodeInfoByUserId(A),this._cacheNodeInfoByCategory(A),this._cacheNodeInfoByParameterizedDesc(A)},$u.prototype._cacheNodeInfoByComponentKey=function(A){void 0===this.mapNodeInfoByComponentKey[A.componentKey]&&(this.mapNodeInfoByComponentKey[A.componentKey]=[]),this.mapNodeInfoByComponentKey[A.componentKey].push(A)},$u.prototype._cacheNodeInfoByUserId=function(A){void 0===this.mapNodeInfoByUserId[A.userId]&&(this.mapNodeInfoByUserId[A.userId]=[]),this.mapNodeInfoByUserId[A.userId].push(A)},$u.prototype._cacheNodeInfoByNodeId=function(A){this.mapNodeInfoByNodeId[A.nodeId]=A},$u.prototype._cacheNodeInfoByCategory=function(A){var e=null;void 0===this.mapNodeInfoByCategory[e=A.instanceOrNot?$u.NodeInfoCategory.INSTANCED:$u.NodeInfoCategory.STANDARD]&&(this.mapNodeInfoByCategory[e]={}),void 0===this.mapNodeInfoByCategory[e][A.userId]&&(this.mapNodeInfoByCategory[e][A.userId]=[]),this.mapNodeInfoByCategory[e][A.userId].push(A)},$u.prototype._cacheNodeInfoByParameterizedDesc=function(A){A.parameterizedDesc&&(void 0===this.mapNodeInfoByParameterizedDesc[A.type]&&(this.mapNodeInfoByParameterizedDesc[A.type]=[]),this.mapNodeInfoByParameterizedDesc[A.type].push(A))},$u.prototype._clearNodeInfoCacheWithParameterizedDesc=function(A){if(A)for(var e=0,t=A.length;t>e;e+=1)delete this.mapNodeInfoByParameterizedDesc[A[e]];else this.mapNodeInfoByParameterizedDesc={}},$u.prototype._clearNodeInfoCacheWithComponentKey=function(A){if(A)for(var e=0,t=A.length;t>e;e+=1)delete this.mapNodeInfoByComponentKey[A[e]];else this.mapNodeInfoByComponentKey={}},$u.prototype._clearNodeInfoCacheWithCategory=function(A){if(A)for(var e=this.mapNodeInfoByCategory[$u.NodeInfoCategory.INSTANCED],t=this.mapNodeInfoByCategory[$u.NodeInfoCategory.STANDARD],i=0,o=A.length;o>i;i+=1)e&&delete e[A[i]],t&&delete t[A[i]];else this.mapNodeInfoByCategory={}},$u.prototype.clearNodeInfoCacheByComponentsKey=function(A){this._clearNodeInfoCacheWithComponentKey(A),this._clearNodeInfoCacheWithUserId(A),this._clearNodeInfoCacheWithCategory(A)},$u.prototype._clearNodeInfoCacheWithUserId=function(A){if(A)for(var e=0,t=A.length;t>e;e+=1)delete this.mapNodeInfoByUserId[A[e]],delete this.mapNodeInfoByNodeId[A[e]];else this.mapNodeInfoByUserId={};this.mapNodeInfoByUserId={}},$u.prototype.clearNodeInfoCache=function(){this._clearNodeInfoCacheWithComponentKey(),this._clearNodeInfoCacheWithUserId(),this._clearNodeInfoCacheWithCategory()},$u.prototype.getNodeInfosByComponentKey=function(A){return this.mapNodeInfoByComponentKey[A]},$u.prototype.getNodeInfosWithComponentKey=function(){return this.mapNodeInfoByComponentKey},$u.prototype.getAllNodeInfos=function(){return this.mapNodeInfoByUserId},$u.prototype.getNodeInfosByUserId=function(A){return this.mapNodeInfoByUserId[A]},$u.prototype.getNodeInfosByNodeId=function(A){return this.mapNodeInfoByNodeId[A]},$u.prototype.getNodeInfosWithUserId=function(){return this.mapNodeInfoByUserId},$u.prototype.getStandardNodeInfos=function(){return this.mapNodeInfoByCategory[$u.NodeInfoCategory.STANDARD]},$u.prototype.getInstancedNodeInfos=function(){return this.mapNodeInfoByCategory[$u.NodeInfoCategory.INSTANCED]},$u.prototype.getStandardUserIds=function(){return this.getStandardNodeInfos()?Object.keys(this.getStandardNodeInfos()):[]},$u.prototype.getInstancedUserIds=function(){return this.getInstancedNodeInfos()?Object.keys(this.getInstancedNodeInfos()):[]},$u.prototype.getStandardNodeInfosById=function(A){var e=this.getStandardNodeInfos();return e?e[A]:null},$u.prototype.getInstancedNodeInfosById=function(A){var e=this.getInstancedNodeInfos();return e?e[A]:null},$u.prototype._getUserIdsByCategory=function(A,e){var t=[],i=null;if(i=e===$u.NodeInfoCategory.INSTANCED?this.getInstancedNodeInfos():this.getStandardNodeInfos())for(var o=0,n=A.length;n>o;o+=1)i[A[o]]&&t.push(A[o]);return t},$u.prototype.getInstancedUserIdsByCategory=function(A){return this._getUserIdsByCategory(A,$u.NodeInfoCategory.INSTANCED)},$u.prototype.getStandardUserIdsByCategory=function(A){return this._getUserIdsByCategory(A,$u.NodeInfoCategory.STANDARD)},$u.prototype._traverseNodeInfosByIds=function(A,e,t){for(var i=0,o=e.length;o>i;i+=1){var n=e[i];t(n,A[n])}},$u.prototype.traverseStandardNodeInfos=function(A,e){var t=this.getStandardNodeInfos();t&&(A=A||this.getStandardUserIds(),this._traverseNodeInfosByIds(t,A,e))},$u.prototype.traverseInstancedNodeInfos=function(A,e){var t=this.getInstancedNodeInfos();t&&(A=A||this.getInstancedUserIds(),this._traverseNodeInfosByIds(t,A,e))},$u.prototype.traverseNodeInfosByComponent=function(A){for(var e=Object.keys(this.mapNodeInfoByComponentKey),t=0,i=e.length;i>t;t+=1)for(var o=e[t],n=this.mapNodeInfoByComponentKey[o],r=0,a=n.length;a>r;r+=1)A(o,n[r])},$u.prototype.clearReferencedMeshCache=function(){if(!vc.DEBUG){for(var A in this.referencedMeshCache)delete this.referencedMeshCache[A];this.referencedMeshCache=null}},$u.prototype.cacheReferencedMeshBufferData=function(A,e){this.referencedMeshCache.bufferData||(this.referencedMeshCache.bufferData={}),this.referencedMeshCache.bufferData[A]=e},$u.prototype.cacheReferencedMeshComponentNodeData=function(A,e){this.referencedMeshCache.componentNode||(this.referencedMeshCache.componentNode={}),this.referencedMeshCache.componentNode[A]=e},$u.prototype.cacheReferencedMeshWireframeData=function(A,e){this.referencedMeshCache.wireframeData||(this.referencedMeshCache.wireframeData={}),this.referencedMeshCache.wireframeData[A]=e},$u.prototype.getReferencedMeshBufferData=function(){return this.referencedMeshCache.bufferData},$u.prototype.getReferencedMeshBufferById=function(A){return this.referencedMeshCache&&this.referencedMeshCache.bufferData?this.referencedMeshCache.bufferData[A]:null},$u.prototype.getReferencedMeshComponentNodeById=function(A){return this.referencedMeshCache&&this.referencedMeshCache.componentNode?this.referencedMeshCache.componentNode[A]:null},$u.prototype.getReferencedMeshWireframeDataById=function(A){return this.referencedMeshCache&&this.referencedMeshCache.wireframeData?this.referencedMeshCache.wireframeData[A]:null},$u.prototype.cacheReferencedMeshBoneBufferData=function(A,e){this.referencedMeshCache.bones||(this.referencedMeshCache.bones={}),this.referencedMeshCache.bones[A]=e},$u.prototype.cacheReferencedMeshClipsData=function(A){this.referencedMeshCache.clips=A},$u.prototype.cacheReferencedMeshNodesData=function(A){this.referencedMeshCache.nodes=A},$u.prototype.cacheReferencedMeshComponentData=function(A,e){this.referencedMeshCache.components||(this.referencedMeshCache.components={}),this.referencedMeshCache.components[A]=e},$u.prototype.cacheReferencedMeshMaterialData=function(A,e){this.referencedMeshCache.materials||(this.referencedMeshCache.materials={}),this.referencedMeshCache.materials[A]=e},$u.prototype.cacheReferencedMeshGeoIds=function(A,e){this.referencedMeshCache.mpkIds||(this.referencedMeshCache.mpkIds={}),this.referencedMeshCache.mpkIds[A]||(this.referencedMeshCache.mpkIds[A]=[]),this.referencedMeshCache.mpkIds[A].push(e)},$u.prototype.clearReferencedMeshCacheByGeopkIdxs=function(A,e){if(this.referencedMeshCache.mpkIds)for(var t=0,i=A.length;i>t;t+=1){var o=A[t],n=this.referencedMeshCache.mpkIds[o];if(n){for(var r=0,a=n.length;a>r;r+=1)e&&e(n[r]),delete this.referencedMeshCache[n[r]];delete this.referencedMeshCache.mpkIds[o]}}},$u.prototype.cacheBorderLine=function(A,e){var t=A?"shared":"unique";this.borderLines[t]||(this.borderLines[t]=[]),this.borderLines[t].push(e)},$u.prototype.getSharedBorderLineCache=function(){return this.borderLines.shared},$u.prototype.getUniqueBorderLineCache=function(){return this.borderLines.unique},$u.prototype._isRegularShape=function(A){return A.type===$u.EnumNodeItemType.TUBE||A.type===$u.EnumNodeItemType.PIPE||A.type===$u.EnumNodeItemType.BOX||A.type===$u.EnumNodeItemType.BOX_M||A.type===$u.EnumNodeItemType.PIPE_M},$u.prototype._isInstancedNode=function(A){return!!vc.Instance&&(A.type===$u.EnumNodeItemType.MESH_REF?!!vc.SharedMeshInstanceEnable:!!A.parameterizedDesc)},$u.prototype.getComponentCount=function(){return this.componentCount},$u.prototype.getOctreeRootNode=function(){return this.octreeRootNode},$u.prototype.isUseInnerAndOuterOctree=function(){return!0},$u.prototype.isOctreeOuter=function(A){var e=this.octreeRootNode.inner||this.octreeRootNode.outer;return!(e.min.x>A.x||A.x>e.max.x||e.min.y>A.y||A.y>e.max.y||e.min.z>A.z||A.z>e.max.z)},$u.prototype.getOctreeRoots=function(A){this.octreeRootNode.outer&&A.push(this.octreeRootNode.outer),this.octreeRootNode.inner&&A.push(this.octreeRootNode.inner)},$u.prototype.updateOctreeNodeBy=function(A,e){var t=new aA;function i(A,e){t.copy(A.boundingBoxWorld),t.applyMatrix4(e),A.min.copy(t.min),A.max.copy(t.max),A.center=t.getCenter(),A.size=t.getSize().lengthSq()}i(A,e),function A(e,t){for(var o=0,n=e.childOctants.length;n>o;o+=1){var r=e.childOctants[o];i(r,t),A(r,t)}}(A,e)},$u.prototype.updateOctreeNode=function(A){var e=this.getOctreeRootNode();e.outer&&this.updateOctreeNodeBy(e.outer,A),e.inner&&this.updateOctreeNodeBy(e.inner,A)},$u.prototype.removeFromSceneReaderMap=function(A){for(var e=0,t=A.length;t>e;e+=1)this.mapSceneReader[A[e]]&&delete this.mapSceneReader[A[e]]},$u.prototype.isUserIdExist=function(A){return!!this.getNodeInfosByUserId(A)},$u.prototype.addToNodeInfoMap=function(A){for(var e=0,t=A.length;t>e;e+=1)this._cacheNodeInfoByUserId(A[e])},$u.prototype.removeFromNodeInfoMap=function(A){for(var e=this.getAllNodeInfos(),t=0,i=A.length;i>t;t+=1){var o=A[t].userId;e[o]&&delete e[o]}},$u.prototype.cacheNodeInfosOnGeometryId=function(){var A=this.getStandardNodeInfos();for(var e in this.mapNodeInfoByGeometryId={},A)for(var t=A[e],i=0,o=t.length;o>i;i+=1)t[i].geometryId=this.convertGeometryId(t[i].geometryId),this.mapNodeInfoByGeometryId[t[i].geometryId]||(this.mapNodeInfoByGeometryId[t[i].geometryId]=[]),this.mapNodeInfoByGeometryId[t[i].geometryId].push(t[i])},$u.prototype.getNodeInfosOnGeometryId=function(){return this.mapNodeInfoByGeometryId||this.cacheNodeInfosOnGeometryId(),this.mapNodeInfoByGeometryId},$u.prototype.clearNodeInfosWithGeometryId=function(){this.mapNodeInfoByGeometryId={}},$u.prototype.convertGeometryId=function(A){return A},$u.prototype._readMaterialBuffer=function(A){var e=A.materialManager,t=e.materials,i=e.textures,o=this.referencedMeshCache.materials;for(var n in o){var r=o[n];if(!r)return null;var a=Kd.createMaterialByMaterialBufferAndTexture(r,i);a.refreshUniforms&&a.refreshUniforms(),t[n]=a,vc.EnableShadow&&A.manager.viewerImpl.rendererManager.csm&&A.manager.viewerImpl.rendererManager.csm.setupMaterial(a)}},$u.prototype._updateV1ToV2=function(){var A=this.referencedMeshCache.components,e=this.referencedMeshCache.bufferData,t=this.referencedMeshCache.materials;for(var i in A)if(A.hasOwnProperty(i)){var o=A[i],n=o.matId,r=e[o.geoId];if(o.materials)continue;if(o.materials=[],!r)continue;var a=t[n];if(!a)continue;var s=this._updateMaterialV1ToV2(n,a);if(s)for(var l in r.materialIndex=s.materialIndex,o.materials=s.materialId,s.materials)s.materials.hasOwnProperty(l)&&(this.referencedMeshCache.materials[l]=s.materials[l])}},$u.prototype._updateMaterialV1ToV2=function(A,e){var t={},i=[],o={};if(!e)return null;for(var n=e.color,r=e.colorIndex,a=e.texture,s=e.textureIndex,l=0;n.length>l;l+=4){var c={};c.color=[n[l],n[l+1],n[l+2]],c.opacity=Math.floor(100*n[l+3])/100,c.transparent=1>n[l+3];var h=(255*c.color[0]<<16^255*c.color[1]<<8^255*c.color[2]<<0)+"_"+c.opacity;o[h]=c,i.push(h)}if(0!==a.length&&r.length===s.length)for(var d=-1,p=0;s.length>p;p+=1)if(d!==r[p]&&(d=r[p],-1!==s[p])){var g=i[r[p]],u=a[s[p]];if(o[g].map=u,-1===g.indexOf(u)){var f=g+"_"+a[s[p]];o[f]=o[g],i.length>Object.keys(o).length-1||delete o[g],i[r[p]]=f}}return t.materials=o,t.materialId=i,t.materialIndex=r,t},$u.prototype._computeVertexNormalsFromFaceNormals=function(A,e,t){for(var i=new Float32Array(t),o=0,n=0,r=0,a=0,s=0,l=0,c=0;A.length>c;c+=3)s=A[c+1],l=A[c+2],n=3*e[c+1],r=3*e[c+2],i[o=3*e[c]]=a=A[c],i[o+1]=s,i[o+2]=l,i[n]=a,i[n+1]=s,i[n+2]=l,i[r]=a,i[r+1]=s,i[r+2]=l;return i},$u.prototype._computeVertexNormalsFromIndex=function(A,e,t){var i=new Float32Array(e.length);if(e){var o=0,n=0,r=0,a=new y,s=new y,l=new y,c=new y,h=new y;if(A)for(var d=A,p=0;d.length>p;p+=3)n=3*d[p+1],r=3*d[p+2],a.fromArray(e,o=3*d[p]),s.fromArray(e,n),l.fromArray(e,r),c.subVectors(l,s),h.subVectors(a,s),c.cross(h),i[o]+=c.x,i[o+1]+=c.y,i[o+2]+=c.z,i[n]+=c.x,i[n+1]+=c.y,i[n+2]+=c.z,i[r]+=c.x,i[r+1]+=c.y,i[r+2]+=c.z;else for(var g=0,u=e.length;u>g;g+=9)a.fromArray(e,g),s.fromArray(e,g+3),l.fromArray(e,g+6),c.subVectors(l,s),h.subVectors(a,s),c.cross(h),i[g]=c.x,i[g+1]=c.y,i[g+2]=c.z,i[g+3]=c.x,i[g+4]=c.y,i[g+5]=c.z,i[g+6]=c.x,i[g+7]=c.y,i[g+8]=c.z}return i},$u.prototype.addMeshToInfoMap=function(A,e,t,i,o){var n=this.getNodeInfosByComponentKey(A);Array.isArray(n)&&n.forEach((function(A){A.nodeId===e&&(A.mesh=t,A.index=i,A.uv=A.uv||o)}))},$u.prototype._parseGeo=function(){Bh.time("处理几何:计算法线");var A=this.referencedMeshCache;for(var e in A.bufferData){var t=A.bufferData[e];t.position.length!==t.normal.length&&(t.normal=t.normal.length===t.index.length?this._computeVertexNormalsFromFaceNormals(t.normal,t.index,t.position.length):this._computeVertexNormalsFromIndex(t.index,t.position))}Bh.timeEnd("处理几何:计算法线")},$u.prototype._parseBones=function(){var A=this.referencedMeshCache;for(var e in A._offsetMatrix||(A._offsetMatrix={}),A.bufferData){var t=A.bufferData[e];t.position.length!==t.normal.length&&(t.normal=t.normal.length===t.index.length?this._computeVertexNormalsFromFaceNormals(t.normal,t.index,t.position.length):this._computeVertexNormalsFromIndex(t.index,t.position));var i=A.bones[e];if(i){t.skinIndex=i.skinIndex,t.skinWeight=i.skinWeight;var o=i.name;i.offsetMatrix.length/16!==o.length&&Bh.debug("bones的name数量与Matrix数量不符!");for(var n=0;o.length>n;n+=1)A._offsetMatrix[o[n]]=(new M).fromArray(i.offsetMatrix,16*n)}}},$u.prototype._parseClips=function(){for(var A=this.referencedMeshCache.clips,e=[],t=0,i=A.length;i>t;t+=1){for(var o=[],n=A[t],r=0,a=n.tracks.length;a>r;r+=1){var s=n.tracks[r],l=null;switch(s.type){case $u.EnumKeyframeTrackType.weights:l=Dr;break;case $u.EnumKeyframeTrackType.quaternion:l=Nr;break;case $u.EnumKeyframeTrackType.position:case $u.EnumKeyframeTrackType.scale:default:l=Vr}if(0===n.ticksPerSec){n.ticksPerSec=1e3;for(var c=0;s.times.length>c;c+=1)s.times[c]/=n.ticksPerSec}var h=new l(Fs.sanitizeNodeName(s.name)+"."+s.type,s.times,s.values,2301);o.push(h)}var d=new Gr(void 0!==n.name?n.name:"animation_"+t,n.duration/n.ticksPerSec,o);e.push(d)}this.model.animations=e},$u.prototype._parseNodes=function(){var A=this.referencedMeshCache;A.allBones=[],A.offsetMatrix=[];var e=function A(e,t){var i=null;"node"===e.type?i=new H:"bone"===e.type&&(i=new Uo,t.allBones[e.name]=i),i.name=Fs.sanitizeNodeName(e.name),i.matrix.fromArray(e.transformation||[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]),i.matrix.decompose(i.position,i.quaternion,i.scale);for(var o=0;e.children.length>o;o+=1){var n=A(e.children[o],t);n&&i.add(n)}for(var r=0;e.meshes.length>r;r+=1){var a=e.meshes[r];t.model._getHandler().defaultManager.meshManager._readBufferInfo(t.model,[t.model.modelKey+"_"+e.meshes[r]]);var s=t.model._getHandler().defaultManager.meshManager._makeSkinMesh(t.model,[t.model.modelKey+"_"+e.meshes[r]],(function(A){}));t.meshCache[a]=s,s.name=e.name,i.add(s)}return i}(A.nodes,this);for(var t in A.bufferData){var i=this.meshCache[t];if(i&&i.isSkinnedMesh){for(var o=[],n=[],r=0;A.bones[t].name.length>r;r+=1){var a=A.bones[t].name[r],s=A._offsetMatrix[a],l=this.allBones[a];s&&l&&(o.push(l),n.push(s))}var c=new bo(o,n);i.bind(c,i.matrixWorld)}}this.model.nodes=e,this.model.manager.getScene().onBeforeRender=function(A,e,t,i){e.updateMatrixWorld(!0)},this.model.group.add(e),(c=new _s(e)).visible=!1,this.model.skeleton=c,this.model.group.add(c),this.model.mixer=new Rs(e),this.model.actions=[];for(var h=0;this.model.animations.length>h;h+=1){var d=this.model.mixer.clipAction(this.model.animations[h]);this.model.actions.push(d)}};var Af=function(A){$u.call(this,A),this.instancedComponent={}};Object.assign(Af.prototype,$u.prototype),Af.prototype.parseItemData=function(A){var e=this.model;(ap(e.dataVersion,"2.0.0")||void 0===e.dataVersion)&&(Bh.time("升级几何结构"),this._updateV1ToV2(e),e.dataVersion="2.0.0",Bh.timeEnd("升级几何结构")),this._readMaterialBuffer(e),e.hasAnimation&&vc.EnableAnimation?(this._parseClips(),this._parseBones()):(this._parseGeo(),vc.Instance&&sp(e.dataVersion,"2.0.0")&&this._parseInstanced());var t={},i=this.referencedMeshCache;if(Bh.time("_readItemData"),!i.bufferData||0>=Object.keys(i.bufferData).length)return Bh.warn("缺少几何数据"),!0;for(var o in i.components)this._readItemData(t,o,o,void 0,0);Bh.timeEnd("_readItemData"),t=null,A&&A()},Af.prototype._readMeshInfo=function(A,e,t,i){var o=this.model.materialManager.materials,n=null,r=null,a=null,s=this.referencedMeshCache;if(t.nodes||t.nodeIds){r=t.originalId;var l=t,c=(new M).fromArray(l.matrix||[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]);l.matrix=c;var h=[];h=l.nodes?l.nodes:l.nodeIds;for(var d=0;h.length>d;d+=1){var p=h[d];if("object"!==lc(p)&&(p=this.getReferencedMeshComponentNodeById(p)),p){var g,u=null;if(a="",-1!==p.geoId)if(u=this._getComponentNodeAttr(p,l,d)){if(l.buildInCategory&&(u.buildInCategory=l.buildInCategory),!o[a=p.material]){var f=_u[l.type]?_u[l.type].color:void 0;f||(Bh.log("Material not found for type: ",l.type),f=_u.DEFAULT.color),f||(Bh.log("Default material not found for type: ",l.type),f=[1,1,1,1]);var m=new LA(f[0],f[1],f[2]),C=a||m.getHexString()+"_"+f[3],y=o[C];y||(Bh.warn("缺少材质 "+a),y=Kd.createStandardMaterial({color:m}),1>f[3]&&(y.transparent=!0,y.opacity=f[3]),y.side=2,o[C]=y),u.material=a=C}if(o[a].aoMap){var v=this.getReferencedMeshBufferById(u.geometryId);v&&(v.uv2=v.uv)}g=u.nodeId;var I=(K=this.userDataReader)?K.getUserData(n):null;u.type=l.type,u.userId=e,u.name=l.name,u.userDataId=n,u.originalId=r,u.materialId=a,u.originMId=a,u.userData=I,u.categoryId=0,u.componentKey=e,u.familyName=l.familyName,u.familySymbol=l.familySymbol;var E=vc.Instance,B=s.reuseNodes.hasOwnProperty(g);u.instanceOrNot=!(!E||!B),u.isBatched=!0,u.state=Lc.Visible,u.material=null,this._classifyNodeInfo(u),u=null}else Bh.debug("非法node")}}}else if(null===i?(n=t.userDataId,r=t.originalId,a=t.materialId||t.matId):(n=i.userDataId,r=i.originalId,a=i.materialId>-1?i.materialId:t.materialId),t.materials||(t.materials=[]),t.materials.length>0)for(d=0;t.materials.length>d;d+=1){var x=null;if(x=this._getMeshNodeAttr(A,t,t.materials.length>1,d),!o[a=t.materials[d]]){var S=_u[t.type]?_u[t.type].color:void 0;S||(Bh.log("Material not found for type: ",t.type),S=_u.DEFAULT.color),S||(Bh.log("Default material not found for type: ",t.type),S=[1,1,1,1]);var w=new LA(S[0],S[1],S[2]),b=a||w.getHexString()+"_"+S[3],U=o[b];U||(Bh.warn("缺少材质 "+a),U=Kd.createStandardMaterial({color:w}),1>S[3]&&(U.transparent=!0,U.opacity=S[3]),U.side=2,o[b]=U)}if(o[a].aoMap){var F=this.getReferencedMeshBufferById(x.geometryId);F&&(F.uv2=F.uv)}if(!x)return;var K;I=(K=this.userDataReader)?K.getUserData(n):null;x.type=t.type,x.userId=e,x.name=t.name,x.userDataId=n,x.originalId=r,x.materialId=a,x.originMId=a,x.userData=I,x.categoryId=0,x.componentKey=e,x.familyName=t.familyName,x.familySymbol=t.familySymbol,vc.Instance&&this.instancedComponent[e]?x.instanceOrNot=!0:(x.instanceOrNot=!1,this.instancedGeo[x.originalGeometryId].length>1&&(x.originalGeometryId="")),x.state=Lc.Visible,x.material=null,x.isBatched=!0,this._classifyNodeInfo(x),x=null}else{var Q=null,R=_u[t.type]?_u[t.type].color:void 0;R||(Bh.log("Material not found for type: ",t.type),R=_u.DEFAULT.color),R||(Bh.log("Default material not found for type: ",t.type),R=[1,1,1,1]);var T=new LA(R[0],R[1],R[2]),k=T.getHexString()+"_"+R[3],D=o[k];if(D||(D=Kd.createStandardMaterial({color:T}),1>R[3]&&(D.transparent=!0,D.opacity=R[3]),D.side=2,o[k]=D),t.materials.push(k),Q=this._getMeshNodeAttr(A,t,!1,0),a=t.materials[0],!Q)return;t.buildInCategory&&(Q.buildInCategory=t.buildInCategory);e=t.key;Q.type=t.type,Q.userId=e,Q.name=t.name,Q.originalId=r,Q.materialId=a,Q.originMId=a,Q.userData={},Q.categoryId=0,Q.componentKey=e,Q.familyName=t.familyName,Q.familySymbol=t.familySymbol,Q.instanceOrNot=!(!vc.Instance||!this.instancedComponent[e]),Q.isBatched=!0,Q.state=Lc.Visible,Q.material=null,this._classifyNodeInfo(Q),Q=null}},Af.prototype._parseGeo=function(){Bh.time("处理几何:按材质拆分构件");var A=this.referencedMeshCache;for(var e in A.bufferData){var t=A.bufferData[e];if(t.position.length!==t.normal.length&&(t.normal=t.normal.length===t.index.length?this._computeVertexNormalsFromFaceNormals(t.normal,t.index,t.position.length):this._computeVertexNormalsFromIndex(t.index,t.position)),void 0!==t.materialIndex){for(var i=void 0,o=[],n=null,r=0;t.materialIndex.length>r;r+=1){var a=t.materialIndex[r];a!==n&&(n=a,void 0!==i&&(i.count=3*r-i.start,o.push(i)),i={start:3*r,materialIndex:n})}if(void 0!==i&&(i.count=3*t.materialIndex.length-i.start,o.push(i)),1===o.length){A.bufferData[e+"_"+o[0].materialIndex]=t}else{for(var s={},l=0;o.length>l;l+=1){var c=o[l];void 0===s[c.materialIndex]&&(s[c.materialIndex]={index:[],count:0}),s[c.materialIndex].index.push({start:c.start,count:c.count}),s[c.materialIndex].count+=c.count}var h=function(){p={},g=s[d];for(var i=0,o=new Uint32Array(g.count),n=0;g.index.length>n;n+=1){var r=g.index[n],a=t.index.slice(r.start,r.start+r.count);o.set(a,i),i+=r.count}u={},o.forEach((function(A,e){u[A]||(u[A]=[]),u[A].push(e)}));var l=Object.keys(u).length;f=new Float32Array(3*l),m=new Float32Array(3*l),C=new Float32Array(2*l),y=0,v=0;var c=0;for(var h in u)if(u.hasOwnProperty(h)){h=Number(h);var I=t.position.slice(3*h,3*h+3),E=t.normal.slice(3*h,3*h+3);if(t.uv.length>0){var B=t.uv.slice(2*h,2*h+2);C.set(B,v),v+=2}f.set(I,y),m.set(E,y),y+=3,u[h].forEach((function(A){o[A]=c})),c+=1}p.index=o,p.position=f,p.normal=m,t.uv&&t.uv.length>0&&(p.uv=C),A.bufferData[e+"_"+d]=p};for(var d in s){var p,g,u,f,m,C,y,v;h()}}}}Bh.timeEnd("处理几何:按材质拆分构件")},Af.prototype._parseInstanced=function(){Bh.time("_parseInstanced"),this.instancedComponent={};var A={},e={},t=this.referencedMeshCache,i=this.model.materialManager.materials;for(var o in t.components)if(t.components.hasOwnProperty(o)){var n=t.components[o];if(n.nodeIds||n.nodes)continue;var r=n.geoId;if(-1===r){Bh.debug("实体没有几何");continue}if(void 0===A[r]&&(A[r]=[]),A[r].push(1),!n.materials||1>n.materials.length){n.materials=[];var a=_u[n.type]?_u[n.type].color:void 0;a||(Bh.log("Material not found for type: ",n.type),a=_u.DEFAULT.color),a||(Bh.log("Default material not found for type: ",n.type),a=[1,1,1,1]);var s=new LA(a[0],a[1],a[2]),l=s.getHexString()+"_"+a[3],c=i[l];c||(Bh.warn("缺少材质 "+l),c=Kd.createStandardMaterial({color:s}),1>a[3]&&(c.transparent=!0,c.opacity=a[3]),c.side=2,i[l]=c),n.materials.push(l)}for(var h=0,d=n.materials.length;d>h;h+=1){var p=n.materials[h]+"&"+r;void 0===e[p]&&(e[p]=[]),e[p].push({componentKey:o})}}for(var g in this.instancedGeo=A,e)if(e.hasOwnProperty(g))if(1u;u+=1)this.instancedComponent[e[g][u].componentKey]=!0;else delete e[g];Bh.timeEnd("_parseInstanced")};var ef=function(A){Xu.call(this,A),this.descriptor=new Af(A.model)};(ef.prototype=Object.assign(ef.prototype,Xu.prototype)).loadSceneAndGeos=function(A){var e=A.scene,t=this.model,i=e.geometries.length||0,o=[];if(this.map={},ap(this.dataVersion,"2.0.0"))for(var n=0;i>n;n+=1)e.geometries[n].fileKey?o.push(e.geometries[n].fileKey):t.dispatchEventEx({type:Tc.SCENE_NOT_CLOSE,modelKey:t.modelKey});else o=e.geometries;this.maxLoadTaskCount+=i,this._loadGeo(o)},ef.prototype.getSceneTaskCount=function(A){var e=A.scenes;return e+=A.lines,e+=A.mpks,vc.BorderLineDelayLoaded||(e+=this.getAllBorderlineCount()),e};var tf=function(A){this.model=A,this.defaultManager=null,this.instancedManager=null,this.model=A,this.loader=null,this.loaded=!1,this.dataReady=!1,this.borderlinesLoaded=!1,this.borderlinesGenerated=!1};tf.prototype.destroy=function(){this.model=null,this.defaultManager.destroy(),this.defaultManager=null,this.instancedManager.destroy(),this.instancedManager=null,this.loader&&(this.loader.destroy(),this.loader=null)},tf.prototype.load=function(A){var e=this,t=this.model;this.loader.setNotifyProgress(A),this.loader.load((function(){t.manager.dispatchEvent({type:Rc.ON_LOAD_START,modelKey:t.modelKey})}),(function(A){t.manager.dispatchEvent({type:Rc.ON_LOAD_PROGRESS,progress:A,modelKey:t.modelKey})}),(function(){e.prepareData((function(){e.processLoadCompleted((function(){t.manager.dispatchEvent({type:Rc.ON_LOAD_COMPLETE,modelKey:t.modelKey})}))}))}))},tf.prototype.processLoadCompleted=function(A){var e=this.model;e.materialManager._updateTextureMapping(),e.materialManager._updateIBL(e),e.setLoaded(!0);var t=e.manager.filter,i=e.manager.getNodeInfos();t.initFilterManager(i),requestAnimationFrame((function(){A&&A(),e.hasAnimation&&vc.EnableAnimation&&e.createPanel(),e.updateMeshNodes(),e.applyFilter(),e.debut(e)}))},tf.prototype.prepareData=function(A){if(!this.dataReady){var e=this;this.loader.getDescriptor().parseItemData((function(){e.dataReady=!0,e.settleData(A)}))}},tf.prototype.prepareWireframe=function(A,e){if(A.isActivateWireframe())if(vc.BorderLineDelayLoaded&&this.loader.getAllBorderlineCount())if(this.borderlinesLoaded)this.borderlinesGenerated&&(this.defaultManager.asyncGenerateWireframe(A),this.instancedManager.generateWireframe(A));else{this.borderlinesLoaded=!0;var t=this;this.loader.delayLoadBorderlines((function(){t.instancedManager.generateWireframe(A),t.defaultManager.asyncGenerateWireframe(A,(function(){t.borderlinesGenerated=!0,e&&e()}))}))}else this.defaultManager.generateWireframe(A),this.instancedManager.generateWireframe(A)},tf.prototype.prepare=function(A){},tf.prototype.needUpdate=function(){return!0},tf.prototype.updateNodes=function(){this.defaultManager.updateNodes(this.model),vc.Instance&&this.instancedManager.updateNodes(this.model)},tf.prototype.isLoaded=function(){return this.loaded},tf.prototype.isDataReady=function(){return this.loaded},tf.prototype.isAllReady=function(){return!0},tf.prototype.isHidden=function(){var A=this.model;return!A.visible&&(A.manager.scene.removeGroupByName(A._getWireframeGroupName()),!0)},tf.prototype.settleData=function(A){},tf.prototype.addNodeInfoToOctantMap=function(){},tf.prototype.applyFilter=function(){this.isLoaded()&&(this.defaultManager.applyFilter(this.model),vc.Instance&&this.instancedManager.applyFilter(this.model))},tf.prototype.applySelection=function(){this.isLoaded()&&(this.defaultManager.applySelection(this.model),vc.Instance&&this.instancedManager.applySelection(this.model))},tf.prototype.clearSelection=function(){this.isLoaded()&&(this.defaultManager.clearSelection(this.model),vc.Instance&&this.instancedManager.clearSelection(this.model))},tf.prototype.applyHover=function(){this.isLoaded()&&(this.defaultManager.applyHover(this.model),vc.Instance&&this.instancedManager.applyHover(this.model))},tf.prototype.clearHover=function(){this.isLoaded()&&(this.defaultManager.clearHover(this.model),vc.Instance&&this.instancedManager.clearHover(this.model))},tf.prototype.applyBlink=function(){this.isLoaded()&&(this.defaultManager.applyBlink(this.model),vc.Instance&&this.instancedManager.applyBlink(this.model))},tf.prototype.clearBlink=function(){this.isLoaded()&&(this.defaultManager.clearBlink(this.model),vc.Instance&&this.instancedManager.clearBlink(this.model))},tf.prototype.applyReplacement=function(){this.isLoaded()&&(this.defaultManager.applyReplacement(this.model),vc.Instance&&this.instancedManager.applyReplacement(this.model))},tf.prototype.getMeshesByUserIds=function(A){if(this.isLoaded()){var e=this.defaultManager.getMeshesByUserIds(this.model,A),t=[];return vc.Instance&&(t=this.instancedManager.getMeshesByUserId(this.model,A)),[].concat(e).concat(t)}},tf.prototype.rebuildIndicesforLightmap=function(){this.defaultManager.rebuildIndices(this.model)},tf.prototype.adjustVisibility=function(A){this.defaultManager.adjustVisibility(this.model,A)},tf.prototype.changeVisibilityOfSelectedObjects=function(A){this.defaultManager.changeVisibilityOfSelectedObjects(this.model,A)},tf.prototype.changeVisibilityOfNonSelectedObjects=function(A){this.defaultManager.changeVisibilityOfNonSelectedObjects(this.model,A)},tf.prototype.adjustInstanceVisibility=function(A){this.instancedManager.adjustVisibility(this.model,A)},tf.prototype.changeInstanceVisibilityOfSelectedObjects=function(A){this.instancedManager.changeVisibilityOfSelectedObjects(this.model,A)},tf.prototype.changeInstanceVisibilityOfNonSelectedObjects=function(A){this.instancedManager.changeVisibilityOfNonSelectedObjects(this.model,A)},tf.prototype.restoreVisibilityOfObjects=function(){this.defaultManager.restoreVisibilityOfObjects(),this.instancedManager.restoreVisibilityOfObjects()},tf.prototype.getBlinkMaterials=function(){var A=[],e=this.model.materialManager.instanceMaterials;for(var t in e)for(var i=e[t],o=0,n=i.length;n>o;o+=1)A.push(i[o]);return A=A.concat(this.defaultManager.meshManager.getBlinkMaterials())},tf.prototype.disposeBufferAfterVbo=function(){this.isLoaded()&&(this.defaultManager.disposeBufferAfterVbo(),this.instancedManager.disposeBufferAfterVbo())},tf.prototype.getGeometryBuffersByUserId=function(A){if(!this.isLoaded())return[];var e=[];return e=(e=e.concat(this.defaultManager.getGeometryBuffersByUserId(this.model,A))).concat(this.instancedManager.getGeometryBuffersByUserId(this.model,A))},tf.prototype.unloadComponents=function(A){},tf.prototype.explosion=function(A){this.isLoaded()&&(this.defaultManager.explosion(this.model,A),vc.Instance&&this.instancedManager.explosion(this.model,A))},tf.prototype.closeExplosion=function(){this.isLoaded()&&(this.defaultManager.closeExplosion(this.model),vc.Instance&&this.instancedManager.closeExplosion(this.model))},tf.prototype.componentsExplosion=function(A){this.isLoaded()&&(this.defaultManager.componentsExplosion(this.model,A),vc.Instance&&this.instancedManager.componentsExplosion(this.model,A))},tf.prototype.closeComponentsExplosion=function(A){this.isLoaded()&&(this.defaultManager.closeComponentsExplosion(this.model,A),vc.Instance&&this.instancedManager.closeComponentsExplosion(this.model,A))},tf.prototype.isHiddenNode=function(A){return this.defaultManager.isHiddenNode(A)||this.instancedManager.isHiddenNode(A)},tf.prototype.moveMeshfromInstancedToDefault=function(A){};var of=function(A){this.manager=A,this.pickingNodeMap=null,this.pickingNodeGroup=null,this.nodeGroupName="PickingNodeGroup"};of.prototype.destroy=function(){this.clearData(),this.pickingNodeGroup=null,this.manager=null},of.prototype.clearData=function(){this.clearAllFromPickingNodeGroup(),this.clearAllFromPickingNodeMap()},of.prototype.addToPickingNodeMap=function(A,e){this.pickingNodeMap||(this.pickingNodeMap={}),this.pickingNodeMap[A]=e,this.addToPickingNodeGroup(e)},of.prototype.removeFromPickingNodeMap=function(A){this.pickingNodeMap&&this.pickingNodeMap[A]&&(this.removeFormPickingNodeGroup(A),this.disposePickingNodeById(A),delete this.pickingNodeMap[A])},of.prototype.addToPickingNodeGroup=function(A){this.pickingNodeGroup||(this.pickingNodeGroup=new Xi,this.pickingNodeGroup.name=this.nodeGroupName);for(var e=0,t=A.length;t>e;e+=1)this.pickingNodeGroup.add(A[e])},of.prototype.removeFormPickingNodeGroup=function(A){if(this.pickingNodeGroup)for(var e=this.pickingNodeMap[A],t=0,i=e.length;i>t;t+=1)this.pickingNodeGroup.remove(e[t])},of.prototype.disposePickingNodeById=function(A){for(var e=this.pickingNodeMap[A],t=0,i=e.length;i>t;t+=1)e[t].material=null,e[t].geometry.dispose(),e[t]=null},of.prototype.clearAllFromPickingNodeMap=function(){if(this.pickingNodeMap){for(var A=Object.keys(this.pickingNodeMap),e=0,t=A.length;t>e;e+=1)this.disposePickingNodeById(A[e]);this.pickingNodeMap=null}},of.prototype.clearAllFromPickingNodeGroup=function(){this.pickingNodeGroup&&(this.pickingNodeGroup.children.length=0)},of.prototype.isPickingMeshesGenerated=function(){return!!this.pickingNodeMap},of.prototype.generatePickingMeshes=function(){},of.prototype.updatePickingMeshesState=function(A,e,t){},of.prototype.resetPickingMeshesState=function(){},of.prototype.updatePickingMeshes=function(A,e,t){return this.isPickingMeshesGenerated()||(this.generatePickingMeshes(),this.isPickingMeshesGenerated())?(this.resetPickingMeshesState(),this.updatePickingMeshesState(A,e,t),this.getPickingNodeGroup()):null},of.prototype.getPickingNodeGroup=function(){return this.pickingNodeGroup};var nf=function(A){of.call(this,A),this.nodeGroupName="PickingBatchedMeshGroup"};Object.assign(nf.prototype,of.prototype),eu(nf,[{key:"disposePickingNodeById",value:function(A){for(var e=this.pickingNodeMap[A],t=0,i=e.length;i>t;t+=1)e[t]._indicesGroup=null,e[t].material=null,e[t].geometry.dispose(),e[t]=null}},{key:"generatePickingMeshes",value:function(){for(var A=this.manager,e=Object.keys(A.mapMaterialIdToMergedNode),t=0,i=e.length;i>t;t+=1){for(var o=e[t],n=A.getPropertyValueByMaterialKey(o),r=A.mapMaterialIdToMergedNode[o],a=[],s=0,l=r.length;l>s;s+=1){var c=r[s],h=c.geometry,d=c.indices,p=c.mesh,g=new he;g.setAttribute("position",h.getAttribute("position")),g.setIndex(h.getIndex());var u=new("lines"===n.type?jo:Ue)(g,Kd.DefaultMaterial);p.matrixWorld.decompose(u.position,u.quaternion,u.scale),u.name=o,u.frustumCulled=!1,u.renderOrder=0,u._indicesGroup=d,a.push(u)}this.addToPickingNodeMap(o,a)}}},{key:"_rebuildGeometryGroup",value:function(A,e,t){var i,o=this.manager.manager,n=0,r=0,a=0,s=A._indicesGroup,l=Object.keys(s),c=[],h={};e.length>l.length?(c=l,h=t):(c=e,h=s);var d=[];for(a=0,i=c.length;i>a;a+=1){var p=c[a];if(o.isPickableNode(p)&&h[p]){var g=s[p];if(g&&g.length>0)for(n=0,r=g.length;r>n;n+=1)d.push({indexStart:g[n].indexStart,indexCount:g[n].indexCount})}}A.visible=!0;var u=A.geometry;if(u.clearGroups(),0!==d.length)for(d.sort((function(A,e){return A.indexStart-e.indexStart})),n=0,r=d.length;r>n;n+=1){var f=d[n].indexStart,m=d[n].indexCount;if(0===n)u.addGroup(f,m,0);else f===d[n-1].indexStart+d[n-1].indexCount?u.groups[u.groups.length-1].count+=m:u.addGroup(f,m,0)}else A.visible=!1}},{key:"updatePickingMeshesState",value:function(A,e,t){for(var i=this.pickingNodeMap,o=Object.keys(i),n=0,r=o.length;r>n;n+=1)for(var a=i[o[n]],s=0,l=a.length;l>s;s+=1)a[s].material=[A],a[s].visible=!1,this._rebuildGeometryGroup(a[s],e,t)}}]);var rf=new aA,af=new M,sf=new CA,lf=new cA,cf=function(){jo.call(this),this.type="LineSegmentsEx"};cf.prototype.init=function(A){},cf.prototype.destroy=function(){},cf.prototype.intersectBoxWithDistance=function(A,e){var t=this.geometry,i=this.matrixWorld;return e&&(i=this.matrixWorld.clone()).multiplyMatrices(this.matrixWorld,e),t.boundingBox||t.computeBoundingBox(),rf.copy(t.boundingBox),rf.applyMatrix4(i),A.ray.intersectBoxWithDistance(rf)},cf.prototype.intersectBoxWithDistanceByIndices=function(A,e){var t=this.geometry.attributes.position.array,i=0,o=t.length;e&&e.indexCount>0&&(i=e.positionStart,o=e.positionStart+e.positionCount);var n=uh.box3FromArrayRange(t,i,o);return n.applyMatrix4(this.matrixWorld),A.ray.intersectBoxWithDistance(n)},cf.prototype.raycastByIndices=function(A,e,t,i){var o=A.linePrecision;A.linePrecision=vc.LineSelectRange||5;var n=A.linePrecision,r=n*n,a=null;i?(a=this.matrixWorld.clone()).multiplyMatrices(this.matrixWorld,i):a=this.matrixWorld;var s=this.geometry;if(null===s.boundingSphere&&s.computeBoundingSphere(),lf.copy(s.boundingSphere),lf.applyMatrix4(a),!1!==A.ray.intersectsSphere(lf)){af.getInverse(a),sf.copy(A.ray).applyMatrix4(af);var l=new y,c=new y,h=new y,d=new y,p=s.attributes.position.array,g=s.index.array,u=0,f=g.length;t&&t.indexCount>0&&(u=t.indexStart,f=t.indexStart+t.indexCount);for(var m=u;f-1>m;m+=2){var C=g[m+1];if(l.fromArray(p,3*g[m]),c.fromArray(p,3*C),r>=sf.distanceSqToSegment(l,c,d,h)){d.applyMatrix4(a);var v=A.ray.origin.distanceTo(d);A.near>v||v>A.far||e.push({distance:v,point:h.clone().applyMatrix4(a),index:m,face:null,faceIndex:null,object:this})}}A.linePrecision=o}};var hf=new M,df=new CA,pf=new cA,gf=new y,uf=new y,ff=new y,mf=new y,Cf=new y,yf=new y,vf=new y,If=new y,Ef=new y,Bf=new s,xf=new s,Sf=new s,wf=new y,Mf=new y;function bf(A,e,t,i,o,n,r,a){if(null===(Array.isArray(e)?i.intersectTriangle(o,n,r,!1,a):1===e.side?i.intersectTriangle(r,n,o,!0,a):i.intersectTriangle(o,n,r,2!==e.side,a)))return null;Mf.copy(a),Mf.applyMatrix4(A.matrixWorld);var s=t.ray.origin.distanceTo(Mf);return t.near>s||s>t.far?null:{distance:s,point:Mf.clone(),object:A}}function Uf(A,e,t,i,o,n,r,a,l,c,h,d){gf.fromBufferAttribute(o,c),uf.fromBufferAttribute(o,h),ff.fromBufferAttribute(o,d);var p=A.morphTargetInfluences;if(e.morphTargets&&n&&p){vf.set(0,0,0),If.set(0,0,0),Ef.set(0,0,0);for(var g=0,u=n.length;u>g;g+=1){var f=p[g],m=n[g];0!==f&&(mf.fromBufferAttribute(m,c),Cf.fromBufferAttribute(m,h),yf.fromBufferAttribute(m,d),r?(vf.addScaledVector(mf,f),If.addScaledVector(Cf,f),Ef.addScaledVector(yf,f)):(vf.addScaledVector(mf.sub(gf),f),If.addScaledVector(Cf.sub(uf),f),Ef.addScaledVector(yf.sub(ff),f)))}gf.add(vf),uf.add(If),ff.add(Ef)}var C=bf(A,e,t,i,gf,uf,ff,wf);if(C){a&&(Bf.fromBufferAttribute(a,c),xf.fromBufferAttribute(a,h),Sf.fromBufferAttribute(a,d),C.uv=RA.getUV(wf,gf,uf,ff,Bf,xf,Sf,new s)),l&&(Bf.fromBufferAttribute(l,c),xf.fromBufferAttribute(l,h),Sf.fromBufferAttribute(l,d),C.uv2=RA.getUV(wf,gf,uf,ff,Bf,xf,Sf,new s));var y=new GA(c,h,d);RA.getNormal(gf,uf,ff,y.normal),C.face=y}return C}var Ff,Kf=function(A,e){Ue.call(this),this.type="MeshEx",this.matrixAutoUpdate=!1,this.active=!1,this.guid="",this.key="",this.typeEx="",this.geometry=A||Tu.EmptyGeometry,this.material=e||Kd.DefaultMaterial,this.visible=!1,this.pickable=!0};(Kf.prototype=Object.create(Ue.prototype)).constructor=Kf,Kf.prototype.init=function(A){A&&A.parent&&A.parent.add(this)},Kf.prototype.destroy=function(){this.parent&&this.parent.remove(this),this.userData&&(this.userData=null),this.geometry=null,this.material=null},Kf.prototype.isVisible=function(){return this.visible&&this.active},Kf.prototype.spawn=function(A){void 0!==A.guid&&(this.guid=A.guid),void 0!==A.key&&(this.key=A.key),void 0!==A.name&&(this.name=A.name),void 0!==A.typeEx&&(this.typeEx=A.typeEx),A.geometry&&(this.geometry=A.geometry),A.material&&(this.material=A.material),A.matrix?(this.matrix.copy(A.matrix),this.updateMatrixWorld(!0)):(this.matrix.identity(),this.updateMatrixWorld(!0)),this.modelKey=A.modelKey?A.modelKey:"",A.userData?this.userData=A.userData:this.userData&&(this.userData=null),void 0!==A.visible&&(this.visible=A.visible),void 0!==A.isMesh&&(this.isMesh=A.isMesh),void 0!==A.isLine&&(this.isLine=A.isLine),void 0!==A.isLineSegments&&(this.isLineSegments=A.isLineSegments),this.pickable=void 0===A.pickable||A.pickable,this.renderOrder=A.renderOrder||0,this.active=!0,this.visible=!0,this.frustumCulled=!1,this.matChange=!1},Kf.prototype.clear=function(){this.geometry=Tu.EmptyGeometry,this.material=Kd.DefaultMaterial,this.active=!1,this.visible=!0,this.guid="",this.key="",this.typeEx="",this.frustumCulled=!0,this.material.visible=!1},Kf.prototype.intersectBoxWithDistance=(Ff=new aA,function(A,e){var t=this.geometry,i=this.material,o=this.matrixWorld;return e&&(o=new M).multiplyMatrices(this.matrixWorld,e),void 0===i?-1:(t.boundingBox||t.computeBoundingBox(),Ff.copy(t.boundingBox),Ff.applyMatrix4(o),A.ray.intersectBoxWithDistance(Ff))}),Kf.prototype.intersectBoxWithDistanceByIndices=function(A,e){var t=this.matrixWorld,i=this.computeBoundingBox(e);return i.applyMatrix4(t),A.ray.intersectBoxWithDistance(i)},Kf.prototype.intersectBoxWithClipPlane=function(A,e){var t=this.matrixWorld,i=this.computeBoundingBox(e);return i.applyMatrix4(t),i.intersectsPlane(A)},Kf.prototype.getIntersectionPoints=function(A,e,t,i){var o=new M;o.getInverse(this.matrixWorld);var n=A.clone();n.constant*=-1,n=n.applyMatrix4(o);function r(A,e){var i=e.intersectLine(A);i&&t.push(i.x,i.y,i.z)}for(var a,s,l,c=this.geometry.getIndex().array,h=this.geometry.getAttribute("position").array,d=i?0:e.indexStart,p=i?c.length:e.indexStart+e.indexCount,g=new y,u=new y,f=new y,m=new Hs,C=new Hs,v=new Hs,I=d,E=p;E>I;I+=3)s=3*c[I+1],l=3*c[I+2],g.set(h[a=3*c[I]],h[a+1],h[a+2]),u.set(h[s],h[s+1],h[s+2]),f.set(h[l],h[l+1],h[l+2]),i&&(g.applyMatrix4(e.matrix),u.applyMatrix4(e.matrix),f.applyMatrix4(e.matrix)),m.set(g,u),C.set(u,f),v.set(f,g),r(m,n),r(C,n),r(v,n)},Kf.prototype.raycastByIndices=function(){var A=new M,e=new CA,t=new cA,i=new y,o=new y,n=new y,r=new s,a=new s,l=new s,c=new y,h=new y,d=new y,p=new M;function g(A,e,t,s,g,u,f,m){i.fromBufferAttribute(s,u),o.fromBufferAttribute(s,f),n.fromBufferAttribute(s,m);var C=function(A,e,t,i,o,n,r){var a=A.material;if(null===(Array.isArray(a)?t.intersectTriangle(i,o,n,!1,r):1===a.side?t.intersectTriangle(n,o,i,!0,r):t.intersectTriangle(i,o,n,2!==a.side,r)))return null;d.copy(r),d.applyMatrix4(p);var s=e.ray.origin.distanceTo(d);return e.near>s||s>e.far?null:{distance:s,point:d.clone(),object:A}}(A,e,t,i,o,n,h);if(C){if(g&&g.array&&g.array.length&&(r.fromBufferAttribute(g,u),a.fromBufferAttribute(g,f),l.fromBufferAttribute(g,m),C.uv=function(A,e,t,i,o,n,r){return RA.getBarycoord(A,e,t,i,c),o.multiplyScalar(c.x),n.multiplyScalar(c.y),r.multiplyScalar(c.z),o.add(n).add(r),o.clone()}(h,i,o,n,r,a,l)),s.instanceMatrix){var v=i.clone().applyMatrix4(s.instanceMatrix),I=o.clone().applyMatrix4(s.instanceMatrix),E=n.clone().applyMatrix4(s.instanceMatrix);C.face=new GA(u,f,m,RA.getNormal(v,I,E,new y))}else C.face=new GA(u,f,m,RA.getNormal(i,o,n,new y));C.faceIndex=u}return C}return function(i,o,n,r){var a=this.geometry,s=this.material;if(r){a=this.geometry,s=this.material;if((p=new M).multiplyMatrices(this.matrixWorld,r),void 0===s)return;if(null===a.boundingSphere&&a.computeBoundingSphere(),t.copy(a.boundingSphere),t.applyMatrix4(p),!1===i.ray.intersectsSphere(t))return;if(A.getInverse(p),e.copy(i.ray).applyMatrix4(A),null!==a.boundingBox&&!1===e.intersectsBox(a.boundingBox))return;var l=null,c=null,h=null,d=null,u=a.index;(I=a.attributes.position).instanceMatrix=r;var f=a.attributes.uv,m=null,C=null;if(null!==u)for(m=0,C=u.count;C>m;m+=3)c=u.getX(m),h=u.getX(m+1),d=u.getX(m+2),(l=g(this,i,e,I,f,c,h,d))&&(l.faceIndex=Math.floor(m/3),o.push(l));else for(m=0,C=I.count;C>m;m+=3)(l=g(this,i,e,I,f,c=m,h=m+1,d=m+2))&&(l.index=c,o.push(l))}else{if(p=this.matrixWorld,void 0===s)return;if(t.copy(this.computeBoundingSphere(n)),t.applyMatrix4(p),!1===i.ray.intersectsSphere(t))return;A.getInverse(p),e.copy(i.ray).applyMatrix4(A);var y=this.computeBoundingBox(n);if(!1===e.intersectsBox(y))return;l=null,c=null,h=null,d=null;var v,I=a.attributes.position,E=(f=a.attributes.uv,m=null,n.indexStart),B=n.indexStart+n.indexCount,x=a.getIndex().array;for(m=E,v=B;v>m;m+=3)(l=g(this,i,e,I,f,c=x[m],h=x[m+1],d=x[m+2]))&&(l.faceIndex=Math.floor(m/3),o.push(l))}}}(),Kf.prototype.raycastByIndices2=function(){var A=new M,e=new CA,t=new cA,i=new y,o=new y,n=new y,r=new s,a=new s,l=new s,c=new y,h=new y,d=new y,p=new M;function g(A,e,t,s,g,u,f,m){i.fromBufferAttribute(s,u),o.fromBufferAttribute(s,f),n.fromBufferAttribute(s,m);var C=function(A,e,t,i,o,n,r){var a=A.material;if(null===(a instanceof Array?t.intersectTriangle(i,o,n,!1,r):1===a.side?t.intersectTriangle(n,o,i,!0,r):t.intersectTriangle(i,o,n,2!==a.side,r)))return null;d.copy(r),d.applyMatrix4(p);var s=e.ray.origin.distanceTo(d);return e.near>s||s>e.far?null:{distance:s,point:d.clone(),object:A}}(A,e,t,i,o,n,h);if(C){if(g&&g.array&&g.array.length&&(r.fromBufferAttribute(g,u),a.fromBufferAttribute(g,f),l.fromBufferAttribute(g,m),C.uv=function(A,e,t,i,o,n,r){return RA.barycoordFromPoint(A,e,t,i,c),o.multiplyScalar(c.x),n.multiplyScalar(c.y),r.multiplyScalar(c.z),o.add(n).add(r),o.clone()}(h,i,o,n,r,a,l)),s.instanceMatrix){var y=i.clone().applyMatrix4(s.instanceMatrix),v=o.clone().applyMatrix4(s.instanceMatrix),I=n.clone().applyMatrix4(s.instanceMatrix);C.face=new GA(u,f,m,RA.normal(y,v,I))}else C.face=new GA(u,f,m,RA.normal(i,o,n));C.faceIndex=u}return C}return function(i,o,n,r){var a=this.geometry,s=this.material;if(r=!!r,n.isInstanced){if(void 0===n.matrix)return;if(p.multiplyMatrices(this.matrixWorld,n.matrix),void 0===s)return;if(r&&(null===a.boundingSphere&&a.computeBoundingSphere(),t.copy(a.boundingSphere),t.applyMatrix4(p),!1===i.ray.intersectsSphere(t)))return;if(A.getInverse(p),e.copy(i.ray).applyMatrix4(A),r&&null!==a.boundingBox&&!1===e.intersectsBox(a.boundingBox))return;var l=a.index;(I=a.attributes.position).instanceMatrix=n.matrix;var c,h=a.attributes.uv;if(null!==l)for(y=0,c=l.count;c>y;y+=3)f=l.getX(y),m=l.getX(y+1),C=l.getX(y+2),(u=g(this,i,e,I,h,f,m,C))&&(u.faceIndex=Math.floor(y/3),o.push(u));else for(y=0,c=I.count;c>y;y+=3)(u=g(this,i,e,I,h,f=y,m=y+1,C=y+2))&&(u.index=f,o.push(u))}else if(n.matrix?p.multiplyMatrices(this.matrixWorld,n.matrix):p=this.matrixWorld,void 0!==s&&(!r||(t.copy(this.computeBoundingSphere(n)),t.applyMatrix4(p),!1!==i.ray.intersectsSphere(t)))){if(A.getInverse(p),e.copy(i.ray).applyMatrix4(A),r){var d=this.computeBoundingBox(n);if(!1===e.intersectsBox(d))return}var u,f,m,C,y,v,I=a.attributes.position,E=(h=a.attributes.uv,n.indexStart),B=n.indexStart+n.indexCount,x=a.getIndex().array;for(y=E,v=B;v>y;y+=3)(u=g(this,i,e,I,h,f=x[y],m=x[y+1],C=x[y+2]))&&(u.faceIndex=Math.floor(y/3),o.push(u))}}}(),Kf.prototype.computeBoundingBox=function(A){var e=new aA,t=this.geometry.attributes.position.array,i=null,o=null;return A?(i=A.positionStart,o=A.positionStart+A.positionCount):(i=0,o=t.length),this.setBoundingBoxFromArray(e,t,i,o),e},Kf.prototype.computeBoundingSphere=function(A){var e=new aA,t=new y,i=this.geometry.attributes.position.array,o=null,n=null;A?(o=A.positionStart,n=A.positionStart+A.positionCount):(o=0,n=i.length);var r=new cA,a=r.center;this.setBoundingBoxFromArray(e,i,o,n),e.getCenter(a);for(var s=0,l=o,c=n;c>l;l+=3)t.x=i[l],t.y=i[l+1],t.z=i[l+2],s=Math.max(s,a.distanceToSquared(t));return r.radius=Math.sqrt(s),r},Kf.prototype.setBoundingBoxFromArray=function(A,e,t,i){for(var o=Number(1/0),n=Number(1/0),r=Number(1/0),a=-1/0,s=-1/0,l=-1/0,c=t,h=i;h>c;c+=3){var d=e[c],p=e[c+1],g=e[c+2];o>d&&(o=d),n>p&&(n=p),r>g&&(r=g),d>a&&(a=d),p>s&&(s=p),g>l&&(l=g)}A.min.set(o,n,r),A.max.set(a,s,l)},Kf.prototype.raycast=function(A,e){var t=this.geometry,i=this.material,o=this.matrixWorld;if(void 0!==i&&(null===t.boundingSphere&&t.computeBoundingSphere(),pf.copy(t.boundingSphere),pf.applyMatrix4(o),!1!==A.ray.intersectsSphere(pf)&&(hf.getInverse(o),df.copy(A.ray).applyMatrix4(hf),null===t.boundingBox||!1!==df.intersectsBox(t.boundingBox)))){var n=null;if(t.isBufferGeometry){var r=null,a=null,l=null,c=t.index,h=t.attributes.position,d=t.morphAttributes.position,p=t.morphTargetsRelative,g=t.attributes.uv,u=t.attributes.uv2,f=t.groups,m=t.drawRange,C=null,y=null,v=null,I=null,E=null,B=null;if(null!==c)if(Array.isArray(i)){for(C=0,v=f.length;v>C;C+=1)if(B=i[(E=f[C]).materialIndex])for(y=Math.max(E.start,m.start),I=Math.min(E.start+E.count,m.start+m.count);I>y;y+=3)r=c.getX(y),a=c.getX(y+1),l=c.getX(y+2),(n=Uf(this,B,A,df,h,d,p,g,u,r,a,l))&&(n.faceIndex=Math.floor(y/3),n.face.materialIndex=E.materialIndex,e.push(n))}else for(C=Math.max(0,m.start),v=Math.min(c.count,m.start+m.count);v>C;C+=3)r=c.getX(C),a=c.getX(C+1),l=c.getX(C+2),(n=Uf(this,i,A,df,h,d,p,g,u,r,a,l))&&(n.faceIndex=Math.floor(C/3),e.push(n));else if(void 0!==h)if(Array.isArray(i)){for(C=0,v=f.length;v>C;C+=1)if(B=i[(E=f[C]).materialIndex])for(y=Math.max(E.start,m.start),I=Math.min(E.start+E.count,m.start+m.count);I>y;y+=3)(n=Uf(this,B,A,df,h,d,p,g,u,r=y,a=y+1,l=y+2))&&(n.faceIndex=Math.floor(y/3),n.face.materialIndex=E.materialIndex,e.push(n))}else for(C=Math.max(0,m.start),v=Math.min(h.count,m.start+m.count);v>C;C+=3)(n=Uf(this,i,A,df,h,d,p,g,u,r=C,a=C+1,l=C+2))&&(n.faceIndex=Math.floor(C/3),e.push(n))}else if(t.isGeometry){var x=null,S=null,w=null,M=Array.isArray(i),b=t.vertices,U=t.faces,F=null,K=t.faceVertexUvs[0];K.length>0&&(F=K);for(var Q=0,R=U.length;R>Q;Q+=1){var T=U[Q],k=M?i[T.materialIndex]:i;if(void 0!==k&&(n=bf(this,k,A,df,x=b[T.a],S=b[T.b],w=b[T.c],wf))){if(F&&F[Q]){var D=F[Q];Bf.copy(D[0]),xf.copy(D[1]),Sf.copy(D[2]),n.uv=RA.getUV(wf,x,S,w,Bf,xf,Sf,new s)}n.face=T,n.faceIndex=Q,e.push(n)}}}}};var Qf=function(A,e){this.model=e,this.loader=A,this.mapNodeInfoByCategory={},this.mapNodeInfoByUserId={},this.mapNodeInfoByComponentId={},this.referencedMeshCache={},this.nodeInfosOnGeometryId=null,this.componentCount=0,this.meshCache={},this.allBones={}};Qf.EnumNodeItemType={SYMBOL:0,MESH:1,TUBE:2,PIPE:3,BOX:4,BOX_M:5,PIPE_M:6,MESH_REF:7,LINE:8},Qf.NodeInfoCategory={INSTANCED:0,STANDARD:1},Qf.EnumDataType={NONE:0,MERGE_DATA:1,LAYER:2,LAYER_SCENE:3,ANIMATION:4},Qf.EnumKeyframeTrackType={position:"position",scale:"scale",quaternion:"quaternion",weights:"weights"},Qf.prototype.destroy=function(){this.mapNodeInfoByCategory=null,this.mapNodeInfoByUserId=null,this.mapNodeInfoByComponentId=null,this.referencedMeshCache=null,this.nodeInfosOnGeometryId=null},Qf.prototype.clearReferencedMeshCache=function(){if(!vc.DEBUG){for(var A in this.referencedMeshCache)delete this.referencedMeshCache[A];this.referencedMeshCache=null}},Qf.prototype.cacheReferencedMeshBufferData=function(A,e){this.referencedMeshCache.geometries||(this.referencedMeshCache.geometries={}),this.referencedMeshCache.geometries[A]=e},Qf.prototype.cacheReferencedMeshBoneBufferData=function(A,e){this.referencedMeshCache.bones||(this.referencedMeshCache.bones={}),this.referencedMeshCache.bones[A]=e},Qf.prototype.cacheReferencedMeshClipsData=function(A){this.referencedMeshCache.clips=A},Qf.prototype.cacheReferencedMeshNodesData=function(A){this.referencedMeshCache.nodes=A},Qf.prototype.cacheReferencedMeshComponentData=function(A,e){this.referencedMeshCache.components||(this.referencedMeshCache.components={}),this.referencedMeshCache.components[A]=e},Qf.prototype.cacheReferencedMeshMaterialData=function(A,e){this.referencedMeshCache.materials||(this.referencedMeshCache.materials={}),this.referencedMeshCache.materials[A]=e},Qf.prototype.getReferencedMeshBufferData=function(){return this.referencedMeshCache.geometries},Qf.prototype.getReferencedMeshBufferById=function(A){return this.referencedMeshCache.geometries?this.referencedMeshCache.geometries[A]:null},Qf.prototype.cacheReferencedMeshMpkIds=function(A,e){this.referencedMeshCache.mpkIds||(this.referencedMeshCache.mpkIds={}),this.referencedMeshCache.mpkIds[A]||(this.referencedMeshCache.mpkIds[A]=[]),this.referencedMeshCache.mpkIds[A].push(e)},Qf.prototype.clearReferencedMeshCacheByMpkIdxs=function(A,e){if(this.referencedMeshCache.mpkIds)for(var t=0,i=A.length;i>t;t+=1){var o=A[t],n=this.referencedMeshCache.mpkIds[o];if(n){for(var r=0,a=n.length;a>r;r+=1)e&&e(n[r]),delete this.referencedMeshCache[n[r]];delete this.referencedMeshCache.mpkIds[o]}}},Qf.prototype.parseItemData=function(A,e){(op(A.dataVersion,"1.0")||void 0===A.dataVersion)&&(Bh.time("升级几何结构"),this._updateV1ToV2(A),A.dataVersion="2.0",Bh.timeEnd("升级几何结构")),this._readMaterialBuffer222(A),A.hasAnimation&&vc.EnableAnimation?(this._parseClips(),this._parseBones()):(this._parseGeo(),this._parseInstanced());var t=this.loader.getSceneReaderArray();if(!t)return Bh.log("Empty scene"),!1;var i=this.referencedMeshCache;if(Bh.time("_readItemData"),!i.geometries||0>=Object.keys(i.geometries).length)return!0;if(e)for(var o=0,n=e.length;n>o;o+=1)i.components[e[o]]&&this._readItemData(t,e[o],e[o],void 0,0);else for(var r in i.components)this._readItemData(t,r,r,void 0,0);return A.hasAnimation&&vc.EnableAnimation&&this._parseNodes(),Bh.timeEnd("_readItemData"),t=null,!0},Qf.prototype._readItemData=function(A,e,t){var i=this.referencedMeshCache.components[e];void 0!==i&&-1!==i.geoId&&(this.model.merged?this._readMeshInfo(A,t,i,null):this._readMeshInfo2(A,t,i,null))},Qf.prototype._readSymbolInfo=function(A,e,t){var i=this.loader.getSymbolReader();if(i){var o=i.header.symbolCount,n=t.toData,r=A.getMatrixInfo(t.matrixId).matrix.clone(),a={matrix:r,ItemId:t.ItemId,originalId:t.originalId,userDataId:t.userDataId,materialId:t.materialId};if(n>=0&&o>n)for(var s=i.getSymbolInfo(n),l=s.itemIndex;s.itemCount>l;l+=1){var c=i.getItemInfo(l);c.type!==Qf.EnumNodeItemType.SYMBOL&&this._readMeshInfo(i,e,c,a)}r=null,a=null,i=null}},Qf.prototype._readMeshInfo=function(A,e,t,i){var o=this.loader,n=this.model.materialManager.materials,r=null,a=null,s=null;if(null===i?(r=t.userDataId,a=t.originalId,s=t.materialId||t.matId):(r=i.userDataId,a=i.originalId,s=i.materialId>-1?i.materialId:t.materialId),t.materials||(t.materials=[]),t.materials.length>0)for(var l=0;t.materials.length>l;l+=1){var c=null;if(c=this._getMeshNodeAttr(A,t,t.materials.length>1,l),!n[s=t.materials[l]]){var h=_u[t.type]?_u[t.type].color:void 0;h||(Bh.log("Material not found for type: ",t.type),h=_u.DEFAULT.color),h||(Bh.log("Default material not found for type: ",t.type),h=[1,1,1,1]);var d=new LA(h[0],h[1],h[2]),p=s||d.getHexString()+"_"+h[3],g=n[p];g||(Bh.warn("缺少材质 "+s),g=new xr({color:d}),1>h[3]&&(g.transparent=!0,g.opacity=h[3]),g.side=2,n[p]=g)}if(n[s].aoMap){var u=this.getReferencedMeshBufferById(c.geometryId);u&&(u.uv2=u.uv)}if(!c)return;var f=o.getUserDataReader(),m=f?f.getUserData(r):null,C=t.key;c.type=t.type,c.userId=C,c.name=t.name,c.userDataId=r,c.originalId=a,c.materialId=s,c.originMId=s,c.userData=m,c.categoryId=0,c.componentId=C,c.familyName=t.familyName,c.familySymbol=t.familySymbol,c.instanceOrNot=!(!vc.Instance||!this.instancedComponent[C]),c.state=Lc.Visible,c.material=null,this._classifyNodeInfo(c),c=null}else{var y=null,v=_u[t.type]?_u[t.type].color:void 0;v||(Bh.log("Material not found for type: ",t.type),v=_u.DEFAULT.color),v||(Bh.log("Default material not found for type: ",t.type),v=[1,1,1,1]);var I=new LA(v[0],v[1],v[2]),E=I.getHexString()+"_"+v[3],B=n[E];if(B||(B=new xr({color:I}),1>v[3]&&(B.transparent=!0,B.opacity=v[3]),B.side=2,n[E]=B),t.materials.push(E),y=this._getMeshNodeAttr(A,t,!1,0),s=t.materials[0],!y)return;var x=t.key;y.type=t.type,y.userId=x,y.name=t.name,y.originalId=a,y.materialId=s,y.originMId=s,y.userData={},y.categoryId=0,y.componentId=x,y.familyName=t.familyName,y.familySymbol=t.familySymbol,y.instanceOrNot=!(!vc.Instance||!this.instancedComponent[x]),y.state=Lc.Visible,y.material=null,this._classifyNodeInfo(y),y=null}},Qf.prototype._readMeshInfo2=function(A,e,t,i){var o=this.loader,n=null,r=null,a=null;null===i?(n=t.userDataId,r=t.originalId,a=t.materials||t.matId):(n=i.userDataId,r=i.originalId,a=i.materialId>-1?i.materialId:t.materialId);var s=null;if(s=this._getMeshNodeAttr(A,t,!1)){var l=o.getUserDataReader(),c=l?l.getUserData(n):null,h=t.key;s.type=t.type,s.userId=h,s.name=t.name,s.originalId=r,s.materialId=a,s.originMId=a,s.userData=c,s.categoryId=0,s.componentId=h,s.familyName=t.familyName,s.familySymbol=t.familySymbol,s.state=Lc.Visible,s.material=null,this._classifyNodeInfo(s),s=null}},Qf.prototype._getMeshNodeAttrOfPipe=function(A,e,t){var i=A.getMatrixInfo(e.matrixId).matrix.clone(),o=uh.TemporaryMatrix;o.copy(i);var n=A.getGeomPipeInfo(e.toData),r=n.startPt,a=n.endPt,s=new y;s.subVectors(a,r);var l=s.length();s.normalize();var c=n.radius;c>1||(c=100);var h=new y(0,1,0),d=new y(c,l,c),p=(new f).setFromUnitVectors(h,s),g=r.clone().addScaledVector(s,.5*l),u=(new M).compose(g,p,d);return i.multiply(u),t&&(i.multiplyMatrices(t.matrix,i),o.multiplyMatrices(t.matrix,o)),n=null,{nodeId:(t?t.ItemId+"_"+e.ItemId:e.ItemId)+"_pipe",geometryId:"pipe",boundingBox:e.boundingBox.clone().applyMatrix4(o),matrix:i,finalState:!0}},Qf.prototype._getMeshNodeAttrOfTube=function(A,e,t){var i=this._getMeshNodeAttrOfPipe(A,e,t);return i.nodeId+="_tube",i.geometryId="tube",i},Qf.prototype._getMeshNodeAttrOfBox=function(A,e,t){var i=A.getMatrixInfo(e.matrixId).matrix.clone(),o=uh.TemporaryMatrix;o.copy(i);var n=e.boundingBox,r=n.getSize(),a=n.getCenter(),s=(new M).scale(new y(r.x,r.y,r.z));return s.setPosition(a),i.multiply(s),t&&(i.multiplyMatrices(t.matrix,i),o.multiplyMatrices(t.matrix,o)),{nodeId:(t?t.ItemId+"_"+e.ItemId:e.ItemId)+"_box",geometryId:"box",boundingBox:e.boundingBox.clone().applyMatrix4(o),matrix:i,finalState:!0}},Qf.prototype._getMeshNodeAttrOfBoxM=function(A,e,t){var i=A.getMatrixInfo(e.matrixId).matrix.clone();return t&&i.multiplyMatrices(t.matrix,i),{nodeId:(t?t.ItemId+"_"+e.ItemId:e.ItemId)+"_boxM",geometryId:"boxM",boundingBox:e.boundingBox.clone().applyMatrix4(i),matrix:i,uvArrayBuffer:A.getGeomBoxUvInfo(e.toData),finalState:!0}},Qf.prototype._getMeshNodeAttrOfPipeM=function(A,e,t){var i=A.getMatrixInfo(e.matrixId).matrix.clone();return t&&i.multiplyMatrices(t.matrix,i),{nodeId:(t?t.ItemId+"_"+e.ItemId:e.ItemId)+"_pipeM",geometryId:"pipeM",boundingBox:e.boundingBox.clone().applyMatrix4(i),matrix:i,uvArrayBuffer:A.getGeomPipeUvInfo(e.toData),finalState:!0}},Qf.prototype._getMeshNodeAttrOfMeshRef=function(A,e,t){return{nodeId:"refMesh|"+(t?t.ItemId+"_"+e.ItemId:e.ItemId),geometryId:e.toData,boundingBox:e.boundingBox.clone(),matrix:A.getMatrixInfo(e.matrixId).matrix.clone(),matrixParent:t?t.matrix:null,finalState:!1,transformed:!1,shared:!0}},Qf.prototype._getMeshNodeAttr=function(A,e,t,i){var o=new M;o.fromArray(e.matrix||[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]);var n=t?e.key+"_"+i:e.key,r=t?e.geoId+"_"+i:e.geoId;if(-1!==r){var a=new aA,s=this.getReferencedMeshBufferById(e.geoId);return s&&s.position?(a=Tu.getBoundingBoxByBuffer(s.position)).applyMatrix4(o):Bh.warn("no position "),{nodeId:n,guid:e.guid,geometryId:r,originalGeometryId:e.geoId,matrix:o,boundingBox:a,model:this.model}}},Qf.prototype._getLineNodeAttr=function(A,e,t){var i=null,o=null;return-1!==e.matrixId?(o=!1,i=A.getMatrixInfo(e.matrixId).matrix.clone()):(o=!0,i=new M),{nodeId:t?"line-"+t.ItemId+"-"+e.ItemId:"line-"+e.ItemId,geometryId:"line-"+e.toData,boundingBox:e.boundingBox.clone(),matrix:i,matrixParent:t?t.matrix:null,finalState:!1,transformed:o}},Qf.prototype._classifyNodeInfo=function(A){this._cacheNodeInfoByComponentId(A),this._cacheNodeInfoByUserId(A),this._cacheNodeInfoByCategory(A)},Qf.prototype._cacheNodeInfoByComponentId=function(A){void 0===this.mapNodeInfoByComponentId[A.componentId]&&(this.mapNodeInfoByComponentId[A.componentId]=[]),this.mapNodeInfoByComponentId[A.componentId].push(A)},Qf.prototype._clearNodeInfoCacheWithComponentId=function(A){if(A)for(var e=0,t=A.length;t>e;e+=1)delete this.mapNodeInfoByComponentId[A[e]];else this.mapNodeInfoByComponentId={}},Qf.prototype._clearNodeInfoCacheWithUserId=function(A){if(A)for(var e=0,t=A.length;t>e;e+=1)delete this.mapNodeInfoByUserId[A[e]];else this.mapNodeInfoByUserId={}},Qf.prototype._clearNodeInfoCacheWithCategory=function(A){if(A)for(var e=this.mapNodeInfoByCategory[Qf.NodeInfoCategory.INSTANCED],t=this.mapNodeInfoByCategory[Qf.NodeInfoCategory.STANDARD],i=0,o=A.length;o>i;i+=1)e&&delete e[A[i]],t&&delete t[A[i]];else this.mapNodeInfoByCategory={}},Qf.prototype.clearNodeInfoCache=function(){this._clearNodeInfoCacheWithComponentId(),this._clearNodeInfoCacheWithUserId(),this._clearNodeInfoCacheWithCategory()},Qf.prototype.clearNodeInfoCacheByComponentsKey=function(A){this._clearNodeInfoCacheWithComponentId(A),this._clearNodeInfoCacheWithUserId(A),this._clearNodeInfoCacheWithCategory(A)},Qf.prototype.getNodeInfosWithComponentId=function(){return this.mapNodeInfoByComponentId},Qf.prototype.getNodeInfosByComponentId=function(A){return this.mapNodeInfoByComponentId[A]},Qf.prototype._cacheNodeInfoByUserId=function(A){void 0===this.mapNodeInfoByUserId[A.userId]&&(this.mapNodeInfoByUserId[A.userId]=[]),this.mapNodeInfoByUserId[A.userId].push(A)},Qf.prototype.getNodeInfosByUserId=function(A){return this.mapNodeInfoByUserId[A]},Qf.prototype.getNodeInfosWithUserId=function(){return this.mapNodeInfoByUserId},Qf.prototype._cacheNodeInfoByCategory=function(A){var e=null;void 0===this.mapNodeInfoByCategory[e=A.instanceOrNot?Qf.NodeInfoCategory.INSTANCED:Qf.NodeInfoCategory.STANDARD]&&(this.mapNodeInfoByCategory[e]={}),void 0===this.mapNodeInfoByCategory[e][A.userId]&&(this.mapNodeInfoByCategory[e][A.userId]=[]),this.mapNodeInfoByCategory[e][A.userId].push(A)},Qf.prototype.getNodeInfosByCategory=function(A){return this.mapNodeInfoByCategory[A]},Qf.prototype.getStandardNodeInfos=function(){return this.getNodeInfosByCategory(Qf.NodeInfoCategory.STANDARD)},Qf.prototype.getInstancedNodeInfos=function(){return this.getNodeInfosByCategory(Qf.NodeInfoCategory.INSTANCED)},Qf.prototype.getStandardUserIds=function(){return this.getStandardNodeInfos()?Object.keys(this.getStandardNodeInfos()):null},Qf.prototype.getInstancedUserIds=function(){return this.getInstancedNodeInfos()?Object.keys(this.getInstancedNodeInfos()):null},Qf.prototype.traverseNodeInfos=function(A){if(A)for(var e in this.mapNodeInfoByComponentId)for(var t=this.mapNodeInfoByComponentId[e],i=0,o=t.length;o>i;i+=1)A(e,t[i])},Qf.prototype.getUserIdsByCategory=function(A,e){var t=[],i=null;if(i=e===Qf.NodeInfoCategory.INSTANCED?this.getInstancedNodeInfos():this.getStandardNodeInfos())for(var o=0,n=A.length;n>o;o+=1)i[A[o]]&&t.push(A[o]);return t},Qf.prototype.getInstancedUserIdsByCategory=function(A){return this.getUserIdsByCategory(A,Qf.NodeInfoCategory.INSTANCED)},Qf.prototype.getStandardUserIdsByCategory=function(A){return this.getUserIdsByCategory(A,Qf.NodeInfoCategory.STANDARD)},Qf.prototype.getNodeInfosOnBMpkGeometryId=function(){return this.nodeInfosOnGeometryId||this.cacheNodeInfosOnGeometryId(),this.nodeInfosOnGeometryId},Qf.prototype.cacheNodeInfosOnGeometryId=function(){var A=this.getStandardNodeInfos();for(var e in this.nodeInfosOnGeometryId={},A)for(var t=A[e],i=0,o=t.length;o>i;i+=1){var n=this.loader.convertToBMpkGeometryId(t[i].geometryId);void 0!==n&&(t[i].geometryId=n),this.nodeInfosOnGeometryId[t[i].geometryId]||(this.nodeInfosOnGeometryId[t[i].geometryId]=[]),this.nodeInfosOnGeometryId[t[i].geometryId].push(t[i])}},Qf.prototype.updateNodeInfosByIds=function(A){},Qf.prototype._isRegularShape=function(A){var e=A.type===Qf.EnumNodeItemType.TUBE||A.type===Qf.EnumNodeItemType.PIPE||A.type===Qf.EnumNodeItemType.BOX||A.type===Qf.EnumNodeItemType.BOX_M||A.type===Qf.EnumNodeItemType.PIPE_M;return vc.SharedMeshInstanceEnable&&(e=e||A.type===Qf.EnumNodeItemType.MESH_REF),e},Qf.prototype.getOctreeRoots=function(A){var e=this.loader,t=e.getOctreeRootNodeOuter();t&&A.push(t);var i=e.getOctreeRootNodeInner();i&&A.push(i)},Qf.prototype.getComponentCount=function(){return this.componentCount},Qf.prototype._parseInstanced=function(){this.instancedComponent={};var A={},e={},t=this.referencedMeshCache;for(var i in t.components)if(t.components.hasOwnProperty(i)){var o=t.components[i],n=o.geoId;if(-1===n){Bh.debug("实体没有几何");continue}if(void 0===A[n]&&(A[n]=[],e[n]={}),A[n].push({componentId:i}),!o.materials){o.materials=[];continue}for(var r=0;o.materials.length>r;r+=1){var a=o.materials[r];e[n][a]||(e[n][a]=[]),e[n][a].push({componentId:i,matrix:o.matrix})}}for(var s in A)if(A.hasOwnProperty(s))if(1r;r+=1)this.instancedComponent[A[s][r].componentId]=!0;else delete A[s],delete e[s]},Qf.prototype._parseBones=function(){var A=this.referencedMeshCache;for(var e in A._offsetMatrix||(A._offsetMatrix={}),A.geometries){var t=A.geometries[e];t.position.length!==t.normal.length&&(t.normal=t.normal.length===t.index.length?this._computeVertexNormalsFromFaceNormals(t.normal,t.index,t.position.length):this._computeVertexNormalsFromIndex(t.index,t.position));var i=A.bones[e];if(i){t.skinIndex=i.skinIndex,t.skinWeight=i.skinWeight;var o=i.name;i.offsetMatrix.length/16!==o.length&&Bh.debug("bones的name数量与Matrix数量不符!");for(var n=0;o.length>n;n+=1)A._offsetMatrix[o[n]]=(new M).fromArray(i.offsetMatrix,16*n)}}},Qf.prototype._parseClips=function(){for(var A=this.referencedMeshCache.clips,e=[],t=0,i=A.length;i>t;t+=1){for(var o=[],n=A[t],r=0,a=n.tracks.length;a>r;r+=1){var s=n.tracks[r],l=null;switch(s.type){case Qf.EnumKeyframeTrackType.weights:l=Dr;break;case Qf.EnumKeyframeTrackType.quaternion:l=Nr;break;case Qf.EnumKeyframeTrackType.position:case Qf.EnumKeyframeTrackType.scale:default:l=Vr}if(0===n.ticksPerSec){n.ticksPerSec=1e3;for(var c=0;s.times.length>c;c+=1)s.times[c]/=n.ticksPerSec}var h=new l(Fs.sanitizeNodeName(s.name)+"."+s.type,s.times,s.values,2301);o.push(h)}var d=new Gr(void 0!==n.name?n.name:"animation_"+t,n.duration/n.ticksPerSec,o);e.push(d)}this.model.animations=e},Qf.prototype._parseNodes=function(){var A=this.referencedMeshCache;A.allBones=[],A.offsetMatrix=[];var e=function A(e,t){var i=null;"node"===e.type?i=new H:"bone"===e.type&&(i=new Uo,t.allBones[e.name]=i),i.name=Fs.sanitizeNodeName(e.name),i.matrix.fromArray(e.transformation||[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]),i.matrix.decompose(i.position,i.quaternion,i.scale);for(var o=0;e.children.length>o;o+=1){var n=A(e.children[o],t);n&&i.add(n)}for(var r=0;e.meshes.length>r;r+=1){var a=e.meshes[r];t.model._getHandler().defaultManager.meshManager._readBufferInfo(t.model,[t.model.modelKey+"_"+e.meshes[r]]);var s=t.model._getHandler().defaultManager.meshManager._makeSkinMesh(t.model,[t.model.modelKey+"_"+e.meshes[r]],(function(A){}));t.meshCache[a]=s,s.name=e.name,i.add(s)}return i}(A.nodes,this);for(var t in A.geometries){var i=this.meshCache[t];if(i&&i.isSkinnedMesh){for(var o=[],n=[],r=0;A.bones[t].name.length>r;r+=1){var a=A.bones[t].name[r],s=A._offsetMatrix[a],l=this.allBones[a];s&&l&&(o.push(l),n.push(s))}var c=new bo(o,n);i.bind(c,i.matrixWorld)}}this.model.nodes=e,this.model.manager.getScene().onBeforeRender=function(A,e,t,i){e.updateMatrixWorld(!0)},this.model.group.add(e),(c=new _s(e)).visible=!1,this.model.skeleton=c,this.model.group.add(c),this.model.mixer=new Rs(e),this.model.actions=[];for(var h=0;this.model.animations.length>h;h+=1){var d=this.model.mixer.clipAction(this.model.animations[h]);this.model.actions.push(d)}},Qf.prototype._parseGeo=function(){Bh.time("处理几何:按材质拆分构件");var A=this.referencedMeshCache;for(var e in A.geometries){var t=A.geometries[e];if(t.position.length!==t.normal.length&&(t.normal=t.normal.length===t.index.length?this._computeVertexNormalsFromFaceNormals(t.normal,t.index,t.position.length):this._computeVertexNormalsFromIndex(t.index,t.position)),void 0!==t.materialIndex){for(var i=void 0,o=[],n=null,r=0;t.materialIndex.length>r;r+=1){var a=t.materialIndex[r];a!==n&&(n=a,void 0!==i&&(i.count=3*r-i.start,o.push(i)),i={start:3*r,materialIndex:n})}if(void 0!==i&&(i.count=3*t.materialIndex.length-i.start,o.push(i)),1===o.length){A.geometries[e+"_"+o[0].materialIndex]=t}else{for(var s={},l=0;o.length>l;l+=1){var c=o[l];void 0===s[c.materialIndex]&&(s[c.materialIndex]={index:[],count:0}),s[c.materialIndex].index.push({start:c.start,count:c.count}),s[c.materialIndex].count+=c.count}var h=function(){p={},g=s[d];for(var i=0,o=new Uint32Array(g.count),n=0;g.index.length>n;n+=1){var r=g.index[n],a=t.index.slice(r.start,r.start+r.count);o.set(a,i),i+=r.count}u={},o.forEach((function(A,e){u[A]||(u[A]=[]),u[A].push(e)}));var l=Object.keys(u).length;f=new Float32Array(3*l),m=new Float32Array(3*l),C=new Float32Array(2*l),y=0,v=0;var c=0;for(var h in u)if(u.hasOwnProperty(h)){h=Number(h);var I=t.position.slice(3*h,3*h+3),E=t.normal.slice(3*h,3*h+3);if(t.uv.length>0){var B=t.uv.slice(2*h,2*h+2);C.set(B,v),v+=2}f.set(I,y),m.set(E,y),y+=3,u[h].forEach((function(A){o[A]=c})),c+=1}p.index=o,p.position=f,p.normal=m,t.uv&&t.uv.length>0&&(p.uv=C),A.geometries[e+"_"+d]=p};for(var d in s){var p,g,u,f,m,C,y,v;h()}}}}Bh.timeEnd("处理几何:按材质拆分构件")},Qf.prototype._computeVertexNormalsFromFaceNormals=function(A,e,t){for(var i=new Float32Array(t),o=0,n=0,r=0,a=0,s=0,l=0,c=0;A.length>c;c+=3)s=A[c+1],l=A[c+2],n=3*e[c+1],r=3*e[c+2],i[o=3*e[c]]=a=A[c],i[o+1]=s,i[o+2]=l,i[n]=a,i[n+1]=s,i[n+2]=l,i[r]=a,i[r+1]=s,i[r+2]=l;return i},Qf.prototype._computeVertexNormalsFromIndex=function(A,e){var t=new Float32Array(e.length);if(e){var i=0,o=0,n=0,r=new y,a=new y,s=new y,l=new y,c=new y;if(A)for(var h=A,d=0;h.length>d;d+=3)o=3*h[d+1],n=3*h[d+2],r.fromArray(e,i=3*h[d]),a.fromArray(e,o),s.fromArray(e,n),l.subVectors(s,a),c.subVectors(r,a),l.cross(c),t[i]+=l.x,t[i+1]+=l.y,t[i+2]+=l.z,t[o]+=l.x,t[o+1]+=l.y,t[o+2]+=l.z,t[n]+=l.x,t[n+1]+=l.y,t[n+2]+=l.z;else for(var p=0,g=e.length;g>p;p+=9)r.fromArray(e,p),a.fromArray(e,p+3),s.fromArray(e,p+6),l.subVectors(s,a),c.subVectors(r,a),l.cross(c),t[p]=l.x,t[p+1]=l.y,t[p+2]=l.z,t[p+3]=l.x,t[p+4]=l.y,t[p+5]=l.z,t[p+6]=l.x,t[p+7]=l.y,t[p+8]=l.z}return t},Qf.prototype._readMaterialBuffer222=function(A){var e=A.materialManager,t=e.materials,i=e.textures,o=this.referencedMeshCache.materials;for(var n in o){var r=o[n];if(!r)return null;var a=new xr;if(a.name=r.name||n,a.key=n,r.emissive&&a.emissive&&(1===r.emissive[0]&&1===r.emissive[1]&&1===r.emissive[2]||a.emissive.setRGB(r.emissive[0],r.emissive[1],r.emissive[2])),r.color?a.color.setRGB(r.color[0],r.color[1],r.color[2]):a.color.setRGB(.72,.72,.72),r.tint&&a.color.setRGB(r.tint[0],r.tint[1],r.tint[2]),r.specular&&a.specular&&a.specular.setRGB(r.specular[0],r.specular[1],r.specular[2]),r.map)if(void 0!==r.mapOffsetY&&0!==r.mapOffsetY||void 0!==r.mapOffsetX&&0!==r.mapOfsfetX||void 0!==r.mapScaleX&&1!==r.mapScaleX||void 0!==r.mapScaleY&&1!==r.mapScaleY||void 0!==r.mapWAngle&&0!==r.mapWAngle){var s=r.mapOffsetX+"_"+r.mapOffsetY+"_"+r.mapScaleX+"_"+r.mapScaleY+"_"+r.mapWAngle+"_"+r.map;if(i[s])a.map=i[s];else(g=new d).wrapS=g.wrapT=1e3,g.image=i[r.map].image?i[r.map].image:null,g.needsUpdate=!0,g.image&&(g.offset.x=r.mapOffsetX?r.mapOffsetX:0,g.offset.y=r.mapOffsetY?r.mapOffsetY:0,g.repeat.x=r.mapScaleX?r.mapScaleX:1,g.repeat.y=r.mapScaleY?r.mapScaleY:1,g.rotation=r.mapWAngle?r.mapWAngle:0,i[s]=g,a.map=g)}else a.map=i[r.map]?i[r.map]:null;if(r.aoMap)if(void 0!==r.aoMapOffsetY&&0!==r.aoMapOffsetY||void 0!==r.aoMapOffsetX&&0!==r.aoMapOfsfetX||void 0!==r.aoMapScaleX&&1!==r.aoMapScaleX||void 0!==r.aoMapScaleY&&1!==r.aoMapScaleY||void 0!==r.aoMapWAngle&&0!==r.aoMapWAngle){var l=r.aoMapOffsetX+"_"+r.aoMapOffsetY+"_"+r.aoMapScaleX+"_"+r.aoMapScaleY+"_"+r.aoMapWAngle+"_"+r.aoMap;if(i[l])a.aoMap=i[l];else(g=new d).wrapS=g.wrapT=1e3,g.image=i[r.aoMap]&&i[r.aoMap].image?i[r.aoMap].image:null,g.needsUpdate=!0,g.image&&(g.offset.x=r.aoMapOffsetX?r.aoMapOffsetX:0,g.offset.y=r.aoMapOffsetY?r.aoMapOffsetY:0,g.repeat.x=r.aoMapScaleX?r.aoMapScaleX:1,g.repeat.y=r.aoMapScaleY?r.aoMapScaleY:1,g.rotation=r.aoMapWAngle?r.aoMapWAngle:0,i[l]=g,a.aoMap=g)}else a.aoMap=i[r.aoMap]?i[r.aoMap]:null;if(void 0!==r.aoMapIntensity&&(a.aoMapIntensity=r.aoMapIntensity),r.envMap)if(void 0!==r.envMapOffsetY&&0!==r.envMapOffsetY||void 0!==r.envMapOffsetX&&0!==r.envMapOfsfetX||void 0!==r.envMapScaleX&&1!==r.envMapScaleX||void 0!==r.envMapScaleY&&1!==r.envMapScaleY||void 0!==r.envMapWAngle&&0!==r.envMapWAngle){var c=r.envMapOffsetX+"_"+r.envMapOffsetY+"_"+r.envMapScaleX+"_"+r.envMapScaleY+"_"+r.envMapWAngle+"_"+r.envMap;if(i[c])a.envMap=i[c];else(g=new d).wrapS=g.wrapT=1e3,g.image=i[r.envMap].image?i[r.envMap].image:null,g.needsUpdate=!0,g.image&&(g.offset.x=r.envMapOffsetX?r.envMapOffsetX:0,g.offset.y=r.envMapOffsetY?r.envMapOffsetY:0,g.repeat.x=r.envMapScaleX?r.envMapScaleX:1,g.repeat.y=r.envMapScaleY?r.envMapScaleY:1,g.rotation=r.envMapWAngle?r.envMapWAngle:0,i[c]=g,a.envMap=g)}else a.envMap=i[r.envMap]?i[r.envMap]:null;if(r.lightMap)if(void 0!==r.lightMapOffsetY&&0!==r.lightMapOffsetY||void 0!==r.lightMapOffsetX&&0!==r.lightMapOfsfetX||void 0!==r.lightMapScaleX&&1!==r.lightMapScaleX||void 0!==r.lightMapScaleY&&1!==r.lightMapScaleY||void 0!==r.lightMapWAngle&&0!==r.lightMapWAngle){var h=r.lightMapOffsetX+"_"+r.lightMapOffsetY+"_"+r.lightMapScaleX+"_"+r.lightMapScaleY+"_"+r.lightMapWAngle+"_"+r.lightMap;if(i[h])a.lightMap=i[h];else(g=new d).wrapS=g.wrapT=1e3,g.image=i[r.lightMap].image?i[r.lightMap].image:null,g.needsUpdate=!0,g.image&&(g.offset.x=r.lightMapOffsetX?r.lightMapOffsetX:0,g.offset.y=r.lightMapOffsetY?r.lightMapOffsetY:0,g.repeat.x=r.lightMapScaleX?r.lightMapScaleX:1,g.repeat.y=r.lightMapScaleY?r.lightMapScaleY:1,g.rotation=r.lightMapWAngle?r.lightMapWAngle:0,i[h]=g,a.lightMap=g)}else a.lightMap=i[r.lightMap]?i[r.lightMap]:null;if(void 0!==r.lightMapIntensity&&(a.lightMapIntensity=r.lightMapIntensity),r.emissiveMap)if(void 0!==r.emissiveMapOffsetY&&0!==r.emissiveMapOffsetY||void 0!==r.emissiveMapOffsetX&&0!==r.emissiveMapOfsfetX||void 0!==r.emissiveMapScaleX&&1!==r.emissiveMapScaleX||void 0!==r.emissiveMapScaleY&&1!==r.emissiveMapScaleY||void 0!==r.emissiveMapWAngle&&0!==r.emissiveMapWAngle){var p=r.emissiveMapOffsetX+"_"+r.emissiveMapOffsetY+"_"+r.emissiveMapScaleX+"_"+r.emissiveMapScaleY+"_"+r.emissiveMapWAngle+"_"+r.emissiveMap;if(i[p])a.emissiveMap=i[p];else(g=new d).wrapS=g.wrapT=1e3,g.image=i[r.emissiveMap].image?i[r.emissiveMap].image:null,g.needsUpdate=!0,g.image&&(g.offset.x=r.emissiveMapOffsetX?r.emissiveMapOffsetX:0,g.offset.y=r.emissiveMapOffsetY?r.emissiveMapOffsetY:0,g.repeat.x=r.emissiveMapScaleX?r.emissiveMapScaleX:1,g.repeat.y=r.emissiveMapScaleY?r.emissiveMapScaleY:1,g.rotation=r.emissiveMapWAngle?r.emissiveMapWAngle:0,i[p]=g,a.emissiveMap=g)}else a.emissiveMap=i[r.emissiveMap]?i[r.emissiveMap]:null;if(void 0!==r.emissiveIntensity&&(a.emissiveIntensity=r.emissiveIntensity),r.specularMap)if(void 0!==r.specularMapOffsetY&&0!==r.specularMapOffsetY||void 0!==r.specularMapOffsetX&&0!==r.specularMapOfsfetX||void 0!==r.specularMapScaleX&&1!==r.specularMapScaleX||void 0!==r.specularMapScaleY&&1!==r.specularMapScaleY||void 0!==r.specularMapWAngle&&0!==r.specularMapWAngle){var g,u=r.specularMapOffsetX+"_"+r.specularMapOffsetY+"_"+r.specularMapScaleX+"_"+r.specularMapScaleY+"_"+r.specularMapWAngle+"_"+r.specularMap;if(i[u])a.specularMap=i[u];else(g=new d).wrapS=g.wrapT=1e3,g.image=i[r.specularMap].image?i[r.specularMap].image:null,g.needsUpdate=!0,g.image&&(g.offset.x=r.specularMapOffsetX?r.specularMapOffsetX:0,g.offset.y=r.specularMapOffsetY?r.specularMapOffsetY:0,g.repeat.x=r.specularMapScaleX?r.specularMapScaleX:1,g.repeat.y=r.specularMapScaleY?r.specularMapScaleY:1,g.rotation=r.specularMapWAngle?r.specularMapWAngle:0,i[u]=g,a.specularMap=g)}else a.specularMap=i[r.specularMap]?i[r.specularMap]:null;void 0!==r.shininess&&(a.shininess=r.shininess),void 0!==r.opacity&&(a.opacity=r.opacity,1>r.opacity&&(a.transparent=!0),r.opacity>0||(a.opacity=.1)),a.side=2,t[n]=a}},Qf.prototype._updateV1ToV2=function(A){var e=this.referencedMeshCache.components,t=this.referencedMeshCache.geometries,i=this.referencedMeshCache.materials;for(var o in e)if(e.hasOwnProperty(o)){var n=e[o],r=n.matId,a=t[n.geoId];if(n.materials)continue;if(n.materials=[],!a)continue;var s=i[r];if(!s)continue;var l=this._updateMaterialV1ToV2(r,s);if(l)for(var c in a.materialIndex=l.materialIndex,n.materials=l.materialId,l.materials)l.materials.hasOwnProperty(c)&&(this.referencedMeshCache.materials[c]=l.materials[c])}},Qf.prototype._updateMaterialV1ToV2=function(A,e){var t={},i=[],o={};if(!e)return null;for(var n=e.color,r=e.colorIndex,a=e.texture,s=e.textureIndex,l=0;n.length>l;l+=4){var c={};c.color=[n[l],n[l+1],n[l+2]],c.opacity=Math.floor(100*n[l+3])/100,c.transparent=1>n[l+3];var h=(255*c.color[0]<<16^255*c.color[1]<<8^255*c.color[2]<<0)+"_"+c.opacity;o[h]=c,i.push(h)}if(0!==a.length&&r.length===s.length)for(var d=-1,p=0;s.length>p;p+=1){if(d!==r[p])if(d=r[p],-1!==s[p])o[i[r[p]]].map=a[s[p]]}return t.materials=o,t.materialId=i,t.materialIndex=r,t},Qf.prototype.addMeshToInfoMap=function(A,e,t,i){var o=this.getNodeInfosByComponentId(A);Array.isArray(o)&&o.forEach((function(A){A.nodeId===e&&(A.mesh=t,A.index=i)}))};var Rf=function(){this.geometries={}};Rf.prototype.dispose=function(){this.disposeGeometries(),this.geometries={}},Rf.prototype.destory=function(){this.dispose()},Rf.prototype.disposeGeometries=function(){for(var A in this.geometries)this.disposeGeometry(A)},Rf.prototype.disposeGeometry=function(A){var e=this.geometries[A];if(e){if(Array.isArray(e))for(var t=0,i=e.length;i>t;t+=1)e[t].dispose();else e.dispose();delete this.geometries[A]}},Rf.prototype._hasGeometry=function(A){return!!this.geometries[A]},Rf.prototype._cacheGeometry=function(A,e){void 0===this.geometries[A]&&(this.geometries[A]=e)},Rf.prototype.getNodeIdxMapByUserId=function(A){},Rf.prototype.getGeometryById=function(A){return this.geometries[A]},Rf.prototype.getGeometryByNodeInfo=function(A,e){return this._hasGeometry(e.geometryId)?this.getGeometryById(e.geometryId):this._createGeometryByNodeInfo(A,e)},Rf.prototype._createGeometryByNodeInfo=function(A,e){return this._createGeometry(e.type,e.geometryId,A.getModelDescriptor().getReferencedMeshBufferById(e.geometryId))},Rf.prototype._createGeometry=function(A,e,t){if(this._hasGeometry(e))return this.getGeometryById(e);var i=this._createBufferGeometry(A,t);return i?(i.key=e,this._cacheGeometry(e,i),i):null},Rf.prototype._createBufferGeometry=function(A,e){var t=Qf.EnumNodeItemType,i=null;switch(1){case t.MESH:case t.MESH_REF:if(!e)return null;if((i=new he).setIndex(new YA(e.index,1)),i.setAttribute("position",new YA(e.position,3)),e.normal&&e.normal.length>0?i.setAttribute("normal",new YA(e.normal,3)):i.computeVertexNormals(),e.uv&&e.uv.length>0&&i.setAttribute("uv",new YA(e.uv,2)),e.uv2&&e.uv2.length>0&&i.setAttribute("uv2",new YA(e.uv2,2)),e.skinIndex&&e.skinIndex.length>0?i.setAttribute("skinIndex",new YA(e.skinIndex,4)):Bh.debug("skinIndex 长度为0"),e.skinWeight&&e.skinWeight.length>0?i.setAttribute("skinWeight",new YA(e.skinWeight,4)):Bh.debug("skinWeight 长度为0"),void 0!==e.materialIndex){for(var o=null,n=[],r=void 0,a=0;e.materialIndex.length>a;a+=1){var s=e.materialIndex[a];s!==r&&(r=s,null!=o&&(o.count=3*a-o.start,n.push(o)),o={start:3*a,materialIndex:r})}null!=o&&(o.count=3*e.materialIndex.length-o.start,n.push(o)),i.groups=n}break;case t.TUBE:case t.PIPE:i=Tu.UnitCylinderInstance;break;case t.BOX:i=Tu.UnitBoxInstance;break;case t.BOX_M:i=Tu.getUnitTextureBox();break;case t.PIPE_M:i=Tu.getUnitTextureCylinder();break;case t.LINE:if(!e)return null;(i=new he).setIndex(new YA(e.I,1)),i.setAttribute("position",new YA(e.P,3))}return i},Rf.prototype.createBufferByBufferDataWithUV2=function(A,e,t){var i=this.createBufferByBufferData(e,t);if(!i)return null;if(!A.lightmap)return i;var o=[],n=i.index,r=A.getLoader().getUV2ById(e.itemIdUV2,n.length);r&&(e.lightmapIdx=r.lightmapIdx,o=r.uv2);for(var a=i.position,s=i.normal,l=i.uv,c=[],h=[],d=[],p=0;n.length>p;p+=1){var g=n[p];c.push(a[3*g]),c.push(a[3*g+1]),c.push(a[3*g+2]),s&&(h.push(s[3*g]),h.push(s[3*g+1]),h.push(s[3*g+2])),l&&(d.push(l[2*g]),d.push(l[2*g+1])),n[p]=p}return a=null,s=null,l=null,i.uv2=o,i.position=c,i.normal=h,i.uv=d,i},Rf.prototype.createBufferByBufferData=function(A,e){this.cachedComponentGeoBuffer||(this.cachedComponentGeoBuffer={});var t=null,i=null,o=null,n=null,r=null,a=Qf.EnumNodeItemType,s=null;switch(1){case a.MESH:case a.MESH_REF:if(!e||!e.buffer)return Bh.debug("缺少几何buffer"),null;var c=e.buffer;if(i=c.index,A.geometryId===A.originalGeometryId?(t=c.position,o=c.normal,n=c.uv?c.uv:null,r=c.uv2?c.uv2:null):(t=Float32Array.from(c.position),o=Float32Array.from(c.normal),n=c.uv?Float32Array.from(c.uv):null,r=c.uv2?Float32Array.from(c.uv2):null),c=null,e.indexInfo){i=i.slice(e.indexInfo.indexStart,e.indexInfo.indexStart+e.indexInfo.indexCount),t=t.slice(e.indexInfo.positionStart,e.indexInfo.positionStart+e.indexInfo.positionCount),o=o.slice(e.indexInfo.positionStart,e.indexInfo.positionStart+e.indexInfo.positionCount),n=n?n.slice(e.indexInfo.uvStart,e.indexInfo.uvStart+e.indexInfo.uvCount):null,r=r?r.slice(e.indexInfo.uvStart,e.indexInfo.uvStart+e.indexInfo.uvCount):null;var h=e.indexInfo.positionStart/3;i.forEach((function(A,e,t){t[e]-=h}))}if(uh.isMirror(A.matrix.elements))for(var d=0,p=i.length;p>d;d+=3){var g=i[d+1];i[d+1]=i[d+2],i[d+2]=g}break;case a.BOX:case a.PIPE:s=Tu.UnitCylinderInstance,i=Uint32Array.from(s.index.array),t=Float32Array.from(s.attributes.position.array),o=Float32Array.from(s.attributes.normal.array),s=null;break;case a.TUBE:case a.BOX_M:case a.PIPE_M:s=A.type===a.BOX_M||A.type===a.BOX?Tu.getBoxMBuffer(A.uvArrayBuffer):Tu.getPipeMBuffer(A.uvArrayBuffer),i=Uint32Array.from(s.index),t=Float32Array.from(s.vertex),o=Float32Array.from(s.normal),s.uv&&(n=Float32Array.from(s.uv),delete s.uv),s=null;break;case a.LINE:if(!e||!e.buffer)return null;if(e.isDataView?(i=Uint32Array.from(e.buffer.I),t=Float32Array.from(e.buffer.P),o=null,n=null):(i=new Uint32Array(e.buffer.I),t=new Float32Array(e.buffer.P),o=null,n=null),e.indexInfo){i=i.slice(e.indexInfo.indexStart,e.indexInfo.indexStart+e.indexInfo.indexCount),t=t.slice(e.indexInfo.positionStart,e.indexInfo.positionStart+e.indexInfo.positionCount);h=e.indexInfo.positionStart/3;i.forEach((function(A,e,t){t[e]-=h}))}break;default:Bh.log("error data!")}if(!this.cachedComponentGeoBuffer[A.geometryId]||A.geometryId!==A.originalGeometryId){var u=A.matrix;if(Tu.applyMatrix4ToBuffer(u,t),o){var f=new l;f.getNormalMatrix(u),Tu.applyMatrix3ToBuffer(f,o),Tu.normalizeBuffer(o)}this.cachedComponentGeoBuffer[A.geometryId]=!0}return A.uv=!!n,{index:i,position:t,normal:o,uv:n,uv2:r}};var Tf=function(A){return Rf.call(this),this.manager=A,this._maxIndiceseNum=0,this._materialList=[],this.mapMaterialIdToMergedNode={},this.selectedMeshes=[],this.nonSelectedMeshes=[],this.selectedObjectIds=[],this.blinkMaterials=[],this.mapDestroyedBufferKey={},this};function kf(A,e,t,i){for(var o=A.getAttribute("position").array,n=e;t>n;n+=3)o[n]+=i.x,o[n+1]+=i.y,o[n+2]+=i.z;A.getAttribute("position").needsUpdate=!0}(Tf.prototype=Object.create(Rf.prototype)).destroy=function(){this.dispose(),this.clearData(),this.mapMaterialIdToMergedNode={},this.manager=null,this._materialList=[],this.selectedMeshes=[],this.nonSelectedMeshes=[],this.selectedObjectIds=[],this.blinkMaterials=[],this.mapDestroyedBufferKey={}},Tf.prototype.clearData=function(){this.bufferDestroyed=!1,this.clearAllNodeBuffer(),this._disposeMergedGeometries()},Tf.prototype.getMeshesByUserIds=function(A,e){var t=[];for(var i in this.mapMaterialIdToMergedNode)for(var o=this.mapMaterialIdToMergedNode[i],n=0,r=o.length;r>n;n+=1){var a=o[n],s=a.indices[e];if(s)for(var l=0,c=s.length;c>l;l+=1){var h={};h.mesh=a.mesh,h.indexInfo=s[l],h.matrix=A.getModelMatrix(),t.push(h)}}return t},Tf.prototype.rebuildIndices=function(A){this._materialList.length=0;var e=vc.EnableLightmap&&A.lightmap;this.clearSelectedObjectIds();var t=this.manager.getFilteredUserIds(),i=this.manager.getSelectedUserIds(),o=this.manager.getHoveredUserIds(),n=this.manager.getBlinkedUserIds(),r=(A.hasReplacedUserId(),A.manager.scene.fillClipPlane&&vc.ClippingCaps),a={};for(var s in this.mapMaterialIdToMergedNode){var l,c=this.getPropertyValueByMaterialKey(s).materialId,h=null,d=null,p=null,g=null,u=null,f=null,m=null,C=null,y=null;i&&i[c]&&(g=i[c]),o&&o[c]&&(u=o[c]),n&&n[c]&&(f=n[c]),t&&t[c]&&(h=t[c][zc.HIDDEN],d=t[c][zc.OVERRIDED],p=t[c][zc.TRANSPARENT]);var v=this.mapMaterialIdToMergedNode[s];for(y=0,l=v.length;l>y;y+=1){var I=v[y],E=I.indices,B=I.geometry;if(B.clearGroups(),B._visible=!0,e)for(var x=A.lightmapNum,S=0;x>S;S+=1){var w="lightmap|"+S;-1===this._materialList.indexOf(w)&&this._materialList.push(w)}if(g||h||d||u||p||vc.EnableLightmap||r||f){var M=[];for(var b in E)if(E.hasOwnProperty(b)){if(h&&h[b])continue;var U=E[b];if(U&&U.length>0){if(U.sort((function(A,e){return A.indexStart-e.indexStart})),p&&p[b]){for(m=0,C=U.length;C>m;m+=1)M.push({indexStart:U[m].indexStart,indexCount:U[m].indexCount,state:zc.TRANSPARENT});continue}if(A.manager.isSelectPriority()){if(g&&g[b]){if(this.cacheSelectedObjectIds(b,s,y),vc.PickingEffect){if(d&&d[b]){var F=d[b],K=this._materialList.indexOf(F);for(-1===K&&(this._materialList.push(F),K=this._materialList.length-1),m=0,C=U.length;C>m;m+=1)M.push({indexStart:U[m].indexStart,indexCount:U[m].indexCount,state:zc.OVERRIDED+K});continue}for(m=0,C=U.length;C>m;m+=1)M.push({indexStart:U[m].indexStart,indexCount:U[m].indexCount,state:zc.NONE});continue}for(m=0,C=U.length;C>m;m+=1)M.push({indexStart:U[m].indexStart,indexCount:U[m].indexCount,state:zc.SELECTED});continue}if(f&&f[b]){if(d&&d[b]){var Q="blink|"+d[b],R=this._materialList.indexOf(Q);for(-1===R&&(this._materialList.push(Q),R=this._materialList.length-1),m=0,C=U.length;C>m;m+=1)M.push({indexStart:U[m].indexStart,indexCount:U[m].indexCount,state:zc.OVERRIDED+R});continue}for(m=0,C=U.length;C>m;m+=1)M.push({indexStart:U[m].indexStart,indexCount:U[m].indexCount,state:zc.BLINK});continue}}else{if(f&&f[b]){if(d&&d[b]){var T="blink|"+d[b],k=this._materialList.indexOf(T);for(-1===k&&(this._materialList.push(T),k=this._materialList.length-1),m=0,C=U.length;C>m;m+=1)M.push({indexStart:U[m].indexStart,indexCount:U[m].indexCount,state:zc.OVERRIDED+k});continue}for(m=0,C=U.length;C>m;m+=1)M.push({indexStart:U[m].indexStart,indexCount:U[m].indexCount,state:zc.BLINK});continue}if(g&&g[b]){if(this.cacheSelectedObjectIds(b,s,y),vc.PickingEffect){if(d&&d[b]){var D=d[b],L=this._materialList.indexOf(D);for(-1===L&&(this._materialList.push(D),L=this._materialList.length-1),m=0,C=U.length;C>m;m+=1)M.push({indexStart:U[m].indexStart,indexCount:U[m].indexCount,state:zc.OVERRIDED+L});continue}for(m=0,C=U.length;C>m;m+=1)M.push({indexStart:U[m].indexStart,indexCount:U[m].indexCount,state:zc.NONE});continue}for(m=0,C=U.length;C>m;m+=1)M.push({indexStart:U[m].indexStart,indexCount:U[m].indexCount,state:zc.SELECTED});continue}}if(p&&p[b]){for(m=0,C=U.length;C>m;m+=1)M.push({indexStart:U[m].indexStart,indexCount:U[m].indexCount,state:zc.TRANSPARENT});continue}if(u&&u[b]){if(d&&d[b]){var N=this._materialList.indexOf(O="hover|"+d[b]);for(-1===N&&(this._materialList.push(O),N=this._materialList.length-1),m=0,C=U.length;C>m;m+=1)M.push({indexStart:U[m].indexStart,indexCount:U[m].indexCount,state:zc.OVERRIDED+N});continue}for(m=0,C=U.length;C>m;m+=1)M.push({indexStart:U[m].indexStart,indexCount:U[m].indexCount,state:zc.HOVER});continue}if(d&&d[b]){var O,V=this._materialList.indexOf(O=d[b]);for(-1===V&&(this._materialList.push(O),V=this._materialList.length-1),m=0,C=U.length;C>m;m+=1)M.push({indexStart:U[m].indexStart,indexCount:U[m].indexCount,state:zc.OVERRIDED+V});continue}if(r&&a[b]){for(m=0,C=U.length;C>m;m+=1)M.push({indexStart:U[m].indexStart,indexCount:U[m].indexCount,state:zc.CLIPPING});continue}if(vc.EnableLightmap)for(m=0,C=U.length;C>m;m+=1){var G=this._materialList.indexOf("lightmap|"+U[m].lightmapIdx);M.push({indexStart:U[m].indexStart,indexCount:U[m].indexCount,state:zc.OVERRIDED+G})}else for(m=0,C=U.length;C>m;m+=1)M.push({indexStart:U[m].indexStart,indexCount:U[m].indexCount,state:0})}}if(M.length>0)for(M.sort((function(A,e){return A.state===e.state?A.indexStart-e.indexStart:A.state-e.state})),m=0,C=M.length;C>m;m+=1){var P=M[m].indexStart,q=M[m].indexCount,j=M[m].state;if(0===m)B.addGroup(P,q,j);else j===M[m-1].state&&P===M[m-1].indexStart+M[m-1].indexCount?B.groups[B.groups.length-1].count+=q:B.addGroup(P,q,j)}else B._visible=!1}}}},Tf.prototype.update=function(A,e){var t=A.manager.filter,i=A.materialManager.materials,o=A.selectedMaterial,n=A.manager.sceneState,r=null,a=null,s=null,l=null,c=null,h=null,d=vc.EnableLightmap&&A.lightmap;if(A.isOnlyWireframe())for(var p in this.mapMaterialIdToMergedNode){var g=this.mapMaterialIdToMergedNode[p];for(s=0,l=g.length;l>s;s+=1){var u=g[s].mesh;u&&(u.visible=!1)}}else{vc.TranslucentDepthDisabled&&(o.depthWrite=!o.transparent);var f=t._getMaterialByName("scene");vc.TranslucentDepthDisabled&&(f.depthWrite=!1);var m=[];this.blinkMaterials.length=0;var C={};if(!d)for(r=0,a=this._materialList.length;a>r;r+=1){var y=null,v=this._materialList[r],I=v.split("|");"hover"===I[0]?(y=t._getMaterialByName(I[1]),y=n.getHoverMaterial(y)):"blink"===I[0]?(y=t._getMaterialByName(I[1]),y=n.getBlinkMaterial(y),C[v]||this.blinkMaterials.push(y)):y=t._getMaterialByName(v)?t._getMaterialByName(v):this.manager.model.materialManager.getMaterialById(v),vc.TranslucentDepthDisabled&&(y.depthWrite=!y.transparent),m[r]=y}for(var E in this.mapMaterialIdToMergedNode){var B=this.getPropertyValueByMaterialKey(E).materialId,x=A.manager.getOverrideMaterialByName(B)||i[B]||Kd.getDefaultStandardMaterial();if(x){if(d)for(r=0,a=this._materialList.length;a>r;r+=1){var S=null,w=this._materialList[r].split("|");if("lightmap"===w[0])if(vc.IBL)S=x.clone();else{var M=Kd.getMaterialParameters(x);M.lights=!1,(S=Kd.createStandardMaterial(M)).lightMap=A.materialManager.lightmaps[w[1]],S.lightMapIntensity=vc.LightmapIntensity}vc.TranslucentDepthDisabled&&S&&(S.depthWrite=!S.transparent),m[r]=S}vc.TranslucentDepthDisabled&&(x.depthWrite=!x.transparent);var b=n.getHoverMaterial(i[B]);vc.TranslucentDepthDisabled&&(b.depthWrite=!b.transparent);var U=this.mapMaterialIdToMergedNode[E];for(s=0,l=U.length;l>s;s+=1){var F=U[s],K=F.geometry;if(null!==K){var Q=F.mesh;if(Q)if(K._visible){if(K.groups.length>0){var R=C[B];R||(R=C[B]=n.getBlinkMaterial(x),this.blinkMaterials.push(R));var T=[x,o,R,b,f];for(r=0,a=m.length;a>r;r+=1){if(!m[r].createByBos){if(m[r].materialId!==B&&!m[r].mapNodeIdToOrigMatId)continue;if(!Object.keys(m[r].mapNodeIdToOrigMatId).find((function(A){return m[r].mapNodeIdToOrigMatId[A]===B})))continue}for(var k in K.attributes.uv||(m[r].map=null),U[s].indices)if(this.manager.mapMaterialIdToUserIdsForFilter[B]&&this.manager.mapMaterialIdToUserIdsForFilter[B][zc.OVERRIDED])for(var D=Object.keys(this.manager.mapMaterialIdToUserIdsForFilter[B][zc.OVERRIDED]),L=0,N=D.length;N>L;L+=1)k===D[L]&&(T[5+r]=m[r])}if(e){var O=[];for(c=0,h=T.length;h>c;c+=1)O.push(e);T=O}Q.material=T}else Q.material=e||x;Q.visible=!0}else Q.visible=!1;else Bh.error("没有mesh对象")}}x=null}}}},Tf.prototype.explode=function(A,e,t){for(var i in this.mapMaterialIdToMergedNode)for(var o=this.mapMaterialIdToMergedNode[i],n=0,r=o.length;r>n;n+=1){var a=o[n],s=a.geometry;if(null!==s){var l=a.indices;for(var c in l){var h=A.manager.getComponentInfoByUserId(c).boundingBox,d=uh.computeExplodeTranslation(e,h,t),p=l[c];if(p)for(var g=0,u=p.length;u>g;g+=1){var f=p[g].positionStart;kf(s,f,f+p[g].positionCount,d)}}}}},Tf.prototype.explosion=function(A,e){var t=A.getModelDescriptor().getStandardUserIds();e.componentKey=t,this.componentsExplosion(A,e)},Tf.prototype.closeExplosion=function(A){this.explosion(A,{})},Tf.prototype.componentsExplosion=function(A,e){var t=e.coefficientX||1,i=e.coefficientY||1,o=e.coefficientZ||1,n=e.offsetX||0,r=e.offsetY||0,a=e.offsetZ||0,s=null;if(e.center)s=(new y).fromArray(e.center);else if(1!==t||1!==i||1!==o||0!==n||0!==r||0!==a)return;var l=Array.isArray(e.componentKey)?e.componentKey:[e.componentKey],c=new y,h=new aA,d=new y(0,0,0),p=new y(0,0,0),g=new y,u=new M,m=A.getModelMatrix();m&&s&&(u.getInverse(m),s.applyMatrix4(u));var C=A.manager,v=!1,I=new y,E=new f,B=new y(1,1,1);uh.isEmptyObject(A.subModel)||(v=!0);for(var x=0,S=l.length;S>x;x+=1){var w=l[x];if(w){var b=A.getModelDescriptor().getStandardNodeInfosById(w);if(b)for(var U=0,F=b.length;F>U;U+=1){var K=b[U];if(K){var Q=this._getMaterialKeyByNodeInfo(K),R=this.mapMaterialIdToMergedNode[Q];if(R)for(var T=0,k=R.length;k>T;T+=1){var D=R[T],L=D.geometry,N=D.mesh;if(L&&N){var O=D.indices;if(O){var V=O[w];if(V){h.copy(K.boundingBox),h.getCenter(c),K.userData||(K.userData={}),d.set(0,0,0),p.set(0,0,0);var G=new y(1,1,1);if(v&&(N.matrix.decompose(I,E,B),G.divide(B)),1!==t||1!==i||1!==o||K.userData.explosionFactor){K.userData.explosionFactor||(K.userData.explosionFactor=new y(1,1,1),K.userData.explosionBaseDifference=c.sub(s).clone().multiply(G));var P=K.userData.explosionFactor,q=K.userData.explosionBaseDifference;d.set((t-P.x)*q.x,(i-P.y)*q.y,(o-P.z)*q.z),1===t&&1===i&&1===o?(K.userData.explosionFactor=void 0,K.userData.explosionBaseDifference=void 0):P.set(t,i,o)}if(0!==n||0!==r||0!==a||K.userData.explosionOffset){K.userData.explosionOffset||(K.userData.explosionOffset=new y(0,0,0));var j=K.userData.explosionOffset;p.set(n*G.x-j.x,r*G.y-j.y,a*G.z-j.z),0===n&&0===r&&0===a?K.userData.explosionOffset=void 0:j.set(n*G.x,r*G.y,a*G.z)}if(g.set(d.x+p.x,d.y+p.y,d.z+p.z),0!==g.x||0!==g.y||0!==g.z){K.userData.explosionFactor||K.userData.explosionOffset?C.explosionList[w]||(C.explosionList[w]=!0):delete C.explosionList[w];var H=g.clone().multiply(B);u.makeTranslation(H.x,H.y,H.z),K.userData.changeOffset=g.clone(),K.transformation||(K.transformation=!0,K.transformationOriginalMatrix=K.matrix.clone(),K.applyMatrix=new M,K.transformationOriginalBoundingBox=K.boundingBox.clone()),K.matrix.premultiply(u),K.applyMatrix.premultiply(u),K.boundingBox.copy(K.transformationOriginalBoundingBox).applyMatrix4(K.applyMatrix);for(var Y=0,W=V.length;W>Y;Y+=1){var J=V[Y].positionStart;kf(L,J,J+V[Y].positionCount,g)}L.attributes.position.needsUpdate=!0}}}}}}}}}},Tf.prototype.closeComponentsExplosion=function(A,e){e=Array.isArray(e)?e:[e];this.componentsExplosion(A,{componentKey:e})},Tf.prototype._getNodeGroup=function(A){return A._getNodeGroup(gp.GEOMETRY,{globalSpace:!0})},Tf.prototype._hasNodeGroup=function(A){return A._hasNodeGroup(gp.GEOMETRY)},Tf.prototype._resetMaxIndicesNumberPerBathSegment=function(A){vc.SegmentedBatchMergeEnable&&this._maxIndiceseNum>vc.maxIndicesNumberPerBathSegment&&(Bh.log("adjust maxIndicesNumberPerBathSegment value from "+vc.maxIndicesNumberPerBathSegment+" to "+this._maxIndiceseNum+"!"),vc.maxIndicesNumberPerBathSegment=A)},Tf.prototype.asyncCreateMeshNodes=function(A,e,t){var i=this;e&&e.length?this._asyncMergeData(A,e,(function(){Bh.timeEnd("MergeData"),i._makeMeshNodes(A),t&&t()})):t&&t()},Tf.prototype.createBatchedMeshNodes=function(A,e){var t=this.mapMaterialIdToMergedNode,i=A.manager,o=A.modelKey,n=A._encodedDatabagId,r=this._getNodeGroup(A),a=A.materialManager,s=e.materialKey,l=this.getPropertyValueByMaterialKey(s),c=a.getMaterialById(l.materialId);if(!c){var h=Object.keys(e.componentInfo)[0],d=e.componentInfo[h][0].nodeId,p=A.getModelDescriptor().getNodeInfosByNodeId(d);if(!p)return;p.uv="1"===l.uvProp,s=this._getMaterialKeyByNodeInfo(p,A),l=this.getPropertyValueByMaterialKey(s),c=a.getMaterialById(l.materialId)}var g=new he;if(g._visible=!0,g.setIndex(new YA(e.index,1)),e.position&&e.position.length>0){g.setAttribute("position",new YA(e.position,3)),e.normal&&e.normal.length===e.position.length&&g.setAttribute("normal",new YA(e.normal,3));var u=!1;e.uv&&e.uv.length>0>0&&(g.setAttribute("uv",new YA(e.uv,2)),u=!0),c.aoMap&&g.setAttribute("uv2",new YA(e.uv,2)),g.getAttribute("normal")||g.computeVertexNormals();var f=e.componentInfo;t[s]||(t[s]=[]);var m=null;if("lines"===l.type)(m=new cf(g)).modelKey=o;else{var C={modelKey:o};(m=new Kf(g,c)).spawn(C)}if(t[s].push({geometry:g,indices:f,mesh:m}),m._indicesGroup=f,!uh.isEmptyObject(A.subModel)){var y=Object.keys(f)[0];if(y){var v=uh.getModelKeyFromComponentKey(y);A.subModel[v]&&m.matrix.copy(A.subModel[v])}}r.add(m),i.addMeshToOctantMap(n,s,new Eu(s,m));var I=function(e){f.hasOwnProperty(e)&&f[e].forEach((function(t){A.addMeshToInfoMap(e,t.nodeId,m,t,u)}))};for(var E in f)I(E);r.updateMatrixWorld(!0),f=null,m=null}},Tf.prototype._asyncMergeData=function(A,e,t){Bh.time("MergeData");var i={},o=this,n=A.getLoader().maxLoadTaskCount,r=A.progressPercentage.load,a=A.progressPercentage.collect,s=e.length,l=Math.ceil(s/A.progressFrequency),c=A.getModelDescriptor().getStandardNodeInfos();requestAnimationFrame(function h(d){var p=d;return function(){var d=null,g=null;for(g=p+l>s?s:p+l,d=p;g>d;d+=1){if(o._collectMergedNodeInfosById(A,e[d],c,i),d===g-1)if(g!==s)A.dispatchEventEx({type:Rc.ON_LOAD_PROGRESS,progress:{total:n,loaded:(d/s*a+r)*n,modelKey:A.modelKey}}),requestAnimationFrame(h(d+1));else A.dispatchEventEx({type:Rc.ON_LOAD_PROGRESS,progress:{total:n,loaded:(a+r)*n,modelKey:A.modelKey}}),o._asyncMergeGeometry(i,A,t)}}}(0))},Tf.prototype._asyncMergeGeometry=function(A,e,t){var i=[];for(var o in A)i.push(o);if(0!==i.length){this._resetMaxIndicesNumberPerBathSegment(this._maxIndiceseNum);var n=this,r=e.getLoader().maxLoadTaskCount,a=e.progressPercentage.load,s=e.progressPercentage.collect,l=e.progressPercentage.merge,c=i.length,h=Math.ceil(c/e.progressFrequency),d=this.mapMaterialIdToMergedNode;requestAnimationFrame(function o(p){var g=p;return function(){var p,u=null;for(u=g+h>c?c:g+h,p=g;u>p;p+=1){if(n._collectMergedGeometriesById(i[p],A,d),p===u-1)if(u!==i.length)e.dispatchEventEx({type:Rc.ON_LOAD_PROGRESS,progress:{total:r,loaded:(p/c*l+a+s)*r,modelKey:e.modelKey},modelKey:e.modelKey}),requestAnimationFrame(o(p+1));else t()}}}(0))}else t()},Tf.prototype._collectMergedNodeInfosById=function(A,e,t,i){for(var o=t[e],n=0,r=o.length;r>n;n+=1){var a=o[n];this._createNodeBuffer(A,a);var s=this._getNodeBufferBy(a.nodeId);if(s){var l=s.index;l&&l.length>this._maxIndiceseNum&&(this._maxIndiceseNum=l.length);var c=this._getMaterialKeyByNodeInfo(a,A);void 0===i[c]&&(i[c]=[]),i[c].push(a)}}},Tf.prototype._collectMergedGeometriesById=function(A,e,t){var i=e[A];void 0===t[A]&&(t[A]=[]);for(var o=[],n=Math.max(i.length/800,500),r=Math.floor(i.length/n),a=i.length,s=0;r>=s;s+=1){for(var l=0,c=0,h=0,d=0,p=0,g=null,u=!1,f=0,m=0,C=a>n?n:a;C>m;m+=1){var y=s*n,v=i[y+m];if(!v)break;(g=this._getNodeBufferBy(v.nodeId))?(c+=g.index.length,l+=g.position.length,g.normal&&(h+=g.normal.length),g.uv&&g.uv.length>0?(u=!0,d+=g.uv.length):d+=g.position.length/3*2,g.uv2&&(p+=g.uv2.length),vc.SegmentedBatchMergeEnable&&c>vc.maxIndicesNumberPerBathSegment?(g.normal&&(h-=g.normal.length),g.uv&&(d-=g.uv.length),g.uv2&&(p-=g.uv2.length),o.push({start:f,end:m,steps:y,arrayPositionLength:l-=g.position.length,arrayIndexLength:c-=g.index.length,arrayNormalLength:h,arrayUVLength:d,arrayUV2Length:p}),l=0,c=0,h=0,d=0,p=0,f=m,m-=1):m===C-1&&o.push({start:f,end:C,steps:y,arrayPositionLength:l,arrayIndexLength:c,arrayNormalLength:h,arrayUVLength:d,arrayUV2Length:p}),g=null):m===C-1&&o.push({start:f,end:C,steps:y,arrayPositionLength:l,arrayIndexLength:c,arrayNormalLength:h,arrayUVLength:d,arrayUV2Length:p})}a-=n}for(var I=0,E=o.length;E>I;I+=1){for(var B=o[I],x=new he,S={},w=new Float32Array(B.arrayPositionLength),M=new Uint32Array(B.arrayIndexLength),b=new Float32Array(B.arrayNormalLength),U=new Float32Array(B.arrayUVLength),F=new Float32Array(B.arrayUV2Length),K=0,Q=0,R=0,T=0,k=0,D=[],L=B.start,N=B.end;N>L;L+=1){var O=i[B.steps+L];if(g=this._getNodeBufferBy(O.nodeId)){D.push(O.nodeId);var V=g.index,G=g.position,P=g.normal,q=g.uv,j=g.uv2;w.set(G,K);for(var H=new Uint32Array(V),Y=0,W=H.length;W>Y;Y+=1)H[Y]+=K/3;M.set(H,Q),void 0===S[O.userId]&&(S[O.userId]=[]),S[O.userId].push({userId:O.userId,nodeId:O.nodeId,positionStart:K,positionCount:G.length,indexStart:Q,indexCount:V.length,lightmapIdx:O.lightmapIdx,boundingBox:O.boundingBox}),Q+=V.length,K+=G.length,P&&(b.set(P,R),R+=P.length),u&&(q?(U.set(q,T),T+=q.length):(U.set(new Float32Array(G.length/3*2),T),T+=q.length)),j&&(F.set(j,k),k+=j.length),V=null,G=null,P=null,q=null,j=null,g=null}}this.clearNodeBufferByNodeIds(D),x._visible=!0,x.setIndex(new YA(M,1)),x.setAttribute("position",new YA(w,3)),R>0&&x.setAttribute("normal",new YA(b,3)),T>0&&x.setAttribute("uv",new YA(U,2)),k>0&&x.setAttribute("uv2",new YA(F,2)),t[A].push({geometry:x,indices:S})}},Tf.prototype.clearAllNodeBuffer=function(){this.cachedNodeBuffer&&(this.cachedNodeBuffer={})},Tf.prototype.clearNodeBufferByNodeIds=function(A){if(this.cachedNodeBuffer)for(var e=0,t=A.length;t>e;e+=1)this.cachedNodeBuffer[A[e]]=null},Tf.prototype._getNodeBufferByNodeInfo=function(A,e){return this.cachedNodeBuffer||this._createNodeBuffer(A,e),this.cachedNodeBuffer[e.nodeId]},Tf.prototype._getNodeBufferBy=function(A){return this.cachedNodeBuffer?this.cachedNodeBuffer[A]:null},Tf.prototype._createNodeBufferForMergedBuffer=function(A,e,t){this.cachedNodeBuffer||(this.cachedNodeBuffer={}),this.cachedNodeBuffer[e.nodeId]||(this.cachedNodeBuffer[e.nodeId]=this.createBufferByBufferDataWithUV2(A,e,t))},Tf.prototype._createNodeBuffer=function(A,e){this._createNodeBufferForMergedBuffer(A,e,{buffer:A.getModelDescriptor().getReferencedMeshBufferById(e.geometryId),isDataView:!0})},Tf.prototype._createGeometries=function(A,e){var t=this,i=A.getModelDescriptor().getNodeInfosOnGeometryId(),o=A.getModelDescriptor().getReferencedMeshBufferData(),n=this._getClassifiedMeshes(i,o);this._dealDataMergedMeshs(A,n,o,i,(function(){t._dealDataMergeableMeshs(A,n,o,i,e)}))},Tf.prototype._getClassifiedMeshes=function(A,e){var t=[],i=[];for(var o in e){var n=e[o].IndexInfos,r=void 0;if(n){if(1>n.length)continue;for(var a=0,s=n.length;s>a;a+=1){if((l=A[n[a].meshId])&&l.length){r=n[a].meshId;break}}}else{var l;(l=A[o])&&l.length&&(r=o)}if(void 0!==r)(l=A[r])&&l.length&&(l[0].type===$u.EnumNodeItemType.LINE||!l[0].instanceOrNot&&l[0].shared?t.push(o):i.push(o))}if(!vc.Instance)for(var o in A)i[o]||t[o]||t.push(o);return{mergeableIdxs:t,mergedIdxs:i}},Tf.prototype._collectMergeableMeshesByIdxId=function(A,e,t,i,o){t[e]&&t[e].IndexInfos?this._collectSharedMeshesByIdxId(A,e,t,i,o):this._collectLineOrIntanceMeshesByIdxId(A,e,t,i,o)},Tf.prototype._collectLineOrIntanceMeshesByIdxId=function(A,e,t,i,o){for(var n=i[e],r={buffer:A.getModelDescriptor().getReferencedMeshBufferById(e)},a=0,s=n.length;s>a;a+=1){var l=n[a];this._createNodeBufferByGeoBufferData(A,l,r);var c=this._getMaterialKeyByNodeInfo(l);o[c]||(o[c]=[]),o[c].push(l)}},Tf.prototype._collectSharedMeshesByIdxId=function(A,e,t,i,o){for(var n=t[e].IndexInfos,r=0,a=n.length;a>r;r+=1){var s=i[n[r].meshId];if(s)for(var l={buffer:A.getModelDescriptor().getReferencedMeshBufferById(e),indexInfo:n[r]},c=0,h=s.length;h>c;c+=1){var d=s[c];this._createNodeBufferByGeoBufferData(A,d,l);var p=this._getMaterialKeyByNodeInfo(d);o[p]||(o[p]=[]),o[p].push(d)}}},Tf.prototype._mergeMergeableMeshes=function(A,e,t,i){var o=Object.keys(e);if(0!==o.length){var n=this,r=A.getLoader().maxLoadTaskCount,a=o.length,s=A.progressPercentage.load,l=A.progressPercentage.collect,c=A.progressPercentage.merge,h=Math.ceil(a/A.progressFrequency);requestAnimationFrame(function d(p){var g=p;return function(){var p=null,u=null;for(u=g+h>a?a:g+h,p=g;u>p;p+=1)n._collectMergedGeometriesById(o[p],e,t),p===u-1&&(u!==a?(A.dispatchEvent({type:Rc.ON_LOAD_PROGRESS,progress:{total:r,loaded:(p/a*c+s+l)*r,modelKey:A.modelKey}}),requestAnimationFrame(d(p+1))):n._makeMeshNodes(A,i))}}(0))}else this._makeMeshNodes(A,i)},Tf.prototype._dealDataMergeableMeshs=function(A,e,t,i,o){if(0!==e.mergeableIdxs.length){var n=this,r=this.mapMaterialIdToMergedNode,a={},s=e.mergedIdxs.length,l=e.mergeableIdxs.length,c=s+l,h=e.mergeableIdxs,d=A.getLoader().maxLoadTaskCount,p=A.progressPercentage.load,g=A.progressPercentage.collect,u=Math.ceil(l/A.progressFrequency);requestAnimationFrame(function e(f){var m=f;return function(){var f=null,C=null;for(C=m+u>l?l:m+u,f=m;C>f;f+=1)n._collectMergeableMeshesByIdxId(A,h[f],t,i,a),f===C-1&&(C!==l?(A.dispatchEvent({type:Rc.ON_LOAD_PROGRESS,progress:{total:d,loaded:((f+s)/c*g+p)*d,modelKey:A.modelKey}}),requestAnimationFrame(e(f+1))):(A.dispatchEvent({type:Rc.ON_LOAD_PROGRESS,progress:{total:d,loaded:(g+p)*d,modelKey:A.modelKey}}),n._mergeMergeableMeshes(A,a,r,o)))}}(0))}else this._makeMeshNodes(A,o)},Tf.prototype._collectDataMergedMeshesByIdxId=function(A,e,t,i,o){var n=e[A],r=n.IndexInfos;if(r&&0!==r.length){var a=!1;n.UV&&(n.UV.byteLength||n.UV.length)&&(a=!0),o.lightmap&&(n=this.getAttributeForLightmapWithDataMerged(n,o,A));for(var s=void 0,l=0,c=r.length;c>l;l+=1){var h=t[r[l].meshId];if(h&&0!==h.length){o.lightmap&&(r[l].lightmapIdx=n.lightmapIdx,r[l].positionStart=3*r[l].indexStart,r[l].positionCount=3*r[l].indexCount),s=r[l].meshId;for(var d=0,p=h.length;p>d;d+=1)h[d].uv=a}}if(void 0!==s){var g=t[s][0],u={},f=this._getMaterialKeyByNodeInfo(g);void 0===i[f]&&(i[f]=[]);for(var m=0,C=r.length;C>m;m+=1)t[r[m].meshId]&&(void 0===u[(g=t[r[m].meshId][0]).userId]&&(u[g.userId]=[]),r[m].userId=g.userId,r[m].nodeId=g.nodeId,r[m].boundingBox=g.boundingBox,u[g.name].push(r[m]));var y=new he;y._visible=!0,y.setIndex(new YA(new Uint32Array(n.I),1)),y.setAttribute("position",new YA(new Float32Array(n.P),3)),n.N&&(n.N.byteLength||n.N.length)&&y.setAttribute("normal",new YA(new Float32Array(n.N),3)),a&&y.setAttribute("uv",new YA(new Float32Array(n.UV),2)),n.UV2&&(y.setAttribute("uv2",new YA(new Float32Array(n.UV2),2)),y.lightmapIdx=n.lightmapIdx),i[f].push({geometry:y,indices:u})}}},Tf.prototype.getAttributeForLightmapWithDataMerged=function(A,e,t){var i=[],o=new Uint32Array(A.I),n=e.getLoader().getUV2ById("bmpk_"+t,o.length);if(n){var r=n.lightmapIdx;i=n.uv2}for(var a=new Float32Array(A.P),s=new Float32Array(A.N),l=new Float32Array(A.UV),c=[],h=[],d=[],p=0;o.length>p;p+=1){var g=o[p];c.push(a[3*g]),c.push(a[3*g+1]),c.push(a[3*g+2]),s.length>0&&(h.push(s[3*g]),h.push(s[3*g+1]),h.push(s[3*g+2])),l.length>0&&(d.push(l[2*g]),d.push(l[2*g+1])),o[p]=p}return a=null,s=null,l=null,{I:o,UV2:i,P:c,N:h,UV:d,lightmapIdx:r}},Tf.prototype._dealDataMergedMeshs=function(A,e,t,i,o){if(0!==e.mergedIdxs.length){var n=this,r=this.mapMaterialIdToMergedNode,a=e.mergedIdxs,s=a.length,l=e.mergedIdxs.length+e.mergeableIdxs.length,c=A.getLoader().maxLoadTaskCount,h=A.progressPercentage.load,d=A.progressPercentage.collect,p=Math.ceil(s/A.progressFrequency);requestAnimationFrame(function e(g){var u=g;return function(){var g=null,f=null;for(f=u+p>s?s:u+p,g=u;f>g;g+=1)n._collectDataMergedMeshesByIdxId(a[g],t,i,r),g===f-1&&(f!==s?(A.dispatchEvent({type:Rc.ON_LOAD_PROGRESS,progress:{total:c,loaded:(g/l*d+h)*c,modelKey:A.modelKey}}),requestAnimationFrame(e(g+1))):(A.dispatchEvent({type:Rc.ON_LOAD_PROGRESS,progress:{total:c,loaded:(g/l*d+h)*c,modelKey:A.modelKey}}),o&&o()))}}(0))}else o&&o()},Tf.prototype._dealUnsharedMeshs=function(A,e,t){for(var i=this.mapMaterialIdToMergedNode,o=0,n=A.length;n>o;o+=1){var r=t[A[o]],a=r.IndexInfos,s=e[a[0].meshId][0],l={},c=this._getMaterialKeyByNodeInfo(s);void 0===i[c]&&(i[c]=[]);for(var h=0,d=a.length;d>h;h+=1)void 0===l[(s=e[a[h].meshId][0]).userId]&&(l[s.userId]=[]),a[h].userId=s.userId,a[h].nodeId=s.nodeId,l[s.userId].push(a[h]);var p=new he;p._visible=!0,p.setIndex(new YA(new Uint32Array(r.index),1)),p.setAttribute("position",new YA(new Float32Array(r.position),3)),r.normal&&p.setAttribute("normal",new YA(new Float32Array(r.normal),3)),r.uv&&p.setAttribute("uv",new YA(new Float32Array(r.uv),2)),i[c].push({geometry:p,indices:l})}},Tf.prototype._makeMeshNodes=function(A,e){Bh.time("makeMesh");var t=A.manager,i=A.modelKey,o=A._encodedDatabagId,n=this._getNodeGroup(A),r=this.mapMaterialIdToMergedNode;for(var a in r)for(var s=this.getPropertyValueByMaterialKey(a),l=r[a],c=0,h=l.length;h>c;c+=1){var d=l[c].geometry,p=l[c].indices;if(!l[c].mesh){var g=null;if("lines"===s.type)(g=new cf(d)).modelKey=i;else{var u={modelKey:i};(g=new Kf(d)).spawn(u)}if(!uh.isEmptyObject(A.subModel)){var f=Object.keys(p)[0];if(f){var m=uh.getModelKeyFromComponentKey(f);A.subModel[m]&&g.matrix.copy(A.subModel[m])}}g._indicesGroup=p,n.add(g),l[c].mesh=g,t.addMeshToOctantMap(o,a,new Eu(a,g));var C=function(e){p.hasOwnProperty(e)&&p[e].forEach((function(t){A.addMeshToInfoMap(e,t.nodeId,g,t)}))};for(var y in p)C(y);p=null,g=null}}n.updateMatrixWorld(!0),A.dispatchEvent({type:Rc.ON_LOAD_PROGRESS,progress:{total:A.getLoader().maxLoadTaskCount,loaded:A.getLoader().maxLoadTaskCount,modelKey:A.modelKey}}),e&&e(),Bh.timeEnd("makeMesh")},Tf.prototype.createMeshNodes=function(A,e){A.getModelDescriptor().getStandardNodeInfos()?this._createGeometries(A,e):e&&e()},Tf.prototype.applySelection=function(A){},Tf.prototype.clearSelection=function(A){},Tf.prototype.applyHover=function(A){},Tf.prototype.clearHover=function(A){},Tf.prototype.getMeshNode=function(){return this.mapMaterialIdToMergedNode},Tf.prototype._disposeMergedGeometries=function(){for(var A in this.mapMaterialIdToMergedNode){for(var e=this.mapMaterialIdToMergedNode[A],t=0,i=e.length;i>t;t+=1){e[t].geometry.dispose(),delete e[t].geometry,delete e[t].indices,delete e[t].mesh}delete this.mapMaterialIdToMergedNode[A]}},Tf.prototype._getMaterialKeyByNodeInfo=function(A,e){if(e){var t=e.manager.getOverrideMaterialByNodeInfo(A);A.materialId=t?t.name:A.originMId}return uh.getCombinedKeyString([A.materialId,A.uv?"1":"0",A.type===$u.EnumNodeItemType.LINE?"lines":"meshes"])},Tf.prototype.getPropertyValueByMaterialKey=function(A){var e=uh.splitCombinedKeyString(A);return{materialId:e[0],uvProp:e[1],type:e[2]}},Tf.prototype.clearSelectedObjectIds=function(){this.selectedObjectIds.length=0},Tf.prototype.cacheSelectedObjectIds=function(A,e,t){this.selectedObjectIds.push({uid:A,mKey:e,idx:t})},Tf.prototype.adjustVisibility=function(A,e){var t=this._getNodeGroup(A),i=t.visible;e&&!t.bVisible||(t.visible=e),t.bVisible=i},Tf.prototype.changeVisibilityOfSelectedObjects=function(A,e){if(e)for(var t=0,i=this.selectedMeshes.length;i>t;t+=1){var o=this.selectedMeshes[t].object,n=this.selectedMeshes[t].indices;if(o)for(var r=0,a=n.length;a>r;r+=1){var s=o.geometry.groups[n[r].idx];s.start=n[r].start,s.count=n[r].count}}else{this.selectedMeshes.length=0;for(var l={},c=0,h=this.selectedObjectIds.length;h>c;c+=1){var d=this.selectedObjectIds[c].mKey,p=this.selectedObjectIds[c].idx,g=uh.getCombinedKeyString([d,p]);if(!l[g]){l[g]=!0;var u=this.mapMaterialIdToMergedNode[d][p],f=u.mesh;if(f){for(var m=[],C=u.geometry.groups,y=0,v=C.length;v>y;y+=1){var I=C[y];I.materialIndex===zc.SELECTED&&(m.push({idx:y,start:I.start,count:I.count}),I.start=0,I.count=0)}m.length&&this.selectedMeshes.push({object:f,indices:m})}}}}},Tf.prototype.changeVisibilityOfNonSelectedObjects=function(A,e){if(e)for(var t=0,i=this.nonSelectedMeshes.length;i>t;t+=1){var o=this.nonSelectedMeshes[t].object,n=this.nonSelectedMeshes[t].indices;if(n)for(var r=0,a=n.length;a>r;r+=1){var s=o.geometry.groups[n[r].idx];s.start=n[r].start,s.count=n[r].count}else o.visible=this.nonSelectedMeshes[t].visibility}else{this.nonSelectedMeshes.length=0;for(var l={},c=0,h=this.selectedObjectIds.length;h>c;c+=1){var d=this.selectedObjectIds[c];l[d.mKey]||(l[d.mKey]={}),l[d.mKey][d.idx]=!0}for(var p in this.mapMaterialIdToMergedNode){var g=this.mapMaterialIdToMergedNode[p];if(l[p])for(var u=0,f=g.length;f>u;u+=1){var m=g[u].mesh;if(m){if(!l[p][u]){this.nonSelectedMeshes.push({object:m,indices:null,visibility:m.visible}),m.visible=!1;continue}for(var C=[],y=m.geometry.groups,v=0,I=y.length;I>v;v+=1){var E=y[v];E.materialIndex!==zc.SELECTED&&(C.push({idx:v,start:E.start,count:E.count}),E.start=0,E.count=0)}C.length>0&&this.nonSelectedMeshes.push({object:m,indices:C})}}else for(var B=0,x=g.length;x>B;B+=1){var S=g[B].mesh;S&&(this.nonSelectedMeshes.push({object:S,indices:null,visibility:S.visible}),S.visible=!1)}}}},Tf.prototype.restoreVisibilityOfObjects=function(){this.selectedMeshes.length=0,this.nonSelectedMeshes.length=0},Tf.prototype.getBlinkMaterials=function(){return this.blinkMaterials},Tf.prototype.disposeBufferAfterVbo=function(){if(!this.bufferDestroyed){var A=0;for(var e in this.mapMaterialIdToMergedNode){for(var t=this.mapMaterialIdToMergedNode[e],i=0,o=t.length;o>i;i+=1){var n=t[i],r=n.geometry;if(null!==r){A+=1;var a=e+"-"+i;this.mapDestroyedBufferKey[a]||n.mesh.visible&&(this.mapDestroyedBufferKey[a]=!0,Tu.disposeBufferFromGeometry(r,["normal","uv","uv2"]))}}Object.keys(this.mapDestroyedBufferKey).length===A&&(this.mapDestroyedBufferKey={},this.bufferDestroyed=!0)}}},Tf.prototype._traverseMeshNodeMap=function(A){for(var e in this.mapMaterialIdToMergedNode)for(var t=this.mapMaterialIdToMergedNode[e],i=0,o=t.length;o>i;i+=1)A&&A(e,t[i])},Tf.prototype.getGeometryBuffersByUserId=function(A,e){var t=[],i=A.getDatabagId();return this._traverseMeshNodeMap((function(A,o){var n=o.indices[e];if(n)for(var r=o.geometry,a=r.getIndex().array,s=r.getAttribute("position").array,l=0,c=n.length;c>l;l+=1){var h=n[l],d=h.indexStart,p=h.indexStart+h.indexCount,g=a.slice(d,p),u=s.slice(d=h.positionStart,p=h.positionStart+h.positionCount);d/=3,g.forEach((function(A,e,t){t[e]-=d})),t.push({databagId:i,nodeId:h.nodeId,position:u,index:g})}})),t},Tf.prototype.getPickingNodeGenerator=function(){return this.pickingNodeGenerator||(this.pickingNodeGenerator=new nf(this)),this.pickingNodeGenerator};var Df=function(A){of.call(this,A),this.nodeGroupName="PickingBatchedWireFrameGroup"};Object.assign(Df.prototype,of.prototype),eu(Df,[{key:"disposePickingNodeById",value:function(A){for(var e=this.pickingNodeMap[A],t=0,i=e.length;i>t;t+=1)e[t]._indicesGroup=null,e[t].material=null,e[t].geometry.dispose(),e[t]=null}},{key:"generatePickingMeshes",value:function(){var A=this.manager.getWireFrameLineSegments();A||(this.manager.generateWireframe(),A=this.manager.getWireFrameLineSegments());for(var e=0,t=A.length;t>e;e+=1){var i=A[e].geometry,o=new he;o.setAttribute("position",i.getAttribute("position")),o.setIndex(i.getIndex());var n=new jo(o,Kd.DefaultMaterial);(new M).copy(A[e].matrix).multiply(this.manager.model.getModelMatrix()).decompose(n.position,n.quaternion,n.scale),n._indicesGroup=A[e]._indicesGroup,n.frustumCulled=!1,n.renderOrder=1,this.addToPickingNodeMap(e,[n])}}},{key:"_rebuildGeometryGroup",value:function(A,e,t){var i,o=this.manager.manager,n=0,r=0,a=0,s=A._indicesGroup,l=Object.keys(s),c=[],h={};e.length>l.length?(c=l,h=t):(c=e,h=s);var d=[];for(a=0,i=c.length;i>a;a+=1){var p=c[a];if(o.isPickableNode(p)&&h[p]){var g=s[p];if(g&&g.length>0)for(n=0,r=g.length;r>n;n+=1)d.push({indexStart:g[n].indexStart,indexCount:g[n].indexCount})}}A.visible=!0;var u=A.geometry;if(u.clearGroups(),0!==d.length)for(d.sort((function(A,e){return A.indexStart-e.indexStart})),n=0,r=d.length;r>n;n+=1){var f=d[n].indexStart,m=d[n].indexCount;if(0===n)u.addGroup(f,m,0);else f===d[n-1].indexStart+d[n-1].indexCount?u.groups[u.groups.length-1].count+=m:u.addGroup(f,m,0)}else A.visible=!1}},{key:"updatePickingMeshesState",value:function(A,e,t){for(var i=this.pickingNodeMap,o=Object.keys(i),n=0,r=o.length;r>n;n+=1)for(var a=i[o[n]],s=0,l=a.length;l>s;s+=1)a[s].material=[A],a[s].visible=!1,this._rebuildGeometryGroup(a[s],e,t)}}]);var Lf=function(A){this.manager=A,this.model=A.model,this.generated=!1,this.wireframeLineSegment=null,this.wireframeGeometryMap=null,this.wireframeDataMap=null,this.userIdMapForNoWireFrame={}};function Nf(A,e,t,i){for(var o=A.getAttribute("position").array,n=e;t>n;n+=1)o[3*n]+=i.x,o[3*n+1]+=i.y,o[3*n+2]+=i.z;A.getAttribute("position").needsUpdate=!0}Lf.prototype.destroy=function(){this.clearData(),this.manager=null,this.userIdMapForNoWireFrame=null,this.pickingNodeGenerator&&(this.pickingNodeGenerator.destroy(),this.pickingNodeGenerator=null)},Lf.prototype.clearData=function(){this.generated=!1,this.bufferDestroyed=!1,this.wireframeLineSegment&&(this.wireframeLineSegment._indicesGroup=null,this.wireframeLineSegment.geometry.dispose(),this.wireframeLineSegment=null),this.pickingNodeGenerator&&this.pickingNodeGenerator.clearData(),this.wireframeGeometryMap=null,this.userIdMapForNoWireFrame={}},Lf.prototype._createWireframeGeometry=function(A,e){if(this.wireframeGeometryMap||(this.wireframeGeometryMap={}),this.wireframeDataMap||(this.wireframeDataMap={}),!this.wireframeGeometryMap[e.nodeId]){var t=this._getWireframeData(A,e),i=new he;i.setIndex(new $A(t.index,1)),i.setAttribute("position",new YA(t.buffer,3)),i._userId=e.userId,this.wireframeGeometryMap[e.nodeId]=i}},Lf.prototype._getWireframeData=function(A,e){this.wireframeDataMap||(this.wireframeDataMap={});var t={};if(!this.wireframeDataMap[e.nodeId]){for(var i=A.attributes.position.array.slice(e.positionStart,e.positionStart+e.positionCount),o=A.getIndex().array.slice(e.indexStart,e.indexStart+e.indexCount),n=0,r=o.length;r>n;n+=1)o[n]-=e.positionStart/3;var a=Up(i,o);return t=Tu.reducedGeometry(i,a),this.wireframeDataMap[e.nodeId]=t,t}return this.wireframeDataMap[e.nodeId]},Lf.prototype._createWireframeGeometries=function(A){A||(A=this.model);var e=A.manager.filter,t=A.getModelDescriptor().getStandardNodeInfos();function i(A){var i=t[A];return!(i&&e._hasRenderWithBoardlineFilter()&&!e._isRenderWithBoardline(i[0]))}var o=this.manager.getMeshNode();for(var n in Bh.time("createWireframeGeometry"),o){if("meshes"===this.manager.getPropertyValueByMaterialKey(n).type)for(var r=o[n],a=0,s=r.length;s>a;a+=1){var l,c=r[a];if(c.RenderTypeChange){for(var h=(l=c.geometry.clone()).attributes.position.array,d=[],p=new y,g=c.mesh.matrixWorld,u=0,f=h.length;f>u;u+=3)p.set(h[u],h[u+1],h[u+2]).applyMatrix4(g),d.push(p.x,p.y,p.z);l.setAttribute("position",new YA(new Float32Array(d),3))}else l=c.geometry;if(null!==l){var m=c.indices;for(var C in m){i(C)||(this.userIdMapForNoWireFrame[C]=!0);for(var v=m[C],I=0,E=v.length;E>I;I+=1)this._createWireframeGeometry(l,v[I])}}}}return Bh.timeEnd("createWireframeGeometry"),!0},Lf.prototype._makeWireframe=function(A){A||(A=this.model);var e={},t=A.getWireframeMaterial();for(var i in this.wireframeGeometryMap){var o=this.wireframeGeometryMap[i],n=o._userId,r=new jo(o,t);r.userId=n,r.nodeId=i,e[n]||(e[n]=[]),e[n].push(r),r=null}var a=[];for(var n in e)for(var s=e[n],l=0,c=s.length;c>l;l+=1)a.push(s[l]);if(a.length>0){var h={},d=Tu.mergeBufferGeometriesFromMeshs(a,h);if(d&&(this.wireframeLineSegment=new jo(d,A.getWireframeMaterial()),this.wireframeLineSegment.matrixAutoUpdate=!1,this.wireframeLineSegment._indicesGroup=h,!uh.isEmptyObject(A.subModel))){var p=Object.keys(h)[0];if(p){var g=uh.getModelKeyFromComponentKey(p);A.subModel[g]&&this.wireframeLineSegment.matrix.copy(A.subModel[g])}}}for(var n in a=null,e)delete e[n];e=null,this.wireframeGeometryMap=null},Lf.prototype.generateWireframe=function(A,e){A||(A=this.model),this.generated||(this._createWireframeGeometries(A),this._makeWireframe(A),this.generated=!0,e&&e())},Lf.prototype.update=function(A){if(this.manager.hasNodeInfo(A))if(A.isActivateWireframe()){if(this.generateWireframe(A),this.wireframeLineSegment){var e=this._getNodeGroup(A);e.clear(),e.add(this.wireframeLineSegment),e.updateMatrixWorld(!0)}}else A._hasNodeGroup(gp.WIREFRAME)&&A._removeNodeGroup(gp.WIREFRAME)},Lf.prototype.rebuildIndices=function(A){if(this.needDealWireframeLine(A)){this.wireframeLineSegment.visible=!0;var e=this.wireframeLineSegment._indicesGroup,t=this.wireframeLineSegment.geometry;t.clearGroups();var i=A.getWireframeMaterial();this.wireframeLineSegment.material=i;var o=this.manager.getFilteredUserIdsForWireFrame(),n=Boolean(o&&Object.keys(o).length);if(this._existHiddenUserId()||n){var r=[],a=0,s=0,l=[];for(var c in e)if(!this._isHiddenUserId(c)){var h=e[c];if(h&&h.length>0){if(o[c]){var d=o[c],p=l.indexOf(d);for(-1===p&&(l.push(d),p=l.length-1),a=0,s=h.length;s>a;a+=1)r.push({indexStart:h[a].indexStart,indexCount:h[a].indexCount,state:1+p});continue}for(a=0,s=h.length;s>a;a+=1)r.push({indexStart:h[a].indexStart,indexCount:h[a].indexCount,state:0})}}if(0!==r.length){for(r.sort((function(A,e){return A.indexStart-e.indexStart})),a=0,s=r.length;s>a;a+=1){var g=r[a].indexStart,u=r[a].indexCount,f=r[a].state;if(0===a)t.addGroup(g,u,f);else f===r[a-1].state&&g===r[a-1].indexStart+r[a-1].indexCount?t.groups[t.groups.length-1].count+=u:t.addGroup(g,u,f)}var m=A.getFilter(),C=[i];for(a=0,s=l.length;s>a;a+=1){var y=m._getMaterialByName(l[a]);C.push(y)}this.wireframeLineSegment.material=C}else this.wireframeLineSegment.visible=!1}}},Lf.prototype.explode=function(A,e,t){},Lf.prototype.explosion=function(A,e){if(this.wireframeLineSegment){var t=Object.keys(this.wireframeLineSegment._indicesGroup);e||(e={}),e.componentKey=t,this.componentsExplosion(A,e)}},Lf.prototype.closeExplosion=function(A){this.explosion(A)},Lf.prototype.componentsExplosion=function(A,e){if(this.wireframeLineSegment)for(var t=Array.isArray(e.componentKey)?e.componentKey:[e.componentKey],i=this.wireframeLineSegment._indicesGroup,o=this.wireframeLineSegment.geometry,n=0,r=t.length;r>n;n+=1){var a=t[n];if(a){var s=A.getModelDescriptor().getStandardNodeInfosById(a);if(s){var l=i[a];if(l){var c=s[0];if(!c||!c.userData||!c.userData.changeOffset)continue;for(var h=0,d=l.length;d>h;h+=1){var p=l[h].positionStart;Nf(o,p,p+l[h].positionCount,c.userData.changeOffset)}c.userData.changeOffset=void 0}}}}},Lf.prototype.closeComponentsExplosion=function(A,e){this.componentsExplosion(A,{componentKey:e})},Lf.prototype._getNodeGroup=function(A){return A._getNodeGroup(gp.WIREFRAME,{globalSpace:!0})},Lf.prototype.needDealWireframeLine=function(A){return!(!A.isActivateWireframe()||!this.wireframeLineSegment)},Lf.prototype.adjustVisibility=function(A,e){if(this.needDealWireframeLine(A)){var t=this._getNodeGroup(A),i=t.visible;e&&!t.bVisible||(t.visible=e),t.bVisible=i}},Lf.prototype.changeVisibilityOfSelectedObjects=function(A,e){},Lf.prototype.changeVisibilityOfNonSelectedObjects=function(A,e){this.adjustVisibility(A,e)},Lf.prototype.restoreVisibilityOfObjects=function(){},Lf.prototype.disposeBufferAfterVbo=function(){this.generated&&!this.bufferDestroyed&&this.wireframeLineSegment&&this.wireframeLineSegment.visible&&(this.bufferDestroyed=!0,Tu.disposeBufferFromGeometry(this.wireframeLineSegment.geometry,["position","normal","uv","uv2"]))},Lf.prototype._existHiddenUserId=function(){var A=this.manager.getHiddenUserIds();return!!(this.userIdMapForNoWireFrame&&Object.keys(this.userIdMapForNoWireFrame).length||A&&Object.keys(A).length)},Lf.prototype._isHiddenUserId=function(A){if(this.userIdMapForNoWireFrame[A])return!0;var e=this.manager.getHiddenUserIds();return!(!e||!e[A])},Lf.prototype.getWireFrameLineSegments=function(){return this.wireframeLineSegment?[this.wireframeLineSegment]:null},Lf.prototype.getPickingNodeGenerator=function(){return this.pickingNodeGenerator||(this.pickingNodeGenerator=new Df(this)),this.pickingNodeGenerator};var Of=function(A,e){this.model=e,this.meshManager=new Tf(this),A||(this.wireframeManager=new Lf(this))};Of.prototype.destroy=function(){this.meshManager.destroy(),this.meshManager=null,this.wireframeManager.destroy(),this.wireframeManager=null,this._clearFilteredState(),this._clearSelectedState(),this._clearHoveredState(),this._clearBlinkedState()},Of.prototype.updateNodes=function(A){var e;e=this._collectModelFiltered(A),this.meshManager.update(A,e),this.wireframeManager.update(A)},Of.prototype.generateWireframe=function(A,e){this.wireframeManager.generateWireframe(A,e)},Of.prototype.asyncGenerateWireframe=function(A,e){this.wireframeManager.asyncGenerateWireframe(A,e)},Of.prototype.rebuildIndices=function(A){this._rebuildIndices(A)},Of.prototype.clearData=function(){this.meshManager.clearData(),this.wireframeManager.clearData(),this._clearFilteredState(),this._clearSelectedState(),this._clearHoveredState(),this._clearBlinkedState()},Of.prototype.createMeshNodes=function(A,e){this.meshManager.createMeshNodes(A,e)},Of.prototype.createBatchedMeshNodes=function(A,e){this.meshManager.createBatchedMeshNodes(A,e)},Of.prototype.asyncCreateMeshNodes=function(A,e,t){this.meshManager.asyncCreateMeshNodes(A,e,t)},Of.prototype.hasNodeInfo=function(A){return Boolean(A.getModelDescriptor().getStandardNodeInfos())},Of.prototype.disposeGeometry=function(A){this.meshManager.disposeGeometry(A)},Of.prototype.getMeshNode=function(){return this.meshManager.getMeshNode()},Of.prototype.getPropertyValueByMaterialKey=function(A){return this.meshManager.getPropertyValueByMaterialKey(A)},Of.prototype.getFilteredUserIds=function(){return this.mapMaterialIdToUserIdsForFilter},Of.prototype.getSelectedUserIds=function(){return this.mapMaterialIdToUserIdsForSelection},Of.prototype.getHoveredUserIds=function(){return this.mapMaterialIdToUserIdsForHover},Of.prototype.getBlinkedUserIds=function(){return this.mapBlinkUserIds},Of.prototype.getHiddenUserIds=function(){return this.hiddenUserIdSetObject},Of.prototype.getTransparentUserIds=function(){return this.transparentUserIdSetObject},Of.prototype.applyFilter=function(A,e){if(this.hasNodeInfo(A)){var t=null;t=e||A.getModelDescriptor().getStandardUserIds();var i=A.getModelDescriptor().getStandardNodeInfos();this._collectFilteredUserIds(A,t,i),this._collectFilteredUserIdsForWireFrame(A,t,i),this._collectSelectedUserIds(A.manager.sceneState.selectionSet,i),this._collectHoveredUserIds(A.manager.sceneState.hoverId,i),this._rebuildIndices(A),this.updateNodes(A)}},Of.prototype.applySelection=function(A){if(this.hasNodeInfo(A)){var e=A.getModelDescriptor().getStandardNodeInfos();this._clearSelectedState(A),this._clearHoveredState(A),this._collectSelectedUserIds(A.manager.sceneState.selectionSet,e),this._collectHoveredUserIds(A.manager.sceneState.hoverId,e),this._rebuildIndices(A),this.updateNodes(A)}},Of.prototype.clearSelection=function(A){this._clearSelectedState(A),this.applyHover(A)},Of.prototype.applyHover=function(A){if(this.hasNodeInfo(A)){var e=A.getModelDescriptor().getStandardNodeInfos();this._clearHoveredState(A),this._collectHoveredUserIds(A.manager.sceneState.hoverId,e),this._rebuildIndices(A),this.updateNodes(A)}},Of.prototype.clearHover=function(A){this._clearHoveredState(A),this._rebuildIndices(A),this.updateNodes(A)},Of.prototype.applyBlink=function(A){if(this.hasNodeInfo(A)){var e=A.getModelDescriptor().getStandardNodeInfos();this._clearBlinkedState(A),this._clearHoveredState(A),this._collectBlinkedUserIds(A.manager.sceneState.getBlinkComponentsIdMap(),e),this._collectHoveredUserIds(A.manager.sceneState.hoverId,e),this._rebuildIndices(A),this.updateNodes(A)}},Of.prototype.clearBlink=function(A){this._clearBlinkedState(A),this.applyHover(A)},Of.prototype.applyReplacement=function(A){this._rebuildIndices(A),this.updateNodes(A)},Of.prototype._collectFilteredUserIds=function(A,e,t){var i=A.manager.filter,o=i._hasHiddenFileIdFilter(),n=i._hasVisibleFilter(),r=i._hasOverrideMaterialFilter(),a=i._hasTransparentFilter(),s=A.hasReplacedUserId(),l=A.hasHiddenSourceObjectUserId(),c=this.mapMaterialIdToUserIdsForFilter={};if(this.hiddenUserIdSetObject={},this.overrideUserIdSetObject={},this.transparentUserIdSetObject={},o||n||r||a||s||l)for(var h=0;e.length>h;h+=1){var d=e[h],p=t[d];if(p&&p.length)for(var g=0,u=p.length;u>g;g+=1){var f=p[g];if(o&&i._isHiddenFileId(f)||n&&!1===i._isVisible(f)||A.isReplacedUserId(d)||A.isHiddenSourceObjectUserId(d))void 0===c[f.materialId]&&(c[f.materialId]={}),void 0===c[f.materialId][zc.HIDDEN]&&(c[f.materialId][zc.HIDDEN]={}),c[f.materialId][zc.HIDDEN][d]=!0,this.hiddenUserIdSetObject[d]=!0;else if(a&&i._isTransparent(f))void 0===c[f.materialId]&&(c[f.materialId]={}),void 0===c[f.materialId][zc.TRANSPARENT]&&(c[f.materialId][zc.TRANSPARENT]={}),c[f.materialId][zc.TRANSPARENT][d]=!0,this.transparentUserIdSetObject[d]=!0;else if(r&&i._hasOverrideMaterial(f)){var m=i._getOverrideMaterial(f);if(Array.isArray(m)){var C=g,y=m.find((function(A){return!!A.mapNodeIdToOrigMatId&&Object.keys(A.mapNodeIdToOrigMatId).includes(f.nodeId)})),v=y?y.mapNodeIdToOrigMatId[f.nodeId]:m[C].materialId,I=y?y.materialId:"";""!==I&&(void 0===c[v]&&(c[v]={}),void 0===c[v][zc.OVERRIDED]&&(c[v][zc.OVERRIDED]={})),c[v]||(c[v]={},c[v][zc.OVERRIDED]={}),c[v][zc.OVERRIDED][d]=I,this.overrideUserIdSetObject[d]||(this.overrideUserIdSetObject[d]=[]),this.overrideUserIdSetObject[d][C]=I}else{var E=null!==m?m.name:"";""!==E&&(void 0===c[f.materialId]&&(c[f.materialId]={}),void 0===c[f.materialId][zc.OVERRIDED]&&(c[f.materialId][zc.OVERRIDED]={}),c[f.materialId][zc.OVERRIDED][d]=E,this.overrideUserIdSetObject[d]=E)}}}}},Of.prototype._collectFilteredUserIdsForWireFrame=function(A,e,t){var i=A.getFilter(),o=i._hasOverrideMaterialFilterForWireFrame();if(this.mapFilteredUserIdsForWireFrame={},o)for(var n=0;e.length>n;n+=1){var r=e[n];if(!this.hiddenUserIdSetObject[r]){var a=t[r];if(a&&a.length)for(var s=0,l=a.length;l>s;s+=1){var c=a[s];if(i._hasOverrideMaterialForWireFrame(c)){var h=i._getOverrideMaterialForWireFrame(c),d=null!==h?h.name:"";""!==d&&(this.mapFilteredUserIdsForWireFrame[r]=d)}}}}},Of.prototype._collectModelFiltered=function(A){var e=A.manager.filter,t=A.modelKey,i=e._hasModelOverrideMaterialFilter(),o=e._hasModelTransparentFilter(),n=A.manager.modelState.selectionSet;return A.manager.modelState.hoverId===t?A.manager.modelState.getHoverMaterial():n.hasOwnProperty(A.modelKey)?A.manager.modelState.selectionMaterial:o&&e._isModelTransparent(t)?e._getMaterialByName("scene"):i&&e._hasModelOverrideMaterial(t)?e._getModelOverrideMaterial(t):null},Of.prototype._clearFilteredState=function(){this.mapMaterialIdToUserIdsForFilter=null},Of.prototype._collectSelectedUserIds=function(A,e){var t=this.mapMaterialIdToUserIdsForSelection={};for(var i in A)if(this.model.modelKey===i)for(var o in A[i]){var n=e[o];if(n&&n.length)for(var r=0,a=n.length;a>r;r+=1)void 0===t[n[r].materialId]&&(t[n[r].materialId]={}),void 0===t[n[r].materialId][o]&&(t[n[r].materialId][o]=!0)}},Of.prototype._clearSelectedState=function(){this.mapMaterialIdToUserIdsForSelection&&(this.mapMaterialIdToUserIdsForSelection=null)},Of.prototype._collectHoveredUserIds=function(A,e){var t=this.mapMaterialIdToUserIdsForHover={};if(A&&e[A])for(var i=e[A],o=0,n=i.length;n>o;o+=1)void 0===t[i[o].materialId]&&(t[i[o].materialId]={}),void 0===t[i[o].materialId][A]&&(t[i[o].materialId][A]=!0)},Of.prototype._clearHoveredState=function(){this.mapMaterialIdToUserIdsForHover&&(this.mapMaterialIdToUserIdsForHover=null)},Of.prototype._collectBlinkedUserIds=function(A,e){var t=this.mapBlinkUserIds={};for(var i in A){var o=e[i];if(o&&o.length)for(var n=0,r=o.length;r>n;n+=1)void 0===t[o[n].materialId]&&(t[o[n].materialId]={}),void 0===t[o[n].materialId][i]&&(t[o[n].materialId][i]=!0)}},Of.prototype.calculateClippingIds=function(A,e){this.meshManager.calculateClippingIds(A,e)},Of.prototype._clearBlinkedState=function(){this.mapBlinkUserIds&&(this.mapBlinkUserIds=null)},Of.prototype._rebuildIndices=function(A){this.meshManager.rebuildIndices(A),this.wireframeManager.rebuildIndices(A)},Of.prototype.clearCachedData=function(){this.meshManager.clearAllNodeBuffer()},Of.prototype.getMeshesByUserIds=function(A,e){return this.meshManager.getMeshesByUserIds(A,e)},Of.prototype.adjustVisibility=function(A,e){this.meshManager.adjustVisibility(A,e),this.wireframeManager.adjustVisibility(A,e)},Of.prototype.changeVisibilityOfSelectedObjects=function(A,e){this.meshManager.changeVisibilityOfSelectedObjects(A,e),this.wireframeManager.changeVisibilityOfSelectedObjects(A,e)},Of.prototype.changeVisibilityOfNonSelectedObjects=function(A,e){this.meshManager.changeVisibilityOfNonSelectedObjects(A,e),this.wireframeManager.changeVisibilityOfNonSelectedObjects(A,e)},Of.prototype.restoreVisibilityOfObjects=function(){this.meshManager.restoreVisibilityOfObjects(),this.wireframeManager.restoreVisibilityOfObjects()},Of.prototype.disposeBufferAfterVbo=function(){this.meshManager.disposeBufferAfterVbo(),this.wireframeManager.disposeBufferAfterVbo()},Of.prototype.getGeometryBuffersByUserId=function(A,e){return this.meshManager.getGeometryBuffersByUserId(A,e)},Of.prototype.explosion=function(A,e){this.meshManager.explosion(A,e),this.wireframeManager.explosion(A,e)},Of.prototype.closeExplosion=function(A){this.meshManager.closeExplosion(A),this.wireframeManager.closeExplosion(A)},Of.prototype.componentsExplosion=function(A,e){this.meshManager.componentsExplosion(A,e),this.wireframeManager.componentsExplosion(A,e)},Of.prototype.closeComponentsExplosion=function(A,e){this.meshManager.closeComponentsExplosion(A,e),this.wireframeManager.closeComponentsExplosion(A,e)},Of.prototype.isPickableNode=function(A){var e=this.getHiddenUserIds();if(e&&e[A])return!1;var t=this.getTransparentUserIds();return!t||!t[A]},Of.prototype.isHiddenNode=function(A){var e=this.getHiddenUserIds();return!(!e||!e[A])},Of.prototype.getMeshManager=function(){return this.meshManager},Of.prototype.getWireFrameManager=function(){return this.wireframeManager},Of.prototype.getFilteredUserIdsForWireFrame=function(){return this.mapFilteredUserIdsForWireFrame};var Vf=function(A){of.call(this,A),this.nodeGroupName="PickingInstancedMeshGroup"};function Gf(A,e,t){for(var i=A.getAttribute("mcol3").array,o=0;e.length>o;o+=1){var n=e[o];i[3*n]+=t.x,i[3*n+1]+=t.y,i[3*n+2]+=t.z}A.getAttribute("mcol3").needsUpdate=!0}Object.assign(Vf.prototype,of.prototype),eu(Vf,[{key:"generatePickingMeshes",value:function(){var A=this,e=this.manager,t=e.cachedInstance,i=!vc.BatchMergeEnabled;e.traverseInstanceNodeMap(null,(function(e,o){for(var n=[],r=0,a=o.length;a>r;r+=1){var s=o[r].geometry,l=o[r],c=new Na;c.setAttribute("position",s.getAttribute("position")),c.setAttribute("mcol0",s.getAttribute("mcol0")),c.setAttribute("mcol1",s.getAttribute("mcol1")),c.setAttribute("mcol2",s.getAttribute("mcol2")),c.setAttribute("mcol3",s.getAttribute("mcol3")),c.setAttribute("vState",new Oa(new Float32Array(t.vState[e]),1,!1,1)),c.setIndex(s.getIndex());var h=new Ue(c,Kd.DefaultMaterial);l.matrixWorld.decompose(h.position,h.quaternion,h.scale),h.name=e,h.frustumCulled=!1,h.renderOrder=i?1:0,n.push(h)}A.addToPickingNodeMap(e,n)}))}},{key:"updatePickingMeshesState",value:function(A,e,t){if(this.pickingNodeMap)for(var i=this.manager.manager,o=this.pickingNodeMap,n=0,r=e.length;r>n;n+=1){var a=e[n];if(i.isPickableNode(a)){var s=i.getMeshManager().getNodeIdxMapByUserId(a);if(s)for(var l=Object.keys(s),c=0,h=l.length;h>c;c+=1){var d=l[c],p=o[d];if(p)for(var g=s[d],u=0,f=p.length;f>u;u+=1){var m=p[u];m.material=A,m.visible=!0;for(var C=m.geometry,y=C.getAttribute("vState").array,v=0,I=g.length;I>v;v+=1)y[g[v]]=Hc.NONE;C.getAttribute("vState").needsUpdate=!0}}}}}},{key:"resetPickingMeshesState",value:function(){if(this.pickingNodeMap)for(var A=this.pickingNodeMap,e=Object.keys(A),t=0,i=e.length;i>t;t+=1)for(var o=A[e[t]],n=0,r=o.length;r>n;n+=1)o[n].visible=!1,o[n].geometry.getAttribute("vState").array.fill(Hc.HIDDEN),o[n].geometry.getAttribute("vState").needsUpdate=!0}}]);var Pf=function(A){return Rf.call(this),this.manager=A,this.instanceGeometryMap={},this.bufferAttributeMap={},this.instanceNodeMap={},this.nodeIdxMapFromUserId={},this.matrixInfoMapFromUserId={},this.cachedInstance={vState:{},vState2:{},vColor:{},vMirror:{},mcol0:{},mcol1:{},mcol2:{},mcol3:{},muvCol0:{},muvCol1:{},muvCol2:{},userId:{},nodeId:{}},this.selectedMeshes=[],this.nonSelectedMeshes=[],this.selectedObjectIds=[],this};(Pf.prototype=Object.create(Rf.prototype)).destroy=function(){this.cachedInstance={},this.instanceNodeMap={},this.bufferAttributeMap={},this.nodeIdxMapFromUserId={},this.matrixInfoMapFromUserId={},this.disposeInstanceGeometries(),this.instanceGeometryMap={},this.manager=null,this.selectedMeshes=[],this.nonSelectedMeshes=[],this.selectedObjectIds=[]},Pf.prototype.clearData=function(){this.bufferDestroyed=!1,this.disposeGeometries(),this.disposeInstanceGeometries(),this.clearInstanceCache(),this.pickingNodeGenerator&&this.pickingNodeGenerator.clearData()},Pf.prototype.clearInstanceCache=function(){this.cachedInstance.vState={},this.cachedInstance.vState2={},this.cachedInstance.vColor={},this.cachedInstance.vMirror={},this.cachedInstance.mcol0={},this.cachedInstance.mcol1={},this.cachedInstance.mcol2={},this.cachedInstance.mcol3={},this.cachedInstance.muvCol0={},this.cachedInstance.muvCol1={},this.cachedInstance.muvCol2={},this.bufferAttributeMap={},this.nodeIdxMapFromUserId={},this.instanceNodeMap={},this.instanceGeometryMap={},this.matrixInfoMapFromUserId={},this.geometries={}},Pf.prototype.updateNodes=function(A){this._getNodeGroup(A).visible=!A.isOnlyWireframe()},Pf.prototype.createMeshNodes=function(A,e){this._createInstanceGeometries(A,e),this._makeInstanceNodes(A)},Pf.prototype.disposeInstanceGeometries=function(){this.traverseInstanceGeometryMap((function(A,e){for(var t=0,i=e.length;i>t;t+=1)e[t].dispose()}))},Pf.prototype._createInstanceGeometries=function(A,e){Bh.time("createInstanceGeometries");var t=this;A.getModelDescriptor().traverseInstancedNodeInfos(e,(function(e,i){for(var o=0,n=i.length;n>o;o+=1){var r=i[o],a=t.getGeometryByNodeInfo(A,r);if(a){var s=A.manager.getOverrideMaterialByNodeInfo(r);s&&(r.materialId=s.name);var l=t.getMeshIdByNodeInfo(r),c=t.cacheInstanceAttributeStateBy(A,l,a,r,s);t.cacheNodeIdxByUserId(r.userId,l,c),t.cacheMatrixInfoByUserId(r.userId,l,{matrix:r.matrix,boundingBox:r.boundingBox}),t.cacheInstanceGeometries(l,a)}}})),Bh.timeEnd("createInstanceGeometries")},Pf.prototype._createBatchedInstanceGeometries=function(A,e){var t=A.materialManager.getMaterialById(e.materialKey),i=A.getModelDescriptor();if(!t){var o=i.getNodeInfosByNodeId(e.nodeIdInfo[0]);if(!o)return;e.materialKey=o.materialId,t=A.materialManager.getMaterialById(e.materialKey),e.color=[];for(var n=0,r=e.nodeIdInfo.length;r>n;n+=1)e.color.push(t.color.r,t.color.g,t.color.b,t.opacity)}var a=!1;t.aoMap&&(a=!0),e.hasUV2=a;var s=uh.getCombinedKeyString([e.materialKey,e.geoId]),l=this.cachedInstance;if(e.nodeIdInfo.length<1)Bh.error("node 数量为 0 ");else if(l.vState[s])Bh.warn("实例化几何已存在:",s);else{l.vState[s]=new Float32Array(e.nodeIdInfo.length),l.vColor[s]=e.color,l.vMirror[s]=new Float32Array(e.nodeIdInfo.length),l.mcol0[s]=e.mcol0,l.mcol1[s]=e.mcol1,l.mcol2[s]=e.mcol2,l.mcol3[s]=e.mcol3,l.muvCol0[s]=[],l.muvCol1[s]=[],l.muvCol2[s]=[],l.userId[s]=[],l.nodeId[s]=[];for(var c=new M,h=[],d=0,p=e.nodeIdInfo.length;p>d;d+=1)h=[],l.userId[s].push(e.componentKeyInfo[d]),l.nodeId[s].push(e.nodeIdInfo[d]),h.push(e.mcol0[3*d]),h.push(e.mcol0[3*d+1]),h.push(e.mcol0[3*d+2]),h.push(0),h.push(e.mcol1[3*d]),h.push(e.mcol1[3*d+1]),h.push(e.mcol1[3*d+2]),h.push(0),h.push(e.mcol2[3*d]),h.push(e.mcol2[3*d+1]),h.push(e.mcol2[3*d+2]),h.push(0),h.push(e.mcol3[3*d]),h.push(e.mcol3[3*d+1]),h.push(e.mcol3[3*d+2]),h.push(1),c.fromArray(h),0>c.determinant()&&(l.vMirror[s][d]=-1);this.getBufferAttributesBy(s);this.cacheBatchedInstanceGeometries(s,e);for(var g in e.componentInfo)if(e.componentInfo.hasOwnProperty(g))for(var u=0,f=e.componentInfo[g].length;f>u;u+=1){var m=e.componentInfo[g][u];this.cacheNodeIdxByUserId(g,s,m);var C=i.getNodeInfosByNodeId(e.nodeIdInfo[m]);C&&this.cacheMatrixInfoByUserId(g,s,{matrix:C.matrix,boundingBox:C.boundingBox})}this._makeInstanceNodeById(A,s,this.instanceGeometryMap[s])}},Pf.prototype.getBufferAttributesBy=function(A){if(this.bufferAttributeMap[A])return this.bufferAttributeMap[A];var e=this.cachedInstance,t=new Oa(new Float32Array(e.mcol0[A]),3,!1,1),i=new Oa(new Float32Array(e.mcol1[A]),3,!1,1),o=new Oa(new Float32Array(e.mcol2[A]),3,!1,1),n=new Oa(new Float32Array(e.mcol3[A]),3,!1,1),r=[],a=[],s=[];if(e.muvCol0[A])for(var l=0,c=e.muvCol0[A].length;c>l;l+=1)r.push(new Oa(new Float32Array(e.muvCol0[A][l]),2,!1,1)),a.push(new Oa(new Float32Array(e.muvCol1[A][l]),2,!1,1)),s.push(new Oa(new Float32Array(e.muvCol2[A][l]),2,!1,1));return this.bufferAttributeMap[A]={attributeMcol0:t,attributeMcol1:i,attributeMcol2:o,attributeMcol3:n,attributeMuvCol0Array:r,attributeMuvCol1Array:a,attributeMuvCol2Array:s},this.bufferAttributeMap[A]},Pf.prototype._addInstanceNodeToScene=function(A,e,t){this._getNodeGroup(A).add(t),t.updateMatrixWorld(!0),A.manager.addMeshToOctantMap(A.modelKey,e,new Bu(e,t))},Pf.prototype.addAllInstanceNodeToScene=function(A){this.traverseInstanceNodeMap(null,(function(e,t){for(var i=0,o=t.length;o>i;i+=1)A.manager.addMeshToOctantMap(A._encodedDatabagId,e,new Bu(e,t[i]))}))},Pf.prototype._makeInstanceNodeById=function(A,e,t){var i=this.cachedInstance,o=A.materialManager,n=this.getMaterialIdByMeshId(e),r=this.getBufferAttributesBy(e),a=o.getInstanceMaterialById(n,A);this.instanceNodeMap[e]||(this.instanceNodeMap[e]=[]);for(var s=this.instanceNodeMap[e],l=0,c=t.length;c>l;l+=1){t[l].setAttribute("mcol0",r.attributeMcol0),t[l].setAttribute("mcol1",r.attributeMcol1),t[l].setAttribute("mcol2",r.attributeMcol2),t[l].setAttribute("mcol3",r.attributeMcol3),r.attributeMuvCol0Array.length>0&&(t[l].setAttribute("muvCol0",r.attributeMuvCol0Array[l]),t[l].setAttribute("muvCol1",r.attributeMuvCol1Array[l]),t[l].setAttribute("muvCol2",r.attributeMuvCol2Array[l])),t[l].setAttribute("aColor",new Oa(new Float32Array(i.vColor[e]),4,!1,1)),t[l].setAttribute("vState",new Oa(new Float32Array(i.vState[e]),1,!1,1)),t[l].setAttribute("vState2",new Oa(new Float32Array(i.vState[e]),1,!1,1)),t[l].setAttribute("vMirror",new Oa(new Float32Array(i.vMirror[e]),1,!1,1)),t[l].getAttribute("vState2").array.fill(Hc.HIDDEN);var h=t[l].index;t[l].addGroup(0,h.count,0),t[l].addGroup(0,h.count,1),a[1].visible=!1;var d=new Kf(t[l],a);if(d.visible=!0,d.modelKey=A.modelKey,d.frustumCulled=!1,s.push(d),!uh.isEmptyObject(A.subModel)){var p=i.userId[e][0];if(p){var g=uh.getModelKeyFromComponentKey(p);A.subModel[g]&&d.matrix.copy(A.subModel[g])}}this._addInstanceNodeToScene(A,e,d)}},Pf.prototype._makeInstanceNodes=function(A){Bh.time("makeInstanceNodes");var e=this;this.traverseInstanceGeometryMap((function(t,i){e._makeInstanceNodeById(A,t,i)})),Bh.timeEnd("makeInstanceNodes")},Pf.prototype.resetInstanceMaterial=function(A){var e=this,t=A.materialManager;this.traverseInstanceGeometryMap((function(i,o){var n=e.getMaterialIdByMeshId(i),r=t.getInstanceMaterialById(n,A);r[0].visible=!0,r[1].visible=!1,r.splice(2,1);for(var a=0,s=o.length;s>a;a+=1){if(o[a].getAttribute("vState").array.fill(Hc.NONE),o[0].removed)for(var l in o[0].removed)o[a].getAttribute("vState").array[l]=-1;o[a].getAttribute("vState").needsUpdate=!0,o[a].getAttribute("vState2").array.fill(Hc.HIDDEN),o[a].getAttribute("vState2").needsUpdate=!0,o[a].deleteAttribute("vState3"),o[a].groups.splice(2,1)}}))},Pf.prototype.clearInstanceStateByUserId=function(A){function e(A,e,t,i){for(var o=A.getAttribute("vState").array,n=A.getAttribute("vState2").array,r=0,a=e.length;a>r;r+=1){var s=e[r];o[s]=t,n[s]=i}A.getAttribute("vState").needsUpdate=!0,A.getAttribute("vState2").needsUpdate=!0}var t=this,i=Hc.NONE,o=Hc.HIDDEN;this.traverseNodeIdxMapByUserId(A,(function(A,n){var r=t.getInstanceGeometries(A);if(r)for(var a=0,s=r.length;s>a;a+=1)e(r[a],n,i,o)}))},Pf.prototype.updateInstanceStateByUserId=function(A,e,t,i){function o(A,e,t,i,o,n,r){var a=A.getAttribute("vState").array,s=A.getAttribute("vState2").array,l=A.getAttribute("aColor"),c=A.getAttribute("vState3"),h=null;null!==r&&(c?h=c.array:((h=(c=A.getAttribute("vState").clone()).array).fill(Hc.HIDDEN),A.setAttribute("vState3",c)));for(var d=l?l.array:null,p=0;e.length>p;p+=1){var g=e[p];a[g]=t,s[g]=i,h&&(h[g]=r),null!==d&&null!==o&&(d[4*g]=o[0],d[4*g+1]=o[1],d[4*g+2]=o[2],d[4*g+3]=o[3])}if(A.getAttribute("vState").needsUpdate=!0,A.getAttribute("vState2").needsUpdate=!0,c&&(c.needsUpdate=!0),l&&(l.needsUpdate=!0),n){var u=!1,f=!1;if(!n[0].visible)if(t!==Hc.HIDDEN)n[0].visible=!0;else{for(var m=0,C=a.length;C>m;m+=1)if(a[m]!==Hc.HIDDEN){u=!0;break}n[0].visible=u}if(!n[1].visible)if(i!==Hc.HIDDEN)n[1].visible=!0;else{for(var y=0,v=s.length;v>y;y+=1)if(s[y]!==Hc.HIDDEN){f=!0;break}n[1].visible=f}}}var n=A.materialManager,r=this;this.traverseNodeIdxMapByUserId(e,(function(a,s){var l=r.getInstanceGeometries(a);r.getInstanceNodesById(a);if(l){var c=null,h=null,d=null;if(t===Hc.HIDDEN){c=Hc.HIDDEN,h=Hc.HIDDEN;for(var p=0,g=l.length;g>p;p+=1)o(l[p],s,c,h,null,null)}else{var u=r.getMaterialIdByMeshId(a),f=r.getUsableMaterialColorParamsBy(A,u,t,i),m=f.rgbaColor,C=t;t===Hc.TRANSPARENT&&(C=Hc.OVERRIDED),t===Hc.SELECTED&&r.cacheSelectedObjectIds(e,a);var y=n.getInstanceMaterialById(u,A),v=y[0];if(v.transparent===f.transparent?(c=C,h=Hc.HIDDEN):(c=Hc.HIDDEN,h=C),!0===f.wireframe){var I=y[2]||Kd.createInstanceMaterial(Kd.getMaterialParameters(v));I.wireframe=!0,I.defines.INSTANCE_STATE_TERTIARY="",3>y.length&&y.push(I),c=Hc.HIDDEN,h=Hc.HIDDEN,d=C}C===Hc.BLINK&&v.setBlinkColor(A.manager.getBlinkColor());for(p=0,g=l.length;g>p;p+=1){if(!0===f.wireframe){var E=l[p].groups[0];l[p].groups[2]={start:E.start,count:E.count,materialIndex:2}}o(l[p],s,c,h,m,y,d)}}}}))},Pf.prototype.getUsableMaterialColorParamsBy=function(A,e,t,i){var o=A.selectedMaterial,n=A.manager.filter._getMaterialByName("scene"),r=A.materialManager,a=A.manager.getOverrideMaterialByName(e)||r.getMaterialById(e),s=null,l=null;switch(t){case Hc.HOVER:i?(s=A.manager.filter._getMaterialByName(i),l=A.manager.sceneState.getHoverColorByMaterial(s)):l=A.manager.sceneState.getHoverColorByMaterial(a);break;case Hc.SELECTED:l=Kd.getColorParamsByMaterial(o);break;case Hc.TRANSPARENT:l=Kd.getColorParamsByMaterial(n);break;case Hc.OVERRIDED:case Hc.BLINK:i?(s=A.manager.filter._getMaterialByName(i),l=Kd.getColorParamsByMaterial(s)):l=Kd.getColorParamsByMaterial(a)}return l},Pf.prototype.getInstanceNodesById=function(A){return this.instanceNodeMap[A]},Pf.prototype.traverseInstanceNodeMap=function(A,e){for(var t=this.instanceNodeMap,i=0,o=(A=A||Object.keys(this.instanceNodeMap)).length;o>i;i+=1){var n=A[i];e(n,t[n])}},Pf.prototype.getInstanceGeometries=function(A){return this.instanceGeometryMap[A]},Pf.prototype.cacheInstanceGeometries=function(A,e){if(!this.instanceGeometryMap[A]){var t=this.instanceGeometryMap[A]=[];e instanceof Array||(e=[e]);for(var i=0,o=e.length;o>i;i+=1)t[i]=new Na,t[i].setIndex(e[i].index),e[i].attributes.position&&t[i].setAttribute("position",e[i].attributes.position),e[i].attributes.normal&&t[i].setAttribute("normal",e[i].attributes.normal),e[i].attributes.uv&&t[i].setAttribute("uv",e[i].attributes.uv),e[i].attributes.uv2&&t[i].setAttribute("uv2",e[i].attributes.uv2)}},Pf.prototype.cacheBatchedInstanceGeometries=function(A,e){if(this.instanceGeometryMap[A])return this.instanceGeometryMap[A][0];var t=this.instanceGeometryMap[A]=[],i=new Na;return t[0]=i,i.setIndex(new YA(e.index,1)),e.position&&e.position.length>0&&i.setAttribute("position",new YA(e.position,3)),e.normal&&e.normal.length===e.position.length&&i.setAttribute("normal",new YA(e.normal,3)),e.uv&&e.uv.length>0&&i.setAttribute("uv",new YA(e.uv,2)),e.hasUV2&&i.getAttribute("uv")&&i.setAttribute("uv2",i.getAttribute("uv")),i.getAttribute("normal")||i.computeVertexNormals(),i},Pf.prototype.traverseInstanceGeometryMap=function(A){var e=this.instanceGeometryMap;for(var t in e)A(t,e[t])},Pf.prototype.disposeInstanceGeometries=function(){this.traverseInstanceGeometryMap((function(A,e){for(var t=0,i=e.length;i>t;t+=1)e[t].dispose()}))},Pf.prototype.cacheInstanceAttributeStateBy=function(A,e,t,i,o){var n=i.materialId;t instanceof Array||(t=[t]);var r=t.length,a=this.cachedInstance;if(!a.vState[e]){a.vState[e]=[],a.vColor[e]=[],a.vMirror[e]=[],a.mcol0[e]=[],a.mcol1[e]=[],a.mcol2[e]=[],a.mcol3[e]=[],a.muvCol0[e]=[],a.muvCol1[e]=[],a.muvCol2[e]=[],a.userId[e]=[],a.nodeId[e]=[];for(var s=0;r>s;s+=1)a.muvCol0[e][s]=[],a.muvCol1[e][s]=[],a.muvCol2[e][s]=[]}var l=o||A.materialManager.getMaterialById(n);a.userId[e].push(i.userId),a.nodeId[e].push(i.nodeId),a.vColor[e].push(l.color.r,l.color.g,l.color.b,l.opacity),a.vState[e].push(0);var c=i.matrix.elements;return a.mcol0[e].push(c[0],c[1],c[2]),a.mcol1[e].push(c[4],c[5],c[6]),a.mcol2[e].push(c[8],c[9],c[10]),a.mcol3[e].push(c[12],c[13],c[14]),0>i.matrix.determinant()?a.vMirror[e].push(-1):a.vMirror[e].push(0),a.vState[e].length-1},Pf.prototype.cacheNodeIdxByUserId=function(A,e,t){var i=this.nodeIdxMapFromUserId;i[A]||(i[A]={}),i[A][e]||(i[A][e]=[]),i[A][e].push(t)},Pf.prototype.getNodeIdxMapByUserId=function(A){return this.nodeIdxMapFromUserId[A]},Pf.prototype.traverseNodeIdxMapByUserId=function(A,e){var t=this.nodeIdxMapFromUserId[A];for(var i in t)e(i,t[i])},Pf.prototype.traverseNodeIdxMap=function(A,e){for(var t=Object.keys(this.nodeIdxMapFromUserId),i=0,o=t.length;o>i;i+=1){var n=t[i],r=this.nodeIdxMapFromUserId[n];if(!e||!e(n))for(var a in r)A(a,r[a])}},Pf.prototype.cacheMatrixInfoByUserId=function(A,e,t){var i=this.matrixInfoMapFromUserId;i[A]||(i[A]={}),i[A][e]||(i[A][e]=[]),i[A][e].push(t)},Pf.prototype.traverseMatrixInfoMapByUserId=function(A,e){var t=this.matrixInfoMapFromUserId[A];for(var i in t)e(i,t[i])},Pf.prototype.getMeshesByUserId=function(A,e){var t=this,i=[];return this.traverseMatrixInfoMapByUserId(e,(function(e,o){for(var n=t.getInstanceNodesById(e),r=0,a=o.length;a>r;r+=1)for(var s=0,l=n.length;l>s;s+=1){var c={};if(c.matrix=A.getModelMatrix().clone().multiply(o[r].matrix),c.mesh=n[s],1===l)c.boundingBox=o[r].boundingBox;else{var h=c.mesh.geometry.boundingBox;h?h=h.clone():(c.mesh.geometry.computeBoundingBox(),h=c.mesh.geometry.boundingBox.clone()),h.applyMatrix4(c.matrix),c.boundingBox=h}i.push(c)}})),i},Pf.prototype._getNodeGroup=function(A){return A._getNodeGroup(gp.INSTANCEGEOMETRY,{globalSpace:!0})},Pf.prototype._hasNodeGroup=function(A){return A._hasNodeGroup(gp.INSTANCEGEOMETRY)},Pf.prototype.clearSelectedObjectIds=function(){this.selectedObjectIds.length=0},Pf.prototype.cacheSelectedObjectIds=function(A,e){this.selectedObjectIds.push({uid:A,mgId:e})},Pf.prototype.adjustVisibility=function(A,e){var t=this._getNodeGroup(A),i=t.visible;e&&!t.bVisible||(t.visible=e),t.bVisible=i},Pf.prototype.changeVisibilityOfSelectedObjects=function(A,e){var t=null;if(e)for(var i=0,o=(t=this.selectedMeshes).length;o>i;i+=1){var n=t[i].object,r=t[i].indices;if(r){if(r.length){for(var a=n.geometry.getAttribute("vState").array,s=n.geometry.getAttribute("vState2").array,l=0,c=r.length;c>l;l+=1)r[l].state?a[r[l].idx]=r[l].state:r[l].state2&&(s[r[l].idx]=r[l].state2);n.geometry.getAttribute("vState").needsUpdate=!0,n.geometry.getAttribute("vState2").needsUpdate=!0}}else n.visible=t[i].visibility}else{this.selectedMeshes.length=0,t=this.selectedMeshes;for(var h={},d=0,p=this.selectedObjectIds.length;p>d;d+=1)h[this.selectedObjectIds[d].mgId]=!0;var g=Object.keys(h);this.traverseInstanceNodeMap(g,(function(A,e){for(var i=0,o=e.length;o>i;i+=1){for(var n=e[i],r=[],a=n.geometry.getAttribute("vState").array,s=n.geometry.getAttribute("vState2").array,l=0,c=a.length;c>l;l+=1)a[l]===Hc.SELECTED?(r.push({idx:l,state:a[l]}),a[l]=Hc.HIDDEN):s[l]===Hc.SELECTED&&(r.push({idx:l,state2:s[l]}),s[l]=Hc.HIDDEN);r.length?(n.geometry.getAttribute("vState").needsUpdate=!0,n.geometry.getAttribute("vState2").needsUpdate=!0,t.push({object:n,indices:r})):(t.push({object:n,indices:null,visibility:n.visible}),n.visible=!1)}}))}},Pf.prototype.changeVisibilityOfNonSelectedObjects=function(A,e){var t=null;if(e)for(var i=0,o=(t=this.nonSelectedMeshes).length;o>i;i+=1){var n=t[i].object,r=t[i].indices;if(r){if(r.length){for(var a=n.geometry.getAttribute("vState").array,s=n.geometry.getAttribute("vState2").array,l=0,c=r.length;c>l;l+=1)void 0!==r[l].state?a[r[l].idx]=r[l].state:void 0!==r[l].state2&&(s[r[l].idx]=r[l].state2);n.geometry.getAttribute("vState").needsUpdate=!0}}else n.visible=t[i].visibility}else{this.nonSelectedMeshes.length=0,t=this.nonSelectedMeshes;for(var h={},d=0,p=this.selectedObjectIds.length;p>d;d+=1)h[this.selectedObjectIds[d].mgId]=!0;this.traverseInstanceNodeMap(null,(function(A,e){if(h[A])for(var i=0,o=e.length;o>i;i+=1){for(var n=[],r=(p=e[i]).geometry.getAttribute("vState").array,a=p.geometry.getAttribute("vState2").array,s=0,l=r.length;l>s;s+=1)r[s]!==Hc.SELECTED&&r[s]!==Hc.HIDDEN?(n.push({idx:s,state:r[s]}),r[s]=Hc.HIDDEN):a[s]!==Hc.SELECTED&&a[s]!==Hc.HIDDEN&&(n.push({idx:s,state2:a[s]}),a[s]=Hc.HIDDEN);n.length&&(p.geometry.getAttribute("vState").needsUpdate=!0,p.geometry.getAttribute("vState2").needsUpdate=!0,t.push({object:p,indices:n}))}else for(var c=0,d=e.length;d>c;c+=1){var p;t.push({object:p=e[c],indices:null,visibility:p.visible}),p.visible=!1}}))}},Pf.prototype.restoreVisibilityOfObjects=function(){this.selectedMeshes.length=0,this.nonSelectedMeshes.length=0},Pf.prototype.getMeshIdByNodeInfo=function(A){return uh.getCombinedKeyString([A.materialId,A.geometryId])},Pf.prototype.getMaterialIdByMeshId=function(A){return uh.splitCombinedKeyString(A)[0]},Pf.prototype.getOriginalMaterialIdByMeshId=function(A){var e=uh.splitCombinedKeyString(A);return uh.splitCombinedKeyString(e[0],"_")[0]},Pf.prototype.disposeBufferAfterVbo=function(){if(!this.bufferDestroyed){this.bufferDestroyed=!0;var A=["muvCol0","muvCol1","muvCol2","mcol0","mcol1","mcol2","mcol3"];vc.EnableExplosion&&A.pop(),this.traverseInstanceGeometryMap((function(e,t){for(var i=0,o=t.length;o>i;i+=1)Tu.disposeBufferFromGeometry(t[i],A)}))}},Pf.prototype.getGeometryBuffersByUserId=function(A,e){var t=A.getModelDescriptor().getInstancedNodeInfosById(e);if(!t)return[];for(var i=[],o=A.getDatabagId(),n=0,r=t.length;r>n;n+=1){var a=t[n],s=this.getGeometryByNodeInfo(A,a),l=this._isLines(a);if(s instanceof Array)for(var c=0,h=s.length;h>c;c+=1)i.push({isLines:l,databagId:o,nodeId:a.nodeId,position:s[c].getAttribute("position").array,index:s[c].getIndex().array,matrix:a.matrix});else i.push({databagId:o,nodeId:a.nodeId,position:s.getAttribute("position").array,index:s.getIndex().array,matrix:a.matrix})}return i},Pf.prototype.explode=function(A,e,t){var i=this;for(var o in i.nodeIdxMapFromUserId)i.traverseNodeIdxMapByUserId(o,(function(n,r){var a=A.manager.getComponentInfoByUserId(o).boundingBox,s=uh.computeExplodeTranslation(e,a,t),l=i.getInstanceGeometries(n);l&&Gf(l[0],r,s)}))},Pf.prototype.explosion=function(A,e){var t=Object.keys(this.nodeIdxMapFromUserId);e.componentKey=t,this.componentsExplosion(A,e)},Pf.prototype.closeExplosion=function(A){this.explosion(A,{})},Pf.prototype.componentsExplosion=function(A,e){var t=e.coefficientX||1,i=e.coefficientY||1,o=e.coefficientZ||1,n=e.offsetX||0,r=e.offsetY||0,a=e.offsetZ||0,s=null;if(e.center)s=(new y).fromArray(e.center);else if(1!==t||1!==i||1!==o||0!==n||0!==r||0!==a)return;var l=Array.isArray(e.componentKey)?e.componentKey:[e.componentKey],c=new y,h=new aA,d=new y(0,0,0),p=new y(0,0,0),g=new y,u=new M,m=A.getModelMatrix();m&&s&&(u.getInverse(m),s.applyMatrix4(u));var C=A.manager,v=!1,I=new y,E=new f,B=new y(1,1,1);uh.isEmptyObject(A.subModel)||(v=!0);for(var x=0,S=l.length;S>x;x+=1){var w=l[x];if(w){var b=A.getModelDescriptor().getInstancedNodeInfosById(w);if(b)for(var U=this.nodeIdxMapFromUserId[w],F=0,K=b.length;K>F;F+=1){var Q=b[F];if(Q){var R=Q.materialId+"&"+Q.geometryId,T=new y(1,1,1);if(v)this.getInstanceNodesById(R)[0].matrix.decompose(I,E,B),T.divide(B);if(h.copy(Q.boundingBox),h.getCenter(c),Q.userData||(Q.userData={}),d.set(0,0,0),p.set(0,0,0),1!==t||1!==i||1!==o||Q.userData.explosionFactor){Q.userData.explosionFactor||(Q.userData.explosionFactor=new y(1,1,1),Q.userData.explosionBaseDifference=c.sub(s).clone().multiply(T));var k=Q.userData.explosionFactor,D=Q.userData.explosionBaseDifference;d.set((t-k.x)*D.x,(i-k.y)*D.y,(o-k.z)*D.z),1===t&&1===i&&1===o?(Q.userData.explosionFactor=void 0,Q.userData.explosionBaseDifference=void 0):k.set(t,i,o)}if(0!==n||0!==r||0!==a||Q.userData.explosionOffset){Q.userData.explosionOffset||(Q.userData.explosionOffset=new y(0,0,0));var L=Q.userData.explosionOffset;p.set(n*T.x-L.x,r*T.y-L.y,a*T.z-L.z),0===n&&0===r&&0===a?Q.userData.explosionOffset=void 0:L.set(n*T.x,r*T.y,a*T.z)}if(g.set(d.x+p.x,d.y+p.y,d.z+p.z),0!==g.x||0!==g.y||0!==g.z){Q.userData.explosionFactor||Q.userData.explosionOffset?C.explosionList[w]||(C.explosionList[w]=!0):delete C.explosionList[w];var N=g.clone().multiply(B),O=u;v&&(O=u.clone()).makeTranslation(g.x,g.y,g.z),u.makeTranslation(N.x,N.y,N.z),Q.transformation||(Q.transformation=!0,Q.transformationOriginalMatrix=Q.matrix.clone(),Q.applyMatrix=new M,Q.transformationOriginalBoundingBox=Q.boundingBox.clone()),Q.matrix.premultiply(O),Q.applyMatrix.premultiply(u),Q.boundingBox.copy(Q.transformationOriginalBoundingBox).applyMatrix4(Q.applyMatrix);var V=Q.matrix,G=U[R],P=this.getInstanceGeometries(R);if(P){var q=P[0],j=q.getAttribute("mcol0"),H=q.getAttribute("mcol1"),Y=q.getAttribute("mcol2"),W=q.getAttribute("mcol3"),J=G[0];j.array[3*J]=V.elements[0],j.array[3*J+1]=V.elements[1],j.array[3*J+2]=V.elements[2],j.needsUpdate=!0,H.array[3*J]=V.elements[4],H.array[3*J+1]=V.elements[5],H.array[3*J+2]=V.elements[6],H.needsUpdate=!0,Y.array[3*J]=V.elements[8],Y.array[3*J+1]=V.elements[9],Y.array[3*J+2]=V.elements[10],Y.needsUpdate=!0,W.array[3*J]=V.elements[12],W.array[3*J+1]=V.elements[13],W.array[3*J+2]=V.elements[14],W.needsUpdate=!0}}}}}}},Pf.prototype.closeComponentsExplosion=function(A,e){e=Array.isArray(e)?e:[e];this.componentsExplosion(A,{componentKey:e})},Pf.prototype._isLines=function(A){return A.type===$u.EnumNodeItemType.LINE},Pf.prototype.getPickingNodeGenerator=function(){return this.pickingNodeGenerator||(this.pickingNodeGenerator=new Vf(this)),this.pickingNodeGenerator},Pf.prototype.calculateClippingIds=function(A,e){var t=this;for(var i in t.nodeIdxMapFromUserId)this.traverseMatrixInfoMapByUserId(i,(function(i,o){for(var n=t.getInstanceNodesById(i),r=0,a=o.length;a>r;r+=1)for(var s=0,l=n.length;l>s;s+=1)n[s].intersectBoxWithClipPlane(A,o[r])&&n[s].getIntersectionPoints(A,o[r],e,!0)}))};var qf=function(A){of.call(this,A),this.nodeGroupName="PickingInstancedWireFrameGroup"};Object.assign(qf.prototype,of.prototype),eu(qf,[{key:"generatePickingMeshes",value:function(){this.manager.generateWireframe(),this.manager.updateNodes();var A=this,e=this.manager,t=e.manager.getCachedInstanceData(),i=!vc.BatchMergeEnabled;e._traverseWireframeGeometryMap((function(o,n){for(var r=[],a=e._getWireframeMeshById(o),s=0,l=n.length;l>s;s+=1){var c=n[s],h=new Na,d=a[s];h.setAttribute("position",c.getAttribute("position")),h.setAttribute("mcol0",c.getAttribute("mcol0")),h.setAttribute("mcol1",c.getAttribute("mcol1")),h.setAttribute("mcol2",c.getAttribute("mcol2")),h.setAttribute("mcol3",c.getAttribute("mcol3")),h.setAttribute("vState",new Oa(new Float32Array(t.vState[o]),1,!1,1)),h.setIndex(c.getIndex());var p=new jo(h,Kd.DefaultMaterial);d.matrixWorld.decompose(p.position,p.quaternion,p.scale),p.name=o,p.frustumCulled=!1,p.renderOrder=i?0:1,r.push(p)}A.addToPickingNodeMap(o,r)}))}},{key:"updatePickingMeshesState",value:function(A,e,t){if(this.pickingNodeMap)for(var i=this.manager.manager,o=this.pickingNodeMap,n=0,r=e.length;r>n;n+=1){var a=e[n];if(i.isPickableNode(a)){var s=i.getMeshManager().getNodeIdxMapByUserId(a);if(s)for(var l=Object.keys(s),c=0,h=l.length;h>c;c+=1){var d=l[c],p=o[d];if(p)for(var g=s[d],u=0,f=p.length;f>u;u+=1){var m=p[u];m.material=A,m.visible=!0;for(var C=m.geometry,y=C.getAttribute("vState").array,v=0,I=g.length;I>v;v+=1)y[g[v]]=Hc.NONE;C.getAttribute("vState").needsUpdate=!0}}}}}},{key:"resetPickingMeshesState",value:function(){if(this.pickingNodeMap)for(var A=this.pickingNodeMap,e=Object.keys(A),t=0,i=e.length;i>t;t+=1)for(var o=A[e[t]],n=0,r=o.length;r>n;n+=1)o[n].visible=!1,o[n].geometry.getAttribute("vState").array.fill(Hc.HIDDEN),o[n].geometry.getAttribute("vState").needsUpdate=!0}}]);var jf=function(A){this.manager=A,this.model=A.model,this.wireframeGeometryMap={},this.wireframeMeshMap={},this.noNeedWireframingIdMap={},this.generated=!1};jf.prototype.destroy=function(){this.disposeGeometries(),this.wireframeGeometryMap=null,this.noNeedWireframingIdMap=null,this.manager=null},jf.prototype.clearData=function(){this.generated=!1,this.bufferDestroyed=!1,this.wireframeMesh={},this.disposeGeometries(),this.wireframeGeometryMap={},this.noNeedWireframingIdMap={}},jf.prototype.disposeGeometries=function(){this._traverseWireframeGeometryMap((function(A,e){for(var t=0,i=e.length;i>t;t+=1)e[t].dispose()}))},jf.prototype.updateNodes=function(A){A||(A=this.model);var e=null;A.isActivateWireframe()?(this.generateWireframe(A),(e=this._getNodeGroup(A)).updateMatrixWorld(!0),e.visible=!0):this._hasNodeGroup(A)&&((e=this._getNodeGroup(A)).visible=!1)},jf.prototype.resetInstanceMaterial=function(){var A=Hc.NONE;this._traverseWireframeGeometryMap((function(e,t){for(var i=0,o=t.length;o>i;i+=1){for(var n=t[i].getAttribute("vState").array,r=0,a=n.length;a>r;r+=1)n[r]=A;t[i].getAttribute("vState").needsUpdate=!0}})),this._updateNoWireframingState()},jf.prototype.updateInstanceWireframeByUserId=function(A,e,t,i){if(t===Hc.HIDDEN||t===Hc.NONE||t===Hc.OVERRIDED){var o=null;if(i){var n=A.getFilter()._getMaterialByName(i),r=Kd.getColorParamsByMaterial(n);o=r.rgbaColor}var a=this;this.manager.traverseNodeIdxMapByUserId(e,(function(A,e){a._setInstanceWireframeState(A,e,t,o)}))}},jf.prototype._updateNoWireframingState=function(){var A=this,e=Hc.HIDDEN;this.manager.traverseNodeIdxMap((function(t,i){A._setInstanceWireframeState(t,i,e)}),(function(e){return A._isNeedWireframing(e)}))},jf.prototype._setInstanceWireframeState=function(A,e,t,i){var o=this._getWireframeGeometryById(A);if(o)for(var n=0,r=o.length;r>n;n+=1){var a=o[n].getAttribute("vState").array,s=null,l=null;i&&(l=(s=o[n].getAttribute("aColor"))?s.array:null);for(var c=0,h=e.length;h>c;c+=1){var d=e[c];a[d]=t,null!==l&&(l[4*d]=i[0],l[4*d+1]=i[1],l[4*d+2]=i[2],l[4*d+3]=i[3])}o[n].getAttribute("vState").needsUpdate=!0,s&&(s.needsUpdate=!0)}},jf.prototype._generateInstanceWireframe=function(A){A||(A=this.model),this._collectNoWireframingIds(A),this._createInstanceWireframeGeometries(A),this._makeInstanceWireframe(A),this._updateNoWireframingState()},jf.prototype.generateWireframe=function(A){A||(A=this.model),this.generated||(Bh.time("createInstancedWireframeGeometry"),this._generateInstanceWireframe(A),Bh.timeEnd("createInstancedWireframeGeometry"),this.generated=!0)},jf.prototype._collectNoWireframingIds=function(A){var e=this,t=A.manager.filter;A.getModelDescriptor().traverseInstancedNodeInfos(null,(function(A,i){i&&t._hasRenderWithBoardlineFilter()&&!t._isRenderWithBoardline(i[0])&&(e.noNeedWireframingIdMap[A]=!0)}))},jf.prototype._createInstanceWireframeGeometries=function(A){var e=this,t={};this.manager.traverseInstanceGeometryMap((function(A,i){for(var o=e._getWireframeBufferById(A,i,t),n=e.wireframeGeometryMap[A]=[],r=0,a=o.length;a>r;r+=1){var s=new Na;s.setIndex(o[r].index),s.setAttribute("position",o[r].position),n.push(s)}})),t=null},jf.prototype._makeInstanceWireframe=function(A){var e=this,t=this.manager,i=t.getCachedInstanceData(),o=this._getWireframeMaterial(A);this._traverseWireframeGeometryMap((function(n,r){for(var a=t.getBufferAttributesBy(n),s=e.wireframeMeshMap[n]=[],l=0,c=r.length;c>l;l+=1){r[l].setAttribute("vState",new Oa(new Float32Array(i.vState[n]),1,!1,1)),r[l].setAttribute("mcol0",a.attributeMcol0),r[l].setAttribute("mcol1",a.attributeMcol1),r[l].setAttribute("mcol2",a.attributeMcol2),r[l].setAttribute("mcol3",a.attributeMcol3);var h=new jo(r[l],o);if(h.matrixAutoUpdate=!1,h.frustumCulled=!1,!uh.isEmptyObject(A.subModel)){var d=i.userId[n][0];if(d){var p=uh.getModelKeyFromComponentKey(d);A.subModel[p]&&h.matrix.copy(A.subModel[p])}}s.push(h),e._addWireframeNodeToScene(A,h)}}))},jf.prototype._addWireframeNodeToScene=function(A,e){this._getNodeGroup(A).add(e),e.updateMatrixWorld(!0)},jf.prototype._isNeedWireframing=function(A){return!this.noNeedWireframingIdMap||!this.noNeedWireframingIdMap[A]},jf.prototype._getWireframeMaterial=function(A){return A.getInstanceWireframeMaterial()},jf.prototype._getWireframeBufferById=function(A,e,t){var i=this.getGeometryIdByMeshId(A);if(t[i])return t[i];t[i]=[];for(var o=0,n=e.length;n>o;o+=1){var r=e[o];t[i].push({index:Up(r.attributes.position.array,r.index.array),position:r.attributes.position})}return t[i]},jf.prototype._getWireframeGeometryById=function(A){return this.wireframeGeometryMap[A]},jf.prototype._getWireframeMeshById=function(A){return this.wireframeMeshMap[A]},jf.prototype._traverseWireframeGeometryMap=function(A){var e=this.wireframeGeometryMap;for(var t in e)A(t,e[t])},jf.prototype._getNodeGroup=function(A){return A._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY,{globalSpace:!0})},jf.prototype._hasNodeGroup=function(A){return A._hasNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY)},jf.prototype.getGeometryIdByMeshId=function(A){return uh.splitCombinedKeyString(A)[1]},jf.prototype.adjustVisibility=function(A,e){if(A.isActivateWireframe()){var t=this._getNodeGroup(A),i=t.visible;e&&!t.bVisible||(t.visible=e),t.bVisible=i}},jf.prototype.changeVisibilityOfSelectedObjects=function(A,e){},jf.prototype.changeVisibilityOfNonSelectedObjects=function(A,e){this.adjustVisibility(A,e)},jf.prototype.restoreVisibilityOfObjects=function(){},jf.prototype.disposeBufferAfterVbo=function(){if(this.generated&&!this.bufferDestroyed){this.bufferDestroyed=!0;var A=["mcol0","mcol1","mcol2","mcol3"];vc.EnableExplosion&&A.pop(),this._traverseWireframeGeometryMap((function(e,t){for(var i=0,o=t.length;o>i;i+=1)Tu.disposeBufferFromGeometry(t[i],A)}))}},jf.prototype.getPickingNodeGenerator=function(){return this.pickingNodeGenerator||(this.pickingNodeGenerator=new qf(this)),this.pickingNodeGenerator};var Hf=function(A){this.model=A,this.meshManager=new Pf(this),this.wireframeManager=new jf(this)};Hf.prototype.destroy=function(){this.meshManager.destroy(),this.meshManager=null,this.wireframeManager.destroy(),this.wireframeManager=null},Hf.prototype.clearData=function(){this.meshManager.clearData(),this.wireframeManager.clearData()},Hf.prototype.getGeometryByNodeInfo=function(A,e){return this.meshManager.getGeometryByNodeInfo(A,e)},Hf.prototype.getInstanceGeometries=function(){return this.meshManager.instanceGeometryMap},Hf.prototype.traverseInstanceGeometryMap=function(A){this.meshManager.traverseInstanceGeometryMap(A)},Hf.prototype.getCachedInstanceData=function(){return this.meshManager.cachedInstance},Hf.prototype.getBufferAttributesBy=function(A){return this.meshManager.getBufferAttributesBy(A)},Hf.prototype.traverseNodeIdxMapByUserId=function(A,e){this.meshManager.traverseNodeIdxMapByUserId(A,e)},Hf.prototype.traverseNodeIdxMap=function(A,e){this.meshManager.traverseNodeIdxMap(A,e)},Hf.prototype.getMeshesByUserId=function(A,e){return this.meshManager.getMeshesByUserId(A,e)},Hf.prototype._updateInstanceMaterialByUserId=function(A,e,t,i){this.meshManager.updateInstanceStateByUserId(A,e,t,i)},Hf.prototype._updateInstanceMaterialForWireFrameByUserId=function(A,e,t,i){this.wireframeManager.updateInstanceWireframeByUserId(A,e,t,i)},Hf.prototype._updateInstanceMaterial=function(A){Bh.time("update instance material");var e=zc;for(var t in this.clearSelectedObjectIds(),this.filteredIds){var i=this.filteredIds[t];if(i[e.HIDDEN])this._updateInstanceMaterialByUserId(A,t,Hc.HIDDEN),this._updateInstanceMaterialForWireFrameByUserId(A,t,Hc.HIDDEN);else if(i[e.TRANSPARENT])this._updateInstanceMaterialByUserId(A,t,Hc.TRANSPARENT);else{if(A.manager.isSelectPriority()){if(i[e.SELECTED]){this._updateInstanceMaterialByUserId(A,t,Hc.SELECTED);continue}if(i[e.BLINK]){i[e.OVERRIDED]?this._updateInstanceMaterialByUserId(A,t,Hc.BLINK,i[e.OVERRIDED]):this._updateInstanceMaterialByUserId(A,t,Hc.BLINK);continue}}else{if(i[e.BLINK]){i[e.OVERRIDED]?this._updateInstanceMaterialByUserId(A,t,Hc.BLINK,i[e.OVERRIDED]):this._updateInstanceMaterialByUserId(A,t,Hc.BLINK);continue}if(i[e.SELECTED]){this._updateInstanceMaterialByUserId(A,t,Hc.SELECTED);continue}}i[e.HOVER]?i[e.OVERRIDED]?this._updateInstanceMaterialByUserId(A,t,Hc.HOVER,i[e.OVERRIDED]):this._updateInstanceMaterialByUserId(A,t,Hc.HOVER):i[e.OVERRIDED]&&this._updateInstanceMaterialByUserId(A,t,Hc.OVERRIDED,i[e.OVERRIDED])}}this._updateInstanceMaterialForWireFrame(A),Bh.timeEnd("update instance material")},Hf.prototype._updateInstanceMaterialForWireFrame=function(A){var e=this.mapFilteredUserIdsForWireFrame;if(e)for(var t=Object.keys(e),i=0,o=t.length;o>i;i+=1){var n=t[i];this.filteredIds&&this.filteredIds[n]&&this.filteredIds[n][zc.HIDDEN]||this._updateInstanceMaterialForWireFrameByUserId(A,n,Hc.OVERRIDED,e[n])}},Hf.prototype._resetInstanceMaterial=function(A){this.meshManager.resetInstanceMaterial(A),this.wireframeManager.resetInstanceMaterial()},Hf.prototype._collectFilteredUserIds=function(A,e,t){var i=A.manager.filter,o=i._hasHiddenFileIdFilter(),n=i._hasVisibleFilter(),r=i._hasOverrideMaterialFilter(),a=i._hasTransparentFilter(),s=A.hasReplacedUserId(),l=A.hasHiddenUserId(),c=this.filteredIds={};if(this.transparentUserIdSetObject={},o||n||r||a||s||l)for(var h=zc,d=0;e.length>d;d+=1){var p=e[d],g=t[p];if(g&&g.length){var u=g[0];if(o&&i._isHiddenFileId(u)||n&&!1===i._isVisible(u)||A.isReplacedUserId(p)||A.isHiddenSourceObjectUserId(p))c[p]||(c[p]={}),c[p][h.HIDDEN]=!0;else if(a&&i._isTransparent(u))c[p]||(c[p]={}),c[p][h.TRANSPARENT]=!0,this.transparentUserIdSetObject[p]=!0;else if(r&&i._hasOverrideMaterial(u)){var f=i._getOverrideMaterial(u),m=null;if(Array.isArray(f)){var C=u.nodeId.replace(u.componentKey+"_",""),y=parseInt(C,10);""===(m=null!==f[y]?f[y].name:"")&&(m=u.materialId),c[p]||(c[p]={}),c[p][h.OVERRIDED]||(c[p][h.OVERRIDED]=[]),c[p][h.OVERRIDED][y]=m}else""!==(m=null!==f?f.name:"")&&(c[p]||(c[p]={}),c[p][h.OVERRIDED]=m)}}}},Hf.prototype._collectModelFiltered=function(A){var e=A.manager.filter,t=A.modelKey,i=e._hasModelOverrideMaterialFilter(),o=e._hasModelTransparentFilter(),n=A.manager.modelState.selectionSet;return A.manager.modelState.hoverId===t?A.manager.modelState.getHoverMaterial():n.hasOwnProperty(A.modelKey)?A.manager.modelState.selectionMaterial:o&&e._isModelTransparent(t)?e._getMaterialByName("scene"):i&&e._hasModelOverrideMaterial(t)?e._getModelOverrideMaterial(t):null},Hf.prototype._collectFilteredUserIdsForWireFrame=function(A,e,t){var i=A.getFilter(),o=i._hasOverrideMaterialFilterForWireFrame();if(this.mapFilteredUserIdsForWireFrame={},o)for(var n=zc,r=0;e.length>r;r+=1){var a=e[r];if(!(this.filteredIds&&this.filteredIds[a]&&this.filteredIds[a][n.HIDDEN])){var s=t[a];if(s&&s.length){var l=s[0];if(i._hasOverrideMaterialForWireFrame(l)){var c=i._getOverrideMaterialForWireFrame(l),h=null!==c?c.name:"";""!==h&&(this.mapFilteredUserIdsForWireFrame[a]=h)}}}}},Hf.prototype._collectSelectedUserIds=function(A,e){var t=this.filteredIds=this.filteredIds||{},i=zc,o={};for(var n in A)if(this.model.modelKey===n)for(var r in A[n])e[r]&&(t[r]||(t[r]={}),t[r][i.SELECTED]=!0,o[r]=!0);this.selectedUserIds=Object.keys(o)},Hf.prototype._clearSelectedState=function(A){if(this.filteredIds&&this.selectedUserIds&&this.selectedUserIds.length){for(var e=0,t=this.selectedUserIds.length;t>e;e+=1){var i=this.selectedUserIds[e];this.filteredIds[i]&&(this.meshManager.clearInstanceStateByUserId(i),delete this.filteredIds[i][zc.SELECTED])}this.selectedUserIds=null}},Hf.prototype._collectHoveredUserIds=function(A,e){var t=this.filteredIds=this.filteredIds||{};this.hoverdUserId=void 0,A&&e[A]&&(t[A]||(t[A]={}),t[A][zc.HOVER]=!0,this.hoverdUserId=A)},Hf.prototype._clearHoveredState=function(A){this.filteredIds&&this.hoverdUserId&&this.filteredIds[this.hoverdUserId]&&(this.meshManager.clearInstanceStateByUserId(this.hoverdUserId),delete this.filteredIds[this.hoverdUserId][zc.HOVER],this.hoverdUserId=void 0)},Hf.prototype._collectBlinkedUserIds=function(A,e){var t=this.filteredIds=this.filteredIds||{},i=zc,o={};for(var n in A)e[n]&&(t[n]||(t[n]={}),t[n][i.BLINK]=!0,o[n]=!0);this.blinkUserIds=Object.keys(o)},Hf.prototype._clearBlinkedState=function(A){if(this.filteredIds&&this.blinkUserIds&&this.blinkUserIds.length){for(var e=0,t=this.blinkUserIds.length;t>e;e+=1){var i=this.blinkUserIds[e];this.filteredIds[i]&&(this.meshManager.clearInstanceStateByUserId(i),delete this.filteredIds[i][zc.BLINK])}this.blinkUserIds=null}},Hf.prototype.applyFilter=function(A,e){if(this.hasNodeInfo(A)){this.updateNodes(A),this._resetInstanceMaterial(A);var t=null;t=e||A.getModelDescriptor().getInstancedUserIds();var i=A.getModelDescriptor().getInstancedNodeInfos();this._collectFilteredUserIds(A,t,i),this._collectFilteredUserIdsForWireFrame(A,t,i),this._collectSelectedUserIds(A.manager.sceneState.selectionSet,i),this._collectBlinkedUserIds(A.manager.sceneState.getBlinkComponentsIdMap(),i),this._collectHoveredUserIds(A.manager.sceneState.hoverId,i),this._updateInstanceMaterial(A),this.updateNodes(A)}},Hf.prototype.applySelection=function(A){if(this.hasNodeInfo(A)){var e=A.getModelDescriptor().getInstancedNodeInfos();this._clearSelectedState(A),this._clearHoveredState(A),this._collectSelectedUserIds(A.manager.sceneState.selectionSet,e),this._collectHoveredUserIds(A.manager.sceneState.hoverId,e),this._updateInstanceMaterial(A),this.updateNodes(A)}},Hf.prototype.clearSelection=function(A){this._clearSelectedState(A),this.applyHover(A)},Hf.prototype.applyHover=function(A){if(this.hasNodeInfo(A)){var e=A.getModelDescriptor().getInstancedNodeInfos();this._clearHoveredState(A),this._collectHoveredUserIds(A.manager.sceneState.hoverId,e),this._updateInstanceMaterial(A),this.updateNodes(A)}},Hf.prototype.clearHover=function(A){this._clearHoveredState(A),this._updateInstanceMaterial(A),this.updateNodes(A)},Hf.prototype.applyBlink=function(A){if(this.hasNodeInfo(A)){var e=A.getModelDescriptor().getInstancedNodeInfos();this._clearBlinkedState(A),this._clearHoveredState(A),this._collectBlinkedUserIds(A.manager.sceneState.getBlinkComponentsIdMap(),e),this._collectHoveredUserIds(A.manager.sceneState.hoverId,e),this._updateInstanceMaterial(A),this.updateNodes(A)}},Hf.prototype.clearBlink=function(A){this._clearBlinkedState(A),this.applyHover(A)},Hf.prototype.applyReplacement=function(A){this._updateInstanceMaterial(A),this.updateNodes(A)},Hf.prototype.hasNodeInfo=function(A){return Boolean(A.getModelDescriptor().getInstancedNodeInfos())},Hf.prototype.updateNodes=function(A){if(this.hasNodeInfo(A)){var e;if(e=this._collectModelFiltered(A))for(var t=A.getModelDescriptor().getInstancedUserIds(),i=0;t.length>i;i+=1)this._updateInstanceMaterialByUserId(A,t[i],Hc.OVERRIDED,e);this.meshManager.updateNodes(A),this.wireframeManager.updateNodes(A)}},Hf.prototype.generateWireframe=function(A,e){this.wireframeManager.generateWireframe(A,e)},Hf.prototype.createMeshNodes=function(A,e){this.meshManager.createMeshNodes(A,e)},Hf.prototype.createInstancedMeshNodes=function(A,e){this.meshManager._createBatchedInstanceGeometries(A,e)},Hf.prototype.clearCachedData=function(){this.meshManager.disposeGeometries()},Hf.prototype.getMeshesByUserIds=function(A,e){this.meshManager.getMeshesByUserId(A,e)},Hf.prototype.clearSelectedObjectIds=function(){this.meshManager.clearSelectedObjectIds()},Hf.prototype.adjustVisibility=function(A,e){this.meshManager.adjustVisibility(A,e),this.wireframeManager.adjustVisibility(A,e)},Hf.prototype.changeVisibilityOfSelectedObjects=function(A,e){this.meshManager.changeVisibilityOfSelectedObjects(A,e),this.wireframeManager.changeVisibilityOfSelectedObjects(A,e)},Hf.prototype.changeVisibilityOfNonSelectedObjects=function(A,e){this.meshManager.changeVisibilityOfNonSelectedObjects(A,e),this.wireframeManager.changeVisibilityOfNonSelectedObjects(A,e)},Hf.prototype.restoreVisibilityOfObjects=function(){this.meshManager.restoreVisibilityOfObjects(),this.wireframeManager.restoreVisibilityOfObjects()},Hf.prototype.disposeBufferAfterVbo=function(){this.meshManager.disposeBufferAfterVbo(),this.wireframeManager.disposeBufferAfterVbo()},Hf.prototype.addAllInstanceNodeToScene=function(A){this.meshManager.addAllInstanceNodeToScene(A)},Hf.prototype.getGeometryBuffersByUserId=function(A,e){return this.meshManager.getGeometryBuffersByUserId(A,e)},Hf.prototype.explode=function(A,e,t){this.meshManager.explode(A,e,t)},Hf.prototype.explosion=function(A,e){this.meshManager.explosion(A,e)},Hf.prototype.closeExplosion=function(A){this.meshManager.closeExplosion(A)},Hf.prototype.componentsExplosion=function(A,e){this.meshManager.componentsExplosion(A,e)},Hf.prototype.closeComponentsExplosion=function(A,e){this.meshManager.closeComponentsExplosion(A,e)},Hf.prototype.isPickableNode=function(A){if(!this.filteredIds||!this.filteredIds[A])return!0;var e=this.filteredIds[A];return!e[zc.HIDDEN]&&!e[zc.TRANSPARENT]},Hf.prototype.isHiddenNode=function(A){return!!(this.filteredIds&&this.filteredIds[A]&&this.filteredIds[A][zc.HIDDEN])},Hf.prototype.getMeshManager=function(){return this.meshManager},Hf.prototype.getWireFrameManager=function(){return this.wireframeManager},Hf.prototype.getTransparentUserIds=function(){return this.transparentUserIdSetObject};var Yf=function(A,e){tf.call(this,A),this.defaultManager=new Of(e,A),this.instancedManager=new Hf(A),this.loader=new ef(this)};function Wf(A,e){var t=A.__state.conversionName.toString(),i=Math.round(A.r),o=Math.round(A.g),n=Math.round(A.b),r=A.a,a=Math.round(A.h),s=A.s.toFixed(1),l=A.v.toFixed(1);if(e||"THREE_CHAR_HEX"===t||"SIX_CHAR_HEX"===t){for(var c=A.hex.toString(16);6>c.length;)c="0"+c;return"#"+c}return"CSS_RGB"===t?"rgb("+i+","+o+","+n+")":"CSS_RGBA"===t?"rgba("+i+","+o+","+n+","+r+")":"HEX"===t?"0x"+A.hex.toString(16):"RGB_ARRAY"===t?"["+i+","+o+","+n+"]":"RGBA_ARRAY"===t?"["+i+","+o+","+n+","+r+"]":"RGB_OBJ"===t?"{r:"+i+",g:"+o+",b:"+n+"}":"RGBA_OBJ"===t?"{r:"+i+",g:"+o+",b:"+n+",a:"+r+"}":"HSV_OBJ"===t?"{h:"+a+",s:"+s+",v:"+l+"}":"HSVA_OBJ"===t?"{h:"+a+",s:"+s+",v:"+l+",a:"+r+"}":"unknown format"}(Yf.prototype=Object.create(tf.prototype)).prepare=function(A,e){if(this.isLoaded()&&!this.isHidden()){this.prepareWireframe(this.model,e);this.model.getMaterialManager();this.model.getMaterialManager()._updateTextureMapping(),!this.model.lightmap||this.model.enableLightmap===vc.EnableLightmap&&this.model.lightmapIntensity===vc.LightmapIntensity||(this.model.enableLightmap=vc.EnableLightmap,this.model.lightmapIntensity=vc.LightmapIntensity,this.rebuildIndicesforLightmap(),this.updateNodes())}},Yf.prototype.settleData=function(A){this.addNodeInfoToOctantMap(),this.createMeshNodes(A)},Yf.prototype.addNodeInfoToOctantMap=function(){var A=this.model.manager,e=this.model.getEncodedDatabagId();this.loader.getDescriptor().traverseNodeInfosByComponent((function(t,i){A.addNodeInfoToOctantMap(e,t,i)}))},Yf.prototype.createMeshNodes=function(A){var e=this,t=this.model,i=this.loader.getDescriptor();this.instancedManager.createMeshNodes(t,i.getInstancedUserIds()),this.defaultManager.asyncCreateMeshNodes(t,i.getStandardUserIds(),(function(){t.getMaterialManager()._updateTextureMapping(),e.clearCachedData(t),e.loaded=!0,A&&A()}))},Yf.prototype.clearCachedData=function(A){this.loader.getDescriptor().destroyReader(),this.loader.getDescriptor().clearReferencedMeshCache(),this.defaultManager.clearCachedData(),this.instancedManager.clearCachedData()};var Jf=Array.prototype.forEach,zf=Array.prototype.slice,Zf={BREAK:{},extend:function(A){return this.each(zf.call(arguments,1),(function(e){(this.isObject(e)?Object.keys(e):[]).forEach(function(t){this.isUndefined(e[t])||(A[t]=e[t])}.bind(this))}),this),A},defaults:function(A){return this.each(zf.call(arguments,1),(function(e){(this.isObject(e)?Object.keys(e):[]).forEach(function(t){this.isUndefined(A[t])&&(A[t]=e[t])}.bind(this))}),this),A},compose:function(){var A=zf.call(arguments);return function(){for(var e=zf.call(arguments),t=A.length-1;t>=0;t--)e=[A[t].apply(this,e)];return e[0]}},each:function(A,e,t){if(A)if(Jf&&A.forEach&&A.forEach===Jf)A.forEach(e,t);else if(A.length===A.length+0){var i,o=void 0;for(o=0,i=A.length;i>o;o++)if(o in A&&e.call(t,A[o],o)===this.BREAK)return}else for(var n in A)if(e.call(t,A[n],n)===this.BREAK)return},defer:function(A){setTimeout(A,0)},debounce:function(A,e,t){var i=void 0;return function(){var o=this,n=arguments;function r(){i=null,t||A.apply(o,n)}var a=t||!i;clearTimeout(i),i=setTimeout(r,e),a&&A.apply(o,n)}},toArray:function(A){return A.toArray?A.toArray():zf.call(A)},isUndefined:function(A){return void 0===A},isNull:function(A){return null===A},isNaN:function(A){function e(){return A.apply(this,arguments)}return e.toString=function(){return A.toString()},e}((function(A){return isNaN(A)})),isArray:Array.isArray||function(A){return A.constructor===Array},isObject:function(A){return A===Object(A)},isNumber:function(A){return A===A+0},isString:function(A){return A===A+""},isBoolean:function(A){return!1===A||!0===A},isFunction:function(A){return"[object Function]"===Object.prototype.toString.call(A)}},Xf=[{litmus:Zf.isString,conversions:{THREE_CHAR_HEX:{read:function(A){var e=A.match(/^#([A-F0-9])([A-F0-9])([A-F0-9])$/i);return null!==e&&{space:"HEX",hex:parseInt("0x"+e[1].toString()+e[1].toString()+e[2].toString()+e[2].toString()+e[3].toString()+e[3].toString(),0)}},write:Wf},SIX_CHAR_HEX:{read:function(A){var e=A.match(/^#([A-F0-9]{6})$/i);return null!==e&&{space:"HEX",hex:parseInt("0x"+e[1].toString(),0)}},write:Wf},CSS_RGB:{read:function(A){var e=A.match(/^rgb\(\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*\)/);return null!==e&&{space:"RGB",r:parseFloat(e[1]),g:parseFloat(e[2]),b:parseFloat(e[3])}},write:Wf},CSS_RGBA:{read:function(A){var e=A.match(/^rgba\(\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*\)/);return null!==e&&{space:"RGB",r:parseFloat(e[1]),g:parseFloat(e[2]),b:parseFloat(e[3]),a:parseFloat(e[4])}},write:Wf}}},{litmus:Zf.isNumber,conversions:{HEX:{read:function(A){return{space:"HEX",hex:A,conversionName:"HEX"}},write:function(A){return A.hex}}}},{litmus:Zf.isArray,conversions:{RGB_ARRAY:{read:function(A){return 3===A.length&&{space:"RGB",r:A[0],g:A[1],b:A[2]}},write:function(A){return[A.r,A.g,A.b]}},RGBA_ARRAY:{read:function(A){return 4===A.length&&{space:"RGB",r:A[0],g:A[1],b:A[2],a:A[3]}},write:function(A){return[A.r,A.g,A.b,A.a]}}}},{litmus:Zf.isObject,conversions:{RGBA_OBJ:{read:function(A){return!!(Zf.isNumber(A.r)&&Zf.isNumber(A.g)&&Zf.isNumber(A.b)&&Zf.isNumber(A.a))&&{space:"RGB",r:A.r,g:A.g,b:A.b,a:A.a}},write:function(A){return{r:A.r,g:A.g,b:A.b,a:A.a}}},RGB_OBJ:{read:function(A){return!!(Zf.isNumber(A.r)&&Zf.isNumber(A.g)&&Zf.isNumber(A.b))&&{space:"RGB",r:A.r,g:A.g,b:A.b}},write:function(A){return{r:A.r,g:A.g,b:A.b}}},HSVA_OBJ:{read:function(A){return!!(Zf.isNumber(A.h)&&Zf.isNumber(A.s)&&Zf.isNumber(A.v)&&Zf.isNumber(A.a))&&{space:"HSV",h:A.h,s:A.s,v:A.v,a:A.a}},write:function(A){return{h:A.h,s:A.s,v:A.v,a:A.a}}},HSV_OBJ:{read:function(A){return!!(Zf.isNumber(A.h)&&Zf.isNumber(A.s)&&Zf.isNumber(A.v))&&{space:"HSV",h:A.h,s:A.s,v:A.v}},write:function(A){return{h:A.h,s:A.s,v:A.v}}}}}],_f=void 0,$f=void 0,Am=function(){$f=!1;var A=arguments.length>1?Zf.toArray(arguments):arguments[0];return Zf.each(Xf,(function(e){if(e.litmus(A))return Zf.each(e.conversions,(function(e,t){if(_f=e.read(A),!1===$f&&!1!==_f)return $f=_f,_f.conversionName=t,_f.conversion=e,Zf.BREAK})),Zf.BREAK})),$f},em=void 0,tm={hsv_to_rgb:function(A,e,t){var i=Math.floor(A/60)%6,o=A/60-Math.floor(A/60),n=t*(1-e),r=t*(1-o*e),a=t*(1-(1-o)*e),s=[[t,a,n],[r,t,n],[n,t,a],[n,r,t],[a,n,t],[t,n,r]][i];return{r:255*s[0],g:255*s[1],b:255*s[2]}},rgb_to_hsv:function(A,e,t){var i=Math.min(A,e,t),o=Math.max(A,e,t),n=o-i,r=void 0;return 0===o?{h:NaN,s:0,v:0}:(r=A===o?(e-t)/n:e===o?2+(t-A)/n:4+(A-e)/n,0>(r/=6)&&(r+=1),{h:360*r,s:n/o,v:o/255})},rgb_to_hex:function(A,e,t){var i=this.hex_with_component(0,2,A);return i=this.hex_with_component(i,1,e),i=this.hex_with_component(i,0,t)},component_from_hex:function(A,e){return A>>8*e&255},hex_with_component:function(A,e,t){return t<<(em=8*e)|A&~(255<t;t++){var i=e[t];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(A,i.key,i)}}return function(e,t,i){return t&&A(e.prototype,t),i&&A(e,i),e}}(),rm=function A(e,t,i){null===e&&(e=Function.prototype);var o=Object.getOwnPropertyDescriptor(e,t);if(void 0===o){var n=Object.getPrototypeOf(e);return null===n?void 0:A(n,t,i)}if("value"in o)return o.value;var r=o.get;return void 0!==r?r.call(i):void 0},am=function(A,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);A.prototype=Object.create(e&&e.prototype,{constructor:{value:A,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(A,e):A.__proto__=e)},sm=function(A,e){if(!A)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?A:e},lm=function(){function A(){if(om(this,A),this.__state=Am.apply(this,arguments),!1===this.__state)throw new Error("Failed to interpret color arguments");this.__state.a=this.__state.a||1}return nm(A,[{key:"toString",value:function(){return Wf(this)}},{key:"toHexString",value:function(){return Wf(this,!0)}},{key:"toOriginal",value:function(){return this.__state.conversion.write(this)}}]),A}();function cm(A,e,t){Object.defineProperty(A,e,{get:function(){return"RGB"===this.__state.space||lm.recalculateRGB(this,e,t),this.__state[e]},set:function(A){"RGB"!==this.__state.space&&(lm.recalculateRGB(this,e,t),this.__state.space="RGB"),this.__state[e]=A}})}function hm(A,e){Object.defineProperty(A,e,{get:function(){return"HSV"===this.__state.space||lm.recalculateHSV(this),this.__state[e]},set:function(A){"HSV"!==this.__state.space&&(lm.recalculateHSV(this),this.__state.space="HSV"),this.__state[e]=A}})}lm.recalculateRGB=function(A,e,t){if("HEX"===A.__state.space)A.__state[e]=tm.component_from_hex(A.__state.hex,t);else{if("HSV"!==A.__state.space)throw new Error("Corrupted color state");Zf.extend(A.__state,tm.hsv_to_rgb(A.__state.h,A.__state.s,A.__state.v))}},lm.recalculateHSV=function(A){var e=tm.rgb_to_hsv(A.r,A.g,A.b);Zf.extend(A.__state,{s:e.s,v:e.v}),Zf.isNaN(e.h)?Zf.isUndefined(A.__state.h)&&(A.__state.h=0):A.__state.h=e.h},lm.COMPONENTS=["r","g","b","h","s","v","hex","a"],cm(lm.prototype,"r",2),cm(lm.prototype,"g",1),cm(lm.prototype,"b",0),hm(lm.prototype,"h"),hm(lm.prototype,"s"),hm(lm.prototype,"v"),Object.defineProperty(lm.prototype,"a",{get:function(){return this.__state.a},set:function(A){this.__state.a=A}}),Object.defineProperty(lm.prototype,"hex",{get:function(){return"HEX"!==!this.__state.space&&(this.__state.hex=tm.rgb_to_hex(this.r,this.g,this.b)),this.__state.hex},set:function(A){this.__state.space="HEX",this.__state.hex=A}});var dm=function(){function A(e,t){om(this,A),this.initialValue=e[t],this.domElement=document.createElement("div"),this.object=e,this.property=t,this.__onChange=void 0,this.__onFinishChange=void 0}return nm(A,[{key:"onChange",value:function(A){return this.__onChange=A,this}},{key:"onFinishChange",value:function(A){return this.__onFinishChange=A,this}},{key:"setValue",value:function(A){return this.object[this.property]=A,this.__onChange&&this.__onChange.call(this,A),this.updateDisplay(),this}},{key:"getValue",value:function(){return this.object[this.property]}},{key:"updateDisplay",value:function(){return this}},{key:"isModified",value:function(){return this.initialValue!==this.getValue()}}]),A}(),pm={};Zf.each({HTMLEvents:["change"],MouseEvents:["click","mousemove","mousedown","mouseup","mouseover"],KeyboardEvents:["keydown"]},(function(A,e){Zf.each(A,(function(A){pm[A]=e}))}));var gm=/(\d+(\.\d+)?)px/;function um(A){if("0"===A||Zf.isUndefined(A))return 0;var e=A.match(gm);return Zf.isNull(e)?0:parseFloat(e[1])}var fm={makeSelectable:function(A,e){void 0!==A&&void 0!==A.style&&(A.onselectstart=e?function(){return!1}:function(){},A.style.MozUserSelect=e?"auto":"none",A.style.KhtmlUserSelect=e?"auto":"none",A.unselectable=e?"on":"off")},makeFullscreen:function(A,e,t){var i=t,o=e;Zf.isUndefined(o)&&(o=!0),Zf.isUndefined(i)&&(i=!0),A.style.position="absolute",o&&(A.style.left=0,A.style.right=0),i&&(A.style.top=0,A.style.bottom=0)},fakeEvent:function(A,e,t,i){var o=t||{},n=pm[e];if(!n)throw new Error("Event type "+e+" not supported.");var r=document.createEvent(n);switch(n){case"MouseEvents":r.initMouseEvent(e,o.bubbles||!1,o.cancelable||!0,window,o.clickCount||1,0,0,o.x||o.clientX||0,o.y||o.clientY||0,!1,!1,!1,!1,0,null);break;case"KeyboardEvents":var a=r.initKeyboardEvent||r.initKeyEvent;Zf.defaults(o,{cancelable:!0,ctrlKey:!1,altKey:!1,shiftKey:!1,metaKey:!1,keyCode:void 0,charCode:void 0}),a(e,o.bubbles||!1,o.cancelable,window,o.ctrlKey,o.altKey,o.shiftKey,o.metaKey,o.keyCode,o.charCode);break;default:r.initEvent(e,o.bubbles||!1,o.cancelable||!0)}Zf.defaults(r,i),A.dispatchEvent(r)},bind:function(A,e,t,i){return A.addEventListener?A.addEventListener(e,t,i||!1):A.attachEvent&&A.attachEvent("on"+e,t),fm},unbind:function(A,e,t,i){return A.removeEventListener?A.removeEventListener(e,t,i||!1):A.detachEvent&&A.detachEvent("on"+e,t),fm},addClass:function(A,e){if(void 0===A.className)A.className=e;else if(A.className!==e){var t=A.className.split(/ +/);-1===t.indexOf(e)&&(t.push(e),A.className=t.join(" ").replace(/^\s+/,"").replace(/\s+$/,""))}return fm},removeClass:function(A,e){if(e)if(A.className===e)A.removeAttribute("class");else{var t=A.className.split(/ +/),i=t.indexOf(e);-1!==i&&(t.splice(i,1),A.className=t.join(" "))}else A.className=void 0;return fm},hasClass:function(A,e){return new RegExp("(?:^|\\s+)"+e+"(?:\\s+|$)").test(A.className)||!1},getWidth:function(A){var e=getComputedStyle(A);return um(e["border-left-width"])+um(e["border-right-width"])+um(e["padding-left"])+um(e["padding-right"])+um(e.width)},getHeight:function(A){var e=getComputedStyle(A);return um(e["border-top-width"])+um(e["border-bottom-width"])+um(e["padding-top"])+um(e["padding-bottom"])+um(e.height)},getOffset:function(A){var e=A,t={left:0,top:0};if(e.offsetParent)do{t.left+=e.offsetLeft,t.top+=e.offsetTop,e=e.offsetParent}while(e);return t},isActive:function(A){return A===document.activeElement&&(A.type||A.href)}},mm=function(A){function e(A,t){om(this,e);var i=sm(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,A,t)),o=i;return i.__prev=i.getValue(),i.__checkbox=document.createElement("input"),i.__checkbox.setAttribute("type","checkbox"),fm.bind(i.__checkbox,"change",(function(){o.setValue(!o.__prev)}),!1),i.domElement.appendChild(i.__checkbox),i.updateDisplay(),i}return am(e,A),nm(e,[{key:"setValue",value:function(A){var t=rm(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"setValue",this).call(this,A);return this.__onFinishChange&&this.__onFinishChange.call(this,this.getValue()),this.__prev=this.getValue(),t}},{key:"updateDisplay",value:function(){return!0===this.getValue()?(this.__checkbox.setAttribute("checked","checked"),this.__checkbox.checked=!0,this.__prev=!0):(this.__checkbox.checked=!1,this.__prev=!1),rm(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"updateDisplay",this).call(this)}}]),e}(dm),Cm=function(A){function e(A,t,i){om(this,e);var o=sm(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,A,t)),n=i,r=o;if(o.__select=document.createElement("select"),Zf.isArray(n)){var a={};Zf.each(n,(function(A){a[A]=A})),n=a}return Zf.each(n,(function(A,e){var t=document.createElement("option");t.innerHTML=e,t.setAttribute("value",A),r.__select.appendChild(t)})),o.updateDisplay(),fm.bind(o.__select,"change",(function(){r.setValue(this.options[this.selectedIndex].value)})),o.domElement.appendChild(o.__select),o}return am(e,A),nm(e,[{key:"setValue",value:function(A){var t=rm(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"setValue",this).call(this,A);return this.__onFinishChange&&this.__onFinishChange.call(this,this.getValue()),t}},{key:"updateDisplay",value:function(){return fm.isActive(this.__select)?this:(this.__select.value=this.getValue(),rm(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"updateDisplay",this).call(this))}}]),e}(dm),ym=function(A){function e(A,t){om(this,e);var i=sm(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,A,t)),o=i;function n(){o.setValue(o.__input.value)}return i.__input=document.createElement("input"),i.__input.setAttribute("type","text"),fm.bind(i.__input,"keyup",n),fm.bind(i.__input,"change",n),fm.bind(i.__input,"blur",(function(){o.__onFinishChange&&o.__onFinishChange.call(o,o.getValue())})),fm.bind(i.__input,"keydown",(function(A){13===A.keyCode&&this.blur()})),i.updateDisplay(),i.domElement.appendChild(i.__input),i}return am(e,A),nm(e,[{key:"updateDisplay",value:function(){return fm.isActive(this.__input)||(this.__input.value=this.getValue()),rm(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"updateDisplay",this).call(this)}}]),e}(dm);function vm(A){var e=A.toString();return e.indexOf(".")>-1?e.length-e.indexOf(".")-1:0}var Im=function(A){function e(A,t,i){om(this,e);var o=sm(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,A,t)),n=i||{};return o.__min=n.min,o.__max=n.max,o.__step=n.step,o.__impliedStep=Zf.isUndefined(o.__step)?0===o.initialValue?1:Math.pow(10,Math.floor(Math.log(Math.abs(o.initialValue))/Math.LN10))/10:o.__step,o.__precision=vm(o.__impliedStep),o}return am(e,A),nm(e,[{key:"setValue",value:function(A){var t=A;return void 0!==this.__min&&this.__min>t?t=this.__min:void 0!==this.__max&&t>this.__max&&(t=this.__max),void 0!==this.__step&&t%this.__step!=0&&(t=Math.round(t/this.__step)*this.__step),rm(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"setValue",this).call(this,t)}},{key:"min",value:function(A){return this.__min=A,this}},{key:"max",value:function(A){return this.__max=A,this}},{key:"step",value:function(A){return this.__step=A,this.__impliedStep=A,this.__precision=vm(A),this}}]),e}(dm);var Em=function(A){function e(A,t,i){om(this,e);var o=sm(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,A,t,i));o.__truncationSuspended=!1;var n=o,r=void 0;function a(){n.__onFinishChange&&n.__onFinishChange.call(n,n.getValue())}function s(A){var e=r-A.clientY;n.setValue(n.getValue()+e*n.__impliedStep),r=A.clientY}function l(){fm.unbind(window,"mousemove",s),fm.unbind(window,"mouseup",l),a()}return o.__input=document.createElement("input"),o.__input.setAttribute("type","text"),fm.bind(o.__input,"change",(function(){var A=parseFloat(n.__input.value);Zf.isNaN(A)||n.setValue(A)})),fm.bind(o.__input,"blur",(function(){a()})),fm.bind(o.__input,"mousedown",(function(A){fm.bind(window,"mousemove",s),fm.bind(window,"mouseup",l),r=A.clientY})),fm.bind(o.__input,"keydown",(function(A){13===A.keyCode&&(n.__truncationSuspended=!0,this.blur(),n.__truncationSuspended=!1,a())})),o.updateDisplay(),o.domElement.appendChild(o.__input),o}return am(e,A),nm(e,[{key:"updateDisplay",value:function(){var A,t;return this.__input.value=this.__truncationSuspended?this.getValue():(A=this.getValue(),t=Math.pow(10,this.__precision),Math.round(A*t)/t),rm(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"updateDisplay",this).call(this)}}]),e}(Im);function Bm(A,e,t,i,o){return i+(A-e)/(t-e)*(o-i)}var xm=function(A){function e(A,t,i,o,n){om(this,e);var r=sm(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,A,t,{min:i,max:o,step:n})),a=r;function s(A){A.preventDefault();var e=a.__background.getBoundingClientRect();return a.setValue(Bm(A.clientX,e.left,e.right,a.__min,a.__max)),!1}function l(){fm.unbind(window,"mousemove",s),fm.unbind(window,"mouseup",l),a.__onFinishChange&&a.__onFinishChange.call(a,a.getValue())}function c(A){var e=A.touches[0].clientX,t=a.__background.getBoundingClientRect();a.setValue(Bm(e,t.left,t.right,a.__min,a.__max))}function h(){fm.unbind(window,"touchmove",c),fm.unbind(window,"touchend",h),a.__onFinishChange&&a.__onFinishChange.call(a,a.getValue())}return r.__background=document.createElement("div"),r.__foreground=document.createElement("div"),fm.bind(r.__background,"mousedown",(function(A){document.activeElement.blur(),fm.bind(window,"mousemove",s),fm.bind(window,"mouseup",l),s(A)})),fm.bind(r.__background,"touchstart",(function(A){if(1!==A.touches.length)return;fm.bind(window,"touchmove",c),fm.bind(window,"touchend",h),c(A)})),fm.addClass(r.__background,"slider"),fm.addClass(r.__foreground,"slider-fg"),r.updateDisplay(),r.__background.appendChild(r.__foreground),r.domElement.appendChild(r.__background),r}return am(e,A),nm(e,[{key:"updateDisplay",value:function(){var A=(this.getValue()-this.__min)/(this.__max-this.__min);return this.__foreground.style.width=100*A+"%",rm(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"updateDisplay",this).call(this)}}]),e}(Im),Sm=function(A){function e(A,t,i){om(this,e);var o=sm(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,A,t)),n=o;return o.__button=document.createElement("div"),o.__button.innerHTML=void 0===i?"Fire":i,fm.bind(o.__button,"click",(function(A){return A.preventDefault(),n.fire(),!1})),fm.addClass(o.__button,"button"),o.domElement.appendChild(o.__button),o}return am(e,A),nm(e,[{key:"fire",value:function(){this.__onChange&&this.__onChange.call(this),this.getValue().call(this.object),this.__onFinishChange&&this.__onFinishChange.call(this,this.getValue())}}]),e}(dm),wm=function(A){function e(A,t){om(this,e);var i=sm(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,A,t));i.__color=new lm(i.getValue()),i.__temp=new lm(0);var o=i;i.domElement=document.createElement("div"),fm.makeSelectable(i.domElement,!1),i.__selector=document.createElement("div"),i.__selector.className="selector",i.__saturation_field=document.createElement("div"),i.__saturation_field.className="saturation-field",i.__field_knob=document.createElement("div"),i.__field_knob.className="field-knob",i.__field_knob_border="2px solid ",i.__hue_knob=document.createElement("div"),i.__hue_knob.className="hue-knob",i.__hue_field=document.createElement("div"),i.__hue_field.className="hue-field",i.__input=document.createElement("input"),i.__input.type="text",i.__input_textShadow="0 1px 1px ",fm.bind(i.__input,"keydown",(function(A){13===A.keyCode&&h.call(this)})),fm.bind(i.__input,"blur",h),fm.bind(i.__selector,"mousedown",(function(){fm.addClass(this,"drag").bind(window,"mouseup",(function(){fm.removeClass(o.__selector,"drag")}))})),fm.bind(i.__selector,"touchstart",(function(){fm.addClass(this,"drag").bind(window,"touchend",(function(){fm.removeClass(o.__selector,"drag")}))}));var n,r=document.createElement("div");function a(A){p(A),fm.bind(window,"mousemove",p),fm.bind(window,"touchmove",p),fm.bind(window,"mouseup",l),fm.bind(window,"touchend",l)}function s(A){g(A),fm.bind(window,"mousemove",g),fm.bind(window,"touchmove",g),fm.bind(window,"mouseup",c),fm.bind(window,"touchend",c)}function l(){fm.unbind(window,"mousemove",p),fm.unbind(window,"touchmove",p),fm.unbind(window,"mouseup",l),fm.unbind(window,"touchend",l),d()}function c(){fm.unbind(window,"mousemove",g),fm.unbind(window,"touchmove",g),fm.unbind(window,"mouseup",c),fm.unbind(window,"touchend",c),d()}function h(){var A=Am(this.value);!1!==A?(o.__color.__state=A,o.setValue(o.__color.toOriginal())):this.value=o.__color.toString()}function d(){o.__onFinishChange&&o.__onFinishChange.call(o,o.__color.toOriginal())}function p(A){-1===A.type.indexOf("touch")&&A.preventDefault();var e=o.__saturation_field.getBoundingClientRect(),t=A.touches&&A.touches[0]||A,i=(t.clientX-e.left)/(e.right-e.left),n=1-(t.clientY-e.top)/(e.bottom-e.top);return n>1?n=1:0>n&&(n=0),i>1?i=1:0>i&&(i=0),o.__color.v=n,o.__color.s=i,o.setValue(o.__color.toOriginal()),!1}function g(A){-1===A.type.indexOf("touch")&&A.preventDefault();var e=o.__hue_field.getBoundingClientRect(),t=1-((A.touches&&A.touches[0]||A).clientY-e.top)/(e.bottom-e.top);return t>1?t=1:0>t&&(t=0),o.__color.h=360*t,o.setValue(o.__color.toOriginal()),!1}return Zf.extend(i.__selector.style,{width:"122px",height:"102px",padding:"3px",backgroundColor:"#222",boxShadow:"0px 1px 3px rgba(0,0,0,0.3)"}),Zf.extend(i.__field_knob.style,{position:"absolute",width:"12px",height:"12px",border:i.__field_knob_border+(.5>i.__color.v?"#fff":"#000"),boxShadow:"0px 1px 3px rgba(0,0,0,0.5)",borderRadius:"12px",zIndex:1}),Zf.extend(i.__hue_knob.style,{position:"absolute",width:"15px",height:"2px",borderRight:"4px solid #fff",zIndex:1}),Zf.extend(i.__saturation_field.style,{width:"100px",height:"100px",border:"1px solid #555",marginRight:"3px",display:"inline-block",cursor:"pointer"}),Zf.extend(r.style,{width:"100%",height:"100%",background:"none"}),bm(r,"top","rgba(0,0,0,0)","#000"),Zf.extend(i.__hue_field.style,{width:"15px",height:"100px",border:"1px solid #555",cursor:"ns-resize",position:"absolute",top:"3px",right:"3px"}),(n=i.__hue_field).style.background="",n.style.cssText+="background: -moz-linear-gradient(top, #ff0000 0%, #ff00ff 17%, #0000ff 34%, #00ffff 50%, #00ff00 67%, #ffff00 84%, #ff0000 100%);",n.style.cssText+="background: -webkit-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);",n.style.cssText+="background: -o-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);",n.style.cssText+="background: -ms-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);",n.style.cssText+="background: linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);",Zf.extend(i.__input.style,{outline:"none",textAlign:"center",color:"#fff",border:0,fontWeight:"bold",textShadow:i.__input_textShadow+"rgba(0,0,0,0.7)"}),fm.bind(i.__saturation_field,"mousedown",a),fm.bind(i.__saturation_field,"touchstart",a),fm.bind(i.__field_knob,"mousedown",a),fm.bind(i.__field_knob,"touchstart",a),fm.bind(i.__hue_field,"mousedown",s),fm.bind(i.__hue_field,"touchstart",s),i.__saturation_field.appendChild(r),i.__selector.appendChild(i.__field_knob),i.__selector.appendChild(i.__saturation_field),i.__selector.appendChild(i.__hue_field),i.__hue_field.appendChild(i.__hue_knob),i.domElement.appendChild(i.__input),i.domElement.appendChild(i.__selector),i.updateDisplay(),i}return am(e,A),nm(e,[{key:"updateDisplay",value:function(){var A=Am(this.getValue());if(!1!==A){var e=!1;Zf.each(lm.COMPONENTS,(function(t){if(!Zf.isUndefined(A[t])&&!Zf.isUndefined(this.__color.__state[t])&&A[t]!==this.__color.__state[t])return e=!0,{}}),this),e&&Zf.extend(this.__color.__state,A)}Zf.extend(this.__temp.__state,this.__color.__state),this.__temp.a=1;var t=.5>this.__color.v||this.__color.s>.5?255:0,i=255-t;Zf.extend(this.__field_knob.style,{marginLeft:100*this.__color.s-7+"px",marginTop:100*(1-this.__color.v)-7+"px",backgroundColor:this.__temp.toHexString(),border:this.__field_knob_border+"rgb("+t+","+t+","+t+")"}),this.__hue_knob.style.marginTop=100*(1-this.__color.h/360)+"px",this.__temp.s=1,this.__temp.v=1,bm(this.__saturation_field,"left","#fff",this.__temp.toHexString()),this.__input.value=this.__color.toString(),Zf.extend(this.__input.style,{backgroundColor:this.__color.toHexString(),color:"rgb("+t+","+t+","+t+")",textShadow:this.__input_textShadow+"rgba("+i+","+i+","+i+",.7)"})}}]),e}(dm),Mm=["-moz-","-o-","-webkit-","-ms-",""];function bm(A,e,t,i){A.style.background="",Zf.each(Mm,(function(o){A.style.cssText+="background: "+o+"linear-gradient("+e+", "+t+" 0%, "+i+" 100%); "}))}var Um=function(A,e){var t=e||document,i=document.createElement("style");i.type="text/css",i.innerHTML=A;var o=t.getElementsByTagName("head")[0];try{o.appendChild(i)}catch(A){}},Fm='
\n\n Here\'s the new load parameter for your GUI\'s constructor:\n\n \n\n
\n\n Automatically save\n values to localStorage on exit.\n\n
The values saved to localStorage will\n override those passed to dat.GUI\'s constructor. This makes it\n easier to work incrementally, but localStorage is fragile,\n and your friends may not see the same values you do.\n\n
\n\n
\n\n
',Km=function(A,e){var t=A[e];return Zf.isArray(arguments[2])||Zf.isObject(arguments[2])?new Cm(A,e,arguments[2]):Zf.isNumber(t)?Zf.isNumber(arguments[2])&&Zf.isNumber(arguments[3])?Zf.isNumber(arguments[4])?new xm(A,e,arguments[2],arguments[3],arguments[4]):new xm(A,e,arguments[2],arguments[3]):Zf.isNumber(arguments[4])?new Em(A,e,{min:arguments[2],max:arguments[3],step:arguments[4]}):new Em(A,e,{min:arguments[2],max:arguments[3]}):Zf.isString(t)?new ym(A,e):Zf.isFunction(t)?new Sm(A,e,""):Zf.isBoolean(t)?new mm(A,e):null};var Qm=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(A){setTimeout(A,1e3/60)},Rm=function(){function A(){om(this,A),this.backgroundElement=document.createElement("div"),Zf.extend(this.backgroundElement.style,{backgroundColor:"rgba(0,0,0,0.8)",top:0,left:0,display:"none",zIndex:"1000",opacity:0,WebkitTransition:"opacity 0.2s linear",transition:"opacity 0.2s linear"}),fm.makeFullscreen(this.backgroundElement),this.backgroundElement.style.position="fixed",this.domElement=document.createElement("div"),Zf.extend(this.domElement.style,{position:"fixed",display:"none",zIndex:"1001",opacity:0,WebkitTransition:"-webkit-transform 0.2s ease-out, opacity 0.2s linear",transition:"transform 0.2s ease-out, opacity 0.2s linear"}),document.body.appendChild(this.backgroundElement),document.body.appendChild(this.domElement);var e=this;fm.bind(this.backgroundElement,"click",(function(){e.hide()}))}return nm(A,[{key:"show",value:function(){var A=this;this.backgroundElement.style.display="block",this.domElement.style.display="block",this.domElement.style.opacity=0,this.domElement.style.webkitTransform="scale(1.1)",this.layout(),Zf.defer((function(){A.backgroundElement.style.opacity=1,A.domElement.style.opacity=1,A.domElement.style.webkitTransform="scale(1)"}))}},{key:"hide",value:function(){var A=this,e=function e(){A.domElement.style.display="none",A.backgroundElement.style.display="none",fm.unbind(A.domElement,"webkitTransitionEnd",e),fm.unbind(A.domElement,"transitionend",e),fm.unbind(A.domElement,"oTransitionEnd",e)};fm.bind(this.domElement,"webkitTransitionEnd",e),fm.bind(this.domElement,"transitionend",e),fm.bind(this.domElement,"oTransitionEnd",e),this.backgroundElement.style.opacity=0,this.domElement.style.opacity=0,this.domElement.style.webkitTransform="scale(1.1)"}},{key:"layout",value:function(){this.domElement.style.left=window.innerWidth/2-fm.getWidth(this.domElement)/2+"px",this.domElement.style.top=window.innerHeight/2-fm.getHeight(this.domElement)/2+"px"}}]),A}();Um(function(A){if(A&&"undefined"!=typeof window){var e=document.createElement("style");return e.setAttribute("type","text/css"),e.innerHTML=A,document.head.appendChild(e),A}}(".dg ul{list-style:none;margin:0;padding:0;width:100%;clear:both}.dg.ac{position:fixed;top:0;left:0;right:0;height:0;z-index:0}.dg:not(.ac) .main{overflow:hidden}.dg.main{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear}.dg.main.taller-than-window{overflow-y:auto}.dg.main.taller-than-window .close-button{opacity:1;margin-top:-1px;border-top:1px solid #2c2c2c}.dg.main ul.closed .close-button{opacity:1 !important}.dg.main:hover .close-button,.dg.main .close-button.drag{opacity:1}.dg.main .close-button{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear;border:0;line-height:19px;height:20px;cursor:pointer;text-align:center;background-color:#000}.dg.main .close-button.close-top{position:relative}.dg.main .close-button.close-bottom{position:absolute}.dg.main .close-button:hover{background-color:#111}.dg.a{float:right;margin-right:15px;overflow-y:visible}.dg.a.has-save>ul.close-top{margin-top:0}.dg.a.has-save>ul.close-bottom{margin-top:27px}.dg.a.has-save>ul.closed{margin-top:0}.dg.a .save-row{top:0;z-index:1002}.dg.a .save-row.close-top{position:relative}.dg.a .save-row.close-bottom{position:fixed}.dg li{-webkit-transition:height .1s ease-out;-o-transition:height .1s ease-out;-moz-transition:height .1s ease-out;transition:height .1s ease-out;-webkit-transition:overflow .1s linear;-o-transition:overflow .1s linear;-moz-transition:overflow .1s linear;transition:overflow .1s linear}.dg li:not(.folder){cursor:auto;height:27px;line-height:27px;padding:0 4px 0 5px}.dg li.folder{padding:0;border-left:4px solid rgba(0,0,0,0)}.dg li.title{cursor:pointer;margin-left:-4px}.dg .closed li:not(.title),.dg .closed ul li,.dg .closed ul li>*{height:0;overflow:hidden;border:0}.dg .cr{clear:both;padding-left:3px;height:27px;overflow:hidden}.dg .property-name{cursor:default;float:left;clear:left;width:40%;overflow:hidden;text-overflow:ellipsis}.dg .c{float:left;width:60%;position:relative}.dg .c input[type=text]{border:0;margin-top:4px;padding:3px;width:100%;float:right}.dg .has-slider input[type=text]{width:30%;margin-left:0}.dg .slider{float:left;width:66%;margin-left:-5px;margin-right:0;height:19px;margin-top:4px}.dg .slider-fg{height:100%}.dg .c input[type=checkbox]{margin-top:7px}.dg .c select{margin-top:5px}.dg .cr.function,.dg .cr.function .property-name,.dg .cr.function *,.dg .cr.boolean,.dg .cr.boolean *{cursor:pointer}.dg .cr.color{overflow:visible}.dg .selector{display:none;position:absolute;margin-left:-9px;margin-top:23px;z-index:10}.dg .c:hover .selector,.dg .selector.drag{display:block}.dg li.save-row{padding:0}.dg li.save-row .button{display:inline-block;padding:0px 6px}.dg.dialogue{background-color:#222;width:460px;padding:15px;font-size:13px;line-height:15px}#dg-new-constructor{padding:10px;color:#222;font-family:Monaco, monospace;font-size:10px;border:0;resize:none;box-shadow:inset 1px 1px 1px #888;word-wrap:break-word;margin:12px 0;display:block;width:440px;overflow-y:scroll;height:100px;position:relative}#dg-local-explain{display:none;font-size:11px;line-height:17px;border-radius:3px;background-color:#333;padding:8px;margin-top:10px}#dg-local-explain code{font-size:10px}#dat-gui-save-locally{display:none}.dg{color:#eee;font:11px 'Lucida Grande', sans-serif;text-shadow:0 -1px 0 #111}.dg.main::-webkit-scrollbar{width:5px;background:#1a1a1a}.dg.main::-webkit-scrollbar-corner{height:0;display:none}.dg.main::-webkit-scrollbar-thumb{border-radius:5px;background:#676767}.dg li:not(.folder){background:#1a1a1a;border-bottom:1px solid #2c2c2c}.dg li.save-row{line-height:25px;background:#dad5cb;border:0}.dg li.save-row select{margin-left:5px;width:108px}.dg li.save-row .button{margin-left:5px;margin-top:1px;border-radius:2px;font-size:9px;line-height:7px;padding:4px 4px 5px 4px;background:#c5bdad;color:#fff;text-shadow:0 1px 0 #b0a58f;box-shadow:0 -1px 0 #b0a58f;cursor:pointer}.dg li.save-row .button.gears{background:#c5bdad url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAANCAYAAAB/9ZQ7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQJJREFUeNpiYKAU/P//PwGIC/ApCABiBSAW+I8AClAcgKxQ4T9hoMAEUrxx2QSGN6+egDX+/vWT4e7N82AMYoPAx/evwWoYoSYbACX2s7KxCxzcsezDh3evFoDEBYTEEqycggWAzA9AuUSQQgeYPa9fPv6/YWm/Acx5IPb7ty/fw+QZblw67vDs8R0YHyQhgObx+yAJkBqmG5dPPDh1aPOGR/eugW0G4vlIoTIfyFcA+QekhhHJhPdQxbiAIguMBTQZrPD7108M6roWYDFQiIAAv6Aow/1bFwXgis+f2LUAynwoIaNcz8XNx3Dl7MEJUDGQpx9gtQ8YCueB+D26OECAAQDadt7e46D42QAAAABJRU5ErkJggg==) 2px 1px no-repeat;height:7px;width:8px}.dg li.save-row .button:hover{background-color:#bab19e;box-shadow:0 -1px 0 #b0a58f}.dg li.folder{border-bottom:0}.dg li.title{padding-left:16px;background:#000 url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat;cursor:pointer;border-bottom:1px solid rgba(255,255,255,0.2)}.dg .closed li.title{background-image:url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==)}.dg .cr.boolean{border-left:3px solid #806787}.dg .cr.color{border-left:3px solid}.dg .cr.function{border-left:3px solid #e61d5f}.dg .cr.number{border-left:3px solid #2FA1D6}.dg .cr.number input[type=text]{color:#2FA1D6}.dg .cr.string{border-left:3px solid #1ed36f}.dg .cr.string input[type=text]{color:#1ed36f}.dg .cr.function:hover,.dg .cr.boolean:hover{background:#111}.dg .c input[type=text]{background:#303030;outline:none}.dg .c input[type=text]:hover{background:#3c3c3c}.dg .c input[type=text]:focus{background:#494949;color:#fff}.dg .c .slider{background:#303030;cursor:ew-resize}.dg .c .slider-fg{background:#2FA1D6;max-width:100%}.dg .c .slider:hover{background:#3c3c3c}.dg .c .slider:hover .slider-fg{background:#44abda}\n"));var Tm=function(){try{return!!window.localStorage}catch(A){return!1}}(),km=void 0,Dm=!0,Lm=void 0,Nm=!1,Om=[],Vm=function A(e){var t=this,i=e||{};this.domElement=document.createElement("div"),this.__ul=document.createElement("ul"),this.domElement.appendChild(this.__ul),fm.addClass(this.domElement,"dg"),this.__folders={},this.__controllers=[],this.__rememberedObjects=[],this.__rememberedObjectIndecesToControllers=[],this.__listening=[],i=Zf.defaults(i,{closeOnTop:!1,autoPlace:!0,width:A.DEFAULT_WIDTH}),i=Zf.defaults(i,{resizable:i.autoPlace,hideable:i.autoPlace}),Zf.isUndefined(i.load)?i.load={preset:"Default"}:i.preset&&(i.load.preset=i.preset),Zf.isUndefined(i.parent)&&i.hideable&&Om.push(this),i.resizable=Zf.isUndefined(i.parent)&&i.resizable,i.autoPlace&&Zf.isUndefined(i.scrollable)&&(i.scrollable=!0);var o=Tm&&"true"===localStorage.getItem(Ym(this,"isLocal")),n=void 0,r=void 0;if(Object.defineProperties(this,{parent:{get:function(){return i.parent}},scrollable:{get:function(){return i.scrollable}},autoPlace:{get:function(){return i.autoPlace}},closeOnTop:{get:function(){return i.closeOnTop}},preset:{get:function(){return t.parent?t.getRoot().preset:i.load.preset},set:function(A){t.parent?t.getRoot().preset=A:i.load.preset=A,function(A){for(var e=0;A.__preset_select.length>e;e++)A.__preset_select[e].value===A.preset&&(A.__preset_select.selectedIndex=e)}(this),t.revert()}},width:{get:function(){return i.width},set:function(A){i.width=A,Xm(t,A)}},name:{get:function(){return i.name},set:function(A){i.name=A,r&&(r.innerHTML=i.name)}},closed:{get:function(){return i.closed},set:function(e){i.closed=e,i.closed?fm.addClass(t.__ul,A.CLASS_CLOSED):fm.removeClass(t.__ul,A.CLASS_CLOSED),this.onResize(),t.__closeButton&&(t.__closeButton.innerHTML=e?A.TEXT_OPEN:A.TEXT_CLOSED)}},load:{get:function(){return i.load}},useLocalStorage:{get:function(){return o},set:function(A){Tm&&(o=A,A?fm.bind(window,"unload",n):fm.unbind(window,"unload",n),localStorage.setItem(Ym(t,"isLocal"),A))}}}),Zf.isUndefined(i.parent)){if(this.closed=i.closed||!1,fm.addClass(this.domElement,A.CLASS_MAIN),fm.makeSelectable(this.domElement,!1),Tm&&o){t.useLocalStorage=!0;var a=localStorage.getItem(Ym(this,"gui"));a&&(i.load=JSON.parse(a))}this.__closeButton=document.createElement("div"),this.__closeButton.innerHTML=A.TEXT_CLOSED,fm.addClass(this.__closeButton,A.CLASS_CLOSE_BUTTON),i.closeOnTop?(fm.addClass(this.__closeButton,A.CLASS_CLOSE_TOP),this.domElement.insertBefore(this.__closeButton,this.domElement.childNodes[0])):(fm.addClass(this.__closeButton,A.CLASS_CLOSE_BOTTOM),this.domElement.appendChild(this.__closeButton)),fm.bind(this.__closeButton,"click",(function(){t.closed=!t.closed}))}else{void 0===i.closed&&(i.closed=!0);var s=document.createTextNode(i.name);fm.addClass(s,"controller-name"),r=Gm(t,s);fm.addClass(this.__ul,A.CLASS_CLOSED),fm.addClass(r,"title"),fm.bind(r,"click",(function(A){return A.preventDefault(),t.closed=!t.closed,!1})),i.closed||(this.closed=!1)}i.autoPlace&&(Zf.isUndefined(i.parent)&&(Dm&&(Lm=document.createElement("div"),fm.addClass(Lm,"dg"),fm.addClass(Lm,A.CLASS_AUTO_PLACE_CONTAINER),document.body.appendChild(Lm),Dm=!1),Lm.appendChild(this.domElement),fm.addClass(this.domElement,A.CLASS_AUTO_PLACE)),this.parent||Xm(t,i.width)),this.__resizeHandler=function(){t.onResizeDebounced()},fm.bind(window,"resize",this.__resizeHandler),fm.bind(this.__ul,"webkitTransitionEnd",this.__resizeHandler),fm.bind(this.__ul,"transitionend",this.__resizeHandler),fm.bind(this.__ul,"oTransitionEnd",this.__resizeHandler),this.onResize(),i.resizable&&Zm(this),this.saveToLocalStorageIfPossible=n=function(){Tm&&"true"===localStorage.getItem(Ym(t,"isLocal"))&&localStorage.setItem(Ym(t,"gui"),JSON.stringify(t.getSaveObject()))},i.parent||function(){var A=t.getRoot();A.width+=1,Zf.defer((function(){A.width-=1}))}()};function Gm(A,e,t){var i=document.createElement("li");return e&&i.appendChild(e),t?A.__ul.insertBefore(i,t):A.__ul.appendChild(i),A.onResize(),i}function Pm(A){fm.unbind(window,"resize",A.__resizeHandler),A.saveToLocalStorageIfPossible&&fm.unbind(window,"unload",A.saveToLocalStorageIfPossible)}function qm(A,e){var t=A.__preset_select[A.__preset_select.selectedIndex];t.innerHTML=e?t.value+"*":t.value}function jm(A,e){var t=A.getRoot(),i=t.__rememberedObjects.indexOf(e.object);if(-1!==i){var o=t.__rememberedObjectIndecesToControllers[i];if(void 0===o&&(t.__rememberedObjectIndecesToControllers[i]=o={}),o[e.property]=e,t.load&&t.load.remembered){var n=t.load.remembered,r=void 0;if(n[A.preset])r=n[A.preset];else{if(!n.Default)return;r=n.Default}if(r[i]&&void 0!==r[i][e.property]){var a=r[i][e.property];e.initialValue=a,e.setValue(a)}}}}function Hm(A,e,t,i){if(void 0===e[t])throw new Error('Object "'+e+'" has no property "'+t+'"');var o=void 0;if(i.color)o=new wm(e,t);else{var n=[e,t].concat(i.factoryArgs);o=Km.apply(A,n)}i.before instanceof dm&&(i.before=i.before.__li),jm(A,o),fm.addClass(o.domElement,"c");var r=document.createElement("span");fm.addClass(r,"property-name"),r.innerHTML=o.property;var a=document.createElement("div");a.appendChild(r),a.appendChild(o.domElement);var s=Gm(A,a,i.before);return fm.addClass(s,Vm.CLASS_CONTROLLER_ROW),fm.addClass(s,o instanceof wm?"color":im(o.getValue())),function(A,e,t){if(t.__li=e,t.__gui=A,Zf.extend(t,{options:function(e){if(arguments.length>1){var i=t.__li.nextElementSibling;return t.remove(),Hm(A,t.object,t.property,{before:i,factoryArgs:[Zf.toArray(arguments)]})}if(Zf.isArray(e)||Zf.isObject(e)){var o=t.__li.nextElementSibling;return t.remove(),Hm(A,t.object,t.property,{before:o,factoryArgs:[e]})}},name:function(A){return t.__li.firstElementChild.firstElementChild.innerHTML=A,t},listen:function(){return t.__gui.listen(t),t},remove:function(){return t.__gui.remove(t),t}}),t instanceof xm){var i=new Em(t.object,t.property,{min:t.__min,max:t.__max,step:t.__step});Zf.each(["updateDisplay","onChange","onFinishChange","step","min","max"],(function(A){var e=t[A],o=i[A];t[A]=i[A]=function(){var A=Array.prototype.slice.call(arguments);return o.apply(i,A),e.apply(t,A)}})),fm.addClass(e,"has-slider"),t.domElement.insertBefore(i.domElement,t.domElement.firstElementChild)}else if(t instanceof Em){var o=function(e){if(Zf.isNumber(t.__min)&&Zf.isNumber(t.__max)){var i=t.__li.firstElementChild.firstElementChild.innerHTML,o=t.__gui.__listening.indexOf(t)>-1;t.remove();var n=Hm(A,t.object,t.property,{before:t.__li.nextElementSibling,factoryArgs:[t.__min,t.__max,t.__step]});return n.name(i),o&&n.listen(),n}return e};t.min=Zf.compose(o,t.min),t.max=Zf.compose(o,t.max)}else t instanceof mm?(fm.bind(e,"click",(function(){fm.fakeEvent(t.__checkbox,"click")})),fm.bind(t.__checkbox,"click",(function(A){A.stopPropagation()}))):t instanceof Sm?(fm.bind(e,"click",(function(){fm.fakeEvent(t.__button,"click")})),fm.bind(e,"mouseover",(function(){fm.addClass(t.__button,"hover")})),fm.bind(e,"mouseout",(function(){fm.removeClass(t.__button,"hover")}))):t instanceof wm&&(fm.addClass(e,"color"),t.updateDisplay=Zf.compose((function(A){return e.style.borderLeftColor=t.__color.toString(),A}),t.updateDisplay),t.updateDisplay());t.setValue=Zf.compose((function(e){return A.getRoot().__preset_select&&t.isModified()&&qm(A.getRoot(),!0),e}),t.setValue)}(A,s,o),A.__controllers.push(o),o}function Ym(A,e){return document.location.href+"."+e}function Wm(A,e,t){var i=document.createElement("option");i.innerHTML=e,i.value=e,A.__preset_select.appendChild(i),t&&(A.__preset_select.selectedIndex=A.__preset_select.length-1)}function Jm(A,e){e.style.display=A.useLocalStorage?"block":"none"}function zm(A){var e=A.__save_row=document.createElement("li");fm.addClass(A.domElement,"has-save"),A.__ul.insertBefore(e,A.__ul.firstChild),fm.addClass(e,"save-row");var t=document.createElement("span");t.innerHTML=" ",fm.addClass(t,"button gears");var i=document.createElement("span");i.innerHTML="Save",fm.addClass(i,"button"),fm.addClass(i,"save");var o=document.createElement("span");o.innerHTML="New",fm.addClass(o,"button"),fm.addClass(o,"save-as");var n=document.createElement("span");n.innerHTML="Revert",fm.addClass(n,"button"),fm.addClass(n,"revert");var r=A.__preset_select=document.createElement("select");if(A.load&&A.load.remembered?Zf.each(A.load.remembered,(function(e,t){Wm(A,t,t===A.preset)})):Wm(A,"Default",!1),fm.bind(r,"change",(function(){for(var e=0;A.__preset_select.length>e;e++)A.__preset_select[e].innerHTML=A.__preset_select[e].value;A.preset=this.value})),e.appendChild(r),e.appendChild(t),e.appendChild(i),e.appendChild(o),e.appendChild(n),Tm){var a=document.getElementById("dg-local-explain"),s=document.getElementById("dg-local-storage");document.getElementById("dg-save-locally").style.display="block","true"===localStorage.getItem(Ym(0,"isLocal"))&&s.setAttribute("checked","checked"),Jm(A,a),fm.bind(s,"change",(function(){A.useLocalStorage=!A.useLocalStorage,Jm(A,a)}))}var l=document.getElementById("dg-new-constructor");fm.bind(l,"keydown",(function(A){!A.metaKey||67!==A.which&&67!==A.keyCode||km.hide()})),fm.bind(t,"click",(function(){l.innerHTML=JSON.stringify(A.getSaveObject(),void 0,2),km.show(),l.focus(),l.select()})),fm.bind(i,"click",(function(){A.save()})),fm.bind(o,"click",(function(){var e=prompt("Enter a new preset name.");e&&A.saveAs(e)})),fm.bind(n,"click",(function(){A.revert()}))}function Zm(A){var e=void 0;function t(t){return t.preventDefault(),A.width+=e-t.clientX,A.onResize(),e=t.clientX,!1}function i(){fm.removeClass(A.__closeButton,Vm.CLASS_DRAG),fm.unbind(window,"mousemove",t),fm.unbind(window,"mouseup",i)}function o(o){return o.preventDefault(),e=o.clientX,fm.addClass(A.__closeButton,Vm.CLASS_DRAG),fm.bind(window,"mousemove",t),fm.bind(window,"mouseup",i),!1}A.__resize_handle=document.createElement("div"),Zf.extend(A.__resize_handle.style,{width:"6px",marginLeft:"-3px",height:"200px",cursor:"ew-resize",position:"absolute"}),fm.bind(A.__resize_handle,"mousedown",o),fm.bind(A.__closeButton,"mousedown",o),A.domElement.insertBefore(A.__resize_handle,A.domElement.firstElementChild)}function Xm(A,e){A.domElement.style.width=e+"px",A.__save_row&&A.autoPlace&&(A.__save_row.style.width=e+"px"),A.__closeButton&&(A.__closeButton.style.width=e+"px")}function _m(A,e){var t={};return Zf.each(A.__rememberedObjects,(function(i,o){var n={};Zf.each(A.__rememberedObjectIndecesToControllers[o],(function(A,t){n[t]=e?A.initialValue:A.getValue()})),t[o]=n})),t}Vm.toggleHide=function(){Nm=!Nm,Zf.each(Om,(function(A){A.domElement.style.display=Nm?"none":""}))},Vm.CLASS_AUTO_PLACE="a",Vm.CLASS_AUTO_PLACE_CONTAINER="ac",Vm.CLASS_MAIN="main",Vm.CLASS_CONTROLLER_ROW="cr",Vm.CLASS_TOO_TALL="taller-than-window",Vm.CLASS_CLOSED="closed",Vm.CLASS_CLOSE_BUTTON="close-button",Vm.CLASS_CLOSE_TOP="close-top",Vm.CLASS_CLOSE_BOTTOM="close-bottom",Vm.CLASS_DRAG="drag",Vm.DEFAULT_WIDTH=245,Vm.TEXT_CLOSED="关闭控制器",Vm.TEXT_OPEN="打开控制器",Vm._keydownHandler=function(A){"text"===document.activeElement.type||72!==A.which&&72!==A.keyCode||Vm.toggleHide()},fm.bind(window,"keydown",Vm._keydownHandler,!1),Zf.extend(Vm.prototype,{add:function(A,e){return Hm(this,A,e,{factoryArgs:Array.prototype.slice.call(arguments,2)})},addColor:function(A,e){return Hm(this,A,e,{color:!0})},remove:function(A){this.__ul.removeChild(A.__li),this.__controllers.splice(this.__controllers.indexOf(A),1);var e=this;Zf.defer((function(){e.onResize()}))},destroy:function(){if(this.parent)throw new Error("Only the root GUI should be removed with .destroy(). For subfolders, use gui.removeFolder(folder) instead.");this.autoPlace&&Lm.removeChild(this.domElement);var A=this;Zf.each(this.__folders,(function(e){A.removeFolder(e)})),fm.unbind(window,"keydown",Vm._keydownHandler,!1),Pm(this)},addFolder:function(A){if(void 0!==this.__folders[A])throw new Error('You already have a folder in this GUI by the name "'+A+'"');var e={name:A,parent:this};e.autoPlace=this.autoPlace,this.load&&this.load.folders&&this.load.folders[A]&&(e.closed=this.load.folders[A].closed,e.load=this.load.folders[A]);var t=new Vm(e);this.__folders[A]=t;var i=Gm(this,t.domElement);return fm.addClass(i,"folder"),t},removeFolder:function(A){this.__ul.removeChild(A.domElement.parentElement),delete this.__folders[A.name],this.load&&this.load.folders&&this.load.folders[A.name]&&delete this.load.folders[A.name],Pm(A);var e=this;Zf.each(A.__folders,(function(e){A.removeFolder(e)})),Zf.defer((function(){e.onResize()}))},open:function(){this.closed=!1},close:function(){this.closed=!0},hide:function(){this.domElement.style.display="none"},show:function(){this.domElement.style.display=""},onResize:function(){var A=this.getRoot();if(A.scrollable){var e=fm.getOffset(A.__ul).top,t=0;Zf.each(A.__ul.childNodes,(function(e){A.autoPlace&&e===A.__save_row||(t+=fm.getHeight(e))})),window.innerHeight-e-200&&(A.preset=this.preset,A.remembered||(A.remembered={}),A.remembered[this.preset]=_m(this)),A.folders={},Zf.each(this.__folders,(function(e,t){A.folders[t]=e.getSaveObject()})),A},save:function(){this.load.remembered||(this.load.remembered={}),this.load.remembered[this.preset]=_m(this),qm(this,!1),this.saveToLocalStorageIfPossible()},saveAs:function(A){this.load.remembered||(this.load.remembered={},this.load.remembered.Default=_m(this,!0)),this.load.remembered[A]=_m(this),this.preset=A,Wm(this,A,!0),this.saveToLocalStorageIfPossible()},revert:function(A){Zf.each(this.__controllers,(function(e){this.getRoot().load.remembered?jm(A||this.getRoot(),e):e.setValue(e.initialValue),e.__onFinishChange&&e.__onFinishChange.call(e,e.getValue())}),this),Zf.each(this.__folders,(function(A){A.revert(A)})),A||qm(this.getRoot(),!1)},listen:function(A){var e=0===this.__listening.length;this.__listening.push(A),e&&function A(e){0!==e.length&&Qm.call(window,(function(){A(e)}));Zf.each(e,(function(A){A.updateDisplay()}))}(this.__listening)},updateDisplay:function(){Zf.each(this.__controllers,(function(A){A.updateDisplay()})),Zf.each(this.__folders,(function(A){A.updateDisplay()}))}});var $m=Vm,AC=function(A){var e=this;this.indexedDB=window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB;window.IDBKeyRange||window;var t=uh.extend({},{dbName:"bos3d",store:"default",version:1,indexes:["id"],keyPath:"id"},A);this.IDBOpenDBRequest=null,this.dbName=t.dbName;var i=this.version=t.version;this.storeName=t.store;var o=t.keyPath,n=this.indexedDB.open(this.dbName,i);n.onupgradeneeded=function(A){Bh.log("DB version changed to "+i);var n=A.target.result,r=null;if(!1===n.objectStoreNames.contains(e.storeName)){r=n.createObjectStore(e.storeName,{keyPath:o});for(var a=0;t.indexes.length>a;a+=1){var s=t.indexes[a];r.createIndex(s,s,{unique:!1})}}},n.onsuccess=function(A){e.IDBOpenDBRequest=A.target.result,Bh.log("成功建立并打开数据库:"+e.IDBOpenDBRequest.name+" version "+i),e.dispatchEvent({type:Rc.ON_DATABASE_OPEN})},n.onerror=function(A){Bh.error("IndexedDB",A),e.dispatchEvent({type:Rc.ON_DATABASE_EEEOR})},n.onblocked=function(A){Bh.warn("Please close all other tabs with this site open!",A)}};Object.assign(AC.prototype,Ld.prototype),Object.assign(AC.prototype,{constructor:AC,get:function(A,e,t){if(this.IDBOpenDBRequest){var i=this.IDBOpenDBRequest.transaction([this.storeName]).objectStore(this.storeName).get(A);i.onsuccess=function(A){"function"==typeof e&&e(A.target.result?A.target.result.data:null)},i.onerror=function(A){Bh.error("getDataByKey error"),"function"==typeof t&&t(A)}}},getBatch:function(A,e,t){if(this.IDBOpenDBRequest){for(var i=this.IDBOpenDBRequest.transaction([this.storeName]).objectStore(this.storeName),o={},n=[],r=0;A.length>r;r+=1)n.push(new Promise((function(e,t){var o=A[r],n=i.index("id").get(o);n.onsuccess=function(A){e(A.target.result)},n.onerror=function(A){Bh.error(o,"failed",A),t(A)}})));Promise.all(n).then((function(A){for(var t=0;A.length>t;t+=1)A[t]&&(o[A[t].id]=A[t].data);e(o)})).catch((function(A){Bh.debug(A),A instanceof TypeError?Bh.error(A):e(o)}))}},setBatch:function(A,e,t){if(this.IDBOpenDBRequest)for(var i=this.IDBOpenDBRequest.transaction([this.storeName],"readwrite").objectStore(this.storeName),o=0;A.length>o;o+=1){i.put({id:A[o].key,data:A[o]}).onsuccess=function(A){}}},set:function(A,e,t,i){var o=performance.now();if(this.IDBOpenDBRequest){var n=this.IDBOpenDBRequest.transaction([this.storeName],"readwrite").objectStore(this.storeName).add([{id:A,data:e}]);n.onsuccess=function(A){"function"==typeof t&&t(A.target.result),Bh.debug("Saved state to IndexedDB. "+(performance.now()-o).toFixed(2)+"ms")},n.onerror=function(A){"function"==typeof i&&i(A)}}},put:function(A,e,t,i,o){if(this.IDBOpenDBRequest){var n=performance.now(),r=this.IDBOpenDBRequest.transaction([t],"readwrite").objectStore(t).put({id:A,data:e});r.onsuccess=function(A){"function"==typeof i&&i(A.target.result),Bh.debug("Saved state to IndexedDB. "+(performance.now()-n).toFixed(2)+"ms")},r.onerror=function(A){Bh.error("离线存储出错:",A.target.error.name,":",A.target.error.message),"function"==typeof o&&o(A)}}},delete:function(A,e,t){if(this.IDBOpenDBRequest){var i=this.IDBOpenDBRequest.transaction(this.storeName,"readwrite").objectStore(this.storeName).delete(A);i.onsuccess=function(A){Bh.debug("delete data form IndexedDB."),"function"==typeof e&&e(A.target.result)},i.onerror=function(A){Bh.error("IndexedDB",A),"function"==typeof t&&t(A)}}},clear:function(A,e){if(this.IDBOpenDBRequest){var t=this.IDBOpenDBRequest.transaction(this.storeName,"readwrite").objectStore(this.storeName).clear();t.onsuccess=function(e){Bh.debug("Cleared IndexedDB."),"function"==typeof A&&A(e.target.result)},t.onerror=function(A){Bh.error("IndexedDB",A),"function"==typeof e&&e(A)}}},deleteDatabase:function(A){indexedDB.deleteDatabase(this.dbName),Bh.debug(this.dbName+"数据库已删除"),"function"==typeof A&&A()},close:function(A){this.IDBOpenDBRequest&&(this.IDBOpenDBRequest.close(),Bh.debug("数据库已关闭"),"function"==typeof A&&A())},getIndex:function(A,e,t,i){var o=A.transaction(e,"readwrite").objectStore(e).index("id");o.openCursor().onsuccess=function(){var A=this.result;A&&(Bh.debug(A.value),A.continue())};var n=IDBKeyRange.only(2),r=o.openCursor(n);r.onsuccess=function(){var A=r.result;A&&Bh.info(A.value)}},destroy:function(){this.close(),this.IDBOpenDBRequest=null,this.dbName=null,this.storeName=null}});var eC=function(A){this.serverUrl=A.serverUrl,this.modelKey=A.modelKey,this.dbName=A.dbName,this.offLine=A.offLine,this.shareParameter=""!==A.share?"&share="+A.share:""};eC.prototype.projectUrl=function(A){return this.offLine?this.serverUrl+"/"+this.modelKey+"/resource/scene/scene.json":this.serverUrl+"/api/"+this.dbName+"/models?modelKey="+(A||this.modelKey)+this.shareParameter},eC.prototype.sceneUrl=function(A){return this.serverUrl+this.modelKey+"/scene/scene_"+(A=A||0)+vc.ZipResourcePostfix},eC.prototype.sceneIdUrl=function(){return this.serverUrl+this.modelKey+"/scene/scene_id"+vc.ZipResourcePostfix},eC.prototype.userIdUrl=function(){return this.serverUrl+this.modelKey+"/scene/user_id"+vc.ZipResourcePostfix},eC.prototype.octreeUrl=function(A){return this.serverUrl+this.modelKey+"/scene/octree_"+A+vc.ZipResourcePostfix},eC.prototype.symbolUrl=function(){return this.serverUrl+this.modelKey+"/symbol/symbol"+vc.ZipResourcePostfix},eC.prototype.mpkUrl=function(A){return this.offLine?this.serverUrl+"/"+this.modelKey+"/resource/data/"+A:np(this.apiVersion,"1.6.0")?this.serverUrl+"/data?fileKey="+A:this.serverUrl+"/api/"+this.dbName+"/files?fileKey="+A},eC.prototype.texUrl=function(A){return this.offLine?this.serverUrl+"/"+this.modelKey+"/resource/data/Texture/"+A:np(this.apiVersion,"1.6.0")?this.serverUrl+"/data?fileKey="+A:this.serverUrl+"/api/"+this.dbName+"/files?fileKey="+A},eC.prototype.bonesUrl=function(A){return this.offLine?this.serverUrl+"/"+this.modelKey+"/resource/data/"+A:np(this.apiVersion,"1.6.0")?this.serverUrl+"/data?fileKey="+A:this.serverUrl+"/api/"+this.dbName+"/files?fileKey="+A},eC.prototype.nodesUrl=function(A){return this.offLine?this.serverUrl+"/"+this.modelKey+"/resource/data/"+A:np(this.apiVersion,"1.6.0")?this.serverUrl+"/data?fileKey="+A:this.serverUrl+"/api/"+this.dbName+"/files?fileKey="+A},eC.prototype.clipsUrl=function(A){return this.offLine?this.serverUrl+"/"+this.modelKey+"/resource/data/"+A:np(this.apiVersion,"1.6.0")?this.serverUrl+"/data?fileKey="+A:this.serverUrl+"/api/"+this.dbName+"/files?fileKey="+A},eC.prototype.kdTreeUrl=function(A){return this.offLine?this.serverUrl+"/"+this.modelKey+"/resource/data/"+A:np(this.apiVersion,"1.6.0")?this.serverUrl+"/data?fileKey="+A:this.serverUrl+"/api/"+this.dbName+"/files?fileKey="+A},eC.prototype.lightUrl=function(A){return this.offLine?this.serverUrl+"/"+this.modelKey+"/resource/data/"+A:np(this.apiVersion,"1.6.0")?this.serverUrl+"/data?fileKey="+A:this.serverUrl+"/api/"+this.dbName+"/files?fileKey="+A},eC.prototype.rootTilesUrl=function(A){return this.offLine?this.serverUrl+"/"+this.modelKey+"/tileset.json":this.serverUrl+"/api/"+this.dbName+"/geomodels/"+this.modelKey+"/data/tileset.json"},eC.prototype.tilesUrl=function(A){return this.offLine?this.serverUrl+"/"+this.modelKey+"/"+A:this.serverUrl+"/api/"+this.dbName+"/geomodels/"+this.modelKey+"/data/"+A},eC.prototype.b3dmUrl=function(A){return this.offLine?this.serverUrl+"/"+this.modelKey+"/"+A:this.serverUrl+"/api/"+this.dbName+"/geomodels/"+this.modelKey+"/data/"+A},eC.prototype.attributeUrl=function(){if(this.offLine)return this.serverUrl+"/"+this.modelKey+"/resource/attribute/attribute.json"},eC.prototype.meshIdUrl=function(){return this.serverUrl+this.modelKey+"/mpk/mesh_id"+vc.ZipResourcePostfix},eC.prototype.materialUrl=function(){return this.serverUrl+this.modelKey+"/material/material"+vc.ZipResourcePostfix},eC.prototype.materialIdUrl=function(){return this.serverUrl+this.modelKey+"/material/material_id"+vc.ZipResourcePostfix},eC.prototype.userDataUrl=function(){return this.serverUrl+this.modelKey+"/userdata/userdata"+vc.ZipResourcePostfix},eC.prototype.textureUrl=function(A){return this.offLine?this.serverUrl+"/"+this.modelKey+"/resource/data/"+A:np(this.apiVersion,"1.6.0")?this.serverUrl+"/data?fileKey="+A:this.serverUrl+"/api/"+this.dbName+"/files?fileKey="+A+this.shareParameter},eC.prototype.axisNetUrl=function(A){return this.offLine?this.serverUrl+"/"+this.modelKey+"/resource/data/"+A:np(this.apiVersion,"1.6.0")?this.serverUrl+"/data?fileKey="+A:this.serverUrl+"/api/"+this.dbName+"/files?fileKey="+A},eC.prototype.floorInfoUrl=function(A){return this.offLine?this.serverUrl+"/"+A+"/resource/floor/floorKey.json":this.serverUrl+"/api/"+this.dbName+"/components/floorkeys?modelKey="+A+this.shareParameter},eC.prototype.floorMapUrl=function(A){return this.offLine?this.serverUrl+"/"+this.modelKey+"/resource/floor/map.json":this.serverUrl+"/api/"+this.dbName+"/models/maps?modelKey="+this.modelKey+this.shareParameter};var tC=function(A){$u.call(this,A),this.instancedComponent={}};Object.assign(tC.prototype,$u.prototype),tC.prototype.parseItemData=function(A){this._readMaterialBuffer(this.model);var e={},t=this.referencedMeshCache;for(var i in Bh.time("_readItemData"),t.components)t.components.hasOwnProperty(i)&&this._readItemData(e,i,i,void 0,0);Bh.timeEnd("_readItemData"),e=null,A&&A()},tC.prototype._readItemData=function(A,e,t){var i=this.referencedMeshCache.components[e];void 0!==i&&this._readMeshInfo(A,t,i,null)},tC.prototype._readMeshInfo=function(A,e,t,i){var o=this.referencedMeshCache,n=this.model.materialManager.materials,r=null;if(t.nodes||t.nodeIds){r=t.originalId;var a=(new M).fromArray(t.matrix||[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]);t.matrix=a;var s=[];s=t.nodes?t.nodes:t.nodeIds;for(var l=0;s.length>l;l+=1){var c=s[l];if("object"!==lc(c)&&(c=this.getReferencedMeshComponentNodeById(c)),c){var h,d=null,p="";if(-1!==c.geoId)if(d=this._getComponentNodeAttr(c,t,l)){if(t.buildInCategory&&(d.buildInCategory=t.buildInCategory),!n[p=c.material]){var g=_u[t.type]?_u[t.type].color:void 0;g||(Bh.log("Material not found for type: ",t.type),g=_u.DEFAULT.color),g||(Bh.log("Default material not found for type: ",t.type),g=[1,1,1,1]);var u=new LA(g[0],g[1],g[2]),f=p||u.getHexString()+"_"+g[3],m=n[f];m||(Bh.warn("缺少材质 "+p),m=Kd.createStandardMaterial({color:u}),1>g[3]&&(m.transparent=!0,m.opacity=g[3]),m.side=2,n[f]=m),d.material=p=f}if(n[p].aoMap){var C=this.getReferencedMeshBufferById(d.geometryId);C&&(C.uv2=C.uv)}h=d.nodeId;var y=this.userDataReader,v=y?y.getUserData(null):null;d.type=t.type,d.userId=e,d.name=t.name,d.userDataId=null,d.originalId=r,d.materialId=p,d.originMId=p,d.userData=v,d.categoryId=0,d.componentKey=e,d.familyName=t.familyName,d.familySymbol=t.familySymbol;var I=vc.Instance,E=o.reuseNodes.hasOwnProperty(h);d.instanceOrNot=!(!I||!E),d.isBatched=!0,d.state=Lc.Visible,d.material=null,this._classifyNodeInfo(d),d=null}else Bh.debug("非法node")}}}},tC.prototype._parseInstanced=function(){Bh.time("_parseInstanced"),this.instancedComponent={},this.instancedNode={};var A={},e=this.referencedMeshCache,t=e.componentNodes,i=this.model.materialManager.materials;for(var o in e.components)if(e.components.hasOwnProperty(o))for(var n=e.components[o],r=0,a=n.Nodes.length;a>r;r+=1){var s=n.Nodes[r],l=t[s],c=l.geometry,h=l.material;if(-1!==c){if(!h&&0!==h){var d=_u[n.type]?_u[n.type].color:void 0;d||(Bh.log("Material not found for type: ",n.type),d=_u.DEFAULT.color),d||(Bh.log("Default material not found for type: ",n.type),d=[1,1,1,1]);var p=new LA(d[0],d[1],d[2]),g=p.getHexString()+"_"+d[3],u=i[g];u||(Bh.warn("缺少材质 "+g),u=Kd.createStandardMaterial({color:p}),1>d[3]&&(u.transparent=!0,u.opacity=d[3]),u.side=2,i[g]=u),l.material=g,h=g}var f=h+"&"+c;void 0===A[f]&&(A[f]=[]),A[f].push({nodeId:s})}else Bh.debug("实体没有几何")}for(var m in A)if(A.hasOwnProperty(m))if(1C;C+=1)this.instancedComponent[A[m][C].nodeId]=!0;else delete A[m];Bh.timeEnd("_parseInstanced")};var iC=function(A){Xu.call(this,A),this.maxGeoLoadTaskCount=0,this.geoLoadTaskCount=0,this.taskInstancedGeometrieManager=new Ou(this,"geometrie"),this.descriptor=new tC(A.model)};(iC.prototype=Object.assign(iC.prototype,Xu.prototype))._parseMaterial=function(A,e){if(A){var t=this.descriptor;if(t)for(var i in A)t.cacheReferencedMeshMaterialData(i,A[i])}else Bh.error("没有数据")},iC.prototype.loadBatchedGeometrie=function(A,e){var t=this,i=this.loader,o=this.url,n=this.model;i.setResponseType("arraybuffer"),i.setCacheViable(!this.offLine);var r=i.load(o.mpkUrl(A),(function(i){t._parseBatchedGeometrie(i,A),Bh.debug("geo load from online"),t._onGeoTaskFinished(),e()}),void 0,(function(A){n.dispatchEventEx({type:Tc.LOAD_GEOMETRY_ERROR,modelKey:n.modelKey}),e(),t._onGeoTaskFinished()}));t.requests.loadGeometrie=r},iC.prototype.loadInstancedGeometrie=function(A,e){var t=this,i=this.loader,o=this.url,n=this.model;i.setResponseType("arraybuffer"),i.setCacheViable(!this.offLine);var r=i.load(o.mpkUrl(A),(function(i){t._parseInstancedGeometrie(i,A),Bh.debug("geo load from online"),t._onGeoTaskFinished(),e()}),void 0,(function(A){n.dispatchEventEx({type:Tc.LOAD_GEOMETRY_ERROR,modelKey:n.modelKey}),e(),t._onGeoTaskFinished()}));t.requests.loadGeometrie=r},iC.prototype._parseGeometrie=function(A,e){if(A){var t=this.descriptor;if(t)for(var i in A)A.hasOwnProperty(i)&&(A[i].position=new Float32Array(A[i].positions),delete A[i].positions,A[i].index=new Uint32Array(A[i].indices),delete A[i].indices,A[i].normal=new Float32Array(A[i].normals),A[i].uv=new Float32Array(A[i].uv),delete A[i].normals,t.cacheReferencedMeshBufferData(i,A[i]))}else Bh.error("没有数据")},iC.prototype._parseBatchedGeometrie=function(A,e){var t=new ku.BatchedGeometryReader(A,this.dataVersion),i=this.descriptor;if(i){var o=t.geoCount;Bh.time("createBatchedMeshNodes");for(var n=0;o>n;n+=1){var r=t.geomMap[n];void 0!==r.position&&void 0!==r.index&&void 0!==r.normal?(i.cacheReferencedMeshBufferData(r.geoId,r),this.handler.createBatchedMeshNodes(r)):Bh.error("Error Geometry!")}this.model.manager.viewerImpl.render(),Bh.timeEnd("createBatchedMeshNodes"),t=null}},iC.prototype._parseInstancedGeometrie=function(A,e){var t=new ku.InstancedGeometryReader(A,this.dataVersion),i=this.descriptor;if(i){var o=t.geoCount;Bh.time("createInstancedMeshNodes");for(var n=0;o>n;n+=1){var r=t.geomMap[n];void 0!==r.position&&void 0!==r.index&&void 0!==r.normal?(i.cacheReferencedMeshBufferData(r.geoId,r),this.handler.createInstancedMeshNodes(r)):Bh.error("Error Geometry!")}this.model.manager.viewerImpl.render(),t=null,Bh.timeEnd("createInstancedMeshNodes")}},iC.prototype.startLoadSceneAndGeos=function(A){Bh.time("几何数据加载时间");var e=A.scene,t=e.instancedGeometries.length||0,i=e.batchedGeometries,o=e.instancedGeometries;this.maxGeoLoadTaskCount+=e.batchedGeometries.length||0,this.maxGeoLoadTaskCount+=t,this._loadBatchedGeo(i),this._loadInstancedGeo(o)},iC.prototype._loadBatchedGeo=function(A){var e=this;if(vc.getDataFromIndexedDB&&!this.offLine){for(var t=this.url,i=[],o=0;A.length>o;o+=1)i.push(t.mpkUrl(A[o]));var n=this.model.getStorage();if(n)for(var r=function(){var t=i.splice(0,30);n.getBatch(t,(function(A){for(var i=function(i){if(A[t[i]])if(!0===A[t[i]].split){var o=A[t[i]].list,s=new Uint8Array(A[t[i]].length);n.getBatch(o,(function(A){for(var n=!0,r=0;o.length>r;r+=1)A[o[r]]?s.set(new Uint8Array(A[o[r]]),4e7*r):(n=!1,Bh.error("获取分割几何失败"));if(n){var a=t[i].indexOf("fileKey=");e._parseBatchedGeometrie(s.buffer,t[i].slice(a+8)),e._onGeoTaskFinished(),Bh.debug("load geo from local")}else{var l=e.taskGeometrieManager,c=t[i].indexOf("fileKey=");if(-1===c)return void Bh.error("url is not has fileKey");l.addTask(t[i].slice(c+8)),Bh.debug("load geo from net"),e.taskGeometrieManager.processTasks(e.loadBatchedGeometrie.bind(e))}}),(function(){Bh.error("获取分割几何失败")}))}else a=t[i].indexOf("fileKey="),e._parseBatchedGeometrie(A[t[i]],t[i].slice(a+8)),e._onGeoTaskFinished(),Bh.debug("load geo from local");else{if(r=e.taskGeometrieManager,-1===(a=t[i].indexOf("fileKey=")))return Bh.error("url is not has fileKey"),{v:void 0};r.addTask(t[i].slice(a+8)),Bh.debug("load geo from net")}},o=0;t.length>o;o+=1){var r,a,s=i(o);if("object"===lc(s))return s.v}e.taskGeometrieManager.processTasks(e.loadBatchedGeometrie.bind(e))}),(function(){for(var t=e.taskGeometrieManager,i=0;A.length>i;i+=1)t.addTask(A[i]);t.processTasks(e.loadBatchedGeometrie.bind(e))}))};i.length>0;)r()}else{for(var a=this.taskGeometrieManager,s=0;A.length>s;s+=1)a.addTask(A[s]);a.processTasks(e.loadBatchedGeometrie.bind(e))}},iC.prototype._loadInstancedGeo=function(A){var e=this;if(vc.getDataFromIndexedDB&&!this.offLine){for(var t=this.url,i=[],o=0;A.length>o;o+=1)i.push(t.mpkUrl(A[o]));var n=this.model.getStorage();if(n)for(var r=function(){var t=i.splice(0,30);n.getBatch(t,(function(A){for(var i=function(i){if(A[t[i]])if(!0===A[t[i]].split){var o=A[t[i]].list,s=new Uint8Array(A[t[i]].length);n.getBatch(o,(function(A){for(var n=0;o.length>n;n+=1)A[o[n]]?s.set(new Uint8Array(A[o[n]]),4e7*n):Bh.error("获取分割几何失败");var r=t[i].indexOf("fileKey=");e._parseInstancedGeometrie(s.buffer,t[i].slice(r+8)),e._onGeoTaskFinished(),Bh.debug("load geo from local")}),(function(){Bh.error("获取分割几何失败")}))}else a=t[i].indexOf("fileKey="),e._parseInstancedGeometrie(A[t[i]],t[i].slice(a+8)),e._onGeoTaskFinished(),Bh.debug("load geo from local");else{if(r=e.taskInstancedGeometrieManager,-1===(a=t[i].indexOf("fileKey=")))return Bh.error("url is not has fileKey"),{v:void 0};r.addTask(t[i].slice(a+8)),Bh.debug("load geo from net")}},o=0;t.length>o;o+=1){var r,a,s=i(o);if("object"===lc(s))return s.v}e.taskInstancedGeometrieManager.processTasks(e.loadInstancedGeometrie.bind(e))}),(function(){for(var t=e.taskInstancedGeometrieManager,i=0;A.length>i;i+=1)t.addTask(A[i]);t.processTasks(e.loadInstancedGeometrie.bind(e))}))};i.length>0;)r()}else{for(var a=this.taskInstancedGeometrieManager,s=0;A.length>s;s+=1)a.addTask(A[s]);a.processTasks(e.loadInstancedGeometrie.bind(e))}},iC.prototype._onGeoTaskFinished=function(){(this.geoLoadTaskCount+=1,this.notifyProgress)&&(this.progressCallback&&this.progressCallback({total:this.maxLoadTaskCount+this.maxGeoLoadTaskCount,loaded:.8*(this.loadTaskCount+this.geoLoadTaskCount),modelKey:this.model.modelKey}));this.maxGeoLoadTaskCount>this.geoLoadTaskCount||(this.dataLoaded=!0,Bh.timeEnd("几何数据加载时间"),this.geoFinishCallback&&this.geoFinishCallback())},iC.prototype.getSceneTaskCount=function(A){var e=A.scenes;return e+=A.lines,e+=A.mpks,vc.BorderLineDelayLoaded||(e+=this.getAllBorderlineCount()),e};var oC=function(A,e){tf.call(this,A),this.defaultManager=new Of(e,A),this.instancedManager=new Hf(A),this.loader=new iC(this)};(oC.prototype=Object.create(tf.prototype)).prepare=function(A,e){if(this.isLoaded()&&!this.isHidden()){this.prepareWireframe(this.model,e);this.model.getMaterialManager();this.model.getMaterialManager()._updateTextureMapping(),!this.model.lightmap||this.model.enableLightmap===vc.EnableLightmap&&this.model.lightmapIntensity===vc.LightmapIntensity||(this.model.enableLightmap=vc.EnableLightmap,this.model.lightmapIntensity=vc.LightmapIntensity,this.rebuildIndicesforLightmap(),this.updateNodes())}},oC.prototype.settleData=function(A){var e=this;this.addNodeInfoToOctantMap(),e.model.setLoaded(!0);this.loader.geoFinishCallback=function(){e.loaded=!0,e.model.getMaterialManager()._updateTextureMapping(),e.clearCachedData(e.model),A&&A()},this.loader.startLoadSceneAndGeos(this.model.getConfig())},oC.prototype.addNodeInfoToOctantMap=function(){var A=this.model.manager,e=this.model.getEncodedDatabagId();this.loader.getDescriptor().traverseNodeInfosByComponent((function(t,i){A.addNodeInfoToOctantMap(e,t,i)}))},oC.prototype.createMeshNodes=function(A){var e=this,t=this.model;vc.stepLoad&&t.setLoaded(!0);var i=this.loader.getDescriptor();this.instancedManager.createMeshNodes(t,i.getInstancedUserIds()),this.defaultManager.asyncCreateMeshNodes(t,i.getStandardUserIds(),(function(){t.getMaterialManager()._updateTextureMapping(),e.clearCachedData(t),e.loaded=!0,A&&A()}))},oC.prototype.clearCachedData=function(A){this.loader.getDescriptor().destroyReader(),this.loader.getDescriptor().clearReferencedMeshCache(),this.defaultManager.clearCachedData(),this.instancedManager.clearCachedData()},oC.prototype.createBatchedMeshNodes=function(A){this.defaultManager.createBatchedMeshNodes(this.model,A)},oC.prototype.createInstancedMeshNodes=function(A){this.instancedManager.createInstancedMeshNodes(this.model,A)};var nC=function(A){Xu.call(this,A),this._loadingOnDemand=!1};(nC.prototype=Object.assign(nC.prototype,Xu.prototype)).loadGeopkOnDemand=function(A,e,t){this.loadTaskCount=0,this.maxLoadTaskCount=A.length,this._loadingOnDemand=!0,this.finishCallback=t;var i=this;if(vc.getDataFromIndexedDB&&!this.offLine){for(var o=this.url,n=[],r=0;A.length>r;r+=1)n.push(o.mpkUrl(A[r]));var a=this.model.getStorage();a&&a.getBatch(n,(function(A){for(var t=function(e){if(A[n[e]])if(!0===A[n[e]].split){var t=A[n[e]].list,o=new Uint8Array(A[n[e]].length);a.getBatch(t,(function(A){for(var r=0;t.length>r;r+=1)A[t[r]]?o.set(new Uint8Array(A[t[r]]),4e7*r):Bh.error("获取分割几何失败");var a=n[e].indexOf("fileKey=");i._parseGeometrie(o.buffer,n[e].slice(a+8)),Bh.debug("load geo from local"),i._onTaskFinished()}),(function(){Bh.error("获取分割几何失败")}))}else s=n[e].indexOf("fileKey="),i._parseGeometrie(A[n[e]],n[e].slice(s+8)),Bh.debug("load geo from local"),i._onTaskFinished();else{if(r=i.taskGeometrieManager,-1===(s=n[e].indexOf("fileKey=")))return Bh.error("url is not has fileKey"),{v:void 0};r.addTask(n[e].slice(s+8)),Bh.debug("load geo from net")}},o=0;n.length>o;o+=1){var r,s,l=t(o);if("object"===lc(l))return l.v}i.taskGeometrieManager.processTasks(i.loadGeometrie.bind(i),e)}),(function(){for(var t=i.taskGeometrieManager,o=0;A.length>o;o+=1)t.addTask(A[o]);t.processTasks(i.loadGeometrie.bind(i),e)}))}else{for(var s=this.taskGeometrieManager,l=0;A.length>l;l+=1)s.addTask(A[l]);s.processTasks(i.loadGeometrie.bind(i),e,t)}},nC.prototype.resetProcessState=function(A){this.loadTaskCount=0,this.maxLoadTaskCount=A,this._loadingOnDemand=!0},nC.prototype.dealProgressSegment=function(A,e){return vc.MergeComponent&&this._loadingOnDemand?e*A.progressPercentage.load:e},nC.prototype._loadLayerKey=function(){var A=this,e=this.fileLoader,t=this.url,i=this.model,o=this.handler.getLayerProvider();e.setResponseType(""),e.load(t.layerKeyUrl(),(function(e){var t=new LayerKeyReader(e),i=[],n=t.getData();o.cacheLayerKeys(n);for(var r=0,a=t.getCount();a>r;++r){var s=t.getLayerKey(r),l=o.formatLayerIds(s);i.push(l[0])}A._loadLayer(i)}),void 0,(function(e){i.dispatchEvent({type:Tc.LOAD_ERROR,errorType:Tc.LOAD_MPK_ERROR,event:e}),A._onTaskFinished()}))},nC.prototype._loadLayer=function(A){var e=this,t=this.fileLoader,i=this.url,o=this.model,n=this.handler.getLayerProvider();t.setResponseType("arraybuffer"),t.load(i.layerUrl(),(function(t){for(var i=new LayerReader(t),o=0,r=i.getLayerCount();r>o;++o)if(void 0!==A[o]){for(var a=[],s=i.getLayerData(o),l=i.getGeopkList(o),c=0,h=l.length;h>c;c+=1)a.push(l[c]);n.cacheLayerData(A[o],{layerId:s.layer_id,boundingBox:s.boundingBox,mpkIdxs:a})}e._onTaskFinished()}),void 0,(function(A){o.dispatchEvent({type:Tc.LOAD_ERROR,errorType:Tc.LOAD_MPK_ERROR,event:A}),e._onTaskFinished()}))},nC.prototype.delayLoadResources=function(A){var e=this.model.getConfig().metadata;e&&0!==e.lines?(this.startCallback=null,this.progressCallback=null,this.finishCallback=A,this.loadTaskCount=0,this.maxLoadTaskCount=0,this.maxLoadTaskCount+=e.lines,e.lines&&this._loadLine()):A&&A()};var rC=function(A){Af.call(this,A)};(rC.prototype=Object.assign(rC.prototype,Af.prototype)).parseItemData=function(A,e){var t=this.model;(ap(t.dataVersion,"2.0.0")||void 0===t.dataVersion)&&(Bh.time("升级几何结构"),this._updateV1ToV2(t),t.dataVersion="2.0.0",Bh.timeEnd("升级几何结构")),this._readMaterialBuffer(t),t.hasAnimation&&vc.EnableAnimation?(this._parseClips(),this._parseBones()):(this._parseGeo(),vc.Instance&&sp(t.dataVersion,"2.0.0")&&this._parseInstanced());var i={};if(!i)return Bh.log("Empty scene"),!1;var o=this.referencedMeshCache;if(Bh.time("_readItemData"),!o.bufferData||0>=Object.keys(o.bufferData).length)return!0;if(A)for(var n=0,r=A.length;r>n;n+=1)o.components[A[n]]&&this._readItemData(i,A[n],A[n],void 0,0);else for(var a in o.components)this._readItemData(i,a,a,void 0,0);t.hasAnimation&&vc.EnableAnimation&&this._parseNodes(),Bh.timeEnd("_readItemData"),i=null,e&&e()};var aC=function(A){nC.call(this,A),this.descriptor=new rC(A.model)};(aC.prototype=Object.assign(aC.prototype,nC.prototype)).loadSceneAndMpks=function(A){this._loadScene(0),this._loadLayerKey(),vc.BorderLineDelayLoaded||this._loadAllBorderlines(A)},aC.prototype.getSceneTaskCount=function(A){var e=2;return vc.BorderLineDelayLoaded||(e+=this.getAllBorderlineCount()),e};var sC=function(A){tf.call(this,A),this.layerDataLoaded=!1,this.loadedUserIdsObject=null,this.loadedUserIds=null,this.layerProvider=null,this.firstToLoad=!1};(sC.prototype=Object.assign(sC.prototype,tf.prototype)).destroy=function(){sC.prototype.destroy.call(this),this.loadedUserIdsObject=null,this.loadedUserIds=null,this.layerProvider.destroy(),this.layerProvider=null},sC.prototype.getLayerProvider=function(){return this.layerProvider},sC.prototype.load=function(A){var e=this,t=this.model;this.loader.setNotifyProgress(A),this.loader.load((function(){t.manager.dispatchEvent({type:Rc.ON_LOAD_START})}),(function(A){t.manager.dispatchEvent({type:Rc.ON_LOAD_PROGRESS,progress:A})}),(function(){e.processLoadCompleted((function(){t.manager.dispatchEvent({type:Rc.ON_LOAD_COMPLETE,modelKey:e.model.modelKey})}))}))},sC.prototype.unload=function(A,e){},sC.prototype.loadGeopkOnDemand=function(A,e,t,i){var o=this,n=this.model,r=!A,a=function(A){n.manager.dispatchEvent({type:Rc.ON_LOAD_PROGRESS,progress:A})};this.firstToLoad?this.loader.delayLoadResources((function(){o.firstToLoad=!1,o.loader.finishCallback=null,o.prepareData((function(){o.loader.progressCallback=a,o.getLayerProvider().setConditionsOnDemandLoad(A),o._loadGeopkOnDemand(r,e,t,i)}))})):(o.loader.progressCallback=a,o.getLayerProvider().setConditionsOnDemandLoad(A),o._loadGeopkOnDemand(r,e,t,i))},sC.prototype._loadGeopkOnDemand=function(A,e,t,i){var o=this,n=this.model;this.layerDataLoaded=!1,e&&e(),n.manager.dispatchEvent({type:Rc.ON_LOAD_START}),this.getLayerProvider().loadGeopkOnDemand(A,(function(A){o.dealData(A)}),(function(A,e){}),t,(function(){o.layerDataLoaded=!0,n.manager.updateFilterManager(),Bh.log("load finish"),n.dispatchEventEx({type:Rc.ON_DEMAND_LOAD_COMPLETE,data:{boundingBox:n.manager.getLoadOnDemandDirector().getBoundingBoxForUsedComponent()},modelKey:o.model.modelKey}),i&&i()}))},sC.prototype.processLoadCompleted=function(A){var e=this.model;e.materialManager._updateTextureMapping(),e.materialManager._updateIBL(e),e.loaded=!0,e.updateOctreeNode(),requestAnimationFrame((function(){A&&A(),e.debut(e)}))},sC.prototype.isAllReady=function(){return!(!this.isLoaded()||this.isHidden()||!this.isLayerDataLoaded())},sC.prototype.applyFilter=function(){if(this.isLoaded()&&this.isLayerDataLoaded()){var A=this.model.getModelDescriptor().getStandardUserIdsByCategory(this.loadedUserIds);if(A.length&&this.defaultManager.applyFilter(this.model,A),vc.Instance){var e=this.model.getModelDescriptor().getInstancedUserIdsByCategory(this.loadedUserIds);e.length&&this.instancedManager.applyFilter(this.model,e)}}},sC.prototype.needUpdate=function(){return!!this.isLayerDataLoaded()},sC.prototype.clearData=function(){},sC.prototype.initData=function(A){},sC.prototype.dealMeshNodes=function(A){},sC.prototype.dealData=function(A){var e=this;this.initData((function(){e.model.manager.loadOverrideMaterialsByDemand((function(){e.dealMeshNodes(A)}),(function(){e.dealMeshNodes(A)}))}))},sC.prototype.getLoadedUserIdsObject=function(){return this.loadedUserIdsObject},sC.prototype.isLayerDataLoaded=function(){return this.layerDataLoaded},sC.prototype.clearLoadedState=function(){this.layerDataLoaded=!1,this.loadedUserIdsObject=null,this.loadedUserIds=null};var lC=function(A){this.model=A,this.conditionsChanged=!0,this.nodeInfosWithLayerKey={},this.cachedLayerData={},this.cacheAttributes=null,this.cacheSpecialtysLevels={},this.mapLayerKeys={},this.lastUsedGeopkIdxsObject=null,this.lastUsedLayerIdsObject=null,this.lastUsedLayerData=null,this.mapNeededConditions=null};lC.prototype.destroy=function(){this.cachedLayerData=null,this.nodeInfosWithLayerKey=null,this.cacheAttributes=null,this.cacheSpecialtysLevels=null,this.mapLayerKeys=null,this.lastUsedLayerData=null,this.lastUsedGeopkIdxsObject=null,this.lastUsedLayerIdsObject=null,this.mapNeededConditions=null},lC.prototype.clearData=function(){},lC.prototype.loadLayerDataByIdxs=function(A,e,t,i){},lC.prototype.dealLayerDataLoading=function(A,e,t,i,o){},lC.prototype.loadGeopkOnDemand=function(A,e,t,i,o){var n=A?this.getAllLayerIdxData():this.getUsedLayerIdxData();this.dealLayerDataLoading(this.getLayerIdxInfoByLayerData(n),e,t,i,o)},lC.prototype.getUsedIdxsInfoFrom=function(A,e){var t=null,i={},o={},n={},r={};if(A&&A.length)for(var a=0,s=A.length;s>a;a+=1)i[t=A[a]]=!0;if(e)if(uh.isEmptyObject(i))n=e;else{for(t in e)i[t]&&(r[t]=!0);if(uh.isEmptyObject(r))o=i,n=e;else{for(t in e)r[t]||(n[t]=!0);for(t in i)r[t]||(o[t]=!0)}}else uh.isEmptyObject(i)||(o=i);return{objCurrUsedIdxs:i,addIdxs:Object.keys(o),removeIdxs:Object.keys(n)}},lC.prototype.getLayerIdxInfoByLayerData=function(A){var e=null,t=null;A?(e=A.layerIds,t=A.mpkIdxs):(e=null,t=null);var i=this.getUsedIdxsInfoFrom(e,this.lastUsedLayerIdsObject);this.lastUsedLayerIdsObject=i.objCurrUsedIdxs;var o=this.getUsedIdxsInfoFrom(t,this.lastUsedGeopkIdxsObject);return this.lastUsedGeopkIdxsObject=o.objCurrUsedIdxs,{layerScene:i,mpk:o}},lC.prototype.getUsedLayerIdxData=function(){if(!this.isConditionsChanged()&&this.lastUsedLayerData)return this.lastUsedLayerData;this.setConditionsChanged(!1);var A=this.getConditionsOnDemand();if(!A)return this.lastUsedLayerData=null,null;this.getCachedLayerData();for(var e=[],t=A,i=this.model.getModelDescriptor().referencedMeshCache.components,o=this.model.getModelDescriptor(),n=0,r=t.length;r>n;n+=1){var a=t[n],s=i[a];if(s)if(s.nodes||s.nodeIds)for(var l=null,c=0,h=(l=s.nodes?s.nodes:s.nodeIds).length;h>c;c+=1){var d=l[c];if("object"!==lc(d)&&(d=o.getReferencedMeshComponentNodeById(d)),d){var p=this.getFileKeyByGeoId(d.geoId);p&&e.push(p)}}else{var g=this.getFileKeyByGeoId(i[a].geoId);g&&e.push(g)}}return this.lastUsedLayerData={layerIds:[],layerKeys:[],boundingBoxes:[],mpkIdxs:e},this.lastUsedLayerData},lC.prototype.getFileKeyByGeoId=function(A){for(var e in this.cachedLayerData)if(this.cachedLayerData.hasOwnProperty(e)){var t=this.cachedLayerData[e];if(A>=t[0]&&t[1]>=A)return e}return window.geoidToFileKeyMap?window.geoidToFileKeyMap[A]:null},lC.prototype.getAllLayerIdxData=function(){this.setConditionsChanged(!1);var A=this.getCachedLayerData();if(!A)return null;var e=[],t=[],i=[],o=[];for(var n in A){for(var r=A[n].mpkIdxs,a=0,s=r.length;s>a;a+=1)i.push(r[a]);e.push(n),t.push(A[n].layerId),o.push(A[n].boundingBox)}return{layerIds:t,layerKeys:e,boundingBoxes:o,mpkIdxs:i}},lC.prototype.getUserIdsOnDemand=function(){var A={},e=this.getConditionsOnDemand();if(e)for(var t in e)A[e[t]]=!0;return A},lC.prototype.cacheLayerData=function(A,e){this.cachedLayerData[A]=e},lC.prototype.getCachedLayerData=function(){return this.cachedLayerData},lC.prototype.clearNodeInfoCacheWithLayerKey=function(){this.nodeInfosWithLayerKey={}},lC.prototype.cacheNodeInfoByLayerKey=function(A,e){this.nodeInfosWithLayerKey[A]||(this.nodeInfosWithLayerKey[A]=[]),this.nodeInfosWithLayerKey[A].push(e)},lC.prototype.cacheNodeInfosWithLayerKey=function(){var A=this.model.getModelDescriptor().getAllNodeInfos();for(var e in A)for(var t=A[e],i=0,o=t.length;o>i;i+=1){var n=t[i],r=this.formatLayerIds(n.userData);this.cacheNodeInfoByLayerKey(r[0],n)}},lC.prototype.cacheLayerKeys=function(A){this.mapLayerKeys=A;var e={},t=this.getLayerKeyAttributes();for(var i in A){var o=A[i],n=o[t[0]],r=o[t[1]];e.hasOwnProperty(n)||(e[n]=[]),e.hasOwnProperty(r)||(e[r]=[]),e[n].push(r),e[r].push(n)}this.cacheSpecialtysLevels=e},lC.prototype.getLayerKeyAttributes=function(){if(this.cacheAttributes)return this.cacheAttributes;var A=[],e=Object.keys(this.mapLayerKeys),t=this.mapLayerKeys[e[0]];for(var i in t)t.hasOwnProperty(i)&&A.push(i);return this.cacheAttributes=A,this.cacheAttributes},lC.prototype.formatLayerIds=function(A){var e=[];if(!A)return e.push("unknown"),e;var t=this.getFileKeyByGeoId(A.originalGeometryId);return e.push(t||"unknown"),e},lC.prototype.getLevelsOrSpecialtys=function(A){return this.cacheSpecialtysLevels.hasOwnProperty(A)?this.cacheSpecialtysLevels[A]:(Bh.warn("Attribute "+A+"has no according levels or specialtys."),[])},lC.prototype.getUnionBoundingBoxOnDemand=function(){var A=this.getBoundingBoxesOnDemand();if(A&&A.length>0){for(var e=new aA,t=0,i=A.length;i>t;t+=1)e.union(A[t]);return e}return null},lC.prototype.getBoundingBoxesOnDemand=function(){var A=this.getUsedLayerIdxData();return A?A.boundingBoxes:null},lC.prototype.setConditionsOnDemandLoad=function(A){this.mapNeededConditions=A,this.setConditionsChanged(!0)},lC.prototype.setConditionsChanged=function(A){this.conditionsChanged=A},lC.prototype.getConditionsOnDemand=function(){return this.mapNeededConditions},lC.prototype.isConditionsChanged=function(){return this.conditionsChanged};var cC=function(A){lC.call(this,A)};(cC.prototype=Object.assign(cC.prototype,lC.prototype)).loadLayerDataByIdxs=function(A,e,t,i){this.model.getLoader().resetProcessState(e.length),this.model.getLoader().loadGeopkOnDemand(e,(function(A,e){t&&t(e-A,e)}),i)},cC.prototype.dealLayerDataLoading=function(A,e,t,i,o){var n=A.mpk;if(0!==n.addIdxs.length||0!==n.removeIdxs.length){var r=!1;n.removeIdxs.length>0&&(r=!0,t&&t(null,n.removeIdxs)),n.addIdxs.length>0?this.loadLayerDataByIdxs(null,n.addIdxs,i,(function(){e&&e(o)})):r?e&&e(o):o&&o()}else e&&e(o)};var hC=function(A){return sC.call(this,A),this.layerProvider=new cC(A),this};(hC.prototype=Object.assign(hC.prototype,sC.prototype)).settleData=function(A){this.addNodeInfoToOctantMap(),this.getLayerProvider().cacheNodeInfosWithLayerKey(),this.loaded=!0,A&&A()},hC.prototype.clearData=function(){this.model.clearNodeGroup(),this.model.clearMeshFromOctantMap(),this.getLayerProvider().clearData(),this.model.clearWireframeElementCount(),this.defaultManager.clearData(),this.instancedManager.clearData(),this.clearLoadedState()},hC.prototype.addNodeInfoToOctantMap=function(){var A=this.model.manager,e=this.model.getEncodedDatabagId();this.model.getModelDescriptor().traverseNodeInfosByComponent((function(t,i){A.addNodeInfoToOctantMap(e,t,i)}))},hC.prototype.initData=function(A){var e=this;e.model.getModelDescriptor().parseItemData(e.layerProvider.getConditionsOnDemand(),(function(){e.settleData(),e.loadedUserIdsObject=e.getLayerProvider().getUserIdsOnDemand(),e.loadedUserIds=Object.keys(e.loadedUserIdsObject),A&&A()}))},hC.prototype.unload=function(A,e){var t=this;this.model.getModelDescriptor().clearReferencedMeshCacheByGeopkIdxs(e,(function(A){t.defaultManager.disposeGeometry(A)}))};var dC=function(A,e){return hC.call(this,A,e),this.tag="layer",this.defaultManager=new Of(e,A),this.instancedManager=new Hf(A),this.loader=new aC(this),this};(dC.prototype=Object.assign(dC.prototype,hC.prototype)).prepare=function(A,e){this.isAllReady()&&(this.prepareWireframe(this.model,e),this.model.getMaterialManager()._updateTextureMapping(this.model))},dC.prototype.dealMeshNodes=function(A){delete this.model.manager.octantToObjectMap[this.model.modelKey],this.addNodeInfoToOctantMap();var e=this.model.getModelDescriptor().getInstancedUserIdsByCategory(this.loadedUserIds);this.model._removeNodeGroup(gp.INSTANCEGEOMETRY),this.model._removeNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY),this.instancedManager.meshManager.dispose(),this.instancedManager.meshManager.disposeInstanceGeometries(),e.length&&this.instancedManager.createMeshNodes(this.model,e);var t=this.model.getModelDescriptor().getStandardUserIdsByCategory(this.loadedUserIds);this.model._removeNodeGroup(gp.GEOMETRY),this.model._removeNodeGroup(gp.WIREFRAME),this.defaultManager.meshManager.dispose(),this.defaultManager.meshManager.clearData(),t.length?this.defaultManager.asyncCreateMeshNodes(this.model,t,A):A&&A()},dC.prototype.unloadComponents=function(A,e){for(var t=this.model.modelKey,i=0,o=A.length;o>i;i+=1)this.model.manager.removeBatchedMeshFromOctantMap(t,A[i]);this.model.getModelDescriptor().clearNodeInfoCacheByComponentsKey(A),this.dealMeshNodes(e)};var pC=function(A){$u.call(this,A)};(pC.prototype=Object.assign(pC.prototype,$u.prototype)).parseItemData=function(A,e){var t=this.model;(ap(t.dataVersion,"2.0.0")||void 0===t.dataVersion)&&(Bh.time("升级几何结构"),this._updateV1ToV2(t),t.dataVersion="2.0.0",Bh.timeEnd("升级几何结构")),this._readMaterialBuffer(t),t.hasAnimation&&vc.EnableAnimation?(this._parseClips(),this._parseBones()):this._parseGeo();var i={};if(!i)return Bh.log("Empty scene"),!1;var o=this.referencedMeshCache;if(Bh.time("_readItemData"),!o.bufferData||0>=Object.keys(o.bufferData).length)return!0;if(A)for(var n=0,r=A.length;r>n;n+=1)o.components[A[n]]&&this._readItemData(i,A[n],A[n],void 0,0);else for(var a in o.components)this._readItemData(i,a,a,void 0,0);t.hasAnimation&&vc.EnableAnimation&&this._parseNodes(),Bh.timeEnd("_readItemData"),i=null,e&&e()};var gC=function(A){nC.call(this,A),this.descriptor=new pC(A.model)};(gC.prototype=Object.assign(gC.prototype,nC.prototype)).loadSceneAndMpks=function(A){this._loadScene(0),this._loadLayerKey(),vc.BorderLineDelayLoaded||this._loadAllBorderlines(A)},gC.prototype.getSceneTaskCount=function(A){var e=2;return vc.BorderLineDelayLoaded||(e+=this.getAllBorderlineCount()),e};var uC=function(A){of.call(this,A),this.nodeGroupName="PickingMeshGroup"};Object.assign(uC.prototype,of.prototype),eu(uC,[{key:"disposePickingNodeById",value:function(A){for(var e=Object.keys(this.pickingNodeMap[A]),t=0,i=e.length;i>t;t+=1)for(var o=this.pickingNodeMap[A][e[t]],n=0,r=o.length;r>n;n+=1)o[n].material=null,o[n].geometry.dispose(),o[n]=null}},{key:"removeFormPickingNodeGroup",value:function(A){if(this.pickingNodeGroup)for(var e=Object.keys(this.pickingNodeMap[A]),t=0,i=e.length;i>t;t+=1)for(var o=this.pickingNodeMap[A][e[t]],n=0,r=o.length;r>n;n+=1)this.pickingNodeGroup.remove(o[n])}},{key:"addToPickingNodeMap",value:function(A,e,t){this.pickingNodeMap||(this.pickingNodeMap={}),this.pickingNodeMap[A]||(this.pickingNodeMap[A]={}),this.pickingNodeMap[A][e]=t,this.addToPickingNodeGroup(t)}},{key:"generatePickingMeshes",value:function(A){var e=this;this.manager.traverseActiveMeshMap(A,(function(A,t,i){if(!e._isExistNode(A,t)){for(var o=[],n=0,r=i.length;r>n;n+=1){var a=i[n],s=new he;s.setAttribute("position",a.geometry.getAttribute("position")),s.setIndex(a.geometry.getIndex()),s._withDrawRange&&s.setDrawRange(a.geometry.drawRange.start,a.geometry.drawRange.count);var l=new(a.isLineSegments?jo:Ue)(s,Kd.DefaultMaterial);Tu.copyMeshProperties(l,a),l.renderOrder=1,o.push(l)}e.addToPickingNodeMap(A,t,o)}}))}},{key:"_isExistNode",value:function(A,e){return!!(this.pickingNodeMap&&this.pickingNodeMap[A]&&this.pickingNodeMap[A][e])}},{key:"updatePickingMeshesState",value:function(A,e,t){if(this.pickingNodeMap)for(var i=this.pickingNodeMap,o=this.manager,n=0,r=e.length;r>n;n+=1){var a=e[n];if(i[a]&&o.isPickableNode(a)){var s=o.getActiveMeshMapById(a);if(s)for(var l=Object.keys(i[a]),c=0,h=l.length;h>c;c+=1){var d=l[c];if(s[d]){var p=i[a][d];if(p)for(var g=0,u=p.length;u>g;g+=1)p[g].material=A,p[g].visible=!0}}}}}},{key:"resetPickingMeshesState",value:function(){if(this.pickingNodeMap)for(var A=this.pickingNodeMap,e=Object.keys(A),t=0,i=e.length;i>t;t+=1)for(var o=e[t],n=Object.keys(A[o]),r=0,a=n.length;a>r;r+=1)for(var s=A[o][n[r]],l=0,c=s.length;c>l;l+=1)s[l].visible=!1}},{key:"updatePickingMeshes",value:function(A,e,t){return this.generatePickingMeshes(e),this.resetPickingMeshesState(),this.updatePickingMeshesState(A,e,t),this.getPickingNodeGroup()}}]);var fC=function(A,e){So.call(this),this.type="SkinnedMeshEx",this.matrixAutoUpdate=!0,this.active=!1,this.guid="",this.key="",this.typeEx="",this.geometry=A||Tu.EmptyGeometry,this.material=e||Kd.DefaultMaterial,this.visible=!1,this.castShadow=vc.EnableShadow,this.receiveShadow=vc.EnableShadow};(fC.prototype=Object.create(So.prototype)).constructor=fC,fC.prototype.init=function(A){A&&A.parent&&A.parent.add(this)},fC.prototype.destroy=function(){this.parent&&this.parent.remove(this),this.userData&&(this.userData=null),this.geometry=null,this.material=null},fC.prototype.isVisible=function(){return this.visible&&this.active},fC.prototype.spawn=function(A){void 0!==A.guid&&(this.guid=A.guid),void 0!==A.key&&(this.key=A.key),void 0!==A.name&&(this.name=A.name),void 0!==A.typeEx&&(this.typeEx=A.typeEx),A.geometry&&(this.geometry=A.geometry),A.material&&(this.material=A.material),A.matrix?(this.matrix.copy(A.matrix),this.updateMatrixWorld(!0)):(this.matrix.identity(),this.updateMatrixWorld(!0)),this.modelKey=A.modelKey?A.modelKey:"",A.userData?this.userData=A.userData:this.userData&&(this.userData=null),void 0!==A.visible&&(this.visible=A.visible),this.renderOrder=A.renderOrder||0,this.active=!0,this.visible=!0,this.frustumCulled=!1,this.matChange=!1},fC.prototype.clear=function(){this.geometry=Tu.EmptyGeometry,this.material=Kd.DefaultMaterial,this.active=!1,this.visible=!0,this.guid="",this.key="",this.typeEx="",this.frustumCulled=!0,this.material.visible=!1},fC.prototype.intersectBoxWithDistance=function(){var A=new aA;return function(e,t){var i=this.geometry,o=this.material,n=this.matrixWorld;return t&&(n=new M).multiplyMatrices(this.matrixWorld,t),void 0===o?-1:(i.boundingBox||i.computeBoundingBox(),A.copy(i.boundingBox),A.applyMatrix4(n),e.ray.intersectBoxWithDistance(A))}}(),fC.prototype.intersectBoxWithDistanceByIndices=function(A,e){var t=this.matrixWorld,i=this.computeBoundingBox(e);return i.applyMatrix4(t),A.ray.intersectBoxWithDistance(i)},fC.prototype.intersectBoxWithClipPlane=function(A,e){var t=this.matrixWorld,i=this.computeBoundingBox(e);return i.applyMatrix4(t),i.intersectsPlane(A)},fC.prototype.raycastByIndices=function(){var A=new M,e=new CA,t=new cA,i=new y,o=new y,n=new y,r=new s,a=new s,l=new s,c=new y,h=new y,d=new y,p=new M;function g(A,e,t,s,g,u,f,m){i.fromBufferAttribute(s,u),o.fromBufferAttribute(s,f),n.fromBufferAttribute(s,m);var C=function(A,e,t,i,o,n,r){var a=A.material;if(null===(Array.isArray(a)?t.intersectTriangle(i,o,n,!1,r):1===a.side?t.intersectTriangle(n,o,i,!0,r):t.intersectTriangle(i,o,n,2!==a.side,r)))return null;d.copy(r),d.applyMatrix4(p);var s=e.ray.origin.distanceTo(d);return e.near>s||s>e.far?null:{distance:s,point:d.clone(),object:A}}(A,e,t,i,o,n,h);if(C){if(g&&g.array&&g.array.length&&(r.fromBufferAttribute(g,u),a.fromBufferAttribute(g,f),l.fromBufferAttribute(g,m),C.uv=function(A,e,t,i,o,n,r){return RA.getBarycoord(A,e,t,i,c),o.multiplyScalar(c.x),n.multiplyScalar(c.y),r.multiplyScalar(c.z),o.add(n).add(r),o.clone()}(h,i,o,n,r,a,l)),s.instanceMatrix){var v=i.clone().applyMatrix4(s.instanceMatrix),I=o.clone().applyMatrix4(s.instanceMatrix),E=n.clone().applyMatrix4(s.instanceMatrix);C.face=new GA(u,f,m,RA.getNormal(v,I,E,new y))}else C.face=new GA(u,f,m,RA.getNormal(i,o,n,new y));C.faceIndex=u}return C}return function(i,o,n,r){var a=this.geometry,s=this.material;if(r){a=this.geometry,s=this.material;if((p=new M).multiplyMatrices(this.matrixWorld,r),void 0===s)return;if(null===a.boundingSphere&&a.computeBoundingSphere(),t.copy(a.boundingSphere),t.applyMatrix4(p),!1===i.ray.intersectsSphere(t))return;if(A.getInverse(p),e.copy(i.ray).applyMatrix4(A),null!==a.boundingBox&&!1===e.intersectsBox(a.boundingBox))return;var l=null,c=null,h=null,d=null,u=a.index;(I=a.attributes.position).instanceMatrix=r;var f=a.attributes.uv,m=null,C=null;if(null!==u)for(m=0,C=u.count;C>m;m+=3)c=u.getX(m),h=u.getX(m+1),d=u.getX(m+2),(l=g(this,i,e,I,f,c,h,d))&&(l.faceIndex=Math.floor(m/3),o.push(l));else for(m=0,C=I.count;C>m;m+=3)(l=g(this,i,e,I,f,c=m,h=m+1,d=m+2))&&(l.index=c,o.push(l))}else{if(p=this.matrixWorld,void 0===s)return;if(t.copy(this.computeBoundingSphere(n)),t.applyMatrix4(p),!1===i.ray.intersectsSphere(t))return;A.getInverse(p),e.copy(i.ray).applyMatrix4(A);var y=this.computeBoundingBox(n);if(!1===e.intersectsBox(y))return;l=null,c=null,h=null,d=null;var v,I=a.attributes.position,E=(f=a.attributes.uv,m=null,n.indexStart),B=n.indexStart+n.indexCount,x=a.getIndex().array;for(m=E,v=B;v>m;m+=3)(l=g(this,i,e,I,f,c=x[m],h=x[m+1],d=x[m+2]))&&(l.faceIndex=Math.floor(m/3),o.push(l))}}}(),fC.prototype.minDistanceToTri=function(A,e,t){function i(A,e){return new y(A.x-e.x,A.y-e.y,A.z-e.z)}function o(A,e){return new y(A.x+e.x,A.y+e.y,A.z+e.z)}function n(A,e,t){return new y(A.x+e.x*t,A.y+e.y*t,A.z+e.z*t)}function r(A,e){return A.x*e.x+A.y*e.y+A.z*e.z}function a(A,e){return new y(A.y*e.z-A.z*e.y,A.z*e.x-A.x*e.z,A.x*e.y-A.y*e.x)}function s(A,e,t,s){var l,c=r(e,s),h=r(e,e),d=r(s,s),p=i(t,A),g=r(e,p),u=r(s,p),f=null;0>(f=(g*d-u*c)/(h*d-c*c))||isNaN(f)?f=0:f>1&&(f=1);var m=null,C=null,y=null,v=null;return 0>=(l=(f*c-u)/d)||isNaN(l)?(C=t,0>=(f=g/h)||isNaN(f)?(m=A,y=i(t,A)):1>f?(m=n(A,e,f),v=a(p,e),y=a(e,v)):y=i(t,m=o(A,e))):1>l?(C=n(t,s,l),0>=f||isNaN(f)?(m=A,v=a(p,s),y=a(s,v)):1>f?(m=n(A,e,f),0>r(y=a(e,s),p)&&y.multiplyScalar(-1)):(v=a(p=i(t,m=o(A,e)),s),y=a(s,v))):(C=o(t,s),0>=(f=(c+g)/h)||isNaN(f)?(m=A,y=i(C,A)):1>f?(m=n(A,e,f),v=a(p=i(C,A),e),y=a(e,v)):y=i(C,m=o(A,e))),{vec:y,closestP:m,closestQ:C}}function l(A,e){var t=null,o=null,l=[],c=[],h=null;l[0]=i(A[1],A[0]),l[1]=i(A[2],A[1]),l[2]=i(A[0],A[2]),c[0]=i(e[1],e[0]),c[1]=i(e[2],e[1]),c[2]=i(e[0],e[2]);for(var d=null,p=null,g=null,u=0,f=A[0].distanceToSquared(e[0])+1,m=0;3>m;m+=1)for(var C=0;3>C;C+=1){var y=s(A[m],l[m],e[C],c[C]);h=y.vec;var v=r(d=i(o=y.closestQ,t=y.closestP),d);if(f>=v){p=t.clone(),g=o.clone(),f=v;var I=r(i(A[(m+2)%3],t),h),E=r(i(e[(C+2)%3],o),h);if(0>=I&&E>=0)return{start:t.clone(),end:o.clone(),minDistance:Math.sqrt(v)};0>I&&(I=0),E>0&&(E=0),r(d,h)-I+E>0&&(u=1)}}var B=a(l[0],l[1]),x=r(B,B);if(x>1e-15){var S=[];d=i(A[0],e[0]),S[0]=r(d,B),d=i(A[0],e[1]),S[1]=r(d,B),d=i(A[0],e[2]),S[2]=r(d,B);var w=-1;if(S[0]>0&&S[1]>0&&S[2]>0?S[w=S[1]>S[0]?0:1]>S[2]&&(w=2):0>S[0]&&0>S[1]&&0>S[2]&&S[2]>S[w=S[0]>S[1]?0:1]&&(w=2),w>=0&&(u=1,r(d=i(e[w],A[0]),a(B,l[0]))>0&&r(d=i(e[w],A[1]),a(B,l[1]))>0&&r(d=i(e[w],A[2]),a(B,l[2]))>0))return t=n(e[w],B,S[w]/x),o=e[w].clone(),t.distanceTo(o)}var M=a(c[0],c[1]),b=r(M,M);if(b>1e-15){var U=[];d=i(e[0],A[0]),U[0]=r(d,M),d=i(e[0],A[1]),U[1]=r(d,M),d=i(e[0],A[2]),U[2]=r(d,M);w=-1;if(U[0]>0&&U[1]>0&&U[2]>0?U[w=U[1]>U[0]?0:1]>U[2]&&(w=2):0>U[0]&&0>U[1]&&0>U[2]&&U[2]>U[w=U[0]>U[1]?0:1]&&(w=2),w>=0&&(u=1,r(d=i(A[w],e[0]),a(M,c[0]))>0&&r(d=i(A[w],e[1]),a(M,c[1]))>0&&r(d=i(A[w],e[2]),a(M,c[2]))>0))return{start:t=A[w].clone(),end:(o=n(A[w],M,U[w]/b)).clone(),minDistance:t.distanceTo(o)}}return u?(t=p,o=g,{start:p.clone(),end:g.clone(),minDistance:Math.sqrt(f)}):{start:p.clone(),end:g.clone(),minDistance:0}}var c=new y,h=new y,d=new y;function p(A,e,t,i,o,n){c.fromBufferAttribute(e,t),h.fromBufferAttribute(e,i),d.fromBufferAttribute(e,o),n&&(c.applyMatrix4(n),h.applyMatrix4(n),d.applyMatrix4(n)),A.push(c),A.push(h),A.push(d)}for(var g={start:null,end:null,minDistance:Number.POSITIVE_INFINITY},u=this.geometry,f=u.attributes.position,m=e?e.indexStart:0,C=u.getIndex().array,v=m,I=e?e.indexStart+e.indexCount:C.length;I>v;v+=3){var E=[];p(E,f,C[v],C[v+1],C[v+2],t);var B=l(A,E);if(0>=B.minDistance)return g.minDistance=0,g;g.minDistance>B.minDistance&&(g.minDistance=B.minDistance,g.start=B.start.clone(),g.end=B.end.clone())}return g},fC.prototype.computeBoundingBox=function(A){var e=new aA,t=this.geometry.attributes.position.array,i=null,o=null;return A?(i=A.positionStart,o=A.positionStart+A.positionCount):(i=0,o=t.length),this.setBoundingBoxFromArray(e,t,i,o),e},fC.prototype.computeBoundingSphere=function(A){var e=new aA,t=new y,i=this.geometry.attributes.position.array,o=null,n=null;A?(o=A.positionStart,n=A.positionStart+A.positionCount):(o=0,n=i.length);var r=new cA,a=r.center;this.setBoundingBoxFromArray(e,i,o,n),e.getCenter(a);for(var s=0,l=o,c=n;c>l;l+=3)t.x=i[l],t.y=i[l+1],t.z=i[l+2],s=Math.max(s,a.distanceToSquared(t));return r.radius=Math.sqrt(s),r},fC.prototype.setBoundingBoxFromArray=function(A,e,t,i){for(var o=Number(1/0),n=Number(1/0),r=Number(1/0),a=-1/0,s=-1/0,l=-1/0,c=t,h=i;h>c;c+=3){var d=e[c],p=e[c+1],g=e[c+2];o>d&&(o=d),n>p&&(n=p),r>g&&(r=g),d>a&&(a=d),p>s&&(s=p),g>l&&(l=g)}A.min.set(o,n,r),A.max.set(a,s,l)};var mC=function(A){return Rf.call(this),this.manager=A,this.nodePriority={high:[],medium:[],low:[]},this.visibleOctant=[],this.occlusionVisibleOctant=[],this.usedNodeInfosObject={},this.lineNodes={},this.blinkMaterials=[],this.selectedMeshes=[],this.nonSelectedMeshes=[],this.selectedObjectIds=[],this.activeMeshMap={},this};(mC.prototype=Object.create(Rf.prototype)).destroy=function(){this.dispose(),this.clearData(),this.pickingNodeGenerator&&(this.pickingNodeGenerator.destroy(),this.pickingNodeGenerator=null),this.activeMeshMap=null,this.manager=null,this.nodePriority=null,this.visibleOctant=null,this.occlusionVisibleOctant=null,this.nodePriority=null,this.lineNodes=null,this.blinkMaterials=null},mC.prototype.disposeLineNodes=function(){for(var A in this.lineNodes){var e=this.lineNodes[A];e.geometry.dispose(),e=null,delete this.lineNodes[A]}},mC.prototype.clearData=function(){this.pickingNodeGenerator&&this.pickingNodeGenerator.clearData(),this._clearActiveMeshMap(),this.disposeGeometries(),this.disposeLineNodes(),this._clearNodePriorityData(!0),this._clearUsedNodeInfosObject(),this.visibleOctant.length=0,this.occlusionVisibleOctant.length=0},mC.prototype.update=function(A,e,t){this._updateMeshNodes(A,e,t)},mC.prototype.cullNodes=function(A,e){this._clearNodePriorityData(!1),this._adjustLowNodePriorityLength(A);var t=0;return t=vc.EnableOctant?this._cullNodesWithOctant(A,e):this._cullNodesWithFull(A),this._calcPrioritizedNodeCount(A,t)},mC.prototype.getPriorityNodes=function(){return[this.nodePriority.high,this.nodePriority.medium,this.nodePriority.low]},mC.prototype._cullNodesWithOctant=function(A,e){var t=0,i=0,o=this.manager.getLoader(A).getOctreeRootNodeInner(),n=this.manager.getLoader(A).getOctreeRootNodeOuter();if(this.manager.getContainsCamera(A)||!n)return this.visibleOctant.length=0,o&&this._frustumCull(A,e,o),n&&this._frustumCull(A,e,n),(i=this.visibleOctant.length)>0&&(this._sortVisibleOctant(e),t=this._logicCull(A,!0,!0,t,i)),t;n&&(this.visibleOctant.length=0,this._frustumCull(A,e,n),(i=this.visibleOctant.length)>0&&(this._sortVisibleOctant(e),t=this._logicCull(A,!0,!1,t,i)));var r=this.manager.getFilter(A);(Object.keys(this.nodePriority.low).length+this.nodePriority.high.length+this.nodePriority.medium.length0&&(this._sortVisibleOctant(A,e),t=this._logicCull(A,!0,!1,t,i))));return t},mC.prototype._cullNodesWithFull=function(A){var e=A.getModelDescriptor().getComponentCount();return 0===e?0:this._logicCullWithFull(A,e)},mC.prototype._calcPrioritizedNodeCount=function(A,e){var t=e+this.nodePriority.high.length+this.nodePriority.medium.length;return t>this.manager.getRenderableCount(A)&&(t=this.manager.getRenderableCount(A)),t},mC.prototype._updateMeshNodes=function(A,e,t){if(this.filter=A.getFilter(),A.isOnlyWireframe()){A._getNodeGroup(gp.GEOMETRY).visible=!1}else{var i=A.getModelDescriptor().getStandardNodeInfos();if(i){this.clearSelectedObjectIds(),A._getNodeGroup(gp.GEOMETRY).visible=!0;var o=A.manager.filter,n=A.selectedMaterial,r=A.manager.sceneState,a=A.manager;if(a.octantToObjectMap&&a.octantToObjectMap[A.modelKey]){var s=a.octantToObjectMap[A.modelKey].mesh,l=A.materialManager.materials,c=this.manager.hiddenUserIdSetObject,h=this.manager.overrideUserIdSetObject,d=this.manager.transparentUserIdSetObject,p=this.manager.selectedUserIdSetObject,g=this.manager.hoveredUserIdSetObject;this.blinkMaterials.length=0,e||(e=A.getModelDescriptor().getStandardUserIds()),vc.TranslucentDepthDisabled&&(n.depthWrite=!n.transparent);var u=o._getMaterialByName("scene");vc.TranslucentDepthDisabled&&(u.depthWrite=!1);for(var f=0;e.length>f;f+=1){var m=e[f];if(i[m]){var C=i[m][0];if(C)if(s[m]){var y=s[m][0];if(y instanceof vu&&(y=y.object),y)if(c&&c[m])y.visible=!1;else{y.visible=!0;var v=[];if(d&&d[m]&&!vc.EnableSelectionByTranslucent){for(var I=0;C.materialId.length>I;I+=1)v.push(t||u);y.material=v}else if(p&&p[m])if(this.cacheSelectedObjectIds(m),vc.PickingEffect)for(var E=o._getOverrideMaterial(C),B=0;C.materialId.length>B;B+=1)v.push(t||E);else{for(var x=0;C.materialId.length>x;x+=1)v.push(t||n);y.material=v}else if(g&&g[m]){for(var S=0;C.materialId.length>S;S+=1)if(h[m]){var w=o._getMaterialByName(h[m]),M=r.getHoverMaterial(t||w);v.push(M)}else{var b=r.getHoverMaterial(t||l[C.materialId[S]]);v.push(b)}y.material=v}else if(d&&d[m]){for(var U=0;C.materialId.length>U;U+=1)v.push(t||u);y.material=v}else if(h&&h[m]){for(var F=0;C.materialId.length>F;F+=1)if(Array.isArray(h[m])){(K=l[C.materialId[F]])||(K=o._getMaterialByName(h[m][F])),v.push(t||K)}else{var K=o._getMaterialByName(h[m]);v.push(t||K)}y.material=v}else{for(var Q=0;C.materialId.length>Q;Q+=1){K=l[C.materialId[Q]];v.push(t||K)}y.material=v}}}else Bh.error(m,"没有创建对应的mesh")}}}}}},mC.prototype._getUsableMaterial=function(A,e,t,i){var o=e.materialId,n=e.userId,r=A.materialManager.materials,a=A.manager.sceneState,s=A.manager.filter,l=null,c=a.isSelected(n);!0!==c||s._isPickable(e)||(c=!1),t?vc.PickingEffect?l=s._getOverrideMaterial(e):(l=s._getOverrideMaterial(e))&&!c||(l=t):i&&(l=s._getOverrideMaterial(e));var h=A.manager.getOverrideMaterialByNodeInfo(e);return l=l||h||r[o],vc.Hover&&!vc.EnableRenderPass&&a.hoverId===n&&!1===c&&(l=a.getHoverMaterial(l)),l},mC.prototype._dealMeshes=function(A,e,t,i,o){var n=this.getGeometryByNodeInfo(A,e),r=A.pool,a=0;if(Array.isArray(n))for(var s=0,l=n.length;l>s;s+=1){a=r.get({modelKey:A.modelKey,nodeId:e.nodeId,userId:e.userId,originalId:e.originalId,userData:e.userData,geometry:n[s],matrix:e.matrix,material:i,renderOrder:i.transparent?0:vc.MaximumDepth-e.cellDepth,visible:t}),null}else a=r.get({modelKey:A.modelKey,nodeId:e.nodeId,userId:e.userId,originalId:e.originalId,userData:e.userData,geometry:n,matrix:e.matrix,material:i,renderOrder:i.transparent?0:vc.MaximumDepth-e.cellDepth,visible:t});0>a||o.curOctantId!==e.octantId&&(a>0&&A.manager.addObjectRangeToOctantMap(o.curOctantId,o.octantStartIndex,a-1),o.octantStartIndex=a,o.curOctantId=e.octantId)},mC.prototype._dealLineSegments=function(A,e,t,i){var o=this.getGeometryByNodeInfo(A,e);if(o){var n=this._getLineSegmentsNodeGroup(A),r=this.lineNodes[e.nodeId];r||((r=new cf(o,i)).nodeId=e.nodeId,r.name=e.name,r.geometryId=e.geometryId,r.modelKey=A.modelKey,this.lineNodes[e.nodeId]=r),r.material=i,r.visible=t,n.add(r),r.updateMatrixWorld(!0),this._cacheActiveMesh(e.userId,e.nodeId,r)}},mC.prototype._frustumCull=function(A,e,t){var i=A.manager,o=e.getFrustum(),n=vc.OctantDepth,r=e.projScreenMatrix,a=new aA;function s(A,e,t,i,o){var n=null;if(e&&t>A.depth&&(a.set(A.min,A.max),n=e.intersectsBox(a)),n){if(i){var l=a.applyMatrix4(r),c=l.getSize().length(),h=l.getCenter().z;A.priority=c/(h=h>1e-6?h:1e-6),o.push(A)}else o.push(A);for(var d=0,p=A.childOctants.length;p>d;d+=1)s(A.childOctants[d],e,t,i,o)}}(vc.DEBUG&&i.showOctreeBox(t),s(t,o,n,!0,this.visibleOctant),vc.OcclusionTranslucentEnabled)&&s(t,this.manager.getFrustumFromOcclusionCamera(),n,!1,this.occlusionVisibleOctant);return!0},mC.prototype._logicCull=function(A,e,t,i,o){var n=A.manager,r=n.filter,a=r._hasHiddenFileIdFilter(),s=r._hasOverrideMaterialFilter(),l=n.sceneState.selectionSet,c=r._hasRenderPromotionFilter(),h=this.nodePriority.high,d=this.nodePriority.medium,p=this.nodePriority.low,g=this.nodePriority.low.length,u=A.getModelDescriptor().getNodeInfosWithComponentKey();function f(A,e){if(!(a&&r._isHiddenFileId(A)||!1===r._isVisible(A)))if(l.hasOwnProperty(A.userId)||s&&r._hasHighPriorityOverrideMaterial(A))h.push(A);else{var t=!1;if(c&&r._isRenderPromotion(A)&&(t=!0),e){var o=A.userData,n=o?o.categoryId:void 0;n&&e[n]&&(t=!0)}t?d.push(A):g>i&&(p[i]=A,i+=1)}}var m=n.getCategoriesFromHighPriority("outer");!0===t&&(m=n.getCategoriesFromHighPriority("inner"));for(var C=0,y=0,v=0;o>v;v+=1){var I=null,E=0;e?(I=this.visibleOctant[v].octantId,E=this.visibleOctant[v].depth):I=v;var B=u[I];if(B){var x=this._getUsedNodeInfosByComponentKey(I);if(!x){for(C=0,y=B.length;y>C;C+=1){(w=B[C]).octantId=I,w.cellDepth=E,this._isSatisfied(A,w)&&this._cacheUsedNodeInfosByComponentKey(I,w)}x=this._getUsedNodeInfosByComponentKey(I)}if(x){var S=x.default;for(C=0,y=S.length;y>C;C+=1){var w;f(w=S[C],m)}}}}return Bh.timeEnd("collectNodeInfo"),i},mC.prototype._clearUsedNodeInfosObject=function(){for(var A in this.usedNodeInfosObject)delete this.usedNodeInfosObject[A].default,delete this.usedNodeInfosObject[A].instance,delete this.usedNodeInfosObject[A];this.usedNodeInfosObject={}},mC.prototype._getUsedNodeInfosByComponentKey=function(A){return this.usedNodeInfosObject[A]},mC.prototype._cacheUsedNodeInfosByComponentKey=function(A,e){this.usedNodeInfosObject[A]||(this.usedNodeInfosObject[A]={},this.usedNodeInfosObject[A].default=[],this.usedNodeInfosObject[A].instance=[]),this.usedNodeInfosObject[A].default.push(e)},mC.prototype._isSatisfied=function(A,e){var t=A.getLoadedUserIdsObject();return!t||Boolean(t[e.userId])},mC.prototype._logicCullWithFull=function(A,e){return this._logicCull(A,!1,!0,0,e)},mC.prototype._sortVisibleOctant=function(A,e){},mC.prototype._applyOcclusionTranslucent=function(A){if(vc.OcclusionTranslucentEnabled){var e=A.pool.getObjects(),t=A.manager.octantToObjectMap,i=this.occlusionVisibleOctant.length;if(i>0)for(var o=A.manager.getFrustumFromOcclusionCamera(),n=0;i>n;n+=1){var r=t[this.occlusionVisibleOctant[n].octantId];if(r&&r.length>0)for(var a=0,s=r.length;s>a;a+=2)for(var l=r[a];r[a+1]>=l;l+=1){var c=e[l][0];Rd.intersectObjectWithFrustum(c,o)&&this._overrideOcclusionMaterial(c)}}}},mC.prototype._overrideOcclusionMaterial=function(A,e){var t=e.material;if(t&&!1===t.transparent){var i=A.manager.acquireMaterial(),o=i.material;t.color?o.color.copy(t.color):i.resetColor(),o.opacity=vc.OcclusionOpacity,e.material=o,e.material.needsUpdate=!0}},mC.prototype._clearNodePriorityData=function(A){var e=this.nodePriority;e.high.length=0,e.medium.length=0,A&&(e.low.length=0)},mC.prototype._adjustLowNodePriorityLength=function(A){0===this.nodePriority.low.length&&(this.nodePriority.low.length=this.manager.getRenderableCount(A))},mC.prototype._clearLineSegmentsNodeGroup=function(A){this._getLineSegmentsNodeGroup(A).clear()},mC.prototype._getLineSegmentsNodeGroup=function(A){return A._getNodeGroup(gp.LINESEGMENTS,{globalSpace:!0})},mC.prototype._isLineSegments=function(A){return A.type===Qf.EnumNodeItemType.LINE},mC.prototype.getBlinkMaterials=function(A){return this.blinkMaterials},mC.prototype._makeMesh=function(A,e,t){var i=A.modelKey,o=A.manager,n=A.getModelDescriptor().getStandardNodeInfos();if(n){e||(e=A.getModelDescriptor().getInstancedUserIds());for(var r=A.getModelDescriptor(),a=A._getNodeGroup(gp.GEOMETRY,{globalSpace:!0}),s=A.materialManager.materials,l=0,c=e.length;c>l;l+=1){var h=A.getModelDescriptor().getNodeInfosByComponentKey(e[l]);if(!h||!h[0].mesh)for(var d=n[e[l]],p=0,g=d.length;g>p;p+=1){var u=d[p];if(u){var f=u.geometryId,m=this.getGeometryById(f);if(m){var C=u.materialId||r.referencedMeshCache.components[e[l]].matId,y=null;if(y=[],op(A.dataVersion,"1.0")||void 0===A.dataVersion){var v=s[C];if(u.materialId=[],!v)continue;if(Array.isArray(v))if(v.length>1)for(p=0;v.length>p;p+=1)u.materialId.push(C+"_"+p),s[C+"_"+p]=v[p];else s[C]=v[0],u.materialId.push(C);else u.materialId.push(C);for(p=0;u.materialId.length>p;p+=1)y.push(s[u.materialId[p]])}else for(p=0;C.length>p;p+=1){var I=s[C[p]];I||(I=Kd.DefaultMaterial),y.push(I)}if(1>y.length){var E=_u[u.type]?_u[u.type].color:void 0;E||(Bh.log("Material not found for type: ",u.type),E=_u.DEFAULT.color),E||(Bh.log("Default material not found for type: ",u.type),E=[1,1,1,1]);var B=new LA(E[0],E[1],E[2]),x=B.getHexString()+"_"+E[3],S=s[x];S||(S=new xr({color:B}),1>E[3]&&(S.transparent=!0,S.opacity=E[3]),S.side=2,s[x]=S),m.groups=[{start:0,count:m.index.count,materialIndex:0}],u.materialId.push(x),y.push(S)}for(var w=0;y.length>w;w+=1)y[w].aoMap&&m.attributes.uv&&(m.attributes.uv2=m.attributes.uv);var M=new Kf(m,y),b={matrix:u.matrix,modelKey:i,name:u.name,key:u.componentKey,userData:{},typeEx:u.type};M.spawn(b),a.add(M),o.addMeshToOctantMap(i,u.componentKey,new Iu(u.componentKey,M));var U={indexCount:m.index.count,indexStart:0,lightmapIdx:void 0,nodeId:u.componentKey,positionCount:3*m.attributes.position.count,positionStart:0,userId:u.componentKey};M._indicesGroup={},M._indicesGroup[u.componentKey]=[U],A.addMeshToInfoMap(u.componentKey,u.componentKey,M,U),M.geometryId=u.geometryId,this._cacheActiveMesh(u.userId,u.nodeId,M),f=null,C=null,b=null,y=null,m=null,M=null}}}}a.updateMatrixWorld(!0),t&&t()}},mC.prototype._makeSkinMesh=function(A,e,t){var i=A.modelKey,o=A.manager,n=A.getModelDescriptor().getStandardNodeInfos();if(n){e||(e=A.getModelDescriptor().getInstancedUserIds());for(var r=A.getModelDescriptor(),a=A.materialManager.materials,s=0,l=e.length;l>s;s+=1)for(var c=n[e[s]],h=0,d=c.length;d>h;h+=1){var p=c[h];if(p){var g=p.geometryId,u=this.getGeometryById(g);if(u){var f=p.materialId||r.referencedMeshCache.components[e[s]].matId,m=null;m=[];for(h=0;f.length>h;h+=1){var C=a[f[h]];C||(C=Kd.DefaultMaterial),m.push(C)}if(1>m.length){var y=_u[p.type]?_u[p.type].color:void 0;y||(Bh.log("Material not found for type: ",p.type),y=_u.DEFAULT.color),y||(Bh.log("Default material not found for type: ",p.type),y=[1,1,1,1]);var v=new LA(y[0],y[1],y[2]),I=v.getHexString()+"_"+y[3],E=a[I];E||(E=new xr({color:v}),1>y[3]&&(E.transparent=!0,E.opacity=y[3]),E.side=2,a[I]=E),u.groups=[{start:0,count:u.index.count,materialIndex:0}],p.materialId.push(I),m.push(E)}for(var B=0;m.length>B;B+=1)m[B].aoMap&&(u.attributes.uv2=u.attributes.uv);var x=null;if("skinIndex"in u.attributes&&"skinWeight"in u.attributes){x=new fC(u,m);for(var S=0;m.length>S;S+=1)m[S].skinning=!0;console.log("SkinnedMesh 类型mesh")}else x=new Kf(u,m);var w={matrix:p.matrix,modelKey:i,name:p.name,key:p.componentKey,userData:{},typeEx:p.type};x.spawn(w),o.addMeshToOctantMap(i,p.componentKey,new Iu(p.componentKey,x));var M={indexCount:u.index.count,indexStart:0,lightmapIdx:void 0,nodeId:p.componentKey,positionCount:u.attributes.position.count,positionStart:0,userId:p.componentKey};return x._indicesGroup={},x._indicesGroup[p.componentKey]=[M],A.addMeshToInfoMap(p.componentKey,p.componentKey,x,M),x.geometryId=p.geometryId,this._cacheActiveMesh(p.userId,p.nodeId,x),g=null,f=null,w=null,m=null,u=null,x}}}}},mC.prototype._readBufferInfo=function(A,e){var t=A.getModelDescriptor().getStandardNodeInfos();if(t){e||(e=A.getModelDescriptor().getInstancedUserIds());for(var i=A.getModelDescriptor(),o=A.materialManager.materials,n=A.materialManager.textures,r=0,a=e.length;a>r;r+=1)for(var s=t[e[r]],l=0,c=s.length;c>l;l+=1){var h=i.referencedMeshCache.components[s[l].componentKey],d=h.type;if(-1!==h.geoId){var p=this.getGeometryById(h.geoId);if(p||(p=this.getGeometryByNodeInfo(A,s[l])))if(np(A.dataVersion,"2.0.0"));else{var g=o[h.matId];if(g){if(A.textureNeedsUpdate&&void 0!==A.dataVersion&&ap(A.dataVersion,"2.0.0")&&(A.textureNeedsUpdate=!1,g.textures.length>0))if(g.materials.length>1)for(l=0;g.UVgroup.length>l;l+=1)for(m=(f=g.UVgroup[l]).start,C=f.count,y=f.textureIndex,r=0;g.groups.length>r;r+=1){E=(v=g.groups[r]).count,B=v.materialIndex;if((m===(I=v.start)||m+C===I+E||I>m&&C>E)&&C>=E){S=g.materials[B];(x=n[g.textures[y]])&&S&&(S.map=x)}}else g.materials[0].map=n[g.textures[0]]}else if(g=this._readMaterialBuffer(h.matId,A)){if(0===g.materials.length){(v=_u[d]?_u[d].color:void 0)||(Bh.log("Material not found for type: ",d),v=_u.DEFAULT.color),v||Bh.log("Default material not found for type: ",d);var u=new xr({color:new LA(v[0],v[1],v[2])});1>v[3]&&(u.transparent=!0,u.opacity=v[3]),u.side=2,g.materials.push(u),g.groups.push({start:0,count:c=p.index.count,materialIndex:0})}if(g.textures.length>0)if(g.materials.length>1)for(var l=0;g.UVgroup.length>l;l+=1)for(var f,m=(f=g.UVgroup[l]).start,C=f.count,y=f.textureIndex,r=0;g.groups.length>r;r+=1){var v,I,E=(v=g.groups[r]).count,B=v.materialIndex;if((m===(I=v.start)||m+C===I+E||I>m&&C>E)&&C>=E){var x,S=g.materials[B];(x=n[g.textures[y]])&&S&&(S.map=x)}}else g.materials[0].map=n[g.textures[0]];p&&g&&(p.groups=g.groups),o[h.matId]=g.materials}}}else Bh.debug("实体没有几何")}}},mC.prototype.createMeshNodes=function(A,e){this._readBufferInfo(A,e),A.hasAnimation&&vc.EnableAnimation?this._makeSkinMesh(A):this._makeMesh(A)},mC.prototype.asyncCreateMeshNodes=function(A,e,t){this._readBufferInfo(A,e),A.hasAnimation&&vc.EnableAnimation?t&&t():this._makeMesh(A,e,t)},mC.prototype._readMaterialBuffer=function(A,e){var t=e.getModelDescriptor().referencedMeshCache.materials[A];if(!t)return null;var i=t.color,o=t.colorIndex,n=t.texture,r=t.textureIndex,a=[],s=[],l=[];new Aa;if(i.length>4){for(var c=0;i.length/4>c;c+=1){var h=new xr({color:new LA(i[4*c],i[4*c+1],i[4*c+2])});1>i[4*c+3]&&(h.transparent=!0,h.opacity=i[4*c+3]),h.side=2,a.push(h),h=null}for(var d=null,p=void 0,g=0;o.length>g;g+=1){var u=o[g];u!==p&&(p=u,null!=d&&(d.count=3*g-d.start,s.push(d)),d={start:3*g,materialIndex:p})}null!=d&&(d.count=3*o.length-d.start,s.push(d))}else if(4===i.length){var f=new xr({color:new LA(i[0],i[1],i[2])});1>i[3]&&(f.transparent=!0,f.opacity=i[3]),f.side=2,a.push(f),s.push({start:0,count:3*o.length,materialIndex:0})}for(var m=null,C=void 0,y=r,v=0;y.length>v;v+=1){var I=y[v];I!==C&&(C=I,null!=m&&(m.count=3*v-m.start,l.push(m)),m={start:3*v,textureIndex:C})}return null!=m&&(m.count=3*y.length-m.start,l.push(m)),{materials:a,groups:s,textures:n,UVgroup:l}},mC.prototype.clearSelectedObjectIds=function(){this.selectedObjectIds.length=0},mC.prototype.cacheSelectedObjectIds=function(A){this.selectedObjectIds.push(A)},mC.prototype.adjustVisibility=function(A,e){var t=this._getNodeGroup(A),i=t.visible;e&&!t.bVisible||(t.visible=e),t.bVisible=i},mC.prototype.changeVisibilityOfSelectedObjects=function(A,e){var t=A.manager,i=t.octantToObjectMap[A.modelKey].mesh;this.selectedMeshes.length=0;for(var o=0,n=this.selectedObjectIds.length;n>o;o+=1){var r=this.selectedObjectIds[o],a=i[r][0];a&&(t.filter._isVisible({userId:r})&&(a.visible=e))}},mC.prototype.changeVisibilityOfNonSelectedObjects=function(A,e){var t=A.manager,i=t.octantToObjectMap[A.modelKey].mesh;this.selectedMeshes.length=0;for(var o={},n=0,r=this.selectedObjectIds.length;r>n;n+=1){o[this.selectedObjectIds[n]]=!0}for(var a in i)if(i.hasOwnProperty(a)&&!o[a]){var s=i[a][0];if(!s)continue;if(!t.filter._isVisible({userId:a}))continue;s.visible=e}},mC.prototype.restoreVisibilityOfObjects=function(){this.selectedMeshes.length=0,this.nonSelectedMeshes.length=0},mC.prototype._getNodeGroup=function(A){return A._getNodeGroup(gp.GEOMETRY,{globalSpace:!0})},mC.prototype.getMeshesByUserIds=function(A,e){var t=e,i=A.getModelDescriptor().getNodeInfosByComponentKey(t);if(i){for(var o=[],n=0,r=i.length;r>n;n+=1)for(var a=i[n],s=a.mesh,l=s._indicesGroup[t],c=0,h=l.length;h>c;c+=1){var d={};d.mesh=s,d.indexInfo=l[c],d.matrix=s.matrix.clone().multiply(A.getModelMatrix()),d.boundingBox=a.boundingBox.clone().applyMatrix4(d.matrix),o.push(d)}return o}return null},mC.prototype._getUsedGeometry=function(A,e){var t=null;if(!vc.Instance&&e.uvArrayBuffer){var i=e.geometryId+"|"+e.nodeId;if(t=this.getGeometryById(i))return t;var o=this._createGeometryByNodeInfo(A,e);o instanceof Array||(o=[o]),t=[];for(var n=new l,r=new y,a=e.uvArrayBuffer,s=0,c=o.length;c>s;s+=1){var h=new he;h.setIndex(o[s].index),h.addAttribute("position",o[s].attributes.position),h.addAttribute("normal",o[s].attributes.normal),n.set(a[6*s],a[6*s+2],a[6*s+4],a[6*s+1],a[6*s+3],a[6*s+5],0,0,1);for(var d=[],p=o[s].attributes.uv.array,g=0,u=p.length;u>g;g+=2)r.set(p[g],p[g+1],1),r.applyMatrix3(n),d.push(r.x),d.push(r.y);h.addAttribute("uv",new Ae(d,2)),t.push(h)}this._cacheGeometry(i,t)}else t=this.getGeometryByNodeInfo(A,e);return t},mC.prototype.getGeometryBuffersByUserId=function(A,e){var t=A.getModelDescriptor().getStandardNodeInfosById(e);if(!t)return[];for(var i=[],o=A.getDatabagId(),n=0,r=t.length;r>n;n+=1){var a=t[n],s=this.getGeometryByNodeInfo(A,a);if(s){var l=this._isLines(a);if(s instanceof Array)for(var c=0,h=s.length;h>c;c+=1)i.push({isLines:l,databagId:o,nodeId:a.nodeId,position:s[c].getAttribute("position").array,index:s[c].getIndex().array,matrix:a.matrix});else i.push({isLines:l,databagId:o,nodeId:a.nodeId,position:s.getAttribute("position").array,index:s.getIndex().array,matrix:a.matrix})}}return i},mC.prototype.traverseActiveMeshMap=function(A,e){for(var t=0,i=(A=A||Object.keys(this.activeMeshMap)).length;i>t;t+=1){var o=A[t];if(this.activeMeshMap[o])for(var n=Object.keys(this.activeMeshMap[o]),r=0,a=n.length;a>r;r+=1){var s=n[r];e(o,s,this.activeMeshMap[o][s])}}},mC.prototype.getActiveMeshMapById=function(A){return this.activeMeshMap[A]},mC.prototype._clearActiveMeshMap=function(){this.activeMeshMap={}},mC.prototype._cacheActiveMesh=function(A,e,t){this.activeMeshMap[A]||(this.activeMeshMap[A]={}),this.activeMeshMap[A][e]||(this.activeMeshMap[A][e]=[]),this.activeMeshMap[A][e].push(t)},mC.prototype._isLines=function(A){return A.type===$u.EnumNodeItemType.LINE},mC.prototype.getPickingNodeGenerator=function(){return this.pickingNodeGenerator||(this.pickingNodeGenerator=new uC(this)),this.pickingNodeGenerator},mC.prototype.isPickableNode=function(A){return!this.filter||this.filter._isPickable({userId:A})};var CC=function(A){of.call(this,A),this.nodeGroupName="PickingWireFrameGroup"};Object.assign(CC.prototype,of.prototype),eu(CC,[{key:"disposePickingNodeById",value:function(A){for(var e=Object.keys(this.pickingNodeMap[A]),t=0,i=e.length;i>t;t+=1)for(var o=this.pickingNodeMap[A][e[t]],n=0,r=o.length;r>n;n+=1)o[n].material=null,o[n].geometry.dispose(),o[n]=null}},{key:"addToPickingNodeMap",value:function(A,e,t){this.pickingNodeMap||(this.pickingNodeMap={}),this.pickingNodeMap[A]||(this.pickingNodeMap[A]={}),this.pickingNodeMap[A][e]=t,this.addToPickingNodeGroup(t)}},{key:"removeFormPickingNodeGroup",value:function(A){if(this.pickingNodeGroup)for(var e=Object.keys(this.pickingNodeMap[A]),t=0,i=e.length;i>t;t+=1)for(var o=this.pickingNodeMap[A][e[t]],n=0,r=o.length;r>n;n+=1)this.pickingNodeGroup.remove(o[n])}},{key:"generatePickingMeshes",value:function(A){var e=this,t=this.manager;this.manager.manager.getMeshManager().traverseActiveMeshMap(A,(function(A,i,o){if(!(o&&o.length&&o[0].isLineSegments||e._isExistNode(A,i))){var n=0,r=0,a=o[0].geometryId,s=[];for(n=0,r=o.length;r>n;n+=1)s.push(o[n].geometry);var l=t._getWireframeGeometryById(a,s),c=[];for(n=0,r=l.length;r>n;n+=1){var h=new jo(l[n],Kd.DefaultMaterial);Tu.copyMeshProperties(h,o[n]),h.renderOrder=0,c.push(h)}e.addToPickingNodeMap(A,i,c)}}))}},{key:"_isExistNode",value:function(A,e){return!!(this.pickingNodeMap&&this.pickingNodeMap[A]&&this.pickingNodeMap[A][e])}},{key:"updatePickingMeshesState",value:function(A,e,t){if(this.pickingNodeMap)for(var i=this.pickingNodeMap,o=this.manager.manager.getMeshManager(),n=0,r=e.length;r>n;n+=1){var a=e[n];if(i[a]&&o.isPickableNode(a)){var s=o.getActiveMeshMapById(a);if(s)for(var l=Object.keys(i[a]),c=0,h=l.length;h>c;c+=1){var d=l[c];if(s[d]){var p=i[a][d];if(p)for(var g=0,u=p.length;u>g;g+=1)p[g].material=A,p[g].visible=!0}}}}}},{key:"resetPickingMeshesState",value:function(){if(this.pickingNodeMap)for(var A=this.pickingNodeMap,e=Object.keys(A),t=0,i=e.length;i>t;t+=1)for(var o=e[t],n=Object.keys(A[o]),r=0,a=n.length;a>r;r+=1)for(var s=A[o][n[r]],l=0,c=s.length;c>l;l+=1)s[l].visible=!1}},{key:"updatePickingMeshes",value:function(A,e,t){return this.generatePickingMeshes(e),this.resetPickingMeshesState(),this.updatePickingMeshesState(A,e,t),this.getPickingNodeGroup()}}]);var yC=function(A){this.manager=A,this.wireframeGeometries={},this.wireframeLineMeshes={}};yC.prototype._disposeGeometries=function(){for(var A in this.wireframeGeometries)this._disposeGeometry(A)},yC.prototype.destroy=function(){this.manager=null,this._clearWireframeLineMeshes(),this.wireframeLineMeshes=null,this._disposeGeometries(),this.wireframeGeometries=null},yC.prototype.clearData=function(){this._clearWireframeLineMeshes(),this._disposeGeometries()},yC.prototype.update=function(A,e){this.isActivateWireframe(A)?(this._clearWireframeGroupNode(A),this._generateWireframeNodes(A,e),this._getWireWireframeGroupNode(A).updateMatrixWorld(!0)):this._removeWireframeGroupNode(A)},yC.prototype._disposeGeometry=function(A){var e=this.wireframeGeometries[A];if(e){if(Array.isArray(e))for(var t=0,i=e.length;i>t;t+=1)e[t].dispose();else e.dispose();delete this.wireframeGeometries[A]}},yC.prototype._clearWireframeLineMeshes=function(){for(var A in this.wireframeLineMeshes)delete this.wireframeLineMeshes[A];this.wireframeLineMeshes={}},yC.prototype._clearWireframeGroupNode=function(A){this._getWireWireframeGroupNode(A).clear()},yC.prototype._removeWireframeGroupNode=function(A){A._removeNodeGroup(this._getWireframeGroupName(A))},yC.prototype.isActivateWireframe=function(A){return A.isActivateWireframe()},yC.prototype._getWireWireframeGroupNode=function(A){return A._getNodeGroup(this._getWireframeGroupName(A),{globalSpace:!0})},yC.prototype._getWireframeGeometryByNodeInfo=function(A,e){return this._getWireframeGeometryById(e.geometryId,this.manager.getGeometryByNodeInfo(A,e),A)},yC.prototype._getWireframeGeometryById=function(A,e,t){if(this.wireframeGeometries[A])return this.wireframeGeometries[A];var i=[],o=null,n=null;if(Array.isArray(e))for(var r=0,a=e.length;a>r;r+=1)n=Up(e[r].attributes.position.array,e[r].index.array),(o=new he).setIndex(new $A(n,1)),o.setAttribute("position",e[r].attributes.position,3),i.push(o);else n=Up(e.attributes.position.array,e.index.array),(o=new he).setIndex(new $A(n,1)),o.setAttribute("position",e.attributes.position,3),i.push(o);return this.wireframeGeometries[A]=i,this.wireframeGeometries[A]},yC.prototype._makeWireframeLineMeshes=function(A,e,t){var i=this.wireframeLineMeshes[e.nodeId];if(!i){i=this.wireframeLineMeshes[e.nodeId]=[];for(var o=this._getWireframeGeometryByNodeInfo(A,e),n=0,r=o.length;r>n;n+=1){var a=new jo(o[n],this._getWireframeMaterial(A));a.name=e.nodeId+"_"+n,a.applyMatrix4(e.matrix),a.matrixAutoUpdate=!1,i.push(a)}e.wireframeMeshs=i}for(var s=0,l=i.length;l>s;s+=1)t.add(i[s])},yC.prototype._generateWireframeNodes=function(A,e){var t=this._getWireWireframeGroupNode(A),i=A.getModelDescriptor().getStandardNodeInfos();e||(e=A.getModelDescriptor().getStandardUserIds());for(var o,n,r=this.manager.getHiddenUserIds(),a=0;e.length>a;a+=1){var s=e[a],l=i[s][0];r[s]||(o=l,n=this._getFilter(A),o.type===Qf.EnumNodeItemType.LINE||vc.Instance&&("box"===o.geometryId||"boxM"===o.geometryId)||n._hasRenderWithBoardlineFilter()&&!n._isRenderWithBoardline(o)||this._makeWireframeLineMeshes(A,l,t))}},yC.prototype._getWireframeGroupName=function(A){return A._getWireframeGroupName()},yC.prototype._getWireframeMaterial=function(A){return A.getWireframeMaterial()},yC.prototype._getFilter=function(A){return A.manager.filter},yC.prototype.adjustVisibility=function(A,e){if(A.isActivateWireframe()){var t=this._getWireWireframeGroupNode(A),i=t.visible;e&&!t.bVisible||(t.visible=e),t.bVisible=i}},yC.prototype.changeVisibilityOfSelectedObjects=function(A,e){},yC.prototype.changeVisibilityOfNonSelectedObjects=function(A,e){this.adjustVisibility(A,e)},yC.prototype.restoreVisibilityOfObjects=function(){},yC.prototype.getPickingNodeGenerator=function(){return this.pickingNodeGenerator||(this.pickingNodeGenerator=new CC(this)),this.pickingNodeGenerator};var vC=function(A){this.meshManager=new mC(this),this.model=A,this.wireframeManager=new yC(this)};vC.prototype.destroy=function(){this.meshManager.destroy(),this.meshManager=null,this.wireframeManager.destroy(),this.wireframeManager=null},vC.prototype.clearData=function(){this.meshManager.clearData(),this.wireframeManager.clearData()},vC.prototype.disposeGeometry=function(A){this.meshManager.disposeGeometry(A)},vC.prototype.cullNodes=function(A,e){this.hasNodeInfo(A)&&this.meshManager.cullNodes(A,e)},vC.prototype.updateNodes=function(A,e){if(this.hasNodeInfo(A)){var t;t=this._collectModelFiltered(A),this.meshManager.update(A,e,t),this.wireframeManager.update(A,e)}},vC.prototype.applyFilter=function(A,e){if(this.hasNodeInfo(A)){var t=null;t=e||A.getModelDescriptor().getStandardUserIds();var i=A.getModelDescriptor().getStandardNodeInfos();this._collectFilteredUserIds(A.manager.filter,t,i),this._collectSelectedUserIds(A.manager.sceneState.selectionSet,i),this._collectHoveredUserIds(A.manager.sceneState.hoverId,i),this.updateNodes(A,e)}},vC.prototype.applySelection=function(A){if(this.hasNodeInfo(A)){var e=A.getModelDescriptor().getStandardNodeInfos();this._clearSelectedState(A),this._clearHoveredState(A),this._collectSelectedUserIds(A.manager.sceneState.selectionSet,e),this._collectHoveredUserIds(A.manager.sceneState.hoverId,e),this.updateNodes(A)}},vC.prototype.clearSelection=function(A){this._clearSelectedState(A),this.applyHover(A)},vC.prototype.applyHover=function(A){if(this.hasNodeInfo(A)){var e=A.getModelDescriptor().getStandardNodeInfos();this._clearHoveredState(A),this._collectHoveredUserIds(A.manager.sceneState.hoverId,e),this.updateNodes(A)}},vC.prototype.clearHover=function(A){this._clearHoveredState(A),this.updateNodes(A)},vC.prototype.applyBlink=function(A){},vC.prototype.clearBlink=function(A){},vC.prototype.getPriorityNodes=function(){return this.meshManager.getPriorityNodes()},vC.prototype.getGeometryByNodeInfo=function(A,e){return this.meshManager.getGeometryByNodeInfo(A,e)},vC.prototype.getRenderableCount=function(A){return A.renderableCount},vC.prototype.getLoader=function(A){return A.loader},vC.prototype.getContainsCamera=function(A){return A.containsCamera},vC.prototype.getFilter=function(A){return A.manager.filter},vC.prototype.hasNodeInfo=function(A){return!!A.getModelDescriptor().getStandardNodeInfos()},vC.prototype.createMeshNodes=function(A){this.meshManager.createMeshNodes(A)},vC.prototype.asyncCreateMeshNodes=function(A,e,t){this.meshManager.asyncCreateMeshNodes(A,e,t)},vC.prototype._collectFilteredUserIds=function(A,e,t){var i=A._hasHiddenFileIdFilter(),o=A._hasVisibleFilter(),n=A._hasOverrideMaterialFilter(),r=A._hasTransparentFilter();this.mapMaterialIdToUserIdsForFilter={};if(this.hiddenUserIdSetObject={},this.overrideUserIdSetObject={},this.transparentUserIdSetObject={},i||o||n||r)for(var a=0;e.length>a;a+=1){var s=e[a],l=t[s];if(l&&l.length)for(var c=0,h=l.length;h>c;c+=1){var d=l[c];if(i&&A._isHiddenFileId(d)||o&&!1===A._isVisible(d))this.hiddenUserIdSetObject[s]=!0;else if(r&&A._isTransparent(d))this.transparentUserIdSetObject[s]=!0;else if(n&&A._hasOverrideMaterial(d)){var p=A._getOverrideMaterial(d);if(Array.isArray(p)){for(var g=[],u=0,f=p.length;f>u;u++){var m=null!==p[u]?p[u].name:"";""!==m&&g.push(m)}this.overrideUserIdSetObject[s]=g}else{var C=null!==p?p.name:"";""!==C&&(this.overrideUserIdSetObject[s]=C)}}}}},vC.prototype._collectModelFiltered=function(A){var e=A.manager.filter,t=A.modelKey,i=e._hasModelOverrideMaterialFilter(),o=e._hasModelTransparentFilter(),n=A.manager.modelState.selectionSet;return A.manager.modelState.hoverId===t?A.manager.modelState.getHoverMaterial():n.hasOwnProperty(A.modelKey)?A.manager.modelState.selectionMaterial:o&&e._isModelTransparent(t)?e._getMaterialByName("scene"):i&&e._hasModelOverrideMaterial(t)?e._getModelOverrideMaterial(t):null},vC.prototype._clearFilteredState=function(){this.hiddenUserIdSetObject={},this.overrideUserIdSetObject={},this.transparentUserIdSetObject={}},vC.prototype.getFilteredUserIds=function(){return this.mapMaterialIdToUserIdsForFilter},vC.prototype.getSelectedUserIds=function(){return this.mapMaterialIdToUserIdsForSelection},vC.prototype.getHoveredUserIds=function(){return this.mapMaterialIdToUserIdsForHover},vC.prototype.getBlinkedUserIds=function(){return this.mapBlinkUserIds},vC.prototype.getHiddenUserIds=function(){return this.hiddenUserIdSetObject},vC.prototype._collectSelectedUserIds=function(A,e){for(var t in this.selectedUserIdSetObject={},A)if(A.hasOwnProperty(t)){if(!e[t])continue;this.selectedUserIdSetObject[t]=!0}},vC.prototype._clearSelectedState=function(){this.selectedUserIdSetObject={}},vC.prototype._collectHoveredUserIds=function(A,e){if(this.hoveredUserIdSetObject={},A&&e[A]){var t=e[A];this.hoveredUserIdSetObject={},t&&(this.hoveredUserIdSetObject[A]=!0)}},vC.prototype._clearHoveredState=function(){this.hoveredUserIdSetObject={}},vC.prototype.getMeshesByUserIds=function(A,e){return this.meshManager.getMeshesByUserIds(A,e)},vC.prototype.adjustVisibility=function(A,e){this.meshManager.adjustVisibility(A,e),this.wireframeManager.adjustVisibility(A,e)},vC.prototype.changeVisibilityOfSelectedObjects=function(A,e){this.meshManager.changeVisibilityOfSelectedObjects(A,e),this.wireframeManager.changeVisibilityOfSelectedObjects(A,e)},vC.prototype.changeVisibilityOfNonSelectedObjects=function(A,e){this.meshManager.changeVisibilityOfNonSelectedObjects(A,e),this.wireframeManager.changeVisibilityOfNonSelectedObjects(A,e)},vC.prototype.restoreVisibilityOfObjects=function(){this.meshManager.restoreVisibilityOfObjects(),this.wireframeManager.restoreVisibilityOfObjects()},vC.prototype.isPickableNode=function(A){var e=this.getHiddenUserIds();if(e&&e[A])return!1;var t=this.getTransparentUserIds();return!t||!t[A]},vC.prototype.isHiddenNode=function(A){var e=this.getHiddenUserIds();return!(!e||!e[A])},vC.prototype.getMeshManager=function(){return this.meshManager},vC.prototype.getWireFrameManager=function(){return this.wireframeManager},vC.prototype.getTransparentUserIds=function(){return this.transparentUserIdSetObject};var IC=function(A){return hC.call(this,A),this.tag="layer",this.defaultManager=new vC,this.instancedManager=new Hf,this.loader=new gC(this),this};(IC.prototype=Object.assign(IC.prototype,hC.prototype)).destroy=function(){this.defaultManager.destroy(),this.defaultManager=null,this.instancedManager.destroy(),this.instancedManager=null},IC.prototype.prepareData=function(A){},IC.prototype.prepare=function(A){this.isAllReady()&&(this.model.getMaterialManager()._updateTextureMapping(),this.model.clearMeshFromOctantMap())},IC.prototype.updateNodes=function(){},IC.prototype.addNodeInfoToOctantMap=function(){},IC.prototype.dealMeshNodes=function(A){A&&A()},IC.prototype.disposeBufferAfterVbo=function(){},IC.prototype.dealMeshNodes=function(A){this.model.getModelDescriptor().getInstancedUserIdsByCategory(this._loadedUserIds);var e=this.model,t=this;this.defaultManager.asyncCreateMeshNodes(e,e.getModelDescriptor().getStandardUserIds(),(function(){t.updateNodes(),A&&A()}))},IC.prototype.unloadComponents=function(A,e){for(var t=this.model.modelKey,i=0,o=A.length;o>i;i+=1){var n=this.model.getModelDescriptor().getNodeInfosByComponentKey(A[i]);if(n){for(var r=0,a=n.length;a>r;r+=1){var s=n[r];if(s.mesh)this.defaultManager.meshManager.disposeGeometry(s.mesh.geometry.key),s.mesh.destroy()}this.model.manager.removeMeshFromOctantMap(t,A[i])}}this.model.getModelDescriptor().clearNodeInfoCacheByComponentsKey(A),e&&e()};var EC=function(A){Af.call(this,A),this.instancedComponent={}};Object.assign(EC.prototype,Af.prototype),EC.prototype.parseItemData=function(A){this._readMaterialBuffer(this.model),this._parseGeo(),vc.Instance&&this._parseInstanced();var e={},t=this.referencedMeshCache;for(var i in Bh.time("_readItemData"),t.components)t.components.hasOwnProperty(i)&&this._readItemData(e,i,i,void 0,0);Bh.timeEnd("_readItemData"),e=null,A&&A()},EC.prototype._readItemData=function(A,e,t){var i=this.referencedMeshCache.components[e];void 0!==i&&this._readMeshInfo(A,t,i,null)},EC.prototype._readMeshInfo=function(A,e,t,i){var o=this.referencedMeshCache,n=this.model.materialManager.materials,r=null,a=null,s=this.model.subModel[t.subModel];if(t.nodes||t.nodeIds){a=t.originalId;var l=(new M).fromArray(t.matrix||[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]);t.matrix=l;var c=[];c=t.nodes?t.nodes:t.nodeIds;for(var h=0;c.length>h;h+=1){var d=c[h];if("object"!==lc(d)&&(d=this.getReferencedMeshComponentNodeById(d)),d){var p,g=null,u="";if(-1!==d.geoId)if((g=this._getMeshNodeAttr(d,t,h)).boundingBox.applyMatrix4(s),g){if(t.buildInCategory&&(g.buildInCategory=t.buildInCategory),!n[u=d.material]){var f=_u[t.type]?_u[t.type].color:void 0;f||(Bh.log("Material not found for type: ",t.type),f=_u.DEFAULT.color),f||(Bh.log("Default material not found for type: ",t.type),f=[1,1,1,1]);var m=new LA(f[0],f[1],f[2]),C=u||m.getHexString()+"_"+f[3],y=n[C];y||(Bh.warn("缺少材质 "+u),y=Kd.createStandardMaterial({color:m}),1>f[3]&&(y.transparent=!0,y.opacity=f[3]),y.side=2,n[C]=y),g.material=u=C}if(n[u].aoMap){var v=this.getReferencedMeshBufferById(g.geometryId);v&&(v.uv2=v.uv)}p=g.nodeId;var I=(R=this.userDataReader)?R.getUserData(r):null;g.type=t.type,g.userId=e,g.name=t.name,g.userDataId=r,g.originalId=a,g.materialId=u,g.originMId=u,g.userData=I,g.categoryId=0,g.componentKey=e,g.familyName=t.familyName,g.familySymbol=t.familySymbol;var E=vc.Instance,B=o.reuseNodes.hasOwnProperty(p);g.instanceOrNot=!(!E||!B),g.isBatched=!0,g.state=Lc.Visible,g.material=null,this._classifyNodeInfo(g),g=null}else Bh.debug("非法node")}}}else{var x=t,S="";if(null===i?(r=x.userDataId,a=x.originalId,S=x.materialId||x.matId):(r=i.userDataId,a=i.originalId,S=i.materialId>-1?i.materialId:x.materialId),x.materials||(x.materials=[]),x.materials.length>0)for(h=0;x.materials.length>h;h+=1){var w=null;if(w=this._getOldMeshNodeAttr(A,x,x.materials.length>1,h)){if(x.buildInCategory&&(w.buildInCategory=x.buildInCategory),w.boundingBox.applyMatrix4(s),!n[S=x.materials[h]]){var b=_u[x.type]?_u[x.type].color:void 0;b||(Bh.log("Material not found for type: ",x.type),b=_u.DEFAULT.color),b||(Bh.log("Default material not found for type: ",x.type),b=[1,1,1,1]);var U=new LA(b[0],b[1],b[2]),F=S||U.getHexString()+"_"+b[3],K=n[F];K||(Bh.warn("缺少材质 "+S),K=Kd.createStandardMaterial({color:U}),1>b[3]&&(K.transparent=!0,K.opacity=b[3]),K.side=2,n[F]=K)}if(n[S].aoMap){var Q=this.getReferencedMeshBufferById(w.geometryId);Q&&(Q.uv2=Q.uv)}if(!w)return;var R;I=(R=this.userDataReader)?R.getUserData(r):null;w.type=x.type,w.userId=x.key,w.name=x.name,w.userDataId=r,w.originalId=a,w.materialId=S,w.originMId=S,w.userData=I,w.categoryId=0,w.componentKey=x.key,w.familyName=x.familyName,w.familySymbol=x.familySymbol,vc.Instance&&this.instancedComponent[x.key]?w.instanceOrNot=!0:(w.instanceOrNot=!1,this.instancedGeo[w.originalGeometryId].length>1&&(w.originalGeometryId="")),w.state=Lc.Visible,w.material=null,w.isBatched=!0,this._classifyNodeInfo(w),w=null}else Bh.debug("非法node")}else{var T=null,k=_u[x.type]?_u[x.type].color:void 0;k||(Bh.log("Material not found for type: ",x.type),k=_u.DEFAULT.color),k||(Bh.log("Default material not found for type: ",x.type),k=[1,1,1,1]);var D=new LA(k[0],k[1],k[2]),L=D.getHexString()+"_"+k[3],N=n[L];if(N||(N=Kd.createStandardMaterial({color:D}),1>k[3]&&(N.transparent=!0,N.opacity=k[3]),N.side=2,n[L]=N),x.materials.push(L),(T=this._getOldMeshNodeAttr(A,x,!1,0)).boundingBox.applyMatrix4(s),S=x.materials[0],!T)return;e=x.key;T.type=x.type,T.userId=e,T.name=x.name,T.originalId=a,T.materialId=S,T.originMId=S,T.userData={},T.categoryId=0,T.componentKey=e,T.familyName=x.familyName,T.familySymbol=x.familySymbol,T.instanceOrNot=!(!vc.Instance||!this.instancedComponent[e]),T.isBatched=!0,T.state=Lc.Visible,T.material=null,this._classifyNodeInfo(T),T=null}}},EC.prototype._getMeshNodeAttr=function(A,e,t){var i=new M;i.fromArray(A.matrix||[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]),vc.DataReduction&&i.scale(new y(1e3,1e3,1e3)),e&&i.multiplyMatrices(e.matrix,i),A.geoId=e.subModel+A.geoId;var o=A.nodeId,n=A.geoId;if(-1!==n){var r=A.maxBoundary||e.maxBoundary,a=A.minBoundary||e.minBoundary,s=new ph;return s.set(a,r),{nodeId:o,guid:A.guid,geometryId:n,originalGeometryId:A.geoId,matrix:i,boundingBox:s,model:this.model}}},EC.prototype._getOldMeshNodeAttr=function(A,e,t,i){var o=new M;o.fromArray(e.matrix||[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]),vc.DataReduction&&o.scale(new y(1e3,1e3,1e3));var n=t?e.key+"_"+i:e.key,r=t?e.geoId+"_"+i:e.geoId;if(-1!==r){var a=new ph,s=this.getReferencedMeshBufferById(e.geoId);return s&&s.position?(a=Tu.getBoundingBoxByBuffer(s.position)).applyMatrix4(o):Bh.warn("no position "),{nodeId:n,guid:e.guid,geometryId:r,originalGeometryId:e.geoId,matrix:o,boundingBox:a,model:this.model}}};var BC=function(A){Xu.call(this,A),this.maxGeoLoadTaskCount=0,this.geoLoadTaskCount=0,this.taskInstancedGeometrieManager=new Ou(this,"geometrie"),this.descriptor=new EC(A.model)};(BC.prototype=Object.assign(BC.prototype,Xu.prototype)).loadData=function(){for(var A=this,e=this,t=this.model,i=t.getConfig(),o=!1,n=0,r=0,a=0,s=0,l=[],c=[],h=[],d=[],p=[],g=[],u=[],f=[],m=[],C=function(C,y){var v=i.children[C];if(E=i.animation,!(I=i.scene[C])||!I.components||!I.geometries&&(!I.batchedGeometries&&!I.instancedGeometries||1>I.batchedGeometries.length&&1>I.instancedGeometries.length)||!I.materials||!I.textures)return Bh.error("scene is null,modelKey is ",t.modelKey),t.dispatchEventEx({type:Rc.ON_LOAD_EMPTY_SCENE,modelKey:t.modelKey}),"continue";if(o=!0,n+=I.components.length||0,I.components.forEach((function(A){e.fileKeyFromModelKey[A]=v})),r+=I.materials.length||0,a+=I.textures.length||0,s+=I.reuseNodes&&I.reuseNodes.length||0,u=u.concat(I.textures),A.map=A.map||[],2>Number(I.geo))return Bh.error("不支持1.0版本的几何结构和其他版本混合加载。"),{v:void 0};if(l=l.concat(I.components),h=h.concat(I.materials),m=m.concat(I.reuseNodes||[]),Array.isArray(I.nodes)&&(c=c.concat(I.nodes)),u=u.concat(I.textures),I.map&&A.map.push(I.map),I.trees.length>0)for(B=0;I.trees.length>B;B+=1)"partition"===(x=I.trees[B]).type&&(f.push(x.fileKey),e.fileKeyFromModelKey[x.fileKey]=v);I.lights&&I.lights.length>0&&(g=g.concat(I.lights)),E&&(E.bones.length,E.bones,d.push(E.clips),p.push(E.nodes))},y=0,v=i.scene.length;v>y;y+=1){var I,E,B,x,S=C(y);switch(S){case"continue":continue;default:if("object"===lc(S))return S.v}}if(t.setEmptyScene(!o),e.maxLoadTaskCount=0,e.maxLoadTaskCount+=n,e.maxLoadTaskCount+=r,e.maxLoadTaskCount+=f.length,e.maxLoadTaskCount+=s,e.maxLoadTaskCount+=c.length,e.maxLoadTaskCount+=g.length,1>e.maxLoadTaskCount)return Bh.info("Nothing to load ",t.modelKey),void t.dispatchEventEx({type:Tc.SCENE_NOTHING_TO_LOAD,modelKey:t.modelKey});e.progress.total+=e.maxLoadTaskCount,e.startCallback&&e.startCallback(),Bh.time("数据加载时间"),e._loadComponent(l),e._loadMaterial(h),e._loadComponentNode(c),e._loadReuseNode(m),vc.EnableTextureLoading&&a>0?(e.maxLoadTextureCount+=a,e._loadTextures(u)):e._onLoadTexture(),e._loadKDTree(f),g.length>0&&e._loadLights(g),e.offLine&&e.loadAttribute(),e.loadFloorInfo(e.model.modelKey),e.loadSceneAndGeos(i)},BC.prototype.loadReuseNode=function(A,e){var t=this,i=this.jsonLoader,o=this.model,n=this.url;i.setResponseType("json"),vc.useGzip&&i.setResponseType("arraybuffer"),i.setCacheViable(!0);i.load(n.mpkUrl(A),(function(A){t._parseReuseNodes(A),Bh.debug("component load from online"),e(),t._onTaskFinished()}),void 0,(function(A){o.dispatchEventEx({type:Tc.LOAD_COMPONENT_ERROR,modelKey:o.modelKey})}))},BC.prototype._parseComponent=function(A,e){var t=this.fileKeyFromModelKey[e]||"";if(A){var i=this.descriptor;if(i)for(var o in vc.useGzip&&(A=JSON.parse(uh.ab2str(pako.ungzip(A)))),A)if(A.hasOwnProperty(o)){var n=A[o];-1!==n.geoId&&(n.geoId=t+n.geoId,n.subModel=t),i.cacheReferencedMeshComponentData(A[o].key,A[o])}}else Bh.error("没有数据")},BC.prototype._parseMaterial=function(A,e){if(A){if(A instanceof ArrayBuffer)try{A=JSON.parse(uh.ab2str(A))}catch(A){Bh.error("处理材质出错")}var t=this.descriptor;if(t)for(var i in A)t.cacheReferencedMeshMaterialData(i,A[i])}else Bh.error("没有数据")},BC.prototype.loadBatchedGeometrie=function(A,e){var t=this,i=this.loader,o=this.url,n=this.model;i.setResponseType("arraybuffer"),i.setCacheViable(!this.offLine);var r=i.load(o.mpkUrl(A),(function(i){t._parseBatchedGeometrie(i,A),Bh.debug("geo load from online"),t._onGeoTaskFinished(),e()}),void 0,(function(A){n.dispatchEventEx({type:Tc.LOAD_GEOMETRY_ERROR,modelKey:n.modelKey}),e(),t._onGeoTaskFinished()}));t.requests.loadGeometrie=r},BC.prototype.loadInstancedGeometrie=function(A,e){var t=this,i=this.loader,o=this.url,n=this.model;i.setResponseType("arraybuffer"),i.setCacheViable(!this.offLine);var r=i.load(o.mpkUrl(A),(function(i){t._parseInstancedGeometrie(i,A),Bh.debug("geo load from online"),t._onGeoTaskFinished(),e()}),void 0,(function(A){n.dispatchEventEx({type:Tc.LOAD_GEOMETRY_ERROR,modelKey:n.modelKey}),e(),t._onGeoTaskFinished()}));t.requests.loadGeometrie=r},BC.prototype._parseBatchedGeometrie=function(A,e){var t=this.fileKeyFromModelKey[e]||"",i=new ku.BatchedGeometryReader(A,this.dataVersion),o=this.descriptor;if(o){for(var n=i.geoCount,r=0;n>r;r+=1){var a=i.geomMap[r];void 0!==a.position&&void 0!==a.index&&void 0!==a.normal?(a.geoId=t+a.geoId,o.cacheReferencedMeshBufferData(a.geoId,a),this.handler.createBatchedMeshNodes(a)):Bh.error("Error Geometry!")}this.model.manager.viewerImpl.render(),i=null}},BC.prototype._parseInstancedGeometrie=function(A,e){var t=this.fileKeyFromModelKey[e]||"",i=new ku.InstancedGeometryReader(A,this.dataVersion),o=this.descriptor;if(o){for(var n=i.geoCount,r=0;n>r;r+=1){var a=i.geomMap[r];void 0!==a.position&&void 0!==a.index&&void 0!==a.normal?(a.geoId=t+a.geoId,o.cacheReferencedMeshBufferData(a.geoId,a),this.handler.createInstancedMeshNodes(a)):Bh.error("Error Geometry!")}this.model.manager.viewerImpl.render(),i=null}},BC.prototype._parseReuseNodes=function(A,e){if(A){vc.useGzip&&(A=JSON.parse(uh.ab2str(pako.ungzip(A))));var t=this.descriptor;if(t)if(t.referencedMeshCache.reuseNodes)for(var i in A)t.referencedMeshCache.reuseNodes[i]=A[i];else t.referencedMeshCache.reuseNodes=A}else Bh.error("没有数据")},BC.prototype.startLoadSceneAndGeos=function(A){Bh.time("几何数据加载时间");for(var e=A.scene,t=this,i=0,o=0,n=[],r=[],a=function(a,s){var l=e[a],c=A.children[a];(l.batchedGeometries&&l.batchedGeometries.length>0||l.instancedGeometries&&l.instancedGeometries.length>0)&&(i+=l.batchedGeometries.length||0,o+=l.instancedGeometries.length||0,n=n.concat(l.batchedGeometries),r=r.concat(l.instancedGeometries),l.batchedGeometries.forEach((function(A){t.fileKeyFromModelKey[A]=c})),l.instancedGeometries.forEach((function(A){t.fileKeyFromModelKey[A]=c})))},s=0,l=e.length;l>s;s+=1)a(s);t.maxGeoLoadTaskCount+=i,t.maxGeoLoadTaskCount+=o,t.maxGeoLoadTaskCount>0||t._onGeoTaskFinished(),this._loadBatchedGeo(n),this._loadInstancedGeo(r)},BC.prototype.loadSceneAndGeos=function(A){for(var e=A.scene,t=this,i=0,o=[],n=function(n,r){var a=e[n],s=A.children[n];a.geometries&&a.geometries.length>0&&!(a.batchedGeometries&&a.batchedGeometries.length>0||a.instancedGeometries&&a.instancedGeometries.length>0)&&(i+=a.geometries.length||0,o=o.concat(a.geometries),a.geometries.forEach((function(A){t.fileKeyFromModelKey[A]=s})))},r=0,a=e.length;a>r;r+=1)n(r);t.maxLoadTaskCount+=i,this._loadGeo(o)},BC.prototype._loadBatchedGeo=function(A){var e=this;if(vc.getDataFromIndexedDB&&!this.offLine){for(var t=this.url,i=[],o=0;A.length>o;o+=1)i.push(t.mpkUrl(A[o]));var n=this.model.getStorage();n&&n.getBatch(i,(function(A){for(var t=function(t){if(A[i[t]])if(!0===A[i[t]].split){var o=A[i[t]].list,s=new Uint8Array(A[i[t]].length);n.getBatch(o,(function(A){for(var n=!0,r=0;o.length>r;r+=1)A[o[r]]?s.set(new Uint8Array(A[o[r]]),4e7*r):(n=!1,Bh.error("获取分割几何失败"));if(n){var a=i[t].indexOf("fileKey=");e._parseBatchedGeometrie(s.buffer,i[t].slice(a+8)),e._onGeoTaskFinished(),Bh.debug("load geo from local")}else{var l=e.taskGeometrieManager,c=i[t].indexOf("fileKey=");if(-1===c)return void Bh.error("url is not has fileKey");l.addTask(i[t].slice(c+8)),Bh.debug("load geo from net"),e.taskGeometrieManager.processTasks(e.loadBatchedGeometrie.bind(e))}}),(function(){Bh.error("获取分割几何失败")}))}else a=i[t].indexOf("fileKey="),e._parseBatchedGeometrie(A[i[t]],i[t].slice(a+8)),e._onGeoTaskFinished(),Bh.debug("load geo from local");else{if(r=e.taskGeometrieManager,-1===(a=i[t].indexOf("fileKey=")))return Bh.error("url is not has fileKey"),{v:void 0};r.addTask(i[t].slice(a+8)),Bh.debug("load geo from net")}},o=0;i.length>o;o+=1){var r,a,s=t(o);if("object"===lc(s))return s.v}e.taskGeometrieManager.processTasks(e.loadBatchedGeometrie.bind(e))}),(function(){for(var t=e.taskGeometrieManager,i=0;A.length>i;i+=1)t.addTask(A[i]);t.processTasks(e.loadBatchedGeometrie.bind(e))}))}else{for(var r=this.taskGeometrieManager,a=0;A.length>a;a+=1)r.addTask(A[a]);r.processTasks(e.loadBatchedGeometrie.bind(e))}},BC.prototype._loadInstancedGeo=function(A){var e=this;if(vc.getDataFromIndexedDB&&!this.offLine){for(var t=this.url,i=[],o=0;A.length>o;o+=1)i.push(t.mpkUrl(A[o]));var n=this.model.getStorage();n&&n.getBatch(i,(function(A){for(var t=function(t){if(A[i[t]])if(!0===A[i[t]].split){var o=A[i[t]].list,s=new Uint8Array(A[i[t]].length);n.getBatch(o,(function(A){for(var n=0;o.length>n;n+=1)A[o[n]]?s.set(new Uint8Array(A[o[n]]),4e7*n):Bh.error("获取分割几何失败");var r=i[t].indexOf("fileKey=");e._parseInstancedGeometrie(s.buffer,i[t].slice(r+8)),e._onGeoTaskFinished(),Bh.debug("load geo from local")}),(function(){Bh.error("获取分割几何失败")}))}else a=i[t].indexOf("fileKey="),e._parseInstancedGeometrie(A[i[t]],i[t].slice(a+8)),e._onGeoTaskFinished(),Bh.debug("load geo from local");else{if(r=e.taskInstancedGeometrieManager,-1===(a=i[t].indexOf("fileKey=")))return Bh.error("url is not has fileKey"),{v:void 0};r.addTask(i[t].slice(a+8)),Bh.debug("load geo from net")}},o=0;i.length>o;o+=1){var r,a,s=t(o);if("object"===lc(s))return s.v}e.taskInstancedGeometrieManager.processTasks(e.loadInstancedGeometrie.bind(e))}),(function(){for(var t=e.taskInstancedGeometrieManager,i=0;A.length>i;i+=1)t.addTask(A[i]);t.processTasks(e.loadInstancedGeometrie.bind(e))}))}else{for(var r=this.taskInstancedGeometrieManager,a=0;A.length>a;a+=1)r.addTask(A[a]);r.processTasks(e.loadInstancedGeometrie.bind(e))}},BC.prototype._onGeoTaskFinished=function(){(this.geoLoadTaskCount+=1,this.notifyProgress)&&(this.progressCallback&&this.progressCallback({total:this.maxLoadTaskCount+this.maxGeoLoadTaskCount,loaded:.8*(this.loadTaskCount+this.geoLoadTaskCount),modelKey:this.model.modelKey}));this.maxGeoLoadTaskCount>this.geoLoadTaskCount||(this.dataLoaded=!0,Bh.timeEnd("几何数据加载时间"),this.geoFinishCallback&&this.geoFinishCallback())},BC.prototype.getSceneTaskCount=function(A){var e=A.scenes;return e+=A.lines,e+=A.mpks,vc.BorderLineDelayLoaded||(e+=this.getAllBorderlineCount()),e},BC.prototype._parseKDTree=function(A,e){var t={};t="string"==typeof A?JSON.parse(A):A,this.model.kdTreeNode=this.model.kdTreeNode||[];var i=this.fileKeyFromModelKey[e]||"";if(t){var o=new Zu;o.modelKey=i,o.init(t),this.model.kdTreeNode.push(o)}};var xC=function(A,e){tf.call(this,A),this.defaultManager=new Of(e,A),this.instancedManager=new Hf(A),this.loader=new BC(this)};(xC.prototype=Object.create(tf.prototype)).prepare=function(A,e){if(this.isLoaded()&&!this.isHidden()){this.prepareWireframe(this.model,e);this.model.getMaterialManager();this.model.getMaterialManager()._updateTextureMapping(),!this.model.lightmap||this.model.enableLightmap===vc.EnableLightmap&&this.model.lightmapIntensity===vc.LightmapIntensity||(this.model.enableLightmap=vc.EnableLightmap,this.model.lightmapIntensity=vc.LightmapIntensity,this.rebuildIndicesforLightmap(),this.updateNodes())}},xC.prototype.settleData=function(A){var e=this;this.addNodeInfoToOctantMap();var t=!1,i=!1;this.createMeshNodes((function(){t=!0,i&&(e.loaded=!0,e.model.getMaterialManager()._updateTextureMapping(),e.clearCachedData(e.model),A&&A())})),e.model.setLoaded(!0);this.loader.geoFinishCallback=function(){i=!0,t&&(e.loaded=!0,e.model.getMaterialManager()._updateTextureMapping(),e.clearCachedData(e.model),A&&A())},this.loader.startLoadSceneAndGeos(this.model.getConfig())},xC.prototype.addNodeInfoToOctantMap=function(){var A=this.model.manager,e=this.model.getEncodedDatabagId();this.loader.getDescriptor().traverseNodeInfosByComponent((function(t,i){A.addNodeInfoToOctantMap(e,t,i)}))},xC.prototype.createMeshNodes=function(A){var e=this,t=this.model;vc.stepLoad&&t.setLoaded(!0);var i=this.loader.getDescriptor();this.instancedManager.createMeshNodes(t,i.getInstancedUserIds()),this.defaultManager.asyncCreateMeshNodes(t,i.getStandardUserIds(),(function(){t.getMaterialManager()._updateTextureMapping(),e.loaded=!0,A&&A()}))},xC.prototype.clearCachedData=function(A){this.loader.getDescriptor().destroyReader(),this.loader.getDescriptor().clearReferencedMeshCache(),this.defaultManager.clearCachedData(),this.instancedManager.clearCachedData()},xC.prototype.createBatchedMeshNodes=function(A){this.defaultManager.createBatchedMeshNodes(this.model,A)},xC.prototype.createInstancedMeshNodes=function(A){this.instancedManager.createInstancedMeshNodes(this.model,A)};var SC=function(A){$u.call(this,A)};Object.assign(SC.prototype,$u.prototype);var wC=function(A){Xu.call(this,A),this.descriptor=new SC(A.model)};(wC.prototype=Object.assign(wC.prototype,Xu.prototype)).loadSceneAndGeos=function(A){var e=A.scene,t=this.model,i=e.geometries.length||0,o=[];if(this.map={},ap(this.dataVersion,"2.0.0"))for(var n=0;i>n;n+=1)e.geometries[n].fileKey?o.push(e.geometries[n].fileKey):t.dispatchEventEx({type:Tc.SCENE_NOT_CLOSE,modelKey:t.modelKey});else o=e.geometries;this.maxLoadTaskCount+=i,this._loadGeo(o)},wC.prototype.getSceneTaskCount=function(A){var e=A.scenes;return e+=A.lines,e+=A.mpks,vc.BorderLineDelayLoaded||(e+=this.getAllBorderlineCount()),e};var MC=function(A,e){tf.call(this,A),this.defaultManager=new vC(e,A),this.instancedManager=new Hf(A),this.loader=new wC(this)};Object.assign(MC.prototype,tf.prototype),MC.prototype.prepare=function(A){this.isLoaded()&&!this.isHidden()&&(this.model.getMaterialManager()._updateTextureMapping(),this.model.clearMeshFromOctantMap(),this.instancedManager.addAllInstanceNodeToScene(this.model),this.defaultManager.cullNodes(this.model,A),this.prepareWireframe(this.model),this.updateNodes())},MC.prototype.prepareWireframe=function(A,e){A.isActivateWireframe()&&this.instancedManager.generateWireframe(A)},MC.prototype.settleData=function(A){this.addNodeInfoToOctantMap(),this.createMeshNodes(A)},MC.prototype.addNodeInfoToOctantMap=function(){var A=this.model.manager,e=this.model.getEncodedDatabagId();this.model.getModelDescriptor().traverseNodeInfosByComponent((function(t,i){A.addNodeInfoToOctantMap(e,t,i)}))},MC.prototype.createMeshNodes=function(A){var e=this.model,t=this;this.instancedManager.createMeshNodes(this.model,this.model.getModelDescriptor().getInstancedUserIds()),this.defaultManager.asyncCreateMeshNodes(e,e.getModelDescriptor().getStandardUserIds(),(function(){e.getMaterialManager()._updateTextureMapping(),t.updateNodes(),e.getModelDescriptor().clearReferencedMeshCache(),t.loaded=!0,A&&A()}))},MC.prototype.disposeBufferAfterVbo=function(){},MC.prototype.explosion=function(A){if(this.isLoaded()){var e=this.model.getComponentlist();A.componentKey=e,this.componentsExplosion(A)}},MC.prototype.closeExplosion=function(){this.explosion({})},MC.prototype.componentsExplosion=function(A){if(this.isLoaded()){var e=A.coefficientX||1,t=A.coefficientY||1,i=A.coefficientZ||1,o=A.offsetX||0,n=A.offsetY||0,r=A.offsetZ||0,a=null;if(A.center)a=(new y).fromArray(A.center);else if(1!==e||1!==t||1!==i||0!==o||0!==n||0!==r)return;var s=this.model,l=s.manager,c=Array.isArray(A.componentKey)?A.componentKey:[A.componentKey],h=new y,d=new aA,p=new y(0,0,0),g=new y(0,0,0),u=new y,f=s.getModelMatrix(),m=new M;f&&a&&(m.getInverse(f),a.applyMatrix4(m));for(var C=0;c.length>C;C+=1){var v=c[C],I=s.getComponentInfo(v);if(I&&I.length>0)for(var E=0,B=I.length;B>E;E+=1){var x=I[E],S=x.mesh;if(S){if(d.copy(x.boundingBox),d.getCenter(h),x.userData||(x.userData={}),p.set(0,0,0),g.set(0,0,0),1!==e||1!==t||1!==i||x.userData.explosionFactor){x.userData.explosionFactor||(x.userData.explosionFactor=new y(1,1,1),x.userData.explosionBaseDifference=h.sub(a).clone());var w=x.userData.explosionFactor,b=x.userData.explosionBaseDifference;p.set((e-w.x)*b.x,(t-w.y)*b.y,(i-w.z)*b.z),1===e&&1===t&&1===i?(x.userData.explosionFactor=void 0,x.userData.explosionBaseDifference=void 0):w.set(e,t,i)}if(0!==o||0!==n||0!==r||x.userData.explosionOffset){x.userData.explosionOffset||(x.userData.explosionOffset=new y(0,0,0));var U=x.userData.explosionOffset;g.set(o-U.x,n-U.y,r-U.z),0===o&&0===n&&0===r?x.userData.explosionOffset=void 0:U.set(o,n,r)}if(u.set(p.x+g.x,p.y+g.y,p.z+g.z),0!==u.x||0!==u.y||0!==u.z){x.userData.explosionFactor||x.userData.explosionOffset?l.explosionList[v]||(l.explosionList[v]=!0):delete l.explosionList[v],m.makeTranslation(u.x,u.y,u.z),x.transformation||(x.transformation=!0,x.transformationOriginalMatrix=x.matrix.clone(),x.applyMatrix=new M,x.transformationOriginalBoundingBox=x.boundingBox.clone()),x.matrix.premultiply(m),x.applyMatrix.premultiply(m),x.boundingBox.copy(x.transformationOriginalBoundingBox).applyMatrix4(x.applyMatrix);var F=S.matrixAutoUpdate;S.matrixAutoUpdate=!1,S.applyMatrix4(m),S.updateMatrixWorld(!0),S.matrixAutoUpdate=F;var K=x.wireframeMeshs;if(K)for(var Q=0,R=K.length;R>Q;Q+=1){var T=K[Q];F=T.matrixAutoUpdate,T.matrixAutoUpdate=!1,T.matrix.copy(S.matrix),T.updateMatrixWorld(!0),T.matrixAutoUpdate=F}}}}}}},MC.prototype.closeComponentsExplosion=function(A){var e=Array.isArray(A)?A:[A];this.componentsExplosion({componentKey:e})};var bC=function(A){this.model=A,this.config=null,this.statistics={renderableCount:0,renderableTotal:vc.maxObjectNumInPool,renderableTotalForPool:vc.maxObjectNumInPool,numOfElements:0,numOfTriangles:0,memoeryInfo:null},this.transformInfos={octreeTransformed:!0,originalBoundingBox:null,boundingBox:null,position:new y,rotation:new f,scale:new y(1,1,1),transformMatrix:new M,originalMatrix:new M}};bC.prototype.destroy=function(){this.model=null,this.config=null,this.statistics=null,this.transformInfos=null},bC.prototype.load=function(A){var e=this,t=this.model,i=t.dataUrl,o=function(o){var n={};if("string"==typeof o)try{n=JSON.parse(o)}catch(A){return t.setEmptyScene(!0),void t.dispatchEventEx({type:Rc.ON_LOAD_INVALID_SCENE,modelKey:t.modelKey})}else n=o;if(n&&"SUCCESS"===n.code){if(vc.offLine)e.model.getStorage().put(i.projectUrl(),n,e.model.modelKey,(function(){}),(function(){}));if(-1===Number(n.data.status))return void t.dispatchEventEx({type:Tc.PARSEFAILE,modelKey:t.modelKey});if(3>Number(n.data.status))return void t.dispatchEventEx({type:Tc.PARSING,modelKey:t.modelKey});if(n.data.type===Zc.DWG)return t.dispatchEventEx({type:Tc.IS2D,modelKey:t.modelKey}),void Bh.error("模型 ",t.modelKey," 是图纸文件,请使用EIMDRAWINGS库加载");!n.data.profiles||n.data.children&&n.data.children.length>1?(e.dataVersion="2.0.0",i.apiVersion="2.0.0",e.model.dataVersion=e.dataVersion):(e.dataVersion=n.data.profiles.geo||"1.0.0",i.apiVersion=n.data.profiles.api,e.model.dataVersion=e.dataVersion),e._parse(n.data),t.dispatchEventEx({type:Rc.ON_LOAD_CONFIG_FINISH,modelKey:t.modelKey}),A&&A()}else Bh.log(t.modelKey,"config load error! ",n.message),t.dispatchEventEx({type:Rc.ON_LOAD_ERROR,modelKey:t.modelKey,code:n.code,message:n.message}),t.manager.unload(t.modelKey)};if(vc.offLine){var n=this.model.getStorage();n&&n.getBatch([i.projectUrl()],(function(A){A[i.projectUrl()]?o(A[i.projectUrl()]):_d({type:"GET",url:i.projectUrl(),headers:{Authorization:t.accessToken},success:o,error:function(A){t.dispatchEventEx({type:Rc.ON_NETWORK_ERROR,modelKey:t.modelKey,data:A})}})}),(function(){}))}else _d({type:"GET",url:i.projectUrl(),headers:{Authorization:t.accessToken},success:o,error:function(A,e){switch(A){case 401:t.dispatchEventEx({type:Rc.ACCOUNT_NO_EXIST,modelKey:t.modelKey,data:e});break;case 403:t.dispatchEventEx({type:Rc.NO_PERMISSION,modelKey:t.modelKey,data:e});break;default:t.dispatchEventEx({type:Rc.ON_NETWORK_ERROR,modelKey:t.modelKey,data:A})}}})},bC.prototype._parse=function(A){this.config=A,A.lengthUnit&&(this.model.originalLengthUnit=A.lengthUnit),vc.AutoMergeComponent&&A.componentCount>vc.AutoMergeComponentCount&&(vc.MergeComponent=!0),this._toStatistics(A),this._setTransformInfos(A),this._chooseRendering(A),this._setHandler(A)},bC.prototype._getDataProvider=function(A){if(vc.DataProvider===Wc.MERGED&&void 0!==A.bmpks&&A.bmpks>0)return Bh.debug("data from: merged"),Wc.MERGED;if(vc.LoadComponentOnDemand&&A.scene&&A.scene.map){if(vc.DataProvider===Wc.LAYER_SCENE)return A.layers>1?(Bh.debug("data from: layer scene"),Wc.LAYER_SCENE):(Bh.debug("data from: layer"),Wc.LAYER);if(vc.DataProvider===Wc.LAYER)return Bh.debug("data from: layer"),Wc.LAYER}if(vc.DataProvider===Wc.AUTO){if(vc.LoadComponentOnDemand&&A.scene&&A.scene.map)return np(this.dataVersion,"2.0.0")&&(vc.MergeComponent=!0),Bh.debug("data from: layer"),Wc.LAYER;if(!vc.loadBatch&&A.scene.geometries&&A.scene.geometries.length>0)return rp(this.dataVersion,"2.0.0")&&(vc.MergeComponent=!0),Wc.DEFAULT;if(A.scene.batchedGeometries&&A.scene.batchedGeometries.length>0||A.scene.instancedGeometries&&A.scene.instancedGeometries.length>0)return vc.MergeComponent=!0,Wc.MERGED;if(vc.MergeComponent&&void 0!==A.bmpks&&A.bmpks>0)return Bh.debug("data from: merged"),Wc.MERGED}return Bh.debug("data from: default"),Wc.DEFAULT},bC.prototype._chooseRendering=function(A){this.model.manager.chooseRendering(this.statistics.memoeryInfo)},bC.prototype._setHandler=function(A){var e=this._getDataProvider(A),t=null,i=this.model;if(Array.isArray(A.scene)){for(var o=0,n=A.children.length;n>o;o+=1){var r=A.scene[o];r&&(i.subModel[A.children[o]]=(new M).fromArray(r.matrix||[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]))}t=new xC(i,!1),i.merged=!0,vc.MergeComponent=!0}else if(i.hasAnimation&&vc.EnableAnimation)t=new MC(i);else if(vc.MergeComponent){switch(e){case Wc.LAYER:vc.HasLayerData=!0,vc.LoadGeoOnDemand=!0,(t=new dC(i,!1)).layerProvider.cachedLayerData=A.scene.map;break;case Wc.LAYER_SCENE:vc.HasLayerData=!0,vc.LoadGeoOnDemand=!0;break;case Wc.MERGED:t=new oC(i,!1);break;default:t=new Yf(i,!1)}i.merged=!0}else if(vc.OrganizeNodesByCameraView)switch(e){case Wc.LAYER:case Wc.LAYER_SCENE:vc.HasLayerData=!0,vc.LoadGeoOnDemand=!0}else switch(e){case Wc.LAYER:vc.HasLayerData=!0,vc.LoadGeoOnDemand=!0,(t=new IC(i)).layerProvider.cachedLayerData=A.scene.map;break;case Wc.LAYER_SCENE:vc.HasLayerData=!0,vc.LoadGeoOnDemand=!0;break;case Wc.MERGED:break;default:t=new MC(i)}i._handler=t},bC.prototype._setTransformInfos=function(A){if(this.model.hasAnimation=A.hasAnimation,this.transformInfos.octreeTransformed=!1,this.transformInfos.boundingBox&&this.transformInfos.boundingBox.isBox3||(this.transformInfos.boundingBox=new aA),this.transformInfos.boundingBox.expandByPoint(new y(A.minBoundary.x,A.minBoundary.y,A.minBoundary.z)),this.transformInfos.boundingBox.expandByPoint(new y(A.maxBoundary.x,A.maxBoundary.y,A.maxBoundary.z)),this.transformInfos.transformMatrix.compose(this.transformInfos.position,this.transformInfos.rotation,this.transformInfos.scale),this.transformInfos.transformMatrix.fromArray(A.matrix||[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]),A.transform&&Array.isArray(A.transform)){var e=(new M).fromArray(A.transform||[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]);this.transformInfos.transformMatrix.multiplyMatrices(this.transformInfos.transformMatrix,e)}this.transformInfos.originalMatrix.copy(this.transformInfos.transformMatrix),this.model.setModelMatrix(this.transformInfos.transformMatrix),this.model.manager.updateScene()},bC.prototype._toStatistics=function(A){A.count={},A.count.texture_pixels&&A.count.texture_pixels>vc.MaxTexturePixels&&(vc.EnableTextureLoading=!1),void 0!==A.count&&(void 0!==A.count.mesh_face&&(this.statistics.numOfTriangles+=A.count.mesh_face),this.statistics.renderableTotal=0,this.statistics.renderableTotalForPool=0,void 0!==A.count.geom_box&&void 0!==A.count.geom_pipe&&void 0!==A.count.geom_tube&&void 0!==A.count.mesh?(this.statistics.renderableTotal+=A.count.geom_box,this.statistics.renderableTotal+=A.count.geom_pipe,this.statistics.renderableTotal+=A.count.geom_tube,this.statistics.renderableTotal+=A.count.mesh,this.statistics.renderableTotalForPool+=6*A.count.geom_box,this.statistics.renderableTotalForPool+=3*A.count.geom_pipe,this.statistics.renderableTotalForPool+=A.count.geom_tube,this.statistics.renderableTotalForPool+=A.count.mesh,this.statistics.numOfTriangles+=12*A.count.geom_box,this.statistics.numOfTriangles+=32*A.count.geom_pipe,this.statistics.numOfTriangles+=32*A.count.geom_tube):void 0!==A.count.geom&&void 0!==A.count.mesh&&(this.statistics.renderableTotal+=A.count.geom,this.statistics.renderableTotal+=A.count.mesh,this.statistics.numOfTriangles+=12*A.count.geom,this.statistics.numOfElements=this.statistics.renderableTotal,this.statistics.renderableTotalForPool=this.statistics.renderableTotal),void 0!==A.count.item&&(this.statistics.numOfElements=A.count.item)),this.statistics.memoeryInfo=this._computeApproximateMemoerySize(A)},bC.prototype._computeApproximateMemoerySize=function(A){var e=0,t=0,i=A.count.mesh_vertex||0,o=A.count.mesh_face||0,n=A.count.geom_box||0,r=A.count.geom_pipe||0,a=A.count.texture_pixels||0;t+=8*i,t+=3*o,t+=0,t+=0,e+=6*i,e+=3*o,e+=0,e+=0;var s=0;if(s+=o,n>0&&(s+=12*n),r>0&&(s+=124*r),s+=0,vc.Instance){n>0&&(t+=192,t+=36,t+=24*n,e+=144,e+=36,e+=18*n),r>0&&(t+=1040,t+=372,t+=24*r,e+=780,e+=372,e+=18*r)}else n>0&&(t+=24*n*8,t+=12*n*3,e+=24*n*6,e+=12*n*3),r>0&&(t+=130*r*8,t+=124*r*3,e+=130*r*6,e+=124*r*3);return vc.EnableTextureLoading&&(t+=4*a,e+=4*a),t*=4,e*=4,t*=1/1048576,e*=1/1048576,{maxMemoerySize:t=Math.ceil(t),minMemoerySize:e=Math.ceil(e),triangleNumber:s,instanceEnabled:vc.Instance}},bC.prototype.getMemoeryInfo=function(){return this.statistics.memoeryInfo},bC.prototype.getStatistics=function(){return this.statistics},bC.prototype.getConfig=function(){return this.config},bC.prototype.getTransforms=function(){return this.transformInfos},bC.prototype.setRenderableCount=function(A){this.statistics.renderableCount=A};var UC=function(A){ef.call(this,A),this.descriptor=new Af(A.model),this.fileKeyFromModelKey={}};(UC.prototype=Object.assign(UC.prototype,ef.prototype)).loadData=function(){var A=this,e=this.model;this.modelDataVersion=e.configLoader.modelDataVersion;e.getConfig();var t=e.configLoader.scenes,i=[],o=[],n=[],r=[],a=[],s=[],l=[],c=[];A.maxLoadTaskCount=0,A.maxLoadTextureCount=0;for(var h=function(h){var d=t[h].scene,F=t[h].dataVersion,K=t[h].modelKey;if(!(d&&d.components&&d.geometries&&d.materials&&d.textures))return e.setEmptyScene(!0),Bh.error("scene is null,modelKey is ",K),e.dispatchEventEx({type:Rc.ON_LOAD_EMPTY_SCENE,modelKey:K}),{v:void 0};if(p=d.components.length||0,g=d.geometries.length||0,u=d.materials.length||0,f=d.textures.length||0,m=[],C=[],y=[],v=[],I=[],E=[],B=d.textures,x=[],op(F,"2.0.0"))m=d.components,C=d.geometries,y=d.materials;else{for(S=0;p>S;S+=1)d.components[S].fileKey?m.push(d.components[S].fileKey):e.dispatchEventEx({type:Tc.SCENE_NOT_CLOSE,modelKey:K});for(w=0;g>w;w+=1)d.geometries[w].fileKey?C.push(d.geometries[w].fileKey):e.dispatchEventEx({type:Tc.SCENE_NOT_CLOSE,modelKey:K});for(M=0;u>M;M+=1)d.materials[M].fileKey?y.push(d.materials[M].fileKey):e.dispatchEventEx({type:Tc.SCENE_NOT_CLOSE,modelKey:K})}if(d.trees.length>0)for(b=0;d.trees.length>b;b+=1)"partition"===(U=d.trees[b]).type&&x.push(U.fileKey);A.maxLoadTaskCount+=p,A.maxLoadTaskCount+=g,A.maxLoadTaskCount+=u,vc.EnableTextureLoading&&(A.maxLoadTextureCount+=f),A.maxLoadTaskCount+=0,A.maxLoadTaskCount+=0,A.maxLoadTaskCount+=0,A.maxLoadTaskCount+=x.length,m.forEach((function(e){A.fileKeyFromModelKey[e]=K})),C.forEach((function(e){A.fileKeyFromModelKey[e]=K})),y.forEach((function(e){A.fileKeyFromModelKey[e]=K})),v.forEach((function(e){A.fileKeyFromModelKey[e]=K})),I.forEach((function(e){A.fileKeyFromModelKey[e]=K})),E.forEach((function(e){A.fileKeyFromModelKey[e]=K})),B.forEach((function(e){A.fileKeyFromModelKey[e]=K})),x.forEach((function(e){A.fileKeyFromModelKey[e]=K})),i=i.concat(m),o=o.concat(C),n=n.concat(y),r=r.concat(v),a=a.concat(I),s=s.concat(E),l=l.concat(B),c=c.concat(x)},d=0;t.length>d;d+=1){var p,g,u,f,m,C,y,v,I,E,B,x,S,w,M,b,U,F=h(d);if("object"===lc(F))return F.v}if(A.progress.total+=A.maxLoadTaskCount,1>A.maxLoadTaskCount)return Bh.info("Nothing to load ",e.modelKey),void e.dispatchEventEx({type:Tc.SCENE_NOTHING_TO_LOAD,modelKey:e.modelKey});Bh.time("数据加载时间"),A._loadComponent(i),A._loadMaterial(n),vc.EnableTextureLoading&&A.maxLoadTextureCount.length>0?A._loadTextures(l):A._onLoadTexture(),A._loadTextures(l),A._loadKDTree(c),A._loadClips(a),A._loadBones(r),A._loadNodes(s),A.offLine&&A.loadAttribute(),A._loadGeo(o)},UC.prototype.loadSceneAndGeos=function(A){this._loadGeo(A)},UC.prototype._loadGeometrie=function(A){var e=this;if(vc.getDataFromIndexedDB&&!this.offLine){var t=this.url,i=[],o=[];i.push(o);for(var n=0,r=0;A.length>r;r+=1)50>n||(i.push(o=[]),n=0),n+=1,o.push(t.mpkUrl(A[r]));var a=this.model.getStorage();if(a)for(var s=function(t,o){var n=i[o];a.getBatch(n,(function(A){for(var t=function(t){if(-1===(o=n[t].indexOf("fileKey=")))return Bh.error("url is not has fileKey"),{v:void 0};var i=n[t].slice(o+8);if(A[n[t]])if(!0===A[n[t]].split){var s=A[n[t]].list,l=new Uint8Array(A[n[t]].length);a.getBatch(s,(function(A){for(var t=0;s.length>t;t+=1)A[s[t]]?l.set(new Uint8Array(A[s[t]]),4e7*t):Bh.error("获取分割几何失败");e._parseGeometrie(l.buffer,i),Bh.debug("load geo from local"),e._onTaskFinished()}),(function(){Bh.error("获取分割几何失败")}))}else e._parseGeometrie(A[n[t]],i),Bh.debug("load geo from local"),e._onTaskFinished();else{if(r=e.taskGeometrieManager,-1===n[t].indexOf("fileKey="))return Bh.error("url is not has fileKey"),{v:void 0};r.addTask(i),Bh.debug("load geo from net")}},i=0;n.length>i;i+=1){var o,r,s=t(i);if("object"===lc(s))return s.v}e.taskGeometrieManager.processTasks(e.loadGeometrie.bind(e))}),(function(){for(var t=e.taskGeometrieManager,i=0;A.length>i;i+=1)t.addTask(A[i]);t.processTasks(e.loadGeometrie.bind(e))}))},l=0,c=i.length;c>l;l+=1)s(0,l)}else{for(var h=this.taskGeometrieManager,d=0;A.length>d;d+=1)h.addTask(A[d]);h.processTasks(e.loadGeometrie.bind(e))}},UC.prototype._loadKDTree=function(A){var e=this;if(vc.getDataFromIndexedDB&&!this.offLine){var t=this.url,i=[],o=[];i.push(o);for(var n=0,r=0;A.length>r;r+=1)50>n||(i.push(o=[]),n=0),n+=1,o.push(t.mpkUrl(A[r]));var a=this.model.getStorage();if(a)for(var s=function(t,o){var n=i[o];a.getBatch(n,(function(A){for(var t=0;n.length>t;t+=1){var i=n[t].indexOf("fileKey=");if(-1===i)return void Bh.error("url is not has fileKey");var o=n[t].slice(i+8);if(A[n[t]])e._parseKDTree(A[n[t]],o),Bh.debug("load kdtree from local"),e._onTaskFinished();else{var r=e.taskComponentManager;if(-1===n[t].indexOf("fileKey="))return void Bh.error("url is not has fileKey");r.addTask(o),r.processTasks(e.loadKDTree.bind(e)),Bh.debug("load kdtree from net")}}}),(function(){for(var t=e.taskComponentManager,i=0;A.length>i;i+=1)t.addTask(A[i]);t.processTasks(e.loadKDTree.bind(e))}))},l=0,c=i.length;c>l;l+=1)s(0,l)}else{for(var h=this.taskComponentManager,d=0;A.length>d;d+=1)h.addTask(A[d]);h.processTasks(e.loadKDTree.bind(e))}},UC.prototype._loadBones=function(A){var e=this;if(vc.getDataFromIndexedDB&&!this.offLine){for(var t=this.url,i=[],o=0;A.length>o;o+=1)i.push(t.bonesUrl(A[o]));var n=this.model.getStorage();n&&n.getBatch(i,(function(A){for(var t=0;i.length>t;t+=1){var o=i[t].indexOf("fileKey=");if(-1===o)return void Bh.error("url is not has fileKey");var n=i[t].slice(o+8);if(A[i[t]])e._parseBones(A[i[t]],n),Bh.debug("load Bones from local"),e._onTaskFinished();else{if(-1===i[t].indexOf("fileKey="))return void Bh.error("url is not has fileKey");e.loadBones(i[t].slice(o+8),(function(){})),Bh.debug("load Bones from net")}}}),(function(){for(var t=0;A.length>t;t+=1)e.loadBones(A[t],(function(){}))}))}else{for(var r=this.taskComponentManager,a=0;A.length>a;a+=1)r.addTask(A[a]);r.processTasks(e.loadBones.bind(e))}},UC.prototype._loadClips=function(A){var e=this;if(vc.getDataFromIndexedDB&&!this.offLine){for(var t=this.url,i=[],o=0;A.length>o;o+=1)i.push(t.clipsUrl(A[o]));var n=this.model.getStorage();n&&n.getBatch(i,(function(A){for(var t=0;i.length>t;t+=1){var o=i[t].indexOf("fileKey=");if(-1===o)return void Bh.error("url is not has fileKey");var n=i[t].slice(o+8);if(A[i[t]])e._parseClips(A[i[t]],n),Bh.debug("load Clips from local"),e._onTaskFinished();else{if(-1===i[t].indexOf("fileKey="))return void Bh.error("url is not has fileKey");e.loadClips(i[t].slice(o+8),(function(){})),Bh.debug("load Clips from net")}}}),(function(){for(var t=0;A.length>t;t+=1)e.loadClips(A[t],(function(){}))}))}else{for(var r=this.taskComponentManager,a=0;A.length>a;a+=1)r.addTask(A[a]);r.processTasks(e.loadClips.bind(e))}},UC.prototype._loadNodes=function(A){var e=this;if(vc.getDataFromIndexedDB&&!this.offLine){for(var t=this.url,i=[],o=0;A.length>o;o+=1)i.push(t.nodesUrl(A[o]));var n=this.model.getStorage();n&&n.getBatch(i,(function(A){for(var t=0;i.length>t;t+=1){var o=i[t].indexOf("fileKey=");if(-1===o)return void Bh.error("url is not has fileKey");var n=i[t].slice(o+8);if(A[i[t]])e._parseNodes(A[i[t]],n),Bh.debug("load Nodes from local"),e._onTaskFinished();else{if(-1===i[t].indexOf("fileKey="))return void Bh.error("url is not has fileKey");e.loadNodes(i[t].slice(o+8),(function(){})),Bh.debug("load Nodes from net")}}}),(function(){for(var t=0;A.length>t;t+=1)e.loadNodes(A[t],(function(){}))}))}else{for(var r=this.taskComponentManager,a=0;A.length>a;a+=1)r.addTask(A[a]);r.processTasks(e.loadNodes.bind(e))}},UC.prototype._loadComponent=function(A){var e=this;if(vc.getDataFromIndexedDB&&!this.offLine){var t=this.url,i=[],o=[];i.push(o);for(var n=0,r=0;A.length>r;r+=1)50>n||(i.push(o=[]),n=0),n+=1,o.push(t.mpkUrl(A[r]));var a=this.model.getStorage();if(a)for(var s=function(t,o){var n=i[o];a.getBatch(n,(function(A){for(var t=0;n.length>t;t+=1){var i=n[t].indexOf("fileKey=");if(-1===i)return void Bh.error("url is not has fileKey");var o=n[t].slice(i+8);if(A[n[t]])e._parseComponent(A[n[t]],o),Bh.debug("load com from local"),e._onTaskFinished();else{var r=e.taskComponentManager;if(-1===n[t].indexOf("fileKey="))return void Bh.error("url is not has fileKey");r.addTask(o),r.processTasks(e.loadComponent.bind(e)),Bh.debug("load com from net")}}}),(function(){for(var t=e.taskComponentManager,i=0;A.length>i;i+=1)t.addTask(A[i]);t.processTasks(e.loadComponent.bind(e))}))},l=0,c=i.length;c>l;l+=1)s(0,l)}else{for(var h=this.taskComponentManager,d=0;A.length>d;d+=1)h.addTask(A[d]);h.processTasks(e.loadComponent.bind(e))}},UC.prototype._loadMaterial=function(A){var e=this;if(vc.getDataFromIndexedDB&&!this.offLine){for(var t=this.url,i=[],o=0;A.length>o;o+=1)i.push(t.mpkUrl(A[o]));var n=this.model.getStorage();n&&n.getBatch(i,(function(A){for(var t=0;i.length>t;t+=1){var o=i[t].indexOf("fileKey=");if(-1===o)return void Bh.error("url is not has fileKey");var n=i[t].slice(o+8);if(A[i[t]])e._parseMaterial(A[i[t]],n),Bh.debug("load mat from local"),e._onTaskFinished();else{var r=e.taskMaterialManager;if(-1===i[t].indexOf("fileKey="))return void Bh.error("url is not has fileKey");r.addTask(n),r.processTasks(e.loadMaterial.bind(e)),Bh.debug("load mat from net")}}}),(function(){for(var t=e.taskMaterialManager,i=0;A.length>i;i+=1)t.addTask(A[i]);t.processTasks(e.loadMaterial.bind(e))}))}else{for(var r=this.taskMaterialManager,a=0;A.length>a;a+=1)r.addTask(A[a]);r.processTasks(e.loadMaterial.bind(e))}},UC.prototype._loadTextures=function(A){var e=this.model.materialManager.textures,t=this;if(vc.getDataFromIndexedDB&&!this.offLine){for(var i=this.url,o=[],n=0;A.length>n;n+=1)o.push(i.mpkUrl(A[n]));var r=this.model.getStorage();r&&r.getBatch(o,(function(A){for(var i=0;o.length>i;i+=1)if(A[o[i]]){var n=o[i].indexOf("fileKey=");if(-1===n)return void Bh.error("url is not has fileKey");var r=o[i].slice(n+8),a=new d;Bh.debug("load tex from local"),e[r]=a;var s=document.createElement("img");a.wrapS=a.wrapT=1e3,s.onload=function(e){"string"!=typeof A[o[i]]&&window.URL.revokeObjectURL(s.src),t.model.textureNeedsUpdate=!0,t._onLoadTexture()},s.onerror=function(A){t.model.dispatchEventEx({type:Tc.LOAD_TEXTURE_ERROR})},s.src="string"==typeof A[o[i]]?A[o[i]]:window.URL.createObjectURL(A[o[i]]),a.image=s,a.needsUpdate=!0}else{var l=t.taskTexturesManager,c=o[i].indexOf("fileKey=");if(-1===c)return void Bh.error("url is not has fileKey");l.addTask(o[i].slice(c+8)),l.processTasks(t.loadTextures.bind(t)),Bh.debug("load tex from net")}}),(function(){for(var e=t.taskTexturesManager,i=0;A.length>i;i+=1)e.addTask(A[i]);e.processTasks(t.loadTextures.bind(t))}))}else{for(var a=this.taskTexturesManager,s=0;A.length>s;s+=1)a.addTask(A[s]);a.processTasks(t.loadTextures.bind(t))}},UC.prototype._parseGeometrie=function(A,e){var t=this.fileKeyFromModelKey[e]||"",i=new ku.GeometryReader(A,this.modelDataVersion[t]),o=this.descriptor;if(o){for(var n=i.geoCount,r=0;n>r;r+=1){var a=i.geomMap[r];void 0!==a.position&&void 0!==a.index&&void 0!==a.normal?o.cacheReferencedMeshBufferData(t+a.geoId,a):Bh.error("Error Geometry!")}i=null}},UC.prototype._parseMaterial=function(A,e){var t=this.descriptor;if(t){var i=new Du(A,this.modelDataVersion[this.fileKeyFromModelKey[e]||""]);if(Array.isArray(i.materialMap)){var o=i.materialCount;if(0>o)return;for(var n=0;o>n;n+=1){var r=i.materialMap[n];t.cacheReferencedMeshMaterialData(r.matId,r)}}else for(var a in i.materialMap)t.cacheReferencedMeshMaterialData(a,i.materialMap[a]);i=null}},UC.prototype._parseComponent=function(A,e){if(A){var t=new Uu(A),i=t.compArr.length,o=this.descriptor;if(o){for(var n=this.fileKeyFromModelKey[e]||"",r=0;i>r;r+=1){var a=t.compArr[r];-1!==a.geoId&&(a.geoId=n+a.geoId,-1!==a.matId&&(a.matId=n+a.matId),this.model.submodel[n]=this.model.submodel[n]||[],this.model.submodel[n].push(a.key)),o.cacheReferencedMeshComponentData(a.key,a)}t=null}}else Bh.error("没有数据")},UC.prototype._parseKDTree=function(A,e){var t={};if(t="string"==typeof A?JSON.parse(A):A,this.model.kdTreeNode=this.model.kdTreeNode||[],t){var i=new Zu;i.init(t),this.model.kdTreeNode.push(i)}},UC.prototype._parseNodes=function(A,e){var t=this.descriptor;if(t){var i={};i="string"==typeof A?JSON.parse(A):A,Bh.debug("nodes",i),t.cacheReferencedMeshNodesData(i)}},UC.prototype._parseClips=function(A,e){var t=this.descriptor;if(t){var i={};i="string"==typeof A?JSON.parse(A):A,Bh.debug("clips",i),t.cacheReferencedMeshClipsData(i)}},UC.prototype._parseBones=function(A,e){var t=new ku.BoneReader(A),i=this.descriptor;if(i){for(var o=t.boneCount,n=0;o>n;n+=1){var r=t.boneMap[n];Bh.debug("bones",r),i.cacheReferencedMeshBoneBufferData(r.geoId,r)}t=null}},UC.prototype._loadComponent=function(A){var e=this;if(vc.getDataFromIndexedDB&&!this.offLine){var t=this.url,i=[],o=[];i.push(o);for(var n=0,r=0;A.length>r;r+=1)50>n||(i.push(o=[]),n=0),n+=1,o.push(t.mpkUrl(A[r]));var a=this.model.getStorage();if(a)for(var s=function(t,o){var n=i[o];a.getBatch(n,(function(A){for(var t=0;n.length>t;t+=1){var i=n[t].indexOf("fileKey=");if(-1===i)return void Bh.error("url is not has fileKey");var o=n[t].slice(i+8);if(A[n[t]])e._parseComponent(A[n[t]],o),Bh.debug("load com from local"),e._onTaskFinished();else{var r=e.taskComponentManager;if(-1===n[t].indexOf("fileKey="))return void Bh.error("url is not has fileKey");r.addTask(o),r.processTasks(e.loadComponent.bind(e)),Bh.debug("load com from net")}}}),(function(){for(var t=e.taskComponentManager,i=0;A.length>i;i+=1)t.addTask(A[i]);t.processTasks(e.loadComponent.bind(e))}))},l=0,c=i.length;c>l;l+=1)s(0,l)}else{for(var h=this.taskComponentManager,d=0;A.length>d;d+=1)h.addTask(A[d]);h.processTasks(e.loadComponent.bind(e))}},UC.prototype.loadGeometrie=function(A,e){var t=this,i=this.loader,o=this.url,n=this.model,r=vc.GeoWorkerUrl;vc.UseGeoWorker?(i.setResponseType("arraybuffer"),i.load(o.mpkUrl(A),(function(A){var i=new Worker(r);i.onmessage=function(A){var i=A.data;for(var o in i)i.hasOwnProperty(o);e(),t._onTaskFinished()},i.postMessage({msg:A})}))):(i.setResponseType("arraybuffer"),i.setCacheViable(!this.offLine),i.load(o.mpkUrl(A),(function(i){t._parseGeometrie(i,A,A),Bh.debug("geo load from online"),e(),t._onTaskFinished()}),void 0,(function(A){n.dispatchEventEx({type:Tc.LOAD_GEOMETRY_ERROR,modelKey:n.modelKey})})))},UC.prototype.loadMaterial=function(A,e){var t=this,i=this.loader,o=this.url,n=this.model,r=vc.GeoWorkerUrl;vc.UseGeoWorker?(i.setResponseType("arraybuffer"),i.load(o.mpkUrl(A),(function(A){var i=new Worker(r);i.onmessage=function(A){var i=A.data;for(var o in i)i.hasOwnProperty(o);e(),t._onTaskFinished()},i.postMessage({msg:A})}))):(i.setResponseType(t.modelDataVersion[t.fileKeyFromModelKey[A]||""]>1?"json":"arraybuffer"),i.setCacheViable(!this.offLine),i.load(o.mpkUrl(A),(function(i){t._parseMaterial(i,A),Bh.debug("met load from online"),e(),t._onTaskFinished()}),void 0,(function(A){n.dispatchEventEx({type:Tc.LOAD_MATERIAL_ERROR,modelKey:n.modelKey})})))},UC.prototype.loadTextures=function(A,e){var t=this.model.materialManager.textures,i=this,o=this.Textureloader,n=this.url,r=this.model,a=vc.GeoWorkerUrl;vc.UseGeoWorker?o.load(n.mpkUrl(A),(function(A){var t=new Worker(a);t.onmessage=function(A){var t=A.data;for(var o in t)t.hasOwnProperty(o);e(),i._onTaskFinished()},t.postMessage({msg:A})})):(o.setResponseType("blob"),o.setMimeType("text/plain"),o.setCacheViable(!this.offLine),o.load(n.textureUrl(A),(function(o){Bh.debug("tex load from online");var n=new d;t[A]=n,n.wrapS=n.wrapT=1e3;var a=document.createElement("img");a.onload=function(A){"string"!=typeof o&&window.URL.revokeObjectURL(a.src),e(),i.model.textureNeedsUpdate=!0,i._onLoadTexture()},a.onerror=function(A){r.dispatchEventEx({type:Tc.LOAD_TEXTURE_ERROR,modelKey:r.modelKey})},a.src="string"==typeof o?o:window.URL.createObjectURL(o),n.image=a,n.needsUpdate=!0}),void 0,(function(A){r.dispatchEventEx({type:Tc.LOAD_TEXTURE_ERROR,modelKey:r.modelKey})})))},UC.prototype.loadComponent=function(A,e){var t=this,i=this.jsonLoader,o=this.model,n=this.url,r=vc.GeoWorkerUrl;vc.UseGeoWorker?(i.setResponseType("json"),i.load(n.mpkUrl(A),(function(A){var i=new Worker(r);i.onmessage=function(A){var i=A.data;for(var o in i)i.hasOwnProperty(o);e(),t._onTaskFinished()},i.postMessage({msg:A})}),(function(A){}))):(i.setResponseType("json"),i.setCacheViable(!this.offLine),i.load(n.mpkUrl(A),(function(i){t._parseComponent(i,A),Bh.debug("component load from online"),e(),t._onTaskFinished()}),void 0,(function(A){o.dispatchEventEx({type:Tc.LOAD_COMPONENT_ERROR,modelKey:o.modelKey})})))},UC.prototype.loadKDTree=function(A,e){var t=this,i=this.loader,o=this.model,n=this.url,r=vc.GeoWorkerUrl;vc.UseGeoWorker?(i.setResponseType("json"),i.load(n.mpkUrl(A),(function(A){var i=new Worker(r);i.onmessage=function(A){var i=A.data;for(var o in i)i.hasOwnProperty(o);e(),t._onTaskFinished()},i.postMessage({msg:A})}),(function(A){}))):(i.setResponseType("json"),i.setCacheViable(!this.offLine),i.load(n.kdTreeUrl(A),(function(i){t._parseKDTree(i,A),Bh.debug("kdtree load from online"),e(),t._onTaskFinished()}),void 0,(function(A){o.dispatchEventEx({type:Tc.LOAD_COMPONENT_ERROR,modelKey:o.modelKey})})))},UC.prototype.loadBones=function(A,e){var t=this,i=this.loader,o=this.model,n=this.url,r=vc.GeoWorkerUrl;vc.UseGeoWorker?(i.setResponseType("arraybuffer"),i.load(n.bonesUrl(A),(function(A){var i=new Worker(r);i.onmessage=function(A){var i=A.data;for(var o in i)i.hasOwnProperty(o);e(),t._onTaskFinished()},i.postMessage({msg:A})}),(function(A){}))):(i.setResponseType("arraybuffer"),i.setCacheViable(!this.offLine),i.load(n.bonesUrl(A),(function(i){t._parseBones(i,A),Bh.debug("bones load from online"),e(),t._onTaskFinished()}),void 0,(function(A){o.dispatchEventEx({type:Tc.LOAD_COMPONENT_ERROR,modelKey:o.modelKey})})))},UC.prototype.loadClips=function(A,e){var t=this,i=this.loader,o=this.model,n=this.url,r=vc.GeoWorkerUrl;vc.UseGeoWorker?(i.setResponseType("json"),i.load(n.mpkUrl(A),(function(A){var i=new Worker(r);i.onmessage=function(A){var i=A.data;for(var o in i)i.hasOwnProperty(o);e(),t._onTaskFinished()},i.postMessage({msg:A})}),(function(A){}))):(i.setResponseType("json"),i.setCacheViable(!this.offLine),i.load(n.clipsUrl(A),(function(i){t._parseClips(i,A),Bh.debug("Clips load from online"),e(),t._onTaskFinished()}),void 0,(function(A){o.dispatchEventEx({type:Tc.LOAD_COMPONENT_ERROR,modelKey:o.modelKey})})))},UC.prototype.loadNodes=function(A,e){var t=this,i=this.loader,o=this.model,n=this.url,r=vc.GeoWorkerUrl;vc.UseGeoWorker?(i.setResponseType("json"),i.load(n.mpkUrl(A),(function(A){var i=new Worker(r);i.onmessage=function(A){var i=A.data;for(var o in i)i.hasOwnProperty(o);e(),t._onTaskFinished()},i.postMessage({msg:A})}),(function(A){}))):(i.setResponseType("json"),i.setCacheViable(!this.offLine),i.load(n.nodesUrl(A),(function(i){t._parseNodes(i,A),Bh.debug("Nodes load from online"),e(),t._onTaskFinished()}),void 0,(function(A){o.dispatchEventEx({type:Tc.LOAD_COMPONENT_ERROR,modelKey:o.modelKey})})))};var FC=function(A,e){tf.call(this,A),this.defaultManager=new Of(e,A),this.instancedManager=new Hf(A),this.loader=new UC(this)};FC.prototype=Object.create(Yf.prototype);var KC=function(A){bC.call(this,A),this.modelDataVersion={}};(KC.prototype=Object.assign(KC.prototype,bC.prototype)).load=function(A){var e=this,t=this.model;this.config={};var i=t.dataUrl,o=function(o){var n={};if("string"==typeof o)try{n=JSON.parse(o)}catch(A){return t.setEmptyScene(!0),void t.dispatchEventEx({type:Rc.ON_LOAD_INVALID_SCENE,modelKey:t.modelKey})}else n=o;if(n&&"SUCCESS"===n.code){if(vc.offLine)e.model.getStorage().put(i.projectUrl(),n,e.model.modelKey,(function(){}),(function(){}));if(-1===Number(n.data.status))return void t.dispatchEventEx({type:Tc.PARSEFAILE,modelKey:t.modelKey});if(3>Number(n.data.status))return void t.dispatchEventEx({type:Tc.PARSING,modelKey:t.modelKey});e.dataVersion=n.data.profiles.geo||"1.0.0",i.apiVersion=n.data.profiles.api,e.model.dataVersion=e.dataVersion,e._parse(n.data),t.dispatchEventEx({type:Rc.ON_LOAD_CONFIG_FINISH,modelKey:t.modelKey}),A&&A()}else Bh.log(t.modelKey,"config load error! ",n.message),t.dispatchEventEx({type:Rc.ON_LOAD_ERROR,modelKey:t.modelKey,code:n.code,message:n.message})};if(vc.offLine){var n=this.model.getStorage();n&&n.getBatch([i.projectUrl()],(function(A){A[i.projectUrl()]?o(A[i.projectUrl()]):_d({type:"GET",url:i.projectUrl(),headers:{Authorization:t.accessToken},success:o,error:function(A){t.dispatchEventEx({type:Rc.ON_NETWORK_ERROR,modelKey:t.modelKey,data:A})}})}),(function(){}))}else{for(var r=[],a=function(){var A=t.modelKeys[s];r.push(new Promise((function(e,o){_d({type:"GET",url:i.projectUrl(A),headers:{Authorization:t.accessToken},success:function(t){e({modelKey:A,data:t})},error:function(e,i){switch(e){case 401:t.dispatchEventEx({type:Rc.ACCOUNT_NO_EXIST,modelKey:A,data:i});break;case 403:t.dispatchEventEx({type:Rc.NO_PERMISSION,modelKey:A,data:i});break;default:t.dispatchEventEx({type:Rc.ON_NETWORK_ERROR,modelKey:A,data:e})}o(e,i)}})})))},s=0;t.modelKeys.length>s;s+=1)a();Promise.all(r).then((function(o){for(var n=[],r=0,a=0;o.length>a;a+=1)if(o[a]){var s=o[a].data,l=o[a].modelKey,c={};if("string"==typeof s)try{c=JSON.parse(s)}catch(A){return void t.dispatchEventEx({type:Rc.ON_LOAD_INVALID_SCENE,modelKey:l})}else c=s;if(c&&"SUCCESS"===c.code){if(vc.offLine)e.model.getStorage().put(i.projectUrl(),c,e.model.modelKey,(function(){}),(function(){}));var h=c.data.scene||null,d=c.data.profiles.geo||"1.0.0";if(i.apiVersion=c.data.profiles.api,n.push({scene:h,modelKey:c.data.key,dataVersion:d}),e.modelDataVersion[c.data.key]=d,r+=c.data.componentCount,-1===Number(c.data.status))return void t.dispatchEventEx({type:Tc.PARSEFAILE,modelKey:l});if(3>Number(c.data.status))return void t.dispatchEventEx({type:Tc.PARSING,modelKey:l});e.dataVersion=c.data.profiles.geo||"1.0.0",e.sceneReader=e.sceneReader||[],t.setConfig(c.data),e._parse(c.data)}else Bh.log(t.modelKey,"config load error! ",c.message),t.dispatchEventEx({type:Rc.ON_LOAD_ERROR,modelKey:l,code:c.code,message:c.message})}var p=new FC(t,!1);t._handler=p,e.model.componentCount=r,t.dispatchEventEx({type:Rc.ON_LOAD_CONFIG_FINISH,modelKey:t.modelKey}),e.scenes=n,A&&A()})).catch((function(A){console.log(A)}))}},KC.prototype._parse=function(A){this.config=A,A.lengthUnit&&(this.model.originalLengthUnit=A.lengthUnit),vc.MergeComponent=!0,this._toStatistics(A),this._setTransformInfos(A),this._chooseRendering(A)};var QC={};QC.brdf_vs=["varying vec2 vUV;","void main() {"," vUV = uv;"," gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);","}"].join("\n"),QC.brdf_fs=["varying vec2 vUV;","uniform sampler2D HammersleyTable;","const float PI = 3.14159265358979;","float GGX(float NdotV, float alpha)","{"," float alpha2 = pow(alpha, 2.0);"," return 2.0 * NdotV / (NdotV + sqrt(alpha2 + (1.0 - alpha2) * NdotV * NdotV));","}","float G_Smith(float NdotV, float NdotL, float roughness)","{"," float alpha = pow(roughness, 2.0);"," return GGX(NdotV, alpha) * GGX(NdotL, alpha);","}","vec3 ImportanceSampleGGX(vec2 Xi, vec3 N, float roughness)","{"," float a = roughness * roughness;"," float Phi = 2.0 * PI * Xi.x; "," float CosTheta = sqrt((1.0 - Xi.y) / (1.0 + (a * a - 1.0) * Xi.y)); "," float SinTheta = sqrt(1.0 - CosTheta * CosTheta);"," vec3 H;"," H.x = SinTheta * cos(Phi); "," H.y = SinTheta * sin(Phi); "," H.z = CosTheta;"," vec3 UpVector = abs(N.z) < 0.999 ? vec3(0.0, 0.0, 1.0) : vec3(1.0, 0.0, 0.0); "," vec3 TangentX = normalize(cross(UpVector, N)); "," vec3 TangentY = cross(N, TangentX);"," return normalize(TangentX * H.x + TangentY * H.y + N * H.z);","}","vec2 IntegrateBRDF(float NdotV, float roughness)","{"," vec3 N = vec3(0.0, 0.0, 1.0);"," vec3 V = vec3(sqrt(1.0 - NdotV * NdotV), 0.0, NdotV);"," vec2 result = vec2(0.0, 0.0);"," const int NumSamples = 1024;"," for (int i = 0; i < NumSamples; i++)"," {"," float u = float(i) / float(NumSamples);"," vec2 Xi = vec2(u, texture2D(HammersleyTable, vec2(u)).r);"," vec3 H = ImportanceSampleGGX(Xi, N, roughness);"," vec3 L = 2.0 * dot(V, H) * H - V;"," float NdotL = saturate(L.z);"," float NdotH = saturate(H.z);"," float VdotH = saturate(dot(V, H));"," float NdotV = saturate(dot(N, V));"," if (NdotL > 0.0)"," {"," float G = G_Smith(NdotV, NdotL, roughness);"," float G_Vis = G * VdotH / (NdotH * NdotV); "," float F = pow(1.0 - VdotH, 5.0);"," result.x += (1.0 - F) * G_Vis;"," result.y += F * G_Vis;"," }"," }"," return result / float(NumSamples);","}","void main()","{"," vec2 brdf = IntegrateBRDF(vUV.x, vUV.y);"," gl_FragColor = vec4(brdf, 0.0, 1.0);","}"].join("\n"),QC.BRDFMap=function(A,e){this.texture=null,this.resolution=e||512,this.brdfMaterial=new Pe({vertexShader:QC.brdf_vs,fragmentShader:QC.brdf_fs,uniforms:{HammersleyTable:{value:A}},lights:!1}),this.quad=new Ue(new et(window.innerWidth,window.innerHeight),this.brdfMaterial),this.quad.position.z=-100},QC.BRDFMap.prototype.constructor=QC.BRDFMap,QC.BRDFMap.prototype.generateMap=function(A){var e=new Y;e.add(this.quad);var t=new Ka(window.innerWidth/-2,window.innerWidth/2,window.innerHeight/2,window.innerHeight/-2,-1e4,1e4);t.position.z=100;var i=new g(this.resolution,this.resolution,{minFilter:1006,magFilter:1003,format:1022});A.setRenderTarget(i),A.clear(),A.render(e,t),this.texture=i.texture};var RC=function(){this.instanceMaterials={},this.materials={},this.textures={},this.lightmaps={},this.ensureImagePowerOfTwo=!1};RC.prototype.changeAllMaterials=function(A,e){},RC.prototype.destroy=function(){this.instanceMaterials={},this.materials={},this.textures={},this.lightmaps={}},RC.prototype.disposeInstanceMaterials=function(A){var e=this.instanceMaterials;for(var t in e){var i=e[t];if(Array.isArray(i))for(var o=0,n=i.length;n>o;o+=1)i[o].dispose();else i.dispose()}},RC.prototype.disposeMaterials=function(A){for(var e in this.materials)this.materials[e].dispose();this.disposeInstanceMaterials(A)},RC.prototype.updateMaterialsValue=function(A,e,t){var i=this.materials,o=this.instanceMaterials,n=null;for(var r in i)for(var r in(n=i[r])&&n[e]&&(n[e]=t,"function"==typeof n.refreshUniforms&&n.refreshUniforms(),n.needsUpdate=!0),o)if(n=o[r])if(Array.isArray(n))for(var a=0,s=n.length;s>a;a+=1)n[a][e]&&(n[a][e]=t,"function"==typeof n[a].refreshUniforms&&n[a].refreshUniforms(),n[a].needsUpdate=!0);else n[e]&&(n[e]=t,"function"==typeof n.refreshUniforms&&n.refreshUniforms(),n.needsUpdate=!0)},RC.prototype.enableColorWithoutLight=function(A){var e=this.materials,t=this.instanceMaterials,i=null;if(A){for(var o in e)(i=e[o])&&(i.defines.USE_COLORWITHOUTLIGHT="",i.needsUpdate=!0);for(var o in t)if(i=t[o])if(i instanceof Array)for(var n=0,r=i.length;r>n;n+=1)i[n].defines.USE_COLORWITHOUTLIGHT="",i[n].needsUpdate=!0;else i.defines.USE_COLORWITHOUTLIGHT="",i.needsUpdate=!0}else{for(var o in e)(i=e[o])&&(delete i.defines.USE_COLORWITHOUTLIGHT,i.needsUpdate=!0);for(var o in t)if(i=t[o])if(i instanceof Array)for(n=0,r=i.length;r>n;n+=1)delete i[n].defines.USE_COLORWITHOUTLIGHT,i[n].needsUpdate=!0;else delete i.defines.USE_COLORWITHOUTLIGHT,i.needsUpdate=!0}},RC.prototype._updateTextureMapping=function(A){var e=vc.EnableTextureMapping,t=this.ensureImagePowerOfTwo;function i(A,e){if(e){if(void 0===e.length)A.map=e;else for(var i=0;e.length>i;i+=1)t||(e[i].image=Kd.ensurePowerOfTwo(e[i].image)),"map"===e[i].texturetype?A.map=e[i]:"bumpMap"===e[i].texturetype?e[i].depth&&(A.bumpScale=e[i].depth):"specularMap"===e[i].texturetype?A.specularMap=e[i]:"alphaMap"===e[i].texturetype?(A.alphaMap=e[i],A.alphaTest=.01,A.map=e[i],A.transparent=!0):"emissiveMap"===e[i].texturetype?A.emissiveMap=e[i]:"environmentMap"===e[i].texturetype?A.envMap=e[i]:"normalMap"===e[i].texturetype?(A.normalMap=e[i],e[i].depth&&A.normalScale.set(e[i].depth,e[i].depth)):Bh.warn("This map type is not supported yet:",e[i].texturetype);vc.IBL&&A.refreshUniforms(),A.needsUpdate=!0}else A.textureColor&&A.color.setStyle(A.textureColor),A.needsUpdate=!0}if(this.lastTextureEnabled!==e){var o=this.textures,n=this.materials;if(A)var r=A.manager.getMaterialOverrideSet(),a=r?r.materialsByName:null,s=r?r.textures:null;var l=this.instanceMaterials,c=null,h=null;if(e){for(c in n){if(h=n[c])i(h,d=o[c])}for(c in l)if(h=l[c]){var d=o[c];if(s&&s[c]&&(d=s[c]),Array.isArray(h))for(var p=0,g=h.length;g>p;p+=1)i(h[p],d);else i(h,d)}for(c in a){if(h=a[c])i(h,d=s[c.split("#")[0]])}this.ensureImagePowerOfTwo=!0}else{if(!r)for(c in n)(h=n[c])&&(h.map=null,h.needsUpdate=!0);for(c in l)if(h=l[c])if(Array.isArray(h))for(p=0,g=h.length;g>p;p+=1)h[p].pureColor&&(h[p].color.setStyle(h[p].pureColor),h[p].map=null,h[p].needsUpdate=!0),r||(h[p].map=null,h[p].needsUpdate=!0);else h.pureColor&&(h.color.setStyle(h.pureColor),h.map=null,h.needsUpdate=!0),r||(h.map=null,h.needsUpdate=!0);for(c in a)(h=a[c])&&(h.map=null,h.needsUpdate=!0,h.pureColor&&h.color.setStyle(h.pureColor))}this.lastTextureEnabled=e}},RC.prototype.updateMaterials=function(A){var e=this.materials;for(var t in e)if(e.hasOwnProperty(t)){var i=e[t];i.IBLMaps=A.manager.scene.IBLMaps,i.refreshUniforms()}},RC.prototype._updateIBL=function(A){var e=A.manager.scene;if(vc.IBL&&null!==e.iblProbe&&e.iblProbe.isComputed){this.materialManager.updateMaterials(A);var t=e.IBLcfg,i=t[Object.keys(t)[e.IBLIndex]];for(var o in i)this.materialManager.updateMaterialsValue(A,o,i[o])}},RC.prototype.changeAllMaterials=function(A,e){var t=this.materials;for(var i in t)if(t.hasOwnProperty(i)){var o=Kd.getMaterialParameters(t[i]),n=null;e?(delete o.textureColor,delete o.pureColor,delete o.imageFade,o.lights=!0,(n=new QC.IBLMaterial(o)).type="IBL",n.refreshUniforms()):(delete o.iblProbe,(n=Kd.createStandardMaterial(o)).roughness=o.originRoughness,n.metalness=o.originMetalness,n.refreshUniforms()),n.name=i,t[i]=n,o=null}},RC.prototype.switchNewStyleMaterial=function(A,e){var t=this.materials;for(var i in t)if(t.hasOwnProperty(i)){var o=Kd.getMaterialParameters(t[i]),n=null;(n=e?Kd.createNewStyleMaterial(o):Kd.createStandardMaterial(o)).name=i,t[i]=n,o=null}},RC.prototype.getInstanceMaterialById=function(A,e){if(this.instanceMaterials[A])return this.instanceMaterials[A];var t=Kd.getMaterialParameters(e.manager.getOverrideMaterialByName(A)||this.materials[A]),i=t.transparent,o=Kd.createInstanceMaterial(t,!0);o.transparent=!1;var n=Kd.createInstanceMaterial(t,!0);return n.transparent=!0,vc.TranslucentDepthDisabled&&(n.depthWrite=!1),i===o.transparent?(this.instanceMaterials[A]=[o,n],n.defines.INSTANCE_STATE_SECONDARY=""):(this.instanceMaterials[A]=[n,o],o.defines.INSTANCE_STATE_SECONDARY=""),this.instanceMaterials[A]},RC.prototype.getMaterialById=function(A){return this.materials[A]};var TC=function(A,e,t,i){var o=this;this.manager=A,this.modelKey=e.modelKey,this.projectKey=e.dbName,this.offLine=e.offLine,this.accessToken=e.token||"",this.shareKey=e.share||"",this.dataVersion=null,this.debut=i,this.dataUrl=new eC(e),this.submodel={},this.loadingManager=new jr,this.loadingManager.model=this,this.fileLoader=new bu(this.loadingManager),this.configLoader=new bC(this),this.firstOctreeTransform=!0,this.numOfElements=0,this.numOfTriangles=0,this.singleStepMode=!1,this.sizeOfNextStep=0,this.needUpdate=!1,this.boundingBoxWorld=null,this.rotation=new f,this.position=new y,this.scale=new y(1,1,1),this.transformMatrix=new M,this.selectedMaterial=this.manager.sceneState.selectionMaterial,this.materialManager=new RC,this.wireframeManager=new au,this.axisNetManager=void 0,this.floorManager=void 0,this.containsCamera=!1,this.loaded=!1,this.visible=!0,this.emptyScene=!1,this.cameraList=[],this.index=0,this.modelConfig=null,this.kdTreeNode=null,this.parseCfgFinish=void 0,this.progressPercentage={load:.4,collect:.5,merge:.1},this.progressFrequency=10,this._encodedDatabagId=this.modelKey,this.groupName=gp.MODEL+"|"+this.modelKey,this.group=this.manager.scene.getOrCreateGroup(this.groupName,{pickableType:Qc.Geometry,globalSpace:!0}),this._handler=null,this.lightmap=!1,this.lightmapNum=0,this.enableLightmap=!1,this.lightmapIntensity=vc.LightmapIntensity,this.minDistanceObjects={},this.prioritizedNodeCount=0,this.plugins=[],this.merged=!1,e.modelKeys&&(this.modelGroup=!0,this.groupKey=e.modelKey,this.modelKeys=e.modelKeys,this.progressFrequency=100,this.merged=!0,this.configLoader=new KC(this)),this.subModel={},mh.isSupportIndexedDB()?(this.storage=new AC({store:this.modelKey,version:1,dbName:this.modelKey}),this.storage.addEventListener(Rc.ON_DATABASE_OPEN,(function(A){t&&t(o,!0)})),this.storage.addEventListener(Rc.ON_DATABASE_EEEOR,(function(A){o.storage=void 0,t&&t(o,!1)}))):(o.storage=void 0,t&&t(this,!1))};Object.assign(TC.prototype,Ld.prototype),TC.prototype.getStorage=function(){return this.storage},TC.prototype.destroy=function(){this.selectedMaterial=null,this.cameraList=null,this.occlusionCamera&&(this.occlusionCamera=null),this._removeMeshNodeGroup(),this.removeAllFromOctantMap(),this._handler&&(this._handler.destroy(),this._handler=null),this.wireframeManager.destroy(),this.wireframeManager=null,this.materialManager.disposeMaterials(this),this.materialManager.destroy(),this.materialManager=null,this.manager=null,this.plugins=null,this.dataUrl=null,this.fileLoader=null,this.configLoader.destroy(),this.configLoader=null},TC.prototype._getWireframeGroupName=function(){return gp.WIREFRAME+"|"+this.modelKey},TC.prototype.load=function(A){var e=this;this.configLoader.load((function(){e.parseCfgFinish&&e.parseCfgFinish(),e.manager.updateScene(),e._getHandler().load(A)}))},TC.prototype.setCrossOrigin=function(A){this.fileLoader.setCrossOrigin(A)},TC.prototype.prepare=function(A,e){var t=this._getHandler();t&&t.prepare(A,e)},TC.prototype.dispatchEventEx=function(A){A.modelKey=this.modelKey,this.manager.dispatchEvent(A)},TC.prototype.setLoaded=function(A){this.loaded=A},TC.prototype.isLoaded=function(){return this.loaded},TC.prototype.getTransformMatrix=function(){return this.transformMatrix},TC.prototype.isEmptyScene=function(){return this.emptyScene},TC.prototype.setEmptyScene=function(A){this.emptyScene=A},TC.prototype.isLayerData=function(){return!(!this._handler||"layer"!==this._handler.tag)},TC.prototype.setConfig=function(A){this.configLoader.config=A},TC.prototype.getConfig=function(){return this.configLoader.config},TC.prototype.isVisible=function(){return this.manager.filter._isModelVisible(this.modelKey)},TC.prototype.setVisible=function(A){A?this.manager.filter.showModelByIds([this.modelKey]):this.manager.filter.hideModelByIds([this.modelKey])},TC.prototype.calculateCameraModelRelation=function(A){this.containsCamera=this.getModelDescriptor().isOctreeOuter(A)},TC.prototype.addCamera=function(A){this.cameraList.push(A)},TC.prototype.getCameraNameList=function(){for(var A=[],e=this.cameraList.length-1;e>=0;e-=1)A.push(this.cameraList[e].name);return A},TC.prototype.getCamera=function(A){for(var e=this.cameraList.length-1;e>=0;e-=1)if(this.cameraList[e].name===A)return this.cameraList[e];return null},TC.prototype.updateOctreeNode=function(A){if(A||this.firstOctreeTransform){this.firstOctreeTransform&&(this.firstOctreeTransform=!1);var e=this.manager.scene.getMatrixGlobal();this.getModelDescriptor().updateOctreeNode(e)}},TC.prototype.isDataReady=function(){var A=this._handler;return!!A&&A.isDataReady()},TC.prototype.updateMeshNodes=function(A){var e=this._getHandler();if(e){if("layer"===e.tag&&!e.layerDataLoaded)return;e.updateNodes()}},TC.prototype._getHandler=function(A){return this._handler},TC.prototype.getMeshesByUserIds=function(A){if(A){var e=this._getHandler();return e?e.getMeshesByUserIds(A):void 0}},TC.prototype.applyFilter=function(){if(!1!==this.manager.filter._isModelVisible(this.modelKey)){for(var A=0,e=this.plugins.length;e>A;A+=1)this.plugins[A].applyFilter();this.group.visible=!0;var t=this._getHandler();t&&t.applyFilter()}else this.group.visible=!1},TC.prototype.applySelection=function(){for(var A=0,e=this.plugins.length;e>A;A+=1)this.plugins[A].applySelection();var t=this._getHandler();t&&t.applySelection()},TC.prototype.clearSelection=function(){for(var A=0,e=this.plugins.length;e>A;A+=1)this.plugins[A].clearSelection();var t=this._getHandler();t&&t.clearSelection()},TC.prototype.applyHover=function(){for(var A=0,e=this.plugins.length;e>A;A+=1)this.plugins[A].applyHover();var t=this._getHandler();t&&t.applyHover()},TC.prototype.clearHover=function(){for(var A=0,e=this.plugins.length;e>A;A+=1)this.plugins[A].clearHover();var t=this._getHandler();t&&t.clearHover()},TC.prototype.applyBlink=function(){var A=this._getHandler();A&&A.applyBlink()},TC.prototype.clearBlink=function(){var A=this._getHandler();A&&A.clearBlink()},TC.prototype.applyReplacement=function(){var A=this._getHandler();A&&A.applyReplacement()},TC.prototype._removeMeshNodeGroup=function(){this._removeNodeGroup(gp.GEOMETRY),this._removeNodeGroup(gp.INSTANCEGEOMETRY),this._removeNodeGroup(gp.WIREFRAME),this._removeNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY),this._removeNodeGroup(gp.AXISNET),this._removeSceneGroup(),this.group=null},TC.prototype._getNodeGroup=function(A,e){for(var t=this.group.children,i=0,o=t.length;o>i;i+=1)if(t[i].name===A)return t[i];var n=new ep(A,e);return this.group.add(n),n.globalSpace&&(n.matrixAutoUpdate=!1,n.updateMatrixWorld(!0)),n},TC.prototype._removeNodeGroup=function(A){this.group.removeByName(A)},TC.prototype._hasNodeGroup=function(A){return this.group.hasChild(A)},TC.prototype._removeSceneGroup=function(){this.manager.scene.removeGroupByName(this.groupName),this.manager.scene.removeGroupByName(this._getWireframeGroupName())},TC.prototype.removeAllFromOctantMap=function(){this.manager.removeAllFromOctantMap(this.modelKey)},TC.prototype.clearMeshFromOctantMap=function(){this.manager.removeMeshFromOctantMap(this.modelKey)},TC.prototype.getDatabagId=function(){return this.modelKey},TC.prototype.getEncodedDatabagId=function(){return this.modelKey},TC.prototype.getMaterialManager=function(){return this.materialManager},TC.prototype.clearWireframeElementCount=function(){this.wireframeElementCount=void 0},TC.prototype.getWireframeElementCount=function(){if(void 0!==this.wireframeElementCount)return this.wireframeElementCount;var A=this.getModelDescriptor().getAllNodeInfos(),e=this.manager.filter,t=0;for(var i in A){var o=A[i];e._hasRenderWithBoardlineFilter()&&!e._isRenderWithBoardline(o[0])||(t+=o.length)}return this.wireframeElementCount=t,t},TC.prototype.isActivateWireframe=function(){return this.manager.isDrawingBoardlineEnabled()},TC.prototype.isOnlyWireframe=function(){return this.manager.isOnlyWireframe()},TC.prototype.getLoadedUserIdsObject=function(){return this._handler&&this._handler.getLoadedUserIdsObject?this._handler.getLoadedUserIdsObject():null},TC.prototype.clearNodeGroup=function(){var A=this._getNodeGroup(gp.GEOMETRY,{globalSpace:!0});A.clear(),(A=this._getNodeGroup(gp.WIREFRAME,{globalSpace:!0})).clear(),(A=this._getNodeGroup(gp.INSTANCEGEOMETRY,{globalSpace:!0})).clear(),(A=this._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY,{globalSpace:!0})).clear()},TC.prototype.getWireframeMaterial=function(){return this.wireframeManager.wireframeMaterial},TC.prototype.getInstanceWireframeMaterial=function(){return this.wireframeManager.instanceWireframeMaterial},TC.prototype.getMaterialByMaterialId=function(A){return this.materialManager.materials[A]},TC.prototype.adjustProgressPercentage=function(A,e,t){this.progressPercentage.load=A,this.progressPercentage.collect=e,this.progressPercentage.merge=t},TC.prototype.setReplacedUserIdMap=function(A){this.replacedUserIdMap=uh.isOwnEmptyObject(A)?null:A},TC.prototype.hasReplacedUserId=function(){return!uh.isEmptyObject(this.replacedUserIdMap)},TC.prototype.isReplacedUserId=function(A){return this.replacedUserIdMap&&this.replacedUserIdMap[A]},TC.prototype.registerPlugin=function(A){this.plugins.push(A)},TC.prototype.disposeBufferAfterVbo=function(){var A=this._getHandler();A&&A.disposeBufferAfterVbo()},TC.prototype.isHiddenUserId=function(A){var e=this._getHandler();return!!e&&e.isHiddenNode(A)},TC.prototype.hasHiddenUserId=function(){return this.manager.hasHiddenUserId()},TC.prototype.isHiddenSourceObjectUserId=function(A){return this.manager.isHiddenSourceObjectUserId(A)},TC.prototype.hasHiddenSourceObjectUserId=function(){return this.manager.hasHiddenSourceObjectUserId()},TC.prototype.getModelDescriptor=function(){return this._handler.loader.getDescriptor()},TC.prototype.getLoader=function(){return this._handler.loader},TC.prototype.getConfig=function(){return this.configLoader.getConfig()},TC.prototype.getTransforms=function(){return this.configLoader.getTransforms()},TC.prototype.getStatistics=function(){return this.configLoader.getStatistics()},TC.prototype.setRenderableCount=function(A){this.configLoader.setRenderableCount(A),this._handler&&this._handler.clearPriorityNodesSet&&this._handler.clearPriorityNodesSet(!0)},TC.prototype.getRenderableCount=function(){return this.configLoader.getStatistics().renderableCount},TC.prototype.getBoundingBoxWorld=function(){return this.configLoader.getTransforms().boundingBox},TC.prototype.calculateBoundingBox=function(){var A=this.getModelDescriptor().getAllNodeInfos(),e=new aA;for(var t in A)for(var i=A[t],o=0,n=i.length;n>o;o+=1){var r=i[o];r.boundingBox&&e.union(r.boundingBox)}var a=this.getModelMatrix();a&&e.applyMatrix4(a),this.configLoader.getTransforms().boundingBox.copy(e)},TC.prototype.calculateClippingIds=function(){var A=this._getHandler();A&&A.calculateClippingIds()},TC.prototype.explode=function(A){var e=this.getBoundingBoxWorld().getCenter(),t=this._getHandler();t&&t.explode(e,A)},TC.prototype.formatLayerIds=function(A){return this.getLayerProvider().formatLayerIds(A)},TC.prototype.getBoundingBoxOfGeometries=function(A){for(var e=!A,t=new aA,i=0;A.length>i;i+=1){var o=this.group.getObjectByProperty("guid",A[i]);if(o){var n=o.geometry;if(n){if(e||n){n.boundingBox||n.computeBoundingBox();var r=n.boundingBox;if(r){var a=r.clone();o.matrixWorld&&a.applyMatrix4(o.matrixWorld),t.expandByPoint(a.min),t.expandByPoint(a.max)}}}else Bh.log("empty geometry!")}}return t},TC.prototype.setModelMatrix=function(A){this.group.matrix.copy(A),this.group.updateMatrixWorld(!0);var e=this.configLoader.transformInfos;e&&e.boundingBox&&(e.transformMatrix.copy(A),e.originalBoundingBox?this.calculateBoundingBox():(e.originalBoundingBox=e.boundingBox.clone(),e.boundingBox.applyMatrix4(A))),this.manager.updateSceneBoundingBox()},TC.prototype.applyModelMatrix=function(A){var e=this.configLoader.transformInfos;e&&e.boundingBox&&(e.transformMatrix.premultiply(A),e.originalBoundingBox||(e.originalBoundingBox=e.boundingBox.clone()),e.boundingBox.applyMatrix4(A)),this.group.matrix.copy(e.transformMatrix),this.group.updateMatrixWorld(!0),this.manager.updateSceneBoundingBox()},TC.prototype.getModelMatrix=function(){var A=null;return this.group.matrix&&(A=this.group.matrix.clone()),A},TC.prototype.resetModelMatrix=function(){var A=this.configLoader.transformInfos.originalMatrix;A&&this.setModelMatrix(A)},TC.prototype.overturnYAndZaxis=function(){var A=(new M).makeRotationFromEuler(new F(Math.PI/2,0,0));this.group.matrix&&(A.multiply(this.group.matrix),this.setModelMatrix(A))},TC.prototype.hasComponent=function(A){return!!this.getModelDescriptor().getNodeInfosByUserId(A)},TC.prototype.getComponentInfo=function(A){return this.getModelDescriptor().getNodeInfosByComponentKey(A)},TC.prototype.getComponentlist=function(){var A=[],e=this.getModelDescriptor();for(var t in e.mapNodeInfoByComponentKey)e.mapNodeInfoByComponentKey.hasOwnProperty(t)&&A.push(t);return A},TC.prototype.addMeshToInfoMap=function(A,e,t,i,o){this.getModelDescriptor().addMeshToInfoMap(A,e,t,i,o)},TC.prototype.loadGeopkOnDemand=function(A,e,t){this._handler&&"layer"===this._handler.tag&&this._handler.loadGeopkOnDemand(A,e,t)},TC.prototype.unloadGeopkOnDemand=function(A,e){this._handler&&"layer"===this._handler.tag&&this._handler.unloadComponents(A,e)},TC.prototype.loadAllGeosOnDemand=function(A,e,t){this._handler&&"layer"===this._handler.tag&&this._handler.loadAllGeosOnDemand(A,e,t)},TC.prototype.getUnionBoundingBoxOnDemand=function(){return this.getLayerProvider().getUnionBoundingBoxOnDemand()},TC.prototype.setConditionsChangedOnDemand=function(A){this.getLayerProvider().setConditionsChanged(A)},TC.prototype.explosion=function(A){var e=this._getHandler();Bh.time("模型离散用时"),e&&(this.explosioning=!0,e.explosion(A)),Bh.timeEnd("模型离散用时"),this.calculateBoundingBox()},TC.prototype.closeExplosion=function(){Bh.time("取消模型离散用时");var A=this._getHandler();A&&(A.closeExplosion(),this.explosioning=!1),Bh.timeEnd("取消模型离散用时")},TC.prototype.componentsExplosion=function(A){var e=this._getHandler();if(1===(A.coefficientX||1)&&1===(A.coefficientY||1)&&1===(A.coefficientZ||1)&&0===(A.offsetX||0)&&0===(A.offsetY||0)&&0===(A.offsetZ||0))return this.explosioning=!1,this.closeComponentsExplosion(A.componentKey),void this.calculateBoundingBox();Bh.time("构件离散用时"),e&&(this.explosioning=!0,e.componentsExplosion(A),this.calculateBoundingBox()),Bh.timeEnd("构件离散用时")},TC.prototype.closeComponentsExplosion=function(A){Bh.time("取消构件离散用时");var e=this._getHandler();e&&(e.closeComponentsExplosion(A),this.explosioning=!1),Bh.timeEnd("取消构件离散用时")},TC.prototype.floorExplosion=function(A){if(this.floorManager){var e=this.floorManager.floorExplosionInfo;this.explosioning=!0;var t=this._getHandler();if(!t)return!1;if(!e.sortedFloors){for(var i=[],o=0,n=e.floors.length;n>o;o+=1){var r=e.floors[o],a=this.manager.getBoundingBoxByIds(r.componentkeys);if(!a.isEmpty()){r.box=a;var s=new y;r.box.getCenter(s),r.center=s,i.push(r)}}i.sort((function(A,e){return A.center.z-e.center.z})),e.sortedFloors=i;for(var l=0,c=1/0,h=0,d=0,p=i.length;p>d;d+=1){var g=Math.abs(i[d].center.z);c>g&&(l=d,c=g);var u=new y;i[d].box.getSize(u),h+=u.z}e.baseFloorIndex=l,e.averageHeight=h/i.length;var f=i[l].center.toArray();e.center=f}for(var m=(A-1)*e.averageHeight,C=0,v=e.sortedFloors.length;v>C;C+=1){if(C!==e.baseFloorIndex)t.componentsExplosion({offsetZ:(C-e.baseFloorIndex)*m,componentKey:e.sortedFloors[C].componentkeys,center:e.center})}return this.calculateBoundingBox(),!0}return!1},TC.prototype.closeFloorExplosion=function(){if(this.floorManager){var A=this.floorManager.floorExplosionInfo;if(A&&A.sortedFloors){var e=this._getHandler();if(e){for(var t=0,i=A.sortedFloors.length;i>t;t+=1){e.closeComponentsExplosion(A.sortedFloors[t].componentkeys)}this.calculateBoundingBox(),this.explosioning=!1}}}},TC.prototype.showModel=function(A){this.nodes.visible=A},TC.prototype.updateMaterials=function(){var A=this.materials;for(var e in A)if(A.hasOwnProperty(e)){var t=A[e];t.IBLMaps=this.manager.scene.IBLMaps,t.refreshUniforms()}},TC.prototype.updateMaterialsValue=function(A,e){var t=this.materials;for(var i in t)if(t.hasOwnProperty(i)){var o=t[i];o.hasOwnProperty(A)&&(o[A]=e,o.refreshUniforms(),o.needsUpdate=!0)}},TC.prototype.changeAllMaterials=function(A){var e=this.materials;for(var t in e)if(e.hasOwnProperty(t)){var i=Kd.getMaterialParameters(e[t]),o=null;A?(delete i.textureColor,delete i.pureColor,delete i.imageFade,i.lights=!0,(o=new QC.IBLMaterial(i)).type="IBL",o.refreshUniforms()):(delete i.iblProbe,(o=Kd.createStandardMaterial(i)).roughness=i.originRoughness,o.metalness=i.originMetalness,o.refreshUniforms()),o.name=t,e[t]=o,i=null}},TC.prototype.getAllComponents=function(){return this.getComponentlist()},TC.prototype.getComponentKeysByTypeFromList=function(A,e){for(var t=this.getModelDescriptor(),i=[],o=0;A.length>o;o+=1)t.mapNodeInfoByComponentKey.hasOwnProperty(A[o])&&t.mapNodeInfoByComponentKey[A[o]][0].type===e&&i.push(A[o]);return i},TC.prototype.getComponentKeysByType=function(A){var e=this.getModelDescriptor(),t=[];for(var i in e.mapNodeInfoByComponentKey)e.mapNodeInfoByComponentKey.hasOwnProperty(i)&&e.mapNodeInfoByComponentKey[i][0].type===A&&t.push(i);return t},TC.prototype.getAllComponentKeyType=function(){var A={},e=[],t=this.getModelDescriptor();for(var i in t.mapNodeInfoByComponentKey)if(t.mapNodeInfoByComponentKey.hasOwnProperty(i)){var o=t.mapNodeInfoByComponentKey[i][0].type;A[o]||(A[o]=!0,e.push(o))}return e},TC.prototype.getComponentKeysByName=function(A){var e=this.getModelDescriptor(),t=[];for(var i in e.mapNodeInfoByComponentKey)e.mapNodeInfoByComponentKey.hasOwnProperty(i)&&e.mapNodeInfoByComponentKey[i][0].name===A&&t.push(i);return t},TC.prototype.getComponentKeysByProperty=function(A,e){var t=this.getModelDescriptor(),i=[];for(var o in t.mapNodeInfoByComponentKey)t.mapNodeInfoByComponentKey.hasOwnProperty(o)&&t.mapNodeInfoByComponentKey[o][0][A]===e&&i.push(o);return i},TC.prototype._getLayerHandler=function(){return this._layerHandler},TC.prototype.prepareData=function(){var A=this;this.materialManager._updateTextureMapping(),this.materialManager._updateIBL(this);var e=this._getHandler();e&&e.prepareData((function(){A.loaded=!0,A.hasAnimation&&vc.EnableAnimation&&A.createPanel(),A.debut(A)}))},TC.prototype.isUserIdExist=function(A){return!!this.getModelDescriptor().getNodeInfosByUserId(A)},TC.prototype.getNodeInfosByUserId=function(A){return this.getModelDescriptor().getNodeInfosByUserId(A)},TC.prototype.getNodeInfos=function(){return this.getModelDescriptor().getNodeInfosWithUserId()},TC.prototype.getFilter=function(){return this.manager.filter},TC.prototype.getOctreeRoots=function(A){this.getModelDescriptor().getOctreeRoots(A)},TC.prototype.getPickingMeshes=function(A,e,t,i){this._dealNonInstancedNodesForPicking(A,e,t,i),this._dealInstancedNodesForPicking(A,e,t,i),this._dealPluginNodesForPicking(A,e,t,i)},TC.prototype._dealNonInstancedNodesForPicking=function(A,e,t,i){if(this._handler){var o=this._handler.defaultManager;if(o.hasNodeInfo(this)){var n=o.getMeshManager().getPickingNodeGenerator().updatePickingMeshes(A.selectedMaterial,t,i);n&&e.meshes.push(n);var r=o.getWireFrameManager().getPickingNodeGenerator().updatePickingMeshes(A.wireframeMaterial,t,i);r&&e.meshes.push(r)}}},TC.prototype._dealInstancedNodesForPicking=function(A,e,t,i){if(this._handler){var o=this._handler.instancedManager;if(o.hasNodeInfo(this)){var n=o.getMeshManager().getPickingNodeGenerator().updatePickingMeshes(A.instancedSelectedMaterial,t,i);n&&e.meshes.push(n);var r=o.getWireFrameManager().getPickingNodeGenerator().updatePickingMeshes(A.instancedWireFrameMaterial,t,i);r&&e.meshes.push(r)}}},TC.prototype._dealPluginNodesForPicking=function(A,e,t,i){if(this._handler)for(var o=this.plugins,n=0,r=o.length;r>n;n+=1){var a=o[n].getPickingNodeGenerator().updatePickingMeshes(A.selectedMaterial,t,i);a&&e.meshes.push(a)}},TC.prototype.onWSWorkerMessage=function(){},TC.prototype.onPDWorkerMessage=function(){},TC.prototype._overrideOcclusionMaterial=function(A){var e=A.material;if(e&&!1===e.transparent){var t=this.manager.acquireMaterial(),i=t.material;e.color?i.color.copy(e.color):t.resetColor(),i.opacity=vc.OcclusionOpacity,A.material=i,A.material.needsUpdate=!0}},TC.prototype.showSkeleton=function(A){this.skeleton.visible=A},TC.prototype.deactivateAllActions=function(){this.needUpdate=!1,this.actions.forEach((function(A){A.stop()}))},TC.prototype.activateAllActions=function(){this.needUpdate=!0;for(var A=0;this.actions.length>A;A+=1)this.setWeight(this.actions[A],0===A?1:0);this.actions.forEach((function(A){A.play()}))},TC.prototype.pauseAllActions=function(){this.needUpdate=!1,this.actions.forEach((function(A){A.paused=!0}))},TC.prototype.toSingleStepMode=function(){this.unPauseAllActions(),this.singleStepMode=!0,this.sizeOfNextStep=this.settings["调整步长"]},TC.prototype.pauseContinue=function(){this.singleStepMode?(this.singleStepMode=!1,this.unPauseAllActions()):this.paused?(this.paused=!1,this.unPauseAllActions()):(this.paused=!0,this.pauseAllActions())},TC.prototype.unPauseAllActions=function(){this.needUpdate=!0,this.actions.forEach((function(A){A.paused=!1}))},TC.prototype.setWeight=function(A,e){A.enabled=!0,A.setEffectiveTimeScale(1),A.setEffectiveWeight(e)},TC.prototype.modifyTimeScale=function(A){this.mixer.timeScale=A},TC.prototype.createPanel=function(){var A=this,e=new $m({width:300}).addFolder(this.modelKey),t=e.addFolder("可见性"),i=e.addFolder("激活/失活"),o=e.addFolder("暂停/步进"),n=e.addFolder("混合权重"),r=e.addFolder("综合速度");this.settings={"显示模型":!0,"显示骨骼":!1,"关闭全部动画":this.deactivateAllActions.bind(A),"激活所有动画":this.activateAllActions.bind(A),"暂停/继续":this.pauseContinue.bind(A),"单步动画":this.toSingleStepMode.bind(A),"调整步长":.05,"使用默认持续时间":!0,"设置自定义持续时间":3.5,"modify idle weight":0,"modify walk weight":1,"modify run weight":0,"修改时间尺度":1};var a=this.settings;t.add(a,"显示模型").onChange(this.showModel.bind(A)),t.add(a,"显示骨骼").onChange(this.showSkeleton.bind(A)),i.add(a,"关闭全部动画"),i.add(a,"激活所有动画"),o.add(a,"暂停/继续"),o.add(a,"单步动画"),o.add(a,"调整步长",.01,.1,.001);for(var s=this.actions,l=function(e){var t=s[e]._clip.name;a[t]=0===e?1:0,n.add(a,t,0,1,.01).listen().onChange((function(t){A.setWeight(s[e],t)}))},c=0;s.length>c;c+=1)l(c);r.add(a,"修改时间尺度",0,10,.01).onChange(this.modifyTimeScale.bind(A)),t.open(),i.open(),o.open(),n.open(),r.open()},TC.prototype.getTransformGroup=function(){return this.transformGroup||(this.transformGroup=this.manager.scene.getOrCreateGroup(gp.TRANSFORM),this.group.add(this.transformGroup),this.transformGroup.updateMatrixWorld(!0)),this.transformGroup},TC.prototype.getComponentKeysBySubmodelKey=function(A){return this.submodel[A]||[]},TC.prototype.getTrianglesCount=function(){var A=0,e=0,t=0,i=0,o={};return this.group.traverse((function(n){if(n.isMesh){var r=n.geometry,a=r.getAttribute("position").count,s=r.index.count/3,l=r.getAttribute("vState");o[r.id]||(t+=a,i+=s,o[r.id]=!0),l&&(a*=l.count,s*=l.count),A+=a,e+=s}})),o=null,{positionsCount:A,trianglesCount:e,realPositionCount:t,realTrianglesCount:i}},TC.prototype.addLights=function(A){this.lightGroup=this.lightGroup||new Xi,this.group.add(this.lightGroup),this.lightGroup.visible=!1;for(var e=0,t=A.length;t>e;e+=1)this.lightGroup.add(A[e]),A[e].updateMatrixWorld()},TC.prototype.hasLights=function(){return this.lightGroup&&this.lightGroup.children.length>0},TC.prototype.enabledLights=function(){this.lightGroup.visible=!0},TC.prototype.disabledLights=function(){this.lightGroup.visible=!1},Object.defineProperties(TC.prototype,{modelConfig:{get:function(){return Bh.warn("EIMMODEL.Model: .modelConfig 现在为 .getConfig()"),this.getConfig()},set:function(A){this.setConfig(A)}},loader:{get:function(){return this._getHandler().loader}}});var kC={getBoxFromTileBoundingVolumeBox:function(A){var e=new aA,t=(new y).fromArray(A,0),i=new y;return i.fromArray(A,3),i.add(t),e.expandByPoint(i),i.fromArray(A,6),i.add(t),e.expandByPoint(i),i.fromArray(A,9),i.add(t),e.expandByPoint(i),e},getSphereFromTileBoundingVolumeSphere:function(A){return new cA((new y).fromArray(A,0),A[3]||0)},getTransfrom:function(A){return Array.isArray(A)?(new M).fromArray(A):new M},getSSE:function(A){var e=this.getBoxByComponentsKey(A),t=this.viewerImpl.camera,i=e.getCenter(new y),o=e.getSize().length(),n=this.viewerImpl.getRenderer().domElement.width,r=t.fov;return o*n/(2*t.position.clone().sub(i).length()*Math.tan(r/2))}},DC=function(A){bC.call(this,A)};function LC(A,e,t){if(0>e)throw new Error("byteOffset cannot be negative.");if(0>t)throw new Error("byteLength cannot be negative.");if(e+t>A.byteLength)throw new Error("sub-region exceeds array bounds.");return A=A.subarray(e=e||0,e+(t=t||A.byteLength-e)),LC.decode(A)}function NC(A,e,t){return A>=e&&t>=A}(DC.prototype=Object.create(bC.prototype)).load=function(A){var e=this,t=this.model,i=t.dataUrl;_d({type:"GET",url:i.rootTilesUrl(),headers:{Authorization:t.accessToken},success:function(o){var n={};if("string"==typeof o)try{n=JSON.parse(o)}catch(A){return t.setEmptyScene(!0),void t.dispatchEventEx({type:Rc.ON_LOAD_INVALID_SCENE,modelKey:t.modelKey})}else n=o;if(n){if(vc.offLine)e.model.getStorage().put(i.projectUrl(),n,e.model.modelKey,(function(){}),(function(){}));e._parse(n),t.dispatchEventEx({type:Rc.ON_LOAD_CONFIG_FINISH,modelKey:t.modelKey}),A&&A()}else Bh.log(t.modelKey,"config load error! ",n.message),t.dispatchEventEx({type:Rc.ON_LOAD_ERROR,modelKey:t.modelKey,code:n.code,message:n.message})},error:function(A,e){switch(A){case 401:t.dispatchEventEx({type:Rc.ACCOUNT_NO_EXIST,modelKey:t.modelKey,data:e});break;case 403:t.dispatchEventEx({type:Rc.NO_PERMISSION,modelKey:t.modelKey,data:e});break;default:t.dispatchEventEx({type:Rc.ON_NETWORK_ERROR,modelKey:t.modelKey,data:A})}}})},DC.prototype._parse=function(A){this.config=A,A.lengthUnit&&(this.model.originalLengthUnit=A.lengthUnit||"m"),this._toStatistics(A),this._setTransformInfos(A),this._chooseRendering(A)},DC.prototype._setTransformInfos=function(A){this.model.hasAnimation=!1,this.transformInfos.octreeTransformed=!1,this.transformInfos.boundingBox&&this.transformInfos.boundingBox.isBox3||(this.transformInfos.boundingBox=kC.getBoxFromTileBoundingVolumeBox(A.root.boundingVolume.box)),this.transformInfos.transformMatrix.compose(this.transformInfos.position,this.transformInfos.rotation,this.transformInfos.scale),this.transformInfos.transformMatrix.fromArray(A.matrix||[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]),this.model.setModelMatrix(this.transformInfos.transformMatrix),this.model.manager.updateScene()},LC.decodeWithTextDecoder=function(A){return new TextDecoder("utf-8").decode(A)},LC.decodeWithFromCharCode=function(A){for(var e="",t=function(A){for(var e=0,t=0,i=0,o=128,n=191,r=[],a=A.length,s=0;a>s;s+=1){var l=A[s];if(0===i){if(NC(l,0,127)){r.push(l);continue}if(NC(l,194,223)){i=1,e=31&l;continue}if(NC(l,224,239)){224===l&&(o=160),237===l&&(n=159),i=2,e=15&l;continue}if(NC(l,240,244)){240===l&&(o=144),244===l&&(n=143),i=3,e=7&l;continue}throw new Error("String decoding failed.")}NC(l,o,n)?(o=128,n=191,e=e<<6|63&l,(t+=1)===i&&(r.push(e),e=i=t=0)):(e=i=t=0,o=128,n=191,s-=1)}return r}(A),i=t.length,o=0;i>o;o+=1){var n=t[o];n>65535?(n-=65536,e+=String.fromCharCode(55296+(n>>10),56320+(1023&n))):e+=String.fromCharCode(n)}return e},LC.decode="undefined"!=typeof TextDecoder?LC.decodeWithTextDecoder:LC.decodeWithFromCharCode;var OC=function(){function A(A){Yr.call(this,A),this.dracoLoader=null,this.ddsLoader=null}function e(){var A={};return{get:function(e){return A[e]},add:function(e,t){A[e]=t},remove:function(e){delete A[e]},removeAll:function(){A={}}}}A.prototype=Object.assign(Object.create(Yr.prototype),{constructor:A,load:function(A,e,t,i){var o,n=this;o=""!==this.resourcePath?this.resourcePath:""!==this.path?this.path:La.extractUrlBase(A),n.manager.itemStart(A);var r=function(e){i?i(e):console.error(e),n.manager.itemError(A),n.manager.itemEnd(A)},a=new bu(n.manager);a.setPath(this.path),a.setResponseType("arraybuffer"),"use-credentials"===n.crossOrigin&&a.setWithCredentials(!0),a.load(A,(function(t){try{n.parse(t,o,(function(t){e(t),n.manager.itemEnd(A)}),r)}catch(A){r(A)}}),t,r)},setDRACOLoader:function(A){return this.dracoLoader=A,this},setDDSLoader:function(A){return this.ddsLoader=A,this},parse:function(A,e,a,s){var l,c={};if("string"==typeof A)l=A;else{var g=La.decodeText(new Uint8Array(A,0,4));if(g===r){try{c[t.KHR_BINARY_GLTF]=new h(A)}catch(A){return void(s&&s(A))}l=c[t.KHR_BINARY_GLTF].content}else if("b3dm"===g){try{c[t.KHR_BINARY_GLTF]=new h(function(A){var e=0;e=0;var t=Uint32Array.BYTES_PER_ELEMENT,i=new Uint8Array(A),o=new DataView(A),n=o.getUint32(e+=t,!0);if(1!==n)throw new Error("Only Batched 3D Model version 1 is supported. Version "+n+" is not.");var r,a=o.getUint32(e+=t,!0),s=o.getUint32(e+=t,!0),l=o.getUint32(e+=t,!0),c=o.getUint32(e+=t,!0),h=o.getUint32(e+=t,!0);if(e+=t,570425344>c?570425344>h||(e-=t,r=c,c=s,h=l,s=0,l=0):(e-=2*t,r=s,c=l,h=0,s=0,l=0),0===s)({BATCH_LENGTH:r||0});else{var d=LC(i,e,s);JSON.parse(d),e+=s}if(e+=l,c>0){var p=LC(i,e,c);JSON.parse(p),e+=c,h>0&&(e+=h)}var g=0+a-e;if(0===g)throw new Error("glTF byte length must be greater than 0.");var u=null;return e%4==0?(new Uint8Array(A,e,g),u=A.slice(e)):(new Uint8Array(i.subarray(e,e+g)),u=A.slice(e)),u}(A))}catch(A){return void(s&&s(A))}l=c[t.KHR_BINARY_GLTF].content}else l=La.decodeText(new Uint8Array(A))}var m=JSON.parse(l);if(void 0===m.asset||m.asset.version[0]<2)s&&s(new Error("THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported."));else{if(m.extensionsUsed)for(var C=0;m.extensionsUsed.length>C;++C){var y=m.extensionsUsed[C],v=m.extensionsRequired||[];switch(y){case t.KHR_LIGHTS_PUNCTUAL:c[y]=new o(m);break;case t.KHR_MATERIALS_UNLIT:c[y]=new n;break;case t.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS:c[y]=new u;break;case t.KHR_DRACO_MESH_COMPRESSION:c[y]=new d(m,this.dracoLoader);break;case t.MSFT_TEXTURE_DDS:c[y]=new i(this.ddsLoader);break;case t.KHR_TEXTURE_TRANSFORM:c[y]=new p;break;case t.KHR_MESH_QUANTIZATION:c[y]=new f;break;default:0>v.indexOf(y)||console.warn('THREE.GLTFLoader: Unknown extension "'+y+'".')}}new q(m,c,{path:e||this.resourcePath||"",crossOrigin:this.crossOrigin,manager:this.manager}).parse(a,s)}}});var t={KHR_BINARY_GLTF:"KHR_binary_glTF",KHR_DRACO_MESH_COMPRESSION:"KHR_draco_mesh_compression",KHR_LIGHTS_PUNCTUAL:"KHR_lights_punctual",KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS:"KHR_materials_pbrSpecularGlossiness",KHR_MATERIALS_UNLIT:"KHR_materials_unlit",KHR_TEXTURE_TRANSFORM:"KHR_texture_transform",KHR_MESH_QUANTIZATION:"KHR_mesh_quantization",MSFT_TEXTURE_DDS:"MSFT_texture_dds"};function i(A){if(!A)throw new Error("THREE.GLTFLoader: Attempting to load .dds texture without importing DDSLoader");this.name=t.MSFT_TEXTURE_DDS,this.ddsLoader=A}function o(A){this.name=t.KHR_LIGHTS_PUNCTUAL,this.lightDefs=(A.extensions&&A.extensions[t.KHR_LIGHTS_PUNCTUAL]||{}).lights||[]}function n(){this.name=t.KHR_MATERIALS_UNLIT}o.prototype.loadLight=function(A){var e,t=this.lightDefs[A],i=new LA(16777215);void 0!==t.color&&i.fromArray(t.color);var o=void 0!==t.range?t.range:0;switch(t.type){case"directional":(e=new Ra(i)).target.position.set(0,0,-1),e.add(e.target);break;case"point":(e=new Fa(i)).distance=o;break;case"spot":(e=new ba(i)).distance=o,t.spot=t.spot||{},t.spot.innerConeAngle=void 0!==t.spot.innerConeAngle?t.spot.innerConeAngle:0,t.spot.outerConeAngle=void 0!==t.spot.outerConeAngle?t.spot.outerConeAngle:Math.PI/4,e.angle=t.spot.outerConeAngle,e.penumbra=1-t.spot.innerConeAngle/t.spot.outerConeAngle,e.target.position.set(0,0,-1),e.add(e.target);break;default:throw new Error('THREE.GLTFLoader: Unexpected light type, "'+t.type+'".')}return e.position.set(0,0,0),e.decay=2,void 0!==t.intensity&&(e.intensity=t.intensity),e.name=t.name||"light_"+A,Promise.resolve(e)},n.prototype.getMaterialType=function(){return jA},n.prototype.extendParams=function(A,e,t){var i=[];A.color=new LA(1,1,1),A.opacity=1;var o=e.pbrMetallicRoughness;if(o){if(Array.isArray(o.baseColorFactor)){var n=o.baseColorFactor;A.color.fromArray(n),A.opacity=n[3]}void 0!==o.baseColorTexture&&i.push(t.assignTexture(A,"map",o.baseColorTexture))}return Promise.all(i)};var r="glTF",l=1313821514,c=5130562;function h(A){this.name=t.KHR_BINARY_GLTF,this.content=null,this.body=null;var e=new DataView(A,0,12);if(this.header={magic:La.decodeText(new Uint8Array(A.slice(0,4))),version:e.getUint32(4,!0),length:e.getUint32(8,!0)},this.header.magic!==r)throw new Error("THREE.GLTFLoader: Unsupported glTF-Binary header.");if(2>this.header.version)throw new Error("THREE.GLTFLoader: Legacy binary file detected.");for(var i=new DataView(A,12),o=0;i.byteLength>o;){var n=i.getUint32(o,!0),a=i.getUint32(o+=4,!0);if(o+=4,a===l){var s=new Uint8Array(A,12+o,n);this.content=La.decodeText(s)}else if(a===c){var h=12+o;this.body=A.slice(h,h+n)}o+=n}if(null===this.content)throw new Error("THREE.GLTFLoader: JSON content not found.")}function d(A,e){if(!e)throw new Error("THREE.GLTFLoader: No DRACOLoader instance provided.");this.name=t.KHR_DRACO_MESH_COMPRESSION,this.json=A,this.dracoLoader=e,this.dracoLoader.preload()}function p(){this.name=t.KHR_TEXTURE_TRANSFORM}function g(A){yr.call(this),this.isGLTFSpecularGlossinessMaterial=!0;var e=["#ifdef USE_SPECULARMAP","\tuniform sampler2D specularMap;","#endif"].join("\n"),t=["#ifdef USE_GLOSSINESSMAP","\tuniform sampler2D glossinessMap;","#endif"].join("\n"),i=["vec3 specularFactor = specular;","#ifdef USE_SPECULARMAP","\tvec4 texelSpecular = texture2D( specularMap, vUv );","\ttexelSpecular = sRGBToLinear( texelSpecular );","\t// reads channel RGB, compatible with a glTF Specular-Glossiness (RGBA) texture","\tspecularFactor *= texelSpecular.rgb;","#endif"].join("\n"),o=["float glossinessFactor = glossiness;","#ifdef USE_GLOSSINESSMAP","\tvec4 texelGlossiness = texture2D( glossinessMap, vUv );","\t// reads channel A, compatible with a glTF Specular-Glossiness (RGBA) texture","\tglossinessFactor *= texelGlossiness.a;","#endif"].join("\n"),n=["PhysicalMaterial material;","material.diffuseColor = diffuseColor.rgb;","vec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );","float geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );","material.specularRoughness = max( 1.0 - glossinessFactor, 0.0525 );// 0.0525 corresponds to the base mip of a 256 cubemap.","material.specularRoughness += geometryRoughness;","material.specularRoughness = min( material.specularRoughness, 1.0 );","material.specularColor = specularFactor.rgb;"].join("\n"),r={specular:{value:(new LA).setHex(16777215)},glossiness:{value:1},specularMap:{value:null},glossinessMap:{value:null}};this._extraUniforms=r,this.onBeforeCompile=function(A){for(var a in r)A.uniforms[a]=r[a];A.fragmentShader=A.fragmentShader.replace("uniform float roughness;","uniform vec3 specular;"),A.fragmentShader=A.fragmentShader.replace("uniform float metalness;","uniform float glossiness;"),A.fragmentShader=A.fragmentShader.replace("#include ",e),A.fragmentShader=A.fragmentShader.replace("#include ",t),A.fragmentShader=A.fragmentShader.replace("#include ",i),A.fragmentShader=A.fragmentShader.replace("#include ",o),A.fragmentShader=A.fragmentShader.replace("#include ",n)},Object.defineProperties(this,{specular:{get:function(){return r.specular.value},set:function(A){r.specular.value=A}},specularMap:{get:function(){return r.specularMap.value},set:function(A){r.specularMap.value=A}},glossiness:{get:function(){return r.glossiness.value},set:function(A){r.glossiness.value=A}},glossinessMap:{get:function(){return r.glossinessMap.value},set:function(A){r.glossinessMap.value=A,A?(this.defines.USE_GLOSSINESSMAP="",this.defines.USE_ROUGHNESSMAP=""):(delete this.defines.USE_ROUGHNESSMAP,delete this.defines.USE_GLOSSINESSMAP)}}}),delete this.metalness,delete this.roughness,delete this.metalnessMap,delete this.roughnessMap,this.setValues(A)}function u(){return{name:t.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS,specularGlossinessParams:["color","map","lightMap","lightMapIntensity","aoMap","aoMapIntensity","emissive","emissiveIntensity","emissiveMap","bumpMap","bumpScale","normalMap","normalMapType","displacementMap","displacementScale","displacementBias","specularMap","specular","glossinessMap","glossiness","alphaMap","envMap","envMapIntensity","refractionRatio"],getMaterialType:function(){return g},extendParams:function(A,e,t){var i=e.extensions[this.name];A.color=new LA(1,1,1),A.opacity=1;var o=[];if(Array.isArray(i.diffuseFactor)){var n=i.diffuseFactor;A.color.fromArray(n),A.opacity=n[3]}if(void 0!==i.diffuseTexture&&o.push(t.assignTexture(A,"map",i.diffuseTexture)),A.emissive=new LA(0,0,0),A.glossiness=void 0!==i.glossinessFactor?i.glossinessFactor:1,A.specular=new LA(1,1,1),Array.isArray(i.specularFactor)&&A.specular.fromArray(i.specularFactor),void 0!==i.specularGlossinessTexture){var r=i.specularGlossinessTexture;o.push(t.assignTexture(A,"glossinessMap",r)),o.push(t.assignTexture(A,"specularMap",r))}return Promise.all(o)},createMaterial:function(A){var e=new g(A);return e.fog=!0,e.color=A.color,e.map=void 0===A.map?null:A.map,e.lightMap=null,e.lightMapIntensity=1,e.aoMap=void 0===A.aoMap?null:A.aoMap,e.aoMapIntensity=1,e.emissive=A.emissive,e.emissiveIntensity=1,e.emissiveMap=void 0===A.emissiveMap?null:A.emissiveMap,e.bumpMap=void 0===A.bumpMap?null:A.bumpMap,e.bumpScale=1,e.normalMap=void 0===A.normalMap?null:A.normalMap,e.normalMapType=0,A.normalScale&&(e.normalScale=A.normalScale),e.displacementMap=null,e.displacementScale=1,e.displacementBias=0,e.specularMap=void 0===A.specularMap?null:A.specularMap,e.specular=A.specular,e.glossinessMap=void 0===A.glossinessMap?null:A.glossinessMap,e.glossiness=A.glossiness,e.alphaMap=null,e.envMap=void 0===A.envMap?null:A.envMap,e.envMapIntensity=1,e.refractionRatio=.98,e}}}function f(){this.name=t.KHR_MESH_QUANTIZATION}function m(A,e,t,i){Ur.call(this,A,e,t,i)}d.prototype.decodePrimitive=function(A,e){var t=this.json,i=this.dracoLoader,o=A.extensions[this.name].bufferView,n=A.extensions[this.name].attributes,r={},a={},s={};for(var l in n){var c=K[l]||l.toLowerCase();r[c]=n[l]}for(l in A.attributes){c=K[l]||l.toLowerCase();if(void 0!==n[l]){var h=t.accessors[A.attributes[l]];s[c]=w[h.componentType],a[c]=!0===h.normalized}}return e.getDependency("bufferView",o).then((function(A){return new Promise((function(e){i.decodeDracoFile(A,(function(A){for(var t in A.attributes){var i=a[t];void 0!==i&&(A.attributes[t].normalized=i)}e(A)}),r,s)}))}))},p.prototype.extendTexture=function(A,e){return A=A.clone(),void 0!==e.offset&&A.offset.fromArray(e.offset),void 0!==e.rotation&&(A.rotation=e.rotation),void 0!==e.scale&&A.repeat.fromArray(e.scale),void 0!==e.texCoord&&console.warn('THREE.GLTFLoader: Custom UV sets in "'+this.name+'" extension not yet supported.'),A.needsUpdate=!0,A},(g.prototype=Object.create(yr.prototype)).constructor=g,g.prototype.copy=function(A){return yr.prototype.copy.call(this,A),this.specularMap=A.specularMap,this.specular.copy(A.specular),this.glossinessMap=A.glossinessMap,this.glossiness=A.glossiness,delete this.metalness,delete this.roughness,delete this.metalnessMap,delete this.roughnessMap,this},(m.prototype=Object.create(Ur.prototype)).constructor=m,m.prototype.beforeStart_=m.prototype.copySampleValue_=function(A){for(var e=this.resultBuffer,t=this.sampleValues,i=this.valueSize,o=A*i*3+i,n=0;n!==i;n++)e[n]=t[o+n];return e},m.prototype.afterEnd_=m.prototype.copySampleValue_,m.prototype.interpolate_=function(A,e,t,i){for(var o=this.resultBuffer,n=this.sampleValues,r=this.valueSize,a=2*r,s=3*r,l=i-e,c=(t-e)/l,h=c*c,d=h*c,p=A*s,g=p-s,u=-2*d+3*h,f=d-h,m=1-u,C=f-h+c,y=0;y!==r;y++){o[y]=m*n[g+y+r]+C*(n[g+y+a]*l)+u*n[p+y+r]+f*(n[p+y]*l)}return o};var C=0,v=1,I=2,E=3,B=4,x=5,S=6,w={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array},b={9728:1003,9729:1006,9984:1004,9985:1007,9986:1005,9987:1008},U={33071:1001,33648:1002,10497:1e3},F={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16},K={POSITION:"position",NORMAL:"normal",TANGENT:"tangent",TEXCOORD_0:"uv",TEXCOORD_1:"uv2",COLOR_0:"color",WEIGHTS_0:"skinWeight",JOINTS_0:"skinIndex"},Q={scale:"scale",translation:"position",rotation:"quaternion",weights:"morphTargetInfluences"},R={CUBICSPLINE:void 0,LINEAR:2301,STEP:2300},T="OPAQUE",k="MASK",D="BLEND",L={"image/png":1023,"image/jpeg":1022};function N(A,e){return"string"!=typeof A||""===A?"":(/^https?:\/\//i.test(e)&&/^\//.test(A)&&(e=e.replace(/(^https?:\/\/[^\/]+).*/i,"$1")),/^(https?:)?\/\//i.test(A)||/^data:.*,.*$/i.test(A)||/^blob:.*$/i.test(A)?A:e+A)}function O(A,e,t){for(var i in t.extensions)void 0===A[i]&&(e.userData.gltfExtensions=e.userData.gltfExtensions||{},e.userData.gltfExtensions[i]=t.extensions[i])}function V(A,e){void 0!==e.extras&&("object"===lc(e.extras)?Object.assign(A.userData,e.extras):console.warn("THREE.GLTFLoader: Ignoring primitive type .extras, "+e.extras))}function G(A,e){if(A.updateMorphTargets(),void 0!==e.weights)for(var t=0,i=e.weights.length;i>t;t++)A.morphTargetInfluences[t]=e.weights[t];if(e.extras&&Array.isArray(e.extras.targetNames)){var o=e.extras.targetNames;if(A.morphTargetInfluences.length===o.length){A.morphTargetDictionary={};for(t=0,i=o.length;i>t;t++)A.morphTargetDictionary[o[t]]=t}else console.warn("THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.")}}function P(A){for(var e="",t=Object.keys(A).sort(),i=0,o=t.length;o>i;i++)e+=t[i]+":"+A[t[i]]+";";return e}function q(A,t,i){this.json=A||{},this.extensions=t||{},this.options=i||{},this.cache=new e,this.primitiveCache={},this.textureLoader=new Aa(this.options.manager),this.textureLoader.setCrossOrigin(this.options.crossOrigin),this.fileLoader=new bu(this.options.manager),this.fileLoader.setResponseType("arraybuffer"),"use-credentials"===this.options.crossOrigin&&this.fileLoader.setWithCredentials(!0)}function j(A,e,t){var i=e.attributes,o=[];function n(e,i){return t.getDependency("accessor",e).then((function(e){A.setAttribute(i,e)}))}for(var r in i){var a=K[r]||r.toLowerCase();a in A.attributes||o.push(n(i[r],a))}if(void 0!==e.indices&&!A.index){var s=t.getDependency("accessor",e.indices).then((function(e){A.setIndex(e)}));o.push(s)}return V(A,e),function(A,e,t){var i=e.attributes,o=new aA;if(void 0!==i.POSITION){var n=(h=t.json.accessors[i.POSITION]).max;if(void 0!==(d=h.min)&&void 0!==n){o.set(new y(d[0],d[1],d[2]),new y(n[0],n[1],n[2]));var r=e.targets;if(void 0!==r)for(var a=new y,s=0,l=r.length;l>s;s++){var c=r[s];if(void 0!==c.POSITION){var h,d;n=(h=t.json.accessors[c.POSITION]).max;void 0!==(d=h.min)&&void 0!==n?(a.setX(Math.max(Math.abs(d[0]),Math.abs(n[0]))),a.setY(Math.max(Math.abs(d[1]),Math.abs(n[1]))),a.setZ(Math.max(Math.abs(d[2]),Math.abs(n[2]))),o.expandByVector(a)):console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.")}}A.boundingBox=o;var p=new cA;o.getCenter(p.center),p.radius=o.min.distanceTo(o.max)/2,A.boundingSphere=p}else console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.")}}(A,e,t),Promise.all(o).then((function(){return void 0!==e.targets?function(A,e,t){for(var i=!1,o=!1,n=0,r=e.length;r>n;n++){if(void 0!==(l=e[n]).POSITION&&(i=!0),void 0!==l.NORMAL&&(o=!0),i&&o)break}if(!i&&!o)return Promise.resolve(A);var a=[],s=[];for(n=0,r=e.length;r>n;n++){var l=e[n];if(i){var c=void 0!==l.POSITION?t.getDependency("accessor",l.POSITION):A.attributes.position;a.push(c)}if(o){c=void 0!==l.NORMAL?t.getDependency("accessor",l.NORMAL):A.attributes.normal;s.push(c)}}return Promise.all([Promise.all(a),Promise.all(s)]).then((function(e){var t=e[1];return i&&(A.morphAttributes.position=e[0]),o&&(A.morphAttributes.normal=t),A.morphTargetsRelative=!0,A}))}(A,e.targets,t):A}))}function Y(A,e){var t=A.getIndex();if(null===t){var i=[],o=A.getAttribute("position");if(void 0===o)return console.error("THREE.GLTFLoader.toTrianglesDrawMode(): Undefined position attribute. Processing not possible."),A;for(var n=0;o.count>n;n++)i.push(n);A.setIndex(i),t=A.getIndex()}var r=t.count-2,a=[];if(2===e)for(n=1;r>=n;n++)a.push(t.getX(0)),a.push(t.getX(n)),a.push(t.getX(n+1));else for(n=0;r>n;n++)n%2==0?(a.push(t.getX(n)),a.push(t.getX(n+1)),a.push(t.getX(n+2))):(a.push(t.getX(n+2)),a.push(t.getX(n+1)),a.push(t.getX(n)));a.length/3!==r&&console.error("THREE.GLTFLoader.toTrianglesDrawMode(): Unable to generate correct amount of triangles.");var s=A.clone();return s.setIndex(a),s}return q.prototype.parse=function(A,e){var t=this,i=this.json,o=this.extensions;this.cache.removeAll(),this.markDefs(),Promise.all([this.getDependencies("scene"),this.getDependencies("animation"),this.getDependencies("camera")]).then((function(e){var n={scene:e[0][i.scene||0],scenes:e[0],animations:e[1],cameras:e[2],asset:i.asset,parser:t,userData:{}};O(o,n,i),V(n,i),A(n)})).catch(e)},q.prototype.markDefs=function(){for(var A=this.json.nodes||[],e=this.json.skins||[],t=this.json.meshes||[],i={},o={},n=0,r=e.length;r>n;n++)for(var a=e[n].joints,s=0,l=a.length;l>s;s++)A[a[s]].isBone=!0;for(var c=0,h=A.length;h>c;c++){var d=A[c];void 0!==d.mesh&&(void 0===i[d.mesh]&&(i[d.mesh]=o[d.mesh]=0),i[d.mesh]++,void 0!==d.skin&&(t[d.mesh].isSkinnedMesh=!0))}this.json.meshReferences=i,this.json.meshUses=o},q.prototype.getDependency=function(A,e){var i=A+":"+e,o=this.cache.get(i);if(!o){switch(A){case"scene":o=this.loadScene(e);break;case"node":o=this.loadNode(e);break;case"mesh":o=this.loadMesh(e);break;case"accessor":o=this.loadAccessor(e);break;case"bufferView":o=this.loadBufferView(e);break;case"buffer":o=this.loadBuffer(e);break;case"material":o=this.loadMaterial(e);break;case"texture":o=this.loadTexture(e);break;case"skin":o=this.loadSkin(e);break;case"animation":o=this.loadAnimation(e);break;case"camera":o=this.loadCamera(e);break;case"light":o=this.extensions[t.KHR_LIGHTS_PUNCTUAL].loadLight(e);break;default:throw new Error("Unknown type: "+A)}this.cache.add(i,o)}return o},q.prototype.getDependencies=function(A){var e=this.cache.get(A);if(!e){var t=this;e=Promise.all((this.json[A+("mesh"===A?"es":"s")]||[]).map((function(e,i){return t.getDependency(A,i)}))),this.cache.add(A,e)}return e},q.prototype.loadBuffer=function(A){var e=this.json.buffers[A],i=this.fileLoader;if(e.type&&"arraybuffer"!==e.type)throw new Error("THREE.GLTFLoader: "+e.type+" buffer type is not supported.");if(void 0===e.uri&&0===A)return Promise.resolve(this.extensions[t.KHR_BINARY_GLTF].body);var o=this.options;return new Promise((function(A,t){i.load(N(e.uri,o.path),A,void 0,(function(){t(new Error('THREE.GLTFLoader: Failed to load buffer "'+e.uri+'".'))}))}))},q.prototype.loadBufferView=function(A){var e=this.json.bufferViews[A];return this.getDependency("buffer",e.buffer).then((function(A){var t=e.byteOffset||0;return A.slice(t,t+(e.byteLength||0))}))},q.prototype.loadAccessor=function(A){var e=this,t=this.json,i=this.json.accessors[A];if(void 0===i.bufferView&&void 0===i.sparse)return Promise.resolve(null);var o=[];return o.push(void 0!==i.bufferView?this.getDependency("bufferView",i.bufferView):null),void 0!==i.sparse&&(o.push(this.getDependency("bufferView",i.sparse.indices.bufferView)),o.push(this.getDependency("bufferView",i.sparse.values.bufferView))),Promise.all(o).then((function(A){var o,n=A[0],r=F[i.type],a=w[i.componentType],s=a.BYTES_PER_ELEMENT,l=i.byteOffset||0,c=void 0!==i.bufferView?t.bufferViews[i.bufferView].byteStride:void 0,h=!0===i.normalized;if(c&&c!==s*r){var d=Math.floor(l/c),p="InterleavedBuffer:"+i.bufferView+":"+i.componentType+":"+d+":"+i.count,g=e.cache.get(p);g||(g=new to(new a(n,d*c,i.count*c/s),c/s),e.cache.add(p,g)),o=new no(g,r,l%c/s,h)}else o=new YA(null===n?new a(i.count*r):new a(n,l,i.count*r),r,h);if(void 0!==i.sparse){var u=i.sparse.values.byteOffset||0,f=new(0,w[i.sparse.indices.componentType])(A[1],i.sparse.indices.byteOffset||0,i.sparse.count*F.SCALAR),m=new a(A[2],u,i.sparse.count*r);null!==n&&(o=new YA(o.array.slice(),o.itemSize,o.normalized));for(var C=0,y=f.length;y>C;C++){var v=f[C];if(o.setX(v,m[C*r]),2>r||o.setY(v,m[C*r+1]),3>r||o.setZ(v,m[C*r+2]),4>r||o.setW(v,m[C*r+3]),r>=5)throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.")}}return o}))},q.prototype.loadTexture=function(A){var e,i=this,o=this.json,n=this.options,r=this.textureLoader,a=window.URL||window.webkitURL,s=o.textures[A],l=s.extensions||{},c=(e=l[t.MSFT_TEXTURE_DDS]?o.images[l[t.MSFT_TEXTURE_DDS].source]:o.images[s.source]).uri,h=!1;return void 0!==e.bufferView&&(c=i.getDependency("bufferView",e.bufferView).then((function(A){h=!0;var t=new Blob([A],{type:e.mimeType});return c=a.createObjectURL(t)}))),Promise.resolve(c).then((function(A){var e=n.manager.getHandler(A);return e||(e=l[t.MSFT_TEXTURE_DDS]?i.extensions[t.MSFT_TEXTURE_DDS].ddsLoader:r),new Promise((function(t,i){e.load(N(A,n.path),t,void 0,i)}))})).then((function(A){!0===h&&a.revokeObjectURL(c),A.flipY=!1,s.name&&(A.name=s.name),e.mimeType in L&&(A.format=L[e.mimeType]);var t=(o.samplers||{})[s.sampler]||{};return A.magFilter=b[t.magFilter]||1006,A.minFilter=b[t.minFilter]||1008,A.wrapS=U[t.wrapS]||1e3,A.wrapT=U[t.wrapT]||1e3,A}))},q.prototype.assignTexture=function(A,e,i){var o=this;return this.getDependency("texture",i.index).then((function(n){if(!n.isCompressedTexture)switch(e){case"aoMap":case"emissiveMap":case"metalnessMap":case"normalMap":case"roughnessMap":n.format=1022}if(void 0===i.texCoord||0==i.texCoord||"aoMap"===e&&1==i.texCoord||console.warn("THREE.GLTFLoader: Custom UV set "+i.texCoord+" for texture "+e+" not yet supported."),o.extensions[t.KHR_TEXTURE_TRANSFORM]){var r=void 0!==i.extensions?i.extensions[t.KHR_TEXTURE_TRANSFORM]:void 0;r&&(n=o.extensions[t.KHR_TEXTURE_TRANSFORM].extendTexture(n,r))}A[e]=n}))},q.prototype.assignFinalMaterial=function(A){var e=A.geometry,t=A.material,i=void 0!==e.attributes.tangent,o=void 0!==e.attributes.color,n=void 0===e.attributes.normal,r=!0===A.isSkinnedMesh,a=Object.keys(e.morphAttributes).length>0,s=a&&void 0!==e.morphAttributes.normal;if(A.isPoints){var l=this.cache.get(h="PointsMaterial:"+t.uuid);l||(l=new Yo,qA.prototype.copy.call(l,t),l.color.copy(t.color),l.map=t.map,l.sizeAttenuation=!1,this.cache.add(h,l)),t=l}else if(A.isLine){var c=this.cache.get(h="LineBasicMaterial:"+t.uuid);c||(c=new ko,qA.prototype.copy.call(c,t),c.color.copy(t.color),this.cache.add(h,c)),t=c}if(i||o||n||r||a){var h="ClonedMaterial:"+t.uuid+":";t.isGLTFSpecularGlossinessMaterial&&(h+="specular-glossiness:"),r&&(h+="skinning:"),i&&(h+="vertex-tangents:"),o&&(h+="vertex-colors:"),n&&(h+="flat-shading:"),a&&(h+="morph-targets:"),s&&(h+="morph-normals:");var d=this.cache.get(h);d||(d=t.clone(),r&&(d.skinning=!0),i&&(d.vertexTangents=!0),o&&(d.vertexColors=!0),n&&(d.flatShading=!0),a&&(d.morphTargets=!0),s&&(d.morphNormals=!0),this.cache.add(h,d)),t=d}t.aoMap&&void 0===e.attributes.uv2&&void 0!==e.attributes.uv&&e.setAttribute("uv2",new YA(e.attributes.uv.array,2)),t.normalScale&&!i&&(t.normalScale.y=-t.normalScale.y),A.material=t},q.prototype.loadMaterial=function(A){var e,i=this.extensions,o=this.json.materials[A],n={},r=o.extensions||{},a=[];if(r[t.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS]){var l=i[t.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS];e=l.getMaterialType(),a.push(l.extendParams(n,o,this))}else if(r[t.KHR_MATERIALS_UNLIT]){var c=i[t.KHR_MATERIALS_UNLIT];e=c.getMaterialType(),a.push(c.extendParams(n,o,this))}else{e=yr;var h=o.pbrMetallicRoughness||{};if(n.color=new LA(1,1,1),n.opacity=1,Array.isArray(h.baseColorFactor)){var d=h.baseColorFactor;n.color.fromArray(d),n.opacity=d[3]}void 0!==h.baseColorTexture&&a.push(this.assignTexture(n,"map",h.baseColorTexture)),n.metalness=void 0!==h.metallicFactor?h.metallicFactor:1,n.roughness=void 0!==h.roughnessFactor?h.roughnessFactor:1,void 0!==h.metallicRoughnessTexture&&(a.push(this.assignTexture(n,"metalnessMap",h.metallicRoughnessTexture)),a.push(this.assignTexture(n,"roughnessMap",h.metallicRoughnessTexture)))}!0===o.doubleSided&&(n.side=2);var p=o.alphaMode||T;return p===D?(n.transparent=!0,n.depthWrite=!1):(n.transparent=!1,p===k&&(n.alphaTest=void 0!==o.alphaCutoff?o.alphaCutoff:.5)),void 0!==o.normalTexture&&e!==jA&&(a.push(this.assignTexture(n,"normalMap",o.normalTexture)),n.normalScale=new s(1,1),void 0!==o.normalTexture.scale&&n.normalScale.set(o.normalTexture.scale,o.normalTexture.scale)),void 0!==o.occlusionTexture&&e!==jA&&(a.push(this.assignTexture(n,"aoMap",o.occlusionTexture)),void 0!==o.occlusionTexture.strength&&(n.aoMapIntensity=o.occlusionTexture.strength)),void 0!==o.emissiveFactor&&e!==jA&&(n.emissive=(new LA).fromArray(o.emissiveFactor)),void 0!==o.emissiveTexture&&e!==jA&&a.push(this.assignTexture(n,"emissiveMap",o.emissiveTexture)),Promise.all(a).then((function(){var A;return A=e===g?i[t.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS].createMaterial(n):new e(n),o.name&&(A.name=o.name),A.map&&(A.map.encoding=3001),A.emissiveMap&&(A.emissiveMap.encoding=3001),V(A,o),o.extensions&&O(i,A,o),A}))},q.prototype.loadGeometries=function(A){var e=this,i=this.extensions,o=this.primitiveCache;function n(A){return i[t.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(A,e).then((function(t){return j(t,A,e)}))}for(var r,a,s=[],l=0,c=A.length;c>l;l++){var h,d=A[l],p=(a=void 0,(a=(r=d).extensions&&r.extensions[t.KHR_DRACO_MESH_COMPRESSION])?"draco:"+a.bufferView+":"+a.indices+":"+P(a.attributes):r.indices+":"+P(r.attributes)+":"+r.mode),g=o[p];if(g)s.push(g.promise);else h=d.extensions&&d.extensions[t.KHR_DRACO_MESH_COMPRESSION]?n(d):j(new he,d,e),o[p]={primitive:d,promise:h},s.push(h)}return Promise.all(s)},q.prototype.loadMesh=function(A){for(var e,t=this,i=this.json.meshes[A],o=i.primitives,n=[],r=0,a=o.length;a>r;r++){var s=void 0===o[r].material?(void 0===(e=this.cache).DefaultMaterial&&(e.DefaultMaterial=new yr({color:16777215,emissive:0,metalness:1,roughness:1,transparent:!1,depthTest:!0,side:0})),e.DefaultMaterial):this.getDependency("material",o[r].material);n.push(s)}return n.push(t.loadGeometries(o)),Promise.all(n).then((function(e){for(var n=e.slice(0,e.length-1),r=e[e.length-1],a=[],s=0,l=r.length;l>s;s++){var c,h=r[s],d=o[s],p=n[s];if(d.mode===B||d.mode===x||d.mode===S||void 0===d.mode)!0!==(c=!0===i.isSkinnedMesh?new So(h,p):new Ue(h,p)).isSkinnedMesh||c.geometry.attributes.skinWeight.normalized||c.normalizeSkinWeights(),d.mode===x?c.geometry=Y(c.geometry,1):d.mode===S&&(c.geometry=Y(c.geometry,2));else if(d.mode===v)c=new jo(h,p);else if(d.mode===E)c=new Go(h,p);else if(d.mode===I)c=new Ho(h,p);else{if(d.mode!==C)throw new Error("THREE.GLTFLoader: Primitive mode unsupported: "+d.mode);c=new Xo(h,p)}Object.keys(c.geometry.morphAttributes).length>0&&G(c,i),c.name=i.name||"mesh_"+A,r.length>1&&(c.name+="_"+s),V(c,i),t.assignFinalMaterial(c),a.push(c)}if(1===a.length)return a[0];var g=new Xi;for(s=0,l=a.length;l>s;s++)g.add(a[s]);return g}))},q.prototype.loadCamera=function(A){var e,t=this.json.cameras[A],i=t[t.type];if(i)return"perspective"===t.type?e=new je(a.radToDeg(i.yfov),i.aspectRatio||1,i.znear||1,i.zfar||2e6):"orthographic"===t.type&&(e=new Ka(i.xmag/-2,i.xmag/2,i.ymag/2,i.ymag/-2,i.znear,i.zfar)),t.name&&(e.name=t.name),V(e,t),Promise.resolve(e);console.warn("THREE.GLTFLoader: Missing camera parameters.")},q.prototype.loadSkin=function(A){var e=this.json.skins[A],t={joints:e.joints};return void 0===e.inverseBindMatrices?Promise.resolve(t):this.getDependency("accessor",e.inverseBindMatrices).then((function(A){return t.inverseBindMatrices=A,t}))},q.prototype.loadAnimation=function(A){for(var e=this.json.animations[A],t=[],i=[],o=[],n=[],r=[],a=0,s=e.channels.length;s>a;a++){var l=e.channels[a],c=e.samplers[l.sampler],h=l.target,d=void 0!==e.parameters?e.parameters[c.input]:c.input,p=void 0!==e.parameters?e.parameters[c.output]:c.output;t.push(this.getDependency("node",void 0!==h.node?h.node:h.id)),i.push(this.getDependency("accessor",d)),o.push(this.getDependency("accessor",p)),n.push(c),r.push(h)}return Promise.all([Promise.all(t),Promise.all(i),Promise.all(o),Promise.all(n),Promise.all(r)]).then((function(t){for(var i=t[0],o=t[1],n=t[2],r=t[3],a=t[4],s=[],l=0,c=i.length;c>l;l++){var h=i[l],d=o[l],p=n[l],g=r[l],u=a[l];if(void 0!==h){var f;switch(h.updateMatrix(),h.matrixAutoUpdate=!0,Q[u.path]){case Q.weights:f=Dr;break;case Q.rotation:f=Nr;break;case Q.position:case Q.scale:default:f=Vr}var C=h.name?h.name:h.uuid,y=void 0!==g.interpolation?R[g.interpolation]:2301,v=[];Q[u.path]===Q.weights?h.traverse((function(A){!0===A.isMesh&&A.morphTargetInfluences&&v.push(A.name?A.name:A.uuid)})):v.push(C);var I=p.array;if(p.normalized){var E;if(I.constructor===Int8Array)E=1/127;else if(I.constructor===Uint8Array)E=1/255;else if(I.constructor==Int16Array)E=1/32767;else{if(I.constructor!==Uint16Array)throw new Error("THREE.GLTFLoader: Unsupported output accessor component type.");E=1/65535}for(var B=new Float32Array(I.length),x=0,S=I.length;S>x;x++)B[x]=I[x]*E;I=B}for(x=0,S=v.length;S>x;x++){var w=new f(v[x]+"."+Q[u.path],d.array,I,y);"CUBICSPLINE"===g.interpolation&&(w.createInterpolant=function(A){return new m(this.times,this.values,this.getValueSize()/3,A)},w.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline=!0),s.push(w)}}}return new Gr(e.name?e.name:"animation_"+A,void 0,s)}))},q.prototype.loadNode=function(A){var e,i=this.json,o=this.extensions,n=this,r=i.meshReferences,a=i.meshUses,s=i.nodes[A];return(e=[],void 0!==s.mesh&&e.push(n.getDependency("mesh",s.mesh).then((function(A){var e;if(r[s.mesh]>1){var t=a[s.mesh]++;(e=A.clone()).name+="_instance_"+t}else e=A;return void 0!==s.weights&&e.traverse((function(A){if(A.isMesh)for(var e=0,t=s.weights.length;t>e;e++)A.morphTargetInfluences[e]=s.weights[e]})),e}))),void 0!==s.camera&&e.push(n.getDependency("camera",s.camera)),s.extensions&&s.extensions[t.KHR_LIGHTS_PUNCTUAL]&&void 0!==s.extensions[t.KHR_LIGHTS_PUNCTUAL].light&&e.push(n.getDependency("light",s.extensions[t.KHR_LIGHTS_PUNCTUAL].light)),Promise.all(e)).then((function(A){var e;if((e=!0===s.isBone?new Uo:A.length>1?new Xi:1===A.length?A[0]:new H)!==A[0])for(var t=0,i=A.length;i>t;t++)e.add(A[t]);if(s.name&&(e.userData.name=s.name,e.name=Fs.sanitizeNodeName(s.name)),V(e,s),s.extensions&&O(o,e,s),void 0!==s.matrix){var n=new M;n.fromArray(s.matrix),e.applyMatrix4(n)}else void 0!==s.translation&&e.position.fromArray(s.translation),void 0!==s.rotation&&e.quaternion.fromArray(s.rotation),void 0!==s.scale&&e.scale.fromArray(s.scale);return e}))},q.prototype.loadScene=function(){function A(e,t,i,o){var n=i.nodes[e];return o.getDependency("node",e).then((function(A){return void 0===n.skin?A:o.getDependency("skin",n.skin).then((function(A){for(var t=[],i=0,n=(e=A).joints.length;n>i;i++)t.push(o.getDependency("node",e.joints[i]));return Promise.all(t)})).then((function(t){return A.traverse((function(A){if(A.isMesh){for(var i=[],o=[],n=0,r=t.length;r>n;n++){var a=t[n];if(a){i.push(a);var s=new M;void 0!==e.inverseBindMatrices&&s.fromArray(e.inverseBindMatrices.array,16*n),o.push(s)}else console.warn('THREE.GLTFLoader: Joint "%s" could not be found.',e.joints[n])}A.bind(new bo(i,o),A.matrixWorld)}})),A}));var e})).then((function(e){t.add(e);var r=[];if(n.children)for(var a=n.children,s=0,l=a.length;l>s;s++){r.push(A(a[s],e,i,o))}return Promise.all(r)}))}return function(e){var t=this.json,i=this.extensions,o=this.json.scenes[e],n=new Xi;o.name&&(n.name=o.name),V(n,o),o.extensions&&O(i,n,o);for(var r=o.nodes||[],a=[],s=0,l=r.length;l>s;s++)a.push(A(r[s],n,t,this));return Promise.all(a).then((function(){return n}))}}(),A}(),VC="REPLACE",GC=function A(e,t,i,o){H.call(this);if(this.isRoot=o||!1,o||(this.matrix=kC.getTransfrom(i.transform)),this.refine=i.refine||VC,this.geometricError=i.geometricError||0,this.boundingBox=kC.getBoxFromTileBoundingVolumeBox(i.boundingVolume.box),this.scene=null,this.model=e,this.json=i,this.level=t&&t.level+1||0,this.matrixAutoUpdate=!1,this.hasB3DM=!1,i.content&&(i.content.url.endsWith("json")?this.loadContent(i.content.url):i.content.url.endsWith("b3dm")&&(this.hasB3DM=!0,this.model.tilesList[i.content.url]=this,t&&t.hasB3DM||(this.firstB3DM=!0,this.loadB3DM(i.content.url)))),i.children)for(var n=0,r=i.children.length;r>n;n+=1)this.add(new A(e,this,i.children[n]))};(GC.prototype=Object.create(H.prototype)).loadContent=function(A){var e=this,t=e.model,i=t.dataUrl.tilesUrl(A);function o(){var A=t.fileLoader;A.setResponseType("json"),A.setCacheViable(!0),A.setRequestHeader({Authorization:t.accessToken}),A.load(i,(function(A){var i={};if("string"==typeof A)try{i=JSON.parse(A)}catch(A){return void t.dispatchEventEx({type:Rc.ON_LOAD_INVALID_DATA,modelKey:t.modelKey})}else i=A;e.add(new GC(t,parent,i.root,parent.level+1,!0))}),(function(A,e){switch(A){case 401:t.dispatchEventEx({type:Rc.ACCOUNT_NO_EXIST,modelKey:t.modelKey,data:e});break;case 403:t.dispatchEventEx({type:Rc.NO_PERMISSION,modelKey:t.modelKey,data:e});break;default:t.dispatchEventEx({type:Rc.ON_NETWORK_ERROR,modelKey:t.modelKey,data:A})}}))}if(vc.getDataFromIndexedDB){var n=t.getStorage();n&&n.get(i,(function(A){if(A){var i={};if("string"==typeof A)try{i=JSON.parse(A)}catch(A){return void t.dispatchEventEx({type:Rc.ON_LOAD_INVALID_DATA,modelKey:t.modelKey})}else i=A;e.add(new GC(t,parent,i.root,!0))}else o()}),(function(){o()}))}else o()},GC.prototype.loadB3DM=function(A){var e=this,t=e.model;e.loaderManager=new wu,e.loaderManager.model=t;var i=new OC(e.loaderManager);function o(A){e.scene=A,e.loading=!1,e.loaded=!0,e.add(A.scene),t.tileLoadFinish()}e.loading=!0;var n=t.dataUrl.b3dmUrl(A||e.json.content.url);if(vc.getDataFromIndexedDB){var r=t.getStorage();r&&r.get(n,(function(t){t?i.parse(t,A||e.json.content.url,o):i.load(n,o)}),(function(){i.load(n,o)}))}else i.load(n,o)};var PC=function(A,e,t,i){TC.call(this,A,e,t,i),this.configLoader=new DC(this),this.tilesList={},this.isTilesModel=!0};(PC.prototype=Object.create(TC.prototype)).load=function(A){var e=this;this.configLoader.load((function(){e.parseCfgFinish&&e.parseCfgFinish(),e.manager.updateScene(),e.group.add(new GC(e,null,e.configLoader.config.root,!0)),e.loaded=!0}))},PC.prototype.tileLoadStart=function(){},PC.prototype.tileLoadFinish=function(){this.group.updateMatrixWorld(!0,!0),this.manager.viewerImpl.render()},PC.prototype.tileUnloadStart=function(){},PC.prototype.tileUnloadFinish=function(){},PC.prototype.checkTilesDataChanged=function(A){for(var e in Bh.time("checkTilesDataChanged"),this.tilesList)if(this.tilesList.hasOwnProperty(e)){var t=this.tilesList[e];this.tilesNeedLoad(t.boundingBox.getCenter((new y).applyMatrix4(t.parent.matrixWorld).applyMatrix4(t.matrix)),t.boundingBox.getSize(new y).length())||t.firstB3DM?t.scene||t.loading?t.visible=!0:t.loadB3DM():A?(t.remove(t.scene),t.scene=null):t.visible=!1}Bh.timeEnd("checkTilesDataChanged")},PC.prototype.tilesNeedLoad=function(A,e){var t,i=this.manager.cameraFov;return t=(e||0)*this.manager.domElementWidth/(2*this.manager.cameraPosition.clone().sub(A).length()*Math.tan(i/2)),Bh.debug("几何误差:",t),t>vc.geometricErrorThresholdValue};var qC=function(){this.size=0,this.counter=0,this.expansion=1,this._pool=null};qC.prototype.init=function(A,e){this.classType=A,this._pool=[],this._expand(e)},qC.prototype._expand=function(A){this.size+=A;for(var e=0;A>e;e+=1)this._pool.push(new this.classType)},qC.prototype.acquire=function(){return this.size>this.counter||(this.expansion=Math.round(1.2*this.expansion)+1,this._expand(this.expansion)),this._pool[this.counter++]},qC.prototype.clear=function(){this.counter=0},qC.prototype.destroy=function(){for(var A=0,e=this.size;e>A;A+=1)this._pool[A].destroy();this.counter=0,this.size=0,this.expansion=1,this._pool=null},qC.prototype.getObjects=function(){return this._pool};var jC=function(A){Pe.call(this),this.type="PhoneLightingMaterial",this.color=new LA(16777215),this.specular=new LA(1118481),this.shininess=30,this.emissive=new LA(0),this.map=null,this.shadowMapEnabled=!1,this.defines={},this.uniforms=Ge.merge([Xe.common,Xe.lights,{diffuse:{value:new LA(16711680)},opacity:{value:1},specular:{value:new LA(1118481)},shininess:{value:30},emissive:{value:new LA(0)}}]),this.vertexShader=["varying vec3 vViewPosition;","varying vec3 vNormal;","#include ","void main() {"," #include "," #include "," #include "," #include "," #include "," vNormal = normalize( transformedNormal );"," vViewPosition = - mvPosition.xyz;","}"].join("\n"),this.fragmentShader=["uniform vec3 diffuse;","uniform float opacity;","uniform vec3 specular;","uniform float shininess;","uniform vec3 emissive;","#include ","#include ","#include ","#include ","#include ","#include ","#include ","#include ","void main() {"," vec4 diffuseColor = vec4( diffuse, opacity );","#ifdef USE_MAP"," vec4 texelColor = texture2D( map, vUv );"," texelColor = mapTexelToLinear( texelColor );"," diffuseColor = vec4(texelColor.rgb, opacity);","#endif"," ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );"," vec3 totalEmissiveRadiance = emissive;"," float specularStrength = 1.0;"," #include "," #include "," gl_FragColor = linearToOutputTexel( diffuseColor );","}"].join("\n"),this.lights=!1,this.defaultAttributeValues={color:[1,1,1],uv:[0,0],uv2:[0,0]},void 0!==A&&(void 0!==A.attributes&&console.error("PhoneLightingMaterial: attributes should now be defined in THREE.BufferGeometry instead."),this.setValues(A)),this.refreshUniforms()};(jC.prototype=Object.create(Pe.prototype)).constructor=jC,jC.prototype.isShaderMaterial=!0,jC.prototype.copy=function(A){return Pe.prototype.copy.call(this,A),this.color.copy(A.color),this.specular.copy(A.specular),this.shininess=A.shininess,this.emissive.copy(A.emissive),this},jC.prototype.refreshUniforms=function(){this.uniforms.diffuse.value.set(this.color),this.uniforms.opacity.value=this.opacity,this.uniforms.specular.value.set(this.specular),this.uniforms.shininess.value=this.shininess,this.uniforms.emissive.value.set(this.emissive),this.uniforms.map.value=this.map};var HC=function(A,e){ep.call(this,gp.CLIPPLANE,{priority:20});var t=[];t.push("clipPlane_right"),t.push("clipPlane_left"),t.push("clipPlane_back"),t.push("clipPlane_front"),t.push("clipPlane_top"),t.push("clipPlane_bottom"),this.cubeSize=A.clone(),this.center=e.clone(),this.visible=!1,this.rotatable=!1,this.selectIndex=null,this.planeOffset=new Array(6),this.planeRotate=[0,0,0],this.observer=null,this.uniforms={iClipPlane:{type:"i",value:0},vClipPlane:{type:"v4v",value:[new p,new p,new p,new p,new p,new p]}},this.clipplanes=null,this.calculation=!0,this.boundingBox=new aA,this.calculateClipBoundingBox=function(A){this.boundingBox.makeEmpty();for(var e=new y,t=0;A.length>t;t+=1){var i=A[t].coplanarPoint(e);0!==i.x&&(i.x>this.boundingBox.max.x?this.boundingBox.max.x=i.x:this.boundingBox.min.x>i.x&&(this.boundingBox.min.x=i.x)),0!==i.y&&(i.y>this.boundingBox.max.y?this.boundingBox.max.y=i.y:this.boundingBox.min.y>i.y&&(this.boundingBox.min.y=i.y)),0!==i.z&&(i.z>this.boundingBox.max.z?this.boundingBox.max.z=i.z:this.boundingBox.min.z>i.z&&(this.boundingBox.min.z=i.z))}},this.getClipBoundingBox=function(){return this.boundingBox},this.isVisible=function(){return this.visible},this.getPlaneNormal=function(A){var e=new p,t=Math.floor(A/2);return e.setComponent(t,Math.pow(-1,A%2)),e.w=.5*-this.cubeSize.getComponent(t),this.planeOffset[A]=0,e},this.planeMaterial=new jC({color:8158334,opacity:.3,transparent:!0,side:0,lights:!1}),this.planeHighLightMatrial=new jC({color:255,opacity:.3,transparent:!0,side:0,lights:!1}),this.initPlaneModel=function(A){var e=Math.floor(A/2),i=A%2,o=new Ue(new et(0===e?this.cubeSize.z:this.cubeSize.x,1===e?this.cubeSize.z:this.cubeSize.y),this.planeMaterial);switch(o.name=t[A],o.customTag=!0,o.position.setComponent(e,Math.pow(-1,i)*this.cubeSize.getComponent(e)*.5),A){case 0:o.rotation.y=.5*Math.PI;break;case 1:o.rotation.y=.5*-Math.PI;break;case 2:o.rotation.x=.5*-Math.PI;break;case 3:o.rotation.x=.5*Math.PI;break;case 4:break;case 5:o.rotation.x=Math.PI}o.renderOrder=90,this.add(o)},this.initCapsBox=function(){if(this.boxMesh)return this.boxMesh;var A=new Ne(this.cubeSize.x,this.cubeSize.y,this.cubeSize.z);A.groups=null;var e=new Ue(A,new jC({color:16776960,side:2,stencilWrite:!0,stencilFunc:515,stencilRef:1,stencilFuncMask:255,stencilFail:7680,stencilZFail:7680,stencilZPass:7680}));return e.matrixWorld=this.matrixWorld,e.matrix=this.matrix,e.name="capsBox",this.boxMesh=e,e},this.initWireframes=function(){var A=[.5*-this.cubeSize.x,.5*-this.cubeSize.y,.5*-this.cubeSize.z,.5*this.cubeSize.x,.5*-this.cubeSize.y,.5*-this.cubeSize.z,.5*this.cubeSize.x,.5*this.cubeSize.y,.5*-this.cubeSize.z,.5*-this.cubeSize.x,.5*this.cubeSize.y,.5*-this.cubeSize.z,.5*-this.cubeSize.x,.5*-this.cubeSize.y,.5*this.cubeSize.z,.5*this.cubeSize.x,.5*-this.cubeSize.y,.5*this.cubeSize.z,.5*this.cubeSize.x,.5*this.cubeSize.y,.5*this.cubeSize.z,.5*-this.cubeSize.x,.5*this.cubeSize.y,.5*this.cubeSize.z],e=new he,t=new jC({color:0,lights:!0});e.setIndex([0,1,1,2,2,3,3,0,4,5,5,6,6,7,7,4,0,4,3,7,1,5,2,6]),e.setAttribute("position",new Ae(A,3)),e.setAttribute("color",new Ae([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],3)),e.computeBoundingSphere();var i=new jo(e,t);i.name="Wireframes",i.customTag=!0,this.add(i)},this.updateClippingParams=function(A){},this.enable=function(A,e){this.visible=e,this.uniforms.iClipPlane.value=A?6:0,this.updateClippingParams(this.uniforms),this.boxMesh&&(this.boxMesh.visible=e)},this.isEnabled=function(){return 0!==this.uniforms.iClipPlane.value};var i=function(A,e,t,i,o,n,r,a,s,l,c,h){this.enable=A,this.visible=e,this.rotatable=t,this.calculation=i,this.planeOffset=o.slice(0),this.planeRotate=n.slice(0),this.position=r,this.scale=a,this.quaternion=s,this.cubeSize=l,this.center=c,this.boundingBox=h};this.store=function(){return new i(!!this.uniforms.iClipPlane.value,this.visible,this.rotatable,this.calculation,this.planeOffset,this.planeRotate,this.position.clone(),this.scale.clone(),this.quaternion.clone(),this.cubeSize.clone(),this.center.clone(),this.boundingBox.clone())},this.restore=function(A){this.calculation=!0,this.calculationPlanes(A.cubeSize,A.center),this.enable(A.enable,A.visible),this.rotatable=A.rotatable,this.calculation=A.calculation;for(var e=0;6>e;e+=1)this.planeOffset[e]=A.planeOffset[e];for(var t=0;3>t;t+=1)this.planeRotate[t]=A.planeRotate[t];this.position.copy(A.position),this.scale.copy(A.scale),this.quaternion._w=A.quaternion._w,this.quaternion._x=A.quaternion._x,this.quaternion._y=A.quaternion._y,this.quaternion._z=A.quaternion._z,this.update()},this.reset=function(){this.calculation=!0;for(var A=0;6>A;A+=1)this.planeOffset[A]=0;for(A=0;3>A;A+=1)this.planeRotate[A]=0;this.position.copy(this.center),this.scale.copy(new y(1,1,1)),this.quaternion.copy(new f),this.update()},this.calculationPlanes=function(A,e,t){if(this.calculation||t){this.cubeSize.copy(A),this.center.copy(e);for(var i=this.children.length-1;i>=0;i-=1)this.remove(this.children[i]);for(i=0;6>i;i+=1)this.uniforms.vClipPlane.value[i]=this.getPlaneNormal(i),this.initPlaneModel(i);this.initWireframes(),this.clipplanes=this.uniforms.vClipPlane.value.slice(0),this.reset()}},this.update=function(){this.updateMatrixWorld();var A=new M;A.getInverse(this.matrix),A.transpose();for(var e=0;6>e;e+=1)this.uniforms.vClipPlane.value[e]=this.clipplanes[e].clone().applyMatrix4(A);this.updateClippingParams(this.uniforms),this.observer&&this.observer()},this.offset=function(A,e){this.calculation=!1;var t=Math.floor(A/2);this.cubeSize.getComponent(t);A%2==0&&this.planeOffset[A]+e>0&&(e=-this.planeOffset[A]),A%2==1&&0>this.planeOffset[A]+e&&(e=-this.planeOffset[A]),this.planeOffset[A]+=e;for(var i=new y,o=0;6>o;o+=1){var n=this.clipplanes[o].clone(),r=this.planeOffset[o],a=new y(n.x*r,n.y*r,n.z*r);i.add(a)}var s=1+i.getComponent(t)/this.cubeSize.getComponent(t);if((s=0===s?1e-5:s)>0){this.scale.setComponent(t,s);var l=this.uniforms.vClipPlane.value[A].clone(),c=new y(l.x,l.y,l.z);c.normalize();var h=new y(c.x*(a=e),c.y*a,c.z*a);A%2==1?this.position.sub(h.multiplyScalar(.5)):this.position.add(h.multiplyScalar(.5)),this.update()}else this.planeOffset[A]-=e};var o=new f,n=new y(1,0,0);this.rotX=function(A){this.calculation=!1,o.setFromAxisAngle(n,A),this.quaternion.multiply(o),this.update()};var r=new y(0,1,0);this.rotY=function(A){this.calculation=!1,o.setFromAxisAngle(r,A),this.quaternion.multiply(o),this.update()},this.setSectionBox=function(A,e){this.calculation=!0;var t=new y(e.x-A.x,e.y-A.y,e.z-A.z),i=new y(.5*(A.x+e.x),.5*(A.y+e.y),.5*(A.z+e.z));this.calculationPlanes(t,i)},this.calculateOffsetByBox=function(A,e){var t=e.x-this.center.x-.5*this.cubeSize.x;this.planeOffset[0]>t?(this.moveSectionPlane("left",this.center.x-.5*this.cubeSize.x-A.x),this.moveSectionPlane("right",t)):(this.moveSectionPlane("right",t),this.moveSectionPlane("left",this.center.x-.5*this.cubeSize.x-A.x));var i=e.y-this.center.y-.5*this.cubeSize.y;this.planeOffset[2]>i?(this.moveSectionPlane("bottom",this.center.y-.5*this.cubeSize.y-A.y),this.moveSectionPlane("top",i)):(this.moveSectionPlane("top",i),this.moveSectionPlane("bottom",this.center.y-.5*this.cubeSize.y-A.y));var o=e.z-this.center.z-.5*this.cubeSize.z;this.planeOffset[4]>o?(this.moveSectionPlane("back",this.center.z-.5*this.cubeSize.z-A.z),this.moveSectionPlane("front",o)):(this.moveSectionPlane("front",o),this.moveSectionPlane("back",this.center.z-.5*this.cubeSize.z-A.z))},this.getPlaneIndexByName=function(A){var e=-1;return"right"===A?e=0:"left"===A?e=1:"top"===A?e=2:"bottom"===A?e=3:"front"===A?e=4:"back"===A&&(e=5),e},this.moveSectionPlane=function(A,e){var t=this.getPlaneIndexByName(A);-1!==t&&(t%2!=0&&(e=-e),this.offset(t,e-this.planeOffset[t]))},this.recalculate=function(){return this.filter.getVisibleComponentsBbox()},this.setProcess=function(A,e){var t=this.getPlaneIndexByName(A),i=0;(2>t?i=this.cubeSize.x:4>t?i=this.cubeSize.y:6>t&&(i=this.cubeSize.z),e>1?e=1:0>e&&(e=0),-1!==t)&&(t%2!=1&&(e=-e),this.offset(t,e*i-this.planeOffset[t]))},this.getProcess=function(A){var e=this.getPlaneIndexByName(A);-1===e&&console.log("faceName is illegal");var t=0;2>e?t=this.cubeSize.x:4>e?t=this.cubeSize.y:6>e&&(t=this.cubeSize.z);var i=1;e%2!=1&&(i=-1);var o=i*this.planeOffset[e]/t;return o>1?o=1:0>o&&(o=0),o};var a=new y(0,0,1);this.rotateSectionBox=function(A,e){"x"===A?this.planeRotate[0]=e:"y"===A?this.planeRotate[1]=e:"z"===A&&(this.planeRotate[2]=e),this.calculation=!0;var t=new f;t.setFromAxisAngle(n,this.planeRotate[0]);var i=new f;i.setFromAxisAngle(r,this.planeRotate[1]);var o=new f;o.setFromAxisAngle(a,this.planeRotate[2]);var s=new f;s.multiply(t),s.multiply(i),s.multiply(o),this.quaternion.copy(s),this.update()},this.highLight=function(){null!==this.selectIndex&&(this.children[this.selectIndex].material=this.planeHighLightMatrial)},this.cancelHighLight=function(){null!==this.selectIndex&&(this.children[this.selectIndex].material=this.planeMaterial,this.selectIndex=null)}};(HC.prototype=Object.create(ep.prototype)).constructor=HC,HC.prototype.init=function(){this.calculationPlanes(this.cubeSize,this.center)},HC.prototype.hitTest=function(A){var e=null,t=null;if(this.raycast(A),null!==this.selectIndex){var i=A.ray,o=new EA,n=this.uniforms.vClipPlane.value[this.selectIndex];o.setComponents(n.x,n.y,n.z,n.w),e=i.distanceToPlane(o),t=0>i.direction.dot(o.normal)}return{sign:t,distance:e}},HC.prototype.raycast=function(A){if(this.visible){var e=[],t=null;this.selectIndex=null;for(var i=0;6>i;i+=1)if(this.children[i].raycast(A,e),e.length>0){var o=e.pop();t&&o.distance>=t.distance||(t=o,this.selectIndex=i),e=[]}}},Xe.line={linewidth:{value:1},resolution:{value:new s(1,1)},dashScale:{value:1},dashSize:{value:1},dashOffset:{value:0},gapSize:{value:1},opacity:{value:1}},it.line={uniforms:Ge.merge([Xe.common,Xe.fog,Xe.line]),vertexShader:"\n #include \n #include \n #include \n #include \n #include \n\n uniform float linewidth;\n uniform vec2 resolution;\n\n attribute vec3 instanceStart;\n attribute vec3 instanceEnd;\n\n attribute vec3 instanceColorStart;\n attribute vec3 instanceColorEnd;\n\n varying vec2 vUv;\n\n #ifdef USE_DASH\n\n uniform float dashScale;\n attribute float instanceDistanceStart;\n attribute float instanceDistanceEnd;\n varying float vLineDistance;\n\n #endif\n\n void trimSegment( const in vec4 start, inout vec4 end ) {\n\n // trim end segment so it terminates between the camera plane and the near plane\n\n // conservative estimate of the near plane\n float a = projectionMatrix[ 2 ][ 2 ]; // 3nd entry in 3th column\n float b = projectionMatrix[ 3 ][ 2 ]; // 3nd entry in 4th column\n float nearEstimate = - 0.5 * b / a;\n\n float alpha = ( nearEstimate - start.z ) / ( end.z - start.z );\n\n end.xyz = mix( start.xyz, end.xyz, alpha );\n\n }\n\n void main() {\n\n #ifdef USE_COLOR\n\n vColor.xyz = ( position.y < 0.5 ) ? instanceColorStart : instanceColorEnd;\n\n #endif\n\n #ifdef USE_DASH\n\n vLineDistance = ( position.y < 0.5 ) ? dashScale * instanceDistanceStart : dashScale * instanceDistanceEnd;\n\n #endif\n\n float aspect = resolution.x / resolution.y;\n\n vUv = uv;\n\n // camera space\n vec4 start = modelViewMatrix * vec4( instanceStart, 1.0 );\n vec4 end = modelViewMatrix * vec4( instanceEnd, 1.0 );\n\n // special case for perspective projection, and segments that terminate either in, or behind, the camera plane\n // clearly the gpu firmware has a way of addressing this issue when projecting into ndc space\n // but we need to perform ndc-space calculations in the shader, so we must address this issue directly\n // perhaps there is a more elegant solution -- WestLangley\n\n bool perspective = ( projectionMatrix[ 2 ][ 3 ] == - 1.0 ); // 4th entry in the 3rd column\n\n if ( perspective ) {\n\n if ( start.z < 0.0 && end.z >= 0.0 ) {\n\n trimSegment( start, end );\n\n } else if ( end.z < 0.0 && start.z >= 0.0 ) {\n\n trimSegment( end, start );\n\n }\n\n }\n\n // clip space\n vec4 clipStart = projectionMatrix * start;\n vec4 clipEnd = projectionMatrix * end;\n\n // ndc space\n vec2 ndcStart = clipStart.xy / clipStart.w;\n vec2 ndcEnd = clipEnd.xy / clipEnd.w;\n\n // direction\n vec2 dir = ndcEnd - ndcStart;\n\n // account for clip-space aspect ratio\n dir.x *= aspect;\n dir = normalize( dir );\n\n // perpendicular to dir\n vec2 offset = vec2( dir.y, - dir.x );\n\n // undo aspect ratio adjustment\n dir.x /= aspect;\n offset.x /= aspect;\n\n // sign flip\n if ( position.x < 0.0 ) offset *= - 1.0;\n\n // endcaps\n if ( position.y < 0.0 ) {\n\n offset += - dir;\n\n } else if ( position.y > 1.0 ) {\n\n offset += dir;\n\n }\n\n // adjust for linewidth\n offset *= linewidth;\n\n // adjust for clip-space to screen-space conversion // maybe resolution should be based on viewport ...\n offset /= resolution.y;\n\n // select end\n vec4 clip = ( position.y < 0.5 ) ? clipStart : clipEnd;\n\n // back to clip space\n offset *= clip.w;\n\n clip.xy += offset;\n\n gl_Position = clip;\n\n vec4 mvPosition = ( position.y < 0.5 ) ? start : end; // this is an approximation\n\n #include \n #include \n #include \n\n }\n ",fragmentShader:"\n uniform vec3 diffuse;\n uniform float opacity;\n\n #ifdef USE_DASH\n\n uniform float dashSize;\n uniform float dashOffset;\n uniform float gapSize;\n\n #endif\n\n varying float vLineDistance;\n\n #include \n #include \n #include \n #include \n #include \n\n varying vec2 vUv;\n\n void main() {\n\n #include \n\n #ifdef USE_DASH\n\n if ( vUv.y < - 1.0 || vUv.y > 1.0 ) discard; // discard endcaps\n\n if ( mod( vLineDistance + dashOffset, dashSize + gapSize ) > dashSize ) discard; // todo - FIX\n\n #endif\n\n if ( abs( vUv.y ) > 1.0 ) {\n\n float a = vUv.x;\n float b = ( vUv.y > 0.0 ) ? vUv.y - 1.0 : vUv.y + 1.0;\n float len2 = a * a + b * b;\n\n if ( len2 > 1.0 ) discard;\n\n }\n\n vec4 diffuseColor = vec4( diffuse, opacity );\n\n #include \n #include \n\n gl_FragColor = vec4( diffuseColor.rgb, diffuseColor.a );\n\n #include \n #include \n #include \n #include \n\n }\n "};var YC=function(A){Pe.call(this,{type:"LineMaterial",uniforms:Ge.clone(it.line.uniforms),vertexShader:it.line.vertexShader,fragmentShader:it.line.fragmentShader,clipping:!0}),this.dashed=!1,Object.defineProperties(this,{color:{enumerable:!0,get:function(){return this.uniforms.diffuse.value},set:function(A){this.uniforms.diffuse.value=A}},linewidth:{enumerable:!0,get:function(){return this.uniforms.linewidth.value},set:function(A){this.uniforms.linewidth.value=A}},dashScale:{enumerable:!0,get:function(){return this.uniforms.dashScale.value},set:function(A){this.uniforms.dashScale.value=A}},dashSize:{enumerable:!0,get:function(){return this.uniforms.dashSize.value},set:function(A){this.uniforms.dashSize.value=A}},dashOffset:{enumerable:!0,get:function(){return this.uniforms.dashOffset.value},set:function(A){this.uniforms.dashOffset.value=A}},gapSize:{enumerable:!0,get:function(){return this.uniforms.gapSize.value},set:function(A){this.uniforms.gapSize.value=A}},resolution:{enumerable:!0,get:function(){return this.uniforms.resolution.value},set:function(A){this.uniforms.resolution.value.copy(A)}},opacity:{enumerable:!0,get:function(){return this.uniforms.opacity.value},set:function(A){this.uniforms.opacity.value=A}}}),this.setValues(A)};(YC.prototype=Object.create(Pe.prototype)).constructor=YC,YC.prototype.isLineMaterial=!0;var WC,JC=function(){Na.call(this),this.type="LineSegmentsGeometry";this.setIndex([0,2,1,2,3,1,2,4,3,4,5,3,4,6,5,6,7,5]),this.setAttribute("position",new Ae([-1,2,0,1,2,0,-1,1,0,1,1,0,-1,0,0,1,0,0,-1,-1,0,1,-1,0],3)),this.setAttribute("uv",new Ae([-1,2,1,2,-1,1,1,1,-1,-1,1,-1,-1,-2,1,-2],2))};JC.prototype=Object.assign(Object.create(Na.prototype),{constructor:JC,isLineSegmentsGeometry:!0,applyMatrix4:function(A){var e=this.attributes.instanceStart,t=this.attributes.instanceEnd;return void 0!==e&&(e.applyMatrix4(A),t.applyMatrix4(A),e.needsUpdate=!0),null!==this.boundingBox&&this.computeBoundingBox(),null!==this.boundingSphere&&this.computeBoundingSphere(),this},setPositions:function(A){var e=null;A instanceof Float32Array?e=A:Array.isArray(A)&&(e=new Float32Array(A));var t=new ks(e,6,1);return this.setAttribute("instanceStart",new no(t,3,0)),this.setAttribute("instanceEnd",new no(t,3,3)),this.computeBoundingBox(),this.computeBoundingSphere(),this},setColors:function(A){var e=null;A instanceof Float32Array?e=A:Array.isArray(A)&&(e=new Float32Array(A));var t=new ks(e,6,1);return this.setAttribute("instanceColorStart",new no(t,3,0)),this.setAttribute("instanceColorEnd",new no(t,3,3)),this},fromWireframeGeometry:function(A){return this.setPositions(A.attributes.position.array),this},fromEdgesGeometry:function(A){return this.setPositions(A.attributes.position.array),this},fromMesh:function(A){return this.fromWireframeGeometry(new on(A.geometry)),this},fromLineSegements:function(A){var e=A.geometry;return e.isGeometry?this.setPositions(e.vertices):e.isBufferGeometry&&this.setPositions(e.attributes.position.array),this},computeBoundingBox:function(){var A=new aA;return function(){null===this.boundingBox&&(this.boundingBox=new aA);var e=this.attributes.instanceStart,t=this.attributes.instanceEnd;void 0!==e&&void 0!==t&&(this.boundingBox.setFromBufferAttribute(e),A.setFromBufferAttribute(t),this.boundingBox.union(A))}}(),computeBoundingSphere:(WC=new y,function(){null===this.boundingSphere&&(this.boundingSphere=new cA),null===this.boundingBox&&this.computeBoundingBox();var A=this.attributes.instanceStart,e=this.attributes.instanceEnd;if(void 0!==A&&void 0!==e){var t=this.boundingSphere.center;this.boundingBox.getCenter(t);for(var i=0,o=0,n=A.count;n>o;o+=1)WC.fromBufferAttribute(A,o),i=Math.max(i,t.distanceToSquared(WC)),WC.fromBufferAttribute(e,o),i=Math.max(i,t.distanceToSquared(WC));this.boundingSphere.radius=Math.sqrt(i),isNaN(this.boundingSphere.radius)&&console.error("THREE.LineSegmentsGeometry.computeBoundingSphere(): Computed radius is NaN. The instanced position data is likely to have NaN values.",this)}}),toJSON:function(){},applyMatrix:function(A){return console.warn("THREE.LineSegmentsGeometry: applyMatrix() has been renamed to applyMatrix4()."),this.applyMatrix4(A)}});var zC,ZC,XC=function(A,e){void 0===A&&(A=new JC),void 0===e&&(e=new YC({color:16777215*Math.random()})),Ue.call(this,A,e),this.type="LineSegments2"};XC.prototype=Object.assign(Object.create(Ue.prototype),{constructor:XC,isLineSegments2:!0,computeLineDistances:(zC=new y,ZC=new y,function(){for(var A=this.geometry,e=A.attributes.instanceStart,t=A.attributes.instanceEnd,i=new Float32Array(2*e.data.count),o=0,n=0,r=e.data.count;r>o;o+=1,n+=2)zC.fromBufferAttribute(e,o),ZC.fromBufferAttribute(t,o),i[n]=0===n?0:i[n-1],i[n+1]=i[n]+zC.distanceTo(ZC);var a=new ks(i,2,1);return A.setAttribute("instanceDistanceStart",new no(a,1,0)),A.setAttribute("instanceDistanceEnd",new no(a,1,1)),this}),raycast:function(){var A=new p,e=new p,t=new p,i=new y,o=new M,n=new Hs,r=new y;return function(s,l){null===s.camera&&console.error('LineSegments2: "Raycaster.camera" needs to be set in order to raycast against LineSegments2.');var c=s.ray,h=s.camera,d=h.projectionMatrix,p=this.geometry,g=this.material,u=g.resolution,f=g.linewidth+(void 0!==s.params.Line2&&s.params.Line2.threshold||0),m=p.attributes.instanceStart,C=p.attributes.instanceEnd;c.at(1,t),t.w=1,t.applyMatrix4(h.matrixWorldInverse),t.applyMatrix4(d),t.multiplyScalar(1/t.w),t.x*=u.x/2,t.y*=u.y/2,t.z=0,i.copy(t);var v=this.matrixWorld;o.multiplyMatrices(h.matrixWorldInverse,v);for(var I=0,E=m.count;E>I;I+=1){if(A.fromBufferAttribute(m,I),e.fromBufferAttribute(C,I),A.w=1,e.w=1,A.applyMatrix4(o),e.applyMatrix4(o),A.applyMatrix4(d),e.applyMatrix4(d),A.multiplyScalar(1/A.w),e.multiplyScalar(1/e.w),!(-1>A.z&&-1>e.z)&&!(A.z>1&&e.z>1)){A.x*=u.x/2,A.y*=u.y/2,e.x*=u.x/2,e.y*=u.y/2,n.start.copy(A),n.start.z=0,n.end.copy(e),n.end.z=0;var B=n.closestPointToPointParameter(i,!0);n.at(B,r);var x=a.lerp(A.z,e.z,B),S=x>=-1&&1>=x,w=i.distanceTo(r)<.5*f;if(S&&w){n.start.fromBufferAttribute(m,I),n.end.fromBufferAttribute(C,I),n.start.applyMatrix4(v),n.end.applyMatrix4(v);var M=new y,b=new y;c.distanceSqToSegment(n.start,n.end,b,M),l.push({point:b,pointOnLine:M,distance:c.origin.distanceTo(b),object:this,face:null,faceIndex:I,uv:null,uv2:null})}}}}}()});var _C=function(A,e){ep.call(this,gp.FILLCLIPPLANE,{priority:20}),this.cubeSize=A.clone(),this.originBoundingBox=(new aA).setFromCenterAndSize(e,A),this.boundingBox=this.originBoundingBox.clone(),this.center=e.clone(),this.length=.8*this.originBoundingBox.getSize(new y).length(),this.planeOffset=0,this.normalIndex=3,this.visible=!1,this.rotatable=!1,this.hit=!1,this.clipplane=new p,this.observer=null,this.renderClipPlane=new EA,this.angleA=0,this.angleB=0,this.uniforms={iClipPlane:{value:0},vClipPlane:{value:new Array(new p)}},this.planeMaterial=new jC({color:6724044,opacity:.3,transparent:!0,side:2,lights:!0}),this.planeMaterial.visible=!1,this.planeHighLightMatrial=new jC({color:6724044,opacity:.3,transparent:!0,side:2,lights:!0}),this.initPlaneModel=function(){for(var A=this.children.length-1;A>=0;A-=1)this.remove(this.children[A]);this.planeOffset=0;var e=this.length,t=new Ue(new At(e,e),this.planeMaterial);t.name="fillClipPlane",t.customTag=!0,t.renderOrder=90,this.position.copy(this.center),this.clipplane.set(0,0,1,0),this.planeMesh=t,this.add(t)},this.initWireframes=function(){var A=.5*this.length,e=[-A,A,0,A,A,0,-A,-A,0,A,-A,0],t=new he,i=new jC({color:2003199,lights:!0});t.setIndex([0,1,1,3,3,2,2,0]),t.setAttribute("position",new Ae(e,3));var o=new jo(t,i);o.name="Wireframes",o.customTag=!0,this.wireframeMesh=o,this.add(o)},this.getCoordinate=function(){var A=.5*this.length,e=new y(-A,A,0);e.applyMatrix4(this.matrix);var t=new y(A,A,0);t.applyMatrix4(this.matrix);var i=new y(-A,-A,0);return i.applyMatrix4(this.matrix),{axisX:e.clone().sub(t).normalize(),axisY:e.clone().sub(i).normalize()}},this.initCapsPlane=function(){if(this.capPlane)return this.capPlane;this.planeMesh||this.initPlaneModel();var A=this.length,e=new Ue(new At(A,A),new jC({color:16776960,side:2,stencilWrite:!0,stencilFunc:515,stencilRef:1,stencilFuncMask:255,stencilFail:7680,stencilZFail:7680,stencilZPass:7680})),t=this.planeMesh;e.matrixWorld=t.matrixWorld,e.matrix=this.matrix;for(var i=.5*this.length,o=.01*this.length,n=[],r=i-o;r>-i;r-=o)n.push(r,i,0),n.push(i,r,0);for(r=-i+o;i>r;r+=o)n.push(-i,r,0),n.push(r,-i,0);var a=new YC({color:2236962,stencilWrite:!0,stencilFunc:515,stencilRef:1,stencilFuncMask:255,stencilFail:7680,stencilZFail:7680,stencilZPass:7680});a.linewidth=1,a.resolution.set(window.innerWidth,window.innerHeight),a.depthTest=!1;var s=new JC;s.setPositions(n);var l=new XC(s,a);return l.matrix=this.matrix,l.matrixWorld=t.matrixWorld,this.capPlane={planeMesh:e,lineMesh:l},this.capPlane},this.updateClippingParams=function(A){},this.getFillClipBoundingBox=function(){return this.boundingBox},this.calculateFillClipBoundingBox=function(A){this.boundingBox=this.originBoundingBox.clone(),0!==this.clipplane.x?1===this.clipplane.x?this.boundingBox.max.x=A.x:this.boundingBox.min.x=A.x:0!==this.clipplane.y?1===this.clipplane.y?this.boundingBox.max.y=A.y:this.boundingBox.min.y=A.y:0!==this.clipplane.z&&(1===this.clipplane.z?this.boundingBox.max.z=A.z:this.boundingBox.min.z=A.z)},this.enable=function(A,e){this.visible=e,this.uniforms.iClipPlane.value=A?1:0,this.capPlane&&(this.capPlane.lineMesh.visible=e,this.capPlane.planeMesh.visible=e),this.update()},this.isEnabled=function(){return 0!==this.uniforms.iClipPlane.value},this.update=function(){this.updateMatrixWorld();var A=new M;A.getInverse(this.matrix),A.transpose(),this.uniforms.vClipPlane.value[0]=this.clipplane.clone().applyMatrix4(A),this.updateClippingParams(this.uniforms),this.observer&&this.observer()},this.getClipPlane=function(){return this.clipplane.clone()},this.offset=function(A){var e=this.cubeSize.length();this.planeOffset+=A,Math.abs(this.planeOffset)>.5*e&&(this.planeOffset=this.planeOffset>0?.5*e:.5*-e);var t=this.uniforms.vClipPlane.value[0].clone(),i=new y(t.x,t.y,t.z);i.normalize();var o=new y(i.x*this.planeOffset,i.y*this.planeOffset,i.z*this.planeOffset);this.position.copy(this.center).add(o),this.update()},this.setOffset=function(A){var e=this.cubeSize.length();this.planeOffset=A,Math.abs(A)>.5*e&&(this.planeOffset=A>0?.5*e:.5*-e);var t=this.uniforms.vClipPlane.value[0].clone(),i=new y(t.x,t.y,t.z);i.normalize();var o=new y(i.x*this.planeOffset,i.y*this.planeOffset,i.z*this.planeOffset);this.position.copy(this.center).add(o),this.update()},this.changeNormal=function(A){this.quaternion.set(0,0,0,1),this.angleA=0,this.angleB=0,this.setNormal(A)},this.setNormal=function(A){var e=this.planeMesh,t=this.wireframeMesh;0===A?(this.clipplane.set(1,0,0,0),e.rotation.set(0,Math.PI/2,0),t.rotation.set(0,Math.PI/2,0)):1===A?(this.clipplane.set(-1,0,0,0),e.rotation.set(0,-Math.PI/2,0),t.rotation.set(0,-Math.PI/2,0)):2===A?(this.clipplane.set(0,0,1,0),e.rotation.set(Math.PI,0,0),t.rotation.set(Math.PI,0,0)):3===A?(this.clipplane.set(0,0,-1,0),e.rotation.set(0,0,0),t.rotation.set(0,0,0)):4===A?(this.clipplane.set(0,1,0,0),e.rotation.set(-Math.PI/2,0,0),t.rotation.set(-Math.PI/2,0,0)):5===A&&(this.clipplane.set(0,-1,0,0),e.rotation.set(Math.PI/2,0,0),t.rotation.set(Math.PI/2,0,0)),this.normalIndex=A,e.updateMatrixWorld(),t.updateMatrixWorld(),this.capPlane&&(this.capPlane.planeMesh.matrixWorld=e.matrixWorld,this.capPlane.lineMesh.matrixWorld=e.matrixWorld),this.update()};var t=new f,i=new y(1,0,0);this.rotX=function(A){t.setFromAxisAngle(i,A),this.quaternion.multiply(t),this.update()};var o=new y(0,1,0);this.rotY=function(A){t.setFromAxisAngle(o,A),this.quaternion.multiply(t),this.update()};var n=new y(0,0,1);this.rotateByAxis=function(A,e){t.setFromAxisAngle(A,e),this.quaternion.multiply(t)},this.rotateAngleOffset=function(A,e){var t=this.normalIndex;A=A%360/180*Math.PI,0===t||1===t?("y"===e&&this.rotateByAxis(n,A),"z"===e&&this.rotateByAxis(o,A)):2===t||3===t?("x"===e&&this.rotateByAxis(i,A),"z"===e&&this.rotateByAxis(o,A)):4!==t&&5!==t||("x"===e&&this.rotateByAxis(i,A),"y"===e&&this.rotateByAxis(n,A)),this.update()},this.setRotateAngle=function(A,e){this.quaternion.set(0,0,0,1);var t=this.normalIndex;e=0>(e=void 0===e?this.angleB:e%360)?360+e:e,this.angleA=A=0>(A=void 0===A?this.angleA:A%360)?360+A:A,this.angleB=e,A=A/180*Math.PI,e=e/180*Math.PI,0===t||1===t?(e=0===t?e:-e,this.rotateByAxis(n,A=0===t?-A:A),this.rotateByAxis(o,e)):2===t||3===t?(this.rotateByAxis(i,A),this.rotateByAxis(o,e)):4!==t&&5!==t||(e=3===t?e:-e,this.rotateByAxis(i,A=3===t?-A:A),this.rotateByAxis(n,e)),this.update()},this.getRotateAngle=function(){return{angleA:this.angleA,angleB:this.angleB}},this.highLight=function(){this.planeMesh.material=this.planeHighLightMatrial},this.cancelHighLight=function(){this.planeMesh.material=this.planeMaterial,this.hit=!1};var r=function(A,e,t,i,o,n,r,a,s){this.enable=A,this.visible=e,this.rotatable=t,this.planeOffset=i,this.position=o,this.scale=n,this.quaternion=r,this.cubeSize=a,this.center=s};this.store=function(){return new r(!!this.uniforms.iClipPlane.value,this.visible,this.rotatable,this.planeOffset,this.position.clone(),this.scale.clone(),this.quaternion.clone(),this.cubeSize.clone(),this.center.clone())},this.restore=function(A){this.enable(A.enable,A.visible),this.rotatable=A.rotatable,this.planeOffset=A.planeOffset,this.position.copy(A.position),this.scale.copy(A.scale),this.quaternion._w=A.quaternion._w,this.quaternion._x=A.quaternion._x,this.quaternion._y=A.quaternion._y,this.quaternion._z=A.quaternion._z,this.normalIndex=void 0===A.normalIndex?this.normalIndex:A.normalIndex,this.setNormal(this.normalIndex)},this.setProcess=function(A){var e=this.cubeSize.length();A>1?A=1:-1>A&&(A=-1),this.planeOffset=A*e*.5;var t=this.uniforms.vClipPlane.value[0].clone(),i=new y(t.x,t.y,t.z);i.normalize();var o=new y(i.x*this.planeOffset,i.y*this.planeOffset,i.z*this.planeOffset);this.position.copy(this.center).add(o),this.update()},this.restoreRotation=function(){this.quaternion.set(0,0,0,1),this.update()},this.getProcess=function(){var A=this.cubeSize.length();return this.planeOffset/A*2}};(_C.prototype=Object.create(ep.prototype)).constructor=_C,_C.prototype.init=function(){this.initPlaneModel(),this.initWireframes()},_C.prototype.hitTest=function(A){if(this.visible){var e=null,t=null;if(this.hit=this.raycast(A),this.hit){var i=A.ray,o=new EA,n=this.uniforms.vClipPlane.value[0];o.setComponents(n.x,n.y,n.z,n.w),e=i.distanceToPlane(o),t=0>i.direction.dot(o.normal)}return{sign:t,distance:e}}this.hit=!1},_C.prototype.raycast=function(A,e){var t=[];return this.planeMesh.raycast(A,t),t.length>0},_C.prototype.resize=function(A,e){var t=A.length()/this.length;this.scale.set(t,t,t),this.cubeSize.copy(A),e&&(this.center=e.clone(),this.position.copy(this.center)),this.offset(0),this.updateMatrixWorld()},_C.prototype.getSideLength=function(){return this.length*this.scale.x};var $C=function(A,e){this.cls=A,this.size=e,this._pool=[],this.counter=0};$C.prototype.init=function(A){for(var e=0,t=this.size;t>e;e+=1){var i=new this.cls;i.init(A),this._pool[e]=i}},$C.prototype.resize=function(A,e){this.size=A,this.collect(),this.init(e)},$C.prototype.get=function(A){return this.size>this.counter?(this._pool[this.counter].spawn(A),this.counter+=1,this.counter-1):(Bh.log("the pool is full"),-1)},$C.prototype.clear=function(){for(var A=0,e=this.size;e>A;A+=1)this._pool[A].clear();this.counter=0},$C.prototype.destroy=function(){this.collect()},$C.prototype.collect=function(){this._pool=[],this.counter=0},$C.prototype.getObjects=function(){return this._pool};var Ay=function(A,e){var t=new he;t.setAttribute("position",new YA(new Float32Array(72),3)),jo.call(this,t,new ko({color:e})),void 0!==A&&this.updateBBox(A)};(Ay.prototype=Object.create(jo.prototype)).constructor=Ay,Ay.prototype.unload=function(){},Ay.prototype.updateBBox=function(A){var e=A.min,t=A.max,i=this.geometry.attributes.position.array;i[0]=t.x,i[1]=t.y,i[2]=t.z,i[3]=e.x,i[4]=t.y,i[5]=t.z,i[6]=e.x,i[7]=t.y,i[8]=t.z,i[9]=e.x,i[10]=e.y,i[11]=t.z,i[12]=e.x,i[13]=e.y,i[14]=t.z,i[15]=t.x,i[16]=e.y,i[17]=t.z,i[18]=t.x,i[19]=e.y,i[20]=t.z,i[21]=t.x,i[22]=t.y,i[23]=t.z,i[24]=t.x,i[25]=t.y,i[26]=e.z,i[27]=e.x,i[28]=t.y,i[29]=e.z,i[30]=e.x,i[31]=t.y,i[32]=e.z,i[33]=e.x,i[34]=e.y,i[35]=e.z,i[36]=e.x,i[37]=e.y,i[38]=e.z,i[39]=t.x,i[40]=e.y,i[41]=e.z,i[42]=t.x,i[43]=e.y,i[44]=e.z,i[45]=t.x,i[46]=t.y,i[47]=e.z,i[48]=t.x,i[49]=t.y,i[50]=t.z,i[51]=t.x,i[52]=t.y,i[53]=e.z,i[54]=e.x,i[55]=t.y,i[56]=t.z,i[57]=e.x,i[58]=t.y,i[59]=e.z,i[60]=e.x,i[61]=e.y,i[62]=t.z,i[63]=e.x,i[64]=e.y,i[65]=e.z,i[66]=t.x,i[67]=e.y,i[68]=t.z,i[69]=t.x,i[70]=e.y,i[71]=e.z,this.geometry.attributes.position.needsUpdate=!0,this.geometry.computeBoundingBox(),this.geometry.computeBoundingSphere(),this.matrixAutoUpdate=!1};var ey=function(){ep.call(this,gp.EXTERNALSCENEMANAGER,{pickableType:Qc.Geometry,priority:20}),this.globalSpace=!0};(ey.prototype=Object.create(ep.prototype)).constructor=ey,ey.prototype.getNode=function(A){for(var e=this.children,t=0,i=e.length;i>t;t+=1)if(e[t].name===A.toString())return e[t];return null},ey.prototype.removeNodeByName=function(A){var e=this.getNode(A);return!!e&&(this.remove(e),!0)},ey.prototype.clearNodes=function(){this.clear()},ey.prototype.setNodeVisibleByName=function(A,e){var t=this.getNode(A);return!!t&&(t.visible=e,!0)},ey.prototype.showAllNodes=function(){for(var A=this.children,e=0,t=A.length;t>e;e+=1)A[e].visible=!0},ey.prototype.hideAllNodes=function(){for(var A=this.children,e=0,t=A.length;t>e;e+=1)A[e].visible=!1};var ty=function(){ep.call(this,gp.EXTRUDEBODYMANAGER,{pickableType:Qc.Geometry,priority:20}),this.globalSpace=!0,this.mapColorToNodeId={},this.selectionIds={},this.selectionColor={red:50,green:224,blue:240,alpha:.3},this.selectionEdgeColor={red:50,green:224,blue:240,alpha:1}};function iy(A){this.scene=A,this.lightArray=void 0,this.lightHelperArray=void 0,this.lightHelper=!1,this._currentPreset=void 0,this._intensityFactor=vc.LightIntensityFactor,this.defaultShadowLightDir=new y(100,-100,-160),this.defaultLightDir=new y(100,-100,-160),this.shadowLightDir=new y(100,-100,-160),this.lightDir=new y(100,-100,-160),this._ambientLight=void 0,this.setLightPreset(vc.LightPreset)}(ty.prototype=Object.create(ep.prototype)).constructor=ty,ty.prototype.addNode=function(A,e,t,i,o,n){n=void 0===n||n;var r=this.getNode(A);if(r)return r.material=i,this.setColorInMap(r.name,i),void((r=this.getNode("wireframe_"+A))&&(r.material=o,this.setColorInMap(r.name,o)));var a=[],l=0;if(e.belong&&"user"===e.belong)a=e.roomBoundary,l=e.offsetZ;else{e.version&&"2.0"===e.version&&(e=e.loops&&e.loops.length>0?e.loops[0]:[]);for(var c=e.length,h=0;c>h;h+=1)for(var d=e[h],p=d.length,g=0;p-1>g;g+=1){var u=d[g];a.push(new s(u.x,u.y)),0===h&&0===g&&(l=u.z)}a.length>0&&a.push(a[0])}var f=new Jn(new Ba(a),{amount:t});i.depthTest=!n,f.boundingBox||f.computeBoundingBox();var m=new Ue(f,i);m.name=A.toString(),m.translateZ(l),this.setColorInMap(m.name,i),this.add(m),this.updateMatrixWorld(!0);var C=m.geometry.faces,y=[];for(h=0,p=C.length;p>h;h+=1)y.push(C[h].a),y.push(C[h].b),y.push(C[h].c);var v=m.geometry.vertices,I=[];for(h=0,p=v.length;p>h;h+=1)I.push(v[h].x),I.push(v[h].y),I.push(v[h].z);var E=Up(I,y,Math.PI/3.5),B=new he;B.setIndex(new $A(E,1)),B.setAttribute("position",new Ae(I,3)),o.depthTest=!n,o.transparent=!0;var x=new jo(B,o);x.translateZ(l),x.name="wireframe_"+A,this.setColorInMap(x.name,o),this.add(x),this.updateMatrixWorld(!0)},ty.prototype.setColorInMap=function(A,e){this.mapColorToNodeId[A]={red:255*e.color.r,green:255*e.color.g,blue:255*e.color.b,alpha:e.opacity}},ty.prototype.createMaterial=function(A){return Kd.createStandardMaterial(A)},ty.prototype.setNodeMaterial=function(A,e,t){var i=this.getNode(A);if(i){var o=i.material;for(var n in e){o.hasOwnProperty(r=n)&&(o[r]="color"===r?new LA(e[n]):e[n])}}if(i=this.getNode("wireframe_"+A)){o=i.material;for(var n in t){var r;o.hasOwnProperty(r=n)&&(o[r]="color"===r?new LA(t[n]):t[n])}}},ty.prototype.getNode=function(A){for(var e=this.children,t=0,i=e.length;i>t;t+=1)if(e[t].name===A.toString())return e[t];return null},ty.prototype.removeNodeById=function(A){var e=this.getNode(A);return e&&(delete this.mapColorToNodeId[e.name],this.remove(e)),!!(e=this.getNode("wireframe_"+A))&&(delete this.mapColorToNodeId[e.name],this.remove(e),!0)},ty.prototype.clearNodes=function(){this.clear(),this.mapColorToNodeId={}},ty.prototype.setNodeVisibleById=function(A,e){var t=this.getNode(A);return t&&(t.visible=e),!!(t=this.getNode("wireframe_"+A))&&(t.visible=e,!0)},ty.prototype.showAllNodes=function(){for(var A=this.children,e=0,t=A.length;t>e;e+=1)A[e].visible=!0},ty.prototype.hideAllNodes=function(){for(var A=this.children,e=0,t=A.length;t>e;e+=1)A[e].visible=!1},ty.prototype.setNodeColorById=function(A,e){var t=this.getNode(A);if(t){var i=t.material;return i.color=new LA(e.red/255,e.green/255,e.blue/255),i.opacity=e.alpha,e!==this.selectionColor&&e!==this.selectionEdgeColor&&this.setColorInMap(t.name,i),!0}return!1},ty.prototype.getNodeColorById=function(A){return this.mapColorToNodeId[A]},ty.prototype.setWireframeColorById=function(A,e){return this.setNodeColorById("wireframe_"+A,e)},ty.prototype.getWireframeColorById=function(A){return this.getNodeColorById("wireframe_"+A)},ty.prototype.applySelection=function(A){this.clearSelection();var e=this.selectionIds,t=this.mapColorToNodeId,i=A.sceneState.selectionSet;for(var o in i)t[o]&&(e[o]=!0,this.setNodeColorById(o,this.selectionColor),this.setWireframeColorById(o,this.selectionEdgeColor))},ty.prototype.clearSelection=function(){var A=this.mapColorToNodeId;if(this.selectionIds){for(var e=this.children,t=0,i=e.length;i>t;t+=1){var o=e[t],n=A[o.name];o.material.color=new LA(n.red/255,n.green/255,n.blue/255),o.material.opacity=n.alpha}this.selectionIds={}}},ty.prototype.applyHover=function(A){var e=A.sceneState;if(e.hoverId&&!e.isSelected(e.hoverId)){var t=this.getNode(e.hoverId);if(t){this.hoveredId=e.hoverId;var i=this.mapColorToNodeId[this.hoveredId],o=Kd.getHoverColorByColor({r:i.red/255,g:i.green/255,b:i.blue/255,a:i.alpha});t.material.color.setRGB(o.r,o.g,o.b),t.material.opacity=o.a}}},ty.prototype.clearHover=function(){var A=this.hoveredId;if(A)if(this.selectionIds[A])this.hoveredId=null;else{var e=this.getNode(A);if(e){var t=this.mapColorToNodeId[A];e.material.color.setRGB(t.red/255,t.green/255,t.blue/255),e.material.opacity=t.alpha,this.hoveredId=null}else this.hoveredId=null}},iy.prototype.destroy=function(){this.scene=void 0,this._clearLights(),this._clearLightHelpers()},iy.prototype.currentLights=function(){if(this.lightArray)return[].concat(this.lightArray)},iy.prototype.setLightPreset=function(A){this._currentPreset!==A&&(vc.LightPreset=A,this._currentPreset=A,this._clearLights(),this._clearLightHelpers(),this._createLights(),this.setIntensityFactor(this._intensityFactor),this.lightHelper&&this._createLightHelpers())},iy.prototype.getLightPreset=function(){return this._currentPreset},iy.prototype.updateLights=function(A){if(this.lightArray){var e=new y(0,0,1),t=Math.PI/4,i=A.position.clone();i.sub(A.target),i.normalize();var o=null;if(0===this._currentPreset){var n=this.lightArray[1];n.position.set(i.x,i.y,i.z),n.updateMatrixWorld(!0)}else if(1===this._currentPreset||3===this._currentPreset){var r=this.lightArray[2],a=this.lightArray[3];o=i.clone().applyAxisAngle(e,-1.2*t),r.position.copy(o).normalize(),r.position.multiplyScalar(1e3),r.position.z=600,r.updateMatrixWorld(),o=i.clone().applyAxisAngle(e,Number(t)),a.position.copy(o).normalize(),a.position.multiplyScalar(1e3),a.position.z=600,a.updateMatrixWorld()}else if(2===this._currentPreset){var s=this.lightArray[1],l=this.scene.getBoundingBox().getCenter(new y),c=new y(l.x-(o=this.lightDir).x,l.y-o.y,l.z-o.z);s.position.copy(c),s.target.position.set(l.x,l.y,l.z),s.target.updateMatrixWorld(!0),s.updateMatrixWorld(!0)}else{s=this.lightArray[1];o=i.clone().applyAxisAngle(e,-2*t),s.position.copy(o).normalize(),s.position.multiplyScalar(1e3),s.position.z=600,s.updateMatrixWorld()}this.lightHelperArray&&this.updateLightHelper()}},iy.prototype.updateLightHelper=function(){for(var A=0;this.lightHelperArray.length>A;A+=1){var e=this.lightHelperArray[A];e.update(),e.updateMatrixWorld(!0)}},iy.prototype.setIntensityFactor=function(A){if(!isNaN(A)){var e=Number(A);if(e>=0&&(this._intensityFactor=e,vc.LightIntensityFactor=this._intensityFactor,this.lightArray))for(var t=0,i=this.lightArray.length;i>t;t+=1){var o=this.lightArray[t];o.intensity=o.initIntensity*this._intensityFactor}}},iy.prototype.getIntensityFactor=function(){return this._intensityFactor},iy.prototype.setAmbientLightIntensity=function(A){if(this._ambientLight){if(isNaN(A))return;var e=Number(A);if(0>e)return;this._ambientLight.intensity=e}},iy.prototype.getAmbientLightIntensity=function(){if(this._ambientLight)return this._ambientLight.intensity},iy.prototype._createLights=function(){var A=null;switch(this._currentPreset){case 0:A=this._lightPreset0();break;case 1:A=this._lightPreset1();break;case 2:A=this._lightPreset2();break;case 3:A=this._lightPreset3();break;case 4:A=this._lightPreset4();break;default:(A=this._commonLights(.72))[1].color.setHex(16777215)}if(this.lightArray=A,this.scene&&this.lightArray)for(var e=0,t=this.lightArray.length;t>e;e+=1)this.scene.add(this.lightArray[e]),this.lightArray[e].updateMatrixWorld()},iy.prototype._clearLights=function(){if(this.lightArray){for(var A=0;this.lightArray.length>A;A+=1){var e=this.lightArray[A];e.parent&&e.parent.remove(e)}this.lightArray=void 0}this._ambientLight=void 0},iy.prototype._createLightHelpers=function(){if(this.lightArray)for(var A=0;this.lightArray.length>A;A+=1){var e=this.lightArray[A];if(e instanceof Ra){var t=new ll(e,6e3);this.lightHelperArray||(this.lightHelperArray=[]),this.lightHelperArray.push(t),this.scene&&this.scene.add(t)}}},iy.prototype._clearLightHelpers=function(){if(this.lightHelperArray){for(var A=0;this.lightHelperArray.length>A;A+=1){var e=this.lightHelperArray[A];e.parent&&e.parent.remove(e)}this.lightHelperArray=void 0}},iy.prototype._commonLights=function(A,e){var t=[],i=new Ta(16777215,.6);i.intensity=.3,i.initIntensity=i.intensity,t.push(i),this._ambientLight=i;var o=new Ra(16777215,1);return o.color.setHex(14800580),o.position.set(-100,100,160),o.intensity=.72,o.initIntensity=o.intensity,o.distance=300,o.updateMatrixWorld(),t.push(o),vc.EnableShadow&&(o.castShadow=!0,o.shadow.camera.near=0,o.shadow.camera.far=5e6,o.shadow.camera.left=-2e5,o.shadow.camera.right=2e5,o.shadow.camera.top=2e5,o.shadow.camera.bottom=-2e5,o.distance=1110,o.shadow.mapSize.height=1028,o.shadow.mapSize.width=1028),t},iy.prototype._lightPreset0=function(){var A=null;if(!vc.EnableLightmap){A=[];var e=.3,t=new Sa(16777215,16777215,e);A.push(t),t.initIntensity=e,t.position.set(0,0,500),t.updateMatrixWorld(!0);var i=new Ra(16777215,e=.7);A.push(i),i.initIntensity=e,i.color.setHSL(.1,.95,1),i.position.set(-1,1,.75),i.position.multiplyScalar(50)}return A},iy.prototype._lightPreset1=function(){var A=this._commonLights(.4,.56);A||(A=[]);var e=new Ra(16777215,1);A.push(e),e.color.setHex(16777215),e.position.set(100,100,100),e.intensity=.4,e.initIntensity=e.intensity,e.updateMatrixWorld();var t=new Ra(16777215,1);return A.push(t),t.color.setHex(16777215),t.position.set(-100,-100,100),t.intensity=.18,t.initIntensity=t.intensity,t.updateMatrixWorld(),A},iy.prototype._lightPreset2=function(){var A=this._commonLights();A||(A=[]);var e=new Ra(16777215,1);A.push(e),e.position.set(60,130,80),e.intensity=.28,e.initIntensity=e.intensity,e.updateMatrixWorld();var t=new Ra(16777215,1);A.push(t),t.color.setHex(8100788),t.position.set(100,-100,80),t.intensity=.22,t.initIntensity=t.intensity,t.updateMatrixWorld();var i=new Ra(16777215,1);return A.push(i),i.color.setHex(8100788),i.position.set(-140,-50,80),i.intensity=.18,i.initIntensity=i.intensity,i.updateMatrixWorld(),A},iy.prototype._lightPreset3=function(){var A=this._commonLights(.4,.56);A||(A=[]);var e=new Ra(16777215,1);A.push(e),e.color.setHex(16777215),e.position.set(100,100,100),e.intensity=.22,e.initIntensity=e.intensity,e.updateMatrixWorld();var t=new Ra(16777215,1);return A.push(t),t.color.setHex(16777215),t.position.set(-100,-100,100),t.intensity=.18,t.initIntensity=t.intensity,t.updateMatrixWorld(),A},iy.prototype._lightPreset4=function(){var A=this._commonLights(.4,.56);A||(A=[]);var e=new Ra(16777215,1);A.push(e),e.color.setHex(16777215),e.position.set(100,100,100),e.intensity=.4,e.initIntensity=e.intensity,e.updateMatrixWorld();var t=new Ra(16777215,1);return A.push(t),t.color.setHex(16777215),t.position.set(-100,-100,100),t.intensity=.1,t.initIntensity=t.intensity,t.updateMatrixWorld(),A[0].intensity=.3,A[1].intensity=.2,this.enableShadowLight(),A},iy.prototype.enableShadowLight=function(){this.lightCastShadow?this.lightCastShadow.visible=!0:(this.lightCastShadow=new Ra(16777215,.15),this.lightCastShadow.intensity=.5,this.lightCastShadow.initIntensity=.5,this.lightCastShadow.castShadow=!0,this.lightCastShadow.shadow.mapSize.width=1024,this.lightCastShadow.shadow.mapSize.height=1024,this.lightCastShadow.shadow.bias=-9e-4,this.scene.add(this.lightCastShadow)),this.lightCastShadow.updateMatrixWorld()},iy.prototype.getLightDirFromAltitudeAndAzimuth=function(A,e){var t=Math.sin(e),i=Math.cos(e);return e>0&&(i=-i),new y(t,i,Math.sin(A)/Math.cos(A)).multiplyScalar(-100)},iy.prototype.disableShadowLight=function(){this.lightCastShadow&&(this.lightCastShadow.visible=!1)},iy.prototype.updateShadowLight=function(){if(null!==this.scene.geometryGroup.boundingBox&&this.lightCastShadow&&this.lightCastShadow.visible){var A=this.scene.getBoundingBox().clone(),e=new y,t=A.getSize(e);t.multiplyScalar(.2),A.min.sub(t),A.max.add(t);var i=A.getCenter(new y),o=this.shadowLightDir,n=new y(i.x-o.x,i.y-o.y,i.z-o.z);this.lightCastShadow.position.set(n.x,n.y,n.z),this.lightCastShadow.target.position.set(i.x,i.y,i.z),this.lightCastShadow.target.updateMatrixWorld(!0),this.lightCastShadow.updateMatrixWorld(!0);var r=this.lightCastShadow.shadow.camera;r.position.set(n.x,n.y,n.z),r.lookAt(i),r.updateMatrixWorld(),r.matrixWorldInverse.getInverse(r.matrixWorld),t=A.getSize(new y),A.min.z=A.min.z-.05*t.z;var a=new EA(new y(0,0,1),-A.min.z),s=a.normal.dot(o),l=A.max.clone(),c=-(l.dot(a.normal)+a.constant)/s,h=new y;h.copy(o).multiplyScalar(c).add(l),A.expandByPoint(h),A.applyMatrix4(r.matrixWorldInverse),r.left=A.min.x,r.right=A.max.x,r.top=A.max.y,r.bottom=A.min.y,r.far=1.5*-A.min.z,r.near=-A.max.z,r.updateProjectionMatrix()}},iy.prototype.disableLights=function(){if(this.lightArray)for(var A=0,e=this.lightArray.length;e>A;A+=1)this.lightArray[A].visible=!1},iy.prototype.enableLights=function(){if(this.lightArray)for(var A=0,e=this.lightArray.length;e>A;A+=1)this.lightArray[A].visible=!0};var oy=function(){H.call(this),this.type="Scene",this.autoUpdate=!1,this.tempVector3=new y,this.objectGroups=new ep,this.add(this.objectGroups),this.geometryGroup=new ep(gp.GEOMETRY,{pickableType:Qc.Geometry,globalSpace:!0}),this.geometryGroup.boundingBox=new aA,this.pool=new $C(Kf,0),this.expandScalar=1.01,this.clipPlanes=null,this.fillClipPlane=null,this.areaNode=null,this.extrudeBodyManager=null,this.externalScene=null,this.externalComponentManager=null,this.customPlaneManager=null,this.axisGridManager=null,this.lightManager=new iy(this),this.selectedMeshes=[],this.nonSelectedMeshes=[],this.selectedInstanceMeshes=[],this.nonSelectedInstanceMeshes=[],this.componentTransformControl=void 0};(oy.prototype=Object.create(H.prototype)).constructor=oy,oy.prototype.createCapStencilMaterials=function(){this.backMaterial||(this.backMaterial=Kd.createStandardMaterial({color:16711680,colorWrite:!1,depthWrite:!1,depthTest:!1,side:1,stencilWrite:!0,stencilFunc:519,stencilRef:1,stencilFuncMask:255,stencilFail:7680,stencilZFail:7680,stencilZPass:7682}),this.frontMaterial=Kd.createStandardMaterial({color:255,colorWrite:!1,depthWrite:!1,depthTest:!1,side:0,stencilWrite:!0,stencilFunc:519,stencilRef:1,stencilFuncMask:255,stencilFail:7680,stencilZFail:7680,stencilZPass:7683}),this.backInstanceMaterial=Kd.createStandardMaterial({color:16711680,colorWrite:!1,depthWrite:!1,depthTest:!1,side:1,stencilWrite:!0,stencilFunc:519,stencilRef:1,stencilFuncMask:255,stencilFail:7680,stencilZFail:7680,stencilZPass:7682}),this.backInstanceMaterial.defines.USE_INSTANCE="",this.backInstanceMaterial.defines.USE_INSTANCE_NORMAL="",this.frontInstanceMaterial=Kd.createStandardMaterial({color:255,colorWrite:!1,depthWrite:!1,depthTest:!1,side:0,stencilWrite:!0,stencilFunc:519,stencilRef:1,stencilFuncMask:255,stencilFail:7680,stencilZFail:7680,stencilZPass:7683}),this.frontInstanceMaterial.defines.USE_INSTANCE="",this.frontInstanceMaterial.defines.USE_INSTANCE_NORMAL="")},oy.prototype.destroy=function(){this.lightManager.destroy(),this.clearAll(),this.pool.destroy(),this.pool=null,this.geometryGroup=null,this.objectGroups=null,this.clipPlanes=null,this.fillClipPlane=null,this.areaNode=null,this.extrudeBodyManager=null,this.externalComponentManager=null,this.axisGridManager=null,this.IBLMaps=null,this.transformMatrix=null,this.selectedMeshes=null,this.nonSelectedMeshes=null,this.selectedInstanceMeshes=null,this.nonSelectedInstanceMeshes=null},oy.prototype.resizePool=function(A){vc.MergeComponent||(this.geometryGroup.clear(),this.pool.resize(A,{parent:this.geometryGroup}))},oy.prototype.clearAll=function(){this.pool.clear(),this.autoUpdate=!1},oy.prototype.getRootNode=function(){return this.geometryGroup},oy.prototype.getBoundingBox=function(){var A=this.getBoundingBoxWorld();return A.applyMatrix4(this.geometryGroup.matrix),A},oy.prototype.getGeometryBoundingBox=function(){var A=new aA;A.copy(this.geometryGroup.boundingBox);var e=new y,t=A.getSize(e);return t.multiplyScalar(this.expandScalar-1),A.min.sub(t),A.max.add(t),A.applyMatrix4(this.geometryGroup.matrix),A},oy.prototype.getBoundingBoxWorld=function(){var A=new aA,e=new y;return function(){A.copy(this.geometryGroup.boundingBox),this.componentTransformControl&&A.union(this.componentTransformControl.getBoundingBox());var t=A.getSize(e);return t.multiplyScalar(this.expandScalar-1),A.min.sub(t),A.max.add(t),this.fillClipPlane&&this.fillClipPlane.visible?A.expandByObject(this.fillClipPlane):this.clipPlanes&&this.clipPlanes.visible&&A.expandByObject(this.clipPlanes),A}}(),oy.prototype.setBoundingBoxWorld=function(A){this.geometryGroup.boundingBox?this.geometryGroup.boundingBox.copy(A):this.geometryGroup.boundingBox=A;var e=A.clone();if(this.clipPlanes&&this.clipPlanes.visible){var t=e.getSize(new y);t.multiplyScalar(this.expandScalar-1),e.min.sub(t),e.max.add(t),this.clipPlanes.setSectionBox(e.min,e.max)}if(this.fillClipPlane&&this.fillClipPlane.visible){var i=new y;e.getSize(i),i.multiplyScalar(.05),e.min.sub(i),e.max.add(i),this.fillClipPlane.resize(e.getSize(i),e.getCenter(new y))}},oy.prototype.expandBoundingBoxWorldBy=function(A){if(A){var e=A;A instanceof Array==!1&&(e=[A]);for(var t=0,i=e.length;i>t;t+=1){var o=e[t];(o instanceof Ue||o instanceof H)&&this.geometryGroup.boundingBox.expandByObject(o)}}},oy.prototype.getTransformMatrixGlobal=function(){return this.transformMatrix},oy.prototype.getMatrixGlobal=function(){return this.geometryGroup.matrix.clone()},oy.prototype.getGlobalScaleFactor=function(){return this.geometryGroup.matrix.elements[0]},oy.prototype.getMatrixWorldGlobal=function(){return this.geometryGroup.matrixWorld},oy.prototype.getRotationGlobal=function(){if(this.geometryGroup.matrix){var A=new M;A.extractRotation(this.geometryGroup.matrix);var e=new F;return e.setFromRotationMatrix(A),e}return null},oy.prototype.getTrackingPointFromBoundingBox=function(A,e){if(!this.geometryGroup.boundingBox)return null;var t=e.origin,i=this.getBoundingBox(),o=0,n=[new y,new y,new y,new y,new y,new y,new y,new y];n[0].set(i.min.x,i.min.y,i.min.z),n[1].set(i.min.x,i.min.y,i.max.z),n[2].set(i.min.x,i.max.y,i.min.z),n[3].set(i.min.x,i.max.y,i.max.z),n[4].set(i.max.x,i.min.y,i.min.z),n[5].set(i.max.x,i.min.y,i.max.z),n[6].set(i.max.x,i.max.y,i.min.z),n[7].set(i.max.x,i.max.y,i.max.z);for(var r=0;8>r;r+=1){var a=new y;a.subVectors(n[r],t);var s=a.dot(A);s>o&&(o=s)}var l=A.clone().multiplyScalar(o),c=t.clone().add(l),h=new EA;return h.setFromNormalAndCoplanarPoint(A,c),e.intersectPlane(h,new y)},oy.prototype.getNearDepthByRect=function(){var A=new aA,e=1/0,t=new M,i=new y;function o(A){i.setFromMatrixPosition(A.matrixWorld),i.applyProjection(t);var o=i.z;o>=e||0>o||o>1||(e=o)}return function(i,n){function r(e){if(e instanceof Kf){if(!function(e,t){if(!t.boundingBox||t instanceof Ue){var i=t.geometry;null===i.boundingBox&&i.computeBoundingBox(),A.copy(i.boundingBox),A.applyMatrix4(t.matrixWorld)}else A.copy(t.boundingBox),A.applyMatrix4(t.matrixWorld);return e.intersectsBox(A)}(i,e))return;o(e)}else if(e.worldBoundingBox){if(!i.intersectsBox(e.worldBoundingBox))return;o(e)}var t=e.children;if(t)for(var n=0,a=t.length;a>n;n+=1){var s=t[n];s.visible&&r(s)}}e=1/0,t.multiplyMatrices(n.projectionMatrix,n.matrixWorldInverse);for(var a=this.geometryGroup.children,s=0,l=a.length;l>s;s+=1){var c=a[s];c.visible&&r(c)}return e}}(),oy.prototype.getExpandScalar=function(){return this.expandScalar},oy.prototype.hasClipPlanes=function(){return null!==this.clipPlanes},oy.prototype.getClipPlanes=function(A){var e=this.getBoundingBox(),t=e.getSize(new y),i=e.getCenter(this.tempVector3);return null===this.clipPlanes?(this.clipPlanes=new HC(t,i),this.objectGroups.add(this.clipPlanes)):A&&this.clipPlanes.setSectionBox(e.min,e.max),this.clipPlanes},oy.prototype.setClipPlanes=function(A){if(A){var e=this.getClipPlanes();A.setFromCenterAndSize(A.getCenter(new y),A.getSize(new y).multiplyScalar(this.expandScalar)),e.setSectionBox(A.min,A.max)}},oy.prototype.resetClipPlanes=function(){var A=this.getClipPlanes(),e=this.getBoundingBox();A.reset(),e.max.x!==-1/0&&e.max.y!==-1/0&&e.max.z!==-1/0&&e.min.x!==1/0&&e.min.y!==1/0&&e.min.z!==1/0?(e.setFromCenterAndSize(e.getCenter(new y),e.getSize(new y)),A.setSectionBox(e.min,e.max)):this.clipPlanes=null},oy.prototype.hasFillClipPlanes=function(){return null!=this.fillClipPlane},oy.prototype.getFillClipPlane=function(){var A=new aA;A.copy(this.geometryGroup.boundingBox),A.applyMatrix4(this.geometryGroup.matrix);var e=A.getSize(new y);e.multiplyScalar(.05),A.min.sub(e),A.max.add(e);var t=A.getSize(new y),i=A.getCenter(new y);return null===this.fillClipPlane?(this.fillClipPlane=new _C(t,i),this.objectGroups.add(this.fillClipPlane)):this.fillClipPlane.cubeSize.equals(t)||this.fillClipPlane.resize(t,i),this.fillClipPlane},oy.prototype.disableClipPlanes=function(){null!=this.clipPlanes&&(this.clipPlanes.enable(!1,!1),this.clipPlanes.update()),null!=this.fillClipPlane&&(this.fillClipPlane.enable(!1,!1),this.fillClipPlane.update())},oy.prototype.getAreaNode=function(){return this.areaNode},oy.prototype.getAxisGridManager=function(){return this.axisGridManager},oy.prototype.getExtrudeBodyManager=function(){return null===this.extrudeBodyManager&&(this.extrudeBodyManager=new ty,this.objectGroups.add(this.extrudeBodyManager),this.extrudeBodyManager.matrix.copy(this.geometryGroup.matrix),this.extrudeBodyManager.matrixAutoUpdate=!1,this.extrudeBodyManager.updateMatrixWorld(!0)),this.extrudeBodyManager},oy.prototype.getCustomPlaneManager=function(){return this.customPlaneManager},oy.prototype.getExternalScene=function(){return null===this.externalScene&&(this.externalScene=new ey,this.add(this.externalScene),this.externalScene.updateMatrixWorld(!0)),this.externalScene},oy.prototype.shrinkScopeByClipPlane=function(A,e){if(this.clipPlanes&&this.clipPlanes.isEnabled()){var t=this.clipPlanes.hitTest(A);if(null===t.distance&&void 0===t.distance)return;t.sign?t.distance>e.near&&(e.near=t.distance):e.far>t.distance&&(e.far=t.distance)}},oy.prototype.updateWorldMatrixByMatrix=function(A){for(var e=this.objectGroups.children,t=0,i=e.length;i>t;t+=1)e[t].globalSpace&&(e[t].matrix.copy(A),e[t].matrixAutoUpdate=!1,e[t].updateMatrixWorld(!0))},oy.prototype.currentLights=function(){return this.lightManager.currentLights()},oy.prototype.setLightPreset=function(A){this.lightManager.setLightPreset(A)},oy.prototype.getLightPreset=function(){return this.lightManager.getLightPreset()},oy.prototype.setLightIntensityFactor=function(A){this.lightManager.setIntensityFactor(A)},oy.prototype.updateLights=function(A){this.lightManager.updateLights(A)},oy.prototype.setAmbientLightIntensity=function(A){this.lightManager.setAmbientLightIntensity(A)},oy.prototype.getAmbientLightIntensity=function(){return this.lightManager.getAmbientLightIntensity()},oy.prototype.getOrCreateGroup=function(A,e){for(var t=this.objectGroups.children,i=0,o=t.length;o>i;i+=1)if(t[i].name===A)return t[i];var n=new ep(A,e);return n.isGlobalSpace()&&(n.matrix.copy(this.geometryGroup.matrix),n.matrixAutoUpdate=!1,n.updateMatrixWorld(!0)),this.objectGroups.add(n),n},oy.prototype.getGroup=function(A){for(var e=this.objectGroups.children,t=0,i=e.length;i>t;t+=1)if(e[t].name===A)return e[t];return null},oy.prototype.getGroupType=function(A){var e=A.split("|");return{groupType:e[0],modelKey:e.length>1?e[1]:void 0}},oy.prototype.getGroups=function(){return this.objectGroups.children},oy.prototype.removeGroup=function(A){this.objectGroups.remove(A)},oy.prototype.removeGroupByName=function(A){this.objectGroups.removeByName(A)},oy.prototype.hasGroup=function(A){return this.objectGroups.hasChild(A)},oy.prototype.prepareScene=function(){},oy.prototype.parseRootNode=function(A){var e=this.geometryGroup,t=uh.box3FromObject(A.minBoundary,A.maxBoundary);null===e.boundingBox||e.boundingBox.isEmpty()?e.boundingBox=t:(e.boundingBox.expandByPoint(t.min),e.boundingBox.expandByPoint(t.max)),e.updateMatrixWorld(!0)},oy.prototype.intersectToWorld=function(A,e){var t=this.getMatrixGlobal();A.worldPosition=Tu.getWorldPositionOfMesh(A.point,t);var i=e.getComponentInfoByUserId(A.userId);i&&(A.worldBoundingBox=i.boundingBox.clone())},oy.prototype.worldToDrawing=function(A){var e=this.getMatrixGlobal(),t=new y(A.x,A.y,A.z);return t.applyMatrix4(e),t},oy.prototype.drawingToWorld=function(A){var e=this.getMatrixGlobal(),t=new M;t.getInverse(e);var i=new y(A.x,A.y,A.z);return i.applyMatrix4(t),i},oy.prototype.getBoundingBoxWorldByMesh=function(A){var e=this.getMatrixGlobal(),t=A.boundingBox;t||(A.geometry.boundingBox||A.geometry.computeBoundingBox(),t=A.geometry.boundingBox);var i=t.clone();i.applyMatrix4(A.matrixWorld);var o=new M;return o.getInverse(e),i.applyMatrix4(o),i},oy.prototype.getObjectPool=function(){return this.pool},oy.prototype.getBoundingBoxOfGeometries=function(A){var e=new aA,t=[];if(Array.isArray(A))t=A;else for(var i in A)A.hasOwnProperty(i)&&t.push(i);for(var o=0,n=t.length;n>o;o+=1){var r=this.objectGroups.getObjectByProperty("key",t[o]);if(r){var a=r.geometry;if(a){a.boundingBox||a.computeBoundingBox();var s=a.boundingBox;if(s){var l=s.clone();r.matrixWorld&&l.applyMatrix4(r.matrixWorld),e.expandByPoint(l.min),e.expandByPoint(l.max)}}else Bh.log("empty geometry!")}}return e},oy.prototype.adjustInstanceVisibility=function(A){this.traverse((function(e){if((e instanceof Ue||e instanceof jo)&&e.geometry instanceof Na){var t=e.visible;A&&!e.bVisible||(e.visible=A),e.bVisible=t}}))},oy.prototype.adjustVisibility=function(A){this.traverse((function(e){if((e instanceof Ue||e instanceof jo)&&!(e.geometry instanceof Na)){var t=e.visible;A&&!e.bVisible||(e.visible=A),e.bVisible=t}}))},oy.prototype.changeVisibilityOfSelectedObjects=function(A){var e=this;A||(e.selectedMeshes.length=0,e.selectedInstanceMeshes.length=0);var t=e.selectedMeshes,i=e.selectedInstanceMeshes;this.traverse((function(o){(o instanceof Ue||o instanceof jo)&&(o.geometry instanceof Na?A?function(A){for(var t=0,i=e.selectedInstanceMeshes.length;i>t;t+=1){if(A===e.selectedInstanceMeshes[t].object){for(var o=e.selectedInstanceMeshes[t].indices,n=A.geometry.getAttribute("vState").array,r=0,a=o.length;a>r;r+=1)n[o[r]]=Hc.SELECTED;A.geometry.getAttribute("vState").needsUpdate=!0}}}(o):function(A){if(A.visible){for(var e=[],t=A.geometry.getAttribute("vState").array,o=0;t.length>o;o+=1)t[o]===Hc.SELECTED&&(e.push(o),t[o]=Hc.HIDDEN);e.length&&(A.geometry.getAttribute("vState").needsUpdate=!0,i.push({object:A,indices:e}))}}(o):A?function(A){for(var t=0,i=e.selectedMeshes.length;i>t;t+=1){if(A===e.selectedMeshes[t].object)for(var o=e.selectedMeshes[t].indices,n=0,r=o.length;r>n;n+=1){var a=o[n],s=A.geometry.groups[a.idx];s.start=a.start,s.count=a.count}}}(o):function(A){if(A._indicesGroup&&A.visible){var e=[],i=A.geometry.groups;if(i&&i.length){for(var o=0,n=i.length;n>o;o+=1){var r=i[o];r.materialIndex===zc.SELECTED&&(e.push({idx:o,start:r.start,count:r.count}),r.start=0,r.count=0)}e.length&&t.push({object:A,indices:e})}}}(o))}))},oy.prototype.changeVisibilityOfNonSelectedObjects=function(A){var e=this;A||(e.nonSelectedMeshes.length=0,e.nonSelectedInstanceMeshes.length=0);var t=e.nonSelectedMeshes,i=e.nonSelectedInstanceMeshes;this.traverse((function(o){(o instanceof Ue||o instanceof jo)&&(o.geometry instanceof Na?A?function(A){for(var t=0,i=e.nonSelectedInstanceMeshes.length;i>t;t+=1){if(A===e.nonSelectedInstanceMeshes[t].object){for(var o=e.nonSelectedInstanceMeshes[t].indices,n=A.geometry.getAttribute("vState").array,r=0,a=o.length;a>r;r+=1)n[o[r].idx]=o[r].state;A.geometry.getAttribute("vState").needsUpdate=!0}}}(o):function(A){if(A.visible){for(var e=[],t=A.geometry.getAttribute("vState").array,o=0,n=t.length;n>o;o+=1)t[o]!==Hc.SELECTED&&t[o]!==Hc.HIDDEN&&(e.push({idx:o,state:t[o]}),t[o]=Hc.HIDDEN);e.length&&(A.geometry.getAttribute("vState").needsUpdate=!0,i.push({object:A,indices:e}))}}(o):A?function(A){for(var t=0,i=e.nonSelectedMeshes.length;i>t;t+=1){if(A===e.nonSelectedMeshes[t].object){var o=e.nonSelectedMeshes[t].indices;if(null===o)A.visible=!0;else for(var n=0,r=o.length;r>n;n+=1){var a=o[n],s=A.geometry.groups[a.idx];s.start=a.start,s.count=a.count}}}}(o):function(A){if(A._indicesGroup&&A.visible){var e=[],i=A.geometry.groups;if(i&&i.length){for(var o=0,n=i.length;n>o;o+=1){var r=i[o];r.materialIndex!==zc.SELECTED&&(e.push({idx:o,start:r.start,count:r.count}),r.start=0,r.count=0)}e.length?t.push({object:A,indices:e}):(A.visible=!1,t.push({object:A,indices:null}))}else A.visible=!1,t.push({object:A,indices:null})}}(o))}))},oy.prototype.clearSelectedAndNonSelectedMeshes=function(){this.selectedMeshes.length=0,this.nonSelectedMeshes.length=0,this.selectedInstanceMeshes.length=0,this.nonSelectedInstanceMeshes.length=0},oy.prototype.setSkyBox=function(A,e,t,i,o){var n=A,r=e||[Pd.skyBoxLeft,Pd.skyBoxRight,Pd.skyBoxBack,Pd.skyBoxFront,Pd.skyBoxUp,Pd.skyBoxDown],a=this;(new $r).setPath(n).load(r,(function(A){a.background=A,t&&t()}),i,o)},oy.prototype.drawBoundingBox=function(A){if(A){var e=this.getOrCreateGroup("BoundingBox",{pickable:0,priority:2}),t=this.getBoundingBox();void 0===this.boudingBoxNode?(this.boudingBoxNode=new Ay(t,16711680),e.add(this.boudingBoxNode)):this.boudingBoxNode.updateBBox(t),this.boudingBoxNode.updateMatrixWorld(!0)}else this.removeGroupByName("BoundingBox")},oy.prototype.calculateGisMapBox=function(A){var e=this.getGroup("ExternalComponentManager"),t=this.getBoundingBoxWorld(),i=t.clone();if(e){var o=A.position.clone(),n=this.getMatrixWorldGlobal(),r=(new M).getInverse(n);o.applyMatrix4(r);var a=6370856e3,s=o.z-t.min.z;s=Math.abs(s);var l=a*Math.acos(a/(a+s));i.min.x=o.x-l,i.max.x=o.x+l,i.min.y=o.y-l,i.max.y=o.y+l,i.min.z=t.min.z,i.max.z=t.max.z}return i},oy.prototype.getReceivingPlane=function(A){if(!this.receivingPlane){this.receivingPlane=this.getOrCreateGroup(gp.RECEIVESHADOWPLANE);var e=new mr;e.transparent=!0,e.opacity=.2,e.side=2;var t=new Ue(new et(1e6,1e6),e);t.receiveShadow=!0,this.receivingPlane.add(t),this.add(this.receivingPlane),this.receivingPlane.matrixAutoUpdate=!1,this.updateReceivingPlane()}return this.receivingPlane.visible=A,this.receivingPlane},oy.prototype.updateReceivingPlane=function(){var A=this.receivingPlane.children[0],e=this.getBoundingBoxWorld(),t=e.getCenter(new y),i=e.getSize(new y);A.position.z=e.min.z-.05*i.z,A.position.x=t.x,A.position.y=t.y,A.scale.x=i.x/1e4,A.scale.y=i.y/1e4,this.receivingPlane.updateMatrixWorld(!0)},Object.defineProperties(oy.prototype,{lightArray:{get:function(){return Bh.warn("EIMMODEL.Scene: .lightArray 现在为 .lightManager.lightArray"),this.lightManager.lightArray}},lightHelperArray:{get:function(){return Bh.warn("EIMMODEL.Scene: .lightHelperArray 现在为 .lightManager.lightHelperArray"),this.lightManager.lightHelperArray}}});var ny=function(A){this.selectionSet={},this.selectionMaterial=Kd.createHighlightMaterial(),this.selectionMaterial.colorState=Yc.SELECT,this.selectionMaterial.name="selection",this.selectionMaterial.refreshUniforms(),this.hoverId=void 0,this.hoverMaterialDefaultParams={color:14540253,opacity:.9,transparent:!0,side:2},this.hoverMaterial=Kd.createStandardMaterial(this.hoverMaterialDefaultParams),this.hoverMaterial.name="hover",this.boxMaterialDefaultParams={color:16776960,opacity:1,transparent:!1},this.boxMaterial=new ko(this.boxMaterialDefaultParams),this.boxMaterial.name="box",this.modelManager=A,this.blinkComponentIds={};var e=this;this.filter=A.filter,this.filter.observerForSceneState=function(t){e.removeSelection(t),e.clearBlinkComponentsById(t),A.viewerImpl.render()},this.phongHoverMaterial=new Ir(this.hoverMaterialDefaultParams),this.phongSelectionMaterial=new Ir(vc.SelectionColor)};ny.prototype={constructor:ny,destroy:function(){this.selectionSet=null,this.blinkComponentIds=null,this.modelManager=null,this.selectionMaterial.destroy(),this.selectionMaterial=null,this.hoverMaterial.destroy(),this.hoverMaterial=null,this.phongHoverMaterial.dispose(),this.phongHoverMaterial=null,this.phongSelectionMaterial.dispose(),this.phongSelectionMaterial=null},_dispatchChangeEvent:function(){var A=this.getSelection();if(vc.EnableSelectionBoundingBox){var e=this.modelManager.scene.getOrCreateGroup("BoundingBox");if(A&&A.length>0){var t=this.modelManager.viewerImpl.getBoundingBoxByIds(A);if(t.isEmpty())return void(e.visible=!1);e.visible=!0;var i=e.getObjectByName("Box");if(!i){var o=new Uint16Array([0,1,1,2,2,3,3,0,4,5,5,6,6,7,7,4,0,4,1,5,2,6,3,7]),n=new Float32Array(24),r=new he;r.setIndex(new YA(o,1)),r.setAttribute("position",new YA(n,3)),(i=new jo(r,this.boxMaterial)).name="Box",i.matrixAutoUpdate=!1,e.add(i)}var a=i.geometry.attributes.position,s=a.array,l=t.min,c=t.max;s[0]=c.x,s[1]=c.y,s[2]=c.z,s[3]=l.x,s[4]=c.y,s[5]=c.z,s[6]=l.x,s[7]=l.y,s[8]=c.z,s[9]=c.x,s[10]=l.y,s[11]=c.z,s[12]=c.x,s[13]=c.y,s[14]=l.z,s[15]=l.x,s[16]=c.y,s[17]=l.z,s[18]=l.x,s[19]=l.y,s[20]=l.z,s[21]=c.x,s[22]=l.y,s[23]=l.z,a.needsUpdate=!0}else e.visible=!1}else{var h=this.modelManager.scene.getObjectByName("BoundingBox");h&&(h.visible=!1)}this.modelManager.dispatchEvent({type:Rc.ON_SELECTION_CHANGED,selectionList:A})},clearSelection:function(A){var e,t=!1;if(void 0===A){var i=[];for(var o in this.selectionSet){for(var n in t=!1,e=this.getSelectionSet(o))if(e.hasOwnProperty(n)){t=!0;break}t&&i.push(o)}if(i.length){for(var r=0,a=i.length;a>r;r+=1)this.selectionSet[i[r]]={},this.modelManager.clearSelection(i[r]);this._dispatchChangeEvent()}}else{for(var n in e=this.getSelectionSet(A))if(e.hasOwnProperty(n)){t=!0;break}t&&(this.selectionSet[A]={},this.modelManager.clearSelection(A),this._dispatchChangeEvent())}},addSelection:function(A,e){if(A&&A.length>=1){var t,i=[],o=!1,n=this.modelManager,r=this.filter;if(void 0===e){for(var a={},s=n.getModelKeys(),l=[],c=0,h=s.length;h>c;c+=1){var d=s[c];t=this.getSelectionSet(d),o=!1;for(var p=A.length-1;p>=0;p-=1){n.isUserIdExist(f=A[p],d)&&(!t[f]&&r.isComponentActive(f,d)&&(t[f]=!0,o=!0),a[f]=!0)}o&&l.push(d)}for(p=A.length-1;p>=0;p-=1){a[f=A[p]]||i.push(f)}if(i.length>0&&n.dispatchEvent({type:Rc.ON_SELECTION_FAILED,failedId:i}),l.length){for(var g=0,u=l.length;u>g;g+=1)this.modelManager.applySelection(l[g]);this._dispatchChangeEvent()}}else{t=this.getSelectionSet(e);for(p=A.length-1;p>=0;p-=1){var f;n.isUserIdExist(f=A[p],e)?!t[f]&&r.isComponentActive(f,e)&&(t[f]=!0,o=!0):i.push(f)}i.length>0&&n.dispatchEvent({type:Rc.ON_SELECTION_FAILED,failedId:i}),o&&(this.modelManager.applySelection(e),this._dispatchChangeEvent())}}},setSelection:function(A,e){if(A&&A.length>=1)if(void 0===e){for(var t in this.selectionSet)delete this.selectionSet[t];this.addSelection(A)}else this.selectionSet[e]={},this.addSelection(A,e)},removeSelection:function(A,e){if(A&&A.length>=1){var t=!1;if(void 0===e){var i=[];for(var o in this.selectionSet){var n=this.getSelectionSet(o);t=!1;for(var r=0,a=A.length;a>r;r+=1){var s=A[r];n[s]&&(delete n[s],t=!0)}t&&i.push(o)}if(i.length){for(var l=0,c=i.length;c>l;l+=1)this.modelManager.applySelection(i[l]);this._dispatchChangeEvent()}}else{for(var h=this.getSelectionSet(e),d=0,p=A.length;p>d;d+=1){var g=A[d];h[g]&&(delete h[g],t=!0)}t&&(this.modelManager.applySelection(e),this._dispatchChangeEvent())}}},getSelection:function(A){var e={};if(void 0===A)for(var t in this.selectionSet)for(var i=this.getSelectionSet(t),o=Object.keys(i),n=0,r=o.length;r>n;n+=1)e[o[n]]=!0;else e=this.getSelectionSet(t);return Object.keys(e)},hasSelection:function(A){var e,t=!1;if(void 0===A)for(var i in this.selectionSet){for(var o in e=this.getSelectionSet(i))if(e.hasOwnProperty[o]){t=!0;break}if(t)break}else for(var o in e=this.getSelection(A))if(e.hasOwnProperty[o]){t=!0;break}return t},getSelectionSet:function(A){if(void 0===A){var e={};for(var t in this.selectionSet)for(var i=this.getSelectionSet(t),o=Object.keys(i),n=0,r=o.length;r>n;n+=1)e[o[n]]=!0;return e}return void 0===this.selectionSet[A]&&(this.selectionSet[A]={}),this.selectionSet[A]},isSelected:function(A,e){var t,i=!1;if(void 0===e){for(var o in this.selectionSet)if((t=this.selectionSet[o])&&t[A]){i=!0;break}}else(t=this.selectionSet[e])&&t[A]&&(i=!0);return i},setHoverId:function(A,e){this.hoverId=A,this.modelManager.applyHover(e)},clearHover:function(A){this.hoverId=void 0,this.modelManager.clearHover(A)},getHoverMaterial:function(A){var e=A&&A.isMeshPhongMaterial?this.phongHoverMaterial.clone():this.hoverMaterial.clone();if(A&&A.hasOwnProperty("color")){var t=A.color.clone(),i=Math.max(t.r,Math.max(t.g,t.b));0===i&&(i=.5),t.r+=0===t.r?.3*i:.2*t.r,t.g+=0===t.g?.3*i:.2*t.g,t.b+=0===t.b?.3*i:.2*t.b,t.r>1&&(t.r=1),t.g>1&&(t.g=1),t.b>1&&(t.b=1),1===t.r&&1===t.g&&1===t.b&&(t.r=.87,t.g=.87,t.b=.87),e.color.setHex(t.getHex()),e.opacity=void 0!==A.opacity?A.opacity:this.hoverMaterialDefaultParams.opacity,e.transparent=void 0!==A.transparent?A.transparent:this.hoverMaterialDefaultParams.transparent,e.side=void 0!==A.side?A.side:this.hoverMaterialDefaultParams.side,void 0!==A.metalness&&(e.metalness=A.metalness),void 0!==A.roughness&&(e.roughness=A.roughness),void 0!==A.bumpMap&&(e.bumpMap=A.bumpMap),void 0!==A.alphaMap&&(e.alphaMap=A.alphaMap),void 0!==A.emissiveMap&&(e.emissiveMap=A.emissiveMap),void 0!==A.envMap&&(e.envMap=A.envMap),void 0!==A.envMapIntensity&&(e.envMapIntensity=A.envMapIntensity),null!=A.map&&(e.map=A.map),e.opacity=Kd.getHoverOpacity(e.opacity),e.transparent=!0,e.needsUpdate=!0}return e},getHoverColorByMaterial:function(A){var e=void 0!==A.opacity?A.opacity:this.hoverMaterialDefaultParams.opacity;if(e=Kd.getHoverOpacity(e),!A.hasOwnProperty("color"))return{rgbaColor:[this.hoverMaterial.color.r,this.hoverMaterial.color.g,this.hoverMaterial.color.b,e],transparent:!0};var t=A.color.clone();return{rgbaColor:[t.r,t.g,t.b,e],transparent:!0}},setSelectionColor:function(A,e){var t=this.selectionMaterial.opacity;e=void 0===e?t:e,"0x"+this.selectionMaterial.color.getHexString()===A&&t===e||(this.selectionMaterial.color.setHex(A),e&&(this.selectionMaterial.opacity=e),this.selectionMaterial.needsUpdate=!0)},getSelectionColor:function(){var A=this.selectionMaterial.opacity;return new Xh(this.selectionMaterial.color.getHex(),A)},getSelectionMaterial:function(){return this.selectionMaterial.clone()},setBlinkComponentsById:function(A,e){if(this.blinkComponentIds={},A&&0!==A.length){for(var t=A.length-1;t>=0;t-=1){this.filter.isComponentActive(A[t],e)&&(this.blinkComponentIds[A[t]]=!0)}this.modelManager.applyBlink()}},addBlinkComponentsById:function(A,e){if(A&&A.length){for(var t=this.blinkComponentIds,i=!1,o=A.length-1;o>=0;o-=1){var n=A[o];!t[n]&&this.filter.isComponentActive(n)&&(t[n]=!0,i=!0)}i&&this.modelManager.applyBlink()}},clearBlinkComponentsById:function(A,e){if(A&&A.length){for(var t=!1,i=this.blinkComponentIds,o=0,n=A.length;n>o;o+=1){var r=A[o];i[r]&&(delete i[r],t=!0)}t&&this.modelManager.applyBlink()}},clearAllBlinkComponents:function(){var A=!1;uh.isOwnEmptyObject(this.blinkComponentIds)||(A=!0,this.blinkComponentIds={}),A&&this.modelManager.clearBlink()},getBlinkComponents:function(){return Object.keys(this.blinkComponentIds)},getBlinkComponentsIdMap:function(A){var e=this;if(this.modelManager.getBlinkEnabled()){if(A){var t=this.getBlinkComponents(),i={};return t.forEach((function(t){var o=e.modelManager.filterHelper.distributeId(t),n=o.modelKey,r=o.objectId;n&&n.toString()!==A.toString()||(i[r]=e.blinkComponentIds[t])})),i}return this.blinkComponentIds}return null},getBlinkMaterial:function(A){return Kd.getBlinkMaterial(A,this.modelManager.getBlinkColor())},getBoxMaterial:function(){return this.boxMaterial.clone()},setBoxColor:function(A,e){var t=this.boxMaterial.opacity;e=void 0===e?t:e,"0x"+this.boxMaterial.color.getHexString()===A&&t===e||(this.boxMaterial.color.setHex(A),e&&(this.boxMaterial.opacity=e),this.boxMaterial.needsUpdate=!0,this.boxMaterial.color.setHex(A),this.boxMaterial.needsUpdate=!0)}};var ry=function(){this.hiddenUserIdMap={}};ry.prototype.destroy=function(){this.hiddenUserIdMap=null},ry.prototype.hideByUserId=function(A,e){this.hiddenUserIdMap||(this.hiddenUserIdMap={}),this.hiddenUserIdMap[A]=!!e},ry.prototype.cancelHiddenByUserId=function(A){this.hiddenUserIdMap&&delete this.hiddenUserIdMap[A]},ry.prototype.cancelAllHidden=function(){this.hiddenUserIdMap=null},ry.prototype.isHidden=function(A){return!!this.hiddenUserIdMap[A]},ry.prototype.hasHidden=function(){return!uh.isEmptyObject(this.hiddenUserIdMap)};var ay=function(){this.materialDefaultParams={color:14540253,opacity:.5,transparent:!0,side:0},this.material=Kd.createPhongMaterial(this.materialDefaultParams)};ay.prototype.destroy=function(){this.material=null},ay.prototype.resetColor=function(){this.material.color.setHex(this.materialDefaultParams.color)},ay.prototype.resetOpacity=function(){this.material.opacity=this.materialDefaultParams.opacity},ay.prototype.reset=function(){this.material.color.setHex(this.materialDefaultParams.color),this.material.opacity=this.materialDefaultParams.opacity,this.material.transparent=this.materialDefaultParams.transparent,this.material.side=this.materialDefaultParams.side,this.material.needsUpdate=!0};var sy=function(A){this.manager=A,this.requestCount=0,this.maxRequestCount=1e5,this.loading=!1,this.delayIntervalTime=300};sy.prototype.destroy=function(){this.manager=null,this.currentConditions=null,this.delayLoadTimer&&(clearTimeout(this.delayLoadTimer),this.delayLoadTimer=null)},sy.prototype.isValidModel=function(A){return!(A.isEmptyScene()||!A.isLayerData())},sy.prototype.loadGeopkOnDemandByConditionsWithDelay=function(A,e,t,i){var o=this,n=this.delayIntervalTime;o.delayLoadTimer&&clearTimeout(o.delayLoadTimer),o.delayLoadTimer=setTimeout((function(){o.loadGeopkOnDemandByConditions(A,e,t,i)}),n)},sy.prototype.loadGeopkOnDemandByConditions=function(A,e,t,i){if(this.currentConditions=A,this.requestCount+=1,this.requestCount>this.maxRequestCount&&(this.requestCount=0),!this.loading){this.loading=!0;var o=this;requestAnimationFrame(function A(n){var r=n,a=o.currentConditions;return function(){o._loadGeopkOnDemandByConditions(a,e,t,(function(){r!==o.requestCount?requestAnimationFrame(A(o.requestCount)):(o.loading=!1,i&&i(a),a=null)}))}}(this.requestCount))}},sy.prototype._loadGeopkOnDemandByConditions=function(A,e,t,i){var o=this;this.manager.traverseModels((function(n){o.isValidModel(n)&&n._getHandler().loadGeopkOnDemand(A,e,t,i)}))},sy.prototype.getBoundingBoxOnDemand=function(){var A=new aA,e=this;return this.manager.traverseModels((function(t){if(e.isValidModel(t)){var i=t._getHandler().getLayerProvider().getUnionBoundingBoxOnDemand();i&&A.union(i)}})),A.isEmpty()?null:A},sy.prototype.isLoading=function(){return this.loading},sy.prototype.getBoundingBoxForUsedComponent=function(){var A=this.manager,e=new aA;return A.traverseModels((function(t){var i=t.getLoadedUserIdsObject();i&&e.union(A.getBoundingBoxByIds(i))})),e.isEmpty()?null:e};var ly=function(A,e){vc.UseWorker&&mh.isSupportWorker()&&(this.websocketWorker=new Worker("src/worker/WebsocketWorker.js"),this.prepareDataWorkers=new Worker("src/worker/PrepareDataWorker.js")),mh.isMobileDevice()&&(vc.maxObjectNumInPool=6e3,vc.maxDrawCacheNum=4e3),this.scene=new oy(this),this.filter=A,this.crossOrigin=!0,this.models={},this.viewerImpl=e,this.materialPool=null,this.occlusionCamera=null,this.containsCamera=!1,this.highPriorityCategories={inner:{},outer:{}},this.octantToObjectMap={},this.instanceGeometries={},this.sceneState=new ny(this),this.modelState=new ny(this),this.filter.setSceneStateHelper(this.sceneState),this.rotation=new f,this.boundingBox=new aA,this.explosionList={},this.IBLMaterial=!1,this.clippingCaps=!1,this.blinkStartTime=null,this.blinkEnabled=!1,this.blinkIntervalTime=600,this.blinkPermited=!1,this.defaultBlinkColor=(new LA).setHex(3330982),this.defaultBlinkAlpha=1,this.blinkColor=new p(this.defaultBlinkColor.r,this.defaultBlinkColor.g,this.defaultBlinkColor.b,this.defaultBlinkAlpha),this.selectPriority=!0,this.materialOverrideSet=null,this.plugins=[],this.cameraFov=0,this.cameraPosition=new y,this.domElementWidth=1,this.transformComponent={}};Object.assign(ly.prototype,Ld.prototype),ly.prototype.destroy=function(){for(var A in this.removeAllEventListener(),this.models)this.models[A].destroy();this.models=null,this.octantToObjectMap=null,this.materialPool&&(this.materialPool.destroy(),this.materialPool=null),this.occlusionCamera&&(this.occlusionCamera=null);for(var e=0,t=this.plugins.length;t>e;e+=1)this.plugins[e].destroy();this.plugins=null,this.loadOnDemandDirector&&(this.loadOnDemandDirector.destroy(),this.loadOnDemandDirector=null),this.highPriorityCategories=null,this.rotation=null,this.boundingBox=null,this.scene.destroy(),this.scene=null,this.filter=null,this.sceneState.destroy(),this.sceneState=null,this.modelState.destroy(),this.modelState=null,this.blinkStartTime=null,this.defaultBlinkColor=null,this.blinkColor=null,this.floorExplosionList=null,this.explosionTranslation=null},ly.prototype.registerPlugin=function(A){this.plugins.push(A)},ly.prototype.removeAllEventListener=function(){this._listeners=void 0},ly.prototype.prepareCapScene=function(){this.capsScene?this.clippingCaps||(this.initCapPlane(),this.initCapBox()):(this.capsScene=new oy,this.clippingCaps||(this.initCapPlane(),this.initCapBox()),this.scene.createCapStencilMaterials())},ly.prototype.initCapPlane=function(){var A=this.scene.getFillClipPlane().initCapsPlane();this.capsScene.add(A.planeMesh),this.capsScene.add(A.lineMesh),this.clippingCaps=!0},ly.prototype.initCapBox=function(){var A=this.scene.getClipPlanes().initCapsBox();A.material.needsUpdate=!0,A.visible=!0,this.capsScene.add(A),this.clippingCaps=!0},ly.prototype.getAllComponents=function(){return this.scene.pool._pool},ly.prototype.getAllComponentsKey=function(){var A=[];for(var e in this.models)if(this.models.hasOwnProperty(e)){var t=this.models[e];if(t){var i=t.getComponentlist();A=A.concat(i)}}return A},ly.prototype.getComponentsKeyByModelKey=function(A){var e=[];if(this.models.hasOwnProperty(A)){var t=this.models[A];if(t)e=t.getComponentlist()}return e},ly.prototype.getComponent=function(A){for(var e in this.models)if(this.models.hasOwnProperty(e)){var t=this.models[e];if(t.isLoaded()&&t.getComponentInfo(A)){var i=t.getComponentInfo(A);if(i)return i}}for(var o=0,n=this.plugins.length;n>o;o+=1)if(this.plugins[o].getNodeInfosByUserId){var r=this.plugins[o].getNodeInfosByUserId(A);if(r)return r}},ly.prototype.getStorage=function(){return this.storage},ly.prototype.updateTransformComponentList=function(A){this.transformComponent[A]=!0},ly.prototype._updateOcclusionCamera=function(A){var e=A.near,t=A.distanceFromWorldToDrawing(this.getMatrixWorldGlobal(),vc.OcclusionDistanceToCamera);this.occlusionCamera?this.occlusionCamera.copy(A):this.occlusionCamera=A.clone(),this.occlusionCamera.setNearFar(e,t),this.occlusionCamera.updateMVP()},ly.prototype._clearMaterialPool=function(){this.materialPool&&this.materialPool.clear()},ly.prototype.acquireMaterial=function(){return this.materialPool?this.materialPool.acquire():null},ly.prototype.getObjectPool=function(){return this.scene.getObjectPool()},ly.prototype.getFrustumFromOcclusionCamera=function(){return this.occlusionCamera.getFrustum(!1)},ly.prototype.getOcclusionCamera=function(){return this.occlusionCamera},ly.prototype.prepareScene=function(A,e){var t=this.models;for(var i in vc.MergeComponent||(this.clearPool(),this.clearObjectRangeFromOctantMap()),vc.OcclusionTranslucentEnabled&&(null===this.materialPool&&(this.materialPool=new qC,this.materialPool.init(ay,50)),this._clearMaterialPool(),this._updateOcclusionCamera(A)),t)if(t.hasOwnProperty(i)){var o=t[i];!vc.RendererWhenLoad&&!o.isLoaded()||o.isEmptyScene()||o.prepare(A,e)}this.dealStateChanged()},ly.prototype.clearPool=function(){this.scene.getObjectPool().clear()},ly.prototype.clearObjectRangeFromOctantMap=function(){this.octantToObjectMap&&this.octantToObjectMap.pool&&(this.octantToObjectMap.pool={})},ly.prototype.setDrawableModel=function(A){this.isDrawableModel=A},ly.prototype.isDrawable=function(){return this.isDrawableModel},ly.prototype.load=function(A,e,t){var i=this.models,o=i[A.modelKey],n=this;if(this.setDrawableModel(!1),void 0!==o)return this.setDrawableModel(!0),o.isVisible()||(o.setVisible(!0),o.dispatchEventEx({type:Rc.ON_LOAD_COMPLETE})),o;var r=[];for(var a in i)i.hasOwnProperty(a)&&r.push(i[a].index);r.sort();for(var s=0;r.length>s&&r[s]===s;s+=1);return o=new("GIS"===A.type?PC:TC)(this,A,(function(e,t){if(vc.UseWorker){if(n.websocketWorker&&n.prepareDataWorkers){var i=JSON.parse(window.localStorage.getItem("bos_IndexedDB"));i||(i={version:1}),window.localStorage.setItem("bos_IndexedDB",JSON.stringify(i));var r=i.version;n.websocketWorker.postMessage({type:"INITIALIZE_DATABASE",data:{modelKey:o.modelKey,dbName:o.projectKey,version:r}}),n.websocketWorker.onmessage=o.onWSWorkerMessage,n.prepareDataWorkers.postMessage({type:"INITIALIZE_DATABASE",data:{modelKey:o.modelKey,dbName:o.projectKey,version:r}}),n.prepareDataWorkers.onmessage=o.onPDWorkerMessage}}else e.load(A.notifyProgress)}),t),this.filter.addModel(o.modelKey),this.models[A.modelKey]=o,o},ly.prototype.loadTiles=function(A,e,t){var i=this.models,o=i[A.modelKey],n=this;if(void 0!==o)return o.isVisible()||(o.setVisible(!0),o.dispatchEventEx({type:Rc.ON_LOAD_COMPLETE})),o;var r=[];for(var a in i)i.hasOwnProperty(a)&&r.push(i[a].index);r.sort();for(var s=0;r.length>s&&r[s]===s;s+=1);return o=new PC(this,A,(function(e,t){if(vc.UseWorker){if(n.websocketWorker&&n.prepareDataWorkers){var i=JSON.parse(window.localStorage.getItem("bos_IndexedDB"));i||(i={version:1}),window.localStorage.setItem("bos_IndexedDB",JSON.stringify(i));var r=i.version;n.websocketWorker.postMessage({type:"INITIALIZE_DATABASE",data:{modelKey:o.modelKey,dbName:o.projectKey,version:r}}),n.websocketWorker.onmessage=o.onWSWorkerMessage,n.prepareDataWorkers.postMessage({type:"INITIALIZE_DATABASE",data:{modelKey:o.modelKey,dbName:o.projectKey,version:r}}),n.prepareDataWorkers.onmessage=o.onPDWorkerMessage}}else e.load(A.notifyProgress)}),t),this.models[A.modelKey]=o,o},ly.prototype.loadModels=function(A){var e=this.models[A.modelKey],t=this;return void 0!==e?(e.isVisible()||(e.setVisible(!0),e.dispatchEventEx({type:Rc.ON_LOAD_COMPLETE})),e):(e=new TC(this,A,(function(){if(vc.UseWorker){if(t.websocketWorker&&t.prepareDataWorkers){var i=JSON.parse(window.localStorage.getItem("bos_IndexedDB"));i||(i={version:1}),window.localStorage.setItem("bos_IndexedDB",JSON.stringify(i));var o=i.version;t.websocketWorker.postMessage({type:"INITIALIZE_DATABASE",data:{modelKey:e.modelKey,dbName:e.projectKey,version:o}}),t.websocketWorker.onmessage=e.onWSWorkerMessage,t.prepareDataWorkers.postMessage({type:"INITIALIZE_DATABASE",data:{modelKey:e.modelKey,dbName:e.projectKey,version:o}}),t.prepareDataWorkers.onmessage=e.onPDWorkerMessage}}else e.load(A.notifyProgress)})),this.models[A.modelKey]=e,e)},ly.prototype.unload=function(A){var e=this.models[A];return!!e&&(e.destroy(),delete this.models[A],this.filter.removeModel(A),this.filter.reinitFilterManager(this.getNodeInfos()),this.updateScene(),this.updateFilterManager(),this.filter.getObjectInfoManager().calculateVisibleComponentsBbox(),!0)},ly.prototype.unloadAll=function(){for(var A=this.getModelKeys(),e=0,t=A.length;t>e;e+=1)this.unload(A[e]);this.clearPool(),this.models={}},ly.prototype.showModel=function(A){var e=this.models[A];return!!e&&(e.setVisible(!0),!0)},ly.prototype.hideModel=function(A){var e=this.models[A];return!!e&&(e.setVisible(!1),!0)},ly.prototype.getModelKeys=function(){var A=this.models,e=[];for(var t in A)A.hasOwnProperty(t)&&e.push(t);return e},ly.prototype.updateScene=function(){this.updateSceneBoundingBox()},ly.prototype.updateSceneBoundingBox=function(){var A=this.models,e=this.boundingBox;for(var t in e.makeEmpty(),A)if(A.hasOwnProperty(t)){var i=A[t];if(!i.isEmptyScene()){var o=i.getBoundingBoxWorld();if(!o||o.isEmpty())continue;e.isEmpty()?e.copy(o):(e.expandByPoint(o.min),e.expandByPoint(o.max))}}for(var n=0,r=this.plugins.length;r>n;n+=1){var a=this.plugins[n];if("function"==typeof a.getBoundingBoxWorld){var s=a.getBoundingBoxWorld();s&&e.union(s)}}this.scene.setBoundingBoxWorld(e)},ly.prototype.parseSceneRootNode=function(A){this.scene.parseRootNode(A),this.updateSceneBoundingBox()},ly.prototype.updateSceneRootMatrix=function(){var A=!1,e=new M,t=new M,i=new f,o=this.models;for(var n in this.models)if(o.hasOwnProperty(n)){var r=o[n];if(!r.isEmptyScene()){i.copy(r.getTransforms().rotation),e.copy(r.getTransforms().transformMatrix),A=r.getTransforms().transformed;break}}if(this.scene.setTransformMatrixGlobal(e),A)t.copy(e);else{var a=new y(1,1,1),s=vc.SceneSize,l=this.boundingBox.getSize(new y),c=Math.max(l.x,l.y,l.z);a.multiplyScalar(s/c),t.makeRotationFromQuaternion(i),t.scale(a)}this.scene.updateWorldMatrixByMatrix(t)},ly.prototype.updateSceneRenderable=function(){var A=this.models,e=vc.maxObjectNumInPool,t=[],i=0;for(var o in A){if(A.hasOwnProperty(o))(a=A[o]).isEmptyScene()||(i+=a.model.getStatistics().renderableTotalForPool,t.push(o))}for(var n=0,r=t.length;r>n;n+=1){var a=A[o=t[n]],s=Math.floor(a.getStatistics().renderableTotalForPool/i*e);s>a.getStatistics().renderableTotalForPool&&(s=a.getStatistics().renderableTotalForPool),a.setRenderableCount(s)}},ly.prototype.updateOctreeNode=function(){var A=this.models;for(var e in this.models)if(A.hasOwnProperty(e)){var t=A[e];t.isLoaded()&&!t.isEmptyScene()&&t.updateOctreeNode(!0)}},ly.prototype.updateMaterials=function(){var A=this.models;for(var e in this.models)if(A.hasOwnProperty(e)){var t=A[e];t.isLoaded()&&!t.isEmptyScene()&&t.materialManager.updateMaterials(t)}},ly.prototype.updateMaterialsValue=function(A,e){var t=this.models;for(var i in this.models)if(t.hasOwnProperty(i)){var o=t[i];o.isLoaded()&&!o.isEmptyScene()&&o.materialManager.updateMaterialsValue(o,A,e)}this.materialOverrideSet&&this.materialOverrideSet.updateMaterialsValue(A,e)},ly.prototype.enableColorWithoutLight=function(A){var e=this.models;for(var t in this.models)if(e.hasOwnProperty(t)){var i=e[t];i.isLoaded()&&i.isEmptyScene()}},ly.prototype.switchNewStyleMaterial=function(A){var e=this.models;for(var t in this.models)if(e.hasOwnProperty(t)){var i=e[t];i.isLoaded()&&!i.isEmptyScene()&&i.materialManager.switchNewStyleMaterial(i,A)}},ly.prototype.changeAllMaterials=function(A){if(this.IBLMaterial!==A){var e=this.models;for(var t in this.models)if(e.hasOwnProperty(t)){var i=e[t];i.isEmptyScene()||i.materialManager.changeAllMaterials(i,A)}this.IBLMaterial=A}},ly.prototype.setCrossOrigin=function(A){this.crossOrigin=A},ly.prototype.getMatrixWorldGlobal=function(){return this.scene.getMatrixWorldGlobal()},ly.prototype.hasModel=function(){var A=this.models;for(var e in A){if(A.hasOwnProperty(e))if(A[e].isLoaded())return!0}return!1},ly.prototype.isEmpty=function(){if(this.hasModel())return!1;for(var A=!1,e=0,t=this.plugins.length;t>e;e+=1){var i=this.plugins[e];if("function"==typeof i.isEmpty&&!i.isEmpty()){A=!0;break}}return!A},ly.prototype.hasModelDataReady=function(){var A=this.models,e=!1;for(var t in A){if(A.hasOwnProperty(t))if(e=!0,!A[t].isDataReady())return!1}return e},ly.prototype.isLayerData=function(){var A=this.models;for(var e in A){if(A.hasOwnProperty(e))if(A[e].isLayerData())return!0}return!1},ly.prototype.getModel=function(A){var e=this.models[A];return e||null},ly.prototype.getFirstModel=function(){var A=Object.keys(this.models)[0];return this.models[A]},ly.prototype.showOctreeBox=function(A){vc.ShowOctant||this.scene.removeGroupByName(gp.OCTREENODE)},ly.prototype.setCategoriesToHighPriority=function(A,e){var t=A.length;if(t>=1)for(var i=this.highPriorityCategories[e]={},o=0;t>o;o+=1)i[A[o]]=!0},ly.prototype.getCategoriesFromHighPriority=function(A){return this.highPriorityCategories[A]},ly.prototype.clearCategoriesFromHighPriority=function(A){this.highPriorityCategories[A]={}},ly.prototype.clearAllCategoriesFromHighPriority=function(){this.clearCategoriesFromHighPriority("inner"),this.clearCategoriesFromHighPriority("outer")},ly.prototype.calculateCameraModelRelation=function(A){var e=!1,t=this.models;for(var i in t)if(t.hasOwnProperty(i)){var o=t[i];o&&o.isLoaded()&&!o.isEmptyScene()&&(o.calculateCameraModelRelation(A),e=e||o.containsCamera)}this.containsCamera=e},ly.prototype.getCameraNameList=function(){var A=this.models,e=[];for(var t in A)if(A.hasOwnProperty(t)){var i=A[t];i.isEmptyScene()||(e=e.concat(i.getCameraNameList()))}return e},ly.prototype.getCamera=function(A){var e=this.models,t=null;for(var i in e)if(e.hasOwnProperty(i)){var o=e[i];if(!o.isEmptyScene()&&(t=o.getCamera(A)))break}return t},ly.prototype.getNumOfElements=function(){var A=this.models,e=0;for(var t in this.models)if(A.hasOwnProperty(t)){var i=A[t];i.isEmptyScene()||(e+=i.getStatistics().numOfElements)}return e},ly.prototype.getNumOfRenderables=function(){var A=this.models,e=0;for(var t in this.models)if(A.hasOwnProperty(t)){var i=A[t];i.isEmptyScene()||(e+=i.getStatistics().renderableTotal)}return e},ly.prototype.getNumOfTriangles=function(){var A=this.models,e=0;for(var t in this.models)if(A.hasOwnProperty(t)){var i=A[t];i.isEmptyScene()||(e+=i.getStatistics().numOfTriangles)}return e},ly.prototype.getScene=function(){return this.scene},ly.prototype.getOctreeRoots=function(){var A=this.models,e={};for(var t in A)if(A.hasOwnProperty(t)){var i=A[t];if(i.isLoaded()&&!i.isEmptyScene()){var o=i.getEncodedDatabagId();e[o]=[],i.getModelDescriptor().getOctreeRoots(e[o])}}return e},ly.prototype.getModelSnapshotPhoto=function(){return this.viewerImpl.render(),{imgURL:this.viewerImpl.getRenderer().domElement.toDataURL("image/png"),height:this.viewerImpl.domElement.offsetHeight,width:this.viewerImpl.domElement.offsetWidth}},ly.prototype.addMeshToOctantMap=function(A,e,t){var i=this.octantToObjectMap;i[A]||(i[A]={}),i[A].mesh||(i[A].mesh={}),i[A].mesh[e]||(i[A].mesh[e]=[]),i[A].mesh[e].push(t)},ly.prototype.addNodeInfoToOctantMap=function(A,e,t){var i=this.octantToObjectMap;i[A]||(i[A]={}),i[A].info||(i[A].info={}),i[A].info[e]||(i[A].info[e]=[]),i[A].info[e].push(t)},ly.prototype.removeNodeInfoFromOctantMap=function(A,e){var t=this.octantToObjectMap;if(t[A]&&t[A].info&&t[A].info[e.componentKey])for(var i=t[A].info[e.componentKey],o=i.length-1;o>=0;o-=1)if(e.nodeId===i[o].nodeId){i.splice(o);break}},ly.prototype.clearNodeInfosFromOctantMap=function(A){var e=this.octantToObjectMap;e[A]&&e[A].info&&(e[A]=null)},ly.prototype.removeAllFromOctantMap=function(A){var e=this.octantToObjectMap;e[A]&&delete e[A]},ly.prototype.clearMeshFromOctantMap=function(A){var e=this.octantToObjectMap;e[A]&&e[A].mesh&&delete e[A].mesh},ly.prototype.removeMeshFromOctantMap=function(A,e){var t=this.octantToObjectMap;if(t[A]&&t[A].mesh){var i=0,o=t[A].mesh[e];for(i=o.length-1;i>=0;i-=1)delete o[i];delete t[A].mesh[e]}},ly.prototype.removeBatchedMeshFromOctantMap=function(A,e){var t=this.octantToObjectMap;if(t[A]&&t[A].mesh&&t[A].info){var i=0,o=t[A].info[e];for(i=o.length-1;i>=0;i-=1)o.splice(i);delete t[A].info[e]}},ly.prototype.getOctantMap=function(){return this.octantToObjectMap},ly.prototype.isFilterApplied=function(){return this.filterApplied},ly.prototype.setFilterApplied=function(A){this.filterApplied=A},ly.prototype.applyFilter=function(){for(var A in Bh.time("applyFilter"),this.models){this.models[A].applyFilter()}for(var e=0,t=this.plugins.length;t>e;e+=1)this.plugins[e].applyFilter();this.setFilterApplied(!0),Bh.timeEnd("applyFilter")},ly.prototype.applySelection=function(){for(var A in this.selectPriority=!0,this.models){this.models[A].applySelection()}this.scene.getExtrudeBodyManager().applySelection(this);for(var e=0,t=this.plugins.length;t>e;e+=1)this.plugins[e].applySelection()},ly.prototype.clearSelection=function(){for(var A in this.selectPriority=!0,this.models){this.models[A].clearSelection()}this.scene.getExtrudeBodyManager().clearSelection();for(var e=0,t=this.plugins.length;t>e;e+=1)this.plugins[e].clearSelection()},ly.prototype.applyHover=function(){if(vc.Hover&&!vc.EnableRenderPass)for(var A in this.models){this.models[A].applyHover()}this.scene.getExtrudeBodyManager().applyHover(this);for(var e=0,t=this.plugins.length;t>e;e+=1)this.plugins[e].applyHover()},ly.prototype.clearHover=function(){if(vc.Hover&&!vc.EnableRenderPass)for(var A in this.models){this.models[A].clearHover()}this.scene.getExtrudeBodyManager().clearHover();for(var e=0,t=this.plugins.length;t>e;e+=1)this.plugins[e].clearHover()},ly.prototype.chooseRendering=function(A){},ly.prototype.isUserIdExist=function(A){var e=!1;for(var t in this.models){if(this.models.hasOwnProperty(t))if(this.models[t].getModelDescriptor().isUserIdExist(A)){e=!0;break}}for(var i=0,o=this.plugins.length;o>i;i+=1)if(this.plugins[i].isUserIdExist&&this.plugins[i].isUserIdExist(A)){e=!0;break}return e},ly.prototype.getNodeInfosByUserId=function(A){var e=[];for(var t in this.models){var i=this.models[t];if(i&&i.isLoaded()){var o=this.models[t].getModelDescriptor().getNodeInfosByUserId(A);o&&(e=e.concat(o))}}for(var n=0,r=this.plugins.length;r>n;n+=1)if(this.plugins[n].getNodeInfosByUserId){var a=this.plugins[n].getNodeInfosByUserId(A);a&&(e=e.concat(a))}return e.length?e:null},ly.prototype.getNodeInfos=function(){var A={};for(var e in this.models)if(this.models[e].isLoaded()){var t=this.models[e].getModelDescriptor().getAllNodeInfos();t&&(A[e]=t)}var i=this.getNodeInfosInPlugins();return Object.assign(A,i),A},ly.prototype.getNodeInfosInPlugins=function(){for(var A={},e=0,t=this.plugins.length;t>e;e+=1)this.plugins[e].getAllNodeInfos&&this.plugins[e].getAllNodeInfos(A);return A},ly.prototype.getMaterialByNodeId=function(A,e,t){var i=this.models[A];if(!i)return null;for(var o=i.getModelDescriptor().getNodeInfosByUserId(e),n=-1,r=0,a=o.length;a>r;r+=1)if(o[r].nodeId===t){n=r;break}return-1!==n?i.getMaterialByMaterialId(o[n].materialId):null},ly.prototype.getNodeInfoByNodeId=function(A,e,t){var i=this.models[A];if(!i)return null;for(var o=i.getModelDescriptor().getNodeInfosByUserId(e),n=-1,r=0,a=o.length;a>r;r+=1)if(o[r].nodeId===t){n=r;break}return-1!==n?o[n]:null},ly.prototype.getComponentInfoByUserId=function(A){var e=this.getNodeInfosByUserId(A);if(e&&e.length>0){for(var t=new aA,i=[],o=0,n=e.length;n>o;o+=1)t.union(e[o].boundingBox),-1===i.indexOf(e[o].materialId)&&i.push(e[o].materialId);return{userId:A,state:0,materials:i,boundingBox:t,userData:e[0].userData}}return null},ly.prototype.getBoundingBoxByIds=function(A){var e=this.getScene(),t=new aA;for(var i in A)if(!this.isHiddenUserId(i)){Array.isArray(A)&&(i=A[i]);var o=this.getComponentInfoByUserId(i);if(o)t.union(o.boundingBox);else{var n=e.getExtrudeBodyManager().getNode(i);if(n){var r=n.geometry.boundingBox.clone();n.matrix&&r.applyMatrix4(n.matrix),t.union(r)}}}return t},ly.prototype.createMaterialOverrideSet=function(A,e){this.materialOverrideSet=new MaterialOverriderSet(A,e),vc.EnableTextureMapping=!0},ly.prototype.getMaterialOverrideSet=function(){return this.materialOverrideSet},ly.prototype.getOverrideMaterialByNodeInfo=function(A){return this.materialOverrideSet?this.materialOverrideSet.getOverrideMaterialByNodeInfo(A):null},ly.prototype.getOverrideMaterialByName=function(A){return this.materialOverrideSet?this.materialOverrideSet.getOverrideMaterialByName(A):null},ly.prototype.loadOverrideMaterialsByDemand=function(A,e){if(this.materialOverrideSet){var t=this.getConditions();this.materialOverrideSet.loadByDemand(t,A,e)}else e&&e()},ly.prototype.getConditions=function(){var A={},e={},t={};for(var i in this.models){var o=this.models[i].getModelDescriptor().getAllNodeInfos();if(o)for(var i in o)if(o.hasOwnProperty(i))for(var n=0,r=o[i].length;r>n;n+=1){var a=o[i][n].userData;e[o[i][n].userId]=!0,t[a.systemTypeId]=!0,A[a.familyId]=!0}}return{familyIds:A,elementIds:e,systemTypeIds:t}},ly.prototype.isHiddenUserId=function(A){var e=!1;for(var t in this.models){if(this.models.hasOwnProperty(t))if((t=this.models[t]).isHiddenUserId(A)){e=!0;break}}return e},ly.prototype.isHiddenSourceObjectUserId=function(A){return!!this.sourceObjectManager&&this.sourceObjectManager.isHidden(A)},ly.prototype.hasHiddenSourceObjectUserId=function(){return!!this.sourceObjectManager&&this.sourceObjectManager.hasHidden()},ly.prototype.updateMeshNodes=function(){for(var A in this.models){if(this.models.hasOwnProperty(A))(A=this.models[A]).updateMeshNodes()}},ly.prototype.getMinDistanceObjects=function(A,e){var t=this,i={};for(var o in this.models)if(this.models.hasOwnProperty(o)){(o=this.models[o]).minDistanceObjects={};var n=o.getMeshesByUserIds(A),r=o.getMeshesByUserIds(e);if(n&&n.length>0&&(i[A]=n),r&&r.length>0&&(i[e]=r),i[A]&&i[e])return i}var a=null,s=null,l=null,c=null,h=null,d=function(){var i={},o=function(A,e,t){var o={};o.mesh=A;var n=new M;t?n.multiplyMatrices(t,A.matrix):n=A.matrix,o.matrix=n;var r=A.geometry.boundingBox;r||(A.geometry.computeBoundingBox(),r=o.mesh.geometry.boundingBox);var a=r.clone().applyMatrix4(n);o.boundingBox=a,i[e]&&(i[e]=[]),i[e].push(o)};if(!(a=t.scene.getGroup("ExternalComponentManager")))return{v:void 0};for(l=0,c=(s=a.children).length;c>l;l+=1)(h=s[l]).name!==A&&h.name!==e||(uh.isGroupObject(h)?h.traverseVisible((function(A){uh.isMeshObject(A)&&o(A,h.name,h.matrix)})):o(h,h.name));return{v:i}}();return d&&d.v&&(d.v[A]&&d.v[A].length>0&&(i[A]=d.v[A]),d.v[e]&&d.v[e].length>0&&(i[e]=d.v[e]),i[A]&&i[e])||i[A]&&i[e]?i:null},ly.prototype.getMeshByUserId=function(A){for(var e in this.models)if(this.models.hasOwnProperty(e)){var t=(e=this.models[e]).getMeshesByUserIds(A);if(t)return t}return null},ly.prototype.adjustVisibility=function(A){for(var e in this.models)this.models[e]&&this.models[e]._getHandler().adjustVisibility(A);for(var t=0,i=this.plugins.length;i>t;t+=1){var o=this.plugins[t];o.adjustVisibility&&"function"==typeof o.adjustVisibility&&o.adjustVisibility(A)}this.otherAdjustVisibility&&this.otherAdjustVisibility(A)},ly.prototype.changeVisibilityOfSelectedObjects=function(A){for(var e in this.models)this.models[e]&&this.models[e]._getHandler().changeVisibilityOfSelectedObjects(A);for(var t=0,i=this.plugins.length;i>t;t+=1){var o=this.plugins[t];o.changeVisibilityOfSelectedObjects&&"function"==typeof o.changeVisibilityOfSelectedObjects&&o.changeVisibilityOfSelectedObjects(A)}},ly.prototype.changeVisibilityOfNonSelectedObjects=function(A){for(var e in this.models)this.models[e]&&this.models[e]._getHandler().changeVisibilityOfNonSelectedObjects(A);this.otherAdjustVisibility&&this.otherAdjustVisibility(A);for(var t=0,i=this.plugins.length;i>t;t+=1){var o=this.plugins[t];o.changeVisibilityOfNonSelectedObjects&&"function"==typeof o.changeVisibilityOfNonSelectedObjects&&o.changeVisibilityOfNonSelectedObjects(A)}},ly.prototype.adjustInstanceVisibility=function(A){for(var e in this.models)this.models[e]&&this.models[e].merged&&this.models[e]._getHandler().adjustInstanceVisibility(A)},ly.prototype.adjustVisibilityOfObjectsWithoutOutline=function(A){for(var e in this.models)if(this.models[e]){var t=this.models[e].axisNetManager;t&&t.visibleByUser&&(A?this.models[e].axisNetManager.privateShow():this.models[e].axisNetManager.privateHide())}for(var i=0,o=this.plugins.length;o>i;i+=1){var n=this.plugins[i];n.adjustVisibilityOfObjectsWithoutOutline&&"function"==typeof n.adjustVisibilityOfObjectsWithoutOutline&&n.adjustVisibilityOfObjectsWithoutOutline(A)}var r;this.scene.hasClipPlanes()&&((r=this.scene.getClipPlanes()).isEnabled()&&(!1===A&&r.visible?(r.visible=!1,r._hideByModelManager=!0):!0===A&&r._hideByModelManager&&(r.visible=!0,delete r._hideByModelManager)));this.scene.hasFillClipPlanes()&&((r=this.scene.getFillClipPlane()).isEnabled()&&(!1===A&&r.visible?(r.visible=!1,r._hideByModelManager=!0):!0===A&&r._hideByModelManager&&(r.visible=!0,delete r._hideByModelManager)));this.scene.receivingPlane&&(!1===A&&this.scene.receivingPlane.visible?(this.scene.receivingPlane.visible=!1,this.scene.receivingPlane._hideByModelManager=!0):!0===A&&this.scene.receivingPlane._hideByModelManager&&(this.scene.receivingPlane.visible=!0,delete this.scene.receivingPlane._hideByModelManager)),this.otherAdjustVisibility&&this.otherAdjustVisibility(A);for(var a=this.scene.children,s=(i=0,a.length);s>i;i+=1){var l=a[i];l!==this.scene.objectGroups&&!0!==l.isLight&&!0===l.isObject3D&&(l.visible=A)}},ly.prototype.changeInstanceVisibilityOfSelectedObjects=function(A){for(var e in this.models)this.models[e]&&this.models[e].merged&&this.models[e]._getHandler().changeInstanceVisibilityOfSelectedObjects(A)},ly.prototype.changeInstanceVisibilityOfNonSelectedObjects=function(A){for(var e in this.models)this.models[e]&&this.models[e].merged&&this.models[e]._getHandler().changeInstanceVisibilityOfNonSelectedObjects(A)},ly.prototype.restoreVisibilityOfObjects=function(){for(var A in this.models)this.models[A]&&this.models[A]._getHandler().restoreVisibilityOfObjects();this.otherAdjustVisibility&&this.otherAdjustVisibility(!0)},ly.prototype.getComponentKeysByTypeFromList=function(A,e){var t=[];for(var i in this.models){if(this.models.hasOwnProperty(i))if((i=this.models[i]).isLoaded()){var o=i.getComponentKeysByTypeFromList(A,e);o&&(t=t.concat(o))}}return t},ly.prototype.getComponentKeysByType=function(A){var e=[];for(var t in this.models){if(this.models.hasOwnProperty(t))if((t=this.models[t]).isLoaded()){var i=t.getComponentKeysByType(A);i&&(e=e.concat(i))}}return e},ly.prototype.getComponentKeysByName=function(A){var e=[];for(var t in this.models)if(this.models.hasOwnProperty(t)){var i=(t=this.models[t]).getComponentKeysByName(A);i&&(e=e.concat(i))}return e},ly.prototype.getComponentKeysByProperty=function(A,e){var t=[];for(var i in this.models)if(this.models.hasOwnProperty(i)){var o=(i=this.models[i]).getComponentKeysByProperty(A,e);o&&(t=t.concat(o))}return t},ly.prototype.getBlinkMaterials=function(){var A=[];for(var e in this.models)this.models[e]&&this.models[e]._getHandler().getBlinkMaterials&&(A=A.concat(this.models[e]._getHandler().getBlinkMaterials()));return A},ly.prototype.resetBlinkMaterial=function(){for(var A=this.getBlinkMaterials(),e=0,t=A.length;t>e;e+=1)A[e].resetBlinkUniformValue()},ly.prototype.updateBlinkMaterial=function(){if(null!==this.blinkStartTime){if(Date.now()-this.blinkStartTime>=this.blinkIntervalTime){this.blinkStartTime=Date.now(),this.indexSwitch=!this.indexSwitch;for(var A=this.indexSwitch?Yc.BLINK:Yc.NONE,e=this.getBlinkMaterials(),t=0,i=e.length;i>t;t+=1)e[t].updateBlinkUniformValue(A,this.blinkColor)}}else this.blinkStartTime=Date.now()},ly.prototype.getBlinkColor=function(){return this.blinkColor},ly.prototype.setBlinkColor=function(A,e){if(A){var t=uh.hexToRgb(A);this.blinkColor.fromArray([t.r,t.g,t.b,e||1])}else this.blinkColor.set(this.defaultBlinkColor.r,this.defaultBlinkColor.g,this.defaultBlinkColor.b,this.defaultBlinkAlpha)},ly.prototype.setBlinkIntervalTime=function(A){this.blinkIntervalTime>0&&(this.blinkIntervalTime=A)},ly.prototype.enableBlink=function(A){this.blinkEnabled=A,A?null===this.blinkStartTime&&(this.blinkStartTime=Date.now()):(this.blinkStartTime=null,this.resetBlinkMaterial()),this.applyBlink()},ly.prototype.getBlinkEnabled=function(){return!this.isBlinkPermited()&&this.blinkEnabled},ly.prototype.getBlinkComponentsIdMap=function(){return this.isBlinkPermited()?null:this.sceneState.getBlinkComponentsIdMap()},ly.prototype.applyBlink=function(){if(!this.isBlinkPermited())for(var A in this.selectPriority=!1,this.models){this.models[A].applyBlink()}},ly.prototype.clearBlink=function(){if(!this.isBlinkPermited())for(var A in this.selectPriority=!1,this.models){this.models[A].clearBlink()}},ly.prototype.permitBlink=function(A){this.blinkPermited=A},ly.prototype.isBlinkPermited=function(){return this.blinkPermited},ly.prototype.isSelectPriority=function(){return this.selectPriority},ly.prototype.getSceneState=function(){return this.sceneState},ly.prototype.getModelSceneState=function(){return this.modelState},ly.prototype.disposeBufferAfterVbo=function(){if(vc.EnableDisposeBufferAfterVbo)for(var A in this.models){this.models[A].disposeBufferAfterVbo()}},ly.prototype.getSourceObjectManager=function(){return this.sourceObjectManager||(this.sourceObjectManager=new ry),this.sourceObjectManager},ly.prototype.isHiddenUserId=function(A){return!!this.sourceObjectManager&&this.sourceObjectManager.isHidden(A)},ly.prototype.hasHiddenUserId=function(){return!!this.sourceObjectManager&&this.sourceObjectManager.hasHidden()},ly.prototype.traverseModels=function(A,e){for(var t in this.models){var i=this.models[t];if(e&&e(i))break;A&&A(i)}},ly.prototype.traverseLoadedModels=function(A){for(var e in this.models){var t=this.models[e];t&&t.isLoaded()&&A(t)}},ly.prototype.getStatisticsInfo=function(){var A=0,e=0,t=0,i=0;for(var o in this.models){var n=this.models[o];if(n&&n.isLoaded()){var r=n.getTrianglesCount();A+=r.positionsCount,e+=r.trianglesCount,t+=r.realPositionCount,i+=r.realTrianglesCount}}return{positionsCount:A,trianglesCount:e,realPositionCount:t,realTrianglesCount:i,componentCount:this.getAllComponentsKey().length}},ly.prototype.dealStateChanged=function(){this.hasModelDataReady()&&(this.isRenderStateChanged()||this.filter.isStateChanged())&&(this.isRenderStateChanged()&&this.setRenderStateChanged(!1),this.filter.isStateChanged()&&this.filter.disableStateChanged(),this.applyFilter())},ly.prototype.setRenderStateChanged=function(A){this._renderStateChanged=A},ly.prototype.isRenderStateChanged=function(){return this._renderStateChanged},ly.prototype.hasLoadOnDemandDirector=function(){return!!this.loadOnDemandDirector},ly.prototype.getLoadOnDemandDirector=function(){return this.loadOnDemandDirector||(this.loadOnDemandDirector=new sy(this)),this.loadOnDemandDirector},ly.prototype.checkLayerDataLoading=function(){return!!(this.isLayerData()&&this.hasLoadOnDemandDirector()&&this.getLoadOnDemandDirector().isLoading())&&(this.filter.isStateChanged()&&this.filter.disableStateChanged(),!0)},ly.prototype.updateFilterManager=function(){var A=this.getNodeInfos(),e=this.filter;e.clearFilterManager(),e.initFilterManager(A),e.isStateChanged()&&e.disableStateChanged(),this.updateMeshNodes(),this.applyFilter()},ly.prototype.isDrawingBoardlineEnabled=function(){return!(!vc.DrawingBoardlineEnabled||vc.DrawingStyle!==jc.BOARDLINE&&vc.DrawingStyle!==jc.SHADINGWITHLINE)},ly.prototype.isOnlyWireframe=function(){return vc.DrawingStyle===jc.BOARDLINE},ly.prototype.getExplosionExtent=function(){return this.explosionExtent},ly.prototype.setExplosionExtent=function(A){var e=A-this.explosionExtent;for(var t in this.models)this.models[t]&&this.models[t].explode(e);this.explosionExtent=A},ly.prototype.updateAnimation=function(){var A=this.viewerImpl.clock.getDelta();for(var e in this.models)if(this.models.hasOwnProperty(e)){var t=this.models[e];if(t.hasAnimation&&t.mixer){var i=t.mixer;t.singleStepMode?(i.update(t.sizeOfNextStep),t.sizeOfNextStep=0):i.update(A)}}},ly.prototype.needUpdateAnimation=function(){for(var A in this.models)if(this.models.hasOwnProperty(A)){var e=this.models[A];if(e.hasAnimation&&e.mixer&&e.needUpdate)return!0}return!1},ly.prototype.unloadGeopkOnDemand=function(A,e){var t=this.models;for(var i in t)if(t.hasOwnProperty(i)){var o=t[i];o.isLoaded()&&!o.isEmptyScene()&&o.isLayerData()&&o.unloadGeopkOnDemand(A,e)}},ly.prototype.loadGeopkOnDemand=function(A,e,t,i){this.getLoadOnDemandDirector().loadGeopkOnDemandByConditions(A,e,t,i)},ly.prototype.loadAllGeosOnDemand=function(A,e){var t=this.models;for(var i in t)if(t.hasOwnProperty(i)){var o=t[i];o.isLoaded()&&!o.isEmptyScene()&&o.isLayerData()&&o.loadAllGeosOnDemand(A,e)}},ly.prototype.getBoundingBoxOnDemand=function(){var A=this.models,e=new aA;for(var t in A)if(A.hasOwnProperty(t)){var i=A[t];if(i.isLoaded()&&!i.isEmptyScene()&&i.isLayerData()){var o=i.getUnionBoundingBoxOnDemand();o&&e.union(o)}}return e},ly.prototype.setConditionsOnDemandLoad=function(A){this.conditionsOnDemandLoad=A;var e=this.models;for(var t in e)if(e.hasOwnProperty(t)){var i=e[t];i.isLoaded()&&!i.isEmptyScene()&&i.isLayerData()&&i.setConditionsChangedOnDemand(!0)}},ly.prototype.getConditionsOnDemandLoad=function(){return this.conditionsOnDemandLoad},ly.prototype.componentsExplosion=function(A){var e=this.models;for(var t in e){if(e.hasOwnProperty(t))e[t].componentsExplosion(A)}},ly.prototype.closeComponentsExplosion=function(A){var e=this.models;for(var t in e){if(e.hasOwnProperty(t))e[t].closeComponentsExplosion(A)}},ly.prototype.canFloorExplosion=function(){var A=this.models,e=!1;for(var t in A){if(A.hasOwnProperty(t))A[t].floorManager&&(e=!0)}return e},ly.prototype.floorExplosion=function(A){var e=this.models,t=!1;for(var i in e){if(e.hasOwnProperty(i))e[i].floorExplosion(A)&&(this.updateSceneBoundingBox(),t=!0)}return t},ly.prototype.closeFloorExplosion=function(){var A=this.models;for(var e in A){if(A.hasOwnProperty(e))A[e].closeFloorExplosion()}},ly.prototype.checkTilesDataChanged=function(A,e){if(!this.cameraPosition.equals(A.position)||this.cameraFov!==A.fov||this.domElementWidth!==e.domElement.width){this.cameraFov=A.fov||45,this.cameraPosition=A.position.clone()||new y,this.domElementWidth=e.domElement.width||1e3;var t=!1,i=this.checkMemory();for(var o in i>vc.MaximumAvailableMemory&&(t=!0),this.models)if(this.models.hasOwnProperty(o)){var n=this.models[o];n.isTilesModel&&n.checkTilesDataChanged(t)}}},ly.prototype.checkMemory=function(){var A=0,e=this.viewerImpl.getRenderer().info;return A+=6*(e.render.triangles||0),A+=1024*(e.memory.textures||0)*1024/4,A+=1024*(e.render.calls||0)/4,A+=1024*(e.memory.geometries||0)/4,A*=1/1048576,A=Math.ceil(A)},ly.prototype.getMeshIdFromOctantMap=function(A){return A.single?A.nodeId:A.instanceOrNot?uh.getCombinedKeyString(A.uv2Info?[A.materialId,A.geometryId,A.uv2Info.byteOffset]:[A.materialId,A.geometryId]):vc.MergeComponent?uh.getCombinedKeyString([A.materialId,A.uv?"1":"0",A.type===$u.EnumNodeItemType.LINE?"lines":"meshes"]):A.nodeId};var cy,hy,dy,py={uniforms:{tDiffuse:{value:null},opacity:{value:1}},vertexShader:["varying vec2 vUv;","void main() {","vUv = uv;","gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );","}"].join("\n"),fragmentShader:["uniform float opacity;","uniform sampler2D tDiffuse;","varying vec2 vUv;","void main() {","vec4 texel = texture2D( tDiffuse, vUv );","gl_FragColor = opacity * texel;","}"].join("\n")};function gy(){this.enabled=!0,this.needsSwap=!0,this.clear=!1,this.renderToScreen=!1}Object.assign(gy.prototype,{setSize:function(){},render:function(){console.error("THREE.Pass: .render() must be implemented in derived pass.")}}),gy.FullScreenQuad=(cy=new Ka(-1,1,1,-1,0,1),hy=new et(2,2),dy=function(A){this._mesh=new Ue(hy,A)},Object.defineProperty(dy.prototype,"material",{get:function(){return this._mesh.material},set:function(A){this._mesh.material=A}}),Object.assign(dy.prototype,{render:function(A){A.render(this._mesh,cy)}}),dy);var uy=function(A,e){gy.call(this),this.textureID=void 0!==e?e:"tDiffuse",A instanceof Pe?(this.uniforms=A.uniforms,this.material=A):A&&(this.uniforms=Ge.clone(A.uniforms),this.material=new Pe({defines:Object.assign({},A.defines),uniforms:this.uniforms,vertexShader:A.vertexShader,fragmentShader:A.fragmentShader})),this.fsQuad=new gy.FullScreenQuad(this.material)};uy.prototype=Object.assign(Object.create(gy.prototype),{constructor:uy,render:function(A,e,t){this.uniforms[this.textureID]&&(this.uniforms[this.textureID].value=t.texture),this.fsQuad.material=this.material,this.renderToScreen?(A.setRenderTarget(null),this.fsQuad.render(A)):(A.setRenderTarget(e),this.clear&&A.clear(A.autoClearColor,A.autoClearDepth,A.autoClearStencil),this.fsQuad.render(A))}});var fy=function(A,e){gy.call(this),this.scene=A,this.camera=e,this.clear=!0,this.needsSwap=!1,this.inverse=!1};fy.prototype=Object.assign(Object.create(gy.prototype),{constructor:fy,render:function(A,e,t){var i=A.getContext(),o=A.state;o.buffers.color.setMask(!1),o.buffers.depth.setMask(!1),o.buffers.color.setLocked(!0),o.buffers.depth.setLocked(!0);var n=null,r=null;this.inverse?(r=0,n=1):(r=1,n=0),o.buffers.stencil.setTest(!0),o.buffers.stencil.setOp(i.REPLACE,i.REPLACE,i.REPLACE),o.buffers.stencil.setFunc(i.ALWAYS,r,4294967295),o.buffers.stencil.setClear(n),o.buffers.stencil.setLocked(!0),A.setRenderTarget(t),this.clear&&A.clear(),A.render(this.scene,this.camera),A.setRenderTarget(e),this.clear&&A.clear(),A.render(this.scene,this.camera),o.buffers.color.setLocked(!1),o.buffers.depth.setLocked(!1),o.buffers.stencil.setLocked(!1),o.buffers.stencil.setFunc(i.EQUAL,1,4294967295),o.buffers.stencil.setOp(i.KEEP,i.KEEP,i.KEEP),o.buffers.stencil.setLocked(!0)}});var my=function(){gy.call(this),this.needsSwap=!1};my.prototype=Object.create(gy.prototype),Object.assign(my.prototype,{render:function(A){A.state.buffers.stencil.setLocked(!1),A.state.buffers.stencil.setTest(!1)}});var Cy=function(A,e){if(this.renderer=A,void 0===e){var t={minFilter:1006,magFilter:1006,format:1023,stencilBuffer:!1},i=A.getSize(new s);this._pixelRatio=A.getPixelRatio(),this._width=i.width,this._height=i.height,(e=new g(this._width*this._pixelRatio,this._height*this._pixelRatio,t)).texture.name="EffectComposer.rt1"}else this._pixelRatio=1,this._width=e.width,this._height=e.height;this.renderTarget1=e,this.renderTarget2=e.clone(),this.renderTarget2.texture.name="EffectComposer.rt2",this.writeBuffer=this.renderTarget1,this.readBuffer=this.renderTarget2,this.renderToScreen=!0,this.passes=[],void 0===py&&console.error("THREE.EffectComposer relies on CopyShader"),void 0===uy&&console.error("THREE.EffectComposer relies on ShaderPass"),this.copyPass=new uy(py),this.clock=new as};Object.assign(Cy.prototype,{swapBuffers:function(){var A=this.readBuffer;this.readBuffer=this.writeBuffer,this.writeBuffer=A},addPass:function(A){this.passes.push(A),A.setSize(this._width*this._pixelRatio,this._height*this._pixelRatio)},insertPass:function(A,e){this.passes.splice(e,0,A)},isLastEnabledPass:function(A){for(var e=A+1;this.passes.length>e;e+=1)if(this.passes[e].enabled)return!1;return!0},render:function(A){void 0===A&&(A=this.clock.getDelta());var e=this.renderer.getRenderTarget(),t=!1,i=null,o=null,n=this.passes.length;for(o=0;n>o;o+=1)if(!1!==(i=this.passes[o]).enabled){if(i.renderToScreen=this.renderToScreen&&this.isLastEnabledPass(o),i.render(this.renderer,this.writeBuffer,this.readBuffer,A,t),i.needsSwap){if(t){var r=this.renderer.getContext(),a=this.renderer.state.buffers.stencil;a.setFunc(r.NOTEQUAL,1,4294967295),this.copyPass.render(this.renderer,this.writeBuffer,this.readBuffer,A),a.setFunc(r.EQUAL,1,4294967295)}this.swapBuffers()}void 0!==fy&&(i instanceof fy?t=!0:i instanceof my&&(t=!1))}this.renderer.setRenderTarget(e)},reset:function(A){if(void 0===A){var e=this.renderer.getSize(new s);this._pixelRatio=this.renderer.getPixelRatio(),this._width=e.width,this._height=e.height,(A=this.renderTarget1.clone()).setSize(this._width*this._pixelRatio,this._height*this._pixelRatio)}this.renderTarget1.dispose(),this.renderTarget2.dispose(),this.renderTarget1=A,this.renderTarget2=A.clone(),this.writeBuffer=this.renderTarget1,this.readBuffer=this.renderTarget2},setSize:function(A,e){this._width=A,this._height=e;var t=this._width*this._pixelRatio,i=this._height*this._pixelRatio;this.renderTarget1.setSize(t,i),this.renderTarget2.setSize(t,i);for(var o=0;this.passes.length>o;o+=1)this.passes[o].setSize(t,i)},setPixelRatio:function(A){this._pixelRatio=A,this.setSize(this._width,this._height)}});var yy=function(){this.enabled=!0,this.needsSwap=!0,this.clear=!1,this.renderToScreen=!1};Object.assign(yy.prototype,{setSize:function(){},render:function(){console.error("THREE.Pass: .render() must be implemented in derived pass.")}}),yy.FullScreenQuad=function(){var A=new Ka(-1,1,1,-1,0,1),e=new et(2,2),t=function(A){this._mesh=new Ue(e,A)};return Object.defineProperty(t.prototype,"material",{get:function(){return this._mesh.material},set:function(A){this._mesh.material=A}}),Object.assign(t.prototype,{render:function(e){e.render(this._mesh,A)}}),t}();var vy={uniforms:{tDiffuse:{value:null},resolution:{value:new s(1/1024,1/512)}},vertexShader:["varying vec2 vUv;","void main() {","vUv = uv;","gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );","}"].join("\n"),fragmentShader:["precision highp float;","","uniform sampler2D tDiffuse;","","uniform vec2 resolution;","","varying vec2 vUv;","","// FXAA 3.11 implementation by NVIDIA, ported to WebGL by Agost Biro (biro@archilogic.com)","","//----------------------------------------------------------------------------------","// File: es3-kepler FXAA assets shaders/FXAA_DefaultES.frag","// SDK Version: v3.00","// Email: gameworks@nvidia.com","// Site: http://developer.nvidia.com/","//","// Copyright (c) 2014-2015, NVIDIA CORPORATION. All rights reserved.","//","// Redistribution and use in source and binary forms, with or without","// modification, are permitted provided that the following conditions","// are met:","// * Redistributions of source code must retain the above copyright","// notice, this list of conditions and the following disclaimer.","// * Redistributions in binary form must reproduce the above copyright","// notice, this list of conditions and the following disclaimer in the","// documentation and/or other materials provided with the distribution.","// * Neither the name of NVIDIA CORPORATION nor the names of its","// contributors may be used to endorse or promote products derived","// from this software without specific prior written permission.","//","// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY","// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE","// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR","// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR","// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,","// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,","// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR","// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY","// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT","// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE","// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.","//","//----------------------------------------------------------------------------------","","#define FXAA_PC 1","#define FXAA_GLSL_100 1","#define FXAA_QUALITY_PRESET 12","","#define FXAA_GREEN_AS_LUMA 1","","/*--------------------------------------------------------------------------*/","#ifndef FXAA_PC_CONSOLE"," //"," // The console algorithm for PC is included"," // for developers targeting really low spec machines."," // Likely better to just run FXAA_PC, and use a really low preset."," //"," #define FXAA_PC_CONSOLE 0","#endif","/*--------------------------------------------------------------------------*/","#ifndef FXAA_GLSL_120"," #define FXAA_GLSL_120 0","#endif","/*--------------------------------------------------------------------------*/","#ifndef FXAA_GLSL_130"," #define FXAA_GLSL_130 0","#endif","/*--------------------------------------------------------------------------*/","#ifndef FXAA_HLSL_3"," #define FXAA_HLSL_3 0","#endif","/*--------------------------------------------------------------------------*/","#ifndef FXAA_HLSL_4"," #define FXAA_HLSL_4 0","#endif","/*--------------------------------------------------------------------------*/","#ifndef FXAA_HLSL_5"," #define FXAA_HLSL_5 0","#endif","/*==========================================================================*/","#ifndef FXAA_GREEN_AS_LUMA"," //"," // For those using non-linear color,"," // and either not able to get luma in alpha, or not wanting to,"," // this enables FXAA to run using green as a proxy for luma."," // So with this enabled, no need to pack luma in alpha."," //"," // This will turn off AA on anything which lacks some amount of green."," // Pure red and blue or combination of only R and B, will get no AA."," //"," // Might want to lower the settings for both,"," // fxaaConsoleEdgeThresholdMin"," // fxaaQualityEdgeThresholdMin"," // In order to insure AA does not get turned off on colors"," // which contain a minor amount of green."," //"," // 1 = On."," // 0 = Off."," //"," #define FXAA_GREEN_AS_LUMA 0","#endif","/*--------------------------------------------------------------------------*/","#ifndef FXAA_EARLY_EXIT"," //"," // Controls algorithm's early exit path."," // On PS3 turning this ON adds 2 cycles to the shader."," // On 360 turning this OFF adds 10ths of a millisecond to the shader."," // Turning this off on console will result in a more blurry image."," // So this defaults to on."," //"," // 1 = On."," // 0 = Off."," //"," #define FXAA_EARLY_EXIT 1","#endif","/*--------------------------------------------------------------------------*/","#ifndef FXAA_DISCARD"," //"," // Only valid for PC OpenGL currently."," // Probably will not work when FXAA_GREEN_AS_LUMA = 1."," //"," // 1 = Use discard on pixels which don't need AA."," // For APIs which enable concurrent TEX+ROP from same surface."," // 0 = Return unchanged color on pixels which don't need AA."," //"," #define FXAA_DISCARD 0","#endif","/*--------------------------------------------------------------------------*/","#ifndef FXAA_FAST_PIXEL_OFFSET"," //"," // Used for GLSL 120 only."," //"," // 1 = GL API supports fast pixel offsets"," // 0 = do not use fast pixel offsets"," //"," #ifdef GL_EXT_gpu_shader4"," #define FXAA_FAST_PIXEL_OFFSET 1"," #endif"," #ifdef GL_NV_gpu_shader5"," #define FXAA_FAST_PIXEL_OFFSET 1"," #endif"," #ifdef GL_ARB_gpu_shader5"," #define FXAA_FAST_PIXEL_OFFSET 1"," #endif"," #ifndef FXAA_FAST_PIXEL_OFFSET"," #define FXAA_FAST_PIXEL_OFFSET 0"," #endif","#endif","/*--------------------------------------------------------------------------*/","#ifndef FXAA_GATHER4_ALPHA"," //"," // 1 = API supports gather4 on alpha channel."," // 0 = API does not support gather4 on alpha channel."," //"," #if (FXAA_HLSL_5 == 1)"," #define FXAA_GATHER4_ALPHA 1"," #endif"," #ifdef GL_ARB_gpu_shader5"," #define FXAA_GATHER4_ALPHA 1"," #endif"," #ifdef GL_NV_gpu_shader5"," #define FXAA_GATHER4_ALPHA 1"," #endif"," #ifndef FXAA_GATHER4_ALPHA"," #define FXAA_GATHER4_ALPHA 0"," #endif","#endif","","","/*============================================================================"," FXAA QUALITY - TUNING KNOBS","------------------------------------------------------------------------------","NOTE the other tuning knobs are now in the shader function inputs!","============================================================================*/","#ifndef FXAA_QUALITY_PRESET"," //"," // Choose the quality preset."," // This needs to be compiled into the shader as it effects code."," // Best option to include multiple presets is to"," // in each shader define the preset, then include this file."," //"," // OPTIONS"," // -----------------------------------------------------------------------"," // 10 to 15 - default medium dither (10=fastest, 15=highest quality)"," // 20 to 29 - less dither, more expensive (20=fastest, 29=highest quality)"," // 39 - no dither, very expensive"," //"," // NOTES"," // -----------------------------------------------------------------------"," // 12 = slightly faster then FXAA 3.9 and higher edge quality (default)"," // 13 = about same speed as FXAA 3.9 and better than 12"," // 23 = closest to FXAA 3.9 visually and performance wise"," // _ = the lowest digit is directly related to performance"," // _ = the highest digit is directly related to style"," //"," #define FXAA_QUALITY_PRESET 12","#endif","","","/*============================================================================",""," FXAA QUALITY - PRESETS","","============================================================================*/","","/*============================================================================"," FXAA QUALITY - MEDIUM DITHER PRESETS","============================================================================*/","#if (FXAA_QUALITY_PRESET == 10)"," #define FXAA_QUALITY_PS 3"," #define FXAA_QUALITY_P0 1.5"," #define FXAA_QUALITY_P1 3.0"," #define FXAA_QUALITY_P2 12.0","#endif","/*--------------------------------------------------------------------------*/","#if (FXAA_QUALITY_PRESET == 11)"," #define FXAA_QUALITY_PS 4"," #define FXAA_QUALITY_P0 1.0"," #define FXAA_QUALITY_P1 1.5"," #define FXAA_QUALITY_P2 3.0"," #define FXAA_QUALITY_P3 12.0","#endif","/*--------------------------------------------------------------------------*/","#if (FXAA_QUALITY_PRESET == 12)"," #define FXAA_QUALITY_PS 5"," #define FXAA_QUALITY_P0 1.0"," #define FXAA_QUALITY_P1 1.5"," #define FXAA_QUALITY_P2 2.0"," #define FXAA_QUALITY_P3 4.0"," #define FXAA_QUALITY_P4 12.0","#endif","/*--------------------------------------------------------------------------*/","#if (FXAA_QUALITY_PRESET == 13)"," #define FXAA_QUALITY_PS 6"," #define FXAA_QUALITY_P0 1.0"," #define FXAA_QUALITY_P1 1.5"," #define FXAA_QUALITY_P2 2.0"," #define FXAA_QUALITY_P3 2.0"," #define FXAA_QUALITY_P4 4.0"," #define FXAA_QUALITY_P5 12.0","#endif","/*--------------------------------------------------------------------------*/","#if (FXAA_QUALITY_PRESET == 14)"," #define FXAA_QUALITY_PS 7"," #define FXAA_QUALITY_P0 1.0"," #define FXAA_QUALITY_P1 1.5"," #define FXAA_QUALITY_P2 2.0"," #define FXAA_QUALITY_P3 2.0"," #define FXAA_QUALITY_P4 2.0"," #define FXAA_QUALITY_P5 4.0"," #define FXAA_QUALITY_P6 12.0","#endif","/*--------------------------------------------------------------------------*/","#if (FXAA_QUALITY_PRESET == 15)"," #define FXAA_QUALITY_PS 8"," #define FXAA_QUALITY_P0 1.0"," #define FXAA_QUALITY_P1 1.5"," #define FXAA_QUALITY_P2 2.0"," #define FXAA_QUALITY_P3 2.0"," #define FXAA_QUALITY_P4 2.0"," #define FXAA_QUALITY_P5 2.0"," #define FXAA_QUALITY_P6 4.0"," #define FXAA_QUALITY_P7 12.0","#endif","","/*============================================================================"," FXAA QUALITY - LOW DITHER PRESETS","============================================================================*/","#if (FXAA_QUALITY_PRESET == 20)"," #define FXAA_QUALITY_PS 3"," #define FXAA_QUALITY_P0 1.5"," #define FXAA_QUALITY_P1 2.0"," #define FXAA_QUALITY_P2 8.0","#endif","/*--------------------------------------------------------------------------*/","#if (FXAA_QUALITY_PRESET == 21)"," #define FXAA_QUALITY_PS 4"," #define FXAA_QUALITY_P0 1.0"," #define FXAA_QUALITY_P1 1.5"," #define FXAA_QUALITY_P2 2.0"," #define FXAA_QUALITY_P3 8.0","#endif","/*--------------------------------------------------------------------------*/","#if (FXAA_QUALITY_PRESET == 22)"," #define FXAA_QUALITY_PS 5"," #define FXAA_QUALITY_P0 1.0"," #define FXAA_QUALITY_P1 1.5"," #define FXAA_QUALITY_P2 2.0"," #define FXAA_QUALITY_P3 2.0"," #define FXAA_QUALITY_P4 8.0","#endif","/*--------------------------------------------------------------------------*/","#if (FXAA_QUALITY_PRESET == 23)"," #define FXAA_QUALITY_PS 6"," #define FXAA_QUALITY_P0 1.0"," #define FXAA_QUALITY_P1 1.5"," #define FXAA_QUALITY_P2 2.0"," #define FXAA_QUALITY_P3 2.0"," #define FXAA_QUALITY_P4 2.0"," #define FXAA_QUALITY_P5 8.0","#endif","/*--------------------------------------------------------------------------*/","#if (FXAA_QUALITY_PRESET == 24)"," #define FXAA_QUALITY_PS 7"," #define FXAA_QUALITY_P0 1.0"," #define FXAA_QUALITY_P1 1.5"," #define FXAA_QUALITY_P2 2.0"," #define FXAA_QUALITY_P3 2.0"," #define FXAA_QUALITY_P4 2.0"," #define FXAA_QUALITY_P5 3.0"," #define FXAA_QUALITY_P6 8.0","#endif","/*--------------------------------------------------------------------------*/","#if (FXAA_QUALITY_PRESET == 25)"," #define FXAA_QUALITY_PS 8"," #define FXAA_QUALITY_P0 1.0"," #define FXAA_QUALITY_P1 1.5"," #define FXAA_QUALITY_P2 2.0"," #define FXAA_QUALITY_P3 2.0"," #define FXAA_QUALITY_P4 2.0"," #define FXAA_QUALITY_P5 2.0"," #define FXAA_QUALITY_P6 4.0"," #define FXAA_QUALITY_P7 8.0","#endif","/*--------------------------------------------------------------------------*/","#if (FXAA_QUALITY_PRESET == 26)"," #define FXAA_QUALITY_PS 9"," #define FXAA_QUALITY_P0 1.0"," #define FXAA_QUALITY_P1 1.5"," #define FXAA_QUALITY_P2 2.0"," #define FXAA_QUALITY_P3 2.0"," #define FXAA_QUALITY_P4 2.0"," #define FXAA_QUALITY_P5 2.0"," #define FXAA_QUALITY_P6 2.0"," #define FXAA_QUALITY_P7 4.0"," #define FXAA_QUALITY_P8 8.0","#endif","/*--------------------------------------------------------------------------*/","#if (FXAA_QUALITY_PRESET == 27)"," #define FXAA_QUALITY_PS 10"," #define FXAA_QUALITY_P0 1.0"," #define FXAA_QUALITY_P1 1.5"," #define FXAA_QUALITY_P2 2.0"," #define FXAA_QUALITY_P3 2.0"," #define FXAA_QUALITY_P4 2.0"," #define FXAA_QUALITY_P5 2.0"," #define FXAA_QUALITY_P6 2.0"," #define FXAA_QUALITY_P7 2.0"," #define FXAA_QUALITY_P8 4.0"," #define FXAA_QUALITY_P9 8.0","#endif","/*--------------------------------------------------------------------------*/","#if (FXAA_QUALITY_PRESET == 28)"," #define FXAA_QUALITY_PS 11"," #define FXAA_QUALITY_P0 1.0"," #define FXAA_QUALITY_P1 1.5"," #define FXAA_QUALITY_P2 2.0"," #define FXAA_QUALITY_P3 2.0"," #define FXAA_QUALITY_P4 2.0"," #define FXAA_QUALITY_P5 2.0"," #define FXAA_QUALITY_P6 2.0"," #define FXAA_QUALITY_P7 2.0"," #define FXAA_QUALITY_P8 2.0"," #define FXAA_QUALITY_P9 4.0"," #define FXAA_QUALITY_P10 8.0","#endif","/*--------------------------------------------------------------------------*/","#if (FXAA_QUALITY_PRESET == 29)"," #define FXAA_QUALITY_PS 12"," #define FXAA_QUALITY_P0 1.0"," #define FXAA_QUALITY_P1 1.5"," #define FXAA_QUALITY_P2 2.0"," #define FXAA_QUALITY_P3 2.0"," #define FXAA_QUALITY_P4 2.0"," #define FXAA_QUALITY_P5 2.0"," #define FXAA_QUALITY_P6 2.0"," #define FXAA_QUALITY_P7 2.0"," #define FXAA_QUALITY_P8 2.0"," #define FXAA_QUALITY_P9 2.0"," #define FXAA_QUALITY_P10 4.0"," #define FXAA_QUALITY_P11 8.0","#endif","","/*============================================================================"," FXAA QUALITY - EXTREME QUALITY","============================================================================*/","#if (FXAA_QUALITY_PRESET == 39)"," #define FXAA_QUALITY_PS 12"," #define FXAA_QUALITY_P0 1.0"," #define FXAA_QUALITY_P1 1.0"," #define FXAA_QUALITY_P2 1.0"," #define FXAA_QUALITY_P3 1.0"," #define FXAA_QUALITY_P4 1.0"," #define FXAA_QUALITY_P5 1.5"," #define FXAA_QUALITY_P6 2.0"," #define FXAA_QUALITY_P7 2.0"," #define FXAA_QUALITY_P8 2.0"," #define FXAA_QUALITY_P9 2.0"," #define FXAA_QUALITY_P10 4.0"," #define FXAA_QUALITY_P11 8.0","#endif","","","","/*============================================================================",""," API PORTING","","============================================================================*/","#if (FXAA_GLSL_100 == 1) || (FXAA_GLSL_120 == 1) || (FXAA_GLSL_130 == 1)"," #define FxaaBool bool"," #define FxaaDiscard discard"," #define FxaaFloat float"," #define FxaaFloat2 vec2"," #define FxaaFloat3 vec3"," #define FxaaFloat4 vec4"," #define FxaaHalf float"," #define FxaaHalf2 vec2"," #define FxaaHalf3 vec3"," #define FxaaHalf4 vec4"," #define FxaaInt2 ivec2"," #define FxaaSat(x) clamp(x, 0.0, 1.0)"," #define FxaaTex sampler2D","#else"," #define FxaaBool bool"," #define FxaaDiscard clip(-1)"," #define FxaaFloat float"," #define FxaaFloat2 float2"," #define FxaaFloat3 float3"," #define FxaaFloat4 float4"," #define FxaaHalf half"," #define FxaaHalf2 half2"," #define FxaaHalf3 half3"," #define FxaaHalf4 half4"," #define FxaaSat(x) saturate(x)","#endif","/*--------------------------------------------------------------------------*/","#if (FXAA_GLSL_100 == 1)"," #define FxaaTexTop(t, p) texture2D(t, p, 0.0)"," #define FxaaTexOff(t, p, o, r) texture2D(t, p + (o * r), 0.0)","#endif","/*--------------------------------------------------------------------------*/","#if (FXAA_GLSL_120 == 1)"," // Requires,"," // #version 120"," // And at least,"," // #extension GL_EXT_gpu_shader4 : enable"," // (or set FXAA_FAST_PIXEL_OFFSET 1 to work like DX9)"," #define FxaaTexTop(t, p) texture2DLod(t, p, 0.0)"," #if (FXAA_FAST_PIXEL_OFFSET == 1)"," #define FxaaTexOff(t, p, o, r) texture2DLodOffset(t, p, 0.0, o)"," #else"," #define FxaaTexOff(t, p, o, r) texture2DLod(t, p + (o * r), 0.0)"," #endif"," #if (FXAA_GATHER4_ALPHA == 1)"," // use #extension GL_ARB_gpu_shader5 : enable"," #define FxaaTexAlpha4(t, p) textureGather(t, p, 3)"," #define FxaaTexOffAlpha4(t, p, o) textureGatherOffset(t, p, o, 3)"," #define FxaaTexGreen4(t, p) textureGather(t, p, 1)"," #define FxaaTexOffGreen4(t, p, o) textureGatherOffset(t, p, o, 1)"," #endif","#endif","/*--------------------------------------------------------------------------*/","#if (FXAA_GLSL_130 == 1)",' // Requires "#version 130" or better'," #define FxaaTexTop(t, p) textureLod(t, p, 0.0)"," #define FxaaTexOff(t, p, o, r) textureLodOffset(t, p, 0.0, o)"," #if (FXAA_GATHER4_ALPHA == 1)"," // use #extension GL_ARB_gpu_shader5 : enable"," #define FxaaTexAlpha4(t, p) textureGather(t, p, 3)"," #define FxaaTexOffAlpha4(t, p, o) textureGatherOffset(t, p, o, 3)"," #define FxaaTexGreen4(t, p) textureGather(t, p, 1)"," #define FxaaTexOffGreen4(t, p, o) textureGatherOffset(t, p, o, 1)"," #endif","#endif","/*--------------------------------------------------------------------------*/","#if (FXAA_HLSL_3 == 1)"," #define FxaaInt2 float2"," #define FxaaTex sampler2D"," #define FxaaTexTop(t, p) tex2Dlod(t, float4(p, 0.0, 0.0))"," #define FxaaTexOff(t, p, o, r) tex2Dlod(t, float4(p + (o * r), 0, 0))","#endif","/*--------------------------------------------------------------------------*/","#if (FXAA_HLSL_4 == 1)"," #define FxaaInt2 int2"," struct FxaaTex { SamplerState smpl; Texture2D tex; };"," #define FxaaTexTop(t, p) t.tex.SampleLevel(t.smpl, p, 0.0)"," #define FxaaTexOff(t, p, o, r) t.tex.SampleLevel(t.smpl, p, 0.0, o)","#endif","/*--------------------------------------------------------------------------*/","#if (FXAA_HLSL_5 == 1)"," #define FxaaInt2 int2"," struct FxaaTex { SamplerState smpl; Texture2D tex; };"," #define FxaaTexTop(t, p) t.tex.SampleLevel(t.smpl, p, 0.0)"," #define FxaaTexOff(t, p, o, r) t.tex.SampleLevel(t.smpl, p, 0.0, o)"," #define FxaaTexAlpha4(t, p) t.tex.GatherAlpha(t.smpl, p)"," #define FxaaTexOffAlpha4(t, p, o) t.tex.GatherAlpha(t.smpl, p, o)"," #define FxaaTexGreen4(t, p) t.tex.GatherGreen(t.smpl, p)"," #define FxaaTexOffGreen4(t, p, o) t.tex.GatherGreen(t.smpl, p, o)","#endif","","","/*============================================================================"," GREEN AS LUMA OPTION SUPPORT FUNCTION","============================================================================*/","#if (FXAA_GREEN_AS_LUMA == 0)"," FxaaFloat FxaaLuma(FxaaFloat4 rgba) { return rgba.w; }","#else"," FxaaFloat FxaaLuma(FxaaFloat4 rgba) { return rgba.y; }","#endif","","","","","/*============================================================================",""," FXAA3 QUALITY - PC","","============================================================================*/","#if (FXAA_PC == 1)","/*--------------------------------------------------------------------------*/","FxaaFloat4 FxaaPixelShader("," //"," // Use noperspective interpolation here (turn off perspective interpolation)."," // {xy} = center of pixel"," FxaaFloat2 pos,"," //"," // Used only for FXAA Console, and not used on the 360 version."," // Use noperspective interpolation here (turn off perspective interpolation)."," // {xy_} = upper left of pixel"," // {_zw} = lower right of pixel"," FxaaFloat4 fxaaConsolePosPos,"," //"," // Input color texture."," // {rgb_} = color in linear or perceptual color space"," // if (FXAA_GREEN_AS_LUMA == 0)"," // {__a} = luma in perceptual color space (not linear)"," FxaaTex tex,"," //"," // Only used on the optimized 360 version of FXAA Console.",' // For everything but 360, just use the same input here as for "tex".'," // For 360, same texture, just alias with a 2nd sampler."," // This sampler needs to have an exponent bias of -1."," FxaaTex fxaaConsole360TexExpBiasNegOne,"," //"," // Only used on the optimized 360 version of FXAA Console.",' // For everything but 360, just use the same input here as for "tex".'," // For 360, same texture, just alias with a 3nd sampler."," // This sampler needs to have an exponent bias of -2."," FxaaTex fxaaConsole360TexExpBiasNegTwo,"," //"," // Only used on FXAA Quality."," // This must be from a constant/uniform."," // {x_} = 1.0/screenWidthInPixels"," // {_y} = 1.0/screenHeightInPixels"," FxaaFloat2 fxaaQualityRcpFrame,"," //"," // Only used on FXAA Console."," // This must be from a constant/uniform."," // This effects sub-pixel AA quality and inversely sharpness."," // Where N ranges between,"," // N = 0.50 (default)"," // N = 0.33 (sharper)"," // {x__} = -N/screenWidthInPixels"," // {_y_} = -N/screenHeightInPixels"," // {_z_} = N/screenWidthInPixels"," // {__w} = N/screenHeightInPixels"," FxaaFloat4 fxaaConsoleRcpFrameOpt,"," //"," // Only used on FXAA Console."," // Not used on 360, but used on PS3 and PC."," // This must be from a constant/uniform."," // {x__} = -2.0/screenWidthInPixels"," // {_y_} = -2.0/screenHeightInPixels"," // {_z_} = 2.0/screenWidthInPixels"," // {__w} = 2.0/screenHeightInPixels"," FxaaFloat4 fxaaConsoleRcpFrameOpt2,"," //"," // Only used on FXAA Console."," // Only used on 360 in place of fxaaConsoleRcpFrameOpt2."," // This must be from a constant/uniform."," // {x__} = 8.0/screenWidthInPixels"," // {_y_} = 8.0/screenHeightInPixels"," // {_z_} = -4.0/screenWidthInPixels"," // {__w} = -4.0/screenHeightInPixels"," FxaaFloat4 fxaaConsole360RcpFrameOpt2,"," //"," // Only used on FXAA Quality."," // This used to be the FXAA_QUALITY_SUBPIX define."," // It is here now to allow easier tuning."," // Choose the amount of sub-pixel aliasing removal."," // This can effect sharpness."," // 1.00 - upper limit (softer)"," // 0.75 - default amount of filtering"," // 0.50 - lower limit (sharper, less sub-pixel aliasing removal)"," // 0.25 - almost off"," // 0.00 - completely off"," FxaaFloat fxaaQualitySubpix,"," //"," // Only used on FXAA Quality."," // This used to be the FXAA_QUALITY_EDGE_THRESHOLD define."," // It is here now to allow easier tuning."," // The minimum amount of local contrast required to apply algorithm."," // 0.333 - too little (faster)"," // 0.250 - low quality"," // 0.166 - default"," // 0.125 - high quality"," // 0.063 - overkill (slower)"," FxaaFloat fxaaQualityEdgeThreshold,"," //"," // Only used on FXAA Quality."," // This used to be the FXAA_QUALITY_EDGE_THRESHOLD_MIN define."," // It is here now to allow easier tuning."," // Trims the algorithm from processing darks."," // 0.0833 - upper limit (default, the start of visible unfiltered edges)"," // 0.0625 - high quality (faster)"," // 0.0312 - visible limit (slower)"," // Special notes when using FXAA_GREEN_AS_LUMA,"," // Likely want to set this to zero."," // As colors that are mostly not-green"," // will appear very dark in the green channel!"," // Tune by looking at mostly non-green content,"," // then start at zero and increase until aliasing is a problem."," FxaaFloat fxaaQualityEdgeThresholdMin,"," //"," // Only used on FXAA Console."," // This used to be the FXAA_CONSOLE_EDGE_SHARPNESS define."," // It is here now to allow easier tuning."," // This does not effect PS3, as this needs to be compiled in."," // Use FXAA_CONSOLE_PS3_EDGE_SHARPNESS for PS3."," // Due to the PS3 being ALU bound,"," // there are only three safe values here: 2 and 4 and 8."," // These options use the shaders ability to a free *|/ by 2|4|8."," // For all other platforms can be a non-power of two."," // 8.0 is sharper (default!!!)"," // 4.0 is softer"," // 2.0 is really soft (good only for vector graphics inputs)"," FxaaFloat fxaaConsoleEdgeSharpness,"," //"," // Only used on FXAA Console."," // This used to be the FXAA_CONSOLE_EDGE_THRESHOLD define."," // It is here now to allow easier tuning."," // This does not effect PS3, as this needs to be compiled in."," // Use FXAA_CONSOLE_PS3_EDGE_THRESHOLD for PS3."," // Due to the PS3 being ALU bound,"," // there are only two safe values here: 1/4 and 1/8."," // These options use the shaders ability to a free *|/ by 2|4|8."," // The console setting has a different mapping than the quality setting."," // Other platforms can use other values."," // 0.125 leaves less aliasing, but is softer (default!!!)"," // 0.25 leaves more aliasing, and is sharper"," FxaaFloat fxaaConsoleEdgeThreshold,"," //"," // Only used on FXAA Console."," // This used to be the FXAA_CONSOLE_EDGE_THRESHOLD_MIN define."," // It is here now to allow easier tuning."," // Trims the algorithm from processing darks."," // The console setting has a different mapping than the quality setting."," // This only applies when FXAA_EARLY_EXIT is 1."," // This does not apply to PS3,"," // PS3 was simplified to avoid more shader instructions."," // 0.06 - faster but more aliasing in darks"," // 0.05 - default"," // 0.04 - slower and less aliasing in darks"," // Special notes when using FXAA_GREEN_AS_LUMA,"," // Likely want to set this to zero."," // As colors that are mostly not-green"," // will appear very dark in the green channel!"," // Tune by looking at mostly non-green content,"," // then start at zero and increase until aliasing is a problem."," FxaaFloat fxaaConsoleEdgeThresholdMin,"," //"," // Extra constants for 360 FXAA Console only."," // Use zeros or anything else for other platforms."," // These must be in physical constant registers and NOT immediates."," // Immediates will result in compiler un-optimizing."," // {xyzw} = float4(1.0, -1.0, 0.25, -0.25)"," FxaaFloat4 fxaaConsole360ConstDir",") {","/*--------------------------------------------------------------------------*/"," FxaaFloat2 posM;"," posM.x = pos.x;"," posM.y = pos.y;"," #if (FXAA_GATHER4_ALPHA == 1)"," #if (FXAA_DISCARD == 0)"," FxaaFloat4 rgbyM = FxaaTexTop(tex, posM);"," #if (FXAA_GREEN_AS_LUMA == 0)"," #define lumaM rgbyM.w"," #else"," #define lumaM rgbyM.y"," #endif"," #endif"," #if (FXAA_GREEN_AS_LUMA == 0)"," FxaaFloat4 luma4A = FxaaTexAlpha4(tex, posM);"," FxaaFloat4 luma4B = FxaaTexOffAlpha4(tex, posM, FxaaInt2(-1, -1));"," #else"," FxaaFloat4 luma4A = FxaaTexGreen4(tex, posM);"," FxaaFloat4 luma4B = FxaaTexOffGreen4(tex, posM, FxaaInt2(-1, -1));"," #endif"," #if (FXAA_DISCARD == 1)"," #define lumaM luma4A.w"," #endif"," #define lumaE luma4A.z"," #define lumaS luma4A.x"," #define lumaSE luma4A.y"," #define lumaNW luma4B.w"," #define lumaN luma4B.z"," #define lumaW luma4B.x"," #else"," FxaaFloat4 rgbyM = FxaaTexTop(tex, posM);"," #if (FXAA_GREEN_AS_LUMA == 0)"," #define lumaM rgbyM.w"," #else"," #define lumaM rgbyM.y"," #endif"," #if (FXAA_GLSL_100 == 1)"," FxaaFloat lumaS = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 0.0, 1.0), fxaaQualityRcpFrame.xy));"," FxaaFloat lumaE = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 1.0, 0.0), fxaaQualityRcpFrame.xy));"," FxaaFloat lumaN = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 0.0,-1.0), fxaaQualityRcpFrame.xy));"," FxaaFloat lumaW = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2(-1.0, 0.0), fxaaQualityRcpFrame.xy));"," #else"," FxaaFloat lumaS = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 0, 1), fxaaQualityRcpFrame.xy));"," FxaaFloat lumaE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1, 0), fxaaQualityRcpFrame.xy));"," FxaaFloat lumaN = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 0,-1), fxaaQualityRcpFrame.xy));"," FxaaFloat lumaW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 0), fxaaQualityRcpFrame.xy));"," #endif"," #endif","/*--------------------------------------------------------------------------*/"," FxaaFloat maxSM = max(lumaS, lumaM);"," FxaaFloat minSM = min(lumaS, lumaM);"," FxaaFloat maxESM = max(lumaE, maxSM);"," FxaaFloat minESM = min(lumaE, minSM);"," FxaaFloat maxWN = max(lumaN, lumaW);"," FxaaFloat minWN = min(lumaN, lumaW);"," FxaaFloat rangeMax = max(maxWN, maxESM);"," FxaaFloat rangeMin = min(minWN, minESM);"," FxaaFloat rangeMaxScaled = rangeMax * fxaaQualityEdgeThreshold;"," FxaaFloat range = rangeMax - rangeMin;"," FxaaFloat rangeMaxClamped = max(fxaaQualityEdgeThresholdMin, rangeMaxScaled);"," FxaaBool earlyExit = range < rangeMaxClamped;","/*--------------------------------------------------------------------------*/"," if(earlyExit)"," #if (FXAA_DISCARD == 1)"," FxaaDiscard;"," #else"," return rgbyM;"," #endif","/*--------------------------------------------------------------------------*/"," #if (FXAA_GATHER4_ALPHA == 0)"," #if (FXAA_GLSL_100 == 1)"," FxaaFloat lumaNW = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2(-1.0,-1.0), fxaaQualityRcpFrame.xy));"," FxaaFloat lumaSE = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 1.0, 1.0), fxaaQualityRcpFrame.xy));"," FxaaFloat lumaNE = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 1.0,-1.0), fxaaQualityRcpFrame.xy));"," FxaaFloat lumaSW = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2(-1.0, 1.0), fxaaQualityRcpFrame.xy));"," #else"," FxaaFloat lumaNW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1,-1), fxaaQualityRcpFrame.xy));"," FxaaFloat lumaSE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1, 1), fxaaQualityRcpFrame.xy));"," FxaaFloat lumaNE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1,-1), fxaaQualityRcpFrame.xy));"," FxaaFloat lumaSW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 1), fxaaQualityRcpFrame.xy));"," #endif"," #else"," FxaaFloat lumaNE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(1, -1), fxaaQualityRcpFrame.xy));"," FxaaFloat lumaSW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 1), fxaaQualityRcpFrame.xy));"," #endif","/*--------------------------------------------------------------------------*/"," FxaaFloat lumaNS = lumaN + lumaS;"," FxaaFloat lumaWE = lumaW + lumaE;"," FxaaFloat subpixRcpRange = 1.0/range;"," FxaaFloat subpixNSWE = lumaNS + lumaWE;"," FxaaFloat edgeHorz1 = (-2.0 * lumaM) + lumaNS;"," FxaaFloat edgeVert1 = (-2.0 * lumaM) + lumaWE;","/*--------------------------------------------------------------------------*/"," FxaaFloat lumaNESE = lumaNE + lumaSE;"," FxaaFloat lumaNWNE = lumaNW + lumaNE;"," FxaaFloat edgeHorz2 = (-2.0 * lumaE) + lumaNESE;"," FxaaFloat edgeVert2 = (-2.0 * lumaN) + lumaNWNE;","/*--------------------------------------------------------------------------*/"," FxaaFloat lumaNWSW = lumaNW + lumaSW;"," FxaaFloat lumaSWSE = lumaSW + lumaSE;"," FxaaFloat edgeHorz4 = (abs(edgeHorz1) * 2.0) + abs(edgeHorz2);"," FxaaFloat edgeVert4 = (abs(edgeVert1) * 2.0) + abs(edgeVert2);"," FxaaFloat edgeHorz3 = (-2.0 * lumaW) + lumaNWSW;"," FxaaFloat edgeVert3 = (-2.0 * lumaS) + lumaSWSE;"," FxaaFloat edgeHorz = abs(edgeHorz3) + edgeHorz4;"," FxaaFloat edgeVert = abs(edgeVert3) + edgeVert4;","/*--------------------------------------------------------------------------*/"," FxaaFloat subpixNWSWNESE = lumaNWSW + lumaNESE;"," FxaaFloat lengthSign = fxaaQualityRcpFrame.x;"," FxaaBool horzSpan = edgeHorz >= edgeVert;"," FxaaFloat subpixA = subpixNSWE * 2.0 + subpixNWSWNESE;","/*--------------------------------------------------------------------------*/"," if(!horzSpan) lumaN = lumaW;"," if(!horzSpan) lumaS = lumaE;"," if(horzSpan) lengthSign = fxaaQualityRcpFrame.y;"," FxaaFloat subpixB = (subpixA * (1.0/12.0)) - lumaM;","/*--------------------------------------------------------------------------*/"," FxaaFloat gradientN = lumaN - lumaM;"," FxaaFloat gradientS = lumaS - lumaM;"," FxaaFloat lumaNN = lumaN + lumaM;"," FxaaFloat lumaSS = lumaS + lumaM;"," FxaaBool pairN = abs(gradientN) >= abs(gradientS);"," FxaaFloat gradient = max(abs(gradientN), abs(gradientS));"," if(pairN) lengthSign = -lengthSign;"," FxaaFloat subpixC = FxaaSat(abs(subpixB) * subpixRcpRange);","/*--------------------------------------------------------------------------*/"," FxaaFloat2 posB;"," posB.x = posM.x;"," posB.y = posM.y;"," FxaaFloat2 offNP;"," offNP.x = (!horzSpan) ? 0.0 : fxaaQualityRcpFrame.x;"," offNP.y = ( horzSpan) ? 0.0 : fxaaQualityRcpFrame.y;"," if(!horzSpan) posB.x += lengthSign * 0.5;"," if( horzSpan) posB.y += lengthSign * 0.5;","/*--------------------------------------------------------------------------*/"," FxaaFloat2 posN;"," posN.x = posB.x - offNP.x * FXAA_QUALITY_P0;"," posN.y = posB.y - offNP.y * FXAA_QUALITY_P0;"," FxaaFloat2 posP;"," posP.x = posB.x + offNP.x * FXAA_QUALITY_P0;"," posP.y = posB.y + offNP.y * FXAA_QUALITY_P0;"," FxaaFloat subpixD = ((-2.0)*subpixC) + 3.0;"," FxaaFloat lumaEndN = FxaaLuma(FxaaTexTop(tex, posN));"," FxaaFloat subpixE = subpixC * subpixC;"," FxaaFloat lumaEndP = FxaaLuma(FxaaTexTop(tex, posP));","/*--------------------------------------------------------------------------*/"," if(!pairN) lumaNN = lumaSS;"," FxaaFloat gradientScaled = gradient * 1.0/4.0;"," FxaaFloat lumaMM = lumaM - lumaNN * 0.5;"," FxaaFloat subpixF = subpixD * subpixE;"," FxaaBool lumaMLTZero = lumaMM < 0.0;","/*--------------------------------------------------------------------------*/"," lumaEndN -= lumaNN * 0.5;"," lumaEndP -= lumaNN * 0.5;"," FxaaBool doneN = abs(lumaEndN) >= gradientScaled;"," FxaaBool doneP = abs(lumaEndP) >= gradientScaled;"," if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P1;"," if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P1;"," FxaaBool doneNP = (!doneN) || (!doneP);"," if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P1;"," if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P1;","/*--------------------------------------------------------------------------*/"," if(doneNP) {"," if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));"," if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));"," if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;"," if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;"," doneN = abs(lumaEndN) >= gradientScaled;"," doneP = abs(lumaEndP) >= gradientScaled;"," if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P2;"," if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P2;"," doneNP = (!doneN) || (!doneP);"," if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P2;"," if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P2;","/*--------------------------------------------------------------------------*/"," #if (FXAA_QUALITY_PS > 3)"," if(doneNP) {"," if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));"," if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));"," if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;"," if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;"," doneN = abs(lumaEndN) >= gradientScaled;"," doneP = abs(lumaEndP) >= gradientScaled;"," if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P3;"," if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P3;"," doneNP = (!doneN) || (!doneP);"," if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P3;"," if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P3;","/*--------------------------------------------------------------------------*/"," #if (FXAA_QUALITY_PS > 4)"," if(doneNP) {"," if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));"," if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));"," if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;"," if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;"," doneN = abs(lumaEndN) >= gradientScaled;"," doneP = abs(lumaEndP) >= gradientScaled;"," if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P4;"," if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P4;"," doneNP = (!doneN) || (!doneP);"," if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P4;"," if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P4;","/*--------------------------------------------------------------------------*/"," #if (FXAA_QUALITY_PS > 5)"," if(doneNP) {"," if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));"," if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));"," if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;"," if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;"," doneN = abs(lumaEndN) >= gradientScaled;"," doneP = abs(lumaEndP) >= gradientScaled;"," if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P5;"," if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P5;"," doneNP = (!doneN) || (!doneP);"," if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P5;"," if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P5;","/*--------------------------------------------------------------------------*/"," #if (FXAA_QUALITY_PS > 6)"," if(doneNP) {"," if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));"," if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));"," if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;"," if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;"," doneN = abs(lumaEndN) >= gradientScaled;"," doneP = abs(lumaEndP) >= gradientScaled;"," if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P6;"," if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P6;"," doneNP = (!doneN) || (!doneP);"," if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P6;"," if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P6;","/*--------------------------------------------------------------------------*/"," #if (FXAA_QUALITY_PS > 7)"," if(doneNP) {"," if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));"," if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));"," if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;"," if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;"," doneN = abs(lumaEndN) >= gradientScaled;"," doneP = abs(lumaEndP) >= gradientScaled;"," if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P7;"," if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P7;"," doneNP = (!doneN) || (!doneP);"," if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P7;"," if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P7;","/*--------------------------------------------------------------------------*/"," #if (FXAA_QUALITY_PS > 8)"," if(doneNP) {"," if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));"," if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));"," if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;"," if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;"," doneN = abs(lumaEndN) >= gradientScaled;"," doneP = abs(lumaEndP) >= gradientScaled;"," if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P8;"," if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P8;"," doneNP = (!doneN) || (!doneP);"," if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P8;"," if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P8;","/*--------------------------------------------------------------------------*/"," #if (FXAA_QUALITY_PS > 9)"," if(doneNP) {"," if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));"," if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));"," if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;"," if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;"," doneN = abs(lumaEndN) >= gradientScaled;"," doneP = abs(lumaEndP) >= gradientScaled;"," if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P9;"," if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P9;"," doneNP = (!doneN) || (!doneP);"," if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P9;"," if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P9;","/*--------------------------------------------------------------------------*/"," #if (FXAA_QUALITY_PS > 10)"," if(doneNP) {"," if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));"," if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));"," if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;"," if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;"," doneN = abs(lumaEndN) >= gradientScaled;"," doneP = abs(lumaEndP) >= gradientScaled;"," if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P10;"," if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P10;"," doneNP = (!doneN) || (!doneP);"," if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P10;"," if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P10;","/*--------------------------------------------------------------------------*/"," #if (FXAA_QUALITY_PS > 11)"," if(doneNP) {"," if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));"," if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));"," if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;"," if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;"," doneN = abs(lumaEndN) >= gradientScaled;"," doneP = abs(lumaEndP) >= gradientScaled;"," if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P11;"," if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P11;"," doneNP = (!doneN) || (!doneP);"," if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P11;"," if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P11;","/*--------------------------------------------------------------------------*/"," #if (FXAA_QUALITY_PS > 12)"," if(doneNP) {"," if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));"," if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));"," if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;"," if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;"," doneN = abs(lumaEndN) >= gradientScaled;"," doneP = abs(lumaEndP) >= gradientScaled;"," if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P12;"," if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P12;"," doneNP = (!doneN) || (!doneP);"," if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P12;"," if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P12;","/*--------------------------------------------------------------------------*/"," }"," #endif","/*--------------------------------------------------------------------------*/"," }"," #endif","/*--------------------------------------------------------------------------*/"," }"," #endif","/*--------------------------------------------------------------------------*/"," }"," #endif","/*--------------------------------------------------------------------------*/"," }"," #endif","/*--------------------------------------------------------------------------*/"," }"," #endif","/*--------------------------------------------------------------------------*/"," }"," #endif","/*--------------------------------------------------------------------------*/"," }"," #endif","/*--------------------------------------------------------------------------*/"," }"," #endif","/*--------------------------------------------------------------------------*/"," }"," #endif","/*--------------------------------------------------------------------------*/"," }","/*--------------------------------------------------------------------------*/"," FxaaFloat dstN = posM.x - posN.x;"," FxaaFloat dstP = posP.x - posM.x;"," if(!horzSpan) dstN = posM.y - posN.y;"," if(!horzSpan) dstP = posP.y - posM.y;","/*--------------------------------------------------------------------------*/"," FxaaBool goodSpanN = (lumaEndN < 0.0) != lumaMLTZero;"," FxaaFloat spanLength = (dstP + dstN);"," FxaaBool goodSpanP = (lumaEndP < 0.0) != lumaMLTZero;"," FxaaFloat spanLengthRcp = 1.0/spanLength;","/*--------------------------------------------------------------------------*/"," FxaaBool directionN = dstN < dstP;"," FxaaFloat dst = min(dstN, dstP);"," FxaaBool goodSpan = directionN ? goodSpanN : goodSpanP;"," FxaaFloat subpixG = subpixF * subpixF;"," FxaaFloat pixelOffset = (dst * (-spanLengthRcp)) + 0.5;"," FxaaFloat subpixH = subpixG * fxaaQualitySubpix;","/*--------------------------------------------------------------------------*/"," FxaaFloat pixelOffsetGood = goodSpan ? pixelOffset : 0.0;"," FxaaFloat pixelOffsetSubpix = max(pixelOffsetGood, subpixH);"," if(!horzSpan) posM.x += pixelOffsetSubpix * lengthSign;"," if( horzSpan) posM.y += pixelOffsetSubpix * lengthSign;"," #if (FXAA_DISCARD == 1)"," return FxaaTexTop(tex, posM);"," #else"," return FxaaFloat4(FxaaTexTop(tex, posM).xyz, lumaM);"," #endif","}","/*==========================================================================*/","#endif","","void main() {"," gl_FragColor = FxaaPixelShader("," vUv,"," vec4(0.0),"," tDiffuse,"," tDiffuse,"," tDiffuse,"," resolution,"," vec4(0.0),"," vec4(0.0),"," vec4(0.0),"," 0.75,"," 0.166,"," 0.0833,"," 0.0,"," 0.0,"," 0.0,"," vec4(0.0)"," );",""," // TODO avoid querying texture twice for same texel"," gl_FragColor.a = texture2D(tDiffuse, vUv).a;","}"].join("\n")},Iy=function(A,e,t,i,o){gy.call(this),this.scene=A,this.camera=e,this.overrideMaterial=t,this.clearColor=i,this.clearAlpha=void 0!==o?o:0,this.clear=!0,this.clearDepth=!1,this.needsSwap=!1};Iy.prototype=Object.assign(Object.create(gy.prototype),{constructor:Iy,render:function(A,e,t){var i=A.autoClear;A.autoClear=!1,this.scene.overrideMaterial=this.overrideMaterial;var o=null,n=null;this.clearColor&&(n=A.getClearColor().getHex(),o=A.getClearAlpha(),A.setClearColor(this.clearColor,this.clearAlpha)),this.clearDepth&&A.clearDepth(),A.setRenderTarget(this.renderToScreen?null:t),this.clear&&A.clear(A.autoClearColor,A.autoClearDepth,A.autoClearStencil),A.render(this.scene,this.camera),this.clearColor&&A.setClearColor(n,o),this.scene.overrideMaterial=null,A.autoClear=i}});var Ey=function(A,e,t,i,o){gy.call(this),this.modelManager=e,this.renderScene=t,this.renderCamera=i,this.selectedObjectIds=void 0!==o?o:[],this.defaultEdgeColor=(new LA).setHex(4173056),this.defaultEdgeAlpha=.95,this.edgeColor=new p(this.defaultEdgeColor.r,this.defaultEdgeColor.g,this.defaultEdgeColor.b,this.defaultEdgeAlpha),this.edgeLength=2,this.resolution=void 0!==A?new s(A.x,A.y):new s(256,256);var n={minFilter:1006,magFilter:1006,format:1023};this.renderTargetDepthBuffer=new g(this.resolution.x,this.resolution.y,n),this.renderTargetDepthBuffer.texture.name="OutlinePass.depth",this.renderTargetDepthBuffer.texture.generateMipmaps=!1,this.renderTargetMaskBuffer=new g(this.resolution.x,this.resolution.y,n),this.renderTargetMaskBuffer.texture.name="OutlinePass.mask",this.renderTargetMaskBuffer.texture.generateMipmaps=!1,this.renderTargetMaskDownSampleBuffer=new g(this.resolution.x,this.resolution.y,n),this.renderTargetMaskDownSampleBuffer.texture.name="OutlinePass.depthDownSample",this.renderTargetMaskDownSampleBuffer.texture.generateMipmaps=!1,this.renderTargetEdgeBuffer=new g(this.resolution.x,this.resolution.y,n),this.renderTargetEdgeBuffer.texture.name="OutlinePass.edge",this.renderTargetEdgeBuffer.texture.generateMipmaps=!1,this.renderTargetColorBuffer=new g(this.resolution.x,this.resolution.y,n),this.renderTargetColorBuffer.texture.name="OutlinePass.color",this.renderTargetColorBuffer.texture.generateMipmaps=!1,this.depthMaterial=new ji,this.depthMaterial.side=2,this.depthMaterial.depthPacking=3201,this.depthMaterial.blending=0,this.InstancedDepthMaterial=new Su,this.InstancedDepthMaterial.side=2,this.InstancedDepthMaterial.depthPacking=3201,this.InstancedDepthMaterial.blending=0,this.prepareMaskMaterial=this.getPrepareMaskMaterial(),this.prepareMaskMaterial.side=2,this.prepareMaskInstancedMaterial=this.getPrepareMaskInstancedMaterial(),this.prepareMaskInstancedMaterial.side=2,this.edgeDetectionMaterial=this.getEdgeDetectionMaterial(),this.overlayMaterial=this.getOverlayMaterial(),void 0===py&&console.error("OutlinePass relies on THREE.CopyShader");var r=py;return this.copyUniforms=Ge.clone(r.uniforms),this.copyUniforms.opacity.value=1,this.materialCopy=new Pe({uniforms:this.copyUniforms,vertexShader:r.vertexShader,fragmentShader:r.fragmentShader,blending:0,depthTest:!1,depthWrite:!1,transparent:!0}),this.enabled=!0,this.needsSwap=!1,this.oldClearColor=new LA,this.oldClearAlpha=1,this.camera=new Ka(-1,1,1,-1,0,1),this.scene=new Y,this.quad=new Ue(new et(2,2),null),this.quad.frustumCulled=!1,this.scene.add(this.quad),this.textureMatrix=new M,this};Ey.prototype.dispose=function(){this.renderTargetDepthBuffer.dispose(),this.renderTargetMaskBuffer.dispose(),this.renderTargetMaskDownSampleBuffer.dispose(),this.renderTargetEdgeBuffer.dispose(),this.renderTargetColorBuffer.dispose()},Ey.prototype.setSize=function(A,e){this.renderTargetDepthBuffer.setSize(A,e),this.renderTargetMaskBuffer.setSize(A,e),this.renderTargetMaskDownSampleBuffer.setSize(A,e),this.renderTargetEdgeBuffer.setSize(A,e),this.renderTargetColorBuffer.setSize(A,e)},Ey.prototype.adjustVisibilityOfObjectsWithoutOutline=function(A){this.modelManager.adjustVisibilityOfObjectsWithoutOutline(A)},Ey.prototype.adjustVisibility=function(A){this.modelManager.adjustVisibility(A)},Ey.prototype.changeVisibilityOfSelectedObjects=function(A){this.modelManager.changeVisibilityOfSelectedObjects(A)},Ey.prototype.changeVisibilityOfNonSelectedObjects=function(A){this.modelManager.changeVisibilityOfNonSelectedObjects(A)},Ey.prototype.adjustInstanceVisibility=function(A){this.modelManager.adjustInstanceVisibility(A)},Ey.prototype.changeInstanceVisibilityOfSelectedObjects=function(A){this.modelManager.changeInstanceVisibilityOfSelectedObjects(A)},Ey.prototype.changeInstanceVisibilityOfNonSelectedObjects=function(A){this.modelManager.changeInstanceVisibilityOfNonSelectedObjects(A)},Ey.prototype.restoreVisibilityOfObjects=function(){this.modelManager.restoreVisibilityOfObjects()},Ey.prototype.updateTextureMatrix=function(){this.textureMatrix.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),this.textureMatrix.multiply(this.renderCamera.projectionMatrix),this.textureMatrix.multiply(this.renderCamera.matrixWorldInverse)},Ey.prototype.render=function(A,e,t,i,o){this.oldClearColor.copy(A.getClearColor()),this.oldClearAlpha=A.getClearAlpha();var n=A.autoClear;A.autoClear=!1,o&&A.state.buffers.stencil.setTest(!1),A.setClearColor(0,0),this.adjustVisibilityOfObjectsWithoutOutline(!1),this.adjustInstanceVisibility(!1),this.changeVisibilityOfSelectedObjects(!1),this.renderScene.overrideMaterial=this.depthMaterial,A.setRenderTarget(this.renderTargetDepthBuffer),A.clear(),A.render(this.renderScene,this.renderCamera),this.adjustInstanceVisibility(!0),this.changeVisibilityOfSelectedObjects(!0),this.adjustVisibility(!1),this.changeInstanceVisibilityOfSelectedObjects(!1),this.renderScene.overrideMaterial=this.InstancedDepthMaterial,A.setRenderTarget(this.renderTargetDepthBuffer),A.render(this.renderScene,this.renderCamera),this.adjustVisibility(!0),this.changeInstanceVisibilityOfSelectedObjects(!0),this.updateTextureMatrix(),this.adjustInstanceVisibility(!1),this.changeVisibilityOfNonSelectedObjects(!1),this.adjustVisibilityOfObjectsWithoutOutline(!1),this.renderScene.overrideMaterial=this.prepareMaskMaterial,this.prepareMaskMaterial.uniforms.cameraNearFar.value=new s(this.renderCamera.near,this.renderCamera.far),this.prepareMaskMaterial.uniforms.depthTexture.value=this.renderTargetDepthBuffer.texture,this.prepareMaskMaterial.uniforms.textureMatrix.value=this.textureMatrix,A.setRenderTarget(this.renderTargetMaskBuffer),A.clear(),A.render(this.renderScene,this.renderCamera),this.adjustInstanceVisibility(!0),this.changeVisibilityOfNonSelectedObjects(!0),this.adjustVisibility(!1),this.changeInstanceVisibilityOfNonSelectedObjects(!1),this.adjustVisibilityOfObjectsWithoutOutline(!1),this.renderScene.overrideMaterial=this.prepareMaskInstancedMaterial,this.prepareMaskInstancedMaterial.uniforms.cameraNearFar.value=new s(this.renderCamera.near,this.renderCamera.far),this.prepareMaskInstancedMaterial.uniforms.depthTexture.value=this.renderTargetDepthBuffer.texture,this.prepareMaskInstancedMaterial.uniforms.textureMatrix.value=this.textureMatrix,A.setRenderTarget(this.renderTargetMaskBuffer),A.render(this.renderScene,this.renderCamera),this.renderScene.overrideMaterial=null,this.adjustVisibility(!0),this.changeInstanceVisibilityOfNonSelectedObjects(!0),this.restoreVisibilityOfObjects(),this.quad.material=this.materialCopy,this.copyUniforms.tDiffuse.value=this.renderTargetMaskBuffer.texture,A.setRenderTarget(this.renderTargetMaskDownSampleBuffer),A.clear(),A.render(this.scene,this.camera),this.quad.material=this.edgeDetectionMaterial,this.edgeDetectionMaterial.uniforms.maskTexture.value=this.renderTargetMaskDownSampleBuffer.texture,this.edgeDetectionMaterial.uniforms.texSize.value=new s(this.renderTargetMaskDownSampleBuffer.width,this.renderTargetMaskDownSampleBuffer.height),this.edgeDetectionMaterial.uniforms.edgeColor.value=this.edgeColor,this.edgeDetectionMaterial.uniforms.edgeLength.value=this.edgeLength,A.setRenderTarget(this.renderTargetEdgeBuffer),A.clear(),A.render(this.scene,this.camera),this.quad.material=this.overlayMaterial,this.overlayMaterial.uniforms.colorTexture.value=t.texture,this.overlayMaterial.uniforms.outlineTexture.value=this.renderTargetEdgeBuffer.texture,A.setRenderTarget(this.renderTargetColorBuffer),A.clear(),A.render(this.scene,this.camera),this.quad.material=this.materialCopy,this.copyUniforms.tDiffuse.value=this.renderTargetColorBuffer.texture,o&&A.state.buffers.stencil.setTest(!0),A.setRenderTarget(t),A.clear(),this.adjustVisibilityOfObjectsWithoutOutline(!0),A.render(this.scene,this.camera),A.setClearColor(this.oldClearColor,this.oldClearAlpha),A.autoClear=n},Ey.prototype.getPrepareMaskMaterial=function(){return new Pe({uniforms:{depthTexture:{value:null},cameraNearFar:{value:new s(.5,.5)},textureMatrix:{value:new M}},vertexShader:"varying vec2 vUv;\n\t\t\t\tvarying vec4 projTexCoord;\n\t\t\t\tvarying vec4 vPosition;\n\t\t\t\tuniform mat4 textureMatrix;\n\t\t\t\tvoid main() {\n\t\t\t\t\tvUv = uv;\n\t\t\t\t\tvPosition = modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t\tvec4 worldPosition = modelMatrix * vec4( position, 1.0 );\n\t\t\t\t\tprojTexCoord = textureMatrix * worldPosition;\n\t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t}",fragmentShader:"\n #include \n\t\t\t\tvarying vec2 vUv;\n\t\t\t\tvarying vec4 vPosition;\n\t\t\t\tvarying vec4 projTexCoord;\n\t\t\t\tuniform sampler2D depthTexture;\n\t\t\t\tuniform vec2 cameraNearFar;\n\t\t\t\t\n\t\t\t\tfloat linearDepth(float depth)\n {\n float far = cameraNearFar.y;\n float near = cameraNearFar.x;\n return (2.0 * near) / (far + near - depth * (far - near));\n }\n\t\t\t\t\n\t\t\t\tvoid main() {\n\t\t\t\t\tfloat depth = unpackRGBAToDepth(texture2DProj( depthTexture, projTexCoord ));\t\t\t\t\t\n\t\t\t\t\tgl_FragColor = vec4(depth);\n\t\t\t\t}"})},Ey.prototype.getPrepareMaskInstancedMaterial=function(){return new Pe({uniforms:{depthTexture:{value:null},cameraNearFar:{value:new s(.5,.5)},textureMatrix:{value:new M}},vertexShader:"\n attribute float vState; \n attribute vec4 aColor; \n attribute vec3 mcol0;\n attribute vec3 mcol1;\n attribute vec3 mcol2;\n attribute vec3 mcol3;\n #if defined(USE_MAP)\n attribute vec2 muvCol0;\n attribute vec2 muvCol1;\n attribute vec2 muvCol2;\n #endif\n \n varying float vfState;\n varying vec2 vUv;\n\t\t\t\tvarying vec4 projTexCoord;\n\t\t\t\tvarying vec4 vPosition;\n\t\t\t\tuniform mat4 textureMatrix;\n\t\t\t\t\n\t\t\t\tvec3 getInstancePosition(vec3 position) {\n return vec3(mat4(vec4(mcol0, 0.0),\n vec4(mcol1, 0.0),\n vec4(mcol2, 0.0),\n vec4(mcol3, 1.0)) * vec4(position, 1.0));\n }\n \n vec2 getInstanceUV(vec2 uv) {\n \n #if defined(USE_MAP)\n return vec2(mat3(vec3(muvCol0, 0.0),\n vec3(muvCol1, 0.0), \n vec3(muvCol2, 1.0)) * vec3(uv, 1.0));\n #else\n return uv;\n #endif \n \n }\n \n\t\t\t\tvoid main() {\n\t\t\t\t vfState = vState;\n\t\t\t\t\tvUv = uv;\n\t\t\t\t\tvPosition = vec4(getInstancePosition(position), 1.0);\n\t\t\t\t\tvec4 worldPosition = modelMatrix * vPosition;\n\t\t\t\t\tprojTexCoord = textureMatrix * worldPosition;\n\t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vPosition;\n\t\t\t\t}",fragmentShader:"#include \n varying float vfState;\n varying vec2 vUv;\n varying vec4 vPosition;\n varying vec4 projTexCoord;\n uniform sampler2D depthTexture;\n uniform vec2 cameraNearFar;\n \n float linearDepth(float depth)\n {\n float far = cameraNearFar.y;\n float near = cameraNearFar.x;\n return (2.0 * near) / (far + near - depth * (far - near));\n }\n \n void main() {\n if (vfState <= -0.99 && vfState >= -1.01) discard;\n float depth = unpackRGBAToDepth(texture2DProj( depthTexture, projTexCoord ));\n gl_FragColor = vec4(depth);\n }"})},Ey.prototype.getEdgeDetectionMaterial=function(){return new Pe({uniforms:{maskTexture:{value:null},texSize:{value:new s(.5,.5)},edgeColor:{value:new p(1,1,1,1)},edgeLength:{value:2}},vertexShader:"\n varying vec2 vUv;\n\t\t\t\tvoid main() {\n\t\t\t\t\tvUv = uv;\n\t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t}",fragmentShader:"\n varying vec2 vUv;\n\t\t\t\tuniform sampler2D maskTexture;\n\t\t\t\tuniform vec2 texSize;\n\t\t\t\tuniform vec4 edgeColor;\n uniform float edgeLength; \n \n void main(void)\n {\n float directions[3];\n directions[0] = -1.0;\n directions[1] = 0.0;\n directions[2] = 1.0;\n \n float scalars[3];\n scalars[0] = 3.0;\n scalars[1] = 10.0;\n scalars[2] = 3.0;\n \n float padx = 1.0 / texSize.x;\n float pady = 1.0 / texSize.y ; \n \n float edgeSize = 0.0; \n float horizEdge = 0.0;\n float vertEdge = 0.0; \n \n for (int i = 0; i < 3; ++i)\n {\n float dir = directions[i];\n float scale = scalars[i];\n \n horizEdge -= texture2D(maskTexture, vUv + vec2(-padx, dir * pady)).x * scale;\n horizEdge += texture2D(maskTexture, vUv + vec2(padx, dir * pady)).x * scale;\n \n vertEdge -= texture2D(maskTexture, vUv + vec2(dir * padx, -pady)).x * scale;\n vertEdge += texture2D(maskTexture, vUv + vec2(dir * padx, pady)).x * scale;\n } \n \n float len = sqrt(horizEdge * horizEdge + vertEdge * vertEdge); \n float alpha = len > edgeLength ? edgeColor.a : (texture2D(maskTexture, vUv).w > 0.1 ? 0.1 : 0.0);\n gl_FragColor = vec4(edgeColor.rgb, alpha);\n }"})},Ey.prototype.getOverlayMaterial=function(){return new Pe({uniforms:{colorTexture:{value:null},outlineTexture:{value:null}},vertexShader:"varying vec2 vUv;\n\t\t\t\tvoid main() {\n\t\t\t\t\tvUv = uv;\n\t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t}",fragmentShader:"varying vec2 vUv;\n\t\t\t\tuniform sampler2D colorTexture;\n\t\t\t\tuniform sampler2D outlineTexture;\n\t\t\t\t\n\t\t\t\tvoid main() {\n\t\t\t\t\tvec4 outlineColor = texture2D(outlineTexture, vUv);\t\t\t\t\t\n\t\t\t\t\tgl_FragColor = mix(texture2D(colorTexture, vUv), outlineColor, outlineColor.a);\t\t\t\t\t\n\t\t\t\t}",blending:2,depthTest:!1,depthWrite:!1,transparent:!0})},Ey.prototype.setOutlineEdgeColor=function(A){this.edgeColor.fromArray([A.r,A.g,A.b,A.opacity?A.opacity:1])},Ey.prototype.getOutlineEdgeColor=function(A){return(new Xh).fromArray(this.edgeColor.toArray())};var By=function(A){this.renderer=A,this.composer=null,this.renderPass=null,this.outlinePass=null,this.effectFXAA=null,this.selectedObjectIds=[]};By.prototype.destroy=function(){this.renderer=null,this.composer=null,this.renderPass=null,this.outlinePass=null,this.effectFXAA=null,this.selectedObjectIds=null},By.prototype.init=function(A,e,t,i,o){this.composer=new Cy(this.renderer),this.renderPass=new Iy(e,t),this.composer.addPass(this.renderPass),this.outlinePass=new Ey(new s(i,o),A,e,t),this.composer.addPass(this.outlinePass),this.effectFXAA=new uy(vy),this.effectFXAA.uniforms.resolution.value.set(1/i,1/o),this.effectFXAA.renderToScreen=!0,this.composer.addPass(this.effectFXAA)},By.prototype.reinit=function(A,e,t,i,o,n){this.renderer=A,this.composer=new Cy(this.renderer),this.renderPass=this.renderPass||new Iy(t,i),this.composer.addPass(this.renderPass),this.outlinePass=this.outlinePass||new Ey(new s(o,n),e,t,i),this.composer.addPass(this.outlinePass),this.effectFXAA=this.effectFXAA||new uy(vy),this.effectFXAA.uniforms.resolution.value.set(1/o,1/n),this.effectFXAA.renderToScreen=!0,this.composer.addPass(this.effectFXAA)},By.prototype.render=function(){this.composer.render()},By.prototype.setSize=function(A,e){this.composer.setSize(A,e),this.effectFXAA.uniforms.resolution.value.set(1/A,1/e)},By.prototype.addSelectedId=function(A){this.selectedObjectIds.push(A)},By.prototype.clearSelectedIds=function(){this.selectedObjectIds.length=0},By.prototype.setSelectedIds=function(A){if(this.outlinePass){this.clearSelectedIds();for(var e=0,t=A.length;t>e;e+=1)this.addSelectedId(A[e]);this.outlinePass.selectedObjectIds=this.selectedObjectIds}},By.prototype.setOutlineEdgeColor=function(A){this.outlinePass.setOutlineEdgeColor(A)},By.prototype.getOutlineEdgeColor=function(){return this.outlinePass.getOutlineEdgeColor()};var xy=function(A){jA.call(this,A),this.type="InstancedMeshBasicMaterial",this.uniforms=it.basic.uniforms,this.vertexShader=function(A){return A.replace("#include ","\n vec4 mvPosition = modelViewMatrix * vec4(getInstancePosition(transformed), 1.0);\n gl_Position = projectionMatrix * mvPosition;\n ")}(it.basic.vertexShader.replace("void main() {","\n attribute float vState; \n attribute vec3 mcol0;\n attribute vec3 mcol1;\n attribute vec3 mcol2;\n attribute vec3 mcol3; \n varying float vfState;\n \n vec3 getInstancePosition(vec3 position) {\n return vec3(mat4(vec4(mcol0, 0.0),\n vec4(mcol1, 0.0),\n vec4(mcol2, 0.0),\n vec4(mcol3, 1.0)) * vec4(position, 1.0));\n }\n \n void main() {\n vfState = vState;\n ")),this.fragmentShader=it.basic.fragmentShader.replace("void main() {","\n varying float vfState; \n void main() {\n if (vfState <= -0.99 && vfState >= -1.01) discard;\n \n ")};(xy.prototype=Object.create(jA.prototype)).constructor=xy;var Sy=function(A){this.viewer=A;var e=vc.SelectionColor.color;this.wireframeMaterial=new jA({color:e,opacity:1,transparent:!0,blending:5,blendSrc:201,blendDst:200,blendEquation:100}),this.selectedMaterial=new jA({color:e,opacity:.3,transparent:!0}),this.skinningWireframeMaterial=new jA({color:e,opacity:1,transparent:!0,blending:5,blendSrc:201,blendDst:200,blendEquation:100,skinning:!0}),this.skinningSelectedMaterial=new jA({color:e,opacity:.3,transparent:!0,skinning:!0}),this.selectedLineMaterial=new YC({color:e,opacity:1,transparent:!0,linewidth:2,dashed:!1}),this.instancedWireFrameMaterial=new xy({color:e,opacity:1,transparent:!0,blending:5,blendSrc:201,blendDst:200,blendEquation:100}),this.instancedSelectedMaterial=new xy({color:e,opacity:.3,transparent:!0}),this.selectionScene=new Y,this.selectionScene.autoUpdate=!1,this.selectionObjectGroup=new ep,this.selectionObjectGroup.name="PickingObjectGroup",this.selectionObjectGroup.matrixAutoUpdate=!1,this.selectionScene.add(this.selectionObjectGroup),this.lastSelectedUserIdMap=null,this.lastSelectedUserIds=null};Sy.prototype.destroy=function(){this.wireframeMaterial.dispose(),this.wireframeMaterial=null,this.selectedMaterial.dispose(),this.selectedMaterial=null,this.skinningWireframeMaterial.dispose(),this.skinningWireframeMaterial=null,this.skinningSelectedMaterial.dispose(),this.skinningSelectedMaterial=null,this.selectedLineMaterial.dispose(),this.selectedLineMaterial=null,this.instancedWireFrameMaterial.dispose(),this.instancedWireFrameMaterial=null,this.instancedSelectedMaterial.dispose(),this.instancedSelectedMaterial=null,this.selectionObjectGroup.clear(),this.selectionObjectGroup=null,this.selectionScene=null,this.lastSelectedUserIdMap=null,this.lastSelectedUserIds=null,this.viewer=null},Sy.prototype.apply=function(A){var e=this.viewer,t=e.getSelection();if(!t||!t.length)return this._clearSelectedUserIdsCache(),void this._clearMeshesFromScene();(A||this._isSelectionsChanged())&&(this._cacheSelectedUserIds(t),this._updateScene(t)),this._render(e.rendererManager.getRenderer(),e.camera)},Sy.prototype._isSelectionsChanged=function(){var A=this.lastSelectedUserIds;if(!A)return!0;var e=this.viewer.getSelection(),t=e.length;if(t!==A.length)return!0;for(var i=!1,o=this.lastSelectedUserIdMap,n=t-1;n>=0;n-=1)if(!o[e[n]]){i=!0;break}return i},Sy.prototype._cacheSelectedUserIds=function(A){this.lastSelectedUserIds=A.slice(0),this.lastSelectedUserIdMap=uh.arrayToMap(A)},Sy.prototype._clearSelectedUserIdsCache=function(){this.lastSelectedUserIds=null,this.lastSelectedUserIdMap=null},Sy.prototype._render=function(A,e){var t=A.autoClearColor,i=A.autoClearDepth,o=A.autoClearStencil;A.autoClearColor=!1,A.autoClearDepth=!0,A.autoClearStencil=!1,A.render(this.selectionScene,e),A.autoClearColor=t,A.autoClearDepth=i,A.autoClearStencil=o},Sy.prototype._updateScene=function(A){this._clearMeshesFromScene(),this._addMeshesToScene(this._getSelectedMeshes(A)),this._updateMatrixWorldForScene(),this._updateSelectedLineMaterial()},Sy.prototype._clearMeshesFromScene=function(){this.selectionObjectGroup.clear()},Sy.prototype._addMeshesToScene=function(A){for(var e=0,t=A.length;t>e;e+=1)this.selectionObjectGroup.add(A[e])},Sy.prototype._updateMatrixWorldForScene=function(){this.selectionObjectGroup.matrix.copy(this.viewer.getScene().getMatrixGlobal()),this.selectionObjectGroup.updateMatrixWorld(!0)},Sy.prototype._getSelectedMeshes=function(A){var e={meshes:[]},t=this,i=uh.arrayToMap(A);return this.viewer.getModelManager().traverseLoadedModels((function(o){o.getPickingMeshes(t,e,A,i)})),e.meshes},Sy.prototype._updateSelectedLineMaterial=function(){vc.PickingLineWidthEnabled&&this.selectedLineMaterial.resolution.set(this.viewer.domElement.offsetWidth,this.viewer.domElement.offsetHeight)},Sy.prototype.setSelectionColor=function(A,e){var t=this.selectedMaterial.opacity;e=void 0===e?t:e,"0x"+this.selectedMaterial.color.getHexString()===A&&t===e||(this.selectedMaterial.color.setHex(A),this.skinningSelectedMaterial.color.setHex(A),this.instancedSelectedMaterial.color.setHex(A),void 0===e&&null===e||(this.selectedMaterial.opacity=e,this.skinningSelectedMaterial.opacity=e,this.instancedSelectedMaterial.opacity=e,1>e?(this.selectedMaterial.transparent=!0,this.skinningSelectedMaterial.transparent=!0,this.instancedSelectedMaterial.transparent=!0):(this.selectedMaterial.transparent=!1,this.skinningSelectedMaterial.transparent=!1,this.instancedSelectedMaterial.transparent=!1)),this.selectedMaterial.needsUpdate=!0,this.skinningSelectedMaterial.needsUpdate=!0,this.instancedSelectedMaterial.needsUpdate=!0)},Sy.prototype.getSelectionColor=function(A,e){var t=this.selectedMaterial.opacity;return new Xh(this.selectedMaterial.color.getHex(),t)},Sy.prototype.setLineSelectionColor=function(A,e){var t=this.wireframeMaterial.opacity;e=void 0===e?t:e,"0x"+this.wireframeMaterial.color.getHexString()===A&&t===e||(this.wireframeMaterial.color.setHex(A),this.skinningWireframeMaterial.color.setHex(A),this.selectedLineMaterial.color.setHex(A),this.instancedWireFrameMaterial.color.setHex(A),void 0===e&&null===e||(this.wireframeMaterial.opacity=e,this.skinningWireframeMaterial.opacity=e,this.selectedLineMaterial.opacity=e,this.instancedWireFrameMaterial.opacity=e,1>e?(this.wireframeMaterial.transparent=!0,this.skinningWireframeMaterial.transparent=!0,this.selectedLineMaterial.transparent=!0,this.instancedWireFrameMaterial.transparent=!0):(this.wireframeMaterial.transparent=!1,this.skinningWireframeMaterial.transparent=!1,this.selectedLineMaterial.transparent=!1,this.instancedWireFrameMaterial.transparent=!1)),this.wireframeMaterial.needsUpdate=!0,this.skinningWireframeMaterial.needsUpdate=!0,this.selectedLineMaterial.needsUpdate=!0,this.instancedWireFrameMaterial.needsUpdate=!0)},Sy.prototype.getLineSelectionColor=function(){var A=this.wireframeMaterial.opacity;return new Xh(this.wireframeMaterial.color.getHex(),A)};var wy=new M,My=function(){function A(e){cc(this,A),e=e||{},this.vertices={near:[new y,new y,new y,new y],far:[new y,new y,new y,new y]},void 0!==e.projectionMatrix&&this.setFromProjectionMatrix(e.projectionMatrix,e.maxFar||1e4)}return dc(A,[{key:"setFromProjectionMatrix",value:function(A,e){var t=0===A.elements[11];return wy.getInverse(A),this.vertices.near[0].set(1,1,-1),this.vertices.near[1].set(1,-1,-1),this.vertices.near[2].set(-1,-1,-1),this.vertices.near[3].set(-1,1,-1),this.vertices.near.forEach((function(A){A.applyMatrix4(wy)})),this.vertices.far[0].set(1,1,1),this.vertices.far[1].set(1,-1,1),this.vertices.far[2].set(-1,-1,1),this.vertices.far[3].set(-1,1,1),this.vertices.far.forEach((function(A){A.applyMatrix4(wy);var i=Math.abs(A.z);t?A.z*=Math.min(e/i,1):A.multiplyScalar(Math.min(e/i,1))})),this.vertices}},{key:"split",value:function(e,t){for(;e.length>t.length;)t.push(new A);t.length=e.length;for(var i=0;e.length>i;i+=1){var o=t[i];if(0===i)for(var n=0;4>n;n+=1)o.vertices.near[n].copy(this.vertices.near[n]);else for(var r=0;4>r;r+=1)o.vertices.near[r].lerpVectors(this.vertices.near[r],this.vertices.far[r],e[i-1]);if(i===e-1)for(var a=0;4>a;a+=1)o.vertices.far[a].copy(this.vertices.far[a]);else for(var s=0;4>s;s+=1)o.vertices.far[s].lerpVectors(this.vertices.near[s],this.vertices.far[s],e[i])}}},{key:"toSpace",value:function(A,e){for(var t=0;4>t;t+=1)e.vertices.near[t].copy(this.vertices.near[t]).applyMatrix4(A),e.vertices.far[t].copy(this.vertices.far[t]).applyMatrix4(A)}}]),A}(),by={lights_fragment_begin:"\nGeometricContext geometry;\n\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n\n#ifdef CLEARCOAT\n\n\tgeometry.clearcoatNormal = clearcoatNormal;\n\n#endif\n\nIncidentLight directLight;\n\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\n\t\tpointLight = pointLights[ i ];\n\n\t\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\n\t}\n\n#endif\n\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\n\tSpotLight spotLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\n\t\tspotLight = spotLights[ i ];\n\n\t\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\n\t}\n\n#endif\n\n#if ( NUM_DIR_LIGHTS > 0) && defined( RE_Direct ) && defined( USE_CSM ) && defined( CSM_CASCADES )\n\n\tDirectionalLight directionalLight;\n\tfloat linearDepth = (vViewPosition.z) / (shadowFar - cameraNear);\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\n\t#if defined( USE_SHADOWMAP ) && defined( CSM_FADE )\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\n\t\t// NOTE: Depth gets larger away from the camera.\n\t\t// cascade.x is closer, cascade.y is further\n\t\tvec2 cascade = CSM_cascades[ i ];\n\t\tfloat cascadeCenter = ( cascade.x + cascade.y ) / 2.0;\n\t\tfloat closestEdge = linearDepth < cascadeCenter ? cascade.x : cascade.y;\n\t\tfloat margin = 0.25 * pow( closestEdge, 2.0 );\n\t\tfloat csmx = cascade.x - margin / 2.0;\n\t\tfloat csmy = cascade.y + margin / 2.0;\n\t\tif( i < NUM_DIR_LIGHT_SHADOWS && linearDepth >= csmx && ( linearDepth < csmy || i == CSM_CASCADES - 1 ) ) {\n\n\t\t\tfloat dist = min( linearDepth - csmx, csmy - linearDepth );\n\t\t\tfloat ratio = clamp( dist / margin, 0.0, 1.0 );\n\t\t\tif( i < NUM_DIR_LIGHT_SHADOWS ) {\n\n\t\t\t\tvec3 prevColor = directLight.color;\n\t\t\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\t\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\n\t\t\t\tbool shouldFadeLastCascade = i == CSM_CASCADES - 1 && linearDepth > cascadeCenter;\n\t\t\t\tdirectLight.color = mix( prevColor, directLight.color, shouldFadeLastCascade ? ratio : 1.0 );\n\n\t\t\t}\n\n\t\t\tReflectedLight prevLight = reflectedLight;\n\t\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\n\t\t\tbool shouldBlend = i != CSM_CASCADES - 1 || i == CSM_CASCADES - 1 && linearDepth < cascadeCenter;\n\t\t\tfloat blendRatio = shouldBlend ? ratio : 1.0;\n\n\t\t\treflectedLight.directDiffuse = mix( prevLight.directDiffuse, reflectedLight.directDiffuse, blendRatio );\n\t\t\treflectedLight.directSpecular = mix( prevLight.directSpecular, reflectedLight.directSpecular, blendRatio );\n\t\t\treflectedLight.indirectDiffuse = mix( prevLight.indirectDiffuse, reflectedLight.indirectDiffuse, blendRatio );\n\t\t\treflectedLight.indirectSpecular = mix( prevLight.indirectSpecular, reflectedLight.indirectSpecular, blendRatio );\n\n\t\t}\n\n\t}\n\t#else\n\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tif(linearDepth >= CSM_cascades[UNROLLED_LOOP_INDEX].x && linearDepth < CSM_cascades[UNROLLED_LOOP_INDEX].y) directLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\n\t\t#endif\n\n\t\tif(linearDepth >= CSM_cascades[UNROLLED_LOOP_INDEX].x && (linearDepth < CSM_cascades[UNROLLED_LOOP_INDEX].y || UNROLLED_LOOP_INDEX == CSM_CASCADES - 1)) RE_Direct( directLight, geometry, material, reflectedLight );\n\n\t}\n\n\t#endif\n\n#endif\n\n\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct ) && !defined( USE_CSM ) && !defined( CSM_CASCADES )\n\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\n\t\tdirectionalLight = directionalLights[ i ];\n\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\n\t}\n\n#endif\n\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\n\tRectAreaLight rectAreaLight;\n\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\n\t}\n\n#endif\n\n#if defined( RE_IndirectDiffuse )\n\n\tvec3 iblIrradiance = vec3( 0.0 );\n\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\n\tirradiance += getLightProbeIrradiance( lightProbe, geometry );\n\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\n\t\t#pragma unroll_loop\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\n\t\t}\n\n\t#endif\n\n#endif\n\n#if defined( RE_IndirectSpecular )\n\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n\n#endif\n",lights_pars_begin:"\n#if defined( USE_CSM ) && defined( CSM_CASCADES )\nuniform vec2 CSM_cascades[CSM_CASCADES];\nuniform float cameraNear;\nuniform float shadowFar;\n#endif\n\t"+tt.lights_pars_begin},Uy=new M,Fy=new My,Ky=new My,Qy=new y,Ry=new aA,Ty=[],ky=[],Dy=function(){function A(e){cc(this,A),this.camera=(e=e||{}).camera,this.parent=e.parent,this.cascades=e.cascades||3,this.maxFar=e.maxFar||1e5,this.mode=e.mode||"practical",this.shadowMapSize=e.shadowMapSize||2048,this.shadowBias=e.shadowBias||1e-6,this.lightDirection=e.lightDirection||new y(1,-1,1).normalize(),this.lightIntensity=e.lightIntensity||1,this.lightNear=e.lightNear||1,this.lightFar=e.lightFar||2e3,this.lightMargin=e.lightMargin||200,this.customSplitsCallback=e.customSplitsCallback,this.fade=!1,this.mainFrustum=new My,this.frustums=[],this.breaks=[],this.lights=[],this.shaders=new Map,this.createLights(),this.getBreaks(),this.initCascades(),this.injectInclude()}return dc(A,[{key:"createLights",value:function(){for(var A=0;this.cascades>A;A++){var e=new Ra(16777215,this.lightIntensity);e.castShadow=!0,e.intensity=.72,e.distance=300,e.color.setHex(14800580),e.position.set(-100,100,160),e.shadow.mapSize.width=this.shadowMapSize,e.shadow.mapSize.height=this.shadowMapSize,e.shadow.camera.near=this.lightNear,e.shadow.camera.far=this.lightFar,e.shadow.bias=this.shadowBias,e.updateMatrixWorld(),this.parent.add(e),this.parent.add(e.target),this.lights.push(e)}}},{key:"initCascades",value:function(){var A=this.camera;A.updateProjectionMatrix(),this.mainFrustum.setFromProjectionMatrix(A.projectionMatrix,this.maxFar),this.mainFrustum.split(this.breaks,this.frustums)}},{key:"getBreaks",value:function(){var A=this.camera,e=Math.min(A.far,this.maxFar);switch(this.breaks.length=0,this.mode){case"uniform":t(this.cascades,A.near,e,this.breaks);break;case"logarithmic":i(this.cascades,A.near,e,this.breaks);break;case"practical":!function(A,e,o,n,r){Ty.length=0,ky.length=0,i(A,e,o,ky),t(A,e,o,Ty);for(var s=1;A>s;s++)r.push(a.lerp(Ty[s-1],ky[s-1],n));r.push(1)}(this.cascades,A.near,e,.5,this.breaks);break;case"custom":void 0===this.customSplitsCallback&&console.error("CSM: Custom split scheme callback not defined."),this.customSplitsCallback(this.cascades,A.near,e,this.breaks)}function t(A,e,t,i){for(var o=1;A>o;o++)i.push((e+(t-e)*o/A)/t);i.push(1)}function i(A,e,t,i){for(var o=1;A>o;o++)i.push(e*(t/e)*(o/A)/t);i.push(1)}}},{key:"update",value:function(A){for(var e=this.frustums,t=0;e.length>t;t++){var i=this.lights[t];i.shadow.camera.updateMatrixWorld(!0),Uy.multiplyMatrices(i.shadow.camera.matrixWorldInverse,A),e[t].toSpace(Uy,Fy);var o=Fy.vertices.near,n=Fy.vertices.far,r=n[0],a=void 0;a=r.distanceTo(n[2])>r.distanceTo(o[2])?n[2]:o[2];var s=r.distanceTo(a);Ry.makeEmpty();for(var l=0;4>l;l++)Ry.expandByPoint(o[l]),Ry.expandByPoint(n[l]);if(this.fade){var c=this.camera,h=Math.max(c.far,this.maxFar);s+=.25*Math.pow(e[t].vertices.far[0].z/(h-c.near),2)*(h-c.near)}var d=s/this.shadowMapSize;Ry.getCenter(Qy),Qy.z=Ry.max.z+this.lightMargin,Qy.x=Math.floor(Qy.x/d)*d,Qy.y=Math.floor(Qy.y/d)*d,Qy.applyMatrix4(i.shadow.camera.matrixWorld),i.shadow.camera.left=-s/2,i.shadow.camera.right=s/2,i.shadow.camera.top=s/2,i.shadow.camera.bottom=-s/2,i.position.copy(Qy),i.target.position.copy(Qy),i.target.position.x+=this.lightDirection.x,i.target.position.y+=this.lightDirection.y,i.target.position.z+=this.lightDirection.z,i.shadow.camera.updateProjectionMatrix(),i.shadow.camera.updateMatrixWorld()}}},{key:"injectInclude",value:function(){tt.lights_fragment_begin=by.lights_fragment_begin,tt.lights_pars_begin=by.lights_pars_begin}},{key:"setupMaterial",value:function(A){A.defines=A.defines||{},A.defines.USE_CSM=1,A.defines.CSM_CASCADES=this.cascades,this.fade&&(A.defines.CSM_FADE="");var e=[],t=this,i=this.shaders;A.onBeforeCompile=function(o){var n=Math.min(t.camera.far,t.maxFar);t.getExtendedBreaks(e),console.log("www",e,e.length),o.uniforms.CSM_cascades={value:e},o.uniforms.cameraNear={value:t.camera.near},o.uniforms.shadowFar={value:n},i.set(A,o)},i.set(A,null)}},{key:"updateUniforms",value:function(){var A=Math.min(this.camera.far,this.maxFar);this.shaders.forEach((function(e,t){if(null!==e){var i=e.uniforms;this.getExtendedBreaks(i.CSM_cascades.value),i.cameraNear.value=this.camera.near,i.shadowFar.value=A}!this.fade&&"CSM_FADE"in t.defines?(delete t.defines.CSM_FADE,t.needsUpdate=!0):this.fade&&!("CSM_FADE"in t.defines)&&(t.defines.CSM_FADE="",t.needsUpdate=!0)}),this)}},{key:"getExtendedBreaks",value:function(A){for(;this.breaks.length>A.length;)A.push(new s);A.length=this.breaks.length;for(var e=0;this.cascades>e;e++){var t=this.breaks[e];A[e].x=this.breaks[e-1]||0,A[e].y=t}}},{key:"updateFrustums",value:function(){this.getBreaks(),this.initCascades(),this.updateUniforms()}},{key:"helper",value:function(A){for(var e,t,i=new ko({color:16777215}),o=new H,n=0;this.frustums.length>n;n++){this.frustums[n].toSpace(A,Ky),e=new he,t=[];for(var r=0;5>r;r++){var a=Ky.vertices.near[4===r?0:r];t.push(a.x,a.y,a.z)}e.setAttribute("position",new YA(new Float32Array(t),3)),o.add(new Go(e,i)),e=new he,t=[];for(var s=0;5>s;s++){var l=Ky.vertices.far[4===s?0:s];t.push(l.x,l.y,l.z)}e.setAttribute("position",new YA(new Float32Array(t),3)),o.add(new Go(e,i));for(var c=0;4>c;c++){e=new he;var h=Ky.vertices.near[c],d=Ky.vertices.far[c];(t=[]).push(h.x,h.y,h.z),t.push(d.x,d.y,d.z),e.setAttribute("position",new YA(new Float32Array(t),3)),o.add(new Go(e,i))}}return o}},{key:"remove",value:function(){for(var A=0;this.lights.length>A;A++)this.parent.remove(this.lights[A])}},{key:"dispose",value:function(){var A=this.shaders;A.forEach((function(A,e){delete e.onBeforeCompile,delete e.defines.USE_CSM,delete e.defines.CSM_CASCADES,delete e.defines.CSM_FADE,delete A.uniforms.CSM_cascades,delete A.uniforms.cameraNear,delete A.uniforms.shadowFar,e.needsUpdate=!0})),A.clear()}}]),A}(),Ly=function(A){this.viewer=A,this.renderer=null,this.countRenderRequest=0,this.maxCountRenderRequest=1e4,this.rendering=!1,this.incrementRenderHandle=0,this.composer=null,this.blinkHandle=0,this.transparentSort=function(A,e){return A.groupOrder!==e.groupOrder?A.groupOrder-e.groupOrder:A.renderOrder!==e.renderOrder?A.renderOrder-e.renderOrder:A.z!==e.z?e.z-A.z:A.id-e.id}};Ly.prototype.destroy=function(){this.incrementRenderHandle>0&&cancelAnimationFrame(this.incrementRenderHandle),this.blinkHandle>0&&cancelAnimationFrame(this.blinkHandle),this.composer&&(this.composer.destroy(),this.composer=null),this.renderer&&(this.renderer.destroy&&this.orderedRenderer&&(this.renderer.destroy(),this.renderer.setRenderer&&this.renderer.setRenderer(null),this.orderedRenderer=null),this.renderer.dispose(),this.renderer.domElement.parentNode&&this.renderer.domElement.parentNode.removeChild(this.renderer.domElement)),this.renderer=null,this.pickingEffecter&&(this.pickingEffecter.destroy(),this.pickingEffecter=null),this.viewer=null},Ly.prototype.setupRenderer=function(A){if(!this.renderer){var e=this.viewer;this.renderer=new $i(A);var t=e.domElement.offsetWidth,i=e.domElement.offsetHeight;this.renderer.toneMapping=1,this.renderer.setTransparentSort(this.transparentSort),this.renderer.setClearColor(0,0),this.renderer.setPixelRatio(window.devicePixelRatio||1),this.renderer.setSize(t,i),this.renderer.sortObjects=!0,this.renderer.domElement.setAttribute("tabindex","0"),this.renderer.domElement.setAttribute("class","main-canvas"),e.domElement.appendChild(this.renderer.domElement),this.composer=new By(this.renderer),this.composer.init(e.modelManager,e.getScene(),e.camera,t,i),this.composer.setOutlineEdgeColor(new Xh(vc.SelectionColor.color,vc.SelectionColor.opacity))}},Ly.prototype.resetupRenderer=function(A){var e=this.viewer;A.context=this.renderer.getContext();var t=new $i(A);t.setClearColor(this.renderer.getClearColor(),this.renderer.getClearAlpha()),t.setPixelRatio(this.renderer.getPixelRatio());var i=this.renderer.getSize(new s);t.setSize(i.x,i.y),t.gammaFactor=this.renderer.gammaFactor,t.sortObjects=this.renderer.sortObjects,t.domElement=this.renderer.domElement,t.toneMapping=this.renderer.toneMapping,t.shadowMap.enabled=this.renderer.shadowMap.enabled,t.clippingPlanes=this.renderer.clippingPlanes,t.shadowMap.enabled=this.renderer.shadowMap.enabled,t.shadowMap.type=this.renderer.shadowMap.type,t.shadowMap.autoUpdate=this.renderer.shadowMap.autoUpdate,t.shadowMap.needsUpdate=this.renderer.shadowMap.needsUpdate,t.setTransparentSort(this.transparentSort),this.renderer=t,this.composer.reinit(this.renderer,e.modelManager,e.getScene(),e.camera,i.x,i.y)},Ly.prototype.setupShadowMap=function(A){var e=this.viewer,t=new Dy({maxFar:A.far,cascades:4,mode:A.mode,parent:e.getScene().getExternalScene(),shadowMapSize:1024,lightDirection:new y(A.lightX,A.lightY,A.lightZ).normalize(),camera:e.camera});this.csm=t;var i=new $m;i.add(A,"orthographic").onChange((function(A){})),i.add(A,"fade").onChange((function(A){t.fade=A,t.updateFrustums()})),i.add(A,"far",1,5e7).step(1).name("shadow far").onChange((function(A){t.maxFar=A,t.updateFrustums()})),i.add(A,"mode",["uniform","logarithmic","practical"]).name("frustum split mode").onChange((function(A){t.mode=A,t.updateFrustums()})),i.add(A,"lightX",-1,1).name("light direction x").onChange((function(A){t.lightDirection.x=A})),i.add(A,"lightY",-1,1).name("light direction y").onChange((function(A){t.lightDirection.y=A})),i.add(A,"lightZ",-1,1).name("light direction z").onChange((function(A){t.lightDirection.z=A})),i.add(A,"margin",0,2e6).name("light margin").onChange((function(A){t.lightMargin=A})),i.add(A,"lightNear",1,1e7).name("light near").onChange((function(A){for(var e=0;t.lights.length>e;e+=1)t.lights[e].shadow.camera.near=A,t.lights[e].shadow.camera.updateProjectionMatrix()})),i.add(A,"lightFar",1,1e8).name("light far").onChange((function(A){for(var e=0;t.lights.length>e;e+=1)t.lights[e].shadow.camera.far=A,t.lights[e].shadow.camera.updateProjectionMatrix()}))},Ly.prototype._applyPickingEffectForIncrement=function(){if(this.getPickingEffecter()){var A=this.viewer.modelManager.isFilterApplied();this.orderedRenderer.restart(),this.orderedRenderer.setNonBreakingRender(!0),this.pickingEffecter.apply(A),this.orderedRenderer.setNonBreakingRender(!1)}},Ly.prototype._applyPickingEffect=function(){if(this.getPickingEffecter()){var A=this.viewer.modelManager.isFilterApplied();this.pickingEffecter.apply(A)}},Ly.prototype._forceRenderOneFrame=function(){var A=this.viewer,e=A.camera,t=A.modelManager.getScene();this.orderedRenderer?(this.orderedRenderer.restart(),this.orderedRenderer.setNonBreakingRender(!0),this.renderer.render(t,e,null,!0),this.orderedRenderer.setNonBreakingRender(!1)):(this.renderer.setRenderTarget(null),this.renderer.clear(),this.renderer.render(t,e))},Ly.prototype.incrementRender=function(A){if(this.countRenderRequest+=1,this.countRenderRequest>this.maxCountRenderRequest&&(this.countRenderRequest=0),!this.rendering&&!this.pickingEffectRendering){this.rendering=!0;var e=this,t=this.viewer,i=t.camera,o=t.modelManager,n=t.editorManager,r=t.getScene(),a=this.renderer;o.calculateCameraModelRelation(i.position),t.cameraControl.updateCamera(),t.calculateNearFar(),r.updateLights(i);var s=n.isUpdateRenderList;a.resetIncrementRender(),a.setObjectListUpdateState(s),s&&o.prepareScene(i),this.incrementRenderHandle=requestAnimationFrame(function A(s,l){var c=s;return function(){a.autoClear=l,n.cameraChange?(a.resetIncrementRender(),a.autoClear=!0,n.cameraChange=!1):a.autoClear=l,a.render(r,i)||c!==e.countRenderRequest?(e.rendering=!1,c!==e.countRenderRequest?t.render():(e.pickingEffectRendering=!0,e._applyPickingEffectForIncrement(),o.setFilterApplied(!1),t.onRenderFinishedCallback(),o.disposeBufferAfterVbo(),e.pickingEffectRendering=!1)):e.incrementRenderHandle=requestAnimationFrame(A(c,!1))}}(e.countRenderRequest,!0)),t.onRenderCallback(),t.cameraControl.setCameraChanging(!1)}},Ly.prototype.fullRender=function(){var A=this,e=this.viewer,t=e.camera,i=e.modelManager,o=e.getScene(),n=this.renderer;this.blinkHandle>0&&cancelAnimationFrame(this.blinkHandle),function r(){e.cameraControl.updateCamera(),e.calculateNearFar(),o.updateLights(t),i.getBlinkEnabled()&&i.updateBlinkMaterial();var a=o.fillClipPlane&&o.fillClipPlane.visible,s=o.clipPlanes&&o.clipPlanes.visible&&vc.EnableBoxClippingCaps;if(vc.ClippingCaps&&(a||s)&&vc.EnableClippingCaps){if(a||s){var l=o.getFillClipPlane(),c=o.getClipPlanes(),h=e.modelManager.getModelKeys();i.prepareCapScene(),n.clear(),n.autoClear=!1,a?(l.capPlane.planeMesh.visible=!0,l.capPlane.lineMesh.visible=!0,c.boxMesh.visible=!1):(l.capPlane.planeMesh.visible=!1,l.capPlane.lineMesh.visible=!1,c.boxMesh.visible=!0),l.planeHighLightMatrial.visible=!1,c.planeHighLightMatrial.visible=!1,c.planeMaterial.visible=!1,o.overrideMaterial=o.backMaterial;for(var d={},p=0,g=h.length;g>p;p+=1){var u=h[p],f=e.modelManager.getModel(u);if(d[u]={},f){var m=f._getNodeGroup(gp.GEOMETRY,{globalSpace:!0});d[u][gp.GEOMETRY]=m.visible,m=f._getNodeGroup(gp.WIREFRAME,{globalSpace:!0}),d[u][gp.WIREFRAME]=m.visible,m=f._getNodeGroup(gp.INSTANCEGEOMETRY,{globalSpace:!0}),d[u][gp.INSTANCEGEOMETRY]=m.visible,m.visible=!1,m=f._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY,{globalSpace:!0}),d[u][gp.INSTANCEWIREFRAMEGEOMETRY]=m.visible,m.visible=!1}}n.render(o,t),o.overrideMaterial=o.backInstanceMaterial;for(var C=0,y=h.length;y>C;C+=1){var v=h[C],I=e.modelManager.getModel(v);if(I){var E=I._getNodeGroup(gp.GEOMETRY,{globalSpace:!0});E.visible=!1,(E=I._getNodeGroup(gp.WIREFRAME,{globalSpace:!0})).visible=!1,(E=I._getNodeGroup(gp.INSTANCEGEOMETRY,{globalSpace:!0})).visible=d[v][gp.INSTANCEGEOMETRY],(E=I._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY,{globalSpace:!0})).visible=d[v][gp.INSTANCEWIREFRAMEGEOMETRY]}}n.render(o,t),o.overrideMaterial=o.frontMaterial;for(var B=0,x=h.length;x>B;B+=1){var S=h[B],w=e.modelManager.getModel(S);if(w){var M=w._getNodeGroup(gp.GEOMETRY,{globalSpace:!0});M.visible=d[S][gp.GEOMETRY],(M=w._getNodeGroup(gp.WIREFRAME,{globalSpace:!0})).visible=d[S][gp.WIREFRAME],M=w._getNodeGroup(gp.INSTANCEGEOMETRY,{globalSpace:!0}),d[S][gp.INSTANCEGEOMETRY]=M.visible,M.visible=!1,M=w._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY,{globalSpace:!0}),d[S][gp.INSTANCEWIREFRAMEGEOMETRY]=M.visible,M.visible=!1}}n.render(o,t),o.overrideMaterial=o.frontInstanceMaterial;for(var b=0,U=h.length;U>b;b+=1){var F=h[b],K=e.modelManager.getModel(F);if(K){var Q=K._getNodeGroup(gp.GEOMETRY,{globalSpace:!0});Q.visible=!1,(Q=K._getNodeGroup(gp.WIREFRAME,{globalSpace:!0})).visible=!1,(Q=K._getNodeGroup(gp.INSTANCEGEOMETRY,{globalSpace:!0})).visible=d[F][gp.INSTANCEGEOMETRY],(Q=K._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY,{globalSpace:!0})).visible=d[F][gp.INSTANCEWIREFRAMEGEOMETRY]}}n.render(o,t),n.render(i.capsScene,t),o.overrideMaterial=null,l.planeHighLightMatrial.visible=!0,c.planeHighLightMatrial.visible=!0,c.planeMaterial.visible=!0;for(var R=0,T=h.length;T>R;R+=1){var k=h[R],D=e.modelManager.getModel(k);if(D){var L=D._getNodeGroup(gp.GEOMETRY,{globalSpace:!0});L.visible=d[k][gp.GEOMETRY],(L=D._getNodeGroup(gp.WIREFRAME,{globalSpace:!0})).visible=d[k][gp.WIREFRAME],(L=D._getNodeGroup(gp.INSTANCEGEOMETRY,{globalSpace:!0})).visible=d[k][gp.INSTANCEGEOMETRY],(L=D._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY,{globalSpace:!0})).visible=d[k][gp.INSTANCEWIREFRAMEGEOMETRY]}}d=null,n.render(o,t)}}else!vc.PickingEffect&&vc.EnableSelectionOutline&&A.composer&&e.getSelection().length>0?A.composer.render():(n.setRenderTarget(null),n.clear(),n.render(o,t));A._applyPickingEffect(),i.setFilterApplied(!1),e.onRenderListener(),e.onRenderFinishedListener(),e.cameraControl.isCameraChanging()&&i.dispatchEvent({type:Rc.ON_CAMERA_CHANGED_AND_RENDERED}),e.cameraControl.setCameraChanging(!1),i.getBlinkEnabled()&&(A.blinkHandle=requestAnimationFrame(r)),i.disposeBufferAfterVbo()}()},Ly.prototype.fillCavityRender=function(A){var e=this.viewer,t=e.camera,i=e.modelManager,o=this.renderer,n=e.getScene();function r(A,e,t,i){var o=new Xi,n=new jA;n.depthWrite=!1,n.depthTest=!1,n.colorWrite=!1,n.stencilWrite=!0,n.stencilFunc=519;var r=n.clone();r.side=1,r.clippingPlanes=[e],r.stencilFail=34055,r.stencilZFail=34055,r.stencilZPass=34055;var a=new Ue(A,r);a.matrixWorld=i.matrixWorld,a.renderOrder=t,o.add(a);var s=n.clone();s.side=0,s.clippingPlanes=[e],s.stencilFail=34056,s.stencilZFail=34056,s.stencilZPass=34056;var l=new Ue(A,s);return l.renderOrder=t,l.matrixWorld=i.matrixWorld,o.add(l),o}this.blinkHandle>0&&cancelAnimationFrame(this.blinkHandle),function A(){e.cameraControl.updateCamera(),e.calculateNearFar(),n.updateLights(t),i.getBlinkEnabled()&&i.updateBlinkMaterial();var a=n.fillClipPlane&&n.fillClipPlane.visible,s=n.clipPlanes&&n.clipPlanes.visible,l=o.autoClear,c=o.sortObjects;if(vc.ClippingCaps&&(a||s)){if(a){var h=n.getFillClipPlane(),d=n.getClipPlanes(),p=e.modelManager.getModelKeys();i.prepareCapScene(),o.clear(),o.autoClear=!1,a?(h.capPlane.planeMesh.visible=!0,h.capPlane.lineMesh.visible=!0,d.boxMesh.visible=!1):(h.capPlane.planeMesh.visible=!1,h.capPlane.lineMesh.visible=!1,d.boxMesh.visible=!0),h.planeHighLightMatrial.visible=!1,d.planeHighLightMatrial.visible=!1,d.planeMaterial.visible=!1,n.overrideMaterial=n.backMaterial;for(var g={},u=0,f=p.length;f>u;u+=1){var m=p[u],C=e.modelManager.getModel(m);if(g[m]={},C){var y=C._getNodeGroup(gp.GEOMETRY,{globalSpace:!0});g[m][gp.GEOMETRY]=y.visible,y=C._getNodeGroup(gp.WIREFRAME,{globalSpace:!0}),g[m][gp.WIREFRAME]=y.visible,y=C._getNodeGroup(gp.INSTANCEGEOMETRY,{globalSpace:!0}),g[m][gp.INSTANCEGEOMETRY]=y.visible,y.visible=!1,y=C._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY,{globalSpace:!0}),g[m][gp.INSTANCEWIREFRAMEGEOMETRY]=y.visible,y.visible=!1}}o.render(n,t),n.overrideMaterial=n.backInstanceMaterial;for(var v=0,I=p.length;I>v;v+=1){var E=p[v],B=e.modelManager.getModel(E);if(B){var x=B._getNodeGroup(gp.GEOMETRY,{globalSpace:!0});x.visible=!1,(x=B._getNodeGroup(gp.WIREFRAME,{globalSpace:!0})).visible=!1,(x=B._getNodeGroup(gp.INSTANCEGEOMETRY,{globalSpace:!0})).visible=g[E][gp.INSTANCEGEOMETRY],(x=B._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY,{globalSpace:!0})).visible=g[E][gp.INSTANCEWIREFRAMEGEOMETRY]}}o.render(n,t),n.overrideMaterial=n.frontMaterial;for(var S=0,w=p.length;w>S;S+=1){var M=p[S],b=e.modelManager.getModel(M);if(b){var U=b._getNodeGroup(gp.GEOMETRY,{globalSpace:!0});U.visible=g[M][gp.GEOMETRY],(U=b._getNodeGroup(gp.WIREFRAME,{globalSpace:!0})).visible=g[M][gp.WIREFRAME],U=b._getNodeGroup(gp.INSTANCEGEOMETRY,{globalSpace:!0}),g[M][gp.INSTANCEGEOMETRY]=U.visible,U.visible=!1,U=b._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY,{globalSpace:!0}),g[M][gp.INSTANCEWIREFRAMEGEOMETRY]=U.visible,U.visible=!1}}o.render(n,t),n.overrideMaterial=n.frontInstanceMaterial;for(var F=0,K=p.length;K>F;F+=1){var Q=p[F],R=e.modelManager.getModel(Q);if(R){var T=R._getNodeGroup(gp.GEOMETRY,{globalSpace:!0});T.visible=!1,(T=R._getNodeGroup(gp.WIREFRAME,{globalSpace:!0})).visible=!1,(T=R._getNodeGroup(gp.INSTANCEGEOMETRY,{globalSpace:!0})).visible=g[Q][gp.INSTANCEGEOMETRY],(T=R._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY,{globalSpace:!0})).visible=g[Q][gp.INSTANCEWIREFRAMEGEOMETRY]}}o.render(n,t),o.render(i.capsScene,t),n.overrideMaterial=null,a?h.planeHighLightMatrial.visible=!0:(d.planeHighLightMatrial.visible=!0,d.planeMaterial.visible=!0);for(var k=0,D=p.length;D>k;k+=1){var L=p[k],N=e.modelManager.getModel(L);if(N){var O=N._getNodeGroup(gp.GEOMETRY,{globalSpace:!0});O.visible=g[L][gp.GEOMETRY],(O=N._getNodeGroup(gp.WIREFRAME,{globalSpace:!0})).visible=g[L][gp.WIREFRAME],(O=N._getNodeGroup(gp.INSTANCEGEOMETRY,{globalSpace:!0})).visible=g[L][gp.INSTANCEGEOMETRY],(O=N._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY,{globalSpace:!0})).visible=g[L][gp.INSTANCEWIREFRAMEGEOMETRY]}}g=null,o.render(n,t)}if(s){o.clear(),o.autoClear=!1,o.sortObjects=!0,o.localClippingEnabled=!0;var V=e.modelManager.getModelKeys(),G=o.clippingPlanes;o.clippingPlanes=[];var P=n.getClipPlanes(),q=new Y;q.autoUpdate=!1;for(var j=0,H=n.lightArray.length;H>j;j+=1)q.add(n.lightArray[j].clone());for(var W=[],J=0;6>J;J+=1)W[J]=P.children[J].clone();for(var z=0,Z=V.length;Z>z;z+=1){var X=e.modelManager.getModel(V[z]);if(X)for(var _=X._getNodeGroup(gp.GEOMETRY,{globalSpace:!0}),$=0,AA=_.children.length;AA>$;$+=1){var eA=new Xi;eA.name="object";var tA=[],iA=[];q.add(eA);var oA=_.children[$];if(oA.visible){for(var nA=oA.geometry,rA=[],aA=0;6>aA;aA+=1)rA[aA]=G[aA].clone();for(var sA=function(A){(cA=new Xi).name="poGroup";var e=rA[A];(hA=r(nA,e,A+1,oA)).name="stencilGroup",dA=new yr({color:oA.material[0].color,metalness:.1,roughness:.75,clippingPlanes:rA.filter((function(A){return A!==e})),stencilWrite:!0,stencilRef:0,stencilFunc:517,stencilFail:7681,stencilZFail:7681,stencilZPass:7681});var t=W[A].clone();t.material=dA,t.testNumber=A,t.onAfterRender=function(){o.clearStencil()},t.renderOrder=A+1.1,eA.add(hA),cA.add(t),tA.push(t),q.add(cA),iA.push(cA)},lA=0;6>lA;lA+=1){var cA,hA,dA;sA(lA)}for(var pA=oA.clone(),gA=0,uA=pA.material.length;uA>gA;gA+=1)pA.material[gA].clippingPlanes=rA;pA.renderOrder=6,eA.add(pA),o.render(q,t),q.remove(eA);for(var fA=0,mA=iA.length;mA>fA;fA+=1)q.remove(iA[fA]);tA=null}}}o.sortObjects=c,o.clippingPlanes=G,o.autoClear=l,o.localClippingEnabled=!1}}else vc.EnableSelectionOutline&&e.composer&&e.getSelection().length>0?e.composer.render():(o.setRenderTarget(null),o.clear(),o.render(n,t));e.onRenderListener(),e.onRenderFinishedListener(),e.cameraControl.setCameraChanging(!1),i.getBlinkEnabled()&&(e.blinkHandle=requestAnimationFrame(A)),i.disposeBufferAfterVbo()}()},Ly.prototype.fillCavityRender2=function(A){var e=this.viewer,t=e.camera,i=e.modelManager,o=this.renderer,n=e.getScene();this.blinkHandle>0&&cancelAnimationFrame(this.blinkHandle),function A(){e.cameraControl.updateCamera(),e.calculateNearFar(),n.updateLights(t),i.getBlinkEnabled()&&i.updateBlinkMaterial();var r=n.fillClipPlane&&n.fillClipPlane.visible,a=n.clipPlanes&&n.clipPlanes.visible,s=o.autoClear;if(vc.ClippingCaps&&(r||a)){if(r){var l=n.getFillClipPlane(),c=n.getClipPlanes(),h=e.modelManager.getModelKeys();i.prepareCapScene(),o.clear(),o.autoClear=!1,r?(l.capPlane.planeMesh.visible=!0,l.capPlane.lineMesh.visible=!0,c.boxMesh.visible=!1):(l.capPlane.planeMesh.visible=!1,l.capPlane.lineMesh.visible=!1,c.boxMesh.visible=!0),l.planeHighLightMatrial.visible=!1,c.planeHighLightMatrial.visible=!1,c.planeMaterial.visible=!1,n.overrideMaterial=n.backMaterial;for(var d={},p=0,g=h.length;g>p;p+=1){var u=h[p],f=e.modelManager.getModel(u);if(d[u]={},f){var m=f._getNodeGroup(gp.GEOMETRY,{globalSpace:!0});d[u][gp.GEOMETRY]=m.visible,m=f._getNodeGroup(gp.WIREFRAME,{globalSpace:!0}),d[u][gp.WIREFRAME]=m.visible,m=f._getNodeGroup(gp.INSTANCEGEOMETRY,{globalSpace:!0}),d[u][gp.INSTANCEGEOMETRY]=m.visible,m.visible=!1,m=f._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY,{globalSpace:!0}),d[u][gp.INSTANCEWIREFRAMEGEOMETRY]=m.visible,m.visible=!1}}o.render(n,t),n.overrideMaterial=n.backInstanceMaterial;for(var C=0,y=h.length;y>C;C+=1){var v=h[C],I=e.modelManager.getModel(v);if(I){var E=I._getNodeGroup(gp.GEOMETRY,{globalSpace:!0});E.visible=!1,(E=I._getNodeGroup(gp.WIREFRAME,{globalSpace:!0})).visible=!1,(E=I._getNodeGroup(gp.INSTANCEGEOMETRY,{globalSpace:!0})).visible=d[v][gp.INSTANCEGEOMETRY],(E=I._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY,{globalSpace:!0})).visible=d[v][gp.INSTANCEWIREFRAMEGEOMETRY]}}o.render(n,t),n.overrideMaterial=n.frontMaterial;for(var B=0,x=h.length;x>B;B+=1){var S=h[B],w=e.modelManager.getModel(S);if(w){var M=w._getNodeGroup(gp.GEOMETRY,{globalSpace:!0});M.visible=d[S][gp.GEOMETRY],(M=w._getNodeGroup(gp.WIREFRAME,{globalSpace:!0})).visible=d[S][gp.WIREFRAME],M=w._getNodeGroup(gp.INSTANCEGEOMETRY,{globalSpace:!0}),d[S][gp.INSTANCEGEOMETRY]=M.visible,M.visible=!1,M=w._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY,{globalSpace:!0}),d[S][gp.INSTANCEWIREFRAMEGEOMETRY]=M.visible,M.visible=!1}}o.render(n,t),n.overrideMaterial=n.frontInstanceMaterial;for(var b=0,U=h.length;U>b;b+=1){var F=h[b],K=e.modelManager.getModel(F);if(K){var Q=K._getNodeGroup(gp.GEOMETRY,{globalSpace:!0});Q.visible=!1,(Q=K._getNodeGroup(gp.WIREFRAME,{globalSpace:!0})).visible=!1,(Q=K._getNodeGroup(gp.INSTANCEGEOMETRY,{globalSpace:!0})).visible=d[F][gp.INSTANCEGEOMETRY],(Q=K._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY,{globalSpace:!0})).visible=d[F][gp.INSTANCEWIREFRAMEGEOMETRY]}}o.render(n,t),o.render(i.capsScene,t),n.overrideMaterial=null,r?l.planeHighLightMatrial.visible=!0:(c.planeHighLightMatrial.visible=!0,c.planeMaterial.visible=!0);for(var R=0,T=h.length;T>R;R+=1){var k=h[R],D=e.modelManager.getModel(k);if(D){var L=D._getNodeGroup(gp.GEOMETRY,{globalSpace:!0});L.visible=d[k][gp.GEOMETRY],(L=D._getNodeGroup(gp.WIREFRAME,{globalSpace:!0})).visible=d[k][gp.WIREFRAME],(L=D._getNodeGroup(gp.INSTANCEGEOMETRY,{globalSpace:!0})).visible=d[k][gp.INSTANCEGEOMETRY],(L=D._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY,{globalSpace:!0})).visible=d[k][gp.INSTANCEWIREFRAMEGEOMETRY]}}d=null,o.render(n,t)}if(a){o.clear(),o.autoClear=!1;for(var N=e.modelManager.getModelKeys(),O=o.clippingPlanes,V=o.tempPlanes||[],G=0;6>G;G+=1){if(V[G]){if(V[G].equals(O[G]))continue;V[G]=O[G].clone()}else V[G]=O[G].clone();for(var P=0,q=N.length;q>P;P+=1){var j=e.modelManager.getModel(N[P]);if(j){var H=j._getNodeGroup(gp.GEOMETRY,{globalSpace:!0}),Y=j._getNodeGroup("sectionFill_"+G);Y.clear();for(var W=0,J=H.children.length;J>W;W+=1){var z=H.children[W];if(z.visible){var Z=V[G].clone().applyMatrix4(z.matrixWorld),X=z.geometry;if(X.boundingBox||X.computeBoundingBox(),X.boundingBox.intersectsPlane(Z)){var _=Tu.getShapeGeometryFromGeometryAndPlane(X,Z);if(_){var $=new Ue(_,z.material[0]);Y.add($),$.matrixWorld.copy(z.matrixWorld)}}}}}}}o.tempPlanes=V,o.autoClear=s,o.setRenderTarget(null),o.clear(),o.render(n,t)}}else vc.EnableSelectionOutline&&e.composer&&e.getSelection().length>0?e.composer.render():(o.setRenderTarget(null),o.clear(),o.render(n,t));e.onRenderListener(),e.onRenderFinishedListener(),e.cameraControl.setCameraChanging(!1),i.getBlinkEnabled()&&(e.blinkHandle=requestAnimationFrame(A)),i.disposeBufferAfterVbo()}()},Ly.prototype.render=function(A){if(this.renderer){var e=this.viewer,t=e.modelManager;if(t.isEmpty())return Bh.log("model not loaded!"),void this._forceRenderOneFrame();if(!t.checkLayerDataLoading()){e._checkDataChanged();e.getScene();e.camera.updateMatrixWorld(),this.csm&&(this.csm.update(e.camera.matrixWorld),this.csm.updateFrustums()),vc.IncrementRender?this.incrementRender(A):vc.FillCavity?this.fillCavityRender2(A):this.fullRender(A)}}},Ly.prototype.getRenderer=function(){return this.renderer},Ly.prototype.setSize=function(A,e){this.renderer.setSize(A,e),this.composer&&this.composer.setSize(A,e)},Ly.prototype.getRendererSize=function(){return this.renderer?this.renderer.getSize():{width:0,height:0}},Ly.prototype.getPickingEffecter=function(){return vc.PickingEffect?(this.pickingEffecter||(this.pickingEffecter=new Sy(this.viewer)),this.pickingEffecter):null};var Ny=function(A,e){jo.call(this,A,e),this.type="SkinnedMesh",this.bindMode="attached",this.bindMatrix=new M,this.bindMatrixInverse=new M;var t=new bo(this.initBones());this.bind(t,this.matrixWorld),this.normalizeSkinWeights()};Ny.prototype=Object.assign(Object.create(jo.prototype),{constructor:Ny,isSkinnedMesh:!0,initBones:function(){var A=[],e=null,t=null,i=null,o=null;if(this.geometry&&void 0!==this.geometry.bones){for(i=0,o=this.geometry.bones.length;o>i;i+=1)t=this.geometry.bones[i],e=new Uo,A.push(e),e.name=t.name,e.position.fromArray(t.pos),e.quaternion.fromArray(t.rotq),void 0!==t.scl&&e.scale.fromArray(t.scl);for(i=0,o=this.geometry.bones.length;o>i;i+=1)-1!==(t=this.geometry.bones[i]).parent&&null!==t.parent&&void 0!==A[t.parent]?A[t.parent].add(A[i]):this.add(A[i])}return this.updateMatrixWorld(!0),A},bind:function(A,e){this.skeleton=A,void 0===e&&(this.updateMatrixWorld(!0),this.skeleton.calculateInverses(),e=this.matrixWorld),this.bindMatrix.copy(e),this.bindMatrixInverse.getInverse(e)},pose:function(){this.skeleton.pose()},normalizeSkinWeights:function(){var A=null,e=null;if(this.geometry&&this.geometry.isGeometry)for(e=0;this.geometry.skinWeights.length>e;e+=1){var t=this.geometry.skinWeights[e];(A=1/t.lengthManhattan())!==1/0?t.multiplyScalar(A):t.set(1,0,0,0)}else if(this.geometry&&this.geometry.isBufferGeometry){var i=new p,o=this.geometry.attributes.skinWeight;for(e=0;o.count>e;e+=1)i.x=o.getX(e),i.y=o.getY(e),i.z=o.getZ(e),i.w=o.getW(e),(A=1/i.lengthManhattan())!==1/0?i.multiplyScalar(A):i.set(1,0,0,0),o.setXYZW(e,i.x,i.y,i.z,i.w)}},updateMatrixWorld:function(A){jo.prototype.updateMatrixWorld.call(this,A),"attached"===this.bindMode?this.bindMatrixInverse.getInverse(this.matrixWorld):"detached"===this.bindMode?this.bindMatrixInverse.getInverse(this.bindMatrix):console.warn("THREE.SkinnedMesh: Unrecognized bindMode: "+this.bindMode)},clone:function(){return new this.constructor(this.geometry,this.material).copy(this)}});var Oy=function(A){of.call(this,A),this.nodeGroupName="PickingExternalMeshGroup",this.pickingEffecter=this.manager.viewer.rendererManager.getPickingEffecter()};Object.assign(Oy.prototype,of.prototype),eu(Oy,[{key:"destroy",value:function(){this.pickingEffecter=null}},{key:"_disposeGeometryByNode",value:function(A){A.traverseVisible((function(e){e!==A&&(e.isMesh||e.isLine)&&(e.material=null,e.geometry.dispose())}))}},{key:"disposePickingNodeById",value:function(A){for(var e=this.pickingNodeMap[A],t=0,i=e.length;i>t;t+=1)this._disposeGeometryByNode(e[t]),e[t]=null}},{key:"updatePickingMeshes",value:function(A,e,t){if(this.pickingNodeMap){for(var i=Object.keys(this.pickingNodeMap),o=0,n=i.length;n>o;o+=1){var r=i[o],a=this.pickingNodeMap[r],s=0,l=0;if(t[r]&&this.manager.isPickableNode({userId:r,name:r}))for(s=0,l=a.length;l>s;s+=1)a[s].visible=!0;else for(s=0,l=a.length;l>s;s+=1)a[s].visible=!1}return this.getPickingNodeGroup()}}},{key:"addNode",value:function(A,e){this.addToPickingNodeMap(A,e)}},{key:"removeNodeById",value:function(A){this.removeFromPickingNodeMap(A)}},{key:"clearNodes",value:function(){this.clearData()}},{key:"addToPickingNodeMap",value:function(A,e){for(var t=[],i=!vc.BatchMergeEnabled,o=0,n=e.length;n>o;o+=1){var r=this._createPickingNodeBy(e[o],i);if(r)if(Array.isArray(r))for(var a=0,s=r.length;s>a;a+=1)r[a].name=A,t.push(r[a]);else r.name=A,t.push(r)}this.pickingNodeMap||(this.pickingNodeMap={}),this.pickingNodeMap[A]=t,this.addToPickingNodeGroup(t)}},{key:"_createPickingNodeBy",value:function(A,e){var t=this,i={},o={};if("Object3D"===A.type||A instanceof Xi||A instanceof ep){var n=new Xi;n.copy(A,!1),A.animations&&(n.animations=A.animations),A.traverseVisible((function(n){if(n!==A){var r=null;if("Object3D"===n.type||n instanceof Xi||n instanceof ep||n instanceof Uo)(r=n instanceof Uo?new Uo:new Xi).copy(n,!1),i[n.uuid]={destination:r,source:n};else{if(!n.isMesh&&!n.isLine)return;(r=t._createPickingMeshesBy(n,e))&&(o[n.uuid]={destination:r,source:n})}r=null}}));var r=0,a=0,s=null,l=Object.keys(i);for(r=0,a=l.length;a>r;r+=1){var c=i[l[r]];c.source.parent!==A?i[s=c.source.parent.uuid].destination.add(c.destination):n.add(c.destination)}var h=Object.keys(o);for(r=0,a=h.length;a>r;r+=1){var d=o[h[r]],p=0,g=0;if(d.source.parent===A)if(Array.isArray(d.destination))for(p=0,g=d.destination.length;g>p;p+=1)n.add(d.destination[p]);else n.add(d.destination);else if(s=d.source.parent.uuid,Array.isArray(d.destination))for(p=0,g=d.destination.length;g>p;p+=1)i[s].destination.add(d.destination[p]);else i[s].destination.add(d.destination)}return n}return A.isMesh||A.isLine?t._createPickingMeshesBy(A,e):null}},{key:"_createLineMeshBy",value:function(A,e,t){var i=null,o=null,n=this.pickingEffecter;if(vc.PickingLineWidthEnabled){i=n.selectedLineMaterial;var r=new JC;A.isLineSegments?r.fromLineSegments(A):A.isLineLoop?r.fromLineLoop(A):r.fromLine(A),o=new XC(r,i),Tu.copyMeshProperties(o,A),o.renderOrder=t?1:0}else i=n.selectedMaterial,o=A.isLineSegments?new jo(e,i):A.isLineLoop?new Ho(e,i):new Go(e,i),Tu.copyMeshProperties(o,A),o.renderOrder=t?1:0;return o}},{key:"_createMeshBy",value:function(A,e,t){var i=new Ue(e,this.pickingEffecter.selectedMaterial);return Tu.copyMeshProperties(i,A),i.renderOrder=t?1:0,i}},{key:"_createSkinnedMeshBy",value:function(A,e,t){var i=new So(e,this.pickingEffecter.skinningSelectedMaterial);return Tu.copyMeshProperties(i,A),i.renderOrder=t?1:0,i.bindMatrix.copy(A.bindMatrix),i.bindMatrixInverse.copy(A.bindMatrixInverse),i.bindMode=A.bindMode,i.userData=A.userData,i.skeleton=A.skeleton,i}},{key:"_createSkinnedWireFrameBy",value:function(A,e,t){if(!e.index)return null;var i=this.pickingEffecter.skinningWireframeMaterial,o=Up(e.attributes.position.array,e.index.array),n=new he;n.setIndex(new $A(o,1)),n.setAttribute("position",e.getAttribute("position")),n.setAttribute("skinIndex",e.getAttribute("skinIndex")),n.setAttribute("skinWeight",e.getAttribute("skinWeight"));var r=new Ny(n,i);return Tu.copyMeshProperties(r,A),r.bindMatrix.copy(A.bindMatrix),r.bindMatrixInverse.copy(A.bindMatrixInverse),r.bindMode=A.bindMode,r.userData=A.userData,r.skeleton=A.skeleton,r.renderOrder=t?0:1,r}},{key:"_createWireFrameBy",value:function(A,e,t){if(!e.index)return null;var i=this.pickingEffecter.wireframeMaterial,o=Up(e.attributes.position.array,e.index.array),n=new he;n.setIndex(new $A(o,1)),n.setAttribute("position",e.getAttribute("position"));var r=new jo(n,i);return Tu.copyMeshProperties(r,A),r.renderOrder=t?0:1,r}},{key:"_createPickingMeshesBy",value:function(A,e){var t=Tu.createBufferGeometryWithPosAndSkin(A.geometry);if(!t)return null;if(A.isLineSegments)return this._createLineMeshBy(A,t,e);var i=null,o=null;return A.isSkinnedMesh?(i=this._createSkinnedMeshBy(A,t,e),o=this._createSkinnedWireFrameBy(A,t,e)):(i=this._createMeshBy(A,t,e),o=this._createWireFrameBy(A,t,e)),o?[i,o]:i}},{key:"setAccumulateTransform",value:function(A,e,t,i){if(this.pickingNodeMap&&this.pickingNodeMap[A])for(var o=this.pickingNodeMap[A],n=0,r=o.length;r>n;n+=1){var a=o[n];e&&(a.position.x+=e.x,a.position.y+=e.y,a.position.z+=e.z),t&&(a.scale.x*=t.x,a.scale.y*=t.y,a.scale.z*=t.z),i&&(a.rotation.x+=i.x,a.rotation.y+=i.y,a.rotation.z+=i.z),a.updateMatrixWorld()}}},{key:"setTransform",value:function(A,e,t,i,o){if(this.pickingNodeMap&&this.pickingNodeMap[A])for(var n=this.pickingNodeMap[A],r=0,a=n.length;a>r;r+=1){var s=n[r];o?this.manager.setTransformForClonedMesh(s,e,t,i):this.manager.setTransformForMesh(s,e,t,i)}}},{key:"rotateOnBasePoint",value:function(A,e,t,i){if(this.pickingNodeMap&&this.pickingNodeMap[A]){var o=this.pickingNodeMap[A];if(o)for(var n=0,r=o.length;r>n;n+=1){var a=o[n],s=(new f).setFromAxisAngle(t,i);a.quaternion.premultiply(s),a.position.sub(e),a.position.applyQuaternion(s),a.position.add(e),a.updateMatrixWorld()}}}},{key:"applyTransform",value:function(A,e,t,i){if(this.pickingNodeMap&&this.pickingNodeMap[A]){var o=this.manager.getTransformMatrix(e,t,i);this.applyTransformMatrix(A,o)}}},{key:"applyTransformMatrix",value:function(A,e){if(this.pickingNodeMap&&this.pickingNodeMap[A])for(var t=this.pickingNodeMap[A],i=0,o=t.length;o>i;i+=1)this.manager.updateMatrixWorldForMesh(t[i],e)}}]);var Vy=function(A){this.viewer=A,this.viewer.modelManager.registerPlugin(this),this.meshes={},this.customSelectMaterials={},this.databagId="ExternalComponent",this.objectIds=null,this.lastFilteredIds=null,this.firstAnimation=!0,this.animationIds={},this.animationLength=0,this.animationId=0,this.invalidObjectType=["invalidPlane"],this.floorExplosion=!1,this.boundingBoxWorld=void 0};Vy.prototype.destroy=function(){this.pickingNodeGenerator&&(this.pickingNodeGenerator.destroy(),this.pickingNodeGenerator=null),this._removeNodeGroup(),this.meshes=null,this.customSelectMaterials=null,this.objectIds=null,this.lastFilteredIds=null,this._cancelAnimate(),this.firstAnimation=null,this.animationIds=null,this.invalidObjectType=null,this.viewer=null},Vy.prototype.addExternalObject=function(A){if(A&&(A instanceof Xi||A instanceof Ue)){var e=uh.createUUID();this.meshes[e]=[A];var t={name:e,userId:e,nodeId:e,state:Lc.Visible,mesh:[A],isExternalComponent:!0,matrix:A.matrixWorld.clone()},i=new aA;return i.setFromObject(A),t.boundingBox=i,A.key=e,this._getNodeGroup().add(A),this._addToNodeInfoMap(t),this._cacheNodeMaterial(A),this.boundingBoxWorld?this.boundingBoxWorld.union(i):this.boundingBoxWorld=i.clone(),this.viewer.modelManager.updateSceneBoundingBox(),this._updateFilterManager(),this.objectIds=Object.keys(this.meshes),{nodeId:e}}},Vy.prototype.getObjectCenterAndMatrixByNodeId=function(A){var e=void 0,t=this.getNodeInfosByUserId(A);if(t&&t.length>0){e={matrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],center:[0,0,0]};var i=t[0];if(i.matrix&&(e.matrix=i.matrix.toArray()),i.boundingBox){var o=new y;i.boundingBox.getCenter(o),e.center=o.toArray()}}return e},Vy.prototype.addNode=function(A,e,t,i){if(this.meshes[A])Bh.error("Warning: name is already exist, please change name ");else if(-1===this.invalidObjectType.indexOf(e.type)){e instanceof Array||(e=[e]),this.meshes[A]=e,this._isPickingEffectEnabled()&&this.getPickingNodeGenerator().addNode(A,e),void 0===t&&(t=!1),i&&(this.customSelectMaterials[A]=i);for(var o=new aA,n=0,r=e.length;r>n;n+=1){var a=new aA;a.setFromObject(e[n]),a.isEmpty()&&a.min.x===1/0&&e[n].position&&(a.min.copy(e[n].position),a.max.copy(e[n].position)),o.union(a),e[n].box=a,e[n].originBox=a.clone();var s=new M;s.getInverse(e[n].matrix),e[n].originBox.applyMatrix4(s),this._initializeAnimation(e[n],A);var l=e[n];l.key=A,this._getNodeGroup().add(l),l.updateMatrixWorld(!0),t||this._cacheNodeMaterial(l)}var c={name:A,userId:A,state:Lc.Visible,boundingBox:o,mesh:e,isExternalComponent:!0};1===e.length&&(c.matrix=e[0].matrixWorld.clone()),this._addToNodeInfoMap(c),this.boundingBoxWorld?this.boundingBoxWorld.union(o):this.boundingBoxWorld=o.clone(),this.viewer.modelManager.updateSceneBoundingBox(),this._updateFilterManager(),this.objectIds=Object.keys(this.meshes)}else Bh.error("Warning: the object is invalid")},Vy.prototype.getNodeById=function(A){var e=this.meshes[A];return e&&1===e.length?e[0]:e},Vy.prototype.removeNodeById=function(A){var e=this.meshes[A];if(!e)return!1;e[0].autoAnimation&&(delete this.animationIds[A],this.animationLength-=1,0===this.animationLength&&this._cancelAnimate()),delete this.meshes[A],this._isPickingEffectEnabled()&&this.getPickingNodeGenerator().removeNodeById(A),this.customSelectMaterials[A]&&delete this.customSelectMaterials[A];for(var t=this._getNodeGroup(),i=0,o=e.length;o>i;i+=1)t.remove(e[i]);return this.filteredIds&&this.filteredIds[A]&&delete this.filteredIds[A],this.lastFilteredIds&&this.lastFilteredIds[A]&&delete this.lastFilteredIds[A],this.viewer.removeFromSelection([A]),this.viewer.cancelTransformComponentByKey(A),this._removeFromNodeInfoMap(A),this._updateFilterManager(),this.objectIds=Object.keys(this.meshes),!0},Vy.prototype.clearNodes=function(){this._isPickingEffectEnabled()&&this.getPickingNodeGenerator().clearNodes(),this._getNodeGroup().clear(),this._clearNodeInfoMap(),this.meshes={},this.customSelectMaterials={},this.objectIds=null,this.animationIds={},this.animationLength=0,this._cancelAnimate()},Vy.prototype.getAllNodes=function(){return this.meshes},Vy.prototype.isEmpty=function(){return!this._hasNode()},Vy.prototype.setTransform=function(A,e,t,i,o){if(this.floorExplosion&&o)o();else{var n=this.meshes[A];if(n){for(var r=0,a=n.length;a>r;r+=1){var s=n[r];s.position.x=(e=e||s.position).x,s.position.y=e.y,s.position.z=e.z,s.scale.x=(t=t||s.scale).x,s.scale.y=t.y,s.scale.z=t.z,s.setRotationFromQuaternion(i=i||s.quaternion),s.updateMatrixWorld();var l=s.originBox.clone();s.box=l.applyMatrix4(s.matrix),s.levelName=null}this._isPickingEffectEnabled()&&this.getPickingNodeGenerator().setTransform(A,e,t,i)}}},Vy.prototype.getTransform=function(A){var e=this.meshes[A];return e?{position:e[0].position,scale:e[0].scale,rotate:e[0].quaternion}:null},Vy.prototype.applyTransform=function(A,e,t,i){if(this.meshes[A]){e=e||new y,t=t||new y(1,1,1),i=i||new f;var o=new M;o.compose(e,i,t),this.applyTransformMatrix(A,o),this._isPickingEffectEnabled()&&this.getPickingNodeGenerator().applyTransformMatrix(A,o)}},Vy.prototype.applyTransformMatrix=function(A,e){var t=this.meshes[A];if(t)for(var i=0,o=t.length;o>i;i+=1){var n=t[i];n._oriMatrix||(n._oriMatrix=n.matrix.clone()),n.matrix.multiplyMatrices(e,n._oriMatrix),n.updateMatrixWorld(!0);var r=n.originBox.clone();n.box=r.applyMatrix4(n.matrix)}},Vy.prototype.applyFilter=function(){this._hasNode()&&(this._collectFilteredIds(),this._collectSelectedIds(),this._collectHoveredIds(),this._updateNodes())},Vy.prototype.applySelection=function(){this._hasNode()&&(this._collectSelectedIds(),this._collectHoveredIds(),this._updateNodes())},Vy.prototype.clearSelection=function(){this._hasNode()&&(this._clearSelectedIds(),this.applyHover())},Vy.prototype.applyHover=function(){this._hasNode()&&(this._collectHoveredIds(),this._updateNodes())},Vy.prototype.clearHover=function(){this._hasNode()&&(this._clearHoveredIds(),this._updateNodes())},Vy.prototype.getNodeInfosByUserId=function(A){if(this.nodeInfoMap)return this.nodeInfoMap[A]},Vy.prototype.getAllNodeInfos=function(A){A[this.databagId]=this.nodeInfoMap||{}},Vy.prototype.calculateBoundingBox=function(){if(this.nodeInfoMap){var A=new aA,e=new aA;for(var t in this.nodeInfoMap)for(var i=this.nodeInfoMap[t],o=0,n=i.length;n>o;o+=1){var r=i[o],a=r.mesh,s=new aA;for(o=0,n=a.length;n>o;o+=1)e.makeEmpty(),e.setFromObject(a[o]),e.isEmpty()&&e.min.x===1/0&&a[o].position&&(e.min.copy(a[o].position),e.max.copy(a[o].position)),s.union(e);r.boundingBox.copy(s),A.union(r.boundingBox)}this.boundingBoxWorld?this.boundingBoxWorld.copy(A):this.boundingBoxWorld=A}},Vy.prototype.recalculateComponentBoundingbox=function(A){var e=this.getNodeInfosByUserId(A);if(e)for(var t=0,i=e.length;i>t;t+=1){var o=e[t],n=o.mesh,r=new aA,a=new aA;for(t=0,i=n.length;i>t;t+=1)a.setFromObject(n[t]),a.isEmpty()&&a.min.x===1/0&&n[t].position&&(a.min.copy(n[t].position),a.max.copy(n[t].position)),r.union(a);o.boundingBox.copy(r)}},Vy.prototype.getBoundingBoxWorld=function(){if(this.boundingBoxWorld)return this.boundingBoxWorld.clone()},Vy.prototype.adjustVisibility=function(A){this._getNodeGroup().visible=A},Vy.prototype.changeVisibilityOfSelectedObjects=function(A){if(this.selectedIds)for(var e=this.viewer.modelManager.filter,t=0,i=this.selectedIds.length;i>t;t+=1){var o=this.selectedIds[t],n=this.meshes[o];if(n&&e._isVisible({userId:o}))for(var r=0,a=n.length;a>r;r+=1)n[r].visible=A}},Vy.prototype.changeVisibilityOfNonSelectedObjects=function(A){if(this.objectIds){var e={};if(this.selectedIds)for(var t=0,i=this.selectedIds.length;i>t;t+=1)e[this.selectedIds[t]]=!0;for(var o=this.viewer.modelManager.filter,n=0,r=this.objectIds.length;r>n;n+=1){var a=this.objectIds[n];if(!e[a]&&o._isVisible({userId:a}))for(var s=this.meshes[a],l=0,c=s.length;c>l;l+=1)s[l].visible=A}}},Vy.prototype.adjustVisibilityOfObjectsWithoutOutline=function(A){if(this.objectIds)for(var e=this.viewer.modelManager.filter,t=0,i=this.objectIds.length;i>t;t+=1){var o=this.objectIds[t];if(e._isVisible({userId:o}))for(var n=this.meshes[o],r=0,a=n.length;a>r;r+=1)n[r].isSprite&&(n[r].visible=A)}},Vy.prototype._addToNodeInfoMap=function(A){this.nodeInfoMap||(this.nodeInfoMap={}),this.nodeInfoMap[A.userId]||(this.nodeInfoMap[A.userId]=[]),this.nodeInfoMap[A.userId].push(A)},Vy.prototype._removeFromNodeInfoMap=function(A){this.nodeInfoMap&&this.nodeInfoMap[A]&&delete this.nodeInfoMap[A]},Vy.prototype._clearNodeInfoMap=function(){this.nodeInfoMap=null},Vy.prototype._updateFilterManager=function(){var A=this.viewer.modelManager;A.filter.reinitFilterManager(A.getNodeInfos())},Vy.prototype._canBePick=function(A){return!!A._oriMaterial},Vy.prototype._getNodeGroup=function(){return this.viewer.modelManager.scene.getOrCreateGroup(gp.EXTERNALCOMPONENTMANAGER,{pickableType:Qc.Geometry,globalSpace:!0})},Vy.prototype._removeNodeGroup=function(){this.viewer.modelManager.scene.removeGroupByName(gp.EXTERNALCOMPONENTMANAGER)},Vy.prototype._cacheNodeMaterial=function(A){uh.isGroupObject(A)?A.traverse((function(A){if(uh.isMeshObject(A)&&!A._oriMaterial&&(A._oriMaterial=A.material,!A.geometry.index&&A.geometry.attributes&&A.geometry.attributes.position)){for(var e=[],t=0,i=A.geometry.attributes.position.array.length/3;i>t;t+=1)e.push(t);A.geometry.setIndex(new YA(new Uint32Array(e),1))}})):A._oriMaterial||(A._oriMaterial=A.material)},Vy.prototype._collectFilteredIds=function(){var A=this.filteredIds={},e=this.viewer.modelManager.filter,t=e._hasHiddenFileIdFilter(),i=e._hasVisibleFilter(),o=e._hasOverrideMaterialFilter(),n=e._hasTransparentFilter();if(t||i||o||n)for(var r=this.objectIds,a=zc,s=0,l=r.length;l>s;s+=1){var c=r[s],h={userId:c};if(i&&!1===e._isVisible(h))A[c]||(A[c]={}),A[c][a.HIDDEN]=!0;else if(n&&e._isTransparent(h))A[c]||(A[c]={}),A[c][a.TRANSPARENT]=!0;else if(o&&e._hasOverrideMaterial(h)){var d=e._getOverrideMaterial(h),p=d?d.name:"";A[c]||(A[c]={}),A[c][a.OVERRIDED]=p}}},Vy.prototype._collectSelectedIds=function(){var A=this.filteredIds=this.filteredIds||{},e=zc,t=this.viewer.modelManager.sceneState.getSelection(),i={};this._clearSelectedIds();for(var o=0,n=t.length;n>o;o+=1){var r=t[o];this.canBeSelectedId(r)&&(A[r]||(A[r]={}),A[r][e.SELECTED]=!0,i[r]=!0)}this.selectedIds=Object.keys(i)},Vy.prototype._clearSelectedIds=function(){if(this.filteredIds&&this.selectedIds&&this.selectedIds.length){for(var A=0,e=this.selectedIds.length;e>A;A+=1){var t=this.selectedIds[A];this.filteredIds[t]&&delete this.filteredIds[t][zc.SELECTED]}this.selectedIds=null}},Vy.prototype._collectHoveredIds=function(){var A=this.viewer.modelManager.sceneState.hoverId;if(A&&this._hasObjectId(A)){var e=this.filteredIds=this.filteredIds||{};this.hoveredId=A,e[A]||(e[A]={}),e[A][zc.HOVER]=!0}},Vy.prototype._clearHoveredIds=function(){this.filteredIds&&this.hoveredId&&this.filteredIds[this.hoveredId]&&(delete this.filteredIds[this.hoveredId][zc.HOVER],this.hoveredId=void 0)},Vy.prototype._hasObjectId=function(A){return!!this.meshes[A]},Vy.prototype.isUserIdExist=function(A){return this._hasObjectId(A)},Vy.prototype.canBeSelectedId=function(A){var e=this.meshes[A];return!(!e||e[0].disPickable)},Vy.prototype._hasNode=function(){return!(!this.objectIds||!this.objectIds.length)},Vy.prototype._traverseNodeById=function(A,e){if(this._hasObjectId(A))for(var t=this,i=this.meshes[A],o=0,n=i.length;n>o;o+=1){var r=i[o];uh.isGroupObject(r)?r.traverseVisible((function(A){uh.isMeshObject(A)&&t._canBePick(A)&&e&&e(A)})):(uh.isMeshObject(r)||r.isSprite)&&t._canBePick(r)&&e&&e(r)}},Vy.prototype._resetNodeMaterial=function(){var A=this.lastFilteredIds;if(A&&A.length)for(var e=0,t=A.length;t>e;e+=1)this._updateNodeVisible(A[e],!0),this._traverseNodeById(A[e],(function(A){A.material=A._oriMaterial}))},Vy.prototype._updateNodeVisible=function(A,e){if(this._hasObjectId(A))for(var t=this.meshes[A],i=0,o=t.length;o>i;i+=1)t[i].visible=e},Vy.prototype._updateNodeById=function(A,e){if(this._hasObjectId(A)){var t=this.viewer.modelManager.sceneState,i=zc,o=this.filteredIds[A];if(o)if(o[i.HIDDEN])this._updateNodeVisible(A,!1);else{var n=function(A,e){if(A._oriMaterial instanceof Array){for(var t=[],i=0,o=A._oriMaterial.length;o>i;i+=1){var n=A._oriMaterial[i];n instanceof ld?t.push(e):t.push=Kd.cloneMaterialBaseOnColor(n,e)}A.material=t}else A.material=A._oriMaterial instanceof ld?e:Kd.cloneMaterialBaseOnColor(A._oriMaterial,e)};if(o[i.TRANSPARENT]){var r=e._getMaterialByName("scene");this._traverseNodeById(A,(function(A){n(A,r)}))}else if(this._isPickingEffectEnabled()||!o[i.SELECTED]){if(o[i.HOVER])if(o[i.OVERRIDED]){var a=t.getHoverMaterial(e._getMaterialByName(o[i.OVERRIDED]));this._traverseNodeById(A,(function(A){n(A,a)}))}else this._traverseNodeById(A,(function(A){var e=t.getHoverMaterial(A._oriMaterial);n(A,e)}));else if(o[i.OVERRIDED]){var s=e._getMaterialByName(o[i.OVERRIDED]);this._traverseNodeById(A,(function(A){n(A,s)}))}}else{var l=t.selectionMaterial,c=this.customSelectMaterials[A];this._traverseNodeById(A,(function(A){c?A.material=c:A._oriMaterial.isMeshPhongMaterial?(A.material=t.phongSelectionMaterial,A.material.skinning=A._oriMaterial.skinning):n(A,l)}))}}}},Vy.prototype._updateNodes=function(){var A=this.viewer.modelManager.filter;if(this._resetNodeMaterial(),this.filteredIds){for(var e in this.filteredIds)this._updateNodeById(e,A);this.lastFilteredIds=Object.keys(this.filteredIds)}},Vy.prototype._initializeAnimation=function(A,e){if(A.autoAnimation){if("fire"===A.type){var t=vc.SceneSize,i=this.viewer.getBoundingBoxWorld().getSize(),o=Math.max(i.x,i.y,i.z);A._initializeSizetween(t/o/.01421)}this.firstAnimation&&(this._animate(),this.firstAnimation=!1),this.animationIds[e]=!0,this.animationLength+=1}},Vy.prototype._animate=function(){var A=this;!function e(){for(var t in A.animationId=requestAnimationFrame(e),A.animationIds)for(var i=A.meshes[t],o=0,n=i.length;n>o;o+=1)i[o].autoAnimation&&i[o].update&&i[o].update();A.viewer.render()}()},Vy.prototype._cancelAnimate=function(){this.firstAnimation=!0,cancelAnimationFrame(this.animationId),this.animationId=0},Vy.prototype.isPickableNode=function(A){if(!this.canBeSelectedId(A.userId))return!1;var e=this.viewer.modelManager.filter;return!e._isHiddenFileId(A)&&!1!==e._isVisible(A)&&!e._isTransparent(A)},Vy.prototype._isPickingEffectEnabled=function(){return!1},Vy.prototype.getPickingNodeGenerator=function(){return this.pickingNodeGenerator||(this.pickingNodeGenerator=new Oy(this)),this.pickingNodeGenerator},Vy.prototype.setCloneComponentMaterialsByKey=function(A,e,t){var i=this.meshes[A][0];if(!i)return{result:!1,message:"mesh isn`t exist",code:-1};if(!i.byClone)return{result:!1,message:"mesh isn`t qualified",code:-2};var o=0===t||Boolean(t);if(Array.isArray(e)||(e=[e]),o&&(Array.isArray(t)||(t=[t])),Array.isArray(i.material))if(o){var n=0,r=!0,a=!1,s=void 0;try{for(var l,c=t[Symbol.iterator]();!(r=(l=c.next()).done);r=!0){var h=l.value;if(!i.material[h]||!e[n])break;i.material[h]=e[n],n+=1}}catch(A){a=!0,s=A}finally{try{r||null==c.return||c.return()}finally{if(a)throw s}}}else{var d=0,p=!0,g=!1,u=void 0;try{for(var f,m=e[Symbol.iterator]();!(p=(f=m.next()).done);p=!0){var C=f.value;if(!i.material[d])break;i.material[d]=C,d+=1}}catch(A){g=!0,u=A}finally{try{p||null==m.return||m.return()}finally{if(g)throw u}}}else i.material=e[0]},Vy.prototype.getModelManager=function(){return this.viewer.modelManager};var Gy=function(){this.domElement=null,this.camera=null,this.highlightManager=null,this.controller=document.getElementById("viewerController"),this.countRenderRequest=0,this.maxCountRenderRequest=1e4,this.rendering=!1,this.incrementRenderHandle=0,this.callbacks={},this.tempBox=new aA,this.tempVector3=new y,this.enableCameraNearFar=!0,this.currentHomeView=Uc.Home,this.initialView=Uc.Home,this.filter=new xu,this.modelManager=new ly(this.filter,this),this.isRecalculationPlanes=!1,this.calculationPlanesBind=this.calculationPlanes.bind(this),this.addRenderFinishedListener(this.calculationPlanesBind),this.uuid="",this.transitionAnimationState=!0,this.animator=new dp,this._renderStateChanged=!1;var A=this;this._renderTimer=null,this.blinkHandle=0,this.needCheckTilesDataChange=!1,this.clock=new as,this.rendererManager=new Ly(this),this.cameraStateWithFrustum=!1,this.checkNeedRender=function(){(A.needRender||A.modelManager.needUpdateAnimation())&&(A.needRender=vc.continueRender||!1,A.modelManager.updateAnimation(),A._render()),A._renderTimer=requestAnimationFrame(A.checkNeedRender)},this.checkNeedApplyFilter=function(){A.needApplyFilter&&(A.needApplyFilter=!1,A.modelManager.applyFilter(),A.render()),A._applyFilterTimer=requestAnimationFrame(A.checkNeedApplyFilter)},this.blink={}};Object.assign(Gy.prototype,Ld.prototype),Object.assign(Gy.prototype,{constructor:Gy,addRenderListener:function(A){this.addEventListener("render",A)},removeRenderListener:function(A){this.removeEventListener("render",A)},onRenderListener:function(){this.dispatchEvent("render")},addRenderFinishedListener:function(A){this.addEventListener("renderFinished",A)},removeRenderFinishedListener:function(A){this.removeEventListener("renderFinished",A)},onRenderFinishedListener:function(){this.dispatchEvent("renderFinished")},removeAllListeners:function(){this.removeAllEventListener()},destroy:function(){if(this.stopRedner(),this.stopApplyFilter(),this.removeAllListeners(),this.controlManager.unregisterDomEventListeners(this.domElement),this.renderer){var A=document.getElementById(this.uuid);this.domElement.contains(this.getRenderer().domElement)&&this.domElement.removeChild(A)}this.domElement=null,this.renderSettings.canvas=null,this.renderSettings.context=null,this.renderSettings=null,this.rendererManager.destroy(),this.rendererManager=null,this.camera=null,this.defaultCamera=null,this.cameraControl.destroy(),this.cameraControl=null,this.controlManager.destroy(),this.modelManager.destroy(),this.modelManager=null,this.controlManager=null,this.tmpBox=null,this.filter=null,this.calculationPlanesBind=null,this.animator=null},init:function(A){var e=this;e.uuid=a.generateUUID(),this.domElement=A,this.resetBackgroundColor();var t={alpha:!0,preserveDrawingBuffer:!0,antialias:!0,depth:!0,maxDrawCacheNum:vc.maxDrawCacheNum,logarithmicDepthBuffer:!1,stencil:!0};vc.logarithmicDepthBuffer&&(t.logarithmicDepthBuffer=!0),vc.DisableAntialias&&(t.antialias=!1);var i=null;try{(i=document.createElement("canvas")).style.outline="none",i.getContext("webgl",t)||i.getContext("experimental-webgl",t)||(t.antialias=!1)}catch(A){return!1}Tu.initializeUnitInstances();var o=document.createElement("div");o.setAttribute("id",e.uuid),o.style.width="100%",o.style.height="100%",t.canvas=i,this.renderSettings=t,this.camera=this.defaultCamera=new cp(45,A.offsetWidth,A.offsetHeight,.1,200*vc.SceneSize),this.camera.up=new y(0,0,1),this.camera.realUp=new y(0,0,1),this.camera.lookAt(this.camera.target),this.cameraControl=new mp(this,this.camera,A,(function(A){e.render(A)})),this.controlManager=new Og,this.controlManager.setControlMode(this,"pick"),this.setOrbitButton("left"),this.setReverseWheelDirection(!1),this.registerDomEventListener(Rc.ON_CONTROL_END,(function(){e.needCheckTilesDataChange=!0})),this.registerDomEventListener(Rc.ON_CONTROL_ZOOM,(function(){e.needCheckTilesDataChange=!0})),e.rendererManager.setupRenderer(e.renderSettings),o.appendChild(this.getRenderer().domElement),this.domElement.appendChild(o),this.controlManager.registerDomEventListeners(o),this.startRender(),this.startApplyFilter()},getDomElement:function(){return this.domElement?this.domElement:null},getRendererDomElement:function(){return this.getRenderer()&&this.getRenderer().domElement?this.getRenderer().domElement:null},render:function(){this.needRender=!0},startRender:function(){this._renderTimer=requestAnimationFrame(this.checkNeedRender)},stopRedner:function(){cancelAnimationFrame(this._renderTimer)},startApplyFilter:function(){this._applyFilterTimer=requestAnimationFrame(this.checkNeedApplyFilter)},stopApplyFilter:function(){cancelAnimationFrame(this._applyFilterTimer)},_render:function(A){this.rendererManager.render(A)},incrementRender:function(A){var e=this,t=this.camera,i=this.modelManager,o=this.getRenderer(),n=this.getScene();if(this.countRenderRequest+=1,this.countRenderRequest>this.maxCountRenderRequest&&(this.countRenderRequest=0),!this.rendering){this.rendering=!0,i.calculateCameraModelRelation(t.position),this.ar(),this.cameraControl.updateCamera(),n.updateLights(t);var r=this.controlManager.isUpdateRenderList;o.resetIncrementRender(),o.setObjectListUpdateState(r),this.incrementRenderHandle=requestAnimationFrame(function A(i,r){var a=i;return function(){o.autoClear=r,e.controlManager.cameraChange?(o.resetIncrementRender(),o.autoClear=!0,e.controlManager.cameraChange=!1):o.autoClear=r,o.render(n,t)||a!==e.countRenderRequest?(e.rendering=!1,a!==e.countRenderRequest?e.render():e.onRenderFinishedListener()):e.incrementRenderHandle=requestAnimationFrame(A(a,!1))}}(e.countRenderRequest,!0)),r&&i.prepareScene(t),this.onRenderFinishedListener(),this.cameraControl.setCameraChanging(!1)}},fullRender:function(A){var e=this,t=this.camera,i=this.modelManager,o=this.getRenderer(),n=this.getScene();this.blinkHandle>0&&cancelAnimationFrame(this.blinkHandle),function A(){e.calculateNearFar(),e.cameraControl.updateCamera(),n.updateLights(t),i.getBlinkEnabled()&&i.updateBlinkMaterial();var r=n.fillClipPlane&&n.fillClipPlane.visible,a=n.clipPlanes&&n.clipPlanes.visible&&vc.EnableBoxClippingCaps;if(vc.ClippingCaps&&(r||a)&&vc.EnableClippingCaps){if(r||a){var s=n.getFillClipPlane(),l=n.getClipPlanes(),c=e.modelManager.getModelKeys();i.prepareCapScene(),o.clear(),o.autoClear=!1,r?(s.capPlane.planeMesh.visible=!0,s.capPlane.lineMesh.visible=!0,l.boxMesh.visible=!1):(s.capPlane.planeMesh.visible=!1,s.capPlane.lineMesh.visible=!1,l.boxMesh.visible=!0),s.planeHighLightMatrial.visible=!1,l.planeHighLightMatrial.visible=!1,l.planeMaterial.visible=!1,n.overrideMaterial=n.backMaterial;for(var h={},d=0,p=c.length;p>d;d+=1){var g=c[d],u=e.modelManager.getModel(g);if(h[g]={},u){var f=u._getNodeGroup(gp.GEOMETRY,{globalSpace:!0});h[g][gp.GEOMETRY]=f.visible,f=u._getNodeGroup(gp.WIREFRAME,{globalSpace:!0}),h[g][gp.WIREFRAME]=f.visible,f=u._getNodeGroup(gp.INSTANCEGEOMETRY,{globalSpace:!0}),h[g][gp.INSTANCEGEOMETRY]=f.visible,f.visible=!1,f=u._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY,{globalSpace:!0}),h[g][gp.INSTANCEWIREFRAMEGEOMETRY]=f.visible,f.visible=!1}}o.render(n,t),n.overrideMaterial=n.backInstanceMaterial;for(var m=0,C=c.length;C>m;m+=1){var y=c[m],v=e.modelManager.getModel(y);if(v){var I=v._getNodeGroup(gp.GEOMETRY,{globalSpace:!0});I.visible=!1,(I=v._getNodeGroup(gp.WIREFRAME,{globalSpace:!0})).visible=!1,(I=v._getNodeGroup(gp.INSTANCEGEOMETRY,{globalSpace:!0})).visible=h[y][gp.INSTANCEGEOMETRY],(I=v._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY,{globalSpace:!0})).visible=h[y][gp.INSTANCEWIREFRAMEGEOMETRY]}}o.render(n,t),n.overrideMaterial=n.frontMaterial;for(var E=0,B=c.length;B>E;E+=1){var x=c[E],S=e.modelManager.getModel(x);if(S){var w=S._getNodeGroup(gp.GEOMETRY,{globalSpace:!0});w.visible=h[x][gp.GEOMETRY],(w=S._getNodeGroup(gp.WIREFRAME,{globalSpace:!0})).visible=h[x][gp.WIREFRAME],w=S._getNodeGroup(gp.INSTANCEGEOMETRY,{globalSpace:!0}),h[x][gp.INSTANCEGEOMETRY]=w.visible,w.visible=!1,w=S._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY,{globalSpace:!0}),h[x][gp.INSTANCEWIREFRAMEGEOMETRY]=w.visible,w.visible=!1}}o.render(n,t),n.overrideMaterial=n.frontInstanceMaterial;for(var M=0,b=c.length;b>M;M+=1){var U=c[M],F=e.modelManager.getModel(U);if(F){var K=F._getNodeGroup(gp.GEOMETRY,{globalSpace:!0});K.visible=!1,(K=F._getNodeGroup(gp.WIREFRAME,{globalSpace:!0})).visible=!1,(K=F._getNodeGroup(gp.INSTANCEGEOMETRY,{globalSpace:!0})).visible=h[U][gp.INSTANCEGEOMETRY],(K=F._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY,{globalSpace:!0})).visible=h[U][gp.INSTANCEWIREFRAMEGEOMETRY]}}o.render(n,t),o.render(i.capsScene,t),n.overrideMaterial=null,s.planeHighLightMatrial.visible=!0,l.planeHighLightMatrial.visible=!0,l.planeMaterial.visible=!0;for(var Q=0,R=c.length;R>Q;Q+=1){var T=c[Q],k=e.modelManager.getModel(T);if(k){var D=k._getNodeGroup(gp.GEOMETRY,{globalSpace:!0});D.visible=h[T][gp.GEOMETRY],(D=k._getNodeGroup(gp.WIREFRAME,{globalSpace:!0})).visible=h[T][gp.WIREFRAME],(D=k._getNodeGroup(gp.INSTANCEGEOMETRY,{globalSpace:!0})).visible=h[T][gp.INSTANCEGEOMETRY],(D=k._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY,{globalSpace:!0})).visible=h[T][gp.INSTANCEWIREFRAMEGEOMETRY]}}h=null,o.render(n,t)}}else vc.EnableSelectionOutline&&e.composer&&e.getSelection().length>0?e.composer.render():(o.setRenderTarget(null),o.clear(),o.render(n,t));e.onRenderListener(),e.onRenderFinishedListener(),e.cameraControl.setCameraChanging(!1),i.getBlinkEnabled()&&(e.blinkHandle=requestAnimationFrame(A)),i.disposeBufferAfterVbo()}()},resize:function(A,e){if(this.camera&&this.getRenderer()){var t=this.getDomElement();t&&(t.style.height=e+"px",t.style.width=A+"px"),this.camera.setSize(A,e),this.camera.updateProjectionMatrix(),this.rendererManager.setSize(A,e),this.dispatchEvent({type:"resize",data:{width:A,height:e}}),this.render()}},resizeByFrustum:function(A,e){this.camera&&this.getRenderer()&&(this.camera.updateProjectionMatrixByFrustum=!0,this.camera.setSizeByFrustum(A,e),this.render(),this.camera.updateProjectionMatrixByFrustum=!1)},calculateNearFar:function(){this.calculateNearFar2()},calculateNearFar2:function(){var A=this.getScene(),e=A.getBoundingBoxWorld(),t=this.getRenderer();if(this.enableCameraNearFar){var i=this.camera,o=i.position.clone().sub(A.getBoundingBoxWorld().getCenter(new y)).length(),n=A.getBoundingBoxWorld().getSize(new y).length();if(null!==e&&!e.isEmpty()){e.expandByScalar(1.1);e.applyMatrix4(i.matrixWorldInverse);var r=e.getSize(new y).length()/1e3,a=100;1e-4>r?a=.001:.001>r?a=.01:.01>r?a=.1:.1>r?a=1:1>r&&(a=10);var s=1,l=0;e.max.z>0&&0>e.min.z?(l=-e.min.z,s=Math.min(r/2,a/2)):(l=-e.min.z,s=Math.max(Math.min(r,a),-e.max.z)),t.shadowMap.enabled&&(l*=3,s/=3),l=Math.max(s+1,l),.1>(l=Math.min(l,o+n))-s&&(s/=2),i.setNearFar(s,l)}}},resetSelectionColor:function(A,e){this.modelManager.sceneState.setSelectionColor(A,e)},calculateMinDistance:function(A,e){if(Bh.time("计算最小距离"),A===e){var t=this.getBoundingBoxByIds([A]).getCenter(new y);return{start:t,end:t,minDistance:0}}function i(A,e){for(var t=0,i=0,o=0;3>o;o+=1){var n=A.min.getComponent(o),r=A.max.getComponent(o),a=e.min.getComponent(o),s=e.max.getComponent(o),l=0;n>s?l=n-s:a>r&&(l=a-r),t+=l*l;var c=Math.max(s,r)-Math.min(n,a);i+=c*c}return{minDis:Math.sqrt(t),maxDis:Math.sqrt(i)}}var o=new y,n=new y,r=new y;function a(A,e,t,i,o,n,r,a,s){r.fromBufferAttribute(e,t),a.fromBufferAttribute(e,i),s.fromBufferAttribute(e,o),n&&(r.applyMatrix4(n),a.applyMatrix4(n),s.applyMatrix4(n)),A.push(r),A.push(a),A.push(s)}function s(A,e,t){var i={start:null,end:null,minDistance:t},s=A.mesh,l=A.indexInfo,c=s.matrix.clone().multiply(A.matrix),h=s.geometry,d=h.attributes.position,p=l?l.indexStart:0,g=h.getIndex().array,u=l?l.indexStart+l.indexCount:g.length,f=e.mesh,m=e.indexInfo,C=f.matrix.clone().multiply(e.matrix),v=f.geometry,I=v.attributes.position,E=m?m.indexStart:0,B=v.getIndex().array,x=m?m.indexStart+m.indexCount:B.length,S=A.boundingBox,w=e.boundingBox;if(S.intersectsBox(w)){for(var M=p,b=u;b>M;M+=3){var U=[];a(U,d,g[M],g[M+1],g[M+2],c,o,n,r);var F=Tu.minDistanceBetweenTriToMesh(U,f,m,C);i.minDistance>F.minDistance&&(i.minDistance=F.minDistance,i.start=F.start,i.end=F.end)}return i}var K=S.getSize(new y),Q=w.getSize(new y),R=S.min.x-w.max.x,T=S.min.y-w.max.y,k=S.min.z-w.max.z,D=w.min.x-S.max.x,L=w.min.y-S.max.y,N=w.min.z-S.max.z,O=w.min.x>S.min.x?S.min.x:w.min.x,V=w.min.y>S.min.y?S.min.y:w.min.y,G=w.min.z>S.min.z?S.min.z:w.min.z,P=S.max.x>w.max.x?S.max.x:w.max.x,q=S.max.y>w.max.y?S.max.y:w.max.y,j=S.max.z>w.max.z?S.max.z:w.max.z,H=R;switch(T>H&&(H=T),k>H&&(H=k),D>H&&(H=D),L>H&&(H=L),N>H&&(H=N),H){case R:O+=Q.x/2,P-=K.x/2;break;case T:V+=Q.y/2,q-=K.y/2;break;case k:G+=Q.z/2,j-=K.z/2;break;case D:O+=K.x/2,P-=Q.x/2;break;case L:V+=K.y/2,q-=Q.y/2;break;case N:G+=K.z/2,j-=Q.z/2}for(var Y=new aA(new y(O,V,G),new y(P,q,j)),W=[],J=[],z=[],Z=[],X=p,_=u;_>X;X+=3){var $=[];a($,d,g[X],g[X+1],g[X+2],c,new y,new y,new y),z.push($);for(var AA=0,eA=$.length;eA>AA;AA+=1)if(Y.containsPoint($[AA])){W.push($);break}}for(var tA=E,iA=x;iA>tA;tA+=3){var oA=[];a(oA,I,B[tA],B[tA+1],B[tA+2],C,new y,new y,new y),Z.push(oA);for(var nA=0,rA=oA.length;rA>nA;nA+=1)if(Y.containsPoint(oA[nA])){J.push(oA);break}}W.length||(W=z),J.length||(J=Z);var sA=Tu.minDistanceBetweenTriToTri(W,J);return i.minDistance>sA.minDistance&&(i.minDistance=sA.minDistance,i.start=sA.start,i.end=sA.end),i}var l=this.modelManager.getMinDistanceObjects(A,e);if(!l)return-1;var c=[],h={start:null,end:null,minDistance:Number.POSITIVE_INFINITY};for(var d in l){if(!l[d].boundingBox){var p=this.getBoundingBoxByIds([d]);l[d].boundingBox=p}c.push(l[d])}if(1>c[0].length||1>c[1].length)return Bh.timeEnd("计算最小距离"),-1;var g=c[0],u=c[1],f=g.length,m=u.length,C=null,v=Number.POSITIVE_INFINITY;if(f>1||m>1){C={};for(var I=0;f>I;I+=1)for(var E=g[I],B=0;m>B;B+=1){var x=u[B];x.boundingBox=u.boundingBox,E.boundingBox=g.boundingBox;var S=i(E.boundingBox,x.boundingBox);v=S.maxDis>v?v:S.maxDis,C[I+"_"+B]=S}}for(var w=0;f>w;w+=1)for(var M=g[w],b=0;m>b;b+=1){if(C){var U=C[w+"_"+b].minDis;if(U>v||U>h.minDistance)continue}var F=u[b];F.boundingBox=u.boundingBox,M.boundingBox=g.boundingBox;var K=s(M,F,h.minDistance);if(h.minDistance>K.minDistance&&(h.minDistance=K.minDistance,h.start=K.start,h.end=K.end),0===h.minDistance)return Bh.timeEnd("计算最小距离"),h}return C=null,Bh.timeEnd("计算最小距离"),h},registerDomEventListeners:function(){this.domElement&&this.controlManager.registerDomEventListeners(this.domElement)},unregisterDomEventListeners:function(){this.domElement&&this.controlManager.unregisterDomEventListeners(this.domElement)},registerEventListener:function(A,e){this.modelManager.addEventListener(A,e)},unregisterEventListener:function(A,e){this.modelManager.removeEventListener(A,e)},registerCameraEventListener:function(A,e){this.cameraControl.addEventListener(A,e)},unregisterCameraEventListener:function(A,e){this.cameraControl.removeEventListener(A,e)},registerDomEventListener:function(A,e){this.controlManager.addEventListener(A,e)},unregisterDomEventListener:function(A,e){this.controlManager.removeEventListener(A,e)},load:function(A){var e=this;return this.modelManager.load(A,(function(){}),(function(A){Bh.time("Rendering: "),e.camera.dirty=!0,e.camera.dirty?e.render():(e.zoomAll(),e.goToInitialView()),Bh.timeEnd("Rendering: ")}))},loadWithType:function(){},loadTiles:function(A){var e=this;return this.modelManager.loadTiles(A,(function(){void 0===e._useBatchMerge&&(e._useBatchMerge=e.modelManager.shouldUseBatchRendering(),vc.MergeComponent=e._useBatchMerge,e._setupRenderer())}),(function(A){Bh.time("Rendering: "),e.camera.dirty=!0,e.camera.dirty?e.render():(e.zoomAll(),e.goToInitialView()),Bh.timeEnd("Rendering: ")}))},unload:function(A){var e=this.modelManager.unload(A);return e&&(vc.UserControlView||this.zoomAll(),this.render()),e},unloadAll:function(){this.modelManager.unloadAll(),this.render()},showModel:function(A){this.modelManager.showModel(A)&&this.render()},hideModel:function(A){this.modelManager.hideModel(A)&&this.render()},translateModel:function(A){var e=this._transformModelByKey(A);e&&e.switchToTranslateMode()},rotateModel:function(A){var e=this._transformModelByKey(A);e&&e.switchToRotateMode()},scaleModel:function(A){},showScene:function(A,e){A&&(A.setVisible(e),this.render())},clearAll:function(){this.getScene().clearAll()},restore:function(){this.getFilter().clear(),this.getScene().disableClipPlanes(),this.modelManager.dispatchEvent({type:Rc.ON_VIEWER_RESTORED})},getScene:function(){return this.modelManager.scene},getCapsScene:function(){return this.modelManager.capsScene},getControlManager:function(){return this.controlManager},getUserdataByUserId:function(A){var e=this.modelManager.getNodeInfosByUserId(A);return e&&e instanceof Array?e[0].userData:null},getFilter:function(){return this.filter},getCurrentControlName:function(){return this.controlManager.getCurrentControlName()},getCurrentControlMode:function(){return this.controlManager.getCurrentControlMode()},setControlMode:function(A){this.controlManager.setControlMode(this,A),this.render()},setControlDefault:function(){this.setControlMode(Gc.PICK)},getBoundingBoxWorld:function(){return this.getScene().getBoundingBoxWorld()},getBoundingBox:function(){return this.getScene().getBoundingBox()},getModel:function(A){return this.modelManager.getModel(A)},getModelManager:function(){return this.modelManager},setModelMatrix:function(A,e){var t=this.getModel(e);t&&t.setModelMatrix(A)},getModelMatrix:function(A){var e=null,t=this.getModel(A);return t&&(e=t.getModelMatrix()),e},overturnYAndZaxis:function(A){var e=this.getModel(A);e&&e.overturnYAndZaxis()},zoomIn:function(A){void 0===A&&(A=.1),0>A&&(A=0),this.cameraControl.zoom(A)},zoomOut:function(A){void 0===A&&(A=.1),A>0?A*=-1:A=0,this.cameraControl.zoom(A)},zoomAll:function(A,e,t){var i=this.getScene().getBoundingBox();this._zoomToLocalBox(i,A,e,t)},zoomToBuilding:function(A,e,t){this.zoomAll(A,e,t)},zoomToSelection:function(A,e,t){var i=this.getScene(),o=this.getBoundingBoxByIds(this.modelManager.sceneState.getSelection());o.isEmpty()&&(o=i.getBoundingBox()),!0===this.getTransitionAnimationState()?this.animator.setStandardView(Uc.Keep,this,o,A):this._zoomToLocalBox(o,A,e,t)},_zoomToLocalBox:function(A,e,t,i){this.camera.zoomToBox(A,e,t,i),this.cameraControl.update(!0,!0),this.cameraControl.dirtyCamera(!0)},zoomToBox:function(A,e,t,i){var o=new aA;A?(o.copy(A),o.applyMatrix4(this.getScene().getMatrixGlobal())):o.copy(this.getScene().getBoundingBox()),!0===this.getTransitionAnimationState()?this.animator.setStandardView(Uc.Keep,this,o,e):this._zoomToLocalBox(o,e,t,i)},zoomToBoxByDirection:function(A,e,t,i){if(e){if(e&&A){var o=A.clone(),n=o.getCenter(new y).clone().add(e);o.applyMatrix4(this.getScene().getMatrixGlobal()),n.applyMatrix4(this.getScene().getMatrixGlobal());var r=n.clone().sub(o.getCenter(new y));r.length()>1e-4?(r.normalize(),this.camera.realUp.copy(H.DefaultUp),this._zoomToLocalBox(o,t,i,r)):this._zoomToLocalBox(o,t,i)}}else this.zoomToBox(A,t,i)},zoomToBoxWithOuterBox:function(A,e,t,i){if(e){if(e&&A){var o=A.clone(),n=e.getCenter(new y);o.applyMatrix4(this.getScene().getMatrixGlobal()),n.applyMatrix4(this.getScene().getMatrixGlobal());var r=n.clone().sub(o.getCenter(new y));r.length()>1e-4?(r.normalize(),this.camera.realUp.copy(H.DefaultUp),this.controlManager.zoomToBox(this,o,t,i,r)):this.controlManager.zoomToBox(this,o,t,i)}}else this.zoomToBox(A,t,i)},getObjectsInBox:function(A,e){var t=new aA;return t.copy(A),t.applyMatrix4(this.getScene().getMatrixGlobal()),wg.getObjectsInBox(this.getScene(),t,this.modelManager,this,e)},setStandardView:function(A,e,t,i){var o=this.camera,n=this.getScene().getBoundingBox();if(this.transitionAnimationState)this.animator.setStandardView(A,this,n,e,t,i);else{o.setStandardView(A,n);this.camera.zoomToBox(n,e);this.cameraControl.update(!0,!0),i&&i()}},rotateCameraByViewCubeSide:function(A){this._viewCubeAnimator&&(this._viewCubeAnimator.cancelAnimation(),this._viewCubeAnimator=void 0);var e=this.camera,t=this.getScene().getGeometryBoundingBox(),i=new Cp,o=this;i.rotateCameraByViewCubeSide(e,t,A,(function(A,e,t,i){o.camera.position.copy(t);var n=new y(0,1,0);n.applyQuaternion(e),o.camera.up=n,o.camera.realUp=n.clone(),o.camera.lookAt(i),o.camera.target=i,1>A||o.camera.quaternion.copy(e),o.cameraControl.update(!0)})),this._viewCubeAnimator=i},cancelCurrentAnimationByViewCube:function(){this._viewCubeAnimator&&(this._viewCubeAnimator.cancelAnimation(),this._viewCubeAnimator=void 0)},getLineSelectRange:function(){return vc.LineSelectRange},setLineSelectRange:function(A){vc.LineSelectRange=A},_setStandardView:function(A,e){var t=this.camera,i=this.getScene().getBoundingBox();t.setStandardView(A,i),t.zoomToBox(i,e)},setStandardViewWithBox:function(A,e,t,i){if(e?e.applyMatrix4(this.getScene().getMatrixGlobal()):e=this.getScene().getBoundingBox(),this.transitionAnimationState)this.animator.setStandardView(A,this,e,t);else{var o=this.camera;o.setStandardView(A,e),o.zoomToBox(e,t,i),this.cameraControl.update(!0,!0)}},setTopView:function(A,e,t){this.setStandardViewWithBox(Uc.Top,A,e,t)},setInitialView:function(A){this.initialView=A,this._setStandardView(A)},goToInitialView:function(A){this.setStandardView(this.initialView,A,null)},setHomeView:function(A){this.currentHomeView=A,this._setStandardView(A)},getHomeView:function(){return this.currentHomeView},goToHomeView:function(A){this.setStandardView(this.currentHomeView,A,null)},rotateByAxis:function(A,e,t){var i=t||this.cameraControl.calculatePivot(kc.CENTER,null),o=2*Math.PI/60/60*A;if(e&&"x"!==e){if("y"!==e)return void Bh.warn("Illegal rotation axis for ViewerImpl.rotateByAxis().");this.cameraControl.handleRotation(0,-o,i)}else this.cameraControl.handleRotation(-o,0,i);this.cameraControl.update(!0)},lookAt:function(A,e,t){var i=new y;i.subVectors(e,A),this.camera.lookAtEx(e,i,t),this.cameraControl.updateCamera(e),this.render()},setImageResPath:function(A){vc.TextureResRoot=A},setLimitFrameTime:function(A){vc.IncrementRender&&(A>0||(A=30),vc.LimitFrameTime=A)},limitFrameRate:function(A){vc.IncrementRender&&(A>0||(A=4),vc.LimitFrameTime=1e3/A)},transformCamera:function(A){return Rd.transformCamera(A,this.modelManager.scene)},getCamera:function(){var A=this.getScene().getMatrixGlobal(),e=this.cameraControl.getCamera(),t=this.cameraControl.getCameraName(),i=new Qd(t,e.position,e.target,e.up);i=cp.drawingToWorld(i,A);var o={};if(this.cameraStateWithFrustum){var n=2*(e.near*Math.tan(.5*a.DEG2RAD*e.fov)/e.zoom);o=new Qd(t,i.position,i.target,i.up,e.fov,void 0,e.aspect*n,n)}else o=new Qd(t,i.position,i.target,i.up,e.fov,void 0);return JSON.stringify(o)},setCameraStateWithFrustum:function(A){this.cameraStateWithFrustum=A},setCamera:function(A,e,t){this.camera.dirty=!0;var i=this,o=Rd.parseCameraInfo(A);if(null===o)Bh.log("Invalid camera info string. Fail to set camera.");else if(this.switchToCamera(o.name)){var n=this.getScene().getMatrixGlobal(),r=cp.worldToDrawing(o,n);if(this.transitionAnimationState){var a={position:this.camera.position.clone(),target:this.camera.target.clone(),up:this.camera.realUp.clone()||this.camera.up.clone()};this.animator.active(a,r,this,(function(A){i.cameraControl.update(!0,!0)}),(function(){o.frustumWidth&&o.frustumHeight&&i.resizeByFrustum(o.frustumWidth,o.frustumHeight),t&&t()}))}else{var s=new y;s.subVectors(r.target,r.position),this.camera.lookAtEx(r.target,s,r.up),e&&this.cameraControl.updateCamera(),o.frustumWidth&&o.frustumHeight&&(i.cameraControl.update(!0,!0),i.resizeByFrustum(o.frustumWidth,o.frustumHeight)),t&&t()}}},getRenderBufferScreenShot:function(A,e,t,i){this._render();var o=this.getRenderer().domElement,n=o.toDataURL("image/png"),r=o.width,a=o.height,s=window.devicePixelRatio||1,l=e||r/s,c=t||a/s;if(!l||!c)return i?(i(n),null):n;var h,d=null,p=null,g=0,u=0;if(l>c||l/c>r/a?(d=l,u=c/2-(p=a/r*l)/2):(p=c,g=l/2-(d=r/a*c)/2),i)return(h=new Image).onload=function(){var e=document.createElement("canvas"),t=e.getContext("2d");e.width=l,e.height=c,A&&(t.fillStyle=A,t.fillRect(0,0,l,c)),t.drawImage(h,g,u,d,p);var o=e.toDataURL("image/png");i(o)},h.src=n,null;(h=new Image).src=n;var f=document.createElement("canvas"),m=f.getContext("2d");return f.width=l,f.height=c,A&&(m.fillStyle=A,m.fillRect(0,0,l,c)),m.drawImage(h,g,u,d,p),f.toDataURL("image/png")},screenShot:function(A,e,t){var i=this;return this._render(),function(){var o=i.getRenderer().domElement,n=o.toDataURL("image/png"),r=o.width,a=o.height,s=(window,A),l=e;if(!s||!l)return t?(t(n),null):n;var c=null,h=null,d=0,p=0;if(s>l||s/l>r/a?(c=s,p=l/2-(h=a/r*s)/2):(h=l,d=s/2-(c=r/a*l)/2),t){var g=new Image;return g.onload=function(){var A=document.createElement("canvas"),e=A.getContext("2d");A.width=s,A.height=l,e.drawImage(g,d,p,c,h);var i=A.toDataURL("image/png");t(i)},g.src=n,null}}()},canvas2image:function(A,e,t,i){var o=null,n=this;return i?(this.getRenderBufferScreenShot(A,e,t,(function(A){i(A),n.render()})),null):(o=this.getRenderBufferScreenShot(A,e,t),this.render(),o)},lockAxisZ:function(A,e){var t=this.cameraControl;if(t){var i=t.getZenith(),o=this.getBoundingBox().getCenter().clone();if(A&&void 0!==e||(e=null),e){var n=e[0],r=e[1];i>r?t.handleRotation(0,r-i,o):n>i&&t.handleRotation(0,n-i,o),this.render()}this.cameraControl.lockAxisZ(A),this.cameraControl.setLockAxisZRange(e)}},isLockedAxisZ:function(){return this.cameraControl.isLockedAxisZ()},enableTranslucentByDClick:function(A){vc.EnableDemolishByDClick=A},enableHitDetection:function(A){vc.EnableHitDetection=A},enableRotate:function(A){jh.NoRotate=!A},rotateCamera:function(A,e){this.cameraControl.processRotate(A,e),this.cameraControl.update()},getActiveCameraInfo:function(){var A={};A.up=new y,A.dir=new y;var e=this.camera,t=e.getWorldDirection(new y);return A.up.copy(e.realUp||e.up),A.dir.copy(t),A.quaternion=e.quaternion.clone(),A},calculationPlanes:function(){if(this.isRecalculationPlanes){this.isRecalculationPlanes=!1;var A=this.getScene(),e=this.getBoundingBoxByIds();e.isEmpty()&&(e=A.getBoundingBox()),A.getClipPlanes().calculationPlanes(e.getSize(new y),e.getCenter(new y)),this.render()}},recalculationPlanes:function(){this.isRecalculationPlanes=!0},setOctantDepth:function(A){vc.OctantDepth=A},resizePool:function(A){vc.maxObjectNumInPool=A,this.modelManager.updateSceneRenderable(),this.render()},setCategoriesToHighPriority:function(A,e){this.modelManager.setCategoriesToHighPriority(A,0===e?"inner":"outer")},clearCategoriesFromHighPriority:function(A){this.modelManager.clearCategoriesFromHighPriority(0===A?"inner":"outer")},clearAllCategoriesFromHighPriority:function(){this.modelManager.clearAllCategoriesFromHighPriority()},isolate:function(A,e){var t=this.getFilter();switch(e){case"hide":t.setIsolateConditions(A,Nc.HIDDEN_OTHERS);break;case"translucent":t.setIsolateConditions(A,Nc.TRANSLUCENT_OTHERS);break;default:Bh.warn("no this isolate state : "+e)}},setIsolateMaterial:function(A){this.getFilter().setIsolateMaterial(A)},resetIsolateMaterial:function(){this.getFilter().resetIsolateMaterial()},setOrbitButton:function(A){var e=this.controlManager._getControlByName(this,Gc.ORBIT),i=this.controlManager._getControlByName(this,Gc.PICK),o={};"left"===A?o={ORBIT:t.LEFT,PAN2:t.MIDDLE,PAN:t.RIGHT}:"right"===A&&(o={ORBIT:t.RIGHT,PAN2:t.MIDDLE,PAN:t.LEFT}),e&&e.updateButtons(o),i&&i.updateButtons(o)},showPickedInformation:function(A){},setOrbitEnabled:function(A){jh.NoRotate=!0!==A},getOrbitEnabled:function(){return!jh.NoRotate},setSelectPadCallback:function(A){var e=this.controlManager.getCurrentControlMode();e&&e.selectPad&&(e.selectPad.callback=A)},setDeviceMobile:function(A){vc.IsMobile=A||!1},setPointRotateMode:function(A){jh.RotatePivotMode=A},worldToDrawing:function(A){if(!this.cameraControl)return Bh.warn("camera is not initialized!!!"),null;var e=this.getScene().worldToDrawing(A);return{x:e.x,y:e.y,z:e.z}},drawingToWorld:function(A){if(!this.cameraControl)return Bh.warn("camera is not initialized!!!"),null;var e=this.getScene().drawingToWorld(A);return{x:e.x,y:e.y,z:e.z}},worldToCanvas:function(A){var e=this.cameraControl;if(!e)return Bh.warn("camera is not initialized!!!"),null;var t=e.getContainerDimensions();if(!t)return null;var i=e.getCamera(),o=this.getScene().worldToDrawing(A);return Rd.drawingToCanvas(i,o,t.width,t.height)},canvasToWorld:function(A){var e=this.cameraControl;if(!e)return Bh.warn("camera is not initialized!!!"),null;var t=e.getContainerDimensions();if(!t)return null;var i=e.getCamera(),o=this.getScene(),n=Rd.canvasToDrawing(i,A,t.width,t.height),r=o.drawingToWorld(n);return{x:r.x,y:r.y,z:r.z}},worldToClient:function(A){var e=this.cameraControl;if(!e)return Bh.warn("camera is not initialized!!!"),null;var t=e.getContainerDimensions();if(!t)return null;var i=e.getCamera(),o=this.getScene().worldToDrawing(A),n=Rd.drawingToCanvas(i,o,t.width,t.height);return n?(n.x+=t.left,n.y+=t.top,n):null},worldPointsToClient:function(A,e){var t=this.cameraControl;if(!t)return Bh.warn("camera is not initialized!!!"),null;var i=t.getContainerDimensions();if(!i)return null;var o=t.getCamera(),n=this.getScene(),r=n.worldToDrawing(A),a=n.worldToDrawing(e),s=Rd.drawingPointsToCanvas(o,r,a,i.width,i.height);return s?(s.start.x+=i.left,s.start.y+=i.top,s.end.x+=i.left,s.end.y+=i.top,s):null},clientToWorld:function(A){var e=this.cameraControl;if(!e)return Bh.warn("camera is not initialized!!!"),null;var t=e.getContainerDimensions();if(!t)return null;(n={x:A.x,y:A.y,z:A.z}).x-=t.left,n.y-=t.top;var i=e.getCamera(),o=this.getScene(),n=Rd.canvasToDrawing(i,n,t.width,t.height),r=o.drawingToWorld(n);return{x:r.x,y:r.y,z:r.z}},insideCamera:function(A){var e=this.cameraControl;if(!e)return Bh.warn("camera is not initialized!!!"),!1;var t=this.getScene().worldToDrawing(A);return e.getFrustum().containsPoint(t)},locateToPointWithParallelEye:function(A){var e=this.cameraControl;if(!e)return Bh.warn("camera is not initialized!!!"),!1;var t=this.getScene().worldToDrawing(A);e.flyToPointWithParallelEye(t)},locateToPoint:function(A){var e=this.cameraControl;if(!e)return Bh.warn("camera is not initialized!!!"),!1;var t=this.getScene().worldToDrawing(A);e.flyToPoint(t)},enableHover:function(A){vc.Hover=A},getObjectsByClientCoordinates:function(A){return new fp(this).getObjectsByClientCoordinates(A)},getIBLManager:function(){return this.IBLManager},loadEnvMap:function(A){for(var e=["posx.hdr","negx.hdr","posy.hdr","negy.hdr","posz.hdr","negz.hdr"],t=[],i=0;6>i;i+=1)t.push("/"+A+"/"+e[i]);var o=this;(new(void 0)).load(1015,t,(function(A){o.environmentCubeMap=A,o.modelManager.updateMaterialsValue("envMap",A),o.render()}))},setEnvMapIntensity:function(A){this.modelManager.updateMaterialsValue("envMapIntensity",A),this.setRenderStateChanged(!0),this.render()},closeEnvMap:function(){this.modelManager.updateMaterialsValue("envMap",null),this.render()},enableSSAO:function(A){return!vc.IncrementRender&&(vc.EnableRenderPass=A,vc.SSAO=A,this.setRenderStateChanged(!0),this.render(),!0)},switchNewStyleMaterial:function(A){this.modelManager.switchNewStyleMaterial(A),this.setRenderStateChanged(!0),this.render()},enableColorWithoutLight:function(A){this.modelManager.enableColorWithoutLight(A),this.setRenderStateChanged(!0),this.render()},addPlane:function(A,e,t,i){var o=new y;o.addVectors(new y(A.x,A.y,A.z),new y(e.x,e.y,e.z)),o.multiplyScalar(.5);var n=new Ue(new et(e.x-A.x,e.y-A.y),new jA({side:2,transparent:!0,depthTest:!0}));n.position.copy(o),n.renderOrder=10,this.getScene().getOrCreateGroup(gp.CUSTOMPLANE,{globalSpace:!0}).add(n),n.updateMatrixWorld(!0);var r=this;return(new Aa).load(t,(function(A){n.material.map=A,n.material.needsUpdate=!0,r.setRenderStateChanged(!0),i&&i()})),n},removePlane:function(A){var e=this.getScene().getGroup(gp.CUSTOMPLANE);e&&e.remove(A)},clearPlane:function(){var A=this.getScene().getGroup(gp.CUSTOMPLANE);A&&A.clear()},enableTextureMapping:function(A){vc.EnableTextureMapping=A},enableLightmap:function(A){vc.EnableLightmap!==A&&(vc.EnableLightmap=A)},setLightmapIntensity:function(A){vc.LightmapIntensity!==A&&(vc.LightmapIntensity=A)},setReverseWheelDirection:function(A){jh.ReverseWheelDirection=Boolean(A)},getReverseWheelDirection:function(){return jh.ReverseWheelDirection},setMovementSpeedRate:function(A){void 0!==A&&(jh.MovementSpeedRate=A)},getMovementSpeedRate:function(){return jh.MovementSpeedRate},moveTo:function(A,e,t){var i=this.controlManager.control;i&&i.moveTo(A,e,t)},rotateTo:function(A){var e=this.controlManager.control;e&&e.rotateTo(A)},enableOcclusionTranslucent:function(A){vc.OcclusionTranslucentEnabled=Boolean(A)},setOcclusionOpacity:function(A){vc.OcclusionOpacity=A},setOcclusionDistanceToCamera:function(A){vc.OcclusionDistanceToCamera=A},fitAndRotateBySelection:function(){this.cameraControl&&this.cameraControl.fitAndRotateBySelection()},setRoamingWalkHeight:function(A,e,t){if(Array.isArray(A)){var i=this.cameraControl;if(!i)return Bh.log("camera is not initialized!!!"),!1;if(e>0||(e=1750),void 0===t&&(t=!0),i.setCameraHeight(A,e),t){var o=this.controlManager.getCurrentControl();o&&o.name===Gc.WALK&&o.update&&i.flyOnWorld()}}else Bh.log("elevations is not arry")},setRoamingWalkAbsoluteHeight:function(A,e){var t=this.cameraControl;if(!t)return Bh.log("camera is not initialized!!!"),!1;if(void 0===e&&(e=!0),t.setCameraAbsoluteHeight(A),e){var i=this.controlManager.getCurrentControl();i&&i.name===Gc.WALK&&i.update&&t.flyOnWorld()}},cameraToWorld:function(A){return this.camera?cp.drawingToWorld(A,this.getScene().getMatrixGlobal()):null},cameraToDrawing:function(A){return this.camera?cp.worldToDrawing(A,this.getScene().getMatrixGlobal()):null},clearSelection:function(){this.modelManager.sceneState.clearSelection()},clearModelSelection:function(){this.modelManager.modelState.clearSelection()},addToSelection:function(A){this.modelManager.sceneState.addSelection(A)},addToModelSelection:function(A){this.modelManager.modelState.addSelection(A)},removeFromSelection:function(A){this.modelManager.sceneState.removeSelection(A)},removeFromModelSelection:function(A){this.modelManager.modelState.removeSelection(A)},setSelection:function(A){this.modelManager.sceneState.setSelection(A)},setModelSelection:function(A){this.modelManager.modelState.setSelection(A)},getSelection:function(){return this.modelManager.sceneState.getSelection()},getModelSelection:function(){return this.modelManager.modelState.getSelection()},setSelectionColor:function(A,e){var t=A,i=e;A instanceof Xh&&(t=A.getHex(),i=A.getAlpha()),this.modelManager.sceneState.setSelectionColor(t,i);var o=this.rendererManager.getPickingEffecter();o&&o.setSelectionColor(t,i)},getSelectionColor:function(){return this.modelManager.sceneState.getSelectionColor()},restoreSelectionColor:function(){this.setSelectionColor(new Xh(vc.SelectionColor.color,vc.SelectionColor.opacity))},setModelSelectionColor:function(A,e){this.modelManager.modelState.setSelectionColor(A,e)},getScreenCoordFromSceneCoordAndCheckCover:function(A){var e=void 0,t=!1;if("[object Array]"==Object.prototype.toString.call(A))e=new y(A[0],A[1],A[2]);else{if("[object Object]"!=Object.prototype.toString.call(A))return;e=new y(A.x,A.y,A.z)}if(e){var i=this.camera.position,o=i.distanceTo(e),n=new Ds(i,e.clone().sub(i).normalize()),r=this.cameraControl.getIntersectContext({x:100,y:100}),a=this.cameraControl.intersector.getIntersectByRay(r,n.ray);if(!a)return;t=o-300>i.distanceTo(a.point)}return{screenCoord:this.getScreenCoordFromSceneCoord(e),cover:t}},pickByPoint:function(A){var e=this.cameraControl;if(!1===e.enabled)return!1;var t=new s(A.x,A.y),i=e.getIntersectContext(t),o=e.intersector.pick(i),n=this.getScene();if(o){n.intersectToWorld(o,this);var r={};return r.faceIndex=o.faceIndex,r.componentKey=o.userId,r.worldPosition=o.worldPosition,r.worldBoundingBox=o.worldBoundingBox,r}return null},pickByPointWithNormal:function(A){var e=this.getScene(),t=this.cameraControl;if(!1===t.enabled)return null;var i=new s(A.x,A.y),o=t.getIntersectContext(i),n=t.intersector.pick(o);if(!n)return null;e.intersectToWorld(n,this),n.cx=i.x,n.cy=i.y;var r=[];r.push(n);var a=e.getMatrixGlobal(),l=n.face.normal.clone(),c=new CA(n.worldPosition.clone(),l);c.applyMatrix4(a);var h=t.intersector.getIntersectByRay(o,c);return h&&(e.intersectToWorld(h,this),r.push(h)),r},toDefaultOrthographicCamera:function(A){this.switchToCamera(Ec.ORTHOGRAPHIC),(A||void 0===A)&&this.render()},toDefaultPerspectiveCamera:function(A){this.switchToCamera(Ec.PERSPECTIVE),(A||void 0===A)&&this.render()},getCameraNameList:function(){return["pesp","orth"].concat(this.modelManager.getCameraNameList())},switchToCamera:function(A){var e=!0;if(A===Ec.PERSPECTIVE)this.camera=this.defaultCamera,this.camera.toPerspective();else if(A===Ec.ORTHOGRAPHIC)this.camera=this.defaultCamera,this.camera.toOrthographic();else{var t=this.modelManager.getCamera(A);t?this.camera=t:(Bh.log("Fail to switch because not found camera '"+A+"'"),e=!1)}return e&&this.cameraControl.setCamera(this.camera),this.render(),e},getNumOfElements:function(){return this.modelManager.getNumOfElements()},getNumOfRenderables:function(){return this.modelManager.getNumOfRenderables()},getNumOfTriangles:function(){return this.modelManager.getNumOfTriangles()},setLightPreset:function(A){this.getScene().setLightPreset(A),this.setRenderStateChanged(!0)},getLightPreset:function(){return this.getScene().getLightPreset()},setLightIntensityFactor:function(A){this.getScene().setLightIntensityFactor(A),this.render()},setAmbientLightIntensity:function(A){this.getScene().setAmbientLightIntensity(A),this.render()},getAmbientLightIntensity:function(){return this.getScene().getAmbientLightIntensity()},setWalkHeightLocked:function(A){var e=this.controlManager.getCurrentControl();e&&e.name===Gc.WALK&&e.setHeightLocked(A)},setWalkLookMousePressed:function(A){var e=this.controlManager.getCurrentControl();e&&e.name===Gc.WALK&&e.setDragLook(A)},setWalkSpeedRate:function(A){var e=this.controlManager.getCurrentControl();e&&e.name===Gc.WALK&&(jh.MovementSpeedRate=A)},getWalkSpeedRate:function(){return jh.WalkSpeedRate},setDrawingStyle:function(A){vc.DrawingStyle=A,this.modelManager.applyFilter(),this.setRenderStateChanged(!0)},getWireframeColor:function(A){var e=this.modelManager;if(A&&e.models[A])return e.models[A].wireframeManager.getWireframeColor();for(var t in e.models){return e.models[t].wireframeManager.getWireframeColor()}},setWireframeColor:function(A,e){var t=this.modelManager;if(e&&t.models[e])t.models[e].wireframeManager.setWireframeColor(new LA(A),A.a||1);else for(var i in t.models)t.models[i].wireframeManager.setWireframeColor(new LA(A),A.a||1);this.setRenderStateChanged(!0)},restoreWireframeColor:function(A){var e=this.modelManager;if(A&&e.models[A])e.models[A].wireframeManager.restoreWireframeColor();else for(var t in e.models)e.models[t].wireframeManager.restoreWireframeColor();this.setRenderStateChanged(!0)},setInstanceMode:function(A){!vc.Instance===A&&(vc.Instance=A,this.getScene().getOrCreateGroup(gp.INSTANCEGEOMETRY,{globalSpace:!0}).visible=!!A)},setTransitionAnimationState:function(A){this.transitionAnimationState=A},getTransitionAnimationState:function(){return this.transitionAnimationState},clipPoint:function(A){var e=this.getRenderer().clippingPlanes;if(e&&e.length>0)for(var t=0;e.length>t;t+=1){var i=e[t];if(A.dot(i.normal)<-i.constant)return!0}return!1},setExposureShift:function(A){vc.ToneMapping=1,this.modelManager.updateMaterialsValue("shift",A>0?-.4*A+.5:-4*A+.5),this.setRenderStateChanged(!0)},setRenderStateChanged:function(A){this.modelManager&&this.modelManager.setRenderStateChanged(A)},isRenderStateChanged:function(){return this.modelManager._renderStateChanged},getComponentInfoByUserId:function(A){return this.modelManager.getComponentInfoByUserId(A)},getBoundingBoxByIds:function(A){var e=new aA;if(Array.isArray(A)){for(var t=0;A.length>t;t+=1)if(!this.modelManager.isHiddenUserId(A[t])){var i=this.getModelByComponentKey(A[t]),o=this.getComponentInfoByUserId(A[t]);if(o)if(i){var n=o.boundingBox.clone().applyMatrix4(i.getModelMatrix());e.union(n)}else e.union(o.boundingBox)}}else for(var r in A)if(!this.modelManager.isHiddenUserId(r)){var a=this.getModelByComponentKey(r),s=this.getComponentInfoByUserId(r);if(s)if(a){var l=s.boundingBox.clone().applyMatrix4(a.getModelMatrix());e.union(l)}else e.union(s.boundingBox)}return e.isEmpty()||e.applyMatrix4(this.getScene().getMatrixGlobal()),e},setConditionsOnDemandLoad:function(A,e,t,i){e=e||!0,this.modelManager.setConditionsOnDemandLoad(A),e&&this.modelManager.loadGeopkOnDemand(t,i)},loadGeopkOnDemand:function(A,e,t,i){var o=this;this.modelManager.loadGeopkOnDemand(A,e,t,(function(){var A=o.modelManager.getNodeInfos();o.filter.reinitFilterManager(A),o.setRenderStateChanged(!0),o.render(),i&&i()}))},unloadGeopkOnDemand:function(A,e){var t=this;this.filter._hasVisibleFilter()&&(this.filter.showByIds(A),this.filter.removeFromIsolateList(A)),this.filter._hasOverrideMaterialFilter()&&(this.filter.addToOverrideListByColor(A,null),this.filter.addToWireframeByWireframe(A,null)),this.filter._hasTransparentFilter()&&this.filter.opaqueByIds(A),this.removeFromSelection(A);for(var i=0,o=A.length;o>i;i+=1);this.modelManager.unloadGeopkOnDemand(A,(function(){var A=t.modelManager.getNodeInfos();t.filter.reinitFilterManager(A),t.setRenderStateChanged(!0),t.render(),e&&e()}))},getBoundingBoxOnDemand:function(){return this.modelManager.getBoundingBoxOnDemand()},getScreenCoordFromSceneCoord:function(A){var e=[];if(A.isVector3){var t=A.clone();t.applyMatrix4(this.camera.matrixWorldInverse);var i=t.z>0;return t.applyMatrix4(this.camera.projectionMatrix),e[0]=(t.x+1)*this.domElement.clientWidth/2,e[1]=(1-t.y)*this.domElement.clientHeight/2,e[2]=i?1:0,e}if(Array.isArray(A)){var o=new y(A[0],A[1],A[2]);o.applyMatrix4(this.camera.matrixWorldInverse);i=o.z>0;return o.applyMatrix4(this.camera.projectionMatrix),e[0]=(o.x+1)*this.domElement.clientWidth/2,e[1]=(1-o.y)*this.domElement.clientHeight/2,e[2]=i?1:0,o=null,e}},_checkDataChanged:function(){var A=this.modelManager;A.hasModelDataReady()&&(this.getFilter().isStateChanged()||this.isRenderStateChanged())&&(this.isRenderStateChanged()&&this.setRenderStateChanged(!1),this.getFilter().isStateChanged()&&this.getFilter().disableStateChanged(),this.needApplyFilter=!0),this.needCheckTilesDataChange&&(this.needCheckTilesDataChange=!1,A.checkTilesDataChanged(this.camera,this.getRenderer()))},_checkLayerDataLoading:function(){return!(!this.modelManager.isLayerData()||!this._layerDataLoading)&&(this.getFilter().isStateChanged()&&this.getFilter().disableStateChanged(),!0)},setOutlineEdgeColor:function(A){this.rendererManager.composer&&this.rendererManager.composer.setOutlineEdgeColor(A);var e=this.rendererManager.getPickingEffecter();e&&e.setLineSelectionColor(A.getHex(),A.opacity)},getOutlineEdgeColor:function(){if(this.rendererManager.composer)return this.rendererManager.composer.getOutlineEdgeColor();var A=this.rendererManager.getPickingEffecter();return A?A.getLineSelectionColor():void 0},restoreOutlineEdgeColor:function(A){this.setOutlineEdgeColor(new Xh(vc.SelectionColor.color,vc.SelectionColor.opacity))},enableSelectedColorIsAffectedByLight:function(A){vc.InfluencedByLight=A,vc.InfluencedByLight?delete this.modelManager.getSceneState().selectionMaterial.defines.NOTAFFECTEDBYLIGHT:this.modelManager.getSceneState().selectionMaterial.defines.NOTAFFECTEDBYLIGHT=""},enableLogarithmicDepthBuffer:function(A){vc.logarithmicDepthBuffer!==A&&(vc.logarithmicDepthBuffer=A,this.renderSettings.logarithmicDepthBuffer=A,this.rendererManager.resetupRenderer(this.renderSettings||{}),this._render(),this.updateShadowLight())},enableBlinkComponents:function(A){this.modelManager.isBlinkPermited()||(this.modelManager.enableBlink(A),this.render())},setBlinkComponentsById:function(A){this.modelManager.isBlinkPermited()||this.modelManager.sceneState.setBlinkComponentsById(A)},addBlinkComponentsById:function(A){this.modelManager.isBlinkPermited()||this.modelManager.sceneState.addBlinkComponentsById(A)},clearBlinkComponentsById:function(A){this.modelManager.isBlinkPermited()||this.modelManager.sceneState.clearBlinkComponentsById(A)},clearAllBlinkComponents:function(){this.modelManager.isBlinkPermited()||this.modelManager.sceneState.clearAllBlinkComponents()},getBlinkComponents:function(){return this.modelManager.isBlinkPermited()?null:this.modelManager.sceneState.getBlinkComponents()},setBlinkColor:function(A){this.modelManager.isBlinkPermited()||this.modelManager.setBlinkColor(A.color,A.opacity)},setBlinkIntervalTime:function(A){this.modelManager.isBlinkPermited()||this.modelManager.setBlinkIntervalTime(A)},getModelByComponentKey:function(A){var e=null;for(var t in this.modelManager.models)if(this.modelManager.models.hasOwnProperty(t)&&(e=this.modelManager.getModel(t))&&e.isLoaded()&&e.hasComponent(A))return e},getSceneState:function(){return{state:this.getFilter().saveState(),camera:this.getCamera(),selection:this.getSelection(),modelSelection:this.getModelSelection()}},setSceneState:function(A){void 0!==A.camera&&"object"!==lc(A.camera)||(A.camera=JSON.stringify(A.camera)),this.setCamera(A.camera,!1),this.setSelection(A.selection),this.setModelSelection(A.modelSelection),this.getFilter().loadState(A.state)},setComponentPositionByKey:function(A,e){var t=(new y).fromArray(e),i=(this.getModelManager(),new M,this.modelManager.getComponent(A));if(i&&i.length>=1){for(var o=new aA,n=0,r=i.length;r>n;n+=1){o&&o.union(i[n].boundingBox)}var a=new y;o.getCenter(a);var s=this.getModelByComponentKey(A);if(s){var l=s.getModelMatrix();if(l){var c=new M;c.getInverse(l),t.applyMatrix4(c)}}t.sub(a);var h=(new M).makeTranslation(t.x,t.y,t.z);this.componentApplyMatrix2(A,h,!0),this.updateTransformControlIfBindingComKeyEqual(A)}},setBackgroundColor:function(A,e){if(e)this.setBackgroundColors([{color:A,stop:"0%"},{color:e,stop:"100%"}],"180deg");else{var t=this.getDomElement();t&&(t.style.background=A.getRGBA())}},setBackgroundColors:function(A,e){var t=this.getDomElement(),i=e||"0deg",o=[];if(A&&A.length>0){1===A.length&&this.setBackgroundColor(A[0].color||A[0]);for(var n=0;A.length>n;n+=1){var r=A[n].color.getRGBA()+" "+A[n].stop;o.push(r)}var a=i+", "+o.join(",");t&&(t.style.background="linear-gradient("+a+")")}},resetBackgroundColor:function(){this.getDomElement()&&(this.domElement.style.background="linear-gradient(rgb(135,206,250) 0%, rgb(245, 245, 245) 100%)")},getComponentLocalMatrixByKey:function(A){if(A){var e=this.modelManager.getComponent(A);if(e&&e.length>0&&e[0].matrix)return e[0].matrix.clone()}},getComponentWorldMatrixByKey:function(A){var e=this.getComponentLocalMatrixByKey(A);if(e){var t=this.getModelByComponentKey(A);if(t){var i=t.getModelMatrix();e.premultiply(i)}return e}},setComponentLocalMatrixByKey:function(A,e){if(A){var t=this.modelManager.getComponent(A);if(t&&t.length>0){var i=t[0].mesh;return i.matrix.fromArray(e),i.updateMatrixWorld(!0),this.render(),!0}}return!1},_transformComponentByKey:function(A,e,t){var i=this;if(A){var o=this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM);if(o&&o.bindingComponentKey===A)return o;var n=this.getModelByComponentKey(A),r=function(A){i.render()},a=function(t){"string"==typeof A&&t.matrix&&t.object&&(i.componentApplyMatrix2(A,t.matrix,!1),i.getScene().expandBoundingBoxWorldBy(t.object)),e&&e(A)};if("string"!=typeof A){if(A instanceof H){var s=A;return this.controlManager.enableTool(this,Pc.COMPONENT_TRANSFORM),(o=this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM)).transformComponent(s,r,a),o.bindingComponentKey=void 0,o}return}var l=this.modelManager.getComponent(A);if(l&&l.length>0){var c=i.externalComponentManager;c&&c.getNodeInfosByUserId(A)&&c.recalculateComponentBoundingbox(A);for(var h=new aA,d=0,p=l.length;p>d;d+=1)h.union(l[d].transformationOriginalBoundingBox?l[d].transformationOriginalBoundingBox:l[d].boundingBox);var g=new Ue(Tu.getGeometryFromBox3(h));if(g.matrixAutoUpdate=!1,l[0].transformation&&g.matrix.copy(l[0].applyMatrix),n){var u=n.getModelMatrix();if(u){var f=new Xi;f.matrixAutoUpdate=!1,f.matrix.copy(u),f.updateMatrixWorld(!0),f.add(g)}}return g.updateMatrixWorld(!0),this.controlManager.enableTool(this,Pc.COMPONENT_TRANSFORM),(o=this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM)).transformComponent(g,r,a,void 0,(function(e){if(n)n.calculateBoundingBox();else{var o=i.externalComponentManager;o&&o.getNodeInfosByUserId(A)&&o.calculateBoundingBox()}i.modelManager.updateSceneBoundingBox(),t&&t(A)})),o.bindingComponentKey=A,this.modelManager.updateTransformComponentList(A),o}}},_transformModelByKey:function(A){if(A&&"string"==typeof A){var e=this.getModel(A);if(e&&e.isLoaded()&&e.isVisible()){var t=this,i=e.getBoundingBoxWorld();if(i.isEmpty())return;var o=new Ue(Tu.getGeometryFromBox3(i));o.matrixAutoUpdate=!1,o.updateMatrixWorld(!0),this.controlManager.enableTool(this,Pc.COMPONENT_TRANSFORM);var n=this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM);return n.transformComponent(o,(function(A){t.render()}),(function(A){A&&A.matrix&&e.applyModelMatrix(A.matrix)})),n}}},translateComponentByKey:function(A,e,t){var i=this._transformComponentByKey(A,e,t);i&&i.switchToTranslateMode()},scaleComponentByKey:function(A,e,t){var i=this._transformComponentByKey(A,e,t);i&&i.switchToScaleMode()},rotateComponentByKey:function(A,e,t){var i=this._transformComponentByKey(A,e,t);i&&i.switchToRotateMode()},cancelTransformComponent:function(A){var e=this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM);e&&(A&&this.restoreComponentTransform(),e.cancelTransformComponent(),this.controlManager.disableTool(e.name))},cancelTransformComponentByKey:function(A){if(A&&"string"==typeof A){var e=this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM);e&&e.bindingComponentKey===A&&(e.cancelTransformComponent(),this.controlManager.disableTool(e.name))}},restoreComponentTransform:function(){var A=this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM);A&&(A.bindingComponentKey?this.restoreComponentTransformByKey(A.bindingComponentKey):A.restoreComponentOriginalTransformState()&&this.render())},restoreComponentTransformByKey:function(A){A&&"string"==typeof A&&(this.resetComponentMatrix(A),this.updateTransformControlIfBindingComKeyEqual(A))},updateTransformControlIfBindingComKeyEqual:function(A){var e=this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM);e&&e.bindingComponentKey===A&&(e.cancelTransformComponent(),this._transformComponentByKey(A))},increaseComponentTransformControlSize:function(){var A=this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM);A&&A.increaseTransformControlSize()&&this.render()},decreaseComponentTransformControlSize:function(){var A=this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM);A&&A.decreaseTransformControlSize()&&this.render()},setComponentTransformSpaceToLocalSpace:function(){var A=this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM);A&&A.setTransformSpaceToLocalSpace()&&this.render()},setComponentTransformSpaceToWorldSpace:function(){var A=this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM);A&&A.setTransformSpaceToWorldSpace()&&this.render()},switchComponentTransformSpaceBetweenLocalAndWorld:function(){var A=this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM);A&&A.switchTransformSpace()&&this.render()},showComponentTransformOnAxis:function(A){var e=this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM);e&&e.showTransformOnAxis(A)&&this.render()},hideComponentTransformOnAxis:function(A){var e=this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM);e&&e.hideTransformOnAxis(A)&&this.render()},disableComponentTransform:function(){var A=this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM);A&&A.disableTransform()&&this.render()},enableComponentTransform:function(){var A=this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM);A&&A.enableTransform()&&this.render()},componentApplyMatrix:function(A,e){var t=this.getModelManager(),i=this.getModelByComponentKey(A);if(i){t.explosionList[A]||(t.explosionList[A]=!0);var o=i._getHandler();if(o instanceof MC){var n=this.modelManager.getComponent(A);if(n&&n[0]&&n[0].mesh){var r=n[0].mesh;if(r){r.userData.originalMatrix||(r.userData.originalMatrix=r.matrixWorld.clone());var a=new y(r.userData.originalMatrix.elements[12],r.userData.originalMatrix.elements[13],r.userData.originalMatrix.elements[14]),s=new M;s.setPosition(a);var l=new M;l.setPosition(a.multiplyScalar(-1)),r.matrixWorld.multiply(l).multiply(e).multiply(s)}}}else if(o instanceof Yf){var c=i.getModelDescriptor(),h=c.mapNodeInfoByCategory[1],d=c.mapNodeInfoByCategory[0];if(h.hasOwnProperty(A))for(var p=h[A],g=0;p.length>g;g+=1){var u=p[g],f=u.mesh;if(f){var m=u.index,C=f.geometry.attributes.position;Tu.applyMatrix4ToBuffer(e,C.array,m.positionStart,m.positionStart+m.positionCount),C.needsUpdate=!0}}if(d.hasOwnProperty(A))for(var v=d[A],I=o.instancedManager.meshManager,E=0;v.length>E;E+=1)for(var B=v[E],x=I.getMeshIdByNodeInfo(B),S=I.nodeIdxMapFromUserId[A][x],w=0,b=S.length;b>w;w+=1){var U=S[w],F=I.instanceGeometryMap[x][w],K=F.getAttribute("mcol0"),Q=F.getAttribute("mcol1"),R=F.getAttribute("mcol2"),T=F.getAttribute("mcol3");B.transformation||(B.transformation=!0,B.transformationOriginalMatrix=B.matrix.clone());var k=(new y).fromArray(B.transformationOriginalMatrix.elements,12),D=new M;D.setPosition(k);var L=new M;L.setPosition(k.multiplyScalar(-1));var N=new M;N.fromArray([K.array[3*U],K.array[3*U+1],K.array[3*U+2],0,Q.array[3*U],Q.array[3*U+1],Q.array[3*U+2],0,R.array[3*U],R.array[3*U+1],R.array[3*U+2],0,T.array[3*U],T.array[3*U+1],T.array[3*U+2],1],0),N.multiply(L).multiply(e).multiply(D),K.array[3*U]=N.elements[0],K.array[3*U+1]=N.elements[1],K.array[3*U+2]=N.elements[2],K.needsUpdate=!0,Q.array[3*U]=N.elements[4],Q.array[3*U+1]=N.elements[5],Q.array[3*U+2]=N.elements[6],Q.needsUpdate=!0,R.array[3*U]=N.elements[8],R.array[3*U+1]=N.elements[9],R.array[3*U+2]=N.elements[10],R.needsUpdate=!0,T.array[3*U]=N.elements[12],T.array[3*U+1]=N.elements[13],T.array[3*U+2]=N.elements[14],T.needsUpdate=!0,B.matrix=N}}else Bh.warn("当前模式下暂不支持构件变换")}this.render()},componentApplyMatrix2:function(A,e,t){var i=this.getModelByComponentKey(A),o=this.getModelManager().getComponent(A);if(o&&o.length>0){for(var n=0;o.length>n;n+=1){var r=o[n];if(r.matrix||(r.matrix=new M),r.transformation||(r.transformation=!0,r.transformationOriginalMatrix=r.matrix.clone(),r.applyMatrix=new M,r.boundingBox&&(r.transformationOriginalBoundingBox=r.boundingBox.clone())),r.matrix.premultiply(e),r.applyMatrix.premultiply(e),r.boundingBox&&r.boundingBox.copy(r.transformationOriginalBoundingBox).applyMatrix4(r.applyMatrix),r.isBatched){var a=i._getHandler();if(!0===r.instanceOrNot)for(var s=a.instancedManager.meshManager,l=s.getMeshIdByNodeInfo(r),c=s.nodeIdxMapFromUserId[A][l],h=0,d=c.length;d>h;h+=1){var p=c[h],g=s.instanceGeometryMap[l][h],u=g.getAttribute("mcol0"),f=g.getAttribute("mcol1"),m=g.getAttribute("mcol2"),C=g.getAttribute("mcol3"),y=r.matrix;u.array[3*p]=y.elements[0],u.array[3*p+1]=y.elements[1],u.array[3*p+2]=y.elements[2],u.needsUpdate=!0,f.array[3*p]=y.elements[4],f.array[3*p+1]=y.elements[5],f.array[3*p+2]=y.elements[6],f.needsUpdate=!0,m.array[3*p]=y.elements[8],m.array[3*p+1]=y.elements[9],m.array[3*p+2]=y.elements[10],m.needsUpdate=!0,C.array[3*p]=y.elements[12],C.array[3*p+1]=y.elements[13],C.array[3*p+2]=y.elements[14],C.needsUpdate=!0}else{var v=r.mesh;if(!v)continue;var I=r.index,E=v.geometry;v.geometry.boundingBox=null;var B=E.attributes.position;Tu.applyMatrix4ToBuffer(e,B.array,I.positionStart,I.positionStart+I.positionCount),B.needsUpdate=!0;var x=a.defaultManager.wireframeManager.wireframeLineSegment;if(x)for(var S=x._indicesGroup[A],w=0,b=S.length;b>w;w+=1){var U=S[w];if(S[w].nodeId===r.nodeId){var F=x.geometry.attributes.position;Tu.applyMatrix4ToBuffer(e,F.array,3*U.positionStart,3*(U.positionStart+U.positionCount)),F.needsUpdate=!0;break}}}}else{var K=null;if(r.mesh instanceof Array)K=r.mesh;else{if(!(r.mesh instanceof H))continue;K=[r.mesh]}for(var Q=0,R=K.length;R>Q;Q+=1){var T=K[Q];r.isExternalComponent&&(T.userData.originalMatrix||(T.userData.originalMatrix=T.matrix.clone()));var k=T.matrixAutoUpdate;T.matrixAutoUpdate=!1,T.applyMatrix4(e),T.matrixAutoUpdate=k,T.updateMatrixWorld(!0)}var D=r.wireframeMeshs;if(D)for(var L=0,N=D.length;N>L;L+=1){var O=D[L];k=O.matrixAutoUpdate,O.matrixAutoUpdate=!1,O.matrix.copy(r.matrix),O.updateMatrixWorld(!0),O.matrixAutoUpdate=k}}}if(void 0===t&&(t=!0),t){if(i)i.calculateBoundingBox();else{var V=this.externalComponentManager;V&&V.getNodeInfosByUserId(A)&&V.calculateBoundingBox()}this.modelManager.updateSceneBoundingBox()}}this.modelManager.updateTransformComponentList(A),this.render()},setComponentMatrix:function(A,e){this.setComponentMatrix2(A,e)},setComponentMatrix2:function(A,e,t){var i=this.getModelManager().getComponent(A);if(i&&i.length>0)for(var o=0;i.length>o;o+=1){var n=i[o];n.matrix||(n.matrix=new M);var r=null;n.transformation?r=(new M).getInverse(n.applyMatrix):(n.transformation=!0,n.transformationOriginalMatrix=n.matrix.clone(),n.applyMatrix=new M,n.boundingBox&&(n.transformationOriginalBoundingBox=n.boundingBox.clone())),n.matrix.copy(n.transformationOriginalMatrix).premultiply(e),n.applyMatrix.copy(e),n.boundingBox&&n.boundingBox.copy(n.transformationOriginalBoundingBox).applyMatrix4(n.applyMatrix);var a=this.getModelByComponentKey(A);if(n.isBatched){var s=a._getHandler();if(!0===n.instanceOrNot)for(var l=s.instancedManager.meshManager,c=l.getMeshIdByNodeInfo(n),h=l.nodeIdxMapFromUserId[A][c],d=0,p=h.length;p>d;d+=1){var g=h[d],u=l.instanceGeometryMap[c][d],f=u.getAttribute("mcol0"),m=u.getAttribute("mcol1"),C=u.getAttribute("mcol2"),y=u.getAttribute("mcol3"),v=n.matrix;f.array[3*g]=v.elements[0],f.array[3*g+1]=v.elements[1],f.array[3*g+2]=v.elements[2],f.needsUpdate=!0,m.array[3*g]=v.elements[4],m.array[3*g+1]=v.elements[5],m.array[3*g+2]=v.elements[6],m.needsUpdate=!0,C.array[3*g]=v.elements[8],C.array[3*g+1]=v.elements[9],C.array[3*g+2]=v.elements[10],C.needsUpdate=!0,y.array[3*g]=v.elements[12],y.array[3*g+1]=v.elements[13],y.array[3*g+2]=v.elements[14],y.needsUpdate=!0}else{var I=n.mesh;if(!I)continue;var E=n.index,B=I.geometry.attributes.position;r&&Tu.applyMatrix4ToBuffer(r,B.array,E.positionStart,E.positionStart+E.positionCount),Tu.applyMatrix4ToBuffer(n.applyMatrix,B.array,E.positionStart,E.positionStart+E.positionCount),B.needsUpdate=!0;var x=s.defaultManager.wireframeManager.wireframeLineSegment;if(x)for(var S=x._indicesGroup[A],w=0,b=S.length;b>w;w+=1){var U=S[w];if(S[w].nodeId===n.nodeId){var F=x.geometry.attributes.position;r&&Tu.applyMatrix4ToBuffer(r,F.array,3*U.positionStart,3*(U.positionStart+U.positionCount)),Tu.applyMatrix4ToBuffer(e,F.array,3*U.positionStart,3*(U.positionStart+U.positionCount)),F.needsUpdate=!0;break}}}}else{var K=null;if(n.mesh instanceof Array)K=n.mesh;else{if(!(n.mesh instanceof H))continue;K=[n.mesh]}for(var Q=0,R=K.length;R>Q;Q+=1){var T=K[o];n.isExternalComponent&&(T.userData.originalMatrix||(T.userData.originalMatrix=T.matrix.clone()));var k=T.matrixAutoUpdate;T.matrixAutoUpdate=!1,T.matrix.copy(n.matrix),T.applyMatrix4(new M),T.matrixAutoUpdate=k,T.updateMatrixWorld(!0)}var D=n.wireframeMeshs;if(D)for(var L=0,N=D.length;N>L;L+=1){var O=D[L];k=O.matrixAutoUpdate,O.matrixAutoUpdate=!1,O.matrix.copy(n.matrix),O.updateMatrixWorld(!0),O.matrixAutoUpdate=k}}if(void 0===t&&(t=!0),t){if(a)a.calculateBoundingBox();else{var V=this.externalComponentManager;V&&V.getNodeInfosByUserId(A)&&V.calculateBoundingBox()}this.modelManager.updateSceneBoundingBox()}}this.render()},resetComponentMatrix:function(A,e){var t=this.getModelManager().getComponent(A);if(t&&t.length>0)for(var i=0;t.length>i;i+=1){var o=t[i];if(o.transformation){o.matrix.copy(o.transformationOriginalMatrix),o.transformationOriginalBoundingBox&&(o.boundingBox=o.transformationOriginalBoundingBox.clone());var n=(new M).getInverse(o.applyMatrix),r=this.getModelByComponentKey(A);if(o.isBatched){var a=r._getHandler();if(!0===o.instanceOrNot)for(var s=a.instancedManager.meshManager,l=s.getMeshIdByNodeInfo(o),c=s.nodeIdxMapFromUserId[A][l],h=0,d=c.length;d>h;h+=1){var p=c[h],g=s.instanceGeometryMap[l][h],u=g.getAttribute("mcol0"),f=g.getAttribute("mcol1"),m=g.getAttribute("mcol2"),C=g.getAttribute("mcol3"),y=o.matrix;u.array[3*p]=y.elements[0],u.array[3*p+1]=y.elements[1],u.array[3*p+2]=y.elements[2],u.needsUpdate=!0,f.array[3*p]=y.elements[4],f.array[3*p+1]=y.elements[5],f.array[3*p+2]=y.elements[6],f.needsUpdate=!0,m.array[3*p]=y.elements[8],m.array[3*p+1]=y.elements[9],m.array[3*p+2]=y.elements[10],m.needsUpdate=!0,C.array[3*p]=y.elements[12],C.array[3*p+1]=y.elements[13],C.array[3*p+2]=y.elements[14],C.needsUpdate=!0}else{var v=o.mesh;if(!v)continue;var I=o.index,E=v.geometry.attributes.position;n&&(Tu.applyMatrix4ToBuffer(n,E.array,I.positionStart,I.positionStart+I.positionCount),E.needsUpdate=!0);var B=a.defaultManager.wireframeManager.wireframeLineSegment;if(B)for(var x=B._indicesGroup[A],S=0,w=x.length;w>S;S+=1){var b=x[S];if(x[S].nodeId===o.nodeId){var U=B.geometry.attributes.position;n&&(Tu.applyMatrix4ToBuffer(n,U.array,3*b.positionStart,3*(b.positionStart+b.positionCount)),U.needsUpdate=!0);break}}}}else{var F=null;if(o.mesh instanceof Array)F=o.mesh;else{if(!(o.mesh instanceof H))continue;F=[o.mesh]}for(var K=0,Q=F.length;Q>K;K+=1){var R=F[i],T=void 0;if(T=o.isExternalComponent?R.userData.originalMatrix:o.matrix){var k=R.matrixAutoUpdate;R.matrixAutoUpdate=!1,R.matrix.copy(T),R.applyMatrix4(new M),R.matrixAutoUpdate=k,R.updateMatrixWorld(!0),R.userData.originalMatrix=void 0}}var D=o.wireframeMeshs;if(D)for(var L=0,N=D.length;N>L;L+=1){var O=D[L];k=O.matrixAutoUpdate,O.matrixAutoUpdate=!1,O.matrix.copy(o.matrix),O.updateMatrixWorld(!0),O.matrixAutoUpdate=k}}if(void 0===e&&(e=!0),e){if(r)r.calculateBoundingBox();else{var V=this.externalComponentManager;V&&V.getNodeInfosByUserId(A)&&V.calculateBoundingBox()}this.modelManager.updateSceneBoundingBox()}o.transformationOriginalMatrix=void 0,o.transformationOriginalBoundingBox=void 0,o.applyMatrix=void 0,o.transformation=void 0}}this.render()},calculateComponentVolume:function(A){var e=this.modelManager.getComponent(A),t=this.modelManager.getMeshByUserId(A);if(e&&e.length>0){Bh.time("计算体积");for(var i=0,o=0,n=e.length;n>o;o+=1){var r=e[o];if(r.isExternalComponent)for(var a=r.mesh,s=0,l=a.length;l>s;s+=1){var c=a[s].geometry,h=Tu.calculateVolumeOfGeometry(c.attributes.position.array,c.index.array);h&&(i+=h)}else if(t){var d=r.mesh||t[o].mesh;if(d){var p=d.geometry,g=d._indicesGroup;if(g&&!r.instanceOrNot)for(var u=g[A],f=0,m=u.length;m>f;f+=1){var C=u[f],v=Tu.calculateVolumeOfGeometry(p.attributes.position.array,p.index.array,C.indexStart,C.indexCount);v&&(i+=v)}else{var I=Tu.calculateVolumeOfGeometry(p.attributes.position.array,p.index.array);I&&(i+=I)}}}}var E=this.getBoundingBoxByIds([A]),B=new y;return E.getCenter(B),Bh.timeEnd("计算体积"),{volume:i,position:B.toArray()}}},setAxisNetColor:function(A,e){var t=!1,i=this.modelManager;for(var o in i.models){var n=i.models[o];n.axisNetManager&&(n.axisNetManager.setupColor(A,e),t=!0)}t&&this.render(!0)},showAxisNet:function(){var A=!1,e=this.modelManager;for(var t in e.models){var i=e.models[t];i.axisNetManager&&(i.axisNetManager.show(),A=!0)}A&&this.render(!0)},hideAxisNet:function(){var A=!1,e=this.modelManager;for(var t in e.models){var i=e.models[t];i.axisNetManager&&(i.axisNetManager.hide(),A=!0)}A&&this.render(!0)},enableAxisNetStayInFront:function(){var A=!1,e=this.modelManager;for(var t in e.models){var i=e.models[t];i.axisNetManager&&(i.axisNetManager.enableStayInFront(),A=!0)}A&&this.render(!0)},disableAxisNetStayInFront:function(){var A=!1,e=this.modelManager;for(var t in e.models){var i=e.models[t];i.axisNetManager&&(i.axisNetManager.disableStayInFront(),A=!0)}A&&this.render(!0)},enableSnap:function(A){this.controlManager.getToolByName(Pc.PICK_BY_RECT).enableSnap(A)},pickToPoint:function(A,e){return this.controlManager.control.pickHelper.pickToPoint(A,e)},getViewportSize:function(){return this.rendererManager.getRendererSize()},getRenderer:function(){return this.rendererManager.getRenderer()},getExternalComponentManager:function(){return this.externalComponentManager||(this.externalComponentManager=new Vy(this)),this.externalComponentManager},addExternalObject:function(A,e,t,i){A=A||uh.createUUID();this.getExternalComponentManager().addNode(A,e,t,i),this.render()},addExternalObjects:function(A,e,t){for(var i=this.getExternalComponentManager(),o=[],n=0;A.length>n;n+=1){var r=uh.createUUID();i.addNode(r,A[n],e,t),o.push(r)}return this.render(),o},removeExternalObjectByName:function(A){this.getExternalComponentManager().removeNodeById(A),this.render()},clearExternalObjects:function(){this.getExternalComponentManager().clearNodes(),this.render()},getExternalObjectByName:function(A){return this.getExternalComponentManager().getNodeById(A)},getAllExternalObjects:function(){return Object.values(this.getExternalComponentManager().getAllNodes())},getModelFloorMapsByKey:function(A,e){var t=this.modelManager.models[A];if(t&&t.floorManager){if("function"!=typeof e)return t.floorManager.getMimiMaps();t.floorManager.getServerMimiMaps(e)}},getReceivingPlane:function(A){return this.getScene().getReceivingPlane(A)},enableShadow:function(A){this.getReceivingPlane(A),A?this.getScene().lightManager.enableShadowLight():this.getScene().lightManager.disableShadowLight();var e=this.getRenderer();e.shadowMap.enabled=A,e.shadowMap.type=2,e.shadowMap.autoUpdate=!1,e.shadowMap.needsUpdate=!0;for(var t=this.getScene().getGroups(),i=this.getScene(),o=0;t.length>o;o+=1){var n=i.getGroupType(t[o].name);n.groupType!==gp.IBLCUBE&&("ClipPlane"!==n.groupType&&this.traverseGroupEnableShadow(t[o],A))}this.updateShadowLight()},updateShadowLight:function(){this.getScene().lightManager.updateShadowLight(),this.getRenderer().shadowMap.needsUpdate=!0,this._render(),this.rendererManager.renderer.setClearColor(0,0),this._render()},traverseGroupEnableShadow:function(A,e){var t=this;this.getRenderer();!function(A){if(A instanceof Ue){var i=A.material;if(i instanceof Array){var o=null;if("PhoneLightingMaterial"===i[0].type)return;A.castShadow=e,A.receiveShadow=e;for(var n=0;i.length>n;n+=1)i[n].needsUpdate=!0,o=i[n].defines;A.customDepthMaterial=e&&o&&o.hasOwnProperty("USE_INSTANCE")?t.getInstanceDepthMaterial():void 0}else{if("PhoneLightingMaterial"===i.type)return;A.castShadow=e,A.receiveShadow=e,i.needsUpdate=!0;var r=i.defines;A.customDepthMaterial=e&&r&&r.hasOwnProperty("USE_INSTANCE")?t.getInstanceDepthMaterial():void 0,i.needsUpdate=!0}}}(A);for(var i=A.children,o=0,n=i.length;n>o;o+=1)this.traverseGroupEnableShadow(i[o],e)},getInstanceDepthMaterial:function(){if(this.instanceDepthMaterial)return this.instanceDepthMaterial;var A=new Su;return A.depthPacking=3201,this.instanceDepthMaterial=A,this.instanceDepthMaterial},updateShadowMap:function(){4===vc.LightPreset&&(this.getRenderer().shadowMap.needsUpdate=!0)},cloneComponent:function(A){function e(A){for(var e in A)A.hasOwnProperty(e)&&(A[e]instanceof d||A[e]instanceof ut)&&(A[e]=A[e].clone(),A[e].needsUpdate=!0)}var t,i=this.modelManager.getComponent(A),o=new he,n=i[0].model,r=n.materialManager,a=this.getExternalComponentManager(),s=[];if(i[0].isBatched&&!i[0].instanceOrNot)!function(){var A=[],n=[],l=[],c=[],h=[],d=0,p=0,g=[],u=0,f=!0,m=!1,C=void 0;try{for(var y,v=function(){var t,i,a,f,m=y.value,C=m.index,v=m.mesh.geometry,I=m.mesh.geometry.attributes,E=I.position.array.slice(C.positionStart,C.positionStart+C.positionCount),B=I.normal.array.slice(C.positionStart,C.positionStart+C.positionCount),x=void 0;if(I.uv)x=I.uv.array.slice(C.positionStart/3*2,(C.positionStart+C.positionCount)/3*2);else{var S=E.length/3*2;(x=new Array(S)).fill(0,0,S)}var w=void 0;if(I.uv2)w=I.uv2.array.slice(C.positionStart/3*2,(C.positionStart+C.positionCount)/3*2);else{var M=x.length;(w=new Array(M)).fill(0,0,M)}var b=C.positionStart/3,U=v.index.array,F=C.indexCount,K=m.originMId;s.push(K);var Q=Kd.getMaterialParameters(r.getMaterialById(K)),R=Kd.createStandardMaterial(Q);e(R),g.push(R),h.push.apply(h,yc(U.slice(C.indexStart,C.indexStart+C.indexCount).map((function(A){return A-b+p})))),A=(t=A).concat.apply(t,yc(E)),n=(i=n).concat.apply(i,yc(B)),l=(a=l).concat.apply(a,yc(x)),c=(f=c).concat.apply(f,yc(w)),o.groups.push({start:d,count:F,materialIndex:u}),d+=F,p+=C.positionCount/3,u+=1},I=i[Symbol.iterator]();!(f=(y=I.next()).done);f=!0)v()}catch(A){m=!0,C=A}finally{try{f||null==I.return||I.return()}finally{if(m)throw C}}o.setAttribute("position",new YA(new Float32Array(A),3)),o.setAttribute("uv",new YA(new Float32Array(l),2)),o.setAttribute("uv2",new YA(new Float32Array(c),2)),o.setAttribute("normal",new YA(new Float32Array(n),3)),o.setIndex(new YA(new Uint32Array(h),1)),t=new Ue(o,g),a.addExternalObject(t)}();else if(i[0].isBatched&&i[0].instanceOrNot)!function(){var i=n._handler.instancedManager.meshManager,r=i.getNodeIdxMapByUserId(A),l=[],c=[],h=[],d=[],p=i.matrixInfoMapFromUserId[A][Object.keys(i.matrixInfoMapFromUserId[A])[0]][0].matrix,g=0,u=0,f=0,m=[],C=0;for(var y in r){var v,I,E,B=i.getInstanceGeometries(y),x=B[0].index.array;if(u=B[0].index.count,l=(v=l).concat.apply(v,yc(B[0].attributes.position.array)),c=(I=c).concat.apply(I,yc(B[0].attributes.normal.array)),B[0].attributes.uv){var S;h=(S=h).concat.apply(S,yc(B[0].attributes.uv.array))}else{var w=2*u,M=new Array(w);M.fill(0,0,w),h=h.concat(M)}d=(E=d).concat.apply(E,yc(x.map((function(A){return A+g})))),g=l.length/3;var b=i.getMaterialIdByMeshId(y),U=i.manager.model.materialManager.getInstanceMaterialById(b)[0],F=Kd.getMaterialParameters(U),K=Kd.createStandardMaterial(F);s.push(b),e(K),m.push(K),o.groups.push({start:f,count:u,materialIndex:C}),f+=u,C+=1}o.setAttribute("position",new YA(new Float32Array(l),3)),o.setAttribute("uv",new YA(new Float32Array(h),2)),o.setAttribute("normal",new YA(new Float32Array(c),3)),o.setIndex(new YA(new Uint32Array(d),1)),(t=new Ue(o,m)).applyMatrix4(p),t.updateMatrixWorld(),a.addExternalObject(t)}();else{var l=n.getModelDescriptor().getNodeInfosByComponentKey(A)[0].originMId;if(s=l,t=i[0].mesh.clone(),Array.isArray(l))t.material=l.map((function(A){var t=r.getMaterialById(A),i=Kd.getMaterialParameters(t),o=Kd.createStandardMaterial(i);return e(o),o}));else{var c=r.getMaterialById(l),h=Kd.getMaterialParameters(c),p=Kd.createStandardMaterial(h);e(p),t.material=p}a.addExternalObject(t)}return t?(t.byClone=!0,t.originMId=s,t.originComponentKey=A,t):null},setComponentsBlink:function(){}}),Object.defineProperties(Gy.prototype,{renderer:{get:function(){return console.warn("EIMMODEL.ViewerImpl: .renderer 现在为 .getRenderer()"),this.getRenderer()}},composer:{get:function(){return console.warn("EIMMODEL.ViewerImpl: .composer 现在为 .rendererManager.composer"),this.rendererManager.composer}}});var Py=function(A){var e=window.performance.timing;Ch.PERFORMANCE>Bh.level||Bh.warn("页面加载时间:",e.domInteractive-e.navigationStart,"ms");var t=mh.detectWebGL();if(1===t){vc.language=mh.language(),H.DefaultUp.set(0,0,1);var i=uh.extend({},{host:"https://bos3d.bimwinner.com",viewport:""},A);this.host=i.host,this.viewerImpl=new Gy;var o=document.getElementById(i.viewport);o.style.position="relative";var n=this;this.getViewerImpl().init(o),vc.EnableViewController&&!mh.isMobileDevice()&&(this.viewController=new lp(this,(function(){return!0})),this.viewController.init(this.getViewerImpl().getDomElement()),this.viewController.render(),this.getViewerImpl().addRenderFinishedListener((function(){n.viewController.render()}))),this.filter=this.getViewerImpl().filter,this.SVGRect=new tp(this),this.SVGRect.creatSVG(),this.viewport=A.viewport,this.viewportDiv=document.getElementById(A.viewport),this.getViewerImpl().modelManager.addEventListener(Rc.ON_LOAD_CONFIG_FINISH,(function(A){Bh.time("模型".concat(A.modelKey,"加载时间"));var e=n.getViewerImpl().getBoundingBox(),t=n.getViewerImpl().getModel(A.modelKey),i=t.getConfig();i.type!==Zc.I_MODEL&&i.type!==Zc.OBJ||n.setLightIntensityFactor(1),op(t.dataVersion,"1.0");var o=e.getCenter(new y),r=e.getSize(new y),a=new y(o.x+r.x,o.y+r.y,o.z+r.z);n.originalView&&vc.UserControlView?n.viewerImpl.lookAt(n.originalView.position,n.originalView.target,n.originalView.up):(n.viewerImpl.lookAt(a,o,n.viewerImpl.camera.up),n.setOriginalView(a,o,n.viewerImpl.camera.up))})),this.getViewerImpl().modelManager.addEventListener(Rc.ON_LOAD_PROGRESS,(function(A){Bh.log(A.progress)})),this.getViewerImpl().modelManager.addEventListener(Rc.ON_LOAD_COMPLETE,(function(A){Bh.log(A.modelKey," is load "),Bh.timeEnd("模型".concat(A.modelKey,"加载时间"));var e=n.getViewerImpl().getModel(A.modelKey);for(var t in e.floorManager&&vc.EnableCreateMiniMap&&(Bh.time("小地图生成"),e.floorManager.generateMiniMap(n.getViewerImpl()),Bh.timeEnd("小地图生成")),e&&e.getConfig()&&n.getViewerImpl().cameraControl.setSceneUnit(e.getConfig().lengthUnit),bc)if(e&&bc.hasOwnProperty(t)&&!0===bc[t]){var i=t,o=e.getComponentKeysByType(i),r=e.getConfig(),a=[];!r||r.type!==Zc.RVT&&r.type!==Zc.MERGE||(a=e.getComponentKeysByProperty("buildInCategory",i)),n.deactivateComponentsByKey(o.concat(a))}n.getViewerImpl().getBoundingBox().isEmpty()&&(n.getViewerImpl().zoomAll(),n.getViewerImpl().goToInitialView())})),this.getViewerImpl().modelManager.addEventListener(Rc.ON_CLICK_PICK,(function(A){if(A.intersectInfo){Bh.log("构件key",A.intersectInfo.selectedObjectId);var e=A.intersectInfo.object;e&&Bh.log(e)}})),this.getViewerImpl().getControlManager().addEventListener(Rc.ON_CONTROL_EXIST,(function(A){if(A.name===Pc.CLIP_BY_BOX)for(var e=n.getViewerImpl().modelManager.getModelKeys(),t=0,i=e.length;i>t;t+=1){var o=n.getViewerImpl().modelManager.getModel(e[t]);if(o)for(var r=0;6>r;r+=1){o._getNodeGroup("sectionFill_"+r).clear()}}})),this.viewerImpl.modelManager.addEventListener(Rc.ON_CONTROL_UPDATEUI,(function(A){n.SVGRect.creatRect(A)}))}else mh.showWebGLMessage(t)};Object.assign(Py.prototype,Ld.prototype),Object.assign(Py.prototype,{constructor:Py,addView:function(A,e,t,i){this.getViewerImpl().load({serverUrl:this.host,modelKey:A,dbName:e,token:t,share:i||"",notifyProgress:!0,type:A.startsWith("G")?"GIS":""})},addViews:function(A,e,t,i){vc.AutoMergeComponent=!1,vc.MergeComponent=!0,this.getViewerImpl().load({serverUrl:this.host,modelKey:A,modelKeys:e,dbName:t,token:i,notifyProgress:!0})},addTilesView:function(A,e,t){this.getViewerImpl().loadTiles({serverUrl:this.host,modelKey:A,dbName:e,token:t,notifyProgress:!0})},addTilesViewFromLocal:function(A){this.getViewerImpl().loadTiles({serverUrl:".",modelKey:A,dbName:"",token:"",notifyProgress:!0,offLine:!0})},getSSE:function(A){var e=this.getBoxByComponentsKey(A),t=this.viewerImpl.camera,i=e.getCenter(new y),o=e.getSize().length(),n=this.viewerImpl.getRenderer().domElement.width,r=t.fov;return o*n/(2*t.position.clone().sub(i).length()*Math.tan(r/2))},removeView:function(A){return this.getViewerImpl().unload(A)},removeAllView:function(){this.getViewerImpl().unloadAll()},addViewFromLocal:function(A){this.getViewerImpl().load({serverUrl:".",modelKey:A,dbName:"",notifyProgress:!0,offLine:!0})},loadComponents:function(A,e,t,i){Array.isArray(A)||(A=[A]),this.getViewerImpl().loadGeopkOnDemand(A,e,t,i)},unloadCompomemts:function(A,e){Array.isArray(A)||(A=[A]),this.getViewerImpl().unloadGeopkOnDemand(A,e)},getOriginalView:function(){return this.originalView},setOriginalView:function(A,e,t){A&&e&&t?(this.originalView||(this.originalView={}),this.originalView.position=Array.isArray(A)?new y(A[0],A[1],A[2]):new y(A.x,A.y,A.z),this.originalView.target=Array.isArray(e)?new y(e[0],e[1],e[2]):new y(e.x,e.y,e.z),this.originalView.up=Array.isArray(t)?new y(t[0],t[1],t[2]):new y(t.x,t.y,t.z)):this.originalView=void 0},getViewerImpl:function(){return this.viewerImpl},getAllComponents:function(){return this.getViewerImpl().getModelManager().getAllComponents()},getAllComponentsKey:function(){return this.getViewerImpl().getModelManager().getAllComponentsKey()},getComponentsKeyByModelKey:function(A){return this.getViewerImpl().getModelManager().getComponentsKeyByModelKey(A)},getComponentKeysByName:function(A){return this.getViewerImpl().getModelManager().getComponentKeysByName(A)},getComponentKeysByType:function(A){return this.getViewerImpl().getModelManager().getComponentKeysByType(A)},getComponentKeysByProperty:function(A,e){return this.getViewerImpl().getModelManager().getComponentKeysByProperty(A,e)},getScreenCoordFromSceneCoordAndCheckCover:function(A){return this.getViewerImpl().getScreenCoordFromSceneCoordAndCheckCover(A)},pickByPoint:function(A){return this.getViewerImpl().pickByPoint(A)},calculateMinDistance:function(A,e){return this.getViewerImpl().calculateMinDistance(A,e)},otherObjectsInScene:function(A){},getComponentsByKey:function(A){Array.isArray(A)||(A=[A]);var e=[],t=this;return A.forEach((function(A){var i=t.getViewerImpl().modelManager.getComponent(A);if(i){var o={};o[A]=i,e.push(o)}})),e},getModelFloorMapsByKey:function(A,e){var t=this.getViewerImpl().getModel(A);if(!t)return{msg:"没有此模型"};var i=t.getConfig().type;return i!==Zc.RVT&&i!==Zc.IFC&&i!==Zc.MERGE?{msg:"该模型不支持小地图"}:t.floorManager?this.getViewerImpl().getModelFloorMapsByKey(A,e):{msg:"该模型不支持小地图"}},showComponentsById:function(A,e){Array.isArray(A)||(A=[A]);for(var t=[],i=0;A.length>i;i+=1)t[i]=e+"_"+A[i];this.getViewerImpl().getFilter().showByIds(t),this.render()},showComponentsByKey:function(A){Array.isArray(A)||(A=[A]),this.getViewerImpl().getFilter().showByIds(A),this.render()},hideComponentsById:function(A,e){Array.isArray(A)||(A=[A]);for(var t=[],i=0;A.length>i;i+=1)t[i]=e+"_"+A[i];this.filter.hideByIds(t),this.render()},hideComponentsByKey:function(A){Array.isArray(A)||(A=[A]),this.filter.hideByIds(A),this.render()},activateComponentsByKey:function(A){Array.isArray(A)||(A=[A]),this.filter.activateByIds(A),this.render()},deactivateComponentsByKey:function(A){Array.isArray(A)||(A=[A]),this.filter.deactivateByIds(A),this.render()},hideAllComponents:function(){this.getViewerImpl().getFilter().hideAll(),this.render()},showAllComponents:function(){this.getViewerImpl().getFilter().showAll(),this.render()},highlightComponentsById:function(A,e){Array.isArray(A)||(A=[A]);for(var t=[],i=0;A.length>i;i+=1)t[i]=e+"_"+A[i];this.getViewerImpl().setSelection(t),this.render()},highlightComponentsByKey:function(A,e){Array.isArray(A)||(A=[A]),this.getViewerImpl().setSelection(A);var t=e;"boolean"!=typeof e&&(t=!0),t&&this.render()},addHighlightComponentsByKey:function(A){Array.isArray(A)||(A=[A]),this.getViewerImpl().addToSelection(A),this.render()},closeHighlightComponentsById:function(A,e){Array.isArray(A)||(A=[A]);for(var t=[],i=0;A.length>i;i+=1)t[i]=e+"_"+A[i];this.getViewerImpl().removeFromSelection(t),this.render()},closeHighlightComponentsByKey:function(A){Array.isArray(A)||(A=[A]),this.getViewerImpl().removeFromSelection(A),this.render()},getHighlightComponentsKey:function(){return this.getViewerImpl().getSelection()},clearHighlightList:function(){this.getViewerImpl().clearSelection(),this.render()},getHighlightComponents:function(){var A=this.getHighlightComponentsKey(),e=[],t=this;return A.forEach((function(A){var i=t.getViewerImpl().modelManager.getComponent(A);if(i){var o={};o[A]=i,e.push(o)}})),e},setComponentsOpacityState:function(A,e){Array.isArray(A)||(A=[A]),e===Oc.TRANSLUCENT?this.transparentComponentsByKey(A):e===Oc.OPAQUE&&this.closeTransparentComponentsByKey(A)},transparentComponentsById:function(A,e){Array.isArray(A)||(A=[A]);for(var t=[],i=0;A.length>i;i+=1)t[i]=e+"_"+A[i];this.getViewerImpl().getFilter().makeTranslucentByIds(t),this.render()},transparentComponentsByKey:function(A,e){Array.isArray(A)||(A=[A]);var t=this.getViewerImpl().getFilter();if(e){var i=this.getComponentsByKey(A);if(Array.isArray(A)&&i.length!==A.length){i=[];var o=!0,n=!1,r=void 0;try{for(var a,s=A[Symbol.iterator]();!(o=(a=s.next()).done);o=!0){var l=this.getComponentsByKey(a.value);l.length>0&&i.push(l[0])}}catch(A){n=!0,r=A}finally{try{o||null==s.return||s.return()}finally{if(n)throw r}}}t.transparentComponentsByKey(this.getViewerImpl().getModelManager(),i,e)}else t.makeTranslucentByIds(A);this.render()},transparentOtherComponentsByKey:function(A){Array.isArray(A)||(A=[A]),this.getViewerImpl().getFilter().makeTranslucentOthersByIds(A),this.render()},transparentAllComponents:function(){this.getViewerImpl().getFilter().makeTranslucentOthersByIds([]),this.render()},closeTransparentComponentsById:function(A,e){Array.isArray(A)||(A=[A]);for(var t=[],i=0;A.length>i;i+=1)t[i]=e+"_"+A[i];this.getViewerImpl().getFilter().opaqueByIds(t),this.render()},closeTransparentComponentsByKey:function(A){Array.isArray(A)||(A=[A]),this.getViewerImpl().getFilter().opaqueByIds(A),this.render()},clearTransparentList:function(){this.clearComponentTransparentList(),this.clearModelTransparentList()},clearComponentTransparentList:function(){var A=this.getViewerImpl().getFilter();A.opaqueAll(),A.opaqueByIds([]),this.render()},colorfulComponentsById:function(A,e,t,i){Array.isArray(A)||(A=[A]);for(var o=[],n=0;A.length>n;n+=1)o[n]=e+"_"+A[n];var r=this.getViewerImpl().getFilter(),a={};a.color=t,"number"==typeof i&&(a.opacity=i),r.addToOverrideListByColor(o,a),this.render()},colorfulComponentsByKey:function(A,e,t){Array.isArray(A)||(A=[A]);var i=this.getViewerImpl().getFilter(),o={};o.color=e,"number"==typeof t&&(o.opacity=t),i.addToOverrideListByColor(A,o),this.render()},setComponentsMaterialByKey:function(A,e,t,i){var o=this.getComponentsByKey(A);if(Array.isArray(e)){var n=0,r=!0,a=!1,s=void 0;try{for(var l,c=e[Symbol.iterator]();!(r=(l=c.next()).done);r=!0){var h=l.value;""===h.name&&(h.name="custMat_"+(new Date).getTime()+"_"+n,n+=1)}}catch(A){a=!0,s=A}finally{try{r||null==c.return||c.return()}finally{if(a)throw s}}}else""===e.name&&(e.name="custMat_"+(new Date).getTime());var d=this.getViewerImpl().getFilter().addToOverrideListByCustomerMaterial(this.getViewerImpl().getModelManager(),o,e,t,i);return this.render(),d},closeMaterialByKey:function(A){var e=this;Array.isArray(A)?A.forEach((function(A){var t=e.getComponentsByKey(A)[0][A][0];if(!t.isBatched&&!t.instanceOrNot&&!t.RenderTypeChange){var i=t.originMId;e.getComponentsByKey(A)[0][A][0].materialId=Array.isArray(i)?[].concat(i):i}e.closeColorfulComponentsByKey(A)})):this.closeColorfulComponentsByKey(A)},closeColorfulComponentsById:function(A,e){Array.isArray(A)||(A=[A]);for(var t=[],i=0;A.length>i;i+=1)t[i]=e+"_"+A[i];this.getViewerImpl().getFilter().addToOverrideListByColor(t,null),this.render()},closeColorfulComponentsByKey:function(A){Array.isArray(A)||(A=[A]),this.getViewerImpl().getFilter().addToOverrideListByColor(A,null),this.render()},clearColorfulList:function(){this.getViewerImpl().getFilter().clearAllOverrideList(),this.render()},wireFrameComponentsById:function(A,e){Array.isArray(A)||(A=[A]);for(var t=[],i=0;A.length>i;i+=1)t[i]=e+"_"+A[i];this.getViewerImpl().getFilter().addToWireframeByWireframe(t,{wireframe:!0}),this.render()},wireFrameComponentsByKey:function(A){Array.isArray(A)||(A=[A]);this.getViewerImpl().getFilter().addToWireframeByWireframe(A,{wireframe:!0}),this.render()},closeWireFrameComponentsById:function(A,e){Array.isArray(A)||(A=[A]);for(var t=[],i=0;A.length>i;i+=1)t[i]=e+"_"+A[i];this.getViewerImpl().getFilter().addToWireframeByWireframe(t,null),this.render()},closeWireFrameComponentsByKey:function(A){Array.isArray(A)||(A=[A]),this.getViewerImpl().getFilter().addToWireframeByWireframe(A,null),this.render()},clearWireframeList:function(){this.getViewerImpl().getFilter().clearAllWireframeList(),this.render()},isolateComponentsById:function(A,e,t){Array.isArray(A)||(A=[A]);for(var i=[],o=0;A.length>o;o+=1)i[o]=e+"_"+A[o];this.getViewerImpl().getFilter().setIsolateList(i,!1!==t),this.render()},isolateComponentsByKey:function(A,e){Array.isArray(A)||(A=[A]),this.getViewerImpl().getFilter().setIsolateList(A,!1!==e),this.render()},closeIsolateComponentsById:function(A,e){Array.isArray(A)||(A=[A]);for(var t=[],i=0;A.length>i;i+=1)t[i]=e+"_"+A[i];this.getViewerImpl().getFilter().removeFromIsolateList(t),this.render()},closeIsolateComponentsByKey:function(A){Array.isArray(A)||(A=[A]),this.getViewerImpl().getFilter().removeFromIsolateList(A),this.render()},clearIsolation:function(){this.getViewerImpl().getFilter().clearIsolation()},showModelsByKey:function(A){Array.isArray(A)||(A=[A]),this.getViewerImpl().getFilter().showModelByIds(A),this.render()},hideModelsByKey:function(A){Array.isArray(A)||(A=[A]),this.filter.hideModelByIds(A),this.render()},hideAllModels:function(){this.getViewerImpl().getFilter().hideAllModel(),this.render()},showAllModels:function(){this.getViewerImpl().getFilter().showAllModel(),this.render()},highlightModelsByKey:function(A){Array.isArray(A)||(A=[A]),this.getViewerImpl().setModelSelection(A),this.render()},addHighlightModelsByKey:function(A){Array.isArray(A)||(A=[A]),this.getViewerImpl().addToModelSelection(A),this.render()},closeHighlightModelsByKey:function(A){Array.isArray(A)||(A=[A]),this.getViewerImpl().removeFromModelSelection(A),this.render()},getHighlightModelsKey:function(){return this.getViewerImpl().getModelSelection()},clearModelHighlightList:function(){this.getViewerImpl().clearModelSelection(),this.render()},transparentModelsByKey:function(A,e,t){var i=this;Array.isArray(A)||(A=[A]),this.closeTransparentModelsByKey(A);var o=this.getViewerImpl().getFilter();e?A.forEach((function(A){o.transparentModelOrigMatByKey(i.getViewerImpl().getModelManager(),A,t)})):o.makeModelTranslucentByIds(A),this.render()},transparentOtherModelsByKey:function(A,e,t){Array.isArray(A)||(A=[A]);for(var i=Object.keys(this.viewerImpl.modelManager.models),o=[],n=0;i.length>n;n++){var r=i[n];A.includes(r)||o.push(r)}(this.closeTransparentModelsByKey(o),e)?this.transparentModelsByKey(o,e,t):this.getViewerImpl().getFilter().makeTranslucentOthersModelByIds(A);this.render()},transparentAllModels:function(A,e){if(this.clearModelTransparentList(),A){var t=Object.keys(this.viewerImpl.modelManager.models);this.transparentModelsByKey(t,A,e)}else{this.getViewerImpl().getFilter().makeTranslucentOthersModelByIds([])}this.render()},closeTransparentModelsByKey:function(A){var e=this,t=this.getViewerImpl().getFilter();Array.isArray(A)||(A=[A]),A.forEach((function(A){t.closeOrigMatModelTransparent(e.viewerImpl.modelManager,A)})),t.opaqueModelByIds(A),this.render()},clearModelTransparentList:function(){var A=this,e=this.getViewerImpl().getFilter();Object.keys(this.viewerImpl.modelManager.models).forEach((function(t){e.closeOrigMatModelTransparent(A.viewerImpl.modelManager,t)})),e.opaqueAllModel(),e.opaqueModelByIds([]),this.render()},colorfulModelsByKey:function(A,e,t){Array.isArray(A)||(A=[A]);var i=this.getViewerImpl().getFilter(),o={};o.color=e,"number"==typeof t&&(o.opacity=t),i.addToModelOverrideListByColor(A,o),this.render()},closeColorfulModelsByKey:function(A){Array.isArray(A)||(A=[A]),this.getViewerImpl().getFilter().addToModelOverrideListByColor(A,null),this.render()},clearModelColorfulList:function(){this.getViewerImpl().getFilter().clearModelAllOverrideList(),this.render()},isolateModelsByKey:function(A,e){Array.isArray(A)||(A=[A]),this.getViewerImpl().getFilter().setModelIsolateList(A,!1!==e),this.render()},closeIsolateModelsByKey:function(A){Array.isArray(A)||(A=[A]),this.getViewerImpl().getFilter().removeModelFromIsolateList(A),this.render()},clearModelIsolation:function(){this.getViewerImpl().getFilter().clearModelIsolation(),this.render()},setModelMatrix:function(A,e){this.getViewerImpl().setModelMatrix(e,A)},getModelMatrix:function(A){return this.getViewerImpl().getModelMatrix(A)},disableComponentsSelectionByKey:function(A){Array.isArray(A)||(A=[A]),this.filter.addToFrozenList(A)},enableComponentsSelectionByKey:function(A){Array.isArray(A)||(A=[A]),this.filter.removeFromFrozenList(A)},clearDisableSelectionList:function(){this.filter.clearFrozen()},overturnYAndZaxis:function(A){this.getViewerImpl().overturnYAndZaxis(A),this.render()},translateModel:function(A){this.getViewerImpl().translateModel(A)},rotateModel:function(A){this.getViewerImpl().rotateModel(A)},scaleModel:function(A){this.getViewerImpl().scaleModel(A)},modelsExplosion:function(A){for(var e={modelKey:[],coefficientX:1,coefficientY:1,coefficientZ:1,center:this.getViewerImpl().getScene().getBoundingBoxWorld().getCenter(new y).toArray()},t=uh.extend(!0,{},e,A),i=Array.isArray(t.modelKey)?t.modelKey:[t.modelKey],o=0;i.length>o;o+=1){var n=this.getViewerImpl().getModel(i[o]);n&&n.explosion(t)}this.getViewerImpl().getModelManager().updateSceneBoundingBox(),this.render()},closeModelsExplosion:function(A){var e=Array.isArray(A)?A:[A];this.modelsExplosion({modelKey:e}),this.render()},componentsExplosion:function(A){var e={componentKey:[],coefficientX:1,coefficientY:1,coefficientZ:1,offsetX:0,offsetY:0,offsetZ:0,center:this.getViewerImpl().getScene().getBoundingBoxWorld().getCenter(new y).toArray()},t=uh.extend(!0,{},e,A),i=this.getViewerImpl().getModelManager();i.componentsExplosion(t),i.updateSceneBoundingBox(),this.render()},closeComponentsExplosion:function(A){var e=Array.isArray(A)?A:[A];this.getViewerImpl().getModelManager().componentsExplosion({componentKey:e}),this.render()},canFloorExplosion:function(){return this.getViewerImpl().getModelManager().canFloorExplosion()},floorExplosion:function(A){return!!this.getViewerImpl().getModelManager().floorExplosion(A)&&(this.render(),!0)},closeFloorExplosion:function(){var A=this.getViewerImpl().getModelManager();A.closeFloorExplosion(),A.updateSceneBoundingBox(),this.render()},componentApplyMatrix:function(A,e){return!(!e||!e.isMatrix4)&&(this.getViewerImpl().componentApplyMatrix2(A,e),this.render(),!0)},getMatrix4FromEuler:function(A,e,t){var i=0,o=0,n=0;Array.isArray(A)?(i=A[0],o=A[1],n=A[2]):(i=A.x,o=A.y,n=A.z);var r=e||[0,0,0],a=0,s=0,l=0;Array.isArray(r)?(a=r[0],s=r[1],l=r[2]):(a=r.x,s=r.y,l=r.z);var c=new M;c.setPosition(-a,-s,-l);var h=new M,d=new F(i,o,n,t||"XYZ");h.makeRotationFromEuler(d);var p=new M;return p.setPosition(a,s,l),p.multiply(h).multiply(c),p},isolateComponentsByIdForJDS:function(A,e){Array.isArray(A)||(A=[A]);for(var t=[],i=0;A.length>i;i+=1)t[i]=e+"_"+A[i];this.filter.addToIsolateList(Nc.HIDDEN_OTHERS,t);for(var o=this.getViewerImpl().modelManager.getScene().pool._pool,n=0;o.length>n;n+=1){o[n].visible=!1;for(var r=0;t.length>r;r+=1)o[n].key===t[r]&&(o[n].visible=!0)}return this.render(),!0},sortComponentsById:function(A,e,t){Array.isArray(A)||(A=[A]);for(var i=this.getViewerImpl().getModel(e),o=[],n=0;A.length>n;n+=1)o[n]=e+"_"+A[n];return i?i.getComponentKeysByTypeFromList(o,t):[]},sortComponentsByKey:function(A,e){return Array.isArray(A)||(A=[A]),this.getViewerImpl().modelManager.getComponentKeysByTypeFromList(A,e)},conditionSortComponentsById:function(A,e,t,i,o){var n=this.filter.setConditions(A,e);Array.isArray(t)||(t=[t]);for(var r=[],a=0;t.length>a;a+=1)r[a]=i+"_"+t[a];var s=this.getComponentsByKey(r),l=[];if(null!==n)switch(A){case 0:for(var c=0;s.length>c;c+=1)n.match(s[c])&&l.push(s[c].key);this.isolateComponentsByKey(l);break;case 1:for(var h=0;s.length>h;h+=1)n.match(s[h])&&l.push(s[h].key);var d=this.otherObjectsInScene(l);this.transparentComponentsByKey(d,.5,!1);break;case 2:for(var p=0;s.length>p;p+=1)null!==n.getMatchItem(s[p])&&l.push(s[p].key);!0===o.highLight?this.highlightComponentsByKey(l):this.colorfulComponentsByKey(l,o.color)}return l},conditionSortComponentsByKey:function(A,e,t,i){var o=this.filter.setConditions(A,e);Array.isArray(t)||(t=[t]);var n=this.getComponentsByKey(t),r=[];if(null!==o)switch(A){case 0:for(var a=0;n.length>a;a+=1)o.match(n[a])&&r.push(n[a].key);this.isolateComponentsByKey(r);break;case 1:for(var s=0;n.length>s;s+=1)o.match(n[s])&&r.push(n[s].key);var l=this.otherObjectsInScene(r);this.transparentComponentsByKey(l,.5,!1);break;case 2:for(var c=0;n.length>c;c+=1)null!==o.getMatchItem(n[c])&&r.push(n[c].key);!0===i.highLight?this.highlightComponentsByKey(r):this.colorfulComponentsByKey(r,i.color)}return r},resetScene:function(A){if(A=A||{},this.getViewerImpl().getModelManager().dispatchEvent({type:Rc.BEFORE_RESETSCENE,data:A}),uh.isEmptyObject(A)){this.clearIsolation(),this.clearModelIsolation(),this.clearHighlightList(),this.clearModelHighlightList(),this.showAllComponents(),this.showAllModels(),this.clearWireframeList(),this.clearTransparentList(),this.clearModelTransparentList(),this.clearColorfulList(),this.clearModelColorfulList();var e=this.viewerImpl.modelManager.scene.getBoundingBox(),t=e.getCenter(new y),i=e.getSize(new y),o=new y(t.x+i.x,t.y+i.y,t.z+i.z);this.originalView?this.viewerImpl.lookAt(this.originalView.position,this.originalView.target,this.originalView.up):this.viewerImpl.lookAt(o,t,new y(0,0,1))}else if(A.visible&&(this.clearIsolation(),this.clearModelIsolation(),this.showAllComponents(),this.showAllModels()),A.selected&&(this.clearHighlightList(),this.clearModelHighlightList()),A.transparent&&(this.clearTransparentList(),this.clearModelTransparentList()),A.wireframed&&this.clearWireframeList(),A.colorfully&&(this.clearColorfulList(),this.clearModelColorfulList()),A.view)if(this.originalView)this.viewerImpl.lookAt(this.originalView.position,this.originalView.target,this.originalView.up);else{var n=this.viewerImpl.modelManager.scene.getBoundingBox(),r=n.getCenter(new y),a=n.getSize(new y),s=new y(r.x+a.x,r.y+a.y,r.z+a.z);this.viewerImpl.lookAt(s,r,new y(0,0,1))}this.getViewerImpl().getModelManager().dispatchEvent({type:Rc.AFTER_RESETSCENE,data:A}),this.render()},getScreenCoordFromSceneCoord:function(A){return this.getViewerImpl().getScreenCoordFromSceneCoord(A)},getWorldPositionFromLocalPositionByModelKey:function(A,e){var t=this.getModelMatrix(e);if(t){if(A.isVector3){var i=A.clone();return i.applyMatrix4(t),i.toArray()}if(Array.isArray(A)){var o=(new y).fromArray(A);return o.applyMatrix4(t),o.toArray()}}else Bh.error("模型key无效")},getLocalPositionFromWorldPositionByModelKey:function(A,e){var t=this.getModelMatrix(e);if(t){var i=(new M).getInverse(t);if(A.isVector3){var o=A.clone();return o.applyMatrix4(i),o.toArray()}if(Array.isArray(A)){var n=(new y).fromArray(A);return n.applyMatrix4(i),n.toArray()}}else Bh.error("模型key无效")},getWorldPositionListFromLocalPositionListByModelKey:function(A,e){var t=this.getModelMatrix(e);if(t){for(var i=[],o=0,n=A.length;n>o;o+=1){var r=A[o];if(r.isVector3){var a=r.clone();a.applyMatrix4(t),i.push(a.toArray())}else if(Array.isArray(r)){var s=(new y).fromArray(r);s.applyMatrix4(t),i.push(s.toArray())}}return i}Bh.error("模型key无效")},getLocalPositionListFromWorldPositionListByModelKey:function(A,e){var t=this.getModelMatrix(e);if(t){for(var i=(new M).getInverse(t),o=[],n=0,r=A.length;r>n;n+=1){var a=A[n];if(a.isVector3){var s=a.clone();s.applyMatrix4(i),o.push(s.toArray())}else if(Array.isArray(a)){var l=(new y).fromArray(a);l.applyMatrix4(i),o.push(l.toArray())}}return o}Bh.error("模型key无效")},getWorldPositionArrayFromLocalPositionArrayByModelKey:function(A,e){var t=this.getModelMatrix(e);if(t){for(var i=[],o=0,n=A.length;n>o;o+=3){var r=(new y).fromArray(A,o);r.applyMatrix4(t),i.push.apply(i,yc(r.toArray()))}return i}Bh.error("模型key无效")},getLocalPositionArrayFromWorldPositionArrayByModelKey:function(A,e){var t=this.getModelMatrix(e);if(t){for(var i=(new M).getInverse(t),o=[],n=0,r=A.length;r>n;n+=3){var a=(new y).fromArray(A,n);a.applyMatrix4(i),o.push.apply(o,yc(a.toArray()))}return o}Bh.error("模型key无效")},render:function(){this.getViewerImpl().render()},syncRender:function(){this.getViewerImpl()._render()},resize:function(A,e){this.getViewerImpl().resize(A,e)},autoResize:function(){this.getViewerImpl().resize(window.innerWidth-5,window.innerHeight-5)},setSceneBackGroundColor:function(A,e){this.getViewerImpl().setBackgroundColor(new Xh(A,e))},resetSceneBackgroundColor:function(){this.getViewerImpl().resetBackgroundColor()},getComponentsAttributeById:function(A,e,t){this.getComponentsAttributeByKey(e+"_"+A,t)},getComponentsAttributeByKey:function(A,e){var t=this.getViewerImpl().getModelByComponentKey(A);if(t){if(t.offLine){if(t.attributes&&t.attributes[A])return void e({attribute:t.attributes[A]});e(null)}_d({type:"GET",url:(t.loader.url.serverUrl||this.host)+"/api/"+t.projectKey+"/components?componentKey="+A+(""===t.shareKey?"":"&share="+t.shareKey),headers:{Authorization:t.accessToken},success:function(A){try{A=JSON.parse(A)}catch(A){Bh.log("解析属性失败")}e("SUCCESS"===A.code?A.data:null)},error:function(A){e(null)}})}else e(null)},mergeMesh:function(A,e){var t=this.getViewerImpl().modelManager.getModel(e);if(!t)return null;var i=new ep("mergeGroup");i.modelKey=e;for(var o=new he,n=[],r=[],a=[],s=[],l=[],c=[],h=t.cache,d=[],p=[],g=null,u=0,f=0;A.length>f;f+=1)if(t.cache.components.hasOwnProperty(A)){u+=1;var m={},C=r.length,y=n.length/3;m.start=C;var v=l.length,I=t.cache.components[A],E=h.geometries[I.geoId];if(!E)continue;var B=E.clone(),x=new M;x.fromArray(I.matrix);var S=B.attributes;B.applyMatrix(x);for(var w=0;S.position.array.length>w;w+=1)n.push(S.position.array[w]);for(var b=0;S.normal.array.length>b;b+=1)s.push(S.normal.array[b]);if(S.uv)for(var U=0;S.uv.array.length>U;U+=1)a.push(S.uv.array[U]);for(var F=0;B.index.array.length>F;F+=1)r.push(B.index.array[F]+y);if(B.groups.length>0)for(var K=0;B.groups.length>K;K+=1){var Q={};Q.start=B.groups[K].start+C,Q.count=B.groups[K].count,-1!==B.groups[K].materialIndex&&(Q.materialIndex=B.groups[K].materialIndex+v),c.push(Q)}else{var R={};R.start=C,R.count=B.index.count,R.materialIndex=v,c.push(R)}var T=h.materials[I.matId];if(!T)continue;for(F=0;T.materials.length>F;F+=1)l.push(T.materials[F]);if(m.end=r.length/3,m.guid=I.guid,u>vc.MaxMergeCount){if(u=0,o.setAttribute("position",new YA(new Float32Array(n),3)),o.setAttribute("normal",new YA(new Float32Array(s),3)),o.setAttribute("uv",new YA(new Float32Array(a),2)),d=[],Array.fill)d=Array(n.length).fill(1);else for(var k=0;n.length>k;k+=1)d.push(1);p=new Float32Array(d),o.setAttribute("color",new YA(p,3,!0)),o.setIndex(r),o.groups=c,g=new Ue(o,l),i.add(g),o=new he,n=[],r=[],a=[],s=[],l=[],c=[]}}if(o.setAttribute("position",new YA(new Float32Array(n),3)),o.setAttribute("normal",new YA(new Float32Array(s),3)),o.setAttribute("uv",new YA(new Float32Array(a),2)),d=[],Array.fill)d=Array(n.length).fill(1);else for(k=0;n.length>k;k+=1)d.push(1);return p=new Float32Array(d),o.setAttribute("color",new YA(p,3,!0)),o.setIndex(r),o.groups=c,g=new Ue(o,l),i.add(g),d=null,n=null,r=null,a=null,s=null,l=null,c=null,i},setComponentPositionByKey:function(A,e){this.getViewerImpl().setComponentPositionByKey(A,e),this.render()},setComponentPositionById:function(A,e,t){},getBoxByComponentsKey:function(A){return Array.isArray(A)||(A=[A]),this.getViewerImpl().getBoundingBoxByIds(A)},getAttributeByComponentKey:function(){},zoomToBox:function(A,e,t){this.getViewerImpl().zoomToBox(A,e,t)},zoomIn:function(A,e,t){this.getViewerImpl().zoomIn(A,e,t)},zoomOut:function(A,e,t){this.getViewerImpl().zoomOut(A,e,t)},flyToStandardView:function(A,e,t,i){this.getViewerImpl().setStandardView(A,e,t,i)},setStandardViewWithBox:function(A,e,t,i){this.getViewerImpl().setStandardViewWithBox(A,e,t,i)},adaptiveSize:function(){this.getViewerImpl().zoomToSelection()},adaptiveSizeByKey:function(A){Array.isArray(A)||(A=[A]);var e=this.getViewerImpl().getBoundingBoxByIds(A);e&&!e.isEmpty()&&this.getViewerImpl().zoomToBox(e)},flyTo:function(A,e){var t=this;this.getViewerImpl().animator.slerpFlyTo(A,this.viewerImpl,(function(A){t.viewerImpl.cameraControl.update(!0,!0)}),e)},linearFlyTo:function(A,e){var t=this;this.getViewerImpl().animator.linearFlyTo(A,this.viewerImpl,(function(A){t.viewerImpl.cameraControl.update(!0,!0)}),e)},slerpFlyTo:function(A,e){var t=this;this.getViewerImpl().animator.slerpFlyTo(A,this.viewerImpl,(function(A){t.viewerImpl.cameraControl.update(!0,!0)}),e)},setAnimatorDuration:function(A){var e=this.getViewerImpl().animator;return!(!e||"number"!=typeof A)&&(e.setDuration(A),!0)},getAnimatorDuration:function(){var A=this.getViewerImpl().animator;if(A)return A.getDuration()},enableViewController:function(){var A=this;return this.viewController?(this.viewController.enable(),!0):(this.viewController=new lp(this.viewerImpl,(function(){return!0})),this.viewController.init(this.getViewerImpl().getDomElement()),this.viewController.render(),this.getViewerImpl().addRenderFinishedListener((function(){A.viewController.render()})),!0)},disableViewController:function(){return!!this.viewController&&(this.viewController.disable(),!0)},enabledCameraRotateOfVerticalPolarAngle:function(A){this.getViewerImpl().cameraControl.enabledPolar(A),Bh.warn("请改用 lockAxisZ 方法")},lockAxisZ:function(A,e){this.getViewerImpl().lockAxisZ(A,e)},setMinPolarAngle:function(A){this.getViewerImpl().cameraControl.setMinPolarAngle(A),Bh.warn("请改用 lockAxisZ 方法")},setMaxPolarAngle:function(A){this.getViewerImpl().cameraControl.setMaxPolarAngle(A),Bh.warn("请改用 lockAxisZ 方法")},getMinPolarAngle:function(){return this.getViewerImpl().cameraControl.getMinPolarAngle()},getMaxPolarAngle:function(){return this.getViewerImpl().cameraControl.getMaxPolarAngle()},enableRotate:function(A){return jh.NoRotate=!A,!jh.NoRotate},enablePan:function(A){return jh.NoPan=!A,!jh.NoPan},enableZoom:function(A){return jh.NoZoom=!A,!jh.NoZoom},setPointRotateMode:function(A){return this.getViewerImpl().setPointRotateMode(A),jh.RotatePivotMode},rotateCamera:function(A,e){var t=new s,i=new y;Array.isArray(A)?t.set(A[0],A[1]):t.set(A.x,A.y),e?Array.isArray(e)?i.fromArray(e):i.set(e.x,e.y,e.z):i=this.getViewerImpl().getScene().getBoundingBoxWorld().getCenter(i),this.getViewerImpl().rotateCamera(t,i)},requestPointerLock:function(){this.getViewerImpl().getControlManager().requestPointerLock()},translateComponentByKey:function(A,e,t){this.getViewerImpl().translateComponentByKey(A,e,t)},scaleComponentByKey:function(A,e,t){this.getViewerImpl().scaleComponentByKey(A,e,t)},rotateComponentByKey:function(A,e,t){this.getViewerImpl().rotateComponentByKey(A,e,t)},cancelTransformComponent:function(A){this.getViewerImpl().cancelTransformComponent(A)},restoreComponentTransform:function(){this.getViewerImpl().restoreComponentTransform()},getComponentLocalMatrixByKey:function(A){return this.getViewerImpl().getComponentLocalMatrixByKey(A)},getComponentWorldMatrixByKey:function(A){return this.getViewerImpl().getComponentWorldMatrixByKey(A)},setComponentLocalMatrixByKey:function(A,e){return this.getViewerImpl().setComponentLocalMatrixByKey(A,e)},resetComponentMatrix:function(A,e){return this.getViewerImpl().resetComponentMatrix(A,e)},increaseComponentTransformControlSize:function(){this.getViewerImpl().increaseComponentTransformControlSize()},decreaseComponentTransformControlSize:function(){this.getViewerImpl().decreaseComponentTransformControlSize()},setComponentTransformSpaceToLocalSpace:function(){this.getViewerImpl().setComponentTransformSpaceToLocalSpace()},setComponentTransformSpaceToWorldSpace:function(){this.getViewerImpl().setComponentTransformSpaceToWorldSpace()},switchComponentTransformSpaceBetweenLocalAndWorld:function(){this.getViewerImpl().switchComponentTransformSpaceBetweenLocalAndWorld()},showComponentTransformOnAxis:function(A){this.getViewerImpl().showComponentTransformOnAxis(A)},hideComponentTransformOnAxis:function(A){this.getViewerImpl().hideComponentTransformOnAxis(A)},disableComponentTransform:function(){this.getViewerImpl().disableComponentTransform()},enableComponentTransform:function(){this.getViewerImpl().enableComponentTransform()},enableSectionBox:function(){var A=this.getViewerImpl();A.controlManager.enableTool(A,Pc.CLIP_BY_BOX),this._sectionTool=new Ap(A),this._sectionTool.toggle(!0,!0),this._sectionTool.setVisible(!0),this._sectionTool.reset(),this._isSection=!0,this.render()},disableSectionBox:function(){this.getViewerImpl().controlManager.disableTool(Pc.CLIP_BY_BOX),this._isSection=!1,this.render()},resetSectionBox:function(){this._isSection?(this.showSectionBox(),this.setSectionBoxMode(),this._sectionTool.reset("Rotate")):Bh.log(fh[vc.language].SectionBoxLockHint)},setSectionBoxMode:function(A){this._isSection?this._sectionTool.setRotatable("Rotate"===A):Bh.log(fh[vc.language].SectionBoxLockHint)},showSectionBox:function(){this._isSection?(this._sectionTool.setVisible(!0),this.render()):Bh.log(fh[vc.language].SectionBoxLockHint)},hideSectionBox:function(){this._isSection?(this._sectionTool.setVisible(!1),this.render()):Bh.log(fh[vc.language].SectionBoxLockHint)},setSectionBox:function(A){var e=this.getViewerImpl(),t=e.getScene().getClipPlanes(),i=e.worldToDrawing(A.min),o=e.worldToDrawing(A.max);this.enableSectionBox(),t.setSectionBox(i,o),this.hideSectionBox()},getSectionBoxState:function(){if(this._isSection)return this._sectionTool.saveState();Bh.log(fh[vc.language].SectionBoxLockHint)},setSectionBoxState:function(A){this._isSection?(this._sectionTool.loadState(A),this.render()):Bh.log(fh[vc.language].SectionBoxLockHint)},getSceneState:function(){return this.getViewerImpl().getSceneState()},setSceneState:function(A){this.getViewerImpl().setSceneState(A)},getScreenShot:function(A){var e,t,i,o;return A.color&&A.color instanceof Xh&&(e=A.color.getRGBA()),A.width>0&&A.height>0&&(i=A.width,o=A.height),"function"==typeof A.callback&&(t=A.callback),this.getViewerImpl().canvas2image(e,i,o,t)},registerModelEventListener:function(A,e){this.getViewerImpl().registerEventListener(A,e)},unregisterModelEventListener:function(A,e){this.getViewerImpl().unregisterEventListener(A,e)},registerControlEventListener:function(A,e){this.getViewerImpl().registerDomEventListener(A,e)},unregisterControlEventListener:function(A,e){this.getViewerImpl().unregisterDomEventListener(A,e)},registerCameraEventListener:function(A,e){this.getViewerImpl().registerCameraEventListener(A,e)},unregisterCameraEventListener:function(A,e){this.getViewerImpl().unregisterCameraEventListener(A,e)},enableLogarithmicDepthBuffer:function(A){this.getViewerImpl().enableLogarithmicDepthBuffer(A)},setSkyBox:function(A,e,t,i){var o=this.getRootScene();o&&(A?o.setSkyBox(void 0,A,e,t,i):o.background=null)},setDrawingStyle:function(A){this.getViewerImpl().setDrawingStyle(A),this.render()},setExposure:function(A){this.getViewerImpl().setExposureShift(A),this.render()},getBoardlineColor:function(A){var e=this.getViewerImpl().getWireframeColor(A);return new Xh(e,e.opacity)},setBoardlineColor:function(A,e){var t=null;t=A instanceof Xh?A:new Xh(A),this.getViewerImpl().setWireframeColor(t,e)},restoreBoardlineColor:function(A){this.getViewerImpl().restoreWireframeColor(A)},getSelectionBoardlineColor:function(){return this.getViewerImpl().getOutlineEdgeColor()||new Xh},setSelectionBoardlineColor:function(A){var e=null;e=A instanceof Xh?A:new Xh(A),this.getViewerImpl().setOutlineEdgeColor(e)},restoreSelectionBoardlineColor:function(){this.getViewerImpl().restoreOutlineEdgeColor()},getSelectionColor:function(){return this.getViewerImpl().getSelectionColor()},setSelectionColor:function(A){var e=null;e=A instanceof Xh?A:new Xh(A),this.getViewerImpl().setSelectionColor(e)},restoreSelectionColor:function(){this.getViewerImpl().restoreSelectionColor()},setAxisNetColor:function(A,e){this.viewerImpl.setAxisNetColor(A,e)},showAxisNet:function(){this.viewerImpl.showAxisNet()},hideAxisNet:function(){this.viewerImpl.hideAxisNet()},enableAxisNetStayInFront:function(){this.viewerImpl.enableAxisNetStayInFront()},disableAxisNetStayInFront:function(){this.viewerImpl.disableAxisNetStayInFront()},getScene:function(){return this.getViewerImpl().getScene().getExternalScene()},getRootScene:function(){return this.getViewerImpl().getScene()},updateSceneBoundingBox:function(){this.getExternalComponentManager().calculateBoundingBox(),this.getViewerImpl().modelManager.updateSceneBoundingBox()},getCurrentControlName:function(){return this.getViewerImpl().getCurrentControlName()},setControlMode:function(A){this.getViewerImpl().setControlMode(A),this.render()},setControlDefault:function(){this.setControlMode(Gc.PICK)},setZoomSpeed:function(A){this.getViewerImpl().cameraControl.setZoomSpeed(A)},getZoomSpeed:function(){return this.getViewerImpl().cameraControl.getZoomSpeed()},setZoomOutLimitRate:function(A){this.getViewerImpl().cameraControl.setZoomOutLimitRate(A)},getZoomOutLimitRate:function(){return this.getViewerImpl().cameraControl.getZoomOutLimitRate()},setLightIntensityFactor:function(A){this.getViewerImpl().setLightIntensityFactor(A)},enableShadow:function(A){this.getViewerImpl().enableShadow(A)},updateShadowLight:function(){this.getViewerImpl().updateShadowLight()},setShadowLightDir:function(A){var e;A?(e=Array.isArray(A)?(new y).fromArray(A):A.isVector3?A:new y(A.x,A.y,A.z),this.getViewerImpl().getScene().lightManager.shadowLightDir=e):Bh.error("无效参数")},getShadowLightDir:function(){return this.getViewerImpl().getScene().lightManager.shadowLightDir.clone()},getLightDirFromAltitudeAndAzimuth:function(A,e){if(void 0!==A&&void 0!==e)return this.getViewerImpl().getScene().lightManager.getLightDirFromAltitudeAndAzimuth(A,e);Bh.error("参数不合法")},getExternalComponentManager:function(){return this.getViewerImpl().getExternalComponentManager()},addExternalObject:function(A,e,t,i){this.getViewerImpl().addExternalObject(A,e,t,i)},addExternalObjects:function(A,e,t){return this.getViewerImpl().addExternalObjects(A,e,t)},removeExternalObjectByName:function(A){this.getViewerImpl().removeExternalObjectByName(A)},clearExternalObjects:function(){this.getViewerImpl().clearExternalObjects()},getExternalObjectByName:function(A){return this.getViewerImpl().getExternalObjectByName(A)},getAllExternalObjects:function(){return this.getViewerImpl().getAllExternalObjects()},showFPS:function(){this.fpsStats=new $d;var A=this;this.viewportDiv.appendChild(this.fpsStats.dom),this.fpsStats.listener=function(){A.fpsStats.update()},this.getViewerImpl().addRenderListener(this.fpsStats.listener)},hideFPS:function(){this.fpsStats&&(this.viewportDiv.removeChild(this.fpsStats.dom),this.getViewerImpl().removeRenderListener(this.fpsStats.listener)),this.fpsStats=null},cloneComponentByKey:function(A,e){var t=this.getViewerImpl().cloneComponent(A);return"translate"===e?this.translateComponentByKey(t.key):"scale"===e?this.scaleComponentByKey(t.key):"rotate"===e&&this.rotateComponentByKey(t.key),null!==t?{mesh:t,key:t.key}:null},setCloneComponentMaterialsByKey:function(A,e,t){return this.getViewerImpl().getExternalComponentManager().setCloneComponentMaterialsByKey(A,e,t)},createSmoothCurve:function(A){return this.getViewerImpl().catmullRomCurve(A)},destroy:function(){this.getViewerImpl().destroy(),this.viewController&&(this.viewController.destroy(),this.viewController=null)}});var qy,jy,Hy,Yy,Wy=function(A){var e=A.lobibox,t=A.toolId,i=A.Flag,o=document.createElement("div");return o.className="tab-body",o.id="tab-compare-"+t,e.window({title:("old"===t?"新-旧":"旧-新")+"模型对比结果",width:334,height:705,closeOnEsc:!1,closeButton:!0,afterWindowHide:function(){var A=document.getElementById("modelCompares"+t);i.modelCompares=!1,A&&(A.style.backgroundColor="",A.querySelector(".yj-icon").className="yj-icon modelCompares-icon")},afterWindowShow:function(){var A=document.getElementById("modelCompares"+t);i.modelCompares=!0,A&&(A.style.backgroundColor="#1f89de",A.querySelector(".yj-icon").className="yj-icon modelCompares-icon active")},content:o})},Jy=function(A){var e=A.lobibox,t=A.toolId,i=document.createElement("div");i.className="tab-body",i.id="tab-compare-properties-"+t;var o=document.createElement("table");o.classList.add("sx-table"),o.classList.add("table-no-top"),i.appendChild(o);var n=document.createElement("thead");o.appendChild(n);var r=document.createElement("tbody");o.appendChild(r);var a=document.createElement("tr");a.className="noprop",r.appendChild(a);var s=document.createElement("td");return s.innerText="尚未选择构件",a.appendChild(s),e.window({title:"属性对比详情",width:500,height:400,closeOnEsc:!1,closeButton:!0,afterWindowHide:function(){},content:i})},zy={AGGREGATION:"AGGREGATION",SEPARATION:"SEPARATION",MULTIWINDOW:"MULTIWINDOW"},Zy={added:"added",deleted:"deleted",changed:"changed",noChanged:"noChanged",oldChanged:"oldChanged",newChanged:"newChanged",oldNoChanged:"oldNoChanged",newNoChanged:"newNoChanged"},Xy={addedColor:{color:32768,opacity:1},deletedColor:{color:16711680,opacity:1},changedColor:{color:16753920,opacity:1}},_y={ACCOUNT_NO_EXIST:"ACCOUNT_NO_EXIST",NO_PERMISSION:"NO_PERMISSION",ON_NETWORK_ERROR:"ON_NETWORK_ERROR",ON_LOAD_INVALID_COMPARES:"ON_LOAD_INVALID_COMPARES",ON_LOAD_INVALID_CONTRASTDETAILS:"ON_LOAD_INVALID_CONTRASTDETAILS",ON_LOAD_INVALID_STATE:"ON_LOAD_INVALID_STATE",ON_LOAD_ERROR:"ON_LOAD_ERROR"},$y=function(A,e){var t=this,i=uh.extend({},{host:"https://bos3d.bimwinner.com",viewport:"",toolbar:!0,coloringImmediately:!1,showPanel:!1},A);this.host=i.host,this.coloringImmediately=i.coloringImmediately,this.domElement=document.getElementById(i.viewport),this.domElement.style.position="relative",this.oldModelKey="",this.newModelKey="",this.displayModel=e||zy.SEPARATION,t.oldNoChangedList=[],t.newNoChangedList=[],t.oldChangedList=[],t.newChangedList=[],t.deletedList=[],t.addedList=[],this.useNewUI=Boolean(window.EIMMODELUI);var o={modelCompares:i.showPanel},n={modelCompares:i.showPanel};switch(this.displayModel){case zy.AGGREGATION:case zy.SEPARATION:if(this.firstViewer=new Py(A),this.secondViewer=this.firstViewer,t.oldLobibox=new bh,t.oldLobibox.viewport=document.querySelector("#"+t.firstViewer.viewport),t.newLobibox=t.oldLobibox,i.toolbar){this.useNewUI?this.firstTool=new window.EIMMODELUI({viewer3D:this.firstViewer,EIM:window.EIM,EIMMODEL:window.EIMMODEL}):(this.firstTool=new Xd(this.firstViewer),this.firstTool.createTool()),this.secondTool=this.firstTool,this.oldCompareWindow=Wy({toolId:"old",lobibox:t.oldLobibox,Flag:o}),this.newCompareWindow=this.oldCompareWindow,this.oldContrastDetailsWindow=Jy({toolId:"old",lobibox:t.oldLobibox}),this.newContrastDetailsWindow=this.oldContrastDetailsWindow,this.oldCompareWindow.setPosition({left:"",right:5,top:60}),this.oldContrastDetailsWindow.setPosition({left:t.domElement.offsetWidth/2+t.domElement.offsetLeft/2-250,top:200}),t.oldContrastDetailsWindow.windowHide();var r=document.createElement("div");r.className="yj-group",this.useNewUI?this.firstTool.plugin.addIcon("topRight",r):this.firstTool.toolbarTop.appendChild(r);var a=document.createElement("button");a.className="yj-but",a.title="模型对比结果",a.id="modelComparesold";var s=document.createElement("div");s.classList.add("yj-icon"),s.classList.add("modelCompares-icon"),a.appendChild(s),r.appendChild(a),a.addEventListener("click",(function(A){o.modelCompares?t.oldCompareWindow.windowHide():(o.modelCompares=!o.modelCompares,t.oldCompareWindow.windowShow())}))}break;case zy.MULTIWINDOW:var l=document.createElement("div");l.setAttribute("id","firstViewer"),l.style.width="50%",l.style.height="100%",l.style.float="left",this.domElement.appendChild(l);var c=document.createElement("div");if(c.setAttribute("id","secondViewer"),c.style.width="50%",c.style.height="100%",c.style.float="left",this.domElement.appendChild(l),this.domElement.appendChild(c),this.firstViewer=new Py({host:this.host,viewport:"firstViewer"}),this.secondViewer=new Py({host:this.host,viewport:"secondViewer"}),t.oldLobibox=new bh,t.oldLobibox.viewport=document.querySelector("#"+t.firstViewer.viewport),t.newLobibox=new bh,t.newLobibox.viewport=document.querySelector("#"+t.secondViewer.viewport),i.toolbar){this.useNewUI?(this.firstTool=new window.EIMMODELUI({viewer3D:this.firstViewer,EIM:window.EIM,EIMMODEL:window.EIMMODEL}),this.secondTool=new window.EIMMODELUI({viewer3D:this.secondViewer,EIM:window.EIM,EIMMODEL:window.EIMMODEL})):(this.firstTool=new Xd(this.firstViewer),this.firstTool.createTool(),this.secondTool=new Xd(this.secondViewer),this.secondTool.createTool()),this.oldCompareWindow=Wy({toolId:"old",lobibox:t.oldLobibox,Flag:o}),this.newCompareWindow=Wy({toolId:"new",lobibox:t.newLobibox,Flag:n}),this.oldContrastDetailsWindow=Jy({toolId:"old",lobibox:t.oldLobibox}),this.newContrastDetailsWindow=Jy({toolId:"new",lobibox:t.newLobibox}),t.oldContrastDetailsWindow.windowHide(),t.newContrastDetailsWindow.windowHide(),this.oldContrastDetailsWindow.setTitle("旧-新属性对比详情"),this.newContrastDetailsWindow.setTitle("新-旧属性对比详情"),this.oldCompareWindow.setPosition({left:"",right:5+t.domElement.offsetWidth/2+t.domElement.offsetLeft/2,top:60}),this.oldContrastDetailsWindow.setPosition({left:t.domElement.offsetWidth/4+t.domElement.offsetLeft/4-250,top:200}),this.newCompareWindow.setPosition({left:"",right:5,top:60}),this.newContrastDetailsWindow.setPosition({left:t.domElement.offsetWidth/4*3+t.domElement.offsetLeft/4*3-250,top:200});var h=document.createElement("div");h.className="yj-group",this.useNewUI?this.firstTool.plugin.addIcon("topRight",h):this.firstTool.toolbarTop.appendChild(h);var d=document.createElement("button");d.className="yj-but",d.title="模型对比结果",d.id="modelComparesold";var p=document.createElement("div");p.classList.add("yj-icon"),p.classList.add("modelCompares-icon"),d.appendChild(p),h.appendChild(d),d.addEventListener("click",(function(A){o.modelCompares?t.oldCompareWindow.windowHide():(o.modelCompares=!o.modelCompares,t.oldCompareWindow.windowShow())}));var g=document.createElement("div");g.className="yj-group",this.useNewUI?this.secondTool.plugin.addIcon("topRight",g):this.secondTool.toolbarTop.appendChild(g);var u=document.createElement("button");u.className="yj-but",u.title="模型对比结果",u.id="modelComparesnew";var f=document.createElement("div");f.classList.add("yj-icon"),f.classList.add("modelCompares-icon"),u.appendChild(f),g.appendChild(u),u.addEventListener("click",(function(A){n.modelCompares?t.newCompareWindow.windowHide():(n.modelCompares=!n.modelCompares,t.newCompareWindow.windowShow())}))}break;default:Bh.error("无效的显示模式!")}i.showPanel||(t.newCompareWindow&&t.newCompareWindow.windowHide(),t.oldCompareWindow&&t.oldCompareWindow.windowHide()),this.firstViewer.getViewerImpl().modelManager.addEventListener(Rc.ON_LOAD_COMPLETE,(function(A){A.modelKey===t.oldModelKey&&(t.oldModelLoaded=!0,t._applyCompareData(),t._initCompareResultPlane(t.compareData))})),this.secondViewer.getViewerImpl().modelManager.addEventListener(Rc.ON_LOAD_COMPLETE,(function(A){A.modelKey===t.newModelKey&&(t.newModelLoaded=!0,t._applyCompareData(),t._initCompareResultPlane(t.compareData))}))};Object.assign($y.prototype,Ld.prototype),Object.assign($y.prototype,{resize:function(A,e){switch(this.domElement&&(this.domElement.style.height=e+"px",this.domElement.style.width=A+"px"),this.displayModel){case zy.AGGREGATION:case zy.SEPARATION:this.firstViewer.resize(A,e);break;case zy.MULTIWINDOW:this.firstViewer.resize(A/2,e),this.secondViewer.resize(A/2,e);break;default:this.firstViewer.resize(A,e)}},autoResize:function(){this.resize(this.getClientWidth(),this.getClientHeight())},getClientHeight:function(){return xh.getClientHeight()},getClientWidth:function(){return xh.getClientWidth()},resetOldScene:function(A){this.firstViewer.resetScene(A)},resetNewScene:function(A){this.secondViewer.resetScene(A)},resetScene:function(A){this.firstViewer.resetScene(A),this.secondViewer.resetScene(A),this._applyCompareData()},transparentComponentsByType:function(A){var e=this._getDataByType(A);this.firstViewer.transparentComponentsByKey(e.oldList),this.secondViewer.transparentComponentsByKey(e.newList)},transparentOtherComponentsByType:function(A){var e=this._getDataByType(A);switch(this.displayModel){case zy.AGGREGATION:case zy.SEPARATION:this.firstViewer.transparentOtherComponentsByKey([].concat(e.oldList).concat(e.newList));break;case zy.MULTIWINDOW:this.firstViewer.transparentOtherComponentsByKey(e.oldList),this.secondViewer.transparentOtherComponentsByKey(e.newList)}},closeTransparentComponentsByType:function(A){var e=this._getDataByType(A);switch(this.displayModel){case zy.AGGREGATION:case zy.SEPARATION:this.firstViewer.closeTransparentComponentsByKey([].concat(e.oldList).concat(e.newList));break;case zy.MULTIWINDOW:this.firstViewer.closeTransparentComponentsByKey(e.oldList),this.secondViewer.closeTransparentComponentsByKey(e.newList)}},clearComponentTransparentList:function(){switch(this.displayModel){case zy.AGGREGATION:case zy.SEPARATION:this.firstViewer.clearComponentTransparentList();break;case zy.MULTIWINDOW:this.firstViewer.clearComponentTransparentList(),this.secondViewer.clearComponentTransparentList()}},showComponentsByType:function(A){var e=this._getDataByType(A);switch(this.displayModel){case zy.AGGREGATION:case zy.SEPARATION:this.firstViewer.showComponentsByKey([].concat(e.oldList).concat(e.newList));break;case zy.MULTIWINDOW:this.firstViewer.showComponentsByKey(e.oldList),this.secondViewer.showComponentsByKey(e.newList)}},hideComponentsByType:function(A){var e=this._getDataByType(A);switch(this.displayModel){case zy.AGGREGATION:case zy.SEPARATION:this.firstViewer.hideComponentsByKey([].concat(e.oldList).concat(e.newList));break;case zy.MULTIWINDOW:this.firstViewer.hideComponentsByKey(e.oldList),this.secondViewer.hideComponentsByKey(e.newList)}},highlightComponentsByType:function(A){var e=this._getDataByType(A);switch(this.displayModel){case zy.AGGREGATION:case zy.SEPARATION:this.firstViewer.highlightComponentsByKey([].concat(e.oldList).concat(e.newList));break;case zy.MULTIWINDOW:this.firstViewer.highlightComponentsByKey(e.oldList),this.secondViewer.highlightComponentsByKey(e.newList)}},addHighlightComponentsByType:function(A){var e=this._getDataByType(A);switch(this.displayModel){case zy.AGGREGATION:case zy.SEPARATION:this.firstViewer.addHighlightComponentsByKey([].concat(e.oldList).concat(e.newList));break;case zy.MULTIWINDOW:this.firstViewer.addHighlightComponentsByKey(e.oldList),this.secondViewer.addHighlightComponentsByKey(e.newList)}},closeHighlightComponentsByType:function(A){var e=this._getDataByType(A);switch(this.displayModel){case zy.AGGREGATION:case zy.SEPARATION:this.firstViewer.closeHighlightComponentsByKey([].concat(e.oldList).concat(e.newList));break;case zy.MULTIWINDOW:this.firstViewer.closeHighlightComponentsByKey(e.oldList),this.secondViewer.closeHighlightComponentsByKey(e.newList)}},getHighlightComponentsKey:function(){switch(this.displayModel){case zy.AGGREGATION:case zy.SEPARATION:return this.firstViewer.getHighlightComponentsKey();case zy.MULTIWINDOW:return[].concat(this.firstViewer.getHighlightComponentsKey()).concat(this.secondViewer.getHighlightComponentsKey());default:return[]}},clearHighlightList:function(){switch(this.displayModel){case zy.AGGREGATION:case zy.SEPARATION:this.firstViewer.clearHighlightList();break;case zy.MULTIWINDOW:this.firstViewer.clearHighlightList(),this.secondViewer.clearHighlightList()}},getHighlightComponents:function(){switch(this.displayModel){case zy.AGGREGATION:case zy.SEPARATION:return this.firstViewer.getHighlightComponents();case zy.MULTIWINDOW:return[].concat(this.firstViewer.getHighlightComponents()).concat(this.secondViewer.getHighlightComponents());default:return[]}},colorfulComponentsByType:function(A,e,t){var i=this._getDataByType(A);switch(this.displayModel){case zy.AGGREGATION:case zy.SEPARATION:this.firstViewer.colorfulComponentsByKey([].concat(i.oldList).concat(i.newList),e,t);break;case zy.MULTIWINDOW:this.firstViewer.colorfulComponentsByKey(i.oldList,e,t),this.secondViewer.colorfulComponentsByKey(i.newList,e,t)}},closeColorfulComponentsByType:function(A){var e=this._getDataByType(A);switch(this.displayModel){case zy.AGGREGATION:case zy.SEPARATION:this.firstViewer.closeColorfulComponentsByKey([].concat(e.oldList).concat(e.newList));break;case zy.MULTIWINDOW:this.firstViewer.closeColorfulComponentsByKey(e.oldList),this.secondViewer.closeColorfulComponentsByKey(e.newList)}},clearColorfulList:function(){switch(this.displayModel){case zy.AGGREGATION:case zy.SEPARATION:this.firstViewer.clearColorfulList();break;case zy.MULTIWINDOW:this.firstViewer.clearColorfulList(),this.secondViewer.clearColorfulList()}},wireFrameComponentsByType:function(A){var e=this._getDataByType(A);switch(this.displayModel){case zy.AGGREGATION:case zy.SEPARATION:this.firstViewer.wireFrameComponentsByKey([].concat(e.oldList).concat(e.newList));break;case zy.MULTIWINDOW:this.firstViewer.wireFrameComponentsByKey(e.oldList),this.secondViewer.wireFrameComponentsByKey(e.newList)}},closeWireFrameComponentsByType:function(A){var e=this._getDataByType(A);switch(this.displayModel){case zy.AGGREGATION:case zy.SEPARATION:this.firstViewer.closeWireFrameComponentsByKey([].concat(e.oldList).concat(e.newList));break;case zy.MULTIWINDOW:this.firstViewer.closeWireFrameComponentsByKey(e.oldList),this.secondViewer.closeWireFrameComponentsByKey(e.newList)}},clearWireframeList:function(){switch(this.displayModel){case zy.AGGREGATION:case zy.SEPARATION:this.firstViewer.clearWireframeList();break;case zy.MULTIWINDOW:this.firstViewer.clearWireframeList(),this.secondViewer.clearWireframeList()}},isolateComponentsByType:function(A,e){var t=this._getDataByType(A);switch(this.displayModel){case zy.AGGREGATION:case zy.SEPARATION:this.firstViewer.isolateComponentsByKey([].concat(t.oldList).concat(t.newList),e);break;case zy.MULTIWINDOW:this.firstViewer.isolateComponentsByKey(t.oldList,e),this.secondViewer.isolateComponentsByKey(t.newList,e)}},closeIsolateComponentsByType:function(A){var e=this._getDataByType(A);switch(this.displayModel){case zy.AGGREGATION:case zy.SEPARATION:this.firstViewer.closeIsolateComponentsByKey([].concat(e.oldList).concat(e.newList));break;case zy.MULTIWINDOW:this.firstViewer.closeIsolateComponentsByKey(e.oldList),this.secondViewer.closeIsolateComponentsByKey(e.newList)}},clearIsolation:function(){switch(this.displayModel){case zy.AGGREGATION:case zy.SEPARATION:this.firstViewer.clearIsolation();break;case zy.MULTIWINDOW:this.firstViewer.clearIsolation(),this.secondViewer.clearIsolation()}},getAddedList:function(){return this.addedList},getDeletedList:function(){return this.deletedList},getChangedList:function(){return[].concat(this.oldChangedList).concat(this.newChangedList)},getNoChangedList:function(){return[].concat(this.oldNoChangedList).concat(this.newNoChangedList)},getNewChangedList:function(){return this.newChangedList},getOldChangedList:function(){return this.oldChangedList},getNewNoChangedList:function(){return this.newNoChangedList},getOldNoChangedList:function(){return this.oldNoChangedList},setAddedColor:function(A,e){Xy.addedColor.color=A,Xy.addedColor.opacity=e},setChangedColor:function(A,e){Xy.changedColor.color=A,Xy.changedColor.opacity=e},setDeletedColor:function(A,e){Xy.deletedColor.color=A,Xy.deletedColor.opacity=e},getAddedColor:function(){return Xy.addedColor},getChangedColor:function(){return Xy.changedColor},getDeletedColor:function(){return Xy.deletedColor},getOldViewer:function(){return this.firstViewer},getNewViewer:function(){return this.secondViewer},getOldToolbar:function(){return this.firstTool},getNewToolbar:function(){return this.secondTool},getComponentAttribute:function(A,e){var t=this.firstViewer.viewerImpl.getModelByComponentKey(A),i=this.secondViewer.viewerImpl.getModelByComponentKey(A);t?this.firstViewer.getComponentsAttributeByKey(A,(function(A){A&&e(A.attribute)})):i&&this.secondViewer.getComponentsAttributeByKey(A,(function(A){A&&e(A.attribute)}))},getContrastDetails:function(A,e,t){var i=this;_d({type:"GET",url:this.host+"/api/"+this.projectKey+"/compares/changes?compareKey="+this.compareKey+"&newComponentKey="+e+"&oldComponentKey="+A,headers:{Authorization:this.accessToken},success:function(A){var e={};if("string"==typeof A)try{e=JSON.parse(A)}catch(A){return void i.dispatchEvent({type:_y.ON_LOAD_INVALID_CONTRASTDETAILS,compareKey:i.compareKey})}else e=A;e&&"SUCCESS"===e.code?t&&t(e.data):(Bh.log(i.compareKey,"获取对比详情出错! ",e.message),i.dispatchEvent({type:_y.ON_LOAD_ERROR,compareKey:i.compareKey,code:e.code,message:e.message}))},error:function(A,e){switch(A){case 401:i.dispatchEvent({type:_y.ACCOUNT_NO_EXIST,compareKey:i.compareKey,data:e});break;case 403:i.dispatchEvent({type:_y.NO_PERMISSION,compareKey:i.compareKey,data:e});break;default:i.dispatchEvent({type:_y.ON_NETWORK_ERROR,compareKey:i.compareKey,data:A})}}})},showOldContrastDetails:(qy="",jy=document.getElementById("tab-compare-properties-old"),Hy=function(A,e,t,i,o){var n=document.createElement("tr");i.parentNode.appendChild(n),n.classList.add(o);var r=document.createElement("td");r.innerText=A||"",n.appendChild(r);var a=document.createElement("td");a.innerText=e||"",n.appendChild(a);var s=document.createElement("td");s.innerText=t||"",n.appendChild(s)},Yy=function(A,e,t,i){var o=document.createElement("tr");o.className="sx-active",jy.querySelector("table tbody").appendChild(o);var n=document.createElement("td");for(var r in n.colSpan=2,n.style.fontSize="14px",o.appendChild(n),n.appendChild(document.createElement("b")),n.firstElementChild.innerHTML=A,e)if(e.hasOwnProperty(r)){if(!(t&&t[r]||i&&i[r])){Hy(r,e[r],e[r],o,"compares_noChanged");continue}if(t&&t[r]&&i&&i[r]){Hy(r,e[r],i[r],o,"compares_changed"),delete i[r];continue}if((!t||!t[r])&&i&&i[r]){Hy(r,"",i[r],o,"compares_added"),delete i[r];continue}!t||!t[r]||i&&i[r]||Hy(r,e[r],"",o,"compares_deleted")}for(var a in i)i.hasOwnProperty(a)&&(void 0!==e[a]?Hy(a,e[a],i[a],o,"compares_changed"):Hy(a,"",i[a],o,"compares_added"))},function(A){var e=this;if((jy=document.querySelector("#tab-compare-properties-old"))&&(e.showOldContrastDetailsWindow(),A!==qy)){if(void 0===A){var t=jy.querySelectorAll("table tbody tr");jy.querySelector("table tbody").removeChild(t[0]),jy.querySelector("table tbody").innerHTML="";var i=document.createElement("tr");i.className="noprop";var o=document.createElement("td");return o.setAttribute("colspan","2"),o.innerHTML="未选中构件",i.appendChild(o),jy.querySelector("table tbody").appendChild(i),void(qy=A)}qy=A;var n=jy.querySelectorAll("table tbody tr");jy.querySelector("table tbody").removeChild(n[0]),e.getComponentAttribute(qy,(function(A){if(jy.querySelector("table tbody").innerHTML="",null===A){var t=document.createElement("tr");t.className="noprop";var i=document.createElement("td");return i.innerHTML="没有属性",t.appendChild(i),void jy.querySelector("table tbody").appendChild(t)}if(void 0===A){var o=document.createElement("tr");o.className="noprop";var n=document.createElement("td");return n.innerHTML="属性加载失败",o.appendChild(n),void jy.querySelector("table tbody").appendChild(o)}var r=qy.indexOf("_");if(-1!==r){var a=e.newModelKey+qy.slice(r);e.getContrastDetails(qy,a,(function(e){var t=e.old.attribute,i=e.new.attribute,o=document.createElement("tr");o.className="noprop";var n=document.createElement("th");o.appendChild(n);var r=document.createElement("span");r.classList.add("value"),r.classList.add("nonEditable"),r.innerHTML="属性名",n.appendChild(r);var a=document.createElement("th");o.appendChild(a);var s=document.createElement("span");s.classList.add("value"),s.classList.add("nonEditable"),s.innerHTML="修改前",a.appendChild(s);var l=document.createElement("th");o.appendChild(l);var c=document.createElement("span");c.classList.add("value"),c.classList.add("nonEditable"),c.innerHTML="修改后",l.appendChild(c),jy.querySelector("table tbody").appendChild(o);var h=A;for(var d in h)"object"===lc(h[d])?(Yy(d,h[d],t[d],i[d]),delete i[d]):"string"==typeof h[d]&&Hy(d,h[d],i[d],o);for(var p in i)"object"===lc(h[p])?Yy(p,h[p],t[p],i[p]):"string"==typeof h[p]&&Hy(p,h[p],i[p],o)}))}}))}}),showNewContrastDetails:function(){var A="",e=document.getElementById("tab-compare-properties-new"),t=function(A,e,t,i,o){var n=document.createElement("tr");i.parentNode.appendChild(n),n.classList.add(o);var r=document.createElement("td");r.innerText=A||"",n.appendChild(r);var a=document.createElement("td");a.innerText=e||"",n.appendChild(a);var s=document.createElement("td");s.innerText=t||"",n.appendChild(s)},i=function(A,i,o,n){var r=document.createElement("tr");r.className="sx-active",e.querySelector("table tbody").appendChild(r);var a=document.createElement("td");for(var s in a.colSpan=2,a.style.fontSize="14px",r.appendChild(a),a.appendChild(document.createElement("b")),a.firstElementChild.innerHTML=A,i)if(i.hasOwnProperty(s)){if(!(o&&o[s]||n&&n[s])){t(s,i[s],i[s],r,"compares_noChanged");continue}if(o&&o[s]&&n&&n[s]){t(s,i[s],n[s],r,"compares_changed"),delete n[s];continue}if((!o||!o[s])&&n&&n[s]){t(s,"",n[s],r,"compares_added"),delete n[s];continue}!o||!o[s]||n&&n[s]||t(s,i[s],"",r,"compares_deleted")}for(var l in n)n.hasOwnProperty(l)&&(void 0!==i[l]?t(l,i[l],n[l],r,"compares_changed"):t(l,"",n[l],r,"compares_added"))};return function(o){var n=this;if((e=document.querySelector("#tab-compare-properties-new"))&&(n.showNewContrastDetailsWindow(),o!==A)){if(void 0===o){var r=e.querySelectorAll("table tbody tr");e.querySelector("table tbody").removeChild(r[0]),e.querySelector("table tbody").innerHTML="";var a=document.createElement("tr");a.className="noprop";var s=document.createElement("td");return s.setAttribute("colspan","2"),s.innerHTML="未选中构件",a.appendChild(s),e.querySelector("table tbody").appendChild(a),void(A=o)}A=o;var l=e.querySelectorAll("table tbody tr");e.querySelector("table tbody").removeChild(l[0]),n.getComponentAttribute(A,(function(o){if(e.querySelector("table tbody").innerHTML="",null===o){var r=document.createElement("tr");r.className="noprop";var a=document.createElement("td");return a.innerHTML="没有属性",r.appendChild(a),void e.querySelector("table tbody").appendChild(r)}if(void 0===o){var s=document.createElement("tr");s.className="noprop";var l=document.createElement("td");return l.innerHTML="属性加载失败",s.appendChild(l),void e.querySelector("table tbody").appendChild(s)}var c=A.indexOf("_");if(-1!==c){var h=n.oldModelKey+A.slice(c);n.getContrastDetails(h,A,(function(A){var n=A.new.attribute,r=A.old.attribute,a=document.createElement("tr");a.className="noprop";var s=document.createElement("th");a.appendChild(s);var l=document.createElement("span");l.classList.add("value"),l.classList.add("nonEditable"),l.innerHTML="属性名",s.appendChild(l);var c=document.createElement("th");a.appendChild(c);var h=document.createElement("span");h.classList.add("value"),h.classList.add("nonEditable"),h.innerHTML="修改前",c.appendChild(h);var d=document.createElement("th");a.appendChild(d);var p=document.createElement("span");p.classList.add("value"),p.classList.add("nonEditable"),p.innerHTML="修改后",d.appendChild(p),e.querySelector("table tbody").appendChild(a);var g=o;for(var u in g)"object"===lc(g[u])?(i(u,g[u],n[u],r[u]),delete r[u]):"string"==typeof g[u]&&t(u,g[u],r[u],a);for(var f in r)"object"===lc(g[f])?i(f,g[f],n[f],r[f]):"string"==typeof g[f]&&t(f,g[f],r[f],a)}))}}))}}}(),showOldContrastDetailsWindow:function(){this.oldContrastDetailsWindow&&this.oldContrastDetailsWindow.windowShow&&this.oldContrastDetailsWindow.windowShow()},showNewContrastDetailsWindow:function(){this.newContrastDetailsWindow&&this.newContrastDetailsWindow.windowShow&&this.newContrastDetailsWindow.windowShow()},hideOldContrastDetailsWindow:function(){this.oldContrastDetailsWindow&&this.oldContrastDetailsWindow.windowHide&&this.oldContrastDetailsWindow.windowHide()},hideNewContrastDetailsWindow:function(){this.newContrastDetailsWindow&&this.newContrastDetailsWindow.windowHide()&&this.newContrastDetailsWindow.windowHide()},showContrastDetailsWindow:function(){this.showOldContrastDetailsWindow(),this.showNewContrastDetailsWindow()},hideContrastDetailsWindow:function(){this.hideOldContrastDetailsWindow(),this.hideNewContrastDetailsWindow()},showOldCompareWindow:function(){this.oldCompareWindow&&this.oldCompareWindow.windowShow&&this.oldCompareWindow.windowShow()},showNewCompareWindow:function(){this.newCompareWindow&&this.newCompareWindow.windowShow&&this.newCompareWindow.windowShow()},hideOldCompareWindow:function(){this.oldCompareWindow&&this.oldCompareWindow.windowHide&&this.oldCompareWindow.windowHide()},hideNewCompareWindow:function(){this.newCompareWindow&&this.newCompareWindow.windowHide()&&this.newCompareWindow.windowHide()},showCompareWindow:function(){this.showOldCompareWindow(),this.showNewCompareWindow()},hideCompareWindow:function(){this.hideOldCompareWindow(),this.hideNewCompareWindow()}}),$y.prototype.addView=function(A,e,t){var i=this;this.compareKey=A,this.projectKey=e,this.accessToken=t||"",_d({type:"GET",url:this.host+"/api/"+e+"/compares/status?compareKey="+A,headers:{Authorization:this.accessToken},success:i._loadSuccess.bind(i),error:function(e,t){switch(e){case 401:i.dispatchEvent({type:_y.ACCOUNT_NO_EXIST,compareKey:A,data:t});break;case 403:i.dispatchEvent({type:_y.NO_PERMISSION,compareKey:A,data:t});break;default:i.dispatchEvent({type:_y.ON_NETWORK_ERROR,compareKey:A,data:e})}}}),i._loadCompares()},$y.prototype._loadCompares=function(){var A=this;_d({type:"GET",url:this.host+"/api/"+this.projectKey+"/compares?compareKey="+this.compareKey,headers:{Authorization:this.accessToken},success:A._loadComparesSuccess.bind(A),error:function(e,t){switch(e){case 401:A.dispatchEvent({type:_y.ACCOUNT_NO_EXIST,compareKey:A.compareKey,data:t});break;case 403:A.dispatchEvent({type:_y.NO_PERMISSION,compareKey:A.compareKey,data:t});break;default:A.dispatchEvent({type:_y.ON_NETWORK_ERROR,compareKey:A.compareKey,data:e})}}})},$y.prototype._loadComparesSuccess=function(A){var e={};if("string"==typeof A)try{e=JSON.parse(A)}catch(A){return void this.dispatchEvent({type:_y.ON_LOAD_INVALID_COMPARES,compareKey:this.compareKey})}else e=A;if(e&&"SUCCESS"===e.code){this.compareData=e.data,this.compareDataLoaded=!0;for(var t=[],i=[],o=[],n=[],r=null,a=0,s=this.compareData.changed.categories.length;s>a;a+=1)for(var l=0,c=this.compareData.changed.categories[a].elements.length;c>l;l+=1)t.push((r=this.compareData.changed.categories[a].elements[l]).oldComponentKey),i.push(r.newComponentKey);for(var h=0,d=this.compareData.added.categories.length;d>h;h+=1)for(var p=0,g=this.compareData.added.categories[h].elements.length;g>p;p+=1)o.push((r=this.compareData.added.categories[h].elements[p]).componentKey);for(var u=0,f=this.compareData.deleted.categories.length;f>u;u+=1)for(var m=0,C=this.compareData.deleted.categories[u].elements.length;C>m;m+=1)n.push((r=this.compareData.deleted.categories[u].elements[m]).componentKey);this.oldChangedList=t,this.newChangedList=i,this.deletedList=n,this.addedList=o,this._initCompareResultPlane(e.data),this._applyCompareData()}else Bh.log(this.compareKey,"config load error! ",e.message),this.dispatchEvent({type:_y.ON_LOAD_ERROR,compareKey:this.compareKey,code:e.code,message:e.message})},$y.prototype._loadSuccess=function(A){var e={};if("string"==typeof A)try{e=JSON.parse(A)}catch(A){return void this.dispatchEvent({type:_y.ON_LOAD_INVALID_STATE,compareKey:this.compareKey})}else e=A;if(e&&"SUCCESS"===e.code)if("1"!==e.data.status);else switch(this.oldModelKey=e.data.old,this.newModelKey=e.data.new,this.name=e.data.name,this.displayModel){case zy.AGGREGATION:case zy.SEPARATION:this.firstViewer.addView(this.oldModelKey,this.projectKey,this.accessToken),this.firstViewer.addView(this.newModelKey,this.projectKey,this.accessToken);break;case zy.MULTIWINDOW:this.firstViewer.addView(this.oldModelKey,this.projectKey,this.accessToken),this.secondViewer.addView(this.newModelKey,this.projectKey,this.accessToken);break;default:this.firstViewer.addView(this.oldModelKey,this.projectKey,this.accessToken),this.firstViewer.addView(this.newModelKey,this.projectKey,this.accessToken)}else Bh.log(this.compareKey,"config load error! ",e.message),this.dispatchEvent({type:_y.ON_LOAD_ERROR,compareKey:this.compareKey,code:e.code,message:e.message})},$y.prototype._applyCompareData=function(){if(this.oldModelLoaded&&this.newModelLoaded&&this.compareDataLoaded){var A=this.firstViewer.getViewerImpl().getModel(this.oldModelKey),e=null,t=null;if(A){var i=A.getComponentlist();e=this.firstViewer.getBoxByComponentsKey(i);for(var o=0,n=this.deletedList.length;n>o;o+=1)i.remove(this.deletedList[o]);for(var r=0,a=this.oldChangedList.length;a>r;r+=1)i.remove(this.oldChangedList[r]);this.oldNoChangedList=i}var s=this.secondViewer.getViewerImpl().getModel(this.newModelKey);if(s){var l=s.getComponentlist();t=this.firstViewer.getBoxByComponentsKey(l);for(var c=0,h=this.addedList.length;h>c;c+=1)l.remove(this.addedList[c]);for(var d=0,p=this.newChangedList.length;p>d;d+=1)l.remove(this.newChangedList[d]);this.newNoChangedList=l}if(this.displayModel===zy.SEPARATION&&!e.isEmpty()&&!t.isEmpty()){var g=e.getSize(),u=t.getSize(),f=1,m=1,C=0;f=u.x>g.x?g.x:u.x,m=u.y>g.y?g.y:u.y;var y=s.getModelMatrix(),v=this.firstViewer.viewerImpl.modelManager.scene.getBoundingBoxWorld();f>m?(y.elements[14]+=C=1.5*m,v.min.y-=C/2,v.max.y+=C/2):(y.elements[13]+=C=1.5*f,v.min.x-=C/2,v.max.x+=C/2),s.setModelMatrix(y),this.firstViewer.viewerImpl.modelManager.scene.setBoundingBoxWorld(v),this.firstViewer.adaptiveSize()}this.coloringImmediately&&(this.firstViewer.colorfulComponentsByKey(this.deletedList,Xy.deletedColor.color,Xy.deletedColor.opacity),this.secondViewer.colorfulComponentsByKey(this.addedList,Xy.addedColor.color,Xy.addedColor.opacity),this.firstViewer.colorfulComponentsByKey(this.oldChangedList,Xy.changedColor.color,Xy.changedColor.opacity),this.secondViewer.colorfulComponentsByKey(this.newChangedList,Xy.changedColor.color,Xy.changedColor.opacity))}},$y.prototype._getDataByType=function(A){var e=[],t=[];switch(A){case Zy.added:t=this.addedList;break;case Zy.deleted:e=this.deletedList;break;case Zy.changed:e=this.oldChangedList,t=this.newChangedList;break;case Zy.noChanged:e=this.oldNoChangedList,t=this.newNoChangedList;break;case Zy.oldChanged:e=this.oldChangedList;break;case Zy.newChanged:t=this.newChangedList;break;case Zy.oldNoChanged:e=this.oldNoChangedList;break;case Zy.newNoChanged:t=this.newNoChangedList}return{oldList:e,newList:t}},$y.prototype._addProperty=function(A,e,t){var i=this,o=document.createElement("tr");o.classList.add("compares_list_tr");var n=document.createElement("td");n.innerText=A||"",o.appendChild(n);var r=document.createElement("td");if(r.innerText=e||"",o.appendChild(r),void 0!==t){var a=document.createElement("td"),s=document.createElement("a");s.classList.add("showDetails"),t?(s.innerHTML="查看详情",s.addEventListener("click",(function(A){A.stopPropagation();for(var e=A.target.parentNode.parentNode.oldKey,t=A.target.parentNode.parentNode.newKey,o=0,n=A.path.length;n>o;o+=1){if("tab-compare-old"===A.path[o].id){i.showOldContrastDetails(e);break}if("tab-compare-new"===A.path[o].id){i.showNewContrastDetails(t);break}}}))):s.innerHTML="无",a.appendChild(s),o.appendChild(a)}return o},$y.prototype._initCompareResultPlane=function(A){if(this.oldModelLoaded&&this.newModelLoaded&&this.compareDataLoaded)switch(this.displayModel){case zy.AGGREGATION:case zy.SEPARATION:var e=document.getElementById("tab-compare-old");if(!e)return;this._createPanel(e,A);break;case zy.MULTIWINDOW:var t=document.getElementById("tab-compare-old");if(!t)return;this._createInversionPanel(t,A);var i=document.getElementById("tab-compare-new");if(!i)return;this._createPanel(i,A)}},$y.prototype._createPanel=function(A,e){var t=this;if(A){var i=document.createElement("div");i.classList.add("compares_list_body"),A.appendChild(i);var o=document.createElement("div");o.classList.add("compares_list_title"),o.innerText="新增构件列表("+t.addedList.length+")",o.addEventListener("click",(function(A){for(var e=A.target.parentNode.querySelectorAll("tr"),i=[],o=0,n=e.length;n>o;o+=1)e[o].newKey&&i.push(e[o].newKey);t.secondViewer.adaptiveSizeByKey(i),t.secondViewer.clearColorfulList(),t.secondViewer.clearTransparentList(),t.secondViewer.transparentOtherComponentsByKey(i),t.secondViewer.colorfulComponentsByKey(i,Xy.addedColor.color,Xy.addedColor.opacity)})),i.appendChild(o);var n=document.createElement("table");n.classList.add("sx-table"),n.classList.add("compares_list_table"),n.classList.add("table-no-top"),i.appendChild(n);var r=document.createElement("thead");n.appendChild(r);var a=document.createElement("tbody");n.appendChild(a);var s=document.createElement("tr");s.style.backgroundColor="rgba(0, 128, 0, 0.8)",s.className="noprop";var l=document.createElement("th");s.appendChild(l);var c=document.createElement("span");c.classList.add("value"),c.classList.add("nonEditable"),c.innerHTML="名称",l.appendChild(c);var h=document.createElement("th");s.appendChild(h);var d=document.createElement("span");d.classList.add("value"),d.classList.add("nonEditable"),d.innerHTML="类型",h.appendChild(d),r.appendChild(s);for(var p=0,g=t.addedList.length;g>p;p+=1){var u=t.secondViewer.getComponentsByKey(t.addedList[p]);if(u&&u[0]&&u[0][t.addedList[p]]&&u[0][t.addedList[p]][0]){var f=t._addProperty(u[0][t.addedList[p]][0].name,u[0][t.addedList[p]][0].type);f.oldKey="",f.newKey=t.addedList[p],f.addEventListener("click",(function(A){var e=A.target.parentNode.newKey;e&&(t.secondViewer.adaptiveSizeByKey(e),t.secondViewer.clearColorfulList(),t.secondViewer.clearTransparentList(),t.secondViewer.transparentOtherComponentsByKey(e),t.secondViewer.colorfulComponentsByKey(e,Xy.addedColor.color,Xy.addedColor.opacity))})),a.appendChild(f)}}var m=t.oldChangedList,C=t.newChangedList,y=document.createElement("div");y.classList.add("compares_list_body"),A.appendChild(y);var v=document.createElement("div");v.classList.add("compares_list_title"),v.innerText="变更构件列表("+m.length+")",v.addEventListener("click",(function(A){for(var e=A.target.parentNode.querySelectorAll("tr"),i=[],o=[],n=0,r=e.length;r>n;n+=1)e[n].oldKey&&o.push(e[n].oldKey),e[n].newKey&&i.push(e[n].newKey);switch(t.displayModel){case zy.AGGREGATION:case zy.SEPARATION:t.secondViewer.adaptiveSizeByKey(i.concat(o)),t.secondViewer.clearColorfulList(),t.secondViewer.clearTransparentList(),t.secondViewer.transparentOtherComponentsByKey(i.concat(o)),t.secondViewer.colorfulComponentsByKey(i.concat(o),Xy.changedColor.color,Xy.changedColor.opacity);break;case zy.MULTIWINDOW:t.firstViewer.adaptiveSizeByKey(o),t.firstViewer.clearColorfulList(),t.firstViewer.clearTransparentList(),t.firstViewer.transparentOtherComponentsByKey(o),t.firstViewer.colorfulComponentsByKey(o,Xy.changedColor.color,Xy.changedColor.opacity),t.secondViewer.adaptiveSizeByKey(i),t.secondViewer.clearColorfulList(),t.secondViewer.clearTransparentList(),t.secondViewer.transparentOtherComponentsByKey(i),t.secondViewer.colorfulComponentsByKey(i,Xy.changedColor.color,Xy.changedColor.opacity)}})),y.appendChild(v);var I=document.createElement("table");I.classList.add("sx-table"),I.classList.add("compares_list_table"),I.classList.add("table-no-top"),y.appendChild(I);var E=document.createElement("thead");I.appendChild(E);var B=document.createElement("tbody");I.appendChild(B);var x=document.createElement("tr");x.style.backgroundColor="rgba(255, 165, 0, 0.8)",x.className="noprop";var S=document.createElement("th");x.appendChild(S);var w=document.createElement("span");w.classList.add("value"),w.classList.add("nonEditable"),w.innerHTML="名称",S.appendChild(w);var M=document.createElement("th");x.appendChild(M);var b=document.createElement("span");b.classList.add("value"),b.classList.add("nonEditable"),b.innerHTML="类型",M.appendChild(b);var U=document.createElement("th");x.appendChild(U);var F=document.createElement("span");F.classList.add("value"),F.classList.add("nonEditable"),F.innerHTML="操作",U.appendChild(F),E.appendChild(x);for(var K=0,Q=C.length;Q>K;K+=1){var R=t.secondViewer.getComponentsByKey(C[K]);if(R&&R[0]&&R[0][C[K]]&&R[0][C[K]][0]){var T=t._addProperty(R[0][C[K]][0].name,R[0][C[K]][0].type,"geometry"!==C[K].type);T.oldKey=m[K],T.newKey=C[K],T.addEventListener("click",(function(A){var e=A.target.parentNode.oldKey,i=A.target.parentNode.newKey;if(e&&i)switch(t.displayModel){case zy.AGGREGATION:case zy.SEPARATION:t.secondViewer.adaptiveSizeByKey([e,i]),t.secondViewer.clearColorfulList(),t.secondViewer.clearTransparentList(),t.secondViewer.transparentOtherComponentsByKey([e,i]),t.secondViewer.colorfulComponentsByKey([e,i],Xy.changedColor.color,Xy.changedColor.opacity);break;case zy.MULTIWINDOW:t.firstViewer.adaptiveSizeByKey(e),t.firstViewer.clearColorfulList(),t.firstViewer.clearTransparentList(),t.firstViewer.transparentOtherComponentsByKey(e),t.firstViewer.colorfulComponentsByKey(e,Xy.changedColor.color,Xy.changedColor.opacity),t.secondViewer.adaptiveSizeByKey(i),t.secondViewer.clearColorfulList(),t.secondViewer.clearTransparentList(),t.secondViewer.transparentOtherComponentsByKey(i),t.secondViewer.colorfulComponentsByKey(i,Xy.changedColor.color,Xy.changedColor.opacity)}})),B.appendChild(T)}}var k=document.createElement("div");k.classList.add("compares_list_body"),A.appendChild(k);var D=document.createElement("div");D.classList.add("compares_list_title"),D.innerText="移除构件列表("+t.deletedList.length+")",D.addEventListener("click",(function(A){for(var e=A.target.parentNode.querySelectorAll("tr"),i=[],o=0,n=e.length;n>o;o+=1)e[o].oldKey&&i.push(e[o].oldKey);t.secondViewer.adaptiveSizeByKey(i),t.secondViewer.clearColorfulList(),t.secondViewer.clearTransparentList(),t.secondViewer.transparentOtherComponentsByKey(i),t.secondViewer.colorfulComponentsByKey(i,Xy.deletedColor.color,Xy.deletedColor.opacity)})),k.appendChild(D);var L=document.createElement("table");L.classList.add("sx-table"),L.classList.add("compares_list_table"),L.classList.add("table-no-top"),k.appendChild(L);var N=document.createElement("thead");L.appendChild(N);var O=document.createElement("tbody");L.appendChild(O);var V=document.createElement("tr");V.style.backgroundColor="rgba(255, 0, 0, 0.8)",V.className="noprop";var G=document.createElement("th");V.appendChild(G);var P=document.createElement("span");P.classList.add("value"),P.classList.add("nonEditable"),P.innerHTML="名称",G.appendChild(P);var q=document.createElement("th");V.appendChild(q);var j=document.createElement("span");j.classList.add("value"),j.classList.add("nonEditable"),j.innerHTML="类型",q.appendChild(j),N.appendChild(V);for(var H=0,Y=t.deletedList.length;Y>H;H+=1){var W=t.firstViewer.getComponentsByKey(t.deletedList[H]);if(W&&W[0]&&W[0][t.deletedList[H]]&&W[0][t.deletedList[H]][0]){var J=t._addProperty(W[0][t.deletedList[H]][0].name,W[0][t.deletedList[H]][0].type);J.oldKey=t.deletedList[H],J.newKey="",J.addEventListener("click",(function(A){var e=A.target.parentNode.oldKey;e&&(t.firstViewer.adaptiveSizeByKey(e),t.firstViewer.clearColorfulList(),t.firstViewer.clearTransparentList(),t.firstViewer.transparentOtherComponentsByKey(e),t.firstViewer.colorfulComponentsByKey(e,Xy.deletedColor.color,Xy.deletedColor.opacity))})),O.appendChild(J)}}}},$y.prototype._createInversionPanel=function(A,e){var t=this;if(A){var i=t.deletedList,o=t.addedList,n=document.createElement("div");n.classList.add("compares_list_body"),A.appendChild(n);var r=document.createElement("div");r.classList.add("compares_list_title"),r.innerText="新增构件列表("+i.length+")",r.addEventListener("click",(function(A){for(var e=A.target.parentNode.querySelectorAll("tr"),i=[],o=0,n=e.length;n>o;o+=1)e[o].newKey&&i.push(e[o].newKey);t.firstViewer.adaptiveSizeByKey(i),t.firstViewer.clearColorfulList(),t.firstViewer.clearTransparentList(),t.firstViewer.transparentOtherComponentsByKey(i),t.firstViewer.colorfulComponentsByKey(i,Xy.addedColor.color,Xy.addedColor.opacity)})),n.appendChild(r);var a=document.createElement("table");a.classList.add("sx-table"),a.classList.add("compares_list_table"),a.classList.add("table-no-top"),n.appendChild(a);var s=document.createElement("thead");a.appendChild(s);var l=document.createElement("tbody");a.appendChild(l);var c=document.createElement("tr");c.style.backgroundColor="rgba(0, 128, 0, 0.8)",c.className="noprop";var h=document.createElement("th");c.appendChild(h);var d=document.createElement("span");d.classList.add("value"),d.classList.add("nonEditable"),d.innerHTML="名称",h.appendChild(d);var p=document.createElement("th");c.appendChild(p);var g=document.createElement("span");g.classList.add("value"),g.classList.add("nonEditable"),g.innerHTML="类型",p.appendChild(g),s.appendChild(c);for(var u=0,f=i.length;f>u;u+=1){var m=t.firstViewer.getComponentsByKey(i[u]);if(m&&m[0]&&m[0][i[u]]&&m[0][i[u]][0]){var C=t._addProperty(m[0][i[u]][0].name,m[0][i[u]][0].type);C.oldKey="",C.newKey=i[u],C.addEventListener("click",(function(A){var e=A.target.parentNode.newKey;e&&(t.firstViewer.adaptiveSizeByKey(e),t.firstViewer.clearColorfulList(),t.firstViewer.clearTransparentList(),t.firstViewer.transparentOtherComponentsByKey(e),t.firstViewer.colorfulComponentsByKey(e,Xy.addedColor.color,Xy.addedColor.opacity))})),l.appendChild(C)}}var y=t.oldChangedList,v=t.newChangedList,I=document.createElement("div");I.classList.add("compares_list_body"),A.appendChild(I);var E=document.createElement("div");E.classList.add("compares_list_title"),E.innerText="变更构件列表("+y.length+")",E.addEventListener("click",(function(A){for(var e=A.target.parentNode.querySelectorAll("tr"),i=[],o=[],n=0,r=e.length;r>n;n+=1)e[n].oldKey&&o.push(e[n].oldKey),e[n].newKey&&i.push(e[n].newKey);switch(t.displayModel){case zy.AGGREGATION:case zy.SEPARATION:t.secondViewer.adaptiveSizeByKey(i.concat(o)),t.secondViewer.clearColorfulList(),t.secondViewer.clearTransparentList(),t.secondViewer.transparentOtherComponentsByKey(i.concat(o)),t.secondViewer.colorfulComponentsByKey(i.concat(o),Xy.changedColor.color,Xy.changedColor.opacity);break;case zy.MULTIWINDOW:t.firstViewer.adaptiveSizeByKey(o),t.firstViewer.clearColorfulList(),t.firstViewer.clearTransparentList(),t.firstViewer.transparentOtherComponentsByKey(o),t.firstViewer.colorfulComponentsByKey(o,Xy.changedColor.color,Xy.changedColor.opacity),t.secondViewer.adaptiveSizeByKey(i),t.secondViewer.clearColorfulList(),t.secondViewer.clearTransparentList(),t.secondViewer.transparentOtherComponentsByKey(i),t.secondViewer.colorfulComponentsByKey(i,Xy.changedColor.color,Xy.changedColor.opacity)}})),I.appendChild(E);var B=document.createElement("table");B.classList.add("sx-table"),B.classList.add("compares_list_table"),B.classList.add("table-no-top"),I.appendChild(B);var x=document.createElement("thead");B.appendChild(x);var S=document.createElement("tbody");B.appendChild(S);var w=document.createElement("tr");w.style.backgroundColor="rgba(255, 165, 0, 0.8)",w.className="noprop";var M=document.createElement("th");w.appendChild(M);var b=document.createElement("span");b.classList.add("value"),b.classList.add("nonEditable"),b.innerHTML="名称",M.appendChild(b);var U=document.createElement("th");w.appendChild(U);var F=document.createElement("span");F.classList.add("value"),F.classList.add("nonEditable"),F.innerHTML="类型",U.appendChild(F);var K=document.createElement("th");w.appendChild(K);var Q=document.createElement("span");Q.classList.add("value"),Q.classList.add("nonEditable"),Q.innerHTML="操作",K.appendChild(Q),x.appendChild(w);for(var R=0,T=v.length;T>R;R+=1){var k=t.secondViewer.getComponentsByKey(v[R]);if(k&&k[0]&&k[0][v[R]]&&k[0][v[R]][0]){var D=t._addProperty(k[0][v[R]][0].name,k[0][v[R]][0].type,"geometry"!==v[R].type);D.oldKey=y[R],D.newKey=v[R],D.addEventListener("click",(function(A){var e=A.target.parentNode.oldKey,i=A.target.parentNode.newKey;if(e&&i)switch(t.displayModel){case zy.AGGREGATION:case zy.SEPARATION:t.secondViewer.adaptiveSizeByKey([e,i]),t.secondViewer.clearColorfulList(),t.secondViewer.clearTransparentList(),t.secondViewer.transparentOtherComponentsByKey([e,i]),t.secondViewer.colorfulComponentsByKey([e,i],Xy.changedColor.color,Xy.changedColor.opacity);break;case zy.MULTIWINDOW:t.firstViewer.adaptiveSizeByKey(e),t.firstViewer.clearColorfulList(),t.firstViewer.clearTransparentList(),t.firstViewer.transparentOtherComponentsByKey(e),t.firstViewer.colorfulComponentsByKey(e,Xy.changedColor.color,Xy.changedColor.opacity),t.secondViewer.adaptiveSizeByKey(i),t.secondViewer.clearColorfulList(),t.secondViewer.clearTransparentList(),t.secondViewer.transparentOtherComponentsByKey(i),t.secondViewer.colorfulComponentsByKey(i,Xy.changedColor.color,Xy.changedColor.opacity)}})),S.appendChild(D)}}var L=document.createElement("div");L.classList.add("compares_list_body"),A.appendChild(L);var N=document.createElement("div");N.classList.add("compares_list_title"),N.innerText="移除构件列表("+o.length+")",N.addEventListener("click",(function(A){for(var e=A.target.parentNode.querySelectorAll("tr"),i=[],o=0,n=e.length;n>o;o+=1)e[o].oldKey&&i.push(e[o].oldKey);t.secondViewer.adaptiveSizeByKey(i),t.secondViewer.clearColorfulList(),t.secondViewer.clearTransparentList(),t.secondViewer.transparentOtherComponentsByKey(i),t.secondViewer.colorfulComponentsByKey(i,Xy.deletedColor.color,Xy.deletedColor.opacity)})),L.appendChild(N);var O=document.createElement("table");O.classList.add("sx-table"),O.classList.add("compares_list_table"),O.classList.add("table-no-top"),L.appendChild(O);var V=document.createElement("thead");O.appendChild(V);var G=document.createElement("tbody");O.appendChild(G);var P=document.createElement("tr");P.style.backgroundColor="rgba(255, 0, 0, 0.8)",P.className="noprop";var q=document.createElement("th");P.appendChild(q);var j=document.createElement("span");j.classList.add("value"),j.classList.add("nonEditable"),j.innerHTML="名称",q.appendChild(j);var H=document.createElement("th");P.appendChild(H);var Y=document.createElement("span");Y.classList.add("value"),Y.classList.add("nonEditable"),Y.innerHTML="类型",H.appendChild(Y),V.appendChild(P);for(var W=0,J=o.length;J>W;W+=1){var z=t.secondViewer.getComponentsByKey(o[W]);if(z&&z[0]&&z[0][o[W]]&&z[0][o[W]][0]){var Z=t._addProperty(z[0][o[W]][0].name,z[0][o[W]][0].type);Z.oldKey=o[W],Z.newKey="",Z.addEventListener("click",(function(A){var e=A.target.parentNode.oldKey;e&&(t.secondViewer.adaptiveSizeByKey(e),t.secondViewer.clearColorfulList(),t.secondViewer.clearTransparentList(),t.secondViewer.transparentOtherComponentsByKey(e),t.secondViewer.colorfulComponentsByKey(e,Xy.deletedColor.color,Xy.deletedColor.opacity))})),G.appendChild(Z)}}}};var Av="ON_VIEWER3D_CAMERA_CHANGE",ev=function(A,e){this.viewer2D=e,this.viewer3D=A,this.enableFocus(),this.show3DCameraOn2DViewer()};ev.prototype.enableFocus=function(){var A=this.viewer2D,e=this.viewer3D;e&&A&&(A.setOnSelectComponentCallback((function(A){A&&A.length>0?(e.highlightComponentsByKey(A),e.adaptiveSizeByKey(A)):e.clearHighlightList()})),e.registerModelEventListener(Rc.ON_CLICK_PICK,(function(e){e.intersectInfo&&e.intersectInfo.selectedObjectId&&A.focusOnComponentByKey(e.intersectInfo.selectedObjectId,!0)})))},ev.prototype.enableMove2DCamera=function(){this.viewer2D.getViewerImpl().controlManager.enableTool(this.viewer2D.getViewerImpl(),"viewer3DCameraControl")},ev.prototype.disableMove2DCamera=function(){this.viewer2D.getViewerImpl().controlManager.disableTool("viewer3DCameraControl")},ev.prototype.show3DCameraOn2DViewer=function(){var A=this.viewer2D,e=this.viewer3D;if(e&&A){var t=e.getViewerImpl();e.registerCameraEventListener(Rc.ON_CAMERA_CHANGE,(function(e){var t=e.camera,i=t.getWorldPosition(new y),o=t.getWorldDirection(new y);A.show3DCamera([i.x,i.y],[o.x,o.y])})),A.getViewerImpl().cameraControl.addEventListener(Av,(function(A){var e=A.position;t.locateToPoint({x:e[0],y:e[1],z:t.camera.position.z})}))}};var tv=function A(e,t){Ue.call(this,e),this.type="Reflector";var i=this,o=new LA(void 0!==(t=t||{}).color?t.color:16777215),n=t.textureWidth||512,r=t.textureHeight||512,s=t.clipBias||0,l=t.shader||A.ReflectorShader,c=void 0!==t.recursion?t.recursion:0,h=new EA,d=new y,u=new y,f=new y,m=new M,C=new y(0,0,-1),v=new p,I=new y,E=new y,B=new p,x=new M,S=new je,w=new g(n,r,{minFilter:1006,magFilter:1006,format:1022,stencilBuffer:!1});a.isPowerOfTwo(n)&&a.isPowerOfTwo(r)||(w.texture.generateMipmaps=!1);var b=new Pe({uniforms:Ge.clone(l.uniforms),fragmentShader:l.fragmentShader,vertexShader:l.vertexShader});b.uniforms.tDiffuse.value=w.texture,b.uniforms.color.value=o,b.uniforms.textureMatrix.value=x,this.material=b,this.onBeforeRender=function(A,e,t){if("recursion"in t.userData){if(t.userData.recursion===c)return;t.userData.recursion+=1}if(u.setFromMatrixPosition(i.matrixWorld),f.setFromMatrixPosition(t.matrixWorld),m.extractRotation(i.matrixWorld),d.set(0,0,1),d.applyMatrix4(m),I.subVectors(u,f),0>=I.dot(d)){I.reflect(d).negate(),I.add(u),m.extractRotation(t.matrixWorld),C.set(0,0,-1),C.applyMatrix4(m),C.add(f),E.subVectors(u,C),E.reflect(d).negate(),E.add(u),S.position.copy(I),S.up.set(0,1,0),S.up.applyMatrix4(m),S.up.reflect(d),S.lookAt(E),S.far=t.far,S.updateMatrixWorld(),S.matrixWorldInverse.getInverse(S.matrixWorld),S.projectionMatrix.copy(t.projectionMatrix),S.userData.recursion=0,x.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),x.multiply(S.projectionMatrix),x.multiply(S.matrixWorldInverse),x.multiply(i.matrixWorld),h.setFromNormalAndCoplanarPoint(d,u),h.applyMatrix4(S.matrixWorldInverse),v.set(h.normal.x,h.normal.y,h.normal.z,h.constant);var o=S.projectionMatrix;B.x=(Math.sign(v.x)+o.elements[8])/o.elements[0],B.y=(Math.sign(v.y)+o.elements[9])/o.elements[5],B.z=-1,B.w=(1+o.elements[10])/o.elements[14],v.multiplyScalar(2/v.dot(B)),o.elements[2]=v.x,o.elements[6]=v.y,o.elements[10]=v.z+1-s,o.elements[14]=v.w,w.texture.encoding=A.outputEncoding,i.visible=!1;var n=A.getRenderTarget(),r=A.xr.enabled,a=A.shadowMap.autoUpdate;A.xr.enabled=!1,A.shadowMap.autoUpdate=!1,A.setRenderTarget(w),A.state.buffers.depth.setMask(!0),!1===A.autoClear&&A.clear(),A.render(e,S),A.xr.enabled=r,A.shadowMap.autoUpdate=a,A.setRenderTarget(n);var l=t.viewport;void 0!==l&&A.state.viewport(l),i.visible=!0}},this.getRenderTarget=function(){return w}};(tv.prototype=Object.create(Ue.prototype)).constructor=tv,tv.ReflectorShader={uniforms:{color:{value:null},tDiffuse:{value:null},textureMatrix:{value:null}},vertexShader:["uniform mat4 textureMatrix;","varying vec4 vUv;","void main() {"," vUv = textureMatrix * vec4( position, 1.0 );"," gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );","}"].join("\n"),fragmentShader:["uniform vec3 color;","uniform sampler2D tDiffuse;","varying vec4 vUv;","float blendOverlay( float base, float blend ) {"," return( base < 0.5 ? ( 2.0 * base * blend ) : ( 1.0 - 2.0 * ( 1.0 - base ) * ( 1.0 - blend ) ) );","}","vec3 blendOverlay( vec3 base, vec3 blend ) {"," return vec3( blendOverlay( base.r, blend.r ), blendOverlay( base.g, blend.g ), blendOverlay( base.b, blend.b ) );","}","void main() {"," vec4 base = texture2DProj( tDiffuse, vUv );"," gl_FragColor = vec4( blendOverlay( base.rgb, color ), 1.0 );","}"].join("\n")};var iv=function A(e,t){Ue.call(this,e),this.type="Refractor";var i=this,o=new LA(void 0!==(t=t||{}).color?t.color:8355711),n=t.textureWidth||512,r=t.textureHeight||512,s=t.clipBias||0,l=t.shader||A.RefractorShader,c=new je;c.matrixAutoUpdate=!1,c.userData.refractor=!0;var h=new EA,d=new M,u=new g(n,r,{minFilter:1006,magFilter:1006,format:1022,stencilBuffer:!1});a.isPowerOfTwo(n)&&a.isPowerOfTwo(r)||(u.texture.generateMipmaps=!1),this.material=new Pe({uniforms:Ge.clone(l.uniforms),vertexShader:l.vertexShader,fragmentShader:l.fragmentShader,transparent:!0}),this.material.uniforms.color.value=o,this.material.uniforms.tDiffuse.value=u.texture,this.material.uniforms.textureMatrix.value=d;var m,C,v,I=function(){var A=new y,e=new y,t=new M,o=new y,n=new y;return function(r){return A.setFromMatrixPosition(i.matrixWorld),e.setFromMatrixPosition(r.matrixWorld),o.subVectors(A,e),t.extractRotation(i.matrixWorld),n.set(0,0,1),n.applyMatrix4(t),0>o.dot(n)}}(),E=function(){var A=new y,e=new y,t=new f,o=new y;return function(){i.matrixWorld.decompose(e,t,o),A.set(0,0,1).applyQuaternion(t).normalize(),A.negate(),h.setFromNormalAndCoplanarPoint(A,e)}}(),B=(m=new EA,C=new p,v=new p,function(A){c.matrixWorld.copy(A.matrixWorld),c.matrixWorldInverse.getInverse(c.matrixWorld),c.projectionMatrix.copy(A.projectionMatrix),c.far=A.far,m.copy(h),m.applyMatrix4(c.matrixWorldInverse),C.set(m.normal.x,m.normal.y,m.normal.z,m.constant);var e=c.projectionMatrix;v.x=(Math.sign(C.x)+e.elements[8])/e.elements[0],v.y=(Math.sign(C.y)+e.elements[9])/e.elements[5],v.z=-1,v.w=(1+e.elements[10])/e.elements[14],C.multiplyScalar(2/C.dot(v)),e.elements[2]=C.x,e.elements[6]=C.y,e.elements[10]=C.z+1-s,e.elements[14]=C.w});this.onBeforeRender=function(A,e,t){u.texture.encoding=A.outputEncoding,!0!==t.userData.refractor&&!0!=!I(t)&&(E(),function(A){d.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),d.multiply(A.projectionMatrix),d.multiply(A.matrixWorldInverse),d.multiply(i.matrixWorld)}(t),B(t),function(A,e,t){i.visible=!1;var o=A.getRenderTarget(),n=A.xr.enabled,r=A.shadowMap.autoUpdate;A.xr.enabled=!1,A.shadowMap.autoUpdate=!1,A.setRenderTarget(u),!1===A.autoClear&&A.clear(),A.render(e,c),A.xr.enabled=n,A.shadowMap.autoUpdate=r,A.setRenderTarget(o);var a=t.viewport;void 0!==a&&A.state.viewport(a),i.visible=!0}(A,e,t))},this.getRenderTarget=function(){return u}};(iv.prototype=Object.create(Ue.prototype)).constructor=iv,iv.RefractorShader={uniforms:{color:{value:null},tDiffuse:{value:null},textureMatrix:{value:null}},vertexShader:["uniform mat4 textureMatrix;","varying vec4 vUv;","void main() {"," vUv = textureMatrix * vec4( position, 1.0 );"," gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );","}"].join("\n"),fragmentShader:["uniform vec3 color;","uniform sampler2D tDiffuse;","varying vec4 vUv;","float blendOverlay( float base, float blend ) {"," return( base < 0.5 ? ( 2.0 * base * blend ) : ( 1.0 - 2.0 * ( 1.0 - base ) * ( 1.0 - blend ) ) );","}","vec3 blendOverlay( vec3 base, vec3 blend ) {"," return vec3( blendOverlay( base.r, blend.r ), blendOverlay( base.g, blend.g ), blendOverlay( base.b, blend.b ) );","}","void main() {"," vec4 base = texture2DProj( tDiffuse, vUv );"," gl_FragColor = vec4( blendOverlay( base.rgb, color ), 1.0 );","}"].join("\n")};var ov=function(A){return he.call(this),this.points=A,this.handlePoints=[],this.minX=0,this.minY=0,this.maxX=0,this.maxY=0,this.invalid=!1,this._createPlaneGeometry(),this};(ov.prototype=Object.create(he.prototype)).constructor=he,ov.prototype._createPlaneGeometry=function(){if(this._RemoveDuplicatePoints(this.points))this.invalid=!0;else{if(3>this.handlePoints.length)return Bh.warn("Failed to create plane, the number of the points must be more than three."),void(this.invalid=!0);if(3===this.handlePoints.length&&0===this._area(this.handlePoints[0],this.handlePoints[1],this.handlePoints[2]))return Bh.warn("Failed to create plane, points are collinear."),void(this.invalid=!0);if(this._checkIntersect())return Bh.warn("Failed to create plane, the plane border is self-intersecting."),void(this.invalid=!0);this.handlePoints.push(new s(this.points[0].x,this.points[0].y));var A=new ar(new Ba(this.handlePoints)),e=new Float32Array(this._updateUv(A));A.setAttribute("uv",new YA(e,2)),this.attributes=A.attributes,this.groups=A.groups,this.index=A.index}},ov.prototype._updateUv=function(A){for(var e=[],t=A.attributes.position.array,i=0;t.length>i;i+=3){var o=(t[i+1]-this.minY)/(this.maxY-this.minY);e.push((t[i]-this.minX)/(this.maxX-this.minX)),e.push(o)}return e},ov.prototype._RemoveDuplicatePoints=function(A){var e=new s(A[0].x,A[0].y);this.handlePoints.push(e),this.minX=e.x,this.maxX=e.x,this.minY=e.y,this.maxY=e.y;for(var t=1;A.length>t;t+=1){var i=!1;if(void 0===A[t].x||void 0===A[t].y)return Bh.log("Failed to create plane, the format of plane is not right, please follow [{x:,y:},...]"),!0;for(var o=0;this.handlePoints.length>o;o+=1)if(A[t].x===this.handlePoints[o].x&&A[t].y===this.handlePoints[o].y){i=!0;break}if(!1===i){e=new s(A[t].x,A[t].y);this.handlePoints.push(e),this.minX>e.x&&(this.minX=e.x),this.minY>e.y&&(this.minY=e.y),e.x>this.maxX&&(this.maxX=e.x),e.y>this.maxY&&(this.maxY=e.y)}}return!1},ov.prototype._checkIntersect=function(){for(var A=null,e=null,t=this.handlePoints.length,i=0;t>i;i+=1){A=this.handlePoints[i],e=this.handlePoints[i===t-1?0:i+1];for(var o=i+2;t>o;o+=1)if((0!==i||o!==t-1)&&this._intersectSegments(A,e,this.handlePoints[o],this.handlePoints[o===t-1?0:o+1]))return!0}return!1},ov.prototype._area=function(A,e,t){return(e.x-A.x)*(t.y-A.y)-(t.x-A.x)*(e.y-A.y)},ov.prototype._collinearIntersectCheck=function(A,e,t,i){return(Math.min(A.x,e.x)>t.x||t.x>Math.max(A.x,e.x)||Math.min(A.y,e.y)>t.y||t.y>Math.max(A.y,e.y))&&(Math.min(A.x,e.x)>i.x||i.x>Math.max(A.x,e.x)||Math.min(A.y,e.y)>i.y||i.y>Math.max(A.y,e.y))},ov.prototype._intersectSegments=function(A,e,t,i){var o=this._area(A,e,t)*this._area(A,e,i),n=this._area(t,i,A)*this._area(t,i,e);return 0>=o&&(0>=n&&(0!==o||0!==n||!this._collinearIntersectCheck(A,e,t,i)))};var nv="data:image/jpeg;base64,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",rv="data:image/jpeg;base64,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",av=function A(e,t){Ue.call(this,e),this.type="Water";var i=this,o=t||{},n=void 0!==o.color?o.color:new p(1,1,1,1),r=o.textureWidth||512,a=o.textureHeight||512,l=o.clipBias||0,c=o.flowDirection||new s(1,0),h=o.flowSpeed||.03,d=o.reflectivity||1,g=o.scale||1,u=o.shader||A.WaterShader;this.reflectorTexturePosition=o.reflectorTexturePosition,this.refractorTexturePosition=o.refractorTexturePosition;var f=new Aa,m=o.flowMap||void 0,C=o.normalMap0||f.load(nv),y=o.normalMap1||f.load(rv),v=new M,I=new as;if(void 0!==tv)if(void 0!==iv){var E=new tv(e,{textureWidth:r,textureHeight:a,clipBias:l});E.position.copy(this.reflectorTexturePosition),E.updateMatrixWorld(!0);var B=new iv(e,{textureWidth:r,textureHeight:a,clipBias:l});B.position.copy(this.refractorTexturePosition),B.updateMatrixWorld(!0),this.material=new Pe({uniforms:Ge.merge([u.uniforms]),vertexShader:u.vertexShader,fragmentShader:u.fragmentShader,transparent:!0}),this.material.clipping=!0,this.material.side=2,void 0!==m?(this.material.defines.USE_FLOWMAP="",this.material.uniforms.tFlowMap={type:"t",value:m}):this.material.uniforms.flowDirection={type:"v2",value:c},C.wrapS=1e3,C.wrapT=1e3,y.wrapS=1e3,y.wrapT=1e3,this.material.uniforms.tReflectionMap.value=E.getRenderTarget().texture,this.material.uniforms.tRefractionMap.value=B.getRenderTarget().texture,this.material.uniforms.tNormalMap0.value=C,this.material.uniforms.tNormalMap1.value=y,this.material.uniforms.color.value=n,this.material.uniforms.reflectivity.value=d,this.material.uniforms.textureMatrix.value=v,this.material.uniforms.config.value.x=0,this.material.uniforms.config.value.y=.075,this.material.uniforms.config.value.z=.075,this.material.uniforms.config.value.w=g,this.onBeforeRender=function(A,e,t){var o,n;!function(A){v.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),v.multiply(A.projectionMatrix),v.multiply(A.matrixWorldInverse),v.multiply(i.matrixWorld)}(t),o=I.getDelta(),(n=i.material.uniforms.config).value.x+=h*o,n.value.y=n.value.x+.075,.15>n.value.x?.15>n.value.y||(n.value.y=n.value.y-.15):(n.value.x=0,n.value.y=.075),i.visible=!1,E.position.equals(this.reflectorTexturePosition)||(E.position.copy(this.reflectorTexturePosition),E.updateMatrixWorld(!0)),B.position.equals(this.refractorTexturePosition)||(B.position.copy(this.refractorTexturePosition),B.updateMatrixWorld(!0)),i.cameraProjectionMatrix||(i.cameraProjectionMatrix=t.projectionMatrix.clone()),t.projectionMatrix.equals(i.cameraProjectionMatrix)||(i.needUpdate=!0),i.waterMatrixWorld||(i.waterMatrixWorld=i.matrixWorld.clone()),i.matrixWorld.equals(i.waterMatrixWorld)||(i.needUpdate=!0),i.needUpdate&&(E.onBeforeRender(A,e,t),B.onBeforeRender(A,e,t),i.needUpdate=!1),i.material.uniforms.tReflectionMap.value=E.getRenderTarget().texture,i.material.uniforms.tRefractionMap.value=B.getRenderTarget().texture,i.visible=!0}}else Bh.error("THREE.Water: Required component THREE.Refractor not found.");else Bh.error("THREE.Water: Required component THREE.Reflector not found.")};(av.prototype=Object.create(Ue.prototype)).constructor=av,av.WaterShader={uniforms:{color:{type:"v4",value:null},reflectivity:{type:"f",value:0},tReflectionMap:{type:"t",value:null},tRefractionMap:{type:"t",value:null},tNormalMap0:{type:"t",value:null},tNormalMap1:{type:"t",value:null},textureMatrix:{type:"m4",value:null},config:{type:"v4",value:new p}},vertexShader:["#include ","uniform mat4 textureMatrix;","varying vec4 vCoord;","varying vec2 vUv;","varying vec3 vToEye;","#include ","void main() {"," vUv = uv;"," vCoord = textureMatrix * vec4( position, 1.0 );"," vec4 worldPosition = modelMatrix * vec4( position, 1.0 );"," vToEye = cameraPosition - worldPosition.xyz;"," vec4 mvPosition = viewMatrix * worldPosition;"," gl_Position = projectionMatrix * mvPosition;"," #include "," #include ","}"].join("\n"),fragmentShader:["#include ","#include ","uniform sampler2D tReflectionMap;","uniform sampler2D tRefractionMap;","uniform sampler2D tNormalMap0;","uniform sampler2D tNormalMap1;","#ifdef USE_FLOWMAP"," uniform sampler2D tFlowMap;","#else"," uniform vec2 flowDirection;","#endif","uniform vec4 color;","uniform float reflectivity;","uniform vec4 config;","#include ","varying vec4 vCoord;","varying vec2 vUv;","varying vec3 vToEye;","void main() {"," #include "," float flowMapOffset0 = config.x;"," float flowMapOffset1 = config.y;"," float halfCycle = config.z;"," float scale = config.w;"," vec3 toEye = normalize( vToEye );"," vec2 flow;"," #ifdef USE_FLOWMAP"," flow = texture2D( tFlowMap, vUv ).rg * 2.0 - 1.0;"," #else"," flow = flowDirection;"," #endif"," flow.x *= - 1.0;"," vec4 normalColor0 = texture2D( tNormalMap0, ( vUv * scale ) + flow * flowMapOffset0 );"," vec4 normalColor1 = texture2D( tNormalMap1, ( vUv * scale ) + flow * flowMapOffset1 );"," float flowLerp = abs( halfCycle - flowMapOffset0 ) / halfCycle;"," vec4 normalColor = mix( normalColor0, normalColor1, flowLerp );"," vec3 normal = normalize( vec3( normalColor.r * 2.0 - 1.0, normalColor.b, normalColor.g * 2.0 - 1.0 ) );"," float theta = max( dot( toEye, normal ), 0.0 );"," float reflectance = reflectivity + ( 1.0 - reflectivity ) * pow( ( 1.0 - theta ), 5.0 );"," vec3 coord = vCoord.xyz / vCoord.w;"," vec2 uv = coord.xy + coord.z * normal.xz * 0.05;"," vec4 reflectColor = texture2D( tReflectionMap, vec2( 1.0 - uv.x, uv.y ) );"," vec4 refractColor = texture2D( tRefractionMap, uv );"," gl_FragColor = color * mix( refractColor, reflectColor, reflectance );"," #include "," #include "," #include ","}"].join("\n")};var sv=function(A){A?(this.boundary=A.boundary,this.color=A.color,this.viewer=A.viewer,this.scale=A.scale,this.xDirection=A.xDirection,this.yDirection=A.yDirection,this.reflectivity=A.reflectivity,A.reflectorTexturePosition?"number"==typeof A.reflectorTexturePosition.x?"number"==typeof A.reflectorTexturePosition.y?"number"==typeof A.reflectorTexturePosition.z?(this.reflectorTexturePosition=(new y).copy(A.reflectorTexturePosition),A.refractorTexturePosition?"number"==typeof A.refractorTexturePosition.x?"number"==typeof A.refractorTexturePosition.y?"number"==typeof A.refractorTexturePosition.z?(this.refractorTexturePosition=(new y).copy(A.refractorTexturePosition),this.viewer&&this.viewer instanceof Gy?(A.geometry||0!==this.boundary.length)&&(this.geometry=A.geometry||new ov(this.boundary),this.water=new av(this.geometry,{color:new p(this.color.r,this.color.g,this.color.b,this.color.a),scale:this.scale,reflectivity:this.reflectivity,flowDirection:new s(this.xDirection,this.yDirection),textureWidth:1024,textureHeight:1024,reflectorTexturePosition:this.reflectorTexturePosition,refractorTexturePosition:this.refractorTexturePosition}),this.height=A.height,this.water.translateZ(this.height),this.water.renderOrder=-1,this.water.disPickable=!0,this.id=uh.createUUID(),this.water.name=this.id,this.water.autoAnimation=!0,this.viewer.addExternalObject(this.id,this.water)):Bh.log("ERROR::viewer must not support.")):Bh.error("缺少参数 reflectorTexturePosition.z"):Bh.error("缺少参数 reflectorTexturePosition.y"):Bh.error("缺少参数 reflectorTexturePosition.x"):Bh.error("缺少参数 reflectorTexturePosition")):Bh.error("缺少参数 reflectorTexturePosition.z"):Bh.error("缺少参数 reflectorTexturePosition.y"):Bh.error("缺少参数 reflectorTexturePosition.x"):Bh.error("缺少参数 reflectorTexturePosition")):Bh.error("ERROR::waterEffectConfig 不能为空.")};sv.prototype.getBoundary=function(){return this.boundary},sv.prototype.getColor=function(){return this.color},sv.prototype.getScale=function(){return this.scale},sv.prototype.getXDirection=function(){return this.xDirection},sv.prototype.getYDirection=function(){return this.yDirection},sv.prototype.setColor=function(A){A instanceof Xh?(this.color=A,this.water.material.uniforms.color.value.set(this.color.r,this.color.g,this.color.b,this.color.a)):Bh.log("ERROR::color should be instance of EIMMODEL.Color")},sv.prototype.setScale=function(A){this.scale=A,this.water.material.uniforms.config.value.w=A},sv.prototype.setReflectivity=function(A){this.reflectivity=A,this.water.material.uniforms.reflectivity.value=A},sv.prototype.getReflectivity=function(){return this.reflectivity},sv.prototype.getReflectorTexturePosition=function(){return this.reflectorTexturePosition.clone()},sv.prototype.getRefractorTexturePosition=function(){return this.refractorTexturePosition.clone()},sv.prototype.setReflectorTexturePosition=function(A){A?"number"==typeof A.x?"number"==typeof A.y?"number"==typeof A.z?(this.reflectorTexturePosition=new y(A.x,A.y,A.z),this.water.reflectorTexturePosition=this.reflectorTexturePosition):Bh.error("缺少参数 position.z"):Bh.error("缺少参数 position.y"):Bh.error("缺少参数 position.x"):Bh.error("缺少参数 position")},sv.prototype.setRefractorTexturePosition=function(A){A?"number"==typeof A.x?"number"==typeof A.y?"number"==typeof A.z?(this.refractorTexturePosition=new y(A.x,A.y,A.z),this.water.refractorTexturePosition=this.refractorTexturePosition):Bh.error("缺少参数 position.z"):Bh.error("缺少参数 position.y"):Bh.error("缺少参数 position.x"):Bh.error("缺少参数 position")},sv.prototype.setXDirection=function(A){this.xDirection=A,this.water.material.uniforms.flowDirection.value.x=A},sv.prototype.setYDirection=function(A){this.yDirection=A,this.water.material.uniforms.flowDirection.value.y=A},sv.prototype.remove=function(){this.viewer.removeExternalObjectByName(this.id)},sv.prototype.setHeight=function(A){this.height=A,this.water.translateZ(A),this.water.updateMatrixWorld(!0)},sv.prototype.getHeight=function(){return this.height},sv.prototype.setGeometry=function(A){A.isGeometry||A.isBufferGeometry?(this.geometry=A,this.water.geometry=A):Bh.log("ERROR::geometry type not support")},sv.prototype.getGeometry=function(){return this.geometry},sv.prototype.getWaterObject=function(){return this.water};var lv=Symbol("_flowing"),cv=function(){function A(e){cc(this,A),this.viewer=e.viewer3D;var t=e.opt;this.arrowParameters=t,this.arrowParameters.speed=this.arrowParameters.speed||5,this.arrowParameters.spacing=this.arrowParameters.spacing||100,this.arrowArray=[],this.pathNumb=0,this.totalLength=0,this.path=[],!0===t.customizeMesh?this.geometricModelLength=t.meshLength:t.arrowShape?(t.arrowShape.rectangleLength=t.arrowShape.rectangleLength||500,t.arrowShape.triangleBottomHeight=t.arrowShape.triangleBottomHeight||260,this.geometricModelLength=t.arrowShape.rectangleLength+t.arrowShape.triangleBottomHeight?t.arrowShape.triangleBottomHeight:260):this.geometricModelLength=760,this.intervalLength=this.geometricModelLength+t.spacing,this.materialObject={},this.materialsInit=this.arrowParameters.materialsInit||"default",this.materialsUpdate=this.arrowParameters.materialsUpdate||"fixed",this.isFlowing=!1,t.callback&&(t.callback.enter&&(this.callbackEnter=t.callback.enter),t.callback.out&&(this.callbackOut=t.callback.out)),this.meshGroupId=(new Date).getTime(),this.meshGroup?this.meshGroup.children=[]:this.meshGroup=new Xi}return dc(A,[{key:"calculationPathOffset",value:function(){for(var A=this.path,e=0;A.length>e;e+=1){var t=(new y).copy(A[e].startingPoint),i=new f,o=new f,n=new y(1,1,1);if(A[e].offset){var r=(new y).copy(A[e].offset.pathDepthAxis).applyQuaternion(i);t.add(r.multiplyScalar(A[e].offset.depth)),o.setFromAxisAngle(A[e].startPoint2EndPointAxis,A[e].angle),i.premultiply(o),o.setFromAxisAngle(A[e].vectorNormalize,A[e].offset.angle),i.premultiply(o)}else o.setFromAxisAngle(A[e].startPoint2EndPointAxis,A[e].angle),i.premultiply(o);A[e].rotationComponent={},A[e].rotationComponent.position=t,A[e].rotationComponent.quaternion=i,A[e].rotationComponent.scale=n}}},{key:"translationPath",value:function(){var A=new y(1,0,0),e=this.arrowParameters.points,t=e.length-1,i=[];this.totalLength=0;for(var o=0;t>o;o+=1){var n={};if(n.startingPoint=new y(e[o].x,e[o].y,e[o].z),n.endingPoint=new y(e[o+1].x,e[o+1].y,e[o+1].z),n.length=n.startingPoint.distanceTo(n.endingPoint),n.vector=(new y).subVectors(n.endingPoint,n.startingPoint),n.vectorNormalize=(new y).subVectors(n.endingPoint,n.startingPoint).normalize(),n.startPoint2EndPointAxis=(new y).crossVectors(A,n.vectorNormalize).normalize(),n.numb=o,n.angle=A.angleTo(n.vectorNormalize),this.arrowParameters.offset&&this.arrowParameters.offset[o+1]){var r={},a=this.arrowParameters.offset[o+1],s=a.depth,l=a.angle,c=void 0===l?0:l;r.depth=void 0===s?0:s,r.angle=Math.PI/180*c,r.pathDepthAxis=new y(0,1,0).applyAxisAngle(n.startPoint2EndPointAxis,n.angle),r.pathDepthAxis.applyAxisAngle(n.vectorNormalize,r.angle).normalize(),n.offset=r}this.totalLength+=n.length,i.push(n)}this.path=i,this.pathNumb=this.path.length}},{key:"calculationArrowAmount",value:function(){var A=this.arrowParameters,e=0;if(A.createMode&&"number"===A.createMode&&A.arrowAmount&&A.arrowAmount>0)if(A.intervalMode&&"strict"===A.intervalMode){if(e=Math.floor(this.totalLength/this.intervalLength),A.arrowAmount>e)return{code:"001",message:"Too many arrows,over the length of the path"};this.arrowAmount=A.arrowAmount,this.CreateMode="number",this.IntervalMode="strict"}else{if(e=Math.floor(this.totalLength/this.geometricModelLength),A.arrowAmount>e)return{code:"001",message:"Too many arrows,over the length of the path"};this.arrowAmount=A.arrowAmount,this.CreateMode="number";var t=Math.floor(100*(this.totalLength-this.intervalLength*A.arrowAmount)/A.arrowAmount)/100;this.intervalLength+=t,this.IntervalMode="free"}else{if(A.createMode&&"number"===A.createMode&&A.arrowAmount&&1>A.arrowAmount)return{code:"002",message:"the number is error"};if(e=Math.floor(this.totalLength/this.intervalLength),A.intervalMode&&"strict"===A.intervalMode)this.IntervalMode="strict";else{var i=Math.floor(100*(this.totalLength%this.intervalLength)/e)/100;this.intervalLength+=i,this.IntervalMode="free"}this.arrowAmount=e,this.CreateMode="space"}}},{key:"createArrowArray",value:function(){var A=this.arrowAmount;if(!0===this.arrowParameters.customizeMesh)for(var e=0;A>e;e+=1){var t=this.arrowParameters.mesh.clone();t.material=this.materialObject.default,this.arrowArray.push(t),this.meshGroup.add(t)}else for(var i=this.arrowParameters.arrowShape,o=void 0===i?{}:i,n=o.triangleBottomLength||400,r=o.triangleBottomHeight||260,a=o.rectangleWidth||180,s=o.rectangleLength||500,l=o.arrowHeight||80,c=new Float32Array([r+s,l,0,s,l,n/2,s,l,-n/2,r+s,0,0,s,0,n/2,s,0,-n/2,s,l,-a/2,s,l,a/2,0,l,a/2,0,l,-a/2,s,0,-a/2,s,0,a/2,0,0,a/2,0,0,-a/2]),h=[2,1,0,3,4,5,0,1,4,0,4,3,1,2,4,4,2,5,5,2,0,3,5,0,8,7,6,9,8,6,13,9,6,10,13,6,12,8,9,9,13,12,12,13,10,12,10,11,7,8,12,11,7,12],d=0;A>d;d+=1){var p=this.createArrowMesh(c,h);p.arrowID=d,this.arrowArray.push(p),this.meshGroup.add(p)}}},{key:"createArrowMesh",value:function(A,e){var t=new he;t.setIndex(e);var i=new YA(A,3);return t.attributes.position=i,new Ue(t,this.materialObject.default)}},{key:"createMaterialArray",value:function(){for(var A=this.arrowParameters.colors,e=this.arrowParameters.materials,t=this.path.length,i=1;t>=i;i+=1)e&&e[i]?this.materialObject[i]=e[i]:A&&A[i]&&(this.materialObject[i]=new jA({color:A[i]}));e&&e.default?this.materialObject.default=e.default:A&&A.default?this.materialObject.default=new jA({color:A.default}):(this.materialObject.default=new jA({color:10606038}),this.materialObject.default.transparent=!0,this.materialObject.default.opacity=.8)}},{key:"initPostition",value:function(){var A=this.arrowArray,e=this.path,t=A.length,i=0,o=this.intervalLength,n=0,r=new f;if(this.arrowParameters.enterSceMod&&"progressive"===this.arrowParameters.enterSceMod)for(var a=0;t>a;a+=1){var s=A[a];s.quaternion.copy(r),s.position.x=e[i].startingPoint.x,s.position.y=e[i].startingPoint.y,s.position.z=e[i].startingPoint.z,s.pathOrder=i,e[i].offset?(s.translateOnAxis(e[i].vectorNormalize,-o*n),s.translateOnAxis(e[i].offset.pathDepthAxis,e[i].offset.depth),s.rotateOnWorldAxis(e[i].startPoint2EndPointAxis,e[i].angle),s.rotateOnWorldAxis(e[i].vectorNormalize,e[i].offset.angle)):(s.translateOnAxis(e[i].vectorNormalize,-o*n),s.rotateOnWorldAxis(e[i].startPoint2EndPointAxis,e[i].angle)),s.visible=!1,s.userData.BosArrowExt={},s.userData.BosArrowExt.enterState="unenter","path"===this.materialsInit&&this.materialObject[i+1]&&(s.material=this.materialObject[i+1]),s.updateMatrixWorld(),n+=1}else for(var l=0,c=0;t>c;c+=1){var h=A[c];h.quaternion.copy(r);var d=e[i];d.offset?(h.position.x=d.startingPoint.x,h.position.y=d.startingPoint.y,h.position.z=d.startingPoint.z,h.translateOnAxis(d.vectorNormalize,o*n+l),h.translateOnAxis(d.offset.pathDepthAxis,d.offset.depth),h.rotateOnWorldAxis(d.startPoint2EndPointAxis,d.angle),h.rotateOnWorldAxis(d.vectorNormalize,d.offset.angle)):(h.position.x=d.startingPoint.x,h.position.y=d.startingPoint.y,h.position.z=d.startingPoint.z,h.translateOnAxis(d.vectorNormalize,o*n+l),h.rotateOnWorldAxis(d.startPoint2EndPointAxis,d.angle)),h.pathOrder=i,"path"===this.materialsInit&&this.materialObject[i+1]&&(h.material=this.materialObject[i+1]),d.length-l>o*(n+1)||(l=o*(n+1)-d.length+l,i+=1,n=-1),h.updateMatrixWorld(),n+=1}this.viewer.removeExternalObjectByName(this.meshGroupId),this.viewer.addExternalObject(this.meshGroupId,this.meshGroup)}},{key:"setSpeed",value:function(A){this.isFlowing?(this.stopFlow(),this.arrowParameters.speed=A,this.startFlow()):this.arrowParameters.speed=A}},{key:"init",value:function(){this.translationPath(),this.calculationPathOffset(),this.calculationArrowAmount(),this.createMaterialArray(),this.createArrowArray(),this.initPostition()}},{key:"updatePosition",value:function(){var A=this,e=this.path,t=this.arrowParameters.speed;this.arrowArray.forEach((function(i){if(!i.lockPosUpDate||!0!==i.lockPosUpDate){var o=0;if(i.userData.BosArrowExt&&i.userData.BosArrowExt.enterState&&"unenter"===i.userData.BosArrowExt.enterState){var n=i.position.distanceTo(e[0].endingPoint);return e[0].length>n&&("fixed"!==A.materialsUpdate&&A.materialObject[0]?i.material=A.materialObject[0]:"fixed"===A.materialsUpdate||A.materialObject[0]||(i.material=A.materialObject.default),A.callbackEnter&&"function"==typeof A.callbackEnter&&A.callbackEnter(i,e[0]),i.visible=!0,i.userData.BosArrowExt.enterState="enter","fixed"!==A.materialsUpdate&&A.materialObject[1]?i.material=A.materialObject[1]:"fixed"===A.materialsUpdate||A.materialObject[1]||(i.material=A.materialObject.default)),i.translateX(t+o),void i.updateMatrixWorld()}var r=i.position.distanceTo(e[i.pathOrder].startingPoint);r>e[i.pathOrder].length-A.geometricModelLength&&!1!==i.visible&&(i.visible=!1,A.callbackOut&&"function"==typeof A.callbackOut&&A.callbackOut(i,e[i.pathOrder])),!1===i.visible&&(i.pathOrder+1===A.pathNumb?e[i.pathOrder].length>r||(o=r-e[i.pathOrder].length,i.pathOrder=0,i.position.copy(e[i.pathOrder].rotationComponent.position),i.scale.copy(e[i.pathOrder].rotationComponent.scale),i.setRotationFromQuaternion(e[i.pathOrder].rotationComponent.quaternion),"fixed"!==A.materialsUpdate&&A.materialObject[1]?i.material=A.materialObject[1]:"fixed"===A.materialsUpdate||A.materialObject[1]||(i.material=A.materialObject.default),A.callbackEnter&&"function"==typeof A.callbackEnter&&A.callbackEnter(i,e[i.pathOrder]),i.visible=!0):e[i.pathOrder].length>r||(o=r-e[i.pathOrder].length,i.pathOrder+=1,i.position.copy(e[i.pathOrder].rotationComponent.position),i.scale.copy(e[i.pathOrder].rotationComponent.scale),i.setRotationFromQuaternion(e[i.pathOrder].rotationComponent.quaternion),"fixed"!==A.materialsUpdate&&A.materialObject[i.pathOrder+1]?i.material=A.materialObject[i.pathOrder+1]:"fixed"===A.materialsUpdate||A.materialObject[i.pathOrder+1]||(i.material=A.materialObject.default),i.visible=!0,A.callbackEnter&&"function"==typeof A.callbackEnter&&A.callbackEnter(i,e[i.pathOrder]))),i.translateX(t+o),i.updateMatrixWorld()}})),this.viewer.render()}},{key:lv,value:function(){this.requestAnimationFrameID=requestAnimationFrame(this[lv].bind(this)),this.updatePosition()}},{key:"startFlow",value:function(){if(this.isFlowing)return{code:"003",message:"Do not open repeatedly"};this.isFlowing=!0,this.requestAnimationFrameID=requestAnimationFrame(this[lv].bind(this))}},{key:"stopFlow",value:function(){cancelAnimationFrame(this.requestAnimationFrameID),this.isFlowing=!1}},{key:"hide",value:function(){this.viewer.removeExternalObjectByName(this.meshGroupId)}},{key:"show",value:function(){this.hide(),this.viewer.addExternalObject(this.meshGroupId,this.meshGroup)}},{key:"clear",value:function(){this.hide(),this.meshGroup.children=[],this.arrowArray=[]}}]),A}();function hv(A,e){return A===e||A!=A&&e!=e}function dv(A,e){for(var t=A.length;t--;)if(hv(A[t][0],e))return t;return-1}var pv=Array.prototype.splice;function gv(A){var e=-1,t=null==A?0:A.length;for(this.clear();++e=0&&(t==e.length-1?e.pop():pv.call(e,t,1),--this.size,!0)},gv.prototype.get=function(A){var e=this.__data__,t=dv(e,A);return 0>t?void 0:e[t][1]},gv.prototype.has=function(A){return dv(this.__data__,A)>-1},gv.prototype.set=function(A,e){var t=this.__data__,i=dv(t,A);return 0>i?(++this.size,t.push([A,e])):t[i][1]=e,this};var uv="object"==typeof global&&global&&global.Object===Object&&global,fv="object"==typeof self&&self&&self.Object===Object&&self,mv=uv||fv||Function("return this")(),Cv=mv.Symbol,yv=Object.prototype,vv=yv.hasOwnProperty,Iv=yv.toString,Ev=Cv?Cv.toStringTag:void 0;var Bv=Object.prototype.toString;var xv=Cv?Cv.toStringTag:void 0;function Sv(A){return null==A?void 0===A?"[object Undefined]":"[object Null]":xv&&xv in Object(A)?function(A){var e=vv.call(A,Ev),t=A[Ev];try{A[Ev]=void 0;var i=!0}catch(A){}var o=Iv.call(A);return i&&(e?A[Ev]=t:delete A[Ev]),o}(A):function(A){return Bv.call(A)}(A)}function wv(A){var e=typeof A;return null!=A&&("object"==e||"function"==e)}function Mv(A){if(!wv(A))return!1;var e=Sv(A);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e}var bv,Uv=mv["__core-js_shared__"],Fv=(bv=/[^.]+$/.exec(Uv&&Uv.keys&&Uv.keys.IE_PROTO||""))?"Symbol(src)_1."+bv:"";var Kv=Function.prototype.toString;function Qv(A){if(null!=A){try{return Kv.call(A)}catch(A){}try{return A+""}catch(A){}}return""}var Rv=/^\[object .+?Constructor\]$/,Tv=RegExp("^"+Function.prototype.toString.call(Object.prototype.hasOwnProperty).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function kv(A){return!(!wv(A)||(e=A,Fv&&Fv in e))&&(Mv(A)?Tv:Rv).test(Qv(A));var e}function Dv(A,e){var t=function(A,e){return null==A?void 0:A[e]}(A,e);return kv(t)?t:void 0}var Lv=Dv(mv,"Map"),Nv=Dv(Object,"create");var Ov=Object.prototype.hasOwnProperty;var Vv=Object.prototype.hasOwnProperty;function Gv(A){var e=-1,t=null==A?0:A.length;for(this.clear();++ei.length)return i.push([A,e]),this.size=++t.size,this;t=this.__data__=new qv(i)}return t.set(A,e),this.size=t.size,this};var Hv=function(){try{var A=Dv(Object,"defineProperty");return A({},"",{}),A}catch(A){}}();function Yv(A,e,t){"__proto__"==e&&Hv?Hv(A,e,{configurable:!0,enumerable:!0,value:t,writable:!0}):A[e]=t}var Wv=Object.prototype.hasOwnProperty;function Jv(A,e,t){var i=A[e];Wv.call(A,e)&&hv(i,t)&&(void 0!==t||e in A)||Yv(A,e,t)}function zv(A,e,t,i){var o=!t;t||(t={});for(var n=-1,r=e.length;++n-1&&A%1==0&&e>A}function lI(A){return"number"==typeof A&&A>-1&&A%1==0&&9007199254740991>=A}var cI={};function hI(A){return function(e){return A(e)}}cI["[object Float32Array]"]=cI["[object Float64Array]"]=cI["[object Int8Array]"]=cI["[object Int16Array]"]=cI["[object Int32Array]"]=cI["[object Uint8Array]"]=cI["[object Uint8ClampedArray]"]=cI["[object Uint16Array]"]=cI["[object Uint32Array]"]=!0,cI["[object Arguments]"]=cI["[object Array]"]=cI["[object ArrayBuffer]"]=cI["[object Boolean]"]=cI["[object DataView]"]=cI["[object Date]"]=cI["[object Error]"]=cI["[object Function]"]=cI["[object Map]"]=cI["[object Number]"]=cI["[object Object]"]=cI["[object RegExp]"]=cI["[object Set]"]=cI["[object String]"]=cI["[object WeakMap]"]=!1;var dI="object"==typeof A&&A&&!A.nodeType&&A,pI=dI&&"object"==typeof module&&module&&!module.nodeType&&module,gI=pI&&pI.exports===dI&&uv.process,uI=function(){try{var A=pI&&pI.require&&pI.require("util").types;return A||gI&&gI.binding&&gI.binding("util")}catch(A){}}(),fI=uI&&uI.isTypedArray,mI=fI?hI(fI):function(A){return Zv(A)&&lI(A.length)&&!!cI[Sv(A)]},CI=Object.prototype.hasOwnProperty;function yI(A,e){var t=tI(A),i=!t&&eI(A),o=!t&&!i&&rI(A),n=!t&&!i&&!o&&mI(A),r=t||i||o||n,a=r?function(A,e){for(var t=-1,i=Array(A);++ta?(e?this.setDataMax(h):this._max=h,!1):s>h?(e?this.setDataMin(h):this._min=h,!1):{x:i,y:o,value:l,radius:c,min:s,max:a}},_unOrganizeData:function(){var A=[],e=this._data,t=this._radi;for(var i in e)for(var o in e[i])A.push({x:i,y:o,radius:t[i][o],value:e[i][o]});return{min:this._min,max:this._max,data:A}},_onExtremaChange:function(){this._coordinator.emit("extremachange",{min:this._min,max:this._max})},addData:function(){if(arguments[0].length>0)for(var A=arguments[0],e=A.length;e--;)this.addData.call(this,A[e]);else{var t=this._organiseData(arguments[0],!0);t&&(0===this._data.length&&(this._min=this._max=t.value),this._coordinator.emit("renderpartial",{min:this._min,max:this._max,data:[t]}))}return this},setData:function(A){var e=A.data,t=e.length;this._data=[],this._radi=[];for(var i=0;t>i;i++)this._organiseData(e[i],!1);return this._max=A.max,this._min=A.min||0,this._onExtremaChange(),this._coordinator.emit("renderall",this._getInternalData()),this},removeData:function(){},setDataMax:function(A){return this._max=A,this._onExtremaChange(),this._coordinator.emit("renderall",this._getInternalData()),this},setDataMin:function(A){return this._min=A,this._onExtremaChange(),this._coordinator.emit("renderall",this._getInternalData()),this},setCoordinator:function(A){this._coordinator=A},_getInternalData:function(){return{max:this._max,min:this._min,data:this._data,radi:this._radi}},getData:function(){return this._unOrganizeData()}},A}(),i=function(){var A=function(A){var e=A.gradient||A.defaultGradient,t=document.createElement("canvas"),i=t.getContext("2d");t.width=256,t.height=1;var o=i.createLinearGradient(0,0,256,1);for(var n in e)o.addColorStop(n,e[n]);return i.fillStyle=o,i.fillRect(0,0,256,1),i.getImageData(0,0,256,1).data},e=function(A,e){var t=document.createElement("canvas"),i=t.getContext("2d"),o=A,n=A;if(t.width=t.height=2*A,1==e)i.beginPath(),i.arc(o,n,A,0,2*Math.PI,!1),i.fillStyle="rgba(0,0,0,1)",i.fill();else{var r=i.createRadialGradient(o,n,A*e,o,n,A);r.addColorStop(0,"rgba(0,0,0,1)"),r.addColorStop(1,"rgba(0,0,0,0)"),i.fillStyle=r,i.fillRect(0,0,2*A,2*A)}return t};function t(e){var t=e.container,i=this.shadowCanvas=document.createElement("canvas"),o=this.canvas=e.canvas||document.createElement("canvas"),n=(this._renderBoundaries=[1e4,1e4,0,0],getComputedStyle(e.container)||{});o.className="heatmap-canvas",this._width=o.width=i.width=e.width||+n.width.replace(/px/,""),this._height=o.height=i.height=e.height||+n.height.replace(/px/,""),this.shadowCtx=i.getContext("2d"),this.ctx=o.getContext("2d"),o.style.cssText=i.style.cssText="position:absolute;left:0;top:0;",t.style.position="relative",t.appendChild(o),this._palette=A(e),this._templates={},this._setStyles(e)}return t.prototype={renderPartial:function(A){A.data.length>0&&(this._drawAlpha(A),this._colorize())},renderAll:function(A){this._clear(),A.data.length>0&&(this._drawAlpha(function(A){for(var e=[],t=A.min,i=A.max,o=A.radi,n=(A=A.data,Object.keys(A)),r=n.length;r--;)for(var a=n[r],s=Object.keys(A[a]),l=s.length;l--;){var c=s[l];e.push({x:a,y:c,value:A[a][c],radius:o[a][c]})}return{min:t,max:i,data:e}}(A)),this._colorize())},_updateGradient:function(e){this._palette=A(e)},updateConfig:function(A){A.gradient&&this._updateGradient(A),this._setStyles(A)},setDimensions:function(A,e){this._width=A,this._height=e,this.canvas.width=this.shadowCanvas.width=A,this.canvas.height=this.shadowCanvas.height=e},_clear:function(){this.shadowCtx.clearRect(0,0,this._width,this._height),this.ctx.clearRect(0,0,this._width,this._height)},_setStyles:function(A){this._blur=0==A.blur?0:A.blur||A.defaultBlur,A.backgroundColor&&(this.canvas.style.backgroundColor=A.backgroundColor),this._width=this.canvas.width=this.shadowCanvas.width=A.width||this._width,this._height=this.canvas.height=this.shadowCanvas.height=A.height||this._height,this._opacity=255*(A.opacity||0),this._maxOpacity=255*(A.maxOpacity||A.defaultMaxOpacity),this._minOpacity=255*(A.minOpacity||A.defaultMinOpacity),this._useGradientOpacity=!!A.useGradientOpacity},_drawAlpha:function(A){for(var t=this._min=A.min,i=this._max=A.max,o=(A=A.data||[]).length,n=1-this._blur;o--;){var r,a=A[o],s=a.x,l=a.y,c=a.radius,h=Math.min(a.value,i),d=s-c,p=l-c,g=this.shadowCtx;this._templates[c]?r=this._templates[c]:this._templates[c]=r=e(c,n);var u=(h-t)/(i-t);g.globalAlpha=.01>u?.01:u,g.drawImage(r,d,p),this._renderBoundaries[0]>d&&(this._renderBoundaries[0]=d),this._renderBoundaries[1]>p&&(this._renderBoundaries[1]=p),d+2*c>this._renderBoundaries[2]&&(this._renderBoundaries[2]=d+2*c),p+2*c>this._renderBoundaries[3]&&(this._renderBoundaries[3]=p+2*c)}},_colorize:function(){var A=this._renderBoundaries[0],e=this._renderBoundaries[1],t=this._renderBoundaries[2]-A,i=this._renderBoundaries[3]-e,o=this._width,n=this._height,r=this._opacity,a=this._maxOpacity,s=this._minOpacity,l=this._useGradientOpacity;0>A&&(A=0),0>e&&(e=0),A+t>o&&(t=o-A),e+i>n&&(i=n-e);for(var c=this.shadowCtx.getImageData(A,e,t,i),h=c.data,d=h.length,p=this._palette,g=3;d>g;g+=4){var u,f=h[g],m=4*f;if(m)u=r>0?r:a>f?s>f?s:f:a,h[g-3]=p[m],h[g-2]=p[m+1],h[g-1]=p[m+2],h[g]=l?p[m+3]:u}this.shadowCtx.putImageData(c,A,e),this.ctx.putImageData(c,A,e),this._renderBoundaries=[1e3,1e3,0,0]},getValueAt:function(A){var e=this.shadowCtx.getImageData(A.x,A.y,1,1).data[3];return Math.abs(this._max-this._min)*(e/255)>>0},getDataURL:function(){return this.canvas.toDataURL()}},t}(),o=(A=!1,"canvas2d"===e.defaultRenderer&&(A=i),A),n=function(){for(var A={},e=arguments.length,t=0;e>t;t++){var i=arguments[t];for(var o in i)A[o]=i[o]}return A},r=function(){var A=function(){function A(){this.cStore={}}return A.prototype={on:function(A,e,t){var i=this.cStore;i[A]||(i[A]=[]),i[A].push((function(A){return e.call(t,A)}))},emit:function(A,e){var t=this.cStore;if(t[A])for(var i=t[A].length,o=0;i>o;o++){(0,t[A][o])(e)}}},A}(),i=function(A){var e=A._renderer,t=A._coordinator,i=A._store;t.on("renderpartial",e.renderPartial,e),t.on("renderall",e.renderAll,e),t.on("extremachange",(function(e){A._config.onExtremaChange&&A._config.onExtremaChange({min:e.min,max:e.max,gradient:A._config.gradient||A._config.defaultGradient})})),i.setCoordinator(t)};function r(){var r=this._config=n(e,arguments[0]||{});if(this._coordinator=new A,r.plugin){var a=r.plugin;if(!e.plugins[a])throw new Error("Plugin '"+a+"' not found. Maybe it was not registered.");var s=e.plugins[a];this._renderer=new s.renderer(r),this._store=new s.store(r)}else this._renderer=new o(r),this._store=new t(r);i(this)}return r.prototype={addData:function(){return this._store.addData.apply(this._store,arguments),this},removeData:function(){return this._store.removeData&&this._store.removeData.apply(this._store,arguments),this},setData:function(){return this._store.setData.apply(this._store,arguments),this},setDataMax:function(){return this._store.setDataMax.apply(this._store,arguments),this},setDataMin:function(){return this._store.setDataMin.apply(this._store,arguments),this},configure:function(A){return this._config=n(this._config,A),this._renderer.updateConfig(this._config),this._coordinator.emit("renderall",this._store._getInternalData()),this},repaint:function(){return this._coordinator.emit("renderall",this._store._getInternalData()),this},getData:function(){return this._store.getData()},getDataURL:function(){return this._renderer.getDataURL()},getValueAt:function(A){return this._store.getValueAt?this._store.getValueAt(A):this._renderer.getValueAt?this._renderer.getValueAt(A):null}},r}();return{create:function(A){return new r(A)},register:function(A,t){e.plugins[A]=t}}}(),CE=function(){function A(e){cc(this,A),this.viewer=e.viewer3D,this.id=e.id,this.boundary=[],this.quaternion=new f,this.xMin=1/0,this.yMax=-1/0,this.zoomRate=.05}return dc(A,[{key:"createInstance",value:function(A,e){var t=document.createElement("div");t.id="heatmap-"+this.id||(new Date).getTime(),t.style.width="10px",t.style.height="10px",t.style.position="absolute",t.style.top="0",t.style.left="0",t.style.zIndex="-10",t.style.overflow="scroll";var i=document.createElement("div");i.style.width=A+"px",i.style.height=e+"px",t.appendChild(i),this.viewer.viewportDiv.appendChild(t),this.container=t,this.heatmap=mE.create({container:i})}},{key:"getHeatmap",value:function(){return this.heatmap}},{key:"isPlane",value:function(A){if(3>A.length)return!1;if(3===A.length)return!0;for(var e=!0,t=(new y).subVectors(A[0],A[1]),i=(new y).subVectors(A[1],A[2]),o=t.cross(i).normalize(),n=3;A.length>n;n++){var r=(new y).subVectors(A[n-1],A[n]).cross(i).normalize(),a=.001;if(Math.abs(Math.abs(o.x)-Math.abs(r.x))>a||Math.abs(Math.abs(o.y)-Math.abs(r.y))>a||Math.abs(Math.abs(o.z)-Math.abs(r.z))>a){e=!1;break}}return e}},{key:"addHeatmap",value:function(A,e){var t=fE(e.boundary);if(e.data.data.forEach((function(A){t.push(A.point)})),this.isPlane(t)){this.boundary=fE(e.boundary);var i=new f,o=(new y).subVectors(e.boundary[1],e.boundary[0]).cross((new y).subVectors(e.boundary[2],e.boundary[1]));i.setFromUnitVectors(o.normalize(),new y(0,0,1));var n=fE(e.boundary).map((function(A){return A.applyQuaternion(i)}));this.quaternion=i.clone();var r=1/0,a=-1/0,s=1/0,l=-1/0;n.forEach((function(A){r>A.x&&(r=A.x),A.x>a&&(a=A.x),s>A.y&&(s=A.y),A.y>l&&(l=A.y)}));var c=a-r,h=l-s;this.xMin=r,this.yMax=l;var d=e.quality||.05;this.zoomRate=d,this.createInstance(Math.round(c*d),Math.round(h*d));var p=e.data.data.map((function(A){return A.point.applyQuaternion(i)})),g=[];e.data.data.forEach((function(A,e){var t=p[e];g.push({x:Math.round((t.x-r)*d),y:Math.round((l-t.y)*d),value:A.value,radius:(A.radius||1e3)*d})})),this.heatmap.setData({min:e.data.min,max:e.data.max,data:g});var u=new ov(n),m=new jA({map:new en(this.container.querySelector("canvas")),side:2,transparent:!0,polygonOffset:!0,polygonOffsetFactor:-1,polygonOffsetUnits:-1}),C=new Kf(u,m);C.visible=!0;var v=new M;v.elements[14]=n[0].z;var I=new M;return I.makeRotationFromQuaternion(i.inverse()),C.applyMatrix4(I.multiply(v)),this.viewer.addExternalObject(A,C),C.disPickable=!0,this.viewer.disableComponentsSelectionByKey(A),!0}return!1}},{key:"updateHeatmap",value:function(A){var e=this,t=fE(this.boundary);if(A.data.data.forEach((function(A){t.push(A.point)})),this.isPlane(t)){var i=[],o=A.data.data.map((function(A){return new y(A.point.x,A.point.y,A.point.z).applyQuaternion(e.quaternion)})),n=this.zoomRate;return A.data.data.forEach((function(A,t){var r=o[t];i.push({x:Math.round((r.x-e.xMin)*n),y:Math.round((e.yMax-r.y)*n),value:A.value,radius:(A.radius||1e3)*n})})),this.heatmap.setData({min:A.data.min,max:A.data.max,data:i}),this.viewer.getExternalObjectByName(A.id).material.map.needsUpdate=!0,this.viewer.render(),!0}return!1}},{key:"removeHeatmap",value:function(A){this.viewer.removeExternalObjectByName(A),this.viewer.viewportDiv.removeChild(this.container)}}]),A}(),yE=function(A){this.maxEdgeLength=A};yE.prototype.modify=function(A){for(var e,t=[],i=[],o=this.maxEdgeLength*this.maxEdgeLength,n=0,r=A.faceVertexUvs.length;r>n;n++)i[n]=[];for(n=0,r=A.faces.length;r>n;n++){var a=A.faces[n];if(a instanceof GA){var s=a.a,l=a.b,c=a.c,h=A.vertices[s],d=A.vertices[l],p=A.vertices[c],g=h.distanceToSquared(d),u=d.distanceToSquared(p),f=h.distanceToSquared(p);if(g>o||u>o||f>o){var m=A.vertices.length,C=a.clone(),y=a.clone();if(gB;B++)if(A.faceVertexUvs[B].length){var S=A.faceVertexUvs[B][n],w=S[0],M=S[1],b=S[2];if(0===e){(K=w.clone()).lerp(M,.5);var U=[w.clone(),K.clone(),b.clone()],F=[K.clone(),M.clone(),b.clone()]}else if(1===e){(K=M.clone()).lerp(b,.5);U=[w.clone(),M.clone(),K.clone()],F=[K.clone(),b.clone(),w.clone()]}else{var K;(K=w.clone()).lerp(b,.5);U=[w.clone(),M.clone(),K.clone()],F=[K.clone(),M.clone(),b.clone()]}i[B].push(U,F)}}else{t.push(a);for(B=0,x=A.faceVertexUvs.length;x>B;B++)i[B].push(A.faceVertexUvs[B][n])}}}A.faces=t,A.faceVertexUvs=i};var vE=function(){function A(e){cc(this,A),this.viewer=e.viewer3D,this.id=e.id,this.boundary=[],this.quaternion=new f,this.xMin=1/0,this.yMax=-1/0,this.zoomRate=.05,this._canvasSize=new s,this.detailFactor=.5,this._offsetToNagZ=!1,this._mesh=void 0,this._originalGeo=void 0,this._currentGeo=void 0}return dc(A,[{key:"createInstance",value:function(A,e){var t=document.createElement("div");t.id="heatmap-"+this.id||(new Date).getTime(),t.style.width="10px",t.style.height="10px",t.style.position="absolute",t.style.top="0",t.style.left="0",t.style.zIndex="-10",t.style.overflow="scroll";var i=document.createElement("div");i.style.width=A+"px",i.style.height=e+"px",this._canvas=i,t.appendChild(i),this.viewer.viewportDiv.appendChild(t),this.container=t,this.heatmap=mE.create({container:i}),this._canvasSize.set(A,e)}},{key:"getHeatmap",value:function(){return this.heatmap}},{key:"isPlane",value:function(A){if(3>A.length)return!1;if(3===A.length)return!0;for(var e=!0,t=(new y).subVectors(A[0],A[1]),i=(new y).subVectors(A[1],A[2]),o=t.cross(i).normalize(),n=3;A.length>n;n+=1){var r=(new y).subVectors(A[n-1],A[n]).cross(i).normalize(),a=.001;if(Math.abs(Math.abs(o.x)-Math.abs(r.x))>a||Math.abs(Math.abs(o.y)-Math.abs(r.y))>a||Math.abs(Math.abs(o.z)-Math.abs(r.z))>a){e=!1;break}}return e}},{key:"addHeatmap",value:function(A,e){var t=fE(e.boundary);if(e.data.data.forEach((function(A){t.push(A.point)})),this.isPlane(t)){this.boundary=fE(e.boundary);var i=new f,o=(new y).subVectors(e.boundary[1],e.boundary[0]).cross((new y).subVectors(e.boundary[2],e.boundary[1]));i.setFromUnitVectors(o.normalize(),new y(0,0,1)),2*o.angleTo(new y(0,0,1))>Math.PI&&(this._offsetToNagZ=!0);var n=fE(e.boundary).map((function(A){return A.applyQuaternion(i)}));this.quaternion=i.clone();var r=1/0,a=-1/0,s=1/0,l=-1/0;n.forEach((function(A){r>A.x&&(r=A.x),A.x>a&&(a=A.x),s>A.y&&(s=A.y),A.y>l&&(l=A.y)}));var c=a-r,h=l-s;this.xMin=r,this.yMax=l;var d=e.quality||.05;this.zoomRate=d,this.createInstance(Math.round(c*d),Math.round(h*d));var p=e.data.data.map((function(A){return A.point.applyQuaternion(i)})),g=[];e.data.data.forEach((function(A,e){var t=p[e];g.push({x:Math.round((t.x-r)*d),y:Math.round((l-t.y)*d),value:A.value,radius:(A.radius||1e3)*d})})),this.heatmap.setData({min:e.data.min,max:e.data.max,data:g});var u=new ov(n),m=new De;m.fromBufferGeometry(u),this._originalGeo=m.clone();var C=this._tessellateGeometry(m);u=(new he).fromGeometry(C),this._offsetZ(u);var v=new jA({map:new en(this.container.querySelector("canvas")),transparent:!0,side:2,polygonOffset:!0,polygonOffsetFactor:-1,polygonOffsetUnits:-1,wireframe:!1}),I=new Kf(u,v);I.visible=!0;var E=new M;E.elements[14]=n[0].z;var B=new M;return B.makeRotationFromQuaternion(i.inverse()),I.applyMatrix4(B.multiply(E)),this.viewer.addExternalObject(A,I),I.disPickable=!0,this.viewer.disableComponentsSelectionByKey(A),this._mesh=I,!0}return!1}},{key:"updateHeatmap",value:function(A){var e=this,t=fE(this.boundary);if(A.data.data.forEach((function(A){t.push(A.point)})),this.isPlane(t)){var i=[],o=A.data.data.map((function(A){return new y(A.point.x,A.point.y,A.point.z).applyQuaternion(e.quaternion)})),n=this.zoomRate;A.data.data.forEach((function(A,t){var r=o[t];i.push({x:Math.round((r.x-e.xMin)*n),y:Math.round((e.yMax-r.y)*n),value:A.value,radius:(A.radius||1e3)*n})})),this.heatmap.setData({min:A.data.min,max:A.data.max,data:i});var r=this.viewer.getExternalObjectByName(A.id);if(r)return r.material.map.needsUpdate=!0,this.viewer.render(),!0}return!1}},{key:"removeHeatmap",value:function(A){this.viewer.removeExternalObjectByName(A),this.viewer.viewportDiv.removeChild(this.container)}},{key:"setDetailFactor",value:function(A){if(this.detailFactor!==A&&(this.detailFactor=A,this._originalGeo&&this._mesh)){var e=this._originalGeo.clone(),t=this._tessellateGeometry(e),i=(new he).fromGeometry(t);this._offsetZ(i),this._mesh.geometry=i}}},{key:"_tessellateGeometry",value:function(A){for(var e=new yE(100),t=10+Math.round(10*this.detailFactor),i=0;t>i;i+=1)e.modify(A);return A}},{key:"_easeInOutQuad",value:function(A){return 1-(1-A)*(1-A)}},{key:"_offsetZ",value:function(A){for(var e=A.getAttribute("uv").array,t=A.getAttribute("position").array,i=this.heatmap.getData(),o=0,n=e.length;n>o;o+=2){var r=(this.heatmap.getValueAt({x:e[o]*this._canvasSize.x,y:(1-e[o+1])*this._canvasSize.y})-i.min)/(i.max-i.min);r=this._easeInOutQuad(r),t[o/2*3+2]=1e3*r*(this._offsetToNagZ?-1:1)}A.getAttribute("position").needsUpdate=!0}}]),A}(),IE=function(){function A(e,t){cc(this,A),this.viewer=t,this.maxHeatValue=1/0,this.minHeatValue=-1/0,this._init(e)}return dc(A,[{key:"show",value:function(A){var e=this;function t(A){if(0===A.uniforms.heatmapPoints.value.length)A.fragmentShader="#define HEATMAPPOINTSCOUNT "+e.shaderData.heatmapPoints.length+"\n"+A.fragmentShader,A.vertexShader="#define HEATMAPPOINTSCOUNT "+e.shaderData.heatmapPoints.length+"\n"+A.vertexShader;else{var t="#define HEATMAPPOINTSCOUNT "+A.uniforms.heatmapPoints.value.length;A.fragmentShader=A.fragmentShader.replace(t,"#define HEATMAPPOINTSCOUNT "+e.shaderData.heatmapPoints.length),A.vertexShader=A.vertexShader.replace(t,"#define HEATMAPPOINTSCOUNT "+e.shaderData.heatmapPoints.length)}A.uniforms.heatmapPoints.value=e.shaderData.heatmapPoints,A.uniforms.heatmapTexture.value=e.shaderData.heatmapTexture,A.needsUpdate=!0}if(A){if(!this.viewer.getViewerImpl().getModelByComponentKey(A))return;var i=this.viewer.getViewerImpl().modelManager.getComponent(A);if(i&&i.length>0)for(var o=i[0].mesh.material,n=0,r=o.length;r>n;n+=1)o[n]=o[n].clone(),t(o[n])}else this.shaderData.heatmapPoints&&this.shaderData.heatmapTexture&&(this.viewer.getViewerImpl().getModelManager().traverseModels((function(A){var e=A.materialManager.materials;for(var i in e){t(e[i])}})),this.viewer.syncRender())}},{key:"hide",value:function(){var A=this;this.shaderData.heatmapPoints&&this.shaderData.heatmapTexture&&(this.viewer.getViewerImpl().getModelManager().traverseModels((function(e){var t=e.materialManager.materials;for(var i in t){var o=t[i];if(o.uniforms.heatmapPoints.value.length>0){o.uniforms.heatmapPoints.value=[],o.uniforms.heatmapTexture.value=null;var n="#define HEATMAPPOINTSCOUNT "+A.shaderData.heatmapPoints.length;o.fragmentShader=o.fragmentShader.replace(n,""),o.vertexShader=o.vertexShader.replace(n,""),o.needsUpdate=!0}}})),this.viewer.render())}},{key:"removeHeatmap",value:function(){this.hide(),this.shaderData.heatmapPoints&&delete this.shaderData.heatmapPoints,this.shaderData.heatmapTexture&&delete this.shaderData.heatmapTexture}},{key:"updateHeatmap",value:function(A){var e=A.data;this.maxHeatValue=e.max?e.max:1/0,this.minHeatValue=e.min?e.min:-1/0,this.shaderData.heatmapPoints=this._createHeatmapBuffer(A.data),this.show()}},{key:"_init",value:function(A){var e=A.data;this.maxHeatValue=e.max?e.max:1/0,this.minHeatValue=e.min?e.min:-1/0,this.shaderData={heatmapPoints:this._createHeatmapBuffer(e),heatmapTexture:this._createHeatmapTexture()}}},{key:"_createHeatmapBuffer",value:function(A){if(A.data&&0!==A.data.length){if(this.maxHeatValue===1/0||this.minHeatValue===-1/0)for(var e=0,t=A.data.length;t>e;e+=1){var i=A.data[e];i.value>this.maxHeatValue&&(this.maxHeatValue=i.value),this.minHeatValue>i.value&&(this.minHeatValue=i.value)}for(var o=[],n=0,r=A.data.length;r>n;n+=1){var a=A.data[n],s=Math.max(this.minHeatValue,Math.min(a.value,this.maxHeatValue));o.push(a.point.x,a.point.y,a.point.z,(s-this.minHeatValue)/(this.maxHeatValue-this.minHeatValue),a.radius?a.radius:1e3)}return new Float32Array(o)}}},{key:"_createHeatmapTexture",value:function(){var A=document.createElement("canvas");A.width=256,A.height=1;var e=A.getContext("2d"),t=e.createLinearGradient(0,0,256,1),i={0:"#44f",.1:"#0ff",.2:"#0f0",.4:"#ff0",1:"#f00"};for(var o in i)t.addColorStop(o,i[o]);return e.fillStyle=t,e.fillRect(0,0,256,1),new en(A)}}]),A}(),EE=function(){function A(e,t){cc(this,A),this.heatSpheres=[],this.viewer=t,this.maxHeatValue=1/0,this.minHeatValue=-1/0,this._animating=!1,this._lastAnimateTime=void 0,this._localTime=0,this._duration=2e3,this._init(e)}return dc(A,[{key:"getColorIndexAndValueOfHeatValue",value:function(e){A.colorBoard||(A.colorBoard=this._createColorBoard());var t=(Math.max(this.minHeatValue,Math.min(e,this.maxHeatValue))-this.minHeatValue)/(this.maxHeatValue-this.minHeatValue)*255,i=4*(t=Math.round(t));return{color:new LA(A.colorBoard[i]/255,A.colorBoard[i+1]/255,A.colorBoard[i+2]/255),index:t}}},{key:"updateHeatmap",value:function(A){this.removeHeatmap(),this._init(A),this.startAnimation(this._duration)}},{key:"startAnimation",value:function(A){var e=this;this._animating||(this._animating=!0,A&&(this._duration=A),requestAnimationFrame((function(A){return e._animate(A)})))}},{key:"stopAnimation",value:function(){this._animating=!1,this._lastAnimateTime=void 0,this._localTime=0}},{key:"removeHeatmap",value:function(){var A=this;this.stopAnimation(),this.heatSpheres.forEach((function(e){A.viewer.removeExternalObjectByName(e.uuid)}))}},{key:"_animate",value:function(e){var t=this,i=this._lastAnimateTime?e-this._lastAnimateTime:0;if(!this._lastAnimateTime||i>100){this._localTime+=i/this._duration,1>this._localTime||(this._localTime=0);var o=this._easeOutSine(this._localTime);this.heatSpheres.forEach((function(e){e.scale.set(o,o,o),e.updateMatrixWorld(!0);var i=e.userData._heatColorIndex;i=4*Math.round(i*(1-t._localTime)),e.material.color.setRGB(A.colorBoard[i]/255,A.colorBoard[i+1]/255,A.colorBoard[i+2]/255),e.material.needsUpdate=!0})),this.viewer.render(),this._lastAnimateTime=e}this._animating&&requestAnimationFrame((function(A){return t._animate(A)}))}},{key:"_init",value:function(A){var e=A.data;if(this.maxHeatValue=e.max?e.max:1/0,this.minHeatValue=e.min?e.min:-1/0,this._sphereOpacity=e.alpha?e.alpha:.7,this.maxHeatValue===1/0||this.minHeatValue===-1/0)for(var t=0,i=e.data.length;i>t;t+=1){var o=e.data[t];o.value>this.maxHeatValue&&(this.maxHeatValue=o.value),this.minHeatValue>o.value&&(this.minHeatValue=o.value)}for(var n=0,r=e.data.length;r>n;n+=1)this._addHeatPoint(e.data[n])}},{key:"_addHeatPoint",value:function(A){var e=A,t=e.radius?e.radius:1e3,i=10*Math.log10(t),o=new er(t,i,i),n=this.getColorIndexAndValueOfHeatValue(e.value),r=n.index,a=new Ue(o,new xr({color:n.color,depthTest:!0,transparent:!0,opacity:this._sphereOpacity}));a.position.set(e.point.x,e.point.y,e.point.z),a.updateMatrixWorld(!0),a.userData._heatValue=e.value,a.userData._heatColorIndex=r,a.disPickable=!0,this.viewer.disableComponentsSelectionByKey(a.uuid),this.heatSpheres.push(a),this.viewer.addExternalObject(a.uuid,a)}},{key:"_createColorBoard",value:function(){var A=document.createElement("canvas");A.width=256,A.height=1;var e=A.getContext("2d"),t=e.createLinearGradient(0,0,256,1),i={0:"#44f",.1:"#0ff",.2:"#0f0",.4:"#ff0",1:"#f00"};for(var o in i)t.addColorStop(o,i[o]);return e.fillStyle=t,e.fillRect(0,0,256,1),e.getImageData(0,0,256,1).data}},{key:"_easeOutCubic",value:function(A){return 1-Math.pow(1-A,3)}},{key:"_easeOutSine",value:function(A){return Math.sin(A*Math.PI/2)}},{key:"_easeInCubic",value:function(A){return A*A*A}}]),A}(),BE=function(){function A(e){cc(this,A),this.viewer=e.viewer3D,this.mapCollection={}}return dc(A,[{key:"createHeatmap",value:function(A){var e=((new Date).getTime()*(Math.random()+1)).toString(36).slice(0,8),t=new CE({viewer3D:this.viewer,id:e}),i=fE(A);return i.data.data.forEach((function(A){A.point=new y(A.point.x,A.point.y,A.point.z)})),i.boundary=i.boundary.map((function(A){return new y(A.x,A.y,A.z)})),t.addHeatmap(e,i)?(this.mapCollection[e]=t,{code:"success",id:e}):{code:"error",message:"输入的点不共面"}}},{key:"updateHeatmap",value:function(A){var e=this.mapCollection[A.id];if(e&&e.updateHeatmap)return e.updateHeatmap(A)}},{key:"removeHeatmap",value:function(A){return!!this.mapCollection[A]&&(this.mapCollection[A].removeHeatmap(A),delete this.mapCollection[A],!0)}},{key:"createHeatmap3D",value:function(A){var e=((new Date).getTime()*(Math.random()+1)).toString(36).slice(0,8),t=new vE({viewer3D:this.viewer,id:e}),i=fE(A);return i.data.data.forEach((function(A){A.point=new y(A.point.x,A.point.y,A.point.z)})),i.boundary=i.boundary.map((function(A){return new y(A.x,A.y,A.z)})),t.addHeatmap(e,i)?(this.mapCollection[e]=t,{code:"success",id:e,map:t}):{code:"error",message:"输入的点不共面"}}},{key:"createSphereHeatmap",value:function(A){if(A.data&&A.data.data){var e=((new Date).getTime()*(Math.random()+1)).toString(36).slice(0,8),t=new EE(A,this.viewer);return t.startAnimation(5e3),this.mapCollection[e]=t,{code:"success",id:e,map:t}}return{code:"error",message:"参数错误"}}},{key:"createSphereColorOverrideHeatmap",value:function(A){if(A.data&&A.data.data){if(A.data.data.length>150)return{code:"error",message:"热力源个数不能超过150"};var e=new IE(A,this.viewer),t=((new Date).getTime()*(Math.random()+1)).toString(36).slice(0,8);return this.mapCollection[t]=e,e.show(),{code:"success",id:t,map:e}}return{code:"error",message:"参数错误"}}}]),A}(),xE=function(A,e){Xo.call(this,A,e),this.pointIds=[]};(xE.prototype=Object.create(Xo.prototype)).constructor=xE,xE.prototype.raycast=function(){var A=new M,e=new CA,t=new cA;return function(i,o){var n=this,r=this.geometry,a=this.matrixWorld,s=this.size,l=i.camera||i._camera,c=i.viewportSize.height,h=this.pointIds;function d(e,t){var i=e.clone();return i.applyMatrix4(a),i.project(l),i.y+=t/c,i.unproject(l),i.applyMatrix4(A),i}A.getInverse(a),null===r.boundingSphere&&r.computeBoundingSphere(),t.copy(r.boundingSphere);var p=t.center,g=d(p,s),u=g.distanceToSquared(p);if(t.radius+=u,t.center.copy(g),t.applyMatrix4(a),!1!==i.ray.intersectsSphere(t)){e.copy(i.ray).applyMatrix4(A);var f=new y,m=s;if(r.isBufferGeometry){var C=r.index,v=r.attributes,I=v.position.array,E=!1,B=null;if(v.attrSize&&(E=!0,B=v.attrSize.array),null!==C)for(var x=C.array,S=0,w=x.length;w>S;S+=1){var M=x[S];f.fromArray(I,3*M),E&&(m=B[M]),F(f,m,M)}else{S=0;for(var b=I.length/3;b>S;S+=1)f.fromArray(I,3*S),E&&(m=B[S]),F(f,m,S)}}else{var U=r.vertices;for(S=0,b=U.length;b>S;S+=1)F(U[S],m,S)}}function F(A,t,r){var s=d(A,t),l=s.distanceToSquared(A),c=e.distanceSqToPoint(s);if(l>c){var p=e.closestPointToPoint(s);p.applyMatrix4(a);var g=i.ray.origin.distanceTo(p);if(i.near>g||g>i.far)return;o.push({id:h[r],distance:g,distanceToRay:Math.sqrt(c),point:p.clone(),index:r,face:null,object:n})}}}}(),xE.prototype.setAttributeSize=function(A,e){var t=this.geometry.attributes;t.attrSize&&(t.attrSize.array[A]=e,t.attrSize.needsUpdate=!0)},xE.prototype.getAttributeSize=function(A){var e=this.geometry.attributes,t=this.size;return e.attrSize&&(t=e.attrSize.array[A]),t};var SE=["attribute vec3 customColor;","attribute float customOpacity;","attribute float customSize;","attribute float customAngle;","attribute float customVisible;","varying vec4 vColor;","varying float vAngle;","void main()","{","if ( customVisible > 0.5 )","vColor = vec4( customColor, customOpacity );","else","vColor = vec4(0.0, 0.0, 0.0, 0.0);","vAngle = customAngle;","vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );","gl_PointSize = customSize * ( 3000.0 / length( mvPosition.xyz ) );","gl_Position = projectionMatrix * mvPosition;","}"].join("\n"),wE=["uniform sampler2D texture;","varying vec4 vColor;","varying float vAngle;","void main()","{","gl_FragColor = vColor;","float c = cos(vAngle);","float s = sin(vAngle);","vec2 rotatedUV = vec2(c * (gl_PointCoord.x - 0.5) + s * (gl_PointCoord.y - 0.5) + 0.5,","c * (gl_PointCoord.y - 0.5) - s * (gl_PointCoord.x - 0.5) + 0.5);","vec4 rotatedTexture = texture2D( texture, rotatedUV );","gl_FragColor = gl_FragColor * rotatedTexture;","}"].join("\n");function ME(A,e){this.times=A||[],this.values=e||[]}function bE(){this.position=new y,this.velocity=new y,this.acceleration=new y,this.angle=0,this.angleVelocity=0,this.angleAcceleration=0,this.size=16,this.color=new LA,this.opacity=1,this.age=0,this.alive=0}function UE(){this.positionStyle=1,this.positionBase=new y,this.positionSpread=new y,this.positionRadius=0,this.velocityStyle=1,this.velocityBase=new y,this.velocitySpread=new y,this.speedBase=0,this.speedSpread=0,this.accelerationBase=new y,this.accelerationSpread=new y,this.angleBase=0,this.angleSpread=0,this.angleVelocityBase=0,this.angleVelocitySpread=0,this.angleAccelerationBase=0,this.angleAccelerationSpread=0,this.sizeBase=0,this.sizeSpread=0,this.sizeTween=new ME,this.colorBase=new y(0,1,.5),this.colorSpread=new y(0,0,0),this.colorTween=new ME,this.opacityBase=1,this.opacitySpread=0,this.opacityTween=new ME,this.blendStyle=1,this.particleArray=[],this.particlesPerSecond=100,this.particleDeathAge=1,this.emitterAge=0,this.emitterAlive=!0,this.emitterDeathAge=60,this.particleCount=this.particlesPerSecond*Math.min(this.particleDeathAge,this.emitterDeathAge)}ME.prototype.lerp=function(A){for(var e=0,t=this.times.length;t>e&&A>this.times[e];)e+=1;if(0===e)return this.values[0];if(e===t)return this.values[t-1];var i=(A-this.times[e-1])/(this.times[e]-this.times[e-1]);return this.values[0]instanceof y?this.values[e-1].clone().lerp(this.values[e],i):this.values[e-1]+i*(this.values[e]-this.values[e-1])},bE.prototype.update=function(A){if(this.position.add(this.velocity.clone().multiplyScalar(A)),this.velocity.add(this.acceleration.clone().multiplyScalar(A)),this.angle+=.01745329251*this.angleVelocity*A,this.angleVelocity+=.01745329251*this.angleAcceleration*A,this.age+=A,this.sizeTween.times.length>0&&(this.size=this.sizeTween.lerp(this.age)),this.colorTween.times.length>0){var e=this.colorTween.lerp(this.age);this.color=(new LA).setHSL(e.x,e.y,e.z)}this.opacityTween.times.length>0&&(this.opacity=this.opacityTween.lerp(this.age))},UE.prototype.setValues=function(A){if(void 0!==A){for(var e in this.sizeTween=new ME,this.colorTween=new ME,this.opacityTween=new ME,A)this[e]=A[e];this.particleArray=[],this.emitterAlive=!0,this.particleCount=this.particlesPerSecond*Math.min(this.particleDeathAge,this.emitterDeathAge),this.particleGeometry=new he,this.particleMaterial=new Pe({uniforms:{texture:{value:this.particleTexture}},vertexShader:SE,fragmentShader:wE,transparent:!0,blending:1,depthWrite:!1}),this.particleMesh=new xE}},UE.prototype.randomValue=function(A,e){return A+e*(Math.random()-.5)},UE.prototype.randomVector3=function(A,e){var t=new y(Math.random()-.5,Math.random()-.5,Math.random()-.5);return(new y).addVectors(A,t.multiplyVectors(e,t))},UE.prototype.updateVector3=function(A,e,t){var i=new y(Math.random()-.5,Math.random()-.5,Math.random()-.5);A.set(0,0,0),A.addVectors(e,i.multiplyVectors(t,i))},UE.prototype.createParticle=function(){var A=new bE;if(1===this.positionStyle&&(A.position=this.randomVector3(this.positionBase,this.positionSpread)),2===this.positionStyle){var e=2*Math.random()-1,t=6.2832*Math.random(),i=Math.sqrt(1-e*e),o=new y(i*Math.cos(t),i*Math.sin(t),e);A.position=(new y).addVectors(this.positionBase,o.multiplyScalar(this.positionRadius))}if(1===this.velocityStyle&&(A.velocity=this.randomVector3(this.velocityBase,this.velocitySpread)),2===this.velocityStyle){var n=(new y).subVectors(A.position,this.positionBase),r=this.randomValue(this.speedBase,this.speedSpread);A.velocity=n.normalize().multiplyScalar(r)}A.acceleration=this.randomVector3(this.accelerationBase,this.accelerationSpread),A.angle=this.randomValue(this.angleBase,this.angleSpread),A.angleVelocity=this.randomValue(this.angleVelocityBase,this.angleVelocitySpread),A.angleAcceleration=this.randomValue(this.angleAccelerationBase,this.angleAccelerationSpread),A.size=this.randomValue(this.sizeBase,this.sizeSpread);var a=this.randomVector3(this.colorBase,this.colorSpread);return A.color=(new LA).setHSL(a.x,a.y,a.z),A.opacity=this.randomValue(this.opacityBase,this.opacitySpread),A.age=0,A.alive=0,A.sizeTween=this.sizeTween,A.colorTween=this.colorTween,A.opacityTween=this.opacityTween,A},UE.prototype.updateParticle=function(A){if(1===this.positionStyle&&this.updateVector3(A.position,this.positionBase,this.positionSpread),2===this.positionStyle){var e=2*Math.random()-1,t=6.2832*Math.random(),i=Math.sqrt(1-e*e),o=new y(i*Math.cos(t),i*Math.sin(t),e);A.position=(new y).addVectors(this.positionBase,o.multiplyScalar(this.positionRadius))}if(1===this.velocityStyle&&this.updateVector3(A.velocity,this.velocityBase,this.velocitySpread),2===this.velocityStyle){var n=(new y).subVectors(A.position,this.positionBase),r=this.randomValue(this.speedBase,this.speedSpread);A.velocity=n.normalize().multiplyScalar(r)}this.updateVector3(A.acceleration,this.accelerationBase,this.accelerationSpread),A.angle=this.randomValue(this.angleBase,this.angleSpread),A.angleVelocity=this.randomValue(this.angleVelocityBase,this.angleVelocitySpread),A.angleAcceleration=this.randomValue(this.angleAccelerationBase,this.angleAccelerationSpread),A.size=this.randomValue(this.sizeBase,this.sizeSpread);var a=this.randomVector3(this.colorBase,this.colorSpread);A.color=A.color.setHSL(a.x,a.y,a.z),A.opacity=this.randomValue(this.opacityBase,this.opacitySpread),A.age=0,A.alive=0},UE.prototype.initialize=function(){this.sortArray=[],this.positions=new Float32Array(3*this.particleCount),this.customVisible=new Float32Array(this.particleCount),this.customSize=new Float32Array(this.particleCount),this.customColor=new Float32Array(3*this.particleCount),this.customOpacity=new Float32Array(this.particleCount),this.maxSize=200;for(var A=0;this.particleCount>A;A+=1)this.particleArray[A]=this.createParticle(),this.positions[3*A]=this.particleArray[A].position.x,this.positions[3*A+1]=this.particleArray[A].position.y,this.positions[3*A+2]=this.particleArray[A].position.z,this.customVisible[A]=this.particleArray[A].alive,this.customColor[3*A]=this.particleArray[A].color.r,this.customColor[3*A+1]=this.particleArray[A].color.g,this.customColor[3*A+2]=this.particleArray[A].color.b,this.customOpacity[A]=this.particleArray[A].opacity,this.customSize[A]=this.particleArray[A].size,this.maxSize=this.maxSize>this.customSize[A]?this.maxSize:this.customSize[A];this.particleMaterial.blending=this.blendStyle,this.particleGeometry.setAttribute("position",new YA(this.positions,3)),this.particleGeometry.setAttribute("customColor",new YA(this.customColor,3)),this.particleGeometry.setAttribute("customVisible",new YA(this.customVisible,1)),this.particleGeometry.setAttribute("customSize",new YA(this.customSize,1)),this.particleGeometry.setAttribute("customOpacity",new YA(this.customOpacity,1)),this.particleMesh=new xE(this.particleGeometry,this.particleMaterial),this.particleMesh.dynamic=!0,this.particleMesh.size=this.maxSize,this.particleMesh.renderOrder=-1},UE.prototype.update=function(A){A=void 0===A?.015:A;for(var e=[],t=0;this.particleCount>t;t+=1)this.particleArray[t].alive&&(this.particleArray[t].update(A),this.particleArray[t].age>this.particleDeathAge&&(this.particleArray[t].alive=0,e.push(t)),this.customVisible[t]=this.particleArray[t].alive,this.customOpacity[t]=this.particleArray[t].opacity,this.customSize[t]=this.particleArray[t].size,this.customColor[3*t]=this.particleArray[t].color.r,this.customColor[3*t+1]=this.particleArray[t].color.g,this.customColor[3*t+2]=this.particleArray[t].color.b,this.positions[3*t]=this.particleArray[t].position.x,this.positions[3*t+1]=this.particleArray[t].position.y,this.positions[3*t+2]=this.particleArray[t].position.z,this.maxSize=this.maxSize>this.customSize[t]?this.maxSize:this.customSize[t]);if(this.particleGeometry.getAttribute("customVisible").needsUpdate=!0,this.particleGeometry.getAttribute("customOpacity").needsUpdate=!0,this.particleGeometry.getAttribute("customSize").needsUpdate=!0,this.particleGeometry.getAttribute("customColor").needsUpdate=!0,this.particleGeometry.getAttribute("position").needsUpdate=!0,this.emitterAlive){var i=Math.round(this.particlesPerSecond*(this.emitterAge+0)),o=Math.round(this.particlesPerSecond*(this.emitterAge+A));o>this.particleCount&&(o=this.particleCount);for(t=i;o>t;t+=1)this.particleArray[t].alive=1;for(var n=0;e.length>n;n+=1){this.updateParticle(this.particleArray[t=e[n]]),this.particleArray[t].alive=1,this.positions[3*t]=this.particleArray[t].position.x,this.positions[3*t+1]=this.particleArray[t].position.y,this.positions[3*t+2]=this.particleArray[t].position.z}this.emitterAge+=A}},UE.prototype.setScale=function(A){for(var e=0,t=this.sizeTween.values.length;t>e;e+=1)this.sizeTween.values[e]=this.sizeTween.values[e]*A;this.maxSize*=A},UE.prototype.initializeSizetween=function(A){for(var e=0,t=this.sizeTween.values.length;t>e;e+=1)this.sizeTween.values[e]=this.sizeTween.values[e]*A;for(e=0;this.particleCount>e;e+=1)this.particleArray[e].size*=A,this.customSize[e]=this.particleArray[e].size,this.maxSize=this.maxSize>this.customSize[e]?this.maxSize:this.customSize[e];this.particleGeometry.getAttribute("customSize").needsUpdate=!0},UE.prototype.destroy=function(){};var FE=function(){return Xi.call(this),this.firePosition={x:0,y:0,z:0},this.position.set(this.firePosition.x,this.firePosition.y,this.firePosition.z),this.fireScale=1,this.type="fire",this.disPickable=!0,this.autoAnimation=!0,this._loadTexture(),this._initialize(),this};(FE.prototype=Object.create(Xi.prototype)).constructor=Xi.prototype,FE.prototype._initialize=function(){this.fire=new UE,this.fire.setValues({positionStyle:1,positionBase:new y(0,0,600),positionSpread:new y(1500,1500,600),velocityStyle:1,velocityBase:new y(0,0,4600),velocitySpread:new y(1e3,1e3,4600),accelerationBase:new y(0,0,2600),particleTexture:this.fireParticle,sizeTween:new ME([0,.1],[32,200]),opacityTween:new ME([.7,1],[.8,0]),colorBase:new y(.04,1,.4),blendStyle:2,particlesPerSecond:80,particleDeathAge:1.5}),this.fire.initialize(),this.smoke=new UE,this.smoke.setValues({positionStyle:1,positionBase:new y(0,0,2600),positionSpread:new y(1500,1500,600),velocityStyle:1,velocityBase:new y(0,0,3600),velocitySpread:new y(1800,1800,1100),accelerationBase:new y(0,0,2600),particleTexture:this.smokeParticle,sizeTween:new ME([0,1],[32,200]),opacityTween:new ME([.5,1,1.7],[0,.3,0]),colorTween:new ME([.4,1],[new y(0,0,0),new y(0,0,.2)]),blendStyle:1,particlesPerSecond:40,particleDeathAge:2}),this.smoke.initialize(),this.add(this.fire.particleMesh),this.add(this.smoke.particleMesh)},FE.prototype._initializeSizetween=function(A){this.fire.initializeSizetween(A),this.smoke.initializeSizetween(A)},FE.prototype.update=function(){this.fire.update(),this.smoke.update()},FE.prototype.getPosition=function(){return this.firePosition},FE.prototype.setPosition=function(A){if(A)if("number"==typeof A.x)if("number"==typeof A.y)if("number"==typeof A.z){if(this.firePosition=A,this.position.set(this.firePosition.x,this.firePosition.y,this.firePosition.z),this.updateMatrixWorld(),this.originBox){var e=this.originBox.clone();this.box=e.applyMatrix4(this.matrix),this.levelName=null}}else Bh.error("缺少参数 position.z");else Bh.error("缺少参数 position.y");else Bh.error("缺少参数 position.x");else Bh.error("缺少参数 position")},FE.prototype.getScale=function(){return this.fireScale},FE.prototype.setScale=function(A){this.scale.set(A,A,A),this.updateMatrixWorld(),this.fire.setScale(A/this.fireScale),this.smoke.setScale(A/this.fireScale),this.fireScale=A},FE.prototype._loadTexture=function(){var A=new Aa;this.fireParticle=A.load("data:image/png;base64,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"),this.smokeParticle=A.load("data:image/png;base64,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")};var KE=function(){JC.call(this),this.type="LineGeometry"};KE.prototype=Object.assign(Object.create(JC.prototype),{constructor:KE,isLineGeometry:!0,setPositions:function(A){for(var e=A.length-3,t=new Float32Array(2*e),i=0;e>i;i+=3)t[2*i]=A[i],t[2*i+1]=A[i+1],t[2*i+2]=A[i+2],t[2*i+3]=A[i+3],t[2*i+4]=A[i+4],t[2*i+5]=A[i+5];return JC.prototype.setPositions.call(this,t),this},setColors:function(A){for(var e=A.length-3,t=new Float32Array(2*e),i=0;e>i;i+=3)t[2*i]=A[i],t[2*i+1]=A[i+1],t[2*i+2]=A[i+2],t[2*i+3]=A[i+3],t[2*i+4]=A[i+4],t[2*i+5]=A[i+5];return JC.prototype.setColors.call(this,t),this},fromLine:function(A){var e=A.geometry;return e.isGeometry?this.setPositions(e.vertices):e.isBufferGeometry&&this.setPositions(e.position.array),this},copy:function(){return this}});var QE=function(A,e){XC.call(this),this.type="Line2",this.geometry=void 0!==A?A:new KE,this.material=void 0!==e?e:new YC({color:16777215*Math.random()})};QE.prototype=Object.assign(Object.create(XC.prototype),{constructor:QE,isLine2:!0,copy:function(){return this}});function RE(A){return"symbol"==typeof A||Zv(A)&&"[object Symbol]"==Sv(A)}var TE=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,kE=/^\w*$/;function DE(A,e){if("function"!=typeof A||null!=e&&"function"!=typeof e)throw new TypeError("Expected a function");var t=function(){var i=arguments,o=e?e.apply(this,i):i[0],n=t.cache;if(n.has(o))return n.get(o);var r=A.apply(this,i);return t.cache=n.set(o,r)||n,r};return t.cache=new(DE.Cache||qv),t}DE.Cache=qv;var LE=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,NE=/\\(\\)?/g,OE=function(A){var e=DE(A,(function(A){return 500===t.size&&t.clear(),A})),t=e.cache;return e}((function(A){var e=[];return 46===A.charCodeAt(0)&&e.push(""),A.replace(LE,(function(A,t,i,o){e.push(i?o.replace(NE,"$1"):t||A)})),e}));var VE=Cv?Cv.prototype:void 0,GE=VE?VE.toString:void 0;function PE(A){if("string"==typeof A)return A;if(tI(A))return function(A,e){for(var t=-1,i=null==A?0:A.length,o=Array(i);++tt;)A=A[jE(e[t++])];return t&&t==i?A:void 0}(A,e);return void 0===i?t:i}var YE={height:0,speed:1e3,frameTime:14},WE=new hp,JE=function(){function A(e){cc(this,A),this.roadnet={},this.shortestPathLineMap={},this.roadNetLineMap={},this.roadNetPointMap={},this.roadNetInfoMap={},this.roadNetEdgeMap={},this.roadNetPointMap={},this.mapRoadNetListByModelKey={},this.mapModelKeyByRoadNetKey={},this.modelInfo={},this.viewer3D=e}return dc(A,[{key:"_getRoadNetListByModelKey",value:function(A){var e=this,t=this;return new Promise((function(i,o){(function(A){var e=A.viewer3D.getViewerImpl().getModel(A.modelKey),t=HE(e,["loader","url","serverUrl"])||HE(A,["viewer3D","host"],""),i=e.projectKey,o=e.accessToken,n="";e.share&&(n="&share="+e.share);var r={url:"".concat(t,"/").concat(A.apiVersion||"api","/").concat(i,"/routes/list?modelKey=").concat(A.modelKey).concat(n)};return o&&(r.headers={Authorization:o}),_d(r)})({viewer3D:e.viewer3D,modelKey:A}).then((function(e){var n,r=t.viewer3D.getViewerImpl().getModel(A);if(!r)return Bh.error(A+"模型不存在"),void o(A+"模型不存在");if(t.modelInfo[A]=r,"SUCCESS"===(n="string"==typeof e?JSON.parse(e):e).code){var a=t.mapRoadNetListByModelKey;a[A]={};for(var s=0,l=n.data.length;l>s;s+=1){var c=n.data[s],h=c.key;a[A][h]=c,t.roadNetInfoMap[h]=c,t.mapModelKeyByRoadNetKey[h]=A}i()}else o(n.message)})).catch((function(){Bh.error("获取模型路网列表失败"),o("获取模型路网列表失败")}))}))}},{key:"_getRoadNetDataByRouteKey",value:function(A,e,t){var i=this,o=this,n=[],r=this.mapModelKeyByRoadNetKey[A];if(r)return n.push(new Promise((function(e,t){(function(A){var e=A.viewer3D.getViewerImpl().getModel(A.modelKey),t=HE(e,["loader","url","serverUrl"])||HE(A,["viewer3D","host"],""),i=e.projectKey,o=e.accessToken,n="";e.share&&(n="&share="+e.share);var r={url:"".concat(t,"/").concat(A.apiVersion||"api","/").concat(i,"/routes/points?routeKey=").concat(A.routeKey).concat(n)};return o&&(r.headers={Authorization:o}),_d(r)})({viewer3D:i.viewer3D,routeKey:A,modelKey:r}).then((function(i){var n;if("SUCCESS"===(n="string"==typeof i?JSON.parse(i):i).code){var r=o.roadNetPointMap;r[A]={};for(var a=0,s=n.data.length;s>a;a+=1){var l=n.data[a];r[A][l.key]=l}e()}else t(n.message)})).catch((function(){Bh.error("获取模型路网列表失败"),t("获取模型路网列表失败")}))}))),n.push(new Promise((function(e,t){(function(A){var e=A.viewer3D.getViewerImpl().getModel(A.modelKey),t=HE(e,["loader","url","serverUrl"])||HE(A,["viewer3D","host"],""),i=e.projectKey,o=e.accessToken,n="";e.share&&(n="&share="+e.share);var r={url:"".concat(t,"/").concat(A.apiVersion||"api","/").concat(i,"/routes/edges?routeKey=").concat(A.routeKey).concat(n)};return o&&(r.headers={Authorization:o}),_d(r)})({viewer3D:i.viewer3D,routeKey:A,modelKey:r}).then((function(i){var n;"SUCCESS"===(n="string"==typeof i?JSON.parse(i):i).code?(o.roadNetEdgeMap[A]=n.data,e()):t(n.message)})).catch((function(){Bh.error("获取模型路网列表失败"),t("获取模型路网列表失败")}))}))),Promise.all(n);Bh.error("模型路网未初始化")}},{key:"initRoadNetByModelKey",value:function(A){var e=this;return new Promise((function(t,i){e._getRoadNetListByModelKey(A).then(t).catch(i)}))}},{key:"getRoadNetInfoListByModelKey",value:function(A){return this.mapRoadNetListByModelKey[A]}},{key:"addRoadNetByKey",value:function(A,e){var t=this,i=this,o=e.color,n=e.width,r=void 0===n?1:n,a=e.block,s=void 0===a||a;return new Promise((function(e,n){return o instanceof Xh?"number"!=typeof r?(Bh.error("width 参数非法"),void n("width 参数非法")):void(i.roadNetLineMap[A]?e():t._getRoadNetDataByRouteKey(A).then((function(){for(var t=i.roadNetEdgeMap[A],a=i.roadNetPointMap[A],l=[],c=0,h=t.length;h>c;c+=1){var d=t[c],p=d._from.split("/")[1],g=d._to.split("/")[1],u=a[p].xyz;u||(Bh.error("点",p,"不存在"),n("点"+p+"不存在")),l.push.apply(l,yc(u));var f=a[g].xyz;f||(Bh.error("点",g,"不存在"),n("点"+g+"不存在")),l.push.apply(l,yc(f))}var m=new JC;m.setPositions(l);var C=new YC({color:o.getHex(),linewidth:r/1e3});s||(C.depthTest=!1,C.transparent=!0);var y=new XC(m,C);y.matrixAutoUpdate=!1;var v=i.mapModelKeyByRoadNetKey[A];if(!v)return Bh.error("模型路网未初始化"),void n("模型路网未初始化");var I=i.viewer3D.getModelMatrix(v);y.matrix.copy(I),i.viewer3D.getScene().add(y),y.updateMatrixWorld(!0),i.roadNetLineMap[A]=y,i.viewer3D.render(),e()})).catch((function(A){n(A)}))):(Bh.error("color 参数非法"),void n("color 参数非法"))}))}},{key:"removeRoadNetByKey",value:function(A){this.roadNetLineMap[A]?(this.viewer3D.getScene().remove(this.roadNetLineMap[A]),delete this.roadNetLineMap[A],this.viewer3D.render()):Bh.warn("路网",A,"不存在")}},{key:"showRoadNetByKey",value:function(A){this.roadNetLineMap[A]?(this.roadNetLineMap[A].visible=!0,this.viewer3D.render()):Bh.warn("路网",A,"不存在")}},{key:"hideRoadNetByKey",value:function(A){this.roadNetLineMap[A]?(this.roadNetLineMap[A].visible=!1,this.viewer3D.render()):Bh.warn("路网",A,"不存在")}},{key:"setRoadNetColorByKey",value:function(A,e){if(this.roadNetLineMap[A]){if(!(e instanceof Xh))return void Bh.warn("color 参数非法");this.roadNetLineMap[A].material.color=e.getHex(),this.viewer3D.render()}else Bh.warn("路网",A,"不存在")}},{key:"setRoadNetBlockByKey",value:function(A,e){this.roadNetLineMap[A]?(e?(this.roadNetLineMap[A].material.depthTest=!0,this.roadNetLineMap[A].material.transparent=!1):(this.roadNetLineMap[A].material.depthTest=!1,this.roadNetLineMap[A].material.transparent=!0),this.viewer3D.render()):Bh.warn("路网",A,"不存在")}},{key:"setRoadNetLineWidthByKey",value:function(A,e){this.roadNetLineMap[A]?(this.roadNetLineMap[A].material.linewidth=e/1e3,this.viewer3D.render()):Bh.warn("路网",A,"不存在")}},{key:"update",value:function(){for(var A in this.roadNetLineMap)if(this.roadNetLineMap.hasOwnProperty(A)){var e=this.roadNetLineMap[A],t=this.viewer3D.getModelMatrix(this.mapModelKeyByRoadNetKey[A]);e.matrix.copy(t),e.updateMatrixWorld(!0)}for(var i in this.shortestPathLineMap)if(this.shortestPathLineMap.hasOwnProperty(i)){var o=this.shortestPathLineMap[i],n=this.viewer3D.getModelMatrix(o.userData.modelKey);o.matrix.copy(n),o.updateMatrixWorld(!0)}this.viewer3D.render()}},{key:"getShortestPath",value:function(A,e,t,i){var o=this,n=this;return new Promise((function(i,r){o.roadNetInfoMap[A]||r({code:"error",detail:"路网".concat(A,"未初始化"),start:e,end:t});var a=o.mapModelKeyByRoadNetKey[A];if(!a)return Bh.error("模型路网未初始化"),void r("模型路网未初始化");(function(A){var e=A.viewer3D.getViewerImpl().getModel(A.modelKey),t=HE(e,["loader","url","serverUrl"])||HE(A,["viewer3D","host"],""),i=e.projectKey,o=e.accessToken,n="";e.share&&(n="&share="+e.share);var r={url:"".concat(t,"/").concat(A.apiVersion||"api","/").concat(i,"/routes/shortestPath?routeKey=").concat(A.routeKey,"&start=").concat(A.start.toString(),"&end=").concat(A.end.toString()).concat(n)};return o&&(r.headers={Authorization:o}),_d(r)})({modelKey:a,viewer3D:n.viewer3D,routeKey:A,start:e,end:t}).then((function(o){var n;"SUCCESS"===(n="string"==typeof o?JSON.parse(o):o).code&&i({code:"success",data:{routeKey:A,points:n.data},start:e,end:t})})).catch((function(A){r({code:"error",detail:A,start:e,end:t})}))}))}},{key:"addShortestPathByPoints",value:function(A,e){var t=this,i=e.color,o=e.width,n=void 0===o?1:o,r=e.block,a=void 0===r||r;return new Promise((function(e,o){if(!A.routeKey)return Bh.error("缺少参数routeKey"),void o("缺少参数routeKey");if(!A.points)return Bh.error("缺少参数points"),void o("缺少参数points");if(!(i instanceof Xh))return Bh.error("color 参数非法"),void o("color 参数非法");if("number"!=typeof n)return Bh.error("width 参数非法"),void o("width 参数非法");A.key||(A.key=uh.createUUID());for(var r=[],s=0,l=A.points.length;l>s;s+=1)r.push.apply(r,yc(A.points[s]));var c=new KE;c.setPositions(r);var h=new YC({color:i.getHex(),linewidth:n/1e3});a||(h.depthTest=!1,h.transparent=!0);var d=new QE(c,h);d.matrixAutoUpdate=!1;var p=t.mapModelKeyByRoadNetKey[A.routeKey];if(!p)return Bh.error("模型路网未初始化"),void o("模型路网未初始化");var g=t.viewer3D.getModelMatrix(p);d.matrix.copy(g),d.userData.modelKey=p,d.userData.routeKey=A.routeKey,t.viewer3D.getScene().add(d),d.updateMatrixWorld(!0),t.shortestPathLineMap[A.key]=d,t.viewer3D.render(),e(A)}))}},{key:"showShortestPathByKey",value:function(A){this.shortestPathLineMap[A]?(this.shortestPathLineMap[A].visible=!0,this.viewer3D.render()):Bh.warn("最短路径",A,"不存在")}},{key:"hideShortestPathByKey",value:function(A){this.shortestPathLineMap[A]?(this.shortestPathLineMap[A].visible=!1,this.viewer3D.render()):Bh.warn("最短路径",A,"不存在")}},{key:"removeShortestPathByKey",value:function(A){this.shortestPathLineMap[A]?(this.viewer3D.getScene().remove(this.shortestPathLineMap[A]),delete this.shortestPathLineMap[A],this.viewer3D.render()):Bh.warn("最短路径",A,"不存在")}},{key:"setShortestPathColorByKey",value:function(A,e){if(this.shortestPathLineMap[A]){if(!(e instanceof Xh))return void Bh.warn("color 参数非法");this.shortestPathLineMap[A].material.color=e.getHex(),this.viewer3D.render()}else Bh.warn("最短路径",A,"不存在")}},{key:"setShortestPathBlockByKey",value:function(A,e){this.shortestPathLineMap[A]?(e?(this.shortestPathLineMap[A].material.depthTest=!0,this.shortestPathLineMap[A].material.transparent=!1):(this.shortestPathLineMap[A].material.depthTest=!1,this.shortestPathLineMap[A].material.transparent=!0),this.viewer3D.render()):Bh.warn("最短路径",A,"不存在")}},{key:"setShortestPathLineWidthByKey",value:function(A,e){this.shortestPathLineMap[A]?(this.shortestPathLineMap[A].material.linewidth=e/1e3,this.viewer3D.render()):Bh.warn("最短路径",A,"不存在")}},{key:"roamByShortestPathData",value:function(A,e){var t=this,i=uh.extend({},YE,e);if(A.routeKey)if(A.points)if(i.speed){var o=t.viewer3D.getModelMatrix(t.mapModelKeyByRoadNetKey[A.routeKey]);if(o){var n=this.viewer3D.getViewerImpl().camera;!function A(e,r){if(e.length-1>r){var a,s=new y(e[r][0],e[r][1],e[r][2]+i.height).applyMatrix4(o),l=new y(e[r+1][0],e[r+1][1],e[r+1][2]+i.height).applyMatrix4(o),c=new y(e[r+1][0],e[r+1][1],e[r+1][2]+i.height).applyMatrix4(o);if(r>e.length-3||(a=new y(e[r+2][0],e[r+2][1],e[r+2][2]+i.height).applyMatrix4(o)),r===e.length-2){var h=new y(e[r+1][0],e[r+1][1],e[r+1][2]+i.height).sub(new y(e[r][0],e[r][1],e[r][2]+i.height)).setLength(.1);a=new y(e[r+1][0],e[r+1][1],e[r+1][2]+i.height).add(h).applyMatrix4(o)}var d=s.distanceTo(c)/i.speed*1e3;t.viewer3D.getViewerImpl().getControlManager().setInteractiveState(!1),WE.from({animPosition:s,animTarget:l,animUp:n.up}).to({animPosition:c,animTarget:a,animUp:n.up},d).onUpdate((function(A){var e=A.animPosition;n.lookAtEXForTargetPositionUp(A.animTarget,e,n.up),t.viewer3D.getViewerImpl().cameraControl.update(!0,!0),i.callbackProcess&&i.callbackProcess(e)})).onComplete((function(){n.lookAtEXForTargetPositionUp(a,c,n.up),t.viewer3D.getViewerImpl().cameraControl.update(!0,!0),i.callbackProcess&&i.callbackProcess(c),i.callbackFinish&&i.callbackFinish(),t.viewer3D.getViewerImpl().getControlManager().setInteractiveState(!0),A(e,r+=1)})).start(i.frameTime,!0)}else i.callbackAllFinish&&i.callbackAllFinish()}(A.points,0)}else Bh.error("无法获取路径对应的模型矩阵")}else Bh.error("speed参数非法");else Bh.error("缺少参数points");else Bh.error("缺少参数routeKey")}}]),A}(),zE={fontSize:100,color:"#ff0000",opacity:1,side:2,transparent:!0},ZE=function(){function A(){cc(this,A)}return dc(A,[{key:"createMesh",value:function(A,e){var t=Object.assign({},zE,e),i=A.generateShapes(t.text,t.fontSize),o=new jA(t),n=new Ue(new ar(i),o);return t.position&&this.setPos(n,t.position),t.rotation&&this.setRotation(n,t.rotation),t.matrix&&this.setMat(n,t.matrix),n}},{key:"setPos",value:function(A,e){var t;(t=A.position).set.apply(t,yc(e)),A.updateMatrixWorld(!0)}},{key:"setMat",value:function(A,e){A.applyMatrix4(e),A.updateMatrixWorld(!0)}},{key:"setRotation",value:function(A,e){var t;(t=A.rotation).set.apply(t,yc(e)),A.updateMatrixWorld(!0)}}]),A}(),XE=function(){function A(e){cc(this,A),this.fonts={},this.host=e.host}return dc(A,[{key:"loadFont",value:function(A,e){var t=this;return new Promise((function(i,o){_d({type:"POST",url:"".concat(t.host,"/api/fonts"),headers:{"Content-type":"application/json;charset=UTF-8"},data:JSON.stringify({font:A,text:e}),responseType:"json",success:function(e){"success"===e.code.toLowerCase()?(t.fonts[A]?Object.assign(t.fonts[A].data.glyphs,e.data.glyphs):(t.fonts[A]={},t.fonts[A].data=e.data),t.fonts[A].font=new za(t.fonts[A].data),i(t.fonts[A].font)):o(e)},error:function(A,e){o(e)}})}))}},{key:"getFont",value:function(A,e){var t=this;return new Promise((function(i,o){if(t.fonts[A]){for(var n=e.length,r="",a=0;n>a;a+=1)t.fonts[A].data.glyphs[e[a]]||(r+=e[a]);r?t.loadFont(A,r).then(i).catch(o):i(t.fonts[A].font)}else t.loadFont(A,e).then(i).catch(o)}))}}]),A}(),_E=function(){function A(e){cc(this,A),this.viewer=e.viewer.getViewerImpl(),this.meshes={},this.fontLib=new XE({host:e.viewer.host}),this.text=new ZE,this.draggingId=""}return dc(A,[{key:"addText",value:function(A){var e=this;return this.fontLib.getFont(A.fontName,A.text).then((function(t){var i=e.text.createMesh(t,A),o=uh.createUUID();return e.meshes[o]=i,e.viewer.getScene().add(i),e.viewer.render(),{code:"success",id:o}})).catch((function(A){return{code:"error",err:A}}))}},{key:"removeText",value:function(A){if(this.draggingId!==A){var e=this.meshes[A];e&&(this.viewer.getScene().remove(e),delete this.meshes[A],this.viewer.render())}}},{key:"setPosition",value:function(A,e){if(this.draggingId!==A){var t=this.meshes[A];t&&(this.text.setPos(t,e),this.viewer.render())}}},{key:"setMatrix",value:function(A,e){if(this.draggingId!==A){var t=this.meshes[A];t&&(this.text.setMat(t,e),this.viewer.render())}}},{key:"setRotation",value:function(A,e){if(this.draggingId!==A){var t=this.meshes[A];t&&(this.text.setRotation(t,e),this.viewer.render())}}},{key:"getTextIDs",value:function(){return Object.keys(this.meshes)}},{key:"dragText",value:function(A){if(""===this.draggingId){var e=this.meshes[A];e&&(this.viewer.translateComponentByKey(e),this.draggingId=A)}}},{key:"saveDragText",value:function(){""!==this.draggingId&&(this.viewer.cancelTransformComponent(!1),this.draggingId="")}}]),A}(),$E=function(){function A(e){cc(this,A),this.curves={},this.viewer=e.viewer3D,this.modelKey=e.modelKey}return dc(A,[{key:"getId",value:function(A){return Bd(JSON.stringify(A)).slice(0,8)}},{key:"getCurve",value:function(A){return this.curves[A]}},{key:"_setCurve",value:function(A,e){this.curves[A]=e}},{key:"_rmCurve",value:function(A){delete this.curves[A]}},{key:"genTHREELine",value:function(A){var e=A.num,t=void 0===e?100:e,i=A.debug,o=void 0!==i&&i,n=new la(A.points,A.closed,A.curveType,A.tension),r=this.getId(A),a=new De;a.vertices=n.getSpacedPoints(t);var s=new Go(a,new ko({color:A.color||16777215*Math.random(),linewidth:6.18,depthTest:!0,transparent:!1}));o&&(this.viewer.getViewerImpl().modelManager.getModel(this.modelKey).group.add(s),s.updateMatrixWorld(),this.viewer.render());return this._setCurve(r,{curve:n,num:t,line:s}),r}},{key:"rmCurve",value:function(A){var e=this.getCurve(A).line;this.viewer.getViewerImpl().modelManager.getModel(this.modelKey).group.remove(e),e.updateMatrixWorld(),this.viewer.render(),this._rmCurve(A)}}]),A}(),AB=function(){function A(e){cc(this,A),this.trackSet={},this.lineManager=new $E(e),this.viewer=e.viewer3D}return dc(A,[{key:"_genLine",value:function(A){return this.lineManager.genTHREELine(A)}},{key:"addTrack",value:function(A){var e=((new Date).getTime()*(Math.random()+1)).toString(36).slice(0,8),t=this._genLine(A);return this.trackSet[e]={componentKey:A.componentKey,lineId:[t]},e}},{key:"appendTrack",value:function(A){var e=this.trackSet[A.trackId];if(e){var t=this._genLine(A);e.lineId.push(t)}}},{key:"removeTrack",value:function(A){var e=this,t=this.trackSet[A];t&&(t.lineId.forEach((function(A){e.lineManager.rmCurve(A)})),delete this.trackSet[A])}},{key:"startMove",value:function(A){var e=this,t=A.trackId,i=A.startDir,o=A.pointFn;return new Promise((function(A,n){var r=e.trackSet[t];if(r){var a=r.lineId,s=r.componentKey,l=new M,c=a.length,h=e.lineManager.getCurve(a[0]).curve.getPoint(0),d=e.viewer.getBoxByComponentsKey(s),p=d.min,g=d.max,u=(new y).addVectors(p,g).divideScalar(2);l.elements[12]=h.x-u.x,l.elements[13]=h.y-u.y,l.elements[14]=h.z-u.z,e.viewer.componentApplyMatrix(s,l);var m=0,C=new M,v=i.clone().normalize(),I=function i(n){var r=e.lineManager.getCurve(a[Math.trunc(m)]).curve.getPoint(m-Math.trunc(m)),h=c>n?e.lineManager.getCurve(a[Math.trunc(n)]).curve.getPoint(n-Math.trunc(n)):e.lineManager.getCurve(a[c-1]).curve.getPoint(1),d=new M;d.elements[12]=-r.x,d.elements[13]=-r.y,d.elements[14]=-r.z;var p=new f,g=new y(h.x-r.x,h.y-r.y,h.z-r.z).normalize();p.setFromUnitVectors(v,g),v.applyQuaternion(p);var u=(new M).makeRotationFromQuaternion(p),I=new M;I.elements[12]=h.x,I.elements[13]=h.y,I.elements[14]=h.z,l.elements=C.elements,e.viewer.componentApplyMatrix(s,I.multiply(u).multiply(d)),m=n,c>n?"function"==typeof o?requestAnimationFrame((function(){i(o(t,n,h))})):requestAnimationFrame((function(){return i(parseFloat((n+.01).toFixed(2)))})):A({code:"success",trackId:t})};"function"==typeof o?requestAnimationFrame((function(){I(o(t,0,h))})):requestAnimationFrame((function(){return I(.01)}))}else n({code:"error",message:"找不到指定轨迹"})}))}}]),A}(),eB=function(A,e){Ue.call(this,A);var t=this,i=void 0!==(e=e||{}).textureWidth?e.textureWidth:512,o=void 0!==e.textureHeight?e.textureHeight:512,n=void 0!==e.clipBias?e.clipBias:0,r=void 0!==e.alpha?e.alpha:1,s=void 0!==e.time?e.time:0,l=void 0!==e.waterNormals?e.waterNormals:null,c=void 0!==e.sunDirection?e.sunDirection:new y(.70707,.70707,0),h=new LA(void 0!==e.sunColor?e.sunColor:16777215),d=new LA(void 0!==e.waterColor?e.waterColor:8355711),u=void 0!==e.eye?e.eye:new y(0,0,0),f=void 0!==e.distortionScale?e.distortionScale:20,m=void 0!==e.side?e.side:0,C=void 0!==e.fog&&e.fog,v=new EA,I=new y,E=new y,B=new y,x=new M,S=new y(0,0,-1),w=new p,b=new y,U=new y,F=new p,K=new M,Q=new je,R=new g(i,o,{minFilter:1006,magFilter:1006,format:1022,stencilBuffer:!1});a.isPowerOfTwo(i)&&a.isPowerOfTwo(o)||(R.texture.generateMipmaps=!1);var T={uniforms:Ge.merge([Xe.fog,Xe.lights,{normalSampler:{value:null},mirrorSampler:{value:null},alpha:{value:1},time:{value:0},size:{value:1},distortionScale:{value:20},textureMatrix:{value:new M},sunColor:{value:new LA(8355711)},sunDirection:{value:new y(.70707,.70707,0)},eye:{value:new y},waterColor:{value:new LA(5592405)}}]),vertexShader:["uniform mat4 textureMatrix;","uniform float time;","varying vec4 mirrorCoord;","varying vec4 worldPosition;",tt.fog_pars_vertex,tt.shadowmap_pars_vertex,"void main() {"," mirrorCoord = modelMatrix * vec4( position, 1.0 );"," worldPosition = mirrorCoord.xyzw;"," mirrorCoord = textureMatrix * mirrorCoord;"," vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );"," gl_Position = projectionMatrix * mvPosition;",tt.fog_vertex,tt.shadowmap_vertex,"}"].join("\n"),fragmentShader:["uniform sampler2D mirrorSampler;","uniform float alpha;","uniform float time;","uniform float size;","uniform float distortionScale;","uniform sampler2D normalSampler;","uniform vec3 sunColor;","uniform vec3 sunDirection;","uniform vec3 eye;","uniform vec3 waterColor;","varying vec4 mirrorCoord;","varying vec4 worldPosition;","vec4 getNoise( vec2 uv ) {"," vec2 uv0 = ( uv / 103.0 ) + vec2(time / 17.0, time / 29.0);"," vec2 uv1 = uv / 107.0-vec2( time / -19.0, time / 31.0 );"," vec2 uv2 = uv / vec2( 8907.0, 9803.0 ) + vec2( time / 101.0, time / 97.0 );"," vec2 uv3 = uv / vec2( 1091.0, 1027.0 ) - vec2( time / 109.0, time / -113.0 );"," vec4 noise = texture2D( normalSampler, uv0 ) +"," texture2D( normalSampler, uv1 ) +"," texture2D( normalSampler, uv2 ) +"," texture2D( normalSampler, uv3 );"," return noise * 0.5 - 1.0;","}","void sunLight( const vec3 surfaceNormal, const vec3 eyeDirection, float shiny, float spec, float diffuse, inout vec3 diffuseColor, inout vec3 specularColor ) {"," vec3 reflection = normalize( reflect( -sunDirection, surfaceNormal ) );"," float direction = max( 0.0, dot( eyeDirection, reflection ) );"," specularColor += pow( direction, shiny ) * sunColor * spec;"," diffuseColor += max( dot( sunDirection, surfaceNormal ), 0.0 ) * sunColor * diffuse;","}",tt.common,tt.packing,tt.bsdfs,tt.fog_pars_fragment,tt.lights_pars_begin,tt.shadowmap_pars_fragment,tt.shadowmask_pars_fragment,"void main() {"," vec4 noise = getNoise( worldPosition.xz * size );"," vec3 surfaceNormal = normalize( noise.xzy * vec3( 1.5, 1.0, 1.5 ) );"," vec3 diffuseLight = vec3(0.0);"," vec3 specularLight = vec3(0.0);"," vec3 worldToEye = eye-worldPosition.xyz;"," vec3 eyeDirection = normalize( worldToEye );"," sunLight( surfaceNormal, eyeDirection, 100.0, 2.0, 0.5, diffuseLight, specularLight );"," float distance = length(worldToEye);"," vec2 distortion = surfaceNormal.xz * ( 0.001 + 1.0 / distance ) * distortionScale;"," vec3 reflectionSample = vec3( texture2D( mirrorSampler, mirrorCoord.xy / mirrorCoord.w + distortion ) );"," float theta = max( dot( eyeDirection, surfaceNormal ), 0.0 );"," float rf0 = 0.3;"," float reflectance = rf0 + ( 1.0 - rf0 ) * pow( ( 1.0 - theta ), 5.0 );"," vec3 scatter = max( 0.0, dot( surfaceNormal, eyeDirection ) ) * waterColor;"," vec3 albedo = mix( ( sunColor * diffuseLight * 0.3 + scatter ) * getShadowMask(), ( vec3( 0.1 ) + reflectionSample * 0.9 + reflectionSample * specularLight ), reflectance);"," vec3 outgoingLight = albedo;"," gl_FragColor = vec4( outgoingLight, alpha );",tt.tonemapping_fragment,tt.fog_fragment,"}"].join("\n")},k=new Pe({fragmentShader:T.fragmentShader,vertexShader:T.vertexShader,uniforms:Ge.clone(T.uniforms),transparent:1>r,lights:!0,side:m,fog:C});k.uniforms.mirrorSampler.value=R.texture,k.uniforms.textureMatrix.value=K,k.uniforms.alpha.value=r,k.uniforms.time.value=s,k.uniforms.normalSampler.value=l,k.uniforms.sunColor.value=h,k.uniforms.waterColor.value=d,k.uniforms.sunDirection.value=c,k.uniforms.distortionScale.value=f,k.uniforms.eye.value=u,t.material=k,t.onBeforeRender=function(A,e,i){if(E.setFromMatrixPosition(t.matrixWorld),B.setFromMatrixPosition(i.matrixWorld),x.extractRotation(t.matrixWorld),I.set(0,0,1),I.applyMatrix4(x),b.subVectors(E,B),0>=b.dot(I)){b.reflect(I).negate(),b.add(E),x.extractRotation(i.matrixWorld),S.set(0,0,-1),S.applyMatrix4(x),S.add(B),U.subVectors(E,S),U.reflect(I).negate(),U.add(E),Q.position.copy(b),Q.up.set(0,1,0),Q.up.applyMatrix4(x),Q.up.reflect(I),Q.lookAt(U),Q.far=i.far,Q.updateMatrixWorld(),Q.projectionMatrix.copy(i.projectionMatrix),K.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),K.multiply(Q.projectionMatrix),K.multiply(Q.matrixWorldInverse),v.setFromNormalAndCoplanarPoint(I,E),v.applyMatrix4(Q.matrixWorldInverse),w.set(v.normal.x,v.normal.y,v.normal.z,v.constant);var o=Q.projectionMatrix;F.x=(Math.sign(w.x)+o.elements[8])/o.elements[0],F.y=(Math.sign(w.y)+o.elements[9])/o.elements[5],F.z=-1,F.w=(1+o.elements[10])/o.elements[14],w.multiplyScalar(2/w.dot(F)),o.elements[2]=w.x,o.elements[6]=w.y,o.elements[10]=w.z+1-n,o.elements[14]=w.w,u.setFromMatrixPosition(i.matrixWorld);var r=A.getRenderTarget(),a=A.xr.enabled,s=A.shadowMap.autoUpdate;t.visible=!1,A.xr.enabled=!1,A.shadowMap.autoUpdate=!1,A.setRenderTarget(R),A.clear(),A.render(e,Q),t.visible=!0,A.xr.enabled=a,A.shadowMap.autoUpdate=s,A.setRenderTarget(r)}}};(eB.prototype=Object.create(Ue.prototype)).constructor=eB;var tB=function(A){this.name=A.name||"",this.id=A.id||"",this.keyFrameList=[],this.roamTime=5,this.interpolateType=1,this.fps=50,this.parts=100,this.rotateSpeed=Math.PI/this.roamTime/this.fps/4,this.parameters={segments:this.roamTime*this.fps*this.parts,closed:!1,curveType:"centripetal",tension:.25},this.modificationId=0,this.mapDeltaAngle={},this.mapDeltaOffset={},this.allocateSegmentList=null,this.positionCurve=void 0,this.init(A)};tB.prototype.init=function(A){this.setKeyFrameList(A.keyFrameList),this.setParameters(A.parameters),this.setInterpolateType(A.type),this.setFps(A.fps),this.setRoamTime(A.roamTime)},tB.prototype.addKeyFrame=function(A){var e=new y(A.position.x,A.position.y,A.position.z),t=new y(A.target.x,A.target.y,A.target.z),i=new y(A.up.x,A.up.y,A.up.z),o=null;if(A.quaternion)o=new f(A.quaternion.x,A.quaternion.y,A.quaternion.z,A.quaternion.w);else{var n=new M;n.lookAt(e,t,i),o=(new f).setFromRotationMatrix(n)}this.keyFrameList.push({position:e,target:t,up:i,id:A.id,quaternion:o,curve:A.curve}),this.modificationId+=1},tB.prototype.setKeyFrameList=function(A){this.keyFrameList=[];for(var e=0,t=A.length;t>e;e+=1)this.addKeyFrame(A[e]);this.calRotateSpeed()},tB.prototype.removeKeyFrame=function(A){A>=0&&this.keyFrameList.length>A&&(this.keyFrameList.splice(A,1),this.modificationId+=1)},tB.prototype.getKeyFrames=function(){return this.keyFrameList},tB.prototype.getKeyFrameCount=function(){return this.keyFrameList.length},tB.prototype.clearFrames=function(){this.keyFrameList=[]},tB.prototype.getJumpCounts=function(A){var e=A/(1e3/this.fps)*this.parts;return e=parseInt(e,0)},tB.prototype.setRoamTime=function(A){this.roamTime=A,this.setSegments(A*this.fps*this.parts),this.calRotateSpeed()},tB.prototype.calRotateSpeed=function(){var A=this.getKeyFrames().length;A>1&&(this.rotateSpeed=Math.PI*(A-1)/this.roamTime/this.fps/4)},tB.prototype.setInterpolateType=function(A){this.interpolateType=A||1,1===this.interpolateType&&this.setSplineTension(0)},tB.prototype.getInterpolateType=function(){return this.interpolateType},tB.prototype.setName=function(A){this.name=A},tB.prototype.getName=function(){return this.name},tB.prototype.getId=function(){return this.id},tB.prototype.getKeyFramePositions=function(){for(var A=[],e=0,t=this.keyFrameList.length;t>e;e+=1){A.push(this.keyFrameList[e].position)}return A},tB.prototype.getKeyFramePosition=function(A){return this.keyFrameList[A].position},tB.prototype.getKeyFrameDirection=function(A){var e=this.keyFrameList[A];return e.target.clone().sub(e.position)},tB.prototype.getKeyFrameTarget=function(A){return this.keyFrameList[A].target},tB.prototype.getKeyFrameUp=function(A){return this.keyFrameList[A].up},tB.prototype.allocateSegments=function(){for(var A=[],e=0,t=this.keyFrameList.length;t-1>e;e+=1){var i=this.keyFrameList[e].position;A.push(this.keyFrameList[e+1].position.clone().sub(i).length())}for(var o=0,n=0,r=A.length;r>n;n+=1)o+=A[n];for(var a=this.getSegments(),s=0,l=A.length;0!==o&&l>s;s+=1)A[s]/=o,A[s]*=this.getSegments(),A[s]=Math.floor(A[s]),a-=A[s];for(var c=0;a>c;c+=1)A[c]>0&&(A[c]+=1);this.allocateSegmentList=A},tB.prototype.getAllocateSegmentCount=function(A){return null===this.allocateSegmentList&&this.allocateSegments(),this.allocateSegmentList[A]},tB.prototype.getSplineParam=function(A,e){return null===this.allocateSegmentList&&this.allocateSegments(),(A+e/this.allocateSegmentList[A])/this.allocateSegmentList.length},tB.prototype.getDeltaAngle=function(A){return this.mapDeltaAngle[A]},tB.prototype.calculateDeltaAngle=function(){for(var A=this.allocateSegmentList,e=0;A.length>e;e+=1){var t=0;if(this.keyFrameList[e].quaternion&&this.keyFrameList[e+1].quaternion){var i=this.keyFrameList[e].quaternion,o=this.keyFrameList[e+1].quaternion,n=(new f).multiplyQuaternions(o,i.clone().inverse());n.normalize(),t=2*Math.acos(n.w)}else{var r=this.getKeyFrameDirection(e),a=this.getKeyFrameDirection(e+1);t=r.angleTo(a)}var s=A[e];if(0===s){var l=Math.floor(t/this.rotateSpeed)*this.parts;A[e]=l,this.mapDeltaAngle[e]=t/l}else this.mapDeltaAngle[e]=t/s}},tB.prototype.getRotateAxis=function(A){var e=this.keyFrameList[A].quaternion,t=this.keyFrameList[A+1].quaternion;if(e&&t){var i=(new f).multiplyQuaternions(t,e.clone().inverse());return i.normalize(),new y(i.x,i.y,i.z).normalize()}var o=this.getKeyFrameDirection(A),n=this.getKeyFrameDirection(A+1);return o.clone().cross(n.clone()).normalize()},tB.prototype.getDeltaOffset=function(A){return this.mapDeltaOffset[A]},tB.prototype.getPositionAtCurve=function(A,e){var t=this.keyFrameList[A+1];if(t&&t.curve)return t.curve.getPointAt(e)},tB.prototype.getPositionAtCurve=function(A,e){var t=this.keyFrameList[A+1];if(t&&t.curve)return t.curve.getPointAt(e)},tB.prototype.getLatestPositionAtCurve=function(A){var e=this.keyFrameList[A];if(e&&e.curve)return e.position},tB.prototype.calculateDeltaOffset=function(){for(var A=this.allocateSegmentList,e=this.getKeyFramePositions(),t=0;A.length>t;t+=1){var i=e[t],o=e[t+1],n=this.allocateSegmentList[t];this.mapDeltaOffset[t]=0===n?new y:o.clone().sub(i).divideScalar(n)}},tB.prototype.setSplineTension=function(A){0>A||A>1||(this.parameters.tension=A,this.modificationId+=1)},tB.prototype.setSegments=function(A){this.parameters.segments=A,this.modificationId+=1},tB.prototype.getSegments=function(){return this.parameters.segments},tB.prototype.setParameters=function(A){A&&(this.parameters=A,this.modificationId+=1)},tB.prototype.getParameters=function(){return this.parameters},tB.prototype.setFps=function(A){this.fps=A||50,this.calRotateSpeed(),this.modificationId+=1},tB.prototype.getFps=function(){return this.fps},tB.prototype.getModificationId=function(){return this.modificationId},tB.prototype.export=function(){return{name:this.name,id:this.id,fps:this.fps,roamTime:this.roamTime,type:this.interpolateType,keyFrameList:this.keyFrameList}};var iB=function(A){this.viewer=A.viewer,this.roam=null,this.bPause=!1,this.bContinue=!1,this.spline=null,this.reqid=0,this.playBinded=this._play.bind(this),this.recordId=-1,this.keyFrameIdx=0,this.count=-1,this.camera=this.viewer.cameraControl.camera,this.pausePlayCallback=[],this.stopPlayCallback=[],this.keyFrameCallback=[],this.timeRecorder={last:0,pause:0,deltaTime:0},this.setRoam(A.roamData)};iB.prototype.setRoam=function(A){this.roam=A,this.bPause=!1,this.recordId=-1,this.spline=null,this.keyFrameIdx=0,this.count=-1},iB.prototype.updateCamera=function(A,e,t){this.camera.position.add(A),this.camera.target.addVectors(this.camera.position,e),this.camera.up.copy(t)},iB.prototype.updateCameraToFrame=function(A){var e=this.roam.getKeyFramePosition(A),t=this.roam.getKeyFrameTarget(A),i=this.roam.getKeyFrameUp(A);this.camera.position.copy(e),this.camera.target.copy(t),this.camera.up.copy(i)},iB.prototype.reAllocate=function(){this.recordId!==this.roam.getModificationId()&&(this.roam.allocateSegments(),this.roam.calculateDeltaOffset(),this.roam.calculateDeltaAngle(),this.recordId=this.roam.getModificationId())},iB.prototype._play=function(){var A=new f,e=new f,t=new y,i=new y(0,1,0),o=new y;return function(){this.reqid=setTimeout(this.playBinded,this.roam.getFps()),!1===this.bContinue?(this.bContinue=!0,this.timeRecorder.deltaTime=this.timeRecorder.pause-this.timeRecorder.last):this.timeRecorder.deltaTime=performance.now()-this.timeRecorder.last,this.timeRecorder.last=performance.now();var n=this.roam.getJumpCounts(this.timeRecorder.deltaTime);if(this.reAllocate(),this.bPause)return this.timeRecorder.pause=performance.now(),clearTimeout(this.reqid),this.triggerPausePlayCallback(),this.bPause=!1,void(this.bContinue=!1);var r=this.roam.getKeyFrameCount(),a=this.roam.getAllocateSegmentCount(this.keyFrameIdx);if(0===a)this.keyFrameIdx+=1,this.triggerKeyFrameCallback(this.keyFrameIdx),this.count=-1;else if(this.keyFrameIdx===r-1)this.updateCameraToFrame(this.keyFrameIdx),this.stop();else if(-1===this.count)this.timeStart=performance.now(),0===this.keyFrameIdx&&this.triggerKeyFrameCallback(0),this.updateCameraToFrame(this.keyFrameIdx),this.count=0;else if(a>this.count){this.count+n>a&&(n=a-this.count);var s=this.count/a,l=this.roam.keyFrameList[this.keyFrameIdx].quaternion,c=this.roam.keyFrameList[this.keyFrameIdx+1].quaternion;A.copy(c),l.equals(c)||f.slerp(l,c,A,s);var h=this.roam.keyFrameList[this.keyFrameIdx];t.subVectors(h.target,h.position),t.applyQuaternion(e.copy(l).inverse()),t.applyQuaternion(A),i.set(0,1,0),i.applyQuaternion(A);var d=this.roam.getPositionAtCurve(this.keyFrameIdx,s);if(d)this.camera.position.copy(d);else{var p=this.roam.getDeltaOffset(this.keyFrameIdx);o.copy(p).multiplyScalar(n),this.camera.position.add(o)}if(this.camera.target.addVectors(this.camera.position,t),this.camera.up.copy(i),a>this.count+n)this.count+=n;else{this.keyFrameIdx+=1;var g=this.roam.getLatestPositionAtCurve(this.keyFrameIdx);g&&this.camera.position.copy(g),this.triggerKeyFrameCallback(this.keyFrameIdx),this.count=0}}this.viewer.render()}}(),iB.prototype.play=function(){this.bPause=!1,this._play()},iB.prototype.pause=function(){this.bPause=!0},iB.prototype.continue=function(){this.bContinue=!0,this.bPause=!1,this._play()},iB.prototype.stop=function(){this.bPause=!1,this.keyFrameIdx=0,this.count=-1,clearTimeout(this.reqid),this.triggerStopPlayCallback()},iB.prototype.startFrom=function(A){for(var e=this.roam,t=e.getKeyFrameCount(),i=e.getKeyFrames(),o=0;t>o;o+=1)if(i[o].id===A)return this.keyFrameIdx=o,void(this.count=-1)},iB.prototype.addKeyFrameCallback=function(A){this.keyFrameCallback.push(A)},iB.prototype.addPausePlayCallback=function(A){this.pausePlayCallback.push(A)},iB.prototype.addStopPlayCallback=function(A){this.stopPlayCallback.push(A)},iB.prototype.triggerKeyFrameCallback=function(A){this.keyFrameCallback.forEach((function(e){e(A)}))},iB.prototype.triggerPausePlayCallback=function(){this.pausePlayCallback.forEach((function(A){A()}))},iB.prototype.triggerStopPlayCallback=function(){this.stopPlayCallback.forEach((function(A){A()}))},iB.prototype.updataSpline=function(){var A=this.roam.getKeyFramePositions(),e=this.roam.getParameters();this.spline=new la(A,e.closed,e.curveType,e.tension)};var oB=function(){this.roamList=[]};oB.prototype.clear=function(){this.roamList=[]},oB.prototype.add=function(A){this.roamList.push(A)},oB.prototype.remove=function(A){for(var e=0,t=this.roamList.length;t>e;e+=1){if(this.roamList[e].getName()===A)return void this.roamList.splice(e,1)}},oB.prototype.save=function(){return JSON.stringify(this.roamList)},oB.prototype.load=function(A){this.clear();for(var e=JSON.parse(A),t=0,i=e.length;i>t;t+=1){var o=new tB({name:e[t].name,keyFrameList:e[t].keyFrameList,parameters:e[t].parameters,roamTime:e[t].roamTime,type:e[t].type,fps:e[t].fps});this.add(o)}return this.roamList};var nB=function(A,e){this.coordinateSystem=A,this.viewer=A.viewer,this.drawingImpl=e,this.viewportOffset=this.viewer.domElement.getBoundingClientRect(),this.cameraControl=this.viewer.cameraControl,this.fillClipPlane=this.viewer.getScene().getFillClipPlane(),this.initialize()};nB.prototype.initialize=function(){this.arrowMouseDown=!1,this.circleXMouseDown=!1,this.circleYMouseDown=!1,this.firstClickDown=!0,this.firstRotate=!0,this.lineOut=!0,this.arrowOut=!0,this.translateStartPt=new s,this.translateEndPt=new s,this.rotateAngleA=0,this.rotateAngleB=0,this.config=this.coordinateSystem.config},nB.prototype.registerArrowEvents=function(){var A=this.drawingImpl.getDrawable("axisZ"),e=this,t=this.config.colors;A.onmouseover=function(){!0!==e.circleXMouseDown&&!0!==e.circleYMouseDown&&(e.drawingImpl.setColor("axisZ",t.highLight),e.drawingImpl.fill("arrow",t.highLight),e.drawingImpl.setColor("tipArcX",t.default),e.drawingImpl.fill("cubeX",t.default),e.drawingImpl.setColor("tipArcY",t.default),e.drawingImpl.fill("cubeY",t.default),e.lineOut=!1)},A.onmouseout=function(){!0!==e.circleXMouseDown&&!0!==e.circleYMouseDown&&!1===e.arrowMouseDown&&!0===e.arrowOut&&(e.drawingImpl.setColor("axisZ",t.arrow),e.drawingImpl.fill("arrow",t.arrow),e.drawingImpl.setColor("tipArcX",t.tipArcX),e.drawingImpl.fill("cubeX",t.cubeX),e.drawingImpl.setColor("tipArcY",t.tipArcY),e.drawingImpl.fill("cubeY",t.cubeY),e.lineOut=!0)},A.onmousedown=function(A){e.arrowMouseDown=!0,e.lineOut=!1;var t=e.config.colors;e.drawingImpl.setColor("axisZ",t.highLight),e.drawingImpl.fill("arrow",t.highLight),e.coordinateSystem.colorUpdate=!1,e.translateStartPt.set(A.clientX,A.clientY)};var i=this.drawingImpl.getDrawable("arrow");i.onmouseover=function(){if(!0!==e.circleXMouseDown&&!0!==e.circleYMouseDown){e.arrowOut=!1;var A=e.config.colors;e.drawingImpl.fill("arrow",A.highLight),e.drawingImpl.setColor("axisZ",A.highLight),e.drawingImpl.setColor("tipArcX",A.default),e.drawingImpl.fill("cubeX",A.default),e.drawingImpl.setColor("tipArcY",A.default),e.drawingImpl.fill("cubeY",A.default)}},i.onmouseout=function(){if(!0!==e.circleXMouseDown&&!0!==e.circleYMouseDown&&!1===e.arrowMouseDown&&!0===e.lineOut){e.arrowOut=!0;var A=e.config.colors;e.drawingImpl.setColor("axisZ",A.arrow),e.drawingImpl.fill("arrow",A.arrow),e.drawingImpl.setColor("tipArcX",A.tipArcX),e.drawingImpl.fill("cubeX",A.cubeX),e.drawingImpl.setColor("tipArcY",A.tipArcY),e.drawingImpl.fill("cubeY",A.cubeY)}},i.onmousedown=function(A){e.arrowMouseDown=!0,e.arrowOut=!1;var t=e.config.colors;e.drawingImpl.setColor("axisZ",t.highLight),e.drawingImpl.fill("arrow",t.highLight),e.translateStartPt.set(A.clientX,A.clientY)},document.onmousemove=function(A){if(!0===e.arrowMouseDown){if(!(A.clientX===e.translateStartPt.x&&A.clientY===e.translateStartPt.y)){var t=e.fillClipPlane.renderClipPlane,i=t.normal.clone();i.w=t.constant;var o=e.cameraControl.movePlane(i,A,e.translateStartPt,!1,e.fillClipPlane.position.clone());null!==o&&e.fillClipPlane.offset(o),e.translateStartPt.set(A.clientX,A.clientY),e.cameraControl.update(!0)}e.coordinateSystem.update();var n=e.config.colors;e.drawingImpl.setColor("axisZ",n.highLight),e.drawingImpl.fill("arrow",n.highLight),e.drawingImpl.setColor("tipArcX",n.default),e.drawingImpl.fill("cubeX",n.default),e.drawingImpl.setColor("tipArcY",n.default),e.drawingImpl.fill("cubeY",n.default),A.preventDefault(),A.stopPropagation()}},document.onmouseup=function(){if(!1!==e.arrowMouseDown){e.arrowMouseDown=!1,e.coordinateSystem.colorUpdate=!0;var A=e.config.colors;e.drawingImpl.setColor("axisZ",A.arrow),e.drawingImpl.fill("arrow",A.arrow),e.drawingImpl.setColor("tipArcX",A.tipArcX),e.drawingImpl.fill("cubeX",A.cubeX),e.drawingImpl.setColor("tipArcY",A.tipArcY),e.drawingImpl.fill("cubeY",A.cubeY),vc.ClippingCaps=!0,e.viewer.render()}}},nB.prototype.registerCircleXEvents=function(){var A=this,e=this.config.colors,t=this.drawingImpl.getDrawable("tipArcX");t.onmousedown=function(){A.circleXMouseDown=!0,A.drawingImpl.setColor("axisZ",e.default),A.drawingImpl.fill("arrow",e.default),A.enableCircleXMovement()},t.onmouseout=function(){!1===A.circleXMouseDown&&(A.drawingImpl.setColor("axisZ",e.arrow),A.drawingImpl.fill("arrow",e.arrow),A.drawingImpl.setColor("tipArcY",e.tipArcY),A.drawingImpl.fill("cubeY",e.cubeY),A.coordinateSystem.circleToArc("tipArcX"))},document.addEventListener("mouseup",(function(){!0===A.circleXMouseDown&&(vc.ClippingCaps=!0,A.viewer.render()),A.circleXMouseDown=!1,A.firstClickDown=!0,A.firstRotate=!1,A.lastRotateX=0,A.lastRotateY=0,A.drawingImpl.show("tipArcY",!0),A.drawingImpl.show("axisY",!0),A.drawingImpl.show("axisZ",!0),A.drawingImpl.show("cubeY",!0),A.coordinateSystem.update(),A.drawingImpl.show("dashLineX",!1),A.drawingImpl.setColor("axisZ",e.arrow),A.drawingImpl.fill("arrow",e.arrow)}))},nB.prototype.registerCircleYEvents=function(){var A=this,e=this.config.colors,t=this.drawingImpl.getDrawable("tipArcY");t.onmousedown=function(){A.circleYMouseDown=!0,A.drawingImpl.setColor("axisZ",e.default),A.drawingImpl.fill("arrow",e.default),A.enableCircleYMovement()},t.onmouseout=function(){!1===A.circleYMouseDown&&(A.drawingImpl.setColor("axisZ",e.arrow),A.drawingImpl.fill("arrow",e.arrow),A.coordinateSystem.circleToArc("tipArcY"),A.drawingImpl.setColor("tipArcX",e.tipArcX),A.drawingImpl.fill("cubeX",e.cubeX))},document.addEventListener("mouseup",(function(){!0===A.circleYMouseDown&&(vc.ClippingCaps=!0,A.viewer.render()),A.circleYMouseDown=!1,A.drawingImpl.show("tipArcX",!0),A.drawingImpl.show("cubeX",!0),A.coordinateSystem.update(),A.drawingImpl.show("dashLineY",!1),A.drawingImpl.setColor("axisZ",e.arrow),A.drawingImpl.fill("arrow",e.arrow)}))},nB.prototype.enableCircleXMovement=function(){var A=this,e=this.config.colors;document.addEventListener("mousemove",(function(t){if(!0===A.circleXMouseDown){A.drawingImpl.show("dashLineX",!0),A.drawingImpl.setColor("axisZ",e.default),A.drawingImpl.fill("arrow",e.default),vc.ClippingCaps=!1;var i=A.fillClipPlane.normalIndex,o=A.viewportOffset,n=new s(t.clientX-o.left,t.clientY-o.top),r=A.calcRotateAngleIndex(n,A.coordinateSystem.discretePointsX);!0===A.firstClickDown&&(A.lastIndex=r);var a=2*(r-A.lastIndex);i>3&&(a=-a),A.drawingImpl.show("tipArcY",!1),A.coordinateSystem.updateAxisZ();var l=A.fillClipPlane.renderClipPlane.normal.clone(),c=A.coordinateSystem.getCoordinateAxis(),h=A.config.styles;A.coordinateSystem.drawClipPlaneCircle("tipArcZ",c.start.clone(),h.auxCircleRadius,A.coordinateSystem.dirX,l);var d=A.coordinateSystem.drawingToCanvas(c.start.clone()),p=A.coordinateSystem.drawingToCanvas(c.endY.clone());A.coordinateSystem.drawAxisY(d,p,e.highLight),A.coordinateSystem.drawCubeX("cubeX",p,h.cubeRadius),A.drawingImpl.show("cubeY",!1);var g="x";2>i&&(g="y"),A.fillClipPlane.rotateAngleOffset(a,g),A.coordinateSystem.backwardCoordinate(),!0===A.firstClickDown?A.firstClickDown=!1:A.lastIndex=r,A.translateStartPt.set(t.clientX,t.clientY),A.viewer.render(),t.preventDefault(),t.stopPropagation()}}))},nB.prototype.enableCircleYMovement=function(){var A=this,e=this.config.colors;document.addEventListener("mousemove",(function(t){if(!0===A.circleYMouseDown){A.drawingImpl.show("dashLineY",!0),A.drawingImpl.setColor("axisZ",e.default),A.drawingImpl.fill("arrow",e.default),vc.ClippingCaps=!1;var i=A.fillClipPlane.normalIndex,o=A.viewportOffset,n=new s(t.clientX-o.left,t.clientY-o.top),r=A.calcRotateAngleIndex(n,A.coordinateSystem.discretePointsY);!0===A.firstClickDown&&(A.lastIndex=r);var a=2*(r-A.lastIndex);i>3&&(a=-a),A.drawingImpl.show("tipArcX",!1),A.coordinateSystem.updateAxisZ();var l=A.fillClipPlane.renderClipPlane.normal.clone(),c=A.coordinateSystem.getCoordinateAxis(),h=A.config.styles;A.coordinateSystem.drawClipPlaneCircle("tipArcZ",c.start.clone(),h.auxCircleRadius,A.coordinateSystem.dirX.clone(),l.clone());var d=A.coordinateSystem.drawingToCanvas(c.start.clone()),p=A.coordinateSystem.drawingToCanvas(c.endX.clone());A.coordinateSystem.drawAxisX(d,p,e.highLight),A.coordinateSystem.drawCubeY("cubeY",p,h.cubeRadius),A.drawingImpl.show("cubeX",!1);var g="z";i>3&&(g="y"),A.fillClipPlane.rotateAngleOffset(a,g),A.coordinateSystem.backwardCoordinate(),!0===A.firstClickDown?A.firstClickDown=!1:A.lastIndex=r,A.translateStartPt.set(t.clientX,t.clientY),A.viewer.render(),t.preventDefault(),t.stopPropagation()}}))},nB.prototype.registerTipArcXEvents=function(){var A=this,e=this.config.colors,t=this.drawingImpl.getDrawable("tipArcX");t.onmouseover=function(){!1===A.circleYMouseDown&&(A.coordinateSystem.arcToCircle("tipArcX"),A.drawingImpl.setColor("tipArcY",e.default),A.drawingImpl.fill("cubeY",e.default),A.drawingImpl.setColor("axisZ",e.default),A.drawingImpl.fill("arrow",e.default),A.registerCircleXEvents())},t.onmouseout=function(){!1===A.circleXMouseDown&&A.coordinateSystem.circleToArc("tipArcX")}},nB.prototype.registerTipArcYEvents=function(){var A=this,e=this.config.colors,t=this.drawingImpl.getDrawable("tipArcY");t.onmouseover=function(){!1===A.circleXMouseDown&&(A.coordinateSystem.arcToCircle("tipArcY"),A.drawingImpl.setColor("tipArcX",e.default),A.drawingImpl.fill("cubeX",e.default),A.drawingImpl.setColor("axisZ",e.default),A.drawingImpl.fill("arrow",e.default),A.registerCircleYEvents())},t.onmouseout=function(){!1===A.circleYMouseDown&&A.coordinateSystem.circleToArc("tipArcY")}},nB.prototype.calcRotateAngleIndex=function(A,e){for(var t=this.createLine(A,this.coordinateSystem.cOrigin),i=-1,o=Number.POSITIVE_INFINITY,n=0;90>n;n+=1){var r=e[n].clone(),a=this.disPointToLine(r,t);o>a&&(o=a,i=n)}var s=90+i,l=e[i].clone().distanceTo(A);return e[s].clone().distanceTo(A)>l?i:s},nB.prototype.createLine=function(A,e){var t={};if(A.x===e.x)t.A=1,t.B=0,t.C=-A.x;else{var i=(e.y-A.y)/(e.x-A.x),o=e.y-i*e.x;t.A=i,t.B=-1,t.C=o}return t},nB.prototype.disPointToLine=function(A,e){return Math.abs(e.A*A.x+e.B*A.y+e.C)/Math.sqrt(e.A*e.A+e.B*e.B)};var rB=function(){return{colors:{tipArcX:"#0000FF",cubeX:"#0000FF",tipArcY:"#FF0000",cubeY:"#FF0000",highLight:"#FFFF00",tipLine:"#4dc0ff",arrow:"#4dc0ff",default:"#A9A9A9"},styles:{dashArray:"10 8",originRadius:5,auxCircleRadius:.1,tipLineLength:.1,cubeRadius:5,axisXWidth:2,axisYWidth:2,axisZWidth:3,axisXLength:.1,axisYLength:.1,axisZLength:.14,segments:180,tipArcLeftCounts:45,tipArcRightCounts:45}}},aB=function(A,e){this.coordinateSystem=A,this.viewer=e,this.container=this.viewer.domElement.querySelector("div:first-child"),this.mapDrawables={},this.initialize()};aB.prototype.initialize=function(){this.xmlns="http://www.w3.org/2000/svg";var A=document.createElement("div");A.style.left="0px",A.style.top="0px",A.style.width=this.container.offsetWidth+"px",A.style.height=this.container.offsetHeight+"px",A.style.position="absolute",this.group=document.createElementNS(this.xmlns,"svg"),this.group.setAttribute("width",String(this.container.offsetWidth)),this.group.setAttribute("height",String(this.container.offsetHeight)),A.appendChild(this.group),this.container.appendChild(A)},aB.prototype.makeCircle=function(A,e){var t=this.mapDrawables;void 0===t[A]&&(t[A]=document.createElementNS(this.xmlns,"circle"),this.group.appendChild(t[A]));var i=t[A];i.style.fill=e.color||"#FF0000",i.setAttribute("r",String(e.radius)),i.setAttribute("transform","translate("+e.center.x+","+e.center.y+")")},aB.prototype.show=function(A,e){var t=this.getDrawable(A);t&&(t.style.display=e?"block":"none")},aB.prototype.fill=function(A,e){this.getDrawable(A).style.fill=e?"block":"none"},aB.prototype.makeLine=function(A,e){var t=this.mapDrawables;void 0===t[A]&&(t[A]=document.createElementNS(this.xmlns,"line"),this.group.appendChild(t[A]));var i=t[A];i.setAttribute("stroke",e.color||"#000000"),i.setAttribute("stroke-width",e.width||3),i.setAttribute("x1",String(e.start.x)),i.setAttribute("y1",String(e.start.y)),i.setAttribute("x2",String(e.end.x)),i.setAttribute("y2",String(e.end.y))},aB.prototype.makeDashLine=function(A,e){this.makeLine(A,e),this.mapDrawables[A].setAttribute("stroke-dasharray",e.dashArray)},aB.prototype.makePolyline=function(A,e){var t=null,i=this.mapDrawables;void 0===i[A]&&(i[A]=document.createElementNS(this.xmlns,"polyline"),this.group.appendChild(i[A])),(t=i[A]).setAttribute("stroke",e.color||"#A9A9A9"),t.setAttribute("stroke-width",e.width||3),t.style.fill="none",t.setAttribute("points",e.points)},aB.prototype.makeDefs=function(A){var e=this.mapDrawables;void 0===e[A]&&(e[A]=document.createElementNS(this.xmlns,"defs"),void 0===e.marker&&(e.marker=this.makeMarker(),e[A].appendChild(e.marker)),this.group.appendChild(e[A]))},aB.prototype.makeMarker=function(){var A=document.createElementNS(this.xmlns,"marker");A.setAttribute("id","arrow"),A.setAttribute("viewBox","0 0 10 10"),A.setAttribute("refX","5"),A.setAttribute("refY","5"),A.setAttribute("markerWidth","6"),A.setAttribute("markerHeight","6"),A.setAttribute("orient","auto-start-reverse");var e=document.createElementNS(this.xmlns,"path");return e.setAttribute("d","M 0 0 L 10 5 L 0 10 z"),e.style.fill="#11DAB7",this.mapDrawables.arrow=e,A.appendChild(e),A},aB.prototype.getDrawable=function(A){return this.mapDrawables[A]},aB.prototype.attach=function(){this.getDrawable("axisZ").setAttribute("marker-end","url(#arrow)")},aB.prototype.setColor=function(A,e){this.getDrawable(A).setAttribute("stroke",e)},aB.prototype.fill=function(A,e){this.getDrawable(A).style.fill=e},aB.prototype.hideAll=function(A){this.group.style.display=!0===A?"none":"block"},aB.prototype.destroy=function(){for(var A=this.group.children,e=0;A.length>e;e+=1)this.group.removeChild(A[e]);this.group.parentNode.removeChild(this.group)};var sB=function(A){this.viewer=A,this.enable=!0,this.cameraControl=A.cameraControl,this.fillClipPlane=A.getScene().getFillClipPlane(),this.container=A.domElement.querySelector("div:first-child"),this.config=new rB,this.drawingImpl=new aB(this,A),this.coordinateAction=new nB(this,this.drawingImpl),this.initialize()};sB.prototype.initialize=function(){this.enable=!0,this.boundingBox=new Ps,this.bRegisterArrowEvent=!1,this.bRegisterAuxCircleEvent=!1,this.mapDrawableName={ORIGIN:"origin",AXISX:"axisX",AXISY:"axisY",CUBEX:"cubeX",CUBEY:"cubeY",AXISZ:"axisZ",ARROW:"arrow",DASHLINE:"dashLine",TIPARC_X:"tipArcX",TIPARC_Y:"tipArcY",TIPARC_Z:"tipArcZ",DASHLINE_X:"dashLineX",DASHLINE_Y:"dashLineY"}},sB.prototype.saveTransform=function(A){this.savedCamera=A.clone()},sB.prototype.drawingToCanvas=function(A){var e=Rd.drawingToCanvas(this.cameraControl.camera,A,this.container.offsetWidth,this.container.offsetHeight);return new s(e.x,e.y)},sB.prototype.getCoordinateAxis=function(){var A=this.fillClipPlane.renderClipPlane.normal.clone(),e=this.fillClipPlane.getCoordinate(),t=e.axisY.clone(),i=A.clone().cross(t.clone());this.fillClipPlane.normalIndex>3&&(t=(i=e.axisX.clone()).clone().cross(A.clone()));var o=this.config.styles,n=this.fillClipPlane.position.clone(),r=this.cameraControl.getCamera().position.clone().sub(n).length(),a=n.clone().add(i.clone().multiplyScalar(o.axisXLength*r)),s=n.clone().add(t.clone().multiplyScalar(o.axisYLength*r)),l=n.clone().add(A.clone().multiplyScalar(o.axisZLength*r));return this.dirX=i,this.dirY=t,{start:n,endX:a,endY:s,endZ:l}},sB.prototype.drawOrigin=function(A,e){this.drawingImpl.makeCircle(this.mapDrawableName.ORIGIN,{center:A,radius:e,color:this.config.colors.default})},sB.prototype.drawAxisX=function(A,e,t){this.drawingImpl.makeLine(this.mapDrawableName.AXISX,{start:A,end:e,width:this.config.styles.axisXWidth,color:t||this.config.colors.default})},sB.prototype.drawAxisY=function(A,e,t){var i=this.config;this.drawingImpl.makeLine(this.mapDrawableName.AXISY,{start:A,end:e,width:i.styles.axisYWidth,color:t||i.colors.default})},sB.prototype.drawAxisZ=function(A,e){var t=this.config;this.drawingImpl.makeLine(this.mapDrawableName.AXISZ,{start:A,end:e,width:t.styles.axisZWidth,color:t.colors.arrow}),this.drawingImpl.attach(),!1===this.bRegisterArrowEvent&&(this.coordinateAction.registerArrowEvents(),this.bRegisterArrowEvent=!0)},sB.prototype.updateAxisZ=function(){var A=this.getCoordinateAxis(),e=this.drawingToCanvas(A.start.clone()),t=this.drawingToCanvas(A.endZ.clone());this.drawingImpl.makeLine(this.mapDrawableName.AXISZ,{start:e,end:t,color:this.config.colors.default})},sB.prototype.drawArrow=function(A,e){var t=this.mapDrawableName;this.drawingImpl.makeLine(t.AXISZ,{start:A,end:e}),this.drawingImpl.attach(),this.drawingImpl.setColor(t.AXISZ,this.config.colors.default),!1===this.bRegisterArrowEvent&&(this.coordinateAction.registerArrowEvents(),this.bRegisterArrowEvent=!0)},sB.prototype.drawClipPlaneCircle=function(A,e,t,i,o){for(var n={center:e.clone(),radius:t,normal:i.clone(),rotateAxis:o.clone()},r=this.config.styles.segments,a=this.discreteCircle(n,r),s="",l=0;r>l;l+=1)s+=a[l].x+","+a[l].y,s+=" ";s+=a[0].x+","+a[0].y,this.drawingImpl.makePolyline(A,{points:s+=" ",color:this.config.colors.default,width:2})},sB.prototype.drawTipArc=function(A,e,t,i,o){var n={center:e.clone(),radius:t,normal:i.clone(),rotateAxis:o.clone()},r=this.config.styles,a=r.tipArcRightCounts,s=r.tipArcLeftCounts,l=r.segments,c=this.discreteCircle(n,l);A===this.mapDrawableName.TIPARC_X?(this.discretePointsX=c,a=r.tipArcLeftCounts,s=r.tipArcRightCounts):this.discretePointsY=c;for(var h="",d=l-a-1;l>d;d+=1)h+=c[d].x+","+c[d].y,h+=" ";for(var p=0;s>=p;p+=1)h+=c[p].x+","+c[p].y,h+=" ";var g={points:h,color:this.config.colors.tipArcX};A===this.mapDrawableName.TIPARC_X?(this.drawingImpl.makePolyline(A,g),this.coordinateAction.registerTipArcXEvents()):A===this.mapDrawableName.TIPARC_Y&&(g.color=this.config.colors.tipArcY,this.drawingImpl.makePolyline(A,g),this.coordinateAction.registerTipArcYEvents())},sB.prototype.drawTipLine=function(A,e,t){var i=this.drawingToCanvas(e.clone()),o=this.drawingToCanvas(t.clone()),n=this.config;this.drawingImpl.makeDashLine(A,{start:i,end:o,color:n.colors.tipLine,dashArray:n.styles.dashArray}),this.drawingImpl.show(A,!1)},sB.prototype.drawCubeX=function(A,e,t){this.drawingImpl.makeCircle(A,{center:e,radius:t,color:this.config.colors.cubeX})},sB.prototype.drawCubeY=function(A,e,t,i){this.drawingImpl.makeCircle(A,{center:e,radius:t,color:i||this.config.colors.cubeY})},sB.prototype.discreteCircle=function(A,e){for(var t=A.center.clone(),i=A.radius,o=A.rotateAxis.clone(),n=A.normal.clone(),r=[],a=0;e>a;a+=1){n.applyAxisAngle(o,2*Math.PI/e);var s=t.clone().add(n.clone().multiplyScalar(i)),l=this.drawingToCanvas(s.clone());r.push(l)}return r},sB.prototype.arcToCircle=function(A){var e="",t=this.discretePointsX;A===this.mapDrawableName.TIPARC_Y&&(t=this.discretePointsY);for(var i=0,o=t.length;o>i;i+=1)e+=t[i].x+","+t[i].y,e+=" ";e+=t[0].x+","+t[0].y,this.drawingImpl.makePolyline(A,{points:e+=" ",color:this.config.colors.highLight})},sB.prototype.circleToArc=function(A){var e=this.config.styles,t=e.tipArcLeftCounts,i=e.tipArcRightCounts,o=e.segments,n=this.discretePointsX,r={color:this.config.colors.tipArcX};A===this.mapDrawableName.TIPARC_Y&&(n=this.discretePointsY,r.color=this.config.colors.tipArcY,t=e.tipArcRightCounts,i=e.tipArcLeftCounts);for(var a="",s=o-t-1;o>s;s+=1)a+=n[s].x+","+n[s].y,a+=" ";for(var l=0;i>=l;l+=1)a+=n[l].x+","+n[l].y,a+=" ";r.points=a,this.drawingImpl.makePolyline(A,r)},sB.prototype.update=function(){if(this.enable){var A=this.fillClipPlane.position.clone(),e=this.cameraControl.getCamera().position.clone().sub(A).length(),t=this.getCoordinateAxis(),i=this.drawingToCanvas(t.start.clone()),o=this.drawingToCanvas(t.endX.clone()),n=this.drawingToCanvas(t.endY.clone()),r=this.drawingToCanvas(t.endZ.clone());void 0===this.createRefs&&(this.drawingImpl.makeDefs("refs"),this.createRefs=!0),this.cOrigin=i.clone(),this.drawAxisZ(i,r),this.drawAxisX(i,o),this.drawAxisY(i,n);var a=this.config.styles,s=this.mapDrawableName,l=this.fillClipPlane.renderClipPlane.normal.clone();this.drawClipPlaneCircle(s.TIPARC_Z,t.start.clone(),a.auxCircleRadius*e,this.dirX,l),this.drawTipArc(s.TIPARC_X,t.start.clone(),a.auxCircleRadius*e,l,this.dirX),this.drawTipArc(s.TIPARC_Y,t.start.clone(),a.auxCircleRadius*e,l,this.dirY);var c=t.start.clone().add(this.dirX.clone().multiplyScalar(a.tipLineLength*e)),h=t.start.clone().sub(this.dirX.clone().multiplyScalar(a.tipLineLength*e));this.drawTipLine(s.DASHLINE_X,c,h);var d=t.start.clone().add(this.dirY.clone().multiplyScalar(a.tipLineLength*e)),p=t.start.clone().sub(this.dirY.clone().multiplyScalar(a.tipLineLength*e));this.drawTipLine(s.DASHLINE_Y,d,p),this.drawOrigin(i,a.originRadius);var g=this.discretePointsX[44].clone();this.drawCubeX(s.CUBEX,g,a.cubeRadius);var u=this.discretePointsY[134].clone();this.drawCubeY(s.CUBEY,u,a.cubeRadius),this.updateBbox()}else this.hide(!0)},sB.prototype.hide=function(A){this.drawingImpl.hideAll(A)},sB.prototype.enabled=function(A){this.enable=A},sB.prototype.destroy=function(){this.drawingImpl.destroy()},sB.prototype.updateBbox=function(){this.boundingBox.makeEmpty();for(var A=0;this.discretePointsX.length>A;A+=1){var e=this.discretePointsX[A].clone();this.boundingBox.expandByPoint(e)}for(A=0;this.discretePointsY.length>A;A+=1){e=this.discretePointsY[A].clone();this.boundingBox.expandByPoint(e)}var t=this.getCoordinateAxis(),i=this.drawingToCanvas(t.start.clone()),o=this.drawingToCanvas(t.endZ.clone());this.boundingBox.expandByPoint(i),this.boundingBox.expandByPoint(o),this.boundingBox.expandByScalar(5)},sB.prototype.insideBoundingBox=function(A){return this.boundingBox.containsPoint(A.clone())},sB.prototype.backwardCoordinate=function(){var A=this.cameraControl.camera.position,e=this.cameraControl.camera.target.clone().sub(A.clone()).normalize(),t=this.fillClipPlane.renderClipPlane.normal.clone();e.angleTo(t);Math};var lB={Forward:0,Reverse:1},cB={X:0,Y:4,Z:2},hB=function(A){var e=A.viewer;if(e){if(e._sectionBox&&e._sectionBox.exit(),e._sectionPlane)return e._sectionPlane;e._sectionPlane=this,this.id=A.id,this._opt=A,this.mode=A.mode,this._plane=A.plane,this._direction=A.direction,this._progress=A.progress,this.init(),this.setPlane(A.plane)}else Bh.log("domElement must not be empty.")};hB.prototype={init:function(){this.enableCoordinate=!0;var A=this._opt.viewer.getViewerImpl();this.coordinateSystem=new sB(A),A.controlManager.enableTool(A,Pc.CLIP_FILL),this._sectionTool=A.getScene().getFillClipPlane(),this._sectionTool.enable(!0,!0),this.hookEvens()},hookEvens:function(){var A=this,e=this.coordinateSystem,t=this._opt.viewer.getViewerImpl();t.getDomElement();t.registerEventListener(Rc.ON_CLIP_HOVER,(function(t){if(!1!==A.enableCoordinate)if(t.onClipPlane)e.enable&&(e.update(),e.hide(!1));else{var i=new s(t.event.clientX,t.event.clientY);e.insideBoundingBox(i)?e.hide(!1):e.hide(!0)}})),t.registerEventListener(Rc.ON_CLIP_MOUSE_DOWN,(function(A){})),t.registerEventListener(Rc.ON_CLIP_MOUSE_MOVE,(function(A){e.update()})),t.registerDomEventListener(Rc.ON_CONTROL_ZOOM,(function(A){e.update()}))},exit:function(){var A=this._opt.viewer.getViewerImpl(),e=A.getScene().getFillClipPlane();A.controlManager.disableTool(Pc.CLIP_FILL),e.enable(!1,!1),this.coordinateSystem.destroy(),this._sectionTool=null,this._opt.viewer._sectionPlane=null},setProgress:function(A){var e=1-A/50;this._progress=A,this._sectionTool.setProcess(e)},getProgress:function(){return 50*(1-this._sectionTool.getProcess())},setPlane:function(A){var e=lB[this._direction]+cB[A];this._plane=A,this._sectionTool.changeNormal(e),this.setProgress(this._opt.progress)},getPlane:function(){return this._plane},setDirection:function(A){var e=lB[A]+cB[this._plane];this._direction=A,this._sectionTool.changeNormal(e),this.setProgress(this._opt.progress)},getDirection:function(){return this._direction},setRotateAngle:function(A,e){this._sectionTool.setRotateAngle(A,e)},getRotateAngle:function(){return this._sectionTool.getRotateAngle()},hidePlane:function(){this._sectionTool.visible=!1,this.enableCoordinate=!1,this.coordinateSystem.hide(!0)},showPlane:function(){this._sectionTool.visible=!0,this.enableCoordinate=!0},reset:function(){this.setPlane(this._opt.plane),this.setDirection(this._opt.direction),this.setProgress(this._opt.progress)},getState:function(){return this._sectionTool.store()},setState:function(A){this._sectionTool.restore(A)}};var dB=function(A){var e=this,t=A;"function"==typeof A.getViewerImpl&&(t=A.getViewerImpl()),this.marks={},this.SelectedMark={},this.components={},this.allOids=[];var i={id:"",name:"mark",scale:20,alwaysVisible:!1,color:[99,99,99],wordColor:[0,0,0],position:[0,0,0]},o=new s,n=0,r=0;function a(A){var e=[0,0];if(A){for(var t=A.target,i=0,o=0;t.offsetParent;)i+=t.offsetLeft,o+=t.offsetTop,t=t.offsetParent;e[0]=A.pageX-i,e[1]=A.pageY-o}else A=window.event,e.x=A.x,e.y=A.y;return e}function l(A){var i=new Dd,n=new y(o.x/t.domElement.clientWidth*2-1,-o.y/t.domElement.clientHeight*2+1,.5);i.setFromCamera(n,t.camera),i.camera=t.camera,i._camera=t.camera;var r=Object.values(e.components),a=i.intersectObjects(r);a&&a.length>0&&e.SelectedMark!==a[0].object?(e.SelectedMark=a[0].object,e.dispatchEvent("updated",{added:{objects:e.SelectedMark}})):(e.SelectedMark={},e.dispatchEvent("updated",{removed:{objects:e.SelectedMark}}))}function c(A){var e=a(A);o.x=n=e[0],o.y=r=e[1]}function h(A){var e=a(A);(e[0]>n?5>e[0]-n:5>n-e[0])&&(e[1]>r?5>e[1]-r:5>r-e[1])&&(o.x=n=e[0],o.y=r=e[1],l())}function p(A){o.x=n=A.changedTouches[0].clientX,o.y=r=A.changedTouches[0].clientY}function g(A){(A.changedTouches[0].clientX>n?5>A.changedTouches[0].clientX-n:5>n-A.changedTouches[0].clientX)&&(A.changedTouches[0].clientY>r?5>A.changedTouches[0].clientY-r:5>r-A.changedTouches[0].clientY)&&(o.x=n=A.changedTouches[0].clientX,o.y=r=A.changedTouches[0].clientY,l())}this.active=!0,e.domElement=t.domElement,this.enabled=function(){this.mousedown=t.domElement.addEventListener("mousedown",c,!1),this.mouseup=t.domElement.addEventListener("mouseup",h,!1)},this.disabled=function(){this.mousedown=t.domElement.removeEventListener("mousedown",c,!1),this.mouseup=t.domElement.removeEventListener("mouseup",h,!1)},this.touchEnabled=function(){this.touchstart=t.domElement.addEventListener("touchstart",p,!1),this.touchend=t.domElement.addEventListener("touchend",g,!1)},this.touchDisabled=function(){this.touchstart=t.domElement.removeEventListener("touchstart",p,!1),this.touchend=t.domElement.removeEventListener("touchend",g,!1)},this.enabled(),this.add=function(A,t){var o=Object.assign({},i,A);if(""!==o.id)for(var n=0;e.allOids.length>n;n+=1)if(o.id===e.allOids[n])return{data:"标签id重复"};(o.position.isVector3||(o.position=new y(o.position[0],o.position[1],o.position[2])),Array.isArray(o.color))&&(o.color="rgb("+o.color[0]+","+o.color[1]+","+o.color[2]+")");Array.isArray(o.wordColor)&&(o.wordColor="rgb("+o.wordColor[0]+","+o.wordColor[1]+","+o.wordColor[2]+")");var r=document.createElement("canvas");r.width=28*o.name.length,r.height=150;var a=r.getContext("2d");a.fillStyle="rgba(255, 255, 255, 0)",a.lineWidth=2,a.strokeStyle=o.color,a.strokeRect(5,0,r.width-5,30),a.moveTo(5,141),a.lineTo(5,30),a.stroke(),a.fillStyle=o.color,a.beginPath(),a.arc(5,145,4,0,2*Math.PI),a.fill(),a.fillRect(10,5,r.width-15,20),a.font="bold 18px Arial",a.fillStyle=o.wordColor,a.textAlign="center",a.fillText(o.name,r.width/2,20);var s=new d(r);s.needsUpdate=!0;var l=new ro({map:s,color:16777215,depthTest:o.alwaysVisible}),c=new vo(l);c.center.x=0,c.center.y=0,c.scale.set(o.scale*l.map.image.width,o.scale*l.map.image.height,1),c.position.copy(o.position),c.updateMatrixWorld(),c.key=""!==o.id?o.id:c.uuid,e.addObjectToScene(o,c),"function"==typeof t&&t(c.key)},this.addObjectToScene=function(A,e){A&&A.id&&e&&(this.components[A.id]=e,this.allOids.push(A.id),this.marks[A.id]=A,t.addExternalObject(A.id,e))},this.updateMark=function(A,i){if(e.marks[A]){var o=Object.assign({},e.marks[A],i),n=this.components[A];if(n){if(o.position.isVector3||(o.position=new y(o.position[0],o.position[1],o.position[2])),Array.isArray(o.color))o.color="rgb("+o.color[0]+","+o.color[1]+","+o.color[2]+")";if(Array.isArray(o.wordColor))o.wordColor="rgb("+o.color[0]+","+o.color[1]+","+o.color[2]+")";var r=document.createElement("canvas");r.width=28*o.name.length,r.height=150;var a=r.getContext("2d");a.fillStyle="rgba(255, 255, 255, 0)",a.lineWidth=2,a.strokeStyle=o.color,a.strokeRect(5,0,r.width-5,30),a.moveTo(5,141),a.lineTo(5,30),a.stroke(),a.fillStyle=o.color,a.beginPath(),a.arc(5,145,4,0,2*Math.PI),a.fill(),a.fillRect(10,5,r.width-15,20),a.font="bold 18px Arial",a.fillStyle=o.wordColor,a.textAlign="center",a.fillText(o.name,r.width/2,20);var s=new d(r);s.needsUpdate=!0;var l=new ro({map:s,color:16777215,depthTest:o.alwaysVisible});n.material=l,n.scale.set(o.scale*n.material.map.image.width,o.scale*n.material.map.image.height,1),n.position.copy(o.position),n.updateMatrixWorld(),t.render(),e.marks[A]=o}}},this.remove=function(A){if(null==A)return{data:"未选中mark"};Array.isArray(A)||(A=[A]);for(var i=0;A.length>i;i+=1){var o=e.allOids.indexOf(A[i]);e.allOids.splice(o,1),delete e.components[A[i]],t.removeExternalObjectByName(A[i])}},this.hide=function(A){if(null==A)return{data:"未选中mark"};Array.isArray(A)||(A=[A]);for(var e=null,t=0;A.length>t;t+=1)(e=this.components[A[t]])&&(e.visible=!1)},this.show=function(A){var t=null;if(A){Array.isArray(A)||(A=[A]);for(var i=0;A.length>i;i+=1)(t=this.components[A[i]])&&(t.visible=!0)}else for(var o in e.components)(t=e.components[o])&&(t.visible=!0)},this.isolation=function(A){if(null==A)return{data:"未选中mark"};if(e.show(),e.allOids.length>0){var t=e.allOids.concat();Array.isArray(A)||(A=[A]);for(var i=0;A.length>i;i+=1){var o=A[i];if(-1===e.allOids.indexOf(o))return{data:"mark不存在"};for(var n=0;t.length>n;n+=1)if(o===t[n]){t.splice(n,1);break}}var r=null;for(n=0;t.length>n;n+=1)(r=e.components[t[n]])&&(r.visible=!1)}},this.listentoSelectMarks=function(A){e.addEventListener("updated",(function(){e.SelectedMark!=={}?A(e.SelectedMark.key?e.SelectedMark.key:e.SelectedMark.uuid,e.SelectedMark):A(null,null)}))}};Object.assign(dB.prototype,Ld.prototype);var pB=function(A){var e=this;this.Marks=new H,A.modelManager.scene.add(e.Marks),this.SelectedMark={},this.components={},this.allOids=[];var t={id:"",name:"mark",scale:20,width:1,height:1,alwaysVisible:!1,useImageSize:!0,color:"#000000",position:[0,0,0]},i=new s,o=0,n=0;function r(A){var e=[0,0];if(A){for(var t=A.target,i=0,o=0;t.offsetParent;)i+=t.offsetLeft,o+=t.offsetTop,t=t.offsetParent;e[0]=A.pageX-i,e[1]=A.pageY-o}else A=window.event,e.x=A.x,e.y=A.y;return e}function a(t){var o=new Dd,n=new y(i.x/A.domElement.clientWidth*2-1,-i.y/A.domElement.clientHeight*2+1,.5);o.setFromCamera(n,A.camera);var r=o.intersectObjects(e.Marks.children);r&&r.length>0&&e.SelectedMark!==r[0].object?(e.SelectedMark=r[0].object,e.dispatchEvent("updated",{added:{objects:e.SelectedMark}})):(e.SelectedMark={},e.dispatchEvent("updated",{removed:{objects:e.SelectedMark}}))}function l(A){var e=r(A);i.x=o=e[0],i.y=n=e[1]}function c(A){var e=r(A);(e[0]>o?5>e[0]-o:5>o-e[0])&&(e[1]>n?5>e[1]-n:5>n-e[1])&&(i.x=o=e[0],i.y=n=e[1],a())}function h(A){i.x=o=A.changedTouches[0].clientX,i.y=n=A.changedTouches[0].clientY}function p(A){(A.changedTouches[0].clientX>o?5>A.changedTouches[0].clientX-o:5>o-A.changedTouches[0].clientX)&&(A.changedTouches[0].clientY>n?5>A.changedTouches[0].clientY-n:5>n-A.changedTouches[0].clientY)&&(i.x=o=A.changedTouches[0].clientX,i.y=n=A.changedTouches[0].clientY,a())}this.active=!0,e.domElement=A.domElement,this.enabled=function(){this.mousedown=A.domElement.addEventListener("mousedown",l,!1),this.mouseup=A.domElement.addEventListener("mouseup",c,!1)},this.disabled=function(){this.mousedown=A.domElement.removeEventListener("mousedown",l,!1),this.mouseup=A.domElement.removeEventListener("mouseup",c,!1)},this.touchEnabled=function(){this.touchstart=A.domElement.addEventListener("touchstart",h,!1),this.touchend=A.domElement.addEventListener("touchend",p,!1)},this.touchDisabled=function(){this.touchstart=A.domElement.removeEventListener("touchstart",h,!1),this.touchend=A.domElement.removeEventListener("touchend",p,!1)},this.enabled(),this.add=function(i,o){var n=Object.assign({},t,i);if(""!==n.id)for(var r=0;e.allOids.length>r;r+=1)if(n.id===e.allOids[r])return{data:"标签id重复"};var a=document.createElement("canvas");a.width=24*n.name.length,a.height=32;var s=a.getContext("2d");s.lineWidth=3,s.strokeStyle="#0000FF",s.strokeRect(0,0,a.width,32),s.fillStyle="#FFFFFF",s.fillRect(3,3,a.width-6,26),s.font=" bold 24px Arial",s.fillStyle=n.color,s.textAlign="center",s.fillText(n.name,a.width/2,26),console.log(a.width);var l=new d(a);l.needsUpdate=!0;var c=new ro({map:l,color:16777215,depthTest:n.alwaysVisible}),h=new vo(c);h.scale.set(n.scale*c.map.image.width,n.scale*c.map.image.height,1),n.position.isVector3?h.position.copy(n.position):h.position.set(n.position[0],n.position[1],n.position[2]),h.updateMatrixWorld(),e.Marks.add(h),A.render(),""!==n.id?(h.key=n.id,e.components[n.id]=h,e.allOids.push(n.id)):(h.key=h.uuid,e.components[h.uuid]=h,e.allOids.push(h.uuid)),"function"==typeof o&&o(h.key)},this.updateMark=function(i,o){var n=Object.assign({},t,o),r=null;if(e.components[i]){r=e.components[i];var a=document.createElement("canvas");a.width=24*n.name.length,a.height=32;var s=a.getContext("2d");s.lineWidth=3,s.strokeStyle="#0000FF",s.strokeRect(0,0,a.width,32),s.fillStyle="#FFFFFF",s.fillRect(3,3,a.width-6,26),s.font=" bold 24px Arial",s.fillStyle=n.color,s.textAlign="center",s.fillText(n.name,a.width/2,26);var l=new d(a);l.needsUpdate=!0;var c=new ro({map:l,color:16777215,depthTest:n.alwaysVisible});r.material=c,r.scale.set(n.scale*r.material.map.image.width,n.scale*r.material.map.image.height,1),n.position.isVector3?r.position.copy(n.position):r.position.set(n.position[0],n.position[1],n.position[2]),r.updateMatrixWorld(),A.render()}},this.remove=function(A){if(null==A)return{data:"未选中mark"};Array.isArray(A)||(A=[A]);for(var t=null,i=0;A.length>i;i+=1){t=e.components[A[i]];var o=e.allOids.indexOf(A[i]);e.allOids.splice(o,1),e.Marks.remove(t)}},this.hide=function(A){if(null==A)return{data:"未选中mark"};Array.isArray(A)||(A=[A]);for(var t=null,i=0;A.length>i;i+=1)(t=e.components[A[i]])&&(t.visible=!1)},this.show=function(A){var t=null;if(A){Array.isArray(A)||(A=[A]);for(var i=0;A.length>i;i+=1)(t=e.components[A[i]])&&(t.visible=!0)}else for(var o in e.components)(t=e.components[o])&&(t.visible=!0)},this.isolation=function(A){if(null==A)return{data:"未选中mark"};if(e.show(),e.allOids.length>0){var t=e.allOids.concat();Array.isArray(A)||(A=[A]);for(var i=0;A.length>i;i+=1){var o=A[i];if(-1===e.allOids.indexOf(o))return{data:"mark不存在"};for(var n=0;t.length>n;n+=1)if(o===t[n]){t.splice(n,1);break}}var r=null;for(n=0;t.length>n;n+=1)(r=e.components[t[n]])&&(r.visible=!1)}},this.listentoSelectMarks=function(A){e.addEventListener("updated",(function(){e.SelectedMark!=={}?A(e.SelectedMark.key?e.SelectedMark.key:e.SelectedMark.uuid,e.SelectedMark):A(null,null)}))}};Object.assign(pB.prototype,Ld.prototype);var gB=function A(){cc(this,A),this.type="circle",this.lineHeight=2,this.color="#ff0000",this.titleColor="#000000",this.titleBackgroundColor="#ff0000",this.lineTitleBackgroundColor="#ffffff"},uB=function(){function A(e,t,i,o,n,r){cc(this,A),this.lineTitle=t,this.icon=o,this.title=i,this.type=e.type,this.lineHeight=e.lineHeight,this.color=e.color,this.titleBackgroundColor=e.titleBackgroundColor,this.titleColor=e.titleColor,this.lineTitleBackgroundColor=e.lineTitleBackgroundColor,this.id=n,this.scenePoint=r,this.rootDiv=void 0,this.lineTitleDiv=void 0,this.contentDiv=void 0,this.lineStartPosition={x:0,y:0},this.lineEndPosition={x:100,y:100},this._iconSize=30,this._marginLeft=10,this._dragStart=this._dragStart.bind(this),this._dragMove=this._dragMove.bind(this),this._dragEnd=this._dragEnd.bind(this),this._lastDragPoint=void 0,this._init()}return dc(A,[{key:"_init",value:function(){this.rootDiv=document.createElement("div"),this.rootDiv.style.cssText="position:absolute; left: 0px; top: 0px;-moz-user-select: none; -webkit-user-select: none; -ms-user-select: none; -khtml-user-select: none; user-select: none;";var A=document.createElementNS("http://www.w3.org/2000/svg","svg");A.setAttribute("xmlns","http://www.w3.org/2000/svg"),A.style.overflow="visible",this.svg=A;var e=document.createElementNS("http://www.w3.org/2000/svg","path");e.style.fill=this.color,this.arrow=e,this.svg.appendChild(e),this.rootDiv.appendChild(A);var t=document.createElement("div");t.style.position="absolute",t.style.backgroundColor="#ffffff",t.style.color=this.titleColor,t.innerText=this.lineTitle,this.lineTitleDiv=t,this.rootDiv.appendChild(t);var i=document.createElement("div");this.contentDiv=i,this.contentDiv.addEventListener("mousedown",this._dragStart);var o=document.createElement("div");if(this.titleDiv=o,o.style.display="inline-block",o.style.color=this.titleColor,o.style.whiteSpace="nowrap",o.style.overflow="hidden",o.style.textOverflow="ellipsis",o.style.maxWidth="150px",o.style.position="absolute",o.style.top="50%",this.icon?"circle"===this.type?(o.style.left="50%",o.style.transform="translate(-50%, 5px)"):(o.style.left="".concat(this._marginLeft+this._iconSize+5,"px"),o.style.transform="translate(0px, -50%)"):(o.style.left="50%",o.style.transform="translate(-50%, -50%)"),o.innerText=this.title,this.contentDiv.appendChild(o),this.icon){var n=document.createElement("img");n.style.width="".concat(this._iconSize,"px"),n.style.height="".concat(this._iconSize,"px"),n.style.position="absolute",n.style.pointerEvents="none","circle"===this.type?(n.style.left="50%",n.style.top="50%",n.style.transform="translate(-50%, -100%)"):(n.style.left="".concat(this._marginLeft,"px"),n.style.top="50%",n.style.transform="translate(0px, -50%)"),n.src=this.icon,this.contentDiv.appendChild(n)}this.rootDiv.appendChild(i)}},{key:"setLineStartPosition",value:function(A,e){this.lineStartPosition.x=A,this.lineStartPosition.y=e,this.update()}},{key:"setLineEndPosition",value:function(A,e){this.lineEndPosition.x=A,this.lineEndPosition.y=e,this.update()}},{key:"setLineStartAndEndPoint",value:function(A,e,t,i){this.lineStartPosition.x=A,this.lineStartPosition.y=e,this.lineEndPosition.x=t,this.lineEndPosition.y=i,this.update()}},{key:"update",value:function(){var A=this.titleDiv.getBoundingClientRect();A.width+=2*this._marginLeft,"rectangle"===this.type&&(this.icon&&(A.width+=this._iconSize,A.width+=5),A.height=40);var e=this.lineEndPosition.x-this.lineStartPosition.x,t=this.lineEndPosition.y-this.lineStartPosition.y,i=Math.atan2(t,e);i>0||(i+=2*Math.PI);var o=i/Math.PI*180,n=Math.sqrt(e*e+t*t);if("circle"===this.type)n-=A.width/2;else{var r=Math.tan(i);Math.abs(r)>A.height/A.width?n-=A.height/2/Math.abs(Math.sin(i)):n-=A.width/2/Math.abs(Math.cos(i))}n=Math.max(15,n);var a=0,s=0,l="M".concat(a," ").concat(s);l+="L".concat(a," ").concat(s-this.lineHeight/2),l+="L".concat(a+n-10," ").concat(s-this.lineHeight/2),l+="A".concat(20," ").concat(20," 0 0 0 ").concat(a+n-15," ").concat(s-this.lineHeight/2-10),l+="L".concat(a+n," ").concat(s),l+="L".concat(a+n-15," ").concat(s+this.lineHeight/2+10),l+="A".concat(20," ").concat(20," 0 0 0 ").concat(a+n-10," ").concat(s+this.lineHeight/2),l+="L".concat(a," ").concat(s+this.lineHeight/2,"Z"),this.arrow.setAttributeNS(null,"d",l);var c="translate(".concat(this.lineStartPosition.x,", ").concat(this.lineStartPosition.y,") rotate(").concat(o,")");this.arrow.setAttributeNS(null,"transform",c);var h=(this.lineStartPosition.y+this.lineEndPosition.y)/2,d="\n left:".concat((this.lineStartPosition.x+this.lineEndPosition.x)/2,"px;top:").concat(h,"px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width:150px;\n position:absolute;\n transform:translate(-50%, -50%);\n background-color: ").concat(this.lineTitleBackgroundColor,";\n ");this.lineTitleDiv.style.cssText=d;var p=this.lineEndPosition.x,g=this.lineEndPosition.y;d="\n background-color:".concat(this.titleBackgroundColor,";\n position: absolute;\n left:").concat(p,"px;\n top:").concat(g,"px;\n transform:translate(-50%,-50%);\n width:").concat(A.width,"px;\n cursor: move;\n "),d+="circle"===this.type?"\n height:".concat(A.width,"px;\n border-radius:").concat(A.width,"px;\n "):"\n height:".concat(A.height,"px;\n border-radius:4px;\n "),this.contentDiv.style.cssText=d}},{key:"_dragStart",value:function(A){0===A.button&&(document.addEventListener("mousemove",this._dragMove),document.addEventListener("mouseup",this._dragEnd),this._lastDragPoint={x:A.clientX,y:A.clientY})}},{key:"_dragMove",value:function(A){if(this._lastDragPoint){var e=A.clientY-this._lastDragPoint.y;this.lineEndPosition.x+=A.clientX-this._lastDragPoint.x,this.lineEndPosition.y+=e,this.update(),this._lastDragPoint.x=A.clientX,this._lastDragPoint.y=A.clientY}else this._lastDragPoint={x:A.clientX,y:A.clientY}}},{key:"_dragEnd",value:function(A){this._lastDragPoint=void 0,document.removeEventListener("mousemove",this._dragMove),document.removeEventListener("mouseup",this._dragEnd)}}]),A}(),fB=function(){function A(e,t){cc(this,A),this.viewer3D=e,this.EIMMODEL=t,this.THREE=t.THREE,this.marks={},this.arrowConfig=new gB,this.flag=1,this.update=this.update.bind(this),e.registerCameraEventListener(this.EIMMODEL.EVENTS.ON_CAMERA_CHANGE,this.update)}return dc(A,[{key:"testData",value:function(){return[{lineTitle:"测试1",title:"测试1胜利大街发",icon:"data:image/png;base64,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",type:"rectangle"},{lineTitle:"测试2",title:"测试2胜利大街发",icon:void 0,type:"rectangle"},{lineTitle:"测试3",title:"测试3胜利大街发",icon:void 0,type:"rectangle"},{lineTitle:"测试4",title:"测试4胜利大街发",icon:"data:image/png;base64,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",type:"circle"},{lineTitle:"测试5",title:"测试5胜利大街发",icon:void 0,type:"rectangle"},{lineTitle:"测试6",title:"测试6胜利大街发",icon:void 0,type:"circle"},{lineTitle:"测试7",title:"测试7胜利大街发",icon:"data:image/png;base64,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",type:"rectangle"}]}},{key:"addMarksAtComponent",value:function(A,e,t){var i=this.viewer3D.getBoxByComponentsKey(A),o=new this.THREE.Vector3;i.getCenter(o);var n=o.toArray(),r=this.viewer3D.getViewerImpl().domElement,a=r.getBoundingClientRect(),s=this.viewer3D.getScreenCoordFromSceneCoord(o),l=e||this.arrowConfig,c=l.type,h=0,d=[s[0]+250,s[1]],p=250,g=0,u=0;this.marks[A]||(this.marks[A]=[]);for(var f=0,m=t.length;m>f;f+=1){var C=t[f];l.type=C.type||c;var y=new uB(l,C.lineTitle,C.title,C.icon,this.flag,n);r.appendChild(y.rootDiv),y.setLineStartAndEndPoint(s[0],s[1],d[0],d[1]);var v=y.contentDiv.getBoundingClientRect();if(f>0){u+=2*Math.asin((v.height/2+h/2)/2/250),u+=.1;var I=Math.cos(u),E=Math.sin(u),B=p*I+g*-E+s[0],x=p*E+g*I+s[1];0>B?B=v.width/2:B>a.width&&(B=a.width-v.width/2),0>x?x=v.height/2:x>a.height&&(x=a.height-v.height/2),y.setLineEndPosition(B,x)}h=v.height,this.flag+=1,this.marks[A].push(y)}}},{key:"addMarkAt",value:function(A,e,t,i,o){var n=parseInt(A.x,10).toString()+"_"+parseInt(A.y,10).toString()+"_"+parseInt(A.z,10).toString(),r=new uB(o||this.arrowConfig,e,t,i,this.flag,A),a=this.viewer3D.getViewerImpl().domElement;a.appendChild(r.rootDiv);var s=a.getBoundingClientRect(),l=this.viewer3D.getScreenCoordFromSceneCoord(A),c=[l[0],l[1]];return l.x>s.width/2?c[0]-=250:c[0]+=250,r.setLineStartAndEndPoint(l[0],l[1],c[0],c[1]),this.flag+=1,this.marks[n]||(this.marks[n]=[]),this.marks[n].push(r),r}},{key:"update",value:function(){var A=this,e=(new Date).getTime();this._lastTime&&e-this._lastTime<25||(this._lastTime=e,Object.keys(this.marks).forEach((function(e){var t=A.marks[e],i=A.viewer3D.getScreenCoordFromSceneCoord(t[0].scenePoint);t.forEach((function(A){A.setLineStartPosition(i[0],i[1])}))})))}},{key:"destroy",value:function(){this.viewer3D.unregisterCameraEventListener(this.EIMMODEL.EVENTS.ON_CAMERA_CHANGE,this.update)}}]),A}(),mB=function(A){this.Measurement={pointMove:new y,pointPick:[],pointPickToScreen:[],pointAssist:[],pointAssistToScreen:[],needUpdatedObjects:[],pickLineP1:new y,pickLineP2:new y,planeSquare:{},planeVolume:{},measureWindow:{}},this.renderer=A.viewerImpl.modelManager.renderer,this.scene=A.viewerImpl.modelManager.scene,this.camera=A.viewerImpl.camera.cameraPerspective,this.cameraControl=A.viewerImpl.cameraControl,this.intersect=null,this.domElement=A.viewerImpl.domElement,this.viewer=A.viewerImpl,this.SVG=document.getElementById("svgid"+A.getViewerImpl().uuid),this.SVGRect=A.SVGRect;var e=this;function t(){e.updatePos()}function i(){var t=A.getScreenCoordFromSceneCoord(e.Measurement.pickLineP1),i=A.getScreenCoordFromSceneCoord(e.Measurement.pickLineP2),o=new s(t[0],t[1]),n=new s(i[0],i[1]);e.SVGRect.createMoveLine(o,n)}this.movePoint=function(t){if(t.pickLine||t.pickPlane||t.pickPoint){e.SVGRect.deleteCircle();var i=A.viewerImpl.cameraControl.screenToCanvas(t.event.clientX,t.event.clientY);e.SVGRect.creatMoveCircle(i);var o=e.cameraControl.getIntersectContext(new s(t.event.clientX,t.event.clientY));if(e.cameraControl.intersector.pick(o,(function(t){for(var o=t.object.geometry,n=o.attributes.position.array,r=o.attributes.position.count,a=0;r>a;a+=1){var s=new y(n[3*a],n[3*a+1],n[3*a+2]);s.applyMatrix4(t.object.matrixWorld);var l=A.getScreenCoordFromSceneCoord(s);15>Math.sqrt((l[0]-i.x)*(l[0]-i.x)+(l[1]-i.y)*(l[1]-i.y))&&(e.Measurement.pointMove=s,e.SVGRect.changeMoveCircleStyle(l))}})),t.pickLine){e.Measurement.pickLineP1=t.pickLine[0],e.Measurement.pickLineP2=t.pickLine[1];var n=A.getScreenCoordFromSceneCoord(t.pickLine[0].clone()),r=A.getScreenCoordFromSceneCoord(t.pickLine[1].clone()),a=new s(n[0],n[1]),l=new s(r[0],r[1]);e.SVGRect.createMoveLine(a,l)}}},this.pickPoint=function(t){if(t.pickLine||t.pickPlane||t.pickPoint){1>e.Measurement.needUpdatedObjects.length||(e.SVGRect.deleteCircle(),e.SVGRect.deleteMoveLine(),e.SVGRect.deleteLineAndCircle(),e.Measurement.pointPick=[],e.Measurement.pointPickToScreen=[],e.Measurement.pointAssist=[],e.Measurement.pointAssistToScreen=[],e.Measurement.needUpdatedObjects=[],e.updatePos());new y,new y,new y,new y;var i=null,o=t.pickPoint,n=(new s).fromArray(A.getScreenCoordFromSceneCoord(o));e.Measurement.pointPick.push(o),e.Measurement.pointPickToScreen.push(n);var r=e.Measurement.pointPickToScreen.length;if(e.SVGRect.creatPickCircle(n,r-1),r%2==0&&r>0){var a=new y(e.Measurement.pointPick[r-1].x,e.Measurement.pointPick[r-2].y,e.Measurement.pointPick[r-2].z),l=new y(e.Measurement.pointPick[r-1].x,e.Measurement.pointPick[r-2].y,e.Measurement.pointPick[r-1].z);e.Measurement.pointAssist.push(a),e.Measurement.pointAssist.push(l);var c=A.getScreenCoordFromSceneCoord(a),h=A.getScreenCoordFromSceneCoord(l),d=new s(c[0],c[1]),p=new s(h[0],h[1]);e.SVGRect.creatLine(e.Measurement.pointPickToScreen[r-2],d,"red","red"+(r-1)),e.SVGRect.creatLine(p,e.Measurement.pointPickToScreen[r-1],"green","green"+(r-1)),e.SVGRect.creatLine(d,p,"blue","blue"+(r-1)),e.SVGRect.creatLine(e.Measurement.pointPickToScreen[r-1],e.Measurement.pointPickToScreen[r-2],"yellow","yellow"+(r-1)),e.Measurement.needUpdatedObjects.push({point1:e.Measurement.pointPick[r-2],point2:e.Measurement.pointPick[r-1],asPot1:e.Measurement.pointAssist[r-2],asPot2:e.Measurement.pointAssist[r-1]});var g=Math.abs(e.Measurement.pointPick[r-1].x-e.Measurement.pointPick[r-2].x),u=Math.abs(e.Measurement.pointPick[r-1].y-e.Measurement.pointPick[r-2].y),f=Math.abs(e.Measurement.pointPick[r-1].z-e.Measurement.pointPick[r-2].z),m=e.Measurement.pointPick[r-1].distanceTo(e.Measurement.pointPick[r-2]);i={dx:g.toFixed(3),dy:u.toFixed(3),dz:f.toFixed(3),dis:m.toFixed(3)}}return i}},this.clear=function(){e.SVGRect.deleteCircle(),e.SVGRect.deleteMoveLine(),e.SVGRect.deleteLineAndCircle(),e.Measurement.pointPick=[],e.Measurement.pointPickToScreen=[],e.Measurement.pointAssist=[],e.Measurement.pointAssistToScreen=[],e.Measurement.needUpdatedObjects=[],e.cameraControl.removeEventListener(Rc.ON_CAMERA_CHANGE,t),e.cameraControl.removeEventListener(Rc.ON_CAMERA_CHANGE,i)},this.updatePos=function(){var t=e.Measurement.pointPick.length,i=e.Measurement.pointAssist.length,o=e.Measurement.needUpdatedObjects;if(i)for(var n=0;o.length>n;n+=1){var r=2*n,a=A.getScreenCoordFromSceneCoord(o[n].point1),l=A.getScreenCoordFromSceneCoord(o[n].point2),c=new s(a[0],a[1]),h=new s(l[0],l[1]);e.Measurement.pointPickToScreen[r]=c,e.Measurement.pointPickToScreen[r+1]=h;var d=A.getScreenCoordFromSceneCoord(o[n].asPot1),p=A.getScreenCoordFromSceneCoord(o[n].asPot2),g=new s(d[0],d[1]),u=new s(p[0],p[1]);e.Measurement.pointAssistToScreen[r]=g,e.Measurement.pointAssistToScreen[r+1]=u;var f=e.Measurement.pointPickToScreen[r].x,m=e.Measurement.pointPickToScreen[r].y,C=e.Measurement.pointPickToScreen[r+1].x,y=e.Measurement.pointPickToScreen[r+1].y,v=e.Measurement.pointAssistToScreen[r].x,I=e.Measurement.pointAssistToScreen[r].y,E=e.Measurement.pointAssistToScreen[r+1].x,B=e.Measurement.pointAssistToScreen[r+1].y,x=document.getElementById("circlePick"+A.getViewerImpl().uuid+r),S=document.getElementById("circlePick"+A.getViewerImpl().uuid+(r+1));x.setAttribute("cx",f),x.setAttribute("cy",m),S.setAttribute("cx",C),S.setAttribute("cy",y);var w=document.getElementById("pickline"+A.getViewerImpl().uuid+"red"+(r+1)),M=document.getElementById("pickline"+A.getViewerImpl().uuid+"green"+(r+1)),b=document.getElementById("pickline"+A.getViewerImpl().uuid+"blue"+(r+1)),U=document.getElementById("pickline"+A.getViewerImpl().uuid+"yellow"+(r+1));w.setAttribute("x1",f),w.setAttribute("y1",m),w.setAttribute("x2",v),w.setAttribute("y2",I),M.setAttribute("x1",E),M.setAttribute("y1",B),M.setAttribute("x2",C),M.setAttribute("y2",y),b.setAttribute("x1",v),b.setAttribute("y1",I),b.setAttribute("x2",E),b.setAttribute("y2",B),U.setAttribute("x1",f),U.setAttribute("y1",m),U.setAttribute("x2",C),U.setAttribute("y2",y)}if(t%2==1&&t!==i){var F=A.getScreenCoordFromSceneCoord(e.Measurement.pointPick[t-1]),K=new s(F[0],F[1]);e.Measurement.pointPickToScreen[t-1]=K;f=K.x,m=K.y;(x=document.getElementById("circlePick"+A.getViewerImpl().uuid+(t-1))).setAttribute("cx",f),x.setAttribute("cy",m)}},this.addEventListener=function(){e.cameraControl.addEventListener(Rc.ON_CAMERA_CHANGE,t),e.cameraControl.addEventListener(Rc.ON_CAMERA_CHANGE,i)}};Object.assign(mB.prototype,Ld.prototype);var CB=function(){function A(e){cc(this,A),this.coef=e.coef||.5,this.controlPoints=e.controlPoints||[],this.pointCountRecord=e.pointCountRecord,this.formatConPoints=[],this.matrix=[],this.update=!0,this.points=[],this.controlPointsIndex=[],this.straightLineDistance=0,this.curveLength=0,this.updateCurveLength=!0,this.updateList=[],this.setCoef(this.coef),this._forMatConPoints()}return dc(A,[{key:"setControlPoints",value:function(A){this.controlPoints=A,this._forMatConPoints(),this.update=!0,this.updateList.push("controlPoints"),this.updateStraightLineDistance=!0}},{key:"getPoints",value:function(){return this.update&&this._createPoints(this.pointCountRecord),this.points}},{key:"setPointsCount",value:function(A){this.updateList.push("count"),this.update=!0,this.pointCountRecord=A}},{key:"getCurveLength",value:function(){return this.update?{info:"参数已修改,请先更新曲线",code:-1,updateList:this.updateList}:(this.updateCurveLength&&function(){var A=this.points,e=A.length;this.curveLength=A.reduce((function(A,t,i,o){return e>i+1&&(A+=o[i].distanceTo(o[i+1])),A}),0),this.updateCurveLength=!1}.bind(this)(),this.curveLength)}},{key:"getStraightLineDistance",value:function(){return this.updateStraightLineDistance&&function(){var A=this.controlPoints,e=A.length;this.straightLineDistance=A.reduce((function(A,t,i,o){return e>i+1&&(A+=o[i].distanceTo(o[i+1])),A}),0),this.updateStraightLineDistance=!1}.bind(this)(),this.straightLineDistance}},{key:"setCoef",value:function(A){this.updateList.push("coef"),this.update=!0,this.matrix=[[-A,2-A,A-2,A],[2*A,A-3,3-2*A,-A],[-A,0,A,0],[0,1,0,0]]}},{key:"updateCurve",value:function(){return this.getPoints()}},{key:"getPointsInfo",value:function(){return this.update?{info:"参数已修改,请先更新曲线",code:-1,updateList:this.updateList}:{points:this.getPoints(),controlPointsIndex:this.controlPointsIndex,curveLength:this.getCurveLength(),straightLineDistance:this.getStraightLineDistance()}}},{key:"_forMatConPoints",value:function(){var A=this.controlPoints;this.formatConPoints=[];for(var e=0,t=A.length;t>e;e+=1)0===e?this.formatConPoints.push(A[e].clone(),A[e].clone()):t>e+1?this.formatConPoints.push(A[e].clone()):this.formatConPoints.push(A[e].clone(),A[e].clone())}},{key:"_createPoints",value:function(A){var e=[],t=this.matrix;function i(A){e[0]=new y,e[1]=new y,e[2]=new y,e[3]=new y;var i=[];i[0]=[],i[1]=[],i[2]=[],i[3]=[],i[0][0]=A[0].clone().multiplyScalar(t[0][0]),i[0][1]=A[1].clone().multiplyScalar(t[0][1]),i[0][2]=A[2].clone().multiplyScalar(t[0][2]),i[0][3]=A[3].clone().multiplyScalar(t[0][3]),i[1][0]=A[0].clone().multiplyScalar(t[1][0]),i[1][1]=A[1].clone().multiplyScalar(t[1][1]),i[1][2]=A[2].clone().multiplyScalar(t[1][2]),i[1][3]=A[3].clone().multiplyScalar(t[1][3]),i[2][0]=A[0].clone().multiplyScalar(t[2][0]),i[2][1]=A[1].clone().multiplyScalar(t[2][1]),i[2][2]=A[2].clone().multiplyScalar(t[2][2]),i[2][3]=A[3].clone().multiplyScalar(t[2][3]),i[3][0]=A[0].clone().multiplyScalar(t[3][0]),i[3][1]=A[1].clone().multiplyScalar(t[3][1]),i[3][2]=A[2].clone().multiplyScalar(t[3][2]),i[3][3]=A[3].clone().multiplyScalar(t[3][3]);for(var o=0;4>o;o+=1)for(var n=0;4>n;n+=1)e[o].add(i[o][n])}function o(A){var t=A*A,i=t*A;return e[0].clone().multiplyScalar(i).add(e[1].clone().multiplyScalar(t)).add(e[2].clone().multiplyScalar(A)).add(e[3].clone())}var n=this.formatConPoints,r=this.points=[],a=this.controlPointsIndex=[],s=this.controlPoints;if(A){for(var l=this.getStraightLineDistance(),c=1/A,h=0,d=0,p=0,g=s.length-1;g>p;p+=1){h+=s[p].distanceTo(s[p+1]);var u=Math.floor(h/l/c)-d;i([n[p],n[p+1],n[p+2],n[p+3]]);for(var f=1/u,m=0;u>m;m+=1){r.push(o(f*m))}d+=u}r.push(s[s.length-1])}else for(var C=0,v=n.length;v>C;C+=1){var I=0===C?0:1;if(C+3>=v){r.push(n[C+2]),a.push({j:n[C+1],order:-1});break}r.push(n[C+1]),a.push({j:n[C+1],order:100*C+I}),i([n[C],n[C+1],n[C+2],n[C+3]]);for(var E=1;100>E;E+=1)r.push(o(E/100))}this.update=!1,this.updateCurveLength=!0,this.updateList=[]}}]),A}(),yB=function(){function A(e){cc(this,A),this.coef=e.coef||.5,this.points=e.controlPoints||[],this.pointCountRecord=e.pointCountRecord,this.formatConPoints=[],this.matrix=[],this._points=[],this.controlPointsIndex=[],this.straightLineDistance=0,this.count=0,this.setCoef(this.coef),this._forMatConPoints(),this._calCount(),this.update=!0}return dc(A,[{key:"setControlPoints",value:function(A){this.points=A,this._forMatConPoints(),this._calCount(),this._createPoints(),this.update=!0}},{key:"getPointAt",value:function(A){this.update&&this.getPoints();var e=Math.ceil(A*this.count);return this._points[e>this.count?this.count:e]}},{key:"getPoints",value:function(){return this.update&&this._createPoints(this.pointCountRecord),this._points}},{key:"setCoef",value:function(A){this.update=!0,this.matrix=[[-A,2-A,A-2,A],[2*A,A-3,3-2*A,-A],[-A,0,A,0],[0,1,0,0]]}},{key:"getPointsInfo",value:function(){return{points:this.getPoints(),controlPointsIndex:this.controlPointsIndex}}},{key:"_forMatConPoints",value:function(){var A=this.points;this.formatConPoints=[];for(var e=0,t=A.length;t>e;e+=1)0===e?this.formatConPoints.push(A[e].clone(),A[e].clone()):t>e+1?this.formatConPoints.push(A[e].clone()):this.formatConPoints.push(A[e].clone(),A[e].clone())}},{key:"_calCount",value:function(){var A,e,t=this,i=1/0;e=(A=t.points).length,t.straightLineDistance=A.reduce((function(A,t,o,n){if(e>o+1){var r=n[o].distanceTo(n[o+1]);i=r>i?i:r,A+=r}return A}),0),t.updateStraightLineDistance=!1;var o=Math.ceil(t.straightLineDistance/i);this.count=o>100?o:100}},{key:"_createPoints",value:function(){var A=[],e=this.matrix;function t(t){A[0]=new y,A[1]=new y,A[2]=new y,A[3]=new y;var i=[];i[0]=[],i[1]=[],i[2]=[],i[3]=[],i[0][0]=t[0].clone().multiplyScalar(e[0][0]),i[0][1]=t[1].clone().multiplyScalar(e[0][1]),i[0][2]=t[2].clone().multiplyScalar(e[0][2]),i[0][3]=t[3].clone().multiplyScalar(e[0][3]),i[1][0]=t[0].clone().multiplyScalar(e[1][0]),i[1][1]=t[1].clone().multiplyScalar(e[1][1]),i[1][2]=t[2].clone().multiplyScalar(e[1][2]),i[1][3]=t[3].clone().multiplyScalar(e[1][3]),i[2][0]=t[0].clone().multiplyScalar(e[2][0]),i[2][1]=t[1].clone().multiplyScalar(e[2][1]),i[2][2]=t[2].clone().multiplyScalar(e[2][2]),i[2][3]=t[3].clone().multiplyScalar(e[2][3]),i[3][0]=t[0].clone().multiplyScalar(e[3][0]),i[3][1]=t[1].clone().multiplyScalar(e[3][1]),i[3][2]=t[2].clone().multiplyScalar(e[3][2]),i[3][3]=t[3].clone().multiplyScalar(e[3][3]);for(var o=0;4>o;o+=1)for(var n=0;4>n;n+=1)A[o].add(i[o][n])}for(var i,o,n,r=this.formatConPoints,a=this._points=[],s=this.controlPointsIndex=[],l=this.points,c=this.straightLineDistance,h=0,d=0,p=0,g=l.length-1;g>p;p+=1){var u=(h+=l[p].distanceTo(l[p+1]))/c*this.count-d;t([r[p],r[p+1],r[p+2],r[p+3]]),a.push(r[p+1]),s.push({j:r[p+1],order:d}),d+=1;for(var f=1;u>f;f+=1)a.push((o=void 0,n=void 0,n=(o=(i=f/u)*i)*i,A[0].clone().multiplyScalar(n).add(A[1].clone().multiplyScalar(o)).add(A[2].clone().multiplyScalar(i)).add(A[3].clone()))),d+=1}a.push(l[l.length-1]),s.push({to:r[l.length-1],order:-1}),this.update=!1}}]),A}(),vB=function(){function A(e){return cc(this,A),A.shareInstance||(A.shareInstance=this,this.maxRequestCount=e||300,this.currentPendingCount=0,this._requests=[],this._requestDidLoad=this._requestDidLoad.bind(this),this._requestDidError=this._requestDidError.bind(this),this._requestDidAbort=this._requestDidAbort.bind(this),this._requestDidTimeout=this._requestDidTimeout.bind(this)),A.shareInstance}return dc(A,[{key:"addRequest",value:function(A,e){A.addEventListener("load",this._requestDidLoad),A.addEventListener("error",this._requestDidError),A.addEventListener("abort",this._requestDidAbort),A.addEventListener("timeout",this._requestDidTimeout),this.maxRequestCount>this.currentPendingCount?(A.send(e),this.currentPendingCount+=1):this._requests.push({request:A,dataToSend:e})}},{key:"_sendNextRequest",value:function(){if(this._requests.length>0){var A=this._requests.shift();A.request.send(A.dataToSend),this.currentPendingCount+=1}}},{key:"_requestDidLoad",value:function(){this.currentPendingCount-=1,this._sendNextRequest()}},{key:"_requestDidError",value:function(){this.currentPendingCount-=1,this._sendNextRequest()}},{key:"_requestDidAbort",value:function(){this.currentPendingCount-=1,this._sendNextRequest()}},{key:"_requestDidTimeout",value:function(){this.currentPendingCount-=1,this._sendNextRequest()}}]),A}(),IB={group:"group",model:"model",component:"component",components:"components"},EB=function A(){cc(this,A),this.type=void 0,this.nodeId=void 0,this.matrix=void 0,this.center=void 0,this.modelKey=void 0,this.componentKey=void 0,this.componentsKey=void 0,this.children=void 0},BB=function(){function A(e,t,i,o){cc(this,A),this.host=e,this.projectUrl=t,this.accessToken=i,this._cachedComponents={},this._cachedMaterials={},this._cachedGeometries={},this._cachedFile={},this._requestQueue=new vB(o)}return dc(A,[{key:"destroy",value:function(){delete this._cachedComponents,delete this._cachedMaterials,delete this._cachedGeometries,delete this._cachedFile}},{key:"getExternalObjectByModelKey",value:function(A){var e=this;return"string"!=typeof A?Promise.reject("参数不合法"):this._loadModelInfo(A).then((function(){return e._loadComponentsListIn(A)})).then((function(A){return e.getExternalObjectByComponentsKey(A)}))}},{key:"getExternalObjectByComponentKey",value:function(A){var e=this;if("string"!=typeof A)return Promise.reject("参数不合法");var t=this._cachedComponents[A];return t?Promise.resolve(this._createMesh(t,!0)):this._loadComponentsInfo([A]).then((function(A){return e._generateMeshByComponentInfo(A[0])})).then((function(A){return A}))}},{key:"getExternalObjectByComponentsKeyBackup",value:function(A){var e=this;if(A instanceof Array==!1)return Promise.reject("参数不合法");for(var t=[],i=[],o={},n=function(n,r){var a=e.getExternalObjectByComponentKey(A[n]).then((function(A){i.push(A)})).catch((function(e){o[A[n]]=e}));t.push(a)},r=0,a=A.length;a>r;r+=1)n(r);return Promise.all(t).then((function(){if(i.length>0){i.length!==A.length&&Bh.error(o);for(var e=new Xi,t=0,n=i.length;n>t;t+=1)e.add(i[t]);return e}return Promise.reject(o)}))}},{key:"getExternalObjectByComponentsKey",value:function(A){var e=this;if(A instanceof Array==!1)return Promise.reject("参数不合法");for(var t=[],i={},o=[],n=0,r=A.length;r>n;n+=1){var a=A[n],s=this._cachedComponents[a];s?t.push(this._createMesh(s,!0)):o.push(a)}if(o.length>0)return this._loadComponentsInfo(o).then((function(o){for(var n=[],r=0,a=o.length;a>r;r+=1){var s=e._generateMeshByComponentInfo(o[r]).then((function(A){t.push(A)})).catch((function(A){i[A.componentKey]=A.message}));n.push(s)}return Promise.all(n).then((function(){if(t.length>0){t.length!==A.length&&Bh.error(i);for(var e=new Xi,o=0,n=t.length;n>o;o+=1)e.add(t[o]);return e}return Promise.reject(i)}))}));for(var l=new Xi,c=0,h=t.length;h>c;c+=1)l.add(t[c]);return Promise.resolve(l)}},{key:"testData",value:function(){var A=new EB;A.type=IB.group;var e=new EB;e.type=IB.component,e.componentKey="M1577676674083_265272";var t=new EB;t.type=IB.component,t.componentKey="M1577676674083_265916";var i=new EB;i.type=IB.component,i.componentKey="M1577676674083_244449";var o=(new M).makeTranslation(0,0,5e3);i.matrix=o.toArray();var n=new EB;n.type=IB.group;var r=new EB;r.type=IB.component,r.componentKey="M1577676674083_246705";var a=new EB;a.type=IB.component,a.componentKey="M1577676674083_247372",a.matrix=o.makeTranslation(0,0,7e3).toArray();var s=new EB;return s.type=IB.component,s.componentKey="M1577676674083_244910",A.children=[e,t,i,n],n.children=[r,a,s],A}},{key:"getExternalObjectByNodeInfo",value:function(A){var e=this,t=void 0;return A.type===IB.component&&A.componentKey?t=this.getExternalObjectByComponentKey(A.componentKey):A.type===IB.components&&A.componentsKey&&A.componentsKey instanceof Array&&A.componentsKey.length>0?t=this.getExternalObjectByComponentsKey(A.componentsKey):A.type===IB.model&&A.modelKey?t=this.getExternalObjectByModelKey(A.modelKey):A.type===IB.group&&A.children&&A.children.length>0?function(){for(var i=new Xi,o=[],n=function(t,n){var r=A.children[t],a=e.getExternalObjectByNodeInfo(r).then((function(A){i.add(A)})).catch((function(A){return Bh.error(r,A),A}));o.push(a)},r=0,a=A.children.length;a>r;r+=1)n(r);t=Promise.all(o).then((function(){return i}))}():t=Promise.reject("参数不合法"),t.then((function(e){if(A.matrix){var t=(new M).fromArray(A.matrix);e.matrix.identity(),e.applyMatrix4(t),e.updateMatrixWorld(!0)}if(A.center){var i=(new aA).setFromObject(e),o=new y;if(i.getCenter(o),parseInt(A.center[0],10)!==parseInt(o.x,10)||parseInt(A.center[1],10)!==parseInt(o.y,10)||parseInt(A.center[2],10)!==parseInt(o.z,10)){var n=(new y).fromArray(A.center).sub(o),r=(new M).makeTranslation(n.x,n.y,n.z);e.applyMatrix4(r),e.updateMatrixWorld(!0)}}return e}))}},{key:"exportNodeInfoByComponents",value:function(A,e){if(e){var t=new EB;return 1===e.length?(t.type=IB.component,t.componentKey=e[0]):(t.type=IB.components,t.componentsKey=e),t.nodeId=A,t}}},{key:"exportNodeInfoByModelKey",value:function(A,e){if(e){var t=new EB;return t.type=IB.model,t.modelKey=e,t.nodeId=A,t}}},{key:"_loadModelInfo",value:function(A){return this._httpGet(this.host+"/api/"+this.projectUrl+"/models?modelKey="+A)}},{key:"_loadComponentsListIn",value:function(A){return this._httpGet(this.host+"/api/"+this.projectUrl+"/components/keys?modelKey="+A)}},{key:"_loadComponentsInfo",value:function(A,e,t){return this._httpPost(this.host+"/api/"+this.projectUrl+"/components/geometry",{components:A})}},{key:"_generateMeshByComponentInfo",value:function(A){var e=this;if(!A.geometry)return Promise.reject({componentKey:A.component,message:"几何为空"});var t={};if(t.componentKey=A.component,A.matrix){var i=(new M).fromArray(A.matrix);t.matrix=i}var o=A.materials,n=[],r=[];if(A.materials.length>0)for(var a=function(t,i){n.push(e._loadMaterial(o[t]).then((function(A){r[t]=A})).catch((function(i){Bh.error(i,"用默认材质代替"),r[t]=e._loadMaterialByType(A.type)})))},s=0,l=o.length;l>s;s+=1)a(s);else{var c=this._loadMaterialByType(A.type);r.push(c),n.push(Promise.resolve(c))}return Promise.all(n).then((function(){return t.materials=r,e._loadGeometry(A.geometry)})).then((function(A){t.geometry=A;for(var i=0,o=t.materials.length;o>i;i+=1){var n=t.materials[i];if(n.aoMap||n.lightMap){t.geometry.setAttribute("uv2",new YA(t.geometry.attributes.uv.array,2));break}}return e._cachedComponents[t.componentKey]=t,e._createMesh(t,!1)}))}},{key:"_loadMaterial",value:function(A){var e=this,t=this._cachedMaterials[A.key];if(t)return Promise.resolve(t.clone());var i=A.data;return this._loadAllTextures(i).then((function(t){var o=e._createMaterial(i,t);return e._cachedMaterials[A.key]=o,o}))}},{key:"_loadMaterialByType",value:function(A){var e=_u[A]?_u[A].color:void 0;e||(e=_u.DEFAULT.color);var t=new LA(e[0],e[1],e[2]),i=t.getHexString()+"_"+e[3],o=this._cachedMaterials[i];return o||((o=Kd.createStandardMaterial({color:t})).side=2,this._cachedMaterials[i]=o),o}},{key:"_loadGeometry",value:function(A){var e=this,t=this._cachedGeometries[A];return t?Promise.resolve(t):this._loadFile(A).then((function(t){try{var i=new TextDecoder("utf-8").decode(t),o=JSON.parse(i),n=e._createGeometry(o);return n?(e._cachedGeometries[A]=n,n):Promise.reject("几何为空")}catch(A){return Promise.reject(A.message)}}))}},{key:"_loadAllTextures",value:function(A){for(var e=this,t=[],i=this._getAllTextureFileKey(A),o={},n=function(A,n){var r=i[A];t.push(e._loadFile(r).then((function(A){var t=e._createTexture(A);o[r]=t})).catch((function(A){Bh.error(A)})))},r=0,a=i.length;a>r;r+=1)n(r);return t.length>0?new Promise((function(A,e){Promise.all(t).then((function(){Object.keys(o).length>0?A(o):e("加载纹理失败")}))})):Promise.resolve(o)}},{key:"_getAllTextureFileKey",value:function(A){var e={};return A.map&&(e[A.map]=!0),A.aoMap&&(e[A.aoMap]=!0),A.alphaMap&&(e[A.alphaMap]=!0),A.envMap&&(e[A.envMap]=!0),A.lightMap&&(e[A.lightMap]=!0),A.emissiveMap&&(e[A.emissiveMap]=!0),A.specularMap&&(e[A.specularMap]=!0),A.specularMap&&(e[A.specularMap]=!0),Object.keys(e)}},{key:"_createTexture",value:function(A){var e=new d,t=document.createElement("img");e.wrapS=e.wrapT=1e3,t.onerror=function(A){Bh.error("加载纹理出错")},t.onload=function(i){"string"!=typeof A&&window.URL.revokeObjectURL(t.src),e.image=t,e.needsUpdate=!0};var i=new Blob([A]);return t.src=window.URL.createObjectURL(i),e}},{key:"_createGeometry",value:function(A){if(A.positions&&0!==A.positions.length){var e=null;e=new he;var t=new Float32Array(A.positions);e.setAttribute("position",new YA(t,3));var i=new Uint32Array(A.indices);if(e.setIndex(new YA(i,1)),A.normals&&A.normals.length>0){var o=new Float32Array(A.normals);e.setAttribute("normal",new YA(o,3))}else e.computeVertexNormals();if(A.uv&&A.uv.length>0){var n=new Float32Array(A.uv);e.setAttribute("uv",new YA(n,2))}if(void 0!==A.materialIndices){for(var r=null,a=[],s=void 0,l=0;A.materialIndices.length>l;l+=1){var c=A.materialIndices[l];c!==s&&(s=c,null!=r&&(r.count=3*l-r.start,a.push(r)),r={start:3*l,materialIndex:s})}null!=r&&(r.count=3*A.materialIndices.length-r.start,a.push(r)),e.groups=a}return e}}},{key:"_createMaterial",value:function(A,e){return Kd.createMaterialByMaterialBufferAndTexture(A,e)}},{key:"_createMesh",value:function(A,e){var t=null;if(e){t=[];for(var i=0,o=A.materials.length;o>i;i+=1)t.push(A.materials[i].clone())}else t=A.materials;var n=new Kf(A.geometry,t);return n.visible=!0,n.key=A.componentKey,A.matrix&&(n.applyMatrix4(A.matrix),n.updateMatrixWorld(!0)),n}},{key:"_loadFile",value:function(A){var e=this._cachedFile[A];return e?Promise.resolve(e):this._http("GET",this.host+"/api/"+this.projectUrl+"/files?fileKey="+A,"arraybuffer").then((function(A){return A}))}},{key:"_httpGet",value:function(A){return this._http("GET",A)}},{key:"_httpPost",value:function(A,e){return this._http("POST",A,void 0,e)}},{key:"_http",value:function(A,e,t,i){var o=this;return new Promise((function(n,r){var a={};"POST"===A&&(a["Content-type"]="application/json;charset=UTF-8"),o.accessToken&&(a.Authorization=o.accessToken),_d({type:A,url:e,headers:a,data:JSON.stringify(i),responseType:t||"json",requestQueue:o._requestQueue,success:function(A){if(A)try{t&&"json"!==t?n(A):A.data?n(A.data):"success"!==A.code.toLowerCase()&&r(A.message?A.message:"未知错误")}catch(A){r(A.message)}else r("数据为空")},error:function(A,e){r(e)}})}))}}]),A}(),xB={};xB.ToolBar=Xd;var SB={};SB.ModelCompares=$y,SB.DISPLAYMODEL=zy,SB.CompareGlobalData=Xy,SB.CompareComponentType=Zy,SB.COMPAREEVENTS=_y,SB.ViewerConnector=ev,SB.RoadNetManager=JE,SB.TextLoader=_E,SB.TrackSimulator=AB,SB.Heatmap=BE,SB.Fire=FE,SB.Water=eB,SB.WaterEffect=sv,SB.WaterEffectConfig=function(){this.boundary=[],this.color=new Xh("#80FDFF",.8),this.scale=4,this.viewer=null,this.xDirection=1,this.yDirection=1,this.reflectivity=1,this.reflectorTexturePosition=new y,this.refractorTexturePosition=new y,this.height=0,this.geometry=null},SB.ArrowManager=cv;var wB={};wB.Line2=QE,wB.LineMaterial=YC,wB.LineGeometry=KE;for(var MB={},bB=Object.keys(sc),UB=0;bB.length>UB;UB+=1){var FB=bB[UB];Object.defineProperty(MB,FB,{value:sc[FB],enumerable:!0,configurable:!0,writable:!1})}A.Animation=hp,A.ArrowDomMark=uB,A.ArrowDomMarkManager=fB,A.BOSCatmullRomCurve3=CB,A.BOSCatmullRomCurve3ForFrameEdit=yB,A.BaseControl=Fg,A.CAMERATYPE=Ec,A.Camera=cp,A.CameraAnimator=dp,A.CameraControl=mp,A.CameraInfo=Qd,A.CameraUtil=Rd,A.ClipPlaneService=Ap,A.ClipPlanes=HC,A.ClipPlanesTool=vp,A.CollisionDetection=function(A){this.cameraControl=A,this.intersector=A.intersector;var e=new Dd,t=new Dd,i=new Dd,o=new Dd,n=new Dd,r=new Dd;this.run=function(a,s){var l={},c=this.cameraControl.getIntersectContext(null);e.set(a,new y(0,0,1)),t.set(a,new y(0,0,-1)),n.set(a,s),r.set(a,new y(-s.x,-s.y,-s.z)),i.set(a,new y(-s.y,s.x,s.z)),o.set(a,new y(s.y,-s.x,s.z)),l.top=this.intersector.getIntersectByRay(c,e.ray),l.down=this.intersector.getIntersectByRay(c,t.ray),l.front=this.intersector.getIntersectByRay(c,n.ray),l.back=this.intersector.getIntersectByRay(c,r.ray),l.left=this.intersector.getIntersectByRay(c,i.ray),l.right=this.intersector.getIntersectByRay(c,o.ray);var h=new y(a.x,a.y,a.z-.8*A.manHeight),d=new Dd;d.set(h,s);var p=new Dd;p.set(h,new y(-s.x,-s.y,-s.z));var g=new Dd;g.set(h,new y(-s.y,s.x,s.z));var u=new Dd;return u.set(h,new y(s.y,-s.x,s.z)),l.frontMiddle=this.intersector.getIntersectByRay(c,d.ray),l.backMiddle=this.intersector.getIntersectByRay(c,p.ray),l.leftMiddle=this.intersector.getIntersectByRay(c,g.ray),l.rightMiddle=this.intersector.getIntersectByRay(c,u.ray),l}},A.Color=Xh,A.ColorPicker=Hh,A.ControlConfig=jh,A.ControlManager=Og,A.ControlMode=Gc,A.DOMMark=Od,A.DefaultInvisibleComponentType=bc,A.DefaultMaterial=_u,A.DeviceTest=mh,A.DomUtil=xh,A.DrawingStyle=jc,A.EIMMODELMaterial=ld,A.EVENTS=Rc,A.Edge=wp,A.EnumCesiumImageryLayerType={AUTO:0,BAIDU:1,GAODE:2,MAPBOX:3,ARCGIS:4,GOOGLE:5},A.EnumConditionType={HIDDEN_OTHERS:0,TRANSLUCENT_OTHERS:1,OVERRIDE:2,BORDERLINE:3},A.EnumDataProvider=Wc,A.EnumFilterState=zc,A.EnumIdBasedType=Dc,A.EnumInstanceState=Hc,A.EnumIsolateState=Nc,A.EnumObjectState=Lc,A.EnumRenderType={RENDER:0,RENDER_FINISHED:1,RESIZE:2},A.EnumRendererType={AUTO:0,FULL:1,INCREMENT:2},A.EnumSceneState=Vc,A.EnumShaderColorState=Yc,A.EnumTransparentState=Oc,A.EnumUserType={HIDDEN_DATA:0,OVERRIDE_DATA:1,WITH_BOARDLINE:2},A.EventDispatcher=Ld,A.ExternalObjectConverter=BB,A.ExternalObjectNodeInfo=EB,A.ExternalObjectNodeInfoType=IB,A.ExternalScene=ey,A.FillClipPlane=_C,A.FillClipPlaneTool=Sp,A.FilterResultMode=Jc,A.FullScreen=Wh,A.GLTFLoader=OC,A.GeomUtil=Tu,A.GlobalData=vc,A.Group=ep,A.IDENTITYMATRIX3=xc,A.IDENTITYMATRIX4=Bc,A.ImageResources=Pd,A.IntersectHelper=fp,A.KDNode=Zu,A.LOADERROREVENTS=Tc,A.LightType=Fc,A.LineSegmentsEx=cf,A.Lobibox=bh,A.LogLevels=Ch,A.MarkObject=Hd,A.MaterialEx=ay,A.MaterialUtil=Kd,A.MeasureTool=Eg,A.MeasurementManager=mB,A.MeshEx=Kf,A.ModelType=Zc,A.MoveDirection=qc,A.NodeItemType={SYMBOL:0,MESH:1,TUBE:2,PIPE:3,BOX:4,BOX_M:5,PIPE_M:6,MESH_REF:7,LINE:8},A.NoiseTextureType=xd,A.NormalControl=Qg,A.OPSELECTIONTYPE=Kc,A.OrbitControl=Rg,A.PICKABLETYPE=Qc,A.PhongLightingMaterial=jC,A.PickControl=kg,A.PickHelper=kp,A.PickUtil=wg,A.PlaneMark=Vd,A.Plugins=SB,A.PostilObject=Jd,A.PrimitiveCount={vertexCount:0,triangleCount:0},A.Raycaster=Dd,A.RectOpTool=Mg,A.RectPickTool=bg,A.RectZoomTool=Ug,A.Roam=tB,A.RoamManager=oB,A.RoamPlayer=iB,A.RotatePivotMode=kc,A.RotationOrders=Ic,A.SVGRect=tp,A.Scene=oy,A.SceneStateHelper=ny,A.SectionPlane=hB,A.SelectPad=Dg,A.Snapshot=Zd,A.SpriteMark=Gd,A.StorageCache=AC,A.THREE=MB,A.THREEEX=wB,A.ThreeMark=dB,A.Tool=yp,A.ToolBar=Xd,A.ToolMode=Pc,A.UI=xB,A.Utils=uh,A.Version="4.18.0",A.ViewController=lp,A.Viewer=Py,A.ViewerImpl=Gy,A.WalkControl=Lg,A.WordPlaneMark=pB,A.ajax=_d,A.buildEdge=Up,A.createNoiseTexture=Fd,A.getFaceIndex=Fp,A.getScript=function(A,e){var t={};if(t[A])e&&e();else{var i=document.createElement("script");i.type="text/javascript",i.src=A,document.head.appendChild(i),t[A]=!0,i.readyState?i.onreadystatechange=function(){"loaded"!==i.readyState&&"complete"!==i.readyState||(i.onreadystatechange=null,e&&e())}:i.onload=function(){e&&e()}}},A.i18nMessage=fh,A.logger=Bh,A.message=jd,A.removeDuplicateIndex=Mp,A.removeDuplicateVertex=bp,A.standardView=Uc,Object.defineProperty(A,"__esModule",{value:!0})})); +//# sourceMappingURL=EIMMODEL.min.js.map diff --git a/public/eim-0225/EIMMODEL_TEST.js b/public/eim-0225/EIMMODEL_TEST.js new file mode 100644 index 0000000..82a1876 --- /dev/null +++ b/public/eim-0225/EIMMODEL_TEST.js @@ -0,0 +1,95419 @@ +/*!!** + * EIMMODEL V1.0.0 + * A WebGL-based 3D Viewer for threejs + * http://www.i3vsoft.com/ + * Built on 2021-2-25 7:24:06 PM + * commitHash 2611d22d + + * Copyright 2021, 广州君和信息技术有限公司 + ***/ +! function (A, e) { + "object" == typeof exports && "undefined" != typeof module ? e(exports) : "function" == typeof define && define.amd ? define(["exports"], e) : e((A = A || self).EIMMODEL = {}) +}(this, (function (A) { + "use strict"; + console.log("EIMMODEL Version: 1.0.0"); + var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self ? self : {}; + ! function (A, e) { + A(e = { + exports: {} + }, e.exports) + }((function (A) { + ! function (e, t) { + var i = function () { + function A(A) { + return "[object Array]" === Object.prototype.toString.call(A) + } + + function e(A, e) { + for (var t in e) + e.hasOwnProperty(t) && (A[t] = e[t]) + } + + function t(A) { + if (!(this instanceof t)) + throw new TypeError(this + "is not a promise"); + if ("function" != typeof A) + throw new TypeError("Promise resolver " + A + " is not a function"); + var e = new i; + this._resolver = e; + try { + A((function (A) { + e.resolve(A) + }), (function (A) { + e.reject(A) + })) + } catch (A) { + e.reject(A) + } + } + + function i() { + this._callbacks = [], + this._errbacks = [], + this._status = "pending", + this._result = null + } + return e(t.prototype, { + then: function (A, e) { + var i, o, n = new this.constructor((function (A, e) { + i = A, + o = e + })); + return this._resolver._addCallbacks("function" == typeof A ? t._makeCallback(n, i, o, A) : i, "function" == typeof e ? t._makeCallback(n, i, o, e) : o), + n + }, + catch: function (A) { + return this.then(void 0, A) + } + }), + t._makeCallback = function (A, e, t, i) { + return function (o) { + var n; + try { + n = i(o) + } catch (A) { + return void t(A) + } + n !== A ? e(n) : t(new TypeError("Cannot resolve a promise with itself")) + } + }, + t.resolve = function (A) { + return A && A.constructor === this ? A : new this((function (e) { + e(A) + })) + }, + t.reject = function (A) { + var e = new this((function () {})); + return e._resolver._result = A, + e._resolver._status = "rejected", + e + }, + t.all = function (e) { + var t = this; + return new t((function (i, o) { + if (A(e)) { + var n = e.length, + r = 0, + a = e.length, + s = []; + if (1 > a) + return i(s); + for (; a > r; r++) + t.resolve(e[r]).then(l(r), o) + } else + o(new TypeError("Promise.all expects an array of values or promises")); + + function l(A) { + return function (e) { + s[A] = e, + --n || i(s) + } + } + })) + }, + t.race = function (e) { + var t = this; + return new t((function (i, o) { + if (A(e)) + for (var n = 0, r = e.length; r > n; n++) + t.resolve(e[n]).then(i, o); + else + o(new TypeError("Promise.race expects an array of values or promises")) + })) + }, + t.async = "undefined" != typeof setImmediate ? function (A) { + setImmediate(A) + } : + "undefined" != typeof process && process.nextTick ? process.nextTick : function (A) { + setTimeout(A, 0) + }, + e(i.prototype, { + fulfill: function (A) { + var e = this._status; + "pending" !== e && "accepted" !== e || (this._result = A, + this._status = "fulfilled"), + "fulfilled" === this._status && (this._notify(this._callbacks, this._result), + this._callbacks = [], + this._errbacks = null) + }, + reject: function (A) { + var e = this._status; + "pending" !== e && "accepted" !== e || (this._result = A, + this._status = "rejected"), + "rejected" === this._status && (this._notify(this._errbacks, this._result), + this._callbacks = null, + this._errbacks = []) + }, + resolve: function (A) { + "pending" === this._status && (this._status = "accepted", + this._value = A, + (this._callbacks && this._callbacks.length || this._errbacks && this._errbacks.length) && this._unwrap(this._value)) + }, + _unwrap: function (A) { + var e, t = this, + i = !1; + if (!A || "object" != typeof A && "function" != typeof A) + t.fulfill(A); + else + try { + "function" == typeof (e = A.then) ? e.call(A, (function (A) { + i || (i = !0, + t._unwrap(A)) + }), (function (A) { + i || (i = !0, + t.reject(A)) + })): t.fulfill(A) + } catch (A) { + i || t.reject(A) + } + }, + _addCallbacks: function (A, e) { + var t = this._callbacks, + i = this._errbacks; + switch (t && t.push(A), + i && i.push(e), + this._status) { + case "accepted": + this._unwrap(this._value); + break; + case "fulfilled": + this.fulfill(this._result); + break; + case "rejected": + this.reject(this._result) + } + }, + _notify: function (A, e) { + A.length && t.async((function () { + var t, i; + for (t = 0, + i = A.length; i > t; ++t) + A[t](e) + })) + } + }), + t.Resolver = i, + t + }(); + A && (A.exports = i), + (e = e || self).PromisePolyfill = i, + e.Promise || (e.Promise = i) + }(e) + })); + void 0 === Number.EPSILON && (Number.EPSILON = Math.pow(2, -52)), + void 0 === Number.isInteger && (Number.isInteger = function (A) { + return "number" == typeof A && isFinite(A) && Math.floor(A) === A + }), + void 0 === Math.sign && (Math.sign = function (A) { + return 0 > A ? -1 : A > 0 ? 1 : +A + }), + "name" in Function.prototype == !1 && Object.defineProperty(Function.prototype, "name", { + get: function () { + return this.toString().match(/^\s*function\s*([^\(\s]*)/)[1] + } + }), + void 0 === Object.assign && (Object.assign = function (A) { + if (null == A) + throw new TypeError("Cannot convert undefined or null to object"); + for (var e = Object(A), t = 1; arguments.length > t; t++) { + var i = arguments[t]; + if (null != i) + for (var o in i) + Object.prototype.hasOwnProperty.call(i, o) && (e[o] = i[o]) + } + return e + }); + var t = { + LEFT: 0, + MIDDLE: 1, + RIGHT: 2, + ROTATE: 0, + DOLLY: 1, + PAN: 2 + }; + + function i() {} + Object.assign(i.prototype, { + addEventListener: function (A, e) { + void 0 === this._listeners && (this._listeners = {}); + var t = this._listeners; + void 0 === t[A] && (t[A] = []), + -1 === t[A].indexOf(e) && t[A].push(e) + }, + hasEventListener: function (A, e) { + if (void 0 === this._listeners) + return !1; + var t = this._listeners; + return void 0 !== t[A] && -1 !== t[A].indexOf(e) + }, + removeEventListener: function (A, e) { + if (void 0 !== this._listeners) { + var t = this._listeners[A]; + if (void 0 !== t) { + var i = t.indexOf(e); - + 1 !== i && t.splice(i, 1) + } + } + }, + dispatchEvent: function (A) { + if (void 0 !== this._listeners) { + var e = this._listeners[A.type]; + if (void 0 !== e) { + A.target = this; + for (var t = e.slice(0), i = 0, o = t.length; o > i; i++) + t[i].call(this, A) + } + } + } + }); + for (var o = [], n = 0; 256 > n; n++) + o[n] = (16 > n ? "0" : "") + n.toString(16); + var r, a = { + DEG2RAD: Math.PI / 180, + RAD2DEG: 180 / Math.PI, + generateUUID: function () { + var A = 4294967295 * Math.random() | 0, + e = 4294967295 * Math.random() | 0, + t = 4294967295 * Math.random() | 0, + i = 4294967295 * Math.random() | 0; + return (o[255 & A] + o[A >> 8 & 255] + o[A >> 16 & 255] + o[A >> 24 & 255] + "-" + o[255 & e] + o[e >> 8 & 255] + "-" + o[e >> 16 & 15 | 64] + o[e >> 24 & 255] + "-" + o[63 & t | 128] + o[t >> 8 & 255] + "-" + o[t >> 16 & 255] + o[t >> 24 & 255] + o[255 & i] + o[i >> 8 & 255] + o[i >> 16 & 255] + o[i >> 24 & 255]).toUpperCase() + }, + clamp: function (A, e, t) { + return Math.max(e, Math.min(t, A)) + }, + euclideanModulo: function (A, e) { + return (A % e + e) % e + }, + mapLinear: function (A, e, t, i, o) { + return i + (A - e) * (o - i) / (t - e) + }, + lerp: function (A, e, t) { + return (1 - t) * A + t * e + }, + smoothstep: function (A, e, t) { + return A > e ? t > A ? (A = (A - e) / (t - e)) * A * (3 - 2 * A) : 1 : 0 + }, + smootherstep: function (A, e, t) { + return A > e ? t > A ? (A = (A - e) / (t - e)) * A * A * (A * (6 * A - 15) + 10) : 1 : 0 + }, + randInt: function (A, e) { + return A + Math.floor(Math.random() * (e - A + 1)) + }, + randFloat: function (A, e) { + return A + Math.random() * (e - A) + }, + randFloatSpread: function (A) { + return A * (.5 - Math.random()) + }, + degToRad: function (A) { + return A * a.DEG2RAD + }, + radToDeg: function (A) { + return A * a.RAD2DEG + }, + isPowerOfTwo: function (A) { + return 0 == (A & A - 1) && 0 !== A + }, + ceilPowerOfTwo: function (A) { + return Math.pow(2, Math.ceil(Math.log(A) / Math.LN2)) + }, + floorPowerOfTwo: function (A) { + return Math.pow(2, Math.floor(Math.log(A) / Math.LN2)) + }, + setQuaternionFromProperEuler: function (A, e, t, i, o) { + var n = Math.cos, + r = Math.sin, + a = n(t / 2), + s = r(t / 2), + l = n((e + i) / 2), + c = r((e + i) / 2), + h = n((e - i) / 2), + d = r((e - i) / 2), + p = n((i - e) / 2), + g = r((i - e) / 2); + "XYX" === o ? A.set(a * c, s * h, s * d, a * l) : "YZY" === o ? A.set(s * d, a * c, s * h, a * l) : "ZXZ" === o ? A.set(s * h, s * d, a * c, a * l) : "XZX" === o ? A.set(a * c, s * g, s * p, a * l) : "YXY" === o ? A.set(s * p, a * c, s * g, a * l) : "ZYZ" === o ? A.set(s * g, s * p, a * c, a * l) : console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order.") + } + }; + + function s(A, e) { + this.x = A || 0, + this.y = e || 0 + } + + function l() { + this.elements = [1, 0, 0, 0, 1, 0, 0, 0, 1], + arguments.length > 0 && console.error("THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.") + } + Object.defineProperties(s.prototype, { + width: { + get: function () { + return this.x + }, + set: function (A) { + this.x = A + } + }, + height: { + get: function () { + return this.y + }, + set: function (A) { + this.y = A + } + } + }), + Object.assign(s.prototype, { + isVector2: !0, + set: function (A, e) { + return this.x = A, + this.y = e, + this + }, + setScalar: function (A) { + return this.x = A, + this.y = A, + this + }, + setX: function (A) { + return this.x = A, + this + }, + setY: function (A) { + return this.y = A, + this + }, + setComponent: function (A, e) { + switch (A) { + case 0: + this.x = e; + break; + case 1: + this.y = e; + break; + default: + throw new Error("index is out of range: " + A) + } + return this + }, + getComponent: function (A) { + switch (A) { + case 0: + return this.x; + case 1: + return this.y; + default: + throw new Error("index is out of range: " + A) + } + }, + clone: function () { + return new this.constructor(this.x, this.y) + }, + copy: function (A) { + return this.x = A.x, + this.y = A.y, + this + }, + add: function (A, e) { + return void 0 !== e ? (console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."), + this.addVectors(A, e)) : (this.x += A.x, + this.y += A.y, + this) + }, + addScalar: function (A) { + return this.x += A, + this.y += A, + this + }, + addVectors: function (A, e) { + return this.x = A.x + e.x, + this.y = A.y + e.y, + this + }, + addScaledVector: function (A, e) { + return this.x += A.x * e, + this.y += A.y * e, + this + }, + sub: function (A, e) { + return void 0 !== e ? (console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."), + this.subVectors(A, e)) : (this.x -= A.x, + this.y -= A.y, + this) + }, + subScalar: function (A) { + return this.x -= A, + this.y -= A, + this + }, + subVectors: function (A, e) { + return this.x = A.x - e.x, + this.y = A.y - e.y, + this + }, + multiply: function (A) { + return this.x *= A.x, + this.y *= A.y, + this + }, + multiplyScalar: function (A) { + return this.x *= A, + this.y *= A, + this + }, + divide: function (A) { + return this.x /= A.x, + this.y /= A.y, + this + }, + divideScalar: function (A) { + return this.multiplyScalar(1 / A) + }, + applyMatrix3: function (A) { + var e = this.x, + t = this.y, + i = A.elements; + return this.x = i[0] * e + i[3] * t + i[6], + this.y = i[1] * e + i[4] * t + i[7], + this + }, + min: function (A) { + return this.x = Math.min(this.x, A.x), + this.y = Math.min(this.y, A.y), + this + }, + max: function (A) { + return this.x = Math.max(this.x, A.x), + this.y = Math.max(this.y, A.y), + this + }, + clamp: function (A, e) { + return this.x = Math.max(A.x, Math.min(e.x, this.x)), + this.y = Math.max(A.y, Math.min(e.y, this.y)), + this + }, + clampScalar: function (A, e) { + return this.x = Math.max(A, Math.min(e, this.x)), + this.y = Math.max(A, Math.min(e, this.y)), + this + }, + clampLength: function (A, e) { + var t = this.length(); + return this.divideScalar(t || 1).multiplyScalar(Math.max(A, Math.min(e, t))) + }, + floor: function () { + return this.x = Math.floor(this.x), + this.y = Math.floor(this.y), + this + }, + ceil: function () { + return this.x = Math.ceil(this.x), + this.y = Math.ceil(this.y), + this + }, + round: function () { + return this.x = Math.round(this.x), + this.y = Math.round(this.y), + this + }, + roundToZero: function () { + return this.x = 0 > this.x ? Math.ceil(this.x) : Math.floor(this.x), + this.y = 0 > this.y ? Math.ceil(this.y) : Math.floor(this.y), + this + }, + negate: function () { + return this.x = -this.x, + this.y = -this.y, + this + }, + dot: function (A) { + return this.x * A.x + this.y * A.y + }, + cross: function (A) { + return this.x * A.y - this.y * A.x + }, + lengthSq: function () { + return this.x * this.x + this.y * this.y + }, + length: function () { + return Math.sqrt(this.x * this.x + this.y * this.y) + }, + manhattanLength: function () { + return Math.abs(this.x) + Math.abs(this.y) + }, + normalize: function () { + return this.divideScalar(this.length() || 1) + }, + angle: function () { + return Math.atan2(-this.y, -this.x) + Math.PI + }, + distanceTo: function (A) { + return Math.sqrt(this.distanceToSquared(A)) + }, + distanceToSquared: function (A) { + var e = this.x - A.x, + t = this.y - A.y; + return e * e + t * t + }, + manhattanDistanceTo: function (A) { + return Math.abs(this.x - A.x) + Math.abs(this.y - A.y) + }, + setLength: function (A) { + return this.normalize().multiplyScalar(A) + }, + lerp: function (A, e) { + return this.x += (A.x - this.x) * e, + this.y += (A.y - this.y) * e, + this + }, + lerpVectors: function (A, e, t) { + return this.subVectors(e, A).multiplyScalar(t).add(A) + }, + equals: function (A) { + return A.x === this.x && A.y === this.y + }, + fromArray: function (A, e) { + return void 0 === e && (e = 0), + this.x = A[e], + this.y = A[e + 1], + this + }, + toArray: function (A, e) { + return void 0 === A && (A = []), + void 0 === e && (e = 0), + A[e] = this.x, + A[e + 1] = this.y, + A + }, + fromBufferAttribute: function (A, e, t) { + return void 0 !== t && console.warn("THREE.Vector2: offset has been removed from .fromBufferAttribute()."), + this.x = A.getX(e), + this.y = A.getY(e), + this + }, + rotateAround: function (A, e) { + var t = Math.cos(e), + i = Math.sin(e), + o = this.x - A.x, + n = this.y - A.y; + return this.x = o * t - n * i + A.x, + this.y = o * i + n * t + A.y, + this + } + }), + Object.assign(l.prototype, { + isMatrix3: !0, + set: function (A, e, t, i, o, n, r, a, s) { + var l = this.elements; + return l[0] = A, + l[1] = i, + l[2] = r, + l[3] = e, + l[4] = o, + l[5] = a, + l[6] = t, + l[7] = n, + l[8] = s, + this + }, + identity: function () { + return this.set(1, 0, 0, 0, 1, 0, 0, 0, 1), + this + }, + clone: function () { + return (new this.constructor).fromArray(this.elements) + }, + copy: function (A) { + var e = this.elements, + t = A.elements; + return e[0] = t[0], + e[1] = t[1], + e[2] = t[2], + e[3] = t[3], + e[4] = t[4], + e[5] = t[5], + e[6] = t[6], + e[7] = t[7], + e[8] = t[8], + this + }, + extractBasis: function (A, e, t) { + return A.setFromMatrix3Column(this, 0), + e.setFromMatrix3Column(this, 1), + t.setFromMatrix3Column(this, 2), + this + }, + setFromMatrix4: function (A) { + var e = A.elements; + return this.set(e[0], e[4], e[8], e[1], e[5], e[9], e[2], e[6], e[10]), + this + }, + multiply: function (A) { + return this.multiplyMatrices(this, A) + }, + premultiply: function (A) { + return this.multiplyMatrices(A, this) + }, + multiplyMatrices: function (A, e) { + var t = A.elements, + i = e.elements, + o = this.elements, + n = t[0], + r = t[3], + a = t[6], + s = t[1], + l = t[4], + c = t[7], + h = t[2], + d = t[5], + p = t[8], + g = i[0], + u = i[3], + f = i[6], + m = i[1], + C = i[4], + y = i[7], + v = i[2], + I = i[5], + E = i[8]; + return o[0] = n * g + r * m + a * v, + o[3] = n * u + r * C + a * I, + o[6] = n * f + r * y + a * E, + o[1] = s * g + l * m + c * v, + o[4] = s * u + l * C + c * I, + o[7] = s * f + l * y + c * E, + o[2] = h * g + d * m + p * v, + o[5] = h * u + d * C + p * I, + o[8] = h * f + d * y + p * E, + this + }, + multiplyScalar: function (A) { + var e = this.elements; + return e[0] *= A, + e[3] *= A, + e[6] *= A, + e[1] *= A, + e[4] *= A, + e[7] *= A, + e[2] *= A, + e[5] *= A, + e[8] *= A, + this + }, + determinant: function () { + var A = this.elements, + e = A[0], + t = A[1], + i = A[2], + o = A[3], + n = A[4], + r = A[5], + a = A[6], + s = A[7], + l = A[8]; + return e * n * l - e * r * s - t * o * l + t * r * a + i * o * s - i * n * a + }, + getInverse: function (A, e) { + void 0 !== e && console.warn("THREE.Matrix3: .getInverse() can no longer be configured to throw on degenerate."); + var t = A.elements, + i = this.elements, + o = t[0], + n = t[1], + r = t[2], + a = t[3], + s = t[4], + l = t[5], + c = t[6], + h = t[7], + d = t[8], + p = d * s - l * h, + g = l * c - d * a, + u = h * a - s * c, + f = o * p + n * g + r * u; + if (0 === f) + return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0); + var m = 1 / f; + return i[0] = p * m, + i[1] = (r * h - d * n) * m, + i[2] = (l * n - r * s) * m, + i[3] = g * m, + i[4] = (d * o - r * c) * m, + i[5] = (r * a - l * o) * m, + i[6] = u * m, + i[7] = (n * c - h * o) * m, + i[8] = (s * o - n * a) * m, + this + }, + transpose: function () { + var A, e = this.elements; + return A = e[1], + e[1] = e[3], + e[3] = A, + A = e[2], + e[2] = e[6], + e[6] = A, + A = e[5], + e[5] = e[7], + e[7] = A, + this + }, + getNormalMatrix: function (A) { + return this.setFromMatrix4(A).getInverse(this).transpose() + }, + transposeIntoArray: function (A) { + var e = this.elements; + return A[0] = e[0], + A[1] = e[3], + A[2] = e[6], + A[3] = e[1], + A[4] = e[4], + A[5] = e[7], + A[6] = e[2], + A[7] = e[5], + A[8] = e[8], + this + }, + setUvTransform: function (A, e, t, i, o, n, r) { + var a = Math.cos(o), + s = Math.sin(o); + this.set(t * a, t * s, -t * (a * n + s * r) + n + A, -i * s, i * a, -i * (-s * n + a * r) + r + e, 0, 0, 1) + }, + scale: function (A, e) { + var t = this.elements; + return t[0] *= A, + t[3] *= A, + t[6] *= A, + t[1] *= e, + t[4] *= e, + t[7] *= e, + this + }, + rotate: function (A) { + var e = Math.cos(A), + t = Math.sin(A), + i = this.elements, + o = i[0], + n = i[3], + r = i[6], + a = i[1], + s = i[4], + l = i[7]; + return i[0] = e * o + t * a, + i[3] = e * n + t * s, + i[6] = e * r + t * l, + i[1] = -t * o + e * a, + i[4] = -t * n + e * s, + i[7] = -t * r + e * l, + this + }, + translate: function (A, e) { + var t = this.elements; + return t[0] += A * t[2], + t[3] += A * t[5], + t[6] += A * t[8], + t[1] += e * t[2], + t[4] += e * t[5], + t[7] += e * t[8], + this + }, + equals: function (A) { + for (var e = this.elements, t = A.elements, i = 0; 9 > i; i++) + if (e[i] !== t[i]) + return !1; + return !0 + }, + fromArray: function (A, e) { + void 0 === e && (e = 0); + for (var t = 0; 9 > t; t++) + this.elements[t] = A[t + e]; + return this + }, + toArray: function (A, e) { + void 0 === A && (A = []), + void 0 === e && (e = 0); + var t = this.elements; + return A[e] = t[0], + A[e + 1] = t[1], + A[e + 2] = t[2], + A[e + 3] = t[3], + A[e + 4] = t[4], + A[e + 5] = t[5], + A[e + 6] = t[6], + A[e + 7] = t[7], + A[e + 8] = t[8], + A + } + }); + var c = { + getDataURL: function (A) { + var e; + if ("undefined" == typeof HTMLCanvasElement) + return A.src; + if (A instanceof HTMLCanvasElement) + e = A; + else { + void 0 === r && (r = document.createElementNS("http://www.w3.org/1999/xhtml", "canvas")), + r.width = A.width, + r.height = A.height; + var t = r.getContext("2d"); + A instanceof ImageData ? t.putImageData(A, 0, 0) : t.drawImage(A, 0, 0, A.width, A.height), + e = r + } + return e.width > 2048 || e.height > 2048 ? e.toDataURL("image/jpeg", .6) : e.toDataURL("image/png") + } + }, + h = 0; + + function d(A, e, t, i, o, n, r, c, p, g) { + Object.defineProperty(this, "id", { + value: h++ + }), + this.uuid = a.generateUUID(), + this.name = "", + this.image = void 0 !== A ? A : d.DEFAULT_IMAGE, + this.mipmaps = [], + this.mapping = void 0 !== e ? e : d.DEFAULT_MAPPING, + this.wrapS = void 0 !== t ? t : 1001, + this.wrapT = void 0 !== i ? i : 1001, + this.magFilter = void 0 !== o ? o : 1006, + this.minFilter = void 0 !== n ? n : 1008, + this.anisotropy = void 0 !== p ? p : 1, + this.format = void 0 !== r ? r : 1023, + this.internalFormat = null, + this.type = void 0 !== c ? c : 1009, + this.offset = new s(0, 0), + this.repeat = new s(1, 1), + this.center = new s(0, 0), + this.rotation = 0, + this.matrixAutoUpdate = !0, + this.matrix = new l, + this.generateMipmaps = !0, + this.premultiplyAlpha = !1, + this.flipY = !0, + this.unpackAlignment = 4, + this.encoding = void 0 !== g ? g : 3e3, + this.version = 0, + this.onUpdate = null + } + + function p(A, e, t, i) { + this.x = A || 0, + this.y = e || 0, + this.z = t || 0, + this.w = void 0 !== i ? i : 1 + } + + function g(A, e, t) { + this.width = A, + this.height = e, + this.scissor = new p(0, 0, A, e), + this.scissorTest = !1, + this.viewport = new p(0, 0, A, e), + this.texture = new d(void 0, (t = t || {}).mapping, t.wrapS, t.wrapT, t.magFilter, t.minFilter, t.format, t.type, t.anisotropy, t.encoding), + this.texture.image = {}, + this.texture.image.width = A, + this.texture.image.height = e, + this.texture.generateMipmaps = void 0 !== t.generateMipmaps && t.generateMipmaps, + this.texture.minFilter = void 0 !== t.minFilter ? t.minFilter : 1006, + this.depthBuffer = void 0 === t.depthBuffer || t.depthBuffer, + this.stencilBuffer = void 0 === t.stencilBuffer || t.stencilBuffer, + this.depthTexture = void 0 !== t.depthTexture ? t.depthTexture : null + } + + function u(A, e, t) { + g.call(this, A, e, t), + this.samples = 4 + } + + function f(A, e, t, i) { + this._x = A || 0, + this._y = e || 0, + this._z = t || 0, + this._w = void 0 !== i ? i : 1 + } + d.DEFAULT_IMAGE = void 0, + d.DEFAULT_MAPPING = 300, + d.prototype = Object.assign(Object.create(i.prototype), { + constructor: d, + isTexture: !0, + updateMatrix: function () { + this.matrix.setUvTransform(this.offset.x, this.offset.y, this.repeat.x, this.repeat.y, this.rotation, this.center.x, this.center.y) + }, + clone: function () { + return (new this.constructor).copy(this) + }, + copy: function (A) { + return this.name = A.name, + this.image = A.image, + this.mipmaps = A.mipmaps.slice(0), + this.mapping = A.mapping, + this.wrapS = A.wrapS, + this.wrapT = A.wrapT, + this.magFilter = A.magFilter, + this.minFilter = A.minFilter, + this.anisotropy = A.anisotropy, + this.format = A.format, + this.internalFormat = A.internalFormat, + this.type = A.type, + this.offset.copy(A.offset), + this.repeat.copy(A.repeat), + this.center.copy(A.center), + this.rotation = A.rotation, + this.matrixAutoUpdate = A.matrixAutoUpdate, + this.matrix.copy(A.matrix), + this.generateMipmaps = A.generateMipmaps, + this.premultiplyAlpha = A.premultiplyAlpha, + this.flipY = A.flipY, + this.unpackAlignment = A.unpackAlignment, + this.encoding = A.encoding, + this + }, + toJSON: function (A) { + var e = void 0 === A || "string" == typeof A; + if (!e && void 0 !== A.textures[this.uuid]) + return A.textures[this.uuid]; + var t = { + metadata: { + version: 4.5, + type: "Texture", + generator: "Texture.toJSON" + }, + uuid: this.uuid, + name: this.name, + mapping: this.mapping, + repeat: [this.repeat.x, this.repeat.y], + offset: [this.offset.x, this.offset.y], + center: [this.center.x, this.center.y], + rotation: this.rotation, + wrap: [this.wrapS, this.wrapT], + format: this.format, + type: this.type, + encoding: this.encoding, + minFilter: this.minFilter, + magFilter: this.magFilter, + anisotropy: this.anisotropy, + flipY: this.flipY, + premultiplyAlpha: this.premultiplyAlpha, + unpackAlignment: this.unpackAlignment + }; + if (void 0 !== this.image) { + var i = this.image; + if (void 0 === i.uuid && (i.uuid = a.generateUUID()), + !e && void 0 === A.images[i.uuid]) { + var o; + if (Array.isArray(i)) { + o = []; + for (var n = 0, r = i.length; r > n; n++) + o.push(c.getDataURL(i[n])) + } else + o = c.getDataURL(i); + A.images[i.uuid] = { + uuid: i.uuid, + url: o + } + } + t.image = i.uuid + } + return e || (A.textures[this.uuid] = t), + t + }, + dispose: function () { + this.dispatchEvent({ + type: "dispose" + }) + }, + transformUv: function (A) { + if (300 !== this.mapping) + return A; + if (A.applyMatrix3(this.matrix), + 0 > A.x || A.x > 1) + switch (this.wrapS) { + case 1e3: + A.x = A.x - Math.floor(A.x); + break; + case 1001: + A.x = 0 > A.x ? 0 : 1; + break; + case 1002: + A.x = 1 === Math.abs(Math.floor(A.x) % 2) ? Math.ceil(A.x) - A.x : A.x - Math.floor(A.x) + } + if (0 > A.y || A.y > 1) + switch (this.wrapT) { + case 1e3: + A.y = A.y - Math.floor(A.y); + break; + case 1001: + A.y = 0 > A.y ? 0 : 1; + break; + case 1002: + A.y = 1 === Math.abs(Math.floor(A.y) % 2) ? Math.ceil(A.y) - A.y : A.y - Math.floor(A.y) + } + return this.flipY && (A.y = 1 - A.y), + A + } + }), + Object.defineProperty(d.prototype, "needsUpdate", { + set: function (A) { + !0 === A && this.version++ + } + }), + Object.defineProperties(p.prototype, { + width: { + get: function () { + return this.z + }, + set: function (A) { + this.z = A + } + }, + height: { + get: function () { + return this.w + }, + set: function (A) { + this.w = A + } + } + }), + Object.assign(p.prototype, { + isVector4: !0, + set: function (A, e, t, i) { + return this.x = A, + this.y = e, + this.z = t, + this.w = i, + this + }, + setScalar: function (A) { + return this.x = A, + this.y = A, + this.z = A, + this.w = A, + this + }, + setX: function (A) { + return this.x = A, + this + }, + setY: function (A) { + return this.y = A, + this + }, + setZ: function (A) { + return this.z = A, + this + }, + setW: function (A) { + return this.w = A, + this + }, + setComponent: function (A, e) { + switch (A) { + case 0: + this.x = e; + break; + case 1: + this.y = e; + break; + case 2: + this.z = e; + break; + case 3: + this.w = e; + break; + default: + throw new Error("index is out of range: " + A) + } + return this + }, + getComponent: function (A) { + switch (A) { + case 0: + return this.x; + case 1: + return this.y; + case 2: + return this.z; + case 3: + return this.w; + default: + throw new Error("index is out of range: " + A) + } + }, + clone: function () { + return new this.constructor(this.x, this.y, this.z, this.w) + }, + copy: function (A) { + return this.x = A.x, + this.y = A.y, + this.z = A.z, + this.w = void 0 !== A.w ? A.w : 1, + this + }, + add: function (A, e) { + return void 0 !== e ? (console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."), + this.addVectors(A, e)) : (this.x += A.x, + this.y += A.y, + this.z += A.z, + this.w += A.w, + this) + }, + addScalar: function (A) { + return this.x += A, + this.y += A, + this.z += A, + this.w += A, + this + }, + addVectors: function (A, e) { + return this.x = A.x + e.x, + this.y = A.y + e.y, + this.z = A.z + e.z, + this.w = A.w + e.w, + this + }, + addScaledVector: function (A, e) { + return this.x += A.x * e, + this.y += A.y * e, + this.z += A.z * e, + this.w += A.w * e, + this + }, + sub: function (A, e) { + return void 0 !== e ? (console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."), + this.subVectors(A, e)) : (this.x -= A.x, + this.y -= A.y, + this.z -= A.z, + this.w -= A.w, + this) + }, + subScalar: function (A) { + return this.x -= A, + this.y -= A, + this.z -= A, + this.w -= A, + this + }, + subVectors: function (A, e) { + return this.x = A.x - e.x, + this.y = A.y - e.y, + this.z = A.z - e.z, + this.w = A.w - e.w, + this + }, + multiplyScalar: function (A) { + return this.x *= A, + this.y *= A, + this.z *= A, + this.w *= A, + this + }, + applyMatrix4: function (A) { + var e = this.x, + t = this.y, + i = this.z, + o = this.w, + n = A.elements; + return this.x = n[0] * e + n[4] * t + n[8] * i + n[12] * o, + this.y = n[1] * e + n[5] * t + n[9] * i + n[13] * o, + this.z = n[2] * e + n[6] * t + n[10] * i + n[14] * o, + this.w = n[3] * e + n[7] * t + n[11] * i + n[15] * o, + this + }, + divideScalar: function (A) { + return this.multiplyScalar(1 / A) + }, + setAxisAngleFromQuaternion: function (A) { + this.w = 2 * Math.acos(A.w); + var e = Math.sqrt(1 - A.w * A.w); + return 1e-4 > e ? (this.x = 1, + this.y = 0, + this.z = 0) : (this.x = A.x / e, + this.y = A.y / e, + this.z = A.z / e), + this + }, + setAxisAngleFromRotationMatrix: function (A) { + var e, t, i, o, n = A.elements, + r = n[0], + a = n[4], + s = n[8], + l = n[1], + c = n[5], + h = n[9], + d = n[2], + p = n[6], + g = n[10]; + if (.01 > Math.abs(a - l) && .01 > Math.abs(s - d) && .01 > Math.abs(h - p)) { + if (.1 > Math.abs(a + l) && .1 > Math.abs(s + d) && .1 > Math.abs(h + p) && .1 > Math.abs(r + c + g - 3)) + return this.set(1, 0, 0, 0), + this; + e = Math.PI; + var u = (r + 1) / 2, + f = (c + 1) / 2, + m = (g + 1) / 2, + C = (a + l) / 4, + y = (s + d) / 4, + v = (h + p) / 4; + return u > f && u > m ? .01 > u ? (t = 0, + i = .707106781, + o = .707106781) : (i = C / (t = Math.sqrt(u)), + o = y / t) : f > m ? .01 > f ? (t = .707106781, + i = 0, + o = .707106781) : (t = C / (i = Math.sqrt(f)), + o = v / i) : .01 > m ? (t = .707106781, + i = .707106781, + o = 0) : (t = y / (o = Math.sqrt(m)), + i = v / o), + this.set(t, i, o, e), + this + } + var I = Math.sqrt((p - h) * (p - h) + (s - d) * (s - d) + (l - a) * (l - a)); + return .001 > Math.abs(I) && (I = 1), + this.x = (p - h) / I, + this.y = (s - d) / I, + this.z = (l - a) / I, + this.w = Math.acos((r + c + g - 1) / 2), + this + }, + min: function (A) { + return this.x = Math.min(this.x, A.x), + this.y = Math.min(this.y, A.y), + this.z = Math.min(this.z, A.z), + this.w = Math.min(this.w, A.w), + this + }, + max: function (A) { + return this.x = Math.max(this.x, A.x), + this.y = Math.max(this.y, A.y), + this.z = Math.max(this.z, A.z), + this.w = Math.max(this.w, A.w), + this + }, + clamp: function (A, e) { + return this.x = Math.max(A.x, Math.min(e.x, this.x)), + this.y = Math.max(A.y, Math.min(e.y, this.y)), + this.z = Math.max(A.z, Math.min(e.z, this.z)), + this.w = Math.max(A.w, Math.min(e.w, this.w)), + this + }, + clampScalar: function (A, e) { + return this.x = Math.max(A, Math.min(e, this.x)), + this.y = Math.max(A, Math.min(e, this.y)), + this.z = Math.max(A, Math.min(e, this.z)), + this.w = Math.max(A, Math.min(e, this.w)), + this + }, + clampLength: function (A, e) { + var t = this.length(); + return this.divideScalar(t || 1).multiplyScalar(Math.max(A, Math.min(e, t))) + }, + floor: function () { + return this.x = Math.floor(this.x), + this.y = Math.floor(this.y), + this.z = Math.floor(this.z), + this.w = Math.floor(this.w), + this + }, + ceil: function () { + return this.x = Math.ceil(this.x), + this.y = Math.ceil(this.y), + this.z = Math.ceil(this.z), + this.w = Math.ceil(this.w), + this + }, + round: function () { + return this.x = Math.round(this.x), + this.y = Math.round(this.y), + this.z = Math.round(this.z), + this.w = Math.round(this.w), + this + }, + roundToZero: function () { + return this.x = 0 > this.x ? Math.ceil(this.x) : Math.floor(this.x), + this.y = 0 > this.y ? Math.ceil(this.y) : Math.floor(this.y), + this.z = 0 > this.z ? Math.ceil(this.z) : Math.floor(this.z), + this.w = 0 > this.w ? Math.ceil(this.w) : Math.floor(this.w), + this + }, + negate: function () { + return this.x = -this.x, + this.y = -this.y, + this.z = -this.z, + this.w = -this.w, + this + }, + dot: function (A) { + return this.x * A.x + this.y * A.y + this.z * A.z + this.w * A.w + }, + lengthSq: function () { + return this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w + }, + length: function () { + return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w) + }, + manhattanLength: function () { + return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z) + Math.abs(this.w) + }, + normalize: function () { + return this.divideScalar(this.length() || 1) + }, + setLength: function (A) { + return this.normalize().multiplyScalar(A) + }, + lerp: function (A, e) { + return this.x += (A.x - this.x) * e, + this.y += (A.y - this.y) * e, + this.z += (A.z - this.z) * e, + this.w += (A.w - this.w) * e, + this + }, + lerpVectors: function (A, e, t) { + return this.subVectors(e, A).multiplyScalar(t).add(A) + }, + equals: function (A) { + return A.x === this.x && A.y === this.y && A.z === this.z && A.w === this.w + }, + fromArray: function (A, e) { + return void 0 === e && (e = 0), + this.x = A[e], + this.y = A[e + 1], + this.z = A[e + 2], + this.w = A[e + 3], + this + }, + toArray: function (A, e) { + return void 0 === A && (A = []), + void 0 === e && (e = 0), + A[e] = this.x, + A[e + 1] = this.y, + A[e + 2] = this.z, + A[e + 3] = this.w, + A + }, + fromBufferAttribute: function (A, e, t) { + return void 0 !== t && console.warn("THREE.Vector4: offset has been removed from .fromBufferAttribute()."), + this.x = A.getX(e), + this.y = A.getY(e), + this.z = A.getZ(e), + this.w = A.getW(e), + this + } + }), + g.prototype = Object.assign(Object.create(i.prototype), { + constructor: g, + isWebGLRenderTarget: !0, + setSize: function (A, e) { + this.width === A && this.height === e || (this.width = A, + this.height = e, + this.texture.image.width = A, + this.texture.image.height = e, + this.dispose()), + this.viewport.set(0, 0, A, e), + this.scissor.set(0, 0, A, e) + }, + clone: function () { + return (new this.constructor).copy(this) + }, + copy: function (A) { + return this.width = A.width, + this.height = A.height, + this.viewport.copy(A.viewport), + this.texture = A.texture.clone(), + this.depthBuffer = A.depthBuffer, + this.stencilBuffer = A.stencilBuffer, + this.depthTexture = A.depthTexture, + this + }, + dispose: function () { + this.dispatchEvent({ + type: "dispose" + }) + } + }), + u.prototype = Object.assign(Object.create(g.prototype), { + constructor: u, + isWebGLMultisampleRenderTarget: !0, + copy: function (A) { + return g.prototype.copy.call(this, A), + this.samples = A.samples, + this + } + }), + Object.assign(f, { + slerp: function (A, e, t, i) { + return t.copy(A).slerp(e, i) + }, + slerpFlat: function (A, e, t, i, o, n, r) { + var a = t[i + 0], + s = t[i + 1], + l = t[i + 2], + c = t[i + 3], + h = o[n + 0], + d = o[n + 1], + p = o[n + 2], + g = o[n + 3]; + if (c !== g || a !== h || s !== d || l !== p) { + var u = 1 - r, + f = a * h + s * d + l * p + c * g, + m = 0 > f ? -1 : 1, + C = 1 - f * f; + if (C > Number.EPSILON) { + var y = Math.sqrt(C), + v = Math.atan2(y, f * m); + u = Math.sin(u * v) / y, + r = Math.sin(r * v) / y + } + var I = r * m; + if (a = a * u + h * I, + s = s * u + d * I, + l = l * u + p * I, + c = c * u + g * I, + u === 1 - r) { + var E = 1 / Math.sqrt(a * a + s * s + l * l + c * c); + a *= E, + s *= E, + l *= E, + c *= E + } + } + A[e] = a, + A[e + 1] = s, + A[e + 2] = l, + A[e + 3] = c + } + }), + Object.defineProperties(f.prototype, { + x: { + get: function () { + return this._x + }, + set: function (A) { + this._x = A, + this._onChangeCallback() + } + }, + y: { + get: function () { + return this._y + }, + set: function (A) { + this._y = A, + this._onChangeCallback() + } + }, + z: { + get: function () { + return this._z + }, + set: function (A) { + this._z = A, + this._onChangeCallback() + } + }, + w: { + get: function () { + return this._w + }, + set: function (A) { + this._w = A, + this._onChangeCallback() + } + } + }), + Object.assign(f.prototype, { + isQuaternion: !0, + set: function (A, e, t, i) { + return this._x = A, + this._y = e, + this._z = t, + this._w = i, + this._onChangeCallback(), + this + }, + clone: function () { + return new this.constructor(this._x, this._y, this._z, this._w) + }, + copy: function (A) { + return this._x = A.x, + this._y = A.y, + this._z = A.z, + this._w = A.w, + this._onChangeCallback(), + this + }, + setFromEuler: function (A, e) { + if (!A || !A.isEuler) + throw new Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order."); + var t = A._x, + i = A._y, + o = A._z, + n = A.order, + r = Math.cos, + a = Math.sin, + s = r(t / 2), + l = r(i / 2), + c = r(o / 2), + h = a(t / 2), + d = a(i / 2), + p = a(o / 2); + return "XYZ" === n ? (this._x = h * l * c + s * d * p, + this._y = s * d * c - h * l * p, + this._z = s * l * p + h * d * c, + this._w = s * l * c - h * d * p) : "YXZ" === n ? (this._x = h * l * c + s * d * p, + this._y = s * d * c - h * l * p, + this._z = s * l * p - h * d * c, + this._w = s * l * c + h * d * p) : "ZXY" === n ? (this._x = h * l * c - s * d * p, + this._y = s * d * c + h * l * p, + this._z = s * l * p + h * d * c, + this._w = s * l * c - h * d * p) : "ZYX" === n ? (this._x = h * l * c - s * d * p, + this._y = s * d * c + h * l * p, + this._z = s * l * p - h * d * c, + this._w = s * l * c + h * d * p) : "YZX" === n ? (this._x = h * l * c + s * d * p, + this._y = s * d * c + h * l * p, + this._z = s * l * p - h * d * c, + this._w = s * l * c - h * d * p) : "XZY" === n && (this._x = h * l * c - s * d * p, + this._y = s * d * c - h * l * p, + this._z = s * l * p + h * d * c, + this._w = s * l * c + h * d * p), + !1 !== e && this._onChangeCallback(), + this + }, + setFromAxisAngle: function (A, e) { + var t = e / 2, + i = Math.sin(t); + return this._x = A.x * i, + this._y = A.y * i, + this._z = A.z * i, + this._w = Math.cos(t), + this._onChangeCallback(), + this + }, + setFromRotationMatrix: function (A) { + var e, t = A.elements, + i = t[0], + o = t[4], + n = t[8], + r = t[1], + a = t[5], + s = t[9], + l = t[2], + c = t[6], + h = t[10], + d = i + a + h; + return d > 0 ? (e = .5 / Math.sqrt(d + 1), + this._w = .25 / e, + this._x = (c - s) * e, + this._y = (n - l) * e, + this._z = (r - o) * e) : i > a && i > h ? (e = 2 * Math.sqrt(1 + i - a - h), + this._w = (c - s) / e, + this._x = .25 * e, + this._y = (o + r) / e, + this._z = (n + l) / e) : a > h ? (e = 2 * Math.sqrt(1 + a - i - h), + this._w = (n - l) / e, + this._x = (o + r) / e, + this._y = .25 * e, + this._z = (s + c) / e) : (e = 2 * Math.sqrt(1 + h - i - a), + this._w = (r - o) / e, + this._x = (n + l) / e, + this._y = (s + c) / e, + this._z = .25 * e), + this._onChangeCallback(), + this + }, + setFromUnitVectors: function (A, e) { + var t = A.dot(e) + 1; + return 1e-6 > t ? (t = 0, + Math.abs(A.x) > Math.abs(A.z) ? (this._x = -A.y, + this._y = A.x, + this._z = 0, + this._w = t) : (this._x = 0, + this._y = -A.z, + this._z = A.y, + this._w = t)) : (this._x = A.y * e.z - A.z * e.y, + this._y = A.z * e.x - A.x * e.z, + this._z = A.x * e.y - A.y * e.x, + this._w = t), + this.normalize() + }, + angleTo: function (A) { + return 2 * Math.acos(Math.abs(a.clamp(this.dot(A), -1, 1))) + }, + rotateTowards: function (A, e) { + var t = this.angleTo(A); + if (0 === t) + return this; + var i = Math.min(1, e / t); + return this.slerp(A, i), + this + }, + inverse: function () { + return this.conjugate() + }, + conjugate: function () { + return this._x *= -1, + this._y *= -1, + this._z *= -1, + this._onChangeCallback(), + this + }, + dot: function (A) { + return this._x * A._x + this._y * A._y + this._z * A._z + this._w * A._w + }, + lengthSq: function () { + return this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w + }, + length: function () { + return Math.sqrt(this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w) + }, + normalize: function () { + var A = this.length(); + return 0 === A ? (this._x = 0, + this._y = 0, + this._z = 0, + this._w = 1) : (this._x = this._x * (A = 1 / A), + this._y = this._y * A, + this._z = this._z * A, + this._w = this._w * A), + this._onChangeCallback(), + this + }, + multiply: function (A, e) { + return void 0 !== e ? (console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."), + this.multiplyQuaternions(A, e)) : this.multiplyQuaternions(this, A) + }, + premultiply: function (A) { + return this.multiplyQuaternions(A, this) + }, + multiplyQuaternions: function (A, e) { + var t = A._x, + i = A._y, + o = A._z, + n = A._w, + r = e._x, + a = e._y, + s = e._z, + l = e._w; + return this._x = t * l + n * r + i * s - o * a, + this._y = i * l + n * a + o * r - t * s, + this._z = o * l + n * s + t * a - i * r, + this._w = n * l - t * r - i * a - o * s, + this._onChangeCallback(), + this + }, + slerp: function (A, e) { + if (0 === e) + return this; + if (1 === e) + return this.copy(A); + var t = this._x, + i = this._y, + o = this._z, + n = this._w, + r = n * A._w + t * A._x + i * A._y + o * A._z; + if (0 > r ? (this._w = -A._w, + this._x = -A._x, + this._y = -A._y, + this._z = -A._z, + r = -r) : this.copy(A), + r >= 1) + return this._w = n, + this._x = t, + this._y = i, + this._z = o, + this; + var a = 1 - r * r; + if (Number.EPSILON >= a) { + var s = 1 - e; + return this._w = s * n + e * this._w, + this._x = s * t + e * this._x, + this._y = s * i + e * this._y, + this._z = s * o + e * this._z, + this.normalize(), + this._onChangeCallback(), + this + } + var l = Math.sqrt(a), + c = Math.atan2(l, r), + h = Math.sin((1 - e) * c) / l, + d = Math.sin(e * c) / l; + return this._w = n * h + this._w * d, + this._x = t * h + this._x * d, + this._y = i * h + this._y * d, + this._z = o * h + this._z * d, + this._onChangeCallback(), + this + }, + equals: function (A) { + return A._x === this._x && A._y === this._y && A._z === this._z && A._w === this._w + }, + fromArray: function (A, e) { + return void 0 === e && (e = 0), + this._x = A[e], + this._y = A[e + 1], + this._z = A[e + 2], + this._w = A[e + 3], + this._onChangeCallback(), + this + }, + toArray: function (A, e) { + return void 0 === A && (A = []), + void 0 === e && (e = 0), + A[e] = this._x, + A[e + 1] = this._y, + A[e + 2] = this._z, + A[e + 3] = this._w, + A + }, + fromBufferAttribute: function (A, e) { + return this._x = A.getX(e), + this._y = A.getY(e), + this._z = A.getZ(e), + this._w = A.getW(e), + this + }, + _onChange: function (A) { + return this._onChangeCallback = A, + this + }, + _onChangeCallback: function () {} + }); + var m = new y, + C = new f; + + function y(A, e, t) { + this.x = A || 0, + this.y = e || 0, + this.z = t || 0 + } + Object.assign(y.prototype, { + isVector3: !0, + set: function (A, e, t) { + return this.x = A, + this.y = e, + this.z = t, + this + }, + setScalar: function (A) { + return this.x = A, + this.y = A, + this.z = A, + this + }, + setX: function (A) { + return this.x = A, + this + }, + setY: function (A) { + return this.y = A, + this + }, + setZ: function (A) { + return this.z = A, + this + }, + setComponent: function (A, e) { + switch (A) { + case 0: + this.x = e; + break; + case 1: + this.y = e; + break; + case 2: + this.z = e; + break; + default: + throw new Error("index is out of range: " + A) + } + return this + }, + getComponent: function (A) { + switch (A) { + case 0: + return this.x; + case 1: + return this.y; + case 2: + return this.z; + default: + throw new Error("index is out of range: " + A) + } + }, + clone: function () { + return new this.constructor(this.x, this.y, this.z) + }, + copy: function (A) { + return this.x = A.x, + this.y = A.y, + this.z = A.z, + this + }, + add: function (A, e) { + return void 0 !== e ? (console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."), + this.addVectors(A, e)) : (this.x += A.x, + this.y += A.y, + this.z += A.z, + this) + }, + addScalar: function (A) { + return this.x += A, + this.y += A, + this.z += A, + this + }, + addVectors: function (A, e) { + return this.x = A.x + e.x, + this.y = A.y + e.y, + this.z = A.z + e.z, + this + }, + addScaledVector: function (A, e) { + return this.x += A.x * e, + this.y += A.y * e, + this.z += A.z * e, + this + }, + sub: function (A, e) { + return void 0 !== e ? (console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."), + this.subVectors(A, e)) : (this.x -= A.x, + this.y -= A.y, + this.z -= A.z, + this) + }, + subScalar: function (A) { + return this.x -= A, + this.y -= A, + this.z -= A, + this + }, + subVectors: function (A, e) { + return this.x = A.x - e.x, + this.y = A.y - e.y, + this.z = A.z - e.z, + this + }, + multiply: function (A, e) { + return void 0 !== e ? (console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."), + this.multiplyVectors(A, e)) : (this.x *= A.x, + this.y *= A.y, + this.z *= A.z, + this) + }, + multiplyScalar: function (A) { + return this.x *= A, + this.y *= A, + this.z *= A, + this + }, + multiplyVectors: function (A, e) { + return this.x = A.x * e.x, + this.y = A.y * e.y, + this.z = A.z * e.z, + this + }, + applyEuler: function (A) { + return A && A.isEuler || console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order."), + this.applyQuaternion(C.setFromEuler(A)) + }, + applyAxisAngle: function (A, e) { + return this.applyQuaternion(C.setFromAxisAngle(A, e)) + }, + applyMatrix3: function (A) { + var e = this.x, + t = this.y, + i = this.z, + o = A.elements; + return this.x = o[0] * e + o[3] * t + o[6] * i, + this.y = o[1] * e + o[4] * t + o[7] * i, + this.z = o[2] * e + o[5] * t + o[8] * i, + this + }, + applyNormalMatrix: function (A) { + return this.applyMatrix3(A).normalize() + }, + applyMatrix4: function (A) { + var e = this.x, + t = this.y, + i = this.z, + o = A.elements, + n = 1 / (o[3] * e + o[7] * t + o[11] * i + o[15]); + return this.x = (o[0] * e + o[4] * t + o[8] * i + o[12]) * n, + this.y = (o[1] * e + o[5] * t + o[9] * i + o[13]) * n, + this.z = (o[2] * e + o[6] * t + o[10] * i + o[14]) * n, + this + }, + applyQuaternion: function (A) { + var e = this.x, + t = this.y, + i = this.z, + o = A.x, + n = A.y, + r = A.z, + a = A.w, + s = a * e + n * i - r * t, + l = a * t + r * e - o * i, + c = a * i + o * t - n * e, + h = -o * e - n * t - r * i; + return this.x = s * a + h * -o + l * -r - c * -n, + this.y = l * a + h * -n + c * -o - s * -r, + this.z = c * a + h * -r + s * -n - l * -o, + this + }, + project: function (A) { + return this.applyMatrix4(A.matrixWorldInverse).applyMatrix4(A.projectionMatrix) + }, + unproject: function (A) { + return this.applyMatrix4(A.projectionMatrixInverse).applyMatrix4(A.matrixWorld) + }, + transformDirection: function (A) { + var e = this.x, + t = this.y, + i = this.z, + o = A.elements; + return this.x = o[0] * e + o[4] * t + o[8] * i, + this.y = o[1] * e + o[5] * t + o[9] * i, + this.z = o[2] * e + o[6] * t + o[10] * i, + this.normalize() + }, + divide: function (A) { + return this.x /= A.x, + this.y /= A.y, + this.z /= A.z, + this + }, + divideScalar: function (A) { + return this.multiplyScalar(1 / A) + }, + min: function (A) { + return this.x = Math.min(this.x, A.x), + this.y = Math.min(this.y, A.y), + this.z = Math.min(this.z, A.z), + this + }, + max: function (A) { + return this.x = Math.max(this.x, A.x), + this.y = Math.max(this.y, A.y), + this.z = Math.max(this.z, A.z), + this + }, + clamp: function (A, e) { + return this.x = Math.max(A.x, Math.min(e.x, this.x)), + this.y = Math.max(A.y, Math.min(e.y, this.y)), + this.z = Math.max(A.z, Math.min(e.z, this.z)), + this + }, + clampScalar: function (A, e) { + return this.x = Math.max(A, Math.min(e, this.x)), + this.y = Math.max(A, Math.min(e, this.y)), + this.z = Math.max(A, Math.min(e, this.z)), + this + }, + clampLength: function (A, e) { + var t = this.length(); + return this.divideScalar(t || 1).multiplyScalar(Math.max(A, Math.min(e, t))) + }, + floor: function () { + return this.x = Math.floor(this.x), + this.y = Math.floor(this.y), + this.z = Math.floor(this.z), + this + }, + ceil: function () { + return this.x = Math.ceil(this.x), + this.y = Math.ceil(this.y), + this.z = Math.ceil(this.z), + this + }, + round: function () { + return this.x = Math.round(this.x), + this.y = Math.round(this.y), + this.z = Math.round(this.z), + this + }, + roundToZero: function () { + return this.x = 0 > this.x ? Math.ceil(this.x) : Math.floor(this.x), + this.y = 0 > this.y ? Math.ceil(this.y) : Math.floor(this.y), + this.z = 0 > this.z ? Math.ceil(this.z) : Math.floor(this.z), + this + }, + negate: function () { + return this.x = -this.x, + this.y = -this.y, + this.z = -this.z, + this + }, + dot: function (A) { + return this.x * A.x + this.y * A.y + this.z * A.z + }, + lengthSq: function () { + return this.x * this.x + this.y * this.y + this.z * this.z + }, + length: function () { + return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z) + }, + manhattanLength: function () { + return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z) + }, + normalize: function () { + return this.divideScalar(this.length() || 1) + }, + setLength: function (A) { + return this.normalize().multiplyScalar(A) + }, + lerp: function (A, e) { + return this.x += (A.x - this.x) * e, + this.y += (A.y - this.y) * e, + this.z += (A.z - this.z) * e, + this + }, + lerpVectors: function (A, e, t) { + return this.subVectors(e, A).multiplyScalar(t).add(A) + }, + cross: function (A, e) { + return void 0 !== e ? (console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."), + this.crossVectors(A, e)) : this.crossVectors(this, A) + }, + crossVectors: function (A, e) { + var t = A.x, + i = A.y, + o = A.z, + n = e.x, + r = e.y, + a = e.z; + return this.x = i * a - o * r, + this.y = o * n - t * a, + this.z = t * r - i * n, + this + }, + projectOnVector: function (A) { + var e = A.lengthSq(); + if (0 === e) + return this.set(0, 0, 0); + var t = A.dot(this) / e; + return this.copy(A).multiplyScalar(t) + }, + projectOnPlane: function (A) { + return m.copy(this).projectOnVector(A), + this.sub(m) + }, + reflect: function (A) { + return this.sub(m.copy(A).multiplyScalar(2 * this.dot(A))) + }, + angleTo: function (A) { + var e = Math.sqrt(this.lengthSq() * A.lengthSq()); + if (0 === e) + return Math.PI / 2; + var t = this.dot(A) / e; + return Math.acos(a.clamp(t, -1, 1)) + }, + distanceTo: function (A) { + return Math.sqrt(this.distanceToSquared(A)) + }, + distanceToSquared: function (A) { + var e = this.x - A.x, + t = this.y - A.y, + i = this.z - A.z; + return e * e + t * t + i * i + }, + manhattanDistanceTo: function (A) { + return Math.abs(this.x - A.x) + Math.abs(this.y - A.y) + Math.abs(this.z - A.z) + }, + setFromSpherical: function (A) { + return this.setFromSphericalCoords(A.radius, A.phi, A.theta) + }, + setFromSphericalCoords: function (A, e, t) { + var i = Math.sin(e) * A; + return this.x = i * Math.sin(t), + this.y = Math.cos(e) * A, + this.z = i * Math.cos(t), + this + }, + setFromCylindrical: function (A) { + return this.setFromCylindricalCoords(A.radius, A.theta, A.y) + }, + setFromCylindricalCoords: function (A, e, t) { + return this.x = A * Math.sin(e), + this.y = t, + this.z = A * Math.cos(e), + this + }, + setFromMatrixPosition: function (A) { + var e = A.elements; + return this.x = e[12], + this.y = e[13], + this.z = e[14], + this + }, + setFromMatrixScale: function (A) { + var e = this.setFromMatrixColumn(A, 0).length(), + t = this.setFromMatrixColumn(A, 1).length(), + i = this.setFromMatrixColumn(A, 2).length(); + return this.x = e, + this.y = t, + this.z = i, + this + }, + setFromMatrixColumn: function (A, e) { + return this.fromArray(A.elements, 4 * e) + }, + setFromMatrix3Column: function (A, e) { + return this.fromArray(A.elements, 3 * e) + }, + equals: function (A) { + return A.x === this.x && A.y === this.y && A.z === this.z + }, + fromArray: function (A, e) { + return void 0 === e && (e = 0), + this.x = A[e], + this.y = A[e + 1], + this.z = A[e + 2], + this + }, + toArray: function (A, e) { + return void 0 === A && (A = []), + void 0 === e && (e = 0), + A[e] = this.x, + A[e + 1] = this.y, + A[e + 2] = this.z, + A + }, + fromBufferAttribute: function (A, e, t) { + return void 0 !== t && console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute()."), + this.x = A.getX(e), + this.y = A.getY(e), + this.z = A.getZ(e), + this + } + }); + var v = new y, + I = new M, + E = new y(0, 0, 0), + B = new y(1, 1, 1), + x = new y, + S = new y, + w = new y; + + function M() { + this.elements = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], + arguments.length > 0 && console.error("THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.") + } + Object.assign(M.prototype, { + isMatrix4: !0, + set: function (A, e, t, i, o, n, r, a, s, l, c, h, d, p, g, u) { + var f = this.elements; + return f[0] = A, + f[4] = e, + f[8] = t, + f[12] = i, + f[1] = o, + f[5] = n, + f[9] = r, + f[13] = a, + f[2] = s, + f[6] = l, + f[10] = c, + f[14] = h, + f[3] = d, + f[7] = p, + f[11] = g, + f[15] = u, + this + }, + identity: function () { + return this.set(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1), + this + }, + clone: function () { + return (new M).fromArray(this.elements) + }, + copy: function (A) { + var e = this.elements, + t = A.elements; + return e[0] = t[0], + e[1] = t[1], + e[2] = t[2], + e[3] = t[3], + e[4] = t[4], + e[5] = t[5], + e[6] = t[6], + e[7] = t[7], + e[8] = t[8], + e[9] = t[9], + e[10] = t[10], + e[11] = t[11], + e[12] = t[12], + e[13] = t[13], + e[14] = t[14], + e[15] = t[15], + this + }, + copyPosition: function (A) { + var e = this.elements, + t = A.elements; + return e[12] = t[12], + e[13] = t[13], + e[14] = t[14], + this + }, + extractBasis: function (A, e, t) { + return A.setFromMatrixColumn(this, 0), + e.setFromMatrixColumn(this, 1), + t.setFromMatrixColumn(this, 2), + this + }, + makeBasis: function (A, e, t) { + return this.set(A.x, e.x, t.x, 0, A.y, e.y, t.y, 0, A.z, e.z, t.z, 0, 0, 0, 0, 1), + this + }, + extractRotation: function (A) { + var e = this.elements, + t = A.elements, + i = 1 / v.setFromMatrixColumn(A, 0).length(), + o = 1 / v.setFromMatrixColumn(A, 1).length(), + n = 1 / v.setFromMatrixColumn(A, 2).length(); + return e[0] = t[0] * i, + e[1] = t[1] * i, + e[2] = t[2] * i, + e[3] = 0, + e[4] = t[4] * o, + e[5] = t[5] * o, + e[6] = t[6] * o, + e[7] = 0, + e[8] = t[8] * n, + e[9] = t[9] * n, + e[10] = t[10] * n, + e[11] = 0, + e[12] = 0, + e[13] = 0, + e[14] = 0, + e[15] = 1, + this + }, + makeRotationFromEuler: function (A) { + A && A.isEuler || console.error("THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order."); + var e = this.elements, + t = A.x, + i = A.y, + o = A.z, + n = Math.cos(t), + r = Math.sin(t), + a = Math.cos(i), + s = Math.sin(i), + l = Math.cos(o), + c = Math.sin(o); + if ("XYZ" === A.order) { + var h = n * l, + d = n * c, + p = r * l, + g = r * c; + e[0] = a * l, + e[4] = -a * c, + e[8] = s, + e[1] = d + p * s, + e[5] = h - g * s, + e[9] = -r * a, + e[2] = g - h * s, + e[6] = p + d * s, + e[10] = n * a + } else if ("YXZ" === A.order) { + var u = a * c, + f = s * l; + e[0] = (m = a * l) + (C = s * c) * r, + e[4] = f * r - u, + e[8] = n * s, + e[1] = n * c, + e[5] = n * l, + e[9] = -r, + e[2] = u * r - f, + e[6] = C + m * r, + e[10] = n * a + } else if ("ZXY" === A.order) { + var m, C; + u = a * c, + f = s * l; + e[0] = (m = a * l) - (C = s * c) * r, + e[4] = -n * c, + e[8] = f + u * r, + e[1] = u + f * r, + e[5] = n * l, + e[9] = C - m * r, + e[2] = -n * s, + e[6] = r, + e[10] = n * a + } else if ("ZYX" === A.order) { + h = n * l, + d = n * c, + p = r * l, + g = r * c; + e[0] = a * l, + e[4] = p * s - d, + e[8] = h * s + g, + e[1] = a * c, + e[5] = g * s + h, + e[9] = d * s - p, + e[2] = -s, + e[6] = r * a, + e[10] = n * a + } else if ("YZX" === A.order) { + var y = n * a, + v = n * s, + I = r * a, + E = r * s; + e[0] = a * l, + e[4] = E - y * c, + e[8] = I * c + v, + e[1] = c, + e[5] = n * l, + e[9] = -r * l, + e[2] = -s * l, + e[6] = v * c + I, + e[10] = y - E * c + } else if ("XZY" === A.order) { + y = n * a, + v = n * s, + I = r * a, + E = r * s; + e[0] = a * l, + e[4] = -c, + e[8] = s * l, + e[1] = y * c + E, + e[5] = n * l, + e[9] = v * c - I, + e[2] = I * c - v, + e[6] = r * l, + e[10] = E * c + y + } + return e[3] = 0, + e[7] = 0, + e[11] = 0, + e[12] = 0, + e[13] = 0, + e[14] = 0, + e[15] = 1, + this + }, + makeRotationFromQuaternion: function (A) { + return this.compose(E, A, B) + }, + lookAt: function (A, e, t) { + var i = this.elements; + return w.subVectors(A, e), + 0 === w.lengthSq() && (w.z = 1), + w.normalize(), + x.crossVectors(t, w), + 0 === x.lengthSq() && (1 === Math.abs(t.z) ? w.x += 1e-4 : w.z += 1e-4, + w.normalize(), + x.crossVectors(t, w)), + x.normalize(), + S.crossVectors(w, x), + i[0] = x.x, + i[4] = S.x, + i[8] = w.x, + i[1] = x.y, + i[5] = S.y, + i[9] = w.y, + i[2] = x.z, + i[6] = S.z, + i[10] = w.z, + this + }, + multiply: function (A, e) { + return void 0 !== e ? (console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."), + this.multiplyMatrices(A, e)) : this.multiplyMatrices(this, A) + }, + premultiply: function (A) { + return this.multiplyMatrices(A, this) + }, + multiplyMatrices: function (A, e) { + var t = A.elements, + i = e.elements, + o = this.elements, + n = t[0], + r = t[4], + a = t[8], + s = t[12], + l = t[1], + c = t[5], + h = t[9], + d = t[13], + p = t[2], + g = t[6], + u = t[10], + f = t[14], + m = t[3], + C = t[7], + y = t[11], + v = t[15], + I = i[0], + E = i[4], + B = i[8], + x = i[12], + S = i[1], + w = i[5], + M = i[9], + b = i[13], + U = i[2], + F = i[6], + K = i[10], + Q = i[14], + R = i[3], + T = i[7], + k = i[11], + D = i[15]; + return o[0] = n * I + r * S + a * U + s * R, + o[4] = n * E + r * w + a * F + s * T, + o[8] = n * B + r * M + a * K + s * k, + o[12] = n * x + r * b + a * Q + s * D, + o[1] = l * I + c * S + h * U + d * R, + o[5] = l * E + c * w + h * F + d * T, + o[9] = l * B + c * M + h * K + d * k, + o[13] = l * x + c * b + h * Q + d * D, + o[2] = p * I + g * S + u * U + f * R, + o[6] = p * E + g * w + u * F + f * T, + o[10] = p * B + g * M + u * K + f * k, + o[14] = p * x + g * b + u * Q + f * D, + o[3] = m * I + C * S + y * U + v * R, + o[7] = m * E + C * w + y * F + v * T, + o[11] = m * B + C * M + y * K + v * k, + o[15] = m * x + C * b + y * Q + v * D, + this + }, + multiplyScalar: function (A) { + var e = this.elements; + return e[0] *= A, + e[4] *= A, + e[8] *= A, + e[12] *= A, + e[1] *= A, + e[5] *= A, + e[9] *= A, + e[13] *= A, + e[2] *= A, + e[6] *= A, + e[10] *= A, + e[14] *= A, + e[3] *= A, + e[7] *= A, + e[11] *= A, + e[15] *= A, + this + }, + determinant: function () { + var A = this.elements, + e = A[0], + t = A[4], + i = A[8], + o = A[12], + n = A[1], + r = A[5], + a = A[9], + s = A[13], + l = A[2], + c = A[6], + h = A[10], + d = A[14]; + return A[3] * (+o * a * c - i * s * c - o * r * h + t * s * h + i * r * d - t * a * d) + A[7] * (+e * a * d - e * s * h + o * n * h - i * n * d + i * s * l - o * a * l) + A[11] * (+e * s * c - e * r * d - o * n * c + t * n * d + o * r * l - t * s * l) + A[15] * (-i * r * l - e * a * c + e * r * h + i * n * c - t * n * h + t * a * l) + }, + transpose: function () { + var A, e = this.elements; + return A = e[1], + e[1] = e[4], + e[4] = A, + A = e[2], + e[2] = e[8], + e[8] = A, + A = e[6], + e[6] = e[9], + e[9] = A, + A = e[3], + e[3] = e[12], + e[12] = A, + A = e[7], + e[7] = e[13], + e[13] = A, + A = e[11], + e[11] = e[14], + e[14] = A, + this + }, + setPosition: function (A, e, t) { + var i = this.elements; + return A.isVector3 ? (i[12] = A.x, + i[13] = A.y, + i[14] = A.z) : (i[12] = A, + i[13] = e, + i[14] = t), + this + }, + getInverse: function (A, e) { + void 0 !== e && console.warn("THREE.Matrix4: .getInverse() can no longer be configured to throw on degenerate."); + var t = this.elements, + i = A.elements, + o = i[0], + n = i[1], + r = i[2], + a = i[3], + s = i[4], + l = i[5], + c = i[6], + h = i[7], + d = i[8], + p = i[9], + g = i[10], + u = i[11], + f = i[12], + m = i[13], + C = i[14], + y = i[15], + v = p * C * h - m * g * h + m * c * u - l * C * u - p * c * y + l * g * y, + I = f * g * h - d * C * h - f * c * u + s * C * u + d * c * y - s * g * y, + E = d * m * h - f * p * h + f * l * u - s * m * u - d * l * y + s * p * y, + B = f * p * c - d * m * c - f * l * g + s * m * g + d * l * C - s * p * C, + x = o * v + n * I + r * E + a * B; + if (0 === x) + return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); + var S = 1 / x; + return t[0] = v * S, + t[1] = (m * g * a - p * C * a - m * r * u + n * C * u + p * r * y - n * g * y) * S, + t[2] = (l * C * a - m * c * a + m * r * h - n * C * h - l * r * y + n * c * y) * S, + t[3] = (p * c * a - l * g * a - p * r * h + n * g * h + l * r * u - n * c * u) * S, + t[4] = I * S, + t[5] = (d * C * a - f * g * a + f * r * u - o * C * u - d * r * y + o * g * y) * S, + t[6] = (f * c * a - s * C * a - f * r * h + o * C * h + s * r * y - o * c * y) * S, + t[7] = (s * g * a - d * c * a + d * r * h - o * g * h - s * r * u + o * c * u) * S, + t[8] = E * S, + t[9] = (f * p * a - d * m * a - f * n * u + o * m * u + d * n * y - o * p * y) * S, + t[10] = (s * m * a - f * l * a + f * n * h - o * m * h - s * n * y + o * l * y) * S, + t[11] = (d * l * a - s * p * a - d * n * h + o * p * h + s * n * u - o * l * u) * S, + t[12] = B * S, + t[13] = (d * m * r - f * p * r + f * n * g - o * m * g - d * n * C + o * p * C) * S, + t[14] = (f * l * r - s * m * r - f * n * c + o * m * c + s * n * C - o * l * C) * S, + t[15] = (s * p * r - d * l * r + d * n * c - o * p * c - s * n * g + o * l * g) * S, + this + }, + scale: function (A) { + var e = this.elements, + t = A.x, + i = A.y, + o = A.z; + return e[0] *= t, + e[4] *= i, + e[8] *= o, + e[1] *= t, + e[5] *= i, + e[9] *= o, + e[2] *= t, + e[6] *= i, + e[10] *= o, + e[3] *= t, + e[7] *= i, + e[11] *= o, + this + }, + getMaxScaleOnAxis: function () { + var A = this.elements; + return Math.sqrt(Math.max(A[0] * A[0] + A[1] * A[1] + A[2] * A[2], A[4] * A[4] + A[5] * A[5] + A[6] * A[6], A[8] * A[8] + A[9] * A[9] + A[10] * A[10])) + }, + makeTranslation: function (A, e, t) { + return this.set(1, 0, 0, A, 0, 1, 0, e, 0, 0, 1, t, 0, 0, 0, 1), + this + }, + makeRotationX: function (A) { + var e = Math.cos(A), + t = Math.sin(A); + return this.set(1, 0, 0, 0, 0, e, -t, 0, 0, t, e, 0, 0, 0, 0, 1), + this + }, + makeRotationY: function (A) { + var e = Math.cos(A), + t = Math.sin(A); + return this.set(e, 0, t, 0, 0, 1, 0, 0, -t, 0, e, 0, 0, 0, 0, 1), + this + }, + makeRotationZ: function (A) { + var e = Math.cos(A), + t = Math.sin(A); + return this.set(e, -t, 0, 0, t, e, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1), + this + }, + makeRotationAxis: function (A, e) { + var t = Math.cos(e), + i = Math.sin(e), + o = 1 - t, + n = A.x, + r = A.y, + a = A.z, + s = o * n, + l = o * r; + return this.set(s * n + t, s * r - i * a, s * a + i * r, 0, s * r + i * a, l * r + t, l * a - i * n, 0, s * a - i * r, l * a + i * n, o * a * a + t, 0, 0, 0, 0, 1), + this + }, + makeScale: function (A, e, t) { + return this.set(A, 0, 0, 0, 0, e, 0, 0, 0, 0, t, 0, 0, 0, 0, 1), + this + }, + makeShear: function (A, e, t) { + return this.set(1, e, t, 0, A, 1, t, 0, A, e, 1, 0, 0, 0, 0, 1), + this + }, + compose: function (A, e, t) { + var i = this.elements, + o = e._x, + n = e._y, + r = e._z, + a = e._w, + s = o + o, + l = n + n, + c = r + r, + h = o * s, + d = o * l, + p = o * c, + g = n * l, + u = n * c, + f = r * c, + m = a * s, + C = a * l, + y = a * c, + v = t.x, + I = t.y, + E = t.z; + return i[0] = (1 - (g + f)) * v, + i[1] = (d + y) * v, + i[2] = (p - C) * v, + i[3] = 0, + i[4] = (d - y) * I, + i[5] = (1 - (h + f)) * I, + i[6] = (u + m) * I, + i[7] = 0, + i[8] = (p + C) * E, + i[9] = (u - m) * E, + i[10] = (1 - (h + g)) * E, + i[11] = 0, + i[12] = A.x, + i[13] = A.y, + i[14] = A.z, + i[15] = 1, + this + }, + decompose: function (A, e, t) { + var i = this.elements, + o = v.set(i[0], i[1], i[2]).length(), + n = v.set(i[4], i[5], i[6]).length(), + r = v.set(i[8], i[9], i[10]).length(); + 0 > this.determinant() && (o = -o), + A.x = i[12], + A.y = i[13], + A.z = i[14], + I.copy(this); + var a = 1 / o, + s = 1 / n, + l = 1 / r; + return I.elements[0] *= a, + I.elements[1] *= a, + I.elements[2] *= a, + I.elements[4] *= s, + I.elements[5] *= s, + I.elements[6] *= s, + I.elements[8] *= l, + I.elements[9] *= l, + I.elements[10] *= l, + e.setFromRotationMatrix(I), + t.x = o, + t.y = n, + t.z = r, + this + }, + makePerspective: function (A, e, t, i, o, n) { + void 0 === n && console.warn("THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs."); + var r = this.elements, + a = 2 * o / (t - i), + s = (e + A) / (e - A), + l = (t + i) / (t - i), + c = -(n + o) / (n - o), + h = -2 * n * o / (n - o); + return r[0] = 2 * o / (e - A), + r[4] = 0, + r[8] = s, + r[12] = 0, + r[1] = 0, + r[5] = a, + r[9] = l, + r[13] = 0, + r[2] = 0, + r[6] = 0, + r[10] = c, + r[14] = h, + r[3] = 0, + r[7] = 0, + r[11] = -1, + r[15] = 0, + this + }, + makeOrthographic: function (A, e, t, i, o, n) { + var r = this.elements, + a = 1 / (e - A), + s = 1 / (t - i), + l = 1 / (n - o), + c = (e + A) * a, + h = (t + i) * s, + d = (n + o) * l; + return r[0] = 2 * a, + r[4] = 0, + r[8] = 0, + r[12] = -c, + r[1] = 0, + r[5] = 2 * s, + r[9] = 0, + r[13] = -h, + r[2] = 0, + r[6] = 0, + r[10] = -2 * l, + r[14] = -d, + r[3] = 0, + r[7] = 0, + r[11] = 0, + r[15] = 1, + this + }, + equals: function (A) { + for (var e = this.elements, t = A.elements, i = 0; 16 > i; i++) + if (e[i] !== t[i]) + return !1; + return !0 + }, + fromArray: function (A, e) { + void 0 === e && (e = 0); + for (var t = 0; 16 > t; t++) + this.elements[t] = A[t + e]; + return this + }, + toArray: function (A, e) { + void 0 === A && (A = []), + void 0 === e && (e = 0); + var t = this.elements; + return A[e] = t[0], + A[e + 1] = t[1], + A[e + 2] = t[2], + A[e + 3] = t[3], + A[e + 4] = t[4], + A[e + 5] = t[5], + A[e + 6] = t[6], + A[e + 7] = t[7], + A[e + 8] = t[8], + A[e + 9] = t[9], + A[e + 10] = t[10], + A[e + 11] = t[11], + A[e + 12] = t[12], + A[e + 13] = t[13], + A[e + 14] = t[14], + A[e + 15] = t[15], + A + } + }); + var b = new M, + U = new f; + + function F(A, e, t, i) { + this._x = A || 0, + this._y = e || 0, + this._z = t || 0, + this._order = i || F.DefaultOrder + } + + function K() { + this.mask = 1 + } + F.RotationOrders = ["XYZ", "YZX", "ZXY", "XZY", "YXZ", "ZYX"], + F.DefaultOrder = "XYZ", + Object.defineProperties(F.prototype, { + x: { + get: function () { + return this._x + }, + set: function (A) { + this._x = A, + this._onChangeCallback() + } + }, + y: { + get: function () { + return this._y + }, + set: function (A) { + this._y = A, + this._onChangeCallback() + } + }, + z: { + get: function () { + return this._z + }, + set: function (A) { + this._z = A, + this._onChangeCallback() + } + }, + order: { + get: function () { + return this._order + }, + set: function (A) { + this._order = A, + this._onChangeCallback() + } + } + }), + Object.assign(F.prototype, { + isEuler: !0, + set: function (A, e, t, i) { + return this._x = A, + this._y = e, + this._z = t, + this._order = i || this._order, + this._onChangeCallback(), + this + }, + clone: function () { + return new this.constructor(this._x, this._y, this._z, this._order) + }, + copy: function (A) { + return this._x = A._x, + this._y = A._y, + this._z = A._z, + this._order = A._order, + this._onChangeCallback(), + this + }, + setFromRotationMatrix: function (A, e, t) { + var i = a.clamp, + o = A.elements, + n = o[0], + r = o[4], + s = o[8], + l = o[1], + c = o[5], + h = o[9], + d = o[2], + p = o[6], + g = o[10]; + return "XYZ" === (e = e || this._order) ? (this._y = Math.asin(i(s, -1, 1)), + .9999999 > Math.abs(s) ? (this._x = Math.atan2(-h, g), + this._z = Math.atan2(-r, n)) : (this._x = Math.atan2(p, c), + this._z = 0)) : "YXZ" === e ? (this._x = Math.asin(-i(h, -1, 1)), + .9999999 > Math.abs(h) ? (this._y = Math.atan2(s, g), + this._z = Math.atan2(l, c)) : (this._y = Math.atan2(-d, n), + this._z = 0)) : "ZXY" === e ? (this._x = Math.asin(i(p, -1, 1)), + .9999999 > Math.abs(p) ? (this._y = Math.atan2(-d, g), + this._z = Math.atan2(-r, c)) : (this._y = 0, + this._z = Math.atan2(l, n))) : "ZYX" === e ? (this._y = Math.asin(-i(d, -1, 1)), + .9999999 > Math.abs(d) ? (this._x = Math.atan2(p, g), + this._z = Math.atan2(l, n)) : (this._x = 0, + this._z = Math.atan2(-r, c))) : "YZX" === e ? (this._z = Math.asin(i(l, -1, 1)), + .9999999 > Math.abs(l) ? (this._x = Math.atan2(-h, c), + this._y = Math.atan2(-d, n)) : (this._x = 0, + this._y = Math.atan2(s, g))) : "XZY" === e ? (this._z = Math.asin(-i(r, -1, 1)), + .9999999 > Math.abs(r) ? (this._x = Math.atan2(p, c), + this._y = Math.atan2(s, n)) : (this._x = Math.atan2(-h, g), + this._y = 0)) : console.warn("THREE.Euler: .setFromRotationMatrix() given unsupported order: " + e), + this._order = e, + !1 !== t && this._onChangeCallback(), + this + }, + setFromQuaternion: function (A, e, t) { + return b.makeRotationFromQuaternion(A), + this.setFromRotationMatrix(b, e, t) + }, + setFromVector3: function (A, e) { + return this.set(A.x, A.y, A.z, e || this._order) + }, + reorder: function (A) { + return U.setFromEuler(this), + this.setFromQuaternion(U, A) + }, + equals: function (A) { + return A._x === this._x && A._y === this._y && A._z === this._z && A._order === this._order + }, + fromArray: function (A) { + return this._x = A[0], + this._y = A[1], + this._z = A[2], + void 0 !== A[3] && (this._order = A[3]), + this._onChangeCallback(), + this + }, + toArray: function (A, e) { + return void 0 === A && (A = []), + void 0 === e && (e = 0), + A[e] = this._x, + A[e + 1] = this._y, + A[e + 2] = this._z, + A[e + 3] = this._order, + A + }, + toVector3: function (A) { + return A ? A.set(this._x, this._y, this._z) : new y(this._x, this._y, this._z) + }, + _onChange: function (A) { + return this._onChangeCallback = A, + this + }, + _onChangeCallback: function () {} + }), + Object.assign(K.prototype, { + set: function (A) { + this.mask = 1 << A | 0 + }, + enable: function (A) { + this.mask |= 1 << A | 0 + }, + enableAll: function () { + this.mask = -1 + }, + toggle: function (A) { + this.mask ^= 1 << A | 0 + }, + disable: function (A) { + this.mask &= ~(1 << A | 0) + }, + disableAll: function () { + this.mask = 0 + }, + test: function (A) { + return 0 != (this.mask & A.mask) + } + }); + var Q = 0, + R = new y, + T = new f, + k = new M, + D = new y, + L = new y, + N = new y, + O = new f, + V = new y(1, 0, 0), + G = new y(0, 1, 0), + P = new y(0, 0, 1), + q = { + type: "added" + }, + j = { + type: "removed" + }; + + function H() { + Object.defineProperty(this, "id", { + value: Q++ + }), + this.uuid = a.generateUUID(), + this.name = "", + this.type = "Object3D", + this.parent = null, + this.children = [], + this.up = H.DefaultUp.clone(); + var A = new y, + e = new F, + t = new f, + i = new y(1, 1, 1); + e._onChange((function () { + t.setFromEuler(e, !1) + })), + t._onChange((function () { + e.setFromQuaternion(t, void 0, !1) + })), + Object.defineProperties(this, { + position: { + configurable: !0, + enumerable: !0, + value: A + }, + rotation: { + configurable: !0, + enumerable: !0, + value: e + }, + quaternion: { + configurable: !0, + enumerable: !0, + value: t + }, + scale: { + configurable: !0, + enumerable: !0, + value: i + }, + modelViewMatrix: { + value: new M + }, + normalMatrix: { + value: new l + } + }), + this.matrix = new M, + this.matrixWorld = new M, + this.matrixAutoUpdate = H.DefaultMatrixAutoUpdate, + this.matrixWorldNeedsUpdate = !1, + this.layers = new K, + this.visible = !0, + this.castShadow = !1, + this.receiveShadow = !1, + this.frustumCulled = !0, + this.renderOrder = 0, + this.userData = {} + } + + function Y() { + H.call(this), + this.type = "Scene", + this.background = null, + this.environment = null, + this.fog = null, + this.overrideMaterial = null, + this.autoUpdate = !0, + "undefined" != typeof __THREE_DEVTOOLS__ && __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe", { + detail: this + })) + } + H.DefaultUp = new y(0, 1, 0), + H.DefaultMatrixAutoUpdate = !0, + H.prototype = Object.assign(Object.create(i.prototype), { + constructor: H, + isObject3D: !0, + onBeforeRender: function () {}, + onAfterRender: function () {}, + applyMatrix4: function (A) { + this.matrixAutoUpdate && this.updateMatrix(), + this.matrix.premultiply(A), + this.matrix.decompose(this.position, this.quaternion, this.scale) + }, + applyQuaternion: function (A) { + return this.quaternion.premultiply(A), + this + }, + setRotationFromAxisAngle: function (A, e) { + this.quaternion.setFromAxisAngle(A, e) + }, + setRotationFromEuler: function (A) { + this.quaternion.setFromEuler(A, !0) + }, + setRotationFromMatrix: function (A) { + this.quaternion.setFromRotationMatrix(A) + }, + setRotationFromQuaternion: function (A) { + this.quaternion.copy(A) + }, + rotateOnAxis: function (A, e) { + return T.setFromAxisAngle(A, e), + this.quaternion.multiply(T), + this + }, + rotateOnWorldAxis: function (A, e) { + return T.setFromAxisAngle(A, e), + this.quaternion.premultiply(T), + this + }, + rotateX: function (A) { + return this.rotateOnAxis(V, A) + }, + rotateY: function (A) { + return this.rotateOnAxis(G, A) + }, + rotateZ: function (A) { + return this.rotateOnAxis(P, A) + }, + translateOnAxis: function (A, e) { + return R.copy(A).applyQuaternion(this.quaternion), + this.position.add(R.multiplyScalar(e)), + this + }, + translateX: function (A) { + return this.translateOnAxis(V, A) + }, + translateY: function (A) { + return this.translateOnAxis(G, A) + }, + translateZ: function (A) { + return this.translateOnAxis(P, A) + }, + localToWorld: function (A) { + return A.applyMatrix4(this.matrixWorld) + }, + worldToLocal: function (A) { + return A.applyMatrix4(k.getInverse(this.matrixWorld)) + }, + lookAt: function (A, e, t) { + A.isVector3 ? D.copy(A) : D.set(A, e, t); + var i = this.parent; + this.updateWorldMatrix(!0, !1), + L.setFromMatrixPosition(this.matrixWorld), + this.isCamera || this.isLight ? k.lookAt(L, D, this.up) : k.lookAt(D, L, this.up), + this.quaternion.setFromRotationMatrix(k), + i && (k.extractRotation(i.matrixWorld), + T.setFromRotationMatrix(k), + this.quaternion.premultiply(T.inverse())) + }, + add: function (A) { + if (arguments.length > 1) { + for (var e = 0; arguments.length > e; e++) + this.add(arguments[e]); + return this + } + return A === this ? (console.error("THREE.Object3D.add: object can't be added as a child of itself.", A), + this) : (A && A.isObject3D ? (null !== A.parent && A.parent.remove(A), + A.parent = this, + this.children.push(A), + A.dispatchEvent(q)) : console.error("THREE.Object3D.add: object not an instance of THREE.Object3D.", A), + this) + }, + remove: function (A) { + if (arguments.length > 1) { + for (var e = 0; arguments.length > e; e++) + this.remove(arguments[e]); + return this + } + var t = this.children.indexOf(A); + return -1 !== t && (A.parent = null, + this.children.splice(t, 1), + A.dispatchEvent(j)), + this + }, + attach: function (A) { + return this.updateWorldMatrix(!0, !1), + k.getInverse(this.matrixWorld), + null !== A.parent && (A.parent.updateWorldMatrix(!0, !1), + k.multiply(A.parent.matrixWorld)), + A.applyMatrix4(k), + A.updateWorldMatrix(!1, !1), + this.add(A), + this + }, + getObjectById: function (A) { + return this.getObjectByProperty("id", A) + }, + getObjectByName: function (A) { + return this.getObjectByProperty("name", A) + }, + getObjectByProperty: function (A, e) { + if (this[A] === e) + return this; + for (var t = 0, i = this.children.length; i > t; t++) { + var o = this.children[t].getObjectByProperty(A, e); + if (void 0 !== o) + return o + } + }, + getWorldPosition: function (A) { + return void 0 === A && (console.warn("THREE.Object3D: .getWorldPosition() target is now required"), + A = new y), + this.updateMatrixWorld(!0), + A.setFromMatrixPosition(this.matrixWorld) + }, + getWorldQuaternion: function (A) { + return void 0 === A && (console.warn("THREE.Object3D: .getWorldQuaternion() target is now required"), + A = new f), + this.updateMatrixWorld(!0), + this.matrixWorld.decompose(L, A, N), + A + }, + getWorldScale: function (A) { + return void 0 === A && (console.warn("THREE.Object3D: .getWorldScale() target is now required"), + A = new y), + this.updateMatrixWorld(!0), + this.matrixWorld.decompose(L, O, A), + A + }, + getWorldDirection: function (A) { + void 0 === A && (console.warn("THREE.Object3D: .getWorldDirection() target is now required"), + A = new y), + this.updateMatrixWorld(!0); + var e = this.matrixWorld.elements; + return A.set(e[8], e[9], e[10]).normalize() + }, + raycast: function () {}, + traverse: function (A) { + A(this); + for (var e = this.children, t = 0, i = e.length; i > t; t++) + e[t].traverse(A) + }, + traverseVisible: function (A) { + if (!1 !== this.visible) { + A(this); + for (var e = this.children, t = 0, i = e.length; i > t; t++) + e[t].traverseVisible(A) + } + }, + traverseAncestors: function (A) { + var e = this.parent; + null !== e && (A(e), + e.traverseAncestors(A)) + }, + updateMatrix: function () { + this.matrix.compose(this.position, this.quaternion, this.scale), + this.matrixWorldNeedsUpdate = !0 + }, + updateMatrixWorld: function (A) { + this.matrixAutoUpdate && this.updateMatrix(), + (this.matrixWorldNeedsUpdate || A) && (null === this.parent ? this.matrixWorld.copy(this.matrix) : this.matrixWorld.multiplyMatrices(this.parent.matrixWorld, this.matrix), + this.matrixWorldNeedsUpdate = !1, + A = !0); + for (var e = this.children, t = 0, i = e.length; i > t; t++) + e[t].updateMatrixWorld(A) + }, + updateWorldMatrix: function (A, e) { + var t = this.parent; + if (!0 === A && null !== t && t.updateWorldMatrix(!0, !1), + this.matrixAutoUpdate && this.updateMatrix(), + null === this.parent ? this.matrixWorld.copy(this.matrix) : this.matrixWorld.multiplyMatrices(this.parent.matrixWorld, this.matrix), + !0 === e) + for (var i = this.children, o = 0, n = i.length; n > o; o++) + i[o].updateWorldMatrix(!1, !0) + }, + toJSON: function (A) { + var e = void 0 === A || "string" == typeof A, + t = {}; + e && (A = { + geometries: {}, + materials: {}, + textures: {}, + images: {}, + shapes: {} + }, + t.metadata = { + version: 4.5, + type: "Object", + generator: "Object3D.toJSON" + }); + var i = {}; + + function o(e, t) { + return void 0 === e[t.uuid] && (e[t.uuid] = t.toJSON(A)), + t.uuid + } + if (i.uuid = this.uuid, + i.type = this.type, + "" !== this.name && (i.name = this.name), + !0 === this.castShadow && (i.castShadow = !0), + !0 === this.receiveShadow && (i.receiveShadow = !0), + !1 === this.visible && (i.visible = !1), + !1 === this.frustumCulled && (i.frustumCulled = !1), + 0 !== this.renderOrder && (i.renderOrder = this.renderOrder), + "{}" !== JSON.stringify(this.userData) && (i.userData = this.userData), + i.layers = this.layers.mask, + i.matrix = this.matrix.toArray(), + !1 === this.matrixAutoUpdate && (i.matrixAutoUpdate = !1), + this.isInstancedMesh && (i.type = "InstancedMesh", + i.count = this.count, + i.instanceMatrix = this.instanceMatrix.toJSON()), + this.isMesh || this.isLine || this.isPoints) { + i.geometry = o(A.geometries, this.geometry); + var n = this.geometry.parameters; + if (void 0 !== n && void 0 !== n.shapes) { + var r = n.shapes; + if (Array.isArray(r)) + for (var a = 0, s = r.length; s > a; a++) { + o(A.shapes, r[a]) + } + else + o(A.shapes, r) + } + } + if (void 0 !== this.material) + if (Array.isArray(this.material)) { + var l = []; + for (a = 0, + s = this.material.length; s > a; a++) + l.push(o(A.materials, this.material[a])); + i.material = l + } else + i.material = o(A.materials, this.material); + if (this.children.length > 0) { + i.children = []; + for (a = 0; this.children.length > a; a++) + i.children.push(this.children[a].toJSON(A).object) + } + if (e) { + var c = g(A.geometries), + h = g(A.materials), + d = g(A.textures), + p = g(A.images); + r = g(A.shapes); + c.length > 0 && (t.geometries = c), + h.length > 0 && (t.materials = h), + d.length > 0 && (t.textures = d), + p.length > 0 && (t.images = p), + r.length > 0 && (t.shapes = r) + } + return t.object = i, + t; + + function g(A) { + var e = []; + for (var t in A) { + var i = A[t]; + delete i.metadata, + e.push(i) + } + return e + } + }, + clone: function (A) { + return (new this.constructor).copy(this, A) + }, + copy: function (A, e) { + if (void 0 === e && (e = !0), + this.name = A.name, + this.up.copy(A.up), + this.position.copy(A.position), + this.quaternion.copy(A.quaternion), + this.scale.copy(A.scale), + this.matrix.copy(A.matrix), + this.matrixWorld.copy(A.matrixWorld), + this.matrixAutoUpdate = A.matrixAutoUpdate, + this.matrixWorldNeedsUpdate = A.matrixWorldNeedsUpdate, + this.layers.mask = A.layers.mask, + this.visible = A.visible, + this.castShadow = A.castShadow, + this.receiveShadow = A.receiveShadow, + this.frustumCulled = A.frustumCulled, + this.renderOrder = A.renderOrder, + this.userData = JSON.parse(JSON.stringify(A.userData)), + !0 === e) + for (var t = 0; A.children.length > t; t++) { + this.add(A.children[t].clone()) + } + return this + } + }), + Y.prototype = Object.assign(Object.create(H.prototype), { + constructor: Y, + isScene: !0, + copy: function (A, e) { + return H.prototype.copy.call(this, A, e), + null !== A.background && (this.background = A.background.clone()), + null !== A.environment && (this.environment = A.environment.clone()), + null !== A.fog && (this.fog = A.fog.clone()), + null !== A.overrideMaterial && (this.overrideMaterial = A.overrideMaterial.clone()), + this.autoUpdate = A.autoUpdate, + this.matrixAutoUpdate = A.matrixAutoUpdate, + this + }, + toJSON: function (A) { + var e = H.prototype.toJSON.call(this, A); + return null !== this.background && (e.object.background = this.background.toJSON(A)), + null !== this.environment && (e.object.environment = this.environment.toJSON(A)), + null !== this.fog && (e.object.fog = this.fog.toJSON()), + e + }, + dispose: function () { + this.dispatchEvent({ + type: "dispose" + }) + } + }); + var W = [new y, new y, new y, new y, new y, new y, new y, new y], + J = new y, + z = new aA, + Z = new y, + X = new y, + _ = new y, + AA = new y, + eA = new y, + tA = new y, + iA = new y, + oA = new y, + nA = new y, + rA = new y; + + function aA(A, e) { + this.min = void 0 !== A ? A : new y(1 / 0, 1 / 0, 1 / 0), + this.max = void 0 !== e ? e : new y(-1 / 0, -1 / 0, -1 / 0) + } + + function sA(A, e, t, i, o) { + var n, r; + for (n = 0, + r = A.length - 3; r >= n; n += 3) { + rA.fromArray(A, n); + var a = o.x * Math.abs(rA.x) + o.y * Math.abs(rA.y) + o.z * Math.abs(rA.z), + s = e.dot(rA), + l = t.dot(rA), + c = i.dot(rA); + if (Math.max(-Math.max(s, l, c), Math.min(s, l, c)) > a) + return !1 + } + return !0 + } + Object.assign(aA.prototype, { + isBox3: !0, + set: function (A, e) { + return this.min.copy(A), + this.max.copy(e), + this + }, + setFromArray: function (A) { + for (var e = 1 / 0, t = 1 / 0, i = 1 / 0, o = -1 / 0, n = -1 / 0, r = -1 / 0, a = 0, s = A.length; s > a; a += 3) { + var l = A[a], + c = A[a + 1], + h = A[a + 2]; + e > l && (e = l), + t > c && (t = c), + i > h && (i = h), + l > o && (o = l), + c > n && (n = c), + h > r && (r = h) + } + return this.min.set(e, t, i), + this.max.set(o, n, r), + this + }, + setFromBufferAttribute: function (A) { + for (var e = 1 / 0, t = 1 / 0, i = 1 / 0, o = -1 / 0, n = -1 / 0, r = -1 / 0, a = 0, s = A.count; s > a; a++) { + var l = A.getX(a), + c = A.getY(a), + h = A.getZ(a); + e > l && (e = l), + t > c && (t = c), + i > h && (i = h), + l > o && (o = l), + c > n && (n = c), + h > r && (r = h) + } + return this.min.set(e, t, i), + this.max.set(o, n, r), + this + }, + setFromPoints: function (A) { + this.makeEmpty(); + for (var e = 0, t = A.length; t > e; e++) + this.expandByPoint(A[e]); + return this + }, + setFromCenterAndSize: function (A, e) { + var t = J.copy(e).multiplyScalar(.5); + return this.min.copy(A).sub(t), + this.max.copy(A).add(t), + this + }, + setFromObject: function (A) { + return this.makeEmpty(), + this.expandByObject(A) + }, + clone: function () { + return (new this.constructor).copy(this) + }, + copy: function (A) { + return this.min.copy(A.min), + this.max.copy(A.max), + this + }, + makeEmpty: function () { + return this.min.x = this.min.y = this.min.z = 1 / 0, + this.max.x = this.max.y = this.max.z = -1 / 0, + this + }, + isEmpty: function () { + return this.min.x > this.max.x || this.min.y > this.max.y || this.min.z > this.max.z + }, + getCenter: function (A) { + return void 0 === A && (console.warn("THREE.Box3: .getCenter() target is now required"), + A = new y), + this.isEmpty() ? A.set(0, 0, 0) : A.addVectors(this.min, this.max).multiplyScalar(.5) + }, + getSize: function (A) { + return void 0 === A && (console.warn("THREE.Box3: .getSize() target is now required"), + A = new y), + this.isEmpty() ? A.set(0, 0, 0) : A.subVectors(this.max, this.min) + }, + expandByPoint: function (A) { + return this.min.min(A), + this.max.max(A), + this + }, + expandByVector: function (A) { + return this.min.sub(A), + this.max.add(A), + this + }, + expandByScalar: function (A) { + return this.min.addScalar(-A), + this.max.addScalar(A), + this + }, + expandByObject: function (A) { + A.updateWorldMatrix(!1, !1); + var e = A.geometry; + void 0 !== e && (null === e.boundingBox && e.computeBoundingBox(), + z.copy(e.boundingBox), + z.applyMatrix4(A.matrixWorld), + this.union(z)); + for (var t = A.children, i = 0, o = t.length; o > i; i++) + this.expandByObject(t[i]); + return this + }, + containsPoint: function (A) { + return !(this.min.x > A.x || A.x > this.max.x || this.min.y > A.y || A.y > this.max.y || this.min.z > A.z || A.z > this.max.z) + }, + containsBox: function (A) { + return !(this.min.x > A.min.x || A.max.x > this.max.x || this.min.y > A.min.y || A.max.y > this.max.y || this.min.z > A.min.z || A.max.z > this.max.z) + }, + getParameter: function (A, e) { + return void 0 === e && (console.warn("THREE.Box3: .getParameter() target is now required"), + e = new y), + e.set((A.x - this.min.x) / (this.max.x - this.min.x), (A.y - this.min.y) / (this.max.y - this.min.y), (A.z - this.min.z) / (this.max.z - this.min.z)) + }, + intersectsBox: function (A) { + return !(this.min.x > A.max.x || A.min.x > this.max.x || this.min.y > A.max.y || A.min.y > this.max.y || this.min.z > A.max.z || A.min.z > this.max.z) + }, + intersectsSphere: function (A) { + return this.clampPoint(A.center, J), + J.distanceToSquared(A.center) <= A.radius * A.radius + }, + intersectsPlane: function (A) { + var e, t; + return A.normal.x > 0 ? (e = A.normal.x * this.min.x, + t = A.normal.x * this.max.x) : (e = A.normal.x * this.max.x, + t = A.normal.x * this.min.x), + A.normal.y > 0 ? (e += A.normal.y * this.min.y, + t += A.normal.y * this.max.y) : (e += A.normal.y * this.max.y, + t += A.normal.y * this.min.y), + A.normal.z > 0 ? (e += A.normal.z * this.min.z, + t += A.normal.z * this.max.z) : (e += A.normal.z * this.max.z, + t += A.normal.z * this.min.z), + -A.constant >= e && t >= -A.constant + }, + intersectsTriangle: function (A) { + if (this.isEmpty()) + return !1; + this.getCenter(iA), + oA.subVectors(this.max, iA), + Z.subVectors(A.a, iA), + X.subVectors(A.b, iA), + _.subVectors(A.c, iA), + AA.subVectors(X, Z), + eA.subVectors(_, X), + tA.subVectors(Z, _); + var e = [0, -AA.z, AA.y, 0, -eA.z, eA.y, 0, -tA.z, tA.y, AA.z, 0, -AA.x, eA.z, 0, -eA.x, tA.z, 0, -tA.x, -AA.y, AA.x, 0, -eA.y, eA.x, 0, -tA.y, tA.x, 0]; + return !!sA(e, Z, X, _, oA) && (!!sA(e = [1, 0, 0, 0, 1, 0, 0, 0, 1], Z, X, _, oA) && (nA.crossVectors(AA, eA), + sA(e = [nA.x, nA.y, nA.z], Z, X, _, oA))) + }, + clampPoint: function (A, e) { + return void 0 === e && (console.warn("THREE.Box3: .clampPoint() target is now required"), + e = new y), + e.copy(A).clamp(this.min, this.max) + }, + distanceToPoint: function (A) { + return J.copy(A).clamp(this.min, this.max).sub(A).length() + }, + getBoundingSphere: function (A) { + return void 0 === A && console.error("THREE.Box3: .getBoundingSphere() target is now required"), + this.getCenter(A.center), + A.radius = .5 * this.getSize(J).length(), + A + }, + intersect: function (A) { + return this.min.max(A.min), + this.max.min(A.max), + this.isEmpty() && this.makeEmpty(), + this + }, + union: function (A) { + return this.min.min(A.min), + this.max.max(A.max), + this + }, + applyMatrix4: function (A) { + return this.isEmpty() || (W[0].set(this.min.x, this.min.y, this.min.z).applyMatrix4(A), + W[1].set(this.min.x, this.min.y, this.max.z).applyMatrix4(A), + W[2].set(this.min.x, this.max.y, this.min.z).applyMatrix4(A), + W[3].set(this.min.x, this.max.y, this.max.z).applyMatrix4(A), + W[4].set(this.max.x, this.min.y, this.min.z).applyMatrix4(A), + W[5].set(this.max.x, this.min.y, this.max.z).applyMatrix4(A), + W[6].set(this.max.x, this.max.y, this.min.z).applyMatrix4(A), + W[7].set(this.max.x, this.max.y, this.max.z).applyMatrix4(A), + this.setFromPoints(W)), + this + }, + translate: function (A) { + return this.min.add(A), + this.max.add(A), + this + }, + equals: function (A) { + return A.min.equals(this.min) && A.max.equals(this.max) + } + }); + var lA = new aA; + + function cA(A, e) { + this.center = void 0 !== A ? A : new y, + this.radius = void 0 !== e ? e : 0 + } + Object.assign(cA.prototype, { + set: function (A, e) { + return this.center.copy(A), + this.radius = e, + this + }, + setFromPoints: function (A, e) { + var t = this.center; + void 0 !== e ? t.copy(e) : lA.setFromPoints(A).getCenter(t); + for (var i = 0, o = 0, n = A.length; n > o; o++) + i = Math.max(i, t.distanceToSquared(A[o])); + return this.radius = Math.sqrt(i), + this + }, + clone: function () { + return (new this.constructor).copy(this) + }, + copy: function (A) { + return this.center.copy(A.center), + this.radius = A.radius, + this + }, + empty: function () { + return 0 >= this.radius + }, + containsPoint: function (A) { + return A.distanceToSquared(this.center) <= this.radius * this.radius + }, + distanceToPoint: function (A) { + return A.distanceTo(this.center) - this.radius + }, + intersectsSphere: function (A) { + var e = this.radius + A.radius; + return A.center.distanceToSquared(this.center) <= e * e + }, + intersectsBox: function (A) { + return A.intersectsSphere(this) + }, + intersectsPlane: function (A) { + return Math.abs(A.distanceToPoint(this.center)) <= this.radius + }, + clampPoint: function (A, e) { + var t = this.center.distanceToSquared(A); + return void 0 === e && (console.warn("THREE.Sphere: .clampPoint() target is now required"), + e = new y), + e.copy(A), + t > this.radius * this.radius && (e.sub(this.center).normalize(), + e.multiplyScalar(this.radius).add(this.center)), + e + }, + getBoundingBox: function (A) { + return void 0 === A && (console.warn("THREE.Sphere: .getBoundingBox() target is now required"), + A = new aA), + A.set(this.center, this.center), + A.expandByScalar(this.radius), + A + }, + applyMatrix4: function (A) { + return this.center.applyMatrix4(A), + this.radius = this.radius * A.getMaxScaleOnAxis(), + this + }, + translate: function (A) { + return this.center.add(A), + this + }, + equals: function (A) { + return A.center.equals(this.center) && A.radius === this.radius + } + }); + var hA = new y, + dA = new y, + pA = new y, + gA = new y, + uA = new y, + fA = new y, + mA = new y; + + function CA(A, e) { + this.origin = void 0 !== A ? A : new y, + this.direction = void 0 !== e ? e : new y(0, 0, -1) + } + Object.assign(CA.prototype, { + set: function (A, e) { + return this.origin.copy(A), + this.direction.copy(e), + this + }, + clone: function () { + return (new this.constructor).copy(this) + }, + copy: function (A) { + return this.origin.copy(A.origin), + this.direction.copy(A.direction), + this + }, + at: function (A, e) { + return void 0 === e && (console.warn("THREE.Ray: .at() target is now required"), + e = new y), + e.copy(this.direction).multiplyScalar(A).add(this.origin) + }, + lookAt: function (A) { + return this.direction.copy(A).sub(this.origin).normalize(), + this + }, + recast: function (A) { + return this.origin.copy(this.at(A, hA)), + this + }, + closestPointToPoint: function (A, e) { + void 0 === e && (console.warn("THREE.Ray: .closestPointToPoint() target is now required"), + e = new y), + e.subVectors(A, this.origin); + var t = e.dot(this.direction); + return 0 > t ? e.copy(this.origin) : e.copy(this.direction).multiplyScalar(t).add(this.origin) + }, + distanceToPoint: function (A) { + return Math.sqrt(this.distanceSqToPoint(A)) + }, + distanceSqToPoint: function (A) { + var e = hA.subVectors(A, this.origin).dot(this.direction); + return 0 > e ? this.origin.distanceToSquared(A) : (hA.copy(this.direction).multiplyScalar(e).add(this.origin), + hA.distanceToSquared(A)) + }, + distanceSqToSegment: function (A, e, t, i) { + dA.copy(A).add(e).multiplyScalar(.5), + pA.copy(e).sub(A).normalize(), + gA.copy(this.origin).sub(dA); + var o, n, r, a, s = .5 * A.distanceTo(e), + l = -this.direction.dot(pA), + c = gA.dot(this.direction), + h = -gA.dot(pA), + d = gA.lengthSq(), + p = Math.abs(1 - l * l); + if (p > 0) + if (n = l * c - h, + a = s * p, + 0 > (o = l * h - c)) + n > -a ? n > a ? r = -(o = Math.max(0, -(l * s + c))) * o + (n = o > 0 ? s : Math.min(Math.max(-s, -h), s)) * (n + 2 * h) + d : (o = 0, + r = (n = Math.min(Math.max(-s, -h), s)) * (n + 2 * h) + d) : r = -(o = Math.max(0, -(-l * s + c))) * o + (n = o > 0 ? -s : Math.min(Math.max(-s, -h), s)) * (n + 2 * h) + d; + else if (n < -a) + n = -s, + r = -(o = Math.max(0, -(l * n + c))) * o + n * (n + 2 * h) + d; + else if (a < n) + n = s, + r = -(o = Math.max(0, -(l * n + c))) * o + n * (n + 2 * h) + d; + else { + var g = 1 / p; + r = (o *= g) * (o + l * (n *= g) + 2 * c) + n * (l * o + n + 2 * h) + d + } else + n = l > 0 ? -s : s, + r = -(o = Math.max(0, -(l * n + c))) * o + n * (n + 2 * h) + d; + return t && t.copy(this.direction).multiplyScalar(o).add(this.origin), + i && i.copy(pA).multiplyScalar(n).add(dA), + r + }, + intersectSphere: function (A, e) { + hA.subVectors(A.center, this.origin); + var t = hA.dot(this.direction), + i = hA.dot(hA) - t * t, + o = A.radius * A.radius; + if (i > o) + return null; + var n = Math.sqrt(o - i), + r = t - n, + a = t + n; + return 0 > r && 0 > a ? null : this.at(0 > r ? a : r, e) + }, + intersectsSphere: function (A) { + return this.distanceSqToPoint(A.center) <= A.radius * A.radius + }, + distanceToPlane: function (A) { + var e = A.normal.dot(this.direction); + if (0 === e) + return 0 === A.distanceToPoint(this.origin) ? 0 : null; + var t = -(this.origin.dot(A.normal) + A.constant) / e; + return 0 > t ? null : t + }, + intersectPlane: function (A, e) { + var t = this.distanceToPlane(A); + return null === t ? null : this.at(t, e) + }, + intersectsPlane: function (A) { + var e = A.distanceToPoint(this.origin); + return 0 === e || 0 > A.normal.dot(this.direction) * e + }, + intersectBox: function (A, e) { + var t, i, o, n, r, a, s = 1 / this.direction.x, + l = 1 / this.direction.y, + c = 1 / this.direction.z, + h = this.origin; + return 0 > s ? (t = (A.max.x - h.x) * s, + i = (A.min.x - h.x) * s) : (t = (A.min.x - h.x) * s, + i = (A.max.x - h.x) * s), + 0 > l ? (o = (A.max.y - h.y) * l, + n = (A.min.y - h.y) * l) : (o = (A.min.y - h.y) * l, + n = (A.max.y - h.y) * l), + t > n || o > i ? null : ((o > t || t != t) && (t = o), + (i > n || i != i) && (i = n), + 0 > c ? (r = (A.max.z - h.z) * c, + a = (A.min.z - h.z) * c) : (r = (A.min.z - h.z) * c, + a = (A.max.z - h.z) * c), + t > a || r > i ? null : ((r > t || t != t) && (t = r), + (i > a || i != i) && (i = a), + 0 > i ? null : this.at(0 > t ? i : t, e))) + }, + intersectsBox: function (A) { + return null !== this.intersectBox(A, hA) + }, + intersectTriangle: function (A, e, t, i, o) { + uA.subVectors(e, A), + fA.subVectors(t, A), + mA.crossVectors(uA, fA); + var n, r = this.direction.dot(mA); + if (r > 0) { + if (i) + return null; + n = 1 + } else { + if (r >= 0) + return null; + n = -1, + r = -r + } + gA.subVectors(this.origin, A); + var a = n * this.direction.dot(fA.crossVectors(gA, fA)); + if (0 > a) + return null; + var s = n * this.direction.dot(uA.cross(gA)); + if (0 > s) + return null; + if (a + s > r) + return null; + var l = -n * gA.dot(mA); + return 0 > l ? null : this.at(l / r, o) + }, + applyMatrix4: function (A) { + return this.origin.applyMatrix4(A), + this.direction.transformDirection(A), + this + }, + equals: function (A) { + return A.origin.equals(this.origin) && A.direction.equals(this.direction) + } + }); + var yA = new y, + vA = new y, + IA = new l; + + function EA(A, e) { + this.normal = void 0 !== A ? A : new y(1, 0, 0), + this.constant = void 0 !== e ? e : 0 + } + Object.assign(EA.prototype, { + isPlane: !0, + set: function (A, e) { + return this.normal.copy(A), + this.constant = e, + this + }, + setComponents: function (A, e, t, i) { + return this.normal.set(A, e, t), + this.constant = i, + this + }, + setFromNormalAndCoplanarPoint: function (A, e) { + return this.normal.copy(A), + this.constant = -e.dot(this.normal), + this + }, + setFromCoplanarPoints: function (A, e, t) { + var i = yA.subVectors(t, e).cross(vA.subVectors(A, e)).normalize(); + return this.setFromNormalAndCoplanarPoint(i, A), + this + }, + clone: function () { + return (new this.constructor).copy(this) + }, + copy: function (A) { + return this.normal.copy(A.normal), + this.constant = A.constant, + this + }, + normalize: function () { + var A = 1 / this.normal.length(); + return this.normal.multiplyScalar(A), + this.constant *= A, + this + }, + negate: function () { + return this.constant *= -1, + this.normal.negate(), + this + }, + distanceToPoint: function (A) { + return this.normal.dot(A) + this.constant + }, + distanceToSphere: function (A) { + return this.distanceToPoint(A.center) - A.radius + }, + projectPoint: function (A, e) { + return void 0 === e && (console.warn("THREE.Plane: .projectPoint() target is now required"), + e = new y), + e.copy(this.normal).multiplyScalar(-this.distanceToPoint(A)).add(A) + }, + intersectLine: function (A, e) { + void 0 === e && (console.warn("THREE.Plane: .intersectLine() target is now required"), + e = new y); + var t = A.delta(yA), + i = this.normal.dot(t); + if (0 === i) + return 0 === this.distanceToPoint(A.start) ? e.copy(A.start) : void 0; + var o = -(A.start.dot(this.normal) + this.constant) / i; + return 0 > o || o > 1 ? void 0 : e.copy(t).multiplyScalar(o).add(A.start) + }, + intersectsLine: function (A) { + var e = this.distanceToPoint(A.start), + t = this.distanceToPoint(A.end); + return 0 > e && t > 0 || 0 > t && e > 0 + }, + intersectsBox: function (A) { + return A.intersectsPlane(this) + }, + intersectsSphere: function (A) { + return A.intersectsPlane(this) + }, + coplanarPoint: function (A) { + return void 0 === A && (console.warn("THREE.Plane: .coplanarPoint() target is now required"), + A = new y), + A.copy(this.normal).multiplyScalar(-this.constant) + }, + applyMatrix4: function (A, e) { + var t = e || IA.getNormalMatrix(A), + i = this.coplanarPoint(yA).applyMatrix4(A), + o = this.normal.applyMatrix3(t).normalize(); + return this.constant = -i.dot(o), + this + }, + translate: function (A) { + return this.constant -= A.dot(this.normal), + this + }, + equals: function (A) { + return A.normal.equals(this.normal) && A.constant === this.constant + } + }); + var BA = new y, + xA = new y, + SA = new y, + wA = new y, + MA = new y, + bA = new y, + UA = new y, + FA = new y, + KA = new y, + QA = new y; + + function RA(A, e, t) { + this.a = void 0 !== A ? A : new y, + this.b = void 0 !== e ? e : new y, + this.c = void 0 !== t ? t : new y + } + Object.assign(RA, { + getNormal: function (A, e, t, i) { + void 0 === i && (console.warn("THREE.Triangle: .getNormal() target is now required"), + i = new y), + i.subVectors(t, e), + BA.subVectors(A, e), + i.cross(BA); + var o = i.lengthSq(); + return o > 0 ? i.multiplyScalar(1 / Math.sqrt(o)) : i.set(0, 0, 0) + }, + getBarycoord: function (A, e, t, i, o) { + BA.subVectors(i, e), + xA.subVectors(t, e), + SA.subVectors(A, e); + var n = BA.dot(BA), + r = BA.dot(xA), + a = BA.dot(SA), + s = xA.dot(xA), + l = xA.dot(SA), + c = n * s - r * r; + if (void 0 === o && (console.warn("THREE.Triangle: .getBarycoord() target is now required"), + o = new y), + 0 === c) + return o.set(-2, -1, -1); + var h = 1 / c, + d = (s * a - r * l) * h, + p = (n * l - r * a) * h; + return o.set(1 - d - p, p, d) + }, + containsPoint: function (A, e, t, i) { + return RA.getBarycoord(A, e, t, i, wA), + wA.x >= 0 && wA.y >= 0 && 1 >= wA.x + wA.y + }, + getUV: function (A, e, t, i, o, n, r, a) { + return this.getBarycoord(A, e, t, i, wA), + a.set(0, 0), + a.addScaledVector(o, wA.x), + a.addScaledVector(n, wA.y), + a.addScaledVector(r, wA.z), + a + }, + isFrontFacing: function (A, e, t, i) { + return BA.subVectors(t, e), + xA.subVectors(A, e), + 0 > BA.cross(xA).dot(i) + } + }), + Object.assign(RA.prototype, { + set: function (A, e, t) { + return this.a.copy(A), + this.b.copy(e), + this.c.copy(t), + this + }, + setFromPointsAndIndices: function (A, e, t, i) { + return this.a.copy(A[e]), + this.b.copy(A[t]), + this.c.copy(A[i]), + this + }, + clone: function () { + return (new this.constructor).copy(this) + }, + copy: function (A) { + return this.a.copy(A.a), + this.b.copy(A.b), + this.c.copy(A.c), + this + }, + getArea: function () { + return BA.subVectors(this.c, this.b), + xA.subVectors(this.a, this.b), + .5 * BA.cross(xA).length() + }, + getMidpoint: function (A) { + return void 0 === A && (console.warn("THREE.Triangle: .getMidpoint() target is now required"), + A = new y), + A.addVectors(this.a, this.b).add(this.c).multiplyScalar(1 / 3) + }, + getNormal: function (A) { + return RA.getNormal(this.a, this.b, this.c, A) + }, + getPlane: function (A) { + return void 0 === A && (console.warn("THREE.Triangle: .getPlane() target is now required"), + A = new EA), + A.setFromCoplanarPoints(this.a, this.b, this.c) + }, + getBarycoord: function (A, e) { + return RA.getBarycoord(A, this.a, this.b, this.c, e) + }, + getUV: function (A, e, t, i, o) { + return RA.getUV(A, this.a, this.b, this.c, e, t, i, o) + }, + containsPoint: function (A) { + return RA.containsPoint(A, this.a, this.b, this.c) + }, + isFrontFacing: function (A) { + return RA.isFrontFacing(this.a, this.b, this.c, A) + }, + intersectsBox: function (A) { + return A.intersectsTriangle(this) + }, + closestPointToPoint: function (A, e) { + void 0 === e && (console.warn("THREE.Triangle: .closestPointToPoint() target is now required"), + e = new y); + var t, i, o = this.a, + n = this.b, + r = this.c; + MA.subVectors(n, o), + bA.subVectors(r, o), + FA.subVectors(A, o); + var a = MA.dot(FA), + s = bA.dot(FA); + if (0 >= a && 0 >= s) + return e.copy(o); + KA.subVectors(A, n); + var l = MA.dot(KA), + c = bA.dot(KA); + if (l >= 0 && l >= c) + return e.copy(n); + var h = a * c - l * s; + if (0 >= h && a >= 0 && 0 >= l) + return t = a / (a - l), + e.copy(o).addScaledVector(MA, t); + QA.subVectors(A, r); + var d = MA.dot(QA), + p = bA.dot(QA); + if (p >= 0 && p >= d) + return e.copy(r); + var g = d * s - a * p; + if (0 >= g && s >= 0 && 0 >= p) + return i = s / (s - p), + e.copy(o).addScaledVector(bA, i); + var u = l * p - d * c; + if (0 >= u && c - l >= 0 && d - p >= 0) + return UA.subVectors(r, n), + i = (c - l) / (c - l + (d - p)), + e.copy(n).addScaledVector(UA, i); + var f = 1 / (u + g + h); + return t = g * f, + i = h * f, + e.copy(o).addScaledVector(MA, t).addScaledVector(bA, i) + }, + equals: function (A) { + return A.a.equals(this.a) && A.b.equals(this.b) && A.c.equals(this.c) + } + }); + var TA = { + aliceblue: 15792383, + antiquewhite: 16444375, + aqua: 65535, + aquamarine: 8388564, + azure: 15794175, + beige: 16119260, + bisque: 16770244, + black: 0, + blanchedalmond: 16772045, + blue: 255, + blueviolet: 9055202, + brown: 10824234, + burlywood: 14596231, + cadetblue: 6266528, + chartreuse: 8388352, + chocolate: 13789470, + coral: 16744272, + cornflowerblue: 6591981, + cornsilk: 16775388, + crimson: 14423100, + cyan: 65535, + darkblue: 139, + darkcyan: 35723, + darkgoldenrod: 12092939, + darkgray: 11119017, + darkgreen: 25600, + darkgrey: 11119017, + darkkhaki: 12433259, + darkmagenta: 9109643, + darkolivegreen: 5597999, + darkorange: 16747520, + darkorchid: 10040012, + darkred: 9109504, + darksalmon: 15308410, + darkseagreen: 9419919, + darkslateblue: 4734347, + darkslategray: 3100495, + darkslategrey: 3100495, + darkturquoise: 52945, + darkviolet: 9699539, + deeppink: 16716947, + deepskyblue: 49151, + dimgray: 6908265, + dimgrey: 6908265, + dodgerblue: 2003199, + firebrick: 11674146, + floralwhite: 16775920, + forestgreen: 2263842, + fuchsia: 16711935, + gainsboro: 14474460, + ghostwhite: 16316671, + gold: 16766720, + goldenrod: 14329120, + gray: 8421504, + green: 32768, + greenyellow: 11403055, + grey: 8421504, + honeydew: 15794160, + hotpink: 16738740, + indianred: 13458524, + indigo: 4915330, + ivory: 16777200, + khaki: 15787660, + lavender: 15132410, + lavenderblush: 16773365, + lawngreen: 8190976, + lemonchiffon: 16775885, + lightblue: 11393254, + lightcoral: 15761536, + lightcyan: 14745599, + lightgoldenrodyellow: 16448210, + lightgray: 13882323, + lightgreen: 9498256, + lightgrey: 13882323, + lightpink: 16758465, + lightsalmon: 16752762, + lightseagreen: 2142890, + lightskyblue: 8900346, + lightslategray: 7833753, + lightslategrey: 7833753, + lightsteelblue: 11584734, + lightyellow: 16777184, + lime: 65280, + limegreen: 3329330, + linen: 16445670, + magenta: 16711935, + maroon: 8388608, + mediumaquamarine: 6737322, + mediumblue: 205, + mediumorchid: 12211667, + mediumpurple: 9662683, + mediumseagreen: 3978097, + mediumslateblue: 8087790, + mediumspringgreen: 64154, + mediumturquoise: 4772300, + mediumvioletred: 13047173, + midnightblue: 1644912, + mintcream: 16121850, + mistyrose: 16770273, + moccasin: 16770229, + navajowhite: 16768685, + navy: 128, + oldlace: 16643558, + olive: 8421376, + olivedrab: 7048739, + orange: 16753920, + orangered: 16729344, + orchid: 14315734, + palegoldenrod: 15657130, + palegreen: 10025880, + paleturquoise: 11529966, + palevioletred: 14381203, + papayawhip: 16773077, + peachpuff: 16767673, + peru: 13468991, + pink: 16761035, + plum: 14524637, + powderblue: 11591910, + purple: 8388736, + rebeccapurple: 6697881, + red: 16711680, + rosybrown: 12357519, + royalblue: 4286945, + saddlebrown: 9127187, + salmon: 16416882, + sandybrown: 16032864, + seagreen: 3050327, + seashell: 16774638, + sienna: 10506797, + silver: 12632256, + skyblue: 8900331, + slateblue: 6970061, + slategray: 7372944, + slategrey: 7372944, + snow: 16775930, + springgreen: 65407, + steelblue: 4620980, + tan: 13808780, + teal: 32896, + thistle: 14204888, + tomato: 16737095, + turquoise: 4251856, + violet: 15631086, + wheat: 16113331, + white: 16777215, + whitesmoke: 16119285, + yellow: 16776960, + yellowgreen: 10145074 + }, + kA = { + h: 0, + s: 0, + l: 0 + }, + DA = { + h: 0, + s: 0, + l: 0 + }; + + function LA(A, e, t) { + return void 0 === e && void 0 === t ? this.set(A) : this.setRGB(A, e, t) + } + + function NA(A, e, t) { + return 0 > t && (t += 1), + t > 1 && (t -= 1), + 1 / 6 > t ? A + 6 * (e - A) * t : .5 > t ? e : 2 / 3 > t ? A + 6 * (e - A) * (2 / 3 - t) : A + } + + function OA(A) { + return .04045 > A ? .0773993808 * A : Math.pow(.9478672986 * A + .0521327014, 2.4) + } + + function VA(A) { + return .0031308 > A ? 12.92 * A : 1.055 * Math.pow(A, .41666) - .055 + } + + function GA(A, e, t, i, o, n) { + this.a = A, + this.b = e, + this.c = t, + this.normal = i && i.isVector3 ? i : new y, + this.vertexNormals = Array.isArray(i) ? i : [], + this.color = o && o.isColor ? o : new LA, + this.vertexColors = Array.isArray(o) ? o : [], + this.materialIndex = void 0 !== n ? n : 0 + } + Object.assign(LA.prototype, { + isColor: !0, + r: 1, + g: 1, + b: 1, + set: function (A) { + return A && A.isColor ? this.copy(A) : "number" == typeof A ? this.setHex(A) : "string" == typeof A && this.setStyle(A), + this + }, + setScalar: function (A) { + return this.r = A, + this.g = A, + this.b = A, + this + }, + setHex: function (A) { + return A = Math.floor(A), + this.r = (A >> 16 & 255) / 255, + this.g = (A >> 8 & 255) / 255, + this.b = (255 & A) / 255, + this + }, + setRGB: function (A, e, t) { + return this.r = A, + this.g = e, + this.b = t, + this + }, + setHSL: function (A, e, t) { + if (A = a.euclideanModulo(A, 1), + e = a.clamp(e, 0, 1), + t = a.clamp(t, 0, 1), + 0 === e) + this.r = this.g = this.b = t; + else { + var i = t > .5 ? t + e - t * e : t * (1 + e), + o = 2 * t - i; + this.r = NA(o, i, A + 1 / 3), + this.g = NA(o, i, A), + this.b = NA(o, i, A - 1 / 3) + } + return this + }, + setStyle: function (A) { + function e(e) { + void 0 !== e && 1 > parseFloat(e) && console.warn("THREE.Color: Alpha component of " + A + " will be ignored.") + } + var t; + if (t = /^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec(A)) { + var i, o = t[2]; + switch (t[1]) { + case "rgb": + case "rgba": + if (i = /^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(o)) + return this.r = Math.min(255, parseInt(i[1], 10)) / 255, + this.g = Math.min(255, parseInt(i[2], 10)) / 255, + this.b = Math.min(255, parseInt(i[3], 10)) / 255, + e(i[5]), + this; + if (i = /^(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(o)) + return this.r = Math.min(100, parseInt(i[1], 10)) / 100, + this.g = Math.min(100, parseInt(i[2], 10)) / 100, + this.b = Math.min(100, parseInt(i[3], 10)) / 100, + e(i[5]), + this; + break; + case "hsl": + case "hsla": + if (i = /^([0-9]*\.?[0-9]+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(o)) { + var n = parseFloat(i[1]) / 360, + r = parseInt(i[2], 10) / 100, + a = parseInt(i[3], 10) / 100; + return e(i[5]), + this.setHSL(n, r, a) + } + } + } else if (t = /^\#([A-Fa-f0-9]+)$/.exec(A)) { + var s = t[1], + l = s.length; + if (3 === l) + return this.r = parseInt(s.charAt(0) + s.charAt(0), 16) / 255, + this.g = parseInt(s.charAt(1) + s.charAt(1), 16) / 255, + this.b = parseInt(s.charAt(2) + s.charAt(2), 16) / 255, + this; + if (6 === l) + return this.r = parseInt(s.charAt(0) + s.charAt(1), 16) / 255, + this.g = parseInt(s.charAt(2) + s.charAt(3), 16) / 255, + this.b = parseInt(s.charAt(4) + s.charAt(5), 16) / 255, + this + } + return A && A.length > 0 ? this.setColorName(A) : this + }, + setColorName: function (A) { + var e = TA[A]; + return void 0 !== e ? this.setHex(e) : console.warn("THREE.Color: Unknown color " + A), + this + }, + clone: function () { + return new this.constructor(this.r, this.g, this.b) + }, + copy: function (A) { + return this.r = A.r, + this.g = A.g, + this.b = A.b, + this + }, + copyGammaToLinear: function (A, e) { + return void 0 === e && (e = 2), + this.r = Math.pow(A.r, e), + this.g = Math.pow(A.g, e), + this.b = Math.pow(A.b, e), + this + }, + copyLinearToGamma: function (A, e) { + void 0 === e && (e = 2); + var t = e > 0 ? 1 / e : 1; + return this.r = Math.pow(A.r, t), + this.g = Math.pow(A.g, t), + this.b = Math.pow(A.b, t), + this + }, + convertGammaToLinear: function (A) { + return this.copyGammaToLinear(this, A), + this + }, + convertLinearToGamma: function (A) { + return this.copyLinearToGamma(this, A), + this + }, + copySRGBToLinear: function (A) { + return this.r = OA(A.r), + this.g = OA(A.g), + this.b = OA(A.b), + this + }, + copyLinearToSRGB: function (A) { + return this.r = VA(A.r), + this.g = VA(A.g), + this.b = VA(A.b), + this + }, + convertSRGBToLinear: function () { + return this.copySRGBToLinear(this), + this + }, + convertLinearToSRGB: function () { + return this.copyLinearToSRGB(this), + this + }, + getHex: function () { + return 255 * this.r << 16 ^ 255 * this.g << 8 ^ 255 * this.b << 0 + }, + getHexString: function () { + return ("000000" + this.getHex().toString(16)).slice(-6) + }, + getHSL: function (A) { + void 0 === A && (console.warn("THREE.Color: .getHSL() target is now required"), + A = { + h: 0, + s: 0, + l: 0 + }); + var e, t, i = this.r, + o = this.g, + n = this.b, + r = Math.max(i, o, n), + a = Math.min(i, o, n), + s = (a + r) / 2; + if (a === r) + e = 0, + t = 0; + else { + var l = r - a; + switch (t = s > .5 ? l / (2 - r - a) : l / (r + a), + r) { + case i: + e = (o - n) / l + (n > o ? 6 : 0); + break; + case o: + e = (n - i) / l + 2; + break; + case n: + e = (i - o) / l + 4 + } + e /= 6 + } + return A.h = e, + A.s = t, + A.l = s, + A + }, + getStyle: function () { + return "rgb(" + (255 * this.r | 0) + "," + (255 * this.g | 0) + "," + (255 * this.b | 0) + ")" + }, + offsetHSL: function (A, e, t) { + return this.getHSL(kA), + kA.h += A, + kA.s += e, + kA.l += t, + this.setHSL(kA.h, kA.s, kA.l), + this + }, + add: function (A) { + return this.r += A.r, + this.g += A.g, + this.b += A.b, + this + }, + addColors: function (A, e) { + return this.r = A.r + e.r, + this.g = A.g + e.g, + this.b = A.b + e.b, + this + }, + addScalar: function (A) { + return this.r += A, + this.g += A, + this.b += A, + this + }, + sub: function (A) { + return this.r = Math.max(0, this.r - A.r), + this.g = Math.max(0, this.g - A.g), + this.b = Math.max(0, this.b - A.b), + this + }, + multiply: function (A) { + return this.r *= A.r, + this.g *= A.g, + this.b *= A.b, + this + }, + multiplyScalar: function (A) { + return this.r *= A, + this.g *= A, + this.b *= A, + this + }, + lerp: function (A, e) { + return this.r += (A.r - this.r) * e, + this.g += (A.g - this.g) * e, + this.b += (A.b - this.b) * e, + this + }, + lerpHSL: function (A, e) { + this.getHSL(kA), + A.getHSL(DA); + var t = a.lerp(kA.h, DA.h, e), + i = a.lerp(kA.s, DA.s, e), + o = a.lerp(kA.l, DA.l, e); + return this.setHSL(t, i, o), + this + }, + equals: function (A) { + return A.r === this.r && A.g === this.g && A.b === this.b + }, + fromArray: function (A, e) { + return void 0 === e && (e = 0), + this.r = A[e], + this.g = A[e + 1], + this.b = A[e + 2], + this + }, + toArray: function (A, e) { + return void 0 === A && (A = []), + void 0 === e && (e = 0), + A[e] = this.r, + A[e + 1] = this.g, + A[e + 2] = this.b, + A + }, + toJSON: function () { + return this.getHex() + } + }), + LA.NAMES = TA, + Object.assign(GA.prototype, { + clone: function () { + return (new this.constructor).copy(this) + }, + copy: function (A) { + this.a = A.a, + this.b = A.b, + this.c = A.c, + this.normal.copy(A.normal), + this.color.copy(A.color), + this.materialIndex = A.materialIndex; + for (var e = 0, t = A.vertexNormals.length; t > e; e++) + this.vertexNormals[e] = A.vertexNormals[e].clone(); + for (e = 0, + t = A.vertexColors.length; t > e; e++) + this.vertexColors[e] = A.vertexColors[e].clone(); + return this + } + }); + var PA = 0; + + function qA() { + Object.defineProperty(this, "id", { + value: PA++ + }), + this.uuid = a.generateUUID(), + this.name = "", + this.type = "Material", + this.fog = !0, + this.blending = 1, + this.side = 0, + this.flatShading = !1, + this.vertexColors = !1, + this.opacity = 1, + this.transparent = !1, + this.blendSrc = 204, + this.blendDst = 205, + this.blendEquation = 100, + this.blendSrcAlpha = null, + this.blendDstAlpha = null, + this.blendEquationAlpha = null, + this.depthFunc = 3, + this.depthTest = !0, + this.depthWrite = !0, + this.stencilWriteMask = 255, + this.stencilFunc = 519, + this.stencilRef = 0, + this.stencilFuncMask = 255, + this.stencilFail = 7680, + this.stencilZFail = 7680, + this.stencilZPass = 7680, + this.stencilWrite = !1, + this.clippingPlanes = null, + this.clipIntersection = !1, + this.clipShadows = !1, + this.shadowSide = null, + this.colorWrite = !0, + this.precision = null, + this.polygonOffset = !1, + this.polygonOffsetFactor = 0, + this.polygonOffsetUnits = 0, + this.dithering = !1, + this.alphaTest = 0, + this.premultipliedAlpha = !1, + this.visible = !0, + this.toneMapped = !0, + this.userData = {}, + this.version = 0 + } + + function jA(A) { + qA.call(this), + this.type = "MeshBasicMaterial", + this.color = new LA(16777215), + this.map = null, + this.lightMap = null, + this.lightMapIntensity = 1, + this.aoMap = null, + this.aoMapIntensity = 1, + this.specularMap = null, + this.alphaMap = null, + this.envMap = null, + this.combine = 0, + this.reflectivity = 1, + this.refractionRatio = .98, + this.wireframe = !1, + this.wireframeLinewidth = 1, + this.wireframeLinecap = "round", + this.wireframeLinejoin = "round", + this.skinning = !1, + this.morphTargets = !1, + this.setValues(A) + } + qA.prototype = Object.assign(Object.create(i.prototype), { + constructor: qA, + isMaterial: !0, + onBeforeCompile: function () {}, + setValues: function (A) { + if (void 0 !== A) + for (var e in A) { + var t = A[e]; + if (void 0 !== t) + if ("shading" !== e) { + var i = this[e]; + void 0 !== i ? i && i.isColor ? i.set(t) : i && i.isVector3 && t && t.isVector3 ? i.copy(t) : this[e] = t : console.warn("THREE." + this.type + ": '" + e + "' is not a property of this material.") + } else + console.warn("THREE." + this.type + ": .shading has been removed. Use the boolean .flatShading instead."), + this.flatShading = 1 === t; + else + console.warn("THREE.Material: '" + e + "' parameter is undefined.") + } + }, + toJSON: function (A) { + var e = void 0 === A || "string" == typeof A; + e && (A = { + textures: {}, + images: {} + }); + var t = { + metadata: { + version: 4.5, + type: "Material", + generator: "Material.toJSON" + } + }; + + function i(A) { + var e = []; + for (var t in A) { + var i = A[t]; + delete i.metadata, + e.push(i) + } + return e + } + if (t.uuid = this.uuid, + t.type = this.type, + "" !== this.name && (t.name = this.name), + this.color && this.color.isColor && (t.color = this.color.getHex()), + void 0 !== this.roughness && (t.roughness = this.roughness), + void 0 !== this.metalness && (t.metalness = this.metalness), + this.sheen && this.sheen.isColor && (t.sheen = this.sheen.getHex()), + this.emissive && this.emissive.isColor && (t.emissive = this.emissive.getHex()), + this.emissiveIntensity && 1 !== this.emissiveIntensity && (t.emissiveIntensity = this.emissiveIntensity), + this.specular && this.specular.isColor && (t.specular = this.specular.getHex()), + void 0 !== this.shininess && (t.shininess = this.shininess), + void 0 !== this.clearcoat && (t.clearcoat = this.clearcoat), + void 0 !== this.clearcoatRoughness && (t.clearcoatRoughness = this.clearcoatRoughness), + this.clearcoatMap && this.clearcoatMap.isTexture && (t.clearcoatMap = this.clearcoatMap.toJSON(A).uuid), + this.clearcoatRoughnessMap && this.clearcoatRoughnessMap.isTexture && (t.clearcoatRoughnessMap = this.clearcoatRoughnessMap.toJSON(A).uuid), + this.clearcoatNormalMap && this.clearcoatNormalMap.isTexture && (t.clearcoatNormalMap = this.clearcoatNormalMap.toJSON(A).uuid, + t.clearcoatNormalScale = this.clearcoatNormalScale.toArray()), + this.map && this.map.isTexture && (t.map = this.map.toJSON(A).uuid), + this.matcap && this.matcap.isTexture && (t.matcap = this.matcap.toJSON(A).uuid), + this.alphaMap && this.alphaMap.isTexture && (t.alphaMap = this.alphaMap.toJSON(A).uuid), + this.lightMap && this.lightMap.isTexture && (t.lightMap = this.lightMap.toJSON(A).uuid), + this.aoMap && this.aoMap.isTexture && (t.aoMap = this.aoMap.toJSON(A).uuid, + t.aoMapIntensity = this.aoMapIntensity), + this.bumpMap && this.bumpMap.isTexture && (t.bumpMap = this.bumpMap.toJSON(A).uuid, + t.bumpScale = this.bumpScale), + this.normalMap && this.normalMap.isTexture && (t.normalMap = this.normalMap.toJSON(A).uuid, + t.normalMapType = this.normalMapType, + t.normalScale = this.normalScale.toArray()), + this.displacementMap && this.displacementMap.isTexture && (t.displacementMap = this.displacementMap.toJSON(A).uuid, + t.displacementScale = this.displacementScale, + t.displacementBias = this.displacementBias), + this.roughnessMap && this.roughnessMap.isTexture && (t.roughnessMap = this.roughnessMap.toJSON(A).uuid), + this.metalnessMap && this.metalnessMap.isTexture && (t.metalnessMap = this.metalnessMap.toJSON(A).uuid), + this.emissiveMap && this.emissiveMap.isTexture && (t.emissiveMap = this.emissiveMap.toJSON(A).uuid), + this.specularMap && this.specularMap.isTexture && (t.specularMap = this.specularMap.toJSON(A).uuid), + this.envMap && this.envMap.isTexture && (t.envMap = this.envMap.toJSON(A).uuid, + t.reflectivity = this.reflectivity, + t.refractionRatio = this.refractionRatio, + void 0 !== this.combine && (t.combine = this.combine), + void 0 !== this.envMapIntensity && (t.envMapIntensity = this.envMapIntensity)), + this.gradientMap && this.gradientMap.isTexture && (t.gradientMap = this.gradientMap.toJSON(A).uuid), + void 0 !== this.size && (t.size = this.size), + void 0 !== this.sizeAttenuation && (t.sizeAttenuation = this.sizeAttenuation), + 1 !== this.blending && (t.blending = this.blending), + !0 === this.flatShading && (t.flatShading = this.flatShading), + 0 !== this.side && (t.side = this.side), + this.vertexColors && (t.vertexColors = !0), + 1 > this.opacity && (t.opacity = this.opacity), + !0 === this.transparent && (t.transparent = this.transparent), + t.depthFunc = this.depthFunc, + t.depthTest = this.depthTest, + t.depthWrite = this.depthWrite, + t.stencilWrite = this.stencilWrite, + t.stencilWriteMask = this.stencilWriteMask, + t.stencilFunc = this.stencilFunc, + t.stencilRef = this.stencilRef, + t.stencilFuncMask = this.stencilFuncMask, + t.stencilFail = this.stencilFail, + t.stencilZFail = this.stencilZFail, + t.stencilZPass = this.stencilZPass, + this.rotation && 0 !== this.rotation && (t.rotation = this.rotation), + !0 === this.polygonOffset && (t.polygonOffset = !0), + 0 !== this.polygonOffsetFactor && (t.polygonOffsetFactor = this.polygonOffsetFactor), + 0 !== this.polygonOffsetUnits && (t.polygonOffsetUnits = this.polygonOffsetUnits), + this.linewidth && 1 !== this.linewidth && (t.linewidth = this.linewidth), + void 0 !== this.dashSize && (t.dashSize = this.dashSize), + void 0 !== this.gapSize && (t.gapSize = this.gapSize), + void 0 !== this.scale && (t.scale = this.scale), + !0 === this.dithering && (t.dithering = !0), + this.alphaTest > 0 && (t.alphaTest = this.alphaTest), + !0 === this.premultipliedAlpha && (t.premultipliedAlpha = this.premultipliedAlpha), + !0 === this.wireframe && (t.wireframe = this.wireframe), + this.wireframeLinewidth > 1 && (t.wireframeLinewidth = this.wireframeLinewidth), + "round" !== this.wireframeLinecap && (t.wireframeLinecap = this.wireframeLinecap), + "round" !== this.wireframeLinejoin && (t.wireframeLinejoin = this.wireframeLinejoin), + !0 === this.morphTargets && (t.morphTargets = !0), + !0 === this.morphNormals && (t.morphNormals = !0), + !0 === this.skinning && (t.skinning = !0), + !1 === this.visible && (t.visible = !1), + !1 === this.toneMapped && (t.toneMapped = !1), + "{}" !== JSON.stringify(this.userData) && (t.userData = this.userData), + e) { + var o = i(A.textures), + n = i(A.images); + o.length > 0 && (t.textures = o), + n.length > 0 && (t.images = n) + } + return t + }, + clone: function () { + return (new this.constructor).copy(this) + }, + copy: function (A) { + this.name = A.name, + this.fog = A.fog, + this.blending = A.blending, + this.side = A.side, + this.flatShading = A.flatShading, + this.vertexColors = A.vertexColors, + this.opacity = A.opacity, + this.transparent = A.transparent, + this.blendSrc = A.blendSrc, + this.blendDst = A.blendDst, + this.blendEquation = A.blendEquation, + this.blendSrcAlpha = A.blendSrcAlpha, + this.blendDstAlpha = A.blendDstAlpha, + this.blendEquationAlpha = A.blendEquationAlpha, + this.depthFunc = A.depthFunc, + this.depthTest = A.depthTest, + this.depthWrite = A.depthWrite, + this.stencilWriteMask = A.stencilWriteMask, + this.stencilFunc = A.stencilFunc, + this.stencilRef = A.stencilRef, + this.stencilFuncMask = A.stencilFuncMask, + this.stencilFail = A.stencilFail, + this.stencilZFail = A.stencilZFail, + this.stencilZPass = A.stencilZPass, + this.stencilWrite = A.stencilWrite; + var e = A.clippingPlanes, + t = null; + if (null !== e) { + var i = e.length; + t = new Array(i); + for (var o = 0; o !== i; ++o) + t[o] = e[o].clone() + } + return this.clippingPlanes = t, + this.clipIntersection = A.clipIntersection, + this.clipShadows = A.clipShadows, + this.shadowSide = A.shadowSide, + this.colorWrite = A.colorWrite, + this.precision = A.precision, + this.polygonOffset = A.polygonOffset, + this.polygonOffsetFactor = A.polygonOffsetFactor, + this.polygonOffsetUnits = A.polygonOffsetUnits, + this.dithering = A.dithering, + this.alphaTest = A.alphaTest, + this.premultipliedAlpha = A.premultipliedAlpha, + this.visible = A.visible, + this.toneMapped = A.toneMapped, + this.userData = JSON.parse(JSON.stringify(A.userData)), + this + }, + dispose: function () { + this.dispatchEvent({ + type: "dispose" + }) + } + }), + Object.defineProperty(qA.prototype, "needsUpdate", { + set: function (A) { + !0 === A && this.version++ + } + }), + (jA.prototype = Object.create(qA.prototype)).constructor = jA, + jA.prototype.isMeshBasicMaterial = !0, + jA.prototype.copy = function (A) { + return qA.prototype.copy.call(this, A), + this.color.copy(A.color), + this.map = A.map, + this.lightMap = A.lightMap, + this.lightMapIntensity = A.lightMapIntensity, + this.aoMap = A.aoMap, + this.aoMapIntensity = A.aoMapIntensity, + this.specularMap = A.specularMap, + this.alphaMap = A.alphaMap, + this.envMap = A.envMap, + this.combine = A.combine, + this.reflectivity = A.reflectivity, + this.refractionRatio = A.refractionRatio, + this.wireframe = A.wireframe, + this.wireframeLinewidth = A.wireframeLinewidth, + this.wireframeLinecap = A.wireframeLinecap, + this.wireframeLinejoin = A.wireframeLinejoin, + this.skinning = A.skinning, + this.morphTargets = A.morphTargets, + this + }; + var HA = new y; + + function YA(A, e, t) { + if (Array.isArray(A)) + throw new TypeError("THREE.BufferAttribute: array should be a Typed Array."); + this.name = "", + this.array = A, + this.itemSize = e, + this.count = void 0 !== A ? A.length / e : 0, + this.normalized = !0 === t, + this.usage = 35044, + this.updateRange = { + offset: 0, + count: -1 + }, + this.version = 0 + } + + function WA(A, e, t) { + YA.call(this, new Int8Array(A), e, t) + } + + function JA(A, e, t) { + YA.call(this, new Uint8Array(A), e, t) + } + + function zA(A, e, t) { + YA.call(this, new Uint8ClampedArray(A), e, t) + } + + function ZA(A, e, t) { + YA.call(this, new Int16Array(A), e, t) + } + + function XA(A, e, t) { + YA.call(this, new Uint16Array(A), e, t) + } + + function _A(A, e, t) { + YA.call(this, new Int32Array(A), e, t) + } + + function $A(A, e, t) { + YA.call(this, new Uint32Array(A), e, t) + } + + function Ae(A, e, t) { + YA.call(this, new Float32Array(A), e, t) + } + + function ee(A, e, t) { + YA.call(this, new Float64Array(A), e, t) + } + + function te() { + this.vertices = [], + this.normals = [], + this.colors = [], + this.uvs = [], + this.uvs2 = [], + this.groups = [], + this.morphTargets = {}, + this.skinWeights = [], + this.skinIndices = [], + this.boundingBox = null, + this.boundingSphere = null, + this.verticesNeedUpdate = !1, + this.normalsNeedUpdate = !1, + this.colorsNeedUpdate = !1, + this.uvsNeedUpdate = !1, + this.groupsNeedUpdate = !1 + } + + function ie(A) { + if (0 === A.length) + return -1 / 0; + for (var e = A[0], t = 1, i = A.length; i > t; ++t) + A[t] > e && (e = A[t]); + return e + } + Object.defineProperty(YA.prototype, "needsUpdate", { + set: function (A) { + !0 === A && this.version++ + } + }), + Object.assign(YA.prototype, { + isBufferAttribute: !0, + onUploadCallback: function () {}, + setUsage: function (A) { + return this.usage = A, + this + }, + copy: function (A) { + return this.name = A.name, + this.array = new A.array.constructor(A.array), + this.itemSize = A.itemSize, + this.count = A.count, + this.normalized = A.normalized, + this.usage = A.usage, + this + }, + copyAt: function (A, e, t) { + A *= this.itemSize, + t *= e.itemSize; + for (var i = 0, o = this.itemSize; o > i; i++) + this.array[A + i] = e.array[t + i]; + return this + }, + copyArray: function (A) { + return this.array.set(A), + this + }, + copyColorsArray: function (A) { + for (var e = this.array, t = 0, i = 0, o = A.length; o > i; i++) { + var n = A[i]; + void 0 === n && (console.warn("THREE.BufferAttribute.copyColorsArray(): color is undefined", i), + n = new LA), + e[t++] = n.r, + e[t++] = n.g, + e[t++] = n.b + } + return this + }, + copyVector2sArray: function (A) { + for (var e = this.array, t = 0, i = 0, o = A.length; o > i; i++) { + var n = A[i]; + void 0 === n && (console.warn("THREE.BufferAttribute.copyVector2sArray(): vector is undefined", i), + n = new s), + e[t++] = n.x, + e[t++] = n.y + } + return this + }, + copyVector3sArray: function (A) { + for (var e = this.array, t = 0, i = 0, o = A.length; o > i; i++) { + var n = A[i]; + void 0 === n && (console.warn("THREE.BufferAttribute.copyVector3sArray(): vector is undefined", i), + n = new y), + e[t++] = n.x, + e[t++] = n.y, + e[t++] = n.z + } + return this + }, + copyVector4sArray: function (A) { + for (var e = this.array, t = 0, i = 0, o = A.length; o > i; i++) { + var n = A[i]; + void 0 === n && (console.warn("THREE.BufferAttribute.copyVector4sArray(): vector is undefined", i), + n = new p), + e[t++] = n.x, + e[t++] = n.y, + e[t++] = n.z, + e[t++] = n.w + } + return this + }, + applyMatrix3: function (A) { + for (var e = 0, t = this.count; t > e; e++) + HA.x = this.getX(e), + HA.y = this.getY(e), + HA.z = this.getZ(e), + HA.applyMatrix3(A), + this.setXYZ(e, HA.x, HA.y, HA.z); + return this + }, + applyMatrix4: function (A) { + for (var e = 0, t = this.count; t > e; e++) + HA.x = this.getX(e), + HA.y = this.getY(e), + HA.z = this.getZ(e), + HA.applyMatrix4(A), + this.setXYZ(e, HA.x, HA.y, HA.z); + return this + }, + applyNormalMatrix: function (A) { + for (var e = 0, t = this.count; t > e; e++) + HA.x = this.getX(e), + HA.y = this.getY(e), + HA.z = this.getZ(e), + HA.applyNormalMatrix(A), + this.setXYZ(e, HA.x, HA.y, HA.z); + return this + }, + transformDirection: function (A) { + for (var e = 0, t = this.count; t > e; e++) + HA.x = this.getX(e), + HA.y = this.getY(e), + HA.z = this.getZ(e), + HA.transformDirection(A), + this.setXYZ(e, HA.x, HA.y, HA.z); + return this + }, + set: function (A, e) { + return void 0 === e && (e = 0), + this.array.set(A, e), + this + }, + getX: function (A) { + return this.array[A * this.itemSize] + }, + setX: function (A, e) { + return this.array[A * this.itemSize] = e, + this + }, + getY: function (A) { + return this.array[A * this.itemSize + 1] + }, + setY: function (A, e) { + return this.array[A * this.itemSize + 1] = e, + this + }, + getZ: function (A) { + return this.array[A * this.itemSize + 2] + }, + setZ: function (A, e) { + return this.array[A * this.itemSize + 2] = e, + this + }, + getW: function (A) { + return this.array[A * this.itemSize + 3] + }, + setW: function (A, e) { + return this.array[A * this.itemSize + 3] = e, + this + }, + setXY: function (A, e, t) { + return this.array[(A *= this.itemSize) + 0] = e, + this.array[A + 1] = t, + this + }, + setXYZ: function (A, e, t, i) { + return this.array[(A *= this.itemSize) + 0] = e, + this.array[A + 1] = t, + this.array[A + 2] = i, + this + }, + setXYZW: function (A, e, t, i, o) { + return this.array[(A *= this.itemSize) + 0] = e, + this.array[A + 1] = t, + this.array[A + 2] = i, + this.array[A + 3] = o, + this + }, + onUpload: function (A) { + return this.onUploadCallback = A, + this + }, + clone: function () { + return new this.constructor(this.array, this.itemSize).copy(this) + }, + toJSON: function () { + return { + itemSize: this.itemSize, + type: this.array.constructor.name, + array: Array.prototype.slice.call(this.array), + normalized: this.normalized + } + } + }), + (WA.prototype = Object.create(YA.prototype)).constructor = WA, + (JA.prototype = Object.create(YA.prototype)).constructor = JA, + (zA.prototype = Object.create(YA.prototype)).constructor = zA, + (ZA.prototype = Object.create(YA.prototype)).constructor = ZA, + (XA.prototype = Object.create(YA.prototype)).constructor = XA, + (_A.prototype = Object.create(YA.prototype)).constructor = _A, + ($A.prototype = Object.create(YA.prototype)).constructor = $A, + (Ae.prototype = Object.create(YA.prototype)).constructor = Ae, + (ee.prototype = Object.create(YA.prototype)).constructor = ee, + Object.assign(te.prototype, { + computeGroups: function (A) { + for (var e, t = [], i = void 0, o = A.faces, n = 0; o.length > n; n++) { + var r = o[n]; + r.materialIndex !== i && (i = r.materialIndex, + void 0 !== e && (e.count = 3 * n - e.start, + t.push(e)), + e = { + start: 3 * n, + materialIndex: i + }) + } + void 0 !== e && (e.count = 3 * n - e.start, + t.push(e)), + this.groups = t + }, + fromGeometry: function (A) { + var e, t = A.faces, + i = A.vertices, + o = A.faceVertexUvs, + n = o[0] && o[0].length > 0, + r = o[1] && o[1].length > 0, + a = A.morphTargets, + l = a.length; + if (l > 0) { + e = []; + for (var c = 0; l > c; c++) + e[c] = { + name: a[c].name, + data: [] + }; + this.morphTargets.position = e + } + var h, d = A.morphNormals, + p = d.length; + if (p > 0) { + h = []; + for (c = 0; p > c; c++) + h[c] = { + name: d[c].name, + data: [] + }; + this.morphTargets.normal = h + } + var g = A.skinIndices, + u = A.skinWeights, + f = g.length === i.length, + m = u.length === i.length; + i.length > 0 && 0 === t.length && console.error("THREE.DirectGeometry: Faceless geometries are not supported."); + for (c = 0; t.length > c; c++) { + var C = t[c]; + this.vertices.push(i[C.a], i[C.b], i[C.c]); + var y = C.vertexNormals; + if (3 === y.length) + this.normals.push(y[0], y[1], y[2]); + else { + var v = C.normal; + this.normals.push(v, v, v) + } + var I, E = C.vertexColors; + if (3 === E.length) + this.colors.push(E[0], E[1], E[2]); + else { + var B = C.color; + this.colors.push(B, B, B) + } + if (!0 === n) + void 0 !== (I = o[0][c]) ? this.uvs.push(I[0], I[1], I[2]) : (console.warn("THREE.DirectGeometry.fromGeometry(): Undefined vertexUv ", c), + this.uvs.push(new s, new s, new s)); + if (!0 === r) + void 0 !== (I = o[1][c]) ? this.uvs2.push(I[0], I[1], I[2]) : (console.warn("THREE.DirectGeometry.fromGeometry(): Undefined vertexUv2 ", c), + this.uvs2.push(new s, new s, new s)); + for (var x = 0; l > x; x++) { + var S = a[x].vertices; + e[x].data.push(S[C.a], S[C.b], S[C.c]) + } + for (x = 0; p > x; x++) { + var w = d[x].vertexNormals[c]; + h[x].data.push(w.a, w.b, w.c) + } + f && this.skinIndices.push(g[C.a], g[C.b], g[C.c]), + m && this.skinWeights.push(u[C.a], u[C.b], u[C.c]) + } + return this.computeGroups(A), + this.verticesNeedUpdate = A.verticesNeedUpdate, + this.normalsNeedUpdate = A.normalsNeedUpdate, + this.colorsNeedUpdate = A.colorsNeedUpdate, + this.uvsNeedUpdate = A.uvsNeedUpdate, + this.groupsNeedUpdate = A.groupsNeedUpdate, + null !== A.boundingSphere && (this.boundingSphere = A.boundingSphere.clone()), + null !== A.boundingBox && (this.boundingBox = A.boundingBox.clone()), + this + } + }); + var oe = 1, + ne = new M, + re = new H, + ae = new y, + se = new aA, + le = new aA, + ce = new y; + + function he() { + Object.defineProperty(this, "id", { + value: oe += 2 + }), + this.uuid = a.generateUUID(), + this.name = "", + this.type = "BufferGeometry", + this.index = null, + this.attributes = {}, + this.morphAttributes = {}, + this.morphTargetsRelative = !1, + this.groups = [], + this.boundingBox = null, + this.boundingSphere = null, + this.drawRange = { + start: 0, + count: 1 / 0 + }, + this.userData = {} + } + he.prototype = Object.assign(Object.create(i.prototype), { + constructor: he, + isBufferGeometry: !0, + getIndex: function () { + return this.index + }, + setIndex: function (A) { + this.index = Array.isArray(A) ? new(ie(A) > 65535 ? $A : XA)(A, 1) : A + }, + getAttribute: function (A) { + return this.attributes[A] + }, + setAttribute: function (A, e) { + return this.attributes[A] = e, + this + }, + deleteAttribute: function (A) { + return delete this.attributes[A], + this + }, + addGroup: function (A, e, t) { + this.groups.push({ + start: A, + count: e, + materialIndex: void 0 !== t ? t : 0 + }) + }, + clearGroups: function () { + this.groups = [] + }, + setDrawRange: function (A, e) { + this.drawRange.start = A, + this.drawRange.count = e + }, + applyMatrix4: function (A) { + var e = this.attributes.position; + void 0 !== e && (e.applyMatrix4(A), + e.needsUpdate = !0); + var t = this.attributes.normal; + if (void 0 !== t) { + var i = (new l).getNormalMatrix(A); + t.applyNormalMatrix(i), + t.needsUpdate = !0 + } + var o = this.attributes.tangent; + return void 0 !== o && (o.transformDirection(A), + o.needsUpdate = !0), + null !== this.boundingBox && this.computeBoundingBox(), + null !== this.boundingSphere && this.computeBoundingSphere(), + this + }, + rotateX: function (A) { + return ne.makeRotationX(A), + this.applyMatrix4(ne), + this + }, + rotateY: function (A) { + return ne.makeRotationY(A), + this.applyMatrix4(ne), + this + }, + rotateZ: function (A) { + return ne.makeRotationZ(A), + this.applyMatrix4(ne), + this + }, + translate: function (A, e, t) { + return ne.makeTranslation(A, e, t), + this.applyMatrix4(ne), + this + }, + scale: function (A, e, t) { + return ne.makeScale(A, e, t), + this.applyMatrix4(ne), + this + }, + lookAt: function (A) { + return re.lookAt(A), + re.updateMatrix(), + this.applyMatrix4(re.matrix), + this + }, + center: function () { + return this.computeBoundingBox(), + this.boundingBox.getCenter(ae).negate(), + this.translate(ae.x, ae.y, ae.z), + this + }, + setFromObject: function (A) { + var e = A.geometry; + if (A.isPoints || A.isLine) { + var t = new Ae(3 * e.vertices.length, 3), + i = new Ae(3 * e.colors.length, 3); + if (this.setAttribute("position", t.copyVector3sArray(e.vertices)), + this.setAttribute("color", i.copyColorsArray(e.colors)), + e.lineDistances && e.lineDistances.length === e.vertices.length) { + var o = new Ae(e.lineDistances.length, 1); + this.setAttribute("lineDistance", o.copyArray(e.lineDistances)) + } + null !== e.boundingSphere && (this.boundingSphere = e.boundingSphere.clone()), + null !== e.boundingBox && (this.boundingBox = e.boundingBox.clone()) + } else + A.isMesh && e && e.isGeometry && this.fromGeometry(e); + return this + }, + setFromPoints: function (A) { + for (var e = [], t = 0, i = A.length; i > t; t++) { + var o = A[t]; + e.push(o.x, o.y, o.z || 0) + } + return this.setAttribute("position", new Ae(e, 3)), + this + }, + updateFromObject: function (A) { + var e, t = A.geometry; + if (A.isMesh) { + var i = t.__directGeometry; + if (!0 === t.elementsNeedUpdate && (i = void 0, + t.elementsNeedUpdate = !1), + void 0 === i) + return this.fromGeometry(t); + i.verticesNeedUpdate = t.verticesNeedUpdate, + i.normalsNeedUpdate = t.normalsNeedUpdate, + i.colorsNeedUpdate = t.colorsNeedUpdate, + i.uvsNeedUpdate = t.uvsNeedUpdate, + i.groupsNeedUpdate = t.groupsNeedUpdate, + t.verticesNeedUpdate = !1, + t.normalsNeedUpdate = !1, + t.colorsNeedUpdate = !1, + t.uvsNeedUpdate = !1, + t.groupsNeedUpdate = !1, + t = i + } + return !0 === t.verticesNeedUpdate && (void 0 !== (e = this.attributes.position) && (e.copyVector3sArray(t.vertices), + e.needsUpdate = !0), + t.verticesNeedUpdate = !1), + !0 === t.normalsNeedUpdate && (void 0 !== (e = this.attributes.normal) && (e.copyVector3sArray(t.normals), + e.needsUpdate = !0), + t.normalsNeedUpdate = !1), + !0 === t.colorsNeedUpdate && (void 0 !== (e = this.attributes.color) && (e.copyColorsArray(t.colors), + e.needsUpdate = !0), + t.colorsNeedUpdate = !1), + t.uvsNeedUpdate && (void 0 !== (e = this.attributes.uv) && (e.copyVector2sArray(t.uvs), + e.needsUpdate = !0), + t.uvsNeedUpdate = !1), + t.lineDistancesNeedUpdate && (void 0 !== (e = this.attributes.lineDistance) && (e.copyArray(t.lineDistances), + e.needsUpdate = !0), + t.lineDistancesNeedUpdate = !1), + t.groupsNeedUpdate && (t.computeGroups(A.geometry), + this.groups = t.groups, + t.groupsNeedUpdate = !1), + this + }, + fromGeometry: function (A) { + return A.__directGeometry = (new te).fromGeometry(A), + this.fromDirectGeometry(A.__directGeometry) + }, + fromDirectGeometry: function (A) { + var e = new Float32Array(3 * A.vertices.length); + if (this.setAttribute("position", new YA(e, 3).copyVector3sArray(A.vertices)), + A.normals.length > 0) { + var t = new Float32Array(3 * A.normals.length); + this.setAttribute("normal", new YA(t, 3).copyVector3sArray(A.normals)) + } + if (A.colors.length > 0) { + var i = new Float32Array(3 * A.colors.length); + this.setAttribute("color", new YA(i, 3).copyColorsArray(A.colors)) + } + if (A.uvs.length > 0) { + var o = new Float32Array(2 * A.uvs.length); + this.setAttribute("uv", new YA(o, 2).copyVector2sArray(A.uvs)) + } + if (A.uvs2.length > 0) { + var n = new Float32Array(2 * A.uvs2.length); + this.setAttribute("uv2", new YA(n, 2).copyVector2sArray(A.uvs2)) + } + for (var r in this.groups = A.groups, + A.morphTargets) { + for (var a = [], s = A.morphTargets[r], l = 0, c = s.length; c > l; l++) { + var h = s[l], + d = new Ae(3 * h.data.length, 3); + d.name = h.name, + a.push(d.copyVector3sArray(h.data)) + } + this.morphAttributes[r] = a + } + if (A.skinIndices.length > 0) { + var p = new Ae(4 * A.skinIndices.length, 4); + this.setAttribute("skinIndex", p.copyVector4sArray(A.skinIndices)) + } + if (A.skinWeights.length > 0) { + var g = new Ae(4 * A.skinWeights.length, 4); + this.setAttribute("skinWeight", g.copyVector4sArray(A.skinWeights)) + } + return null !== A.boundingSphere && (this.boundingSphere = A.boundingSphere.clone()), + null !== A.boundingBox && (this.boundingBox = A.boundingBox.clone()), + this + }, + computeBoundingBox: function () { + null === this.boundingBox && (this.boundingBox = new aA); + var A = this.attributes.position, + e = this.morphAttributes.position; + if (void 0 !== A) { + if (this.boundingBox.setFromBufferAttribute(A), + e) + for (var t = 0, i = e.length; i > t; t++) { + se.setFromBufferAttribute(e[t]), + this.morphTargetsRelative ? (ce.addVectors(this.boundingBox.min, se.min), + this.boundingBox.expandByPoint(ce), + ce.addVectors(this.boundingBox.max, se.max), + this.boundingBox.expandByPoint(ce)) : (this.boundingBox.expandByPoint(se.min), + this.boundingBox.expandByPoint(se.max)) + } + } else + this.boundingBox.makeEmpty(); + (isNaN(this.boundingBox.min.x) || isNaN(this.boundingBox.min.y) || isNaN(this.boundingBox.min.z)) && console.error('THREE.BufferGeometry.computeBoundingBox: Computed min/max have NaN values. The "position" attribute is likely to have NaN values.', this) + }, + computeBoundingSphere: function () { + null === this.boundingSphere && (this.boundingSphere = new cA); + var A = this.attributes.position, + e = this.morphAttributes.position; + if (A) { + var t = this.boundingSphere.center; + if (se.setFromBufferAttribute(A), + e) + for (var i = 0, o = e.length; o > i; i++) { + le.setFromBufferAttribute(r = e[i]), + this.morphTargetsRelative ? (ce.addVectors(se.min, le.min), + se.expandByPoint(ce), + ce.addVectors(se.max, le.max), + se.expandByPoint(ce)) : (se.expandByPoint(le.min), + se.expandByPoint(le.max)) + } + se.getCenter(t); + var n = 0; + for (i = 0, + o = A.count; o > i; i++) + ce.fromBufferAttribute(A, i), + n = Math.max(n, t.distanceToSquared(ce)); + if (e) + for (i = 0, + o = e.length; o > i; i++) + for (var r, a = this.morphTargetsRelative, s = 0, l = (r = e[i]).count; l > s; s++) + ce.fromBufferAttribute(r, s), + a && (ae.fromBufferAttribute(A, s), + ce.add(ae)), + n = Math.max(n, t.distanceToSquared(ce)); + this.boundingSphere.radius = Math.sqrt(n), + isNaN(this.boundingSphere.radius) && console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.', this) + } + }, + computeFaceNormals: function () {}, + computeVertexNormals: function () { + var A = this.index, + e = this.attributes; + if (e.position) { + var t = e.position.array; + if (void 0 === e.normal) + this.setAttribute("normal", new YA(new Float32Array(t.length), 3)); + else + for (var i = e.normal.array, o = 0, n = i.length; n > o; o++) + i[o] = 0; + var r, a, s, l = e.normal.array, + c = new y, + h = new y, + d = new y, + p = new y, + g = new y; + if (A) { + var u = A.array; + for (o = 0, + n = A.count; n > o; o += 3) + a = 3 * u[o + 1], + s = 3 * u[o + 2], + c.fromArray(t, r = 3 * u[o + 0]), + h.fromArray(t, a), + d.fromArray(t, s), + p.subVectors(d, h), + g.subVectors(c, h), + p.cross(g), + l[r] += p.x, + l[r + 1] += p.y, + l[r + 2] += p.z, + l[a] += p.x, + l[a + 1] += p.y, + l[a + 2] += p.z, + l[s] += p.x, + l[s + 1] += p.y, + l[s + 2] += p.z + } else + for (o = 0, + n = t.length; n > o; o += 9) + c.fromArray(t, o), + h.fromArray(t, o + 3), + d.fromArray(t, o + 6), + p.subVectors(d, h), + g.subVectors(c, h), + p.cross(g), + l[o] = p.x, + l[o + 1] = p.y, + l[o + 2] = p.z, + l[o + 3] = p.x, + l[o + 4] = p.y, + l[o + 5] = p.z, + l[o + 6] = p.x, + l[o + 7] = p.y, + l[o + 8] = p.z; + this.normalizeNormals(), + e.normal.needsUpdate = !0 + } + }, + merge: function (A, e) { + if (A && A.isBufferGeometry) { + void 0 === e && (e = 0, + console.warn("THREE.BufferGeometry.merge(): Overwriting original geometry, starting at offset=0. Use BufferGeometryUtils.mergeBufferGeometries() for lossless merge.")); + var t = this.attributes; + for (var i in t) + if (void 0 !== A.attributes[i]) + for (var o = t[i].array, n = A.attributes[i], r = n.array, a = n.itemSize * e, s = Math.min(r.length, o.length - a), l = 0, c = a; s > l; l++, + c++) + o[c] = r[l]; + return this + } + console.error("THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.", A) + }, + normalizeNormals: function () { + for (var A = this.attributes.normal, e = 0, t = A.count; t > e; e++) + ce.x = A.getX(e), + ce.y = A.getY(e), + ce.z = A.getZ(e), + ce.normalize(), + A.setXYZ(e, ce.x, ce.y, ce.z) + }, + toNonIndexed: function () { + function A(A, e) { + for (var t = A.array, i = A.itemSize, o = new t.constructor(e.length * i), n = 0, r = 0, a = 0, s = e.length; s > a; a++) { + n = e[a] * i; + for (var l = 0; i > l; l++) + o[r++] = t[n++] + } + return new YA(o, i) + } + if (null === this.index) + return console.warn("THREE.BufferGeometry.toNonIndexed(): Geometry is already non-indexed."), + this; + var e = new he, + t = this.index.array, + i = this.attributes; + for (var o in i) { + var n = A(i[o], t); + e.setAttribute(o, n) + } + var r = this.morphAttributes; + for (o in r) { + for (var a = [], s = r[o], l = 0, c = s.length; c > l; l++) { + n = A(s[l], t); + a.push(n) + } + e.morphAttributes[o] = a + } + e.morphTargetsRelative = this.morphTargetsRelative; + for (var h = this.groups, d = (l = 0, + h.length); d > l; l++) { + var p = h[l]; + e.addGroup(p.start, p.count, p.materialIndex) + } + return e + }, + toJSON: function () { + var A = { + metadata: { + version: 4.5, + type: "BufferGeometry", + generator: "BufferGeometry.toJSON" + } + }; + if (A.uuid = this.uuid, + A.type = this.type, + "" !== this.name && (A.name = this.name), + Object.keys(this.userData).length > 0 && (A.userData = this.userData), + void 0 !== this.parameters) { + var e = this.parameters; + for (var t in e) + void 0 !== e[t] && (A[t] = e[t]); + return A + } + A.data = { + attributes: {} + }; + var i = this.index; + null !== i && (A.data.index = { + type: i.array.constructor.name, + array: Array.prototype.slice.call(i.array) + }); + var o = this.attributes; + for (var t in o) { + var n = (d = o[t]).toJSON(); + "" !== d.name && (n.name = d.name), + A.data.attributes[t] = n + } + var r = {}, + a = !1; + for (var t in this.morphAttributes) { + for (var s = this.morphAttributes[t], l = [], c = 0, h = s.length; h > c; c++) { + var d; + n = (d = s[c]).toJSON(); + "" !== d.name && (n.name = d.name), + l.push(n) + } + l.length > 0 && (r[t] = l, + a = !0) + } + a && (A.data.morphAttributes = r, + A.data.morphTargetsRelative = this.morphTargetsRelative); + var p = this.groups; + p.length > 0 && (A.data.groups = JSON.parse(JSON.stringify(p))); + var g = this.boundingSphere; + return null !== g && (A.data.boundingSphere = { + center: g.center.toArray(), + radius: g.radius + }), + A + }, + clone: function () { + return (new he).copy(this) + }, + copy: function (A) { + var e, t, i; + this.index = null, + this.attributes = {}, + this.morphAttributes = {}, + this.groups = [], + this.boundingBox = null, + this.boundingSphere = null, + this.name = A.name; + var o = A.index; + null !== o && this.setIndex(o.clone()); + var n = A.attributes; + for (e in n) { + this.setAttribute(e, n[e].clone()) + } + var r = A.morphAttributes; + for (e in r) { + var a = [], + s = r[e]; + for (t = 0, + i = s.length; i > t; t++) + a.push(s[t].clone()); + this.morphAttributes[e] = a + } + this.morphTargetsRelative = A.morphTargetsRelative; + var l = A.groups; + for (t = 0, + i = l.length; i > t; t++) { + var c = l[t]; + this.addGroup(c.start, c.count, c.materialIndex) + } + var h = A.boundingBox; + null !== h && (this.boundingBox = h.clone()); + var d = A.boundingSphere; + return null !== d && (this.boundingSphere = d.clone()), + this.drawRange.start = A.drawRange.start, + this.drawRange.count = A.drawRange.count, + this.userData = A.userData, + this + }, + dispose: function () { + this.dispatchEvent({ + type: "dispose" + }) + } + }); + var de = new M, + pe = new CA, + ge = new cA, + ue = new y, + fe = new y, + me = new y, + Ce = new y, + ye = new y, + ve = new y, + Ie = new y, + Ee = new y, + Be = new y, + xe = new s, + Se = new s, + we = new s, + Me = new y, + be = new y; + + function Ue(A, e) { + H.call(this), + this.type = "Mesh", + this.geometry = void 0 !== A ? A : new he, + this.material = void 0 !== e ? e : new jA, + this.updateMorphTargets() + } + + function Fe(A, e, t, i, o, n, r, a) { + if (null === (1 === e.side ? i.intersectTriangle(r, n, o, !0, a) : i.intersectTriangle(o, n, r, 2 !== e.side, a))) + return null; + be.copy(a), + be.applyMatrix4(A.matrixWorld); + var s = t.ray.origin.distanceTo(be); + return t.near > s || s > t.far ? null : { + distance: s, + point: be.clone(), + object: A + } + } + + function Ke(A, e, t, i, o, n, r, a, l, c, h, d) { + ue.fromBufferAttribute(o, c), + fe.fromBufferAttribute(o, h), + me.fromBufferAttribute(o, d); + var p = A.morphTargetInfluences; + if (e.morphTargets && n && p) { + Ie.set(0, 0, 0), + Ee.set(0, 0, 0), + Be.set(0, 0, 0); + for (var g = 0, u = n.length; u > g; g++) { + var f = p[g], + m = n[g]; + 0 !== f && (Ce.fromBufferAttribute(m, c), + ye.fromBufferAttribute(m, h), + ve.fromBufferAttribute(m, d), + r ? (Ie.addScaledVector(Ce, f), + Ee.addScaledVector(ye, f), + Be.addScaledVector(ve, f)) : (Ie.addScaledVector(Ce.sub(ue), f), + Ee.addScaledVector(ye.sub(fe), f), + Be.addScaledVector(ve.sub(me), f))) + } + ue.add(Ie), + fe.add(Ee), + me.add(Be) + } + var C = Fe(A, e, t, i, ue, fe, me, Me); + if (C) { + a && (xe.fromBufferAttribute(a, c), + Se.fromBufferAttribute(a, h), + we.fromBufferAttribute(a, d), + C.uv = RA.getUV(Me, ue, fe, me, xe, Se, we, new s)), + l && (xe.fromBufferAttribute(l, c), + Se.fromBufferAttribute(l, h), + we.fromBufferAttribute(l, d), + C.uv2 = RA.getUV(Me, ue, fe, me, xe, Se, we, new s)); + var y = new GA(c, h, d); + RA.getNormal(ue, fe, me, y.normal), + C.face = y + } + return C + } + Ue.prototype = Object.assign(Object.create(H.prototype), { + constructor: Ue, + isMesh: !0, + copy: function (A) { + return H.prototype.copy.call(this, A), + void 0 !== A.morphTargetInfluences && (this.morphTargetInfluences = A.morphTargetInfluences.slice()), + void 0 !== A.morphTargetDictionary && (this.morphTargetDictionary = Object.assign({}, A.morphTargetDictionary)), + this + }, + updateMorphTargets: function () { + var A, e, t, i = this.geometry; + if (i.isBufferGeometry) { + var o = i.morphAttributes, + n = Object.keys(o); + if (n.length > 0) { + var r = o[n[0]]; + if (void 0 !== r) + for (this.morphTargetInfluences = [], + this.morphTargetDictionary = {}, + A = 0, + e = r.length; e > A; A++) + t = r[A].name || String(A), + this.morphTargetInfluences.push(0), + this.morphTargetDictionary[t] = A + } + } else { + var a = i.morphTargets; + void 0 !== a && a.length > 0 && console.error("THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.") + } + }, + raycast: function (A, e) { + var t, i = this.geometry, + o = this.material, + n = this.matrixWorld; + if (void 0 !== o && (null === i.boundingSphere && i.computeBoundingSphere(), + ge.copy(i.boundingSphere), + ge.applyMatrix4(n), + !1 !== A.ray.intersectsSphere(ge) && (de.getInverse(n), + pe.copy(A.ray).applyMatrix4(de), + null === i.boundingBox || !1 !== pe.intersectsBox(i.boundingBox)))) + if (i.isBufferGeometry) { + var r, a, l, c, h, d, p, g, u, f = i.index, + m = i.attributes.position, + C = i.morphAttributes.position, + y = i.morphTargetsRelative, + v = i.attributes.uv, + I = i.attributes.uv2, + E = i.groups, + B = i.drawRange; + if (null !== f) + if (Array.isArray(o)) { + for (c = 0, + d = E.length; d > c; c++) + if (u = o[(g = E[c]).materialIndex]) + for (h = Math.max(g.start, B.start), + p = Math.min(g.start + g.count, B.start + B.count); p > h; h += 3) + r = f.getX(h), + a = f.getX(h + 1), + l = f.getX(h + 2), + (t = Ke(this, u, A, pe, m, C, y, v, I, r, a, l)) && (t.faceIndex = Math.floor(h / 3), + t.face.materialIndex = g.materialIndex, + e.push(t)) + } else + for (c = Math.max(0, B.start), + d = Math.min(f.count, B.start + B.count); d > c; c += 3) + r = f.getX(c), + a = f.getX(c + 1), + l = f.getX(c + 2), + (t = Ke(this, o, A, pe, m, C, y, v, I, r, a, l)) && (t.faceIndex = Math.floor(c / 3), + e.push(t)); + else if (void 0 !== m) + if (Array.isArray(o)) + for (c = 0, + d = E.length; d > c; c++) + for (u = o[(g = E[c]).materialIndex], + h = Math.max(g.start, B.start), + p = Math.min(g.start + g.count, B.start + B.count); p > h; h += 3) + (t = Ke(this, u, A, pe, m, C, y, v, I, r = h, a = h + 1, l = h + 2)) && (t.faceIndex = Math.floor(h / 3), + t.face.materialIndex = g.materialIndex, + e.push(t)); + else + for (c = Math.max(0, B.start), + d = Math.min(m.count, B.start + B.count); d > c; c += 3) + (t = Ke(this, o, A, pe, m, C, y, v, I, r = c, a = c + 1, l = c + 2)) && (t.faceIndex = Math.floor(c / 3), + e.push(t)) + } else if (i.isGeometry) { + var x, S, w, M, b = Array.isArray(o), + U = i.vertices, + F = i.faces, + K = i.faceVertexUvs[0]; + K.length > 0 && (M = K); + for (var Q = 0, R = F.length; R > Q; Q++) { + var T = F[Q], + k = b ? o[T.materialIndex] : o; + if (void 0 !== k && (t = Fe(this, k, A, pe, x = U[T.a], S = U[T.b], w = U[T.c], Me))) { + if (M && M[Q]) { + var D = M[Q]; + xe.copy(D[0]), + Se.copy(D[1]), + we.copy(D[2]), + t.uv = RA.getUV(Me, x, S, w, xe, Se, we, new s) + } + t.face = T, + t.faceIndex = Q, + e.push(t) + } + } + } + }, + clone: function () { + return new this.constructor(this.geometry, this.material).copy(this) + } + }); + var Qe = 0, + Re = new M, + Te = new H, + ke = new y; + + function De() { + Object.defineProperty(this, "id", { + value: Qe += 2 + }), + this.uuid = a.generateUUID(), + this.name = "", + this.type = "Geometry", + this.vertices = [], + this.colors = [], + this.faces = [], + this.faceVertexUvs = [ + [] + ], + this.morphTargets = [], + this.morphNormals = [], + this.skinWeights = [], + this.skinIndices = [], + this.lineDistances = [], + this.boundingBox = null, + this.boundingSphere = null, + this.elementsNeedUpdate = !1, + this.verticesNeedUpdate = !1, + this.uvsNeedUpdate = !1, + this.normalsNeedUpdate = !1, + this.colorsNeedUpdate = !1, + this.lineDistancesNeedUpdate = !1, + this.groupsNeedUpdate = !1 + } + De.prototype = Object.assign(Object.create(i.prototype), { + constructor: De, + isGeometry: !0, + applyMatrix4: function (A) { + for (var e = (new l).getNormalMatrix(A), t = 0, i = this.vertices.length; i > t; t++) { + this.vertices[t].applyMatrix4(A) + } + for (t = 0, + i = this.faces.length; i > t; t++) { + var o = this.faces[t]; + o.normal.applyMatrix3(e).normalize(); + for (var n = 0, r = o.vertexNormals.length; r > n; n++) + o.vertexNormals[n].applyMatrix3(e).normalize() + } + return null !== this.boundingBox && this.computeBoundingBox(), + null !== this.boundingSphere && this.computeBoundingSphere(), + this.verticesNeedUpdate = !0, + this.normalsNeedUpdate = !0, + this + }, + rotateX: function (A) { + return Re.makeRotationX(A), + this.applyMatrix4(Re), + this + }, + rotateY: function (A) { + return Re.makeRotationY(A), + this.applyMatrix4(Re), + this + }, + rotateZ: function (A) { + return Re.makeRotationZ(A), + this.applyMatrix4(Re), + this + }, + translate: function (A, e, t) { + return Re.makeTranslation(A, e, t), + this.applyMatrix4(Re), + this + }, + scale: function (A, e, t) { + return Re.makeScale(A, e, t), + this.applyMatrix4(Re), + this + }, + lookAt: function (A) { + return Te.lookAt(A), + Te.updateMatrix(), + this.applyMatrix4(Te.matrix), + this + }, + fromBufferGeometry: function (A) { + var e = this, + t = null !== A.index ? A.index.array : void 0, + i = A.attributes; + if (void 0 === i.position) + return console.error("THREE.Geometry.fromBufferGeometry(): Position attribute required for conversion."), + this; + var o = i.position.array, + n = void 0 !== i.normal ? i.normal.array : void 0, + r = void 0 !== i.color ? i.color.array : void 0, + a = void 0 !== i.uv ? i.uv.array : void 0, + l = void 0 !== i.uv2 ? i.uv2.array : void 0; + void 0 !== l && (this.faceVertexUvs[1] = []); + for (var c = 0; o.length > c; c += 3) + e.vertices.push((new y).fromArray(o, c)), + void 0 !== r && e.colors.push((new LA).fromArray(r, c)); + + function h(A, t, i, o) { + var c = void 0 === r ? [] : [e.colors[A].clone(), e.colors[t].clone(), e.colors[i].clone()], + h = new GA(A, t, i, void 0 === n ? [] : [(new y).fromArray(n, 3 * A), (new y).fromArray(n, 3 * t), (new y).fromArray(n, 3 * i)], c, o); + e.faces.push(h), + void 0 !== a && e.faceVertexUvs[0].push([(new s).fromArray(a, 2 * A), (new s).fromArray(a, 2 * t), (new s).fromArray(a, 2 * i)]), + void 0 !== l && e.faceVertexUvs[1].push([(new s).fromArray(l, 2 * A), (new s).fromArray(l, 2 * t), (new s).fromArray(l, 2 * i)]) + } + var d = A.groups; + if (d.length > 0) + for (c = 0; d.length > c; c++) + for (var p = d[c], g = p.start, u = g, f = g + p.count; f > u; u += 3) + void 0 !== t ? h(t[u], t[u + 1], t[u + 2], p.materialIndex) : h(u, u + 1, u + 2, p.materialIndex); + else if (void 0 !== t) + for (c = 0; t.length > c; c += 3) + h(t[c], t[c + 1], t[c + 2]); + else + for (c = 0; o.length / 3 > c; c += 3) + h(c, c + 1, c + 2); + return this.computeFaceNormals(), + null !== A.boundingBox && (this.boundingBox = A.boundingBox.clone()), + null !== A.boundingSphere && (this.boundingSphere = A.boundingSphere.clone()), + this + }, + center: function () { + return this.computeBoundingBox(), + this.boundingBox.getCenter(ke).negate(), + this.translate(ke.x, ke.y, ke.z), + this + }, + normalize: function () { + this.computeBoundingSphere(); + var A = this.boundingSphere.center, + e = this.boundingSphere.radius, + t = 0 === e ? 1 : 1 / e, + i = new M; + return i.set(t, 0, 0, -t * A.x, 0, t, 0, -t * A.y, 0, 0, t, -t * A.z, 0, 0, 0, 1), + this.applyMatrix4(i), + this + }, + computeFaceNormals: function () { + for (var A = new y, e = new y, t = 0, i = this.faces.length; i > t; t++) { + var o = this.faces[t], + n = this.vertices[o.a], + r = this.vertices[o.b]; + A.subVectors(this.vertices[o.c], r), + e.subVectors(n, r), + A.cross(e), + A.normalize(), + o.normal.copy(A) + } + }, + computeVertexNormals: function (A) { + var e, t, i, o, n, r; + for (void 0 === A && (A = !0), + r = new Array(this.vertices.length), + e = 0, + t = this.vertices.length; t > e; e++) + r[e] = new y; + if (A) { + var a, s, l = new y, + c = new y; + for (i = 0, + o = this.faces.length; o > i; i++) + a = this.vertices[(n = this.faces[i]).a], + l.subVectors(this.vertices[n.c], s = this.vertices[n.b]), + c.subVectors(a, s), + l.cross(c), + r[n.a].add(l), + r[n.b].add(l), + r[n.c].add(l) + } else + for (this.computeFaceNormals(), + i = 0, + o = this.faces.length; o > i; i++) + r[(n = this.faces[i]).a].add(n.normal), + r[n.b].add(n.normal), + r[n.c].add(n.normal); + for (e = 0, + t = this.vertices.length; t > e; e++) + r[e].normalize(); + for (i = 0, + o = this.faces.length; o > i; i++) { + var h = (n = this.faces[i]).vertexNormals; + 3 === h.length ? (h[0].copy(r[n.a]), + h[1].copy(r[n.b]), + h[2].copy(r[n.c])) : (h[0] = r[n.a].clone(), + h[1] = r[n.b].clone(), + h[2] = r[n.c].clone()) + } + this.faces.length > 0 && (this.normalsNeedUpdate = !0) + }, + computeFlatVertexNormals: function () { + var A, e, t; + for (this.computeFaceNormals(), + A = 0, + e = this.faces.length; e > A; A++) { + var i = (t = this.faces[A]).vertexNormals; + 3 === i.length ? (i[0].copy(t.normal), + i[1].copy(t.normal), + i[2].copy(t.normal)) : (i[0] = t.normal.clone(), + i[1] = t.normal.clone(), + i[2] = t.normal.clone()) + } + this.faces.length > 0 && (this.normalsNeedUpdate = !0) + }, + computeMorphNormals: function () { + var A, e, t, i, o; + for (t = 0, + i = this.faces.length; i > t; t++) + for ((o = this.faces[t]).__originalFaceNormal ? o.__originalFaceNormal.copy(o.normal) : o.__originalFaceNormal = o.normal.clone(), + o.__originalVertexNormals || (o.__originalVertexNormals = []), + A = 0, + e = o.vertexNormals.length; e > A; A++) + o.__originalVertexNormals[A] ? o.__originalVertexNormals[A].copy(o.vertexNormals[A]) : o.__originalVertexNormals[A] = o.vertexNormals[A].clone(); + var n = new De; + for (n.faces = this.faces, + A = 0, + e = this.morphTargets.length; e > A; A++) { + if (!this.morphNormals[A]) { + this.morphNormals[A] = {}, + this.morphNormals[A].faceNormals = [], + this.morphNormals[A].vertexNormals = []; + var r = this.morphNormals[A].faceNormals, + a = this.morphNormals[A].vertexNormals; + for (t = 0, + i = this.faces.length; i > t; t++) + s = new y, + l = { + a: new y, + b: new y, + c: new y + }, + r.push(s), + a.push(l) + } + var s, l, c = this.morphNormals[A]; + for (n.vertices = this.morphTargets[A].vertices, + n.computeFaceNormals(), + n.computeVertexNormals(), + t = 0, + i = this.faces.length; i > t; t++) + l = c.vertexNormals[t], + (s = c.faceNormals[t]).copy((o = this.faces[t]).normal), + l.a.copy(o.vertexNormals[0]), + l.b.copy(o.vertexNormals[1]), + l.c.copy(o.vertexNormals[2]) + } + for (t = 0, + i = this.faces.length; i > t; t++) + (o = this.faces[t]).normal = o.__originalFaceNormal, + o.vertexNormals = o.__originalVertexNormals + }, + computeBoundingBox: function () { + null === this.boundingBox && (this.boundingBox = new aA), + this.boundingBox.setFromPoints(this.vertices) + }, + computeBoundingSphere: function () { + null === this.boundingSphere && (this.boundingSphere = new cA), + this.boundingSphere.setFromPoints(this.vertices) + }, + merge: function (A, e, t) { + if (A && A.isGeometry) { + var i, o = this.vertices.length, + n = this.vertices, + r = A.vertices, + a = this.faces, + s = A.faces, + c = this.colors, + h = A.colors; + void 0 === t && (t = 0), + void 0 !== e && (i = (new l).getNormalMatrix(e)); + for (var d = 0, p = r.length; p > d; d++) { + var g = r[d].clone(); + void 0 !== e && g.applyMatrix4(e), + n.push(g) + } + for (d = 0, + p = h.length; p > d; d++) + c.push(h[d].clone()); + for (d = 0, + p = s.length; p > d; d++) { + var u, f, m = s[d], + C = m.vertexNormals, + y = m.vertexColors; + (u = new GA(m.a + o, m.b + o, m.c + o)).normal.copy(m.normal), + void 0 !== i && u.normal.applyMatrix3(i).normalize(); + for (var v = 0, I = C.length; I > v; v++) + f = C[v].clone(), + void 0 !== i && f.applyMatrix3(i).normalize(), + u.vertexNormals.push(f); + u.color.copy(m.color); + for (v = 0, + I = y.length; I > v; v++) + u.vertexColors.push(y[v].clone()); + u.materialIndex = m.materialIndex + t, + a.push(u) + } + for (d = 0, + p = A.faceVertexUvs.length; p > d; d++) { + var E = A.faceVertexUvs[d]; + void 0 === this.faceVertexUvs[d] && (this.faceVertexUvs[d] = []); + for (v = 0, + I = E.length; I > v; v++) { + for (var B = E[v], x = [], S = 0, w = B.length; w > S; S++) + x.push(B[S].clone()); + this.faceVertexUvs[d].push(x) + } + } + } else + console.error("THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.", A) + }, + mergeMesh: function (A) { + A && A.isMesh ? (A.matrixAutoUpdate && A.updateMatrix(), + this.merge(A.geometry, A.matrix)) : console.error("THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.", A) + }, + mergeVertices: function () { + var A, e, t, i, o, n, r, a, s = {}, + l = [], + c = [], + h = Math.pow(10, 4); + for (t = 0, + i = this.vertices.length; i > t; t++) + A = this.vertices[t], + void 0 === s[e = Math.round(A.x * h) + "_" + Math.round(A.y * h) + "_" + Math.round(A.z * h)] ? (s[e] = t, + l.push(this.vertices[t]), + c[t] = l.length - 1) : c[t] = c[s[e]]; + var d = []; + for (t = 0, + i = this.faces.length; i > t; t++) { + (o = this.faces[t]).a = c[o.a], + o.b = c[o.b], + o.c = c[o.c], + n = [o.a, o.b, o.c]; + for (var p = 0; 3 > p; p++) + if (n[p] === n[(p + 1) % 3]) { + d.push(t); + break + } + } + for (t = d.length - 1; t >= 0; t--) { + var g = d[t]; + for (this.faces.splice(g, 1), + r = 0, + a = this.faceVertexUvs.length; a > r; r++) + this.faceVertexUvs[r].splice(g, 1) + } + var u = this.vertices.length - l.length; + return this.vertices = l, + u + }, + setFromPoints: function (A) { + this.vertices = []; + for (var e = 0, t = A.length; t > e; e++) { + var i = A[e]; + this.vertices.push(new y(i.x, i.y, i.z || 0)) + } + return this + }, + sortFacesByMaterialIndex: function () { + for (var A = this.faces, e = A.length, t = 0; e > t; t++) + A[t]._id = t; + A.sort((function (A, e) { + return A.materialIndex - e.materialIndex + })); + var i, o, n = this.faceVertexUvs[0], + r = this.faceVertexUvs[1]; + n && n.length === e && (i = []), + r && r.length === e && (o = []); + for (t = 0; e > t; t++) { + var a = A[t]._id; + i && i.push(n[a]), + o && o.push(r[a]) + } + i && (this.faceVertexUvs[0] = i), + o && (this.faceVertexUvs[1] = o) + }, + toJSON: function () { + var A = { + metadata: { + version: 4.5, + type: "Geometry", + generator: "Geometry.toJSON" + } + }; + if (A.uuid = this.uuid, + A.type = this.type, + "" !== this.name && (A.name = this.name), + void 0 !== this.parameters) { + var e = this.parameters; + for (var t in e) + void 0 !== e[t] && (A[t] = e[t]); + return A + } + for (var i = [], o = 0; this.vertices.length > o; o++) { + var n = this.vertices[o]; + i.push(n.x, n.y, n.z) + } + var r = [], + a = [], + s = {}, + l = [], + c = {}, + h = [], + d = {}; + for (o = 0; this.faces.length > o; o++) { + var p = this.faces[o], + g = void 0 !== this.faceVertexUvs[0][o], + u = p.normal.length() > 0, + f = p.vertexNormals.length > 0, + m = 1 !== p.color.r || 1 !== p.color.g || 1 !== p.color.b, + C = p.vertexColors.length > 0, + y = 0; + if (y = B(y, 0, 0), + y = B(y, 1, !0), + y = B(y, 2, !1), + y = B(y, 3, g), + y = B(y, 4, u), + y = B(y, 5, f), + y = B(y, 6, m), + y = B(y, 7, C), + r.push(y), + r.push(p.a, p.b, p.c), + r.push(p.materialIndex), + g) { + var v = this.faceVertexUvs[0][o]; + r.push(w(v[0]), w(v[1]), w(v[2])) + } + if (u && r.push(x(p.normal)), + f) { + var I = p.vertexNormals; + r.push(x(I[0]), x(I[1]), x(I[2])) + } + if (m && r.push(S(p.color)), + C) { + var E = p.vertexColors; + r.push(S(E[0]), S(E[1]), S(E[2])) + } + } + + function B(A, e, t) { + return t ? A | 1 << e : A & ~(1 << e) + } + + function x(A) { + var e = A.x.toString() + A.y.toString() + A.z.toString(); + return void 0 !== s[e] || (s[e] = a.length / 3, + a.push(A.x, A.y, A.z)), + s[e] + } + + function S(A) { + var e = A.r.toString() + A.g.toString() + A.b.toString(); + return void 0 !== c[e] || (c[e] = l.length, + l.push(A.getHex())), + c[e] + } + + function w(A) { + var e = A.x.toString() + A.y.toString(); + return void 0 !== d[e] || (d[e] = h.length / 2, + h.push(A.x, A.y)), + d[e] + } + return A.data = {}, + A.data.vertices = i, + A.data.normals = a, + l.length > 0 && (A.data.colors = l), + h.length > 0 && (A.data.uvs = [h]), + A.data.faces = r, + A + }, + clone: function () { + return (new De).copy(this) + }, + copy: function (A) { + var e, t, i, o, n, r; + this.vertices = [], + this.colors = [], + this.faces = [], + this.faceVertexUvs = [ + [] + ], + this.morphTargets = [], + this.morphNormals = [], + this.skinWeights = [], + this.skinIndices = [], + this.lineDistances = [], + this.boundingBox = null, + this.boundingSphere = null, + this.name = A.name; + var a = A.vertices; + for (e = 0, + t = a.length; t > e; e++) + this.vertices.push(a[e].clone()); + var s = A.colors; + for (e = 0, + t = s.length; t > e; e++) + this.colors.push(s[e].clone()); + var l = A.faces; + for (e = 0, + t = l.length; t > e; e++) + this.faces.push(l[e].clone()); + for (e = 0, + t = A.faceVertexUvs.length; t > e; e++) { + var c = A.faceVertexUvs[e]; + for (void 0 === this.faceVertexUvs[e] && (this.faceVertexUvs[e] = []), + i = 0, + o = c.length; o > i; i++) { + var h = c[i], + d = []; + for (n = 0, + r = h.length; r > n; n++) { + d.push(h[n].clone()) + } + this.faceVertexUvs[e].push(d) + } + } + var p = A.morphTargets; + for (e = 0, + t = p.length; t > e; e++) { + var g = {}; + if (g.name = p[e].name, + void 0 !== p[e].vertices) + for (g.vertices = [], + i = 0, + o = p[e].vertices.length; o > i; i++) + g.vertices.push(p[e].vertices[i].clone()); + if (void 0 !== p[e].normals) + for (g.normals = [], + i = 0, + o = p[e].normals.length; o > i; i++) + g.normals.push(p[e].normals[i].clone()); + this.morphTargets.push(g) + } + var u = A.morphNormals; + for (e = 0, + t = u.length; t > e; e++) { + var f = {}; + if (void 0 !== u[e].vertexNormals) + for (f.vertexNormals = [], + i = 0, + o = u[e].vertexNormals.length; o > i; i++) { + var m = u[e].vertexNormals[i], + C = {}; + C.a = m.a.clone(), + C.b = m.b.clone(), + C.c = m.c.clone(), + f.vertexNormals.push(C) + } + if (void 0 !== u[e].faceNormals) + for (f.faceNormals = [], + i = 0, + o = u[e].faceNormals.length; o > i; i++) + f.faceNormals.push(u[e].faceNormals[i].clone()); + this.morphNormals.push(f) + } + var y = A.skinWeights; + for (e = 0, + t = y.length; t > e; e++) + this.skinWeights.push(y[e].clone()); + var v = A.skinIndices; + for (e = 0, + t = v.length; t > e; e++) + this.skinIndices.push(v[e].clone()); + var I = A.lineDistances; + for (e = 0, + t = I.length; t > e; e++) + this.lineDistances.push(I[e]); + var E = A.boundingBox; + null !== E && (this.boundingBox = E.clone()); + var B = A.boundingSphere; + return null !== B && (this.boundingSphere = B.clone()), + this.elementsNeedUpdate = A.elementsNeedUpdate, + this.verticesNeedUpdate = A.verticesNeedUpdate, + this.uvsNeedUpdate = A.uvsNeedUpdate, + this.normalsNeedUpdate = A.normalsNeedUpdate, + this.colorsNeedUpdate = A.colorsNeedUpdate, + this.lineDistancesNeedUpdate = A.lineDistancesNeedUpdate, + this.groupsNeedUpdate = A.groupsNeedUpdate, + this + }, + dispose: function () { + this.dispatchEvent({ + type: "dispose" + }) + } + }); + class Le extends De { + constructor(A, e, t, i, o, n) { + super(), + this.type = "BoxGeometry", + this.parameters = { + width: A, + height: e, + depth: t, + widthSegments: i, + heightSegments: o, + depthSegments: n + }, + this.fromBufferGeometry(new Ne(A, e, t, i, o, n)), + this.mergeVertices() + } + } + class Ne extends he { + constructor(A, e, t, i, o, n) { + super(), + this.type = "BoxBufferGeometry", + this.parameters = { + width: A, + height: e, + depth: t, + widthSegments: i, + heightSegments: o, + depthSegments: n + }; + var r = this; + A = A || 1, + e = e || 1, + t = t || 1, + i = Math.floor(i) || 1, + o = Math.floor(o) || 1, + n = Math.floor(n) || 1; + var a = [], + s = [], + l = [], + c = [], + h = 0, + d = 0; + + function p(A, e, t, i, o, n, p, g, u, f, m) { + var C, v, I = n / u, + E = p / f, + B = n / 2, + x = p / 2, + S = g / 2, + w = u + 1, + M = f + 1, + b = 0, + U = 0, + F = new y; + for (v = 0; M > v; v++) { + var K = v * E - x; + for (C = 0; w > C; C++) { + F[A] = (C * I - B) * i, + F[e] = K * o, + F[t] = S, + s.push(F.x, F.y, F.z), + F[A] = 0, + F[e] = 0, + F[t] = g > 0 ? 1 : -1, + l.push(F.x, F.y, F.z), + c.push(C / u), + c.push(1 - v / f), + b += 1 + } + } + for (v = 0; f > v; v++) + for (C = 0; u > C; C++) { + var Q = h + C + w * (v + 1), + R = h + (C + 1) + w * (v + 1), + T = h + (C + 1) + w * v; + a.push(h + C + w * v, Q, T), + a.push(Q, R, T), + U += 6 + } + r.addGroup(d, U, m), + d += U, + h += b + } + p("z", "y", "x", -1, -1, t, e, A, n, o, 0), + p("z", "y", "x", 1, -1, t, e, -A, n, o, 1), + p("x", "z", "y", 1, 1, A, t, e, i, n, 2), + p("x", "z", "y", 1, -1, A, t, -e, i, n, 3), + p("x", "y", "z", 1, -1, A, e, t, i, o, 4), + p("x", "y", "z", -1, -1, A, e, -t, i, o, 5), + this.setIndex(a), + this.setAttribute("position", new Ae(s, 3)), + this.setAttribute("normal", new Ae(l, 3)), + this.setAttribute("uv", new Ae(c, 2)) + } + } + + function Oe(A) { + var e = {}; + for (var t in A) + for (var i in e[t] = {}, + A[t]) { + var o = A[t][i]; + e[t][i] = o && (o.isColor || o.isMatrix3 || o.isMatrix4 || o.isVector2 || o.isVector3 || o.isVector4 || o.isTexture) ? o.clone() : Array.isArray(o) ? o.slice() : o + } + return e + } + + function Ve(A) { + for (var e = {}, t = 0; A.length > t; t++) { + var i = Oe(A[t]); + for (var o in i) + e[o] = i[o] + } + return e + } + var Ge = { + clone: Oe, + merge: Ve + }; + + function Pe(A) { + qA.call(this), + this.type = "ShaderMaterial", + this.defines = {}, + this.uniforms = {}, + this.vertexShader = "void main() {\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}", + this.fragmentShader = "void main() {\n\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}", + this.linewidth = 1, + this.wireframe = !1, + this.wireframeLinewidth = 1, + this.fog = !1, + this.lights = !1, + this.clipping = !1, + this.skinning = !1, + this.morphTargets = !1, + this.morphNormals = !1, + this.extensions = { + derivatives: !1, + fragDepth: !1, + drawBuffers: !1, + shaderTextureLOD: !1 + }, + this.defaultAttributeValues = { + color: [1, 1, 1], + uv: [0, 0], + uv2: [0, 0] + }, + this.index0AttributeName = void 0, + this.uniformsNeedUpdate = !1, + void 0 !== A && (void 0 !== A.attributes && console.error("THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead."), + this.setValues(A)) + } + + function qe() { + H.call(this), + this.type = "Camera", + this.matrixWorldInverse = new M, + this.projectionMatrix = new M, + this.projectionMatrixInverse = new M + } + + function je(A, e, t, i) { + qe.call(this), + this.type = "PerspectiveCamera", + this.fov = void 0 !== A ? A : 50, + this.zoom = 1, + this.near = void 0 !== t ? t : .1, + this.far = void 0 !== i ? i : 2e3, + this.focus = 10, + this.aspect = void 0 !== e ? e : 1, + this.view = null, + this.filmGauge = 35, + this.filmOffset = 0, + this.updateProjectionMatrix() + } + (Pe.prototype = Object.create(qA.prototype)).constructor = Pe, + Pe.prototype.isShaderMaterial = !0, + Pe.prototype.copy = function (A) { + return qA.prototype.copy.call(this, A), + this.fragmentShader = A.fragmentShader, + this.vertexShader = A.vertexShader, + this.uniforms = Oe(A.uniforms), + this.defines = Object.assign({}, A.defines), + this.wireframe = A.wireframe, + this.wireframeLinewidth = A.wireframeLinewidth, + this.lights = A.lights, + this.clipping = A.clipping, + this.skinning = A.skinning, + this.morphTargets = A.morphTargets, + this.morphNormals = A.morphNormals, + this.extensions = A.extensions, + this + }, + Pe.prototype.toJSON = function (A) { + var e = qA.prototype.toJSON.call(this, A); + for (var t in e.uniforms = {}, + this.uniforms) { + var i = this.uniforms[t].value; + e.uniforms[t] = i && i.isTexture ? { + type: "t", + value: i.toJSON(A).uuid + } : i && i.isColor ? { + type: "c", + value: i.getHex() + } : i && i.isVector2 ? { + type: "v2", + value: i.toArray() + } : i && i.isVector3 ? { + type: "v3", + value: i.toArray() + } : i && i.isVector4 ? { + type: "v4", + value: i.toArray() + } : i && i.isMatrix3 ? { + type: "m3", + value: i.toArray() + } : i && i.isMatrix4 ? { + type: "m4", + value: i.toArray() + } : { + value: i + } + } + Object.keys(this.defines).length > 0 && (e.defines = this.defines), + e.vertexShader = this.vertexShader, + e.fragmentShader = this.fragmentShader; + var o = {}; + for (var n in this.extensions) + !0 === this.extensions[n] && (o[n] = !0); + return Object.keys(o).length > 0 && (e.extensions = o), + e + }, + qe.prototype = Object.assign(Object.create(H.prototype), { + constructor: qe, + isCamera: !0, + copy: function (A, e) { + return H.prototype.copy.call(this, A, e), + this.matrixWorldInverse.copy(A.matrixWorldInverse), + this.projectionMatrix.copy(A.projectionMatrix), + this.projectionMatrixInverse.copy(A.projectionMatrixInverse), + this + }, + getWorldDirection: function (A) { + void 0 === A && (console.warn("THREE.Camera: .getWorldDirection() target is now required"), + A = new y), + this.updateMatrixWorld(!0); + var e = this.matrixWorld.elements; + return A.set(-e[8], -e[9], -e[10]).normalize() + }, + updateMatrixWorld: function (A) { + H.prototype.updateMatrixWorld.call(this, A), + this.matrixWorldInverse.getInverse(this.matrixWorld) + }, + updateWorldMatrix: function (A, e) { + H.prototype.updateWorldMatrix.call(this, A, e), + this.matrixWorldInverse.getInverse(this.matrixWorld) + }, + clone: function () { + return (new this.constructor).copy(this) + } + }), + je.prototype = Object.assign(Object.create(qe.prototype), { + constructor: je, + isPerspectiveCamera: !0, + copy: function (A, e) { + return qe.prototype.copy.call(this, A, e), + this.fov = A.fov, + this.zoom = A.zoom, + this.near = A.near, + this.far = A.far, + this.focus = A.focus, + this.aspect = A.aspect, + this.view = null === A.view ? null : Object.assign({}, A.view), + this.filmGauge = A.filmGauge, + this.filmOffset = A.filmOffset, + this + }, + setFocalLength: function (A) { + var e = .5 * this.getFilmHeight() / A; + this.fov = 2 * a.RAD2DEG * Math.atan(e), + this.updateProjectionMatrix() + }, + getFocalLength: function () { + var A = Math.tan(.5 * a.DEG2RAD * this.fov); + return .5 * this.getFilmHeight() / A + }, + getEffectiveFOV: function () { + return 2 * a.RAD2DEG * Math.atan(Math.tan(.5 * a.DEG2RAD * this.fov) / this.zoom) + }, + getFilmWidth: function () { + return this.filmGauge * Math.min(this.aspect, 1) + }, + getFilmHeight: function () { + return this.filmGauge / Math.max(this.aspect, 1) + }, + setViewOffset: function (A, e, t, i, o, n) { + this.aspect = A / e, + null === this.view && (this.view = { + enabled: !0, + fullWidth: 1, + fullHeight: 1, + offsetX: 0, + offsetY: 0, + width: 1, + height: 1 + }), + this.view.enabled = !0, + this.view.fullWidth = A, + this.view.fullHeight = e, + this.view.offsetX = t, + this.view.offsetY = i, + this.view.width = o, + this.view.height = n, + this.updateProjectionMatrix() + }, + clearViewOffset: function () { + null !== this.view && (this.view.enabled = !1), + this.updateProjectionMatrix() + }, + updateProjectionMatrix: function () { + var A = this.near, + e = A * Math.tan(.5 * a.DEG2RAD * this.fov) / this.zoom, + t = 2 * e, + i = this.aspect * t, + o = -.5 * i, + n = this.view; + if (null !== this.view && this.view.enabled) { + var r = n.fullWidth, + s = n.fullHeight; + o += n.offsetX * i / r, + e -= n.offsetY * t / s, + i *= n.width / r, + t *= n.height / s + } + var l = this.filmOffset; + 0 !== l && (o += A * l / this.getFilmWidth()), + this.projectionMatrix.makePerspective(o, o + i, e, e - t, A, this.far), + this.projectionMatrixInverse.getInverse(this.projectionMatrix) + }, + toJSON: function (A) { + var e = H.prototype.toJSON.call(this, A); + return e.object.fov = this.fov, + e.object.zoom = this.zoom, + e.object.near = this.near, + e.object.far = this.far, + e.object.focus = this.focus, + e.object.aspect = this.aspect, + null !== this.view && (e.object.view = Object.assign({}, this.view)), + e.object.filmGauge = this.filmGauge, + e.object.filmOffset = this.filmOffset, + e + } + }); + + function He(A, e, t, i) { + H.call(this), + this.type = "CubeCamera"; + var o = new je(90, 1, A, e); + o.up.set(0, -1, 0), + o.lookAt(new y(1, 0, 0)), + this.add(o); + var n = new je(90, 1, A, e); + n.up.set(0, -1, 0), + n.lookAt(new y(-1, 0, 0)), + this.add(n); + var r = new je(90, 1, A, e); + r.up.set(0, 0, 1), + r.lookAt(new y(0, 1, 0)), + this.add(r); + var a = new je(90, 1, A, e); + a.up.set(0, 0, -1), + a.lookAt(new y(0, -1, 0)), + this.add(a); + var s = new je(90, 1, A, e); + s.up.set(0, -1, 0), + s.lookAt(new y(0, 0, 1)), + this.add(s); + var l = new je(90, 1, A, e); + l.up.set(0, -1, 0), + l.lookAt(new y(0, 0, -1)), + this.add(l), + this.renderTarget = new Ye(t, i = i || { + format: 1022, + magFilter: 1006, + minFilter: 1006 + }), + this.renderTarget.texture.name = "CubeCamera", + this.update = function (A, e) { + null === this.parent && this.updateMatrixWorld(); + var t = A.getRenderTarget(), + i = this.renderTarget, + c = i.texture.generateMipmaps; + i.texture.generateMipmaps = !1, + A.setRenderTarget(i, 0), + A.render(e, o), + A.setRenderTarget(i, 1), + A.render(e, n), + A.setRenderTarget(i, 2), + A.render(e, r), + A.setRenderTarget(i, 3), + A.render(e, a), + A.setRenderTarget(i, 4), + A.render(e, s), + i.texture.generateMipmaps = c, + A.setRenderTarget(i, 5), + A.render(e, l), + A.setRenderTarget(t) + }, + this.clear = function (A, e, t, i) { + for (var o = A.getRenderTarget(), n = this.renderTarget, r = 0; 6 > r; r++) + A.setRenderTarget(n, r), + A.clear(e, t, i); + A.setRenderTarget(o) + } + } + + function Ye(A, e, t) { + Number.isInteger(e) && (console.warn("THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )"), + e = t), + g.call(this, A, A, e) + } + + function We(A, e, t, i, o, n, r, a, s, l, c, h) { + d.call(this, null, n, r, a, s, l, i, o, c, h), + this.image = { + data: A || null, + width: e || 1, + height: t || 1 + }, + this.magFilter = void 0 !== s ? s : 1003, + this.minFilter = void 0 !== l ? l : 1003, + this.generateMipmaps = !1, + this.flipY = !1, + this.unpackAlignment = 1, + this.needsUpdate = !0 + } + (He.prototype = Object.create(H.prototype)).constructor = He, + (Ye.prototype = Object.create(g.prototype)).constructor = Ye, + Ye.prototype.isWebGLCubeRenderTarget = !0, + Ye.prototype.fromEquirectangularTexture = function (A, e) { + this.texture.type = e.type, + this.texture.format = e.format, + this.texture.encoding = e.encoding; + var t = new Y, + i = { + uniforms: { + tEquirect: { + value: null + } + }, + vertexShader: ["varying vec3 vWorldDirection;", "vec3 transformDirection( in vec3 dir, in mat4 matrix ) {", "\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );", "}", "void main() {", "\tvWorldDirection = transformDirection( position, modelMatrix );", "\t#include ", "\t#include ", "}"].join("\n"), + fragmentShader: ["uniform sampler2D tEquirect;", "varying vec3 vWorldDirection;", "#define RECIPROCAL_PI 0.31830988618", "#define RECIPROCAL_PI2 0.15915494", "void main() {", "\tvec3 direction = normalize( vWorldDirection );", "\tvec2 sampleUV;", "\tsampleUV.y = asin( clamp( direction.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;", "\tsampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;", "\tgl_FragColor = texture2D( tEquirect, sampleUV );", "}"].join("\n") + }, + o = new Pe({ + type: "CubemapFromEquirect", + uniforms: Oe(i.uniforms), + vertexShader: i.vertexShader, + fragmentShader: i.fragmentShader, + side: 1, + blending: 0 + }); + o.uniforms.tEquirect.value = e; + var n = new Ue(new Ne(5, 5, 5), o); + t.add(n); + var r = new He(1, 10, 1); + return r.renderTarget = this, + r.renderTarget.texture.name = "CubeCameraTexture", + r.update(A, t), + n.geometry.dispose(), + n.material.dispose(), + this + }, + (We.prototype = Object.create(d.prototype)).constructor = We, + We.prototype.isDataTexture = !0; + var Je = new cA, + ze = new y; + + function Ze(A, e, t, i, o, n) { + this.planes = [void 0 !== A ? A : new EA, void 0 !== e ? e : new EA, void 0 !== t ? t : new EA, void 0 !== i ? i : new EA, void 0 !== o ? o : new EA, void 0 !== n ? n : new EA] + } + Object.assign(Ze.prototype, { + set: function (A, e, t, i, o, n) { + var r = this.planes; + return r[0].copy(A), + r[1].copy(e), + r[2].copy(t), + r[3].copy(i), + r[4].copy(o), + r[5].copy(n), + this + }, + clone: function () { + return (new this.constructor).copy(this) + }, + copy: function (A) { + for (var e = this.planes, t = 0; 6 > t; t++) + e[t].copy(A.planes[t]); + return this + }, + setFromProjectionMatrix: function (A) { + var e = this.planes, + t = A.elements, + i = t[0], + o = t[1], + n = t[2], + r = t[3], + a = t[4], + s = t[5], + l = t[6], + c = t[7], + h = t[8], + d = t[9], + p = t[10], + g = t[11], + u = t[12], + f = t[13], + m = t[14], + C = t[15]; + return e[0].setComponents(r - i, c - a, g - h, C - u).normalize(), + e[1].setComponents(r + i, c + a, g + h, C + u).normalize(), + e[2].setComponents(r + o, c + s, g + d, C + f).normalize(), + e[3].setComponents(r - o, c - s, g - d, C - f).normalize(), + e[4].setComponents(r - n, c - l, g - p, C - m).normalize(), + e[5].setComponents(r + n, c + l, g + p, C + m).normalize(), + this + }, + intersectsObject: function (A) { + var e = A.geometry; + return null === e.boundingSphere && e.computeBoundingSphere(), + Je.copy(e.boundingSphere).applyMatrix4(A.matrixWorld), + this.intersectsSphere(Je) + }, + intersectsSprite: function (A) { + return Je.center.set(0, 0, 0), + Je.radius = .7071067811865476, + Je.applyMatrix4(A.matrixWorld), + this.intersectsSphere(Je) + }, + intersectsSphere: function (A) { + for (var e = this.planes, t = A.center, i = -A.radius, o = 0; 6 > o; o++) { + if (i > e[o].distanceToPoint(t)) + return !1 + } + return !0 + }, + intersectsBox: function (A) { + for (var e = this.planes, t = 0; 6 > t; t++) { + var i = e[t]; + if (ze.x = i.normal.x > 0 ? A.max.x : A.min.x, + ze.y = i.normal.y > 0 ? A.max.y : A.min.y, + ze.z = i.normal.z > 0 ? A.max.z : A.min.z, + 0 > i.distanceToPoint(ze)) + return !1 + } + return !0 + }, + containsPoint: function (A) { + for (var e = this.planes, t = 0; 6 > t; t++) + if (0 > e[t].distanceToPoint(A)) + return !1; + return !0 + } + }); + var Xe = { + common: { + diffuse: { + value: new LA(15658734) + }, + opacity: { + value: 1 + }, + map: { + value: null + }, + uvTransform: { + value: new l + }, + uv2Transform: { + value: new l + }, + alphaMap: { + value: null + } + }, + specularmap: { + specularMap: { + value: null + } + }, + envmap: { + envMap: { + value: null + }, + flipEnvMap: { + value: -1 + }, + reflectivity: { + value: 1 + }, + refractionRatio: { + value: .98 + }, + maxMipLevel: { + value: 0 + } + }, + aomap: { + aoMap: { + value: null + }, + aoMapIntensity: { + value: 1 + } + }, + lightmap: { + lightMap: { + value: null + }, + lightMapIntensity: { + value: 1 + } + }, + emissivemap: { + emissiveMap: { + value: null + } + }, + bumpmap: { + bumpMap: { + value: null + }, + bumpScale: { + value: 1 + } + }, + normalmap: { + normalMap: { + value: null + }, + normalScale: { + value: new s(1, 1) + } + }, + displacementmap: { + displacementMap: { + value: null + }, + displacementScale: { + value: 1 + }, + displacementBias: { + value: 0 + } + }, + roughnessmap: { + roughnessMap: { + value: null + } + }, + metalnessmap: { + metalnessMap: { + value: null + } + }, + gradientmap: { + gradientMap: { + value: null + } + }, + fog: { + fogDensity: { + value: 25e-5 + }, + fogNear: { + value: 1 + }, + fogFar: { + value: 2e3 + }, + fogColor: { + value: new LA(16777215) + } + }, + lights: { + ambientLightColor: { + value: [] + }, + lightProbe: { + value: [] + }, + directionalLights: { + value: [], + properties: { + direction: {}, + color: {} + } + }, + directionalLightShadows: { + value: [], + properties: { + shadowBias: {}, + shadowRadius: {}, + shadowMapSize: {} + } + }, + directionalShadowMap: { + value: [] + }, + directionalShadowMatrix: { + value: [] + }, + spotLights: { + value: [], + properties: { + color: {}, + position: {}, + direction: {}, + distance: {}, + coneCos: {}, + penumbraCos: {}, + decay: {} + } + }, + spotLightShadows: { + value: [], + properties: { + shadowBias: {}, + shadowRadius: {}, + shadowMapSize: {} + } + }, + spotShadowMap: { + value: [] + }, + spotShadowMatrix: { + value: [] + }, + pointLights: { + value: [], + properties: { + color: {}, + position: {}, + decay: {}, + distance: {} + } + }, + pointLightShadows: { + value: [], + properties: { + shadowBias: {}, + shadowRadius: {}, + shadowMapSize: {}, + shadowCameraNear: {}, + shadowCameraFar: {} + } + }, + pointShadowMap: { + value: [] + }, + pointShadowMatrix: { + value: [] + }, + hemisphereLights: { + value: [], + properties: { + direction: {}, + skyColor: {}, + groundColor: {} + } + }, + rectAreaLights: { + value: [], + properties: { + color: {}, + position: {}, + width: {}, + height: {} + } + } + }, + points: { + diffuse: { + value: new LA(15658734) + }, + opacity: { + value: 1 + }, + size: { + value: 1 + }, + scale: { + value: 1 + }, + map: { + value: null + }, + alphaMap: { + value: null + }, + uvTransform: { + value: new l + } + }, + sprite: { + diffuse: { + value: new LA(15658734) + }, + opacity: { + value: 1 + }, + center: { + value: new s(.5, .5) + }, + rotation: { + value: 0 + }, + map: { + value: null + }, + alphaMap: { + value: null + }, + uvTransform: { + value: new l + } + } + }; + + function _e() { + var A = null, + e = !1, + t = null; + + function i(o, n) { + !1 !== e && (t(o, n), + A.requestAnimationFrame(i)) + } + return { + start: function () { + !0 !== e && null !== t && (A.requestAnimationFrame(i), + e = !0) + }, + stop: function () { + e = !1 + }, + setAnimationLoop: function (A) { + t = A + }, + setContext: function (e) { + A = e + } + } + } + + function $e(A, e) { + var t = e.isWebGL2, + i = new WeakMap; + return { + get: function (A) { + return A.isInterleavedBufferAttribute && (A = A.data), + i.get(A) + }, + remove: function (e) { + e.isInterleavedBufferAttribute && (e = e.data); + var t = i.get(e); + t && (A.deleteBuffer(t.buffer), + i.delete(e)) + }, + update: function (e, o) { + e.isInterleavedBufferAttribute && (e = e.data); + var n = i.get(e); + void 0 === n ? i.set(e, function (e, t) { + var i = e.array, + o = e.usage, + n = A.createBuffer(); + A.bindBuffer(t, n), + A.bufferData(t, i, o), + e.onUploadCallback(); + var r = 5126; + return i instanceof Float32Array ? r = 5126 : i instanceof Float64Array ? console.warn("THREE.WebGLAttributes: Unsupported data buffer format: Float64Array.") : i instanceof Uint16Array ? r = 5123 : i instanceof Int16Array ? r = 5122 : i instanceof Uint32Array ? r = 5125 : i instanceof Int32Array ? r = 5124 : i instanceof Int8Array ? r = 5120 : i instanceof Uint8Array && (r = 5121), { + buffer: n, + type: r, + bytesPerElement: i.BYTES_PER_ELEMENT, + version: e.version + } + }(e, o)) : e.version > n.version && (! function (e, i, o) { + var n = i.array, + r = i.updateRange; + A.bindBuffer(o, e), + -1 === r.count ? A.bufferSubData(o, 0, n) : (t ? A.bufferSubData(o, r.offset * n.BYTES_PER_ELEMENT, n, r.offset, r.count) : A.bufferSubData(o, r.offset * n.BYTES_PER_ELEMENT, n.subarray(r.offset, r.offset + r.count)), + r.count = -1) + }(n.buffer, e, o), + n.version = e.version) + } + } + } + + function At(A, e, t, i) { + De.call(this), + this.type = "PlaneGeometry", + this.parameters = { + width: A, + height: e, + widthSegments: t, + heightSegments: i + }, + this.fromBufferGeometry(new et(A, e, t, i)), + this.mergeVertices() + } + + function et(A, e, t, i) { + he.call(this), + this.type = "PlaneBufferGeometry", + this.parameters = { + width: A, + height: e, + widthSegments: t, + heightSegments: i + }; + var o, n, r = (A = A || 1) / 2, + a = (e = e || 1) / 2, + s = Math.floor(t) || 1, + l = Math.floor(i) || 1, + c = s + 1, + h = l + 1, + d = A / s, + p = e / l, + g = [], + u = [], + f = [], + m = []; + for (n = 0; h > n; n++) { + var C = n * p - a; + for (o = 0; c > o; o++) { + u.push(o * d - r, -C, 0), + f.push(0, 0, 1), + m.push(o / s), + m.push(1 - n / l) + } + } + for (n = 0; l > n; n++) + for (o = 0; s > o; o++) { + var y = o + c * (n + 1), + v = o + 1 + c * (n + 1), + I = o + 1 + c * n; + g.push(o + c * n, y, I), + g.push(y, v, I) + } + this.setIndex(g), + this.setAttribute("position", new Ae(u, 3)), + this.setAttribute("normal", new Ae(f, 3)), + this.setAttribute("uv", new Ae(m, 2)) + } + (At.prototype = Object.create(De.prototype)).constructor = At, + (et.prototype = Object.create(he.prototype)).constructor = et; + var tt = { + alphamap_fragment: "#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\n#endif", + alphamap_pars_fragment: "#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif", + alphatest_fragment: "#ifdef ALPHATEST\n\tif ( diffuseColor.a < ALPHATEST ) discard;\n#endif", + aomap_fragment: "#ifdef USE_AOMAP\n\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\n\treflectedLight.indirectDiffuse *= ambientOcclusion;\n\t#if defined( USE_ENVMAP ) && defined( STANDARD )\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\n\t#endif\n#endif", + aomap_pars_fragment: "#ifdef USE_AOMAP\n\tuniform sampler2D aoMap;\n\tuniform float aoMapIntensity;\n#endif", + begin_vertex: "vec3 transformed = vec3( position );", + beginnormal_vertex: "vec3 objectNormal = vec3( normal );\n#ifdef USE_TANGENT\n\tvec3 objectTangent = vec3( tangent.xyz );\n#endif", + bsdfs: "vec2 integrateSpecularBRDF( const in float dotNV, const in float roughness ) {\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\treturn vec2( -1.04, 1.04 ) * a004 + r.zw;\n}\nfloat punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\tif( cutoffDistance > 0.0 ) {\n\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t}\n\treturn distanceFalloff;\n#else\n\tif( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\t}\n\treturn 1.0;\n#endif\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nvec3 F_Schlick_RoughnessDependent( const in vec3 F0, const in float dotNV, const in float roughness ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotNV - 6.98316 ) * dotNV );\n\tvec3 Fr = max( vec3( 1.0 - roughness ), F0 ) - F0;\n\treturn Fr * fresnel + F0;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\treturn 1.0 / ( gl * gv );\n}\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + viewDir );\n\tfloat dotNL = saturate( dot( normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( G * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\nvec3 BRDF_Specular_GGX_Environment( const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\treturn specularColor * brdf.x + brdf.y;\n}\nvoid BRDF_Specular_Multiscattering_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tvec3 F = F_Schlick_RoughnessDependent( specularColor, dotNV, roughness );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\tvec3 FssEss = F * brdf.x + brdf.y;\n\tfloat Ess = brdf.x + brdf.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie(float roughness, float NoH) {\n\tfloat invAlpha = 1.0 / roughness;\n\tfloat cos2h = NoH * NoH;\n\tfloat sin2h = max(1.0 - cos2h, 0.0078125);\treturn (2.0 + invAlpha) * pow(sin2h, invAlpha * 0.5) / (2.0 * PI);\n}\nfloat V_Neubelt(float NoV, float NoL) {\n\treturn saturate(1.0 / (4.0 * (NoL + NoV - NoL * NoV)));\n}\nvec3 BRDF_Specular_Sheen( const in float roughness, const in vec3 L, const in GeometricContext geometry, vec3 specularColor ) {\n\tvec3 N = geometry.normal;\n\tvec3 V = geometry.viewDir;\n\tvec3 H = normalize( V + L );\n\tfloat dotNH = saturate( dot( N, H ) );\n\treturn specularColor * D_Charlie( roughness, dotNH ) * V_Neubelt( dot(N, V), dot(N, L) );\n}\n#endif", + bumpmap_pars_fragment: "#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n\t\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 );\n\t\tfDet *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif", + clipping_planes_fragment: "#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#pragma unroll_loop_end\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\tif ( clipped ) discard;\n\t#endif\n#endif", + clipping_planes_pars_fragment: "#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif", + clipping_planes_pars_vertex: "#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif", + clipping_planes_vertex: "#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif", + color_fragment: "#ifdef USE_COLOR\n\tdiffuseColor.rgb *= vColor;\n#endif", + color_pars_fragment: "#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif", + color_pars_vertex: "#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif", + color_vertex: "#ifdef USE_COLOR\n\tvColor.xyz = color.xyz;\n#endif", + common: "#define PI 3.14159265359\n#define PI2 6.28318530718\n#define PI_HALF 1.5707963267949\n#define RECIPROCAL_PI 0.31830988618\n#define RECIPROCAL_PI2 0.15915494\n#define LOG2 1.442695\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement(a) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract(sin(sn) * c);\n}\n#ifdef HIGH_PRECISION\n\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n\tfloat max3( vec3 v ) { return max( max( v.x, v.y ), v.z ); }\n\tfloat precisionSafeLength( vec3 v ) {\n\t\tfloat maxComponent = max3( abs( v ) );\n\t\treturn length( v / maxComponent ) * maxComponent;\n\t}\n#endif\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n#ifdef CLEARCOAT\n\tvec3 clearcoatNormal;\n#endif\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\n\treturn - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat linearToRelativeLuminance( const in vec3 color ) {\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\treturn dot( weights, color.rgb );\n}\nbool isPerspectiveMatrix( mat4 m ) {\n return m[ 2 ][ 3 ] == - 1.0;\n}", + cube_uv_reflection_fragment: "#ifdef ENVMAP_TYPE_CUBE_UV\n#define cubeUV_maxMipLevel 8.0\n#define cubeUV_minMipLevel 4.0\n#define cubeUV_maxTileSize 256.0\n#define cubeUV_minTileSize 16.0\nfloat getFace(vec3 direction) {\n vec3 absDirection = abs(direction);\n float face = -1.0;\n if (absDirection.x > absDirection.z) {\n if (absDirection.x > absDirection.y)\n face = direction.x > 0.0 ? 0.0 : 3.0;\n else\n face = direction.y > 0.0 ? 1.0 : 4.0;\n } else {\n if (absDirection.z > absDirection.y)\n face = direction.z > 0.0 ? 2.0 : 5.0;\n else\n face = direction.y > 0.0 ? 1.0 : 4.0;\n }\n return face;\n}\nvec2 getUV(vec3 direction, float face) {\n vec2 uv;\n if (face == 0.0) {\n uv = vec2(-direction.z, direction.y) / abs(direction.x);\n } else if (face == 1.0) {\n uv = vec2(direction.x, -direction.z) / abs(direction.y);\n } else if (face == 2.0) {\n uv = direction.xy / abs(direction.z);\n } else if (face == 3.0) {\n uv = vec2(direction.z, direction.y) / abs(direction.x);\n } else if (face == 4.0) {\n uv = direction.xz / abs(direction.y);\n } else {\n uv = vec2(-direction.x, direction.y) / abs(direction.z);\n }\n return 0.5 * (uv + 1.0);\n}\nvec3 bilinearCubeUV(sampler2D envMap, vec3 direction, float mipInt) {\n float face = getFace(direction);\n float filterInt = max(cubeUV_minMipLevel - mipInt, 0.0);\n mipInt = max(mipInt, cubeUV_minMipLevel);\n float faceSize = exp2(mipInt);\n float texelSize = 1.0 / (3.0 * cubeUV_maxTileSize);\n vec2 uv = getUV(direction, face) * (faceSize - 1.0);\n vec2 f = fract(uv);\n uv += 0.5 - f;\n if (face > 2.0) {\n uv.y += faceSize;\n face -= 3.0;\n }\n uv.x += face * faceSize;\n if(mipInt < cubeUV_maxMipLevel){\n uv.y += 2.0 * cubeUV_maxTileSize;\n }\n uv.y += filterInt * 2.0 * cubeUV_minTileSize;\n uv.x += 3.0 * max(0.0, cubeUV_maxTileSize - 2.0 * faceSize);\n uv *= texelSize;\n vec3 tl = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n uv.x += texelSize;\n vec3 tr = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n uv.y += texelSize;\n vec3 br = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n uv.x -= texelSize;\n vec3 bl = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n vec3 tm = mix(tl, tr, f.x);\n vec3 bm = mix(bl, br, f.x);\n return mix(tm, bm, f.y);\n}\n#define r0 1.0\n#define v0 0.339\n#define m0 -2.0\n#define r1 0.8\n#define v1 0.276\n#define m1 -1.0\n#define r4 0.4\n#define v4 0.046\n#define m4 2.0\n#define r5 0.305\n#define v5 0.016\n#define m5 3.0\n#define r6 0.21\n#define v6 0.0038\n#define m6 4.0\nfloat roughnessToMip(float roughness) {\n float mip = 0.0;\n if (roughness >= r1) {\n mip = (r0 - roughness) * (m1 - m0) / (r0 - r1) + m0;\n } else if (roughness >= r4) {\n mip = (r1 - roughness) * (m4 - m1) / (r1 - r4) + m1;\n } else if (roughness >= r5) {\n mip = (r4 - roughness) * (m5 - m4) / (r4 - r5) + m4;\n } else if (roughness >= r6) {\n mip = (r5 - roughness) * (m6 - m5) / (r5 - r6) + m5;\n } else {\n mip = -2.0 * log2(1.16 * roughness); }\n return mip;\n}\nvec4 textureCubeUV(sampler2D envMap, vec3 sampleDir, float roughness) {\n float mip = clamp(roughnessToMip(roughness), m0, cubeUV_maxMipLevel);\n float mipF = fract(mip);\n float mipInt = floor(mip);\n vec3 color0 = bilinearCubeUV(envMap, sampleDir, mipInt);\n if (mipF == 0.0) {\n return vec4(color0, 1.0);\n } else {\n vec3 color1 = bilinearCubeUV(envMap, sampleDir, mipInt + 1.0);\n return vec4(mix(color0, color1, mipF), 1.0);\n }\n}\n#endif", + defaultnormal_vertex: "vec3 transformedNormal = objectNormal;\n#ifdef USE_INSTANCING\n\tmat3 m = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\n\ttransformedNormal = m * transformedNormal;\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif", + displacementmap_pars_vertex: "#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif", + displacementmap_vertex: "#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\n#endif", + emissivemap_fragment: "#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif", + emissivemap_pars_fragment: "#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif", + encodings_fragment: "gl_FragColor = linearToOutputTexel( gl_FragColor );", + encodings_pars_fragment: "\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\n\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract( Le );\n\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\n\treturn vec4( max( vRGB, 0.0 ), 1.0 );\n}", + envmap_fragment: "#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvec3 cameraToFrag;\n\t\t\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\n\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\tvec2 sampleUV;\n\t\treflectVec = normalize( reflectVec );\n\t\tsampleUV.y = asin( clamp( reflectVec.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\t\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\tvec4 envColor = texture2D( envMap, sampleUV );\n\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\treflectVec = normalize( reflectVec );\n\t\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0, 0.0, 1.0 ) );\n\t\tvec4 envColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifndef ENVMAP_TYPE_CUBE_UV\n\t\tenvColor = envMapTexelToLinear( envColor );\n\t#endif\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif", + envmap_common_pars_fragment: "#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\tuniform int maxMipLevel;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\t\n#endif", + envmap_pars_fragment: "#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif", + envmap_pars_vertex: "#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif", + envmap_physical_pars_fragment: "#if defined( USE_ENVMAP )\n\t#ifdef ENVMAP_MODE_REFRACTION\n\t\tuniform float refractionRatio;\n\t#endif\n\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\n\t\t#else\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\t\t#endif\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t}\n\tfloat getSpecularMIPLevel( const in float roughness, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat sigma = PI * roughness * roughness / ( 1.0 + roughness );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar + log2( sigma );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t vec3 reflectVec = reflect( -viewDir, normal );\n\t\t reflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t#else\n\t\t vec3 reflectVec = refract( -viewDir, normal, refractionRatio );\n\t\t#endif\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( roughness, maxMIPLevel );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\n\t\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\t\tvec2 sampleUV;\n\t\t\tsampleUV.y = asin( clamp( reflectVec.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\t\t\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, sampleUV, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = texture2D( envMap, sampleUV, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\t\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0,0.0,1.0 ) );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#endif\n\t\treturn envMapColor.rgb * envMapIntensity;\n\t}\n#endif", + envmap_vertex: "#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex;\n\t\tif ( isOrthographic ) { \n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif", + fog_vertex: "#ifdef USE_FOG\n\tfogDepth = -mvPosition.z;\n#endif", + fog_pars_vertex: "#ifdef USE_FOG\n\tvarying float fogDepth;\n#endif", + fog_fragment: "#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif", + fog_pars_fragment: "#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float fogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif", + gradientmap_pars_fragment: "#ifdef USE_GRADIENTMAP\n\tuniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\tfloat dotNL = dot( normal, lightDirection );\n\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t#ifdef USE_GRADIENTMAP\n\t\treturn texture2D( gradientMap, coord ).rgb;\n\t#else\n\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t#endif\n}", + lightmap_fragment: "#ifdef USE_LIGHTMAP\n\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\treflectedLight.indirectDiffuse += PI * lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n#endif", + lightmap_pars_fragment: "#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif", + lights_lambert_vertex: "vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\nvIndirectFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n\tvIndirectBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\n#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif", + lights_pars_begin: "uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\nuniform vec3 lightProbe[ 9 ];\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n\treturn result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in GeometricContext geometry ) {\n\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treturn irradiance;\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tdirectLight.color = directionalLight.color;\n\t\tdirectLight.direction = directionalLight.direction;\n\t\tdirectLight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tdirectLight.color = pointLight.color;\n\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n\t\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\n\t\tif ( angleCos > spotLight.coneCos ) {\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\t\tdirectLight.color = spotLight.color;\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tdirectLight.visible = true;\n\t\t} else {\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tirradiance *= PI;\n\t\t#endif\n\t\treturn irradiance;\n\t}\n#endif", + lights_toon_fragment: "ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;", + lights_toon_pars_fragment: "varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct ToonMaterial {\n\tvec3\tdiffuseColor;\n\tvec3\tspecularColor;\n\tfloat\tspecularShininess;\n\tfloat\tspecularStrength;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon\n#define Material_LightProbeLOD( material )\t(0)", + lights_phong_fragment: "BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;", + lights_phong_pars_fragment: "varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct BlinnPhongMaterial {\n\tvec3\tdiffuseColor;\n\tvec3\tspecularColor;\n\tfloat\tspecularShininess;\n\tfloat\tspecularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)", + lights_physical_fragment: "PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.specularRoughness = max( roughnessFactor, 0.0525 );material.specularRoughness += geometryRoughness;\nmaterial.specularRoughness = min( material.specularRoughness, 1.0 );\n#ifdef REFLECTIVITY\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#endif\n#ifdef CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;\n\t#endif\n\tmaterial.clearcoat = saturate( material.clearcoat );\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n\tmaterial.clearcoatRoughness += geometryRoughness;\n\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_SHEEN\n\tmaterial.sheenColor = sheen;\n#endif", + lights_physical_pars_fragment: "struct PhysicalMaterial {\n\tvec3\tdiffuseColor;\n\tfloat\tspecularRoughness;\n\tvec3\tspecularColor;\n#ifdef CLEARCOAT\n\tfloat clearcoat;\n\tfloat clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tvec3 sheenColor;\n#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearcoatDHRApprox( const in float roughness, const in float dotNL ) {\n\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.specularRoughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3( 0, 1, 0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNL = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = ccDotNL * directLight.color;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tccIrradiance *= PI;\n\t\t#endif\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t\treflectedLight.directSpecular += ccIrradiance * material.clearcoat * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_Sheen(\n\t\t\tmaterial.specularRoughness,\n\t\t\tdirectLight.direction,\n\t\t\tgeometry,\n\t\t\tmaterial.sheenColor\n\t\t);\n\t#else\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.normal, material.specularColor, material.specularRoughness);\n\t#endif\n\treflectedLight.directDiffuse += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNV = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular += clearcoatRadiance * material.clearcoat * BRDF_Specular_GGX_Environment( geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t\tfloat ccDotNL = ccDotNV;\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\tfloat clearcoatInv = 1.0 - clearcoatDHR;\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\tBRDF_Specular_Multiscattering_Environment( geometry, material.specularColor, material.specularRoughness, singleScattering, multiScattering );\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\n\treflectedLight.indirectSpecular += clearcoatInv * radiance * singleScattering;\n\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}", + lights_fragment_begin: "\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n#ifdef CLEARCOAT\n\tgeometry.clearcoatNormal = clearcoatNormal;\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\tirradiance += getLightProbeIrradiance( lightProbe, geometry );\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n#endif", + lights_fragment_maps: "#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.normal, material.specularRoughness, maxMipLevel );\n\t#ifdef CLEARCOAT\n\t\tclearcoatRadiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness, maxMipLevel );\n\t#endif\n#endif", + lights_fragment_end: "#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\n#endif", + logdepthbuf_fragment: "#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif", + logdepthbuf_pars_fragment: "#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif", + logdepthbuf_pars_vertex: "#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t\tvarying float vIsPerspective;\n\t#else\n\t\tuniform float logDepthBufFC;\n\t#endif\n#endif", + logdepthbuf_vertex: "#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n\t#else\n\t\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\n\t\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\t\tgl_Position.z *= gl_Position.w;\n\t\t}\n\t#endif\n#endif", + map_fragment: "#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif", + map_pars_fragment: "#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif", + map_particle_fragment: "#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n#endif\n#ifdef USE_MAP\n\tvec4 mapTexel = texture2D( map, uv );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif", + map_particle_pars_fragment: "#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tuniform mat3 uvTransform;\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif", + metalnessmap_fragment: "float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif", + metalnessmap_pars_fragment: "#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif", + morphnormal_vertex: "#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\n\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\n\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\n\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\n#endif", + morphtarget_pars_vertex: "#ifdef USE_MORPHTARGETS\n\tuniform float morphTargetBaseInfluence;\n\t#ifndef USE_MORPHNORMALS\n\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif", + morphtarget_vertex: "#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\n\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\n\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\n\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\n\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\n\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\n\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\n\t#endif\n#endif", + normal_fragment_begin: "#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\t#ifdef USE_TANGENT\n\t\tvec3 tangent = normalize( vTangent );\n\t\tvec3 bitangent = normalize( vBitangent );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\ttangent = tangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t\tbitangent = bitangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t#endif\n\t\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tmat3 vTBN = mat3( tangent, bitangent, normal );\n\t\t#endif\n\t#endif\n#endif\nvec3 geometryNormal = normal;", + normal_fragment_maps: "#ifdef OBJECTSPACE_NORMALMAP\n\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( TANGENTSPACE_NORMALMAP )\n\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\t#ifdef USE_TANGENT\n\t\tnormal = normalize( vTBN * mapN );\n\t#else\n\t\tnormal = perturbNormal2Arb( -vViewPosition, normal, mapN );\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif", + normalmap_pars_fragment: "#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN ) {\n\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tfloat scale = sign( st1.t * st0.s - st0.t * st1.s );\n\t\tvec3 S = normalize( ( q0 * st1.t - q1 * st0.t ) * scale );\n\t\tvec3 T = normalize( ( - q0 * st1.s + q1 * st0.s ) * scale );\n\t\tvec3 N = normalize( surf_norm );\n\t\tmat3 tsn = mat3( S, T, N );\n\t\tmapN.xy *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\treturn normalize( tsn * mapN );\n\t}\n#endif", + clearcoat_normal_fragment_begin: "#ifdef CLEARCOAT\n\tvec3 clearcoatNormal = geometryNormal;\n#endif", + clearcoat_normal_fragment_maps: "#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\t#ifdef USE_TANGENT\n\t\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\n\t#else\n\t\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN );\n\t#endif\n#endif", + clearcoat_pars_fragment: "#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif", + packing: "vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nvec4 pack2HalfToRGBA( vec2 v ) {\n\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ));\n\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w);\n}\nvec2 unpackRGBATo2Half( vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}", + premultiplied_alpha_fragment: "#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif", + project_vertex: "vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;", + dithering_fragment: "#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif", + dithering_pars_fragment: "#ifdef DITHERING\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif", + roughnessmap_fragment: "float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif", + roughnessmap_pars_fragment: "#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif", + shadowmap_pars_fragment: "#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n\t\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\n\t}\n\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n\t\tfloat occlusion = 1.0;\n\t\tvec2 distribution = texture2DDistribution( shadow, uv );\n\t\tfloat hard_shadow = step( compare , distribution.x );\n\t\tif (hard_shadow != 1.0 ) {\n\t\t\tfloat distance = compare - distribution.x ;\n\t\t\tfloat variance = max( 0.00000, distribution.y * distribution.y );\n\t\t\tfloat softness_probability = variance / (variance + distance * distance );\t\t\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\t\t\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n\t\t}\n\t\treturn occlusion;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif", + shadowmap_pars_vertex: "#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n#endif", + shadowmap_vertex: "#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * worldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * worldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * worldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n#endif", + shadowmask_pars_fragment: "float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tdirectionalLight = directionalLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tspotLight = spotLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tpointLight = pointLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#endif\n\treturn shadow;\n}", + skinbase_vertex: "#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif", + skinning_pars_vertex: "#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform highp sampler2D boneTexture;\n\t\tuniform int boneTextureSize;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif", + skinning_vertex: "#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif", + skinnormal_vertex: "#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif", + specularmap_fragment: "float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif", + specularmap_pars_fragment: "#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif", + tonemapping_fragment: "#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif", + tonemapping_pars_fragment: "#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nuniform float toneMappingWhitePoint;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\n#define Uncharted2Helper( x ) max( ( ( x * ( 0.15 * x + 0.10 * 0.50 ) + 0.20 * 0.02 ) / ( x * ( 0.15 * x + 0.50 ) + 0.20 * 0.30 ) ) - 0.02 / 0.30, vec3( 0.0 ) )\nvec3 Uncharted2ToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( Uncharted2Helper( color ) / Uncharted2Helper( vec3( toneMappingWhitePoint ) ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( ( color * ( 2.51 * color + 0.03 ) ) / ( color * ( 2.43 * color + 0.59 ) + 0.14 ) );\n}", + uv_pars_fragment: "#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\n\tvarying vec2 vUv;\n#endif", + uv_pars_vertex: "#ifdef USE_UV\n\t#ifdef UVS_VERTEX_ONLY\n\t\tvec2 vUv;\n\t#else\n\t\tvarying vec2 vUv;\n\t#endif\n\tuniform mat3 uvTransform;\n#endif", + uv_vertex: "#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif", + uv2_pars_fragment: "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif", + uv2_pars_vertex: "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n\tuniform mat3 uv2Transform;\n#endif", + uv2_vertex: "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\n#endif", + worldpos_vertex: "#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif", + background_frag: "uniform sampler2D t2D;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}", + background_vert: "varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}", + cube_frag: "#include \nuniform float opacity;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 vReflect = vWorldDirection;\n\t#include \n\tgl_FragColor = envColor;\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}", + cube_vert: "varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}", + depth_frag: "#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\t#endif\n}", + depth_vert: "#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvHighPrecisionZW = gl_Position.zw;\n}", + distanceRGBA_frag: "#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}", + distanceRGBA_vert: "#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}", + equirect_frag: "uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV;\n\tsampleUV.y = asin( clamp( direction.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\tsampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;\n\tvec4 texColor = texture2D( tEquirect, sampleUV );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}", + equirect_vert: "varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}", + linedashed_frag: "uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}", + linedashed_vert: "uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvLineDistance = scale * lineDistance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshbasic_frag: "uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshbasic_vert: "#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_ENVMAP\n\t#include \n\t#include \n\t#include \n\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshlambert_frag: "uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\treflectedLight.indirectDiffuse = getAmbientLightIrradiance( ambientLightColor );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\n\t#else\n\t\treflectedLight.indirectDiffuse += vIndirectFront;\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshlambert_vert: "#define LAMBERT\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshmatcap_frag: "#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t\tmatcapColor = matcapTexelToLinear( matcapColor );\n\t#else\n\t\tvec4 matcapColor = vec4( 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshmatcap_vert: "#define MATCAP\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifndef FLAT_SHADED\n\t\tvNormal = normalize( transformedNormal );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n}", + meshtoon_frag: "#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshtoon_vert: "#define TOON\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}", + meshphong_frag: "#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshphong_vert: "#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshphysical_frag: "#define STANDARD\n#ifdef PHYSICAL\n\t#define REFLECTIVITY\n\t#define CLEARCOAT\n\t#define TRANSPARENCY\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef TRANSPARENCY\n\tuniform float transparency;\n#endif\n#ifdef REFLECTIVITY\n\tuniform float reflectivity;\n#endif\n#ifdef CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheen;\n#endif\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#ifdef TRANSPARENCY\n\t\tdiffuseColor.a *= saturate( 1. - transparency + linearToRelativeLuminance( reflectedLight.directSpecular + reflectedLight.indirectSpecular ) );\n\t#endif\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + meshphysical_vert: "#define STANDARD\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}", + normal_frag: "#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}", + normal_vert: "#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}", + points_frag: "uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}", + points_vert: "uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}", + shadow_frag: "uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n\t#include \n\t#include \n}", + shadow_vert: "#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", + sprite_frag: "uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n}", + sprite_vert: "uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}" + }, + it = { + basic: { + uniforms: Ve([Xe.common, Xe.specularmap, Xe.envmap, Xe.aomap, Xe.lightmap, Xe.fog]), + vertexShader: tt.meshbasic_vert, + fragmentShader: tt.meshbasic_frag + }, + lambert: { + uniforms: Ve([Xe.common, Xe.specularmap, Xe.envmap, Xe.aomap, Xe.lightmap, Xe.emissivemap, Xe.fog, Xe.lights, { + emissive: { + value: new LA(0) + } + }]), + vertexShader: tt.meshlambert_vert, + fragmentShader: tt.meshlambert_frag + }, + phong: { + uniforms: Ve([Xe.common, Xe.specularmap, Xe.envmap, Xe.aomap, Xe.lightmap, Xe.emissivemap, Xe.bumpmap, Xe.normalmap, Xe.displacementmap, Xe.fog, Xe.lights, { + emissive: { + value: new LA(0) + }, + specular: { + value: new LA(1118481) + }, + shininess: { + value: 30 + } + }]), + vertexShader: tt.meshphong_vert, + fragmentShader: tt.meshphong_frag + }, + standard: { + uniforms: Ve([Xe.common, Xe.envmap, Xe.aomap, Xe.lightmap, Xe.emissivemap, Xe.bumpmap, Xe.normalmap, Xe.displacementmap, Xe.roughnessmap, Xe.metalnessmap, Xe.fog, Xe.lights, { + emissive: { + value: new LA(0) + }, + roughness: { + value: .5 + }, + metalness: { + value: .5 + }, + envMapIntensity: { + value: 1 + } + }]), + vertexShader: tt.meshphysical_vert, + fragmentShader: tt.meshphysical_frag + }, + toon: { + uniforms: Ve([Xe.common, Xe.specularmap, Xe.aomap, Xe.lightmap, Xe.emissivemap, Xe.bumpmap, Xe.normalmap, Xe.displacementmap, Xe.gradientmap, Xe.fog, Xe.lights, { + emissive: { + value: new LA(0) + }, + specular: { + value: new LA(1118481) + }, + shininess: { + value: 30 + } + }]), + vertexShader: tt.meshtoon_vert, + fragmentShader: tt.meshtoon_frag + }, + matcap: { + uniforms: Ve([Xe.common, Xe.bumpmap, Xe.normalmap, Xe.displacementmap, Xe.fog, { + matcap: { + value: null + } + }]), + vertexShader: tt.meshmatcap_vert, + fragmentShader: tt.meshmatcap_frag + }, + points: { + uniforms: Ve([Xe.points, Xe.fog]), + vertexShader: tt.points_vert, + fragmentShader: tt.points_frag + }, + dashed: { + uniforms: Ve([Xe.common, Xe.fog, { + scale: { + value: 1 + }, + dashSize: { + value: 1 + }, + totalSize: { + value: 2 + } + }]), + vertexShader: tt.linedashed_vert, + fragmentShader: tt.linedashed_frag + }, + depth: { + uniforms: Ve([Xe.common, Xe.displacementmap]), + vertexShader: tt.depth_vert, + fragmentShader: tt.depth_frag + }, + normal: { + uniforms: Ve([Xe.common, Xe.bumpmap, Xe.normalmap, Xe.displacementmap, { + opacity: { + value: 1 + } + }]), + vertexShader: tt.normal_vert, + fragmentShader: tt.normal_frag + }, + sprite: { + uniforms: Ve([Xe.sprite, Xe.fog]), + vertexShader: tt.sprite_vert, + fragmentShader: tt.sprite_frag + }, + background: { + uniforms: { + uvTransform: { + value: new l + }, + t2D: { + value: null + } + }, + vertexShader: tt.background_vert, + fragmentShader: tt.background_frag + }, + cube: { + uniforms: Ve([Xe.envmap, { + opacity: { + value: 1 + } + }]), + vertexShader: tt.cube_vert, + fragmentShader: tt.cube_frag + }, + equirect: { + uniforms: { + tEquirect: { + value: null + } + }, + vertexShader: tt.equirect_vert, + fragmentShader: tt.equirect_frag + }, + distanceRGBA: { + uniforms: Ve([Xe.common, Xe.displacementmap, { + referencePosition: { + value: new y + }, + nearDistance: { + value: 1 + }, + farDistance: { + value: 1e3 + } + }]), + vertexShader: tt.distanceRGBA_vert, + fragmentShader: tt.distanceRGBA_frag + }, + shadow: { + uniforms: Ve([Xe.lights, Xe.fog, { + color: { + value: new LA(0) + }, + opacity: { + value: 1 + } + }]), + vertexShader: tt.shadow_vert, + fragmentShader: tt.shadow_frag + } + }; + + function ot(A, e, t, i) { + var o, n, r = new LA(0), + a = 0, + s = null, + l = 0, + c = null; + + function h(A, t) { + e.buffers.color.setClear(A.r, A.g, A.b, t, i) + } + return { + getClearColor: function () { + return r + }, + setClearColor: function (A, e) { + r.set(A), + h(r, a = void 0 !== e ? e : 1) + }, + getClearAlpha: function () { + return a + }, + setClearAlpha: function (A) { + h(r, a = A) + }, + render: function (e, i, d, p) { + var g = i.background, + u = A.xr, + f = u.getSession && u.getSession(); + if (f && "additive" === f.environmentBlendMode && (g = null), + null === g ? h(r, a) : g && g.isColor && (h(g, 1), + p = !0), + (A.autoClear || p) && A.clear(A.autoClearColor, A.autoClearDepth, A.autoClearStencil), + g && (g.isCubeTexture || g.isWebGLCubeRenderTarget || 306 === g.mapping)) { + void 0 === n && ((n = new Ue(new Ne(1, 1, 1), new Pe({ + type: "BackgroundCubeMaterial", + uniforms: Oe(it.cube.uniforms), + vertexShader: it.cube.vertexShader, + fragmentShader: it.cube.fragmentShader, + side: 1, + depthTest: !1, + depthWrite: !1, + fog: !1 + }))).geometry.deleteAttribute("normal"), + n.geometry.deleteAttribute("uv"), + n.onBeforeRender = function (A, e, t) { + this.matrixWorld.copyPosition(t.matrixWorld) + }, + Object.defineProperty(n.material, "envMap", { + get: function () { + return this.uniforms.envMap.value + } + }), + t.update(n)); + var m = g.isWebGLCubeRenderTarget ? g.texture : g; + n.material.uniforms.envMap.value = m, + n.material.uniforms.flipEnvMap.value = m.isCubeTexture ? -1 : 1, + s === g && l === m.version && c === A.toneMapping || (n.material.needsUpdate = !0, + s = g, + l = m.version, + c = A.toneMapping), + e.unshift(n, n.geometry, n.material, 0, 0, null) + } else + g && g.isTexture && (void 0 === o && ((o = new Ue(new et(2, 2), new Pe({ + type: "BackgroundMaterial", + uniforms: Oe(it.background.uniforms), + vertexShader: it.background.vertexShader, + fragmentShader: it.background.fragmentShader, + side: 0, + depthTest: !1, + depthWrite: !1, + fog: !1 + }))).geometry.deleteAttribute("normal"), + Object.defineProperty(o.material, "map", { + get: function () { + return this.uniforms.t2D.value + } + }), + t.update(o)), + o.material.uniforms.t2D.value = g, + !0 === g.matrixAutoUpdate && g.updateMatrix(), + o.material.uniforms.uvTransform.value.copy(g.matrix), + s === g && l === g.version && c === A.toneMapping || (o.material.needsUpdate = !0, + s = g, + l = g.version, + c = A.toneMapping), + e.unshift(o, o.geometry, o.material, 0, 0, null)) + } + } + } + + function nt(A, e, t, i) { + var o, n = i.isWebGL2; + this.setMode = function (A) { + o = A + }, + this.render = function (e, i) { + A.drawArrays(o, e, i), + t.update(i, o) + }, + this.renderInstances = function (i, r, a, s) { + if (0 !== s) { + var l, c; + if (n) + l = A, + c = "drawArraysInstanced"; + else if (c = "drawArraysInstancedANGLE", + null === (l = e.get("ANGLE_instanced_arrays"))) + return void console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays."); + l[c](o, r, a, s), + t.update(a, o, s) + } + } + } + + function rt(A, e, t) { + var i; + + function o(e) { + if ("highp" === e) { + if (A.getShaderPrecisionFormat(35633, 36338).precision > 0 && A.getShaderPrecisionFormat(35632, 36338).precision > 0) + return "highp"; + e = "mediump" + } + return "mediump" === e && A.getShaderPrecisionFormat(35633, 36337).precision > 0 && A.getShaderPrecisionFormat(35632, 36337).precision > 0 ? "mediump" : "lowp" + } + var n = "undefined" != typeof WebGL2RenderingContext && A instanceof WebGL2RenderingContext || "undefined" != typeof WebGL2ComputeRenderingContext && A instanceof WebGL2ComputeRenderingContext, + r = void 0 !== t.precision ? t.precision : "highp", + a = o(r); + a !== r && (console.warn("THREE.WebGLRenderer:", r, "not supported, using", a, "instead."), + r = a); + var s = !0 === t.logarithmicDepthBuffer, + l = A.getParameter(34930), + c = A.getParameter(35660), + h = A.getParameter(3379), + d = A.getParameter(34076), + p = A.getParameter(34921), + g = A.getParameter(36347), + u = A.getParameter(36348), + f = A.getParameter(36349), + m = c > 0, + C = n || !!e.get("OES_texture_float"); + return { + isWebGL2: n, + getMaxAnisotropy: function () { + if (void 0 !== i) + return i; + var t = e.get("EXT_texture_filter_anisotropic"); + return i = null !== t ? A.getParameter(t.MAX_TEXTURE_MAX_ANISOTROPY_EXT) : 0 + }, + getMaxPrecision: o, + precision: r, + logarithmicDepthBuffer: s, + maxTextures: l, + maxVertexTextures: c, + maxTextureSize: h, + maxCubemapSize: d, + maxAttributes: p, + maxVertexUniforms: g, + maxVaryings: u, + maxFragmentUniforms: f, + vertexTextures: m, + floatFragmentTextures: C, + floatVertexTextures: m && C, + maxSamples: n ? A.getParameter(36183) : 0 + } + } + + function at() { + var A = this, + e = null, + t = 0, + i = !1, + o = !1, + n = new EA, + r = new l, + a = { + value: null, + needsUpdate: !1 + }; + + function s() { + a.value !== e && (a.value = e, + a.needsUpdate = t > 0), + A.numPlanes = t, + A.numIntersection = 0 + } + + function c(e, t, i, o) { + var s = null !== e ? e.length : 0, + l = null; + if (0 !== s) { + if (l = a.value, + !0 !== o || null === l) { + var c = i + 4 * s, + h = t.matrixWorldInverse; + r.getNormalMatrix(h), + (null === l || c > l.length) && (l = new Float32Array(c)); + for (var d = 0, p = i; d !== s; ++d, + p += 4) + n.copy(e[d]).applyMatrix4(h, r), + n.normal.toArray(l, p), + l[p + 3] = n.constant + } + a.value = l, + a.needsUpdate = !0 + } + return A.numPlanes = s, + A.numIntersection = 0, + l + } + this.uniform = a, + this.numPlanes = 0, + this.numIntersection = 0, + this.init = function (A, o, n) { + var r = 0 !== A.length || o || 0 !== t || i; + return i = o, + e = c(A, n, 0), + t = A.length, + r + }, + this.beginShadows = function () { + o = !0, + c(null) + }, + this.endShadows = function () { + o = !1, + s() + }, + this.setState = function (A, n, r, l, h, d) { + if (!i || null === A || 0 === A.length || o && !r) + o ? c(null) : s(); + else { + var p = o ? 0 : t, + g = 4 * p, + u = h.clippingState || null; + a.value = u, + u = c(A, l, g, d); + for (var f = 0; f !== g; ++f) + u[f] = e[f]; + h.clippingState = u, + this.numIntersection = n ? this.numPlanes : 0, + this.numPlanes += p + } + } + } + + function st(A) { + var e = {}; + return { + get: function (t) { + if (void 0 !== e[t]) + return e[t]; + var i; + switch (t) { + case "WEBGL_depth_texture": + i = A.getExtension("WEBGL_depth_texture") || A.getExtension("MOZ_WEBGL_depth_texture") || A.getExtension("WEBKIT_WEBGL_depth_texture"); + break; + case "EXT_texture_filter_anisotropic": + i = A.getExtension("EXT_texture_filter_anisotropic") || A.getExtension("MOZ_EXT_texture_filter_anisotropic") || A.getExtension("WEBKIT_EXT_texture_filter_anisotropic"); + break; + case "WEBGL_compressed_texture_s3tc": + i = A.getExtension("WEBGL_compressed_texture_s3tc") || A.getExtension("MOZ_WEBGL_compressed_texture_s3tc") || A.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc"); + break; + case "WEBGL_compressed_texture_pvrtc": + i = A.getExtension("WEBGL_compressed_texture_pvrtc") || A.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc"); + break; + default: + i = A.getExtension(t) + } + return null === i && console.warn("THREE.WebGLRenderer: " + t + " extension not supported."), + e[t] = i, + i + } + } + } + + function lt(A, e, t) { + var i = new WeakMap, + o = new WeakMap; + + function n(A) { + var r = A.target, + a = i.get(r); + for (var s in null !== a.index && e.remove(a.index), + a.attributes) + e.remove(a.attributes[s]); + r.removeEventListener("dispose", n), + i.delete(r); + var l = o.get(a); + l && (e.remove(l), + o.delete(a)), + t.memory.geometries-- + } + + function r(A) { + var t = [], + i = A.index, + n = A.attributes.position, + r = 0; + if (null !== i) { + r = i.version; + for (var a = 0, s = (l = i.array).length; s > a; a += 3) { + t.push(c = l[a + 0], h = l[a + 1], h, d = l[a + 2], d, c) + } + } else { + var l; + r = n.version; + for (a = 0, + s = (l = n.array).length / 3 - 1; s > a; a += 3) { + var c, h, d; + t.push(c = a + 0, h = a + 1, h, d = a + 2, d, c) + } + } + var p = new(ie(t) > 65535 ? $A : XA)(t, 1); + p.version = r, + e.update(p, 34963); + var g = o.get(A); + g && e.remove(g), + o.set(A, p) + } + return { + get: function (A, e) { + var o = i.get(e); + return o || (e.addEventListener("dispose", n), + e.isBufferGeometry ? o = e : e.isGeometry && (void 0 === e._bufferGeometry && (e._bufferGeometry = (new he).setFromObject(A)), + o = e._bufferGeometry), + i.set(e, o), + t.memory.geometries++, + o) + }, + update: function (A) { + var t = A.index, + i = A.attributes; + for (var o in null !== t && e.update(t, 34963), + i) + e.update(i[o], 34962); + var n = A.morphAttributes; + for (var o in n) + for (var r = n[o], a = 0, s = r.length; s > a; a++) + e.update(r[a], 34962) + }, + getWireframeAttribute: function (A) { + var e = o.get(A); + if (e) { + var t = A.index; + null !== t && t.version > e.version && r(A) + } else + r(A); + return o.get(A) + } + } + } + + function ct(A, e, t, i) { + var o, n, r, a = i.isWebGL2; + this.setMode = function (A) { + o = A + }, + this.setIndex = function (A) { + n = A.type, + r = A.bytesPerElement + }, + this.render = function (e, i) { + A.drawElements(o, i, n, e * r), + t.update(i, o) + }, + this.renderInstances = function (i, s, l, c) { + if (0 !== c) { + var h, d; + if (a) + h = A, + d = "drawElementsInstanced"; + else if (d = "drawElementsInstancedANGLE", + null === (h = e.get("ANGLE_instanced_arrays"))) + return void console.error("THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays."); + h[d](o, l, n, s * r, c), + t.update(l, o, c) + } + } + } + + function ht(A) { + var e = { + frame: 0, + calls: 0, + triangles: 0, + points: 0, + lines: 0 + }; + return { + memory: { + geometries: 0, + textures: 0 + }, + render: e, + programs: null, + autoReset: !0, + reset: function () { + e.frame++, + e.calls = 0, + e.triangles = 0, + e.points = 0, + e.lines = 0 + }, + update: function (A, t, i) { + switch (i = i || 1, + e.calls++, + t) { + case 4: + e.triangles += i * (A / 3); + break; + case 1: + e.lines += i * (A / 2); + break; + case 3: + e.lines += i * (A - 1); + break; + case 2: + e.lines += i * A; + break; + case 0: + e.points += i * A; + break; + default: + console.error("THREE.WebGLInfo: Unknown draw mode:", t) + } + } + } + } + + function dt(A, e) { + return Math.abs(e[1]) - Math.abs(A[1]) + } + + function pt(A) { + var e = {}, + t = new Float32Array(8); + return { + update: function (i, o, n, r) { + var a = i.morphTargetInfluences, + s = void 0 === a ? 0 : a.length, + l = e[o.id]; + if (void 0 === l) { + l = []; + for (var c = 0; s > c; c++) + l[c] = [c, 0]; + e[o.id] = l + } + var h = n.morphTargets && o.morphAttributes.position, + d = n.morphNormals && o.morphAttributes.normal; + for (c = 0; s > c; c++) { + 0 !== (g = l[c])[1] && (h && o.deleteAttribute("morphTarget" + c), + d && o.deleteAttribute("morphNormal" + c)) + } + for (c = 0; s > c; c++) { + (g = l[c])[0] = c, + g[1] = a[c] + } + l.sort(dt); + var p = 0; + for (c = 0; 8 > c; c++) { + var g; + if (g = l[c]) { + var u = g[0], + f = g[1]; + if (f) { + h && o.setAttribute("morphTarget" + c, h[u]), + d && o.setAttribute("morphNormal" + c, d[u]), + t[c] = f, + p += f; + continue + } + } + t[c] = 0 + } + var m = o.morphTargetsRelative ? 1 : 1 - p; + r.getUniforms().setValue(A, "morphTargetBaseInfluence", m), + r.getUniforms().setValue(A, "morphTargetInfluences", t) + } + } + } + + function gt(A, e, t, i) { + var o = new WeakMap; + return { + update: function (A) { + var n = i.render.frame, + r = A.geometry, + a = e.get(A, r); + return o.get(a) !== n && (r.isGeometry && a.updateFromObject(A), + e.update(a), + o.set(a, n)), + A.isInstancedMesh && t.update(A.instanceMatrix, 34962), + a + }, + dispose: function () { + o = new WeakMap + } + } + } + + function ut(A, e, t, i, o, n, r, a, s, l) { + d.call(this, A = void 0 !== A ? A : [], e = void 0 !== e ? e : 301, t, i, o, n, r = void 0 !== r ? r : 1022, a, s, l), + this.flipY = !1 + } + + function ft(A, e, t, i) { + d.call(this, null), + this.image = { + data: A || null, + width: e || 1, + height: t || 1, + depth: i || 1 + }, + this.magFilter = 1003, + this.minFilter = 1003, + this.wrapR = 1001, + this.generateMipmaps = !1, + this.flipY = !1, + this.needsUpdate = !0 + } + + function mt(A, e, t, i) { + d.call(this, null), + this.image = { + data: A || null, + width: e || 1, + height: t || 1, + depth: i || 1 + }, + this.magFilter = 1003, + this.minFilter = 1003, + this.wrapR = 1001, + this.generateMipmaps = !1, + this.flipY = !1, + this.needsUpdate = !0 + } + it.physical = { + uniforms: Ve([it.standard.uniforms, { + clearcoat: { + value: 0 + }, + clearcoatMap: { + value: null + }, + clearcoatRoughness: { + value: 0 + }, + clearcoatRoughnessMap: { + value: null + }, + clearcoatNormalScale: { + value: new s(1, 1) + }, + clearcoatNormalMap: { + value: null + }, + sheen: { + value: new LA(0) + }, + transparency: { + value: 0 + } + }]), + vertexShader: tt.meshphysical_vert, + fragmentShader: tt.meshphysical_frag + }, + (ut.prototype = Object.create(d.prototype)).constructor = ut, + ut.prototype.isCubeTexture = !0, + Object.defineProperty(ut.prototype, "images", { + get: function () { + return this.image + }, + set: function (A) { + this.image = A + } + }), + (ft.prototype = Object.create(d.prototype)).constructor = ft, + ft.prototype.isDataTexture2DArray = !0, + (mt.prototype = Object.create(d.prototype)).constructor = mt, + mt.prototype.isDataTexture3D = !0; + var Ct = new d, + yt = new ft, + vt = new mt, + It = new ut, + Et = [], + Bt = [], + xt = new Float32Array(16), + St = new Float32Array(9), + wt = new Float32Array(4); + + function Mt(A, e, t) { + var i = A[0]; + if (0 >= i || i > 0) + return A; + var o = e * t, + n = Et[o]; + if (void 0 === n && (n = new Float32Array(o), + Et[o] = n), + 0 !== e) { + i.toArray(n, 0); + for (var r = 1, a = 0; r !== e; ++r) + A[r].toArray(n, a += t) + } + return n + } + + function bt(A, e) { + if (A.length !== e.length) + return !1; + for (var t = 0, i = A.length; i > t; t++) + if (A[t] !== e[t]) + return !1; + return !0 + } + + function Ut(A, e) { + for (var t = 0, i = e.length; i > t; t++) + A[t] = e[t] + } + + function Ft(A, e) { + var t = Bt[e]; + void 0 === t && (t = new Int32Array(e), + Bt[e] = t); + for (var i = 0; i !== e; ++i) + t[i] = A.allocateTextureUnit(); + return t + } + + function Kt(A, e) { + var t = this.cache; + t[0] !== e && (A.uniform1f(this.addr, e), + t[0] = e) + } + + function Qt(A, e) { + var t = this.cache; + if (void 0 !== e.x) + t[0] === e.x && t[1] === e.y || (A.uniform2f(this.addr, e.x, e.y), + t[0] = e.x, + t[1] = e.y); + else { + if (bt(t, e)) + return; + A.uniform2fv(this.addr, e), + Ut(t, e) + } + } + + function Rt(A, e) { + var t = this.cache; + if (void 0 !== e.x) + t[0] === e.x && t[1] === e.y && t[2] === e.z || (A.uniform3f(this.addr, e.x, e.y, e.z), + t[0] = e.x, + t[1] = e.y, + t[2] = e.z); + else if (void 0 !== e.r) + t[0] === e.r && t[1] === e.g && t[2] === e.b || (A.uniform3f(this.addr, e.r, e.g, e.b), + t[0] = e.r, + t[1] = e.g, + t[2] = e.b); + else { + if (bt(t, e)) + return; + A.uniform3fv(this.addr, e), + Ut(t, e) + } + } + + function Tt(A, e) { + var t = this.cache; + if (void 0 !== e.x) + t[0] === e.x && t[1] === e.y && t[2] === e.z && t[3] === e.w || (A.uniform4f(this.addr, e.x, e.y, e.z, e.w), + t[0] = e.x, + t[1] = e.y, + t[2] = e.z, + t[3] = e.w); + else { + if (bt(t, e)) + return; + A.uniform4fv(this.addr, e), + Ut(t, e) + } + } + + function kt(A, e) { + var t = this.cache, + i = e.elements; + if (void 0 === i) { + if (bt(t, e)) + return; + A.uniformMatrix2fv(this.addr, !1, e), + Ut(t, e) + } else { + if (bt(t, i)) + return; + wt.set(i), + A.uniformMatrix2fv(this.addr, !1, wt), + Ut(t, i) + } + } + + function Dt(A, e) { + var t = this.cache, + i = e.elements; + if (void 0 === i) { + if (bt(t, e)) + return; + A.uniformMatrix3fv(this.addr, !1, e), + Ut(t, e) + } else { + if (bt(t, i)) + return; + St.set(i), + A.uniformMatrix3fv(this.addr, !1, St), + Ut(t, i) + } + } + + function Lt(A, e) { + var t = this.cache, + i = e.elements; + if (void 0 === i) { + if (bt(t, e)) + return; + A.uniformMatrix4fv(this.addr, !1, e), + Ut(t, e) + } else { + if (bt(t, i)) + return; + xt.set(i), + A.uniformMatrix4fv(this.addr, !1, xt), + Ut(t, i) + } + } + + function Nt(A, e, t) { + var i = this.cache, + o = t.allocateTextureUnit(); + i[0] !== o && (A.uniform1i(this.addr, o), + i[0] = o), + t.safeSetTexture2D(e || Ct, o) + } + + function Ot(A, e, t) { + var i = this.cache, + o = t.allocateTextureUnit(); + i[0] !== o && (A.uniform1i(this.addr, o), + i[0] = o), + t.setTexture2DArray(e || yt, o) + } + + function Vt(A, e, t) { + var i = this.cache, + o = t.allocateTextureUnit(); + i[0] !== o && (A.uniform1i(this.addr, o), + i[0] = o), + t.setTexture3D(e || vt, o) + } + + function Gt(A, e, t) { + var i = this.cache, + o = t.allocateTextureUnit(); + i[0] !== o && (A.uniform1i(this.addr, o), + i[0] = o), + t.safeSetTextureCube(e || It, o) + } + + function Pt(A, e) { + var t = this.cache; + t[0] !== e && (A.uniform1i(this.addr, e), + t[0] = e) + } + + function qt(A, e) { + var t = this.cache; + bt(t, e) || (A.uniform2iv(this.addr, e), + Ut(t, e)) + } + + function jt(A, e) { + var t = this.cache; + bt(t, e) || (A.uniform3iv(this.addr, e), + Ut(t, e)) + } + + function Ht(A, e) { + var t = this.cache; + bt(t, e) || (A.uniform4iv(this.addr, e), + Ut(t, e)) + } + + function Yt(A, e) { + var t = this.cache; + t[0] !== e && (A.uniform1ui(this.addr, e), + t[0] = e) + } + + function Wt(A, e) { + A.uniform1fv(this.addr, e) + } + + function Jt(A, e) { + A.uniform1iv(this.addr, e) + } + + function zt(A, e) { + A.uniform2iv(this.addr, e) + } + + function Zt(A, e) { + A.uniform3iv(this.addr, e) + } + + function Xt(A, e) { + A.uniform4iv(this.addr, e) + } + + function _t(A, e) { + var t = Mt(e, this.size, 2); + A.uniform2fv(this.addr, t) + } + + function $t(A, e) { + var t = Mt(e, this.size, 3); + A.uniform3fv(this.addr, t) + } + + function Ai(A, e) { + var t = Mt(e, this.size, 4); + A.uniform4fv(this.addr, t) + } + + function ei(A, e) { + var t = Mt(e, this.size, 4); + A.uniformMatrix2fv(this.addr, !1, t) + } + + function ti(A, e) { + var t = Mt(e, this.size, 9); + A.uniformMatrix3fv(this.addr, !1, t) + } + + function ii(A, e) { + var t = Mt(e, this.size, 16); + A.uniformMatrix4fv(this.addr, !1, t) + } + + function oi(A, e, t) { + var i = e.length, + o = Ft(t, i); + A.uniform1iv(this.addr, o); + for (var n = 0; n !== i; ++n) + t.safeSetTexture2D(e[n] || Ct, o[n]) + } + + function ni(A, e, t) { + var i = e.length, + o = Ft(t, i); + A.uniform1iv(this.addr, o); + for (var n = 0; n !== i; ++n) + t.safeSetTextureCube(e[n] || It, o[n]) + } + + function ri(A, e, t) { + this.id = A, + this.addr = t, + this.cache = [], + this.setValue = function (A) { + switch (A) { + case 5126: + return Kt; + case 35664: + return Qt; + case 35665: + return Rt; + case 35666: + return Tt; + case 35674: + return kt; + case 35675: + return Dt; + case 35676: + return Lt; + case 5124: + case 35670: + return Pt; + case 35667: + case 35671: + return qt; + case 35668: + case 35672: + return jt; + case 35669: + case 35673: + return Ht; + case 5125: + return Yt; + case 35678: + case 36198: + case 36298: + case 36306: + case 35682: + return Nt; + case 35679: + case 36299: + case 36307: + return Vt; + case 35680: + case 36300: + case 36308: + case 36293: + return Gt; + case 36289: + case 36303: + case 36311: + case 36292: + return Ot + } + }(e.type) + } + + function ai(A, e, t) { + this.id = A, + this.addr = t, + this.cache = [], + this.size = e.size, + this.setValue = function (A) { + switch (A) { + case 5126: + return Wt; + case 35664: + return _t; + case 35665: + return $t; + case 35666: + return Ai; + case 35674: + return ei; + case 35675: + return ti; + case 35676: + return ii; + case 5124: + case 35670: + return Jt; + case 35667: + case 35671: + return zt; + case 35668: + case 35672: + return Zt; + case 35669: + case 35673: + return Xt; + case 35678: + case 36198: + case 36298: + case 36306: + case 35682: + return oi; + case 35680: + case 36300: + case 36308: + case 36293: + return ni + } + }(e.type) + } + + function si(A) { + this.id = A, + this.seq = [], + this.map = {} + } + ai.prototype.updateCache = function (A) { + var e = this.cache; + A instanceof Float32Array && e.length !== A.length && (this.cache = new Float32Array(A.length)), + Ut(e, A) + }, + si.prototype.setValue = function (A, e, t) { + for (var i = this.seq, o = 0, n = i.length; o !== n; ++o) { + var r = i[o]; + r.setValue(A, e[r.id], t) + } + }; + var li = /([\w\d_]+)(\])?(\[|\.)?/g; + + function ci(A, e) { + A.seq.push(e), + A.map[e.id] = e + } + + function hi(A, e, t) { + var i = A.name, + o = i.length; + for (li.lastIndex = 0;;) { + var n = li.exec(i), + r = n[1], + a = n[3]; + if ("]" === n[2] && (r |= 0), + void 0 === a || "[" === a && li.lastIndex + 2 === o) { + ci(t, void 0 === a ? new ri(r, A, e) : new ai(r, A, e)); + break + } + var s = t.map[r]; + void 0 === s && ci(t, s = new si(r)), + t = s + } + } + + function di(A, e) { + this.seq = [], + this.map = {}; + for (var t = A.getProgramParameter(e, 35718), i = 0; t > i; ++i) { + var o = A.getActiveUniform(e, i); + hi(o, A.getUniformLocation(e, o.name), this) + } + } + + function pi(A, e, t) { + var i = A.createShader(e); + return A.shaderSource(i, t), + A.compileShader(i), + i + } + di.prototype.setValue = function (A, e, t, i) { + var o = this.map[e]; + void 0 !== o && o.setValue(A, t, i) + }, + di.prototype.setOptional = function (A, e, t) { + var i = e[t]; + void 0 !== i && this.setValue(A, t, i) + }, + di.upload = function (A, e, t, i) { + for (var o = 0, n = e.length; o !== n; ++o) { + var r = e[o], + a = t[r.id]; + !1 !== a.needsUpdate && r.setValue(A, a.value, i) + } + }, + di.seqWithValue = function (A, e) { + for (var t = [], i = 0, o = A.length; i !== o; ++i) { + var n = A[i]; + n.id in e && t.push(n) + } + return t + }; + var gi = 0; + + function ui(A) { + switch (A) { + case 3e3: + return ["Linear", "( value )"]; + case 3001: + return ["sRGB", "( value )"]; + case 3002: + return ["RGBE", "( value )"]; + case 3004: + return ["RGBM", "( value, 7.0 )"]; + case 3005: + return ["RGBM", "( value, 16.0 )"]; + case 3006: + return ["RGBD", "( value, 256.0 )"]; + case 3007: + return ["Gamma", "( value, float( GAMMA_FACTOR ) )"]; + case 3003: + return ["LogLuv", "( value )"]; + default: + throw new Error("unsupported encoding: " + A) + } + } + + function fi(A, e, t) { + var i = A.getShaderParameter(e, 35713), + o = A.getShaderInfoLog(e).trim(); + return i && "" === o ? "" : "THREE.WebGLShader: gl.getShaderInfoLog() " + t + "\n" + o + function (A) { + for (var e = A.split("\n"), t = 0; e.length > t; t++) + e[t] = t + 1 + ": " + e[t]; + return e.join("\n") + }(A.getShaderSource(e)) + } + + function mi(A, e) { + var t = ui(e); + return "vec4 " + A + "( vec4 value ) { return " + t[0] + "ToLinear" + t[1] + "; }" + } + + function Ci(A, e) { + var t; + switch (e) { + case 1: + t = "Linear"; + break; + case 2: + t = "Reinhard"; + break; + case 3: + t = "Uncharted2"; + break; + case 4: + t = "OptimizedCineon"; + break; + case 5: + t = "ACESFilmic"; + break; + default: + throw new Error("unsupported toneMapping: " + e) + } + return "vec3 " + A + "( vec3 color ) { return " + t + "ToneMapping( color ); }" + } + + function yi(A) { + return "" !== A + } + + function vi(A, e) { + return A.replace(/NUM_DIR_LIGHTS/g, e.numDirLights).replace(/NUM_SPOT_LIGHTS/g, e.numSpotLights).replace(/NUM_RECT_AREA_LIGHTS/g, e.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g, e.numPointLights).replace(/NUM_HEMI_LIGHTS/g, e.numHemiLights).replace(/NUM_DIR_LIGHT_SHADOWS/g, e.numDirLightShadows).replace(/NUM_SPOT_LIGHT_SHADOWS/g, e.numSpotLightShadows).replace(/NUM_POINT_LIGHT_SHADOWS/g, e.numPointLightShadows) + } + + function Ii(A, e) { + return A.replace(/NUM_CLIPPING_PLANES/g, e.numClippingPlanes).replace(/UNION_CLIPPING_PLANES/g, e.numClippingPlanes - e.numClipIntersection) + } + var Ei = /^[ \t]*#include +<([\w\d./]+)>/gm; + + function Bi(A) { + return A.replace(Ei, xi) + } + + function xi(A, e) { + var t = tt[e]; + if (void 0 === t) + throw new Error("Can not resolve #include <" + e + ">"); + return Bi(t) + } + var Si = /#pragma unroll_loop[\s]+?for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g, + wi = /#pragma unroll_loop_start[\s]+?for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}[\s]+?#pragma unroll_loop_end/g; + + function Mi(A) { + return A.replace(wi, Ui).replace(Si, bi) + } + + function bi(A, e, t, i) { + return console.warn("WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead."), + Ui(A, e, t, i) + } + + function Ui(A, e, t, i) { + for (var o = "", n = parseInt(e); n < parseInt(t); n++) + o += i.replace(/\[ i \]/g, "[ " + n + " ]").replace(/UNROLLED_LOOP_INDEX/g, n); + return o + } + + function Fi(A) { + var e = "precision " + A.precision + " float;\nprecision " + A.precision + " int;"; + return "highp" === A.precision ? e += "\n#define HIGH_PRECISION" : "mediump" === A.precision ? e += "\n#define MEDIUM_PRECISION" : "lowp" === A.precision && (e += "\n#define LOW_PRECISION"), + e + } + + function Ki(A, e, t) { + var i, o, n, r, a, s = A.getContext(), + l = t.defines, + c = t.vertexShader, + h = t.fragmentShader, + d = function (A) { + var e = "SHADOWMAP_TYPE_BASIC"; + return 1 === A.shadowMapType ? e = "SHADOWMAP_TYPE_PCF" : 2 === A.shadowMapType ? e = "SHADOWMAP_TYPE_PCF_SOFT" : 3 === A.shadowMapType && (e = "SHADOWMAP_TYPE_VSM"), + e + }(t), + p = function (A) { + var e = "ENVMAP_TYPE_CUBE"; + if (A.envMap) + switch (A.envMapMode) { + case 301: + case 302: + e = "ENVMAP_TYPE_CUBE"; + break; + case 306: + case 307: + e = "ENVMAP_TYPE_CUBE_UV"; + break; + case 303: + case 304: + e = "ENVMAP_TYPE_EQUIREC"; + break; + case 305: + e = "ENVMAP_TYPE_SPHERE" + } + return e + }(t), + g = function (A) { + var e = "ENVMAP_MODE_REFLECTION"; + if (A.envMap) + switch (A.envMapMode) { + case 302: + case 304: + e = "ENVMAP_MODE_REFRACTION" + } + return e + }(t), + u = function (A) { + var e = "ENVMAP_BLENDING_NONE"; + if (A.envMap) + switch (A.combine) { + case 0: + e = "ENVMAP_BLENDING_MULTIPLY"; + break; + case 1: + e = "ENVMAP_BLENDING_MIX"; + break; + case 2: + e = "ENVMAP_BLENDING_ADD" + } + return e + }(t), + f = A.gammaFactor > 0 ? A.gammaFactor : 1, + m = t.isWebGL2 ? "" : function (A) { + return [A.extensionDerivatives || A.envMapCubeUV || A.bumpMap || A.tangentSpaceNormalMap || A.clearcoatNormalMap || A.flatShading || "physical" === A.shaderID ? "#extension GL_OES_standard_derivatives : enable" : "", (A.extensionFragDepth || A.logarithmicDepthBuffer) && A.rendererExtensionFragDepth ? "#extension GL_EXT_frag_depth : enable" : "", A.extensionDrawBuffers && A.rendererExtensionDrawBuffers ? "#extension GL_EXT_draw_buffers : require" : "", (A.extensionShaderTextureLOD || A.envMap) && A.rendererExtensionShaderTextureLod ? "#extension GL_EXT_shader_texture_lod : enable" : ""].filter(yi).join("\n") + }(t), + C = function (A) { + var e = []; + for (var t in A) { + var i = A[t]; + !1 !== i && e.push("#define " + t + " " + i) + } + return e.join("\n") + }(l), + y = s.createProgram(); + if (t.isRawShaderMaterial ? ((i = [C].filter(yi).join("\n")).length > 0 && (i += "\n"), + (o = [m, C].filter(yi).join("\n")).length > 0 && (o += "\n")) : (i = [Fi(t), "#define SHADER_NAME " + t.shaderName, C, t.instancing ? "#define USE_INSTANCING" : "", t.supportsVertexTextures ? "#define VERTEX_TEXTURES" : "", "#define GAMMA_FACTOR " + f, "#define MAX_BONES " + t.maxBones, t.useFog && t.fog ? "#define USE_FOG" : "", t.useFog && t.fogExp2 ? "#define FOG_EXP2" : "", t.map ? "#define USE_MAP" : "", t.envMap ? "#define USE_ENVMAP" : "", t.envMap ? "#define " + g : "", t.lightMap ? "#define USE_LIGHTMAP" : "", t.aoMap ? "#define USE_AOMAP" : "", t.emissiveMap ? "#define USE_EMISSIVEMAP" : "", t.bumpMap ? "#define USE_BUMPMAP" : "", t.normalMap ? "#define USE_NORMALMAP" : "", t.normalMap && t.objectSpaceNormalMap ? "#define OBJECTSPACE_NORMALMAP" : "", t.normalMap && t.tangentSpaceNormalMap ? "#define TANGENTSPACE_NORMALMAP" : "", t.clearcoatMap ? "#define USE_CLEARCOATMAP" : "", t.clearcoatRoughnessMap ? "#define USE_CLEARCOAT_ROUGHNESSMAP" : "", t.clearcoatNormalMap ? "#define USE_CLEARCOAT_NORMALMAP" : "", t.displacementMap && t.supportsVertexTextures ? "#define USE_DISPLACEMENTMAP" : "", t.specularMap ? "#define USE_SPECULARMAP" : "", t.roughnessMap ? "#define USE_ROUGHNESSMAP" : "", t.metalnessMap ? "#define USE_METALNESSMAP" : "", t.alphaMap ? "#define USE_ALPHAMAP" : "", t.vertexTangents ? "#define USE_TANGENT" : "", t.vertexColors ? "#define USE_COLOR" : "", t.vertexUvs ? "#define USE_UV" : "", t.uvsVertexOnly ? "#define UVS_VERTEX_ONLY" : "", t.flatShading ? "#define FLAT_SHADED" : "", t.skinning ? "#define USE_SKINNING" : "", t.useVertexTexture ? "#define BONE_TEXTURE" : "", t.morphTargets ? "#define USE_MORPHTARGETS" : "", t.morphNormals && !1 === t.flatShading ? "#define USE_MORPHNORMALS" : "", t.doubleSided ? "#define DOUBLE_SIDED" : "", t.flipSided ? "#define FLIP_SIDED" : "", t.shadowMapEnabled ? "#define USE_SHADOWMAP" : "", t.shadowMapEnabled ? "#define " + d : "", t.sizeAttenuation ? "#define USE_SIZEATTENUATION" : "", t.logarithmicDepthBuffer ? "#define USE_LOGDEPTHBUF" : "", t.logarithmicDepthBuffer && t.rendererExtensionFragDepth ? "#define USE_LOGDEPTHBUF_EXT" : "", "uniform mat4 modelMatrix;", "uniform mat4 modelViewMatrix;", "uniform mat4 projectionMatrix;", "uniform mat4 viewMatrix;", "uniform mat3 normalMatrix;", "uniform vec3 cameraPosition;", "uniform bool isOrthographic;", "#ifdef USE_INSTANCING", " attribute mat4 instanceMatrix;", "#endif", "attribute vec3 position;", "attribute vec3 normal;", "attribute vec2 uv;", "#ifdef USE_TANGENT", "\tattribute vec4 tangent;", "#endif", "#ifdef USE_COLOR", "\tattribute vec3 color;", "#endif", "#ifdef USE_MORPHTARGETS", "\tattribute vec3 morphTarget0;", "\tattribute vec3 morphTarget1;", "\tattribute vec3 morphTarget2;", "\tattribute vec3 morphTarget3;", "\t#ifdef USE_MORPHNORMALS", "\t\tattribute vec3 morphNormal0;", "\t\tattribute vec3 morphNormal1;", "\t\tattribute vec3 morphNormal2;", "\t\tattribute vec3 morphNormal3;", "\t#else", "\t\tattribute vec3 morphTarget4;", "\t\tattribute vec3 morphTarget5;", "\t\tattribute vec3 morphTarget6;", "\t\tattribute vec3 morphTarget7;", "\t#endif", "#endif", "#ifdef USE_SKINNING", "\tattribute vec4 skinIndex;", "\tattribute vec4 skinWeight;", "#endif", "\n"].filter(yi).join("\n"), + o = [m, Fi(t), "#define SHADER_NAME " + t.shaderName, C, t.alphaTest ? "#define ALPHATEST " + t.alphaTest + (t.alphaTest % 1 ? "" : ".0") : "", "#define GAMMA_FACTOR " + f, t.useFog && t.fog ? "#define USE_FOG" : "", t.useFog && t.fogExp2 ? "#define FOG_EXP2" : "", t.map ? "#define USE_MAP" : "", t.matcap ? "#define USE_MATCAP" : "", t.envMap ? "#define USE_ENVMAP" : "", t.envMap ? "#define " + p : "", t.envMap ? "#define " + g : "", t.envMap ? "#define " + u : "", t.lightMap ? "#define USE_LIGHTMAP" : "", t.aoMap ? "#define USE_AOMAP" : "", t.emissiveMap ? "#define USE_EMISSIVEMAP" : "", t.bumpMap ? "#define USE_BUMPMAP" : "", t.normalMap ? "#define USE_NORMALMAP" : "", t.normalMap && t.objectSpaceNormalMap ? "#define OBJECTSPACE_NORMALMAP" : "", t.normalMap && t.tangentSpaceNormalMap ? "#define TANGENTSPACE_NORMALMAP" : "", t.clearcoatMap ? "#define USE_CLEARCOATMAP" : "", t.clearcoatRoughnessMap ? "#define USE_CLEARCOAT_ROUGHNESSMAP" : "", t.clearcoatNormalMap ? "#define USE_CLEARCOAT_NORMALMAP" : "", t.specularMap ? "#define USE_SPECULARMAP" : "", t.roughnessMap ? "#define USE_ROUGHNESSMAP" : "", t.metalnessMap ? "#define USE_METALNESSMAP" : "", t.alphaMap ? "#define USE_ALPHAMAP" : "", t.sheen ? "#define USE_SHEEN" : "", t.vertexTangents ? "#define USE_TANGENT" : "", t.vertexColors ? "#define USE_COLOR" : "", t.vertexUvs ? "#define USE_UV" : "", t.uvsVertexOnly ? "#define UVS_VERTEX_ONLY" : "", t.gradientMap ? "#define USE_GRADIENTMAP" : "", t.flatShading ? "#define FLAT_SHADED" : "", t.doubleSided ? "#define DOUBLE_SIDED" : "", t.flipSided ? "#define FLIP_SIDED" : "", t.shadowMapEnabled ? "#define USE_SHADOWMAP" : "", t.shadowMapEnabled ? "#define " + d : "", t.premultipliedAlpha ? "#define PREMULTIPLIED_ALPHA" : "", t.physicallyCorrectLights ? "#define PHYSICALLY_CORRECT_LIGHTS" : "", t.logarithmicDepthBuffer ? "#define USE_LOGDEPTHBUF" : "", t.logarithmicDepthBuffer && t.rendererExtensionFragDepth ? "#define USE_LOGDEPTHBUF_EXT" : "", (t.extensionShaderTextureLOD || t.envMap) && t.rendererExtensionShaderTextureLod ? "#define TEXTURE_LOD_EXT" : "", "uniform mat4 viewMatrix;", "uniform vec3 cameraPosition;", "uniform bool isOrthographic;", 0 !== t.toneMapping ? "#define TONE_MAPPING" : "", 0 !== t.toneMapping ? tt.tonemapping_pars_fragment : "", 0 !== t.toneMapping ? Ci("toneMapping", t.toneMapping) : "", t.dithering ? "#define DITHERING" : "", t.outputEncoding || t.mapEncoding || t.matcapEncoding || t.envMapEncoding || t.emissiveMapEncoding || t.lightMapEncoding ? tt.encodings_pars_fragment : "", t.mapEncoding ? mi("mapTexelToLinear", t.mapEncoding) : "", t.matcapEncoding ? mi("matcapTexelToLinear", t.matcapEncoding) : "", t.envMapEncoding ? mi("envMapTexelToLinear", t.envMapEncoding) : "", t.emissiveMapEncoding ? mi("emissiveMapTexelToLinear", t.emissiveMapEncoding) : "", t.lightMapEncoding ? mi("lightMapTexelToLinear", t.lightMapEncoding) : "", t.outputEncoding ? (n = "linearToOutputTexel", + r = t.outputEncoding, + a = ui(r), + "vec4 " + n + "( vec4 value ) { return LinearTo" + a[0] + a[1] + "; }") : "", t.depthPacking ? "#define DEPTH_PACKING " + t.depthPacking : "", "\n"].filter(yi).join("\n")), + c = Ii(c = vi(c = Bi(c), t), t), + h = Ii(h = vi(h = Bi(h), t), t), + c = Mi(c), + h = Mi(h), + t.isWebGL2 && !t.isRawShaderMaterial) { + var v = !1, + I = /^\s*#version\s+300\s+es\s*\n/; + t.isShaderMaterial && null !== c.match(I) && null !== h.match(I) && (v = !0, + c = c.replace(I, ""), + h = h.replace(I, "")), + i = ["#version 300 es\n", "#define attribute in", "#define varying out", "#define texture2D texture"].join("\n") + "\n" + i, + o = ["#version 300 es\n", "#define varying in", v ? "" : "out highp vec4 pc_fragColor;", v ? "" : "#define gl_FragColor pc_fragColor", "#define gl_FragDepthEXT gl_FragDepth", "#define texture2D texture", "#define textureCube texture", "#define texture2DProj textureProj", "#define texture2DLodEXT textureLod", "#define texture2DProjLodEXT textureProjLod", "#define textureCubeLodEXT textureLod", "#define texture2DGradEXT textureGrad", "#define texture2DProjGradEXT textureProjGrad", "#define textureCubeGradEXT textureGrad"].join("\n") + "\n" + o + } + var E, B, x = o + h, + S = pi(s, 35633, i + c), + w = pi(s, 35632, x); + if (s.attachShader(y, S), + s.attachShader(y, w), + void 0 !== t.index0AttributeName ? s.bindAttribLocation(y, 0, t.index0AttributeName) : !0 === t.morphTargets && s.bindAttribLocation(y, 0, "position"), + s.linkProgram(y), + A.debug.checkShaderErrors) { + var M = s.getProgramInfoLog(y).trim(), + b = s.getShaderInfoLog(S).trim(), + U = s.getShaderInfoLog(w).trim(), + F = !0, + K = !0; + if (!1 === s.getProgramParameter(y, 35714)) { + F = !1; + var Q = fi(s, S, "vertex"), + R = fi(s, w, "fragment"); + console.error("THREE.WebGLProgram: shader error: ", s.getError(), "35715", s.getProgramParameter(y, 35715), "gl.getProgramInfoLog", M, Q, R) + } else + "" !== M ? console.warn("THREE.WebGLProgram: gl.getProgramInfoLog()", M) : "" !== b && "" !== U || (K = !1); + K && (this.diagnostics = { + runnable: F, + programLog: M, + vertexShader: { + log: b, + prefix: i + }, + fragmentShader: { + log: U, + prefix: o + } + }) + } + return s.detachShader(y, S), + s.detachShader(y, w), + s.deleteShader(S), + s.deleteShader(w), + this.getUniforms = function () { + return void 0 === E && (E = new di(s, y)), + E + }, + this.getAttributes = function () { + return void 0 === B && (B = function (A, e) { + for (var t = {}, i = A.getProgramParameter(e, 35721), o = 0; i > o; o++) { + var n = A.getActiveAttrib(e, o).name; + t[n] = A.getAttribLocation(e, n) + } + return t + }(s, y)), + B + }, + this.destroy = function () { + s.deleteProgram(y), + this.program = void 0 + }, + this.name = t.shaderName, + this.id = gi++, + this.cacheKey = e, + this.usedTimes = 1, + this.program = y, + this.vertexShader = S, + this.fragmentShader = w, + this + } + + function Qi(A, e, t) { + var i = [], + o = t.isWebGL2, + n = t.logarithmicDepthBuffer, + r = t.floatVertexTextures, + a = t.precision, + s = t.maxVertexUniforms, + l = t.vertexTextures, + c = { + MeshDepthMaterial: "depth", + MeshDistanceMaterial: "distanceRGBA", + MeshNormalMaterial: "normal", + MeshBasicMaterial: "basic", + MeshLambertMaterial: "lambert", + MeshPhongMaterial: "phong", + MeshToonMaterial: "toon", + MeshStandardMaterial: "physical", + MeshPhysicalMaterial: "physical", + MeshMatcapMaterial: "matcap", + LineBasicMaterial: "basic", + LineDashedMaterial: "dashed", + PointsMaterial: "points", + ShadowMaterial: "shadow", + SpriteMaterial: "sprite" + }, + h = ["precision", "isWebGL2", "supportsVertexTextures", "outputEncoding", "instancing", "map", "mapEncoding", "matcap", "matcapEncoding", "envMap", "envMapMode", "envMapEncoding", "envMapCubeUV", "lightMap", "lightMapEncoding", "aoMap", "emissiveMap", "emissiveMapEncoding", "bumpMap", "normalMap", "objectSpaceNormalMap", "tangentSpaceNormalMap", "clearcoatMap", "clearcoatRoughnessMap", "clearcoatNormalMap", "displacementMap", "specularMap", "roughnessMap", "metalnessMap", "gradientMap", "alphaMap", "combine", "vertexColors", "vertexTangents", "vertexUvs", "uvsVertexOnly", "fog", "useFog", "fogExp2", "flatShading", "sizeAttenuation", "logarithmicDepthBuffer", "skinning", "maxBones", "useVertexTexture", "morphTargets", "morphNormals", "maxMorphTargets", "maxMorphNormals", "premultipliedAlpha", "numDirLights", "numPointLights", "numSpotLights", "numHemiLights", "numRectAreaLights", "numDirLightShadows", "numPointLightShadows", "numSpotLightShadows", "shadowMapEnabled", "shadowMapType", "toneMapping", "physicallyCorrectLights", "alphaTest", "doubleSided", "flipSided", "numClippingPlanes", "numClipIntersection", "depthPacking", "dithering", "sheen"]; + + function d(A) { + var e; + return A ? A.isTexture ? e = A.encoding : A.isWebGLRenderTarget && (console.warn("THREE.WebGLPrograms.getTextureEncodingFromMap: don't use render targets as textures. Use their .texture property instead."), + e = A.texture.encoding) : e = 3e3, + e + } + this.getParameters = function (i, h, p, g, u, f, m) { + var C = g.fog, + y = i.envMap || (i.isMeshStandardMaterial ? g.environment : null), + v = c[i.type], + I = m.isSkinnedMesh ? function (A) { + var e = A.skeleton.bones; + if (r) + return 1024; + var t = Math.floor((s - 20) / 4), + i = Math.min(t, e.length); + return e.length > i ? (console.warn("THREE.WebGLRenderer: Skeleton has " + e.length + " bones. This GPU supports " + i + "."), + 0) : i + }(m) : 0; + null !== i.precision && (a = t.getMaxPrecision(i.precision)) !== i.precision && console.warn("THREE.WebGLProgram.getParameters:", i.precision, "not supported, using", a, "instead."); + var E = function (A, e) { + var t; + if (e) { + var i = it[e]; + t = { + name: A.type, + uniforms: Ge.clone(i.uniforms), + vertexShader: i.vertexShader, + fragmentShader: i.fragmentShader + } + } else + t = { + name: A.type, + uniforms: A.uniforms, + vertexShader: A.vertexShader, + fragmentShader: A.fragmentShader + }; + return t + }(i, v); + i.onBeforeCompile(E, A); + var B = A.getRenderTarget(); + return { + isWebGL2: o, + shaderID: v, + shaderName: E.name, + uniforms: E.uniforms, + vertexShader: E.vertexShader, + fragmentShader: E.fragmentShader, + defines: i.defines, + isRawShaderMaterial: i.isRawShaderMaterial, + isShaderMaterial: i.isShaderMaterial, + precision: a, + instancing: !0 === m.isInstancedMesh, + supportsVertexTextures: l, + outputEncoding: null !== B ? d(B.texture) : A.outputEncoding, + map: !!i.map, + mapEncoding: d(i.map), + matcap: !!i.matcap, + matcapEncoding: d(i.matcap), + envMap: !!y, + envMapMode: y && y.mapping, + envMapEncoding: d(y), + envMapCubeUV: !!y && (306 === y.mapping || 307 === y.mapping), + lightMap: !!i.lightMap, + lightMapEncoding: d(i.lightMap), + aoMap: !!i.aoMap, + emissiveMap: !!i.emissiveMap, + emissiveMapEncoding: d(i.emissiveMap), + bumpMap: !!i.bumpMap, + normalMap: !!i.normalMap, + objectSpaceNormalMap: 1 === i.normalMapType, + tangentSpaceNormalMap: 0 === i.normalMapType, + clearcoatMap: !!i.clearcoatMap, + clearcoatRoughnessMap: !!i.clearcoatRoughnessMap, + clearcoatNormalMap: !!i.clearcoatNormalMap, + displacementMap: !!i.displacementMap, + roughnessMap: !!i.roughnessMap, + metalnessMap: !!i.metalnessMap, + specularMap: !!i.specularMap, + alphaMap: !!i.alphaMap, + gradientMap: !!i.gradientMap, + sheen: !!i.sheen, + combine: i.combine, + vertexTangents: i.normalMap && i.vertexTangents, + vertexColors: i.vertexColors, + vertexUvs: !!(i.map || i.bumpMap || i.normalMap || i.specularMap || i.alphaMap || i.emissiveMap || i.roughnessMap || i.metalnessMap || i.clearcoatMap || i.clearcoatRoughnessMap || i.clearcoatNormalMap || i.displacementMap), + uvsVertexOnly: !(i.map || i.bumpMap || i.normalMap || i.specularMap || i.alphaMap || i.emissiveMap || i.roughnessMap || i.metalnessMap || i.clearcoatNormalMap || !i.displacementMap), + fog: !!C, + useFog: i.fog, + fogExp2: C && C.isFogExp2, + flatShading: i.flatShading, + sizeAttenuation: i.sizeAttenuation, + logarithmicDepthBuffer: n, + skinning: i.skinning && I > 0, + maxBones: I, + useVertexTexture: r, + morphTargets: i.morphTargets, + morphNormals: i.morphNormals, + maxMorphTargets: A.maxMorphTargets, + maxMorphNormals: A.maxMorphNormals, + numDirLights: h.directional.length, + numPointLights: h.point.length, + numSpotLights: h.spot.length, + numRectAreaLights: h.rectArea.length, + numHemiLights: h.hemi.length, + numDirLightShadows: h.directionalShadowMap.length, + numPointLightShadows: h.pointShadowMap.length, + numSpotLightShadows: h.spotShadowMap.length, + numClippingPlanes: u, + numClipIntersection: f, + dithering: i.dithering, + shadowMapEnabled: A.shadowMap.enabled && p.length > 0, + shadowMapType: A.shadowMap.type, + toneMapping: i.toneMapped ? A.toneMapping : 0, + physicallyCorrectLights: A.physicallyCorrectLights, + premultipliedAlpha: i.premultipliedAlpha, + alphaTest: i.alphaTest, + doubleSided: 2 === i.side, + flipSided: 1 === i.side, + depthPacking: void 0 !== i.depthPacking && i.depthPacking, + index0AttributeName: i.index0AttributeName, + extensionDerivatives: i.extensions && i.extensions.derivatives, + extensionFragDepth: i.extensions && i.extensions.fragDepth, + extensionDrawBuffers: i.extensions && i.extensions.drawBuffers, + extensionShaderTextureLOD: i.extensions && i.extensions.shaderTextureLOD, + rendererExtensionFragDepth: o || null !== e.get("EXT_frag_depth"), + rendererExtensionDrawBuffers: o || null !== e.get("WEBGL_draw_buffers"), + rendererExtensionShaderTextureLod: o || null !== e.get("EXT_shader_texture_lod"), + onBeforeCompile: i.onBeforeCompile + } + }, + this.getProgramCacheKey = function (e) { + var t = []; + if (e.shaderID ? t.push(e.shaderID) : (t.push(e.fragmentShader), + t.push(e.vertexShader)), + void 0 !== e.defines) + for (var i in e.defines) + t.push(i), + t.push(e.defines[i]); + if (void 0 === e.isRawShaderMaterial) { + for (var o = 0; h.length > o; o++) + t.push(e[h[o]]); + t.push(A.outputEncoding), + t.push(A.gammaFactor) + } + return t.push(e.onBeforeCompile.toString()), + t.join() + }, + this.acquireProgram = function (e, t) { + for (var o, n = 0, r = i.length; r > n; n++) { + var a = i[n]; + if (a.cacheKey === t) { + ++(o = a).usedTimes; + break + } + } + return void 0 === o && (o = new Ki(A, t, e), + i.push(o)), + o + }, + this.releaseProgram = function (A) { + if (0 == --A.usedTimes) { + var e = i.indexOf(A); + i[e] = i[i.length - 1], + i.pop(), + A.destroy() + } + }, + this.programs = i + } + + function Ri() { + var A = new WeakMap; + return { + get: function (e) { + var t = A.get(e); + return void 0 === t && A.set(e, t = {}), + t + }, + remove: function (e) { + A.delete(e) + }, + update: function (e, t, i) { + A.get(e)[t] = i + }, + dispose: function () { + A = new WeakMap + } + } + } + + function Ti(A, e) { + return A.groupOrder !== e.groupOrder ? A.groupOrder - e.groupOrder : A.renderOrder !== e.renderOrder ? A.renderOrder - e.renderOrder : A.program !== e.program ? A.program.id - e.program.id : A.material.id !== e.material.id ? A.material.id - e.material.id : A.z !== e.z ? A.z - e.z : A.id - e.id + } + + function ki(A, e) { + return A.groupOrder !== e.groupOrder ? A.groupOrder - e.groupOrder : A.renderOrder !== e.renderOrder ? A.renderOrder - e.renderOrder : A.z !== e.z ? e.z - A.z : A.id - e.id + } + + function Di() { + var A = [], + e = 0, + t = [], + i = [], + o = { + id: -1 + }; + + function n(t, i, n, r, a, s) { + var l = A[e]; + return void 0 === l ? A[e] = l = { + id: t.id, + object: t, + geometry: i, + material: n, + program: n.program || o, + groupOrder: r, + renderOrder: t.renderOrder, + z: a, + group: s + } : (l.id = t.id, + l.object = t, + l.geometry = i, + l.material = n, + l.program = n.program || o, + l.groupOrder = r, + l.renderOrder = t.renderOrder, + l.z = a, + l.group = s), + e++, + l + } + return { + opaque: t, + transparent: i, + init: function () { + e = 0, + t.length = 0, + i.length = 0 + }, + push: function (A, e, o, r, a, s) { + var l = n(A, e, o, r, a, s); + (!0 === o.transparent ? i : t).push(l) + }, + unshift: function (A, e, o, r, a, s) { + var l = n(A, e, o, r, a, s); + (!0 === o.transparent ? i : t).unshift(l) + }, + finish: function () { + for (var t = e, i = A.length; i > t; t++) { + var o = A[t]; + if (null === o.id) + break; + o.id = null, + o.object = null, + o.geometry = null, + o.material = null, + o.program = null, + o.group = null + } + }, + sort: function (A, e) { + t.length > 1 && t.sort(A || Ti), + i.length > 1 && i.sort(e || ki) + } + } + } + + function Li() { + var A = new WeakMap; + + function e(t) { + var i = t.target; + i.removeEventListener("dispose", e), + A.delete(i) + } + return { + get: function (t, i) { + var o, n = A.get(t); + return void 0 === n ? (o = new Di, + A.set(t, new WeakMap), + A.get(t).set(i, o), + t.addEventListener("dispose", e)) : void 0 === (o = n.get(i)) && (o = new Di, + n.set(i, o)), + o + }, + dispose: function () { + A = new WeakMap + } + } + } + + function Ni() { + var A = {}; + return { + get: function (e) { + if (void 0 !== A[e.id]) + return A[e.id]; + var t; + switch (e.type) { + case "DirectionalLight": + t = { + direction: new y, + color: new LA + }; + break; + case "SpotLight": + t = { + position: new y, + direction: new y, + color: new LA, + distance: 0, + coneCos: 0, + penumbraCos: 0, + decay: 0 + }; + break; + case "PointLight": + t = { + position: new y, + color: new LA, + distance: 0, + decay: 0 + }; + break; + case "HemisphereLight": + t = { + direction: new y, + skyColor: new LA, + groundColor: new LA + }; + break; + case "RectAreaLight": + t = { + color: new LA, + position: new y, + halfWidth: new y, + halfHeight: new y + } + } + return A[e.id] = t, + t + } + } + } + var Oi = 0; + + function Vi(A, e) { + return (e.castShadow ? 1 : 0) - (A.castShadow ? 1 : 0) + } + + function Gi() { + for (var A, e = new Ni, t = (A = {}, { + get: function (e) { + if (void 0 !== A[e.id]) + return A[e.id]; + var t; + switch (e.type) { + case "DirectionalLight": + case "SpotLight": + t = { + shadowBias: 0, + shadowRadius: 1, + shadowMapSize: new s + }; + break; + case "PointLight": + t = { + shadowBias: 0, + shadowRadius: 1, + shadowMapSize: new s, + shadowCameraNear: 1, + shadowCameraFar: 1e3 + } + } + return A[e.id] = t, + t + } + }), i = { + version: 0, + hash: { + directionalLength: -1, + pointLength: -1, + spotLength: -1, + rectAreaLength: -1, + hemiLength: -1, + numDirectionalShadows: -1, + numPointShadows: -1, + numSpotShadows: -1 + }, + ambient: [0, 0, 0], + probe: [], + directional: [], + directionalShadow: [], + directionalShadowMap: [], + directionalShadowMatrix: [], + spot: [], + spotShadow: [], + spotShadowMap: [], + spotShadowMatrix: [], + rectArea: [], + point: [], + pointShadow: [], + pointShadowMap: [], + pointShadowMatrix: [], + hemi: [] + }, o = 0; 9 > o; o++) + i.probe.push(new y); + var n = new y, + r = new M, + a = new M; + return { + setup: function (A, o, s) { + for (var l = 0, c = 0, h = 0, d = 0; 9 > d; d++) + i.probe[d].set(0, 0, 0); + var p = 0, + g = 0, + u = 0, + f = 0, + m = 0, + C = 0, + y = 0, + v = 0, + I = s.matrixWorldInverse; + A.sort(Vi), + d = 0; + for (var E = A.length; E > d; d++) { + var B = A[d], + x = B.color, + S = B.intensity, + w = B.distance, + M = B.shadow && B.shadow.map ? B.shadow.map.texture : null; + if (B.isAmbientLight) + l += x.r * S, + c += x.g * S, + h += x.b * S; + else if (B.isLightProbe) + for (var b = 0; 9 > b; b++) + i.probe[b].addScaledVector(B.sh.coefficients[b], S); + else if (B.isDirectionalLight) { + if ((K = e.get(B)).color.copy(B.color).multiplyScalar(B.intensity), + K.direction.setFromMatrixPosition(B.matrixWorld), + n.setFromMatrixPosition(B.target.matrixWorld), + K.direction.sub(n), + K.direction.transformDirection(I), + B.castShadow) { + var U = B.shadow; + (F = t.get(B)).shadowBias = U.bias, + F.shadowRadius = U.radius, + F.shadowMapSize = U.mapSize, + i.directionalShadow[p] = F, + i.directionalShadowMap[p] = M, + i.directionalShadowMatrix[p] = B.shadow.matrix, + C++ + } + i.directional[p] = K, + p++ + } else if (B.isSpotLight) { + if ((K = e.get(B)).position.setFromMatrixPosition(B.matrixWorld), + K.position.applyMatrix4(I), + K.color.copy(x).multiplyScalar(S), + K.distance = w, + K.direction.setFromMatrixPosition(B.matrixWorld), + n.setFromMatrixPosition(B.target.matrixWorld), + K.direction.sub(n), + K.direction.transformDirection(I), + K.coneCos = Math.cos(B.angle), + K.penumbraCos = Math.cos(B.angle * (1 - B.penumbra)), + K.decay = B.decay, + B.castShadow) { + U = B.shadow; + (F = t.get(B)).shadowBias = U.bias, + F.shadowRadius = U.radius, + F.shadowMapSize = U.mapSize, + i.spotShadow[u] = F, + i.spotShadowMap[u] = M, + i.spotShadowMatrix[u] = B.shadow.matrix, + v++ + } + i.spot[u] = K, + u++ + } else if (B.isRectAreaLight) { + (K = e.get(B)).color.copy(x).multiplyScalar(S), + K.position.setFromMatrixPosition(B.matrixWorld), + K.position.applyMatrix4(I), + a.identity(), + r.copy(B.matrixWorld), + r.premultiply(I), + a.extractRotation(r), + K.halfWidth.set(.5 * B.width, 0, 0), + K.halfHeight.set(0, .5 * B.height, 0), + K.halfWidth.applyMatrix4(a), + K.halfHeight.applyMatrix4(a), + i.rectArea[f] = K, + f++ + } else if (B.isPointLight) { + if ((K = e.get(B)).position.setFromMatrixPosition(B.matrixWorld), + K.position.applyMatrix4(I), + K.color.copy(B.color).multiplyScalar(B.intensity), + K.distance = B.distance, + K.decay = B.decay, + B.castShadow) { + var F; + U = B.shadow; + (F = t.get(B)).shadowBias = U.bias, + F.shadowRadius = U.radius, + F.shadowMapSize = U.mapSize, + F.shadowCameraNear = U.camera.near, + F.shadowCameraFar = U.camera.far, + i.pointShadow[g] = F, + i.pointShadowMap[g] = M, + i.pointShadowMatrix[g] = B.shadow.matrix, + y++ + } + i.point[g] = K, + g++ + } else if (B.isHemisphereLight) { + var K; + (K = e.get(B)).direction.setFromMatrixPosition(B.matrixWorld), + K.direction.transformDirection(I), + K.direction.normalize(), + K.skyColor.copy(B.color).multiplyScalar(S), + K.groundColor.copy(B.groundColor).multiplyScalar(S), + i.hemi[m] = K, + m++ + } + } + i.ambient[0] = l, + i.ambient[1] = c, + i.ambient[2] = h; + var Q = i.hash; + Q.directionalLength === p && Q.pointLength === g && Q.spotLength === u && Q.rectAreaLength === f && Q.hemiLength === m && Q.numDirectionalShadows === C && Q.numPointShadows === y && Q.numSpotShadows === v || (i.directional.length = p, + i.spot.length = u, + i.rectArea.length = f, + i.point.length = g, + i.hemi.length = m, + i.directionalShadow.length = C, + i.directionalShadowMap.length = C, + i.pointShadow.length = y, + i.pointShadowMap.length = y, + i.spotShadow.length = v, + i.spotShadowMap.length = v, + i.directionalShadowMatrix.length = C, + i.pointShadowMatrix.length = y, + i.spotShadowMatrix.length = v, + Q.directionalLength = p, + Q.pointLength = g, + Q.spotLength = u, + Q.rectAreaLength = f, + Q.hemiLength = m, + Q.numDirectionalShadows = C, + Q.numPointShadows = y, + Q.numSpotShadows = v, + i.version = Oi++) + }, + state: i + } + } + + function Pi() { + var A = new Gi, + e = [], + t = []; + return { + init: function () { + e.length = 0, + t.length = 0 + }, + state: { + lightsArray: e, + shadowsArray: t, + lights: A + }, + setupLights: function (i) { + A.setup(e, t, i) + }, + pushLight: function (A) { + e.push(A) + }, + pushShadow: function (A) { + t.push(A) + } + } + } + + function qi() { + var A = new WeakMap; + + function e(t) { + var i = t.target; + i.removeEventListener("dispose", e), + A.delete(i) + } + return { + get: function (t, i) { + var o; + return !1 === A.has(t) ? (o = new Pi, + A.set(t, new WeakMap), + A.get(t).set(i, o), + t.addEventListener("dispose", e)) : !1 === A.get(t).has(i) ? (o = new Pi, + A.get(t).set(i, o)) : o = A.get(t).get(i), + o + }, + dispose: function () { + A = new WeakMap + } + } + } + + function ji(A) { + qA.call(this), + this.type = "MeshDepthMaterial", + this.depthPacking = 3200, + this.skinning = !1, + this.morphTargets = !1, + this.map = null, + this.alphaMap = null, + this.displacementMap = null, + this.displacementScale = 1, + this.displacementBias = 0, + this.wireframe = !1, + this.wireframeLinewidth = 1, + this.fog = !1, + this.setValues(A) + } + + function Hi(A) { + qA.call(this), + this.type = "MeshDistanceMaterial", + this.referencePosition = new y, + this.nearDistance = 1, + this.farDistance = 1e3, + this.skinning = !1, + this.morphTargets = !1, + this.map = null, + this.alphaMap = null, + this.displacementMap = null, + this.displacementScale = 1, + this.displacementBias = 0, + this.fog = !1, + this.setValues(A) + } + (ji.prototype = Object.create(qA.prototype)).constructor = ji, + ji.prototype.isMeshDepthMaterial = !0, + ji.prototype.copy = function (A) { + return qA.prototype.copy.call(this, A), + this.depthPacking = A.depthPacking, + this.skinning = A.skinning, + this.morphTargets = A.morphTargets, + this.map = A.map, + this.alphaMap = A.alphaMap, + this.displacementMap = A.displacementMap, + this.displacementScale = A.displacementScale, + this.displacementBias = A.displacementBias, + this.wireframe = A.wireframe, + this.wireframeLinewidth = A.wireframeLinewidth, + this + }, + (Hi.prototype = Object.create(qA.prototype)).constructor = Hi, + Hi.prototype.isMeshDistanceMaterial = !0, + Hi.prototype.copy = function (A) { + return qA.prototype.copy.call(this, A), + this.referencePosition.copy(A.referencePosition), + this.nearDistance = A.nearDistance, + this.farDistance = A.farDistance, + this.skinning = A.skinning, + this.morphTargets = A.morphTargets, + this.map = A.map, + this.alphaMap = A.alphaMap, + this.displacementMap = A.displacementMap, + this.displacementScale = A.displacementScale, + this.displacementBias = A.displacementBias, + this + }; + + function Yi(A, e, t) { + var i = new Ze, + o = new s, + n = new s, + r = new p, + a = [], + l = [], + c = {}, + h = { + 0: 1, + 1: 0, + 2: 2 + }, + d = new Pe({ + defines: { + SAMPLE_RATE: 2 / 8, + HALF_SAMPLE_RATE: 1 / 8 + }, + uniforms: { + shadow_pass: { + value: null + }, + resolution: { + value: new s + }, + radius: { + value: 4 + } + }, + vertexShader: "void main() {\n\tgl_Position = vec4( position, 1.0 );\n}", + fragmentShader: "uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include \nvoid main() {\n float mean = 0.0;\n float squared_mean = 0.0;\n\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );\n for ( float i = -1.0; i < 1.0 ; i += SAMPLE_RATE) {\n #ifdef HORIZONAL_PASS\n vec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( i, 0.0 ) * radius ) / resolution ) );\n mean += distribution.x;\n squared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n #else\n float depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, i ) * radius ) / resolution ) );\n mean += depth;\n squared_mean += depth * depth;\n #endif\n }\n mean = mean * HALF_SAMPLE_RATE;\n squared_mean = squared_mean * HALF_SAMPLE_RATE;\n float std_dev = sqrt( squared_mean - mean * mean );\n gl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}" + }), + u = d.clone(); + u.defines.HORIZONAL_PASS = 1; + var f = new he; + f.setAttribute("position", new YA(new Float32Array([-1, -1, .5, 3, -1, .5, -1, 3, .5]), 3)); + var m = new Ue(f, d), + C = this; + + function y(t, i) { + var o = e.update(m); + d.uniforms.shadow_pass.value = t.map.texture, + d.uniforms.resolution.value = t.mapSize, + d.uniforms.radius.value = t.radius, + A.setRenderTarget(t.mapPass), + A.clear(), + A.renderBufferDirect(i, null, o, d, m, null), + u.uniforms.shadow_pass.value = t.mapPass.texture, + u.uniforms.resolution.value = t.mapSize, + u.uniforms.radius.value = t.radius, + A.setRenderTarget(t.map), + A.clear(), + A.renderBufferDirect(i, null, o, u, m, null) + } + + function v(A, e, t) { + var i = A << 0 | e << 1 | t << 2, + o = a[i]; + return void 0 === o && (o = new ji({ + depthPacking: 3201, + morphTargets: A, + skinning: e + }), + a[i] = o), + o + } + + function I(A, e, t) { + var i = A << 0 | e << 1 | t << 2, + o = l[i]; + return void 0 === o && (o = new Hi({ + morphTargets: A, + skinning: e + }), + l[i] = o), + o + } + + function E(e, t, i, o, n, r) { + var a = e.geometry, + s = null, + l = v, + d = e.customDepthMaterial; + if (!0 === i.isPointLight && (l = I, + d = e.customDistanceMaterial), + void 0 === d) { + var p = !1; + !0 === t.morphTargets && (!0 === a.isBufferGeometry ? p = a.morphAttributes && a.morphAttributes.position && a.morphAttributes.position.length > 0 : !0 === a.isGeometry && (p = a.morphTargets && a.morphTargets.length > 0)); + var g = !1; + !0 === e.isSkinnedMesh && (!0 === t.skinning ? g = !0 : console.warn("THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:", e)), + s = l(p, g, !0 === e.isInstancedMesh) + } else + s = d; + if (A.localClippingEnabled && !0 === t.clipShadows && 0 !== t.clippingPlanes.length) { + var u = s.uuid, + f = t.uuid, + m = c[u]; + void 0 === m && (c[u] = m = {}); + var C = m[f]; + void 0 === C && (C = s.clone(), + m[f] = C), + s = C + } + return s.visible = t.visible, + s.wireframe = t.wireframe, + s.side = 3 === r ? null !== t.shadowSide ? t.shadowSide : t.side : null !== t.shadowSide ? t.shadowSide : h[t.side], + s.clipShadows = t.clipShadows, + s.clippingPlanes = t.clippingPlanes, + s.clipIntersection = t.clipIntersection, + s.wireframeLinewidth = t.wireframeLinewidth, + s.linewidth = t.linewidth, + !0 === i.isPointLight && !0 === s.isMeshDistanceMaterial && (s.referencePosition.setFromMatrixPosition(i.matrixWorld), + s.nearDistance = o, + s.farDistance = n), + s + } + + function B(t, o, n, r, a) { + if (!1 !== t.visible) { + if (t.layers.test(o.layers) && (t.isMesh || t.isLine || t.isPoints) && (t.castShadow || t.receiveShadow && 3 === a) && (!t.frustumCulled || i.intersectsObject(t))) { + t.modelViewMatrix.multiplyMatrices(n.matrixWorldInverse, t.matrixWorld); + var s = e.update(t), + l = t.material; + if (Array.isArray(l)) + for (var c = s.groups, h = 0, d = c.length; d > h; h++) { + var p = c[h], + g = l[p.materialIndex]; + if (g && g.visible && g.opacity > .9) { + var u = E(t, g, r, n.near, n.far, a); + A.renderBufferDirect(n, null, s, u, t, p) + } + } + else if (l.visible && l.opacity > .9) { + u = E(t, l, r, n.near, n.far, a); + A.renderBufferDirect(n, null, s, u, t, null) + } + } + for (var f = t.children, m = 0, C = f.length; C > m; m++) + B(f[m], o, n, r, a) + } + } + this.enabled = !1, + this.autoUpdate = !0, + this.needsUpdate = !1, + this.type = 1, + this.render = function (e, a, s) { + if (!1 !== C.enabled && (!1 !== C.autoUpdate || !1 !== C.needsUpdate) && 0 !== e.length) { + var l = A.getRenderTarget(), + c = A.getActiveCubeFace(), + h = A.getActiveMipmapLevel(), + d = A.state; + d.setBlending(0), + d.buffers.color.setClear(1, 1, 1, 1), + d.buffers.depth.setTest(!0), + d.setScissorTest(!1); + for (var p = 0, u = e.length; u > p; p++) { + var f = e[p], + m = f.shadow; + if (void 0 !== m) { + o.copy(m.mapSize); + var v, I = m.getFrameExtents(); + if (o.multiply(I), + n.copy(m.mapSize), + (o.x > t || o.y > t) && (console.warn("THREE.WebGLShadowMap:", f, "has shadow exceeding max texture size, reducing"), + o.x > t && (n.x = Math.floor(t / I.x), + o.x = n.x * I.x, + m.mapSize.x = n.x), + o.y > t && (n.y = Math.floor(t / I.y), + o.y = n.y * I.y, + m.mapSize.y = n.y)), + null === m.map && !m.isPointLightShadow && 3 === this.type) + m.map = new g(o.x, o.y, v = { + minFilter: 1006, + magFilter: 1006, + format: 1023 + }), + m.map.texture.name = f.name + ".shadowMap", + m.mapPass = new g(o.x, o.y, v), + m.camera.updateProjectionMatrix(); + if (null === m.map) + m.map = new g(o.x, o.y, v = { + minFilter: 1003, + magFilter: 1003, + format: 1023 + }), + m.map.texture.name = f.name + ".shadowMap", + m.camera.updateProjectionMatrix(); + A.setRenderTarget(m.map), + A.clear(); + for (var E = m.getViewportCount(), x = 0; E > x; x++) { + var S = m.getViewport(x); + r.set(n.x * S.x, n.y * S.y, n.x * S.z, n.y * S.w), + d.viewport(r), + m.updateMatrices(f, x), + i = m.getFrustum(), + B(a, s, m.camera, f, this.type) + } + m.isPointLightShadow || 3 !== this.type || y(m, s) + } else + console.warn("THREE.WebGLShadowMap:", f, "has no shadow.") + } + C.needsUpdate = !1, + A.setRenderTarget(l, c, h) + } + } + } + + function Wi(A, e, t) { + var i = t.isWebGL2; + var o = new function () { + var e = !1, + t = new p, + i = null, + o = new p(0, 0, 0, 0); + return { + setMask: function (t) { + i === t || e || (A.colorMask(t, t, t, t), + i = t) + }, + setLocked: function (A) { + e = A + }, + setClear: function (e, i, n, r, a) { + !0 === a && (e *= r, + i *= r, + n *= r), + t.set(e, i, n, r), + !1 === o.equals(t) && (A.clearColor(e, i, n, r), + o.copy(t)) + }, + reset: function () { + e = !1, + i = null, + o.set(-1, 0, 0, 0) + } + } + }, + n = new function () { + var e = !1, + t = null, + i = null, + o = null; + return { + setTest: function (A) { + A ? O(2929) : V(2929) + }, + setMask: function (i) { + t === i || e || (A.depthMask(i), + t = i) + }, + setFunc: function (e) { + if (i !== e) { + if (e) + switch (e) { + case 0: + A.depthFunc(512); + break; + case 1: + A.depthFunc(519); + break; + case 2: + A.depthFunc(513); + break; + case 3: + A.depthFunc(515); + break; + case 4: + A.depthFunc(514); + break; + case 5: + A.depthFunc(518); + break; + case 6: + A.depthFunc(516); + break; + case 7: + A.depthFunc(517); + break; + default: + A.depthFunc(515) + } + else + A.depthFunc(515); + i = e + } + }, + setLocked: function (A) { + e = A + }, + setClear: function (e) { + o !== e && (A.clearDepth(e), + o = e) + }, + reset: function () { + e = !1, + t = null, + i = null, + o = null + } + } + }, + r = new function () { + var e = !1, + t = null, + i = null, + o = null, + n = null, + r = null, + a = null, + s = null, + l = null; + return { + setTest: function (A) { + e || (A ? O(2960) : V(2960)) + }, + setMask: function (i) { + t === i || e || (A.stencilMask(i), + t = i) + }, + setFunc: function (e, t, r) { + i === e && o === t && n === r || (A.stencilFunc(e, t, r), + i = e, + o = t, + n = r) + }, + setOp: function (e, t, i) { + r === e && a === t && s === i || (A.stencilOp(e, t, i), + r = e, + a = t, + s = i) + }, + setLocked: function (A) { + e = A + }, + setClear: function (e) { + l !== e && (A.clearStencil(e), + l = e) + }, + reset: function () { + e = !1, + t = null, + i = null, + o = null, + n = null, + r = null, + a = null, + s = null, + l = null + } + } + }, + a = A.getParameter(34921), + s = new Uint8Array(a), + l = new Uint8Array(a), + c = new Uint8Array(a), + h = {}, + d = null, + g = null, + u = null, + f = null, + m = null, + C = null, + y = null, + v = null, + I = null, + E = !1, + B = null, + x = null, + S = null, + w = null, + M = null, + b = A.getParameter(35661), + U = !1, + F = 0, + K = A.getParameter(7938); - + 1 !== K.indexOf("WebGL") ? (F = parseFloat(/^WebGL\ ([0-9])/.exec(K)[1]), + U = F >= 1) : -1 !== K.indexOf("OpenGL ES") && (F = parseFloat(/^OpenGL\ ES\ ([0-9])/.exec(K)[1]), + U = F >= 2); + var Q = null, + R = {}, + T = new p, + k = new p; + + function D(e, t, i) { + var o = new Uint8Array(4), + n = A.createTexture(); + A.bindTexture(e, n), + A.texParameteri(e, 10241, 9728), + A.texParameteri(e, 10240, 9728); + for (var r = 0; i > r; r++) + A.texImage2D(t + r, 0, 6408, 1, 1, 0, 6408, 5121, o); + return n + } + var L = {}; + + function N(t, o) { + (s[t] = 1, + 0 === l[t] && (A.enableVertexAttribArray(t), + l[t] = 1), + c[t] !== o) && ((i ? A : e.get("ANGLE_instanced_arrays"))[i ? "vertexAttribDivisor" : "vertexAttribDivisorANGLE"](t, o), + c[t] = o) + } + + function O(e) { + !0 !== h[e] && (A.enable(e), + h[e] = !0) + } + + function V(e) { + !1 !== h[e] && (A.disable(e), + h[e] = !1) + } + L[3553] = D(3553, 3553, 1), + L[34067] = D(34067, 34069, 6), + o.setClear(0, 0, 0, 1), + n.setClear(1), + r.setClear(0), + O(2929), + n.setFunc(3), + H(!1), + Y(1), + O(2884), + j(0); + var G = { + 100: 32774, + 101: 32778, + 102: 32779 + }; + if (i) + G[103] = 32775, + G[104] = 32776; + else { + var P = e.get("EXT_blend_minmax"); + null !== P && (G[103] = P.MIN_EXT, + G[104] = P.MAX_EXT) + } + var q = { + 200: 0, + 201: 1, + 202: 768, + 204: 770, + 210: 776, + 208: 774, + 206: 772, + 203: 769, + 205: 771, + 209: 775, + 207: 773 + }; + + function j(e, t, i, o, n, r, a, s) { + if (0 !== e) { + if (g || (O(3042), + g = !0), + 5 === e) + n = n || t, + r = r || i, + a = a || o, + t === f && n === y || (A.blendEquationSeparate(G[t], G[n]), + f = t, + y = n), + i === m && o === C && r === v && a === I || (A.blendFuncSeparate(q[i], q[o], q[r], q[a]), + m = i, + C = o, + v = r, + I = a), + u = e, + E = null; + else if (e !== u || s !== E) { + if (100 === f && 100 === y || (A.blendEquation(32774), + f = 100, + y = 100), + s) + switch (e) { + case 1: + A.blendFuncSeparate(1, 771, 1, 771); + break; + case 2: + A.blendFunc(1, 1); + break; + case 3: + A.blendFuncSeparate(0, 0, 769, 771); + break; + case 4: + A.blendFuncSeparate(0, 768, 0, 770); + break; + default: + console.error("THREE.WebGLState: Invalid blending: ", e) + } + else + switch (e) { + case 1: + A.blendFuncSeparate(770, 771, 1, 771); + break; + case 2: + A.blendFunc(770, 1); + break; + case 3: + A.blendFunc(0, 769); + break; + case 4: + A.blendFunc(0, 768); + break; + default: + console.error("THREE.WebGLState: Invalid blending: ", e) + } + m = null, + C = null, + v = null, + I = null, + u = e, + E = s + } + } else + g && (V(3042), + g = !1) + } + + function H(e) { + B !== e && (A.frontFace(e ? 2304 : 2305), + B = e) + } + + function Y(e) { + 0 !== e ? (O(2884), + e !== x && A.cullFace(1 === e ? 1029 : 2 === e ? 1028 : 1032)) : V(2884), + x = e + } + + function W(e, t, i) { + e ? (O(32823), + w === t && M === i || (A.polygonOffset(t, i), + w = t, + M = i)) : V(32823) + } + + function J(e) { + void 0 === e && (e = 33984 + b - 1), + Q !== e && (A.activeTexture(e), + Q = e) + } + return { + buffers: { + color: o, + depth: n, + stencil: r + }, + initAttributes: function () { + for (var A = 0, e = s.length; e > A; A++) + s[A] = 0 + }, + enableAttribute: function (A) { + N(A, 0) + }, + enableAttributeAndDivisor: N, + disableUnusedAttributes: function () { + for (var e = 0, t = l.length; e !== t; ++e) + l[e] !== s[e] && (A.disableVertexAttribArray(e), + l[e] = 0) + }, + enable: O, + disable: V, + useProgram: function (e) { + return d !== e && (A.useProgram(e), + d = e, + !0) + }, + setBlending: j, + setMaterial: function (A, e) { + 2 === A.side ? V(2884) : O(2884); + var t = 1 === A.side; + e && (t = !t), + H(t), + 1 === A.blending && !1 === A.transparent ? j(0) : j(A.blending, A.blendEquation, A.blendSrc, A.blendDst, A.blendEquationAlpha, A.blendSrcAlpha, A.blendDstAlpha, A.premultipliedAlpha), + n.setFunc(A.depthFunc), + n.setTest(A.depthTest), + n.setMask(A.depthWrite), + o.setMask(A.colorWrite); + var i = A.stencilWrite; + r.setTest(i), + i && (r.setMask(A.stencilWriteMask), + r.setFunc(A.stencilFunc, A.stencilRef, A.stencilFuncMask), + r.setOp(A.stencilFail, A.stencilZFail, A.stencilZPass)), + W(A.polygonOffset, A.polygonOffsetFactor, A.polygonOffsetUnits) + }, + setFlipSided: H, + setCullFace: Y, + setLineWidth: function (e) { + e !== S && (U && A.lineWidth(e), + S = e) + }, + setPolygonOffset: W, + setScissorTest: function (A) { + A ? O(3089) : V(3089) + }, + activeTexture: J, + bindTexture: function (e, t) { + null === Q && J(); + var i = R[Q]; + void 0 === i && (R[Q] = i = { + type: void 0, + texture: void 0 + }), + i.type === e && i.texture === t || (A.bindTexture(e, t || L[e]), + i.type = e, + i.texture = t) + }, + unbindTexture: function () { + var e = R[Q]; + void 0 !== e && void 0 !== e.type && (A.bindTexture(e.type, null), + e.type = void 0, + e.texture = void 0) + }, + compressedTexImage2D: function () { + try { + A.compressedTexImage2D.apply(A, arguments) + } catch (A) { + console.error("THREE.WebGLState:", A) + } + }, + texImage2D: function () { + try { + A.texImage2D.apply(A, arguments) + } catch (A) { + console.error("THREE.WebGLState:", A) + } + }, + texImage3D: function () { + try { + A.texImage3D.apply(A, arguments) + } catch (A) { + console.error("THREE.WebGLState:", A) + } + }, + scissor: function (e) { + !1 === T.equals(e) && (A.scissor(e.x, e.y, e.z, e.w), + T.copy(e)) + }, + viewport: function (e) { + !1 === k.equals(e) && (A.viewport(e.x, e.y, e.z, e.w), + k.copy(e)) + }, + reset: function () { + for (var e = 0; l.length > e; e++) + 1 === l[e] && (A.disableVertexAttribArray(e), + l[e] = 0); + h = {}, + Q = null, + R = {}, + d = null, + u = null, + B = null, + x = null, + o.reset(), + n.reset(), + r.reset() + } + } + } + + function Ji(A, e, t, i, o, n, r) { + var s, l = o.isWebGL2, + c = o.maxTextures, + h = o.maxCubemapSize, + d = o.maxTextureSize, + p = o.maxSamples, + g = new WeakMap, + u = !1; + try { + u = "undefined" != typeof OffscreenCanvas && null !== new OffscreenCanvas(1, 1).getContext("2d") + } catch (A) {} + + function f(A, e) { + return u ? new OffscreenCanvas(A, e) : document.createElementNS("http://www.w3.org/1999/xhtml", "canvas") + } + + function m(A, e, t, i) { + var o = 1; + if ((A.width > i || A.height > i) && (o = i / Math.max(A.width, A.height)), + 1 > o || !0 === e) { + if ("undefined" != typeof HTMLImageElement && A instanceof HTMLImageElement || "undefined" != typeof HTMLCanvasElement && A instanceof HTMLCanvasElement || "undefined" != typeof ImageBitmap && A instanceof ImageBitmap) { + var n = e ? a.floorPowerOfTwo : Math.floor, + r = n(o * A.width), + l = n(o * A.height); + void 0 === s && (s = f(r, l)); + var c = t ? f(r, l) : s; + return c.width = r, + c.height = l, + c.getContext("2d").drawImage(A, 0, 0, r, l), + console.warn("THREE.WebGLRenderer: Texture has been resized from (" + A.width + "x" + A.height + ") to (" + r + "x" + l + ")."), + c + } + return "data" in A && console.warn("THREE.WebGLRenderer: Image in DataTexture is too big (" + A.width + "x" + A.height + ")."), + A + } + return A + } + + function C(A) { + return a.isPowerOfTwo(A.width) && a.isPowerOfTwo(A.height) + } + + function y(A, e) { + return A.generateMipmaps && e && 1003 !== A.minFilter && 1006 !== A.minFilter + } + + function v(e, t, o, n) { + A.generateMipmap(e), + i.get(t).__maxMipLevel = Math.log(Math.max(o, n)) * Math.LOG2E + } + + function I(t, i, o) { + if (!1 === l) + return i; + if (null !== t) { + if (void 0 !== A[t]) + return A[t]; + console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '" + t + "'") + } + var n = i; + return 6403 === i && (5126 === o && (n = 33326), + 5131 === o && (n = 33325), + 5121 === o && (n = 33321)), + 6407 === i && (5126 === o && (n = 34837), + 5131 === o && (n = 34843), + 5121 === o && (n = 32849)), + 6408 === i && (5126 === o && (n = 34836), + 5131 === o && (n = 34842), + 5121 === o && (n = 32856)), + 33325 !== n && 33326 !== n && 34842 !== n && 34836 !== n || e.get("EXT_color_buffer_float"), + n + } + + function E(A) { + return 1003 === A || 1004 === A || 1005 === A ? 9728 : 9729 + } + + function B(e) { + var t = e.target; + t.removeEventListener("dispose", B), + function (e) { + var t = i.get(e); + if (void 0 === t.__webglInit) + return; + A.deleteTexture(t.__webglTexture), + i.remove(e) + }(t), + t.isVideoTexture && g.delete(t), + r.memory.textures-- + } + + function x(e) { + var t = e.target; + t.removeEventListener("dispose", x), + function (e) { + var t = i.get(e), + o = i.get(e.texture); + if (!e) + return; + void 0 !== o.__webglTexture && A.deleteTexture(o.__webglTexture); + e.depthTexture && e.depthTexture.dispose(); + if (e.isWebGLCubeRenderTarget) + for (var n = 0; 6 > n; n++) + A.deleteFramebuffer(t.__webglFramebuffer[n]), + t.__webglDepthbuffer && A.deleteRenderbuffer(t.__webglDepthbuffer[n]); + else + A.deleteFramebuffer(t.__webglFramebuffer), + t.__webglDepthbuffer && A.deleteRenderbuffer(t.__webglDepthbuffer), + t.__webglMultisampledFramebuffer && A.deleteFramebuffer(t.__webglMultisampledFramebuffer), + t.__webglColorRenderbuffer && A.deleteRenderbuffer(t.__webglColorRenderbuffer), + t.__webglDepthRenderbuffer && A.deleteRenderbuffer(t.__webglDepthRenderbuffer); + i.remove(e.texture), + i.remove(e) + }(t), + r.memory.textures-- + } + var S = 0; + + function w(A, e) { + var o = i.get(A); + if (A.isVideoTexture && function (A) { + var e = r.render.frame; + g.get(A) !== e && (g.set(A, e), + A.update()) + }(A), + A.version > 0 && o.__version !== A.version) { + var n = A.image; + if (void 0 === n) + console.warn("THREE.WebGLRenderer: Texture marked for update but image is undefined"); + else { + if (!1 !== n.complete) + return void R(o, A, e); + console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete") + } + } + t.activeTexture(33984 + e), + t.bindTexture(3553, o.__webglTexture) + } + + function M(e, o) { + if (6 === e.image.length) { + var r = i.get(e); + if (e.version > 0 && r.__version !== e.version) { + Q(r, e), + t.activeTexture(33984 + o), + t.bindTexture(34067, r.__webglTexture), + A.pixelStorei(37440, e.flipY); + for (var a = e && (e.isCompressedTexture || e.image[0].isCompressedTexture), s = e.image[0] && e.image[0].isDataTexture, c = [], d = 0; 6 > d; d++) + c[d] = a || s ? s ? e.image[d].image : e.image[d] : m(e.image[d], !1, !0, h); + var p, g = c[0], + u = C(g) || l, + f = n.convert(e.format), + E = n.convert(e.type), + B = I(e.internalFormat, f, E); + if (K(34067, e, u), + a) { + for (d = 0; 6 > d; d++) { + p = c[d].mipmaps; + for (var x = 0; p.length > x; x++) { + var S = p[x]; + 1023 !== e.format && 1022 !== e.format ? null !== f ? t.compressedTexImage2D(34069 + d, x, B, S.width, S.height, 0, S.data) : console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()") : t.texImage2D(34069 + d, x, B, S.width, S.height, 0, f, E, S.data) + } + } + r.__maxMipLevel = p.length - 1 + } else { + p = e.mipmaps; + for (d = 0; 6 > d; d++) + if (s) { + t.texImage2D(34069 + d, 0, B, c[d].width, c[d].height, 0, f, E, c[d].data); + for (x = 0; p.length > x; x++) { + var w = (S = p[x]).image[d].image; + t.texImage2D(34069 + d, x + 1, B, w.width, w.height, 0, f, E, w.data) + } + } else { + t.texImage2D(34069 + d, 0, B, f, E, c[d]); + for (x = 0; p.length > x; x++) { + t.texImage2D(34069 + d, x + 1, B, f, E, (S = p[x]).image[d]) + } + } + r.__maxMipLevel = p.length + } + y(e, u) && v(34067, e, g.width, g.height), + r.__version = e.version, + e.onUpdate && e.onUpdate(e) + } else + t.activeTexture(33984 + o), + t.bindTexture(34067, r.__webglTexture) + } + } + + function b(A, e) { + t.activeTexture(33984 + e), + t.bindTexture(34067, i.get(A).__webglTexture) + } + var U = { + 1e3: 10497, + 1001: 33071, + 1002: 33648 + }, + F = { + 1003: 9728, + 1004: 9984, + 1005: 9986, + 1006: 9729, + 1007: 9985, + 1008: 9987 + }; + + function K(t, n, r) { + r ? (A.texParameteri(t, 10242, U[n.wrapS]), + A.texParameteri(t, 10243, U[n.wrapT]), + 32879 !== t && 35866 !== t || A.texParameteri(t, 32882, U[n.wrapR]), + A.texParameteri(t, 10240, F[n.magFilter]), + A.texParameteri(t, 10241, F[n.minFilter])) : (A.texParameteri(t, 10242, 33071), + A.texParameteri(t, 10243, 33071), + 32879 !== t && 35866 !== t || A.texParameteri(t, 32882, 33071), + 1001 === n.wrapS && 1001 === n.wrapT || console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping."), + A.texParameteri(t, 10240, E(n.magFilter)), + A.texParameteri(t, 10241, E(n.minFilter)), + 1003 !== n.minFilter && 1006 !== n.minFilter && console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.")); + var a = e.get("EXT_texture_filter_anisotropic"); + if (a) { + if (1015 === n.type && null === e.get("OES_texture_float_linear")) + return; + if (1016 === n.type && null === (l || e.get("OES_texture_half_float_linear"))) + return; + (n.anisotropy > 1 || i.get(n).__currentAnisotropy) && (A.texParameterf(t, a.TEXTURE_MAX_ANISOTROPY_EXT, Math.min(n.anisotropy, o.getMaxAnisotropy())), + i.get(n).__currentAnisotropy = n.anisotropy) + } + } + + function Q(e, t) { + void 0 === e.__webglInit && (e.__webglInit = !0, + t.addEventListener("dispose", B), + e.__webglTexture = A.createTexture(), + r.memory.textures++) + } + + function R(e, i, o) { + var r = 3553; + i.isDataTexture2DArray && (r = 35866), + i.isDataTexture3D && (r = 32879), + Q(e, i), + t.activeTexture(33984 + o), + t.bindTexture(r, e.__webglTexture), + A.pixelStorei(37440, i.flipY), + A.pixelStorei(37441, i.premultiplyAlpha), + A.pixelStorei(3317, i.unpackAlignment); + var a = function (A) { + return !l && (1001 !== A.wrapS || 1001 !== A.wrapT || 1003 !== A.minFilter && 1006 !== A.minFilter) + }(i) && !1 === C(i.image), + s = m(i.image, a, !1, d), + c = C(s) || l, + h = n.convert(i.format), + p = n.convert(i.type), + g = I(i.internalFormat, h, p); + K(r, i, c); + var u, f = i.mipmaps; + if (i.isDepthTexture) + g = 6402, + l ? g = 1015 === i.type ? 36012 : 1014 === i.type ? 33190 : 1020 === i.type ? 35056 : 33189 : 1015 === i.type && console.error("WebGLRenderer: Floating point depth texture requires WebGL2."), + 1026 === i.format && 6402 === g && 1012 !== i.type && 1014 !== i.type && (console.warn("THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture."), + i.type = 1012, + p = n.convert(i.type)), + 1027 === i.format && 6402 === g && (g = 34041, + 1020 !== i.type && (console.warn("THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture."), + i.type = 1020, + p = n.convert(i.type))), + t.texImage2D(3553, 0, g, s.width, s.height, 0, h, p, null); + else if (i.isDataTexture) + if (f.length > 0 && c) { + for (var E = 0, B = f.length; B > E; E++) + t.texImage2D(3553, E, g, (u = f[E]).width, u.height, 0, h, p, u.data); + i.generateMipmaps = !1, + e.__maxMipLevel = f.length - 1 + } else + t.texImage2D(3553, 0, g, s.width, s.height, 0, h, p, s.data), + e.__maxMipLevel = 0; + else if (i.isCompressedTexture) { + for (E = 0, + B = f.length; B > E; E++) + u = f[E], + 1023 !== i.format && 1022 !== i.format ? null !== h ? t.compressedTexImage2D(3553, E, g, u.width, u.height, 0, u.data) : console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()") : t.texImage2D(3553, E, g, u.width, u.height, 0, h, p, u.data); + e.__maxMipLevel = f.length - 1 + } else if (i.isDataTexture2DArray) + t.texImage3D(35866, 0, g, s.width, s.height, s.depth, 0, h, p, s.data), + e.__maxMipLevel = 0; + else if (i.isDataTexture3D) + t.texImage3D(32879, 0, g, s.width, s.height, s.depth, 0, h, p, s.data), + e.__maxMipLevel = 0; + else if (f.length > 0 && c) { + for (E = 0, + B = f.length; B > E; E++) + t.texImage2D(3553, E, g, h, p, u = f[E]); + i.generateMipmaps = !1, + e.__maxMipLevel = f.length - 1 + } else + t.texImage2D(3553, 0, g, h, p, s), + e.__maxMipLevel = 0; + y(i, c) && v(r, i, s.width, s.height), + e.__version = i.version, + i.onUpdate && i.onUpdate(i) + } + + function T(e, o, r, a) { + var s = n.convert(o.texture.format), + l = n.convert(o.texture.type), + c = I(o.texture.internalFormat, s, l); + t.texImage2D(a, 0, c, o.width, o.height, 0, s, l, null), + A.bindFramebuffer(36160, e), + A.framebufferTexture2D(36160, r, a, i.get(o.texture).__webglTexture, 0), + A.bindFramebuffer(36160, null) + } + + function k(e, t, i) { + if (A.bindRenderbuffer(36161, e), + t.depthBuffer && !t.stencilBuffer) { + var o = 33189; + if (i) { + var r = t.depthTexture; + r && r.isDepthTexture && (1015 === r.type ? o = 36012 : 1014 === r.type && (o = 33190)); + var a = L(t); + A.renderbufferStorageMultisample(36161, a, o, t.width, t.height) + } else + A.renderbufferStorage(36161, o, t.width, t.height); + A.framebufferRenderbuffer(36160, 36096, 36161, e) + } else if (t.depthBuffer && t.stencilBuffer) { + if (i) { + a = L(t); + A.renderbufferStorageMultisample(36161, a, 35056, t.width, t.height) + } else + A.renderbufferStorage(36161, 34041, t.width, t.height); + A.framebufferRenderbuffer(36160, 33306, 36161, e) + } else { + var s = n.convert(t.texture.format), + l = n.convert(t.texture.type); + o = I(t.texture.internalFormat, s, l); + if (i) { + a = L(t); + A.renderbufferStorageMultisample(36161, a, o, t.width, t.height) + } else + A.renderbufferStorage(36161, o, t.width, t.height) + } + A.bindRenderbuffer(36161, null) + } + + function D(e) { + var t = i.get(e), + o = !0 === e.isWebGLCubeRenderTarget; + if (e.depthTexture) { + if (o) + throw new Error("target.depthTexture not supported in Cube render targets"); + ! function (e, t) { + if (t && t.isWebGLCubeRenderTarget) + throw new Error("Depth Texture with cube render targets is not supported"); + if (A.bindFramebuffer(36160, e), + !t.depthTexture || !t.depthTexture.isDepthTexture) + throw new Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture"); + i.get(t.depthTexture).__webglTexture && t.depthTexture.image.width === t.width && t.depthTexture.image.height === t.height || (t.depthTexture.image.width = t.width, + t.depthTexture.image.height = t.height, + t.depthTexture.needsUpdate = !0), + w(t.depthTexture, 0); + var o = i.get(t.depthTexture).__webglTexture; + if (1026 === t.depthTexture.format) + A.framebufferTexture2D(36160, 36096, 3553, o, 0); + else { + if (1027 !== t.depthTexture.format) + throw new Error("Unknown depthTexture format"); + A.framebufferTexture2D(36160, 33306, 3553, o, 0) + } + }(t.__webglFramebuffer, e) + } else if (o) { + t.__webglDepthbuffer = []; + for (var n = 0; 6 > n; n++) + A.bindFramebuffer(36160, t.__webglFramebuffer[n]), + t.__webglDepthbuffer[n] = A.createRenderbuffer(), + k(t.__webglDepthbuffer[n], e, !1) + } else + A.bindFramebuffer(36160, t.__webglFramebuffer), + t.__webglDepthbuffer = A.createRenderbuffer(), + k(t.__webglDepthbuffer, e, !1); + A.bindFramebuffer(36160, null) + } + + function L(A) { + return l && A.isWebGLMultisampleRenderTarget ? Math.min(p, A.samples) : 0 + } + var N = !1, + O = !1; + this.allocateTextureUnit = function () { + var A = S; + return c > A || console.warn("THREE.WebGLTextures: Trying to use " + A + " texture units while this GPU supports only " + c), + S += 1, + A + }, + this.resetTextureUnits = function () { + S = 0 + }, + this.setTexture2D = w, + this.setTexture2DArray = function (A, e) { + var o = i.get(A); + A.version > 0 && o.__version !== A.version ? R(o, A, e) : (t.activeTexture(33984 + e), + t.bindTexture(35866, o.__webglTexture)) + }, + this.setTexture3D = function (A, e) { + var o = i.get(A); + A.version > 0 && o.__version !== A.version ? R(o, A, e) : (t.activeTexture(33984 + e), + t.bindTexture(32879, o.__webglTexture)) + }, + this.setTextureCube = M, + this.setTextureCubeDynamic = b, + this.setupRenderTarget = function (e) { + var o = i.get(e), + a = i.get(e.texture); + e.addEventListener("dispose", x), + a.__webglTexture = A.createTexture(), + r.memory.textures++; + var s = !0 === e.isWebGLCubeRenderTarget, + c = !0 === e.isWebGLMultisampleRenderTarget, + h = C(e) || l; + if (!l || 1022 !== e.texture.format || 1015 !== e.texture.type && 1016 !== e.texture.type || (e.texture.format = 1023, + console.warn("THREE.WebGLRenderer: Rendering to textures with RGB format is not supported. Using RGBA format instead.")), + s) { + o.__webglFramebuffer = []; + for (var d = 0; 6 > d; d++) + o.__webglFramebuffer[d] = A.createFramebuffer() + } else if (o.__webglFramebuffer = A.createFramebuffer(), + c) + if (l) { + o.__webglMultisampledFramebuffer = A.createFramebuffer(), + o.__webglColorRenderbuffer = A.createRenderbuffer(), + A.bindRenderbuffer(36161, o.__webglColorRenderbuffer); + var p = n.convert(e.texture.format), + g = n.convert(e.texture.type), + u = I(e.texture.internalFormat, p, g), + f = L(e); + A.renderbufferStorageMultisample(36161, f, u, e.width, e.height), + A.bindFramebuffer(36160, o.__webglMultisampledFramebuffer), + A.framebufferRenderbuffer(36160, 36064, 36161, o.__webglColorRenderbuffer), + A.bindRenderbuffer(36161, null), + e.depthBuffer && (o.__webglDepthRenderbuffer = A.createRenderbuffer(), + k(o.__webglDepthRenderbuffer, e, !0)), + A.bindFramebuffer(36160, null) + } else + console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2."); + if (s) { + t.bindTexture(34067, a.__webglTexture), + K(34067, e.texture, h); + for (d = 0; 6 > d; d++) + T(o.__webglFramebuffer[d], e, 36064, 34069 + d); + y(e.texture, h) && v(34067, e.texture, e.width, e.height), + t.bindTexture(34067, null) + } else + t.bindTexture(3553, a.__webglTexture), + K(3553, e.texture, h), + T(o.__webglFramebuffer, e, 36064, 3553), + y(e.texture, h) && v(3553, e.texture, e.width, e.height), + t.bindTexture(3553, null); + e.depthBuffer && D(e) + }, + this.updateRenderTargetMipmap = function (A) { + var e = A.texture; + if (y(e, C(A) || l)) { + var o = A.isWebGLCubeRenderTarget ? 34067 : 3553, + n = i.get(e).__webglTexture; + t.bindTexture(o, n), + v(o, e, A.width, A.height), + t.bindTexture(o, null) + } + }, + this.updateMultisampleRenderTarget = function (e) { + if (e.isWebGLMultisampleRenderTarget) + if (l) { + var t = i.get(e); + A.bindFramebuffer(36008, t.__webglMultisampledFramebuffer), + A.bindFramebuffer(36009, t.__webglFramebuffer); + var o = e.width, + n = e.height, + r = 16384; + e.depthBuffer && (r |= 256), + e.stencilBuffer && (r |= 1024), + A.blitFramebuffer(0, 0, o, n, 0, 0, o, n, r, 9728), + A.bindFramebuffer(36160, t.__webglMultisampledFramebuffer) + } else + console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.") + }, + this.safeSetTexture2D = function (A, e) { + A && A.isWebGLRenderTarget && (!1 === N && (console.warn("THREE.WebGLTextures.safeSetTexture2D: don't use render targets as textures. Use their .texture property instead."), + N = !0), + A = A.texture), + w(A, e) + }, + this.safeSetTextureCube = function (A, e) { + A && A.isWebGLCubeRenderTarget && (!1 === O && (console.warn("THREE.WebGLTextures.safeSetTextureCube: don't use cube render targets as textures. Use their .texture property instead."), + O = !0), + A = A.texture), + A && A.isCubeTexture || Array.isArray(A.image) && 6 === A.image.length ? M(A, e) : b(A, e) + } + } + + function zi(A, e, t) { + var i = t.isWebGL2; + return { + convert: function (A) { + var t; + if (1009 === A) + return 5121; + if (1017 === A) + return 32819; + if (1018 === A) + return 32820; + if (1019 === A) + return 33635; + if (1010 === A) + return 5120; + if (1011 === A) + return 5122; + if (1012 === A) + return 5123; + if (1013 === A) + return 5124; + if (1014 === A) + return 5125; + if (1015 === A) + return 5126; + if (1016 === A) + return i ? 5131 : null !== (t = e.get("OES_texture_half_float")) ? t.HALF_FLOAT_OES : null; + if (1021 === A) + return 6406; + if (1022 === A) + return 6407; + if (1023 === A) + return 6408; + if (1024 === A) + return 6409; + if (1025 === A) + return 6410; + if (1026 === A) + return 6402; + if (1027 === A) + return 34041; + if (1028 === A) + return 6403; + if (1029 === A) + return 36244; + if (1030 === A) + return 33319; + if (1031 === A) + return 33320; + if (1032 === A) + return 36248; + if (1033 === A) + return 36249; + if (33776 === A || 33777 === A || 33778 === A || 33779 === A) { + if (null === (t = e.get("WEBGL_compressed_texture_s3tc"))) + return null; + if (33776 === A) + return t.COMPRESSED_RGB_S3TC_DXT1_EXT; + if (33777 === A) + return t.COMPRESSED_RGBA_S3TC_DXT1_EXT; + if (33778 === A) + return t.COMPRESSED_RGBA_S3TC_DXT3_EXT; + if (33779 === A) + return t.COMPRESSED_RGBA_S3TC_DXT5_EXT + } + if (35840 === A || 35841 === A || 35842 === A || 35843 === A) { + if (null === (t = e.get("WEBGL_compressed_texture_pvrtc"))) + return null; + if (35840 === A) + return t.COMPRESSED_RGB_PVRTC_4BPPV1_IMG; + if (35841 === A) + return t.COMPRESSED_RGB_PVRTC_2BPPV1_IMG; + if (35842 === A) + return t.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG; + if (35843 === A) + return t.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG + } + if (36196 === A) + return null !== (t = e.get("WEBGL_compressed_texture_etc1")) ? t.COMPRESSED_RGB_ETC1_WEBGL : null; + if ((37492 === A || 37496 === A) && null !== (t = e.get("WEBGL_compressed_texture_etc"))) { + if (37492 === A) + return t.COMPRESSED_RGB8_ETC2; + if (37496 === A) + return t.COMPRESSED_RGBA8_ETC2_EAC + } + return 37808 === A || 37809 === A || 37810 === A || 37811 === A || 37812 === A || 37813 === A || 37814 === A || 37815 === A || 37816 === A || 37817 === A || 37818 === A || 37819 === A || 37820 === A || 37821 === A || 37840 === A || 37841 === A || 37842 === A || 37843 === A || 37844 === A || 37845 === A || 37846 === A || 37847 === A || 37848 === A || 37849 === A || 37850 === A || 37851 === A || 37852 === A || 37853 === A ? null !== (t = e.get("WEBGL_compressed_texture_astc")) ? A : null : 36492 === A ? null !== (t = e.get("EXT_texture_compression_bptc")) ? A : null : 1020 === A ? i ? 34042 : null !== (t = e.get("WEBGL_depth_texture")) ? t.UNSIGNED_INT_24_8_WEBGL : null : void 0 + } + } + } + + function Zi(A) { + je.call(this), + this.cameras = A || [] + } + + function Xi() { + H.call(this), + this.type = "Group" + } + + function _i(A, e) { + var t = this, + i = null, + o = 1, + n = null, + r = "local-floor", + a = null, + s = [], + l = new Map, + c = new je; + c.layers.enable(1), + c.viewport = new p; + var h = new je; + h.layers.enable(2), + h.viewport = new p; + var d = new Zi([c, h]); + d.layers.enable(1), + d.layers.enable(2); + var g = null, + u = null; + + function f(A) { + var e = l.get(A.inputSource); + e && (e.targetRay && e.targetRay.dispatchEvent({ + type: A.type + }), + e.grip && e.grip.dispatchEvent({ + type: A.type + })) + } + + function m() { + l.forEach((function (A, e) { + A.targetRay && (A.targetRay.dispatchEvent({ + type: "disconnected", + data: e + }), + A.targetRay.visible = !1), + A.grip && (A.grip.dispatchEvent({ + type: "disconnected", + data: e + }), + A.grip.visible = !1) + })), + l.clear(), + A.setFramebuffer(null), + A.setRenderTarget(A.getRenderTarget()), + S.stop(), + t.isPresenting = !1, + t.dispatchEvent({ + type: "sessionend" + }) + } + + function C(A) { + n = A, + S.setContext(i), + S.start(), + t.isPresenting = !0, + t.dispatchEvent({ + type: "sessionstart" + }) + } + + function v(A) { + for (var e = i.inputSources, t = 0; s.length > t; t++) + l.set(e[t], s[t]); + for (t = 0; A.removed.length > t; t++) { + (n = l.get(o = A.removed[t])) && (n.targetRay && n.targetRay.dispatchEvent({ + type: "disconnected", + data: o + }), + n.grip && n.grip.dispatchEvent({ + type: "disconnected", + data: o + }), + l.delete(o)) + } + for (t = 0; A.added.length > t; t++) { + var o, n; + (n = l.get(o = A.added[t])) && (n.targetRay && n.targetRay.dispatchEvent({ + type: "connected", + data: o + }), + n.grip && n.grip.dispatchEvent({ + type: "connected", + data: o + })) + } + } + this.enabled = !1, + this.isPresenting = !1, + this.getController = function (A) { + var e = s[A]; + return void 0 === e && (s[A] = e = {}), + void 0 === e.targetRay && (e.targetRay = new Xi, + e.targetRay.matrixAutoUpdate = !1, + e.targetRay.visible = !1), + e.targetRay + }, + this.getControllerGrip = function (A) { + var e = s[A]; + return void 0 === e && (s[A] = e = {}), + void 0 === e.grip && (e.grip = new Xi, + e.grip.matrixAutoUpdate = !1, + e.grip.visible = !1), + e.grip + }, + this.setFramebufferScaleFactor = function (A) { + o = A, + 1 == t.isPresenting && console.warn("WebXRManager: Cannot change framebuffer scale while presenting VR content") + }, + this.setReferenceSpaceType = function (A) { + r = A + }, + this.getReferenceSpace = function () { + return n + }, + this.getSession = function () { + return i + }, + this.setSession = function (A) { + if (null !== (i = A)) { + i.addEventListener("select", f), + i.addEventListener("selectstart", f), + i.addEventListener("selectend", f), + i.addEventListener("squeeze", f), + i.addEventListener("squeezestart", f), + i.addEventListener("squeezeend", f), + i.addEventListener("end", m); + var t = e.getContextAttributes(), + n = new XRWebGLLayer(i, e, { + antialias: t.antialias, + alpha: t.alpha, + depth: t.depth, + stencil: t.stencil, + framebufferScaleFactor: o + }); + i.updateRenderState({ + baseLayer: n + }), + i.requestReferenceSpace(r).then(C), + i.addEventListener("inputsourceschange", v) + } + }; + var I = new y, + E = new y; + + function B(A, e) { + null === e ? A.matrixWorld.copy(A.matrix) : A.matrixWorld.multiplyMatrices(e.matrixWorld, A.matrix), + A.matrixWorldInverse.getInverse(A.matrixWorld) + } + this.getCamera = function (A) { + d.near = h.near = c.near = A.near, + d.far = h.far = c.far = A.far, + g === d.near && u === d.far || (i.updateRenderState({ + depthNear: d.near, + depthFar: d.far + }), + g = d.near, + u = d.far); + var e = A.parent, + t = d.cameras; + B(d, e); + for (var o = 0; t.length > o; o++) + B(t[o], e); + A.matrixWorld.copy(d.matrixWorld); + for (var n = A.children, r = (o = 0, + n.length); r > o; o++) + n[o].updateMatrixWorld(!0); + return function (A, e, t) { + I.setFromMatrixPosition(e.matrixWorld), + E.setFromMatrixPosition(t.matrixWorld); + var i = I.distanceTo(E), + o = e.projectionMatrix.elements, + n = t.projectionMatrix.elements, + r = o[14] / (o[10] - 1), + a = o[14] / (o[10] + 1), + s = (o[9] + 1) / o[5], + l = (o[9] - 1) / o[5], + c = (o[8] - 1) / o[0], + h = (n[8] + 1) / n[0], + d = r * c, + p = r * h, + g = i / (-c + h), + u = g * -c; + e.matrixWorld.decompose(A.position, A.quaternion, A.scale), + A.translateX(u), + A.translateZ(g), + A.matrixWorld.compose(A.position, A.quaternion, A.scale), + A.matrixWorldInverse.getInverse(A.matrixWorld); + var f = r + g, + m = a + g; + A.projectionMatrix.makePerspective(d - u, p + (i - u), s * a / m * f, l * a / m * f, f, m) + }(d, c, h), + d + }; + var x = null; + var S = new _e; + S.setAnimationLoop((function (e, t) { + if (null !== (a = t.getViewerPose(n))) { + var o = a.views, + r = i.renderState.baseLayer; + A.setFramebuffer(r.framebuffer); + for (var l = 0; o.length > l; l++) { + var c = o[l], + h = r.getViewport(c), + p = d.cameras[l]; + p.matrix.fromArray(c.transform.matrix), + p.projectionMatrix.fromArray(c.projectionMatrix), + p.viewport.set(h.x, h.y, h.width, h.height), + 0 === l && d.matrix.copy(p.matrix) + } + } + var g = i.inputSources; + for (l = 0; s.length > l; l++) { + var u = s[l], + f = g[l], + m = null, + C = null; + f && (u.targetRay && null !== (m = t.getPose(f.targetRaySpace, n)) && (u.targetRay.matrix.fromArray(m.transform.matrix), + u.targetRay.matrix.decompose(u.targetRay.position, u.targetRay.rotation, u.targetRay.scale)), + u.grip && f.gripSpace && null !== (C = t.getPose(f.gripSpace, n)) && (u.grip.matrix.fromArray(C.transform.matrix), + u.grip.matrix.decompose(u.grip.position, u.grip.rotation, u.grip.scale))), + u.targetRay && (u.targetRay.visible = null !== m), + u.grip && (u.grip.visible = null !== C) + } + x && x(e, t) + })), + this.setAnimationLoop = function (A) { + x = A + }, + this.dispose = function () {} + } + + function $i(A) { + var e = void 0 !== (A = A || {}).canvas ? A.canvas : document.createElementNS("http://www.w3.org/1999/xhtml", "canvas"), + t = void 0 !== A.context ? A.context : null, + i = void 0 !== A.alpha && A.alpha, + o = void 0 === A.depth || A.depth, + n = void 0 === A.stencil || A.stencil, + r = void 0 !== A.antialias && A.antialias, + l = void 0 === A.premultipliedAlpha || A.premultipliedAlpha, + c = void 0 !== A.preserveDrawingBuffer && A.preserveDrawingBuffer, + h = void 0 !== A.powerPreference ? A.powerPreference : "default", + d = void 0 !== A.failIfMajorPerformanceCaveat && A.failIfMajorPerformanceCaveat, + g = null, + u = null; + this.domElement = e, + this.debug = { + checkShaderErrors: !0 + }, + this.autoClear = !0, + this.autoClearColor = !0, + this.autoClearDepth = !0, + this.autoClearStencil = !0, + this.sortObjects = !0, + this.clippingPlanes = [], + this.localClippingEnabled = !1, + this.gammaFactor = 2, + this.outputEncoding = 3e3, + this.physicallyCorrectLights = !1, + this.toneMapping = 1, + this.toneMappingExposure = 1, + this.toneMappingWhitePoint = 1, + this.maxMorphTargets = 8, + this.maxMorphNormals = 4; + var f, m, C, v, I, E, B, x, S, w, b, U, F, K, Q, R, T, k, D = this, + L = !1, + N = null, + O = 0, + V = 0, + G = null, + P = null, + q = -1, + j = { + geometry: null, + program: null, + wireframe: !1 + }, + H = null, + W = null, + J = new p, + z = new p, + Z = null, + X = e.width, + _ = e.height, + $ = 1, + AA = null, + eA = null, + tA = new p(0, 0, X, _), + iA = new p(0, 0, X, _), + oA = !1, + nA = new Ze, + rA = new at, + aA = !1, + sA = !1, + lA = new M, + cA = new y; + + function hA() { + return null === G ? $ : 1 + } + try { + var dA = { + alpha: i, + depth: o, + stencil: n, + antialias: r, + premultipliedAlpha: l, + preserveDrawingBuffer: c, + powerPreference: h, + failIfMajorPerformanceCaveat: d, + xrCompatible: !0 + }; + if (e.addEventListener("webglcontextlost", fA, !1), + e.addEventListener("webglcontextrestored", mA, !1), + null === (f = t || e.getContext("webgl", dA) || e.getContext("experimental-webgl", dA))) + throw null !== e.getContext("webgl") ? new Error("Error creating WebGL context with your selected attributes.") : new Error("Error creating WebGL context."); + void 0 === f.getShaderPrecisionFormat && (f.getShaderPrecisionFormat = function () { + return { + rangeMin: 1, + rangeMax: 1, + precision: 1 + } + }) + } catch (A) { + throw console.error("THREE.WebGLRenderer: " + A.message), + A + } + + function pA() { + m = new st(f), + !1 === (C = new rt(f, m, A)).isWebGL2 && (m.get("WEBGL_depth_texture"), + m.get("OES_texture_float"), + m.get("OES_texture_half_float"), + m.get("OES_texture_half_float_linear"), + m.get("OES_standard_derivatives"), + m.get("OES_element_index_uint"), + m.get("ANGLE_instanced_arrays")), + m.get("OES_texture_float_linear"), + k = new zi(f, m, C), + (v = new Wi(f, m, C)).scissor(z.copy(iA).multiplyScalar($).floor()), + v.viewport(J.copy(tA).multiplyScalar($).floor()), + I = new ht(f), + E = new Ri, + B = new Ji(f, m, v, E, C, k, I), + x = new $e(f, C), + S = new lt(f, x, I), + w = new gt(f, S, x, I), + Q = new pt(f), + b = new Qi(D, m, C), + U = new Li, + F = new qi, + K = new ot(D, v, w, l), + R = new nt(f, m, I, C), + T = new ct(f, m, I, C), + I.programs = b.programs, + D.capabilities = C, + D.extensions = m, + D.properties = E, + D.renderLists = U, + D.state = v, + D.info = I + } + pA(); + var gA = new _i(D, f); + this.xr = gA; + var uA = new Yi(D, w, C.maxTextureSize); + + function fA(A) { + A.preventDefault(), + console.log("THREE.WebGLRenderer: Context Lost."), + L = !0 + } + + function mA() { + console.log("THREE.WebGLRenderer: Context Restored."), + L = !1, + pA() + } + + function CA(A) { + var e = A.target; + e.removeEventListener("dispose", CA), + function (A) { + yA(A), + E.remove(A) + }(e) + } + + function yA(A) { + var e = E.get(A).program; + A.program = void 0, + void 0 !== e && b.releaseProgram(e) + } + this.shadowMap = uA, + this.getContext = function () { + return f + }, + this.getContextAttributes = function () { + return f.getContextAttributes() + }, + this.forceContextLoss = function () { + var A = m.get("WEBGL_lose_context"); + A && A.loseContext() + }, + this.forceContextRestore = function () { + var A = m.get("WEBGL_lose_context"); + A && A.restoreContext() + }, + this.getPixelRatio = function () { + return $ + }, + this.setPixelRatio = function (A) { + void 0 !== A && ($ = A, + this.setSize(X, _, !1)) + }, + this.getSize = function (A) { + return void 0 === A && (console.warn("WebGLRenderer: .getsize() now requires a Vector2 as an argument"), + A = new s), + A.set(X, _) + }, + this.setSize = function (A, t, i) { + gA.isPresenting ? console.warn("THREE.WebGLRenderer: Can't change size while VR device is presenting.") : (X = A, + _ = t, + e.width = Math.floor(A * $), + e.height = Math.floor(t * $), + !1 !== i && (e.style.width = A + "px", + e.style.height = t + "px"), + this.setViewport(0, 0, A, t)) + }, + this.getDrawingBufferSize = function (A) { + return void 0 === A && (console.warn("WebGLRenderer: .getdrawingBufferSize() now requires a Vector2 as an argument"), + A = new s), + A.set(X * $, _ * $).floor() + }, + this.setDrawingBufferSize = function (A, t, i) { + X = A, + _ = t, + $ = i, + e.width = Math.floor(A * i), + e.height = Math.floor(t * i), + this.setViewport(0, 0, A, t) + }, + this.getCurrentViewport = function (A) { + return void 0 === A && (console.warn("WebGLRenderer: .getCurrentViewport() now requires a Vector4 as an argument"), + A = new p), + A.copy(J) + }, + this.getViewport = function (A) { + return A.copy(tA) + }, + this.setViewport = function (A, e, t, i) { + A.isVector4 ? tA.set(A.x, A.y, A.z, A.w) : tA.set(A, e, t, i), + v.viewport(J.copy(tA).multiplyScalar($).floor()) + }, + this.getScissor = function (A) { + return A.copy(iA) + }, + this.setScissor = function (A, e, t, i) { + A.isVector4 ? iA.set(A.x, A.y, A.z, A.w) : iA.set(A, e, t, i), + v.scissor(z.copy(iA).multiplyScalar($).floor()) + }, + this.getScissorTest = function () { + return oA + }, + this.setScissorTest = function (A) { + v.setScissorTest(oA = A) + }, + this.setOpaqueSort = function (A) { + AA = A + }, + this.setTransparentSort = function (A) { + eA = A + }, + this.getClearColor = function () { + return K.getClearColor() + }, + this.setClearColor = function () { + K.setClearColor.apply(K, arguments) + }, + this.getClearAlpha = function () { + return K.getClearAlpha() + }, + this.setClearAlpha = function () { + K.setClearAlpha.apply(K, arguments) + }, + this.clear = function (A, e, t) { + var i = 0; + (void 0 === A || A) && (i |= 16384), + (void 0 === e || e) && (i |= 256), + (void 0 === t || t) && (i |= 1024), + f.clear(i) + }, + this.clearColor = function () { + this.clear(!0, !1, !1) + }, + this.clearDepth = function () { + this.clear(!1, !0, !1) + }, + this.clearStencil = function () { + this.clear(!1, !1, !0) + }, + this.dispose = function () { + e.removeEventListener("webglcontextlost", fA, !1), + e.removeEventListener("webglcontextrestored", mA, !1), + U.dispose(), + F.dispose(), + E.dispose(), + w.dispose(), + gA.dispose(), + EA.stop(), + this.forceContextLoss() + }, + this.renderBufferImmediate = function (A, e) { + v.initAttributes(); + var t = E.get(A); + A.hasPositions && !t.position && (t.position = f.createBuffer()), + A.hasNormals && !t.normal && (t.normal = f.createBuffer()), + A.hasUvs && !t.uv && (t.uv = f.createBuffer()), + A.hasColors && !t.color && (t.color = f.createBuffer()); + var i = e.getAttributes(); + A.hasPositions && (f.bindBuffer(34962, t.position), + f.bufferData(34962, A.positionArray, 35048), + v.enableAttribute(i.position), + f.vertexAttribPointer(i.position, 3, 5126, !1, 0, 0)), + A.hasNormals && (f.bindBuffer(34962, t.normal), + f.bufferData(34962, A.normalArray, 35048), + v.enableAttribute(i.normal), + f.vertexAttribPointer(i.normal, 3, 5126, !1, 0, 0)), + A.hasUvs && (f.bindBuffer(34962, t.uv), + f.bufferData(34962, A.uvArray, 35048), + v.enableAttribute(i.uv), + f.vertexAttribPointer(i.uv, 2, 5126, !1, 0, 0)), + A.hasColors && (f.bindBuffer(34962, t.color), + f.bufferData(34962, A.colorArray, 35048), + v.enableAttribute(i.color), + f.vertexAttribPointer(i.color, 3, 5126, !1, 0, 0)), + v.disableUnusedAttributes(), + f.drawArrays(4, 0, A.count), + A.count = 0 + }; + var vA = new Y; + this.renderBufferDirect = function (A, e, t, i, o, n) { + null === e && (e = vA); + var r = o.isMesh && 0 > o.matrixWorld.determinant(), + a = MA(A, e, i, o); + v.setMaterial(i, r); + var s = !1; + j.geometry === t.id && j.program === a.id && j.wireframe === (!0 === i.wireframe) || (j.geometry = t.id, + j.program = a.id, + j.wireframe = !0 === i.wireframe, + s = !0), + (i.morphTargets || i.morphNormals) && (Q.update(o, t, i, a), + s = !0); + var l = t.index, + c = t.attributes.position; + if (null === l) { + if (void 0 === c || 0 === c.count) + return + } else if (0 === l.count) + return; + var h, d = 1; + !0 === i.wireframe && (l = S.getWireframeAttribute(t), + d = 2); + var p = R; + null !== l && (h = x.get(l), + (p = T).setIndex(h)), + s && (! function (A, e, t, i) { + if (!1 === C.isWebGL2 && (A.isInstancedMesh || e.isInstancedBufferGeometry) && null === m.get("ANGLE_instanced_arrays")) + return; + v.initAttributes(); + var o = e.attributes, + n = i.getAttributes(), + r = t.defaultAttributeValues; + for (var a in n) { + var s = n[a]; + if (s >= 0) { + var l = o[a]; + if (void 0 !== l) { + var c = l.normalized, + h = l.itemSize; + if (void 0 === (E = x.get(l))) + continue; + var d = E.buffer, + p = E.type, + g = E.bytesPerElement; + if (l.isInterleavedBufferAttribute) { + var u = l.data, + y = u.stride, + I = l.offset; + u && u.isInstancedInterleavedBuffer ? (v.enableAttributeAndDivisor(s, u.meshPerAttribute), + void 0 === e.maxInstancedCount && (e.maxInstancedCount = u.meshPerAttribute * u.count)) : v.enableAttribute(s), + f.bindBuffer(34962, d), + f.vertexAttribPointer(s, h, p, c, y * g, I * g) + } else + l.isInstancedBufferAttribute ? (v.enableAttributeAndDivisor(s, l.meshPerAttribute), + void 0 === e.maxInstancedCount && (e.maxInstancedCount = l.meshPerAttribute * l.count)) : v.enableAttribute(s), + f.bindBuffer(34962, d), + f.vertexAttribPointer(s, h, p, c, 0, 0) + } else if ("instanceMatrix" === a) { + var E; + if (void 0 === (E = x.get(A.instanceMatrix))) + continue; + d = E.buffer, + p = E.type; + v.enableAttributeAndDivisor(s + 0, 1), + v.enableAttributeAndDivisor(s + 1, 1), + v.enableAttributeAndDivisor(s + 2, 1), + v.enableAttributeAndDivisor(s + 3, 1), + f.bindBuffer(34962, d), + f.vertexAttribPointer(s + 0, 4, p, !1, 64, 0), + f.vertexAttribPointer(s + 1, 4, p, !1, 64, 16), + f.vertexAttribPointer(s + 2, 4, p, !1, 64, 32), + f.vertexAttribPointer(s + 3, 4, p, !1, 64, 48) + } else if (void 0 !== r) { + var B = r[a]; + if (void 0 !== B) + switch (B.length) { + case 2: + f.vertexAttrib2fv(s, B); + break; + case 3: + f.vertexAttrib3fv(s, B); + break; + case 4: + f.vertexAttrib4fv(s, B); + break; + default: + f.vertexAttrib1fv(s, B) + } + } + } + } + v.disableUnusedAttributes() + }(o, t, i, a), + null !== l && f.bindBuffer(34963, h.buffer)); + var g = null !== l ? l.count : c.count, + u = t.drawRange.start * d, + y = t.drawRange.count * d, + I = null !== n ? n.start * d : 0, + E = null !== n ? n.count * d : 1 / 0, + B = Math.max(u, I), + w = Math.min(g, u + y, I + E) - 1, + M = Math.max(0, w - B + 1); + if (0 !== M) { + if (o.isMesh) + !0 === i.wireframe ? (v.setLineWidth(i.wireframeLinewidth * hA()), + p.setMode(1)) : p.setMode(4); + else if (o.isLine) { + var b = i.linewidth; + void 0 === b && (b = 1), + v.setLineWidth(b * hA()), + p.setMode(o.isLineSegments ? 1 : o.isLineLoop ? 2 : 3) + } else + o.isPoints ? p.setMode(0) : o.isSprite && p.setMode(4); + o.isInstancedMesh ? p.renderInstances(t, B, M, o.count) : t.isInstancedBufferGeometry ? p.renderInstances(t, B, M, t.maxInstancedCount) : p.render(B, M) + } + }, + this.compile = function (A, e) { + (u = F.get(A, e)).init(), + A.traverse((function (A) { + A.isLight && (u.pushLight(A), + A.castShadow && u.pushShadow(A)) + })), + u.setupLights(e); + var t = {}; + A.traverse((function (e) { + if (e.material) + if (Array.isArray(e.material)) + for (var i = 0; e.material.length > i; i++) + e.material[i].uuid in t == !1 && (wA(e.material[i], A, e), + t[e.material[i].uuid] = !0); + else + e.material.uuid in t == !1 && (wA(e.material, A, e), + t[e.material.uuid] = !0) + })) + }; + var IA = null; + var EA = new _e; + + function BA(A, e, t, i) { + if (!1 !== A.visible) { + if (A.layers.test(e.layers)) + if (A.isGroup) + t = A.renderOrder; + else if (A.isLOD) + !0 === A.autoUpdate && A.update(e); + else if (A.isLight) + u.pushLight(A), + A.castShadow && u.pushShadow(A); + else if (A.isSprite) { + if (!A.frustumCulled || nA.intersectsSprite(A)) { + i && cA.setFromMatrixPosition(A.matrixWorld).applyMatrix4(lA); + var o = w.update(A); + (n = A.material).visible && g.push(A, o, n, t, cA.z, null) + } + } else if (A.isImmediateRenderObject) + i && cA.setFromMatrixPosition(A.matrixWorld).applyMatrix4(lA), + g.push(A, null, A.material, t, cA.z, null); + else if ((A.isMesh || A.isLine || A.isPoints) && (A.isSkinnedMesh && A.skeleton.frame !== I.render.frame && (A.skeleton.update(), + A.skeleton.frame = I.render.frame), + !A.frustumCulled || nA.intersectsObject(A))) { + i && cA.setFromMatrixPosition(A.matrixWorld).applyMatrix4(lA); + o = w.update(A); + var n = A.material; + if (Array.isArray(n)) + for (var r = o.groups, a = 0, s = r.length; s > a; a++) { + var l = r[a], + c = n[l.materialIndex]; + c && c.visible && g.push(A, o, c, t, cA.z, l) + } + else + n.visible && g.push(A, o, n, t, cA.z, null) + } + var h = A.children; + for (a = 0, + s = h.length; s > a; a++) + BA(h[a], e, t, i) + } + } + + function xA(A, e, t, i) { + for (var o = 0, n = A.length; n > o; o++) { + var r = A[o], + a = r.object, + s = r.geometry, + l = void 0 === i ? r.material : i, + c = r.group; + if (t.isArrayCamera) { + W = t; + for (var h = t.cameras, d = 0, p = h.length; p > d; d++) { + var g = h[d]; + a.layers.test(g.layers) && (v.viewport(J.copy(g.viewport)), + u.setupLights(g), + SA(a, e, g, s, l, c)) + } + } else + W = null, + SA(a, e, t, s, l, c) + } + } + + function SA(A, e, t, i, o, n) { + if (A.onBeforeRender(D, e, t, i, o, n), + u = F.get(e, W || t), + A.modelViewMatrix.multiplyMatrices(t.matrixWorldInverse, A.matrixWorld), + A.normalMatrix.getNormalMatrix(A.modelViewMatrix), + A.isImmediateRenderObject) { + var r = MA(t, e, o, A); + v.setMaterial(o), + j.geometry = null, + j.program = null, + j.wireframe = !1, + function (A, e) { + A.render((function (A) { + D.renderBufferImmediate(A, e) + })) + }(A, r) + } else + D.renderBufferDirect(t, e, i, o, A, n); + A.onAfterRender(D, e, t, i, o, n), + u = F.get(e, W || t) + } + + function wA(A, e, t) { + var i = E.get(A), + o = u.state.lights, + n = o.state.version, + r = b.getParameters(A, o.state, u.state.shadowsArray, e, rA.numPlanes, rA.numIntersection, t), + a = b.getProgramCacheKey(r), + s = i.program, + l = !0; + if (void 0 === s) + A.addEventListener("dispose", CA); + else if (s.cacheKey !== a) + yA(A); + else if (i.lightsStateVersion !== n) + i.lightsStateVersion = n, + l = !1; + else { + if (void 0 !== r.shaderID) + return; + l = !1 + } + l && (s = b.acquireProgram(r, a), + i.program = s, + i.uniforms = r.uniforms, + i.environment = A.isMeshStandardMaterial ? e.environment : null, + i.outputEncoding = D.outputEncoding, + A.program = s); + var c = s.getAttributes(); + if (A.morphTargets) { + A.numSupportedMorphTargets = 0; + for (var h = 0; D.maxMorphTargets > h; h++) + 0 > c["morphTarget" + h] || A.numSupportedMorphTargets++ + } + if (A.morphNormals) { + A.numSupportedMorphNormals = 0; + for (h = 0; D.maxMorphNormals > h; h++) + 0 > c["morphNormal" + h] || A.numSupportedMorphNormals++ + } + var d = i.uniforms; + (A.isShaderMaterial || A.isRawShaderMaterial) && !0 !== A.clipping || (i.numClippingPlanes = rA.numPlanes, + i.numIntersection = rA.numIntersection, + d.clippingPlanes = rA.uniform), + i.fog = e.fog, + i.needsLights = function (A) { + return A.isMeshLambertMaterial || A.isMeshToonMaterial || A.isMeshPhongMaterial || A.isMeshStandardMaterial || A.isShadowMaterial || A.isShaderMaterial && !0 === A.lights + }(A), + i.lightsStateVersion = n, + i.needsLights && (d.ambientLightColor.value = o.state.ambient, + d.lightProbe.value = o.state.probe, + d.directionalLights.value = o.state.directional, + d.directionalLightShadows.value = o.state.directionalShadow, + d.spotLights.value = o.state.spot, + d.spotLightShadows.value = o.state.spotShadow, + d.rectAreaLights.value = o.state.rectArea, + d.pointLights.value = o.state.point, + d.pointLightShadows.value = o.state.pointShadow, + d.hemisphereLights.value = o.state.hemi, + d.directionalShadowMap.value = o.state.directionalShadowMap, + d.directionalShadowMatrix.value = o.state.directionalShadowMatrix, + d.spotShadowMap.value = o.state.spotShadowMap, + d.spotShadowMatrix.value = o.state.spotShadowMatrix, + d.pointShadowMap.value = o.state.pointShadowMap, + d.pointShadowMatrix.value = o.state.pointShadowMatrix); + var p = i.program.getUniforms(), + g = di.seqWithValue(p.seq, d); + i.uniformsList = g + } + + function MA(A, e, t, i) { + B.resetTextureUnits(); + var o = e.fog, + n = t.isMeshStandardMaterial ? e.environment : null, + r = E.get(t), + s = u.state.lights; + aA && ((sA || A !== H) && rA.setState(t.clippingPlanes, t.clipIntersection, t.clipShadows, A, r, A === H && t.id === q)); + t.version === r.__version ? void 0 === r.program || t.fog && r.fog !== o || r.environment !== n || r.needsLights && r.lightsStateVersion !== s.state.version ? wA(t, e, i) : void 0 === r.numClippingPlanes || r.numClippingPlanes === rA.numPlanes && r.numIntersection === rA.numIntersection ? r.outputEncoding !== D.outputEncoding && wA(t, e, i) : wA(t, e, i) : (wA(t, e, i), + r.__version = t.version); + var l, c, h = !1, + d = !1, + p = !1, + g = r.program, + m = g.getUniforms(), + y = r.uniforms; + if (v.useProgram(g.program) && (h = !0, + d = !0, + p = !0), + t.id !== q && (q = t.id, + d = !0), + h || H !== A) { + if (m.setValue(f, "projectionMatrix", A.projectionMatrix), + C.logarithmicDepthBuffer && m.setValue(f, "logDepthBufFC", 2 / (Math.log(A.far + 1) / Math.LN2)), + H !== A && (H = A, + d = !0, + p = !0), + t.isShaderMaterial || t.isMeshPhongMaterial || t.isMeshToonMaterial || t.isMeshStandardMaterial || t.envMap) { + var I = m.map.cameraPosition; + void 0 !== I && I.setValue(f, cA.setFromMatrixPosition(A.matrixWorld)) + } + (t.isMeshPhongMaterial || t.isMeshToonMaterial || t.isMeshLambertMaterial || t.isMeshBasicMaterial || t.isMeshStandardMaterial || t.isShaderMaterial) && m.setValue(f, "isOrthographic", !0 === A.isOrthographicCamera), + (t.isMeshPhongMaterial || t.isMeshToonMaterial || t.isMeshLambertMaterial || t.isMeshBasicMaterial || t.isMeshStandardMaterial || t.isShaderMaterial || t.skinning) && m.setValue(f, "viewMatrix", A.matrixWorldInverse) + } + if (t.skinning) { + m.setOptional(f, i, "bindMatrix"), + m.setOptional(f, i, "bindMatrixInverse"); + var x = i.skeleton; + if (x) + if (C.floatVertexTextures) { + if (void 0 === x.boneTexture) { + var S = Math.sqrt(4 * x.bones.length); + S = a.ceilPowerOfTwo(S), + S = Math.max(S, 4); + var w = new Float32Array(S * S * 4); + w.set(x.boneMatrices); + var M = new We(w, S, S, 1023, 1015); + x.boneMatrices = w, + x.boneTexture = M, + x.boneTextureSize = S + } + m.setValue(f, "boneTexture", x.boneTexture, B), + m.setValue(f, "boneTextureSize", x.boneTextureSize) + } else + m.setOptional(f, x, "boneMatrices") + } + return (d || r.receiveShadow !== i.receiveShadow) && (r.receiveShadow = i.receiveShadow, + m.setValue(f, "receiveShadow", i.receiveShadow)), + d && (m.setValue(f, "toneMappingExposure", D.toneMappingExposure), + m.setValue(f, "toneMappingWhitePoint", D.toneMappingWhitePoint), + r.needsLights && ((l = y).ambientLightColor.needsUpdate = c = p, + l.lightProbe.needsUpdate = c, + l.directionalLights.needsUpdate = c, + l.directionalLightShadows.needsUpdate = c, + l.pointLights.needsUpdate = c, + l.pointLightShadows.needsUpdate = c, + l.spotLights.needsUpdate = c, + l.spotLightShadows.needsUpdate = c, + l.rectAreaLights.needsUpdate = c, + l.hemisphereLights.needsUpdate = c), + o && t.fog && function (A, e) { + A.fogColor.value.copy(e.color), + e.isFog ? (A.fogNear.value = e.near, + A.fogFar.value = e.far) : e.isFogExp2 && (A.fogDensity.value = e.density) + }(y, o), + t.isMeshBasicMaterial ? bA(y, t) : t.isMeshLambertMaterial ? (bA(y, t), + function (A, e) { + e.emissiveMap && (A.emissiveMap.value = e.emissiveMap) + }(y, t)) : t.isMeshToonMaterial ? (bA(y, t), + function (A, e) { + A.specular.value.copy(e.specular), + A.shininess.value = Math.max(e.shininess, 1e-4), + e.gradientMap && (A.gradientMap.value = e.gradientMap); + e.emissiveMap && (A.emissiveMap.value = e.emissiveMap); + e.bumpMap && (A.bumpMap.value = e.bumpMap, + A.bumpScale.value = e.bumpScale, + 1 === e.side && (A.bumpScale.value *= -1)); + e.normalMap && (A.normalMap.value = e.normalMap, + A.normalScale.value.copy(e.normalScale), + 1 === e.side && A.normalScale.value.negate()); + e.displacementMap && (A.displacementMap.value = e.displacementMap, + A.displacementScale.value = e.displacementScale, + A.displacementBias.value = e.displacementBias) + }(y, t)) : t.isMeshPhongMaterial ? (bA(y, t), + function (A, e) { + A.specular.value.copy(e.specular), + A.shininess.value = Math.max(e.shininess, 1e-4), + e.emissiveMap && (A.emissiveMap.value = e.emissiveMap); + e.bumpMap && (A.bumpMap.value = e.bumpMap, + A.bumpScale.value = e.bumpScale, + 1 === e.side && (A.bumpScale.value *= -1)); + e.normalMap && (A.normalMap.value = e.normalMap, + A.normalScale.value.copy(e.normalScale), + 1 === e.side && A.normalScale.value.negate()); + e.displacementMap && (A.displacementMap.value = e.displacementMap, + A.displacementScale.value = e.displacementScale, + A.displacementBias.value = e.displacementBias) + }(y, t)) : t.isMeshStandardMaterial ? (bA(y, t, n), + t.isMeshPhysicalMaterial ? function (A, e, t) { + UA(A, e, t), + A.reflectivity.value = e.reflectivity, + A.clearcoat.value = e.clearcoat, + A.clearcoatRoughness.value = e.clearcoatRoughness, + e.sheen && A.sheen.value.copy(e.sheen); + e.clearcoatMap && (A.clearcoatMap.value = e.clearcoatMap); + e.clearcoatRoughnessMap && (A.clearcoatRoughnessMap.value = e.clearcoatRoughnessMap); + e.clearcoatNormalMap && (A.clearcoatNormalScale.value.copy(e.clearcoatNormalScale), + A.clearcoatNormalMap.value = e.clearcoatNormalMap, + 1 === e.side && A.clearcoatNormalScale.value.negate()); + A.transparency.value = e.transparency + }(y, t, n) : UA(y, t, n)) : t.isMeshMatcapMaterial ? (bA(y, t), + function (A, e) { + e.matcap && (A.matcap.value = e.matcap); + e.bumpMap && (A.bumpMap.value = e.bumpMap, + A.bumpScale.value = e.bumpScale, + 1 === e.side && (A.bumpScale.value *= -1)); + e.normalMap && (A.normalMap.value = e.normalMap, + A.normalScale.value.copy(e.normalScale), + 1 === e.side && A.normalScale.value.negate()); + e.displacementMap && (A.displacementMap.value = e.displacementMap, + A.displacementScale.value = e.displacementScale, + A.displacementBias.value = e.displacementBias) + }(y, t)) : t.isMeshDepthMaterial ? (bA(y, t), + function (A, e) { + e.displacementMap && (A.displacementMap.value = e.displacementMap, + A.displacementScale.value = e.displacementScale, + A.displacementBias.value = e.displacementBias) + }(y, t)) : t.isMeshDistanceMaterial ? (bA(y, t), + function (A, e) { + e.displacementMap && (A.displacementMap.value = e.displacementMap, + A.displacementScale.value = e.displacementScale, + A.displacementBias.value = e.displacementBias); + A.referencePosition.value.copy(e.referencePosition), + A.nearDistance.value = e.nearDistance, + A.farDistance.value = e.farDistance + }(y, t)) : t.isMeshNormalMaterial ? (bA(y, t), + function (A, e) { + e.bumpMap && (A.bumpMap.value = e.bumpMap, + A.bumpScale.value = e.bumpScale, + 1 === e.side && (A.bumpScale.value *= -1)); + e.normalMap && (A.normalMap.value = e.normalMap, + A.normalScale.value.copy(e.normalScale), + 1 === e.side && A.normalScale.value.negate()); + e.displacementMap && (A.displacementMap.value = e.displacementMap, + A.displacementScale.value = e.displacementScale, + A.displacementBias.value = e.displacementBias) + }(y, t)) : t.isLineBasicMaterial ? (function (A, e) { + A.diffuse.value.copy(e.color), + A.opacity.value = e.opacity + }(y, t), + t.isLineDashedMaterial && function (A, e) { + A.dashSize.value = e.dashSize, + A.totalSize.value = e.dashSize + e.gapSize, + A.scale.value = e.scale + }(y, t)) : t.isPointsMaterial ? function (A, e) { + A.diffuse.value.copy(e.color), + A.opacity.value = e.opacity, + A.size.value = e.size * $, + A.scale.value = .5 * _, + e.map && (A.map.value = e.map); + e.alphaMap && (A.alphaMap.value = e.alphaMap); + var t; + e.map ? t = e.map : e.alphaMap && (t = e.alphaMap); + void 0 !== t && (!0 === t.matrixAutoUpdate && t.updateMatrix(), + A.uvTransform.value.copy(t.matrix)) + }(y, t) : t.isSpriteMaterial ? function (A, e) { + A.diffuse.value.copy(e.color), + A.opacity.value = e.opacity, + A.rotation.value = e.rotation, + e.map && (A.map.value = e.map); + e.alphaMap && (A.alphaMap.value = e.alphaMap); + var t; + e.map ? t = e.map : e.alphaMap && (t = e.alphaMap); + void 0 !== t && (!0 === t.matrixAutoUpdate && t.updateMatrix(), + A.uvTransform.value.copy(t.matrix)) + }(y, t) : t.isShadowMaterial && (y.color.value.copy(t.color), + y.opacity.value = t.opacity), + void 0 !== y.ltc_1 && (y.ltc_1.value = Xe.LTC_1), + void 0 !== y.ltc_2 && (y.ltc_2.value = Xe.LTC_2), + di.upload(f, r.uniformsList, y, B), + t.isShaderMaterial && (t.uniformsNeedUpdate = !1)), + t.isShaderMaterial && !0 === t.uniformsNeedUpdate && (di.upload(f, r.uniformsList, y, B), + t.uniformsNeedUpdate = !1), + t.isSpriteMaterial && m.setValue(f, "center", i.center), + m.setValue(f, "modelViewMatrix", i.modelViewMatrix), + m.setValue(f, "normalMatrix", i.normalMatrix), + m.setValue(f, "modelMatrix", i.matrixWorld), + g + } + + function bA(A, e, t) { + A.opacity.value = e.opacity, + e.color && A.diffuse.value.copy(e.color), + e.emissive && A.emissive.value.copy(e.emissive).multiplyScalar(e.emissiveIntensity), + e.map && (A.map.value = e.map), + e.alphaMap && (A.alphaMap.value = e.alphaMap), + e.specularMap && (A.specularMap.value = e.specularMap); + var i, o, n = e.envMap || t; + n && (A.envMap.value = n, + A.flipEnvMap.value = n.isCubeTexture ? -1 : 1, + A.reflectivity.value = e.reflectivity, + A.refractionRatio.value = e.refractionRatio, + A.maxMipLevel.value = E.get(n).__maxMipLevel), + e.lightMap && (A.lightMap.value = e.lightMap, + A.lightMapIntensity.value = e.lightMapIntensity), + e.aoMap && (A.aoMap.value = e.aoMap, + A.aoMapIntensity.value = e.aoMapIntensity), + e.map ? i = e.map : e.specularMap ? i = e.specularMap : e.displacementMap ? i = e.displacementMap : e.normalMap ? i = e.normalMap : e.bumpMap ? i = e.bumpMap : e.roughnessMap ? i = e.roughnessMap : e.metalnessMap ? i = e.metalnessMap : e.alphaMap ? i = e.alphaMap : e.emissiveMap && (i = e.emissiveMap), + void 0 !== i && (i.isWebGLRenderTarget && (i = i.texture), + !0 === i.matrixAutoUpdate && i.updateMatrix(), + A.uvTransform.value.copy(i.matrix)), + e.aoMap ? o = e.aoMap : e.lightMap && (o = e.lightMap), + void 0 !== o && (o.isWebGLRenderTarget && (o = o.texture), + !0 === o.matrixAutoUpdate && o.updateMatrix(), + A.uv2Transform.value.copy(o.matrix)) + } + + function UA(A, e, t) { + A.roughness.value = e.roughness, + A.metalness.value = e.metalness, + e.roughnessMap && (A.roughnessMap.value = e.roughnessMap), + e.metalnessMap && (A.metalnessMap.value = e.metalnessMap), + e.emissiveMap && (A.emissiveMap.value = e.emissiveMap), + e.bumpMap && (A.bumpMap.value = e.bumpMap, + A.bumpScale.value = e.bumpScale, + 1 === e.side && (A.bumpScale.value *= -1)), + e.normalMap && (A.normalMap.value = e.normalMap, + A.normalScale.value.copy(e.normalScale), + 1 === e.side && A.normalScale.value.negate()), + e.displacementMap && (A.displacementMap.value = e.displacementMap, + A.displacementScale.value = e.displacementScale, + A.displacementBias.value = e.displacementBias), + (e.envMap || t) && (A.envMapIntensity.value = e.envMapIntensity) + } + EA.setAnimationLoop((function (A) { + gA.isPresenting || IA && IA(A) + })), + "undefined" != typeof window && EA.setContext(window), + this.setAnimationLoop = function (A) { + IA = A, + gA.setAnimationLoop(A), + EA.start() + }, + this.render = function (A, e) { + var t, i; + if (void 0 !== arguments[2] && (console.warn("THREE.WebGLRenderer.render(): the renderTarget argument has been removed. Use .setRenderTarget() instead."), + t = arguments[2]), + void 0 !== arguments[3] && (console.warn("THREE.WebGLRenderer.render(): the forceClear argument has been removed. Use .clear() instead."), + i = arguments[3]), + e && e.isCamera) { + if (!L) { + j.geometry = null, + j.program = null, + j.wireframe = !1, + q = -1, + H = null, + !0 === A.autoUpdate && A.updateMatrixWorld(), + null === e.parent && e.updateMatrixWorld(), + gA.enabled && gA.isPresenting && (e = gA.getCamera(e)), + (u = F.get(A, e)).init(), + A.onBeforeRender(D, A, e, t || G), + lA.multiplyMatrices(e.projectionMatrix, e.matrixWorldInverse), + nA.setFromProjectionMatrix(lA), + aA = rA.init(this.clippingPlanes, sA = this.localClippingEnabled, e), + (g = U.get(A, e)).init(), + BA(A, e, 0, D.sortObjects), + g.finish(), + !0 === D.sortObjects && g.sort(AA, eA), + aA && rA.beginShadows(); + var o = u.state.shadowsArray; + uA.render(o, A, e), + u.setupLights(e), + aA && rA.endShadows(), + this.info.autoReset && this.info.reset(), + void 0 !== t && this.setRenderTarget(t), + K.render(g, A, e, i); + var n = g.opaque, + r = g.transparent; + if (A.overrideMaterial) { + var a = A.overrideMaterial; + n.length && xA(n, A, e, a), + r.length && xA(r, A, e, a) + } else + n.length && xA(n, A, e), + r.length && xA(r, A, e); + A.onAfterRender(D, A, e), + null !== G && (B.updateRenderTargetMipmap(G), + B.updateMultisampleRenderTarget(G)), + v.buffers.depth.setTest(!0), + v.buffers.depth.setMask(!0), + v.buffers.color.setMask(!0), + v.setPolygonOffset(!1), + g = null, + u = null + } + } else + console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.") + }, + this.setFramebuffer = function (A) { + N !== A && null === G && f.bindFramebuffer(36160, A), + N = A + }, + this.getActiveCubeFace = function () { + return O + }, + this.getActiveMipmapLevel = function () { + return V + }, + this.getRenderTarget = function () { + return G + }, + this.setRenderTarget = function (A, e, t) { + G = A, + O = e, + V = t, + A && void 0 === E.get(A).__webglFramebuffer && B.setupRenderTarget(A); + var i = N, + o = !1; + if (A) { + var n = E.get(A).__webglFramebuffer; + A.isWebGLCubeRenderTarget ? (i = n[e || 0], + o = !0) : i = A.isWebGLMultisampleRenderTarget ? E.get(A).__webglMultisampledFramebuffer : n, + J.copy(A.viewport), + z.copy(A.scissor), + Z = A.scissorTest + } else + J.copy(tA).multiplyScalar($).floor(), + z.copy(iA).multiplyScalar($).floor(), + Z = oA; + if (P !== i && (f.bindFramebuffer(36160, i), + P = i), + v.viewport(J), + v.scissor(z), + v.setScissorTest(Z), + o) { + var r = E.get(A.texture); + f.framebufferTexture2D(36160, 36064, 34069 + (e || 0), r.__webglTexture, t || 0) + } + }, + this.readRenderTargetPixels = function (A, e, t, i, o, n, r) { + if (A && A.isWebGLRenderTarget) { + var a = E.get(A).__webglFramebuffer; + if (A.isWebGLCubeRenderTarget && void 0 !== r && (a = a[r]), + a) { + var s = !1; + a !== P && (f.bindFramebuffer(36160, a), + s = !0); + try { + var l = A.texture, + c = l.format, + h = l.type; + if (1023 !== c && k.convert(c) !== f.getParameter(35739)) + return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format."); + if (!(1009 === h || k.convert(h) === f.getParameter(35738) || 1015 === h && (C.isWebGL2 || m.get("OES_texture_float") || m.get("WEBGL_color_buffer_float")) || 1016 === h && m.get(C.isWebGL2 ? "EXT_color_buffer_float" : "EXT_color_buffer_half_float"))) + return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type."); + 36053 === f.checkFramebufferStatus(36160) ? 0 > e || e > A.width - i || 0 > t || t > A.height - o || f.readPixels(e, t, i, o, k.convert(c), k.convert(h), n) : console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.") + } finally { + s && f.bindFramebuffer(36160, P) + } + } + } else + console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.") + }, + this.copyFramebufferToTexture = function (A, e, t) { + void 0 === t && (t = 0); + var i = Math.pow(2, -t), + o = Math.floor(e.image.width * i), + n = Math.floor(e.image.height * i), + r = k.convert(e.format); + B.setTexture2D(e, 0), + f.copyTexImage2D(3553, t, r, A.x, A.y, o, n, 0), + v.unbindTexture() + }, + this.copyTextureToTexture = function (A, e, t, i) { + var o = e.image.width, + n = e.image.height, + r = k.convert(t.format), + a = k.convert(t.type); + B.setTexture2D(t, 0), + e.isDataTexture ? f.texSubImage2D(3553, i || 0, A.x, A.y, o, n, r, a, e.image.data) : f.texSubImage2D(3553, i || 0, A.x, A.y, r, a, e.image), + v.unbindTexture() + }, + this.initTexture = function (A) { + B.setTexture2D(A, 0), + v.unbindTexture() + }, + "undefined" != typeof __THREE_DEVTOOLS__ && __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe", { + detail: this + })) + } + + function Ao(A, e) { + this.name = "", + this.color = new LA(A), + this.density = void 0 !== e ? e : 25e-5 + } + + function eo(A, e, t) { + this.name = "", + this.color = new LA(A), + this.near = void 0 !== e ? e : 1, + this.far = void 0 !== t ? t : 1e3 + } + + function to(A, e) { + this.array = A, + this.stride = e, + this.count = void 0 !== A ? A.length / e : 0, + this.usage = 35044, + this.updateRange = { + offset: 0, + count: -1 + }, + this.version = 0 + } + Zi.prototype = Object.assign(Object.create(je.prototype), { + constructor: Zi, + isArrayCamera: !0 + }), + Xi.prototype = Object.assign(Object.create(H.prototype), { + constructor: Xi, + isGroup: !0 + }), + Object.assign(_i.prototype, i.prototype), + Object.assign(Ao.prototype, { + isFogExp2: !0, + clone: function () { + return new Ao(this.color, this.density) + }, + toJSON: function () { + return { + type: "FogExp2", + color: this.color.getHex(), + density: this.density + } + } + }), + Object.assign(eo.prototype, { + isFog: !0, + clone: function () { + return new eo(this.color, this.near, this.far) + }, + toJSON: function () { + return { + type: "Fog", + color: this.color.getHex(), + near: this.near, + far: this.far + } + } + }), + Object.defineProperty(to.prototype, "needsUpdate", { + set: function (A) { + !0 === A && this.version++ + } + }), + Object.assign(to.prototype, { + isInterleavedBuffer: !0, + onUploadCallback: function () {}, + setUsage: function (A) { + return this.usage = A, + this + }, + copy: function (A) { + return this.array = new A.array.constructor(A.array), + this.count = A.count, + this.stride = A.stride, + this.usage = A.usage, + this + }, + copyAt: function (A, e, t) { + A *= this.stride, + t *= e.stride; + for (var i = 0, o = this.stride; o > i; i++) + this.array[A + i] = e.array[t + i]; + return this + }, + set: function (A, e) { + return void 0 === e && (e = 0), + this.array.set(A, e), + this + }, + clone: function () { + return (new this.constructor).copy(this) + }, + onUpload: function (A) { + return this.onUploadCallback = A, + this + } + }); + var io, oo = new y; + + function no(A, e, t, i) { + this.data = A, + this.itemSize = e, + this.offset = t, + this.normalized = !0 === i + } + + function ro(A) { + qA.call(this), + this.type = "SpriteMaterial", + this.color = new LA(16777215), + this.map = null, + this.alphaMap = null, + this.rotation = 0, + this.sizeAttenuation = !0, + this.transparent = !0, + this.setValues(A) + } + Object.defineProperties(no.prototype, { + count: { + get: function () { + return this.data.count + } + }, + array: { + get: function () { + return this.data.array + } + } + }), + Object.assign(no.prototype, { + isInterleavedBufferAttribute: !0, + applyMatrix4: function (A) { + for (var e = 0, t = this.data.count; t > e; e++) + oo.x = this.getX(e), + oo.y = this.getY(e), + oo.z = this.getZ(e), + oo.applyMatrix4(A), + this.setXYZ(e, oo.x, oo.y, oo.z); + return this + }, + setX: function (A, e) { + return this.data.array[A * this.data.stride + this.offset] = e, + this + }, + setY: function (A, e) { + return this.data.array[A * this.data.stride + this.offset + 1] = e, + this + }, + setZ: function (A, e) { + return this.data.array[A * this.data.stride + this.offset + 2] = e, + this + }, + setW: function (A, e) { + return this.data.array[A * this.data.stride + this.offset + 3] = e, + this + }, + getX: function (A) { + return this.data.array[A * this.data.stride + this.offset] + }, + getY: function (A) { + return this.data.array[A * this.data.stride + this.offset + 1] + }, + getZ: function (A) { + return this.data.array[A * this.data.stride + this.offset + 2] + }, + getW: function (A) { + return this.data.array[A * this.data.stride + this.offset + 3] + }, + setXY: function (A, e, t) { + return this.data.array[(A = A * this.data.stride + this.offset) + 0] = e, + this.data.array[A + 1] = t, + this + }, + setXYZ: function (A, e, t, i) { + return this.data.array[(A = A * this.data.stride + this.offset) + 0] = e, + this.data.array[A + 1] = t, + this.data.array[A + 2] = i, + this + }, + setXYZW: function (A, e, t, i, o) { + return this.data.array[(A = A * this.data.stride + this.offset) + 0] = e, + this.data.array[A + 1] = t, + this.data.array[A + 2] = i, + this.data.array[A + 3] = o, + this + } + }), + (ro.prototype = Object.create(qA.prototype)).constructor = ro, + ro.prototype.isSpriteMaterial = !0, + ro.prototype.copy = function (A) { + return qA.prototype.copy.call(this, A), + this.color.copy(A.color), + this.map = A.map, + this.alphaMap = A.alphaMap, + this.rotation = A.rotation, + this.sizeAttenuation = A.sizeAttenuation, + this + }; + var ao = new y, + so = new y, + lo = new y, + co = new s, + ho = new s, + po = new M, + go = new y, + uo = new y, + fo = new y, + mo = new s, + Co = new s, + yo = new s; + + function vo(A) { + if (H.call(this), + this.type = "Sprite", + void 0 === io) { + io = new he; + var e = new to(new Float32Array([-.5, -.5, 0, 0, 0, .5, -.5, 0, 1, 0, .5, .5, 0, 1, 1, -.5, .5, 0, 0, 1]), 5); + io.setIndex([0, 1, 2, 0, 2, 3]), + io.setAttribute("position", new no(e, 3, 0, !1)), + io.setAttribute("uv", new no(e, 2, 3, !1)) + } + this.geometry = io, + this.material = void 0 !== A ? A : new ro, + this.center = new s(.5, .5) + } + + function Io(A, e, t, i, o, n) { + co.subVectors(A, t).addScalar(.5).multiply(i), + void 0 !== o ? (ho.x = n * co.x - o * co.y, + ho.y = o * co.x + n * co.y) : ho.copy(co), + A.copy(e), + A.x += ho.x, + A.y += ho.y, + A.applyMatrix4(po) + } + vo.prototype = Object.assign(Object.create(H.prototype), { + constructor: vo, + isSprite: !0, + raycast: function (A, e) { + null === A.camera && console.error('THREE.Sprite: "Raycaster.camera" needs to be set in order to raycast against sprites.'), + so.setFromMatrixScale(this.matrixWorld), + po.copy(A.camera.matrixWorld), + this.modelViewMatrix.multiplyMatrices(A.camera.matrixWorldInverse, this.matrixWorld), + lo.setFromMatrixPosition(this.modelViewMatrix), + A.camera.isPerspectiveCamera && !1 === this.material.sizeAttenuation && so.multiplyScalar(-lo.z); + var t, i, o = this.material.rotation; + 0 !== o && (i = Math.cos(o), + t = Math.sin(o)); + var n = this.center; + Io(go.set(-.5, -.5, 0), lo, n, so, t, i), + Io(uo.set(.5, -.5, 0), lo, n, so, t, i), + Io(fo.set(.5, .5, 0), lo, n, so, t, i), + mo.set(0, 0), + Co.set(1, 0), + yo.set(1, 1); + var r = A.ray.intersectTriangle(go, uo, fo, !1, ao); + if (null !== r || (Io(uo.set(-.5, .5, 0), lo, n, so, t, i), + Co.set(0, 1), + null !== (r = A.ray.intersectTriangle(go, fo, uo, !1, ao)))) { + var a = A.ray.origin.distanceTo(ao); + A.near > a || a > A.far || e.push({ + distance: a, + point: ao.clone(), + uv: RA.getUV(ao, go, uo, fo, mo, Co, yo, new s), + face: null, + object: this + }) + } + }, + clone: function () { + return new this.constructor(this.material).copy(this) + }, + copy: function (A) { + return H.prototype.copy.call(this, A), + void 0 !== A.center && this.center.copy(A.center), + this + } + }); + var Eo = new y, + Bo = new y; + + function xo() { + H.call(this), + this._currentLevel = 0, + this.type = "LOD", + Object.defineProperties(this, { + levels: { + enumerable: !0, + value: [] + } + }), + this.autoUpdate = !0 + } + + function So(A, e) { + A && A.isGeometry && console.error("THREE.SkinnedMesh no longer supports THREE.Geometry. Use THREE.BufferGeometry instead."), + Ue.call(this, A, e), + this.type = "SkinnedMesh", + this.bindMode = "attached", + this.bindMatrix = new M, + this.bindMatrixInverse = new M + } + xo.prototype = Object.assign(Object.create(H.prototype), { + constructor: xo, + isLOD: !0, + copy: function (A) { + H.prototype.copy.call(this, A, !1); + for (var e = A.levels, t = 0, i = e.length; i > t; t++) { + var o = e[t]; + this.addLevel(o.object.clone(), o.distance) + } + return this.autoUpdate = A.autoUpdate, + this + }, + addLevel: function (A, e) { + void 0 === e && (e = 0), + e = Math.abs(e); + for (var t = this.levels, i = 0; t.length > i && t[i].distance <= e; i++) + ; + return t.splice(i, 0, { + distance: e, + object: A + }), + this.add(A), + this + }, + getCurrentLevel: function () { + return this._currentLevel + }, + getObjectForDistance: function (A) { + var e = this.levels; + if (e.length > 0) { + for (var t = 1, i = e.length; i > t && e[t].distance <= A; t++) + ; + return e[t - 1].object + } + return null + }, + raycast: function (A, e) { + if (this.levels.length > 0) { + Eo.setFromMatrixPosition(this.matrixWorld); + var t = A.ray.origin.distanceTo(Eo); + this.getObjectForDistance(t).raycast(A, e) + } + }, + update: function (A) { + var e = this.levels; + if (e.length > 1) { + Eo.setFromMatrixPosition(A.matrixWorld), + Bo.setFromMatrixPosition(this.matrixWorld); + var t = Eo.distanceTo(Bo) / A.zoom; + e[0].object.visible = !0; + for (var i = 1, o = e.length; o > i && e[i].distance <= t; i++) + e[i - 1].object.visible = !1, + e[i].object.visible = !0; + for (this._currentLevel = i - 1; o > i; i++) + e[i].object.visible = !1 + } + }, + toJSON: function (A) { + var e = H.prototype.toJSON.call(this, A); + !1 === this.autoUpdate && (e.object.autoUpdate = !1), + e.object.levels = []; + for (var t = this.levels, i = 0, o = t.length; o > i; i++) { + var n = t[i]; + e.object.levels.push({ + object: n.object.uuid, + distance: n.distance + }) + } + return e + } + }), + So.prototype = Object.assign(Object.create(Ue.prototype), { + constructor: So, + isSkinnedMesh: !0, + bind: function (A, e) { + this.skeleton = A, + void 0 === e && (this.updateMatrixWorld(!0), + this.skeleton.calculateInverses(), + e = this.matrixWorld), + this.bindMatrix.copy(e), + this.bindMatrixInverse.getInverse(e) + }, + pose: function () { + this.skeleton.pose() + }, + normalizeSkinWeights: function () { + for (var A = new p, e = this.geometry.attributes.skinWeight, t = 0, i = e.count; i > t; t++) { + A.x = e.getX(t), + A.y = e.getY(t), + A.z = e.getZ(t), + A.w = e.getW(t); + var o = 1 / A.manhattanLength(); + o !== 1 / 0 ? A.multiplyScalar(o) : A.set(1, 0, 0, 0), + e.setXYZW(t, A.x, A.y, A.z, A.w) + } + }, + updateMatrixWorld: function (A) { + Ue.prototype.updateMatrixWorld.call(this, A), + "attached" === this.bindMode ? this.bindMatrixInverse.getInverse(this.matrixWorld) : "detached" === this.bindMode ? this.bindMatrixInverse.getInverse(this.bindMatrix) : console.warn("THREE.SkinnedMesh: Unrecognized bindMode: " + this.bindMode) + }, + clone: function () { + return new this.constructor(this.geometry, this.material).copy(this) + } + }); + var wo = new M, + Mo = new M; + + function bo(A, e) { + if (this.bones = (A = A || []).slice(0), + this.boneMatrices = new Float32Array(16 * this.bones.length), + this.frame = -1, + void 0 === e) + this.calculateInverses(); + else if (this.bones.length === e.length) + this.boneInverses = e.slice(0); + else { + console.warn("THREE.Skeleton boneInverses is the wrong length."), + this.boneInverses = []; + for (var t = 0, i = this.bones.length; i > t; t++) + this.boneInverses.push(new M) + } + } + + function Uo() { + H.call(this), + this.type = "Bone" + } + Object.assign(bo.prototype, { + calculateInverses: function () { + this.boneInverses = []; + for (var A = 0, e = this.bones.length; e > A; A++) { + var t = new M; + this.bones[A] && t.getInverse(this.bones[A].matrixWorld), + this.boneInverses.push(t) + } + }, + pose: function () { + var A, e, t; + for (e = 0, + t = this.bones.length; t > e; e++) + (A = this.bones[e]) && A.matrixWorld.getInverse(this.boneInverses[e]); + for (e = 0, + t = this.bones.length; t > e; e++) + (A = this.bones[e]) && (A.parent && A.parent.isBone ? (A.matrix.getInverse(A.parent.matrixWorld), + A.matrix.multiply(A.matrixWorld)) : A.matrix.copy(A.matrixWorld), + A.matrix.decompose(A.position, A.quaternion, A.scale)) + }, + update: function () { + for (var A = this.bones, e = this.boneInverses, t = this.boneMatrices, i = this.boneTexture, o = 0, n = A.length; n > o; o++) { + wo.multiplyMatrices(A[o] ? A[o].matrixWorld : Mo, e[o]), + wo.toArray(t, 16 * o) + } + void 0 !== i && (i.needsUpdate = !0) + }, + clone: function () { + return new bo(this.bones, this.boneInverses) + }, + getBoneByName: function (A) { + for (var e = 0, t = this.bones.length; t > e; e++) { + var i = this.bones[e]; + if (i.name === A) + return i + } + }, + dispose: function () { + this.boneTexture && (this.boneTexture.dispose(), + this.boneTexture = void 0) + } + }), + Uo.prototype = Object.assign(Object.create(H.prototype), { + constructor: Uo, + isBone: !0 + }); + var Fo = new M, + Ko = new M, + Qo = [], + Ro = new Ue; + + function To(A, e, t) { + Ue.call(this, A, e), + this.instanceMatrix = new YA(new Float32Array(16 * t), 16), + this.count = t, + this.frustumCulled = !1 + } + + function ko(A) { + qA.call(this), + this.type = "LineBasicMaterial", + this.color = new LA(16777215), + this.linewidth = 1, + this.linecap = "round", + this.linejoin = "round", + this.setValues(A) + } + To.prototype = Object.assign(Object.create(Ue.prototype), { + constructor: To, + isInstancedMesh: !0, + getMatrixAt: function (A, e) { + e.fromArray(this.instanceMatrix.array, 16 * A) + }, + raycast: function (A, e) { + var t = this.matrixWorld, + i = this.count; + if (Ro.geometry = this.geometry, + Ro.material = this.material, + void 0 !== Ro.material) + for (var o = 0; i > o; o++) + this.getMatrixAt(o, Fo), + Ko.multiplyMatrices(t, Fo), + Ro.matrixWorld = Ko, + Ro.raycast(A, Qo), + Qo.length > 0 && (Qo[0].instanceId = o, + Qo[0].object = this, + e.push(Qo[0]), + Qo.length = 0) + }, + setMatrixAt: function (A, e) { + e.toArray(this.instanceMatrix.array, 16 * A) + }, + updateMorphTargets: function () {} + }), + (ko.prototype = Object.create(qA.prototype)).constructor = ko, + ko.prototype.isLineBasicMaterial = !0, + ko.prototype.copy = function (A) { + return qA.prototype.copy.call(this, A), + this.color.copy(A.color), + this.linewidth = A.linewidth, + this.linecap = A.linecap, + this.linejoin = A.linejoin, + this + }; + var Do = new y, + Lo = new y, + No = new M, + Oo = new CA, + Vo = new cA; + + function Go(A, e, t) { + 1 === t && console.error("THREE.Line: parameter THREE.LinePieces no longer supported. Use THREE.LineSegments instead."), + H.call(this), + this.type = "Line", + this.geometry = void 0 !== A ? A : new he, + this.material = void 0 !== e ? e : new ko + } + Go.prototype = Object.assign(Object.create(H.prototype), { + constructor: Go, + isLine: !0, + computeLineDistances: function () { + var A = this.geometry; + if (A.isBufferGeometry) + if (null === A.index) { + for (var e = A.attributes.position, t = [0], i = 1, o = e.count; o > i; i++) + Do.fromBufferAttribute(e, i - 1), + Lo.fromBufferAttribute(e, i), + t[i] = t[i - 1], + t[i] += Do.distanceTo(Lo); + A.setAttribute("lineDistance", new Ae(t, 1)) + } else + console.warn("THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry."); + else if (A.isGeometry) { + var n = A.vertices; + (t = A.lineDistances)[0] = 0; + for (i = 1, + o = n.length; o > i; i++) + t[i] = t[i - 1], + t[i] += n[i - 1].distanceTo(n[i]) + } + return this + }, + raycast: function (A, e) { + var t = this.geometry, + i = this.matrixWorld, + o = A.params.Line.threshold; + if (null === t.boundingSphere && t.computeBoundingSphere(), + Vo.copy(t.boundingSphere), + Vo.applyMatrix4(i), + Vo.radius += o, + !1 !== A.ray.intersectsSphere(Vo)) { + No.getInverse(i), + Oo.copy(A.ray).applyMatrix4(No); + var n = o / ((this.scale.x + this.scale.y + this.scale.z) / 3), + r = n * n, + a = new y, + s = new y, + l = new y, + c = new y, + h = this && this.isLineSegments ? 2 : 1; + if (t.isBufferGeometry) { + var d = t.index, + p = t.attributes.position.array; + if (null !== d) + for (var g = d.array, u = 0, f = g.length - 1; f > u; u += h) { + var m = g[u + 1]; + if (a.fromArray(p, 3 * g[u]), + s.fromArray(p, 3 * m), + r >= Oo.distanceSqToSegment(a, s, c, l)) { + c.applyMatrix4(this.matrixWorld); + var C = A.ray.origin.distanceTo(c); + A.near > C || C > A.far || e.push({ + distance: C, + point: l.clone().applyMatrix4(this.matrixWorld), + index: u, + face: null, + faceIndex: null, + object: this + }) + } + } + else + for (u = 0, + f = p.length / 3 - 1; f > u; u += h) { + if (a.fromArray(p, 3 * u), + s.fromArray(p, 3 * u + 3), + r >= Oo.distanceSqToSegment(a, s, c, l)) { + c.applyMatrix4(this.matrixWorld); + C = A.ray.origin.distanceTo(c); + A.near > C || C > A.far || e.push({ + distance: C, + point: l.clone().applyMatrix4(this.matrixWorld), + index: u, + face: null, + faceIndex: null, + object: this + }) + } + } + } else if (t.isGeometry) { + var v = t.vertices, + I = v.length; + for (u = 0; I - 1 > u; u += h) { + if (r >= Oo.distanceSqToSegment(v[u], v[u + 1], c, l)) { + c.applyMatrix4(this.matrixWorld); + C = A.ray.origin.distanceTo(c); + A.near > C || C > A.far || e.push({ + distance: C, + point: l.clone().applyMatrix4(this.matrixWorld), + index: u, + face: null, + faceIndex: null, + object: this + }) + } + } + } + } + }, + clone: function () { + return new this.constructor(this.geometry, this.material).copy(this) + } + }); + var Po = new y, + qo = new y; + + function jo(A, e) { + Go.call(this, A, e), + this.type = "LineSegments" + } + + function Ho(A, e) { + Go.call(this, A, e), + this.type = "LineLoop" + } + + function Yo(A) { + qA.call(this), + this.type = "PointsMaterial", + this.color = new LA(16777215), + this.map = null, + this.alphaMap = null, + this.size = 1, + this.sizeAttenuation = !0, + this.morphTargets = !1, + this.setValues(A) + } + jo.prototype = Object.assign(Object.create(Go.prototype), { + constructor: jo, + isLineSegments: !0, + computeLineDistances: function () { + var A = this.geometry; + if (A.isBufferGeometry) + if (null === A.index) { + for (var e = A.attributes.position, t = [], i = 0, o = e.count; o > i; i += 2) + Po.fromBufferAttribute(e, i), + qo.fromBufferAttribute(e, i + 1), + t[i] = 0 === i ? 0 : t[i - 1], + t[i + 1] = t[i] + Po.distanceTo(qo); + A.setAttribute("lineDistance", new Ae(t, 1)) + } else + console.warn("THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry."); + else if (A.isGeometry) { + var n = A.vertices; + for (t = A.lineDistances, + i = 0, + o = n.length; o > i; i += 2) + Po.copy(n[i]), + qo.copy(n[i + 1]), + t[i] = 0 === i ? 0 : t[i - 1], + t[i + 1] = t[i] + Po.distanceTo(qo) + } + return this + } + }), + Ho.prototype = Object.assign(Object.create(Go.prototype), { + constructor: Ho, + isLineLoop: !0 + }), + (Yo.prototype = Object.create(qA.prototype)).constructor = Yo, + Yo.prototype.isPointsMaterial = !0, + Yo.prototype.copy = function (A) { + return qA.prototype.copy.call(this, A), + this.color.copy(A.color), + this.map = A.map, + this.alphaMap = A.alphaMap, + this.size = A.size, + this.sizeAttenuation = A.sizeAttenuation, + this.morphTargets = A.morphTargets, + this + }; + var Wo = new M, + Jo = new CA, + zo = new cA, + Zo = new y; + + function Xo(A, e) { + H.call(this), + this.type = "Points", + this.geometry = void 0 !== A ? A : new he, + this.material = void 0 !== e ? e : new Yo, + this.updateMorphTargets() + } + + function _o(A, e, t, i, o, n, r) { + var a = Jo.distanceSqToPoint(A); + if (t > a) { + var s = new y; + Jo.closestPointToPoint(A, s), + s.applyMatrix4(i); + var l = o.ray.origin.distanceTo(s); + if (o.near > l || l > o.far) + return; + n.push({ + distance: l, + distanceToRay: Math.sqrt(a), + point: s, + index: e, + face: null, + object: r + }) + } + } + + function $o(A, e, t, i, o, n, r, a, s) { + d.call(this, A, e, t, i, o, n, r, a, s), + this.format = void 0 !== r ? r : 1022, + this.minFilter = void 0 !== n ? n : 1006, + this.magFilter = void 0 !== o ? o : 1006, + this.generateMipmaps = !1 + } + + function An(A, e, t, i, o, n, r, a, s, l, c, h) { + d.call(this, null, n, r, a, s, l, i, o, c, h), + this.image = { + width: e, + height: t + }, + this.mipmaps = A, + this.flipY = !1, + this.generateMipmaps = !1 + } + + function en(A, e, t, i, o, n, r, a, s) { + d.call(this, A, e, t, i, o, n, r, a, s), + this.needsUpdate = !0 + } + + function tn(A, e, t, i, o, n, r, a, s, l) { + if (1026 !== (l = void 0 !== l ? l : 1026) && 1027 !== l) + throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat"); + void 0 === t && 1026 === l && (t = 1012), + void 0 === t && 1027 === l && (t = 1020), + d.call(this, null, i, o, n, r, a, l, t, s), + this.image = { + width: A, + height: e + }, + this.magFilter = void 0 !== r ? r : 1003, + this.minFilter = void 0 !== a ? a : 1003, + this.flipY = !1, + this.generateMipmaps = !1 + } + + function on(A) { + he.call(this), + this.type = "WireframeGeometry"; + var e, t, i, o, n, r, a, s, l, c, h = [], + d = [0, 0], + p = {}, + g = ["a", "b", "c"]; + if (A && A.isGeometry) { + var u = A.faces; + for (e = 0, + i = u.length; i > e; e++) { + var f = u[e]; + for (t = 0; 3 > t; t++) + a = f[g[t]], + s = f[g[(t + 1) % 3]], + d[0] = Math.min(a, s), + d[1] = Math.max(a, s), + void 0 === p[l = d[0] + "," + d[1]] && (p[l] = { + index1: d[0], + index2: d[1] + }) + } + for (l in p) + h.push((c = A.vertices[(r = p[l]).index1]).x, c.y, c.z), + h.push((c = A.vertices[r.index2]).x, c.y, c.z) + } else if (A && A.isBufferGeometry) { + var m, C, v, I, E; + if (c = new y, + null !== A.index) { + for (m = A.attributes.position, + C = A.index, + 0 === (v = A.groups).length && (v = [{ + start: 0, + count: C.count, + materialIndex: 0 + }]), + o = 0, + n = v.length; n > o; ++o) + for (e = E = (I = v[o]).start, + i = E + I.count; i > e; e += 3) + for (t = 0; 3 > t; t++) + a = C.getX(e + t), + s = C.getX(e + (t + 1) % 3), + d[0] = Math.min(a, s), + d[1] = Math.max(a, s), + void 0 === p[l = d[0] + "," + d[1]] && (p[l] = { + index1: d[0], + index2: d[1] + }); + for (l in p) + c.fromBufferAttribute(m, (r = p[l]).index1), + h.push(c.x, c.y, c.z), + c.fromBufferAttribute(m, r.index2), + h.push(c.x, c.y, c.z) + } else + for (e = 0, + i = (m = A.attributes.position).count / 3; i > e; e++) + for (t = 0; 3 > t; t++) + c.fromBufferAttribute(m, 3 * e + t), + h.push(c.x, c.y, c.z), + c.fromBufferAttribute(m, 3 * e + (t + 1) % 3), + h.push(c.x, c.y, c.z) + } + this.setAttribute("position", new Ae(h, 3)) + } + + function nn(A, e, t) { + De.call(this), + this.type = "ParametricGeometry", + this.parameters = { + func: A, + slices: e, + stacks: t + }, + this.fromBufferGeometry(new rn(A, e, t)), + this.mergeVertices() + } + + function rn(A, e, t) { + he.call(this), + this.type = "ParametricBufferGeometry", + this.parameters = { + func: A, + slices: e, + stacks: t + }; + var i, o, n = [], + r = [], + a = [], + s = [], + l = 1e-5, + c = new y, + h = new y, + d = new y, + p = new y, + g = new y; + 3 > A.length && console.error("THREE.ParametricGeometry: Function must now modify a Vector3 as third parameter."); + var u = e + 1; + for (i = 0; t >= i; i++) { + var f = i / t; + for (o = 0; e >= o; o++) { + var m = o / e; + A(m, f, h), + r.push(h.x, h.y, h.z), + 0 > m - l ? (A(m + l, f, d), + p.subVectors(d, h)) : (A(m - l, f, d), + p.subVectors(h, d)), + 0 > f - l ? (A(m, f + l, d), + g.subVectors(d, h)) : (A(m, f - l, d), + g.subVectors(h, d)), + c.crossVectors(p, g).normalize(), + a.push(c.x, c.y, c.z), + s.push(m, f) + } + } + for (i = 0; t > i; i++) + for (o = 0; e > o; o++) { + var C = i * u + o + 1, + v = (i + 1) * u + o + 1, + I = (i + 1) * u + o; + n.push(i * u + o, C, I), + n.push(C, v, I) + } + this.setIndex(n), + this.setAttribute("position", new Ae(r, 3)), + this.setAttribute("normal", new Ae(a, 3)), + this.setAttribute("uv", new Ae(s, 2)) + } + + function an(A, e, t, i) { + De.call(this), + this.type = "PolyhedronGeometry", + this.parameters = { + vertices: A, + indices: e, + radius: t, + detail: i + }, + this.fromBufferGeometry(new sn(A, e, t, i)), + this.mergeVertices() + } + + function sn(A, e, t, i) { + he.call(this), + this.type = "PolyhedronBufferGeometry", + this.parameters = { + vertices: A, + indices: e, + radius: t, + detail: i + }, + t = t || 1; + var o = [], + n = []; + + function r(A, e, t, i) { + var o, n, r = Math.pow(2, i), + s = []; + for (o = 0; r >= o; o++) { + s[o] = []; + var l = A.clone().lerp(t, o / r), + c = e.clone().lerp(t, o / r), + h = r - o; + for (n = 0; h >= n; n++) + s[o][n] = 0 === n && o === r ? l : l.clone().lerp(c, n / h) + } + for (o = 0; r > o; o++) + for (n = 0; 2 * (r - o) - 1 > n; n++) { + var d = Math.floor(n / 2); + n % 2 == 0 ? (a(s[o][d + 1]), + a(s[o + 1][d]), + a(s[o][d])) : (a(s[o][d + 1]), + a(s[o + 1][d + 1]), + a(s[o + 1][d])) + } + } + + function a(A) { + o.push(A.x, A.y, A.z) + } + + function l(e, t) { + var i = 3 * e; + t.x = A[i + 0], + t.y = A[i + 1], + t.z = A[i + 2] + } + + function c(A, e, t, i) { + 0 > i && 1 === A.x && (n[e] = A.x - 1), + 0 === t.x && 0 === t.z && (n[e] = i / 2 / Math.PI + .5) + } + + function h(A) { + return Math.atan2(A.z, -A.x) + }! function (A) { + for (var t = new y, i = new y, o = new y, n = 0; e.length > n; n += 3) + l(e[n + 0], t), + l(e[n + 1], i), + l(e[n + 2], o), + r(t, i, o, A) + }(i = i || 0), + function (A) { + for (var e = new y, t = 0; o.length > t; t += 3) + e.x = o[t + 0], + e.y = o[t + 1], + e.z = o[t + 2], + e.normalize().multiplyScalar(A), + o[t + 0] = e.x, + o[t + 1] = e.y, + o[t + 2] = e.z + }(t), + function () { + for (var A = new y, e = 0; o.length > e; e += 3) { + A.x = o[e + 0], + A.y = o[e + 1], + A.z = o[e + 2]; + var t = h(A) / 2 / Math.PI + .5, + i = (r = A, + Math.atan2(-r.y, Math.sqrt(r.x * r.x + r.z * r.z)) / Math.PI + .5); + n.push(t, 1 - i) + } + var r; + (function () { + for (var A = new y, e = new y, t = new y, i = new y, r = new s, a = new s, l = new s, d = 0, p = 0; o.length > d; d += 9, + p += 6) { + A.set(o[d + 0], o[d + 1], o[d + 2]), + e.set(o[d + 3], o[d + 4], o[d + 5]), + t.set(o[d + 6], o[d + 7], o[d + 8]), + r.set(n[p + 0], n[p + 1]), + a.set(n[p + 2], n[p + 3]), + l.set(n[p + 4], n[p + 5]), + i.copy(A).add(e).add(t).divideScalar(3); + var g = h(i); + c(r, p + 0, A, g), + c(a, p + 2, e, g), + c(l, p + 4, t, g) + } + })(), + function () { + for (var A = 0; n.length > A; A += 6) { + var e = n[A + 0], + t = n[A + 2], + i = n[A + 4], + o = Math.max(e, t, i), + r = Math.min(e, t, i); + o > .9 && .1 > r && (.2 > e && (n[A + 0] += 1), + .2 > t && (n[A + 2] += 1), + .2 > i && (n[A + 4] += 1)) + } + }() + }(), + this.setAttribute("position", new Ae(o, 3)), + this.setAttribute("normal", new Ae(o.slice(), 3)), + this.setAttribute("uv", new Ae(n, 2)), + 0 === i ? this.computeVertexNormals() : this.normalizeNormals() + } + + function ln(A, e) { + De.call(this), + this.type = "TetrahedronGeometry", + this.parameters = { + radius: A, + detail: e + }, + this.fromBufferGeometry(new cn(A, e)), + this.mergeVertices() + } + + function cn(A, e) { + sn.call(this, [1, 1, 1, -1, -1, 1, -1, 1, -1, 1, -1, -1], [2, 1, 0, 0, 3, 2, 1, 3, 0, 2, 3, 1], A, e), + this.type = "TetrahedronBufferGeometry", + this.parameters = { + radius: A, + detail: e + } + } + + function hn(A, e) { + De.call(this), + this.type = "OctahedronGeometry", + this.parameters = { + radius: A, + detail: e + }, + this.fromBufferGeometry(new dn(A, e)), + this.mergeVertices() + } + + function dn(A, e) { + sn.call(this, [1, 0, 0, -1, 0, 0, 0, 1, 0, 0, -1, 0, 0, 0, 1, 0, 0, -1], [0, 2, 4, 0, 4, 3, 0, 3, 5, 0, 5, 2, 1, 2, 5, 1, 5, 3, 1, 3, 4, 1, 4, 2], A, e), + this.type = "OctahedronBufferGeometry", + this.parameters = { + radius: A, + detail: e + } + } + + function pn(A, e) { + De.call(this), + this.type = "IcosahedronGeometry", + this.parameters = { + radius: A, + detail: e + }, + this.fromBufferGeometry(new gn(A, e)), + this.mergeVertices() + } + + function gn(A, e) { + var t = (1 + Math.sqrt(5)) / 2; + sn.call(this, [-1, t, 0, 1, t, 0, -1, -t, 0, 1, -t, 0, 0, -1, t, 0, 1, t, 0, -1, -t, 0, 1, -t, t, 0, -1, t, 0, 1, -t, 0, -1, -t, 0, 1], [0, 11, 5, 0, 5, 1, 0, 1, 7, 0, 7, 10, 0, 10, 11, 1, 5, 9, 5, 11, 4, 11, 10, 2, 10, 7, 6, 7, 1, 8, 3, 9, 4, 3, 4, 2, 3, 2, 6, 3, 6, 8, 3, 8, 9, 4, 9, 5, 2, 4, 11, 6, 2, 10, 8, 6, 7, 9, 8, 1], A, e), + this.type = "IcosahedronBufferGeometry", + this.parameters = { + radius: A, + detail: e + } + } + + function un(A, e) { + De.call(this), + this.type = "DodecahedronGeometry", + this.parameters = { + radius: A, + detail: e + }, + this.fromBufferGeometry(new fn(A, e)), + this.mergeVertices() + } + + function fn(A, e) { + var t = (1 + Math.sqrt(5)) / 2, + i = 1 / t; + sn.call(this, [-1, -1, -1, -1, -1, 1, -1, 1, -1, -1, 1, 1, 1, -1, -1, 1, -1, 1, 1, 1, -1, 1, 1, 1, 0, -i, -t, 0, -i, t, 0, i, -t, 0, i, t, -i, -t, 0, -i, t, 0, i, -t, 0, i, t, 0, -t, 0, -i, t, 0, -i, -t, 0, i, t, 0, i], [3, 11, 7, 3, 7, 15, 3, 15, 13, 7, 19, 17, 7, 17, 6, 7, 6, 15, 17, 4, 8, 17, 8, 10, 17, 10, 6, 8, 0, 16, 8, 16, 2, 8, 2, 10, 0, 12, 1, 0, 1, 18, 0, 18, 16, 6, 10, 2, 6, 2, 13, 6, 13, 15, 2, 16, 18, 2, 18, 3, 2, 3, 13, 18, 1, 9, 18, 9, 11, 18, 11, 3, 4, 14, 12, 4, 12, 0, 4, 0, 8, 11, 9, 5, 11, 5, 19, 11, 19, 7, 19, 5, 14, 19, 14, 4, 19, 4, 17, 1, 12, 14, 1, 14, 5, 1, 5, 9], A, e), + this.type = "DodecahedronBufferGeometry", + this.parameters = { + radius: A, + detail: e + } + } + + function mn(A, e, t, i, o, n) { + De.call(this), + this.type = "TubeGeometry", + this.parameters = { + path: A, + tubularSegments: e, + radius: t, + radialSegments: i, + closed: o + }, + void 0 !== n && console.warn("THREE.TubeGeometry: taper has been removed."); + var r = new Cn(A, e, t, i, o); + this.tangents = r.tangents, + this.normals = r.normals, + this.binormals = r.binormals, + this.fromBufferGeometry(r), + this.mergeVertices() + } + + function Cn(A, e, t, i, o) { + he.call(this), + this.type = "TubeBufferGeometry", + this.parameters = { + path: A, + tubularSegments: e, + radius: t, + radialSegments: i, + closed: o + }, + t = t || 1, + i = i || 8; + var n = A.computeFrenetFrames(e = e || 64, o = o || !1); + this.tangents = n.tangents, + this.normals = n.normals, + this.binormals = n.binormals; + var r, a, l = new y, + c = new y, + h = new s, + d = new y, + p = [], + g = [], + u = [], + f = []; + + function m(o) { + d = A.getPointAt(o / e, d); + var r = n.normals[o], + s = n.binormals[o]; + for (a = 0; i >= a; a++) { + var h = a / i * Math.PI * 2, + u = Math.sin(h), + f = -Math.cos(h); + c.x = f * r.x + u * s.x, + c.y = f * r.y + u * s.y, + c.z = f * r.z + u * s.z, + c.normalize(), + g.push(c.x, c.y, c.z), + l.x = d.x + t * c.x, + l.y = d.y + t * c.y, + l.z = d.z + t * c.z, + p.push(l.x, l.y, l.z) + } + }! function () { + for (r = 0; e > r; r++) + m(r); + m(!1 === o ? e : 0), + function () { + for (r = 0; e >= r; r++) + for (a = 0; i >= a; a++) + h.x = r / e, + h.y = a / i, + u.push(h.x, h.y) + }(), + function () { + for (a = 1; e >= a; a++) + for (r = 1; i >= r; r++) { + var A = (i + 1) * a + (r - 1), + t = (i + 1) * a + r, + o = (i + 1) * (a - 1) + r; + f.push((i + 1) * (a - 1) + (r - 1), A, o), + f.push(A, t, o) + } + }() + }(), + this.setIndex(f), + this.setAttribute("position", new Ae(p, 3)), + this.setAttribute("normal", new Ae(g, 3)), + this.setAttribute("uv", new Ae(u, 2)) + } + + function yn(A, e, t, i, o, n, r) { + De.call(this), + this.type = "TorusKnotGeometry", + this.parameters = { + radius: A, + tube: e, + tubularSegments: t, + radialSegments: i, + p: o, + q: n + }, + void 0 !== r && console.warn("THREE.TorusKnotGeometry: heightScale has been deprecated. Use .scale( x, y, z ) instead."), + this.fromBufferGeometry(new vn(A, e, t, i, o, n)), + this.mergeVertices() + } + + function vn(A, e, t, i, o, n) { + he.call(this), + this.type = "TorusKnotBufferGeometry", + this.parameters = { + radius: A, + tube: e, + tubularSegments: t, + radialSegments: i, + p: o, + q: n + }, + A = A || 1, + e = e || .4, + t = Math.floor(t) || 64, + i = Math.floor(i) || 8, + o = o || 2, + n = n || 3; + var r, a, s = [], + l = [], + c = [], + h = [], + d = new y, + p = new y, + g = new y, + u = new y, + f = new y, + m = new y, + C = new y; + for (r = 0; t >= r; ++r) { + var v = r / t * o * Math.PI * 2; + for (M(v, o, n, A, g), + M(v + .01, o, n, A, u), + m.subVectors(u, g), + C.addVectors(u, g), + f.crossVectors(m, C), + C.crossVectors(f, m), + f.normalize(), + C.normalize(), + a = 0; i >= a; ++a) { + var I = a / i * Math.PI * 2, + E = -e * Math.cos(I), + B = e * Math.sin(I); + d.x = g.x + (E * C.x + B * f.x), + d.y = g.y + (E * C.y + B * f.y), + d.z = g.z + (E * C.z + B * f.z), + l.push(d.x, d.y, d.z), + p.subVectors(d, g).normalize(), + c.push(p.x, p.y, p.z), + h.push(r / t), + h.push(a / i) + } + } + for (a = 1; t >= a; a++) + for (r = 1; i >= r; r++) { + var x = (i + 1) * a + (r - 1), + S = (i + 1) * a + r, + w = (i + 1) * (a - 1) + r; + s.push((i + 1) * (a - 1) + (r - 1), x, w), + s.push(x, S, w) + } + + function M(A, e, t, i, o) { + var n = Math.cos(A), + r = Math.sin(A), + a = t / e * A, + s = Math.cos(a); + o.x = i * (2 + s) * .5 * n, + o.y = i * (2 + s) * r * .5, + o.z = i * Math.sin(a) * .5 + } + this.setIndex(s), + this.setAttribute("position", new Ae(l, 3)), + this.setAttribute("normal", new Ae(c, 3)), + this.setAttribute("uv", new Ae(h, 2)) + } + + function In(A, e, t, i, o) { + De.call(this), + this.type = "TorusGeometry", + this.parameters = { + radius: A, + tube: e, + radialSegments: t, + tubularSegments: i, + arc: o + }, + this.fromBufferGeometry(new En(A, e, t, i, o)), + this.mergeVertices() + } + + function En(A, e, t, i, o) { + he.call(this), + this.type = "TorusBufferGeometry", + this.parameters = { + radius: A, + tube: e, + radialSegments: t, + tubularSegments: i, + arc: o + }, + A = A || 1, + e = e || .4, + t = Math.floor(t) || 8, + i = Math.floor(i) || 6, + o = o || 2 * Math.PI; + var n, r, a = [], + s = [], + l = [], + c = [], + h = new y, + d = new y, + p = new y; + for (n = 0; t >= n; n++) + for (r = 0; i >= r; r++) { + var g = r / i * o, + u = n / t * Math.PI * 2; + d.x = (A + e * Math.cos(u)) * Math.cos(g), + d.y = (A + e * Math.cos(u)) * Math.sin(g), + d.z = e * Math.sin(u), + s.push(d.x, d.y, d.z), + h.x = A * Math.cos(g), + h.y = A * Math.sin(g), + p.subVectors(d, h).normalize(), + l.push(p.x, p.y, p.z), + c.push(r / i), + c.push(n / t) + } + for (n = 1; t >= n; n++) + for (r = 1; i >= r; r++) { + var f = (i + 1) * (n - 1) + r - 1, + m = (i + 1) * (n - 1) + r, + C = (i + 1) * n + r; + a.push((i + 1) * n + r - 1, f, C), + a.push(f, m, C) + } + this.setIndex(a), + this.setAttribute("position", new Ae(s, 3)), + this.setAttribute("normal", new Ae(l, 3)), + this.setAttribute("uv", new Ae(c, 2)) + } + Xo.prototype = Object.assign(Object.create(H.prototype), { + constructor: Xo, + isPoints: !0, + raycast: function (A, e) { + var t = this.geometry, + i = this.matrixWorld, + o = A.params.Points.threshold; + if (null === t.boundingSphere && t.computeBoundingSphere(), + zo.copy(t.boundingSphere), + zo.applyMatrix4(i), + zo.radius += o, + !1 !== A.ray.intersectsSphere(zo)) { + Wo.getInverse(i), + Jo.copy(A.ray).applyMatrix4(Wo); + var n = o / ((this.scale.x + this.scale.y + this.scale.z) / 3), + r = n * n; + if (t.isBufferGeometry) { + var a = t.index, + s = t.attributes.position.array; + if (null !== a) + for (var l = a.array, c = 0, h = l.length; h > c; c++) { + var d = l[c]; + Zo.fromArray(s, 3 * d), + _o(Zo, d, r, i, A, e, this) + } + else { + c = 0; + for (var p = s.length / 3; p > c; c++) + Zo.fromArray(s, 3 * c), + _o(Zo, c, r, i, A, e, this) + } + } else { + var g = t.vertices; + for (c = 0, + p = g.length; p > c; c++) + _o(g[c], c, r, i, A, e, this) + } + } + }, + updateMorphTargets: function () { + var A, e, t, i = this.geometry; + if (i.isBufferGeometry) { + var o = i.morphAttributes, + n = Object.keys(o); + if (n.length > 0) { + var r = o[n[0]]; + if (void 0 !== r) + for (this.morphTargetInfluences = [], + this.morphTargetDictionary = {}, + A = 0, + e = r.length; e > A; A++) + t = r[A].name || String(A), + this.morphTargetInfluences.push(0), + this.morphTargetDictionary[t] = A + } + } else { + var a = i.morphTargets; + void 0 !== a && a.length > 0 && console.error("THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.") + } + }, + clone: function () { + return new this.constructor(this.geometry, this.material).copy(this) + } + }), + $o.prototype = Object.assign(Object.create(d.prototype), { + constructor: $o, + isVideoTexture: !0, + update: function () { + var A = this.image; + A.HAVE_CURRENT_DATA > A.readyState || (this.needsUpdate = !0) + } + }), + (An.prototype = Object.create(d.prototype)).constructor = An, + An.prototype.isCompressedTexture = !0, + (en.prototype = Object.create(d.prototype)).constructor = en, + en.prototype.isCanvasTexture = !0, + (tn.prototype = Object.create(d.prototype)).constructor = tn, + tn.prototype.isDepthTexture = !0, + (on.prototype = Object.create(he.prototype)).constructor = on, + (nn.prototype = Object.create(De.prototype)).constructor = nn, + (rn.prototype = Object.create(he.prototype)).constructor = rn, + (an.prototype = Object.create(De.prototype)).constructor = an, + (sn.prototype = Object.create(he.prototype)).constructor = sn, + (ln.prototype = Object.create(De.prototype)).constructor = ln, + (cn.prototype = Object.create(sn.prototype)).constructor = cn, + (hn.prototype = Object.create(De.prototype)).constructor = hn, + (dn.prototype = Object.create(sn.prototype)).constructor = dn, + (pn.prototype = Object.create(De.prototype)).constructor = pn, + (gn.prototype = Object.create(sn.prototype)).constructor = gn, + (un.prototype = Object.create(De.prototype)).constructor = un, + (fn.prototype = Object.create(sn.prototype)).constructor = fn, + (mn.prototype = Object.create(De.prototype)).constructor = mn, + (Cn.prototype = Object.create(he.prototype)).constructor = Cn, + Cn.prototype.toJSON = function () { + var A = he.prototype.toJSON.call(this); + return A.path = this.parameters.path.toJSON(), + A + }, + (yn.prototype = Object.create(De.prototype)).constructor = yn, + (vn.prototype = Object.create(he.prototype)).constructor = vn, + (In.prototype = Object.create(De.prototype)).constructor = In, + (En.prototype = Object.create(he.prototype)).constructor = En; + var Bn = function (A, e, t) { + t = t || 2; + var i, o, n, r, a, s, l, c = e && e.length, + h = c ? e[0] * t : A.length, + d = xn(A, 0, h, t, !0), + p = []; + if (!d || d.next === d.prev) + return p; + if (c && (d = function (A, e, t, i) { + var o, n, r, a = []; + for (o = 0, + n = e.length; n > o; o++) + (r = xn(A, e[o] * i, n - 1 > o ? e[o + 1] * i : A.length, i, !1)) === r.next && (r.steiner = !0), + a.push(Tn(r)); + for (a.sort(Kn), + o = 0; a.length > o; o++) + Qn(a[o], t), + t = Sn(t, t.next); + return t + }(A, e, d, t)), + A.length > 80 * t) { + i = n = A[0], + o = r = A[1]; + for (var g = t; h > g; g += t) + i > (a = A[g]) && (i = a), + o > (s = A[g + 1]) && (o = s), + a > n && (n = a), + s > r && (r = s); + l = 0 !== (l = Math.max(n - i, r - o)) ? 1 / l : 0 + } + return wn(d, p, t, i, o, l), + p + }; + + function xn(A, e, t, i, o) { + var n, r; + if (o === function (A, e, t, i) { + for (var o = 0, n = e, r = t - i; t > n; n += i) + o += (A[r] - A[n]) * (A[n + 1] + A[r + 1]), + r = n; + return o + }(A, e, t, i) > 0) + for (n = e; t > n; n += i) + r = Pn(n, A[n], A[n + 1], r); + else + for (n = t - i; n >= e; n -= i) + r = Pn(n, A[n], A[n + 1], r); + return r && Nn(r, r.next) && (qn(r), + r = r.next), + r + } + + function Sn(A, e) { + if (!A) + return A; + e || (e = A); + var t, i = A; + do { + if (t = !1, + i.steiner || !Nn(i, i.next) && 0 !== Ln(i.prev, i, i.next)) + i = i.next; + else { + if (qn(i), + (i = e = i.prev) === i.next) + break; + t = !0 + } + } while (t || i !== e); + return e + } + + function wn(A, e, t, i, o, n, r) { + if (A) { + !r && n && function (A, e, t, i) { + var o = A; + do { + null === o.z && (o.z = Rn(o.x, o.y, e, t, i)), + o.prevZ = o.prev, + o.nextZ = o.next, + o = o.next + } while (o !== A); + o.prevZ.nextZ = null, + o.prevZ = null, + function (A) { + var e, t, i, o, n, r, a, s, l = 1; + do { + for (t = A, + A = null, + n = null, + r = 0; t;) { + for (r++, + i = t, + a = 0, + e = 0; l > e && (a++, + i = i.nextZ); e++) + ; + for (s = l; a > 0 || s > 0 && i;) + 0 === a || 0 !== s && i && t.z > i.z ? (o = i, + i = i.nextZ, + s--) : (o = t, + t = t.nextZ, + a--), + n ? n.nextZ = o : A = o, + o.prevZ = n, + n = o; + t = i + } + n.nextZ = null, + l *= 2 + } while (r > 1) + }(o) + }(A, i, o, n); + for (var a, s, l = A; A.prev !== A.next;) + if (a = A.prev, + s = A.next, + n ? bn(A, i, o, n) : Mn(A)) + e.push(a.i / t), + e.push(A.i / t), + e.push(s.i / t), + qn(A), + A = s.next, + l = s.next; + else if ((A = s) === l) { + r ? 1 === r ? wn(A = Un(A, e, t), e, t, i, o, n, 2) : 2 === r && Fn(A, e, t, i, o, n) : wn(Sn(A), e, t, i, o, n, 1); + break + } + } + } + + function Mn(A) { + var e = A.prev, + t = A, + i = A.next; + if (Ln(e, t, i) >= 0) + return !1; + for (var o = A.next.next; o !== A.prev;) { + if (kn(e.x, e.y, t.x, t.y, i.x, i.y, o.x, o.y) && Ln(o.prev, o, o.next) >= 0) + return !1; + o = o.next + } + return !0 + } + + function bn(A, e, t, i) { + var o = A.prev, + n = A, + r = A.next; + if (Ln(o, n, r) >= 0) + return !1; + for (var a = o.x > n.x ? o.x > r.x ? o.x : r.x : n.x > r.x ? n.x : r.x, s = o.y > n.y ? o.y > r.y ? o.y : r.y : n.y > r.y ? n.y : r.y, l = Rn(n.x > o.x ? r.x > o.x ? o.x : r.x : r.x > n.x ? n.x : r.x, n.y > o.y ? r.y > o.y ? o.y : r.y : r.y > n.y ? n.y : r.y, e, t, i), c = Rn(a, s, e, t, i), h = A.prevZ, d = A.nextZ; h && h.z >= l && d && c >= d.z;) { + if (h !== A.prev && h !== A.next && kn(o.x, o.y, n.x, n.y, r.x, r.y, h.x, h.y) && Ln(h.prev, h, h.next) >= 0) + return !1; + if (h = h.prevZ, + d !== A.prev && d !== A.next && kn(o.x, o.y, n.x, n.y, r.x, r.y, d.x, d.y) && Ln(d.prev, d, d.next) >= 0) + return !1; + d = d.nextZ + } + for (; h && h.z >= l;) { + if (h !== A.prev && h !== A.next && kn(o.x, o.y, n.x, n.y, r.x, r.y, h.x, h.y) && Ln(h.prev, h, h.next) >= 0) + return !1; + h = h.prevZ + } + for (; d && c >= d.z;) { + if (d !== A.prev && d !== A.next && kn(o.x, o.y, n.x, n.y, r.x, r.y, d.x, d.y) && Ln(d.prev, d, d.next) >= 0) + return !1; + d = d.nextZ + } + return !0 + } + + function Un(A, e, t) { + var i = A; + do { + var o = i.prev, + n = i.next.next; + !Nn(o, n) && On(o, i, i.next, n) && Vn(o, n) && Vn(n, o) && (e.push(o.i / t), + e.push(i.i / t), + e.push(n.i / t), + qn(i), + qn(i.next), + i = A = n), + i = i.next + } while (i !== A); + return i + } + + function Fn(A, e, t, i, o, n) { + var r = A; + do { + for (var a = r.next.next; a !== r.prev;) { + if (r.i !== a.i && Dn(r, a)) { + var s = Gn(r, a); + return r = Sn(r, r.next), + s = Sn(s, s.next), + wn(r, e, t, i, o, n), + void wn(s, e, t, i, o, n) + } + a = a.next + } + r = r.next + } while (r !== A) + } + + function Kn(A, e) { + return A.x - e.x + } + + function Qn(A, e) { + if (e = function (A, e) { + var t, i = e, + o = A.x, + n = A.y, + r = -1 / 0; + do { + if (i.y >= n && n >= i.next.y && i.next.y !== i.y) { + var a = i.x + (n - i.y) * (i.next.x - i.x) / (i.next.y - i.y); + if (o >= a && a > r) { + if (r = a, + a === o) { + if (n === i.y) + return i; + if (n === i.next.y) + return i.next + } + t = i.next.x > i.x ? i : i.next + } + } + i = i.next + } while (i !== e); + if (!t) + return null; + if (o === r) + return t.prev; + var s, l = t, + c = t.x, + h = t.y, + d = 1 / 0; + i = t.next; + for (; i !== l;) + i.x > o || c > i.x || o === i.x || !kn(h > n ? o : r, n, c, h, h > n ? r : o, n, i.x, i.y) || (s = Math.abs(n - i.y) / (o - i.x), + (d > s || s === d && i.x > t.x) && Vn(i, A) && (t = i, + d = s)), + i = i.next; + return t + }(A, e)) { + var t = Gn(e, A); + Sn(t, t.next) + } + } + + function Rn(A, e, t, i, o) { + return (A = 1431655765 & ((A = 858993459 & ((A = 252645135 & ((A = 16711935 & ((A = 32767 * (A - t) * o) | A << 8)) | A << 4)) | A << 2)) | A << 1)) | (e = 1431655765 & ((e = 858993459 & ((e = 252645135 & ((e = 16711935 & ((e = 32767 * (e - i) * o) | e << 8)) | e << 4)) | e << 2)) | e << 1)) << 1 + } + + function Tn(A) { + var e = A, + t = A; + do { + (t.x > e.x || e.x === t.x && t.y > e.y) && (t = e), + e = e.next + } while (e !== A); + return t + } + + function kn(A, e, t, i, o, n, r, a) { + return (o - r) * (e - a) - (A - r) * (n - a) >= 0 && (A - r) * (i - a) - (t - r) * (e - a) >= 0 && (t - r) * (n - a) - (o - r) * (i - a) >= 0 + } + + function Dn(A, e) { + return A.next.i !== e.i && A.prev.i !== e.i && ! function (A, e) { + var t = A; + do { + if (t.i !== A.i && t.next.i !== A.i && t.i !== e.i && t.next.i !== e.i && On(t, t.next, A, e)) + return !0; + t = t.next + } while (t !== A); + return !1 + }(A, e) && Vn(A, e) && Vn(e, A) && function (A, e) { + var t = A, + i = !1, + o = (A.x + e.x) / 2, + n = (A.y + e.y) / 2; + do { + t.y > n != t.next.y > n && t.next.y !== t.y && (t.next.x - t.x) * (n - t.y) / (t.next.y - t.y) + t.x > o && (i = !i), + t = t.next + } while (t !== A); + return i + }(A, e) + } + + function Ln(A, e, t) { + return (e.y - A.y) * (t.x - e.x) - (e.x - A.x) * (t.y - e.y) + } + + function Nn(A, e) { + return A.x === e.x && A.y === e.y + } + + function On(A, e, t, i) { + return !!(Nn(A, t) && Nn(e, i) || Nn(A, i) && Nn(t, e)) || Ln(A, e, t) > 0 != Ln(A, e, i) > 0 && Ln(t, i, A) > 0 != Ln(t, i, e) > 0 + } + + function Vn(A, e) { + return 0 > Ln(A.prev, A, A.next) ? Ln(A, e, A.next) >= 0 && Ln(A, A.prev, e) >= 0 : 0 > Ln(A, e, A.prev) || 0 > Ln(A, A.next, e) + } + + function Gn(A, e) { + var t = new jn(A.i, A.x, A.y), + i = new jn(e.i, e.x, e.y), + o = A.next, + n = e.prev; + return A.next = e, + e.prev = A, + t.next = o, + o.prev = t, + i.next = t, + t.prev = i, + n.next = i, + i.prev = n, + i + } + + function Pn(A, e, t, i) { + var o = new jn(A, e, t); + return i ? (o.next = i.next, + o.prev = i, + i.next.prev = o, + i.next = o) : (o.prev = o, + o.next = o), + o + } + + function qn(A) { + A.next.prev = A.prev, + A.prev.next = A.next, + A.prevZ && (A.prevZ.nextZ = A.nextZ), + A.nextZ && (A.nextZ.prevZ = A.prevZ) + } + + function jn(A, e, t) { + this.i = A, + this.x = e, + this.y = t, + this.prev = null, + this.next = null, + this.z = null, + this.prevZ = null, + this.nextZ = null, + this.steiner = !1 + } + var Hn = { + area: function (A) { + for (var e = A.length, t = 0, i = e - 1, o = 0; e > o; i = o++) + t += A[i].x * A[o].y - A[o].x * A[i].y; + return .5 * t + }, + isClockWise: function (A) { + return 0 > Hn.area(A) + }, + triangulateShape: function (A, e) { + var t = [], + i = [], + o = []; + Yn(A), + Wn(t, A); + var n = A.length; + e.forEach(Yn); + for (var r = 0; e.length > r; r++) + i.push(n), + n += e[r].length, + Wn(t, e[r]); + var a = Bn(t, i); + for (r = 0; a.length > r; r += 3) + o.push(a.slice(r, r + 3)); + return o + } + }; + + function Yn(A) { + var e = A.length; + e > 2 && A[e - 1].equals(A[0]) && A.pop() + } + + function Wn(A, e) { + for (var t = 0; e.length > t; t++) + A.push(e[t].x), + A.push(e[t].y) + } + + function Jn(A, e) { + De.call(this), + this.type = "ExtrudeGeometry", + this.parameters = { + shapes: A, + options: e + }, + this.fromBufferGeometry(new zn(A, e)), + this.mergeVertices() + } + + function zn(A, e) { + he.call(this), + this.type = "ExtrudeBufferGeometry", + this.parameters = { + shapes: A, + options: e + }, + A = Array.isArray(A) ? A : [A]; + for (var t = this, i = [], o = [], n = 0, r = A.length; r > n; n++) { + a(A[n]) + } + + function a(A) { + var n = [], + r = void 0 !== e.curveSegments ? e.curveSegments : 12, + a = void 0 !== e.steps ? e.steps : 1, + l = void 0 !== e.depth ? e.depth : 100, + c = void 0 === e.bevelEnabled || e.bevelEnabled, + h = void 0 !== e.bevelThickness ? e.bevelThickness : 6, + d = void 0 !== e.bevelSize ? e.bevelSize : h - 2, + p = void 0 !== e.bevelOffset ? e.bevelOffset : 0, + g = void 0 !== e.bevelSegments ? e.bevelSegments : 3, + u = e.extrudePath, + f = void 0 !== e.UVGenerator ? e.UVGenerator : Zn; + void 0 !== e.amount && (console.warn("THREE.ExtrudeBufferGeometry: amount has been renamed to depth."), + l = e.amount); + var m, C, v, I, E, B, x, S, w = !1; + u && (m = u.getSpacedPoints(a), + w = !0, + c = !1, + C = u.computeFrenetFrames(a, !1), + v = new y, + I = new y, + E = new y), + c || (g = 0, + h = 0, + d = 0, + p = 0); + var M = A.extractPoints(r), + b = M.shape, + U = M.holes; + if (!Hn.isClockWise(b)) + for (b = b.reverse(), + x = 0, + S = U.length; S > x; x++) + Hn.isClockWise(B = U[x]) && (U[x] = B.reverse()); + var F = Hn.triangulateShape(b, U), + K = b; + for (x = 0, + S = U.length; S > x; x++) + b = b.concat(B = U[x]); + + function Q(A, e, t) { + return e || console.error("THREE.ExtrudeGeometry: vec does not exist"), + e.clone().multiplyScalar(t).add(A) + } + var R, T, k, D, L, N, O = b.length, + V = F.length; + + function G(A, e, t) { + var i, o, n, r = A.x - e.x, + a = A.y - e.y, + l = t.x - A.x, + c = t.y - A.y, + h = r * r + a * a; + if (Math.abs(r * c - a * l) > Number.EPSILON) { + var d = Math.sqrt(h), + p = Math.sqrt(l * l + c * c), + g = e.x - a / d, + u = e.y + r / d, + f = ((t.x - c / p - g) * c - (t.y + l / p - u) * l) / (r * c - a * l), + m = (i = g + r * f - A.x) * i + (o = u + a * f - A.y) * o; + if (2 >= m) + return new s(i, o); + n = Math.sqrt(m / 2) + } else { + var C = !1; + r > Number.EPSILON ? l > Number.EPSILON && (C = !0) : -Number.EPSILON > r ? -Number.EPSILON > l && (C = !0) : Math.sign(a) === Math.sign(c) && (C = !0), + C ? (i = -a, + o = r, + n = Math.sqrt(h)) : (i = r, + o = a, + n = Math.sqrt(h / 2)) + } + return new s(i / n, o / n) + } + for (var P = [], q = 0, j = K.length, H = j - 1, Y = q + 1; j > q; q++, + H++, + Y++) + H === j && (H = 0), + Y === j && (Y = 0), + P[q] = G(K[q], K[H], K[Y]); + var W, J, z = [], + Z = P.concat(); + for (x = 0, + S = U.length; S > x; x++) { + for (W = [], + H = (j = (B = U[x]).length) - 1, + Y = (q = 0) + 1; j > q; q++, + H++, + Y++) + H === j && (H = 0), + Y === j && (Y = 0), + W[q] = G(B[q], B[H], B[Y]); + z.push(W), + Z = Z.concat(W) + } + for (R = 0; g > R; R++) { + for (k = R / g, + D = h * Math.cos(k * Math.PI / 2), + T = d * Math.sin(k * Math.PI / 2) + p, + q = 0, + j = K.length; j > q; q++) + _((L = Q(K[q], P[q], T)).x, L.y, -D); + for (x = 0, + S = U.length; S > x; x++) + for (W = z[x], + q = 0, + j = (B = U[x]).length; j > q; q++) + _((L = Q(B[q], W[q], T)).x, L.y, -D) + } + for (T = d + p, + q = 0; O > q; q++) + L = c ? Q(b[q], Z[q], T) : b[q], + w ? (I.copy(C.normals[0]).multiplyScalar(L.x), + v.copy(C.binormals[0]).multiplyScalar(L.y), + E.copy(m[0]).add(I).add(v), + _(E.x, E.y, E.z)) : _(L.x, L.y, 0); + for (J = 1; a >= J; J++) + for (q = 0; O > q; q++) + L = c ? Q(b[q], Z[q], T) : b[q], + w ? (I.copy(C.normals[J]).multiplyScalar(L.x), + v.copy(C.binormals[J]).multiplyScalar(L.y), + E.copy(m[J]).add(I).add(v), + _(E.x, E.y, E.z)) : _(L.x, L.y, l / a * J); + for (R = g - 1; R >= 0; R--) { + for (k = R / g, + D = h * Math.cos(k * Math.PI / 2), + T = d * Math.sin(k * Math.PI / 2) + p, + q = 0, + j = K.length; j > q; q++) + _((L = Q(K[q], P[q], T)).x, L.y, l + D); + for (x = 0, + S = U.length; S > x; x++) + for (W = z[x], + q = 0, + j = (B = U[x]).length; j > q; q++) + L = Q(B[q], W[q], T), + w ? _(L.x, L.y + m[a - 1].y, m[a - 1].x + D) : _(L.x, L.y, l + D) + } + + function X(A, e) { + var t, i; + for (q = A.length; --q >= 0;) { + t = q, + 0 > (i = q - 1) && (i = A.length - 1); + var o = 0, + n = a + 2 * g; + for (o = 0; n > o; o++) { + var r = O * o, + s = O * (o + 1); + AA(e + t + r, e + i + r, e + i + s, e + t + s) + } + } + } + + function _(A, e, t) { + n.push(A), + n.push(e), + n.push(t) + } + + function $(A, e, o) { + eA(A), + eA(e), + eA(o); + var n = i.length / 3, + r = f.generateTopUV(t, i, n - 3, n - 2, n - 1); + tA(r[0]), + tA(r[1]), + tA(r[2]) + } + + function AA(A, e, o, n) { + eA(A), + eA(e), + eA(n), + eA(e), + eA(o), + eA(n); + var r = i.length / 3, + a = f.generateSideWallUV(t, i, r - 6, r - 3, r - 2, r - 1); + tA(a[0]), + tA(a[1]), + tA(a[3]), + tA(a[1]), + tA(a[2]), + tA(a[3]) + } + + function eA(A) { + i.push(n[3 * A + 0]), + i.push(n[3 * A + 1]), + i.push(n[3 * A + 2]) + } + + function tA(A) { + o.push(A.x), + o.push(A.y) + }! function () { + var A = i.length / 3; + if (c) { + var e = 0, + o = O * e; + for (q = 0; V > q; q++) + $((N = F[q])[2] + o, N[1] + o, N[0] + o); + for (o = O * (e = a + 2 * g), + q = 0; V > q; q++) + $((N = F[q])[0] + o, N[1] + o, N[2] + o) + } else { + for (q = 0; V > q; q++) + $((N = F[q])[2], N[1], N[0]); + for (q = 0; V > q; q++) + $((N = F[q])[0] + O * a, N[1] + O * a, N[2] + O * a) + } + t.addGroup(A, i.length / 3 - A, 0) + }(), + function () { + var A = i.length / 3, + e = 0; + for (X(K, e), + e += K.length, + x = 0, + S = U.length; S > x; x++) + X(B = U[x], e), + e += B.length; + t.addGroup(A, i.length / 3 - A, 1) + }() + } + this.setAttribute("position", new Ae(i, 3)), + this.setAttribute("uv", new Ae(o, 2)), + this.computeVertexNormals() + } + (Jn.prototype = Object.create(De.prototype)).constructor = Jn, + Jn.prototype.toJSON = function () { + var A = De.prototype.toJSON.call(this); + return Xn(this.parameters.shapes, this.parameters.options, A) + }, + (zn.prototype = Object.create(he.prototype)).constructor = zn, + zn.prototype.toJSON = function () { + var A = he.prototype.toJSON.call(this); + return Xn(this.parameters.shapes, this.parameters.options, A) + }; + var Zn = { + generateTopUV: function (A, e, t, i, o) { + var n = e[3 * i], + r = e[3 * i + 1], + a = e[3 * o], + l = e[3 * o + 1]; + return [new s(e[3 * t], e[3 * t + 1]), new s(n, r), new s(a, l)] + }, + generateSideWallUV: function (A, e, t, i, o, n) { + var r = e[3 * t], + a = e[3 * t + 1], + l = e[3 * t + 2], + c = e[3 * i], + h = e[3 * i + 1], + d = e[3 * i + 2], + p = e[3 * o], + g = e[3 * o + 1], + u = e[3 * o + 2], + f = e[3 * n], + m = e[3 * n + 1], + C = e[3 * n + 2]; + return .01 > Math.abs(a - h) ? [new s(r, 1 - l), new s(c, 1 - d), new s(p, 1 - u), new s(f, 1 - C)] : [new s(a, 1 - l), new s(h, 1 - d), new s(g, 1 - u), new s(m, 1 - C)] + } + }; + + function Xn(A, e, t) { + if (t.shapes = [], + Array.isArray(A)) + for (var i = 0, o = A.length; o > i; i++) { + t.shapes.push(A[i].uuid) + } + else + t.shapes.push(A.uuid); + return void 0 !== e.extrudePath && (t.options.extrudePath = e.extrudePath.toJSON()), + t + } + + function _n(A, e) { + De.call(this), + this.type = "TextGeometry", + this.parameters = { + text: A, + parameters: e + }, + this.fromBufferGeometry(new $n(A, e)), + this.mergeVertices() + } + + function $n(A, e) { + var t = (e = e || {}).font; + if (!t || !t.isFont) + return console.error("THREE.TextGeometry: font parameter is not an instance of THREE.Font."), + new De; + var i = t.generateShapes(A, e.size); + e.depth = void 0 !== e.height ? e.height : 50, + void 0 === e.bevelThickness && (e.bevelThickness = 10), + void 0 === e.bevelSize && (e.bevelSize = 8), + void 0 === e.bevelEnabled && (e.bevelEnabled = !1), + zn.call(this, i, e), + this.type = "TextBufferGeometry" + } + + function Ar(A, e, t, i, o, n, r) { + De.call(this), + this.type = "SphereGeometry", + this.parameters = { + radius: A, + widthSegments: e, + heightSegments: t, + phiStart: i, + phiLength: o, + thetaStart: n, + thetaLength: r + }, + this.fromBufferGeometry(new er(A, e, t, i, o, n, r)), + this.mergeVertices() + } + + function er(A, e, t, i, o, n, r) { + he.call(this), + this.type = "SphereBufferGeometry", + this.parameters = { + radius: A, + widthSegments: e, + heightSegments: t, + phiStart: i, + phiLength: o, + thetaStart: n, + thetaLength: r + }, + A = A || 1, + e = Math.max(3, Math.floor(e) || 8), + t = Math.max(2, Math.floor(t) || 6), + i = void 0 !== i ? i : 0, + o = void 0 !== o ? o : 2 * Math.PI, + n = void 0 !== n ? n : 0, + r = void 0 !== r ? r : Math.PI; + var a, s, l = Math.min(n + r, Math.PI), + c = 0, + h = [], + d = new y, + p = new y, + g = [], + u = [], + f = [], + m = []; + for (s = 0; t >= s; s++) { + var C = [], + v = s / t, + I = 0; + for (0 == s && 0 == n ? I = .5 / e : s == t && l == Math.PI && (I = -.5 / e), + a = 0; e >= a; a++) { + var E = a / e; + d.x = -A * Math.cos(i + E * o) * Math.sin(n + v * r), + d.y = A * Math.cos(n + v * r), + d.z = A * Math.sin(i + E * o) * Math.sin(n + v * r), + u.push(d.x, d.y, d.z), + p.copy(d).normalize(), + f.push(p.x, p.y, p.z), + m.push(E + I, 1 - v), + C.push(c++) + } + h.push(C) + } + for (s = 0; t > s; s++) + for (a = 0; e > a; a++) { + var B = h[s][a], + x = h[s + 1][a], + S = h[s + 1][a + 1]; + (0 !== s || n > 0) && g.push(h[s][a + 1], B, S), + (s !== t - 1 || l < Math.PI) && g.push(B, x, S) + } + this.setIndex(g), + this.setAttribute("position", new Ae(u, 3)), + this.setAttribute("normal", new Ae(f, 3)), + this.setAttribute("uv", new Ae(m, 2)) + } + + function tr(A, e, t, i, o, n) { + De.call(this), + this.type = "RingGeometry", + this.parameters = { + innerRadius: A, + outerRadius: e, + thetaSegments: t, + phiSegments: i, + thetaStart: o, + thetaLength: n + }, + this.fromBufferGeometry(new ir(A, e, t, i, o, n)), + this.mergeVertices() + } + + function ir(A, e, t, i, o, n) { + he.call(this), + this.type = "RingBufferGeometry", + this.parameters = { + innerRadius: A, + outerRadius: e, + thetaSegments: t, + phiSegments: i, + thetaStart: o, + thetaLength: n + }, + A = A || .5, + e = e || 1, + o = void 0 !== o ? o : 0, + n = void 0 !== n ? n : 2 * Math.PI, + t = void 0 !== t ? Math.max(3, t) : 8; + var r, a, l, c = [], + h = [], + d = [], + p = [], + g = A, + u = (e - A) / (i = void 0 !== i ? Math.max(1, i) : 1), + f = new y, + m = new s; + for (a = 0; i >= a; a++) { + for (l = 0; t >= l; l++) + r = o + l / t * n, + f.x = g * Math.cos(r), + f.y = g * Math.sin(r), + h.push(f.x, f.y, f.z), + d.push(0, 0, 1), + m.x = (f.x / e + 1) / 2, + m.y = (f.y / e + 1) / 2, + p.push(m.x, m.y); + g += u + } + for (a = 0; i > a; a++) { + var C = a * (t + 1); + for (l = 0; t > l; l++) { + var v = (r = l + C) + t + 1, + I = r + t + 2, + E = r + 1; + c.push(r, v, E), + c.push(v, I, E) + } + } + this.setIndex(c), + this.setAttribute("position", new Ae(h, 3)), + this.setAttribute("normal", new Ae(d, 3)), + this.setAttribute("uv", new Ae(p, 2)) + } + + function or(A, e, t, i) { + De.call(this), + this.type = "LatheGeometry", + this.parameters = { + points: A, + segments: e, + phiStart: t, + phiLength: i + }, + this.fromBufferGeometry(new nr(A, e, t, i)), + this.mergeVertices() + } + + function nr(A, e, t, i) { + he.call(this), + this.type = "LatheBufferGeometry", + this.parameters = { + points: A, + segments: e, + phiStart: t, + phiLength: i + }, + e = Math.floor(e) || 12, + t = t || 0, + i = i || 2 * Math.PI, + i = a.clamp(i, 0, 2 * Math.PI); + var o, n, r, l = [], + c = [], + h = [], + d = 1 / e, + p = new y, + g = new s; + for (n = 0; e >= n; n++) { + var u = t + n * d * i, + f = Math.sin(u), + m = Math.cos(u); + for (r = 0; A.length - 1 >= r; r++) + p.x = A[r].x * f, + p.y = A[r].y, + p.z = A[r].x * m, + c.push(p.x, p.y, p.z), + g.x = n / e, + g.y = r / (A.length - 1), + h.push(g.x, g.y) + } + for (n = 0; e > n; n++) + for (r = 0; A.length - 1 > r; r++) { + var C = (o = r + n * A.length) + A.length, + v = o + A.length + 1, + I = o + 1; + l.push(o, C, I), + l.push(C, v, I) + } + if (this.setIndex(l), + this.setAttribute("position", new Ae(c, 3)), + this.setAttribute("uv", new Ae(h, 2)), + this.computeVertexNormals(), + i === 2 * Math.PI) { + var E = this.attributes.normal.array, + B = new y, + x = new y, + S = new y; + for (o = e * A.length * 3, + n = 0, + r = 0; A.length > n; n++, + r += 3) + B.x = E[r + 0], + B.y = E[r + 1], + B.z = E[r + 2], + x.x = E[o + r + 0], + x.y = E[o + r + 1], + x.z = E[o + r + 2], + S.addVectors(B, x).normalize(), + E[r + 0] = E[o + r + 0] = S.x, + E[r + 1] = E[o + r + 1] = S.y, + E[r + 2] = E[o + r + 2] = S.z + } + } + + function rr(A, e) { + De.call(this), + this.type = "ShapeGeometry", + "object" == typeof e && (console.warn("THREE.ShapeGeometry: Options parameter has been removed."), + e = e.curveSegments), + this.parameters = { + shapes: A, + curveSegments: e + }, + this.fromBufferGeometry(new ar(A, e)), + this.mergeVertices() + } + + function ar(A, e) { + he.call(this), + this.type = "ShapeBufferGeometry", + this.parameters = { + shapes: A, + curveSegments: e + }, + e = e || 12; + var t = [], + i = [], + o = [], + n = [], + r = 0, + a = 0; + if (!1 === Array.isArray(A)) + l(A); + else + for (var s = 0; A.length > s; s++) + l(A[s]), + this.addGroup(r, a, s), + r += a, + a = 0; + + function l(A) { + var r, s, l, c = i.length / 3, + h = A.extractPoints(e), + d = h.shape, + p = h.holes; + for (!1 === Hn.isClockWise(d) && (d = d.reverse()), + r = 0, + s = p.length; s > r; r++) + !0 === Hn.isClockWise(l = p[r]) && (p[r] = l.reverse()); + var g = Hn.triangulateShape(d, p); + for (r = 0, + s = p.length; s > r; r++) + d = d.concat(l = p[r]); + for (r = 0, + s = d.length; s > r; r++) { + var u = d[r]; + i.push(u.x, u.y, 0), + o.push(0, 0, 1), + n.push(u.x, u.y) + } + for (r = 0, + s = g.length; s > r; r++) { + var f = g[r]; + t.push(f[0] + c, f[1] + c, f[2] + c), + a += 3 + } + } + this.setIndex(t), + this.setAttribute("position", new Ae(i, 3)), + this.setAttribute("normal", new Ae(o, 3)), + this.setAttribute("uv", new Ae(n, 2)) + } + + function sr(A, e) { + if (e.shapes = [], + Array.isArray(A)) + for (var t = 0, i = A.length; i > t; t++) { + e.shapes.push(A[t].uuid) + } + else + e.shapes.push(A.uuid); + return e + } + + function lr(A, e) { + he.call(this), + this.type = "EdgesGeometry", + this.parameters = { + thresholdAngle: e + }, + e = void 0 !== e ? e : 1; + var t, i, o, n, r = [], + s = Math.cos(a.DEG2RAD * e), + l = [0, 0], + c = {}, + h = ["a", "b", "c"]; + A.isBufferGeometry ? (n = new De).fromBufferGeometry(A) : n = A.clone(), + n.mergeVertices(), + n.computeFaceNormals(); + for (var d = n.vertices, p = n.faces, g = 0, u = p.length; u > g; g++) + for (var f = p[g], m = 0; 3 > m; m++) + t = f[h[m]], + i = f[h[(m + 1) % 3]], + l[0] = Math.min(t, i), + l[1] = Math.max(t, i), + void 0 === c[o = l[0] + "," + l[1]] ? c[o] = { + index1: l[0], + index2: l[1], + face1: g, + face2: void 0 + } : c[o].face2 = g; + for (o in c) { + var C = c[o]; + if (void 0 === C.face2 || p[C.face1].normal.dot(p[C.face2].normal) <= s) { + var y = d[C.index1]; + r.push(y.x, y.y, y.z), + r.push((y = d[C.index2]).x, y.y, y.z) + } + } + this.setAttribute("position", new Ae(r, 3)) + } + + function cr(A, e, t, i, o, n, r, a) { + De.call(this), + this.type = "CylinderGeometry", + this.parameters = { + radiusTop: A, + radiusBottom: e, + height: t, + radialSegments: i, + heightSegments: o, + openEnded: n, + thetaStart: r, + thetaLength: a + }, + this.fromBufferGeometry(new hr(A, e, t, i, o, n, r, a)), + this.mergeVertices() + } + + function hr(A, e, t, i, o, n, r, a) { + he.call(this), + this.type = "CylinderBufferGeometry", + this.parameters = { + radiusTop: A, + radiusBottom: e, + height: t, + radialSegments: i, + heightSegments: o, + openEnded: n, + thetaStart: r, + thetaLength: a + }; + var l = this; + A = void 0 !== A ? A : 1, + e = void 0 !== e ? e : 1, + t = t || 1, + i = Math.floor(i) || 8, + o = Math.floor(o) || 1, + n = void 0 !== n && n, + r = void 0 !== r ? r : 0, + a = void 0 !== a ? a : 2 * Math.PI; + var c = [], + h = [], + d = [], + p = [], + g = 0, + u = [], + f = t / 2, + m = 0; + + function C(t) { + var o, n, u, C = new s, + v = new y, + I = 0, + E = !0 === t ? A : e, + B = !0 === t ? 1 : -1; + for (n = g, + o = 1; i >= o; o++) + h.push(0, f * B, 0), + d.push(0, B, 0), + p.push(.5, .5), + g++; + for (u = g, + o = 0; i >= o; o++) { + var x = o / i * a + r, + S = Math.cos(x), + w = Math.sin(x); + v.x = E * w, + v.y = f * B, + v.z = E * S, + h.push(v.x, v.y, v.z), + d.push(0, B, 0), + C.x = .5 * S + .5, + C.y = .5 * w * B + .5, + p.push(C.x, C.y), + g++ + } + for (o = 0; i > o; o++) { + var M = n + o, + b = u + o; + !0 === t ? c.push(b, b + 1, M) : c.push(b + 1, b, M), + I += 3 + } + l.addGroup(m, I, !0 === t ? 1 : 2), + m += I + }! function () { + var n, s, C = new y, + v = new y, + I = 0, + E = (e - A) / t; + for (s = 0; o >= s; s++) { + var B = [], + x = s / o, + S = x * (e - A) + A; + for (n = 0; i >= n; n++) { + var w = n / i, + M = w * a + r, + b = Math.sin(M), + U = Math.cos(M); + v.x = S * b, + v.y = -x * t + f, + v.z = S * U, + h.push(v.x, v.y, v.z), + C.set(b, E, U).normalize(), + d.push(C.x, C.y, C.z), + p.push(w, 1 - x), + B.push(g++) + } + u.push(B) + } + for (n = 0; i > n; n++) + for (s = 0; o > s; s++) { + var F = u[s + 1][n], + K = u[s + 1][n + 1], + Q = u[s][n + 1]; + c.push(u[s][n], F, Q), + c.push(F, K, Q), + I += 6 + } + l.addGroup(m, I, 0), + m += I + }(), + !1 === n && (A > 0 && C(!0), + e > 0 && C(!1)), + this.setIndex(c), + this.setAttribute("position", new Ae(h, 3)), + this.setAttribute("normal", new Ae(d, 3)), + this.setAttribute("uv", new Ae(p, 2)) + } + + function dr(A, e, t, i, o, n, r) { + cr.call(this, 0, A, e, t, i, o, n, r), + this.type = "ConeGeometry", + this.parameters = { + radius: A, + height: e, + radialSegments: t, + heightSegments: i, + openEnded: o, + thetaStart: n, + thetaLength: r + } + } + + function pr(A, e, t, i, o, n, r) { + hr.call(this, 0, A, e, t, i, o, n, r), + this.type = "ConeBufferGeometry", + this.parameters = { + radius: A, + height: e, + radialSegments: t, + heightSegments: i, + openEnded: o, + thetaStart: n, + thetaLength: r + } + } + + function gr(A, e, t, i) { + De.call(this), + this.type = "CircleGeometry", + this.parameters = { + radius: A, + segments: e, + thetaStart: t, + thetaLength: i + }, + this.fromBufferGeometry(new ur(A, e, t, i)), + this.mergeVertices() + } + + function ur(A, e, t, i) { + he.call(this), + this.type = "CircleBufferGeometry", + this.parameters = { + radius: A, + segments: e, + thetaStart: t, + thetaLength: i + }, + A = A || 1, + e = void 0 !== e ? Math.max(3, e) : 8, + t = void 0 !== t ? t : 0, + i = void 0 !== i ? i : 2 * Math.PI; + var o, n, r = [], + a = [], + l = [], + c = [], + h = new y, + d = new s; + for (a.push(0, 0, 0), + l.push(0, 0, 1), + c.push(.5, .5), + n = 0, + o = 3; e >= n; n++, + o += 3) { + var p = t + n / e * i; + h.x = A * Math.cos(p), + h.y = A * Math.sin(p), + a.push(h.x, h.y, h.z), + l.push(0, 0, 1), + d.x = (a[o] / A + 1) / 2, + d.y = (a[o + 1] / A + 1) / 2, + c.push(d.x, d.y) + } + for (o = 1; e >= o; o++) + r.push(o, o + 1, 0); + this.setIndex(r), + this.setAttribute("position", new Ae(a, 3)), + this.setAttribute("normal", new Ae(l, 3)), + this.setAttribute("uv", new Ae(c, 2)) + } + (_n.prototype = Object.create(De.prototype)).constructor = _n, + ($n.prototype = Object.create(zn.prototype)).constructor = $n, + (Ar.prototype = Object.create(De.prototype)).constructor = Ar, + (er.prototype = Object.create(he.prototype)).constructor = er, + (tr.prototype = Object.create(De.prototype)).constructor = tr, + (ir.prototype = Object.create(he.prototype)).constructor = ir, + (or.prototype = Object.create(De.prototype)).constructor = or, + (nr.prototype = Object.create(he.prototype)).constructor = nr, + (rr.prototype = Object.create(De.prototype)).constructor = rr, + rr.prototype.toJSON = function () { + var A = De.prototype.toJSON.call(this); + return sr(this.parameters.shapes, A) + }, + (ar.prototype = Object.create(he.prototype)).constructor = ar, + ar.prototype.toJSON = function () { + var A = he.prototype.toJSON.call(this); + return sr(this.parameters.shapes, A) + }, + (lr.prototype = Object.create(he.prototype)).constructor = lr, + (cr.prototype = Object.create(De.prototype)).constructor = cr, + (hr.prototype = Object.create(he.prototype)).constructor = hr, + (dr.prototype = Object.create(cr.prototype)).constructor = dr, + (pr.prototype = Object.create(hr.prototype)).constructor = pr, + (gr.prototype = Object.create(De.prototype)).constructor = gr, + (ur.prototype = Object.create(he.prototype)).constructor = ur; + var fr = Object.freeze({ + __proto__: null, + WireframeGeometry: on, + ParametricGeometry: nn, + ParametricBufferGeometry: rn, + TetrahedronGeometry: ln, + TetrahedronBufferGeometry: cn, + OctahedronGeometry: hn, + OctahedronBufferGeometry: dn, + IcosahedronGeometry: pn, + IcosahedronBufferGeometry: gn, + DodecahedronGeometry: un, + DodecahedronBufferGeometry: fn, + PolyhedronGeometry: an, + PolyhedronBufferGeometry: sn, + TubeGeometry: mn, + TubeBufferGeometry: Cn, + TorusKnotGeometry: yn, + TorusKnotBufferGeometry: vn, + TorusGeometry: In, + TorusBufferGeometry: En, + TextGeometry: _n, + TextBufferGeometry: $n, + SphereGeometry: Ar, + SphereBufferGeometry: er, + RingGeometry: tr, + RingBufferGeometry: ir, + PlaneGeometry: At, + PlaneBufferGeometry: et, + LatheGeometry: or, + LatheBufferGeometry: nr, + ShapeGeometry: rr, + ShapeBufferGeometry: ar, + ExtrudeGeometry: Jn, + ExtrudeBufferGeometry: zn, + EdgesGeometry: lr, + ConeGeometry: dr, + ConeBufferGeometry: pr, + CylinderGeometry: cr, + CylinderBufferGeometry: hr, + CircleGeometry: gr, + CircleBufferGeometry: ur, + BoxGeometry: Le, + BoxBufferGeometry: Ne + }); + + function mr(A) { + qA.call(this), + this.type = "ShadowMaterial", + this.color = new LA(0), + this.transparent = !0, + this.setValues(A) + } + + function Cr(A) { + Pe.call(this, A), + this.type = "RawShaderMaterial" + } + + function yr(A) { + qA.call(this), + this.defines = { + STANDARD: "" + }, + this.type = "MeshStandardMaterial", + this.color = new LA(16777215), + this.roughness = 1, + this.metalness = 0, + this.map = null, + this.lightMap = null, + this.lightMapIntensity = 1, + this.aoMap = null, + this.aoMapIntensity = 1, + this.emissive = new LA(0), + this.emissiveIntensity = 1, + this.emissiveMap = null, + this.bumpMap = null, + this.bumpScale = 1, + this.normalMap = null, + this.normalMapType = 0, + this.normalScale = new s(1, 1), + this.displacementMap = null, + this.displacementScale = 1, + this.displacementBias = 0, + this.roughnessMap = null, + this.metalnessMap = null, + this.alphaMap = null, + this.envMap = null, + this.envMapIntensity = 1, + this.refractionRatio = .98, + this.wireframe = !1, + this.wireframeLinewidth = 1, + this.wireframeLinecap = "round", + this.wireframeLinejoin = "round", + this.skinning = !1, + this.morphTargets = !1, + this.morphNormals = !1, + this.vertexTangents = !1, + this.setValues(A) + } + + function vr(A) { + yr.call(this), + this.defines = { + STANDARD: "", + PHYSICAL: "" + }, + this.type = "MeshPhysicalMaterial", + this.clearcoat = 0, + this.clearcoatMap = null, + this.clearcoatRoughness = 0, + this.clearcoatRoughnessMap = null, + this.clearcoatNormalScale = new s(1, 1), + this.clearcoatNormalMap = null, + this.reflectivity = .5, + this.sheen = null, + this.transparency = 0, + this.setValues(A) + } + + function Ir(A) { + qA.call(this), + this.type = "MeshPhongMaterial", + this.color = new LA(16777215), + this.specular = new LA(1118481), + this.shininess = 30, + this.map = null, + this.lightMap = null, + this.lightMapIntensity = 1, + this.aoMap = null, + this.aoMapIntensity = 1, + this.emissive = new LA(0), + this.emissiveIntensity = 1, + this.emissiveMap = null, + this.bumpMap = null, + this.bumpScale = 1, + this.normalMap = null, + this.normalMapType = 0, + this.normalScale = new s(1, 1), + this.displacementMap = null, + this.displacementScale = 1, + this.displacementBias = 0, + this.specularMap = null, + this.alphaMap = null, + this.envMap = null, + this.combine = 0, + this.reflectivity = 1, + this.refractionRatio = .98, + this.wireframe = !1, + this.wireframeLinewidth = 1, + this.wireframeLinecap = "round", + this.wireframeLinejoin = "round", + this.skinning = !1, + this.morphTargets = !1, + this.morphNormals = !1, + this.setValues(A) + } + + function Er(A) { + qA.call(this), + this.defines = { + TOON: "" + }, + this.type = "MeshToonMaterial", + this.color = new LA(16777215), + this.specular = new LA(1118481), + this.shininess = 30, + this.map = null, + this.gradientMap = null, + this.lightMap = null, + this.lightMapIntensity = 1, + this.aoMap = null, + this.aoMapIntensity = 1, + this.emissive = new LA(0), + this.emissiveIntensity = 1, + this.emissiveMap = null, + this.bumpMap = null, + this.bumpScale = 1, + this.normalMap = null, + this.normalMapType = 0, + this.normalScale = new s(1, 1), + this.displacementMap = null, + this.displacementScale = 1, + this.displacementBias = 0, + this.specularMap = null, + this.alphaMap = null, + this.wireframe = !1, + this.wireframeLinewidth = 1, + this.wireframeLinecap = "round", + this.wireframeLinejoin = "round", + this.skinning = !1, + this.morphTargets = !1, + this.morphNormals = !1, + this.setValues(A) + } + + function Br(A) { + qA.call(this), + this.type = "MeshNormalMaterial", + this.bumpMap = null, + this.bumpScale = 1, + this.normalMap = null, + this.normalMapType = 0, + this.normalScale = new s(1, 1), + this.displacementMap = null, + this.displacementScale = 1, + this.displacementBias = 0, + this.wireframe = !1, + this.wireframeLinewidth = 1, + this.fog = !1, + this.skinning = !1, + this.morphTargets = !1, + this.morphNormals = !1, + this.setValues(A) + } + + function xr(A) { + qA.call(this), + this.type = "MeshLambertMaterial", + this.color = new LA(16777215), + this.map = null, + this.lightMap = null, + this.lightMapIntensity = 1, + this.aoMap = null, + this.aoMapIntensity = 1, + this.emissive = new LA(0), + this.emissiveIntensity = 1, + this.emissiveMap = null, + this.specularMap = null, + this.alphaMap = null, + this.envMap = null, + this.combine = 0, + this.reflectivity = 1, + this.refractionRatio = .98, + this.wireframe = !1, + this.wireframeLinewidth = 1, + this.wireframeLinecap = "round", + this.wireframeLinejoin = "round", + this.skinning = !1, + this.morphTargets = !1, + this.morphNormals = !1, + this.setValues(A) + } + + function Sr(A) { + qA.call(this), + this.defines = { + MATCAP: "" + }, + this.type = "MeshMatcapMaterial", + this.color = new LA(16777215), + this.matcap = null, + this.map = null, + this.bumpMap = null, + this.bumpScale = 1, + this.normalMap = null, + this.normalMapType = 0, + this.normalScale = new s(1, 1), + this.displacementMap = null, + this.displacementScale = 1, + this.displacementBias = 0, + this.alphaMap = null, + this.skinning = !1, + this.morphTargets = !1, + this.morphNormals = !1, + this.setValues(A) + } + + function wr(A) { + ko.call(this), + this.type = "LineDashedMaterial", + this.scale = 1, + this.dashSize = 3, + this.gapSize = 1, + this.setValues(A) + } + (mr.prototype = Object.create(qA.prototype)).constructor = mr, + mr.prototype.isShadowMaterial = !0, + mr.prototype.copy = function (A) { + return qA.prototype.copy.call(this, A), + this.color.copy(A.color), + this + }, + (Cr.prototype = Object.create(Pe.prototype)).constructor = Cr, + Cr.prototype.isRawShaderMaterial = !0, + (yr.prototype = Object.create(qA.prototype)).constructor = yr, + yr.prototype.isMeshStandardMaterial = !0, + yr.prototype.copy = function (A) { + return qA.prototype.copy.call(this, A), + this.defines = { + STANDARD: "" + }, + this.color.copy(A.color), + this.roughness = A.roughness, + this.metalness = A.metalness, + this.map = A.map, + this.lightMap = A.lightMap, + this.lightMapIntensity = A.lightMapIntensity, + this.aoMap = A.aoMap, + this.aoMapIntensity = A.aoMapIntensity, + this.emissive.copy(A.emissive), + this.emissiveMap = A.emissiveMap, + this.emissiveIntensity = A.emissiveIntensity, + this.bumpMap = A.bumpMap, + this.bumpScale = A.bumpScale, + this.normalMap = A.normalMap, + this.normalMapType = A.normalMapType, + this.normalScale.copy(A.normalScale), + this.displacementMap = A.displacementMap, + this.displacementScale = A.displacementScale, + this.displacementBias = A.displacementBias, + this.roughnessMap = A.roughnessMap, + this.metalnessMap = A.metalnessMap, + this.alphaMap = A.alphaMap, + this.envMap = A.envMap, + this.envMapIntensity = A.envMapIntensity, + this.refractionRatio = A.refractionRatio, + this.wireframe = A.wireframe, + this.wireframeLinewidth = A.wireframeLinewidth, + this.wireframeLinecap = A.wireframeLinecap, + this.wireframeLinejoin = A.wireframeLinejoin, + this.skinning = A.skinning, + this.morphTargets = A.morphTargets, + this.morphNormals = A.morphNormals, + this.vertexTangents = A.vertexTangents, + this + }, + (vr.prototype = Object.create(yr.prototype)).constructor = vr, + vr.prototype.isMeshPhysicalMaterial = !0, + vr.prototype.copy = function (A) { + return yr.prototype.copy.call(this, A), + this.defines = { + STANDARD: "", + PHYSICAL: "" + }, + this.clearcoat = A.clearcoat, + this.clearcoatMap = A.clearcoatMap, + this.clearcoatRoughness = A.clearcoatRoughness, + this.clearcoatRoughnessMap = A.clearcoatRoughnessMap, + this.clearcoatNormalMap = A.clearcoatNormalMap, + this.clearcoatNormalScale.copy(A.clearcoatNormalScale), + this.reflectivity = A.reflectivity, + this.sheen = A.sheen ? (this.sheen || new LA).copy(A.sheen) : null, + this.transparency = A.transparency, + this + }, + (Ir.prototype = Object.create(qA.prototype)).constructor = Ir, + Ir.prototype.isMeshPhongMaterial = !0, + Ir.prototype.copy = function (A) { + return qA.prototype.copy.call(this, A), + this.color.copy(A.color), + this.specular.copy(A.specular), + this.shininess = A.shininess, + this.map = A.map, + this.lightMap = A.lightMap, + this.lightMapIntensity = A.lightMapIntensity, + this.aoMap = A.aoMap, + this.aoMapIntensity = A.aoMapIntensity, + this.emissive.copy(A.emissive), + this.emissiveMap = A.emissiveMap, + this.emissiveIntensity = A.emissiveIntensity, + this.bumpMap = A.bumpMap, + this.bumpScale = A.bumpScale, + this.normalMap = A.normalMap, + this.normalMapType = A.normalMapType, + this.normalScale.copy(A.normalScale), + this.displacementMap = A.displacementMap, + this.displacementScale = A.displacementScale, + this.displacementBias = A.displacementBias, + this.specularMap = A.specularMap, + this.alphaMap = A.alphaMap, + this.envMap = A.envMap, + this.combine = A.combine, + this.reflectivity = A.reflectivity, + this.refractionRatio = A.refractionRatio, + this.wireframe = A.wireframe, + this.wireframeLinewidth = A.wireframeLinewidth, + this.wireframeLinecap = A.wireframeLinecap, + this.wireframeLinejoin = A.wireframeLinejoin, + this.skinning = A.skinning, + this.morphTargets = A.morphTargets, + this.morphNormals = A.morphNormals, + this + }, + (Er.prototype = Object.create(qA.prototype)).constructor = Er, + Er.prototype.isMeshToonMaterial = !0, + Er.prototype.copy = function (A) { + return qA.prototype.copy.call(this, A), + this.color.copy(A.color), + this.specular.copy(A.specular), + this.shininess = A.shininess, + this.map = A.map, + this.gradientMap = A.gradientMap, + this.lightMap = A.lightMap, + this.lightMapIntensity = A.lightMapIntensity, + this.aoMap = A.aoMap, + this.aoMapIntensity = A.aoMapIntensity, + this.emissive.copy(A.emissive), + this.emissiveMap = A.emissiveMap, + this.emissiveIntensity = A.emissiveIntensity, + this.bumpMap = A.bumpMap, + this.bumpScale = A.bumpScale, + this.normalMap = A.normalMap, + this.normalMapType = A.normalMapType, + this.normalScale.copy(A.normalScale), + this.displacementMap = A.displacementMap, + this.displacementScale = A.displacementScale, + this.displacementBias = A.displacementBias, + this.specularMap = A.specularMap, + this.alphaMap = A.alphaMap, + this.wireframe = A.wireframe, + this.wireframeLinewidth = A.wireframeLinewidth, + this.wireframeLinecap = A.wireframeLinecap, + this.wireframeLinejoin = A.wireframeLinejoin, + this.skinning = A.skinning, + this.morphTargets = A.morphTargets, + this.morphNormals = A.morphNormals, + this + }, + (Br.prototype = Object.create(qA.prototype)).constructor = Br, + Br.prototype.isMeshNormalMaterial = !0, + Br.prototype.copy = function (A) { + return qA.prototype.copy.call(this, A), + this.bumpMap = A.bumpMap, + this.bumpScale = A.bumpScale, + this.normalMap = A.normalMap, + this.normalMapType = A.normalMapType, + this.normalScale.copy(A.normalScale), + this.displacementMap = A.displacementMap, + this.displacementScale = A.displacementScale, + this.displacementBias = A.displacementBias, + this.wireframe = A.wireframe, + this.wireframeLinewidth = A.wireframeLinewidth, + this.skinning = A.skinning, + this.morphTargets = A.morphTargets, + this.morphNormals = A.morphNormals, + this + }, + (xr.prototype = Object.create(qA.prototype)).constructor = xr, + xr.prototype.isMeshLambertMaterial = !0, + xr.prototype.copy = function (A) { + return qA.prototype.copy.call(this, A), + this.color.copy(A.color), + this.map = A.map, + this.lightMap = A.lightMap, + this.lightMapIntensity = A.lightMapIntensity, + this.aoMap = A.aoMap, + this.aoMapIntensity = A.aoMapIntensity, + this.emissive.copy(A.emissive), + this.emissiveMap = A.emissiveMap, + this.emissiveIntensity = A.emissiveIntensity, + this.specularMap = A.specularMap, + this.alphaMap = A.alphaMap, + this.envMap = A.envMap, + this.combine = A.combine, + this.reflectivity = A.reflectivity, + this.refractionRatio = A.refractionRatio, + this.wireframe = A.wireframe, + this.wireframeLinewidth = A.wireframeLinewidth, + this.wireframeLinecap = A.wireframeLinecap, + this.wireframeLinejoin = A.wireframeLinejoin, + this.skinning = A.skinning, + this.morphTargets = A.morphTargets, + this.morphNormals = A.morphNormals, + this + }, + (Sr.prototype = Object.create(qA.prototype)).constructor = Sr, + Sr.prototype.isMeshMatcapMaterial = !0, + Sr.prototype.copy = function (A) { + return qA.prototype.copy.call(this, A), + this.defines = { + MATCAP: "" + }, + this.color.copy(A.color), + this.matcap = A.matcap, + this.map = A.map, + this.bumpMap = A.bumpMap, + this.bumpScale = A.bumpScale, + this.normalMap = A.normalMap, + this.normalMapType = A.normalMapType, + this.normalScale.copy(A.normalScale), + this.displacementMap = A.displacementMap, + this.displacementScale = A.displacementScale, + this.displacementBias = A.displacementBias, + this.alphaMap = A.alphaMap, + this.skinning = A.skinning, + this.morphTargets = A.morphTargets, + this.morphNormals = A.morphNormals, + this + }, + (wr.prototype = Object.create(ko.prototype)).constructor = wr, + wr.prototype.isLineDashedMaterial = !0, + wr.prototype.copy = function (A) { + return ko.prototype.copy.call(this, A), + this.scale = A.scale, + this.dashSize = A.dashSize, + this.gapSize = A.gapSize, + this + }; + var Mr = Object.freeze({ + __proto__: null, + ShadowMaterial: mr, + SpriteMaterial: ro, + RawShaderMaterial: Cr, + ShaderMaterial: Pe, + PointsMaterial: Yo, + MeshPhysicalMaterial: vr, + MeshStandardMaterial: yr, + MeshPhongMaterial: Ir, + MeshToonMaterial: Er, + MeshNormalMaterial: Br, + MeshLambertMaterial: xr, + MeshDepthMaterial: ji, + MeshDistanceMaterial: Hi, + MeshBasicMaterial: jA, + MeshMatcapMaterial: Sr, + LineDashedMaterial: wr, + LineBasicMaterial: ko, + Material: qA + }), + br = { + arraySlice: function (A, e, t) { + return br.isTypedArray(A) ? new A.constructor(A.subarray(e, void 0 !== t ? t : A.length)) : A.slice(e, t) + }, + convertArray: function (A, e, t) { + return !A || !t && A.constructor === e ? A : "number" == typeof e.BYTES_PER_ELEMENT ? new e(A) : Array.prototype.slice.call(A) + }, + isTypedArray: function (A) { + return ArrayBuffer.isView(A) && !(A instanceof DataView) + }, + getKeyframeOrder: function (A) { + for (var e = A.length, t = new Array(e), i = 0; i !== e; ++i) + t[i] = i; + return t.sort((function (e, t) { + return A[e] - A[t] + })), + t + }, + sortedArray: function (A, e, t) { + for (var i = A.length, o = new A.constructor(i), n = 0, r = 0; r !== i; ++n) + for (var a = t[n] * e, s = 0; s !== e; ++s) + o[r++] = A[a + s]; + return o + }, + flattenJSON: function (A, e, t, i) { + for (var o = 1, n = A[0]; void 0 !== n && void 0 === n[i];) + n = A[o++]; + if (void 0 !== n) { + var r = n[i]; + if (void 0 !== r) + if (Array.isArray(r)) + do { + void 0 !== (r = n[i]) && (e.push(n.time), + t.push.apply(t, r)), + n = A[o++] + } while (void 0 !== n); + else if (void 0 !== r.toArray) + do { + void 0 !== (r = n[i]) && (e.push(n.time), + r.toArray(t, t.length)), + n = A[o++] + } while (void 0 !== n); + else + do { + void 0 !== (r = n[i]) && (e.push(n.time), + t.push(r)), + n = A[o++] + } while (void 0 !== n) + } + }, + subclip: function (A, e, t, i, o) { + o = o || 30; + var n = A.clone(); + n.name = e; + for (var r = [], a = 0; n.tracks.length > a; ++a) { + for (var s = n.tracks[a], l = s.getValueSize(), c = [], h = [], d = 0; s.times.length > d; ++d) { + var p = s.times[d] * o; + if (p >= t && i > p) { + c.push(s.times[d]); + for (var g = 0; l > g; ++g) + h.push(s.values[d * l + g]) + } + } + 0 !== c.length && (s.times = br.convertArray(c, s.times.constructor), + s.values = br.convertArray(h, s.values.constructor), + r.push(s)) + } + n.tracks = r; + var u = 1 / 0; + for (a = 0; n.tracks.length > a; ++a) + u > n.tracks[a].times[0] && (u = n.tracks[a].times[0]); + for (a = 0; n.tracks.length > a; ++a) + n.tracks[a].shift(-1 * u); + return n.resetDuration(), + n + } + }; + + function Ur(A, e, t, i) { + this.parameterPositions = A, + this._cachedIndex = 0, + this.resultBuffer = void 0 !== i ? i : new e.constructor(t), + this.sampleValues = e, + this.valueSize = t + } + + function Fr(A, e, t, i) { + Ur.call(this, A, e, t, i), + this._weightPrev = -0, + this._offsetPrev = -0, + this._weightNext = -0, + this._offsetNext = -0 + } + + function Kr(A, e, t, i) { + Ur.call(this, A, e, t, i) + } + + function Qr(A, e, t, i) { + Ur.call(this, A, e, t, i) + } + + function Rr(A, e, t, i) { + if (void 0 === A) + throw new Error("THREE.KeyframeTrack: track name is undefined"); + if (void 0 === e || 0 === e.length) + throw new Error("THREE.KeyframeTrack: no keyframes in track named " + A); + this.name = A, + this.times = br.convertArray(e, this.TimeBufferType), + this.values = br.convertArray(t, this.ValueBufferType), + this.setInterpolation(i || this.DefaultInterpolation) + } + + function Tr(A, e, t) { + Rr.call(this, A, e, t) + } + + function kr(A, e, t, i) { + Rr.call(this, A, e, t, i) + } + + function Dr(A, e, t, i) { + Rr.call(this, A, e, t, i) + } + + function Lr(A, e, t, i) { + Ur.call(this, A, e, t, i) + } + + function Nr(A, e, t, i) { + Rr.call(this, A, e, t, i) + } + + function Or(A, e, t, i) { + Rr.call(this, A, e, t, i) + } + + function Vr(A, e, t, i) { + Rr.call(this, A, e, t, i) + } + + function Gr(A, e, t) { + this.name = A, + this.tracks = t, + this.duration = void 0 !== e ? e : -1, + this.uuid = a.generateUUID(), + 0 > this.duration && this.resetDuration() + } + + function Pr(A) { + if (void 0 === A.type) + throw new Error("THREE.KeyframeTrack: track type undefined, can not parse"); + var e = function (A) { + switch (A.toLowerCase()) { + case "scalar": + case "double": + case "float": + case "number": + case "integer": + return Dr; + case "vector": + case "vector2": + case "vector3": + case "vector4": + return Vr; + case "color": + return kr; + case "quaternion": + return Nr; + case "bool": + case "boolean": + return Tr; + case "string": + return Or + } + throw new Error("THREE.KeyframeTrack: Unsupported typeName: " + A) + }(A.type); + if (void 0 === A.times) { + var t = [], + i = []; + br.flattenJSON(A.keys, t, i, "value"), + A.times = t, + A.values = i + } + return void 0 !== e.parse ? e.parse(A) : new e(A.name, A.times, A.values, A.interpolation) + } + Object.assign(Ur.prototype, { + evaluate: function (A) { + var e = this.parameterPositions, + t = this._cachedIndex, + i = e[t], + o = e[t - 1]; + A: { + e: { + var n; + t: { + i: if (i <= A) { + for (var r = t + 2;;) { + if (void 0 === i) { + if (o > A) + break i; + return this._cachedIndex = t = e.length, + this.afterEnd_(t - 1, A, o) + } + if (t === r) + break; + if (o = i, + (i = e[++t]) > A) + break e + } + n = e.length; + break t + } + if (A >= o) + break A; + var a = e[1]; + a > A && (t = 2, + o = a); + for (r = t - 2;;) { + if (void 0 === o) + return this._cachedIndex = 0, + this.beforeStart_(0, A, i); + if (t === r) + break; + if (i = o, + A >= (o = e[--t - 1])) + break e + } + n = t, + t = 0 + } + for (; n > t;) { + var s = t + n >>> 1; + e[s] > A ? n = s : t = s + 1 + } + if (i = e[t], + void 0 === (o = e[t - 1])) + return this._cachedIndex = 0, + this.beforeStart_(0, A, i); + if (void 0 === i) + return this._cachedIndex = t = e.length, + this.afterEnd_(t - 1, o, A) + } + this._cachedIndex = t, + this.intervalChanged_(t, o, i) + } + return this.interpolate_(t, o, A, i) + }, + settings: null, + DefaultSettings_: {}, + getSettings_: function () { + return this.settings || this.DefaultSettings_ + }, + copySampleValue_: function (A) { + for (var e = this.resultBuffer, t = this.sampleValues, i = this.valueSize, o = A * i, n = 0; n !== i; ++n) + e[n] = t[o + n]; + return e + }, + interpolate_: function () { + throw new Error("call to abstract method") + }, + intervalChanged_: function () {} + }), + Object.assign(Ur.prototype, { + beforeStart_: Ur.prototype.copySampleValue_, + afterEnd_: Ur.prototype.copySampleValue_ + }), + Fr.prototype = Object.assign(Object.create(Ur.prototype), { + constructor: Fr, + DefaultSettings_: { + endingStart: 2400, + endingEnd: 2400 + }, + intervalChanged_: function (A, e, t) { + var i = this.parameterPositions, + o = A - 2, + n = A + 1, + r = i[o], + a = i[n]; + if (void 0 === r) + switch (this.getSettings_().endingStart) { + case 2401: + o = A, + r = 2 * e - t; + break; + case 2402: + r = e + i[o = i.length - 2] - i[o + 1]; + break; + default: + o = A, + r = t + } + if (void 0 === a) + switch (this.getSettings_().endingEnd) { + case 2401: + n = A, + a = 2 * t - e; + break; + case 2402: + n = 1, + a = t + i[1] - i[0]; + break; + default: + n = A - 1, + a = e + } + var s = .5 * (t - e), + l = this.valueSize; + this._weightPrev = s / (e - r), + this._weightNext = s / (a - t), + this._offsetPrev = o * l, + this._offsetNext = n * l + }, + interpolate_: function (A, e, t, i) { + for (var o = this.resultBuffer, n = this.sampleValues, r = this.valueSize, a = A * r, s = a - r, l = this._offsetPrev, c = this._offsetNext, h = this._weightPrev, d = this._weightNext, p = (t - e) / (i - e), g = p * p, u = g * p, f = -h * u + 2 * h * g - h * p, m = (1 + h) * u + (-1.5 - 2 * h) * g + (-.5 + h) * p + 1, C = (-1 - d) * u + (1.5 + d) * g + .5 * p, y = d * u - d * g, v = 0; v !== r; ++v) + o[v] = f * n[l + v] + m * n[s + v] + C * n[a + v] + y * n[c + v]; + return o + } + }), + Kr.prototype = Object.assign(Object.create(Ur.prototype), { + constructor: Kr, + interpolate_: function (A, e, t, i) { + for (var o = this.resultBuffer, n = this.sampleValues, r = this.valueSize, a = A * r, s = a - r, l = (t - e) / (i - e), c = 1 - l, h = 0; h !== r; ++h) + o[h] = n[s + h] * c + n[a + h] * l; + return o + } + }), + Qr.prototype = Object.assign(Object.create(Ur.prototype), { + constructor: Qr, + interpolate_: function (A) { + return this.copySampleValue_(A - 1) + } + }), + Object.assign(Rr, { + toJSON: function (A) { + var e, t = A.constructor; + if (void 0 !== t.toJSON) + e = t.toJSON(A); + else { + e = { + name: A.name, + times: br.convertArray(A.times, Array), + values: br.convertArray(A.values, Array) + }; + var i = A.getInterpolation(); + i !== A.DefaultInterpolation && (e.interpolation = i) + } + return e.type = A.ValueTypeName, + e + } + }), + Object.assign(Rr.prototype, { + constructor: Rr, + TimeBufferType: Float32Array, + ValueBufferType: Float32Array, + DefaultInterpolation: 2301, + InterpolantFactoryMethodDiscrete: function (A) { + return new Qr(this.times, this.values, this.getValueSize(), A) + }, + InterpolantFactoryMethodLinear: function (A) { + return new Kr(this.times, this.values, this.getValueSize(), A) + }, + InterpolantFactoryMethodSmooth: function (A) { + return new Fr(this.times, this.values, this.getValueSize(), A) + }, + setInterpolation: function (A) { + var e; + switch (A) { + case 2300: + e = this.InterpolantFactoryMethodDiscrete; + break; + case 2301: + e = this.InterpolantFactoryMethodLinear; + break; + case 2302: + e = this.InterpolantFactoryMethodSmooth + } + if (void 0 === e) { + var t = "unsupported interpolation for " + this.ValueTypeName + " keyframe track named " + this.name; + if (void 0 === this.createInterpolant) { + if (A === this.DefaultInterpolation) + throw new Error(t); + this.setInterpolation(this.DefaultInterpolation) + } + return console.warn("THREE.KeyframeTrack:", t), + this + } + return this.createInterpolant = e, + this + }, + getInterpolation: function () { + switch (this.createInterpolant) { + case this.InterpolantFactoryMethodDiscrete: + return 2300; + case this.InterpolantFactoryMethodLinear: + return 2301; + case this.InterpolantFactoryMethodSmooth: + return 2302 + } + }, + getValueSize: function () { + return this.values.length / this.times.length + }, + shift: function (A) { + if (0 !== A) + for (var e = this.times, t = 0, i = e.length; t !== i; ++t) + e[t] += A; + return this + }, + scale: function (A) { + if (1 !== A) + for (var e = this.times, t = 0, i = e.length; t !== i; ++t) + e[t] *= A; + return this + }, + trim: function (A, e) { + for (var t = this.times, i = t.length, o = 0, n = i - 1; o !== i && A > t[o];) + ++o; + for (; - 1 !== n && t[n] > e;) + --n; + if (++n, + 0 !== o || n !== i) { + n > o || (o = (n = Math.max(n, 1)) - 1); + var r = this.getValueSize(); + this.times = br.arraySlice(t, o, n), + this.values = br.arraySlice(this.values, o * r, n * r) + } + return this + }, + validate: function () { + var A = !0, + e = this.getValueSize(); + e - Math.floor(e) != 0 && (console.error("THREE.KeyframeTrack: Invalid value size in track.", this), + A = !1); + var t = this.times, + i = this.values, + o = t.length; + 0 === o && (console.error("THREE.KeyframeTrack: Track is empty.", this), + A = !1); + for (var n = null, r = 0; r !== o; r++) { + var a = t[r]; + if ("number" == typeof a && isNaN(a)) { + console.error("THREE.KeyframeTrack: Time is not a valid number.", this, r, a), + A = !1; + break + } + if (null !== n && n > a) { + console.error("THREE.KeyframeTrack: Out of order keys.", this, r, a, n), + A = !1; + break + } + n = a + } + if (void 0 !== i && br.isTypedArray(i)) { + r = 0; + for (var s = i.length; r !== s; ++r) { + var l = i[r]; + if (isNaN(l)) { + console.error("THREE.KeyframeTrack: Value is not a valid number.", this, r, l), + A = !1; + break + } + } + } + return A + }, + optimize: function () { + for (var A = br.arraySlice(this.times), e = br.arraySlice(this.values), t = this.getValueSize(), i = 2302 === this.getInterpolation(), o = 1, n = A.length - 1, r = 1; n > r; ++r) { + var a = !1, + s = A[r]; + if (s !== A[r + 1] && (1 !== r || s !== s[0])) + if (i) + a = !0; + else + for (var l = r * t, c = l - t, h = l + t, d = 0; d !== t; ++d) { + var p = e[l + d]; + if (p !== e[c + d] || p !== e[h + d]) { + a = !0; + break + } + } + if (a) { + if (r !== o) { + A[o] = A[r]; + var g = r * t, + u = o * t; + for (d = 0; d !== t; ++d) + e[u + d] = e[g + d] + } + ++o + } + } + if (n > 0) { + A[o] = A[n]; + for (g = n * t, + u = o * t, + d = 0; d !== t; ++d) + e[u + d] = e[g + d]; + ++o + } + return o !== A.length ? (this.times = br.arraySlice(A, 0, o), + this.values = br.arraySlice(e, 0, o * t)) : (this.times = A, + this.values = e), + this + }, + clone: function () { + var A = br.arraySlice(this.times, 0), + e = br.arraySlice(this.values, 0), + t = new(0, + this.constructor)(this.name, A, e); + return t.createInterpolant = this.createInterpolant, + t + } + }), + Tr.prototype = Object.assign(Object.create(Rr.prototype), { + constructor: Tr, + ValueTypeName: "bool", + ValueBufferType: Array, + DefaultInterpolation: 2300, + InterpolantFactoryMethodLinear: void 0, + InterpolantFactoryMethodSmooth: void 0 + }), + kr.prototype = Object.assign(Object.create(Rr.prototype), { + constructor: kr, + ValueTypeName: "color" + }), + Dr.prototype = Object.assign(Object.create(Rr.prototype), { + constructor: Dr, + ValueTypeName: "number" + }), + Lr.prototype = Object.assign(Object.create(Ur.prototype), { + constructor: Lr, + interpolate_: function (A, e, t, i) { + for (var o = this.resultBuffer, n = this.sampleValues, r = this.valueSize, a = A * r, s = (t - e) / (i - e), l = a + r; a !== l; a += 4) + f.slerpFlat(o, 0, n, a - r, n, a, s); + return o + } + }), + Nr.prototype = Object.assign(Object.create(Rr.prototype), { + constructor: Nr, + ValueTypeName: "quaternion", + DefaultInterpolation: 2301, + InterpolantFactoryMethodLinear: function (A) { + return new Lr(this.times, this.values, this.getValueSize(), A) + }, + InterpolantFactoryMethodSmooth: void 0 + }), + Or.prototype = Object.assign(Object.create(Rr.prototype), { + constructor: Or, + ValueTypeName: "string", + ValueBufferType: Array, + DefaultInterpolation: 2300, + InterpolantFactoryMethodLinear: void 0, + InterpolantFactoryMethodSmooth: void 0 + }), + Vr.prototype = Object.assign(Object.create(Rr.prototype), { + constructor: Vr, + ValueTypeName: "vector" + }), + Object.assign(Gr, { + parse: function (A) { + for (var e = [], t = A.tracks, i = 1 / (A.fps || 1), o = 0, n = t.length; o !== n; ++o) + e.push(Pr(t[o]).scale(i)); + return new Gr(A.name, A.duration, e) + }, + toJSON: function (A) { + for (var e = [], t = A.tracks, i = { + name: A.name, + duration: A.duration, + tracks: e, + uuid: A.uuid + }, o = 0, n = t.length; o !== n; ++o) + e.push(Rr.toJSON(t[o])); + return i + }, + CreateFromMorphTargetSequence: function (A, e, t, i) { + for (var o = e.length, n = [], r = 0; o > r; r++) { + var a = [], + s = []; + a.push((r + o - 1) % o, r, (r + 1) % o), + s.push(0, 1, 0); + var l = br.getKeyframeOrder(a); + a = br.sortedArray(a, 1, l), + s = br.sortedArray(s, 1, l), + i || 0 !== a[0] || (a.push(o), + s.push(s[0])), + n.push(new Dr(".morphTargetInfluences[" + e[r].name + "]", a, s).scale(1 / t)) + } + return new Gr(A, -1, n) + }, + findByName: function (A, e) { + var t = A; + if (!Array.isArray(A)) { + t = A.geometry && A.geometry.animations || A.animations + } + for (var i = 0; t.length > i; i++) + if (t[i].name === e) + return t[i]; + return null + }, + CreateClipsFromMorphTargetSequences: function (A, e, t) { + for (var i = {}, o = /^([\w-]*?)([\d]+)$/, n = 0, r = A.length; r > n; n++) { + var a = A[n], + s = a.name.match(o); + if (s && s.length > 1) { + var l = i[h = s[1]]; + l || (i[h] = l = []), + l.push(a) + } + } + var c = []; + for (var h in i) + c.push(Gr.CreateFromMorphTargetSequence(h, i[h], e, t)); + return c + }, + parseAnimation: function (A, e) { + if (!A) + return console.error("THREE.AnimationClip: No animation in JSONLoader data."), + null; + for (var t = function (A, e, t, i, o) { + if (0 !== t.length) { + var n = [], + r = []; + br.flattenJSON(t, n, r, i), + 0 !== n.length && o.push(new A(e, n, r)) + } + }, i = [], o = A.name || "default", n = A.length || -1, r = A.fps || 30, a = A.hierarchy || [], s = 0; a.length > s; s++) { + var l = a[s].keys; + if (l && 0 !== l.length) + if (l[0].morphTargets) { + for (var c = {}, h = 0; l.length > h; h++) + if (l[h].morphTargets) + for (var d = 0; l[h].morphTargets.length > d; d++) + c[l[h].morphTargets[d]] = -1; + for (var p in c) { + var g = [], + u = []; + for (d = 0; d !== l[h].morphTargets.length; ++d) { + var f = l[h]; + g.push(f.time), + u.push(f.morphTarget === p ? 1 : 0) + } + i.push(new Dr(".morphTargetInfluence[" + p + "]", g, u)) + } + n = c.length * (r || 1) + } else { + var m = ".bones[" + e[s].name + "]"; + t(Vr, m + ".position", l, "pos", i), + t(Nr, m + ".quaternion", l, "rot", i), + t(Vr, m + ".scale", l, "scl", i) + } + } + return 0 === i.length ? null : new Gr(o, n, i) + } + }), + Object.assign(Gr.prototype, { + resetDuration: function () { + for (var A = 0, e = 0, t = this.tracks.length; e !== t; ++e) { + var i = this.tracks[e]; + A = Math.max(A, i.times[i.times.length - 1]) + } + return this.duration = A, + this + }, + trim: function () { + for (var A = 0; this.tracks.length > A; A++) + this.tracks[A].trim(0, this.duration); + return this + }, + validate: function () { + for (var A = !0, e = 0; this.tracks.length > e; e++) + A = A && this.tracks[e].validate(); + return A + }, + optimize: function () { + for (var A = 0; this.tracks.length > A; A++) + this.tracks[A].optimize(); + return this + }, + clone: function () { + for (var A = [], e = 0; this.tracks.length > e; e++) + A.push(this.tracks[e].clone()); + return new Gr(this.name, this.duration, A) + } + }); + var qr = { + enabled: !1, + files: {}, + add: function (A, e) { + !1 !== this.enabled && (this.files[A] = e) + }, + get: function (A) { + if (!1 !== this.enabled) + return this.files[A] + }, + remove: function (A) { + delete this.files[A] + }, + clear: function () { + this.files = {} + } + }; + + function jr(A, e, t) { + var i = this, + o = !1, + n = 0, + r = 0, + a = void 0, + s = []; + this.onStart = void 0, + this.onLoad = A, + this.onProgress = e, + this.onError = t, + this.itemStart = function (A) { + r++, + !1 === o && void 0 !== i.onStart && i.onStart(A, n, r), + o = !0 + }, + this.itemEnd = function (A) { + n++, + void 0 !== i.onProgress && i.onProgress(A, n, r), + n === r && (o = !1, + void 0 !== i.onLoad && i.onLoad()) + }, + this.itemError = function (A) { + void 0 !== i.onError && i.onError(A) + }, + this.resolveURL = function (A) { + return a ? a(A) : A + }, + this.setURLModifier = function (A) { + return a = A, + this + }, + this.addHandler = function (A, e) { + return s.push(A, e), + this + }, + this.removeHandler = function (A) { + var e = s.indexOf(A); + return -1 !== e && s.splice(e, 2), + this + }, + this.getHandler = function (A) { + for (var e = 0, t = s.length; t > e; e += 2) { + var i = s[e], + o = s[e + 1]; + if (i.global && (i.lastIndex = 0), + i.test(A)) + return o + } + return null + } + } + var Hr = new jr; + + function Yr(A) { + this.manager = void 0 !== A ? A : Hr, + this.crossOrigin = "anonymous", + this.path = "", + this.resourcePath = "" + } + Object.assign(Yr.prototype, { + load: function () {}, + parse: function () {}, + setCrossOrigin: function (A) { + return this.crossOrigin = A, + this + }, + setPath: function (A) { + return this.path = A, + this + }, + setResourcePath: function (A) { + return this.resourcePath = A, + this + } + }); + var Wr = {}; + + function Jr(A) { + Yr.call(this, A) + } + + function zr(A) { + Yr.call(this, A) + } + + function Zr(A) { + Yr.call(this, A) + } + + function Xr(A) { + Yr.call(this, A) + } + + function _r(A) { + Yr.call(this, A) + } + + function $r(A) { + Yr.call(this, A) + } + + function Aa(A) { + Yr.call(this, A) + } + + function ea() { + this.type = "Curve", + this.arcLengthDivisions = 200 + } + + function ta(A, e, t, i, o, n, r, a) { + ea.call(this), + this.type = "EllipseCurve", + this.aX = A || 0, + this.aY = e || 0, + this.xRadius = t || 1, + this.yRadius = i || 1, + this.aStartAngle = o || 0, + this.aEndAngle = n || 2 * Math.PI, + this.aClockwise = r || !1, + this.aRotation = a || 0 + } + + function ia(A, e, t, i, o, n) { + ta.call(this, A, e, t, t, i, o, n), + this.type = "ArcCurve" + } + + function oa() { + var A = 0, + e = 0, + t = 0, + i = 0; + + function o(o, n, r, a) { + A = o, + e = r, + t = -3 * o + 3 * n - 2 * r - a, + i = 2 * o - 2 * n + r + a + } + return { + initCatmullRom: function (A, e, t, i, n) { + o(e, t, n * (t - A), n * (i - e)) + }, + initNonuniformCatmullRom: function (A, e, t, i, n, r, a) { + var s = (e - A) / n - (t - A) / (n + r) + (t - e) / r, + l = (t - e) / r - (i - e) / (r + a) + (i - t) / a; + o(e, t, s *= r, l *= r) + }, + calc: function (o) { + var n = o * o; + return A + e * o + t * n + i * (n * o) + } + } + } + Jr.prototype = Object.assign(Object.create(Yr.prototype), { + constructor: Jr, + load: function (A, e, t, i) { + void 0 === A && (A = ""), + void 0 !== this.path && (A = this.path + A), + A = this.manager.resolveURL(A); + var o = this, + n = qr.get(A); + if (void 0 !== n) + return o.manager.itemStart(A), + setTimeout((function () { + e && e(n), + o.manager.itemEnd(A) + }), 0), + n; + if (void 0 === Wr[A]) { + var r = A.match(/^data:(.*?)(;base64)?,(.*)$/); + if (r) { + var a = r[1], + s = !!r[2], + l = r[3]; + l = decodeURIComponent(l), + s && (l = atob(l)); + try { + var c, h = (this.responseType || "").toLowerCase(); + switch (h) { + case "arraybuffer": + case "blob": + for (var d = new Uint8Array(l.length), p = 0; l.length > p; p++) + d[p] = l.charCodeAt(p); + c = "blob" === h ? new Blob([d.buffer], { + type: a + }) : d.buffer; + break; + case "document": + var g = new DOMParser; + c = g.parseFromString(l, a); + break; + case "json": + c = JSON.parse(l); + break; + default: + c = l + } + setTimeout((function () { + e && e(c), + o.manager.itemEnd(A) + }), 0) + } catch (e) { + setTimeout((function () { + i && i(e), + o.manager.itemError(A), + o.manager.itemEnd(A) + }), 0) + } + } else { + Wr[A] = [], + Wr[A].push({ + onLoad: e, + onProgress: t, + onError: i + }); + var u = new XMLHttpRequest; + for (var f in u.open("GET", A, !0), + u.addEventListener("load", (function (e) { + var t = this.response, + i = Wr[A]; + if (delete Wr[A], + 200 === this.status || 0 === this.status) { + 0 === this.status && console.warn("THREE.FileLoader: HTTP Status 0 received."), + qr.add(A, t); + for (var n = 0, r = i.length; r > n; n++) { + (a = i[n]).onLoad && a.onLoad(t) + } + o.manager.itemEnd(A) + } else { + for (n = 0, + r = i.length; r > n; n++) { + var a; + (a = i[n]).onError && a.onError(e) + } + o.manager.itemError(A), + o.manager.itemEnd(A) + } + }), !1), + u.addEventListener("progress", (function (e) { + for (var t = Wr[A], i = 0, o = t.length; o > i; i++) { + var n = t[i]; + n.onProgress && n.onProgress(e) + } + }), !1), + u.addEventListener("error", (function (e) { + var t = Wr[A]; + delete Wr[A]; + for (var i = 0, n = t.length; n > i; i++) { + var r = t[i]; + r.onError && r.onError(e) + } + o.manager.itemError(A), + o.manager.itemEnd(A) + }), !1), + u.addEventListener("abort", (function (e) { + var t = Wr[A]; + delete Wr[A]; + for (var i = 0, n = t.length; n > i; i++) { + var r = t[i]; + r.onError && r.onError(e) + } + o.manager.itemError(A), + o.manager.itemEnd(A) + }), !1), + void 0 !== this.responseType && (u.responseType = this.responseType), + void 0 !== this.withCredentials && (u.withCredentials = this.withCredentials), + u.overrideMimeType && u.overrideMimeType(void 0 !== this.mimeType ? this.mimeType : "text/plain"), + this.requestHeader) + u.setRequestHeader(f, this.requestHeader[f]); + u.send(null) + } + return o.manager.itemStart(A), + u + } + Wr[A].push({ + onLoad: e, + onProgress: t, + onError: i + }) + }, + setResponseType: function (A) { + return this.responseType = A, + this + }, + setWithCredentials: function (A) { + return this.withCredentials = A, + this + }, + setMimeType: function (A) { + return this.mimeType = A, + this + }, + setRequestHeader: function (A) { + return this.requestHeader = A, + this + } + }), + zr.prototype = Object.assign(Object.create(Yr.prototype), { + constructor: zr, + load: function (A, e, t, i) { + var o = this, + n = new Jr(o.manager); + n.setPath(o.path), + n.load(A, (function (A) { + e(o.parse(JSON.parse(A))) + }), t, i) + }, + parse: function (A) { + for (var e = [], t = 0; A.length > t; t++) { + var i = Gr.parse(A[t]); + e.push(i) + } + return e + } + }), + Zr.prototype = Object.assign(Object.create(Yr.prototype), { + constructor: Zr, + load: function (A, e, t, i) { + var o = this, + n = [], + r = new An; + r.image = n; + var a = new Jr(this.manager); + + function s(s) { + a.load(A[s], (function (A) { + var t = o.parse(A, !0); + n[s] = { + width: t.width, + height: t.height, + format: t.format, + mipmaps: t.mipmaps + }, + 6 === (l += 1) && (1 === t.mipmapCount && (r.minFilter = 1006), + r.format = t.format, + r.needsUpdate = !0, + e && e(r)) + }), t, i) + } + if (a.setPath(this.path), + a.setResponseType("arraybuffer"), + Array.isArray(A)) + for (var l = 0, c = 0, h = A.length; h > c; ++c) + s(c); + else + a.load(A, (function (A) { + var t = o.parse(A, !0); + if (t.isCubemap) + for (var i = t.mipmaps.length / t.mipmapCount, a = 0; i > a; a++) { + n[a] = { + mipmaps: [] + }; + for (var s = 0; t.mipmapCount > s; s++) + n[a].mipmaps.push(t.mipmaps[a * t.mipmapCount + s]), + n[a].format = t.format, + n[a].width = t.width, + n[a].height = t.height + } + else + r.image.width = t.width, + r.image.height = t.height, + r.mipmaps = t.mipmaps; + 1 === t.mipmapCount && (r.minFilter = 1006), + r.format = t.format, + r.needsUpdate = !0, + e && e(r) + }), t, i); + return r + } + }), + Xr.prototype = Object.assign(Object.create(Yr.prototype), { + constructor: Xr, + load: function (A, e, t, i) { + var o = this, + n = new We, + r = new Jr(this.manager); + return r.setResponseType("arraybuffer"), + r.setPath(this.path), + r.load(A, (function (A) { + var t = o.parse(A); + t && (void 0 !== t.image ? n.image = t.image : void 0 !== t.data && (n.image.width = t.width, + n.image.height = t.height, + n.image.data = t.data), + n.wrapS = void 0 !== t.wrapS ? t.wrapS : 1001, + n.wrapT = void 0 !== t.wrapT ? t.wrapT : 1001, + n.magFilter = void 0 !== t.magFilter ? t.magFilter : 1006, + n.minFilter = void 0 !== t.minFilter ? t.minFilter : 1006, + n.anisotropy = void 0 !== t.anisotropy ? t.anisotropy : 1, + void 0 !== t.format && (n.format = t.format), + void 0 !== t.type && (n.type = t.type), + void 0 !== t.mipmaps && (n.mipmaps = t.mipmaps, + n.minFilter = 1008), + 1 === t.mipmapCount && (n.minFilter = 1006), + n.needsUpdate = !0, + e && e(n, t)) + }), t, i), + n + } + }), + _r.prototype = Object.assign(Object.create(Yr.prototype), { + constructor: _r, + load: function (A, e, t, i) { + void 0 !== this.path && (A = this.path + A), + A = this.manager.resolveURL(A); + var o = this, + n = qr.get(A); + if (void 0 !== n) + return o.manager.itemStart(A), + setTimeout((function () { + e && e(n), + o.manager.itemEnd(A) + }), 0), + n; + var r = document.createElementNS("http://www.w3.org/1999/xhtml", "img"); + + function a() { + r.removeEventListener("load", a, !1), + r.removeEventListener("error", s, !1), + qr.add(A, this), + e && e(this), + o.manager.itemEnd(A) + } + + function s(e) { + r.removeEventListener("load", a, !1), + r.removeEventListener("error", s, !1), + i && i(e), + o.manager.itemError(A), + o.manager.itemEnd(A) + } + return r.addEventListener("load", a, !1), + r.addEventListener("error", s, !1), + "data:" !== A.substr(0, 5) && void 0 !== this.crossOrigin && (r.crossOrigin = this.crossOrigin), + o.manager.itemStart(A), + r.src = A, + r + } + }), + $r.prototype = Object.assign(Object.create(Yr.prototype), { + constructor: $r, + load: function (A, e, t, i) { + var o = new ut, + n = new _r(this.manager); + n.setCrossOrigin(this.crossOrigin), + n.setPath(this.path); + var r = 0; + + function a(t) { + n.load(A[t], (function (A) { + o.images[t] = A, + 6 === ++r && (o.needsUpdate = !0, + e && e(o)) + }), void 0, i) + } + for (var s = 0; A.length > s; ++s) + a(s); + return o + } + }), + Aa.prototype = Object.assign(Object.create(Yr.prototype), { + constructor: Aa, + load: function (A, e, t, i) { + var o = new d, + n = new _r(this.manager); + return n.setCrossOrigin(this.crossOrigin), + n.setPath(this.path), + n.load(A, (function (t) { + o.image = t; + var i = A.search(/\.jpe?g($|\?)/i) > 0 || 0 === A.search(/^data\:image\/jpeg/); + o.format = i ? 1022 : 1023, + o.needsUpdate = !0, + void 0 !== e && e(o) + }), t, i), + o + } + }), + Object.assign(ea.prototype, { + getPoint: function () { + return console.warn("THREE.Curve: .getPoint() not implemented."), + null + }, + getPointAt: function (A, e) { + var t = this.getUtoTmapping(A); + return this.getPoint(t, e) + }, + getPoints: function (A) { + void 0 === A && (A = 5); + for (var e = [], t = 0; A >= t; t++) + e.push(this.getPoint(t / A)); + return e + }, + getSpacedPoints: function (A) { + void 0 === A && (A = 5); + for (var e = [], t = 0; A >= t; t++) + e.push(this.getPointAt(t / A)); + return e + }, + getLength: function () { + var A = this.getLengths(); + return A[A.length - 1] + }, + getLengths: function (A) { + if (void 0 === A && (A = this.arcLengthDivisions), + this.cacheArcLengths && this.cacheArcLengths.length === A + 1 && !this.needsUpdate) + return this.cacheArcLengths; + this.needsUpdate = !1; + var e, t, i = [], + o = this.getPoint(0), + n = 0; + for (i.push(0), + t = 1; A >= t; t++) + n += (e = this.getPoint(t / A)).distanceTo(o), + i.push(n), + o = e; + return this.cacheArcLengths = i, + i + }, + updateArcLengths: function () { + this.needsUpdate = !0, + this.getLengths() + }, + getUtoTmapping: function (A, e) { + var t, i = this.getLengths(), + o = 0, + n = i.length; + t = e || A * i[n - 1]; + for (var r, a = 0, s = n - 1; s >= a;) + if (0 > (r = i[o = Math.floor(a + (s - a) / 2)] - t)) + a = o + 1; + else { + if (0 >= r) { + s = o; + break + } + s = o - 1 + } + if (i[o = s] === t) + return o / (n - 1); + var l = i[o]; + return (o + (t - l) / (i[o + 1] - l)) / (n - 1) + }, + getTangent: function (A) { + var e = A - 1e-4, + t = A + 1e-4; + 0 > e && (e = 0), + t > 1 && (t = 1); + var i = this.getPoint(e); + return this.getPoint(t).clone().sub(i).normalize() + }, + getTangentAt: function (A) { + var e = this.getUtoTmapping(A); + return this.getTangent(e) + }, + computeFrenetFrames: function (A, e) { + var t, i, o = new y, + n = [], + r = [], + s = [], + l = new y, + c = new M; + for (t = 0; A >= t; t++) + n[t] = this.getTangentAt(t / A), + n[t].normalize(); + r[0] = new y, + s[0] = new y; + var h = Number.MAX_VALUE, + d = Math.abs(n[0].x), + p = Math.abs(n[0].y), + g = Math.abs(n[0].z); + for (d > h || (h = d, + o.set(1, 0, 0)), + p > h || (h = p, + o.set(0, 1, 0)), + g > h || o.set(0, 0, 1), + l.crossVectors(n[0], o).normalize(), + r[0].crossVectors(n[0], l), + s[0].crossVectors(n[0], r[0]), + t = 1; A >= t; t++) + r[t] = r[t - 1].clone(), + s[t] = s[t - 1].clone(), + l.crossVectors(n[t - 1], n[t]), + l.length() > Number.EPSILON && (l.normalize(), + i = Math.acos(a.clamp(n[t - 1].dot(n[t]), -1, 1)), + r[t].applyMatrix4(c.makeRotationAxis(l, i))), + s[t].crossVectors(n[t], r[t]); + if (!0 === e) + for (i = Math.acos(a.clamp(r[0].dot(r[A]), -1, 1)), + i /= A, + n[0].dot(l.crossVectors(r[0], r[A])) > 0 && (i = -i), + t = 1; A >= t; t++) + r[t].applyMatrix4(c.makeRotationAxis(n[t], i * t)), + s[t].crossVectors(n[t], r[t]); + return { + tangents: n, + normals: r, + binormals: s + } + }, + clone: function () { + return (new this.constructor).copy(this) + }, + copy: function (A) { + return this.arcLengthDivisions = A.arcLengthDivisions, + this + }, + toJSON: function () { + var A = { + metadata: { + version: 4.5, + type: "Curve", + generator: "Curve.toJSON" + } + }; + return A.arcLengthDivisions = this.arcLengthDivisions, + A.type = this.type, + A + }, + fromJSON: function (A) { + return this.arcLengthDivisions = A.arcLengthDivisions, + this + } + }), + (ta.prototype = Object.create(ea.prototype)).constructor = ta, + ta.prototype.isEllipseCurve = !0, + ta.prototype.getPoint = function (A, e) { + for (var t = e || new s, i = 2 * Math.PI, o = this.aEndAngle - this.aStartAngle, n = Math.abs(o) < Number.EPSILON; 0 > o;) + o += i; + for (; o > i;) + o -= i; + Number.EPSILON > o && (o = n ? 0 : i), + !0 !== this.aClockwise || n || (o === i ? o = -i : o -= i); + var r = this.aStartAngle + A * o, + a = this.aX + this.xRadius * Math.cos(r), + l = this.aY + this.yRadius * Math.sin(r); + if (0 !== this.aRotation) { + var c = Math.cos(this.aRotation), + h = Math.sin(this.aRotation), + d = a - this.aX, + p = l - this.aY; + a = d * c - p * h + this.aX, + l = d * h + p * c + this.aY + } + return t.set(a, l) + }, + ta.prototype.copy = function (A) { + return ea.prototype.copy.call(this, A), + this.aX = A.aX, + this.aY = A.aY, + this.xRadius = A.xRadius, + this.yRadius = A.yRadius, + this.aStartAngle = A.aStartAngle, + this.aEndAngle = A.aEndAngle, + this.aClockwise = A.aClockwise, + this.aRotation = A.aRotation, + this + }, + ta.prototype.toJSON = function () { + var A = ea.prototype.toJSON.call(this); + return A.aX = this.aX, + A.aY = this.aY, + A.xRadius = this.xRadius, + A.yRadius = this.yRadius, + A.aStartAngle = this.aStartAngle, + A.aEndAngle = this.aEndAngle, + A.aClockwise = this.aClockwise, + A.aRotation = this.aRotation, + A + }, + ta.prototype.fromJSON = function (A) { + return ea.prototype.fromJSON.call(this, A), + this.aX = A.aX, + this.aY = A.aY, + this.xRadius = A.xRadius, + this.yRadius = A.yRadius, + this.aStartAngle = A.aStartAngle, + this.aEndAngle = A.aEndAngle, + this.aClockwise = A.aClockwise, + this.aRotation = A.aRotation, + this + }, + (ia.prototype = Object.create(ta.prototype)).constructor = ia, + ia.prototype.isArcCurve = !0; + var na = new y, + ra = new oa, + aa = new oa, + sa = new oa; + + function la(A, e, t, i) { + ea.call(this), + this.type = "CatmullRomCurve3", + this.points = A || [], + this.closed = e || !1, + this.curveType = t || "centripetal", + this.tension = i || .5 + } + + function ca(A, e, t, i, o) { + var n = .5 * (i - e), + r = .5 * (o - t), + a = A * A; + return (2 * t - 2 * i + n + r) * (A * a) + (-3 * t + 3 * i - 2 * n - r) * a + n * A + t + } + + function ha(A, e, t, i) { + return function (A, e) { + var t = 1 - A; + return t * t * e + }(A, e) + function (A, e) { + return 2 * (1 - A) * A * e + }(A, t) + function (A, e) { + return A * A * e + }(A, i) + } + + function da(A, e, t, i, o) { + return function (A, e) { + var t = 1 - A; + return t * t * t * e + }(A, e) + function (A, e) { + var t = 1 - A; + return 3 * t * t * A * e + }(A, t) + function (A, e) { + return 3 * (1 - A) * A * A * e + }(A, i) + function (A, e) { + return A * A * A * e + }(A, o) + } + + function pa(A, e, t, i) { + ea.call(this), + this.type = "CubicBezierCurve", + this.v0 = A || new s, + this.v1 = e || new s, + this.v2 = t || new s, + this.v3 = i || new s + } + + function ga(A, e, t, i) { + ea.call(this), + this.type = "CubicBezierCurve3", + this.v0 = A || new y, + this.v1 = e || new y, + this.v2 = t || new y, + this.v3 = i || new y + } + + function ua(A, e) { + ea.call(this), + this.type = "LineCurve", + this.v1 = A || new s, + this.v2 = e || new s + } + + function fa(A, e) { + ea.call(this), + this.type = "LineCurve3", + this.v1 = A || new y, + this.v2 = e || new y + } + + function ma(A, e, t) { + ea.call(this), + this.type = "QuadraticBezierCurve", + this.v0 = A || new s, + this.v1 = e || new s, + this.v2 = t || new s + } + + function Ca(A, e, t) { + ea.call(this), + this.type = "QuadraticBezierCurve3", + this.v0 = A || new y, + this.v1 = e || new y, + this.v2 = t || new y + } + + function ya(A) { + ea.call(this), + this.type = "SplineCurve", + this.points = A || [] + } + (la.prototype = Object.create(ea.prototype)).constructor = la, + la.prototype.isCatmullRomCurve3 = !0, + la.prototype.getPoint = function (A, e) { + var t, i, o, n, r = e || new y, + a = this.points, + s = a.length, + l = (s - (this.closed ? 0 : 1)) * A, + c = Math.floor(l), + h = l - c; + if (this.closed ? c += c > 0 ? 0 : (Math.floor(Math.abs(c) / s) + 1) * s : 0 === h && c === s - 1 && (c = s - 2, + h = 1), + this.closed || c > 0 ? t = a[(c - 1) % s] : (na.subVectors(a[0], a[1]).add(a[0]), + t = na), + i = a[c % s], + o = a[(c + 1) % s], + this.closed || s > c + 2 ? n = a[(c + 2) % s] : (na.subVectors(a[s - 1], a[s - 2]).add(a[s - 1]), + n = na), + "centripetal" === this.curveType || "chordal" === this.curveType) { + var d = "chordal" === this.curveType ? .5 : .25, + p = Math.pow(t.distanceToSquared(i), d), + g = Math.pow(i.distanceToSquared(o), d), + u = Math.pow(o.distanceToSquared(n), d); + 1e-4 > g && (g = 1), + 1e-4 > p && (p = g), + 1e-4 > u && (u = g), + ra.initNonuniformCatmullRom(t.x, i.x, o.x, n.x, p, g, u), + aa.initNonuniformCatmullRom(t.y, i.y, o.y, n.y, p, g, u), + sa.initNonuniformCatmullRom(t.z, i.z, o.z, n.z, p, g, u) + } else + "catmullrom" === this.curveType && (ra.initCatmullRom(t.x, i.x, o.x, n.x, this.tension), + aa.initCatmullRom(t.y, i.y, o.y, n.y, this.tension), + sa.initCatmullRom(t.z, i.z, o.z, n.z, this.tension)); + return r.set(ra.calc(h), aa.calc(h), sa.calc(h)), + r + }, + la.prototype.copy = function (A) { + ea.prototype.copy.call(this, A), + this.points = []; + for (var e = 0, t = A.points.length; t > e; e++) { + this.points.push(A.points[e].clone()) + } + return this.closed = A.closed, + this.curveType = A.curveType, + this.tension = A.tension, + this + }, + la.prototype.toJSON = function () { + var A = ea.prototype.toJSON.call(this); + A.points = []; + for (var e = 0, t = this.points.length; t > e; e++) { + A.points.push(this.points[e].toArray()) + } + return A.closed = this.closed, + A.curveType = this.curveType, + A.tension = this.tension, + A + }, + la.prototype.fromJSON = function (A) { + ea.prototype.fromJSON.call(this, A), + this.points = []; + for (var e = 0, t = A.points.length; t > e; e++) { + var i = A.points[e]; + this.points.push((new y).fromArray(i)) + } + return this.closed = A.closed, + this.curveType = A.curveType, + this.tension = A.tension, + this + }, + (pa.prototype = Object.create(ea.prototype)).constructor = pa, + pa.prototype.isCubicBezierCurve = !0, + pa.prototype.getPoint = function (A, e) { + var t = e || new s, + i = this.v0, + o = this.v1, + n = this.v2, + r = this.v3; + return t.set(da(A, i.x, o.x, n.x, r.x), da(A, i.y, o.y, n.y, r.y)), + t + }, + pa.prototype.copy = function (A) { + return ea.prototype.copy.call(this, A), + this.v0.copy(A.v0), + this.v1.copy(A.v1), + this.v2.copy(A.v2), + this.v3.copy(A.v3), + this + }, + pa.prototype.toJSON = function () { + var A = ea.prototype.toJSON.call(this); + return A.v0 = this.v0.toArray(), + A.v1 = this.v1.toArray(), + A.v2 = this.v2.toArray(), + A.v3 = this.v3.toArray(), + A + }, + pa.prototype.fromJSON = function (A) { + return ea.prototype.fromJSON.call(this, A), + this.v0.fromArray(A.v0), + this.v1.fromArray(A.v1), + this.v2.fromArray(A.v2), + this.v3.fromArray(A.v3), + this + }, + (ga.prototype = Object.create(ea.prototype)).constructor = ga, + ga.prototype.isCubicBezierCurve3 = !0, + ga.prototype.getPoint = function (A, e) { + var t = e || new y, + i = this.v0, + o = this.v1, + n = this.v2, + r = this.v3; + return t.set(da(A, i.x, o.x, n.x, r.x), da(A, i.y, o.y, n.y, r.y), da(A, i.z, o.z, n.z, r.z)), + t + }, + ga.prototype.copy = function (A) { + return ea.prototype.copy.call(this, A), + this.v0.copy(A.v0), + this.v1.copy(A.v1), + this.v2.copy(A.v2), + this.v3.copy(A.v3), + this + }, + ga.prototype.toJSON = function () { + var A = ea.prototype.toJSON.call(this); + return A.v0 = this.v0.toArray(), + A.v1 = this.v1.toArray(), + A.v2 = this.v2.toArray(), + A.v3 = this.v3.toArray(), + A + }, + ga.prototype.fromJSON = function (A) { + return ea.prototype.fromJSON.call(this, A), + this.v0.fromArray(A.v0), + this.v1.fromArray(A.v1), + this.v2.fromArray(A.v2), + this.v3.fromArray(A.v3), + this + }, + (ua.prototype = Object.create(ea.prototype)).constructor = ua, + ua.prototype.isLineCurve = !0, + ua.prototype.getPoint = function (A, e) { + var t = e || new s; + return 1 === A ? t.copy(this.v2) : (t.copy(this.v2).sub(this.v1), + t.multiplyScalar(A).add(this.v1)), + t + }, + ua.prototype.getPointAt = function (A, e) { + return this.getPoint(A, e) + }, + ua.prototype.getTangent = function () { + return this.v2.clone().sub(this.v1).normalize() + }, + ua.prototype.copy = function (A) { + return ea.prototype.copy.call(this, A), + this.v1.copy(A.v1), + this.v2.copy(A.v2), + this + }, + ua.prototype.toJSON = function () { + var A = ea.prototype.toJSON.call(this); + return A.v1 = this.v1.toArray(), + A.v2 = this.v2.toArray(), + A + }, + ua.prototype.fromJSON = function (A) { + return ea.prototype.fromJSON.call(this, A), + this.v1.fromArray(A.v1), + this.v2.fromArray(A.v2), + this + }, + (fa.prototype = Object.create(ea.prototype)).constructor = fa, + fa.prototype.isLineCurve3 = !0, + fa.prototype.getPoint = function (A, e) { + var t = e || new y; + return 1 === A ? t.copy(this.v2) : (t.copy(this.v2).sub(this.v1), + t.multiplyScalar(A).add(this.v1)), + t + }, + fa.prototype.getPointAt = function (A, e) { + return this.getPoint(A, e) + }, + fa.prototype.copy = function (A) { + return ea.prototype.copy.call(this, A), + this.v1.copy(A.v1), + this.v2.copy(A.v2), + this + }, + fa.prototype.toJSON = function () { + var A = ea.prototype.toJSON.call(this); + return A.v1 = this.v1.toArray(), + A.v2 = this.v2.toArray(), + A + }, + fa.prototype.fromJSON = function (A) { + return ea.prototype.fromJSON.call(this, A), + this.v1.fromArray(A.v1), + this.v2.fromArray(A.v2), + this + }, + (ma.prototype = Object.create(ea.prototype)).constructor = ma, + ma.prototype.isQuadraticBezierCurve = !0, + ma.prototype.getPoint = function (A, e) { + var t = e || new s, + i = this.v0, + o = this.v1, + n = this.v2; + return t.set(ha(A, i.x, o.x, n.x), ha(A, i.y, o.y, n.y)), + t + }, + ma.prototype.copy = function (A) { + return ea.prototype.copy.call(this, A), + this.v0.copy(A.v0), + this.v1.copy(A.v1), + this.v2.copy(A.v2), + this + }, + ma.prototype.toJSON = function () { + var A = ea.prototype.toJSON.call(this); + return A.v0 = this.v0.toArray(), + A.v1 = this.v1.toArray(), + A.v2 = this.v2.toArray(), + A + }, + ma.prototype.fromJSON = function (A) { + return ea.prototype.fromJSON.call(this, A), + this.v0.fromArray(A.v0), + this.v1.fromArray(A.v1), + this.v2.fromArray(A.v2), + this + }, + (Ca.prototype = Object.create(ea.prototype)).constructor = Ca, + Ca.prototype.isQuadraticBezierCurve3 = !0, + Ca.prototype.getPoint = function (A, e) { + var t = e || new y, + i = this.v0, + o = this.v1, + n = this.v2; + return t.set(ha(A, i.x, o.x, n.x), ha(A, i.y, o.y, n.y), ha(A, i.z, o.z, n.z)), + t + }, + Ca.prototype.copy = function (A) { + return ea.prototype.copy.call(this, A), + this.v0.copy(A.v0), + this.v1.copy(A.v1), + this.v2.copy(A.v2), + this + }, + Ca.prototype.toJSON = function () { + var A = ea.prototype.toJSON.call(this); + return A.v0 = this.v0.toArray(), + A.v1 = this.v1.toArray(), + A.v2 = this.v2.toArray(), + A + }, + Ca.prototype.fromJSON = function (A) { + return ea.prototype.fromJSON.call(this, A), + this.v0.fromArray(A.v0), + this.v1.fromArray(A.v1), + this.v2.fromArray(A.v2), + this + }, + (ya.prototype = Object.create(ea.prototype)).constructor = ya, + ya.prototype.isSplineCurve = !0, + ya.prototype.getPoint = function (A, e) { + var t = e || new s, + i = this.points, + o = (i.length - 1) * A, + n = Math.floor(o), + r = o - n, + a = i[0 === n ? n : n - 1], + l = i[n], + c = i[n > i.length - 2 ? i.length - 1 : n + 1], + h = i[n > i.length - 3 ? i.length - 1 : n + 2]; + return t.set(ca(r, a.x, l.x, c.x, h.x), ca(r, a.y, l.y, c.y, h.y)), + t + }, + ya.prototype.copy = function (A) { + ea.prototype.copy.call(this, A), + this.points = []; + for (var e = 0, t = A.points.length; t > e; e++) { + this.points.push(A.points[e].clone()) + } + return this + }, + ya.prototype.toJSON = function () { + var A = ea.prototype.toJSON.call(this); + A.points = []; + for (var e = 0, t = this.points.length; t > e; e++) { + A.points.push(this.points[e].toArray()) + } + return A + }, + ya.prototype.fromJSON = function (A) { + ea.prototype.fromJSON.call(this, A), + this.points = []; + for (var e = 0, t = A.points.length; t > e; e++) { + var i = A.points[e]; + this.points.push((new s).fromArray(i)) + } + return this + }; + var va = Object.freeze({ + __proto__: null, + ArcCurve: ia, + CatmullRomCurve3: la, + CubicBezierCurve: pa, + CubicBezierCurve3: ga, + EllipseCurve: ta, + LineCurve: ua, + LineCurve3: fa, + QuadraticBezierCurve: ma, + QuadraticBezierCurve3: Ca, + SplineCurve: ya + }); + + function Ia() { + ea.call(this), + this.type = "CurvePath", + this.curves = [], + this.autoClose = !1 + } + + function Ea(A) { + Ia.call(this), + this.type = "Path", + this.currentPoint = new s, + A && this.setFromPoints(A) + } + + function Ba(A) { + Ea.call(this, A), + this.uuid = a.generateUUID(), + this.type = "Shape", + this.holes = [] + } + + function xa(A, e) { + H.call(this), + this.type = "Light", + this.color = new LA(A), + this.intensity = void 0 !== e ? e : 1, + this.receiveShadow = void 0 + } + + function Sa(A, e, t) { + xa.call(this, A, t), + this.type = "HemisphereLight", + this.castShadow = void 0, + this.position.copy(H.DefaultUp), + this.updateMatrix(), + this.groundColor = new LA(e) + } + + function wa(A) { + this.camera = A, + this.bias = 0, + this.radius = 1, + this.mapSize = new s(512, 512), + this.map = null, + this.mapPass = null, + this.matrix = new M, + this._frustum = new Ze, + this._frameExtents = new s(1, 1), + this._viewportCount = 1, + this._viewports = [new p(0, 0, 1, 1)] + } + + function Ma() { + wa.call(this, new je(50, 1, .5, 500)) + } + + function ba(A, e, t, i, o, n) { + xa.call(this, A, e), + this.type = "SpotLight", + this.position.copy(H.DefaultUp), + this.updateMatrix(), + this.target = new H, + Object.defineProperty(this, "power", { + get: function () { + return this.intensity * Math.PI + }, + set: function (A) { + this.intensity = A / Math.PI + } + }), + this.distance = void 0 !== t ? t : 0, + this.angle = void 0 !== i ? i : Math.PI / 3, + this.penumbra = void 0 !== o ? o : 0, + this.decay = void 0 !== n ? n : 1, + this.shadow = new Ma + } + + function Ua() { + wa.call(this, new je(90, 1, .5, 500)), + this._frameExtents = new s(4, 2), + this._viewportCount = 6, + this._viewports = [new p(2, 1, 1, 1), new p(0, 1, 1, 1), new p(3, 1, 1, 1), new p(1, 1, 1, 1), new p(3, 0, 1, 1), new p(1, 0, 1, 1)], + this._cubeDirections = [new y(1, 0, 0), new y(-1, 0, 0), new y(0, 0, 1), new y(0, 0, -1), new y(0, 1, 0), new y(0, -1, 0)], + this._cubeUps = [new y(0, 1, 0), new y(0, 1, 0), new y(0, 1, 0), new y(0, 1, 0), new y(0, 0, 1), new y(0, 0, -1)] + } + + function Fa(A, e, t, i) { + xa.call(this, A, e), + this.type = "PointLight", + Object.defineProperty(this, "power", { + get: function () { + return 4 * this.intensity * Math.PI + }, + set: function (A) { + this.intensity = A / (4 * Math.PI) + } + }), + this.distance = void 0 !== t ? t : 0, + this.decay = void 0 !== i ? i : 1, + this.shadow = new Ua + } + + function Ka(A, e, t, i, o, n) { + qe.call(this), + this.type = "OrthographicCamera", + this.zoom = 1, + this.view = null, + this.left = void 0 !== A ? A : -1, + this.right = void 0 !== e ? e : 1, + this.top = void 0 !== t ? t : 1, + this.bottom = void 0 !== i ? i : -1, + this.near = void 0 !== o ? o : .1, + this.far = void 0 !== n ? n : 2e3, + this.updateProjectionMatrix() + } + + function Qa() { + wa.call(this, new Ka(-5, 5, 5, -5, .5, 500)) + } + + function Ra(A, e) { + xa.call(this, A, e), + this.type = "DirectionalLight", + this.position.copy(H.DefaultUp), + this.updateMatrix(), + this.target = new H, + this.shadow = new Qa + } + + function Ta(A, e) { + xa.call(this, A, e), + this.type = "AmbientLight", + this.castShadow = void 0 + } + + function ka(A, e, t, i) { + xa.call(this, A, e), + this.type = "RectAreaLight", + this.width = void 0 !== t ? t : 10, + this.height = void 0 !== i ? i : 10 + } + + function Da(A) { + Yr.call(this, A), + this.textures = {} + } + Ia.prototype = Object.assign(Object.create(ea.prototype), { + constructor: Ia, + add: function (A) { + this.curves.push(A) + }, + closePath: function () { + var A = this.curves[0].getPoint(0), + e = this.curves[this.curves.length - 1].getPoint(1); + A.equals(e) || this.curves.push(new ua(e, A)) + }, + getPoint: function (A) { + for (var e = A * this.getLength(), t = this.getCurveLengths(), i = 0; t.length > i;) { + if (t[i] >= e) { + var o = t[i] - e, + n = this.curves[i], + r = n.getLength(); + return n.getPointAt(0 === r ? 0 : 1 - o / r) + } + i++ + } + return null + }, + getLength: function () { + var A = this.getCurveLengths(); + return A[A.length - 1] + }, + updateArcLengths: function () { + this.needsUpdate = !0, + this.cacheLengths = null, + this.getCurveLengths() + }, + getCurveLengths: function () { + if (this.cacheLengths && this.cacheLengths.length === this.curves.length) + return this.cacheLengths; + for (var A = [], e = 0, t = 0, i = this.curves.length; i > t; t++) + e += this.curves[t].getLength(), + A.push(e); + return this.cacheLengths = A, + A + }, + getSpacedPoints: function (A) { + void 0 === A && (A = 40); + for (var e = [], t = 0; A >= t; t++) + e.push(this.getPoint(t / A)); + return this.autoClose && e.push(e[0]), + e + }, + getPoints: function (A) { + A = A || 12; + for (var e, t = [], i = 0, o = this.curves; o.length > i; i++) + for (var n = o[i], r = n.getPoints(n && n.isEllipseCurve ? 2 * A : n && (n.isLineCurve || n.isLineCurve3) ? 1 : n && n.isSplineCurve ? A * n.points.length : A), a = 0; r.length > a; a++) { + var s = r[a]; + e && e.equals(s) || (t.push(s), + e = s) + } + return this.autoClose && t.length > 1 && !t[t.length - 1].equals(t[0]) && t.push(t[0]), + t + }, + copy: function (A) { + ea.prototype.copy.call(this, A), + this.curves = []; + for (var e = 0, t = A.curves.length; t > e; e++) { + this.curves.push(A.curves[e].clone()) + } + return this.autoClose = A.autoClose, + this + }, + toJSON: function () { + var A = ea.prototype.toJSON.call(this); + A.autoClose = this.autoClose, + A.curves = []; + for (var e = 0, t = this.curves.length; t > e; e++) { + A.curves.push(this.curves[e].toJSON()) + } + return A + }, + fromJSON: function (A) { + ea.prototype.fromJSON.call(this, A), + this.autoClose = A.autoClose, + this.curves = []; + for (var e = 0, t = A.curves.length; t > e; e++) { + var i = A.curves[e]; + this.curves.push((new va[i.type]).fromJSON(i)) + } + return this + } + }), + Ea.prototype = Object.assign(Object.create(Ia.prototype), { + constructor: Ea, + setFromPoints: function (A) { + this.moveTo(A[0].x, A[0].y); + for (var e = 1, t = A.length; t > e; e++) + this.lineTo(A[e].x, A[e].y); + return this + }, + moveTo: function (A, e) { + return this.currentPoint.set(A, e), + this + }, + lineTo: function (A, e) { + var t = new ua(this.currentPoint.clone(), new s(A, e)); + return this.curves.push(t), + this.currentPoint.set(A, e), + this + }, + quadraticCurveTo: function (A, e, t, i) { + var o = new ma(this.currentPoint.clone(), new s(A, e), new s(t, i)); + return this.curves.push(o), + this.currentPoint.set(t, i), + this + }, + bezierCurveTo: function (A, e, t, i, o, n) { + var r = new pa(this.currentPoint.clone(), new s(A, e), new s(t, i), new s(o, n)); + return this.curves.push(r), + this.currentPoint.set(o, n), + this + }, + splineThru: function (A) { + var e = new ya([this.currentPoint.clone()].concat(A)); + return this.curves.push(e), + this.currentPoint.copy(A[A.length - 1]), + this + }, + arc: function (A, e, t, i, o, n) { + return this.absarc(A + this.currentPoint.x, e + this.currentPoint.y, t, i, o, n), + this + }, + absarc: function (A, e, t, i, o, n) { + return this.absellipse(A, e, t, t, i, o, n), + this + }, + ellipse: function (A, e, t, i, o, n, r, a) { + return this.absellipse(A + this.currentPoint.x, e + this.currentPoint.y, t, i, o, n, r, a), + this + }, + absellipse: function (A, e, t, i, o, n, r, a) { + var s = new ta(A, e, t, i, o, n, r, a); + if (this.curves.length > 0) { + var l = s.getPoint(0); + l.equals(this.currentPoint) || this.lineTo(l.x, l.y) + } + this.curves.push(s); + var c = s.getPoint(1); + return this.currentPoint.copy(c), + this + }, + copy: function (A) { + return Ia.prototype.copy.call(this, A), + this.currentPoint.copy(A.currentPoint), + this + }, + toJSON: function () { + var A = Ia.prototype.toJSON.call(this); + return A.currentPoint = this.currentPoint.toArray(), + A + }, + fromJSON: function (A) { + return Ia.prototype.fromJSON.call(this, A), + this.currentPoint.fromArray(A.currentPoint), + this + } + }), + Ba.prototype = Object.assign(Object.create(Ea.prototype), { + constructor: Ba, + getPointsHoles: function (A) { + for (var e = [], t = 0, i = this.holes.length; i > t; t++) + e[t] = this.holes[t].getPoints(A); + return e + }, + extractPoints: function (A) { + return { + shape: this.getPoints(A), + holes: this.getPointsHoles(A) + } + }, + copy: function (A) { + Ea.prototype.copy.call(this, A), + this.holes = []; + for (var e = 0, t = A.holes.length; t > e; e++) { + this.holes.push(A.holes[e].clone()) + } + return this + }, + toJSON: function () { + var A = Ea.prototype.toJSON.call(this); + A.uuid = this.uuid, + A.holes = []; + for (var e = 0, t = this.holes.length; t > e; e++) { + A.holes.push(this.holes[e].toJSON()) + } + return A + }, + fromJSON: function (A) { + Ea.prototype.fromJSON.call(this, A), + this.uuid = A.uuid, + this.holes = []; + for (var e = 0, t = A.holes.length; t > e; e++) { + var i = A.holes[e]; + this.holes.push((new Ea).fromJSON(i)) + } + return this + } + }), + xa.prototype = Object.assign(Object.create(H.prototype), { + constructor: xa, + isLight: !0, + copy: function (A) { + return H.prototype.copy.call(this, A), + this.color.copy(A.color), + this.intensity = A.intensity, + this + }, + toJSON: function (A) { + var e = H.prototype.toJSON.call(this, A); + return e.object.color = this.color.getHex(), + e.object.intensity = this.intensity, + void 0 !== this.groundColor && (e.object.groundColor = this.groundColor.getHex()), + void 0 !== this.distance && (e.object.distance = this.distance), + void 0 !== this.angle && (e.object.angle = this.angle), + void 0 !== this.decay && (e.object.decay = this.decay), + void 0 !== this.penumbra && (e.object.penumbra = this.penumbra), + void 0 !== this.shadow && (e.object.shadow = this.shadow.toJSON()), + e + } + }), + Sa.prototype = Object.assign(Object.create(xa.prototype), { + constructor: Sa, + isHemisphereLight: !0, + copy: function (A) { + return xa.prototype.copy.call(this, A), + this.groundColor.copy(A.groundColor), + this + } + }), + Object.assign(wa.prototype, { + _projScreenMatrix: new M, + _lightPositionWorld: new y, + _lookTarget: new y, + getViewportCount: function () { + return this._viewportCount + }, + getFrustum: function () { + return this._frustum + }, + updateMatrices: function (A) { + var e = this.camera, + t = this.matrix, + i = this._projScreenMatrix, + o = this._lookTarget, + n = this._lightPositionWorld; + n.setFromMatrixPosition(A.matrixWorld), + e.position.copy(n), + o.setFromMatrixPosition(A.target.matrixWorld), + e.lookAt(o), + e.updateMatrixWorld(), + i.multiplyMatrices(e.projectionMatrix, e.matrixWorldInverse), + this._frustum.setFromProjectionMatrix(i), + t.set(.5, 0, 0, .5, 0, .5, 0, .5, 0, 0, .5, .5, 0, 0, 0, 1), + t.multiply(e.projectionMatrix), + t.multiply(e.matrixWorldInverse) + }, + getViewport: function (A) { + return this._viewports[A] + }, + getFrameExtents: function () { + return this._frameExtents + }, + copy: function (A) { + return this.camera = A.camera.clone(), + this.bias = A.bias, + this.radius = A.radius, + this.mapSize.copy(A.mapSize), + this + }, + clone: function () { + return (new this.constructor).copy(this) + }, + toJSON: function () { + var A = {}; + return 0 !== this.bias && (A.bias = this.bias), + 1 !== this.radius && (A.radius = this.radius), + 512 === this.mapSize.x && 512 === this.mapSize.y || (A.mapSize = this.mapSize.toArray()), + A.camera = this.camera.toJSON(!1).object, + delete A.camera.matrix, + A + } + }), + Ma.prototype = Object.assign(Object.create(wa.prototype), { + constructor: Ma, + isSpotLightShadow: !0, + updateMatrices: function (A) { + var e = this.camera, + t = 2 * a.RAD2DEG * A.angle, + i = this.mapSize.width / this.mapSize.height, + o = A.distance || e.far; + t === e.fov && i === e.aspect && o === e.far || (e.fov = t, + e.aspect = i, + e.far = o, + e.updateProjectionMatrix()), + wa.prototype.updateMatrices.call(this, A) + } + }), + ba.prototype = Object.assign(Object.create(xa.prototype), { + constructor: ba, + isSpotLight: !0, + copy: function (A) { + return xa.prototype.copy.call(this, A), + this.distance = A.distance, + this.angle = A.angle, + this.penumbra = A.penumbra, + this.decay = A.decay, + this.target = A.target.clone(), + this.shadow = A.shadow.clone(), + this + } + }), + Ua.prototype = Object.assign(Object.create(wa.prototype), { + constructor: Ua, + isPointLightShadow: !0, + updateMatrices: function (A, e) { + void 0 === e && (e = 0); + var t = this.camera, + i = this.matrix, + o = this._lightPositionWorld, + n = this._lookTarget, + r = this._projScreenMatrix; + o.setFromMatrixPosition(A.matrixWorld), + t.position.copy(o), + n.copy(t.position), + n.add(this._cubeDirections[e]), + t.up.copy(this._cubeUps[e]), + t.lookAt(n), + t.updateMatrixWorld(), + i.makeTranslation(-o.x, -o.y, -o.z), + r.multiplyMatrices(t.projectionMatrix, t.matrixWorldInverse), + this._frustum.setFromProjectionMatrix(r) + } + }), + Fa.prototype = Object.assign(Object.create(xa.prototype), { + constructor: Fa, + isPointLight: !0, + copy: function (A) { + return xa.prototype.copy.call(this, A), + this.distance = A.distance, + this.decay = A.decay, + this.shadow = A.shadow.clone(), + this + } + }), + Ka.prototype = Object.assign(Object.create(qe.prototype), { + constructor: Ka, + isOrthographicCamera: !0, + copy: function (A, e) { + return qe.prototype.copy.call(this, A, e), + this.left = A.left, + this.right = A.right, + this.top = A.top, + this.bottom = A.bottom, + this.near = A.near, + this.far = A.far, + this.zoom = A.zoom, + this.view = null === A.view ? null : Object.assign({}, A.view), + this + }, + setViewOffset: function (A, e, t, i, o, n) { + null === this.view && (this.view = { + enabled: !0, + fullWidth: 1, + fullHeight: 1, + offsetX: 0, + offsetY: 0, + width: 1, + height: 1 + }), + this.view.enabled = !0, + this.view.fullWidth = A, + this.view.fullHeight = e, + this.view.offsetX = t, + this.view.offsetY = i, + this.view.width = o, + this.view.height = n, + this.updateProjectionMatrix() + }, + clearViewOffset: function () { + null !== this.view && (this.view.enabled = !1), + this.updateProjectionMatrix() + }, + updateProjectionMatrix: function () { + var A = (this.right - this.left) / (2 * this.zoom), + e = (this.top - this.bottom) / (2 * this.zoom), + t = (this.right + this.left) / 2, + i = (this.top + this.bottom) / 2, + o = t - A, + n = t + A, + r = i + e, + a = i - e; + if (null !== this.view && this.view.enabled) { + var s = (this.right - this.left) / this.view.fullWidth / this.zoom, + l = (this.top - this.bottom) / this.view.fullHeight / this.zoom; + n = (o += s * this.view.offsetX) + s * this.view.width, + a = (r -= l * this.view.offsetY) - l * this.view.height + } + this.projectionMatrix.makeOrthographic(o, n, r, a, this.near, this.far), + this.projectionMatrixInverse.getInverse(this.projectionMatrix) + }, + toJSON: function (A) { + var e = H.prototype.toJSON.call(this, A); + return e.object.zoom = this.zoom, + e.object.left = this.left, + e.object.right = this.right, + e.object.top = this.top, + e.object.bottom = this.bottom, + e.object.near = this.near, + e.object.far = this.far, + null !== this.view && (e.object.view = Object.assign({}, this.view)), + e + } + }), + Qa.prototype = Object.assign(Object.create(wa.prototype), { + constructor: Qa, + isDirectionalLightShadow: !0, + updateMatrices: function (A) { + wa.prototype.updateMatrices.call(this, A) + } + }), + Ra.prototype = Object.assign(Object.create(xa.prototype), { + constructor: Ra, + isDirectionalLight: !0, + copy: function (A) { + return xa.prototype.copy.call(this, A), + this.target = A.target.clone(), + this.shadow = A.shadow.clone(), + this + } + }), + Ta.prototype = Object.assign(Object.create(xa.prototype), { + constructor: Ta, + isAmbientLight: !0 + }), + ka.prototype = Object.assign(Object.create(xa.prototype), { + constructor: ka, + isRectAreaLight: !0, + copy: function (A) { + return xa.prototype.copy.call(this, A), + this.width = A.width, + this.height = A.height, + this + }, + toJSON: function (A) { + var e = xa.prototype.toJSON.call(this, A); + return e.object.width = this.width, + e.object.height = this.height, + e + } + }), + Da.prototype = Object.assign(Object.create(Yr.prototype), { + constructor: Da, + load: function (A, e, t, i) { + var o = this, + n = new Jr(o.manager); + n.setPath(o.path), + n.load(A, (function (A) { + e(o.parse(JSON.parse(A))) + }), t, i) + }, + parse: function (A) { + var e = this.textures; + + function t(A) { + return void 0 === e[A] && console.warn("THREE.MaterialLoader: Undefined texture", A), + e[A] + } + var i = new Mr[A.type]; + if (void 0 !== A.uuid && (i.uuid = A.uuid), + void 0 !== A.name && (i.name = A.name), + void 0 !== A.color && i.color.setHex(A.color), + void 0 !== A.roughness && (i.roughness = A.roughness), + void 0 !== A.metalness && (i.metalness = A.metalness), + void 0 !== A.sheen && (i.sheen = (new LA).setHex(A.sheen)), + void 0 !== A.emissive && i.emissive.setHex(A.emissive), + void 0 !== A.specular && i.specular.setHex(A.specular), + void 0 !== A.shininess && (i.shininess = A.shininess), + void 0 !== A.clearcoat && (i.clearcoat = A.clearcoat), + void 0 !== A.clearcoatRoughness && (i.clearcoatRoughness = A.clearcoatRoughness), + void 0 !== A.fog && (i.fog = A.fog), + void 0 !== A.flatShading && (i.flatShading = A.flatShading), + void 0 !== A.blending && (i.blending = A.blending), + void 0 !== A.combine && (i.combine = A.combine), + void 0 !== A.side && (i.side = A.side), + void 0 !== A.opacity && (i.opacity = A.opacity), + void 0 !== A.transparent && (i.transparent = A.transparent), + void 0 !== A.alphaTest && (i.alphaTest = A.alphaTest), + void 0 !== A.depthTest && (i.depthTest = A.depthTest), + void 0 !== A.depthWrite && (i.depthWrite = A.depthWrite), + void 0 !== A.colorWrite && (i.colorWrite = A.colorWrite), + void 0 !== A.stencilWrite && (i.stencilWrite = A.stencilWrite), + void 0 !== A.stencilWriteMask && (i.stencilWriteMask = A.stencilWriteMask), + void 0 !== A.stencilFunc && (i.stencilFunc = A.stencilFunc), + void 0 !== A.stencilRef && (i.stencilRef = A.stencilRef), + void 0 !== A.stencilFuncMask && (i.stencilFuncMask = A.stencilFuncMask), + void 0 !== A.stencilFail && (i.stencilFail = A.stencilFail), + void 0 !== A.stencilZFail && (i.stencilZFail = A.stencilZFail), + void 0 !== A.stencilZPass && (i.stencilZPass = A.stencilZPass), + void 0 !== A.wireframe && (i.wireframe = A.wireframe), + void 0 !== A.wireframeLinewidth && (i.wireframeLinewidth = A.wireframeLinewidth), + void 0 !== A.wireframeLinecap && (i.wireframeLinecap = A.wireframeLinecap), + void 0 !== A.wireframeLinejoin && (i.wireframeLinejoin = A.wireframeLinejoin), + void 0 !== A.rotation && (i.rotation = A.rotation), + 1 !== A.linewidth && (i.linewidth = A.linewidth), + void 0 !== A.dashSize && (i.dashSize = A.dashSize), + void 0 !== A.gapSize && (i.gapSize = A.gapSize), + void 0 !== A.scale && (i.scale = A.scale), + void 0 !== A.polygonOffset && (i.polygonOffset = A.polygonOffset), + void 0 !== A.polygonOffsetFactor && (i.polygonOffsetFactor = A.polygonOffsetFactor), + void 0 !== A.polygonOffsetUnits && (i.polygonOffsetUnits = A.polygonOffsetUnits), + void 0 !== A.skinning && (i.skinning = A.skinning), + void 0 !== A.morphTargets && (i.morphTargets = A.morphTargets), + void 0 !== A.morphNormals && (i.morphNormals = A.morphNormals), + void 0 !== A.dithering && (i.dithering = A.dithering), + void 0 !== A.vertexTangents && (i.vertexTangents = A.vertexTangents), + void 0 !== A.visible && (i.visible = A.visible), + void 0 !== A.toneMapped && (i.toneMapped = A.toneMapped), + void 0 !== A.userData && (i.userData = A.userData), + void 0 !== A.vertexColors && (i.vertexColors = "number" == typeof A.vertexColors ? A.vertexColors > 0 : A.vertexColors), + void 0 !== A.uniforms) + for (var o in A.uniforms) { + var n = A.uniforms[o]; + switch (i.uniforms[o] = {}, + n.type) { + case "t": + i.uniforms[o].value = t(n.value); + break; + case "c": + i.uniforms[o].value = (new LA).setHex(n.value); + break; + case "v2": + i.uniforms[o].value = (new s).fromArray(n.value); + break; + case "v3": + i.uniforms[o].value = (new y).fromArray(n.value); + break; + case "v4": + i.uniforms[o].value = (new p).fromArray(n.value); + break; + case "m3": + i.uniforms[o].value = (new l).fromArray(n.value); + case "m4": + i.uniforms[o].value = (new M).fromArray(n.value); + break; + default: + i.uniforms[o].value = n.value + } + } + if (void 0 !== A.defines && (i.defines = A.defines), + void 0 !== A.vertexShader && (i.vertexShader = A.vertexShader), + void 0 !== A.fragmentShader && (i.fragmentShader = A.fragmentShader), + void 0 !== A.extensions) + for (var r in A.extensions) + i.extensions[r] = A.extensions[r]; + if (void 0 !== A.shading && (i.flatShading = 1 === A.shading), + void 0 !== A.size && (i.size = A.size), + void 0 !== A.sizeAttenuation && (i.sizeAttenuation = A.sizeAttenuation), + void 0 !== A.map && (i.map = t(A.map)), + void 0 !== A.matcap && (i.matcap = t(A.matcap)), + void 0 !== A.alphaMap && (i.alphaMap = t(A.alphaMap)), + void 0 !== A.bumpMap && (i.bumpMap = t(A.bumpMap)), + void 0 !== A.bumpScale && (i.bumpScale = A.bumpScale), + void 0 !== A.normalMap && (i.normalMap = t(A.normalMap)), + void 0 !== A.normalMapType && (i.normalMapType = A.normalMapType), + void 0 !== A.normalScale) { + var a = A.normalScale; + !1 === Array.isArray(a) && (a = [a, a]), + i.normalScale = (new s).fromArray(a) + } + return void 0 !== A.displacementMap && (i.displacementMap = t(A.displacementMap)), + void 0 !== A.displacementScale && (i.displacementScale = A.displacementScale), + void 0 !== A.displacementBias && (i.displacementBias = A.displacementBias), + void 0 !== A.roughnessMap && (i.roughnessMap = t(A.roughnessMap)), + void 0 !== A.metalnessMap && (i.metalnessMap = t(A.metalnessMap)), + void 0 !== A.emissiveMap && (i.emissiveMap = t(A.emissiveMap)), + void 0 !== A.emissiveIntensity && (i.emissiveIntensity = A.emissiveIntensity), + void 0 !== A.specularMap && (i.specularMap = t(A.specularMap)), + void 0 !== A.envMap && (i.envMap = t(A.envMap)), + void 0 !== A.envMapIntensity && (i.envMapIntensity = A.envMapIntensity), + void 0 !== A.reflectivity && (i.reflectivity = A.reflectivity), + void 0 !== A.refractionRatio && (i.refractionRatio = A.refractionRatio), + void 0 !== A.lightMap && (i.lightMap = t(A.lightMap)), + void 0 !== A.lightMapIntensity && (i.lightMapIntensity = A.lightMapIntensity), + void 0 !== A.aoMap && (i.aoMap = t(A.aoMap)), + void 0 !== A.aoMapIntensity && (i.aoMapIntensity = A.aoMapIntensity), + void 0 !== A.gradientMap && (i.gradientMap = t(A.gradientMap)), + void 0 !== A.clearcoatMap && (i.clearcoatMap = t(A.clearcoatMap)), + void 0 !== A.clearcoatRoughnessMap && (i.clearcoatRoughnessMap = t(A.clearcoatRoughnessMap)), + void 0 !== A.clearcoatNormalMap && (i.clearcoatNormalMap = t(A.clearcoatNormalMap)), + void 0 !== A.clearcoatNormalScale && (i.clearcoatNormalScale = (new s).fromArray(A.clearcoatNormalScale)), + i + }, + setTextures: function (A) { + return this.textures = A, + this + } + }); + var La = { + decodeText: function (A) { + if ("undefined" != typeof TextDecoder) + return (new TextDecoder).decode(A); + for (var e = "", t = 0, i = A.length; i > t; t++) + e += String.fromCharCode(A[t]); + try { + return decodeURIComponent(escape(e)) + } catch (A) { + return e + } + }, + extractUrlBase: function (A) { + var e = A.lastIndexOf("/"); + return -1 === e ? "./" : A.substr(0, e + 1) + } + }; + + function Na() { + he.call(this), + this.type = "InstancedBufferGeometry", + this.maxInstancedCount = void 0 + } + + function Oa(A, e, t, i) { + "number" == typeof t && (i = t, + t = !1, + console.error("THREE.InstancedBufferAttribute: The constructor now expects normalized as the third argument.")), + YA.call(this, A, e, t), + this.meshPerAttribute = i || 1 + } + + function Va(A) { + Yr.call(this, A) + } + Na.prototype = Object.assign(Object.create(he.prototype), { + constructor: Na, + isInstancedBufferGeometry: !0, + copy: function (A) { + return he.prototype.copy.call(this, A), + this.maxInstancedCount = A.maxInstancedCount, + this + }, + clone: function () { + return (new this.constructor).copy(this) + }, + toJSON: function () { + var A = he.prototype.toJSON.call(this); + return A.maxInstancedCount = this.maxInstancedCount, + A.isInstancedBufferGeometry = !0, + A + } + }), + Oa.prototype = Object.assign(Object.create(YA.prototype), { + constructor: Oa, + isInstancedBufferAttribute: !0, + copy: function (A) { + return YA.prototype.copy.call(this, A), + this.meshPerAttribute = A.meshPerAttribute, + this + }, + toJSON: function () { + var A = YA.prototype.toJSON.call(this); + return A.meshPerAttribute = this.meshPerAttribute, + A.isInstancedBufferAttribute = !0, + A + } + }), + Va.prototype = Object.assign(Object.create(Yr.prototype), { + constructor: Va, + load: function (A, e, t, i) { + var o = this, + n = new Jr(o.manager); + n.setPath(o.path), + n.load(A, (function (A) { + e(o.parse(JSON.parse(A))) + }), t, i) + }, + parse: function (A) { + var e = A.isInstancedBufferGeometry ? new Na : new he, + t = A.data.index; + if (void 0 !== t) { + var i = new Ga[t.type](t.array); + e.setIndex(new YA(i, 1)) + } + var o = A.data.attributes; + for (var n in o) { + i = new Ga[(d = o[n]).type](d.array); + var r = new(d.isInstancedBufferAttribute ? Oa : YA)(i, d.itemSize, d.normalized); + void 0 !== d.name && (r.name = d.name), + e.setAttribute(n, r) + } + var a = A.data.morphAttributes; + if (a) + for (var n in a) { + for (var s = a[n], l = [], c = 0, h = s.length; h > c; c++) { + var d; + r = new YA(i = new Ga[(d = s[c]).type](d.array), d.itemSize, d.normalized); + void 0 !== d.name && (r.name = d.name), + l.push(r) + } + e.morphAttributes[n] = l + } + A.data.morphTargetsRelative && (e.morphTargetsRelative = !0); + var p = A.data.groups || A.data.drawcalls || A.data.offsets; + if (void 0 !== p) { + c = 0; + for (var g = p.length; c !== g; ++c) { + var u = p[c]; + e.addGroup(u.start, u.count, u.materialIndex) + } + } + var f = A.data.boundingSphere; + if (void 0 !== f) { + var m = new y; + void 0 !== f.center && m.fromArray(f.center), + e.boundingSphere = new cA(m, f.radius) + } + return A.name && (e.name = A.name), + A.userData && (e.userData = A.userData), + e + } + }); + var Ga = { + Int8Array: Int8Array, + Uint8Array: Uint8Array, + Uint8ClampedArray: "undefined" != typeof Uint8ClampedArray ? Uint8ClampedArray : Uint8Array, + Int16Array: Int16Array, + Uint16Array: Uint16Array, + Int32Array: Int32Array, + Uint32Array: Uint32Array, + Float32Array: Float32Array, + Float64Array: Float64Array + }; + + function Pa(A) { + Yr.call(this, A) + } + Pa.prototype = Object.assign(Object.create(Yr.prototype), { + constructor: Pa, + load: function (A, e, t, i) { + var o = this, + n = "" === this.path ? La.extractUrlBase(A) : this.path; + this.resourcePath = this.resourcePath || n; + var r = new Jr(o.manager); + r.setPath(this.path), + r.load(A, (function (t) { + var n = null; + try { + n = JSON.parse(t) + } catch (e) { + return void 0 !== i && i(e), + void console.error("THREE:ObjectLoader: Can't parse " + A + ".", e.message) + } + var r = n.metadata; + void 0 !== r && void 0 !== r.type && "geometry" !== r.type.toLowerCase() ? o.parse(n, e) : console.error("THREE.ObjectLoader: Can't load " + A) + }), t, i) + }, + parse: function (A, e) { + var t = this.parseShape(A.shapes), + i = this.parseGeometries(A.geometries, t), + o = this.parseImages(A.images, (function () { + void 0 !== e && e(a) + })), + n = this.parseTextures(A.textures, o), + r = this.parseMaterials(A.materials, n), + a = this.parseObject(A.object, i, r); + return A.animations && (a.animations = this.parseAnimations(A.animations)), + void 0 !== A.images && 0 !== A.images.length || void 0 !== e && e(a), + a + }, + parseShape: function (A) { + var e = {}; + if (void 0 !== A) + for (var t = 0, i = A.length; i > t; t++) { + var o = (new Ba).fromJSON(A[t]); + e[o.uuid] = o + } + return e + }, + parseGeometries: function (A, e) { + var t = {}; + if (void 0 !== A) + for (var i = new Va, o = 0, n = A.length; n > o; o++) { + var r, a = A[o]; + switch (a.type) { + case "PlaneGeometry": + case "PlaneBufferGeometry": + r = new fr[a.type](a.width, a.height, a.widthSegments, a.heightSegments); + break; + case "BoxGeometry": + case "BoxBufferGeometry": + case "CubeGeometry": + r = new fr[a.type](a.width, a.height, a.depth, a.widthSegments, a.heightSegments, a.depthSegments); + break; + case "CircleGeometry": + case "CircleBufferGeometry": + r = new fr[a.type](a.radius, a.segments, a.thetaStart, a.thetaLength); + break; + case "CylinderGeometry": + case "CylinderBufferGeometry": + r = new fr[a.type](a.radiusTop, a.radiusBottom, a.height, a.radialSegments, a.heightSegments, a.openEnded, a.thetaStart, a.thetaLength); + break; + case "ConeGeometry": + case "ConeBufferGeometry": + r = new fr[a.type](a.radius, a.height, a.radialSegments, a.heightSegments, a.openEnded, a.thetaStart, a.thetaLength); + break; + case "SphereGeometry": + case "SphereBufferGeometry": + r = new fr[a.type](a.radius, a.widthSegments, a.heightSegments, a.phiStart, a.phiLength, a.thetaStart, a.thetaLength); + break; + case "DodecahedronGeometry": + case "DodecahedronBufferGeometry": + case "IcosahedronGeometry": + case "IcosahedronBufferGeometry": + case "OctahedronGeometry": + case "OctahedronBufferGeometry": + case "TetrahedronGeometry": + case "TetrahedronBufferGeometry": + r = new fr[a.type](a.radius, a.detail); + break; + case "RingGeometry": + case "RingBufferGeometry": + r = new fr[a.type](a.innerRadius, a.outerRadius, a.thetaSegments, a.phiSegments, a.thetaStart, a.thetaLength); + break; + case "TorusGeometry": + case "TorusBufferGeometry": + r = new fr[a.type](a.radius, a.tube, a.radialSegments, a.tubularSegments, a.arc); + break; + case "TorusKnotGeometry": + case "TorusKnotBufferGeometry": + r = new fr[a.type](a.radius, a.tube, a.tubularSegments, a.radialSegments, a.p, a.q); + break; + case "TubeGeometry": + case "TubeBufferGeometry": + r = new fr[a.type]((new va[a.path.type]).fromJSON(a.path), a.tubularSegments, a.radius, a.radialSegments, a.closed); + break; + case "LatheGeometry": + case "LatheBufferGeometry": + r = new fr[a.type](a.points, a.segments, a.phiStart, a.phiLength); + break; + case "PolyhedronGeometry": + case "PolyhedronBufferGeometry": + r = new fr[a.type](a.vertices, a.indices, a.radius, a.details); + break; + case "ShapeGeometry": + case "ShapeBufferGeometry": + for (var s = [], l = 0, c = a.shapes.length; c > l; l++) { + s.push(e[a.shapes[l]]) + } + r = new fr[a.type](s, a.curveSegments); + break; + case "ExtrudeGeometry": + case "ExtrudeBufferGeometry": + for (s = [], + l = 0, + c = a.shapes.length; c > l; l++) { + s.push(e[a.shapes[l]]) + } + var h = a.options.extrudePath; + void 0 !== h && (a.options.extrudePath = (new va[h.type]).fromJSON(h)), + r = new fr[a.type](s, a.options); + break; + case "BufferGeometry": + case "InstancedBufferGeometry": + r = i.parse(a); + break; + case "Geometry": + console.error('THREE.ObjectLoader: Loading "Geometry" is not supported anymore.'); + break; + default: + console.warn('THREE.ObjectLoader: Unsupported geometry type "' + a.type + '"'); + continue + } + r.uuid = a.uuid, + void 0 !== a.name && (r.name = a.name), + !0 === r.isBufferGeometry && void 0 !== a.userData && (r.userData = a.userData), + t[a.uuid] = r + } + return t + }, + parseMaterials: function (A, e) { + var t = {}, + i = {}; + if (void 0 !== A) { + var o = new Da; + o.setTextures(e); + for (var n = 0, r = A.length; r > n; n++) { + var a = A[n]; + if ("MultiMaterial" === a.type) { + for (var s = [], l = 0; a.materials.length > l; l++) { + var c = a.materials[l]; + void 0 === t[c.uuid] && (t[c.uuid] = o.parse(c)), + s.push(t[c.uuid]) + } + i[a.uuid] = s + } else + void 0 === t[a.uuid] && (t[a.uuid] = o.parse(a)), + i[a.uuid] = t[a.uuid] + } + } + return i + }, + parseAnimations: function (A) { + for (var e = [], t = 0; A.length > t; t++) { + var i = A[t], + o = Gr.parse(i); + void 0 !== i.uuid && (o.uuid = i.uuid), + e.push(o) + } + return e + }, + parseImages: function (A, e) { + var t = this, + i = {}; + + function o(A) { + return t.manager.itemStart(A), + n.load(A, (function () { + t.manager.itemEnd(A) + }), void 0, (function () { + t.manager.itemError(A), + t.manager.itemEnd(A) + })) + } + if (void 0 !== A && A.length > 0) { + var n = new _r(new jr(e)); + n.setCrossOrigin(this.crossOrigin); + for (var r = 0, a = A.length; a > r; r++) { + var s = A[r], + l = s.url; + if (Array.isArray(l)) { + i[s.uuid] = []; + for (var c = 0, h = l.length; h > c; c++) { + var d = l[c], + p = /^(\/\/)|([a-z]+:(\/\/)?)/i.test(d) ? d : t.resourcePath + d; + i[s.uuid].push(o(p)) + } + } else { + p = /^(\/\/)|([a-z]+:(\/\/)?)/i.test(s.url) ? s.url : t.resourcePath + s.url; + i[s.uuid] = o(p) + } + } + } + return i + }, + parseTextures: function (A, e) { + function t(A, e) { + return "number" == typeof A ? A : (console.warn("THREE.ObjectLoader.parseTexture: Constant should be in numeric form.", A), + e[A]) + } + var i = {}; + if (void 0 !== A) + for (var o = 0, n = A.length; n > o; o++) { + var r, a = A[o]; + void 0 === a.image && console.warn('THREE.ObjectLoader: No "image" specified for', a.uuid), + void 0 === e[a.image] && console.warn("THREE.ObjectLoader: Undefined image", a.image), + (r = Array.isArray(e[a.image]) ? new ut(e[a.image]) : new d(e[a.image])).needsUpdate = !0, + r.uuid = a.uuid, + void 0 !== a.name && (r.name = a.name), + void 0 !== a.mapping && (r.mapping = t(a.mapping, ja)), + void 0 !== a.offset && r.offset.fromArray(a.offset), + void 0 !== a.repeat && r.repeat.fromArray(a.repeat), + void 0 !== a.center && r.center.fromArray(a.center), + void 0 !== a.rotation && (r.rotation = a.rotation), + void 0 !== a.wrap && (r.wrapS = t(a.wrap[0], Ha), + r.wrapT = t(a.wrap[1], Ha)), + void 0 !== a.format && (r.format = a.format), + void 0 !== a.type && (r.type = a.type), + void 0 !== a.encoding && (r.encoding = a.encoding), + void 0 !== a.minFilter && (r.minFilter = t(a.minFilter, Ya)), + void 0 !== a.magFilter && (r.magFilter = t(a.magFilter, Ya)), + void 0 !== a.anisotropy && (r.anisotropy = a.anisotropy), + void 0 !== a.flipY && (r.flipY = a.flipY), + void 0 !== a.premultiplyAlpha && (r.premultiplyAlpha = a.premultiplyAlpha), + void 0 !== a.unpackAlignment && (r.unpackAlignment = a.unpackAlignment), + i[a.uuid] = r + } + return i + }, + parseObject: function (A, e, t) { + var i; + + function o(A) { + return void 0 === e[A] && console.warn("THREE.ObjectLoader: Undefined geometry", A), + e[A] + } + + function n(A) { + if (void 0 !== A) { + if (Array.isArray(A)) { + for (var e = [], i = 0, o = A.length; o > i; i++) { + var n = A[i]; + void 0 === t[n] && console.warn("THREE.ObjectLoader: Undefined material", n), + e.push(t[n]) + } + return e + } + return void 0 === t[A] && console.warn("THREE.ObjectLoader: Undefined material", A), + t[A] + } + } + switch (A.type) { + case "Scene": + i = new Y, + void 0 !== A.background && Number.isInteger(A.background) && (i.background = new LA(A.background)), + void 0 !== A.fog && ("Fog" === A.fog.type ? i.fog = new eo(A.fog.color, A.fog.near, A.fog.far) : "FogExp2" === A.fog.type && (i.fog = new Ao(A.fog.color, A.fog.density))); + break; + case "PerspectiveCamera": + i = new je(A.fov, A.aspect, A.near, A.far), + void 0 !== A.focus && (i.focus = A.focus), + void 0 !== A.zoom && (i.zoom = A.zoom), + void 0 !== A.filmGauge && (i.filmGauge = A.filmGauge), + void 0 !== A.filmOffset && (i.filmOffset = A.filmOffset), + void 0 !== A.view && (i.view = Object.assign({}, A.view)); + break; + case "OrthographicCamera": + i = new Ka(A.left, A.right, A.top, A.bottom, A.near, A.far), + void 0 !== A.zoom && (i.zoom = A.zoom), + void 0 !== A.view && (i.view = Object.assign({}, A.view)); + break; + case "AmbientLight": + i = new Ta(A.color, A.intensity); + break; + case "DirectionalLight": + i = new Ra(A.color, A.intensity); + break; + case "PointLight": + i = new Fa(A.color, A.intensity, A.distance, A.decay); + break; + case "RectAreaLight": + i = new ka(A.color, A.intensity, A.width, A.height); + break; + case "SpotLight": + i = new ba(A.color, A.intensity, A.distance, A.angle, A.penumbra, A.decay); + break; + case "HemisphereLight": + i = new Sa(A.color, A.groundColor, A.intensity); + break; + case "SkinnedMesh": + console.warn("THREE.ObjectLoader.parseObject() does not support SkinnedMesh yet."); + case "Mesh": + i = new Ue(r = o(A.geometry), a = n(A.material)); + break; + case "InstancedMesh": + var r = o(A.geometry), + a = n(A.material), + s = A.instanceMatrix; + (i = new To(r, a, A.count)).instanceMatrix = new YA(new Float32Array(s.array), 16); + break; + case "LOD": + i = new xo; + break; + case "Line": + i = new Go(o(A.geometry), n(A.material), A.mode); + break; + case "LineLoop": + i = new Ho(o(A.geometry), n(A.material)); + break; + case "LineSegments": + i = new jo(o(A.geometry), n(A.material)); + break; + case "PointCloud": + case "Points": + i = new Xo(o(A.geometry), n(A.material)); + break; + case "Sprite": + i = new vo(n(A.material)); + break; + case "Group": + i = new Xi; + break; + default: + i = new H + } + if (i.uuid = A.uuid, + void 0 !== A.name && (i.name = A.name), + void 0 !== A.matrix ? (i.matrix.fromArray(A.matrix), + void 0 !== A.matrixAutoUpdate && (i.matrixAutoUpdate = A.matrixAutoUpdate), + i.matrixAutoUpdate && i.matrix.decompose(i.position, i.quaternion, i.scale)) : (void 0 !== A.position && i.position.fromArray(A.position), + void 0 !== A.rotation && i.rotation.fromArray(A.rotation), + void 0 !== A.quaternion && i.quaternion.fromArray(A.quaternion), + void 0 !== A.scale && i.scale.fromArray(A.scale)), + void 0 !== A.castShadow && (i.castShadow = A.castShadow), + void 0 !== A.receiveShadow && (i.receiveShadow = A.receiveShadow), + A.shadow && (void 0 !== A.shadow.bias && (i.shadow.bias = A.shadow.bias), + void 0 !== A.shadow.radius && (i.shadow.radius = A.shadow.radius), + void 0 !== A.shadow.mapSize && i.shadow.mapSize.fromArray(A.shadow.mapSize), + void 0 !== A.shadow.camera && (i.shadow.camera = this.parseObject(A.shadow.camera))), + void 0 !== A.visible && (i.visible = A.visible), + void 0 !== A.frustumCulled && (i.frustumCulled = A.frustumCulled), + void 0 !== A.renderOrder && (i.renderOrder = A.renderOrder), + void 0 !== A.userData && (i.userData = A.userData), + void 0 !== A.layers && (i.layers.mask = A.layers), + void 0 !== A.children) + for (var l = A.children, c = 0; l.length > c; c++) + i.add(this.parseObject(l[c], e, t)); + if ("LOD" === A.type) { + void 0 !== A.autoUpdate && (i.autoUpdate = A.autoUpdate); + for (var h = A.levels, d = 0; h.length > d; d++) { + var p = h[d], + g = i.getObjectByProperty("uuid", p.object); + void 0 !== g && i.addLevel(g, p.distance) + } + } + return i + } + }); + var qa, ja = { + UVMapping: 300, + CubeReflectionMapping: 301, + CubeRefractionMapping: 302, + EquirectangularReflectionMapping: 303, + EquirectangularRefractionMapping: 304, + SphericalReflectionMapping: 305, + CubeUVReflectionMapping: 306, + CubeUVRefractionMapping: 307 + }, + Ha = { + RepeatWrapping: 1e3, + ClampToEdgeWrapping: 1001, + MirroredRepeatWrapping: 1002 + }, + Ya = { + NearestFilter: 1003, + NearestMipmapNearestFilter: 1004, + NearestMipmapLinearFilter: 1005, + LinearFilter: 1006, + LinearMipmapNearestFilter: 1007, + LinearMipmapLinearFilter: 1008 + }; + + function Wa(A) { + "undefined" == typeof createImageBitmap && console.warn("THREE.ImageBitmapLoader: createImageBitmap() not supported."), + "undefined" == typeof fetch && console.warn("THREE.ImageBitmapLoader: fetch() not supported."), + Yr.call(this, A), + this.options = void 0 + } + + function Ja() { + this.type = "ShapePath", + this.color = new LA, + this.subPaths = [], + this.currentPath = null + } + + function za(A) { + this.type = "Font", + this.data = A + } + + function Za(A, e, t, i, o) { + var n = o.glyphs[A] || o.glyphs["?"]; + if (n) { + var r, a, s, l, c, h, d, p, g = new Ja; + if (n.o) + for (var u = n._cachedOutline || (n._cachedOutline = n.o.split(" ")), f = 0, m = u.length; m > f;) { + switch (u[f++]) { + case "m": + r = u[f++] * e + t, + a = u[f++] * e + i, + g.moveTo(r, a); + break; + case "l": + r = u[f++] * e + t, + a = u[f++] * e + i, + g.lineTo(r, a); + break; + case "q": + s = u[f++] * e + t, + l = u[f++] * e + i, + c = u[f++] * e + t, + h = u[f++] * e + i, + g.quadraticCurveTo(c, h, s, l); + break; + case "b": + s = u[f++] * e + t, + l = u[f++] * e + i, + c = u[f++] * e + t, + h = u[f++] * e + i, + d = u[f++] * e + t, + p = u[f++] * e + i, + g.bezierCurveTo(c, h, d, p, s, l) + } + } + return { + offsetX: n.ha * e, + path: g + } + } + console.error('THREE.Font: character "' + A + '" does not exists in font family ' + o.familyName + ".") + } + + function Xa(A) { + Yr.call(this, A) + } + Wa.prototype = Object.assign(Object.create(Yr.prototype), { + constructor: Wa, + setOptions: function (A) { + return this.options = A, + this + }, + load: function (A, e, t, i) { + void 0 === A && (A = ""), + void 0 !== this.path && (A = this.path + A), + A = this.manager.resolveURL(A); + var o = this, + n = qr.get(A); + if (void 0 !== n) + return o.manager.itemStart(A), + setTimeout((function () { + e && e(n), + o.manager.itemEnd(A) + }), 0), + n; + fetch(A).then((function (A) { + return A.blob() + })).then((function (A) { + return void 0 === o.options ? createImageBitmap(A) : createImageBitmap(A, o.options) + })).then((function (t) { + qr.add(A, t), + e && e(t), + o.manager.itemEnd(A) + })).catch((function (e) { + i && i(e), + o.manager.itemError(A), + o.manager.itemEnd(A) + })), + o.manager.itemStart(A) + } + }), + Object.assign(Ja.prototype, { + moveTo: function (A, e) { + return this.currentPath = new Ea, + this.subPaths.push(this.currentPath), + this.currentPath.moveTo(A, e), + this + }, + lineTo: function (A, e) { + return this.currentPath.lineTo(A, e), + this + }, + quadraticCurveTo: function (A, e, t, i) { + return this.currentPath.quadraticCurveTo(A, e, t, i), + this + }, + bezierCurveTo: function (A, e, t, i, o, n) { + return this.currentPath.bezierCurveTo(A, e, t, i, o, n), + this + }, + splineThru: function (A) { + return this.currentPath.splineThru(A), + this + }, + toShapes: function (A, e) { + function t(A) { + for (var e = [], t = 0, i = A.length; i > t; t++) { + var o = A[t], + n = new Ba; + n.curves = o.curves, + e.push(n) + } + return e + } + + function i(A, e) { + for (var t = e.length, i = !1, o = t - 1, n = 0; t > n; o = n++) { + var r = e[o], + a = e[n], + s = a.x - r.x, + l = a.y - r.y; + if (Math.abs(l) > Number.EPSILON) { + if (0 > l && (r = e[n], + s = -s, + a = e[o], + l = -l), + r.y > A.y || A.y > a.y) + continue; + if (A.y === r.y) { + if (A.x === r.x) + return !0 + } else { + var c = l * (A.x - r.x) - s * (A.y - r.y); + if (0 === c) + return !0; + if (0 > c) + continue; + i = !i + } + } else { + if (A.y !== r.y) + continue; + if (A.x >= a.x && r.x >= A.x || A.x >= r.x && a.x >= A.x) + return !0 + } + } + return i + } + var o = Hn.isClockWise, + n = this.subPaths; + if (0 === n.length) + return []; + if (!0 === e) + return t(n); + var r, a, s, l = []; + if (1 === n.length) + return a = n[0], + (s = new Ba).curves = a.curves, + l.push(s), + l; + var c = !o(n[0].getPoints()); + c = A ? !c : c; + var h, d, p = [], + g = [], + u = [], + f = 0; + g[f] = void 0, + u[f] = []; + for (var m = 0, C = n.length; C > m; m++) + r = o(h = (a = n[m]).getPoints()), + (r = A ? !r : r) ? (!c && g[f] && f++, + g[f] = { + s: new Ba, + p: h + }, + g[f].s.curves = a.curves, + c && f++, + u[f] = []) : u[f].push({ + h: a, + p: h[0] + }); + if (!g[0]) + return t(n); + if (g.length > 1) { + for (var y = !1, v = [], I = 0, E = g.length; E > I; I++) + p[I] = []; + for (I = 0, + E = g.length; E > I; I++) + for (var B = u[I], x = 0; B.length > x; x++) { + for (var S = B[x], w = !0, M = 0; g.length > M; M++) + i(S.p, g[M].p) && (I !== M && v.push({ + froms: I, + tos: M, + hole: x + }), + w ? (w = !1, + p[M].push(S)) : y = !0); + w && p[I].push(S) + } + v.length > 0 && (y || (u = p)) + } + m = 0; + for (var b = g.length; b > m; m++) { + l.push(s = g[m].s); + for (var U = 0, F = (d = u[m]).length; F > U; U++) + s.holes.push(d[U].h) + } + return l + } + }), + Object.assign(za.prototype, { + isFont: !0, + generateShapes: function (A, e) { + void 0 === e && (e = 100); + for (var t = [], i = function (A, e, t) { + for (var i = Array.from ? Array.from(A) : String(A).split(""), o = e / t.resolution, n = (t.boundingBox.yMax - t.boundingBox.yMin + t.underlineThickness) * o, r = [], a = 0, s = 0, l = 0; i.length > l; l++) { + var c = i[l]; + if ("\n" === c) + a = 0, + s -= n; + else { + var h = Za(c, o, a, s, t); + a += h.offsetX, + r.push(h.path) + } + } + return r + }(A, e, this.data), o = 0, n = i.length; n > o; o++) + Array.prototype.push.apply(t, i[o].toShapes()); + return t + } + }), + Xa.prototype = Object.assign(Object.create(Yr.prototype), { + constructor: Xa, + load: function (A, e, t, i) { + var o = this, + n = new Jr(this.manager); + n.setPath(this.path), + n.load(A, (function (A) { + var t; + try { + t = JSON.parse(A) + } catch (e) { + console.warn("THREE.FontLoader: typeface.js support is being deprecated. Use typeface.json instead."), + t = JSON.parse(A.substring(65, A.length - 2)) + } + var i = o.parse(t); + e && e(i) + }), t, i) + }, + parse: function (A) { + return new za(A) + } + }); + var _a = { + getContext: function () { + return void 0 === qa && (qa = new(window.AudioContext || window.webkitAudioContext)), + qa + }, + setContext: function (A) { + qa = A + } + }; + + function $a(A) { + Yr.call(this, A) + } + + function As() { + this.coefficients = []; + for (var A = 0; 9 > A; A++) + this.coefficients.push(new y) + } + + function es(A, e) { + xa.call(this, void 0, e), + this.sh = void 0 !== A ? A : new As + } + + function ts(A, e, t) { + es.call(this, void 0, t); + var i = (new LA).set(A), + o = (new LA).set(e), + n = new y(i.r, i.g, i.b), + r = new y(o.r, o.g, o.b), + a = Math.sqrt(Math.PI), + s = a * Math.sqrt(.75); + this.sh.coefficients[0].copy(n).add(r).multiplyScalar(a), + this.sh.coefficients[1].copy(n).sub(r).multiplyScalar(s) + } + + function is(A, e) { + es.call(this, void 0, e); + var t = (new LA).set(A); + this.sh.coefficients[0].set(t.r, t.g, t.b).multiplyScalar(2 * Math.sqrt(Math.PI)) + } + $a.prototype = Object.assign(Object.create(Yr.prototype), { + constructor: $a, + load: function (A, e, t, i) { + var o = new Jr(this.manager); + o.setResponseType("arraybuffer"), + o.setPath(this.path), + o.load(A, (function (A) { + var t = A.slice(0); + _a.getContext().decodeAudioData(t, (function (A) { + e(A) + })) + }), t, i) + } + }), + Object.assign(As.prototype, { + isSphericalHarmonics3: !0, + set: function (A) { + for (var e = 0; 9 > e; e++) + this.coefficients[e].copy(A[e]); + return this + }, + zero: function () { + for (var A = 0; 9 > A; A++) + this.coefficients[A].set(0, 0, 0); + return this + }, + getAt: function (A, e) { + var t = A.x, + i = A.y, + o = A.z, + n = this.coefficients; + return e.copy(n[0]).multiplyScalar(.282095), + e.addScaledVector(n[1], .488603 * i), + e.addScaledVector(n[2], .488603 * o), + e.addScaledVector(n[3], .488603 * t), + e.addScaledVector(n[4], t * i * 1.092548), + e.addScaledVector(n[5], i * o * 1.092548), + e.addScaledVector(n[6], .315392 * (3 * o * o - 1)), + e.addScaledVector(n[7], t * o * 1.092548), + e.addScaledVector(n[8], .546274 * (t * t - i * i)), + e + }, + getIrradianceAt: function (A, e) { + var t = A.x, + i = A.y, + o = A.z, + n = this.coefficients; + return e.copy(n[0]).multiplyScalar(.886227), + e.addScaledVector(n[1], 1.023328 * i), + e.addScaledVector(n[2], 1.023328 * o), + e.addScaledVector(n[3], 1.023328 * t), + e.addScaledVector(n[4], .858086 * t * i), + e.addScaledVector(n[5], .858086 * i * o), + e.addScaledVector(n[6], .743125 * o * o - .247708), + e.addScaledVector(n[7], .858086 * t * o), + e.addScaledVector(n[8], .429043 * (t * t - i * i)), + e + }, + add: function (A) { + for (var e = 0; 9 > e; e++) + this.coefficients[e].add(A.coefficients[e]); + return this + }, + addScaledSH: function (A, e) { + for (var t = 0; 9 > t; t++) + this.coefficients[t].addScaledVector(A.coefficients[t], e); + return this + }, + scale: function (A) { + for (var e = 0; 9 > e; e++) + this.coefficients[e].multiplyScalar(A); + return this + }, + lerp: function (A, e) { + for (var t = 0; 9 > t; t++) + this.coefficients[t].lerp(A.coefficients[t], e); + return this + }, + equals: function (A) { + for (var e = 0; 9 > e; e++) + if (!this.coefficients[e].equals(A.coefficients[e])) + return !1; + return !0 + }, + copy: function (A) { + return this.set(A.coefficients) + }, + clone: function () { + return (new this.constructor).copy(this) + }, + fromArray: function (A, e) { + void 0 === e && (e = 0); + for (var t = this.coefficients, i = 0; 9 > i; i++) + t[i].fromArray(A, e + 3 * i); + return this + }, + toArray: function (A, e) { + void 0 === A && (A = []), + void 0 === e && (e = 0); + for (var t = this.coefficients, i = 0; 9 > i; i++) + t[i].toArray(A, e + 3 * i); + return A + } + }), + Object.assign(As, { + getBasisAt: function (A, e) { + var t = A.x, + i = A.y, + o = A.z; + e[0] = .282095, + e[1] = .488603 * i, + e[2] = .488603 * o, + e[3] = .488603 * t, + e[4] = 1.092548 * t * i, + e[5] = 1.092548 * i * o, + e[6] = .315392 * (3 * o * o - 1), + e[7] = 1.092548 * t * o, + e[8] = .546274 * (t * t - i * i) + } + }), + es.prototype = Object.assign(Object.create(xa.prototype), { + constructor: es, + isLightProbe: !0, + copy: function (A) { + return xa.prototype.copy.call(this, A), + this.sh.copy(A.sh), + this.intensity = A.intensity, + this + }, + toJSON: function (A) { + return xa.prototype.toJSON.call(this, A) + } + }), + ts.prototype = Object.assign(Object.create(es.prototype), { + constructor: ts, + isHemisphereLightProbe: !0, + copy: function (A) { + return es.prototype.copy.call(this, A), + this + }, + toJSON: function (A) { + return es.prototype.toJSON.call(this, A) + } + }), + is.prototype = Object.assign(Object.create(es.prototype), { + constructor: is, + isAmbientLightProbe: !0, + copy: function (A) { + return es.prototype.copy.call(this, A), + this + }, + toJSON: function (A) { + return es.prototype.toJSON.call(this, A) + } + }); + var os = new M, + ns = new M; + + function rs() { + this.type = "StereoCamera", + this.aspect = 1, + this.eyeSep = .064, + this.cameraL = new je, + this.cameraL.layers.enable(1), + this.cameraL.matrixAutoUpdate = !1, + this.cameraR = new je, + this.cameraR.layers.enable(2), + this.cameraR.matrixAutoUpdate = !1, + this._cache = { + focus: null, + fov: null, + aspect: null, + near: null, + far: null, + zoom: null, + eyeSep: null + } + } + + function as(A) { + this.autoStart = void 0 === A || A, + this.startTime = 0, + this.oldTime = 0, + this.elapsedTime = 0, + this.running = !1 + } + Object.assign(rs.prototype, { + update: function (A) { + var e = this._cache; + if (e.focus !== A.focus || e.fov !== A.fov || e.aspect !== A.aspect * this.aspect || e.near !== A.near || e.far !== A.far || e.zoom !== A.zoom || e.eyeSep !== this.eyeSep) { + e.focus = A.focus, + e.fov = A.fov, + e.aspect = A.aspect * this.aspect, + e.near = A.near, + e.far = A.far, + e.zoom = A.zoom, + e.eyeSep = this.eyeSep; + var t, i, o = A.projectionMatrix.clone(), + n = e.eyeSep / 2, + r = n * e.near / e.focus, + s = e.near * Math.tan(a.DEG2RAD * e.fov * .5) / e.zoom; + ns.elements[12] = -n, + os.elements[12] = n, + o.elements[0] = 2 * e.near / ((i = s * e.aspect + r) - (t = -s * e.aspect + r)), + o.elements[8] = (i + t) / (i - t), + this.cameraL.projectionMatrix.copy(o), + o.elements[0] = 2 * e.near / ((i = s * e.aspect - r) - (t = -s * e.aspect - r)), + o.elements[8] = (i + t) / (i - t), + this.cameraR.projectionMatrix.copy(o) + } + this.cameraL.matrixWorld.copy(A.matrixWorld).multiply(ns), + this.cameraR.matrixWorld.copy(A.matrixWorld).multiply(os) + } + }), + Object.assign(as.prototype, { + start: function () { + this.startTime = ("undefined" == typeof performance ? Date : performance).now(), + this.oldTime = this.startTime, + this.elapsedTime = 0, + this.running = !0 + }, + stop: function () { + this.getElapsedTime(), + this.running = !1, + this.autoStart = !1 + }, + getElapsedTime: function () { + return this.getDelta(), + this.elapsedTime + }, + getDelta: function () { + var A = 0; + if (this.autoStart && !this.running) + return this.start(), + 0; + if (this.running) { + var e = ("undefined" == typeof performance ? Date : performance).now(); + A = (e - this.oldTime) / 1e3, + this.oldTime = e, + this.elapsedTime += A + } + return A + } + }); + var ss = new y, + ls = new f, + cs = new y, + hs = new y; + + function ds() { + H.call(this), + this.type = "AudioListener", + this.context = _a.getContext(), + this.gain = this.context.createGain(), + this.gain.connect(this.context.destination), + this.filter = null, + this.timeDelta = 0, + this._clock = new as + } + + function ps(A) { + H.call(this), + this.type = "Audio", + this.listener = A, + this.context = A.context, + this.gain = this.context.createGain(), + this.gain.connect(A.getInput()), + this.autoplay = !1, + this.buffer = null, + this.detune = 0, + this.loop = !1, + this.loopStart = 0, + this.loopEnd = 0, + this.offset = 0, + this.duration = void 0, + this.playbackRate = 1, + this.isPlaying = !1, + this.hasPlaybackControl = !0, + this.sourceType = "empty", + this._startedAt = 0, + this._pausedAt = 0, + this.filters = [] + } + ds.prototype = Object.assign(Object.create(H.prototype), { + constructor: ds, + getInput: function () { + return this.gain + }, + removeFilter: function () { + return null !== this.filter && (this.gain.disconnect(this.filter), + this.filter.disconnect(this.context.destination), + this.gain.connect(this.context.destination), + this.filter = null), + this + }, + getFilter: function () { + return this.filter + }, + setFilter: function (A) { + return null !== this.filter ? (this.gain.disconnect(this.filter), + this.filter.disconnect(this.context.destination)) : this.gain.disconnect(this.context.destination), + this.filter = A, + this.gain.connect(this.filter), + this.filter.connect(this.context.destination), + this + }, + getMasterVolume: function () { + return this.gain.gain.value + }, + setMasterVolume: function (A) { + return this.gain.gain.setTargetAtTime(A, this.context.currentTime, .01), + this + }, + updateMatrixWorld: function (A) { + H.prototype.updateMatrixWorld.call(this, A); + var e = this.context.listener, + t = this.up; + if (this.timeDelta = this._clock.getDelta(), + this.matrixWorld.decompose(ss, ls, cs), + hs.set(0, 0, -1).applyQuaternion(ls), + e.positionX) { + var i = this.context.currentTime + this.timeDelta; + e.positionX.linearRampToValueAtTime(ss.x, i), + e.positionY.linearRampToValueAtTime(ss.y, i), + e.positionZ.linearRampToValueAtTime(ss.z, i), + e.forwardX.linearRampToValueAtTime(hs.x, i), + e.forwardY.linearRampToValueAtTime(hs.y, i), + e.forwardZ.linearRampToValueAtTime(hs.z, i), + e.upX.linearRampToValueAtTime(t.x, i), + e.upY.linearRampToValueAtTime(t.y, i), + e.upZ.linearRampToValueAtTime(t.z, i) + } else + e.setPosition(ss.x, ss.y, ss.z), + e.setOrientation(hs.x, hs.y, hs.z, t.x, t.y, t.z) + } + }), + ps.prototype = Object.assign(Object.create(H.prototype), { + constructor: ps, + getOutput: function () { + return this.gain + }, + setNodeSource: function (A) { + return this.hasPlaybackControl = !1, + this.sourceType = "audioNode", + this.source = A, + this.connect(), + this + }, + setMediaElementSource: function (A) { + return this.hasPlaybackControl = !1, + this.sourceType = "mediaNode", + this.source = this.context.createMediaElementSource(A), + this.connect(), + this + }, + setMediaStreamSource: function (A) { + return this.hasPlaybackControl = !1, + this.sourceType = "mediaStreamNode", + this.source = this.context.createMediaStreamSource(A), + this.connect(), + this + }, + setBuffer: function (A) { + return this.buffer = A, + this.sourceType = "buffer", + this.autoplay && this.play(), + this + }, + play: function (A) { + if (void 0 === A && (A = 0), + !0 !== this.isPlaying) { + if (!1 !== this.hasPlaybackControl) { + this._startedAt = this.context.currentTime + A; + var e = this.context.createBufferSource(); + return e.buffer = this.buffer, + e.loop = this.loop, + e.loopStart = this.loopStart, + e.loopEnd = this.loopEnd, + e.onended = this.onEnded.bind(this), + e.start(this._startedAt, this._pausedAt + this.offset, this.duration), + this.isPlaying = !0, + this.source = e, + this.setDetune(this.detune), + this.setPlaybackRate(this.playbackRate), + this.connect() + } + console.warn("THREE.Audio: this Audio has no playback control.") + } else + console.warn("THREE.Audio: Audio is already playing.") + }, + pause: function () { + if (!1 !== this.hasPlaybackControl) + return !0 === this.isPlaying && (this._pausedAt += Math.max(this.context.currentTime - this._startedAt, 0) * this.playbackRate, + this.source.stop(), + this.source.onended = null, + this.isPlaying = !1), + this; + console.warn("THREE.Audio: this Audio has no playback control.") + }, + stop: function () { + if (!1 !== this.hasPlaybackControl) + return this._pausedAt = 0, + this.source.stop(), + this.source.onended = null, + this.isPlaying = !1, + this; + console.warn("THREE.Audio: this Audio has no playback control.") + }, + connect: function () { + if (this.filters.length > 0) { + this.source.connect(this.filters[0]); + for (var A = 1, e = this.filters.length; e > A; A++) + this.filters[A - 1].connect(this.filters[A]); + this.filters[this.filters.length - 1].connect(this.getOutput()) + } else + this.source.connect(this.getOutput()); + return this + }, + disconnect: function () { + if (this.filters.length > 0) { + this.source.disconnect(this.filters[0]); + for (var A = 1, e = this.filters.length; e > A; A++) + this.filters[A - 1].disconnect(this.filters[A]); + this.filters[this.filters.length - 1].disconnect(this.getOutput()) + } else + this.source.disconnect(this.getOutput()); + return this + }, + getFilters: function () { + return this.filters + }, + setFilters: function (A) { + return A || (A = []), + !0 === this.isPlaying ? (this.disconnect(), + this.filters = A, + this.connect()) : this.filters = A, + this + }, + setDetune: function (A) { + if (this.detune = A, + void 0 !== this.source.detune) + return !0 === this.isPlaying && this.source.detune.setTargetAtTime(this.detune, this.context.currentTime, .01), + this + }, + getDetune: function () { + return this.detune + }, + getFilter: function () { + return this.getFilters()[0] + }, + setFilter: function (A) { + return this.setFilters(A ? [A] : []) + }, + setPlaybackRate: function (A) { + if (!1 !== this.hasPlaybackControl) + return this.playbackRate = A, + !0 === this.isPlaying && this.source.playbackRate.setTargetAtTime(this.playbackRate, this.context.currentTime, .01), + this; + console.warn("THREE.Audio: this Audio has no playback control.") + }, + getPlaybackRate: function () { + return this.playbackRate + }, + onEnded: function () { + this.isPlaying = !1 + }, + getLoop: function () { + return !1 === this.hasPlaybackControl ? (console.warn("THREE.Audio: this Audio has no playback control."), + !1) : this.loop + }, + setLoop: function (A) { + if (!1 !== this.hasPlaybackControl) + return this.loop = A, + !0 === this.isPlaying && (this.source.loop = this.loop), + this; + console.warn("THREE.Audio: this Audio has no playback control.") + }, + setLoopStart: function (A) { + return this.loopStart = A, + this + }, + setLoopEnd: function (A) { + return this.loopEnd = A, + this + }, + getVolume: function () { + return this.gain.gain.value + }, + setVolume: function (A) { + return this.gain.gain.setTargetAtTime(A, this.context.currentTime, .01), + this + } + }); + var gs = new y, + us = new f, + fs = new y, + ms = new y; + + function Cs(A) { + ps.call(this, A), + this.panner = this.context.createPanner(), + this.panner.panningModel = "HRTF", + this.panner.connect(this.gain) + } + + function ys(A, e) { + this.analyser = A.context.createAnalyser(), + this.analyser.fftSize = void 0 !== e ? e : 2048, + this.data = new Uint8Array(this.analyser.frequencyBinCount), + A.getOutput().connect(this.analyser) + } + + function vs(A, e, t) { + this.binding = A, + this.valueSize = t; + var i, o = Float64Array; + switch (e) { + case "quaternion": + i = this._slerp; + break; + case "string": + case "bool": + o = Array, + i = this._select; + break; + default: + i = this._lerp + } + this.buffer = new o(4 * t), + this._mixBufferRegion = i, + this.cumulativeWeight = 0, + this.useCount = 0, + this.referenceCount = 0 + } + Cs.prototype = Object.assign(Object.create(ps.prototype), { + constructor: Cs, + getOutput: function () { + return this.panner + }, + getRefDistance: function () { + return this.panner.refDistance + }, + setRefDistance: function (A) { + return this.panner.refDistance = A, + this + }, + getRolloffFactor: function () { + return this.panner.rolloffFactor + }, + setRolloffFactor: function (A) { + return this.panner.rolloffFactor = A, + this + }, + getDistanceModel: function () { + return this.panner.distanceModel + }, + setDistanceModel: function (A) { + return this.panner.distanceModel = A, + this + }, + getMaxDistance: function () { + return this.panner.maxDistance + }, + setMaxDistance: function (A) { + return this.panner.maxDistance = A, + this + }, + setDirectionalCone: function (A, e, t) { + return this.panner.coneInnerAngle = A, + this.panner.coneOuterAngle = e, + this.panner.coneOuterGain = t, + this + }, + updateMatrixWorld: function (A) { + if (H.prototype.updateMatrixWorld.call(this, A), + !0 !== this.hasPlaybackControl || !1 !== this.isPlaying) { + this.matrixWorld.decompose(gs, us, fs), + ms.set(0, 0, 1).applyQuaternion(us); + var e = this.panner; + if (e.positionX) { + var t = this.context.currentTime + this.listener.timeDelta; + e.positionX.linearRampToValueAtTime(gs.x, t), + e.positionY.linearRampToValueAtTime(gs.y, t), + e.positionZ.linearRampToValueAtTime(gs.z, t), + e.orientationX.linearRampToValueAtTime(ms.x, t), + e.orientationY.linearRampToValueAtTime(ms.y, t), + e.orientationZ.linearRampToValueAtTime(ms.z, t) + } else + e.setPosition(gs.x, gs.y, gs.z), + e.setOrientation(ms.x, ms.y, ms.z) + } + } + }), + Object.assign(ys.prototype, { + getFrequencyData: function () { + return this.analyser.getByteFrequencyData(this.data), + this.data + }, + getAverageFrequency: function () { + for (var A = 0, e = this.getFrequencyData(), t = 0; e.length > t; t++) + A += e[t]; + return A / e.length + } + }), + Object.assign(vs.prototype, { + accumulate: function (A, e) { + var t = this.buffer, + i = this.valueSize, + o = A * i + i, + n = this.cumulativeWeight; + if (0 === n) { + for (var r = 0; r !== i; ++r) + t[o + r] = t[r]; + n = e + } else { + this._mixBufferRegion(t, o, 0, e / (n += e), i) + } + this.cumulativeWeight = n + }, + apply: function (A) { + var e = this.valueSize, + t = this.buffer, + i = A * e + e, + o = this.cumulativeWeight, + n = this.binding; + (this.cumulativeWeight = 0, + 1 > o) && this._mixBufferRegion(t, i, 3 * e, 1 - o, e); + for (var r = e, a = e + e; r !== a; ++r) + if (t[r] !== t[r + e]) { + n.setValue(t, i); + break + } + }, + saveOriginalState: function () { + var A = this.buffer, + e = this.valueSize, + t = 3 * e; + this.binding.getValue(A, t); + for (var i = e, o = t; i !== o; ++i) + A[i] = A[t + i % e]; + this.cumulativeWeight = 0 + }, + restoreOriginalState: function () { + this.binding.setValue(this.buffer, 3 * this.valueSize) + }, + _select: function (A, e, t, i, o) { + if (i >= .5) + for (var n = 0; n !== o; ++n) + A[e + n] = A[t + n] + }, + _slerp: function (A, e, t, i) { + f.slerpFlat(A, e, A, e, A, t, i) + }, + _lerp: function (A, e, t, i, o) { + for (var n = 1 - i, r = 0; r !== o; ++r) { + var a = e + r; + A[a] = A[a] * n + A[t + r] * i + } + } + }); + var Is = new RegExp("[\\[\\]\\.:\\/]", "g"), + Es = "[^" + "\\[\\]\\.:\\/".replace("\\.", "") + "]", + Bs = /((?:WC+[\/:])*)/.source.replace("WC", "[^\\[\\]\\.:\\/]"), + xs = /(WCOD+)?/.source.replace("WCOD", Es), + Ss = /(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC", "[^\\[\\]\\.:\\/]"), + ws = /\.(WC+)(?:\[(.+)\])?/.source.replace("WC", "[^\\[\\]\\.:\\/]"), + Ms = new RegExp("^" + Bs + xs + Ss + ws + "$"), + bs = ["material", "materials", "bones"]; + + function Us(A, e, t) { + var i = t || Fs.parseTrackName(e); + this._targetGroup = A, + this._bindings = A.subscribe_(e, i) + } + + function Fs(A, e, t) { + this.path = e, + this.parsedPath = t || Fs.parseTrackName(e), + this.node = Fs.findNode(A, this.parsedPath.nodeName) || A, + this.rootNode = A + } + + function Ks() { + this.uuid = a.generateUUID(), + this._objects = Array.prototype.slice.call(arguments), + this.nCachedObjects_ = 0; + var A = {}; + this._indicesByUUID = A; + for (var e = 0, t = arguments.length; e !== t; ++e) + A[arguments[e].uuid] = e; + this._paths = [], + this._parsedPaths = [], + this._bindings = [], + this._bindingsIndicesByPath = {}; + var i = this; + this.stats = { + objects: { + get total() { + return i._objects.length + }, + get inUse() { + return this.total - i.nCachedObjects_ + } + }, + get bindingsPerObject() { + return i._bindings.length + } + } + } + + function Qs(A, e, t) { + this._mixer = A, + this._clip = e, + this._localRoot = t || null; + for (var i = e.tracks, o = i.length, n = new Array(o), r = { + endingStart: 2400, + endingEnd: 2400 + }, a = 0; a !== o; ++a) { + var s = i[a].createInterpolant(null); + n[a] = s, + s.settings = r + } + this._interpolantSettings = r, + this._interpolants = n, + this._propertyBindings = new Array(o), + this._cacheIndex = null, + this._byClipCacheIndex = null, + this._timeScaleInterpolant = null, + this._weightInterpolant = null, + this.loop = 2201, + this._loopCount = -1, + this._startTime = null, + this.time = 0, + this.timeScale = 1, + this._effectiveTimeScale = 1, + this.weight = 1, + this._effectiveWeight = 1, + this.repetitions = 1 / 0, + this.paused = !1, + this.enabled = !0, + this.clampWhenFinished = !1, + this.zeroSlopeAtStart = !0, + this.zeroSlopeAtEnd = !0 + } + + function Rs(A) { + this._root = A, + this._initMemoryManager(), + this._accuIndex = 0, + this.time = 0, + this.timeScale = 1 + } + + function Ts(A) { + "string" == typeof A && (console.warn("THREE.Uniform: Type parameter is no longer needed."), + A = arguments[1]), + this.value = A + } + + function ks(A, e, t) { + to.call(this, A, e), + this.meshPerAttribute = t || 1 + } + + function Ds(A, e, t, i) { + this.ray = new CA(A, e), + this.near = t || 0, + this.far = i || 1 / 0, + this.camera = null, + this.layers = new K, + this.params = { + Mesh: {}, + Line: { + threshold: 1 + }, + LOD: {}, + Points: { + threshold: 1 + }, + Sprite: {} + }, + Object.defineProperties(this.params, { + PointCloud: { + get: function () { + return console.warn("THREE.Raycaster: params.PointCloud has been renamed to params.Points."), + this.Points + } + } + }) + } + + function Ls(A, e) { + return A.distance - e.distance + } + + function Ns(A, e, t, i) { + if (A.layers.test(e.layers) && A.raycast(e, t), + !0 === i) + for (var o = A.children, n = 0, r = o.length; r > n; n++) + Ns(o[n], e, t, !0) + } + + function Os(A, e, t) { + return this.radius = void 0 !== A ? A : 1, + this.phi = void 0 !== e ? e : 0, + this.theta = void 0 !== t ? t : 0, + this + } + + function Vs(A, e, t) { + return this.radius = void 0 !== A ? A : 1, + this.theta = void 0 !== e ? e : 0, + this.y = void 0 !== t ? t : 0, + this + } + Object.assign(Us.prototype, { + getValue: function (A, e) { + this.bind(); + var t = this._bindings[this._targetGroup.nCachedObjects_]; + void 0 !== t && t.getValue(A, e) + }, + setValue: function (A, e) { + for (var t = this._bindings, i = this._targetGroup.nCachedObjects_, o = t.length; i !== o; ++i) + t[i].setValue(A, e) + }, + bind: function () { + for (var A = this._bindings, e = this._targetGroup.nCachedObjects_, t = A.length; e !== t; ++e) + A[e].bind() + }, + unbind: function () { + for (var A = this._bindings, e = this._targetGroup.nCachedObjects_, t = A.length; e !== t; ++e) + A[e].unbind() + } + }), + Object.assign(Fs, { + Composite: Us, + create: function (A, e, t) { + return A && A.isAnimationObjectGroup ? new Fs.Composite(A, e, t) : new Fs(A, e, t) + }, + sanitizeNodeName: function (A) { + return A.replace(/\s/g, "_").replace(Is, "") + }, + parseTrackName: function (A) { + var e = Ms.exec(A); + if (!e) + throw new Error("PropertyBinding: Cannot parse trackName: " + A); + var t = { + nodeName: e[2], + objectName: e[3], + objectIndex: e[4], + propertyName: e[5], + propertyIndex: e[6] + }, + i = t.nodeName && t.nodeName.lastIndexOf("."); + if (void 0 !== i && -1 !== i) { + var o = t.nodeName.substring(i + 1); - + 1 !== bs.indexOf(o) && (t.nodeName = t.nodeName.substring(0, i), + t.objectName = o) + } + if (null === t.propertyName || 0 === t.propertyName.length) + throw new Error("PropertyBinding: can not parse propertyName from trackName: " + A); + return t + }, + findNode: function (A, e) { + if (!e || "" === e || "." === e || -1 === e || e === A.name || e === A.uuid) + return A; + if (A.skeleton) { + var t = A.skeleton.getBoneByName(e); + if (void 0 !== t) + return t + } + if (A.children) { + var i = function (A) { + for (var t = 0; A.length > t; t++) { + var o = A[t]; + if (o.name === e || o.uuid === e) + return o; + var n = i(o.children); + if (n) + return n + } + return null + }, + o = i(A.children); + if (o) + return o + } + return null + } + }), + Object.assign(Fs.prototype, { + _getValue_unavailable: function () {}, + _setValue_unavailable: function () {}, + BindingType: { + Direct: 0, + EntireArray: 1, + ArrayElement: 2, + HasFromToArray: 3 + }, + Versioning: { + None: 0, + NeedsUpdate: 1, + MatrixWorldNeedsUpdate: 2 + }, + GetterByBindingType: [function (A, e) { + A[e] = this.node[this.propertyName] + }, function (A, e) { + for (var t = this.resolvedProperty, i = 0, o = t.length; i !== o; ++i) + A[e++] = t[i] + }, function (A, e) { + A[e] = this.resolvedProperty[this.propertyIndex] + }, function (A, e) { + this.resolvedProperty.toArray(A, e) + }], + SetterByBindingTypeAndVersioning: [ + [function (A, e) { + this.targetObject[this.propertyName] = A[e] + }, function (A, e) { + this.targetObject[this.propertyName] = A[e], + this.targetObject.needsUpdate = !0 + }, function (A, e) { + this.targetObject[this.propertyName] = A[e], + this.targetObject.matrixWorldNeedsUpdate = !0 + }], + [function (A, e) { + for (var t = this.resolvedProperty, i = 0, o = t.length; i !== o; ++i) + t[i] = A[e++] + }, function (A, e) { + for (var t = this.resolvedProperty, i = 0, o = t.length; i !== o; ++i) + t[i] = A[e++]; + this.targetObject.needsUpdate = !0 + }, function (A, e) { + for (var t = this.resolvedProperty, i = 0, o = t.length; i !== o; ++i) + t[i] = A[e++]; + this.targetObject.matrixWorldNeedsUpdate = !0 + }], + [function (A, e) { + this.resolvedProperty[this.propertyIndex] = A[e] + }, function (A, e) { + this.resolvedProperty[this.propertyIndex] = A[e], + this.targetObject.needsUpdate = !0 + }, function (A, e) { + this.resolvedProperty[this.propertyIndex] = A[e], + this.targetObject.matrixWorldNeedsUpdate = !0 + }], + [function (A, e) { + this.resolvedProperty.fromArray(A, e) + }, function (A, e) { + this.resolvedProperty.fromArray(A, e), + this.targetObject.needsUpdate = !0 + }, function (A, e) { + this.resolvedProperty.fromArray(A, e), + this.targetObject.matrixWorldNeedsUpdate = !0 + }] + ], + getValue: function (A, e) { + this.bind(), + this.getValue(A, e) + }, + setValue: function (A, e) { + this.bind(), + this.setValue(A, e) + }, + bind: function () { + var A = this.node, + e = this.parsedPath, + t = e.objectName, + i = e.propertyName, + o = e.propertyIndex; + if (A || (A = Fs.findNode(this.rootNode, e.nodeName) || this.rootNode, + this.node = A), + this.getValue = this._getValue_unavailable, + this.setValue = this._setValue_unavailable, + A) { + if (t) { + var n = e.objectIndex; + switch (t) { + case "materials": + if (!A.material) + return void console.error("THREE.PropertyBinding: Can not bind to material as node does not have a material.", this); + if (!A.material.materials) + return void console.error("THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.", this); + A = A.material.materials; + break; + case "bones": + if (!A.skeleton) + return void console.error("THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.", this); + A = A.skeleton.bones; + for (var r = 0; A.length > r; r++) + if (A[r].name === n) { + n = r; + break + } + break; + default: + if (void 0 === A[t]) + return void console.error("THREE.PropertyBinding: Can not bind to objectName of node undefined.", this); + A = A[t] + } + if (void 0 !== n) { + if (void 0 === A[n]) + return void console.error("THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.", this, A); + A = A[n] + } + } + var a = A[i]; + if (void 0 !== a) { + var s = this.Versioning.None; + this.targetObject = A, + void 0 !== A.needsUpdate ? s = this.Versioning.NeedsUpdate : void 0 !== A.matrixWorldNeedsUpdate && (s = this.Versioning.MatrixWorldNeedsUpdate); + var l = this.BindingType.Direct; + if (void 0 !== o) { + if ("morphTargetInfluences" === i) { + if (!A.geometry) + return void console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.", this); + if (A.geometry.isBufferGeometry) { + if (!A.geometry.morphAttributes) + return void console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.", this); + for (r = 0; this.node.geometry.morphAttributes.position.length > r; r++) + if (A.geometry.morphAttributes.position[r].name === o) { + o = r; + break + } + } else { + if (!A.geometry.morphTargets) + return void console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphTargets.", this); + for (r = 0; this.node.geometry.morphTargets.length > r; r++) + if (A.geometry.morphTargets[r].name === o) { + o = r; + break + } + } + } + l = this.BindingType.ArrayElement, + this.resolvedProperty = a, + this.propertyIndex = o + } else + void 0 !== a.fromArray && void 0 !== a.toArray ? (l = this.BindingType.HasFromToArray, + this.resolvedProperty = a) : Array.isArray(a) ? (l = this.BindingType.EntireArray, + this.resolvedProperty = a) : this.propertyName = i; + this.getValue = this.GetterByBindingType[l], + this.setValue = this.SetterByBindingTypeAndVersioning[l][s] + } else { + console.error("THREE.PropertyBinding: Trying to update property for track: " + e.nodeName + "." + i + " but it wasn't found.", A) + } + } else + console.error("THREE.PropertyBinding: Trying to update node for track: " + this.path + " but it wasn't found.") + }, + unbind: function () { + this.node = null, + this.getValue = this._getValue_unbound, + this.setValue = this._setValue_unbound + } + }), + Object.assign(Fs.prototype, { + _getValue_unbound: Fs.prototype.getValue, + _setValue_unbound: Fs.prototype.setValue + }), + Object.assign(Ks.prototype, { + isAnimationObjectGroup: !0, + add: function () { + for (var A = this._objects, e = A.length, t = this.nCachedObjects_, i = this._indicesByUUID, o = this._paths, n = this._parsedPaths, r = this._bindings, a = r.length, s = void 0, l = 0, c = arguments.length; l !== c; ++l) { + var h = arguments[l], + d = h.uuid, + p = i[d]; + if (void 0 === p) { + p = e++, + i[d] = p, + A.push(h); + for (var g = 0, u = a; g !== u; ++g) + r[g].push(new Fs(h, o[g], n[g])) + } else if (t > p) { + s = A[p]; + var f = --t, + m = A[f]; + i[m.uuid] = p, + A[p] = m, + i[d] = f, + A[f] = h; + for (g = 0, + u = a; g !== u; ++g) { + var C = r[g], + y = C[f], + v = C[p]; + C[p] = y, + void 0 === v && (v = new Fs(h, o[g], n[g])), + C[f] = v + } + } else + A[p] !== s && console.error("THREE.AnimationObjectGroup: Different objects with the same UUID detected. Clean the caches or recreate your infrastructure when reloading scenes.") + } + this.nCachedObjects_ = t + }, + remove: function () { + for (var A = this._objects, e = this.nCachedObjects_, t = this._indicesByUUID, i = this._bindings, o = i.length, n = 0, r = arguments.length; n !== r; ++n) { + var a = arguments[n], + s = a.uuid, + l = t[s]; + if (void 0 !== l && l >= e) { + var c = e++, + h = A[c]; + t[h.uuid] = l, + A[l] = h, + t[s] = c, + A[c] = a; + for (var d = 0, p = o; d !== p; ++d) { + var g = i[d], + u = g[c], + f = g[l]; + g[l] = u, + g[c] = f + } + } + } + this.nCachedObjects_ = e + }, + uncache: function () { + for (var A = this._objects, e = A.length, t = this.nCachedObjects_, i = this._indicesByUUID, o = this._bindings, n = o.length, r = 0, a = arguments.length; r !== a; ++r) { + var s = arguments[r], + l = s.uuid, + c = i[l]; + if (void 0 !== c) + if (delete i[l], + t > c) { + var h = --t, + d = A[h], + p = A[C = --e]; + i[d.uuid] = c, + A[c] = d, + i[p.uuid] = h, + A[h] = p, + A.pop(); + for (var g = 0, u = n; g !== u; ++g) { + var f = (y = o[g])[h], + m = y[C]; + y[c] = f, + y[h] = m, + y.pop() + } + } else { + var C; + i[(p = A[C = --e]).uuid] = c, + A[c] = p, + A.pop(); + for (g = 0, + u = n; g !== u; ++g) { + var y; + (y = o[g])[c] = y[C], + y.pop() + } + } + } + this.nCachedObjects_ = t + }, + subscribe_: function (A, e) { + var t = this._bindingsIndicesByPath, + i = t[A], + o = this._bindings; + if (void 0 !== i) + return o[i]; + var n = this._paths, + r = this._parsedPaths, + a = this._objects, + s = this.nCachedObjects_, + l = new Array(a.length); + t[A] = i = o.length, + n.push(A), + r.push(e), + o.push(l); + for (var c = s, h = a.length; c !== h; ++c) { + l[c] = new Fs(a[c], A, e) + } + return l + }, + unsubscribe_: function (A) { + var e = this._bindingsIndicesByPath, + t = e[A]; + if (void 0 !== t) { + var i = this._paths, + o = this._parsedPaths, + n = this._bindings, + r = n.length - 1, + a = n[r]; + e[A[r]] = t, + n[t] = a, + n.pop(), + o[t] = o[r], + o.pop(), + i[t] = i[r], + i.pop() + } + } + }), + Object.assign(Qs.prototype, { + play: function () { + return this._mixer._activateAction(this), + this + }, + stop: function () { + return this._mixer._deactivateAction(this), + this.reset() + }, + reset: function () { + return this.paused = !1, + this.enabled = !0, + this.time = 0, + this._loopCount = -1, + this._startTime = null, + this.stopFading().stopWarping() + }, + isRunning: function () { + return this.enabled && !this.paused && 0 !== this.timeScale && null === this._startTime && this._mixer._isActiveAction(this) + }, + isScheduled: function () { + return this._mixer._isActiveAction(this) + }, + startAt: function (A) { + return this._startTime = A, + this + }, + setLoop: function (A, e) { + return this.loop = A, + this.repetitions = e, + this + }, + setEffectiveWeight: function (A) { + return this.weight = A, + this._effectiveWeight = this.enabled ? A : 0, + this.stopFading() + }, + getEffectiveWeight: function () { + return this._effectiveWeight + }, + fadeIn: function (A) { + return this._scheduleFading(A, 0, 1) + }, + fadeOut: function (A) { + return this._scheduleFading(A, 1, 0) + }, + crossFadeFrom: function (A, e, t) { + if (A.fadeOut(e), + this.fadeIn(e), + t) { + var i = this._clip.duration, + o = A._clip.duration, + n = i / o; + A.warp(1, o / i, e), + this.warp(n, 1, e) + } + return this + }, + crossFadeTo: function (A, e, t) { + return A.crossFadeFrom(this, e, t) + }, + stopFading: function () { + var A = this._weightInterpolant; + return null !== A && (this._weightInterpolant = null, + this._mixer._takeBackControlInterpolant(A)), + this + }, + setEffectiveTimeScale: function (A) { + return this.timeScale = A, + this._effectiveTimeScale = this.paused ? 0 : A, + this.stopWarping() + }, + getEffectiveTimeScale: function () { + return this._effectiveTimeScale + }, + setDuration: function (A) { + return this.timeScale = this._clip.duration / A, + this.stopWarping() + }, + syncWith: function (A) { + return this.time = A.time, + this.timeScale = A.timeScale, + this.stopWarping() + }, + halt: function (A) { + return this.warp(this._effectiveTimeScale, 0, A) + }, + warp: function (A, e, t) { + var i = this._mixer, + o = i.time, + n = this._timeScaleInterpolant, + r = this.timeScale; + null === n && (n = i._lendControlInterpolant(), + this._timeScaleInterpolant = n); + var a = n.parameterPositions, + s = n.sampleValues; + return a[0] = o, + a[1] = o + t, + s[0] = A / r, + s[1] = e / r, + this + }, + stopWarping: function () { + var A = this._timeScaleInterpolant; + return null !== A && (this._timeScaleInterpolant = null, + this._mixer._takeBackControlInterpolant(A)), + this + }, + getMixer: function () { + return this._mixer + }, + getClip: function () { + return this._clip + }, + getRoot: function () { + return this._localRoot || this._mixer._root + }, + _update: function (A, e, t, i) { + if (this.enabled) { + var o = this._startTime; + if (null !== o) { + var n = (A - o) * t; + if (0 > n || 0 === t) + return; + this._startTime = null, + e = t * n + } + e *= this._updateTimeScale(A); + var r = this._updateTime(e), + a = this._updateWeight(A); + if (a > 0) + for (var s = this._interpolants, l = this._propertyBindings, c = 0, h = s.length; c !== h; ++c) + s[c].evaluate(r), + l[c].accumulate(i, a) + } else + this._updateWeight(A) + }, + _updateWeight: function (A) { + var e = 0; + if (this.enabled) { + e = this.weight; + var t = this._weightInterpolant; + if (null !== t) { + var i = t.evaluate(A)[0]; + e *= i, + A > t.parameterPositions[1] && (this.stopFading(), + 0 === i && (this.enabled = !1)) + } + } + return this._effectiveWeight = e, + e + }, + _updateTimeScale: function (A) { + var e = 0; + if (!this.paused) { + e = this.timeScale; + var t = this._timeScaleInterpolant; + if (null !== t) + e *= t.evaluate(A)[0], + A > t.parameterPositions[1] && (this.stopWarping(), + 0 === e ? this.paused = !0 : this.timeScale = e) + } + return this._effectiveTimeScale = e, + e + }, + _updateTime: function (A) { + var e = this.time + A, + t = this._clip.duration, + i = this.loop, + o = this._loopCount, + n = 2202 === i; + if (0 === A) + return -1 === o ? e : n && 1 == (1 & o) ? t - e : e; + if (2200 === i) { + -1 === o && (this._loopCount = 0, + this._setEndings(!0, !0, !1)); + A: { + if (e < t) { + if (e >= 0) { + this.time = e; + break A + } + e = 0 + } else + e = t; + this.clampWhenFinished ? this.paused = !0 : this.enabled = !1, + this.time = e, + this._mixer.dispatchEvent({ + type: "finished", + action: this, + direction: 0 > A ? -1 : 1 + }) + } + } else { + if (-1 === o && (0 > A ? this._setEndings(0 === this.repetitions, !0, n) : (o = 0, + this._setEndings(!0, 0 === this.repetitions, n))), + e >= t || 0 > e) { + var r = Math.floor(e / t); + e -= t * r, + o += Math.abs(r); + var a = this.repetitions - o; + if (0 < a) { + if (1 === a) { + var s = 0 > A; + this._setEndings(s, !s, n) + } else + this._setEndings(!1, !1, n); + this._loopCount = o, + this.time = e, + this._mixer.dispatchEvent({ + type: "loop", + action: this, + loopDelta: r + }) + } else + this.clampWhenFinished ? this.paused = !0 : this.enabled = !1, + this.time = e = A > 0 ? t : 0, + this._mixer.dispatchEvent({ + type: "finished", + action: this, + direction: A > 0 ? 1 : -1 + }) + } else + this.time = e; + if (n && 1 == (1 & o)) + return t - e + } + return e + }, + _setEndings: function (A, e, t) { + var i = this._interpolantSettings; + t ? (i.endingStart = 2401, + i.endingEnd = 2401) : (i.endingStart = A ? this.zeroSlopeAtStart ? 2401 : 2400 : 2402, + i.endingEnd = e ? this.zeroSlopeAtEnd ? 2401 : 2400 : 2402) + }, + _scheduleFading: function (A, e, t) { + var i = this._mixer, + o = i.time, + n = this._weightInterpolant; + null === n && (n = i._lendControlInterpolant(), + this._weightInterpolant = n); + var r = n.parameterPositions, + a = n.sampleValues; + return r[0] = o, + a[0] = e, + r[1] = o + A, + a[1] = t, + this + } + }), + Rs.prototype = Object.assign(Object.create(i.prototype), { + constructor: Rs, + _bindAction: function (A, e) { + var t = A._localRoot || this._root, + i = A._clip.tracks, + o = i.length, + n = A._propertyBindings, + r = A._interpolants, + a = t.uuid, + s = this._bindingsByRootAndName, + l = s[a]; + void 0 === l && (s[a] = l = {}); + for (var c = 0; c !== o; ++c) { + var h = i[c], + d = h.name, + p = l[d]; + if (void 0 !== p) + n[c] = p; + else { + if (void 0 !== (p = n[c])) { + null === p._cacheIndex && (++p.referenceCount, + this._addInactiveBinding(p, a, d)); + continue + } + ++(p = new vs(Fs.create(t, d, e && e._propertyBindings[c].binding.parsedPath), h.ValueTypeName, h.getValueSize())).referenceCount, + this._addInactiveBinding(p, a, d), + n[c] = p + } + r[c].resultBuffer = p.buffer + } + }, + _activateAction: function (A) { + if (!this._isActiveAction(A)) { + if (null === A._cacheIndex) { + var e = (A._localRoot || this._root).uuid, + t = A._clip.uuid, + i = this._actionsByClip[t]; + this._bindAction(A, i && i.knownActions[0]), + this._addInactiveAction(A, t, e) + } + for (var o = A._propertyBindings, n = 0, r = o.length; n !== r; ++n) { + var a = o[n]; + 0 == a.useCount++ && (this._lendBinding(a), + a.saveOriginalState()) + } + this._lendAction(A) + } + }, + _deactivateAction: function (A) { + if (this._isActiveAction(A)) { + for (var e = A._propertyBindings, t = 0, i = e.length; t !== i; ++t) { + var o = e[t]; + 0 == --o.useCount && (o.restoreOriginalState(), + this._takeBackBinding(o)) + } + this._takeBackAction(A) + } + }, + _initMemoryManager: function () { + this._actions = [], + this._nActiveActions = 0, + this._actionsByClip = {}, + this._bindings = [], + this._nActiveBindings = 0, + this._bindingsByRootAndName = {}, + this._controlInterpolants = [], + this._nActiveControlInterpolants = 0; + var A = this; + this.stats = { + actions: { + get total() { + return A._actions.length + }, + get inUse() { + return A._nActiveActions + } + }, + bindings: { + get total() { + return A._bindings.length + }, + get inUse() { + return A._nActiveBindings + } + }, + controlInterpolants: { + get total() { + return A._controlInterpolants.length + }, + get inUse() { + return A._nActiveControlInterpolants + } + } + } + }, + _isActiveAction: function (A) { + var e = A._cacheIndex; + return null !== e && this._nActiveActions > e + }, + _addInactiveAction: function (A, e, t) { + var i = this._actions, + o = this._actionsByClip, + n = o[e]; + if (void 0 === n) + n = { + knownActions: [A], + actionByRoot: {} + }, + A._byClipCacheIndex = 0, + o[e] = n; + else { + var r = n.knownActions; + A._byClipCacheIndex = r.length, + r.push(A) + } + A._cacheIndex = i.length, + i.push(A), + n.actionByRoot[t] = A + }, + _removeInactiveAction: function (A) { + var e = this._actions, + t = e[e.length - 1], + i = A._cacheIndex; + t._cacheIndex = i, + e[i] = t, + e.pop(), + A._cacheIndex = null; + var o = A._clip.uuid, + n = this._actionsByClip, + r = n[o], + a = r.knownActions, + s = a[a.length - 1], + l = A._byClipCacheIndex; + s._byClipCacheIndex = l, + a[l] = s, + a.pop(), + A._byClipCacheIndex = null, + delete r.actionByRoot[(A._localRoot || this._root).uuid], + 0 === a.length && delete n[o], + this._removeInactiveBindingsForAction(A) + }, + _removeInactiveBindingsForAction: function (A) { + for (var e = A._propertyBindings, t = 0, i = e.length; t !== i; ++t) { + var o = e[t]; + 0 == --o.referenceCount && this._removeInactiveBinding(o) + } + }, + _lendAction: function (A) { + var e = this._actions, + t = A._cacheIndex, + i = this._nActiveActions++, + o = e[i]; + A._cacheIndex = i, + e[i] = A, + o._cacheIndex = t, + e[t] = o + }, + _takeBackAction: function (A) { + var e = this._actions, + t = A._cacheIndex, + i = --this._nActiveActions, + o = e[i]; + A._cacheIndex = i, + e[i] = A, + o._cacheIndex = t, + e[t] = o + }, + _addInactiveBinding: function (A, e, t) { + var i = this._bindingsByRootAndName, + o = i[e], + n = this._bindings; + void 0 === o && (i[e] = o = {}), + o[t] = A, + A._cacheIndex = n.length, + n.push(A) + }, + _removeInactiveBinding: function (A) { + var e = this._bindings, + t = A.binding, + i = t.rootNode.uuid, + o = t.path, + n = this._bindingsByRootAndName, + r = n[i], + a = e[e.length - 1], + s = A._cacheIndex; + a._cacheIndex = s, + e[s] = a, + e.pop(), + delete r[o], + 0 === Object.keys(r).length && delete n[i] + }, + _lendBinding: function (A) { + var e = this._bindings, + t = A._cacheIndex, + i = this._nActiveBindings++, + o = e[i]; + A._cacheIndex = i, + e[i] = A, + o._cacheIndex = t, + e[t] = o + }, + _takeBackBinding: function (A) { + var e = this._bindings, + t = A._cacheIndex, + i = --this._nActiveBindings, + o = e[i]; + A._cacheIndex = i, + e[i] = A, + o._cacheIndex = t, + e[t] = o + }, + _lendControlInterpolant: function () { + var A = this._controlInterpolants, + e = this._nActiveControlInterpolants++, + t = A[e]; + return void 0 === t && ((t = new Kr(new Float32Array(2), new Float32Array(2), 1, this._controlInterpolantsResultBuffer)).__cacheIndex = e, + A[e] = t), + t + }, + _takeBackControlInterpolant: function (A) { + var e = this._controlInterpolants, + t = A.__cacheIndex, + i = --this._nActiveControlInterpolants, + o = e[i]; + A.__cacheIndex = i, + e[i] = A, + o.__cacheIndex = t, + e[t] = o + }, + _controlInterpolantsResultBuffer: new Float32Array(1), + clipAction: function (A, e) { + var t = e || this._root, + i = t.uuid, + o = "string" == typeof A ? Gr.findByName(t, A) : A, + n = null !== o ? o.uuid : A, + r = this._actionsByClip[n], + a = null; + if (void 0 !== r) { + var s = r.actionByRoot[i]; + if (void 0 !== s) + return s; + a = r.knownActions[0], + null === o && (o = a._clip) + } + if (null === o) + return null; + var l = new Qs(this, o, e); + return this._bindAction(l, a), + this._addInactiveAction(l, n, i), + l + }, + existingAction: function (A, e) { + var t = e || this._root, + i = t.uuid, + o = "string" == typeof A ? Gr.findByName(t, A) : A, + n = this._actionsByClip[o ? o.uuid : A]; + return void 0 !== n && n.actionByRoot[i] || null + }, + stopAllAction: function () { + var A = this._actions, + e = this._nActiveActions, + t = this._bindings, + i = this._nActiveBindings; + this._nActiveActions = 0, + this._nActiveBindings = 0; + for (var o = 0; o !== e; ++o) + A[o].reset(); + for (o = 0; o !== i; ++o) + t[o].useCount = 0; + return this + }, + update: function (A) { + for (var e = this._actions, t = this._nActiveActions, i = this.time += A *= this.timeScale, o = Math.sign(A), n = this._accuIndex ^= 1, r = 0; r !== t; ++r) { + e[r]._update(i, A, o, n) + } + var a = this._bindings, + s = this._nActiveBindings; + for (r = 0; r !== s; ++r) + a[r].apply(n); + return this + }, + setTime: function (A) { + this.time = 0; + for (var e = 0; this._actions.length > e; e++) + this._actions[e].time = 0; + return this.update(A) + }, + getRoot: function () { + return this._root + }, + uncacheClip: function (A) { + var e = this._actions, + t = A.uuid, + i = this._actionsByClip, + o = i[t]; + if (void 0 !== o) { + for (var n = o.knownActions, r = 0, a = n.length; r !== a; ++r) { + var s = n[r]; + this._deactivateAction(s); + var l = s._cacheIndex, + c = e[e.length - 1]; + s._cacheIndex = null, + s._byClipCacheIndex = null, + c._cacheIndex = l, + e[l] = c, + e.pop(), + this._removeInactiveBindingsForAction(s) + } + delete i[t] + } + }, + uncacheRoot: function (A) { + var e = A.uuid, + t = this._actionsByClip; + for (var i in t) { + var o = t[i].actionByRoot[e]; + void 0 !== o && (this._deactivateAction(o), + this._removeInactiveAction(o)) + } + var n = this._bindingsByRootAndName[e]; + if (void 0 !== n) + for (var r in n) { + var a = n[r]; + a.restoreOriginalState(), + this._removeInactiveBinding(a) + } + }, + uncacheAction: function (A, e) { + var t = this.existingAction(A, e); + null !== t && (this._deactivateAction(t), + this._removeInactiveAction(t)) + } + }), + Ts.prototype.clone = function () { + return new Ts(void 0 === this.value.clone ? this.value : this.value.clone()) + }, + ks.prototype = Object.assign(Object.create(to.prototype), { + constructor: ks, + isInstancedInterleavedBuffer: !0, + copy: function (A) { + return to.prototype.copy.call(this, A), + this.meshPerAttribute = A.meshPerAttribute, + this + } + }), + Object.assign(Ds.prototype, { + set: function (A, e) { + this.ray.set(A, e) + }, + setFromCamera: function (A, e) { + e && e.isPerspectiveCamera ? (this.ray.origin.setFromMatrixPosition(e.matrixWorld), + this.ray.direction.set(A.x, A.y, .5).unproject(e).sub(this.ray.origin).normalize(), + this.camera = e) : e && e.isOrthographicCamera ? (this.ray.origin.set(A.x, A.y, (e.near + e.far) / (e.near - e.far)).unproject(e), + this.ray.direction.set(0, 0, -1).transformDirection(e.matrixWorld), + this.camera = e) : console.error("THREE.Raycaster: Unsupported camera type.") + }, + intersectObject: function (A, e, t) { + var i = t || []; + return Ns(A, this, i, e), + i.sort(Ls), + i + }, + intersectObjects: function (A, e, t) { + var i = t || []; + if (!1 === Array.isArray(A)) + return console.warn("THREE.Raycaster.intersectObjects: objects is not an Array."), + i; + for (var o = 0, n = A.length; n > o; o++) + Ns(A[o], this, i, e); + return i.sort(Ls), + i + } + }), + Object.assign(Os.prototype, { + set: function (A, e, t) { + return this.radius = A, + this.phi = e, + this.theta = t, + this + }, + clone: function () { + return (new this.constructor).copy(this) + }, + copy: function (A) { + return this.radius = A.radius, + this.phi = A.phi, + this.theta = A.theta, + this + }, + makeSafe: function () { + return this.phi = Math.max(1e-6, Math.min(Math.PI - 1e-6, this.phi)), + this + }, + setFromVector3: function (A) { + return this.setFromCartesianCoords(A.x, A.y, A.z) + }, + setFromCartesianCoords: function (A, e, t) { + return this.radius = Math.sqrt(A * A + e * e + t * t), + 0 === this.radius ? (this.theta = 0, + this.phi = 0) : (this.theta = Math.atan2(A, t), + this.phi = Math.acos(a.clamp(e / this.radius, -1, 1))), + this + } + }), + Object.assign(Vs.prototype, { + set: function (A, e, t) { + return this.radius = A, + this.theta = e, + this.y = t, + this + }, + clone: function () { + return (new this.constructor).copy(this) + }, + copy: function (A) { + return this.radius = A.radius, + this.theta = A.theta, + this.y = A.y, + this + }, + setFromVector3: function (A) { + return this.setFromCartesianCoords(A.x, A.y, A.z) + }, + setFromCartesianCoords: function (A, e, t) { + return this.radius = Math.sqrt(A * A + t * t), + this.theta = Math.atan2(A, t), + this.y = e, + this + } + }); + var Gs = new s; + + function Ps(A, e) { + this.min = void 0 !== A ? A : new s(1 / 0, 1 / 0), + this.max = void 0 !== e ? e : new s(-1 / 0, -1 / 0) + } + Object.assign(Ps.prototype, { + set: function (A, e) { + return this.min.copy(A), + this.max.copy(e), + this + }, + setFromPoints: function (A) { + this.makeEmpty(); + for (var e = 0, t = A.length; t > e; e++) + this.expandByPoint(A[e]); + return this + }, + setFromCenterAndSize: function (A, e) { + var t = Gs.copy(e).multiplyScalar(.5); + return this.min.copy(A).sub(t), + this.max.copy(A).add(t), + this + }, + clone: function () { + return (new this.constructor).copy(this) + }, + copy: function (A) { + return this.min.copy(A.min), + this.max.copy(A.max), + this + }, + makeEmpty: function () { + return this.min.x = this.min.y = 1 / 0, + this.max.x = this.max.y = -1 / 0, + this + }, + isEmpty: function () { + return this.min.x > this.max.x || this.min.y > this.max.y + }, + getCenter: function (A) { + return void 0 === A && (console.warn("THREE.Box2: .getCenter() target is now required"), + A = new s), + this.isEmpty() ? A.set(0, 0) : A.addVectors(this.min, this.max).multiplyScalar(.5) + }, + getSize: function (A) { + return void 0 === A && (console.warn("THREE.Box2: .getSize() target is now required"), + A = new s), + this.isEmpty() ? A.set(0, 0) : A.subVectors(this.max, this.min) + }, + expandByPoint: function (A) { + return this.min.min(A), + this.max.max(A), + this + }, + expandByVector: function (A) { + return this.min.sub(A), + this.max.add(A), + this + }, + expandByScalar: function (A) { + return this.min.addScalar(-A), + this.max.addScalar(A), + this + }, + containsPoint: function (A) { + return !(this.min.x > A.x || A.x > this.max.x || this.min.y > A.y || A.y > this.max.y) + }, + containsBox: function (A) { + return !(this.min.x > A.min.x || A.max.x > this.max.x || this.min.y > A.min.y || A.max.y > this.max.y) + }, + getParameter: function (A, e) { + return void 0 === e && (console.warn("THREE.Box2: .getParameter() target is now required"), + e = new s), + e.set((A.x - this.min.x) / (this.max.x - this.min.x), (A.y - this.min.y) / (this.max.y - this.min.y)) + }, + intersectsBox: function (A) { + return !(this.min.x > A.max.x || A.min.x > this.max.x || this.min.y > A.max.y || A.min.y > this.max.y) + }, + clampPoint: function (A, e) { + return void 0 === e && (console.warn("THREE.Box2: .clampPoint() target is now required"), + e = new s), + e.copy(A).clamp(this.min, this.max) + }, + distanceToPoint: function (A) { + return Gs.copy(A).clamp(this.min, this.max).sub(A).length() + }, + intersect: function (A) { + return this.min.max(A.min), + this.max.min(A.max), + this + }, + union: function (A) { + return this.min.min(A.min), + this.max.max(A.max), + this + }, + translate: function (A) { + return this.min.add(A), + this.max.add(A), + this + }, + equals: function (A) { + return A.min.equals(this.min) && A.max.equals(this.max) + } + }); + var qs = new y, + js = new y; + + function Hs(A, e) { + this.start = void 0 !== A ? A : new y, + this.end = void 0 !== e ? e : new y + } + + function Ys(A) { + H.call(this), + this.material = A, + this.render = function () {} + } + Object.assign(Hs.prototype, { + set: function (A, e) { + return this.start.copy(A), + this.end.copy(e), + this + }, + clone: function () { + return (new this.constructor).copy(this) + }, + copy: function (A) { + return this.start.copy(A.start), + this.end.copy(A.end), + this + }, + getCenter: function (A) { + return void 0 === A && (console.warn("THREE.Line3: .getCenter() target is now required"), + A = new y), + A.addVectors(this.start, this.end).multiplyScalar(.5) + }, + delta: function (A) { + return void 0 === A && (console.warn("THREE.Line3: .delta() target is now required"), + A = new y), + A.subVectors(this.end, this.start) + }, + distanceSq: function () { + return this.start.distanceToSquared(this.end) + }, + distance: function () { + return this.start.distanceTo(this.end) + }, + at: function (A, e) { + return void 0 === e && (console.warn("THREE.Line3: .at() target is now required"), + e = new y), + this.delta(e).multiplyScalar(A).add(this.start) + }, + closestPointToPointParameter: function (A, e) { + qs.subVectors(A, this.start), + js.subVectors(this.end, this.start); + var t = js.dot(js), + i = js.dot(qs) / t; + return e && (i = a.clamp(i, 0, 1)), + i + }, + closestPointToPoint: function (A, e, t) { + var i = this.closestPointToPointParameter(A, e); + return void 0 === t && (console.warn("THREE.Line3: .closestPointToPoint() target is now required"), + t = new y), + this.delta(t).multiplyScalar(i).add(this.start) + }, + applyMatrix4: function (A) { + return this.start.applyMatrix4(A), + this.end.applyMatrix4(A), + this + }, + equals: function (A) { + return A.start.equals(this.start) && A.end.equals(this.end) + } + }), + (Ys.prototype = Object.create(H.prototype)).constructor = Ys, + Ys.prototype.isImmediateRenderObject = !0; + var Ws = new y; + + function Js(A, e) { + H.call(this), + this.light = A, + this.light.updateMatrixWorld(), + this.matrix = A.matrixWorld, + this.matrixAutoUpdate = !1, + this.color = e; + for (var t = new he, i = [0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, -1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, -1, 1], o = 0, n = 1; 32 > o; o++, + n++) { + var r = o / 32 * Math.PI * 2, + a = n / 32 * Math.PI * 2; + i.push(Math.cos(r), Math.sin(r), 1, Math.cos(a), Math.sin(a), 1) + } + t.setAttribute("position", new Ae(i, 3)); + var s = new ko({ + fog: !1, + toneMapped: !1 + }); + this.cone = new jo(t, s), + this.add(this.cone), + this.update() + } + (Js.prototype = Object.create(H.prototype)).constructor = Js, + Js.prototype.dispose = function () { + this.cone.geometry.dispose(), + this.cone.material.dispose() + }, + Js.prototype.update = function () { + this.light.updateMatrixWorld(); + var A = this.light.distance ? this.light.distance : 1e3, + e = A * Math.tan(this.light.angle); + this.cone.scale.set(e, e, A), + Ws.setFromMatrixPosition(this.light.target.matrixWorld), + this.cone.lookAt(Ws), + void 0 !== this.color ? this.cone.material.color.set(this.color) : this.cone.material.color.copy(this.light.color) + }; + var zs = new y, + Zs = new M, + Xs = new M; + + function _s(A) { + for (var e = function A(e) { + var t = []; + e && e.isBone && t.push(e); + for (var i = 0; e.children.length > i; i++) + t.push.apply(t, A(e.children[i])); + return t + }(A), t = new he, i = [], o = [], n = new LA(0, 0, 1), r = new LA(0, 1, 0), a = 0; e.length > a; a++) { + var s = e[a]; + s.parent && s.parent.isBone && (i.push(0, 0, 0), + i.push(0, 0, 0), + o.push(n.r, n.g, n.b), + o.push(r.r, r.g, r.b)) + } + t.setAttribute("position", new Ae(i, 3)), + t.setAttribute("color", new Ae(o, 3)); + var l = new ko({ + vertexColors: !0, + depthTest: !1, + depthWrite: !1, + toneMapped: !1, + transparent: !0 + }); + jo.call(this, t, l), + this.root = A, + this.bones = e, + this.matrix = A.matrixWorld, + this.matrixAutoUpdate = !1 + } + + function $s(A, e, t) { + this.light = A, + this.light.updateMatrixWorld(), + this.color = t; + var i = new er(e, 4, 2), + o = new jA({ + wireframe: !0, + fog: !1, + toneMapped: !1 + }); + Ue.call(this, i, o), + this.matrix = this.light.matrixWorld, + this.matrixAutoUpdate = !1, + this.update() + } + (_s.prototype = Object.create(jo.prototype)).constructor = _s, + _s.prototype.isSkeletonHelper = !0, + _s.prototype.updateMatrixWorld = function (A) { + var e = this.bones, + t = this.geometry, + i = t.getAttribute("position"); + Xs.getInverse(this.root.matrixWorld); + for (var o = 0, n = 0; e.length > o; o++) { + var r = e[o]; + r.parent && r.parent.isBone && (Zs.multiplyMatrices(Xs, r.matrixWorld), + zs.setFromMatrixPosition(Zs), + i.setXYZ(n, zs.x, zs.y, zs.z), + Zs.multiplyMatrices(Xs, r.parent.matrixWorld), + zs.setFromMatrixPosition(Zs), + i.setXYZ(n + 1, zs.x, zs.y, zs.z), + n += 2) + } + t.getAttribute("position").needsUpdate = !0, + H.prototype.updateMatrixWorld.call(this, A) + }, + ($s.prototype = Object.create(Ue.prototype)).constructor = $s, + $s.prototype.dispose = function () { + this.geometry.dispose(), + this.material.dispose() + }, + $s.prototype.update = function () { + void 0 !== this.color ? this.material.color.set(this.color) : this.material.color.copy(this.light.color) + }; + var Al = new y, + el = new LA, + tl = new LA; + + function il(A, e, t) { + H.call(this), + this.light = A, + this.light.updateMatrixWorld(), + this.matrix = A.matrixWorld, + this.matrixAutoUpdate = !1, + this.color = t; + var i = new dn(e); + i.rotateY(.5 * Math.PI), + this.material = new jA({ + wireframe: !0, + fog: !1, + toneMapped: !1 + }), + void 0 === this.color && (this.material.vertexColors = !0); + var o = i.getAttribute("position"), + n = new Float32Array(3 * o.count); + i.setAttribute("color", new YA(n, 3)), + this.add(new Ue(i, this.material)), + this.update() + } + + function ol(A, e, t, i) { + A = A || 10, + e = e || 10, + t = new LA(void 0 !== t ? t : 4473924), + i = new LA(void 0 !== i ? i : 8947848); + for (var o = e / 2, n = A / e, r = A / 2, a = [], s = [], l = 0, c = 0, h = -r; e >= l; l++, + h += n) { + a.push(-r, 0, h, r, 0, h), + a.push(h, 0, -r, h, 0, r); + var d = l === o ? t : i; + d.toArray(s, c), + d.toArray(s, c += 3), + d.toArray(s, c += 3), + d.toArray(s, c += 3), + c += 3 + } + var p = new he; + p.setAttribute("position", new Ae(a, 3)), + p.setAttribute("color", new Ae(s, 3)); + var g = new ko({ + vertexColors: !0, + toneMapped: !1 + }); + jo.call(this, p, g) + } + + function nl(A, e, t, i, o, n) { + A = A || 10, + e = e || 16, + t = t || 8, + i = i || 64, + o = new LA(void 0 !== o ? o : 4473924), + n = new LA(void 0 !== n ? n : 8947848); + var r, a, s, l, c, h, d, p = [], + g = []; + for (l = 0; e >= l; l++) + s = l / e * (2 * Math.PI), + r = Math.sin(s) * A, + a = Math.cos(s) * A, + p.push(0, 0, 0), + p.push(r, 0, a), + g.push((d = 1 & l ? o : n).r, d.g, d.b), + g.push(d.r, d.g, d.b); + for (l = 0; t >= l; l++) + for (d = 1 & l ? o : n, + h = A - A / t * l, + c = 0; i > c; c++) + s = c / i * (2 * Math.PI), + r = Math.sin(s) * h, + a = Math.cos(s) * h, + p.push(r, 0, a), + g.push(d.r, d.g, d.b), + s = (c + 1) / i * (2 * Math.PI), + r = Math.sin(s) * h, + a = Math.cos(s) * h, + p.push(r, 0, a), + g.push(d.r, d.g, d.b); + var u = new he; + u.setAttribute("position", new Ae(p, 3)), + u.setAttribute("color", new Ae(g, 3)); + var f = new ko({ + vertexColors: !0, + toneMapped: !1 + }); + jo.call(this, u, f) + } + (il.prototype = Object.create(H.prototype)).constructor = il, + il.prototype.dispose = function () { + this.children[0].geometry.dispose(), + this.children[0].material.dispose() + }, + il.prototype.update = function () { + var A = this.children[0]; + if (void 0 !== this.color) + this.material.color.set(this.color); + else { + var e = A.geometry.getAttribute("color"); + el.copy(this.light.color), + tl.copy(this.light.groundColor); + for (var t = 0, i = e.count; i > t; t++) { + var o = i / 2 > t ? el : tl; + e.setXYZ(t, o.r, o.g, o.b) + } + e.needsUpdate = !0 + } + A.lookAt(Al.setFromMatrixPosition(this.light.matrixWorld).negate()) + }, + ol.prototype = Object.assign(Object.create(jo.prototype), { + constructor: ol, + copy: function (A) { + return jo.prototype.copy.call(this, A), + this.geometry.copy(A.geometry), + this.material.copy(A.material), + this + }, + clone: function () { + return (new this.constructor).copy(this) + } + }), + (nl.prototype = Object.create(jo.prototype)).constructor = nl; + var rl = new y, + al = new y, + sl = new y; + + function ll(A, e, t) { + H.call(this), + this.light = A, + this.light.updateMatrixWorld(), + this.matrix = A.matrixWorld, + this.matrixAutoUpdate = !1, + this.color = t, + void 0 === e && (e = 1); + var i = new he; + i.setAttribute("position", new Ae([-e, e, 0, e, e, 0, e, -e, 0, -e, -e, 0, -e, e, 0], 3)); + var o = new ko({ + fog: !1, + toneMapped: !1 + }); + this.lightPlane = new Go(i, o), + this.add(this.lightPlane), + (i = new he).setAttribute("position", new Ae([0, 0, 0, 0, 0, 1], 3)), + this.targetLine = new Go(i, o), + this.add(this.targetLine), + this.update() + } + (ll.prototype = Object.create(H.prototype)).constructor = ll, + ll.prototype.dispose = function () { + this.lightPlane.geometry.dispose(), + this.lightPlane.material.dispose(), + this.targetLine.geometry.dispose(), + this.targetLine.material.dispose() + }, + ll.prototype.update = function () { + rl.setFromMatrixPosition(this.light.matrixWorld), + al.setFromMatrixPosition(this.light.target.matrixWorld), + sl.subVectors(al, rl), + this.lightPlane.lookAt(al), + void 0 !== this.color ? (this.lightPlane.material.color.set(this.color), + this.targetLine.material.color.set(this.color)) : (this.lightPlane.material.color.copy(this.light.color), + this.targetLine.material.color.copy(this.light.color)), + this.targetLine.lookAt(al), + this.targetLine.scale.z = sl.length() + }; + var cl = new y, + hl = new qe; + + function dl(A) { + var e = new he, + t = new ko({ + color: 16777215, + vertexColors: !0, + toneMapped: !1 + }), + i = [], + o = [], + n = {}, + r = new LA(16755200), + a = new LA(16711680), + s = new LA(43775), + l = new LA(16777215), + c = new LA(3355443); + + function h(A, e, t) { + d(A, t), + d(e, t) + } + + function d(A, e) { + i.push(0, 0, 0), + o.push(e.r, e.g, e.b), + void 0 === n[A] && (n[A] = []), + n[A].push(i.length / 3 - 1) + } + h("n1", "n2", r), + h("n2", "n4", r), + h("n4", "n3", r), + h("n3", "n1", r), + h("f1", "f2", r), + h("f2", "f4", r), + h("f4", "f3", r), + h("f3", "f1", r), + h("n1", "f1", r), + h("n2", "f2", r), + h("n3", "f3", r), + h("n4", "f4", r), + h("p", "n1", a), + h("p", "n2", a), + h("p", "n3", a), + h("p", "n4", a), + h("u1", "u2", s), + h("u2", "u3", s), + h("u3", "u1", s), + h("c", "t", l), + h("p", "c", c), + h("cn1", "cn2", c), + h("cn3", "cn4", c), + h("cf1", "cf2", c), + h("cf3", "cf4", c), + e.setAttribute("position", new Ae(i, 3)), + e.setAttribute("color", new Ae(o, 3)), + jo.call(this, e, t), + this.camera = A, + this.camera.updateProjectionMatrix && this.camera.updateProjectionMatrix(), + this.matrix = A.matrixWorld, + this.matrixAutoUpdate = !1, + this.pointMap = n, + this.update() + } + + function pl(A, e, t, i, o, n, r) { + cl.set(o, n, r).unproject(i); + var a = e[A]; + if (void 0 !== a) + for (var s = t.getAttribute("position"), l = 0, c = a.length; c > l; l++) + s.setXYZ(a[l], cl.x, cl.y, cl.z) + } + (dl.prototype = Object.create(jo.prototype)).constructor = dl, + dl.prototype.update = function () { + var A = this.geometry, + e = this.pointMap; + hl.projectionMatrixInverse.copy(this.camera.projectionMatrixInverse), + pl("c", e, A, hl, 0, 0, -1), + pl("t", e, A, hl, 0, 0, 1), + pl("n1", e, A, hl, -1, -1, -1), + pl("n2", e, A, hl, 1, -1, -1), + pl("n3", e, A, hl, -1, 1, -1), + pl("n4", e, A, hl, 1, 1, -1), + pl("f1", e, A, hl, -1, -1, 1), + pl("f2", e, A, hl, 1, -1, 1), + pl("f3", e, A, hl, -1, 1, 1), + pl("f4", e, A, hl, 1, 1, 1), + pl("u1", e, A, hl, .7, 1.1, -1), + pl("u2", e, A, hl, -.7, 1.1, -1), + pl("u3", e, A, hl, 0, 2, -1), + pl("cf1", e, A, hl, -1, 0, 1), + pl("cf2", e, A, hl, 1, 0, 1), + pl("cf3", e, A, hl, 0, -1, 1), + pl("cf4", e, A, hl, 0, 1, 1), + pl("cn1", e, A, hl, -1, 0, -1), + pl("cn2", e, A, hl, 1, 0, -1), + pl("cn3", e, A, hl, 0, -1, -1), + pl("cn4", e, A, hl, 0, 1, -1), + A.getAttribute("position").needsUpdate = !0 + }; + var gl = new aA; + + function ul(A, e) { + this.object = A, + void 0 === e && (e = 16776960); + var t = new Uint16Array([0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7]), + i = new Float32Array(24), + o = new he; + o.setIndex(new YA(t, 1)), + o.setAttribute("position", new YA(i, 3)), + jo.call(this, o, new ko({ + color: e, + toneMapped: !1 + })), + this.matrixAutoUpdate = !1, + this.update() + } + + function fl(A, e) { + this.type = "Box3Helper", + this.box = A, + e = e || 16776960; + var t = new Uint16Array([0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7]), + i = new he; + i.setIndex(new YA(t, 1)), + i.setAttribute("position", new Ae([1, 1, 1, -1, 1, 1, -1, -1, 1, 1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, -1, 1, -1, -1], 3)), + jo.call(this, i, new ko({ + color: e, + toneMapped: !1 + })), + this.geometry.computeBoundingSphere() + } + + function ml(A, e, t) { + this.type = "PlaneHelper", + this.plane = A, + this.size = void 0 === e ? 1 : e; + var i = void 0 !== t ? t : 16776960, + o = new he; + o.setAttribute("position", new Ae([1, -1, 1, -1, 1, 1, -1, -1, 1, 1, 1, 1, -1, 1, 1, -1, -1, 1, 1, -1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0], 3)), + o.computeBoundingSphere(), + Go.call(this, o, new ko({ + color: i, + toneMapped: !1 + })); + var n = new he; + n.setAttribute("position", new Ae([1, 1, 1, -1, 1, 1, -1, -1, 1, 1, 1, 1, -1, -1, 1, 1, -1, 1], 3)), + n.computeBoundingSphere(), + this.add(new Ue(n, new jA({ + color: i, + opacity: .2, + transparent: !0, + depthWrite: !1, + toneMapped: !1 + }))) + } + (ul.prototype = Object.create(jo.prototype)).constructor = ul, + ul.prototype.update = function (A) { + if (void 0 !== A && console.warn("THREE.BoxHelper: .update() has no longer arguments."), + void 0 !== this.object && gl.setFromObject(this.object), + !gl.isEmpty()) { + var e = gl.min, + t = gl.max, + i = this.geometry.attributes.position, + o = i.array; + o[0] = t.x, + o[1] = t.y, + o[2] = t.z, + o[3] = e.x, + o[4] = t.y, + o[5] = t.z, + o[6] = e.x, + o[7] = e.y, + o[8] = t.z, + o[9] = t.x, + o[10] = e.y, + o[11] = t.z, + o[12] = t.x, + o[13] = t.y, + o[14] = e.z, + o[15] = e.x, + o[16] = t.y, + o[17] = e.z, + o[18] = e.x, + o[19] = e.y, + o[20] = e.z, + o[21] = t.x, + o[22] = e.y, + o[23] = e.z, + i.needsUpdate = !0, + this.geometry.computeBoundingSphere() + } + }, + ul.prototype.setFromObject = function (A) { + return this.object = A, + this.update(), + this + }, + ul.prototype.copy = function (A) { + return jo.prototype.copy.call(this, A), + this.object = A.object, + this + }, + ul.prototype.clone = function () { + return (new this.constructor).copy(this) + }, + (fl.prototype = Object.create(jo.prototype)).constructor = fl, + fl.prototype.updateMatrixWorld = function (A) { + var e = this.box; + e.isEmpty() || (e.getCenter(this.position), + e.getSize(this.scale), + this.scale.multiplyScalar(.5), + H.prototype.updateMatrixWorld.call(this, A)) + }, + (ml.prototype = Object.create(Go.prototype)).constructor = ml, + ml.prototype.updateMatrixWorld = function (A) { + var e = -this.plane.constant; + 1e-8 > Math.abs(e) && (e = 1e-8), + this.scale.set(.5 * this.size, .5 * this.size, e), + this.children[0].material.side = 0 > e ? 1 : 0, + this.lookAt(this.plane.normal), + H.prototype.updateMatrixWorld.call(this, A) + }; + var Cl, yl, vl = new y; + + function Il(A, e, t, i, o, n) { + H.call(this), + void 0 === A && (A = new y(0, 0, 1)), + void 0 === e && (e = new y(0, 0, 0)), + void 0 === t && (t = 1), + void 0 === i && (i = 16776960), + void 0 === o && (o = .2 * t), + void 0 === n && (n = .2 * o), + void 0 === Cl && ((Cl = new he).setAttribute("position", new Ae([0, 0, 0, 0, 1, 0], 3)), + (yl = new hr(0, .5, 1, 5, 1)).translate(0, -.5, 0)), + this.position.copy(e), + this.line = new Go(Cl, new ko({ + color: i, + toneMapped: !1 + })), + this.line.matrixAutoUpdate = !1, + this.add(this.line), + this.cone = new Ue(yl, new jA({ + color: i, + toneMapped: !1 + })), + this.cone.matrixAutoUpdate = !1, + this.add(this.cone), + this.setDirection(A), + this.setLength(t, o, n) + } + + function El(A) { + var e = [0, 0, 0, A = A || 1, 0, 0, 0, 0, 0, 0, A, 0, 0, 0, 0, 0, 0, A], + t = new he; + t.setAttribute("position", new Ae(e, 3)), + t.setAttribute("color", new Ae([1, 0, 0, 1, .6, 0, 0, 1, 0, .6, 1, 0, 0, 0, 1, 0, .6, 1], 3)); + var i = new ko({ + vertexColors: !0, + toneMapped: !1 + }); + jo.call(this, t, i) + } + (Il.prototype = Object.create(H.prototype)).constructor = Il, + Il.prototype.setDirection = function (A) { + if (A.y > .99999) + this.quaternion.set(0, 0, 0, 1); + else if (-.99999 > A.y) + this.quaternion.set(1, 0, 0, 0); + else { + vl.set(A.z, 0, -A.x).normalize(); + var e = Math.acos(A.y); + this.quaternion.setFromAxisAngle(vl, e) + } + }, + Il.prototype.setLength = function (A, e, t) { + void 0 === e && (e = .2 * A), + void 0 === t && (t = .2 * e), + this.line.scale.set(1, Math.max(1e-4, A - e), 1), + this.line.updateMatrix(), + this.cone.scale.set(t, e, t), + this.cone.position.y = A, + this.cone.updateMatrix() + }, + Il.prototype.setColor = function (A) { + this.line.material.color.set(A), + this.cone.material.color.set(A) + }, + Il.prototype.copy = function (A) { + return H.prototype.copy.call(this, A, !1), + this.line.copy(A.line), + this.cone.copy(A.cone), + this + }, + Il.prototype.clone = function () { + return (new this.constructor).copy(this) + }, + (El.prototype = Object.create(jo.prototype)).constructor = El; + var Bl, xl, Sl, wl, Ml = Math.pow(2, 8), + bl = [.125, .215, .35, .446, .526, .582], + Ul = 5 + bl.length, + Fl = { + 3e3: 0, + 3001: 1, + 3002: 2, + 3004: 3, + 3005: 4, + 3006: 5, + 3007: 6 + }, + Kl = new Ka, + Ql = (Bl = 20, + xl = new Float32Array(Bl), + Sl = new y(0, 1, 0), + (wl = new Cr({ + defines: { + n: Bl + }, + uniforms: { + envMap: { + value: null + }, + samples: { + value: 1 + }, + weights: { + value: xl + }, + latitudinal: { + value: !1 + }, + dTheta: { + value: 0 + }, + mipInt: { + value: 0 + }, + poleAxis: { + value: Sl + }, + inputEncoding: { + value: Fl[3e3] + }, + outputEncoding: { + value: Fl[3e3] + } + }, + vertexShader: ec(), + fragmentShader: `\nprecision mediump float;\nprecision mediump int;\nvarying vec3 vOutputDirection;\nuniform sampler2D envMap;\nuniform int samples;\nuniform float weights[n];\nuniform bool latitudinal;\nuniform float dTheta;\nuniform float mipInt;\nuniform vec3 poleAxis;\n\n${tc()}\n\n#define ENVMAP_TYPE_CUBE_UV\n#include \n\nvec3 getSample(float theta, vec3 axis) {\n\tfloat cosTheta = cos(theta);\n\t// Rodrigues' axis-angle rotation\n\tvec3 sampleDirection = vOutputDirection * cosTheta\n\t\t+ cross(axis, vOutputDirection) * sin(theta)\n\t\t+ axis * dot(axis, vOutputDirection) * (1.0 - cosTheta);\n\treturn bilinearCubeUV(envMap, sampleDirection, mipInt);\n}\n\nvoid main() {\n\tvec3 axis = latitudinal ? poleAxis : cross(poleAxis, vOutputDirection);\n\tif (all(equal(axis, vec3(0.0))))\n\t\taxis = vec3(vOutputDirection.z, 0.0, - vOutputDirection.x);\n\taxis = normalize(axis);\n\tgl_FragColor = vec4(0.0);\n\tgl_FragColor.rgb += weights[0] * getSample(0.0, axis);\n\tfor (int i = 1; i < n; i++) {\n\t\tif (i >= samples)\n\t\t\tbreak;\n\t\tfloat theta = dTheta * float(i);\n\t\tgl_FragColor.rgb += weights[i] * getSample(-1.0 * theta, axis);\n\t\tgl_FragColor.rgb += weights[i] * getSample(theta, axis);\n\t}\n\tgl_FragColor = linearToOutputTexel(gl_FragColor);\n}\n\t\t`, + blending: 0, + depthTest: !1, + depthWrite: !1 + })).type = "SphericalGaussianBlur", + wl), + Rl = null, + Tl = null, + { + _lodPlanes: kl, + _sizeLods: Dl, + _sigmas: Ll + } = function () { + for (var A = [], e = [], t = [], i = 8, o = 0; Ul > o; o++) { + var n = Math.pow(2, i); + e.push(n); + var r = 1 / n; + o > 4 ? r = bl[o - 8 + 4 - 1] : 0 == o && (r = 0), + t.push(r); + for (var a = 1 / (n - 1), s = -a / 2, l = 1 + a / 2, c = [s, s, l, s, l, l, s, s, l, l, s, l], h = new Float32Array(108), d = new Float32Array(72), p = new Float32Array(36), g = 0; 6 > g; g++) { + var u = g % 3 * 2 / 3 - 1, + f = g > 2 ? 0 : -1; + h.set([u, f, 0, u + 2 / 3, f, 0, u + 2 / 3, f + 1, 0, u, f, 0, u + 2 / 3, f + 1, 0, u, f + 1, 0], 18 * g), + d.set(c, 12 * g), + p.set([g, g, g, g, g, g], 6 * g) + } + var m = new he; + m.setAttribute("position", new YA(h, 3)), + m.setAttribute("uv", new YA(d, 2)), + m.setAttribute("faceIndex", new YA(p, 1)), + A.push(m), + i > 4 && i-- + } + return { + _lodPlanes: A, + _sizeLods: e, + _sigmas: t + } + }(), + Nl = null, + Ol = null, + Vl = null, + Gl = (1 + Math.sqrt(5)) / 2, + Pl = 1 / Gl, + ql = [new y(1, 1, 1), new y(-1, 1, 1), new y(1, 1, -1), new y(-1, 1, -1), new y(0, Gl, Pl), new y(0, Gl, -Pl), new y(Pl, 0, Gl), new y(-Pl, 0, Gl), new y(Gl, Pl, 0), new y(-Gl, Pl, 0)]; + + function jl(A) { + Ol = A, + Wl(Ql) + } + + function Hl(A) { + var e = { + magFilter: 1003, + minFilter: 1003, + generateMipmaps: !1, + type: A ? A.type : 1009, + format: A ? A.format : 1023, + encoding: A ? A.encoding : 3002, + depthBuffer: !1, + stencilBuffer: !1 + }, + t = Jl(e); + return t.depthBuffer = !A, + Nl = Jl(e), + t + } + + function Yl(A) { + Nl.dispose(), + Ol.setRenderTarget(Vl), + A.scissorTest = !1, + A.setSize(A.width, A.height) + } + + function Wl(A) { + var e = new Y; + e.add(new Ue(kl[0], A)), + Ol.compile(e, Kl) + } + + function Jl(A) { + var e = new g(3 * Ml, 3 * Ml, A); + return e.texture.mapping = 306, + e.texture.name = "PMREM.cubeUv", + e.scissorTest = !0, + e + } + + function zl(A, e, t, i, o) { + A.viewport.set(e, t, i, o), + A.scissor.set(e, t, i, o) + } + + function Zl(A) { + var e = Ol.autoClear; + Ol.autoClear = !1; + for (var t = 1; Ul > t; t++) { + Xl(A, t - 1, t, Math.sqrt(Ll[t] * Ll[t] - Ll[t - 1] * Ll[t - 1]), ql[(t - 1) % ql.length]) + } + Ol.autoClear = e + } + + function Xl(A, e, t, i, o) { + _l(A, Nl, e, t, i, "latitudinal", o), + _l(Nl, A, t, t, i, "longitudinal", o) + } + + function _l(A, e, t, i, o, n, r) { + "latitudinal" !== n && "longitudinal" !== n && console.error("blur direction must be either latitudinal or longitudinal!"); + var a = new Y; + a.add(new Ue(kl[i], Ql)); + var s = Ql.uniforms, + l = Dl[t] - 1, + c = isFinite(o) ? Math.PI / (2 * l) : 2 * Math.PI / 39, + h = o / c, + d = isFinite(o) ? 1 + Math.floor(3 * h) : 20; + d > 20 && console.warn(`sigmaRadians, ${o}, is too large and will clip, as it requested ${d} samples when the maximum is set to 20`); + for (var p = [], g = 0, u = 0; 20 > u; ++u) { + var f = u / h, + m = Math.exp(-f * f / 2); + p.push(m), + 0 == u ? g += m : d > u && (g += 2 * m) + } + for (u = 0; p.length > u; u++) + p[u] = p[u] / g; + s.envMap.value = A.texture, + s.samples.value = d, + s.weights.value = p, + s.latitudinal.value = "latitudinal" === n, + r && (s.poleAxis.value = r), + s.dTheta.value = c, + s.mipInt.value = 8 - t, + s.inputEncoding.value = Fl[A.texture.encoding], + s.outputEncoding.value = Fl[A.texture.encoding]; + var C = Dl[i]; + zl(e, f = 3 * Math.max(0, Ml - 2 * C), (0 === i ? 0 : 2 * Ml) + 2 * C * (i > 4 ? i - 8 + 4 : 0), 3 * C, 2 * C), + Ol.setRenderTarget(e), + Ol.render(a, Kl) + } + + function $l() { + var A = new Cr({ + uniforms: { + envMap: { + value: null + }, + texelSize: { + value: new s(1, 1) + }, + inputEncoding: { + value: Fl[3e3] + }, + outputEncoding: { + value: Fl[3e3] + } + }, + vertexShader: ec(), + fragmentShader: `\nprecision mediump float;\nprecision mediump int;\nvarying vec3 vOutputDirection;\nuniform sampler2D envMap;\nuniform vec2 texelSize;\n\n${tc()}\n\n#define RECIPROCAL_PI 0.31830988618\n#define RECIPROCAL_PI2 0.15915494\n\nvoid main() {\n\tgl_FragColor = vec4(0.0);\n\tvec3 outputDirection = normalize(vOutputDirection);\n\tvec2 uv;\n\tuv.y = asin(clamp(outputDirection.y, -1.0, 1.0)) * RECIPROCAL_PI + 0.5;\n\tuv.x = atan(outputDirection.z, outputDirection.x) * RECIPROCAL_PI2 + 0.5;\n\tvec2 f = fract(uv / texelSize - 0.5);\n\tuv -= f * texelSize;\n\tvec3 tl = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n\tuv.x += texelSize.x;\n\tvec3 tr = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n\tuv.y += texelSize.y;\n\tvec3 br = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n\tuv.x -= texelSize.x;\n\tvec3 bl = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n\tvec3 tm = mix(tl, tr, f.x);\n\tvec3 bm = mix(bl, br, f.x);\n\tgl_FragColor.rgb = mix(tm, bm, f.y);\n\tgl_FragColor = linearToOutputTexel(gl_FragColor);\n}\n\t\t`, + blending: 0, + depthTest: !1, + depthWrite: !1 + }); + return A.type = "EquirectangularToCubeUV", + A + } + + function Ac() { + var A = new Cr({ + uniforms: { + envMap: { + value: null + }, + inputEncoding: { + value: Fl[3e3] + }, + outputEncoding: { + value: Fl[3e3] + } + }, + vertexShader: ec(), + fragmentShader: `\nprecision mediump float;\nprecision mediump int;\nvarying vec3 vOutputDirection;\nuniform samplerCube envMap;\n\n${tc()}\n\nvoid main() {\n\tgl_FragColor = vec4(0.0);\n\tgl_FragColor.rgb = envMapTexelToLinear(textureCube(envMap, vec3( - vOutputDirection.x, vOutputDirection.yz ))).rgb;\n\tgl_FragColor = linearToOutputTexel(gl_FragColor);\n}\n\t\t`, + blending: 0, + depthTest: !1, + depthWrite: !1 + }); + return A.type = "CubemapToCubeUV", + A + } + + function ec() { + return "\nprecision mediump float;\nprecision mediump int;\nattribute vec3 position;\nattribute vec2 uv;\nattribute float faceIndex;\nvarying vec3 vOutputDirection;\nvec3 getDirection(vec2 uv, float face) {\n\tuv = 2.0 * uv - 1.0;\n\tvec3 direction = vec3(uv, 1.0);\n\tif (face == 0.0) {\n\t\tdirection = direction.zyx;\n\t\tdirection.z *= -1.0;\n\t} else if (face == 1.0) {\n\t\tdirection = direction.xzy;\n\t\tdirection.z *= -1.0;\n\t} else if (face == 3.0) {\n\t\tdirection = direction.zyx;\n\t\tdirection.x *= -1.0;\n\t} else if (face == 4.0) {\n\t\tdirection = direction.xzy;\n\t\tdirection.y *= -1.0;\n\t} else if (face == 5.0) {\n\t\tdirection.xz *= -1.0;\n\t}\n\treturn direction;\n}\nvoid main() {\n\tvOutputDirection = getDirection(uv, faceIndex);\n\tgl_Position = vec4( position, 1.0 );\n}\n\t" + } + + function tc() { + return "\nuniform int inputEncoding;\nuniform int outputEncoding;\n\n#include \n\nvec4 inputTexelToLinear(vec4 value){\n\tif(inputEncoding == 0){\n\t\treturn value;\n\t}else if(inputEncoding == 1){\n\t\treturn sRGBToLinear(value);\n\t}else if(inputEncoding == 2){\n\t\treturn RGBEToLinear(value);\n\t}else if(inputEncoding == 3){\n\t\treturn RGBMToLinear(value, 7.0);\n\t}else if(inputEncoding == 4){\n\t\treturn RGBMToLinear(value, 16.0);\n\t}else if(inputEncoding == 5){\n\t\treturn RGBDToLinear(value, 256.0);\n\t}else{\n\t\treturn GammaToLinear(value, 2.2);\n\t}\n}\n\nvec4 linearToOutputTexel(vec4 value){\n\tif(outputEncoding == 0){\n\t\treturn value;\n\t}else if(outputEncoding == 1){\n\t\treturn LinearTosRGB(value);\n\t}else if(outputEncoding == 2){\n\t\treturn LinearToRGBE(value);\n\t}else if(outputEncoding == 3){\n\t\treturn LinearToRGBM(value, 7.0);\n\t}else if(outputEncoding == 4){\n\t\treturn LinearToRGBM(value, 16.0);\n\t}else if(outputEncoding == 5){\n\t\treturn LinearToRGBD(value, 256.0);\n\t}else{\n\t\treturn LinearToGamma(value, 2.2);\n\t}\n}\n\nvec4 envMapTexelToLinear(vec4 color) {\n\treturn inputTexelToLinear(color);\n}\n\t" + } + jl.prototype = { + constructor: jl, + fromScene: function (A, e = 0, t = .1, i = 100) { + Vl = Ol.getRenderTarget(); + var o = Hl(); + return function (A, e, t, i) { + var o = new je(90, 1, e, t), + n = [1, 1, 1, 1, -1, 1], + r = [1, 1, -1, -1, -1, 1], + a = Ol.outputEncoding, + s = Ol.toneMapping, + l = Ol.toneMappingExposure, + c = Ol.getClearColor(), + h = Ol.getClearAlpha(); + Ol.toneMapping = 1, + Ol.toneMappingExposure = 1, + Ol.outputEncoding = 3e3, + A.scale.z *= -1; + var d = A.background; + if (d && d.isColor) { + d.convertSRGBToLinear(); + var p = Math.max(d.r, d.g, d.b), + g = Math.min(Math.max(Math.ceil(Math.log2(p)), -128), 127); + d = d.multiplyScalar(Math.pow(2, -g)), + Ol.setClearColor(d, (g + 128) / 255), + A.background = null + } + for (var u = 0; 6 > u; u++) { + var f = u % 3; + 0 == f ? (o.up.set(0, n[u], 0), + o.lookAt(r[u], 0, 0)) : 1 == f ? (o.up.set(0, 0, n[u]), + o.lookAt(0, r[u], 0)) : (o.up.set(0, n[u], 0), + o.lookAt(0, 0, r[u])), + zl(i, f * Ml, u > 2 ? Ml : 0, Ml, Ml), + Ol.setRenderTarget(i), + Ol.render(A, o) + } + Ol.toneMapping = s, + Ol.toneMappingExposure = l, + Ol.outputEncoding = a, + Ol.setClearColor(c, h), + A.scale.z *= -1 + }(A, t, i, o), + e > 0 && Xl(o, 0, 0, e), + Zl(o), + Yl(o), + o + }, + fromEquirectangular: function (A) { + return A.magFilter = 1003, + A.minFilter = 1003, + A.generateMipmaps = !1, + this.fromCubemap(A) + }, + fromCubemap: function (A) { + Vl = Ol.getRenderTarget(); + var e = Hl(A); + return function (A, e) { + var t = new Y; + A.isCubeTexture ? null == Tl && (Tl = Ac()) : null == Rl && (Rl = $l()); + var i = A.isCubeTexture ? Tl : Rl; + t.add(new Ue(kl[0], i)); + var o = i.uniforms; + o.envMap.value = A, + A.isCubeTexture || o.texelSize.value.set(1 / A.image.width, 1 / A.image.height); + o.inputEncoding.value = Fl[A.encoding], + o.outputEncoding.value = Fl[A.encoding], + zl(e, 0, 0, 3 * Ml, 2 * Ml), + Ol.setRenderTarget(e), + Ol.render(t, Kl) + }(A, e), + Zl(e), + Yl(e), + e + }, + compileCubemapShader: function () { + null == Tl && Wl(Tl = Ac()) + }, + compileEquirectangularShader: function () { + null == Rl && Wl(Rl = $l()) + }, + dispose: function () { + Ql.dispose(), + null != Tl && Tl.dispose(), + null != Rl && Rl.dispose(); + for (var A = 0; kl.length > A; A++) + kl[A].dispose() + } + }; + + function ic(A) { + console.warn("THREE.ClosedSplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead."), + la.call(this, A), + this.type = "catmullrom", + this.closed = !0 + } + + function oc(A) { + console.warn("THREE.SplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead."), + la.call(this, A), + this.type = "catmullrom" + } + + function nc(A) { + console.warn("THREE.Spline has been removed. Use THREE.CatmullRomCurve3 instead."), + la.call(this, A), + this.type = "catmullrom" + } + ea.create = function (A, e) { + return console.log("THREE.Curve.create() has been deprecated"), + A.prototype = Object.create(ea.prototype), + A.prototype.constructor = A, + A.prototype.getPoint = e, + A + }, + Object.assign(Ia.prototype, { + createPointsGeometry: function (A) { + console.warn("THREE.CurvePath: .createPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead."); + var e = this.getPoints(A); + return this.createGeometry(e) + }, + createSpacedPointsGeometry: function (A) { + console.warn("THREE.CurvePath: .createSpacedPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead."); + var e = this.getSpacedPoints(A); + return this.createGeometry(e) + }, + createGeometry: function (A) { + console.warn("THREE.CurvePath: .createGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead."); + for (var e = new De, t = 0, i = A.length; i > t; t++) { + var o = A[t]; + e.vertices.push(new y(o.x, o.y, o.z || 0)) + } + return e + } + }), + Object.assign(Ea.prototype, { + fromPoints: function (A) { + return console.warn("THREE.Path: .fromPoints() has been renamed to .setFromPoints()."), + this.setFromPoints(A) + } + }), + ic.prototype = Object.create(la.prototype), + oc.prototype = Object.create(la.prototype), + nc.prototype = Object.create(la.prototype), + Object.assign(nc.prototype, { + initFromArray: function () { + console.error("THREE.Spline: .initFromArray() has been removed.") + }, + getControlPointsArray: function () { + console.error("THREE.Spline: .getControlPointsArray() has been removed.") + }, + reparametrizeByArcLength: function () { + console.error("THREE.Spline: .reparametrizeByArcLength() has been removed.") + } + }), + ol.prototype.setColors = function () { + console.error("THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.") + }, + _s.prototype.update = function () { + console.error("THREE.SkeletonHelper: update() no longer needs to be called.") + }, + Object.assign(Yr.prototype, { + extractUrlBase: function (A) { + return console.warn("THREE.Loader: .extractUrlBase() has been deprecated. Use THREE.LoaderUtils.extractUrlBase() instead."), + La.extractUrlBase(A) + } + }), + Yr.Handlers = { + add: function () { + console.error("THREE.Loader: Handlers.add() has been removed. Use LoadingManager.addHandler() instead.") + }, + get: function () { + console.error("THREE.Loader: Handlers.get() has been removed. Use LoadingManager.getHandler() instead.") + } + }, + Object.assign(Pa.prototype, { + setTexturePath: function (A) { + return console.warn("THREE.ObjectLoader: .setTexturePath() has been renamed to .setResourcePath()."), + this.setResourcePath(A) + } + }), + Object.assign(Ps.prototype, { + center: function (A) { + return console.warn("THREE.Box2: .center() has been renamed to .getCenter()."), + this.getCenter(A) + }, + empty: function () { + return console.warn("THREE.Box2: .empty() has been renamed to .isEmpty()."), + this.isEmpty() + }, + isIntersectionBox: function (A) { + return console.warn("THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox()."), + this.intersectsBox(A) + }, + size: function (A) { + return console.warn("THREE.Box2: .size() has been renamed to .getSize()."), + this.getSize(A) + } + }), + Object.assign(aA.prototype, { + center: function (A) { + return console.warn("THREE.Box3: .center() has been renamed to .getCenter()."), + this.getCenter(A) + }, + empty: function () { + return console.warn("THREE.Box3: .empty() has been renamed to .isEmpty()."), + this.isEmpty() + }, + isIntersectionBox: function (A) { + return console.warn("THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox()."), + this.intersectsBox(A) + }, + isIntersectionSphere: function (A) { + return console.warn("THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere()."), + this.intersectsSphere(A) + }, + size: function (A) { + return console.warn("THREE.Box3: .size() has been renamed to .getSize()."), + this.getSize(A) + } + }), + Ze.prototype.setFromMatrix = function (A) { + return console.warn("THREE.Frustum: .setFromMatrix() has been renamed to .setFromProjectionMatrix()."), + this.setFromProjectionMatrix(A) + }, + Hs.prototype.center = function (A) { + return console.warn("THREE.Line3: .center() has been renamed to .getCenter()."), + this.getCenter(A) + }, + Object.assign(a, { + random16: function () { + return console.warn("THREE.Math: .random16() has been deprecated. Use Math.random() instead."), + Math.random() + }, + nearestPowerOfTwo: function (A) { + return console.warn("THREE.Math: .nearestPowerOfTwo() has been renamed to .floorPowerOfTwo()."), + a.floorPowerOfTwo(A) + }, + nextPowerOfTwo: function (A) { + return console.warn("THREE.Math: .nextPowerOfTwo() has been renamed to .ceilPowerOfTwo()."), + a.ceilPowerOfTwo(A) + } + }), + Object.assign(l.prototype, { + flattenToArrayOffset: function (A, e) { + return console.warn("THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead."), + this.toArray(A, e) + }, + multiplyVector3: function (A) { + return console.warn("THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead."), + A.applyMatrix3(this) + }, + multiplyVector3Array: function () { + console.error("THREE.Matrix3: .multiplyVector3Array() has been removed.") + }, + applyToBufferAttribute: function (A) { + return console.warn("THREE.Matrix3: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix3( matrix ) instead."), + A.applyMatrix3(this) + }, + applyToVector3Array: function () { + console.error("THREE.Matrix3: .applyToVector3Array() has been removed.") + } + }), + Object.assign(M.prototype, { + extractPosition: function (A) { + return console.warn("THREE.Matrix4: .extractPosition() has been renamed to .copyPosition()."), + this.copyPosition(A) + }, + flattenToArrayOffset: function (A, e) { + return console.warn("THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead."), + this.toArray(A, e) + }, + getPosition: function () { + return console.warn("THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead."), + (new y).setFromMatrixColumn(this, 3) + }, + setRotationFromQuaternion: function (A) { + return console.warn("THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion()."), + this.makeRotationFromQuaternion(A) + }, + multiplyToArray: function () { + console.warn("THREE.Matrix4: .multiplyToArray() has been removed.") + }, + multiplyVector3: function (A) { + return console.warn("THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead."), + A.applyMatrix4(this) + }, + multiplyVector4: function (A) { + return console.warn("THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead."), + A.applyMatrix4(this) + }, + multiplyVector3Array: function () { + console.error("THREE.Matrix4: .multiplyVector3Array() has been removed.") + }, + rotateAxis: function (A) { + console.warn("THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead."), + A.transformDirection(this) + }, + crossVector: function (A) { + return console.warn("THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead."), + A.applyMatrix4(this) + }, + translate: function () { + console.error("THREE.Matrix4: .translate() has been removed.") + }, + rotateX: function () { + console.error("THREE.Matrix4: .rotateX() has been removed.") + }, + rotateY: function () { + console.error("THREE.Matrix4: .rotateY() has been removed.") + }, + rotateZ: function () { + console.error("THREE.Matrix4: .rotateZ() has been removed.") + }, + rotateByAxis: function () { + console.error("THREE.Matrix4: .rotateByAxis() has been removed.") + }, + applyToBufferAttribute: function (A) { + return console.warn("THREE.Matrix4: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix4( matrix ) instead."), + A.applyMatrix4(this) + }, + applyToVector3Array: function () { + console.error("THREE.Matrix4: .applyToVector3Array() has been removed.") + }, + makeFrustum: function (A, e, t, i, o, n) { + return console.warn("THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead."), + this.makePerspective(A, e, i, t, o, n) + } + }), + EA.prototype.isIntersectionLine = function (A) { + return console.warn("THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine()."), + this.intersectsLine(A) + }, + f.prototype.multiplyVector3 = function (A) { + return console.warn("THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead."), + A.applyQuaternion(this) + }, + Object.assign(CA.prototype, { + isIntersectionBox: function (A) { + return console.warn("THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox()."), + this.intersectsBox(A) + }, + isIntersectionPlane: function (A) { + return console.warn("THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane()."), + this.intersectsPlane(A) + }, + isIntersectionSphere: function (A) { + return console.warn("THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere()."), + this.intersectsSphere(A) + } + }), + Object.assign(RA.prototype, { + area: function () { + return console.warn("THREE.Triangle: .area() has been renamed to .getArea()."), + this.getArea() + }, + barycoordFromPoint: function (A, e) { + return console.warn("THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord()."), + this.getBarycoord(A, e) + }, + midpoint: function (A) { + return console.warn("THREE.Triangle: .midpoint() has been renamed to .getMidpoint()."), + this.getMidpoint(A) + }, + normal: function (A) { + return console.warn("THREE.Triangle: .normal() has been renamed to .getNormal()."), + this.getNormal(A) + }, + plane: function (A) { + return console.warn("THREE.Triangle: .plane() has been renamed to .getPlane()."), + this.getPlane(A) + } + }), + Object.assign(RA, { + barycoordFromPoint: function (A, e, t, i, o) { + return console.warn("THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord()."), + RA.getBarycoord(A, e, t, i, o) + }, + normal: function (A, e, t, i) { + return console.warn("THREE.Triangle: .normal() has been renamed to .getNormal()."), + RA.getNormal(A, e, t, i) + } + }), + Object.assign(Ba.prototype, { + extractAllPoints: function (A) { + return console.warn("THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead."), + this.extractPoints(A) + }, + extrude: function (A) { + return console.warn("THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead."), + new Jn(this, A) + }, + makeGeometry: function (A) { + return console.warn("THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead."), + new rr(this, A) + } + }), + Object.assign(s.prototype, { + fromAttribute: function (A, e, t) { + return console.warn("THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute()."), + this.fromBufferAttribute(A, e, t) + }, + distanceToManhattan: function (A) { + return console.warn("THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo()."), + this.manhattanDistanceTo(A) + }, + lengthManhattan: function () { + return console.warn("THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength()."), + this.manhattanLength() + } + }), + Object.assign(y.prototype, { + setEulerFromRotationMatrix: function () { + console.error("THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.") + }, + setEulerFromQuaternion: function () { + console.error("THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.") + }, + getPositionFromMatrix: function (A) { + return console.warn("THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition()."), + this.setFromMatrixPosition(A) + }, + getScaleFromMatrix: function (A) { + return console.warn("THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale()."), + this.setFromMatrixScale(A) + }, + getColumnFromMatrix: function (A, e) { + return console.warn("THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn()."), + this.setFromMatrixColumn(e, A) + }, + applyProjection: function (A) { + return console.warn("THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead."), + this.applyMatrix4(A) + }, + fromAttribute: function (A, e, t) { + return console.warn("THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute()."), + this.fromBufferAttribute(A, e, t) + }, + distanceToManhattan: function (A) { + return console.warn("THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo()."), + this.manhattanDistanceTo(A) + }, + lengthManhattan: function () { + return console.warn("THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength()."), + this.manhattanLength() + } + }), + Object.assign(p.prototype, { + fromAttribute: function (A, e, t) { + return console.warn("THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute()."), + this.fromBufferAttribute(A, e, t) + }, + lengthManhattan: function () { + return console.warn("THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength()."), + this.manhattanLength() + } + }), + Object.assign(De.prototype, { + computeTangents: function () { + console.error("THREE.Geometry: .computeTangents() has been removed.") + }, + computeLineDistances: function () { + console.error("THREE.Geometry: .computeLineDistances() has been removed. Use THREE.Line.computeLineDistances() instead.") + }, + applyMatrix: function (A) { + return console.warn("THREE.Geometry: .applyMatrix() has been renamed to .applyMatrix4()."), + this.applyMatrix4(A) + } + }), + Object.assign(H.prototype, { + getChildByName: function (A) { + return console.warn("THREE.Object3D: .getChildByName() has been renamed to .getObjectByName()."), + this.getObjectByName(A) + }, + renderDepth: function () { + console.warn("THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.") + }, + translate: function (A, e) { + return console.warn("THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead."), + this.translateOnAxis(e, A) + }, + getWorldRotation: function () { + console.error("THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.") + }, + applyMatrix: function (A) { + return console.warn("THREE.Object3D: .applyMatrix() has been renamed to .applyMatrix4()."), + this.applyMatrix4(A) + } + }), + Object.defineProperties(H.prototype, { + eulerOrder: { + get: function () { + return console.warn("THREE.Object3D: .eulerOrder is now .rotation.order."), + this.rotation.order + }, + set: function (A) { + console.warn("THREE.Object3D: .eulerOrder is now .rotation.order."), + this.rotation.order = A + } + }, + useQuaternion: { + get: function () { + console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.") + }, + set: function () { + console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.") + } + } + }), + Object.assign(Ue.prototype, { + setDrawMode: function () { + console.error("THREE.Mesh: .setDrawMode() has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.") + } + }), + Object.defineProperties(Ue.prototype, { + drawMode: { + get: function () { + return console.error("THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode."), + 0 + }, + set: function () { + console.error("THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.") + } + } + }), + Object.defineProperties(xo.prototype, { + objects: { + get: function () { + return console.warn("THREE.LOD: .objects has been renamed to .levels."), + this.levels + } + } + }), + Object.defineProperty(bo.prototype, "useVertexTexture", { + get: function () { + console.warn("THREE.Skeleton: useVertexTexture has been removed.") + }, + set: function () { + console.warn("THREE.Skeleton: useVertexTexture has been removed.") + } + }), + So.prototype.initBones = function () { + console.error("THREE.SkinnedMesh: initBones() has been removed.") + }, + Object.defineProperty(ea.prototype, "__arcLengthDivisions", { + get: function () { + return console.warn("THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions."), + this.arcLengthDivisions + }, + set: function (A) { + console.warn("THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions."), + this.arcLengthDivisions = A + } + }), + je.prototype.setLens = function (A, e) { + console.warn("THREE.PerspectiveCamera.setLens is deprecated. Use .setFocalLength and .filmGauge for a photographic setup."), + void 0 !== e && (this.filmGauge = e), + this.setFocalLength(A) + }, + Object.defineProperties(xa.prototype, { + onlyShadow: { + set: function () { + console.warn("THREE.Light: .onlyShadow has been removed.") + } + }, + shadowCameraFov: { + set: function (A) { + console.warn("THREE.Light: .shadowCameraFov is now .shadow.camera.fov."), + this.shadow.camera.fov = A + } + }, + shadowCameraLeft: { + set: function (A) { + console.warn("THREE.Light: .shadowCameraLeft is now .shadow.camera.left."), + this.shadow.camera.left = A + } + }, + shadowCameraRight: { + set: function (A) { + console.warn("THREE.Light: .shadowCameraRight is now .shadow.camera.right."), + this.shadow.camera.right = A + } + }, + shadowCameraTop: { + set: function (A) { + console.warn("THREE.Light: .shadowCameraTop is now .shadow.camera.top."), + this.shadow.camera.top = A + } + }, + shadowCameraBottom: { + set: function (A) { + console.warn("THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom."), + this.shadow.camera.bottom = A + } + }, + shadowCameraNear: { + set: function (A) { + console.warn("THREE.Light: .shadowCameraNear is now .shadow.camera.near."), + this.shadow.camera.near = A + } + }, + shadowCameraFar: { + set: function (A) { + console.warn("THREE.Light: .shadowCameraFar is now .shadow.camera.far."), + this.shadow.camera.far = A + } + }, + shadowCameraVisible: { + set: function () { + console.warn("THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.") + } + }, + shadowBias: { + set: function (A) { + console.warn("THREE.Light: .shadowBias is now .shadow.bias."), + this.shadow.bias = A + } + }, + shadowDarkness: { + set: function () { + console.warn("THREE.Light: .shadowDarkness has been removed.") + } + }, + shadowMapWidth: { + set: function (A) { + console.warn("THREE.Light: .shadowMapWidth is now .shadow.mapSize.width."), + this.shadow.mapSize.width = A + } + }, + shadowMapHeight: { + set: function (A) { + console.warn("THREE.Light: .shadowMapHeight is now .shadow.mapSize.height."), + this.shadow.mapSize.height = A + } + } + }), + Object.defineProperties(YA.prototype, { + length: { + get: function () { + return console.warn("THREE.BufferAttribute: .length has been deprecated. Use .count instead."), + this.array.length + } + }, + dynamic: { + get: function () { + return console.warn("THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead."), + 35048 === this.usage + }, + set: function () { + console.warn("THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead."), + this.setUsage(35048) + } + } + }), + Object.assign(YA.prototype, { + setDynamic: function (A) { + return console.warn("THREE.BufferAttribute: .setDynamic() has been deprecated. Use .setUsage() instead."), + this.setUsage(!0 === A ? 35048 : 35044), + this + }, + copyIndicesArray: function () { + console.error("THREE.BufferAttribute: .copyIndicesArray() has been removed.") + }, + setArray: function () { + console.error("THREE.BufferAttribute: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers") + } + }), + Object.assign(he.prototype, { + addIndex: function (A) { + console.warn("THREE.BufferGeometry: .addIndex() has been renamed to .setIndex()."), + this.setIndex(A) + }, + addAttribute: function (A, e) { + return console.warn("THREE.BufferGeometry: .addAttribute() has been renamed to .setAttribute()."), + e && e.isBufferAttribute || e && e.isInterleavedBufferAttribute ? "index" === A ? (console.warn("THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute."), + this.setIndex(e), + this) : this.setAttribute(A, e) : (console.warn("THREE.BufferGeometry: .addAttribute() now expects ( name, attribute )."), + this.setAttribute(A, new YA(arguments[1], arguments[2]))) + }, + addDrawCall: function (A, e, t) { + void 0 !== t && console.warn("THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset."), + console.warn("THREE.BufferGeometry: .addDrawCall() is now .addGroup()."), + this.addGroup(A, e) + }, + clearDrawCalls: function () { + console.warn("THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups()."), + this.clearGroups() + }, + computeTangents: function () { + console.warn("THREE.BufferGeometry: .computeTangents() has been removed.") + }, + computeOffsets: function () { + console.warn("THREE.BufferGeometry: .computeOffsets() has been removed.") + }, + removeAttribute: function (A) { + return console.warn("THREE.BufferGeometry: .removeAttribute() has been renamed to .deleteAttribute()."), + this.deleteAttribute(A) + }, + applyMatrix: function (A) { + return console.warn("THREE.BufferGeometry: .applyMatrix() has been renamed to .applyMatrix4()."), + this.applyMatrix4(A) + } + }), + Object.defineProperties(he.prototype, { + drawcalls: { + get: function () { + return console.error("THREE.BufferGeometry: .drawcalls has been renamed to .groups."), + this.groups + } + }, + offsets: { + get: function () { + return console.warn("THREE.BufferGeometry: .offsets has been renamed to .groups."), + this.groups + } + } + }), + Object.defineProperties(Ds.prototype, { + linePrecision: { + get: function () { + return console.warn("THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead."), + this.params.Line.threshold + }, + set: function (A) { + console.warn("THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead."), + this.params.Line.threshold = A + } + } + }), + Object.defineProperties(to.prototype, { + dynamic: { + get: function () { + return console.warn("THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead."), + 35048 === this.usage + }, + set: function (A) { + console.warn("THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead."), + this.setUsage(A) + } + } + }), + Object.assign(to.prototype, { + setDynamic: function (A) { + return console.warn("THREE.InterleavedBuffer: .setDynamic() has been deprecated. Use .setUsage() instead."), + this.setUsage(!0 === A ? 35048 : 35044), + this + }, + setArray: function () { + console.error("THREE.InterleavedBuffer: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers") + } + }), + Object.assign(zn.prototype, { + getArrays: function () { + console.error("THREE.ExtrudeBufferGeometry: .getArrays() has been removed.") + }, + addShapeList: function () { + console.error("THREE.ExtrudeBufferGeometry: .addShapeList() has been removed.") + }, + addShape: function () { + console.error("THREE.ExtrudeBufferGeometry: .addShape() has been removed.") + } + }), + Object.defineProperties(Ts.prototype, { + dynamic: { + set: function () { + console.warn("THREE.Uniform: .dynamic has been removed. Use object.onBeforeRender() instead.") + } + }, + onUpdate: { + value: function () { + return console.warn("THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead."), + this + } + } + }), + Object.defineProperties(qA.prototype, { + wrapAround: { + get: function () { + console.warn("THREE.Material: .wrapAround has been removed.") + }, + set: function () { + console.warn("THREE.Material: .wrapAround has been removed.") + } + }, + overdraw: { + get: function () { + console.warn("THREE.Material: .overdraw has been removed.") + }, + set: function () { + console.warn("THREE.Material: .overdraw has been removed.") + } + }, + wrapRGB: { + get: function () { + return console.warn("THREE.Material: .wrapRGB has been removed."), + new LA + } + }, + shading: { + get: function () { + console.error("THREE." + this.type + ": .shading has been removed. Use the boolean .flatShading instead.") + }, + set: function (A) { + console.warn("THREE." + this.type + ": .shading has been removed. Use the boolean .flatShading instead."), + this.flatShading = 1 === A + } + }, + stencilMask: { + get: function () { + return console.warn("THREE." + this.type + ": .stencilMask has been removed. Use .stencilFuncMask instead."), + this.stencilFuncMask + }, + set: function (A) { + console.warn("THREE." + this.type + ": .stencilMask has been removed. Use .stencilFuncMask instead."), + this.stencilFuncMask = A + } + } + }), + Object.defineProperties(Ir.prototype, { + metal: { + get: function () { + return console.warn("THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead."), + !1 + }, + set: function () { + console.warn("THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead") + } + } + }), + Object.defineProperties(Pe.prototype, { + derivatives: { + get: function () { + return console.warn("THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives."), + this.extensions.derivatives + }, + set: function (A) { + console.warn("THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives."), + this.extensions.derivatives = A + } + } + }), + Object.assign($i.prototype, { + clearTarget: function (A, e, t, i) { + console.warn("THREE.WebGLRenderer: .clearTarget() has been deprecated. Use .setRenderTarget() and .clear() instead."), + this.setRenderTarget(A), + this.clear(e, t, i) + }, + animate: function (A) { + console.warn("THREE.WebGLRenderer: .animate() is now .setAnimationLoop()."), + this.setAnimationLoop(A) + }, + getCurrentRenderTarget: function () { + return console.warn("THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget()."), + this.getRenderTarget() + }, + getMaxAnisotropy: function () { + return console.warn("THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy()."), + this.capabilities.getMaxAnisotropy() + }, + getPrecision: function () { + return console.warn("THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision."), + this.capabilities.precision + }, + resetGLState: function () { + return console.warn("THREE.WebGLRenderer: .resetGLState() is now .state.reset()."), + this.state.reset() + }, + supportsFloatTextures: function () { + return console.warn("THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( 'OES_texture_float' )."), + this.extensions.get("OES_texture_float") + }, + supportsHalfFloatTextures: function () { + return console.warn("THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( 'OES_texture_half_float' )."), + this.extensions.get("OES_texture_half_float") + }, + supportsStandardDerivatives: function () { + return console.warn("THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( 'OES_standard_derivatives' )."), + this.extensions.get("OES_standard_derivatives") + }, + supportsCompressedTextureS3TC: function () { + return console.warn("THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( 'WEBGL_compressed_texture_s3tc' )."), + this.extensions.get("WEBGL_compressed_texture_s3tc") + }, + supportsCompressedTexturePVRTC: function () { + return console.warn("THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( 'WEBGL_compressed_texture_pvrtc' )."), + this.extensions.get("WEBGL_compressed_texture_pvrtc") + }, + supportsBlendMinMax: function () { + return console.warn("THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( 'EXT_blend_minmax' )."), + this.extensions.get("EXT_blend_minmax") + }, + supportsVertexTextures: function () { + return console.warn("THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures."), + this.capabilities.vertexTextures + }, + supportsInstancedArrays: function () { + return console.warn("THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( 'ANGLE_instanced_arrays' )."), + this.extensions.get("ANGLE_instanced_arrays") + }, + enableScissorTest: function (A) { + console.warn("THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest()."), + this.setScissorTest(A) + }, + initMaterial: function () { + console.warn("THREE.WebGLRenderer: .initMaterial() has been removed.") + }, + addPrePlugin: function () { + console.warn("THREE.WebGLRenderer: .addPrePlugin() has been removed.") + }, + addPostPlugin: function () { + console.warn("THREE.WebGLRenderer: .addPostPlugin() has been removed.") + }, + updateShadowMap: function () { + console.warn("THREE.WebGLRenderer: .updateShadowMap() has been removed.") + }, + setFaceCulling: function () { + console.warn("THREE.WebGLRenderer: .setFaceCulling() has been removed.") + }, + allocTextureUnit: function () { + console.warn("THREE.WebGLRenderer: .allocTextureUnit() has been removed.") + }, + setTexture: function () { + console.warn("THREE.WebGLRenderer: .setTexture() has been removed.") + }, + setTexture2D: function () { + console.warn("THREE.WebGLRenderer: .setTexture2D() has been removed.") + }, + setTextureCube: function () { + console.warn("THREE.WebGLRenderer: .setTextureCube() has been removed.") + }, + getActiveMipMapLevel: function () { + return console.warn("THREE.WebGLRenderer: .getActiveMipMapLevel() is now .getActiveMipmapLevel()."), + this.getActiveMipmapLevel() + } + }), + Object.defineProperties($i.prototype, { + shadowMapEnabled: { + get: function () { + return this.shadowMap.enabled + }, + set: function (A) { + console.warn("THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled."), + this.shadowMap.enabled = A + } + }, + shadowMapType: { + get: function () { + return this.shadowMap.type + }, + set: function (A) { + console.warn("THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type."), + this.shadowMap.type = A + } + }, + shadowMapCullFace: { + get: function () { + console.warn("THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.") + }, + set: function () { + console.warn("THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.") + } + }, + context: { + get: function () { + return console.warn("THREE.WebGLRenderer: .context has been removed. Use .getContext() instead."), + this.getContext() + } + }, + vr: { + get: function () { + return console.warn("THREE.WebGLRenderer: .vr has been renamed to .xr"), + this.xr + } + }, + gammaInput: { + get: function () { + return console.warn("THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead."), + !1 + }, + set: function () { + console.warn("THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.") + } + }, + gammaOutput: { + get: function () { + return console.warn("THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead."), + !1 + }, + set: function (A) { + console.warn("THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead."), + this.outputEncoding = !0 === A ? 3001 : 3e3 + } + } + }), + Object.defineProperties(Yi.prototype, { + cullFace: { + get: function () { + console.warn("THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.") + }, + set: function () { + console.warn("THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.") + } + }, + renderReverseSided: { + get: function () { + console.warn("THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.") + }, + set: function () { + console.warn("THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.") + } + }, + renderSingleSided: { + get: function () { + console.warn("THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.") + }, + set: function () { + console.warn("THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.") + } + } + }), + Object.defineProperties(g.prototype, { + wrapS: { + get: function () { + return console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS."), + this.texture.wrapS + }, + set: function (A) { + console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS."), + this.texture.wrapS = A + } + }, + wrapT: { + get: function () { + return console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT."), + this.texture.wrapT + }, + set: function (A) { + console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT."), + this.texture.wrapT = A + } + }, + magFilter: { + get: function () { + return console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter."), + this.texture.magFilter + }, + set: function (A) { + console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter."), + this.texture.magFilter = A + } + }, + minFilter: { + get: function () { + return console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter."), + this.texture.minFilter + }, + set: function (A) { + console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter."), + this.texture.minFilter = A + } + }, + anisotropy: { + get: function () { + return console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy."), + this.texture.anisotropy + }, + set: function (A) { + console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy."), + this.texture.anisotropy = A + } + }, + offset: { + get: function () { + return console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset."), + this.texture.offset + }, + set: function (A) { + console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset."), + this.texture.offset = A + } + }, + repeat: { + get: function () { + return console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat."), + this.texture.repeat + }, + set: function (A) { + console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat."), + this.texture.repeat = A + } + }, + format: { + get: function () { + return console.warn("THREE.WebGLRenderTarget: .format is now .texture.format."), + this.texture.format + }, + set: function (A) { + console.warn("THREE.WebGLRenderTarget: .format is now .texture.format."), + this.texture.format = A + } + }, + type: { + get: function () { + return console.warn("THREE.WebGLRenderTarget: .type is now .texture.type."), + this.texture.type + }, + set: function (A) { + console.warn("THREE.WebGLRenderTarget: .type is now .texture.type."), + this.texture.type = A + } + }, + generateMipmaps: { + get: function () { + return console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps."), + this.texture.generateMipmaps + }, + set: function (A) { + console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps."), + this.texture.generateMipmaps = A + } + } + }), + Object.defineProperties(ps.prototype, { + load: { + value: function (A) { + console.warn("THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead."); + var e = this; + return (new $a).load(A, (function (A) { + e.setBuffer(A) + })), + this + } + }, + startTime: { + set: function () { + console.warn("THREE.Audio: .startTime is now .play( delay ).") + } + } + }), + ys.prototype.getData = function () { + return console.warn("THREE.AudioAnalyser: .getData() is now .getFrequencyData()."), + this.getFrequencyData() + }, + He.prototype.updateCubeMap = function (A, e) { + return console.warn("THREE.CubeCamera: .updateCubeMap() is now .update()."), + this.update(A, e) + }; + var rc = { + merge: function (A, e, t) { + var i; + console.warn("THREE.GeometryUtils: .merge() has been moved to Geometry. Use geometry.merge( geometry2, matrix, materialIndexOffset ) instead."), + e.isMesh && (e.matrixAutoUpdate && e.updateMatrix(), + i = e.matrix, + e = e.geometry), + A.merge(e, i, t) + }, + center: function (A) { + return console.warn("THREE.GeometryUtils: .center() has been moved to Geometry. Use geometry.center() instead."), + A.center() + } + }; + c.crossOrigin = void 0, + c.loadTexture = function (A, e, t, i) { + console.warn("THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead."); + var o = new Aa; + o.setCrossOrigin(this.crossOrigin); + var n = o.load(A, t, void 0, i); + return e && (n.mapping = e), + n + }, + c.loadTextureCube = function (A, e, t, i) { + console.warn("THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead."); + var o = new $r; + o.setCrossOrigin(this.crossOrigin); + var n = o.load(A, t, void 0, i); + return e && (n.mapping = e), + n + }, + c.loadCompressedTexture = function () { + console.error("THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.") + }, + c.loadCompressedTextureCube = function () { + console.error("THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.") + }; + var ac = { + createMultiMaterialObject: function () { + console.error("THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js") + }, + detach: function () { + console.error("THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js") + }, + attach: function () { + console.error("THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js") + } + }; + "undefined" != typeof __THREE_DEVTOOLS__ && __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register", { + detail: { + revision: "115" + } + })); + var sc = Object.freeze({ + ACESFilmicToneMapping: 5, + AddEquation: 100, + AddOperation: 2, + AdditiveBlending: 2, + AlphaFormat: 1021, + AlwaysDepth: 1, + AlwaysStencilFunc: 519, + AmbientLight: Ta, + AmbientLightProbe: is, + AnimationClip: Gr, + AnimationLoader: zr, + AnimationMixer: Rs, + AnimationObjectGroup: Ks, + AnimationUtils: br, + ArcCurve: ia, + ArrayCamera: Zi, + ArrowHelper: Il, + Audio: ps, + AudioAnalyser: ys, + AudioContext: _a, + AudioListener: ds, + AudioLoader: $a, + AxesHelper: El, + AxisHelper: function (A) { + return console.warn("THREE.AxisHelper has been renamed to THREE.AxesHelper."), + new El(A) + }, + BackSide: 1, + BasicDepthPacking: 3200, + BasicShadowMap: 0, + BinaryTextureLoader: function (A) { + return console.warn("THREE.BinaryTextureLoader has been renamed to THREE.DataTextureLoader."), + new Xr(A) + }, + Bone: Uo, + BooleanKeyframeTrack: Tr, + BoundingBoxHelper: function (A, e) { + return console.warn("THREE.BoundingBoxHelper has been deprecated. Creating a THREE.BoxHelper instead."), + new ul(A, e) + }, + Box2: Ps, + Box3: aA, + Box3Helper: fl, + BoxBufferGeometry: Ne, + BoxGeometry: Le, + BoxHelper: ul, + BufferAttribute: YA, + BufferGeometry: he, + BufferGeometryLoader: Va, + ByteType: 1010, + Cache: qr, + Camera: qe, + CameraHelper: dl, + CanvasRenderer: function () { + console.error("THREE.CanvasRenderer has been removed") + }, + CanvasTexture: en, + CatmullRomCurve3: la, + CineonToneMapping: 4, + CircleBufferGeometry: ur, + CircleGeometry: gr, + ClampToEdgeWrapping: 1001, + Clock: as, + ClosedSplineCurve3: ic, + Color: LA, + ColorKeyframeTrack: kr, + CompressedTexture: An, + CompressedTextureLoader: Zr, + ConeBufferGeometry: pr, + ConeGeometry: dr, + CubeCamera: He, + CubeGeometry: Le, + CubeReflectionMapping: 301, + CubeRefractionMapping: 302, + CubeTexture: ut, + CubeTextureLoader: $r, + CubeUVReflectionMapping: 306, + CubeUVRefractionMapping: 307, + CubicBezierCurve: pa, + CubicBezierCurve3: ga, + CubicInterpolant: Fr, + CullFaceBack: 1, + CullFaceFront: 2, + CullFaceFrontBack: 3, + CullFaceNone: 0, + Curve: ea, + CurvePath: Ia, + CustomBlending: 5, + CylinderBufferGeometry: hr, + CylinderGeometry: cr, + Cylindrical: Vs, + DataTexture: We, + DataTexture2DArray: ft, + DataTexture3D: mt, + DataTextureLoader: Xr, + DecrementStencilOp: 7683, + DecrementWrapStencilOp: 34056, + DefaultLoadingManager: Hr, + DepthFormat: 1026, + DepthStencilFormat: 1027, + DepthTexture: tn, + DirectionalLight: Ra, + DirectionalLightHelper: ll, + DirectionalLightShadow: Qa, + DiscreteInterpolant: Qr, + DodecahedronBufferGeometry: fn, + DodecahedronGeometry: un, + DoubleSide: 2, + DstAlphaFactor: 206, + DstColorFactor: 208, + DynamicBufferAttribute: function (A, e) { + return console.warn("THREE.DynamicBufferAttribute has been removed. Use new THREE.BufferAttribute().setUsage( THREE.DynamicDrawUsage ) instead."), + new YA(A, e).setUsage(35048) + }, + DynamicCopyUsage: 35050, + DynamicDrawUsage: 35048, + DynamicReadUsage: 35049, + EdgesGeometry: lr, + EdgesHelper: function (A, e) { + return console.warn("THREE.EdgesHelper has been removed. Use THREE.EdgesGeometry instead."), + new jo(new lr(A.geometry), new ko({ + color: void 0 !== e ? e : 16777215 + })) + }, + EllipseCurve: ta, + EqualDepth: 4, + EqualStencilFunc: 514, + EquirectangularReflectionMapping: 303, + EquirectangularRefractionMapping: 304, + Euler: F, + EventDispatcher: i, + ExtrudeBufferGeometry: zn, + ExtrudeGeometry: Jn, + Face3: GA, + Face4: function (A, e, t, i, o, n, r) { + return console.warn("THREE.Face4 has been removed. A THREE.Face3 will be created instead."), + new GA(A, e, t, o, n, r) + }, + FaceColors: 1, + FileLoader: Jr, + FlatShading: 1, + Float32Attribute: function (A, e) { + return console.warn("THREE.Float32Attribute has been removed. Use new THREE.Float32BufferAttribute() instead."), + new Ae(A, e) + }, + Float32BufferAttribute: Ae, + Float64Attribute: function (A, e) { + return console.warn("THREE.Float64Attribute has been removed. Use new THREE.Float64BufferAttribute() instead."), + new ee(A, e) + }, + Float64BufferAttribute: ee, + FloatType: 1015, + Fog: eo, + FogExp2: Ao, + Font: za, + FontLoader: Xa, + FrontFaceDirectionCCW: 1, + FrontFaceDirectionCW: 0, + FrontSide: 0, + Frustum: Ze, + GammaEncoding: 3007, + Geometry: De, + GeometryUtils: rc, + GreaterDepth: 6, + GreaterEqualDepth: 5, + GreaterEqualStencilFunc: 518, + GreaterStencilFunc: 516, + GridHelper: ol, + Group: Xi, + HalfFloatType: 1016, + HemisphereLight: Sa, + HemisphereLightHelper: il, + HemisphereLightProbe: ts, + IcosahedronBufferGeometry: gn, + IcosahedronGeometry: pn, + ImageBitmapLoader: Wa, + ImageLoader: _r, + ImageUtils: c, + ImmediateRenderObject: Ys, + IncrementStencilOp: 7682, + IncrementWrapStencilOp: 34055, + InstancedBufferAttribute: Oa, + InstancedBufferGeometry: Na, + InstancedInterleavedBuffer: ks, + InstancedMesh: To, + Int16Attribute: function (A, e) { + return console.warn("THREE.Int16Attribute has been removed. Use new THREE.Int16BufferAttribute() instead."), + new ZA(A, e) + }, + Int16BufferAttribute: ZA, + Int32Attribute: function (A, e) { + return console.warn("THREE.Int32Attribute has been removed. Use new THREE.Int32BufferAttribute() instead."), + new _A(A, e) + }, + Int32BufferAttribute: _A, + Int8Attribute: function (A, e) { + return console.warn("THREE.Int8Attribute has been removed. Use new THREE.Int8BufferAttribute() instead."), + new WA(A, e) + }, + Int8BufferAttribute: WA, + IntType: 1013, + InterleavedBuffer: to, + InterleavedBufferAttribute: no, + Interpolant: Ur, + InterpolateDiscrete: 2300, + InterpolateLinear: 2301, + InterpolateSmooth: 2302, + InvertStencilOp: 5386, + JSONLoader: function () { + console.error("THREE.JSONLoader has been removed.") + }, + KeepStencilOp: 7680, + KeyframeTrack: Rr, + LOD: xo, + LatheBufferGeometry: nr, + LatheGeometry: or, + Layers: K, + LensFlare: function () { + console.error("THREE.LensFlare has been moved to /examples/jsm/objects/Lensflare.js") + }, + LessDepth: 2, + LessEqualDepth: 3, + LessEqualStencilFunc: 515, + LessStencilFunc: 513, + Light: xa, + LightProbe: es, + LightShadow: wa, + Line: Go, + Line3: Hs, + LineBasicMaterial: ko, + LineCurve: ua, + LineCurve3: fa, + LineDashedMaterial: wr, + LineLoop: Ho, + LinePieces: 1, + LineSegments: jo, + LineStrip: 0, + LinearEncoding: 3e3, + LinearFilter: 1006, + LinearInterpolant: Kr, + LinearMipMapLinearFilter: 1008, + LinearMipMapNearestFilter: 1007, + LinearMipmapLinearFilter: 1008, + LinearMipmapNearestFilter: 1007, + LinearToneMapping: 1, + Loader: Yr, + LoaderUtils: La, + LoadingManager: jr, + LogLuvEncoding: 3003, + LoopOnce: 2200, + LoopPingPong: 2202, + LoopRepeat: 2201, + LuminanceAlphaFormat: 1025, + LuminanceFormat: 1024, + MOUSE: t, + Material: qA, + MaterialLoader: Da, + Math: a, + MathUtils: a, + Matrix3: l, + Matrix4: M, + MaxEquation: 104, + Mesh: Ue, + MeshBasicMaterial: jA, + MeshDepthMaterial: ji, + MeshDistanceMaterial: Hi, + MeshFaceMaterial: function (A) { + return console.warn("THREE.MeshFaceMaterial has been removed. Use an Array instead."), + A + }, + MeshLambertMaterial: xr, + MeshMatcapMaterial: Sr, + MeshNormalMaterial: Br, + MeshPhongMaterial: Ir, + MeshPhysicalMaterial: vr, + MeshStandardMaterial: yr, + MeshToonMaterial: Er, + MinEquation: 103, + MirroredRepeatWrapping: 1002, + MixOperation: 1, + MultiMaterial: function (A) { + return void 0 === A && (A = []), + console.warn("THREE.MultiMaterial has been removed. Use an Array instead."), + A.isMultiMaterial = !0, + A.materials = A, + A.clone = function () { + return A.slice() + }, + A + }, + MultiplyBlending: 4, + MultiplyOperation: 0, + NearestFilter: 1003, + NearestMipMapLinearFilter: 1005, + NearestMipMapNearestFilter: 1004, + NearestMipmapLinearFilter: 1005, + NearestMipmapNearestFilter: 1004, + NeverDepth: 0, + NeverStencilFunc: 512, + NoBlending: 0, + NoColors: 0, + NoToneMapping: 0, + NormalBlending: 1, + NotEqualDepth: 7, + NotEqualStencilFunc: 517, + NumberKeyframeTrack: Dr, + Object3D: H, + ObjectLoader: Pa, + ObjectSpaceNormalMap: 1, + OctahedronBufferGeometry: dn, + OctahedronGeometry: hn, + OneFactor: 201, + OneMinusDstAlphaFactor: 207, + OneMinusDstColorFactor: 209, + OneMinusSrcAlphaFactor: 205, + OneMinusSrcColorFactor: 203, + OrthographicCamera: Ka, + PCFShadowMap: 1, + PCFSoftShadowMap: 2, + PMREMGenerator: jl, + ParametricBufferGeometry: rn, + ParametricGeometry: nn, + Particle: function (A) { + return console.warn("THREE.Particle has been renamed to THREE.Sprite."), + new vo(A) + }, + ParticleBasicMaterial: function (A) { + return console.warn("THREE.ParticleBasicMaterial has been renamed to THREE.PointsMaterial."), + new Yo(A) + }, + ParticleSystem: function (A, e) { + return console.warn("THREE.ParticleSystem has been renamed to THREE.Points."), + new Xo(A, e) + }, + ParticleSystemMaterial: function (A) { + return console.warn("THREE.ParticleSystemMaterial has been renamed to THREE.PointsMaterial."), + new Yo(A) + }, + Path: Ea, + PerspectiveCamera: je, + Plane: EA, + PlaneBufferGeometry: et, + PlaneGeometry: At, + PlaneHelper: ml, + PointCloud: function (A, e) { + return console.warn("THREE.PointCloud has been renamed to THREE.Points."), + new Xo(A, e) + }, + PointCloudMaterial: function (A) { + return console.warn("THREE.PointCloudMaterial has been renamed to THREE.PointsMaterial."), + new Yo(A) + }, + PointLight: Fa, + PointLightHelper: $s, + Points: Xo, + PointsMaterial: Yo, + PolarGridHelper: nl, + PolyhedronBufferGeometry: sn, + PolyhedronGeometry: an, + PositionalAudio: Cs, + PropertyBinding: Fs, + PropertyMixer: vs, + QuadraticBezierCurve: ma, + QuadraticBezierCurve3: Ca, + Quaternion: f, + QuaternionKeyframeTrack: Nr, + QuaternionLinearInterpolant: Lr, + REVISION: "115", + RGBADepthPacking: 3201, + RGBAFormat: 1023, + RGBAIntegerFormat: 1033, + RGBA_ASTC_10x10_Format: 37819, + RGBA_ASTC_10x5_Format: 37816, + RGBA_ASTC_10x6_Format: 37817, + RGBA_ASTC_10x8_Format: 37818, + RGBA_ASTC_12x10_Format: 37820, + RGBA_ASTC_12x12_Format: 37821, + RGBA_ASTC_4x4_Format: 37808, + RGBA_ASTC_5x4_Format: 37809, + RGBA_ASTC_5x5_Format: 37810, + RGBA_ASTC_6x5_Format: 37811, + RGBA_ASTC_6x6_Format: 37812, + RGBA_ASTC_8x5_Format: 37813, + RGBA_ASTC_8x6_Format: 37814, + RGBA_ASTC_8x8_Format: 37815, + RGBA_BPTC_Format: 36492, + RGBA_ETC2_EAC_Format: 37496, + RGBA_PVRTC_2BPPV1_Format: 35843, + RGBA_PVRTC_4BPPV1_Format: 35842, + RGBA_S3TC_DXT1_Format: 33777, + RGBA_S3TC_DXT3_Format: 33778, + RGBA_S3TC_DXT5_Format: 33779, + RGBDEncoding: 3006, + RGBEEncoding: 3002, + RGBEFormat: 1023, + RGBFormat: 1022, + RGBIntegerFormat: 1032, + RGBM16Encoding: 3005, + RGBM7Encoding: 3004, + RGB_ETC1_Format: 36196, + RGB_ETC2_Format: 37492, + RGB_PVRTC_2BPPV1_Format: 35841, + RGB_PVRTC_4BPPV1_Format: 35840, + RGB_S3TC_DXT1_Format: 33776, + RGFormat: 1030, + RGIntegerFormat: 1031, + RawShaderMaterial: Cr, + Ray: CA, + Raycaster: Ds, + RectAreaLight: ka, + RedFormat: 1028, + RedIntegerFormat: 1029, + ReinhardToneMapping: 2, + RepeatWrapping: 1e3, + ReplaceStencilOp: 7681, + ReverseSubtractEquation: 102, + RingBufferGeometry: ir, + RingGeometry: tr, + SRGB8_ALPHA8_ASTC_10x10_Format: 37851, + SRGB8_ALPHA8_ASTC_10x5_Format: 37848, + SRGB8_ALPHA8_ASTC_10x6_Format: 37849, + SRGB8_ALPHA8_ASTC_10x8_Format: 37850, + SRGB8_ALPHA8_ASTC_12x10_Format: 37852, + SRGB8_ALPHA8_ASTC_12x12_Format: 37853, + SRGB8_ALPHA8_ASTC_4x4_Format: 37840, + SRGB8_ALPHA8_ASTC_5x4_Format: 37841, + SRGB8_ALPHA8_ASTC_5x5_Format: 37842, + SRGB8_ALPHA8_ASTC_6x5_Format: 37843, + SRGB8_ALPHA8_ASTC_6x6_Format: 37844, + SRGB8_ALPHA8_ASTC_8x5_Format: 37845, + SRGB8_ALPHA8_ASTC_8x6_Format: 37846, + SRGB8_ALPHA8_ASTC_8x8_Format: 37847, + Scene: Y, + SceneUtils: ac, + ShaderChunk: tt, + ShaderLib: it, + ShaderMaterial: Pe, + ShadowMaterial: mr, + Shape: Ba, + ShapeBufferGeometry: ar, + ShapeGeometry: rr, + ShapePath: Ja, + ShapeUtils: Hn, + ShortType: 1011, + Skeleton: bo, + SkeletonHelper: _s, + SkinnedMesh: So, + SmoothShading: 2, + Sphere: cA, + SphereBufferGeometry: er, + SphereGeometry: Ar, + Spherical: Os, + SphericalHarmonics3: As, + SphericalReflectionMapping: 305, + Spline: nc, + SplineCurve: ya, + SplineCurve3: oc, + SpotLight: ba, + SpotLightHelper: Js, + SpotLightShadow: Ma, + Sprite: vo, + SpriteMaterial: ro, + SrcAlphaFactor: 204, + SrcAlphaSaturateFactor: 210, + SrcColorFactor: 202, + StaticCopyUsage: 35046, + StaticDrawUsage: 35044, + StaticReadUsage: 35045, + StereoCamera: rs, + StreamCopyUsage: 35042, + StreamDrawUsage: 35040, + StreamReadUsage: 35041, + StringKeyframeTrack: Or, + SubtractEquation: 101, + SubtractiveBlending: 3, + TOUCH: { + ROTATE: 0, + PAN: 1, + DOLLY_PAN: 2, + DOLLY_ROTATE: 3 + }, + TangentSpaceNormalMap: 0, + TetrahedronBufferGeometry: cn, + TetrahedronGeometry: ln, + TextBufferGeometry: $n, + TextGeometry: _n, + Texture: d, + TextureLoader: Aa, + TorusBufferGeometry: En, + TorusGeometry: In, + TorusKnotBufferGeometry: vn, + TorusKnotGeometry: yn, + Triangle: RA, + TriangleFanDrawMode: 2, + TriangleStripDrawMode: 1, + TrianglesDrawMode: 0, + TubeBufferGeometry: Cn, + TubeGeometry: mn, + UVMapping: 300, + Uint16Attribute: function (A, e) { + return console.warn("THREE.Uint16Attribute has been removed. Use new THREE.Uint16BufferAttribute() instead."), + new XA(A, e) + }, + Uint16BufferAttribute: XA, + Uint32Attribute: function (A, e) { + return console.warn("THREE.Uint32Attribute has been removed. Use new THREE.Uint32BufferAttribute() instead."), + new $A(A, e) + }, + Uint32BufferAttribute: $A, + Uint8Attribute: function (A, e) { + return console.warn("THREE.Uint8Attribute has been removed. Use new THREE.Uint8BufferAttribute() instead."), + new JA(A, e) + }, + Uint8BufferAttribute: JA, + Uint8ClampedAttribute: function (A, e) { + return console.warn("THREE.Uint8ClampedAttribute has been removed. Use new THREE.Uint8ClampedBufferAttribute() instead."), + new zA(A, e) + }, + Uint8ClampedBufferAttribute: zA, + Uncharted2ToneMapping: 3, + Uniform: Ts, + UniformsLib: Xe, + UniformsUtils: Ge, + UnsignedByteType: 1009, + UnsignedInt248Type: 1020, + UnsignedIntType: 1014, + UnsignedShort4444Type: 1017, + UnsignedShort5551Type: 1018, + UnsignedShort565Type: 1019, + UnsignedShortType: 1012, + VSMShadowMap: 3, + Vector2: s, + Vector3: y, + Vector4: p, + VectorKeyframeTrack: Vr, + Vertex: function (A, e, t) { + return console.warn("THREE.Vertex has been removed. Use THREE.Vector3 instead."), + new y(A, e, t) + }, + VertexColors: 2, + VideoTexture: $o, + WebGLCubeRenderTarget: Ye, + WebGLMultisampleRenderTarget: u, + WebGLRenderTarget: g, + WebGLRenderTargetCube: function (A, e, t) { + return console.warn("THREE.WebGLRenderTargetCube( width, height, options ) is now WebGLCubeRenderTarget( size, options )."), + new Ye(A, t) + }, + WebGLRenderer: $i, + WebGLUtils: zi, + WireframeGeometry: on, + WireframeHelper: function (A, e) { + return console.warn("THREE.WireframeHelper has been removed. Use THREE.WireframeGeometry instead."), + new jo(new on(A.geometry), new ko({ + color: void 0 !== e ? e : 16777215 + })) + }, + WrapAroundEnding: 2402, + XHRLoader: function (A) { + return console.warn("THREE.XHRLoader has been renamed to THREE.FileLoader."), + new Jr(A) + }, + ZeroCurvatureEnding: 2400, + ZeroFactor: 200, + ZeroSlopeEnding: 2401, + ZeroStencilOp: 0, + sRGBEncoding: 3001 + }); + + function lc(A) { + return (lc = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (A) { + return typeof A + } : + function (A) { + return A && "function" == typeof Symbol && A.constructor === Symbol && A !== Symbol.prototype ? "symbol" : typeof A + } + )(A) + } + + function cc(A, e) { + if (!(A instanceof e)) + throw new TypeError("Cannot call a class as a function") + } + + function hc(A, e) { + for (var t = 0; e.length > t; t++) { + var i = e[t]; + i.enumerable = i.enumerable || !1, + i.configurable = !0, + "value" in i && (i.writable = !0), + Object.defineProperty(A, i.key, i) + } + } + + function dc(A, e, t) { + return e && hc(A.prototype, e), + t && hc(A, t), + A + } + + function pc(A, e, t) { + return e in A ? Object.defineProperty(A, e, { + value: t, + enumerable: !0, + configurable: !0, + writable: !0 + }) : A[e] = t, + A + } + + function gc(A) { + for (var e = 1; arguments.length > e; e++) { + var t = null != arguments[e] ? Object(arguments[e]) : {}, + i = Object.keys(t); + "function" == typeof Object.getOwnPropertySymbols && (i = i.concat(Object.getOwnPropertySymbols(t).filter((function (A) { + return Object.getOwnPropertyDescriptor(t, A).enumerable + })))), + i.forEach((function (e) { + pc(A, e, t[e]) + })) + } + return A + } + + function uc(A, e) { + if ("function" != typeof e && null !== e) + throw new TypeError("Super expression must either be null or a function"); + A.prototype = Object.create(e && e.prototype, { + constructor: { + value: A, + writable: !0, + configurable: !0 + } + }), + e && mc(A, e) + } + + function fc(A) { + return (fc = Object.setPrototypeOf ? Object.getPrototypeOf : function (A) { + return A.__proto__ || Object.getPrototypeOf(A) + })(A) + } + + function mc(A, e) { + return (mc = Object.setPrototypeOf || function (A, e) { + return A.__proto__ = e, + A + })(A, e) + } + + function Cc(A, e) { + return !e || "object" != typeof e && "function" != typeof e ? function (A) { + if (void 0 === A) + throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + return A + }(A) : e + } + + function yc(A) { + return function (A) { + if (Array.isArray(A)) { + for (var e = 0, t = new Array(A.length); A.length > e; e++) + t[e] = A[e]; + return t + } + }(A) || function (A) { + if (Symbol.iterator in Object(A) || "[object Arguments]" === Object.prototype.toString.call(A)) + return Array.from(A) + }(A) || function () { + throw new TypeError("Invalid attempt to spread non-iterable instance") + }() + } + var vc = { + SceneSize: 1e3, + getDataFromIndexedDB: !0, + TextureResRoot: "images/", + UserControlView: !1, + FillCavity: !1, + EnableClippingCaps: !0, + EnableBoxClippingCaps: !1, + EnableTextureMapping: !0, + EnableTextureLoading: !0, + EnableLightmap: !1, + EnableTransformAoMap: !0, + LightmapIntensity: 1, + ClippingCaps: !1, + SelectionColor: { + color: 2205669, + side: 2, + opacity: .8, + transparent: !0 + }, + DisableAntialias: !1, + EnableDemolishByDClick: !1, + IsMobile: !1, + UseWorker: !1, + ZipResourcePostfix: "", + HasLayerData: !1, + Renderer: 1, + Instance: !0, + MergeComponent: !1, + AutoMergeComponent: !0, + AutoMergeComponentCount: 1e4, + MaxMergeCount: 1e3, + MergedTriangleNumberThreshold: 2e7, + MaxMergedTriangleNumber: 2e7, + IncrementRender: !1, + EnableRenderPass: !1, + LimitFrameTime: 250, + maxObjectNumInPool: 1e3, + maxDrawCacheNum: 4e4, + OctantDepth: 15, + MaximumDepth: 0, + TargetDistance: 1e4, + ConcurrencyRequestCount: 16, + ShowOctant: !1, + EnableOctant: !1, + EnableViewController: !0, + DirectionalLight: !0, + LightPreset: 2, + IBL: !1, + ToneMapping: 4, + LightIntensityFactor: 1, + Hover: !1, + OcclusionTranslucentEnabled: !1, + OcclusionOpacity: .5, + OcclusionDistanceToCamera: 1e3, + LineSelectRange: 30, + DrawingStyle: 0, + DrawingBoardlineEnabled: !0, + InitWireframeData: !1, + EnableHitDetection: !1, + TranslucentDepthDisabled: !1, + SharedMeshInstanceEnable: !1, + DataProvider: 0, + EnableSelectionOutline: !0, + EnableSelectionByTranslucent: !1, + EnableSelectionBoundingBox: !1, + EnableShadow: !1, + EnableAnimation: !0, + UseLods: !1, + AutoPrepare: !0, + DEBUG: !1, + WalkingWithGravity: !1, + WalkingWithViewLock: !1, + RendererWhenLoad: !1, + language: "zh-cn", + LoadComponentOnDemand: !1, + logarithmicDepthBuffer: !1, + InfluencedByLight: !0, + geometricErrorThresholdValue: 80, + MaximumAvailableMemory: 500, + DataReduction: !1, + ConstraintZoom: !1, + stepLoad: !1, + useGzip: !1, + notDepthWriteByTransparent: !1, + PickingEffect: !0, + PickingLineWidthEnabled: !0, + loadBatch: !0, + MiniMapSize: 1024, + alphaTest: .5, + EnableCreateMiniMap: !1, + MultipleSelectComponents: !0 + }, + Ic = F.RotationOrders, + Ec = { + ORTHOGRAPHIC: "orth", + PERSPECTIVE: "persp" + }, + Bc = { + elements: [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] + }, + xc = { + elements: [1, 0, 0, 0, 1, 0, 0, 0, 1] + }, + Sc = { + IfcOpeningElement: !0, + IfcSpace: !0, + OST_Rooms: !0, + "房间": !0 + }; + Object.defineProperties(Sc, { + "房间": { + get: function () { + return Sc.OST_Rooms + }, + set: function (A) { + Sc.OST_Rooms = A + } + } + }); + var wc, Mc, bc = new(Proxy || function (A) { + return A + })(Sc, { + deleteProperty: function (A, e) { + e in A && ("房间" === e && delete A.OST_Rooms, + delete A[e]) + } + }), + Uc = { + Keep: 0, + Home: 135, + Top: 1, + Bottom: 2, + Front: 3, + Back: 4, + Right: 5, + Left: 6, + TopFrontRight: 135, + TopFrontLeft: 136, + TopBackRight: 145, + TopBackLeft: 146, + BottomFrontRight: 235, + BottomFrontLeft: 236, + BottomBackRight: 245, + BottomBackLeft: 246, + TopFront: 13, + TopBack: 14, + TopRight: 15, + TopLeft: 16, + BottomFront: 23, + BottomBack: 24, + BottomRight: 25, + BottomLeft: 26, + FrontRight: 35, + FrontLeft: 36, + BackRight: 45, + BackLeft: 46, + TopToRight: 105, + TopToLeft: 106, + TopToFront: 103, + TopToBack: 104, + BottomToRight: 205, + BottomToLeft: 206, + BottomToFront: 203, + BottomToBack: 204, + FrontToTop: 301, + FrontToBottom: 302, + FrontToRight: 305, + FrontToLeft: 306, + BackToTop: 401, + BackToBottom: 402, + BackToRight: 405, + BackToLeft: 406, + RightToTop: 501, + RightToBottom: 502, + RightToFront: 503, + RightToBack: 504, + LeftToTop: 601, + LeftTopBottom: 602, + LeftTopFront: 603, + LeftTopBack: 604 + }, + Fc = { + DirectionalLight: "directional", + AmbientLight: "ambient", + PointLight: "point", + SpotLight: "spot" + }, + Kc = { + Clear: 0, + Add: 1, + Remove: 2 + }, + Qc = { + Geometry: 1, + Marker3d: 2, + Room: 3, + ExternalComponent: 4, + UnPickable: 0 + }, + Rc = { + ON_LOAD_START: "ON_LOAD_START", + ON_LOAD_PROGRESS: "ON_LOAD_PROGRESS", + ON_LOAD_COMPLETE: "ON_LOAD_COMPLETE", + ON_DEMAND_LOAD_COMPLETE: "ON_DEMAND_LOAD_COMPLETE", + ON_LOAD_EMPTY_SCENE: "ON_LOAD_EMPTY_SCENE", + ON_LOAD_CONFIG_FINISH: "ON_LOAD_CONFIG_FINISH", + ON_LOAD_INVALID_SCENE: "ON_LOAD_INVALID_SCENE", + ON_LOAD_INVALID_DATA: "ON_LOAD_INVALID_DATA", + ON_NETWORK_ERROR: "ON_NETWORK_ERROR", + ACCOUNT_NO_EXIST: "ACCOUNT_NO_EXIST", + NO_PERMISSION: "NO_PERMISSION", + ON_LOAD_ERROR: "ON_LOAD_ERROR", + ON_SELECTION_CHANGED: "ON_SELECTION_CHANGED", + ON_RECTPICK_ADD: "ON_RECTPICK_ADD", + ON_RECTPICK_REMOVE: "ON_RECTPICK_REMOVE", + ON_CLICK_PICK: "ON_CLICK_PICK", + ON_HOVER_PICK: "ON_HOVER_PICK", + ON_MEASURE_PICK: "ON_MEASURE_PICK", + ON_SELECTION_FAILED: "ON_SELECTION_FAILED", + ON_CLIP_HOVER: "ON_CLIP_HOVER", + ON_HOVER_SNAP: "ON_HOVER_SNAP", + ON_CLIP_MOUSE_MOVE: "ON_CLIP_MOUSE_MOVE", + ON_CLIP_MOUSE_DOWN: "ON_CLIP_MOUSE_DOWN", + ON_VERSION_NO_MATCH: "ON_VERSION_NO_MATCH", + ON_VIEWER_RESTORED: "ON_VIEWER_RESTORED", + ON_CAMERA_HEIGHT_CHANGED: "ON_CAMERA_HEIGHT_CHANGED", + ON_CAMERA_CHANGED_AND_RENDERED: "ON_CAMERA_CHANGED_AND_RENDERED", + ON_DATABASE_OPEN: "ON_DATABASE_OPEN", + ON_DATABASE_CLOSE: "ON_DATABASE_CLOSE", + ON_DATABASE_ADD: "ON_DATABASE_ADD", + ON_DATABASE_DELETE: "ON_DATABASE_DELETE", + ON_DATABASE_CLERA: "ON_DATABASE_CLERA", + ON_DATABASE_EEEOR: "ON_DATABASE_EEEOR", + BEFORE_RESETSCENE: "BEFORE_RESETSCENE", + AFTER_RESETSCENE: "AFTER_RESETSCENE", + ON_CAMERA_CHANGE: "ON_CAMERA_CHANGE", + ON_CONTROL_ENTER: "ON_CONTROL_ENTER", + ON_CONTROL_EXIST: "ON_CONTROL_EXIST", + ON_POINTERLOCK_EXIST: "ON_POINTERLOCK_EXIST", + ON_CONTROL_BEGIN: "ON_CONTROL_BEGIN", + ON_CONTROL_END: "ON_CONTROL_END", + ON_CONTROL_ZOOM: "ON_CONTROL_ZOOM", + ON_CONTROL_UPDATEUI: "ON_CONTROL_UPDATEUI", + ON_CONTROL_KEYDOWN: "ON_CONTROL_KEYDOWN", + ON_CONTROL_KEYUP: "ON_CONTROL_KEYUP", + ON_CAMERA_ANIMATION_UPDATE: "ON_CAMERA_ANIMATION_UPDATE", + ON_MOUSE_DRAGGED: "ON_MOUSE_DRAGGED" + }, + Tc = { + LOAD_COMPONENT_ERROR: "LOAD_COMPONENT_ERROR", + LOAD_MATERIAL_ERROR: "LOAD_MATERIAL_ERROR", + LOAD_GEOMETRY_ERROR: "LOAD_GEOMETRY_ERROR", + LOAD_COMPONENTNODE_ERROR: "LOAD_COMPONENTNODE_ERROR", + LOAD_TEXTURE_ERROR: "LOAD_TEXTURE_ERROR", + LOAD_AXISNET_ERROR: "LOAD_AXISNET_ERROR", + LOAD_FLOORINFO_ERROR: "LOAD_FLOORINFO_ERROR", + PARSEFAILE: "PARSEFAILE", + PARSING: "PARSING", + IS2D: "IS2D", + LOAD_ERROR: "LOAD_ERROR", + SCENE_NOT_CLOSE: "SCENE_NOT_CLOSE", + SCENE_NOTHING_TO_LOAD: "SCENE_NOTHING_TO_LOAD", + LOAD_SCENE_ERROR: "LOAD_SCENE_ERROR", + LOAD_SYMBOL_ERROR: "LOAD_SYMBOL_ERROR", + LOAD_OCTREEINNER_ERROR: "LOAD_OCTREEINNER_ERROR", + LOAD_OCTREEOUTER_ERROR: "LOAD_OCTREEOUTER_ERROR", + LOAD_USERID_ERROR: "LOAD_USERID_ERROR", + LOAD_USERDATA_ERROR: "LOAD_USERDATA_ERROR", + LOAD_CAMERA_ERROR: "LOAD_CAMERA_ERROR", + LOAD_MPK_ERROR: "LOAD_MPK_ERROR", + LOAD_IBLCONFIG_ERROR: "LOAD_IBLCONFIG_ERROR" + }, + kc = { + MOUSEPOINT: 0, + SELECTION: 1, + CENTER: 2, + CAMERA: 3 + }, + Dc = { + FILE_VISIBLE: 0, + FILE_HIDDEN: 1, + SELECTED: 2, + VISIBLE: 3, + HIDDEN: 4, + TRANSLUCENT: 5, + TRANSLUCENT_OTHERS: 6, + WIREFRAME: 7, + COLORFUL: 8 + }, + Lc = { + Visible: 1, + HideByIsolate: 2, + Transparent: 4, + TransparentByIsolate: 8 + }, + Nc = { + HIDDEN: 0, + HIDDEN_OTHERS: 1, + TRANSLUCENT: 2, + TRANSLUCENT_OTHERS: 3 + }, + Oc = { + TRANSLUCENT: "TRANSLUCENT", + OPAQUE: "OPAQUE" + }, + Vc = { + DISABLED: 0, + TRANSLUCENT: 1, + HIDDEN: 2 + }, + Gc = { + ORBIT: "orbit", + PICK: "pick", + PAN: "pan", + ZOOM: "zoom", + FLY: "fly", + WALK: "walk" + }, + Pc = { + PICK_BY_RECT: "pickByRect", + ZOOM_BY_RECT: "zoomByRect", + CLIP_BY_BOX: "clipByBox", + CLIP_FILL: "fillClip", + PICK_BY_MEASURE: "pickByMeasure", + COMPONENT_TRANSFORM: "componentTransform" + }, + qc = { + NONE: 0, + UP: 1, + DOWN: 2, + LEFT: 4, + RIGHT: 8, + FORWARD: 16, + BACK: 32 + }, + jc = { + SHADING: 0, + BOARDLINE: 1, + SHADINGWITHLINE: 2 + }, + Hc = { + HIDDEN: -1, + NONE: 0, + HOVER: 1, + SELECTED: 2, + OVERRIDED: 3, + TRANSPARENT: 4, + BLINK: 5 + }, + Yc = { + NONE: 0, + BLINK: 1, + SELECT: 2 + }, + Wc = { + AUTO: 0, + DEFAULT: 1, + MERGED: 2, + LAYER: 3, + LAYER_SCENE: 4 + }, + Jc = { + MATCH_RETURN_TRUE: 0, + MATCH_RETURN_FALSE: 1, + NOMATCH_RETURN_TRUE: 2, + NOMATCH_RETURN_FALSE: 3 + }, + zc = { + CLIPPING: -2, + HIDDEN: -1, + NONE: 0, + SELECTED: 1, + BLINK: 2, + HOVER: 3, + TRANSPARENT: 4, + OVERRIDED: 5 + }, + Zc = { + RVT: "RVT", + IFC: "IFC", + I_MODEL: "I-MODEL", + THREE_DS: "3DS", + MERGE: "MERGE", + DAE: "DAE", + DWG: "DWG", + OBJ: "OBJ", + FBX: "FBX" + }, + Xc = {}; + + function _c(A, e, t, i) { + this._x = A || 0, + this._y = e || 0, + this._z = t || 0, + this._w = void 0 !== i ? i : 1 + } + + function $c(A, e, t) { + this.x = A || 0, + this.y = e || 0, + this.z = t || 0 + } + Xc.clamp = function (A, e, t) { + return Math.max(e, Math.min(t, A)) + }, + Xc.euclideanModulo = function (A, e) { + return (A % e + e) % e + }, + Object.assign(_c, { + slerp: function (A, e, t, i) { + return t.copy(A).slerp(e, i) + }, + slerpFlat: function (A, e, t, i, o, n, r) { + var a = t[i + 0], + s = t[i + 1], + l = t[i + 2], + c = t[i + 3], + h = o[n + 0], + d = o[n + 1], + p = o[n + 2], + g = o[n + 3]; + if (c !== g || a !== h || s !== d || l !== p) { + var u = 1 - r, + f = a * h + s * d + l * p + c * g, + m = 0 > f ? -1 : 1, + C = 1 - f * f; + if (C > Number.EPSILON) { + var y = Math.sqrt(C), + v = Math.atan2(y, f * m); + u = Math.sin(u * v) / y, + r = Math.sin(r * v) / y + } + var I = r * m; + if (a = a * u + h * I, + s = s * u + d * I, + l = l * u + p * I, + c = c * u + g * I, + u === 1 - r) { + var E = 1 / Math.sqrt(a * a + s * s + l * l + c * c); + a *= E, + s *= E, + l *= E, + c *= E + } + } + A[e] = a, + A[e + 1] = s, + A[e + 2] = l, + A[e + 3] = c + } + }), + Object.defineProperties(_c.prototype, { + x: { + get: function () { + return this._x + }, + set: function (A) { + this._x = A, + this._onChangeCallback() + } + }, + y: { + get: function () { + return this._y + }, + set: function (A) { + this._y = A, + this._onChangeCallback() + } + }, + z: { + get: function () { + return this._z + }, + set: function (A) { + this._z = A, + this._onChangeCallback() + } + }, + w: { + get: function () { + return this._w + }, + set: function (A) { + this._w = A, + this._onChangeCallback() + } + } + }), + Object.assign(_c.prototype, { + isQuaternion: !0, + set: function (A, e, t, i) { + return this._x = A, + this._y = e, + this._z = t, + this._w = i, + this._onChangeCallback(), + this + }, + clone: function () { + return new this.constructor(this._x, this._y, this._z, this._w) + }, + copy: function (A) { + return this._x = A.x, + this._y = A.y, + this._z = A.z, + this._w = A.w, + this._onChangeCallback(), + this + }, + setFromEuler: function (A, e) { + if (!A || !A.isEuler) + throw new Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order."); + var t = A._x, + i = A._y, + o = A._z, + n = A.order, + r = Math.cos, + a = Math.sin, + s = r(t / 2), + l = r(i / 2), + c = r(o / 2), + h = a(t / 2), + d = a(i / 2), + p = a(o / 2); + return "XYZ" === n ? (this._x = h * l * c + s * d * p, + this._y = s * d * c - h * l * p, + this._z = s * l * p + h * d * c, + this._w = s * l * c - h * d * p) : "YXZ" === n ? (this._x = h * l * c + s * d * p, + this._y = s * d * c - h * l * p, + this._z = s * l * p - h * d * c, + this._w = s * l * c + h * d * p) : "ZXY" === n ? (this._x = h * l * c - s * d * p, + this._y = s * d * c + h * l * p, + this._z = s * l * p + h * d * c, + this._w = s * l * c - h * d * p) : "ZYX" === n ? (this._x = h * l * c - s * d * p, + this._y = s * d * c + h * l * p, + this._z = s * l * p - h * d * c, + this._w = s * l * c + h * d * p) : "YZX" === n ? (this._x = h * l * c + s * d * p, + this._y = s * d * c + h * l * p, + this._z = s * l * p - h * d * c, + this._w = s * l * c - h * d * p) : "XZY" === n && (this._x = h * l * c - s * d * p, + this._y = s * d * c - h * l * p, + this._z = s * l * p + h * d * c, + this._w = s * l * c + h * d * p), + !1 !== e && this._onChangeCallback(), + this + }, + setFromAxisAngle: function (A, e) { + var t = e / 2, + i = Math.sin(t); + return this._x = A.x * i, + this._y = A.y * i, + this._z = A.z * i, + this._w = Math.cos(t), + this._onChangeCallback(), + this + }, + setFromRotationMatrix: function (A) { + var e, t = A.elements, + i = t[0], + o = t[4], + n = t[8], + r = t[1], + a = t[5], + s = t[9], + l = t[2], + c = t[6], + h = t[10], + d = i + a + h; + return d > 0 ? (e = .5 / Math.sqrt(d + 1), + this._w = .25 / e, + this._x = (c - s) * e, + this._y = (n - l) * e, + this._z = (r - o) * e) : i > a && i > h ? (e = 2 * Math.sqrt(1 + i - a - h), + this._w = (c - s) / e, + this._x = .25 * e, + this._y = (o + r) / e, + this._z = (n + l) / e) : a > h ? (e = 2 * Math.sqrt(1 + a - i - h), + this._w = (n - l) / e, + this._x = (o + r) / e, + this._y = .25 * e, + this._z = (s + c) / e) : (e = 2 * Math.sqrt(1 + h - i - a), + this._w = (r - o) / e, + this._x = (n + l) / e, + this._y = (s + c) / e, + this._z = .25 * e), + this._onChangeCallback(), + this + }, + setFromUnitVectors: function (A, e) { + var t = A.dot(e) + 1; + return 1e-6 > t ? (t = 0, + Math.abs(A.x) > Math.abs(A.z) ? (this._x = -A.y, + this._y = A.x, + this._z = 0, + this._w = t) : (this._x = 0, + this._y = -A.z, + this._z = A.y, + this._w = t)) : (this._x = A.y * e.z - A.z * e.y, + this._y = A.z * e.x - A.x * e.z, + this._z = A.x * e.y - A.y * e.x, + this._w = t), + this.normalize() + }, + angleTo: function (A) { + return 2 * Math.acos(Math.abs(Xc.clamp(this.dot(A), -1, 1))) + }, + rotateTowards: function (A, e) { + var t = this.angleTo(A); + if (0 === t) + return this; + var i = Math.min(1, e / t); + return this.slerp(A, i), + this + }, + inverse: function () { + return this.conjugate() + }, + conjugate: function () { + return this._x *= -1, + this._y *= -1, + this._z *= -1, + this._onChangeCallback(), + this + }, + dot: function (A) { + return this._x * A._x + this._y * A._y + this._z * A._z + this._w * A._w + }, + lengthSq: function () { + return this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w + }, + length: function () { + return Math.sqrt(this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w) + }, + normalize: function () { + var A = this.length(); + return 0 === A ? (this._x = 0, + this._y = 0, + this._z = 0, + this._w = 1) : (this._x = this._x * (A = 1 / A), + this._y = this._y * A, + this._z = this._z * A, + this._w = this._w * A), + this._onChangeCallback(), + this + }, + multiply: function (A, e) { + return void 0 !== e ? (console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."), + this.multiplyQuaternions(A, e)) : this.multiplyQuaternions(this, A) + }, + premultiply: function (A) { + return this.multiplyQuaternions(A, this) + }, + multiplyQuaternions: function (A, e) { + var t = A._x, + i = A._y, + o = A._z, + n = A._w, + r = e._x, + a = e._y, + s = e._z, + l = e._w; + return this._x = t * l + n * r + i * s - o * a, + this._y = i * l + n * a + o * r - t * s, + this._z = o * l + n * s + t * a - i * r, + this._w = n * l - t * r - i * a - o * s, + this._onChangeCallback(), + this + }, + slerp: function (A, e) { + if (0 === e) + return this; + if (1 === e) + return this.copy(A); + var t = this._x, + i = this._y, + o = this._z, + n = this._w, + r = n * A._w + t * A._x + i * A._y + o * A._z; + if (0 > r ? (this._w = -A._w, + this._x = -A._x, + this._y = -A._y, + this._z = -A._z, + r = -r) : this.copy(A), + r >= 1) + return this._w = n, + this._x = t, + this._y = i, + this._z = o, + this; + var a = 1 - r * r; + if (Number.EPSILON >= a) { + var s = 1 - e; + return this._w = s * n + e * this._w, + this._x = s * t + e * this._x, + this._y = s * i + e * this._y, + this._z = s * o + e * this._z, + this.normalize(), + this._onChangeCallback(), + this + } + var l = Math.sqrt(a), + c = Math.atan2(l, r), + h = Math.sin((1 - e) * c) / l, + d = Math.sin(e * c) / l; + return this._w = n * h + this._w * d, + this._x = t * h + this._x * d, + this._y = i * h + this._y * d, + this._z = o * h + this._z * d, + this._onChangeCallback(), + this + }, + equals: function (A) { + return A._x === this._x && A._y === this._y && A._z === this._z && A._w === this._w + }, + fromArray: function (A, e) { + return void 0 === e && (e = 0), + this._x = A[e], + this._y = A[e + 1], + this._z = A[e + 2], + this._w = A[e + 3], + this._onChangeCallback(), + this + }, + toArray: function (A, e) { + return void 0 === A && (A = []), + void 0 === e && (e = 0), + A[e] = this._x, + A[e + 1] = this._y, + A[e + 2] = this._z, + A[e + 3] = this._w, + A + }, + _onChange: function (A) { + return this._onChangeCallback = A, + this + }, + _onChangeCallback: function () {} + }), + Object.assign($c.prototype, { + isVector3: !0, + set: function (A, e, t) { + return this.x = A, + this.y = e, + this.z = t, + this + }, + setScalar: function (A) { + return this.x = A, + this.y = A, + this.z = A, + this + }, + setX: function (A) { + return this.x = A, + this + }, + setY: function (A) { + return this.y = A, + this + }, + setZ: function (A) { + return this.z = A, + this + }, + setComponent: function (A, e) { + switch (A) { + case 0: + this.x = e; + break; + case 1: + this.y = e; + break; + case 2: + this.z = e; + break; + default: + throw new Error("index is out of range: " + A) + } + return this + }, + getComponent: function (A) { + switch (A) { + case 0: + return this.x; + case 1: + return this.y; + case 2: + return this.z; + default: + throw new Error("index is out of range: " + A) + } + }, + clone: function () { + return new this.constructor(this.x, this.y, this.z) + }, + copy: function (A) { + return this.x = A.x, + this.y = A.y, + this.z = A.z, + this + }, + add: function (A, e) { + return void 0 !== e ? (console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."), + this.addVectors(A, e)) : (this.x += A.x, + this.y += A.y, + this.z += A.z, + this) + }, + addScalar: function (A) { + return this.x += A, + this.y += A, + this.z += A, + this + }, + addVectors: function (A, e) { + return this.x = A.x + e.x, + this.y = A.y + e.y, + this.z = A.z + e.z, + this + }, + addScaledVector: function (A, e) { + return this.x += A.x * e, + this.y += A.y * e, + this.z += A.z * e, + this + }, + sub: function (A, e) { + return void 0 !== e ? (console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."), + this.subVectors(A, e)) : (this.x -= A.x, + this.y -= A.y, + this.z -= A.z, + this) + }, + subScalar: function (A) { + return this.x -= A, + this.y -= A, + this.z -= A, + this + }, + subVectors: function (A, e) { + return this.x = A.x - e.x, + this.y = A.y - e.y, + this.z = A.z - e.z, + this + }, + multiply: function (A, e) { + return void 0 !== e ? (console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."), + this.multiplyVectors(A, e)) : (this.x *= A.x, + this.y *= A.y, + this.z *= A.z, + this) + }, + multiplyScalar: function (A) { + return this.x *= A, + this.y *= A, + this.z *= A, + this + }, + multiplyVectors: function (A, e) { + return this.x = A.x * e.x, + this.y = A.y * e.y, + this.z = A.z * e.z, + this + }, + applyEuler: (Mc = new _c, + function (A) { + return A && A.isEuler || console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order."), + this.applyQuaternion(Mc.setFromEuler(A)) + } + ), + applyAxisAngle: function () { + var A = new _c; + return function (e, t) { + return this.applyQuaternion(A.setFromAxisAngle(e, t)) + } + }(), + applyMatrix3: function (A) { + var e = this.x, + t = this.y, + i = this.z, + o = A.elements; + return this.x = o[0] * e + o[3] * t + o[6] * i, + this.y = o[1] * e + o[4] * t + o[7] * i, + this.z = o[2] * e + o[5] * t + o[8] * i, + this + }, + applyMatrix4: function (A) { + var e = this.x, + t = this.y, + i = this.z, + o = A.elements, + n = 1 / (o[3] * e + o[7] * t + o[11] * i + o[15]); + return this.x = (o[0] * e + o[4] * t + o[8] * i + o[12]) * n, + this.y = (o[1] * e + o[5] * t + o[9] * i + o[13]) * n, + this.z = (o[2] * e + o[6] * t + o[10] * i + o[14]) * n, + this + }, + applyQuaternion: function (A) { + var e = this.x, + t = this.y, + i = this.z, + o = A.x, + n = A.y, + r = A.z, + a = A.w, + s = a * e + n * i - r * t, + l = a * t + r * e - o * i, + c = a * i + o * t - n * e, + h = -o * e - n * t - r * i; + return this.x = s * a + h * -o + l * -r - c * -n, + this.y = l * a + h * -n + c * -o - s * -r, + this.z = c * a + h * -r + s * -n - l * -o, + this + }, + project: function (A) { + return this.applyMatrix4(A.matrixWorldInverse).applyMatrix4(A.projectionMatrix) + }, + unproject: function (A) { + return this.applyMatrix4(A.projectionMatrixInverse).applyMatrix4(A.matrixWorld) + }, + transformDirection: function (A) { + var e = this.x, + t = this.y, + i = this.z, + o = A.elements; + return this.x = o[0] * e + o[4] * t + o[8] * i, + this.y = o[1] * e + o[5] * t + o[9] * i, + this.z = o[2] * e + o[6] * t + o[10] * i, + this.normalize() + }, + divide: function (A) { + return this.x /= A.x, + this.y /= A.y, + this.z /= A.z, + this + }, + divideScalar: function (A) { + return this.multiplyScalar(1 / A) + }, + min: function (A) { + return this.x = Math.min(this.x, A.x), + this.y = Math.min(this.y, A.y), + this.z = Math.min(this.z, A.z), + this + }, + max: function (A) { + return this.x = Math.max(this.x, A.x), + this.y = Math.max(this.y, A.y), + this.z = Math.max(this.z, A.z), + this + }, + clamp: function (A, e) { + return this.x = Math.max(A.x, Math.min(e.x, this.x)), + this.y = Math.max(A.y, Math.min(e.y, this.y)), + this.z = Math.max(A.z, Math.min(e.z, this.z)), + this + }, + clampScalar: function (A, e) { + return this.x = Math.max(A, Math.min(e, this.x)), + this.y = Math.max(A, Math.min(e, this.y)), + this.z = Math.max(A, Math.min(e, this.z)), + this + }, + clampLength: function (A, e) { + var t = this.length(); + return this.divideScalar(t || 1).multiplyScalar(Math.max(A, Math.min(e, t))) + }, + floor: function () { + return this.x = Math.floor(this.x), + this.y = Math.floor(this.y), + this.z = Math.floor(this.z), + this + }, + ceil: function () { + return this.x = Math.ceil(this.x), + this.y = Math.ceil(this.y), + this.z = Math.ceil(this.z), + this + }, + round: function () { + return this.x = Math.round(this.x), + this.y = Math.round(this.y), + this.z = Math.round(this.z), + this + }, + roundToZero: function () { + return this.x = 0 > this.x ? Math.ceil(this.x) : Math.floor(this.x), + this.y = 0 > this.y ? Math.ceil(this.y) : Math.floor(this.y), + this.z = 0 > this.z ? Math.ceil(this.z) : Math.floor(this.z), + this + }, + negate: function () { + return this.x = -this.x, + this.y = -this.y, + this.z = -this.z, + this + }, + dot: function (A) { + return this.x * A.x + this.y * A.y + this.z * A.z + }, + lengthSq: function () { + return this.x * this.x + this.y * this.y + this.z * this.z + }, + length: function () { + return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z) + }, + manhattanLength: function () { + return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z) + }, + normalize: function () { + return this.divideScalar(this.length() || 1) + }, + setLength: function (A) { + return this.normalize().multiplyScalar(A) + }, + lerp: function (A, e) { + return this.x += (A.x - this.x) * e, + this.y += (A.y - this.y) * e, + this.z += (A.z - this.z) * e, + this + }, + lerpVectors: function (A, e, t) { + return this.subVectors(e, A).multiplyScalar(t).add(A) + }, + cross: function (A, e) { + return void 0 !== e ? (console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."), + this.crossVectors(A, e)) : this.crossVectors(this, A) + }, + crossVectors: function (A, e) { + var t = A.x, + i = A.y, + o = A.z, + n = e.x, + r = e.y, + a = e.z; + return this.x = i * a - o * r, + this.y = o * n - t * a, + this.z = t * r - i * n, + this + }, + projectOnVector: function (A) { + var e = A.dot(this) / A.lengthSq(); + return this.copy(A).multiplyScalar(e) + }, + projectOnPlane: (wc = new $c, + function (A) { + return wc.copy(this).projectOnVector(A), + this.sub(wc) + } + ), + reflect: function () { + var A = new $c; + return function (e) { + return this.sub(A.copy(e).multiplyScalar(2 * this.dot(e))) + } + }(), + angleTo: function (A) { + var e = this.dot(A) / Math.sqrt(this.lengthSq() * A.lengthSq()); + return Math.acos(Xc.clamp(e, -1, 1)) + }, + distanceTo: function (A) { + return Math.sqrt(this.distanceToSquared(A)) + }, + distanceToSquared: function (A) { + var e = this.x - A.x, + t = this.y - A.y, + i = this.z - A.z; + return e * e + t * t + i * i + }, + manhattanDistanceTo: function (A) { + return Math.abs(this.x - A.x) + Math.abs(this.y - A.y) + Math.abs(this.z - A.z) + }, + setFromSpherical: function (A) { + return this.setFromSphericalCoords(A.radius, A.phi, A.theta) + }, + setFromSphericalCoords: function (A, e, t) { + var i = Math.sin(e) * A; + return this.x = i * Math.sin(t), + this.y = Math.cos(e) * A, + this.z = i * Math.cos(t), + this + }, + setFromCylindrical: function (A) { + return this.setFromCylindricalCoords(A.radius, A.theta, A.y) + }, + setFromCylindricalCoords: function (A, e, t) { + return this.x = A * Math.sin(e), + this.y = t, + this.z = A * Math.cos(e), + this + }, + setFromMatrixPosition: function (A) { + var e = A.elements; + return this.x = e[12], + this.y = e[13], + this.z = e[14], + this + }, + setFromMatrixScale: function (A) { + var e = this.setFromMatrixColumn(A, 0).length(), + t = this.setFromMatrixColumn(A, 1).length(), + i = this.setFromMatrixColumn(A, 2).length(); + return this.x = e, + this.y = t, + this.z = i, + this + }, + setFromMatrixColumn: function (A, e) { + return this.fromArray(A.elements, 4 * e) + }, + equals: function (A) { + return A.x === this.x && A.y === this.y && A.z === this.z + }, + fromArray: function (A, e) { + return void 0 === e && (e = 0), + this.x = A[e], + this.y = A[e + 1], + this.z = A[e + 2], + this + }, + toArray: function (A, e) { + return void 0 === A && (A = []), + void 0 === e && (e = 0), + A[e] = this.x, + A[e + 1] = this.y, + A[e + 2] = this.z, + A + }, + fromBufferAttribute: function (A, e, t) { + return void 0 !== t && console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute()."), + this.x = A.getX(e), + this.y = A.getY(e), + this.z = A.getZ(e), + this + } + }); + var Ah = [new $c, new $c, new $c, new $c, new $c, new $c, new $c, new $c], + eh = new $c, + th = new $c, + ih = new $c, + oh = new $c, + nh = new $c, + rh = new $c, + ah = new $c, + sh = new $c, + lh = new $c, + ch = new $c, + hh = new $c; + + function dh(A, e, t, i, o) { + var n, r = 0; + for (r = 0, + n = A.length - 3; n >= r; r += 3) { + hh.fromArray(A, r); + var a = o.x * Math.abs(hh.x) + o.y * Math.abs(hh.y) + o.z * Math.abs(hh.z), + s = e.dot(hh), + l = t.dot(hh), + c = i.dot(hh); + if (Math.max(-Math.max(s, l, c), Math.min(s, l, c)) > a) + return !1 + } + return !0 + } + + function ph(A, e) { + this.min = void 0 !== A ? A : new $c(1 / 0, 1 / 0, 1 / 0), + this.max = void 0 !== e ? e : new $c(-1 / 0, -1 / 0, -1 / 0) + } + var gh = new ph; + Object.assign(ph.prototype, { + isBox3: !0, + set: function (A, e) { + return this.min.copy(A), + this.max.copy(e), + this + }, + setFromArray: function (A) { + for (var e = 1 / 0, t = 1 / 0, i = 1 / 0, o = -1 / 0, n = -1 / 0, r = -1 / 0, a = 0, s = A.length; s > a; a += 3) { + var l = A[a], + c = A[a + 1], + h = A[a + 2]; + e > l && (e = l), + t > c && (t = c), + i > h && (i = h), + l > o && (o = l), + c > n && (n = c), + h > r && (r = h) + } + return this.min.set(e, t, i), + this.max.set(o, n, r), + this + }, + toArray: function (A) { + return void 0 === A && (A = []), + this.min.toArray(A), + this.max.toArray(A, 3), + A + }, + setFromBufferAttribute: function (A) { + for (var e = 1 / 0, t = 1 / 0, i = 1 / 0, o = -1 / 0, n = -1 / 0, r = -1 / 0, a = 0, s = A.count; s > a; a += 1) { + var l = A.getX(a), + c = A.getY(a), + h = A.getZ(a); + e > l && (e = l), + t > c && (t = c), + i > h && (i = h), + l > o && (o = l), + c > n && (n = c), + h > r && (r = h) + } + return this.min.set(e, t, i), + this.max.set(o, n, r), + this + }, + setFromPoints: function (A) { + this.makeEmpty(); + for (var e = 0, t = A.length; t > e; e += 1) + this.expandByPoint(A[e]); + return this + }, + setFromCenterAndSize: function (A, e) { + var t = eh.copy(e).multiplyScalar(.5); + return this.min.copy(A).sub(t), + this.max.copy(A).add(t), + this + }, + setFromObject: function (A) { + return this.makeEmpty(), + this.expandByObject(A) + }, + clone: function () { + return (new this.constructor).copy(this) + }, + copy: function (A) { + return this.min.copy(A.min), + this.max.copy(A.max), + this + }, + makeEmpty: function () { + return this.min.x = this.min.y = this.min.z = 1 / 0, + this.max.x = this.max.y = this.max.z = -1 / 0, + this + }, + isEmpty: function () { + return this.min.x > this.max.x || this.min.y > this.max.y || this.min.z > this.max.z + }, + getCenter: function (A) { + return void 0 === A && (console.warn("THREE.Box3: .getCenter() target is now required"), + A = new $c), + this.isEmpty() ? A.set(0, 0, 0) : A.addVectors(this.min, this.max).multiplyScalar(.5) + }, + getSize: function (A) { + return void 0 === A && (console.warn("THREE.Box3: .getSize() target is now required"), + A = new $c), + this.isEmpty() ? A.set(0, 0, 0) : A.subVectors(this.max, this.min) + }, + expandByPoint: function (A) { + return this.min.min(A), + this.max.max(A), + this + }, + expandByVector: function (A) { + return this.min.sub(A), + this.max.add(A), + this + }, + expandByScalar: function (A) { + return this.min.addScalar(-A), + this.max.addScalar(A), + this + }, + expandByObject: function (A) { + A.updateWorldMatrix(!1, !1); + var e = A.geometry; + void 0 !== e && (null === e.boundingBox && e.computeBoundingBox(), + gh.copy(e.boundingBox), + gh.applyMatrix4(A.matrixWorld), + this.union(gh)); + for (var t = A.children, i = 0, o = t.length; o > i; i += 1) + this.expandByObject(t[i]); + return this + }, + containsPoint: function (A) { + return !(this.min.x > A.x || A.x > this.max.x || this.min.y > A.y || A.y > this.max.y || this.min.z > A.z || A.z > this.max.z) + }, + containsBox: function (A) { + return !(this.min.x > A.min.x || A.max.x > this.max.x || this.min.y > A.min.y || A.max.y > this.max.y || this.min.z > A.min.z || A.max.z > this.max.z) + }, + getParameter: function (A, e) { + return void 0 === e && (console.warn("THREE.Box3: .getParameter() target is now required"), + e = new $c), + e.set((A.x - this.min.x) / (this.max.x - this.min.x), (A.y - this.min.y) / (this.max.y - this.min.y), (A.z - this.min.z) / (this.max.z - this.min.z)) + }, + intersectsBox: function (A) { + return !(this.min.x > A.max.x || A.min.x > this.max.x || this.min.y > A.max.y || A.min.y > this.max.y || this.min.z > A.max.z || A.min.z > this.max.z) + }, + intersectsSphere: function (A) { + return this.clampPoint(A.center, eh), + eh.distanceToSquared(A.center) <= A.radius * A.radius + }, + intersectsPlane: function (A) { + var e = null, + t = null; + return A.normal.x > 0 ? (e = A.normal.x * this.min.x, + t = A.normal.x * this.max.x) : (e = A.normal.x * this.max.x, + t = A.normal.x * this.min.x), + A.normal.y > 0 ? (e += A.normal.y * this.min.y, + t += A.normal.y * this.max.y) : (e += A.normal.y * this.max.y, + t += A.normal.y * this.min.y), + A.normal.z > 0 ? (e += A.normal.z * this.min.z, + t += A.normal.z * this.max.z) : (e += A.normal.z * this.max.z, + t += A.normal.z * this.min.z), + -A.constant >= e && t >= -A.constant + }, + intersectsTriangle: function (A) { + if (this.isEmpty()) + return !1; + this.getCenter(sh), + lh.subVectors(this.max, sh), + th.subVectors(A.a, sh), + ih.subVectors(A.b, sh), + oh.subVectors(A.c, sh), + nh.subVectors(ih, th), + rh.subVectors(oh, ih), + ah.subVectors(th, oh); + var e = [0, -nh.z, nh.y, 0, -rh.z, rh.y, 0, -ah.z, ah.y, nh.z, 0, -nh.x, rh.z, 0, -rh.x, ah.z, 0, -ah.x, -nh.y, nh.x, 0, -rh.y, rh.x, 0, -ah.y, ah.x, 0]; + return !!dh(e, th, ih, oh, lh) && (!!dh(e = [1, 0, 0, 0, 1, 0, 0, 0, 1], th, ih, oh, lh) && (ch.crossVectors(nh, rh), + dh(e = [ch.x, ch.y, ch.z], th, ih, oh, lh))) + }, + clampPoint: function (A, e) { + return void 0 === e && (console.warn("THREE.Box3: .clampPoint() target is now required"), + e = new $c), + e.copy(A).clamp(this.min, this.max) + }, + distanceToPoint: function (A) { + return eh.copy(A).clamp(this.min, this.max).sub(A).length() + }, + getBoundingSphere: function (A) { + return void 0 === A && console.error("THREE.Box3: .getBoundingSphere() target is now required"), + this.getCenter(A.center), + A.radius = .5 * this.getSize(eh).length(), + A + }, + intersect: function (A) { + return this.min.max(A.min), + this.max.min(A.max), + this.isEmpty() && this.makeEmpty(), + this + }, + union: function (A) { + return this.min.min(A.min), + this.max.max(A.max), + this + }, + applyMatrix4: function (A) { + return this.isEmpty() || (Ah[0].set(this.min.x, this.min.y, this.min.z).applyMatrix4(A), + Ah[1].set(this.min.x, this.min.y, this.max.z).applyMatrix4(A), + Ah[2].set(this.min.x, this.max.y, this.min.z).applyMatrix4(A), + Ah[3].set(this.min.x, this.max.y, this.max.z).applyMatrix4(A), + Ah[4].set(this.max.x, this.min.y, this.min.z).applyMatrix4(A), + Ah[5].set(this.max.x, this.min.y, this.max.z).applyMatrix4(A), + Ah[6].set(this.max.x, this.max.y, this.min.z).applyMatrix4(A), + Ah[7].set(this.max.x, this.max.y, this.max.z).applyMatrix4(A), + this.setFromPoints(Ah)), + this + }, + translate: function (A) { + return this.min.add(A), + this.max.add(A), + this + }, + equals: function (A) { + return A.min.equals(this.min) && A.max.equals(this.max) + } + }); + var uh = { + MinusEpsilon: -1e-6, + byteArr2Int: function (A) { + return (255 & A[0]) << 24 | (255 & A[1]) << 16 | (255 & A[2]) << 8 | (255 & A[3]) << 0 + }, + int2ByteArr: function (A) { + var e = []; + return e[0] = A >> 24, + e[1] = A >> 16, + e[2] = A >> 8, + e[3] = A >> 0, + e + }, + isPlainObject: function (A) { + var e, t; + return !(!A || "[object Object]" !== Object.prototype.toString.call(A)) && (!(e = Object.getPrototypeOf(A)) || "function" == typeof (t = Object.hasOwnProperty.call(e, "constructor") && e.constructor) && Object.hasOwnProperty.toString.call(t) === Object.hasOwnProperty.toString.call(Object)) + }, + extend: function () { + var A = null, + e = null, + t = null, + i = null, + o = null, + n = null, + r = arguments[0] || {}, + a = 1, + s = arguments.length, + l = !1; + for ("boolean" == typeof r && (l = r, + r = arguments[a] || {}, + a += 1), + "object" !== lc(r) && "function" === !lc(r) && (r = {}), + a === s && (r = this, + a -= 1); s > a; a += 1) + if (null !== (A = arguments[a]) && void 0 !== (A = arguments[a])) + for (e in A) + t = r[e], + r !== (i = A[e]) && (l && i && (uh.isPlainObject(i) || (o = Array.isArray(i))) ? (o ? (o = !1, + n = t && Array.isArray(t) ? t : []) : n = t && uh.isPlainObject(t) ? t : {}, + r[e] = uh.extend(l, n, i)) : null != i && (r[e] = i)); + return r + }, + supportWorker: function () { + return "undefined" != typeof Worker || (console.log("Web Worker is not supported."), + !1) + }, + box3FromArray: function (A, e) { + if (Array.isArray(A)) { + var t = e || new ph; + return t.min.fromArray(A, 0), + t.max.fromArray(A, 3), + t + } + return null + }, + box3FromArrayRange: function (A, e, t) { + for (var i = new ph, o = Number(1 / 0), n = Number(1 / 0), r = Number(1 / 0), a = -1 / 0, s = -1 / 0, l = -1 / 0, c = e, h = t; h > c; c += 3) { + var d = A[c], + p = A[c + 1], + g = A[c + 2]; + o > d && (o = d), + n > p && (n = p), + r > g && (r = g), + d > a && (a = d), + p > s && (s = p), + g > l && (l = g) + } + return i.min.set(o, n, r), + i.max.set(a, s, l), + i + }, + box3FromObject: function (A, e, t) { + if (void 0 !== A && void 0 !== e && void 0 !== A.x && void 0 !== A.y && void 0 !== A.z && void 0 !== e.x && void 0 !== e.y && void 0 !== e.z) { + var i = t || new ph; + return i.min.set(A.x, A.y, A.z), + i.max.set(e.x, e.y, e.z), + i + } + return null + }, + computeBBox: function (A) { + for (var e = new ph, t = new $c, i = 0, o = A.length; o > i; i += 1) + t.fromArray(A[i], 0), + e.expandByPoint(t); + return e + }, + mergeBBox: function (A) { + if (1 > A.length) + return null; + for (var e = new ph, t = new $c, i = new $c, o = new ph, n = 0, r = A.length; r > n; n += 1) + t.set(A[n].max.x, A[n].max.y, A[n].max.z), + i.set(A[n].min.x, A[n].min.y, A[n].min.z), + o.set(i, t), + e.union(o); + return e + }, + parseTransform: function (A, e, t) { + var i = !1; + if (e.rotation && (A.rotation.fromArray(e.rotation), + i = !0), + e.position && (A.position.fromArray(e.position), + i = !0), + e.scale && (A.scale.fromArray(e.scale), + i = !0), + e.quaternion && (A.quaternion.fromArray(e.quaternion), + i = !0), + i && A.updateMatrix(), + e.matrix && A.matrix.fromArray(e.matrix), + t) { + var o = A.matrix.clone(); + o.multiplyMatrices(t, A.matrix), + A.matrix = o + } + A.matrixAutoUpdate = !1, + void 0 !== A.boundingBox && (A.boundingBox = uh.box3FromArray(e.bbox)) + }, + isEmptyObject: function (A) { + if (!A) + return !0; + if (A.length > 0) + return !1; + if (0 === A.length) + return !0; + for (var e in A) + if (A.hasOwnProperty(e)) + return !1; + return !0 + }, + isEmptyObjectSimple: function (A) { + for (var e in A) + return !1; + return !0 + }, + isOwnEmptyObject: function (A) { + for (var e in A) + if (A.hasOwnProperty(e)) + return !1; + return !0 + }, + hexStrToRgb: function (A) { + var e = A.replace("#", ""), + t = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e); + return t ? { + r: parseInt(t[1], 16) / 255, + g: parseInt(t[2], 16) / 255, + b: parseInt(t[3], 16) / 255 + } : null + }, + hexToRgb: function (A) { + var e = {}; + return e.r = (A >> 16 & 255) / 255, + e.g = (A >> 8 & 255) / 255, + e.b = (255 & A) / 255, + e + }, + getMin: function (A) { + for (var e = A.length, t = 1 / 0; + (e -= 1) >= 0;) + t = t > A[e] ? A[e] : t; + return t + }, + getMax: function (A) { + for (var e = A.length, t = -1 / 0; + (e -= 1) >= 0;) + t = A[e] > t ? A[e] : t; + return t + }, + findRange: function (A, e) { + if (e < Math.min.apply(null, A)) + return 0; + if (e > Math.max.apply(null, A)) + return A.length - 1; + for (var t = 0, i = 0, o = A.length; o > i; i += 1) + if (A[i] > e) { + t = i - 1; + break + } + return t + }, + stringToByte: function (A) { + for (var e = [], t = A.length, i = null, o = 0; t > o; o += 1) + 65536 > (i = A.charCodeAt(o)) || i > 1114111 ? 2048 > i || i > 65535 ? 128 > i || i > 2047 ? e.push(255 & i) : (e.push(i >> 6 & 31 | 192), + e.push(63 & i | 128)) : (e.push(i >> 12 & 15 | 224), + e.push(i >> 6 & 63 | 128), + e.push(63 & i | 128)) : (e.push(i >> 18 & 7 | 240), + e.push(i >> 12 & 63 | 128), + e.push(i >> 6 & 63 | 128), + e.push(63 & i | 128)); + return e + }, + byteToString: function (A) { + if ("string" == typeof A) + return A; + for (var e = "", t = A, i = 0; t.length > i; i += 1) { + var o = t[i].toString(2), + n = o.match(/^1+?(?=0)/); + if (n && 8 === o.length) { + for (var r = n[0].length, a = t[i].toString(2).slice(7 - r), s = 1; r > s; s += 1) + a += t[s + i].toString(2).slice(2); + e += String.fromCharCode(parseInt(a, 2)), + i += r - 1 + } else + e += String.fromCharCode(t[i]) + } + return e + }, + strToBinary: function (A) { + for (var e = [], t = A.split(""), i = 0; t.length > i; i += 1) { + 0 !== i && e.push(" "); + var o = t[i].charCodeAt().toString(2); + e.push(o) + } + return e.join("") + }, + binaryToStr: function (A) { + for (var e = [], t = A.split(" "), i = 0; t.length > i; i += 1) { + var o = parseInt(t[i], 2), + n = String.fromCharCode(o); + e.push(n) + } + return e.join("") + }, + isMirror: function (A) { + var e = new $c(A[0], A[1], A[2]), + t = new $c(A[4], A[5], A[6]), + i = new $c(A[8], A[9], A[10]); + return 0 > (new $c).crossVectors(e, t).dot(i) + }, + decodeUTF8: function (A) { + for (var e = "", t = 0; A.length > t; t += 1) + e += String.fromCharCode(A[t]); + return decodeURIComponent(escape(e)) + }, + unique: function (A) { + for (var e, t = [], i = {}, o = 0; null !== (e = A[o]) && void 0 !== (e = A[o]); o += 1) + i[e] || (t.push(e), + i[e] = !0); + return i = null, + t + }, + getValue: function (A, e) { + var t = e.split("."), + i = A; + return t.map((function (A, e) { + i = i[A] + })), + i + }, + sortByName: function (A, e, t) { + t = t || "asc"; + var i = !1; + e ? e.indexOf(".") > -1 && (i = !0) : e = "name", + A = A.sort((function (A, o) { + if (i) { + var n = uh.getValue(A, e), + r = uh.getValue(o, e); + return "asc" === t ? n.localeCompare(r) : r.localeCompare(n) + } + return "asc" === t ? A[e].localeCompare(o[e]) : o[e].localeCompare(A[e]) + })); + var o = [], + n = [], + r = [], + a = []; + return A.map((function (A, t) { + var s = null; + s = i ? uh.getValue(A, e) : A[e], + /^[a-zA-Z]*$/.test(s.slice(0, 1)) ? o.push(A) : /^[\u4e00-\u9fa5]*$/.test(s.slice(0, 1)) ? n.push(A) : /^\d+(\.\d+)?$/.test(s.slice(0, 1)) ? r.push(A) : a.push(A) + })), + a.concat(r, o, n) + }, + PointToLineDistance: function (A, e, t, i, o, n) { + var r = void 0, + a = void 0, + s = void 0, + l = void 0, + c = Math.sqrt((t - A) * (t - A) + (i - e) * (i - e)); + if (0 === c) + return [0, { + x: t, + y: i + }]; + var h = Math.sqrt((o - A) * (o - A) + (n - e) * (n - e)); + if (0 === h) + return [0, { + x: o, + y: n + }]; + var d = Math.sqrt((t - o) * (t - o) + (i - n) * (i - n)); + if (0 === d) + return [c, { + x: t, + y: i + }]; + if (h > c) { + if (i === n ? r = o > t ? 0 : Math.PI : ((l = (o - t) / d) - 1 > 1e-5 && (l = 1), + r = Math.acos(l), + i > n && (r = 2 * Math.PI - r)), + (l = (A - t) / c) - 1 > 1e-5 && (l = 1), + a = Math.acos(l), + i > e && (a = 2 * Math.PI - a), + 0 > (s = a - r) && (s = -s), + s > Math.PI && (s = 2 * Math.PI - s), + s > Math.PI / 2) + return [c, { + x: t, + y: i + }]; + if (t === o) + return [h * Math.sin(s), { + x: t, + y: e + }]; + if (i === n) + return [h * Math.sin(s), { + x: A, + y: i + }]; + var p, g, u = (n - i) / o - t, + f = -1 / u, + m = e - A * f; + return g = f * (p = (n - o * u - m) / (f - u)) + m, + [c * Math.sin(s), { + x: p, + y: g + }] + } + if (i === n ? r = o > t ? Math.PI : 0 : ((l = (t - o) / d) - 1 > 1e-5 && (l = 1), + r = Math.acos(l), + n > i && (r = 2 * Math.PI - r)), + (l = (A - o) / h) - 1 > 1e-5 && (l = 1), + a = Math.acos(l), + n > e && (a = 2 * Math.PI - a), + 0 > (s = a - r) && (s = -s), + s > Math.PI && (s = 2 * Math.PI - s), + s > Math.PI / 2) + return [h, { + x: o, + y: n + }]; + if (t === o) + return [h * Math.sin(s), { + x: t, + y: e + }]; + if (i === n) + return [h * Math.sin(s), { + x: A, + y: i + }]; + var C, y, v = (n - i) / o - t, + I = -1 / v, + E = e - A * I; + return y = I * (C = (n - o * v - E) / (I - v)) + E, + [h * Math.sin(s), { + x: C, + y: y + }] + }, + freezeObject: function (A) { + return Object.freeze ? Object.freeze(A) : A + }, + getEncodedId: function (A) { + return A + }, + arrayToMap: function (A, e) { + e = e || {}; + for (var t = 0, i = A.length; i > t; t += 1) + e[A[t]] = !0; + return e + }, + getDifferentialIdxs: function (A, e) { + var t = null, + i = {}, + o = {}, + n = {}; + if (e) + if (this.isEmptyObject(A)) + o = e; + else { + for (t in e) + A[t] && (n[t] = !0); + if (this.isEmptyObject(n)) + i = A, + o = e; + else { + for (t in e) + n[t] || (o[t] = !0); + for (t in A) + n[t] || (i[t] = !0) + } + } + else + this.isEmptyObject(A) || (i = A); + return { + objCurrUsedIdxs: A, + addIdxs: Object.keys(i), + removeIdxs: Object.keys(o) + } + }, + getCombinedKeyString: function (A, e) { + return A.join(e = e || "&") + }, + splitCombinedKeyString: function (A, e) { + return A.split(e = e || "&") + }, + getModelKeyFromComponentKey: function (A) { + return A.split("_")[0] + }, + isGroupObject: function (A) { + return !(!A.children || !A.children.length) + }, + isMeshObject: function (A) { + return !!(A.isMesh || A.isLine || A.isPoints) + }, + asyncProcess: function (A, e, t, i, o) { + requestAnimationFrame(function n(r) { + var a = r; + return function () { + var r = null, + s = null; + for (s = a + t > e ? e : a + t, + r = a; s > r; r += 1) { + i && i(A, r), + r === s - 1 && (s !== e ? requestAnimationFrame(n(r + 1)) : o && o(A)) + } + } + }(0)) + }, + hasSimilarProperty: function (A, e) { + if (!(A instanceof Object && e instanceof Object)) + return !1; + for (var t in A) + if (A.hasOwnProperty(t) && !e.hasOwnProperty(t)) + return !1; + return !0 + }, + equalsWithEpsilon: function (A, e) { + var t = Math.abs(A.x - e.x), + i = Math.abs(A.y - e.y), + o = Math.abs(A.z - e.z); + return 1e-7 >= t && 1e-7 >= i && 1e-7 >= o + }, + arrayMax: function (A) { + if (0 === A.length) + return -1 / 0; + for (var e = A[0], t = 1, i = A.length; i > t; t += 1) + A[t] > e && (e = A[t]); + return e + }, + arrayMin: function (A) { + if (0 === A.length) + return 1 / 0; + for (var e = A[0], t = 1, i = A.length; i > t; t += 1) + e > A[t] && (e = A[t]); + return e + }, + ab2str: function (A) { + return (new TextDecoder).decode(new Uint8Array(A)) + }, + str2ab: function (A) { + return (new TextEncoder).encode(A).buffer + } + }; + uh.createUUID = function () { + for (var A = [], e = 0; 36 > e; e += 1) + A[e] = "0123456789abcdef".substr(Math.floor(16 * Math.random()), 1); + return A[14] = "4", + A[19] = "0123456789abcdef".substr(3 & A[19] | 8, 1), + A[8] = A[13] = A[18] = A[23] = "-", + A.join("") + }; + var fh = { + "zh-cn": { + YourGraphicsCardDoesNotSeemToSupportWebGL: "您的显卡似乎不支持WebGL", + YourBrowserDoesNotSeemToSupportWebGL: "您的浏览器似乎不支持WebGL", + FindOutHowToGetItHere: "您可以在这里查看相关信息", + SectionBoxLockHint: "请在使用此方法之前调用enableSectionBox。", + APIAxisLockHint: "The API supports AxisOption.Z only for now." + }, + en: { + YourGraphicsCardDoesNotSeemToSupportWebGL: "Your graphics card does not seem to support WebGL", + YourBrowserDoesNotSeemToSupportWebGL: "Your browser does not seem to support WebGL", + FindOutHowToGetItHere: "Find out how to get it here", + SectionBoxLockHint: "Please call enableSectionBox before using this method.", + APIAxisLockHint: "The API supports AxisOption.Z only for now." + } + }, + mh = { + getAndroidVersion: function (A) { + var e = (A = A || navigator.userAgent).match(/Android\s([0-9.]*)/); + return !!e && e[1] + }, + isTouchDevice: function () { + return "undefined" != typeof window && "ontouchstart" in window + }, + isBrowser: function () { + return "undefined" != typeof navigator + }, + isIE11: function () { + return mh.isBrowser() && Boolean(navigator.userAgent.match(/Edge|Trident\/7\./)) + }, + isIOSDevice: function () { + return !!mh.isBrowser() && /ip(ad|hone|od)/.test(navigator.userAgent.toLowerCase()) + }, + isAndroidDevice: function () { + return !!mh.isBrowser() && -1 !== navigator.userAgent.toLowerCase().indexOf("android") + }, + isMobileDevice: function () { + return !!mh.isBrowser() && (mh.isIOSDevice() || mh.isAndroidDevice()) + }, + isSafari: function () { + if (!mh.isBrowser()) + return !1; + var A = navigator.userAgent.toLowerCase(); + return -1 !== A.indexOf("safari") && -1 === A.indexOf("chrome") + }, + isFirefox: function () { + return !!mh.isBrowser() && -1 !== navigator.userAgent.toLowerCase().indexOf("firefox") + }, + isChrome: function () { + return !!mh.isBrowser() && -1 !== navigator.userAgent.toLowerCase().indexOf("chrome") + }, + isMac: function () { + return !!mh.isBrowser() && -1 !== navigator.userAgent.toLowerCase().indexOf("mac os") + }, + isLinux: function () { + return !!mh.isBrowser() && -1 !== navigator.userAgent.toLowerCase().indexOf("linux x86_64") + }, + isWindows: function () { + if (!mh.isBrowser()) + return !1; + var A = navigator.userAgent.toLowerCase(); + return -1 !== A.indexOf("win32") || -1 !== A.indexOf("windows") + }, + isWindowsPhone: function () { + var A = navigator.userAgent.toLowerCase(); + return /(?:Windows Phone)/.test(A) + }, + isSymbian: function () { + var A = navigator.userAgent.toLowerCase(); + return /(?:SymbianOS)/.test(A) || mh.isWindowsPhone() + }, + isTablet: function () { + var A = navigator.userAgent.toLowerCase(); + return /(?:iPad|PlayBook)/.test(A) || mh.isAndroidDevice() && !/(?:Mobile)/.test(A) || mh.isFirefox() && /(?:Tablet)/.test(A) + }, + isPc: function () { + return !mh.isMobileDevice() && !mh.isTablet() && !mh.isSymbian() + }, + isOpera: function () { + return navigator.userAgent.indexOf("Opera") > -1 + } + }; + mh.isSafari(); + mh.detectWebGL = function () { + if (window.WebGLRenderingContext) { + for (var A = document.createElement("canvas"), e = ["webgl", "experimental-webgl"], t = !1, i = 0; e.length > i; i += 1) + try { + if ((t = A.getContext(e[i])) && "function" == typeof t.getParameter) + return 1 + } catch (A) {} + return 0 + } + return -1 + }, + mh.detectWebGL2 = function () { + if (window.WebGL2RenderingContext) { + for (var A = document.createElement("canvas"), e = ["webgl2"], t = !1, i = 0; e.length > i; i += 1) + try { + if ((t = A.getContext(e[i])) && "function" == typeof t.getParameter) + return 1 + } catch (A) {} + return 0 + } + return -1 + }, + mh.showWebGLMessage = function (A, e, t) { + var i, o = null, + n = null; + o = void 0 !== (t = t || {}).parent ? t.parent : document.body, + i = void 0 !== t.id ? t.id : "oldie", + (n = mh.getWebGLErrorMessage(A, e)).id = i, + o.appendChild(n) + }, + mh.language = function () { + return (navigator.browserLanguage || navigator.language).toLowerCase() + }, + mh.getWebGLErrorMessage = function (A, e) { + var t = document.createElement("div"); + t.id = "webgl-error-message", + t.style.fontSize = "16px", + t.style.fontWeight = "normal", + t.style.textAlign = "center", + t.style.background = "#f4c8c8", + t.style.color = "#000", + t.style.padding = "1.5em", + t.style.width = "400px", + t.style.position = "absolute", + t.style.left = document.body.clientWidth / 2 - 224 + "px"; + var i = document.body.clientHeight / 2 - 45; + return 0 > i && (i = 0), + t.style.top = i + "px", + e || (e = "zh-cn"), + 0 === A ? t.innerHTML = [' ' + fh[e].YourGraphicsCardDoesNotSeemToSupportWebGL + ".
", ' ' + fh[e].FindOutHowToGetItHere + "."].join("\n") : -1 === A && (t.innerHTML = ['' + fh[e].YourBrowserDoesNotSeemToSupportWebGL + ".
", '' + fh[e].FindOutHowToGetItHere + "."].join("\n")), + t + }, + mh.isSupportIndexedDB = function () { + return window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB + }, + mh.isSupportWorker = function () { + return window.Worker + }; + var Ch = { + DEBUG: 6, + PERFORMANCE: 5, + LOG: 4, + INFO: 3, + WARNING: 2, + ERROR: 1, + NONE: 0 + }, + yh = {}, + vh = function (A) { + yh[A] ? console.warn("Timer '" + A + "' already exists") : yh[A] = Date.now() + }, + Ih = function (A) { + yh[A] ? (console.warn(A + ":", Date.now() - yh[A], "ms"), + delete yh[A]) : console.warn("Timer '" + A + "' does not exist") + }; + + function Eh() { + this.level = -1, + this.setLevel(Ch.LOG) + } + Eh.prototype.setLevel = function (A) { + if (this.level !== A) { + this.level = A; + var e = function () {}, + t = Ch, + i = this; + this.debug = t.DEBUG > A ? e : console.debug.bind(console), + this.trace = t.DEBUG > A ? e : console.trace.bind(console), + this.assert = t.DEBUG > A ? e : console.assert.bind(console), + this.count = t.DEBUG > A ? e : console.count.bind(console), + this.dir = t.DEBUG > A ? e : console.dir.bind(console), + this.time = t.PERFORMANCE > A ? e : vh, + this.timeEnd = t.PERFORMANCE > A ? e : Ih, + this.log = t.LOG > A ? e : console.log.bind(console), + this.info = t.INFO > A ? e : console.info.bind(console), + this.warn = t.WARNING > A ? e : console.warn.bind(console), + this.error = t.ERROR > A ? e : function () { + if (i.callback) { + var A = Array.prototype.slice.call(arguments).join(" "); + i.callback({ + category: "error", + message: A + }, { + adp: !1 + }) + } + console.error.apply(console, arguments) + } + } + }; + var Bh = new Eh, + xh = { + splitStr: function (A) { + return A.trim().split(/\s+/g) + }, + getClientHeight: function () { + return document.body.clientHeight && document.documentElement.clientHeight ? document.body.clientHeight < document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.clientHeight : document.body.clientHeight > document.documentElement.clientHeight ? document.body.clientHeight : document.documentElement.clientHeight + }, + getClientWidth: function () { + return document.body.clientWidth && document.documentElement.clientWidth ? document.body.clientWidth < document.documentElement.clientWidth ? document.body.clientWidth : document.documentElement.clientWidth : document.body.clientWidth > document.documentElement.clientWidth ? document.body.clientWidth : document.documentElement.clientWidth + }, + getDomOffsetToClient: function (A) { + var e, t = null; + if (A !== document) { + var i = (e = A).getBoundingClientRect ? function (A) { + var e = A.getBoundingClientRect(), + t = document.body, + i = document.documentElement, + o = e.left - (i.clientLeft || t.clientLeft); + return { + top: Math.round(e.top - (i.clientTop || t.clientTop)), + left: Math.round(o) + } + }(e) : function (A) { + for (var e = 0, t = 0; A;) + e += A.offsetTop, + t += A.offsetLeft, + A = A.offsetParent; + var i = document.body, + o = document.documentElement; + return { + top: e -= window.pageYOffset || o.scrollTop || i.scrollTop, + left: t -= window.pageXOffset || o.scrollLeft || i.scrollLeft + } + }(e); + t = { + width: A.offsetWidth, + height: A.offsetHeight, + left: i.left, + top: i.top + } + } else + t = { + width: window.innerWidth, + height: window.innerHeight, + left: 0, + top: 0 + }; + return t + }, + setClassName: function (A, e) { + var t = document.getElementById(A); + t && (t.className = e) + }, + addClassName: function (A, e) { + var t = null, + i = null, + o = null, + n = null, + r = null, + a = document.getElementById(A); + if (a && (i = a, + e && "string" == typeof e && (t = e.split(/\s+/), + 1 === i.nodeType))) + if (i.className || 1 !== t.length) { + for (o = " " + i.className + " ", + n = 0, + r = t.length; r > n; n += 1) + 0 > o.indexOf(" " + t[n] + " ") && (o += t[0] + " "); + i.className = String.trim(o) + } else + i.className = e + }, + removeClassName: function (A, e) { + var t = null, + i = null, + o = null, + n = null, + r = null, + a = document.getElementById(A); + if (a && (o = a, + e && "string" == typeof e && (t = (e || "").split(/\s+/), + 1 === o.nodeType && o.className))) { + for (i = (" " + o.className + " ").replace(0, " "), + n = 0, + r = t.length; r > n; n += 1) + for (; i.indexOf(" " + t[n] + " ") >= 0;) + i = i.replace(" " + t[n] + " ", " "); + o.className = e ? String.trim(i) : "" + } + }, + showOrHideElement: function (A, e) { + var t = document.getElementById(A); + t && (t.style.display = e ? "" : "none") + }, + getStyleString: function (A) { + var e = []; + for (var t in A) { + var i = A[t]; + e.push(t), + e.push(":"), + e.push(i), + e.push("; ") + } + return e.join("") + }, + cloneStyle: function (A) { + var e = {}; + for (var t in A) + e[t] = A[t]; + return e + }, + removeStyleAttribute: function (A, e) { + Array.isArray(e) || (e = [e]), + e.forEach((function (e) { + e in A && delete A[e] + })) + }, + trimRight: function (A) { + if (0 === A.length) + return ""; + for (var e = A.length - 1, t = e; t >= 0; t -= 1) + if (" " !== A.charAt(t)) { + e = t; + break + } + return A.substr(0, e + 1) + }, + trimLeft: function (A) { + if (0 === A.length) + return ""; + for (var e = 0, t = 0; A.length > t; t += 1) + if (" " !== A.charAt(t)) { + e = t; + break + } + return A.substr(e) + }, + trim: function (A) { + return A.replace(/(^\s*)|(\s*$)/g, "") + }, + matchesSelector: function (A, e) { + if (A.matches) + return A.matches(e); + if (A.matchesSelector) + return A.matchesSelector(e); + if (A.webkitMatchesSelector) + return A.webkitMatchesSelector(e); + if (A.msMatchesSelector) + return A.msMatchesSelector(e); + if (A.mozMatchesSelector) + return A.mozMatchesSelector(e); + if (A.oMatchesSelector) + return A.oMatchesSelector(e); + if (A.querySelectorAll) { + for (var t = (A.document || A.ownerDocument).querySelectorAll(e), i = 0; t[i] && void 0 !== t[i];) + i += 1; + return !!t[i] + } + return !1 + }, + toTranslate3d: function (A, e) { + return "translate3d(" + A + "px," + e + "px,0)" + }, + setCursorStyle: function (A, e) { + var t = null; + switch (e) { + case "n": + case "s": + t = "ns-resize"; + break; + case "w": + case "e": + t = "ew-resize"; + break; + case "ne": + case "sw": + t = "nesw-resize"; + break; + case "nw": + case "se": + t = "nwse-resize" + } + A.style.cursor = t + }, + css: function (A, e) { + for (var t = A.getAttribute("style") || "", i = Object.keys(e), o = t.split(";"), n = [], r = 0, a = o.length; a > r; r += 1) { + "" !== (s = o[r]) ? n.push(s.replace(/:.+/, "")): o.splice(r, 1) + } + for (r = 0, + a = i.length; a > r; r += 1) { + var s = i[r], + l = -1; + o.map((function (A, e) { + return A.indexOf(s) > -1 && (l = e), + null + })), + l > -1 ? o[l] = s + ":" + e[s] : o.push(s + ":" + e[s]) + } + var c = o.join(";"); + A.setAttribute("style", c + ";") + }, + append: function (A, e) { + if ("string" == typeof e) { + var t = document.createElement("div"); + t.innerHTML = e; + for (var i = document.createDocumentFragment(); t.firstChild;) + i.appendChild(t.firstChild); + A.appendChild(i) + } else + A.appendChild(e) + }, + scrollTop: function (A, e) { + var t = A.scrollTop; + if (t > e) + var i = setInterval((function () { + var t = A.scrollTop, + o = Math.floor(-t / 6); + A.scrollTop = t = o + t, + A.scrollTop > e || (A.scrollTop = A.scrollTop = e, + clearTimeout(i)) + }), 20); + else if (0 === t) + var o = setInterval((function () { + var i = A.scrollTop, + n = Math.floor(70); + A.scrollTop = i = n + i, + t > A.scrollTop && (A.scrollTop = e, + clearTimeout(o)) + }), 20); + else if (e > t) + var n = setInterval((function () { + var i = A.scrollTop, + o = Math.floor(i / 6); + A.scrollTop = i = o + i, + t > A.scrollTop && (A.scrollTop = e, + clearTimeout(n)) + }), 20); + else if (e === t) + return !1 + }, + closest: function (A, e) { + if (!A) + return null; + for (var t = A.matches || A.webkitMatchesSelector || A.mozMatchesSelector || A.msMatchesSelector; A && !t.call(A, e);) + A = A.parentElement; + return A + }, + addEventListener: function (A, e, t) { + if (A) + if (A.length) + for (var i = 0; A.length > i; i += 1) + A[i].addEventListener(e, (function (A) { + t && "function" == typeof t && t(A) + })); + else + A.addEventListener(e, (function (A) { + t && "function" == typeof t && t(A) + })) + }, + remove: function (A) { + if (A) + if (A.removeNode = [], + void 0 !== A.length) { + for (var e = A.length, t = 0; e > t; t += 1) + A.removeNode.push({ + parent: A[t].parentNode, + inner: A[t].outerHTML, + next: A[t].nextSibling + }); + for (t = 0; e > t; t += 1) + A[0].parentNode.removeChild(A[0]) + } else + A.removeNode.push({ + parent: A.parentNode, + inner: A.outerHTML, + next: A.nextSibling + }), + A.parentNode.removeChild(A) + }, + getStyleValue: function (A, e) { + var t = A.ownerDocument.defaultView; + return t && t.opener || (t = window), + A.currentStyle ? A.currentStyle[e] : t.getComputedStyle(A)[e] + }, + isShow: function (A) { + return "none" !== this.getStyleValue(A, "display") + }, + getHeight: function (A) { + if (null != A) { + if (this.isShow(A)) { + if (null != A.style.height && A.style.height.length > 0) + return parseFloat(A.style.height); + if (parseFloat(this.getStyleValue(A, "height")) > 0) + return parseFloat(this.getStyleValue(A, "height")); + if (A.offsetHeight > 0) { + var e = this.getStyleValue(A, "borderTopWidth"), + t = this.getStyleValue(A, "borderBottomWidth"), + i = this.getStyleValue(A, "paddingTop"), + o = this.getStyleValue(A, "paddingBottom"), + n = parseFloat(A.offsetHeight) - parseFloat(e) - parseFloat(t) - parseFloat(i) - parseFloat(o); + return parseFloat(n) + } + return 0 + } + var r = A.getAttribute("style") || ""; + A.setAttribute("style", r + "visibility:hidden;display:block !important;"); + var a = this.getHeight(A); + return A.setAttribute("style", r), + Math.ceil(a) + } + }, + getWidth: function (A) { + if (null != A) { + if (this.isShow(A)) { + if (null != A.style.width && A.style.width.length > 0) + return parseFloat(A.style.width); + if (parseFloat(this.getStyleValue(A, "width")) > 0) + return parseFloat(this.getStyleValue(A, "width")); + if (A.offsetWidth > 0) { + var e = this.getStyleValue(A, "borderLeftWidth"), + t = this.getStyleValue(A, "borderRightWidth"), + i = this.getStyleValue(A, "paddingLeft"), + o = this.getStyleValue(A, "paddingRight"), + n = parseFloat(A.offsetWidth) - parseFloat(e) - parseFloat(t) - parseFloat(i) - parseFloat(o); + return parseFloat(n) + } + return 0 + } + var r = A.getAttribute("style") || ""; + A.setAttribute("style", r + "visibility:hidden;display:inline-block !important;"); + var a = this.getWidth(A); + return A.setAttribute("style", r), + Math.ceil(a) + } + }, + outerHeight: function (A, e) { + var t = A.offsetHeight; + if (e) { + var i = A.currentStyle || getComputedStyle(A); + t += parseInt(i.marginTop, 0) + parseInt(i.marginBottom, 0) + } + return t + }, + outerWidth: function (A, e) { + var t = A.offsetWidth; + if (e) { + var i = A.currentStyle || getComputedStyle(A); + t += parseInt(i.marginLeft, 0) + parseInt(i.marginRight, 0) + } + return t + }, + isEmptyObject: function (A) { + var e = null; + for (e in A) + return !1; + return !0 + }, + hasClass: function (A, e) { + if (A) { + var t = A.className.match && A.className.match(new RegExp("(\\s|^)" + e + "(\\s|$)")); + return Boolean(t) + } + return !1 + }, + addClass: function (A, e) { + A && (this.hasClass(A, e) || (A.className += " " + e)) + }, + removeClass: function (A, e) { + if (this.hasClass(A, e)) { + var t = new RegExp("(\\s|^)" + e + "(\\s|$)"); + A.className = A.className.replace(t, " ") + } + }, + toggleClass: function (A, e) { + this.hasClass(A, e) ? this.removeClass(A, e) : this.addClass(A, e) + }, + simulateEvent: function (A, e) { + var t = document.createEvent("Event"); + t.initEvent(e, !0, !0); + A.dispatchEvent(t) + }, + bind: function (A, e, t) { + A && (A.addEventListener ? A.addEventListener(e, t, !1) : A.attachEvent ? A.attachEvent("on" + e, t) : A["on" + e] = t) + }, + delegate: function (A, e, t, i) { + if (A) + if (A.length) + for (var o = 0; A.length > o; o += 1) + this.delegateFn(A[o], e, t, i); + else + this.delegateFn(A, e, t, i) + }, + delegateFn: function (A, e, t, i) { + var o = this; + + function n(A) { + var n = (A = A || window.event).target || A.srcElement; + o.matchSelector(n, e) && i && ("mouseenter" === t || "mouseleave" === t ? o.fixedMouse(A, n) && i.call(n, A) : i.call(n, A)) + } + t = t.toLowerCase(), + A.addEventListener ? A.addEventListener("mouseenter" === t ? "mouseover" : "mouseleave" === t ? "mouseout" : t, n) : A.attachEvent("mouseenter" === t ? "onmouseover" : "mouseleave" === t ? "onmouseout" : "on" + t, n) + }, + matchSelector: function (A, e) { + return "#" === e.charAt(0) ? A.id === e.slice(1) : "." === e.charAt(0) ? -1 !== (" " + A.className + " ").indexOf(" " + e.slice(1) + " ") : A.tagName.toLowerCase() === e.toLowerCase() + }, + contains: function (A, e) { + return A.contains ? A !== e && A.contains(e) : Boolean(16 & A.compareDocumentPosition(e)) + }, + fixedMouse: function (A, e) { + var t = null, + i = A.type.toLowerCase(); + if ("mouseover" === i) + t = A.relatedTarget || A.fromElement; + else { + if ("mouseout" !== i) + return !0; + t = A.relatedTarget || A.toElement + } + return t && "xul" !== t.prefix && !this.contains(e, t) && t !== e + }, + fireEvent: function (A, e) { + var t = null; + if (A.ownerDocument) + t = A.ownerDocument; + else { + if (9 !== A.nodeType) + throw new Error("Invalid node passed to fireEvent: " + A.id); + t = A + } + if (A.dispatchEvent) { + var i = ""; + switch (e) { + case "click": + case "mousedown": + case "mouseup": + i = "MouseEvents"; + break; + case "focus": + case "change": + case "blur": + case "select": + i = "HTMLEvents"; + break; + default: + Bh.error("fireEvent: Couldn't find an event class for event '" + e + "'.") + } + (o = t.createEvent(i)).initEvent(e, "change" !== e, !0), + o.synthetic = !0, + A.dispatchEvent(o, !0) + } else if (A.fireEvent) { + var o; + (o = t.createEventObject()).synthetic = !0, + A.fireEvent("on" + e, o) + } + } + }; + xh.create = function (A, e) { + var t = document.createElement(A); + return t.setAttribute("class", e), + t + }; + xh.createNS = function (A, e) { + var t = document.createElementNS("http://www.w3.org/2000/svg", A); + return t.setAttribute("class", e), + t + }; + xh.select = function (A) { + return A.indexof("#") ? document.getElementById(A.replace("#", "")) : A.indexof(".") ? document.getElementsByClassName(A.replace(".", "")) : document.getElementsByTagName(A) + }; + var Sh = function (A) { + if ("" === A) + return 0; + if ("string" == typeof A) { + if (-1 === A.indexOf("px")) { + var e = Number(A); + return isNaN(e) ? 0 : e + } + var t = A.split("px"), + i = Number(t[0]); + return isNaN(i) ? 0 : i + } + return 0 + }; + xh.drag = function (A) { + var e = mh.isPc(), + t = Object.assign({ + element: null, + handle: null, + axis: "all", + cursor: "move", + distance: 0, + start: null, + move: null, + stop: null + }, A), + i = t.element; + if (!i) + return !1; + var o = t.handle || i, + n = void 0, + r = !1, + a = function (A) { + if (e) + var o = { + x: A.clientX, + y: A.clientY + }; + else + o = { + x: A.touches[0].clientX, + y: A.touches[0].clientY + }; + var a = { + x: o.x - n.x, + y: o.y - n.y + }; + r ? (t.move && t.move(n, o, a), + n = o, + function (A) { + var e = i.offsetLeft, + o = i.offsetTop, + n = Sh(getComputedStyle(i).marginLeft), + r = Sh(getComputedStyle(i).marginTop), + a = 0 > (e -= n) + A.x ? 0 : e + A.x, + s = 0 > (o -= r) + A.y ? 0 : o + A.y; + switch (t.axis) { + case "x": + i.style.left = a + "px"; + break; + case "y": + i.style.top = s + "px"; + break; + case "all": + default: + i.style.left = a + "px", + i.style.top = s + "px" + } + }(a)) : r = function (A) { + return Math.pow(A.x, 2) + Math.pow(A.y, 2) > Math.pow(t.distance, 2) && (t.start && t.start(n), + !0) + }(a) + }, + s = function (A) { + var i, r, s = A; + if (e) { + if (i = s.button, + !((r = navigator.userAgent).indexOf("compatible") > -1 && r.indexOf("MSIE") > -1 && !mh.isOpera() ? 1 === i : 0 === i)) + return; + n = { + x: s.clientX, + y: s.clientY + }, + document.addEventListener("mousemove", a) + } else + n = { + x: s.touches[0].clientX, + y: s.touches[0].clientY + }, + o.addEventListener("touchmove", a); + t.start && t.start(n) + }, + l = function () { + r && t.end && t.end(n), + r = !1, + document.removeEventListener("mousemove", a), + o.removeEventListener("touchmove", a) + }; + e ? (o.style.cursor = t.cursor, + o.style.userSelect = "none", + o.addEventListener("mousedown", s), + document.addEventListener("mouseup", l)) : (o.addEventListener("touchend", l), + o.addEventListener("touchstart", s)) + }; + xh.sizable = function (A) { + var e = Object.assign({ + element: null, + axis: "all", + minWidth: 100, + minHeight: 100, + distance: 0, + start: null, + sizable: null, + stop: null + }, A), + t = e.element; + if (!t) + return !1; + var i = void 0, + o = !1, + n = xh.create("div", "yj-resize"), + r = void 0, + a = void 0, + s = function (A) { + var n = { + x: A.clientX, + y: A.clientY + }, + s = { + x: n.x - i.x, + y: n.y - i.y + }; + o ? (e.sizable && e.sizable(i, n, s), + function (A) { + var i = t.offsetLeft, + o = t.offsetTop, + n = e.minWidth > r + A.x ? e.minWidth : r + A.x, + s = e.minHeight > a + A.y ? e.minHeight : a + A.y; + switch (e.resize && e.resize(n, s), + t.style.left = i + "px", + t.style.top = o + "px", + e.axis) { + case "x": + t.style.width = n + "px"; + break; + case "y": + t.style.height = s + "px"; + break; + case "all": + default: + t.style.width = n + "px", + t.style.height = s + "px" + } + }(s)) : o = function (A) { + return Math.pow(A.x, 2) + Math.pow(A.y, 2) > Math.pow(e.distance, 2) && (e.start && e.start(i), + !0) + }(s) + }, + l = function (A) { + r = t.clientWidth, + a = t.clientHeight; + var e, o, n = A; + (e = n.button, + (o = navigator.userAgent).indexOf("compatible") > -1 && o.indexOf("MSIE") > -1 && !mh.isOpera() ? 1 === e : 0 === e) && (i = { + x: n.clientX, + y: n.clientY + }, + document.addEventListener("mousemove", s), + document.addEventListener("touchmove", s)) + }, + c = function () { + o && e.end && e.end(i), + o = !1, + document.removeEventListener("mousemove", s), + document.removeEventListener("touchmove", s) + }; + xh.addClass(t, "yj-sizable"), + t.appendChild(n), + n.addEventListener("mousedown", l), + n.addEventListener("touchstart", l), + document.addEventListener("mouseup", c), + document.addEventListener("touchend", c) + }; + var wh = function (A) { + var e = this, + t = Object.assign({ + element: null, + min: 0, + max: 100, + cur: 50, + step: 1, + isShowProgress: !0, + input: null, + change: null, + currentColor: "#11dab7", + defaultColor: "#999" + }, A); + this._opt = t; + var i = xh.create("div", "yj-range"), + o = xh.create("input", "yj-input-range"); + e.input = o, + o.setAttribute("type", "range"), + o.setAttribute("step", t.step), + o.setAttribute("min", t.min), + o.setAttribute("max", t.max), + o.setAttribute("value", t.cur); + var n = xh.create("span", "yj-range-min"); + n.innerText = t.min; + var r = xh.create("span", "yj-range-cur"); + e.cur = r, + r.innerText = t.cur; + var a = xh.create("span", "yj-range-max"); + a.innerText = t.max; + var s = xh.create("span", "yj-range-progress"); + i.appendChild(o), + t.isShowProgress && (i.appendChild(n), + i.appendChild(r), + i.appendChild(a)), + i.appendChild(s), + t.element.appendChild(i), + e.setProgress(t.cur), + o.addEventListener("input", (function () { + e.setProgress(this.value), + t.input && t.input(this.value) + })), + o.addEventListener("change", (function () { + e.setProgress(this.value), + t.change && t.change(this.value) + })) + }; + wh.prototype.setProgress = function (A) { + var e = this._opt, + t = this.input, + i = this.cur, + o = (A - e.min) / (e.max - e.min) * 100; + t.value = A, + t.style.background = "linear-gradient(to right," + e.currentColor + " 0%," + e.currentColor + " " + o + "%," + e.defaultColor + " " + o + "%, " + e.defaultColor + " 100%)", + i.innerText = A + }, + wh.prototype.reset = function () { + this.setProgress(this._opt.cur) + }, + xh.range = wh; + var Mh = function (A) { + this._opt = Object.assign({ + element: null, + min: 0, + max: 100, + from: null, + to: null, + step: 1, + currentColor: "#11dab7", + defaultColor: "#999", + change: null + }, A), + this._opt.from = this._opt.from || this._opt.min, + this._opt.to = this._opt.to || this._opt.max, + this.init() + }; + Mh.prototype = { + init: function () { + var A = xh.create("div", "yj-multiple-range"), + e = xh.create("div", "yj-range-track"), + t = xh.create("span", "yj-slider yj-slider-min"); + t.id = "minSlider", + t.type = "minimum"; + var i = xh.create("span", "yj-slider yj-slider-max"); + i.id = "maxSlider", + i.type = "maximum", + this._state = { + from: this._opt.from, + to: this._opt.to + }, + e.style.backgroundColor = this._opt.currentColor, + A.style.backgroundColor = this._opt.defaultColor, + A.appendChild(e), + A.appendChild(t), + A.appendChild(i), + this._opt.element.appendChild(A), + this._track = e, + this._sliders = { + min: t, + max: i + }, + this._element = A, + this.bindEvent(), + this.update(!1) + }, + bindEvent: function () { + var A = this, + e = !1, + t = null, + i = null, + o = function (A) { + A = A || event; + i = A.screenX, + t = this, + e = !0 + }; + this._sliders.min.addEventListener("mousedown", o), + this._sliders.max.addEventListener("mousedown", o), + document.addEventListener("mousemove", (function (o) { + if (e) { + o = o || event; + var n = Math.round((o.screenX - i) / A._pix / A._opt.step) * A._opt.step; + 0 !== n && (i = n * A._pix + i, + "minimum" === t.type ? A._state.from += n : A._state.to += n, + A.recalculate(t), + A.update(!0)) + } + })), + document.addEventListener("mouseup", (function () { + t = null, + e = !1 + })) + }, + update: function (A) { + var e = this._sliders.min.offsetWidth, + t = this._sliders.max.offsetWidth; + this._pix || (this._pix = (this._element.offsetWidth - e - t) / (this._opt.max - this._opt.min)); + var i = (this._state.from - this._opt.min) * this._pix, + o = (this._state.to - this._opt.min) * this._pix + e + t; + this._track.style.left = i + e / 2 + "px", + this._track.style.width = o - i - e / 2 - t / 2 + "px", + this._sliders.min.style.left = i + "px", + this._sliders.max.style.left = o + "px", + this._opt.change && A && this._opt.change(this._state) + }, + recalculate: function (A) { + this._opt.max > this._state.to || (this._state.to = this._opt.max), + this._state.from > this._opt.min || (this._state.from = this._opt.min), + A && ("maximum" === A.type && (this._state.to > this._state.from || (this._state.to = this._state.from)), + "minimum" === A.type && (this._state.to > this._state.from || (this._state.from = this._state.to))) + }, + getProgress: function () { + return this._state + }, + setProgress: function (A) { + this._state = A, + this.recalculate(), + this.update(!1) + } + }, + xh.multipleRange = Mh; + var bh = function () { + var A = this; + Math.randomString = function (A) { + for (var e = "", t = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", i = 0; A > i; i += 1) + e += t.charAt(Math.floor(Math.random() * t.length)); + return e + }, + A.viewport = document.body, + A.counter = 0, + A.prompt = function (A, e) { + return new t(A, e) + }, + A.confirm = function (A) { + return new i(A) + }, + A.progress = function (A) { + return new n(A) + }, + A.error = {}, + A.success = {}, + A.warning = {}, + A.info = {}, + A.alert = function (A, e) { + if (["success", "error", "warning", "info"].indexOf(A) > -1) + return new o(A, e) + }, + A.window = function (A) { + return new r("window", A) + }; + var e = { + $type: null, + $el: null, + $options: null, + debug: function () { + this.$options.debug && window.console.debug.apply(window.console, arguments) + }, + _processInput: function (e) { + if (Array.isArray(e.buttons)) { + for (var t = {}, i = 0; e.buttons.length > i; i += 1) + t[e.buttons[i]] = A.base.OPTIONS.buttons[e.buttons[i]]; + e.buttons = t + } + for (var i in e.customBtnClass = e.customBtnClass ? e.customBtnClass : A.base.DEFAULTS.customBtnClass, + e.buttons) + if (e.buttons.hasOwnProperty(i)) { + var o = e.buttons[i]; + (o = uh.extend(!0, {}, A.base.OPTIONS.buttons[i], o)).class || (o.class = e.customBtnClass), + e.buttons[i] = o + } + return void 0 === (e = uh.extend(!0, {}, A.base.DEFAULTS, e)).showClass && (e.showClass = A.base.OPTIONS.showClass), + void 0 === e.hideClass && (e.hideClass = A.base.OPTIONS.hideClass), + void 0 === e.baseClass && (e.baseClass = A.base.OPTIONS.baseClass), + void 0 === e.delayToRemove && (e.delayToRemove = A.base.OPTIONS.delayToRemove), + e.iconClass || (e.iconClass = A.base.OPTIONS.icons[e.iconSource][this.$type]), + e + }, + _init: function () { + var A = this; + A._createMarkup(), + A.setTitle(A.$options.title), + A.$options.draggable && (A.$el.classList.add("draggable"), + A._enableDrag()), + A.$options.closeButton && A._addCloseButton(), + A.$options.closeOnEsc && document.addEventListener("keyup.lobibox", (function (e) { + 27 === e.which && A.destroy() + })), + A.$options.baseClass && A.$el.classList.add(A.$options.baseClass), + A.$options.showClass && (A.$el.classList.remove(A.$options.hideClass), + A.$el.classList.add(A.$options.showClass)), + A.$options.id && A.$el.setAttribute("id", A.$options.id), + A.$el.dataset.lobibox = A + }, + _calculatePosition: function (A) { + var e; + return e = "top" === A ? 30 : "bottom" === A ? window.outerHeight - xh.outerHeight(this.$el) - 30 : (window.outerHeight - xh.outerHeight(this.$el)) / 2, + "left:" + (window.outerWidth - xh.outerWidth(this.$el)) / 2 + "px;top:" + e + "px;" + }, + _createButton: function (A, e) { + var t = this, + i = document.createElement("button"), + o = []; + return e && e.class && (o = e.class.split(" ")), + o.map((function (A, e) { + i.classList.add(A) + })), + i.dataset.type = A, + i.innerHTML = e.text, + t.$options.callback && "function" == typeof t.$options.callback && i.addEventListener("click", (function (e) { + t._onButtonClick(t.$options.buttons[A], A), + t.$options.callback(t, this.dataset.type, e) + })), + i + }, + _onButtonClick: function (A, e) { + ("ok" === e && "prompt" === this.$type && this.isValid() || "prompt" !== this.$type || "ok" !== e) && A && A.closeOnClick && this.destroy() + }, + _generateButtons: function () { + var A = []; + for (var e in this.$options.buttons) + if (this.$options.buttons.hasOwnProperty(e)) { + var t = this._createButton(e, this.$options.buttons[e]); + A.push(t) + } + return A + }, + _createMarkup: function () { + var e = this, + t = document.createElement("div"); + t.className = "lobibox", + t.dataset.isModal = e.$options.modal, + t.dataset.backdrop = !!e.$options.backdrop; + var i = document.createElement("div"); + i.className = "lobibox-header", + t.appendChild(i); + var o = document.createElement("span"); + o.className = "lobibox-title", + i.appendChild(o); + var n = document.createElement("div"); + if (n.className = "lobibox-body", + t.appendChild(n), + e.$options.buttons && !uh.isEmptyObject(e.$options.buttons)) { + var r = document.createElement("div"); + r.className = "lobibox-footer", + e._generateButtons().map((function (A, e) { + r.appendChild(A) + })), + t.appendChild(r), + A.base.OPTIONS.buttonsAlign.indexOf(e.$options.buttonsAlign) > -1 && r.classList.add("text-" + e.$options.buttonsAlign) + } + t.classList.add(A.base.OPTIONS.modalClasses[e.$type]), + e.$el = t + }, + _setSize: function () { + var A = this; + A.setWidth(A.$options.width), + A.setHeight("auto" === A.$options.height ? xh.outerHeight(A.$el) : A.$options.height) + }, + _calculateBodyHeight: function (A) { + var e = this.$el.querySelector(".lobibox-header").outerHeight, + t = this.$el.querySelector(".lobibox-footer").outerHeight; + return A - (e || 0) - (t || 0) + }, + _addBackdrop: function () { + if (0 === document.querySelectorAll(".lobibox-backdrop").length) { + var e = document.createElement("div"); + e.className = "lobibox-backdrop", + A.viewport.appendChild(e) + } + }, + _removeBackdrop: function () { + for (var A = document.querySelectorAll(".lobibox-backdrop"), e = 0; A.length > e; e += 1) + A[e].remove() + }, + _triggerEvent: function (A) { + this.$options[A] && "function" == typeof this.$options[A] && this.$options[A](this) + }, + _calculateWidth: function (A) { + return (A = Math.min(Math.max(A, this.$options.width), window.outerWidth)) === window.outerWidth && (A -= 2 * this.$options.horizontalOffset), + A + }, + _calculateHeight: function (A) { + return (A = Math.min(Math.max(A, this.$options.height), window.outerHeight)) === window.outerHeight && (A -= 2 * this.$options.verticalOffset), + A + }, + _addCloseButton: function () { + var A = this, + e = document.createElement("span"); + e.className = "btn-close", + e.innerHTML = "×", + A.$el.querySelector(".lobibox-header").appendChild(e), + e.addEventListener("mousedown", (function (A) { + A.stopPropagation() + })), + e.addEventListener("click", (function () { + A.destroy() + })) + }, + _position: function () { + this._setSize(); + var A = this._calculatePosition(); + this.setPosition(A.left, A.top) + }, + _isMobileScreen: function () { + return 768 > window.outerHeight + }, + _enableDrag: function () { + var A = this.$el, + e = A.querySelector(".lobibox-header"); + e.addEventListener("mousedown", (function (e) { + e.preventDefault(), + A.setAttribute("offset-left", e.offsetX), + A.setAttribute("offset-top", e.offsetY), + A.setAttribute("allow-drag", "true") + })), + document.addEventListener("mouseup", (function () { + A.setAttribute("allow-drag", "false") + })), + document.addEventListener("mousemove", (function (e) { + if ("true" === A.getAttribute("allow-drag")) { + var t = e.clientX, + i = e.clientY; + 0 > i && (i = 5), + i > document.body.clientHeight && (i = document.body.clientHeight - 10), + 0 > t && (t = 5), + t > document.body.clientWidth - A.offsetWidth && (t = document.body.clientWidth - A.offsetWidth), + A.style.cssText += "left:" + t + "px;top:" + i + "px;" + } + })), + e.addEventListener("touchstart", (function (e) { + var t = A.style.top, + i = e.originalEvent.targetTouches[0].clientY; + A.setAttribute("offset-left", e.originalEvent.targetTouches[0].clientX - A.style.left), + A.setAttribute("offset-top", i - t), + A.setAttribute("allow-drag", "true") + })), + document.addEventListener("touchend", (function () { + A.setAttribute("allow-drag", "false") + })), + document.addEventListener("touchmove", (function (e) { + if ("true" === A.getAttribute("allow-drag")) { + var t = e.originalEvent.targetTouches[0].clientX, + i = e.originalEvent.targetTouches[0].clientY; + 0 > i && (i = 5), + i > document.body.clientHeight && (i = document.body.clientHeight - 10), + 0 > t && (t = 5), + t > document.body.clientWidth - A.offsetWidth && (t = document.body.clientWidth - A.offsetWidth), + A.style.cssText += "left:" + t + "px;top:" + i + "px;" + } + })) + }, + _setContent: function (A) { + return A && ("string" == typeof A && A.constructor == String ? this.$el.querySelector(".lobibox-body").innerHTML = A : this.$el.querySelector(".lobibox-body").appendChild(A)), + this + }, + _beforeShow: function () { + this._triggerEvent("onShow") + }, + _afterShow: function () { + var e = this; + A.counter++, + e.$el.setAttribute("data-nth", A.counter), + e.$options.draggable || window.addEventListener("resize.lobibox-" + e.$el.getAttribute("data-nth"), (function () { + e.refreshWidth(), + e.refreshHeight(), + e.$el.style.cssText += "left:50%;top:50%;margin-left:" + -e.$el.width / 2 + "px;margin-top:" + -e.$el.height / 2 + "px;" + })), + e._triggerEvent("shown") + }, + _beforeClose: function () { + this._triggerEvent("beforeClose") + }, + _afterClose: function () { + this.$options.draggable || window.removeEventListener("resize.lobibox-" + this.$el.getAttribute("data-nth")), + this._triggerEvent("closed") + }, + _beforeHide: function () { + this._triggerEvent("beforeHide") + }, + _afterHide: function () { + this._triggerEvent("afterHide") + }, + hide: function () { + var e = this; + + function t() { + e.$el.classList.add("lobibox-hidden"); + for (var t = document.querySelectorAll(".lobibox"), i = [].slice.call(t), o = 0; i.length > o; o += 1) + !0 !== i[o].dataset.isModal && i.splice(o, 1); + for (o = 0; i.length > o; o += 1) + i[o].classList.contains("lobibox-hidden") && i.splice(o, 1); + if (0 === i.length) { + var n = document.querySelectorAll(".lobibox-backdrop"); + for (o = 0; n.length > o; o += 1) + A.viewport.removeChild(n[o]); + A.viewport.classList.remove(A.base.OPTIONS.bodyClass) + } + e._afterHide() + } + return e._beforeHide(), + e.$options.hideClass ? (e.$el.classList.remove(e.$options.showClass), + e.$el.classList.add(e.$options.hideClass), + setTimeout((function () { + t() + }), e.$options.delayToRemove)) : t(), + this + }, + destroy: function () { + var e = this; + + function t() { + e.$el.remove(); + for (var t = document.querySelectorAll(".lobibox"), i = [].slice.call(t), o = 0; i.length > o; o += 1) + "true" !== i[o].dataset.isModal && i.splice(o, 1); + if (0 === i.length) { + var n = document.querySelectorAll(".lobibox-backdrop"); + for (o = 0; n.length > o; o += 1) + A.viewport.removeChild(n[o]); + A.viewport.classList.remove(A.base.OPTIONS.bodyClass) + } + var r = !1; + for (o = 0; i.length > o; o += 1) + if ("true" === i[o].dataset.backdrop) { + r = !0; + break + } + r || e._removeBackdrop(), + e._afterClose() + } + return e._beforeClose(), + e.$options.hideClass ? (xh.removeClass(e.$el, e.$options.showClass), + xh.addClass(e.$el, e.$options.hideClass), + setTimeout((function () { + t() + }), e.$options.delayToRemove)) : t(), + this + }, + setWidth: function (A) { + return this.$el.style.cssText += "width:" + this._calculateWidth(A) + "px;", + this + }, + refreshWidth: function () { + this.setWidth(this.$el.style.width) + }, + refreshHeight: function () { + this.setHeight(this.$el.style.height) + }, + setHeight: function (A) { + var e = this; + return e.$el.style.cssText += "height:" + e._calculateHeight(A) + "px", + e.$el.querySelector(".lobibox-body").style.cssText += "height:" + (e.$options.height - 41) + "px", + e + }, + setSize: function (A, e) { + return this.setWidth(A), + this.setHeight(e), + this + }, + setPosition: function (A, e) { + var t; + return "number" == typeof A && "number" == typeof e ? t = "left:" + A + "px;top:" + e + "px;" : "string" == typeof A ? t = this._calculatePosition(A) : "object" === lc(A) && (t = "left:" + A.left + "px;top:" + A.top + "px;right:" + A.right + "px;bottom:" + A.bottom + "px;"), + this.$el.style.cssText += t, + this + }, + setTitle: function (A) { + return this.$el.querySelector(".lobibox-title").innerHTML = A + }, + getTitle: function () { + return this.$el.querySelector(".lobibox-title").innerHTML + }, + show: function () { + var e = this, + t = A.viewport; + (e._beforeShow(), + e.$el.classList.remove("lobibox-hidden"), + t.appendChild(e.$el), + e.$options.buttons) && e.$el.querySelector(".lobibox-footer").children[0].focus(); + return (e.$options.modal || e.$options.backdrop) && (t.classList.add(A.base.OPTIONS.bodyClass), + e._addBackdrop()), + !1 !== e.$options.delay && setTimeout((function () { + e.destroy() + }), e.$options.delay), + e._afterShow(), + e + } + }; + + function t(e, t) { + this.$input = null, + this.$type = "prompt", + "object" == lc(e) ? t = e : this.$promptType = e, + t = uh.extend(!0, {}, A.prompt.DEFAULT_OPTIONS, t), + this.$options = this._processInput(t), + this._init(), + this.debug(this) + } + + function i(A) { + this.$type = "confirm", + this.$options = this._processInput(A), + this._init(), + this.debug(this) + } + + function o(A, e) { + this.$type = A, + this.$options = this._processInput(e), + this._init(), + this.debug(this) + } + + function n(A) { + this.$type = "progress", + this.$progressBarElement = null, + this.$options = this._processInput(A), + this.$progress = 0, + this._init(), + this.debug(this) + } + + function r(A, e) { + this.$type = A, + this.$options = this._processInput(e), + this._init(), + this.debug(this) + } + A.base = {}, + A.base.OPTIONS = { + bodyClass: "lobibox-open", + modalClasses: { + error: "lobibox-error", + success: "lobibox-success", + info: "lobibox-info", + warning: "lobibox-warning", + confirm: "lobibox-confirm", + progress: "lobibox-progress", + prompt: "lobibox-prompt", + default: "lobibox-default", + window: "lobibox-window" + }, + buttonsAlign: ["left", "center", "right"], + buttons: { + ok: { + class: "lobibox-btn lobibox-btn-default", + text: "OK", + closeOnClick: !0 + }, + cancel: { + class: "lobibox-btn lobibox-btn-cancel", + text: "Cancel", + closeOnClick: !0 + }, + yes: { + class: "lobibox-btn lobibox-btn-yes", + text: "确定", + closeOnClick: !0 + }, + no: { + class: "lobibox-btn lobibox-btn-no", + text: "取消", + closeOnClick: !0 + } + }, + icons: { + bootstrap: { + confirm: "glyphicon glyphicon-question-sign", + success: "glyphicon glyphicon-ok-sign", + error: "glyphicon glyphicon-remove-sign", + warning: "glyphicon glyphicon-exclamation-sign", + info: "glyphicon glyphicon-info-sign" + }, + fontAwesome: { + confirm: "fa fa-question-circle", + success: "fa fa-check-circle", + error: "fa fa-times-circle", + warning: "fa fa-exclamation-circle", + info: "fa fa-info-circle" + } + } + }, + A.base.DEFAULTS = { + horizontalOffset: 5, + verticalOffset: 5, + width: 600, + height: "auto", + closeButton: !0, + draggable: !0, + customBtnClass: "lobibox-btn lobibox-btn-default", + modal: !1, + debug: !1, + buttonsAlign: "center", + closeOnEsc: !0, + delayToRemove: 200, + delay: !1, + baseClass: "animated-super-fast", + showClass: "zoomIn", + hideClass: "zoomOut", + iconSource: "bootstrap", + onShow: null, + shown: null, + beforeClose: null, + closed: null + }, + t.prototype = uh.extend(!0, {}, e, { + constructor: t, + _processInput: function (i) { + var o = e._processInput.call(this, i); + return o.buttons = { + ok: A.base.OPTIONS.buttons.ok, + cancel: A.base.OPTIONS.buttons.cancel + }, + i = uh.extend(!0, {}, o, t.DEFAULT_OPTIONS, i) + }, + _init: function () { + e._init.call(this), + this._setContent(this.$options.content), + this.show() + }, + _afterShow: function () { + var A = this; + A._setContent(A._createInput())._position(), + A.$input && A.$input.focus(); + var t = (window.innerHeight - xh.outerHeight(A.$el)) / 2, + i = (window.innerWidth - xh.outerWidth(A.$el)) / 2; + A.setPosition(i, t), + e._afterShow.call(A) + }, + _createInput: function () { + var A, e = this; + if (e.$options.multiline) + e.$input = document.createElement("textarea"), + e.$input.setAttribute("rows", e.$options.lines); + else { + if (!e.$promptType) + return; + e.$input = document.createElement("input"), + e.$input.setAttribute("type", "' + me.$promptType + '") + } + if (e.$input.classList.add("lobibox-input"), + "[object Object]" === Object.prototype.toString.call(e.$options.attrs)) + for (var t in e.$options.attrs) + e.$input.setAttribute(t, e.$options.attrs[t]); + e.$options.value && e.setValue(e.$options.value), + e.$options.label && ((A = document.createElement("label")).innerHTML = e.$options.label); + var i = document.createElement("div"); + return e.$options.label && i.appendChild(A), + i.appendChild(e.$input), + i + }, + setValue: function (A) { + return this.$input.value = A, + this + }, + getValue: function () { + return this.$input.value + }, + isValid: function () { + var A = this, + e = A.$el.querySelectorAll(".lobibox-input-error-message"); + if (A.$options.required && !A.getValue()) { + if (A.$input.classList.add("invalid"), + 0 === e.length) { + var t = document.createElement("p"); + t.className = "lobibox-input-error-message", + t.innerHTML = A.$options.errorMessage, + A.$el.querySelector(".lobibox-body").appendChild(t), + A._position(), + A.$input.focus() + } + return !1 + } + A.$input.classList.remove("invalid"); + for (var i = 0; e.length > i; i += 1) + e[i].remove(); + return A._position(), + A.$input.focus(), + A._removeBackdrop(), + !0 + }, + _beforePromptShow: function () { + this._triggerEvent("beforeWindowShow") + }, + _beforePromptHide: function () { + this._triggerEvent("beforeWindowHide") + }, + _afterPromptShow: function () { + this._triggerEvent("afterWindowShow") + }, + _afterPromptHide: function () { + this._triggerEvent("afterWindowHide") + }, + promptHide: function () { + return this._beforePromptHide(), + this.$el.classList.add("hide"), + this._afterPromptHide(), + this + }, + promptShow: function () { + return this._beforePromptShow(), + this.$el.classList.remove("hide"), + this._afterPromptShow(), + this.$el.style.zIndex = (new Date).getTime() - A.window.startTime, + this + } + }), + t.DEFAULT_OPTIONS = { + width: 400, + attrs: {}, + value: "", + multiline: !1, + lines: 3, + type: "text", + label: "", + required: !0, + errorMessage: "The field is required" + }, + i.prototype = uh.extend(!0, {}, e, { + constructor: i, + _processInput: function (t) { + var i = e._processInput.call(this, t); + return i.buttons = { + yes: A.base.OPTIONS.buttons.yes, + no: A.base.OPTIONS.buttons.no + }, + t = uh.extend(!0, {}, i, A.confirm.DEFAULTS, t) + }, + _init: function () { + e._init.call(this), + this.show() + }, + _afterShow: function () { + var A = this, + t = document.createElement("div"); + if (A.$options.iconClass) { + var i = document.createElement("div"); + i.className = "lobibox-icon-wrapper", + t.appendChild(i); + var o = document.createElement("i"); + o.className = "lobibox-icon" + A.$options.iconClass, + t.appendChild(o) + } + var n = document.createElement("div"); + n.className = "lobibox-body-text-wrapper", + t.appendChild(n); + var r = document.createElement("span"); + r.className = "lobibox-body-text", + r.innerHTML = A.$options.msg, + n.appendChild(r), + A._setContent(t.innerHTML), + A._position(), + e._afterShow.call(A) + }, + _beforeConfirmShow: function () { + this._triggerEvent("beforeWindowShow") + }, + _beforeConfirmHide: function () { + this._triggerEvent("beforeWindowHide") + }, + _afterConfirmShow: function () { + this._triggerEvent("afterWindowShow") + }, + _afterConfirmHide: function () { + this._triggerEvent("afterWindowHide") + }, + confirmHide: function () { + return this._beforeConfirmHide(), + this.$el.classList.add("hide"), + this._afterConfirmHide(), + this + }, + confirmShow: function () { + return this._beforeConfirmShow(), + this.$el.classList.remove("hide"), + this._afterConfirmShow(), + this.$el.style.zIndex = (new Date).getTime() - A.window.startTime, + this + } + }), + A.confirm.DEFAULTS = { + title: "Question", + width: 500 + }, + o.prototype = uh.extend(!0, {}, e, { + constructor: o, + _processInput: function (t) { + var i = e._processInput.call(this, t); + return i.buttons = {}, + t = uh.extend(!0, {}, i, A.alert.OPTIONS[this.$type], A.alert.DEFAULTS, t) + }, + _init: function () { + e._init.call(this), + this.show() + }, + _afterShow: function () { + var A = this, + t = document.createElement("div"); + if (A.$options.iconClass) { + var i = document.createElement("div"); + i.className = "lobibox-icon-wrapper", + t.appendChild(i); + var o = document.createElement("i"); + o.className = "lobibox-icon" + A.$options.iconClass, + t.appendChild(o) + } + var n = document.createElement("div"); + n.className = "lobibox-body-text-wrapper", + t.appendChild(n); + var r = document.createElement("span"); + r.className = "lobibox-body-text", + r.innerHTML = A.$options.msg, + n.appendChild(r), + A._setContent(t.innerHTML), + A._setSize(); + var a = (window.innerHeight - xh.outerHeight(A.$el)) / 2, + s = (window.innerWidth - xh.outerWidth(A.$el)) / 2; + A.setPosition(s, a), + e._afterShow.call(A) + } + }), + A.alert.OPTIONS = { + warning: { + title: "Warning" + }, + info: { + title: "Information" + }, + success: { + title: "Success" + }, + error: { + title: "Error" + } + }, + A.alert.DEFAULTS = {}, + n.prototype = uh.extend(!0, {}, e, { + constructor: n, + _processInput: function (t) { + var i = e._processInput.call(this, t); + return t = uh.extend(!0, {}, i, A.progress.DEFAULTS, t) + }, + _init: function () { + e._init.call(this), + this.show() + }, + _afterShow: function () { + var A, t = this; + t.$progressBarElement = t.$options.progressTpl ? t.$options.progressTpl : t._createProgressbar(), + t.$options.label && ((A = document.createElement("label")).innerHTML = t.$options.label); + var i = document.createElement("div").appendChild(A); + i.appendChild(t.$progressBarElement), + t._setContent(i), + t._position(), + e._afterShow.call(t) + }, + _createProgressbar: function () { + var A = document.createElement("div"); + A.classList.add("lobibox-progress-bar-wrapper"), + A.classList.add("lobibox-progress-outer"); + var e = document.createElement("div"); + if (e.classList.add("lobibox-progress-bar"), + e.classList.add("lobibox-progress-element"), + A.appendChild(e), + this.$options.showProgressLabel) { + var t = document.createElement("span"); + t.className = "lobibox-progress-text", + t.dataset.role = "progress-text", + A.appendChild(t) + } + return A + }, + setProgress: function (A) { + var e = this; + if (100 !== e.$progress) + return A = Math.min(100, Math.max(0, A)), + e.$progress = A, + e._triggerEvent("progressUpdated"), + 100 === e.$progress && e._triggerEvent("progressCompleted"), + e.$el.querySelector(".lobibox-progress-element").style.cssText += "width" + A.toFixed(1) + "%", + e.$el.querySelector(".lobibox-progress-text").innerHTML = A.toFixed(1) + "%", + e + }, + getProgress: function () { + return this.$progress + } + }), + A.progress.DEFAULTS = { + width: 500, + showProgressLabel: !0, + label: "", + progressTpl: !1, + progressUpdated: null, + progressCompleted: null + }, + r.prototype = uh.extend(!0, {}, e, { + constructor: r, + _processInput: function (t) { + var i = e._processInput.call(this, t); + return t.content && "function" == typeof t.content && (t.content = t.content()), + t = uh.extend(!0, {}, i, A.window.DEFAULTS, t) + }, + _init: function () { + var A = this; + e._init.call(A), + A.setContent(A.$options.content), + A.$options.url && A.$options.autoload ? (A.$options.showAfterLoad || A.show(), + A.load((function () { + A.$options.showAfterLoad && A.show() + }))) : A.show() + }, + _afterShow: function () { + this._position(), + e._afterShow.call(this) + }, + _addCloseButton: function () { + var A = this, + e = document.createElement("span"); + e.className = "btn-close", + e.innerHTML = "×", + A.$el.querySelector(".lobibox-header").appendChild(e), + e.addEventListener("mousedown", (function (A) { + A.stopPropagation() + })), + e.addEventListener("click", (function () { + A.windowHide() + })) + }, + _beforeWindowShow: function () { + this._triggerEvent("beforeWindowShow") + }, + _beforeWindowHide: function () { + this._triggerEvent("beforeWindowHide") + }, + _afterWindowShow: function () { + this._triggerEvent("afterWindowShow") + }, + _afterWindowHide: function () { + this._triggerEvent("afterWindowHide") + }, + windowHide: function () { + return this._beforeWindowHide(), + this.$el.classList.add("hide"), + this._afterWindowHide(), + this + }, + windowShow: function () { + return this._beforeWindowShow(), + this.$el.classList.remove("hide"), + this._afterWindowShow(), + this.$el.style.zIndex = (new Date).getTime() - A.window.startTime, + this + }, + setParams: function (A) { + return this.$options.params = A, + this + }, + getParams: function () { + return this.$options.params + }, + setLoadMethod: function (A) { + return this.$options.loadMethod = A, + this + }, + getLoadMethod: function () { + return this.$options.loadMethod + }, + setContent: function (A) { + return this.$options.content = A, + this.$el.querySelector(".lobibox-body").innerHTML = "", + xh.append(this.$el.querySelector(".lobibox-body"), A), + this + }, + getContent: function () { + return this.$options.content + }, + setUrl: function (A) { + return this.$options.url = A, + this + }, + getUrl: function () { + return this.$options.url + }, + load: function (A) { + var e = this; + return e.$options.url ? ($.ajax(e.$options.url, { + method: e.$options.loadMethod, + data: e.$options.params + }).done((function (t) { + e.setContent(t), + A && "function" == typeof A && A(t) + })), + e) : e + } + }), + A.window.DEFAULTS = { + width: 480, + height: 600, + content: "", + url: "", + draggable: !0, + autoload: !0, + loadMethod: "GET", + showAfterLoad: !0, + params: {} + }, + A.window.startTime = (new Date).getTime(); + var a = function (e, t) { + this.$type = null, + this.$options = null, + this.$el = null; + var i = this, + o = function (A) { + for (var e = xh.closest(A, ".lb-notify-tabs").childNodes, t = 0; e.length > t; t += 1) + "li" == e[t].nodeType && e[t].classList.remove("active"); + A.classList.add("active"); + var i = A.querySelector("a").getAttribute("href"), + o = xh.closest(i, ".lb-notify-wrapper").querySelectorAll(".lb-tab-pane"); + for (t = 0; o.length > t; t += 1) + o[t].classList.remove("active"); + i.addClass("active") + }, + n = function (e) { + var t = document.createElement("li"); + t.className = A.notify.OPTIONS[i.$type].class; + var o = document.createElement("a"); + o.setAttribute("href", "#" + e), + t.appendChild(o); + var n = document.createElement("i"); + return n.className = "tab-control-icon" + i.$options.icon, + o.appendChild(n), + t + }, + r = function () { + var A = document.createElement("div"); + return A.className = "lb-tab-pane", + A.id = Math.randomString(10), + A + }, + a = function (A) { + if (i.$options.closable) { + var e = document.createElement("span"); + e.className = "lobibox-close", + e.innerHTML = "×", + A.appendChild(e), + e.addEventListener("click", (function () { + i.remove() + })) + } + }, + s = function (A) { + i.$options.closeOnClick && A.click((function () { + i.remove() + })) + }, + l = function (A) { + if (i.$options.delay) { + if (i.$options.delayIndicator) { + var e = document.createElement("div"); + e.className = "lobibox-delay-indicator"; + var t = document.createElement("div"); + e.appendChild(t), + A.appendChild(e) + } + var o = 0, + n = 1e3 / 30, + r = (new Date).getTime(), + a = setInterval((function () { + i.$options.continueDelayOnInactiveTab ? o = (new Date).getTime() - r : o += n; + var A = 100 * o / i.$options.delay; + if (100 > A || (A = 100, + i.remove(), + a = clearInterval(a)), + i.$options.delayIndicator) + for (var t = e.querySelectorAll("div"), s = 0; t.length > s; s += 1) + t[s].style.cssText += "width:" + A + "%" + }), n); + i.$options.pauseDelayOnHover && (A.addEventListener("mouseenter.lobibox", (function () { + n = 0 + })), + A.addEventListener("mouseleave.lobibox", (function () { + n = 1e3 / 30 + }))) + } + }, + c = function (A) { + return A = Math.min(window.outerWidth, A) + }; + this.remove = function () { + i.$el.classList.remove(i.$options.showClass), + i.$el.classList.add(i.$options.hideClass); + var e = i.$el.parentNode, + t = xh.closest(e, ".lobibox-notify-wrapper-large") || xh.closest(e, ".lobibox-notify-wrapper"); + if (e) { + for (var n = "#" + e.getAttribute("id"), r = t.querySelectorAll(".lb-notify-tabs li"), a = 0; r.length > a; a += 1) + r[a].querySelector("a").getAttribute("href") !== n && r.splice(1, a); + if (r.length > 0) + for (a = 0; r.length > a; a += 1) + r[a].classList.remove(A.notify.OPTIONS.class), + r[a].classList.add(i.$options.hideClass); + return setTimeout((function () { + if ("normal" === i.$options.size || "mini" === i.$options.size) + i.$el.parentElement.removeChild(i.$el); + else if ("large" === i.$options.size) { + var t = function (A) { + var e = A.prev(); + return 0 === e.length && (e = A.next()), + 0 === e.length ? null : e + }(r); + t && o(t), + r.parentElement.removeChild(r), + e.parentElement.removeChild(e) + } + var n = A.notify.list, + a = n.indexOf(i); + n.splice(a, 1); + var s = n[a]; + s && s.$options.showAfterPrevious && s._init() + }), 500), + i + } + }, + i._init = function () { + var e = function () { + var e, t, o, n, r, h = A.notify.OPTIONS, + d = document.createElement("div"); + if (d.classList.add("lobibox-notify"), + d.classList.add(h[i.$type].class), + d.classList.add(h.class), + d.classList.add(i.$options.showClass), + (o = document.createElement("div")).className = "lobibox-notify-icon-wrapper", + d.appendChild(o), + (e = document.createElement("div")).className = "lobibox-notify-icon", + o.appendChild(e), + t = document.createElement("div"), + e.appendChild(t), + i.$options.img) { + var p = document.createElement("img"); + p.src = i.$options.img, + t.appendChild(p) + } else if (i.$options.icon) { + var g = document.createElement("div"); + g.className = "icon-el"; + var u = document.createElement("i"); + u.className = i.$options.icon, + g.appendChild(u), + t.appendChild(g) + } else + d.classList.add("without-icon"); + if ((r = document.createElement("div")).className = "lobibox-notify-msg", + r.innerHTML = i.$options.msg, + !1 !== i.$options.messageHeight && (r.style.cssText += "max-height:" + i.$options.messageHeight + "px;"), + (n = document.createElement("div")).className = "lobibox-notify-body", + n.appendChild(r), + d.appendChild(n), + i.$options.title) { + var f = document.createElement("div"); + f.className = "lobibox-notify-title", + f.innerHTML = i.$options.title, + n.insertBefore(f, r) + } + return a(d), + "normal" !== i.$options.size && "mini" !== i.$options.size || (s(d), + l(d)), + i.$options.width && (d.style.cssText += "width:" + c(i.$options.width) + "px"), + d + }(); + if ("mini" === i.$options.size && e.classList.add("notify-mini"), + "string" == typeof i.$options.position) { + var t = function () { + var e, t = ("large" === i.$options.size ? ".lobibox-notify-wrapper-large" : ".lobibox-notify-wrapper") + "." + i.$options.position.replace(/\s/gi, "."); + if (0 !== (e = document.querySelectorAll(t)).length) + return e[0]; + e = document.createElement("div"); + for (var o = t.split("."), n = 1; o.length > n; n += 1) + e.classList.add(o[n]); + if (A.viewport.appendChild(e), + "large" === i.$options.size) { + var r = document.createElement("ul"); + r.className = "lb-notify-tabs"; + var a = document.createElement("div"); + a.className = "lb-notify-wrapper", + e.appendChild(r), + e.appendChild(a) + } + return e + }(); + ! function (A, e) { + if ("normal" === i.$options.size) + e.classList.contains("bottom") ? e.insertBefore(A, e.firstChild) : e.appendChild(A); + else if ("mini" === i.$options.size) + e.classList.contains("bottom") ? e.insertBefore(A, e.firstChild) : e.appendChild(A); + else if ("large" === i.$options.size) { + var t = r().appendChild(A), + a = n(t.getAttribute("id")); + e.querySelector(".lb-notify-wrapper").appendChild(t), + e.querySelector(".lb-notify-tabs").appendChild(a), + o(a); + for (var s = a.querySelectorAll("a"), l = 0; s.length > l; l += 1) + s[l].click((function () { + o(a) + })) + } + }(e, t), + t.classList.contains("center") && (t.style.cssText += "margin-left:" + -t.offsetWidth / 2 + "px") + } else + A.viewport.appendChild(e), + e.style.cssText += "position:fixed;left:" + i.$options.position.left + "px;top:" + i.$options.position.top + "px;"; + (i.$el = e, + i.$options.sound) && new Audio(i.$options.sound).play(); + i.$options.rounded && i.$el.classList.add("rounded"), + i.$el.addEventListener("click", (function (A) { + i.$options.onClickUrl && (window.location.href = i.$options.onClickUrl), + i.$options.onClick && "function" == typeof i.$options.onClick && i.$options.onClick.call(i, A) + })), + i.$el.dataset.lobibox = i + }, + this.$type = e, + this.$options = function (e) { + return "mini" !== e.size && "large" !== e.size || (e = uh.extend(!0, {}, A.notify.OPTIONS[e.size], e)), + "mini" !== (e = uh.extend(!0, {}, A.notify.OPTIONS[i.$type], A.notify.DEFAULTS, e)).size && !0 === e.title ? e.title = A.notify.OPTIONS[i.$type].title : "mini" === e.size && !0 === e.title && (e.title = !1), + !0 === e.icon && (e.icon = A.notify.OPTIONS.icons[e.iconSource][i.$type]), + !0 === e.sound && (e.sound = A.notify.OPTIONS[i.$type].sound), + e.sound && (e.sound = e.soundPath + e.sound + e.soundExt), + e + }(t), + i.$options.showAfterPrevious && 0 !== A.notify.list.length || this._init() + }; + A.notify = function (e, t) { + if (["default", "info", "warning", "error", "success"].indexOf(e) > -1) { + var i = new a(e, t); + return A.notify.list.push(i), + i + } + }, + A.notify.list = [], + A.notify.closeAll = function () { + var e = A.notify.list; + for (var t in e) { + e[t].parentNode.removeChild(e[t]) + } + }, + A.notify.DEFAULTS = { + title: !0, + size: "normal", + soundPath: "sounds/", + soundExt: ".ogg", + showClass: "fadeInDown", + hideClass: "zoomOut", + icon: !0, + msg: "", + img: null, + closable: !0, + hideCloseButton: !1, + delay: 5e3, + delayIndicator: !0, + closeOnClick: !0, + width: 400, + sound: !0, + position: "bottom right", + iconSource: "bootstrap", + rounded: !1, + messageHeight: 60, + pauseDelayOnHover: !0, + onClickUrl: null, + showAfterPrevious: !1, + continueDelayOnInactiveTab: !0, + onClick: null + }, + A.notify.OPTIONS = { + class: "animated-fast", + large: { + width: 500, + messageHeight: 96 + }, + mini: { + class: "notify-mini", + messageHeight: 32 + }, + default: { + class: "lobibox-notify-default", + title: "Default", + sound: !1 + }, + success: { + class: "lobibox-notify-success", + title: "Success", + sound: "sound2" + }, + error: { + class: "lobibox-notify-error", + title: "Error", + sound: "sound4" + }, + warning: { + class: "lobibox-notify-warning", + title: "Warning", + sound: "sound5" + }, + info: { + class: "lobibox-notify-info", + title: "Information", + sound: "sound6" + }, + icons: { + bootstrap: { + success: "glyphicon glyphicon-ok-sign", + error: "glyphicon glyphicon-remove-sign", + warning: "glyphicon glyphicon-exclamation-sign", + info: "glyphicon glyphicon-info-sign" + }, + fontAwesome: { + success: "fa fa-check-circle", + error: "fa fa-times-circle", + warning: "fa fa-exclamation-circle", + info: "fa fa-info-circle" + } + } + } + }, + Uh = 37, + Fh = 38, + Kh = 39, + Qh = 40, + Rh = 65, + Th = 68, + kh = 69, + Dh = 81, + Lh = 83, + Nh = 87, + Oh = 90, + Vh = 187, + Gh = 189, + Ph = 48, + qh = 27, + jh = { + ReverseWheelDirection: !1, + MovementSpeedRate: 1, + WalkSpeedRate: 1, + RotatePivotMode: kc.MOUSEPOINT, + NoPan: !1, + NoRotate: !1, + NoZoom: !1, + NoKey: !1, + LockAxisZ: !1, + LockAxisZRange: null + }, + Hh = function (A, e) { + this.defaultSetting = { + colorRects: !0, + picker: !0, + colorCode: !0, + hasOpacity: !0 + }, + this.color = { + hex: void 0, + rgb: void 0, + rgba: void 0, + hsl: void 0 + }, + this.colorInputDom = A, + this.element = this.create(e) + }; + Hh.prototype = { + constructor: Hh, + create: function (A) { + var e = this.defaultSetting; + A && (e = uh.extend(!0, this.defaultSetting, A)); + var t = document.createElement("div"); + return t.style.cssText += "width:190px;position:absolute;", + e.colorRects && t.appendChild(this.createRects(!!e.hasOpacity)), + e.picker && t.appendChild(this.createPicker(!!e.hasOpacity)), + e.colorCode && t.appendChild(this.createColorCode()), + t.appendChild(this.createBtn()), + this.element = t, + t + }, + createBtn: function () { + var A = this, + e = document.createElement("div"), + t = document.createElement("button"); + t.className = "btn-yes", + t.innerHTML = "确定", + t.style.cssText += "display:inline-block;margin:10px;color:#000;background-color: #FFFFFF;border: 2px solid #FFFFFF;border-radius: 4px; width: 73px;height: 32px;", + t.addEventListener("click", (function () { + A.element.style.display = "none" + })); + var i = document.createElement("button"); + return i.className = "btn-no", + i.innerHTML = "取消", + i.style.cssText += "display:inline-block;margin:10px;color:#000;background-color: #FFFFFF;border: 2px solid #FFFFFF;border-radius: 4px; width: 73px;height: 32px;", + i.addEventListener("click", (function () { + A.element.style.display = "none" + })), + e.appendChild(t), + e.appendChild(i), + e + }, + createRects: function (A) { + var e = this, + t = document.createElement("div"); + t.className = "rectFather", + t.style.cssText += "width:180px;height:180px;margin-top:10px;margin-left:10px;display:flex;flex-wrap:wrap;align-items:flex-start;"; + for (var i = [], o = ["00", "55", "AA", "FF"], n = 0, r = 0, a = 0, s = "", l = 0; 64 > l;) + s = "#" + o[n] + o[r] + o[a], + i[l] = document.createElement("span"), + i[l].className = "spans" + l, + i[l].style.cssText += "width:15px;height:15px;margin:1px 2px;border:1px solid #FFFFFF;background-color:" + s + ";", + i[l].setAttribute("color", s), + t.appendChild(i[l]), + (l += 1) % 16 == 0 ? n += 1 : l % 4 == 0 ? (r += 1) > 3 && (r = 0) : (a += 1) > 3 && (a = 0); + var c = t.querySelectorAll("span"); + return xh.addEventListener(c, "click", (function (t) { + for (var i = 0; c.length > i; i += 1) + c[i].style.cssText += "border:1px solid #FFFFFF;"; + var o = t.target; + o.style.cssText += "border:2px solid #000000;"; + var n = o.getAttribute("color"); + A ? e.setColor(n, 1) : e.setColor(n), + t.stopPropagation ? t.stopPropagation() : t.cancelBubble = !0 + })), + t + }, + createPicker: function (A) { + var e = this, + t = document.createElement("div"); + t.style.cssText += "width:180px;margin-left:10px;"; + var i = document.createElement("span"); + i.className = "colorShow", + i.style.cssText += "display:block;width:170px;height:30px;border-radius:5px;margin-top:10px;margin-bottom:10px;background-color:#FFFFFF;", + t.appendChild(i); + var o = document.createElement("span"); + o.innerHTML = "红 : ", + o.style.color = "#FF0000"; + var n = document.createElement("input"); + n.type = "range", + n.className = "redRange", + n.style.cssText += "background:linear-gradient(#FFFFFF, #FFFFFF) no-repeat, #FF0000;", + n.setAttribute("step", "1"), + n.setAttribute("min", "0"), + n.setAttribute("max", "255"), + n.setAttribute("value", "255"); + var r = document.createElement("div"); + r.appendChild(o), + r.appendChild(n), + t.appendChild(r); + var a = document.createElement("span"); + a.innerHTML = "绿 : ", + a.style.color = "#00FF00"; + var s = document.createElement("input"); + s.type = "range", + s.className = "greenRange", + s.style.cssText += "background:linear-gradient(#FFFFFF, #FFFFFF) no-repeat, #00FF00;", + s.setAttribute("step", "1"), + s.setAttribute("min", "0"), + s.setAttribute("max", "255"), + s.setAttribute("value", "255"); + var l = document.createElement("div"); + l.appendChild(a), + l.appendChild(s), + t.appendChild(l); + var c = document.createElement("span"); + c.innerHTML = "蓝 : ", + c.style.color = "#0000FF"; + var h = document.createElement("input"); + h.type = "range", + h.className = "blueRange", + h.style.cssText += "background:linear-gradient(#FFFFFF, #FFFFFF) no-repeat, #0000FF;", + h.setAttribute("step", "1"), + h.setAttribute("min", "0"), + h.setAttribute("max", "255"), + h.setAttribute("value", "255"); + var d = document.createElement("div"); + d.appendChild(c), + d.appendChild(h), + t.appendChild(d); + var p = t.querySelector(".redRange"), + g = t.querySelector(".greenRange"), + u = t.querySelector(".blueRange"), + f = null; + if (p.addEventListener("input", (function () { + var t = "#" + ((1 << 24) + (Number(p.value) << 16) + (Number(g.value) << 8) + Number(u.value)).toString(16).slice(1); + if (A) { + var i = Number(f.value); + e.setColor(t, i) + } else + e.setColor(t) + })), + g.addEventListener("input", (function () { + var t = "#" + ((1 << 24) + (Number(p.value) << 16) + (Number(g.value) << 8) + Number(u.value)).toString(16).slice(1); + if (A) { + var i = Number(f.value); + e.setColor(t, i) + } else + e.setColor(t) + })), + u.addEventListener("input", (function () { + var t = "#" + ((1 << 24) + (Number(p.value) << 16) + (Number(g.value) << 8) + Number(u.value)).toString(16).slice(1); + if (A) { + var i = Number(f.value); + e.setColor(t, i) + } else + e.setColor(t) + })), + A) { + var m = document.createElement("span"); + m.innerHTML = "透明度 : ", + m.style.color = "#FFFFFF"; + var C = document.createElement("input"); + C.type = "range", + C.className = "opacityRange", + C.style.cssText += "width:97px;background:linear-gradient(#FFFFFF, #FFFFFF) no-repeat, #FFFFFF;", + C.setAttribute("step", "0.01"), + C.setAttribute("min", "0"), + C.setAttribute("max", "1"), + C.setAttribute("value", "1"); + var y = document.createElement("div"); + y.appendChild(m), + y.appendChild(C), + t.appendChild(y), + (f = t.querySelector(".opacityRange")).addEventListener("input", (function () { + var A = "#" + ((1 << 24) + (Number(p.value) << 16) + (Number(g.value) << 8) + Number(u.value)).toString(16).slice(1), + t = Number(f.value); + e.setColor(A, t) + })) + } + return t + }, + createColorCode: function () { + var A = this, + e = document.createElement("div"); + e.style.cssText += "width:180px;margin-left:10px;"; + var t = document.createElement("input"); + t.className = "colorCode", + t.type = "text", + t.style.cssText += "display:block;float:left;width:110px;margin:10px 10px 10px 0;padding-left:3px;", + t.value = "#ffffff", + e.appendChild(t); + var i = document.createElement("span"); + return i.className = "colorCodeBtn", + i.style.cssText += "display:block;float:left;width:38px;height:21px;border-radius:5px;margin-top:10px;background-color:#FFFFFF;font-size:13px;text-align:center;line-height:21px;cursor:default;", + i.innerHTML = "HEX", + i.addEventListener("click", (function (e) { + var t = e.target.textContent, + i = A.element.querySelector(".colorCode").value; + if (A.element.querySelector(".opacityRange")) + var o = Number(A.element.querySelector(".opacityRange").value); + "HEX" === t ? e.target.innerHTML = "RGB" : "RGB" === t && (e.target.innerHTML = "HEX"), + A.setColor(i, o) + })), + e.appendChild(i), + e + }, + colorRgbToHex: function (A) { + if (A) { + var e = (A = A.toLowerCase()).replace(/rgba?\(/, "").replace(/\)/, "").replace(/[\s+]/g, "").split(","), + t = parseFloat(e[3] || 1), + i = Math.floor(t * parseInt(e[0], 0) + 255 * (1 - t)), + o = Math.floor(t * parseInt(e[1], 0) + 255 * (1 - t)), + n = Math.floor(t * parseInt(e[2], 0) + 255 * (1 - t)); + return "#" + ("0" + i.toString(16)).slice(-2) + ("0" + o.toString(16)).slice(-2) + ("0" + n.toString(16)).slice(-2) + } + return A + }, + colorHexToRgb: function (A, e) { + var t = A.toLowerCase(); + if (t && /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/.test(t)) { + if (4 === t.length) { + for (var i = "#", o = 1; 4 > o; o += 1) + i += t.slice(o, o + 1).concat(t.slice(o, o + 1)); + t = i + } + for (var n = [], r = 1; 7 > r; r += 2) + n.push(parseInt("0x" + t.slice(r, r + 2), 0)); + if (!isNaN(e)) { + var a = Number(e); + return 0 > a || a > 1 ? t : "rgba(" + n.join(",") + "," + a + ")" + } + return "rgb(" + n.join(",") + ")" + } + return t + }, + checkColor: function (A) { + var e = {}; + if (A) { + var t = A.toLowerCase(); + t && /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/.test(t) ? (e.color = !0, + e.hex = !0, + e.rgb = !1, + e.hsl = !1, + e.hexLength = 4 === t.length ? 3 : 6) : t && /^rgb/.test(t) ? (e.color = !0, + e.hex = !1, + e.rgb = !0, + e.hsl = !1) : t && /^hsl/.test(t) ? (e.color = !0, + e.hex = !1, + e.rgb = !1, + e.hsl = !0) : (e.color = !1, + e.hex = !1, + e.rgb = !1, + e.hsl = !1) + } else + e.color = !1, + e.hex = !1, + e.rgb = !1, + e.hsl = !1; + return e + }, + setColor: function (A, e) { + var t = this.defaultSetting; + if (t.picker || t.colorCode) { + var i = this.checkColor(A); + if (i.color) { + var o = "", + n = "", + r = A.toLowerCase(); + if (i.hex) { + if (3 === i.hexLength) { + for (var a = "#", s = 1; 4 > s; s += 1) + a += r.slice(s, s + 1).concat(r.slice(s, s + 1)); + r = a + } + n = r, + o = this.colorHexToRgb(A, e) + } else + i.rgb && (n = this.colorRgbToHex(A), + o = r); + if (o) { + if (t.picker) { + xh.css(this.element.querySelector(".colorShow"), { + "background-color": o + }); + var l = this.getRgbNumber(n); + 3 === l.length && (this.element.querySelector(".redRange").value = l[0], + this.element.querySelector(".greenRange").value = l[1], + this.element.querySelector(".blueRange").value = l[2], + e && (this.element.querySelector(".opacityRange").value = e)) + } + if (t.colorCode) { + var c = this.element.querySelector(".colorCode"); + c.value = n; + var h = this.element.querySelector(".colorCodeBtn").textContent; + "HEX" === h ? c.value = n : "RGB" === h && (c.value = o) + } + this.colorInputDom.value = o, + xh.simulateEvent(this.colorInputDom, "change") + } + } + } + }, + getRgbNumber: function (A) { + var e = [], + t = this.checkColor(A); + if (t.color) { + var i = A.toLowerCase(); + if (t.hex) { + if (3 === t.hexLength) { + for (var o = "#", n = 1; 4 > n; n += 1) + o += i.slice(n, n + 1).concat(i.slice(n, n + 1)); + i = o + } + for (var r = 1; 7 > r; r += 2) + e.push(parseInt("0x" + i.slice(r, r + 2), 0)) + } + } + return e + } + }; + var Yh = {}; + Yh.fullScreen = function (A) { + if (!A) + return !1; + if (A.requestFullscreen) + A.requestFullscreen(); + else if (A.mozRequestFullScreen) + A.mozRequestFullScreen(); + else if (A.webkitRequestFullscreen) + A.webkitRequestFullscreen(); + else { + if (!A.msRequestFullscreen) + return !1; + A.msRequestFullscreen() + } + }, + Yh.exitFullScreen = function () { + document.exitFullscreen ? document.exitFullscreen() : document.mozCancelFullScreen ? document.mozCancelFullScreen() : document.webkitCancelFullScreen ? document.webkitCancelFullScreen() : document.msExitFullscreen && document.msExitFullscreen() + }, + Yh.onFullScreenChanged = function (A) { + var e = function () { + A && A() + }; + document.onfullscreenchange = e, + document.onwebkitfullscreenchange = e, + document.documentElement.onwebkitfullscreenchange = e, + document.onmozfullscreenchange = e, + document.onmsfullscreenchange = e + }, + Yh.inFullScreen = function () { + return "webkitIsFullScreen" in document ? Boolean(document.webkitIsFullScreen) : "fullscreenElement" in document ? Boolean(document.fullscreenElement) : "mozFullScreenElement" in document ? Boolean(document.mozFullScreenElement) : "msFullscreenElement" in document ? Boolean(document.msFullscreenElement) : Boolean(document.querySelector(".viewer-fill-browser")) + }, + Yh.findFullScreenElement = function () { + return document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement || document.msFullscreenElement + }, + Yh.isFullScreenAvailable = function (A) { + return A.requestFullscreen || A.mozRequestFullScreen || A.webkitRequestFullscreen || A.msRequestFullscreen + }; + var Wh = Yh, + Jh = { + aliceblue: 15792383, + antiquewhite: 16444375, + aqua: 65535, + aquamarine: 8388564, + azure: 15794175, + beige: 16119260, + bisque: 16770244, + black: 0, + blanchedalmond: 16772045, + blue: 255, + blueviolet: 9055202, + brown: 10824234, + burlywood: 14596231, + cadetblue: 6266528, + chartreuse: 8388352, + chocolate: 13789470, + coral: 16744272, + cornflowerblue: 6591981, + cornsilk: 16775388, + crimson: 14423100, + cyan: 65535, + darkblue: 139, + darkcyan: 35723, + darkgoldenrod: 12092939, + darkgray: 11119017, + darkgreen: 25600, + darkgrey: 11119017, + darkkhaki: 12433259, + darkmagenta: 9109643, + darkolivegreen: 5597999, + darkorange: 16747520, + darkorchid: 10040012, + darkred: 9109504, + darksalmon: 15308410, + darkseagreen: 9419919, + darkslateblue: 4734347, + darkslategray: 3100495, + darkslategrey: 3100495, + darkturquoise: 52945, + darkviolet: 9699539, + deeppink: 16716947, + deepskyblue: 49151, + dimgray: 6908265, + dimgrey: 6908265, + dodgerblue: 2003199, + firebrick: 11674146, + floralwhite: 16775920, + forestgreen: 2263842, + fuchsia: 16711935, + gainsboro: 14474460, + ghostwhite: 16316671, + gold: 16766720, + goldenrod: 14329120, + gray: 8421504, + green: 32768, + greenyellow: 11403055, + grey: 8421504, + honeydew: 15794160, + hotpink: 16738740, + indianred: 13458524, + indigo: 4915330, + ivory: 16777200, + khaki: 15787660, + lavender: 15132410, + lavenderblush: 16773365, + lawngreen: 8190976, + lemonchiffon: 16775885, + lightblue: 11393254, + lightcoral: 15761536, + lightcyan: 14745599, + lightgoldenrodyellow: 16448210, + lightgray: 13882323, + lightgreen: 9498256, + lightgrey: 13882323, + lightpink: 16758465, + lightsalmon: 16752762, + lightseagreen: 2142890, + lightskyblue: 8900346, + lightslategray: 7833753, + lightslategrey: 7833753, + lightsteelblue: 11584734, + lightyellow: 16777184, + lime: 65280, + limegreen: 3329330, + linen: 16445670, + magenta: 16711935, + maroon: 8388608, + mediumaquamarine: 6737322, + mediumblue: 205, + mediumorchid: 12211667, + mediumpurple: 9662683, + mediumseagreen: 3978097, + mediumslateblue: 8087790, + mediumspringgreen: 64154, + mediumturquoise: 4772300, + mediumvioletred: 13047173, + midnightblue: 1644912, + mintcream: 16121850, + mistyrose: 16770273, + moccasin: 16770229, + navajowhite: 16768685, + navy: 128, + oldlace: 16643558, + olive: 8421376, + olivedrab: 7048739, + orange: 16753920, + orangered: 16729344, + orchid: 14315734, + palegoldenrod: 15657130, + palegreen: 10025880, + paleturquoise: 11529966, + palevioletred: 14381203, + papayawhip: 16773077, + peachpuff: 16767673, + peru: 13468991, + pink: 16761035, + plum: 14524637, + powderblue: 11591910, + purple: 8388736, + rebeccapurple: 6697881, + red: 16711680, + rosybrown: 12357519, + royalblue: 4286945, + saddlebrown: 9127187, + salmon: 16416882, + sandybrown: 16032864, + seagreen: 3050327, + seashell: 16774638, + sienna: 10506797, + silver: 12632256, + skyblue: 8900331, + slateblue: 6970061, + slategray: 7372944, + slategrey: 7372944, + snow: 16775930, + springgreen: 65407, + steelblue: 4620980, + tan: 13808780, + teal: 32896, + thistle: 14204888, + tomato: 16737095, + turquoise: 4251856, + violet: 15631086, + wheat: 16113331, + white: 16777215, + whitesmoke: 16119285, + yellow: 16776960, + yellowgreen: 10145074 + }; + + function zh(A, e, t) { + return 0 > t && (t += 1), + t > 1 && (t -= 1), + 1 / 6 > t ? A + 6 * (e - A) * t : .5 > t ? e : 2 / 3 > t ? A + 6 * (e - A) * (2 / 3 - t) : A + } + var Zh, Xh = function (A, e, t, i) { + return void 0 === i && void 0 === t ? this.set(A, e) : this.setRGB(A, e, t, i) + }; + Object.assign(Xh.prototype, { + isColor: !0, + r: 1, + g: 1, + b: 1, + a: 1, + set: function (A, e) { + return "number" == typeof A ? this.setHex(A) : "string" == typeof A && this.setStyle(A), + void 0 !== e && this.setAlpha(e), + this + }, + setHex: function (A, e) { + return A = Math.floor(A), + this.r = (A >> 16 & 255) / 255, + this.g = (A >> 8 & 255) / 255, + this.b = (255 & A) / 255, + this.setAlpha(e), + this + }, + setAlpha: function (A) { + return "number" == typeof A ? (A > 1 && (A = 1), + 0 > A && (A = 0), + this.a = A) : isNaN(parseFloat(A)) ? this.a = 1 : ((A = parseFloat(A)) > 1 && (A = 1), + 0 > A && (A = 0), + this.a = A), + this + }, + setRGB: function (A, e, t, i) { + return this.r = A > 1 ? Math.min(255, parseInt(A, 10)) / 255 : A, + this.g = e > 1 ? Math.min(255, parseInt(e, 10)) / 255 : e, + this.b = t > 1 ? Math.min(255, parseInt(t, 10)) / 255 : t, + this.setAlpha(i), + this + }, + setHSL: function (A, e, t, i) { + if (A = Xc.euclideanModulo(A, 1), + e = Xc.clamp(e, 0, 1), + t = Xc.clamp(t, 0, 1), + 0 === e) + this.r = this.g = this.b = t; + else { + var o = t > .5 ? t + e - t * e : t * (1 + e), + n = 2 * t - o; + this.r = zh(n, o, A + 1 / 3), + this.g = zh(n, o, A), + this.b = zh(n, o, A - 1 / 3) + } + return this.a = i, + this + }, + setStyle: function (A) { + var e = null; + if (e = /^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec(A)) { + var t = null, + i = e[2]; + switch (e[1]) { + case "rgb": + case "rgba": + if (t = /^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(i)) + return this.r = Math.min(255, parseInt(t[1], 10)) / 255, + this.g = Math.min(255, parseInt(t[2], 10)) / 255, + this.b = Math.min(255, parseInt(t[3], 10)) / 255, + this.setAlpha(t[5]), + this; + if (t = /^(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(i)) + return this.r = Math.min(100, parseInt(t[1], 10)) / 100, + this.g = Math.min(100, parseInt(t[2], 10)) / 100, + this.b = Math.min(100, parseInt(t[3], 10)) / 100, + this.setAlpha(t[5]), + this; + break; + case "hsl": + case "hsla": + if (t = /^([0-9]*\.?[0-9]+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(i)) { + var o = parseFloat(t[1]) / 360, + n = parseInt(t[2], 10) / 100, + r = parseInt(t[3], 10) / 100; + return this.setAlpha(t[5]), + this.setHSL(o, n, r) + } + } + } else if (e = /^\#([A-Fa-f0-9]+)$/.exec(A)) { + var a, s = (a = e[1]).length; + if (3 === s) + return this.r = parseInt(a.charAt(0) + a.charAt(0), 16) / 255, + this.g = parseInt(a.charAt(1) + a.charAt(1), 16) / 255, + this.b = parseInt(a.charAt(2) + a.charAt(2), 16) / 255, + this; + if (6 === s) + return this.r = parseInt(a.charAt(0) + a.charAt(1), 16) / 255, + this.g = parseInt(a.charAt(2) + a.charAt(3), 16) / 255, + this.b = parseInt(a.charAt(4) + a.charAt(5), 16) / 255, + this + } + A && A.length > 0 && (void 0 !== (a = Jh[A]) ? this.setHex(a) : Bh.warn("Color: Unknown color " + A)); + return this + }, + getHex: function () { + return 255 * this.r << 16 ^ 255 * this.g << 8 ^ 255 * this.b << 0 + }, + getHexString: function () { + return ("000000" + this.getHex().toString(16)).slice(-6) + }, + getHSL: function () { + var A = { + h: 0, + s: 0, + l: 0, + a: 1 + }, + e = this.r, + t = this.g, + i = this.b, + o = Math.max(e, t, i), + n = Math.min(e, t, i), + r = 0, + a = 0, + s = (n + o) / 2; + if (n === o) + r = 0, + a = 0; + else { + var l = o - n; + switch (a = s > .5 ? l / (2 - o - n) : l / (o + n), + o) { + case e: + r = (t - i) / l + (i > t ? 6 : 0); + break; + case t: + r = (i - e) / l + 2; + break; + case i: + r = (e - t) / l + 4 + } + r /= 6 + } + return A.h = r, + A.s = a, + A.l = s, + A.a = this.a, + A + }, + getRGB: function () { + return "rgb(" + (255 * this.r | 0) + "," + (255 * this.g | 0) + "," + (255 * this.b | 0) + ")" + }, + getRGBA: function () { + return "rgba(" + (255 * this.r | 0) + "," + (255 * this.g | 0) + "," + (255 * this.b | 0) + "," + this.a + ")" + }, + getAlpha: function () { + return this.a + }, + getStyle: function () { + return "rgb(" + (255 * this.r | 0) + "," + (255 * this.g | 0) + "," + (255 * this.b | 0) + ")" + }, + offsetHSL: (Zh = {}, + function (A, e, t) { + return this.getHSL(Zh), + Zh.h += A, + Zh.s += e, + Zh.l += t, + this.setHSL(Zh.h, Zh.s, Zh.l), + this + } + ), + fromArray: function (A, e) { + return void 0 === e && (e = 0), + this.r = A[e], + this.g = A[e + 1], + this.b = A[e + 2], + this.a = A[e + 3] || 1, + this + }, + toArray: function (A, e) { + return void 0 === A && (A = []), + void 0 === e && (e = 0), + A[e] = this.r, + A[e + 1] = this.g, + A[e + 2] = this.b, + A[e + 3] = this.a, + A + }, + toRGBArray: function (A, e) { + return void 0 === A && (A = []), + void 0 === e && (e = 0), + A[e] = 255 * this.r, + A[e + 1] = 255 * this.g, + A[e + 2] = 255 * this.b, + A[e + 3] = 255 * this.a, + A + }, + toJSON: function () { + return this.getHex() + } + }), + Object.defineProperties(Xh.prototype, { + red: { + get: function () { + return this.r + }, + set: function (A) { + this.r = A + } + }, + green: { + get: function () { + return this.g + }, + set: function (A) { + this.g = A + } + }, + blue: { + get: function () { + return this.b + }, + set: function (A) { + this.b = A + } + }, + alpha: { + get: function () { + return this.a + }, + set: function (A) { + this.a = A + } + }, + opacity: { + get: function () { + return this.a + }, + set: function (A) { + this.a = A + } + } + }); + var _h = ["uniform bool receiveShadow;", "uniform vec3 ambientLightColor;", "uniform vec3 lightProbe[ 9 ];", "vec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {", " float x = normal.x, y = normal.y, z = normal.z;", " vec3 result = shCoefficients[ 0 ] * 0.886227;", " result += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;", " result += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;", " result += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;", " result += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;", " result += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;", " result += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );", " result += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;", " result += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );", " return result;", "}", "vec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in GeometricContext geometry ) {", " vec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );", " vec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );", " return irradiance;", "}", "vec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {", " vec3 irradiance = ambientLightColor;", " #ifndef PHYSICALLY_CORRECT_LIGHTS", " irradiance *= PI;", " #endif", " return irradiance;", "}", "#if NUM_DIR_LIGHTS > 0", " struct DirectionalLight {", " vec3 direction;", " vec3 color;", " };", " uniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];", " #if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0", " struct DirectionalLightShadow {", " float shadowBias;", " float shadowRadius;", " vec2 shadowMapSize;", " };", " uniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];", " #endif", " void getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {", " directLight.color = directionalLight.color;", " directLight.direction = directionalLight.direction;", " directLight.visible = true;", " }", "#endif", "#if NUM_POINT_LIGHTS > 0", " struct PointLight {", " vec3 position;", " vec3 color;", " float distance;", " float decay;", " };", " uniform PointLight pointLights[ NUM_POINT_LIGHTS ];", " #if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0", " struct PointLightShadow {", " float shadowBias;", " float shadowRadius;", " vec2 shadowMapSize;", " float shadowCameraNear;", " float shadowCameraFar;", " };", " uniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];", " #endif", " void getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {", " vec3 lVector = pointLight.position - geometry.position;", " directLight.direction = normalize( lVector );", " float lightDistance = length( lVector );", " directLight.color = pointLight.color;", " directLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );", " directLight.visible = ( directLight.color != vec3( 0.0 ) );", " }", "#endif", "#if NUM_SPOT_LIGHTS > 0", " struct SpotLight {", " vec3 position;", " vec3 direction;", " vec3 color;", " float distance;", " float decay;", " float coneCos;", " float penumbraCos;", " };", " uniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];", " #if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0", " struct SpotLightShadow {", " float shadowBias;", " float shadowRadius;", " vec2 shadowMapSize;", " };", " uniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];", " #endif", " void getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {", " vec3 lVector = spotLight.position - geometry.position;", " directLight.direction = normalize( lVector );", " float lightDistance = length( lVector );", " float angleCos = dot( directLight.direction, spotLight.direction );", " if ( angleCos > spotLight.coneCos ) {", " float spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );", " directLight.color = spotLight.color;", " directLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );", " directLight.visible = true;", " } else {", " directLight.color = vec3( 0.0 );", " directLight.visible = false;", " }", " }", "#endif", "#if NUM_RECT_AREA_LIGHTS > 0", " struct RectAreaLight {", " vec3 color;", " vec3 position;", " vec3 halfWidth;", " vec3 halfHeight;", " };", " uniform sampler2D ltcMat; uniform sampler2D ltcMag;", " uniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];", "#endif", "#if NUM_HEMI_LIGHTS > 0", " struct HemisphereLight {", " vec3 direction;", " vec3 skyColor;", " vec3 groundColor;", " };", " uniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];", " vec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {", " float dotNL = dot( geometry.normal, hemiLight.direction );", " float hemiDiffuseWeight = 0.5 * dotNL + 0.5;", " vec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );", " #ifndef PHYSICALLY_CORRECT_LIGHTS", " irradiance *= PI;", " #endif", " return irradiance;", " }", "#endif", "#if defined( USE_ENVMAP ) && defined( PHYSICAL )", " vec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {", " vec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );", " #ifdef ENVMAP_TYPE_CUBE", " vec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );", " #ifdef TEXTURE_LOD_EXT", " vec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );", " #else", " vec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );", " #endif", " envMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;", " #elif defined( ENVMAP_TYPE_CUBE_UV )", " vec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );", " vec4 envMapColor = textureCubeUV( queryVec, 1.0 );", " #else", " vec4 envMapColor = vec4( 0.0 );", " #endif", " return PI * envMapColor.rgb * envMapIntensity;", " }", " float getSpecularMIPLevel( const in float blinnShininessExponent, const in int maxMIPLevel ) {", " float maxMIPLevelScalar = float( maxMIPLevel );", " float desiredMIPLevel = maxMIPLevelScalar - 0.79248 - 0.5 * log2( pow2( blinnShininessExponent ) + 1.0 );", " return clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );", " }", " vec3 getLightProbeIndirectRadiance( const in GeometricContext geometry, const in float blinnShininessExponent, const in int maxMIPLevel ) {", " #ifdef ENVMAP_MODE_REFLECTION", " vec3 reflectVec = reflect( -geometry.viewDir, geometry.normal );", " #else", " vec3 reflectVec = refract( -geometry.viewDir, geometry.normal, refractionRatio );", " #endif", " reflectVec = inverseTransformDirection( reflectVec, viewMatrix );", " float specularMIPLevel = getSpecularMIPLevel( blinnShininessExponent, maxMIPLevel );", " #ifdef ENVMAP_TYPE_CUBE", " vec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );", " #ifdef TEXTURE_LOD_EXT", " vec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );", " #else", " vec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );", " #endif", " envMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;", " #elif defined( ENVMAP_TYPE_CUBE_UV )", " vec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );", " vec4 envMapColor = textureCubeUV(queryReflectVec, BlinnExponentToGGXRoughness(blinnShininessExponent));", " #elif defined( ENVMAP_TYPE_EQUIREC )", " vec2 sampleUV;", " sampleUV.y = saturate( reflectVec.y * 0.5 + 0.5 );", " sampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;", " #ifdef TEXTURE_LOD_EXT", " vec4 envMapColor = texture2DLodEXT( envMap, sampleUV, specularMIPLevel );", " #else", " vec4 envMapColor = texture2D( envMap, sampleUV, specularMIPLevel );", " #endif", " envMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;", " #elif defined( ENVMAP_TYPE_SPHERE )", " vec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0,0.0,1.0 ) );", " #ifdef TEXTURE_LOD_EXT", " vec4 envMapColor = texture2DLodEXT( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );", " #else", " vec4 envMapColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );", " #endif", " envMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;", " #endif", " return envMapColor.rgb * envMapIntensity;", " }", "#endif"].join("\n"), + $h = ["", "GeometricContext geometry;", "geometry.position = - vViewPosition;", "geometry.normal = normal;", "geometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );", "#ifdef CLEARCOAT", "geometry.clearcoatNormal = clearcoatNormal;", "#endif", "IncidentLight directLight;", "#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )", "PointLight pointLight;", "#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0", "PointLightShadow pointLightShadow;", "#endif", "#pragma unroll_loop_start", "for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {", "pointLight = pointLights[ i ];", "getPointDirectLightIrradiance( pointLight, geometry, directLight );", "#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )", "pointLightShadow = pointLightShadows[ i ];", "directLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;", "#endif", "RE_Direct( directLight, geometry, material, reflectedLight );", "}", "#endif", "#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )", "SpotLight spotLight;", "#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0", "SpotLightShadow spotLightShadow;", "#endif", "#pragma unroll_loop_start", "for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {", "spotLight = spotLights[ i ];", "getSpotDirectLightIrradiance( spotLight, geometry, directLight );", "#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )", "spotLightShadow = spotLightShadows[ i ];", "directLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;", "#endif", "RE_Direct( directLight, geometry, material, reflectedLight );", "}", "#pragma unroll_loop_end", "#endif", "#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )", "DirectionalLight directionalLight;", "#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0", "DirectionalLightShadow directionalLightShadow;", "#endif", "#pragma unroll_loop_start", "for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {", "directionalLight = directionalLights[ i ];", "getDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );", "#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )", "directionalLightShadow = directionalLightShadows[ i ];", "directLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;", "#endif", "RE_Direct( directLight, geometry, material, reflectedLight );", "}", "#pragma unroll_loop_end", "#endif", "#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )", "RectAreaLight rectAreaLight;", "#pragma unroll_loop_start", "for ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {", "rectAreaLight = rectAreaLights[ i ];", "RE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );", "}", "#pragma unroll_loop_end", "#endif", "#if defined( RE_IndirectDiffuse )", "vec3 iblIrradiance = vec3( 0.0 );", "vec3 irradiance = getAmbientLightIrradiance( ambientLightColor );", "irradiance += getLightProbeIrradiance( lightProbe, geometry );", "#if ( NUM_HEMI_LIGHTS > 0 )", "#pragma unroll_loop_start", "for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {", "irradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );", "}", "#pragma unroll_loop_end", "#endif", "#endif", "#if defined( RE_IndirectSpecular )", "vec3 radiance = vec3( 0.0 );", "vec3 clearcoatRadiance = vec3( 0.0 );", "#endif"].join("\n"), + Ad = ["#ifdef DOUBLE_SIDED", " float flipNormal = ( float( gl_FrontFacing ) * 2.0 - 1.0 );", "#else", " float flipNormal = 1.0;", "#endif\n"].join("\n"), + ed = ["#ifdef FLAT_SHADED", " vec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );", " vec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );", " vec3 normal = normalize( cross( fdx, fdy ) );", "#else", " vec3 normal = normalize( vNormal ) * flipNormal;", "#endif", "#ifdef USE_NORMALMAP", " normal = perturbNormal2Arb( -vViewPosition, normal );", "#elif defined( USE_BUMPMAP )", " normal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );", "#endif", "vec3 geometryNormal = normal;"].join("\n"), + td = ["GeometricContext geometry;", "geometry.position = - vViewPosition;", "#if NUM_CLIPPING_PLANES == 1", " if (gl_FrontFacing) geometry.normal = normal;", " else if (fillFaceClipDistance < 0.0) geometry.normal = -clippingPlanes[0].xyz;", " else geometry.normal = -normal;", "#else", " geometry.normal = normal;", "#endif", "geometry.viewDir = normalize( vViewPosition );", "IncidentLight directLight;", "#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )", " PointLight pointLight;", " for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {", " pointLight = pointLights[ i ];", " getPointDirectLightIrradiance( pointLight, geometry, directLight );", " #ifdef USE_SHADOWMAP", " directLight.color *= all( bvec2( pointLight.shadow, directLight.visible ) ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ] ,pointLight.shadowCameraNear, pointLight.shadowCameraFar) : 1.0;", " #endif", " RE_Direct( directLight, geometry, material, reflectedLight );", " }", "#endif", "#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )", " SpotLight spotLight;", " for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {", " spotLight = spotLights[ i ];", " getSpotDirectLightIrradiance( spotLight, geometry, directLight );", " #ifdef USE_SHADOWMAP", " directLight.color *= all( bvec2( spotLight.shadow, directLight.visible ) ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;", " #endif", " RE_Direct( directLight, geometry, material, reflectedLight );", " }", "#endif", "#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )", " DirectionalLight directionalLight;", " for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {", " directionalLight = directionalLights[ i ];", " getDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );", " #ifdef USE_SHADOWMAP", " directLight.color *= all( bvec2( directionalLight.shadow, directLight.visible ) ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;", " #endif", " RE_Direct( directLight, geometry, material, reflectedLight );", " }", "#endif", "#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )", " RectAreaLight rectAreaLight;", " for ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {", " rectAreaLight = rectAreaLights[ i ];", " RE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );", " }", "#endif", "#if defined( RE_IndirectDiffuse )", " vec3 irradiance = getAmbientLightIrradiance( ambientLightColor );", " #ifdef USE_LIGHTMAP", " vec3 lightMapIrradiance = texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;", " #ifndef PHYSICALLY_CORRECT_LIGHTS", " lightMapIrradiance *= PI; // factor of PI should not be present; included here to prevent breakage", " #endif", " irradiance += lightMapIrradiance;", " #endif", " #if ( NUM_HEMI_LIGHTS > 0 )", " for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {", " irradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );", " }", " #endif", " #if defined( USE_ENVMAP ) && defined( PHYSICAL ) && defined( ENVMAP_TYPE_CUBE_UV )", " irradiance += getLightProbeIndirectIrradiance( /*lightProbe,*/ geometry, 8 );", " #endif", " RE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );", "#endif", "#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )", " vec3 radiance = getLightProbeIndirectRadiance( /*specularLightProbe,*/ geometry, Material_BlinnShininessExponent( material ), 8 );", " #ifndef STANDARD", " vec3 clearCoatRadiance = getLightProbeIndirectRadiance( /*specularLightProbe,*/ geometry, Material_ClearCoat_BlinnShininessExponent( material ), 8 );", " #else", " vec3 clearCoatRadiance = vec3( 0.0 );", " #endif", " RE_IndirectSpecular( radiance, clearCoatRadiance, geometry, material, reflectedLight );", "#endif"].join("\n"), + id = ["#define PHONG", "uniform vec3 diffuse;", "uniform vec3 emissive;", "uniform vec3 specular;", "uniform float shininess;", "uniform float opacity;", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "void main() {", " #include ", " vec4 diffuseColor = vec4( diffuse, opacity );", " ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );", " vec3 totalEmissiveRadiance = emissive;", " #include ", " #include ", " #include ", " #include ", " #include ", " #include ", " #include ", " #include ", " #include ", " float fillFaceClipDistance = 0.0;", " #if NUM_CLIPPING_PLANES == 1", " vec4 plane = clippingPlanes[ 0 ];", " fillFaceClipDistance = dot( vViewPosition, plane.xyz ) - plane.w;", " #endif", " #include ", " #include ", " #include ", " vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;", " #include ", " gl_FragColor = vec4( outgoingLight, diffuseColor.a );", " #include ", " #include ", " #include ", " #include ", " #include ", "}"].join("\n"), + od = ["#define PHONG", "varying vec3 vViewPosition;", "#ifndef FLAT_SHADED", "varying vec3 vNormal;", "#endif", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "void main() {", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#ifndef FLAT_SHADED", "vNormal = normalize( transformedNormal );", "#endif", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "vViewPosition = - mvPosition.xyz;", "#include ", "#include ", "#include ", "#include ", "}"].join("\n"), + nd = ["#define PHYSICAL", "varying vec3 vViewPosition;", "#ifndef FLAT_SHADED", "varying vec3 vNormal;", "#endif", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "void main() {", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#ifndef FLAT_SHADED", "vNormal = normalize( transformedNormal );", "#endif", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "vViewPosition = - mvPosition.xyz;", "#include ", "#include ", "#include ", "}"].join("\n"), + rd = ["#define PHYSICAL", "uniform vec3 diffuse;", "uniform vec3 emissive;", "uniform float roughness;", "uniform float metalness;", "uniform float opacity;", "#ifndef STANDARD", "uniform float clearCoat;", "uniform float clearCoatRoughness;", "#endif", "varying vec3 vViewPosition;", "#ifndef FLAT_SHADED", "varying vec3 vNormal;", "#endif", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "void main() {", "#include ", "vec4 diffuseColor = vec4( diffuse, opacity );", "vec3 totalEmissiveRadiance = emissive;", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "const mat4 diffuseMatrix = mat4(-0.07425443828105927, -0.05652861297130585, 0.12247831374406815, 0.2297295778989792,", " -0.05652860924601555, 0.034799136221408844, -0.08437120914459229, -0.13896968960762024,", " 0.12247832119464874, -0.08437121659517288, 0.021763987839221954, 0.12510454654693604,", " 0.2297295778989792, -0.13896968960762024, 0.12510454654693604, 0.6190560460090637);", "const vec3 sunDir = vec3(-0.6632131338119507, 0.5486575961112976, -0.509041428565979);", "vec3 viewDir = normalize( vViewPosition );", "vec4 diffuseDir = diffuseMatrix * vec4(normal, 1.0);", "float diffuseTerm = dot(vec4(normal, 1.0), diffuseDir);", "float nv = max(dot(normal, -viewDir), 0.0);", "float vl = max(dot(viewDir, sunDir), 0.0);", "diffuseTerm = diffuseTerm + (nv * (1.0 - vl)) * 0.8;", "vec3 H = -normalize(sunDir + viewDir);", "float nh = max(dot(normal, H), 0.0);", "float specularTerm = pow(nh, 100.0);", "vec3 color = 1.05 * vec3(0.5, 0.497, 0.49) * (diffuse * diffuseTerm + vec3(specularTerm)) + diffuse * 0.5;", "vec3 outgoingLight = color + totalEmissiveRadiance;", "gl_FragColor = vec4( outgoingLight, diffuseColor.a );", "#include ", "#include ", "#include ", "#include ", "#include ", "}"].join("\n"), + ad = ["#define EIMMODELPHYSICAL", "mat3 transpose2( const in mat3 v ) {\n mat3 tmp;\n tmp[0] = vec3(v[0].x, v[1].x, v[2].x);\n tmp[1] = vec3(v[0].y, v[1].y, v[2].y);\n tmp[2] = vec3(v[0].z, v[1].z, v[2].z);\n return tmp;\n}\n", "varying vec3 vViewPosition;", "varying vec3 vWorldPosition;", "#ifndef FLAT_SHADED", " varying vec3 vNormal;", " #ifdef USE_TANGENT", " varying vec3 vTangent;", " varying vec3 vBitangent;", " #endif", "#endif", "#ifdef USE_INSTANCE", " attribute float vState;", " attribute float vState2;", " varying float fState;", " attribute float vMirror;", " attribute vec4 aColor;", " varying vec4 vaColor;", " attribute vec3 mcol0;", " attribute vec3 mcol1;", " attribute vec3 mcol2;", " attribute vec3 mcol3;", "#ifdef INSTANCE_STATE_TERTIARY", " attribute float vState3;", "#endif", "#endif", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "mat3 inverse_mat3(in mat3 m)", "{", " float determinant =", " m[0][0] * (m[1][1] * m[2][2] - m[2][1] * m[1][2])", " - m[1][0] * (m[0][1] * m[2][2] - m[2][1] * m[0][2])", " + m[2][0] * (m[0][1] * m[1][2] - m[1][1] * m[0][2]);", " mat3 inverse;", " inverse[0][0] = + (m[1][1] * m[2][2] - m[2][1] * m[1][2]);", " inverse[1][0] = - (m[1][0] * m[2][2] - m[2][0] * m[1][2]);", " inverse[2][0] = + (m[1][0] * m[2][1] - m[2][0] * m[1][1]);", " inverse[0][1] = - (m[0][1] * m[2][2] - m[2][1] * m[0][2]);", " inverse[1][1] = + (m[0][0] * m[2][2] - m[2][0] * m[0][2]);", " inverse[2][1] = - (m[0][0] * m[2][1] - m[2][0] * m[0][1]);", " inverse[0][2] = + (m[0][1] * m[1][2] - m[1][1] * m[0][2]);", " inverse[1][2] = - (m[0][0] * m[1][2] - m[1][0] * m[0][2]);", " inverse[2][2] = + (m[0][0] * m[1][1] - m[1][0] * m[0][1]);", " inverse /= determinant;", " return inverse;", "}", "void main() {", " #include ", " #ifdef USE_TRANSFORM_AOMAP", " #if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )", " vUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;", " #endif", " #endif ", " #include ", " #include ", " #include ", " #include ", " #include ", " #include ", " #include ", "#ifdef USE_INSTANCE", " vaColor = aColor;", " #ifdef INSTANCE_STATE_SECONDARY", " fState = vState2;", " #else", " fState = vState;", " #endif", " #ifdef INSTANCE_STATE_TERTIARY", " fState = vState3;", " #endif", " transformed = vec3(mat4(vec4(mcol0, 0.0),", " vec4(mcol1, 0.0),", " vec4(mcol2, 0.0),", " vec4(mcol3, 1.0)) * vec4(transformed, 1.0));", " #ifdef USE_INSTANCE_NORMAL", " mat3 normalMat = mat3(mcol0, mcol1, mcol2);", " normalMat = inverse_mat3(normalMat);", " normalMat = transpose2(normalMat);", " transformedNormal = normalMat * objectNormal;", " transformedNormal = normalMatrix * transformedNormal;", " #ifdef FLIP_SIDED", " transformedNormal = - transformedNormal;", " #endif", " transformedNormal = normalize( transformedNormal );", " #endif", "#endif", "#ifndef FLAT_SHADED", " vNormal = normalize( transformedNormal );", " #ifdef USE_TANGENT", " vTangent = normalize( transformedTangent );", " vBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );", " #endif", "#endif", " #include ", " #include ", " #include ", " #include ", " #include ", " #include ", " vViewPosition = - mvPosition.xyz;", " // 热力图", " #if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )|| defined(HEATMAPPOINTSCOUNT)", " vec4 worldPosition = vec4( transformed, 1.0 );", " #ifdef USE_INSTANCING", " worldPosition = instanceMatrix * worldPosition;", " #endif", " worldPosition = modelMatrix * worldPosition;", " vWorldPosition = vec3(worldPosition.xyz);", " #endif", " #include ", " #include ", "#ifdef USE_INSTANCE", " if (vMirror <= - 0.01){", " vNormal = vNormal * - 1.0;}", "#endif", "}"].join("\n"), + sd = ["#define EIMMODELPHYSICAL", "#ifdef PHYSICAL", " #define REFLECTIVITY", " #define CLEARCOAT", " #define TRANSPARENCY", "#endif", "uniform vec3 diffuse;", "uniform vec3 emissive;", "uniform float roughness;", "uniform float metalness;", "uniform float opacity;", "#ifdef TRANSPARENCY", " uniform float transparency;", "#endif", "#ifdef REFLECTIVITY", " uniform float reflectivity;", "#endif", "#ifdef CLEARCOAT", " uniform float clearcoat;", " uniform float clearcoatRoughness;", "#endif", "#ifdef USE_SHEEN", " uniform vec3 sheen;", "#endif", "uniform float imageFade;", "varying vec3 vViewPosition;", "varying vec3 vWorldPosition;", "#ifndef FLAT_SHADED", " varying vec3 vNormal;", " #ifdef USE_TANGENT", " varying vec3 vTangent;", " varying vec3 vBitangent;", " #endif", "#endif", "#ifdef USE_INSTANCE", " varying vec4 vaColor;", " varying float fState;", "#endif", "uniform float shift;", "uniform float A;", "uniform float B;", "uniform float C;", "uniform float D;", "uniform float E;", "uniform float F;", "uniform float scale;", "uniform vec4 blinkColor;", "uniform float colorState;", "#ifdef HEATMAPPOINTSCOUNT", " uniform float heatmapPoints[HEATMAPPOINTSCOUNT];", " uniform sampler2D heatmapTexture;", "#endif", "vec3 toneMapCanonFilmic(vec3 color)", "{", " color *= (1.0 / shift);", " return (((color * (A * color + C * B)) / (color * (A * color + B) + D * F))) * (1.0 / scale);", "}", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "vec3 hdrDecode(in vec4 rgbm) {", "const float rgbmScale = 2.82842712;", "vec3 r = rgbm.rgb * (rgbmScale * (1.0 - rgbm.a));", "return r * r;", "}", "vec3 linearToGammaUnreal(in vec3 rgb) {", " return rgb / (rgb + 0.187) * 1.035 * (0.5 / shift);", "}", "bool floatEqual(in float x, in float y) {", " return (x >= y - 0.01) && (x <= y + 0.01);", "}", "bool floatNotEqual(in float x, in float y) {", " return (x <= y - 0.01) || (x >= y + 0.01);", "}", "void main() {", " #include ", " vec4 diffuseColor = vec4( diffuse, opacity );", " #ifdef USE_INSTANCE", " if (floatEqual(fState, -1.0)) ", " discard;", " if (floatNotEqual(fState, 0.0)) ", " diffuseColor = vaColor;", " #endif", " vec4 selectedColor = diffuseColor;", " ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );", " vec3 totalEmissiveRadiance = emissive;", " #include ", " #ifdef USE_MAP", " vec4 texelColor = texture2D( map, vUv );", " texelColor = mapTexelToLinear( texelColor );", " diffuseColor = vec4( mix(diffuseColor.rgb , texelColor.rgb, imageFade),opacity);", " #ifdef USE_INSTANCE", " if (floatNotEqual(fState, 0.0)) ", " diffuseColor = vaColor;", " #endif", " #endif", " #include ", " #include ", " #include ", " #include ", " #include ", " #include ", "float flipNormal = 1.0;", " #include ", " #include ", " #include ", " #include ", " #include ", " #include ", " #include ", " #include ", " #include ", " #include ", "vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;", "#ifdef USE_COLORWITHOUTLIGHT", " gl_FragColor = diffuseColor;", "#else", " #ifdef TRANSPARENCY", " diffuseColor.a *= saturate( 1. - transparency + linearToRelativeLuminance( reflectedLight.directSpecular + reflectedLight.indirectSpecular ) );", " #endif", " gl_FragColor = vec4( outgoingLight, diffuseColor.a );", "#endif", "#ifdef USE_INSTANCE", " #ifdef NOTAFFECTEDBYLIGHT", " if (floatEqual(fState, 2.0))", " gl_FragColor = selectedColor;", " #endif", " #ifdef USE_MAP", " if (floatEqual(fState, 3.0))", " gl_FragColor = vaColor;", " #endif", "#endif", "#if defined( TONE_MAPPING )", " #if defined(USE_LIGHTMAP)", " gl_FragColor.rgb = linearToGammaUnreal(gl_FragColor.rgb );", " #else", " gl_FragColor.rgb = toneMapCanonFilmic( gl_FragColor.rgb );", " #endif", "#endif", "#ifdef USE_INSTANCE", " if (floatEqual(fState, 5.0) && floatEqual(colorState, 1.0))", " gl_FragColor = blinkColor;", "#else", " if (floatEqual(colorState, 1.0))", " gl_FragColor = blinkColor;", " #ifdef NOTAFFECTEDBYLIGHT", " if (floatEqual(colorState, 2.0))", " gl_FragColor = selectedColor;", " #endif", "#endif", "#include ", "#include ", "#include ", "#include ", "#ifdef HEATMAPPOINTSCOUNT", " float heatvalue = 0.0;", " for ( int i = 0; i < HEATMAPPOINTSCOUNT; i += 5 ) {", " float heatpointX = heatmapPoints[i];", " float heatpointY = heatmapPoints[i + 1];", " float heatpointZ = heatmapPoints[i + 2];", " // heatpointIndex保存的是当前热力点的热力值比上(最大热力和最小热力差)", " // 也就是在热力区间中的百分比位置,为0的时候表示最小热力值,1的时候表示最大热力值", " // 可以理解为就是热力点中心的热力值,只不过范围是0-1", " // 热力最大值和最小值分别是所有热力点中热力最大和最小的值", " float heatpointIndex = heatmapPoints[i + 3];", " float heatpointRadius = heatmapPoints[i + 4];", " float dis = distance(vWorldPosition, vec3(heatpointX, heatpointY, heatpointZ));", " if(dis < heatpointRadius) {", " float step = dis / heatpointRadius;", " // 根据距离计算当前片元在当前热力点下的热力值", " // step表示距离,范围0-1,越小表示距离热力点越近,热力越大,将距离区间0-1和热力区间heatpointIndex-0对应起来", " float currentvalue = (1.0 - step) * heatpointIndex;", " // 这里用到了一个颜色叠加的公式,把每个热点对当前片元产生的热力进行叠加,", " // 没有特殊逻辑,也可以简单相加", " heatvalue = heatvalue + currentvalue - heatvalue * currentvalue;", " if (heatvalue > 1.0) {", " heatvalue = 1.0;", " break;", " }", " }", " }", " if (heatvalue > 0.0) {", " vec4 color = texture2D(heatmapTexture, vec2(heatvalue, 0.5));", " heatvalue = 0.5*heatvalue + 0.5;//使下列因子范围为1-0.5", " color = vec4( mix(gl_FragColor.rgb, color.rgb, heatvalue),gl_FragColor.a);", " gl_FragColor = color;", " }", "#endif", "}"].join("\n"); + tt.lights_pars = _h, + tt.lights_template = $h, + tt.normal_flip = Ad, + tt.normal_fragment = ed, + tt.meshphong_id_vert = od, + tt.lights_fillFace_template = td, + tt.fillFaceFragment = id, + tt.standardVertex = ad, + tt.bos3dStandardFragment = sd, + tt.newStyleVertex = nd, + tt.newStyleFragment = rd, + it.fillFacePhong = { + uniforms: Ge.merge([Xe.common, Xe.aomap, Xe.lightmap, Xe.emissivemap, Xe.bumpmap, Xe.normalmap, Xe.displacementmap, Xe.gradientmap, Xe.fog, Xe.lights, { + emissive: { + value: new LA(0) + }, + specular: { + value: new LA(1118481) + }, + shininess: { + value: 30 + } + }]), + vertexShader: tt.meshphong_id_vert, + fragmentShader: tt.fillFaceFragment + }, + it.newStyle = { + vertexShader: tt.newStyleVertex, + fragmentShader: tt.newStyleFragment + }, + it.bos3dStandard = { + vertexShader: tt.standardVertex, + fragmentShader: tt.bos3dStandardFragment + }; + var ld = function (A) { + yr.call(this), + this.type = "bos3dStandard", + this.roughness = 1, + this.metalness = 0, + this.originRoughness = 1, + this.originMetalness = 0, + this.pureColor = 0, + this.textureColor = 0, + this.imageFade = 1, + this.transparentEx = !1, + this.shift = .5, + this.A = .64, + this.B = .03, + this.C = .02, + this.D = .54, + this.E = 0, + this.F = .81, + this.scale = .92, + this.shininess = 30, + this.specular = new LA(0); + var e = (new LA).setHex(3330982), + t = [e.r, e.g, e.b, 1]; + this.colorState = Yc.NONE, + this.blinkColor = (new p).fromArray(t), + this.uniforms = Ge.merge([Xe.common, Xe.specularmap, Xe.envmap, Xe.aomap, Xe.lightmap, Xe.emissivemap, Xe.bumpmap, Xe.normalmap, Xe.displacementmap, Xe.roughnessmap, Xe.metalnessmap, Xe.fog, Xe.lights, { + emissive: { + value: new LA(0) + }, + specular: { + value: new LA(0) + }, + roughness: { + value: .5 + }, + metalness: { + value: .5 + }, + envMapIntensity: { + value: 1 + } + }, { + shift: { + value: .5 + }, + A: { + value: .64 + }, + B: { + value: .03 + }, + C: { + value: .02 + }, + D: { + value: .54 + }, + E: { + value: 0 + }, + F: { + value: .81 + }, + scale: { + value: .92 + }, + colorState: { + value: 0 + }, + blinkColor: { + value: (new p).fromArray(t) + }, + imageFade: { + value: 1 + }, + heatmapPoints: { + value: [] + }, + heatmapTexture: { + value: null + } + }]), + this.vertexShader = tt.standardVertex, + this.fragmentShader = tt.bos3dStandardFragment, + this.defaultAttributeValues = { + color: [1, 1, 1], + uv: [0, 0], + uv2: [0, 0] + }, + void 0 !== A && (void 0 !== A.attributes && Bh.error("IBLMaterial: attributes should now be defined in THREE.BufferGeometry instead."), + this.setValues(A)), + this.lights && (this.uniforms = Ge.merge([this.uniforms, Xe.lights])), + this.refreshUniforms && this.refreshUniforms() + }; + + function cd(A, e) { + var t = (65535 & A) + (65535 & e); + return (A >> 16) + (e >> 16) + (t >> 16) << 16 | 65535 & t + } + + function hd(A, e, t, i, o, n) { + return cd((r = cd(cd(e, A), cd(i, n))) << (a = o) | r >>> 32 - a, t); + var r, a + } + + function dd(A, e, t, i, o, n, r) { + return hd(e & t | ~e & i, A, e, o, n, r) + } + + function pd(A, e, t, i, o, n, r) { + return hd(e & i | t & ~i, A, e, o, n, r) + } + + function gd(A, e, t, i, o, n, r) { + return hd(e ^ t ^ i, A, e, o, n, r) + } + + function ud(A, e, t, i, o, n, r) { + return hd(t ^ (e | ~i), A, e, o, n, r) + } + + function fd(A, e) { + var t, i, o, n, r; + A[e >> 5] |= 128 << e % 32, + A[14 + (e + 64 >>> 9 << 4)] = e; + var a = 1732584193, + s = -271733879, + l = -1732584194, + c = 271733878; + for (t = 0; A.length > t; t += 16) + i = a, + o = s, + n = l, + r = c, + a = dd(a, s, l, c, A[t], 7, -680876936), + c = dd(c, a, s, l, A[t + 1], 12, -389564586), + l = dd(l, c, a, s, A[t + 2], 17, 606105819), + s = dd(s, l, c, a, A[t + 3], 22, -1044525330), + a = dd(a, s, l, c, A[t + 4], 7, -176418897), + c = dd(c, a, s, l, A[t + 5], 12, 1200080426), + l = dd(l, c, a, s, A[t + 6], 17, -1473231341), + s = dd(s, l, c, a, A[t + 7], 22, -45705983), + a = dd(a, s, l, c, A[t + 8], 7, 1770035416), + c = dd(c, a, s, l, A[t + 9], 12, -1958414417), + l = dd(l, c, a, s, A[t + 10], 17, -42063), + s = dd(s, l, c, a, A[t + 11], 22, -1990404162), + a = dd(a, s, l, c, A[t + 12], 7, 1804603682), + c = dd(c, a, s, l, A[t + 13], 12, -40341101), + l = dd(l, c, a, s, A[t + 14], 17, -1502002290), + a = pd(a, s = dd(s, l, c, a, A[t + 15], 22, 1236535329), l, c, A[t + 1], 5, -165796510), + c = pd(c, a, s, l, A[t + 6], 9, -1069501632), + l = pd(l, c, a, s, A[t + 11], 14, 643717713), + s = pd(s, l, c, a, A[t], 20, -373897302), + a = pd(a, s, l, c, A[t + 5], 5, -701558691), + c = pd(c, a, s, l, A[t + 10], 9, 38016083), + l = pd(l, c, a, s, A[t + 15], 14, -660478335), + s = pd(s, l, c, a, A[t + 4], 20, -405537848), + a = pd(a, s, l, c, A[t + 9], 5, 568446438), + c = pd(c, a, s, l, A[t + 14], 9, -1019803690), + l = pd(l, c, a, s, A[t + 3], 14, -187363961), + s = pd(s, l, c, a, A[t + 8], 20, 1163531501), + a = pd(a, s, l, c, A[t + 13], 5, -1444681467), + c = pd(c, a, s, l, A[t + 2], 9, -51403784), + l = pd(l, c, a, s, A[t + 7], 14, 1735328473), + a = gd(a, s = pd(s, l, c, a, A[t + 12], 20, -1926607734), l, c, A[t + 5], 4, -378558), + c = gd(c, a, s, l, A[t + 8], 11, -2022574463), + l = gd(l, c, a, s, A[t + 11], 16, 1839030562), + s = gd(s, l, c, a, A[t + 14], 23, -35309556), + a = gd(a, s, l, c, A[t + 1], 4, -1530992060), + c = gd(c, a, s, l, A[t + 4], 11, 1272893353), + l = gd(l, c, a, s, A[t + 7], 16, -155497632), + s = gd(s, l, c, a, A[t + 10], 23, -1094730640), + a = gd(a, s, l, c, A[t + 13], 4, 681279174), + c = gd(c, a, s, l, A[t], 11, -358537222), + l = gd(l, c, a, s, A[t + 3], 16, -722521979), + s = gd(s, l, c, a, A[t + 6], 23, 76029189), + a = gd(a, s, l, c, A[t + 9], 4, -640364487), + c = gd(c, a, s, l, A[t + 12], 11, -421815835), + l = gd(l, c, a, s, A[t + 15], 16, 530742520), + a = ud(a, s = gd(s, l, c, a, A[t + 2], 23, -995338651), l, c, A[t], 6, -198630844), + c = ud(c, a, s, l, A[t + 7], 10, 1126891415), + l = ud(l, c, a, s, A[t + 14], 15, -1416354905), + s = ud(s, l, c, a, A[t + 5], 21, -57434055), + a = ud(a, s, l, c, A[t + 12], 6, 1700485571), + c = ud(c, a, s, l, A[t + 3], 10, -1894986606), + l = ud(l, c, a, s, A[t + 10], 15, -1051523), + s = ud(s, l, c, a, A[t + 1], 21, -2054922799), + a = ud(a, s, l, c, A[t + 8], 6, 1873313359), + c = ud(c, a, s, l, A[t + 15], 10, -30611744), + l = ud(l, c, a, s, A[t + 6], 15, -1560198380), + s = ud(s, l, c, a, A[t + 13], 21, 1309151649), + a = ud(a, s, l, c, A[t + 4], 6, -145523070), + c = ud(c, a, s, l, A[t + 11], 10, -1120210379), + l = ud(l, c, a, s, A[t + 2], 15, 718787259), + s = ud(s, l, c, a, A[t + 9], 21, -343485551), + a = cd(a, i), + s = cd(s, o), + l = cd(l, n), + c = cd(c, r); + return [a, s, l, c] + } + + function md(A) { + var e, t = "", + i = 32 * A.length; + for (e = 0; i > e; e += 8) + t += String.fromCharCode(A[e >> 5] >>> e % 32 & 255); + return t + } + + function Cd(A) { + var e, t = []; + for (t[(A.length >> 2) - 1] = void 0, + e = 0; t.length > e; e += 1) + t[e] = 0; + var i = 8 * A.length; + for (e = 0; i > e; e += 8) + t[e >> 5] |= (255 & A.charCodeAt(e / 8)) << e % 32; + return t + } + + function yd(A) { + var e, t, i = ""; + for (t = 0; A.length > t; t += 1) + e = A.charCodeAt(t), + i += "0123456789abcdef".charAt(e >>> 4 & 15) + "0123456789abcdef".charAt(15 & e); + return i + } + + function vd(A) { + return unescape(encodeURIComponent(A)) + } + + function Id(A) { + return function (A) { + return md(fd(Cd(A), 8 * A.length)) + }(vd(A)) + } + + function Ed(A, e) { + return function (A, e) { + var t, i, o = Cd(A), + n = [], + r = []; + for (n[15] = r[15] = void 0, + o.length > 16 && (o = fd(o, 8 * A.length)), + t = 0; 16 > t; t += 1) + n[t] = 909522486 ^ o[t], + r[t] = 1549556828 ^ o[t]; + return i = fd(n.concat(Cd(e)), 512 + 8 * e.length), + md(fd(r.concat(i), 640)) + }(vd(A), vd(e)) + } + + function Bd(A, e, t) { + return e ? t ? Ed(e, A) : yd(Ed(e, A)) : t ? Id(A) : yd(Id(A)) + } + (ld.prototype = Object.create(yr.prototype)).constructor = ld, + ld.prototype.destroy = function () { + yr.prototype.dispose.call(this), + this.blinkColor = null, + this.uniforms = null, + this.defaultAttributeValues = null, + this.lights = null + }, + ld.prototype.copy = function (A) { + return yr.prototype.copy.call(this, A), + this.shift = A.shift, + this.A = A.A, + this.B = A.B, + this.C = A.C, + this.D = A.D, + this.E = A.E, + this.F = A.F, + this.scale = A.scale, + this.colorState = A.colorState, + this.blinkColor.copy(A.blinkColor), + this.imageFade = A.imageFade, + Object.assign(this.defines, A.defines), + this + }, + ld.prototype.refreshUniforms = function () { + this.uniforms.shift.value = this.shift, + this.uniforms.A.value = this.A, + this.uniforms.B.value = this.B, + this.uniforms.C.value = this.C, + this.uniforms.D.value = this.D, + this.uniforms.E.value = this.E, + this.uniforms.F.value = this.F, + this.uniforms.scale.value = this.scale, + this.uniforms.blinkColor.value.copy(this.blinkColor), + this.uniforms.colorState.value = this.colorState, + this.uniforms.imageFade.value = this.imageFade + }, + ld.prototype.setBlinkColor = function (A) { + this.blinkColor.fromArray(A.toArray()), + this.uniforms.blinkColor.value.copy(this.blinkColor), + this.uniforms.colorState.value = Yc.BLINK + }, + ld.prototype.updateBlinkUniformValue = function (A, e) { + this.uniforms.colorState.value = A, + this.uniforms.blinkColor.value.copy(e) + }, + ld.prototype.resetBlinkUniformValue = function () { + this.uniforms.colorState.value = this.colorState, + this.uniforms.blinkColor.value.copy(this.blinkColor) + }, + Object.defineProperties(ld.prototype, { + transparent: { + set: function (A) { + this.transparentEx = A, + vc.notDepthWriteByTransparent && (this.depthWrite = !A) + }, + get: function () { + return this.transparentEx + } + } + }); + var xd = { + REGULAR: 0, + FRACTAL: 1, + DISORDER: 2 + }, + Sd = { + type: xd.REGULAR, + color1: new Xh(0, 0, 0, 1), + color2: new Xh(255, 255, 255, 1), + size: 10, + level: 1, + phase: 1, + width: 32, + height: 32, + thresholdLow: 0, + thresholdHigh: 1 + }; + + function wd() { + this.m = 2147483647, + this.a = 16807, + this.q = 127773, + this.r = 2836, + this.seed = 1, + this.setSeed = function (A) { + A > 0 || (A = -A % (this.m - 1) + 1), + A > this.m - 1 && (A = this.m - 1), + this.seed = A + }, + this.nextLong = function () { + var A = this.a * (this.seed % this.q) - this.r * Math.floor(this.seed / this.q); + return A > 0 || (A += this.m), + this.seed = A, + A + }, + this.next = function () { + return this.nextLong() / this.m + } + } + + function Md(A, e, t) { + this.width = A, + this.height = e, + this.randseed = t, + this.gradients = new Array(A * e * 2); + var i = new wd; + i.setSeed(t); + for (var o = 0; this.gradients.length > o; o += 2) { + var n, r, a = i.next() * Math.PI * 2; + n = Math.sin(a), + r = Math.cos(a), + this.gradients[o] = n, + this.gradients[o + 1] = r + } + this.dot = function (A, e, t, i) { + var o = 2 * (A + e * this.width); + return this.gradients[o] * t + this.gradients[o + 1] * i + }, + this.lerp = function (A, e, t) { + return A + t * (e - A) + }, + this.sCurve = function (A) { + return A * A * (3 - 2 * A) + }, + this.getValue = function (A, e, t, i) { + var o = Math.floor(A), + n = Math.floor(e), + r = A - o, + a = e - n, + s = o, + l = n, + c = o === this.width - 1 ? 0 : o + 1, + h = n === this.height - 1 ? 0 : n + 1, + d = this.dot(s, l, r, a), + p = this.dot(c, l, r - 1, a), + g = this.dot(s, h, r, a - 1), + u = this.dot(c, h, r - 1, a - 1), + f = this.lerp(d, p, this.sCurve(r)), + m = this.lerp(g, u, this.sCurve(r)); + return this.lerp(f, m, this.sCurve(a)) + } + } + var bd, Ud, Fd = function (A) { + var e = Object.assign({}, Sd, A); + switch (e.type) { + case xd.REGULAR: + return function (A) { + var e = 10 * A.width, + t = 10 * A.height; + if (!(A.color1 instanceof Xh)) + return Bh.warn("color1 不合法"), + null; + if (!(A.color2 instanceof Xh)) + return Bh.warn("color2 不合法"), + null; + var i = A.color1.toRGBArray(), + o = A.color2.toRGBArray(), + n = A.thresholdLow, + r = A.thresholdHigh, + a = 10 * A.size, + s = A.phase; + 1 === a && (a = 1.1); + for (var l = new Array(e * t * 4), c = new Md(Math.ceil(e / a), Math.ceil(t / a), s), h = 0, d = 0, p = 0, g = 0, u = 0, f = 0, m = 0; t > m; m += 1) + for (var C = 0; e > C; C += 1) { + var y = (c.getValue(C / a, m / a) + 1) / 2; + if (y > r) + h = o[0], + d = o[1], + p = o[2]; + else if (n > y) + h = i[0], + d = i[1], + p = i[2]; + else if (y >= n && r >= y || n === r) { + var v = (y - n) / (r - n || 1); + g = o[0] * v, + u = o[1] * v, + f = o[2] * v, + h = i[0] * (v = 1 - v) + g, + d = i[1] * v + u, + p = i[2] * v + f + } + var I = 4 * (m * e + C); + l[I] = h, + l[I + 1] = d, + l[I + 2] = p, + l[I + 3] = 255 + } + var E = document.createElement("canvas"); + E.width = e, + E.height = t; + for (var B = E.getContext("2d"), x = B.createImageData(e, t), S = 0, w = e * t * 4; w > S; S += 1) + x.data[S] = l[S]; + return B.putImageData(x, 0, 0), + E.toDataURL() + }(e); + case xd.FRACTAL: + return function (A) { + var e = 10 * A.width, + t = 10 * A.height; + if (!(A.color1 instanceof Xh)) + return Bh.warn("color1 不合法"), + null; + if (!(A.color2 instanceof Xh)) + return Bh.warn("color2 不合法"), + null; + var i = A.color1.toRGBArray(), + o = A.color2.toRGBArray(), + n = A.thresholdLow, + r = A.thresholdHigh, + a = 10 * A.size, + s = A.phase, + l = A.level; + 1 === a && (a = 1.1); + for (var c = new Array(e * t * 4), h = [], d = a, p = 0, g = l; g > p; p += 1) { + var u = new Md(Math.ceil(e / d), Math.ceil(t / d), s); + d /= 2, + h.push(u) + } + for (var f = 0, m = 0, C = 0, y = 0, v = 0, I = 0, E = 0; t > E; E += 1) + for (var B = 0; e > B; B += 1) { + for (var x = 0, S = a, w = 0, M = l; M > w; w += 1) + x += h[w].getValue(B / S, E / S, s) * (l - w), + S /= 2; + var b = ((x /= l) + 1) / 2; + if (b > r) + f = o[0], + m = o[1], + C = o[2]; + else if (n > b) + f = i[0], + m = i[1], + C = i[2]; + else if (b >= n && r >= b || n === r) { + var U = (b - n) / (r - n || 1); + y = o[0] * U, + v = o[1] * U, + I = o[2] * U, + f = i[0] * (U = 1 - U) + y, + m = i[1] * U + v, + C = i[2] * U + I + } + var F = 4 * (E * e + B); + c[F] = f, + c[F + 1] = m, + c[F + 2] = C, + c[F + 3] = 255 + } + var K = document.createElement("canvas"); + K.width = e, + K.height = t; + for (var Q = K.getContext("2d"), R = Q.createImageData(e, t), T = 0, k = e * t * 4; k > T; T += 1) + R.data[T] = c[T]; + return Q.putImageData(R, 0, 0), + K.toDataURL() + }(e); + case xd.DISORDER: + return function (A) { + var e = 10 * A.width, + t = 10 * A.height; + if (!(A.color1 instanceof Xh)) + return Bh.warn("color1 不合法"), + null; + if (!(A.color2 instanceof Xh)) + return Bh.warn("color2 不合法"), + null; + var i = A.color1.toRGBArray(), + o = A.color2.toRGBArray(), + n = A.thresholdLow, + r = A.thresholdHigh, + a = 10 * A.size, + s = A.phase, + l = A.level; + 1 === a && (a = 1.1); + for (var c = new Array(e * t * 4), h = [], d = a, p = 0, g = l; g > p; p += 1) { + var u = new Md(Math.ceil(e / d), Math.ceil(t / d), s); + d /= 2, + h.push(u) + } + for (var f = 0, m = 0, C = 0, y = 0, v = 0, I = 0, E = 0; t > E; E += 1) + for (var B = 0; e > B; B += 1) { + for (var x = 0, S = a, w = 0, M = l; M > w; w += 1) + x += h[w].getValue(B / S, E / S, s) * (l - w), + S /= 2; + x /= l; + var b = Math.abs(x) + .05; + if (b > r) + f = o[0], + m = o[1], + C = o[2]; + else if (n > b) + f = i[0], + m = i[1], + C = i[2]; + else if (b >= n && r >= b || n === r) { + var U = (b - n) / (r - n || 1); + y = o[0] * U, + v = o[1] * U, + I = o[2] * U, + f = i[0] * (U = 1 - U) + y, + m = i[1] * U + v, + C = i[2] * U + I + } + var F = 4 * (E * e + B); + c[F] = f, + c[F + 1] = m, + c[F + 2] = C, + c[F + 3] = 255 + } + var K = document.createElement("canvas"); + K.width = e, + K.height = t; + for (var Q = K.getContext("2d"), R = Q.createImageData(e, t), T = 0, k = e * t * 4; k > T; T += 1) + R.data[T] = c[T]; + return Q.putImageData(R, 0, 0), + K.toDataURL() + }(e); + default: + return Bh.warn("不支持的噪波类型"), + null + } + }, + Kd = { + DefaultMaterial: new Ir({ + color: 255, + side: 2 + }), + DefaultWireframeColor: { + color: new LA(0, 0, 0), + opacity: .4 + }, + getDefaultStandardMaterial: (bd = null, + function () { + return bd || (bd = new ld({ + color: 0, + side: 2 + })), + bd + } + ), + createInstancePhongMaterial: function (A) { + return A.clone() + }, + updateBasicMaterial: function (A, e) { + A.needsUpdate = !0 + }, + setMatrixUniform: function (A) {}, + createPhongMaterial: function (A) { + var e = new Ir(A); + return e.type = "FillFacePhong", + e.uniforms = Ge.merge([it.fillFacePhong.uniforms]), + e.vertexShader = it.fillFacePhong.vertexShader, + e.fragmentShader = it.fillFacePhong.fragmentShader, + e.side = 2, + e + }, + createStandardMaterial: function (A) { + var e = new ld(A); + return vc.EnableTransformAoMap && (e.defines.USE_TRANSFORM_AOMAP = ""), + e + }, + createInstanceMaterial: function (A, e) { + var t = Kd.createStandardMaterial(A); + return t.defines.USE_INSTANCE = "", + e && (t.defines.USE_INSTANCE_NORMAL = ""), + t.colorState = Yc.BLINK, + vc.InfluencedByLight || (t.defines.NOTAFFECTEDBYLIGHT = ""), + t.refreshUniforms(), + t + }, + createMaterialByMaterialBufferAndTexture: function (A, e) { + var t, i, o, n, r, a, l, c, h = Kd.createStandardMaterial(); + if ((h.name = A.name || A.id, + h.key = A.id, + A.emissive && h.emissive && (1 === A.emissive[0] && 1 === A.emissive[1] && 1 === A.emissive[2] || h.emissive.setRGB(A.emissive[0], A.emissive[1], A.emissive[2])), + A.specular && h.specular && h.specular.setRGB(A.specular[0], A.specular[1], A.specular[2]), + A.color ? h.color.setRGB(A.color[0], A.color[1], A.color[2]) : A.emissive && h.emissive ? h.color.setRGB(0, 0, 0) : h.color.setRGB(.72, .72, .72), + A.tint && (h.imageFade = void 0 === A.imageFade || 0 > A.imageFade || A.imageFade > 10 ? .5 : A.imageFade, + h.color.setRGB(A.tint[0], A.tint[1], A.tint[2])), + A.map && vc.EnableTextureLoading) && ("string" == typeof A.map ? void 0 !== A.mapOffsetY && 0 !== A.mapOffsetY || void 0 !== A.mapOffsetX && 0 !== A.mapOfsfetX || void 0 !== A.mapScaleX && 1 !== A.mapScaleX || void 0 !== A.mapScaleY && 1 !== A.mapScaleY || void 0 !== A.mapWAngle && 0 !== A.mapWAngle ? t = A.mapOffsetX + "_" + A.mapOffsetY + "_" + A.mapScaleX + "_" + A.mapScaleY + "_" + A.mapWAngle + "_" + A.map : e[A.map] ? h.map = e[A.map] : Bh.warn(h.name, " 中map贴图未找到:", A.map) : t = Bd(JSON.stringify(A.map)), + t)) + if (e[t]) + h.map = e[t]; + else { + var p = new d; + if (p.wrapS = p.wrapT = 1e3, + "string" == typeof A.map) + p.image = e[A.map] && e[A.map].image ? e[A.map].image : null; + else { + var g = A.map, + u = document.createElement("img"), + f = Fd({ + type: Number(g.noise_Type), + color1: (new Xh).fromArray(g.noise_Color1), + color2: (new Xh).fromArray(g.noise_Color2), + size: g.noise_Size, + level: g.noise_Levels, + phase: g.noise_Phase, + width: 32, + height: 32, + thresholdLow: g.noise_ThresholdLow, + thresholdHigh: g.noise_ThresholdHigh + }); + f && (u.src = f, + p.image = u) + } + p.needsUpdate = !0, + p.image && (p.offset.x = A.mapOffsetX ? A.mapOffsetX : 0, + p.offset.y = A.mapOffsetY ? A.mapOffsetY : 0, + p.repeat.x = A.mapScaleX ? A.mapScaleX : 1, + p.repeat.y = A.mapScaleY ? A.mapScaleY : 1, + p.rotation = A.mapWAngle ? A.mapWAngle : 0, + e[t] = p, + h.map = p) + } + if (A.bumpMap && vc.EnableTextureLoading && ("string" == typeof A.bumpMap ? void 0 !== A.bumpMapOffsetY && 0 !== A.bumpMapOffsetY || void 0 !== A.bumpMapOffsetX && 0 !== A.bumpMapOfsfetX || void 0 !== A.bumpMapScaleX && 1 !== A.bumpMapScaleX || void 0 !== A.bumpMapScaleY && 1 !== A.bumpMapScaleY || void 0 !== A.bumpMapWAngle && 0 !== A.bumpMapWAngle ? i = A.bumpMapOffsetX + "_" + A.bumpMapOffsetY + "_" + A.bumpMapScaleX + "_" + A.bumpMapScaleY + "_" + A.bumpMapWAngle + "_" + A.bumpMap : e[A.bumpMap] ? h.bumpMap = e[A.bumpMap] : Bh.warn(h.name, " 中bumpMap贴图未找到:", A.bumpMap) : i = Bd(JSON.stringify(A.bumpMap)), + i)) + if (e[i]) + h.bumpMap = e[i]; + else { + var m = new d; + if (m.wrapS = m.wrapT = 1e3, + "string" == typeof A.bumpMap) + m.image = e[A.bumpMap] && e[A.bumpMap].image ? e[A.bumpMap].image : null; + else { + var C = A.bumpMap, + y = document.createElement("img"), + v = Fd({ + type: Number(C.noise_Type), + color1: (new Xh).fromArray(C.noise_Color1), + color2: (new Xh).fromArray(C.noise_Color2), + size: C.noise_Size, + level: C.noise_Levels, + phase: C.noise_Phase, + width: 32, + height: 32, + thresholdLow: C.noise_ThresholdLow, + thresholdHigh: C.noise_ThresholdHigh + }); + v && (y.src = v, + m.image = y) + } + m.needsUpdate = !0, + m.image && (m.offset.x = A.bumpMapOffsetX ? A.bumpMapOffsetX : 0, + m.offset.y = A.bumpMapOffsetY ? A.bumpMapOffsetY : 0, + m.repeat.x = A.bumpMapScaleX ? A.bumpMapScaleX : 1, + m.repeat.y = A.bumpMapScaleY ? A.bumpMapScaleY : 1, + m.rotation = A.bumpMapWAngle ? A.bumpMapWAngle : 0, + e[i] = m, + h.bumpMap = m) + } + if ((void 0 !== A.bumpScale && (h.bumpScale = A.bumpScale), + A.aoMap && vc.EnableTextureLoading) && ("string" == typeof A.aoMap ? void 0 !== A.aoMapOffsetY && 0 !== A.aoMapOffsetY || void 0 !== A.aoMapOffsetX && 0 !== A.aoMapOfsfetX || void 0 !== A.aoMapScaleX && 1 !== A.aoMapScaleX || void 0 !== A.aoMapScaleY && 1 !== A.aoMapScaleY || void 0 !== A.aoMapWAngle && 0 !== A.aoMapWAngle ? o = A.aoMapOffsetX + "_" + A.aoMapOffsetY + "_" + A.aoMapScaleX + "_" + A.aoMapScaleY + "_" + A.aoMapWAngle + "_" + A.aoMap : e[A.aoMap] ? h.aoMap = e[A.aoMap] : Bh.warn(h.name, " 中aoMap贴图未找到:", A.aoMap) : o = Bd(JSON.stringify(A.aoMap)), + o)) + if (e[o]) + h.aoMap = e[o]; + else { + var I = new d; + if (I.wrapS = I.wrapT = 1e3, + "string" == typeof A.aoMap) + I.image = e[A.aoMap] && e[A.aoMap].image ? e[A.aoMap].image : null; + else { + var E = A.aoMap, + B = document.createElement("img"), + x = Fd({ + type: Number(E.noise_Type), + color1: (new Xh).fromArray(E.noise_Color1), + color2: (new Xh).fromArray(E.noise_Color2), + size: E.noise_Size, + level: E.noise_Levels, + phase: E.noise_Phase, + width: 32, + height: 32, + thresholdLow: E.noise_ThresholdLow, + thresholdHigh: E.noise_ThresholdHigh + }); + x && (B.src = x, + I.image = B) + } + I.needsUpdate = !0, + I.image && (I.offset.x = A.aoMapOffsetX ? A.aoMapOffsetX : 0, + I.offset.y = A.aoMapOffsetY ? A.aoMapOffsetY : 0, + I.repeat.x = A.aoMapScaleX ? A.aoMapScaleX : 1, + I.repeat.y = A.aoMapScaleY ? A.aoMapScaleY : 1, + I.rotation = A.aoMapWAngle ? A.aoMapWAngle : 0, + e[o] = I, + h.aoMap = I) + } + if ((void 0 !== A.aoMapIntensity && (h.aoMapIntensity = A.aoMapIntensity), + A.normalMap && vc.EnableTextureLoading) && ("string" == typeof A.normalMap ? void 0 !== A.normalMapOffsetY && 0 !== A.normalMapOffsetY || void 0 !== A.normalMapOffsetX && 0 !== A.normalMapOfsfetX || void 0 !== A.normalMapScaleX && 1 !== A.normalMapScaleX || void 0 !== A.normalMapScaleY && 1 !== A.normalMapScaleY || void 0 !== A.normalMapWAngle && 0 !== A.normalMapWAngle ? n = A.normalMapOffsetX + "_" + A.normalMapOffsetY + "_" + A.normalMapScaleX + "_" + A.normalMapScaleY + "_" + A.normalMapWAngle + "_" + A.normalMap : e[A.normalMap] ? h.normalMap = e[A.normalMap] : Bh.warn(h.name, " 中normalMap贴图未找到:", A.normalMap) : n = Bd(JSON.stringify(A.normalMap)), + n)) + if (e[n]) + h.normalMap = e[n]; + else { + var S = new d; + if (S.wrapS = S.wrapT = 1e3, + "string" == typeof A.normalMap) + S.image = e[A.normalMap] && e[A.normalMap].image ? e[A.normalMap].image : null; + else { + var w = A.normalMap, + M = document.createElement("img"), + b = Fd({ + type: Number(w.noise_Type), + color1: (new Xh).fromArray(w.noise_Color1), + color2: (new Xh).fromArray(w.noise_Color2), + size: w.noise_Size, + level: w.noise_Levels, + phase: w.noise_Phase, + width: 32, + height: 32, + thresholdLow: w.noise_ThresholdLow, + thresholdHigh: w.noise_ThresholdHigh + }); + b && (M.src = b, + S.image = M) + } + S.needsUpdate = !0, + S.image && (S.offset.x = A.normalMapOffsetX ? A.normalMapOffsetX : 0, + S.offset.y = A.normalMapOffsetY ? A.normalMapOffsetY : 0, + S.repeat.x = A.normalMapScaleX ? A.normalMapScaleX : 1, + S.repeat.y = A.normalMapScaleY ? A.normalMapScaleY : 1, + S.rotation = A.normalMapWAngle ? A.normalMapWAngle : 0, + e[n] = S, + h.normalMap = S) + } + if (void 0 !== A.normalScale && (h.normalScale = (new s).fromArray(A.normalScale)), + A.alphaMap && vc.EnableTextureLoading) { + var U; + if ("string" == typeof A.alphaMap ? void 0 !== A.alphaMapOffsetY && 0 !== A.alphaMapOffsetY || void 0 !== A.alphaMapOffsetX && 0 !== A.alphaMapOfsfetX || void 0 !== A.alphaMapScaleX && 1 !== A.alphaMapScaleX || void 0 !== A.alphaMapScaleY && 1 !== A.alphaMapScaleY || void 0 !== A.alphaMapWAngle && 0 !== A.alphaMapWAngle ? U = A.alphaMapOffsetX + "_" + A.alphaMapOffsetY + "_" + A.alphaMapScaleX + "_" + A.alphaMapScaleY + "_" + A.alphaMapWAngle + "_" + A.alphaMap : e[A.alphaMap] ? h.alphaMap = e[A.alphaMap] : Bh.warn(h.name, " 中alphaMap贴图未找到:", A.alphaMap) : U = Bd(JSON.stringify(A.alphaMap)), + U) + if (e[U]) + h.alphaMap = e[U]; + else { + var F = new d; + if (F.wrapS = F.wrapT = 1e3, + "string" == typeof A.alphaMap) + F.image = e[A.alphaMap] && e[A.alphaMap].image ? e[A.alphaMap].image : null; + else { + var K = A.alphaMap, + Q = document.createElement("img"), + R = Fd({ + type: Number(K.noise_Type), + color1: (new Xh).fromArray(K.noise_Color1), + color2: (new Xh).fromArray(K.noise_Color2), + size: K.noise_Size, + level: K.noise_Levels, + phase: K.noise_Phase, + width: 32, + height: 32, + thresholdLow: K.noise_ThresholdLow, + thresholdHigh: K.noise_ThresholdHigh + }); + R && (Q.src = R, + F.image = Q) + } + F.needsUpdate = !0, + F.image && (F.offset.x = A.alphaMapOffsetX ? A.alphaMapOffsetX : 0, + F.offset.y = A.alphaMapOffsetY ? A.alphaMapOffsetY : 0, + F.repeat.x = A.alphaMapScaleX ? A.alphaMapScaleX : 1, + F.repeat.y = A.alphaMapScaleY ? A.alphaMapScaleY : 1, + F.rotation = A.alphaMapWAngle ? A.alphaMapWAngle : 0, + e[U] = F, + h.alphaMap = F) + } + h.transparent = !0, + h.alphaTest = Number.isNaN(vc.alphaTest) ? .5 : vc.alphaTest + } + if (A.envMap && vc.EnableTextureLoading && ("string" == typeof A.envMap ? void 0 !== A.envMapOffsetY && 0 !== A.envMapOffsetY || void 0 !== A.envMapOffsetX && 0 !== A.envMapOfsfetX || void 0 !== A.envMapScaleX && 1 !== A.envMapScaleX || void 0 !== A.envMapScaleY && 1 !== A.envMapScaleY || void 0 !== A.envMapWAngle && 0 !== A.envMapWAngle ? r = A.envMapOffsetX + "_" + A.envMapOffsetY + "_" + A.envMapScaleX + "_" + A.envMapScaleY + "_" + A.envMapWAngle + "_" + A.envMap : e[A.envMap] ? h.envMap = e[A.envMap] : Bh.warn(h.name, " 中envMap贴图未找到:", A.envMap) : r = Bd(JSON.stringify(A.envMap)), + r)) + if (e[r]) + h.envMap = e[r]; + else { + var T = new d; + if (T.wrapS = T.wrapT = 1e3, + "string" == typeof A.envMap) + T.image = e[A.envMap] && e[A.envMap].image ? e[A.envMap].image : null; + else { + var k = A.envMap, + D = document.createElement("img"), + L = Fd({ + type: Number(k.noise_Type), + color1: (new Xh).fromArray(k.noise_Color1), + color2: (new Xh).fromArray(k.noise_Color2), + size: k.noise_Size, + level: k.noise_Levels, + phase: k.noise_Phase, + width: 32, + height: 32, + thresholdLow: k.noise_ThresholdLow, + thresholdHigh: k.noise_ThresholdHigh + }); + L && (D.src = L, + T.image = D) + } + T.needsUpdate = !0, + T.image && (T.offset.x = A.envMapOffsetX ? A.envMapOffsetX : 0, + T.offset.y = A.envMapOffsetY ? A.envMapOffsetY : 0, + T.repeat.x = A.envMapScaleX ? A.envMapScaleX : 1, + T.repeat.y = A.envMapScaleY ? A.envMapScaleY : 1, + T.rotation = A.envMapWAngle ? A.envMapWAngle : 0, + e[r] = T, + h.envMap = T) + } + if (A.lightMap && vc.EnableTextureLoading && ("string" == typeof A.lightMap ? void 0 !== A.lightMapOffsetY && 0 !== A.lightMapOffsetY || void 0 !== A.lightMapOffsetX && 0 !== A.lightMapOfsfetX || void 0 !== A.lightMapScaleX && 1 !== A.lightMapScaleX || void 0 !== A.lightMapScaleY && 1 !== A.lightMapScaleY || void 0 !== A.lightMapWAngle && 0 !== A.lightMapWAngle ? a = A.lightMapOffsetX + "_" + A.lightMapOffsetY + "_" + A.lightMapScaleX + "_" + A.lightMapScaleY + "_" + A.lightMapWAngle + "_" + A.lightMap : e[A.lightMap] ? h.lightMap = e[A.lightMap] : Bh.warn(h.name, " 中lightMap贴图未找到:", A.lightMap) : a = Bd(JSON.stringify(A.lightMap)), + a)) + if (e[a]) + h.lightMap = e[a]; + else { + var N = new d; + if (N.wrapS = N.wrapT = 1e3, + "string" == typeof A.lightMap) + N.image = e[A.lightMap] && e[A.lightMap].image ? e[A.lightMap].image : null; + else { + var O = A.lightMap, + V = document.createElement("img"), + G = Fd({ + type: Number(O.noise_Type), + color1: (new Xh).fromArray(O.noise_Color1), + color2: (new Xh).fromArray(O.noise_Color2), + size: O.noise_Size, + level: O.noise_Levels, + phase: O.noise_Phase, + width: 32, + height: 32, + thresholdLow: O.noise_ThresholdLow, + thresholdHigh: O.noise_ThresholdHigh + }); + G && (V.src = G, + N.image = V) + } + N.needsUpdate = !0, + N.image && (N.offset.x = A.lightMapOffsetX ? A.lightMapOffsetX : 0, + N.offset.y = A.lightMapOffsetY ? A.lightMapOffsetY : 0, + N.repeat.x = A.lightMapScaleX ? A.lightMapScaleX : 1, + N.repeat.y = A.lightMapScaleY ? A.lightMapScaleY : 1, + N.rotation = A.lightMapWAngle ? A.lightMapWAngle : 0, + e[a] = N, + h.lightMap = N) + } + if ((void 0 !== A.lightMapIntensity && (h.lightMapIntensity = A.lightMapIntensity), + A.emissiveMap && vc.EnableTextureLoading) && ("string" == typeof A.emissiveMap ? void 0 !== A.emissiveMapOffsetY && 0 !== A.emissiveMapOffsetY || void 0 !== A.emissiveMapOffsetX && 0 !== A.emissiveMapOfsfetX || void 0 !== A.emissiveMapScaleX && 1 !== A.emissiveMapScaleX || void 0 !== A.emissiveMapScaleY && 1 !== A.emissiveMapScaleY || void 0 !== A.emissiveMapWAngle && 0 !== A.emissiveMapWAngle ? l = A.emissiveMapOffsetX + "_" + A.emissiveMapOffsetY + "_" + A.emissiveMapScaleX + "_" + A.emissiveMapScaleY + "_" + A.emissiveMapWAngle + "_" + A.emissiveMap : e[A.emissiveMap] ? h.emissiveMap = e[A.emissiveMap] : Bh.warn(h.name, " 中emissiveMap贴图未找到:", A.emissiveMap) : l = Bd(JSON.stringify(A.emissiveMap)), + l)) + if (e[l]) + h.emissiveMap = e[l]; + else { + var P = new d; + if (P.wrapS = P.wrapT = 1e3, + "string" == typeof A.emissiveMap) + P.image = e[A.emissiveMap] && e[A.emissiveMap].image ? e[A.emissiveMap].image : null; + else { + var q = A.emissiveMap, + j = document.createElement("img"), + H = Fd({ + type: Number(q.noise_Type), + color1: (new Xh).fromArray(q.noise_Color1), + color2: (new Xh).fromArray(q.noise_Color2), + size: q.noise_Size, + level: q.noise_Levels, + phase: q.noise_Phase, + width: 32, + height: 32, + thresholdLow: q.noise_ThresholdLow, + thresholdHigh: q.noise_ThresholdHigh + }); + H && (j.src = H, + P.image = j) + } + P.needsUpdate = !0, + P.image && (P.offset.x = A.emissiveMapOffsetX ? A.emissiveMapOffsetX : 0, + P.offset.y = A.emissiveMapOffsetY ? A.emissiveMapOffsetY : 0, + P.repeat.x = A.emissiveMapScaleX ? A.emissiveMapScaleX : 1, + P.repeat.y = A.emissiveMapScaleY ? A.emissiveMapScaleY : 1, + P.rotation = A.emissiveMapWAngle ? A.emissiveMapWAngle : 0, + e[l] = P, + h.emissiveMap = P) + } + if ((void 0 !== A.emissiveIntensity && (h.emissiveIntensity = A.emissiveIntensity), + A.specularMap && vc.EnableTextureLoading) && ("string" == typeof A.specularMap ? void 0 !== A.specularMapOffsetY && 0 !== A.specularMapOffsetY || void 0 !== A.specularMapOffsetX && 0 !== A.specularMapOfsfetX || void 0 !== A.specularMapScaleX && 1 !== A.specularMapScaleX || void 0 !== A.specularMapScaleY && 1 !== A.specularMapScaleY || void 0 !== A.specularMapWAngle && 0 !== A.specularMapWAngle ? c = A.specularMapOffsetX + "_" + A.specularMapOffsetY + "_" + A.specularMapScaleX + "_" + A.specularMapScaleY + "_" + A.specularMapWAngle + "_" + A.specularMap : e[A.specularMap] ? h.specularMap = e[A.specularMap] : Bh.warn(h.name, " 中specularMap贴图未找到:", A.specularMap) : c = Bd(JSON.stringify(A.specularMap)), + c)) + if (e[c]) + h.specularMap = e[c]; + else { + var Y = new d; + if (Y.wrapS = Y.wrapT = 1e3, + "string" == typeof A.specularMap) + Y.image = e[A.specularMap] && e[A.specularMap].image ? e[A.specularMap].image : null; + else { + var W = A.specularMap, + J = document.createElement("img"), + z = Fd({ + type: Number(W.noise_Type), + color1: (new Xh).fromArray(W.noise_Color1), + color2: (new Xh).fromArray(W.noise_Color2), + size: W.noise_Size, + level: W.noise_Levels, + phase: W.noise_Phase, + width: 32, + height: 32, + thresholdLow: W.noise_ThresholdLow, + thresholdHigh: W.noise_ThresholdHigh + }); + z && (J.src = z, + Y.image = J) + } + Y.needsUpdate = !0, + Y.image && (Y.offset.x = A.specularMapOffsetX ? A.specularMapOffsetX : 0, + Y.offset.y = A.specularMapOffsetY ? A.specularMapOffsetY : 0, + Y.repeat.x = A.specularMapScaleX ? A.specularMapScaleX : 1, + Y.repeat.y = A.specularMapScaleY ? A.specularMapScaleY : 1, + Y.rotation = A.specularMapWAngle ? A.specularMapWAngle : 0, + e[c] = Y, + h.specularMap = Y) + } + return void 0 !== A.shininess && (h.shininess = A.shininess), + void 0 !== A.opacity && (h.opacity = A.opacity, + 1 > A.opacity && (h.transparent = !0), + A.opacity > 0 || (h.opacity = .1)), + h.side = 2, + h.refreshUniforms && h.refreshUniforms(), + h + }, + createNewStyleMaterial: function (A) { + var e = new yr(A); + return e.type = "NewStyle", + e.uniforms = Ge.merge([it.standard.uniforms]), + e.vertexShader = it.newStyle.vertexShader, + e.fragmentShader = it.newStyle.fragmentShader, + e.metalness = 0, + e + }, + createHighlightMaterial: function () { + var A = this.createStandardMaterial(vc.SelectionColor); + return vc.InfluencedByLight || (A.defines.NOTAFFECTEDBYLIGHT = ""), + A + }, + getBlinkMaterial: function (A, e) { + var t = Kd.getMaterialParameters(A), + i = Kd.createStandardMaterial(t); + return i.blinkColor.copy(e), + i.colorState = Yc.BLINK, + i.refreshUniforms(), + i + }, + getMaterialParameters: function (A) { + var e = {}; + return A.hasOwnProperty("color") && (e.color = A.color), + e.opacity = 1, + e.transparent = !1, + A.hasOwnProperty("opacity") && (e.opacity = A.opacity, + 1 > A.opacity && (e.transparent = !0)), + A.hasOwnProperty("side") && (e.side = A.side), + A.hasOwnProperty("name") && (e.name = A.name || ""), + A.hasOwnProperty("emissive") && (e.emissive = A.emissive), + A.hasOwnProperty("emissiveIntensity") && (e.emissive = A.emissiveIntensity), + A.hasOwnProperty("specular") && (e.specular = A.specular), + A.hasOwnProperty("shininess") && (e.shininess = A.shininess), + A.hasOwnProperty("map") && (e.map = A.map), + A.hasOwnProperty("aoMap") && (e.aoMap = A.aoMap), + A.hasOwnProperty("aoMapIntensity") && (e.aoMapIntensity = A.aoMapIntensity), + A.hasOwnProperty("bumpMap") && (e.bumpMap = A.bumpMap), + A.hasOwnProperty("bumpScale") && (e.bumpScale = A.bumpScale), + A.hasOwnProperty("normalMap") && (e.normalMap = A.normalMap), + A.hasOwnProperty("normalScale") && (e.normalScale = A.normalScale), + A.hasOwnProperty("alphaMap") && (e.alphaMap = A.alphaMap), + A.hasOwnProperty("alphaTest") && (e.alphaTest = A.alphaTest), + A.hasOwnProperty("transparent") && (e.transparent = A.transparent), + A.hasOwnProperty("emissiveMap") && (e.emissiveMap = A.emissiveMap), + A.hasOwnProperty("envMap") && (e.envMap = A.envMap), + A.hasOwnProperty("envMapIntensity") && (e.envMapIntensity = A.envMapIntensity), + A.hasOwnProperty("roughness") && (e.roughness = A.roughness), + A.hasOwnProperty("metalness") && (e.metalness = A.metalness), + A.hasOwnProperty("originRoughness") && (e.originRoughness = A.originRoughness), + A.hasOwnProperty("originMetalness") && (e.originMetalness = A.originMetalness), + A.hasOwnProperty("iblProbe") && (e.iblProbe = A.iblProbe), + A.hasOwnProperty("shift") && (e.shift = A.shift), + A.hasOwnProperty("wireframe") && (e.wireframe = A.wireframe), + A.hasOwnProperty("pureColor") && (e.pureColor = A.pureColor), + A.hasOwnProperty("textureColor") && (e.textureColor = A.textureColor), + A.hasOwnProperty("imageFade") && (e.imageFade = A.imageFade), + "bos3d" === A.type && A.hasOwnProperty("lights") && (e.lights = A.lights), + A.hasOwnProperty("lightMap") && (e.lightMap = A.lightMap), + A.hasOwnProperty("lightMapIntensity") && (e.lightMapIntensity = A.lightMapIntensity), + A.hasOwnProperty("viewportSize") && (e.viewportSize = A.viewportSize), + A.hasOwnProperty("fillMap") && (e.fillMap = A.fillMap), + e + }, + nextHighestPowerOfTwo: function (A) { + A -= 1; + for (var e = 1; 32 > e; e <<= 1) + A |= A >> e; + return A + 1 + }, + ensurePowerOfTwo: function (A) { + if (0 === A.width || 0 === A.height) + return A; + if (!a.isPowerOfTwo(A.width) || !a.isPowerOfTwo(A.height)) { + var e = document.createElement("canvas"); + return e.width = Kd.nextHighestPowerOfTwo(A.width), + e.height = Kd.nextHighestPowerOfTwo(A.height), + e.getContext("2d").drawImage(A, 0, 0, A.width, A.height, 0, 0, e.width, e.height), + e + } + return A + }, + ensureQuadrate: function (A) { + var e = A.width, + t = A.height; + if (0 === e || 0 === t || a.isPowerOfTwo(e) && a.isPowerOfTwo(t) && e === t) + return A; + a.isPowerOfTwo(e) || (e = Kd.nextHighestPowerOfTwo(e)), + a.isPowerOfTwo(t) || (t = Kd.nextHighestPowerOfTwo(t)); + var i = 0, + o = 0; + t > e ? i = .5 * (t - e) : o = .5 * (e - t); + var n = document.createElement("canvas"); + return n.width = n.height = Math.max(e, t), + n.getContext("2d").drawImage(A, 0, 0, A.width, A.height, i, o, e, t), + n + }, + getRGBAFromColorArray: function (A) { + var e = A[0], + t = A[1], + i = A[2], + o = A[3]; + return void 0 !== o ? "rgba(" + e + "," + t + "," + i + "," + o + ")" : "rgb(" + e + "," + t + "," + i + ")" + }, + getRGBAFromArray: function (A) { + var e = 255 * A[0], + t = 255 * A[1], + i = 255 * A[2], + o = 255 * A[3]; + return void 0 !== o ? "rgba(" + e + "," + t + "," + i + "," + o + ")" : "rgb(" + e + "," + t + "," + i + ")" + }, + getArrayFromRGBA: function (A) { + var e = A.split(","), + t = parseInt(e[0].split("(")[1], 0) / 255, + i = parseInt(e[1], 0) / 255, + o = parseInt(e[2].split(")")[0], 0) / 255; + return void 0 !== e[3] ? [t, i, o, parseFloat(e[3].split(")")[0])] : [t, i, o] + }, + getColorArrayFromRGBA: function (A) { + var e = A.split(","), + t = parseInt(e[0].split("(")[1], 0), + i = parseInt(e[1], 0), + o = parseInt(e[2].split(")")[0], 0); + return void 0 !== e[3] ? [t, i, o, parseFloat(e[3].split(")")[0])] : [t, i, o] + }, + getHexStringFromRGB: function (A) { + return "#" + ("000000" + Kd.getHex(Kd.getArrayFromRGBA(A)).toString(16)).slice(-6) + }, + getArrayFromColorArray: function (A) { + return [A[0] / 255, A[1] / 255, A[2] / 255] + }, + getHexStringFromColorArray: function (A) { + return "#" + ("000000" + Kd.getHex(Kd.getArrayFromColorArray(A)).toString(16)).slice(-6) + }, + getHexStringFromArray: function (A) { + return "#" + ("000000" + Kd.getHex(A).toString(16)).slice(-6) + }, + getHex: function (A) { + return 255 * A[0] << 16 ^ 255 * A[1] << 8 ^ 255 * A[2] << 0 + }, + getColorParamsByMaterial: function (A) { + return { + rgbaColor: [A.color.r, A.color.g, A.color.b, A.opacity], + transparent: A.transparent, + wireframe: A.wireframe + } + }, + getHoverColorByColor: function (A) { + var e = {}; + return e.r = A.r, + e.g = A.g, + e.b = A.b, + e.a = Kd.getHoverOpacity(A.a), + e + }, + getHoverOpacity: function (A) { + return .4 > A ? A + .3 : A - .3 + }, + cloneMaterialBaseOnColor: function (A, e) { + if (!A.color && !A.diffuse) + return A; + var t = A.clone(); + return t.wireframe = e.wireframe, + t.opacity = e.opacity, + t.transparent = e.transparent, + t.color && t.color.isColor && e.color && e.color.isColor && t.color.copy(e.color), + t.diffuse && t.diffuse.isColor && e.diffuse && e.diffuse.isColor && t.diffuse.copy(e.diffuse), + t + } + }, + Qd = function (A, e, t, i, o, n, r, a) { + this.name = A, + this.position = e, + this.target = t, + this.up = i, + this.fov = o, + this.frustumWidth = r, + this.frustumHeight = a, + this.version = n + }, + Rd = { + createCameraInfo: function (A) { + var e = A.camera, + t = new Qd(A.getCameraName(), e.position, e.target, e.up); + return JSON.stringify(t) + }, + transformCamera: function (A, e) { + var t = new y, + i = function (A) { + return [parseFloat(A[0]), parseFloat(A[1]), parseFloat(A[2])] + }; + t.fromArray(i(A.position.split(","))); + var o = new y; + o.fromArray(i(A.direction.split(","))); + var n = new y; + n.fromArray(i(A.up.split(","))); + var r = new y; + r.addVectors(t, o), + t.applyMatrix4(e.rootNode.matrix), + r.applyMatrix4(e.rootNode.matrix); + var a = new M; + return a.makeRotationFromEuler(e.rootNode.rotation), + n.applyMatrix4(a), + n.normalize(), + new Qd(A.name, t, r, n) + }, + parseCameraInfo: function (A) { + if (!A) + return null; + var e = JSON.parse(A); + if (!e.hasOwnProperty("position") || !e.hasOwnProperty("target") || !e.hasOwnProperty("up")) + return null; + var t = e.name || Ec.PERSPECTIVE, + i = new y; + i.x = e.position.x, + i.y = e.position.y, + i.z = e.position.z; + var o = new y; + o.x = e.target.x, + o.y = e.target.y, + o.z = e.target.z; + var n = new y; + return n.x = e.up.x, + n.y = e.up.y, + n.z = e.up.z, + new Qd(t, i, o, n, void 0, void 0 === e.version ? 0 : e.version, e.frustumWidth, e.frustumHeight) + }, + canvasToNormalized: function (A, e, t) { + var i = { + x: 0, + y: 0, + z: 0 + }; + return i.x = A.x / e * 2 - 1, + i.y = -A.y / t * 2 + 1, + i.z = A.z || 0, + i + }, + normalizedToCanvas: function (A, e, t) { + var i = { + x: 0, + y: 0, + z: 0 + }; + return i.x = Math.floor(.5 * (A.x + 1) * e + .5), + i.y = Math.floor(-.5 * (A.y - 1) * t + .5), + i.z = A.z || 0, + i + }, + drawingToCanvas: function (A, e, t, i) { + var o = new y(e.x, e.y, e.z); + return o.project(A), + this.normalizedToCanvas(o, t, i) + }, + drawingPointsToCanvas: function (A, e, t, i, o) { + var n = {}, + r = (new M).getInverse(A.matrixWorld), + a = new y(e.x, e.y, e.z); + a.applyMatrix4(r); + var s = new y(t.x, t.y, t.z); + if (s.applyMatrix4(r), + a.z > 0 && s.z > 0) + return null; + var l = a.clone().sub(s); + if (l.normalize(), + a.z > 0) + a.sub(l.multiplyScalar((a.z + A.near) / l.z)); + else if (s.z > 0) { + s.sub(l.multiplyScalar((s.z + A.near) / l.z)) + } + return a.applyMatrix4(A.projectionMatrix), + s.applyMatrix4(A.projectionMatrix), + n.start = this.normalizedToCanvas(a, i, o), + n.end = this.normalizedToCanvas(s, i, o), + n + }, + lineIntersectWithRect: function (A, e) { + if (A && A.start.x === A.end.x && A.start.y === A.end.y) + return Bh.log("Invalid line."), + null; + var t, i = 0; + A.start.x !== A.end.x && (i = (A.start.y - A.end.y) / (A.start.x - A.end.x)); + var o = [], + n = e.min, + r = e.max; + return n.y > i * n.x + (t = A.start.y - i * A.start.x) || i * n.x + t > r.y || o.push(new s(n.x, i * n.x + t)), + n.y > i * r.x + t || i * r.x + t > r.y || o.push(new s(r.x, i * r.x + t)), + 0 === i && (o.push(new s(n.x, t)), + o.push(new s(r.x, t))), + (n.y - t) / i > n.x && r.x > (n.y - t) / i && o.push(new s((n.y - t) / i, n.y)), + (r.y - t) / i > n.x && r.x > (r.y - t) / i && o.push(new s((r.y - t) / i, r.y)), + o + }, + canvasToDrawing: function (A, e, t, i) { + var o = this.canvasToNormalized(e, t, i), + n = new y(o.x, o.y, o.z); + return n.unproject(A), { + x: n.x, + y: n.y, + z: n.z + } + }, + intersectBoxByRay: function (A, e) { + var t = 0, + i = 0, + o = 0, + n = 0, + r = 0, + a = 0, + s = 1 / A.direction.x, + l = 1 / A.direction.y, + c = 1 / A.direction.z, + h = A.origin; + return 0 > s ? (t = (e.max.x - h.x) * s, + i = (e.min.x - h.x) * s) : (t = (e.min.x - h.x) * s, + i = (e.max.x - h.x) * s), + 0 > l ? (o = (e.max.y - h.y) * l, + n = (e.min.y - h.y) * l) : (o = (e.min.y - h.y) * l, + n = (e.max.y - h.y) * l), + t > n || o > i ? null : ((o > t || isNaN(t)) && (t = o), + (i > n || isNaN(i)) && (i = n), + 0 > c ? (r = (e.max.z - h.z) * c, + a = (e.min.z - h.z) * c) : (r = (e.min.z - h.z) * c, + a = (e.max.z - h.z) * c), + t > a || r > i ? null : ((r > t || isNaN(t)) && (t = r), + (i > a || isNaN(i)) && (i = a), + 0 > i ? null : 0 > t ? i : t)) + }, + intersectObject: function (A, e, t, i) { + if (A.visible) { + A.raycast(e, t); + if (!0 === i && A.children) + for (var o = A.children, n = 0, r = o.length; r > n; n += 1) + Rd.intersectObject(o[n], e, t, !0) + } + }, + intersectObjectWithFrustum: (Ud = new aA, + function (A, e) { + if (!A.boundingBox || A instanceof Ue) { + var t = A.geometry; + null === t.boundingBox && t.computeBoundingBox(), + Ud.copy(t.boundingBox) + } else + Ud.copy(A.boundingBox); + return Ud.applyMatrix4(A.matrixWorld), + e.intersectsBox(Ud) + } + ) + }, + Td = function (A, e, t, i) { + je.call(this, A, e, t, i), + this.projectOnWidth = !1 + }; + (Td.prototype = Object.create(je.prototype)).constructor = Td, + Td.prototype.updateProjectionMatrixByFrustum = function (A, e) { + var t = this.near, + i = null, + o = null, + n = null, + r = null; + this.projectOnWidth ? (o = -.5 * (n = A), + i = .5 * (r = this.aspect * n)) : (i = .5 * (r = e), + o = -.5 * (n = this.aspect * r)); + var a = this.view; + if (null !== a) { + var s = a.fullWidth, + l = a.fullHeight; + o += a.offsetX * n / s, + i -= a.offsetY * r / l, + n *= a.width / s, + r *= a.height / l + } + var c = this.filmOffset; + 0 !== c && (o += t * c / this.getFilmWidth()), + this.projectionMatrix.makePerspective(o, o + n, i, i - r, t, this.far) + }, + Td.prototype.setProjectOnWidth = function (A) { + this.projectOnWidth = A + }; + var kd = function (A, e) { + qe.call(this), + this.target = new y, + this.name = A || "", + this.fov = e.fov, + this.near = e.near, + this.far = e.far, + A === Ec.PERSPECTIVE ? (this.aspect = e.width / e.height, + this.fov = e.fov, + this.left = -e.width / 2, + this.right = e.width / 2, + this.top = e.height / 2, + this.bottom = -e.height / 2, + this.perspectiveCamera = new Td(this.fov, this.aspect, this.near, this.far), + this.orthoCamera = null, + this.toPerspective()) : (this.left = e.left, + this.right = e.right, + this.top = e.top, + this.bottom = e.bottom, + this.fov = 45, + this.aspect = (this.right - this.left) / (this.top - this.bottom), + this.orthoCamera = new Ka(this.left, this.right, this.top, this.bottom, this.near, this.far), + this.perspectiveCamera = null, + this.orthoCamera.updateProjectionMatrix(), + this.projectionMatrix = this.orthoCamera.projectionMatrix, + this.isPerspective = !1), + this.zoom = e.zoom || 1, + this.updateProjectionMatrixByFrustum = !1 + }; + (kd.prototype = Object.create(qe.prototype)).constructor = kd, + kd.prototype.toPerspective = function () { + null !== this.perspectiveCamera ? this.updateProjectionMatrixByFrustum || (this.perspectiveCamera.aspect = this.aspect, + this.perspectiveCamera.near = this.near, + this.perspectiveCamera.far = this.far, + this.perspectiveCamera.fov = this.fov, + this.perspectiveCamera.updateProjectionMatrix(), + this.projectionMatrix = this.perspectiveCamera.projectionMatrix, + this.projectionMatrixInverse = this.perspectiveCamera.projectionMatrixInverse, + this.isPerspective = !0, + this.dirty = !0) : Bh.log("Can not convert to perspective camera because the camera original type is orthographic.") + }, + kd.prototype.toOrthographic = function () { + null === this.orthoCamera && (this.orthoCamera = new Ka(this.left, this.right, this.top, this.bottom, this.near, this.far)); + var A = this.fov, + e = this.target.clone().sub(this.position).length(), + t = Math.tan(A * Math.PI / 180 / 2) * e, + i = t * this.aspect; + t /= this.zoom, + this.left = this.orthoCamera.left = -(i /= this.zoom), + this.right = this.orthoCamera.right = i, + this.top = this.orthoCamera.top = t, + this.bottom = this.orthoCamera.bottom = -t, + this.orthoCamera.near = this.near, + this.orthoCamera.far = this.far, + this.orthoCamera.updateProjectionMatrix(), + this.projectionMatrix = this.orthoCamera.projectionMatrix, + this.projectionMatrixInverse = this.orthoCamera.projectionMatrixInverse, + this.isPerspective = !1, + this.dirty = !0 + }, + kd.prototype.setSize = function (A, e) { + this.perspectiveCamera.aspect = A / e, + this.left = -A / 2, + this.right = A / 2, + this.top = e / 2, + this.bottom = -e / 2, + this.aspect = A / e, + this.dirty = !0 + }, + kd.prototype.setSizeByFrustum = function (A, e) { + var t = 2 * this.right, + i = 2 * this.top; + this.aspect = t / i; + var o = null; + A / e > t / i ? (o = i / t, + this.perspectiveCamera.setProjectOnWidth(!0)) : (o = t / i, + this.perspectiveCamera.setProjectOnWidth(!1)), + this.dirty = !0, + this.isPerspective && (this.perspectiveCamera.aspect = o, + this.perspectiveCamera.near = this.near, + this.perspectiveCamera.far = this.far, + this.perspectiveCamera.fov = this.fov, + this.perspectiveCamera.updateProjectionMatrixByFrustum(A, e), + this.projectionMatrix = this.perspectiveCamera.projectionMatrix, + this.isPerspective = !0, + this.dirty = !0) + }, + kd.prototype.setFov = function (A) { + this.fov = A, + this.dirty = !0, + this.updateProjectionMatrix() + }, + kd.prototype.setNearFar = function (A, e) { + this.near = A, + this.far = e, + this.dirty = !0, + this.updateProjectionMatrix() + }, + kd.prototype.updateProjectionMatrix = function () { + this.isPerspective ? this.toPerspective() : this.toOrthographic() + }, + kd.prototype.setLens = function (A, e) { + void 0 === e && (e = 24); + var t = 2 * a.radToDeg(Math.atan(e / (2 * A))); + return this.setFov(t), + this.dirty = !0, + t + }, + kd.prototype.setZoom = function (A) { + this.zoom = A, + this.dirty = !0, + this.updateProjectionMatrix() + }, + kd.prototype.copy = function (A) { + qe.prototype.copy.call(this, A), + this.target.copy(A.target), + this.aspect = A.aspect, + this.fov = A.fov, + this.near = A.near, + this.far = A.far, + this.left = A.left, + this.right = A.right, + this.top = A.top, + this.bottom = A.bottom, + this.zoom = A.zoom, + this.isPerspective = A.isPerspective, + A.orthoCamera && (this.orthoCamera ? this.orthoCamera.copy(A.orthoCamera) : this.orthoCamera = A.orthoCamera.clone()), + A.perspectiveCamera && (this.perspectiveCamera ? this.perspectiveCamera.copy(A.perspectiveCamera) : this.perspectiveCamera = A.perspectiveCamera.clone()) + }, + kd.prototype.isDirty = function () { + return this.dirty + }, + kd.prototype.toFrontView = function () { + this.rotation.x = 0, + this.rotation.y = 0, + this.rotation.z = 0 + }, + kd.prototype.toBackView = function () { + this.rotation.x = 0, + this.rotation.y = Math.PI, + this.rotation.z = 0 + }, + kd.prototype.toLeftView = function () { + this.rotation.x = 0, + this.rotation.y = -Math.PI / 2, + this.rotation.z = 0 + }, + kd.prototype.toRightView = function () { + this.rotation.x = 0, + this.rotation.y = Math.PI / 2, + this.rotation.z = 0 + }, + kd.prototype.toTopView = function () { + this.rotation.x = -Math.PI / 2, + this.rotation.y = 0, + this.rotation.z = 0 + }, + kd.prototype.toBottomView = function () { + this.rotation.x = Math.PI / 2, + this.rotation.y = 0, + this.rotation.z = 0 + }; + var Dd = function (A, e, t, i) { + this.ray = new CA(A, e), + this.near = t || 0, + this.far = i || 1 / 0, + this.params = { + Sprite: {}, + Mesh: {}, + Points: { + threshold: 1 + }, + LOD: {}, + Line: {} + } + }; + Dd.prototype = { + constructor: Dd, + precision: 1e-4, + linePrecision: 1, + descSort: function (A, e) { + return A.distance - e.distance + }, + set: function (A, e) { + this.ray.set(A, e) + }, + setFromCamera: function (A, e) { + e instanceof kd ? e.isPerspective ? (this.ray.origin.copy(e.position), + this.ray.direction.set(A.x, A.y, .5).unproject(e).sub(e.position).normalize()) : (this.ray.origin.set(A.x, A.y, -1).unproject(e), + this.ray.direction.set(0, 0, -1).transformDirection(e.matrixWorld)) : e instanceof je ? (this.ray.origin.copy(e.position), + this.ray.direction.set(A.x, A.y, .5).unproject(e).sub(e.position).normalize()) : e instanceof Ka ? (this.ray.origin.set(A.x, A.y, -1).unproject(e), + this.ray.direction.set(0, 0, -1).transformDirection(e.matrixWorld)) : Bh.error("Raycaster: Unsupported camera type.") + }, + intersectObject: function (A, e) { + var t = []; + return Rd.intersectObject(A, this, t, e), + t.sort(this.descSort), + t.length > 0 ? t[0] : null + }, + intersectObjects: function (A, e) { + for (var t = [], i = 0, o = A.length; o > i; i += 1) + Rd.intersectObject(A[i], this, t, e); + return t.sort(this.descSort), + t.length > 0 ? t[0] : null + }, + intersectOctantForNode: function (A, e) { + var t = this, + i = new aA; + ! function A(o) { + var n = null, + r = null; + if (i.set(o.min, o.max), + t.ray.intersectBox(i) && (e.push(o), + o.childOctants)) + for (n = 0, + r = o.childOctants.length; r > n; n += 1) + A(o.childOctants[n]) + }(A) + } + }, + CA.prototype.intersectBoxWithDistance = function (A) { + var e = null, + t = null, + i = null, + o = null, + n = null, + r = null, + a = 1 / this.direction.x, + s = 1 / this.direction.y, + l = 1 / this.direction.z, + c = this.origin; + if (0 > a ? (t = (A.max.x - c.x) * a, + e = (A.min.x - c.x) * a) : (t = (A.min.x - c.x) * a, + e = (A.max.x - c.x) * a), + 0 > s ? (o = (A.max.y - c.y) * s, + i = (A.min.y - c.y) * s) : (o = (A.min.y - c.y) * s, + i = (A.max.y - c.y) * s), + t > i || o > e) + return -1; + if ((o > t || isNaN(t)) && (t = o), + (e > i || isNaN(e)) && (e = i), + 0 > l ? (r = (A.max.z - c.z) * l, + n = (A.min.z - c.z) * l) : (r = (A.min.z - c.z) * l, + n = (A.max.z - c.z) * l), + t > n || r > e) + return -1; + if ((r > t || isNaN(t)) && (t = r), + (e > n || isNaN(e)) && (e = n), + 0 > e) + return -1; + if (0 > t) + return 0; + var h = new y; + this.at(0 > t ? e : t, h); + var d = h.x - c.x, + p = h.y - c.y, + g = h.z - c.z; + return Math.sqrt(d * d + p * p + g * g) + }; + var Ld = function () {}, + Nd = function () {}; + Nd.prototype = uh.extend(!0, {}, Ld.prototype = { + constructor: Ld, + apply: function (A) { + A.addEventListener = Ld.prototype.addEventListener, + A.hasEventListener = Ld.prototype.hasEventListener, + A.removeEventListener = Ld.prototype.removeEventListener, + A.fireEvent = Ld.prototype.dispatchEvent, + A.dispatchEvent = Ld.prototype.dispatchEvent + }, + addEventListener: function (A, e) { + A && (void 0 === this._listeners && (this._listeners = {}), + void 0 === this._listeners[A] && (this._listeners[A] = []), + this._listeners[A].push(e)) + }, + hasEventListener: function (A, e) { + if (!A) + return !1; + if (void 0 === this._listeners) + return !1; + var t = this._listeners; + return void 0 !== t[A] && -1 !== t[A].indexOf(e) + }, + removeEventListener: function (A, e) { + if (A && (void 0 === this._listeners && (this._listeners = {}), + Array.isArray(this._listeners[A]))) + for (var t = this._listeners[A], i = 0, o = t.length; o > i; i += 1) + if (t[i] === e) { + t.splice(i, 1); + break + } + }, + removeAllEventListenerByType: function (A) { + A && (void 0 === this._listeners && (this._listeners = {}), + Array.isArray(this._listeners[A]) && this._listeners[A] && (this._listeners[A] = void 0)) + }, + removeAllEventListener: function () { + for (var A in void 0 === this._listeners && (this._listeners = {}), + this._listeners) + if (this._listeners.hasOwnProperty(A)) + for (var e = this._listeners[A], t = 0, i = e.length; i > t; t += 1) + e.splice(t, 1); + this._listeners = {} + }, + dispatchEvent: function (A) { + if (void 0 === this._listeners && (this._listeners = {}), + "string" == typeof A && (A = { + type: A + }), + !A.target) + try { + A.target = this + } catch (A) {} + if (null == A.type) + throw Bh.trace("事件类型未知."), + new Error("事件类型未知."); + if (Array.isArray(this._listeners[A.type])) + for (var e = this._listeners[A.type].slice(), t = 0; e.length > t; t += 1) + e[t].call(this, A) + }, + fireEvent: function (A) { + this.dispatchEvent(A) + } + }, { + init: function (A) { + this.marks = {}, + this.allOids = [], + this.components = {}, + this.SelectedMark = {}, + this.mouse = new s, + this.lastX = 0, + this.lastY = 0, + this.active = !0, + this.viewer = A + }, + addObjectToScene: function (A, e) { + A && A.id && e && (this.viewer.addExternalObject(A.id, e), + this.components[A.id] = e, + this.allOids.push(A.id), + this.marks[A.id] = A) + }, + enabled: function () { + this.mousedown = this.viewer.domElement.addEventListener("mousedown", this.onMouseDown.bind(this), !1), + this.mouseup = this.viewer.domElement.addEventListener("mouseup", this.onMouseUp.bind(this), !1) + }, + disabled: function () { + this.mousedown = this.viewer.domElement.removeEventListener("mousedown", this.onMouseDown.bind(this), !1), + this.mouseup = this.viewer.domElement.removeEventListener("mouseup", this.onMouseUp.bind(this), !1) + }, + touchEnabled: function () { + this.touchstart = document.getElementById(this.viewer.uuid).addEventListener("touchstart", this.onTouchStart.bind(this), !1), + this.touchend = document.getElementById(this.viewer.uuid).addEventListener("touchend", this.onTouchEnd.bind(this), !1) + }, + touchDisabled: function () { + this.touchstart = this.viewer.domElement.removeEventListener("touchstart", this.onTouchStart.bind(this), !1), + this.touchend = this.viewer.domElement.removeEventListener("touchend", this.onTouchEnd.bind(this), !1) + }, + onMouseDown: function (A) { + this.mouse.x = this.lastX = A.clientX, + this.mouse.y = this.lastY = A.clientY + }, + onMouseUp: function (A) { + var e = [A.clientX, A.clientY]; + (e[0] > this.lastX ? 5 > e[0] - this.lastX : 5 > this.lastX - e[0]) && (e[1] > this.lastY ? 5 > e[1] - this.lastY : 5 > this.lastY - e[1]) && (this.mouse.x = this.lastX = e[0], + this.mouse.y = this.lastY = e[1], + this.pick("pick")) + }, + onTouchStart: function (A) { + this.mouse.x = this.lastX = A.changedTouches[0].clientX, + this.mouse.y = this.lastY = A.changedTouches[0].clientY + }, + onTouchEnd: function (A) { + (A.changedTouches[0].clientX > this.lastX ? 5 > A.changedTouches[0].clientX - this.lastX : 5 > this.lastX - A.changedTouches[0].clientX) && (A.changedTouches[0].clientY > this.lastY ? 5 > A.changedTouches[0].clientY - this.lastY : 5 > this.lastY - A.changedTouches[0].clientY) && (this.mouse.x = this.lastX = A.changedTouches[0].clientX, + this.mouse.y = this.lastY = A.changedTouches[0].clientY, + this.pick("pick")) + }, + pick: function () { + var A = this.viewer.cameraControl.getIntersectContext(this.mouse), + e = new Dd; + e.setFromCamera(A.mouse, A.camera), + e.camera = A.camera, + e._camera = A.camera, + e.viewportSize = A.viewportSize; + var t = Object.values(this.components), + i = e.intersectObjects(t); + i ? this.SelectedMark !== i.object ? (this.SelectedMark = i.object, + this.dispatchEvent({ + type: "updated", + added: { + objects: this.SelectedMark + } + })) : (this.dispatchEvent({ + type: "updated", + removed: { + objects: this.SelectedMark + } + }), + this.SelectedMark = {}) : (this.SelectedMark = {}, + this.dispatchEvent({ + type: "updated", + removed: { + objects: this.SelectedMark + } + })) + }, + getClickCoordsWithinElement: function (A) { + var e = [0, 0]; + if (A) { + for (var t = A.target, i = 0, o = 0; t.offsetParent;) + i += t.offsetLeft, + o += t.offsetTop, + t = t.offsetParent; + e[0] = A.pageX - i, + e[1] = A.pageY - o + } else + A = window.event, + e.x = A.x, + e.y = A.y; + return e + }, + listentoSelectMarks: function (A) { + var e = this; + this.addEventListener("updated", (function (t) { + t.added && e.SelectedMark !== {} ? A(e.SelectedMark.key, e.SelectedMark) : A(null, null) + })) + }, + hasTheSameId: function (A) { + if ("" !== A.id) + for (var e = 0; this.allOids.length > e; e += 1) + if (A.id === this.allOids[e]) + return { + data: "标签id重复" + } + }, + findMark: function (A) { + return this.components[A] + }, + idsToArray: function (A) { + return null == A ? { + data: "未选中mark" + } : (Array.isArray(A) || (A = [A]), + A) + }, + removeIdAndInfo: function (A) { + var e = this.allOids.indexOf(A); + this.allOids.splice(e, 1), + delete this.marks[A], + delete this.components[A] + }, + remove: function (A) { + if (A = this.idsToArray(A), + !Array.isArray(A)) + return A; + for (var e = 0; A.length > e; e += 1) + this.removeIdAndInfo(A[e]), + this.viewer.removeExternalObjectByName(A[e]); + this.viewer.render() + }, + hide: function (A) { + if (A = this.idsToArray(A), + !Array.isArray(A)) + return A; + for (var e = 0; A.length > e; e += 1) { + var t = this.findMark(A[e]); + t && (t.visible = !1) + } + this.viewer.render() + }, + show: function (A) { + var e = null; + if (A) { + A = this.idsToArray(A); + for (var t = 0; A.length > t; t += 1) + (e = this.findMark(A[t])) && (e.visible = !0) + } else + for (var i in this.components) + (e = this.components[i]) && (e.visible = !0); + this.viewer.render() + }, + isolation: function (A) { + if (this.allOids.length > 0) { + A = this.idsToArray(A); + this.show(); + for (var e = this.allOids.concat(), t = 0; A.length > t; t += 1) { + var i = A[t]; + if (-1 === this.allOids.indexOf(i)) + return { + data: "mark不存在" + }; + for (var o = 0; e.length > o; o += 1) + if (i === e[o]) { + e.splice(o, 1); + break + } + } + var n = null; + for (o = 0; e.length > o; o += 1) + (n = this.findMark(e[o])) && (n.visible = !1); + this.viewer.render() + } + } + }); + var Od = function (A) { + this.defaultSettings = { + id: "", + mode: "absolute", + startPosition: [0, 0, 0], + endPosition: [0, 0], + color: [255, 0, 0], + colorLine: [0, 0, 0], + offset: [0, 0], + draggable: !0, + componentId: "", + domElement: null, + title: "标签", + showPoint: !0, + showLine: !0 + }, + this.initStartPos = {}; + var e = A; + "function" == typeof A.getViewerImpl && (e = A.getViewerImpl()), + this.dragging = !1, + this.init(e), + this.markState = {}; + var t = this; + this.showPoint = !0, + this.showLine = !0, + e.cameraControl.addEventListener(Rc.ON_CAMERA_CHANGE, (function () { + t._update() + })) + }; + Od.prototype = uh.extend(!0, {}, Nd.prototype, { + constructor: Od, + add: function (A, e) { + var t = document.createElement("div"), + i = Object.assign({}, this.defaultSettings, A), + o = this.hasTheSameId(i); + if (o) + return o; + "" === i.id && (i.id = a.generateUUID()), + t.id = "label" + i.id, + this.marks[i.id] = Object.assign({}, i); + var n = this.viewer.getScreenCoordFromSceneCoord(i.startPosition), + r = i.offset, + s = i.endPosition.concat(), + l = []; + ("relativeute" === i.mode ? (s = [n[0] + r[0], n[1] + r[1]], + i.endPosition = [0, 0]) : i.offset = [0, 0], + Array.isArray(i.colorLine)) && (i.colorLine = "rgb(" + i.colorLine[0] + "," + i.colorLine[1] + "," + i.colorLine[2] + ")"); + var c = document.createElement("div"); + (c.id = "labelStart" + i.id, + c.className = "labelStart", + c.style.cssText = "border:2px solid red; border-radius:5px; -moz-border-radius:5px; height: 4px;width: 4px;position: absolute;margin-left: -3px;margin-top: -3px;top:" + n[1] + "px;left:" + n[0] + "px; background-color: red;", + t.appendChild(c), + this.showPoint && i.showPoint || (c.style.display = "none"), + Array.isArray(i.color)) && (i.color = "rgb(" + i.color[0] + "," + i.color[1] + "," + i.color[2] + ")"); + var h = document.createElement("div"); + h.id = i.id, + h.className = "labelingDiv", + h.style.cssText = "border:2px solid " + i.colorLine + ";text-align:center;border-radius:5px;-moz-border-radius:5px;min-width: 66px;position: absolute;width:-webkit-fit-content;width: -moz-fit-content;background-color:" + i.color + ";", + t.appendChild(h); + var d = document.createElement("span"); + d.id = "labelTitle" + i.id, + d.className = "labelTitle", + d.onmouseover = function () { + d.style.cursor = "move" + }, + d.onmouseout = function () { + d.style.cursor = "auto" + }, + d.style.cssText = "display:block;padding:2%;text-align:center;color: #000000;white-space:nowrap", + d.innerText = i.title, + h.appendChild(d), + 0 > s[0] && (s[0] = 5), + 0 > s[1] && (s[1] = 5), + s[0] > this.viewer.domElement.offsetWidth - h.offsetWidth && (s[0] = this.viewer.domElement.offsetWidth - h.offsetWidth), + s[1] > this.viewer.domElement.offsetHeight - h.offsetHeight && (s[1] = this.viewer.domElement.offsetHeight - h.offsetHeight), + h.style.cssText += "left:" + s[0] + "px; top:" + s[1] + "px", + i.domElement && h.appendChild(i.domElement), + s[0] > n[0] ? s[1] > n[1] ? (l[0] = s[0], + l[1] = s[1]) : (l[0] = s[0], + l[1] = s[1] + h.offsetHeight) : s[1] > n[1] ? (l[0] = s[0] + h.offsetWidth, + l[1] = s[1]) : (l[0] = s[0] + h.offsetWidth, + l[1] = s[1] + h.offsetHeight); + var p = n[0] - l[0], + g = n[1] - l[1], + u = Math.sqrt(p * p + g * g), + f = Math.atan(g / p) / Math.PI * 180; + p > 0 || (g > 0 ? f += 180 : f -= 180); + var m = document.createElement("div"); + m.id = "labelLine" + i.id, + m.className = "labelLine", + m.style.cssText = " height: 2px;position: absolute;transform-origin: left center;width:" + u + "px;-ms-transform:rotateZ(" + f + "deg);-moz-transform:rotateZ(" + f + "deg);-webkit-transform:rotateZ(" + f + "deg);-o-transform:rotateZ(" + f + "deg);transform:rotateZ(" + f + "deg);left:" + l[0] + "px;top:" + l[1] + "px;background-color:" + i.colorLine + ";", + t.appendChild(m), + this.showLine && i.showLine || (m.style.display = "none"), + this.viewer.domElement.appendChild(t), + i.draggable && this._enableDrag(h), + this.allOids.push(i.id), + this.markState[i.id] = { + userHide: !1, + outOfBoundary: !1 + }, + "function" == typeof e && e(i.id) + }, + enablePoint: function (A) { + this.showPoint = A, + this._update() + }, + enableLine: function (A) { + this.showLine = A, + this._update() + }, + _update: function () { + for (var A in this.marks) { + var e = this.viewer.getScreenCoordFromSceneCoord(this.marks[A].startPosition), + t = this.marks[A].endPosition.concat(), + i = this.marks[A].offset; + "relativeute" === this.marks[A].mode && (0 !== t[0] || 0 !== t[1] ? (i = [t[0] - e[0], t[1] - e[1]], + this.marks[A].endPosition = [0, 0], + this.marks[A].offset = i) : t = [e[0] + i[0], e[1] + i[1]]); + var o = [0, 0], + n = document.getElementById(A); + t[0] > e[0] ? t[1] > e[1] ? (o[0] = t[0], + o[1] = t[1]) : (o[0] = t[0], + o[1] = t[1] + n.offsetHeight) : t[1] > e[1] ? (o[0] = t[0] + n.offsetWidth, + o[1] = t[1]) : (o[0] = t[0] + n.offsetWidth, + o[1] = t[1] + n.offsetHeight); + var r = e[0] - o[0], + a = e[1] - o[1], + s = Math.sqrt(r * r + a * a), + l = Math.atan(a / r) / Math.PI * 180; + r > 0 || (a > 0 ? l += 180 : l -= 180); + var c = getComputedStyle(this.viewer.domElement), + h = parseInt(c.width, 10), + d = parseInt(c.height, 10); + 0 > e[1] || e[1] > d || 0 > e[0] || e[0] > h ? (this.markState[A].outOfBoundary = !0, + document.getElementById("labelStart" + A).setCss({ + display: "none" + }), + document.getElementById("labelLine" + A).setCss({ + display: "none" + }), + document.getElementById(A).setCss({ + display: "none" + })) : (this.markState[A].outOfBoundary = !1, + this.dragging || "relativeute" !== this.marks[A].mode || (document.getElementById(A).style.left = t[0] + "px", + document.getElementById(A).style.top = t[1] + "px"), + this.markState[A].userHide || (document.getElementById(A).setCss({ + display: "block" + }), + this.showPoint && this.marks[A].showPoint ? document.getElementById("labelStart" + A).style.cssText += ";display:block;top:" + e[1] + "px; left:" + e[0] + "px" : document.getElementById("labelStart" + A).setCss({ + display: "none" + }), + this.showLine && this.marks[A].showLine ? document.getElementById("labelLine" + A).style.cssText += ";display:block;width:" + s + "px;transform-origin: left center;-ms-transform:rotateZ(" + l + "deg);-moz-transform:rotateZ(" + l + "deg);-webkit-transform:rotateZ(" + l + "deg);-o-transform:rotateZ(" + l + "deg);transform:rotateZ(" + l + "deg);left:" + o[0] + "px; top:" + o[1] + "px" : document.getElementById("labelLine" + A).setCss({ + display: "none" + }))) + } + }, + _enableDrag: function (A) { + var e = this, + t = A, + i = A.id, + o = t.querySelector("#labelTitle" + i), + n = this.viewer.domElement, + r = n.offsetLeft, + a = n.offsetTop, + s = this; + o.addEventListener("mousedown", (function (e) { + e.preventDefault(), + s.dragging = !0, + t.setAttribute("offset-left", e.offsetX), + t.setAttribute("offset-top", e.offsetY), + t.setAttribute("allow-drag", "true"), + [A.style.left, A.style.top] + })), + document.addEventListener("mousemove", function (A) { + if ("true" === t.getAttribute("allow-drag")) { + A.preventDefault(); + var e = A.clientX - parseInt(t.getAttribute("offset-left"), 10) - parseInt(t.style.borderWidth, 10) - r, + o = A.clientY - parseInt(t.getAttribute("offset-top"), 10) - parseInt(t.style.borderWidth, 10) - a; + 0 > o && (o = 5), + o > n.offsetHeight - t.offsetHeight && (o = n.offsetHeight - t.offsetHeight), + 0 > e && (e = 5), + e > n.offsetWidth - t.offsetWidth && (e = n.offsetWidth - t.offsetWidth), + t.style.cssText += ";left:" + e + "px;top:" + o + "px", + this.marks[i].endPosition = [e, o], + this._update() + } + } + .bind(this)), + document.addEventListener("mouseup", (function (A) { + "true" === t.getAttribute("allow-drag") && (A.preventDefault(), + t.setAttribute("allow-drag", "false"), + s.dragging = !1) + })), + o.addEventListener("touchstart", (function (e) { + e.preventDefault(); + var i = parseInt(t.style.left, 10), + o = parseInt(t.style.top, 10), + n = e.targetTouches[0].clientY; + t.setAttribute("offset-left", e.targetTouches[0].clientX - i), + t.setAttribute("offset-top", n - o), + t.setAttribute("allow-drag", "true"), + [A.style.left, A.style.top] + })), + document.addEventListener("touchmove", (function (A) { + if ("true" === t.getAttribute("allow-drag")) { + A.preventDefault(); + var o = A.targetTouches[0].clientX - parseInt(t.getAttribute("offset-left"), 10) - parseInt(t.style.borderWidth, 10) - r, + n = A.targetTouches[0].clientY - parseInt(t.getAttribute("offset-top"), 10) - parseInt(t.style.borderWidth, 10) - a; + 0 > n && (n = 5), + n > e.viewer.domElement.offsetHeight - t.offsetHeight && (n = e.viewer.domElement.offsetHeight - t.offsetHeight), + 0 > o && (o = 5), + o > e.viewer.domElement.offsetWidth - t.offsetWidth && (o = e.viewer.domElement.offsetWidth - t.offsetWidth), + t.style.cssText += ";left:" + o + "px;top:" + n + "px", + e.marks[i].endPosition = [o, n], + e._update() + } + })), + document.addEventListener("touchend", (function (A) { + "true" === t.getAttribute("allow-drag") && (A.preventDefault(), + t.setAttribute("allow-drag", "false")) + })) + }, + updateMark: function (A, e) { + if (!this.marks[A]) + return { + id: A, + data: "该标签不存在" + }; + var t = Object.assign({}, this.marks[A], e); + this.marks[A] = Object.assign({}, t); + var i = this.viewer.getScreenCoordFromSceneCoord(t.startPosition), + o = t.offset, + n = t.endPosition.concat(), + r = []; + "relativeute" === t.mode ? (n = [i[0] + o[0], i[1] + o[1]], + t.endPosition = [0, 0]) : t.offset = [0, 0], + Array.isArray(t.colorLine) && (t.colorLine = "rgb(" + t.colorLine[0] + "," + t.colorLine[1] + "," + t.colorLine[2] + ")"); + var a = document.getElementById("labelStart" + A); + a.style.cssText = "border:2px solid red; border-radius:5px; -moz-border-radius:5px; height: 4px;width: 4px;position: absolute;margin-left: -3px;margin-top: -3px;top:" + i[1] + "px;left:" + i[0] + "px;background-color:" + t.colorLine + ";", + this.showPoint && t.showPoint || (a.style.display = "none"), + Array.isArray(t.color) && (t.color = "rgb(" + t.color[0] + "," + t.color[1] + "," + t.color[2] + ")"); + var s = document.getElementById(A); + s.style.cssText = "border:2px solid " + t.colorLine + ";text-align:center;border-radius:5px;-moz-border-radius:5px;min-width: 66px;position: absolute;width:-webkit-fit-content;width: -moz-fit-content;background-color:" + t.color + ";"; + var l = document.getElementById("labelTitle" + A); + l.innerText = t.title, + 0 > n[0] && (n[0] += 5), + 0 > n[1] && (n[1] += 5), + n[0] > this.viewer.domElement.offsetWidth - s.offsetWidth && (n[0] = this.viewer.domElement.offsetWidth - s.offsetWidth), + n[1] > this.viewer.domElement.offsetHeight - s.offsetHeight && (n[1] = this.viewer.domElement.offsetHeight - s.offsetHeight), + s.style.cssText += "left:" + n[0] + "px; top:" + n[1] + "px"; + var c = l.nextElementSibling || l.nextSibling; + c && s.removeChild(c), + t.domElement && s.appendChild(t.domElement), + t.draggable && this._enableDrag(s), + n[0] > i[0] ? n[1] > i[1] ? (r[0] = n[0], + r[1] = n[1]) : (r[0] = n[0], + r[1] = n[1] + s.offsetHeight) : n[1] > i[1] ? (r[0] = n[0] + s.offsetWidth, + r[1] = n[1]) : (r[0] = n[0] + s.offsetWidth, + r[1] = n[1] + s.offsetHeight); + var h = i[0] - r[0], + d = i[1] - r[1], + p = Math.sqrt(h * h + d * d), + g = Math.atan(d / h) / Math.PI * 180; + h > 0 || (d > 0 ? g += 180 : g -= 180); + var u = document.getElementById("labelLine" + A); + u.style.cssText = "height: 2px;position: absolute;transform-origin: left center;width:" + p + "px;-ms-transform:rotateZ(" + g + "deg);-moz-transform:rotateZ(" + g + "deg);-webkit-transform:rotateZ(" + g + "deg);-o-transform:rotateZ(" + g + "deg);transform:rotateZ(" + g + "deg);left:" + r[0] + "px;top:" + r[1] + "px;background-color:" + t.colorLine + ";", + this.showLine && t.showLine || (u.style.display = "none") + }, + updateColor: function (A, e) { + Array.isArray(A) || (A = [A]); + for (var t = 0; A.length > t; t += 1) { + var i = A[t]; + if (!this.marks[i]) + return { + id: i, + data: "该标签不存在" + }; + Array.isArray(e) ? document.getElementById(i).style.cssText += ";background-color:rgb(" + e[0] + "," + e[1] + "," + e[2] + ")" : document.getElementById(i).style.cssText += ";background-color:" + e, + this.marks[i].color = e + } + }, + updateTitle: function (A, e) { + Array.isArray(A) || (A = [A]); + for (var t = 0; A.length > t; t += 1) { + var i = A[t]; + if (!this.marks[i]) + return { + id: i, + data: "该标签不存在" + }; + document.getElementById("labelTitle" + i).innerText = e, + this.marks[i].title = e + } + }, + updateDomElement: function (A, e) { + if (this.marks[A]) { + var t = document.getElementById(A), + i = t.querySelector(".labelTitle"), + o = i.nextElementSibling || i.nextSibling; + return o && t.removeChild(o), + e && t.appendChild(e), + this.marks[A].domElement = e, + !0 + } + return { + id: A, + data: "该标签不存在" + } + }, + remove: function (A) { + A = this.idsToArray(A); + for (var e = 0; A.length > e; e += 1) { + var t = A[e]; + if (!this.marks[t]) + return { + id: t, + data: "该标签不存在" + }; + this.viewer.domElement.removeChild(document.getElementById("label" + t)), + delete this.marks[t], + delete this.markState[t]; + var i = this.allOids.indexOf(t); + this.allOids.splice(i, 1) + } + }, + hide: function (A) { + A = this.idsToArray(A); + for (var e = 0; A.length > e; e += 1) { + var t = A[e]; + if (!this.marks[t]) + return { + id: t, + data: "该标签不存在" + }; + this.markState[t].userHide = !0, + this.markState[t].outOfBoundary || (document.getElementById("labelLine" + t).style.display = "none", + document.getElementById("labelStart" + t).style.display = "none", + document.getElementById(t).style.display = "none") + } + }, + show: function (A) { + if (A) { + A = this.idsToArray(A); + for (var e = 0; A.length > e; e += 1) { + if (!this.marks[o = A[e]]) + return { + id: o, + data: "该标签不存在" + }; + this.markState[o].userHide = !1, + this.markState[o].outOfBoundary || (this.showPoint && this.marks[o].showPoint && (document.getElementById("labelStart" + o).style.display = "block"), + this.showLine && this.marks[o].showLine && (document.getElementById("labelLine" + o).style.display = "block"), + document.getElementById(o).style.display = "block") + } + } else + for (var t = this.allOids.concat(), i = 0; t.length > i; i += 1) { + var o; + this.markState[o = t[i]].userHide = !1, + this.markState[o].outOfBoundary || (this.showPoint && this.marks[o].showPoint && (document.getElementById("labelStart" + o).style.display = "block"), + this.showLine && this.marks[o].showLine && (document.getElementById("labelLine" + o).style.display = "block"), + document.getElementById(o).style.display = "block") + } + }, + isolation: function (A) { + if (this.allOids.length > 0) { + A = this.idsToArray(A), + this.show(); + for (var e = this.allOids.concat(), t = 0; A.length > t; t += 1) { + var i = A[t]; + if (!this.marks[i]) + return { + data: "mark不存在" + }; + for (var o = 0; e.length > o; o += 1) + if (i === e[o]) { + e.splice(o, 1); + break + } + } + for (var n = 0; e.length > n; n += 1) + document.getElementById("labelLine" + e[n]).style.display = "none", + document.getElementById("labelStart" + e[n]).style.display = "none", + document.getElementById(e[n]).style.display = "none" + } + }, + addEventListener: function (A, e, t) { + document.getElementById(A).addEventListener(e, t) + }, + removeEventListener: function (A, e, t) { + document.getElementById(A).removeEventListener(e, t) + } + }); + var Vd = function (A) { + this.defaultSettings = { + id: "", + URL: "", + side: 2, + scale: 1, + width: 1, + height: 1, + opacity: 1, + transparent: !1, + alwaysVisible: !1, + useImageSize: !0, + faceToCamera: !1, + color: [1, 1, 1], + emissive: [0, 0, 0], + position: [0, 0, 0], + face: "z", + useFaceMatrix: !0, + matrix: [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] + }, + this.faceMatrix = { + x: [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1], + y: [1, 0, 0, 0, 0, 0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1], + z: [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] + }; + var e = A; + "function" == typeof A.getViewerImpl && (e = A.getViewerImpl()), + this.init(e), + this.enabled() + }; + Vd.prototype = uh.extend(!0, {}, Nd.prototype, { + constructor: Vd, + add: function (A, e) { + var t = this, + i = gc({}, this.defaultSettings, A), + o = this.hasTheSameId(i); + if (o) + return o; + var n = 1, + r = 1, + a = (new Aa).load(i.URL, (function (A) { + t.viewer.render() + }), (function () {}), (function (A) { + t.dispatchEvent({ + type: Tc.LOAD_TEXTURE_ERROR, + data: "加载材质出错" + }) + })); + !0 === i.alwaysVisible && (i.transparent = !0); + var s = new xr({ + color: new LA(i.color[0], i.color[1], i.color[2]), + emissive: new LA(i.emissive[0], i.emissive[1], i.emissive[2]), + map: a, + depthTest: !i.alwaysVisible, + side: i.side, + opacity: i.opacity, + transparent: i.transparent + }); + n = i.width ? i.width : s.map.image.width, + r = i.height ? i.height : s.map.image.height; + var l = new Ue(new et(1, 1, 1, 1), s), + c = new M; + if (i.matrix && (3 === i.matrix.length ? (c.elements[12] = i.matrix[0], + c.elements[13] = i.matrix[1], + c.elements[14] = i.matrix[2]) : c.fromArray(i.matrix)), + l.applyMatrix4(c), + i.faceToCamera) { + var h = new y, + d = new y, + p = new f; + l.onBeforeRender = function () { + t.viewer.camera.matrixWorld.decompose(h, p, d), + l.quaternion.copy(p), + l.updateMatrixWorld(!0) + } + } + return l.scale.set(i.scale * n, i.scale * r, 1), + l.updateMatrixWorld(!0), + "" !== i.id ? l.key = i.id : (l.key = l.uuid, + i.id = l.uuid), + t.addObjectToScene(i, l), + "function" == typeof e && e(l.key), + l.componentKey = i.componentKey && Array.isArray(i.componentKey) ? i.componentKey : i.componentKey ? [i.componentKey] : [], + l + }, + updateMark: function (A, e) { + var t = this, + i = this.findMark(A); + if (i) { + i.applyMatrix4((new M).getInverse(i.matrix)); + var o = gc({}, t.marks[A], e), + n = new M; + if (o.matrix && (3 === o.matrix.length ? (n.elements[12] = o.matrix[0], + n.elements[13] = o.matrix[1], + n.elements[14] = o.matrix[2]) : n.fromArray(o.matrix)), + i.applyMatrix4(n), + o.faceToCamera) { + var r = new y, + a = new y, + s = new f; + i.onBeforeRender = function () { + t.viewer.camera.matrixWorld.decompose(r, s, a), + i.quaternion.copy(s), + i.updateMatrixWorld(!0) + } + } else + delete i.onBeforeRender; + if (i.scale.set(o.scale * o.width, o.scale * o.height, 1), + i.updateMatrixWorld(!0), + i.componentKey = o.componentKey && Array.isArray(o.componentKey) ? o.componentKey : o.componentKey ? [o.componentKey] : [], + t.marks[A] = o, + e.URL) + (new Aa).load(o.URL, (function (A) { + !0 === o.alwaysVisible && (o.transparent = !0); + var e = new xr({ + color: new LA(o.color[0], o.color[1], o.color[2]), + emissive: new LA(o.emissive[0], o.emissive[1], o.emissive[2]), + map: A, + depthTest: !o.alwaysVisible, + side: o.side, + opacity: o.opacity, + transparent: o.transparent + }); + i.material = e + })); + else + !0 === o.alwaysVisible && (o.transparent = !0), + i.material.depthTest = !o.alwaysVisible, + i.material.transparent = o.transparent, + i.material.opacity = o.opacity, + i.material.side = o.side, + i.material.emissive = new LA(o.emissive[0], o.emissive[1], o.emissive[2]) + } + this.viewer.render() + } + }); + var Gd = function (A) { + this.defaultSettings = { + id: "", + url: "", + width: 1, + height: 1, + scale: 1, + alwaysVisible: !1, + position: [0, 0, 0], + componentId: "", + useImageSize: !0 + }; + var e = A; + "function" == typeof A.getViewerImpl && (e = A.getViewerImpl()), + this.init(e), + this.enabled() + }; + Gd.prototype = uh.extend(!0, {}, Nd.prototype, { + constructor: Gd, + add: function (A, e) { + var t = this; + !A.url && A.URL && (A.url = A.URL); + var i = Object.assign({}, this.defaultSettings, A), + o = this.hasTheSameId(i); + if (o) + return o; + var n = 1, + r = 1; + (new Aa).load(i.URL || i.url, (function (A) { + var o = new ro({ + map: A, + color: 16777215, + depthTest: !i.alwaysVisible, + transparent: i.alwaysVisible + }); + n = i.useImageSize && o.map && o.map.image && o.map.image.width ? o.map.image.width : i.width, + r = i.useImageSize && o.map && o.map.image && o.map.image.width ? o.map.image.height : i.height; + var a = new vo(o); + a.scale.set(i.scale * n, i.scale * r, 1), + i.position.isVector3 ? a.position.copy(i.position) : a.position.set(i.position[0], i.position[1], i.position[2]), + a.updateMatrixWorld(!0), + "" !== i.id ? a.key = i.id : (a.key = a.uuid, + i.id = a.uuid), + t.addObjectToScene(i, a), + "function" == typeof e && e(a.key) + }), (function () {}), (function (A) { + t.dispatchEvent({ + type: Tc.LOAD_TEXTURE_ERROR, + data: "加载材质出错" + }) + })) + }, + updateMark: function (A, e, t) { + var i = this, + o = this.findMark(A); + if (o) { + var n = Object.assign({}, i.marks[A], e), + r = 1, + a = 1; + (new Aa).load(n.URL || n.url, (function (e) { + var s = new ro({ + map: e, + color: 16777215, + depthTest: !n.alwaysVisible + }); + r = n.useImageSize && s.map && s.map.image && s.map.image.width ? s.map.image.width : n.width, + a = n.useImageSize && s.map && s.map.image && s.map.image.width ? s.map.image.height : n.height, + o.material = s, + o.scale.set(n.scale * r, n.scale * a, 1), + n.position.isVector3 ? o.position.copy(n.position) : o.position.set(n.position[0], n.position[1], n.position[2]), + o.updateMatrixWorld(), + i.viewer.render(), + i.marks[A] = n, + "function" == typeof t && t(A) + }), (function () {}), (function (A) { + i.dispatchEvent({ + type: Tc.LOAD_TEXTURE_ERROR, + data: "加载材质出错" + }) + })) + } + }, + resize: function (A, e, t) { + if (null == A) + return { + data: "未选中mark" + }; + if (!e || !t) + return { + data: "未指定尺寸" + }; + Array.isArray(A) || (A = [A]); + for (var i = null, o = 0; A.length > o; o += 1) + (i = this.findMark(A[o])) && (i.scale.set(e, t, 1), + i.updateMatrixWorld(), + this.viewer.render()) + } + }); + var Pd = { + front: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAMAAAD04JH5AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAA8UExURf/////UgCsAAABVqgArgAAAK4DU/wAAAKpVANT//1Wq////1IArAFUAAP//qqr//wAAVdSAK/+qVSuA1JRKhuAAAAEWSURBVHja7ZnbEoIgEEAtK4iu0P//a7dRcYVJZ1jL5pxHd8Y9yAK1VBUAAAAAAAAAAMBUgtnsxz4tzvlknrhcQFcimIbrRcZ8G0vYFcO2SWoRWa2zIYUJeLDd9QKHY5tfdxJ8Jk/3XJiVJhqpS34ZjQKI3j6RYakigAACsFxsfqLl5t+ci2UPpU8CtjuJEUDgzwXc8McRAgiwDBFAgH0AAVYBAgiwD8z75/SXBJrOzdcEQqY/YM08Am3rSgh4oy0Q9au7VpgfLs+y1wbxFxDJXiON7isabmoCIZEo0Ut0agL90b6bkXJeil+cxAL9ZE7UntLFRW8V2ESPLqhWgBDwiV6wqELFm7sRHe26AgAAAAAAAABYFne2vz8kSdzJgQAAAABJRU5ErkJggg==", + back: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAMAAAD04JH5AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAA/UExURf///1Wq/6pVAAAAVf//qtSAKwBVqgAAACuA1FUAAKr//wAAK4DU/wArgNT///+qVf/UgIArACsAAP//1CtVqjYJRWAAAAEgSURBVHja7ZnpCsIwEAZrNaae8Xr/ZxWRpFGEJrDppzjzr1LouFfJtusAAAAAAAAAAAAAoIb9znsfdM8/HvwLm9XMAoOfIMyQgHLM4/OegNkFBq8VqEyAuUBtAlr1SIVH8ybdLsUCU6GZfUxFFggg0ERgqueatyECCCAgF2ASIvAVAiUHA/dFApfTvwqkI1RQCziRQJracoFeJJDOSOdrI4FP/2ydhX3dekMxJTC0WhlVCziRQJxE5kVQKpDawLoISgXGVUHQCKQL6xwUC6QiMH4fFQuMGz2nmIR5EdiWYbFAdqfTCIw5MA1BuUC2s+slAvmtQSKQcmDaiBUCsS1tJ1GNwDMEvWgUxx9Ur+MYAuH3vQe3UwcAAAAAAADwE9wBUPU3ZdIk2/EAAAAASUVORK5CYII=", + left: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAMAAAD04JH5AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAA8UExURf//////1IArANT//ysAAKr//wAAVQAAAP/UgABVqgArgNSAK1UAAP//qoDU/wAAK6pVAF6q/yuA1P+qVQ6MhkQAAAEuSURBVHja7ZjJEoIwEAXjCogLwf//Vy1B4sFEQzF5pdV95UDXzCNMxjkAAAAAAAAAAAD4FzaH6k4revv5Ug2sVxqB3X4UOJ5EJWhGgW0tEuhHgeqqDkHnxCFQpbBECJ6vyGQ5IwQQQEAu8PVhKPshTSVSTSW+Eg8Fw1CmLEGvLsEUQ1kJGnUJprlIXwKjsyDk/COdWsBmPM4RMMlhjoBJE7IELJqQJ2DQhDwBgyZkCthfFN9fyPpy01DkRhiGN+ubYkQg/BWtL8uxO7EPMWglAi9NsI1BVODlczEdDeJriTAZmAYxsRfxRUqQWsz0JWKY3Aw1BVKYFBiDaHoWpXdjw9PWyQQen4LoHAgGC3agmbEX8Et2YI6A87VYQLgpRQAB2a4MAAAAAAAAAODnuAFrzi75vcAeswAAAABJRU5ErkJggg==", + right: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAMAAAD04JH5AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAA/UExURQAAAP//qlUAAAAAVapVAABVqtSAK////wArgNT//6r//4ArAP//1P+qVSuA1FWq/4DU///UgCsAAKpVK1VVAIkZng4AAAE4SURBVHja7dbZEoIwDIXhqEBdwe39n9VlpOiIo6nFo+Pfe8k3zTGpBfExAAAAAAAAAAAAAAAAAAAAAAAAAABSf7gys1oJKOxyGg1gNL7Un8w1gFV7AaWoBbEDaw0gdmA60wCq9gJqzb9gucgUwVcA8bad50UbAAAAfgDwcA29PYXTAN2FNEECKHLt4URAbMDbezgN0DWgDgpA3IKZEugGxGdApgR6AV0AyqAAbLaW7R2SAnCMREdCLCGAGoCn/iCAwrQAV/0BAL76+QHO+rkBrvwNAOipXz4Z1VkBffPno4Dq6pm3VwCuN0AhbcFxA0kAbdXTRzWAqvumBnAOQXkzkD4LOIWgDkLAcRA1QQkIu3XQAu6XEgDJoxQAAABfBWAS/i9ggAMAAAAAAAAAAAAAAAAAAAAAAHAAYMKWUHJ5EqMAAAAASUVORK5CYII=", + top: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACABAMAAAAxEHz4AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAAYUExURf///wAAANSAKwAAVar///+qVSuA1ABVqmCk4p4AAABFSURBVGje7dOxDQAQFEBBkRjg72IgI9i/olSpJCLuBnjdSwkAgLfkmKqAgIDAqcCiC/wb8IKAgIDAzUCJjSbwSwAA4H0D+R0wJ+LbGcwAAAAASUVORK5CYII=", + bottom: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAMAAAD04JH5AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAA5UExURf///6pVAAAAVar/////1FWq//+qVQAAAABVqoArADwAAP/UgNT/////qgArgIDU/wAAKyuA1NSAKz7z6MUAAADNSURBVHja7dZZEoIwEEVRWg2JOLP/xTqmtBF/LOs1hfdsgGsnJmkaAAAAAAAAAMDkpfyllgACCJhLwGelfmq9ijmiCCDgnwNOFhqwXORsgQH3o9HCAupnLSbgOv5aEBEwfjPpAkoODXgZ/+26VS9BGv5qcYAff68+B/z4u436JPTj73bqu8CP39SX0XD3y2/D8r782oDtfvzM0e2BZ4EFPUjqLmjDXkSHo19+/ZPsUvD490e9CZPxKiaAAAIIIIAAAgiYXgAAAAAAAPiJM0UCIODiZq/rAAAAAElFTkSuQmCC", + add: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAcQAAAG/CAMAAADxZFcvAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAABRUExURf////3Xw/vKtf3i1oqPlGms5f/6+EdQWf/IlOPk5faQa0dTlMbIy4pQWcb8/2lweP//y//27P/o5PixlZmPo+Px/2msy4pweOPIlIqs5fSEXoY3FXkAAAXBSURBVHja7dxdcxM3GIDRaNUK2LZQSYW2+f8/tLuZaYbgOLEdb7yvOM+V4YIJOtGXveO7O0nhKr33SZu2jPBmfq2nXFpKKWvTlhG+Kzn1dHXAqbbUarEWvdOK11rOdboe5DIFF0B+N5BMy4SsV/iXas+pGdBbtexfPb/1l2Fq2Ry87XzMecpvmoXVJNzDdMwXz8ZlIUW4m1X1sr2xTw4zezrkXDAZ62wv3Fc1nzsZS7eS7m9NPWsylp6qMdvhZJzOmFrdUrrTnfHkyVVn03DH55vKcICNsTL8GRQZBlBsrhbhe+0DiZKNUXTFMhmhCL1066/d+ERXLLM7fpTDTbUhDrAtZovpqAtqubeYBur5Zy5qMjKRevbBm9m4BFtQDw83zakm/tnGRIw/FU3EgLtiNRHDV354AMPRdID1tLsjRrwrpids3qwJ2dwca8Y62piIUY82EMc62jibxkecPOEWtO+Op/dGI+olo7glDnA+LYevFHZT9KDiAIie+h5gOVX846lzzQCIHnMLfMf4/4UHvwcIIkRBFERBhCiIgiiIEAVREAURoiAKoiBCFERBFESIgiiIgghREAVRECEKoiAKIkRBFERBhCiIgiiIEAVREAVRECEKoiBqLMS29vvpfV6DCBHizRE/QTQTIUKEeNjHtQ+n9+saRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQ4yHWpb/Wftmmv9fOQPxtbaOf5eH/+XUJIkSIryJ+2Q7xG0QzESLEzfpz6Y+1D+P38AvyeQkiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECBEiRIgQIUKECHEoxLW29mmb/lk7Y6C/rW30s3x9568EgwgRIkSIECHeAHHLdvVF7uXu3YcU4gBBhAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChLgLxC+n9+8aRIgQIUKEOCDizx5EiIIoiIIIURAFURAhCqIgCiJEQRREQYQoiIIoiBAFURAFEaIgCqIgQhREQRREiIIoiIIIURAFURAhCqIgCqIgQhREQRREiIIoiIIIURAFURAhCqIgCiJEQRREHas92kEMW2I3EmI2GFGbHhGTwYhar4+vLKxhD6XV8RSibl79Tq4ZjujnmuW14Yh+rlnWU8MxAKJNMWTtiZubYviJaD0dAvHpnxSj/MMu+NGQRJ+ITy8cCnLTP1g/HW3CT8TlbwxKsMohYjIVgzU9cxj1QX/0HfFB1sDE3hGPTU/t9o545D7hbBPoVHNk9yuTBTXOqeboR8DJh8NBSi+8T+qJqRi1l64S2bYY+GT6uNTaFiNsiK/c6RPF/Ru+akRx94YnnFwoxjekOIIhxREM16uk0dplpZ/xWdPkwak9lttZLK36jHiH18Oz1S2pe1tKz39TtORuMu5qGtZL3tiuebYz7qTWL356pjYHnD1U+5seCy559tUatz6TzlN540eEJc2eDr/hcWaac7nC+Jfld8HzjDcSnK73dV/lLt33ZH98z31w6nPa4gvbFsk+JW3c1Pu9W7oUrv8AKiG7XScCG+oAAAAASUVORK5CYII=", + plus: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAcQAAAG/BAMAAAA0lLouAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAwUExURf///0dQWYqPlP/6+P3Xw/3i1vvKtePk5faQa0ePy/7x6vm2nfelhopQWYqs5dGJeGZxbd4AAAQxSURBVHja7dhBS9t3GAfwPyQGSbzsuOtewMhhytCLoJVhLwF1K7qDYFdGt8NuuxaEHtZXsNsf1G1UD4O2MNoeCp07dLvsjew1TBPTqEmMgwn9f/t5DklIcvDj8/ye5/ekKERuLLy4V7F4sf1ffM2na+vLGxWL5c7s7cXrAv+YX92rYuXNb2x+ey3k0a3VdlWPV219/fnkbx2ul1XuIc3lZ5O+MnfQrnafrG1MMB4+rv4wuNp4tJkw8PavOI+tr9oJxNpWZ+xRPY4QnkC2xrXMhbIIieaY47iwmnP//Gl0qT5r5xBrI9P1S1kExfyIrlr7IWtVOhzO2KdlFrE5lMbmbtrGO5TGhTKNWL8sms374eLWpWaznUdsXZyNR0VgHF9I4m4i8cJiWOskEuvnVYdFEV6pmXV6oVKbi5nExqBSp4vQGFziDlKJg+n/IJXY6l/ipjqpxEaZfhSL2trZi/1Y4tt+8zqXuN/uPb/KJU73DmOzk0s86zczucL+fpFMLN70do5kYq+l3k8mLmVf305jL30snrTU7mB8kkyc6U6N7WRib9co8ws1OuqnxFY7njgdTWwW8cQCERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERHxfSf+/P2NxnfvAPGLfOLfH9xofPgjIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIuI7RPzoZuPjfxAR/w9iNQIRERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERHxfSc2u7poYj2/RnvETjKx1SUu5hNfRzfT8vRxN5k4k0/c6z5OJRN3uo+NZOKb3onMJ84EXwCmzmzBg7FV9p4fpM+Mfr1Gxlo/m+ndpn+Pi9wWn/dfxfabfrcpilepxIW3xOVU4v347X9wFItiO3kfvpzQqPj8HHEmUlhbOp/RyEodjIzTWE0k3i7HHcyYfrp0ca/6Nb1Oi+JeHvHupcqsxzWcxpBoJY34zVB7SUtj48nweyvpSUxL46gknkzKpLvb05GDvhH0M9VmOfr9x4sxZTpWspVSpn+OvY/O/h5yr9kb/9lBxHH8cumqTxOMRztXfz57XPkc7kxaDD95WOnVsfb12uS/v31nqbrCuYe1a/0j6o8q+jvH3G+L1y/Bz/66u1yxWHn5qBCx8S/INvmwxH9NtQAAAABJRU5ErkJggg==", + E: "data:image/png;base64,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", + Q: "data:image/png;base64,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", + downArrow: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAh9JREFUSA21lb0uRUEUhffxEzo3cXkJDyAhUdCT0CkkCk+l0yv0KBQSUXsJf6EgRHHsb86ssc09VyjsZO6eWbPW2rPnnJzbtG07aV20nhofyhkuKeJxLoIw5YRP5d0Iqghbf5nDJb5pJhyQOVlDZAnIRB/+o14d1GJEimgAphOSNRdOJoqeAjVJhokZfuAp+jTsCS/ceEV9YhUja8ATPmLoe8ISTx2wiBuax5wE/IRQISBx47xRBxAVEPtCZjWXdY0VvR6yTJutCzvx3cHijO0cLtt9YX6dUFwVtIMrW7h9t2PnPp2s2WbWJB4dKHSSQdva6u2bne1f24I2PcdTFvNdzJ2LxjkDHxgzEj8WSBtzU7btkxvfXXp8tVNO52QFnBJ7lzb/grlz0dC1byZjz3DbJn8qABNARvj8YecSzk3b+tGKPSDwQYxwFmdtw6/0jj0f4lnsQEUMMwSciiIU806GWcydD+sDBHOnpSIUauiAIiwUpbp3MmI0M2lNuvN8LaG7ET1ALCDjWCydNhoioiu6G3Mt3/S9z6DzwKqL9BrmhwmCeT45rzGGHK7ODnUd/Or/wF/H4Uv3rhtvWn7oyST/1EUSXHcgQbyu387j1RQNDzhWZq61ikVh31x8abVOen0qWEQxJIUEwuAJ0xxur15f0z6xCihHg9p4rD5eUTSSQCcla8ATrkLjirfqAJHIcS5MBhjHUCEwceP8//8PPgE7CQFG2pHOlwAAAABJRU5ErkJggg==", + upArrow: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAhVJREFUSA2VlTFuFEEQRXswFmQODL4EB0AixEdwTsapyMjhBnYGEgfwJYwdODPC0lCvd15tbc/IQEm9Xf37/1/VPbO70zzPR20Xc0xTDOcFzqniNZcg5tzx58tuBS3C1v/kcIkDzbMANGd2SFbATGzhT+o9wShGZFQDMDtkNhdnJlJPgZGkYWeWD3jGloY98eTWK9oSW4zZAU98ZRh7Yp3nCVjUDfM6dwEfJSwEJLfmkyeAaEDcCs1GLusRS70PWdOxiyR+/NFe3/xqXwDOXrSLT2/bz0irjq2VfoovGqdYbQSWHXfzh3YZwJvF5frsZTuPIreVx16ERbu+Ftht741Zz9U8lNcdjELkJ8ft/ed3vYimy/a+yNh9do35h+/t1c3SuYaYknOa+9/tigbg4hxxoAeggOEm6wkhBhhhyJVEt3d0TG4RGqCR0Bzo8WD4FvVFAASdn9bOx/vmAdci5SRdj4djPEG/87Hz5Y1BbEw84FpkOclpEGw2T0CSx+NV9Fq478W8cuAS8+okj+3rbmt9gjQI9f00tW90x52HgL0ayQ1wf5LQoA2MBuD0wWvKH45gpD1YE5r9Sw7XSH19yICOSv5bjsZGVnp/KqhcjSAa1QBMM2ZzcWYi9f6aCihgHqNi8uBs5cmtV6RhFdTuyW1EXG4aDgVnT4C55JqLaWABOISFyOXWPL/JVagZxBqajVzWI5a6P0EACOseq1UCAAAAAElFTkSuQmCC", + mouseLeft: "data:image/jpeg;base64,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", + sxzy: "data:image/png;base64,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", + wasd: "data:image/png;base64,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", + fire: "data:image/png;base64,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", + in: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACABAMAAAAxEHz4AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAtUExURUxpcRv7KSD/MBr6KRv6Kxn6KBn6KRr6KRr6KBj3KBr7KRj3KBr6KRr6Khr6KbH1JwQAAAAOdFJOUwCPEO8wd7/PWCCvQN+ffgtVrQAABJxJREFUaN6lWd1LFFEUHwctvwIrCnyRkRIhLCJSKmOwTAr6QNPIyGSp7MOHfdiKPhAxTBBEWYiCoAeJfFQMEgtKAh96kwi0N2Fbd01d79/Q7r2zO3dm7j33zMx50rlzfvs75545555zNU0q+oWOlfsDP/unl79qAUSfe0QKkpma9as+wqlTmWrxo183SDySqcbrfzKJSB5g6V8nEknEMfoVewkJg6AD+oRsKhH0YQJKQgUwz72cfLGve+zL6LUVHuEErF9rv9nUFbejImo/fw7plxb2L91lOFbmbIh2wAGr+ZeeeOKurKeALQd4mzf+o2j1ex7huDQCliz9aoWDZEZ0Wvo3ZL9QYgGk4B94KLfxsPVKROjBGbb4DNqmS4AfD7G1RgMMlF72VkywxLYwOQRHWjFz9Lp3pUjpAAfRiIRbylB+rr1iL5SgDKDRwihUuR4PYz41Jlfoq/9cvjGxBPLvEufXUg8HuVNe05ePOZ7V4AlkKXjdWIr3QE4WPJ8Us2AIC8A2Ys1tQUJDy4QrGpkFH/AA5S7G1IKMgQfQl5z7QC1o9lN9aTBtF/KlqUi2stzUwv/nx4Ks0Po/af1zQBDbqFDY4D/QKn8A5ZwT9JwLknF/ADp1Qtx2gShT6+2qvPKL/tmQ+/OkKHsBRUw7YjthQrKJ2TwfkQMU2bwPnsuKIUyfaYUTMqCbZmQliCsDcVX+TiucAG3+jLwKUqnMLR9VJl85hVJ3UhFnPjkFHSj0OAo5Gze1EBRy8ZPUQlCg2zAbgkKlOg3BFHbxOSUIhVJVIKgolOXW/mrBKeiqSFJSMBGpFKQQVYWiikKNKhRVFHopQMduWKJyChN0wSQoiUgA1rEAaQlABgsgorBAP0csQFq8Q3iAdSMkQExsAtoHAgIUAL0LMek24gJJRMAKJNzJOiYPZYW0ygnQ6rgdggAtDIkQBLQldUIBCej8QS0IgWI1AEiAHc5+BCfAjoqR4ARYaasKToDl26HgBGggJo3gBGgcpUMQoEfsVAgCJaomIQoT0HZ421fN2w3LCbBNgHZRHwQJsPM+PSK9y4mYAkCA+nAdPu4PQgS4NkXacNQDBFintqFoeX6rWp5JOzH4brpM7phZY/dPaKEdzyZ/Zl3zB0Abzy3+yJnxBxDlj6k6Cdh8zzr6J182tDrafxYJfmygYc59SRVEmR9Fk7t2V4eWwgPQKEpzcdpAlN2Hd/y8BQ6GEPWiytNlJluQozDTbUHeBuQw7r1gGMdswFGwxqpDovlaM94DCfHQGjMSNYUjUWsqjIgFNkDfNoRdoKoPtKfjMVkhybTgBtOCbLmTIIzQO+X3JLp1PfYYApgnQMW0huNkj1y/1jpZ34aG3kDBq7P0EwY49JYi5PXl2e98HkF4yXLGVN9VzeQR+jwk7TvAdFyVbGnN6HKutN0pXKBdhbbpst2jnLpp/3rbH/v5XTjSvvGXpNPdY58vjo7sX+QeNhqYfAm0j8oibN+3CfURKad4NZx+Vnpk+k3IrKuNi/X78IeQN4J2NNnlp/qWjbsgkn1n/R0gNP0ld32e8a1OZfTWvYHF00/7l18BwfMfTNVTTzWqIHcAAAAASUVORK5CYII=", + info: "data:image/png;base64,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", + wall: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAMAAAD04JH5AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAABOUExURUxpcf2oAP+oAP2oAP6mAP6oAP+pAP+nAP+tAP2oAP2oAP+vAP+oAP2nAP+nAP2nAP6oAP+pAP+nAP6oAP+qAP+oAP+yAP+uAP+rAP+wAGKXuTAAAAAVdFJOUwCPScm8hTVXCd2aDx/4e5RqFWPuQojXR7cAAAHpSURBVHja7ZrZboMwEEUBsxoaJ0CM/f8/2qosyZO5do2sVPc8R5MTFuvOTLKMENI++kuABebuEsoWFSj0cgFa4AL2eQELBT5RwMQhXOArDqECi6ijcDehAmWcg7VYb0LIFWijCDQUoAAFKEABClAgVMBGygPzKmBF5n0FitlF0WAovdJhAWpAU7HpVI5RrXQTwleOpmLvOyQ0kKAXrdArsJS91/e3AiprcwrgAp7HhIcANB/Qh0AL0Qt3WfMSACckQq6oCkO4y00vgfaB0Oe/v8hqNWCclJP2EACp9Pos3OKc2CpYoIojIClAAQpQgAIUoIC3wG3N+TZSHsj1ITDcEcZyG4aXI8ZJvXI5BBptAfTeOqI94uQua95juUHys3drxs6IrZm3gDl5C9CG5GjNoJdLHgJmKp1IsCWT68dFVyKIOz4lw5rS9udYCVtexxrTcWtGAQpQgAIUoEBygSL11qyw27/pMk8BM0nlorphyH0e7i63IZu3UKqdiBlaw831Fk6FhpB4LGdr9p8FUrfn2NZs/7ffXGBM7qd/eQkMFfSK7yOafXv2N5QwiYdUlU48psspQAEKUIACFKBAaoHwPJA6kDyxKfgpnQkVMDYKb1szT4G4UOCzBMwF6OQCEhaox+YCxjojJDXf4uSKYGN3ygkAAAAASUVORK5CYII=", + window: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACABAMAAAAxEHz4AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAVUExURUxpcSyV3S2U3SyV3C2U3C2U3S+Z4+9tYbwAAAAGdFJOUwDEcEWk8vaFTOAAAAHnSURBVGje7ZnLVsIwEIaD4QG42K4LR7oOVFyjgmsvNPtKM+//COZCrBsmYwMePeZfkCwyH38n0/Z0wlhSkhav4sSWECXFsmiA8nPpR0mI86NxsN9aSbi24z2ocUgZNC4oN4CRy+YTCDteQRPM/ADe3aT8AsgT4KyAYP0ucYCqg8IBhErEAQRJPAfzkBapkP4MgM/N76roDVjDRlNk2xfAJTwbiuoLWIN2oCl9HejQRhjKqCdAh04tpecuuNATBigAG3rKAAWQYwZoAMQABbDADJCSWCAGyKV8ygC5lJuouxExQC7lqOcBZoBeyhEA1AC5lOMAIxRwCF5CE/lU5oLFObj4i+WQAPCWHCQH53CQAAmQAAmQAAnwg4BtSDscQOkjYQClCISLOgAVm4NUSAnwSwCEpmzkzaRwgIy9GyH2eRDOweycu7DrAMUR0H7r49vvCPc9jwEBMPRrntTn+qFPzJ2nYwd0oMRxNIHWegmy6XqxIUlnd6DzpQNe/eZNXfumCANK03BlPDcfXyXARKxypetHPVQ3krAJ9oL3gu9M41fPJdS6+Fr931B3NYIr12v14tYdslltuCthJRjNgg2yG28DdSLc2eUjI2nmk2b671ldT8zkNoMXYrxePB53a6ujbV4J9v/0Aa21qAtzThtwAAAAAElFTkSuQmCC", + kitchen: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACABAMAAAAxEHz4AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAqUExURUxpcfTqKvXrKu/vMPXqKfTqKfTqKvTqK/LqKvPnKO/nKPTrK/TqKvTqKgvPVicAAAANdFJOUwCfrxB3x+8wWUAgj9+fNmOEAAADXElEQVRo3u1YzWsTQRRP3ZTdND1YqN4K2oN6ERbBaNFCSls/GxA/EDQLRStWaKBQ9KTgoYKggRx6VMhFEEQQ/ECQgBcPCgumbbb24/0vzm6aNDM7M29eQ724v1NmZt8v8/He772ZVCpBggT/AKcWvw1eqOza3JosQYjb1d3ZjxyBbTTGd2N/pgQ7OEq3z3jQiQ/k9deahvdu+M0fT4kEL0OjrYsL7OdiNJfGPMk+Hf37QrNhT4WtdRJBgVnMuO3mM+oisuKcQ8JVwg4OAQTjYg/kjWyXPhfnfrCvb/L9DvOKreLc1UHEsU8fbDmf6L6PWh5xTGf/ru19t8Qhuz1Urxp471b8o/YUYFN5+Dve/ys+ujMF1XlEO33n/IL19sVhVza/4U/Px4oRwxUpwRs2ct3FjmnJk21xNEU/dnZS2CHDfckA26SfRm7msH8K4qFlefKJKRz9e6z3BMBHQqg1Yp01QrBk2BT2x/sIqvUaYE3o6oWGS9IbcQ1leEARnOMxffHMor2FUfEcHFimauYfrqNHaKO640Od6+iHuzTZr0HAtZ/AIRoB24QK71vEzNMv+I0XuDSCrHAMfoOY+hyA6c62WucU6ANY4ZqrRAILYKNTZYhuwFDism2GTuBzJg55CQKBTSfgCwaLGEvRKWx0RWDzx8hWRPTEtJCeakAsaPcJslqOqSyCnKBpo9yWGKAMUOWjs04j8ARZdgRCg2DkPccq0TahF0QNrNEq0UKs6MvJMrY6OZZAlDAHKLqck9RJHpirGqsl4JrY+V7Sp8JjVqJUZDnfUNozPsgEqACGNY71RV54h5WPibBZr1TFangn2ESDMjPJPgvyqsoHveA1L3Oz8sGHBtezIe0FLFyEPk33hV8EyousFTKsYAVecEnzwRROoL9Is5D4jRCspBIClGAaIdjYWwJ7YiKP5FRiBkoI9oRg7X8gGLk8IIO7rYkoAfeK14GqIYHwikcnOAfdEWRKXRKcDF/xhmVoEayj1dOMq81MegJW7mmLLZTAQV79UII0oroWRtCjeqUyJch2S5BGZB0NJgcptBxMkSzQH2MOWWJUA83qIw15bjrLXHl5QIED4TOci79yaYHWogWEAH0ws32t/Qx+Qe3R2RuV487YsApf51MJEiTYI/wFfnAD3ltxHQAAAAAASUVORK5CYII=", + livingRoom: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIEAAACABAMAAADe0hfGAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAnUExURUxpcRQgeBMiehQiexIgeRAggBIieRIiehMjehMiehMjeRMheRMieiZedJ0AAAAMdFJOUwBA748mEHTYYKlQvyvHdt4AAAL1SURBVGje7ZjNaxNBGMY32k3SrYcEQaH0ICJGZQ+lUiu0Bz+IQchBUCJqDoIUkeZQelACe8jNiwdtsRLMwYs3D6JUQbxkYxNj5o9yPnZ2Zmc3OzMbEIrzXHaf3Znfzryzw7wzlmVkZPTvdO+O4K/p1b+1A0C7w3zjS9RLddIFSMvU3xS8VHdJBTAKWp4PvP8hpdKp7y+g3uB7uwcCDZP9S1S2vZn4VdzO0yAU9jXm3yJ/O2hRJC70K6MSo9FSom9Q/4cD5FmZvXf4Urmy5QYeXyv7zzzsu2sh0OcGuAAETeDLouBznljqMSM0hVc+fveAeRy1eZHwmhGWUAi63TDml8jjDeovCP5i9z3qyxlG+ERilOfajJRzo37OY//JfIwwYBGdlMII4yqTzSTviQQyNM66V9nnQuxsxf23Ku1SlPBLd/IagiEYgiEcKQKo7JXUqz9c33FjBJ38IMgnGIGuZ75ilhLmFzRTslfoWjRQAsx5wtrGrY9gW4Vwg5XvCMshXI5UmsDlE32WPPjtNXFBn6ZHuPzXXZZCoEaNPsIVDXVP4bdoobbCla8Rdhuu+f4qujkOn4ylANulg1YLMiH0ZMjo0tQVdfocufVI4NCTA/JkQSUQBVaoTr5YYCmVHc0qklVnXS0S2Amu8z2FULZYGmiTXKoehgG/7SsQwq94eDCWuNQSzrDfMkKP6ymZ4a84ZpNrTwrhM9eeQ33Cz/+DIJsYticjyCYGmgQSwqCcpsVeOuEYUNLydMKCGqEzneAoAdjuKE5AQyXX0Eoh3NcKQxLBeirvww8rlWDlyhJVLQlBS4ZgCIZgCIZwhAj9rIQNShhnBKB8hhDAajYAOo49DHaK/tksCnaMTTCTthNOWPUEdwe5mQB409qahYD3rEU3OyA4f3WewCRxfFlT8F8YXK3Ocv7QE08PhjMTfE2AEzttBufLOlpciRKamf9HzYx8emoaP9NXUyk60fUVOXOpZSEcRAZnVx/wXBjf62VNVS0jowT9BdaXVla6cjkQAAAAAElFTkSuQmCC", + skyBoxLeft: "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAFA3PEY8MlBGQUZaVVBfeMiCeG5uePWvuZHI////////////////////////////////////////////////////2wBDAVVaWnhpeOuCguv/////////////////////////////////////////////////////////////////////////wAARCAgACAADAREAAhEBAxEB/8QAGAABAQEBAQAAAAAAAAAAAAAAAAECBAP/xAAVEAEBAAAAAAAAAAAAAAAAAAAAAf/EABcBAQEBAQAAAAAAAAAAAAAAAAABAgP/xAAUEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwDDbIAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAACgAAAAAIAAAAKAAAAAAAAACgAAAAAAAAAAAACiACAgICAgIACAAAAAAAAAICgAAAAAAAAAAAgAoAAAAAAAICgAooCgoAAIACAAAAIAAoAAACgAAAAAAAAAIAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAy6sAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAKAAAAAAgAAAAoAAAAAAAAAKAAAAAAAAAAAAAKIAICAgICAgAIAAAAAAAAAgKAAAAAAAAAACACgAAAKCAAAAAACigKCgAAgAIAAAAgCgAAAKAAAAAAAAAAgAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAgAAAAAAAAMurAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAACgAAAAAIAAAAKAAAAAAAAACgAAAAAAAAAAACgCACAgICAgIACAAAAAAAAAICgAAAAAAAAAAgAoAAAAAAAAAAAKKAoKACAAAgAACAAKAAAAoAAAAAAAAACAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAACAAAAAAAAy6sAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAKAAAAAAgAAAAoAAAAAAAAAKAAAAAAAAAAAAKAIAICAgICAgAIAAAAAAAAgAKAAAAAAAAAACACgAAAAAAAAAAAoqgAoAIAACAAAIAAoAAACgAAAAAAAAIAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAIAAAAAAADLqwAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAoAAAAACAAAACgAAAAAAAAAoAAAAAAAAAAAAoAgAgICAgICAAgAAAAAAACAAoAAAAAAAAAAIAKAAAAAAAAAAACiqACgAgAIAAAAgACgAAKAAAAAAAAAAgAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAIAAAACgAgAAAAAAAAKAAAAAAAAAAAAACAAAAAoAMOrAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACgAAAAAIAAAAKAAAAAAAAACgAAAAAAAAAAACgCCAAgICAgIAACAAAAAAAIACgAAAAAAAAAAgAoAAAAAAAAAAKAKoAKCAAAgAACAAKAAAAoAAAAAAAACAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAADDqwAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAoAAAAACAAAACgAAAAAAAAAoAAAAAAAAAAAAoAggAICAgICAAAgAAAAAAACAoAAAAAAAAAAIKAAAAAAAAAAACigKAAAAACAAAIAAoAACgAAAAAAAAAIAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAMOrAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACgAAAAAIAAAAKAAAAAAAAACgAAAAAAAAAAACgCCAAgICAgIAACAAAAAAAAAAAAAAAAAAAAIKAAAAAAAAAAACiqAAAAACAAAAIAAoAACgAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAMOrAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACgAAAAAIAAAAKAAAAAAAAACgAAAAAAAAAAACgCCAAgICAgIAAAACAAAAAAAAAAAAAAAAAAIKAAAAAAAAAACgCqAAAAACAAAAIAAoACgAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAMurACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAoAAAAACAAAACgAAAAAAAAAoAAAAAAAAAAAAoAggAICAgICAAAAAAAgAAAAAAAAAAAAAACACgAAAAAAAAAAoAqgAAAAAgAACAAAKAAoAAAAAAACAoIAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAMurAACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAoAAAAAACAAACgAAAAAAAAAoAAAAAAAAAAKCCgCCAAgICAgIAAAAAAACAAAAAAAAAAAAAAIAKAAAAAAAAACgAooCgAgAIAAAAgACgAAKAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAy6sAAAIAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACgAAAAAAAIAAKAAAAAAAAACgAAAAAAAAAoAIKAIIACAgICAgAAAAAAAIAAAAAAAAAAAAAgAAoAAAAAAAAAKACiqAACAAgAAACAAKAAoAAAAAAAACAAAAAAAAAAAAAAAAAAAACAAAoAAKAAAAAAAAACAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAICOrAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAKAAAAAAAAgAAoAAAAAAAAAKAAAAAAAACgAAgoAggAICAgIACAAAAAAAAgAAAAAAAAAAAACACgAAAAAAAAoAKAKoAAIACAAAAIAAoACgAAAAAAAAIAAAAAAAAAAAAAAAAAAAAIAAACgAoAAAAAAAAAAIAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAy6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAICgAAAAAAAAAAAAACgAAAAAAAIAKAAAAAAAAACgAAAAAAAAoAAIKAIIACAgICAAgAAAAAAAIAAAAAAAAAAAAgAoAAAAAAAAAKACgooAACAAgAACAAAKAoAAAAAAAACAAAAAAAAAAAAAAAAAAAACAAAAoAAKAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAMurAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAACAAoAAAAAAAAAAAAAAoAAAAAAACACgAAAAAAAAAoAAAAAAAAKAAAKgCCAAgICAgAIAAAAAAACAAAAAAAAAAAAIAKAAAAAAAACgAoKAKAAAgAIAAAgACgAKAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAgAAKAACgAAAAAAAAAAAAgAAAAAKAAACAoAAAAAAAAAAAAAAAAAAAAAAAMurAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAACAoIACgAAAAAAAAAAAACgAAAAAAAIAKAAAAAAAAACgAAAAAAAAoAAAqAIIACAgICAAgAAAAAAIAAAAAAAAAAAAAgAoAAAAAAAAKACgoqgAgAIACAAAIAAoACgAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAMOrAACgAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAgAAKAAAAAAAAAAAAAKAAAAAAAAAgoAAAAAAAAAKAAAAAAAACgAACoAgAgICAgIACAAAAAAAgAAAAAAAAAAAACACgAAAAAAAAoKCgCqAACAgAIAAAgACgKAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAw6sAAAKAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAACAAAoAAAAAAAAAAAAAoAAAAAAAACCgAAAAAAAAAoAAAAAAAAKAAAKgCACAgICAgAIAAAAAACAAAAAAAAAoAIAAgoAAAAAAAAKACgoKKAAAgIACAAIAAoACgAAAAAAAIAAAAAAAAAAAAAAKACAAAAAAAAAAAoAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAw6sAAAAAKAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAACAAAAAoAAAAAAAAAAAoAAAAAAAAACCgAAAAAAAAAoAAAAAAAAKAAAKgACCAgICAAgAIAAAAAACAAAAAAAAoAAIAgoAAAAAAAAKCgAoqgAAAgIACAAIAAoACgAAAAAAAIAAAAAAAAAAAAAKAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAw6sAAAAAAKAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAACAAAAoAAAAAAAAAAAAoAAAAAAAAAAKgAAAAAAAAAoAAAAAAAAKAAAKgACCAgICAAgAIAAAAAACAAAAAAAAoAAAIgoAAAAAAAAKCgoAqgAAgAIACAAIAAoCgAAAAAAAAIAAAAAAAAAAAAKAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAIAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAw6sAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAACAAAAoAAAAAAAAAAAoAAAAAAAAAAKgAAAAAAAAAoAAAAAAAAKAAAKAgCCAAgICAgAIAAAAAAACAAAAAAoAAAACAAAAAAAACgAoKCigAAICAAgACAAAKAoAAAAAAKAggAAAAAAAAAAAAKAACAAAAAAAAAAAAoAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAw6sAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAACAAAAAoAAAAAAAAAAoAAAAAAAAAAKgAAAAAAAAoAAAAAAAAAKAAAAKgCCAAgICAgAAIAAAAAACAAAAAAoAAAACAAAAAAAACgAoKCigAIACAAgACAAAKoAAAAAAKAgAAgAAAAAAAAAAKAAACAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAw6sAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAACAAAAAoAAAAAAAAAAoAAAAAAAAAAKgAAAAAAAAoAAAAAAAAAKAAAAKgCACAgICAAgAIAAAAAACAAAAAAoAAACAAAAAAAAACgoAKKoAAIACAAgACAACigAAAAAKAAgAAAgAAAAAAAAAKAAACAAAAgAKAAAAAAAAACgAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDqwAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAIAAAAACgAAAAAAAAACgAAAAAAAAAAqAAAAAAAACgAAAAAAAAAoAAAAqAIAICAgAICAAgAAAAAAIAAAAACgAAAIAAAAAAAAAKCgoAqgAgAIACAAIAAAKKAAAAAAoCAAAACAAAAAAAAAoAAAAIAACAAAoAAAAAAAAAKAAAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMOrAAAAAACgAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAgAAAAAKAAAAAAAAAAKAAAAAAAAAACoAAAAAAAAKAAAAAAAAACgAAACgIgAgAICAgIAACAAAAAAAgAAAAKAAAAgAAAAAAAAoAKCgCqACAAgAIAAgAAAooAAAACgAIAAAAAIAAAAAAACgAAAAgAAIAACgAAAAAAAAAAoAAAAIAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAw6sAAAAAKAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoACAAAAAAoAAAAAAAAAAoAAAAAAAAAKgAAAAAAAAAoAAAAAAAAAKAAAAKAiACAAgICAgAAIAAAAAACAAAAAoACAAAAAAAAAACgAoKKoAAIACAAgACAACgCgAAAAKgAAAAAAAAgAAAAAAKAAAACAAAAgAKAAAAAAAAAACgAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDqwAAAAAoAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAIAAAACgAAAAAAAAACgAAAAAAAAAqAAAAAAAAACgAAAAAAAAoAAAAAoCIAAICAgICAAAAgAAAAAIAAAACgAIAAAAAAAAAAKCgoAqgAAgAIACAIAAAKKAAAAAAqAAAAAAAACAAAAAAoAAAAAIAAAAAAAAAAAAAAACgAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAy6sAAAAAKAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAACAAAAAoAAAAAAAAAAoAAAAAAAAAKgAAAAAAAAAoAAAAAAAAKAAAAAKAiAACAgICAAgAAIAAAAACAICgACoCggAAAAAAAAAoAKCgCqAACAAgAIAgAAoAoAAAACgIAAAAAAAAAIAAAACgAAAAAgAAAAAAAAAAAAAAKAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAADLqwAAAAAoAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAIAAACgAAAAAAAACgAAAAAAAAAAIKAAAAAAAACgAAAAAAAAoAAAAAoCIAAICAgIACAAAAgAAAAIAgKAAKgKACAAAAAAAACgAoKCigAIACAAAAiAACgCgAAAAKAgAAAAAAAAAgAAAAKAAAAAACAAAAAAAAAAAAAoAAAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAMurAAAAACgAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAgAAAKAAAAAAAAAKAAAAAAAAAACoAAAAAAAAKAAAAAAAAACgAAAACgCCAAgIACAgIAAACAAAAAgCAoICioCgAgAAAAAAAAoKACiqAACAAgAAAIgAoAAoAAAACgIAAAAAAAAAIAAAACgAAAAAAgAAAAAAAAAAAKAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAADLqwAAAAAAoAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAIAAAACgAAAAAAACgAAAAAAAAAAqAAAAAAAACgAAAAAAAAAoAAAAAoAggAIACAgIACAAAgAAAAAIAgAKKgAAAAAAAAAAoAKCgCqAACAAgAACAAAAAKAAAAAoCAAAAAAAAAACAAAAoAAAAAAAIAAAAAAAAACgAAAAAAAAgKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAy6sAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAACAAAAoAAAAAAAAoAAAAAAAAAAKgAAAAAAAAoAAAAAAAAAKAAAAAKAIIAACAgICAAgAAAIAAAACAIACioAAAAAAAAAAKACgoAqgAAgAIAAAgAAAACgAAAKAgAAAAAAAAAAAgAAKAAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAADLqwAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAIAAAACgAAAAAACgAAAAAAAAAAqAAAAAAAACgAAAAAAAAAoAAAAoAACIAAICAgIACAAAAgAACACKCAAoqAAAAAAAAAACgAoKCigAAIACAAAIAAAAoAAAACgIAAAAAAAAAAAAIACgAAAAAAAAAgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAy6sAAAAAAAKAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAACAAAAAAoAAAAAAoAAAAAAAAAAKAgAAAAAAAoAAAAAAAAAKAAAAKgACAAACAgIACAgAAIAAAAgAiggAAoAAAAAAAAAAKACgoqgAAAgAIAAAgAAACgAAAKAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAy6sAAAAAAAKAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAACAAAAAoAAAAAAAoAAAAAAAAAAKAgAAAAAAAoAAAAAAAAAAAAAoAAAgAAgAICAAgIAACAAAAIAIoIAAAKAAAAAAAACgAoKAKoAAAIACAAIAAAAAoAACgAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAADLqwAAAAAAAoAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAIAAACgAAAAAACgAAAAAAAAAAoACAAAAAACgAAAAAAAAAAAACgACAACAAAgICAAgAAIAAAAAggAAAAKAAAAAAAACgAoKCigAAAIACAAIAAAAAoACgAAAIAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAMurAAAAAACgAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAgAAAAKAAAAAAKAAAAAAAAAACgAIAAAAAAKAAAAAAAAAAAAKAAAIIAAACAgAICAAAgAAACAoIIAAACgAAAAAAAAAoAKCgooAAACAAgACAAAAAKAoAAAACACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAADLqwAAAAAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAIAAACgAAAAACgAAAAAAAAAAAoCAAAAAAACgAAAAAAAAAAACgIAgAAAAgAIACAgAAIAAAAgKCCAAAAoAAAAAAAAAKCgAoqgAAAAgAIAgAAAAACgKAAAAAAggAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAy6sAAKAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAACAAAoAAAAAAoAAAAAAAAAAAKAgAAAAAAAoAAAAAAAAAAAoACIAAAAIAACAAgIAACAAIAAAAIAAACgAAAAAAAAoAKCgooCggAIACAAIAAAAAAqgAAAAAIIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAjqwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAgKCAoAAAAAAoAAAAAAAAAAAKAAgAAAAAAoAAAAAAAAAAAoACIAAAAAIACAAgAIAACAIAAAAIAAACgAAAAAAAAoAKCgooCggAIACAAIAAAAAoCgAAAAAAiAAAAAAACgAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAACAAAoAAAAAAIAAAAAAAAAAAAAAAAAACOrAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAKAAAAAAAAAACgAAIAAAAAAKAAAAAAAAAAAAKAIIAAAAACAAgAIACAAAiAAAAACAAoAAAAAAAAAKCgAoKKoAIACAAgCAAAAAAKoAAAAAAAIgAAAAAAAoAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAgAAAAAKAAAACAAAAAgAAAKAAAAAAAAAACOrAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAKAAAAAAAAAACgAAAIAAAAKAAAAAAAAAAAAAKAIAAAAAIACAAgAIACAAIIAAAACAAoAAAAAAAAKACgoKKAoAIACAgACAAAAAAKoAAAAAAIAgAAAAAAAoAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAgAAAAAAKAAAACAAAAgAAAAAAAKAAAAAAACOrAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAKAAAAAAAAAAACgAAIAAAAAKAAAAAAAAACgAAgAoAgAAAAAgAAICAAgAIACAIAAAIACgAAAAAAAAoAKCgoqgAAgAICAIAAAAAAKKAAAAAAAgCAAAAAAACgAAAAAAAAAAAAAAAAAAAgAAAAAAKAAAAAAAAAAAAACAAAAAAAAAoAAIAAAACAAAAAAAAAAAAoAAAAI6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAoAAAAAAAAAAAKAAAgAAAAAoAAAAAAAAKAAAAAAKIAAAAIAACAAgIACAgAIAgAAAgAAKAAAAAAACgAoKCiqAACAgAIAgAAAAACqAAAAAAACIAAAAAAAAKAAAAAAACAAAoAAAAAAAAIAAAAAACgAAAAAAAAAAAAgAAAAAAAAAKACAAAAAgAAAAAAAAAAAAKAAAACOrAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAKAAAAAAAAAAACgAAIAAAAAKAAAAAAAACgAAAAACiAAAAACAAAgIACAgAIACAIAAAIACgAAAAAAoAKCgAoqgAgAIACIAAAAAAKKAAAAAAAgCAAAAAAAACgAAAAAgAAAAAKAAAAAAAACAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAoAAAAI6sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAoAAAAAAAAAAAKAAAgAAAAAoAAAAAAAAKAAAAAAKIAAAAAAIACAAgICAAgAIAgAAAgKAAAAAAACgAoKCgCqACAAgIAgAAAAAoAoAAAAAACAIAAAAAAAAKAAAAACAAAAAAAoAAAAAAAIAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAjqwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACgAAAAAAAAAAAAoAACAAAAACgAAAAAAAoAAAAAAAogAAAAAAgAIACAgIACAAgCAAAAAAAAAAAACgAoKCgCqACAgAIAgAAAAAooAAAAAAACAIAAAAAAAKAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAoAAAAI6sAAAAAAAAAAAACAoIKAAACAKAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAoAAAAAAAAAAAAKAAAgAAAAAoAAAAAAAKAAAAAAAKIAAAAAAIACAAgIACAgAIAgAAAAAAAAAAAoAKACgooCggAIACAIAAAAKAKAAAAAAAAiAAAAAAAACgAAAAAgAAAAAAAAKAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAKAAAAACOrAAAAAAAAAAgAAAAoAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAoAAAAAAAAAAAAKAAAAgAAAAAoAAAAAAAKAAAAAAAKIKAACAAAAgAICAgAICAAgCAAAAAAAAAAACgAoKACigAAAIACIAAAAAKAKAAAAAAAAgCAAAAAACgAAAAAAgAAAAAAAAAKAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAKAAAACAOrAAAAAAAAAAgAAAoAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAoAAAAAAAAAAAAAKAAAAgAAAAAoAAAAAAAKAAAAAAAKqAAACAAAAgAICAAgICAAgCAAAAAAAAAAACgAoKACigAAIAACIAAAAKAKAAAAAAAAAgCAAAAACgAAAAAAAgAAAICgAAAAAAoAIAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAACgAAAAAgDqwAAAAAAAAAICggAoAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAoAAAAAAAAAAAAAAKAAAAgAAAAoAAAAAAAAKAAAAAAAKqAAACAAAAgAICAAgICAAgCAAAAAAAAAACgAAoKCgCgAAIACAIAAAAKAKAAAAAAAAAgCAAAACgAAAAAAAAgAAAAICgAAAAAAAAAAAAAAoAAAAAAAIAAAAACAoAAAAAAAAAAAAAAAAAAAAAAIAAACgAAAAAgDqwAAAAAAAAAIAAAAKAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAKAAAAAAAAAAAAAACgAAAIAAAAKAAAAAAAACgAAAAAACqAgAAAgAAIACAAgICAAgIAgAAAAAAAAAAoAKACgoAoAACAAgCAAACgACgAAAAAAAACCAAAAoAAAAAAAAAIAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgDqwAAAAAAAAAAIAAAKAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAKAAAAAAAAAAAAAAACgAAAIAAAAKAAAAAAACgAAAAAAAoogAAAAgAAIACAAgIACAgAIgAAAAAAAAAAoAKCgoAKKAgAIACIAAAAKAAKAAAAAAAAIAAIACgAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACOrAAAAAAAAAAAAAgKCCgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAACgAAAAAAAAAAAAAAAoAACAAAAACgAAAAAAAoAAAAAAAKKAIAAAIAACAAgAICAAgIACIAAAAAAAAAKAACgoKCgCgIACAAiAAAACgCgAAAAAAAACAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI6sAAAAAAAAAAAACAAAACgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACgAAAAAAAAAAAAAAAoAACAAAAACgAAAAAAAoAAAAAAAKAKIAAAIAACAAAgIACAgIACIAAAAAAAAAKACgoAKCgCgIACAAiAAACgACgAAAAAAAACAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI6sAAAAAAAAAAAAACAoIAAACgAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoIACgAAAAAAAAAAAAAoAAAAAAAAAAAAAAKAAAAgAAAAAoAAAAAAAKAAAAAAACgCiAAACAAAAgAICAAgICAAiAAAAAAAAACgAoKCgAoAoCAAgCACAAoAAAoAAAAAAAAAgAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACOrAAAAAAAAAAAAAAAAAAgAAKAAAAAKAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAKAAAAgAAAAAoAAAAAAAKAAAAAAACgCiAAAACAAAgAIACAgICAAgCAAAAAAAACgAoKCgoAoACAAgCACAAoAAoAAAAAAAAAAgAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjqwAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAoAAACAAAAACgAAAAAAAoAAAAAAAKAKIAAAAIAACAAgAICAgIACAIAAAAAAAKACgAoKCgCgAIACAIAICgAACgAAAKACAAAAAIAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI6sAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAKAAAAgAAAAoAAAAAAAKAAAAAAAACgCiAAAACAAAgAIACAgICAAgCAAAAAAACgAoKACgoAoACAgACAAAAAAKAAAoAAIAAAgKCAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACOrAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACgAAAIAAAAKAAAAAAACgAAAAAAAAoAoAgAAAgAAIACAAgICAgAIAgAAAAAAAoAKCgoAKAKAgAIAgAAAAACgAAKAAACAAIAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI6sAACAAoAAIACgAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACgAAIAAAAAKAAAAAAACgAAAAAAAAoAAogAAAAgAIACAAgICAgAIgAAAAAAAAoAKCgoKAAKAgAIAgAAAAACgAAKAAACAAIAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIA6MAACgAgAAAKAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAKAAAAgAAAAAoAAAAAAAKAAAAAAACgAACiAAAACAAgAIACAgICAAiAAAAAAAACgoAKCgoAoACAAgCAAAAAKAAAoAAAAIAAgAAAAAAAAAAAAAAAAAAAgAAACggAAAAAAAAAAAAoAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAOjAAAAAAAAoAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAoAACAAAAAACgAAAAAAAoAAAAAAAKAAAKIAAAAIACAAgICAAgIACIAAAAAAAKACgAoKCgCgIACAIAAAAAAoAACgAAAAgACAAAAAAAAAAAAAAAACAAAAAKAAACAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAAgAAAADowAAAAAAAAAAKAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAKAgAAAAAAAAoAAAAAAAKAAAAAAACgAAAIoAAACAAgIACAgIACAAiAAAAAAACgAoKCgAoAoCAAgCAAAAAAKAAoAAAAAIAAAAgAAAAAKCAAAAAACAAKAAAAACAoIAAAKAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAACAAAAAAOjAAAAAAAAAAoAAICgAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACgIAAAAAAAAAKAAAAAAACgAAAAAAAoAAACKAAAAgAICAgAICAgAIAgAAAAAAAoAKCgoAKKAAgAIAgAAAAACgAKAAAAACAAAAAAAIACgAAAAAACAAAAAAAAAAIAAAKAAAAAAACAAAAAgAAAAKAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAIAAAAAAA6MAAAAAAAAAAAAACgAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAKAAAAAAAAAAgKCCgAKCAAAAAAACgAAAAAAAAoAAAAAAAKAAAAigAAAICAAgICAgAIACAIAAAAAAAKACgoKACigIAACIAAAAAAoAACgAAAAAAgAAAAAAACAoAAAAAgAAAAAAAAAAAACCgAAAAAAAgAAAAIoAAIAAAKAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAIAAAAAAAA6MAAAAAAAAAAAACgAgKAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAoAAAAAAAAACAACgAAAAAAAAAAoAAAAAAAAKAAAAAAACgAAAIoAAACAgAICAgIACAAiAAAAAAACgAAoKCgAooCAAgCAAAAAAKAAoAAAAAAAIAAAAAAAAAAAAAACAAAAgAKAAAAAAgAAAoAAAAAIAAAogAAAACAACgAAAAAAAAAAAAAAAAAoAAAIAAAAAAACAAAAAAAAAAOjAAAAAAAAAAAAoIACgAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAgKCACgAAAAAAAAAAoAAAAAAAAAKAAAAAAACgAAAIoAAACAgAICAgICAAAiAAAAAAACgAoAKCgAooCAAgCAAAAAAKAAoAAAAAAAAIAAAAAAAAAAAAACAAAgAAKAAAAAAgKCAACgAAAgAACiAAAAAAIAAKAAAAAAAAAAAAAAAAACgAAgAAAAAIAAAAAAAAAAAAA6MAAAAAAAAAAKAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAKAAAAAAAAAgAAoAAAAAAAAAAAKAAAAAAAACgAAAAAAAAoAAACKAAAAgIACAgICAAgAIgAAAAAAAoAKACgoAoAAACAIAAAAAAoACgAAAAAAAAgAAAAAAAAAAAAAIAACAAAoAAAAKCAAIAAKAACAAKAIAAAAAAAgAAoAAAAAAAAAAAAAAAAAKACAAAAAgAAAAAAAAAAAAAKCOjAAAAAAAACgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACgAAAAAAAIAAKAAAAAAAAAAACgAAAAAAAAAoAAAAAAAAKAAAAigAAAIACAgICAgIAACIAAAAAAKAACgAoKAKAAAAiAAAAAAKAAAoAAAAAAAAIAAAAAAAAAAAAACAAAAgKAAAACgAgACAACgAAgCgACAAAAAAAIAKAAAAAAAAAAAAAAAAAACggAAAAIAAAAAAAAAAAAACgAjqwIAAAAAAKAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAKAAAAAAAAAgAAoAAAAAAAAAAAKAAAAAAAAACgAAAAAAAoAAAAogAAAAgAICAgICAgACCAAAAAAAoAAKACgoAoAAACIAAAAAoAACgAAAAAAAAAgAAAAAAAAAAAAAIAAAAAAAACgAAgACAoqAAACAKAIAAAAAAAgAoAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAOjAAAACAoAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAoAAAAAAAACAAACgAAAAAAAAAAAoAAAAAAAAAKAAAAAAACgAAACiAAAACAAgICAgICAAIIAAAAACgAAAoAKCgCgAAAIgAAAACgAAKAAAAAAAAACAAAAAAAAgAKAAAACAAAAAAAoAAAIAAgAoAAAIAoAgAAAAACACgAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAKAAAAA6MAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAoAAAAAAAACAACgAAAAAAAAAAAoAAAAAAAAAAKAAAAAAACgAAAIoAAAACAAgICAgICAAIIAAAAACgAAAoAKACigAACCAAAAACgAAKAAAAAAAAACAAAAAAAgAAKAAAACAAAAAAoAAAAIAAgAAoAAIAoAAgAAACCgAAAAAoAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAoAAAAADowAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAIAAKAAAAAAAAAAAAACgAAAAAAAAAoAAAAAAAKAAAAigAAAAAICAgICAgIAAgAgAAAKAAAACgAoAqgAAAiAAAAAKAAAAoAAAAAAAAAIAAAAAACAAoAAAAAAAIACgAAAAAAgAACAACgAgACgACAAqAAAAACgAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAOjAAAAAAAAAAAAAAAAAAAoICgAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAoAAAAAAAACAACgAAAAAAAAAAAAAoAAAAAAAAKAAAAAAACgAAAAIoAAAAACAgICAgICAIAAIAACgAAAAAoAKAKoAAAIgAAAACgAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAgACAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAKAAAAACAAAAAgAAAAAAKAAAAAAAAAA6MAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAoAAAAAAACAACgAAAAAAAAAAAAAAoAAAAAAAAKAAAAAAACgAAACgCAAAAACAgICAgICIAAAIACgAAAAAAoAKAKoAAAIgAAACgAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAgAACAAAAAAAAAAAAAACgAAAAAAAAgAAAAAKAAAAAAACAAAAAgAAAKAAAAAAAAAAAA6MAAAAAAAAAAAAAAAAAAAAAACggKAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAIKAAAAAAAAAAAAAAACgAAAAAAAAoAAAAAAAKAAAAAigAAAAAICAgICAgIgAAAAAAAAAAAAoAKAKoAACCAAAAACgAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAgAACAAAAAAAAAAAAACgAAAAAAAAAAgAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAAOjAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAgAAoAAAAAAAAAAAAAAAKAAAAAAAACgAAAAAAAoAAAAogAAAAAAgICUEBARBAAAAAAAAAAAAAUAFFUAAABBAAAABQAAAFAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAQAAABAAAAAAAAAAABQAAAAAAAAAAAAQFAAAAAAAAAAAABAAAAAAAAAAAUAAAAEAAAdGAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAABABQAAAAAAAAAAAAAAAUAAAAAAAFAAAAAAABQAAABQBAAAAAABASglBmggIgAAgKAAAAAAAACgAoAqgAAAiAAAAKAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAIAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAIAAA6MAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAACAACgAAAAAAAAAAAAAAAoAAAAAAAAKAAAAAAACgAAACiAAAAAAACAlBmglBARABAAAUAAAAAAAFABQBVAAABEAAAAUAAAABQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAQAAAAFABAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAFAAAAAAAABAAAAHRgAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAQAAUAAAAAAAAAAAAAAAFAAAAAAAABQAAAAAAAUAAAAUQAAUEAABAAZoJQZoIgAgAAAKAAAAAAACgAoKKAAAIIAAAAAKAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAICggKAAACAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAADowAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAIAAAKAAAAAAAAAAAAAAACgAAAAAAAAoAAAAAAKAAAAAKIAAKACAAgJQSglBmgiCAAAAAoAAAAAAAKACgooAAAggAAAAAoAACgAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAgAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAA6MAAAAAAAAAAAAAAAAAAAAAAAAACgAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAACAACgAAAAAAAAAAAAAAAAoAAAAAAAAKAAAAAACgAAACgCAACgAgAICUEoM0EoIggAAAAKAAAAAACgAoAKKAAAIIAAAAKAAAoAAAAAAAAAAAIICgAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAgAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAA6MAAAAAAAAAAAAAAAAAAAAAAAAAAKoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAACAAACgAAAAAAAAAAAAAAAoAAAAAAAAKAAAAAAACgAAACgCACgAAgAICUEoM0EoMoAAAAAKAAAAAACgAoAqgAAIAIAAAAKAAAoAAAAAAAAAAiAAAACgAgKAAAAAAAAAAAAAAAAgAAAAAAAAAAAAACAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAICujAAAAAAAAAAAAAAAAAAAAAAAACgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAgAAoAAAAAAAAAAAAAAAAKAAAAAAAACgAAAAAAAoAAAAogAAoAAIACAlBmglBmgiAAAAACgAAAAAAoAKAKoAACACAAAACgAKAAAAAAAAAAAIgAAAAAAoAAAAAAAAAAAAAAACAAAAAAAAAAAAAAIAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAiitsAAAAAAAAAAAAAAAAAAAAKAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAACAACgAAAAAAAAAAAAAAAAoAAAAAAAAAKAAAAAACgAAAACiAACgAAgAICUGaCUGaCIAAAAAKAAAAAACgAoAqgAAIAIAAAAKAAoAAAAAAAAAAIIAAAAACgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAgAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACKK2wAAAAAAAAAAAAAAAAAoAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAIAKAAAAAAAAAAAAAAAACgAAAAAAAAoAAAAAAAKAAAAAKAIKAAACAAgJQZoJQZqCAAAAAAoAAAAAAKACgCqAAAgAgAAAAoCgAAAAAAAAAAAggAAAAAKAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAggCgKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAKICtsAAAAAAAAAAAAAKAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAACACgAAAAAAAAAAAAAAAAoAAAAAAAAAKAAAAAAACgAAACgCACgAAAAgICUGaCUGaggAAAAAKAAAAACgAAoKKAAAIAIAAAKAAoAAAAAAAAAAAIIAAAAACgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAIIAqgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAACiArbAAAAAAAAAACgAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAgAAoAAAAAAAAAAAAAAAKAAAAAAAAACgAAAAAAAoAAAAAoAgAoAAAAICAlBmglBmoIAAAACgAAAAAAoAKACigACAACAAACgKAAAAAAAAAAAACACAAAAoAAAAAAAAAAAAAAAAAAACAAoAAAAIAAIIAqgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAACg2wAAAAAAAoAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAIAKAAAAAAAAAAAAAAAACgAAAAAAAAAoAAAAAAAKAAAAAKAIKAAAAACAgJQZoJQZQQAAAAFAAAAAABQAUAFFAAEAAEAAFAUAAAAAAAAAAAAAAEAEABQAAAAAAAAAAAAAAAAAAAAAAAAAAAQABEVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAB0YAAAUAAAAAAAAAAAAAAAAAAAAAAAABQQFAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAQAUAAAAAAAAAAAAAAAAFAAAAAAAAAABQAAAAAAAUAAAAUAAQUAAAAAEBASgzQZoJUEAAAABQAAAAAAUAFAFUAABAAABBQAFAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAABAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAFdGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAEFAAAAAAAAAAAAAAAAABQAAAAAAAAAUAAAAAAAFAAAAAAFAEFAAAAABASglBmgzQSoICAoAAKAAAAACgAAoAqgAAIAAIAKAoAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAICgggAAAACgAAAAAAAAAAAAAAAAAAAAAAAIAAAACgAAAAAgAAAAAAKAAAAAAAACAAAArowAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCAAoAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAACACgAAAAAAAAAAAAAAAAoAAAAAAAAAAKAAAAAAACgAAAACgAKgAAAAAAgJQSgzQZoJUEBAAUAFAAAAABQAAUAVQAEAAAEFAAUAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAEBREAAAAAABQAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAABQAAAAAAAAQAAFdGAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAQFAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAQAAUAAAAAAAAAAAAAAAAFAAAAAAAAAABQAAAAAAAAUAAAAAUAQUAAAAAAEBKDNBKDNBEEBAAUAAFAAAABQAUAFFAAEAAAEFAUAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAQFBEAAAAABQAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAQAFdGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQQAFBAUAAAAAAAAUAAAAAAAAAAAAAAAABAABQAAAAAAAAAAAAAAAAAUAAAAAAAAAAFAAAAAAABQAAAAABQAFQAAAAAAQEoM0EoM0GUAEABQAAUAAAFAABQBVAAAQAAQAUBQAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABAEAAAABQAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAQFdGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQABQAAEBQAAAAAAAAAAAAAAAAAAQUAAAAAAAAAAAAAAAAAFAAAAAAAAAABQAAAAAAAAUAAAAAUABUAAAAAAAEBKDNBmglBlBAAAUAAFAAABQAAUAVQAAEAAEFAUAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAQFBAAAAAAAAAAAAAAAAAAAUEAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAQFdGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAUEAAAABQAAAAAAAAAAAAAAAQUAAAAAAAAAAAAAAAAAFAAAAAAAAAAABQAAAAAAAAUAAAAAAUBUAAAAAAAEBKDNBmglBlBAAAUAAFAABQAAUAFFAAEAAAAVAUAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAFBAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAEBXRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAFAAAAAAAAAAAABBQAAAAAAAAAAAAAAAAAUAAAAAAAAAAAFAAAAAAAABQAAAAABQFAQAAAAAAAQGaCUGaDNBEEAABQAUAAAFAABQAUUAAQAABQAAAAAAAAAAAAAAEAAAABQAAQAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAEBXRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAFAAAAAAAAAABBQAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAFAAAAAAAABQAAAAABQFAQAAAAAAAQGaCUGaDNBEEAABQAUAAAFAABQAUUAAQAABQAAAAAAAAAAAAAEAAAABQAAAAAQAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAEABXRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAFAAAAAABBQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAFAAAAAAAAABQAAAAABVAQAAAAAAAAQGaCUGaDNBEEAABQAUAAFAABQAUUAAAQAAABQAAAAAAAAAAAEAAAAABQAAAAAAQAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAV0YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAABQAAQFBBQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAAAAAAAABQAAAAAABVAAQAAAAAAAQGaCUGaDNBEEAABQAUAAFAABQAUUABQRAAAFAAAAAAAAAAAAQAAAAAFAAAAAAABAAAUAAEAAAAAAQFBAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAV0YAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAAQUAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAABQAAAAAAAAAUAAAAAAUBQEAAAAAAAAEoM0EoM0GaCIIAACgAoAKAACgAoAoCgIIAAAAKAAAAAAAAAAAgAAAAKAAAAAAAAACAAoAAAIAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK6MAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAKAAAAAAAACgAAAAAAAooAAgAAAAAAgJQSgzQSgzUEBAAUAFAABQAAUAFAFAUBBAAABQAAAAAAAAAAAEAAABQAAAAAAAAAAQAFAAAABAAAAAEAAAAAAAAAAAAAAAAAAAAEAAABQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFdGAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAABQAAAAAABVAAQAAAAAAAQEoJQZoM0EqCAgAKACgAAoAAKACgCqAAggAAAAoAAAAAAAAACAAAoAAAAAAAAAAAAIAACgAAAAgAAACAAAAAAAAAAAAAAAAAAAACAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACujAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAACgAAAAAAAAoAAAAAAAKKAAAIAAAAAAICUGaCUGaCIICAoAAKACgAAoAKAKAoACACAAACgAAAAAAAAAIACgAAAAAAAAAAAAAAgAKAAAAACAAIAAAAAAAAAAAAAAAAAAAAAIAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK6MAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAKAAAAAAAAACgAAAAAAAooAAgAAAAAAAgJQZoM0EoIggAoIAoAAKAACgAoAqgAAIAIAAAKAAAAAAAAAAAAAAAAgKAAAAAAAAAAAAAAAAAAACAAAAAIAAAAAAAAAAAAAAAAIAAAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK6MAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAKAAAAAAAACgAAAAAAAoAoAAgAAAAAAAgM0EoM0EoMoAoAIAoAKAAACgAoKKAAIAAIAAAAAKAAAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAACAAAAAAIAAKAAACAAAAAAAAgAAAKAAAAAAAAAACAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAADTowAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACgAAAAAAAAAoAAAAAAAKKAAAIAAAKCAAAlBmglBmgzQRAFAABFABQAAUAFABRQABAABAAAABQAAAAAAAAAAAAAEAAAAABQAAAAAAAAAAAAAAAAQAAAAABAABQAAAQAAAAAAAAAAAAAAAAAAAAAEAAAAABAAAAUAAAAAAAAAAAAAAAAAAAAAAAEABt0YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAABQAAAAAAAAAUAAAAAAAFAFAAAEAAFAABAASgzQZoJQZoIgCgAKIAoAAAKACgooAAAgAAgAAAoICgAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAAAAAgAAAAACACgAAAAAgAAAAAAAAAAAAAAAAAAAAIAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAIAAADbowAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAoAAAAAAAKAKAAIAAAKAACAAzQSgzQZoJQRAFAAUQBQAAUAFABRQAABAABAAABQQFAAAAAAAAAAAAAAAQAFAAAAAAAAAAAAAAAAABAAAAAAAEAFAAAAABAAAAAAAAAAAAAAAAAAAAQAAAAAAEAABQAAAAAAAAAAAAAAAAAAAAAAQAAAG3RgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAABQAAAAAAAUAAUAAAQAUAAAEBASglBmgzQQEQBQAFAEUAAFABQAUUAAQAAQAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAEFAAAAAAABAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAABAejowAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAoAAAAAAAKAKAAAIAAKAAACAgJQSgzQZoICIIKoAKAIoAKAACgoAoAAgAAgAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAIKAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACA9HRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAABQAAAAAAAUAAUAAAQAUAAAAEBASgzQSgzQQEQBQAFBQBAFABQAUUBQARAABAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABBAFAAFAAVAAAAAAAAAAAAAAAAABAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAABAejoyACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAKAAAAAAAACgCgAAACACgAAAAgICUGaCUGaCAiAKAAoKAIAoAKACigKACIAAIAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAIAIAAAoAAoCoAAAAAAAAAAAAAAAAAAIAAAAAACAAAAAAAAAAAAoAAIAAAAAAAAAAAAAAAAACAAAAA26MgAAAAgAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACgAAAAAAAoAAoAAAAgoAAAAAICAlBKDNBmgiCACgAKCgCKAACgAooCgiAAACACgAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAgAAIAAIAAAoAAoCgIAAAAAAAAAAAAAAAAAAIAAAAACAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAACAAAAA26MgAAAAAAgAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACgAAAAAAAoAAAoAAAgAoAAAAAIADNBKDNBmgiCACgKACgCKACgAoAoCgiAAACACgAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAAAAAgAAIAAAIAAoAoACgAIAAAAAAAAAAAAAAAAAIAAAACAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAACAAAA26MgAAAAAAAAgAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACgAAAAAAAoAAAoAAAgoAAAAAAAIDNBKDNBmgiCACgKACgAogCgAooACgiAAACACgAAAAIAACgAAAAAAoIAAAAAAAAAAAAAAAAAACAAAgAAAgCgACgAKAAAgKCAAAAAAAAAAAAAAACAAAAgAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAAAAAgAANujIACgAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAoAAAAAAAKAAAKAAAAIKAAAAAAACAlBmgzQSgyggAoCgAoKAIAoAKKAAAIAAIAKAAAAAAgAAKAAAAAACgAAgAAAAAAAKAAAACAAAAgAIAAAACiAoAACgAAIACggAAAAAAAAAAAAAAAgAAIAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAID0dGQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAFAAAAAAABQAABQAABBQAAAAAAAAQEoM0EoM0EQQEFAUAFBQBFABQBQFBEAAAEAFAAAAAAQAFAAAAAAAAAAAAAAAAAAAAAAAAAAABAAQAAAAFAAAABQAAAEBQAQAAAAAAAAAAAAAAQABRAAAQBBQAAAAAAAAAUAEAAAAAAAAAAAAAAAAAAAAAABt0ZAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAAAAAAFAAAAFAAAEFAAAAAAAABASgzQSgzQSoICCgKACgoAigAooCgAiAAACCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAACAAAAAoAAAKAAAAAAAAgAAAAAAAAAAAAAAgCgCAAAgAKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA26MgAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAKAAAAAAACgAACgAAAKgAAAAAAAAAgJQSgzQZoIggIAKoKACgoAKACgAAiAAACCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACAAAAAoAAAKAAAAAAAAAgAAAAAAAAAAAAAAgCgCAAAgAKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA26MgAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAKAAAAAAAACgAACgAACCgAAAAAAAAAgJQSgzQZoJUEBAUUBQUAFBQAUAABABAAAQUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAQAAAAFAABQAAAAAAAAAEBQAQAAAAAAAAAAAQBQBAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG3RkAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAABQAAAAAAAAUAAAAUAAAQUAAAAAAFBAAQEoJQZoM0EqCAgKKAoKCgAoKAAAAggAAAIKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAIAAAAACgAAoAAAAAAAAAAACAAAAAAAAAAAACAAKAIAAgAAAAAAAAAAAAAAAAAAAAAgAKAAAAAAAAAAAADboyAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAoAAAAAAAAAKAAAAKAAAqAAAAAACgAgAICUEoM0GaCVBAABQFBQUFBQAAAAEEAAAABBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAABAAAAAAUAFAAAAAAAAAAAAQFBAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAABQAAAAAUAEAAABt0ZAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAFAAAAFAAAAVAAAAAABQAAQEBKCUGaDNBKggAAoCgoKCgoAAACACAAAAAgAoAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAgAAAAKAACgAAAAAAAAAAAAAAIAAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAKAAAACgAAAAgANujIAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAoAAAAoAACgIAAAAAKAAACAAzQSgzQSgzUEAAFUFBQUFABQAQBABAAAAAAQAUAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAQAAAFAAABQAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAAABAAAAAAAAAAAAAAAAQAAAAAFAAABQAAAAAAAadGQAAAAAAAAAAAAAQAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAABQAAAABQAAFAQAAAAAUAAAEABKDNBmglBmoIAAKoKCgoKACgAgCACAAAAAAAgAoAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAACAACAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAIAAACgAAAAoAAAAAAANOjIAAAAAAAAAAAAAIAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAoAAAAAoACgIAAAAAAKAAACAAlBmglBmgzUEAABRVBQUFABQQBAABAAAAAAAQAAAUAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAUAAAAAAAAAAAAAAABAAABAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAEABQAAAAUAAAAAAAAGnRkAAAAAAAAAAAAAAEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAUAAAAAUAABQEAAAAAFAAAAABAQGaCUGaCVBAQAFBRVBQUAABAAABAAAAAAAAQAAAAUAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAUAAAAAAAAAAAAAAAABAUEEAAAAAAAAAAAAAAAAAAAABAAAAUAAEAAAAAAAAAAAAABQAAAAAAAAadGQAAAAAAAAAAAFAAEAAAAAABQQAAAAAAAAAAFABAUEAAAAAAAAUUEBQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAUAAAAAUABQAEAAAAAFAAAAABAQEoM0GaglBAQAFBRVABQUABAABAAAAAAAAAAQAAAAAAAAUEAABQAAAAAAAAAAAAAEAAAAAAAAAABQAAAAAAAAAAAAAAAAAAQBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAUAAAAAAAAGnRkAAAAAABQAAAAABAAUAAAAAAAAAAAEBQAAAAAAAAAAAQAAFUAAAQFBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAABQAAAAABQAFAAQAAAAUAAAAAAEBASgzQZqCUEBAAUAVQUFAQAAAAAAAAAAAAAAAAQAAAAAAAAAAUAAAAAAAAAAAAAABAAAAAAUAAAAAAAAAAAAAAAAAAAAABAURAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAUAAAAAAAAG3RkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAABQAAAAABQAFAAAQAAAAUAAAAAAEBKCUGaDNQSggIAACiqCgAqAAAAAAAAAAAAAAAAAAAAAACAoIAAAAKAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAACgAAAAAAAAA26MgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAKAAAAAAKAAoACAAAACgAAAAAAAgJQSgzQZqCUEBAAAUVQAVABQAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAUAAAAAAAAAAABAAUAAAAAEAAABQAAAAAAAAAAAAAAEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAUAAEAABQAAAbdGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAFAUAABAAAABQAAAAAAAQEoJQZoM1BKDIAAAKKoCCgAAoAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAKAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACgAAAAgAAAAAKDboyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAgAKCAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACgAAAAAAACgKAAAgAAAoAAAAAAAAICUGaCUGaglBkAAAFFAVBQAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAFAAAAAAAAAAAAAAAAAQAAAAAFAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAB6OjIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACgAAAAAAACgKAAAAgAAAoAAAAAAAAICUGaCVBmglBkAAAFFUBABQAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAFAAAAAAAAAAAAAAAAQAAAAAAFAAAAAAAAAAAAAAAAABAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAABQbdGQAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAEBQQAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAUAAAAAAAUABQAAEAAAFAAAAAAAAABASgzQSoM0EoMgAAAoqoAKAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgoAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAIAAAAAgAAAAAAAoAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADboyAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAoAAAAAAAAoCgAAAIAAAKAAAAAAAAACAlBmglQZoJQQEABQBVQAUAAAAFAAAAAAAAAAAAAAAABAAAUAAAAAAAAAAVAAAAAAAAAAAAAAAQAAAAAAFAAAAAAAAAAAAAAAABAAAAAAEAAAAAAFAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbdGQAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAABQAQAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAUABQAAAEAAFAAAAAAAAAABASgzQSoM0EoICAAoAqoAKAAAACgAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAAKgAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAgAAAAAACAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANujIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAACgKAAAAgAAAoAAAAAKAACAAgJQZoJUGaCUEBAAUUBUFAAAAAABQAAAAAAAAAAAAAAAQAAAFAAAAAAAAAAFAQAAAAAAAAAAAAEAAAAAABQAAAAAAAAAAAAAAAQAAAAAAABAAAAABQAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHo6MgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAACAAAAACAAAoAAIAAAAAooAIACgAAAgKCAAAAAAAAAAAAAAAKAAAAAAAAAKAAoAAACAACgAAAAAoAAAIACAlBmglQZoJQQEABRQFQUAAFAAAAAAAAAAAAAAAAAAABAAAAUAAAAAAAAAAAVAAAAAAAAAAAAAAQAAAAFAAAAAABAAAAAAAAAAAAAAAAAAEAAAAAFAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAejoyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAIAooAAAAAAAAAAAAICggAAAAAAAAAAAACgAAAAAAAAACgKAAAAgAAAoAAAAAKAAACAAgJQZoJUGaCUEBAAUUBUFAABQAAAAAAAAAUAAAAEAAAAABAAAUAAAAAAAAAAAVAAAAAAAAAAAAAAAQAAAFAAAAABAAAAAAAAAAAAAAAAAAAEAAAAAFAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAejoyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAACAoIAAAAAAAAAAAoAAAAAAAAAAoACgAAAIAAKAAAAAACgAAAgAICUGaDNQSgzQAQAFFAVBQAUAAAAAAAAAFAAAAAABAAAAAQAFAAAAAAAAAAAAAFQAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAQAAAAUAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6OjIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAKAAAAAAAAAAAAKAoAAACAAACgAAAAAAoAAAIACAlBmoM0EoMggAAKAiqCgAoAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAACgIAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAIAAAAAAKAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9HRkAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAFAAAAAAAAAAAAFAAUAAABAABQAAAAAAAUAAAEABAZoJUGaCUGQQAAFARVBQAUAAAAAAAFAAAAAAAAAABAAAAAAAAAAAAAAAAAABQAEAAAABQAQAAAAAAAAAAAAEAAAAAAAAAAAAAAAABQAQABAAAAAABQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHo6MgAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACiAAAAAAAAAAAAAAoCgAAAIAAAKAAAAAAACgAAAgAIDNBKgzQZoICAAAoCKoKACgAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAKAAgAKAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAKAAACAAAIAAAAAKAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9HRkAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUQFBAUEAAAAAAAAABQFAAAAAQAAUAAAAAAAAFAAABAAQGaCVBmgzQQEAABQBVQUAFAAAAAABQAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAUAAAAAAAAAAABAAAAAAAAAQAAAAAAAAAAAAFAAAAABAAAAEAAAAFAAABAAAAAAAAAQAAAFAAAAAAAAAAAAAAAAABAAeroyAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAIAAAAAAAACgKAAAAAgAoAAAAAAAAKAAAACAAgM0EqDNBmggIAACgCqgoAKAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAoAACAAAAoAAAAAAIAAAAACAAAAAAAAAAAAoAAAAAAAIAAAgAAAAoAAIAAAAAAAACAAAAAoAAAAAAAAAAAAAAIAAAAD2dGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAEAAAAABQAFAAAAAQAAUAAAAAAAAFAAAABAASgzQSoM0GaCAgAAKCiiCgAoAAAKAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAACgIAAAAAACgAAAAgAAAAAIAAAAAAAAACgAAAAAAAAAgAAAACAAAAAoAAAIAAICgAgAAAAAKAAAAAAAAAAACAAAAAAA9nRkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAABAAAUBQAAAAAEAFAAAAAAAAABQAAAAQAEBmglQZoM0EABAAUVQEFABQAAAUAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABBQAAAAAAFAAABAAAAAAQAAAAAAAAFAAAAAAAAAABAAAAAAAAAAAAAQABAAAAAAAAABQAAAAAAAAAAQAAAAAAAAHs6MgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACgAAAAAIAKAAAAAAAACgAAAAAgAIDNBKgzQZoIACAoAqgIKACgAAoAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACAACgAAAAAAAKACAAAAAAgAAAAAAAKAAAAAAAAAAACAAAAAAAAAAAgAAACAAAACggAAAKAAAAAAAAAACAAAAAAAAgPd0ZAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAUAAAAABABQAAAAAAAAAUAAAAAEABKDNBKgzQZoIACAoAqgIKACgAAoAAAAAAAAAAAAAAAAAAIAACgAAAAAgAAAAAAAAAIAAKAAAAAAAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAACAAAAAAAAgAAAAAACAAACgAgAAKAAAAAAAAAACAAAAAAAgAPd0ZAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAABABQAAAAAAAAAUAAAAAAEBKDNBKgzQZoIAAAAKoKgAAoAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAgAAIAAACgIAAAKAACAAoAAAAAAAAAAAIAAAAACAA93RkAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAQAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAEAFAAAAAAAAABQAAAAAAQAEoM1BKDNBmggAAAAqgqAACgAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAIAACgAAAAAgAAAAAIAACAAAAAAqAACgAAAAAAAAAAAAAAAAAgAAAAAIAD3dGQAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAEAAFAAAAAAAAABQAAAAAAQAEoM1BmglBmggAAAqgAqACgAAAAAoAAAAAAAAAAAAAAIACgAAAAAAAAAgAAAAAAAAIAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAKAAAACAAAAAAgAAIAAAACoAAAKAAAAAAAAAAAAAAAAACAAAAAgAAPd0ZAAAAAAAAAAAAAAAAUAAAAAAAABAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAABABQAAAAAAAAAUAAAAAAAEABKDNQZoJQZoIAAAKoCCgAoAAAAAAKAAAAAAAAAAAACAAAAoAAAAAAAAIAAAAAAAACAAAAACgAAAAAAAAAAAAAAAAAAAAAAAIAAAACgAAAAgAAAAAIAACAAAAIKAACgAAAAAAAAAAAAAAAAAAgAAAAIAAD3dGQAFAAAABAUAAAAAAAAAAAAAABAAAAUEABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAEAAFAAAAAAAAABQAAAAAAAQAGaCVBmglBmggAAAqgIKACgAAAAAAoAAAAAAAAAAAAIAAAACgAAAAAAAgAAAAAAAAAIAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAgAAAKAAgKCAogCAoICiAAAAAAAIAAKAAAAAAAAAAAAAAAAAACAAAAAgAAAOhtkAAUAAAAAAAAAAAAAAAAAAAEAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAEAFAAAAAAAABQAAAAAAAAQAGaCVBmglBkEAAAFUBBQAUAAAAAAAFAAAAAAAAAAAABAAAAAUAAAAAAEAAAAAAAAAABAAABQAAAAAAAAAAAAAAAAAAAAAAAAEAABQAAEAAAEAAAAABFAAABAAABQAAAAAAAAAAAAAAAAAAQAAAAEAAABAdLbIAAAAAoAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAIAKAAAAAAAAACgAAAAAAAAgAM1BKDNBKDIIAAAKoCCgAoAAAICgAAAoAAAAAAAAAAAIAAAACgAAAAAAAgAAAAAAAAAIAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAAAAAACAAAAoAAAAAAAAAAAAAAAIAAAAAAAACAAAAgAOltkAAAAAAAAUAAAAAAAAEAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAEFAAAAAAAAABQAAAAAAAAAQAGaglBmglBkEAAAFUBBQUAAAEAABQAAUAAAAAAAAAAAAEAABQAAAAAAAAQAAAAAAAAAEAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAABRAEAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAABAAAAQABR0tMgAAAAAAAAAAACgAgKCAAAAAAAAAAAAAAoIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAIAKAAAAAAAACgAAAAAAAAAAgAM1BKDNBmggIAAAKoCCgoAAAIAACgAAoAAAAAAAAAAAAAIACgAAAAAAAAgAAAAAAAAAIAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICgCAAIAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAACAAAgAACjpaZAAAAAAAAAAAAAAAAAAAAAUAAEAAAAAAAAAAUAAAEAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAEFAAAAAAAAABQAAAAAAAAAAQAGaglBmgzQQEAAAFUBBQAUAAEAABQAAUAAAAAAAAAAAAAAEBQAAAAAAAAQAAAAAAAAAEAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAEABQBAAAAEAAAAFBAAAAAAAAUAAAEAAAABAAAAAAAAAAAAQAAAAEAB0tsgAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAKCAAAAoAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAIKAAAAAAAACgAAAAAAAAAAAgIglBKDNBmggIAAAKAqACgAAAAAAoAAAKAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAgAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAIAAAKAAAAAAAAAAAAAACAAAAgAAAAAAAAAAAAIAAAAADobZAAAAAAAAAAAAAAUAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAABBQAAAAAAAUAAAAAAAAAAAAEAQZoJQZoM0EBAAQAFFEFABQAAAAAAUAAFAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAQAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAEAAAFAAAAAAAAAAAAAAABAAAAQAAAAAAAAAAAAAAEAAB0NsgAAAAAAAAAAKAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAgoAAAAAAAAKAAAAAAAAAAAAACIM0EoM0GaCAgIAAAKqACgAAAoAAAKAACgAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAIAAAAAKAAAAAAAAAAAAAAAAAAAAAIACggAAKIAAACAoCAACgAAAAAAAAAAAAAAAgAAAIAAAAAAAAAAAAAAAAAD3bZAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAABQAAAQBQAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAEFAAAAAAABQAAAAAAAAAAAAAARBmglBmgzQQEBAAAABRBQAUAAFAABQAAAUAAEBQAAAAAAAAAAAAQFAAAAAAAABAAAAAAAAQAAAAAUAAAAAAAAABAAAAAUAAAABAAAAAABFAAAEBQEAAFAAAAAABAAUAAAAAAEAAAAABAAAAAAAAUAAAAAEAB0NsgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIoAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAKgAAAAAAAAoAAAAAAAAAAKCAAAiDNBKDNBKDIICAAgAKKAIKACgAAoAKAAAAAAAAACgAAAAAAAAAAgKAAAAAAAAAACAAAAAAgAAAAAAoAAAAAACAAAAAAAAAAoAACAAAAACKAAAAACAACgAAAAAgAAAAKAAAACAAAAAAAAgAAAAAKAAAAAAAD3bZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBQAAAAAAAUAAAAAAAAAAAFBAAARBmglBmglBmggIACAAAoogoAKAACgAoAAAAAAAAAAKAAAAAAAAACAAoAAAAAAAAAAIAAAAACAAAAACgAAAAAAIAAAAAAAAAAACoCggAAAAgCgAAAgAAAoAAAAIAAAAAAAAAAAAAAAAAAACAAAAAoAAAAAAAPdtkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAVAAAAAAAABQAAAAAAAAAAUAAEABEGaCUGaCUGaCAgAIAAAKqCgAoAKAACgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAIAAAAACAAAACgAAAAAIAAAAAAAAAAAAACgIAAAAAIAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAIAAACgAAAAAAA922QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQQAAAAAFAABAAAAUAAAAAAAAAAAAAAAAAAAVAAAAAAAABQAAAAAAAAAAAUAAEABEGaCUGaCUGaCAgIAAAAKqCgAoAKAACgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACAACgAAAAAIAAAAAAAAAAAAAAACoACgAggAAAAAAAKAAAACAAAAAAAAAAAAAAAAAAAAAAgAAAAKAAAAAD3bZAAAAAAAAAAAAAUAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAEFAAAAAAAAABQAAAAAAAAAAUAAAEABEGaCUGaDNBKCAgIAAAAKqCgAoAKACgAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAIAAAAAAACACgAAAAAIAAAAAAAAAAAAAAAAAgoAAAIAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAA922QAAAAAAAAFAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAABABQAAAAAAAAAAUAAAAAAAAAAFAAABAARBmglBmgzQSggICAAAAAqKoAKACgAoAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACAAAAAAAAgoAAAAAACAAAAAAAAAAAAAAAAAAqACAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAA6G2QAAAAAFAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAABAABQAAAAAAAAAAUAAAAAAAAAAFAAAABAEEoM0EoM0GaCUEBAQAAAAFFVABQAUAFAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAQAAAAAAEFAAAAAAAQAAAAAAAAAAAAAAAAABAAAAAAAAABQAAAAQAAAAEAABQAAAAAAAAAAAAAAQAAAAAAAAAHQ2yAoAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoIAACggAAAAoAAAAAAAAAAAAKAAAAAAAAAACgAAAAgCCUGaDNBKDNBKCAgIAAACgCqgAoKAACgAAAAAAAAAAAAAAAAAAAAoAAAAIAACgAAAAAAAAAAgAAAAAoCAAAAAAAgAAAAAAAAAAAAAAAAACAAAAAAAAACgAAAAgAAAAIAAACgAAAAAAAAAAAAAgAAAAAAAAIDqbZAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAABQAAAAAAAAAAUAAAAAEBEEoJQZoM0EoM0EABAAAUAVUAFABQAUAAAAAAAAAAAAAAAAAAAAAAFAABAAAAAUAAAAAAAAAAEAAAAFAQAAAAAAAEBQAAAAQAAAAAAAAAAABAAAAAAAAABQAAQAAAAAEAAAABQAAAAAAAAAAAAAQAAAAEAAAB1NsgAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAoAAAAAAAAAAKAAAAACAiCUEoM0GaDNBAQAEBQABVBUAFAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAEAAAFAQAAAAAAAAAAAAAAAAEAAAAAAAAQAAAAAAAAAAAAAAAAAAAQAAAAAFAAAAAAAAAAAAABAAAAQAAAHU2yAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACgAAAAAAAAAoAAAAAAIggJQZoM0EoM0EBAAAAAUVUAFABQAAAAAAAAUAAAEAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAQAUAABAAAAAAAAAAAAAAAAAQAAAAAAABAAAAAAAAAAAAAAAAAAABAAAAAAUAAAAAAAAAAAAAEAABAAAAdTbIAAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAoAAAAAAAAAKAAAAAAACIICUGaDNBmglBkAAAAFFVBQAUAAFAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAEAFAAAAQAAAAAAAAAAAAAAAAEAAAAAAQAAAAAAAAAAAAAAAAAAAAAQAAAAAFAAAAAAAAAAAABAAAQAAAHU2yAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAKAAAAAAAACgAAAAAAAgCCUGaCUGaDNBmggAICgAqKoKCgAoAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAoAAAACAAAAAAAAAAICgAAAgigAAAgKCAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAIAACAAA6m2QFAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAUAAAAAAAEQASgzQZoM0GaCUEBAAUFFEGgUAFAAAAAAAAAAAAAAAAABAAAAAAQFAAAAAAAAAAAAAAAAABQAAAAAQAUAAAAABAAAAAAAAAEABQQAFBBFABAAAAAAAAAAAAAAAAABQAAQAAAAEAAAAABQAAAAAAAAAAAAQAAEAAB1tsgAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACgAAAAAAAAiADNBKDNBmgzQSggIACgoqoKCgoAAAAAAAAAAAAAAAAAAAIAAACAAoAAAAAAAAAAAAAAAAAAKAAAACACgACAoAAAgAAAAAAAAAAACAoIIoAAAAIAAAAAAAAAAAAAAKAAACAAAAAgAAAAKAAAAAAAAAAAACAAAAgAOttkAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAUAAAAAAAAEQAZoJQZoM0GaCAgIACgoqoKCgoAAKCAAAAAAAAAAAAAAAgAAAAIACgAAAAAAAAAAAAAAAAAAAoAAAIKICggAKAAAAIAAAAAAAAAAAAgKIgKAAAACAAAAAAAAAAAAACgAAAgAAAAAIAAACgAAAAAAAAAAAAgAAAIADrbZAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAFAAAAAAAABEAGaCUGaDNBmggICAAoKKqCgoKAACgAgAAAAAAAAAAAAAIAAAACAAoAAAAAAAAAAAAAAAAAAAAKAAggooICggKAAAAAIAAAAAAAAAAAACAAAAAAAIAAAAAAAAAAAAKAAACAAAAAAgAAAKAAAAAAAAAAACAAAAgAKDqbZBQAAAAAQAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAFAAAAAAAAQQAGaCUGaDNBmgyACAAoKiqCgoKAACgAAgAAAAAAAAAAAAIAAAACAAAoAAAAAAAAAAAAAAAAAAAAAACKKACAoAAAAAAgAAAAAAAAAAAAAIAAAAAAAgAAAAAAAAAAAoAAAAIAAAAACAAAoAAAAAAAAAAIAAACAAAoOptAAAFBAAABAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAUAAAAAAAABBAQEoM0GaDNBKDIAIACiqgsBQUFAABQAAAQAAAAAAAAAAAEAAAABAAAUAAAAAAAAAAAAAAAAAAAAAABAFAAFAAAAAAAEAAAAAAAAAAAABAAAAAAQAFQAAAAAAAAAAUAAAAEAAAAABAAAUAAAAAAAAAEAAABFABABQdbaAAAAAIAAIAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACgAAAAAAAAIICCpRGaDNBmglBkAEABRVQWAoKCgAAoAAAAIAAAAAAAAAACAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAgCgCgAAAAAAAAACAAAAAAAAAAAAAgAAAAIAAAgoAAAAAAAAAKAAACAAAAAgAAAKAAAAAAACAAAAAKIAAgAA7G0AAAAAAQAAQAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAFAAAAAAAAAQQEoqURmgzQZoM0EBAAAUVUFgKCgoAKAAAAAACAAAAAAAAAAgAAAAIAAAACgAAAAAAAAAAAAAAAAAAAAICqAICgAAAAAAAACAAAAAAAAAAAAAgAAAAIAAgAoAAAAAAAAKAACAAAAAAgAAAKAAAAAACAAAAAAKIAAAgA7G0AAAAAAQAAQAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAFAAAAAAAAAQQEoqURmgzQZoM0EBAAAUVUFgKCgoAKAAAAAACAAAAAAAAAAgAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAIoAoAAAAAAAAAAAAgAAAAAAAAAAAIAAAAACAAAqAAAAAAAAAAAAAAAAACAAAAoAAAAAIAAAAAAAogACAADsbQAAAAAABABAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAUAAAAAAAABBBUojNBmgzQSgzQQEAABRVBUFgKCgAoAAAAAAIAAAAAAAACAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAgAAAAAAAAAAAIAAAAACAAAAIKAAAAAAAAAAAAAACAAAoAAAAAAIAAAAAAACKACAADsbQAAAAAAABABAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAUAAAAAAAAAEQAZoJQZoM0GaCUEBAAAUUBpBQUFABQAAAAAAQAAAAAAAEAAAAAABAAAAAAUAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAABAAAAAAAAAAAAQAAAAAAEAQFBBQAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAEAAAB2NoAAAAAAAAAgAgAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAKAAAAAAAAAggICUGaDNBmglBmggAAAAqg1EFgKCgAoAAAAAAAIAAAAACAAAAAAAAAgAAAKAAAAAAAAAAAAAAACggAAACKKAAAAAAAAAAAAAAAIAAAAAAAAAAAACAAAAAAgAAACCgAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAOttAAAAAAAAAAAEEAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAABQAAAAAAAAEEBKCUGaDNBmgzQQEABAUAVUGgWAoKACgAAAAAAAgAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAIAAAAACAAAIKAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAA620EBQAAAAAAAAAAAABBAAUEAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAABQAAAAAAAEAEBKDNBmgzQZoJQZABAAUAVUGoCwFBQAUAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAEAAAAAAAAAAAABAAAAAAQAAFAQAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAHW0goAAAAAAAAAAAAAAAAAgAAgAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAKAAAAAAAAgAgJQZoM0GaDNBmggIAACgCqg1AWAoKACgAAAAAAAgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAOtpABQAAAAAAAAAAAAAAAABAAABAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAUAAAAAAABBAAZoJQYoM0EoM0EBAAAUAVYg1AWAoKACgAAAAAAAAgAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAOxpEAAAUAAAAAAAAAAAAAAAAAQAAQAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAFAAAAAAAAAQQEBKDNBmgzQZoJQQEAABRQFiDUBYCgoAKAAAAAAAACAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAA7GkAAQABQAAAAAAAAAAAAAAAABABAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAUAAAAAAAABBAQEoM0GaDNBmggICAAAoAqxBqAsBQUAFAAAAAAAAABAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAQAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAdjSAAAIAAoAAAAAAAAAAAAAAAAAggAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAKAAAAAAAAAggJQSgzQZoM0GaDIAIAACgCtRBYCgoKACgAAAAAAAAAgAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAICiICgAAAAAAACAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAIAAAAAAAAAAAADsaQAAABAAFAAAAAAAAAAAAAAAAAEEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAABQAAAAAAAAEEBKDNBKDFBmglBkAEAABQBWkFgKCgoKAAAAAAAAAACAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAgAAAgCgAAAAAAACAAAAAAAAAAAAgAACACgAAAAAAAAAAAAAAAgAAAAAAAAAAAOxpAAAAAEAUAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAAAAAAAAQAQEoM0GaDNBmglBkAEAABQUUQaBYCgoKAAAAAAAAAAACAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAgAAKAAAIAAAAAAAACAAAAAAAAAgAAAACACgAAAAAAAAAAAAAAgAAAAAAAAAAAOxpAAAAAAEAUAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAFAAAAAAAAAQAQEoM0GaDNBmgzQQAEAABQUUQagLAUFBQAAAAAAAAAAAQAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAQAAAAFAAAAAAAAAQAAAAAAAFAAAEAAAAAAAABAAAAAAQAAAABAABQAAAAAAAAAAAAAAQAAAAAFAAAAB1tIAAAAAAAAigAAAAAAAAAAAAAAAAAAAAIAgAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAoAAAAAAAAAIgAzQSgzQZoM0GaCAAgAKACiiDUBYCgoKAAAAAAAAAAACAAAAAAAAgAAAAAAIACgAAAAAAAAAAACgAAAAAAIAAAAAAACgAAAAAAAIAAAAAACgAAAACAAAAAAAAAgAAAAIAAAAAAgAAoAAAAAAAAAAAAAAIAACgAAAAAA62kAAAAAAAAAFAEAAAAAAAAAAAAAAAAAAAAEQAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAUAAAAAAAAAEQAZoM0GaCUGaDIIAAAAAKqADUBYCgoKAAAAAAAAAAACAAAAAAAAAgAAAAIAACgAAAAAAAAACgAAAAAIAAAAAAAAAAAACgAAAAAAAIAAAACggKAAAAIAAAAAAACAAAAAgAAAAACAACgAAAAAAAAAAAAAAAAAAAAAAAA62kAAAAAAAAAAFAAAEAAAAAAAAAAAAAAAAAAEQAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAUAAAAAAAAAEQQEoM0GaDNBKDIIAAAAAKqCgsBQUFBQAAAAAAAAAAAQAAAAAAAAEAAAAAAAAAAAAAAAAAFAAAAAAQAAAAAAAAAAAAAAAAFAAAAQAAAAAAAFBAUAAAQAAAAAAAEAAAABAAAAAAEAAAFAAAAAAAAAAAAAAAAAAAAAAB1tIAAAAAAAAAAAKAAAAIAAAAAAAAAAAAAAAAAIgAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAoAAAAAAAAAAIgAzQSgzQZoM0GQAQAAABFUFBQUFBQUAAAAAAAAAAAEAAAAAAAAABAAAAAAAAAAAAAAABQAAAAAEAAAAAAABAUAAAAAAAAAFAAQAAAAAAAAAAAAFAAAEAAAAAABAAAAAQAAAAABAAABQAAAAAAAAAAAAAAAAAAAAAdbSAAAAAAAAAAAAACgAACAAAAAAAAAAAAAAAAggAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAKAAAAAAAAAAAggM0EoM0GaDNBAQEAAAFEFBQWAoKCgoAAAAAAAAAAAAIAAAAAAAAACAAAAAAAAAAAAAACgAAAAIAAAAAAACAAAAoAAAAAAAAKgAAAAAgAAAAKAAoAAAAAgAAAAAAIAAAACAAAAAAIAAAKAAAAAAAAAAAAAAAAAAAADraQAAAAAAAAAAAAAAAUEBREBQAAAAAAAAAAAEAQAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAUAAAAAAAAAABBASgzQZoM0GaCUEBAAABVQAUFBQUFBQAAAAAAAAAAAAQAAAAAAAAAAEAAAAAAAAAAAAFAAAAQAAAAAAAAAEAAABQAAAAAAAAEFAAAABAAAAAAUABQAAABAAAAAAAEEAUAAAQAAAABAAAABQAAAAAAAAAAAAAAAAAAAdjSIAAAAAAAAAAAAAAAAAACKAAAAAAAAAAAAgCAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACgAAAAAAAAAAAIICUGaDNBmgzQSggIAAAKqACgoKCgoKAAAAAAAAAAAACAAAAAAAAAAAAAgAAAAAAAAAAoAACAAAAAAAAAAgAAAAKAAAAAAAAAgAoAAIAAAAAAACgAKAAAIAAAAAAAggACgAACAAAAAIAAAKAAAAAAAAAAAAAAAAAAADsaQBAAAAAAAAAAAAAAAAAAQBQAAAAAAAAAEAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAUAAAAAAAAAAABBASgzQZoM0GaCUEBAAABVQAUFBoFABQAAAAAAAAAAAQAAAAAAAAAAAAAAAEAAAAAAAFAAAQAAAAAAAAAAEAAAABQAAAAAAAAEAAAAAAAAAAAAAABQAAAAAAAAAAQARQQFAAAEAAAAQAAAUAAAAAAAAAAAAAAAAAAAHY0gACAAAAAAAAAAAAAAAAAgCgAAAAAAAAAIAgAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAoAAAAAAAAAAACCCpQZojNBmgzQSggIAAAKqACgoNAoAKAAAAAAAAAAACAAAAAAAAAAAAAAAAgAAAAAAAoCAAAAAAAAAAAAAAgAAKAAAAAAAAAAgAAAAAAAAAAAAAAKAAAAAAAAAAACCAKAAAAAIAAAgAoAAAAAAAAAAAAAAAAAAAAAOxpAAAEAAAAAAAAAAAAAAAABFAAAAAAAAAQBAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAABQAAAAAAAAAAAEEFSgzQZojNBmglBAQAAAVUAFBQaBQAUAAAAAAAAAAAEAAAAAAAAAAAAAAAABAAAAABQAEAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAFAAAAAAAAAAAAAAAEQFAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAB2NIAAAAgAAAAAAAAAAAAAAAIoAAAAAAAACAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAKAAAAAAAAAAAAggqUGaDNEZoM0EoICAAACqgAoKDQKACgAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAKAAgAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAADsaQAAAAAABAAAAAAAAAAAAQBQAAAAAAAAEAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAUAAAAAAAAAABABBUoM0GaIzQZoJQQEAAFAVABQUGgUAFAAAAAAAAAABAAAAAAAAAAAAAAAAAAQAAAAUAABAAAAAQAFAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAFAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAdjSAAAAAAAAIAAAAAAAAAACKAAAAAAAAAgACAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACgAAAAAAAAAAAIAIKlBmgzQZojNBKCAgAAoCoAKCg0CgAoAAAAAAAAAAAIAAAAAAAAAAAAAAAAACACgAAAAIAAACAAAAoAAAAAAAAAAAAAAAAAACAoIAAAAAAACgAACAAAoAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAA7GkAAAAAAAAQAAAAAAAAAAEUAAAAAAABAAAEAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAFAAAAAAAAAAAAQBUBKDNBmgzRGaCUEFQQFAAEFBQagKCgAoAAAAAAAAAAAIAAAAAAAAAAAAAAAAKAgAAAAAAIAAACAAAAoAAAAAAAAAAAAAAAAAAACAoIAAAAAAACgACAAAAoAAAAAAAAIAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAA7GkAAAAAAAAQAAAAAAAAAAEUAAAAAAABAUEAQAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAAAAAAAAAABABBUoM0GaDNBmiJQQVAAAAAVBQagLAUAFAAAAAAAAAABAAAAAAAAAAAAAAAAABQEAAAAAABAAAAQAAFAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAFAAEAAAABQAAAAQAAAAAAAAAAAAABBVABBAAAAAAAAAAAAAAAAAAAAdjSAAAAAAAAIAAAAAAAAACAKAAAAAAAAAgACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAACgAAAAAAAAAAAIoCAlBmgzQZoM0EoICAAAAAqCwGgUFABQAAAAAAAAAAQAAAAAAAAAAAAAAAAAUABAAAAAAQAAAAAAAAAAAAAAAFAAABAAAAAAEBQQFBAAAAAAAUAAAAQAAAAAAAAAAAAAAAAAAAAAAAFAAQAQAAAAAAAAAAAAAAAAAAHY0gAAAAAACAAAAAAAAAAAigAAAAAAAAAIAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAoAAAAAAAAAAACKAgJQZoM0GaDNBKCAgAAAKAgoNQFBQAUAUAAAAEAAAAQAAAAAAAAAAAAAAAAAUAABAAAAAAQAAAAAAAAAAAAAAFAAABAAAAAAAAAEAAABQQAAAFAAAAAAAAAEAAAAAAAAAAAAAAAAABUBQAQQAAAAAAAAAAAAAAAAAAHY0gAAAAACAAAAAAAAAAAAigAAAAAAAAAIAAgAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAoAAAAAAAAAAACKAgJQZoM0GaDNBKCAgAAAKAg0CwFBQAUUAAAAAAEAAQAAAAAAAAAAAAAAAAAVBAVQQAAAAAAEAAAAAAAAAAAAAABQAAAQAAAAABAUEBQAAAAAAQFAAAAAAABAUEEUAAAAAAAAAAAAAAAAAUBAAABAAAAAAAAAAAAAAAAAAdjSAAAAAAIAAAAAAAAAAACKAAAAAAAAAAgKCAIAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAKAAAAAAAAAAAAigICUGaDNBmgzQZoIAAAACgINAoKCgCqAAAAAAAAAIgAAAAAAAAAAAAAAoAACAAoIAAAAAACAAAAAAAAAAAAAAAAoAAIAAAAAAAAAgAKAAAAAAAAAAAAACAAACKAAAAAAAAAAAAAAAKgKCAAAACAAAAAAAAAAAAAAAAA7GkAAAAAQAAAAAAAAAAAAEUAAAAAAAAAABAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAFAAAAAAAAAAAQBQEBKDNBmgzQZoM0EAAAABQEGoCgoKKAoAAAAAAAAIAIAAAAAAAAAAAAAACgAAAAAIAAAAAACAAAAAAAAAAAAAAAAoIAAAAAAAgKACAAoAAAAAAAAAAAIAAAAAIAoAAAAAAAAAAAAAIKAoIAAAAAIAAAAAAAAAAAAAAADsaQAAAABAAAAAAAAAAAAFEAAAAAAAAAAAAEAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAAAAAAAAABAFAQGaCUGaDNBmgyCAAAAAqADUBQUFFAUAAAAAAAAEAAAEBQQAFABAUEBQAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAEBQAAAAAAAAAAAAQAAAAAAFEAAAAAAAAAAAAAQAUBQQAAAAAAAAQAAAAAAAAAAAAHY0gAAACAAAAAAAAAAAAAigAAAAAAAAAAAAIAgAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAoAAAAAAAAAACAKAgM0EoMUGaCUGQQAAAAFQUFBQUFFAUAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBQAAEAAAAAAAEUAAAAAAAAAAAAEAFAAAAAAAAAAABAAAAAAAAAAAAdjSAAAAIAAAAAAAAAAAACKAAAAAAAAAAAAAAiAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAACgAAAAAAAAAAAIAoCAzQZoM0GaCUGQQAAAAFQUFBYCgooCgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAIAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAKAgAAAAAAKAAAACAoAgAAAAACACgAAAAAAAAAAAAgAAAAAAAAAAOxpAAAEAAAAAAAAAAAAAAUQAAAAAAAAAAAAAEEAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAABQAAAAAAAAAAAEAUBAZoM0GaDNBKDIIAAAACoKCgoKKoAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAqAAAAAAAAoICggAAKAIAAAAgKCACgAAAAAAAAAAAgAAAAAAAAAAOxpAAAEAAAAAAAAAAAAAAUQAAAAAAAAAAAAAEEAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAABQAAAAAAAAAAEAUABKDNBmgzQZoJQZABAAAAVBQUFBRVABQAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAFQAAAAAAAAFBAAAUAAAQAAABAAABQAAAAAAAAAAAQAAAAAAAAAHY0gAAACAAAAAAAAAAAAAKIAAAAAAAAAAAAACCAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAoAAAAAAAAAACAKAgFBmgzQZoM0EoMgAgAAAKgoLAUFFUAFAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAQAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAVAAAAAAAAAAAAAAUAQAAABAAAAAABQAAAAAAAQAAAAAAAAAAHY0gAAACAAAAAAAAAAAAAKIAAAAAAAAAAAAAIgAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAoAAAAAAAAAACAAKgJQSgzQZoM0GaCAgAAAAKgoLAUFFUAFAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAQAAAEAAAAAAAAAABQAAAAQAAAAAAAAAAAAAAAEAAAAAEBQAAABBQAAAAAAAAAAAFAAAEAAAQAAAAAAAAUAAAAAEAAAAAAAAAAB2NIAAAAgAAAAAAAAAAAACiAAAAAAAAAAAAACIAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAKAAAAAAAAAAAgACoCUEoM0GaDNBmggIAAAACoKCwFBRVABQAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAEAAABAAAQAFAAAABQAAAAAAQAAAAAAAAAAAAAEAAAABBAAFFAAAEFAAAAAAAAAAAAAUAAAQBAAAAAAAAAAABQAAQAAAAAAAAAAAHY0gAAACAAAAAAAAAAAAAigAAAAAAAAAAAAAIgAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAoAAAAAAAAAACAAKgJQZoM0GaDNBKCAgAICgAqCgsBQUVQAUAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAABAAAQAAEAAABQAAAUAAAAAAEAAAAAAAAAAAAAABAAAAQQABQBQABABQAAAAAAAAAAAAFAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAdjSAAAAIAAAAAAAAAAAAogAAAAAAAAAAAAAAiAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACgAAAAAAAAAAIoACAlBmgzQZoM0EoMgAgAAKCoKCwFBRVABQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAABAAAQAAAFAAABQAAAAAAQAAAAAAAAABAUAAAQAAAAEEBVEBQABABQAAAAAAAAAAAFAAAABABAAAAAAAAAAAAAAAAAAAAAAAAAdjSAAAAIAAAAAAAAAAACKAAAAAAAAAAAAAAgCAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACgAAAAAAAAAAAIoACAlBmgzQZoM0GaCAgAAAKCoLAWA0AKoAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAgAAAIAACAAAAoAAAKAAAAAACAAAAAAAAAAICgAACAAAAAACAoAAAgAoAAAAAAAAAAAACgAAgAAAgAAAAAAAAAAAAAAAAAAAAAAAOxpAAAEAAAAAAAAAAAUAQAAAAAAAAAAAAAAQBAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAABQAAAAAAAAAABRAABAZoJQZoM0GaDNBAQAAAFBUFgLAaAFUAFAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAQAAQBBQAAEAABQAAAUAAAAAAEAAABAAAUAAAAABAABAFAAAAAAABAABQAAAAAAAAAAAAFBAUEAAAAEAAAAAAAAAAAAAAAAAAAAAAB2NIAAAgAAAAAAAAAACiAAAAAAAAAAAAAAACAAIAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAKIAAIDNBmgzQZoM0EoICAAAAoLEFgNAoKKAAoAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACAAACAIKAAAAAAAAAoAAAAAAIAACAAAAoAAAAAACAACAAKAAAAACAACgAAAAAAAAAAAAAAKCAAAAACAAAAAAAAAAAAAAAAAAAAAA7GkAAQAAAAAAAAAABQBAAAAAAAAAAAAAAABAAEAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAFEAEABmgzQZoM0GaCUGQAAAAUFiCwFgNAooACgAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAICggKgAAAAAAAAAKAAAAAACAAAgAAAAKAAAAAgKCAACAAKAAACAAACgAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAKCAAAAAAA7GkAQAAAAAAAAAAABRAAAAAAAAAAAAAAAABAAEAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAFEAEBKCUGaDNBmgzQZoIACAoAKCoLAWA0AKoAKAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAgAAAKAgAAAAAAAAKAAAAACAAAAgAAAAKAAAAgAKACAACAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAACgAAAgAAAAOxpAEAAAAAAAAAAAAUQAAAAAAAAAAAAAAAAAQABAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAABQAAAAAAAAABQBABASglBmgxQZoM0EoICAAAoKCxBYCgsBRVABQAAAAAAAAAAAAQAAAAAAAAAAAAAAAEAAAAEAABQAEAAAAAAABQAAAAAAQAAEAAAAABQAAAAAAEBQQAAQAAAAAAFAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAUAAAEAAAAB2NIgAAAAAAAAAAACgCAAAAAAAAAAAAAAAACAAAAIAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAKAIAICUGaDNBmgzQZoJQQEAABQAVBqAsBYCiqAACgAAAAAAAAAAAgAAAAAAAAAAAAAIAAAAIAAAACgAAIAAAAAACgAAAAAAgAAIAAAAACgAAAAAAIAAAAAAAAIAACgAAAAgAAKACAAAAoAAAAAAIAAAAAAAAAAAAACgAAAAgAAAOtpAAAAAAAAAAAABRAAAAAAAAAAAAAAAAABAAAAEAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAFAEAEBKDNBmgzQYoJQZABAAAAUFQWA1AWAoKKAAoAAAAAAAAAAAIAAAAAAAAAAAAACAAAAAACAAoAAACAAAAAAAAoAAAAAIAAACAAAAoAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAACgAAAAAgAAOtpAAAAAAAAAAAABRAAAAAAAAAAAAAAAAABAAAAEAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAFEAAEBmgzQZoM0GaDNBAQAAAAFBUFgNQFgKCigAKAAAAAAAAAAAACAAAAAAAAAAAAgAAgKCAAAAAAoAACAAAAAAAAAoAAAAIAAACAAAAoAAAAAAAAAAACAAAAAAAACAAAAAAAAAAAKACAAACggAAAAAAAAAAAAAAAKAAAAACAAA62kAAAAAAAAAAAAFEAAAAAAAAAAAAAAAAAEAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAUQAQEoJQZoM0GKDNBKCAgAAAAKCoLAagLAUFFAAUAAAAAAAAAAAAEAAAAAAAAAAABAABAUEAAAAAABQAEAAAAAAAAABQAAAQAAAAEABQAAAAAAAAAAAAEAAAAAAAEAAAAAAAAAAAUAAEAAAAAAAAAAAAAAAAAAAAAAFAAABAAAdbSAAAAAAAAAAAACiAAAAAAAAAAAAAAAAACAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAigICUGaDNBmgzQZoJQQEAAAABQVBYDUBYCgooACgAAAAAAAAAAAAAAgAAAAAAAAAIAAAAAAIAAAACgAAIAAAAAAAAACgAAgAAAAIACgAAAAAAAAAAAAAIAAAAAIAAAAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAOxpEAAAAAAAAAAAAUAQAAAAAAAAAAAAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAFAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAABRABAZoJQZoMUGaCUGQQAAAAAFBUFgNQFgKCigAKACAAAoAAAAAAAAAAAAAAIAAAAACAAAAACAoIAACgAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAgAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAoOtpEAAAAAAAAAAAAABFAAAAAAAAAAAAAAAQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAFAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAABQBBAQEoM0GaDNBmgzQQEAAAAABQVBYDUBYCgooACggAAAAKAAAAAAAAAAAAACAAAAAAgAAgAKCAoICgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAoOtpEAAAAAAAAAAAAAAUQAAAAAAAAAAAAAAQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAFAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAABQBBASglBmgzQYoJQZoICAAAAAAoKgsBqAsBQUUAAAAAAABQAAAAAAAAAAAAAAQAAAAEAAAEBQQFBAAAUAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAEAAAAAAAAUEAABQAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAUHU0gAAAAAAAAAAAAAAogAAAAAAAAAAAAAAgAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAACgIglBmgzQZoM0GaCAgIAAAACgIKDUBYCwFBRQAAAAAAAAFAAAAAAAAAAAAABAAAAAQAAAAAQFBAAAAUAAABAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAFAAAAAAQAAQAABQAQFAABAAUAAAAAEAAAAAAAAAAAAAAAAAAAEAABQAAAdbSAAAAAAAAAAAAAACiAAAAAAAAAAAAAACAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAoAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAKAiCUGaDNBmgzQZoICAgAAAAKAgoNQFgKCgooAAAAAAAACgAAAAAAAAAAAAAgAAAAIAAAICggAAAAKAAAAAgAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAgAAAAAAAACAAAoAAAAIAAAAAAAAAAAAAAAAAAIAAAACgAA62kAAAAAAAAAAAAAAFEAAAAAAAAAAAAAAEAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAFAQBBmgzQZoM0GaCUEBAQAAAAFBUFBYCwGgAUUAAAAAAAABQAAAAAAAAQAFAABAAAAAAQAAAAAAQAFAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAEAAAAABQAAAAAAAAAAQAAAAABAAAAAUAAAEAAAAAAAAAAAAAAAAAAEAAAAABQAdbSAAAAAAAAAAAACiAAAAAAAAAAAAAAAACAoIAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAKAgJUEoM0GaDNBmglBAQAEAABQAVBQWA1AUFAFAAAAAAAAAUAAAAAAAEAAAABQQAAAAAEAAAAAEABQFAABAAAAAQAAAAAAEABQAAAAAAAAAAAQAAAAAAFAAAAAAAAAAABAAAAEAAAAAAABQQAAAAAAAAAAAAAAAAAAAAQAAAAFAB1tIAAAAAAAAKAIAAAAAAAAAAAAAAAAAAIAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAKgJUEoM0GaDNBmglBAQAAAAABBQWA1AWAoKKAAoIAAAAAACgAAAAAAAgAAAAAAAAAAAIAAAAICgAAKAAACAAAAAAgAAAIAAAACgAAAAAAAAAAgAAAAKAAAAAAAAAAAAAACAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACgA62kAAAAAAFEAAAAAAAAAAAAAAAAAAAEAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAFQEqDNBKDFBmglBkAEAAAAABUFBYCwFgKCigKACAAAAAAAoAAAAAAIAAAAAAAAAAAAACAAAAAAAoAAAAIAAAAAACAAAAgAAAKAAAAAAAAAACAAAoAAAAAAAAAAAAAAAAAIAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAKADraQAAAAUQAAAAAAAAAAAAAAAAAAQAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAERUoM0GaDNBmglBkAEAAAABUAFBQUFBQUUBQAQAAAAAAAFAAAAABAAAAAAAAAAAAAAQAAAFEBQAAAAEAAAAAAABAAAAQQAAFAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAUAAAAEAAAAAAAAAAAAAAB1tIAAAKIAAAAAAAAAAAAAAAAAIAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACIqUGaDNBmgzQSgyAAAAAAgAAoKCgoKCigKACAAAAAAAAoAAAAAIAAAAIACgAAAAAAIAICgKAAICgIAAAAAAAAAACAAAggAAKAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIgAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAACAAA7GkAAFEAAAAAAAAAAAAAAAAAEAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAABEGaKlBmgzQZoM0EAAAAAQAAUAFBQUFFUAFAABAAAAAAAUAAAAAEAAAEAAAABQAAAAAEAABQAAAAQAAAAAAAAAAEAABABAAUABQAAAUEAAAAAAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAFAAAAAAAABAAAAAAAAAQAAAHY0gACKAAAAAAAAAAAAAAAAAgAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAgzRUoMUEoM0GQAQAAABBQAAUAFBQUVQAUAAEAAAAABQAAAAAAQAAEEAAAUAAAUAAEAQUEBVAAABAAAAAAAAAAAAAQAAEEABQAFAAABQAQAAAAAAAAAAAAAAAAAAAAAAAAEQAUAAAAAAAAAAAAAAAAAAAAAEAAAAAAABAAAAAdjSACiAAAAAAAAAAAAAAAACAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAgIglFZoM0GaCUGQAQAAFQAAAAUFABQUVQAUAAEAAAAABQAAAAAAQAARAAAAAUAAUAEAAQAAVQAAAQAAAAAAAAAAAAEAABBAAUBQAAAUAAAEAAAAAAAAAAAAAAAAAAAAAAABEAFAAAAAAAAAAAAAAAAAAAAABAAAAAAAQAAAAAH/2Q==", + skyBoxRight: "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAFA3PEY8MlBGQUZaVVBfeMiCeG5uePWvuZHI////////////////////////////////////////////////////2wBDAVVaWnhpeOuCguv/////////////////////////////////////////////////////////////////////////wAARCAgACAADAREAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAAECA//EABUQAQEAAAAAAAAAAAAAAAAAAAAB/8QAFwEBAQEBAAAAAAAAAAAAAAAAAAECA//EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhEDEQA/ADKgAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgCgACAAAACKCqKACggAICCIogAIAAAAAAAAAAAAAAIAAAAAACggKoAKDQKCgoAKAACgAAAKgACAAAAAAAAgAAAACgCAAAAAAAAgAAAAAAAIAAAAAAAACAAAAACAoAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAoAAgAAAAigAqigAAAgIIgIoAAgAAAAAAAAAAAAAgAAAAAAKAAoAKDQKCgoAKAACgAAAKgACAAAAAAAAgAAAACgCAAAAAAAAgAAAAAAIAAAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAOrk2AAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAKAAIAAAIoAKooAAAICCICKAAIAAAAAAAAAAAAAIAAAAACgAAKACgoNAoKACgAAoAAAgoAAgAAAAAAAIAAAAAoAgAAAAAAAIAAAAAACAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgCgACAAAACKCqAKAACAgiAKIAACAAAAAAAAAAAAACAAAAAoAACgAoKDQKCgAoAAKAAAIKAAIAAAAAAACAAAAAKAIAAAAAAACAAAAAAAgAAAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAKAAIAAAAIoCigoAAIACCIogAAIAAAAAAAAAAAAAIAAAACgAAKACgoNAoAKCgAAoAAAgoAAgAAAAAAAIAAAAoAAgAAAAAAAIAAAAAACAAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAoAAgAAAigAqgCgAAgIIgCiAAAgAAAAAAAAAAAAgAAAAKAAAoAKCg0CgAoKAACgAACCgACAAAAAAAAgAAACgACAAAAAAAAgAAAAAAIAAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAOrk2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAigACAAAACKCqAKAACAggCKIAACAAAAAAAAAAAACAAAAAoAACgAoKDQKACgoAAKAAAIKAAIAAAAAAACAAAAKAAIAAAAAACAAAAAAAAgAAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACKAAAIAAAIoAKooAAAICCIoAgAAIAAAAAAAAAAAIAAAACgAAKACgoNAoAKCgAAoAACoAAAgAAAAAAAIAAAAoAAgAAAAAAIAAAAAAACAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIoAAAgAAAigAqigAAAAgiAiiAAAgAAAAAAAAAAAgAAAKAAAAoAKCg0CgAoKAACgAAKgAACAAAAAAAAgAAACgACAAAAAAAgAAAAAAAIAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAOrk2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAigACAAAACKCqKACgAgIIgIoAgAAIAAAAAAAAAAAAIACgAAAKACgoNAoAKCgAAoAACoAAAgAAAAAAIAAAAAoAAgAAAAAAIAAAAAAACAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAigAACAAACKCgKKCgAAgIIiiAgAAIAAAAAAAAAAAAICgAgKAAoAKCgoNAAoKAACgAAKgAACAAAAAAAgAAAACgACAAAAAAAgAAAAAAAIAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAOrk2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAACAKAAIAAACiAKooKAAACCIDKgCAAgAAAAAAAAAAAAAAgAKAAoAKCgoNAAoKAACgAAKgAACAAAAAAAgAAAACgCAAAAAAAAgAAAAAAAIAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAOrk2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAACAKAAIAAACiAKCqKCgAgIIlBFEBAAQAAAAAAAAAAAAAAQFAAAUAFBQUGgAUFAABQAAFQAABAAAAAAAQAAAABQBAAAAAAAAQAAAAAAEAAAAAAAAABAAAAAAAAAAQAAAAAAAAAAAEAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAHVybAAAAAAAAAAAAAAAAAAAAAUAAAAAEAAAAAAAAAAAAAAAAAAAAAABQAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAEAAUAAQAAFAEUFUUFAABAZoiKICAAAgAAAAAAAAAAAAAgKAAAoAKCgoKCgoKAACgAAKgAACAAAAAAAgAAACgACAAAAAAAgAAAAAAAIAAAAAAAAACAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAOrk2AAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAIAoAAgAAAKIoKooKAACAlESgyoAgAIAAAAAAAAAAAAAICgAAKACgoKCgoKCgAAoAACgIAAgAAAAAAIAAAAoAAgAAAAAAIAAAAAAACAAAAAAAAAAgAAAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAACAAKAAIAACiKCgqigAAgJREoIogIACAAAAAAAAAAAAAAAAAAoAKCgoKCgoKAACgAAKAgACAAAAAAAgAAAACgCAAAAAAAgAAAAAAAIAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAOrk2AAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAIAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAIAoAAgAAKAIoKooKAACCM0EUQEABAAAAAAAAAAAAAAAAAAUAFBQUFBQUFAABQAAFAQABAAAAAAAQAAAABQBAAAAAAAQAAAAAAEAAAAAAAAABAAAAAAAAAAAQAAAAAAAAAAEAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAHVybAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAEAAAAAAAAAAAAAAAAABQAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAUAQAAFAEUFUUFAABASiM0EUQAEAAAAAAAAAAAAAAAAABQAUFBQUFBQUAAFAAAUBAAEAAAAAABAAAAAFAEAAAAAABAAAAAAAQAAAAAAAAAEAAAAAAAAAABAAAAAAAAAAAQAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAdXJsAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAQAAAAAAAAAAAAAAAAFAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBQABAAUARQVRQUAAEBKIlBlQBAAQAAAAAAAAAAAAAAAAFABQUFBQUFBQAAUAABQEAAQAAAAAAEAAAAAUAQAAAAAAEAAAAAABAAAAAAAAAAQAAAAAAAAAAEAAAAAAAAAABAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAB1cmwAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAABAAAAAAAAAAAAAAAAUAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAABAFAAAEBQBFBQVQBQAQEoiUEUQEABAAAAAAAAAAAAAAAAAUAFBQUFBQUFAABQAAFAQABAAAAAAAQAAAABQBAAAAAAAQAAAAAAEAAAAAAAABAAAAAAAAAAAAQAAAAAAAAAAEAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAHVybAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAEAAAAAAAAAAAAAAABQAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAEAUAAAQAFAEUFUUFABAAZoiKICAAgAAAAAAAAAAAAAAAAKACgoKCgoKCgAAoAACgIAAgAAAAAAIAAAAAogAAAAAAAIAAAAAACAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAKAACAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAIAoAAgAKAIoKooKAACAgjNBFEAABAAAAAAAAAAAAAAAAUAFBQUFBQUFAABQAAFAQABAAAAAAAQAAAABRAAAAAAAQAAAAAAAEAAAAAAAABAAAAAAAAAAAAQAAAAAAAAAAEAAAAAAAAAAAABAUAEAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAdXJsAAAAAAAAAAABQAAAQAAAAAAAAAAAFAAAAAABAAAAAAAAAAAAAAAUAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAFAAAEBQBFBQVQBQAQEESgiiAgAIAAAAAAAAAAAAAAACgAoKCgoKCgoAAKAAAoCAAIAAAAACAAAAAAKIAAAAAACAAAAAAAAgAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAA6uTYAAAAAAAAAAAACgAAgAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACKAAAICgACKCqKAAACAgiKICAAgAAAAAAAAAAAAAAAKACgoKCgoKCgAAoAACgIAAgAAAAAIAAAAAAogAAAAAAIAAAAAAACAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACKAAAAICgCKCqAKAACAgiAiiAAAgAAAAAAAAAAAAAAKACgoKCgoKCgAAoAACgIAAgAAAAAIAAAAAAogAAAAAAIAAAAAAACAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACKAAAICgCAKCqKAACACIDKgCAAgAAAAAAAAAAAAAAKACgoKCgoKCgAAoAACgIAAgAAAAAIAAAAAAogAAAAAAIAAAAAAACAAAAAAAAAgAAAAAAAAAAIAAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKACAAAAAAAAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACKAAAAAAAigqgCgAAgIIgIogAIAAAAAAAAAAAAAACgAoKCgoKCgoAAKAAAoCAAIAAAAACAAAAAKAIAAAAAACAAAAAAAAgAAAAAAAAIAAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAACiAAAAgKAIoAKooAAICCICKIAACAAAAAAAAAAAAAAoAKCgoKCgoKAACgAAKAgACAAAAAAgAAAACgCAAAAAAAgAAAAAAAIAAAAAAACAAAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAOrk2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAACKAAAAAAAigqgCgAgAiAiiAgAIAAAAAAAAAAAAACgAoKCgoKCgoAAKAAAoCAAIAAAAACAAAAAKAIAAAAAACAAAAAAAgAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAACiAAAAAACKAooKAACAgiKICAAgAAAAAAAAAAAAAKACgoKCgoKCgAAoAACgIAAgAAAAAIAAAAAoAgAAAAAAIAAAAAACAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAigAAAAAIoCigoAAICCIogIAACAAAAAAAAAAAAAoAKCgoKCgoKAACgAAKAgACAAAAAAgAAAACgCAAAAAAAgAAAAAAIAAAAAAAACAAAAAAAAAAAgAAAAAAAAAIAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAOrk2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAIAAAACgAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAIoAAAACAKCqAKACAgiKICAAAgAAAAAAAAAAAAKACgoKCgoKCgAAoAACgIAAgAAAAAIAAAAAoAgAAAAAAIAAAAAACAAAAAAAAAgAAAAAAAAAAIAAAAAAAAACAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAoAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACKAAAAAAigqgCgAgIIiiAgAAIAAAAAAAAAAAACgAoKCgoKCgoAAKAAAoCAAIAAAAACAAAAAKAIAAAAAACAAAAAAAgAAAAAAAAIAAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAIAoAAAACKAooAKCAgiKIACAAgAAAAAAAAAAAAKACgoKCgoKCgAAoAAAgoAAgAAAAAIAAAAAoAgAAAAAAIAAAAAACAAAAAAAAAgAAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAigAAAAIAqigAAAgiKICAAAgAAAAAAAAAAAAKACgoKCgoKCgAAoAAAgoAAgAAAAAIAAAAAoAgAAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAigAAAAIAqigAAAgiAiiAAgAAAAAAAAAAAAAKACgoKCgoKCgAAoAAAgoAAgAAAAAIAAAAAoAgAAAAAIAAAAAAACAAAAAAAAgAAAAAAAAAAIAAAAAAAAACAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgCgAAAAIqgCgAgAiAiiAAgAAAAAAAAAAAAAKACgoKCgoKCgAAoAAAgoAAgAAAAAIAAAAAoAgAAAAAIAAAAAAACAAAAAAAAgAAAAAAAAAAIAAAAAAAAACAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAigAAAAIAqgAACCAIogAIAAAAAAAAAAAAACgAoKCgoKCgoAAKAAAIKAAIAAAAACAAAAAKAIAAAAACAAAAAAAAgAAAAAAAIAAAAAAAAAACAAAAAAAAAAgAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAA6uTYAAAAAAACAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgCgAAAIAKKAACCIAogAIAAAAAAAAAAAAACgAoKCgoKCgoAAKAAAIKAAIAAAAACAAAAAKIAAAAAACAAAAAAAAgAAAAAAAIAAAAAAAAACAAAAAAAAAAgAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAA6uTYAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAigAAAIAKAAAAIIKIACAAAAAAAAAAAAAAoAKCgoKCgoKAACgAACCgACAAAAAAgAAAACiAAAAAAAgAAAAAAIAAAAAAAACAAAAAAAAAAgAAAAAAAAAIAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAIDs5NgAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAIoAAAACCgAAACCCiAAgAAAAAAAAAAAAAKACgoKCgoKCgAAoAAAgoAAgAAAAAIAAAAAogAAAAAAIAAAAAACAAAAAAAAAgAAAAAAAAAIAAAAAAAAACAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACAA6uTagAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAAigAAAIAKAAIAIAigACAAAAAAAAAAAAAoAKCgoKCgoKAACgAACCgACAAAAAAgAAACgCAAAAAAAgAAAAAAIAAAAAAACAAAAAAAAAAAgAAAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAIADq5NqAACAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAoAAAIAAAAAAAAAAAAACgAAAgAAAAAAAAAAIoAAACACgAACACIoAAgAAAAAAAAAAAAKACgoKCgoKCgAAoAAAgoAAgAAAAAIAAAAoAgAAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACAAA6uTagAAAgAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAKAAAAACAAAAAAAAAAAoAAAAIAAAAAAAAAAAAogAAAAgoAAAgAiKAAIAAAAAAAAAAAACgAoKCgoKCgoAAKAAAIKAAIAAAAACAAAAKAIAAAAAACAAAAAAAgAAAAAAAIAAAAAAAAACAAAAAAAAAAgAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAgAAOzk2AAAAgAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAKAAAAAAACAAAAAAAAAAoAAIAAAAAAAAAAAAAAogAAAAgoAAAAggCKAIAAAAAAAAAAAACgAoKCgoKCgoAAKAAAoCAAIAAAACAAAAAKAIAAAAAACAAAAAAAgAAAAAAAIAAAAAAAAACAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAgAAAOzk2AAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAAAAAAAAKACAAAAAAAAAAAAAAAAKIAAAIAKAAAAiAigACAAAAAAAAAAAAoAKCgoKCgoKAACgAAKAgACAAAAAgAAAACgCAAAAAAgAAAAAAAIAAAAAAACAAAAAAAAAAgAAAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAIAAADs5NgAAAAAAIAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAogAAAgAoAAAAggogAIAAAAAAAAAAACgAoKCgoKCgAoAKAAAoCAAIAAAACAAAAAKAIAAAAACAAAAAAAgAAAAAAAAIAAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAgAAAOzk2AAAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAACgCAAACCgCggAIIKIACAAAAAAAAAAAAoAKCgoKCgoAKACgAAKAgACAAAAAgAAAACgCAAAAAAgAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAIAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAIAAADs5NgAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAogAAAgCqAAIAIgIoAAgAAAAAAAAAAKACgoKCgoKACgAoAACgIAAgAAAAIAAAAAogAAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAIAAAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAA7OTYAAAAAAACAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAoAIAAAAAAogAAAgCqAAIACCIoAAgAAAAAAAAAAKACgoKCgoKACgAoAACgIAAgAAAAIAAAAAogAAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAIAAAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAACAAA7OTYAAAAAAACAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAIAAAAAoAgAAgAooAIACCCiAAgAAAAAAAAAAKACgoKCgoKACgAoAACgIAgAAAAAIAAAAAogAAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAACAAA7OTYAAAAAAACAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAAAAAAoAAIAAAAAoAgAAAgoAoIACCCiAAgAAAAAAAAAAKACgoKCgoKACgAoAACgIAgAAAAAIAAAAAogAAAAAIAAAAAAACAAAAAAAAgAAAAAAAAAIAAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACAAAA7OTYAAAAAAAACAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAAAAAAoAAIAAAAAAogAAAgAoAAAggogAIAAAAAAAAAACgAoKCgoKCgAoAKAAAoCAIAAAAACAAAAAKIAAAAACAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAOzk2AAAAAAAAAgAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAKAAACAAAAAKAIAAIAKAAAIAIigCAAAAAAAAAAAoAKCgoKCgoAKACgAKAAgCAAAAAAgAAAACiAAAAAAgAAAAAAIAAAAAAACAAAAAAAAAAgAAAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAIAAADs5NgAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoIAAAAAAAAAAAAAAAAAAAAAACgAAgAAAACgCAACACgAACACIoAAgAAAAAAAAAKACgoKCgoKACgAAoCgAIAgAAAAAIAAAAAogAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACAAAA7OTYAAAAAAAACAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAAAogAAAgoAAAgAiKAAIAAAAAAAAACgAoKCgoKCgAoAAKAoACAIAAAAACAAAAAKIAAAAACAAAAAAAgAAAAAAAIAAAAAAAAACAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAOzk2AAAAAAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAAKAIAAIAKAAIAIKIACAAAAAAAAAAoAKCgoKCgoAKAACgAKAgCAAAAAgAAAAACiAAAAAAgAAAAAAIAAAAAAACAAAAAAAAAAgAAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAIAAADs5NgAAAAAAAAAAIAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAACgCAAACCgACAAKiAAgAAAAAAAAAKACgoKCgoKACgAAoACgIAgAAAAIAAAAAAogAAAAIAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACAAAAA7OTYAAAAAAAAAAACAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAoAgAAAgoAAgACogAAIAAAAAAAACgAoKCgoKCgAoAAKAoACAIAAAACAAAAAAigAAAACAAAAAAAgAAAAAAAIAAAAAAAAACAAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAOzk2AAAAAAAAAAAAgAAAAAAAAAAAKAAAAACgAgAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAoAgAAAgoAgAAiKAAIAAAAAAAACgAoKCgoKCgAoAAKAoACAIAAAACAAAAAKIAAAAACAAAAAAAgAAAAAAAIAAAAAAAAACAAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAOzk2AAAAAAAAAAAAAgAAAAAAAAAAKAAAAACgAAgAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAACgAAAgAAACgCAAACCgCAACIoAAgAAAAAAAAKACgoKCgoKACgAAoCgAIAgAAAAIAAAAAogAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAIAAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAOrk2AAAAAAAAAAAAAAgAAAAAAAAAKAAAAACgAAgAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAACgAAAgAACgCAAACCgACAAKiAAgAAAAAAAAKACgoKCgoKACgAAoCgAIgAAAAAIAAAAACKAAAAAIAAAAAACAAAAAAAAgAAAAAAAAIAAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAIAAAAAACgAAAAAoAIAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAKAAAAAAAAAACAAAAAAAAAAAoAAAIAAAAoAgAAAgoAgACogAAIAAAAAAAACgoKCgoKCgAoAAKAoACIAAAAACAAAAAAigAAAACAAAAAAAgAAAAAAAIAAAAAAAACAAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAIAAAAAAAAAACgAAgAAACgCAAACCgACACCiAAgAAAAAAAAKCgoKCgoKACgAAoCgAIgAAAAAIAAAAAogAAAAAIAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAAAAACgAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAACiAAACCgACAAKiAAAgAAAAAAAKCgoKCgoKACgAAoCgAIgAAAAAIAAAAAogAAAAAIAAAAACAAAAAAAAgAAAAAAAAAIAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADq5NgIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAoAgAAAgoAAgCoAgAIAAAAAAACgoKCgoKCgAoAAKAoACIAAAAACAAAAAKIAAAACAAAAAAAgAAAAAAAIAAAAAAAACAAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAACgCAAACCgAACCCiAAAgAAAAAKACgoKCgoKACgAAqgAAIgAAAAAIAAAAAogAAAAIAAAAAACAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAKAIAAAIKAAAAiKAIACAAAAAAoAKCgoKCgoAKAACqAAAiAAAAAAgAAAAIoAAAAAgAAAAAIAAAAAAACAAAAAAAAAAgAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKADo5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAKAIAAIAKAAAIqAIACAAAAAAoAKCgoKCgoAKAACqAAAiAAAAAAgAAACiAAAAAAgAAAAAIAAAAAAACAAAAAAAAAAgAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAgAA6ObYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAACgCAAACCgAAAIiiAAAgAAAAKACgoKCgoKACgAAqgAAIgAAAAAIAAAAogAAAAAIAAAAACAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAIAKAADbm2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAoAgAAAgoAAACIogAAIAAAACgAoKCgoKCgAoAAKoAACIAAAAACAAAAKIAAAAACAAAAAAgAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAoACACgAAoArTm0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAoAgAAgoAAAggogAAIAAAACgAoKCgoKCgAoAAKoAACIAAAAACAAAAAigAAAACAAAAAAgAAAAAAIAAAAAAAAACAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAoACACgAoAoACgrm0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAgAAgAoAAggogAAIAAAACgAoKCgoKCgAoAAKoAACIAAAAACAAAAAigAAAACAAAAAAgAAAAAAIAAAAAAAAACAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAoAACCgAAooCgAAArm0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAgAAAgoAgACogAAIAAAACgAoKCgoKCgAoAAKoACAIAAAACAAAAAKIAAAAACAAAAAAgAAAAAAIAAAAAAAAACAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAoACCgAAoAqgAAoAADm0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAgAAgogAAAiKAAAIAAACgAoKCgoKCgAoAAKAoCAIAAAACAAAAAKIAAAAACAAAAAAgAAAAAAIAAAAAAAAACAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAoAACCgAoAoCgAoAAAKCObQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgCAACCiAAACIoAAAgAAAKACgoKCgoKACgAAKKACCAAAAAIAAAAAogAAAAAIAAAAACAAAAAAAgAAAAAAAAAIAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACgAAIKAACgCqACgAAAoAAI5tAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAAAKAIAAIAigAAIigAAACAAAoAKCgoKCgoAKAAAooAIIAAAAAgAAAACiAAAAAAgAAAAAIAAAAAACAAAAAAAAAAgAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAKAAAAgoAAKAAKoAKAAACgAAAjm0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAAoAgAAAiKAAAiKAAAAIAACgAoKCgoKACgoAACigAggAAAACAAAAAigAAAACAAAAAAAgAAAAAAIAAAAAAAACAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAoAAACCgAAoAAqgAAoAAAAKAAACObQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAACgCAACIoAAAioAAAAgAAKACgoKCgoAKCgAAKKACCAAAAAIAAAACKAAAAAIAAAAAACAAAAAAAgAAAAAAAAIAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAqAAACgACqAACgAAAAAoAAAI5tAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAKAIAAIgCgACKgAAAACAAoAKCgoKCgAoKAAAooAIIAAAAAgAAAAIoAAAAAgAAAAAAIAAAAAACAAAAAAAAAgAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAKAAAACoAAAKAAKoAAAKAAAAAAAAAAA5tAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAKAIAACCCgACCCgAAACAoAAKCgoKCgAoKAAAooAIIAAAAAgAAAAIoAAAAAgAAAAAAIAAAAAACAAAAAAAAAgAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAKAAAAAgoAAKAACigAAAKAAAAAAAAAAAA5tAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAKIAAAIigAAIigAAAAAAACgoKCgoAKCgAAKKACCAAAAAIAAAACKAAAAAIAAAAAACAAAAAAgAAAAAAAAAIAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAACgAAAAAqAACgAAAooAAACgAAAAAAAAAAAAjm0oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAKAIAAIigAAIigAAAAAAACgoKCgoAKCgAAKKACCAAAAAIAAAACKAAAAAIAAAAACAAAAAAAgAAAAAAAAAIAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAACgAAAAAAAqAACgAAAooAAACgAAAAAAAAAAAAAjm0AoAAAAAAAAAAAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAogAAiAKAAIqAAAAAAAAKCgoKCgAoKAAAooAIIAAAAAgAAAAIoAAAAAgAAAAAIAAAAAACAAAAAAAAAAgAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqAACgAAAooAAAAAAAACgAAAAAAAAAjm0AAoAAAAAAAAAAAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAogAAAiKAACogAAAAAAAKCgoKCgAoKAAAoAACAAAAAIAAAACKAAAAAIAAAAACAAAAAAAgAAAAAAAAIAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKgAAAoAAAKKAAAAAAAAAAAoAAAAAAAI5tAAKAAAAAAAAAAAAAAAAAAAAAAAACAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAKAIAAIigAAqIAAAAAAACgoKCgoAKCgAAKAAAgAAACAAAAAAigAAAACAAAAAAgAAAAAAIAAAAAAAACAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACoAAKAAAACgCgAAAAAAAAAAAAAAAAADm0AAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAKAIAAIigAAIigAAAAAACgoKCgoAKCgAAKAAAgAAACAAAAAgCgAAACAAAAAAAgAAAAAAIAAAAAAAACAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAACgIAAAKAAAAAACigAAAAAAAAAAAAAAADm0AAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAKIAAIAigAAqIAAAAAACgoKCgoAKACgAKAAAgAAACAAAAAgCgAAACAAAAAAAgAAAAAIAAAAAAAAACAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACoAAAAKAAAAAAAAKAAoAAAAAAAAAAADm0AAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAKAIAAIigAAqIAAAAAACgoKCgoAKACgAKAAAgAAACAAAAAgCgAAACAAAAAAAgAAAAAIAAAAAAAAACAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACoAAAAAAKAAAAAAAKAAAAAAAAAAAArm0AAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAAAAAKAIAAIKIAAqIAAAAAACgoKCgoAKACgAKAAAgAAACAAAAAgCgAAACAAAAAAgAAAAAAIAAAAAAAAACAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAoAAAAAAAAAKgAAAAAAAoAAAAAAAoAAAAAAAAACubQCgAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAACgACACCiAACIoAAAAAAoKCgoAKCgAoACgAAIAAAAgAAAAIAAoAAAgAAAAAIAAAAAACAAAAAAAAAAgAAAAAAIAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAKAAAAAAAAAAAgoAAAAAAAAAKAAAAKAAAAAAAArm0oAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAIAAAoAgAAiKAACogAAAAAKCgoAKCgoAKAAoAACAAAAIAAAACAKAAAAIAAAAACAAAAAAAgAAAAAAAAIAAAAAAACAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAIKAAAAAAAAAAAAAAAAAACigNObQAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAACAAAKAAIAIKIAAqIAAAAACgoKACgoKACgAKAAAgAAACAAAAAgCgAAACAAAAAAgAAAAAAIAAAAAAAACAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAACAACgAAAAAAAAAAAAAAAAA25tgAAAAAAAIAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAIAAoAAgAgogACogAAAAAKCgoAKCgoAKAAoAACAAAAIAAAACAKAAAIAAAAAACAAAAAAAgAAAAAAAAIAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAIAAAAAAKAAAAAAAAAADbm2AAAAAAAgAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAgACgACACACiACCiAAAAAoKCgAoKCgAoACgAAIAAAAgAAAAIAoAAAgAAAAAAIAAAAACAAAAAAAAAAgAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAKAAAAAAAAAAAAgAAAAAAoAAAAANubYAAAAACAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAACAAAKAAIAIKIAAqIAAAACgoKCgAoKACgAKAAAgAAACAAAAAgCgAACAAAAAAgAAAAAAIAAAAAAAAACAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAACAAACgAAA25tgAAAAIAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAIAAAoAAgAgogACogAAAAKCgoKACgoAKAAoAACAAAAIAAAACAKAAAIAAAAACAAAAAAAgAAAAAAAAAIAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAIAAAAAKDbm2AAAAgAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAKAAAIIKAIAqIAAAACgoKCgAoKACgAKAAAgAAACAAAAgACgAACAAAAAAgAAAAAAIAAAAAAAAACAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAACAAAADbm2AAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAoAAgAgogAgogAAKACgoKACgoAKAoAAACAAAAIAAACAAKAAAIAAAAACAAAAAAAgAAAAAAAAIAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAIAAANubYAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAgAgogACogAAKACgoKACgoAKAAoAACAAAAIAAACAAKAAAIAAAAACAAAAAAAgAAAAAAAAIAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAIAANubYAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAggoAgCogAAKACgoKACgoAKAAoAACAAAAIAAACAAKAAAIAAAAACAAAAAAgAAAAAAAAAIAAAAAAACAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAICjbk2AAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAIIAKIAIKIACgAoKCgAoKACgAKAAAgAAACAAAAgACgAACAAAAAAgAAAAAIAAAAAAAAACAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAANuTYAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAIAIKIAIKIACgAoKCgoAKACgAKAAAgAAACAAAAgACgAACAAAAAAgAAAAAIAAAAAAAAACAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6OTYAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAIAIKIAIKAAAAKCgoKACgAoACgAAIAAAgAAAAIAAoAAAgAAAAIAAAAAACAAAAAAAAAAgAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOjk2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgACCCiAAKgAAACgoKCgAoAKAAAoACAAAIAAAACAAAKAIAAAAACAAAAAAAgAAAAAAAAIAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAgAAAAAAACgACCACiACCgACgAoKCgAoAKAAAoACAAAIAAAACAAAKAIAAAAACAAAAAAAgAAAAAAAAIAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAACgCACCiACCgACgAoKCgAoAKAAoAAACAAIAAAACAAKAAIAAAAACAAAAAAAgAAAAAAAAIAAAAAAACAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAOjk2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAAKAIAIKIAAqAAKACgoKACgAoACgAAAIAAgAAAAIAAoAAgAAAAAIAAAAAACAAAAAAAAAgAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAA6OTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAoAAggoAgCoAAoAKCgoAKAACgKAAAAgACAAAAAgACgACAAAAAAgAAAAAAIAAAAAAAACAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAOrk2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAAAKAIIAKIAIKAKACgoKACgAAoCgAAIAAAgAAAAIAAoAAgAAAAAIAAAAAACAAAAAAAAAgAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAACgACCCgCAKigAoAKCgAoAAKAoAAACAAIAAAACAAAKAIAAAAACAAAAAAAgAAAAAAAAIAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAoAAggoAACCgCgAoKACgAAoCgAAAIAAgAAAAIAAAoAgAAAAIAAAAAAACAAAAAAAAgAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAAACgAAIigAAAIKKCgAoAKAACgKAAAAgACAAAAgAAACgCAAAAAgAAAAAAAIAAAAAAACAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAOrk2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAAAKAAgCKAAAKIKKACgAoAAKAoAAACAAIAAACAAAKAAIAAAACAAAAAAAAgAAAAAAAIAAAAAAACAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAoAACCgAAAAqKACgAoAAKAoAAACAAIAAACAAAKAAIAAAACAAAAAAAAgAAAAAAAIAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAoAACCgAAACgKgCgAoAAKAoAAACAAIAAACAAAKAAIAAAACAAAAAAAAgAAAAAAAIAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAoAACACgAACgKgCgAoAAKAoAAACAAIAAACAAAAKIAAAAACAAAAAAAAgAAAAAAAIAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAoAACACgACgAqoAAoAAKAoAAAACIAAAACAAAAKIAAAAACAAAAAAAAgAAAAAAAIAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAoAACACgACgAqoAAoAAKAoAAAACIAAAACAAAKAIAAAAACAAAAAAAAgAAAAAAAIAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAACgAAAIAAKKAACqgCgAAoACgAAAIgAAAAIAAAoAgAAAAAIAAAAAAACAAAAAAAgAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAKAAAAgAooAAKqAKAACgAKAAAgCAAAAAgAAACiAAAAAAgAAAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAOrk2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAoAAAACACigAqoAoAAKAAoAACAIAAAACAAAAKIAAAAACAAAAAAAAgAAAAAAIAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAA6uTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAKAACAAKAAAAAgooAKqAKAACgAKAAAgCAAAAAgAAACiAAAAAAgAAAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAOrk2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAACgAAAAgAACgAAAIAKKAoogCgAoACgAAIAgAAAAIAAAAogAAAAAIAAAAAACAAAAAAAAgAAAAAAAIAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAACgAAAIKKACqgCgAoACgAAAIgAAAAIAAAAogAAAAAIAAAAAACAAAAAAAAgAAAAAAAIAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgACgAAAIKKACqgCgAoAACgAIAgAAAAIAAAACKAAAAAIAAAAAACAAAAAAAAgAAAAAAAIAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgACgAAAIKAKAqKCgAAoCgAAAIgAAAIAAAAACKAAAAIAAAAAAACAAAAAAAAgAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAADq5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAgACgAAIKAKAqKCgAAoCgAAAIgAAAIAAAAACKAAAAIAAAAAAACAAAAAAAgAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAADq5NgIAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAKAAAgoAoCooAKACgKAAAiAAAAAgAAAAAIoAAAAgAAAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAOrk2gAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAACgAAIAKACooAKACgAKAAIIAAAAgAAAAAIoAAAAgAAAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAOrk2gAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAACgAAIAKACooKAACgAKAAIIAAAAgAAAAIAAoAAAgAAAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAOrk2gAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAACgAAIAKAKIKKAACgAKAAiAAAAAgAAAAIAAoAAAgAAAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOrk2gAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAACgAAIAKAKIKKAACgAKAAiAAAAAgAAAAIAAoAAAgAAAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOjk2AAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAoAIAAAAAoAACACgCgKgCgAoACgCACAAAAIAAAACAKAAAAIAAAAAAACAAAAAAAgAAAAAAAIAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAoAAAIACgKAAIIAKAAKqAKACgAKAIIAAAAAgAAAAIAoAAAAgAAAAAAAIAAAAAACAAAAAAAAgAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOjk2AAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAoAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAKAAAAAAAAoAAgAgoAAqoAoAAKAoAggAAAACAAAAAgACgAACAAAAAAAgAAAAAAAIAAAAAAACAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAA6OTYAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAACgAAAAAAgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAoAAAAAAACgACACCgAAqKCgAAoCgCCAAAAAIAAAACAAKAAAIAAAAAACAAAAAAAAgAAAAAAAIAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAKAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACgAAAAAAKAAAIAIAiigKigAoAKAoAggAAAACAAAAAgACgAACAAAAAAAgAAAAAAAIAAAAAAACAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAA6OTYAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAACgAAAgAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAoAAAAAACgAACACIAooCooAKACgKAIAIAAAAgAAAAIAAoAAAgAAAAAAIAAAAAAACAAAAAAAAgAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAOjk2AAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAoAIAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAKAAAAAAAoAAAgAiAKAKIqgCgAoCgCCAAAAAIAAAACAAKAAAIAAAAAACAAAAAAAAgAAAAAAAIAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAKCAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAACgAAAoAIAoAAAAgAiAKAKIKKCgAoCgCACAAAAIAAAACAAKAAAIAAAAAACAAAAAAAAgAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAKCAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAACgAAAoAIoAAAAAgAiAKAKIKKCgAoCgCACAAAAIAAAACAKAAAAIAAAAAACAAAAAAAAgAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAoAAAKAoAgAAAAICCACgAIqigoAAKoAgAgAAACAAAAAgACgAACAAAAAAAgAAAAAAAIAAAAAAACAAAAAAAAAAgAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAA6OTYAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAKAACgKAAIAAAACAggAoACKooKAACqAIAIAAAAgAAAAIAAoAAAgAAAAAIAAAAAAAACAAAAAAAAgAAAAAAAAAIAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAOjk2AAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACgAAoCgACAAAAAgIIAiigCKooKAACgKIAIAAAAgAAAAIAoAAAAgAAAAAIAAAAAAACAAAAAAAAAgAAAAAAAAAIAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAOjk2AAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAICgAAAAAAAAAAAAAAoAAIAAAAAAACgAAAAoAAKoAAAgAAAIACCAIoAoiqKACgAoCiACAAAAIAAAACAKAAAIAAAAAACAAAAAAAAgAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAAAoAAAAAAAAAAAKAAAAACAAAAAAoAAAKAAACqAAAIAAAACAggCKAKIqigAoAKAoggAAAACAAAAAgCgAACAAAAAAAgAAAAAAAIAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAA6OTYAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAACgAgAAAAAAAAAKAAAAAAAAAACgAAAAAAgAAAAKAAACgAAAKKAAACAAAAgIIAigCiKooAKAACqIAIAAAAgAAAAIAoAAAgAAAAAAIAAAAAAACAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAOjk2AAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAoAIAAAAAAAAAAACgAAAAAAAAAoAAAAAAAIAAACgAAAoAAACigAAAgAAAICCAIoAoiqKACgAAqiACAAAAIAAACAAAKAAIAAAAAACAAAAAAAAgAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAADo5NgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAKACAAAAAAAAAAAAAAoAAAAAAAAAKAAAAAAACAAAAoAAAKAAAACqAAAIAAACAggCKAKIqigAoAAKogAgAACAAAAAgAACgACAAAAAAAgAAAAAAAIAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAA6OTYAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAoAAAAAAAIAAACgAAAAoAACgCgAAgAAAICCAIoAoiqKACgAAKAAgAACAAAAAgAACgACAAAAAAAgAAAAAAAIAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAA6OTYAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAoAAAAAAAIAACgAAAAAoAACgACgAgAAIACCAIoAoiqKACgAAKAgAAACAAAAAgAACgACAAAAAAAgAAAAAAAIAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAA6OTYAAAAACgAAAAAAAAAAAAAAAgKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAACgAAAAAAAgAAKAAAAACgAAKAAKACAAAgAIIAigCiKooAKAAAoACAAAIAAAACAAAAKAIAAAAAACAAAAAAAAgAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAKAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAKAAAAAAACAAAoAAAAAKAAAoAAoIAAACAAggCAqgCqigAoAACgAIAAAgAAAAIAAAAoAgAAAAAAIAAAAAAACAAAAAAAAAgAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAANuTYCgAAAAAAAAAoAAAAAAAIAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAoAAAAAAAIACgAAAAAAoAACgACggAAAAICCAACgCiKoAoAACgAIAAAgAAAAIAAAAAogAAAAAAIAAAAAAACAAAAAAAAAgAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAANuTYCgAAAAAAAAAAAAoAAAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAAAAAAAoAAAAAAAAIACgAAAAAAoAACgACgAgAAAICCAACgCiKooAAAACgIAAAgAAAAIAAAAAogAAAAAAIAAAAAAACAAAAAAAAAgAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAANuTYCgAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAAAAAAAoAAAAAAAAAAAAAAAKAAAAAAAAACAoAAAAAAKAAAAoAAoAIAAACACIAAooAiqKAAAAAoCAAAIAAAACAAAAAAgCgAAAACAAAAAAAAgAAAAAAAAIAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAADbk2oAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAgAAAAAAAKAAAAAAAAAAAAAAACgAAAAAAAAAgAAKAAAAACgAAAKAKAACAAAAgAIIAqgCiCigAAAKAAgAACAAAAAgAAAAAIoICgAAACAAAAAAAAgAAAAAAAAIAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAADo5NgAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAACgAAAAAAAAAAgAAAKAAAAACgAAAKAKAAACAAAgAAgAoAogooAAACgAIAAAgAAAAIAAAAACAKAAAAAIAAAAAAACAAAAAAAAAgAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAOjk2AAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACAoAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAAoAAAAKAAAAoAoAAAIAACAACACgCiCigAAAKAAgAACAAAAAgAAAAAIAoAAAAAgAAAAAAAIAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAA6OTYAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAAAoAAAAKAAAAAooAAAIAACAACACgCiCigAAAAKAgAACAAAAAgAAAAAIAoAAAAAgAAAAAAAIAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAA6OTYAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAAAAAoAAAKAAAAAooAAAIAACAACACgCiCigAAAAKAgAACAAAAAgAAAAAIAoAAAAAgAAAAAAAIAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAA6OTYAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAAAAAAoAAAKAAAAAoAoAAIAACAAggCqAKIKKAAAAAoCAAAIAAAACAAAAAAgACgAAACAAAAAAAAgAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAADo5NgAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAACgAAAoAAAACgCgAAgAAICACACigCKooAAAACgIAAAgAAAAIAAAAACAAKAAAAAIAAAAAACAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAOjk2AAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAgAAAAAAAAAAKAAAACgAAAKAKACAAAgAIAIAKAKIqigAAAAKAgAACAAAAAgAAAAAIAoAAAAAAgAAAAAAIAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAA6OTYAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAAAAAAAAoAAAAKAAAAoAAAAAAgAIIgAKoAoiqAKAAAAoCAAAIAAAACAAAAAAigAAAAAACAAAAAAAgAAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAADo5NgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAACgAAAAoAAAACgAAAACAgAiAAKKCiCigoAAACoAAAAgAAAAIAAAAACKAAAAAAAIAAAAAACAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAOjk2AAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAgAAAAAAAAAAAAAAKAAAACgAAAAKAAAAIACAggCAqgCiKooKAAAAqAAAAIAAAACAAAAAAKIAAAAAAACAAAAAAAgAAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIDo5NgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAACgAAAAAoAAACgAAACAAgiAgACigoiqKCgAAKAgAAACAAAAAgAAAACgCAAAAAAAAgAAAAAAIAAAAAAAACAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbk2AAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAKAAAAAACgAAAAKAAAICAgiAAAKKCiKooKAAAoCAAAAIAAAAACAAAAKAIAAAAAAACAAAAAAAgAAAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANuTYCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAAKAAAAAoAAAgICCICAKAKCwRqKKACgAKAgAAACAAAAAAgAAACgCAAAAAAAAgAAAAAAAIAAAAAAAACAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbk2AoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAoAAAACgACAAgjIIAAoAoLBGoooAKAAoCAAAAAIAAAACAAAAKAAIAAAAAACAAAAAAAAgAAAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANuTYCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAKAAAAoAAAgICURAQEAUUFBYIsUaABQAFAQAAAABAAAAAQAAABQABAAAAAAAAQAAAAAAEAAAAAAAAAABAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABtybAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAABAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAABQAAAAFAAAEBBEoICAgCgCwGoIsUaABQAFAQAAAABAAAAAAQAABQABAAAAAAAAQAAAAAAEAAAAAAAAAAABAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABtybAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAABAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAABQAAAAFAAAEBBEoM0EAUQFBYDUEWKNAAoACgIAAAAAAgAAAAIAAAAoAgAAAAAAAIAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA25NqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAoAAAACgAAACAlEZoJQQEUAUFgjUBYo0ACgAKAgAAAAACAAAAAgAAACgACAAAAAAAgAAAAAAAIAAAAAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAoAAAACgAAACAlEZoJQQEUAUFgjUUWA0ACgAKAgAAAAACAAAAAAgAACgACAAAAAAAgAAAAAAAIAAAAAAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAoAAAACgAAAACAzREoM0EAUAAagjUUWA0ACgAKAgAAAAACAAAAAAgAACgACAAAAAAAAgAAAAAAAIAAAAAAAAAAAACAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAKKAgKACAAoAAAAgAM0RKDNBFEABQagixRqA1AUAABQEAAAAAAAQAAAAEAAAUAAQAAAAAAAEAAAAAAABAAAAAAAAAAAAAAQAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdHJsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAABRQAAAAEABQAAABAQEoiUGaCKIACiNRRYDUBqAoAACgIAAAAAAAgAAAAIAAAAoAAgAAAAAAIAAAAAAAACAAAAAAAAAAAAAAgAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6OTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAACigAAAAAAAAAAAgICURKDNBFEABYI1FFgNQGgUAABQEAAAAAAQAAAAAEAAAAAUAQAAAAAAAEAAAAAAABAAAAAAAAAAAAAAQAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdHJsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAFFAAAAAAAAAAAABASglESgzQRRAAWCLFGoDUBoFAAAUBAAAAAEAAAAABAAAAAAFAEAAAAAAABAAAAAAAAAQAAAAAAAAAAAAAEAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHRybAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAEBQAAAAAAAAAAAAAAAAAAAAAAAAAUAAAEAAAAAAAAAAAAAAAAAAAAAAAAABQAAFAFAAAAAAAAAAAABASglESgzQRRAAWCLFGoDUBoFAAAVAAAAAEAAAAAABAAAAAAARQAAAAAAAABAAAAAAAAQAAAAAAAAAAAAAEAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHRybAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAUAABQABQAAAAAAAAAAAAQEoJRGaCUEUQAFgixRqA1AaBQAAFQAAABAAAAAAAQAAEAAAAAUAAAAAAAAAQAAAAAAAAEAAAAAAAAAAAABAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0cmwAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAFAAUAAAUAAAAAAAAAAAAEBASiM0EoIogALBFijUBqA0CgAAKgAACAAAAAAAAgAIAAAAAAAoAAAAAAAAgAAAAAAAAAIAAAAAAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAKAAoAAAoAAAAAAAAAAAAICUEojNBKDKgACwRYo1AagKCgoACoAAgAAAAAAAIACAAgAAAKAAAoAAAAAAAAgAAAAAAAAIAAAAAAAAAAAACAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAKAAoAAAoAAAAAAAAAAACAogJQSiM0EoMqAALBFijUBqAoKCgAKgCAAAAAAAAgAIACAAgKAACgAKAAAAAAAAIAAAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAA6OTYAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAACgAKAAAAKAAAAAAAAAgAAAKICAlEZoJQZUAAWCLFGoDUBQUFABBBQBAAAAAAAAQAEFQAAAQBQAUABQAAAAAABAAAAAAAAAAQAAAAAAAAAAAEAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAHRybAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAABQAAAAAAAEAAABQBASglEZoJQZUAAWCNRRYDUBQUFBAABEUAQAFAAAABAQEFRAAAUUQBQUABQAAAAAABAAAAAAAAAAQAAAAAAAAAAAEAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAHRybAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAABAAAAAAAAAAAAAAAAAAAAAAAAAAUAABQAAABQAAAAAAAAEAFABFAEBKCURmglBFEABYDUVFgNQFBQAAAQEEFAAAAAAAEBBUQAQAFAUURQAUBQAAAAAAABAAAAAAAAAQAAAAAAAAAAAEAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAHRybAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUAAAAAUAAAAAAABAABQAQBRASglEZoJQRRAAWA1FRYDUBQUAAEBAARQEAUAAAEABEVAQAAAFUUQBQUBQAAAAAAABAAAAAAAAAQAAAAAAAAAAAAEAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAHRybAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAUAAAAAUAAAAAABAUEAFABAFEBKCURmglBFEABQaiosBqAoAKCAAgIAAoCAAAAAIKiCAgAAKCqAigoAKAoAAAAAAAgAAAAAAAAIAAAAAAAAAAAACAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAKAAAAAKAAAAAAAgAAAoAIAogJQSiM0EoIogALAagixRqAoAAAICAAgACgIoAIAKiCAgAAAKAooigoAAKAoAAAAAAgAAAAAAAAIAAAAAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAADo5NgAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAKAAAAAAKAAAAAAAgAAAqgCAAgJQSiM0EoMgKAKCwRqKKCgAAAgAIAAAAoCAoCIICAAgAKACqKIoAKAAAAooAAAAIAAAAAAAAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAA6OTYAAAAAAAAAAAAAAAAACgAAAAAAAAAACAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAoAAAAAAoAAAAACAoICgCgAgAICURKDNBKDICgCgsEWAqigAAAAgAIAAAAAACAgAIAACgAqiiAKAAACgAKAAKACAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAOjk2AAAAAAAAAAAAAAAAAAoAAAAAAAAgAKCAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAoAAAAAAoAAAAAAACAoAoAIACAlESgzQZoIoAAoKCiKAoAAAAgAAAAAAIACAAgAAAAKCgKKIAAAAoAKAAoAAAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAOjk2AAAAoAAAAIAAAAAAAACgAAAAAACAAAAoAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAACgAAAAACgAAAAAAAAAoAAIACAlEZoJQZoIAoAAoKCgCCgAACAAAAAAAgAIACAAAAoKACgAAAKAigAoAKAoAAAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAOjk2AAAoAAAAAIAAAAAAAAACgAAAAAACAAAAoAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAACgAAAAACgAAAAAAAAAoAAIACAlEZoJQZoIAoAAoKACgggAoAgAAAAAAIACAAAAAAoAAKAAAAACgKigoAKoAAAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAOjk2AoAAAAAAAIAAAAAAAAAACgAAAACAoIAAACgAAAAAAAAAAKAAACAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAKAAAAAAKAAAAAAAAACgAAgAICCM0EoM0EAUAAUAFAABBAEUAAAAAAAAQAEAAABQAAUAAAAAAFABVRQUAFUAAAAAAAAAAAQAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAHVybAAQAAAFABAAAAAAAAAAAAAUAAAAQFBAAAAUAAAAABQAAAAAAAAAQAAAAAAAAAAAAAAAAFAABAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAABQAAAAABQAAAAAAAAAAUAEABASiJQZoJQZAUAAUAAAAEAEAFEBQAAQAAEAAAAAAABQAAAAQFAABQUFVFBQAVQAAAAAAAAAABAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAdXJsBAAAAAAAAAAAAAAAAAAAAUAAAAAAAABQAQAAAUAAAAAAAAAAAEAAAAAAAAAAAAAAABQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAUAAAAAAAUAAAAAAAAAAFABAAQEoiUGaCUEBFAAFAAABAAQQAAUAAAAAQAAEQAAFFAAAAAAAAABQAUFBVRQUFUAAAAAAAAAAAQAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAHVybQAAAAAAAAAAAAAAAAAAAAAFAAAAAAAUAAAAEFAAAAAAAAAAAABAAAAAAAAAAAAAAAAUAAEAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAFAAAAAAAFAAAAAAAAAABQQAAEBKIlBmggICKAAKAAACAgAAiAKKAACAAAiAAKACAAAAAAAAAAAKCqANAoKqKACqAAAAAAAAAAIAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAADo5NgAAAAAAAAAAAAAAAAAAAAAKAAAAAAoAAAAAoCAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAACgAAAAAAACgAAAAAAAAAAAAAAgIIlBmglBARQABQAAQAEABABABQAAAAQQUAAAAAEAAAAAAAAAAUFUWAoKqKCgAqgAAAAAAAACAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAA6OTYAAAAAAAAAAAAAAAAAAAAACgAAAAAKAAAAAKAgAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAoAAAAAAAAAoAAAAAAAAAAAAAAICCJQSgzQQBRAAUAEAABAAQAAQAUAEAEFAAAAQFAAAEAAQUAABRAAFBVFBoFVAFAAAUAAUAAAAAEAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAB0cmwAAAAAAAAAAAAAAAAAAAAAFAAAAAAUAUAAABAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAABQAAAAAAAABQAAAAAAAAAAAAAAAQEESglBmggIoAAAAAAgAAIAAIAAAACoAACAAAAAAAAAAAAAAoAigqigoKqKAACgAKAAKAAAACAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAA6OTYAAAAAAAAAAAAAAAAAAAACgAAAAAAKKAAAAAAgAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAoAAAAAAAAAAoAAAAAAAAAAAAAAAICCJQSgzQQEUAAAAAAQAEAAAAEABQEAAABAAAAAAAAAAAAAAAUQBQVRQUFEFFAABQFAFAAAAABAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAdHJsAAAAAAAAAAAAAAAAAAAABQAAAAAAAVQAAAAQAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAUAAAAUAAEAAABQAAAAAAAAAAAAAAAQRASglBmgiiAgAAAAAAAAIAAAAAACAAAAAgAAAAAAAAAAAAAAKIoAKooKACqgCgAoCigAAAAAgAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAOjk2AAAAAAAAAAAAAAAAAAAAoAAAAAAAAKAAoIAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgKAAAKAAAAACAoAAAAAAAAAAAAAAAAIIgJQZoJQZUQAAAAAAAAAAQABAABQAEAAAABAAAAAAAAAAAAAAUQBQAVRQUAFVAFBQFFAAAAAABAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAdHJsBQQAAAAAAAAAAAAAAAAFAAAAAAAAAABQAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAUAAAAUAAAAAAAAAAAAAAAAAAAAAAAEESglBmgzQRRAAQAFAAAAEAAAAAAQUABAAAAAAAAQAAAAAAAAAAAFEAUAFUUAFBVRQUBRQAAAAAAQAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAHRybAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAFAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUBQAABQAAAAAAAAAAAAAAAAAAAAAAAAQRKDNBKDNBFEBAAAAUAARVAAAEAQAAQUBAAAAAAAAQAAAAAAAAAAAAFEAUAFUUFBVRQUAFUAAAAAAAQAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAHRybAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAABQAABQAAAAAAAAAAAAAAAAAAAAAAAAQRKDNBmglBFEBAAAUAFEFAAAAABBAAQUABAAAAAAAAQAAAAAAAAAAAAFEAUFBVFBVFEUAFUAAAAAAAAQAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAHRybAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAFAAAABAAAAAQAQABRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAUAAUAAAAAAAAAAAAAAAAAAAAAAAAAEESgzQZoJQZUAQAFABQFRQAAAAAQBBAAQUBAAAAAAAAAQAAAAAAAAAAAFEAUAFUUGgVUUAFUAAAAAAAAQAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAHRybAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAFAAAABAAAAAQQAAABRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAUAUAAAAAAAAAAAAAAAAAAAAAAAAAEEZoJQZoJQZUAQFABQBFUUAAAAEABEEABBQEAAAAAAAAABAAAAAAAAAAAAUQBQVRQaBVQBQVQAAAAAAAABAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABtybAAAAAAAAAAAAAAAAUAAAAAAAEABQAAAAAAUEAAAAABABAAAAFFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAABRQAAAAAAAAAAAAAAAAAAAAAAAAAAQRmglBmglBFEAABQUFEFFAAABAAQEQAQEAFQAAAAAAAAAAEAAAAAAAAAABRAFBVFBQVUUFAUUAAAAAAAAEAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGnJsBQAAAAAAAAAAAAAAUAAAAAAEAAABQAAAAAAAAAAAAQQAAAABRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAUUAAAAAAAAAAAAAAAAAAAAAAAAAAEEZoJQZoJQRRAAUFBRFUAUAAEABAQBBAQEAFQAAAAAAAAAAAEAAAAAAAAABRAFBVFBQVUUAFAUUAAAAAAAEAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGnJsABQAAAAAAAAAAAAUAAAAAAEAAAABQAAAAAAAAAAAQAQAUAEAFFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAABQABQAAAAAAAAAAAAAAAAAAAAAAAAAQRmglBmggIAoAoKCiKAoAoIACAAgICIIACCgIAAAAAAAAAACAAAAAAAAAAoAigqigAoiqKACgAqgAAAAAACAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTk2AAAoAAAAAAAAAAAKAAAAACAAAAAAoAAAAAAAAAAAIAIAKAACKoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAoAqAoAAAAAAAAAAAAAAAAAAAAAAAAgjNBKDNBAQBQBQUFEUFUAAAQAEBAQEQAQEAAAFAAQAAAAAAAEAAAAAAAABQBFABVFBQBFUUAFAAUUAAAAAEAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGnJsAABQAAAAAAUAAAAAAAAAEAAAAAABQAAAAAQAAAFABABAABQBUUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAFAFQAAFBAUAAAAAAAAAAAAAAAAAAAAQGaIlBmggIAoAoNACKCqAAAIACAgIACAgCACAAAACgAIAAAACAAAAAAAAAoAgCgqgCgoAKqKACgAqgAAAAACAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTk2AAAoAAAAAKAAAAAAAAACAAAAAAAAoAAAIAAAAAAAAAIAAAKqgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACgAAAAAAAKAAAAAAAAAAAAAACAoAAgM0RKDNBAQBQBQUFEUBQAAABAAQAEABAAAQABBAABQEAAAABAAAAAAAAAUAARQAVQBQAUFVFABQFFAAAAABAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAABpybAAUAAAAAFAAAAAAAAABAAAAAAAAUAAAAEAAEABQAFBABAAAUUVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAUAAAAQFAAAAAAAAFBAAAAUAEABQQFAAEBmiJQZoICAKAKCgoAiqAAAAIAACAAgAAIAACAIAIAKgAAAAIAAAAAAAACgACAKAAooKACgqooKAAooAAAAIAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAANOTagAAAAAAAoAAAAAAAAAIAAAAAACgAAAAAgAAgAAKoAAAIAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAKAIACgAAAAAAAAAAAAAAAAAAAACgACAzREoM0EBAFAFABQUQUUAAAEAAABAAAQAAEABAEEABBQAAAEAAAAAAAAABQABAFAABVFABRFUUFAAUUAAAAEAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAG3JsAAAAAABQAAAAAAAAAAQAAAAAFAAAAAABABAAAFFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAFAEBQAAQFAAAAAAAAAAAAAAAAAAAFAEBmiJQZoJQQEUUAFBQUQUUAAAAEAAAABAAAQAEBAEEABBQAAAEAAAAAAAAABQAABAAFABVFBQVUUAFAAUUAAAEAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAG3JsAAAAABQAAAAAAAAAAAAQAAAAFAAAAAABAABFAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAARQAAAAABQQFAAAAAAUAAAEAAAABQAARQBAZoiUGaCUEBFAFBQUARVAFAABAAAAAAAQAAEBAQBBABUAAAABAAAAAAAAAAAUAAAQABQAVRQUFVFABQFFAAABAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABtybAAAAAUAAAAAAAAAAAAAAEAAAABQAAAQAAARQABQAAAAAEAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAARQAAAAAABQQAAAAFAUAAAEAAAABQAARQBASiM0GaCUEUQAFABQURVAAAAAAAAAAEAAABAQEAQQAVAAAAAQAAAAAAAAAAAAFAEAAAUFAUUFEVRQUABRQAAQAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAbcmwAAAFAAAAAAAAAAAAAAAABAAAAAAAAABAAFAFAAAAAAQAABQQUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAEUAAAAAAAAAAAAAAAVQAAAQAAAFAAABAFEESgzQZoJQRRAAAUFBRAFUAAAAQAAAAAAAEABAQBBAQUAAABAAAAAAAAAAAAAAAAUQAABQUFUUFEFFBQFAFAABAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAB0cmwAAAAAAAAAAAAAAAAAAAAEAAAAAAAEBQQBQABQAAAAEEAFAUABUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABQBAAAAAAAAAAAAAAAFAAAFQAAAFAAABAFRASgzQZoJQZUAAAUAFEUABQAAAQQBQAAAAABAARBAAQUAAABAAAAAAAAAAAAAAAAAUQABQAVRQUFVFBQAFFAAABAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAB0cmwAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAUAUAAAABBABQAAFAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAUAAAQAAAAAAAAAAAAABQAABUAAABQAAAQBUQEoM0GaCUEBFAAAFBQBAFABAAAAQAABQAAABAEEABBQAAAEAAAAAAAAAAAAAAAAAEUAAFBQVRQURVAFAUUAAAEAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAHRybAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAABQBQAAAEAEFEABQABVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAFAAAEAAAAAAAAAAAAAAAUAAAVABAUEUUEBQARFEBKDNBmglBARRAUAAFAEUAAAEAABAAAAUBQBAEAEBBQAAAAEAAAAAAAAAAAAAAAAABRAAFABVFBQVUUFAUUAAAAEAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAHRybAAAAAAAAAAAAAAAAAAAAAAQAAAQAAAAABRQAAAEAAERQABQABVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAFAAAAEAAAAAAAAAAAAAAAUUEABUEAAAUAAUEARRASgzQSgzQQEUAAAAUAAQAAABBQAAQAAAAAABABUAAAABAAAAAAAAAAAAAAAAAAAAUARQAUFUUFVFBQFFAAAABAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAB0cmwAAAAAAAAAAAAAAAAAAAAAAEAAEAAAAAUUAAABAAABEUAAUAUQUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABQABAUEAAAAAAAAAAAAAAAAUUEBUEABQRQAAAARRASgzQSgzQQEUAAAAUAAAQABBQAEAAAEAAUAEAFAQAAAAEAAAAAAAAAAAAAAAAAAABQBAFBQVRQVUUFAUUAAAAAEAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAHRybAAAAAAAAAAAAAAAAAAAAAAAQAAQAAAAFUAAAEAAAAEQFUAAEVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAAEAAAAAAAAAAAAAAAAAAUUBBAUAAEUAAAAEUQEoM0EoM0EBFAAAFAAAAAEBUAABAAAAABAAAUBAAAAAAQAAAAAAAAAAAAAAAAAAAFAAEUFBVFBVRQUBRQAAAAAQAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAdHJsAAAAAAAAAAAAAAAAAAAAAABAABAAAAAAUAAAAAAAEAAABVAAAAAAAAABAAUAAAAAAAAAAAAAAAAAAFAAAAAAAAAAABQBAAAAAAAAAAAAAABQQAAAUAUBABAUAEUUEBQQBFEBKDNBKDNBAFAAAAAAAAAARBQEAAAAAAAAABAAAAAAQAAAAAAAAAAAAAAAAAAAAFAAEUFBVFgKqKCgKKAAAAAACAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAADo5NgAAAAIAAAAACgAAAAAAAAAAAgAgAAAAAAKAAAAAAAACAAqgAAAAAAAAAgAAAKAAAAAAAAAAAAAAAACgAAAAAAAAACAoIoAAAAAAAAAAAAAACgAgAAoAoACAAAACKKCAoAIiiAlBmglBmgAigAACgAAgAAgCCgIAAACAAoAAIAAAAAACAAAAAAAAAAAAAAAAAAAAAoAAigoKosBVRQUBRQAAAAAAAQAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAdHJsAAABAAAAAAAUAAAAAAAAAAEAEAAAAAAAABQAAAAAAAAFAAAAAAAAABAAAAAUAAAAAAAAAAAAAAAFAAAAAAAEBQQAAABQAAAAAAAAAAAFAAAABAABQABQEAAEBQFAAAAVEBASgzQSggICKAAKAAACAAAgAAIAACAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAKAAIoKCqLAVUUFABVAAAAAAAAEAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAHRybAAAQAAAAAAAFAAAAAAAAABAABAABQAQAAAAABQAAAAAFAAAAAAAAAABAAAAAUAAAAAAAAAAAAAAFAAAAAAAEBQQAAAABQAAAAAAAAAAAAFAAABBQABQAAAEAAABQAABBRAQEoM0EoICAigACgAAAgAAIACAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgACKCgqiwFVFBQAVQAAAAAAAABAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAB0cmwAEAAAAAAAABQAAAAAAAAAQAAAQVQBEFURAEAAAABQBQAFAAAAAAAAAABAAAAAAUAAAAAAAAAAAFAAAAAAAAAAAAEAAAAAUAAAAAAAAAAABQAAABUAAAUAAABAAAUAAAAQUQEBKDNBKDNBAFAAAFAABAAAQAEAABAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAFAAEUFBVFBVRQUAFUAAAAAAAAAQAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAdHJsBAAAAAAAAAAUAAAAAAAAAEAAAUAAAAERAAAFAABBQBQFAAAAAAAAAABAAAAAAUAAAAAAAAAAFAAAAAAAAAAAAEAAAAAUAAAAAAAAAABQQFAAAFAAQBQAAAAEAABQAAABBRAQEoM0EoM0EAUBAAFAAAFQQBBQEABAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAFAAEUFBVFBVRQUAFUAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAdHJtAAAAAAAAAAUAAAAAAAAAAEAAUAAAEAAEEAFAAAAFQBQFAAAAAAAAAABAAAAAAUAAAAAAAAAFAAAAAAAAAAAAAEAAAAAUAAAAAAAAAAABQAAABQEAAUEABQAEAAUVAAAEAFEBASgzQSgzQQBQEAAUAAAAEBABUAABAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAFAAEUFBVFBVRQUAFUAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAdHJtAAAAAAAAAUAAAAAAAAAAAAEUAAAEAAAEEFAAAAAFARVAAAAAAAAAABAAAAAAAUAAAAAAAAFAAAAAAAAAAAAAAAEAAAUAAAAAAAAAAABQAAAABQEAAAAAUABABBVVAUAEQUAQEBKDNBKDNBAFAARQAUAAEABAQAVAAAAAAAQAAAAAEAAAAAABQAAQAAAAAAAAAAAAAFAAEUFBVFBVRQUAFUAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAdHJtAAAAAAAAUAAAAAAAAAAAAAAAEAAAAAABBBQAAABQEFFAAAAAAAAAAQAAAAAFAAAAAAAABQAAAAAAAAAAAAAABAAAFAAAAAAAAAAAAAUAAAAUABAAAAFAAQABQBQAAEQUAQEBKDNBKCAgIoACKCgAoAIACAgIAKgAAAAAAAIAAACAAAAAAoAAAAAIAAAAAAAAAAACgACKCgqigqooKACqAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAOjk2AgAAAAKAAAAAAAAAAAAAAAAAoIAAIAAAAIigAACgAIKKAAAAAAAAAAAgAAAAKAAAAAAAACgAAAAAAAAAAAAAAACAAKAAAAAAAAAAAAAoAAAAoAACAAAKACIKAKAKAAAAIAgICUGaCUEBAQBRQUQBQAAAAQEBAQEFAAAAAAAAQAAEAAAAABQAAAAAQAAAAAAAAAAAFAAEUFUUFBVRQUAFUAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAdHJsAAAAAAAAAAAAAAAAAABAAAUAAAAAAEAAEFAEBQAAEAVQAAAAAAAAAAQAAAFAAAAAAAABQAAAAAAAAAAAAAAAAABFAAAAAAAAAAAAAAUAAAUAABAAAAAAFQQFAFFAAAAAEQEBKCUGaCAgACgCiKACgAAgICAgIACCgAgAAAKAAgAAIAAAACgAAAAAgAAAAAAAAAAKAAAIoKooKCqigoAKoAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA6OTYAAAAAAAAAAAAAAAAACAAAKKgAAAAAAAgAgAoAAAAIoAACgAAAAAAAAAgAKAAAAAAAACgAAAAAAAAAAAAAAAAAAogAAAAAAAAAAAAAAoAoAAACAoIAAAAIAKCCqAoAAAAgCAgJQSgzQQEAAUAUFEUAAAAEBAQEBAAAQFABAABQEAABAAAAAUAAAAAEAAAAAAAAAABQAABFBVFBQVUUFABVAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbcmwAAAAAAAAAAAAAAAAAEAAABQAAAAAAAAQQAAUAAAEUAAABQAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAFAEAAAAAAAAAAAAFAAFAAAAQFBAAAAABAABRQABQAABAEBASglBmggIAAAooKIoAAAAICAgICAAAgAAAAAAoCAAgAAAAAKAAAACAAAAAAAAAAAoAAgCgqigoKqKCgAqgAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAANuTYAAAAAAAAAAAAAAAAAACAAAoAAAAAAAAAAiAAACgAAAAAAKAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAACAoCgACAAAAAAAAAAAACgCgAAAAAICggAAAgAAooAAoAAgCAAgJQSgzQQEAAAUUARQUAAAEBAQEBAAAQAAAAAUBAAAQAAAAAFAAAABAAAAAAAAAAUAAARQAVRQUFVFBQAVQAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAG3JsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAUAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAEAAAUAUEAAAAAAAAAAAAAFFAAAAAAQFABAAABAABRQBQAABAEABASglBKDIAIAAoAoigAAoIACAgIACAAgAAoAAACAAAgAAAAAAAAAAAAAAAAAAAKAAAAIoAKooKCqigoAKoAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAADbk2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAKAAAAAAAAAAAAAACgAAAAAAAAAAAAAACAAAAKAAAAAAAAAAAAAAoAAoAAAAAAAACAAACAAKoACgAAACIACAlBKCAgICAAAKAigAoAAIACAgAIACAACgAIAAAAACAAAAAAAAAAAAAAAAAAoAAAAAigAqigoKqKCgoCgAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAANuTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAKAAAAAAAAAAAAAAICggAACgAAAAAAAAAAAAAKAAKAAAAAAAAAgAAAgAACqAoAAAAgCAgJQSggICAgAACgAIoAAAAAIACAgAIACCgAAAAAAAIAAAAAAAAAAAAAAAAACgAAAACKCgKKCgqooKCgKAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAA05NqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAKAAAAAAAAAAAAAAAIAAAAAoAAAAAAAAAAAACgACgAAAAAAAAAIAAAIAKKAAKAAAIAAgICAgICAgIAACAqgIAoAAAAIACAgAIAKgAAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAogCgKKCgqooKCgKAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAA05NgKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAKAAAAAAAAAAAAAAIAAAAAAoAAAAAAAAAAACgAACgAAAAAAIACggCggKgAAgqqAAAAIAAgICAgICAgIAAAAoCAKAAAAACAAgICAACoAAAAAAAAACAAAAAAAAAAAAAAAoAAAAAKIAoCigoKqKCgoCgAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAANOTYAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAgAAAAACgAAAAAAAAKAAAAAAKAAAAAAAAgAKCAKCAoCKAAKAAAAAIAgICAgICAgAIAAAoACKAAAAAACAgAICACgIAAAAAAAAACAAAAAAAAAAAAAAoAAAAAKIAoCigoKqKCgAoCgAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAANOTYAAAAAAACgAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAICgAKAAAAAAAAAAAAAIAAAAAAoAAAAAAAAACgAAACgAAAAAAAAICgAgCggKAigACgAAAACAICAgICAgIAACAAKAKIAAoAAIACAAgIACAAAAgoAAAAAACAAAAAAAAAAAAAAAoAAAAKIAoCigoKooigAoCgAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAANOTYAAAAAAACgAAAAAAAAAAAAAAAAAAAAAgACgAACgAIAAAAAAAAAAAAAAAAgAAAKoAAAAAAAAAAAgAAAAAAACgAAAAAAKAAAAAAKAAAAAAAAAAAAgCggKAgAACigAAAACAICAgICAgAIAACAqgAIoAAAAAIACAgAIACAAAACoAAAAACAAAAAAAAAAAAAAAoAAAAKIAoCigoKoogCgoCgAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAANOTYAAAAAAAACgAAAAAAAAAAAAAAAAAAAgACgAAAACgAIAAAAAAAAAAAAAAgAKCAqgAAAAAAAAAACAAAIACgAAAoAAAAAACgAAAACgAAAAAAAAAAAIAAoIACoAAoAoAAAAAgCAgICAgIACAAAAKAKIAAoAIAACAAgIACAAgAAAAIKAAAAgAAAAAAAAAAAAAAKAAAACiAKAooKCqAigoKAoAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAADTk2AAAAAAAAAoAAAAAAAAAAAAAAAAAAAIAAoAAAAAAoCAAAAAAAAAAAAAAAAAAIooAAAAAAAAAIAAAAgAKAACgAAAAAAKAAAAAKAAAAAAAAAAAAAAAgCgiCgAACigAICgAIAgICAgICAAgAAAKoAogAAAAoAgCCAAgICAAAgAAAIKAAAAgAAAAAAAAAAAAAAKAAACgCKACqAKCqAigoAKoAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAADTk2AAAAgCigIAKAAAAAAAAAAAAAAAAAACACAACgKAAAAoCAAAAAAAAAAAAAAAICgAKAAAACggAAAAgAACAAAoAAKAAAAAAAoAAAAAoAAAAAAAAAAAAAAoAgCIKCAooAoAAAAAgCAgICAgIAACAAoCigCKAAoAgAAIAggICAAgAAIAACACgAIAAAAAAAAAAAAAAACgAAAoAigKKCgAqgIoKACqAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAA/9k=", + skyBoxBack: "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAFA3PEY8MlBGQUZaVVBfeMiCeG5uePWvuZHI////////////////////////////////////////////////////2wBDAVVaWnhpeOuCguv/////////////////////////////////////////////////////////////////////////wAARCAgACAADAREAAhEBAxEB/8QAGAABAQEBAQAAAAAAAAAAAAAAAAECAwT/xAAUEAEAAAAAAAAAAAAAAAAAAAAA/8QAFgEBAQEAAAAAAAAAAAAAAAAAAAEC/8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMRAD8AMqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAKACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAACAAAAAAAAAAAAAAAAAoAAAAAAAAAAAIAAACAAAAAAAoAAAAAAAAAAAAKAAAACggAAAAAAAAAAKAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAoAAAAAAAAAAIAAACAAAAAAAAoAAAAAAAAAAAAKAAAACggAAAAAAAAAAAKAACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAACAAAAAAAoAAAAAAAAAAAAAKAAACgAgAAAAAAAAAAAKACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAACAAAAAAAoAAAAAAAAAAAAAAKAAACgAgAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAoAAAAKCAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAKAAAAACggAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAKAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAIAAAAAACgAAAoAAAIAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACAAAAAAAAoAAAKAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAoAAAAAAAIAAAAAACgAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAIAAAAAAAACgAAAoAAAAAAIAAAACgAAAAAAAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAACAAAAAoAAIAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAoAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAIAAAAAAACgAAAoAAAAAAAAIAAACgAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAKAAAAAAAAACAoAAAAIAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAoAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAIAAACgAAAAAoAAAAAAAIAAACgAAAAAAAAAAAAAAAAAgAAAAAAKAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAgAAAKAAAAAAAAACgAgAAAAIAAAAAAACgAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAoAAAAAAAAAIAAACgAAAAAAAAAAAAAAAAgAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACgAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAoAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAAAAAAAAAAAAAAoAAKACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAKAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAACgAAoIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAoAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAoAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCAAAAAAAgAAAAAAKAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAoAAAAAAAAAIAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAgAAAKACAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAoAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAKAAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACgAgAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAoAAAAAAAAAIAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAAAAAAAAAAoAAAIAAAAAAACgAAAAAAAAAAgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAoAAAAAAAAIAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAAAACgAAAAgAAAAAAKAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAgAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAAKAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAKAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAKAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAACgAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAKAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAACgAAgAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAoAAAIAAAAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAKAAAACAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAKAAAAAACAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAKAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAAKAAAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAKAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAKAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAoAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACAAAAAAAoIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAACgAAAAgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAACgAAAAAAAAAAAAAAgAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAACggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAACgAAAAAAAAAAAAAAAAAAAgKCACgAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAACggKAAAAAAAAAAAAAAAAAAAAACAoIAAAKAACAAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAACoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAKCAoAAAAAAAAAAAAAAqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAgAAAAAAAKAAAAAAAAAAACAAAAAAAAAAoIAAAACgAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAKAAAAACAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAoAAAoAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAKAACAAAAoAAAAIAAACgAAAAAAAgKACAoAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAoAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAKAAACAAAAAAAAoIACgAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKACAoAAAAIAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIICggAAAAAAAAKAAAAAAAAAAACAAAAAAAAAoAAAAIooAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAoAAAAAAAAAAAAAAAAAAICggAAAAAAAAAAAAAAAACgAACgAAiAAAAAAAAAAAAAAAAAAAAoAAAAAoAIAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAKAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAIAAAKAACAAKAAAAAAAACAAAoAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAoIAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAoICggAAAAAAAAAKAACAAAAAAAAAAAAAAAoICgAAAAAAAAAgAKAAAAAAACAoAICggKCAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAIAAAAoAAAoAAAACAoIAAAAAAAAAAACgAAAACAAAAAAAAAAAAoAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAIAAAAAKAAAAAAAAAAAAACAAAAAAoAAAAAAAACgAAAAAAAAAAAAAACAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACggAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAoAAAAAICgAAAAAAAAAAgAAAAAAAKAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAACoAAAAAAAAAAKAAAAAACAAKAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgKAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAA0AAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAACAAAAAAAoAAAIAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAADYAIAACgAAAAAAAAAAAAAAAgAAAAAAAAKCAAAAAAAgAAAAAAAAAAAAAAAAAAAAKACAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAgAAKAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAoAANAAAAAAAAAAAoAAAAAAIAAACAAAAAAAAAAAAACIAAoAAIAAAAAAAAAAoAAAIAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAIAACgAAAAAgAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAoAAAANAAAAAAAAAAAAoAAAAAIAACAAAAAAAAAAACIAoAAAAAgAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAoAAAAAAAAIAAAAAAAAAgAAAACqCAAAoAAAAAAIAAAAAAAAAAAAAACgAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAACgAAAAAoAAAAAAKAAAACgoAIAAAACgAAAAAAAAAAAgAAAAIIAAAoIAAAAoAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAKAAAAAAAAAAgAAAAAAKAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAoAAIAAAAAAAAAAAACgAAAAoAAAAAKAAAACgAAAAAAAAAAAAAAAAAAAAggAAAAAAoAAAAgAAAAAAAIAAAACgAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAACAAAAAAIAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAICgAgKAACAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAoAAAAAAKAAAAIAAAAAAAAAAAAAAAAAAAgAAACgAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAIAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAKAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACgAAAAAAAoIIAAAAAAAAAAAAAKACAAAoAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAgAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACgAAAioAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAAAAAAAAAKgAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACggAKAAAAAAAAAAACAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAIAAAAAAAKAAAAAAAAAACAAoAIoAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAACggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICggKCAAAKAAAAAAAoAAAAgKAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAgKCAoAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAACAAAAAACAAAAAoAAAAAAAAAAAAAIoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAIAIAAACgAAAAAAAAAAAAigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAKACCKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAIAIoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAKAAAAAAAAAAAgigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICggAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAgKAAAAAAAAAAAAAAACAoAAAIAACggAAAAAAAAAAAAAAAAAAAAAKACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAKAACAoIAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACggAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoIAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKACAAAAAAAAAAAAAAoAIAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAAAAAoAAIAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAoIAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAKCAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAIAAACggAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAoIACgKIgKAKggAAAAKAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAgKAAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ACgAAgAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAADoAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAKAAACAAAAAAAAA6gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACAAoICggAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAKAAAAAAACAAAAAAAA7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAIAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAIAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAACAoAAAAAAAAAIAAAAAAADuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAgAAAAAAAIAAAAAAAAACgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAgAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAoACgACAAAAICgAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAO4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCAAAoAIAAAAAAAAAAAAAAAAAAAIAAAAACAAAAAAAAgAAAAAAIAAAAAAAACAAAAAAAAAAAAAAAAgAAAAAAAAAoACgAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAD0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAgAAAAAAAAIAAACAAAAAAAAgAAAAAAAAAAAAAAIAAAAAAAAACAAACgKAAAAAAAIAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAACAA9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAoICgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAIAAAAAAIAAAACAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAACAAAAACgAAAAAAAAigAAAAAAAAAAAAAAAAgAAAAAKAAACAAAAAAAAAA7gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAgAAAAAAAAAAAACAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAoAICgAAAAAAAAAAAAAAAAAAAAAAAIAAAAgAAAAAAgAAAAAAIAAAAAACAAAAAAAAAAAAAAAAAgAAAIAAAKAAoAAAgAAACgAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAIAAD0AAAAAAAAAAAAAAAAAAAAAAAgAACgAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAACAAIAAAAAAAIAAAAACAAAAAAAAAAAAAAAAAAAgAAIAAAAAKAAACKAAAAACgAAAAAAAAAAAgAAAAAAAAAAAAAAAAIAAAADuAAAAAAAAAAAAAAAAAAAAAAAIAKoIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAgACAAAAAAACAAAAAAAAAAAAAAAAAAAgAAAIAAAAAAAAAACgAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAA7AAAAAAAAAAAAAAAAACAAAACgAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoACAAAAAAAAAAAAAIAAAAAAAAIAAAACAAAAAAAAAAAoAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAOogAAAAAAAAAAAoAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACgAAAAAAAAAAAAAIgAAAAgAAKAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAOioAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACACgAACCAAAAAAAoAAAAAAAKoAAAAAAAIAAIAAAAAAAAAAAAAAAAAAAAADaoAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACACgAAAACAAoAAAAoAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAADSoAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACACgAAAAKAAAAICggAKCAAAoAAAAAAAAAAAAAAAAAAAAAAAAAgAAqoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAACiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAogAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgKCAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAIAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAKAAAAAAAAAAAAIAAAAAAAAAAAgAKCAAAAAAAAoAAAAAIACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAACgAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAgKCAAAoAIAACgAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAKAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACggKAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAoAAAAAAAIAAAAAoAAAAAAAAAIAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAoAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAoAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoCgAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAICgAgAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAgKAAAACAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAACAoAAIACgAAgKAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAoAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACggAAAKCAAoICgAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAACAAAAoIAAAAAAAAAAAAAAKAAAAAAAAAoAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACggAAAAAAKCAAqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAgAKAACAAAAAAAAAAAACgAAAAigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAIAAAAAAAAAAAAgAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAACgigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAACAoIACgAAAAAAAAAAgAAAAACAAAAAAAAAAAAAACggKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACggAKAAAAAAgAAgAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICggAAAAAACAAAAACgAAAAgAAAAAAAAAKCAAoIAAAAACggKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICggAACAAAAAAAACggAAAKACAoAIAAAAAAAAACgAgKACAAoICgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAoIgAAAAAAAAAAAAAAAAoIACggAKCAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAICgAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAgAAAAAAAAAAAAAAAAAKCAAoIACggAAAAAAAKAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAACAAAAAAAAAAAAAAAAoAAAAICggAAAAAAAKCAoAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAIACggAKCAAAAAAoICgAAAAAgKACAAAAAAAAIKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAICgAAAAAAAAAAAAAAAgCAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAACAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAggKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAACACAoAICgAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAgAAAAAAgKAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAIAAAAAICggKCAoAAAAAAAAAAAAAAAACAACAoAAIACggAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAIAAAAAAICgAAAAAAAAAAAAAAAIAAIAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAAACAoAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAgKAAAAAAgAAAAAAAgAAAAAAAAAAAAAAAAKAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAICgAAIAAAAAAAAIAAAAAAAAAAAAAAAACgAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAgAAAAAAAAAAAAgAAAAAAAAAAAAAAAKAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACggAAAAAAIAIACgAAAAAAAAAAAgAAAAAAAAKCAAoIACgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAgAAAAKAAAAAAAAAACAAAAAAAAoAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAIAAAAACgAAAAAAAAAAgAAAAAKAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAIAACgAAAAAAAAAAAgAAAKAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAICgAAAAAAAAAAAgKCAAoAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAACggAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAgAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAgAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgKAAACAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAMgAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAKAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAADIAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAyAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAMgAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKDIAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAyAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAADIAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAoAAAAAAAAAAAAAKAAAAAAAAgAAAAKAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAADIAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAKAAAAAAgAAAAAAAAAAAAAKAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAADIAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAKAAAAAAgAAAoAAAAAAAAAIAAAAAAAAoAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAMgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICgAAAAAAAAAAAgAAAAAAAAAKAAAAAAAAAAAACgAAAAIAAAKAAAAAAAAAAAAAAAAAACAAAAAAKAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAADIAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAoAAIAAAAAAAAAACgAAAAAAAAAAAAAoAAAACAAAACgAAACgAgAAAAAAAAAAAAAAACAAAKAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAADIAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAKAAAAAgAAAAoAAAoAAAICggAKCAAAAAAAAAAAAIAAAoAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAMgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAoAAAACAAAACgACgAAAAAAAAgKCAqgCIAAAAAAAACAAAAKAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKADIAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAKAAAAAgAAAAoAoAAAAAAAAACgAACAoAIgAAAAAAAIAAAoAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACgAAAIAAAAqgAAAAAAAAAAoAAgKAACAIAAAAAAAACAAKAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAACgAAIAAAoACgAAAAAAAAAoAAAAAAAAgACAAAAAAgAACgAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAoAACAAAAKAAAoAAAAAAAAKAAAAAAAAAAAIgAAAAIAAAoAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAKAAAgAACgAAAKAAAAAAACgAAAAAAAAAAACIAAAACAAAKAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACgAAAIAAAoAACgAAAAAAAoAAAAAAAAAAAAIIAAAAAAgACgAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAoAAACAAAKAAAoAAAAAKAAAAAAAAAAAAAAIgAAAAAAIAAoAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAAAgAACgAKAAAAACgAAAAAAAAAAAAAAgAgAAAAACAKAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACgAAAIAAoACgAAAAoAAAAAAAAAAAAAAAAAIIAAAAAgACgAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAoAAACAAKAAoAAAKAAAAAAAAAAAAAAAAAAACCAAAAAIoAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAKAAAgACgKAAAACgAAAAAAAAAAAAAAAAAAACIAAAACAKAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAACgAAIAoACgAAAoAAAAAAAAAAAAAAAAAAAAAgCAAAAgCgAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAoACAKAAoAAAAKAAAAAAAAAAAAAAAAAAAAAIAgAAAIAoAAAAgAAAKCAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAD//2Q==", + skyBoxFront: "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAFA3PEY8MlBGQUZaVVBfeMiCeG5uePWvuZHI////////////////////////////////////////////////////2wBDAVVaWnhpeOuCguv/////////////////////////////////////////////////////////////////////////wAARCAgACAADAREAAhEBAxEB/8QAGQABAQEBAQEAAAAAAAAAAAAAAAECBAUD/8QAFhABAQEAAAAAAAAAAAAAAAAAABEB/8QAFgEBAQEAAAAAAAAAAAAAAAAAAAEC/8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMRAD8Aw2yAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAgAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAKAAAAAAKAAAAAAAoAAAAAAAAAAAAKAAAAAAAAAAACgAAAAAAAoCAAAAAACgAAAAAAAAAAAAAoAAAAAAAAAAAKAKAAAAAAAAoAAAAAAAAAAKAAAAAAAgAoAAAAAAAAAAAAAAAAAAAAACgAAAAADhaZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAQAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAFAAAAAAFAAAAAAAUAAAAAAAAAAAAFAAAAAAAAAAABQAAAAAAAVAAAAAAABQAAAAAAAAAAAAAUAAAAAAAAAAAFAFAAAAAAAAUAAAAAAAAAAAFAAAAAAQAAUAAAAAAAAAAAAAAAAAAABQAAAAAABwtMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAIAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACgAAAAACgAAAAAAKAAAAAAAAAAAACgAAAAAAAAAAoAAAAAAAAKAgAAAAAAoAAAAAAAAAAAAAAKAAAAAAAAAAACgCgAAAAAAAKAAAAAAAAAACgAAAAAAIAAKAAAAAAAAAAAAAAAAAAAAoAAAgAAOJpkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAABAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAUAAAAAAAAUAAAABQAAAAAAAAAAAAAAUAAAAAAAAAFAAAAAAAABQEAAAAAAFAAAAAAAAAAAAAABQAAAAAAAAAAAUAAUAAAAAABQAAAAAAAAAAUAAAAAAABAUEAFUAEAAAAEAAAAAABQAAFAEAAAAABxNMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAIAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACgAAAAAACggKAAAAoAAAAAAAAAAAAAAKAAAAAAAACgAAAAAAAAAoACAAAAACgAAAAAAAAAAAAAAoAAAAAAAAAAAAKAKAAAAAAAAoAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAgAKAAAAAAAAOJpkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAABAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAUAAAAAAAAUAAAABQAAAAAAAAAAAAAAUAAAAAAAAFAAAAAAAABQAAAEAAAAFAAAAAAAAAAAAAABQAAAAAAAAAAAAUAAAUAAAAABQAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHE0yAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAgAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAKAAAAAAAAAKAAAoAAAAAAAAAAAAAAAKAAAAAAACgAAAAAAAAAoAAACAAAAACgAAAAAAAAAAAAAoAAAAAAAAAAAAKAAAAKAAAAAAoAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADiaZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAQAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAFAAUAAAAAAAAAAAAAAFAAAAAAABQAAAAAAAAAAUAAAABAAAABQAAAAAAAAAAAAAUAAAAAAAAAAAAFAAAAAFAAAAAUAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxNMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAIAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAACgKAAAAAAAAAAAAAACgAAAAAAoAAAAAAAAAAAKAAAAAgAAAAAoAAAAAAAAAAAAKAAAAAAAAAAAACgAAAAAAACggKoAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADiaZAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAQAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAABRQAAAAAAAAAAAAAAFAAAAAABQAAAAAAAAAAUAAAAAABAAAAABQAAAAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAFUAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxNMgAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAIAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAooICgAAAAAAAAAAAKAAAAAACgAAAAAAAAAAAoAAAAAAAACAoIAKAAAAAAAAAAACgAAAAAAAAAAAAAoAAAAAAAAAAKAKAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOJpkAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAABAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAAAFAAAAAAAAAAAAUAAAAAAFAAAAAAAAAABQAAAAAAAAAAAAAEFAAAAAAAAAABQAAAAAAAAAAAAAUAAAAAAAAAAFAFAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHE0yAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAgAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACgACggKAAAAAAAAAAoAAAAAAAKAAAAAAAAAACgAAAAAAAAAAAAAAoCAAAAAAAAACgAAAAAAAAAAAAAoAAAAAAAAAAAKKAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOJpkAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAABAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAFAAAAFAAAAAAAAAUAAAAAAAAFAAAAAAAAAABQAAAAAAAAAAAAAAUBAAAAAAAAAABQAAAAAAAAAAAAAUAAAAAAAAAAFAFAAAAAAAAABFAAAAAFAABAAUAAAAAAAAAAAAAAAAAAAABxNMgAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAIAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAoAAAAAoAAAAAAACgAAAAAAAAoAAAAAAAAAAKAAAAAAAAAAAAAACgIAAAAAAAAAAKAAAAAAAAAAAAACgAAAAAAAAAAoAoAAAAAAAAIAAAAAAAoAAAAAAAAoAAAAAAAAAAAAAAAADiaZAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAQAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAABQAAAAABQAAAAAAFAAAAAAAAABQAAAAAAAAAAUAAAAAAAAAAAAAAFAQAAAAAAAAAAAUAAAAAAAAAAAAFAAAAAAAAAABRQAAAAAAAAQAAAAAAAAAABQAAABQAAAAAAAAAAAAAAAAAHE0yAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAgAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAACgAAAACgAAAAAAKAAAAAAAAAACgAAAAAAAAAAoAAAAAAAAAAAAAAKAgAAAAAAAAAAAAoAAAAAAAAAAAKAAAAAAAAAAACigAAAAAAgAAAAAAAAAAAAACgAAAAAAAAAACgAAgAAKACArjaZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAABAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAFAAAAAFAAAAAAAUAAAAAAAAAAFAAAAAAAAAAABQAAAAAAAAAAAAAAUBAAAAAAAAAAAABQAAAAAAAAAAAUAAAAAAAAAAFAFAAABAAAAAAAAAAAAAAAAAFAAAAAAAAAAFABAAAAAAUEcbSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAACgAAAAACgAAAAAKAAAAAAAAAAACgAAAAAAAAAAAoAAAAAAAAAAAAAAKAgAAAAAAAAAAAAAoAAAAAAAAAAKAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAONpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAQAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAABQAAAAABQAAAAAFAAAAAAAAAAABQAAAAAAAAAAAAUAAAAAAAAAAAAAFAQAAAAAAAAAAAAAUAAAAAAAAAAAFAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAHG0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAIAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAoAAAAAAoAAAAAACgAAAAAAAAAAAoAAAAAAAAAAAAKAAAAAAAAAAAAACgIAAAAAAAAAAAAAKAAAAAAAAAAACgAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAADjaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAEAAAAAAAAAFAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAUAAAAAAUAAAAABQAAAAAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAAABQAEAAAAAAAAAAAAFAAAAAAAAAAABQAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFABxtIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAACAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAKAAAAAAAKAAAAAAoAAAAAAAAAAAAKAAAAAAAAAAAAACgAAAAAAAAAAAAoAAACAAAAAAAAAACgAAAAAAAAAAAAoAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADkaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAEAAAAAAAAAFAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAAAAAAUAAAAAABQAAAAAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAAAABQAAEAAAAAAAAAAFAAAAAAAAAAABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHI0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAIAAAAAAAAKAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAoAAAAAAAoAAAAAACgAAAAAAAAAAAAoAAAAAAAAAAAAAKAAAAAAAAAAAAACgAAIAAAAAAAAAAKAAAAAAAAAAAACgAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAORpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAQAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAABQAAAAAAAABQQFAAAUAAAAAAAAAAAAAFAAAAAAAAAAAAABQAAAAAAAAAAAAAAUAABAAAAAAAAABQAAAAAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByNIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAACAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAKAAAAAAAAAAAAKAAAoAAAAAAAAAAAAAKAAAAAAAAAAAAACgAAAAAAAAAAAAAAoAAACAAAAAAAACgAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADkaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAEAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAUAAAAAAAAAAAAAUBQAAAAAAAAAAAAAAUAAAAAAAAAAAAFAAAAAAAAAAAAAAAABQAAEAAAAAAAAAFAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHI0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAoAAAAAAAAAAAAAAoCgAAAAAAAAAAAAAAoAAAAAAAAAAAAKAAAAAAAAAAAAAAAACgAAAIAAAAAAAAKAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAORpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAQAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUUAAAAAAAAAAAAAABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAFAAAAAAQAAAAAAUAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAcjSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAooAAAAAAAAAAAAAACgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAKAAAAAAAgAAAAAAoAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAA5GkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAABAUEAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAFAFAAAAAAAAAAAAAAAUAAAAAAAAAAAFAAAAAAAAAAAAAAAAABQAAAAAAAEAAAAAFAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAHI0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAIAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAKKCAoAAAAAAAAAAAAACgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAKAAAAAAAAgAAAAAoAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAA5GkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAABAAAAAABQAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAAAAAAAAAAAAAAAAABQABQAAAAAAAAAAAAAFAAAAAAAAAABQAAAAAAAAAAAAAAAAAAUAAAAAAAABAAABQAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAByNIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAACAAAAACgAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACgACgAAAAgKACAoAAAACgAAAAAAAAAAoAAAAAAAAAAAAAAAAAAKAAAAAAAAAgAAAoAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAA5GkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAABAAAAABQAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAABQAABQQAAAAAAAFBAUABQAAAAAAAAAAUAAAAAAAAAAAAAAAAAAFAAAAAAAAAQAAAUAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAcjSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAgAAAoAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAoACgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAKAAAAAAAAAAgAAoAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAA5GkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAABAABQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAABQAFAAAAAAAAAAABQAAAAAAAAAAAAAAAAAUAAAAAAAAAABAABQAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAByNIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAACAACgAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAACgAKAAAAAAAAAAACgAAAAAAAAAAAAAAAAAoAAAAAAAAAACACgAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAADkaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAFAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAFAAUAAAAAAAAAAAFAAAAAAAAAAAAAAAAABQAAAAAAAAAAAEFAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAHI0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAKAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAKoAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACgAAAAAAAAAAAIKAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAORpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAVQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAFAAAAAAAAAAAABQAEAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAcjSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAoAAAAAAAAAAKAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAKKAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACgAIAAAAAAAAACggAKCAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAORpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAUAAAAAAAAFAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAVQAAAAAAAAAAAAAUAAAAAAAAAAAAAAAFAAAAAAAAAAAAAABQAAEAAAAAAAABQAQFABAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAHI0gAAAAAAAAAAAAAAAACgAgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgKAAAAACgAAAAAAoAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAooAAAAAAAAAAAACgAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAKAAAgAAAAAAAAKAAAAACAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAORpAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAAAAFAABQAAAAAUAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAUAUAAAAAAAAAAABQAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAFAAAAAQAAAAAAAFAAAAABAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAHI0gAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAACACgAAKAAIoAKAAAACgAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACigAAAAAAAAAAAAKAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAoAAAACAAAAAoIAACgAAAAgAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAADlaQAAAAABAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAABAAQAUBEAAAFAUAUFEAUAAAAFAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAFFAAAAAAAAAAABFFAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAFAAAAAQAAAAAAAAFAABAUEAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAcrSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCAIAAIACACogAAgAAKACgKKCiAKAAACgAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACgCgAAAAAAAAAgKAoAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACgAAAAAAIACggAAAAKAACAoIAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAA5WkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAEQAAAQAEFQBBAAAQAFABQUBRQUQBQAAAUAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUUAAAAAAAAAAABQAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAFAAAAAAAAAAAQFABAAUAEBQQAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAABytIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoACACAAAAgIAKiCAAgAAAAAKCgoCiiKACgAAoAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAooAAAAAAAAAAAAIooAICgAAAAAAAAAAAAKAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAICggKCAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAOVpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAQAAQAAAEBBUAQQEABAEAAFAUUFBQVQEUAFAABQAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAFUQFAAAAAAAAAAAAUAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAEBQQAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAABytIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoCAAAACAAAAgAIKgCCAgIAgAAAAoCigoKCqAKIAoAKAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAKKAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAIAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAA5WkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABAABAAAAAAAQAEFRBAQAEAQQAAAFBVFABQUFUAUFEAAUAAAAAAAAAFAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAABVAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAQAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABytIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAACCAAAAAAAAgAICCiCAgAICIAAAAKACqKCgAoKAooKIAoAAAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAACqAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAgAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAADlaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAEABQQQAAAAAEAABABUQQAEBAEEAAAAABQAVRQUAFBQVQEUFAAAAAAAAABQAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAVQAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAEAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcrSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAgAAgAAAIAAACAAgqIAICAAiAACAAoAAKCgKKCgAoKooKIAoAAAAAAAAKAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAACqAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAgAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAADlaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAEBQQAQAAEABAAAQUBEAEBAARABAAABQRQAUAFAUUFBQUFUUQBQAAAAAAAAAUAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAFUAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAHK0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAIAAAAIACAAgAIKAiACAAgAIgAgAAoAAACiAKACgAqigoKooKIAoAAAAAAAAKAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAooAAAAAAAAAAAACgAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAgKACAoIAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAA5WkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAABAUEAEABAAQEFEEABAAQEAQAQAAUAAAABQBAFABQFFBQaBVARQAAAUAAAAAFAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUUAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAQFBAUEAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcrSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAgAIACAgqIIACAAgCCAAACgAAAAAAKAIAoAKCqKCgqigogAAAACgAAAoAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAACigAAAAAAAAAAAAKAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAACAoICggAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAADlaQAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBQQAQAEABARFQEBAQABBAAABQAAAAAAAFAAEAUAFBVFBQVRRFAAAABQAAAUAAAAAAAAAAAAAAFAAAAAAAAAAAAAAABQBQAAAAAAAQFBAAUBQAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAQAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAABytIAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAgAICIrIAICAIIAAAAKgKAAAAAAACgACAKCgqigoKooAigAAAoAAAKAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAoAAoAAAAAAAIACgiigAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAICggAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAADlaQAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBQQAAQAEABARFZBAQAEQAAAQUABQAAAAAAAAUAARQUBRoFBQFFEUAAAFAAABQAAAAAAAAAAAAAUAAAAAAAAAAAAAAAFAAAAFAAAAAABAAUBQAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAQAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAABytIAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACAAgAIDKKgICAIIAACACgAKAAAAAAAACgACKACqKCgoKooAigAoAAAAKAAAAAAAAAAAAACgAAAAAAAAAAAAAAAoAAAoICgAAAgAKAAoAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAIAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAA5VQUAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAABAAQEBBUQQEBAEEAABBQAFAAAAAAAAAABQBAFBQVRQUFUUARQAUAAAAAFAAAAAAAAAAAABQAAAAAAAAAAAAAAUAAAAAUEABQQAAFAAUAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAEAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAciooACgACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIACAAgIioCAgICIAAAAAAoAAAAAAAAAAAIoAKCgKKDQKAooigAoAAAAAAAKAAAAAAAAACgAAAAAAAAAAAAAAAoAAAAAAoAICggKCAoCgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAgAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAADkVAFAAUAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAUEAAEABAQEFRBAQEAQQAAAAAUAAAAAAAAAAAEAUAFABVFBQUFUURQAUAAAAAAAAFAAAAAAAABQAAAAAAAAAAAAAAUAAAAAAAAAUEABQAFAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAABAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAHGqKACgAKAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgKAAAACAAACAgAICIqAgICIAIAAAAAAAKAAAAAAAAACAKAACgoKooKCgKKIoAAAAAAAKAACgAAAAAAoAAAAAAAAAAAAAAAKAAAAAAAAAAKCAoACgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAgAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAADjVAFABQAFFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAQEABkVEEBAQBBAAAAAAAABQAAAAAAAAAQABQAUAFUUFBQUBRRAAAAAAFAABQAUAAAAAFAAAAAAAAAAAAAABQAAAAAAAAAAAAABVAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAABAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAHGqAKACgAAqgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgKACAAAAAAACAAgIKzqCAgIAggAAAAAAAAAoICggKAAACAAAAKACgAqigoKACqAFAAAABQBFBQAUAAAAFAAAAAAAAAAAAAABQAAAAAAAAAAAAABQFAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAABAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAHEoogCgoAAKoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAICAgqaggMgAiCAAAAAAAAAAAAAAAAAAAAAAAoAKACqKCgAtAoFAAABQFFBRFABQAAAUAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAFUAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAcSigCKACgAqgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAoAAAAIAACAAgM6ipoICAgCACAAAAAAAAAAAAAAAAAAAAAAoAKACqAKBQUAAAAFBQVRRAFBQAAAUAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAFUAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAcQCiiKACgAoCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAoACggAAAAAAgAAICAgqaggICAgCAAAAAAAACAAAAAAAAAAAAAAAoAAKACqAAKAACgoAKo0IAoKAACgAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAoIooAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAACAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAOEFBVARQUAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABAAUEAAAAAAAAAAEAABAQEFRBAQEABAAEBQAQAAAAQAAAAAAAAAAAAAAFAABQAAVQBQAUFBVGhFABQAAUAAAAAAAAAAAAAAFAAAAAAAAAAAAAAABRQAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAEAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAcIAKCqKIAoAKAAAoAAICgAAAAAAAAAAAAAAAAAAAAAAACgAAAAAIAAAAAAAAAAAAAAAIACAAgIKiCAgIAAAAAAACIAAAIAAAAAAAAAAAAAAACgAAoAKoAoKCg0ooigAoAAKAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAooAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAACAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAOAFABQVRRAFABQAAAAAAAFAAAAAAAFQAAAAAAAFAAAAAAAAAABAAAAAAAAAAAAAAAAAABAAQAEBBUQQEAABAAAAAARAAAABAAAAAAAAAAAAAAAUAAFABVFBQUGlFBRAFAABQAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAFAFAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAQAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAB56CqKACgqiiAKACgAAAAAAAKCAoqAAAAAAAAAAoAAAICgAAAAAAAgAAAAAAAAAAAAAAAAAAAgAIACAgqIIACAAAAgAAAIgAAAAAgAAAAAAAAAAAAAKACgAqigoKCg0oCKCgAAoAAAAAAAAAAAAKAAAAAAAAAAAAAAAACgACgAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAIAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAA89ABVAFBQVQEUAFAABQAAAAAAAUAAAAAAAAAAAAAAABQAAAAAQAAAAAAAAAAAAAAAAAAAAAQAEABAQUBEEABAAAAQAAEQAAAAQAAAAAAAAAAAAAFABQAVRQUFBQVRRFBQAAUAAAAAAAAAAAAFAAAAAAAAAAAAAAAABQBQAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAEAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAecgAoCigoAKCqKIAAoAAAKAAAAAAAAAAAAACgAAAAAAAAKAAACAAAAAAAAAAAAAAAAAAAAAACAAAgIAKgIgAgIAACAAAiAAAACAAAAAAAAAAAAAAoAKACqKCgoKCqKIoAKAACgAAAAAAAAAAoAAAAAAAAAAAAAAAAKAKAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAgAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAADzUFABQFFABaC0AFUBFAAABQAUAAAAAAAAAAAAAAAAFAAAAAUEAAAAAAAAAAAAAAAAAAAAAAAAAAEABAAQEFRABAQAAEABEAAAEAAAAAAAAAAAAAABQAUFAUUFBQUFUUARQUAAFAAAAAAAAABQAAAAAAAAAAAAAAAAUAAAUAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAABAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAHmooIAoAKAooALQWgUAFAUBFABQAAAUAAAAAAAAAAAAAAFAAAAUEAAAAAAAAAAAAAAAAAAAAAAAAAAEABAAQEFRBAAQAEABEAAAEAAAAAAAAAAAAABQAUAFBVAFBQUFAUURQAUAAFAAAAAAABQAAAAAAAAAAAAAAAAUAAAUAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAABAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAHmooAAIAoAKAooFBaABQWgAoCiiAAAKAAAAAAAAAACgAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACAgIKAiCAgAIACIAAIAAAAAAAAAAAAACgAAoKAooKACgoKAooAigAoAAKAAAAAACgAAAAAAAAAAAAAAAoAAAoAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAACAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAPMRQAFAAAEUAFAAUUAAFABQAWgUCqFEKBQKBQAWgAAAoAAKAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIACAgqIICAAgAIgAgAAAAAAAAAAAAAKAACgAqigAoKACgAqgCgogCgAAoAAAAAKAAAAAAAAAAAAAAACgAACgAAAAAAAAAAKAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAIAAAKAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAA8xFAAAAAUAARQAAUAAFUAWgUCgtAoFAoFAoFAoFAoLQFRQAUAFAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEABAQVEEABAQEAQQAAAAAAAAAAAAAFAABQAUBRQAUFABQAUBRQBFBQAAUAAAAFAAAAAAAAAAAAAAABQAAABQAAAAAAAAAFAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAEAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeYigAAAAAAKAIAoAAAKAAooFAoFAoFAoFBaBQKBQWgAoCooAKCgAAoAAAAAAAKAAAAAAAAAAAAAACAAAAAAAgAIACAgqIIACAgIAggAAAAAAAAAAKAAAAACgAqgCgAoKACgAoCigCKCgAoAAAAKAAAAAAAAAAAAAAACgAAACgAAAAAAAAAKAAAAAAAAAAAACgAIAAAAAAAAAAAACgAAAAAAAAgAKCAACgAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPMRQAAAAAAAFAAAEUAAAAFAAAAAAUEABRQAAUFABQVUAUFABQAAAAUAAAAAAAAAAAAAAAEAAAAAAABAAQAEBABUQQAEBAQBBAAAAAAAUAAAAAAAFAAAABVFABQUAFABQFFBRAFABQAAAUAAAAAAAAAAAAAAAFAAAAAFAAAAAAAAAUAAAAAAAAAAAFAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB5iKAAAAAAAAAoAAAgACgAAAAAAAAAAAoAAKoAoKCgCKooKACgAAAoAAAAAAAAAAIAAAAAAAAACAAAgAAIACCiCAgAICAiCAAAAAAAoAAAAAAAKAAAAACqAKCgoAKCgKKCiAKACgAAAoAAAAAAAAAAAAAAKAAAAAAAKAAAAAAAAoAAAAAAAAAAKAgAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADzEUAAAAAAAAABQAABAAAAAAAAAAAFAAABQAUBRQUFABVRQUAFAABQAAAAAAAAQAAAAAAAAAEAABAAQAAAEAFEEABAQEBEEAAAAAABQAAAAAAUAAAAAAFAUUFBQUFAUUFAEUAFAAABQAAAAAAAAAAAAAAUAAAAAAAAUAAAAAABQAAAAAAAAAAUBAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHmIoAAAAAAAAAACgAACAAAAAAAAAAAAKAACgAoCigoKACqigoAKAACgAAAAAAgAAAAAIAAAACAAgAAIAKAAAAIIACAgICIIAAAAAACgAAAAAAAoAAAAAKoAoKCgoKCqKIAoAKAAACgAAAAAAAAAAAAAoAAAAAAAAAoAAAAACgAAAAAAAAAAAoCAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPMRQAAAAAAAAAAAFAAEAAAAAAAAAAAAUAAAFABQUBRQUFAEVRQAUAFAAAAABAAAAQAAAEAAABAAQAERQAAFAUAAEEBAQEBEEAAAAAAABQAAAAAAUAAAAFUAUFBQUFBVFEUAFAAABQAAAAAAAAAAAAAUAAAAAAAUEBQAAAAAAFAAAAAAAAAAAABQEAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeYigAAAAAAAAAAAAKAIAAAAAAAAAAAoAAAKAACgAoKoAoKIqigAoAKAAAAACAAgAAIAACAAAAgCCCgIAACgAoCgAAggJoIDICCAAAAAAAAAAoAAAAKAACqAKCgoKCgqigogCgAAAoAAAAAAAAAAAAAKAAAAAAAKAAAAAAAAoAAAAAAAAAAAAAKAgAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACg8tFAAAAAAAAAAAAUQAAAAAAAAAABQAAAAUAAFAABQFFBQUFEFFBQAUAAAAAEABAAQAEAABAEAEFAQAAAAAFBQFFEBUQQE0E0EBEEAAAAAAAAAAABQAAUAFUAUFBQUFBVFBRAFAAABQAAAAAAAAAAAAUAAAAAAUAAAAAAAABQAAAAAAAAAAAAAAUBAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAB5aKAAAAAAAAAAogAAAAAAAAACgAAAAAoAAAKAACgAqgCgoigqgCgAoAAAAAIACAAgIAACIAAIKAgAAIACgAoKAoogCCiCaDOggIggAAAAAAAAAAAKACgAoCigoKCgoKooKIAoAAKAAAAAAAAAAAAACgAAACggKAAAAAAAAAoAAAAAAAAAAAAAAAKAAgAAAAAAAoAAAAAKACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAADy0UAAAAAAAAEUAAAAAAFAAAAAAAAABQAAUAAFABVAFABQUQBVFABQAAAAAAQAEABAAQABBAABUABAAAAAUAFBVAQAFRBAZ0EBEAEAAAAAAAAAABQAUFAUUFBQUFBVFBRAFAABQAAAAAAAAAAAAAUAAAAAAUAAAAAAABQAAAAAAAAAAAAAAAAUABAUEAAAAAAFAAAAABQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAeWigAAAAAAgCgAAAAAoAAAAAAAAAKAAACgAoAKoAoAKACiAKooAKAAAAAAAACAAgAIACAAAIIAKgAAIACgAoKoACAqIAMggIAggAAAAAAAIACgAAoAKCqKCgoKCqKIoAKAACgAAAAAAAAAAAAAoAAAAAAAAoAAAAACgAAAAAAAAAAAAAAAAoACAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAADy0UAAAAAAEUAAAAAFAAAAAAAAABQAAUAAFABVFABQAUQBQFFABQAAAUAAAEAAABAAQAEAAABAEEAFAQFAABVAAQAFRBAQEBAARAAAAAAAAAAAABQUFUUFBQUFUURQAUAAFAAAAAAAAAAAAABQAAAAAAAAABQAAAAFAAAAAAAAAAAAAAABQAEAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAHlooAAAAAIoAAAAAKAAAAAAAACgAAAAoAKCqAKCgAogCgKKACgAAAoAAAAAAAIAACAAAgAAAIACAAIEFAFAFEAAQUQQEBAQEABEAAAFABAAAAAAUFBVFwFwFBQVRRFABQAUAAAAAAAAAAAAAAFAAAAAAAAAAAAFAAAUAAAAAAAAAAAAAAAFAAAQAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAeWigAAAAKIAAAAAoAAAAAKAAAAAAACgAoKAooKAIoKAooAKAAACgAAAAAAAAAAAgAAIAACAAAAgAAEAgAKACAAgqIICAgIAAggKAAAAAAAAAAACguKNYC4C4CqKIoKAACgAAAAAAAAAAAAAoAAAAAAAAAAAAAAoACgAAAAAAAAAAAAAAoACAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAADzEUABAAUQAAAABQAAAAAUAAAAAAFAABQAVRQUAFEUFUAUAAAFAAAAAAAAAAAAAABAAAQAAEAAAAAAAABQQAEBEVNBNBAQEABEAFAAAAAAAAAABQFGsBcBrAXAVUUFAABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAUBQAAAAAAAAAAAAAVAUEAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHmIoAAAIAAAAAoAAAAAKAAAAAACgAAoAKooAKCiKACqKAACgAAAAAAAAAAAAAAAAAgAIAACAAoAAAAAAAAIADOoqaCaDIIACIAAKAAACgAAAAgKACqLgNYC4DWKKIoAKAAAAAAAAAAAACgAAAAAAAAAAAAAAAACqAAAAAAAAAAAAAgoAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPMRQAQAAAABQAAEAAAFUAAAAAUAAFABQAVQBQUFEAVQBQAUAAAAAAAAAAAAAAAAAAEABAAQAFAABQAAAAAAQE0GdRU0GdBAQBBAAAAUAAFAAAAAAAUUFwGsBrAXFFEUFAAAAAAAAAABQAAAAAAAAAAAAAAAAAAUUAAAAAAAAAAQAUAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHmoAIAAAACgAIAAAAKAAoAAAAoAKACgAqgCgoAigoCigAoAAAAAAAAAAAAAAAAAAAIACAAgKAACgAoAAAAICAmgmorOgmgyCAIIAAACgAoAAAAAAACig1gLgNYCqKIoKAAAAAAACgAAAAAAAAAAAAAAAAAAoAoAAAAAAAAAAgAoAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPNQAAAAAAEAAAAAFAAUAAAUAAFABQAVRQAUARQUAFUAAUAAAAAFAAABAAAUAEAAAABAAQAAAAFABQAAAAAQEBNBNRWdBNBkAEQQAAAFABQAAAAAAAUFUXAXAawFwFVFABQAAAAUAAAAAAAAAAAAAAAAAAFFAAAAAAAAAAAEAFAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB5qAAAAAAAgAAAAAqgAAACgAAoAKACqAKCgogCgAqgACgAAAAoAAAAAAAAAAAAIAACAAAgAKAACgAAoAIAACAzoJqKmgzoICAiAAAAAACgAAAAAAAoKouAuAuA0CqAKIAoAAAKAAAAAAAAAAAAAAKAAoAAAAAAAAAACAACgAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAgAAAAKAAAAAAAADzkAEAAAAAAAAAABQAAUAAFAABQAVQBQUAFEUFAUAUAAAAAFAAAAAAAAAAAAAABAAAQAAAAFAABQAAAAQAEBNBNQZ0VNBAQEBEAAAAFAABQAAQAAFAUUGsBQUFBQFFABRAAFAAAAAAAFAAAAAAAUAAAAAAAAAABAAABQAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQFBAAAAAAUAeegAAAgAAAAAAAKAACgAoAKAACgAKKACgoKIAoKoAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAgAICAiCaKgICAgIgAgAKACgAAAAgAAKACqKCgoKCgAoKooAigAAAACgAAAAAAKAAAAAAAAAAAgAAAAoAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAACAAAAAAAAAAABQKBQAAAAAAAAAcIAAIACAAAAAAoAAKACgoKBAICxQAAABQAUFEUBRQAAUAAAAAAAAAAAAAAAAAAAAAAEAAAABQAAAAAAAAQAEBEEFQEBAQEBEAAAFAAAAABAAAAUAFUUFBQUFBQUBRQUAAAAAAAAAFAAAAAAAAAAAAQAAAAUAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAACggFQKBQKBQKBQKBQKBQKCUCgUCgUCgUCilBaBQKBQKBQKDjEAQAEABAAAAUAAFBQAUFBYoQFgAAAAAAAKCgogCqAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAgIggqAgICAiCAAoAAAAAAIAAACgAoCigoKCgoKCgqigAAAAAAoAAAAAAAAAACAAAAAACgAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAgFAoJQKBUCgUCgUEoFAoFAoFAoFAoFAoFFSgUCgUCgUCgtAoFAoFAoFBzCAIACAgAAAAAKACgAoKooKCgAQAAAEABQAUFAEVRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAEQQVATQZBAQBAAAAAAAABAAAAAUAFBVFBQUFwFBQUFUAAAAUAAAAABAAAAAAAAAAAABQAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAASgUCgUCgUCgUEoFQKCUCgUEoFAoFAopQSgUCgUCgUCgUCgUCgUEoFAoFAoFBaBQKBQKBQKBQfEQBAAQEABAAUAFABQAUFUUFBQAAAAAQAAAFBQBFBVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAABAAAAAQBBBU0GdBNBAQEQAAAAAAAAQAAAAFABQVQBQawFwFBQUAFAUAUAABAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFABAAAAAAAAAAAAAAAAAAAAAAAAAQACgAUCglAoJQKBQKBQKBUCglAoJQKBQSilAoFAoFAoJQKBQKBQKBQKBQKBQKBQSgUCgtAoFAoFAoFAoFBhUARABAQEAABQAUAFABVFBQUFAAAAABAAAAAUAFEUBQAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAQAAAAEQQE0VNBNBnQQBBAAAAAAAAQAAAAFABQAVRQUFBQaABQUAAAFAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAoFAoFAoJQKBQKBQKBQSgVAoJQKBQSgUCgUCgUEoFAoJRSgUEoFAoFAoFAoFAoFAoFAoFAoJQKBQKBQKBQKBQKBQKBQWgUCglAVAEBEEABAAAAUFABQFFBQUFABQAAAQAAEABQAUAFEAFAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAARAFZ0E0E0GdBAEEAAABQQAAEAAAABQAAUFUUFBQUFBQUAFAABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAQCgUCgUCglAoFAoFAoFBKBQKBQKBUEoFBKBQKCUCgUUoFAoJQKBQKCUCgUCglAoFAoFAAAAAAAAAAAAAAAAAAAAAAAAABpUQAEBEEABAUAFBQFFABQUAFBQAAAAAAQAAAAFABQBAAAAAFAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAQEFQE0E0GdBEAEAFAUQABAAAQAAAUEUAFABVFBQUFBQUAFBQAAUAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAACggFAoFAoJQKBQKBQKCUCgUEoFAoFAoFAoJQKBUCgUCglAoJQKKUEoFAoFAoFAoJQKBQKACAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAANKgACAiCAgAAKCgKKCgAoAKACgAAAoIAAACAAAoAAKAAAAAAAAIAAAAACggKCAAAoIACgAAAAAAAAAAAAAIAAAACAgJoJoM6CIAIAKoAgACAAAgAAoAACiAAKCgqigoKCgoAKACgAAoAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAIABQKBQKBQKBQSgUCgUCglAoFAoJQKBQKBQSgUCglAoFAoFBKBUCgUCilAoFBKBQKCUCgUCglAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAoNqiAAgIggIACgAoKooAKAACgAAoAAAAAAAAICgAAAAoAAAAAAAAAAAAAAAAAAAAAAIAAAAAACAAAAAUCgUAAAAEBAQE0EQQEAAFUAQABAAQAAVAAAUAARQAUFABpRQUAFBQAUAFAAAABQAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAEAAAAoFAoFBKBQKBQKBQSgVAoFAqhQKCUCgUCglAoFAoJQKBQKglAoFBKKUCglAoFAoFAoFAoFAoFABAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABQAbVAEBEEBAAQFBQAVRQAUAAAFAABQAAAAAAQAAAAFAAAAAAAAAAAAAAAAAAAAAAAABAAAKBQSgUCgUCgUCgUCgUCgUCgUEBAQEQQAEAAFUAAQBAAQAVAAAAAUAAFEAUFBQFFBaC0CgtAoLQKCgAAoAAAAAAAAAAKAAAAAACAAAoAAAAAAAAAAFAAAoFBKBQKBQKBQSoFAoFAoJQKKUCgUCglAoFAoFAoJQKBQKCUCgUCgUEoFAoJQKBQSgUCgUCgUCgAAUAAAAEAAAAABAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAFAAAABQAAbVAEQQEBAAQFBQUAFUUAAAAAFAAAAAAAAAAAAAAAAAAAAABQAAAAAQAAAAAAAAAEAoFAoJQKBQKBQKBQKBQSgUCgUCgUCgUEBEAEBAABQAFABBAEAFQAAAAAAFAABQBFBQUBRQKC0CgtAoLQKC0CgUCgtAoFAoFAoFAoFAoLQAAAQCgUCgUCgUCgUCgUCgUCgUCgUCgUCoFAopQSgUCgUCglAoFAoJQKBQKBQKBQSgUCgUCgUCglAoFAoAIAAACAAAgAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAoAAAKAgAA2qAICAgIACAoKACgoAKAAAoAAAAAAAAAAAAAAAAAAUAAAAAAFABAAAAUAAEAAABAAKBQSgUCglAAAoFAoFQKoUCgVAqhQEAEBAAQAEFAUAAAAAEBAAAQAFAABQAAUAFEAUABRaBQKC0CgtBaBQKC0CgUCgUCgUCgUCgtAoFAoFAoFAoFAoFAoFAoFQKKUEoFAoLQKBQSgUCgUCgUEoFAoFAoJQKBQKCUCgUCgUCgUCgUCgUEAAAAAAAABAAAAAQAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAFAQAAAAbVAEBAQEBAAUAFBQUAAAAAAAAAAABQAAQAASgUCgAAAoAAAAAAAAAAAKAAAACAAAgCgCIAAIAAAAAAAAAAAAAACAAAgAIAKAAoAAAIACAAgAAKAACgAAoAAKAIAAAUFoFBaBVFoFAoLQKBUCgUCgUCgUCgtAoFBaKUEoFAoFAoFAoFAoFAoFAoFAoFAoFBKBQKBQKBQSgUCgUCglAoFAoFBKBQKBQKBQAAAAAAAAAAAAAAAAAAQAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAUAAAAAFAAAAAAAAAAAAAAABQAAEFAAAAABpUAQEBBQEABQAURQAUAAAAAAAAAEAAABAAAAAAAAABVAAAAAAABQAAAAABAAAEBAAAQAAAEAAAAAAAAAAAAAABAAAQAUAAABQAQAAEABAAAUAFAABQAAAAAAAAAAUQBaBQKKtAoFAoFAoFAoFBaBQKBQWgUCgUCglAoFAoFAoFAoAAAAFAAoFAoFBKBQKBQKBQSgUCgUCgAgAAAAAAAAAKAAAAAAAAAACgAAgAAAIAACAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAACgAAAoAAAAAAIAAACgAAAqAAAAAAADSiAAgIAggAKoAoAKAIAAAAAAAAAgAAAIAAAAAAKAAoAAAAAAKAAAAACgAAAAgAiAgAAIAAAAAACAAAAAAAAAAAAAgAoAAAAAAAAACAAAAAAAoAAKAAAAAAAAAAAAACgAAAoAAAAAAAKAACgAAAAgAAAAAAAAAAAAAAAIAAAAACAAIACgAACAAAAAAAIKAAAAACgAAAAoAAAAAAACiAAAgAAAIAAAAAAAAAAAAAAAAAAAAAAAAACgAAIKAAACgAAgAAAAAAAAKAAAAAAACgKIAggAAIACgAqgAAAAAAAAAAAACCAAIAAAAKAoAACAAAACgAAAAAoAAKoAAAgIACACIAAAAACAAAAAAAAAAAACgAIAAAAgAqgACAAAAgAAAKAAACgAAAAAAAgAAAKAAAACgAAAAAoAAAAAKAAAAAAAAAgAAAKCAAAACAAAAAgAAAAAIAAAAAAAAAAAAAACgAAAAoAAAKAACgAAoIAAACAQCKIAACAAAAAAAAAAAAAAAAAAAAgAAAKAACoAAAKAAAAAAAAAAAAAAAAAAAACgAAgAIAAAAAAAACgAKAAAACAoAgAAAIAIAACgAAACAAACgAAAAAAoAAAKACgAigCAgAIAAAIAAgAAAAAIACgACqAgAgAAAAAAAAACgACAAAAAAAAoAAAAAAAAAAAAAAAAAKAAAAAAgoAAAAAKAAAAAAAAAAAAAAAAAAACAAAAgAAAIAAAAAAAAAAAAAAAACgAAoAAAKAACgAoAAKCAAAAQEAgEBIBAICAAKAAAAAAAACAAAAAAACAAAAoAAAKAACgAAAAAAAAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAACAAKIAAAAACoAAAAAAAAAKAAAACgAoAAAIoAgAIAAAAAggAAACgCCAKKIAKAAAAACAAAAoAAAAAIAAoIAAAAKAAAAAAAAACAKCCgAAAAAAAoAAAAAKAAAACgAAAAAAAAAAgAAAAAAAAAIAAACAAAAgAAAAAAAAAAAAAKAACgAAoAAKAACgAoAAAAAAAAIBAICQCAQEgEAgEAAgEAAAAAAAAAgEAgEAgEAgAEAgKAACgAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAACAAAAgAAAACggAAAoAAAAAAAAAAKAACgAAAAgAIAAAAAACAAAAAAAAAAoAKAAACAAAAAAoAAAAIAABAAAAAUAAAAAAAAAAAACAAAAAAQFAAAAABQAAABQFAAAAAAAAEAQAAAAAAAAAAEAABAAAAQAAAAAAAEAABQAAAAUAFAABQAAAUAAFABQAAAAAAAAQAAEgAEAgJAIBAIBAAAAIBAWAQCAQEgEAgEAgEAgEBYBAAAUAAAAAAAAAAAAAAAAAAEAABQAAfMAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAUAAAAAFAAAAAAAABAAAAAAAAAAQAAAAFAABQAAUEAAAAABQAAAAAIBASAQCAsAgAEAgAAAAAAEAgEAgEAgAEBQIBAIBAIBAABVAAAAAAABQAAAAAAAQAAAQAFBAAAAAAEAABAIBAQCAQAAACAAAgLAAAAAAUAFAABQAAAAAUAFAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAgAAAAKAD5AAAAAAAAAAAAAAAAAAAAgAAAAAIAAAAAAAAAAAAAAACgAAAAAAoAAAAAAAAAIAAAAAAAAAAAAACgAoAAAAAAAEBQAAAAAAAAAIBAABQAAAAAAAACCEAgAAAqgAAAAAAAAAoAAAAAAAAAAKAAAACAAAAAAAAAAAAAAgAgBASAQCAQEgEAgEAgEAgEAgAEAgAKAACgAoAAAAAAAKAAACgAAAAAACgIAAIAAAAAAAAAAACggKAAACAAoIAAAAACgKAAIAAAAAAAgAAAAAAAAAAAAAKK+QgAAAAAACAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACgAAoAAAKACAoAAAAAAAAAAAAoAAAAAAAAAAAAAAACgAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAIgAAAAEAgJAIABAIAACgQAAAFAABQAAAAAAAAUAAAUAAAAAAAAAAABAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAFAAfIQAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAACAQCAQCAQCAoAAAKAAAAACgAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAACAAAAAAAAAAAKAAAAAAAAAACgACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAIgAAAAAAAAAAAAoAAAAD5iAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAABAAAIBAIBAIABAAAAUAAAAAAAAAAAFAgEAgAAAAAEAgEAgAAKAAAAAAAAKoAAAAgKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAIACgAAAAAAKAAAAAAAAAICggKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAgCACggAKAAACAoAAAAADAgAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAKAAAAAAAAAAAAAAAACgAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAICgiCgAAAAAAAAAAAAAMiAAAIAAAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAAACgAAAAAAAAAAAAAAACgAKCAoAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAICggCCggAAKAAAAAAAAAAggACAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAACgAAAAAAAoAAAAAoICgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAIgAoICgAAAAAAAAAAAIIAAAAAgAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAoAAAAKAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACCAAAoICgAAAAAAAAAAgACAAAAgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAoAAKKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAICgAAgCAACggKCAoAAAAAAAAgCAAIoAAAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAoAAAAAAAKAAAAACgAooAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAIAAAAgAAAoAAAAAAAAAAgACAIAoAAAAAAAAAAgAAAAAAAAIAAAAAAAAAAAAAACAAAAAoAAAAAAAAKAAAACgCgKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAoAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAIAAgAAAoAAAAAAACgiAAAAIgCgAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAKAAAAAACgCgKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAoAAAAAAAAAgKAAACAAAIAKAAAAAAoAAAIgAAAAggqiIKAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAKAAKoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICgAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAICgAAgAAAAKAAAAAAAAAyAgAAAAKAAgAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAoCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAKAAAAAAAAAyAAgAAACCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAoAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAACAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAACgAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAKCAoAAAAAADICAoAAIAgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAoAAAIACgAgAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAoAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAAMgIgAKACAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAgAAAAAAAAAAAAAKCAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAACgAAAAAAMogAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAICggAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAIAAKoAAAMogAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAooAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgACAoAAIAAAAAAAAAAAAAAAAAgAKKAAAAAAAAAAAAAAAAAAAACAoIAAAAAAAgAAAAAAAAoiAAAAAAAIoAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAKAIAAgKACAoAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAICgAAAAAAAAAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAIAAAAAAAAAAAAAAAAgAAAoIAoAoAAAAAAAAAAAAAAAICgAgAAAAACAAAAAAAAAAAIAAAAACggAKAAAAAAAAAAAAAAoIAAAACgAAAAIAAAAAAAgAAACAAoAAAAAoAAAAoAAAAAAAIAAAAAAACgAAAgAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAogAAAAAACAAAAAAAAAAAAAAAAAAACgAAAAAAAAKAAAAIAAAAAAAAgAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAACgAAAgAKAAAAAAAAAAgAAKAAgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAICggKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAAAAACAoAAAICggACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAoAAAAIAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAoAAAAAgKAAAAAAAACAAAAoIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgKCAAAAAAKAACAAAAAAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAKAAACAoAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAACAoAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAIAAAAAAAAAACgAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAKIAAACgAAAgKCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoIAAAAAAAAoAAAAIAAKAAACAAIAACgAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAACAAAAAAAAoAAICgAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAACgAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAgACgAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAACgAAAIAAIAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAACAoAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAACAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAACgAAAAIAIAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAACAAoAAAAAgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAKAAACAAAAoAAAAAAIAAACAAAAoAAAAAAAAgAAKCAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAACgAAAAAAAIIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAKAAAAAIAAAAAAAACgACAAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAgAAAAAKAAAAAAAAIAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAKAAAAACIAAAAAAAAAAAAAAAAAAAAAAAACAAAAoAAAAAoAAAAIAAAACgAAIAAACoAgAAKAAKIAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAKAAAACAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAgAAAIAAAAAAACgAAAAAAACAAAAAAAAKAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAKAAACAoAAIAAgAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAACgAAgAAAAACCgAAAAgAgoAAAIAoAAAAAACgAAAKAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAgAAAAAAAAAACgAAAAAAgAAAKACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAKAAAAAAAAACAAACgAAAACIAAAoIAoAAAAAAAACgAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAACAAAAAAAAAAoAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAoAAAoIAAAgAAAAoAAiACgAgAAKAAAAAAAAAAAAoAAACgAAAAAgAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAACAAAAAAAAAoAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACggACgAAAAgAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACgAAAAAgAAAAoiACqAAAIgoAAICgAAAAAAAAAAAAAKAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAoAAAAIAAAAAAAAAAAACgAAAgAAAAAAAAAKAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoIAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAACAAAIAAooAIgAoAAAICgAAAAAAAAAAAAAAAAKACAAAAAAAAAAoAAAAAAAAAAAAACAAAoAAAIAAAAAACgAAAAAAAAAAAAAgAAAAAAAKAACAAAAAAAAAAAAAAoAAIAAAAAAAACgAAAAAAACAAAAAAAAIAAAACgAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAACgAAAgAAAKCAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAIIoAIAAAAoAoAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAACAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAAAACgAAgAAAAAAAAAAAAAKAACAAAAAAAAAoAAAAAAAAgAACAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAoAAAAAIAAAAAAAgKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAAAoAAAIAAAAACgAAAAgKAAACAAAAAAAAoAAAAAAAAAgCAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAACAAAAAAoAAAAAAAAAoICgAAAAAAAgAACCgAgCgAAAAAAgAAAAAAAAAAAAAAAAAAAAAACAoIAAoIAAAAAAAKCAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAAAAKAACAAAAAAoAAAAAAAAAIAAAAAAAACgAAAAAAAACAIAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAACgAAAAgAAAAAAAAKAAAAAKCAAoAAAAICgAAgAAAKgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAACggAAAAAAAAAoICgAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAoAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAKAAAAAAAAAIgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAKAAAAKAAAAAACAoAAIACgAAIAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAACggAAAKACAoAgAAAAAAAAAAAAAAAAAAAKgAKAoAAAAAAAACAAAAAAAAAAAAAAgAKAAAAAAAAAAACgAAAAAAAAAAAgAAAAAAAAAAAAAAKAACAAAAAAAAAAAAoAAAAAAAAAIIAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAoAAAoAAAAAICgAAAAAAAAIAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAACggAAAAAAAKIAAAAAAAAAAAAAAAAAAAAgKAqgAAAAAAAAgAAAIAAAAACgAAAgAAAAKAAAAAAAAAACgAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAACAAAAAAAKAAAACAAAAAoAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAoAAoAAAAICggKAAAAAAAAgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAKCAAAAAAAAACKAAAAAAAAAAAAAAACAoIAAACqAAoAAAAIAAAACAAAAAAAoAAAIAAAAAAAACgAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAgAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACgACgAAAAAAAAAAAAAIAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAoAAAAAAAAAAAAIAAAAAACqAAAAAAAAAAAAgAAAAAAAAKAACAAAAAAAAAAAoAAAAAKAACAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAACgAAAAAAAAgAAAgAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACAAoAAAAAAAAAoACgAAAACAoICgAAIAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAoICgAgKACAoIAAAAAAACqAAAAAAAAAAAAgAAAAAAAAKAACAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAIAAAAAAAAAAAgAAAAAKACAAAAAAAoAAAAAAAAAAKAAAAAAAAAAAACAAAAAoAAAAAAAAAAoAICggAACgAACoAAAAAIAAAAAAAAAAAAAAAAICgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAooAAAAAAAAAAAAgAAAAAAAKAAACAAAAAAAgKAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAAAAAAAIAAACggAAACAAAAAAAAAAAAAAAAAoAAAAAAAAKAAAAAAAAAAAACAAAAAAAoAAAAAAAAoICggAAAAAAAKAAAAAACAACAoAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACggAAAAAAAAAoAAAAAAoAAAAAAAAAgAAAAAAAKAAACAAAAAgAAAAAKAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAAAAAAAAAAICggAACAAAgAAAAKAAAAAAAAACgAAAAAAoAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAgAKAAAAAAAAKAAAAACAACAAoAAAAAAAAAAAAAAAAAAAgACCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAoAAAAAAAAAoAAAAAAAAAgAAAAAAAKAACAAAAAAgAAAAAAAKAAAACgAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAgAAIAAAAAAACgAAAAAAAoAAAAAKAAAAAAAAAAAAACAAAAAAAAoAAAAAAIAAAAAAAACgAAACgAAAACIAAKAAAAAAAAAAAAAACAoAAAAgACAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAoAAAAAAAAAAoAAAAAAAAAAgAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgCAAAAgAAAAAAAKAAAAAAACgAAAAAoAAAAAAAAAAAAIAAAAAAAAACgAAAgAAAAAAAAAAAKAAAKAAAAAIgAAAAAAoAAAAAAAAAIAAAAIAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAoAAAAAAAAAAAAAoAAAAAAAAgAAAAAAAAAAAAAAIAAAACAoAAAAAKAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAIAAACAAAAAAAoAAAAAAAAKAAAAAACgAAAAAAAgAAAAAAAAAAAAAAKCAAAAAAAAgAAAKAAKAoAAAAAACIAAAAAAAAKCAAoIAAAAAAAIAAAAAAAACgAAACgAAgAAAAAAAAAAAAAKCAAAAAIACgAAAgAoAAAAAAAACAAoAAAAAACgAAAACAAAAAAAAAAAAAAAgAAAAAIACgAAAAoAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIgAAAAIAAAAACgAAAoAAAIAACgAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAKCAoIgAAAAAqgAAAoAAAAACIAAAAAAAAAAAAAAAAAAAgAAAAAAAAAKAAKCAAAoAIAAAAAAAAACgAAgAAACAAAAAACgAAAAAAAAAIAAAACgAAAAAAKAAAIAAAAAAAAAAAAAACAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCAAAAAAAAAAAAKAAAAAACAAAAoAAAAAAAAAAAAAAIAAAAACgAAAAAAAAACgAAiAAAAACgKAAACgAAAAIgAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAoAAAICggAAAAAAAAAAKCAAAIAAAAAAAKAAAAAAAAAAgAAAAAAKAAAAAAAoAgAAAAAAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIIAAAAAAAAAAAoAAAAAAIAAAAACgAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAKACAIAAAAKAoAAAAKAAACIgAAAAAAAAAAACgAAAgAAAAoIAAAAAAoAAoAAAAAAAIAAAAAAAAAAAAAAgAAAAAAoAAAAAAAACAAAAAAAAAAAoAAAAIAoAAAAAAAAAAAAAgAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAACAAoAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACACAAAAAAAqgACAAAAAAAIAAAAAACgAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAKACIAAAAKAoAAAAAKCAAIgAAAAAAAAAAAAAAAAAAAKAACAAAAAKAKAAAAAAAAAAAACAAAAAAAAAAIAAAAAAAKAAAgAAAAAAAAAAAAAAAAAKACAAKAAAAAAAAAAAAAIAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAIAAAAACqAAAICggAAAACAAAAAAAAoAAAAAAAAIAACAAAAoAAAAKAAAAAAAAKAAAAgAAAKAAAAAAAAAAiAAAAAAAAAAAAAAAAAAAoAAIAAAAAAooAAAAAAAAAAAAIAAAAAAAAAAAgAAAAAAoAACAAAAAAAAAAAAAAAAAAAAAAAKAAIAACgAAAAAAAgAAAAAAAAAAAAAAKAAAAAAgKAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAIAAAIAACqAAAAAAAAIAAAgAAAAAAAAKAAAAAAACAAAgAAAAKAAAAAAAACgAAAoqAAAAAAAAAAoAAAAIAAiAAAAAAAAAAAAAAAAAAAAoIAACgAgACgCgAAAAAAAAAAAgAAAAAAAAAACAAAACgAAAIAAAAAAAAAAAAAAAAAAAAAAAAoAgAAAAKAAAAAAACAAAAAAAAAAAAAoAAAACAAAAAoAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAIAAgAAAAAAAAKAAAAAAACAAAgAAAAKAAAAAAAAACgAAooACAAAAAoAAAAAAAIAAiAAAAAAAAAAAAAoAAAAIAACgAAgAAAACigAAIAAAAAAAAAIAAAAAAAoAAIAAKAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAIoAAAAAoAAAAAAAIAAAAAAAAAAAACgAAIAAAAAAAACgAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAgAAAAAAKAAAAAAAAAAAAAACAAAAAoAAAAAAAAAAAAgACAAAAAAAoAAoAAAAIAgAAAIAAACgAAAAAAAAAoAAKKAAAAAAAAAAAAAAAgACIAAAAAAAAAAAACgAAAgAAAAAAAAAAAAKAAAAACAoICggAAAAAAAAAAAAAKAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAIoAAAAAoAAAAAAAAIAAACAAAoAAAAKAAgAAAAAAAAAAAKAAAACAoAAAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAACgAAAAAgAAAAKAAAAAAAAAAAAAAAAAIgAAAKAAKAAAAAACIAAACAAAAAAAAAAAAoAAKAAKoAAAAAAAAAAAAAAIAAiAAAAAAAAAAAAoAICggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAIoAAAAoAAAACAAAoAgAAIAAACgAAAoCAACgAgAAAAAAACgAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAiAAAAgAAAAAAAAAAKAACgAACqAAAAAAAAAAAAACAAIgAAAAAAAAAAAKAAAACAAAAAAAAAAAAAAoIAAAAAgAAKAAAAAAAAAAAKAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAIoAoAAAAACAAAAAogAAIAAACgAAAoCAAAAAAAAAAAAAoAAAAAAAAAAAAAAICgAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAIIAAAAgAAAAAAAAAKAAAACgACgAKAAAAAAAAAACAAAIgAAAAAAAAAAAKAAAAAACAAAAAAAAAAAoIAAAAgAAAAAAKAAAAAAAAKAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAKIAAACAoAAAAKgAAAAAAAAAAAAKAAIAACgAAAAAAAAAAICgAAAAAAACgAAAAgAAAAAAAAAAAAAgKAAAAAAAAoAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAggAAAACAAAAAAoAAAAAAAKAAKAAAAoAAAAAAAAIAAAiAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAKAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACggAAAAAAAAgCgAAAAAACgIAAAAAAAAAAAIoAAAAAAAAAoAAAACAoICgAAAAAAAAAACgAAgAAAAAAAAAAAAIACgAAAAAAoAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAgAgAAAACAAAAAoAAAAAAAAAKAAKAAAAAoAAAAAAIAAAiAAAAAAAAAAAoAAAAAICgAgAAAAAAAAAAAACAAAAAAAAAAoAAAAqAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAKAAAAACCgAAAAAAAAAgAACgAAACAoAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAoAAAAAAKAAAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAIAIAAAAAAgAAKAAAAKCAAAAAAAqgAAAAAAoAAAAAAIAAiAoIAAAAAAACgAAAAAgKAAACAAAAAAIAAACgAAgAAAAAAAKAAKAAAgAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgCgAgAoAAAAAAAAIAAAAAAAogAAAAAKAACoAAAAACgACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAIIAAAAAAAAACgAAAAAAAAAAAAKAAAAAAACgAAAAAgCAAAAAAAAAAAAAAAAAIAAAAAAAAAAgAAAKKCAAIAAAAACgCgAAAAAIACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAgAAAAAAAAAAIAoAAAAqAAACgAAAAKAIAAAAAACgAAIAAAACgAAAAAAAAAAAAAAAAAAAgAKKgKAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAgAgAKAAAAAAAAAoAAIAAAAAAACgAAAAAAAoAAAAAIgAAAAAAAAAAAAAAAAAACAAAAAAAIAAAACgCgAAgCAAAooAAAAAAACAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAoAAAAAAAAAAAAAAAIAAAAAAAAAACAAAAAAAoAAAKAAAAoAgAAAAAAAAKgAAAAAAAKAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAACgAAAAAgAAAAAAKAAAAAAACgAAAAiAAAAAAAAAAAAIACgAgAAAAAAAACAAAAAoAoAICggKCAoAAAAAAAAACAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAAACAAoAAAAAAAACgAAAAAAAAAAgoAAAAAAACgAAAAAAAAAAAAAAAgAAAAAAAAAAAKAAKAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAoAAAAAAIAAAAAAAACgAAAAoAAAAIgAAAAAAAAAAAACAoIAAAAAAAAAgAAAAKAAKAAAAAAAAAAAAAAAAgAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAKAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAACACgAAAAAAAAKAAAAAAAAAAAAACAAAAAAAAAAAAAAAoAAoAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAAgAAAAAAAAAAKAAAACgAAAiAAAAAAAAAAAAIACggAAAAAAACAAAAAoAoAAAAAAAAAAAAAACAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAKAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACgCggAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAoIAAAAAAAAAAAAAACgAAAoAAAIgAAAAAAAAAAAAACAAAAAAAAAIAAAAKoAAgKAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAACgCAAAAAqAAAAACgAAAAAAAAAKAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAKAAACIAAAAAAAAAAAAgAAAAAAAAAACAACgAiigAAAAAAAAAIAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAACiAAAAAAqAAAAACgAAAAAAAKAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAgAAgAAKoAAAAAAAAAAAAAAAAAAAAAAAKAAAACgAAiAAACAAoAAAAAgAAAAAAAAAAACACggKAAoAAAAAAAIAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAACiAAAAAAIKAAACgAAAAAAAAKAAAAAAAAAICgAAAIAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAACAACAAAAAAqgAAAAAAAAAAAAAAAAAAAAAAoAAAAAKADKAAICgAgAAACgAAAAAAAAAAAAgAAAAAoAAAAAAAAAAAAACAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAACgAAAAAgAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAigAAAAgoAAAAKAAAAAAAAoAAAAAAgAAAAAAKAAAAAAggKAAAAAAAAAAAAAAAAAoAAAAAAAAAAgAAAAAAAgCAAAAAoAoCgAAAAAAAAAAAAAAAAAAAAoAAAAAAAKDKAIAAAAAAAAAAoAAAAAAAIAAAAAAAAKAAAAAAAAAAAAAAgAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAIAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAoAIAKAAAAAACgAAAAAKAAAAIAAAAAAAAAAAAAAAAAgAAAAKCACgAAAAAAAAAKAAAAAAAAIAAAAAIAAgAAAAAAAAKKAoAAAAAAAAAAAAAAAAAAAKAAAAAAAACIAAgAAAAAAAAAACgAgAAAAAAAAoICgAAAAAAAAAAAAAAAIAAAAAAAAAAAAAACggAAAAAKAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAKAAAAAoAAAgAAAAIAAACgAAAAAAAAAIAACgAAgAoAAAAAAAAgKAKAAAAAAIAAAACCAAAAAAAAAAAKKAAoAAAAAAAAAAAAAAAAAKAAAAAAAAACIAAAgAAAAAAAAAAAAAAAAAKACAoAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAACoACgAAACAAAgAAAAgAACigAAAAAAACAoAAAIAKAAAAAIAACgACgAAAACAAAAAggAAAACAAAoAAAqgAAoAAAAAAAAAAAAAAAAAKAAAAAAAAACIAAAAgAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIKAAoAAgAAAIAAAIAAAAAAAooAAAAAgKAAACAACgACAAAAAAAoAoAAAgAAAAAIIAAAAgAAAKAAACigAKAAAAAAAAAAAAAAAACgAAAAAAAAAAiAAAAIAAAAAAAAAAAACggKAAAAAAAAAgAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIoAAAoACACgAAKIAAACAACAIAACgAAAAoAoAAAgAKAAACACiAoIAAAACgAAACiAAAAAAACIKAAAACAAAAAAAqgAoAAAAAAAAAAAAAAAAAKAAAAAAAAAACIAAAAAAAgKCAAAoICgAAAAAAAAAAAAAIAAAACgAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAoAAAAAAAAAIAAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAICgAAAAAAgCgAAACoAAKAAAogAAAIAACCAAAAKAAACgCgAAAAAAACAACiAoAAAAAAICgCggggqgAAAAAAIAAAAAAIAACgAKACgAAAAoIAAAAAAAAAACgAAAAAAAAAAAiAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAACAoAAAAAAIAAoAAIKAAACgAAigAACAAAggAAACgAAoAAoAAAAAAAAAgCAKAKAAAAAAAACAqAKAAAAAAAAAIAAAAAAAACgAAoAAAKAACAAAAAAAAAAAoAAAAACAoICgCIAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIACgAAAAAAgAAAAKAAACgAgACgACAAACIAAACgAAoAoAAAAAAAAAAiAAAKKAgAAKAAAAAAAoAAAAAgAAAAIAAAAAAACgAAoAAKAAACAAAAAAAAAAAAoAAAAAAACAoiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAoIAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAoAAAAAAIAAAACgAAAoAIAAAoAAgAAIIAAAoAAKKAAAAAAAAgKAIIAAAAoAAAAACgAAAAAKAAAAAAIAAACAAAAAAAoAAKAACgAAAgAAAAAAAAAAAAKAAAAAgAAKIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKACAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAICgAAAAAAAAAAAKAIAAAIgAKAAAKAoAAAAAIAAAAIqAAAKAAAAAAAoAAAAACgAAAAgAAAigACAAAAAoAAKAAACgAAAgAAAAAIACgAAAAAoAACAAAAoiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAogAAAAiCqIACgAAAAAAAAAAAgCoAAoAAAAAAACgAAAAAAAKCAAICgAIAoAAAgAKAAACgAAAoAAIAAAAACAAAAAoAAAAKAAAgAKCCAAAAAAAgAKAAAAAAAAAAAAAAAAACAAAAAAAAAAAAgAAAAKAAAAAAAAAAAACgAAAgAAAAAAKACAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACiAAAACAoAAAAAAAAAAAAAIAqAAKAAAAAAAAoAAAAAACggAAACAoACKAAAAAAAAKAAAACgAAgAAAAIAAAAAACgAAAAoAACAACAAAAAgAAAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAgAAAAAAAKAAAAAAAAAACgAAAAAAgAKCAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAACgAAAAgAAAAAACggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKIAAAAAAAAAAAAAAAAAAIAIKAKAAAAAAAAoAAAAAAAAAAAAAgKCACqgAgKAAAAoAAAAAAAAAAAAAIAAAAAACgAAAAoAAAAAIgAAAAgAAAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAgAAAAAAAKAAAAAAAAAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAKACAAAAAAAAAAAAAAAAAAoAAAIAAAAAAogAAAACACgAAAAAAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAogAAAAAAAAAAAAAAAAAggoAoAAAAAACgAAAAAAAAAAAAAACAoIAAKAoCAAAoAAAAAAAAAAAAAAIAAAACgAAAAAAoAAAAAIgAAAgAAAAAAKAAAAAAAAAAAAACAAAAAgAKAAAACAAAAAAAAAAoAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAoAIAAAAAAAAAAAAAAAAACgAAgAAAAIoAAAAAAAIAKAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAACiAAAAAAAAAAAAAAAAAqAICgAAKAAAAAAAAAAAAAICgAAAgAAAKCAACqAAAAAAAAAAAAAAAAAAAAgAKAAAAAAAAACgAAAAiAAACAAAAAAAoAAAAAAAAAAAAAIAAACAAAAAoAAIAAAAAAAACgAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAKACAAAAAAigACAAAAoCACgAAAAAAAAAAAAAAAgACgAAAAAAgAAAoAAAAAAAACiAAAAAAAAAAAAAAAqAAAACgAAAAAAAAAAAAAAAAAAAACAAAoAICioCgAAAIAACgAAAAICggKAAAAAAAAAAAAAAAKAAAACIAAIAAAAAAACgAAAAAAAAAAAAAgAAAIAAAAAAAAAAAAACgAAAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIoAAgAAAKAgAoAAAAAAAAAAAAAAIAoAAAgAAKAAgAAAoAAAAAAAACiAAAAAAAAAAAAAqAAAAACgAAAAAAAAAAAAAACAAAAoIACggAKCAAoAoAAAgAAAAAKAAAgAAAKAAAAAAAAAAAAAAKAAAACIAIAAAAAAACgAAAAAAAAAAAAAAAgAAIAAAAAAAAACgAAAAAAAAAAAAAAAAoAAAAAAAAAAAIAAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAKIACAAAAoCACgAAAAAAAAAAAAAgCgACAAAAAAoACAACgAAAAAAAAAigAAAAgqgAAAgAAAAAAAoAAAAAAAAAAAAAAAAgKAACAAAAAAoAAAAAAogAAAAAAAKAAAgAAAAKAAAAAAAAAAAAAAKAADKAAAAAAAACgAAAAAAAAAAAAAAAAgAAAIAAAAAAACgAAAAAAAAAAAAAAAAAoIAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAICgAKAAAAAACAAACKAAIAACgIAKAAAAAAAAAAAACAKAIAAAAAAAACgIAKAAAAAAAAAAACKACCgAAAAAAAAAAAAAAoAAAAAAAAAAAIIKAAAAqoAAgAAKCAoICgAAACiAAAAAAAAoACAAAAAAAAAAoAAAAAAAAAAAAAgACAAAAACgAAAAAAAAAAAAAAAAAgAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAAACAAoAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAigACAoCAACgAAAAAAAAAAAAgCiAAAAAAAAAAoCACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAqAAAAAoACoAgAAAAKAAAAAAigAAAACgAAAIAAAAAAAAAAACgAAAAAAAAAACAAAIAAKAAAAAAAAAAAAAAAAAAACAAAAAgAAAAAKAAAACgAAAAgAAAKAAACAAAAAAAAAAAAAAAoAAAAAAAAIAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAigAgAAAoAAAAAAAAAAAAIAAogAAAAAAAAKAAgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAKgCAAACqAAACoAAgAAKAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAoIACgAgAAAigAAgAoAAAAAAAAAICgAAAAAAAAAgAAAAIAAAAACgAAAoAAAAAAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAAgAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAKAAAACCggAAIAAAAACgAAAAAAAAAAAAgACiAAAAAAAAoACACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAoggAAAAAKAoAAKgCAoAICgAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAigAAAgoAAAAAAAAAIACgAAAAAAAAgAAAAIAAAACgAAAoAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAACgAAAAAgAAAIAAAAAAACgAAAAAAAAAAAAAAAAAAAAoAIAAoAAAIKCAAAAgAAAAKAAAAAAAAAAAACAAKIAAAAACgAAIAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAIAqAAIAAAACigKAAAgAoAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAioCgACCgAAAAAAAAAAAAAAAAAAAAgAAAAAIAACgAAAoAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAACgAAAgAAAIAAAAAAAACgAAAAAAAAAAAAAAAAAoAAAAAAIAoAAAIAAAAIAAACgAAAAAAAAAAAAAgAAIAoAAoACAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAACAKAgCAAgAAKACigKAAAgAoAAAAAAAAAAACggKCAAAAAAAAAAAAAAAAAAAAAAACgAyqAAogAoAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAKACAAAAAgAAAAAAAKAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAgAAAAAIACgAAAAAAAAAAAAAAgAAAIoAoACAAAACgAAAAAAAAAAAKCAAAAAAAAAAAAAAAAAAAAAAAAAACAKAAiAAAgAAAAKACigKAAgAoAAAAAAAAAACggAAAAAAAAAAAAAAAAAAAAAAAAoAAMqgAigAKAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAgAAAAAACggAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAoAACIACAAAAAAAoAKKAoACCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAMiAAoAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACAAAAAAKACAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgCgAACACAIAACAAAAoAKCigKACoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAADIgKAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAACgAACgAIAAAAAIAAAAAAAAAAAAAAAAAAAAAACAAAAAAKCAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgACgAACAACAAIACAAAAAoAKKoKAAgoAAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAoAAAAAMgAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAoAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgoAAAAAIAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAoAAgAAAAAiAAAgAAAAAKCgooCgIKAAACAAAAoAAAAAIAAAAACgAAAAAAAAAAAAoAAAAAMgAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAKAAAAKAAgAAAoAIAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAIACgAAAAAgAACiAAAAAAAACIAACAAAgKACgoAqgoACCgAgAAAAAKAAACAAAAAAAAoAAAAAAAAAAAKAAAAADIAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAKAAAAAAKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAACgAAgAAAAAAAAIoAAAIKAACAAAKIAAAAAAACACAAAAIAAAACgCqCgoACAAAAAAAAACgAAAgAAAAAAKAAAAAAAAAAAACgAAAAgAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAACgAAAAAAgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAoAAAAIAAAAAAACKAAAACAAAAogAAAAAAAAIAIAAAAgAAAAKCgAooCgAIAAAAAAAAKAAACAAAAKCACgAAAAAAAAAAAAAAoAAIAAAAACAAAoAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAoAAAIAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAKACAAAAAAAAAoAAAIAAAAAAACAKAAAAAAAIAAAAAAAACAACAAAAAAICgAAoAqgAoAAACAAAAAACgAAAgAAAAAAAKAAAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAgAAAAAAKAAAAAAAAAAAAAACAAAKAACACgAAAAoIAAAAAAAAAAAAAAAAAAAAAACKAAAAAIAAAAAAAAAACAAAACAAAAAAKACigAAKAAAAAgAAAAoAAAIAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAKIAACgIAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAKAAIAAAAAAAAAAACAAAAAAAoAAAKAAAAAAAAACgIAAAKAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAKAAAAIAAAACoAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAKAAIAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAoCAACgAAgAAAACggAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAIAAoAAAAgAAAAAAKgAAoAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAgAAAIoAAAAAAAAAAAAAAAAoAAAAAAAAIIAAACqACgIAAKCAAAAAKAAACACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoIAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAACgAAAAgACgCAAAAAAAAAAAqAACgAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAACAAAAAgCgAAAAAAAAAACgAAAAoIAACACAAAAAqgAoCAAAAAAAAoAAAAIKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAKAAAAACAKAIAACAAAoAAAACCgAAoAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAgAAAAAIAoAAAAAAAAoACAACgKCCKAAIIAgAKAKAoAKgAAAAAAigAACgAIAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAKACAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAoAAAAAAIAoAgIAAIAAACqAACoAAAKAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAgAAAIAAAACAKAAAAAKgAAAAoAAAAIAogAgCAAoAoCgAqAAAACAKAAAAKAAgAoAAAAAAAAAAAAKCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAgACiAgAiAAoAAKKAIKAACgAAAAAAAAAAAAAAAAAAAAAoAAAAAKACAAAAAgAAAAIAAACAAAAoAAAAAKAAAAACAAKIAAIgqiAoCgAAqAACAKAAAAAKAAgAoAAAAAAAAAAAKADIAAAKAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAIAogIAIgAAKACigKgAAAoAAAAAAAAAAAAAAAAAAAAAKAAAAACgAgAAAAAIAAAACAAAAAAAAAAAAAoAAAAAAIAAogAAAAAAKAAAAAAAAAAACgAIAKAAAAAAAAAAACgAgIACgAAAgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAIAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgCiAAggCAAoAKKAqAACgAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAACAAAAAAAAAAAoAAAAAAAIAACKAAAAAAKAAAAAAAAAAACgIAKAAAAAAAAAAACgAgAAAAAAAIAAAAAAACgAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAACAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAogIAAIAAAoogoAKAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAIAACAKAAAAAKAAAAAAAAAACgIAKAAAAAAAAAAACgAgAAAAAAAIAAAAAAAACgAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACKAAAICiAoCoAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAIAAACAKAAAAAAAAAAAAKAACgIAKAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAIAAACgAAAAAAAAAAAoAAAAAAIAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAigAgAoAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACKAAAAAAAAAAAAAKAACgIAKAAAAAAAAAAAAAAACgAAgAAIAAAAAAAAAAAAAAAACgAAAAAAAAAAAoAAAIAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAoAAAAAAIAAAAAAAAAAAACAAAAAAAAigAAAAAAAAAAAACgAAoAKgAAAAAAAAAAAAAAAoAAIAACAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAoAAAAAAAIAAAAAAAAAACAAAAAAAAAAKIAAAAAAAAAAAAACgAoCCgAAAAAAAAAAAiigIKAACAAAAgAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAIAAAoAAIAAAAACgAACAAAAAggAKoAKACgAIKAAAAAAAAAACKAKAgAAAAAAgAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAgAAAAAAIAAoAAAAIKAAACAAAAKAIAACCAAAqgAoAKAAgoAAAAAIAAAAoAAoCAAAAAAACAoAAAAAIAAAAAACgAAAAAAAAAAgAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAgAAAAAIAoAAAAoCAAAAAACAAAAigACCAKKAAoAKAAAgoAAIAAAAACKKAACoAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAgAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAKAAAAAAAAAAAAACAAAoAAAAAAAAAAKAAACAAAAAAAAAAAAAAAAAAKAACAAAAACggAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAgCgAAACgAIKAACAAAAgAAIoAAAAAAoAAKAAAgAAAAAAAAiigAIAKAAAAAAAAAAAAAAAAACAAoAAAAAAAAAAIAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAACAAAAAoAAAAAAAAAKAACAAAAAAAAAAAAgCgCgAgAAAAAKAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAACAKAAKAACoAAAAIAAACAAAKIAACgAAAAoAACAAAAAAAACAoAAAAKAAAAAAAAAAAAAAAAAAACAAAoAAAAAIAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAIAAAoAAAAAAAAAAAAoCAAAAAAoAAIAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAgCgACgAAoCAAAACAAAAAgACgAAAAACgAAAIAAAAIAACgAAAAAAAoAAAAAAAAAAAAAAAAAIAAAACgAAAAgAAAAAAAAAAAAAAAAKACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAKAAAAAAAAAAAAACAAAAAoAAAAAAAAAAAIAAAAAAAACgAAAAAAAAAAAAAAAAAAgAACgAAAAAAACAAAoAAKAgKAAIAAAAAAgoAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAigACgAAqAAAAACAAAAAAAAAAKAAAAAAACAAAACAAAoAAAAAAAKAAAAAAAAAAAAAAAACAAAAAAAoAAAIAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAAKCAAAAAAAAAAAgAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAoAAAAAAAAAAAAAAAIAAAAAogAAAAAAAAAAAAKAAAAAAAACAoAACCgAAAAAAAAAAAAAAAAAAAAoAAAIAAAAACAKKAAAgAoAAAAIAAAAAAAAAAAAAoAICggAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAIAAAAAACgAAAgAAAAAAAAAAAAAAAAKACAAAAAAAAAAAAAAAAAAAoAIAAAAAAAAACAAAAAAAAAAAAAoAAAAKAAACAAAAAAAAAAAAAAgKAACAAKAAACAAAAAACgAAAAAAAAAAAAgAAAAAAIoAAAAAAAAAAAAAAoAAAAIAAAAACgAqAAAAAAAAAAAAAAAAAAAAAACgAgAAAAAICgAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAD/9k=", + skyBoxUp: "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAFA3PEY8MlBGQUZaVVBfeMiCeG5uePWvuZHI////////////////////////////////////////////////////2wBDAVVaWnhpeOuCguv/////////////////////////////////////////////////////////////////////////wAARCAgACAADAREAAhEBAxEB/8QAGQABAQADAQAAAAAAAAAAAAAAAAECBAUD/8QAFBABAAAAAAAAAAAAAAAAAAAAAP/EABYBAQEBAAAAAAAAAAAAAAAAAAABAv/EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhEDEQA/APJtkAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAQBQAAAFAAAAAABQAAAAAAAAAAAAAAAAAAAABEAAABAFAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAGIAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAqAAKAAAAoAAAAAKAAAAAAAAAAAAAAAAAAAAAIAgAAIAoAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAxAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFQABQAAAFAAAABQAAAAAAAAAAAAAAAAAAAAABEAAABAFAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAGIAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAqAAAKAAAoAAAAKAAAAAAAAAAAAAAAAAAAAAAIgAAAIAoAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAxAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAQAABQAAFAABQAAAAAAAAAAAAAAAAAAAAAABEAAABAFAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAGIAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAoCAAKAAoAAKAAAAAAAAAAAAAAAAAAAAAAAIgAAAIAoAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAxAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAFARQAAFAABQAAAAAAAAAAAAAAAAAAAAAABEAAABAFAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAqKAAAoAAAKAAAAAAAAAAAAAAAAAAAAACCAAAAIAoAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAxAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAVUAAAFAAABQAAAAAAAAAAAAAAAAAAAAAQQAABAAFAAAAEAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAACiCgAAAoAAAAKAAAAAAAAAAAAAAAAAAAACACAAIAoAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAxAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAUAAQUAAAAFAAAABQAAAAAAAAAAAAAAAAAAAQAQABAFAAAAEAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAFBgAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAoAAAgoAAAAAKAAACgAAAAAAAAAAAAAAAAAAgAAgCAAKAAAAIAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAKDAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAABQAAABABQAAAAUAAAFAAAAAAAAAAAAAAAAAABABAAEAAUAAAAQAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAUGAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgACgAAAAACCgAAAAoAAAKAAAAAAAAAAAAAAAAACAACAIAAAoAAAAgAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoMAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFFAAAAAAAAAEFAAABQAAAUAAAAAAAAAAAAAAAAEAAAEAQAABQAABAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABiAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAoAICggAKAIKAAACgAAAoAAAAAAAAAAAAAAAIAAAIAAgAACgAACAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAADEAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFUQFBAAAUABUAAAAFAAAABQAAAAAAAAAAAAAQAAAAQABAAAFAAEAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgCggAKAAIKAAAACgAAAAAoAAAAAAAAAAAIAAAAAIAAgAACgACAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAADEAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBAAAAAAAAAUEABQQFBFFABAUAAQUAAAAFAAAAAABQAAAAAAAAAQAAAAAAAQBAAFAAAEAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAACAAAoAAIACggAKCAoIooAAAAAgoAAAAKAAAAAAACgAAAAAAgAAAAAAAAAiAAKAAAIAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAMQAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAEABQAAAQFAABAAUEBQAQFBFFAAAAAAEFAAAABQAAAAAAUAAAAAEAAAAAAAAAEQAABQAABAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAABiAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAKAAACAoAICgAgKACAoIooAAAAAAgoAAAAKAAAAAACgAAAgAAAAAAAAAAIAIAKAAAAIAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAMQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUEAAAAABQAQFAAABAAUAAAAAEBQAQFABAUBQAAAAAAEFAAABQAAAAAAUAAAEAAAAAAAAAABABABQAAAABAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAABiAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAKACAAoAAAICgAAgKACAoAIACggKAoAAAAACACgAAAoAAAAAAKAACAAAAAAAAAAgAAgAAoAAAAAgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAxAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAABQAAAAAAAAAAAAAAFABAAAAAUAEABQAAAAAAAAAAQFABAAUEBQFEBQAAABABQAAAUAAAAAAFABAAAAAAAAAAQAAAQAAUAAAAAQAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAYgAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAoAAAAAAAAAAAAAAAAAACggAAAAKCAAAoAAAAAAICgAgAKACAAoICgiigAAAACCgAAAAoAAAAAAAAAAAAAAAAAIAAAIAAKAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAMQAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAUAAAABQQAAAAAAAAAAAAAAAAAAAAAAFAABAUAEBQAQAFABAUEBQRQABQAABABQAAAAUAAAAAAAAAAAAAAAAAEAAEAAFAAAAAAEAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAGIAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAKAACKKgAAAAAAAAAAAAAAAAAAAAAAAKAACAoAIACggAKCAAoIAAooIACgACACgAAAAoAAAAAAAAAAAAAAAAAIAAIAAKAAAAAAIAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAMQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFAAAFQQAAAAAAAAAAAFBFAABABQAAAAAAAAAAAAAAAAAAAAAFAABAUAEABQQFABAUEBQRQABQAAABABQAAAAUAAAAAAAAAAAAAAAAEAEAAAFAAAAAAEAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAGIAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAigACoAAAIoIAAAAAAAAACgAAAgAAoAAAAACggAAAAAAAAAAAAAKACAAoAICgAgKCAoAICgiigAAAAACACgAAAAoAAAAAAAAAAAAAAAAIAIAAKAAAAAAIAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAMQAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAUEUAAEAAAAAAABQAAAAAAQAUAAAABQAQAAAAAAAAAAAAAFABAAAAAUEBQAAAQFBFFBAUAAAAAQAUAAAAFAAAAAAAAAAAAAAABAABABQAAAAAABAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAABiAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAoAAAAIAAAAAACgAAAAAAgoAAAAAACgAgAAAAAAAAAAAAAKACAAoICgAAAAAAAAKAAAAAAAAAgoAAAAKAAAAAAAAAAAAAACAAACACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAxAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAUAAAAAAEAAAABQAAAAAAQAAUAAAAAABQAQAAAAAAAAAAAAFAABAAUEBQAAAAAQFBAVQAAAAAAAAEFAAAAABQAAAAAAAAAAAAAQAAAQAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAGIAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAACgAAAAAAAAgAAKAAAAAACAAAAACgAAAAAKACAAAAAAAAoAIACgAAgAKCAoAAAAAAAACgAAAAAAAAIAKAAAAACgAAAAAAAAAAAAgAAAgAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAMQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAFAAAAAAAABAAAUAAAAAEAAAAAAAAFAAAAAUEAAAAAAABQAAAAAAAQAFBAUAAAAAAAABQAAAAAAAAEAFAAAAABQAAAAAAAAAAAAQAAQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAGIAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAgAAAAoAAAAAAAAAICgAiigAAAAAAIACgAgKAAAAAAAAoAAAAAAAAACIoAoAAAACgAAAAAAAAAAAgAAAgAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAUAAAAEBQAAAAAAAAAAAAAAAAAAAAAAQAAAAAUAAAEBQAAAQFBFAFAAAAAAAQAFBAUAAAAAAAABRAUEBQAAAABEAUUAAAAAABQAAAAAAAAQAAAAQAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAKAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAIAAAAAKACAAAoAIACgigCgAAAAAIACggAKAAAAAAAAoAAAAAAAAAggAoAoAAAAAAAAAAAAAAAAAIAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAFQAAFAAAAEABQAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAUAEAAABQRQQFAFAAAAAAQAFBAAUAEBQAAAARRQQFBAUAAAAAAEEFAFAAAAAAAAAAAAAAABAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIKAAAAAoAAAAgAKAAAAAAAAAAAAAAAAACAAoAAAAIAAAAAKACAAAoIoICgACgAAAAAICgAgKAACAoICggKAogKCAoICgAAAACAIoAoAAAAAAAAAAAAAIAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAABBQAAAAAAFAAAAEBQAAAAAAAAAAAAAAAAAAAQFAAAAABAAAAAAAAAAUEABQBQAEBQAAQFABAUAAEBQAAAARRQQFBAUEBQAAAAAQQAUUAAAAAAAAEAAAAFAAAAEABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACgAIAAAIKAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAgKAAAAAACAAAoAIAACggAKAAKACAoAAAAAAAACAoAAAAACiAoICgAAAAAACIAAAACgAAAKAIAKAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAKDzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAEUAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAUEABQAABQQAFBAUAEBQAAEBQAQFBAUEUUEBQQFBAUAAAAAARAUAAAAAUEBQAEAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAABQAAeYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAigAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACggAAKAAKCAAoIACggAKAAgKAAAAAAAoAAAAAAAAAAgAAAiggAKAAKAAgAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAKAAAADzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAEUAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAUAAAAAAAAAAAUABAUAAAAEBQRRQQFBAUAAAAEBQQAAARQQUEUAUABAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAUAAAAAHmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAIAAoAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAoAAAAAAAAAAoIACgICgAAAAAAAKAAAAAAAAAICggAAiggoCiAoCAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAoAAAAAAPMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAQAABQAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVBFFAAAAAQFBFFBAUAAAAEBQQAAAAARRUAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAeYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAigAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqCKKAAAAAgKAAoAAAAAAAAAgKCAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAPMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAFEAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBQBQAAAAEBQQFUQFAAEQVQQFBAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAHmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAACiAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAoAoIACgAICgAKAAAgKCAqAoIAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAA8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAUAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQFAAAAAFAQRRQQUABQQAFQRRUBQQAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAB5gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAogAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgKAAAAAAKgigCggqoIoICggKCCgAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAADzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABQBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAUAAAAAAAAAABQAAAAFQRRUAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAeYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAKAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICgAAgKAAAoAgKCAoIKCKKgAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAADzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAEAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAUAAEBQAAFAEBQQFABAUAVAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAHmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAIAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAgKCAoAIKCAoAAACgAgAAKCAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAPMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAQABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAABAUEABQAQFBBQRQBQAEABQAQAAFABAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAHmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAIAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAgKAAAKAgKAACAAAoAIAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAA8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAABAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAUABAAUAAEAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAeYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAgAACgAAAAAAAAAAgKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAICgAACgIACgAAgAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAADAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAUAEAAAAAQAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAABAUAAAEFAUAAAEAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAQFAAAAAFAAAAAAAAAAAAAAAAAAABgAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAIAKogKAAgAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAACAoAAAAAoAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAABAAUAAAVBFAFQAQVQAQFBAUAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAABAUAEBQABQAAAAAAAAAAEABQQAFBAUAAEGCgAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAICgAAgAKACCggoCggAAAAAKAAAAAAACAoICgAAAAAACgAAAAAAAAAAAAAAAAICgAgKAKgKAAAAAAAACAAAAAAAAAAoIAAMFAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAEAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAQAFABBQRVEAAAAAAAAAFAAAAABAAAAAAUAAAAUAAAAAAAAAAAAAAAAAAABAUEFAUEBQAAAAAAQAAAAAAAAAAAAAAYKAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAIAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAgKAACAoCiAAAAAAAAAAAACgAAAgKCAoIACggKCCgKCAoICgAgKCAAoAAAAAAAAIACioAAACgAAAAAgAAAAAAAAAAAAAAAxUAAAAAAAAAQAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAABAAAAAAEAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFEABQQAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAFAAAAABAAUVAAAAAAAUEBQQAAAAAAAAAAAAAAAAYgAAAAAAAAAAAAAgACgAAAACAAAAAAAAAAAAAAAAAAAAAgAAAAACAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAACAoIAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAACggAAoAAAAAACggAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAIAAAAACAAKAAAAIAAAAAAAAAAAAAAAAACAAAAAAAIoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAIAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAoiAAAAAKAAAAACAAAIAAAACAAKAAIAAAAAAAAAAAAAAAACAAAAAAIoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAIAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAgAAAAIAAIgACgACAAAAAAAAAAAAAAAgAAAAACKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAACAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAooAAAAAAAAAACAAAAgAAAIAACCACgCAAAAAAAAACggACAAAAAAIoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAIAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIUAAAAAAAABAAAAQAAAEAABAAAQAQUAQAUAAAAAAEBQQBBQQAAAARQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAQAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBRVAAAABAAAAAQAAAAEAABAAAQAAEAEFUBAAAAAAAAAABEFBAAAAABFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAABAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUGQoAAAAAACAAAAgAAAIAAACAAgAAIAAoAgAAAAAAAAAIICgAgAAAgAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAgAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAADIUAAAAAABAAAQAAAAEAAABAAQAAEAAAUQAAAAAAAAAEAAAEAAAEAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAEAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAZCgAAAAAIAACAAAAgAAAAIAACAAAgACgCAAAAAAAAAAgAAAgAAgAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAgCgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAADIUAAABAAAAQAAAEAAAABAAAAQAAEAAUQAAAAAAAAAAEAAAEAAEAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAEAUAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAUUAAAAAABAAAAQAAAAAEAABAAAQAABRAAAAAAAAAAAQAAAQAAAQBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAARQAAAAAABQAAAQAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAFFAAAAAAAQAAAEAAAABAAAAQAAEAAAUAQAAAAAAAAAEAAAEAAAEAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAEUAAAAAAUEBQAAAAAAAAAAQBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAFFAAAAAAQAAAAAEAAABAAAAQAAAEAAAUQAAAAAAAAAEAAAQFQAAQABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAARQAAABQQFAAAAAAAAAAAUAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAUUAAAAABAAAAAAAQAAAEAABAAAAQAABQBAAAAAAAAAQAABAAVABAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAUQAAAAFAAAAAAAAAAUAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAUUAAAAABAAAAAAAQAAAEAAABAAAAQAABQBAAAAAAAAAQABAAAVBAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAUAAQAFAAAAAAAAAAUAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUUAAAAABAAAAAAAQAAAEAAABAAAAAQAAABRAAAAAAAAQABAAAAEAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAEABQAAAAAAAAAAFAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAFFAAAAQAAAAAAAEAAAABAAAAQAAAAAEAAAAUQAAAAAAAEAQAAAABAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAABQAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAEAAAABAAAAAQAAAAAAEAAABFAAAAAAAEAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAABAAAAAAQAAAAEAAAAAAAABAAAARQAAAAAABAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAUQAAABAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAABAAAAAAQAAAAAEAAAAAAAAABAAAAARQAAAAAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAAAAAAAAAQAAAAAAAABAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAABAAAAAAAAQAAAAAEAAAAAAAAAABAAAAQBQAAAAAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAABQAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBQAAAAAAAAAAAEAAAAAAABAAAAAAAAAAAQAAAEAUAAAEAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAABQAAAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAEBQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBQAAAAAAAAAAAEAAAAAAAAAAAAAABAAAAAQAAAEAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAUAAAAAAAAAAFAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEFAAAAAAAAAAAAAQAAAAAAAAAAAAAAEAAABAAAAAQAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAABQAAAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQUAAAAAAAAAAAABAAAAAAAAAAAAAAAQAAAAEAAABAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAABQAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAYigAAAAAAAAAAAAAIAAAAAAAAAAAAAACAAAAAgAAAIAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAoAAAAAAAAAAAKAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAADAUABQAAAAAAAAAAAQAAAAAAAAAAAAAAEAAAABAAAAQAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAABQAAAAAAAAAAUAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAGAAAoAAACgAAAAAgAAAAAAAAAAAAAAAAAIAAACAAAAgAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAICgAKAAAAAAAAAACgAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAACgAAAAAAAAAAAwAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAABAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAQAAAFUAAAAAAAAAAAFAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAFAAAAAAAAAAAAAABgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAIAACAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAgAAKoAAAAAAAAAAAKAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAKAAAAAAAAAAAAAAAAAADzBQAABQAAAAAAAAAAAAAAAAAAAAAAAAAAEAAABAAAQAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAFAAAAAAAAAEAAAAUAUAAAAAAAAABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAABAAAABAAAAAAAFAAAAAAAAAAAAAAAAAAAAB5gAAoAAoAAAAAAAAAAAAAAAAAAAAAAAAACAAAAgAAIAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAAACAAAKAKAAAAAAAAAAAoAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAgAACgAAAAAAAAAAAAAAAAAAAAAA8wAAAAUUAAAAAAAAAAAAAAAAAAAAAAAAAABAAAQAAEAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAABQAAAAAAAAABAAFAFAAAAAAAAAAAUAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAHmoIAAAAqgAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAIAACAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAgACgACgAAAAAAAAAAigAAAAAACgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAPNQAQAABQAFAAAAAAAAAAAAAAAAAAAAAAAAABAAAQAAEAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAABQAAAAAAAAABAAFAAFAAAAAAAAAABFAAAAAAAAAFAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAEBQQAAAAAAAAAAAAAAAAAAAAAB5KKAAAgACgAKAAAAAAAAAAAAAAAAAAAAAAAACAAAgAAIAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACgAAAAAAAAACAAKAAKAAAAAAAAAAogAAAAAAAAAAKoAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAADyUAAUABAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAEAABAAAQAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAFAAAAAAAAAAEAAAUAAUAAAAAAAABRAAAAAAAAAAAAVQAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAB5KAAAAKAgACgAAAAAAAAAAKAAAAAAAAAAAAAACAAAgAAAIAAAAAAAAAACAAAoAAAAIAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAKAAAAAAAAAICggACgAAAAACgAAAAiiggAAAAAAAAAACigAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAA8lAAAAAAFQABQAAAAAAAAAAAFAAAAAAAAAAAABAAAAQAAEAAAAAAAAABAAAAUAAAAAAAAEAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAFAAAAAAAAAAEAAAAUAAAAAAAUABQBAAAAAAAAAAAAAFFAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAB5KAAAAAAAAKgCgAAAAAAAAAAAAKAAAAAAAAAAACAAAAgAAIAAAAAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACgAAAAAAACAAAAAAKAAAAAAAAACiggAAAAAAAAAAAACgCgAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAoAAAAPFQAAAAAAAAAARQAAAAAAFAAAAAABQAAAAAAAAAQAAAEAAABAAAAAAAAAQAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAUAAAAAAAQAAAAAABQAAAAAAAAAUUAEAAAAAAAAAAAUAUAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAUAEAUAUEAAAAAAAeCgAACgAAAAAACgAACAAAAAACgAAAAAAoAAAAAAIAAAACAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACgAAAACAAAAAAAAAKAAAAAAAAACigAAAgAAAAAAAACgACgAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAACAAAAPBQAAAAAABQAAAABQAAABAAAAAABQAAAAAAAAAAAAAAAAQAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAUAAAAQAAAAAAAAABQAAAAAAAAABVAAAAEAAAAAAAAUAAUAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAQB4KAAAAAAAAAAAAAAoIAAooAgAAAAAAoAAAAAAAAAAAAAAIAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAgKAAoAAAgKCAAAAAAAAAKAAAAAKAAAAAoAAAAAgAAAAAACgCgAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAKAAAAAAAAAAAAAAAAADwVAAAAAAAAAAAAAAAAAAAUABQEAAAAAAFAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAEBQAFAAAEBQQAAAAAAAABQAAAABQAAAAFAAAAAEAABQQABQBQAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAQAAAAAAFAAAAAAAAAAAAAAAAAAAAAB4KgAAAAAAAAAAAAAAAAAAAKAAAIKAAAAAAAAAAAACgAAgAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAACAoACgAAACAAAAAAAAAKAAAAAKAAAAAAoAAAAAAAgKAoAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8FQAAAAAAAAAAAAAAAAAAAAFAAAEAAFAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAQFAAAUAAAAAQAAAAAAABQAAAABQAAAAAFAAAAAEBQQFAUAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeCoAAAAAAAAAAAAAAAAAAACgAAAACAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAICqAAAAAIAAAAAAAAAoAAAAoAAAAACgAAACAAAoICqAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPBUAAAAAAAAAAAAAAAAAABQAAAAAABAAAAAAAAAABQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAABQAAAABAUEAAAAAAAUAAAAUAAAAABQAAAABAAAAVQAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4KgAAAAAAAAAAAAAAAAAAKAAAAAAAIAAAAAAAAAAAAAAAKAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAKAICgAAgAAAAAAACgAAAACgAAAAKAAAAAAAIAAooAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPBUAAAAAAAAAAAAAAAAAAAABQAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAUAAAAAQAAAAAAABQAAAAABQAAAFAAAAAAAAABQAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4KgAAAAAAAAAAAAAAAAAAAAKAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAACgACAAAAAAAAAAKAAAAAAAAKAAoAAAAAAAAAKAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKDXVAAAAAAAAAAAAAAAAAAAAUAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAFAAAEAAAAAAAAAUAAAAAAAAAFFAAAAAAAAAUAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAGuqAAAAAAAAAAAAAAAAAAAAoAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAIAAAAAAAAAAoAAAAAAAAAKAAAKAAAAAoAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAoAAIAAAAAAAAAAAAAAAAAAAACgAAAAAAAAA11QAAAAAAAAAAAAAAAAAAAFAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAABQAAABAAAAAAAAFAAAAAAAAABQAAAABQAAFAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAFAAAAABAAAAAAAAAUAAAAAAAAAAAAAAAAAAAGuqAAAAAAAAAAAAAAAAAAAAAoAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAKAAIAAAAAAAAAoAAAAAAAAAKAAAAAAKAoAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAACgAAAAAAAAAAAAAAAAAAAAAA11QAAAAAAAAAAAAAAAAAAAAAAFEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAABQABAAAAAAAAAFAAAAAAAAABQAAAAAABVAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABrqgAAAAAAAAAAAAAAAAAAAAAAAigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAACiAAAAAAAAAAAAKAAAAAAAAACgAAAAAAAooAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADXVAAAAAAAAAAAAAAAAAAAAABFABAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAUQAAAAAAAAAAABQAAAAAAAAAUAAAAAAAAVQAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa6oAAAAAAAAAAAAAAAAAAAAIoAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAICgAgKAAAAAAAAAAAAAAoAgAAAAAAAAAACgAAAAAAAAAAoAAAAAAAKKAAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA11QAAAAAAAAAAAAAAAAAAAFEAAAAAQAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAQAFBAUAAAAAAAAAAAAAABQABAAAAAAAAAAFAAAAAAAAAABQAAAAAABQFAAAAAAABQAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABrqgAAAAAAAAAAAAAAAAAAAAigAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAogKACAAAAAoICgAAAAAAAAAAAAKAAIAAAAAAAAAoAAAAAAAAAAAKAAAAAAAKoAAAAAAAKAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANdUAAAAAAAAAAAAAAAAAAAABRAAAAAAEBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAEAAAAAAABQQFAAAAAAAAAAUAAAQAAAAAAABQAAAAAAAAAAAUAAAAAAAAVQAAAAAAAUAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa6oAAAAAAAAAAAAAAAAAAAAAAIoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAACAoIAAAAAAACgAAAAAAAAAAKAAAIAAAAAAAAAoAAAAAAAAAAKAAAAAAAACigAAAAAAAKAAAAAACgAAAAIKCAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAKAAAAAAADWVAAAAAAAAAAAAAAAAAAAAAABAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAQFABAAAAAAAAAAUAAAAAAABQAAABAAAAAAAAFAAAAAAAAAAABQAAAAAAAAUUAAAAAABQAAAAAAUAAABBQAAARQAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAEBQAAAAAAAAAAAAAAayoAAAAAAAAAAAAAAAAAAAAAAIAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAACAoIAAAAAAACggKAAAAAAoAAAAgAAAAAAACgAAAAAAAAAAAoAAAAAAAAKAKAAAAAAAoAAAAAKAAAACoAAAAIoAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADWVAAAAAAAAAAAAAAAAAAAAAABAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAQAAAAAAAAFAAAAAAUAAAAQAAAAAAABQAAAAAAAAAAAAUAAAAAAAAFAFAAAAAAAUAAAAAFAAAAQUAAAEUAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABrKgAAAAAAAAAAAAAAAAAAAAAAgAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAICgAgKAAAACAoIAAAAAACgAAAAAKAAAAIAAAAAAAAoAAAAAAAAAAAAKAAAAAAAACgACgAAAAAAKAAAAACgAAAAIKAogAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1lQAAAAAAAAAAAAAAAAAAAAAAQABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAEABQQAAAFBAUAAABQAAAABAAAAAAAFAAAAAAAAAAAABQAAAAAAAAAUAAUAAAAAABQAAAAAUAAAAABAUAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABrKgAAAAAAAAAAAAAAAAAAAAAgAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAICggKACAoIACgAAKAAAAAAIAAAAAAAoAAAAAAAAAAAKAAAAAAAAACgAACgAAAAAAKAAAAACgAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAANZUAAAAAAAAAAAAAAAAAAAAAAEAAAAUAEABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAEBQAAAAAAAAAQFABAUAEBQQFAUAAAAAAQAAAAAABQAAAAAAAAAAAUAAAAAAAAAAFAAFAAAAAAAUAAAAAFAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAFAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAayoAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAACAoAAAAAAAAAAAAICgAgKCAoCgAAAAAACAAAAAAKAAAAAAAAAAACgAAAAAAAAAAoAAoAAAAAAACgAAAAAoAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAADWVAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAQFAAAAAAAAAAAAAAAAABAUBQAAAAAAABAAAAAFAAAAAAAAAAABQAAAAAAAAAAUAAAUAAAAAABQAAAAAAUAAAAAAAAAFAAABAAUAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAABQAAAAAAAAAAQAAAAAFAAAAAAAAAAAAAAAAAAABqqgAAAAAAAAAAAAAAAAAAAgAKCAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAgKAAAAAAAAAAAAAAAAACAoIooAAAAAAIAAAAAAoAAAAAAAAAAAKAAAAAAAAAACgAACgAAAAAAKAAAAAAACgAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1VQAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAEBQAAAAAAAAAAAAAQFBFFAAAAAABAAAAAAFAAAAAAAAAAABQAAAAAAAAAAUAAAUAAAAAABQAAAAAAAAUAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGqqAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAgAKAAAAAAAAAAAAACAoIooAAAAAIAAAAAAAAoAAAAAAAAAAKAAAAAAAAAACgAACgAAAAAAKAAAAAAAACgAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1VQAAAAAAAAAAAAAAAAAAAAAAAAQAAAFBAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAQFAAAAAAAAAAAAAABAUEUUAEAAAAAAAAAAAAUAAAAAAAAAAAFAAAAAAAABQAAABQAAAAAAFAAAAAAAAABQAAAAAAAUAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaqoAAAAAAAAAAAAAAAAAAAAAAAAAAIAACggAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAICgAAAgKAAAAAAAAAAACKKACAoIAAAAAAAAAAoAAAAAAAAAAAKAAAAAAAAACgACgAAAAAAKAAAAAAAAAACgAAAAAAAAoAAACAoAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADVVAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAQFAAAAAABAUBQABAAAAAAAAAAAAAFAAAAAAAAAABQAAAAAAAAAUAUAAAAAAABQAAAAAAAAAAAUAAAAAAAAFAAAAAAQAFAAAAAAAAFAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAUBAUAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAGqqAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAICggAAAAAAAAAACgAAAAAAAAAAoAAAAAAAAAKAKAAAAAAAAoAAAAAAAAAAAKAAAAAAAACgAAAAAIAAKAAoAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAKAgAAAAAAKIAAAAAAAAAAAAACgAAAAAAAgAAAANVUAAAAAAAAAAAAAAAAAAAAAAAAAAEBQAQAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAABRAUEBQQAAAAAAAAAABQAAAAAAAAAAUAAAAAAAAAAVQAAAAAAAAAUAAAAAAAAAAFAAAAAAAAABQAAAAAEAFAAAAAUAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAFAQAAAAAAAAAFAAEABQAAAAAAAAAAAAAAAAAAAAAaioAAAAAAAAAAAAAAAAAAAAAAAAIAAACgAgAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAACAAAAAAAAAAAAKAAAAAAAAAACgAAAAAAACgKAAAAAAAAACgAAAAAAAAAAoAAAAAAAAAKAAAAAAAgoAAAAAAACgAAAAAAAAAgoAACgAAAAAAgKCAAAAAAACgAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAANRUAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAQAAAAAAAAAAABQAAAAAAAAAAUAAAAAAAAAUBQAAAAAAAAUAAAAAAAAAAFAAAAAAAAABQAAAAAAAVAAAAAAAAAAAAUAAAEFAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAGoqAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAoIAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAgAAAAAAAAAAACgAAAAAAAAAAoAAAAAAAAAoCgAAAAAAAAAoAAAAAAAAAKAAAAAAAAACgAAAAAAAAoCAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAACgAgAKAAAAAAAAAAAAAAAAAANRUAAAAAAAAAAAAAAAAAAAAAEAAAABQQAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAABAAAAAAAAAAAFAAAAAAAAAABQAAAAAAAABQRRQAAAAAAAAFAAAAAAAAABQAAAAAAAAAUAAAAAAAAFAAQAAAAUAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAABQAAAAQAAAAAAAAABQAAAAAAAAAAAAAAAABqKgAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAACAAAAAAAAAAKAAAAAAAAAAACgAAAAAACggKoAAAAAAAAAKAAAAAAAAACgAAAAAAAAAoAAAAAAAAKAAAgAAoAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAACgAAAAAAAAAAAAAADUVAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAUEAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAQAAAAAAAAABQAAAAAAAAAAUAAAAAAAAAVQAAAAAAAAAUAAAAAAAAAFAAAAAAAABQAAAAAAAAAUAAABAABQAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAABAAAAAAAAAFAAAAAAAAAAAAGoqAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAIAAAAAAAAAAoAAAAAAAAAAKAAAAAAAAAKAoAAAAAAAAKAAAAAAAAACgAAAAAAAAoAAAAAAAAAKAAAAAgAoAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAACgAAAADUVAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAEAAAAAAAAAAUAAAAAAUAEAAAUAAAAAAUAABQAAAAAAAAUAAAAAAAAAFAAAAAAAABQAAAAAAAAAUAAAABABQAAAAAAUAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABptIAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAACgAAACAoAAAICgAAAAAAAAAAAAAAAAAAAAAKAAAAAIAAAAAAAAAAoAAAAAAoAAIAAoAAAAAAAAoACgAAAAAAAoAAAAAAAAAKAAAAAAAACgAAAAAAAAoAAAAAACACgAAAAoAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAANNpAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAUAAAAQFAABAAUAAAAAAAAAAAAAAAAAAAAAABQAAAAABAAAAAAAAAAFAAAAAAAFAAAUQAAAAAAAAFAUAAAAAAAFAAAAAAAAABQAAAAAAAAUAAAAAAAAFAAAAAAAQAUAAAAFAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAUAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAABptIAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAACgAAAAAAAACAoAAAAAAAAAAAAAAAAAAAAAAACgAAAAACAAAAAAAAAAKAAAAAAAAKAAAogAAAAAAAKAoAAAAAAAKAAAAAAAAACgAAAAAAAAoAAAAAAAKAAAAAAAgAAoAAAAKAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAoAAAAAAAIAgAAAAAAAAAAAAAAAAAAAAAAAAANNpAAAAAAAAAAAAAAAAAAABAUAAAEAAAAAAAAAAAAAAAAAAUAAAAAAAAAABQAAAAAAAABAAUAAAAAAAAAAAAAAAAAAAAAAAABQAAAABAAAAAAAAAAFAAAAAAAAAFAAUAAQAAAAAAFAUAAAAAAAFAAAAAAAABQAAAAAAAAUAAAAAAAFAAQAAAAAAAUAAAAAFAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAUAAAAAAAAAAAEAQAAAAAAAAAAAAAAAAAAAAAAAGm0gAAAAAAAAAAAAAAAAAAAgAAKAACAAAAAAAAAAAAAAAAKAAAAAAAAAoAAAAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAgAAAAAAAAAACgAAAAAAACgAAKAIAAAAAACgKAAAAAAAACgAAAAAAAAoAAAAAAAKAAAAAAACgIAAAAAAAAKAAAAACgAAAAoAAAAAAAAAAAAAAAoCgAAAACAAAAAAAAAoAAAAAAAAAAAAAAAAIAAAgAAAAAAAAAAAAAAAAAANNpAAAAAAAAAAAAAAAAAAAABAAAAUAAEAAAAAAAAAAAAAUAAAAAAAABQAAABAUAAAEABQAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAEAAAAAAAAAAAUAAAAAAAAAUABQABAAAAAAAUBQAAAAAAAUAAAAAAAAFAAAAAAABQAAAAAAAUBAAAAAAABQAAAAAAUAAAAFAAAAAFAABAAAAAVQAAAAAAAAAAAAAAAAAAAAAAAAUAAEAAAAAAAAAAAEAAAAQAAAAAAAAAAAAAGm0gAAAAAAAAAAAAAAAAAAAAAAgAAAAKCAAKAACAAAAAAoAAAAAAACgAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAACAAAAAAAAAAAAAKAAAAAAAAAAKoAgAAAAAAAAKoAAAAAAAAKAAAAAAAACgAAAAAAoAAAAAAAKAAgAAAAAAoAAAAAAKAAAACgAAAACgKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAAAAAAAAAAAgAAAAACAAAAAAAAA02kAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAUEAAAAAAAABQAAAAAAFAAAAAAAEABQAAQAAAFAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAQAAAAAAAAAABQAAAAAAAAAAAUUEAAAAAAABQFAAAAAAAABQAAAAAAAUAAAAAAAFAAAAAABQAEAAAAAAFAAAAAABQAAAAAUAAAAUBQAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAEAAAAAAAAAQAAAGm0gAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAACgAAAAAAKAAACAoAAAAAAAgKAACAAAoAAAAAAAAAAAAAAAAAAAAAAAACgAAAAACAAAAAAAAAAAKAAAAAAAAAAACgACgAgAAKAAAoAAAAAAAAKAAAAAAAACgAAAAAAoAAAAAAAKAAgAAAAoAAAAAAAKAAAAACgAAAACqAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAgAAAAAAAAAACA02kAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAUAAAAEAAUAUAAAAAAAAAAAAAAAEABQAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAEAAAAAAAAAAAUAAAAAAAAAAAAFAAAAFAAAAAAUAAAAAAAAFAAAAAAABQAAAAAAAUAAAAAFAAAAQAAAAUAAAAAAFAAAAABQAAAABVAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAAAABpNIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIoAAIAAAACqAAAAAIACgAAAAAAAAAgKAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAgAAAAAAAAAACgAAAAAAAAAAAAoAAAoAAAAAACgAAAAAAAAoAAAAAAAAKAAAAAACgAAAAAoAAAACAAACgAAAAAoAAAAAAKAAAAAKAoAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAIAAAAIAAAAAAAAAA0mkAAAAAAAAAAAAAAAAAAAAAAAAAAEUAAAAEAAABQFAAAAEAAABQQFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAQAAAAAAAAAABQAAAAAAAAAAAAUAAAAUAAAAABQAAAAAAAAUAAAAAAAAFAAAAAABQAAAAAUAAABAAABQAAAAAUAAAAAAFAAAAAFAUAAAAFAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAQAAAAAAAAAAAAAAAEAEAAAAAAAAAAaTSAAAAAAAAAKAAACAAAAAAAAAAAAIAoAIAAAAACqAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAIAAAAAAAAAAAoAAAAAAAAAAAAKAAAAAKAAAAAoAAAAAAAAAKAAAAAAACgAAAAAAoAAAAAKAAAAgAAoAAAAAAAKAAAAACgAAAACgKAAAACgAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAIAgAAAAAAAANJpAAAAAAFAAAAAAAAABAAAAAAAAAAEAAAAAFAFAAAAABAAAAAAAUAAAAAAAAAAAAAAAAAAAAEBQAAAAAAAAAAAAFAAAAAAEAAAAAAAAAAAAUAAAAAAAAAAAAFAAAAFAAAAAAUAAAAAAAAFAAAAAAAABQAAAAAAUAAAAFAAAAAQAUAAAAAAAFAAAAABQAAAABVAAAAAABQAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAEAAQAAAAAAAGm0gAAAAAAAAAAAAAAAAAAAAAAACAAAAqAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAgKCAAAAAAAAAAKAAAAAAAAAAAACgAAAACgAAAAAKAAAAAAAACgAAAAAAAoAAAAAAKAAAAACgAAAAIKAAAAAAACgAAAAAoAAAAAKKAAAAAAoAAAKAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAIAAAAgAAAAANNpAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAABAAAAAUAAAAAABQAAAAABAUEAAAAAAAAAAUAAAAAAAAAAAAFAAAAAFAAAAAAUAAAAAAAAFAAAAAAAABQAAAAAAUAAAAFAAAAABUAAAAAAAFAAAAABQAAAAAUUAAAAABQAAAAUBAAAAAAUAAAEAAAAAABQAAAAAABQAAAAAQAAAAAAAAAAAAAEAAAAAAAEAAAAQAAAAGm0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAACgAgKAAAAAAAAAAAAAAAAAACAAAKAAAAAAAAKAAAAAACAoIAAAAAAAAAAoAAAAAAAAAAAAAqgAACAAoAAAAACgAAAAAAAoAAAAAAAAKAAAAAACgAAAAAoAAAACCgAAAAAAoAAAAAKAAAAACigAAAAAKAAAAACgIAAAAAAAAAAKAAAAAAAAAAAAoIAAAAAACgCAAAAAAAAAAAAAAgAAAAAgAAAAAACAA02kAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAUAAEBQAAAAAAAAAAAAAAAAAAAQBQAAAAAAAABQAQFAAAAABAAAAAAAAAAFAAAAAAAAAAAAFAUAAAAAAAAAAAFAAAAAAAABQAAAAAAAAUAAAAAAFAAAAABQAAAAVAAAAABQAAAAAAUAAAAAVQAAAAAAUAAAAAFAAQAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAABQABAAAAAAAAAAAAAAQAAAQAAAAAAAABpNIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAoIACgAAAAAAAAAAAAAAAAAAAgCgAAAAAAAAAAACgAAAAAAAgAAAAAAAACgAAAAAAAAAAAACqAAAAAAAAAACgAAAAAAAAoAAAAAAAAAKAAAAAACgAAAAAoAAAAKgAAAAoAAAAAAAKAAAAKoAAAAAAKAAAAAACgAIAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAgAAAAAAAAAAAAIAAIAAAAAAAA0mkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAUAAEBQAAQAFAAAAAAAAAAABAFAAAAAAAAAAAAAFAAAAABAAAAAAAAAFAAAAAAAAAAAAABRQAAAAAAAAAAFAAAAAAAABQAAAAAAAAUAAAAAAAFAAAABQAAAAAVAAAABQAAAAAAUAAAAVQAAAAAAUAAAAAAFAAAQAUAAAAAAAAAAAAAAAAAAAAAAAAFABAAAAAFAAAAAAEAAAAAAAAAABAABAAAAAAAGk0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACggAAKACAAAoAAICgAAAAAAgCgAAAAAAAAAAAACgAAAAAgAAAAAAAACgAAAAAAAAAAAAACqAAAAAAAAAACgAAAAAAAAAoAAAAAAAAKAAAAAACgAAAAAoAAAAKgAAAAoAAAAAAKAAAKAAoAAAAAKAAAAAACgAAAIKAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAgAACgAAAAAACAAAAAAAAAAAgAAAgAAADSaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAABQAQAAAFAABAUEBQAQFABAFAAAAAAAAAAAAAAFAAABAAAAAAAAAFAAAAAAAAAAAAAABQABQAAAAAAAAFAAAAAAAABQAAAAAAAAUAAAAAAAFAAAAABQAAAAVAAAABQAAAAAUAAAUABQAAAAAUAAAAAAFAAAAQAUAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAFAAAAAAAAEAAAAAAAAABAAABAAGk0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAACgAAgKACAoIACggACgAAAAAAAAAAAACggKACAAAAAAAAAKAAAAAAAAAAAAAAACgCgAAAAAAAAKAAAAAAAAACgAAAAAAAAoAAAAAAKAAAAAACgAAAAqAAAACgAAAAoAAAoACgAAAAAoAAAAAKAAAAAgAoAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAKAAAAAAAAIAAAAAAAACAACANJpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAABQQAAAAAAAAABQAAAAAAAAAAAAAAAUAUAAAAAAAAABQAAAAAAAAAUAAAAAAAAFAAAAAABQAAAAAUAAAABBQAAAAUAAAAFAAFAAUAAAAAFAAAAABQAAAEAAFAAAABQAAAAAAAAAAUAAAAEAAAAAAAAAAAAAAAAAABAAAAFAAAAAAAAEAAAAAAABABGk0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAoIAAAAAAAAAAAoAAAAAAAAAAAAAAAKAAKCAoAAAAACgAAAAAAAAAoAAAAAAAAAKAAAAACgAAAAAAoAAAACCgAAAAoAAAKAAKAAoAAAAAKAAAAACgAAIAAKAAAAACgAAAAAAAAoAAAAAAAAAAAAAAAAAIAAAAAAAAAACAAAAKAAAAAAAIAAAAAAAADRaZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAAAUAAAAAABQAAAAAAAAAUAAAAAAAAFAAAAAABQAAAAAUAAAABABQAAAAUAAAFAAFAAUAAAAFAAAAABQAAEAAFAAAAABQAAAAAUAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAABAAAFAAAAAAAAEAAAAAABotMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAKAAAAKAAAAAAAAoAAAAAAAAAKAAAAAAAACgAAAAAoAAAAAAKAAAAAgoAAAAKAAAACgACgAKAAACgAAAAAoAACACgAAAAAAoAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAgAACgAAAAAACAAAAAA0WmQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAUEABQQAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAABQAAAABQAAAAAFAAAAAAAAABQAAAAAAAAAUAAAAAFAAAAABQAAAAAEFAAAABQAAAAUAAUBQAAAAUAAAAAFAAQAAUAAAAAFAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAEAUEBQAAAAABAAAAAaLTIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAKCAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAKAAAAAAKAAAAAoAAAAAAAAAAKAAAAAAAACgAAAAAoAAAAAAKAAAAAgAoAAAAKAAACgAACgKAAACgAAAAAoAACACgAAAAAoAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAgAAACgAAAAAACA0WmQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAFAAAAAAAFAAAAAUAAAAAAAAAFAAAAAAAAABQAAAAAUAAAAAAFAAAAAQAUAAAAFAAABQAAABVAAABQAAAAAUABABQAAAAAUAAAAAFAAAAAAAABQAAAAAAAQAAAFABAAAAAAAAAAAAAAQAAAAAAAAAEAAAAUAAAAAAaDTIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAACgAAAAAAAACgAAKAAAAAAAAAACgAAAAAAAAoAAAAAAKAAAAAACgAAAAIKAAAACgAAAAoAAAAKKAAAAoAAAKAAAgAoAAAAKAAAAACgAAAAAAAAoAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACAAAAAAAAAAgAAACgAAADQaZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAFAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAAAAAAAAUAAABQAAAAAAAAAUAAAAAAAAAFAAAAAABQAAAAAAUAAAABBQAAAAUAAAAFAAAABRQAAFAAAABQAAEAFAAABQAAAAAUAAAAAAAAFAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAQAAAAAAAAAAEAAAAAAUaDTIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAoAACggAAAAAKCAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAoAAAAAAAAAAoACgAAAAAAAAAAoAAAAAAAAAKAAAAAACgAAAAAAoAAAACCgAAAAoAAAKAAAAACgCgAKAAAACgAAAqAAAACgAAAAoAAAAAAAAKAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAgAAAAAAAAAAAAIAAADQbZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAUEAABQAQAFBAAUEAAAAAAAAAAAAAFAAAAAAAAAAAAAAABQAAAAAAAAAAABQFAAAAAAAAABQAAAAAAAAAUAAAAAAFAAAAAAABQAAAEAFAAAABQAAAUAAAAFAAFAAUAAAFAAAABUAAAFAAAAABQAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAABAAAAAAAAAAAAAQAGg2yAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoCAAoIAACgAAAAAAAAgAAAAAAAAAAAAAoAAAAAAAAAAAAAAAKAAAAAAAAAAAAKAoAAAAAAAAAAKAAAAAAAAACgAAAAAAoAAAAAAAKAAAAgAoAAAAKAAACgAAAAoAAAoCgAAAoAAAKAgAAAoAAAAKAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAIAAAAAAAAAAACA0G2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAUAAAAAAAAAAAAAAAFAAAAAAAAAAAAABRQAAAAAAAAAFAAAAAAAAAABQAAAAAAUAAAAAAAFAAAQAUAAAAFAAAABQAAAAUAAAAVQAAAUAAAFAQAAUAAAAAFAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAEAAAAAAAAABz22QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAQFBAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAAAAAAAAAAAAFFAAAAAAAAAUAAAAAAAAAAFAAAAAAABQAAAAAAUAAAABBQAAAAUAAAAFAAAABQAAAUUAABQAAAUBAAABQAAAAUAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAQAAAAAAAAHPbZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAFFAAAAAAAAAUAAAAAAAAAAFAAAAAABQAAAAAAAUAAAABBQAAAAUAAAAFAAABQAAAAUUAABQAAAUBAABQAAAAAUAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAQAAAAAAAHPbZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAABAAAUEAAAAAAAAFAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAUAUAAAAAAABQAAAAAAAAAAUAAAAAAAFAAAAAAABQAAAEAFAAAABQAAAAUAAAFAAABQABQAFAAABQEAAFAAAABQAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAABAAAAAAAAc9tkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAFAAAAAAAAAAAAAAABQAAAAAAAAAAAAAUAAAUAAAAAABQAAAAAAAAAUAAAAAAAFAAAAAAAABQAAAEAFAAAABQAAAAUAAAFAAABQABQFAAABQEAAAFAAAABQAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAABAAAAAAAc9tkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAFAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAUAAUAAAAAAABQAAAAAAAAUAAAAAAAAFAAAAAAABQAAAEAFAAAAABQAAAAUAAAFAAABQABQFAAABQEAAFAAAABQAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAABAAAAAAAc9tkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAFAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAUAAAAUAAAAABQAAAAAAAAUAAAAAAAAFAAAAAAABQAAAEAAFAAAAABQAAAUAAAAFAAABQAABVAAABQEAAFAAAABQAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAABAAAAAAAc9tkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBQQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAABQAAABQAAAAFAAAAAAAAABQAAAAAAAUAAAAAAAFAAAAQAAAUAAAAAFAAABQAAAAUAAAFAAFUAAAFAQAAAUAAAFAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAEAAAAAABz22QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQFABAAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAFAAAFAAAAAAUAAAAAAAAFAAAAAAAABQAAAAAAUAAABAAABQAAAAAUAAAAFAAABQAAAAUAUBQAAAUBAAABQAAAUAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAQAAAAHPbZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAUAEAAAAAAAAAAAAFAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAAAUAAAAABQAAAAAAAAUAAAAAAAFAAAAAAABQAAEAAAFAAAAABQAAAAUAAAAFAAABQBQAFAAABQEAAFAAAABQAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAABAAAAc9tkAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAFAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUAAAUAAAAABQAAAAAAAAAUAAAAAAAFAAAAAABQAAAEAAAFAAAABQAAAAAUAAAAFAAAFUAAAFAAABUAAAFAAAABQAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAABAAc9tkAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAABQQAAAAAAAUAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAABQAAABQAAAAAFAAAAAAAAABQAAAAAAAUAAAAAAFAAAAQAAAUAAAAFAAAABQAAAAUAAAUBQAAAUAABBQAAAUAAAFAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAHObZAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAUAEAAAAAAFAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAUAAAAAUAAAABQAAAAAAAAAUAAAAAAAFAAAAAABQAAAEAAFAAAAABQAAAAUAAAAFAAFAAUAAFAAAQAUAAAFAAABQAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAABzm2QAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAFABAAAAAABQAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAFAAAAFAAAAAAAUAAAAAAAAAFAAAAAAABQAAAAAAUAAABAABQAAAAAUAAAAFAAAABQABQAFAAABQEAFAAAABQAAAUAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAc5tkAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABQAQAAAAAAUAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAABQAAAAABQAAAAFAAAAAAAAAABQAAAAAAAUAAAAAAAFAAAAQAUAAAAAFAAAABQAAAAUAAUABQAAUABABQAAAAUAAAFAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAHObZAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAUAAAEAAAAAFAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAUAAAAAAUAAAABQAAAAAAAAAAUAAAAAAAFAAAAAAABQAAAAEFAAAAABQAAAAUAAAAAFAFAAUAAAFAQAUAAAAFAAABQAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAABzm2QAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAUAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAABQAAAABQAAAAAFAAAAAAAAABQAAAAAAAAUAAAAAAAFAAAAAQUAAAAAFAAAABQAAAAAUAUABQAAAUABABQAAAUAAAAFAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAHObZAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAUEAAFAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAUAAAAAAAUAAABQAAAAAAAAAAUAAAAAAAAFAAAAAAABQAAAAAVAAAAABQAAAAAUAAAAFAFAAAUAAAFAQAUAAAFAAAABQAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAABzm2QAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAUAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAABQAAAAAABQAAAFAAAAAAAAAABQAAAAAAAAUAAAAAAAFAAAAABUAAAAAFAAAAABQAAAAAUAUABQAAAUABABQAAAUAAAAFAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAHObZAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAABQAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAFAAAAAAFAAAAAUAAAAAAAAAAFAAAAAAAABQAAAAAAAUAAAAAFQAAAAAAUAAAAFAAAAABQBQAFAAAABQAEFAAABQAAAAUAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAc5tkAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAFAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAUAAAAAAAAUAABQAAAAAAAAAAAUAAAAAAAAFAAAAAAABQAAAAAVAAAAAABQAAAAAUAAAAAFAFAAUAAAFAAAQUAAAFAAAABQAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABz22QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABQAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAFAAAAAAAAFAAAUAAAAAAAAAAAFAAAAAAAABQAAAAAAAUAAAAABBQAAAAAAUAAAAAFAAAABQBQAAFAAABQAAEFAAABQAAAAUAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAc9tkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAABQAAAAAAABQAFAAAAAAAAAAAABQAAAAAAAAAUAAAAAAFAAAAAABUAAAAAAFAAAAABQAAAAAUAUABQAAAAUAAFQAAAUAAAAFAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAHPbZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAABAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAUAAAAAAAAAUABQAAAAAAAAAAAAUAAAAAAAAAFAAAAAABQAAAAAEFAAAAAAABQAAAAAUAAAAFAFAAAUAAAFAAABUAAAFAAAABQAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAABz22QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAQAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAFAAAAAAAAAFAAUAAAAAAAAAAAFAAAAAAAAAABQAAAAAAUAAAAABBQAAAAAAAUAAAAAFAAAAABRQAAFAAAABQAAVAAABQAAAAUAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAc9tkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAEAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAABQAAAAAAAAABQAFAAAAAAAAAAABQAAAAAAAAAAUAAAAAAFAAAAAABUAAAAAAAFAAAAAABQAAAAUUAAABQAAAUAAAFQAAUAAAAAFAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAHPbZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAABAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAUAAAAAAAAAAUBQAAAAAAAAAAAUAAAAAAAAAAAFAAAAAABQAAAAAAUBAAAAAAABQAAAAAUAAAAFFAAAAUAAAAFAABUAAAFAAAABQAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEABz22QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAQAAAAFBAAAAAABQAAAAAAAAAAAAAAAAAUAAAAAAAAAAUABQAAAAAAAAAAAUAAAAAAAAAAAFAAAAAABQAAAAAAAUBAAAAAABQAAAAAUAAAAFFAAAAUAAAAFAABUAAAFAAAAABQAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEABz22QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAQFBAAUEBQQAAAAUAAAAAAAAAAAAAAAAAAFAAAAAAAAAFBAUBQAAAAAAAAAAUAAAAAAAAAAAFAAAAAAABQAAAAAAAUAABAAAABQAAAAAUAAAAFFAAAAUAAAAFAAAQUAAAFAAAAABQAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEABz22QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAQFBAAAAUVAAAAAAAAAAAAAAAAAABQAAAAAAAAABQAAFAAAAAAAAABQAAAAAAAAAAAAUAAAAAAAFAAAAAAABQAAEAAAAFAAAAABQAAAABVAAAABQAAAUAAAFQAAAAUAAAAFAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAHPbZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAABAAUEABQQFFQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAUAABQAAAAAAAAAUAAAAAAAAAAAAFAAAAAAABQAAAAAAAUAAABAAABQAAAAUAAAAAAFFAAAAUAAAFAAAABUAAAAFAAAABQAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAABz22QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAQFABAUEFAAAAAAAAAAAAAAAAAABQAAAAAAAAAABQAFAAAAAAAAABQAAAAAAAAAAAAAUAAAAAAAFAAAAAAABQAAAEAAAFAAAABQAAAAAAUUAAABQAAAAUAAAFAQAAAUAAAAAFAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAHPbZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAABAUEABQQUAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAFAAAUAAAAAAAAAFAAAAAAAAAAAABQAAAAAAAAUAAAAAAAFAAAAQAAAUAAAAAFAAAAABRQAAAFAAAABQAAAAUBAAABQAAAAUAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAc9tkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAEABQQUBQQAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAUABQAAAAAAAAAUAAAAAAAAAAAAFAAAAAAAABQAAAAAAUAAABAAAABQAAAAAUAAAAAAFFAAAAUAAAAFAAAABQEAAAFAAABQAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABz22QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAQAFBABVBAAAAAAAAAAAAAAAAAABQAAAAAAAAAAABQFAAAAAAAAAABQAAAAAAAAAAAAUAAAAAAAAFAAAAAABQAAAAEAAAFAAAAABQAAAAAAUUAAABQAAAAUAAAAFAAQAAUAAAAFAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAHPbZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAABAUAEAFUEAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAFAAUAAAAAAAAAFAAAAAAAAAAAAABQAAAAAAAUAAAAAAAFAAAAAQAAAUAAAAAFAAAAAABQBQAAAFAAAABQAAAAUBAABQAAAAUAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAc9tkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBQBUABQQFBAAAAAAAAAAAAAABQAAAAAAAAAAAABQFAAAAAAAAABQAAAAAAAAAAAAUAAAAAAAAFAAAAAABQAAAAAEAAAFAAAAAABQAAAAAAUAUAABQAAAAUAAAAFAAQAUAAAAAFAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAHPbZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAQFBAUEAAAAAAAAAAAAFAAAAAAAAAAAAAAFUAAAAAAAAAAFAAAAAAAAAAAABQAAAAAAAAUAAAAAAFAAAAAAQAAAUAAAAAAFAAAAAABQBQAAAFAAAABQAAAUABAABQAAAAAAUAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAc9tkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAABAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAUUAAAAAAAAABQAAAAAAAAAAAAUAAAAAAAAFAAAAAABQAAAAAEAAAFAAAAAABQAAAAAAAUAUAABQAAAAUAAAFAAQAAUAAAAAAAAFAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAHPbZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAQFBAAAAAAAAAABQAAAAAAAAAAAAAAAUAAUAAAAAAAABQAAAAAAAAAAAAUAAAAAAAAFAAAAAABQAAAAAEAAAFAAAAAAABQAAAAAAUAAUABQAAAAUAAAAFAQAAUAAAAAAAAAFAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAHPbZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAQFBAAAAAAABQAAAAAAAAAAAAAAAUAAUEBQAAAAAAAFAAAAAAAAAAABQAAAAAAAAAUAAAAAAAFAAAAAAQAAUAAAAAAAFAAAAAAABQBQAAFAAABQAAAAUBAAAABQAAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAc9tkAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAABAUEAAAAAAAFAAAAAAAAAAAAAAAABQAABQAAAAAAAAFAAAAAAAAAAABQAAAAAAAAAUAAAAAAAFAAAAAAQAAUAAAAAAAAFAAAAAABQABQAFAAABQAAAAUBAAAAAABQAAAAAAAUAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAc9tkAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAABAAAAAAAABQAAAAAAAAAAAAAAAUAAAAAAUAAAAAABQAAAAAAAAAAAUAAAAAAAAAFAAAAAABQAAAAAAEAAFAAAAAAAABQAAAAAAUAAUABQAAAUAAAAFAAQAAAAAAUAAAAAAAFAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAHPbZAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAQAAAAAAUAAAAAAAAAAAAAAAAFAAAAAAAFAAAAAAUAAAAAAAAAAAFAAAAAAAAABQAAAAAAUAAAAAABAABQAAAAAAAAUAAAAAAFAAAFAUAAAFAAAAABQAEAAAAAAAFAAAAAABQAAAAAAAAAAAAAAUAAEAAABQAAAAAAQAAAAAAAAAAAAAAAAHPbZAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAQAAAAAAAUAAAAAAAAAAAAAAAAFAAAAAAAAAFAAAAUAAAAAAAAAAAFAAAAAAAAABQAAAAAAUAAAAAABAABQAAAAAAAAUAAAAAAAFAAFAUAAAFAAAAAABQAAEAAAAAAFAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc9tkAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABAUEAAFAAAAAAAAAAAAAAAABQAAAAAAAAAABQAAFAAAAAAAAAABQAAAAAAAAAUAAAAAAAFAAAAAAAQAAUAAAAAAAAAFAAAAAABQAABQFAAABQAAAAAAAUAAABAAAABQAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHPbZAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAQAAAUAAAAAAAAAAAAAAAAFAAAAAAAAAAFAAAUAAAAAAAAAAAFAAAAAAAAABQAAAAAAAUAAAAAAABABQAAAAAAAAAUAAAAAAFAAAFAUAAAFAAAAAAAAABQAAEAAAFAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc9tkAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAABAAABQAAAAAAAAAAAAAAAAAUAAAAAAAAAAAUABQAAAAAAAAAAAUAAAAAAAAAFAAAAAAABQAAAAAAAAEFAAAAAAAAABQAAAAAAUAAAUBQAAAAUAAAAAAAAAFAAAQAAAUAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABz22QAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAEAFAAAAAAAAAAAAAAAABQAAAAAAAAAAABQFAAAAAAAAAAAABQAAAAAAAAAUAAAAAAAFAAAAAAAAAAQUAAAAAAAAFAAAAAABQAABQFAAAAABQAAAAAAAAAUAABAAABQAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHPbZAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAUAAAAAAAAAAAAAAAAAFAAAAAAAAAAAFAAUAAAAAAAAAAAAFAAAAAAAAABQAAAAAAAUAAAAAAAAABBQAAAAAAAAUAAAAAAFAAAFAUAAAAAAFAAAAAAAAABQAAAEAAFAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaDbIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqAAAAAAAAAAAAAAAAACgAAAAAAAAAAAACgKAAAAAAAAAAAACgAAAAAAAAoAAAAAAAAKAAAAAAAAAAgoAAAAAAAAAKAAAAACgAACgKAAAAAAACgAAAAAAAAAoAAACAACgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANBtkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAUEAAAAAAAAAAAAAAAFAAAAAAAAAAAAAFUAAAAAAAAAAAAFAAAAAAAAABQAAAAAAAAUAAAAAAAAAAFQAAAAAAAAAUAAAAAFAAAAFAUAAAAAAAFAAAAAAAAABQAAAEAAAFAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaDbIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqAoIAAAAAAAAAAAAAAAKAAAAAAAAAAAAAKAoAAAAAAAAAAAAKAAAAAAAAACgAAAAAAAAoAAAAAAAAAAKgAAAAAAAAAoAAAAAKAAAAAKAoAAAAAAAAKAAAAAAAACgAAAIAAAAKAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAADQbZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAQAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAUBQAAAAAAAAAAAAUAAAAAAAAAFAAAAAAAABQAAAAAAAAAAUBAAAAAAAABQAAAAAUAAAAAAUBQAAAAAAAAUAAAAAAAAFAAAAQAAAAAAUAAAAAAAAFAAAABAAAAAUAAAAAAAAAAEAAAAAAAABQaDbIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAACAoIAAAAAAAAAAAAAKAAAAAAAAAAAAAAKoAAAAAAAAAAAAAKAAAAAAAAACgAAAAAAAAAoAAAAAAAAAAKAgAAAAAAoAAAAAKAAAAAAAAACigAAAAAAAKAAAAAAAACgAAAAIAAAAAKAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAANFtkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABAAUEAAAAAAAAAAAAAAFAAAAAAAAAAAAAFBFFAAAAAAAAAAAAAUAAAAAAAAAFAAAAAAAAABQAAAAAAAAAAUBAAAAAABQAAAAAUAAAAAAAAAAFAFAAAAAAAUAAAAAAAAFAAAAAAQFBAAUEFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABotsgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAIAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAKogKAAAAAAAAAAAAoAAAAAAAAAKAAAAAAAAACgAAAAAAAAAAAoACAAAACgAAAAAoAAAAAAAAAAAKAAKAAAAAAAoAAAAAAAKAAAAAAAAAAAgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANFtkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAUAUEBQAAAAAAAAAAFAAAAAAAAABQAAAAAAAAAUAAAAAAAAAAAFAAQAAAAUAAAAAAFAAAAAAAAAAABQABQAAAAAAFAAAAAAAABQAAAAAAAAAEFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABotsgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAKKAgAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAKAKCAoAAAAAAAAAACgAAAAAAAAAoAAAAAAAAAAKAAAAAAAAAACgAIAAAAKAAAAAACgAAAAAAAAAAAoAAAoAAAAAACgAAAAAAAAoAAAAAAAAACCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0W2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQFFAQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAFAAFAAAAAAAAAAAUAAAAAAAAAAFAAAAAAAAAABQAAAAAAAAAAUABAAAABQAAAAAAUAAAAAAAAAAAAFAAAFAAAAAAAUAAAAAAAAFAAAAAAAAAQUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGi2yAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAACAAooCAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAoAAoAAAAAAAAAACgAAAAAAAAAAoAAAAAAAAAAAKAAAAAAAAACgIAAAAAKAAAAAACgAAAAAAAAAAAAAoAAoAAAAAAACgAAAAAAAAoAAAAAAAACCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0W2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQFFQAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAFAAFAAAAAAAAAAAUAAAAAAAAAAFAAAAAAAAAAABQAAAAAAAAAUBAAAABQAAAAAAAAUAAAAAAAAAAAAAFAAFAAAAAAAAUAAAAAAAAFAAAAAAAAQAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGi2yAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAgAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAKAAAKAAAAAAAAAAAoAAAAAAAAAAKAAAAAAAAAAACgAAAAAAAAoACAAAACgAAAAAAAAoAAAAAAAAAAAAAKAAKAAAAAAAAoAAAAAAAAAKAAAAAAAAgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANFtkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAUAAAUAAAAAAAAABQAAAAAAAAAAAAUAAAAAAAAAAAFAAAAAAABQEAAAAAFAAAAAAAAAABQAAAAAAAAAAAAUAAUAAAAAAABQAAAAAAAAUAAAAAAABABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/2Q==", + skyBoxDown: "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAFA3PEY8MlBGQUZaVVBfeMiCeG5uePWvuZHI////////////////////////////////////////////////////2wBDAVVaWnhpeOuCguv/////////////////////////////////////////////////////////////////////////wAARCAgACAADAREAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAEC/8QAFBABAAAAAAAAAAAAAAAAAAAAAP/EABYBAQEBAAAAAAAAAAAAAAAAAAABAv/EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhEDEQA/ADKgAAAAAAAAAAIAAAAACgAgAAAAAAIAAACAAAAAAoAAAAAAAKAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAKAACAAAAAAAgAAAIAAAAACgAAAAAoAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAgAAIAAAACgAAAoAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACggAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAgAIAAAACgAAoAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAgAAIAACgAAoAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAACgAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAgAAAAAAKAAAACgAAgAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAgAAKAAAACgAAAAAgAAAAAAAAAAAAIAAAAAAAAAAAAAAACgAAgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAoAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAACAAAoAAAAAAAAAAAAAIAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAAgKAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAoAAAAAAAAAAAAAAAAAAAAAAAIAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAAAAAKAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAIACgAAAgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAKAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAoAAAAIACgAAAAAAAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAAAAIAAAAAACgAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAIAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACggAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAKAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAACgAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAKAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAICgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAIAAAAAAACgAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAKAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAIAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAIAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACgAAAAgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAgKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAACgAAAAAAAAAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAACAAoAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAKAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAoAAAAIAAAAACgAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAgAAAAAAAKAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAIAAAAAAAAAACgAAAAAAAAAAAAAgAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAgAAKAACAAAAAAAAoAAAAIAAAAAAACgAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAKAAAAAAAAAACAAAAAAAAAAAAAgAAKAAAAACAAAAAAoAAAIAAAAAAAAACgAAAAAAAAAAAAAgAAAAAAAKAAAAAAAAAAAACAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAgAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAACAAAAAAAAAAAAAgAKAAAAAAAACAAAAAoAIAAAAAAAAAACgAAAAAAAAAAAAAgAAAAAAAKAAAAAAAAAAAAAAAACAAAAAAAAAAAAoAAAAAIAAACgAAAAAAAAAAAgAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAACAoAAAAAAAAAAAAIAAAAAAAAAAAAAACgAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAACAAAAAAAAAAAoAAAAIAAAAACgAAAAAAAAAAgAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAICAoAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAIAAAAAACgAAAAAAAAAAgAAAAAAAAAAAAKAACAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAMgAoAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAKAAAAAACAoAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAADIAAKAAAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAICgAAAAAAAAAgAAAAAAAAAAAAAAAAAAKAAACAAAoAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAADIAAKAAAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAKAACAAAAAyAACgAAAAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAADIAKAAAAAAAAACAAAoAAAAAAAAAIAAAAAAACgAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAACAAAAAyCgAAAAAAAAAgAAAAKAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAgAAAAKAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAKAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAACAAAoAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAIAAAACgAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAoAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAgAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAACgAAAAAAAAgAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAACgAAAAAAAAgAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAIAAAAAAAAAAAAAAACgAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAKAAAAAAAAACAAAAAAAAAAAgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAKAAAAAAAAACAAAAAAAAAAAgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAKAAAAAAAACAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACggAAAAAAAAAAKAAAAACAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAIAAAAAAAAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAKAACAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAIAAAAAAAAAAAACAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAKAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAoAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAoAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAICAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAACAgAAAAKAAAAAAAAAACAoAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAAAAAAAACgAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAoAAAAAAAAMgAAoAAAAAAAAAAAAAAICgAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAgAAAAAAAAAKAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAACgAAAAAAAyCgAAAAAAAAAAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAIAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAKAAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAgAAAAAAKAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAAAoAAAAAAMgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAgAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAACgAAAAAAAAAAAAAgAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAgAAAAAAAAAAAAAAAKAAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAAAAAgAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICgAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAgAAAAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACgAgAAAAAAAAAKAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAKAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAKAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAKAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAACgAAAAgAAKAAAAAAAAAAACAAAAAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAIAAAAAAACgAAAAAgAAAAAKACAAAAAAAAAAAoAAAAAAIAAAAAAACgAAAAAAAAAAAgAAAAAAAAAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAIAAAAACgAAAAAAAAAgAAAAAAAAAAAAKAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAIAAAAAACgAAAgAAAAAAAAAKAAAAACAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAKAAACAAAAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAACgAAAAAAgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAAAgAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAoAAAAAIAAAAAAAACgAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACgAAAAAAgAAAAAKAAAAAAAAAAAAAAACAAAAAAoAAAIAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAgAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAIAAAAACgAAAAAgAAAAKAAAAAAAAAAAAAAACAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAgAAAAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAAAAAAAAAAAACAAAAAAAAoAAAAIAAACgAAAAAgAKAAAAAAAACAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAIAACgAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAAAAAAAACgAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAgAAAAAAAAAKAAACAAAoAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAIAAACgAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAAAAAAAACgAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAACgAAAgAAKAAAACAAAAAAAAAAAoAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAgAKAAAACAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAACAAAAAgAAAKAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAACAAAAAAAAAAAAoAAAAAAAAAAAAAAIAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAgAAAAIAAACgAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAgAAAAAKAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAgAAAIAAAACgAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAgAAAAAAAAAAAAAAKAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAgAAAKAAAAACgAAAAAAgAAKAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAIACgAgAAAAAAAAAAAAKACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAAgKAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAoAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAACgAAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAKAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAACgAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAoAAAAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAACgAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAKAAAAAAAAAAAAAAAAACAAAoAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAKAACAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAACgAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAACAAAoAAAAAIAAAAAAACgAAgAAAAAAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAICgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAKAACAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAKAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAACgAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAAoAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAKAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAAAAoAAAAAAAAAAKAAAAAACAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAgAAAAKAAAAAAAAAACgAAAAAAgAAAAIAAAACgAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAIAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAIAAAAAAAACgAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAgAAAAAAAAKAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAACAAAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAoAAAIAAAACAAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAACgAAAAAAoAAAAIAAAACAAAAAAoAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAACgAAAAAAoAAAAAIAAACAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAKAAAAACAAAAAgAAAAAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAoAAAAAIAAAACAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAgAAAAAAKAAACAAAAAgAAAAAAAAAKAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQIAAAAAAAAAAAAAACAAAAAAgKAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ACAAAAAAAAAAAAgAAAAIAAAACgAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAAgAAAAAAAAAAIAAACAAAAKACACgAAAAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAACAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAoAAIAAAAAAAAAAAAAAAAAAAADQIAAAAAAAAAACAAAAgAAAAAAAAKAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAIAAACgAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAIAACAAAAAAAAAoAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAgAAKAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAAAAAAAgAAAIAAAACgAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAAAAAAAACAAAoAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAKAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAAACAAAoAAAKAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAACAAAoAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAICgAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAAAAAAAAAgAAAAAAKACAAAAAAoAAAIAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACgAAAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAKCAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAACAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAACAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAgAAAAAKACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAIAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAKAAAACAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACggAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAAAACgAAAAAAAAAAgAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgCigIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAKAKAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAKAAACAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIoAoCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAAAIAAAACgAAAAAAAAgAAAAKAAAAAACAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACKAKAgAAAAAAAAAAAAAAAAAAAgAAAAAAAKAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAgAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAgKAAAAAAAAAAAAAAAAAACKKAAgAAAAAAAAAAAAAAAAAAgAAACgAAgAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAgAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAICgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKACAACggAAAAAAAAAAAAAAIAAACKAKAAAgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACggAoAAAAIAAAAAAAAAAACAAAAgCgCgAIAKACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAACAAAAAAAAKCAACgAAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAAAAAAIAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAAAAAIAAAAAAAAAAAACgAAoAAAAAAAAIAACgAAgAAAAAAAKAACAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAACAAAAAAAAAAAAoAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAgAAAAAAKAAAAAAAAAAACAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAIAAAAACAAAAAoAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAgAAAAKAAAAAAAAAAAACAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAAAAIAACgAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAKAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAKACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAoAAAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAgAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAACAAAAAAoAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAIAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAKAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAIAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAKCAAAAAAAAAAoIACgAgAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAADIKAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAKAACAoIAAAAAAACgAAAAAgAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACAAKIAACgIAAKAAAAAAAAAAAAAAAACAoAAAAAAAAAAAAAAKCAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAgKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAKACAoIAAAAAAAAACgAAAAAgAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAAoAAAAIAAogAAAAKgAoAAAAAAAAAAAAAIAAAACgAAAAAAAAAAAAAoIAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAoAICggAAAAAAAAAAKAAAACACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAogAAAAKAgAoAAAAAAAAAAAAIAAAACgAAAAAAAAAAAAAoIAAAAAAAAAACAAAoAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAAKAACACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAoAgAAAKAgAoAAAAAAAAAAAAIAAAACgAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAKAAAAAAAAAAAAAAAAAAAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAoAAAAIAAAAAAAAAAAAKAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAACAKAAAACACgAAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAACgCAAAoACAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIoAAAIAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAACgAACAAAoACAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAKCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAIAAAAACgAAAAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAoICgAACAAAAoACAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAAAAAAACgAoAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAACgAAAAACAAAAAoAACAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAAACgAAoAAAAIAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAKCAAoAAAAAAAAAAgAAAAKAAAgAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAoAAKAAAAAAACAAAAAAAAAAgAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAgAAAAAACgACAAAAAoAAAAAAAIAAAACgAAIAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAKAACgAAAAAAAAgAAAAAAIAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAgAAAACgAACAAAAAAAoAAAAAAAIAACgAAAAIAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAgAAAAAAKAAACgAAAAAAAgAAAAAAAIAAAoAAIAAKAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAIAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAIAAAAAoAAgAAAAAAAKAAAAAAAAAAAAAAAgAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACAAAAAAoAAAAKAAAAAAACAAAAAAAgACgCAAAqAACgAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAACAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACAAAAAKAAAAAAIAAACgAAAAAAAAAAAAAAIAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAgAAAKAAAAACgAAAAAAgAAAAAAAIAoAgAAAKgAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAIAAAAAACAKAAKAgKAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAgAAACgAAAAAAAAAAAAAAAAAAAAAAAAgAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAIoAgAAAAKgAoAAAAAAAAIAAAAAAACAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAgAAAAAIAoAAAAAoACAAAAAAAAAAAAAAoAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAACAAAKAAAAAAAAAAAAAAAAAAAAAAACAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAAAigCAAAAAqACgAAAAAAAAAgAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAACAAAAAigAAAAAAACoAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAIAAoAAAAAAAAAAAAAIAACgAgAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAIoAgAAAAKAgAoAAAAAAAAAAIAAACAAAoAAAAAKAAAACAAAAAAAAAAAoAAAAAAAIAAAACAAAAAigAAAAAAAgoAAAAAAAACgACAAoAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAgCgAAAAAAAAAAAAgAAAAAAAAAAAAAAAoAAAIAAAAAACgAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAIAACgAAAAAAAAAAAAAAAAAAoAAIAAAAAAAAAAAAogAIAAACgIAKAAAAAAAAAAACAAAAgAKAAAACgAAAAAAgAAAAAAAAKAAAAAAAACAAAAAAgAACiAAAAAAAAIKAAAAAAAAAoAgAAAKAAAgAAAAAAAAAAAAAAAAAAAAAAAAAKCAAAACgAAAAAAAAAAAAAAAAAAAigAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACAAoAAAAAAAAAAAAAAAAAAKAAAAAAAAAAACAAAKIAACAAAoAKgAAAAAAAAAAAAgAAAAAAAAAKAAAAAAAACAAAAAAAAoAAAAAAAAIAAAAACAAAKIAAACAoAACCgAAAAAAAKAAAIAACgAAIAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAoAAAAAAAAAAAAAAAAAAAIAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACggAAAKCACgAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACAKAIAAAAAACoAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAAAgAAAAAKAAAAAAAAACAAAAAAgACgCAAAAgKAAACoAAAAAAACgAAAAAAAAAgAAAAAAAAAAKCAoAIAAAAAACgAAAAAAgAAoAAAAAAAAAAAAAAAAAAAIAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAoAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAgCgACAAAAAoCAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACAAKAAIAAAAAAACoAAAAKACAKAAAAAAAAACAAAAAAAAAAoAAIAAAAAAAAAACgAAAAAgAoAAAAAAAAAAAAAAAAAAAIAoAAAAAAIAAAAAAAAAAAAAAAAAAAAAAACgAAAAAACoAAAAAAAAAAAAAAAAAKAAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAKAAAAAACAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAACAKAAIAAAAAACoAAAAAKACAKAAAAAAAACAAAAAAAAAAAoAAIAAAAAAAAACgAAAAAAAgoAAAAAAAAAAAAAAAAAAAIAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAACgAAAACgIAAAAAAAAAAAAAAAAAAKAAACAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAACAAAAAKCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAgCgACAAAAAoCAAAAAACggACgAAAAAAAgAAAAAAAKAAAAACAAAAAAAAAAAAoAAAAIAKAAAAAAAAAAAAAAAAAAACAKAAAAAAACAAAAAAAAAAAAAAAAAAAACgAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAigAACAAAoCAAAAAAAAAAAoAAAAAIAAAAAACgAAAAAAAAAgAAAAAAAAAAAAKACACgAAAAAAAAAAAAAAAAAAAAgCgAACAAoAACAAAAAAAAAAAAAAAAACgAAAAAAAAAKCAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAoAAAICgAAAAAAAAAAAAAAgAAAAAAAAAAAICgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAIoAAAAAIAAAAAAAAAAACgAAAgAAAAAAAKAIACgAAAAIAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAKAAAIACgAAIAAAKACAAAAAAAAAAoAAAAAAAAAAAAACggAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAgAAKAAAAAAAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAIAAAAAAAAAAACAKAACAAAAAAAAAAAAAAAACgAAgAAAAACgCAAAoAAACAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAgACgAAAAAAAAgAAoAAAIAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAgAAAKAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAIAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAoAgAAKAAAgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAoAAAAAAAAIAAKAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAgAAAKAAAAAAAAAAAAACAAAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAAIAAAAAoAgAKAAAAAAgAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAIAoAAAAAAAAIAAAKAAAAACAAAAAAoAAAAAAAAAAAAAAKAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAACAAAAAgKAAAAACAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAAAACgAAAAAAAAAAAAgAAAAAAAAAAIAAAAAAAAAAACgAAAAAAAAAAAAgAAAACgAAAAAAAAAAAgAAAAAAAAoAAAAAIAAAoAAAAIAAKAAAAAAAACAKAAAAAAAAACAAACgAAAAAAgAAAAKAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACAAAoAAAAAIAACgAAAAAAAAAAgAAAAAAAAAAAAAAAAAAKAAAAAAAAAACAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAACAAAAAKAAAAAAAAAAAACAAAAAAACgAAAgAACgAAAAgAAAAoAAAAAAAIAoICgAAAAAAgAAAAoAAAAAAIAAAACgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAgAAKAAAAAACAAoAAAAAAAAAIAAAAAAAAAAAAAAAAAAACgAAAAAAAgAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAgAAAACgAAAAAAAAAAAAgKCAAAAAAAAAAAoAAAAAAAAAIAKAoAAIAAIAAoIAAAAAAAAAAAAKAAAAACAAAAAoAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAIAACgAAAAAAAAgKCAoAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAoAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAACgAAAAIAIAAAAAACgAAAAAAAAAAAAAAgAAAAAKAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACAAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAoAAACAoAAAAAAAAAgAAAAAAAKAAAAAAAAAAAKAAAAAgAiggAAAAAoAAAAAAAAAAAAAAAAIAAAACgAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAgAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAKAgAAKCAoAAAAAAgKCAAAAAAAAAoAAAAAAAAoAAAAAACAogCAAAACgAAAAAAAAAAAAAAAAAAgAAAKAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACAAoAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAoCAAAAoAAAAAgKAAAAAAACAAAAoAAAAAAoAAAAAAAACAoiAAAAACgAAAAAAAAAAAAAAAAAAAKCAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAICgAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAqAAAAoAAAAAgAKAAAAAACAAAAoAAAAAqAoAAAAAAAAIIoIAAAAKAAAAAAAAAAAAAACgAgAAACgAAgAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACAAoAAAAAAAAIAACgAAAAgAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAoCAoiCqAAIAAACgAAAAAAAgAAAAKCAoqAAAAAAAAAoAIIAAAAACgAAAAAAAAAAAAoAAAAAAIAoAAIAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACgAgAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAoAIAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAKCIACgAAAAACgAAAAAAAAgAAAAAAAoAAAAAAAAAAAAIAAAACgAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAKAAAACAAAAAAAAoAAAAAAAAAAAIAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAoIAAAAAAAAACgAAAAAAAAAgAAAAAAAoAAAAAAAAAAAAIAAAACgAAAAAAAAAAoAAAAKAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgNAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAACAAAAAAAAAAAAAAAAoAAIAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAKCAAAAAAAAAoICgCAAAoAACAAAAAAACgAAAAAAAAAAAAAgAAAKAAAAAAAAAACgAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAA0AAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAAAAAACAAAoAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAKAACAoIAAAAAAACgACAAoAAACAAAAACgAAAAAAAAAAAAAAgAAKAAAAAAAAAAACgAAAAoAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAA0AAAAAAAAACAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAKAAAAACAAAAAAAoAAgAAKAAAgAAAAoAAAAAAAAAAAAAAIAACgAAAAAAAAAAAAAoAAAAAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgNAAAAAAAAAAAgAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAACgAAAAAAAgAAAAAKAAAIAACgAAIAAAKAAAAAAAAAAAAAACAAAoAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAgAAAAAAAAAAAAAAAAKAAAACAAAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKIAAAAAAAgAAAAAKAAAAIACgAAIAAAAKAAAAAAAAAAAoIAIoIKAAAAAACgAgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAIAAAAAgAAAAAAAKAAAAAAAAACAAACgAAAAAAAAKCAoAIAAAAAAAAKAAACAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAACAAAAAAAAoIAAAAAAAAAAAAAAAAAAAAAAAAACAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAgAAACACgAAAgACgAAAAAAAAAgAAAoAAAAAACgAgKAAAACAAAAACgAAAAAgAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAgAAAAAAAAKAAAAAAAAAAAACAAAAAAAAoAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAAAAACAAKAAAAAAAACAAACgAAAAAAAKAAAAAACAAAAACgAAAAAAgAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAgAAAAAAAAAKAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAgCgAAAAAAAgAAAoAAAAAAAAACgAAAAAgAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAigAAAgAAAAAAoAAAAAAAAAACgAAAAgAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACgAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAIAACgAAAAAAAAAAAKCAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAIAAAAAAAAAACgAgAAAAAAAIAACgAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoIAAKAAAAAACAAAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAAAAoAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAKAACAAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgCoAAAAAAAAAIAAAAAAAAAAACgAAAAAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIAAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAACAAAAAoAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAgAAAAKACAAAAAAAAAAAAAKAAAKgAAAAAAAAAgAAAAAAAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKoAIAAAIAAAAAAAACqAAAAIgAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAIACgAAgAAAAAAAAAAKACKAAAKgAAAAAAAAAAgAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAgAAAAAAAAKAAACAAAAAAAAAAAAAAAoAAAAAAAAIAAAAACgAAKACAAAACAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAigAAAgoAAAAAAAAAIAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAIAAAAAACgAAAAAAAgAAAAAAAKAAAAAAAAAAAAAAACAAoAAAAAAAAAAAAIAAAACgAAgAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAKAACAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAIAAACAAoAAAKACKAAACCgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAACgAAAAAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAoAAAAIAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAACAAAAgCggoAAKAACAKCCgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAACgAAAAAgAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACggAAAAAAAAAAAAAAAAAAAAIAACgAAAAgAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAKAAACAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAIAACKAAKgAAoAAAICgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAACggAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAgAAAAKAAAAAAAAAAACgAAAAAAAAAAAAAgAAAAAAAAAKAAACAAAAAAAAAoAAIAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAgAACiAAqAAACgAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAACgAAAAAoIAAAAAAAAAAAAAAAAAACgAAAgAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAgAAAAAKAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAKAAAACAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAIAAoAAIAAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAgAAKAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAgAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAIAoAIAAKAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACggAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAKAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoIAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACAoAAAAAAAAAAAAAAAAIAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAoAAAAAIAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAACgAAAAAAAgAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAKCAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAIAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAKAAACAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAIAACgAAAAgAAAAAAAAKAAAAAAAAAAAAACggAAAAAAAAAAAAAAAAAICgAAAAAoAAAAAIAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAiAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAoIAAAAAAAAAAAAAACAAAAAAoAAAAKAAAACAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAACCAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAACgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAoAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAoAAgACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAAAAAAIAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICgAAAAAAAAAAAAAAAAgAAAAAAKAAAAAAAAAAAAAAAAAAAAACAAoAAAAKAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAoAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAoAAAAAAAAAAIAACgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACgAAAAAAAgAAAAAAKAAAAAAAAAACAoAAAAAAIAAAAAACgAAoAAAAAAAAAAIAAAAAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAICgAAAAAAAAAAAAAAAgAAAAAAAAKAAAAAAACAAAAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAAAAAAIAAAAACgAAAAAAAAAAAgAAAAAAAAAAAAAAAKAACgAAAAAAAAAAgAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAoIAAAAAAAAACgAAAAAAAAAAAAAAAAAgAAAICgAAAAAAAAAAAAAAoAAAAAAAAIACgAAAAAAAAAAAAAAAAAgAAAAAAKAAAAACAAAAAAAAAAAoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAoAAAIAAAAAAACgAAAAAAAAAAAAgAAAAAAAAAAAAAAKAAACgAAAAAAAAAgAAAAAAAAAAAAAAAAAAKAAAAACAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAIAAAAAACgAAAAAAAAAAAAAAAAAgAAAICgAAAAAAAAAAAAAAoAAAAAAAIAACggAAAKAAAAAAAAAAAAAACAAAAAAAoAAAIAAAAAAAAAACgAAAAgAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAACKCAACgAAAAAAAAAAAAAoAAAAAAAAAAAAAIAAAAAAAAAAAAAAACgAAAAAoAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAgKAAAAAAAAAAAAAAACgAAAAAgAAAAAAAAAKAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAoAAAIAAAAAAAAACAAAoAAAAAAAAIAAAAAAAAAAAAACKAAACACgAAAAAAAAAAAAAoAAAAAAAAAAAAIAAAAAACAAAAoAAAAKAAAAAAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAoAIAAAAAAAACgAAAAAgAAAKCAAAAAAAoAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAACgAAgAAAAAAAAAIAAAACgAAAAAAAgAAIAoAAAAoACACKAAAAACACgAAAAAAAAAAAAoAAAAAAAAAAAAIAAAAACAAAAAqgAAgAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAoAAAIAAAAAACgAAAAAgAAAKACAAAAAAAAoAAAAAAAAAAAIAAAAAAAAACggAAAAAAAAAAKACAAAAAAAAAAgAAAAAKAAAAAACAAigAAAAAAAAAAAACAAoACACgAAgAAKAAAAAACgAAAAAAAAAAAgAAAAAIAAoAAoAAACAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACgAAAAgAAAAAKAAAAAACAAAA/9k=" + }, + qd = new bh, + jd = function () { + var A = "Success", + e = "", + t = "", + i = !1, + o = 0, + n = null; + return function (r, a, s) { + return 5 === r ? document.querySelector(".loading").classList.add("hide") : A = r, + "error" === r && (i = !1), + void 0 !== a && (e = a, + void 0 !== s && (i = s)), + 5e3 > (new Date).getTime() - o ? e !== t && (n = qd.notify(A, { + size: "mini", + rounded: !0, + position: "center top", + sound: !1, + delay: i, + msg: e + }), + o = (new Date).getTime(), + n.$el.childNodes[1].childNodes[0].title = e) : (n = qd.notify(A, { + size: "mini", + rounded: !0, + position: "center top", + sound: !1, + delay: i, + msg: e + }), + o = (new Date).getTime(), + n.$el.childNodes[1].childNodes[0].title = e), + t = e, + n + } + }(), + Hd = function (A, e) { + var t = A.toolId, + i = A.Flag, + o = A.viewer, + n = e.toolbarTop, + r = function (A) { + var e = o.viewerImpl.getBoundingBoxByIds([A]); + return e.max.distanceTo(e.min) / 10 + }, + a = this; + this.deleteListener = null, + this.addListener = null, + this.updateListener = null, + this.imageSize = 100; + var s = qd.window({ + title: "标签", + id: "markWindow" + t, + width: 356, + height: 848, + closeOnEsc: !1, + closeButton: !0, + afterWindowHide: function () { + var A = document.getElementById("mark" + t); + i.mark = !1, + A && (A.style.backgroundColor = "", + A.querySelector(".yj-icon").className = "yj-icon label-icon"), + document.getElementById("markColorModal" + t) && (document.getElementById("markColorModal" + t).style.display = "none"), + o.viewerImpl.cameraControl.dispatchEvent(Rc.ON_CAMERA_CHANGE) + }, + content: '
标签类型:
标签样式:
标题:
背景色:
标签位置(点击模型获取):
构件:
备注栏数:
' + }); + s.$el.addClass("markWindow"); + var l = function (A) { + if (A.intersectInfo) { + var e = "", + i = function A(e) { + if (e.intersectInfo) { + o.viewerImpl.modelManager.removeEventListener(Rc.ON_CLICK_PICK, A); + var t = o.viewerImpl.camera, + i = e.intersectInfo.point.clone(), + n = t.position.clone(), + r = i.clone().sub(n), + a = r.length(), + s = o.viewerImpl.getBoundingBoxByIds([e.intersectInfo.selectedObjectId]), + l = new CA(n, i.sub(n).normalize()).intersectBox(s), + c = Math.min(s.max.x - l.x, l.x - s.min.x), + h = Math.min(s.max.y - l.y, l.y - s.min.y), + d = Math.min(s.max.z - l.z, l.z - s.min.z), + p = Math.min(c, h, d); + return { + point: e.intersectInfo.point, + distance: a, + face: p === c ? "x" : p === h ? "y" : "z", + eye: r, + box: s + } + } + }(A), + n = document.getElementById("updateMark" + t); + xh.hasClass(n, "hide") ? (e = s.$el.querySelector(".mark .first-floor select").value, + s.$el.querySelector(".mark ." + e + " .startX ").value = A.intersectInfo.point.x, + s.$el.querySelector(".mark ." + e + " .startY ").value = A.intersectInfo.point.y, + s.$el.querySelector(".mark ." + e + " .startZ ").value = A.intersectInfo.point.z, + s.$el.querySelector(".mark ." + e + " .component ").value = A.intersectInfo.selectedObjectId, + "plane" === e && (s.$el.querySelector(".mark ." + e + " .face ").value = i.face)) : (e = "block" === n.querySelector(".dom").style.display ? "dom" : "block" === n.querySelector(".sprite").style.display ? "sprite" : "plane", + n.querySelector("." + e + " .startX ").value = A.intersectInfo.point.x, + n.querySelector("." + e + " .startY ").value = A.intersectInfo.point.y, + n.querySelector("." + e + " .startZ ").value = A.intersectInfo.point.z, + n.querySelector("." + e + " .component ").value = A.intersectInfo.selectedObjectId, + "plane" === e && (n.querySelector("." + e + " .face ").value = i.face)) + } + }, + c = new Od(o.viewerImpl), + h = new Gd(o.viewerImpl), + d = new Vd(o.viewerImpl), + p = s.$el.querySelector(".mark .dom .markColorInput"), + g = new Hh(p, { + hasOpacity: !1 + }); + p.value = "rgb(255,0,0)"; + var u = g.element; + u.id = "markColorModal" + t, + u.className = "markColorModal", + document.getElementById("mark" + t).parentNode.appendChild(u); + var f = qd.prompt({ + title: "修改标签", + id: "updateMark" + t, + width: 356, + height: 400, + closeOnEsc: !1, + closeButton: !1, + buttons: { + ok: { + class: "lobibox-btn lobibox-btn-default", + text: "确定", + closeOnClick: !0 + }, + cancel: { + class: "lobibox-btn lobibox-btn-cancel", + text: "取消", + closeOnClick: !0 + } + }, + content: '
标签id:
标题:
背景色:
标签位置(点击模型获取):
构件:
备注栏数:
标签id:
图标选择:
标签大小:
标签位置(点击模型获取):
X:
Y:
Z:
构件:
标签id:
图标选择:
标签大小:
标签位置(点击模型获取):
X:
Y:
Z:
构件:
标签所在面:
' + }); + f.setPosition({ + left: o.viewportDiv.offsetWidth - f.width - 5, + top: 60 + }), + f.promptHide(), + f.$el.addClass("updateMark"), + u.querySelector(".btn-yes").addEventListener("click", (function () { + var A = document.getElementById("updateMark" + t); + xh.hasClass(A, "hide") ? s.$el.querySelector(".mark .dom .colorRect").style.backgroundColor = p.value : f.$el.querySelector(".updateMarkPrompt .dom .colorRect").style.backgroundColor = p.value + })); + var m = qd.confirm({ + title: "请再次确认:", + id: "confirm-mark" + t, + width: 356, + height: 87, + closeOnEsc: !1, + closeButton: !1, + iconClass: !1, + msg: "是否要删除此标签?" + }); + m.setPosition({ + left: (qd.viewport.offsetWidth - m.$options.width) / 2, + top: 5 + }), + m.confirmHide(), + xh.addEventListener(n.querySelector("#mark" + t), "click", (function () { + i.mark ? (s.windowHide(), + o.viewerImpl.modelManager.removeEventListener(Rc.ON_CLICK_PICK, l), + f.promptHide(), + u.style.display = "none") : (document.getElementById("mark" + t).querySelector(".yj-icon").className = "yj-icon label-icon active", + i.mark = !i.mark, + s.windowShow(), + o.viewerImpl.modelManager.addEventListener(Rc.ON_CLICK_PICK, l)) + })); + for (var C = s.$el.querySelectorAll(".lobibox .lobibox-body .showColorModal"), v = 0; C.length > v; v += 1) + C[v].addEventListener("click", (function () { + u.style.display = "none" === u.style.display ? "block" : "none" + })); + for (var I = f.$el.querySelectorAll(".lobibox .lobibox-body .showColorModal"), E = 0; I.length > E; E += 1) + I[E].addEventListener("click", (function () { + u.style.display = "none" === u.style.display ? "block" : "none" + })); + for (var B = s.$el.querySelectorAll(".lobibox .lobibox-body .picture .chosed-pic"), x = 0; B.length > x; x += 1) + B[x].addEventListener("click", (function () { + var A = this.parentElement.lastChild; + A.style.display = "none" === A.style.display ? "block" : "none" + })); + for (var S = s.$el.querySelectorAll(".lobibox .lobibox-body .picture .file-choose span"), w = 0; S.length > w; w += 1) + S[w].addEventListener("click", (function () { + this.parentElement.querySelector("input").click() + })); + for (var M = s.$el.querySelectorAll(".lobibox .lobibox-body .picture .pic-list li"), b = 0; M.length > b; b += 1) + M[b].addEventListener("click", (function () { + var A = this.parentElement.parentElement.querySelector(".chosed-pic"), + e = this.querySelector("img").getAttribute("src"); + A.dataset.chosedUrl = e, + A.querySelector("img").setAttribute("src", e), + A.parentElement.lastChild.style.display = "none" + })); + s.$el.querySelector(".mark .first-floor select").addEventListener("change", (function () { + for (var A = this.value, e = s.$el.querySelectorAll(".mark .second-floor"), t = 0; e.length > t; t += 1) + e[t].style.display = "none"; + s.$el.querySelector(".mark ." + A).style.display = "block", + u.style.display = "none" + })), + s.$el.querySelector(".mark .third-floor .showList").addEventListener("click", (function () { + var A = s.$el.querySelector(".mark .forth-floor"); + "none" === A.style.display ? (A.style.display = "block", + this.innerHTML = "隐藏标签列表") : (A.style.display = "none", + this.innerHTML = "展示标签列表") + })), + s.$el.querySelector(".mark .third-floor .addMark").addEventListener("click", (function () { + u.style.display = "none"; + var A = s.$el.querySelector(".mark .first-floor select").value, + e = [], + t = null; + if ("dom" === A) { + var i = s.$el.querySelector(".mark .dom .title ").value; + "" === i && (i = "标签"); + var n = Kd.getColorArrayFromRGBA(s.$el.querySelector(".mark .dom .colorRect").style.backgroundColor), + l = parseInt(s.$el.querySelector(".mark .dom .text-tab ").value, 0), + c = null; + if (l > 10) + return void jd("warning", "备注栏不可超过10个", 5e3); + if (l > 0) { + c = document.createElement("div"); + for (var h = 0; l > h; h += 1) + c.innerHTML += '' + } + var d = s.$el.querySelector(".mark .dom .component ").value; + if (e[0] = Number(s.$el.querySelector(".mark .dom .startX ").value), + e[1] = Number(s.$el.querySelector(".mark .dom .startY ").value), + e[2] = Number(s.$el.querySelector(".mark .dom .startZ ").value), + isNaN(e[0]) || isNaN(e[1]) || isNaN(e[2])) + return void jd("warning", "标签位置错误,无法新建标签", 5e3); + var p = o.getScreenCoordFromSceneCoord(e); + t = { + title: i, + color: n, + startPosition: [e[0], e[1], e[2]], + endPosition: [p[0] + 100, p[1] - 200], + domElement: c, + componentId: d + } + } else if ("sprite" === A) { + try { + var g = s.$el.querySelector(".mark .sprite .chosed-pic").dataset.chosedUrl + } catch (A) { + return void jd("warning", "未选择标签图标", 5e3) + } + var f = Number(s.$el.querySelector(".mark .sprite .size ").value); + f && f >= 0 || (f = 1); + var m = s.$el.querySelector(".mark .sprite .component ").value; + if (m && (a.imageSize = r(m)), + e[0] = Number(s.$el.querySelector(".mark .sprite .startX ").value), + e[1] = Number(s.$el.querySelector(".mark .sprite .startY ").value), + e[2] = Number(s.$el.querySelector(".mark .sprite .startZ ").value), + isNaN(e[0]) || isNaN(e[1]) || isNaN(e[2])) + return void jd("warning", "标签位置错误,无法新建标签", 5e3); + t = { + url: g, + scale: f, + useImageSize: !1, + width: a.imageSize, + height: a.imageSize, + position: e, + alwaysVisible: !0, + componentId: m + } + } else { + try { + g = s.$el.querySelector(".mark .plane .chosed-pic").dataset.chosedUrl + } catch (A) { + return void a.message("warning", "未选择标签图标", 5e3) + } + var C = Number(s.$el.querySelector(".mark .plane .size ").value); + C && C >= 0 || (C = 1); + var y = s.$el.querySelector(".mark .plane .component ").value; + if (y && (a.imageSize = r(y)), + e[0] = Number(s.$el.querySelector(".mark .plane .startX ").value), + e[1] = Number(s.$el.querySelector(".mark .plane .startY ").value), + e[2] = Number(s.$el.querySelector(".mark .plane .startZ ").value), + isNaN(e[0]) || isNaN(e[1]) || isNaN(e[2])) + return void a.message("warning", "标签位置错误,无法新建标签", 5e3); + var v = s.$el.querySelector(".mark .plane .face").value; + v || (v = "x"), + t = { + URL: g, + scale: C, + useImageSize: !1, + width: a.imageSize, + height: a.imageSize, + position: e, + alwaysVisible: !0, + componentId: y, + transparent: !0, + face: v, + useFaceMatrix: !0 + } + } + "function" == typeof a.addListener ? a.addListener(A, t, (function (e, i) { + e && a.add(A, i || t) + })) : a.add(A, t) + })), + s.$el.querySelector(".forth-floor").addEventListener("click", (function (A) { + switch (A.target.className) { + case "deleteMark": + a.markDelete(A); + break; + case "updateMark": + a.markUpdate(A); + break; + case "info": + if ("聚焦" === A.target.innerText) { + var e = "", + i = xh.closest(A.target, "tr"), + n = i.querySelector(".id").innerHTML, + r = xh.closest(i, "table").className; + if ("dom" === r ? e = c.marks[n].componentId : "sprite" === r ? e = h.marks[n].componentId : "plane" === r && (e = d.marks[n].componentId), + !e) + return void jd("warning", "该标签没有关联构件!", 5e3); + for (var s = document.querySelectorAll("#markWindow" + t + " .forth-floor .info"), l = 0; s.length > l; l += 1) + s[l].innerText = "聚焦"; + A.target.innerText = "失焦", + function (A) { + var e = o.viewerImpl.getBoundingBoxByIds([A]); + if (e.min.x !== -1 / 0 && e.min.x !== 1 / 0) { + var t = e.getCenter(new y), + i = o.viewerImpl.camera.getWorldDirection(), + n = e.max.distanceTo(e.min), + r = new y; + r.copy(i), + r.setLength(n); + var a = new y; + a.subVectors(t, r), + o.flyTo({ + position: a, + target: t, + up: o.viewerImpl.camera.up + }, (function () { + o.viewerImpl.cameraControl.dispatchEvent(Rc.ON_CAMERA_CHANGE) + })), + o.highlightComponentsByKey([A]), + o.closeTransparentComponentsByKey([A]), + o.transparentOtherComponentsByKey([A]) + } else + jd("warning", "该构件不存在!", 5e3) + }(e) + } else + A.target.innerText = "聚焦", + o.clearTransparentList(), + o.clearHighlightList(); + break; + default: + if (xh.hasClass(A.target, "hideOrShow")) { + var p = xh.closest(A.target, "tr"), + g = p.querySelector(".id").innerHTML, + u = xh.closest(p, "table").className, + f = null; + f = "dom" === u ? c : "sprite" === u ? h : c, + xh.hasClass(A.target, "hideMark") ? (f.hide(g), + A.target.classList.remove("hideMark"), + A.target.classList.add("showMark"), + A.target.innerHTML = "显示") : (f.show(g), + A.target.classList.remove("showMark"), + A.target.classList.add("hideMark"), + A.target.innerHTML = "隐藏") + } + } + })), + s.setPosition({ + left: "", + right: 5, + top: 60 + }), + s.windowHide(), + this.add = function (A, e) { + switch (A) { + case "dom": + this.addDOMMark(e); + break; + case "sprite": + this.addSpriteMark(e); + break; + case "plane": + this.addPlaneMark(e) + } + }, + this.addDOMMark = function (A) { + c.add(A, (function (e) { + s.$el.querySelector(".mark .forth-floor .dom tbody").innerHTML += "' + e + '' + A.title + '' + })) + }, + this.addSpriteMark = function (A) { + h.add(A, (function (e) { + s.$el.querySelector(".mark .forth-floor .sprite tbody").innerHTML += "' + e + '' + })) + }, + this.addPlaneMark = function (A) { + d.add(A, (function (e) { + s.$el.querySelector(".mark .forth-floor .plane tbody").innerHTML += "' + e + '' + })) + }, + this.markDelete = function (A) { + var e = xh.closest(A.target, "tr"), + i = e.querySelector(".id").innerHTML, + o = xh.closest(e, "table").className; + m.confirmShow(); + var n = ""; + "dom" === o ? n = "文字标签" : "sprite" === o ? n = "精灵标签" : "plane" === o && (n = "平面标签"), + document.querySelector("#confirm-mark" + t + " .lobibox-body-text").innerHTML = "是否要删除编号为[" + i + "]的" + n + "?", + document.querySelector("#confirm-mark" + t + " .lobibox-btn-yes").onclick = function () { + "function" == typeof a.deleteListener ? a.deleteListener(o, i, (function (A) { + A && a.delete(o, i) + })) : a.delete(o, i), + m.confirmHide() + }, + document.querySelector("#confirm-mark" + t + " .lobibox-btn-no").onclick = function () { + m.confirmHide() + } + }, + this.delete = function (A, e) { + var t = null; + if ("dom" === A) { + if (t = c) { + t.remove(e); + var i = s.$el.querySelector(".mark .forth-floor .dom tbody"), + o = document.querySelector("tr[markId='" + e + "']"); + i.removeChild(o) + } + } else if ("sprite" === A) { + if (t = h) { + t.remove(e); + var n = s.$el.querySelector(".mark .forth-floor .sprite tbody"), + r = document.querySelector("tr[markId='" + e + "']"); + n.removeChild(r) + } + } else if ("plane" === A && (t = d)) { + t.remove(e); + var a = s.$el.querySelector(".mark .forth-floor .plane tbody"), + l = document.querySelector("tr[markId='" + e + "']"); + a.removeChild(l) + } + }, + this.markUpdate = function (A) { + var e = xh.closest(A.target, "tr"), + i = e.querySelector(".id").innerHTML, + o = xh.closest(e, "table").className; + f.promptShow(); + var n = document.getElementById("updateMark" + t); + if (n.style.cssText += "z-index:" + (Number(document.getElementById("markWindow" + t).style.zIndex) + 1), + "dom" === o) { + for (var l = n.querySelectorAll(".sprite , .plane"), p = 0; l.length > p; p += 1) + l[p].style.display = "none"; + n.querySelector(".dom ").style.display = "block", + n.querySelector(".dom .markId").value = i, + n.querySelector(".dom .title").value = c.marks[i].title, + n.querySelector(".dom .startX").value = c.marks[i].startPosition[0], + n.querySelector(".dom .startY").value = c.marks[i].startPosition[1], + n.querySelector(".dom .startZ").value = c.marks[i].startPosition[2], + n.querySelector(".dom .component").value = c.marks[i].componentId, + c.marks[i].domElement && (n.querySelector(".dom .text-tab").value = c.marks[i].domElement.querySelectorAll("input").length), + n.querySelector(".dom .colorRect").style.backgroundColor = Kd.getRGBAFromColorArray(c.marks[i].color), + n.querySelector(".lobibox-btn-default").onclick = function () { + var A = n.querySelector(".dom .title").value; + "" === A && (A = "标签"); + var e = Kd.getColorArrayFromRGBA(n.querySelector(".dom .colorRect").style.backgroundColor), + t = []; + if (t[0] = n.querySelector(".dom .startX").value, + t[1] = n.querySelector(".dom .startY").value, + t[2] = n.querySelector(".dom .startZ").value, + isNaN(t[0]) || isNaN(t[1]) || isNaN(t[2])) + jd("warning", "标签位置无效,无法更新标签", 5e3); + else { + var r = parseInt(n.querySelector(".dom .text-tab ").value, 0), + s = null; + if (10 < r) + jd("warning", "备注栏不可超过10个", 5e3); + else { + if (r > 0) { + s = document.createElement("div"); + for (var l = 0; r > l; l += 1) + s.innerHTML += '' + } + var c = { + title: A, + color: e, + startPosition: t, + domElement: s, + componentId: n.querySelector(".dom .component").value + }; + "function" == typeof a.updateListener ? a.updateListener(o, i, c, (function (A, e) { + A && a.update(o, i, e || c) + })) : a.update(o, i, c), + f.promptHide(), + u.style.display = "none" + } + } + } + } else if ("sprite" === o) { + for (var g = n.querySelectorAll(".dom , .plane"), m = 0; g.length > m; m += 1) + g[m].style.display = "none"; + n.querySelector(".sprite ").style.display = "block", + n.querySelector(".sprite .markId").value = i, + n.querySelector(".sprite .picture .chosed-pic").dataset.chosedUrl = h.marks[i].url, + n.querySelector(".sprite .picture .chosed-pic img").setAttribute("src", h.marks[i].url), + n.querySelector(".sprite .size").value = h.marks[i].scale, + n.querySelector(".sprite .startX").value = h.marks[i].position[0], + n.querySelector(".sprite .startY").value = h.marks[i].position[1], + n.querySelector(".sprite .startZ").value = h.marks[i].position[2], + n.querySelector(".sprite .component").value = h.marks[i].componentId, + n.querySelector(".lobibox-btn-default").onclick = function () { + try { + var A = n.querySelector(".sprite .picture .chosed-pic").dataset.chosedUrl + } catch (A) { + return void jd("warning", "未选择标签图标", 5e3) + } + var e = n.querySelector(".sprite .size").value; + e && e >= 0 || (e = 1); + var t = []; + if (t[0] = Number(n.querySelector(".sprite .startX ").value), + t[1] = Number(n.querySelector(".sprite .startY ").value), + t[2] = Number(n.querySelector(" .sprite .startZ ").value), + isNaN(t[0]) || isNaN(t[1]) || isNaN(t[2])) + jd("warning", "标签位置无效,无法更新标签", 5e3); + else { + var s = n.querySelector(".sprite .component").value; + s && (a.imageSize = r(s)); + var l = { + url: A, + scale: e, + position: t, + useImageSize: !1, + width: a.imageSize, + height: a.imageSize, + alwaysVisible: !0, + componentId: s + }; + "function" == typeof a.updateListener ? a.updateListener(o, i, l, (function (A, e) { + A && a.update(o, i, e || l) + })) : a.update(o, i, l), + f.promptHide() + } + } + } else if ("plane" === o) { + for (var C = n.querySelectorAll(".dom , .sprite"), y = 0; C.length > y; y += 1) + C[y].style.display = "none"; + n.querySelector(".plane ").style.display = "block", + n.querySelector(".plane .markId").value = i, + n.querySelector(".plane .picture .chosed-pic").dataset.chosedUrl = d.marks[i].URL, + n.querySelector(".plane .picture .chosed-pic img").setAttribute("src", d.marks[i].URL), + n.querySelector(".plane .size").value = d.marks[i].scale, + n.querySelector(".plane .startX").value = d.marks[i].position[0], + n.querySelector(".plane .startY").value = d.marks[i].position[1], + n.querySelector(".plane .startZ").value = d.marks[i].position[2], + n.querySelector(".plane .component").value = d.marks[i].componentId, + n.querySelector(".plane .face").value = d.marks[i].face, + n.querySelector(".lobibox-btn-default").onclick = function () { + try { + var A = n.querySelector(".plane .picture .chosed-pic").dataset.chosedUrl + } catch (A) { + return void jd("warning", "未选择标签图标", 5e3) + } + var e = n.querySelector(".plane .size").value; + e && e >= 0 || (e = 1); + var t = []; + if (t[0] = Number(n.querySelector(".plane .startX ").value), + t[1] = Number(n.querySelector(".plane .startY ").value), + t[2] = Number(n.querySelector(" .plane .startZ ").value), + isNaN(t[0]) || isNaN(t[1]) || isNaN(t[2])) + jd("warning", "标签位置无效,无法更新标签", 5e3); + else { + var l = n.querySelector(".plane .component").value; + l && (a.imageSize = r(l)); + var c = s.$el.querySelector(".updateMarkPrompt .plane .face").value; + c || (c = "x"); + var h = { + URL: A, + scale: e, + position: t, + useImageSize: !1, + width: a.imageSize, + height: a.imageSize, + alwaysVisible: !0, + face: c, + componentId: l + }; + "function" == typeof a.updateListener ? a.updateListener(o, i, h, (function (A, e) { + A && a.update(o, i, e || h) + })) : a.update(o, i, h), + f.promptHide() + } + } + } + n.querySelector(".lobibox-btn-cancel").onclick = function () { + f.promptHide(), + u.style.display = "none" + } + }, + this.update = function (A, e, t) { + "dom" === A ? a.updateDOMMark(e, t) : "sprite" === A ? a.updateSpriteMark(e, t) : "plane" === A && a.updatePlaneMark(e, t) + }, + this.hide = function (A, e) { + var t = document.querySelector("tr[markId='" + e + "']"); + if (t) { + var i = t.querySelector(".hideOrShow"); + i.classList.remove("hideMark"), + i.classList.add("showMark"), + i.innerHTML = "显示" + } + "dom" === A ? c.hide(e) : "sprite" === A && h.hide(e) + }, + this.show = function (A, e) { + var t = document.querySelector("tr[markId='" + e + "']"); + if (t) { + var i = t.querySelector(".hideOrShow"); + i.classList.remove("showMark"), + i.classList.add("hideMark"), + i.innerHTML = "显示" + } + "dom" === A ? c.show(e) : "sprite" === A && h.show(e) + }, + this.updateDOMMark = function (A, e) { + var t = document.querySelector("tr[markId='" + A + "']"); + t && (t.querySelector(".markTitle").innerHTML = e.title, + t.querySelector(".markTitle").setAttribute("title", e.title)), + c.updateMark(A, e) + }, + this.updateSpriteMark = function (A, e) { + var t = document.querySelector("tr[markId='" + A + "']"); + t && t.querySelector(".markImg").setAttribute("src", e.url), + h.updateMark(A, e) + }, + this.updatePlaneMark = function (A, e) { + var t = document.querySelector("tr[markId='" + A + "']"); + t && t.querySelector(".markImg").setAttribute("src", e.URL), + d.updateMark(A, e) + }, + this.getDOMMark = function () { + return c + }, + this.getSpriteMark = function () { + return h + }, + this.getPlaneMark = function () { + return d + } + }, + Yd = function (A, e, t, i, o) { + var n = A.toolId, + r = A.Flag, + s = A.viewer; + + function l(A, e) { + A.length > e && s.flyTo(A[e], (function () { + l(A, e += 1) + })) + } + o.querySelector("#collision" + n).addEventListener("click", (function (A) { + "walk" === s.viewerImpl.controlManager.control.name && (vc.EnableHitDetection = !vc.EnableHitDetection), + s.viewerImpl.controlManager.setFocuse() + })), + o.querySelector("#gravity" + n).addEventListener("click", (function () { + "walk" === s.viewerImpl.controlManager.control.name && (vc.WalkingWithGravity = !vc.WalkingWithGravity), + s.viewerImpl.controlManager.setFocuse() + })); + var c = {}, + h = [], + d = qd.window({ + title: "漫游路径", + id: "pathRoam" + n, + width: 356, + height: 848, + closeOnEsc: !1, + closeButton: !0, + afterWindowHide: function () { + var A = document.getElementById("roam" + n); + r.roam = !1, + A && (A.style.backgroundColor = "", + A.querySelector(".yj-icon").className = "yj-icon roam-icon") + }, + content: '
路径列表:
' + }); + d.$el.addClass("pathRoam"); + var p = null; + t.addEventListener("click", (function () { + if (r.roam) + return p && p.destroy(), + document.getElementById("instructions" + n) && s.viewerImpl.domElement.removeChild(document.getElementById("instructions" + n)), + o.style.display = "none", + this.style.backgroundColor = "", + this.querySelector(".yj-icon").className = "yj-icon roam-icon", + r.roam = !1, + s.viewerImpl.controlManager.setControlMode(s.viewerImpl, "pick"), + void(d && d.windowHide && d.windowHide()); + r.measurement && (document.getElementById("measurement" + n).style.backgroundColor = "", + document.getElementById("measurement" + n).querySelector(".yj-icon").className = "yj-icon measurement-icon", + jd("info", "漫游模式下将关闭测量功能", 2e3), + e.exitMeasure && e.exitMeasure()), + r.sectioning && (document.getElementById("sectioning" + n).style.backgroundColor = "", + document.getElementById("sectioning" + n).querySelector(".yj-icon").className = "yj-icon sectioning-icon", + jd("info", "漫游模式下将关闭剖切功能", 2e3), + s.viewerImpl.controlManager.disableTool(Pc.CLIP_BY_BOX), + r.sectioning = !1), + r.multiple && (document.getElementById("multiple" + n).style.backgroundColor = "", + document.getElementById("multiple" + n).querySelector(".yj-icon").className = "yj-icon multiple-icon", + jd("info", "漫游模式下将关闭框选功能", 2e3), + s.viewerImpl.controlManager.disableTool(Pc.PICK_BY_RECT), + r.multiple = !1), + s.render(), + this.style.backgroundColor = "#1f89de", + this.querySelector(".yj-icon").className = "yj-icon roam-icon active", + r.roam = !r.roam, + p = qd.prompt({ + title: "漫游", + id: "roamChoose" + n, + width: 356, + height: 87, + closeOnEsc: !1, + closeButton: !1, + afterWindowHide: function () { + var A = document.getElementById("roam" + n); + r.roam = !1, + A && (A.style.backgroundColor = ""), + p.destroy(), + p = null + }, + buttons: { + ok: { + class: "lobibox-btn lobibox-btn-default", + text: "自由漫游", + closeOnClick: !0 + }, + cancel: { + class: "lobibox-btn lobibox-btn-cancel", + text: "路径漫游", + closeOnClick: !0 + } + } + }); + var A = document.getElementById("roamChoose" + n); + A.querySelector(".lobibox-body").style.display = "none", + A.querySelector(".lobibox-btn-default").addEventListener("click", (function () { + p.destroy(), + p = null; + var A = document.createElement("div"); + A.id = "instructions" + n, + A.style.cssText += "position:absolute;left:0;top:0;width:100%;height:100%;background:rgba(80,80,80,0.3);margin:0;padding:0;", + A.innerHTML = '
点击进入沉浸式浏览
移动方向
高度
视角
速度
' + A + '', + h = [], + d.$el.querySelector(".path-roaming .second-floor .viewList .name").value = "", + d.$el.querySelector(".path-roaming .second-floor .viewList table tbody").innerHTML = "" + } + })), + d.$el.querySelector(".path-roaming .second-floor .saveView").addEventListener("click", (function () { + var A = {}; + A.position = s.viewerImpl.camera.position.clone(), + A.target = s.viewerImpl.camera.target.clone(), + A.up = { + x: 0, + y: 0, + z: 1 + }, + h.push(A); + var e = h.length; + d.$el.querySelector(".path-roaming .second-floor .viewList table tbody").innerHTML += "视角' + e + '' + })); + var g = qd.confirm({ + title: "请再次确认:", + id: "confirm-path" + n, + width: 356, + height: 87, + closeOnEsc: !1, + closeButton: !1, + iconClass: !1, + msg: "是否要删除此视角?" + }); + return g.setPosition({ + left: (qd.viewport.offsetWidth - g.$options.width) / 2, + top: 5 + }), + g.confirmHide(), + d.$el.addEventListener("click", (function (A) { + if ("deleteView" === A.target.className) { + var e = (r = xh.closest(A.target, "tr")).dataset.index; + g.confirmShow(), + document.querySelector("#confirm-path" + n + " .lobibox-body-text").innerHTML = "是否要删除编号为[" + (Number(e) + 1) + "]的视角?", + document.querySelector("#confirm-path" + n + " .lobibox-btn-yes").onclick = function () { + h.splice(e, 1), + d.$el.querySelector(".path-roaming .second-floor .viewList tbody").removeChild(r); + for (var A = d.$el.querySelectorAll(".path-roaming .second-floor .viewList tbody tr"), t = 0; A.length > t; t += 1) + A[t].dataset.index = t, + A[t].querySelector(".name").innerHTML = "视角" + (t + 1); + g.confirmHide() + }, + document.querySelector("#confirm-path" + n + " .lobibox-btn-no").onclick = function () { + g.confirmHide() + } + } else if ("updateView" === A.target.className) { + var t = xh.closest(A.target, "tr").dataset.index; + g.confirmShow(), + document.querySelector("#confirm-path" + n + " .lobibox-body-text").innerHTML = "是否要修改编号为[" + (Number(t) + 1) + "]的视角为当前视角?", + document.querySelector("#confirm-path" + n + " .lobibox-btn-yes").onclick = function () { + var A = {}; + A.position = s.viewerImpl.camera.position.clone(), + A.target = s.viewerImpl.camera.target.clone(), + A.up = { + x: 0, + y: 0, + z: 1 + }, + h[t] = A, + g.confirmHide() + }, + document.querySelector("#confirm-path" + n + " .lobibox-btn-no").onclick = function () { + g.confirmHide() + } + } else if ("checkView" === A.target.className) { + var i = xh.closest(A.target, "tr").dataset.index; + s.flyTo(h[i]) + } else if ("roamPath" === A.target.className) { + var o = xh.closest(A.target, "tr").dataset.key; + l(c[o].camera, 0) + } else if ("deletePath" === A.target.className) { + var r, a = (r = xh.closest(A.target, "tr")).dataset.key; + g.confirmShow(), + document.querySelector("#confirm-path" + n + " .lobibox-body-text").innerHTML = "是否要删除名称为[" + c[a].name + "]的路径?", + document.querySelector("#confirm-path" + n + " .lobibox-btn-yes").onclick = function () { + d.$el.querySelector(".path-roaming .pathList tbody").removeChild(r), + delete c[a], + g.confirmHide() + }, + document.querySelector("#confirm-path" + n + " .lobibox-btn-no").onclick = function () { + g.confirmHide() + } + } + })), + d + }, + Wd = function (A, e, t) { + var i = this; + this.lobibox = new bh, + A ? (this.element = document.getElementById(A), + this.lobibox.viewport = document.querySelector("#" + A)) : this.element = document, + this.change = !1; + var o = function () { + this.storage = null + }; + o.prototype = { + init: function () { + this.storage = function () { + var A = !1; + return "object" === lc(window.localStorage) ? A = localStorage : "object" === lc(window.globalStorage) && (A = window.globalStorage), + A + }() + }, + getStorage: function () { + return this.storage + }, + save: function (A, e) { + var t = this.storage, + i = !1; + return !1 !== t && (i = t.setItem(A, e)), + i + }, + load: function (A) { + var e = this.storage, + t = !1; + return !1 !== e && (t = e.getItem(A)), + t + } + }, + i.model = i.model || {}, + i.model.StorageModel = o; + ! function () { + var A, e, t, o, n, r, a; + (n = function () { + this.name = "Mouse", + this.option = {}, + this.mouseShape = null, + this.init = function (A, e) { + this.setOption({ + lineWidth: 1, + strokeStyle: A.strokeStyle, + radius: Math.ceil(A.lineWidth / 2), + opacity: 100 + }), + this.setPoints(e), + this.setMouseShape(new i.model.shapeModel.CircleStroke), + this.initMouseShape(), + this.setImage() + }, + this.paint = function (A) { + this.getMouseShape().paint(A) + } + }).prototype = { + getName: function () { + return this.name + }, + setOption: function (A) { + return "object" === lc(A) ? (uh.extend(!0, this.option, A), + this.getOption()) : null + }, + getOption: function () { + return uh.extend(!0, {}, this.option) + }, + getMouseShape: function () { + return this.mouseShape + }, + setMouseShape: function (A) { + return this.mouseShape = A, + A + }, + setPoints: function (A) { + this.setOption(A) + }, + initMouseShape: function () { + this.getMouseShape().init(this.getOption()) + }, + setImage: function () { + var A = this.getName(); + return [].map.call(document.querySelectorAll("#canvas-mouse"), (function (e, t) { + e.setAttribute("data-mouse", A) + })), + !0 + } + }, + (A = function () { + this.name = "Cross", + this.init = function (A, e) { + var t = this.getName(); + this.setOption({ + length: 10, + lineHeight: 1, + opacity: 100, + strokeStyle: A.strokeStyle, + lineJoin: A.lineJoin, + lineCap: A.lineCap, + shadowOffsetX: A.shadowOffsetX, + shadowOffsetY: A.shadowOffsetY, + shadowBlur: A.shadowBlur, + shadowColor: A.shadowColor + }), + this.setPoints(e), + this.setMouseShape(new i.model.shapeModel[t]), + this.initMouseShape(), + this.setImage() + }, + this.paint = function (A) { + this.getMouseShape().paint(A) + } + }).prototype = new n, + (r = function () { + this.name = "Pen" + }).prototype = new n, + (e = function () { + this.name = "Eraser", + this.init = function (A, e) { + this.setOption({ + strokeStyle: "#000", + opacity: A.opacity, + radius: Math.ceil(A.lineWidth / 2, 10), + lineJoin: A.lineJoin, + lineCap: A.lineCap, + shadowOffsetX: A.shadowOffsetX, + shadowOffsetY: A.shadowOffsetY, + shadowBlur: A.shadowBlur, + shadowColor: A.shadowColor + }), + this.setPoints(e), + this.setMouseShape(new i.model.shapeModel.CircleStroke), + this.initMouseShape(), + this.setImage() + }, + this.paint = function (A) { + this.getMouseShape().paint(A) + } + }).prototype = new n, + (a = function () { + this.name = "Text", + this.init = function (A, e) { + this.setImage() + }, + this.paint = function (A) {} + }).prototype = new n, + (o = function () { + this.name = "FloodFill", + this.init = function (A, e) { + this.setOption({ + strokeStyle: "#000", + opacity: 90, + radius: Math.ceil(A.lineWidth / 2, 10) + }), + this.setPoints(e), + this.setMouseShape(new i.model.shapeModel.CircleStroke), + this.initMouseShape(), + this.setImage() + }, + this.paint = function (A) { + this.getMouseShape().paint(A) + } + }).prototype = new n, + (t = function () { + this.name = "EyeDropper", + this.init = function (A, e) { + this.setOption({ + strokeStyle: "#000", + opacity: 90, + radius: Math.ceil(A.lineWidth / 2, 10) + }), + this.setPoints(e), + this.setMouseShape(new i.model.shapeModel.CircleStroke), + this.initMouseShape(), + this.setImage() + }, + this.paint = function (A) { + this.getMouseShape().paint(A) + } + }).prototype = new n, + i.model = i.model || {}, + i.model.mouseModel = i.model.mouseModel || {}, + i.model.mouseModel.Mouse = n, + i.model.mouseModel.Cross = A, + i.model.mouseModel.Pen = r, + i.model.mouseModel.Eraser = e, + i.model.mouseModel.Text = a, + i.model.mouseModel.FloodFill = o, + i.model.mouseModel.EyeDropper = t + }(); + var n = { + list: [], + add: function (A) { + return this.list.push({ + x: Math.round(A.x), + y: Math.round(A.y) + }), + this.list + }, + getStart: function () { + return this.list[0] + }, + getEnd: function () { + return this.list[this.list.length - 1] + }, + getList: function () { + return this.list + }, + init: function () { + return this.list = [], + this.list + } + }; + i.model = i.model || {}, + i.model.PointList = n; + (function () { + var A, e, t, o, n, r, a, s, l, c, h, d, p, g, u, f, m, C, y, v; + + function I(A, e, t, i, o) { + var n = i / .75 / 2, + r = o / 2; + return A.beginPath(), + A.moveTo(e, t - r), + A.bezierCurveTo(e + n, t - r, e + n, t + r, e, t + r), + A.bezierCurveTo(e - n, t + r, e - n, t - r, e, t - r), + A.closePath(), + A + } + (m = function () { + this.name = "Shape", + this.option = {} + }).prototype = { + init: function (A) { + this.initOption(A) + }, + getName: function () { + return this.name + }, + initOption: function (A) { + this.option = {}, + this.setOption(A) + }, + setOption: function (A) { + return uh.extend(!0, this.option, A), + this.option + }, + getOption: function () { + return this.option + }, + repaint: function (A) { + this.paint(A) + }, + setAttributes: function (A) {} + }, + (c = function () { + this.name = "FillStroke", + this.setAttributes = function (A) { + var e = this.getOption(); + A.strokeStyle = e.strokeStyle, + A.fillStyle = e.fillStyle, + A.lineWidth = e.lineWidth, + A.globalAlpha = e.opacity / 100, + A.lineJoin = e.lineJoin, + A.lineCap = e.lineCap, + A.shadowOffsetX = e.shadowOffsetX, + A.shadowOffsetY = e.shadowOffsetY, + A.shadowBlur = e.shadowBlur, + A.shadowColor = e.shadowColor + } + }).prototype = new m, + (p = function () { + this.name = "Line", + this.paint = function (A) { + var e = this.getOption(); + A.save(), + this.setAttributes(A), + A.beginPath(), + A.moveTo(e.startX, e.startY), + A.lineTo(e.endX, e.endY), + A.closePath(), + A.stroke(), + A.restore() + } + }).prototype = new c, + (o = function () { + this.name = "CurveClosed", + this.paint = function (A) { + var e = this.getOption().list, + t = e[0], + i = e.length, + o = 0; + for (A.save(), + this.setAttributes(A), + A.beginPath(), + A.moveTo(t.x, t.y); i > o; o += 1) + A.lineTo(e[o].x, e[o].y); + A.closePath(), + A.fill(), + A.stroke(), + A.restore() + } + }).prototype = new c, + (u = function () { + this.name = "Rect", + this.paint = function (A) { + var e = this.getOption(); + A.save(), + this.setAttributes(A), + A.fillRect(e.left, e.top, e.width, e.height), + A.strokeRect(e.left, e.top, e.width, e.height), + A.restore() + } + }).prototype = new c, + (A = function () { + this.name = "Circle", + this.paint = function (A) { + var e = this.getOption(); + A.save(), + this.setAttributes(A), + A.beginPath(), + A.arc(e.x, e.y, e.radius, 0, 2 * Math.PI, !0), + A.closePath(), + A.fill(), + A.stroke(), + A.restore() + } + }).prototype = new c, + (r = function () { + this.name = "Ellipes", + this.paint = function (A) { + var e = this.getOption(), + t = e.x, + i = e.y, + o = e.width, + n = e.height; + A.save(), + this.setAttributes(A), + I(A, t, i, o, n), + A.fill(), + A.stroke(), + A.restore() + } + }).prototype = new c, + (C = function () { + this.name = "Stroke", + this.setAttributes = function (A) { + var e = this.getOption(); + A.strokeStyle = e.strokeStyle, + A.lineWidth = e.lineWidth, + A.globalAlpha = e.opacity / 100, + A.lineJoin = e.lineJoin, + A.lineCap = e.lineCap, + A.shadowOffsetX = e.shadowOffsetX, + A.shadowOffsetY = e.shadowOffsetY, + A.shadowBlur = e.shadowBlur, + A.shadowColor = e.shadowColor + } + }).prototype = new m, + (g = function () { + this.name = "Pen", + this.paint = function (A) { + var e = this.getOption().list, + t = e[0], + i = e.length, + o = 0; + for (A.save(), + this.setAttributes(A), + A.beginPath(), + A.moveTo(t.x, t.y); i > o; o += 1) + A.lineTo(e[o].x, e[o].y); + A.stroke(), + A.restore() + } + }).prototype = new C, + (n = function () { + this.name = "CurveClosedStroke", + this.paint = function (A) { + var e = this.getOption().list, + t = e[0], + i = e.length, + o = 0; + for (A.save(), + this.setAttributes(A), + A.beginPath(), + A.moveTo(t.x, t.y); i > o; o += 1) + A.lineTo(e[o].x, e[o].y); + A.closePath(), + A.stroke(), + A.restore() + } + }).prototype = new C, + (f = function () { + this.name = "RectStroke", + this.paint = function (A) { + var e = this.getOption(); + A.save(), + this.setAttributes(A), + A.strokeRect(e.left, e.top, e.width, e.height), + A.restore() + } + }).prototype = new C, + (e = function () { + this.name = "CircleStroke", + this.paint = function (A) { + var e = this.getOption(); + A.save(), + this.setAttributes(A), + A.beginPath(), + A.arc(e.x, e.y, e.radius, 0, 2 * Math.PI, !0), + A.closePath(), + A.stroke(), + A.restore() + } + }).prototype = new C, + (a = function () { + this.name = "EllipesStroke", + this.paint = function (A) { + var e = this.getOption(), + t = e.x, + i = e.y, + o = e.width, + n = e.height; + A.save(), + this.setAttributes(A), + I(A, t, i, o, n), + A.stroke(), + A.restore() + } + }).prototype = new C, + (s = function () { + this.name = "Eraser", + this.paint = function (A) { + var e = this.getOption(), + t = e.list, + i = t[0], + o = t.length, + n = 0; + for (A.save(), + A.strokeStyle = e.color, + A.lineWidth = e.lineWidth, + A.shadowOffsetX = e.shadowOffsetX, + A.shadowOffsetY = e.shadowOffsetY, + A.shadowBlur = e.shadowBlur, + A.shadowColor = e.shadowColor, + A.lineJoin = e.lineJoin, + A.lineCap = e.lineCap, + A.globalAlpha = e.opacity / 100, + A.beginPath(), + A.moveTo(i.x, i.y); o > n; n += 1) + A.lineTo(t[n].x, t[n].y); + A.stroke(), + A.restore() + } + }).prototype = new m, + (h = function () { + this.name = "FloodFill", + this.paint = function (A) { + var e = this.getOption(), + t = e.allowance, + i = e.fillStyle ? e.fillStyle : "rgba(0,0,0,1)", + o = i.indexOf("(") + 1, + n = i.slice(o, -1).split(","), + r = { + r: parseInt(n[0], 10), + g: parseInt(n[1], 10), + b: parseInt(n[2], 10), + a: Math.ceil(255 * (n[3] || 1)) + }, + a = e.x, + s = e.y, + l = e.width, + c = e.height, + h = A.getImageData(0, 0, l, c), + d = h.data, + p = 4 * (l * s + a), + g = d[p], + u = d[p + 1], + f = d[p + 2], + m = d[p + 3] / 255, + C = [{ + x: a, + y: s + }]; + try { + ! function (A, e) { + var o = null, + n = null, + r = null, + h = null, + p = null, + y = null, + v = {}; + for (Bh.time("floodFill"); 0 !== C.length;) + y = C.pop(), + v[o = 4 * (l * y.y + y.x)] = !0, + r = d[o + 1], + h = d[o + 2], + p = d[o + 3] / 255, + ((n = d[o]) !== e.r || r !== e.g || h !== e.b || 255 * p !== e.a) && Math.abs(n - g) < t && Math.abs(r - u) < t && Math.abs(h - f) < t && Math.abs(p - m) < t / 256 && (d[o] = e.r, + d[o + 1] = e.g, + d[o + 2] = e.b, + d[o + 3] = e.a, + !v[o - 4] && a > 0 && C.push({ + x: y.x - 1, + y: y.y + }), + !v[o + 4] && l > a && C.push({ + x: y.x + 1, + y: y.y + }), + !v[o - 4 * l] && s > 0 && C.push({ + x: y.x, + y: y.y - 1 + }), + !v[o + 4 * l] && c > s && C.push({ + x: y.x, + y: y.y + 1 + })); + Bh.timeEnd("floodFill"), + y = null, + o = null, + n = null, + r = null, + h = null, + p = null, + i = null + }(0, r) + } catch (A) { + window.console.log(A.message) + } + d = null, + A.save(), + A.putImageData(h, 0, 0), + A.restore() + } + }).prototype = new m, + (l = function () { + this.name = "EyeDropper", + this.paint = function (A) { + var e = this.getOption(), + t = document.querySelector("#tool-wrap .tool .color"), + i = A.getImageData(e.x, e.y, 1, 1).data, + o = "rgba(".concat(i[0], ",", i[1], ",", i[2], ",", i[3] / 255, ")"); + t.value = o, + xh.css(document.querySelector("#tool-wrap #colorOperatorDiv"), { + "background-color": o + }) + }, + this.repaint = function () {} + }).prototype = new m, + (t = function () { + this.name = "Cross", + this.paint = function (A) { + var e = this.getOption(), + t = e.x, + i = e.y, + o = e.length, + n = t - o, + r = i, + a = t + o, + s = i, + l = t, + c = i - o, + h = t, + d = i + o; + A.save(), + A.strokeStyle = e.strokeStyle, + A.lineWidth = e.lineWidth, + A.shadowOffsetX = e.shadowOffsetX, + A.shadowOffsetY = e.shadowOffsetY, + A.shadowBlur = e.shadowBlur, + A.shadowColor = e.shadowColor, + A.lineJoin = e.lineJoin, + A.lineCap = e.lineCap, + A.globalAlpha = e.opacity / 100, + A.beginPath(), + A.moveTo(n, r), + A.lineTo(a, s), + A.moveTo(l, c), + A.lineTo(h, d), + A.closePath(), + A.stroke(), + A.restore() + } + }).prototype = new m, + (y = function () { + this.name = "Text", + this.setAttributes = function (A) { + var e = this.getOption(); + A.shadowOffsetX = e.shadowOffsetX, + A.shadowOffsetY = e.shadowOffsetY, + A.shadowBlur = e.shadowBlur, + A.shadowColor = e.shadowColor, + A.strokeStyle = e.strokeStyle, + A.fillStyle = e.fillStyle, + A.globalAlpha = e.opacity / 100, + A.font = e.italic + " " + e.bold + " " + e.size + "px " + e.family, + A.lineWidth = e.border, + A.textAlign = e.textAlign + }, + this.paint = function (A) { + var e = this.getOption(), + t = e.x, + i = e.y, + o = e.text; + A.save(), + this.setAttributes(A), + "string" == typeof o && (o = o.match(/[\n\r]/) ? o.split(/\r\n|\r|\n/g) : [o]); + for (var n = 0; o.length > n; n += 1) + A.fillText(o[n], t, i + e.size * n), + A.strokeText(o[n], t, i + e.size * n); + A.restore() + } + }).prototype = new m, + (v = function () { + this.name = "TextStroke", + this.paint = function (A) { + var e = this.getOption(), + t = e.x, + i = e.y, + o = e.text; + A.save(), + this.setAttributes(A), + A.strokeText(o, t, i), + A.restore() + } + }).prototype = new y, + (d = function () { + this.name = "ImageShape", + this.paint = function (A) { + var e = this.getOption(), + t = e.x, + i = e.y, + o = e.src, + n = e.width, + r = e.height, + a = new Image, + s = this; + a.src = o, + a.onload = function () { + A.save(), + s.setAttributes(A), + A.drawImage(a, t, i, n, r), + A.restore() + } + } + }).prototype = new m, + (i = i || {}).model = i.model || {}, + i.model.shapeModel = i.model.shapeModel || {}, + i.model.shapeModel.Line = p, + i.model.shapeModel.CurveClosed = o, + i.model.shapeModel.Rect = u, + i.model.shapeModel.Circle = A, + i.model.shapeModel.Pen = g, + i.model.shapeModel.CurveClosedStroke = n, + i.model.shapeModel.RectStroke = f, + i.model.shapeModel.CircleStroke = e, + i.model.shapeModel.Eraser = s, + i.model.shapeModel.FloodFill = h, + i.model.shapeModel.EyeDropper = l, + i.model.shapeModel.Cross = t, + i.model.shapeModel.Ellipes = r, + i.model.shapeModel.EllipesStroke = a, + i.model.shapeModel.Text = y, + i.model.shapeModel.TextStroke = v, + i.model.shapeModel.ImageShape = d + })(), + function () { + var A, e, t, o, n, r, a, s, l, c, h, d, p, g, u, f, m, C, y; + (y = function (A) { + this.name = "Tool", + this.className = "shape", + this.mouse = "Mouse", + this.option = { + strokeStyle: "#000", + fillStyle: "#000", + lineWidth: 1 + }, + void 0 !== A && uh.extend(!0, this.option, A) + }).prototype = { + getClassName: function () { + return this.className + }, + getName: function () { + return this.name + }, + setOption: function (A) { + return "object" === lc(A) ? (uh.extend(!0, this.option, A), + this.getOption()) : null + }, + getOption: function () { + return uh.extend(!0, {}, this.option) + }, + getMouse: function () { + return this.mouse + } + }, + (u = function () { + this.name = "Shape", + this.mouse = "Cross", + this.initAttributes = function () { + for (var A = document.querySelector("#tool-shape-attribute-panel"), e = A.querySelector(".width").value, t = A.querySelector(".opacity").value, i = document.querySelector("#tool-wrap .tool .color").value, o = A.querySelector(".shadow-offsetx").value, n = A.querySelector(".shadow-offsety").value, r = A.querySelector(".shadow-blur").value, a = A.querySelector(".shadow-color").value, s = A.getElementsByTagName("radio"), l = void 0, c = void 0, h = 0; s.length > h; h += 1) + "line-join" === s[h].name && (l = s[h].value), + "line-cap" === s[h].name && (c = s[h].value); + return this.setOption({ + lineWidth: e, + opacity: t, + strokeStyle: i, + fillStyle: i, + lineJoin: l, + lineCap: c, + shadowOffsetX: o, + shadowOffsetY: n, + shadowBlur: r, + shadowColor: a + }) + } + }).prototype = new y, + (h = function () { + this.name = "Line", + this.init = function () { + this.initAttributes() + }, + this.setPoint = function (A) { + var e = A.getStart(), + t = A.getEnd(); + return this.setOption({ + startX: e.x, + startY: e.y, + endX: t.x, + endY: t.y + }) + } + }).prototype = new u, + (o = function () { + this.name = "CurveClosed", + this.init = function () { + this.initAttributes() + }, + this.setPoint = function (A) { + var e = A.getList(); + return this.option.list = [], + this.setOption({ + list: e + }) + } + }).prototype = new u, + (p = function () { + this.name = "Rect", + this.init = function () { + this.initAttributes() + }, + this.setPoint = function (A) { + var e = A.getStart(), + t = A.getEnd(), + i = e.x, + o = e.y; + return this.setOption({ + left: i, + top: o, + width: t.x - i, + height: t.y - o + }) + } + }).prototype = new u, + (A = function () { + this.name = "Circle", + this.init = function () { + this.initAttributes() + }, + this.setPoint = function (A) { + var e = A.getStart(), + t = A.getEnd(), + i = (e.x + t.x) / 2, + o = (e.y + t.y) / 2, + n = Math.abs(Math.sqrt(Math.pow(e.x, 2) + Math.pow(e.y, 2)) - Math.sqrt(Math.pow(t.x, 2) + Math.pow(t.y, 2))) / 2; + return this.setOption({ + x: i, + y: o, + radius: n + }) + } + }).prototype = new u, + (r = function () { + this.name = "Ellipes", + this.init = function () { + this.initAttributes() + }, + this.setPoint = function (A) { + var e = A.getStart(), + t = A.getEnd(), + i = (e.x + t.x) / 2, + o = (e.y + t.y) / 2, + n = Math.abs(e.x - t.x), + r = Math.abs(e.y - t.y); + return this.setOption({ + x: i, + y: o, + width: n, + height: r + }) + } + }).prototype = new u, + (f = function () { + this.name = "Stroke", + this.mouse = "Cross", + this.initAttributes = function () { + for (var A = document.querySelector("#tool-stroke-attribute-panel"), e = A.querySelector(".width").value, t = A.querySelector(".opacity").value, i = document.querySelector("#tool-wrap .tool .color").value, o = A.querySelector(".shadow-offsetx").value, n = A.querySelector(".shadow-offsety").value, r = A.querySelector(".shadow-blur").value, a = A.querySelector(".shadow-color").value, s = A.getElementsByTagName("radio"), l = void 0, c = void 0, h = 0; s.length > h; h += 1) + "line-join" === s[h].name && (l = s[h].value), + "line-cap" === s[h].name && (c = s[h].value); + return this.setOption({ + lineWidth: e, + opacity: t, + strokeStyle: i, + lineJoin: l, + lineCap: c, + shadowOffsetX: o, + shadowOffsetY: n, + shadowBlur: r, + shadowColor: a + }) + } + }).prototype = new y, + (d = function () { + this.name = "Pen", + this.mouse = "Pen", + this.init = function () { + this.initAttributes() + }, + this.setPoint = function (A) { + var e = A.getList(); + return this.option.list = [], + this.setOption({ + list: e + }) + } + }).prototype = new f, + (n = function () { + this.name = "CurveClosedStroke", + this.mouse = "Cross" + }).prototype = new d, + (g = function () { + this.name = "RectStroke", + this.init = function () { + this.initAttributes() + }, + this.setPoint = function (A) { + var e = A.getStart(), + t = A.getEnd(), + i = e.x, + o = e.y; + return this.setOption({ + left: i, + top: o, + width: t.x - i, + height: t.y - o + }) + } + }).prototype = new f, + (e = function () { + this.name = "CircleStroke", + this.init = function () { + this.initAttributes() + }, + this.setPoint = function (A) { + var e = A.getStart(), + t = A.getEnd(), + i = (e.x + t.x) / 2, + o = (e.y + t.y) / 2, + n = Math.abs(Math.sqrt(Math.pow(e.x, 2) + Math.pow(e.y, 2)) - Math.sqrt(Math.pow(t.x, 2) + Math.pow(t.y, 2))) / 2; + return this.setOption({ + x: i, + y: o, + radius: n + }) + } + }).prototype = new f, + (a = function () { + this.name = "EllipesStroke", + this.init = function () { + this.initAttributes() + }, + this.setPoint = function (A) { + var e = A.getStart(), + t = A.getEnd(), + i = (e.x + t.x) / 2, + o = (e.y + t.y) / 2, + n = Math.abs(e.x - t.x), + r = Math.abs(e.y - t.y); + return this.setOption({ + x: i, + y: o, + width: n, + height: r + }) + } + }).prototype = new f, + (s = function () { + this.name = "Eraser", + this.mouse = "Eraser", + this.init = function () { + for (var A = document.querySelector("#tool-eraser-attribute-panel"), e = A.querySelector(".size") ? A.querySelector(".size").value : void 0, t = A.querySelector(".opacity") ? A.querySelector(".opacity").value : void 0, i = A.querySelector(".shadow-offsetx") ? A.querySelector(".shadow-offsetx").value : void 0, o = A.querySelector(".shadow-offsety") ? A.querySelector(".shadow-offsety").value : void 0, n = A.querySelector(".shadow-blur") ? A.querySelector(".shadow-blur").value : void 0, r = A.querySelector(".shadow-color") ? A.querySelector(".shadow-color").value : void 0, a = A.getElementsByTagName("radio"), s = void 0, l = void 0, c = 0; a.length > c; c += 1) + "line-join" === a[c].name && (s = a[c].value), + "line-cap" === a[c].name && (l = a[c].value); + return this.setOption({ + opacity: t, + lineWidth: e, + color: "#fff", + shadowOffsetX: i, + shadowOffsetY: o, + shadowBlur: n, + shadowColor: r, + lineJoin: s, + lineCap: l + }) + }, + this.setPoint = function (A) { + var e = A.getList(); + return this.option.list = [], + this.setOption({ + list: e + }) + } + }).prototype = new y, + (c = function () { + this.name = "FloodFill", + this.mouse = "FloodFill", + this.init = function () { + var A = document.querySelector("#tool-flood-fill-attribute-panel"), + e = document.querySelector("#tool-wrap .tool .color").value, + t = parseInt(A.querySelector(".allowance").value, 10), + o = i.canvas.currentCanvasContainer.getCanvas(), + n = o.getWidth(), + r = o.getHeight(); + return this.setOption({ + fillStyle: e, + width: n, + height: r, + allowance: t + }) + }, + this.setPoint = function (A) { + var e = A.getEnd(); + return this.setOption({ + x: e.x, + y: e.y + }) + } + }).prototype = new y, + (l = function () { + this.name = "EyeDropper", + this.mouse = "EyeDropper", + this.init = function () { + return this.setOption({}) + }, + this.setPoint = function (A) { + var e = A.getEnd(); + return this.setOption({ + x: e.x, + y: e.y + }) + } + }).prototype = new y, + (t = function () { + this.name = "Cross", + this.init = function () { + return this.setOption({ + lineWidth: 1, + strokeStyle: "#000000", + length: 10 + }) + }, + this.setPoint = function (A) { + var e = A.getEnd(); + return this.setOption({ + x: e.x, + y: e.y + }) + } + }).prototype = new y, + (m = function () { + this.name = "Text", + this.mouse = "Text", + this.init = function () { + this.initAttributes() + }, + this.initAttributes = function () { + var A = document.querySelector("#tool-text-attribute-panel"), + e = A.querySelector(".opacity").value, + t = A.querySelector(".text").value, + i = A.querySelector(".size").value, + o = A.querySelector(".border").value, + n = A.querySelector(".font").value, + r = document.querySelector("#tool-wrap .tool .color").value, + a = A.querySelector(".shadow-offsetx").value, + s = A.querySelector(".shadow-offsety").value, + l = A.querySelector(".shadow-blur").value, + c = A.querySelector(".shadow-color").value, + h = "checked" === A.querySelector(".bold").getAttribute("checked") ? "bold" : "", + d = "checked" === A.querySelector(".italic").getAttribute("checked") ? "italic" : ""; + return this.setOption({ + strokeStyle: r, + opacity: e, + fillStyle: r, + text: t, + size: i, + border: o, + family: n, + bold: h, + italic: d, + shadowOffsetX: a, + shadowOffsetY: s, + shadowBlur: l, + shadowColor: c + }) + }, + this.setPoint = function (A) { + var e = A.getStart(), + t = A.getEnd(), + i = e.x; + return this.setOption({ + x: i, + y: e.y, + textAlign: i > t.x ? "right" : "left" + }) + } + }).prototype = new y, + (C = function () { + this.name = "TextStroke" + }).prototype = new m, + (i = i || {}).model = i.model || {}, + i.model.toolModel = i.model.toolModel || {}, + i.model.toolModel.Line = h, + i.model.toolModel.CurveClosed = o, + i.model.toolModel.Rect = p, + i.model.toolModel.Circle = A, + i.model.toolModel.Pen = d, + i.model.toolModel.CurveClosedStroke = n, + i.model.toolModel.RectStroke = g, + i.model.toolModel.CircleStroke = e, + i.model.toolModel.Eraser = s, + i.model.toolModel.FloodFill = c, + i.model.toolModel.EyeDropper = l, + i.model.toolModel.Cross = t, + i.model.toolModel.Ellipes = r, + i.model.toolModel.EllipesStroke = a, + i.model.toolModel.Text = m, + i.model.toolModel.TextStroke = C + }(); + this.init = function () { + i.initImgDiv(), + i.initCanvas(), + i.initTitleDiv(), + i.initTool(), + i.initTopTool(), + i.Index.init(), + i.Nav.init(), + i.Tool.init(), + i.Canvas.init() + }, + this.initTool = function () { + xh.append(i.element, '
\n
\n
\n
\n \n \n \n \n \n \n
\n
\n
\n 属性\n \n \n
\n
\n 阴影\n \n \n \n \n
\n
\n
\n
\n
\n \n \n \n \n \n \n
\n
\n
\n 属性\n \n \n
\n
\n 阴影\n \n \n \n \n
\n
\n
\n
\n
\n
\n
\n
\n 属性\n \n \n
\n
\n
\n
\n
\n
\n
\n
\n 属性\n \n
\n
\n
\n
\n
\n \n \n
\n
\n \n
\n 属性\n \n \n \n \n \n \n
\n
\n 阴影\n \n \n \n \n
\n
\n
\n
\n
\n
\n
\n \n \n \n \n
\n
\n \n
\n
\n
\n
\n \n \n \n
\n
\n \n
\n
\n
') + }, + this.initCanvas = function () { + xh.append(i.element, '
\n \n \n \n \n
') + }, + this.initTopTool = function () { + xh.append(i.element, '
\n
\n \n \n \n \n
\n
'), + xh.addEventListener(document.querySelectorAll("#edit-exit"), "click", i.exit) + }, + this.initTitleDiv = function () { + xh.append(i.element, '
\n
文件编号-文件名-版本
\n
') + }, + this.initImgDiv = function () { + xh.append(i.element, ' '); + var A = document.querySelector("#myModal"); + xh.addEventListener(A.querySelector(".close"), "click", (function () { + xh.addClass(A, "hide"), + xh.remove(document.querySelector(".modal-backdrop")) + })), + xh.addEventListener(A.querySelector(".btn"), "click", (function () { + xh.addClass(A, "hide"), + xh.remove(document.querySelector(".modal-backdrop")) + })); + xh.append(i.element, ' '); + var e = document.querySelector("#image-modal"); + xh.addEventListener(e.querySelector(".close"), "click", (function () { + xh.addClass(e, "hide"), + xh.remove(document.querySelector(".modal-backdrop")) + })), + xh.addEventListener(e.querySelector(".but-cancel"), "click", (function () { + xh.addClass(e, "hide"), + xh.remove(document.querySelector(".modal-backdrop")) + })), + xh.addEventListener(e.querySelector(".btn-primary"), "click", (function () { + xh.addClass(e, "hide"), + xh.remove(document.querySelector(".modal-backdrop")) + })) + }, + this.setTitle = function (A) { + [].map.call(document.querySelectorAll(".titleText"), (function (e, t) { + e.textContent = A + })) + }, + this.getTitle = function () { + return document.querySelector(".titleText").textContent + }, + this.exit = function () { + i.hide(), + e.postilExit() + }, + this.hide = function () { + i.element.style.display = "none" + }, + this.show = function () { + i.element.style.display = "block" + }, + this.clear = function () { + i.canvas.mouseCanvasContainer.getCanvas().clear(), + i.canvas.bufferCanvasContainer.getCanvas().clear(), + i.canvas.currentCanvasContainer.getCanvas().clear(), + i.canvas.negativeCanvasContainer.getCanvas().clear(), + i.change = !1 + }, + this.updateSize = function (A, e) { + i.canvas.currentCanvasContainer.getCanvas().updateSize(A, e), + i.canvas.bufferCanvasContainer.getCanvas().updateSize(A, e), + i.canvas.mouseCanvasContainer.getCanvas().updateSize(A, e), + i.canvas.negativeCanvasContainer.getCanvas().updateSize(A, e) + }, + this.bindEvent = function () {}, + this.getCoordsWithinElement = function (A) { + var e = [0, 0]; + if (A) { + for (var t = A.target, i = 0, o = 0; t.offsetParent;) + i += t.offsetLeft - t.scrollLeft, + o += t.offsetTop - t.scrollTop, + t = t.offsetParent; + e[0] = Math.round(A.pageX - i), + e[1] = Math.round(A.pageY - o) + } else + A = window.event, + e[0] = Math.round(A.x), + e[0] = Math.round(A.y); + return e + }, + this.Index = { + init: function () { + this.bindEvent() + }, + bindEvent: function () { + var A = i.element, + e = null, + t = null; + xh.bind(A, "keydown", (function (A) { + A.ctrlKey && 90 === A.keyCode && (xh.simulateEvent(document.querySelector("#nav-edit-undo"), "click"), + A.preventDefault()) + })), + xh.bind(A, "keydown", (function (A) { + A.ctrlKey && 83 === A.keyCode && (xh.simulateEvent(document.querySelector("#nav-file-save"), "click"), + A.preventDefault()) + })), + xh.bind(A, "keydown", (function (A) { + A.ctrlKey && 68 === A.keyCode && (xh.simulateEvent(document.querySelector("#nav-edit-clear"), "click"), + A.preventDefault()) + })), + xh.bind(A, "keydown", (function (A) { + A.ctrlKey && 69 === A.keyCode && (xh.simulateEvent(document.querySelector("#nav-file-export"), "click"), + A.preventDefault()) + })), + xh.bind(document, "resize", (function (A) { + var e = i.canvas, + t = e.currentCanvasContainer.getCanvas(), + o = e.bufferCanvasContainer.getCanvas(), + n = e.mouseCanvasContainer.getCanvas(), + r = i.canvas.negativeCanvasContainer.getCanvas(); + t.updateSize(), + o.updateSize(), + n.updateSize(), + r.updateSize() + })), + xh.delegate(i.element, "#negative-modal-file", "change", (function (A) { + var t = A.target.files, + i = new FileReader; + i.readAsDataURL(t[0]), + i.onload = function () { + var A = document.querySelector("#negative-modal").querySelector("#negative-modal-view"); + e = i.result, + A.setAttribute("src", i.result), + xh.bind(A, "load", (function () { + var A = document.querySelector("#negative-modal"), + e = A.querySelector("#negative-modal-width"), + t = A.querySelector("#negative-modal-height"); + e.value = parseInt(xh.getStyleValue(this, "width"), 0), + t.value = parseInt(xh.getStyleValue(this, "height"), 0) + })) + } + })), + xh.delegate(i.element, "#negative-modal-ok", "click", (function (A) { + var t = i.canvas.negativeCanvasContainer.getCanvas(), + o = new i.model.shapeModel.ImageShape, + n = document.querySelector("#negative-modal"), + r = n.querySelector("#negative-modal-x").value, + a = n.querySelector("#negative-modal-y").value, + s = parseInt(n.querySelector("#negative-modal-width").value, 0), + l = parseInt(n.querySelector("#negative-modal-height").value, 0); + o.init({ + x: r, + y: a, + width: s, + height: l, + src: e + }), + t.paint(o) + })), + xh.delegate(i.element, "#image-modal-file", "change", (function (A) { + var e = A.target.files, + i = new FileReader; + i.readAsDataURL(e[0]), + i.onload = function () { + var A = document.querySelector("#image-modal").querySelector("#image-modal-view"); + t = i.result, + A.setAttribute("src", i.result), + xh.bind(A, "load", (function () { + var A = document.querySelector("#image-modal"), + e = A.querySelector("#image-modal-width"), + t = A.querySelector("#image-modal-height"); + e.value = parseInt(xh.getStyleValue(this, "width"), 0), + t.value = parseInt(xh.getStyleValue(this, "height"), 0) + })) + } + })), + xh.delegate(i.element, "#image-modal-ok", "click", (function (A) { + var e = i.canvas.currentCanvasContainer.getCanvas(), + o = new i.model.shapeModel.ImageShape, + n = document.querySelector("#image-modal"), + r = n.querySelector("#image-modal-x").value, + a = n.querySelector("#image-modal-y").value, + s = parseInt(n.querySelector("#image-modal-width").value, 0), + l = parseInt(n.querySelector("#image-modal-height").value, 0); + o.init({ + x: r, + y: a, + width: s, + height: l, + src: t + }), + e.paint(o) + })) + } + }, + this.Canvas = { + clickStatus: !1, + pointList: Object.create(n), + getPointList: function () { + return this.pointList + }, + getClickStatus: function () { + return this.clickStatus + }, + setClickStatus: function (A) { + return this.clickStatus = A = A || !1, + A + }, + init: function () { + var A = document.querySelectorAll(".canvas-negative")[0], + e = new s, + t = Object.create(a), + o = document.querySelectorAll(".canvas-layer")[0], + n = new s, + r = Object.create(a), + l = document.querySelectorAll(".canvas-buffer")[0], + c = new s, + h = Object.create(a), + d = document.querySelectorAll(".canvas-mouse")[0], + p = new s, + g = Object.create(a); + e.init(A, "negativeCanvas"), + t.init(e), + i.canvas = i.canvas || {}, + i.canvas.negativeCanvasContainer = t, + n.init(o, "currentCanvas"), + r.init(n), + i.canvas = i.canvas || {}, + i.canvas.currentCanvasContainer = r, + c.init(l, "bufferCanvas"), + h.init(c), + i.canvas = i.canvas || {}, + i.canvas.bufferCanvasContainer = h, + p.init(d, "mouseCanvas"), + g.init(p), + i.canvas = i.canvas || {}, + i.canvas.mouseCanvasContainer = g, + this.bindEvent() + }, + bindEvent: function () { + var A = i.element, + e = i.canvas.mouseCanvasContainer.getCanvas(), + t = i.canvas.bufferCanvasContainer.getCanvas(), + o = i.canvas.currentCanvasContainer.getCanvas(), + n = e.getLeft(), + r = e.getTop(), + a = this, + s = i.tool.currentToolContainer.getTool(); + xh.delegate(A, "#canvas-mouse", "mousemove", (function (A) { + var o = i.getCoordsWithinElement(A), + n = null, + r = null, + l = "", + c = null, + h = null, + d = a.getClickStatus(), + p = "", + g = null, + u = null; + "shape" === s.getClassName() && (n = { + x: o[0], + y: o[1] + }, + p = s.getMouse(), + g = s.getOption(), + (u = new i.model.mouseModel[p]).init(g, n), + e.clear(), + e.paint(u), + d && (l = s.getName(), + (r = a.getPointList()).add(n), + h = s.setPoint(r), + "FloodFill" !== (c = new i.model.shapeModel[l]).getName() && (c.init(h), + t.clear(), + t.paint(c)))) + })), + xh.delegate(A, "#canvas-mouse", "mousedown", (function (A) { + var e = i.getCoordsWithinElement(A), + t = { + x: e[0], + y: e[1] + }; + a.getPointList(); + a.getPointList().init(), + a.getPointList().add(t), + a.setClickStatus(!0) + })), + xh.delegate(A, "#canvas-mouse", "mouseup", (function (A) { + var e = i.getCoordsWithinElement(A), + n = { + x: e[0], + y: e[1] + }, + r = a.getPointList(), + l = s.getName(), + c = null, + h = null; + "shape" === s.getClassName() && (a.getPointList().add(n), + a.setClickStatus(!1), + c = new i.model.shapeModel[l], + h = s.setPoint(r), + c.init(h), + o.paint(c), + t.clear()) + })), + xh.delegate(A, "#canvas-mouse", "mouseleave", (function (A) { + e.clear() + })), + xh.delegate(A, "#canvas-mouse", "mouseenter", (function (A) { + e.clear(), + s = i.tool.currentToolContainer.getTool() + })), + document.getElementById("canvas-mouse").addEventListener("touchmove", (function (A) { + var o = null, + l = null, + c = "", + h = null, + d = null, + p = a.getClickStatus(), + g = "", + u = null, + f = null, + m = s.getClassName(), + C = A.changedTouches[0]; + A.preventDefault(), + "shape" === m && (o = { + x: C.pageX - n, + y: C.pageY - r + }, + g = s.getMouse(), + u = s.getOption(), + (f = new i.model.mouseModel[g]).init(u, o), + e.clear(), + e.paint(f), + p && (c = s.getName(), + (l = a.getPointList()).add(o), + d = s.setPoint(l), + (h = new i.model.shapeModel[c]).init(d), + t.clear(), + t.paint(h))) + }), !1), + document.getElementById("canvas-mouse").addEventListener("touchstart", (function (A) { + var e = A.touches[0], + t = { + x: e.pageX - n, + y: e.pageY - r + }; + a.getPointList(); + A.preventDefault(), + a.getPointList().init(), + a.getPointList().add(t), + a.setClickStatus(!0) + }), !1), + document.getElementById("canvas-mouse").addEventListener("touchend", (function (A) { + var e = A.changedTouches[0], + l = { + x: e.pageX - n, + y: e.pageY - r + }, + c = a.getPointList(), + h = s.getName(), + d = null, + p = null, + g = s.getClassName(); + A.preventDefault(), + "shape" === g && (a.getPointList().add(l), + a.setClickStatus(!1), + d = new i.model.shapeModel[h], + p = s.setPoint(c), + d.init(p), + o.paint(d), + t.clear()) + }), !1) + } + }, + this.Nav = { + init: function () { + this.bindEvent() + }, + bindEvent: function () { + var A = i.element; + xh.delegate(A, "#nav-file-export", "click", (function (e) { + var t = i.canvas.currentCanvasContainer.getCanvas(), + o = i.canvas.negativeCanvasContainer.getCanvas(), + n = document.createElement("canvas"); + n.width = t.width, + n.height = t.height; + var r = n.getContext("2d"); + r.drawImage(o.getCanvas(), 0, 0), + r.drawImage(t.getCanvas(), 0, 0), + document.querySelectorAll("#save-image")[0].src = n.toDataURL(), + xh.append(A, ""), + [].map.call(document.querySelectorAll("#myModal"), (function (A, e) { + xh.removeClass(A, "hide") + })) + })), + xh.delegate(A, "#nav-file-saveAs", "click", (function (e) { + var t = i.canvas.currentCanvasContainer.getCanvas(), + o = i.canvas.negativeCanvasContainer.getCanvas(), + n = document.createElement("canvas"); + n.width = t.width, + n.height = t.height; + var r = n.getContext("2d"); + r.drawImage(o.getCanvas(), 0, 0), + r.drawImage(t.getCanvas(), 0, 0), + document.querySelectorAll("#save-image")[0].src = n.toDataURL(), + xh.append(A, ""), + [].map.call(document.querySelectorAll("#myModal"), (function (A, e) { + xh.removeClass(A, "hide") + })) + })), + xh.delegate(A, "#nav-file-save", "click", (function (A) { + var t = i.canvas.currentCanvasContainer.getCanvas(), + o = i.canvas.negativeCanvasContainer.getCanvas(); + t.save(), + o.save(); + var n = i.lobibox.alert("success", { + msg: "保存成功", + title: "保存", + backdrop: !0, + buttons: { + yes: { + closeOnClick: !1, + text: "关闭" + } + }, + callback: function (A, t) { + A.destroy(), + e.postilSave() + } + }), + r = (new Date).getTime() - i.lobibox.alert.startTime; + n.$el.style.zIndex = r + 2 + })), + xh.delegate(A, "#nav-file-open", "click", (function (e) { + xh.append(A, ""), + [].map.call(document.querySelectorAll("#image-modal"), (function (A, e) { + xh.removeClass(A, "hide") + })) + })), + xh.delegate(A, "#nav-file-import-img", "click", (function (e) { + xh.append(A, ""), + [].map.call(document.querySelectorAll("#image-modal"), (function (A, e) { + xh.removeClass(A, "hide") + })) + })), + xh.delegate(A, "#nav-edit-undo", "click", (function (A) { + i.canvas.currentCanvasContainer.getCanvas().undo(), + e.undo() + })), + xh.delegate(A, "#nav-edit-clear", "click", (function (A) { + i.canvas.currentCanvasContainer.getCanvas().clear() + })), + xh.delegate(A, "#nav-edit-clear-negative", "click", (function (A) { + i.canvas.negativeCanvasContainer.getCanvas().clear() + })), + xh.delegate(A, "#nav-edit-convert", "click", (function (A) { + i.canvas.currentCanvasContainer.getCanvas().convert() + })), + xh.delegate(A, "#nav-edit-flipx", "click", (function (A) { + i.canvas.currentCanvasContainer.getCanvas().flipX() + })), + xh.delegate(A, "#nav-edit-flipy", "click", (function (A) { + i.canvas.currentCanvasContainer.getCanvas().flipY() + })) + } + }; + var r; + (r = function () { + this.currentOpenAttributePanel = null, + this.colorPicker = void 0, + this.attributePanelWindow = void 0 + }).prototype = { + init: function () { + this.bindEvent(), + this.initAttributePanel(), + this.initColor(), + i.tool = i.tool || {}, + i.tool.currentToolContainer = Object.create(i.model.ToolContainerModel), + i.tool.currentToolContainer.init(new i.model.toolModel.Line) + }, + initAttributePanel: function () { + document.querySelector("#tool-wrap"); + var A = document.querySelector("#tool-shape-attribute-panel"), + e = document.createElement("div"); + e.className = "tool-attribute-panel-content", + this.attributePanelWindow = i.lobibox.window({ + title: "属性面板", + width: 334, + height: 415, + closeOnEsc: !1, + closeButton: !0, + afterWindowHide: function (A) {}, + content: e + }), + this.attributePanelWindow.setPosition({ + left: "", + right: 35, + bottom: 120 + }), + this.attributePanelWindow.windowHide(); + var t = document.querySelectorAll(".tool-attribute-panel"); + [].map.call(t, (function (A, t) { + A.style.display = "none", + e.appendChild(A) + })), + this.setCurrentAttributePanel(A), + this.openAttributePanel(A) + }, + initColor: function () { + var A = document.querySelector("#tool-wrap .tool .color"); + this.colorPicker = new Hh(A), + A.style.display = "none"; + var e = A.parentNode; + xh.append(e, '
'); + var t = e.querySelector("#colorOperatorDiv"), + i = this.colorPicker.element; + i.id = "toolColorModal", + i.className = "colorModal", + i.style.cssText += "margin-left:" + t.offsetLeft + "px;bottom:50px", + t.addEventListener("click", (function (A) { + i.focus(), + i.style.display = "block" === i.style.display ? "none" : "block", + A.stopPropagation ? A.stopPropagation() : A.cancelBubble = !0 + })), + document.addEventListener("click", (function (A) {})), + xh.addEventListener(A, "change", (function (e) { + xh.css(t, { + "background-color": A.value + }) + })), + A.parentNode.parentNode.appendChild(i) + }, + openAttributePanel: function (A) { + document.querySelector("#tool-wrap"), + document.querySelector(".tool-attribute-panel-content"); + var e = document.querySelectorAll(".tool-attribute-panel"), + t = A || this.getCurrentAttributePanel(); + t && ([].map.call(e, (function (A, e) { + A.style.display = A.id == t.id ? "block" : "none" + })), + this.attributePanelWindow.windowShow()) + }, + getCurrentAttributePanel: function () { + return this.currentOpenAttributePanel + }, + setCurrentAttributePanel: function (A) { + return void 0 !== A && (this.currentOpenAttributePanel = A, + !0) + }, + bindEvent: function () { + var A = document.querySelector("#tool-wrap"), + e = this; + xh.delegate(A.querySelector(".tool"), "button", "click", (function (A) { + if ("nav-file-import-img" === this.id) + e.attributePanelWindow.$el.style.zIndex = 888; + else { + var t = document.querySelector("#tool-wrap"), + o = this.getAttribute("data-tool-panel"), + n = t.querySelector(".tool-panel ." + o), + r = t.querySelectorAll(".tool-panel .wrap"), + a = document.querySelector("#tool-" + o + "-attribute-panel"), + s = this.getAttribute("data-current-tool"); + [].map.call(t.querySelectorAll(".tool button.active"), (function (A, e) { + xh.removeClass(A, "active") + })), + xh.addClass(this, "active"); + for (var l = 0; r.length > l; l += 1) + r[l].style.display = "none"; + if (n && (n.style.display = "block"), + a) { + var c = a.getAttribute("title") ? a.getAttribute("title") : "属性面板"; + i.Tool.attributePanelWindow.setTitle(c) + } + if (e.setCurrentAttributePanel(a), + e.openAttributePanel(a), + !s) + return; - + 1 === s.indexOf("Arrow") ? i.tool.currentToolContainer.init(new i.model.toolModel[s]) : console.log("currentTool: 箭头没有原型类实现") + } + })), + xh.delegate(A.querySelectorAll(".tool-panel .wrap"), "button", "click", (function (A) { + var e = this.getAttribute("data-tool"), + t = this.getAttribute("data-tool-class"), + i = document.querySelector("#tool-wrap .tool button[data-tool-panel='" + e + "']"); + i.setAttribute("data-current-tool", t), + xh.simulateEvent(i, "click") + })), + xh.delegate(A, ".color", "change", (function (A) { + var e = this.value; + i.tool.currentToolContainer.getTool().setOption({ + fillStyle: e, + strokeStyle: e + }) + })), + xh.delegate(document.querySelectorAll(".tool-attribute-panel"), "select", "change", (function (A) { + var e = A.target, + t = e.getAttribute("data-attr"), + o = e.value, + n = i.tool.currentToolContainer.getTool(), + r = {}; + r[t] = o, + n.setOption(r) + })), + [].map.call(i.element.querySelectorAll("input"), (function (A, e) { + var t = A.getAttribute("type"); + "checkbox" !== t && "radio" !== t && xh.addEventListener(A, "change", (function (A) { + var e = A.target, + t = e.getAttribute("data-attr"), + o = e.value, + n = i.tool.currentToolContainer.getTool(), + r = {}, + a = e.parentNode.querySelector("span"); + a && (a.textContent = o), + r[t] = o, + n.setOption(r) + })) + })), + [].map.call(i.element.querySelectorAll(".tool-attribute-panel input"), (function (A, e) { + "checkbox" === A.getAttribute("type") && xh.addEventListener(A, "change", (function (A) { + var e = A.target, + t = e.getAttribute("data-attr"), + o = e.value, + n = e.getAttribute("checked"), + r = i.tool.currentToolContainer.getTool(), + a = {}; + a[t] = !0 === n ? o : "", + r.setOption(a), + window.console.log(n) + })) + })), + [].map.call(i.element.querySelectorAll(".tool-attribute-panel input"), (function (A, e) { + "radio" === A.getAttribute("type") && xh.addEventListener(A, "change", (function (A) { + var e = A.target, + t = e.attr("data-attr"), + o = e.val(), + n = i.tool.currentToolContainer.getTool(), + r = {}; + r[t] = o, + n.setOption(r) + })) + })) + } + }, + this.Tool = new r; + var a = { + canvas: null, + init: function (A) { + this.setCanvas(A) + }, + setCanvas: function (A) { + return this.canvas = A, + !0 + }, + getCanvas: function () { + return this.canvas + } + }; + i.model = i.model || {}, + i.model.CanvasContainerModel = a; + var s = function () { + this.canvas = null, + this.documentName = "", + this.pictureName = "", + this.name = "Canvas", + this.shapeList = [], + this.convertStatus = "source-over", + this.flipXStatus = !1, + this.flipYStatus = !1, + this.width = 1e3, + this.height = 400, + this.context2D = null, + this.top = 0, + this.left = 0 + }; + s.prototype = { + init: function (A, e) { + this.initCanvas(A), + this.initHeight(), + this.initWidth(), + this.initLeft(), + this.initTop(), + this.initContext2D(), + this.initName(e), + this.load() + }, + initName: function (A) { + this.setName(A) + }, + setName: function (A) { + this.name = A + }, + setDocumentName: function (A) { + this.documentName = A + }, + setPictureName: function (A) { + this.pictureName = A + }, + getDocumentName: function () { + return this.documentName + }, + getPictureName: function () { + return this.pictureName + }, + getName: function () { + return this.name + }, + initCanvas: function (A) { + this.setCanvas(A) + }, + setCanvas: function (A) { + return null != A && (this.canvas = A, + !0) + }, + getCanvas: function () { + return this.canvas + }, + initContext2D: function () { + this.setContext2D() + }, + getContext2D: function () { + return this.context2D + }, + setContext2D: function (A) { + A = A || this.getCanvas().getContext("2d"), + this.context2D = A + }, + clearContext: function () { + var A = this.getHeight(), + e = this.getWidth(), + t = this.getContext2D(); + return t.clearRect(0, 0, e, A), + t + }, + initLeft: function () { + this.updateLeft() + }, + updateLeft: function () { + var A; + return A = function (A) { + for (var e = A.offsetLeft, t = A.offsetParent; null !== t;) + e += t.offsetLeft, + t = t.offsetParent; + return e + }(this.getCanvas()), + this.left = A, + A + }, + getLeft: function () { + return this.left + }, + initTop: function () { + this.updateTop() + }, + updateTop: function () { + var A; + return A = function (A) { + for (var e = A.offsetTop, t = A.offsetParent; null !== t;) + e += t.offsetTop, + t = t.offsetParent; + return e + }(this.getCanvas()), + this.top = A, + A + }, + getTop: function () { + return this.top + }, + updateSize: function (A, e) { + this.updateHeight(e), + this.updateWidth(A), + this.repaint() + }, + initHeight: function () { + this.updateHeight() + }, + updateHeight: function (A) { + var e = this.getCanvas(), + t = parseInt(xh.getStyleValue(e.parentNode, "height")); + return A && (t = A), + e.setAttribute("height", t), + this.setHeight(t) + }, + setHeight: function (A) { + return this.height = A = A || 600, + A + }, + getHeight: function () { + return this.height + }, + initWidth: function () { + this.updateWidth() + }, + updateWidth: function (A) { + var e = this.getCanvas(), + t = parseInt(xh.getStyleValue(e.parentNode, "width")); + return A && (t = A), + e.setAttribute("width", t), + this.setWidth(t) + }, + setWidth: function (A) { + return this.width = A = A || 600, + this.width + }, + getWidth: function () { + return this.width + }, + initShapeList: function () { + this.clearShapeList() + }, + getShapeList: function () { + return uh.extend(!0, [], this.shapeList) + }, + setShapeList: function (A) { + return this.clearShapeList(), + uh.extend(!0, this.shapeList, A), + A + }, + addShape: function (A) { + this.shapeList.push(A) + }, + deleteShape: function () { + this.shapeList.pop() + }, + clearShapeList: function () { + this.shapeList = [] + }, + paint: function (A) { + this.addShape(A), + A.paint(this.getContext2D()), + "negativeCanvas" != this.name && "currentCanvas" != this.name || (i.change = !0) + }, + repaint: function () { + var A, e = this.shapeList, + t = e.length, + o = 0; + for (A = this.clearContext(); t > o; o += 1) + e[o].paint(A); + t > 0 && ("negativeCanvas" != this.name && "currentCanvas" != this.name || (i.change = !0)) + }, + undo: function () { + this.deleteShape(), + this.repaint() + }, + clear: function () { + this.clearContext(), + this.clearShapeList() + }, + convert: function () { + var A = this.getContext2D(), + e = A.globalCompositeOperation, + t = "source-over" === this.convertStatus ? "destination-over" : "source-over"; + this.convertStatus = t, + A.globalCompositeOperation = t, + this.repaint(), + A.globalCompositeOperation = e + }, + save: function (A) { + var e = new i.model.StorageModel, + t = [], + o = this.shapeList, + n = o.length, + r = 0, + a = this.getName(), + s = ""; + if (a = a + "-" + this.getDocumentName() + "-" + this.getPictureName(), + null != A && (a = A), + e.init(), + !1 !== e.getStorage()) { + for (; n > r; r += 1) + t[r] = { + name: o[r].getName(), + option: o[r].getOption() + }; + s = window.JSON.stringify(t), + e.save(a, s) + } + }, + load: function (A) { + var e, t, o = new i.model.StorageModel, + n = [], + r = 0, + a = this.getName(), + s = this.getDocumentName(), + l = this.getPictureName(), + c = this.shapeList; + if (a = a + "-" + s + "-" + l, + null != A && (a = A), + o.init(), + !1 !== o.getStorage()) { + for (t = o.load(a) || "[]", + e = (n = window.JSON.parse(t)).length; e > r; r += 1) + c[r] = new i.model.shapeModel[n[r].name], + c[r].init(n[r].option); + this.repaint() + } + }, + autoSave: function (A) { + var e = this; + window.setInterval((function () { + e.save() + }), A) + }, + flipX: function () { + var A = this.getContext2D(), + e = this.getWidth(); + A.save(), + this.flipXStatus ? this.flipXStatus = !1 : (this.flipXStatus = !0, + A.translate(e, 0), + A.scale(-1, 1)), + this.repaint(), + A.restore() + }, + flipY: function () { + var A = this.getContext2D(), + e = this.getHeight(); + A.save(), + this.flipYStatus ? this.flipYStatus = !1 : (this.flipYStatus = !0, + A.translate(0, e), + A.scale(1, -1)), + this.repaint(), + A.restore() + } + }, + i.model = i.model || {}, + i.model.CanvasModel = s; + (i = i || {}).model = i.model || {}, + i.model.ToolContainerModel = { + tool: null, + init: function (A) { + A.init(), + this.setTool(A) + }, + setTool: function (A) { + return this.tool = A, + !0 + }, + getTool: function () { + return this.tool + } + } + }, + Jd = function (A, e) { + var t = A.toolId, + i = A.Flag, + o = A.viewer, + n = e.toolbarTop, + r = this; + r.viewer = o, + r.postilInfo = {}, + this.editingPostilObj = void 0, + this.editingNodeDom = void 0, + this.postilDelConf = !0, + this.eventDispatcher = new Ld; + var a = 0; + this.deleteListener = null, + this.addListener = null, + this.renameListener = null, + this.updateListener = null, + this.exitListener = null, + this.saveListener = null, + this.openListener = null, + this.restoreToPostilListener = null; + var s = document.createElement("div"); + s.className = "postil-content", + xh.append(s, '
'), + r.postilWindow = qd.window({ + title: "批注", + width: 334, + height: 688, + closeOnEsc: !1, + closeButton: !0, + afterWindowHide: function () { + var A = document.getElementById("postil" + t); + i.postil = !1, + A && (A.style.backgroundColor = "", + A.querySelector(".yj-icon").className = "yj-icon postil-icon") + }, + content: s + }), + r.postilWindow.setPosition({ + left: "", + right: 5, + top: 60 + }), + r.postilWindow.windowHide(), + xh.addEventListener(n.querySelector("#postil" + t), "click", (function (A) { + if (i.postil) + A.target.parentNode.style.backgroundColor = "", + A.target.className = "yj-icon postil-icon active", + r.postilWindow.windowHide(); + else { + r.load([]), + i.postil = !i.postil, + r.postilWindow.windowShow(); + var e = o.viewerImpl.modelManager.sceneState; + A.target.parentNode.style.backgroundColor = "#1f89de", + A.target.className = "yj-icon postil-icon active", + e.getSelection() + } + })), + xh.append(document.querySelector("body"), '
'), + document.querySelector("#postilEdit" + t).style.display = "none", + this.edit = new Wd("postilEdit" + t, this, o, t), + r.edit.init(), + xh.addEventListener(r.postilWindow.$el.querySelector(".postil-body"), "click", (function (A) { + switch (A.target.className) { + case "postil-node-delete": + r.postilDelete(A); + break; + case "postil-node-img": + r.postilflyto(A); + break; + case "postil-node-button-update": + r.postilUpdate(A); + break; + case "postil-node-button-edit": + r.postilEdit(A) + } + })), + xh.addEventListener(r.postilWindow.$el.querySelector(".postil-body"), "dblclick", (function (A) { + switch (A.target.className) { + case "postil-node-name": + r.postilRename(A) + } + })), + this.makePostils = function () { + var A, e, t, i, n, r = o.viewerImpl.modelManager.getModelSnapshotPhoto(); + A = r.imgURL; + var s = r.width, + l = r.height, + c = o.viewerImpl.getSceneState(); + e = c.camera, + t = c.state, + i = c.selection.concat(), + n = c.modelSelection.concat(); + var h = a; + return a += 1, { + cameraState: e, + componentState: t, + highlightComponentsKeys: i, + highlightModelsKeys: n, + imageURL: A, + width: s, + height: l, + num: h, + code: (new Date).getTime().toString(), + name: "批注" + h + } + }, + this.clear = function () { + [].map.call(r.postilWindow.$el.querySelectorAll(".postil .postil-body"), (function (A, e) { + A.innerHTML = "" + })), + r.postilInfo = {}, + r.postilDelConf = !0 + }, + this.load = function (A) { + Array.isArray(A) && A.forEach((function (A) { + r.add(A) + })) + }, + xh.addEventListener(r.postilWindow.$el.querySelector("#postilAdd" + t), "click", (function (A) { + var e = r.makePostils(); + "function" == typeof r.addListener ? r.addListener(e, (function (A, t) { + A && r.add(t || e) + })) : r.add(e) + })), + this.add = function (A) { + var e = A.imageURL, + t = A.width, + i = A.height, + o = A.code, + n = A.name, + a = A.num; + if (A.cameraState && A.componentState && e && o && t && i) { + for (var s = r.postilWindow.$el.querySelectorAll(".postil-node"), l = 0; s.length > l; l += 1) + xh.css(s[l], { + border: "2px" + }); + var c = '
' + n + '×
'; + [].map.call(r.postilWindow.$el.querySelectorAll(".postil-body"), (function (A, e) { + xh.append(A, c) + })), + r.postilInfo[o] = A + } + }, + this.postilEdit = function (A) { + var e = document.querySelector("#postilEdit" + t); + e.style.display = "block", + e.style.height = r.viewer.viewerImpl.getDomElement().style.height, + e.style.width = r.viewer.viewerImpl.getDomElement().style.width; + var i = A.target.parentNode.parentNode.parentNode.getAttribute("imgid"); + "function" == typeof r.openListener ? r.openListener(i, (function (A) { + A && r.open(i) + })) : r.open(i) + }, + this.open = function (A) { + document.querySelector("#postilEdit" + t).style.display = "block"; + var e = r.postilWindow.$el.querySelector("div[imgid='" + A + "']"); + if (e) { + this.editingNodeDom = e; + var i = e.querySelector(".postil-node-name").textContent; + r.editingPostilObj = r.postilInfo[A], + r.edit.setTitle(i), + xh.showOrHideElement(o.viewport, !1), + r.edit.canvas.currentCanvasContainer.getCanvas().setDocumentName(A), + r.edit.canvas.currentCanvasContainer.getCanvas().setPictureName(A), + r.edit.canvas.negativeCanvasContainer.getCanvas().setDocumentName(A), + r.edit.canvas.negativeCanvasContainer.getCanvas().setPictureName(A); + var n = r.edit.canvas.negativeCanvasContainer.getCanvas(), + a = new r.edit.model.shapeModel.ImageShape, + s = e.children[1].children[0].naturalWidth, + l = e.children[1].children[0].naturalHeight; + a.init({ + x: 0, + y: 0, + width: s, + height: l, + src: e.children[1].children[0].src + }), + r.edit.clear(), + n.paint(a), + r.edit.updateSize(s, l) + } + }, + this.postilUpdate = function (A) { + var e = A.target.parentNode.parentNode.parentNode.getAttribute("imgid"), + t = r.makePostils(); + "function" == typeof r.updateListener ? r.updateListener(e, t, (function (A, i, o) { + A && r.update(i || e, o || t) + })) : r.update(e, t) + }, + this.update = function (A, e) { + var t = r.postilInfo[A]; + t && (t.cameraState = e.cameraState, + t.componentState = e.componentState, + t.highlightComponentsKeys = e.highlightComponentsKeys, + t.highlightModelsKeys = e.highlightModelsKeys, + t.imageURL = e.imageURL); + var i = r.postilWindow.$el.querySelector("div[imgid='" + A + "']"); + if (i) { + var o = i.querySelector(".postil-node-img"); + o && (o.src = e.imageURL) + } + }, + this.postilDelete = function (A) { + var e = A.target.parentNode.parentNode.getAttribute("imgid"); + if (r.postilDelConf) { + var t = qd.alert("info", { + msg: "删除不可恢复,确认删除?", + title: "删除确认", + backdrop: !0, + buttons: { + yes: { + closeOnClick: !1, + text: "删除并不再提示" + }, + no: { + closeOnClick: !1, + text: "删除" + } + }, + callback: function (A, t) { + "no" !== t && "yes" !== t || ("yes" === t && (r.postilDelConf = !1), + "function" == typeof r.deleteListener ? r.deleteListener(e, (function (A) { + A && r.delete(e) + })) : r.delete(e)), + A.destroy() + } + }), + i = (new Date).getTime() - qd.window.startTime; + [].map.call(r.postilWindow.$el.querySelectorAll(".lobibox-backdrop"), (function (A, e) { + xh.css(A, { + "z-index": i + }) + })), + t.$el.style.zIndex = i + 2 + } else + "function" == typeof r.deleteListener ? r.deleteListener(e, (function (A) { + A && r.delete(e) + })) : r.delete(e) + }, + this.delete = function (A) { + var e = r.postilWindow.$el.querySelector("div[imgid='" + A + "']"); + e && e.remove(), + delete r.postilInfo[A] + }, + this.postilRename = function (A) { + o.viewerImpl.cameraControl.enabled = !1; + var e = A.target, + t = e.parentNode.parentNode.getAttribute("imgid"), + i = e.innerText, + n = document.createElement("input"); + n.type = "text", + n.value = i, + e.innerText = "", + xh.append(e, n), + n.focus(), + n.select(), + n.addEventListener("blur", (function (A) { + var e = A.target; + e.removeEventListener("blur", (function () {})), + e.value !== i && "" !== xh.trim(e.value) ? "function" == typeof r.renameListener ? r.renameListener(t, e.value, (function (A, o) { + A ? r.rename(t, o || e.value) : e.parentNode.innerText = i + })) : r.rename(t, e.value) : e.parentNode.innerText = i, + n.remove(), + o.viewerImpl.cameraControl.enabled = !0 + })) + }, + this.rename = function (A, e) { + var t = r.postilWindow.$el.querySelector("div[imgid='" + A + "']"); + if (t) { + var i = t.querySelector(".postil-node-name"); + i && (i.innerText = e) + } + r.postilInfo[A].name = e + }, + this.postilflyto = function (A) { + for (var e = r.postilWindow.$el.querySelectorAll(".postil-node"), t = 0; e.length > t; t += 1) + xh.css(e[t], { + border: "2px" + }); + var i = A.target.parentNode.parentNode.getAttribute("code"); + "function" == typeof r.restoreToPostilListener ? r.restoreToPostilListener(i, (function (A) { + r.restoreToPostil(i) + })) : r.restoreToPostil(i) + }, + this.restoreToPostil = function (A) { + var e = r.postilInfo[A]; + if (e) { + o.viewerImpl.setSceneState({ + camera: e.cameraState, + state: e.componentState, + selection: e.highlightComponentsKeys, + modelSelection: e.highlightModelsKeys + }); + var t = r.postilWindow.$el.querySelector("div[imgid='" + A + "']"); + t && xh.css(t, { + border: "2px solid #002553" + }) + } + }, + this.postilSave = function () { + "function" == typeof r.saveListener ? r.saveListener(this.editingPostilObj.code, (function (A) { + A && r.save() + })) : r.save() + }, + this.save = function () { + r.edit.canvas.currentCanvasContainer.getCanvas().save(), + r.edit.canvas.negativeCanvasContainer.getCanvas().save(); + var A = r.edit.canvas.currentCanvasContainer.getCanvas(), + e = r.edit.canvas.negativeCanvasContainer.getCanvas(), + t = document.createElement("canvas"); + t.width = A.width, + t.height = A.height; + var i = t.getContext("2d"); + i.drawImage(e.getCanvas(), 0, 0), + i.drawImage(A.getCanvas(), 0, 0); + var o = t.toDataURL(); + r.editingPostilObj.imageURL = o, + this.editingNodeDom.children[1].children[0].setAttribute("src", o), + r.eventDispatcher.dispatchEvent({ + type: "POSTIL-EDIT-SAVE", + event: event, + data: r.editingPostilObj + }) + }, + this.undo = function () { + r.eventDispatcher.dispatchEvent({ + type: "POSTIL-EDIT-UNDO", + event: event + }) + }, + this.postilExit = function () { + "function" == typeof r.exitListener ? r.exitListener(this.editingPostilObj.code, (function (A) { + A && r.exit() + })) : r.exit() + }, + this.exit = function () { + r.edit.canvas.currentCanvasContainer.getCanvas().clear(), + r.edit.canvas.negativeCanvasContainer.getCanvas().clear(), + r.edit.canvas.currentCanvasContainer.getCanvas().setDocumentName(""), + r.edit.canvas.currentCanvasContainer.getCanvas().setPictureName(""), + r.edit.canvas.negativeCanvasContainer.getCanvas().setDocumentName(""), + r.edit.canvas.negativeCanvasContainer.getCanvas().setPictureName(""), + r.clearPostilStorage(), + r.edit.hide(), + r.editingPostilObj = void 0, + document.querySelector("#" + o.viewport).style.display = "block", + r.eventDispatcher.dispatchEvent({ + type: "POSTIL-EDIT-CLOSE" + }) + }, + this.clearPostilStorage = function () { + for (var A = localStorage.length, e = [], t = 0; A > t; t += 1) { + var i = localStorage.key(t); - + 1 === i.indexOf("currentCanvas-") && -1 === i.indexOf("negativeCanvas-") || e.push(i) + } + e.map((function (A, e) { + return localStorage.removeItem(A) + })) + }, + this.clearPostilStorage(), + this.getPostilByKey = function (A) { + return r.postilInfo ? r.postilInfo[A] : null + }, + this.getAllPostil = function () { + return r.postilInfo ? r.postilInfo : null + } + }, + zd = function (A, e) { + var t = document.getElementById("svgBar" + e), + i = this; + if (!t) { + this.svg = document.createElementNS("http://www.w3.org/2000/svg", "svg"), + this.svg.setAttribute("id", "svgBar" + e), + this.svg.setAttribute("style", "width: 100%; height: 10px; position:absolute; left: 0; top:0;"), + A.appendChild(this.svg); + var o = Number(2).toString(), + n = A.clientWidth.toString(), + r = (A.clientWidth - 2).toString(); + this.backBar = document.createElementNS("http://www.w3.org/2000/svg", "line"), + this.backBar.setAttribute("id", "backBar" + e), + this.backBar.setAttribute("class", "progressBar"), + this.backBar.setAttribute("x1", o), + this.backBar.setAttribute("y1", "1"), + this.backBar.setAttribute("x2", n), + this.backBar.setAttribute("y2", "1"), + this.backBar.setAttribute("stroke", "#CFF9FE"), + this.backBar.setAttribute("stroke-width", "7"), + this.backBar.setAttribute("stroke-linecap", "round"), + this.frontBar = document.createElementNS("http://www.w3.org/2000/svg", "line"), + this.frontBar.setAttribute("id", "frontBar" + e), + this.frontBar.setAttribute("class", "progressBar"), + this.frontBar.setAttribute("x1", o), + this.frontBar.setAttribute("y1", "1"), + this.frontBar.setAttribute("x2", n), + this.frontBar.setAttribute("y2", "1"), + this.frontBar.setAttribute("stroke", "#58BDFD"), + this.frontBar.setAttribute("stroke-dasharray", r), + this.frontBar.setAttribute("stroke-dashoffset", r), + this.frontBar.setAttribute("stroke-width", "7"), + this.frontBar.setAttribute("stroke-linecap", "round"), + this.svg.appendChild(this.backBar), + this.svg.appendChild(this.frontBar) + } + this.setProgressBar = function (A, e) { + var t = A / e, + o = r - r * t; + i.svg.style.display = "", + i.frontBar.setAttribute("stroke-dashoffset", o.toString()), + 1 > t || setTimeout((function () { + i.deleteProgressBar() + }), 500) + }, + this.deleteProgressBar = function () { + document.getElementsByClassName("progressBar"); + i.svg.style.display = "none" + } + }, + Zd = function (A, e) { + var t = A.toolId, + i = A.Flag, + o = A.viewer, + n = e.toolbarTop, + r = this, + a = 0; + this.snapshotInfo = {}, + this.snapshotDelConf = !0, + this.deleteListener = null, + this.addListener = null, + this.renameListener = null, + this.updateListener = null, + this.annotationListener = null, + this.restoreToSnapshotListener = null; + var s = document.createElement("div"); + s.className = "snapshot-content", + xh.append(s, '
'), + this.snapshotWindow = qd.window({ + title: "快照", + width: 334, + height: 688, + closeOnEsc: !1, + closeButton: !0, + afterWindowHide: function () { + var A = document.getElementById("snapshot" + t); + i.snapshot = !1, + A && (A.style.backgroundColor = "", + A.querySelector(".yj-icon").className = "yj-icon snapshot-icon") + }, + content: s + }), + r.snapshotWindow.setPosition({ + left: "", + right: 5, + top: 60 + }), + r.snapshotWindow.windowHide(), + xh.addEventListener(n.querySelector("#snapshot" + t), "click", (function (A) { + if (i.snapshot) + r.snapshotInfo = void 0, + A.target.parentNode.style.backgroundColor = "", + A.target.className = "yj-icon snapshot-icon", + r.snapshotWindow.windowHide(); + else { + r.load([]), + i.snapshot = !i.snapshot, + r.snapshotWindow.windowShow(); + var e = o.viewerImpl.modelManager.sceneState; + A.target.parentNode.style.backgroundColor = "#1f89de", + A.target.className = "yj-icon snapshot-icon active", + e.getSelection() + } + })), + xh.addEventListener(r.snapshotWindow.$el.querySelector("#add" + t), "click", (function (A) { + var e = r.makeSnapshots(); + "function" == typeof r.addListener ? r.addListener(e, (function (A, t) { + A && r.add(t || e) + })) : r.add(e) + })), + this.clear = function () { + [].map.call(r.snapshotWindow.$el.querySelectorAll(".snapshot .snapshot-body"), (function (A, e) { + A.innerHTML = "" + })), + r.snapshotInfo = {}, + r.snapshotDelConf = !0 + }, + this.load = function (A) { + Array.isArray(A) && A.forEach((function (A) { + r.add(A) + })) + }, + this.makeSnapshots = function () { + var A, e, t, i, n, r = o.viewerImpl.modelManager.getModelSnapshotPhoto(); + A = r.imgURL; + var s = r.width, + l = r.height, + c = o.viewerImpl.getSceneState(); + e = c.camera, + t = c.state, + i = c.selection.concat(), + n = c.modelSelection.concat(); + var h = a; + return a += 1, { + cameraState: e, + componentState: t, + highlightComponentsKeys: i, + highlightModelsKeys: n, + imageURL: A, + width: s, + height: l, + num: h, + code: (new Date).getTime().toString(), + name: "快照" + h, + description: "无注释" + } + }, + xh.addEventListener(r.snapshotWindow.$el.querySelector(".snapshot-body"), "click", (function (A) { + switch (A.target.className) { + case "snapshot-node-delete": + r.snapshotsDelete(A); + break; + case "snapshot-node-img": + r.snapshotsflyto(A); + break; + case "snapshot-node-annotation": + r.snapshotsAnnotation(A); + break; + case "snapshot-node-button-update": + r.snapshotUpdate(A) + } + })), + xh.addEventListener(r.snapshotWindow.$el.querySelector(".snapshot-body"), "dblclick", (function (A) { + switch (A.target.className) { + case "snapshot-node-name": + r.snapshotsRename(A) + } + })), + this.add = function (A) { + var e = A.imageURL, + t = A.width, + i = A.height, + o = A.code, + n = A.name, + a = A.num, + s = A.description; + if (A.cameraState && A.componentState && e && o && t && i) { + for (var l = r.snapshotWindow.$el.querySelectorAll(".snapshot-node"), c = 0; l.length > c; c += 1) + xh.css(l[c], { + border: "2px" + }); + var h = '
' + n + '×
'; + [].map.call(r.snapshotWindow.$el.querySelectorAll(".snapshot-body"), (function (A, e) { + xh.append(A, h) + })), + r.snapshotInfo[o] = A + } + }, + this.snapshotsflyto = function (A) { + for (var e = r.snapshotWindow.$el.querySelectorAll(".snapshot-node"), t = 0; e.length > t; t += 1) + xh.css(e[t], { + border: "2px" + }); + var i = A.target.parentNode.parentNode.getAttribute("code"); + "function" == typeof r.restoreToSnapshotListener ? r.restoreToSnapshotListener(i, (function (A) { + r.restoreToSnapshot(i) + })) : r.restoreToSnapshot(i) + }, + this.restoreToSnapshot = function (A) { + var e = r.snapshotInfo[A]; + if (e) { + o.viewerImpl.setSceneState({ + camera: e.cameraState, + state: e.componentState, + selection: e.highlightComponentsKeys, + modelSelection: e.highlightModelsKeys + }); + var t = r.snapshotWindow.$el.querySelector("div[imgid='" + A + "']"); + t && xh.css(t, { + border: "2px solid #002553" + }) + } + }, + this.snapshotsPlay = function () { + var A = null; + + function e(t) { + var i = r.snapshotWindow.$el.querySelectorAll(".snapshot-node"); + if (0 !== i.length) { + var n, a = i[t].getAttribute("imgid"); + if (void 0 === r.snapshotInfo[a]) + i.length > t && e(t + 1); + else { + for (var s = 0; i.length > s; s += 1) + xh.css(i[s], { + border: "2px" + }); + xh.css(i[t], { + border: "2px solid #002553" + }), + o.viewerImpl.setSceneState({ + camera: r.snapshotInfo[a].cameraState, + state: r.snapshotInfo[a].componentState, + selection: r.snapshotInfo[a].highlightComponentsKeys, + modelSelection: r.snapshotInfo[a].highlightModelsKeys + }), + i.length - 1 > t ? A = setTimeout((n = t + 1, + function () { + e(n) + } + ), 1e3) : [].map.call(r.snapshotWindow.$el.querySelectorAll(".snapshot-play"), (function (A, e) { + A.innerHTML = "播放模型快照" + })) + } + i.length > t || [].map.call(r.snapshotWindow.$el.querySelectorAll(".snapshot-play"), (function (A, e) { + A.innerText = "播放模型快照" + })) + } else + [].map.call(r.snapshotWindow.$el.querySelectorAll(".snapshot-play"), (function (A, e) { + A.innerText = "播放模型快照" + })) + } + return function (t) { + if ("播放模型快照" === t.target.innerText) { + t.target.innerText = "停止播放"; + e(0) + } else + "停止播放" === t.target.innerText && (t.target.innerText = "播放模型快照", + A && clearTimeout(A)) + } + }(), + xh.addEventListener(r.snapshotWindow.$el.querySelector(".snapshot-play"), "click", (function (A) { + r.snapshotsPlay(A) + })), + this.snapshotsDelete = function (A) { + var e = A.target.parentNode.parentNode.getAttribute("imgid"); + if (r.snapshotDelConf) { + var t = qd.alert("info", { + msg: "删除不可恢复,确认删除?", + title: "删除确认", + backdrop: !0, + buttons: { + yes: { + closeOnClick: !1, + text: "删除并不再提示" + }, + no: { + closeOnClick: !1, + text: "删除" + } + }, + callback: function (A, t) { + "no" !== t && "yes" !== t || ("yes" === t && (r.snapshotDelConf = !1), + "function" == typeof r.deleteListener ? r.deleteListener(e, (function (A) { + A && r.delete(e) + })) : r.delete(e)), + A.destroy() + } + }), + i = (new Date).getTime() - qd.window.startTime; + [].map.call(r.snapshotWindow.$el.querySelectorAll(".lobibox-backdrop"), (function (A, e) { + xh.css(A, { + "z-index": i + }) + })), + t.$el.style.zIndex = i + 2 + } else + "function" == typeof r.deleteListener ? r.deleteListener(e, (function (A) { + A && r.delete(e) + })) : r.delete(e) + }, + this.delete = function (A) { + var e = r.snapshotWindow.$el.querySelector("div[imgid='" + A + "']"); + e && e.remove(), + delete r.snapshotInfo[A] + }, + this.snapshotsRename = function (A) { + o.viewerImpl.cameraControl.enabled = !1; + var e = A.target, + t = e.parentNode.parentNode.getAttribute("imgid"), + i = e.innerText, + n = document.createElement("input"); + n.type = "text", + n.value = i, + e.innerText = "", + xh.append(e, n), + n.focus(), + n.select(), + n.addEventListener("blur", (function (A) { + var e = A.target; + e.removeEventListener("blur", (function () {})), + e.value !== i && "" !== xh.trim(e.value) ? "function" == typeof r.renameListener ? r.renameListener(t, e.value, (function (A, o) { + A ? r.rename(t, o || e.value) : e.parentNode.innerText = i + })) : r.rename(t, e.value) : e.parentNode.innerText = i, + n.remove(), + o.viewerImpl.cameraControl.enabled = !0 + })) + }, + this.rename = function (A, e) { + var t = r.snapshotWindow.$el.querySelector("div[imgid='" + A + "']"); + if (t) { + var i = t.querySelector(".snapshot-node-name"); + i && (i.innerText = e) + } + r.snapshotInfo[A].name = e + }, + this.snapshotUpdate = function (A) { + var e = A.target.parentNode.parentNode.getAttribute("imgid"), + t = r.makeSnapshots(); + "function" == typeof r.updateListener ? r.updateListener(e, t, (function (A, i, o) { + A && r.update(i || e, o || t) + })) : r.update(e, t) + }, + this.update = function (A, e) { + var t = r.snapshotInfo[A]; + t && (t.cameraState = e.cameraState, + t.componentState = e.componentState, + t.highlightComponentsKeys = e.highlightComponentsKeys, + t.highlightModelsKeys = e.highlightModelsKeys, + t.imageURL = e.imageURL); + var i = r.snapshotWindow.$el.querySelector("div[imgid='" + A + "']"); + if (i) { + var o = i.querySelector(".snapshot-node-img"); + o && (o.src = e.imageURL) + } + }, + this.snapshotsAnnotation = function (A) { + var e = A.target, + t = e.parentNode.parentNode.getAttribute("imgid"), + i = e.innerHTML, + o = qd.prompt("text", { + title: "添加/修改-注释/说明", + value: e.innerHTML, + multiline: !0, + modal: !0, + backdrop: !0, + lines: 6, + attrs: { + placeholder: "无注释" + }, + buttons: { + ok: { + class: "btn btn-info", + closeOnClick: !1, + text: "确定" + }, + cancel: { + class: "btn btn-danger", + closeOnClick: !1, + text: "取消" + } + }, + callback: function (A, n) { + if ("ok" === n) { + var a = o.getValue(); + a !== i && "" !== xh.trim(a) ? "function" == typeof r.annotationListener ? r.annotationListener(t, a, (function (A, e, i) { + A && r.annotation(e || t, i || a) + })) : r.annotation(t, a) : e.innerHTML = i, + A.destroy() + } else + "cancel" === n && A.destroy() + } + }), + n = (new Date).getTime() - qd.window.startTime; + [].map.call(r.snapshotWindow.$el.querySelectorAll(".lobibox-backdrop"), (function (A, e) { + xh.css(A, { + "z-index": n + }) + })), + o.$el.style.zIndex = n + 2 + }, + this.annotation = function (A, e) { + var t = r.snapshotWindow.$el.querySelector("div[imgid='" + A + "']"); + if (t) { + var i = t.querySelector(".snapshot-node-annotation"); + i && (i.innerText = e) + } + r.snapshotInfo[A].description = e + }, + this.getSnapshotByKey = function (A) { + return r.snapshotInfo ? r.snapshotInfo[A] : null + }, + this.getAllSnapshot = function () { + return r.snapshotInfo ? r.snapshotInfo : null + } + }, + Xd = function (A, e) { + var t = this; + qd.viewport = document.querySelector("#" + A.viewport), + A.getViewerImpl().getModelManager().addEventListener(Rc.ON_LOAD_ERROR, (function (A) { + jd("error", A.message || "加载出现错误", !1) + })), + A.getViewerImpl().getModelManager().addEventListener(Rc.ON_LOAD_INVALID_SCENE, (function (A) { + jd("error", "key为 " + A.modelKey + " 的模型信息不合法", !1) + })), + A.getViewerImpl().getModelManager().addEventListener(Rc.ON_NETWORK_ERROR, (function (A) { + jd("error", A.message || "网络连接错误", !1) + })), + A.getViewerImpl().getModelManager().addEventListener(Rc.NO_PERMISSION, (function (A) { + jd("error", A.message || "权限不足", !1) + })), + A.getViewerImpl().getModelManager().addEventListener(Rc.ACCOUNT_NO_EXIST, (function (A) { + jd("error", A.message || "无法获取账户", !1) + })), + A.getViewerImpl().getModelManager().addEventListener(Rc.ON_LOAD_EMPTY_SCENE, (function (A) { + jd("error", "key为 " + A.modelKey + " 的模型场景为空,请生成场景", !1) + })), + A.getViewerImpl().getModelManager().addEventListener(Tc.PARSEFAILE, (function (A) { + jd("error", "key为 " + A.modelKey + " 的模型解析失败", !1) + })), + A.getViewerImpl().getModelManager().addEventListener(Tc.PARSING, (function (A) { + jd("error", "key为 " + A.modelKey + " 的模型解析中", !1) + })), + A.getViewerImpl().getModelManager().addEventListener(Tc.SCENE_NOTHING_TO_LOAD, (function (A) { + jd("error", "key为 " + A.modelKey + " 的模型没有可加载的内容", !1) + })); + var i = A.viewerImpl.uuid, + o = { + roam: !1, + sectioning: !1, + multiple: !1, + fullScreen: !1, + attribute: !1, + search: !1, + measurement: !1, + modelTree: !1, + treeDataLoad: !1, + snapshot: !1, + postil: !1, + mark: !1 + }, + n = { + home: !0, + fit: !0, + restore: !0, + roam: !0, + multiple: !0, + transparent: !1, + hide: !0, + isolation: !0, + sectioning: !0, + modelPartition: !0, + wireframe: !0, + color: !0, + setting: !0, + modelTree: !1, + attribute: !0, + search: !1, + measurement: !0, + snapshot: !0, + postil: !0, + mark: !0 + }, + r = { + Flag: o, + lobibox: qd, + toolId: i, + viewer: A + }; + this.progressBar = new zd(A.viewerImpl.domElement, i); + var a = {}; + A.getViewerImpl().modelManager.addEventListener(Rc.ON_LOAD_PROGRESS, (function (A) { + a[A.progress.modelKey] = [A.progress.total, A.progress.loaded]; + var e = 0, + i = 0; + for (var o in a) + if (a.hasOwnProperty(o)) { + var n = a[o]; + e += n[0], + i += n[1] + } + t.progressBar.setProgressBar(i, e) + })), + A.getViewerImpl().modelManager.addEventListener(Rc.ON_LOAD_COMPLETE, (function (A) { + delete a[A.modelKey], + 0 === Object.keys(a).length && t.progressBar.setProgressBar(1, 1) + })); + A.viewerImpl.getScene(); + this.undoList = [], + this.redoList = [], + this.maxUndoListLength = 10; + var s, l, c, h, d = 0; + + function p(e) { + var i = t.undoList[e - 1]; + if (i) + switch (i.type) { + case "隐藏": + A.showComponentsByKey(i.data); + break; + case "隔离": + A.closeIsolateComponentsByKey(i.data); + break; + case "修改颜色": + A.closeColorfulComponentsByKey(i.data.key); + break; + case "框选添加": + A.closeHighlightComponentsByKey(i.data); + break; + case "框选移除": + A.highlightComponentsByKey(i.data); + break; + case "修改线框": + A.closeWireFrameComponentsByKey(i.data) + } + } + + function g(e) { + var i = t.redoList[e]; + if (i) + switch (i.type) { + case "隐藏": + A.hideComponentsByKey(i.data); + break; + case "隔离": + A.isolateComponentsByKey(i.data); + break; + case "修改颜色": + A.colorfulComponentsByKey(i.data.key, i.data.color, i.data.opacity); + break; + case "框选添加": + A.highlightComponentsByKey(i.data); + break; + case "框选移除": + A.closeHighlightComponentsByKey(i.data); + break; + case "修改线框": + A.wireFrameComponentsByKey(i.data) + } + } + + function u(A) { + if (void 0 !== A.target.undoNum) { + var e = Number(A.target.undoNum); + 1 === e && jd("info", "无法再撤销、重做。请使用ctrl+z或ctrl+shift+z", 3e3), + isNaN(e) || t.undoOrRedo(e) + } + } + this.className = "Tool", + this.getToolId = function () { + return i + }, + this.getFlag = function () { + return o + }, + this.createTool = function (e) { + t.options = uh.extend(!0, {}, n, e); + var a = document.createElement("div"); + a.id = "my-tool" + i, + a.className = "yj-tool", + A.viewerImpl.domElement.appendChild(a), + this.toolbarTop = a, + t.toolbar = a; + var s = document.createElement("div"); + s.className = "yj-group", + a.appendChild(s); + var l = document.createElement("div"); + l.className = "homeViewer-div", + l.id = "homeViewerDiv" + i, + l.style.display = "flex"; + var c = document.createElement("button"); + c.className = "yj-but", + c.title = "视图操作", + c.id = "homeViewer" + i; + var h = document.createElement("div"); + h.classList.add("yj-icon"), + h.classList.add("homeViewer-icon"), + c.appendChild(h); + var p = document.createElement("div"); + p.className = "viewerModal", + p.id = "viewerModal" + i, + l.appendChild(c), + l.appendChild(p), + t.options.home && s.appendChild(l), + c.addEventListener("click", (function (A) { + "" === p.style.display || "none" === p.style.display ? (DA(), + p.style.display = "flex") : p.style.display = "none" + })); + var g = document.createElement("button"); + g.className = "yj-but", + g.title = "初始化", + g.id = "home" + i; + var u = document.createElement("div"); + u.classList.add("yj-icon"), + u.classList.add("home-icon"), + g.appendChild(u), + t.options.home && p.appendChild(g); + var f = document.createElement("button"); + f.className = "yj-but", + f.title = "聚焦", + f.id = "fit" + i; + var m = document.createElement("div"); + m.classList.add("yj-icon"), + m.classList.add("fit-icon"), + f.appendChild(m), + t.options.fit && p.appendChild(f); + var C = document.createElement("button"); + C.className = "yj-but", + C.title = "复位", + C.id = "restore" + i; + var y = document.createElement("div"); + y.classList.add("yj-icon"), + y.classList.add("restore-icon"), + C.appendChild(y); + var v = document.createElement("ul"); + v.className = "restoreModal", + v.style.cssText += "display: none;", + v.id = "restoreModal" + i; + for (var I = 0; 6 > I; I += 1) { + var E = document.createElement("li"); + E.className = "input-group-addon", + v.appendChild(E); + var B = document.createElement("input"); + B.type = "checkbox", + B.className = 5 === I ? "checkAll" : "check", + E.appendChild(B); + var x = document.createElement("label"); + switch (E.appendChild(x), + I) { + case 0: + B.id = "showSet" + i, + x.setAttribute("for", "showSet" + i), + x.innerHTML = "复位构件可见设置"; + break; + case 1: + B.id = "highlightSet" + i, + x.setAttribute("for", "highlightSet" + i), + x.innerHTML = "复位构件高亮设置"; + break; + case 2: + B.id = "viewSet" + i, + x.setAttribute("for", "viewSet" + i), + x.innerHTML = "复位模型视角设置"; + break; + case 3: + B.id = "wireframeSet" + i, + x.setAttribute("for", "wireframeSet" + i), + x.innerHTML = "复位构件线框设置"; + break; + case 4: + B.id = "colorSet" + i, + x.setAttribute("for", "colorSet" + i), + x.innerHTML = "复位构件颜色设置"; + break; + case 5: + B.id = "checkAll" + i, + x.setAttribute("for", "checkAll" + i), + x.innerHTML = "全选"; + var S = document.createElement("input"); + S.type = "button", + S.id = "reset" + i, + S.className = "reset", + S.value = "复位选中项", + E.appendChild(S) + } + } + var w = document.createElement("ul"); + w.className = "history", + w.id = "history" + i, + w.style.cssText += "display: none;"; + var M = document.createElement("span"); + M.innerText = "历史记录", + M.style.cssText += "color:white", + w.appendChild(M), + t.options.restore && (s.appendChild(C), + s.appendChild(v), + s.appendChild(w), + v.style.cssText += "margin-left:" + C.style.left - v.style.width / 2 + "px"); + var b = document.createElement("button"); + b.className = "yj-but", + b.title = "漫游", + b.id = "roam" + i; + var U = document.createElement("div"); + U.classList.add("yj-icon"), + U.classList.add("roam-icon"), + b.appendChild(U); + var F = document.createElement("div"); + F.classList.add("roamModal"), + F.classList.add("clearfix"), + F.id = "roamModal" + i, + F.innerHTML = '
提示信息
-
+
提示信息
-
+
'; + var K = document.createElement("div"); + K.className = "roamOnOff", + K.innerHTML = '
碰撞:
重力:
', + t.options.roam && (s.appendChild(b), + s.appendChild(F), + s.appendChild(K), + F.style.cssText += "margin-left:" + b.style.left - F.style.width / 2 + "px"); + var Q = document.createElement("div"); + Q.className = "yj-group", + a.appendChild(Q); + var R = null; + t.options.multiple && (R = function (A, e) { + var t = A.toolId, + i = A.Flag, + o = A.viewer, + n = document.createElement("button"); + n.className = "yj-but", + n.title = "框选", + n.id = "multiple" + t; + var r = document.createElement("div"); + r.classList.add("yj-icon"), + r.classList.add("multiple-icon"), + n.appendChild(r); + var a = null; + return n.addEventListener("click", (function () { + if (i.multiple) + return this.style.backgroundColor = "", + this.querySelector(".yj-icon").className = "yj-icon multiple-icon", + i.multiple = !1, + a && a.remove(), + a = null, + void o.viewerImpl.controlManager.disableTool(Pc.PICK_BY_RECT); + i.roam && (document.getElementById("roam" + t).style.backgroundColor = "", + document.getElementById("roam" + t).querySelector(".yj-icon").className = "yj-icon roam-icon", + jd("info", "框选模式下将关闭漫游功能", 2e3), + e.exitRoam()), + i.measurement && (document.getElementById("measurement" + t).style.backgroundColor = "", + document.getElementById("measurement" + t).querySelector(".yj-icon").className = "yj-icon measurement-icon", + jd("info", "框选模式下将关闭测量功能", 2e3), + e.exitMeasure && e.exitMeasure()), + i.sectioning && (document.getElementById("sectioning" + t).style.backgroundColor = "", + document.getElementById("sectioning" + t).querySelector(".yj-icon").className = "yj-icon sectioning-icon", + jd("info", "框选模式下将关闭剖切功能", 2e3), + o.viewerImpl.controlManager.disableTool(Pc.CLIP_BY_BOX), + i.sectioning = !1), + o.render(), + a = jd("info", "按住'Ctrl'键,框选模式为增选;按住'Alt'键,框选模式为减选", 5e3), + this.style.backgroundColor = "#1f89de", + this.querySelector(".yj-icon").className = "yj-icon multiple-icon active", + i.multiple = !i.multiple, + o.viewerImpl.controlManager.enableTool(o.viewerImpl, Pc.PICK_BY_RECT) + })), + n + }(r, this), + Q.appendChild(R)); + var T = document.createElement("button"); + T.className = "yj-but", + T.title = "构件透明化", + T.id = "transparent" + i; + var k = document.createElement("div"); + k.classList.add("yj-icon"), + k.classList.add("transparent-icon"), + T.appendChild(k); + var D = document.createElement("div"); + D.classList.add("transparentModal"), + D.classList.add("clearfix"), + D.id = "transparentModal" + i; + var L = document.createElement("div"); + D.appendChild(L); + var N = document.createElement("span"); + N.innerHTML = "提示信息", + N.className = "transparent-info", + L.appendChild(N), + (uA = document.createElement("div")).className = "subtract", + uA.innerHTML = "-", + D.appendChild(uA); + var O = document.createElement("div"); + O.className = "transparentRangeParent", + D.appendChild(O); + var V = document.createElement("input"); + V.type = "range", + V.className = "transparentRange", + V.setAttribute("step", "0.01"), + V.setAttribute("min", "0"), + V.setAttribute("max", "1"), + O.appendChild(V), + (CA = document.createElement("div")).className = "add", + CA.innerHTML = "+", + D.appendChild(CA), + t.options.transparent && (Q.appendChild(T), + Q.appendChild(D), + D.style.cssText += "margin-left:" + T.style.left - D.style.width / 2 + "px"); + var G = document.createElement("div"); + G.className = "toolComponentDiv", + G.id = "toolComponentDiv" + i, + G.style.display = "flex"; + var P = document.createElement("button"); + P.className = "yj-but", + P.title = "构件操作", + P.id = "toolComponent" + i; + var q = document.createElement("div"); + q.classList.add("yj-icon"), + q.classList.add("toolComponent-icon"), + P.appendChild(q); + var j = document.createElement("div"); + j.className = "toolComponentModal", + j.id = "toolComponentModal" + i, + G.appendChild(P), + G.appendChild(j), + Q.appendChild(G), + P.addEventListener("click", (function (A) { + "" === j.style.display || "none" === j.style.display ? (DA(), + j.style.display = "flex") : j.style.display = "none" + })); + var H = document.createElement("button"); + H.className = "yj-but", + H.title = "构件隐藏", + H.id = "hide" + i; + var Y = document.createElement("div"); + Y.classList.add("yj-icon"), + Y.classList.add("hide-icon"), + H.appendChild(Y), + t.options.hide && j.appendChild(H); + var W = document.createElement("button"); + W.className = "yj-but", + W.title = "构件隔离", + W.id = "insulate" + i; + var J = document.createElement("div"); + J.classList.add("yj-icon"), + J.classList.add("insulate-icon"), + W.appendChild(J), + t.options.isolation && j.appendChild(W); + var z = document.createElement("button"); + z.className = "yj-but", + z.title = "构件属性", + z.id = "attribute" + i; + var Z = document.createElement("div"); + Z.classList.add("yj-icon"), + Z.classList.add("attribute-icon"), + z.appendChild(Z), + t.options.attribute && (j.appendChild(z), + this.attributeWindow = function (A) { + var e = A.lobibox, + t = A.toolId, + i = A.Flag, + o = document.createElement("div"); + o.className = "tab-body", + o.id = "tab-properties" + t; + var n = document.createElement("table"); + n.classList.add("sx-table"), + n.classList.add("table-no-top"), + o.appendChild(n); + var r = document.createElement("thead"); + n.appendChild(r); + var a = document.createElement("tbody"); + n.appendChild(a); + var s = document.createElement("tr"); + s.className = "noprop", + a.appendChild(s); + var l = document.createElement("td"); + return l.innerText = "尚未选择构件", + s.appendChild(l), + e.window({ + title: "属性", + width: 334, + height: 688, + closeOnEsc: !1, + closeButton: !0, + afterWindowHide: function () { + var A = document.getElementById("attribute" + t); + i.attribute = !1, + A && (A.style.backgroundColor = "", + A.querySelector(".yj-icon").className = "yj-icon attribute-icon") + }, + content: o + }) + }(r), + t.attributeWindow.setPosition({ + left: "", + right: 5, + top: 60 + }), + t.attributeWindow.windowHide(), + z.addEventListener("click", (function () { + if (o.attribute) + this.style.backgroundColor = "", + t.attributeWindow.windowHide(); + else { + o.attribute = !o.attribute, + this.style.backgroundColor = "#1f89de", + this.querySelector(".yj-icon").className = "yj-icon attribute-icon active", + t.attributeWindow.windowShow(); + var e = A.viewerImpl.modelManager.sceneState; + e.getSelection() && t.showComponentAttribute(e.getSelection()[0]) + } + }))); + var X = document.createElement("button"); + X.className = "yj-but", + X.title = "构件线框化", + X.id = "wireframe" + i; + var _ = document.createElement("div"); + _.classList.add("yj-icon"), + _.classList.add("wireframe-icon"), + X.appendChild(_), + t.options.wireframe && j.appendChild(X); + var $ = document.createElement("button"); + $.className = "yj-but", + $.title = "构件变色", + $.id = "color" + i, + $.style.borderRadius = "0 6px 6px 0"; + var AA = document.createElement("div"); + AA.classList.add("yj-icon"), + AA.classList.add("color-icon"), + $.appendChild(AA); + var eA = document.createElement("input"); + eA.style.cssText += "display:none;", + eA.className = "toolColorInput", + $.appendChild(eA); + var tA = new Hh(eA, { + hasOpacity: !0 + }).element; + tA.id = "colorModal" + i, + tA.className = "colorModal", + t.options.color && (j.appendChild($), + Q.appendChild(tA), + tA.style.cssText += "margin-left:" + $.offsetLeft + "px"), + tA.querySelector(".btn-yes").addEventListener("click", (function () { + var e = A.getHighlightComponentsKey(), + i = Kd.getHexStringFromRGB(eA.value), + o = Kd.getColorArrayFromRGBA(eA.value)[3]; + t.push({ + type: "修改颜色", + data: { + key: e, + color: i, + opacity: o + } + }), + A.colorfulComponentsByKey(e, i, o) + })); + var iA = document.createElement("button"); + iA.className = "yj-but", + iA.title = "模型测量", + iA.id = "measurement" + i; + var oA = document.createElement("div"); + oA.classList.add("yj-icon"), + oA.classList.add("measurement-icon"), + iA.appendChild(oA), + t.options.measurement && (Q.appendChild(iA), + iA.addEventListener("click", (function (e) { + o.measurement ? (o.measurement = !1, + this.style.backgroundColor = "", + this.querySelector(".yj-icon").className = "yj-icon measurement-icon", + A.viewerImpl.controlManager.disableTool(Pc.PICK_BY_MEASURE)) : (o.measurement = !0, + this.style.backgroundColor = "#1f89de", + this.querySelector(".yj-icon").className = "yj-icon measurement-icon active", + A.viewerImpl.controlManager.enableTool(A.viewerImpl, Pc.PICK_BY_MEASURE)) + }))); + var nA = document.createElement("div"); + nA.className = "toolModelDiv", + nA.id = "toolModelDiv" + i, + nA.style.display = "flex"; + var rA = document.createElement("button"); + rA.className = "yj-but", + rA.title = "模型操作", + rA.id = "toolModel" + i; + var aA = document.createElement("div"); + aA.classList.add("yj-icon"), + aA.classList.add("toolModel-icon"), + rA.appendChild(aA); + var sA = document.createElement("div"); + sA.className = "toolModelModal", + sA.id = "toolModelModal" + i, + nA.appendChild(rA), + nA.appendChild(sA), + Q.appendChild(nA), + rA.addEventListener("click", (function (A) { + "" === sA.style.display || "none" === sA.style.display ? (DA(), + sA.style.display = "flex") : sA.style.display = "none" + })); + var lA = document.createElement("button"); + lA.className = "yj-but", + lA.title = "模型剖切", + lA.id = "sectioning" + i; + var cA = document.createElement("div"); + cA.classList.add("yj-icon"), + cA.classList.add("sectioning-icon"), + lA.appendChild(cA), + t.options.sectioning && sA.appendChild(lA); + var hA = document.createElement("button"); + hA.className = "yj-but", + hA.title = "模型分解", + hA.id = "modelPartition" + i; + var dA = document.createElement("div"); + dA.classList.add("yj-icon"), + dA.classList.add("modelPartition-icon"), + hA.appendChild(dA); + var pA = document.createElement("div"); + pA.classList.add("modelPartitionModal"), + pA.id = "modelPartitionModal" + i, + pA.style.cssText += "display: none;"; + var gA = document.createElement("div"); + pA.appendChild(gA); + var uA, fA = document.createElement("span"); + fA.innerHTML = "提示信息", + fA.className = "modelPartition-info", + gA.appendChild(fA), + (uA = document.createElement("div")).className = "subtract", + uA.innerHTML = "-", + pA.appendChild(uA); + var mA = document.createElement("div"); + mA.className = "modelPartitionRangeParent", + pA.appendChild(mA); + var CA, yA = document.createElement("input"); + yA.type = "range", + yA.className = "modelPartitionRange", + yA.setAttribute("value", "1"), + yA.setAttribute("name", "points"), + yA.setAttribute("step", "0.01"), + yA.setAttribute("min", "1"), + yA.setAttribute("max", "3"), + mA.appendChild(yA), + (CA = document.createElement("div")).className = "add", + CA.innerHTML = "+", + pA.appendChild(CA), + t.options.modelPartition && (sA.appendChild(hA), + Q.appendChild(pA), + D.style.cssText += "margin-left:" + hA.style.left - pA.style.width / 2 + "px"); + var vA = document.createElement("div"); + vA.className = "toolPostilDiv", + vA.id = "toolPostilDiv" + i, + vA.style.display = "flex", + (wA = document.createElement("button")).className = "yj-but", + wA.title = "批注操作", + wA.id = "toolPostil" + i; + var IA = document.createElement("div"); + IA.classList.add("yj-icon"), + IA.classList.add("toolPostil-icon"), + wA.appendChild(IA); + var EA = document.createElement("div"); + EA.className = "toolPostilModal", + EA.id = "toolPostilModal" + i, + vA.appendChild(wA), + vA.appendChild(EA), + Q.appendChild(vA), + wA.addEventListener("click", (function (A) { + "" === EA.style.display || "none" === EA.style.display ? (DA(), + EA.style.display = "flex") : EA.style.display = "none" + })); + var BA = document.createElement("button"); + BA.className = "yj-but", + BA.title = "添加标签", + BA.id = "mark" + i; + var xA = document.createElement("div"); + if (xA.classList.add("yj-icon"), + xA.classList.add("label-icon"), + BA.appendChild(xA), + t.options.mark && (EA.appendChild(BA), + t.mark = new Hd(r, this)), + t.options.snapshot) { + xh.append(EA, ''); + var SA = document.getElementById("snapshot" + i); + SA.addEventListener("mouseover", (function (A) { + this.style.backgroundColor = "#1f89de" + })), + SA.addEventListener("mouseout", (function (A) { + o[this.id.split(i)[0]] || (this.style.backgroundColor = "") + })), + t.snapshot = new Zd(r, this) + } + if (t.options.postil) { + var wA; + xh.append(EA, wA = ''); + var MA = document.getElementById("postil" + i); + MA.addEventListener("mouseover", (function (A) { + this.style.backgroundColor = "#1f89de" + })), + MA.addEventListener("mouseout", (function (A) { + o[this.id.split(i)[0]] || (this.style.backgroundColor = "") + })), + t.postil = new Jd(r, this) + } + var bA = document.createElement("div"); + bA.className = "yj-group", + bA.style.display = "flex", + bA.style.width = "160px", + a.appendChild(bA); + var UA = document.createElement("button"); + UA.className = "yj-but", + UA.title = "设置", + UA.id = "set" + i, + UA.style.borderRadius = "6px"; + var FA = document.createElement("div"); + FA.classList.add("yj-icon"), + FA.classList.add("set-icon"), + UA.appendChild(FA); + var KA = document.createElement("div"); + KA.className = "setModal", + KA.id = "setModal" + i; + var QA = document.createElement("div"); + QA.className = "sceneColorDiv", + QA.title = "选择背景颜色", + KA.appendChild(QA); + var RA = document.createElement("button"); + RA.id = "sceneColorSet" + i, + RA.classList.add("yj-icon"), + RA.classList.add("sceneColorSet"), + QA.appendChild(RA); + var TA = document.createElement("input"); + TA.style.cssText += "display:none;", + TA.className = "sceneColorInput", + QA.appendChild(TA); + var kA = new Hh(TA, { + hasOpacity: !0 + }).element; + + function DA() { + v && (v.style.display = "none"), + D && (D.style.display = "none"), + pA && (pA.style.display = "none"), + tA && (tA.style.display = "none"), + p && (p.style.display = "none"), + j && (j.style.display = "none"), + sA && (sA.style.display = "none"), + EA && (EA.style.display = "none"), + KA && (KA.style.display = "none"), + w && (w.style.display = "none") + } + kA.id = "sceneColorModal" + i, + kA.className = "sceneColorModal", + kA.querySelector(".btn-yes").addEventListener("click", (function () { + DA(); + var e = Kd.getHexStringFromRGB(TA.value), + t = Kd.getColorArrayFromRGBA(TA.value)[3]; + A.setSceneBackGroundColor(e, t) + })), + kA.querySelector(".btn-no").addEventListener("click", (function () { + DA() + })); + var LA = document.createElement("div"); + LA.className = "fullScreenDiv", + LA.title = "全屏显示", + KA.appendChild(LA); + var NA = document.createElement("button"); + + function OA(A) { + A.stopPropagation ? A.stopPropagation() : A.cancelBubble = !0 + } + NA.classList.add("yj-icon"), + NA.classList.add("fullScreen"), + NA.id = "Fullscreen" + i, + LA.appendChild(NA), + t.options.setting && (bA.appendChild(UA), + bA.appendChild(KA), + KA.appendChild(kA), + kA.style.cssText += "margin-left:" + (UA.offsetWidth + 5) + "px;"), + document.addEventListener("click", (function (A) {})), + document.addEventListener("keydown", (function (A) { + 27 === (A.keyCode ? A.keyCode : A.which) && (o.roam && b.click(), + o.measurement && document.querySelector("#measurement" + i).click(), + o.multiple && R && R.click(), + o.sectioning && lA.click()), + (A.keyCode ? A.keyCode : A.which) === Oh && (!0 === A.ctrlKey && !0 === A.shiftKey && t.undoOrRedo(d + 1), + !0 === A.ctrlKey && !1 === A.shiftKey && t.undoOrRedo(d - 1)) + })), + g.addEventListener("click", (function () { + t.clearUndoList(), + A.resetScene() + })), + f.addEventListener("click", (function () { + A.adaptiveSize() + })), + C.addEventListener("click", (function (A) { + "none" === v.style.display && DA(), + v.addEventListener("click", (function (A) { + OA(A) + })), + w.addEventListener("click", (function (A) { + OA(A) + })), + v.style.display = "none" === v.style.display ? "block" : "none", + w.style.display = "none" === w.style.display ? "block" : "none", + OA(A) + })), + document.getElementById("reset" + i).addEventListener("click", (function () { + var e = document.getElementById("showSet" + i).checked, + t = document.getElementById("highlightSet" + i).checked, + o = document.getElementById("viewSet" + i).checked, + n = document.getElementById("wireframeSet" + i).checked, + r = document.getElementById("colorSet" + i).checked, + a = {}; + a.visible = e, + a.selected = t, + a.wireframed = n, + a.colorfully = r, + a.view = o, + A.resetScene(a) + })); + var VA = document.querySelectorAll("input[type=checkbox].check"); + document.querySelector("input[type=checkbox].checkAll").addEventListener("click", (function () { + for (var A = 0; VA.length > A; A += 1) + VA[A].checked = this.checked + })); + for (var GA = 0; VA.length > GA; GA += 1) + VA[GA].addEventListener("click", (function () { + document.querySelector("input[type=checkbox].checkAll").checked = VA.length === document.querySelectorAll("input[type=checkbox].check:checked").length + })); + this.pathRoam = Yd(r, this, b, 0, K), + t.pathRoam.setPosition({ + left: "", + right: 5, + top: 60 + }), + t.pathRoam.windowHide(); + var PA = D.querySelector(".subtract"), + qA = D.querySelector(".add"), + jA = D.querySelector(".transparentRange"); + T.addEventListener("click", (function (e) { + if ("none" === D.style.display && DA(), + D.addEventListener("click", (function (A) { + OA(A) + })), + D.style.display = "none" === D.style.display ? "block" : "none", + 1 > A.getHighlightComponentsKey().length) + jd("warning", "未选中构件", 2e3), + D.style.display = "none"; + else { + jA.value = 1, + document.querySelector(".transparent-info").innerText = "透明度: " + 100..toFixed(0) + "%" + } + OA(e) + })); + var HA = mh.isIE11(); + jA.addEventListener(HA ? "change" : "input", (function (e) { + var t = A.getHighlightComponentsKey(); + document.querySelector(".transparent-info").innerHTML = "透明度: " + (100 * Number(jA.value)).toFixed(0) + "%", + A.transparentComponentsByKey(t, Number(jA.value), !1) + })), + PA.addEventListener("click", (function () { + var e = Number(jA.value), + t = Number(jA.getAttribute("step")); + jA.value = e - t; + var i = A.getHighlightComponentsKey(); + document.querySelector(".transparent-info").innerHTML = "透明度: " + (100 * Number(jA.value)).toFixed(0) + "%", + A.transparentComponentsByKey(i, Number(jA.value), !1) + })), + qA.addEventListener("click", (function () { + var e = Number(jA.value), + t = Number(jA.getAttribute("step")); + jA.value = e + t; + var i = A.getHighlightComponentsKey(); + document.querySelector(".transparent-info").innerHTML = "透明度: " + (100 * Number(jA.value)).toFixed(0) + "%", + A.transparentComponentsByKey(i, Number(jA.value), !1) + })), + H.addEventListener("click", (function () { + var e = A.getHighlightComponentsKey(); + 1 > e.length ? jd("warning", "未选中构件", 2e3) : (t.push({ + type: "隐藏", + data: e + }), + A.hideComponentsByKey(e)) + })), + W.addEventListener("click", (function () { + var e = A.getHighlightComponentsKey(); + 1 > e.length ? jd("warning", "未选中构件", 2e3) : (t.push({ + type: "隔离", + data: e + }), + A.isolateComponentsByKey(e)) + })); + var YA = document.createElement("div"); + YA.className = "section-body"; + var WA = document.createElement("div"); + WA.style.cssText += "color: #ff6700;top: 10px;height: 60px;text-align: center;font-size: 16px;", + YA.appendChild(WA); + var JA = document.createElement("span"); + JA.innerHTML = "是否显示剖切框", + WA.appendChild(JA); + var zA = document.createElement("input"); + zA.type = "radio", + zA.name = "UIControl", + zA.value = 1, + zA.checked = "checked", + WA.appendChild(zA); + var ZA = document.createElement("span"); + ZA.innerHTML = "显示", + WA.appendChild(ZA); + var XA = document.createElement("input"); + XA.type = "radio", + XA.name = "UIControl", + XA.value = 0, + XA.checked = "", + WA.appendChild(XA); + var _A = document.createElement("span"); + _A.innerHTML = "不显示", + WA.appendChild(_A); + var $A = document.createElement("button"); + $A.innerHTML = "确定", + $A.type = "button", + $A.style.cssText += "width:80px;height:30px;border-radius:10px;display:block;margin:0 auto;", + YA.appendChild($A), + this.sectionWindow = qd.window({ + title: "剖切", + id: "sectionWindow", + width: 334, + height: 405, + closeOnEsc: !1, + closeButton: !0, + afterWindowHide: function () { + o.sectioning = !1, + document.getElementById("sectioning" + i).style.backgroundColor = "", + zA.checked = "checked", + XA.checked = "", + A.viewerImpl.controlManager.disableTool(Pc.CLIP_BY_BOX), + A.render() + }, + content: YA + }), + t.sectionWindow.setPosition({ + left: "", + right: 5, + top: 60 + }), + t.sectionWindow.windowHide(), + lA.addEventListener("click", (function () { + if (o.sectioning) + return this.style.backgroundColor = "", + this.querySelector(".yj-icon").className = "yj-icon sectioning-icon", + t.sectionWindow.windowHide(), + o.sectioning = !1, + void A.disableSectionBox(); + o.multiple && (document.getElementById("multiple" + i).style.backgroundColor = "", + document.getElementById("multiple" + i).querySelector(".yj-icon").className = "yj-icon multiple-icon", + jd("info", "剖切模式下将关闭框选功能", 2e3), + A.viewerImpl.controlManager.disableTool(Pc.PICK_BY_RECT), + o.multiple = !1), + o.roam && (document.getElementById("roam" + i).style.backgroundColor = "", + document.getElementById("roam" + i).querySelector(".yj-icon").className = "yj-icon roam-icon", + jd("info", "剖切模式下将关闭漫游功能", 2e3), + t.exitRoam()), + o.measurement && (document.getElementById("measurement" + i).style.backgroundColor = "", + document.getElementById("measurement" + i).querySelector(".yj-icon").className = "yj-icon measurement-icon", + jd("info", "剖切模式下将关闭测量功能", 2e3), + t.exitMeasure && t.exitMeasure()), + A.render(), + this.style.backgroundColor = "#1f89de", + this.querySelector(".yj-icon").className = "yj-icon sectioning-icon active", + t.sectionWindow.windowShow(), + o.sectioning = !o.sectioning, + A.enableSectionBox(), + $A.addEventListener("click", (function () { + document.querySelector("#sectionWindow input[type=radio]:checked").value > 0 ? A.showSectionBox() : A.hideSectionBox() + })) + })); + var Ae = pA.querySelector(".subtract"), + ee = pA.querySelector(".add"), + te = pA.querySelector(".modelPartitionRange"); + hA.addEventListener("click", (function (e) { + o.roam && (document.getElementById("roam" + i).style.backgroundColor = "", + jd("info", "模型分解模式下将关闭漫游功能", 2e3), + t.exitRoam()), + A.render(), + pA.addEventListener("click", (function (A) { + OA(A) + })), + "none" === pA.style.display ? (DA(), + pA.style.display = "block") : pA.style.display = "none", + fA.innerText = "离散系数: " + te.value, + OA(e) + })), + te.addEventListener("change", (function (e) { + document.querySelector(".modelPartition-info").innerText = "离散系数: " + te.value; + var t = A.getViewerImpl().modelManager.getModelKeys(), + i = Number(te.value); + isNaN(i) || A.modelsExplosion({ + modelKey: t, + coefficientX: i, + coefficientY: i, + coefficientZ: i + }) + })), + Ae.addEventListener("click", (function () { + var e = te.value, + t = Number(te.getAttribute("step")); + te.value = Number(e) - t, + document.querySelector(".modelPartition-info").innerText = "离散系数: " + te.value; + var i = A.getViewerImpl().modelManager.getModelKeys(), + o = Number(te.value); + isNaN(o) || A.modelsExplosion({ + modelKey: i, + coefficientX: o, + coefficientY: o, + coefficientZ: o + }) + })), + ee.addEventListener("click", (function () { + var e = te.value, + t = Number(te.getAttribute("step")); + te.value = Number(e) + t, + document.querySelector(".modelPartition-info").innerText = "离散系数: " + te.value; + var i = A.getViewerImpl().modelManager.getModelKeys(), + o = Number(te.value); + isNaN(o) || A.modelsExplosion({ + modelKey: i, + coefficientX: o, + coefficientY: o, + coefficientZ: o + }) + })), + X.addEventListener("click", (function () { + var e = A.getHighlightComponentsKey(); + 1 > e.length ? jd("warning", "未选中构件", 2e3) : (t.push({ + type: "修改线框", + data: e + }), + A.wireFrameComponentsByKey(e, !0)) + })), + $.addEventListener("click", (function (e) { + "none" === tA.style.display && DA(), + tA.addEventListener("click", (function (A) { + OA(A) + })), + tA.style.display = "none" === tA.style.display ? "block" : "none", + 1 > A.getHighlightComponentsKey().length && (jd("warning", "未选中构件", 2e3), + tA.style.display = "none"), + OA(e) + })), + UA.addEventListener("click", (function (A) { + KA.addEventListener("click", (function (A) { + OA(A) + })), + "" === KA.style.display || "none" === KA.style.display ? (DA(), + KA.style.display = "flex") : KA.style.display = "none", + kA.style.display = "none", + OA(A) + })), + RA.addEventListener("click", (function (A) { + kA.addEventListener("click", (function (A) { + OA(A) + })), + kA.style.display = "none" === kA.style.display ? "block" : "none", + OA(A) + })), + NA.addEventListener("click", (function (e) { + DA(); + var t = document.getElementById("Fullscreen" + i); + o.fullScreen ? (o.fullScreen = !1, + Wh.exitFullScreen(), + t.className = "fullScreen", + t.title = "全屏显示") : (o.fullScreen = !0, + Wh.fullScreen(A.viewportDiv), + t.className = "cancelFullScreen", + t.title = "取消全屏") + })), + A.viewportDiv.focus() + }, + this.createTool2 = function () { + var e = document.createElement("div"); + e.id = "my-tool2" + i, + e.className = "yj-tool2", + A.viewerImpl.domElement.appendChild(e), + this.toolbarTop = e; + var n = document.createElement("div"); + n.className = "yj-group", + e.appendChild(n); + var a = document.createElement("button"); + a.className = "yj-but", + a.title = "模型树", + a.id = "modelTree" + i; + var s = document.createElement("div"); + s.classList.add("yj-icon"), + s.classList.add("modelTree-icon"), + a.appendChild(s), + t.options.modelTree && n.appendChild(a); + var l = document.createElement("button"); + l.className = "yj-but", + l.title = "查询", + l.id = "search" + i; + var c = document.createElement("div"); + c.classList.add("yj-icon"), + c.classList.add("search-icon"), + l.appendChild(c); + var h = document.createElement("div"); + h.className = "yj-group", + e.appendChild(h); + var d = document.createElement("button"); + d.className = "yj-but", + d.title = "添加标签", + d.id = "mark" + i; + var p = document.createElement("div"); + p.classList.add("yj-icon"), + p.classList.add("label-icon"), + d.appendChild(p), + t.options.mark && (h.appendChild(d), + t.mark = new Hd(r, this)); + for (var g = document.querySelectorAll("button"), u = 0; g.length > u; u += 1) + g[u].addEventListener("mouseover", (function (A) { + this.style.backgroundColor = "#1f89de" + })), + g[u].addEventListener("mouseout", (function (A) { + this.id.split(i).length > 1 && (o[this.id.split(i)[0]] || (this.style.backgroundColor = "")) + })); + if (A.viewerImpl.modelManager.addEventListener(Rc.ON_CLICK_PICK, (function (e) { + o.attribute && (e.intersectInfo ? t.showComponentAttribute(A.viewerImpl.modelManager.sceneState.getSelection()[0]) : t.showComponentAttribute()) + })), + t.options.snapshot) { + xh.append(h, ''); + var f = document.getElementById("snapshot" + i); + f.addEventListener("mouseover", (function (A) { + this.style.backgroundColor = "#1f89de" + })), + f.addEventListener("mouseout", (function (A) { + o[this.id.split(i)[0]] || (this.style.backgroundColor = "") + })), + t.snapshot = new Zd(r, this) + } + if (t.options.postil) { + xh.append(h, ''); + var m = document.getElementById("postil" + i); + m.addEventListener("mouseover", (function (A) { + this.style.backgroundColor = "#1f89de" + })), + m.addEventListener("mouseout", (function (A) { + o[this.id.split(i)[0]] || (this.style.backgroundColor = "") + })), + t.postil = new Jd(r, this) + } + A.viewportDiv.focus() + }, + this.showComponentAttribute = (s = "", + l = document.getElementById("tab-properties" + i), + c = function (A, e, t) { + var i = document.createElement("tr"); + t.parentNode.appendChild(i), + i.appendChild(document.createElement("td")), + i.querySelector("td").innerHTML = A; + var o = document.createElement("td"), + n = null === e ? "" : e, + r = document.createElement("span"); + r.classList.add("value"), + r.classList.add("nonEditable"), + r.innerHTML = n, + o.appendChild(r), + i.appendChild(o) + }, + h = function (A, e) { + var t = document.createElement("tr"); + t.className = "sx-active", + l.querySelector("table tbody").appendChild(t); + var i = document.createElement("td"); + for (var o in i.colSpan = 2, + i.style.fontSize = "14px", + t.appendChild(i), + i.appendChild(document.createElement("b")), + i.firstElementChild.innerHTML = A, + e) + c(o, e[o], t) + }, + function (e) { + if (l = document.querySelector("#tab-properties" + i), + e !== s) { + if (void 0 === e) { + var o = l.querySelectorAll("table tbody tr"); + l.querySelector("table tbody").removeChild(o[0]), + l.querySelector("table tbody").innerHTML = ""; + var n = document.createElement("tr"); + n.className = "noprop"; + var r = document.createElement("td"); + return r.setAttribute("colspan", "2"), + r.innerHTML = "未选中构件", + n.appendChild(r), + l.querySelector("table tbody").appendChild(n), + void(s = e) + } + s = e, + l.querySelector("table tbody").innerHTML = ""; + var a = A.viewerImpl.getModelByComponentKey(s), + d = ""; + a && (d = a.projectKey), + t.getComponentAttribute({ + key: s, + projectKey: d + }, (function (A) { + if (l.querySelector("table tbody").innerHTML = "", + null === A) { + var e = document.createElement("tr"); + e.className = "noprop"; + var t = document.createElement("td"); + return t.innerHTML = "没有属性", + e.appendChild(t), + void l.querySelector("table tbody").appendChild(e) + } + if (void 0 === A) { + var i = document.createElement("tr"); + i.className = "noprop"; + var o = document.createElement("td"); + return o.innerHTML = "属性加载失败", + i.appendChild(o), + void l.querySelector("table tbody").appendChild(i) + } + var n = document.createElement("tr"); + n.className = "noprop"; + var r = document.createElement("th"); + n.appendChild(r); + var a = document.createElement("span"); + a.classList.add("value"), + a.classList.add("nonEditable"), + a.innerHTML = "名称", + r.appendChild(a); + var s = document.createElement("th"); + n.appendChild(s); + var d = document.createElement("span"); + d.classList.add("value"), + d.classList.add("nonEditable"), + d.innerHTML = "值", + s.appendChild(d), + l.querySelector("table tbody").appendChild(n); + var p = A; + for (var g in p) + "object" === lc(p[g]) ? h(g, p[g]) : "string" == typeof p[g] && c(g, p[g], n) + })) + } + } + ), + this.undoOrRedo = function (A) { + t.maxUndoListLength > A || (A = t.maxUndoListLength), + 0 > A && (A = 0); + var e = document.querySelectorAll(".history_li"); + if (d > A) + for (var i = d; i >= A; i -= 1) { + p(i + 1); + var o = e[i]; + o && (o.classList.remove("history_redo"), + o.classList.add("history_undo")) + } + if (A > d) + for (var n = d; A > n; n += 1) { + g(n); + var r = e[n]; + r && (r.classList.remove("history_undo"), + r.classList.add("history_redo")) + } + d = A + }, + this.clearUndoList = function () { + d = 0, + t.undoList = [], + t.redoList = []; + var A = document.querySelector(".history"); + if (A) { + A.innerHTML = ""; + var e = document.createElement("span"); + e.innerText = "历史记录", + e.style.cssText += "color:white", + A.appendChild(e) + } + }, + this.push = function (A) { + if (t.undoList.length > d && (t.undoList.splice(d, t.maxUndoListLength), + t.redoList.splice(d, t.maxUndoListLength)), + t.maxUndoListLength > t.undoList.length || (t.undoList.shift(), + t.redoList.shift(), + d -= 1), + t.maxUndoListLength - (d += 1), + t.undoList.push(A), + t.redoList.push(A), + t.options.restore) { + var e = document.querySelector(".history"); + if (e) { + e.innerHTML = ""; + var i = document.createElement("span"); + i.innerText = "历史记录", + i.style.cssText += "color:white", + e.appendChild(i); + for (var o = 0; d > o; o += 1) { + var n = document.createElement("li"); + n.innerHTML = t.undoList[o].type, + n.undoNum = o + 1, + n.title = "点击执行撤销或重做", + n.className = "history_li history_redo", + n.addEventListener("click", u), + e.appendChild(n) + } + } + } + }, + A.getViewerImpl().getModelManager().addEventListener(Rc.ON_RECTPICK_ADD, (function (A) { + A.list && t.push({ + type: "框选添加", + data: A.list + }) + })), + A.getViewerImpl().getModelManager().addEventListener(Rc.ON_RECTPICK_REMOVE, (function (A) { + A.list && t.push({ + type: "框选移除", + data: A.list + }) + })), + this.getComponentAttribute = function (e, t) { + A.getComponentsAttributeByKey(e.key, (function (A) { + A && t(A.attribute) + })) + }, + this.exitMeasure = function () { + if (o.measurement) { + var A = document.getElementById("measurement" + i); + A && xh.fireEvent(A, "click") + } + }, + this.exitRoam = function () { + if (o.roam) { + var A = document.getElementById("roam" + i); + A && (xh.fireEvent(A, "click"), + o.roam = !1) + } + } + }, + _d = function (A) { + return new Promise((function (e, t) { + var i = Object.assign({ + type: "get", + cache: !0, + headers: { + "Content-type": "application/x-www-form-urlencoded" + }, + data: null, + async: !0, + success: null, + error: null, + beforeSend: null, + requestQueue: void 0 + }, A), + o = null; + for (var n in (o = window.XMLHttpRequest ? new XMLHttpRequest : new ActiveXObject("Microsoft.XMLHTTP")).onreadystatechange = function () { + if (4 === o.readyState || "4" === o.readyState) { + var A = o.status; + A >= 200 && 300 > A || 0 === A ? (i.success && i.success(o.response || o.responseText, "" === o.responseType || "document" === o.responseType && o.responseXML), + e(o.response || o.responseText, "" === o.responseType || "document" === o.responseType && o.responseXML)) : (i.error && i.error(A, o.response || o.responseText, "" === o.responseType || "document" === o.responseType && o.responseXML), + t(A, o.response || o.responseText, "" === o.responseType || "document" === o.responseType && o.responseXML)) + } + }, + o.open(i.type, i.url, i.async), + i.headers) + o.setRequestHeader(n, i.headers[n]); + i.responseType && (o.responseType = i.responseType), + i.requestQueue ? i.requestQueue.addRequest(o, i.data) : i.beforeSend ? i.beforeSend(o, (function () { + o.send(i.data) + })) : o.send(i.data) + })) + }, + $d = function () { + var A = 0, + e = document.createElement("div"); + + function t(A) { + return e.appendChild(A.dom), + A + } + + function i(t) { + for (var i = 0; e.children.length > i; i++) + e.children[i].style.display = i === t ? "block" : "none"; + A = t + } + e.style.cssText = "position:fixed;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000", + e.addEventListener("click", (function (t) { + t.preventDefault(), + i(++A % e.children.length) + }), !1); + var o = (performance || Date).now(), + n = o, + r = 0, + a = t(new $d.Panel("FPS", "#0ff", "#002")), + s = t(new $d.Panel("MS", "#0f0", "#020")); + if (self.performance && self.performance.memory) + var l = t(new $d.Panel("MB", "#f08", "#201")); + return i(0), { + REVISION: 16, + dom: e, + addPanel: t, + showPanel: i, + begin: function () { + o = (performance || Date).now() + }, + end: function () { + r++; + var A = (performance || Date).now(); + if (s.update(A - o, 200), + A >= n + 1e3 && (a.update(1e3 * r / (A - n), 100), + n = A, + r = 0, + l)) { + var e = performance.memory; + l.update(e.usedJSHeapSize / 1048576, e.jsHeapSizeLimit / 1048576) + } + return A + }, + update: function () { + o = this.end() + }, + domElement: e, + setMode: i + } + }; + $d.Panel = function (A, e, t) { + var i = 1 / 0, + o = 0, + n = Math.round, + r = n(window.devicePixelRatio || 1), + a = 80 * r, + s = 48 * r, + l = 3 * r, + c = 2 * r, + h = 3 * r, + d = 15 * r, + p = 74 * r, + g = 30 * r, + u = document.createElement("canvas"); + u.width = a, + u.height = s, + u.style.cssText = "width:80px;height:48px"; + var f = u.getContext("2d"); + return f.font = "bold " + 9 * r + "px Helvetica,Arial,sans-serif", + f.textBaseline = "top", + f.fillStyle = t, + f.fillRect(0, 0, a, s), + f.fillStyle = e, + f.fillText(A, l, c), + f.fillRect(h, d, p, g), + f.fillStyle = t, + f.globalAlpha = .9, + f.fillRect(h, d, p, g), { + dom: u, + update: function (s, m) { + i = Math.min(i, s), + o = Math.max(o, s), + f.fillStyle = t, + f.globalAlpha = 1, + f.fillRect(0, 0, a, d), + f.fillStyle = e, + f.fillText(n(s) + " " + A + " (" + n(i) + "-" + n(o) + ")", l, c), + f.drawImage(u, h + r, d, p - r, g, h, d, p - r, g), + f.fillRect(h + p - r, d, r, g), + f.fillStyle = t, + f.globalAlpha = .9, + f.fillRect(h + p - r, d, r, n((1 - s / m) * g)) + } + } + }; + var Ap = function (A) { + this.viewer = A + }; + Ap.prototype = { + construtor: Ap, + destroy: function () { + this.viewer = null + }, + update: function (A) { + var e = this.getControl(); + e && (e.update(A), + this.viewer.render()) + }, + getControl: function () { + for (var A = this.viewer.controlManager.tools, e = 0; A.length > e; e += 1) + if (A[e].getName() === Pc.CLIP_BY_BOX) + return A[e]; + return null + }, + setSectionBox: function (A, e) { + this.getControl().setSectionBox(A, e) + }, + toggle: function (A, e) { + this.getControl().toggle(A, e) + }, + setVisible: function (A) { + this.getControl().visible(A) + }, + setRotatable: function (A) { + this.getControl().rotatable(A) + }, + enablePick: function (A) { + this.getControl().enablePick = A + }, + saveState: function () { + return this.getControl().store() + }, + loadState: function (A) { + this.getControl().restore(A) + }, + reset: function () { + this.viewer.getScene().resetClipPlanes() + }, + recalculate: function () { + return this.viewer.getFilter().getVisibleComponentsBbox() + }, + setProcess: function (A, e) { + this.getControl().setProcess(A, e) + }, + getProcess: function (A) { + return this.getControl().getProcess(A) + } + }; + var ep = function (A, e) { + H.call(this); + var t = { + priority: 5, + pickableType: Qc.UnPickable, + globalSpace: !1, + hoverEnabled: !1 + }; + this.name = A; + var i = uh.extend({}, t, e); + this.priority = i.priority, + this.pickableType = i.pickableType, + this.globalSpace = i.globalSpace, + this.boundingBox = null, + this.hoverEnabled = i.hoverEnabled + }; + (ep.prototype = Object.create(H.prototype)).constructor = ep, + Object.assign(ep, Ld), + ep.prototype.removeByName = function (A) { + for (var e = this.children, t = 0, i = e.length; i > t; t += 1) + if (e[t].name === A) { + e.splice(t, 1); + break + } + }, + ep.prototype.clear = function () { + this.children.length = 0 + }, + ep.prototype.isGlobalSpace = function () { + return this.globalSpace + }, + ep.prototype.hasChild = function (A) { + for (var e = 0, t = this.children.length; t > e; e += 1) + if (this.children[e].name === A) + return !0; + return !1 + }, + ep.prototype.isPickable = function () { + return this.pickableType !== Qc.UnPickable + }; + var tp = function (A) { + this.viewer = A, + this.viewportDIV = A.viewerImpl.getRenderer().domElement.parentElement, + this.creatSVG = function () { + document.getElementById("svgid" + this.viewer.getViewerImpl().uuid) || (this.svg = document.createElementNS("http://www.w3.org/2000/svg", "svg"), + this.svg.setAttribute("id", "svgid" + this.viewer.getViewerImpl().uuid), + this.svg.setAttribute("style", "width: 100%; height: 100%; position:absolute; left: 0; top:0;"), + this.viewportDIV.appendChild(this.svg)) + }, + this.creatRect = function (A) { + var e = A.data.left, + t = A.data.top, + i = A.data.width, + o = A.data.height, + n = A.data.visible; + this.deleteRect(), + n && (this.rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"), + this.rect.setAttribute("id", "rectid" + this.viewer.getViewerImpl().uuid), + this.rect.setAttribute("x", e), + this.rect.setAttribute("y", t), + this.rect.setAttribute("width", i), + this.rect.setAttribute("height", o), + this.rect.setAttribute("style", "fill:#0DFFB2;stroke-width:2;stroke:rgb(0,255,0);fill-opacity:0.1;stroke-opacity:0.9"), + this.svg.appendChild(this.rect)) + }, + this.deleteRect = function () { + var A = document.getElementById("rectid" + this.viewer.getViewerImpl().uuid); + A && this.svg.removeChild(A) + }, + this.deleteSVG = function () { + if (this.svg) { + var A = document.getElementById("rectid" + this.viewer.getViewerImpl().uuid); + A && this.svg.removeChild(A), + this.viewportDIV.removeChild(this.svg) + } + }, + this.creatMoveCircle = function (A) { + var e = A.x, + t = A.y; + this.circleMov = document.createElementNS("http://www.w3.org/2000/svg", "circle"), + this.circleMov.setAttribute("id", "circleMove" + this.viewer.getViewerImpl().uuid), + this.circleMov.setAttribute("cx", e), + this.circleMov.setAttribute("cy", t), + this.circleMov.setAttribute("r", "5"), + this.circleMov.setAttribute("style", "fill:#500A11;stroke-width:2;stroke:rgb(0,255,0);fill-opacity:0.9;stroke-opacity:0.9"), + this.svg.appendChild(this.circleMov) + }, + this.changeMoveCircleStyle = function (A) { + var e = document.getElementById("circleMove" + this.viewer.getViewerImpl().uuid); + e.setAttribute("cx", A[0]), + e.setAttribute("cy", A[1]), + e.setAttribute("style", "fill:#00ff00;stroke-width:1;stroke:rgb(60,240,240);fill-opacity:0.9;stroke-opacity:0.9") + }, + this.deleteCircle = function () { + var A = document.getElementById("circleMove" + this.viewer.getViewerImpl().uuid); + A && this.svg.removeChild(A) + }, + this.createMoveLine = function (A, e) { + var t = A.x, + i = A.y, + o = e.x, + n = e.y; + this.deleteMoveLine(), + this.moveline = document.createElementNS("http://www.w3.org/2000/svg", "line"), + this.moveline.setAttribute("id", "moveLine" + this.viewer.getViewerImpl().uuid), + this.moveline.setAttribute("class", "moveLine"), + this.moveline.setAttribute("x1", t), + this.moveline.setAttribute("y1", i), + this.moveline.setAttribute("x2", o), + this.moveline.setAttribute("y2", n), + this.moveline.setAttribute("stroke", "#0AEA06"), + this.moveline.setAttribute("stroke-width", "2"), + this.svg.appendChild(this.moveline) + }, + this.deleteMoveLine = function () { + var A = document.getElementById("moveLine" + this.viewer.getViewerImpl().uuid); + A && this.svg.removeChild(A) + }, + this.creatPickCircle = function (A, e) { + var t = A.x, + i = A.y; + this.circlePic = document.createElementNS("http://www.w3.org/2000/svg", "circle"), + this.circlePic.setAttribute("id", "circlePick" + this.viewer.getViewerImpl().uuid + e), + this.circlePic.setAttribute("class", "circlePick"), + this.circlePic.setAttribute("cx", t), + this.circlePic.setAttribute("cy", i), + this.circlePic.setAttribute("r", "5"), + this.circlePic.setAttribute("style", "fill:#00ff00;stroke-width:1;stroke:rgb(60,240,240);fill-opacity:0.9;stroke-opacity:0.9"), + this.svg.appendChild(this.circlePic) + }, + this.creatLine = function (A, e, t, i) { + var o = A.x, + n = A.y, + r = e.x, + a = e.y; + this.line = document.createElementNS("http://www.w3.org/2000/svg", "line"), + this.line.setAttribute("id", "pickline" + this.viewer.getViewerImpl().uuid + i), + this.line.setAttribute("class", "pickline"), + this.line.setAttribute("x1", o), + this.line.setAttribute("y1", n), + this.line.setAttribute("x2", r), + this.line.setAttribute("y2", a), + this.line.setAttribute("stroke", t), + this.line.setAttribute("stroke-width", "2"), + this.svg.appendChild(this.line) + }, + this.deleteLineAndCircle = function () { + for (var A = this.svg.getElementsByClassName("pickline"), e = this.svg.getElementsByClassName("circlePick"); A.length;) + this.svg.removeChild(A[A.length - 1]); + for (; e.length;) + this.svg.removeChild(e[e.length - 1]) + } + }; + + function ip(A, e) { + var t = A || 0, + i = e || 0; + return t === i ? 0 : t > i ? 1 : -1 + } + + function op(A, e) { + var t = A.split(".").map((function (A) { + return Number(A) || 0 + })), + i = e.split(".").map((function (A) { + return Number(A) || 0 + })); + return 0 === (ip(t[0], i[0]) || ip(t[1], i[1]) || ip(t[2], i[2])) + } + + function np(A, e) { + var t = A.split(".").map((function (A) { + return Number(A) || 0 + })), + i = e.split(".").map((function (A) { + return Number(A) || 0 + })); + return (ip(t[0], i[0]) || ip(t[1], i[1]) || ip(t[2], i[2])) >= 0 + } + + function rp(A, e) { + var t = A.split(".").map((function (A) { + return Number(A) || 0 + })), + i = e.split(".").map((function (A) { + return Number(A) || 0 + })); + return (ip(t[0], i[0]) || ip(t[1], i[1]) || ip(t[2], i[2])) > 0 + } + + function ap(A, e) { + return !np(A, e) + } + + function sp(A, e) { + return !rp(A, e) + } + var lp = function (A, e) { + var i = this; + this.viewer = A, + this.preRotationHandle = e, + this.mouseButtons = { + LEFT: t.LEFT, + RIGHT: t.RIGHT + }, + this.visible = !0, + this.isAnimationFinish = !0, + this.pickedColor = 16763094, + this.width = 0, + this.height = 0, + this.isDisable = !1; + var o = null, + n = null, + r = 0, + a = 1, + l = 2, + c = 220, + h = 150, + d = 80, + p = 1, + g = 2, + u = 5, + f = 6, + m = 3, + C = 4, + v = "Home", + I = "Bottom", + E = "Top", + B = "Left", + x = "Right", + S = "Front", + w = "Back", + M = "Bottom_Front", + b = "Bottom_Back", + U = "Bottom_Right", + F = "Bottom_Left", + K = "Top_Front", + Q = "Top_Back", + R = "Top_Right", + T = "Top_Left", + k = "LeftFront", + D = "LeftBack", + L = "RightFront", + N = "RightBack", + O = "Bottom_FrontRight", + V = "Bottom_FrontLeft", + G = "Bottom_BackLeft", + P = "Bottom_BackRight", + q = "Top_FrontRight", + j = "Top_FrontLeft", + H = "Top_BackLeft", + W = "Top_BackRight", + J = new Y, + z = new Ka(-h / 2, h / 2, h / 2, -h / 2, -h / 2, h / 2), + Z = new Dd, + X = new Xi, + _ = new Xi, + $ = new Xi; + X.add(_), + X.add($), + this._cube = X; + var AA = !1, + eA = !1, + tA = new s, + iA = new s, + oA = new s, + nA = new s, + rA = !1, + aA = "", + sA = null, + lA = -1, + cA = !1; + this.uninit = function () { + this.removeDomEventListeners(), + o && (o.removeChild(n.domElement), + o = null) + }, + this.enable = function () { + o && n && !n.domElement.parentNode && (o.appendChild(n.domElement), + this.addDomEventListeners()) + }, + this.disable = function () { + o && n && n.domElement.parentNode && (this.removeDomEventListeners(), + o.removeChild(n.domElement)) + }; + ! function () { + var A = new ko({ + color: 0, + side: 1 + }), + e = new De; + e.vertices.push(new y(-40, 40, 40), new y(40, 40, 40)); + var t = new Go(e, A); + $.add(t); + var i = new De; + i.vertices.push(new y(40, 40, 40), new y(40, 40, -40)); + var o = new Go(i, A); + $.add(o); + var n = new De; + n.vertices.push(new y(40, 40, -40), new y(-40, 40, -40)); + var r = new Go(n, A); + $.add(r); + var a = new De; + a.vertices.push(new y(-40, 40, -40), new y(-40, 40, 40)); + var s = new Go(a, A); + $.add(s); + var l = new De; + l.vertices.push(new y(-40, 40, -40), new y(-40, -40, -40)); + var c = new Go(l, A); + $.add(c); + var h = new De; + h.vertices.push(new y(40, 40, -40), new y(40, -40, -40)); + var d = new Go(h, A); + $.add(d); + var p = new De; + p.vertices.push(new y(40, 40, 40), new y(40, -40, 40)); + var g = new Go(p, A); + $.add(g); + var u = new De; + u.vertices.push(new y(-40, 40, 40), new y(-40, -40, 40)); + var f = new Go(u, A); + $.add(f); + var m = new De; + m.vertices.push(new y(-40, -40, 40), new y(40, -40, 40)); + var C = new Go(m, A); + $.add(C); + var v = new De; + v.vertices.push(new y(40, -40, 40), new y(40, -40, -40)); + var I = new Go(v, A); + $.add(I); + var E = new De; + E.vertices.push(new y(40, -40, -40), new y(-40, -40, -40)); + var B = new Go(E, A); + $.add(B); + var x = new De; + x.vertices.push(new y(-40, -40, -40), new y(-40, -40, 40)); + var S = new Go(x, A); + $.add(S); + var w = new Aa; + w.load(Pd.back, (function (A) { + var e = new Ue(new et(60, 60), new jA({ + map: A, + color: 16777215, + side: 2 + })); + e.position.set(0, 40, 0), + e.rotation.x = .5 * Math.PI, + e.name = "Back", + _.add(e) + })), + w.load(Pd.front, (function (A) { + var e = new Ue(new et(60, 60), new jA({ + map: A, + color: 16777215, + side: 2 + })); + e.position.set(0, -40, 0), + e.rotation.x = .5 * Math.PI, + e.name = "Front", + _.add(e) + })), + w.load(Pd.left, (function (A) { + var e = new Ue(new et(60, 60), new jA({ + map: A, + color: 16777215, + side: 2 + })); + e.position.set(-40, 0, 0), + e.rotation.y = .5 * Math.PI, + e.rotation.x = .5 * Math.PI, + e.name = "Left", + _.add(e) + })), + w.load(Pd.right, (function (A) { + var e = new Ue(new et(60, 60), new jA({ + map: A, + color: 16777215, + side: 2 + })); + e.position.set(40, 0, 0), + e.rotation.y = .5 * Math.PI, + e.rotation.x = .5 * Math.PI, + e.name = "Right", + _.add(e) + })), + w.load(Pd.top, (function (A) { + var e = new Ue(new et(60, 60), new jA({ + map: A, + color: 16777215, + side: 2 + })); + e.position.set(0, 0, 40), + e.name = "Top", + _.add(e) + })), + w.load(Pd.bottom, (function (A) { + var e = new Ue(new et(60, 60), new jA({ + map: A, + color: 16777215, + side: 2 + })); + e.position.set(0, 0, -40), + e.name = "Bottom", + _.add(e) + })); + var M = new Ne(10, 60, 10), + b = new Ue(M, new jA({ + color: 16777215 + })); + b.position.set(35, 0, 35), + b.name = "Top_Front", + _.add(b); + var U = new Ue(M, new jA({ + color: 16777215 + })); + U.position.set(35, 0, -35), + U.name = "Bottom_Front", + _.add(U); + var F = new Ue(M, new jA({ + color: 16777215 + })); + F.position.set(-35, 0, 35), + F.name = "Top_Back", + _.add(F); + var K = new Ue(M, new jA({ + color: 16777215 + })); + K.position.set(-35, 0, -35), + K.name = "Bottom_Back", + _.add(K); + var Q = new Ne(60, 10, 10), + R = new Ue(Q, new jA({ + color: 16777215 + })); + R.position.set(0, -35, 35), + R.name = "Top_Left", + _.add(R); + var T = new Ue(Q, new jA({ + color: 16777215 + })); + T.position.set(0, -35, -35), + T.name = "Bottom_Left", + _.add(T); + var k = new Ue(Q, new jA({ + color: 16777215 + })); + k.position.set(0, 35, 35), + k.name = "Top_Right", + _.add(k); + var D = new Ue(Q, new jA({ + color: 16777215 + })); + D.position.set(0, 35, -35), + D.name = "Bottom_Right", + _.add(D); + var L = new Ne(10, 10, 60), + N = new Ue(L, new jA({ + color: 16777215 + })); + N.position.set(35, -35, 0), + N.name = "LeftFront", + _.add(N); + var O = new Ue(L, new jA({ + color: 16777215 + })); + O.position.set(35, 35, 0), + O.name = "RightFront", + _.add(O); + var V = new Ue(L, new jA({ + color: 16777215 + })); + V.position.set(-35, -35, 0), + V.name = "LeftBack", + _.add(V); + var G = new Ue(L, new jA({ + color: 16777215 + })); + G.position.set(-35, 35, 0), + G.name = "RightBack", + _.add(G); + var P = new Ne(10, 10, 10), + q = new Ue(P, new jA({ + color: 16777215 + })); + q.position.set(35, -35, 35), + q.name = "Top_FrontLeft", + _.add(q); + var j = new Ue(P, new jA({ + color: 16777215 + })); + j.position.set(35, -35, -35), + j.name = "Bottom_FrontLeft", + _.add(j); + var H = new Ue(P, new jA({ + color: 16777215 + })); + H.position.set(35, 35, 35), + H.name = "Top_FrontRight", + _.add(H); + var Y = new Ue(P, new jA({ + color: 16777215 + })); + Y.position.set(35, 35, -35), + Y.name = "Bottom_FrontRight", + _.add(Y); + var W = new Ue(P, new jA({ + color: 16777215 + })); + W.position.set(-35, -35, 35), + W.name = "Top_BackLeft", + _.add(W); + var J = new Ue(P, new jA({ + color: 16777215 + })); + J.position.set(-35, -35, -35), + J.name = "Bottom_BackLeft", + _.add(J); + var z = new Ue(P, new jA({ + color: 16777215 + })); + z.position.set(-35, 35, 35), + z.name = "Top_BackRight", + _.add(z); + var Z = new Ue(P, new jA({ + color: 16777215 + })); + Z.name = "Bottom_BackRight", + Z.position.set(-35, 35, -35), + _.add(Z) + }(), + J.add(X); + var hA = function (A) { + eA = A; + for (var e = A ? .8 : 1, t = X.children, i = 0; t.length > i; i += 1) + for (var o = t[i].children, n = 0; o.length > n; n += 1) + o[n].material.transparent = A, + o[n].material.opacity = e + }; + hA(!1); + var dA = function () { + sA && sA.material.color.set(sA.currentColor), + sA = null + }, + pA = function (A) { + if (void 0 !== o) { + var e = xh.getDomOffsetToClient(o), + t = new s; + if (t.x = A.x - e.left, + t.y = A.y - e.top, + t.x > 0 && i.width > t.x && t.y > 0 && i.height > t.y) + return nA.x = t.x / i.width * 2 - 1, + nA.y = -t.y / i.height * 2 + 1, + !0 + } + return !1 + }, + gA = function () { + var A = new y(nA.x, nA.y, .5); + Z.setFromCamera(A, z); + var e, t = Z.intersectObjects(X.children[0].children); + t ? sA !== (e = t.object) && (sA && sA.material.color.set(sA.currentColor), + (sA = e).currentColor = sA.material.color.clone(), + "" !== sA.name && sA.material.color.set(i.pickedColor)) : dA() + }; + this.mouseUp = function (A) { + A.stopPropagation(); + var t = new s(A.clientX, A.clientY), + o = pA(t); + return AA ? (AA = !1, + iA.set(t.x, t.y), + oA.subVectors(iA, tA), + this.preRotationHandle && !this.preRotationHandle() || (this.viewer.viewerImpl.rotateCamera(oA), + tA.copy(iA))) : o && A.button === i.mouseButtons.LEFT && sA && (lA = -1, + function (A) { + var e = -1; + switch (A) { + case v: + e = Uc.Home; + break; + case E: + e = Uc.Top; + break; + case I: + e = Uc.Bottom; + break; + case M: + e = Uc.BottomFront; + break; + case b: + e = Uc.BottomBack; + break; + case U: + e = Uc.BottomRight; + break; + case F: + e = Uc.BottomLeft; + break; + case O: + e = Uc.BottomFrontRight; + break; + case V: + e = Uc.BottomFrontLeft; + break; + case G: + e = Uc.BottomBackLeft; + break; + case P: + e = Uc.BottomBackRight; + break; + case K: + e = Uc.TopFront; + break; + case Q: + e = Uc.TopBack; + break; + case R: + e = Uc.TopRight; + break; + case T: + e = Uc.TopLeft; + break; + case q: + e = Uc.TopFrontRight; + break; + case j: + e = Uc.TopFrontLeft; + break; + case H: + e = Uc.TopBackLeft; + break; + case W: + e = Uc.TopBackRight; + break; + case S: + e = Uc.Front; + break; + case w: + e = Uc.Back; + break; + case B: + e = Uc.Left; + break; + case x: + e = Uc.Right; + break; + case k: + e = Uc.FrontLeft; + break; + case D: + e = Uc.BackLeft; + break; + case L: + e = Uc.FrontRight; + break; + case N: + e = Uc.BackRight + } + lA = e + }(sA.name), + -1 !== lA && (e(lA), + null != lA && i.viewer.viewerImpl.rotateCameraByViewCubeSide(lA))), + o + }, + this.mouseMove = function (A) { + A.stopPropagation(); + var e = !1, + t = new s(A.clientX, A.clientY), + i = pA(t); + if (AA) + iA.set(t.x, t.y), + oA.subVectors(iA, tA), + this.preRotationHandle && !this.preRotationHandle() || (this.viewer.viewerImpl.rotateCamera(oA), + tA.copy(iA)); + else if (i) { + if (eA && (hA(!1), + e = !0), + gA(), + sA) { + if ("" !== sA.name) { + var o = sA.name; + aA !== o && (aA = o, + rA = !0, + e = !0) + } + } else + "" !== aA && (aA = "", + rA = !1, + e = !0); + e && this.render(), + cA = !0 + } else + cA && (cA = !1, + rA && (dA(), + rA = !1, + e = !0), + e && this.render()); + return i + }, + this.mouseDown = function (A) { + A.preventDefault(), + A.stopPropagation(); + var e = new s(A.clientX, A.clientY), + t = pA(e); + return t && A.button === i.mouseButtons.LEFT && (AA = !1), + t + }, + this.onMouseDownBinded = this.mouseDown.bind(this), + this.onMouseMoveBinded = this.mouseMove.bind(this), + this.onMouseUpBinded = this.mouseUp.bind(this), + this.addDomEventListeners = function () { + o && (o.addEventListener("contextmenu", (function (A) { + A.preventDefault() + }), !1), + o.addEventListener("mousedown", this.onMouseDownBinded, !1), + window.addEventListener("mousemove", this.onMouseMoveBinded, !1), + o.addEventListener("mouseup", this.onMouseUpBinded, !1)) + }, + this.removeDomEventListeners = function () { + o && (o.removeEventListener("contextmenu", (function (A) { + A.preventDefault() + }), !1), + o.removeEventListener("mousedown", this.onMouseDownBinded, !1), + window.removeEventListener("mousemove", this.onMouseMoveBinded, !1), + window.removeEventListener("mouseup", this.onMouseUpBinded, !1)) + }; + var uA = function (A) { + switch (A) { + case r: + i.width = c, + i.height = c; + break; + case a: + i.width = h, + i.height = h; + break; + case l: + default: + i.width = d, + i.height = d + } + o.style.width = i.width + "px", + o.style.height = i.height + "px" + }; + this.resize = function (A, e, t) { + uA(200 > A || t ? l : a), + n.setSize(this.width, this.height) + }; + this.init = function (A) { + (function (A) { + A.style.position = "absolute", + A.style.display = "block", + A.style.outline = "0", + A.style.right = "52px", + A.style.top = "0px", + A.style.opacity = ".6", + A.style.display = "flex", + A.style.webkitTransition = "opacity .2s ease", + A.style.mozTransition = "opacity .2s ease", + A.style.msTransform = "opacity .2s ease", + A.style.oTransform = "opacity .2s ease", + A.style.transition = "opacity .2s ease" + })(o = document.createElement("div")), + A.appendChild(o), + n = new $i({ + antialias: !0, + alpha: !0, + preserveDrawingBuffer: !0 + }), + o.appendChild(n.domElement), + this.resize(A.offsetWidth, A.offsetHeight, this.viewer.viewerImpl.isMobile), + this.addDomEventListeners() + }; + var fA = function (A, e, t) { + return A > e ? t >= A - e : t >= e - A + }; + this.render = function () { + if (this.visible && !this.isDisable && n) { + var A = this.viewer.viewerImpl.getActiveCameraInfo(), + e = A.quaternion.clone().inverse(); + this._cube.quaternion.copy(e), + -1 === lA && (lA = function (A, e) { + var t = A.clone(); + t.normalize(); + var i = e.clone(); + if (i.normalize(), + fA(t.x, 0, 1e-4) && fA(t.y, -1, 1e-4) && fA(t.z, 0, 1e-4) && fA(i.x, 0, 1e-4) && fA(i.y, 0, 1e-4) && fA(i.z, -1, 1e-4)) + return p; + if (fA(t.x, 0, 1e-4) && fA(t.y, 1, 1e-4) && fA(t.z, 0, 1e-4)) { + if (fA(i.x, 0, 1e-4) && fA(i.y, 0, 1e-4) && fA(i.z, 1, 1e-4)) + return g; + if (fA(i.x, 1, 1e-4) && fA(i.y, 0, 1e-4) && fA(i.z, 0, 1e-4)) + return g + } + return fA(t.x, 0, 1e-4) && fA(t.y, 0, 1e-4) && fA(t.z, -1, 1e-4) && fA(i.x, 0, 1e-4) && fA(i.y, 1, 1e-4) && fA(i.z, 0, 1e-4) ? u : fA(t.x, 0, 1e-4) && fA(t.y, 0, 1e-4) && fA(t.z, 1, 1e-4) && fA(i.x, 0, 1e-4) && fA(i.y, 1, 1e-4) && fA(i.z, 0, 1e-4) ? f : fA(t.x, -1, 1e-4) && fA(t.y, 0, 1e-4) && fA(t.z, 0, 1e-4) && fA(i.x, 0, 1e-4) && fA(i.y, 1, 1e-4) && fA(i.z, 0, 1e-4) ? m : fA(t.x, 1, 1e-4) && fA(t.y, 0, 1e-4) && fA(t.z, 0, 1e-4) && fA(i.x, 0, 1e-4) && fA(i.y, 1, 1e-4) && fA(i.z, 0, 1e-4) ? C : -1 + }(A.dir, z.up)), + n.autoClear = !0, + n.render(J, z) + } + }, + this.destroy = function () { + n.dispose(), + this.disable() + } + }, + cp = function (A, e, t, i, o) { + kd.call(this, Ec.PERSPECTIVE, { + width: e, + height: t, + fov: A, + near: i, + far: o + }), + this.realUp = this.up.clone(), + this.target = new y, + this.dirty = !1, + this.orthoScale = 1, + this.positionPlane = new EA, + this.projScreenMatrix = new M, + this.viewProjInverse = new M, + this.tempVector3 = new y, + this.frustum = new Ze + }; + (cp.prototype = Object.create(kd.prototype)).constructor = cp, + cp.prototype._updatePositionPlane = function () { + this.positionPlane.setFromNormalAndCoplanarPoint(this.getWorldDirection(new y), this.position) + }, + cp.prototype._updateFrustum = function () { + this.frustum.setFromProjectionMatrix(this.projScreenMatrix) + }, + cp.prototype.updateMVP = function () { + this.dirty && (null === this.parent && this.updateMatrixWorld(), + this.matrixWorldInverse.getInverse(this.matrixWorld), + this.projScreenMatrix.multiplyMatrices(this.projectionMatrix, this.matrixWorldInverse), + this.viewProjInverse.getInverse(this.projScreenMatrix), + this._updateFrustum(), + this._updatePositionPlane(), + this.dirty = !1) + }, + cp.prototype.getFrustum = function () { + return this.dirty && this.updateMVP(), + this.frustum + }, + cp.prototype.lookAtEx = function (A, e, t, i) { + var o = new y; + o.copy(e), + void 0 !== i && "number" == typeof i && o.setLength(i), + this.position.subVectors(A, o), + this.up.copy(t), + this.lookAt(A), + this.realUp.copy(t), + this.target.copy(A), + this.dirty = !0 + }, + cp.prototype.lookAtEXForTargetPositionUp = function (A, e, t) { + this.position.copy(e), + this.up = t, + this.lookAt(A), + this.realUp = t.clone(), + this.target = A.clone(), + this.dirty = !0 + }, + cp.prototype.clone = function () { + var A = new cp(2 * this.right, 2 * this.top, this.fov, this.near, this.far); + return A.position.copy(this.position), + A.quaternion.copy(this.quaternion), + A.scale.copy(this.scale), + A.up.copy(this.up), + A.realUp.copy(this.realUp), + A.target.copy(this.target), + A.aspect = this.aspect, + A.fov = this.fov, + A.near = this.near, + A.far = this.far, + A.left = this.left, + A.right = this.right, + A.top = this.top, + A.bottom = this.bottom, + A.zoom = this.zoom, + A.isPerspective = this.isPerspective, + A.updateProjectionMatrix(), + A.updateMVP(), + A + }, + cp.prototype.copy = function (A) { + return kd.prototype.copy.call(this, A), + this.realUp.copy(A.realUp), + this.orthoScale = A.orthoScale, + this.dirty = A.dirty, + this.updateProjectionMatrix(), + this.updateMVP(), + this + }, + cp.prototype.setStandardView = function (A, e) { + var t = null, + i = null; + e ? (t = e.getCenter(new y), + i = e.getSize(new y)) : t = new y(0, 0, 0); + var o = vc.SceneSize, + n = o / 2; + switch (i || (i = n), + A) { + case Uc.ISO: + var r = new y(-o, o, o), + a = new y, + s = new y(0, 0, 0); + a.subVectors(s, r), + this.lookAtEx(t, a, H.DefaultUp); + break; + case Uc.Top: + this.lookAtEx(t, new y(0, 0, -1), new y(0, 1, 0), i ? i.x : n); + break; + case Uc.Bottom: + this.lookAtEx(t, new y(0, 0, 1), new y(0, 1, 0), i ? i.x : n); + break; + case Uc.Front: + this.lookAtEx(t, new y(0, 1, 0), new y(0, 0, 1), i ? i.z : n); + break; + case Uc.Back: + this.lookAtEx(t, new y(0, -1, 0), new y(0, 0, 1), i ? i.z : n); + break; + case Uc.Right: + this.lookAtEx(t, new y(-1, 0, 0), new y(0, 0, 1), i ? i.y : n); + break; + case Uc.Left: + this.lookAtEx(t, new y(1, 0, 0), new y(0, 0, 1), i ? i.y : n); + break; + case Uc.FrontRight: + this.lookAtEx(t, new y(-1, 1, 0), new y(0, 0, 1), i ? i.x + i.y : n); + break; + case Uc.FrontLeft: + this.lookAtEx(t, new y(1, 1, 0), new y(0, 0, 1), i ? i.x + i.y : n); + break; + case Uc.BackLeft: + this.lookAtEx(t, new y(1, -1, 0), new y(0, 0, 1), i ? i.x + i.y : n); + break; + case Uc.BackRight: + this.lookAtEx(t, new y(-1, -1, 0), new y(0, 0, 1), i ? i.x + i.y : n); + break; + case Uc.BottomFront: + this.lookAtEx(t, new y(0, 1, 1), new y(0, 0, 1), i ? i.x + i.z : n); + break; + case Uc.BottomBack: + this.lookAtEx(t, new y(0, -1, 1), new y(0, 0, 1), i ? i.x + i.z : n); + break; + case Uc.BottomRight: + this.lookAtEx(t, new y(-1, 0, 1), new y(0, 0, 1), i ? i.y + i.z : n); + break; + case Uc.BottomLeft: + this.lookAtEx(t, new y(1, 0, 1), new y(0, 0, 1), i ? i.y + i.z : n); + break; + case Uc.BottomFrontRight: + this.lookAtEx(t, new y(-1, 1, 1), new y(0, 0, 1), i ? i.x + i.y + i.z : n); + break; + case Uc.BottomFrontLeft: + this.lookAtEx(t, new y(1, 1, 1), new y(0, 0, 1), i ? i.x + i.y + i.z : n); + break; + case Uc.BottomBackLeft: + this.lookAtEx(t, new y(1, -1, 1), new y(0, 0, 1), i ? i.x + i.y + i.z : n); + break; + case Uc.BottomBackRight: + this.lookAtEx(t, new y(-1, -1, 1), new y(0, 0, 1), i ? i.x + i.y + i.z : n); + break; + case Uc.TopFront: + this.lookAtEx(t, new y(0, 1, -1), new y(0, 0, 1), i ? i.x + i.z : n); + break; + case Uc.TopBack: + this.lookAtEx(t, new y(0, -1, -1), new y(0, 0, 1), i ? i.x + i.z : n); + break; + case Uc.TopRight: + this.lookAtEx(t, new y(-1, 0, -1), new y(0, 0, 1), i ? i.y + i.z : n); + break; + case Uc.TopLeft: + this.lookAtEx(t, new y(1, 0, -1), new y(0, 0, 1), i ? i.y + i.z : n); + break; + case Uc.TopFrontRight: + this.lookAtEx(t, new y(-1, 1, -1), new y(0, 0, 1), i ? i.x + i.y + i.z : n); + break; + case Uc.TopFrontLeft: + this.lookAtEx(t, new y(1, 1, -1), new y(0, 0, 1), i ? i.x + i.y + i.z : n); + break; + case Uc.TopBackLeft: + this.lookAtEx(t, new y(1, -1, -1), new y(0, 0, 1), i ? i.x + i.y + i.z : n); + break; + case Uc.TopBackRight: + this.lookAtEx(t, new y(-1, -1, -1), new y(0, 0, 1), i ? i.x + i.y + i.z : n); + break; + case Uc.TopToRight: + this.lookAtEx(t, new y(0, 1, 0), new y(-1, 0, 0), n); + break; + case Uc.TopToBack: + this.lookAtEx(t, new y(0, 1, 0), new y(0, 0, 1), n); + break; + case Uc.TopToLeft: + this.lookAtEx(t, new y(0, 1, 0), new y(1, 0, 0), n); + break; + case Uc.TopToFront: + this.lookAtEx(t, new y(0, 1, 0), new y(0, 0, -1), n); + break; + case Uc.BottomToRight: + this.lookAtEx(t, new y(0, -1, 0), new y(-1, 0, 0), n); + break; + case Uc.BottomToBack: + this.lookAtEx(t, new y(0, -1, 0), new y(0, 0, -1), n); + break; + case Uc.BottomToFront: + this.lookAtEx(t, new y(0, -1, 0), new y(0, 0, 1), n); + break; + case Uc.BottomToLeft: + this.lookAtEx(t, new y(0, -1, 0), new y(1, 0, 0), n); + break; + case Uc.FrontToTop: + this.lookAtEx(t, new y(0, 0, -1), new y(0, -1, 0), n); + break; + case Uc.FrontToBottom: + this.lookAtEx(t, new y(0, 0, -1), new y(0, 1, 0), n); + break; + case Uc.FrontToLeft: + this.lookAtEx(t, new y(0, 0, -1), new y(1, 0, 0), n); + break; + case Uc.FrontToRight: + this.lookAtEx(t, new y(0, 0, -1), new y(-1, 0, 0), n); + break; + case Uc.RightToTop: + this.lookAtEx(t, new y(-1, 0, 0), new y(0, -1, 0), n); + break; + case Uc.RightToBottom: + this.lookAtEx(t, new y(-1, 0, 0), new y(0, 1, 0), n); + break; + case Uc.RightToFront: + this.lookAtEx(t, new y(-1, 0, 0), new y(0, 0, -1), n); + break; + case Uc.RightToBack: + this.lookAtEx(t, new y(-1, 0, 0), new y(0, 0, 1), n); + break; + case Uc.BackToTop: + this.lookAtEx(t, new y(0, 0, 1), new y(0, -1, 0), n); + break; + case Uc.BackToBottom: + this.lookAtEx(t, new y(0, 0, 1), new y(0, 1, 0), n); + break; + case Uc.BackToLeft: + this.lookAtEx(t, new y(0, 0, 1), new y(-1, 0, 0), n); + break; + case Uc.BackToRight: + this.lookAtEx(t, new y(0, 0, 1), new y(1, 0, 0), n); + break; + case Uc.LeftToTop: + this.lookAtEx(t, new y(1, 0, 0), new y(0, 0, -1), n); + break; + case Uc.LeftTopBottom: + this.lookAtEx(t, new y(1, 0, 0), new y(0, 1, 0), n); + break; + case Uc.LeftTopBack: + this.lookAtEx(t, new y(1, 0, 0), new y(0, 0, 1), n); + break; + case Uc.LeftTopFront: + this.lookAtEx(t, new y(1, 0, 0), new y(0, 0, -1), n); + break; + case Uc.Keep: + break; + default: + this.lookAtEx(t, new y(-1, -1, -1), new y(0, 0, 1), n) + } + return this.updateProjectionMatrix(), + t + }, + cp.prototype.zoomToBox = function (A, e, t, i) { + t = t || 1, + e = -1 > (e = e || 0) ? -1 : e; + var o = new aA; + if (o.copy(A), + 0 !== e) { + var n = .5 * A.getSize(new y).length(), + r = new y; + r.subVectors(o.max, o.min).normalize(), + r.multiplyScalar(n * e), + o.expandByVector(r) + } + var s = i || this.getWorldDirection(new y), + l = this.up, + c = this.aspect, + h = a.degToRad(.5 * this.fov), + d = o.getSize(new y), + p = o.getCenter(new y), + g = .5 * d.length() / Math.sin(h) * t, + u = new y; + u.copy(s), + u.setLength(g); + var f = new y; + f.subVectors(p, u); + var m = new y; + m.crossVectors(s, l), + m.normalize(); + var C = new y; + C.crossVectors(s, m), + C.normalize(); + var v = new EA; + v.setFromNormalAndCoplanarPoint(m, f); + var I = new EA; + I.setFromNormalAndCoplanarPoint(C, f); + var E = 0, + B = 0, + x = 0, + S = 0, + w = 0, + M = [new y, new y, new y, new y, new y, new y, new y, new y]; + M[0].set(o.min.x, o.min.y, o.min.z), + M[1].set(o.min.x, o.min.y, o.max.z), + M[2].set(o.min.x, o.max.y, o.min.z), + M[3].set(o.min.x, o.max.y, o.max.z), + M[4].set(o.max.x, o.min.y, o.min.z), + M[5].set(o.max.x, o.min.y, o.max.z), + M[6].set(o.max.x, o.max.y, o.min.z), + M[7].set(o.max.x, o.max.y, o.max.z); + for (var b = 0; 8 > b; b += 1) { + var U = new y; + U.subVectors(M[b], f); + var F = Math.abs(U.dot(s)), + K = Math.abs(I.distanceToPoint(M[b])), + Q = K * c, + R = Math.abs(v.distanceToPoint(M[b])), + T = Math.max(K, R / c), + k = Math.max(Q, R); + T > E && (E = T), + B && x && B * F / x >= T || (B = T, + x = F), + S && w && S * F / w >= k || (S = k, + w = F) + } + var D = S / Math.tan(h) + (g - w), + L = B / Math.tan(h) + (g - x), + N = 0; + if (N = 1 > c ? Math.max(D, L) : Math.min(D, L), + this.near > N) { + this.near = (N * N + .001 * N) / 16777.216 + } + if (u.copy(s).normalize().setLength(N), + f.subVectors(p, u), + this.position.copy(f), + this.lookAt(p), + this.target.copy(p), + !this.isPerspective) { + var O = Math.tan(this.fov * Math.PI / 180 / 2) * N; + this.orthoScale = O / E, + this.zoom = this.orthoScale + } + return this.updateProjectionMatrix(), + this.dirty = !0, + p + }, + cp.prototype.computeRay = function (A, e, t) { + var i = new s; + if (void 0 === t) + i.x = window.innerWidth, + i.y = window.innerHeight; + else { + var o = t === document ? t.body : t; + i.x = o.offsetWidth, + i.y = o.offsetHeight + } + var n = new s; + n.x = A / i.x * 2 - 1, + n.y = -e / i.y * 2 + 1; + var r = new CA; + return this.isPerspective ? (r.origin.copy(this.position), + r.direction.set(n.x, n.y, .5).unproject(this).sub(this.position).normalize()) : (r.origin.set(n.x, n.y, -1).unproject(this), + r.direction.set(0, 0, -1).transformDirection(this.matrixWorld)), + r + }, + cp.prototype.screenToWorld = function (A, e, t, i) { + var o = this.computeRay(A, e, t), + n = this.getWorldDirection(new y).normalize(), + r = new EA(n); + return r.setFromNormalAndCoplanarPoint(n, i), + o.intersectPlane(r, i) + }, + cp.prototype.getWorldFrustum = function (A) { + var e = new M, + t = new Ze, + i = this.clone(), + o = this.target, + n = o.clone().sub(this.position).length(), + r = new M; + r.getInverse(A); + var a = new M; + a.extractRotation(A); + var s = new f; + s.setFromRotationMatrix(a), + s.inverse(), + i.position.applyMatrix4(r); + var l = o.clone(); + l.applyMatrix4(r); + var c = l.clone().sub(i.position), + h = c.length(); + return c.normalize(), + i.far = this.far * (h / n), + i.up.applyQuaternion(s).normalize(), + i.realUp.applyQuaternion(s).normalize(), + i.updateProjectionMatrix(), + i.updateMatrixWorld(), + e.getInverse(i.matrixWorld), + t.setFromMatrix((new M).multiplyMatrices(i.projectionMatrix, e)), + i = null, + t + }, + cp.prototype.distanceFromWorldToDrawing = function (A, e) { + var t = this.position.clone(), + i = this.target.clone(); + i.subVectors(this.target, this.position), + i.normalize(); + var o = new M; + return o.getInverse(A), + i.add(t).applyMatrix4(o), + t.applyMatrix4(o), + i.sub(t), + i.normalize().multiplyScalar(e), + i.add(t).applyMatrix4(A), + i.sub(this.position), + i.length() + }, + cp.drawingToWorld = function (A, e) { + var t = A.position.clone(), + i = A.target.clone(), + o = A.up.clone(), + n = new M; + return n.getInverse(e), + o.add(t), + o.applyMatrix4(n), + t.applyMatrix4(n), + i.applyMatrix4(n), + o.sub(t), + o.normalize(), { + position: t, + target: i, + up: o + } + }, + cp.worldToDrawing = function (A, e) { + var t = A.position.clone(), + i = A.target.clone(), + o = A.up.clone(); + return o.add(t), + o.applyMatrix4(e), + t.applyMatrix4(e), + i.applyMatrix4(e), + o.sub(t), + o.normalize(), { + position: t, + target: i, + up: o + } + }; + var hp = function () { + var A = this, + e = null, + t = {}, + i = {}, + o = 1e3, + n = null, + r = null, + a = null, + s = !1, + l = null, + c = null, + h = null; + this.from = function (A) { + for (var i in e = A) + e.hasOwnProperty(i) && (t[i] = e[i]); + return this + }, + this.to = function (A, e) { + return void 0 !== e && (o = e), + i = A, + this + }, + this.onStart = function (A) { + return l = A, + this + }, + this.onUpdate = function (A) { + return c = A, + this + }, + this.onComplete = function (A) { + return h = A, + this + }, + this.start = function (A, d) { + s = !1, + r && cancelAnimationFrame(r), + n = Date.now(), + a = d ? this.linearInterpolateForTargetPostionUp : this.interpolate, + r = requestAnimationFrame((function d() { + var p = t, + g = i, + u = Date.now(); + !1 === s && (null !== l && l(e), + s = !0); + var f = (u - n) / o; + e = a(p, g, f = f > 1 ? 1 : f), + 1 === f ? (cancelAnimationFrame(r), + null !== h && h(e)) : (r = requestAnimationFrame(d, A), + null !== c && c(e, f)) + }), A) + }, + this.isAngleGreaterThanPi = function (A, e, t) { + var i = new y; + return i.crossVectors(A, e), + 0 > i.dot(t) + }, + this.conicInterpolate = function (A, e, t, i) { + var o = -e.angleTo(A) * i, + n = new y; + n.crossVectors(e, A).normalize(); + var r = new f; + r.setFromAxisAngle(n, o), + t.copy(A), + t.applyQuaternion(r) + }, + this.quaternionInterpolate = function (A, e, t, i, o) { + var n = new f(A.x, A.y, A.z, 1).normalize(), + r = new f(e.x, e.y, e.z, 1).normalize(), + a = new f(0, 0, 0, 1), + s = new f(0, 0, 0, 1), + l = new y; + l.crossVectors(A, t).normalize(), + a.set(l.x, l.y, l.z, 1).normalize(); + .5 > o ? (f.slerp(n, a, s, 2 * o), + i.set(s.x, s.y, s.z)) : (f.slerp(a, r, s, 2 * (o - .5)), + i.set(s.x, s.y, s.z)) + }, + this.slerpInterpolate = function (A, e, t, i, o, n) { + var r = A.dot(e); + r > n ? i.copy(e) : n < Math.abs(r) ? this.quaternionInterpolate(A, e, t, i, o) : this.conicInterpolate(A, e, i, o), + i.normalize() + }, + this.linearInterpolate = function (A, e, t, i, o) { + if (A.equals(e)) + t.copy(e); + else { + var n = new y(1, 0, 0), + r = new y(0, 0, 1), + a = new y, + s = A.dot(e); + s > o ? t.copy(e) : -s > o ? (o > Math.abs(A.dot(r)) ? a.crossVectors(A, r).normalize() : a.crossVectors(A, n).normalize(), + .5 > i ? t.lerpVectors(A, a, 2 * i) : t.lerpVectors(a, e, 2 * (i - .5))) : t.lerpVectors(A, e, i), + t.normalize() + } + }, + this.linearInterpolatePosition = function (A, e, t, i) { + t.lerpVectors(A, e, i) + }, + this.sphericalInterpolate = function (A, e, t, i, o, n) { + var r = A.clone().sub(e), + a = t.clone().sub(i), + s = new Os; + s.setFromVector3(r); + var l = new Os; + l.setFromVector3(a); + var c = s.theta + (l.theta - s.theta) * n, + h = s.phi + (l.phi - s.phi) * n, + d = r.length(), + p = new Os; + p.set(d, h, c); + var g = new y; + g.setFromSpherical(p), + o.copy(g).multiplyScalar(-1) + }, + this.interpolate = function (e, t, i) { + var o = new y, + n = new y, + r = new y, + a = new y, + s = e.animTarget, + l = e.animUp, + c = e.animFocal, + h = t.animTarget, + d = t.animUp, + p = t.animFocal; + return A.sphericalInterpolate(e.animPos, s, t.animPos, h, o, i), + A.linearInterpolate(l, d, n, i, .9995), + A.linearInterpolatePosition(s, h, r, i), + A.linearInterpolatePosition(c, p, a, i), { + animDir: o, + animUp: n, + animFocal: a, + animTarget: r + } + }, + this.linearInterpolateForTargetPostionUp = function (e, t, i) { + var o = new y, + n = new y, + r = new y, + a = e.animTarget, + s = e.animPosition, + l = t.animTarget, + c = t.animPosition; + return A.linearInterpolate(e.animUp, t.animUp, n, i, .9995), + A.linearInterpolatePosition(a, l, r, i), + A.linearInterpolatePosition(s, c, o, i), { + animPosition: o, + animUp: n, + animTarget: r + } + } + }, + dp = function () { + var A = 800, + e = 14, + t = new hp; + this.setDuration = function (e) { + A = e + }, + this.getDuration = function () { + return A + }, + this.setFrameTime = function (A) { + e = A + }, + this.setStandardView = function (i, o, n, r, a, s) { + var l = o.camera, + c = l.position.clone(), + h = l.target.clone(), + d = l.getWorldDirection(new y); + d.normalize(); + var p = new y; + p.copy(l.realUp || l.up), + p.normalize(); + var g = new y(l.position.clone().sub(h).length(), 0, 0), + u = l.setStandardView(i, n); + u = o.camera.zoomToBox(n, r); + var f = l.position.clone(), + m = l.getWorldDirection(new y); + m.normalize(); + var C = new y; + C.copy(l.realUp || l.up), + C.normalize(); + var v = new y(l.position.clone().sub(u).length(), 0, 0); + d.equals(m) && p.equals(C) && h.equals(u) && g.equals(v) ? s && s() : (o.getControlManager().setInteractiveState(!1), + t.from({ + animPos: c, + animDir: d, + animUp: p, + animTarget: h, + animFocal: g + }).to({ + animPos: f, + animDir: m, + animUp: C, + animTarget: u, + animFocal: v + }, A).onUpdate((function (A) { + o.camera.lookAtEx(A.animTarget, A.animDir, A.animUp, A.animFocal.x), + o.cameraControl.update(!0, !0), + o.controlManager.dispatchEvent({ + type: Rc.ON_CAMERA_ANIMATION_UPDATE + }), + a && a() + })).onComplete((function () { + o.camera.lookAtEx(u, m, C, v.x), + o.cameraControl.update(!0, !0), + s && s(), + o.getControlManager().setInteractiveState(!0) + })).start(e)) + }, + this.active = function (i, o, n, r, a) { + var s = n.camera, + l = new y(i.position.x, i.position.y, i.position.z), + c = new y(i.target.x, i.target.y, i.target.z), + h = new y(c.distanceTo(l), 0, 0), + d = c.clone().sub(l).normalize(), + p = new y(i.up.x, i.up.y, i.up.z); + p.normalize(); + var g = new y(o.position.x, o.position.y, o.position.z), + u = new y(o.target.x, o.target.y, o.target.z), + f = new y(u.distanceTo(g), 0, 0), + m = u.clone().sub(g).normalize(), + C = new y(o.up.x, o.up.y, o.up.z); + C.normalize(), + d.equals(m) && p.equals(C) && c.equals(u) && h.equals(f) ? a && a() : (n.getControlManager().setInteractiveState(!1), + t.from({ + animPos: l, + animDir: d, + animUp: p, + animTarget: c, + animFocal: h + }).to({ + animPos: g, + animDir: m, + animUp: C, + animTarget: u, + animFocal: f + }, A).onUpdate((function (A) { + var e = A.animTarget; + s.lookAtEx(e, A.animDir, A.animUp, A.animFocal.x), + r && r(e) + })).onComplete((function () { + s.lookAtEx(u, m, C, f.x), + r && r(u), + a && a(), + n.getControlManager().setInteractiveState(!0) + })).start(e)) + }, + this.slerpFlyTo = function (i, o, n, r) { + var a = o.camera, + s = a.position.clone(), + l = a.getWorldDirection(new y), + c = new y; + c.copy(a.realUp || a.up), + c.normalize(); + var h = a.target.clone(), + d = new y(a.position.clone().sub(h).length(), 0, 0), + p = (new y).set(i.position.x, i.position.y, i.position.z), + g = (new y).set(i.target.x, i.target.y, i.target.z), + u = (new y).set(i.up.x, i.up.y, i.up.z), + f = g.clone().sub(p), + m = new y(f.length(), 0, 0); + f.normalize(); + var C = u.normalize(); + l.equals(f) && c.equals(C) && h.equals(g) && d.equals(m) ? r && r() : t.from({ + animPos: s, + animDir: l, + animUp: c, + animTarget: h, + animFocal: d + }).to({ + animPos: p, + animDir: f, + animUp: C, + animTarget: g, + animFocal: m + }, A).onUpdate((function (A) { + var e = A.animTarget; + a.lookAtEx(e, A.animDir, A.animUp, A.animFocal.x), + n && n(e) + })).onComplete((function () { + a.lookAtEx(g, f, C, m.x), + n && n(g), + r && r(), + o.getControlManager().setInteractiveState(!0) + })).start(e) + }, + this.flyTo = this.slerpFlyTo, + this.linearFlyTo = function (i, o, n, r) { + var a = o.camera, + s = new y; + s.copy(a.realUp || a.up), + s.normalize(); + var l = a.target.clone(), + c = a.position.clone(), + h = (new y).set(i.position.x, i.position.y, i.position.z), + d = (new y).set(i.target.x, i.target.y, i.target.z), + p = (new y).set(i.up.x, i.up.y, i.up.z).normalize(); + c.equals(h) && s.equals(p) && l.equals(d) ? r && r() : t.from({ + animPosition: c, + animUp: s, + animTarget: l + }).to({ + animPosition: h, + animUp: p, + animTarget: d + }, A).onUpdate((function (A) { + var e = A.animTarget; + a.lookAtEXForTargetPositionUp(e, A.animPosition, A.animUp), + n && n(e) + })).onComplete((function () { + a.lookAtEXForTargetPositionUp(d, h, p), + n && n(d), + r && r(), + o.getControlManager().setInteractiveState(!0) + })).start(e, !0) + }, + this.linearActive = function (i, o, n, r, a) { + var s = n.camera, + l = (new y).set(i.position.x, i.position.y, i.position.z), + c = (new y).set(i.target.x, i.target.y, i.target.z), + h = (new y).set(i.up.x, i.up.y, i.up.z); + h.normalize(); + var d = (new y).set(o.position.x, o.position.y, o.position.z), + p = (new y).set(o.target.x, o.target.y, o.target.z), + g = (new y).set(o.up.x, o.up.y, o.up.z).normalize(); + l.equals(d) && h.equals(g) && c.equals(p) ? a && a() : t.from({ + animPosition: l, + animUp: h, + animTarget: c + }).to({ + animPosition: d, + animUp: g, + animTarget: p + }, A).onUpdate((function (A) { + var e = A.animTarget; + s.lookAtEXForTargetPositionUp(e, A.animPosition, A.animUp), + r && r(e) + })).onComplete((function () { + s.lookAtEXForTargetPositionUp(p, d, g), + r && r(p), + a && a(), + n.getControlManager().setInteractiveState(!0) + })).start(e, !0) + } + }, + pp = function () { + this.condition = [{ + type: "IfcWall" + }, { + type: "IfcRoof" + }, { + type: "IfcWallStandardCase" + }, { + type: "IfcDoor" + }, { + type: "墙" + }, { + type: "门" + }], + this.distance = 150, + this.factor = 1 + }; + pp.prototype.setCondition = function (A) { + Array.isArray(A) && (this.condition = A) + }, + pp.prototype.getCondition = function () { + return this.condition + }, + pp.prototype.getDistance = function () { + return this.distance + }, + pp.prototype.getFactor = function () { + return this.factor + }, + pp.prototype.setDistance = function (A) { + "number" == typeof A && (this.distance = A) + }, + pp.prototype.setFactor = function (A) { + "number" == typeof A && (this.factor = A) + }, + pp.prototype.matchConditions = function (A) { + var e = this.condition; + if (0 === e.length) + return !1; + for (var t = !0, i = 0, o = e.length; o > i; i += 1) { + var n = e[i]; + for (var r in n) + if (!A.hasOwnProperty(r) || A[r] !== n[r]) { + t = !1; + break + } + if (!0 === t) + break; + e.length - 1 > i && (t = !0) + } + return t + }, + pp.prototype.hasCollision = function (A, e) { + return !!A && (this.matchConditions(A) && this.distance * this.factor >= e) + }; + var gp = { + MODEL: "Model", + GEOMETRY: "Geometry", + LINESEGMENTS: "LineSegments", + INSTANCEGEOMETRY: "InstanceGeometry", + INSTANCEWIREFRAMEGEOMETRY: "InstanceWireframeGeometry", + WIREFRAME: "Wireframe", + MARKER3D: "Marker3D", + CLIPPLANE: "ClipPlane", + FILLCLIPPLANE: "FillClipPlane", + IBLCUBE: "IBLCube", + CUSTOMPLANE: "CustomPlane", + PIVOTBALL: "PivotBall", + MEASUREPICKPOINT: "MeasurePickPoint", + MEASUREPICKLINE: "MeasurePickLine", + MEASUREPLANE: "MeasurePlane", + MEASURELINE: "MeasureLine", + OCTREENODE: "OctreeNode", + AREANODE: "AreaNode", + AXISNET: "AxisNet", + AXISGRIDMANAGER: "AxisGridManager", + EXTRUDEBODYMANAGER: "ExtrudeBodyManager", + EXTERNALSCENEMANAGER: "ExternalSceneManager", + EXTERNALCOMPONENTMANAGER: "ExternalComponentManager", + TRANSFORM: "TRANSFORM", + RECEIVESHADOWPLANE: "ReceiveShadowPlane" + }, + up = function () { + this.scene = null, + this.camera = null, + this.octreeRoots = null, + this.octantMap = null, + this.mouse = new s + }, + fp = function (A) { + this.raycaster = new Dd, + this.viewer = A, + this.filter = A.getFilter(), + this.recursive = !0, + this.lastIntersect = null, + this.highPriorities = [gp.EXTRUDEBODYMANAGER] + }; + fp.prototype.destroy = function () { + this.viewer = null, + this.filter = null, + this.raycaster = null, + this.lastIntersect = null, + this.highPriorities = null + }, + fp.prototype.intersectExternalComponent = function (A, e, t, i, o) { + if (A.visible || o) { + for (var n = this.raycaster, r = this.filter, a = function A(e) { + var t = e, + i = []; + if (t.isGroup) + for (var o = 0, a = t.children.length; a > o; o += 1) { + var s = A(t.children[o]); + i = i.concat(s) + } + else + r._isPickable({ + userId: t.key + }) && t.raycast(n, i); + return i + }, s = {}, l = 0, c = A.children.length; c > l; l += 1) { + var h = A.children[l], + d = a(h); + if (d.length > 0) { + d.sort((function (A, e) { + return A.distance - e.distance + })), + d[0].userId = h.key; + var p = s[h.key]; + p ? p.distance > d[0].distance && (s[h.key] = d[0]) : s[h.key] = d[0] + } + } + var g = [], + u = Object.values(s); + if (u.length > 0) + for (var f = 0; u.length > f; f += 1) + u[f].distance > t.far || t.near > u[f].distance || this.viewer.clipPoint(u[f].point) || g.push(u[f]); + return i ? g : (g.sort((function (A, e) { + return A.distance - e.distance + })), + g.length > 0 ? g[0] : null) + } + }, + fp.prototype.defaultIntersect = function (A, e, t, i, o) { + if (A.visible || o) { + var n = [], + r = this.raycaster; + ! function A(e) { + for (var t = 0, i = e.children.length; i > t; t += 1) { + var o = e.children[t]; + o.isGroup ? A(o) : o.raycast(r, n) + } + }(A); + var a = []; + if (n.length > 0) + for (var s = 0; n.length > s; s += 1) + n[s].distance > t.far || t.near > n[s].distance || this.viewer.clipPoint(n[s].point) || a.push(n[s]); + return i ? a : (a.sort((function (A, e) { + return A.distance - e.distance + })), + a.length > 0 ? a[0] : null) + } + }, + fp.prototype.intersectMeshesWithDistance = function (A, e, t, i, o, n, r, a) { + if (!e || !e.mesh) + return null; + var s = 0, + l = uh.MinusEpsilon, + c = this.raycaster, + h = [], + d = this.filter, + p = d._hasVisibleFilter(), + g = d._hasPickableFilter(), + u = this.viewer.modelManager, + f = function (A, e) { + var t = u.isHiddenSourceObjectUserId(A.userId); + if (e) { + if (p && !d._isVisible(A) || g && !d._isPickable(A) || t) + return !0 + } else if (p && !d._isVisible(A) || t) + return !0; + return !1 + }; + !0 === this.byGravity ? i.near = 0 : i.near += l; + var m = e.info, + C = e.mesh, + y = []; + if (Bh.time("kdNode Pick"), + o && n && !n.explosioning) { + var v = [], + I = new M; + I.getInverse(n.getModelMatrix()); + var E = c.ray.clone().applyMatrix4(I); + if (Array.isArray(o)) + for (var B = new M, x = 0; o.length > x; x += 1) { + var S = o[x], + w = S.modelKey, + b = E; + if (w) + B.getInverse(n.subModel[w]), + b = E.clone().applyMatrix4(B); + S.intersect(b, v) + } + else + o.intersect(E, v); + y = uh.unique(v) + } else + y = n.getComponentlist(); + Bh.timeEnd("kdNode Pick"); + var U = Object.keys(n.manager.explosionList); + if (n && n.manager && U.length > 0 && (y = y.concat(U), + y = uh.unique(y)), + Object.keys(u.transformComponent).length > 0) { + for (var F in u.transformComponent) + y.push(F); + y = uh.unique(y) + } + var K = this.viewer.modelManager.getMatrixWorldGlobal(); + Bh.time("Box Pick"); + for (var Q = 0, R = y.length; R > Q; Q += 1) { + var T = m[y[Q]]; + if (T) { + var k = T[0]; + if (k) { + var D = k.boundingBox.clone(); + if (D.applyMatrix4(n.getModelMatrix()).applyMatrix4(K), + (s = c.ray.intersectBoxWithDistance(D)) >= i.near && i.far >= s) + for (var L = 0, N = T.length; N > L; L += 1) { + var O = T[L]; + if (!f(O, t)) { + var V = C[this.viewer.modelManager.getMeshIdFromOctantMap(O)]; + if (V) + for (var G = 0, P = V.length; P > G; G += 1) + h.push({ + object: V[G], + distance: s, + nodeInfo: O + }) + } + } + } + } + } + Bh.timeEnd("Box Pick"), + Bh.time("Ending Pick"), + h.sort((function (A, e) { + return A.distance - e.distance + })); + for (var q = [], j = 0; h.length > j; j += 1) + h[j].distance > i.far || i.near > h[j].distance || h[j].object.raycast(c, h[j].nodeInfo, i, this.viewer, q, a); + return q.sort((function (A, e) { + return A.distance - e.distance + })), + a ? q : (Bh.timeEnd("Ending Pick"), + q.length > 0 ? q[0] : null) + }, + fp.prototype.intersect = function (A, e, t, i) { + var o = this.raycaster; + null === e ? o.setFromCamera(A.mouse, A.camera) : o.set(e.origin, e.direction); + Bh.time("intersect time"), + o.camera = A.camera, + o._camera = A.camera, + o.viewportSize = A.viewportSize; + var n = new y; + A.camera.getWorldDirection(n); + for (var r = n.dot(o.ray.direction), a = { + near: A.camera.near / Math.abs(r), + far: A.camera.far / Math.abs(r) + }, s = null, l = [], c = A.scene.getGroups(), h = 0; c.length > h; h += 1) + if (c[h].isPickable() && 0 !== c[h].children.length) { + var d = A.scene.getGroupType(c[h].name), + p = d.groupType, + g = d.modelKey; + if (-1 < this.highPriorities.indexOf(d.groupType)) + (s = this.defaultIntersect(c[h], t, a, void 0, !0)) && (s.objectType = c[h].pickableType, + s.hoverEnabled = c[h].hoverEnabled, + l.push(s)); + else if (this.filter._isModelPickable(g)) { + switch (p) { + case gp.MODEL: + var u = this.viewer.modelManager.getModel(g); + s = u && u.isDataReady() && u.isVisible() ? this.intersectMeshesWithDistance([], A.octantMap[g], t, a, u.kdTreeNode, u) : null; + break; + case gp.GEOMETRY: + s = vc.MergeComponent ? null : this.intersectMeshesWithDistance(A.octantMap[g], A.octantMap, t, a); + break; + case gp.EXTERNALCOMPONENTMANAGER: + s = this.intersectExternalComponent(c[h], t, a); + break; + default: + s = this.defaultIntersect(c[h], t, a) + } + s && (s.objectType = c[h].pickableType, + s.hoverEnabled = c[h].hoverEnabled, + l.push(s)) + } + } + l.sort((function (A, e) { + return A.distance - e.distance + })), + Bh.timeEnd("intersect time"); + var f = l.length; + if (f > 0) { + l.sort((function (A, e) { + return A.distance - e.distance + })); + for (var m = 0; f > m; m += 1) { + var C = (s = l[m]).object; + if (C.geometry) + return s.userId = s.userId || C.key, + s.modelKey = C.modelKey, + this.lastIntersect = s, + s + } + } + return this.lastIntersect = { + intersect: s, + pickable: t + }, + null + }, + fp.prototype.getObjectsByClientCoordinates = function (A) { + var e = this.viewer.cameraControl.getIntersectContext(A), + t = this.raycaster; + return t.setFromCamera(e.mouse, e.camera), + t.camera = e.camera, + t.viewportSize = e.viewportSize, + this.getObjectsByRaycaster(e, t) + }, + fp.prototype.getObjectsByRaycaster = function (A, e, t) { + this.raycaster = e; + for (var i = { + near: t ? 0 : A.camera.near, + far: t ? 1 / 0 : A.camera.far + }, o = [], n = A.scene.getGroups(), r = 0; n.length > r; r += 1) + if (n[r].isPickable() && 0 !== n[r].children.length) { + var a = [], + s = A.scene.getGroupType(n[r].name); + switch (s.groupType) { + case gp.MODEL: + var l = s.modelKey, + c = this.viewer.modelManager.getModel(l); + c && c.isDataReady() && c.isVisible() && (a = this.intersectMeshesWithDistance([], A.octantMap[l], !1, i, c.kdTreeNode, c), + o = o.concat(a)); + break; + case gp.GEOMETRY: + break; + default: + a = this.defaultIntersect(n[r], !1, i, !0), + o = o.concat(a) + } + } + return o.sort((function (A, e) { + return A.distance - e.distance + })), + o + }, + fp.prototype.hitTest = function (A) { + var e = this.intersect(A, null, !1); + return null !== e ? e.point : null + }, + fp.prototype.pick = function (A, e) { + var t = this.intersect(A, null, !0); + return e && e(t), + t + }, + fp.prototype.getIntersectByRay = function (A, e) { + return this.intersect(A, e, !0) + }; + var mp = function (A, e, t, i) { + this.viewer = A, + this.camera = e, + this.domElement = t, + this.scene = A.getScene(), + this.intersector = new fp(A), + this.enabled = !0, + this.tempVector3 = new y, + this.pivot = null, + this.movementSpeed = 8e-4 * vc.SceneSize, + this.defaultMovementSpeed = this.movementSpeed, + this.minMovementSpeed = .01, + this.noZoom = !1, + this.minDistance = .1, + this.maxDistance = e.far - 2 * vc.SceneSize, + this.defaultThroughOutDistance = .1, + this.noRotate = !1, + this.rotateSpeed = 1, + this.noPan = !1, + this.keyPanSpeed = 2, + this.defaultKeyPanSpeed = this.keyPanSpeed, + this.minKeyPanSpeed = .01, + this.autoRotate = !0, + this.autoRotateSpeed = 2, + this.minDistance = 0, + this.maxDistance = 1 / 0, + this.minZoom = 0, + this.maxZoom = 1 / 0, + this.enablePolar = !1, + this.minPolarAngle = 0, + this.maxPolarAngle = Math.PI, + this.minAzimuthAngle = -1 / 0, + this.maxAzimuthAngle = 1 / 0, + this.enableDamping = !1, + this.dampingFactor = .25, + this.enableZoom = !0, + this.zoomSpeed = 1, + this.enableRotate = !0, + this.rotateSpeed = 1, + this.enablePan = !0, + this.enablePassThrough = !0, + this.isDisableRotate = !1, + this.noKeys = !1, + this._realManHeight = 1650; + var o, n, r, l, c, h, d, p = this, + g = 1e-6, + u = new y(0, 0, 1), + m = new y, + C = new f, + v = null, + I = !1; + + function E(A, e, t) { + if (null == t) + return !0; + var i = t[0], + o = t[1]; + if (i >= o) + return !1; + var n = p.camera, + r = n.position; + e || (e = r.clone()); + var a = n.getWorldDirection(new y), + s = n.realUp || n.up, + l = a.clone().cross(s).normalize(), + c = (new f).setFromAxisAngle(l, A); + r.clone().sub(e).normalize(); + var h = a.clone().negate(), + d = Math.PI - h.angleTo(u.clone()), + g = h.clone().projectOnPlane(u.clone()), + m = g.angleTo(u.clone()); + 0 > g.x && (m = 2 * Math.PI - m), + a.applyQuaternion(c).normalize(); + var C = a.clone().negate(), + v = Math.PI - C.angleTo(u.clone()), + I = C.clone().projectOnPlane(u.clone()), + E = I.angleTo(u.clone()); + if (0 > I.x && (E = 2 * Math.PI - E), + Math.abs(E - m) > .001) + return !1; + if (d > i && o > d) { + if (v > o || i > v) + return !1 + } else if ((d > o ? v - d : d - v) > 0) + return !1; + return !0 + } + + function B() { + var A = p.viewer.modelManager.sceneState; + if (A.hasSelection()) { + var e = p.viewer.getFilter(), + t = p.viewer, + i = e.getVisibleComponentSet(A.getSelectionSet()), + o = t.getBoundingBoxByIds(i); + if (o && !o.isEmpty()) + return o.getCenter() + } + return p.pivot ? p.pivot : p.scene.getBoundingBox().getCenter(new y) + } + + function x(A, e, t, i) { + var o = new M; + o.getInverse(e); + var n = new y(A.position.x, A.position.y, A.position.z), + r = n.clone(); + r.applyMatrix4(o); + var a = new y(t.x, t.y, t.z); + return a.add(n), + a.applyMatrix4(o), + a.sub(r).normalize().multiplyScalar(i), + a.add(r), + a.applyMatrix4(e), + a.sub(n), + a + } + this.collisionManager = new pp, + this.pivotBallGroup = null, + this.minDollyDistance = 10, + this.gravity = 0, + this.farFactor = 11.4514, + this.sceneLengthUnitFactor = 1, + this.destroy = function () { + this.viewer = null, + this.camera = null, + this.domElement = null, + this.scene = null, + this.intersector.destroy(), + this.intersector = null, + this.collisionManager = null, + this.pivotBallGroup = null + }, + this.isCameraChanging = function () { + return I + }, + this.setCameraChanging = function (A) { + I = A + }, + this.setCamera = function (A) { + this.camera = A + }, + this.getCamera = function () { + return this.camera.updateMVP(), + this.camera + }, + this.dirtyCamera = function (A) { + this.camera.dirty = A + }, + this.getFrustum = function () { + return this.camera.getFrustum() + }, + this.lockAxisZ = function (A) { + jh.LockAxisZ = A + }, + this.isLockedAxisZ = function () { + return jh.LockAxisZ + }, + this.setLockAxisZRange = function (A) { + jh.LockAxisZRange = A + }, + this.getLockAxisZRange = function () { + return jh.LockAxisZRange + }, + this.getClientSize = function () { + var A = p.domElement === document ? p.domElement.body : p.domElement; + return new s(A.clientWidth, A.clientHeight) + }, + this.delayHandle = function () { + this.timeoutId && clearTimeout(this.timeoutId), + this.timeoutId = setTimeout((function () { + p.update(!0, !0) + }), 200), + this.needUpdateRenderList(!1) + }, + this.processRotate = function (A, e) { + var t = this.getClientSize(), + i = -2 * Math.PI * A.x / t.x, + o = -2 * Math.PI * A.y / t.y; + p.handleRotation(i, o, e) + }, + this.handleRotation = function (A, e, t) { + var i = this.camera, + o = i.position, + n = i.target.clone(), + r = i.getWorldDirection(n), + a = n.clone().sub(o).length(), + s = null, + l = function (A) { + var e = null, + n = null, + s = null, + l = new y; + t ? (n = (e = o.clone().sub(t)).length(), + e.normalize(), + s = e.clone().applyQuaternion(A).normalize(), + i.position.copy(t).add(s.multiplyScalar(n)), + r.applyQuaternion(A).normalize(), + l.copy(o).add(r.multiplyScalar(a)), + i.target.copy(l)) : (r.applyQuaternion(A).normalize(), + l.copy(o).add(r.multiplyScalar(a)), + i.target.copy(l)) + }, + c = i.realUp || i.up, + h = r.clone().cross(c).normalize().clone().cross(r).normalize(); + i.realUp.copy(h); + var d = null; + if (jh.LockAxisZ) { + if (Math.abs(A) > Math.abs(e)) + d = u, + l(s = (new f).setFromAxisAngle(d, A)), + i.realUp.applyQuaternion(s).normalize(); + else if (null != jh.LockAxisZRange && Math.abs(e) > 1e-4) { + E(e, t, jh.LockAxisZRange) && (d = r.clone().cross(c).normalize(), + l(s = (new f).setFromAxisAngle(d, e)), + i.realUp.applyQuaternion(s).normalize(), + this.adjustCameraUp()) + } + } else + Math.abs(A) < Math.abs(e) ? Math.abs(e) > 1e-4 && (d = r.clone().cross(c).normalize(), + l(s = (new f).setFromAxisAngle(d, e)), + i.realUp.applyQuaternion(s).normalize(), + this.adjustCameraUp()) : (d = i.up.clone().normalize(), + l(s = (new f).setFromAxisAngle(d, A)), + i.realUp.applyQuaternion(s).normalize()); + this.dirtyCamera(!0), + this.setCameraChanging(!0) + }, + this.enabledPolar = function (A) { + jh.LockAxisZ = A + }, + this.setMinPolarAngle = function (A) { + "number" == typeof A && (Array.isArray(jh.LockAxisZRange) || (jh.LockAxisZRange = []), + jh.LockAxisZRange[0] = A) + }, + this.setMaxPolarAngle = function (A) { + "number" == typeof A && (Array.isArray(jh.LockAxisZRange) || (jh.LockAxisZRange = []), + jh.LockAxisZRange[1] = A) + }, + this.getMinPolarAngle = function () { + return jh.LockAxisZRange ? jh.LockAxisZRange[0] : null + }, + this.getMaxPolarAngle = function () { + return jh.LockAxisZRange ? jh.LockAxisZRange[1] : null + }, + this.adjustCameraForPan = function (A) { + var e = this.camera; + e.target.add(A), + e.position.add(A), + this.dirtyCamera(!0), + this.setCameraChanging(!0) + }, + this.updateCamera = function () { + var A = this.camera; + A.dirty && (A.lookAt(A.target), + A.updateMVP(), + this.adjustCameraUp(), + this.dispatchEvent({ + type: Rc.ON_CAMERA_CHANGE, + camera: this.camera + })) + }, + this.update = function (A, e) { + this.updateCamera(), + this.dispatchEvent({ + type: Rc.ON_CAMERA_CHANGE, + camera: this.camera + }); + var t = this.camera; + A ? (void 0 !== e && this.needUpdateRenderList(e), + i(), + m.copy(t.position), + C.copy(t.quaternion)) : (m.distanceToSquared(t.position) > g || 8 * (1 - C.dot(t.quaternion)) > g) && (i(), + m.copy(t.position), + C.copy(t.quaternion)) + }, + this.updateView = function (A) { + void 0 !== A && this.needUpdateRenderList(A), + this.dispatchEvent({ + type: Rc.ON_CAMERA_CHANGE, + camera: this.camera + }), + i() + }, + this.updateHighlight = function () { + this.dispatchEvent({ + type: Rc.ON_CAMERA_CHANGE, + camera: this.camera + }), + i(!0) + }, + this.needUpdateRenderList = function (A) { + this.viewer.controlManager.isUpdateRenderList = A + }, + this.pan = function (A, e) { + var t = p.domElement === document ? p.domElement.body : p.domElement, + i = new y; + + function o(A) { + var e = p.camera.matrix.elements; + i.set(e[0], e[1], e[2]), + i.multiplyScalar(-A), + p.camera.target.add(i), + p.camera.position.add(i) + } + + function n(A) { + var e = p.camera.matrix.elements; + i.set(e[4], e[5], e[6]), + i.multiplyScalar(A), + p.camera.target.add(i), + p.camera.position.add(i) + } + if (p.camera.isPerspective) { + var r = p.camera.position.clone().sub(p.camera.target).length(); + o(2 * A * (r *= Math.tan(p.camera.fov / 2 * Math.PI / 180)) / t.clientHeight), + n(2 * e * r / t.clientHeight) + } else + void 0 !== p.camera.top ? (o(A * (p.camera.right - p.camera.left) / t.clientWidth), + n(e * (p.camera.top - p.camera.bottom) / t.clientHeight)) : Bh.warn("WARNING: CloudPickEditor.js encountered an unknown camera type - pan disabled."); + this.dirtyCamera(!0), + this.setCameraChanging(!0) + }, + this.panOnWorld = (o = new y, + n = new y, + r = new y, + function (A, e, t, i) { + var a = p.getContainerDimensions(), + s = A.x - a.left, + l = A.y - a.top; + o.x = s / a.width, + o.y = l / a.height, + l = e.y - a.top, + n.x = (s = e.x - a.left) / a.width, + n.y = l / a.height, + r.subVectors(n, o); + var c = -r.x * i.x, + h = r.y * i.y, + d = p.getWorldRight().multiplyScalar(c), + g = p.getWorldUp().multiplyScalar(h); + t.addVectors(d, g), + p.dirtyCamera(!0), + p.setCameraChanging(!0) + } + ), + this.adjustCameraForDolly = function (A, e) { + var t = A - 1; + if (t *= this.zoomSpeed, + Math.abs(t) < g) + return !1; + var i = this.camera, + o = i.position, + n = this.getWorldEye(), + r = new y; + e ? r.subVectors(e, o) : r.copy(n), + r.multiplyScalar(t); + var a = r.length(); + i.isPerspective ? this.minDollyDistance > a && r.normalize().multiplyScalar(this.minDollyDistance) : (i.orthoScale *= A, + i.setZoom(i.orthoScale)); + var s = new y; + s.addVectors(o, r), + this._goingToDolly(i, s, t) ? (i.position.copy(s), + i.target.copy(n.add(s)), + this.dirtyCamera(!0), + this.setCameraChanging(!0)) : this.resetCameraToMaximumRange() + }, + this._goingToDolly = function (A, e, t) { + if (!A.isPerspective || !vc.ConstraintZoom) + return !0; + var i = this.scene.getBoundingBox(); + if (t > 0) + return !!A.getFrustum().intersectsBox(i); + var o = i.getSize(this.tempVector3).length(), + n = i.getCenter(this.tempVector3), + r = .5 * o / Math.tan(a.degToRad(.5 * A.fov)) * this.farFactor; + return e.distanceTo(n) < r + }, + this.dolly = function (A, e, t) { + var i = new s(A, e), + o = this.getIntersectContext(i), + n = this.intersector.hitTest(o); + this.adjustCameraForDolly(t, null !== n ? n : null) + }, + this.dollyByPoint = function (A, e, t) { + var i = this.getTrackingPoint(A, e); + this.adjustCameraForDolly(t, i) + }, + this.endOperation = function () { + this.intersector.lastIntersect = null + }, + this.zoom = function (A, e, t) { + var i; + i = 1 + A, + void 0 === e || void 0 === t ? this.adjustCameraForDolly(i, null) : this.dollyByPoint(e, t, i), + this.update() + }, + this.getContainerDimensions = function () { + return xh.getDomOffsetToClient(this.domElement) + }, + this.computeFrustum = (l = new M, + c = new M, + function (A, e, t, i, o, n) { + var r = this.camera, + s = r.near * Math.tan(a.degToRad(.5 * r.fov)), + h = s * r.aspect; + l.makePerspective(((A - n.left) / n.width * 2 - 1) * h, ((e - n.left) / n.width * 2 - 1) * h, (-(t - n.top) / n.height * 2 + 1) * s, (-(i - n.top) / n.height * 2 + 1) * s, r.near, r.far), + r.updateMatrixWorld(), + r.matrixWorldInverse.getInverse(r.matrixWorld), + c.multiplyMatrices(l, r.matrixWorldInverse), + o.setFromProjectionMatrix(c) + } + ), + this.screenToCanvas = function (A, e) { + var t = this.getContainerDimensions(); + return { + x: A - t.left, + y: e - t.top + } + }, + this.mapScreenToLocal = function (A, e, t) { + var i = this.getContainerDimensions(); + t.set(A - i.left, i.height - (e - i.top)) + }, + this.mapWindowToViewport = function (A, e, t) { + var i = this.getContainerDimensions(), + o = t || new s; + return o.x = (A - i.left) / i.width * 2 - 1, + o.y = -(e - i.top) / i.height * 2 + 1, + o + }, + this.getCameraName = function () { + return this.camera === this.viewer.defaultCamera ? this.camera.isPerspective ? Ec.PERSPECTIVE : Ec.ORTHOGRAPHIC : this.camera.name + }, + this.getCameraInfo = function () { + var A = new Qd(this.getCameraName(), this.camera.position, this.camera.target, this.camera.up); + return JSON.stringify(A) + }, + this.isKeepZoom = function (A, e, t) { + this.dirtyCamera(!0), + this.setCameraChanging(!0), + void 0 === e && (e = this.minDistance), + void 0 === t && (t = this.maxDistance); + var i = this.camera.position, + o = this.camera.target, + n = new y; + n.copy(i).sub(o); + var r = n.length() * (2 - A); + return !(e > r || r > t) + }, + this.computeRotation = function () { + var A = new M; + A.lookAt(this.camera.position, this.camera.target, this.camera.up); + var e = new f; + e.setFromRotationMatrix(A); + var t = new F; + return t.setFromQuaternion(e, void 0, !1), + t + }, + this.adjustCameraUp = function () { + this.camera.realUp.z > 0 ? this.camera.up = new y(0, 0, 1) : 0 > this.camera.realUp.z ? this.camera.up = new y(0, 0, -1) : this.camera.realUp.x > 0 ? this.camera.up = new y(1, 0, 0) : 0 > this.camera.realUp.x ? this.camera.up = new y(-1, 0, 0) : this.camera.realUp.y > 0 ? this.camera.up = new y(0, 1, 0) : 0 > this.camera.realUp.y && (this.camera.up = new y(0, -1, 0)) + }, + this.getWorldEye = function () { + return this.camera.target.clone().sub(this.camera.position) + }, + this.getWorldRight = function () { + var A = new y, + e = this.camera.up, + t = this.getWorldEye(); + return A.crossVectors(t, e), + 0 === A.lengthSq() && (e.z > e.y ? t.y -= 1e-4 : t.z += 1e-4, + A.crossVectors(t, e)), + A.normalize() + }, + this.getWorldRightByRealUp = function () { + var A = new y, + e = this.camera.realUp, + t = this.getWorldEye(); + return A.crossVectors(t, e), + 0 === A.lengthSq() && (e.z > e.y ? t.y -= 1e-4 : t.z += 1e-4, + A.crossVectors(t, e)), + A.normalize() + }, + this.getWorldUp = function () { + var A = this.getWorldRight(), + e = this.getWorldEye(); + return A.cross(e).normalize() + }, + this.getWorldDimension = function (A, e) { + var t = this.camera.position, + i = this.getWorldEye().normalize(), + o = this.getTrackingPoint(A, e).clone().sub(t), + n = Math.abs(i.dot(o)), + r = this.getContainerDimensions(), + l = r.width / r.height, + c = 2 * n * Math.tan(a.degToRad(.5 * this.camera.fov)); + return new s(c * l, c) + }, + this.getWorldPointFromNearPlane = function (A, e) { + var t = new y(A, e, 0); + return t.unproject(this.camera), + t + }, + this.getTrackingPoint = function (A, e) { + var t = new s(A, e), + i = this.getIntersectContext(t), + o = this.intersector.hitTest(i), + n = this.camera.position; + if (!o) { + var r = i.mouse, + a = this.getWorldEye(), + l = a.clone().normalize(), + c = this.getWorldPointFromNearPlane(r.x, r.y), + h = new CA; + if (this.camera.isPerspective) + h.origin.copy(n), + h.direction.copy(c.clone().sub(n).normalize()); + else { + var d = c.clone(); + d.sub(a), + h.origin.copy(d), + h.direction.copy(l) + } + if (v) { + var p = new EA; + if (p.setFromNormalAndCoplanarPoint(l, v), + o = h.intersectPlane(p, new y)) { + var u = o.distanceTo(n); + g > u && (o = this.getTrackingPointFromBoundingBox(l, h)) + } else + o = this.getTrackingPointFromBoundingBox(l, h) + } else + o = this.getTrackingPointFromBoundingBox(l, h); + o || (Bh.log("tracking point is default!"), + o = c) + } + return n.equals(o) && (o = null), + v = o && o.clone(), + o + }, + this.getTrackingPointFromBoundingBox = function (A, e) { + return this.viewer.getScene().getTrackingPointFromBoundingBox(A, e) + }, + this.setCameraPosition = function (A) { + var e = this.camera, + t = this.getWorldEye(), + i = t.length(), + o = t.clone(); + o.normalize(), + o.setLength(i), + e.position.copy(A), + e.target.addVectors(e.position, o), + this.dirtyCamera(!0), + this.setCameraChanging(!0) + }, + this.moveStraight = function (A, e) { + var t = this.camera.position, + i = this.camera.target; + if (e) { + var o = new y(i.x - t.x, 0, i.z - t.z), + n = A / o.length(), + r = new y(o.x * n, 0, o.z * n); + t.add(r), + i.add(r) + } else { + var a = i.clone().sub(t); + this.camera.translateZ(-A), + i.addVectors(t, a) + } + this.dirtyCamera(!0), + this.setCameraChanging(!0) + }, + this.getIntersectContext = function (A) { + var e = new up; + return e.scene = p.viewer.getScene(), + e.camera = this.camera, + null !== A && this.mapWindowToViewport(A.x, A.y, e.mouse), + e.viewportSize = p.viewer.getRenderer().getSize(new s), + e.octantMap = p.viewer.modelManager.octantToObjectMap, + e + }, + this.getLastIntersect = function () { + return this.intersector.lastIntersect + }, + this.calculatePivot = function (A, e) { + var t = this, + i = this.viewer, + o = i.getFilter(), + n = i.getScene(), + r = null; + + function a(A) { + var e = t.getIntersectContext(A), + i = t.intersector.hitTest(e); + if (i) + return i; + var o = n.getBoundingBox(); + if (n.hasClipPlanes() && n.getClipPlanes().isEnabled()) { + var r = n.getClipPlanes().getClipBoundingBox(); + o.intersect(r) + } else if (n.hasFillClipPlanes() && n.getFillClipPlane().isEnabled()) { + var a = n.getFillClipPlane().getFillClipBoundingBox(); + o.intersect(a) + } + return o.getCenter(new y) + } + var s = null, + l = null; + switch (A) { + case kc.SELECTION: + if (n.hasClipPlanes() && n.getClipPlanes().isEnabled() && (s = n.getClipPlanes().getClipBoundingBox()) && !s.isEmpty() && n.getClipPlanes().isVisible()) { + r = s.getCenter(); + break + } + n.hasFillClipPlanes() && n.getFillClipPlane().isEnabled() && (l = n.getFillClipPlane().getFillClipBoundingBox()); + var c = o.getVisibleComponentSet(i.modelManager.sceneState.getSelectionSet(), i), + h = i.getBoundingBoxByIds(c); + mh.isMobileDevice() || !h || h.isEmpty() ? r = a(e) : (s ? h.intersect(s) : l && h.intersect(l), + r = h.getCenter(new y)); + break; + case kc.CENTER: + r = n.getBoundingBoxWorld().getCenter(new y); + break; + case kc.CAMERA: + r = null; + break; + default: + r = a(e) + } + return this.dirtyCamera(!0), + this.setCameraChanging(!0), + this.pivot = r, + r + }, + this.touchUpdateRotationInPersonView = function (A, e) { + this.dirtyCamera(!0), + this.setCameraChanging(!0); + var t = this, + i = this.camera.position, + o = this.camera.target.clone().sub(i).length(), + n = this.camera.getWorldDirection(new y), + r = this.camera.realUp || this.camera.up, + a = n.clone().cross(r).normalize(), + s = a.clone().cross(n).normalize(); + this.camera.realUp.copy(s); + var l = jh.LockAxisZRange, + c = null, + h = null; + if (Math.abs(A) > Math.abs(e)) + c = u, + h = A; + else { + if (jh.LockAxisZ && !E(e, this.camera.target, l)) + return; + c = a; + var d = new y(0, 0, 1).clone().cross(r), + p = d.dot(a), + m = Math.asin(d.length()); + 0 > p && (m = -m), + m + e > Math.PI / 4 - g ? e = Math.PI / 4 - g - m : m + e < -Math.PI / 4 + g && (e = -Math.PI / 4 + g - m), + h = e + } + var C, v, I = (new f).setFromAxisAngle(c, h); + C = I, + v = new y, + n.applyQuaternion(C).normalize(), + v.copy(i).add(n.multiplyScalar(o)), + t.camera.target.copy(v), + this.camera.realUp.applyQuaternion(I).normalize() + }, + this.touchUpdateRotationInModelView = function (A, e, t) { + this.dirtyCamera(!0), + this.setCameraChanging(!0); + var i = t || this.scene.getBoundingBox().getCenter(new y), + o = this.camera.position, + n = this.camera.target.clone().sub(o).length(), + r = o.clone().sub(i), + a = r.length(), + s = null, + l = this.camera.getWorldDirection(new y); + r.normalize(); + var c = function (A) { + var e = new y, + t = r.clone().applyQuaternion(A).normalize(); + o.copy(i).add(t.multiplyScalar(a)), + l.applyQuaternion(A).normalize(), + e.copy(o).add(l.multiplyScalar(n)), + p.camera.target.copy(e) + }, + h = this.camera.realUp || this.camera.up, + d = l.clone().cross(h).normalize(), + m = d.clone().cross(l).normalize(); + this.camera.realUp.copy(m); + var C = null; + if (jh.LockAxisZ) { + if (Math.abs(A) > Math.abs(e)) + C = u, + c(s = (new f).setFromAxisAngle(C, A)), + this.camera.realUp.applyQuaternion(s).normalize(); + else if (null != jh.LockAxisZRange && Math.abs(e) > 1e-4) { + E(e, i, jh.LockAxisZRange) && (C = l.clone().cross(h).normalize(), + c(s = (new f).setFromAxisAngle(C, e)), + this.camera.realUp.applyQuaternion(s).normalize(), + this.adjustCameraUp()) + } + } else if (Math.abs(A) > Math.abs(e)) + C = this.camera.up.clone().normalize(), + c(s = (new f).setFromAxisAngle(C, A)), + this.camera.realUp.applyQuaternion(s).normalize(); + else if (Math.abs(e) > .01) { + C = l.clone().cross(h).normalize(); + var v = new y(0, 1, 0).clone().cross(h), + I = v.dot(d), + x = Math.asin(v.length()); + 0 > I && (x = -x), + x + e > Math.PI / 2 - g ? e = Math.PI / 2 - g - x : x + e < -Math.PI / 2 + g && (e = -Math.PI / 2 + g - x), + c(s = (new f).setFromAxisAngle(C, e)), + this.camera.realUp.applyQuaternion(s).normalize(), + this.adjustCameraUp() + } + this.pivotBallGroup || function () { + p.pivotBallGroup = p.scene.getOrCreateGroup(gp.PIVOTBALL, { + priority: 10, + globalSpace: !1 + }); + var A = new er(15, 64, 64), + e = new Ue(A, new Ir({ + color: 16777215, + depthTest: !1, + opacity: .5, + transparent: !0, + side: 2 + })), + t = new Ue(A = new er(1, 64, 64), new Ir({ + color: 16711680, + depthTest: !1, + opacity: .5, + transparent: !0, + side: 2 + })); + p.pivotBallGroup.add(e), + p.pivotBallGroup.add(t) + }(), + this.pivotBallGroup.visible = !0; + for (var S = function () { + var A = p.camera, + e = A.position, + t = p.camera.target.clone().sub(e); + t.normalize(); + var i = new EA; + i.setFromNormalAndCoplanarPoint(t.clone().negate(), B()), + i.normalize(); + var o = i.distanceToPoint(e) * Math.tan(.5 * A.fov), + n = p.getContainerDimensions(); + return 2 * o / (n.height - n.top) + }(), w = B(), M = 0; this.pivotBallGroup.children.length > M; M += 1) { + var b = this.pivotBallGroup.children[M]; + b.position.copy(w), + b.scale.set(S, S, S), + b.updateMatrixWorld() + } + }, + this.touchUpdateRotation = function (A, e) { + var t = this.camera.position; + this.scene.getBoundingBox().containsPoint(t) ? this.touchUpdateRotationInPersonView(A, e) : this.touchUpdateRotationInModelView(A, e, B()) + }, + this.clearTouchRotateState = function () { + this.pivotBallGroup && (this.pivotBallGroup.visible = !1) + }, + this.touchEndHandler = function () { + this.viewer.controlManager.cameraChange = !1, + this.clearTouchRotateState(), + this.touchUpdate() + }, + this._adjustCameraForDolly = function (A, e) { + var t = e - 1; + if (Math.abs(t) < g) + return !1; + var i = this.camera, + o = i.position, + n = this.getWorldEye(), + r = new y; + A ? r.subVectors(A, o) : r.copy(n), + r.multiplyScalar(t); + var a = r.length(); + i.isPerspective && this.minDollyDistance > a && r.normalize().multiplyScalar(this.minDollyDistance); + var s = new y; + return s.addVectors(o, r), + i.isPerspective || (i.orthoScale *= e, + i.setZoom(i.orthoScale)), + i.position.copy(s), + i.target.copy(n.add(s)), + this.dirtyCamera(!0), + this.setCameraChanging(!0), + !0 + }, + this.touchDolly = function (A, e, t) { + var i = new s(A, e), + o = this.getIntersectContext(i), + n = this.intersector.hitTest(o); + this._adjustCameraForDolly(null !== n ? n : null, t) + }, + this.touchUpdate = (h = new y, + d = new f, + function () { + var A = new y; + A.copy(p.camera.up), + p.camera.up.copy(p.camera.realUp), + p.camera.lookAt(p.camera.target), + p.camera.up.copy(A), + p.camera.updateMVP(), + (h.distanceToSquared(p.camera.position) > g || 8 * (1 - d.dot(this.camera.quaternion)) > g) && (this.dispatchEvent({ + type: Rc.ON_CAMERA_CHANGE, + camera: this.camera + }), + i(), + p.dirtyCamera(!1), + h.copy(p.camera.position), + d.copy(p.camera.quaternion)) + } + ), + this.goTurnForWalk = function (A) { + var e = this.getCamera(), + t = e.position, + i = e.target, + o = new y(i.x - t.x, i.y - t.y, 0), + n = Math.cos(A), + r = Math.sin(A), + a = new y(o.x * n - o.y * r, o.x * r + o.y * n, 0); + i.x = t.x + a.x, + i.y = t.y + a.y, + this.dirtyCamera(!0), + this.setCameraChanging(!0) + }, + this.goPitchForWalk = function (A) { + var e = this.getCamera(), + t = e.position, + i = e.target, + o = i.x - t.x, + n = i.y - t.y, + r = new y(Math.sqrt(o * o + n * n), 0, i.z - t.z), + a = Math.cos(A), + s = Math.sin(A), + l = new y(r.x * a - r.z * s, 0, r.x * s + r.z * a); + i.z = t.z + l.z, + this.dirtyCamera(!0), + this.setCameraChanging(!0) + }, + this.goUpDownForWalk = function (A) { + var e = this.getCamera(), + t = e.position, + i = e.target, + o = new y(0, 0, 1), + n = x(e, this.scene.getMatrixGlobal(), o, A); + t.z += n.z, + i.z += n.z, + this.dirtyCamera(!0), + this.setCameraChanging(!0) + }, + this.stepCameraForWalk = function (A, e) { + var t = this.getCamera(), + i = t.position, + o = t.target, + n = new y(o.x - i.x, o.y - i.y, 0).normalize(), + r = new y(0, 0, 1), + a = n.clone().cross(r), + s = this.scene.getMatrixGlobal(), + l = null; + switch (A) { + case qc.FORWARD: + (l = x(t, s, n, e)).z = 0; + break; + case qc.BACK: + n.multiplyScalar(-1), + (l = x(t, s, n, e)).z = 0; + break; + case qc.LEFT: + a.multiplyScalar(-1), + (l = x(t, s, a, e)).z = 0; + break; + case qc.RIGHT: + (l = x(t, s, a, e)).z = 0 + } + i.add(l), + o.add(l), + this.dirtyCamera(!0), + this.setCameraChanging(!0) + }, + this.hitTestWithGround = function () { + var A = this.getCamera(), + e = A.up.clone().multiplyScalar(-1), + t = new CA(A.position.clone(), e), + i = this.getIntersectContext(null), + o = this.intersector.byGravity; + this.intersector.byGravity = !0; + var n = this.intersector.intersect(i, t, !1); + return this.intersector.byGravity = o, + n + }, + this.projectPositionToBottom = function (A) { + var e = void 0; + if (A instanceof Array) + e = new y(A[0], A[1], A[2]); + else { + if (!(A instanceof y)) + return; + e = A + } + this.getCamera(); + var t = new CA(e, new y(0, 0, -e.z).normalize()), + i = this.getIntersectContext(null), + o = this.intersector.byGravity; + this.intersector.byGravity = !0; + var n = this.intersector.intersect(i, t, !1); + if (this.intersector.byGravity = o, + n) + return n.point + }, + this.hitTestForward = function (A) { + var e = this.getCamera(), + t = this.getWorldEye(); + t.normalize(), + t = t.multiplyScalar(A); + var i = new CA(e.position.clone(), t), + o = this.getIntersectContext(null); + return o.camera.near = -1, + this.intersector.intersect(o, i, !1) + }, + this.hitTestRight = function (A) { + var e = this.getCamera(), + t = this.getWorldEye(); + t.normalize(); + var i = t.cross(e.up).normalize(); + i = i.multiplyScalar(A); + var o = new CA(e.position.clone(), i), + n = this.getIntersectContext(null); + return n.camera.near = -1, + this.intersector.intersect(n, o, !1) + }, + this.computeGravity = function () { + this.gravity = 0; + var A = this.hitTestWithGround(); + if (null === A) { + var e = this.scene.getMatrixGlobal(), + t = new M; + t.getInverse(e); + var i = this.camera.position.clone(); + i.applyMatrix4(t), + i.z = this.scene.getBoundingBoxWorld().min.z || 0, + i.applyMatrix4(e), + this.distanceToGround = Math.abs(this.camera.position.z - i.z) + } + if (void 0 === this.manHeight) + this.computeManHeight(); + else { + var o = A ? A.distance - this.manHeight : this.distanceToGround - this.manHeight; + if (o /= this.scene.getGlobalScaleFactor(), + .1 > Math.abs(o)) + return 0; + this.gravity = o + } + }, + this.computeManHeight = function () { + if (!this.manHeight) { + var A = this.hitTestWithGround(), + e = this.scene.getMatrixGlobal(), + t = new M; + if (t.getInverse(e), + null != A) { + var i = A.point.clone(); + i.applyMatrix4(t), + i.z += this._realManHeight * this.sceneLengthUnitFactor, + i.applyMatrix4(e), + this.manHeight = Math.abs(A.point.z - i.z) + } else { + var o = this.camera.position.clone(); + o.applyMatrix4(t), + o.z = 0; + var n = o.clone(); + n.z += this._realManHeight * this.sceneLengthUnitFactor, + o.applyMatrix4(e), + n.applyMatrix4(e), + this.manHeight = Math.abs(n.z - o.z) + } + } + }, + this.setRealManHeight = function (A) { + A !== this._realManHeight && (this._realManHeight = A, + this.manHeight = void 0) + }, + this.getRealManHeight = function () { + return this._realManHeight + }, + this.walkWithParallelEye = function () { + var A = this.camera, + e = this.getWorldEye().length(), + t = this.scene.getBoundingBox().getCenter(new y), + i = new y; + i.subVectors(t, A.position); + var o = i.length(); + i.z = 0, + i.normalize(), + i.multiplyScalar(o), + A.position.subVectors(t, i), + A.target.addVectors(A.position, i.normalize().multiplyScalar(e)); + var n = new y(0, 0, 1); + A.up.copy(n), + A.realUp.copy(n), + this.dirtyCamera(!0), + this.setCameraChanging(!0), + this.update(!0) + }, + this.updateFlyMove = function (A, e) { + var t = this.camera; + this.dirtyCamera(!0), + this.setCameraChanging(!0); + var i = qc; + A & i.FORWARD && t.translateZ(-e), + A & i.BACK && t.translateZ(e), + A & i.LEFT && t.translateX(-e), + A & i.RIGHT && t.translateX(e), + A & i.UP && t.translateY(e), + A & i.DOWN && t.translateY(-e), + this.flyOnWorld() + }, + this.flyOnWorld = function () { + var A = this.camera, + e = A.up.clone(); + A.realUp && A.up.copy(A.realUp), + A.lookAt(A.target), + A.realUp && A.up.copy(e), + this.updateCamera(), + this.adjustCameraUp(), + i(), + this.dirtyCamera(!1), + m.copy(A.position), + C.copy(A.quaternion) + }, + this.rotateForFly = function (A, e, t, i) { + var o = this.camera, + n = o.position, + r = o.target, + a = r.clone().sub(n), + s = new y(0, 1, 0), + l = o.realUp || o.up, + c = a.clone().cross(l).normalize(); + if (this.dirtyCamera(!0), + this.setCameraChanging(!0), + jh.LockAxisZ && (e = 0), + 0 !== e) { + var h = (new f).setFromAxisAngle(c, -e), + d = a.clone(); + d.applyQuaternion(h); + var p = d.angleTo(s); + t > (p -= .5 * Math.PI) || p > i || a.applyQuaternion(h) + } + if (0 !== A) { + var g = (new f).setFromAxisAngle(s, -A); + a.applyQuaternion(g) + } + r.addVectors(n, a), + this.flyOnWorld() + }, + this.fitAndRotateBySelection = function () { + var A = this.viewer; + A.setPointRotateMode(kc.SELECTION), + A.zoomToSelection() + }, + this.flyToPointWithParallelEye = function (A) { + var e = this.getWorldEye(), + t = e.length(), + i = e.clone(); + i.y = 0, + i.normalize(), + i.setLength(t); + var o = new y(0, 0, 1); + this.camera.up = o, + this.camera.realUp = o.clone(), + this.camera.position.copy(A), + this.camera.target.addVectors(this.camera.position, i), + this.update(!0) + }, + this.flyToPoint = function (A) { + var e = this.getWorldEye(); + this.camera.position.copy(A), + this.camera.target.addVectors(this.camera.position, e), + this.update(!0) + }, + this.setRoamingWalkAbsoluteHeight = function (A) {}, + this.setCameraHeight = function (A, e) { + this.cameraAbsoluteHeightEnabled = !1, + this.cameraRelativeHeight = e, + void 0 === this.cameraConstraintHeights ? this.cameraConstraintHeights = [] : this.cameraConstraintHeights.length = 0; + for (var t = 0, i = A.length; i > t; t += 1) + this.cameraConstraintHeights[t] = A[t] + }, + this.setCameraAbsoluteHeight = function (A) { + this.cameraAbsoluteHeightEnabled = !0, + this.cameraAbsoluteHeight = A + }, + this.updateCameraHeight = function () { + var A = this.scene, + e = this.getCamera(), + t = A.drawingToWorld(e.position), + i = t.z, + o = null, + n = null; + if (this.cameraAbsoluteHeightEnabled) + void 0 === this.cameraAbsoluteHeight && (this.cameraAbsoluteHeight = i), + o = this.cameraAbsoluteHeight; + else if (void 0 === this.cameraConstraintHeights) + o = i; + else { + var r = uh.findRange(this.cameraConstraintHeights, i); + if (o = this.cameraConstraintHeights[r], + o += this.cameraRelativeHeight, + this.cameraConstraintHeights.length - 1 > r) { + var a = this.cameraConstraintHeights[r + 1]; + o > a && (o = a) + } + } + o !== i && (n = A.worldToDrawing({ + x: t.x, + y: t.y, + z: o + }), + this.setCameraPosition(n)) + }, + this.getRaycaster = function (A, e) { + var t = new Dd, + i = new s; + return this.mapWindowToViewport(A, e, i), + t.setFromCamera(i, this.camera), + t + }, + this.translateCameraForWalk = function (A, e) { + var t = this.collisionManager; + if (0 !== A.x) + if (!1 === vc.EnableHitDetection) + this.stepCameraForWalk(qc.RIGHT, A.x * e); + else { + var i = 1; + 0 > A.x && (i = -1); + var o = this.hitTestRight(i); + if (o) { + var n = this.viewer.modelManager.getNodeInfosByUserId(o.userId); + if (!t.hasCollision({ + type: n ? n[0].type : null + }, o.distance)) { + var r = e; + Math.abs(e) > o.distance && (r = e > 0 ? o.distance - t.distance * t.factor - .1 * this.sceneLengthUnitFactor : t.distance * t.factor - o.distance + .1 * this.sceneLengthUnitFactor), + this.stepCameraForWalk(qc.RIGHT, A.x * r) + } + } else + this.stepCameraForWalk(qc.RIGHT, A.x * e) + } + if (0 !== A.y) + if (!1 === vc.EnableHitDetection) + this.stepCameraForWalk(qc.BACK, A.y * e); + else { + var a = 1; + A.y > 0 && (a = -1); + var s = this.hitTestForward(a); + if (s) { + var l = this.viewer.modelManager.getNodeInfosByUserId(s.userId); + if (!t.hasCollision({ + type: l ? l[0].type : null + }, s.distance)) { + var c = e; + Math.abs(e) > s.distance && (c = e > 0 ? s.distance - t.distance * t.factor - .1 * this.sceneLengthUnitFactor : t.distance * t.factor - s.distance + .1 * this.sceneLengthUnitFactor), + this.stepCameraForWalk(qc.BACK, A.y * c) + } + } else + this.stepCameraForWalk(qc.BACK, A.y * e) + } + if (0 !== A.z) + this.goUpDownForWalk(A.z * e * .5); + else { + var h = e; + if (0 !== this.gravity) { + var d = Math.abs(this.gravity); + h = d > h ? .2 * d : d + } + this.gravity > 0 ? this.goUpDownForWalk(-h) : 0 > this.gravity && this.goUpDownForWalk(h) + } + }, + this.rotateCameraForWalk = function (A, e) { + 0 !== A.x && (this.goPitchForWalk(A.x * Math.PI), + A.x = 0), + 0 !== A.z && (this.goTurnForWalk(-A.z * Math.PI * e), + A.z = 0) + }, + this.zoomCameraForWalk = function (A) { + this.adjustCameraForDolly(A, null) + }, + this.movePlane = function (A, e, t, i, o) { + if (void 0 === o) { + var n = new EA; + n.setComponents(A.x, A.y, A.z, A.w), + o = new y, + n.coplanarPoint(o) + } + var r = new y(A.x, A.y, A.z), + a = this.camera.getWorldDirection(new y), + s = new EA; + s.setFromNormalAndCoplanarPoint(a, o); + var l = this.getRaycaster(e.clientX, e.clientY), + c = new y, + h = this.getRaycaster(t.x, t.y), + d = new y; + if (l.ray.intersectPlane(s, c) && h.ray.intersectPlane(s, d)) { + c.subVectors(c, d), + c.projectOnVector(r); + var p = c.length(); + if (0 > c.dot(r) && (p = -p), + 0 !== p) + return i && (r.multiplyScalar(p), + p = r.x + r.y + r.z), + p + } + return null + }, + this.getZenith = function () { + var A = this.camera.position, + e = p.viewer.getBoundingBox().getCenter(); + return A.clone().sub(e.clone()).clone().angleTo(u.clone()) + }, + this.getAzimuth = function () { + var A = this.camera.position, + e = p.viewer.getBoundingBox().getCenter(), + t = A.clone().sub(e.clone()).clone().projectOnPlane(u.clone()), + i = t.angleTo(u.clone()); + return 0 > t.x && (i = 360 - i), + i + }, + this.getCurrentRangeofCamera = function () { + var A = this.camera, + e = this.viewer.getBoundingBox(), + t = e.getCenter(), + i = A.position, + o = .5 * e.getSize().length() / Math.tan(a.degToRad(.5 * A.fov)); + return t.distanceTo(i) / o + }, + this.setMaximalRangeofCamera = function (A) { + this.farFactor = A || 2 + }, + this.getMaximalRangeofCamera = function () { + return this.farFactor + }, + this.cameraWithinMaximumRange = function (A) { + var e = A || this.farFactor; + return this.getCurrentRangeofCamera() <= e + }, + this.resetCameraToMaximumRange = function (A) { + var e = this.camera, + t = this.viewer.getBoundingBox(), + i = t.getCenter(), + o = e.position, + n = this.farFactor; + "number" == typeof A && (n = A); + var r = (new y).subVectors(i, o), + s = .5 * t.getSize().length() / Math.tan(a.degToRad(.5 * e.fov)); + r.setLength(n * s); + var l = i.clone().sub(r), + c = this.getWorldEye(); + this.camera.position.copy(l), + this.camera.target.copy(c.add(l)), + this.updateView(!0) + }, + this.setZoomSpeed = function (A) { + "number" == typeof A && A > 0 && (this.zoomSpeed = A) + }, + this.getZoomSpeed = function () { + return this.zoomSpeed + }, + this.setZoomOutLimitRate = function (A) { + "number" == typeof A && A > 0 && (this.farFactor = A) + }, + this.getZoomOutLimitRate = function () { + return this.farFactor + }, + this.setSceneUnit = function (A) { + var e = 1; + switch (A) { + case "m": + e = .001; + break; + case "mm": + e = 1; + break; + case "km": + e = 1e-6; + break; + default: + e = 1 + } + this.collisionManager.setFactor(e), + this.sceneLengthUnitFactor = e + } + }; + Object.assign(mp.prototype, Ld.prototype); + var Cp = function () { + this.duration = 500, + this._state = null + }; + Cp.prototype.rotateCameraByViewCubeSide = function (A, e, t, i) { + var o = A.target.clone(), + n = e.getCenter(new y), + r = A.quaternion.clone(), + a = A.position.clone(), + s = this._calculateDistanceAndEuler(t, e), + l = (new f).setFromEuler(s.euler).inverse(), + c = new M; + c.makeRotationFromQuaternion(l); + var h = c.elements, + d = new y(-h[8], -h[9], -h[10]).normalize(); + d.setLength(s.distance); + var p = n.clone().sub(d); + if (!a.equals(p) || !r.equals(l)) { + var g = this._calculatePositionRotateInfo(r, l, a, p); + this._state && this._state.timerID && (cancelAnimationFrame(this._state.timerID), + this._state.timerID = void 0), + this._state = { + startTime: Date.now(), + startQuaternion: r, + endQuaternion: l, + startPosition: a, + endPosition: p, + startTarget: o, + endTarget: n, + positionRotateInfo: g, + onUpdate: i + }, + this._state.timerID = requestAnimationFrame(this._animate.bind(this)) + } + }, + Cp.prototype.cancelAnimation = function () { + this._state && this._state.timerID && (cancelAnimationFrame(this._state.timerID), + this._state = void 0) + }, + Cp.prototype._animate = function () { + if (this._state) { + var A = Date.now(), + e = this._state, + t = e.startTarget, + i = e.endTarget, + o = e.startQuaternion, + n = e.endQuaternion, + r = e.startPosition, + a = e.endPosition, + s = e.positionRotateInfo, + l = Math.min((A - e.startTime) / this.duration, 1); + l = this._easyOut(l); + var c = n.clone(); + o.equals(n) || f.slerp(o, n, c, l); + var h = a; + r.equals(a) || (h = s ? this._rotatePositionAroundCenter(s, r, a, l) : r.clone().lerp(a, l)); + var d = i.clone(); + t.equals(i) || (d = d.lerpVectors(t, i, l)), + "function" == typeof this._state.onUpdate && this._state.onUpdate(l, c, h, d), + 1 === l ? (cancelAnimationFrame(this._state.timerID), + this._state = null) : this._state.timerID = requestAnimationFrame(this._animate.bind(this)) + } + }, + Cp.prototype._calculateDistanceAndEuler = function (A, e) { + var t = -45, + i = 0, + o = -135, + n = 0, + r = e ? e.getSize(new y) : { + x: 0, + y: 0, + z: 0 + }; + switch (A) { + case Uc.Home: + break; + case Uc.Front: + t = -90, + i = 0, + o = 0; + break; + case Uc.Right: + t = -90, + i = 0, + o = -90; + break; + case Uc.Back: + t = -90, + i = 0, + o = -180; + break; + case Uc.Left: + t = -90, + i = 0, + o = -270; + break; + case Uc.Top: + t = 0, + i = 0, + o = 0; + break; + case Uc.Bottom: + t = -180, + i = 0, + o = -180; + break; + case Uc.TopFront: + t = -45, + i = 0, + o = -90; + break; + case Uc.TopRight: + t = -45, + i = 0, + o = -180; + break; + case Uc.TopBack: + t = -45, + i = 0, + o = 90; + break; + case Uc.TopLeft: + t = -45, + i = 0, + o = 0; + break; + case Uc.BottomFront: + t = -135, + i = 0, + o = 270; + break; + case Uc.BottomRight: + t = -135, + i = 0, + o = -180; + break; + case Uc.BottomBack: + t = -135, + i = 0, + o = 90; + break; + case Uc.BottomLeft: + t = -135, + i = 0, + o = 0; + break; + case Uc.FrontRight: + t = -90, + i = 0, + o = -135; + break; + case Uc.BackRight: + t = -90, + i = 0, + o = -225; + break; + case Uc.BackLeft: + t = -90, + i = 0, + o = 45; + break; + case Uc.FrontLeft: + t = -90, + i = 0, + o = -45; + break; + case Uc.TopFrontRight: + t = -45, + i = -0, + o = -135; + break; + case Uc.TopBackRight: + t = -45, + i = 0, + o = -225; + break; + case Uc.TopBackLeft: + t = -45, + i = 0, + o = -315; + break; + case Uc.TopFrontLeft: + t = -45, + i = 0, + o = -45; + break; + case Uc.BottomFrontRight: + t = -135, + i = 0, + o = -135; + break; + case Uc.BottomBackRight: + t = -135, + i = 0, + o = -225; + break; + case Uc.BottomBackLeft: + t = -135, + i = 0, + o = 45; + break; + case Uc.BottomFrontLeft: + t = -135, + i = 0, + o = -45 + } + var a = Math.PI / 180, + s = new F(t * a, i * a, o * a); + return 0 === (n = r.x + r.y + r.z) && (n = vc.SceneSize / 2), { + euler: s, + distance: n + } + }, + Cp.prototype._easyOut = function (A) { + return A * (2 - A) + }, + Cp.prototype._calculatePositionRotateInfo = function (A, e, t, i) { + var o = (new f).multiplyQuaternions(e, A.clone().inverse()); + o.normalize(); + var n = new y(o.x, o.y, o.z).normalize(), + r = 2 * Math.acos(o.w); + if (0 !== r) { + var a = null; + if (r === Math.PI) + a = (new y).addVectors(t, i).divideScalar(2); + else { + var s = (new y).addVectors(t, i), + l = (new y).subVectors(i, t), + c = n.clone().cross(l).normalize(), + h = .5 * l.length() / Math.tan(r / 2); + c.setLength(h), + a = (new y).addVectors(s.multiplyScalar(.5), c) + } + var d = null, + p = null, + g = (new y).subVectors(t, a), + u = g.length(), + m = (new y).subVectors(i, t); + if (r === Math.PI) + p = -1, + d = (new y).crossVectors(m, n); + else { + var C = (new y).subVectors(i, a); + p = Math.cos(r), + p = Math.max(-1, Math.min(1, p)), + d = C.clone().sub(g.clone().multiplyScalar(p)) + } + return { + center: a, + dot: p, + vec: d, + start: g, + radiusLength: u + } + } + }, + Cp.prototype._rotatePositionAroundCenter = function (A, e, t, i) { + if (0 === i) + return e; + if (i >= 1) + return t; + var o = Math.acos(A.dot) * i, + n = A.start.clone(), + r = A.vec.clone().normalize(), + a = n.multiplyScalar(Math.cos(o)), + s = r.multiplyScalar(Math.sin(o) * A.radiusLength), + l = a.add(s); + return l.add(A.center), + l + }; + var yp = function (A) { + this.name = A, + this._mousePressed = !1 + }; + yp.prototype.getName = function () { + return this.name + }, + yp.prototype.onExit = function () {}, + yp.prototype.destroy = function () {}, + yp.prototype.processMouseDown = function (A) { + return !1 + }, + yp.prototype.processMouseMove = function (A) { + return !1 + }, + yp.prototype.processMouseUp = function (A) { + return !1 + }, + yp.prototype.processMouseWheel = function (A) { + return !1 + }, + yp.prototype.processMouseDoubleClick = function (A) { + return !1 + }, + yp.prototype.processKeyDown = function (A) { + return !1 + }, + yp.prototype.processKeyUp = function (A) { + switch (A.keyCode) { + case qh: + this._mousePressed = !1 + } + return !1 + }, + yp.prototype.processTouchstart = function (A) { + return !1 + }, + yp.prototype.processTouchmove = function (A) { + return !1 + }, + yp.prototype.processTouchend = function (A) { + return !1 + }, + yp.prototype.processHover = function (A) { + return !1 + }, + yp.prototype.onEvent = function (A) { + var e = !1; + switch (A.type) { + case "touchmove": + e = this.processTouchmove(A); + break; + case "touchstart": + e = this.processTouchstart(A); + break; + case "touchend": + e = this.processTouchend(A); + break; + case "keydown": + e = this.processKeyDown(A); + break; + case "keyup": + e = this.processKeyUp(A); + break; + case "mousewheel": + case "DOMMouseScroll": + e = this.processMouseWheel(A); + break; + case "mousedown": + this._mousePressed = !0, + e = this.processMouseDown(A); + break; + case "mousemove": + e = this._mousePressed ? this.processMouseMove(A) : this.processHover(A); + break; + case "mouseup": + this._mousePressed = !1, + e = this.processMouseUp(A); + break; + case "dblclick": + e = this.processMouseDoubleClick(A) + } + return e + }; + var vp = function (A) { + yp.call(this, Pc.CLIP_BY_BOX), + this.viewer = A, + this.scene = A.getScene(), + this.enablePick = !1, + this.cameraControl = A.cameraControl, + this.clipStartPoint = new y, + this.startPt = new s, + this.onClipBox = !1, + this.mapLockedBoxFaces = {}, + this.mapBoxFaceIndex = { + 0: "right", + 1: "left", + 2: "top", + 3: "bottom", + 4: "front", + 5: "back" + }; + for (var e = [], t = 0; 6 > t; t += 1) + e.push(new EA); + var i = this.scene.getClipPlanes(!0); + i.updateClippingParams = function (t) { + if (0 === t.iClipPlane.value) + A.getRenderer().clippingPlanes = Object.freeze([]); + else { + for (var i = 0, o = t.iClipPlane.value; o > i; i += 1) { + var n = t.vClipPlane.value[i], + r = e[i]; + r.setComponents(-n.x, -n.y, -n.z, -n.w), + r.normalize() + } + A.getRenderer().clippingPlanes = e, + this.calculateClipBoundingBox(e) + } + }, + i.init(), + this.selectIndex = null, + this.planeDistance = 0, + this.offsetSpeed = .02, + this.toggle = function (A, e) { + i.enable(A, e) + }, + this.visible = function (A) { + i.visible = A + }, + this.rotatable = function (A) { + i.rotatable = A + }, + this.store = function () { + return i.store() + }, + this.restore = function (A) { + i.restore(A) + }, + this.reset = function () { + i.reset() + }, + this.pointToScreen = function (A) { + var e = this.cameraControl.camera, + t = new M; + t.multiplyMatrices(e.projectionMatrix, e.matrixWorldInverse); + var i = new p(A.x, A.y, A.z, 1); + i.applyMatrix4(t); + var o = new s; + o.x = (i.x / i.w + 1) / 2, + o.y = 1 - (i.y / i.w + 1) / 2; + var n = this.cameraControl.getContainerDimensions(); + return o.x = o.x * n.width + n.left, + o.y = o.y * n.height + n.top, + o + }, + this.getPlaneDistanceInScreen = function () { + if (null === this.selectIndex) + return null; + if (2 > this.selectIndex) { + var A = i.center.clone(), + e = i.center.clone(); + A.x -= i.cubeSize.x, + e.x += i.cubeSize.x; + var t = this.pointToScreen(A), + o = this.pointToScreen(e); + return t.x - o.x + } + var n = i.center.clone(), + r = i.center.clone(); + r.y -= i.cubeSize.y, + n.y += i.cubeSize.y; + var a = this.pointToScreen(r), + s = this.pointToScreen(n); + return a.y - s.y + }, + this.getPickPoint = function (A, e) { + var t = this.cameraControl.camera, + i = this.cameraControl.getContainerDimensions(), + o = (A - i.left) / i.width * 2 - 1, + n = (i.height - (e - i.top)) / i.height * 2 - 1, + r = new Dd; + return r.setFromCamera(new s(o, n), t), + r.ray.intersectPlane(this.plane) + }, + this.getSelectIndex = function () { + return i.selectIndex + }, + this._isVisible = function () { + return i.visible + }, + this.isRotate = function () { + return i.rotatable + }, + this.offset = function (A) { + var e = Math.floor(this.selectIndex / 2); + i.offset(this.selectIndex, this.selectIndex > 3 ? this.selectIndex % 2 == 1 ? -A * i.cubeSize.getComponent(e) * 2 : A * i.cubeSize.getComponent(e) * 2 : -A * i.cubeSize.getComponent(e) * 2) + }, + this.setSectionBox = function (A, e) { + var t = new aA(new y(A.x, A.y, A.z), new y(e.x, e.y, e.z)); + t.applyMatrix4(this.scene.getMatrixGlobal()), + i.setSectionBox(t.min, t.max) + }, + this.calculateOffsetByBox = function (A, e) { + var t = new aA(new y(A.x, A.y, A.z), new y(e.x, e.y, e.z)); + t.applyMatrix4(this.scene.getMatrixGlobal()), + t.setFromCenterAndSize(t.getCenter(), t.getSize().multiplyScalar(this.scene.getExpandScalar())), + i.calculateOffsetByBox(t.min, t.max) + }, + this.moveSectionPlane = function (A, e) { + i.moveSectionPlane(A, e) + }, + this.rotateSectionBox = function (A, e) { + i.rotateSectionBox(A, e) + }, + this.rotate = function (A, e) { + 2 === this.selectIndex || 3 === this.selectIndex ? i.rotX(e / 180 * Math.PI * .1) : i.rotY(A / 180 * Math.PI * .1) + }, + this.update = function (A) { + i.update(A) + }, + this.cancelHighLight = function () { + i.cancelHighLight() + }, + this.highLight = function () { + i.highLight() + }, + this.lockBoxFaces = function (A) { + var e = !0; + try { + for (var t, i = A[Symbol.iterator](); !(e = (t = i.next()).done); e = !0) { + this.mapLockedBoxFaces[t.value] = !0 + } + } catch (A) {} finally { + try { + !e && i.return && i.return() + } catch (A) {} + } + }, + this.unlockBox = function () { + this.mapLockedBoxFaces = {} + }, + this.setProcess = function (A, e) { + this.mapLockedBoxFaces[A] || i.setProcess(A, e) + }, + this.getProcess = function (A) { + return i.getProcess(A) + } + }; + (vp.prototype = Object.create(yp.prototype)).constructor = vp, + vp.prototype.destroy = function () { + this.cameraControl = null, + this.intersectPoint = null, + this.selectIndex = null, + this.normal = null, + this.plane = null, + this.pickHelper = null, + this.scene = null, + this.viewer = null + }, + vp.prototype.onExit = function () { + this.toggle(!1, !1) + }, + vp.prototype.processMouseDown = function (A) { + if (this.startPt.set(A.clientX, A.clientY), + !this.enablePick && A.button === t.LEFT) { + var e = this.cameraControl.getRaycaster(A.clientX, A.clientY), + i = this.scene.getClipPlanes().hitTest(e), + o = this.cameraControl.getIntersectContext(new s(A.clientX, A.clientY)), + n = this.cameraControl.intersector.intersect(o, null, !0); + if (null !== n && i.distance >= n.distance) + return yp.prototype.processMouseDown(this, A); + if (this.selectIndex = this.getSelectIndex(), + this.planeDistance = this.getPlaneDistanceInScreen(), + null !== this.selectIndex) + return this.highLight(), + this.cameraControl.needUpdateRenderList(!0), + this.cameraControl.update(!0), + this.enablePick = !0, + this.clipStartPoint = e.ray.at(i.distance, this.clipStartPoint), + !0 + } + return yp.prototype.processMouseDown(this, A) + }, + vp.prototype.processHover = function (A) { + if (!this.enablePick) { + var e = !1, + t = this.cameraControl.getRaycaster(A.clientX, A.clientY), + i = this.scene.getClipPlanes(), + o = this.getSelectIndex(); + null !== o && this.cancelHighLight(); + i.hitTest(t); + if (this.selectIndex = this.getSelectIndex(), + null !== this.selectIndex) { + if (this.highLight(), + !this.onClipBox) + this.onClipBox = !0, + this.cameraControl.viewer.modelManager.dispatchEvent({ + type: Rc.ON_CLIP_HOVER, + onClipBox: !0, + event: A + }); + e = !0 + } else if (this.onClipBox) { + this.onClipBox = !1, + this.cameraControl.viewer.modelManager.dispatchEvent({ + type: Rc.ON_CLIP_HOVER, + onClipBox: !1, + event: A + }) + } + return this.selectIndex !== o && (this.cameraControl.needUpdateRenderList(!0), + this.cameraControl.update(!0)), + e + } + return yp.prototype.processHover(this, A) + }, + vp.prototype.processMouseUp = function (A) { + if (A.button === t.LEFT) { + var e = this.cameraControl.getRaycaster(A.clientX, A.clientY), + i = this.scene.getClipPlanes(); + null !== this.getSelectIndex() && (this.cancelHighLight(), + this.cameraControl.needUpdateRenderList(!0), + this.cameraControl.update(!0)); + i.hitTest(e); + if (this.selectIndex = this.getSelectIndex(), + vc.ClippingCaps = !0, + null !== this.selectIndex) { + if (this.highLight(), + this.cameraControl.needUpdateRenderList(!0), + this.cameraControl.update(!0), + !this.onClipBox) + this.onClipBox = !0, + this.cameraControl.viewer.modelManager.dispatchEvent({ + type: Rc.ON_CLIP_HOVER, + onClipBox: !0, + event: A + }) + } else if (this.onClipBox) { + this.onClipBox = !1, + this.cameraControl.viewer.modelManager.dispatchEvent({ + type: Rc.ON_CLIP_HOVER, + onClipBox: !1, + event: A + }) + } + if (this.enablePick) + return this.planeDistance = 0, + this.enablePick = !1, + !0 + } + return yp.prototype.processMouseUp(this, A) + }, + vp.prototype.processMouseMove = function (A) { + if (this.enablePick) { + if (this.isRotate()) + this.rotate(A.clientX - this.startPt.x, A.clientY - this.startPt.y), + this.startPt.set(A.clientX, A.clientY); + else { + var e = this.mapBoxFaceIndex[this.selectIndex]; + if (this.mapLockedBoxFaces[e]) + return !0; + if (!(A.clientX === this.startPt.x && A.clientY === this.startPt.y)) { + vc.ClippingCaps = !1; + var t = this.scene.getClipPlanes(), + i = this.cameraControl.movePlane(t.clipplanes[this.selectIndex], A, this.startPt, !0, this.clipStartPoint); + null !== i && t.offset(this.selectIndex, i), + this.startPt.set(A.clientX, A.clientY) + } + this.cameraControl.viewer.modelManager.dispatchEvent({ + type: Rc.ON_CLIP_MOUSE_MOVE, + draggedFaceName: e + }) + } + return this.cameraControl.update(!0), + !0 + } + return yp.prototype.processMouseMove(this, A) + }, + vp.prototype.processTouchstart = function (A) { + if (this.startPt.set(A.touches[0].clientX, A.touches[0].clientY), + this.enablePick) + return yp.prototype.processTouchstart(this, A); + var e = this.cameraControl.getRaycaster(A.touches[0].clientX, A.touches[0].clientY); + return this.scene.getClipPlanes().hitTest(e), + this.selectIndex = this.getSelectIndex(), + this.planeDistance = this.getPlaneDistanceInScreen(), + null !== this.selectIndex ? (this.highLight(), + this.cameraControl.needUpdateRenderList(!0), + this.cameraControl.update(!0), + this.update(), + !0) : void 0 + }, + vp.prototype.processTouchmove = function (A) { + if (null !== this.selectIndex) { + if (this.isRotate()) + this.rotate(A.touches[0].clientX - this.startPt.x, A.touches[0].clientY - this.startPt.y), + this.startPt.set(A.touches[0].clientX, A.touches[0].clientY); + else { + this.offset((2 > this.selectIndex ? A.touches[0].clientX - this.startPt.x : A.touches[0].clientY - this.startPt.y) / this.planeDistance), + this.startPt.set(A.touches[0].clientX, A.touches[0].clientY) + } + return this.cameraControl.update(!0), + this.update(), + !0 + } + return yp.prototype.processTouchmove(this, A) + }, + vp.prototype.processTouchend = function (A) { + return this.selectIndex = null, + this.planeDistance = 0, + this.enablePick && (this.onUpdateUI({ + visible: !1 + }), + this.startPt.x === A.touches[0].clientX && this.startPt.y === A.touches[0].clientY && this.pickHelper.click(A)), + this.cameraControl.needUpdateRenderList(!0), + this.cancelHighLight(), + this.cameraControl.update(!0), + this.update(), + yp.prototype.processTouchend(this, A) + }; + var Ip = function (A, e, t) { + yp.call(this, Pc.COMPONENT_TRANSFORM), + this._callbackWrapper = void 0, + this._objectCallbackWrapper = void 0, + this._cancelCallback = void 0, + this.transformControl = new Ep(A, e, t), + this.bindingComponentKey = void 0 + }; + (Ip.prototype = Object.create(yp.prototype)).constructor = Ip, + Ip.prototype.destroy = function () { + this.transformControl.destory() + }, + Ip.prototype.update = function () { + this.transformControl.updateMatrixWorld() + }, + Ip.prototype.transformComponent = function (A, e, t, i, o) { + if (A) { + var n = this.transformControl; + n.object && A !== n.object && this.cancelTransformComponent(!1), + this._callbackWrapper && (this.transformControl.removeEventListener("change", this._callbackWrapper), + this._callbackWrapper = void 0), + this._objectCallbackWrapper && (this.transformControl.removeEventListener("objectChange", this._objectCallbackWrapper), + this._objectCallbackWrapper = void 0), + this._cancelCallback && (this._cancelCallback = void 0), + this._pauseCallbackWrapper && (this.transformControl.removeEventListener("mouseUp", this._pauseCallbackWrapper), + this._pauseCallbackWrapper = void 0), + e && (this._callbackWrapper = function (A) { + e(A) + }, + this.transformControl.addEventListener("change", this._callbackWrapper)), + t && (this._objectCallbackWrapper = function (A) { + t(A) + }, + this.transformControl.addEventListener("objectChange", this._objectCallbackWrapper)), + i && (this._cancelCallback = i), + o && (this._pauseCallbackWrapper = function (A) { + o(A) + }, + this.transformControl.addEventListener("mouseUp", this._pauseCallbackWrapper)), + this._saveComponentOriginalTransformState(A), + !0 !== n.showX && (n.showX = !0), + !0 !== n.showY && (n.showY = !0), + !0 !== n.showZ && (n.showZ = !0), + !0 !== n.enabled && (n.enabled = !0), + n.attach(A) + } + }, + Ip.prototype.cancelTransformComponent = function () { + var A = this.transformControl.object; + if (A) + return this.transformControl.detach(), + this._callbackWrapper && (this.transformControl.removeEventListener("change", this._callbackWrapper), + this._callbackWrapper = void 0), + this._objectCallbackWrapper && (this.transformControl.removeEventListener("objectChange", this._objectCallbackWrapper), + this._objectCallbackWrapper = void 0), + this._cancelCallback && (this._cancelCallback(), + this._cancelCallback = void 0), + this.bindingComponentKey = void 0, + A + }, + Ip.prototype.switchToTranslateMode = function () { + this.transformControl.setMode("translate") + }, + Ip.prototype.switchToRotateMode = function () { + this.transformControl.setMode("rotate") + }, + Ip.prototype.switchToScaleMode = function () { + this.transformControl.setMode("scale") + }, + Ip.prototype._saveComponentOriginalTransformState = function (A) { + var e; + if (A instanceof Array) + e = A; + else { + if (!(A instanceof H)) + return; + e = [A] + } + for (var t = 0, i = e.length; i > t; t += 1) { + var o = e[t]; + if (!o.userData._originalTransformState) { + var n = o.position.clone(), + r = o.quaternion.clone(), + a = o.scale.clone(), + s = o.matrix.clone(), + l = o.matrixWorld.clone(); + o.userData._originalTransformState = { + position: n, + quaternion: r, + scale: a, + matrix: s, + matrixWorld: l + } + } + } + }, + Ip.prototype.restoreComponentOriginalTransformState = function () { + if (!this.transformControl.object) + return !1; + var A, e = this.transformControl.object; + if (e instanceof Array) + A = e; + else { + if (!(e instanceof H)) + return !1; + A = [e] + } + for (var t = !1, i = 0, o = A.length; o > i; i += 1) { + var n = A[i], + r = n.userData._originalTransformState; + r && (n.position.copy(r.position), + n.quaternion.copy(r.quaternion), + n.scale.copy(r.scale), + n.matrix.copy(r.matrix), + n.matrixWorld.copy(r.matrixWorld), + this.transformControl.updateMatrixWorld(), + this.transformControl.dispatchEvent({ + type: "objectChange" + }), + t = !0) + } + return t + }, + Ip.prototype.increaseTransformControlSize = function () { + var A = this.transformControl; + if (A.object && A.visible) { + var e = A.size; + if (3 > e) + return A.setSize(e + .1), + !0 + } + return !1 + }, + Ip.prototype.decreaseTransformControlSize = function () { + var A = this.transformControl; + if (A.object && A.visible) { + var e = A.size; + if (e > .5) + return A.setSize(e - .1), + !0 + } + return !1 + }, + Ip.prototype.setTransformSpaceToLocalSpace = function () { + console.log("不再支持") + }, + Ip.prototype.setTransformSpaceToWorldSpace = function () { + console.log("不再支持") + }, + Ip.prototype.switchTransformSpace = function () { + console.log("不再支持") + }, + Ip.prototype.showTransformOnAxis = function (A) { + var e = this.transformControl; + if (e.object && e.visible) { + var t = !1; + switch (A) { + case "x": + case "X": + !0 !== e.showX && (t = !0, + e.showX = !0); + break; + case "y": + case "Y": + !0 !== e.showY && (t = !0, + e.showY = !0); + break; + case "z": + case "Z": + !0 !== e.showZ && (t = !0, + e.showZ = !0) + } + return t + } + return !1 + }, + Ip.prototype.hideTransformOnAxis = function (A) { + var e = this.transformControl; + if (e.object && e.visible) { + var t = !1; + switch (A) { + case "x": + case "X": + !1 !== e.showX && (t = !0, + e.showX = !1); + break; + case "y": + case "Y": + !1 !== e.showY && (t = !0, + e.showY = !1); + break; + case "z": + case "Z": + !1 !== e.showZ && (t = !0, + e.showZ = !1) + } + return t + } + return !1 + }, + Ip.prototype.disableTransform = function () { + var A = this.transformControl; + return !(!A.object || !A.visible || !1 === A.enabled) && (A.enabled = !1, + !0) + }, + Ip.prototype.enableTransform = function () { + var A = this.transformControl; + return !(!A.object || !A.visible || !0 === A.enabled) && (A.enabled = !0, + !0) + }, + Ip.prototype.processMouseDown = function (A) { + return !!this.transformControl.enabled && (!!this.transformControl.mouseHover(A) && this.transformControl.mouseDown(A)) + }, + Ip.prototype.processMouseMove = function (A) { + return !!this.transformControl.enabled && this.transformControl.mouseMove(A) + }, + Ip.prototype.processMouseUp = function (A) { + return !!this.transformControl.enabled && this.transformControl.mouseUp(A) + }, + Ip.prototype.processHover = function (A) { + return !!this.transformControl.enabled && this.transformControl.mouseHover(A) + }, + Ip.onExit = function () { + this.destroy() + }; + var Ep = function (A, e, t) { + H.call(this), + t = void 0 !== t ? t : document, + this.scene = A, + this.visible = !1; + var i = new Bp; + this.add(i); + var o = new xp; + this.add(o); + var n = this; + N("camera", e), + N("object", void 0), + N("enabled", !0), + N("axis", null), + N("mode", "translate"), + N("translationSnap", null), + N("rotationSnap", null), + N("space", "world"), + N("size", 1), + N("dragging", !1), + N("showX", !0), + N("showY", !0), + N("showZ", !0); + var r = { + type: "change" + }, + a = { + type: "mouseDown" + }, + s = { + type: "mouseUp", + mode: n.mode + }, + l = { + type: "objectChange" + }, + c = new Dd, + h = new y, + d = new y, + p = new f, + g = { + X: new y(1, 0, 0), + Y: new y(0, 1, 0), + Z: new y(0, 0, 1) + }, + u = new y, + m = new y, + C = new y, + v = new y, + I = new y, + E = new y, + B = 0, + x = new y, + S = new f, + w = new y, + b = new y, + U = new f, + F = new f, + K = new y(1, 1, 1), + Q = new y, + R = new y, + T = new f, + k = new f, + D = new y, + L = new y; + + function N(A, e) { + var t = e; + Object.defineProperty(n, A, { + get: function () { + return void 0 !== t ? t : e + }, + set: function (e) { + t !== e && (t = e, + o[A] = e, + i[A] = e, + n.dispatchEvent({ + type: A + "-changed", + value: e + }), + n.dispatchEvent(r)) + } + }), + n[A] = e, + o[A] = e, + i[A] = e + } + + function O(A) { + var e = A.changedTouches ? A.changedTouches[0] : A, + i = t.getBoundingClientRect(); + return { + x: (e.clientX - i.left) / i.width * 2 - 1, + y: -(e.clientY - i.top) / i.height * 2 + 1, + button: A.button + } + } + N("worldPosition", R), + N("worldPositionStart", Q), + N("worldQuaternion", T), + N("cameraPosition", x), + N("cameraQuaternion", S), + N("pointStart", u), + N("pointEnd", m), + N("rotationAxis", v), + N("rotationAngle", B), + N("eye", L), + this.attach = function (e) { + e && (this.object !== e && (this.scene.add(this), + A.componentTransformControl = this, + this.object = e, + r.object = e, + l.object = e, + this.updateMatrixWorld()), + this.visible = !0) + }, + this.detach = function () { + this.object && (this.object = void 0, + r.object = void 0), + this.parent && this.parent.remove(this), + this.scene.componentTransformControl = void 0 + }, + this.destory = function () { + this.scene.componentTransformControl = void 0, + this.scene = void 0, + this.axis = void 0, + this.camera = void 0 + }, + this.updateMatrixWorld = function () { + if (void 0 !== this.object) { + var A, e = new aA; + if (this.object instanceof Array) + A = this.object; + else { + if (!(this.object instanceof H)) + return; + A = [this.object] + } + for (var t = 0, i = A.length; i > t; t += 1) { + var o = A[t]; + if (o.geometry) + e.expandByObject(A[t]); + else { + var n = new y; + o.getWorldPosition(n), + e.expandByPoint(n) + } + } + A[0].parent && A[0].parent.matrixWorld.decompose(b, U, K), + A[0].matrixWorld.decompose(R, T, D), + e.getCenter(R), + F.copy(U).inverse(), + k.copy(T).inverse() + } + this.camera.updateMatrixWorld(), + this.camera.matrixWorld.decompose(x, S, w), + this.camera instanceof je ? L.copy(x).sub(R).normalize() : this.camera instanceof Ka ? L.copy(x).normalize() : this.camera instanceof kd && (this.camera.isPerspective ? L.copy(x).sub(R).normalize() : L.copy(x).normalize()), + H.prototype.updateMatrixWorld.call(this) + }, + this.mouseHover = function (A) { + var e = O(A); + if (void 0 === this.object || !0 === this.dragging || void 0 !== e.button && 0 !== e.button) + return !1; + c.setFromCamera(e, this.camera); + var t, o = c.intersectObjects(i.picker[this.mode].children, !0) || !1; + return o ? (this.axis = o.object.name, + t = !0) : (this.axis = null, + t = !1), + this.updateMatrixWorld(), + t + }, + this.mouseDown = function (A) { + var e = O(A); + if (void 0 === this.object || !0 === this.dragging || void 0 !== e.button && 0 !== e.button) + return !1; + if ((0 === e.button || void 0 === e.button) && null !== this.axis) { + c.setFromCamera(e, this.camera); + var t = c.intersectObjects([o], !0) || !1; + return !1 !== t && (t && (Q.copy(R), + u.copy(t.point).sub(Q)), + this.dragging = !0, + a.mode = this.mode, + this.dispatchEvent(a), + !0) + } + }, + this.mouseMove = function (A) { + var e = O(A), + t = this.axis, + i = this.mode, + n = void 0; + if (void 0 === this.object || null === t || !1 === this.dragging || void 0 !== e.button && 0 !== e.button) + return !1; + c.setFromCamera(e, this.camera); + var a = c.intersectObjects([o], !0) || !1; + if (!1 === a) + return !1; + if (m.copy(a.point).sub(Q), + "translate" === i) + C.copy(m).sub(u), + -1 === t.indexOf("X") && (C.x = 0), + -1 === t.indexOf("Y") && (C.y = 0), + -1 === t.indexOf("Z") && (C.z = 0), + C.applyQuaternion(F).divide(K), + 0 === C.x && 0 === C.y && 0 === C.z || (n = this._translateCurrentObject(C)); + else if ("scale" === i) { + if (-1 !== t.search("XYZ")) { + var s = m.length() / u.length(); + 0 > m.dot(u) && (s *= -1), + d.set(s, s, s) + } else + h.copy(u), + d.copy(m), + h.applyQuaternion(k), + d.applyQuaternion(k), + d.divide(h), + -1 === t.search("X") && (d.x = 1), + -1 === t.search("Y") && (d.y = 1), + -1 === t.search("Z") && (d.z = 1); + 1 === d.x && 1 === d.y && 1 === d.z || (n = this._scaleCurrentObject(d)) + } else if ("rotate" === i) { + C.copy(m).sub(u); + var y = 20 / R.distanceTo(h.setFromMatrixPosition(this.camera.matrixWorld)); + if ("E" === t ? (v.copy(L), + B = m.angleTo(u), + I.copy(u).normalize(), + E.copy(m).normalize(), + B *= 0 > E.cross(I).dot(L) ? 1 : -1) : "XYZE" === t ? (v.copy(C).cross(L).normalize(), + B = C.dot(h.copy(v).cross(this.eye)) * y) : "X" !== t && "Y" !== t && "Z" !== t || (v.copy(g[t]), + h.copy(g[t]), + B = C.dot(h.cross(L).normalize()) * y), + this.rotationAngle = B, + 0 !== B) { + var x = new f; + v.applyQuaternion(F), + x.copy(p.setFromAxisAngle(v, B)), + x.normalize(), + n = this._rotateCurrentObject(x) + } + } + return n ? (this.updateMatrixWorld(), + this.dispatchEvent(r), + l.matrix = n.clone(), + this.dispatchEvent(l), + u.copy(m), + !0) : void 0 + }, + this.mouseUp = function (A) { + var e = O(A); + return (void 0 === e.button || 0 === e.button) && (this.dragging && null !== this.axis && (s.mode = this.mode, + this.dispatchEvent(s)), + this.dragging = !1, + void 0 === e.button && (this.axis = null), + !0) + }, + this.getMode = function () { + return n.mode + }, + this.setMode = function (A) { + n.mode = A, + this.updateMatrixWorld() + }, + this.setTranslationSnap = function (A) { + n.translationSnap = A + }, + this.setRotationSnap = function (A) { + n.rotationSnap = A + }, + this.setSize = function (A) { + n.size = A + }, + this.setSpace = function (A) { + n.space = A + }, + this.getBoundingBox = function () { + return i.getBoundingBox() + }, + this._scaleCurrentObject = function () { + var A = new M, + e = new M, + t = new M, + i = new M, + o = new y; + return function (n) { + var r; + if (this.object instanceof Array) + r = this.object; + else { + if (!(this.object instanceof H)) + return; + r = [this.object] + } + for (var a = 0, s = r.length; s > a; a += 1) { + var l = r[a]; + l.geometry ? (l.geometry.boundingBox || l.geometry.computeBoundingBox(), + l.geometry.boundingBox.getCenter(o), + o.applyMatrix4(l.matrix)) : o.copy(l.position), + e.makeTranslation(-o.x, -o.y, -o.z), + t.makeScale(n.x, n.y, n.z), + i.makeTranslation(o.x, o.y, o.z), + A.identity(), + A.multiply(i), + A.multiply(t), + A.multiply(e); + var c = l.matrixAutoUpdate; + l.matrixAutoUpdate = !1, + l.applyMatrix4(A), + l.updateMatrixWorld(!0), + l.matrixAutoUpdate = c + } + return A + } + }(), + this._rotateCurrentObject = function () { + var A = new M, + e = new M, + t = new M, + i = new M, + o = new y; + return function (n) { + var r; + if (this.object instanceof Array) + r = this.object; + else { + if (!(this.object instanceof H)) + return; + r = [this.object] + } + for (var a = 0, s = r.length; s > a; a += 1) { + var l = r[a]; + l.geometry ? (l.geometry.boundingBox || l.geometry.computeBoundingBox(), + l.geometry.boundingBox.getCenter(o), + o.applyMatrix4(l.matrix)) : o.copy(l.position), + A.makeTranslation(-o.x, -o.y, -o.z), + e.makeRotationFromQuaternion(n), + t.makeTranslation(o.x, o.y, o.z), + i.identity(), + i.multiply(t), + i.multiply(e), + i.multiply(A); + var c = l.matrixAutoUpdate; + l.matrixAutoUpdate = !1, + l.applyMatrix4(i), + l.matrixAutoUpdate = c, + l.updateMatrixWorld(!0) + } + return i + } + }(), + this._translateCurrentObject = function () { + var A = new M; + return function (e) { + var t; + if (this.object instanceof Array) + t = this.object; + else { + if (!(this.object instanceof H)) + return; + t = [this.object] + } + A.makeTranslation(e.x, e.y, e.z); + for (var i = 0, o = t.length; o > i; i += 1) { + var n = t[i], + r = n.matrixAutoUpdate; + n.matrixAutoUpdate = !1, + n.applyMatrix4(A), + n.matrixAutoUpdate = r, + n.updateMatrixWorld(!0) + } + return A + } + }() + }; + Ep.prototype = Object.assign(Object.create(H.prototype), { + constructor: Ep, + isTransformControls: !0 + }); + var Bp = function () { + H.call(this), + this.type = "TransformControlsGizmo"; + var A = new jA({ + depthTest: !1, + depthWrite: !1, + transparent: !0, + side: 2, + fog: !1 + }), + e = new ko({ + depthTest: !1, + depthWrite: !1, + transparent: !0, + linewidth: 1, + fog: !1 + }), + t = A.clone(); + t.opacity = .15; + var i = A.clone(); + i.opacity = .33; + var o = A.clone(); + o.color.set(16711680); + var n = A.clone(); + n.color.set(65280); + var r = A.clone(); + r.color.set(255); + var a = A.clone(); + a.opacity = .25; + var s = a.clone(); + s.color.set(16776960); + var l = a.clone(); + l.color.set(65535); + var c = a.clone(); + c.color.set(16711935), + A.clone().color.set(16776960); + var h = e.clone(); + h.color.set(16711680); + var d = e.clone(); + d.color.set(65280); + var p = e.clone(); + p.color.set(255); + var g = e.clone(); + g.color.set(65535); + var u = e.clone(); + u.color.set(16711935); + var m = e.clone(); + m.color.set(16776960); + var C = e.clone(); + C.color.set(7895160); + var v = m.clone(); + v.opacity = .25; + var I = new hr(0, .05, .2, 12, 1, !1), + E = new Ne(.125, .125, .125), + B = new he; + B.setAttribute("position", new Ae([0, 0, 0, 1, 0, 0], 3)); + var x, S = function (A, e) { + for (var t = new he, i = [], o = 0; 64 * e >= o; ++o) + i.push(0, Math.cos(o / 32 * Math.PI) * A, Math.sin(o / 32 * Math.PI) * A); + return t.setAttribute("position", new Ae(i, 3)), + t + }, + w = { + X: [ + [new Ue(I, o), [1, 0, 0], + [0, 0, -Math.PI / 2], null, "fwd" + ], + [new Ue(I, o), [1, 0, 0], + [0, 0, Math.PI / 2], null, "bwd" + ], + [new Go(B, h)] + ], + Y: [ + [new Ue(I, n), [0, 1, 0], null, null, "fwd"], + [new Ue(I, n), [0, 1, 0], + [Math.PI, 0, 0], null, "bwd" + ], + [new Go(B, d), null, [0, 0, Math.PI / 2]] + ], + Z: [ + [new Ue(I, r), [0, 0, 1], + [Math.PI / 2, 0, 0], null, "fwd" + ], + [new Ue(I, r), [0, 0, 1], + [-Math.PI / 2, 0, 0], null, "bwd" + ], + [new Go(B, p), null, [0, -Math.PI / 2, 0]] + ], + XYZ: [ + [new Ue(new dn(.1, 0), a), [0, 0, 0], + [0, 0, 0] + ] + ], + XY: [ + [new Ue(new et(.295, .295), s), [.15, .15, 0]], + [new Go(B, m), [.18, .3, 0], null, [.125, 1, 1]], + [new Go(B, m), [.3, .18, 0], + [0, 0, Math.PI / 2], + [.125, 1, 1] + ] + ], + YZ: [ + [new Ue(new et(.295, .295), l), [0, .15, .15], + [0, Math.PI / 2, 0] + ], + [new Go(B, g), [0, .18, .3], + [0, 0, Math.PI / 2], + [.125, 1, 1] + ], + [new Go(B, g), [0, .3, .18], + [0, -Math.PI / 2, 0], + [.125, 1, 1] + ] + ], + XZ: [ + [new Ue(new et(.295, .295), c), [.15, 0, .15], + [-Math.PI / 2, 0, 0] + ], + [new Go(B, u), [.18, 0, .3], null, [.125, 1, 1]], + [new Go(B, u), [.3, 0, .18], + [0, -Math.PI / 2, 0], + [.125, 1, 1] + ] + ] + }, + b = { + X: [ + [new Ue(new hr(.2, 0, 1, 4, 1, !1), t), [.6, 0, 0], + [0, 0, -Math.PI / 2] + ] + ], + Y: [ + [new Ue(new hr(.2, 0, 1, 4, 1, !1), t), [0, .6, 0]] + ], + Z: [ + [new Ue(new hr(.2, 0, 1, 4, 1, !1), t), [0, 0, .6], + [Math.PI / 2, 0, 0] + ] + ], + XYZ: [ + [new Ue(new dn(.2, 0), t)] + ], + XY: [ + [new Ue(new et(.4, .4), t), [.2, .2, 0]] + ], + YZ: [ + [new Ue(new et(.4, .4), t), [0, .2, .2], + [0, Math.PI / 2, 0] + ] + ], + XZ: [ + [new Ue(new et(.4, .4), t), [.2, 0, .2], + [-Math.PI / 2, 0, 0] + ] + ] + }, + U = { + START: [ + [new Ue(new dn(.01, 2), i), null, null, null, "helper"] + ], + END: [ + [new Ue(new dn(.01, 2), i), null, null, null, "helper"] + ], + DELTA: [ + [new Go((x = new he, + x.setAttribute("position", new Ae([0, 0, 0, 1, 1, 1], 3)), + x), i), null, null, null, "helper"] + ], + X: [ + [new Go(B, i.clone()), [-1e3, 0, 0], null, [1e6, 1, 1], "helper"] + ], + Y: [ + [new Go(B, i.clone()), [0, -1e3, 0], + [0, 0, Math.PI / 2], + [1e6, 1, 1], "helper" + ] + ], + Z: [ + [new Go(B, i.clone()), [0, 0, -1e3], + [0, -Math.PI / 2, 0], + [1e6, 1, 1], "helper" + ] + ] + }, + K = { + X: [ + [new Go(S(1, .5), h)], + [new Ue(new dn(.04, 0), o), [0, 0, .99], null, [1, 3, 1]] + ], + Y: [ + [new Go(S(1, .5), d), null, [0, 0, -Math.PI / 2]], + [new Ue(new dn(.04, 0), n), [0, 0, .99], null, [3, 1, 1]] + ], + Z: [ + [new Go(S(1, .5), p), null, [0, Math.PI / 2, 0]], + [new Ue(new dn(.04, 0), r), [.99, 0, 0], null, [1, 3, 1]] + ], + E: [ + [new Go(S(1.25, 1), v), null, [0, Math.PI / 2, 0]], + [new Ue(new hr(.03, 0, .15, 4, 1, !1), v), [1.17, 0, 0], + [0, 0, -Math.PI / 2], + [1, 1, .001] + ], + [new Ue(new hr(.03, 0, .15, 4, 1, !1), v), [-1.17, 0, 0], + [0, 0, Math.PI / 2], + [1, 1, .001] + ], + [new Ue(new hr(.03, 0, .15, 4, 1, !1), v), [0, -1.17, 0], + [Math.PI, 0, 0], + [1, 1, .001] + ], + [new Ue(new hr(.03, 0, .15, 4, 1, !1), v), [0, 1.17, 0], + [0, 0, 0], + [1, 1, .001] + ] + ], + XYZE: [ + [new Go(S(1, 1), C), null, [0, Math.PI / 2, 0]] + ] + }, + Q = { + AXIS: [ + [new Go(B, i.clone()), [-1e3, 0, 0], null, [1e6, 1, 1], "helper"] + ] + }, + R = { + X: [ + [new Ue(new En(1, .1, 4, 24), t), [0, 0, 0], + [0, -Math.PI / 2, -Math.PI / 2] + ] + ], + Y: [ + [new Ue(new En(1, .1, 4, 24), t), [0, 0, 0], + [Math.PI / 2, 0, 0] + ] + ], + Z: [ + [new Ue(new En(1, .1, 4, 24), t), [0, 0, 0], + [0, 0, -Math.PI / 2] + ] + ], + E: [ + [new Ue(new En(1.25, .1, 2, 24), t)] + ], + XYZE: [ + [new Ue(new er(.7, 10, 8), t)] + ] + }, + T = { + X: [ + [new Ue(E, o), [.8, 0, 0], + [0, 0, -Math.PI / 2] + ], + [new Go(B, h), null, null, [.8, 1, 1]] + ], + Y: [ + [new Ue(E, n), [0, .8, 0]], + [new Go(B, d), null, [0, 0, Math.PI / 2], + [.8, 1, 1] + ] + ], + Z: [ + [new Ue(E, r), [0, 0, .8], + [Math.PI / 2, 0, 0] + ], + [new Go(B, p), null, [0, -Math.PI / 2, 0], + [.8, 1, 1] + ] + ], + XY: [ + [new Ue(E, s), [.85, .85, 0], null, [2, 2, .2]], + [new Go(B, m), [.855, .98, 0], null, [.125, 1, 1]], + [new Go(B, m), [.98, .855, 0], + [0, 0, Math.PI / 2], + [.125, 1, 1] + ] + ], + YZ: [ + [new Ue(E, l), [0, .85, .85], null, [.2, 2, 2]], + [new Go(B, g), [0, .855, .98], + [0, 0, Math.PI / 2], + [.125, 1, 1] + ], + [new Go(B, g), [0, .98, .855], + [0, -Math.PI / 2, 0], + [.125, 1, 1] + ] + ], + XZ: [ + [new Ue(E, c), [.85, 0, .85], null, [2, .2, 2]], + [new Go(B, u), [.855, 0, .98], null, [.125, 1, 1]], + [new Go(B, u), [.98, 0, .855], + [0, -Math.PI / 2, 0], + [.125, 1, 1] + ] + ], + XYZX: [ + [new Ue(new Ne(.125, .125, .125), a), [1.1, 0, 0]] + ], + XYZY: [ + [new Ue(new Ne(.125, .125, .125), a), [0, 1.1, 0]] + ], + XYZZ: [ + [new Ue(new Ne(.125, .125, .125), a), [0, 0, 1.1]] + ] + }, + k = { + X: [ + [new Ue(new hr(.2, 0, .8, 4, 1, !1), t), [.5, 0, 0], + [0, 0, -Math.PI / 2] + ] + ], + Y: [ + [new Ue(new hr(.2, 0, .8, 4, 1, !1), t), [0, .5, 0]] + ], + Z: [ + [new Ue(new hr(.2, 0, .8, 4, 1, !1), t), [0, 0, .5], + [Math.PI / 2, 0, 0] + ] + ], + XY: [ + [new Ue(E, t), [.85, .85, 0], null, [3, 3, .2]] + ], + YZ: [ + [new Ue(E, t), [0, .85, .85], null, [.2, 3, 3]] + ], + XZ: [ + [new Ue(E, t), [.85, 0, .85], null, [3, .2, 3]] + ], + XYZX: [ + [new Ue(new Ne(.2, .2, .2), t), [1.1, 0, 0]] + ], + XYZY: [ + [new Ue(new Ne(.2, .2, .2), t), [0, 1.1, 0]] + ], + XYZZ: [ + [new Ue(new Ne(.2, .2, .2), t), [0, 0, 1.1]] + ] + }, + D = { + X: [ + [new Go(B, i.clone()), [-1e3, 0, 0], null, [1e6, 1, 1], "helper"] + ], + Y: [ + [new Go(B, i.clone()), [0, -1e3, 0], + [0, 0, Math.PI / 2], + [1e6, 1, 1], "helper" + ] + ], + Z: [ + [new Go(B, i.clone()), [0, 0, -1e3], + [0, -Math.PI / 2, 0], + [1e6, 1, 1], "helper" + ] + ] + }, + L = function (A) { + var e = new H; + for (var t in A) + for (var i = A[t].length; i--;) { + var o = A[t][i][0].clone(), + n = A[t][i][1], + r = A[t][i][2], + a = A[t][i][3], + s = A[t][i][4]; + o.name = t, + o.tag = s, + n && o.position.set(n[0], n[1], n[2]), + r && o.rotation.set(r[0], r[1], r[2]), + a && o.scale.set(a[0], a[1], a[2]), + o.updateMatrix(); + var l = o.geometry.clone(); + l.applyMatrix4(o.matrix), + o.geometry = l, + o.renderOrder = 1 / 0, + o.position.set(0, 0, 0), + o.rotation.set(0, 0, 0), + o.scale.set(1, 1, 1), + e.add(o) + } + return e + }, + N = new F, + O = new y(0, 1, 0), + V = new y(0, 0, 0), + G = new M, + P = new f, + q = new f, + j = new f, + Y = new y(1, 0, 0), + W = new y(0, 1, 0), + J = new y(0, 0, 1); + this.gizmo = {}, + this.picker = {}, + this.helper = {}, + this.add(this.gizmo.translate = L(w)), + this.add(this.gizmo.rotate = L(K)), + this.add(this.gizmo.scale = L(T)), + this.add(this.picker.translate = L(b)), + this.add(this.picker.rotate = L(R)), + this.add(this.picker.scale = L(k)), + this.add(this.helper.translate = L(U)), + this.add(this.helper.rotate = L(Q)), + this.add(this.helper.scale = L(D)), + this.picker.translate.visible = !1, + this.picker.rotate.visible = !1, + this.picker.scale.visible = !1, + this.updateMatrixWorld = function () { + var A = this.space; + "scale" === this.mode && (A = "local"); + var e = "local" === A ? this.worldQuaternion : j; + this.gizmo.translate.visible = "translate" === this.mode, + this.gizmo.rotate.visible = "rotate" === this.mode, + this.gizmo.scale.visible = "scale" === this.mode, + this.helper.translate.visible = "translate" === this.mode, + this.helper.rotate.visible = "rotate" === this.mode, + this.helper.scale.visible = "scale" === this.mode; + var t = []; + t = (t = (t = t.concat(this.picker[this.mode].children)).concat(this.gizmo[this.mode].children)).concat(this.helper[this.mode].children); + for (var i = this.boundingBox ? this.boundingBox.makeEmpty() : new aA, o = 0; t.length > o; o++) { + var n = t[o]; + n.visible = !0, + n.rotation.set(0, 0, 0), + n.position.copy(this.worldPosition); + var r = this.worldPosition.distanceTo(this.cameraPosition); + if (n.scale.set(1, 1, 1).multiplyScalar(r * this.size / 7), + "helper" !== n.tag) { + if (n.quaternion.copy(e), + "translate" === this.mode || "scale" === this.mode) { + "X" !== n.name && "XYZX" !== n.name || Math.abs(O.copy(Y).applyQuaternion(e).dot(this.eye)) > .99 && (n.scale.set(1e-10, 1e-10, 1e-10), + n.visible = !1), + "Y" !== n.name && "XYZY" !== n.name || Math.abs(O.copy(W).applyQuaternion(e).dot(this.eye)) > .99 && (n.scale.set(1e-10, 1e-10, 1e-10), + n.visible = !1), + "Z" !== n.name && "XYZZ" !== n.name || Math.abs(O.copy(J).applyQuaternion(e).dot(this.eye)) > .99 && (n.scale.set(1e-10, 1e-10, 1e-10), + n.visible = !1), + "XY" === n.name && .2 > Math.abs(O.copy(J).applyQuaternion(e).dot(this.eye)) && (n.scale.set(1e-10, 1e-10, 1e-10), + n.visible = !1), + "YZ" === n.name && .2 > Math.abs(O.copy(Y).applyQuaternion(e).dot(this.eye)) && (n.scale.set(1e-10, 1e-10, 1e-10), + n.visible = !1), + "XZ" === n.name && .2 > Math.abs(O.copy(W).applyQuaternion(e).dot(this.eye)) && (n.scale.set(1e-10, 1e-10, 1e-10), + n.visible = !1), + -1 !== n.name.search("X") && (0 > O.copy(Y).applyQuaternion(e).dot(this.eye) ? "fwd" === n.tag ? n.visible = !1 : n.scale.x *= -1 : "bwd" === n.tag && (n.visible = !1)), + -1 !== n.name.search("Y") && (0 > O.copy(W).applyQuaternion(e).dot(this.eye) ? "fwd" === n.tag ? n.visible = !1 : n.scale.y *= -1 : "bwd" === n.tag && (n.visible = !1)), + -1 !== n.name.search("Z") && (0 > O.copy(J).applyQuaternion(e).dot(this.eye) ? "fwd" === n.tag ? n.visible = !1 : n.scale.z *= -1 : "bwd" === n.tag && (n.visible = !1)) + } else + "rotate" === this.mode && (q.copy(e), + O.copy(this.eye).applyQuaternion(P.copy(e).inverse()), + -1 !== n.name.search("E") && n.quaternion.setFromRotationMatrix(G.lookAt(this.eye, V, W)), + "X" === n.name && (P.setFromAxisAngle(Y, Math.atan2(-O.y, O.z)), + P.multiplyQuaternions(q, P), + n.quaternion.copy(P)), + "Y" === n.name && (P.setFromAxisAngle(W, Math.atan2(O.x, O.z)), + P.multiplyQuaternions(q, P), + n.quaternion.copy(P)), + "Z" === n.name && (P.setFromAxisAngle(J, Math.atan2(O.y, O.x)), + P.multiplyQuaternions(q, P), + n.quaternion.copy(P))); + n.visible = n.visible && (-1 === n.name.indexOf("X") || this.showX), + n.visible = n.visible && (-1 === n.name.indexOf("Y") || this.showY), + n.visible = n.visible && (-1 === n.name.indexOf("Z") || this.showZ), + n.visible = n.visible && (-1 === n.name.indexOf("E") || this.showX && this.showY && this.showZ), + n.material._opacity = n.material._opacity || n.material.opacity, + n.material._color = n.material._color || n.material.color.clone(), + n.material.color.copy(n.material._color), + n.material.opacity = n.material._opacity, + this.enabled ? this.axis && (n.name === this.axis || this.axis.split("").some((function (A) { + return n.name === A + })) ? (n.material.opacity = 1, + n.material.color.lerp(new LA(1, 1, 1), .5)) : (n.material.opacity *= .25, + n.material.color.lerp(new LA(1, 1, 1), .5))) : (n.material.opacity *= .5, + n.material.color.lerp(new LA(1, 1, 1), .5)), + i.expandByObject(n) + } else if (n.visible = !1, + "AXIS" === n.name) + n.position.copy(this.worldPositionStart), + n.visible = !!this.axis, + "X" === this.axis && (P.setFromEuler(N.set(0, 0, 0)), + n.quaternion.copy(e).multiply(P), + Math.abs(O.copy(Y).applyQuaternion(e).dot(this.eye)) > .9 && (n.visible = !1)), + "Y" === this.axis && (P.setFromEuler(N.set(0, 0, Math.PI / 2)), + n.quaternion.copy(e).multiply(P), + Math.abs(O.copy(W).applyQuaternion(e).dot(this.eye)) > .9 && (n.visible = !1)), + "Z" === this.axis && (P.setFromEuler(N.set(0, Math.PI / 2, 0)), + n.quaternion.copy(e).multiply(P), + Math.abs(O.copy(J).applyQuaternion(e).dot(this.eye)) > .9 && (n.visible = !1)), + "XYZE" === this.axis && (P.setFromEuler(N.set(0, Math.PI / 2, 0)), + O.copy(this.rotationAxis), + n.quaternion.setFromRotationMatrix(G.lookAt(V, O, W)), + n.quaternion.multiply(P), + n.visible = this.dragging), + "E" === this.axis && (n.visible = !1); + else if ("START" === n.name) + n.position.copy(this.worldPositionStart), + n.visible = this.dragging; + else if ("END" === n.name) + n.position.copy(this.worldPosition), + n.visible = this.dragging; + else if ("DELTA" === n.name) { + n.position.set(0, 0, 0), + n.scale.set(1, 1, 1); + var a = n.geometry.getAttribute("position"); + a.setXYZ(0, this.worldPositionStart.x, this.worldPositionStart.y, this.worldPositionStart.z), + a.setXYZ(1, this.worldPosition.x, this.worldPosition.y, this.worldPosition.z), + a.needsUpdate = !0, + n.visible = this.dragging + } else + n.quaternion.copy(e), + n.position.copy(this.dragging ? this.worldPositionStart : this.worldPosition), + this.axis && (n.visible = -1 !== this.axis.search(n.name)) + } + this.boundingBox = i, + H.prototype.updateMatrixWorld.call(this) + }, + this.getBoundingBox = function () { + return this.boundingBox || this.updateMatrixWorld(), + this.boundingBox + } + }; + Bp.prototype = Object.assign(Object.create(H.prototype), { + constructor: Bp, + isTransformControlsGizmo: !0 + }); + var xp = function () { + Ue.call(this, new et(4, 4, 2, 2), new jA({ + visible: !1, + wireframe: !0, + side: 2, + transparent: !0, + opacity: .1 + })), + this.type = "TransformControlsPlane"; + var A = new y(1, 0, 0), + e = new y(0, 1, 0), + t = new y(0, 0, 1), + i = new y, + o = new y, + n = new y, + r = new M, + a = new f; + this.updateMatrixWorld = function () { + var s = this.space; + switch (this.position.copy(this.worldPosition), + "scale" === this.mode && (s = "local"), + A.set(1, 0, 0).applyQuaternion("local" === s ? this.worldQuaternion : a), + e.set(0, 1, 0).applyQuaternion("local" === s ? this.worldQuaternion : a), + t.set(0, 0, 1).applyQuaternion("local" === s ? this.worldQuaternion : a), + n.copy(e), + this.mode) { + case "translate": + case "scale": + switch (this.axis) { + case "X": + n.copy(this.eye).cross(A), + o.copy(A).cross(n); + break; + case "Y": + n.copy(this.eye).cross(e), + o.copy(e).cross(n); + break; + case "Z": + n.copy(this.eye).cross(t), + o.copy(t).cross(n); + break; + case "XY": + o.copy(t); + break; + case "YZ": + o.copy(A); + break; + case "XZ": + n.copy(t), + o.copy(e); + break; + case "XYZ": + case "E": + o.set(0, 0, 0) + } + break; + case "rotate": + default: + o.set(0, 0, 0) + } + 0 === o.length() ? this.quaternion.copy(this.cameraQuaternion) : (r.lookAt(i.set(0, 0, 0), o, n), + this.quaternion.setFromRotationMatrix(r)); + var l = this.worldPosition.distanceTo(this.cameraPosition); + this.scale.set(1, 1, 1).multiplyScalar(l * this.size / 7), + H.prototype.updateMatrixWorld.call(this) + } + }; + xp.prototype = Object.assign(Object.create(Ue.prototype), { + constructor: xp, + isTransformControlsPlane: !0 + }); + var Sp = function (A) { + yp.call(this, Pc.CLIP_FILL), + this.viewer = A, + this.scene = A.getScene(), + this.enablePick = !1, + this.rotX = !0, + this.onClipPlane = !1, + this.cameraControl = A.cameraControl, + this.startPt = new s, + this.endPt = new s, + this.frustum = new Ze, + this.modelManager = this.cameraControl.viewer.modelManager; + var e = this.scene.getFillClipPlane(); + e.updateClippingParams = function (e) { + if (0 === e.iClipPlane.value) + A.getRenderer().clippingPlanes = Object.freeze([]); + else { + var t = [new EA], + i = e.vClipPlane.value[0], + o = t[0]; + o.setComponents(-i.x, -i.y, -i.z, -i.w), + o.normalize(), + A.getRenderer().clippingPlanes = t, + this.renderClipPlane = new EA, + this.renderClipPlane.setComponents(i.x, i.y, i.z, -i.w), + this.renderClipPlane.normalize(), + this.calculateFillClipBoundingBox(o.coplanarPoint(new y)) + } + }, + e.init(), + this.planeDistance = 0, + this.offsetSpeed = .02, + this.toggle = function (A, t) { + e.enable(A, t), + e.update() + }, + this.visible = function (A) { + e.visible = A, + e.update() + }, + this.rotatable = function (A) { + e.rotatable = A, + e.update() + }, + this.hit = function () { + return e.hit + }, + this.pointToScreen = function (A) { + var e = this.cameraControl.camera, + t = new M; + t.multiplyMatrices(e.projectionMatrix, e.matrixWorldInverse); + var i = new p(A.x, A.y, A.z, 1); + i.applyMatrix4(t); + var o = new s; + o.x = (i.x / i.w + 1) / 2, + o.y = 1 - (i.y / i.w + 1) / 2; + var n = this.cameraControl.getContainerDimensions(); + return o.x = o.x * n.width + n.left, + o.y = o.y * n.height + n.top, + o + }, + this.getPlaneDistanceInScreen = function () { + if (null === this.selectIndex) + return null; + if (2 > this.selectIndex) { + var A = e.clipPlanes.center.clone(), + t = e.clipPlanes.center.clone(); + A.x -= e.clipPlanes.cubeSize.x, + t.x += e.clipPlanes.cubeSize.x; + var i = this.pointToScreen(A), + o = this.pointToScreen(t); + return i.x - o.x + } + var n = e.clipPlanes.center.clone(), + r = e.clipPlanes.center.clone(); + r.y -= e.clipPlanes.cubeSize.y, + n.y += e.clipPlanes.cubeSize.y; + var a = this.pointToScreen(r), + s = this.pointToScreen(n); + return a.y - s.y + }, + this.getPickPoint = function (A, e) { + var t = this.cameraControl.camera, + i = this.cameraControl.getContainerDimensions(), + o = (A - i.left) / i.width * 2 - 1, + n = (i.height - (e - i.top)) / i.height * 2 - 1, + r = new Dd; + return r.setFromCamera(new s(o, n), t), + r.ray.intersectPlane(this.plane) + }, + this._isVisible = function () { + return e.visible + }, + this.isRotate = function () { + return e.rotatable + }, + this.offset = function (A) { + e.offset(A) + }, + this.setOffset = function (A) { + e.setOffset(A) + }, + this.rotate = function (A, t) { + this.rotX ? e.rotX(t / 180 * Math.PI * .1) : e.rotY(A / 180 * Math.PI * .1) + }, + this.rotateAngleOffset = function (A, t) { + e.rotateAngleOffset(A, t) + }, + this.setRotateAngle = function (A, t) { + e.setRotateAngle(A, t) + }, + this.getRotateAngle = function () { + return e.getRotateAngle() + }, + this.changeNormal = function (A) { + e.changeNormal(A) + }, + this.update = function (A) { + e.update(A) + }, + this.cancelHighLight = function () { + e.cancelHighLight() + }, + this.highLight = function () { + e.highLight() + }, + this.store = function () { + return e.store() + }, + this.restore = function (A) { + e.restore(A) + }, + this.setProcess = function (A) { + e.setProcess(A) + }, + this.getProcess = function () { + return e.getProcess() + } + }; + (Sp.prototype = Object.create(yp.prototype)).constructor = Sp, + Sp.prototype.destroy = function () { + this.cameraControl = null, + this.normal = null, + this.plane = null, + this.pickHelper = null, + this.scene = null, + this.viewer = null + }, + Sp.prototype.onExit = function () { + this.toggle(!1, !1) + }, + Sp.prototype.processMouseDown = function (A) { + if (this.startPt.set(A.clientX, A.clientY), + !this.enablePick && A.button === t.LEFT) { + var e = this.cameraControl.getRaycaster(A.clientX, A.clientY); + if (this.scene.getFillClipPlane().hitTest(e), + this.hit()) + return this.highLight(), + this.cameraControl.needUpdateRenderList(!0), + this.cameraControl.update(!0), + !0 + } + return yp.prototype.processMouseDown(this, A) + }, + Sp.prototype.processMouseUp = function (A) { + this.planeDistance = 0; + var e = !1; + if (this.enablePick && A.button === t.LEFT) + if (this.startPt.x === A.clientX && this.startPt.y === A.clientY) + this.pickHelper.click(A); + else if (A.shiftKey || A.ctrlKey || A.altKey) { + this.endPt.set(A.clientX, A.clientY); + var i = Kc.Clear; + A.ctrlKey ? i = Kc.Add : A.altKey && (i = Kc.Remove); + var o = this; + this.scene.pickByRect(this.frustum, i, (function () { + o.pickHelper.notifySelectionChanged(null, 0, A) + })), + this.cameraControl.updateView(!0), + e = !0 + } + var n = this.cameraControl.getRaycaster(A.clientX, A.clientY); + return this.scene.getFillClipPlane().hitTest(n), + this.hit() ? (this.highLight(), + this.cameraControl.needUpdateRenderList(!0), + this.cameraControl.update(!0), + this.onClipPlane || (this.onClipPlane = !0, + this.modelManager.dispatchEvent({ + type: Rc.ON_CLIP_HOVER, + onClipPlane: !0, + event: A + })), + e = !0) : (this.cancelHighLight(), + this.cameraControl.needUpdateRenderList(!0), + this.cameraControl.update(!0), + this.onClipPlane && (this.onClipPlane = !1, + this.modelManager.dispatchEvent({ + type: Rc.ON_CLIP_HOVER, + onClipPlane: !1, + event: A + }))), + e + }, + Sp.prototype.processMouseMove = function (A) { + return this.modelManager.dispatchEvent({ + type: Rc.ON_CLIP_MOUSE_MOVE, + event: A + }), + yp.prototype.processMouseMove(this, A) + }, + Sp.prototype.processTouchstart = function (A) { + if (this.startPt.set(A.touches[0].clientX, A.touches[0].clientY), + !this.enablePick) { + var e = this.cameraControl.getRaycaster(A.touches[0].clientX, A.touches[0].clientY); + this.scene.getFillClipPlane().hitTest(e) + } + return this.hit() ? (this.highLight(), + this.cameraControl.needUpdateRenderList(!0), + this.cameraControl.update(!0), + !0) : yp.prototype.processTouchstart(this, A) + }, + Sp.prototype.processTouchmove = function (A) { + if (this.hit()) { + if (this.isRotate()) + this.rotate(A.touches[0].clientX - this.startPt.x, A.touches[0].clientY - this.startPt.y), + this.startPt.set(A.touches[0].clientX, A.touches[0].clientY); + else { + this.offset(Number(A.touches[0].clientX - this.startPt.x)), + this.startPt.set(A.touches[0].clientX, A.touches[0].clientY) + } + return this.cameraControl.update(!0), + !0 + } + return yp.prototype.processTouchmove(this, A) + }, + Sp.prototype.processTouchend = function (A) { + return this.enablePick && (this.onUpdateUI({ + visible: !1 + }), + this.startPt.x === A.touches[0].clientX && this.startPt.y === A.touches[0].clientY && this.pickHelper.click(A)), + this.cameraControl.needUpdateRenderList(!0), + this.cancelHighLight(), + this.cameraControl.update(!0), + yp.prototype.processTouchmove(this, A) + }, + Sp.prototype.processHover = function (A) { + if (!this.enablePick) { + var e = !1, + t = this.cameraControl.getRaycaster(A.clientX, A.clientY); + return this.scene.getFillClipPlane().hitTest(t), + this.hit() ? (this.onClipPlane || (this.highLight(), + this.cameraControl.needUpdateRenderList(!0), + this.cameraControl.update(!0), + this.onClipPlane = !0, + this.modelManager.dispatchEvent({ + type: Rc.ON_CLIP_HOVER, + onClipPlane: !0, + event: A + })), + e = !0) : this.onClipPlane ? (this.cancelHighLight(), + this.cameraControl.needUpdateRenderList(!0), + this.cameraControl.update(!0), + this.onClipPlane = !1, + this.modelManager.dispatchEvent({ + type: Rc.ON_CLIP_HOVER, + onClipPlane: !1, + event: A + })) : this.modelManager.dispatchEvent({ + type: Rc.ON_CLIP_HOVER, + onClipPlane: !1, + event: A + }), + e + } + return yp.prototype.processHover(this, A) + }; + var wp = function () { + this.vertexIndex = new Array(2), + this.faceIndex = new Array(2) + }, + Mp = function (A, e) { + var t = A.length / 3, + i = new Array(t), + o = new Array(t); + + function n(A, e) { + var t = i[A], + o = i[e]; + return t.x !== o.x ? t.x - o.x : t.y !== o.y ? t.y - o.y : t.z - o.z + } + for (var r = 0; t > r; r += 1) + i[r] = new y(A[3 * r], A[3 * r + 1], A[3 * r + 2]), + o[r] = r; + o.sort((function (A, e) { + var t = n(A, e); + return 0 === t ? A - e : t + })); + var a = {}, + s = o[0]; + for (r = 1; t > r; r += 1) + 0 === n(s, o[r]) ? a[o[r]] = s : s = o[r]; + var l = new Array(e.length); + for (r = 0; e.length > r; r += 1) + l[r] = a.hasOwnProperty(e[r]) ? a[e[r]] : e[r]; + return l + }, + bp = function (A, e) { + function t(A, e) { + return A - e + } + var i = Mp(A, e); + i.sort(t); + var o = [], + n = i[0]; + o.push(n); + for (var r = 1; i.length > r; r += 1) + i[r] !== n && o.push(n = i[r]); + return o.sort(t) + }, + Up = function (A, e, t) { + t = void 0 === t ? Math.PI / 4 : t; + var i = Mp(A, e), + o = i.length, + n = A.length / 3, + r = new Array(n + o), + a = n, + s = i.length / 3; + parseInt(s, 0) !== s && (Bh.error("triangleCount 不是整数"), + s = parseInt(s, 0)); + for (var l = 0; n > l; l += 1) + r[l] = -1; + var c = new Array(o), + h = 0; + for (l = 0; s > l; l += 1) + for (var d = i[3 * l + 2], p = 0; 3 > p; p += 1) { + var g = !1, + u = i[3 * l + p]; + if (d > u) { + g = !0; + var f = d; + d = u, + u = f + } + var m = new wp; + m.vertexIndex[0] = d, + m.vertexIndex[1] = u, + m.faceIndex[0] = l, + m.faceIndex[1] = l; + var C = r[d]; + if (-1 === C) + r[d] = h, + c[h] = m, + r[a + h] = -1, + h += 1; + else + for (;;) { + if ((E = c[C]).vertexIndex[1] === u) { + E.faceIndex[1] = l; + break + } + var v = r[a + C]; + if (-1 === v) { + r[a + C] = h, + c[h] = m, + r[a + h] = -1, + h += 1; + break + } + C = v + } + g || (d = u) + } + var I = []; + for (l = 0; h > l; l += 1) { + var E; + if ((E = c[l]).faceIndex[0] === E.faceIndex[1]) + I.push(E.vertexIndex[0]), + I.push(E.vertexIndex[1]); + else { + var B = E.faceIndex[0], + x = i[3 * B], + S = i[3 * B + 1], + w = i[3 * B + 2], + M = new y(A[3 * x], A[3 * x + 1], A[3 * x + 2]), + b = new y(A[3 * S], A[3 * S + 1], A[3 * S + 2]), + U = new y(A[3 * w], A[3 * w + 1], A[3 * w + 2]), + F = M.sub(b), + K = b.sub(U), + Q = F.cross(K); + Q.normalize(); + var R = E.faceIndex[1]; + S = i[3 * R + 1], + w = i[3 * R + 2], + M = new y(A[3 * (x = i[3 * R])], A[3 * x + 1], A[3 * x + 2]), + b = new y(A[3 * S], A[3 * S + 1], A[3 * S + 2]), + U = new y(A[3 * w], A[3 * w + 1], A[3 * w + 2]), + F = M.sub(b), + K = b.sub(U); + var T = F.cross(K); + T.normalize(), + Math.abs(Q.dot(T)) < t && (I.push(E.vertexIndex[0]), + I.push(E.vertexIndex[1])) + } + } + return I + }, + Fp = function (A, e, t, i, o) { + for (var n = t.length / 3, r = [], a = 0; n > a; a += 1) { + var s = t[3 * a], + l = new y(e[3 * s], e[3 * s + 1], e[3 * s + 2]), + c = l.dot(o); + if (.001 > Math.abs(c - 1)) { + var h = -new y(A[3 * s], A[3 * s + 1], A[3 * s + 2]).dot(l), + d = Math.abs(i.dot(l) + h); + 3 > Math.abs(d) && r.push(t[3 * a], t[3 * a + 1], t[3 * a + 2]) + } + } + return r + }, + Kp = new y, + Qp = new y, + Rp = new y, + Tp = new y, + kp = function (A) { + this.cameraControl = A, + this.scene = A.scene, + this.timerId = null, + this.lastIntersected = null, + this.edgeDataMap = null + }; + kp.prototype = { + constructor: kp, + destroy: function () { + this.cameraControl = null, + this.scene = null, + this.lastIntersected = null, + this.timerId && (clearTimeout(this.timerId), + this.timerId = null) + }, + click: function (A, e) { + var i = this; + + function o() { + e && !1 === e.pickable && (e = null), + i.handleMousePick(A, !1, e) + } + A.button !== t.RIGHT ? (this.timerId && clearTimeout(this.timerId), + this.timerId = setTimeout(o, 500)) : o() + }, + doubleClick: function (A) { + A.preventDefault(), + this.timerId && clearTimeout(this.timerId), + this.handleMousePick(A, !0, null) + }, + handleMousePick: function (A, e, i) { + var o = this.cameraControl, + n = o.viewer.modelManager.sceneState, + r = new s(A.clientX, A.clientY), + a = o.screenToCanvas(A.clientX, A.clientY), + l = o.viewer.modelManager; + + function c(t, i) { + var o = null; + if (t && t.objectType === Qc.Room) { + var n = t.face.contourIndex, + r = t.object.geometry.contour; + o = n ? { + startPoint: r[n.st], + endPoint: r[n.ed] + } : null + } + l.dispatchEvent({ + type: Rc.ON_CLICK_PICK, + event: A, + doubleClick: e, + canvasPos: { + x: a.x, + y: a.y + }, + intersectInfo: t ? { + selectedObjectId: t.userId, + modelKey: t.modelKey, + objectType: t.objectType, + selectable: i, + worldPosition: t.worldPosition, + worldBoundingBox: t.worldBoundingBox, + point: t.point, + index: t.index, + innnerDebugging: t.innnerDebugging, + object: t.object, + normal: t.face ? t.face.normal : null, + boundaryPoints: o + } : null + }) + } + var h = null; + if (A.button !== t.RIGHT) { + if (i) + i.pickable && (h = i.intersect); + else { + var d = o.getIntersectContext(r); + h = o.intersector.pick(d, null) + } + if (!h) { + var p = n.getSelection(); + if (A.ctrlKey) + return; + return p.length > 0 && (n.clearSelection(), + o.updateView(!0)), + this.setSelectedIdsForOutline(n.getSelection()), + void(i && !i.pickable ? ((h = i.intersect).cx = r.x, + h.cy = r.y, + c(h, !1)) : c(null)) + } + var g = h.userId; + if (mh.isMobileDevice() && (o.pivot = h.point), + this.scene.intersectToWorld(h, o.viewer), + h.innnerDebugging = A.altKey, + h.cx = r.x, + h.cy = r.y, + this.lastPickedUserId = g, + h.face && h.face.normal) { + var u = h.face.normal; + for (var f in u) + u[f] = u[f] === -u[f] ? Math.abs(u[f]) : u[f] + } + if (A.button !== t.RIGHT) + if (e) + vc.EnableDemolishByDClick ? (n.setSelection([g]), + c(h, !0), + o.updateView(!0)) : (n.setSelection([g]), + o.fitAndRotateBySelection(), + c(h, !0)); + else { + var m = n.getSelection(); + if (!!vc.MultipleSelectComponents && A.ctrlKey) { + var C = m.indexOf(g); - + 1 === C ? n.addSelection([g]) : (m.splice(C, 1), + n.setSelection(m)) + } else + -1 === m.indexOf(g) ? n.setSelection([g]) : n.clearSelection(); + this.setSelectedIdsForOutline(n.getSelection()), + c(h, !0), + o.updateView(!0) + } + else + c(h, !1) + } else + c(h, !1) + }, + handleShiftMeasure: function (A, e, t) { + var i = null, + o = this.cameraControl, + n = new s(A.clientX, A.clientY), + r = o.getIntersectContext(n); + + function a(t, n, r, a, s, l) { + var c = o.viewer.modelManager; + if (null !== t) { + var h = o.scene.drawingToWorld(t); + t.copy(h) + } + if (null !== r) { + var d = o.scene.drawingToWorld(r[0]), + p = o.scene.drawingToWorld(r[1]); + r[0].copy(d), + r[1].copy(p) + } + c.dispatchEvent(i = { + type: Rc.ON_MEASURE_PICK, + event: A, + pick: e, + pickPoint: t, + isAbsorbPoint: n, + pickLine: r, + pickPlane: a, + userId: s, + measureUnit: l + }) + } + return o.intersector.pick(r, (function (A) { + if (A) { + var i = "", + n = A.object.modelKey; + if (n) { + var r = o.viewer.modelManager.getModel(n); + r && r.originalLengthUnit && (i = r.originalLengthUnit) + } + var s = new y; + s.subVectors(A.point, t), + s.normalize(); + var l = new y(1, 0, 0), + c = new y(0, 1, 0), + h = new y(0, 0, 1), + d = l.dot(s), + p = c.dot(s), + g = h.dot(s), + u = new y; + u.copy(t); + .707 > Math.abs(p) ? Math.abs(g) < Math.abs(d) ? u.x = A.point.x : u.z = A.point.z : u.y = A.point.y, + e && t.copy(u), + a(u, !1, null, !1, A.userId, i) + } else + a(null, !1, null, !1) + })), + i + }, + handleMouseMeasure: function (A, e, t, i) { + var o = null, + n = this.cameraControl, + r = n.scene, + a = i || Rc.ON_MEASURE_PICK, + s = this.pickToPoint({ + x: A.clientX, + y: A.clientY + }, 5); + + function l(t, i, r, s, l, c, h) { + var d = n.viewer.modelManager; + if (null !== t) { + var p = n.scene.drawingToWorld(t); + t.copy(p) + } + if (null !== r) { + var g = n.scene.drawingToWorld(r[0]), + u = n.scene.drawingToWorld(r[1]); + r[0].copy(g), + r[1].copy(u) + } + (s || e || r || t) && d.dispatchEvent(o = { + type: a, + event: A, + pick: e, + pickPoint: t, + isAbsorbPoint: i, + pickLine: r, + pickPlane: s, + normal: l, + userId: c, + measureUnit: h + }) + } + return null !== s ? (e && t.copy(s.pickPoint), + l(s.pickPoint, s.isAbsorbPoint, s.pickLine, s.pickPlane, s.face.normal, s.userId, s.measureUnit)) : (r.hasGroup(gp.MEASUREPICKPLANE) && r.removeGroupByName(gp.MEASUREPICKPLANE), + l(null, !1, null, !1)), + o + }, + handleMouseHover: function (A) { + var e = this, + t = this.cameraControl, + i = t.viewer.modelManager.sceneState; + if (function () { + if (!1 === e.scene.hasGroup(gp.AXISGRIDMANAGER)) + return !1; + var A = e.scene.getAxisGridManager(); + return 0 !== A.getElements().length && !1 !== A.getIsEnableHover() + }()) { + var o = this.scene.getMatrixGlobal(), + n = new s(A.clientX, A.clientY), + r = t.getRaycaster(n.x, n.y), + a = this.scene.getAxisGridManager(), + l = a.getIntersectPoints(r, o), + c = a.snapOnFloors(l); + t.viewer.modelManager.dispatchEvent({ + type: Rc.ON_AXIS_GRID_HOVER, + snaps: c + }) + } + if (vc.Hover) { + var h = t.screenToCanvas(A.clientX, A.clientY), + d = new s(A.clientX, A.clientY), + p = t.getIntersectContext(d); + t.intersector.pick(p, (function (A) { + function o(A) { + switch (A.objectType) { + case Qc.Marker3d: + A.object.setAttributeSize(A.index, A.currentSize); + break; + default: + i.clearHover() + } + } + if (A) { + var n = vc.Hover || A.hoverEnabled; + e.lastIntersected && (e.lastIntersected.userId !== A.userId && o(e.lastIntersected), + e.lastIntersected.hoverEnabled && g(null)), + n ? (e.lastIntersected && e.lastIntersected.userId === A.userId || (! function (A) { + switch (A.objectType) { + case Qc.Marker3d: + var e = A.object; + A.currentSize = e.getAttributeSize(A.index), + e.setAttributeSize(A.index, Math.floor(1.5 * A.currentSize)); + break; + default: + i.setHoverId(vc.EnableRenderPass ? A.object.originalId : A.userId) + } + }(A), + e.lastIntersected = A), + g(A, !0)) : e.lastIntersected = A, + t.updateHighlight() + } else + e.lastIntersected && (o(e.lastIntersected), + e.lastIntersected = null, + g(null), + t.updateHighlight()) + })) + } + + function g(i, o) { + var n = t.viewer.modelManager; + null !== i && e.scene.intersectToWorld(i, t.viewer), + n.dispatchEvent({ + type: Rc.ON_HOVER_PICK, + event: A, + canvasPos: { + x: h.x, + y: h.y + }, + intersectInfo: i ? { + selectedObjectId: i.userId, + objectType: i.objectType, + selectable: o, + modelKey: i.modelKey, + worldPosition: i.worldPosition, + worldBoundingBox: i.worldBoundingBox, + point: i.point, + innnerDebugging: i.innnerDebugging, + object: i.object + } : null + }) + } + }, + _canPick: function () { + return this.cameraControl.viewer.modelManager.hasModelDataReady() + }, + setSelectedIdsForOutline: function (A) { + this.cameraControl.viewer.rendererManager.composer && this.cameraControl.viewer.rendererManager.composer.setSelectedIds(A) + }, + pickToPoint: function (A, e) { + var t = 0; + t = void 0 === e ? 25 : e * e; + var i = this.cameraControl, + o = i.scene, + n = new s(A.x, A.y), + r = i.getIntersectContext(n), + a = i.intersector.pick(r); + if (a) { + var l = "", + c = a.object.modelKey, + h = null; + c && (h = i.viewer.modelManager.getModel(c)) && h.originalLengthUnit && (l = h.originalLengthUnit); + var d = a.point, + p = a.object.geometry, + g = ((new M).extractRotation(a.object.matrix.clone()), + a.object.matrixWorld.clone()), + u = i.camera.projScreenMatrix, + f = r.mouse, + m = r.viewportSize, + C = null; + if (null != a.indexInfo && (C = a.indexInfo), + !p.attributes && !p._bufferGeometry) + return null; + var v = p.attributes ? p : p._bufferGeometry; + if (!v.index || void 0 === v.attributes.normal) + return null; + var I = v.attributes.position.array, + E = v.attributes.normal.array, + B = []; + C || h && h.merged && g.multiply(a.matrix); + var x = 1 / 0, + S = (A = new y, + []), + w = new y, + b = new y, + U = w.set(I[3 * a.face.a], I[3 * a.face.a + 1], I[3 * a.face.a + 2]); + U.applyMatrix4(g); + var F = b.copy(U); + F.applyMatrix4(u); + var K = .5 * (F.x - f.x) * m.width, + Q = .5 * (F.y - f.y) * m.height, + R = K * K + Q * Q; + x > R && (x = R, + A.copy(U)), + (U = w.set(I[3 * a.face.b], I[3 * a.face.b + 1], I[3 * a.face.b + 2])).applyMatrix4(g), + (F = b.copy(U)).applyMatrix4(u), + x > (R = (K = .5 * (F.x - f.x) * m.width) * K + (Q = .5 * (F.y - f.y) * m.height) * Q) && (x = R, + A.copy(U)), + (U = w.set(I[3 * a.face.c], I[3 * a.face.c + 1], I[3 * a.face.c + 2])).applyMatrix4(g), + (F = b.copy(U)).applyMatrix4(u), + x > (R = (K = .5 * (F.x - f.x) * m.width) * K + (Q = .5 * (F.y - f.y) * m.height) * Q) && (x = R, + A.copy(U)); + var T = d.clone(), + k = !1, + D = null, + L = !1; + if (t > x) + o.hasGroup(gp.MEASUREPICKPLANE) && o.removeGroupByName(gp.MEASUREPICKPLANE), + T = A.clone(), + k = !0; + else { + x = 1 / 0; + var N = new y, + O = new y; + A = new y; + var V, G = this._getEegeData(a); + if (!G) + return Bh.error("no edge data"), + null; + S = G.positionsArray, + V = G.edgeIndex; + for (var P = 0; V.length > P; P += 2) { + Rp.set(S[3 * V[P]], S[3 * V[P] + 1], S[3 * V[P] + 2]), + Rp.applyMatrix4(g), + Tp.set(S[3 * V[P + 1]], S[3 * V[P + 1] + 1], S[3 * V[P + 1] + 2]), + Tp.applyMatrix4(g); + var q = this._pointToLine(Rp, Tp, d); + (F = q.clone()).applyMatrix4(u), + x > (R = (K = .5 * (F.x - f.x) * m.width) * K + (Q = .5 * (F.y - f.y) * m.height) * Q) && (x = R, + N.copy(Rp), + O.copy(Tp), + A.copy(q)) + } + if (S = null, + t > x) + o.hasGroup(gp.MEASUREPICKPLANE) && o.removeGroupByName(gp.MEASUREPICKPLANE), + (D = []).push(N), + D.push(O), + T = A.clone(); + else { + if (vc.MeasureHighlightPlane) { + B = v.index.array; + var j = new M; + j.getInverse(g); + var H = new y(d.x, d.y, d.z); + H.applyMatrix4(j); + var Y = Fp(I, E, B, H, a.face.normal), + W = new he; + W.setIndex(Y), + W.setAttribute("position", p.attributes.position, 3), + W.setAttribute("normal", p.attributes.normal, 3); + var J = Up(I, Y), + z = new he; + z.setIndex(J), + z.setAttribute("position", p.attributes.position, 3), + o.hasGroup(gp.MEASUREPICKPLANE) && o.removeGroupByName(gp.MEASUREPICKPLANE); + var Z = o.getOrCreateGroup(gp.MEASUREPICKPLANE, { + priority: 1, + globalSpace: !0 + }), + X = new Ue(W, new jA({ + color: 1170103, + opacity: .1, + transparent: !0 + })); + X.applyMatrix4(a.object.matrix), + Z.add(X); + var _ = new jo(z, new ko({ + color: 1170103 + })); + _.applyMatrix4(a.object.matrix), + Z.add(_), + Z.updateMatrixWorld(!0), + i.updateHighlight() + } + L = !0 + } + } + var $ = {}; + return $.pickPoint = T, + $.isAbsorbPoint = k, + $.measureUnit = l, + $.pickLine = D, + $.pickPlane = L, + $.face = a.face, + $.userId = a.userId, + $ + } + return null + }, + _getEegeData: function (A) { + var e = A.object.geometry; + this.edgeDataMap || (this.edgeDataMap = {}); + var t = null; + null != A.indexInfo && (t = A.indexInfo); + var i = e.attributes ? e : e._bufferGeometry, + o = A.nodeId || A.userId; + return this.edgeDataMap[i.id] ? this.edgeDataMap[i.id].version !== i.attributes.position.version ? (delete this.edgeDataMap[i.id].data, + this.edgeDataMap[i.id].data[o] = this._getPositionArrayAndEdgeIndex(i, t)) : this.edgeDataMap[i.id].data[o] || (this.edgeDataMap[i.id].data[o] = this._getPositionArrayAndEdgeIndex(i, t)) : (this.edgeDataMap[i.id] = {}, + this.edgeDataMap[i.id].version = i.attributes.position.version, + this.edgeDataMap[i.id].data = {}, + this.edgeDataMap[i.id].data[o] = this._getPositionArrayAndEdgeIndex(i, t)), + this.edgeDataMap[i.id].data[o] + }, + _getPositionArrayAndEdgeIndex: function (A, e) { + var t = [], + i = 0, + o = 0, + n = [], + r = [], + a = A.attributes.position.array, + s = []; + if (e) { + e.positionStart / 3; + for (var l = uh.getMin((t = A.index.array).slice(i = e.indexStart, o = e.indexStart + e.indexCount)), c = i; o > c; c += 1) + r.push(t[c] - l); + n = a.slice(e.positionStart, e.positionStart + e.positionCount), + s = Up(n, r) + } else + o = (t = bp(A.attributes.position.array, A.index.array)).length, + n = a, + s = Up(A.attributes.position.array, A.index.array); + return { + positionsArray: n, + edgeIndex: s + } + }, + _pointToLine: function (A, e, t) { + Kp.subVectors(e, A), + Qp.subVectors(t, A); + var i = Kp.dot(Qp); + if (0 > i) + return A; + var o = Kp.dot(Kp); + if (i > o) + return e; + i /= o; + var n = A.clone(); + return n.addScaledVector(Kp, i), + n + } + }; + var Dp = "http://www.w3.org/2000/svg", + Lp = function () { + var A = document.createElementNS(Dp, "svg"), + e = function (A, e, t, i) { + var o = document.createElementNS(Dp, "defs"), + n = document.createElementNS(Dp, "filter"); + n.id = A, + n.setAttributeNS(null, "x", "-30%"), + n.setAttributeNS(null, "y", "-30%"), + n.setAttributeNS(null, "width", "200%"), + n.setAttributeNS(null, "height", "200%"); + var r = document.createElementNS(Dp, "feGaussianBlur"); + r.setAttributeNS(null, "in", "SourceAlpha"), + r.setAttributeNS(null, "stdDeviation", "4"); + var a = document.createElementNS(Dp, "feOffset"); + a.setAttributeNS(null, "result", "offsetblur"); + var s = document.createElementNS(Dp, "feMerge"), + l = document.createElementNS(Dp, "feMergeNode"), + c = document.createElementNS(Dp, "feMergeNode"); + return c.setAttributeNS(null, "in", "SourceGraphic"), + s.appendChild(l), + s.appendChild(c), + n.appendChild(r), + n.appendChild(a), + n.appendChild(s), + o.appendChild(n), + o + }("drop-shadow"); + return A.appendChild(e), + A + }, + Np = function () { + return document.createElementNS(Dp, "line") + }, + Op = function () { + return document.createElementNS(Dp, "path") + }, + Vp = function (A) { + var e = document.createElementNS(Dp, "circle"); + return e.setAttributeNS(null, "r", A || 0), + e.setAttributeNS(null, "fill", "none"), + e + }, + Gp = function () { + return document.createElementNS(Dp, "text") + }, + Pp = function () { + return document.createElementNS(Dp, "g") + }, + qp = function (A, e) { + var t = Math.pow(A[0] - e[0], 2), + i = Math.pow(A[1] - e[1], 2), + o = 0; + return 3 === A.length && 3 === e.length && (o = Math.pow(A[2] - e[2], 2)), + Math.sqrt(t + i + o) + }, + jp = function (A) { + var e = Math.pow(A[0], 2), + t = Math.pow(A[1], 2), + i = 0; + A.length > 2 && (i = Math.pow(A[2], 2)); + var o = Math.sqrt(e + t + i), + n = [A[0] / o, A[1] / o]; + return A.length > 2 && n.push(A[2] / o), + n + }, + Hp = function (A, e) { + var t = 0; + return A.length > 2 && e.length > 2 && (t = A[2] * e[2]), + A[0] * e[0] + A[1] * e[1] + t + }, + Yp = function (A, e) { + var t = A[0], + i = A[1], + o = A[2], + n = e[0], + r = e[1], + a = e[2]; + return [i * a - o * r, o * n - t * a, t * r - i * n] + }, + Wp = function (A) { + return "mm" === A ? 1 : "cm" === A ? 10 : "m" === A ? 1e3 : 1 + }, + Jp = function (A, e, t, i) { + var o = Wp(A); + 2 === i ? o *= o : 3 === i && (o *= o * o); + var n = Wp(e); + return 2 === i ? n *= n : 3 === i && (n *= n * n), + t * o / n + }, + zp = function (A, e) { + return !(e.x > A.x + A.width || A.x > e.x + e.width || e.y > A.y + A.height || A.y > e.y + e.height) + }, + Zp = function () { + return "undefined" != typeof window && "ontouchstart" in window + }, + Xp = function (A) { + this.svg = A, + this.maxPointsNeed = 0, + this.pickedPoints = [], + this.svgGroup = Pp(), + this.svg.appendChild(this.svgGroup), + this.unitOfModel = void 0, + this.unitOnUI = void 0, + this.precision = 3, + this.adjustOption = void 0, + this.is3DMode = !1, + this.isSelected = !1, + this.onclickCallback = void 0 + }; + Xp.prototype.addPickedPoint = function (A, e, t) { + return !this.isDone() && (!!A && (this.pickedPoints.push(A), + e && (this.unitOfModel = this.unitOfModel && this.unitOfModel !== e ? void 0 : e), + !0)) + }, + Xp.prototype.getAllPickedPoint = function () { + return this.pickedPoints + }, + Xp.prototype.draw = function (A, e) {}, + Xp.prototype.adjustWithOption = function (A) { + this.adjustOption = A, + A && this.updateTexts() + }, + Xp.prototype.unAdjustWithOption = function (A) { + this.adjustOption = void 0, + this.updateTexts() + }, + Xp.prototype.changeUnit = function (A) { + A && (this.unitOnUI = A, + this.updateTexts()) + }, + Xp.prototype.changePrecision = function (A) { + this.precision = A, + A && this.updateTexts() + }, + Xp.prototype.updateTexts = function () {}, + Xp.prototype.isVisible = function () { + return !!(this.svg && this.svgGroup && this.svgGroup.parentNode) + }, + Xp.prototype.remove = function () { + this.svg && this.svgGroup && this.svgGroup.parentNode && (this.svg.removeChild(this.svgGroup), + this.onclickCallback = void 0) + }, + Xp.prototype.add = function () { + this.svg && this.svgGroup && this.svg.appendChild(this.svgGroup) + }, + Xp.prototype.isDone = function () { + return this.pickedPoints.length === this.maxPointsNeed + }, + Xp.prototype.setClickCallback = function (A) { + this.onclickCallback = A + }, + Xp.prototype.measureResult = function () {}, + Xp.prototype.createCircle = function () { + var A = Vp(5); + return A.setAttributeNS(null, "fill", "#ff9800"), + A.setAttributeNS(null, "stroke", "#ffffff"), + A.setAttributeNS(null, "stroke-width", 2), + A.style.display = "none", + A + }, + Xp.prototype.createLine = function () { + var A = Np(); + return A.setAttributeNS(null, "stroke-width", 2), + A.setAttributeNS(null, "stroke", "#ffff00"), + A.style.display = "none", + A + }, + Xp.prototype.createText = function () { + var A = Gp(); + return A.style.fontSize = "14", + A.style.display = "none", + A.style.textAnchor = "middle", + A.setAttributeNS(null, "fill", "#ffffff"), + A + }, + Xp.prototype.createPath = function () { + var A = Op(); + return A.style.display = "none", + A.setAttributeNS(null, "fill", "none"), + A.setAttributeNS(null, "stroke", "#0aea06"), + A + }, + Xp.prototype.resultToDisplayOfLength = function (A) { + var e = A, + t = this.unitOfModel; + return this.adjustOption && (e = this.adjustOption.adjustLength(A), + t = this.adjustOption.unit), + this.unitOnUI && (t && (e = Jp(t, this.unitOnUI, e, 0)), + t = this.unitOnUI), + t || (t = ""), + e = e.toFixed(this.precision), { + value: Number(e), + unit: t, + text: e + t + } + }, + Xp.prototype.setSelected = function (A) { + return this.isSelected !== A && (this.isSelected = A, + !0) + }; + var _p = function () { + this.group = Pp(), + this.group.style.display = "none"; + var A = Op(); + this.textBackground = A, + this.group.appendChild(A), + A = Op(), + this.prefixTextBackground = A, + this.prefixTextBackground.style.display = "none", + this.group.appendChild(A); + var e = Gp(); + e.style.fontSize = "12", + e.style.textAnchor = "middle", + e.style.dominantBaseline = "central", + e.style.cursor = "default", + e.setAttributeNS(null, "fill", "#ffffff"), + this.group.appendChild(e), + this.text = e, + (e = Gp()).style.fontSize = "12", + e.style.textAnchor = "middle", + e.style.dominantBaseline = "central", + e.style.display = "none", + e.setAttributeNS(null, "fill", "#ffffff"), + this.group.appendChild(e), + this.prefixText = e, + this.textColor = "#ffffff", + this.prefixTextColor = "#ffffff", + this.textBackgroundColor = "#ffffff", + this.prefixTextBackgroundColor = "blue", + this.textContent = void 0, + this.prefixTextContent = void 0, + this.textPosition = { + x: 0, + y: 0 + }, + this.isShowShadow = !1, + this.onclickCallback = void 0, + this._onMouseDown = this._onMouseDown.bind(this), + this._onMouseMove = this._onMouseMove.bind(this), + this._onMouseUp = this._onMouseUp.bind(this) + }; + _p.prototype.draw = function (A) { + if (this.textContent && this.textContent.length) { + this.group.style.display = "", + this.text.textContent = this.textContent; + var e = null; + this.prefixTextContent ? (this.prefixText.textContent = this.prefixTextContent, + this.prefixText.style.display = "", + e = this.prefixText.getBBox()) : (this.prefixText.style.display = "none", + e = { + width: 0, + height: 0 + }); + var t = this.text.getBBox(), + i = 5 + t.width + 5; + this.prefixTextContent && this.prefixTextContent.length > 0 && (i = i + 5 + e.width + 5), + A && (i = Math.max(A, i)); + var o = this.textPosition.x - i / 2, + n = this.textPosition.y - (5 + t.height + 5) / 2, + r = function (A, e, t, i, o) { + return "M" + A + "," + (e + o) + "a" + o + "," + o + " 0 0 1 " + o + "," + -o + "h" + (t - 2 * o) + "a" + o + "," + o + " 0 0 1 " + o + "," + o + "v" + (i - 2 * o) + "a" + o + "," + o + " 0 0 1 " + -o + "," + o + "h" + (2 * o - t) + "a" + o + "," + o + " 0 0 1 " + -o + "," + -o + "v" + (2 * o - i) + "z" + }(o, n, i, t.height + 10, 5); + this.textBackground.setAttributeNS(null, "d", r), + this.textBackground.setAttributeNS(null, "fill", this.textBackgroundColor), + this.isShowShadow ? this.group.setAttributeNS(null, "filter", "url(#drop-shadow)") : this.group.removeAttributeNS(null, "filter"), + this.prefixTextContent && this.prefixTextContent.length > 0 ? (r = function (A, e, t, i, o) { + return "M" + A + "," + (e + o) + "a" + o + "," + o + " 0 0 1 " + o + "," + -o + "h" + (t - o) + "v" + i + "h" + (o - t) + "a" + o + "," + o + " 0 0 1 " + -o + "," + -o + "v" + (2 * o - i) + "z" + }(o, n, e.width + 10, e.height + 10, 5), + this.prefixTextBackground.setAttributeNS(null, "d", r), + this.prefixTextBackground.setAttributeNS(null, "fill", this.prefixTextBackgroundColor), + this.prefixTextBackground.style.display = "", + this.prefixText.setAttributeNS(null, "x", o + 5 + e.width / 2), + this.prefixText.setAttributeNS(null, "y", n + 5 + e.height / 2), + o = o + (10 + e.width) / 2 + i / 2) : o += i / 2, + this.text.setAttributeNS(null, "x", o), + this.text.setAttributeNS(null, "y", n + 5 + t.height / 2), + this.text.setAttributeNS(null, "fill", this.textColor), + this.prefixText.setAttributeNS(null, "fill", this.prefixTextColor) + } + }, + _p.prototype.setText = function (A, e) { + this.textContent = A, + this.prefixTextContent = e + }, + _p.prototype.setPosition = function (A, e) { + this.textPosition = { + x: A, + y: e + } + }, + _p.prototype.hide = function () { + this.group.style.display = "none" + }, + _p.prototype.show = function () { + this.group.style.display = "" + }, + _p.prototype.setClickCallback = function (A) { + this.onclickCallback = A, + A ? (this.group.style.cursor = "pointer", + this.text.style.cursor = "pointer", + Zp() ? (this.group.addEventListener("touchstart", this._onMouseDown), + this.group.addEventListener("touchend", this._onMouseUp), + this.group.addEventListener("touchmove", this._onMouseMove)) : (this.group.addEventListener("mousedown", this._onMouseDown), + this.group.addEventListener("mouseup", this._onMouseUp), + this.group.addEventListener("mousemove", this._onMouseMove))) : (this.group.style.cursor = "default", + this.text.style.cursor = "default", + Zp() ? (this.group.removeEventListener("touchstart", this._onMouseDown), + this.group.removeEventListener("touchend", this._onMouseUp), + this.group.removeEventListener("touchmove", this._onMouseMove)) : (this.group.removeEventListener("mousedown", this._onMouseDown), + this.group.removeEventListener("mouseup", this._onMouseUp), + this.group.removeEventListener("mousemove", this._onMouseMove))) + }, + _p.prototype._onMouseMove = function (A) { + A.stopPropagation(), + A.preventDefault() + }, + _p.prototype._onMouseDown = function (A) { + A.stopPropagation(), + A.preventDefault() + }, + _p.prototype._onMouseUp = function (A) { + A.stopPropagation(), + A.preventDefault(), + this.onclickCallback && this.onclickCallback() + }; + var $p = function (A) { + Xp.call(this, A), + this.maxPointsNeed = 2, + this.startCircle = this.createCircle(), + this.startCircle.setAttributeNS(null, "fill", "#ffffff"), + this.endCircle = this.createCircle(), + this.endCircle.setAttributeNS(null, "fill", "#ffffff"), + this.svgGroup.appendChild(this.startCircle), + this.svgGroup.appendChild(this.endCircle), + this.line = this.createLine(), + this.line.setAttributeNS(null, "stroke", "#ffffff"), + this.line.setAttributeNS(null, "strokd-width", 2), + this.svgGroup.appendChild(this.line), + this.text = new _p, + this.text.textBackgroundColor = "#ffffff", + this.text.textColor = "#000000", + this.svgGroup.appendChild(this.text.group), + this._distance = void 0 + }; + ($p.prototype = Object.assign(Object.create(Xp.prototype), { + constructor: $p + })).addPickedPoint = function (A, e, t) { + Xp.prototype.addPickedPoint.call(this, A, e, t) && this.isDone() && (this._enableSelect(), + this._distance = qp(this.pickedPoints[0], this.pickedPoints[1])) + }, + $p.prototype.draw = function (A, e) { + if (this.svgGroup.parentNode) { + var t = this.pickedPoints; + if (t.length > 0) { + A && !this.isDone() && (t = t.concat([A])); + var i = t; + if (e) { + for (var o = [], n = 0, r = t.length; r > n; n += 1) + o[n] = e(t[n]); + i = o + } + var a = i[0], + s = i.length > 1 ? i[1] : a; + if (this.startCircle.setAttributeNS(null, "cx", a[0]), + this.startCircle.setAttributeNS(null, "cy", a[1]), + this.startCircle.style.display = "", + this.line.setAttributeNS(null, "x1", a[0]), + this.line.setAttributeNS(null, "y1", a[1]), + this.line.setAttributeNS(null, "x2", s[0]), + this.line.setAttributeNS(null, "y2", s[1]), + this.line.style.display = "", + this.text.setPosition((a[0] + s[0]) / 2, (a[1] + s[1]) / 2), + t.length > 1) { + var l = qp(t[0], t[1]); + this._distance = l + } + 2 === this.pickedPoints.length ? (this.endCircle.setAttributeNS(null, "cx", s[0]), + this.endCircle.setAttributeNS(null, "cy", s[1]), + this.endCircle.style.display = "") : this.endCircle.style.display = "none", + this._updateText() + } + } + }, + $p.prototype.measureResult = function () { + if (this.isDone()) { + var A = {}; + if (A.distance = this._distance, + this.adjustOption) { + var e = this.resultToDisplayOfLength(this._distance); + A.unit = e.unit, + A.value = e.value + } + return A + } + }, + $p.prototype.adjustWithOption = function (A) { + Xp.prototype.adjustWithOption.call(this, A), + this._updateText(), + this._disableSelect() + }, + $p.prototype.changeUnit = function (A) { + Xp.prototype.changeUnit.call(this, A), + A && this._updateText() + }, + $p.prototype.changePrecision = function (A) { + Xp.prototype.changePrecision.call(this, A), + A && this._updateText() + }, + $p.prototype._enableSelect = function () { + var A = this; + this.startCircle.onmousedown = function (e) { + A.isDone() && (A.pickedPoints = A.pickedPoints.slice(1), + e.stopPropagation(), + A._disableSelect()) + }, + this.endCircle.onmousedown = function (e) { + A.isDone() && (A.pickedPoints = A.pickedPoints.slice(0, 1), + e.stopPropagation(), + A._disableSelect()) + } + }, + $p.prototype._disableSelect = function () { + this.startCircle.onmousedown = void 0, + this.endCircle.onmousedown = void 0 + }, + $p.prototype._updateText = function () { + this.isDone() && this._distance && this.adjustOption && (this.text.setText(this.resultToDisplayOfLength(this._distance).text), + this.text.draw()) + }; + var Ag = function () { + this.unit = void 0, + this.valueBeforeAdjust = void 0, + this.valueAfterAdjust = void 0 + }; + Ag.prototype.adjustLength = function (A) { + return this.valueAfterAdjust && this.valueBeforeAdjust ? A * this.valueAfterAdjust / this.valueBeforeAdjust : A + }, + Ag.prototype.adjustArea = function (A) { + return this.valueAfterAdjust && this.valueBeforeAdjust ? A * Math.pow(this.valueAfterAdjust / this.valueBeforeAdjust, 2) : A + }, + Ag.prototype.adjustVolume = function (A) { + return this.valueAfterAdjust && this.valueBeforeAdjust ? A * Math.pow(this.valueAfterAdjust / this.valueBeforeAdjust, 3) : A + }; + var eg = function (A) { + Xp.call(this, A), + this.maxPointsNeed = 3, + this._angle = void 0, + this.circle1 = this.createCircle(), + this.circle2 = this.createCircle(), + this.circle3 = this.createCircle(), + this.svgGroup.appendChild(this.circle1), + this.svgGroup.appendChild(this.circle2), + this.svgGroup.appendChild(this.circle3), + this.line1 = this.createLine(), + this.line1.setAttributeNS(null, "stroke-width", 2), + this.svgGroup.appendChild(this.line1), + this.line2 = this.createLine(), + this.line2.setAttributeNS(null, "stroke-width", 2), + this.svgGroup.appendChild(this.line2), + this.arc = this.createPath(), + this.svgGroup.appendChild(this.arc), + this.angleText = new _p, + this.angleText.textBackgroundColor = "#009bff", + this.svgGroup.appendChild(this.angleText.group); + var e = this; + this.angleText.setClickCallback((function () { + e.onclickCallback && e.onclickCallback(e) + })) + }; + (eg.prototype = Object.assign(Object.create(Xp.prototype), { + constructor: eg + })).addPickedPoint = function (A, e, t) { + if (Xp.prototype.addPickedPoint.call(this, A, e, t) && this.isDone()) { + var i = this.pickedPoints[0], + o = this.pickedPoints[1], + n = this.pickedPoints[2], + r = (a = [n[0] - o[0], n[1] - o[1], n[2] - o[2]], + s = jp([i[0] - o[0], i[1] - o[1], i[2] - o[2]]), + l = jp(a), + c = Hp(s, l), + Math.acos(c) / Math.PI * 180); + this._angle = r + } + var a, s, l, c + }, + eg.prototype.draw = function (A, e) { + if (this.svgGroup.parentNode) { + var t = this.pickedPoints; + if (t.length > 0) { + A && !this.isDone() && (t = t.concat([A])); + var i = t, + o = !0; + if (e) { + for (var n = !0, r = [], a = 0, s = t.length; s > a; a += 1) + r[a] = e(t[a]), + o && r[a][0] > 0 && r[a][0] < parseInt(this.svg.style.width, 10) && r[a][1] > 0 && r[a][1] < parseInt(this.svg.style.height, 10) && (o = !1), + void 0 !== r[a][2] && 0 !== r[a][2] || (n = !1); + i = r, + n && (o = !0) + } + if (this.pickedPoints.length >= 1) { + var l = i[0], + c = i[1]; + this.circle1.setAttributeNS(null, "cx", l[0]), + this.circle1.setAttributeNS(null, "cy", l[1]), + this.circle1.style.display = "", + (A || this.pickedPoints.length > 1) && (this.line1.setAttributeNS(null, "x1", l[0]), + this.line1.setAttributeNS(null, "y1", l[1]), + this.line1.setAttributeNS(null, "x2", c[0]), + this.line1.setAttributeNS(null, "y2", c[1]), + this.line1.style.display = "") + } + if (this.pickedPoints.length >= 2) { + var h = i[1], + d = i[2]; + this.circle2.setAttributeNS(null, "cx", h[0]), + this.circle2.setAttributeNS(null, "cy", h[1]), + this.circle2.style.display = "", + (A || this.pickedPoints.length > 2) && (this.line2.setAttributeNS(null, "x1", h[0]), + this.line2.setAttributeNS(null, "y1", h[1]), + this.line2.setAttributeNS(null, "x2", d[0]), + this.line2.setAttributeNS(null, "y2", d[1]), + this.line2.style.display = "") + } + if (3 === this.pickedPoints.length) { + if (o) + return void(this.svgGroup.style.display = "none"); + this.svgGroup.style.display = ""; + var p = i[2]; + this.circle3.setAttributeNS(null, "cx", p[0]), + this.circle3.setAttributeNS(null, "cy", p[1]), + this.circle3.style.display = ""; + var g = i[0].slice(0, 2), + u = i[1].slice(0, 2), + f = i[2].slice(0, 2), + m = qp(g, u), + C = qp(u, f), + y = Math.min(Math.min(m, C), 30), + v = jp([g[0] - u[0], g[1] - u[1]]), + I = [u[0] + v[0] * y, u[1] + v[1] * y], + E = jp([f[0] - u[0], f[1] - u[1]]), + B = [u[0] + E[0] * y, u[1] + E[1] * y], + x = [(I[0] + B[0]) / 2, (I[1] + B[1]) / 2], + S = [x[0] - u[0], x[1] - u[1]], + w = [u[0] + (S = [1.5 * S[0], 1.5 * S[1]])[0], u[1] + S[1]], + M = "M" + I[0] + "," + I[1]; + M += "Q" + w[0] + "," + w[1], + this.arc.setAttributeNS(null, "d", M += " " + B[0] + "," + B[1]), + this.arc.style.display = "", + this.angleText.setText(this._angle.toFixed(this.precision) + "°"), + this.angleText.setPosition(w[0], w[1]), + this.angleText.draw() + } + } + } + }, + eg.prototype.setSelected = function (A) { + Xp.prototype.setSelected.call(this, A) && (A ? (this.angleText.isShowShadow = !0, + this.angleText.textBackgroundColor = "#ffffff", + this.angleText.textColor = "#009bff", + this.angleText.draw()) : (this.angleText.isShowShadow = !1, + this.angleText.textBackgroundColor = "#009bff", + this.angleText.textColor = "#ffffff", + this.angleText.draw())) + }, + eg.prototype.measureResult = function () { + return this._angle + }; + var tg = function (A) { + Xp.call(this, A), + this.path = Op(), + this.path.setAttributeNS(null, "fill", "none"), + this.path.setAttributeNS(null, "stroke", "rgb(69,195,69)"), + this.svgGroup.appendChild(this.path), + this._isDone = !1, + this._circles = [], + this._area = -1, + this.resultText = new _p, + this.resultText.textBackgroundColor = "#009bff", + this.svgGroup.appendChild(this.resultText.group); + var e = this; + this.resultText.setClickCallback((function () { + e.onclickCallback && e.onclickCallback(e) + })) + }; + (tg.prototype = Object.assign(Object.create(Xp.prototype), { + constructor: tg + })).addPickedPoint = function (A, e, t) { + if (this._pointCanClosePath(A, t)) + this._isDone = !0, + this._area = this.is3DMode ? this._calculateArea3D() : this._calculateArea2D(); + else if (Xp.prototype.addPickedPoint.call(this, A, e, t)) { + var i = this.createCircle(); + this.svgGroup.appendChild(i), + this._circles.push(i) + } + }, + tg.prototype.isDone = function () { + return this._isDone + }, + tg.prototype.draw = function (A, e) { + if (this.svgGroup.parentNode) { + var t = this.pickedPoints; + if (t.length > 0) { + if (A && !this.isDone()) { + if (this._pointCanClosePath(A, e)) { + var i = this.pickedPoints[0]; + A = [i[0], i[1], i[2]] + } + t = t.concat([A]) + } + var o = t, + n = !0; + if (e) { + for (var r = !0, a = [], s = 0, l = t.length; l > s; s += 1) + a[s] = e(t[s]), + n && a[s][0] > 0 && a[s][0] < parseInt(this.svg.style.width, 10) && a[s][1] > 0 && a[s][1] < parseInt(this.svg.style.height, 10) && (n = !1), + void 0 !== a[s][2] && 0 !== a[s][2] || (r = !1); + o = a, + r && (n = !0) + } + var c = this._pathString(o); + if (this.path.setAttributeNS(null, "d", c), + this.isDone()) { + if (n) + return void(this.svgGroup.style.display = "none"); + this.svgGroup.style.display = "", + this.path.setAttributeNS(null, "fill", "rgba(69,195,69,0.5)"); + var h = this._getPointsCenter(this.pickedPoints); + e && (h = e(h)), + this.resultText.setPosition(h[0], h[1]), + this.updateTexts() + } + for (var d = 0, p = this._circles.length; p > d; d += 1) { + var g = this._circles[d], + u = o[d]; + g.setAttributeNS(null, "cx", u[0]), + g.setAttributeNS(null, "cy", u[1]), + g.style.display = "" + } + } + } + }, + tg.prototype.measureResult = function () { + return this._area + }, + tg.prototype.updateTexts = function () { + this.isDone() && (this.resultText.setText(this.resultToDisplayOfArea(this._area).text), + this.resultText.draw()) + }, + tg.prototype.setSelected = function (A) { + Xp.prototype.setSelected.call(this, A) && (A ? (this.resultText.isShowShadow = !0, + this.resultText.textBackgroundColor = "#ffffff", + this.resultText.textColor = "#009bff", + this.resultText.draw()) : (this.resultText.isShowShadow = !1, + this.resultText.textBackgroundColor = "#009bff", + this.resultText.textColor = "#ffffff", + this.resultText.draw())) + }, + tg.prototype.resultToDisplayOfArea = function (A) { + var e = A, + t = this.unitOfModel; + return this.adjustOption && (e = this.adjustOption.adjustArea(A), + t = this.adjustOption.unit), + this.unitOnUI && (t && (e = Jp(t, this.unitOnUI, e, 2)), + t = this.unitOnUI), + t || (t = ""), + e = e.toFixed(this.precision), + "mm" === t ? t = "mm²" : "m" === t ? t = "m²" : "cm" === t && (t = "cm²"), { + value: Number(e), + unit: t, + text: e + t + } + }, + tg.prototype._pointCanClosePath = function (A, e) { + if (this.pickedPoints.length > 0) { + var t = this.pickedPoints[0]; + e && (t = e(t), + A = e(A)); + var i = A[0] - t[0], + o = A[1] - t[1]; + if (200 >= i * i + o * o + 0) + return !0 + } + return !1 + }, + tg.prototype._pathString = function (A) { + if (!A || 0 === A.length) + return ""; + for (var e = "M" + A[0][0] + " " + A[0][1], t = 1, i = A.length; i > t; t += 1) + e = e + "L" + A[t][0] + " " + A[t][1]; + return this.isDone() && (e += "Z"), + e + }, + tg.prototype._calculateArea2D = function () { + if (this.isDone() && this.pickedPoints.length >= 3) { + for (var A = this.pickedPoints, e = this.pickedPoints[0], t = [], i = 1, o = A.length; o > i; i += 1) + t.push([A[i][0] - e[0], A[i][1] - e[1]]); + for (var n = 0, r = 0, a = t.length; a - 1 > r; r += 1) { + var s = t[r], + l = t[r + 1]; + n += s[0] * l[1] - s[1] * l[0] + } + return Math.abs(n / 2) + } + return 0 + }, + tg.prototype._calculateArea3D = function () { + if (this.isDone() && this.pickedPoints.length >= 3) { + for (var A = this.pickedPoints, e = this.pickedPoints[0], t = jp(Yp([this.pickedPoints[1][0] - e[0], this.pickedPoints[1][1] - e[1], this.pickedPoints[1][2] - e[2]], [this.pickedPoints[2][0] - e[0], this.pickedPoints[2][1] - e[1], this.pickedPoints[2][2] - e[2]])), i = 0, o = 1, n = A.length; n > o; o += 1) { + i += Hp(Yp([this.pickedPoints[o - 1][0] - e[0], this.pickedPoints[o - 1][1] - e[1], this.pickedPoints[o - 1][2] - e[2]], [this.pickedPoints[o][0] - e[0], this.pickedPoints[o][1] - e[1], this.pickedPoints[o][2] - e[2]]), t) + } + return Math.abs(i / 2) + } + return 0 + }, + tg.prototype._getPointsCenter = function (A) { + var e = A.length; + return [A.reduce((function (A, e) { + return A + e[0] + }), 0) / e, A.reduce((function (A, e) { + return A + e[1] + }), 0) / e, A.reduce((function (A, e) { + return A + e[2] + }), 0) / e] + }, + tg.prototype._crossProduct = function (A, e) { + var t = A[0], + i = A[1], + o = A[2], + n = e[0], + r = e[1], + a = e[2]; + return [i * a - o * r, o * n - t * a, t * r - i * n] + }; + var ig = function (A, e, t) { + Xp.call(this, A), + this.maxPointsNeed = 2, + this.isMobile = e, + this.number = t, + this._drawPoints = [], + this.startCircle = this.createCircle(), + this.endCircle = this.createCircle(), + this.svgGroup.appendChild(this.startCircle), + this.svgGroup.appendChild(this.endCircle), + this.distanceLine = this.createLine(), + this.svgGroup.appendChild(this.distanceLine), + this.deltaXLine = this.createLine(), + this.deltaXLine.setAttributeNS(null, "stroke", "#ec4545"), + this.deltaXLine.setAttributeNS(null, "stroke-dasharray", "6,4"), + this.isMobile || this.svgGroup.appendChild(this.deltaXLine), + this.deltaYLine = this.createLine(), + this.deltaYLine.setAttributeNS(null, "stroke", "#45c345"), + this.deltaYLine.setAttributeNS(null, "stroke-dasharray", "6,4"), + this.isMobile || this.svgGroup.appendChild(this.deltaYLine), + this.deltaZLine = this.createLine(), + this.deltaZLine.setAttributeNS(null, "stroke", "#5757da"), + this.deltaZLine.setAttributeNS(null, "stroke-dasharray", "6,4"), + this.isMobile || this.svgGroup.appendChild(this.deltaZLine), + this.deltaXText = new _p, + this.deltaXText.textColor = "#ec4545", + this.deltaXText.prefixTextBackgroundColor = "#ec4545", + this.svgGroup.appendChild(this.deltaXText.group), + this.deltaYText = new _p, + this.deltaYText.textColor = "#45c345", + this.deltaYText.prefixTextBackgroundColor = "#45c345", + this.svgGroup.appendChild(this.deltaYText.group), + this.deltaZText = new _p, + this.deltaZText.textColor = "#5757da", + this.deltaZText.prefixTextBackgroundColor = "#5757da", + this.svgGroup.appendChild(this.deltaZText.group), + this.distanceText = new _p, + this.distanceText.textBackgroundColor = "#009bff"; + var i = this; + this.distanceText.setClickCallback((function () { + i.onclickCallback && i.onclickCallback(i) + })), + this.svgGroup.appendChild(this.distanceText.group), + this._distance = void 0, + this._deltaXDistance = void 0, + this._deltaYDistance = void 0, + this._deltaZDistance = void 0 + }; + (ig.prototype = Object.assign(Object.create(Xp.prototype), { + constructor: ig + })).addPickedPoint = function (A, e, t) { + if (Xp.prototype.addPickedPoint.call(this, A, e, t) && (this._drawPoints.push(A), + this.isDone())) { + if (3 === A.length) { + var i = []; + i[0] = this.pickedPoints[1][0], + i[1] = this.pickedPoints[0][1], + i[2] = this.pickedPoints[1][2]; + var o = []; + o[0] = this.pickedPoints[1][0], + o[1] = this.pickedPoints[0][1], + o[2] = this.pickedPoints[0][2], + this._drawPoints.push(i), + this._drawPoints.push(o) + } + this._distance = qp(this._drawPoints[0], this._drawPoints[1]), + this._deltaYDistance = qp(this._drawPoints[1], this._drawPoints[2]), + this._deltaZDistance = qp(this._drawPoints[2], this._drawPoints[3]), + this._deltaXDistance = qp(this._drawPoints[3], this._drawPoints[0]), + this.updateTexts() + } + }, + ig.prototype.draw = function (A, e) { + if (this.svgGroup.parentNode) { + var t = this._drawPoints; + if (t.length > 0) { + A && !this.isDone() && (t = t.concat([A])); + var i = t, + o = !0; + if (e) { + for (var n = !0, r = [], a = 0, s = t.length; s > a; a += 1) + r[a] = e(t[a]), + o && r[a][0] > 0 && r[a][0] < parseInt(this.svg.style.width, 10) && r[a][1] > 0 && r[a][1] < parseInt(this.svg.style.height, 10) && (o = !1), + void 0 !== r[a][2] && 0 !== r[a][2] || (n = !1); + i = r, + n && (o = !0) + } + var l = i[0], + c = i.length > 1 ? i[1] : l; + if (this.startCircle.setAttributeNS(null, "cx", l[0]), + this.startCircle.setAttributeNS(null, "cy", l[1]), + this.startCircle.style.display = "", + this.distanceLine.setAttributeNS(null, "x1", l[0]), + this.distanceLine.setAttributeNS(null, "y1", l[1]), + this.distanceLine.setAttributeNS(null, "x2", c[0]), + this.distanceLine.setAttributeNS(null, "y2", c[1]), + this.distanceLine.style.display = "", + 2 > t.length) + return; + if (this.distanceText.setPosition((l[0] + c[0]) / 2, (l[1] + c[1]) / 2), + !this.isDone()) { + var h = qp(t[0], t[1]); + this._distance = h + } + if (4 === t.length) { + if (o) + return void(this.svgGroup.style.display = "none"); + this.svgGroup.style.display = "", + this.isSelected ? (this.distanceText.isShowShadow = !0, + this.distanceText.textBackgroundColor = "#ffffff", + this.distanceText.textColor = "#009bff") : (this.distanceText.isShowShadow = !1, + this.distanceText.textBackgroundColor = "#009bff", + this.distanceText.textColor = "#ffffff"), + this.distanceText.draw(), + this.endCircle.style.display = "", + this.deltaYLine.style.display = "", + this.deltaXLine.style.display = "", + this.deltaZLine.style.display = "", + this.endCircle.setAttributeNS(null, "cx", c[0]), + this.endCircle.setAttributeNS(null, "cy", c[1]); + var d = i[2], + p = i[3]; + this.deltaYLine.setAttributeNS(null, "x1", c[0]), + this.deltaYLine.setAttributeNS(null, "y1", c[1]), + this.deltaYLine.setAttributeNS(null, "x2", d[0]), + this.deltaYLine.setAttributeNS(null, "y2", d[1]), + this.deltaYText.setPosition((d[0] + c[0]) / 2, (d[1] + c[1]) / 2), + this.deltaZLine.setAttributeNS(null, "x1", d[0]), + this.deltaZLine.setAttributeNS(null, "y1", d[1]), + this.deltaZLine.setAttributeNS(null, "x2", p[0]), + this.deltaZLine.setAttributeNS(null, "y2", p[1]), + this.deltaZText.setPosition((d[0] + p[0]) / 2, (d[1] + p[1]) / 2), + this.deltaXLine.setAttributeNS(null, "x1", p[0]), + this.deltaXLine.setAttributeNS(null, "y1", p[1]), + this.deltaXLine.setAttributeNS(null, "x2", l[0]), + this.deltaXLine.setAttributeNS(null, "y2", l[1]), + this.deltaXText.setPosition((p[0] + l[0]) / 2, (p[1] + l[1]) / 2), + this.isSelected && (this.isMobile || (this.deltaXText.draw(), + this.deltaYText.draw(), + this.deltaZText.draw()), + this.layoutResultText()) + } + } + } + }, + ig.prototype.layoutResultText = function () { + for (var A = this.distanceText.group.getBBox(), e = this.deltaXText.group.getBBox(), t = this.deltaYText.group.getBBox(), i = this.deltaZText.group.getBBox(), o = [e, t, i], n = !1, r = 0; o.length > r; r += 1) + if (zp(A, o[r])) { + n = !0; + break + } + if (n || (n = zp(e, t)), + n || (n = zp(e, i)), + n || (n = zp(t, i)), + n) { + var a = Math.max(A.width, e.width, t.width, i.width), + s = A.x + A.width / 2, + l = A.y + A.height + 8; + return this.deltaXText.setPosition(s, l + e.height / 2), + this.deltaYText.setPosition(s, (l += e.height) + t.height / 2), + this.deltaZText.setPosition(s, (l += t.height) + i.height / 2), + this.isMobile || (this.deltaXText.draw(a), + this.deltaYText.draw(a), + this.deltaZText.draw(a)), + this.distanceText.draw(a), + n + } + }, + ig.prototype.measureResult = function () { + if (this._distance) + return [this._distance, this._deltaXDistance, this._deltaYDistance, this._deltaZDistance] + }, + ig.prototype.updateTexts = function () { + this._distance && (this.distanceText.setText(this.isMobile ? "线段" + this.number + ": " + this.resultToDisplayOfLength(this._distance).text : this.resultToDisplayOfLength(this._distance).text, void 0), + this.distanceText.draw(), + this.isDone() && (0 !== this._deltaXDistance && this.deltaXText.setText(this.resultToDisplayOfLength(this._deltaXDistance).text, "X"), + 0 !== this._deltaYDistance && this.deltaYText.setText(this.resultToDisplayOfLength(this._deltaYDistance).text, "Y"), + 0 !== this._deltaZDistance && this.deltaZText.setText(this.resultToDisplayOfLength(this._deltaZDistance).text, "Z"), + this.isSelected && !this.isMobile && (this.deltaXText.draw(), + this.deltaYText.draw(), + this.deltaZText.draw()))) + }, + ig.prototype.setSelected = function (A) { + Xp.prototype.setSelected.call(this, A) && (A ? (this.distanceText.isShowShadow = !0, + this.distanceText.textBackgroundColor = "#ffffff", + this.distanceText.textColor = "#009bff", + this.isMobile || (this.deltaXText.draw(), + this.deltaYText.draw(), + this.deltaZText.draw()), + this.distanceText.draw(), + this.layoutResultText()) : (this.deltaXText.hide(), + this.deltaYText.hide(), + this.deltaZText.hide(), + this.distanceText.isShowShadow = !1, + this.distanceText.textBackgroundColor = "#009bff", + this.distanceText.textColor = "#ffffff", + this.distanceText.draw())) + }; + var og = function (A) { + Xp.call(this, A), + this.maxPointsNeed = 2, + this.startCircle = this.createCircle(), + this.endCircle = this.createCircle(), + this.svgGroup.appendChild(this.startCircle), + this.svgGroup.appendChild(this.endCircle), + this.distanceLine = this.createLine(), + this.svgGroup.appendChild(this.distanceLine), + this.distanceText = new _p, + this.distanceText.textBackgroundColor = "#009bff", + this.svgGroup.appendChild(this.distanceText.group); + var e = this; + this.distanceText.setClickCallback((function () { + e.onclickCallback && e.onclickCallback(e) + })), + this.pickedComponentKeys = [], + this._distance = void 0 + }; + (og.prototype = Object.assign(Object.create(Xp.prototype), { + constructor: og + })).setData = function (A, e, t) { + this.pickedPoints = A, + this._distance = e, + t && (this.unitOfModel = this.unitOfModel && this.unitOfModel !== t ? void 0 : t) + }, + og.prototype.draw = function (A, e) { + if (this.svgGroup.parentNode && this.isDone()) { + var t = this.pickedPoints; + if (e) { + for (var i = [], o = 0, n = t.length; n > o; o += 1) + i[o] = e(t[o]); + t = i + } + var r = t[0], + a = t[1]; + this.startCircle.setAttributeNS(null, "cx", r[0]), + this.startCircle.setAttributeNS(null, "cy", r[1]), + this.startCircle.style.display = "", + this.endCircle.setAttributeNS(null, "cx", a[0]), + this.endCircle.setAttributeNS(null, "cy", a[1]), + this.endCircle.style.display = "", + this.distanceLine.setAttributeNS(null, "x1", r[0]), + this.distanceLine.setAttributeNS(null, "y1", r[1]), + this.distanceLine.setAttributeNS(null, "x2", a[0]), + this.distanceLine.setAttributeNS(null, "y2", a[1]), + this.distanceLine.style.display = "", + this.distanceText.setPosition((r[0] + a[0]) / 2, (r[1] + a[1]) / 2), + this.updateTexts() + } + }, + og.prototype.measureResult = function () { + if (void 0 !== this._distance) + return this._distance + }, + og.prototype.updateTexts = function () { + void 0 !== this._distance && (this.distanceText.setText(this.resultToDisplayOfLength(this._distance).text, void 0), + this.distanceText.draw()) + }, + og.prototype.setSelected = function (A) { + Xp.prototype.setSelected.call(this, A) && (A ? (this.distanceText.isShowShadow = !0, + this.distanceText.textBackgroundColor = "#ffffff", + this.distanceText.textColor = "#009bff", + this.distanceText.draw()) : (this.distanceText.isShowShadow = !1, + this.distanceText.textBackgroundColor = "#009bff", + this.distanceText.textColor = "#ffffff", + this.distanceText.draw())) + }; + var ng = function (A) { + Xp.call(this, A), + this.maxPointsNeed = 2; + var e = Np(); + e.setAttributeNS(null, "stroke-width", "2"), + e.setAttributeNS(null, "stroke", "#0aea06"), + this.svgGroup.appendChild(e), + this._line = e, + this.distanceText = new _p, + this.distanceText.textBackgroundColor = "#009bff", + this.svgGroup.appendChild(this.distanceText.group) + }; + (ng.prototype = Object.assign(Object.create(Xp.prototype), { + constructor: ng + })).setData = function (A, e) { + A && e && (this._points = [A, e]) + }, + ng.prototype.draw = function (A, e) { + if (2 === this._points.length) { + var t = e(this._points[0]), + i = e(this._points[1]); + this._line.setAttributeNS(null, "x1", t[0]), + this._line.setAttributeNS(null, "y1", t[1]), + this._line.setAttributeNS(null, "x2", i[0]), + this._line.setAttributeNS(null, "y2", i[1]), + this.distanceText.setPosition((t[0] + i[0]) / 2, (t[1] + i[1]) / 2); + var o = qp(this._points[0], this._points[1]); + this.distanceText.setText(this.resultToDisplayOfLength(o).text, void 0), + this.distanceText.draw() + } + }; + var rg, ag, sg = function (A, e) { + this.x = A || 0, + this.y = e || 0 + }; + Object.defineProperties(sg.prototype, { + width: { + get: function () { + return this.x + }, + set: function (A) { + this.x = A + } + }, + height: { + get: function () { + return this.y + }, + set: function (A) { + this.y = A + } + } + }), + Object.assign(sg.prototype, { + isVector2: !0, + set: function (A, e) { + return this.x = A, + this.y = e, + this + }, + setScalar: function (A) { + return this.x = A, + this.y = A, + this + }, + setX: function (A) { + return this.x = A, + this + }, + setY: function (A) { + return this.y = A, + this + }, + setComponent: function (A, e) { + switch (A) { + case 0: + this.x = e; + break; + case 1: + this.y = e; + break; + default: + throw new Error("index is out of range: " + A) + } + return this + }, + getComponent: function (A) { + switch (A) { + case 0: + return this.x; + case 1: + return this.y; + default: + throw new Error("index is out of range: " + A) + } + }, + clone: function () { + return new this.constructor(this.x, this.y) + }, + copy: function (A) { + return this.x = A.x, + this.y = A.y, + this + }, + add: function (A, e) { + return void 0 !== e ? (console.warn("Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."), + this.addVectors(A, e)) : (this.x += A.x, + this.y += A.y, + this) + }, + addScalar: function (A) { + return this.x += A, + this.y += A, + this + }, + addVectors: function (A, e) { + return this.x = A.x + e.x, + this.y = A.y + e.y, + this + }, + addScaledVector: function (A, e) { + return this.x += A.x * e, + this.y += A.y * e, + this + }, + sub: function (A, e) { + return void 0 !== e ? (console.warn("Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."), + this.subVectors(A, e)) : (this.x -= A.x, + this.y -= A.y, + this) + }, + subScalar: function (A) { + return this.x -= A, + this.y -= A, + this + }, + subVectors: function (A, e) { + return this.x = A.x - e.x, + this.y = A.y - e.y, + this + }, + multiply: function (A) { + return this.x *= A.x, + this.y *= A.y, + this + }, + multiplyScalar: function (A) { + return this.x *= A, + this.y *= A, + this + }, + divide: function (A) { + return this.x /= A.x, + this.y /= A.y, + this + }, + divideScalar: function (A) { + return this.multiplyScalar(1 / A) + }, + applyMatrix3: function (A) { + var e = this.x, + t = this.y, + i = A.elements; + return this.x = i[0] * e + i[3] * t + i[6], + this.y = i[1] * e + i[4] * t + i[7], + this + }, + min: function (A) { + return this.x > A.x && (this.x = A.x), + this.y > A.y && (this.y = A.y), + this + }, + max: function (A) { + return A.x > this.x && (this.x = A.x), + A.y > this.y && (this.y = A.y), + this + }, + clamp: function (A, e) { + return this.x = Math.max(A.x, Math.min(e.x, this.x)), + this.y = Math.max(A.y, Math.min(e.y, this.y)), + this + }, + clampScalar: (rg = new sg, + ag = new sg, + function (A, e) { + return rg.set(A, A), + ag.set(e, e), + this.clamp(rg, ag) + } + ), + clampLength: function (A, e) { + var t = this.length(); + return this.divideScalar(t || 1).multiplyScalar(Math.max(A, Math.min(e, t))) + }, + floor: function () { + return this.x = Math.floor(this.x), + this.y = Math.floor(this.y), + this + }, + ceil: function () { + return this.x = Math.ceil(this.x), + this.y = Math.ceil(this.y), + this + }, + round: function () { + return this.x = Math.round(this.x), + this.y = Math.round(this.y), + this + }, + roundToZero: function () { + return this.x = 0 > this.x ? Math.ceil(this.x) : Math.floor(this.x), + this.y = 0 > this.y ? Math.ceil(this.y) : Math.floor(this.y), + this + }, + negate: function () { + return this.x = -this.x, + this.y = -this.y, + this + }, + dot: function (A) { + return this.x * A.x + this.y * A.y + }, + cross: function (A) { + return this.x * A.y - this.y * A.x + }, + lengthSq: function () { + return this.x * this.x + this.y * this.y + }, + length: function () { + return Math.sqrt(this.x * this.x + this.y * this.y) + }, + manhattanLength: function () { + return Math.abs(this.x) + Math.abs(this.y) + }, + normalize: function () { + return this.divideScalar(this.length() || 1) + }, + angle: function () { + var A = Math.atan2(this.y, this.x); + return 0 > A && (A += 2 * Math.PI), + A + }, + distanceTo: function (A) { + return Math.sqrt(this.distanceToSquared(A)) + }, + distanceToSquared: function (A) { + var e = this.x - A.x, + t = this.y - A.y; + return e * e + t * t + }, + manhattanDistanceTo: function (A) { + return Math.abs(this.x - A.x) + Math.abs(this.y - A.y) + }, + setLength: function (A) { + return this.normalize().multiplyScalar(A) + }, + lerp: function (A, e) { + return this.x += (A.x - this.x) * e, + this.y += (A.y - this.y) * e, + this + }, + lerpVectors: function (A, e, t) { + return this.subVectors(e, A).multiplyScalar(t).add(A) + }, + equals: function (A) { + return A.x === this.x && A.y === this.y + }, + fromArray: function (A, e) { + return void 0 === e && (e = 0), + this.x = A[e], + this.y = A[e + 1], + this + }, + toArray: function (A, e) { + return void 0 === A && (A = []), + void 0 === e && (e = 0), + A[e] = this.x, + A[e + 1] = this.y, + A + }, + rotateAround: function (A, e) { + var t = Math.cos(e), + i = Math.sin(e), + o = this.x - A.x, + n = this.y - A.y; + return this.x = o * t - n * i + A.x, + this.y = o * i + n * t + A.y, + this + } + }); + var lg = function () { + this.elements = [1, 0, 0, 0, 1, 0, 0, 0, 1] + }; + + function cg(A, e) { + this.normal = void 0 !== A ? A : new $c(1, 0, 0), + this.constant = void 0 !== e ? e : 0 + } + lg.prototype.clear = function () { + return this.elements = [1, 0, 0, 0, 1, 0, 0, 0, 1], + this + }, + lg.prototype.set = function (A, e, t, i, o, n, r, a, s) { + var l = this.elements; + return l[0] = A, + l[1] = i, + l[2] = r, + l[3] = e, + l[4] = o, + l[5] = a, + l[6] = t, + l[7] = n, + l[8] = s, + this + }, + lg.prototype.clone = function () { + return (new this.constructor).fromArray(this.elements) + }, + lg.prototype.fromArray = function (A, e) { + void 0 === e && (e = 0); + for (var t = 0; 9 > t; t += 1) + this.elements[t] = A[t + e]; + return this + }, + lg.prototype.multiply = function (A) { + return this.multiplyMatrices(this, A) + }, + lg.prototype.multiplyMatrices = function (A, e) { + var t = A.elements, + i = e.elements, + o = this.elements, + n = t[0], + r = t[3], + a = t[6], + s = t[1], + l = t[4], + c = t[7], + h = t[2], + d = t[5], + p = t[8], + g = i[0], + u = i[3], + f = i[6], + m = i[1], + C = i[4], + y = i[7], + v = i[2], + I = i[5], + E = i[8]; + return o[0] = n * g + r * m + a * v, + o[3] = n * u + r * C + a * I, + o[6] = n * f + r * y + a * E, + o[1] = s * g + l * m + c * v, + o[4] = s * u + l * C + c * I, + o[7] = s * f + l * y + c * E, + o[2] = h * g + d * m + p * v, + o[5] = h * u + d * C + p * I, + o[8] = h * f + d * y + p * E, + this + }, + lg.prototype.scale = function (A, e) { + var t = this.elements; + return t[0] *= A, + t[3] *= A, + t[6] *= A, + t[1] *= e, + t[4] *= e, + t[7] *= e, + this + }, + lg.prototype.rotate = function (A) { + var e = Math.cos(A), + t = Math.sin(A), + i = this.elements, + o = i[0], + n = i[3], + r = i[6], + a = i[1], + s = i[4], + l = i[7]; + return i[0] = e * o + t * a, + i[3] = e * n + t * s, + i[6] = e * r + t * l, + i[1] = -t * o + e * a, + i[4] = -t * n + e * s, + i[7] = -t * r + e * l, + this + }, + lg.prototype.makeRotate = function (A) { + var e = Math.cos(A), + t = Math.sin(A); + return this.set(e, -t, 0, t, e, 0, 0, 0, 1), + this + }, + lg.prototype.translate = function (A, e) { + var t = this.elements; + return t[0] += A * t[2], + t[3] += A * t[5], + t[6] += A * t[8], + t[1] += e * t[2], + t[4] += e * t[5], + t[7] += e * t[8], + this + }, + lg.prototype.makeShear = function (A, e) { + return this.set(1, e, 0, A, 1, 0, 0, 0, 1), + this + }, + lg.prototype.fromCanvasTransform = function (A, e, t, i, o, n) { + return this.set(A, t, o, e, i, n, 0, 0, 1), + this + }, + lg.prototype.toCanvasTransform = function () { + var A = this.elements; + return [A[0], A[3], A[1], A[4], A[6], A[7]] + }, + lg.prototype.getInverse = function (A, e) { + A && A.isMatrix4 && console.error("THREE.Matrix3: .getInverse() no longer takes a Matrix4 argument."); + var t = A.elements, + i = this.elements, + o = t[0], + n = t[1], + r = t[2], + a = t[3], + s = t[4], + l = t[5], + c = t[6], + h = t[7], + d = t[8], + p = d * s - l * h, + g = l * c - d * a, + u = h * a - s * c, + f = o * p + n * g + r * u; + if (0 === f) { + var m = "THREE.Matrix3: .getInverse() can't invert matrix, determinant is 0"; + if (!0 === e) + throw new Error(m); + return console.warn(m), + this.identity() + } + var C = 1 / f; + return i[0] = p * C, + i[1] = (r * h - d * n) * C, + i[2] = (l * n - r * s) * C, + i[3] = g * C, + i[4] = (d * o - r * c) * C, + i[5] = (r * a - l * o) * C, + i[6] = u * C, + i[7] = (n * c - h * o) * C, + i[8] = (s * o - n * a) * C, + this + }, + Object.assign(cg.prototype, { + isPlane: !0, + set: function (A, e) { + return this.normal.copy(A), + this.constant = e, + this + }, + setComponents: function (A, e, t, i) { + return this.normal.set(A, e, t), + this.constant = i, + this + }, + setFromNormalAndCoplanarPoint: function (A, e) { + return this.normal.copy(A), + this.constant = -e.dot(this.normal), + this + }, + setFromCoplanarPoints: function () { + var A = new $c, + e = new $c; + return function (t, i, o) { + var n = A.subVectors(o, i).cross(e.subVectors(t, i)).normalize(); + return this.setFromNormalAndCoplanarPoint(n, t), + this + } + }(), + clone: function () { + return (new this.constructor).copy(this) + }, + copy: function (A) { + return this.normal.copy(A.normal), + this.constant = A.constant, + this + }, + normalize: function () { + var A = 1 / this.normal.length(); + return this.normal.multiplyScalar(A), + this.constant *= A, + this + }, + negate: function () { + return this.constant *= -1, + this.normal.negate(), + this + }, + distanceToPoint: function (A) { + return this.normal.dot(A) + this.constant + }, + distanceToSphere: function (A) { + return this.distanceToPoint(A.center) - A.radius + }, + projectPoint: function (A, e) { + return void 0 === e && (console.warn("THREE.Plane: .projectPoint() target is now required"), + e = new $c), + e.copy(this.normal).multiplyScalar(-this.distanceToPoint(A)).add(A) + }, + intersectLine: function () { + var A = new $c; + return function (e, t) { + void 0 === t && (console.warn("THREE.Plane: .intersectLine() target is now required"), + t = new $c); + var i = e.delta(A), + o = this.normal.dot(i); + if (0 === o) + return 0 === this.distanceToPoint(e.start) ? t.copy(e.start) : void 0; + var n = -(e.start.dot(this.normal) + this.constant) / o; + return 0 > n || n > 1 ? void 0 : t.copy(i).multiplyScalar(n).add(e.start) + } + }(), + intersectsLine: function (A) { + var e = this.distanceToPoint(A.start), + t = this.distanceToPoint(A.end); + return 0 > e && t > 0 || 0 > t && e > 0 + }, + intersectsBox: function (A) { + return A.intersectsPlane(this) + }, + intersectsSphere: function (A) { + return A.intersectsPlane(this) + }, + coplanarPoint: function (A) { + return void 0 === A && (console.warn("THREE.Plane: .coplanarPoint() target is now required"), + A = new $c), + A.copy(this.normal).multiplyScalar(-this.constant) + }, + applyMatrix4: function () { + var A = new $c, + e = new lg; + return function (t, i) { + var o = i || e.getNormalMatrix(t), + n = this.coplanarPoint(A).applyMatrix4(t), + r = this.normal.applyMatrix3(o).normalize(); + return this.constant = -n.dot(r), + this + } + }(), + translate: function (A) { + return this.constant -= A.dot(this.normal), + this + }, + equals: function (A) { + return A.normal.equals(this.normal) && A.constant === this.constant + } + }); + var hg = function (A, e) { + this._point = void 0, + this._normal = void 0, + this.viewer = e, + this.svg = A; + var t = document.createElementNS(Dp, "polygon"); + t.setAttribute("fill", "rgba(10,234,6,0.2)"), + t.setAttribute("stroke", "#0aea06"), + t.setAttribute("stroke-width", 1), + t.style.pointerEvents = "none", + this._panel = t, + this.hoverPanelSize = { + width: 20, + height: 20 + } + }; + hg.prototype.setupWithPoint = function (A, e) { + this._point = A, + this._normal = e + }, + hg.prototype.remove = function () { + this.svg && this._panel.parentNode && this.svg.removeChild(this._panel) + }, + hg.prototype.add = function () { + this.svg && this._panel && this.svg.appendChild(this._panel) + }, + hg.prototype.isVisible = function () { + return !!this._panel.parentNode + }, + hg.prototype.stretchOnDirection = function (A, e, t) { + var i = A.clone().add(e).multiplyScalar(.5), + o = e.clone().sub(A).normalize(); + return [i.clone().sub(o.clone().multiplyScalar(t / 2)), i.clone().add(o.clone().multiplyScalar(t / 2))] + }, + hg.prototype.draw = function () { + var A = this.viewer.getScene().worldToDrawing(this._normal); + A.normalize(); + var e = this.viewer.worldToClient(this._point), + t = this.viewer.getScene().worldToDrawing(this._point), + i = this.viewer.cameraControl, + o = new cg; + o.setFromNormalAndCoplanarPoint(A, t); + var n = new sg(e.x - 10, e.y - 10), + r = new sg(e.x + 10, e.y - 10), + a = t, + s = i.getRaycaster(n.x, n.y), + l = new $c, + c = new $c; + if (s.ray.intersectPlane(o, l), + (s = i.getRaycaster(r.x, r.y)).ray.intersectPlane(o, c), + null !== l && null !== c) { + var h = new $c(1, 0, 0), + d = new $c(0, 0, 1), + p = new $c(0, 1, 0), + g = .0025 >= Math.abs(A.clone().dot(h)), + u = .0025 >= Math.abs(A.clone().dot(p)); + if (g && u) + var f = h.clone(), + m = p.clone(); + else + f = d.clone().cross(A).normalize(), + m = A.clone().cross(f).normalize(); + var C = l.distanceTo(c) / 2, + y = f.clone().multiplyScalar(C), + v = m.clone().multiplyScalar(C), + I = a.clone().sub(y).add(v), + E = a.clone().add(y).add(v), + B = a.clone().sub(y).sub(v), + x = a.clone().add(y).sub(v), + S = []; + S.push(I, E, x, B); + for (var w = [], M = i.getContainerDimensions(), b = 0; S.length > b; b += 1) { + var U = new $c(S[b].x, S[b].y, S[b].z); + U.project(i.camera); + var F = { + x: 0, + y: 0, + z: 0 + }; + F.x = Math.floor(.5 * (U.x + 1) * M.width + .5), + F.y = Math.floor(-.5 * (U.y - 1) * M.height + .5), + F.z = U.z || 0, + w.push(new $c(F.x, F.y, 0)) + } + var K = this.hoverPanelSize, + Q = w[0].distanceTo(w[1]), + R = w[0].distanceTo(w[3]) / K.height; + if (1 !== Q / K.width) { + var T = this.stretchOnDirection(w[0], w[1], K.width), + k = this.stretchOnDirection(w[2], w[3], K.width); + w = T.concat(k) + } + if (1 !== R) { + T = this.stretchOnDirection(w[0], w[3], K.height), + k = this.stretchOnDirection(w[1], w[2], K.height); + w = [T[0], k[0], k[1], T[1]] + } + for (var D = "", L = 0; w.length > L; L += 1) + D += w[L].x + ",", + D += w[L].y + " "; + this._panel.setAttribute("points", D) + } + }; + var dg = function (A) { + this._point = void 0, + this.svg = A; + var e = Vp(5); + e.setAttributeNS(null, "fill", "#00ff00"), + this._circle = e + }; + dg.prototype.setupWithPoint = function (A) { + A && (this._point = A) + }, + dg.prototype.remove = function () { + this.svg && this._circle.parentNode && this.svg.removeChild(this._circle) + }, + dg.prototype.add = function () { + this.svg && this._circle && this.svg.appendChild(this._circle) + }, + dg.prototype.isVisible = function () { + return !!this._circle.parentNode + }, + dg.prototype.draw = function (A) { + if (this._point) { + var e = A(this._point); + this._circle.setAttributeNS(null, "cx", e[0]), + this._circle.setAttributeNS(null, "cy", e[1]) + } + }; + var pg = function (A) { + Xp.call(this, A), + this.volumeText = new _p, + this.volumeText.textBackgroundColor = "#009bff", + this.svgGroup.appendChild(this.volumeText.group); + var e = this; + this.volumeText.setClickCallback((function () { + e.onclickCallback && e.onclickCallback(e) + })), + this.pickedComponentKeys = [], + this._position = void 0, + this._volume = void 0 + }; + (pg.prototype = Object.assign(Object.create(Xp.prototype), { + constructor: pg + })).setData = function (A, e, t) { + this._position = A, + this._volume = e, + t && (this.unitOfModel = this.unitOfModel && this.unitOfModel !== t ? void 0 : t) + }, + pg.prototype.isDone = function () { + return this.pickedComponentKeys[0] && this._position + }, + pg.prototype.draw = function (A, e) { + if (this.svgGroup.parentNode && this.isDone()) { + var t = this._position; + e && (t = e(t)), + this.volumeText.setPosition(t[0], t[1]), + this.updateTexts() + } + }, + pg.prototype.measureResult = function () { + if (this._volume) + return this._volume + }, + pg.prototype.resultToDisplayOfVolume = function (A) { + var e = A, + t = this.unitOfModel; + return this.adjustOption && (e = this.adjustOption.adjustVolume(A), + t = this.adjustOption.unit), + this.unitOnUI && (t && (e = Jp(t, this.unitOnUI, e, 3)), + t = this.unitOnUI), + t || (t = ""), + e = e.toFixed(this.precision), + "mm" === t ? t = "mm³" : "m" === t ? t = "m³" : "cm" === t && (t = "cm³"), { + value: Number(e), + unit: t, + text: e + t + } + }, + pg.prototype.updateTexts = function () { + this._volume && (this.volumeText.setText(this.resultToDisplayOfVolume(this._volume).text, void 0), + this.volumeText.draw()) + }, + pg.prototype.setSelected = function (A) { + Xp.prototype.setSelected.call(this, A) && (A ? (this.volumeText.isShowShadow = !0, + this.volumeText.textBackgroundColor = "#ffffff", + this.volumeText.textColor = "#009bff", + this.volumeText.draw()) : (this.volumeText.isShowShadow = !1, + this.volumeText.textBackgroundColor = "#009bff", + this.volumeText.textColor = "#ffffff", + this.volumeText.draw())) + }; + var gg = function () { + this.pointTransformer = void 0, + this.parentDom = void 0, + this.viewer = void 0, + this.is3DMode = !1, + this.isMobile = !1 + }, + ug = "Distance", + fg = "Angle", + mg = "Adjust", + Cg = "Area", + yg = "MinDistance", + vg = "Volume", + Ig = function (A) { + this.config = A, + this.config.viewer.measure = this, + this.svg = this._createSVG(A.parentDom.clientWidth, A.parentDom.clientHeight), + A.parentDom.appendChild(this.svg), + this._resize = this._resize.bind(this), + this.config.viewer.addEventListener("resize", this._resize), + this.setCurrentMode(ug), + this.isOpen = !1, + this.didEndMeasureCallback = void 0, + this._items = [], + this._adjustItem = void 0, + this._adjustOption = void 0, + this._precision = 3, + this._unitSetByUser = "mm", + this._pickedLine = void 0, + this._pickedPoint = void 0, + this._pickedPanel = void 0, + this._selectedItem = void 0, + this.open() + }; + Ig.prototype.supportUnits = function () { + return [{ + unit: "mm", + title: "毫米" + }, { + unit: "cm", + title: "厘米" + }, { + unit: "m", + title: "米" + }] + }, + Ig.prototype.open = function () { + this.isOpen || (this.isOpen = !0, + this._handleKeyUp = this._handleKeyUp.bind(this), + document.addEventListener("keyup", this._handleKeyUp)) + }, + Ig.prototype.close = function () { + this.svg.parentNode.removeChild(this.svg), + this.isOpen = !1, + this.config.is3DMode && (this.config.viewer.clearSelection(), + this.config.viewer.render()), + this.config.viewer.measure = void 0, + document.removeEventListener("keyup", this._handleKeyUp), + this.config.viewer.removeEventListener("resize", this._resize) + }, + Ig.prototype.setCurrentMode = function (A) { + if (this.config.is3DMode || A !== vg && A !== yg) + if (this._currentMode !== A && (this._currentMode = A, + this._currentMeasureItem && (this._currentMeasureItem instanceof og && this.config.is3DMode && (this.config.viewer.clearSelection(), + this.config.viewer.render()), + this._currentMeasureItem.remove(), + this._currentMeasureItem = void 0)), + this._currentMode === mg) { + var e = this._adjustItem ? this._adjustItem : this._currentMeasureItem; + (e || e instanceof $p) && e.isDone() && (e.add(), + e.draw(void 0, this.config.pointTransformer), + this.didEndMeasureCallback && this.didEndMeasureCallback(e.measureResult())) + } else + this._adjustItem && this._adjustItem.remove() + }, + Ig.prototype.getCurrentMode = function () { + return this._currentMode + }, + Ig.prototype.getCurrentUnit = function () { + return this._unitSetByUser + }, + Ig.prototype.setUnit = function (A) { + if (A && this._unitSetByUser !== A) { + this._unitSetByUser = A; + for (var e = 0, t = this._items.length; t > e; e += 1) { + this._items[e].changeUnit(A) + } + this._adjustOption && (this._adjustOption.valueAfterAdjust = Jp(this._adjustOption.unit, A, this._adjustOption.valueAfterAdjust, 0), + this._adjustOption.unit = A) + } + }, + Ig.prototype.getCurrentPrecision = function () { + return this._precision + }, + Ig.prototype.setPrecision = function (A) { + if (A && this._precision !== A) { + this._precision = A; + for (var e = 0, t = this._items.length; t > e; e += 1) { + this._items[e].changePrecision(A) + } + this._adjustItem && this._adjustItem.changePrecision(A) + } + }, + Ig.prototype.clearAllMeasure = function () { + for (var A = 0, e = this._items.length; e > A; A += 1) { + this._items[A].remove() + } + this._items = [], + this._selectedItem = void 0 + }, + Ig.prototype.removeSelectedMeasure = function () { + if (this._selectedItem) { + for (var A = 0, e = this._items.length; e > A; A += 1) + if (this._items[A] === this._selectedItem) { + this._selectedItem.remove(), + this._items.splice(A, 1); + break + } + (this._selectedItem instanceof pg || this._selectedItem instanceof og) && this.config.is3DMode && (this.config.viewer.clearSelection(), + this.config.viewer.render()), + this._selectedItem = void 0, + this._items.length > 0 && (this._selectedItem = this._items[this._items.length - 1], + this._selectedItem.setSelected(!0)) + } + }, + Ig.prototype.setAdjustForCurrentAdjustItem = function (A, e) { + if (A && e && this._currentMode === mg && (this._currentMeasureItem && this._currentMeasureItem instanceof $p && this._currentMeasureItem.isDone() && (this._adjustItem && this._adjustItem.remove(), + this._adjustItem = this._currentMeasureItem, + this._currentMeasureItem = void 0), + this._adjustItem && this._adjustItem.isDone())) { + var t = new Ag; + t.unit = A, + t.valueBeforeAdjust = this._adjustItem.measureResult().distance, + t.valueAfterAdjust = e, + this._adjustOption = t; + for (var i = 0, o = this._items.length; o > i; i += 1) { + this._items[i].adjustWithOption(this._adjustOption) + } + this._adjustItem.adjustWithOption(this._adjustOption) + } + }, + Ig.prototype.cancelCurrentAdjust = function () { + if (this._adjustItem && (this._adjustItem.remove(), + this._adjustItem = void 0), + this._currentMeasureItem instanceof $p && (this._currentMeasureItem.remove(), + this._currentMeasureItem = void 0), + this._adjustOption) { + for (var A = 0, e = this._items.length; e > A; A += 1) { + this._items[A].unAdjustWithOption(this._adjustOption) + } + this._adjustOption = void 0 + } + }, + Ig.prototype.cancelCurrentMeasure = function () { + !this._currentMeasureItem || this._currentMeasureItem instanceof $p || (this._currentMeasureItem.remove(), + this._currentMeasureItem = void 0) + }, + Ig.prototype.processIntersect = function (A) { + if (this.isOpen) { + if (!A) + return this._hidePickedLine(), + void this._hidePickedPoint(); + if (A.pickPoint) { + var e = [A.pickPoint.x, A.pickPoint.y, void 0 === A.pickPoint.z ? 0 : A.pickPoint.z], + t = e; + if (A.pick) { + if (this._currentMode === mg && this._currentMeasureItem && this._currentMeasureItem.isDone() && (this._currentMeasureItem.remove(), + this._currentMeasureItem = void 0), + this._currentMeasureItem || this._createNewItem(), + !this._currentMeasureItem) + return; + if (this._currentMeasureItem instanceof og) { + var i = this._currentMeasureItem.pickedComponentKeys; + if (i.push(A.userId), + 2 === i.length) { + var o = this.config.viewer.calculateMinDistance(i[0], i[1]); + if (o && o.start && o.end) + this._currentMeasureItem.setData([ + [o.start.x, o.start.y, o.start.z], + [o.end.x, o.end.y, o.end.z] + ], o.minDistance, A.measureUnit), + this._currentMeasureItem.draw(void 0, this.config.pointTransformer); + else + this._currentMeasureItem = void 0 + } + this.config.viewer.addToSelection(i), + this.config.viewer.render() + } else if (this._currentMeasureItem instanceof pg) { + var n = this._currentMeasureItem.pickedComponentKeys; + if (0 === n.length) { + n.push(A.userId); + var r = this.config.viewer.calculateComponentVolume(n[0]); + r && (this._currentMeasureItem.setData(r.position, r.volume, A.measureUnit), + this._currentMeasureItem.draw(void 0, this.config.pointTransformer)), + this.config.viewer.addToSelection(n), + this.config.viewer.render() + } + } else + t = void 0, + this._currentMeasureItem.addPickedPoint(e, A.measureUnit, this.config.pointTransformer), + this._currentMeasureItem.draw(t, this.config.pointTransformer); + if (this._currentMeasureItem && this._currentMeasureItem.isDone()) { + this._currentMeasureItem instanceof $p || !this._adjustOption || this._currentMeasureItem.adjustWithOption(this._adjustOption); + var a = this._currentMeasureItem.measureResult(); + this._currentMeasureItem instanceof $p || (this._items.push(this._currentMeasureItem), + this._selectedItem && (this._selectedItem.setSelected(!1), + this._selectedItem = void 0), + this._selectedItem = this._currentMeasureItem, + this._selectedItem.setSelected(!0), + this._currentMeasureItem = void 0), + this.didEndMeasureCallback && this.didEndMeasureCallback(a) + } + } else + this._currentMeasureItem && this._currentMeasureItem.draw(t, this.config.pointTransformer) + } + this._currentMode !== yg && this._currentMode !== vg && (A.pickPoint && A.isAbsorbPoint ? this._showPickedPoint(A.pickPoint) : this._hidePickedPoint(), + A.pickPlane ? this._showPickedPanel(A.pickPoint, A.normal) : this._hidePickedPanel(), + A.pickLine ? this._showPickedLine(A.pickLine[0], A.pickLine[1], A.measureUnit) : this._hidePickedLine()) + } + }, + Ig.prototype.update = function () { + if (this.isOpen) { + for (var A = 0, e = this._items.length; e > A; A += 1) { + this._items[A].draw(void 0, this.config.pointTransformer) + } + this._currentMeasureItem && this._currentMeasureItem.draw(void 0, this.config.pointTransformer), + this._adjustItem && this._adjustItem.draw(void 0, this.config.pointTransformer), + this._pickedLine && this._pickedLine.isVisible() && this._pickedLine.draw(void 0, this.config.pointTransformer), + this._pickedPanel && this._pickedPanel.isVisible() && this._pickedPanel.draw(this.config.pointTransformer) + } + }, + Ig.prototype.changeSelect = function () { + for (var A = 0, e = this._items.length; e > A; A += 1) { + var t = this._items[A]; + t.setSelected(this._selectedItem === t) + } + }, + Ig.prototype._resize = function () { + this.svg.style.width = this.config.parentDom.clientWidth, + this.svg.style.height = this.config.parentDom.clientHeight + }, + Ig.prototype._createNewItem = function () { + switch (this._currentMode) { + case ug: + this._currentMeasureItem = new ig(this.svg, this.config.isMobile, this._items.length + 1); + break; + case fg: + this._currentMeasureItem = new eg(this.svg); + break; + case mg: + this._currentMeasureItem = new $p(this.svg); + break; + case Cg: + this._currentMeasureItem = new tg(this.svg); + break; + case yg: + this._currentMeasureItem = new og(this.svg); + break; + case vg: + this._currentMeasureItem = new pg(this.svg) + } + if (this._currentMeasureItem) { + this._currentMeasureItem.is3DMode = this.config.is3DMode, + this._currentMeasureItem instanceof $p || (this._adjustOption && this._currentMeasureItem.adjustWithOption(this._adjustOption), + this._unitSetByUser && this._currentMeasureItem.changeUnit(this._unitSetByUser)), + this._currentMeasureItem.changePrecision(this._precision); + var A = this; + this._currentMeasureItem.setClickCallback((function (e) { + e.isDone() && (A._selectedItem = e, + A.changeSelect()) + })) + } + }, + Ig.prototype._showPickedLine = function (A, e, t) { + var i = [A.x, A.y, void 0 === A.z ? 0 : A.z], + o = [e.x, e.y, void 0 === e.z ? 0 : e.z]; + this._pickedLine || (this._pickedLine = new ng(this.svg), + this._pickedLine.unitOfModel = t), + this._adjustOption && this._pickedLine.adjustWithOption(this._adjustOption), + this._pickedLine.changeUnit(this._unitSetByUser ? this._unitSetByUser : t), + this._pickedLine.changePrecision(this._precision), + this._pickedLine.add(), + this._pickedLine.setData(i, o), + this._pickedLine.draw(void 0, this.config.pointTransformer) + }, + Ig.prototype._hidePickedLine = function () { + this._pickedLine && this._pickedLine.remove() + }, + Ig.prototype._showPickedPoint = function (A) { + this._pickedPoint || (this._pickedPoint = new dg(this.svg)), + this._pickedPoint.add(), + this._pickedPoint.setupWithPoint(A), + this._pickedPoint.draw(this.config.pointTransformer) + }, + Ig.prototype._hidePickedPoint = function () { + this._pickedPoint && this._pickedPoint.remove() + }, + Ig.prototype._showPickedPanel = function (A, e) { + this._pickedPanel || (this._pickedPanel = new hg(this.svg, this.config.viewer)), + this._pickedPanel.add(), + this._pickedPanel.setupWithPoint(A, e), + this._pickedPanel.draw(this.config.pointTransformer) + }, + Ig.prototype._hidePickedPanel = function () { + this._pickedPanel && this._pickedPanel.remove() + }, + Ig.prototype._createSVG = function (A, e) { + var t = Lp(); + return t.style.width = A + "px", + t.style.height = e + "px", + t.style.position = "absolute", + t.style.left = "0", + t.style.top = "0", + t + }, + Ig.prototype._handleKeyUp = function (A) { + var e = A.keyCode; + 27 === e ? this.cancelCurrentMeasure() : 46 === e && this.removeSelectedMeasure() + }; + var Eg = function (A) { + yp.call(this, Pc.PICK_BY_MEASURE), + this.controlManager = A.controlManager, + this.pickHelper = new kp(A.cameraControl), + this.mouseDown = new s, + this.lastEvent = null, + this.pick = !1, + this.pickPoint = new y; + var e = A.getRenderer().domElement.parentElement, + t = new gg; + t.parentDom = e, + t.pointTransformer = A.getScreenCoordFromSceneCoord.bind(A), + t.viewer = A, + t.is3DMode = !0, + this.measure = new Ig(t); + var i = this; + A.cameraControl.addEventListener(Rc.ON_CAMERA_CHANGE, (function () { + i.measure.update() + })), + A.clearSelection() + }; + (Eg.prototype = Object.create(yp.prototype)).constructor = Eg, + Eg.prototype.destroy = function () { + yp.prototype.destroy.call(this), + this.editorManager = null, + this.mouseDown = null, + this.lastEvent = null, + this.pickPoint = null, + this.pickHelper.destroy(), + this.pickHelper = null + }, + Eg.prototype.processMouseDown = function (A) { + return !!mh.isMobileDevice() || (A.button === t.LEFT ? (this.mouseDown.x = A.clientX, + this.mouseDown.y = A.clientY, + !1) : yp.prototype.processMouseDown.call(this, A)) + }, + Eg.prototype.processMouseMove = function (A) { + return !1 + }, + Eg.prototype.processMouseUp = function (A) { + if (mh.isMobileDevice()) + return !0; + if (A.button === t.LEFT) { + if (2 >= new s(A.clientX, A.clientY).distanceTo(this.mouseDown)) { + var e = this.pickPoint.clone(), + i = void 0; + return i = A.shiftKey ? this.pickHelper.handleShiftMeasure(A, !0, e) : this.pickHelper.handleMouseMeasure(A, !0, e), + this.measure.processIntersect(i), + e.equals(this.pickPoint) || (this.pick = !this.pick, + this.pickPoint.copy(e)), + this.controlManager.isUpdateRenderList = !0, + !0 + } + return !0 + } + return yp.prototype.processMouseUp.call(this, A) + }, + Eg.prototype.processKeyDown = function (A) { + return 16 === A.keyCode || yp.prototype.processKeyDown.call(this, A) + }, + Eg.prototype.processHover = function (A) { + if (mh.isMobileDevice()) + return !0; + var e = void 0; + return e = A.shiftKey ? this.pickHelper.handleShiftMeasure(A, !1, this.pickPoint) : this.pickHelper.handleMouseMeasure(A, !1, this.pickPoint), + this.measure.processIntersect(e), + !0 + }, + Eg.prototype.processTouchstart = function (A) { + return this.mouseDown.x = A.touches[0].clientX, + this.mouseDown.y = A.touches[0].clientY, + A.clientX = A.touches[0].clientX, + A.clientY = A.touches[0].clientY, + this.lastEvent = A, + yp.prototype.processTouchstart.call(this, A) + }, + Eg.prototype.processTouchmove = function (A) { + return this.lastEvent = null, + yp.prototype.processTouchmove.call(this, A) + }, + Eg.prototype.processTouchend = function (A) { + if (null !== this.lastEvent) { + var e = this.pickHelper.handleMouseMeasure(this.lastEvent, !0, this.pickPoint); + this.measure.processIntersect(e), + this.controlManager.isUpdateRenderList = !0 + } + return yp.prototype.processTouchend.call(this, A) + }, + Eg.prototype.touchPointMove = function (A) { + this.measure.processIntersect(this.pickHelper.handleMouseMeasure(A, !1, this.pickPoint)) + }, + Eg.prototype.touchPointEnd = function (A) { + var e = this.pickPoint.clone(), + t = this.pickHelper.handleMouseMeasure(A, !0, e); + return this.measure.processIntersect(t), + e.equals(this.pickPoint) || (this.pick = !this.pick, + this.pickPoint.copy(e)), + this.controlManager.isUpdateRenderList = !0, + !0 + }, + Eg.prototype.onExit = function (A) { + this.measure.close(); + var e = this.pickHelper.scene; + e.hasGroup(gp.MEASUREPICKPLANE) && e.removeGroupByName(gp.MEASUREPICKPLANE) + }; + var Bg, xg, Sg, wg = { + pickByRect: function (A, e, t, i, o, n) { + var r = [], + a = i.octantToObjectMap, + s = (A.getMatrixGlobal(), + i.sceneState), + l = new aA; + + function c(A, t, i) { + A && A.frustumIntersect(e, t, i) + } + var h = i.filter, + d = h._hasVisibleFilter(), + p = h._hasPickableFilter(); + if (t !== Kc.Clear) { + var g, u, f = null, + m = []; + for (var C in a) + if (a.hasOwnProperty(C)) { + var y = i.getModel(C); + (f = a[C]).mesh; + var v = y && y.kdTreeNode, + I = []; + if (Array.isArray(v)) + for (var E = 0, B = v.length; B > E; E += 1) { + var x = v[E], + S = x.modelKey, + w = (new M).copy(y.getModelMatrix()); + S && w.multiply(y.subModel[S]), + c(x, I, w) + } + else + c(v, I, y.getModelMatrix()); + var b = Object.keys(y.manager.explosionList); + y && y.manager && b.length > 0 && (I = I.concat(b)); + for (var U = 0, F = (m = uh.unique(I)).length; F > U; U += 1) { + var K = f.info[m[U]]; + if (K) + for (var Q = 0, R = K.length; R > Q; Q += 1) { + var T = K[Q]; + (u = void 0, + u = i.isHiddenSourceObjectUserId((g = T).userId), + d && !h._isVisible(g) || p && !h._isPickable(g) || u) || (l.copy(T.boundingBox), + l.applyMatrix4(y.getModelMatrix()), + this._intersectBox(e, l, n) && !this._clipBox(o, l) && r.push(T.userId)) + } + } + } + return (r = r.concat(this.pickNonModelObjectsByRect(o, i, e, n))).length > 0 && (Kc.Remove === t ? (s.removeSelection(r), + i.dispatchEvent({ + type: Rc.ON_RECTPICK_REMOVE, + list: r + })) : Kc.Add === t && (s.addSelection(r), + i.dispatchEvent({ + type: Rc.ON_RECTPICK_ADD, + list: r + }))), + r + } + s.clearSelection() + }, + getObjectsInBox: function (A, e, t, i, o) { + var n = {}, + r = t.octantToObjectMap, + a = (A.getMatrixGlobal(), + new aA); + + function s(A) { + for (var e = new y, t = 0; 8 > t; t += 1) + if (e.x = 4 > t ? A.min.x : A.max.x, + e.y = 2 > t / 2 ? A.min.y : A.max.y, + e.z = t % 2 == 0 ? A.min.z : A.max.z, + !i.clipPoint(e)) + return !1; + return !0 + } + + function l(A) { + return o ? !(e.min.x > A.min.x || A.max.x > e.max.x || e.min.y > A.min.y || A.max.y > e.max.y || e.min.z > A.min.z || A.max.z > e.max.z) : !(e.min.x > A.max.x || A.min.x > e.max.x || e.min.y > A.max.y || A.min.y > e.max.y || e.min.z > A.max.z || A.min.z > e.max.z) + } + + function c(A) { + return Boolean(!(e.max.x > A.max.x || A.min.x > e.min.x || e.max.y > A.max.y || A.min.y > e.min.y || e.max.z > A.max.z || A.min.z > e.min.z)) + } + var h = t.filter, + d = h._hasVisibleFilter(), + p = h._hasPickableFilter(); + var g, u, f = null; + for (var m in r) + if (r.hasOwnProperty(m)) { + var C = t.getModel(m); + for (var v in (f = r[m]).info) + if (f.info.hasOwnProperty(v)) { + var I = f.info[v]; + if (!I) + continue; + for (var E = 0, B = I.length; B > E; E += 1) { + var x = I[E]; + (u = void 0, + u = t.isHiddenSourceObjectUserId((g = x).userId), + d && !h._isVisible(g) || p && !h._isPickable(g) || u) || (a.copy(x.boundingBox), + a.applyMatrix4(C.getModelMatrix()), + !l(a) || c(a) || s(a) || (n[x.userId] = !0)) + } + } + } + var S = []; + for (var w in n) + S.push(w); + return S + }, + pickNonModelObjectsByRect: function (A, e, t, i) { + var o = [], + n = e.getNodeInfosInPlugins(), + r = new aA; + for (var a in n) + if (n.hasOwnProperty(a)) { + var s = n[a]; + for (var a in s) + if (s.hasOwnProperty(a)) { + var l = s[a][0].mesh; + if (l) { + l instanceof Array || (l = [l]), + r.empty(); + for (var c = 0, h = l.length; h > c; c += 1) { + var d = l[c]; + d instanceof H && r.expandByObject(d) + } + this._intersectBox(t, r, i) && !this._clipBox(A, r) && o.push(a) + } + } + } + return o + }, + _intersectBox: (xg = new y, + Sg = new y, + function (A, e, t) { + for (var i = 0, o = A.planes, n = 0; 6 > n; n += 1) { + var r = o[n]; + xg.x = r.normal.x > 0 ? e.min.x : e.max.x, + Sg.x = r.normal.x > 0 ? e.max.x : e.min.x, + xg.y = r.normal.y > 0 ? e.min.y : e.max.y, + Sg.y = r.normal.y > 0 ? e.max.y : e.min.y, + xg.z = r.normal.z > 0 ? e.min.z : e.max.z, + Sg.z = r.normal.z > 0 ? e.max.z : e.min.z; + var a = r.distanceToPoint(xg), + s = r.distanceToPoint(Sg); + if (0 > a && 0 > s) + return !1; + 0 > a * s || (i += 1) + } + return t ? i >= 2 : 6 === i + } + ), + _clipBox: (Bg = new y, + function (A, e) { + for (var t = 0; 8 > t; t += 1) + if (Bg.x = 4 > t ? e.min.x : e.max.x, + Bg.y = 2 > t / 2 ? e.min.y : e.max.y, + Bg.z = t % 2 == 0 ? e.min.z : e.max.z, + !A.clipPoint(Bg)) + return !1; + return !0 + } + ) + }, + Mg = function (A, e, t) { + yp.call(this, A), + this.cameraControl = e, + this.frustum = new Ze, + this.startPt = new s, + this.endPt = new s, + this.eventDispatcher = t + }; + (Mg.prototype = Object.create(yp.prototype)).constructor = Mg, + Mg.prototype.destroy = function (A) { + yp.prototype.destroy.call(this), + this.cameraControl = null, + this.frustum = null, + this.startPt = null, + this.endPt = null, + this.eventDispatcher = null + }, + Mg.prototype.onUpdateUI = function (A) { + this.eventDispatcher.dispatchEvent({ + type: Rc.ON_CONTROL_UPDATEUI, + data: A, + editor: this.name + }) + }, + Mg.prototype.updateFrustum = function (A, e) { + var t = this.startPt.x, + i = this.endPt.x, + o = this.startPt.y, + n = this.endPt.y; + if (t > i) { + var r = t; + t = i, + i = r + } + if (o > n) { + var a = o; + o = n, + n = a + } + if (i - t == 0 || n - o == 0) + return !1; + var s = this.cameraControl, + l = s.getContainerDimensions(); + return A && s.computeFrustum(t, i, o, n, this.frustum, l), + e && this.onUpdateUI({ + visible: !0, + dir: this.endPt.x > this.startPt.x, + left: t - l.left, + top: o - l.top, + width: i - t, + height: n - o + }), + !0 + }; + var bg = function (A) { + Mg.call(this, Pc.PICK_BY_RECT, A.cameraControl, A.modelManager), + this.viewer = A, + this.scene = A.getScene(), + this.pickHelper = new kp(this.cameraControl), + this.activatePick = !1, + this.pressKey = "", + this.pickPoint = new y, + this.snapIsEnabled = !1 + }; + (bg.prototype = Object.create(Mg.prototype)).constructor = bg, + bg.prototype.destroy = function () { + Mg.prototype.destroy.call(this), + this.pickHelper.destroy(), + this.pickHelper = null, + this.viewer = null, + this.scene = null, + this.pickPoint = null + }, + bg.prototype.setPressKey = function (A) { + this.pressKey = A + }, + bg.prototype.processMouseDown = function (A) { + return A.preventDefault(), + this.activatePick = A.ctrlKey || A.altKey, + this.activatePick && A.button === t.LEFT ? (this.startPt.set(A.clientX, A.clientY), + !0) : Mg.prototype.processMouseDown(this, A) + }, + bg.prototype.processMouseMove = function (A) { + return this.activatePick && A.button === t.LEFT ? (this.endPt.set(A.clientX, A.clientY), + this.updateFrustum(!1, !0), + !0) : Mg.prototype.processMouseMove(this, A) + }, + bg.prototype.processMouseUp = function (A) { + if (this.onUpdateUI({ + visible: !1 + }), + this.activatePick && A.button === t.LEFT) { + if (this.activatePick = !1, + 2 > Math.abs(this.startPt.x - A.clientX) && 2 > Math.abs(this.startPt.y - A.clientY)) + return this.pickHelper.click(A, null), + !0; + if (this.endPt.set(A.clientX, A.clientY), + !this.updateFrustum(!0, !1)) + return this.pickHelper.click(A), + !0; + var e = Kc.Clear, + i = this.pressKey || A.ctrlKey && "ctrl" || A.altKey && "alt" || ""; + return "ctrl" === i ? e = Kc.Add : "alt" === i && (e = Kc.Remove), + wg.pickByRect(this.scene, this.frustum, e, this.cameraControl.viewer.modelManager, this.viewer, this.startPt.x > this.endPt.x), + this.pickHelper.lastPickedUserId = "", + this.cameraControl.updateView(!0), + !0 + } + return Mg.prototype.processMouseUp(this, A) + }, + bg.prototype.processTouchstart = function (A) { + return A.preventDefault(), + this.pressKey ? (this.startPt.set(A.changedTouches[0].pageX, A.changedTouches[0].pageY), + !0) : Mg.prototype.processTouchstart(this, A) + }, + bg.prototype.processTouchmove = function (A) { + return this.pressKey ? (this.endPt.set(A.changedTouches[0].pageX, A.changedTouches[0].pageY), + this.updateFrustum(!1, !0), + !0) : Mg.prototype.processMouseMove(this, A) + }, + bg.prototype.processTouchend = function (A) { + this.onUpdateUI({ + visible: !1 + }); + var e = A.changedTouches[0].pageX, + t = A.changedTouches[0].pageY; + if (this.pressKey) { + if (2 > Math.abs(this.startPt.x - e) && 2 > Math.abs(this.startPt.y - t)) + return this.pickHelper.click(A, null), + !0; + if (this.endPt.set(e, t), + !this.updateFrustum(!0, !1)) + return this.pickHelper.click(A), + !0; + var i = Kc.Clear, + o = this.pressKey; + return "ctrl" === o ? i = Kc.Add : "alt" === o && (i = Kc.Remove), + wg.pickByRect(this.scene, this.frustum, i, this.cameraControl.viewer.modelManager, this.viewer, this.startPt.x > this.endPt.x), + this.pickHelper.lastPickedUserId = "", + this.cameraControl.updateView(!0), + !0 + } + return Mg.prototype.processTouchend(this, A) + }, + bg.prototype.processHover = function (A) { + if (this.snapIsEnabled) + return vc.IsMobile || this.pickHelper.handleMouseMeasure(A, !1, this.pickPoint, Rc.ON_HOVER_SNAP), + !0 + }, + bg.prototype.enableSnap = function (A) { + this.snapIsEnabled = A + }; + var Ug = function (A) { + Mg.call(this, Pc.ZOOM_BY_RECT, A.cameraControl, A.modelManager), + this.scene = A.getScene(), + this.activateZoom = !1 + }; + (Ug.prototype = Object.create(Mg.prototype)).constructor = Ug, + Ug.prototype.destroy = function () { + Mg.prototype.destroy.call(this), + this.scene = null + }, + Ug.prototype.processMouseDown = function (A) { + return A.button === t.LEFT ? (this.startPt.set(A.clientX, A.clientY), + this.activateZoom = !0, + !0) : Mg.prototype.processMouseDown.call(this, A) + }, + Ug.prototype.processMouseMove = function (A) { + return this.activateZoom ? (this.endPt.set(A.clientX, A.clientY), + this.updateFrustum(!1, !0), + !0) : Mg.prototype.processMouseMove.call(this, A) + }, + Ug.prototype.processMouseUp = function (A) { + return this.activateZoom ? (this.activateZoom = !1, + this.onUpdateUI({ + visible: !1 + }), + this.endPt.set(A.clientX, A.clientY), + this.updateFrustum(!0, !1) && this.zoomToRectangle(), + !0) : Mg.prototype.processMouseUp.call(this, A) + }, + Ug.prototype.zoomToRectangle = function () { + var A = this.cameraControl.camera, + e = this.cameraControl.camera.target, + t = this.cameraControl.getContainerDimensions(), + i = this.startPt.x, + o = this.startPt.y, + n = this.endPt.x, + r = this.endPt.y, + a = Math.abs(n - i), + l = Math.abs(o - r); + if (0 !== a && 0 !== l) { + var c = new s((i + n) / 2, (o + r) / 2), + h = A.position.clone(), + d = e.clone().sub(h), + p = d.length(), + g = 0, + u = this.cameraControl.getIntersectContext(c), + f = this.cameraControl.intersector.hitTest(u); + if (f) { + var m = a / l > t.width / t.height ? a / t.width : l / t.height, + C = f.distanceTo(h) * m; + d.normalize(), + g = d.clone().negate().multiplyScalar(C) + } else { + var v = {}; + v.left = Math.min(i, n), + v.top = Math.min(o, r), + v.right = Math.max(i, n), + v.bottom = Math.max(o, r); + var I = this.scene.getNearDepthByRect(this.frustum, A); + if (I === 1 / 0) + return; + var E = new y((i + n) / 2, (o + r) / 2, I), + B = new y(v.left, v.top, I), + x = this.clientToWorld(E), + S = this.clientToWorld(B), + w = x.clone().sub(S).length(); + f = x.clone(), + d.normalize(), + g = d.clone().negate().multiplyScalar(w) + } + h = f.clone().add(g), + A.position.copy(h), + e.copy(h).sub(g.clone().normalize().multiplyScalar(p)), + this.cameraControl.updateView(!0) + } + }, + Ug.prototype.worldToClient = function (A) { + var e = this.cameraControl.camera, + t = new y(A.x, A.y, A.z); + return t.project(e), + t + }, + Ug.prototype.clientToWorld = function (A) { + var e = this.cameraControl.getContainerDimensions(), + t = this.cameraControl.camera, + i = new y; + return i.x = A.x / e.width * 2 - 1, + i.y = -A.y / e.height * 2 + 1, + i.z = A.z, + i.unproject(t), + i + }; + var Fg = function (A, e) { + this.name = A, + this.cameraControl = e, + this.mouseButtons = { + ORBIT: t.LEFT, + PAN2: t.MIDDLE, + PAN: t.RIGHT + }, + this.StateType = { + NONE: -1, + ROTATE: 0, + DOLLY: 1, + PAN: 2 + }, + this.state = this.StateType.NONE, + this.zoomSpeed = Math.pow(.95, .2), + this.defaultMovementSpeed = .005 * vc.SceneSize, + this.movementSpeed = this.defaultMovementSpeed, + this.minMovementSpeed = .001, + this.defaultKeyPanSpeed = 2, + this.keyPanSpeed = this.defaultKeyPanSpeed, + this.minKeyPanSpeed = .01, + this.wheelZoomFactor = 45e-5, + this.pointerLock = !1 + }; + Fg.prototype.getName = function () { + return this.name + }, + Fg.prototype.destroy = function () { + this.scene = null, + this.domElement = null, + this.cameraControl = null, + this.mouseButtons = null, + this.StateType = null + }, + Fg.prototype.onExit = function () {}, + Fg.prototype.onEnter = function () {}, + Fg.prototype.processMouseDown = function (A) {}, + Fg.processMouseMove = function (A) {}, + Fg.prototype.processMouseUp = function (A) {}, + Fg.prototype.processMouseWheel = function (A) {}, + Fg.prototype.processMouseDoubleClick = function (A) {}, + Fg.prototype.processKeyDown = function (A) {}, + Fg.prototype.processKeyUp = function (A) {}, + Fg.prototype.processTouchstart = function (A) {}, + Fg.prototype.processTouchmove = function (A) {}, + Fg.prototype.processTouchend = function (A) {}, + Fg.prototype.processHover = function (A) {}, + Fg.prototype.processMovement = function (A) {}, + Fg.prototype.processPointerLockEnter = function (A) {}, + Fg.prototype.processPointerLockExit = function (A) {}, + Fg.prototype.moveTo = function (A, e, t) {}, + Fg.prototype.rotateTo = function (A) {}, + Fg.prototype.dispatchEvent = function (A) { + this.cameraControl.viewer.getControlManager().dispatchEvent(A) + }, + Fg.prototype.getDomElement = function () { + return this.domElement + }, + Fg.prototype.getRendererDomElement = function () { + return this.rendererDomElement + }, + Fg.prototype.updateButtons = function (A) { + void 0 !== A.ORBIT && (this.mouseButtons.ORBIT = A.ORBIT), + void 0 !== A.PAN && (this.mouseButtons.PAN = A.PAN), + void 0 !== A.PAN2 && (this.mouseButtons.PAN2 = A.PAN2), + void 0 !== A.ZOOM && (this.mouseButtons.ZOOM = A.ZOOM) + }; + var Kg = function (A) { + Fg.call(this, Gc.FLY, A), + this.lookSpeed = .001, + this.constrainPitch = !0, + this.pitchMin = a.degToRad(5) - .5 * Math.PI, + this.pitchMax = .5 * Math.PI - this.pitchMin, + this.pitchDeltaTotal = 0, + this.moveState = qc.NONE, + this.rotateStart = new s, + this.rotateEnd = new s, + this.rotateDelta = new s, + this._panStart = new s, + this._panEnd = new s, + this._panDelta = new s, + this._pan = new y, + this._worldDimension = new s, + this.lastMousePoint = new s, + this.isLockHeight = !1, + this.lockedHeight = 0, + this.pickHelper = new kp(A), + this.intersectOfMouseDown = null + }; + (Kg.prototype = Object.create(Fg.prototype)).constructor = Kg, + Kg.prototype.destroy = function () { + Fg.prototype.destroy.call(this), + this.cameraControl = null, + this.scene = null, + this.rotateStart = null, + this.rotateEnd = null, + this.rotateDelta = null, + this._panStart = null, + this._panEnd = null, + this._panDelta = null, + this._pan = null, + this._worldDimension = null, + this.lastMousePoint = null, + this.intersectOfMouseDown = null, + this.pickHelper.destroy(), + this.pickHelper = null + }, + Kg.prototype.processMouseDown = function (A) { + A.preventDefault(), + A.stopPropagation(), + this.lastMousePoint.set(A.clientX, A.clientY); + var e = this.cameraControl; + if (this.intersectOfMouseDown = null, + A.button === this.mouseButtons.ORBIT) { + if (jh.NoRotate) + return; + this.rotateStart.set(A.clientX, A.clientY), + this.state = this.StateType.ROTATE, + this.dispatchEvent({ + type: Rc.ON_CONTROL_BEGIN, + name: "look", + control: this.name + }) + } else if (A.button === this.mouseButtons.PAN || A.button === this.mouseButtons.PAN2) { + if (jh.NoPan) + return; + this._panStart.set(A.clientX, A.clientY), + this._worldDimension = e.getWorldDimension(A.clientX, A.clientY), + this.intersectOfMouseDown = e.getLastIntersect(), + this.state = this.StateType.PAN, + this.isLockHeight && (this.lockedHeight = A.clientY) + } + }, + Kg.prototype.doPan = function (A, e) { + var t = this.cameraControl; + this._panEnd.set(A, this.isLockHeight ? this.lockedHeight : e), + this._panDelta.subVectors(this._panEnd, this._panStart), + 0 === this._panDelta.x && 0 === this._panDelta.y || (t.panOnWorld(this._panStart, this._panEnd, this._pan, this._worldDimension), + t.adjustCameraForPan(this._pan), + this._panStart.copy(this._panEnd), + t.update(!0)) + }, + Kg.prototype.processMouseMove = function (A) { + var e = this.cameraControl; + (A.preventDefault(), + this.state === this.StateType.ROTATE) ? (this.rotateEnd.set(A.clientX, A.clientY), + this.rotateDelta.subVectors(this.rotateEnd, this.rotateStart), + this.rotateStart.copy(this.rotateEnd), + (0 !== this.rotateDelta.x || 0 !== this.rotateDelta.y) && e.rotateForFly(this.rotateDelta.x * this.lookSpeed, this.rotateDelta.y * this.lookSpeed, this.pitchMin, this.pitchMax)) : this.state === this.StateType.PAN && this.doPan(A.clientX, A.clientY) + }, + Kg.prototype.processMouseUp = function (A) { + if (A.preventDefault(), + A.stopPropagation(), + A.button !== t.LEFT || this.lastMousePoint.x !== A.clientX || this.lastMousePoint.y !== A.clientY) { + this.intersectOfMouseDown = null; + var e = this.cameraControl; + switch (this.state) { + case this.StateType.ROTATE: + this.rotateDelta.set(0, 0); + e.rotateForFly(0, 0, this.pitchMin, this.pitchMax), + this.dispatchEvent({ + type: Rc.ON_CONTROL_END, + name: "look", + control: this.name + }); + break; + case this.StateType.PAN: + this.doPan(A.clientX, A.clientY) + } + e.endOperation(), + this.state = this.StateType.NONE + } else + this.pickHelper.click(A, this.intersectOfMouseDown) + }, + Kg.prototype.processHover = function (A) { + this.pickHelper.handleMouseHover(A) + }, + Kg.prototype.processMouseWheel = function (A) { + A.preventDefault(), + A.stopPropagation(); + var e = this.cameraControl; + if (!jh.NoZoom) { + var t = A.wheelDelta || A.detail; + t = Math.abs(t) > 10 ? t : 40 * -t, + t *= 5e-4, + jh.ReverseWheelDirection && (t *= -1), + this.cameraControl.delayHandle(); + var i = e.getContainerDimensions(); + e.zoom(t, i.left + .5 * i.width, i.top + .5 * i.height) + } + }, + Kg.prototype.processKeyDown = function (A) { + if (!jh.NoKey && !A.altKey) { + var e = qc, + t = e.NONE; + switch (A.keyCode) { + case Ph: + this.movementSpeed = this.defaultMovementSpeed; + break; + case Vh: + this.movementSpeed *= 1.1; + break; + case Gh: + this.movementSpeed *= .9, + this.minMovementSpeed > this.movementSpeed && (this.movementSpeed = this.minMovementSpeed); + break; + case Fh: + case Nh: + t = e.FORWARD; + break; + case Qh: + case Lh: + t = e.BACK; + break; + case Uh: + case Rh: + t = e.LEFT; + break; + case Kh: + case Th: + t = e.RIGHT; + break; + case Dh: + t = e.UP; + break; + case kh: + t = e.DOWN + } + t !== e.NONE && (this.moveState |= t, + this.dispatchEvent({ + type: Rc.ON_CONTROL_KEYDOWN, + event: A, + state: t, + direction: e, + control: this.name + }), + this.cameraControl.delayHandle(), + this.cameraControl.updateFlyMove(this.moveState, this.movementSpeed * jh.MovementSpeedRate)) + } + }, + Kg.prototype.processKeyUp = function (A) { + if (!jh.NoKey) { + var e = qc, + t = e.NONE; + switch (A.keyCode) { + case Fh: + case Nh: + t = e.FORWARD; + break; + case Qh: + case Lh: + t = e.BACK; + break; + case Uh: + case Rh: + t = e.LEFT; + break; + case Kh: + case Th: + t = e.RIGHT; + break; + case Dh: + t = e.UP; + break; + case kh: + t = e.DOWN + } + t !== e.NONE && (this.dispatchEvent({ + type: Rc.ON_CONTROL_KEYUP, + event: A, + state: t, + direction: e, + control: this.name + }), + this.moveState &= ~t) + } + }, + Kg.prototype.moveTo = function (A) { + this.cameraControl.updateFlyMove(A, this.movementSpeed * jh.MovementSpeedRate) + }; + var Qg = function (A, e) { + Fg.call(this, A, e), + this.oldMouseX = -1, + this.oldMouseY = -1, + this.rotatePivot = null, + this._rotateStart = new s, + this._rotateEnd = new s, + this._rotateDelta = new s, + this._lastTrackingPoint = null, + this.rotateSpeed = 1, + this._dollyStart = new s, + this._dollyEnd = new s, + this._dollyDelta = new s, + this._dollyCenter = new s, + this.zoomSpeed = Math.pow(.95, .2), + this.modelManager = e.viewer.modelManager, + this._panStart = new s, + this._panEnd = new s, + this._panDelta = new s, + this._pan = new y, + this._worldDimension = new s, + this.pickHelper = new kp(e), + this.intersectOfMouseDown = null, + this.timeId = null, + this.longTapFlag = !1, + this.selectPad = (mh.isMobileDevice(), + null), + this.startPt = new s; + var t = this; + this.longTap = function () { + t.longTapFlag = !0, + Bh.log("long tap"), + t.selectPad && t.selectPad.showOverlay(t.startPt) + }, + this._reqid = 0, + this._animateBinded = this._animate.bind(this), + this._clock = new as, + this._moving = !1 + }; + (Qg.prototype = Object.create(Fg.prototype)).constructor = Qg, + Qg.prototype.destroy = function () { + Fg.prototype.destroy.call(this), + this.modelManager = null, + this.intersectOfMouseDown = null, + this.rotatePivot = null, + this._rotateStart = null, + this._rotateEnd = null, + this._rotateDelta = null, + this._lastTrackingPoint = null, + this._dollyStart = null, + this._dollyEnd = null, + this._dollyDelta = null, + this._dollyCenter = null, + this._panStart = null, + this._panEnd = null, + this._panDelta = null, + this._pan = null, + this._worldDimension = null, + this.startPt = null, + this._animateBinded = null, + this._clock = null, + this.timeId && (clearTimeout(this.timeId), + this.timeId = null), + this.pickHelper.destroy(), + this.pickHelper = null, + this.selectPad && (this.selectPad.destroy(), + this.selectPad = null) + }, + Qg.prototype.beginPan = function (A, e) { + this._panStart.set(A, e), + this._worldDimension = this.getWorldDimension(A, e) + }, + Qg.prototype.processMouseDown = function (A) { + this.oldMouseX = A.clientX, + this.oldMouseY = A.clientY; + var e = this.cameraControl; + this.intersectOfMouseDown = null, + A.preventDefault(); + var t = ""; + if (A.button === this.mouseButtons.ORBIT) { + if (jh.NoRotate) + return; + this.rotatePivot = e.calculatePivot(jh.RotatePivotMode, { + x: A.clientX, + y: A.clientY + }), + this.state = this.StateType.ROTATE, + this._rotateStart.set(A.clientX, A.clientY), + this._lastTrackingPoint = null, + t = Gc.ORBIT + } else if (A.button === this.mouseButtons.ZOOM) { + if (jh.NoZoom) + return; + this.state = this.StateType.DOLLY, + this._dollyStart.set(A.clientX, A.clientY), + t = Gc.ZOOM + } else if (A.button === this.mouseButtons.PAN || A.button === this.mouseButtons.PAN2) { + if (jh.NoPan) + return; + this._panStart.set(A.clientX, A.clientY), + this._worldDimension = e.getWorldDimension(A.clientX, A.clientY), + this.state = this.StateType.PAN, + t = Gc.PAN + } + this.dispatchEvent({ + type: Rc.ON_CONTROL_BEGIN, + name: t, + control: this.name + }) + }, + Qg.prototype.processMouseMove = function (A) { + var e = this.cameraControl; + switch (A.preventDefault(), + this.state) { + case this.StateType.ROTATE: + if (this._rotateEnd.set(A.clientX, A.clientY), + this._rotateDelta.subVectors(this._rotateEnd, this._rotateStart), + 0 === this._rotateDelta.x && 0 === this._rotateDelta.y) + return; + this._rotateStart.copy(this._rotateEnd), + e.processRotate(this._rotateDelta, this.rotatePivot); + break; + case this.StateType.DOLLY: + if (this._dollyEnd.set(A.clientX, A.clientY), + this._dollyDelta.subVectors(this._dollyEnd, this._dollyStart), + 0 === this._dollyDelta.x && 0 === this._dollyDelta.y) + return; + this.cameraControl.adjustCameraForDolly(this._dollyDelta.y > 0 ? this.zoomSpeed : 1 / this.zoomSpeed, null), + this._dollyStart.copy(this._dollyEnd); + break; + case this.StateType.PAN: + if (this._panEnd.set(A.clientX, A.clientY), + this._panDelta.subVectors(this._panEnd, this._panStart), + 0 === this._panDelta.x && 0 === this._panDelta.y) + return; + this.cameraControl.panOnWorld(this._panStart, this._panEnd, this._pan, this._worldDimension), + this.cameraControl.adjustCameraForPan(this._pan), + this._panStart.copy(this._panEnd) + } + this.state !== this.StateType.NONE && this.cameraControl.update(!0) + }, + Qg.prototype.processMouseUp = function (A) { + if (this.state === this.StateType.NONE) + return !1; + this.intersectOfMouseDown = null; + var e = this.cameraControl; + this.oldMouseX === A.clientX && this.oldMouseY === A.clientY || e.update(!0), + this.state = this.StateType.NONE, + this.rotatePivot = null, + e.endOperation(); + var t = ""; + return A.button === this.mouseButtons.ORBIT ? t = Gc.ORBIT : A.button === this.mouseButtons.ZOOM ? t = Gc.ZOOM : A.button !== this.mouseButtons.PAN && A.button !== this.mouseButtons.PAN2 || (t = Gc.PAN), + this.dispatchEvent({ + type: Rc.ON_CONTROL_END, + name: t, + control: this.name + }), + !0 + }, + Qg.prototype.processMouseWheel = function (A) { + var e = this.cameraControl; + if (!jh.NoZoom) { + A.preventDefault(), + A.stopPropagation(); + var t = 0; + A.wheelDelta ? t = A.wheelDelta : A.deltaY && (t = 40 * -A.deltaY), + Math.abs(t) > 720 && (t = t > 0 ? 720 : -720), + t *= this.wheelZoomFactor, + jh.ReverseWheelDirection && (t *= -1), + e.zoom(t, A.clientX, A.clientY), + e.delayHandle(), + this.dispatchEvent({ + type: Rc.ON_CONTROL_ZOOM + }) + } + }, + Qg.prototype.processKeyDown = function (A) { + if (!jh.NoKey && !jh.NoPan) { + var e = this.cameraControl, + t = null; + vc.MergeComponent ? (this.animationStarted || (this.animationStarted = !0, + this._start()), + t = !1) : (t = !0, + e.delayHandle()), + this._moving = !0; + var i = !1, + o = this.movementSpeed * jh.MovementSpeedRate, + n = this.keyPanSpeed * jh.MovementSpeedRate; + switch (A.keyCode) { + case Ph: + this.keyPanSpeed = e.defaultKeyPanSpeed, + this.movementSpeed = e.defaultMovementSpeed; + break; + case Vh: + this.keyPanSpeed *= 1.1, + this.movementSpeed *= 1.1; + break; + case Gh: + this.keyPanSpeed *= .9, + this.minKeyPanSpeed > this.keyPanSpeed && (this.keyPanSpeed = this.minKeyPanSpeed), + this.movementSpeed *= .9, + this.minMovementSpeed > this.movementSpeed && (this.movementSpeed = this.minMovementSpeed); + break; + case Dh: + e.pan(0, n), + i = !0; + break; + case kh: + e.pan(0, -n), + i = !0; + break; + case Uh: + e.processRotate({ + x: -10, + y: 0 + }, this.rotatePivot), + i = !0; + break; + case Rh: + e.pan(n, 0), + i = !0; + break; + case Kh: + e.processRotate({ + x: 10, + y: 0 + }, this.rotatePivot), + i = !0; + break; + case Th: + e.pan(-n, 0), + i = !0; + break; + case Fh: + e.processRotate({ + x: 0, + y: -10 + }, this.rotatePivot), + i = !0; + break; + case Nh: + e.moveStraight(o, !A.shiftKey), + i = !0; + break; + case Qh: + e.processRotate({ + x: 0, + y: 10 + }, this.rotatePivot), + i = !0; + break; + case Lh: + e.moveStraight(-o, !A.shiftKey), + i = !0 + } + i && t && e.update(!0) + } + }, + Qg.prototype.processKeyUp = function (A) { + if (!jh.NoKey && !jh.NoPan) + switch (A.keyCode) { + case qh: + this.cameraControl.viewer.modelManager.sceneState.clearSelection(), + this.pickHelper.lastPickedUserId = void 0, + this.cameraControl.updateView(!0) + } + }, + Qg.prototype.processTouchstart = function (A) { + this.startPt.set(A.touches[0].clientX, A.touches[0].clientY), + this.timeId && clearTimeout(this.timeId); + var e = this.cameraControl; + switch (this.timeId = setTimeout(this.longTap, 400), + this.selectPad && this.selectPad.hideOverlay(), + A.touches.length) { + case 1: + if (jh.NoRotate) + return; + this.rotatePivot = e.calculatePivot(jh.RotatePivotMode, { + x: A.touches[0].clientX, + y: A.touches[0].clientY + }), + this._rotateStart.set(A.touches[0].clientX, A.touches[0].clientY), + this.state = this.StateType.ROTATE; + break; + case 2: + if (!jh.NoZoom) { + var t = A.touches[0].clientX - A.touches[1].clientX, + i = A.touches[0].clientY - A.touches[1].clientY; + this._dollyStart.set(0, Math.sqrt(t * t + i * i)) + } + if (!jh.NoPan) + this._panStart.set(.5 * (A.touches[0].clientX + A.touches[1].clientX), .5 * (A.touches[0].clientY + A.touches[1].clientY)); + break; + default: + this.state = this.StateType.NONE + } + }, + Qg.prototype.processTouchmove = function (A) { + var e = this.cameraControl; + switch (A.preventDefault(), + A.touches.length) { + case 1: + if (jh.NoRotate) + return; + this._rotateEnd.set(A.touches[0].clientX, A.touches[0].clientY), + this._rotateDelta.subVectors(this._rotateStart, this._rotateEnd); + var t = this.cameraControl.getClientSize(), + i = 2 * Math.PI * this._rotateDelta.x / t.x * this.rotateSpeed, + o = 2 * Math.PI * this._rotateDelta.y / t.y * this.rotateSpeed; + e.handleRotation(i, o, this.rotatePivot), + this._rotateStart.copy(this._rotateEnd); + break; + case 2: + if (e.clearTouchRotateState(), + !jh.NoZoom) { + var n = A.touches[0].clientX - A.touches[1].clientX, + r = A.touches[0].clientY - A.touches[1].clientY, + a = Math.sqrt(n * n + r * r); + if (this._dollyEnd.set(0, a), + this._dollyDelta.subVectors(this._dollyEnd, this._dollyStart), + Math.abs(this._dollyDelta.y) > 3) { + var s = 0; + this._dollyDelta.y > 0 ? s = 1 / Math.pow(this.zoomSpeed, .5 * this._dollyDelta.y) : 0 > this._dollyDelta.y && (s = Math.pow(this.zoomSpeed, .5 * -this._dollyDelta.y)), + this._dollyStart.copy(this._dollyEnd), + e.touchDolly(.5 * (A.touches[0].clientX + A.touches[1].clientX), .5 * (A.touches[0].clientY + A.touches[1].clientY), s), + this.state = this.StateType.DOLLY + } + } + if (!jh.NoPan) { + var l = .5 * (A.touches[0].clientX + A.touches[1].clientX), + c = .5 * (A.touches[0].clientY + A.touches[1].clientY); + if (this._panEnd.set(l, c), + this._panDelta.subVectors(this._panEnd, this._panStart), + 3 > Math.abs(this._panDelta.x) && 3 > Math.abs(this._panDelta.y)) + return; + this._worldDimension = e.getWorldDimension(l, c), + e.panOnWorld(this._panStart, this._panEnd, this._pan, this._worldDimension), + e.adjustCameraForPan(this._pan), + this._panStart.copy(this._panEnd), + this.state = this.StateType.PAN + } + } + e.touchUpdate() + }, + Qg.prototype.processTouchend = function (A) { + this.timeId && clearTimeout(this.timeId), + this.longTapFlag && (this.longTapFlag = !1, + A.preventDefault()); + var e = this.cameraControl; + switch (A.touches.length) { + case 0: + this.state = this.StateType.NONE, + e.touchEndHandler(A); + break; + case 1: + if (jh.NoRotate) + return; + this._rotateStart.set(A.touches[0].clientX, A.touches[0].clientY), + this.state = this.StateType.ROTATE + } + }, + Qg.prototype.processHover = function (A) { + this.pickHelper.handleMouseHover(A) + }, + Qg.prototype.moveTo = function (A) { + if (void 0 !== A) { + var e = this.cameraControl; + if (!jh.NoKey && !jh.NoPan) { + var t = this.movementSpeed * jh.MovementSpeedRate, + i = this.keyPanSpeed * jh.MovementSpeedRate, + o = qc; + switch (A) { + case o.FORWARD: + e.moveForward(t, !0); + break; + case o.BACK: + e.moveBackward(t, !0); + break; + case o.LEFT: + e.pan(i, 0); + break; + case o.RIGHT: + e.pan(-i, 0); + break; + case o.UP: + e.pan(0, i); + break; + case o.DOWN: + e.pan(0, -i); + break; + default: + A = o.NONE + } + A !== o.NONE && e.update(!0, !0) + } + } + }, + Qg.prototype._updateMove = function () { + this._moving && (this._moving = !1, + this.cameraControl.update(!0)) + }, + Qg.prototype._animate = function () { + this._reqid = requestAnimationFrame(this._animateBinded), + this._updateMove() + }, + Qg.prototype._start = function () { + this._animate() + }, + Qg.prototype._stop = function () { + cancelAnimationFrame(this._reqid) + }, + Qg.prototype.onExit = function () { + vc.MergeComponent && this.animationStarted && (this._stop(), + this.animationStarted = !1) + }; + var Rg = function (A) { + Qg.call(this, Gc.ORBIT, A), + this.mouseButtons = { + ORBIT: t.LEFT, + PAN2: t.MIDDLE, + PAN: t.RIGHT + } + }; + (Rg.prototype = Object.create(Qg.prototype)).constructor = Rg; + var Tg = function (A) { + Qg.call(this, Gc.PAN, A), + this.mouseButtons = { + ORBIT: t.RIGHT, + PAN2: t.MIDDLE, + PAN: t.LEFT + } + }; + (Tg.prototype = Object.create(Qg.prototype)).constructor = Tg; + var kg = function (A) { + Rg.call(this, A, Gc.PICK) + }; + (kg.prototype = Object.create(Rg.prototype)).constructor = kg, + kg.prototype.processMouseUp = function (A) { + A.preventDefault(); + var e = 1 >= Math.abs(this.oldMouseX - A.clientX) && 1 >= Math.abs(this.oldMouseY - A.clientY); + A.button !== t.LEFT && A.button !== t.RIGHT || e && (this.pickHelper.click(A, this.intersectOfMouseDown), + this.intersectOfMouseDown = null), + e || A.button !== this.mouseButtons.ORBIT && A.button !== this.mouseButtons.PAN || this.cameraControl.update(!0), + this.intersectOfMouseDown = null, + this.state = this.StateType.NONE; + var i = ""; + A.button === this.mouseButtons.ORBIT ? i = Gc.ORBIT : A.button === this.mouseButtons.ZOOM ? i = Gc.ZOOM : A.button !== this.mouseButtons.PAN && A.button !== this.mouseButtons.PAN2 || (i = Gc.PAN, + e || this.dispatchEvent({ + type: Rc.ON_MOUSE_DRAGGED, + event: A + })), + this.dispatchEvent({ + type: Rc.ON_CONTROL_END, + name: i, + Control: this.name + }) + }, + kg.prototype.processMouseDoubleClick = function (A) { + A.button === t.LEFT && this.pickHelper.doubleClick(A) + }; + var Dg = function (A) { + this.control = A, + this.cameraControl = A.cameraControl, + this.dim = this.cameraControl.getContainerDimensions(), + this.pad = null, + this.padSize = 96, + this.startPt = new s, + this.position = new s, + this.callback = null, + this.intersect = null, + this.destroy = function () { + this.control = null, + this.cameraControl = null, + this.dim = null, + this.pad = null, + this.startPt = null, + this.position = null, + this.callback = null, + this.intersect = null + }, + this.init = function () { + window.addEventListener("resize", this.padInitBind, !1), + this.pad = document.createElement("div"), + this.padInit(), + this.cameraControl.domElement.appendChild(this.pad), + this.addEventListener() + }, + this.addEventListener = function () { + this.pad.addEventListener("touchstart", this.padOnTouchStartBind, !1), + this.pad.addEventListener("touchmove", this.padOnTouchMoveBind, !1), + this.pad.addEventListener("touchend", this.padOnTouchEndBind, !1) + }, + this.padInit = function () { + null !== this.pad && (this.pad.style.backgroundImage = "url(images/selectPad.png)", + this.pad.style.backgroundSize = "100%", + this.pad.style.position = "absolute", + this.pad.style.width = this.padSize.toString() + "px", + this.pad.style.height = this.padSize.toString() + "px", + this.pad.style.zIndex = "10", + this.pad.style.display = "none") + }, + this.showOverlay = function (A) { + this.position = A, + this.pad.style.left = this.position.x.toString() + "px", + this.pad.style.top = (this.position.y - this.dim.top).toString() + "px", + this.pad.style.display = "" + }, + this.hideOverlay = function () { + this.pad.style.display = "none" + }, + this.pick = function () { + var A = this.position.x, + e = this.position.y, + t = this.cameraControl, + i = t.viewer.modelManager.sceneState, + o = this, + n = new s(A, e), + r = t.getIntersectContext(n); + t.intersector.pick(r, (function (A) { + if (i.clearSelection(), + !A) + return t.updateView(!0), + void(o.intersect = null); + var e = A.userId; + t.viewer.getScene().intersectToWorld(A, t.viewer), + i.addSelection([e]), + o.intersect = A, + t.updateView(!0) + })), + null !== o.intersect && (o.intersect.cx = A, + o.intersect.cy = e) + }, + this.onTouchStart = function (A) { + 1 === A.touches.length && (A.stopPropagation(), + A.preventDefault(), + this.startPt.set(A.touches[0].clientX, A.touches[0].clientY)) + }, + this.onTouchMove = function (A) { + if (1 === A.touches.length) { + A.stopPropagation(), + A.preventDefault(); + var e = A.touches[0].clientY - this.startPt.y; + this.position.x += A.touches[0].clientX - this.startPt.x, + this.position.y += e, + this.pad.style.left = this.position.x.toString() + "px", + this.pad.style.top = (this.position.y - this.dim.top).toString() + "px", + this.startPt.set(A.touches[0].clientX, A.touches[0].clientY), + this.pick(A) + } + }, + this.onTouchEnd = function (A) { + A.stopPropagation(), + null !== this.callback ? this.callback(this.intersect) : console.log("selectPad click", this.intersect) + }, + this.padInitBind = this.padInit.bind(this), + this.padOnTouchStartBind = this.onTouchStart.bind(this), + this.padOnTouchEndBind = this.onTouchEnd.bind(this), + this.padOnTouchMoveBind = this.onTouchMove.bind(this), + this.init() + }, + Lg = function (A) { + Fg.call(this, Gc.WALK, A), + this.mouseButtons = { + ORBIT: t.LEFT, + PAN2: t.MIDDLE, + PAN: t.RIGHT + }, + this.pickHelper = new kp(A), + this.lastMousePoint = new s, + this._reqid = 0, + this._animateBinded = this._animate.bind(this), + this._clock = new as, + this.moveState = { + up: 0, + down: 0, + left: 0, + right: 0, + forward: 0, + back: 0, + pitchUp: 0, + pitchDown: 0, + yawLeft: 0, + yawRight: 0, + rollLeft: 0, + rollRight: 0 + }, + this.startPt = new s, + this.timeId = null, + this.rotateSpeed = 1, + this._rotateStart = new s, + this._rotateEnd = new s, + this._rotateDelta = new s, + this._dollyStart = new s, + this._dollyEnd = new s, + this._dollyDelta = new s, + this._dollyCenter = new s, + this.zoomSpeed = Math.pow(.95, .2), + this._panStart = new s, + this._panEnd = new s, + this._panDelta = new s, + this._pan = new y, + this.selectPad = mh.isMobileDevice() ? new Dg(this) : null, + this.moveVector = new y(0, 0, 0), + this.rotationVector = new y(0, 0, 0), + this.zoomDelta = 0, + this.rotateStart = new s, + this.rotateEnd = new s, + this.rotateDelta = new s, + this.firstRotate = !0, + this.dragLook = !0, + this.lockHeightEnabled = !1, + this.isLockHeight = !1, + this.lockedHeight = 0, + this.pickEnabled = !0, + this.mouseType = null; + var e = A.viewer.getScene().getBoundingBoxWorld(); + this.defaultMovementSpeed = e ? e.getSize(new y(0, 0, 0)).length() / 10 : 1500, + this.movementSpeed = this.defaultMovementSpeed, + this.shiftSpeedup = !1, + this.setFocuse = function () { + var A = document.querySelector(".main-canvas"); + A && A.focus && A.focus() + } + }; + (Lg.prototype = Object.create(Fg.prototype)).constructor = Lg, + Lg.prototype.destroy = function () { + Fg.prototype.destroy.call(this), + this.pickHelper.destroy(), + this.pickHelper = null, + this.selectPad && (this.selectPad.destroy(), + this.selectPad = null), + this.timeId && (clearTimeout(this.timeId), + this.timeId = null), + this._clock = null, + this._animateBinded = null, + this.mouseButtons = null, + this.moveState = null, + this.startPt = null, + this.lastMousePoint = null, + this.rotateStart = null, + this.rotateEnd = null, + this.rotateDelta = null, + this._rotateStart = null, + this._rotateEnd = null, + this._rotateDelta = null, + this._dollyStart = null, + this._dollyEnd = null, + this._dollyDelta = null, + this._dollyCenter = null, + this._panStart = null, + this._panEnd = null, + this._panDelta = null, + this._pan = null, + this.moveVector = null, + this.rotationVector = null, + this.rotateStart = null, + this.rotateEnd = null, + this.rotateDelta = null + }, + Lg.prototype._animate = function () { + this._reqid = requestAnimationFrame(this._animateBinded), + this.updateWalkMove() + }, + Lg.prototype._start = function () { + this.moveState = { + up: 0, + down: 0, + left: 0, + right: 0, + forward: 0, + back: 0, + pitchUp: 0, + pitchDown: 0, + yawLeft: 0, + yawRight: 0, + rollLeft: 0, + rollRight: 0 + }, + this._animate() + }, + Lg.prototype._stop = function () { + cancelAnimationFrame(this._reqid) + }, + Lg.prototype._updateMovement = function () { + this.moveVector.x = -this.moveState.left + this.moveState.right, + this.moveVector.z = this.isLockHeight ? 0 : -this.moveState.down + this.moveState.up, + this.moveVector.y = -this.moveState.forward + this.moveState.back + }, + Lg.prototype._updateRotation = function () { + this.rotationVector.x = jh.LockAxisZ ? 0 : -this.moveState.pitchDown + this.moveState.pitchUp, + this.rotationVector.z = -this.moveState.yawRight + this.moveState.yawLeft, + this.rotationVector.y = -this.moveState.rollRight + this.moveState.rollLeft + }, + Lg.prototype._doRotate = function (A) { + vc.WalkingWithViewLock && (A.y = 0); + var e = this.cameraControl.getClientSize(), + t = e.y / 2; + this.moveState.yawLeft = A.x / (e.x / 2), + this.moveState.pitchDown = A.y / t, + this._updateRotation() + }, + Lg.prototype.processMouseDown = function (A) { + this.oldMouseX = A.clientX, + this.oldMouseY = A.clientY; + var e = this.cameraControl; + if (A.button === this.mouseButtons.ORBIT) { + if (A.preventDefault(), + A.stopPropagation(), + this.mouseType = A.button, + this.lastMousePoint.set(A.clientX, A.clientY), + this.firstRotate = !1, + A.button === this.mouseButtons.ORBIT) { + if (jh.NoRotate) + return; + this.rotateStart.set(A.clientX, A.clientY), + this.state = this.StateType.ROTATE, + this.dispatchEvent({ + type: Rc.ON_CONTROL_BEGIN, + name: "look", + control: this.name + }) + } + } else if (A.button === this.mouseButtons.PAN || A.button === this.mouseButtons.PAN2) { + if (jh.NoPan) + return; + this._panStart.set(A.clientX, A.clientY), + this._worldDimension = e.getWorldDimension(A.clientX, A.clientY), + this.state = this.StateType.PAN, + this.dispatchEvent({ + type: Rc.ON_CONTROL_BEGIN, + name: Gc.PAN, + control: this.name + }) + } + }, + Lg.prototype.processMouseUp = function (A) { + return A.preventDefault(), + A.stopPropagation(), + A.button === this.mouseButtons.PAN && this.setFocuse(), + this.mouseType = null, + this.pickEnabled && (A.button === t.LEFT || A.button === t.RIGHT) && 2 > Math.abs(this.lastMousePoint.x - A.clientX) && 2 > Math.abs(this.lastMousePoint.y - A.clientY) ? (this.state = this.StateType.NONE, + void this.pickHelper.click(A)) : (this.state === this.StateType.ROTATE && (this.moveState.yawLeft = this.moveState.pitchDown = 0, + this.dispatchEvent({ + type: Rc.ON_CONTROL_END, + name: "look", + control: this.name + })), + this.state = this.StateType.NONE, + !0) + }, + Lg.prototype.processMouseMove = function (A) { + if (A.preventDefault(), + this.dragLook && this.state === this.StateType.ROTATE && 0 === this.mouseType) { + if (this.rotateEnd.set(A.clientX, A.clientY), + this.rotateDelta.subVectors(this.rotateEnd, this.rotateStart), + 0 === this.rotateDelta.x && 0 === this.rotateDelta.y) + return; + this.rotateStart.copy(this.rotateEnd), + this._doRotate(this.rotateDelta) + } else { + switch (this.state) { + case this.StateType.DOLLY: + if (this._dollyEnd.set(A.clientX, A.clientY), + this._dollyDelta.subVectors(this._dollyEnd, this._dollyStart), + 0 === this._dollyDelta.x && 0 === this._dollyDelta.y) + return; + this.cameraControl.adjustCameraForDolly(this._dollyDelta.y > 0 ? this.zoomSpeed : 1 / this.zoomSpeed, null), + this._dollyStart.copy(this._dollyEnd); + break; + case this.StateType.PAN: + if (this._panEnd.set(A.clientX, A.clientY), + this._panDelta.subVectors(this._panEnd, this._panStart), + 0 === this._panDelta.x && 0 === this._panDelta.y) + return; + this.cameraControl.panOnWorld(this._panStart, this._panEnd, this._pan, this._worldDimension), + this.cameraControl.adjustCameraForPan(this._pan), + this._panStart.copy(this._panEnd) + } + this.state !== this.StateType.NONE && this.cameraControl.update(!0) + } + }, + Lg.prototype.processTouchstart = function (A) { + this.startPt.set(A.touches[0].clientX, A.touches[0].clientY), + this.timeId && clearTimeout(this.timeId); + switch (this.timeId = setTimeout(this.longTap, 400), + this.selectPad && this.selectPad.hideOverlay(), + A.touches.length) { + case 1: + if (jh.NoRotate) + return; + this._rotateStart.set(A.touches[0].clientX, A.touches[0].clientY), + this.state = this.StateType.ROTATE; + break; + case 2: + if (!jh.NoZoom) { + var e = A.touches[0].clientX - A.touches[1].clientX, + t = A.touches[0].clientY - A.touches[1].clientY; + this._dollyStart.set(0, Math.sqrt(e * e + t * t)) + } + if (!jh.NoPan) + this._panStart.set(.5 * (A.touches[0].clientX + A.touches[1].clientX), .5 * (A.touches[0].clientY + A.touches[1].clientY)); + break; + default: + this.state = this.StateType.NONE + } + }, + Lg.prototype.processTouchmove = function (A) { + this.timeId && clearTimeout(this.timeId); + var e = this.cameraControl; + switch (A.preventDefault(), + A.touches.length) { + case 1: + this.dragLook && this.state === this.StateType.ROTATE && (this._rotateEnd.set(A.touches[0].clientX, A.touches[0].clientY), + this._rotateDelta.subVectors(this._rotateEnd, this._rotateStart), + this._rotateStart.copy(this._rotateEnd), + this._doRotate(this._rotateDelta)); + break; + case 2: + if (e.clearTouchRotateState(), + !jh.NoZoom) { + var t, i = A.touches[0].clientX - A.touches[1].clientX, + o = A.touches[0].clientY - A.touches[1].clientY, + n = Math.sqrt(i * i + o * o); + if (this._dollyEnd.set(0, n), + this._dollyDelta.subVectors(this._dollyEnd, this._dollyStart), + Math.abs(this._dollyDelta.y) > 3) + this._dollyDelta.y > 0 ? t = 1 / Math.pow(this.zoomSpeed, .5 * this._dollyDelta.y) : 0 > this._dollyDelta.y && (t = Math.pow(this.zoomSpeed, .5 * -this._dollyDelta.y)), + this._dollyStart.copy(this._dollyEnd), + e.touchDolly(.5 * (A.touches[0].clientX + A.touches[1].clientX), .5 * (A.touches[0].clientY + A.touches[1].clientY), t), + this.state = this.StateType.DOLLY + } + if (!jh.NoPan) { + var r = .5 * (A.touches[0].clientX + A.touches[1].clientX), + a = .5 * (A.touches[0].clientY + A.touches[1].clientY); + if (this._panEnd.set(r, a), + this._panDelta.subVectors(this._panEnd, this._panStart), + 3 > Math.abs(this._panDelta.x) && 3 > Math.abs(this._panDelta.y)) + return; + this._worldDimension = e.getWorldDimension(r, a), + e.panOnWorld(this._panStart, this._panEnd, this._pan, this._worldDimension), + e.adjustCameraForPan(this._pan), + this._panStart.copy(this._panEnd), + this.state = this.StateType.PAN + } + } + e.touchUpdate() + }, + Lg.prototype.processTouchend = function (A) { + this.timeId && clearTimeout(this.timeId), + this.longTapFlag && (this.longTapFlag = !1, + A.preventDefault()); + var e = this.cameraControl; + switch (A.touches.length) { + case 0: + this.state = this.StateType.NONE, + e.touchEndHandler(A); + break; + case 1: + if (jh.NoRotate) + return; + this._rotateStart.set(A.touches[0].clientX, A.touches[0].clientY), + this.state = this.StateType.ROTATE + } + }, + Lg.prototype.processHover = function (A) { + this.dragLook || (this.firstRotate && (this.firstRotate = !1, + this.rotateStart.set(A.clientX, A.clientY)), + this.rotateEnd.set(A.clientX, A.clientY), + this.rotateDelta.subVectors(this.rotateEnd, this.rotateStart), + this.rotateStart.copy(this.rotateEnd), + this._doRotate(this.rotateDelta)) + }, + Lg.prototype.processMouseWheel = function (A) { + var e = this.cameraControl; + if (A.preventDefault(), + A.stopPropagation(), + !jh.NoZoom) { + var t = 0; + A.wheelDelta ? t = A.wheelDelta : A.deltaY && (t = 40 * -A.deltaY), + Math.abs(t) > 720 && (t = t > 0 ? 720 : -720), + t *= this.wheelZoomFactor, + jh.ReverseWheelDirection && (t *= -1), + e.zoom(t, A.clientX, A.clientY), + e.delayHandle(), + this.dispatchEvent({ + type: Rc.ON_CONTROL_ZOOM + }) + } + }, + Lg.prototype.processKeyDown = function (A) { + if (!jh.NoKey && !A.altKey) { + var e = qc.NONE; + switch (A.key) { + case "0": + this.movementSpeed = this.defaultMovementSpeed; + break; + case "=": + case "+": + this.movementSpeed *= 1.1; + break; + case "-": + case "——": + this.movementSpeed *= .9, + this.minMovementSpeed > this.movementSpeed && (this.movementSpeed = this.minMovementSpeed); + break; + case "ArrowUp": + case "w": + case "W": + e = qc.FORWARD, + this.moveState.forward = 1; + break; + case "ArrowDown": + case "s": + case "S": + e = qc.BACK, + this.moveState.back = 1; + break; + case "ArrowLeft": + case "a": + case "A": + e = qc.LEFT, + this.moveState.left = 1; + break; + case "ArrowRight": + case "d": + case "D": + e = qc.RIGHT, + this.moveState.right = 1; + break; + case "q": + case "Q": + e = qc.UP, + this.moveState.up = 1; + break; + case "e": + case "E": + e = qc.DOWN, + this.moveState.down = 1; + break; + case "Shift": + this.shiftSpeedup || (this.movementSpeed += this.defaultMovementSpeed, + this.shiftSpeedup = !0); + break; + case "Tab": + return this.moveVector.set(0, 0, 0), + this.moveState.forward = 0, + this.moveState.back = 0, + this.moveState.left = 0, + this.moveState.right = 0, + this.moveState.up = 0, + void(this.moveState.down = 0) + } + this._updateMovement(), + this._updateRotation(), + e !== qc.NONE && this.dispatchEvent({ + type: Rc.ON_CONTROL_KEYDOWN, + event: A, + direction: e, + control: this.name + }) + } + }, + Lg.prototype.processKeyUp = function (A) { + if (!jh.NoKey) { + var e = qc.NONE; + switch (A.key) { + case "ArrowUp": + case "W": + case "w": + e = qc.FORWARD, + this.moveState.forward = 0; + break; + case "ArrowDown": + case "s": + case "S": + e = qc.BACK, + this.moveState.back = 0; + break; + case "ArrowLeft": + case "a": + case "A": + e = qc.LEFT, + this.moveState.left = 0; + break; + case "ArrowRight": + case "d": + case "D": + e = qc.RIGHT, + this.moveState.right = 0; + break; + case "q": + case "Q": + e = qc.UP, + this.moveState.up = 0; + break; + case "e": + case "E": + e = qc.DOWN, + this.moveState.down = 0; + break; + case "Shift": + this.shiftSpeedup && (this.movementSpeed -= this.defaultMovementSpeed, + this.shiftSpeedup = !1); + break; + default: + e = qc.NONE + } + this._updateMovement(), + this._updateRotation(), + e !== qc.NONE && this.dispatchEvent({ + type: Rc.ON_CONTROL_KEYUP, + event: A, + direction: e, + control: this.name + }) + } + }, + Lg.prototype.updateWalkMove = function () { + var A = this._clock.getDelta(), + e = this.cameraControl, + t = e.camera.position.z; + if (0 !== this.moveVector.x || 0 !== this.moveVector.y || 0 !== this.moveVector.z || 0 !== this.rotationVector.x || 0 !== this.rotationVector.y || 0 !== this.rotationVector.z || 0 !== this.zoomDelta) { + var i = this.movementSpeed * jh.WalkSpeedRate * A; + if (!0 === vc.WalkingWithGravity && (this.moveVector.z = 0, + e.computeManHeight(), + e.computeGravity()), + e.dirtyCamera(!0), + 0 !== this.zoomDelta) + e.zoomCameraForWalk(1 + this.zoomDelta * A), + this.zoomDelta = 0; + 0 !== i && e.translateCameraForWalk(this.moveVector, i), + e.rotateCameraForWalk(this.rotationVector, this.dragLook ? 1 : 2), + e.flyOnWorld(!1), + this.moveState.pitchUp = 0, + this.moveState.pitchDown = 0, + this.moveState.yawLeft = 0, + this.moveState.yawRight = 0, + this.moveState.rollLeft = 0, + this.moveState.rollRight = 0, + t !== e.camera.position.z && e.viewer.modelManager.dispatchEvent({ + type: Rc.ON_CAMERA_HEIGHT_CHANGED, + cameraPosition: e.camera.position.clone() + }) + } + }, + Lg.prototype.onEnter = function () { + var A = this.cameraControl.getCamera(); + A.isPerspective || (console.log("Current camera is Orthographic"), + A.toPerspective()), + this._start() + }, + Lg.prototype.onExit = function () { + this._stop() + }, + Lg.prototype.rotateTo = function (A) { + this._doRotate(A) + }, + Lg.prototype.moveTo = function (A, e, t) { + if (void 0 === t && (t = !0), + void 0 === e && (e = 1), + t) + switch (A) { + case qc.FORWARD: + this.moveState.forward = e; + break; + case qc.BACK: + this.moveState.back = e; + break; + case qc.LEFT: + this.moveState.left = e; + break; + case qc.RIGHT: + this.moveState.right = e; + break; + case qc.UP: + this.moveState.up = e; + break; + case qc.DOWN: + this.moveState.down = e + } + else + switch (A) { + case qc.FORWARD: + this.moveState.forward = 0; + break; + case qc.BACK: + this.moveState.back = 0; + break; + case qc.LEFT: + this.moveState.left = 0; + break; + case qc.RIGHT: + this.moveState.right = 0; + break; + case qc.UP: + this.moveState.up = 0; + break; + case qc.DOWN: + this.moveState.down = 0 + } + this._updateMovement() + }, + Lg.prototype.setHeightLocked = function (A) { + this.lockHeightEnabled && this.isLockHeight !== A && (this.isLockHeight = A) + }, + Lg.prototype.setDragLook = function (A) { + this.dragLook !== A && (this.firstRotate = !0, + this.dragLook = A) + }, + Lg.prototype.processPointerLockEnter = function () { + this.pointerLock = !0 + }, + Lg.prototype.processPointerLockExit = function () { + this.pointerLock = !1 + }, + Lg.prototype.processMovement = function (A) { + this.rotateDelta.set(A.movementX || A.mozMovementX || A.webkitMovementX || 0, A.movementY || A.mozMovementY || A.webkitMovementY || 0), + this._doRotate(this.rotateDelta) + }; + var Ng = function (A) { + Qg.call(this, Gc.ZOOM, A), + this.mouseButtons = { + ZOOM: t.LEFT, + PAN2: t.MIDDLE, + PAN: t.RIGHT + } + }; + (Ng.prototype = Object.create(Qg.prototype)).constructor = Ng; + var Og = function () { + this.control = null, + this.controls = {}, + this.tools = [], + this.domElement = null, + this.enabled = !0, + this.isUpdateRenderList = !0; + var A = !1, + e = this; + + function t(t) { + if (e.enabled) { + for (var i = e.tools, o = i.length - 1; o >= 0; o -= 1) + if (i[o].onEvent(t)) { + switch (t.type) { + case "mouseup": + A = !1 + } + return + } + switch (t.type) { + case "touchmove": + e.control.processTouchmove(t); + break; + case "touchstart": + e.control.processTouchstart(t); + break; + case "touchend": + e.control.processTouchend(t); + break; + case "keydown": + e.control.processKeyDown(t); + break; + case "keyup": + e.control.processKeyUp(t); + break; + case "wheel": + case "mousewheel": + case "DOMMouseScroll": + e.cameraChange = !0, + e.control.processMouseWheel(t); + break; + case "mousedown": + ! function (t) { + e.setFocuse(), + A = !0, + e.isUpdateRenderList = !1, + e.control ? e.control.processMouseDown(t) : Bh.warn("control is null") + }(t); + break; + case "mousemove": + ! function (t) { + e.pointerLock ? e.control.processMovement(t) : A ? (e.isUpdateRenderList = !1, + e.cameraChange = !0, + e.control.processMouseMove(t)) : e.control.processHover(t) + }(t); + break; + case "mouseup": + ! function (t) { + e.isUpdateRenderList = !0, + A && (e.control.processMouseUp(t), + A = !1) + }(t); + break; + case "dblclick": + e.control.processMouseDoubleClick(t) + } + } else + e.cameraChange = !1 + } + + function i(A) { + A.preventDefault() + } + + function o(A) { + document.pointerLockElement === e.domElement || document.mozPointerLockElement === e.domElement || document.webkitPointerLockElement === e.domElement ? (e.pointerLock = !0, + e.control.processPointerLockEnter(A)) : (e.pointerLock = !1, + e.control.processPointerLockExit(A), + e.domElement.focus(), + e.control.dispatchEvent({ + type: Rc.ON_POINTERLOCK_EXIST, + name: e.control.getName() + })) + } + + function n(A) { + e.pointerLock = !1, + e.control.processPointerLockExit(A), + e.control.dispatchEvent({ + type: Rc.ON_POINTERLOCK_EXIST, + name: e.control.getName() + }) + } + this.setFocuse = function () { + if (e.domElement) { + var A = e.domElement.querySelector(".main-canvas"); + A && A.focus && A.focus() + } + }, + this.setFocus = this.setFocuse, + this.getCameraControl = function () { + return this.cameraControl + }, + this.registerDomEventListeners = function (A) { + this.domElement = A, + A.addEventListener("contextmenu", i, !1), + A.addEventListener("mousedown", t, !1), + A.addEventListener("mousewheel", t, !1), + A.addEventListener("DOMMouseScroll", t, !1), + A.addEventListener("wheel", t, !1), + A.addEventListener("dblclick", t, !1), + window.addEventListener("mousemove", t, !1), + window.addEventListener("mouseup", t, !1), + A.addEventListener("touchstart", t, !1), + A.addEventListener("touchend", t, !1), + A.addEventListener("touchmove", t, !1), + window.addEventListener("touchmove", (function (A) {}), !1), + A.addEventListener("keydown", t, !1), + window.addEventListener("keyup", t, !1), + document.addEventListener("pointerlockchange", o, !1), + document.addEventListener("mozpointerlockchange", o, !1), + document.addEventListener("webkitpointerlockchange", o, !1), + document.addEventListener("pointerlockerror", n, !1), + document.addEventListener("mozpointerlockerror", n, !1), + document.addEventListener("webkitpointerlockerror", n, !1), + this.setFocuse() + }, + this.unregisterDomEventListeners = function (A) { + A.removeEventListener("contextmenu", i, !1), + A.removeEventListener("mousedown", t, !1), + A.removeEventListener("mousewheel", t, !1), + A.removeEventListener("DOMMouseScroll", t, !1), + A.removeEventListener("dblclick", t, !1), + window.removeEventListener("mousemove", t, !1), + window.removeEventListener("mouseup", t, !1), + A.removeEventListener("touchstart", t, !1), + A.removeEventListener("touchend", t, !1), + A.removeEventListener("touchmove", t, !1), + A.removeEventListener("keydown", t, !1), + window.removeEventListener("keyup", t, !1), + document.removeEventListener("pointerlockchange", o, !1), + document.removeEventListener("mozpointerlockchange", o, !1), + document.removeEventListener("webkitpointerlockchange", o, !1), + document.removeEventListener("pointerlockerror", n, !1), + document.removeEventListener("mozpointerlockerror", n, !1), + document.removeEventListener("webkitpointerlockerror", n, !1) + } + }; + Og.prototype = { + constructor: Og, + destroy: function () { + for (var A in this.control = null, + this.controls) { + this.controls[A].destroy() + } + this.controls = {}; + for (var e = 0, t = this.tools.length; t > e; e += 1) + this.tools[e].destroy(); + this.tools = null, + this.unregisterDomEventListeners(this.domElement), + this.domElement = null + }, + getCurrentControlName: function () { + return this.control ? this.control.name : "" + }, + _getControlByName: function (A, e) { + var t = this.controls[e]; + if (t) + return t; + var i = Gc; + this.viewer = A, + this.cameraControl = A.cameraControl; + var o = A.cameraControl; + switch (e) { + case i.ORBIT: + t = new Rg(o); + break; + case i.PICK: + t = new kg(o); + break; + case i.PAN: + t = new Tg(o); + break; + case i.FLY: + t = new Kg(o); + break; + case i.WALK: + t = new Lg(o); + break; + case i.ZOOM: + t = new Ng(o); + break; + default: + t = null, + Bh.error("invalid control name") + } + return t && (t.name = e, + this.controls[e] = t), + t + }, + getCurrentControlMode: function () { + return this.control + }, + getCurrentControl: function () { + return this.control + }, + setControlMode: function (A, e) { + var t = this._getControlByName(A, e); + t && this.control !== t && (null !== this.control && (this.control.dispatchEvent({ + type: Rc.ON_CONTROL_EXIST, + name: this.control.getName() + }), + this.control.onExit()), + this.control = t, + this.control.onEnter(), + this.control.dispatchEvent({ + type: Rc.ON_CONTROL_ENTER, + name: this.control.getName() + })) + }, + getToolByName: function (A) { + for (var e = this.tools.length, t = 0; e > t; t += 1) + if (this.tools[t].name === A) + return this.tools[t] + }, + enableTool: function (A, e) { + for (var t = Pc, i = this.tools, o = 0, n = i.length; n > o; o += 1) + if (i[o].name === e) + return; + var r = null; + switch (e) { + case t.PICK_BY_RECT: + r = new bg(A); + break; + case t.ZOOM_BY_RECT: + r = new Ug(A); + break; + case t.CLIP_BY_BOX: + r = new vp(A); + break; + case t.CLIP_FILL: + r = new Sp(A); + break; + case t.PICK_BY_MEASURE: + r = new Eg(A); + break; + case t.COMPONENT_TRANSFORM: + r = new Ip(A.getScene(), A.camera, A.domElement) + } + r && i.push(r) + }, + disableTool: function (A) { + for (var e = this.tools, t = 0, i = e.length; i > t; t += 1) + if (e[t].name === A) { + e[t].onExit(), + this.dispatchEvent({ + type: Rc.ON_CONTROL_EXIST, + name: A + }), + e.splice(t, 1); + break + } + }, + setInteractiveState: function (A) { + this.enabled = A + }, + requestPointerLock: function () { + this.control instanceof Lg && (this.domElement.requestPointerLock = this.domElement.requestPointerLock || this.domElement.mozRequestPointerLock || this.domElement.webkitRequestPointerLock, + this.domElement.requestPointerLock()) + } + }, + Object.assign(Og.prototype, Ld.prototype); + var Vg = function () { + this.className = "FilterAction" + }; + Vg.prototype.getClassName = function () { + return this.className + }, + Vg.prototype.applyFilter = function (A) {}; + var Gg = function () { + Vg.call(this), + this.className = "IdsFilterAction", + this.ids = [] + }; + (Gg.prototype = Object.create(Vg.prototype)).arrayToMap = function (A) { + for (var e = {}, t = 0; A.length > t; t += 1) { + var i = A[t]; + e[i] = i + } + return e + }, + Gg.prototype.constructor = Gg, + Gg.prototype.setIds = function (A) { + this.ids = A + }; + var Pg = function (A, e) { + Gg.call(this), + this.className = "VisibleIdsFA", + this.flag = A, + this.isVisible = e + }; + (Pg.prototype = Object.create(Gg.prototype)).constructor = Pg, + Pg.prototype.applyFilter = function (A) { + console.log('applyFilter :>> '); + Array.isArray(this.ids) ? (A.setVisible(this.ids, this.isVisible, this.flag), + A.calculateVisibleComponentsBbox()) : Bh.warn("Ids should be type of array.") + }; + var qg = function (A, e) { + Gg.call(this), + this.className = "OverrideIdsFA", + this.flag = A, + this.material = e + }; + (qg.prototype = Object.create(Gg.prototype)).constructor = qg, + qg.prototype.applyFilter = function (A) { + console.log('applyFilter :sss>> '); + Array.isArray(this.ids) ? A.setMaterial(this.ids, this.material, this.flag) : Bh.warn("Ids should be type of array.") + }; + var jg = function (A, e) { + Gg.call(this), + this.className = "WireframeIdsFA", + this.flag = A, + this.material = e + }; + (jg.prototype = Object.create(Gg.prototype)).constructor = jg, + jg.prototype.applyFilter = function (A) { + Array.isArray(this.ids) ? A.setMaterial(this.ids, this.material, this.flag) : Bh.warn("Ids should be type of array.") + }; + var Hg = function (A) { + Gg.call(this), + this.className = "IsolateIdsFA", + this.isolateHide = A + }; + (Hg.prototype = Object.create(Gg.prototype)).constructor = Hg, + Hg.prototype.applyFilter = function (A) { + console.log('applyFilter :>dddd> '); + Array.isArray(this.ids) ? (A.clearIsolates(), + this.isolateHide ? (A.setIsolateHide(this.ids, !0, !1), + A.calculateVisibleComponentsBbox()) : A.setIsolateTransparent(this.ids, !0, !1)) : Bh.warn("Ids should be type of array.") + }; + var Yg = function (A, e) { + Gg.call(this), + this.className = "TransparentIdsFA", + this.flag = A, + this.isOpaque = e + }; + (Yg.prototype = Object.create(Gg.prototype)).constructor = Yg, + Yg.prototype.applyFilter = function (A) { + console.log('applyFilter :>dddd> '); + Array.isArray(this.ids) ? A.setTransparent(this.ids, !this.isOpaque, this.flag) : Bh.warn("Ids should be type of array.") + }; + var Wg = function () { + Vg.call(this), + this.className = "ConditionFilterAction", + this.conditions = null + }; + (Wg.prototype = Object.create(Vg.prototype)).constructor = Wg; + var Jg = function (A, e) { + Wg.call(this), + this.className = "VisibleConditionFA", + this.flag = A, + this.isVisible = e + }; + (Jg.prototype = Object.create(Wg.prototype)).constructor = Jg, + Jg.prototype.applyFilter = function (A) { + console.log('applyFilter :>sdfdf> '); + var e = this; + Array.isArray(this.conditions) ? (A.matchConditions(this.conditions, (function (t, i) { + e.flag === i && (A.setVisible(t, e.isVisible), + t = null) + })), + A.calculateVisibleComponentsBbox()) : Bh.warn("Conditions should be type of array.") + }; + var zg = function (A, e) { + Wg.call(this), + this.className = "OverrideConditionFA", + this.flag = A, + this.material = e + }; + (zg.prototype = Object.create(Wg.prototype)).constructor = zg, + zg.prototype.applyFilter = function (A, e) { + console.log('applyFilter :>ddddddd> '); + var t = this; + Array.isArray(this.conditions) ? A.matchConditions(this.conditions, (function (e, i) { + t.flag === i && (A.setMaterial(e, t.material), + e = null) + })) : Bh.warn("Conditions should be type of array.") + }; + var Zg = function (A, e) { + Wg.call(this), + this.className = "TransparentConditionFA", + this.flag = A, + this.isOpaque = e + }; + (Zg.prototype = Object.create(Wg.prototype)).constructor = Zg, + Zg.prototype.applyFilter = function (A) { + console.log('applyFilter :>erqwqer> '); + var e = this; + Array.isArray(this.conditions) ? A.matchConditions(this.conditions, (function (t, i) { + e.flag === i && (A.setTransparent(t, !e.isOpaque), + t = null) + })) : Bh.warn("Conditions should be type of array.") + }; + var Xg = function (A) { + Wg.call(this), + this.className = "IsolateConditionFA", + this.isolateHide = A + }; + (Xg.prototype = Object.create(Wg.prototype)).constructor = Xg, + Xg.prototype.applyFilter = function (A) { + console.log('applyFilter :dfasf>> '); + A.clearIsolates(); + var e = this.isolateHide; + Array.isArray(this.conditions) ? A.matchConditions(this.conditions, (function (t, i) { + !0 !== i ? (e ? (A.setIsolateHide(t, !i), + A.calculateVisibleComponentsBbox()) : A.setIsolateTransparent(t, !i), + t = null) : t = null + })) : Bh.warn("Conditions should be type of array.") + }; + var _g = function (A) { + this._activeFilterList = [], + this._filterResultModes = {}, + this._defaultReturnValue = A, + this._filterPriority = null + }; + _g.prototype.setFilterMode = function (A) { + this._filterResultModes = A + }, + _g.prototype.setFilterPriority = function (A) { + this._filterPriority = A + }, + _g.prototype.addBaseFilter = function (A) { + var e = this._activeFilterList, + t = e.indexOf(A); + if (null === this._filterPriority) + - + 1 === t ? e.push(A) : t !== e.length - 1 && (e.splice(t, 1), + e.push(A)); + else if (0 === e.length) + e.push(A); + else { + -1 !== t && t !== e.length - 1 && e.splice(t, 1); + for (var i = this._filterPriority[A.getType()], o = 0, n = e.length; n > o; o += 1) + if (this._filterPriority[e[o].getType()] > i) { + e.splice(o, 0, A); + break + } + o === n && e.push(A) + } + }, + _g.prototype.removeBaseFilter = function (A) { + var e = this._activeFilterList.indexOf(A); - + 1 !== e && this._activeFilterList.splice(e, 1) + }, + _g.prototype.isEmpty = function () { + return 0 === this._activeFilterList.length + }, + _g.prototype.hasFilterNotIn = function (A) { + for (var e = this._activeFilterList, t = e.length - 1; t >= 0; t -= 1) { + if (void 0 === A._filterResultModes[e[t].getType()]) + return !0 + } + return !1 + }, + _g.prototype.apply = function (A) { + for (var e = Jc, t = null, i = this._activeFilterList.length - 1; i >= 0; i -= 1) + switch (this._filterResultModes[(t = this._activeFilterList[i]).getType()]) { + case e.MATCH_RETURN_TRUE: + if (t.match(A)) + return !0; + break; + case e.MATCH_RETURN_FALSE: + if (t.match(A)) + return !1; + break; + case e.NOMATCH_RETURN_TRUE: + if (!t.match(A)) + return !0; + break; + case e.NOMATCH_RETURN_FALSE: + if (!t.match(A)) + return !1; + break; + default: + return !1 + } + return this._defaultReturnValue + }, + _g.prototype.getApplyFilterId = function (A) { + for (var e = Jc, t = null, i = this._activeFilterList.length - 1; i >= 0; i -= 1) + switch (this._filterResultModes[(t = this._activeFilterList[i]).getType()]) { + case e.MATCH_RETURN_TRUE: + case e.MATCH_RETURN_FALSE: + if (t.match(A)) + return t.getType(); + break; + case e.NOMATCH_RETURN_TRUE: + case e.NOMATCH_RETURN_FALSE: + if (!t.match(A)) + return t.getType(); + break; + default: + return -1 + } + return -1 + }, + Math.log2 = Math.log2 || function (A) { + return Math.log(A) / Math.LN2 + }, + "function" != typeof String.prototype.startsWith && (String.prototype.startsWith = function (A) { + return this.slice(0, A.length) === A + }), + Array.prototype.remove || Object.defineProperty(Array.prototype, "remove", { + enumerable: !1, + value: function (A) { + var e = this.indexOf(A); + e > -1 && this.splice(e, 1) + } + }), + "undefined" != typeof window && mh.isIE11() && function () { + function A(A, e) { + e = e || { + bubbles: !1, + cancelable: !1, + detail: void 0 + }; + var t = document.createEvent("CustomEvent"); + return t.initCustomEvent(A, e.bubbles, e.cancelable, e.detail), + t + } + A.prototype = window.CustomEvent.prototype, + window.CustomEvent = A + }(), + "function" != typeof String.prototype.startsWith && (String.prototype.startsWith = function (A) { + return this.slice(0, A.length) === A + }), + "function" != typeof String.prototype.endsWith && (String.prototype.endsWith = function (A) { + return -1 !== this.indexOf(A, this.length - A.length) + }), + "undefined" != typeof window && (window.BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder || window.MSBlobBuilder), + Number.isInteger = Number.isInteger || function (A) { + return "number" == typeof A && isFinite(A) && Math.floor(A) === A + }, + String.prototype.repeat = String.prototype.repeat || function (A) { + if (1 > A) + return ""; + for (var e = "", t = this.valueOf(); A > 1;) + 1 & A && (e += t), + A >>= 1, + t += t; + return e + t + }, + Array.prototype.fill || Object.defineProperty(Array.prototype, "fill", { + enumerable: !1, + value: function (A, e, t) { + t = void 0 === t ? this.length : t; + for (var i = e = void 0 === e ? 0 : e; t > i; i += 1) + this[i] = A + } + }), + Array.prototype.find || Object.defineProperty(Array.prototype, "find", { + enumerable: !1, + value: function (A, e) { + for (var t = this.length, i = 0; t > i; i += 1) { + var o = this[i]; + if (A.call(e, o, i, this)) + return o + } + } + }), + Array.prototype.hasValue || Object.defineProperty(Array.prototype, "hasValue", { + enumerable: !1, + value: function (A) { + return this.indexOf(A) > -1 + } + }), + "function" != typeof Object.assign && Object.defineProperty(Object, "assign", { + value: function (A, e) { + if (null == A) + throw new TypeError("Cannot convert undefined or null to object"); + for (var t = Object(A), i = 1; arguments.length > i; i += 1) { + var o = arguments[i]; + if (null != o) + for (var n in o) + Object.prototype.hasOwnProperty.call(o, n) && (t[n] = o[n]) + } + return t + }, + writable: !0, + configurable: !0 + }), + ArrayBuffer.prototype.slice || (ArrayBuffer.prototype.slice = function (A, e) { + if (!e || e > this.byteLength ? e = this.byteLength : 0 > e && 0 > (e = this.byteLength + e) && (e = 0), + 0 > A && 0 > (A = this.byteLength + A) && (A = 0), + A >= e) + return new ArrayBuffer; + for (var t = e - A, i = new Uint8Array(this, A, t), o = new Uint8Array(t), n = 0; t > n; n += 1) + o[n] = i[n]; + return o.buffer + }), + Float32Array.prototype.slice || (Float32Array.prototype.slice = Float32Array.prototype.subarray), + Uint32Array.prototype.slice || (Uint32Array.prototype.slice = Uint32Array.prototype.subarray), + Int32Array.prototype.slice || (Int32Array.prototype.slice = Int32Array.prototype.subarray), + Int16Array.prototype.slice || (Int16Array.prototype.slice = Int16Array.prototype.subarray); + var $g, Au = "function" == typeof Symbol && "symbol" === lc(Symbol.iterator) ? function (A) { + return lc(A) + } : + function (A) { + return A && "function" == typeof Symbol && A.constructor === Symbol && A !== Symbol.prototype ? "symbol" : lc(A) + }, + eu = function () { + function A(A, e) { + for (var t = 0; e.length > t; t += 1) { + var i = e[t]; + i.enumerable = i.enumerable || !1, + i.configurable = !0, + "value" in i && (i.writable = !0), + Object.defineProperty(A, i.key, i) + } + } + return function (e, t, i) { + return t && A(e.prototype, t), + i && A(e, i), + e + } + }(); + HTMLElement.prototype.tap = function (A) { + var e = 0; + this.addEventListener("touchstart", (function (A) { + e = Date.now() + })), + this.addEventListener("touchend", (function (t) { + 200 > Date.now() - e && A(t) + })) + }, + (Boolean(window.ActiveXObject) || "ActiveXObject" in window) && (HTMLElement.prototype.remove = function () { + var A = this.parentNode || this.parentElement; + A && A.removeChild(this) + }, + window.Element && (($g = Element.prototype).matches = $g.matches || $g.matchesSelector || $g.webkitMatchesSelector || $g.msMatchesSelector || function (A) { + for (var e = (this.parentNode || this.document).querySelectorAll(A), t = -1; e[t += 1] && e[t] !== this;) + ; + return Boolean(e[t]) + }), + window.Element && function (A) { + A.closest = A.closest || function (A) { + for (var e = this; e.matches && !e.matches(A);) + e = e.parentNode; + return e.matches ? e : null + } + }(Element.prototype)), + SVGElement.prototype.getClass = HTMLElement.prototype.getClass = function (A) { + return this.getAttribute("class") + }, + SVGElement.prototype.hasClass = HTMLElement.prototype.hasClass = function (A) { + var e = this.getClass(); + return !!e && (e && e.split(" ")).indexOf(A) > -1 + }, + SVGElement.prototype.addClass = HTMLElement.prototype.addClass = function (A) { + var e = this.getClass(), + t = e && e.split(" "); + return e ? -1 === t.indexOf(A) && (t.push(A), + e = t.join(" "), + this.setAttribute("class", String(e))) : this.setAttribute("class", String(A)), + this + }, + SVGElement.prototype.removeClass = HTMLElement.prototype.removeClass = function (A) { + if (!this.hasClass(A)) + return this; + var e = this.getClass().replace(A, "").trim(); + return e ? this.setAttribute("class", String(e)) : this.removeAttribute("class"), + this + }, + SVGElement.prototype.toggleClass = HTMLElement.prototype.toggleClass = function (A, e) { + this.getClass(); + var t = this.hasClass(A); + return null != e ? (e && !t && this.addClass(A), + e || this.removeClass(A)) : t ? this.removeClass(A) : this.addClass(A), + !t + }, + Array.prototype.getObjectByAttribute || Object.defineProperty(Array.prototype, "getObjectByAttribute", { + enumerable: !1, + value: function (A, e) { + for (var t = this.length, i = 0; t > i; i += 1) + if (this[i][A] === e) + return this[i]; + return !1 + } + }), + Array.prototype.removeObjectByAttribute || Object.defineProperty(Array.prototype, "removeObjectByAttribute", { + enumerable: !1, + value: function (A, e) { + for (var t = this, i = t.length, o = 0; i > o; o += 1) + if (t[o][A] === e) + return t = t.splice(o, 1); + return !1 + } + }), + Array.prototype.getAllObjectByAttribute || Object.defineProperty(Array.prototype, "getAllObjectByAttribute", { + enumerable: !1, + value: function (A, e) { + for (var t = this.length, i = 0, o = []; t > i; i += 1) + this[i][A] === e && o.push(this[i]); + return o + } + }), + Array.prototype.removeByValue || Object.defineProperty(Array.prototype, "removeByValue", { + enumerable: !1, + value: function (A) { + for (var e = this.length - 1; e >= 0; e -= 1) + this[e] === A && this.splice(e, 1); + return this + } + }), + Array.prototype.insert || Object.defineProperty(Array.prototype, "insert", { + enumerable: !1, + value: function (A, e) { + return this.splice(A, 0, e), + this + } + }), + SVGElement.prototype.setCss = HTMLElement.prototype.setCss = function (A) { + if (A) + for (var e in A) + this.style[e] = A[e] + }, + SVGElement.prototype.getCss = HTMLElement.prototype.getCss = function () { + return this.style + }; + var tu = function (A, e) { + this._type = A, + this._name = e, + this._enabled = !1, + this._items = {}, + this._relatedCompoundFilterList = [] + }; + tu.prototype.getType = function () { + return this._type + }, + tu.prototype.getName = function () { + return this._name + }, + tu.prototype.get = function () { + return this._items + }, + tu.prototype.getAll = function () { + return this._items + }, + tu.prototype.clearAll = function () { + this._items = {}, + this._enabled && (this._enabled = !1, + this.enableStateChanged()) + }, + tu.prototype.clear = function () { + this.clearAll() + }, + tu.prototype.isEmpty = function () { + return !this._enabled + }, + tu.prototype.forceEnable = function () { + this._enabled || (this._enabled = !0, + this.enableStateChanged()) + }, + tu.prototype.setByData = function (A) { + ! function (A) { + if (null === A) + return !0; + if ("object" !== (void 0 === A ? "undefined" : Au(A))) + return !0; + for (var e in A) + if (A.hasOwnProperty(e)) + return !1; + return !0 + }(A) ? (this._items = A, + this._enabled || (this._enabled = !0, + this.enableStateChanged())) : (this._items = {}, + this._enabled && (this._enabled = !1, + this.enableStateChanged())) + }, + tu.prototype.match = function (A) { + return !1 + }, + tu.prototype.registerToCompoundFilter = function (A) { + this._relatedCompoundFilterList.push(A) + }, + tu.prototype.enableStateChanged = function () { + for (var A = 0, e = this._relatedCompoundFilterList.length; e > A; A += 1) + this._enabled ? this._relatedCompoundFilterList[A].addBaseFilter(this) : this._relatedCompoundFilterList[A].removeBaseFilter(this) + }; + var iu = function (A, e) { + tu.call(this, A, e) + }; + (iu.prototype = Object.create(tu.prototype)).constructor = iu, + iu.prototype.match = function (A) { + var e = A.userData; + return !e || function (A, e) { + for (var t = !1, i = 0, o = A.length; o > i; i += 1) { + t = !0; + var n = A[i]; + for (var r in n) { + if (!Array.isArray(n[r]) && e[r] !== n[r]) { + t = !1; + break + } + if (Array.isArray(n[r]) && -1 === n[r].indexOf(e[r])) { + t = !1; + break + } + } + if (t) + return !0 + } + return !1 + }(this._items, e) + }; + var ou = function (A, e) { + tu.call(this, A, e) + }; + (ou.prototype = Object.create(tu.prototype)).constructor = ou, + ou.prototype.add = function (A) { + var e = this._items; + if (A && A.length > 0) { + for (var t = 0, i = A.length; i > t; t += 1) + e[A[t]] = !0; + this._enabled || (this._enabled = !0, + this.enableStateChanged()) + } + }, + ou.prototype.remove = function (A) { + var e = this._items; + if (A && A.length > 0) { + for (var t = 0, i = A.length; i > t; t += 1) { + var o = A[t]; + e.hasOwnProperty(o) && delete e[o] + } + 0 === Object.keys(e).length && this._enabled && (this._enabled = !1, + this.enableStateChanged()) + } + }; + var nu = function (A, e) { + ou.call(this, A, e) + }; + (nu.prototype = Object.create(ou.prototype)).constructor = nu, + nu.prototype.match = function (A) { + var e = A.name; + if (e) { + var t = e.indexOf("."); + if (-1 !== t) { + var i = e.substring(0, t); + return !!this._items[i] + } + } + var o = A.userData; + if (o && (i = o.sceneId)) + return !!this._items[i]; + return !1 + }; + var ru = function (A, e) { + ou.call(this, A, e) + }; + (ru.prototype = Object.create(ou.prototype)).constructor = ru, + ru.prototype.match = function (A) { + return !!this._items[A.name] + }; + var au = function () { + this.defaultWireframeColor = { + color: new LA(0, 0, 0), + opacity: .4 + }, + this.wireframeMaterial = new jA(this.defaultWireframeColor), + !1 === vc.TranslucentDepthDisabled && (this.wireframeMaterial.transparent = !0), + this.instanceWireframeMaterial = Kd.createInstanceMaterial(Kd.getMaterialParameters(this.wireframeMaterial)), + !1 === vc.TranslucentDepthDisabled && (this.instanceWireframeMaterial.transparent = !0), + this.wireframeGeometryMap = {} + }; + au.prototype.destroy = function () { + this.wireframeMaterial.dispose(), + this.wireframeMaterial = null, + this.instanceWireframeMaterial.destroy(), + this.instanceWireframeMaterial = null, + this.wireframeGeometryMap = null, + this.defaultWireframeColor.color = null, + this.defaultWireframeColor = null + }, + au.prototype.setWireframeColor = function (A, e) { + this.wireframeMaterial.color = A, + this.wireframeMaterial.opacity = e, + this.wireframeMaterial.transparent = 1 !== e, + this.instanceWireframeMaterial.color = A, + this.instanceWireframeMaterial.opacity = e, + this.instanceWireframeMaterial.transparent = 1 !== e + }, + au.prototype.getWireframeColor = function () { + var A = this.wireframeMaterial.color.clone(); + return A.opacity = this.wireframeMaterial.opacity, + A + }, + au.prototype.restoreWireframeColor = function () { + var A = this.defaultWireframeColor; + this.setWireframeColor(A.color, A.opacity) + }; + var su = function () { + new au; + var A = [{ + name: "scene", + param: { + name: "scene", + color: 8947848, + opacity: .4, + transparent: !0, + side: 2 + } + }, { + name: "darkRed", + param: { + name: "darkRed", + color: 10496040, + opacity: 1, + transparent: !1, + side: 2 + } + }, { + name: "lightBlue", + param: { + name: "lightBlue", + color: 1275840, + opacity: 1, + transparent: !1, + side: 2 + } + }, { + name: "black", + param: { + name: "black", + color: 0, + opacity: .3, + transparent: !0, + side: 2 + } + }, { + name: "add", + param: { + name: "add", + color: 65280, + opacity: 1, + transparent: !0, + side: 2 + } + }, { + name: "delete", + param: { + name: "delete", + color: 16711680, + opacity: .5, + transparent: !0, + side: 2 + } + }, { + name: "beforeEdit", + param: { + name: "beforeEdit", + color: 16432389, + opacity: .5, + transparent: !0, + side: 2 + } + }, { + name: "afterEdit", + param: { + name: "afterEdit", + color: 16432389, + opacity: 1, + transparent: !0, + side: 2 + } + }], + e = {}; + e.selection = Kd.createHighlightMaterial(), + e.selection.name = "selection"; + for (var t = 0, i = A.length; i > t; t += 1) { + var o = A[t], + n = o.name; + e[n] = Kd.createStandardMaterial(o.param), + e[n].createByBos = !0 + } + e.red = e.delete, + e.green = e.add, + e.yellow = e.beforeEdit, + e.blue = e.selection; + var r = { + color: 8947848, + opacity: .2, + transparent: !0, + side: 2 + }, + a = Kd.createStandardMaterial(r); + a.name = "isolate"; + var s = { + color: 8947848, + opacity: .2, + transparent: !0, + side: 2 + }, + l = Kd.createStandardMaterial(s); + l.name = "looming"; + var c = { + color: 0, + opacity: 1, + transparent: !1, + wireframe: !0, + side: 2 + }, + h = Kd.createStandardMaterial(c); + h.name = "wireframe", + e.wireframe = h; + var d = { + color: 15293, + side: 2 + }, + p = Kd.createStandardMaterial(d); + for (var g in p.name = "selected", + this.getDefaultMaterialName = function () { + return "lightBlue" + }, + this.get = function (A) { + return e[A] + }, + this.getAll = function () { + return e + }, + this.add = function (A) { + var t, i = null, + o = {}; + return A && A.hasOwnProperty("color") && (o.color = A.color, + o.side = 2, + A.hasOwnProperty("opacity") && (o.opacity = A.opacity, + o.transparent = 1 !== A.opacity)), + t = this._getMaterialName(A), + (i = e[t]) || (o.name = t, + i = Kd.createStandardMaterial(o), + e[t] = i, + e[t].createByBos = !0), + t + }, + this.remove = function (A) { + var t; + t = this._getMaterialName(A), + e[t] && delete e[t] + }, + this.has = function (A) { + return Boolean(e[A]) + }, + this.getMaterialNameByColor = function (A) { + var t; + return t = this._getMaterialName(A), + e[t] ? t : this.add(A) + }, + this.getMaterialNameByWireframe = function (A) { + var t; + return (t = this._getMaterialName(A)) && !e[t] ? this.add(A) : t + }, + this.addOverrideMaterial = function (A) { + if (A) { + var t = A.name; + e[t] || (e[t] = A) + } + }, + this.updateOverrideMaterial = function (A) { + A && (e[A.name] = A) + }, + this.getMaterialParamsFromName = function (A) { + var e = {}, + t = A.split("_"); + return "mat" === t[0] ? (e.color = parseInt(t[1], 0), + e.opacity = 1) : (e.color = parseInt(t[0], 0), + e.opacity = parseFloat(t[1], 0)), + e + }, + this._getMaterialName = function (A) { + var e = null; + return A && A.hasOwnProperty("color") ? e = A.hasOwnProperty("opacity") ? A.color + "_" + A.opacity : "mat_" + A.color : A && A.hasOwnProperty("wireframe") ? A.wireframe && (e = "wireframe") : e = "mat_" + A, + e + }, + this.setWireframeMaterial = function (A) { + e.wireframe.color.setHex(void 0 !== A.color ? A.color : c.color), + e.wireframe.opacity = void 0 !== A.opacity ? A.opacity : c.opacity, + e.wireframe.transparent = void 0 !== A.transparent ? A.transparent : c.transparent, + e.wireframe.side = void 0 !== A.side ? A.side : c.side, + e.wireframe.needsUpdate = !0 + }, + this.getWireframeMaterial = function () { + return e.wireframe + }, + this.setFrozonMaterial = function (A) { + l.color.setHex(void 0 !== A.color ? A.color : s.color), + l.opacity = void 0 !== A.opacity ? A.opacity : s.opacity, + l.transparent = void 0 !== A.transparent ? A.transparent : s.transparent, + l.side = void 0 !== A.side ? A.side : s.side, + l.needsUpdate = !0 + }, + this.getFrozonMaterial = function () { + return l + }, + this.setSelectedMaterial = function (A) { + p.color.setHex(void 0 !== A.color ? A.color : d.color), + p.opacity = void 0 !== A.opacity ? A.opacity : d.opacity, + p.transparent = void 0 !== A.transparent ? A.transparent : d.transparent, + p.side = void 0 !== A.side ? A.side : d.side, + p.needsUpdate = !0 + }, + this.getSelectedMaterial = function () { + return p + }, + this.setIsolateMaterial = function (A) { + a.color.setHex(void 0 !== A.color ? A.color : r.color), + a.opacity = void 0 !== A.opacity ? A.opacity : r.opacity, + a.transparent = void 0 !== A.transparent ? A.transparent : r.transparent, + a.side = void 0 !== A.side ? A.side : r.side, + a.needsUpdate = !0 + }, + this.getIsolateMaterial = function () { + return a + }, + this.resetIsolateMaterial = function () { + a.color.setHex(r.color), + a.opacity = r.opacity, + a.transparent = r.transparent, + a.side = r.side, + a.needsUpdate = !0 + }, + e) + e[g].createByBos = !0 + }, + lu = function (A, e) { + tu.call(this, A, e) + }; + (lu.prototype = Object.create(tu.prototype)).constructor = lu, + lu.prototype.match = function (A) { + return null !== this.getMatchItem(A) + }, + lu.prototype.getMatchItem = function (A) { + var e = this._items, + t = A.userData, + i = !1; + if (t) + for (var o = e.length, n = 0; o > n; n += 1) { + var r = e[n], + a = r.condition; + for (var s in i = !0, + a) + if (a[s] !== t[s]) { + i = !1; + break + } + if (i) + return r + } + return null + }; + var cu = function (A, e) { + tu.call(this, A, e) + }; + (cu.prototype = Object.create(tu.prototype)).constructor = cu, + cu.prototype.remove = function (A, e) { + var t = this._items[A]; + if (t && e && e.length > 0) { + for (var i = 0, o = e.length; o > i; i += 1) { + var n = e[i]; + t.hasOwnProperty(n) && delete t[n] + } + uh.isEmptyObject(this._items) && this._enabled && (this._enabled = !1, + this.enableStateChanged()) + } + }, + cu.prototype.add = function (A, e, t) { + var i = this._items, + o = i[A]; + if (e && e.length > 0) { + void 0 === t && (t = !0), + o || (o = i[A] = {}); + for (var n = 0, r = e.length; r > n; n += 1) + o[e[n]] = t; + this._enabled || (this._enabled = !0, + this.enableStateChanged()) + } + }, + cu.prototype.clear = function (A) { + var e = this._items; + e.hasOwnProperty(A) && (delete e[A], + uh.isEmptyObject(e) && this._enabled && (this._enabled = !1, + this.enableStateChanged())) + }; + var hu = function (A, e) { + tu.call(this, A, e) + }; + (hu.prototype = Object.create(cu.prototype)).constructor = hu, + hu.prototype.match = function (A) { + return null !== this.getMatchItem(A) + }, + hu.prototype.getMatchItem = function (A) { + var e = this._items, + t = A.name; + for (var i in e) { + var o = e[i]; + if (o[t]) + return o[t] + } + return null + }; + var du = function (A, e) { + tu.call(this, A, e) + }; + (du.prototype = Object.create(cu.prototype)).constructor = du, + du.prototype.match = function (A) { + return null !== this.getMatchItem(A) + }, + du.prototype.getMatchItem = function (A) { + var e = this._items, + t = A.userData; + if (t) + for (var i in e) { + var o = e[i], + n = t[i]; + if (n && void 0 !== o[n]) + return o[n] + } + return null + }; + var pu = function () { + var A = Jc, + e = { + IDFILTER_OFFSET: 0, + FILE_VISIBLE: 0, + FILE_HIDDEN: 1, + VISIBLE: 2, + HIDDEN: 3, + TRANSLUCENT: 4, + TRANSLUCENT_OTHERS: 5, + WIREFRAME: 24, + COLORFUL: 25, + RENDER_PROMOTION: 6, + IDFILTER_ENDOFFSET: 6, + ISOLATEFILTER_OFFSET: 7, + ISOLATE_HIDDEN: 7, + ISOLATE_HIDDEN_OTHERS: 8, + ISOLATE_TRANSLUCENT: 9, + ISOLATE_TRANSLUCENT_OTHERS: 10, + ISOLATEFILTER_ENDOFFSET: 10, + USERFILTER_OFFSET: 11, + USER_HIDDEN: 11, + USER_OVERRIDE: 12, + USER_WITH_BOARDLINE: 13, + USERFILTER_ENDOFFSET: 13, + CONDITIONFILTER_OFFSET: 14, + CONDITION_HIDDEN_OTHERS: 14, + CONDITION_TRANSLUCENT_OTHERS: 15, + CONDITION_OVERRIDE: 16, + CONDITION_BORDERLINE: 26, + CONDITIONFILTER_ENDOFFSET: 16, + ISOLATECONDITIONFILTER_OFFSET: 17, + ISOLATE_CONDITION_HIDDEN: 17, + ISOLATE_CONDITION_HIDDEN_OTHERS: 18, + ISOLATE_CONDITION_TRANSLUCENT: 19, + ISOLATE_CONDITION_TRANSLUCENT_OTHERS: 20, + ISOLATECONDITIONFILTER_ENDOFFSET: 20, + FROZENFILTER: 21, + FROZENCONDITIONFILTER: 22, + OVERRIDEFILTER: 23, + BASICFILTER_COUNT: 23 + }, + t = new _g(!0), + i = new _g(!0), + o = new _g(!1), + n = new _g(!0), + r = new _g(!1), + a = new _g(!1), + s = new _g(!1), + l = [], + c = null, + h = null, + d = Vc.DISABLED, + p = new su; + ! function () { + l[e.FILE_VISIBLE] = new nu(e.FILE_VISIBLE, "FILE_VISIBLE"), + l[e.FILE_HIDDEN] = new nu(e.FILE_HIDDEN, "FILE_HIDDEN"), + l[e.VISIBLE] = new ru(e.VISIBLE, "VISIBLE"), + l[e.HIDDEN] = new ru(e.HIDDEN, "HIDDEN"), + l[e.TRANSLUCENT] = new ru(e.TRANSLUCENT, "TRANSLUCENT"), + l[e.TRANSLUCENT_OTHERS] = new ru(e.TRANSLUCENT_OTHERS, "TRANSLUCENT_OTHERS"), + l[e.RENDER_PROMOTION] = new ru(e.RENDER_PROMOTION, "RENDER_PROMOTION"), + l[e.WIREFRAME] = new ru(e.WIREFRAME, "WIREFRAME"), + l[e.COLORFUL] = new ru(e.COLORFUL, "COLORFUL"), + l[e.ISOLATE_HIDDEN] = new ru(e.ISOLATE_HIDDEN, "ISOLATE_HIDDEN"), + l[e.ISOLATE_HIDDEN_OTHERS] = new ru(e.ISOLATE_HIDDEN_OTHERS, "ISOLATE_HIDDEN_OTHERS"), + l[e.ISOLATE_TRANSLUCENT] = new ru(e.ISOLATE_TRANSLUCENT, "ISOLATE_TRANSLUCENT"), + l[e.ISOLATE_TRANSLUCENT_OTHERS] = new ru(e.ISOLATE_TRANSLUCENT_OTHERS, "ISOLATE_TRANSLUCENT_OTHERS"), + l[e.USER_HIDDEN] = new du(e.USER_HIDDEN, "USER_HIDDEN"), + l[e.USER_OVERRIDE] = new du(e.USER_OVERRIDE, "USER_OVERRIDE"), + l[e.CONDITION_BORDERLINE] = new iu(e.CONDITION_BORDERLINE, "CONDITION_BORDERLINE"), + l[e.CONDITION_HIDDEN_OTHERS] = new iu(e.CONDITION_HIDDEN_OTHERS, "CONDITION_HIDDEN_OTHERS"), + l[e.CONDITION_TRANSLUCENT_OTHERS] = new iu(e.CONDITION_TRANSLUCENT_OTHERS, "CONDITION_TRANSLUCENT_OTHERS"), + l[e.CONDITION_OVERRIDE] = new lu(e.CONDITION_OVERRIDE, "CONDITION_OVERRIDE"), + l[e.ISOLATE_CONDITION_HIDDEN] = new iu(e.ISOLATE_CONDITION_HIDDEN, "ISOLATE_CONDITION_HIDDEN"), + l[e.ISOLATE_CONDITION_HIDDEN_OTHERS] = new iu(e.ISOLATE_CONDITION_HIDDEN_OTHERS, "ISOLATE_CONDITION_HIDDEN_OTHERS"), + l[e.ISOLATE_CONDITION_TRANSLUCENT] = new iu(e.ISOLATE_CONDITION_TRANSLUCENT, "ISOLATE_CONDITION_TRANSLUCENT"), + l[e.ISOLATE_CONDITION_TRANSLUCENT_OTHERS] = new iu(e.ISOLATE_CONDITION_TRANSLUCENT_OTHERS, "ISOLATE_CONDITION_TRANSLUCENT_OTHERS"), + h = new ru(e.FROZENFILTER, "FROZENFILTER"), + l[e.FROZENCONDITIONFILTER] = new iu(e.FROZENCONDITIONFILTER, "FROZENCONDITIONFILTER"), + l[e.FROZENFILTER] = h, + c = new hu(e.OVERRIDEFILTER, "OVERRIDEFILTER"), + l[e.OVERRIDEFILTER] = c; + var d = null, + p = {}; + for (d in p[e.HIDDEN] = A.MATCH_RETURN_FALSE, + p[e.VISIBLE] = A.NOMATCH_RETURN_FALSE, + p[e.USER_HIDDEN] = A.MATCH_RETURN_FALSE, + p[e.CONDITION_HIDDEN_OTHERS] = A.NOMATCH_RETURN_FALSE, + p[e.ISOLATE_HIDDEN] = A.MATCH_RETURN_FALSE, + p[e.ISOLATE_HIDDEN_OTHERS] = A.NOMATCH_RETURN_FALSE, + p[e.ISOLATE_CONDITION_HIDDEN_OTHERS] = A.NOMATCH_RETURN_FALSE, + t.setFilterMode(p), + p) + l[d].registerToCompoundFilter(t); + var g = {}; + for (d in g[e.FROZENFILTER] = A.MATCH_RETURN_FALSE, + g[e.FROZENCONDITIONFILTER] = A.MATCH_RETURN_FALSE, + g[e.TRANSLUCENT] = A.MATCH_RETURN_FALSE, + g[e.TRANSLUCENT_OTHERS] = A.NOMATCH_RETURN_FALSE, + g[e.CONDITION_TRANSLUCENT_OTHERS] = A.NOMATCH_RETURN_FALSE, + g[e.ISOLATE_TRANSLUCENT] = A.MATCH_RETURN_FALSE, + g[e.ISOLATE_TRANSLUCENT_OTHERS] = A.NOMATCH_RETURN_FALSE, + g[e.ISOLATE_CONDITION_TRANSLUCENT_OTHERS] = A.NOMATCH_RETURN_FALSE, + n.setFilterMode(g), + g) + l[d].registerToCompoundFilter(n); + var u = {}; + u[e.ISOLATE_TRANSLUCENT] = A.MATCH_RETURN_TRUE, + u[e.ISOLATE_TRANSLUCENT_OTHERS] = A.NOMATCH_RETURN_TRUE, + u[e.ISOLATE_CONDITION_TRANSLUCENT_OTHERS] = A.NOMATCH_RETURN_TRUE, + u[e.CONDITION_TRANSLUCENT_OTHERS] = A.NOMATCH_RETURN_TRUE, + u[e.TRANSLUCENT] = A.MATCH_RETURN_TRUE, + u[e.TRANSLUCENT_OTHERS] = A.NOMATCH_RETURN_TRUE, + u[e.OVERRIDEFILTER] = A.MATCH_RETURN_TRUE, + u[e.USER_OVERRIDE] = A.MATCH_RETURN_TRUE, + u[e.CONDITION_OVERRIDE] = A.MATCH_RETURN_TRUE, + u[e.FROZENFILTER] = A.MATCH_RETURN_TRUE, + u[e.FROZENCONDITIONFILTER] = A.MATCH_RETURN_TRUE; + var f = {}; + for (d in f[e.ISOLATE_TRANSLUCENT] = 5, + f[e.ISOLATE_TRANSLUCENT_OTHERS] = 5, + f[e.ISOLATE_CONDITION_TRANSLUCENT_OTHERS] = 5, + f[e.CONDITION_TRANSLUCENT_OTHERS] = 5, + f[e.TRANSLUCENT] = 5, + f[e.TRANSLUCENT_OTHERS] = 5, + f[e.OVERRIDEFILTER] = 0, + f[e.USER_OVERRIDE] = 0, + f[e.CONDITION_OVERRIDE] = 0, + f[e.FROZENFILTER] = 3, + f[e.FROZENCONDITIONFILTER] = 3, + i.setFilterMode(u), + i.setFilterPriority(f), + u) + l[d].registerToCompoundFilter(i); + var m = {}; + for (d in m[e.OVERRIDEFILTER] = A.MATCH_RETURN_TRUE, + m[e.USER_OVERRIDE] = A.MATCH_RETURN_TRUE, + m[e.CONDITION_OVERRIDE] = A.MATCH_RETURN_TRUE, + m[e.CONDITION_TRANSLUCENT_OTHERS] = A.MATCH_RETURN_TRUE, + o.setFilterMode(m), + m) + l[d].registerToCompoundFilter(o); + var C = {}; + for (d in C[e.FILE_VISIBLE] = A.NOMATCH_RETURN_TRUE, + C[e.FILE_HIDDEN] = A.MATCH_RETURN_TRUE, + r.setFilterMode(C), + C) + l[d].registerToCompoundFilter(r); + var y = {}; + for (d in y[e.RENDER_PROMOTION] = A.MATCH_RETURN_TRUE, + y[e.ISOLATE_CONDITION_TRANSLUCENT_OTHERS] = A.MATCH_RETURN_TRUE, + a.setFilterMode(y), + y) + l[d].registerToCompoundFilter(a); + var v = {}; + for (d in v[e.CONDITION_BORDERLINE] = A.MATCH_RETURN_TRUE, + s.setFilterMode(v), + v) + l[d].registerToCompoundFilter(s) + }(), + this.getMaterialSelector = function () { + return p + }, + this.getBasicFilterList = function () { + return l + }, + this.getFilterType = function () { + return e + }, + this.saveState = function () { + for (var A = {}, e = null, t = 0, i = l.length; i > t; t += 1) + A[(e = l[t]).getName()] = e.getAll(); + return A.sceneState = this.getSceneState(), + A.version = "1.0", + A + }, + this.loadState = function (A) { + if (this.clearAll(), + A.hasOwnProperty("version")) { + if ("1.0" === A.version) { + for (var t = {}, i = 0, o = l.length; o > i; i += 1) + t[l[i].getName()] = i; + for (var n in A) + "sceneState" !== n && "version" !== n && (t.hasOwnProperty(n) ? l[t[n]].setByData(A[n]) : Bh.warn("Warning: Not supported filter '" + n + "'")) + } + } else + for (var r in A) + "sceneState" !== r && (2 > r ? l[r].setByData(A[r]) : r > 2 ? e.BASICFILTER_COUNT + 2 > r && l[r - 1].setByData(A[r]) : 2 !== r && "2" !== r || Bh.warn("Warning: Old version filter data! The selection state is out of the filter, can not restore it.")); + this.setSceneState(A.sceneState) + }, + this.clear = function () { + for (var A = 0, t = l.length; t > A; A += 1) { + var i = l[A].getType(); + i !== e.FROZENFILTER && i !== e.CONDITION_BORDERLINE && l[A].clearAll() + } + this.setSceneState(Vc.DISABLED) + }, + this.clearAll = function () { + for (var A = 0, e = l.length; e > A; A += 1) + l[A].clearAll(); + this.setSceneState(Vc.DISABLED) + }, + this.clearIsolate = function () { + this.clearAllIsolateList(), + this.clearAllIsolateConditions() + }, + this.clearFrozenList = function () { + h.clearAll() + }, + this.addToFrozenList = function (A) { + h.add(A) + }, + this.removeFromFrozenList = function (A) { + h.remove(A) + }, + this.setFrozenList = function (A) { + this.clearFrozenList(), + this.addToFrozenList(A) + }, + this.setFrozenConditions = function (A) { + l[e.FROZENCONDITIONFILTER].setByData(A) + }, + this.getFrozenConditions = function () { + return l[e.FROZENCONDITIONFILTER].getAll() + }, + this.clearFrozenConditions = function () { + l[e.FROZENCONDITIONFILTER].clear() + }, + this.clearFrozen = function () { + this.clearFrozenList(), + this.clearFrozenConditions() + }, + this.clearAllIdList = function () { + var A = null; + for (A = e.IDFILTER_OFFSET; e.IDFILTER_ENDOFFSET >= A; A += 1) + l[A].clearAll() + }, + this.clearIdList = function (A) { + var t = e.IDFILTER_OFFSET + A; + e.IDFILTER_OFFSET > t || t > e.IDFILTER_ENDOFFSET || l[t].clear() + }, + this.addToIdList = function (A, t) { + var i = e.IDFILTER_OFFSET + A; + e.IDFILTER_OFFSET > i || i > e.IDFILTER_ENDOFFSET || l[i].add(t) + }, + this.removeFromIdList = function (A, t) { + var i = e.IDFILTER_OFFSET + A; + e.IDFILTER_OFFSET > i || i > e.IDFILTER_ENDOFFSET || l[i].remove(t) + }, + this.setIdList = function (A, e) { + this.clearIdList(A), + this.addToIdList(A, e) + }, + this.clearAllOverrideList = function () { + c.clearAll() + }, + this.clearOverrideList = function (A) { + c.clear(A) + }, + this.addToOverrideList = function (A, e, t) { + e && e.length > 0 && (p.has(t) || (t = p.getDefaultMaterialName()), + c.add(A, e, t)) + }, + this.removeFromOverrideList = function (A, e) { + c.remove(A, e) + }, + this.setOverrideList = function (A, e, t) { + this.clearOverrideList(A), + this.addToOverrideList(A, e, t) + }, + this.addToOverrideListByColor = function (A, e, t) { + var i = p.add(t); + c.add(A, e, i) + }, + this.setOverrideListByColor = function (A, e, t) { + this.clearOverrideList(A), + this.addToOverrideListByColor(A, e, t) + }, + this.clearAllUserList = function () { + var A = null; + for (A = e.USERFILTER_OFFSET; e.USERFILTER_ENDOFFSET >= A; A += 1) + l[A].clearAll() + }, + this.clearUserListByType = function (A) { + var t = e.USERFILTER_OFFSET + A; + e.USERFILTER_OFFSET > t || t > e.USERFILTER_ENDOFFSET || l[t].clearAll() + }, + this.clearUserList = function (A, t) { + var i = e.USERFILTER_OFFSET + A; + e.USERFILTER_OFFSET > i || i > e.USERFILTER_ENDOFFSET || l[i].clear(t) + }, + this.addToUserList = function (A, t, i, o) { + var n = e.USERFILTER_OFFSET + A; + e.USERFILTER_OFFSET > n || n > e.USERFILTER_ENDOFFSET || l[n].add(t, i, o) + }, + this.removeFromUserList = function (A, t, i) { + var o = e.USERFILTER_OFFSET + A; + e.USERFILTER_OFFSET > o || o > e.USERFILTER_ENDOFFSET || l[o].remove(t, i) + }, + this.setUserList = function (A, e, t, i) { + this.clearUserList(A, e), + this.addToUserList(A, e, t, i) + }, + this.isIsolate = function () { + var A = null; + for (A = e.ISOLATEFILTER_OFFSET; e.ISOLATEFILTER_ENDOFFSET >= A; A += 1) + if (!l[A].isEmpty()) + return !0; + return !1 + }, + this.isFiltering = function () { + return !!this.isIsolate() || !(l[e.HIDDEN].isEmpty() && l[e.VISIBLE].isEmpty() && l[e.TRANSLUCENT].isEmpty() && l[e.TRANSLUCENT_OTHERS].isEmpty() && this.getSceneState() === Vc.DISABLED) + }, + this.setFrozonMaterial = function (A) { + p.setFrozonMaterial(A) + }, + this.getFrozonMaterial = function () { + return p.getFrozonMaterial() + }, + this.setSelectedMaterial = function (A) { + p.setSelectedMaterial(A) + }, + this.getSelectedMaterial = function () { + return p.getSelectedMaterial() + }, + this.setIsolateMaterial = function (A) { + p.setIsolateMaterial(A) + }, + this.getIsolateMaterial = function () { + return p.getIsolateMaterial() + }, + this.resetIsolateMaterial = function () { + p.resetIsolateMaterial() + }, + this.clearAllIsolateList = function () { + var A = null; + for (A = e.ISOLATEFILTER_OFFSET; e.ISOLATEFILTER_ENDOFFSET >= A; A += 1) + l[A].clear() + }, + this.clearIsolateList = function (A) { + var t = e.ISOLATEFILTER_OFFSET + A; + e.ISOLATEFILTER_OFFSET > t || t > e.ISOLATEFILTER_ENDOFFSET || l[t].clear() + }, + this.addToIsolateList = function (A, t) { + var i = e.ISOLATEFILTER_OFFSET + A; + e.ISOLATEFILTER_OFFSET > i || i > e.ISOLATEFILTER_ENDOFFSET || l[i].add(t) + }, + this.removeFromIsolateList = function (A, t) { + var i = e.ISOLATEFILTER_OFFSET + A; + e.ISOLATEFILTER_OFFSET > i || i > e.ISOLATEFILTER_ENDOFFSET || l[i].remove(t) + }, + this.setIsolateList = function (A, e) { + this.clearIsolateList(A), + this.addToIsolateList(A, e) + }, + this.setIsolateConditions = function (A, t) { + var i = e.ISOLATECONDITIONFILTER_OFFSET + t; + e.ISOLATECONDITIONFILTER_OFFSET > i || i > e.ISOLATECONDITIONFILTER_ENDOFFSET || l[i].setByData(A) + }, + this.getIsolateConditions = function (A) { + var t = null, + i = e.ISOLATECONDITIONFILTER_OFFSET + A; + return e.ISOLATECONDITIONFILTER_OFFSET > i || i > e.ISOLATECONDITIONFILTER_ENDOFFSET || (t = l[i].getAll()), + t + }, + this.clearIsolateConditions = function (A) { + var t = e.ISOLATECONDITIONFILTER_OFFSET + A; + e.ISOLATECONDITIONFILTER_OFFSET > t || t > e.ISOLATECONDITIONFILTER_ENDOFFSET || l[t].clear() + }, + this.clearAllIsolateConditions = function () { + var A = null; + for (A = e.ISOLATECONDITIONFILTER_OFFSET; e.ISOLATECONDITIONFILTER_ENDOFFSET >= A; A += 1) + l[A].clearAll() + }, + this.setConditions = function (A, t) { + var i = e.CONDITIONFILTER_OFFSET + A; + e.CONDITIONFILTER_OFFSET > i || i > e.CONDITIONFILTER_ENDOFFSET || l[i].setByData(t) + }, + this.getConditions = function (A) { + var t = null, + i = e.CONDITIONFILTER_OFFSET + A; + return e.CONDITIONFILTER_OFFSET > i || i > e.CONDITIONFILTER_ENDOFFSET || (t = l[i].get()), + t + }, + this.clearConditions = function (A) { + var t = e.CONDITIONFILTER_OFFSET + A; + e.CONDITIONFILTER_OFFSET > t || t > e.CONDITIONFILTER_ENDOFFSET || l[t].clearAll() + }, + this.clearAllConditions = function () { + var A = null; + for (A = e.CONDITIONFILTER_OFFSET; e.CONDITIONFILTER_ENDOFFSET >= A; A += 1) + l[A].clear() + }, + this.makeSceneTranslucent = function () { + this.setSceneState(Vc.TRANSLUCENT) + }, + this.cancelSceneTranslucent = function () { + this.setSceneState(Vc.DISABLED) + }, + this.hideScene = function () { + this.setSceneState(Vc.HIDDEN) + }, + this.showScene = function () { + this.setSceneState(Vc.DISABLED) + }, + this.setSceneState = function (A) { + d = A + }, + this.getSceneState = function () { + return d + }, + this.cancelTranslucent = function () { + this.clearIdList(Dc.TRANSLUCENT), + this.clearIdList(Dc.TRANSLUCENT_OTHERS) + }, + this._addIdsToFilter = function (A, t) { + var i = e.IDFILTER_OFFSET + A; + e.IDFILTER_OFFSET > i || i > e.IDFILTER_ENDOFFSET || l[i].add(t) + }, + this.hideByIds = function (A) { + this._addIdsToFilter(Dc.HIDDEN, A) + }, + this.showByIds = function (A) { + this._addIdsToFilter(Dc.VISIBLE, A) + }, + this.makeTranslucentByIds = function (A) { + this._addIdsToFilter(Dc.TRANSLUCENT, A) + }, + this.makeTranslucentOthersByIds = function (A) { + this._addIdsToFilter(Dc.TRANSLUCENT_OTHERS, A) + }, + this._isVisible = function (A) { + return this.getSceneState() !== Vc.HIDDEN && t.apply(A) + }, + this._isSelectable = function (A) { + return this.getSceneState() !== Vc.TRANSLUCENT && n.apply(A, this.getSceneState()) + }, + this._isSelectableById = function (A) { + return !h.get()[A] + }, + this.getMaterialNameByColor = function (A) { + return p.getMaterialNameByColor(A) + }, + this.getMaterialNameByWireframe = function (A) { + return p.getMaterialNameByWireframe(A) + }, + this.addOverrideMaterial = function (A) { + p.addOverrideMaterial(A) + }, + this.updateOverrideMaterial = function (A) { + p.updateOverrideMaterial(A) + }, + this.getMaterialByName = function (A) { + return p.get(A) + }, + this._getOverrideMaterial = function (A) { + if (this.getSceneState() === Vc.TRANSLUCENT) + return p.get("scene"); + var t = i.getApplyFilterId(A), + o = null, + n = ""; + switch (t) { + case e.ISOLATE_TRANSLUCENT: + case e.ISOLATE_TRANSLUCENT_OTHERS: + case e.ISOLATE_CONDITION_TRANSLUCENT_OTHERS: + o = this.getIsolateMaterial(); + break; + case e.CONDITION_TRANSLUCENT_OTHERS: + case e.TRANSLUCENT: + case e.TRANSLUCENT_OTHERS: + o = p.get("scene"); + break; + case e.FROZENFILTER: + case e.FROZENCONDITIONFILTER: + break; + case e.OVERRIDEFILTER: + case e.USER_OVERRIDE: + case e.CONDITION_OVERRIDE: + var r = l[t].getMatchItem(A); + n = r.hasOwnProperty("color") ? p.getMaterialNameByColor(r.color) : r.material ? r.material : r + } + return o || "" === n || (p.has(n) || (n = p.getDefaultMaterialName()), + o = p.get(n)), + o + }, + this._getMaterialName = function (A) { + if (this.getSceneState() === Vc.TRANSLUCENT) + return "scene"; + var t = i.getApplyFilterId(A), + o = ""; + switch (t) { + case e.ISOLATE_TRANSLUCENT: + case e.ISOLATE_TRANSLUCENT_OTHERS: + case e.ISOLATE_CONDITION_TRANSLUCENT_OTHERS: + o = this.getIsolateMaterial().name; + break; + case e.CONDITION_TRANSLUCENT_OTHERS: + case e.TRANSLUCENT: + case e.TRANSLUCENT_OTHERS: + o = "scene"; + break; + case e.FROZENFILTER: + case e.FROZENCONDITIONFILTER: + break; + case e.OVERRIDEFILTER: + case e.USER_OVERRIDE: + case e.CONDITION_OVERRIDE: + var n = l[t].getMatchItem(A); + o = n.hasOwnProperty("color") ? p.getMaterialNameByColor(n.color) : n.material ? n.material : n + } + return o + }, + this._getMaterialByName = function (A) { + return A instanceof qA ? A : "isolate" === A ? p.getIsolateMaterial() : "looming" === A || "scene" === A ? p.getFrozonMaterial() : "selected" === A ? p.getSelectedMaterial() : p.get(A) + }, + this._hasHighPriorityOverrideMaterial = function (A) { + return this.getSceneState() === Vc.TRANSLUCENT || o.apply(A) + }, + this._hasOverrideMaterial = function (A) { + return this.getSceneState() === Vc.TRANSLUCENT || o.apply(A) || i.apply(A) + }, + this._isHiddenFileId = function (A) { + return r.apply(A) + }, + this._hasHiddenFileIdFilter = function () { + return !r.isEmpty() + }, + this._hasVisibleFilter = function () { + return this.getSceneState() === Vc.HIDDEN || !t.isEmpty() + }, + this._hasPickableFilter = function () { + return this.getSceneState() === Vc.TRANSLUCENT || !n.isEmpty() + }, + this._hasOverrideMaterialFilter = function () { + return this.getSceneState() === Vc.TRANSLUCENT || !i.isEmpty() + }, + this._hasLowPriorityOverride = function () { + return i.hasFilterNotIn(o) + }, + this._isRenderPromotion = function (A) { + return a.apply(A) + }, + this._hasRenderPromotionFilter = function () { + return !a.isEmpty() + }, + this._isRenderWithBoardline = function (A) { + return s.apply(A) + }, + this._hasRenderWithBoardlineFilter = function () { + return !s.isEmpty() + }, + this._getFilterObjectsKeys = function (A) { + var e = l[A].get(), + t = []; + for (var i in e) + t.push(i); + return t + } + }, + gu = function (A) { + this.materialSelector = A; + var e = function (A) { + var e = []; + for (var t in A) + !0 === A[t] && e.push(t); + return e + }; + this.saveState = function (A) { + var e = A.getIsolateFilterAction(), + t = A.getModelIsolateFilterAction(), + i = A.getFilterActionList(), + o = { + isolateAction: e, + modelIsolateAction: t, + modelActions: A.getModelFilterActionList(), + actions: i, + sceneState: A.getSceneState(), + version: "1.0" + }; + return JSON.stringify(o) + }, + this.createAction = function (A) { + var e = A.className, + t = null; + switch (e) { + case "IsolateIdsFA": + (t = new Hg(A.isolateHide)).ids = A.ids; + break; + case "VisibleIdsFA": + (t = new Pg(A.flag, A.isVisible)).ids = A.ids; + break; + case "OverrideIdsFA": + if (o = A.material) { + var i = this.materialSelector.getMaterialNameByColor({ + opacity: A.material.opacity, + color: A.material.color + }); + o = this.materialSelector.get(i) + } + (t = new qg(A.flag, o)).ids = A.ids; + break; + case "TransparentIdsFA": + (t = new Yg(A.flag, A.isOpaque)).ids = A.ids; + break; + case "VisibleConditionFA": + (t = new Jg(A.flag, A.isVisible)).conditions = A.conditions; + break; + case "OverrideConditionFA": + var o; + if (o = A.material) { + i = this.materialSelector.getMaterialNameByColor({ + opacity: o.opacity, + color: o.color + }); + o = this.materialSelector.get(i) + } + (t = new zg(A.flag, o)).conditions = A.conditions; + break; + case "TransparentConditionFA": + (t = new Zg(A.flag, A.isOpaque)).conditions = A.conditions; + break; + case "IsolateConditionFA": + (t = new Xg(A.isolateHide)).conditions = A.conditions; + break; + default: + Bh.warn("Warning: Not supported filterAction '" + e + "'") + } + return t + }, + this.createActionByOldFilter = function (A, t) { + var i = []; + switch (A) { + case "CONDITION_OVERRIDE": + for (var o = [], n = 0; t.length > n; n += 1) { + var r = t[n]; + o.push(r.condition) + } + var a = this.materialSelector.add(p = r.color), + s = this.materialSelector.get(a); + (g = new zg(!0, s)).conditions = o, + i.push(g); + break; + case "CONDITION_TRANSLUCENT_OTHERS": + (g = new Zg(!1, !1)).conditions = t, + i.push(g); + break; + case "ISOLATE_CONDITION_HIDEEN_OTHERS": + (g = new Xg(!0)).conditions = t, + i.push(g); + break; + case "ISOLATE_CONDITION_TRANSLUCENT_OTHERS": + (g = new Xg(!1)).conditions = t, + i.push(g); + break; + case "ISOLATE_HIDDEN_OTHERS": + (g = new Hg(!0)).ids = e(t), + i.push(g); + break; + case "ISOLATE_TRANSLUCENT_OTHERS": + (g = new Hg(!1)).ids = e(t), + i.push(g); + break; + case "OVERRIDEFILTER": + for (var l in t) + if (t.hasOwnProperty(l)) { + var c = [], + h = t[l]; + for (var d in h) + c.push(d); + var p = this.materialSelector.getMaterialParamsFromName(h[d]); + a = this.materialSelector.add(p), + s = this.materialSelector.get(a); + (g = new qg(!0, s)).ids = c, + i.push(g) + } + break; + case "TRANSLUCENT": + (g = new Yg(!0, !1)).ids = e(t), + i.push(g); + break; + case "TRANSLUCTANT_OTHERS": + (g = new Yg(!1, !1)).ids = e(t), + i.push(g); + break; + case "VISIBLE": + var g; + (g = new Pg(!0, !0)).ids = e(t), + i.push(g); + break; + default: + Bh.warn("Warning: Not supported filter '" + A + "'") + } + return i + }, + this.loadState = function (A, e) { + e.clearFilterActionList(), + e.clearModelFilterActionList(), + e.getObjectInfoManager().resetAll(), + e.getModelInfoManager().resetAll(); + var t = JSON.parse(A); + if (t.hasOwnProperty("version") && "1.0" === t.version) { + var i = t.isolateAction; + if (i) { + var o = this.createAction(i); + e.pushBack(o) + } + for (var n = t.actions, r = 0; n.length > r; r += 1) { + o = this.createAction(n[r]); + e.pushBack(o) + } + var a = t.modelIsolateAction; + if (a) { + o = this.createAction(a); + e.pushModelBack(o) + } + for (var s = t.modelActions, l = 0; s.length > l; l += 1) { + o = this.createAction(s[l]); + e.pushModelBack(o) + } + } + e.setSceneState(t.sceneState) + } + }, + uu = function () { + var A = {}, + e = [], + t = !1, + i = !1, + o = !1, + n = !1, + r = !1, + a = new aA; + this.init = function (A) {}, + this.clearData = function () {}, + this.getObjectsMap = function () {}, + this.add = function (t) { + A[t] = { + state: Lc.Visible, + modelKey: t, + material: null + }, + e = Object.keys(A) + }, + this.remove = function (t) { + delete A[t], + e = Object.keys(A) + }, + this.calculateVisibleComponentsBbox = function () {}, + this.getVisibleComponentsBbox = function () { + return a.isEmpty() && this.calculateVisibleComponentsBbox(), + a + }, + this.arrayToMap = function (A) { + for (var e = {}, t = 0; A.length > t; t += 1) { + var i = A[t]; + e[i] = i + } + return e + }, + this.isMatchConditions = function (A, e) { + for (var t = !0, i = 0, o = e.length; o > i; i += 1) { + var n = e[i]; + for (var r in n) { + if (!Array.isArray(n[r]) && A[r] !== n[r]) { + t = !1; + break + } + if (Array.isArray(n[r]) && -1 === n[r].indexOf(A[r])) { + t = !1; + break + } + } + if (!0 === t) + break; + e.length - 1 > i && (t = !0) + } + return t + }, + this.matchConditions = function (A, e) {}, + this.setVisible = function (t, o, n) { + var r = function (A) { + o ? A.state = Lc.Visible : (i = !0, + A.state &= ~Lc.Visible) + }; + if (void 0 === n || !0 === n) + for (var a = 0, s = t.length; s > a; a += 1) + A.hasOwnProperty(t[a]) && r(A[t[a]]); + else + for (var l = this.arrayToMap(t), c = 0, h = e.length; h > c; c += 1) + l.hasOwnProperty(e[c]) || r(A[e[c]]) + }, + this.isVisible = function (e) { + if (A.hasOwnProperty(e)) + return A[e].state & Lc.Visible > 0 + }, + this.clearVisible = function () { + for (var e in i = !1, + A) { + if (A.hasOwnProperty(e)) + A[e].state = Lc.Visible + } + }, + this.hideAll = function () { + for (var e in i = !0, + A) { + if (A.hasOwnProperty(e)) + A[e].state &= ~Lc.Visible + } + }, + this.setTransparent = function (i, o, r) { + var a = function (A) { + o ? (A.state |= Lc.Transparent, + t = !0, + n = !0) : A.state &= ~Lc.Transparent + }; + if (void 0 === r || !0 === r) + for (var s = 0, l = i.length; l > s; s += 1) + A.hasOwnProperty(i[s]) && a(A[i[s]]); + else + for (var c = this.arrayToMap(i), h = 0, d = e.length; d > h; h += 1) + c.hasOwnProperty(e[h]) || a(A[e[h]]) + }, + this.isTransparent = function (e) { + if (A.hasOwnProperty(e)) { + var t = A[e], + i = (t.state & Lc.Transparent) > 0; + return i = i || (t.state & Lc.TransparentByIsolate) > 0 + } + }, + this.clearTransparent = function () { + for (var e in n = !1, + A) { + if (A.hasOwnProperty(e)) + A[e].state &= ~Lc.Transparent + } + }, + this.setMaterial = function (i, o, n) { + if (void 0 === n || !0 === n) + for (var r = 0, a = i.length; a > r; r += 1) { + if (A.hasOwnProperty(i[r])) + A[i[r]].material = o, + t = !0 + } + else + for (var s = this.arrayToMap(i), l = 0, c = e.length; c > l; l += 1) { + if (!s.hasOwnProperty(e[l])) + A[e[l]].material = o, + t = !0 + } + }, + this.getMaterial = function (e) { + if (A.hasOwnProperty(e)) + return A[e].material + }, + this.clearMaterial = function () { + for (var e in A) { + A[e].material = null + } + }, + this.setIsolateHide = function (t, i, n) { + var r = function (A) { + i ? (o = !0, + A.state |= Lc.HideByIsolate) : A.state &= ~Lc.HideByIsolate + }; + if (void 0 === n || !0 === n) + for (var a = 0, s = t.length; s > a; a += 1) + A.hasOwnProperty(t[a]) && r(A[t[a]]); + else + for (var l = this.arrayToMap(t), c = 0, h = e.length; h > c; c += 1) + l.hasOwnProperty(e[c]) || r(A[e[c]]) + }, + this.isIsolateHide = function (e) { + if (A.hasOwnProperty(e)) + return (A[e].state & Lc.HideByIsolate) > 0 + }, + this.setIsolateTransparent = function (i, o, n) { + var a = function (A) { + o ? (A.state |= Lc.TransparentByIsolate, + t = !0, + r = !0) : A.state &= ~Lc.TransparentByIsolate + }; + if (void 0 === n || !0 === n) + for (var s = 0, l = i.length; l > s; s += 1) + A.hasOwnProperty(i[s]) && a(A[i[s]]); + else + for (var c = this.arrayToMap(i), h = 0, d = e.length; d > h; h += 1) + c.hasOwnProperty(e[h]) || a(A[e[h]]) + }, + this.isIsolateTransparent = function (e) { + if (A.hasOwnProperty(e)) + return (A[e].state & Lc.TransparentByIsolate) > 0 + }, + this.clearIsolateHide = function () { + o = !1; + var e = Object.keys(A); + e.length > 0 && this.setIsolateHide(e, !1) + }, + this.clearIsolates = function () { + r = !1, + o = !1; + var e = Object.keys(A); + e.length > 0 && (this.setIsolateHide(e, !1), + this.setIsolateTransparent(e, !1)) + }, + this.clearTransparentByIsolate = function () { + for (var e in r = !1, + A) { + if (A.hasOwnProperty(e)) + A[e].state &= ~Lc.TransparentByIsolate + } + }, + this.isHidden = function (e) { + if (A.hasOwnProperty(e)) { + var t = A[e], + i = 0 == (t.state & Lc.Visible); + return i = i || (t.state & Lc.HideByIsolate) > 0 + } + }, + this.isFrozen = function (e) { + if (A.hasOwnProperty(e)) { + var t = A[e], + i = (t.state & Lc.Transparent) > 0; + return i = i || (t.state & Lc.TransparentByIsolate) > 0 + } + }, + this.resetAll = function () { + for (var e in A) + A.hasOwnProperty(e) && (A[e].state = Lc.Visible, + A[e].material = null); + t = !1, + i = o = !1, + n = r = !1 + }, + this.hasOverrideMaterial = function (e) { + return void 0 === e ? t : A.hasOwnProperty(e) ? null !== A[e].material || this.isTransparent(e) : void 0 + }, + this.hasObjectHidden = function () { + return i || o + }, + this.hasObjectCantSelected = function () { + return i || n || r + }, + this.hasObjectTransparent = function () { + return n || r + } + }, + fu = function () { + var A = {}, + e = {}; + this.init = function (t) { + for (var i in A = t) + e.hasOwnProperty(i) && !uh.isEmptyObject(e[i]) || uh.isEmptyObject(A[i]) || (e[i] = Object.keys(A[i])) + }, + this.reinit = function (t) { + for (var i in e = {}, + A = t) + e[i] = Object.keys(t[i]) + }, + this.clear = function () { + A = {}, + e = {} + }, + this.getObjectsMap = function () { + return A + }, + this.getObjectIds = function (A) { + return e.hasOwnProperty(A) ? e[A] : [] + } + }, + mu = function () { + var A = new fu, + e = !1, + t = !1, + i = !1, + o = !1, + n = !1, + r = !1, + a = new aA, + s = !1; + this.inactivatedIdMap = {}, + this.inactivatedIds = [], + this.bIsInactivateAll = !1, + this.init = function (e) { + A.init(e) + }, + this.reinit = function (e) { + A.reinit(e) + }, + this.clearData = function () { + A.clear() + }, + this.getObjectsMap = function () { + return A.getObjectsMap() + }, + this.calculateVisibleComponentsBbox = function () { + a.makeEmpty(); + var e = A.getObjectsMap(); + for (var t in e) + for (var i = e[t], o = A.getObjectIds(t), n = null, r = 0, l = o.length; l > r; r += 1) { + var c = o[r]; + if (!this.isHidden(c)) { + var h = i[c][0]; + if (h.boundingBox) { + !n && h.model && (n = h.model.getModelMatrix()); + var d = h.boundingBox.clone(); + n && d.applyMatrix4(n), + d.isEmpty() || (a.expandByPoint(d.min), + a.expandByPoint(d.max)) + } + } + } + s = !1 + }, + this.getVisibleComponentsBbox = function () { + return (s || a.isEmpty()) && this.calculateVisibleComponentsBbox(), + a + }, + this.needUpdateBoxAfterExplode = function () { + s = !0 + }, + this.arrayToMap = function (A) { + for (var e = {}, t = 0; A.length > t; t += 1) { + var i = A[t]; + e[i] = i + } + return e + }, + this.isMatchConditions = function (A, e) { + for (var t = !0, i = 0, o = e.length; o > i; i += 1) { + var n = e[i]; + for (var r in n) { + if (!Array.isArray(n[r]) && A[r] !== n[r]) { + t = !1; + break + } + if (Array.isArray(n[r]) && -1 === n[r].indexOf(A[r])) { + t = !1; + break + } + } + if (!0 === t) + break; + e.length - 1 > i && (t = !0) + } + return t + }, + this.matchConditions = function (e, t) { + var i = A.getObjectsMap(); + for (var o in i) + for (var n = [], r = [], a = i[o], s = A.getObjectIds(o), l = 0, c = s.length; c > l; l += 1) { + var h = s[l], + d = a[h][0].userData || {}; + d.elementId = a[h][0].userId, + this.isMatchConditions(d, e) ? n.push(h) : r.push(h) + } + t && t(n, !0), + t && t(r, !1) + }, + this.getMatchIds = function (e) { + var t = A.getObjectsMap(), + i = []; + for (var o in t) + for (var n = t[o], r = A.getObjectIds(o), a = 0, s = r.length; s > a; a += 1) { + var l = r[a], + c = n[l][0].userData || {}; + c.elementId = n[l][0].userId, + !0 === this.isMatchConditions(c, e) && i.push(l) + } + return i + }, + this.setVisible = function (e, t, o) { + var n = function (A) { + t ? A.state = Lc.Visible : (i = !0, + A.state &= ~Lc.Visible) + }, + r = A.getObjectsMap(); + for (var a in r) { + var s = r[a]; + if (void 0 === o || !0 === o) + for (var l = 0, c = e.length; c > l; l += 1) { + if (s.hasOwnProperty(f = e[l]) && this.isActive(f)) { + var h = s[f][0]; + n(h) + } + } + else { + for (var d = this.arrayToMap(e), p = A.getObjectIds(a), g = 0, u = p.length; u > g; g += 1) { + var f; + !d.hasOwnProperty(f = p[g]) && this.isActive(f) && n(h = s[f][0]) + } + d = null + } + } + }, + this.isVisible = function (e) { + var t = A.getObjectsMap(); + for (var i in t) { + var o = t[i]; + if (o.hasOwnProperty(e)) + return o[e][0].state & Lc.Visible > 0 + } + }, + this.clearVisible = function () { + var e = A.getObjectsMap(); + for (var t in i = !1, + this.inactivatedIds.length > 0 && (i = !0), + e) + for (var o = e[t], n = A.getObjectIds(t), r = 0, a = n.length; a > r; r += 1) { + var s = n[r], + l = o[s][0]; + this.isActive(s) && (l.state = Lc.Visible) + } + }, + this.hideAll = function () { + var e = A.getObjectsMap(); + for (var t in i = !0, + e) + for (var o = e[t], n = A.getObjectIds(t), r = 0, a = n.length; a > r; r += 1) { + o[n[r]][0].state &= ~Lc.Visible + } + }, + this.setTransparent = function (t, i, o) { + var r = function (A) { + i ? (A.state |= Lc.Transparent, + e = !0, + n = !0) : A.state &= ~Lc.Transparent + }, + a = A.getObjectsMap(); + for (var s in a) { + var l = a[s]; + if (void 0 === o || !0 === o) + for (var c = 0, h = t.length; h > c; c += 1) { + if (this.isActive(m = t[c]) && l.hasOwnProperty(m)) { + var d = l[m][0]; + r(d) + } + } + else { + for (var p = this.arrayToMap(t), g = A.getObjectIds(s), u = 0, f = g.length; f > u; u += 1) { + var m; + this.isActive(m = g[u]) && !p.hasOwnProperty(m) && r(d = l[m][0]) + } + p = null + } + } + }, + this.isTransparent = function (e) { + var t = A.getObjectsMap(); + for (var i in t) { + var o = t[i]; + if (o.hasOwnProperty(e) && this.isActive(e)) { + var n = o[e][0], + r = (n.state & Lc.Transparent) > 0; + return r = r || (n.state & Lc.TransparentByIsolate) > 0 + } + } + }, + this.clearTransparent = function () { + var e = A.getObjectsMap(); + for (var t in n = !1, + e) + for (var i = e[t], o = A.getObjectIds(t), r = 0, a = o.length; a > r; r += 1) { + var s = o[r]; + if (this.isActive(s)) + i[s][0].state &= ~Lc.Transparent + } + }, + this.setMaterial = function (t, i, o) { + var n = A.getObjectsMap(); + for (var r in n) { + var a = n[r]; + if (void 0 === o || !0 === o) + for (var s = 0, l = t.length; l > s; s += 1) { + if (this.isActive(u = t[s]) && a.hasOwnProperty(u)) { + var c = a[u][0]; + c.material = i, + e = !0 + } + } + else { + for (var h = this.arrayToMap(t), d = A.getObjectIds(r), p = 0, g = d.length; g > p; p += 1) { + var u; + this.isActive(u = d[p]) && !h.hasOwnProperty(u) && ((c = a[u][0]).material = i, + e = !0) + } + h = null + } + } + }, + this.getMaterial = function (e) { + var t = A.getObjectsMap(); + for (var i in t) { + var o = t[i]; + if (o.hasOwnProperty(e)) + return o[e][0].material + } + }, + this.clearMaterial = function () { + var e = A.getObjectsMap(); + for (var t in e) { + var i = e[t]; + for (var o in i) + this.isActive(o) && (i[o][0].material = null) + } + }, + this.setWireFrameMaterial = function (e, i, o) { + var n = A.getObjectsMap(); + for (var r in n) { + var a = n[r]; + if (void 0 === o || !0 === o) + for (var s = 0, l = e.length; l > s; s += 1) { + if (a.hasOwnProperty(u = e[s])) { + var c = a[u][0]; + c.wireFrameMaterial = i, + t = !0 + } + } + else { + for (var h = this.arrayToMap(e), d = A.getObjectIds(r), p = 0, g = d.length; g > p; p += 1) { + var u; + h.hasOwnProperty(u = d[p]) || ((c = a[u][0]).wireFrameMaterial = i, + t = !0) + } + h = null + } + } + }, + this.getWireFrameMaterial = function (e) { + var t = A.getObjectsMap(); + for (var i in t) { + var o = t[i]; + if (o.hasOwnProperty(e)) + return o[e][0].wireFrameMaterial + } + }, + this.clearWireFrameMaterial = function () { + var e = A.getObjectsMap(); + for (var t in e) { + var i = e[t]; + for (var o in i) + i[o][0].wireFrameMaterial = null + } + }, + this.clearMaterialByKey = function (e) { + var t = A.getObjectsMap(); + for (var i in t) { + var o = t[i]; + for (var n in o) + - + 1 !== e.indexOf(n) && (o[n][0].material = null) + } + }, + this.setIsolateHide = function (e, t, i) { + var n = function (A) { + t ? (o = !0, + A.state |= Lc.HideByIsolate) : A.state &= ~Lc.HideByIsolate + }, + r = A.getObjectsMap(); + for (var a in r) { + var s = r[a]; + if (void 0 === i || !0 === i) + for (var l = 0, c = e.length; c > l; l += 1) { + if (this.isActive(f = e[l]) && s.hasOwnProperty(f)) { + var h = s[f][0]; + n(h) + } + } + else { + for (var d = this.arrayToMap(e), p = A.getObjectIds(a), g = 0, u = p.length; u > g; g += 1) { + var f; + this.isActive(f = p[g]) && !d.hasOwnProperty(f) && n(h = s[f][0]) + } + d = null + } + } + }, + this.isIsolateHide = function (e) { + var t = A.getObjectsMap(); + for (var i in t) { + var o = t[i]; + if (o.hasOwnProperty(e)) + return (o[e][0].state & Lc.HideByIsolate) > 0 + } + }, + this.setIsolateTransparent = function (t, i, o) { + var n = function (A) { + i ? (A.state |= Lc.TransparentByIsolate, + e = !0, + r = !0) : A.state &= ~Lc.TransparentByIsolate + }, + a = A.getObjectsMap(); + for (var s in a) { + var l = a[s]; + if (void 0 === o || !0 === o) + for (var c = 0, h = t.length; h > c; c += 1) { + if (l.hasOwnProperty(m = t[c])) { + var d = l[m][0]; + n(d) + } + } + else { + for (var p = this.arrayToMap(t), g = A.getObjectIds(s), u = 0, f = g.length; f > u; u += 1) { + var m; + !p.hasOwnProperty(m = g[u]) && this.isActive(m) && n(d = l[m][0]) + } + p = null + } + } + }, + this.isIsolateTransparent = function (e) { + var t = A.getObjectsMap(); + for (var i in t) { + var o = t[i]; + if (o.hasOwnProperty(e) && this.isActive(e)) + return (o[e][0].state & Lc.TransparentByIsolate) > 0 + } + }, + this.clearIsolateHide = function () { + var e = A.getObjectsMap(); + for (var t in o = !1, + e) { + var i = A.getObjectIds(t); + i.length > 0 && this.setIsolateHide(i, !1) + } + }, + this.clearIsolates = function () { + var e = A.getObjectsMap(); + for (var t in r = !1, + o = !1, + e) { + var i = A.getObjectIds(t); + i.length > 0 && (this.setIsolateHide(i, !1), + this.setIsolateTransparent(i, !1)) + } + }, + this.clearTransparentByIsolate = function () { + var e = A.getObjectsMap(); + for (var t in r = !1, + e) + for (var i = e[t], o = A.getObjectIds(t), n = 0, a = o.length; a > n; n += 1) { + var s = o[n]; + if (this.isActive(s)) + i[s][0].state &= ~Lc.TransparentByIsolate + } + }, + this.isHidden = function (e) { + var t = A.getObjectsMap(); + for (var i in t) { + var o = t[i]; + if (o.hasOwnProperty(e)) { + var n = o[e][0], + r = 0 == (n.state & Lc.Visible); + return r = r || (n.state & Lc.HideByIsolate) > 0 + } + } + }, + this.isFrozen = function (e) { + var t = A.getObjectsMap(); + for (var i in t) { + var o = t[i]; + if (o.hasOwnProperty(e)) { + var n = o[e][0], + r = (n.state & Lc.Transparent) > 0; + return r = r || (n.state & Lc.TransparentByIsolate) > 0 + } + } + }, + this.resetAll = function () { + var t = A.getObjectsMap(); + for (var a in t) + for (var s = t[a], l = A.getObjectIds(a), c = 0, h = l.length; h > c; c += 1) { + var d = l[c]; + s[d][0].state = Lc.Visible, + this.isActive(d) && (s[d][0].material = null) + } + e = !1, + i = o = !1, + n = r = !1, + this.inactivatedIds.length > 0 && (i = !0) + }, + this.hasOverrideMaterial = function (t) { + var i = A.getObjectsMap(); + if (void 0 === t) + return e; + for (var o in i) { + var n = i[o]; + if (n.hasOwnProperty(t)) + return null !== n[t][0].material || this.isTransparent(t) + } + }, + this.hasOverrideMaterialForWireFrame = function (e) { + var i = A.getObjectsMap(); + if (null == e) + return t; + for (var o in i) { + var n = i[o]; + if (n.hasOwnProperty(e)) + return null !== n[e][0].wireFrameMaterial + } + }, + this.hasObjectInactivated = function () { + return this.inactivatedIds.length > 0 + }, + this.hasObjectHidden = function () { + return i || o + }, + this.hasObjectCantSelected = function () { + return this.hasObjectHidden() || this.hasObjectTransparent() || this.hasObjectInactivated() + }, + this.hasObjectTransparent = function () { + if (this.hasObjectInactivated()) { + var A = !1, + e = !0, + t = !1, + i = void 0; + try { + for (var o, a = this.inactivatedIds[Symbol.iterator](); !(e = (o = a.next()).done); e = !0) { + if (this.isTransparent(o.value)) { + A = !0; + break + } + } + } catch (A) { + t = !0, + i = A + } finally { + try { + !e && a.return && a.return() + } finally { + if (t) + throw i + } + } + return A + } + return n || r + }, + this.deactivateByIds = function (e) { + var t = !0, + o = !1, + n = void 0, + r = A.getObjectsMap(); + try { + for (var a, s = e[Symbol.iterator](); !(t = (a = s.next()).done); t = !0) { + var l = a.value; + for (var c in r) { + var h = r[c]; + if (h.hasOwnProperty(l)) + h[l][0].state &= ~Lc.Visible + } + this.inactivatedIdMap[l] = !0 + } + } catch (A) { + o = !0, + n = A + } finally { + try { + !t && s.return && s.return() + } finally { + if (o) + throw n + } + } + i = !0, + this.inactivatedIds = Object.keys(this.inactivatedIdMap) + }, + this.activateByIds = function (e) { + for (var t = A.getObjectsMap(), o = 0, n = e.length; n > o; o += 1) { + var r = e[o]; + for (var a in delete this.inactivatedIdMap[r], + t) { + var s = t[a]; + if (s.hasOwnProperty(r)) + s[r][0].state = Lc.Visible + } + } + this.inactivatedIds = Object.keys(this.inactivatedIdMap), + this.inactivatedIds.length > 0 && (i = !0) + }, + this.clearInactivatedIdMap = function () { + this.inactivatedIdMap = {}, + this.inactivatedIds = [] + }, + this.isActive = function (A) { + return !1 === this.bIsInactivateAll && !(!0 === this.inactivatedIdMap[A]) + }, + this.deactivateAll = function () { + this.bIsInactivateAll = !0 + }, + this.activateAll = function () { + this.bIsInactivateAll = !1 + }, + this.getInactivatedIdMap = function () { + return this.inactivatedIdMap + } + }, + Cu = function (A, e) { + Wg.call(this), + this.className = "OverrideConditionForWireFrameFA", + this.flag = A, + this.material = e + }; + (Cu.prototype = Object.create(Wg.prototype)).constructor = Cu, + Cu.prototype.applyFilter = function (A, e) { + console.log('applyFilter :>ddfdff> '); + var t = this; + this.conditions instanceof Array ? A.matchConditions(this.conditions, (function (e, i) { + t.flag === i && (A.setWireFrameMaterial(e, t.material), + e = null) + })) : Bh.warn("Conditions should be type of array.") + }; + var yu = function (A, e) { + Gg.call(this), + this.className = "OverrideIdsForWireFrameFA", + this.flag = A, + this.material = e + }; + (yu.prototype = Object.create(Gg.prototype)).constructor = yu, + yu.prototype.applyFilter = function (A) { + console.log('applyFilter :dfasfsa>> '); + this.ids instanceof Array ? A.setWireFrameMaterial(this.ids, this.material, this.flag) : Bh.warn("Ids should be type of array.") + }; + var vu = function () { + function A(e, t) { + cc(this, A), + this.id = e, + this.object = t + } + return dc(A, [{ + key: "destroy", + value: function () { + this.object = null + } + }, { + key: "_inDistanceRange", + value: function (A, e) { + return A >= e.near && e.far >= A + } + }, { + key: "raycast", + value: function (A, e, t, i, o) {} + }]), + A + }(); + vu.prototype.destroy = function () {}; + var Iu = function (A) { + function e(A, t) { + return cc(this, e), + Cc(this, fc(e).call(this, A, t)) + } + return uc(e, A), + dc(e, [{ + key: "raycast", + value: function (A, e, t, i, o, n) { + var r = []; + if (this.object.raycast(A, r), + r.length > 0) { + r.sort((function (A, e) { + return A.distance - e.distance + })); + for (var a = 0, s = r.length; s > a; a += 1) { + var l = r[a]; + if (this._inDistanceRange(l.distance, t) && !i.clipPoint(l.point)) { + n || (t.far = l.distance - uh.MinusEpsilon), + o.push(l); + break + } + } + } + } + }]), + e + }(vu), + Eu = function (A) { + function e(A, t) { + return cc(this, e), + Cc(this, fc(e).call(this, A, t)) + } + return uc(e, A), + dc(e, [{ + key: "raycast", + value: function (A, e, t, i, o, n) { + var r = this.object, + a = r._indicesGroup; + if (a) { + var s = a[e.userId]; + if (s) { + for (var l, c = !1, h = 0, d = s.length; d > h; h += 1) + if (s[h].nodeId === e.nodeId) { + l = s[h], + c = !0; + break + } + if (c) { + var p = []; + if (r.raycastByIndices(A, p, l), + p.length > 0) { + p.sort((function (A, e) { + return A.distance - e.distance + })); + for (var g = 0, u = p.length; u > g; g += 1) { + var f = p[g]; + if (this._inDistanceRange(f.distance, t) && !i.clipPoint(f.point)) { + n || (t.far = f.distance - uh.MinusEpsilon), + f.userId = l.userId, + f.indexInfo = l, + o.push(f); + break + } + } + } + } + } + } + } + }]), + e + }(vu), + Bu = function (A) { + function e(A, t) { + return cc(this, e), + Cc(this, fc(e).call(this, A, t)) + } + return uc(e, A), + dc(e, [{ + key: "raycast", + value: function (A, e, t, i, o, n) { + var r = []; + if (this.object.raycastByIndices(A, r, null, e.matrix), + r.length > 0) { + r.sort((function (A, e) { + return A.distance - e.distance + })); + for (var a = 0, s = r.length; s > a; a += 1) { + var l = r[a]; + if (this._inDistanceRange(l.distance, t) && !i.clipPoint(l.point)) { + n || (t.far = l.distance - uh.MinusEpsilon), + l.userId = e.userId, + l.matrix = e.matrix, + o.push(l); + break + } + } + } + } + }]), + e + }(vu), + xu = function () { + this._filterImpl = new pu; + var A = [], + e = [], + t = null, + i = null, + o = this._filterImpl.getMaterialSelector(), + n = new mu, + r = new uu, + a = new gu(o); + this.observerForSceneState = null, + this.setObserverForSceneState = function (A) { + this.observerForSceneState = A + }, + this.setSceneStateHelper = function (A) {}, + this.getFilterActionList = function () { + return A + }, + this.getModelFilterActionList = function () { + return e + }, + this.addModel = function (A) { + r.add(A) + }, + this.removeModel = function (A) { + r.remove(A) + }, + this.clearFilterActionList = function () { + A = [] + }, + this.clearModelFilterActionList = function () { + e = [] + }, + this.initFilterManager = function (A) { + n.init(A) + }, + this.reinitFilterManager = function (A) { + n.reinit(A) + }, + this.clearFilterManager = function () { + n.clearData() + }; + var s = !1; + this.isStateChanged = function () { + return s + }, + this.enableStateChanged = function () { + s = !0 + }, + this.disableStateChanged = function () { + s = !1 + }, + this.getIsolateFilterAction = function () { + return t + }, + this.getModelIsolateFilterAction = function () { + return i + }, + this.setIsolateAction = function (A) { + (t = A).apply() + }, + this.getVisibleComponentsBbox = function () { + return n.getVisibleComponentsBbox() + }, + this.pushBack = function (e) { + var i = e.getClassName(); + "IsolateIdsFA" === i || "IsolateConditionFA" === i ? t = e : A.push(e), + s = !0, + e.applyFilter(n) + }, + this.pushModelBack = function (A) { + var t = A.getClassName(); + "IsolateIdsFA" === t || "IsolateConditionFA" === t ? i = A : e.push(A), + s = !0, + A.applyFilter(r) + }; + var l = function (e) { + for (var t = [], i = 0; A.length > i;) { + var o = A[i]; + e === o.getClassName() ? (t = t.concat(o.ids), + A.splice(i, 1)) : i += 1 + } + return t + }, + c = function (A) { + for (var t = 0; e.length > t;) { + A === e[t].getClassName() ? e.splice(t, 1) : t += 1 + } + }; + + function h(A, e) { + var t = e || ""; + return A.map((function (A) { + var e = A.clone(); + for (var i in e.name += "_" + t, + A) + A.hasOwnProperty(i) && (A[i] instanceof d || A[i] instanceof ut) && (e[i] = A[i].clone(), + e[i].needsUpdate = !0); + return e + })) + } + + function p(A, e, t, i, o, n, r) { + var a = Boolean(r || 0 === r), + s = []; + a && !Array.isArray(r) && (r = [r]); + var l = !0, + c = !1, + h = void 0; + try { + for (var d, p = o[Symbol.iterator](); !(l = (d = p.next()).done); l = !0) { + var g = d.value; + A._filterImpl.getMaterialByName(g.name) || A._filterImpl.addOverrideMaterial(g) + } + } catch (A) { + c = !0, + h = A + } finally { + try { + l || null == p.return || p.return() + } finally { + if (c) + throw h + } + } + var u = t[0], + f = u.materialId; + if (u.originMId === f && (u.originMId = [].concat(f)), + null === u.material) + for (var m = 0, C = f.length; C > m; m += 1) + s[m] = e.models[u.model.modelKey].materialManager.getMaterialById(f[m]); + else + s = u.material; + for (var y = null, v = null, I = 0, E = s.length; E > I; I += 1) { + if (a) { + if (!r[I]) + break; + y = r[I].compMatOrder, + v = r[I].replMatOrder + } else + y = v = I; + if (!o[v] || y >= o.length) { + o[v] ? console.log('构件材质数组越界,越界位置:{"componentKey":'.concat(i, ',"order":').concat(y, "}")) : console.log('替换材质数组越界,越界位置:{"componentKey":'.concat(i, ',"order":').concat(v, "}")); + break + } + s[y] = o[v], + f[y] = o[v].name + } + var B = new qg(!0, s); + B.ids = [u.componentKey], + n[u.componentKey] = s, + A.pushBack(B) + } + + function g(A, e, t, i, o, n, r) { + var a, s = []; + (a = Boolean(r || 0 === r)) && !Array.isArray(r) && (r = [r]); + var l = !0, + c = !1, + h = void 0; + try { + for (var d, p = o[Symbol.iterator](); !(l = (d = p.next()).done); l = !0) { + A._filterImpl.updateOverrideMaterial(d.value) + } + } catch (A) { + c = !0, + h = A + } finally { + try { + l || null == p.return || p.return() + } finally { + if (c) + throw h + } + } + for (var g = 0, u = t.length; u > g; g += 1) { + var f = t[g], + m = t[0].material; + if (null === m) + s[g] = e.models[f.model.modelKey].materialManager.getMaterialById(f.materialId), + s[g].materialId = f.materialId; + else if (Array.isArray(m)) { + s[g] = m[g] + } else + s[g] = m + } + for (var C = null, y = null, v = 0, I = s.length; I > v; v += 1) { + if (a) { + if (!r[v]) + break; + C = r[v].compMatOrder, + y = r[v].replMatOrder + } else + C = y = v; + if (!o[y] || C >= t.length) { + o[y] ? console.log('构件材质数组越界,越界位置:{"componentKey":'.concat(i, ',"order":').concat(C, "}")) : console.log('替换材质数组越界,越界位置:{"componentKey":'.concat(i, ',"order":').concat(y, "}")); + break + } + var E = t[C].nodeId, + B = s[C].mapNodeIdToOrigMatId && s[C].mapNodeIdToOrigMatId[E] ? s[C].mapNodeIdToOrigMatId[E] : s[C].materialId; + t[C].mesh.geometry.getAttribute("uv") || null === o[y].map && null === o[y].aoMap ? (s[C] = o[y], + s[C].mapNodeIdToOrigMatId || (s[C].mapNodeIdToOrigMatId = {}), + s[C].materialId = o[y].name, + s[C].mapNodeIdToOrigMatId[E] = B) : console.log('构件node缺少uv:{"componentKey":'.concat(i, ',"order":').concat(y, ",nodeId:").concat(t[C].nodeId, "}")) + } + var x = new qg(!0, s); + x.ids = [i], + n && (n[i] = s), + A.pushBack(x) + } + + function u(A, e, t) { + var i = A.models[e], + o = i._handler.defaultManager.meshManager, + n = i._handler.instancedManager.meshManager, + r = i.loader.getDescriptor(), + a = n.getNodeIdxMapByUserId(t), + s = i.group.children.find((function (A) { + return "Geometry" === A.name + })); + s || ((s = new Xi).name = "Geometry", + i.group.add(s)); + var l = new Xi, + c = []; + s.add(l); + var h = r.mapNodeInfoByComponentKey[t], + d = function (r) { + var s = a[r][0], + d = n.getInstanceGeometries(r); + d[0].attributes.vState.array[s] = -1, + d[0].attributes.vState.needsUpdate = !0; + var p = new he; + d[0].removed || (d[0].removed = {}), + d[0].removed[s] = !0; + for (var g = d[0].attributes.position.array, u = [], f = new y, m = n.matrixInfoMapFromUserId[t][r][0].matrix, C = 0, v = g.length; v > C; C += 3) + f.set(g[C], g[C + 1], g[C + 2]).applyMatrix4(m), + u.push(f.x, f.y, f.z); + d[0].attributes.uv && p.setAttribute("uv", d[0].attributes.uv.clone()), + d[0].attributes.normal && p.setAttribute("normal", d[0].attributes.normal.clone()); + var I = d[0].index.clone(); + p.setAttribute("position", new YA(new Float32Array(u), 3)), + p.setIndex(I); + var E = n.getMaterialIdByMeshId(r), + B = n.manager.model.materialManager.getInstanceMaterialById(E)[0], + x = Kd.getMaterialParameters(B), + S = Kd.createStandardMaterial(x), + w = new Ue(p, S), + M = r.split("&")[1], + b = E + "_" + s + "_cm", + U = "", + F = !0, + K = !1, + Q = void 0; + try { + for (var R, T = h[Symbol.iterator](); !(F = (R = T.next()).done); F = !0) { + var k = R.value; + k.geometryId !== M && k.geometryId.toString() !== M || (U = k.nodeId, + k.instanceOrNot = !1, + k.isBatched = !1, + k.mesh = w, + k.instancedRenderOrder = s, + k.RenderTypeChange = !0, + k.materialId = b, + k.uv = !0, + c.push(k)) + } + } catch (A) { + K = !0, + Q = A + } finally { + try { + F || null == T.return || T.return() + } finally { + if (K) + throw Q + } + } + var D = b + "&1&meshes"; + l.add(w), + w.geometry.computeBoundingBox(), + w.modelKey = e; + var L = pc({}, t, [{ + boundingBox: w.geometry.boundingBox, + indexCount: I.count, + indexStart: 0, + lightmapIdx: void 0, + nodeId: U, + positionCount: p.attributes.position.count, + positionStart: 0, + userId: t + }]); + o.mapMaterialIdToMergedNode[D] = [{ + geometry: p, + indices: L, + mesh: w, + RenderTypeChange: !0 + }], + w._indicesGroup = L, + w.computeBoundingBox = function () { + var A = this.matrixWorld, + e = new aA; + return e.copy(this.geometry.boundingBox), + e.applyMatrix4(A), + e + }, + w.intersectBoxWithDistanceByIndices = function (A) { + return A.ray.intersectBoxWithDistance(this.computeBoundingBox()) + }, + w.raycastByIndices = function (A, e) { + w.raycast(A, e) + }, + i.materialManager.materials[b] = S, + A.addMeshToOctantMap(e, D, new Eu(D, w)) + }; + for (var p in a) + d(p); + return A.octantToObjectMap[e].info[t] = c, + r.mapNodeInfoByCategory[1] || (r.mapNodeInfoByCategory[1] = {}), + r.mapNodeInfoByCategory[1][t] = c, + delete r.instancedComponent[t], + delete r.mapNodeInfoByCategory[0][t], + delete n.nodeIdxMapFromUserId[t], + o.getPickingNodeGenerator().clearData(), + l + } + this.showAll = function () { + l("VisibleIdsFA"), + l("VisibleConditionFA"), + n.clearVisible(), + n.calculateVisibleComponentsBbox(), + this.enableStateChanged() + }, + this.showAllModel = function () { + c("VisibleIdsFA"), + r.clearVisible(), + this.enableStateChanged() + }, + this.hideAll = function () { + var A = new Pg(!1, !1); + A.ids = [], + this.pushBack(A) + }, + this.hideAllModel = function () { + var A = new Pg(!1, !1); + A.ids = [], + this.pushModelBack(A) + }, + this.getObjectInfoManager = function () { + return n + }, + this.getModelInfoManager = function () { + return r + }, + this.getMatchIds = function (A) { + return n.getMatchIds(A) + }, + this._isVisible = function (A) { + return !n.isHidden(A.userId) + }, + this._isModelVisible = function (A) { + return !r.isHidden(A) + }, + this._isTransparent = function (A) { + return n.isTransparent(A.userId) + }, + this._isModelTransparent = function (A) { + return r.isTransparent(A) + }, + this._isModelPickable = function (A) { + return !r.isFrozen(A) || vc.EnableSelectionByTranslucent + }, + this._isSelectable = function (A) { + if (vc.EnableSelectionByTranslucent) + return !0; + var e = A.userId; + return !n.isFrozen(e) && this._filterImpl._isSelectableById(e) + }, + this._isPickable = function (A) { + var e = A.userId; + return this.isComponentActive(e) && this._filterImpl._isSelectableById(e) && (!n.isFrozen(e) || vc.EnableSelectionByTranslucent) + }, + this._isSelectableById = function (A) { + return !!vc.EnableSelectionByTranslucent || !n.isFrozen(A) && this._filterImpl._isSelectableById(A) + }, + this._getOverrideMaterial = function (A) { + var e = A.userId; + return n.isFrozen(e) ? this._filterImpl.getFrozonMaterial() : n.getMaterial(e) + }, + this._getModelOverrideMaterial = function (A) { + return r.isFrozen(A) ? this._filterImpl.getFrozonMaterial() : r.getMaterial(A) + }, + this._getMaterialName = function (A) { + return this._filterImpl._getMaterialName(A) + }, + this._getMaterialByName = function (A) { + return this._filterImpl._getMaterialByName(A) + }, + this._hasOverrideMaterial = function (A) { + return n.hasOverrideMaterial(A.userId) + }, + this._hasModelOverrideMaterial = function (A) { + return r.hasOverrideMaterial(A) + }, + this._hasHighPriorityOverrideMaterial = function (A) { + return this._filterImpl._hasHighPriorityOverrideMaterial(A) + }, + this._isHiddenFileId = function (A) { + return this._filterImpl._isHiddenFileId(A) + }, + this._isRenderPromotion = function (A) { + return this._filterImpl._isRenderPromotion(A) + }, + this._isRenderWithBoardline = function (A) { + return this._filterImpl._isRenderWithBoardline(A) + }, + this._hasHiddenFileIdFilter = function () { + return this._filterImpl._hasHiddenFileIdFilter() + }, + this._hasVisibleFilter = function () { + return n.hasObjectHidden() + }, + this._hasPickableFilter = function () { + return n.hasObjectCantSelected() || this._filterImpl._hasPickableFilter() + }, + this._hasTransparentFilter = function () { + return n.hasObjectTransparent() + }, + this._hasOverrideMaterialFilter = function () { + return n.hasOverrideMaterial() + }, + this._hasModelVisibleFilter = function () { + return r.hasObjectHidden() + }, + this._hasModelSelectableFilter = function () { + return r.hasObjectCantSelected() + }, + this._hasModelTransparentFilter = function () { + return r.hasObjectTransparent() + }, + this._hasModelOverrideMaterialFilter = function () { + return r.hasOverrideMaterial() + }, + this._hasLowPriorityOverride = function () { + return this._filterImpl._hasLowPriorityOverride() + }, + this._hasRenderPromotionFilter = function () { + return this._filterImpl._hasRenderPromotionFilter() + }, + this._hasRenderWithBoardlineFilter = function () { + return this._filterImpl._hasRenderWithBoardlineFilter() + }, + this.saveState = function () { + return a.saveState(this) + }, + this.loadState = function (A) { + a.loadState(A, this) + }, + this.clear = function () { + n.resetAll(), + s = !0 + }, + this.clearAll = function () { + return this.enableStateChanged(), + this._filterImpl.clearAll() + }, + this.clearIsolate = function () { + n.clearIsolates() + }, + this.clearFrozenList = function () { + return this.enableStateChanged(), + this._filterImpl.clearFrozenList() + }, + this.addToFrozenList = function (A) { + return this.enableStateChanged(), + this._filterImpl.addToFrozenList(A) + }, + this.removeFromFrozenList = function (A) { + return this.enableStateChanged(), + this._filterImpl.removeFromFrozenList(A) + }, + this.setFrozenList = function (A) { + return this.enableStateChanged(), + this._filterImpl.setFrozenList(A) + }, + this.setFrozenConditions = function (A) { + this.enableStateChanged(), + this._filterImpl.setFrozenConditions(A) + }, + this.getFrozenConditions = function () { + return this._filterImpl.getFrozenConditions() + }, + this.clearFrozenConditions = function () { + this.enableStateChanged(), + this._filterImpl.clearFrozenConditions() + }, + this.clearFrozen = function () { + this.enableStateChanged(), + this.clearFrozenList(), + this.clearFrozenConditions() + }, + this.clearAllIdList = function () { + return this.enableStateChanged(), + this._filterImpl.clearAllIdList() + }, + this.clearIdList = function (A) { + return this.enableStateChanged(), + this._filterImpl.clearIdList(A) + }, + this.addToIdList = function (A, e) { + return this.enableStateChanged(), + this._filterImpl.addToIdList(A, e) + }, + this.removeFromIdList = function (A, e) { + return this.enableStateChanged(), + this._filterImpl.removeFromIdList(A, e) + }, + this.setIdList = function (A, e) { + return this.enableStateChanged(), + this._filterImpl.setIdList(A, e) + }, + this.clearAllOverrideList = function () { + l("OverrideIdsFA"), + l("OverrideConditionFA"), + n.clearMaterial(); + for (var e = 0, t = A.length; t > e; e += 1) { + var i = A[e]; + "WireframeIdsFA" === i.getClassName() && i.applyFilter(n) + } + this.enableStateChanged() + }, + this.clearModelAllOverrideList = function () { + c("OverrideIdsFA"), + r.clearMaterial(), + this.enableStateChanged() + }, + this.clearOverrideList = function (A) { + return this.enableStateChanged(), + this._filterImpl.clearOverrideList(A) + }, + this.addToOverrideList = function (A, e, t) { + return this.enableStateChanged(), + this._filterImpl.addToOverrideList(A, e, t) + }, + this.removeFromOverrideList = function (A, e) { + return this.enableStateChanged(), + this._filterImpl.removeFromOverrideList(A, e) + }, + this.setOverrideList = function (A, e, t) { + return this.enableStateChanged(), + this._filterImpl.setOverrideList(A, e, t) + }, + this.addToOverrideListByColor = function (A, e) { + var t = null; + if (e) { + var i = this._filterImpl.getMaterialNameByColor(e); + t = this._filterImpl.getMaterialByName(i) + } + var o = new qg(!0, t); + o.ids = A, + this.pushBack(o) + }, + this.addToOverrideListByCustomerMaterial = function (A, e, t, i, o) { + var n = this, + r = {}; + Array.isArray(t) || (t = [t]); + var a = t; + return e.forEach((function (e) { + for (var s in e) + i || (a = h(t, s)), + e[s][0].isBatched || e[s][0].instanceOrNot || e[s][0].RenderTypeChange ? !e[s][0].instanceOrNot && e[s][0].isBatched || e[s][0].RenderTypeChange ? g(n, A, e[s], s, a, r, o) : e[s][0].instanceOrNot && e[s][0].isBatched && (u(A, e[s][0].model.modelKey, s), + g(n, A, e[s], s, a, r, o)) : p(n, A, e[s], s, a, r, o) + })), + r + }, + this.addToModelOverrideListByColor = function (A, e) { + var t = null; + if (e) { + var i = this._filterImpl.getMaterialNameByColor(e); + t = this._filterImpl.getMaterialByName(i) + } + var o = new qg(!0, t); + o.ids = A, + this.pushModelBack(o) + }, + this.addToOverrideListByConditions = function (A, e) { + var t = null; + if (e) { + var i = this._filterImpl.getMaterialNameByColor(e); + t = this._filterImpl.getMaterialByName(i) + } + var o = new zg(!0, t); + o.conditions = A, + this.pushBack(o) + }, + this.addToOverrideListByConditions = function (A, e) { + var t = null; + if (e) { + var i = this._filterImpl.getMaterialNameByColor(e); + t = this._filterImpl.getMaterialByName(i) + } + var o = new zg(!0, t); + o.conditions = A, + this.pushBack(o) + }, + this.addToOverrideListByMaterial = function (A, e) { + this._filterImpl.addOverrideMaterial(e); + var t = new zg(!0, e); + t.conditions = A, + this.pushBack(t) + }, + this.setOverrideListByColor = function (A, e, t) { + for (var i = 0; e.length > i; i += 1) { + var o = this._filterImpl.getMaterialNameByColor(t), + r = this._filterImpl.getMaterialByName(o); + n.setMaterial(e[i], r) + } + }, + this.getVisibleComponentSet = function (A) { + for (var e = {}, t = Object.keys(A), i = 0; t.length > i; i += 1) + this._isVisible({ + userId: t[i] + }) && (e[t[i]] = !0); + return e + }, + this.clearAllWireframeList = function () { + n.clearMaterialByKey(l("WireframeIdsFA")), + this.enableStateChanged() + }, + this.addToWireframeByWireframe = function (A, e) { + var t = null; + if (e) { + var i = this._filterImpl.getMaterialNameByWireframe(e); + t = this._filterImpl.getMaterialByName(i) + } + var o = new jg(!0, t); + o.ids = A, + this.pushBack(o) + }, + this.clearAllUserList = function () { + return this.enableStateChanged(), + this._filterImpl.clearAllUserList() + }, + this.clearUserListByType = function (A) { + return this.enableStateChanged(), + this._filterImpl.clearUserListByType(A) + }, + this.clearUserList = function (A, e) { + return this.enableStateChanged(), + this._filterImpl.clearUserList(A, e) + }, + this.addToUserList = function (A, e, t, i) { + return this.enableStateChanged(), + this._filterImpl.addToUserList(A, e, t, i) + }, + this.removeFromUserList = function (A, e, t) { + this.enableStateChanged(), + this._filterImpl.removeFromUserList(A, e, t) + }, + this.setUserList = function (A, e, t, i) { + this.enableStateChanged(), + this._filterImpl.setUserList(A, e, t, i) + }, + this.isIsolate = function () { + var A = n.getObjectsMap(); + for (var e in A) { + if (A.hasOwnProperty(e)) + var t = A[e]; + for (var i in t) { + var o = n.isIsolateHide(i); + if (o |= n.isIsolateTransparent(i)) + return !0 + } + } + return !1 + }, + this.isFiltering = function () { + var A = this.filterActionList.length > 0; + return this.isIsolate() || A + }, + this.getFrozonMaterial = function () { + return this._filterImpl.getFrozonMaterial() + }, + this.setIsolateMaterial = function (A) { + this.enableStateChanged(), + this._filterImpl.setIsolateMaterial(A) + }, + this.getIsolateMaterial = function () { + return this._filterImpl.getIsolateMaterial() + }, + this.resetIsolateMaterial = function () { + this.enableStateChanged(), + this._filterImpl.resetIsolateMaterial() + }, + this.clearAllIsolateList = function () { + n.clearIsolates() + }, + this.clearIsolation = function () { + n.clearIsolates(), + t = null, + s = !0 + }, + this.clearModelIsolation = function () { + r.clearIsolates(), + i = null, + s = !0 + }, + this.addToIsolateList = function (A, e) { + var t = new Hg("HideOthers" === e); + t.ids = A.concat(), + this.pushBack(t), + this.clearFilterActionList() + }, + this.removeFromIsolateList = function (A) { + t && Array.isArray(A) && (A.forEach((function (A) { + t.ids.remove(A) + })), + 1 > t.ids.length ? (n.clearIsolates(), + t = null) : t.applyFilter(n), + this.enableStateChanged()) + }, + this.removeModelFromIsolateList = function (A) { + i && Array.isArray(A) && (A.forEach((function (A) { + i.ids.remove(A) + })), + 1 > i.ids.length ? (r.clearIsolates(), + i = null) : i.applyFilter(r), + this.enableStateChanged()) + }, + this.setIsolateList = function (A, e) { + var t = new Hg(e); + t.ids = A.concat(), + this.pushBack(t) + }, + this.setModelIsolateList = function (A, e) { + var t = new Hg(e); + t.ids = A.concat(), + this.pushModelBack(t) + }, + this.setIsolateConditions = function (A, e) { + var t = new Xg(e === Nc.HIDDEN_OTHERS); + t.conditions = A, + this.pushBack(t), + this.clearFilterActionList() + }, + this.getIsolateConditions = function (A) { + return this._filterImpl.getIsolateConditions(A) + }, + this.clearIsolateConditions = function (A) { + this.enableStateChanged(), + this._filterImpl.clearIsolateConditions(A) + }, + this.clearAllIsolateConditions = function () { + this.enableStateChanged(), + this._filterImpl.clearAllIsolateConditions() + }, + this.setConditions = function (A, e) { + if (0 === A) { + n.hideAll(); + var t = new Jg(!0, !0); + t.conditions = e, + this.pushBack(t) + } + 3 === A && this._filterImpl.setConditions(A, e) + }, + this.getConditions = function (A) { + return this._filterImpl.getConditions(A) + }, + this.clearConditions = function (A) { + this.enableStateChanged(), + this._filterImpl.clearConditions(A) + }, + this.clearAllConditions = function () { + this.enableStateChanged(), + this._filterImpl.clearAllConditions() + }, + this.makeSceneTranslucent = function () { + this.enableStateChanged(), + this._filterImpl.makeSceneTranslucent() + }, + this.cancelSceneTranslucent = function () { + this.enableStateChanged(), + this._filterImpl.cancelSceneTranslucent() + }, + this.hideScene = function () { + this.enableStateChanged(), + this._filterImpl.hideScene() + }, + this.showScene = function () { + this.enableStateChanged(), + this._filterImpl.showScene() + }, + this.setSceneState = function (A) { + this.enableStateChanged(), + this._filterImpl.setSceneState(A) + }, + this.getSceneState = function () { + return this._filterImpl.getSceneState() + }, + this.cancelHidden = function () { + this.enableStateChanged(), + this._filterImpl.cancelHidden() + }, + this.cancelTranslucent = function () { + this.enableStateChanged(), + this._filterImpl.cancelTranslucent() + }, + this.hideByIds = function (A) { + var e = new Pg(!0, !1); + e.ids = A, + this.pushBack(e) + }, + this.hideModelByIds = function (A) { + var e = new Pg(!0, !1); + e.ids = A, + this.pushModelBack(e) + }, + this.hideByConditions = function (A) { + var e = new Jg(!0, !1); + e.conditions = A, + this.pushBack(e) + }, + this.hideOthersByConditions = function (A) { + var e = new Jg(!1, !1); + e.conditions = A, + this.pushBack(e) + }, + this.showByIds = function (A) { + var e = new Pg(!0, !0); + e.ids = A, + this.pushBack(e) + }, + this.showModelByIds = function (A) { + var e = new Pg(!0, !0); + e.ids = A, + this.pushModelBack(e) + }, + this.showByConditions = function (A) { + var e = new Jg(!0, !0); + e.conditions = A, + this.pushBack(e) + }, + this.makeTranslucentByIds = function (A) { + var e = new Yg(!0, !1); + e.ids = A, + this.pushBack(e) + }, + this.makeModelTranslucentByIds = function (A) { + var e = new Yg(!0, !1); + e.ids = A, + this.pushModelBack(e) + }, + this.makeTranslucentByConditions = function (A) { + var e = new Zg(!0, !1); + e.conditions = A, + this.pushBack(e) + }, + this.opaqueByIds = function (A) { + var e = new Yg(!0, !0); + e.ids = A, + this.pushBack(e) + }, + this.opaqueModelByIds = function (A) { + var e = new Yg(!0, !0); + e.ids = A, + this.pushModelBack(e) + }, + this.opaqueByConditions = function (A) { + var e = new Zg(!0, !0); + e.conditions = A, + this.pushBack(e) + }, + this.setFrozonMaterial = function (A) { + this._filterImpl.setFrozonMaterial(A) + }, + this.makeTranslucentOthersByIds = function (A) { + var e = new Yg(!1, !1); + e.ids = A, + this.pushBack(e) + }, + this.makeTranslucentOthersModelByIds = function (A) { + var e = new Yg(!1, !1); + e.ids = A, + this.pushModelBack(e) + }, + this.opaqueAll = function () { + l("TransparentIdsFA"), + l("TransparentConditionFA"), + n.clearTransparent(), + this.enableStateChanged() + }, + this.opaqueAllModel = function () { + c("TransparentIdsFA"), + c("TransparentConditionFA"), + r.clearTransparent(), + this.enableStateChanged() + }, + this.deactivateByIds = function (A) { + n.deactivateByIds(A), + this.observerForSceneState && this.observerForSceneState(A), + this.enableStateChanged() + }, + this.activateByIds = function (A) { + n.activateByIds(A), + this.enableStateChanged() + }, + this.clearInactivatedIdMap = function () { + n.clearInactivatedIdMap() + }, + this.getInactivatedIdMap = function () { + return n.getInactivatedIdMap() + }, + this.deactivateAll = function () { + n.deactivateAll() + }, + this.activateAll = function () { + n.activateAll() + }, + this.isComponentActive = function (A) { + return n.isActive(A) + }, + this.getFilterType = function () { + return this._filterImpl._getFilterType() + }, + this._hasOverrideMaterialForWireFrame = function (A) { + return n.hasOverrideMaterialForWireFrame(A.name) + }, + this._hasOverrideMaterialFilterForWireFrame = function () { + return n.hasOverrideMaterialForWireFrame() + }, + this._getOverrideMaterialForWireFrame = function (A) { + return n.getWireFrameMaterial(A.name) + }, + this._getOverrideWireFrameMaterial = function (A) { + return n.getWireFrameMaterial(A.name) + }, + this.addToOverrideListForWireFrameByColor = function (A, e) { + var t = null; + if (e) { + var i = this._filterImpl.getMaterialNameByColor(e); + t = this._filterImpl.getMaterialByName(i) + } + var o = new yu(!0, t); + o.ids = A, + this.pushBack(o) + }, + this.addToOverrideListForWireFrameByConditions = function (A, e) { + var t = null; + if (e) { + var i = this._filterImpl.getMaterialNameByColor(e); + t = this._filterImpl.getMaterialByName(i) + } + var o = new Cu(!0, t); + o.conditions = A, + this.pushBack(o) + }, + this._getFilterObjectsKeys = function (A) { + return this._filterImpl._getFilterObjectsKeys(A) + }, + this.transparentComponentsByKey = function (A, e, t) {}, + this.closeOrigMatModelTransparent = function (A, e) { + var t = A.models[e].materialManager.materials; + for (var i in t) { + var o = t[i]; + void 0 !== o._origTransparent && (o.transparent = o._origTransparent, + o.needsUpdate = !0), + void 0 !== o._origOpacity && (o.opacity = o._origOpacity, + o.needsUpdate = !0) + } + var n = A.models[e].materialManager.instanceMaterials; + for (var r in n) + n[r].forEach((function (A) { + void 0 !== A._origTransparent && (A.transparent = A._origTransparent, + A.needsUpdate = !0), + void 0 !== A._origOpacity && (A.opacity = A._origOpacity, + A.needsUpdate = !0) + })) + }, + this.transparentModelOrigMatByKey = function (A, e) { + var t = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : .5, + i = A.models[e].materialManager.materials; + for (var o in i) { + var n = i[o]; + void 0 === n._origTransparent && (n._origTransparent = n.transparent), + void 0 === n._origOpacity && (n._origOpacity = n.opacity), + n.transparent = !0, + n.opacity = t, + n.needsUpdate = !0 + } + var r = A.models[e].materialManager.instanceMaterials; + for (var a in r) + r[a].forEach((function (A) { + void 0 === A._origTransparent && (A._origTransparent = A.transparent), + void 0 === A._origOpacity && (A._origOpacity = A.opacity), + A.transparent = !0, + A.opacity = t, + A.needsUpdate = !0 + })) + } + }; + var Su = function (A) { + ji.call(this), + this.type = "InstancedDepthMaterial", + this.uniforms = it.depth.uniforms, + this.vertexShader = function (A) { + return A.replace("#include ", "\n vec4 mvPosition = modelViewMatrix * vec4(getInstancePosition(transformed), 1.0);\n gl_Position = projectionMatrix * mvPosition;\n ") + }(it.depth.vertexShader.replace("void main() {", "\n attribute float vState; \n attribute vec4 aColor; \n attribute vec3 mcol0;\n attribute vec3 mcol1;\n attribute vec3 mcol2;\n attribute vec3 mcol3;\n #if defined(USE_MAP)\n attribute vec2 muvCol0;\n attribute vec2 muvCol1;\n attribute vec2 muvCol2;\n #endif\n \n varying float vfState;\n \n vec3 getInstancePosition(vec3 position) {\n return vec3(mat4(vec4(mcol0, 0.0),\n vec4(mcol1, 0.0),\n vec4(mcol2, 0.0),\n vec4(mcol3, 1.0)) * vec4(position, 1.0));\n }\n \n void main() {\n vfState = vState;\n ")), + this.fragmentShader = it.depth.fragmentShader.replace("void main() {", "\n varying float vfState; \n void main() {\n if (vfState <= -0.99 && vfState >= -1.01) discard;\n \n "), + void 0 !== A && this.setValues(A) + }; + + function wu(A, e, t) { + var i = this, + o = !1, + n = 0, + r = 0, + a = void 0, + s = []; + this.onStart = void 0, + this.onLoad = A, + this.onProgress = e, + this.onError = t, + this.itemStart = function (A) { + r += 1, + !1 === o && void 0 !== i.onStart && i.onStart(A, n, r), + o = !0 + }, + this.itemEnd = function (A) { + n += 1, + void 0 !== i.onProgress && i.onProgress(A, n, r), + n === r && (o = !1, + void 0 !== i.onLoad && i.onLoad()) + }, + this.itemError = function (A) { + void 0 !== i.onError && i.onError(A) + }, + this.resolveURL = function (A) { + return a ? a(A) : A + }, + this.setURLModifier = function (A) { + return a = A, + this + }, + this.addHandler = function (A, e) { + return s.push(A, e), + this + }, + this.removeHandler = function (A) { + var e = s.indexOf(A); + return -1 !== e && s.splice(e, 2), + this + }, + this.getHandler = function (A) { + for (var e = 0, t = s.length; t > e; e += 2) { + var i = s[e], + o = s[e + 1]; + if (i.global && (i.lastIndex = 0), + i.test(A)) + return o + } + return null + } + } + (Su.prototype = Object.create(ji.prototype)).constructor = Su; + var Mu = new wu, + bu = function (A) { + this.manager = null != A ? A : Mu, + this.model = A.model, + this.cacheViable = !0, + this.modelKey = A.model.modelKey + }; + Object.assign(bu.prototype, { + _load: function (A, e, t, i) { + void 0 === A && (A = ""), + null != this.path && (A = this.path + A); + var o = this, + n = A.match(/^data:(.*?)(;base64)?,(.*)$/); + if (n) { + var r = n[1], + a = Boolean(n[2]), + s = n[3]; + s = window.decodeURIComponent(s), + a && (s = window.atob(s)); + try { + var l = null, + c = (this.responseType || "").toLowerCase(); + switch (c) { + case "arraybuffer": + case "blob": + l = new ArrayBuffer(s.length); + for (var h = new Uint8Array(l), d = 0; s.length > d; d += 1) + h[d] = s.charCodeAt(d); + "blob" === c && (l = new Blob([l], { + type: r + })); + break; + case "document": + var p = new DOMParser; + l = p.parseFromString(s, r); + break; + case "json": + l = JSON.parse(s); + break; + default: + l = s + } + window.setTimeout((function () { + e && e(l), + o.manager.itemEnd(A) + }), 0) + } catch (e) { + window.setTimeout((function () { + i && i(e), + o.manager.itemEnd(A), + o.manager.itemError(A) + }), 0) + } + } else { + var g = new XMLHttpRequest; + for (var u in g.open("GET", A, !0), + g.addEventListener("load", (function (t) { + var n = t.target.response; + if (200 === this.status) { + var r = o.model.getStorage(); + if (null == n) + return i && i(t), + o.manager.itemEnd(A), + o.manager.itemError(A), + void Bh.error("response 为 null"); + if (!(n instanceof ArrayBuffer || n instanceof Array || n instanceof Blob || n instanceof Object)) + try { + n = JSON.parse(n) + } catch (A) {} + if (n instanceof Blob && mh.isIOSDevice()) { + var a = new FileReader; + a.readAsDataURL(n), + a.onloadend = function (t) { + r && o.cacheViable && r.put(A, t.target.result, o.modelKey, (function () { + o.manager.progress.loaded += 1 + }), (function () { + Bh.warn(A, "缓存失败"), + o.manager.progress.failed += 1 + })), + e && e(t.target.result) + } + } else { + if (r && o.cacheViable) + if (n.byteLength && n.byteLength > 12e7) { + for (var s = [], l = Math.floor(n.byteLength / 4e7), c = 0; l >= c; c += 1) { + o.manager.progress.total += 1; + var h = null; + h = c === l ? n.slice(4e7 * c) : n.slice(4e7 * c, 4e7 * (c + 1)); + var d = A + "_" + c; + s.push(d), + r.put(d, h, o.modelKey, (function () { + o.manager.progress.loaded += 1 + }), (function () { + o.manager.progress.failed += 1 + })) + } + r.put(A, { + split: !0, + list: s, + length: n.byteLength + }, o.modelKey, (function () {}), (function () { + Bh.warn(A, "缓存失败") + })) + } else + r.put(A, n, o.modelKey, (function () { + o.manager.progress && (o.manager.progress.loaded += 1) + }), (function () { + o.manager.progress && (Bh.warn(A, "缓存失败"), + o.manager.progress.failed += 1) + })); + e && e(n) + } + o.manager.itemEnd(A) + } else + 0 === this.status ? (Bh.warn("THREE.FileLoader: HTTP Status 0 received."), + e && e(n), + o.manager.itemEnd(A)) : (i && i(t), + o.manager.itemEnd(A), + o.manager.itemError(A)) + }), !1), + "function" == typeof t && g.addEventListener("progress", (function (A) { + t(A) + }), !1), + g.addEventListener("error", (function (e) { + i && i(e), + o.manager.itemEnd(A), + o.manager.itemError(A) + }), !1), + void 0 !== this.responseType && (g.responseType = this.responseType), + void 0 !== this.withCredentials && (g.withCredentials = this.withCredentials), + g.overrideMimeType && g.overrideMimeType(void 0 !== this.mimeType ? this.mimeType : "text/plain"), + this.requestHeader) + g.setRequestHeader(u, this.requestHeader[u]); + g.send(null) + } + return o.manager.itemStart(A), + g + }, + load: function (A, e, t, i) { + void 0 === A && (A = ""), + null != this.path && (A = this.path + A); + return this._load.call(this, A, e, t, i) + }, + setPath: function (A) { + return this.path = A, + this + }, + setResponseType: function (A) { + return this.responseType = A, + this + }, + setWithCredentials: function (A) { + return this.withCredentials = A, + this + }, + setMimeType: function (A) { + return this.mimeType = A, + this + }, + setCacheViable: function (A) { + return this.cacheViable = A, + this + }, + setRequestHeader: function (A) { + return this.requestHeader = A, + this + } + }); + var Uu = function (A) { + this.compArr = [], + this.compArr = A, + Bh.debug(this.compArr) + }; + Uu.prototype = { + constructor: Uu, + getComponent: function (A) {} + }; + var Fu, Ku, Qu, Ru, Tu = { + EmptyGeometry: new he, + UnitCylinderInstance: new hr(1, 1, 1, 8, 1, !1), + UnitBoxInstance: new Ne(1, 1, 1), + UnitTextureCylinder: null, + UnitTextureBox: null, + initializeUnitInstances: function () { + Tu.UnitCylinderInstance.boundingBox || Tu.UnitCylinderInstance.computeBoundingBox(), + Tu.UnitBoxInstance.boundingBox || Tu.UnitBoxInstance.computeBoundingBox() + }, + destroyUnitInstances: function () { + Tu.UnitCylinderInstance.dispose(), + Tu.UnitBoxInstance.dispose() + }, + getBoxData: function (A) { + for (var e = [ + [], + [], + [], + [], + [], + [] + ], t = 0; 4 > t; t += 1) + e[0].push(-1, 0, 0); + for (t = 0; 4 > t; t += 1) + e[1].push(0, -1, 0); + for (t = 0; 4 > t; t += 1) + e[2].push(0, 0, -1); + for (t = 0; 4 > t; t += 1) + e[3].push(0, 0, 1); + for (t = 0; 4 > t; t += 1) + e[4].push(0, 1, 0); + for (t = 0; 4 > t; t += 1) + e[5].push(1, 0, 0); + var i = [ + [], + [], + [], + [], + [], + [] + ]; + return i[0] = i[2] = i[4] = [-.5, -.5, -.5, .5, .5, -.5, .5, .5], + i[1] = i[3] = i[5] = [-.5, -.5, -.5, .5, .5, -.5, .5, .5], { + vertex: [ + [-.5, -.5, -.5, -.5, -.5, .5, -.5, .5, -.5, -.5, .5, .5], + [-.5, -.5, -.5, -.5, -.5, .5, .5, -.5, -.5, .5, -.5, .5], + [-.5, -.5, -.5, -.5, .5, -.5, .5, -.5, -.5, .5, .5, -.5], + [-.5, -.5, .5, -.5, .5, .5, .5, -.5, .5, .5, .5, .5], + [-.5, .5, -.5, -.5, .5, .5, .5, .5, -.5, .5, .5, .5], + [.5, -.5, -.5, .5, -.5, .5, .5, .5, -.5, .5, .5, .5] + ][A], + normal: e[A], + uv: i[A], + index: [ + [0, 1, 2, 3, 2, 1], + [2, 1, 0, 1, 2, 3], + [0, 1, 2, 3, 2, 1], + [2, 1, 0, 1, 2, 3], + [0, 1, 2, 3, 2, 1], + [2, 1, 0, 1, 2, 3] + ][A] + } + }, + getPipeData2: (Fu = [.5, 0, .5, .353530875, .353530875, .5, 0, .5, .5, -.353530875, .353530875, .5, -.5, 0, .5, -.353530875, -.353530875, .5, 0, -.5, .5, .353530875, -.353530875, .5, .5, 0, .5, .5, 0, -.5, .353530875, .353530875, -.5, 0, .5, -.5, -.353530875, .353530875, -.5, -.5, 0, -.5, -.353530875, -.353530875, -.5, 0, -.5, -.5, .353530875, -.353530875, -.5, .5, 0, -.5, .5, 0, .5, .353530875, .353530875, .5, 0, .5, .5, -.353530875, .353530875, .5, -.5, 0, .5, -.353530875, -.353530875, .5, 0, -.5, .5, .353530875, -.353530875, .5, .5, 0, -.5, .353530875, .353530875, -.5, 0, .5, -.5, -.353530875, .353530875, -.5, -.5, 0, -.5, -.353530875, -.353530875, -.5, 0, -.5, -.5, .353530875, -.353530875, -.5], + Ku = [0, 9, 1, 1, 9, 10, 1, 10, 2, 2, 10, 11, 2, 11, 3, 3, 11, 12, 3, 12, 4, 4, 12, 13, 4, 13, 5, 5, 13, 14, 5, 14, 6, 6, 14, 15, 6, 15, 7, 7, 15, 16, 7, 16, 8, 8, 16, 17, 18, 19, 20, 18, 20, 21, 18, 21, 22, 18, 22, 23, 18, 23, 24, 18, 24, 25, 26, 28, 27, 26, 29, 28, 26, 30, 29, 26, 31, 30, 26, 32, 31, 26, 33, 32], + Qu = [1, 0, 0, .7, .7, 0, 0, 1, 0, -.7, .7, 0, -1, 0, 0, -.7, -.7, 0, 0, -1, 0, .7, -.7, 0, 1, 0, 0, 1, 0, 0, .7, .7, 0, 0, 1, 0, -.7, .7, 0, -1, 0, 0, -.7, -.7, 0, 0, -1, 0, .7, -.7, 0, 1, 0, 0, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1], + Ru = [-.5, .5, -.375, .5, -.25, .5, -.125, .5, 0, .5, .125, .5, .25, .5, .375, .5, .5, .5, -.5, -.5, -.375, -.5, -.25, -.5, -.125, -.5, 0, -.5, .125, -.5, .25, -.5, .375, -.5, .5, -.5, .5, 0, .353530875, .353530875, 0, .5, -.353530875, .353530875, -.5, 0, -.353530875, -.353530875, 0, -.5, .353530875, -.353530875, .5, 0, .353530875, .353530875, 0, .5, -.353530875, .353530875, -.5, 0, -.353530875, -.353530875, 0, -.5, .353530875, -.353530875], + function () { + return { + vertex: Fu, + normal: Qu, + uv: Ru, + index: Ku + } + } + ), + getPipeData: function (A) { + (void 0 === A || 8 > A) && (A = 8), + A > 256 && (A = 256); + var e = 4 * A + 2, + t = 3 * (4 * A - 4), + i = A + 1, + o = 1 / A, + n = 6.28318530714 / A, + r = null, + a = null, + s = []; + for (r = 0; A > r; r += 1) + s.push(.5 * Math.cos(r * n)), + s.push(.5 * Math.sin(r * n)); + s.push(.5), + s.push(0); + var l = []; + for (a = 2 * i, + r = 0; a > r; r += 2) + l.push(s[r]), + l.push(s[r + 1]), + l.push(.5); + for (r = 0; a > r; r += 2) + l.push(s[r]), + l.push(s[r + 1]), + l.push(-.5); + for (a = 2 * A, + r = 0; a > r; r += 2) + l.push(s[r]), + l.push(s[r + 1]), + l.push(.5); + for (r = a; r > 0; r -= 2) + l.push(s[r]), + l.push(s[r + 1]), + l.push(-.5); + var c = [], + h = A + 1; + for (r = 0; A > r; r += 1) + c.push(r), + c.push(r + h), + c.push(r + 1), + c.push(r + 1), + c.push(r + h), + c.push(r + h + 1); + var d = 2 * i; + for (r = 1; A - 1 > r; r += 1) + c.push(d), + c.push(d + r), + c.push(d + r + 1); + for (d += A, + r = 1; A - 1 > r; r += 1) + c.push(d), + c.push(d + r), + c.push(d + r + 1); + var p = []; + for (r = A; r >= 0; r -= 1) + p.push(r * o - .5), + p.push(-.5); + for (r = A; r >= 0; r -= 1) + p.push(r * o - .5), + p.push(.5); + for (a = 2 * A, + r = 0; a > r; r += 2) + p.push(s[r]), + p.push(s[r + 1]); + for (r = a; r > 0; r -= 2) + p.push(s[r]), + p.push(s[r + 1]); + a = 3 * e; + var g = []; + for (r = 0; a > r; r += 1) + g.push(0); + var u = null, + f = null, + m = null, + C = new y, + v = new y, + I = new y, + E = new y, + B = new y; + for (r = 0; t > r; r += 3) + f = 3 * c[r + 1], + m = 3 * c[r + 2], + C.fromArray(l, u = 3 * c[r]), + v.fromArray(l, f), + I.fromArray(l, m), + E.subVectors(I, v), + B.subVectors(C, v), + E.cross(B), + g[u] += E.x, + g[u + 1] += E.y, + g[u + 2] += E.z, + g[f] += E.x, + g[f + 1] += E.y, + g[f + 2] += E.z, + g[m] += E.x, + g[m + 1] += E.y, + g[m + 2] += E.z; + var x = new y; + for (a = 3 * e, + r = 0; a > r; r += 3) + x.fromArray(g, r), + x.normalize(), + g[r] = x.x, + g[r + 1] = x.y, + g[r + 2] = x.z; + return { + vertex: l, + normal: g, + uv: p, + index: c, + edges: A + } + }, + getInstancePipeData: function (A, e) { + var t = this.getPipeData(A); + (void 0 === A || 8 > A) && (A = 8), + A > 256 && (A = 256); + var i = 2 * (A + 1), + o = i + A, + n = 4 * A + 2, + r = [ + [], + [], + [] + ]; + r[0] = t.vertex.slice(0, 3 * i), + r[1] = t.vertex.slice(3 * i, 3 * o), + r[2] = t.vertex.slice(3 * o, 3 * n); + var a = [ + [], + [], + [] + ], + s = A + 1, + l = 0; + for (l = 0; A > l; l += 1) + a[0].push(l), + a[0].push(l + s), + a[0].push(l + 1), + a[0].push(l + 1), + a[0].push(l + s), + a[0].push(l + s + 1); + for (l = 1; A - 1 > l; l += 1) + a[1].push(0), + a[1].push(l), + a[1].push(l + 1); + for (l = 1; A - 1 > l; l += 1) + a[2].push(0), + a[2].push(l), + a[2].push(l + 1); + var c = [ + [], + [], + [] + ]; + c[0] = t.uv.slice(0, 2 * i), + c[1] = t.uv.slice(2 * i, 2 * o), + c[2] = t.uv.slice(2 * o, 2 * n); + var h = [ + [], + [], + [] + ]; + return h[0] = t.normal.slice(0, 3 * i), + h[1] = t.normal.slice(3 * i, 3 * o), + h[2] = t.normal.slice(3 * o, 3 * n), { + vertex: r[e], + normal: h[e], + uv: c[e], + index: a[e] + } + }, + getUnitTextureCylinder: function () { + if (null === Tu.UnitTextureCylinder) { + Tu.UnitTextureCylinder = new Array(3); + for (var A = 0; 3 > A; A += 1) { + var e = Tu.getInstancePipeData(32, A); + Tu.UnitTextureCylinder[A] = new he, + Tu.UnitTextureCylinder[A].setIndex(e.index), + Tu.UnitTextureCylinder[A].addAttribute("position", new Ae(e.vertex, 3)), + Tu.UnitTextureCylinder[A].addAttribute("normal", new Ae(e.normal, 3)), + Tu.UnitTextureCylinder[A].addAttribute("uv", new Ae(e.uv, 2)) + } + } + return Tu.UnitTextureCylinder + }, + getUnitTextureBox: function () { + if (null === Tu.UnitTextureBox) { + Tu.UnitTextureBox = new Array(6); + for (var A = 0; 6 > A; A += 1) { + var e = Tu.getBoxData(A); + Tu.UnitTextureBox[A] = new he, + Tu.UnitTextureBox[A].setIndex(e.index), + Tu.UnitTextureBox[A].addAttribute("position", new Ae(e.vertex, 3)), + Tu.UnitTextureBox[A].addAttribute("normal", new Ae(e.normal, 3)), + Tu.UnitTextureBox[A].addAttribute("uv", new Ae(e.uv, 2)) + } + } + return Tu.UnitTextureBox + }, + getBoxBufferGeometryWithUvMatrices: function (A) { + for (var e = [], t = null, i = new l, o = new y, n = !!A, r = 0; 6 > r; r += 1) { + t = new he; + var a = Tu.getBoxData(r); + if (n) { + var s = []; + i.set(A[6 * r], A[6 * r + 2], A[6 * r + 4], A[6 * r + 1], A[6 * r + 3], A[6 * r + 5], 0, 0, 1); + for (var c = 0, h = a.uv.length; h > c; c += 2) + o.set(a.uv[c], a.uv[c + 1], 1), + o.applyMatrix3(i), + s.push(o.x), + s.push(o.y); + t.addAttribute("uv", new Ae(s, 2)) + } + t.setIndex(new YA(Uint32Array.from(a.index), 1)), + t.addAttribute("position", new Ae(a.vertex, 3)), + t.addAttribute("normal", new Ae(a.normal, 3)), + e.push(t) + } + return Tu.mergeBufferGeometries2(e) + }, + getPipeBufferGeometryWithUvMatrices: function (A) { + var e = Tu.getPipeData(32), + t = e.edges, + i = !(!A || 18 !== A.length), + o = new he; + if (i) { + for (var n = [], r = 0, a = A.length; a > r; r += 6) { + var s = new l; + s.set(A[6 * r], A[6 * r + 2], A[6 * r + 4], A[6 * r + 1], A[6 * r + 3], A[6 * r + 5], 0, 0, 1), + n.push(s) + } + for (var c = [], h = new y, d = 4 * (t + 1), p = d + 2 * t, g = 0, u = e.uv.length; u > g; g += 2) + h.set(e.uv[g], e.uv[g + 1], 1), + h.applyMatrix3(d > g ? n[0] : p > g ? n[1] : n[2]), + c.push(h.x), + c.push(h.y); + o.addAttribute("uv", new Ae(c, 2)) + } + return o.setIndex(new $A(e.index, 1)), + o.addAttribute("position", new Ae(e.vertex, 3)), + o.addAttribute("normal", new Ae(e.normal, 3)), + o + }, + getGeometryFromBox3: function (A) { + var e = new he, + t = [], + i = [], + o = A.min, + n = A.max, + r = o.x, + a = o.y, + s = o.z, + l = n.x, + c = n.y, + h = n.z; + return t.push(r, a, s), + t.push(l, a, s), + t.push(r, a, h), + t.push(l, a, h), + t.push(r, c, s), + t.push(l, c, s), + t.push(r, c, h), + t.push(l, c, h), + i.push(0, 1, 3), + i.push(0, 3, 2), + i.push(1, 5, 7), + i.push(1, 7, 3), + i.push(5, 4, 6), + i.push(5, 6, 7), + i.push(4, 2, 6), + i.push(4, 0, 2), + i.push(0, 4, 5), + i.push(0, 5, 1), + i.push(2, 3, 7), + i.push(2, 7, 6), + e.setIndex(new YA(new Uint32Array(i), 1)), + e.setAttribute("position", new YA(new Float32Array(t), 3)), + e + }, + getWorldMatrixOfMesh: function (A) { + for (var e = [], t = A.parent; t;) + e.push(t.matrix), + t = t.parent; + var i = new M; + if (e.length > 0) { + i = e[e.length - 1]; + for (var o = e.length - 2; o >= 0; o -= 1) + i.multiply(e[o]) + } + var n = new M; + return n.multiplyMatrices(i, A.matrix), + n + }, + getWorldPositionOfMesh: function (A, e) { + e || (e = new M); + var t = new M; + t.getInverse(e); + var i = A.clone(); + return i.applyMatrix4(t), + i + }, + getBoundingBoxWorldOfMesh: function (A, e) { + var t = A.boundingBox; + t || (A.geometry.boundingBox || A.geometry.computeBoundingBox(), + t = A.geometry.boundingBox); + var i = t.clone(); + i.applyMatrix4(A.matrixWorld); + var o = new M; + return o.getInverse(e), + i.applyMatrix4(o), + i + }, + getBoundingBoxByBuffer: function (A) { + for (var e = 1 / 0, t = 1 / 0, i = 1 / 0, o = -1 / 0, n = -1 / 0, r = -1 / 0, a = new ph, s = 0, l = A.length; l > s; s += 3) { + var c = A[s], + h = A[s + 1], + d = A[s + 2]; + e > c && (e = c), + t > h && (t = h), + i > d && (i = d), + c > o && (o = c), + h > n && (n = h), + d > r && (r = d) + } + return a.min.set(e, t, i), + a.max.set(o, n, r), + a + }, + mergeBufferGeometriesFromMeshs: function (A, e) { + for (var t = null !== A[0].geometry.index, i = new Set(Object.keys(A[0].geometry.attributes)), o = new Set(Object.keys(A[0].geometry.morphAttributes)), n = {}, r = {}, a = new he, s = 0; A.length > s; s += 1) { + var l = A[s].geometry; + if (t !== (null !== l.index)) + return null; + for (var c in l.attributes) { + if (!i.has(c)) + return console.log("attributes not Used: ", c), + null; + void 0 === n[c] && (n[c] = []), + n[c].push(l.attributes[c]) + } + for (var c in l.morphAttributes) { + if (!o.has(c)) + return null; + void 0 === r[c] && (r[c] = []), + r[c].push(l.morphAttributes[c]) + } + null != l.userData && (a.userData = a.userData || {}, + a.userData.mergedUserData = a.userData.mergedUserData || [], + a.userData.mergedUserData.push(l.userData)) + } + if (t) { + var h = 0, + d = [], + p = 0, + g = 0; + for (s = 0; A.length > s; s += 1) { + var u = A[s].geometry.index; + if (h > 0) { + u = u.clone(); + for (var f = 0; u.count > f; f += 1) + u.setX(f, u.getX(f) + h) + } + d.push(u), + h += A[s].geometry.attributes.position.count, + void 0 === e[A[s].userId] && (e[A[s].userId] = []), + e[A[s].userId].push({ + nodeId: A[s].nodeId, + indexStart: p, + indexCount: u.count, + positionStart: g, + positionCount: A[s].geometry.attributes.position.count + }), + g += A[s].geometry.attributes.position.count, + p += u.count + } + var m = this.mergeBufferAttributes(d); + if (!m) + return null; + a.index = m + } + for (var c in n) { + var C = this.mergeBufferAttributes(n[c]); + if (!C) + return null; + a.setAttribute(c, C) + } + for (var c in r) { + var y = r[c][0].length; + if (0 === y) + break; + a.morphAttributes = a.morphAttributes || {}, + a.morphAttributes[c] = []; + for (s = 0; y > s; s += 1) { + var v = []; + for (f = 0; r[c].length > f; f += 1) + v.push(r[c][f][s]); + var I = this.mergeBufferAttributes(v); + if (!I) + return null; + a.morphAttributes[c].push(I) + } + } + return a + }, + mergeBufferGeometries: function (A, e) { + for (var t = null !== A[0].index, i = new Set(Object.keys(A[0].attributes)), o = {}, n = new he, r = 0; A.length > r; r += 1) { + var a = A[r]; + if (t !== (null !== a.index)) + return null; + for (var s in a.attributes) { + if (!i.has(s)) + return null; + void 0 === o[s] && (o[s] = []), + o[s].push(a.attributes[s]) + } + } + if (t) { + var l = 0, + c = []; + for (r = 0; A.length > r; r += 1) { + var h = A[r].index; + if (l > 0) { + h = h.clone(); + for (var d = 0; h.count > d; d += 1) + h.setX(d, h.getX(d) + l) + } + c.push(h), + l += A[r].attributes.position.count + } + var p = this.mergeBufferAttributes(c); + if (!p) + return null; + n.index = p + } + for (var s in o) { + var g = this.mergeBufferAttributes(o[s], e); + if (!g) + return null; + n.setAttribute(s, g) + } + return n + }, + reducedGeometry: function (A, e) { + for (var t = {}, i = 0, o = e.length; o > i; i += 1) { + var n = e[i]; + t[n] || (t[n] = []), + t[n].push(i) + } + var r = 0, + a = new Float32Array(3 * Object.keys(t).length); + for (var s in t) { + for (var l = t[s], c = 0, h = l.length; h > c; c += 1) + e[l[c]] = r, + a[3 * r] = A[3 * s], + a[3 * r + 1] = A[3 * s + 1], + a[3 * r + 2] = A[3 * s + 2]; + r += 1 + } + return { + buffer: a, + index: e + } + }, + mergeBufferAttributes: function (A, e) { + for (var t = null, i = null, o = null, n = 0, r = 0; A.length > r; r += 1) { + var a = A[r]; + if (a.isInterleavedBufferAttribute) + return null; + if (null === t && (t = a.array.constructor), + t !== a.array.constructor) + return null; + if (null === i && (i = a.itemSize), + i !== a.itemSize) + return null; + if (null === o && (o = a.normalized), + o !== a.normalized) + return null; + n += a.array.length + } + for (var s = new t(n), c = 0, h = !1, d = 0; A.length > d; d += 1) { + if (e && !e[d].equals(Bc) && ("position" === A[d].name || "normal" === A[d].name)) { + if ("position" === A[d].name && e[d].applyToBufferAttribute(A[d]), + "normal" === A[d].name) + (new l).getNormalMatrix(e[d]).applyToBufferAttribute(A[d]); + h = !0 + } + if (s.set(A[d].array, c), + c += A[d].array.length, + h) { + var p = (new M).getInverse(e[d]); + if ("position" === A[d].name && p.applyToBufferAttribute(A[d]), + "normal" === A[d].name) + (new l).getNormalMatrix(p).applyToBufferAttribute(A[d]); + h = !1 + } + } + return new YA(s, i, o) + }, + applyMatrix3ToBuffer: function () { + var A = new y; + return function (e, t, i, o) { + if (e.equals(xc)) + return t; + for (var n = i || 0, r = o || t.length; r > n; n += 3) + A.x = t[n + 0], + A.y = t[n + 1], + A.z = t[n + 2], + A.applyMatrix3(e), + t[n + 0] = A.x, + t[n + 1] = A.y, + t[n + 2] = A.z; + return t + } + }(), + applyMatrix4ToBuffer: function () { + var A = new y; + return function (e, t, i, o) { + if (e.equals(Bc)) + return t; + for (var n = i || 0, r = o || t.length; r > n; n += 3) + A.x = t[n + 0], + A.y = t[n + 1], + A.z = t[n + 2], + A.applyMatrix4(e), + t[n + 0] = A.x, + t[n + 1] = A.y, + t[n + 2] = A.z; + return t + } + }(), + normalizeBuffer: function (A) { + for (var e = null, t = null, i = null, o = null, n = 0, r = A.length; r > n; n += 3) + e = A[n], + t = A[n + 1], + i = A[n + 2], + o = 1 / Math.sqrt(e * e + t * t + i * i), + A[n] = e * o, + A[n + 1] = t * o, + A[n + 2] = i * o + }, + disposeBufferFromGeometry: function (A, e) { + for (var t = 0, i = e.length; i > t; t += 1) { + var o = A.getAttribute(e[t]); + o && (o.array = null) + } + }, + disposeIndexBufferFromGeometry: function (A) { + A.index && (A.index.array = null) + }, + copyMeshProperties: function (A, e) { + A.name = e.name, + A.up.copy(e.up), + A.position.copy(e.position), + A.quaternion.copy(e.quaternion), + A.scale.copy(e.scale), + A.matrix.copy(e.matrix), + A.matrixWorld.copy(e.matrixWorld), + A.matrixAutoUpdate = e.matrixAutoUpdate, + A.matrixWorldNeedsUpdate = e.matrixWorldNeedsUpdate + }, + createBufferGeometryWithPosAndSkin: function (A) { + var e = new he; + if (A.isBufferGeometry || A._bufferGeometry) { + var t = A.isBufferGeometry ? A : A._bufferGeometry; + e.addAttribute("position", t.getAttribute("position")), + t.getAttribute("skinIndex") && e.addAttribute("skinIndex", t.getAttribute("skinIndex")), + t.getAttribute("skinWeight") && e.addAttribute("skinWeight", t.getAttribute("skinWeight")); + var i = t.getIndex(); + i && e.setIndex(i) + } else if (A.isGeometry) { + var o = new Ae(3 * A.vertices.length, 3); + if (e.addAttribute("position", o.copyVector3sArray(A.vertices)), + A.skinIndices.length > 0) { + var n = new Ae(4 * A.skinIndices.length, 4); + e.addAttribute("skinIndex", n.copyVector4sArray(A.skinIndices)) + } + if (A.skinWeights.length > 0) { + var r = new Ae(4 * A.skinWeights.length, 4); + this.addAttribute("skinWeight", r.copyVector4sArray(A.skinWeights)) + } + if (A.faces.length) { + for (var a = A.faces, s = [], l = 0; a.length > l; l += 1) { + var c = a[l]; + s.push(c.a, c.b, c.c) + } + var h = new(uh.arrayMax(s) > 65535 ? Uint32Array : Uint16Array)(3 * s.length); + e.setIndex(new YA(h, 1).copyIndicesArray(s)) + } + } + return e + }, + calculateVolumeOfGeometry: function (A, e, t, i) { + if (A && e) { + var o = 0, + n = new y, + r = new y, + a = new y; + t || (t = 0), + i || (i = e.length); + for (var s = 0, l = 0, c = 0, h = t, d = t + i; d > h; h += 3) { + l = e[h + 1], + c = e[h + 2], + n.set(A[3 * (s = e[h])], A[3 * s + 1], A[3 * s + 2]), + r.set(A[3 * l], A[3 * l + 1], A[3 * l + 2]), + a.set(A[3 * c], A[3 * c + 1], A[3 * c + 2]), + o += n.clone().cross(r).dot(a) / 6 + } + return o + } + }, + minDistanceBetweenTriToMesh: function (A, e, t, i) { + function o(A, e) { + return new y(A.x - e.x, A.y - e.y, A.z - e.z) + } + + function n(A, e) { + return new y(A.x + e.x, A.y + e.y, A.z + e.z) + } + + function r(A, e, t) { + return new y(A.x + e.x * t, A.y + e.y * t, A.z + e.z * t) + } + + function a(A, e) { + return A.x * e.x + A.y * e.y + A.z * e.z + } + + function s(A, e) { + return new y(A.y * e.z - A.z * e.y, A.z * e.x - A.x * e.z, A.x * e.y - A.y * e.x) + } + + function l(A, e, t, i) { + var l, c = a(e, i), + h = a(e, e), + d = a(i, i), + p = o(t, A), + g = a(e, p), + u = a(i, p), + f = null; + 0 > (f = (g * d - u * c) / (h * d - c * c)) || isNaN(f) ? f = 0 : f > 1 && (f = 1); + var m = null, + C = null, + y = null, + v = null; + return 0 >= (l = (f * c - u) / d) || isNaN(l) ? (C = t, + 0 >= (f = g / h) || isNaN(f) ? (m = A, + y = o(t, A)) : 1 > f ? (m = r(A, e, f), + v = s(p, e), + y = s(e, v)) : y = o(t, m = n(A, e))) : 1 > l ? (C = r(t, i, l), + 0 >= f || isNaN(f) ? (m = A, + v = s(p, i), + y = s(i, v)) : 1 > f ? (m = r(A, e, f), + 0 > a(y = s(e, i), p) && y.multiplyScalar(-1)) : (v = s(p = o(t, m = n(A, e)), i), + y = s(i, v))) : (C = n(t, i), + 0 >= (f = (c + g) / h) || isNaN(f) ? (m = A, + y = o(C, A)) : 1 > f ? (m = r(A, e, f), + v = s(p = o(C, A), e), + y = s(e, v)) : y = o(C, m = n(A, e))), { + vec: y, + closestP: m, + closestQ: C + } + } + + function c(A, e) { + var t = null, + i = null, + n = [], + c = [], + h = null; + n[0] = o(A[1], A[0]), + n[1] = o(A[2], A[1]), + n[2] = o(A[0], A[2]), + c[0] = o(e[1], e[0]), + c[1] = o(e[2], e[1]), + c[2] = o(e[0], e[2]); + for (var d = null, p = null, g = null, u = 0, f = A[0].distanceToSquared(e[0]) + 1, m = 0; 3 > m; m += 1) + for (var C = 0; 3 > C; C += 1) { + var y = l(A[m], n[m], e[C], c[C]); + h = y.vec; + var v = a(d = o(i = y.closestQ, t = y.closestP), d); + if (f >= v) { + p = t.clone(), + g = i.clone(), + f = v; + var I = a(o(A[(m + 2) % 3], t), h), + E = a(o(e[(C + 2) % 3], i), h); + if (0 >= I && E >= 0) + return { + start: t.clone(), + end: i.clone(), + minDistance: Math.sqrt(v) + }; + 0 > I && (I = 0), + E > 0 && (E = 0), + a(d, h) - I + E > 0 && (u = 1) + } + } + var B = s(n[0], n[1]), + x = a(B, B); + if (x > 1e-15) { + var S = []; + d = o(A[0], e[0]), + S[0] = a(d, B), + d = o(A[0], e[1]), + S[1] = a(d, B), + d = o(A[0], e[2]), + S[2] = a(d, B); + var w = -1; + if (S[0] > 0 && S[1] > 0 && S[2] > 0 ? S[w = S[1] > S[0] ? 0 : 1] > S[2] && (w = 2) : 0 > S[0] && 0 > S[1] && 0 > S[2] && S[2] > S[w = S[0] > S[1] ? 0 : 1] && (w = 2), + w >= 0 && (u = 1, + a(d = o(e[w], A[0]), s(B, n[0])) > 0 && a(d = o(e[w], A[1]), s(B, n[1])) > 0 && a(d = o(e[w], A[2]), s(B, n[2])) > 0)) + return t = r(e[w], B, S[w] / x), + i = e[w].clone(), { + start: t.clone(), + end: i, + minDistance: t.distanceTo(i) + } + } + var M = s(c[0], c[1]), + b = a(M, M); + if (b > 1e-15) { + var U = []; + d = o(e[0], A[0]), + U[0] = a(d, M), + d = o(e[0], A[1]), + U[1] = a(d, M), + d = o(e[0], A[2]), + U[2] = a(d, M); + w = -1; + if (U[0] > 0 && U[1] > 0 && U[2] > 0 ? U[w = U[1] > U[0] ? 0 : 1] > U[2] && (w = 2) : 0 > U[0] && 0 > U[1] && 0 > U[2] && U[2] > U[w = U[0] > U[1] ? 0 : 1] && (w = 2), + w >= 0 && (u = 1, + a(d = o(A[w], e[0]), s(M, c[0])) > 0 && a(d = o(A[w], e[1]), s(M, c[1])) > 0 && a(d = o(A[w], e[2]), s(M, c[2])) > 0)) + return { + start: t = A[w].clone(), + end: (i = r(A[w], M, U[w] / b)).clone(), + minDistance: t.distanceTo(i) + } + } + return u ? (t = p, + i = g, { + start: p.clone(), + end: g.clone(), + minDistance: Math.sqrt(f) + }) : { + start: p.clone(), + end: g.clone(), + minDistance: 0 + } + } + var h = new y, + d = new y, + p = new y; + + function g(A, e, t, i, o, n) { + h.fromBufferAttribute(e, t), + d.fromBufferAttribute(e, i), + p.fromBufferAttribute(e, o), + n && (h.applyMatrix4(n), + d.applyMatrix4(n), + p.applyMatrix4(n)), + A.push(h), + A.push(d), + A.push(p) + } + for (var u = { + start: null, + end: null, + minDistance: Number.POSITIVE_INFINITY + }, f = e.geometry, m = f.attributes.position, C = t ? t.indexStart : 0, v = f.getIndex().array, I = C, E = t ? t.indexStart + t.indexCount : v.length; E > I; I += 3) { + var B = []; + g(B, m, v[I], v[I + 1], v[I + 2], i); + var x = c(A, B); + if (0 >= x.minDistance) + return u.minDistance = 0, + u.start = x.start.clone(), + u.end = x.end.clone(), + u; + u.minDistance > x.minDistance && (u.minDistance = x.minDistance, + u.start = x.start.clone(), + u.end = x.end.clone()) + } + return u + }, + minDistanceBetweenTriToTri: function (A, e) { + function t(A, e) { + return new y(A.x - e.x, A.y - e.y, A.z - e.z) + } + + function i(A, e) { + return new y(A.x + e.x, A.y + e.y, A.z + e.z) + } + + function o(A, e, t) { + return new y(A.x + e.x * t, A.y + e.y * t, A.z + e.z * t) + } + + function n(A, e) { + return A.x * e.x + A.y * e.y + A.z * e.z + } + + function r(A, e) { + return new y(A.y * e.z - A.z * e.y, A.z * e.x - A.x * e.z, A.x * e.y - A.y * e.x) + } + + function a(A, e, a, s) { + var l, c = n(e, s), + h = n(e, e), + d = n(s, s), + p = t(a, A), + g = n(e, p), + u = n(s, p), + f = null; + 0 > (f = (g * d - u * c) / (h * d - c * c)) || isNaN(f) ? f = 0 : f > 1 && (f = 1); + var m = null, + C = null, + y = null, + v = null; + return 0 >= (l = (f * c - u) / d) || isNaN(l) ? (C = a, + 0 >= (f = g / h) || isNaN(f) ? (m = A, + y = t(a, A)) : 1 > f ? (m = o(A, e, f), + v = r(p, e), + y = r(e, v)) : y = t(a, m = i(A, e))) : 1 > l ? (C = o(a, s, l), + 0 >= f || isNaN(f) ? (m = A, + v = r(p, s), + y = r(s, v)) : 1 > f ? (m = o(A, e, f), + 0 > n(y = r(e, s), p) && y.multiplyScalar(-1)) : (v = r(p = t(a, m = i(A, e)), s), + y = r(s, v))) : (C = i(a, s), + 0 >= (f = (c + g) / h) || isNaN(f) ? (m = A, + y = t(C, A)) : 1 > f ? (m = o(A, e, f), + v = r(p = t(C, A), e), + y = r(e, v)) : y = t(C, m = i(A, e))), { + vec: y, + closestP: m, + closestQ: C + } + } + + function s(A, e) { + var i = null, + s = null, + l = [], + c = [], + h = null; + l[0] = t(A[1], A[0]), + l[1] = t(A[2], A[1]), + l[2] = t(A[0], A[2]), + c[0] = t(e[1], e[0]), + c[1] = t(e[2], e[1]), + c[2] = t(e[0], e[2]); + for (var d = null, p = null, g = null, u = 0, f = A[0].distanceToSquared(e[0]) + 1, m = 0; 3 > m; m += 1) + for (var C = 0; 3 > C; C += 1) { + var y = a(A[m], l[m], e[C], c[C]); + h = y.vec; + var v = n(d = t(s = y.closestQ, i = y.closestP), d); + if (f >= v) { + p = i.clone(), + g = s.clone(), + f = v; + var I = n(t(A[(m + 2) % 3], i), h), + E = n(t(e[(C + 2) % 3], s), h); + if (0 >= I && E >= 0) + return { + start: i.clone(), + end: s.clone(), + minDistance: Math.sqrt(v) + }; + 0 > I && (I = 0), + E > 0 && (E = 0), + n(d, h) - I + E > 0 && (u = 1) + } + } + var B = r(l[0], l[1]), + x = n(B, B); + if (x > 1e-15) { + var S = []; + d = t(A[0], e[0]), + S[0] = n(d, B), + d = t(A[0], e[1]), + S[1] = n(d, B), + d = t(A[0], e[2]), + S[2] = n(d, B); + var w = -1; + if (S[0] > 0 && S[1] > 0 && S[2] > 0 ? S[w = S[1] > S[0] ? 0 : 1] > S[2] && (w = 2) : 0 > S[0] && 0 > S[1] && 0 > S[2] && S[2] > S[w = S[0] > S[1] ? 0 : 1] && (w = 2), + w >= 0 && (u = 1, + n(d = t(e[w], A[0]), r(B, l[0])) > 0 && n(d = t(e[w], A[1]), r(B, l[1])) > 0 && n(d = t(e[w], A[2]), r(B, l[2])) > 0)) + return i = o(e[w], B, S[w] / x), + s = e[w].clone(), { + start: i.clone(), + end: s, + minDistance: i.distanceTo(s) + } + } + var M = r(c[0], c[1]), + b = n(M, M); + if (b > 1e-15) { + var U = []; + d = t(e[0], A[0]), + U[0] = n(d, M), + d = t(e[0], A[1]), + U[1] = n(d, M), + d = t(e[0], A[2]), + U[2] = n(d, M); + w = -1; + if (U[0] > 0 && U[1] > 0 && U[2] > 0 ? U[w = U[1] > U[0] ? 0 : 1] > U[2] && (w = 2) : 0 > U[0] && 0 > U[1] && 0 > U[2] && U[2] > U[w = U[0] > U[1] ? 0 : 1] && (w = 2), + w >= 0 && (u = 1, + n(d = t(A[w], e[0]), r(M, c[0])) > 0 && n(d = t(A[w], e[1]), r(M, c[1])) > 0 && n(d = t(A[w], e[2]), r(M, c[2])) > 0)) + return { + start: i = A[w].clone(), + end: (s = o(A[w], M, U[w] / b)).clone(), + minDistance: i.distanceTo(s) + } + } + return u ? (i = p, + s = g, { + start: p.clone(), + end: g.clone(), + minDistance: Math.sqrt(f) + }) : { + start: p.clone(), + end: g.clone(), + minDistance: 0 + } + } + for (var l = { + start: null, + end: null, + minDistance: Number.POSITIVE_INFINITY + }, c = 0, h = A.length; h > c; c += 1) + for (var d = 0, p = e.length; p > d; d += 1) { + var g = s(A[c], e[d]); + if (0 >= g.minDistance) + return l.minDistance = 0, + l.start = g.start.clone(), + l.end = g.end.clone(), + l; + l.minDistance > g.minDistance && (l.minDistance = g.minDistance, + l.start = g.start.clone(), + l.end = g.end.clone()) + } + return l + }, + calculateTheIntersectionOfGeometryAndPlane: function (A, e) { + var t = A.getIndex().array, + i = A.attributes.position, + o = t.length, + n = e.clone(), + r = 0; - + 1 === n.normal.x ? r = 0 : 1 === n.normal.x ? (n.normal.x = -1, + n.constant *= -1, + r = 1) : -1 === n.normal.y ? r = 2 : 1 === n.normal.y ? (n.normal.y = -1, + n.constant *= -1, + r = 3) : -1 === n.normal.z ? r = 4 : 1 === n.normal.z && (n.normal.z = -1, + n.constant *= -1, + r = 5); + for (var a, s, l, c, h, d, p, g, u = [], f = new Hs, m = 0, C = o; C > m; m += 3) { + var v = []; + a = v, + s = i, + l = t[m], + c = t[m + 1], + h = t[m + 2], + d = new y, + p = new y, + g = new y, + d.fromBufferAttribute(s, l), + p.fromBufferAttribute(s, c), + g.fromBufferAttribute(s, h), + a.push(d), + a.push(p), + a.push(g); + var I = v[0], + E = v[1], + B = v[2], + x = !1, + S = !1, + w = !1; + switch (r) { + case 0: + case 1: + x = n.constant > I.x, + S = n.constant > E.x, + w = n.constant > B.x; + break; + case 2: + case 3: + x = n.constant > I.y, + S = n.constant > E.y, + w = n.constant > B.y; + break; + case 4: + case 5: + x = n.constant > I.z, + S = n.constant > E.z, + w = n.constant > B.z + } + var M = null, + b = null; + x ? S ? w || (f.set(B, E), + (M = n.intersectLine(f, new y)) && u.push(M), + f.set(B, I), + (b = n.intersectLine(f, new y)) && u.push(b)) : w ? (f.set(E, B), + (M = n.intersectLine(f, new y)) && u.push(M), + f.set(E, I), + (b = n.intersectLine(f, new y)) && u.push(b)) : (f.set(E, I), + (M = n.intersectLine(f, new y)) && u.push(M), + f.set(B, I), + (b = n.intersectLine(f, new y)) && u.push(b)) : S ? w ? (f.set(I, E), + (M = n.intersectLine(f, new y)) && u.push(M), + f.set(I, B), + (b = n.intersectLine(f, new y)) && u.push(b)) : (f.set(I, E), + (M = n.intersectLine(f, new y)) && u.push(M), + f.set(B, E), + (b = n.intersectLine(f, new y)) && u.push(b)) : w && (f.set(I, B), + (M = n.intersectLine(f, new y)) && u.push(M), + f.set(E, B), + (b = n.intersectLine(f, new y)) && u.push(b)) + } + if (u.length >= 1) { + for (var U = {}, F = [], K = [], Q = 0, R = u.length; R > Q; Q += 1) { + var T = u[Q].toArray(F).toString(); + U[T] || (U[T] = []), + 2 > U[T].length || (T = T + "_" + Math.floor(U[T].length / 2 + .6), + U[T] || (U[T] = [])), + U[T].push(Q), + K.push(T) + } + var k = [], + D = K[0]; + return k.push(u[0], u[1]), + function A(e, t) { + var i = U[K[e]], + o = i[0] === e ? i[1] : i[0], + n = o % 2 ? o - 1 : o + 1; + if (t.push(u[n]), + K[n] !== D) { + if (isNaN(n)) + return void(k = null); + A(n, t) + } + }(1, k), + k + } + }, + getShapeGeometryFromGeometryAndPlane: function (A, e) { + var t = Tu.calculateTheIntersectionOfGeometryAndPlane(A, e); + if (t) { + var i = 0; - + 1 === e.normal.x ? i = 0 : 1 === e.normal.x ? i = 1 : -1 === e.normal.y ? i = 2 : 1 === e.normal.y ? i = 3 : -1 === e.normal.z ? i = 4 : 1 === e.normal.z && (i = 5); + var o = [], + n = [], + r = [], + a = [], + l = []; + A.boundingBox || A.computeBoundingBox(); + for (var c = A.boundingBox.getSize(new y), h = e.normal.x * c.x * 1e-4, d = e.normal.y * c.y * 1e-4, p = e.normal.z * c.z * 1e-4, g = 0, u = t.length; u > g; g += 1) { + var f = t[g], + m = new s; + switch (n.push(f.x + h, f.y + d, f.z + p), + i) { + case 0: + case 1: + r.push(1, 0, 0), + a.push(f.y, f.z), + m.set(f.y, f.z); + break; + case 2: + case 3: + r.push(0, 1, 0), + a.push(f.x, f.z), + m.set(f.x, f.z); + break; + case 4: + case 5: + r.push(0, 0, 1), + a.push(f.x, f.y), + m.set(f.x, f.y) + } + l.push(m) + } + for (var C = Hn.triangulateShape(l, []), v = 0, I = C.length; I > v; v += 1) { + var E = C[v]; + o.push(E[0], E[1], E[2]) + } + var B = new he; + return B.setIndex(o), + B.setAttribute("position", new Ae(n, 3)), + B.setAttribute("normal", new Ae(r, 3)), + B.setAttribute("uv", new Ae(a, 2)), + B + } + } + }; + Tu.getBoxMBuffer = function () { + for (var A = null, e = null, t = [], i = [], o = [], n = 0, r = 0; 6 > r; r += 1) { + var a = Tu.getBoxData(r); + for (A = 0, + e = a.vertex.length; e > A; A += 1) + t.push(a.vertex[A]); + for (A = 0, + e = a.index.length; e > A; A += 1) + o.push(a.index[A] + n); + for (n += a.vertex.length / 3, + A = 0, + e = a.normal.length; e > A; A += 1) + i.push(a.normal[A]) + } + return function (A) { + var e = null; + if (A) { + var n = new l, + r = new y; + e = []; + for (var a = 0; 6 > a; a += 1) { + var s = Tu.getBoxData(a); + n.set(A[6 * a], A[6 * a + 2], A[6 * a + 4], A[6 * a + 1], A[6 * a + 3], A[6 * a + 5], 0, 0, 1); + for (var c = 0, h = s.uv.length; h > c; c += 2) + r.set(s.uv[c], s.uv[c + 1], 1), + r.applyMatrix3(n), + e.push(r.x), + e.push(r.y) + } + } + return { + vertex: t, + normal: i, + uv: e, + index: o + } + } + }(), + Tu.getPipeMBuffer = function () { + var A = Tu.getPipeData(32), + e = A.edges, + t = A.vertex, + i = A.normal, + o = A.index; + return function (A) { + var n = null; + if (!(!A || 18 !== A.length)) { + n = []; + for (var r = [], a = 0, s = A.length / 6; s > a; a += 1) { + var c = new l; + c.set(A[6 * a], A[6 * a + 2], A[6 * a + 4], A[6 * a + 1], A[6 * a + 3], A[6 * a + 5], 0, 0, 1), + r.push(c) + } + for (var h = Tu.getPipeData(32), d = 4 * (e + 1), p = d + 2 * e, g = new y, u = 0, f = h.uv.length; f > u; u += 2) + g.set(h.uv[u], h.uv[u + 1], 1), + g.applyMatrix3(d > u ? r[0] : p > u ? r[1] : r[2]), + n.push(g.x), + n.push(g.y) + } + return { + vertex: t, + normal: i, + uv: n, + index: o + } + } + }(); + var ku = { + geoHeader: function (A) { + var e = new Int32Array(A); + this.geoCount = e[0], + this.headerBuffer = e.slice(1, 4 * this.geoCount + 1) + }, + GeometryReader: function (A, e) { + Bh.time("GeometryReader"), + this.geomMap = [], + this.geoCount = new Uint32Array(A, 0, 1)[0]; + var t = this.geoCount, + i = [], + o = 0, + n = null, + r = null, + a = null, + s = null, + l = null, + c = null, + h = null, + d = 0, + p = null, + g = 0, + u = null, + f = 0, + m = null, + C = 0, + y = null, + v = 0, + I = null; + if (np(e, "2")) + for (var E = 0; t > E; E += 1) { + if (i = {}, + o = 4 * (1 + 7 * t), + r = (n = new Uint32Array(A, 4 * (1 + 7 * E), 7))[0], + a = n[2], + s = n[3], + l = n[4], + c = n[5], + h = n[6], + d = o + n[1], + p = new Float32Array(A.slice(d, 4 * a + d)), + g = 4 * a + d, + u = new Float32Array(A.slice(g, g + 4 * s)), + f = g + 4 * s, + m = new Uint32Array(A.slice(f, f + 4 * l)), + C = f + 4 * l, + y = new Float32Array(A.slice(C, C + 4 * c)), + v = C + 4 * c, + I = new Int16Array(A.slice(v, v + 2 * h)), + vc.DataReduction) { + var B = (new M).makeScale(.001, .001, .001); + Tu.applyMatrix4ToBuffer(B, p) + } + i.position = p, + i.normal = u, + i.index = m, + i.uv = y, + i.materialIndex = I, + i.geoId = r, + this.geomMap.push(i) + } + else + for (var x = 0; t > x; x += 1) + i = {}, + o = 4 * (1 + 6 * t), + r = (n = new Uint32Array(A, 4 * (1 + 6 * x), 6))[0], + a = n[2], + s = n[3], + l = n[4], + c = n[5], + d = o + n[1], + p = new Float32Array(A.slice(d, 4 * a + d)), + g = 4 * a + d, + u = new Float32Array(A.slice(g, g + 4 * s)), + f = g + 4 * s, + m = new Uint32Array(A.slice(f, f + 4 * l)), + C = f + 4 * l, + y = new Float32Array(A.slice(C, C + 4 * c)), + i.position = p, + i.normal = u, + i.index = m, + i.uv = y, + i.geoId = r, + this.geomMap.push(i); + Bh.debug(this.geomMap), + Bh.timeEnd("GeometryReader") + }, + BatchedGeometryReader: function (A, e) { + Bh.time("BatchedGeometryReader"), + this.geomMap = [], + this.geoCount = new Uint32Array(A, 0, 1)[0]; + for (var t = this.geoCount, i = 0, o = 0, n = 0, r = [], a = 4, s = 0; t > s; s += 1) { + var l = {}; + r.push(l); + var c = new Uint32Array(A, a, 7); + l.geoId = c[0], + l.offset = c[1], + l.vertexLength = c[2], + l.normalLength = c[5], + l.indicesLength = c[3], + l.uvLength = c[4], + l.componentCount = o = c[6], + l.nodeInfo = [], + a += 28; + for (var h = 0; o > h; h += 1) { + var d = new Uint32Array(A, a, 1)[0]; + a += 4; + for (var p = 0; d > p; p += 1) { + var g = new Uint32Array(A, a, 3); + a += 12, + l.nodeInfo.push(g) + } + } + l.materialKeyLength = new Uint32Array(A, a, 1)[0], + a += 4 + } + for (var u = 0; t > u; u += 1) { + var f = r[u], + m = f.normalLength, + C = f.indicesLength, + y = f.uvLength; + i = a + f.offset, + n = 4 * f.vertexLength; + var v = new Float32Array(A.slice(i, i + n)); + i += n, + n = 4 * C; + var I = new Uint32Array(A.slice(i, i + n)); + i += n, + n = 4 * y; + var E = new Float32Array(A.slice(i, i + n)); + i += n, + n = 4 * m; + var B = new Float32Array(A.slice(i, i + n)); + i += n, + o = f.componentCount; + for (var x = {}, S = 0, w = f.nodeInfo.length; w > S; S += 1) { + var b = f.nodeInfo[S]; + n = 2 * b[0]; + var U = uh.ab2str(new Int16Array(A.slice(i, i + n))); + i += n, + n = 2 * b[1]; + var F = uh.ab2str(new Int16Array(A.slice(i, i + n))); + i += n; + var K = new Uint32Array(A.slice(i, i + 4))[0]; + i += 4; + var Q = new Uint32Array(A.slice(i, i + 4))[0]; + i += 4; + var R = new Uint32Array(A.slice(i, i + 4))[0]; + i += 4; + var T = new Uint32Array(A.slice(i, i + 4))[0]; + i += 4; + var k = {}; + k.userId = U, + k.nodeId = F, + k.positionStart = K, + k.positionCount = Q, + k.indexStart = R, + k.indexCount = T, + x[U] || (x[U] = []), + x[U].push(k) + } + n = 2 * f.materialKeyLength; + var D = uh.ab2str(new Int16Array(A.slice(i, i + n))); + if (vc.DataReduction) { + var L = (new M).makeScale(.001, .001, .001); + Tu.applyMatrix4ToBuffer(L, v) + } + var N = {}; + N.position = v, + N.normal = B, + N.index = I, + N.uv = E, + N.materialIndex = null, + N.geoId = f.geoId, + N.materialKey = D, + N.componentInfo = x, + this.geomMap.push(N) + } + Bh.debug(this.geomMap), + Bh.timeEnd("BatchedGeometryReader") + }, + NodesReader: function (A, e) { + Bh.time("NodesReader"), + this.geomMap = [], + this.nodeCount = new Uint32Array(A, 0, 1)[0]; + for (var t = this.nodeCount, i = 0, o = 0, n = [], r = 4, a = 0; t > a; a += 1) { + var s = {}; + n.push(s); + var l = new Uint32Array(A, r, 5); + s.geoId = l[0], + s.offset = l[1], + s.nodeIdLength = l[2], + s.materialKeyLength = l[3], + s.matrixLength = l[4], + r += 20 + } + for (var c = 0; t > c; c += 1) { + var h = n[c], + d = h.materialKeyLength, + p = h.matrixLength, + g = uh.ab2str(A.slice(i = r + h.offset, i + (o = h.nodeIdLength))), + u = uh.ab2str(A.slice(i += o, i + (o = d))); + i += o, + o = 8 * p; + var f = new Float64Array(A.slice(i, i + o)); + i += o; + var m = {}; + m.nodeId = g, + m.geoId = h.geoId, + m.material = u, + m.matrix = f, + this.geomMap.push(m) + } + Bh.debug(this.geomMap), + Bh.timeEnd("NodesReader") + }, + InstancedGeometryReader: function (A, e) { + Bh.time("InstancedGeometryReader"), + this.geomMap = [], + this.geoCount = new Uint32Array(A, 0, 1)[0]; + for (var t = this.geoCount, i = null, o = 0, n = 0, r = 0, a = [], s = 4, l = 0; t > l; l += 1) { + var c = {}; + a.push(c), + i = new Uint32Array(A, s, 7), + c.geoId = i[0], + c.offset = i[1], + c.vertexLength = i[2], + c.normalLength = i[5], + c.indicesLength = i[3], + c.uvLength = i[4], + c.componentCount = n = i[6], + c.nodeInfo = {}, + s += 28; + var h = []; + c.componentKeyLength = h, + c.matrixArrayLength = []; + for (var d = 0; n > d; d += 1) { + h.push(new Uint32Array(A, s, 1)[0]), + s += 4; + var p = new Uint32Array(A, s, 1)[0]; + s += 4, + c.nodeInfo[d] = []; + for (var g = 0; p > g; g += 1) { + var u = new Uint32Array(A, s, 1)[0]; + s += 4, + c.nodeInfo[d].push(u) + } + } + c.matrixArrayLength = new Uint32Array(A, s, 1)[0], + s += 4, + c.materialKeyLength = new Uint32Array(A, s, 1)[0], + s += 4 + } + for (var f = 0; t > f; f += 1) { + var m = a[f], + C = m.normalLength, + y = m.indicesLength, + v = m.uvLength; + o = s + m.offset, + r = 4 * m.vertexLength; + var I = new Float32Array(A.slice(o, o + r)); + o += r, + r = 4 * y; + var E = new Uint32Array(A.slice(o, o + r)); + o += r, + r = 4 * v; + var B = new Float32Array(A.slice(o, o + r)); + o += r, + r = 4 * C; + var x = new Float32Array(A.slice(o, o + r)); + o += r; + for (var S = {}, w = [], b = [], U = 0, F = 0, K = n = m.componentCount; K > F; F += 1) { + var Q = uh.ab2str(A.slice(o, o + (r = m.componentKeyLength[F]))); + o += r, + b.push(Q), + S[Q] || (S[Q] = []); + for (var R = m.nodeInfo[F], T = 0, k = R.length; k > T; T += 1) { + var D = uh.ab2str(A.slice(o, o + (r = R[T]))); + o += r, + S[Q].push(U), + w.push(D), + U += 1 + } + } + r = 8 * m.matrixArrayLength; + var L = new Float64Array(A.slice(o, o + r)); + o += r; + var N = new Float64Array(A.slice(o, o + r)); + o += r; + var O = new Float64Array(A.slice(o, o + r)); + o += r; + var V = new Float64Array(A.slice(o, o + r)), + G = uh.ab2str(A.slice(o += r, o + (r = m.materialKeyLength))); + o += r, + r = 4 * w.length * 4; + var P = new Float32Array(A.slice(o, o + r)); + if (o += r, + vc.DataReduction) { + var q = (new M).makeScale(.001, .001, .001); + Tu.applyMatrix4ToBuffer(q, I) + } + var j = {}; + j.position = I, + j.normal = x, + j.index = E, + j.uv = B, + j.materialIndex = null, + j.geoId = m.geoId, + j.materialKey = G, + j.componentInfo = S, + j.mcol0 = L, + j.mcol1 = N, + j.mcol2 = O, + j.mcol3 = V, + j.color = P, + j.nodeIdInfo = w, + j.componentKeyInfo = b, + this.geomMap.push(j) + } + Bh.debug(this.geomMap), + Bh.timeEnd("InstancedGeometryReader") + }, + BoneReader: function (A, e) { + Bh.time("BoneReader"), + this.boneMap = [], + this.boneCount = new Uint32Array(A, 0, 1)[0]; + for (var t = this.boneCount, i = [], o = 0, n = null, r = null, a = null, s = null, l = null, c = null, h = 0, d = null, p = 0, g = null, u = 0, f = null, m = 0, C = [], y = "[]", v = 0; t > v; v += 1) { + i = {}, + o = 4 * (1 + 5 * t), + r = (n = new Uint32Array(A, 4 * (1 + 5 * v), 5))[0], + a = n[2], + s = n[3], + l = n[3], + c = n[4], + h = o + n[1], + d = new Float32Array(A.slice(h, 4 * a + h)), + p = 4 * a + h, + g = new Uint16Array(A.slice(p, p + 2 * s)), + u = p + 2 * s, + f = new Float32Array(A.slice(u, u + 4 * l)), + m = u + 4 * l; + var I = new Uint8Array(A.slice(m, m + c)); + y = mh.isIE11() ? uh.decodeUTF8(I) : new TextDecoder("utf-8").decode(I); + try { + C = JSON.parse(y) + } catch (A) { + Bh.error("解析name出错:", A) + } + i.offsetMatrix = d, + i.skinIndex = g, + i.skinWeight = f, + i.name = C, + i.geoId = r, + this.boneMap.push(i) + } + Bh.debug(this.boneMap), + Bh.time("BoneReader") + } + }; + ku.GeometryReader.prototype = { + constructor: ku.GeometryReader, + getPositionBuffer: function (A) { + return this.geos[A].position + }, + getIndexBuffer: function (A) { + return this.geos[A].index + }, + getNormalBuffer: function (A) { + return this.geos[A].normal + }, + getUVBuffer: function (A) { + return [] + } + }; + var Du = function (A, e) { + if (this.materialMap = [], + np(e, "2")) + this.materialMap = A; + else + for (var t = this.materialCount = new Uint32Array(A, 0, 1)[0], i = 4 * (1 + 6 * t), o = 0; t > o; o += 1) { + var n = new Uint32Array(A, 4 * (1 + 6 * o), 6), + r = n[0], + a = n[1], + s = n[2], + l = n[3], + c = n[4], + h = n[5], + d = new Float32Array(A.slice(i + a, 4 * s + i + a)), + p = new Int16Array(A.slice(4 * s + i + a, 4 * s + i + a + 2 * l)), + g = new Uint8Array(A.slice(4 * s + i + a + 2 * l, 4 * s + i + a + 2 * l + c)), + u = 4 * s + i + a + 2 * l + c, + f = new Int16Array(A.slice(u, u + 2 * h)), + m = "[]"; + m = mh.isIE11() ? uh.decodeUTF8(g) : new TextDecoder("utf-8").decode(g); + var C = []; + try { + C = JSON.parse(m) + } catch (A) { + Bh.error("解析纹理出错:", A) + } + var y = {}; + y.matId = r, + y.color = d, + y.colorIndex = p, + y.texture = C, + y.textureIndex = f, + this.materialMap.push(y) + } + Bh.debug(this.materialMap) + }, + Lu = { + geoHeader: function (A) { + var e = new Int32Array(A); + this.geoCount = e[0], + this.headerBuffer = e.slice(1, 4 * this.geoCount + 1) + }, + GeometryReader: function (A, e) { + this.geomMap = [], + this.geoCount = new Uint32Array(A, 0, 1)[0]; + for (var t = this.geoCount, i = [], o = 0, n = null, r = null, a = null, s = null, l = 0, c = null, h = null, d = 0, p = 0; t > p; p += 1) + i = {}, + o = 4 * (1 + 4 * t), + r = (n = new Uint32Array(A, 4 * (1 + 4 * p), 4))[0], + a = n[3], + s = n[2], + l = o + n[1], + h = new Uint32Array(A.slice(l, l + 4 * s)), + d = l + 4 * s, + c = new Float32Array(A.slice(d, 4 * a + d)), + i.position = c, + i.index = h, + i.geoId = r, + this.geomMap.push(i); + Bh.debug(this.geomMap) + }, + BoneReader: function (A, e) { + this.boneMap = [], + this.boneCount = new Uint32Array(A, 0, 1)[0]; + for (var t = this.boneCount, i = [], o = 0, n = null, r = null, a = null, s = null, l = null, c = null, h = 0, d = null, p = 0, g = null, u = 0, f = null, m = 0, C = [], y = "[]", v = 0; t > v; v += 1) { + i = {}, + o = 4 * (1 + 5 * t), + r = (n = new Uint32Array(A, 4 * (1 + 5 * v), 5))[0], + a = n[2], + s = n[3], + l = n[3], + c = n[4], + h = o + n[1], + d = new Float32Array(A.slice(h, 4 * a + h)), + p = 4 * a + h, + g = new Uint16Array(A.slice(p, p + 2 * s)), + u = p + 2 * s, + f = new Float32Array(A.slice(u, u + 4 * l)), + m = u + 4 * l; + var I = new Uint8Array(A.slice(m, m + c)); + y = mh.isIE11() ? uh.decodeUTF8(I) : new TextDecoder("utf-8").decode(I); + try { + C = JSON.parse(y) + } catch (A) { + Bh.error("解析name出错:", A) + } + i.offsetMatrix = d, + i.skinIndex = g, + i.skinWeight = f, + i.name = C, + i.geoId = r, + this.boneMap.push(i) + } + Bh.debug(this.boneMap) + } + }; + Lu.GeometryReader.prototype = { + constructor: Lu.GeometryReader, + getPositionBuffer: function (A) { + return this.geos[A].position + }, + getIndexBuffer: function (A) { + return this.geos[A].index + }, + getNormalBuffer: function (A) { + return this.geos[A].normal + }, + getUVBuffer: function (A) { + return [] + } + }; + var Nu = function (A) { + this.MaxThreadCount = A || 8, + this.todoList = [], + this.doingCount = 0, + this.addItem = function (A) { + void 0 !== A && this.todoList.push(A) + }, + this.run = function (A, e, t) { + if (0 >= this.doingCount) + if (0 !== this.todoList.length) { + var i = this.todoList, + o = i.length; + this.todoList = [], + this.doingCount = o; + for (var n = Math.min(this.MaxThreadCount, vc.ConcurrencyRequestCount, o), r = this, a = 0; n > a; a += 1) + s(a) + } else + t(); + + function s(a) { + o > a ? (e(r.doingCount, o), + A(i[a], a + n, s)) : 1 > r.doingCount && (r.run(A, e, t), + e(r.doingCount, o), + t()) + } + } + }, + Ou = function (A, e) { + this.type = e, + this.manager = A, + this.worker = new Nu(4), + this.working = !0 + }; + + function Vu(A, e, t, i) { + for (var o = function (A, e) { + var t = void 0; + t = "Line" === e || "LineSegments" === e ? new Ba : new Ja; + for (var i = new s, o = new s, n = new s, r = !0, a = !1, l = A.match(/[a-df-z][^a-df-z]*/gi), c = 0, h = l.length; h > c; c++) { + var d = l[c], + p = (e = d.charAt(0), + d.substr(1).trim()); + switch (!0 === r && (a = !0, + r = !1), + e) { + case "M": + for (var g = Gu(p), u = 0, f = g.length; f > u; u += 2) + i.x = g[u + 0], + i.y = g[u + 1], + o.x = i.x, + o.y = i.y, + 0 === u ? t.moveTo(i.x, i.y) : t.lineTo(i.x, i.y), + 0 === u && !0 === a && n.copy(i); + break; + case "H": + for (g = Gu(p), + u = 0, + f = g.length; f > u; u++) + i.x = g[u], + o.x = i.x, + o.y = i.y, + t.lineTo(i.x, i.y), + 0 === u && !0 === a && n.copy(i); + break; + case "V": + for (g = Gu(p), + u = 0, + f = g.length; f > u; u++) + i.y = g[u], + o.x = i.x, + o.y = i.y, + t.lineTo(i.x, i.y), + 0 === u && !0 === a && n.copy(i); + break; + case "L": + for (g = Gu(p), + u = 0, + f = g.length; f > u; u += 2) + i.x = g[u + 0], + i.y = g[u + 1], + o.x = i.x, + o.y = i.y, + t.lineTo(i.x, i.y), + 0 === u && !0 === a && n.copy(i); + break; + case "C": + for (g = Gu(p), + u = 0, + f = g.length; f > u; u += 6) + t.bezierCurveTo(g[u + 0], g[u + 1], g[u + 2], g[u + 3], g[u + 4], g[u + 5]), + o.x = g[u + 2], + o.y = g[u + 3], + i.x = g[u + 4], + i.y = g[u + 5], + 0 === u && !0 === a && n.copy(i); + break; + case "S": + for (g = Gu(p), + u = 0, + f = g.length; f > u; u += 4) + t.bezierCurveTo(Pu(i.x, o.x), Pu(i.y, o.y), g[u + 0], g[u + 1], g[u + 2], g[u + 3]), + o.x = g[u + 0], + o.y = g[u + 1], + i.x = g[u + 2], + i.y = g[u + 3], + 0 === u && !0 === a && n.copy(i); + break; + case "Q": + for (g = Gu(p), + u = 0, + f = g.length; f > u; u += 4) + t.quadraticCurveTo(g[u + 0], g[u + 1], g[u + 2], g[u + 3]), + o.x = g[u + 0], + o.y = g[u + 1], + i.x = g[u + 2], + i.y = g[u + 3], + 0 === u && !0 === a && n.copy(i); + break; + case "T": + for (g = Gu(p), + u = 0, + f = g.length; f > u; u += 2) { + var m = Pu(i.x, o.x), + C = Pu(i.y, o.y); + t.quadraticCurveTo(m, C, g[u + 0], g[u + 1]), + o.x = m, + o.y = C, + i.x = g[u + 0], + i.y = g[u + 1], + 0 === u && !0 === a && n.copy(i) + } + break; + case "A": + for (g = Gu(p), + u = 0, + f = g.length; f > u; u += 7) { + var y = i.clone(); + i.x = g[u + 5], + i.y = g[u + 6], + o.x = i.x, + o.y = i.y, + qu(t, g[u], g[u + 1], g[u + 2], g[u + 3], g[u + 4], y, i), + 0 === u && !0 === a && n.copy(i) + } + break; + case "m": + for (g = Gu(p), + u = 0, + f = g.length; f > u; u += 2) + i.x += g[u + 0], + i.y += g[u + 1], + o.x = i.x, + o.y = i.y, + 0 === u ? t.moveTo(i.x, i.y) : t.lineTo(i.x, i.y), + 0 === u && !0 === a && n.copy(i); + break; + case "h": + for (g = Gu(p), + u = 0, + f = g.length; f > u; u++) + i.x += g[u], + o.x = i.x, + o.y = i.y, + t.lineTo(i.x, i.y), + 0 === u && !0 === a && n.copy(i); + break; + case "v": + for (g = Gu(p), + u = 0, + f = g.length; f > u; u++) + i.y += g[u], + o.x = i.x, + o.y = i.y, + t.lineTo(i.x, i.y), + 0 === u && !0 === a && n.copy(i); + break; + case "l": + for (g = Gu(p), + u = 0, + f = g.length; f > u; u += 2) + i.x += g[u + 0], + i.y += g[u + 1], + o.x = i.x, + o.y = i.y, + t.lineTo(i.x, i.y), + 0 === u && !0 === a && n.copy(i); + break; + case "c": + for (g = Gu(p), + u = 0, + f = g.length; f > u; u += 6) + t.bezierCurveTo(i.x + g[u + 0], i.y + g[u + 1], i.x + g[u + 2], i.y + g[u + 3], i.x + g[u + 4], i.y + g[u + 5]), + o.x = i.x + g[u + 2], + o.y = i.y + g[u + 3], + i.x += g[u + 4], + i.y += g[u + 5], + 0 === u && !0 === a && n.copy(i); + break; + case "s": + for (g = Gu(p), + u = 0, + f = g.length; f > u; u += 4) + t.bezierCurveTo(Pu(i.x, o.x), Pu(i.y, o.y), i.x + g[u + 0], i.y + g[u + 1], i.x + g[u + 2], i.y + g[u + 3]), + o.x = i.x + g[u + 0], + o.y = i.y + g[u + 1], + i.x += g[u + 2], + i.y += g[u + 3], + 0 === u && !0 === a && n.copy(i); + break; + case "q": + for (g = Gu(p), + u = 0, + f = g.length; f > u; u += 4) + t.quadraticCurveTo(i.x + g[u + 0], i.y + g[u + 1], i.x + g[u + 2], i.y + g[u + 3]), + o.x = i.x + g[u + 0], + o.y = i.y + g[u + 1], + i.x += g[u + 2], + i.y += g[u + 3], + 0 === u && !0 === a && n.copy(i); + break; + case "t": + for (g = Gu(p), + u = 0, + f = g.length; f > u; u += 2) { + m = Pu(i.x, o.x), + C = Pu(i.y, o.y); + t.quadraticCurveTo(m, C, i.x + g[u + 0], i.y + g[u + 1]), + o.x = m, + o.y = C, + i.x = i.x + g[u + 0], + i.y = i.y + g[u + 1], + 0 === u && !0 === a && n.copy(i) + } + break; + case "a": + for (g = Gu(p), + u = 0, + f = g.length; f > u; u += 7) { + y = i.clone(); + i.x += g[u + 5], + i.y += g[u + 6], + o.x = i.x, + o.y = i.y, + qu(t, g[u], g[u + 1], g[u + 2], g[u + 3], g[u + 4], y, i), + 0 === u && !0 === a && n.copy(i) + } + break; + case "Z": + case "z": + t.currentPath.autoClose = !0, + t.currentPath.curves.length > 0 && (i.copy(n), + t.currentPath.currentPoint.copy(i), + r = !0); + break; + default: + console.warn(d) + } + a = !1 + } + return t + }(A), n = "Shape" === o.type ? [o] : o.toShapes(!0), r = new H, a = 0; n.length > a; a++) { + var l = n[a]; + if ("Line" === e || "LineSegments" === e) { + for (var c = l.getPoints(), h = 0; c.length > h; h += 1) { + var d = c[h]; + d.y = -d.y, + i && (d.z = i) + } + if ("LineSegments" === e) { + var p = new jo((new De).setFromPoints(c), t); + r.add(p) + } else if ("Line" === e) { + var g = new Go((new De).setFromPoints(c), t); + r.add(g) + } + } else if ("Mesh" === e) { + for (var u = new ar(l), f = u.getAttribute("position"), m = f.array, C = 0, y = m.length; y > C; C += 3) + m[C + 1] = -m[C + 1], + m[C + 2] = i; + f.needsUpdate = !0; + var v = new Ue(u, t); + r.add(v) + } + } + return r + } + + function Gu(A) { + for (var e = A.split(/[\s,]+|(?=\s?[+\-])/), t = 0; e.length > t; t += 1) { + var i = e[t]; + if (i.indexOf(".") !== i.lastIndexOf(".")) + for (var o = i.split("."), n = 2; o.length > n; n += 1) + e.splice(t + n - 1, 0, "0." + o[n]); + e[t] = parseFloat(i) + } + return e + } + + function Pu(A, e) { + return A - (e - A) + } + + function qu(A, e, t, i, o, n, r, a) { + i = i * Math.PI / 180, + e = Math.abs(e), + t = Math.abs(t); + var s = (r.x - a.x) / 2, + l = (r.y - a.y) / 2, + c = Math.cos(i) * s + Math.sin(i) * l, + h = -Math.sin(i) * s + Math.cos(i) * l, + d = e * e, + p = t * t, + g = c * c, + u = h * h, + f = g / d + u / p; + if (f > 1) { + var m = Math.sqrt(f); + d = (e *= m) * e, + p = (t *= m) * t + } + var C = d * u + p * g, + y = Math.sqrt(Math.max(0, (d * p - C) / C)); + o === n && (y = -y); + var v = y * e * h / t, + I = -y * t * c / e, + E = Math.cos(i) * v - Math.sin(i) * I + (r.x + a.x) / 2, + B = Math.sin(i) * v + Math.cos(i) * I + (r.y + a.y) / 2, + x = svgAngle(1, 0, (c - v) / e, (h - I) / t), + S = svgAngle((c - v) / e, (h - I) / t, (-c - v) / e, (-h - I) / t) % (2 * Math.PI); + A.currentPath.absellipse(E, B, e, t, x, x + S, 0 === n, i) + } + + function ju(A) { + this.group = A; + var e = new LA(16711680); + this._lineMaterial = new ko({ + color: e, + side: 2 + }), + this._meshMaterial = new jA({ + color: e, + side: 2 + }) + } + + function Hu() { + this.axisNet = void 0, + this.visibleByUser = !1 + } + Ou.prototype = { + constructor: Ou, + addTask: function (A) { + this.worker.addItem(A) + }, + processTasks: function (A, e, t) { + var i = this, + o = this.worker; + this.worker.run((function (e, t, n) { + i.working && A(e, (function () { + o.doingCount -= 1, + n(t) + })) + }), e = e || function () {}, t = t || function () {}) + }, + stop: function () { + this.working = !1 + }, + start: function () { + this.working = !0 + } + }, + ju.prototype.fromJSON = function (A, e) { + for (var t in A) + if (A.hasOwnProperty(t)) { + var i = A[t]; + for (var o in i) + if (i.hasOwnProperty(o)) { + var n = i[o], + r = n.G.Path; + if (r && r.length > 0) { + var a = n.P.matrix || [0, 0]; + if (n.P.Type && "LINE" === n.P.Type) { + for (var s = "", l = 0, c = r.length; c > l; l += 1) + s += r[l]; + var h = Vu(s, "LineSegments", this._lineMaterial, e); + h.position.setX(a[0]), + h.position.setY(-a[1]), + this.group.add(h), + h.updateMatrixWorld(!0) + } else + for (var d = 0, p = r.length; p > d; d += 1) { + var g = void 0, + u = Vu(r[d], g = n.G.Fill && n.G.Fill.length === p && 0 !== n.G.Fill[d].length ? "Mesh" : "Line", "Line" === g ? this._lineMaterial : this._meshMaterial, e); + u.position.setX(a[0]), + u.position.setY(-a[1]), + this.group.add(u), + u.updateMatrixWorld(!0) + } + } + } + } + }, + ju.prototype.setColor = function (A, e) { + if (A) { + var t = new LA(A); + this._lineMaterial.color = t, + e && (this._lineMaterial.opacity = e, + this._lineMaterial.transparent = 1 !== e), + this._meshMaterial.color = t, + e && (this._meshMaterial.opacity = e, + this._meshMaterial.transparent = 1 !== e), + this._lineMaterial.needsUpdate = !0, + this._meshMaterial.needsUpdate = !0 + } + }, + ju.prototype.enableStayInFront = function () { + this._lineMaterial.transparent = !0, + this._meshMaterial.transparent = !0, + this._lineMaterial.depthTest = !1, + this._meshMaterial.depthTest = !1 + }, + ju.prototype.disableStayInFront = function () { + this._lineMaterial.transparent = !1, + this._meshMaterial.transparent = !1, + this._lineMaterial.depthTest = !0, + this._meshMaterial.depthTest = !0 + }, + Hu.prototype.setupColor = function (A, e) { + A && this.axisNet.setColor(A, e) + }, + Hu.prototype.hide = function () { + this.axisNet && (this.visibleByUser = !1, + this.axisNet.group.visible = !1) + }, + Hu.prototype.show = function () { + this.axisNet && (this.visibleByUser = !0, + this.axisNet.group.visible = !0) + }, + Hu.prototype.privateShow = function () { + this.axisNet && (this.axisNet.group.visible = !0) + }, + Hu.prototype.privateHide = function () { + this.axisNet && (this.axisNet.group.visible = !1) + }, + Hu.prototype.enableStayInFront = function () { + this.axisNet.enableStayInFront() + }, + Hu.prototype.disableStayInFront = function () { + this.axisNet.disableStayInFront() + }; + var Yu = function () { + this.name = "", + this.componentkeys = [], + this.box = void 0, + this.center = void 0, + this.map = void 0 + }, + Wu = function () { + this.name = "", + this.image = void 0, + this.width = 0, + this.height = 0, + this.sceneWidth = 0, + this.sceneHeight = 0, + this.box = { + x1: 0, + y1: 0, + z1: 0, + x2: 0, + y2: 0, + z2: 0, + offsetX: 0, + offsetY: 0 + }, + this.componentKeys = void 0 + }; + Wu.prototype.clone = function () { + var A = new Wu; + return A.name = this.name, + A.image = this.image, + A.width = this.width, + A.height = this.height, + A.sceneWidth = this.sceneWidth, + A.sceneHeight = this.sceneHeight, + A.box = Object.assign({}, this.box), + A.componentKeys = this.componentKeys ? [].concat(this.componentKeys) : void 0, + A + }, + Yu.parseFloorInfos = function (A) { + for (var e = [], t = Object.keys(A), i = 0, o = t.length; o > i; i += 1) { + var n = A[t[i]]; + if (n.length > 0) { + var r = new Yu; + r.componentkeys = n, + r.name = t[i], + e.push(r) + } + } + if (e.length > 0) + return e + }; + var Ju = function () { + this.floors = void 0, + this.sortedFloors = void 0, + this.factor = 1, + this.baseFloorIndex = -1, + this.averageHeight = 0, + this.center = void 0 + }, + zu = function () { + function A() { + cc(this, A), + this.floors = void 0, + this.floorExplosionInfo = void 0, + this.modelType = void 0, + this.modelKey = void 0, + this.revitFilter = { + OST_CeilingOpening: !0, + OST_FloorOpening: !0, + OST_RoofOpening: !0, + OST_Walls: !0, + OST_StructuralFraming: !0, + OST_CurtainWallPanels: !0, + OST_CurtainWallMullions: !0, + OST_CurtaSystem: !0, + OST_ShaftOpening: !0 + }, + this.ifcFilter = { + IfcWallStandardCase: !0, + IfcWall: !0, + IfcCurtainWall: !0, + IfcBeam: !0, + IfcMember: !0 + } + } + return dc(A, [{ + key: "generateMiniMap", + value: function (A) { + var e = this; + if ((this.modelType === Zc.RVT || this.modelType === Zc.IFC || this.modelType === Zc.MERGE) && this.floors && this.floors.length > 0) { + var t = vc.MiniMapSize, + i = t, + o = A.rendererManager.renderer, + n = new s(t, i), + r = new g(n.x, n.y, { + stencilBuffer: !1 + }); + o.setRenderTarget(r); + var a = new p, + l = o.getPixelRatio(); + o.getViewport(a), + o.setPixelRatio(1), + o.setViewport(0, 0, n.width, n.height); + var c = A.getScene(), + h = new y, + d = new y, + u = A.getModel(this.modelKey).getBoundingBoxWorld(); + u.getCenter(h), + u.getSize(d); + var f = Math.ceil(Math.max(d.x, d.y)), + m = f / 2, + C = new y(f, f, d.z); + u.setFromCenterAndSize(h, C); + var v = new Ka; + v.up.set(0, 1, 0), + v.position.set(h.x, h.y, u.max.z), + v.lookAt(h.x, h.y, u.min.z), + v.left = -m, + v.right = m, + v.top = m, + v.bottom = -m, + v.near = 1, + v.far = d.z, + v.updateMatrixWorld(!0), + v.updateProjectionMatrix(); + var I = document.createElement("canvas"); + I.width = n.width, + I.height = n.height; + var E = I.getContext("2d"), + B = new Uint8Array(n.width * n.height * 4), + x = A.getFilter(); + this.floors.forEach((function (a) { + var s = e.findSpecificKeys(a.componentkeys, A); + 0 === s.length && (s = a.componentkeys); + var l = A.getBoundingBoxByIds(s); + l.getCenter(h), + l.getSize(d); + var p = new Wu; + p.box.x1 = l.min.x, + p.box.y1 = l.min.y, + p.box.z1 = l.min.z, + p.box.x2 = l.max.x, + p.box.y2 = l.max.y, + p.box.z2 = l.max.z, + p.box.offsetX = l.min.x - u.min.x, + p.box.offsetY = l.min.y - u.min.y, + p.width = t, + p.height = i, + p.sceneWidth = f, + p.sceneHeight = f, + p.name = a.name, + p.componentKeys = s, + a.map = p, + x.setIsolateList(s, !0), + A.modelManager.applyFilter(), + o.render(c, v), + o.readRenderTargetPixels(r, 0, 0, n.width, n.height, B); + for (var g = i / 2, m = 4 * t, C = new Uint8Array(4 * t), y = 0; g > y; y += 1) { + var S = y * m, + w = (i - y - 1) * m; + C.set(B.subarray(S, S + m)), + B.copyWithin(S, w, w + m), + B.set(C, w) + } + var M = new Uint8ClampedArray(B.buffer), + b = new ImageData(M, n.width, n.height); + E.putImageData(b, 0, 0), + p.image = I.toDataURL() + })), + x.clearIsolation(), + o.setRenderTarget(null), + o.setPixelRatio(l), + o.setViewport(a.x, a.y, a.width, a.height) + } + } + }, { + key: "findSpecificKeys", + value: function (A, e) { + for (var t = [], i = 0, o = A.length; o > i; i += 1) { + var n = e.modelManager.getComponent(A[i]); + if (n && n.length > 0) { + var r = n[0], + a = r.buildInCategory, + s = r.type; + (a && this.revitFilter[a] || s && this.ifcFilter[s]) && t.push(A[i]) + } + } + return t + } + }, { + key: "getMimiMaps", + value: function () { + if (this.serverMapData) + return { + msg: "success", + data: this.serverMapData.data + }; + if (this.floors && this.floors.length > 0) { + for (var A = [], e = 0, t = this.floors.length; t > e; e += 1) { + var i = this.floors[e].map; + i && A.push(i.clone()) + } + if (A.length > 0) + return { + msg: "success", + data: A + } + } + return { + msg: "该模型不支持小地图" + } + } + }, { + key: "getServerMimiMaps", + value: function (A) { + var e = this.model.dataUrl.floorMapUrl(), + t = this.model.accessToken, + i = this; + if (this.floors && this.floors.length > 0) + if (this.serverMapData) + A({ + msg: "success", + data: i.serverMapData.data + }); + else { + var o = { + url: e, + success: function (e) { + var t; + "SUCCESS" === (t = "string" == typeof e ? JSON.parse(e) : e).code ? (i.serverMapData = t, + A({ + msg: "success", + data: t.data + })) : "FAILURE" === t.code ? setTimeout((function () { + i.getServerMimiMaps(A) + }), 3e3) : A({ + msg: "获取模型小地图出错" + }) + }, + error: function () { + A({ + msg: "该模型不支持小地图" + }) + } + }; + t && (o.headers = { + Authorization: t + }), + _d(o) + } + } + }]), + A + }(), + Zu = function () { + this.leftChild = null, + this.rightChild = null, + this.boundingBox = null, + this.level = -1, + this.components = [] + }; + Zu.prototype.init = function (A) { + if (A && (void 0 !== A.axis && (this.level = A.axis), + A.left && (this.leftChild = new Zu, + this.leftChild.init(A.left[0] ? A.left[0] : A.left)), + A.right && (this.rightChild = new Zu, + this.rightChild.init(A.right[0] ? A.right[0] : A.right)), + A.box && !A.items && (this.boundingBox = new aA((new y).fromArray(A.box.min), (new y).fromArray(A.box.max))), + A.items)) + for (var e = 0; A.items.length > e; e += 1) + this.components.push(A.items[e].key) + }, + Zu.prototype.intersect = function (A, e) { + if (this.boundingBox) { + if (!1 === A.intersectsBox(this.boundingBox)) + return; + this.leftChild && this.leftChild.intersect(A, e), + this.rightChild && this.rightChild.intersect(A, e); + for (var t = 0; this.components.length > t; t += 1) + e.push(this.components[t]) + } else + for (var i = 0; this.components.length > i; i += 1) + e.push(this.components[i]) + }, + Zu.prototype.frustumIntersect = function (A, e, t) { + if (this.boundingBox) { + var i = this.boundingBox; + if (t && !t.equals(Bc) && (i = this.boundingBox.clone()).applyMatrix4(t), + !1 === A.intersectsBox(i)) + return; + this.leftChild && this.leftChild.frustumIntersect(A, e, t), + this.rightChild && this.rightChild.frustumIntersect(A, e, t); + for (var o = 0; this.components.length > o; o += 1) + e.push(this.components[o]) + } else + for (var n = 0; this.components.length > n; n += 1) + e.push(this.components[n]) + }, + Zu.prototype.destroy = function () { + this.leftChild && this.leftChild.destroy(), + this.rightChild && this.rightChild.destroy(), + this.leftChild = null, + this.rightChild = null, + this.boundingBox = null, + this.level = -1, + this.components = [] + }; + var Xu = function (A) { + jr.call(this), + this.handler = A, + this.model = A.model, + this.dataVersion = this.model.dataVersion, + this.storage = this.model.getStorage(), + this.url = A.model.dataUrl, + this.offLine = A.model.offLine, + this.fileLoader = A.model.fileLoader, + this.descriptor = null, + this.loader = new bu(this), + this.Textureloader = new bu(this), + this.jsonLoader = new bu(this), + this.loadTaskCount = 0, + this.maxLoadTaskCount = 0, + this.loadTextureCount = 0, + this.maxLoadTextureCount = 0, + this.textruesLoaded = !1, + this.dataLoaded = !1, + this.taskComponentManager = new Ou(this, "component"), + this.taskReuseNodeManager = new Ou(this, "component"), + this.taskGeometrieManager = new Ou(this, "geometrie"), + this.taskComponentNodeManager = new Ou(this, "nodes"), + this.taskMaterialManager = new Ou(this, "material"), + this.taskTexturesManager = new Ou(this, "textures"), + this.fileKeyFromModelKey = {}, + this.enableCompressedTexture = !1, + this.enableSmallTexture = !1, + this.startCallback = null, + this.progressCallback = null, + this.finishCallback = null, + this.progress = { + total: 0, + loaded: 0, + failed: 0 + }, + this.requests = {} + }; + Xu.prototype.destroy = function () { + for (var A in this.requests) + this.requests.hasOwnProperty(A) && (this.requests[A].abort && this.requests[A].abort(), + delete this.requests[A]); + this.taskComponentManager.stop(), + this.taskComponentManager = null, + this.taskGeometrieManager.stop(), + this.taskGeometrieManager = null, + this.taskMaterialManager.stop(), + this.taskMaterialManager = null, + this.taskTexturesManager.stop(), + this.taskTexturesManager = null, + this.url = null, + this.model = null, + this.fileLoader = null, + this.descriptor = null, + this.handler = null, + this.startCallback = null, + this.progressCallback = null, + this.finishCallback = null, + this.descriptor && this.descriptor.destroy() + }, + Xu.prototype.getStorage = function () { + return this.storage + }, + Xu.prototype.getDescriptor = function () { + return this.descriptor + }, + Xu.prototype.setNotifyProgress = function (A) { + this.notifyProgress = A + }, + Xu.prototype.load = function (A, e, t) { + this.startCallback = A, + this.progressCallback = e, + this.finishCallback = t, + this.loadData() + }, + Xu.prototype.loadData = function () { + var A = this.model, + e = A.getConfig(), + t = e.scene, + i = e.animation; + if (!t || !t.components || !t.geometries && (!t.batchedGeometries && !t.instancedGeometries || 1 > t.batchedGeometries.length && 1 > t.instancedGeometries.length) || !t.materials || !t.textures) + return A.setEmptyScene(!0), + Bh.error("scene is null,modelKey is ", A.modelKey), + void A.dispatchEventEx({ + type: Rc.ON_LOAD_EMPTY_SCENE, + modelKey: A.modelKey + }); + var o = 0, + n = 0, + r = 0, + a = t.components.length || 0, + s = t.materials.length || 0, + l = t.textures.length || 0, + c = t.lights && t.lights.length || 0, + h = t.reuseNodes && t.reuseNodes.length || 0, + d = [], + p = [], + g = [], + u = [], + f = [], + m = [], + C = [], + y = t.textures, + v = [], + I = []; + if (this.map = {}, + ap(this.dataVersion, "2.0.0")) { + for (var E = 0; a > E; E += 1) + t.components[E].fileKey ? d.push(t.components[E].fileKey) : A.dispatchEventEx({ + type: Tc.SCENE_NOT_CLOSE, + modelKey: A.modelKey + }); + for (var B = 0; s > B; B += 1) + t.materials[B].fileKey ? p.push(t.materials[B].fileKey) : A.dispatchEventEx({ + type: Tc.SCENE_NOT_CLOSE, + modelKey: A.modelKey + }) + } else + d = t.components, + t.geometries, + p = t.materials, + Array.isArray(t.nodes) && (C = t.nodes), + I = t.reuseNodes || []; + if (t.map && (this.map = t.map), + t.lights && t.lights.length > 0 && (m = t.lights), + t.trees.length > 0) + for (var x = 0; t.trees.length > x; x += 1) { + var S = t.trees[x]; + "partition" === S.type && v.push(S.fileKey) + } + if (i && (o = i.bones.length, + n = 1, + r = 1, + g = i.bones, + u.push(i.clips), + f.push(i.nodes)), + this.maxLoadTaskCount = 0, + this.maxLoadTaskCount += a, + this.maxLoadTaskCount += s, + this.maxLoadTaskCount += o, + this.maxLoadTaskCount += n, + this.maxLoadTaskCount += r, + this.maxLoadTaskCount += c, + this.maxLoadTaskCount += v.length, + this.maxLoadTaskCount += h, + this.maxLoadTaskCount += C.length, + 1 > this.maxLoadTaskCount) + return Bh.info("Nothing to load ", A.modelKey), + void A.dispatchEventEx({ + type: Tc.SCENE_NOTHING_TO_LOAD, + modelKey: A.modelKey + }); + this.progress.total += this.maxLoadTaskCount, + this.startCallback && this.startCallback(), + Bh.time("数据加载时间"), + this._loadComponent(d), + this._loadMaterial(p), + this._loadComponentNode(C), + this._loadReuseNode(I), + vc.EnableTextureLoading && l > 0 ? (this.maxLoadTextureCount += l, + this._loadTextures(y)) : this._onLoadTexture(), + this._loadKDTree(v), + this._loadClips(u), + this._loadBones(g), + this._loadNodes(f), + c && this._loadLights(m), + this.offLine && this.loadAttribute(), + e.axis && this._loadAxisNet(e.axis), + this.loadFloorInfo(this.model.modelKey), + this.loadSceneAndGeos(e) + }, + Xu.prototype.loadSceneAndGeos = function (A) {}, + Xu.prototype.getSceneTaskCount = function (A) { + return 0 + }, + Xu.prototype._loadLightmapConfig = function (A, e) { + var t = this.model, + i = this.descriptor; + i && this.fileLoader.load(A, (function (A) { + var o; + try { + o = JSON.parse(A) + } catch (A) { + return void console.log("Lightmap config data exceptions!") + } + void 0 !== o.count.lightmapNum && o.count.lightmapNum > 0 && (t.lightmapNum = o.count.lightmapNum, + t.lightmap = !0, + i.lightmap = !0, + vc.Instance = !1, + vc.EnableLightmap = !0), + e && e() + })) + }, + Xu.prototype._onTaskFinished = function () { + var A = this.model; + this.loadTaskCount += 1; + var e = this.dealProgressSegment(A, this.loadTaskCount); + this.notifyProgress && (this.progressCallback && this.progressCallback({ + total: this.maxLoadTaskCount, + loaded: e, + modelKey: this.model.modelKey + })); + this.maxLoadTaskCount > this.loadTaskCount || (this.dataLoaded = !0, + this.textruesLoaded && (Bh.timeEnd("数据加载时间"), + this.finishCallback && this.finishCallback())) + }, + Xu.prototype._onLoadTexture = function () { + this.loadTextureCount += 1, + this.maxLoadTextureCount > this.loadTextureCount || (this.textruesLoaded = !0, + this.dataLoaded && (Bh.timeEnd("数据加载时间"), + this.finishCallback && this.finishCallback())) + }, + Xu.prototype._loadScene = function (A) { + var e = this, + t = this.model, + i = this.url, + o = this.fileLoader; + o.setResponseType("arraybuffer"), + o.load(i.sceneUrl(A), (function (t) { + e._parseScene(t, A), + e._onTaskFinished() + }), void 0, (function (A) { + t.dispatchEvent({ + type: Tc.LOAD_ERROR, + errorType: Tc.LOAD_SCENE_ERROR, + event: A + }), + e._onTaskFinished() + })) + }, + Xu.prototype._parseScene = function (A, e) { + var t = new Loader.SceneReader(A); + this.descriptor.mapSceneReader[e] = t, + t = null + }, + Xu.prototype._loadLine = function () { + var A = this, + e = this.model, + t = this.url, + i = this.fileLoader; + i.setResponseType("arraybuffer"), + i.load(t.lineUrl(), (function (e) { + A._parseLine(e), + A._onTaskFinished() + }), void 0, (function (t) { + e.dispatchEvent({ + type: Tc.LOAD_ERROR, + errorType: Tc.LOAD_MATERIAL_ERROR, + event: t + }), + A._onTaskFinished() + })) + }, + Xu.prototype._parseLine = function (A) { + for (var e = new Loader.LineReader(A), t = 0, i = e.header.lineCount; i > t; ++t) { + var o = e.getPtBuffer(t), + n = e.getIdxBuffer(t); + if (void 0 !== o && void 0 !== n) { + var r = e.getLineData(t); + if (0 === r.lineType) { + for (var a = [], s = 1, l = n.length; l > s; s++) + a.push(n[s - 1]), + a.push(n[s]); + a.length && (n = a) + } + this.descriptor.cacheReferencedMeshBufferData("line-" + r.line_id, { + P: o, + I: n + }) + } else + Bh.log("Error Geometry!") + } + e = null + }, + Xu.prototype._parseMaterialBinary = function (A) { + var e, t = this.url, + i = this.model.materialManager, + o = i.materials, + n = i.textures, + r = new Loader.MaterialReader(A), + a = r.materialCount, + s = this, + l = []; + if (a >= 0) { + var c = this.model.manager.scene; + for (e = 0; a > e; ++e) { + var h, d = {}, + p = r.getMaterial(e); + if (void 0 !== p.color && (d.color = p.color), + void 0 !== p.opacity && (d.opacity = p.opacity, + 1 > p.opacity && (d.transparent = !0)), + void 0 !== p.side && p.side && (d.side = 2), + void 0 !== p.emissive && (d.emissive = p.emissive), + void 0 !== p.environment && (d.envMapIntensity = p.environment), + void 0 !== p.roughness && (d.roughness = p.roughness, + d.originRoughness = p.roughness), + void 0 !== p.metalness && (d.metalness = p.metalness, + d.originMetalness = p.metalness), + vc.IBL ? (d.iblProbe = c.iblProbe, + (h = new ImageBasedLighting.IBLMaterial(d)).type = "IBL") : h = Kd.createStandardMaterial(d), + h.name = e, + o[e] = h, + d = null, + vc.EnableTextureLoading) { + var g = null; + p.texture_n > 0 && (g = r.getTexture(p.texture_id[0])), + g && l.push({ + id: e, + data: g + }) + } + } + if (l.length > 0) { + for (a = this.maxLoadTextureCount = l.length, + e = 0; a > e; e += 1) + this._parseTexture(t, l[e], n); + l = null + } else + s._onLoadTexture(); + if (this.model.lightmap) { + var u = this.model.lightmapNum; + for (this.maxLoadTextureCount += u, + e = 0; u > e; e += 1) { + var f = this._loadTexture(t.textureUrl("lightmap-rgbm" + e + ".png"), (function () { + s._onLoadTexture() + }), void 0, (function () { + s._onLoadTexture() + })); + i.lightmaps[e] = f + } + } + r = null + } + }, + Xu.prototype._parseMaterialJson = function (A) { + var e, t = this.url, + i = this.model.materialManager, + o = i.materials, + n = i.textures, + r = new Loader.MaterialReaderJson(A), + a = r.count, + s = this, + l = []; + if (a >= 0) { + var c = this.model.manager.scene; + for (e = 0; a > e; ++e) { + var h, d = {}, + p = r.getMaterial(e), + g = p.parameters; + if (void 0 !== g.color && (d.color = g.color), + void 0 !== g.opacity && (d.opacity = g.opacity, + 1 > g.opacity && (d.transparent = !0)), + void 0 !== g.side && "double" === g.side && (d.side = 2), + void 0 !== g.emissive && (d.emissive = g.emissive), + void 0 !== g.environment && (d.envMapIntensity = g.environment), + void 0 !== g.roughness && (d.roughness = g.roughness, + d.originRoughness = g.roughness), + void 0 !== g.metalness && (d.metalness = g.metalness, + d.originMetalness = g.metalness), + void 0 !== g.refractionRatio && (d.refractionRatio = g.refractionRatio), + void 0 !== g.imageFade && (d.imageFade = g.imageFade), + this.model.lightmap && (d.lights = !1), + vc.IBL ? (d.iblProbe = c.iblProbe, + (h = new ImageBasedLighting.IBLMaterial(d)).type = "IBL") : (h = Kd.createStandardMaterial(d)).refreshUniforms(), + h.name = e, + o[e] = h, + d = null, + vc.EnableTextureLoading) { + var u = [], + f = p.textures; + for (var m in f) { + "reliefMap" == m && f.bumpMap || u.push({ + type: m, + data: f[m] + }) + } + u.length > 0 && l.push({ + id: e, + dataArray: u + }) + } + } + if (l.length > 0) { + for (a = l.length, + e = 0; a > e; e += 1) { + this.maxLoadTextureCount += (u = l[e].dataArray).length + } + for (e = 0; a > e; e += 1) { + for (var C = l[e].id, y = [], v = 0, I = (u = l[e].dataArray).length; I > v; v++) + this._parseTextureJson(t, u[v], y); + n[C] = y + } + l = null + } else + s._onLoadTexture(); + if (this.model.lightmap) { + var E = this.model.lightmapNum; + for (this.maxLoadTextureCount += E, + e = 0; E > e; e += 1) { + var B = this._loadTexture(t.lightmapTexUrl("lightmap-rgbm" + e + ".png"), (function () { + s._onLoadTexture() + }), void 0, (function () { + s._onLoadTexture() + })); + i.lightmaps[e] = B + } + } + r = null + } + }, + Xu.prototype._loadTexture = function (A, e, t, i) { + var o, n = Yr.Handlers.get(A), + r = this; + return null !== n ? o = n.load(A, e) : (o = new d, + (n = new _r).setCrossOrigin("anonymous"), + n.load(A, (function (A) { + o.image = Kd.ensurePowerOfTwo(A), + o.needsUpdate = !0, + e && e(o) + }), t, (function (A) { + void 0 !== i && i(A), + r.model.dispatchEvent({ + type: Tc.LOAD_ERROR, + errorType: Tc.LOAD_TEXTURE_ERROR, + event: A + }) + }))), + o + }, + Xu.prototype._loadCompressedTexture = function (A, e, t, i) {}, + Xu.prototype._loadTextureByCrypto = function (A, e, t, i) { + var o, n = Yr.Handlers.get(A), + r = this; + return null !== n ? o = n.load(A, e) : (o = new d, + (n = new TEST.CryptoResourceLoader).loadURL(A, (function (A) { + var t = new Blob([A], { + type: "jpeg" + }), + n = new Image; + n.onload = function () { + o.image = Kd.ensurePowerOfTwo(n), + o.needsUpdate = !0, + e && e(o) + }, + n.onerror = function (A) { + i && i(A), + r.model.dispatchEvent({ + type: Tc.LOAD_ERROR, + errorType: Tc.LOAD_TEXTURE_ERROR, + event: A + }) + }, + n.src = URL.createObjectURL(t) + }), (function (A) { + void 0 !== i && i(A), + r.model.dispatchEvent({ + type: Tc.LOAD_ERROR, + errorType: Tc.LOAD_TEXTURE_ERROR, + event: A + }) + }))), + o + }, + Xu.prototype._parseTexture = function (A, e, t) { + var i = window.TEST || {}, + o = e.id, + n = e.data, + r = n.id + n.file_name_ext; + this.textureLoader = this.enableCompressedTexture && n.dds ? this._loadCompressedTexture : i.CryptoResourceLoader ? this._loadTextureByCrypto : this._loadTexture; + var a = this; + this.textureLoader(A.textureUrl(r), (function (A) { + A.repeat.fromArray([n.scale_u, n.scale_v]), + A.offset.fromArray([n.offset_u, n.offset_v]), + A.setRotateAngle && A.setRotateAngle(n.angle), + n.repeat_u && (A.wrapS = 1e3), + n.repeat_v && (A.wrapT = 1e3), + A && (t[o] = A), + a._onLoadTexture() + }), void 0, (function () { + a._onLoadTexture() + })) + }, + Xu.prototype._parseTextureJson = function (A, e, t) { + var i = window.TEST || {}, + o = e.type, + n = e.data, + r = A.textureUrl(n.sourceFile), + a = this.enableSmallTexture && n.texture_small; + if (!a && this.enableCompressedTexture && n.dds) + this.textureLoader = this._loadCompressedTexture; + else if (this.textureLoader = i.CryptoResourceLoader ? this._loadTextureByCrypto : this._loadTexture, + a) { + var s = r.lastIndexOf("."); + r = r.substring(0, s) + "_s" + r.substring(s) + } + var l = this; + this.textureLoader(r, (function (A) { + A.repeat.fromArray([n.scale[0], n.scale[1]]), + A.offset.fromArray([n.offset[0], n.offset[1]]), + A.setRotateAngle && A.setRotateAngle(n.angle), + n.repeatU && (A.wrapS = 1e3), + n.repeatV && (A.wrapT = 1e3), + A.texturetype = o, + "reliefMap" == o && (A.texturetype = "bumpMap"), + n.dataType && "NormalMap" == n.dataType && (A.texturetype = "normalMap"), + n.alpha && (A.texturetype = "alphaMap"), + n.depth && (A.depth = n.depth), + A && t.push(A), + l._onLoadTexture() + }), void 0, (function () { + l._onLoadTexture() + })) + }, + Xu.prototype._loadUV2 = function () { + var A = this, + e = this.url, + t = this.fileLoader; + t.setResponseType("arraybuffer"), + t.load(e.uv2Url(), (function (e) { + A.uv2Buffer = new Uint16Array(e), + A._onTaskFinished() + }), void 0, (function (e) { + A._onTaskFinished() + })), + t.setResponseType(""), + t.load(e.uv2MapItemUrl(), (function (e) { + A.uv2MapItem = JSON.parse(e), + A._onTaskFinished() + }), void 0, (function (e) { + A._onTaskFinished() + })) + }, + Xu.prototype.getUV2ById = function (A, e) { + if (this.uv2MapItem && e) { + var t = this.uv2MapItem[A]; + if (t) { + var i = t.uv1Scale, + o = t.uv1Translation, + n = t.uv1ByteOffset / 2, + r = 2 * e; + if (this.uv2Buffer) { + for (var a = this.uv2Buffer.slice(n, n + r), s = [], l = 0; r > l; l += 2) + s.push(i[0] * (a[l] / 65535) + o[0]), + s.push(i[1] * (a[l + 1] / 65535) + o[1]); + return { + lightmapIdx: t.lightmapIdx, + uv2: s + } + } + } + } + }, + Xu.prototype._loadSymbol = function () { + var A = this, + e = this.url, + t = this.fileLoader; + t.setResponseType("arraybuffer"), + t.load(e.symbolUrl(), (function (e) { + A.parseSymbol(e), + A._onTaskFinished() + }), void 0, (function (e) { + A.model.dispatchEvent({ + type: Tc.LOAD_ERROR, + errorType: Tc.LOAD_SYMBOL_ERROR, + event: e + }), + A._onTaskFinished() + })) + }, + Xu.prototype.parseSymbol = function (A) { + this.descriptor.symbolReader = new Loader.SymbolReader(A) + }, + Xu.prototype._loadOctree = function (A, e) { + var t = null, + i = this.model.configLoader.transformInfos.transformMatrix; + this.model.configLoader.transformInfos.octreeTransformed && (t = new M).getInverse(i), + A && this._loadOctreeBy(t, !1), + e && this._loadOctreeBy(t, !0) + }, + Xu.prototype._loadOctreeBy = function (A, e) { + var t, i = this, + o = this.url, + n = this.fileLoader; + t = o.octreeUrl(e ? "i" : "o"), + n.setResponseType("arraybuffer"), + n.load(t, (function (t) { + i._parseOctree(t, A, e), + i._onTaskFinished() + }), void 0, (function (A) { + i.model.dispatchEvent({ + type: Tc.LOAD_ERROR, + errorType: Tc.LOAD_OCTREEINNER_ERROR, + event: A + }), + i._onTaskFinished() + })) + }, + Xu.prototype._parseOctree = function (A, e, t) { + this.descriptor.octreeRootNode[t ? "inner" : "outer"] = this._getOctreeRootNode(A, e) + }, + Xu.prototype._getOctreeRootNode = function (A, e) { + function t(A, t) { + e && t.boundingBox.applyMatrix4(e), + A.boundingBoxWorld = t.boundingBox.clone(), + A.min = t.boundingBox.min, + A.max = t.boundingBox.max, + A.center = t.boundingBox.getCenter(), + A.size = t.boundingBox.getSize().lengthSq(), + A.childStart = t.child_s, + A.childEnd = t.child_e + } + + function i(A, e) { + A.octType = 0, + e.center.x > A.center.x && (A.octType += 1), + e.center.y > A.center.y && (A.octType += 2), + e.center.z > A.center.z && (A.octType += 4) + } + var o = null, + n = new Loader.OctreeReader(A); + if (n.getCount() > 0) { + var r = n.getNode(0); + t(o = new Loader.OctreeNode(r.cell_id, 0), r), + function A(e, o) { + for (var n = e.childEnd, r = e.childStart; n > r; ++r) { + var a = o.getNode(r), + s = new Loader.OctreeNode(a.cell_id, e.depth); + t(s, a), + e.add(s), + i(s, e), + s.updateMaxDepth(), + A(s, o) + } + }(o, n) + } + return n = null, + o + }, + Xu.prototype._loadUserId = function () { + var A = this, + e = this.url, + t = this.fileLoader; + t.setResponseType("arraybuffer"), + t.load(e.userIdUrl(), (function (e) { + A._parseUserId(e), + A._onTaskFinished() + }), void 0, (function (e) { + A.model.dispatchEvent({ + type: Tc.LOAD_ERROR, + errorType: Tc.LOAD_USERID_ERROR, + event: e + }), + A._onTaskFinished() + })) + }, + Xu.prototype._parseUserId = function (A) { + this.descriptor.userIdReader = new Loader.IdReader(A) + }, + Xu.prototype._loadUserData = function () { + var A = this, + e = this.url, + t = this.fileLoader; + t.setResponseType(""), + t.load(e.userDataUrl(), (function (e) { + A._parseUserData(e), + A._onTaskFinished() + }), void 0, (function (e) { + A.model.dispatchEvent({ + type: Tc.LOAD_ERROR, + errorType: Tc.LOAD_USERDATA_ERROR, + event: e + }), + A._onTaskFinished() + })) + }, + Xu.prototype._parseUserData = function (A) { + this.descriptor.userDataReader = new Loader.UserDataReader(A) + }, + Xu.prototype._loadCamera = function () { + var A = this, + e = this.url, + t = this.fileLoader; + t.setResponseType(""), + t.load(e.cameraUrl(), (function (e) { + A._parseCamera(e), + A._onTaskFinished() + }), void 0, (function (e) { + A.model.dispatchEvent({ + type: Tc.LOAD_ERROR, + errorType: Tc.LOAD_CAMERA_ERROR, + event: e + }), + A._onTaskFinished() + })) + }, + Xu.prototype._parseCamera = function (A) { + var e = this.model.configLoader.transformInfos.transformMatrix; + new Loader.CameraReader(A).parse(this.model, e) + }, + Xu.prototype._parseGeo = function (A, e) { + for (var t = new Loader.MPKReader(A), i = new M, o = 0, n = t.header.meshCount; n > o; ++o) { + var r = t.getPtBuffer(o), + a = t.getIdxBuffer(o), + s = t.getNormalBuffer(o), + l = t.getMeshData(o), + c = t.getUVBuffer(o); + null != r && null != a ? (0 !== l.baseScale && (r = new Float32Array(r), + i.identity(), + i.setPosition(new y(l.baseX, l.baseY, l.baseZ)), + i.scale(new y(l.baseScale, l.baseScale, l.baseScale)), + GeomUtil.applyMatrix4ToBuffer(i, r)), + this.descriptor.cacheReferencedMeshBufferData(l.mesh_id, { + P: r, + I: a, + N: s, + UV: c + }), + this.descriptor.cacheReferencedMeshGeoIds(e, l.mesh_id)) : Logger.log("Error Geometry!") + } + t = null + }, + Xu.prototype._loadBorderline = function (A) { + var e = this, + t = this.url, + i = this.fileLoader, + o = t.borderLineUrl(A ? 1 : 0); + i.setResponseType("arraybuffer"), + i.load(o, (function (t) { + e._parseBorderLine(t, A), + e._onTaskFinished() + }), void 0, (function (A) { + e.model.dispatchEvent({ + type: Tc.LOAD_ERROR, + errorType: Tc.LOAD_MATERIAL_ERROR, + event: A + }), + e._onTaskFinished() + })) + }, + Xu.prototype._parseBorderLine = function (A, e) { + for (var t = new Loader.LineReader(A), i = [], o = 0, n = t.header.lineCount; n > o; ++o) { + var r = t.getLineData(o); + i.push({ + meshId: r.line_id, + positionStart: r.ptOffset / 4, + positionCount: 3 * r.ptCount, + indexStart: r.idxOffset / 4, + indexCount: r.idxCount + }) + } + this.descriptor.cacheBorderLine(e, { + P: t.ptBuffer, + I: t.idxBuffer, + IndexInfos: i + }), + t = null + }, + Xu.prototype._isLoadGeoBorderlines = function () { + var A = this.model.getConfig().metadata; + return !(!vc.BorderLineBatched || !A.outline_mpk) + }, + Xu.prototype.getAllBorderlineCount = function () { + var A = this.model.getConfig().metadata; + return this._isLoadGeoBorderlines() ? A.outline_mpk : A.outline_0 + A.outline_1 + }, + Xu.prototype._loadAllBorderlines = function (A) { + this._isLoadGeoBorderlines() ? A.outline_mpk && this._loadAllGeoBorderLines(A.outline_mpk) : (A.outline_0 && this._loadBorderline(!1), + A.outline_1 && this._loadBorderline(!0)) + }, + Xu.prototype.delayLoadBorderlines = function (A) { + this.model.getConfig(); + this._isLoadGeoBorderlines() ? this._delayLoadGeoBorderlines(A) : this._delayLoadTogetherBorderlines(A) + }, + Xu.prototype._delayLoadGeoBorderlines = function (A) { + var e = this.model.getConfig().metadata; + this.startCallback = null, + this.progressCallback = null, + this.finishCallback = A, + this.loadTaskCount = 0, + this.maxLoadTaskCount = e.outline_mpk, + e.outline_mpk && this._loadAllGeoBorderLines(e.outline_mpk) + }, + Xu.prototype._delayLoadTogetherBorderlines = function (A) { + var e = this.model.getConfig().metadata; + this.startCallback = null, + this.progressCallback = null, + this.finishCallback = A, + this.loadTaskCount = 0, + this.maxLoadTaskCount = e.outline_0 + e.outline_1, + e.outline_0 && this._loadBorderline(!1), + e.outline_1 && this._loadBorderline(!0) + }, + Xu.prototype._loadAllGeoBorderLines = function (A) { + this.mpkBorderLineTaskManager || (this.mpkBorderLineTaskManager = new Ou); + for (var e = 0; A > e; ++e) + this.mpkBorderLineTaskManager.addTask(e); + this.mpkBorderLineTaskManager.processTasks(this._loadGeoBorderLine.bind(this)) + }, + Xu.prototype._loadGeoBorderLine = function (A, e) { + var t = this, + i = this.fileLoader, + o = this.url, + n = A >= this.model.getConfig().metadata.mpk_shared_index; + i.setResponseType("arraybuffer"), + i.load(o.mpkBorderLineUrl(A), (function (A) { + t._parseGeoBorderLine(A, n), + e(), + t._onTaskFinished() + }), void 0, (function (A) { + t._onTaskFinished() + })) + }, + Xu.prototype._parseGeoBorderLine = function (A, e) { + for (var t = new Loader.LineReader(A), i = [], o = 0, n = t.header.lineCount; n > o; ++o) { + var r = t.getLineData(o); + i.push({ + meshId: r.line_id, + positionStart: r.ptOffset / 4, + positionCount: 3 * r.ptCount, + indexStart: r.idxOffset / 4, + indexCount: r.idxCount + }) + } + this.descriptor.cacheBorderLine(e, { + P: t.ptBuffer, + I: t.idxBuffer, + IndexInfos: i + }), + t = null + }, + Xu.prototype.dealProgressSegment = function (A, e) { + return vc.MergeComponent ? e * A.progressPercentage.load : e + }, + Xu.prototype._loadWireframe = function (A) { + var e = this; + if (vc.getDataFromIndexedDB && !this.offLine) { + for (var t = this.url, i = [], o = 0; A.length > o; o += 1) + i.push(t.mpkUrl(A[o])); + var n = this.model.getStorage(); + n && n.getBatch(i, (function (A) { + for (var t = function (t) { + if (A[i[t]]) + if (!0 === A[i[t]].split) { + var o = A[i[t]].list, + s = new Uint8Array(A[i[t]].length); + n.getBatch(o, (function (A) { + for (var n = !0, r = 0; o.length > r; r += 1) + A[o[r]] ? s.set(new Uint8Array(A[o[r]]), 4e7 * r) : (n = !1, + Bh.error("获取分割几何失败")); + if (n) { + var a = i[t].indexOf("fileKey="); + e._parseWireframe(s.buffer, i[t].slice(a + 8)), + Bh.debug("load geo from local"), + e._onTaskFinished() + } else { + var l = e.taskGeometrieManager; + if (-1 === (a = i[t].indexOf("fileKey="))) + return void Bh.error("url is not has fileKey"); + l.addTask(i[t].slice(a + 8)), + Bh.debug("load geo from net"), + e.taskGeometrieManager.processTasks(e.loadWireframe.bind(e)) + } + }), (function () { + Bh.error("获取分割几何失败") + })) + } else + a = i[t].indexOf("fileKey="), + e._parseWireframe(A[i[t]], i[t].slice(a + 8)), + Bh.debug("load geo from local"), + e._onTaskFinished(); + else { + if (r = e.taskGeometrieManager, + -1 === (a = i[t].indexOf("fileKey="))) + return Bh.error("url is not has fileKey"), { + v: void 0 + }; + r.addTask(i[t].slice(a + 8)), + Bh.debug("load geo from net") + } + }, o = 0; i.length > o; o += 1) { + var r, a, s = t(o); + if ("object" === lc(s)) + return s.v + } + e.taskGeometrieManager.processTasks(e.loadWireframe.bind(e)) + }), (function () { + for (var t = e.taskGeometrieManager, i = 0; A.length > i; i += 1) + t.addTask(A[i]); + t.processTasks(e.loadWireframe.bind(e)) + })) + } else { + for (var r = this.taskGeometrieManager, a = 0; A.length > a; a += 1) + r.addTask(A[a]); + r.processTasks(e.loadWireframe.bind(e)) + } + }, + Xu.prototype._loadGeo = function (A) { + var e = this; + if (vc.getDataFromIndexedDB && !this.offLine) { + for (var t = this.url, i = [], o = 0; A.length > o; o += 1) + i.push(t.mpkUrl(A[o])); + var n = this.model.getStorage(); + n && n.getBatch(i, (function (A) { + for (var t = function (t) { + if (A[i[t]]) + if (!0 === A[i[t]].split) { + var o = A[i[t]].list, + s = new Uint8Array(A[i[t]].length); + n.getBatch(o, (function (A) { + for (var n = 0; o.length > n; n += 1) + A[o[n]] ? s.set(new Uint8Array(A[o[n]]), 4e7 * n) : Bh.error("获取分割几何失败"); + var r = i[t].indexOf("fileKey="); + e._parseGeometrie(s.buffer, i[t].slice(r + 8)), + Bh.debug("load geo from local"), + e._onTaskFinished() + }), (function () { + Bh.error("获取分割几何失败") + })) + } else + a = i[t].indexOf("fileKey="), + e._parseGeometrie(A[i[t]], i[t].slice(a + 8)), + Bh.debug("load geo from local"), + e._onTaskFinished(); + else { + if (r = e.taskGeometrieManager, + -1 === (a = i[t].indexOf("fileKey="))) + return Bh.error("url is not has fileKey"), { + v: void 0 + }; + r.addTask(i[t].slice(a + 8)), + Bh.debug("load geo from net") + } + }, o = 0; i.length > o; o += 1) { + var r, a, s = t(o); + if ("object" === lc(s)) + return s.v + } + e.taskGeometrieManager.processTasks(e.loadGeometrie.bind(e)) + }), (function () { + for (var t = e.taskGeometrieManager, i = 0; A.length > i; i += 1) + t.addTask(A[i]); + t.processTasks(e.loadGeometrie.bind(e)) + })) + } else { + for (var r = this.taskGeometrieManager, a = 0; A.length > a; a += 1) + r.addTask(A[a]); + r.processTasks(e.loadGeometrie.bind(e)) + } + }, + Xu.prototype._loadComponentNode = function (A) { + var e = this; + if (vc.getDataFromIndexedDB && !this.offLine) { + for (var t = this.url, i = [], o = 0; A.length > o; o += 1) + i.push(t.mpkUrl(A[o])); + var n = this.model.getStorage(); + n && n.getBatch(i, (function (A) { + for (var t = function (t) { + if (A[i[t]]) + if (!0 === A[i[t]].split) { + var o = A[i[t]].list, + s = new Uint8Array(A[i[t]].length); + n.getBatch(o, (function (A) { + for (var n = 0; o.length > n; n += 1) + A[o[n]] ? s.set(new Uint8Array(A[o[n]]), 4e7 * n) : Bh.error("获取分割node失败"); + var r = i[t].indexOf("fileKey="); + e._parseComponentNode(s.buffer, i[t].slice(r + 8)), + Bh.debug("load geo from local"), + e._onTaskFinished() + }), (function () { + Bh.error("获取分割node失败") + })) + } else + a = i[t].indexOf("fileKey="), + e._parseComponentNode(A[i[t]], i[t].slice(a + 8)), + Bh.debug("load geo from local"), + e._onTaskFinished(); + else { + if (r = e.taskComponentNodeManager, + -1 === (a = i[t].indexOf("fileKey="))) + return Bh.error("url is not has fileKey"), { + v: void 0 + }; + r.addTask(i[t].slice(a + 8)), + Bh.debug("load component.node from net") + } + }, o = 0; i.length > o; o += 1) { + var r, a, s = t(o); + if ("object" === lc(s)) + return s.v + } + e.taskComponentNodeManager.processTasks(e.loadComponentNode.bind(e)) + }), (function () { + for (var t = e.taskComponentNodeManager, i = 0; A.length > i; i += 1) + t.addTask(A[i]); + t.processTasks(e.loadComponentNode.bind(e)) + })) + } else { + for (var r = this.taskComponentNodeManager, a = 0; A.length > a; a += 1) + r.addTask(A[a]); + r.processTasks(e.loadComponentNode.bind(e)) + } + }, + Xu.prototype._loadKDTree = function (A) { + var e = this; + if (vc.getDataFromIndexedDB && !this.offLine) { + for (var t = this.url, i = [], o = 0; A.length > o; o += 1) + i.push(t.kdTreeUrl(A[o])); + var n = this.model.getStorage(); + n && n.getBatch(i, (function (A) { + for (var t = 0; i.length > t; t += 1) { + var o = i[t].indexOf("fileKey="); + if (-1 === o) + return void Bh.error("url is not has fileKey"); + var n = i[t].slice(o + 8); + A[i[t]] ? (e._parseKDTree(A[i[t]], n), + Bh.debug("load kdTree from local"), + e._onTaskFinished()) : (e.loadKDTree(n, (function () {})), + Bh.debug("load kdtree from net")) + } + }), (function () { + for (var t = 0; A.length > t; t += 1) + e.loadKDTree(A[t], (function () {})) + })) + } else + for (var r = 0; A.length > r; r += 1) + e.loadKDTree(A[r], (function () {})) + }, + Xu.prototype._loadLights = function (A) { + var e = this; + if (vc.getDataFromIndexedDB && !this.offLine) { + for (var t = this.url, i = [], o = 0; A.length > o; o += 1) + i.push(t.lightUrl(A[o])); + var n = this.model.getStorage(); + n && n.getBatch(i, (function (A) { + for (var t = 0; i.length > t; t += 1) { + var o = i[t].indexOf("fileKey="); + if (-1 === o) + return void Bh.error("url is not has fileKey"); + var n = i[t].slice(o + 8); + A[i[t]] ? (e._parseLight(A[i[t]], n), + Bh.debug("load light from local"), + e._onTaskFinished()) : (e.loadLight(n, (function () {})), + Bh.debug("load kdtree from net")) + } + }), (function () { + for (var t = 0; A.length > t; t += 1) + e.loadLight(A[t], (function () {})) + })) + } else + for (var r = 0; A.length > r; r += 1) + e.loadLight(A[r], (function () {})) + }, + Xu.prototype._loadBones = function (A) { + var e = this; + if (vc.getDataFromIndexedDB && !this.offLine) { + for (var t = this.url, i = [], o = 0; A.length > o; o += 1) + i.push(t.bonesUrl(A[o])); + var n = this.model.getStorage(); + n && n.getBatch(i, (function (A) { + for (var t = 0; i.length > t; t += 1) + if (A[i[t]]) + e._parseBones(A[i[t]]), + Bh.debug("load Bones from local"), + e._onTaskFinished(); + else { + var o = i[t].indexOf("fileKey="); + if (-1 === o) + return void Bh.error("url is not has fileKey"); + e.loadBones(i[t].slice(o + 8), (function () {})), + Bh.debug("load Bones from net") + } + }), (function () { + for (var t = 0; A.length > t; t += 1) + e.loadBones(A[t], (function () {})) + })) + } else { + for (var r = this.taskComponentManager, a = 0; A.length > a; a += 1) + r.addTask(A[a]); + r.processTasks(e.loadBones.bind(e)) + } + }, + Xu.prototype._loadClips = function (A) { + var e = this; + if (vc.getDataFromIndexedDB && !this.offLine) { + for (var t = this.url, i = [], o = 0; A.length > o; o += 1) + i.push(t.clipsUrl(A[o])); + var n = this.model.getStorage(); + n && n.getBatch(i, (function (A) { + for (var t = 0; i.length > t; t += 1) + if (A[i[t]]) + e._parseClips(A[i[t]]), + Bh.debug("load Clips from local"), + e._onTaskFinished(); + else { + var o = i[t].indexOf("fileKey="); + if (-1 === o) + return void Bh.error("url is not has fileKey"); + e.loadClips(i[t].slice(o + 8), (function () {})), + Bh.debug("load Clips from net") + } + }), (function () { + for (var t = 0; A.length > t; t += 1) + e.loadClips(A[t], (function () {})) + })) + } else { + for (var r = this.taskComponentManager, a = 0; A.length > a; a += 1) + r.addTask(A[a]); + r.processTasks(e.loadClips.bind(e)) + } + }, + Xu.prototype._loadNodes = function (A) { + var e = this; + if (vc.getDataFromIndexedDB && !this.offLine) { + for (var t = this.url, i = [], o = 0; A.length > o; o += 1) + i.push(t.nodesUrl(A[o])); + var n = this.model.getStorage(); + n && n.getBatch(i, (function (A) { + for (var t = 0; i.length > t; t += 1) + if (A[i[t]]) + e._parseNodes(A[i[t]]), + Bh.debug("load Nodes from local"), + e._onTaskFinished(); + else { + var o = i[t].indexOf("fileKey="); + if (-1 === o) + return void Bh.error("url is not has fileKey"); + e.loadNodes(i[t].slice(o + 8), (function () {})), + Bh.debug("load Nodes from net") + } + }), (function () { + for (var t = 0; A.length > t; t += 1) + e.loadNodes(A[t], (function () {})) + })) + } else { + for (var r = this.taskComponentManager, a = 0; A.length > a; a += 1) + r.addTask(A[a]); + r.processTasks(e.loadNodes.bind(e)) + } + }, + Xu.prototype._loadComponent = function (A) { + var e = this; + if (vc.getDataFromIndexedDB && !this.offLine) { + for (var t = this.url, i = [], o = 0; A.length > o; o += 1) + i.push(t.mpkUrl(A[o])); + var n = this.model.getStorage(); + n && n.getBatch(i, (function (A) { + for (var t = 0; i.length > t; t += 1) { + if (-1 === (r = i[t].indexOf("fileKey=")) && !e.offLine) + return void Bh.error("url is not has fileKey"); + var o = i[t].slice(r + 8); + if (A[i[t]]) + e._parseComponent(A[i[t]], o), + Bh.debug("load com from local"), + e._onTaskFinished(); + else { + var n = e.taskComponentManager; + if (e.offLine) { + var r; + if (-1 === (r = i[t].indexOf("data/"))) + return void Bh.error("url is not has data/"); + n.addTask(i[t].slice(r + 5)) + } else + n.addTask(o); + n.processTasks(e.loadComponent.bind(e)), + Bh.debug("load com from net") + } + } + }), (function () { + for (var t = e.taskComponentManager, i = 0; A.length > i; i += 1) + t.addTask(A[i]); + t.processTasks(e.loadComponent.bind(e)) + })) + } else { + for (var r = this.taskComponentManager, a = 0; A.length > a; a += 1) + r.addTask(A[a]); + r.processTasks(e.loadComponent.bind(e)) + } + }, + Xu.prototype._loadReuseNode = function (A) { + var e = this; + if (vc.getDataFromIndexedDB) { + for (var t = this.url, i = [], o = 0; A.length > o; o += 1) + i.push(t.mpkUrl(A[o])); + var n = this.model.getStorage(); + n && n.getBatch(i, (function (A) { + for (var t = 0; i.length > t; t += 1) + if (A[i[t]]) + e._parseReuseNodes(A[i[t]]), + Bh.debug("load com from local"), + e._onTaskFinished(); + else { + var o = e.taskReuseNodeManager; + if (e.offLine) { + if (-1 === (n = i[t].indexOf("data/"))) + return void Bh.error("url is not has data/"); + o.addTask(i[t].slice(n + 5)) + } else { + var n; + if (-1 === (n = i[t].indexOf("fileKey="))) + return void Bh.error("url is not has fileKey"); + o.addTask(i[t].slice(n + 8)) + } + o.processTasks(e.loadReuseNode.bind(e)), + Bh.debug("load com from net") + } + }), (function () { + for (var t = e.taskReuseNodeManager, i = 0; A.length > i; i += 1) + t.addTask(A[i]); + t.processTasks(e.loadReuseNode.bind(e)) + })) + } else { + for (var r = this.taskReuseNodeManager, a = 0; A.length > a; a += 1) + r.addTask(A[a]); + r.processTasks(e.loadReuseNode.bind(e)) + } + }, + Xu.prototype._loadMaterial = function (A) { + var e = this; + if (vc.getDataFromIndexedDB && !this.offLine) { + for (var t = this.url, i = [], o = 0; A.length > o; o += 1) + i.push(t.mpkUrl(A[o])); + var n = this.model.getStorage(); + n && n.getBatch(i, (function (A) { + for (var t = 0; i.length > t; t += 1) + if (A[i[t]]) + e._parseMaterial(A[i[t]]), + Bh.debug("load mat from local"), + e._onTaskFinished(); + else { + var o = e.taskMaterialManager, + n = i[t].indexOf("fileKey="); + if (-1 === n) + return void Bh.error("url is not has fileKey"); + o.addTask(i[t].slice(n + 8)), + o.processTasks(e.loadMaterial.bind(e)), + Bh.debug("load mat from net") + } + }), (function () { + for (var t = e.taskMaterialManager, i = 0; A.length > i; i += 1) + t.addTask(A[i]); + t.processTasks(e.loadMaterial.bind(e)) + })) + } else { + for (var r = this.taskMaterialManager, a = 0; A.length > a; a += 1) + r.addTask(A[a]); + r.processTasks(e.loadMaterial.bind(e)) + } + }, + Xu.prototype._loadTextures = function (A) { + var e = this.model.materialManager.textures, + t = this; + if (vc.getDataFromIndexedDB && !this.offLine) { + for (var i = this.url, o = [], n = 0; A.length > n; n += 1) + o.push(i.mpkUrl(A[n])); + var r = this.model.getStorage(); + r && r.getBatch(o, (function (A) { + for (var i = 0; o.length > i; i += 1) + if (A[o[i]]) { + var n, r = function () { + if (-1 === (n = o[i].indexOf("fileKey="))) + return Bh.error("url is not has fileKey"), { + v: void 0 + }; + var r = A[o[i]]; + A[o[i]] instanceof Blob || (r = new Blob([A[o[i]]], { + type: "text/plain" + })); + var a = o[i].slice(n + 8), + s = new d; + Bh.debug("load tex from local"), + e[a] = s; + var l = document.createElement("img"); + s.wrapS = s.wrapT = 1e3, + l.onload = function (e) { + "string" != typeof A[o[i]] && window.URL.revokeObjectURL(l.src), + t.model.textureNeedsUpdate = !0, + s.image = Kd.ensurePowerOfTwo(l), + t._onLoadTexture() + }, + l.onerror = function (A) { + t.model.dispatchEventEx({ + type: Tc.LOAD_TEXTURE_ERROR + }) + }, + l.src = "string" == typeof A[o[i]] ? A[o[i]] : window.URL.createObjectURL(r), + s.image = l, + s.needsUpdate = !0 + }(); + if ("object" === lc(r)) + return r.v + } else { + var a = t.taskTexturesManager, + s = o[i].indexOf("fileKey="); + if (-1 === s) + return void Bh.error("url is not has fileKey"); + a.addTask(o[i].slice(s + 8)), + a.processTasks(t.loadTextures.bind(t)), + Bh.debug("load tex from net") + } + }), (function () { + for (var e = t.taskTexturesManager, i = 0; A.length > i; i += 1) + e.addTask(A[i]); + e.processTasks(t.loadTextures.bind(t)) + })) + } else { + for (var a = this.taskTexturesManager, s = 0; A.length > s; s += 1) + a.addTask(A[s]); + a.processTasks(t.loadTextures.bind(t)) + } + }, + Xu.prototype._loadAxisNet = function (A) { + if (A) { + var e = this; + if (vc.getDataFromIndexedDB && !this.offLine) { + var t = this.url.axisNetUrl(A), + i = this.model.getStorage(); + i && i.getBatch([t], (function (i) { + if (i[t]) + e._parseAxisNet(i[t]), + Bh.debug("load axisnet from local"); + else { + if (-1 === t.indexOf("fileKey=")) + return void Bh.error("url is not has fileKey"); + e.loadAxisNet(A), + Bh.debug("load axisnet from net") + } + }), (function () { + e.loadAxisNet(A) + })) + } else + e.loadAxisNet(A) + } + }, + Xu.prototype._parseWireframe = function (A, e) { + var t = new Lu.GeometryReader(A, this.dataVersion), + i = this.descriptor; + if (i) { + for (var o = t.geoCount, n = 0; o > n; n += 1) { + var r = t.geomMap[n]; + void 0 !== r.position && void 0 !== r.index ? i.cacheReferencedMeshWireframeData(r.geoId, r) : Bh.error("Error Geometry!") + } + t = null + } + }, + Xu.prototype._parseGeometrie = function (A, e) { + var t = this.fileKeyFromModelKey[e] || "", + i = new ku.GeometryReader(A, this.dataVersion), + o = this.descriptor; + if (o) { + for (var n = i.geoCount, r = 0; n > r; r += 1) { + var a = i.geomMap[r]; + void 0 !== a.position && void 0 !== a.index && void 0 !== a.normal ? (vc.DEBUG && window.geoidToFileKeyMap && (window.geoidToFileKeyMap[a.geoId] = e), + o.cacheReferencedMeshBufferData(t + a.geoId, a)) : Bh.error("Error Geometry!") + } + i = null + } + }, + Xu.prototype._parseComponentNode = function (A, e) { + var t = this.fileKeyFromModelKey[e] || "", + i = new ku.NodesReader(A, this.dataVersion), + o = this.descriptor; + if (o) { + for (var n = i.nodeCount, r = 0; n > r; r += 1) { + var a = i.geomMap[r]; + void 0 !== a.matrix && void 0 !== a.material && void 0 !== a.nodeId ? o.cacheReferencedMeshComponentNodeData(t + a.nodeId, a) : Bh.error("Error Node!") + } + i = null + } + }, + Xu.prototype._parseMaterial = function (A, e) { + var t = this.descriptor; + if (t) { + var i = new Du(A, this.dataVersion); + if (Array.isArray(i.materialMap)) { + var o = i.materialCount; + if (0 > o) + return; + for (var n = 0; o > n; n += 1) { + var r = i.materialMap[n]; + t.cacheReferencedMeshMaterialData(r.matId, r) + } + } else + for (var a in i.materialMap) + t.cacheReferencedMeshMaterialData(a, i.materialMap[a]); + i = null + } + }, + Xu.prototype._parseComponent = function (A, e) { + if (A) { + var t = new Uu(A), + i = t.compArr.length, + o = this.descriptor; + if (o) { + for (var n = 0; i > n; n += 1) { + var r = t.compArr[n]; + o.cacheReferencedMeshComponentData(r.key, r) + } + t = null + } + } else + Bh.error("没有数据") + }, + Xu.prototype._parseKDTree = function (A, e) { + var t = {}; + t = "string" == typeof A ? JSON.parse(A) : A, + !this.model.kdTreeNode && t && (this.model.kdTreeNode = new Zu, + this.model.kdTreeNode.init(t)) + }, + Xu.prototype._parseLight = function (A, e) { + var t, i = []; + if (t = "string" == typeof A ? JSON.parse(A) : A) + for (var o = 0, n = t.length; n > o; o += 1) { + var r = t[o], + a = void 0, + s = r.pos || [0, 0, 0], + l = void 0; + switch (r.type) { + case Fc.DirectionalLight: + (a = new Ra((new LA).fromArray(r.diffuse), .5)).position.set(s[0] - r.lookat[0], s[1] - r.lookat[1], s[2] - r.lookat[2]), + a.name = r.parent, + 0 === r.ambient[0] && 0 === r.ambient[1] && 0 === r.ambient[2] || (l = new Ta((new LA).fromArray(r.ambient), .5)); + break; + case Fc.PointLight: + (a = new Fa((new LA).fromArray(r.diffuse))).position.set(s[0], s[1], s[2]), + a.name = r.parent, + 0 === r.ambient[0] && 0 === r.ambient[1] && 0 === r.ambient[2] || (l = new Ta((new LA).fromArray(r.ambient), .5)); + break; + case Fc.SpotLight: + (a = new ba((new LA).fromArray(r.diffuse), .5)).position.set(s[0] - r.lookat[0], s[1] - r.lookat[1], s[2] - r.lookat[2]), + a.angle = r.cone_inn || Math.PI / 2, + a.name = r.parent, + 0 === r.ambient[0] && 0 === r.ambient[1] && 0 === r.ambient[2] || (l = new Ta((new LA).fromArray(r.ambient), .5)) + } + a && i.push(a), + l && i.push(l) + } + this.model.addLights(i) + }, + Xu.prototype._parseNodes = function (A, e) { + var t = this.descriptor; + if (t) { + var i = {}; + i = "string" == typeof A ? JSON.parse(A) : A, + Bh.debug("nodes", i), + t.cacheReferencedMeshNodesData(i) + } + }, + Xu.prototype._parseClips = function (A, e) { + var t = this.descriptor; + if (t) { + var i = {}; + i = "string" == typeof A ? JSON.parse(A) : A, + Bh.debug("clips", i), + t.cacheReferencedMeshClipsData(i) + } + }, + Xu.prototype._parseBones = function (A, e) { + var t = new ku.BoneReader(A), + i = this.descriptor; + if (i) { + for (var o = t.boneCount, n = 0; o > n; n += 1) { + var r = t.boneMap[n]; + Bh.debug("bones", r), + i.cacheReferencedMeshBoneBufferData(r.geoId, r) + } + t = null + } + }, + Xu.prototype._parseAxisNet = function (A) { + var e = this.model.getBoundingBoxWorld(), + t = 0; + e && (t = e.min.z); + var i = this.model._getNodeGroup(gp.AXISNET); + i.visible = !1; + var o = new ju(i); + o.fromJSON(A, t); + var n = new Hu; + n.axisNet = o, + this.model.axisNetManager = n + }, + Xu.prototype.loadWireframe = function (A, e) { + var t = this, + i = this.loader, + o = this.url, + n = this.model, + r = vc.GeoWorkerUrl; + if (vc.UseGeoWorker) + i.setResponseType("arraybuffer"), + i.load(o.mpkUrl(A), (function (A) { + var i = new Worker(r); + i.onmessage = function (A) { + var i = A.data; + for (var o in i) + i.hasOwnProperty(o); + e(), + t._onTaskFinished() + }, + i.postMessage({ + msg: A + }) + })); + else { + i.setResponseType("arraybuffer"), + i.setCacheViable(!this.offLine); + var a = i.load(o.mpkUrl(A), (function (i) { + t._parseWireframe(i, A), + Bh.debug("geo load from online"), + e(), + t._onTaskFinished() + }), void 0, (function (A) { + n.dispatchEventEx({ + type: Tc.LOAD_GEOMETRY_ERROR, + modelKey: n.modelKey + }) + })); + t.requests.loadGeometrie = a + } + }, + Xu.prototype.loadGeometrie = function (A, e) { + var t = this, + i = this.loader, + o = this.url, + n = this.model; + i.setResponseType("arraybuffer"), + i.setCacheViable(!this.offLine); + var r = i.load(o.mpkUrl(A), (function (i) { + t._parseGeometrie(i, A), + Bh.debug("geo load from online"), + e(), + t._onTaskFinished() + }), void 0, (function (A) { + n.dispatchEventEx({ + type: Tc.LOAD_GEOMETRY_ERROR, + modelKey: n.modelKey + }), + e(), + t._onTaskFinished() + })); + t.requests.loadGeometrie = r + }, + Xu.prototype.loadComponentNode = function (A, e) { + var t = this, + i = this.loader, + o = this.url, + n = this.model; + i.setResponseType("arraybuffer"), + i.setCacheViable(!this.offLine); + var r = i.load(o.mpkUrl(A), (function (i) { + t._parseComponentNode(i, A), + Bh.debug("geo load from online"), + e(), + t._onTaskFinished() + }), void 0, (function (A) { + n.dispatchEventEx({ + type: Tc.LOAD_COMPONENTNODE_ERROR, + modelKey: n.modelKey + }), + e(), + t._onTaskFinished() + })); + t.requests.loadComponentNode = r + }, + Xu.prototype.loadMaterial = function (A, e) { + var t = this, + i = this.loader, + o = this.url, + n = this.model, + r = vc.GeoWorkerUrl; + if (vc.UseGeoWorker) + i.setResponseType("arraybuffer"), + i.load(o.mpkUrl(A), (function (A) { + var i = new Worker(r); + i.onmessage = function (A) { + var i = A.data; + for (var o in i) + i.hasOwnProperty(o); + e(), + t._onTaskFinished() + }, + i.postMessage({ + msg: A + }) + })); + else { + rp(t.dataVersion, "1") ? i.setResponseType("json") : i.setResponseType("arraybuffer"), + i.setCacheViable(!this.offLine); + var a = i.load(o.mpkUrl(A), (function (A) { + t._parseMaterial(A), + Bh.debug("met load from online"), + e(), + t._onTaskFinished() + }), void 0, (function (A) { + n.dispatchEventEx({ + type: Tc.LOAD_MATERIAL_ERROR, + modelKey: n.modelKey + }) + })); + t.requests.loadMaterial = a + } + }, + Xu.prototype.loadTextures = function (A, e) { + var t = this.model.materialManager.textures, + i = this, + o = this.Textureloader, + n = this.url, + r = this.model, + a = vc.GeoWorkerUrl; + if (vc.UseGeoWorker) + o.load(n.mpkUrl(A), (function (A) { + var t = new Worker(a); + t.onmessage = function (A) { + var t = A.data; + for (var o in t) + t.hasOwnProperty(o); + e(), + i._onTaskFinished() + }, + t.postMessage({ + msg: A + }) + })); + else { + o.setResponseType("arraybuffer"), + o.setCacheViable(!this.offLine); + var s = o.load(n.textureUrl(A), (function (o) { + var n = o; + o instanceof Blob || (n = new Blob([o], { + type: "text/plain" + })), + Bh.debug("tex load from online"); + var a = new d; + t[A] = a, + a.wrapS = a.wrapT = 1e3; + var s = document.createElement("img"); + s.onload = function (A) { + "string" != typeof n && window.URL.revokeObjectURL(s.src), + a.image = Kd.ensurePowerOfTwo(s), + i._onLoadTexture(), + e(), + i.model.textureNeedsUpdate = !0 + }, + s.onerror = function (A) { + r.dispatchEventEx({ + type: Tc.LOAD_TEXTURE_ERROR, + modelKey: r.modelKey + }) + }, + s.src = "string" == typeof n ? n : window.URL.createObjectURL(n), + a.image = s, + a.needsUpdate = !0 + }), void 0, (function (A) { + r.dispatchEventEx({ + type: Tc.LOAD_TEXTURE_ERROR, + modelKey: r.modelKey + }) + })); + i.requests.loadTextures = s + } + }, + Xu.prototype.loadComponent = function (A, e) { + var t = this, + i = this.jsonLoader, + o = this.model, + n = this.url, + r = vc.GeoWorkerUrl; + if (vc.UseGeoWorker) + i.setResponseType("json"), + i.load(n.mpkUrl(A), (function (A) { + var i = new Worker(r); + i.onmessage = function (A) { + var i = A.data; + for (var o in i) + i.hasOwnProperty(o); + e(), + t._onTaskFinished() + }, + i.postMessage({ + msg: A + }) + }), (function (A) {})); + else { + i.setResponseType("json"), + vc.useGzip && i.setResponseType("arraybuffer"), + i.setCacheViable(!0); + var a = i.load(n.mpkUrl(A), (function (i) { + t._parseComponent(i, A), + Bh.debug("component load from online"), + e(), + t._onTaskFinished() + }), void 0, (function (A) { + o.dispatchEventEx({ + type: Tc.LOAD_COMPONENT_ERROR, + modelKey: o.modelKey + }) + })); + t.requests.loadComponent = a + } + }, + Xu.prototype.loadKDTree = function (A, e) { + var t = this, + i = this.loader, + o = this.model, + n = this.url, + r = vc.GeoWorkerUrl; + if (vc.UseGeoWorker) + i.setResponseType("json"), + i.load(n.mpkUrl(A), (function (A) { + var i = new Worker(r); + i.onmessage = function (A) { + var i = A.data; + for (var o in i) + i.hasOwnProperty(o); + e(), + t._onTaskFinished() + }, + i.postMessage({ + msg: A + }) + }), (function (A) {})); + else { + i.setResponseType("json"), + i.setCacheViable(!this.offLine); + var a = i.load(n.kdTreeUrl(A), (function (i) { + t._parseKDTree(i, A), + Bh.debug("kdtree load from online"), + e(), + t._onTaskFinished() + }), void 0, (function (A) { + o.dispatchEventEx({ + type: Tc.LOAD_COMPONENT_ERROR, + modelKey: o.modelKey + }) + })); + t.requests.loadKDTree = a + } + }, + Xu.prototype.loadLight = function (A, e) { + var t = this, + i = this.loader, + o = this.model, + n = this.url; + i.setResponseType("json"), + i.setCacheViable(!this.offLine); + var r = i.load(n.lightUrl(A), (function (i) { + t._parseLight(i, A), + Bh.debug("light load from online"), + e(), + t._onTaskFinished() + }), void 0, (function (A) { + o.dispatchEventEx({ + type: Tc.LOAD_COMPONENT_ERROR, + modelKey: o.modelKey + }) + })); + t.requests.loadLight = r + }, + Xu.prototype.loadBones = function (A, e) { + var t = this, + i = this.loader, + o = this.model, + n = this.url, + r = vc.GeoWorkerUrl; + if (vc.UseGeoWorker) + i.setResponseType("arraybuffer"), + i.load(n.bonesUrl(A), (function (A) { + var i = new Worker(r); + i.onmessage = function (A) { + var i = A.data; + for (var o in i) + i.hasOwnProperty(o); + e(), + t._onTaskFinished() + }, + i.postMessage({ + msg: A + }) + }), (function (A) {})); + else { + i.setResponseType("arraybuffer"), + i.setCacheViable(!this.offLine); + var a = i.load(n.bonesUrl(A), (function (A) { + t._parseBones(A), + Bh.debug("bones load from online"), + e(), + t._onTaskFinished() + }), void 0, (function (A) { + o.dispatchEventEx({ + type: Tc.LOAD_COMPONENT_ERROR, + modelKey: o.modelKey + }) + })); + t.requests.loadBones = a + } + }, + Xu.prototype.loadClips = function (A, e) { + var t = this, + i = this.loader, + o = this.model, + n = this.url, + r = vc.GeoWorkerUrl; + if (vc.UseGeoWorker) + i.setResponseType("json"), + i.load(n.mpkUrl(A), (function (A) { + var i = new Worker(r); + i.onmessage = function (A) { + var i = A.data; + for (var o in i) + i.hasOwnProperty(o); + e(), + t._onTaskFinished() + }, + i.postMessage({ + msg: A + }) + }), (function (A) {})); + else { + i.setResponseType("json"), + i.setCacheViable(!this.offLine); + var a = i.load(n.clipsUrl(A), (function (A) { + t._parseClips(A), + Bh.debug("Clips load from online"), + e(), + t._onTaskFinished() + }), void 0, (function (A) { + o.dispatchEventEx({ + type: Tc.LOAD_COMPONENT_ERROR, + modelKey: o.modelKey + }) + })); + t.requests.loadClips = a + } + }, + Xu.prototype.loadNodes = function (A, e) { + var t = this, + i = this.loader, + o = this.model, + n = this.url, + r = vc.GeoWorkerUrl; + if (vc.UseGeoWorker) + i.setResponseType("json"), + i.load(n.mpkUrl(A), (function (A) { + var i = new Worker(r); + i.onmessage = function (A) { + var i = A.data; + for (var o in i) + i.hasOwnProperty(o); + e(), + t._onTaskFinished() + }, + i.postMessage({ + msg: A + }) + }), (function (A) {})); + else { + i.setResponseType("json"), + i.setCacheViable(!this.offLine); + var a = i.load(n.nodesUrl(A), (function (A) { + t._parseNodes(A), + Bh.debug("Nodes load from online"), + e(), + t._onTaskFinished() + }), void 0, (function (A) { + o.dispatchEventEx({ + type: Tc.LOAD_COMPONENT_ERROR, + modelKey: o.modelKey + }) + })); + t.requests.loadNodes = a + } + }, + Xu.prototype.loadAttribute = function (A, e) { + var t = this, + i = this.loader, + o = this.model, + n = this.url, + r = vc.GeoWorkerUrl; + if (vc.UseGeoWorker) + i.setResponseType("json"), + i.load(n.mpkUrl(A), (function (A) { + var i = new Worker(r); + i.onmessage = function (A) { + var i = A.data; + for (var o in i) + i.hasOwnProperty(o); + e(), + t._onTaskFinished() + }, + i.postMessage({ + msg: A + }) + }), (function (A) {})); + else { + i.setResponseType("json"), + i.setCacheViable(!this.offLine); + var a = i.load(n.attributeUrl(), (function (A) { + if (A instanceof String) + try { + A = JSON.parse(A) + } catch (A) {} + o.attributes = A, + Bh.debug("Attribute load from online") + }), void 0, (function (A) { + o.dispatchEventEx({ + type: Tc.LOAD_COMPONENT_ERROR, + modelKey: o.modelKey + }) + })); + t.requests.loadAttribute = a + } + }, + Xu.prototype.loadGeopkOnDemand = function (A, e, t) { + this.loadTaskCount = 0, + this.maxLoadTaskCount = A.length, + this._loadingOnDemand = !0, + this.finishCallback = t; + var i = this; + if (vc.getDataFromIndexedDB && !this.offLine) { + for (var o = this.url, n = [], r = 0; A.length > r; r += 1) + n.push(o.mpkUrl(A[r])); + var a = this.model.getStorage(); + a && a.getBatch(n, (function (A) { + for (var t = function (e) { + if (A[n[e]]) + if (!0 === A[n[e]].split) { + var t = A[n[e]].list, + o = new Uint8Array(A[n[e]].length); + a.getBatch(t, (function (A) { + for (var r = 0; t.length > r; r += 1) + A[t[r]] ? o.set(new Uint8Array(A[t[r]]), 4e7 * r) : Bh.error("获取分割几何失败"); + var a = n[e].indexOf("fileKey="); + i._parseGeometrie(o.buffer, n[e].slice(a + 8)), + Bh.debug("load geo from local"), + i._onTaskFinished() + }), (function () { + Bh.error("获取分割几何失败") + })) + } else + s = n[e].indexOf("fileKey="), + i._parseGeometrie(A[n[e]], n[e].slice(s + 8)), + Bh.debug("load geo from local"), + i._onTaskFinished(); + else { + if (r = i.taskGeometrieManager, + -1 === (s = n[e].indexOf("fileKey="))) + return Bh.error("url is not has fileKey"), { + v: void 0 + }; + r.addTask(n[e].slice(s + 8)), + Bh.debug("load geo from net") + } + }, o = 0; n.length > o; o += 1) { + var r, s, l = t(o); + if ("object" === lc(l)) + return l.v + } + i.taskGeometrieManager.processTasks(i.loadGeometrie.bind(i), e) + }), (function () { + for (var t = i.taskGeometrieManager, o = 0; A.length > o; o += 1) + t.addTask(A[o]); + t.processTasks(i.loadGeometrie.bind(i), e) + })) + } else { + for (var s = this.taskGeometrieManager, l = 0; A.length > l; l += 1) + s.addTask(A[l]); + s.processTasks(i.loadGeometrie.bind(i), e) + } + }, + Xu.prototype.loadAxisNet = function (A, e) { + var t = this, + i = this.loader, + o = this.url, + n = this.model; + rp(t.dataVersion, "1") ? i.setResponseType("json") : i.setResponseType("arraybuffer"), + i.setCacheViable(!this.offLine); + var r = i.load(o.axisNetUrl(A), (function (A) { + t._parseAxisNet(A), + Bh.debug("axis net load from online"), + e && e() + }), void 0, (function (A) { + n.dispatchEventEx({ + type: Tc.LOAD_AXISNET_ERROR, + modelKey: n.modelKey + }) + })); + t.requests.loadAxisNet = r + }, + Xu.prototype.loadFloorInfo = function (A, e) { + var t = this; + this._loadFloorInfoFromDB(A, (function (i) { + i && i.data ? (t._parseFloorInfo(i), + e && e(!0)) : t._loadFloorInfoFromNet(A, (function (A) { + A ? (t._parseFloorInfo(A), + e && e(!0)) : e && e(!1) + })) + })) + }, + Xu.prototype._loadFloorInfoFromDB = function (A, e) { + if (vc.getDataFromIndexedDB && !this.offLine) { + var t = this.url.floorInfoUrl(A), + i = this.model.getStorage(); + i && i.getBatch([t], (function (A) { + A[t] ? (e(A[t]), + Bh.debug("load floorinfo from local")) : e() + }), (function () { + e() + })) + } else + e() + }, + Xu.prototype._loadFloorInfoFromNet = function (A, e) { + var t = new bu(this), + i = this.url, + o = this.model; + this.model.accessToken && t.setRequestHeader({ + Authorization: this.model.accessToken + }), + rp(this.dataVersion, "1") ? t.setResponseType("json") : t.setResponseType("arraybuffer"), + t.setCacheViable(!this.offLine); + var n = t.load(i.floorInfoUrl(A), (function (A) { + Bh.debug("floor info load from online"), + e && e(A) + }), void 0, (function (t) { + o.dispatchEventEx({ + type: Tc.LOAD_FLOORINFO_ERROR, + modelKey: A + }), + e && e() + })); + this.requests.loadFloorInfo = n + }, + Xu.prototype._parseReuseNodes = function (A, e) { + if (A) { + vc.useGzip && (A = JSON.parse(uh.ab2str(pako.ungzip(A)))); + var t = this.descriptor; + t && (t.referencedMeshCache.reuseNodes = A) + } else + Bh.error("没有数据") + }, + Xu.prototype.loadReuseNode = function (A, e) { + var t = this, + i = this.jsonLoader, + o = this.model, + n = this.url; + i.setResponseType("json"), + vc.useGzip && i.setResponseType("arraybuffer"), + i.setCacheViable(!0); + i.load(n.mpkUrl(A), (function (A) { + t._parseReuseNodes(A), + Bh.debug("component load from online"), + e(), + t._onTaskFinished() + }), void 0, (function (A) { + o.dispatchEventEx({ + type: Tc.LOAD_COMPONENT_ERROR, + modelKey: o.modelKey + }) + })) + }, + Xu.prototype._parseFloorInfo = function (A) { + if (A.data && 0 !== Object.keys(A.data).length) { + var e = new zu; + e.floors = Yu.parseFloorInfos(A.data), + e.modelKey = this.model.modelKey; + var t = new Ju; + t.floors = e.floors, + e.floorExplosionInfo = t, + e.modelType = this.model.getConfig().type, + this.model.floorManager = e, + e.model = this.model + } + }; + var _u = { + IfcRoof: { + color: [.837255, .203922, .270588, 1] + }, + IfcSlab: { + color: [.637255, .603922, .670588, 1] + }, + IfcWall: { + color: [.537255, .337255, .237255, 1] + }, + IfcWallStandardCase: { + color: [.537255, .337255, .237255, 1] + }, + IfcDoor: { + color: [.637255, .603922, .670588, 1] + }, + IfcWindow: { + color: [.137255, .403922, .870588, .4] + }, + IfcOpeningElement: { + color: [.137255, .403922, .870588, .1] + }, + IfcRailing: { + color: [.137255, .403922, .870588, 1] + }, + IfcColumn: { + color: [.137255, .403922, .870588, 1] + }, + IfcBeam: { + color: [.137255, .403922, .870588, 1] + }, + IfcFurnishingElement: { + color: [.137255, .403922, .870588, 1] + }, + IfcCurtainWall: { + color: [.137255, .403922, .870588, 1] + }, + IfcStair: { + color: [.637255, .603922, .670588, 1] + }, + IfcStairFlight: { + color: [.637255, .603922, .670588, 1] + }, + IfcBuildingElementProxy: { + color: [.5, .5, .5, 1] + }, + IfcFlowSegment: { + color: [.137255, .403922, .870588, 1] + }, + IfcFlowitting: { + color: [.137255, .403922, .870588, 1] + }, + IfcFlowTerminal: { + color: [.137255, .403922, .870588, 1] + }, + IfcProxy: { + color: [.137255, .403922, .870588, 1] + }, + IfcSite: { + color: [.137255, .403922, .870588, 1] + }, + IfcLightFixture: { + color: [.8470588235, .8470588235, .870588, 1] + }, + IfcDuctSegment: { + color: [.8470588235, .427450980392, 0, 1] + }, + IfcDistributionFlowElement: { + color: [.8470588235, .427450980392, 0, 1] + }, + IfcDuctFitting: { + color: [.8470588235, .427450980392, 0, 1] + }, + IfcPlate: { + color: [.137255, .403922, .870588, .5] + }, + IfcAirTerminal: { + color: [.8470588235, .427450980392, 0, 1] + }, + IfcMember: { + color: [.8470588235, .427450980392, 0, 1] + }, + IfcCovering: { + color: [.8470588235, .427450980392, 0, 1] + }, + IfcTransportElement: { + color: [.8470588235, .427450980392, 0, 1] + }, + IfcFlowController: { + color: [.8470588235, .427450980392, 0, 1] + }, + IfcFlowFitting: { + color: [.8470588235, .427450980392, 0, 1] + }, + IfcRamp: { + color: [.8470588235, .427450980392, 0, 1] + }, + IfcFurniture: { + color: [.8470588235, .427450980392, 0, 1] + }, + IfcFooting: { + color: [.8470588235, .427450980392, 0, 1] + }, + IfcSystemFurnitureElement: { + color: [.8470588235, .427450980392, 0, 1] + }, + IfcSpace: { + color: [.137255, .303922, .570588, .5] + }, + DEFAULT: { + color: [.8470588235, .427450980392, 0, 1] + } + }, + $u = function (A) { + this.symbolReader = null, + this.userIdReader = null, + this.userDataReader = null, + this.mapSceneReader = {}, + this.lightmap = !1, + this.mapNodeInfoByCategory = {}, + this.mapNodeInfoByUserId = {}, + this.mapNodeInfoByNodeId = {}, + this.mapNodeInfoByComponentKey = {}, + this.mapNodeInfoByParameterizedDesc = {}, + this.mapNodeInfoByGeometryId = {}, + this.referencedMeshCache = {}, + this.componentCount = 0, + this.borderLines = {}, + this.octreeRootNode = { + inner: null, + outer: null, + layer: null + }, + this.meshCache = {}, + this.allBones = {}, + this.model = A + }; + $u.EnumNodeItemType = { + SYMBOL: 0, + MESH: 1, + TUBE: 2, + PIPE: 3, + BOX: 4, + BOX_M: 5, + PIPE_M: 6, + MESH_REF: 7, + LINE: 8 + }, + $u.NodeInfoCategory = { + INSTANCED: 0, + STANDARD: 1 + }, + $u.EnumDataType = { + NONE: 0, + MERGE_DATA: 1, + LAYER: 2, + LAYER_SCENE: 3, + ANIMATION: 4 + }, + $u.EnumKeyframeTrackType = { + position: "position", + scale: "scale", + quaternion: "quaternion", + weights: "weights" + }, + $u.prototype.destroy = function () { + this.destroyReader(), + this.octreeRootNode = null, + this.mapNodeInfoByCategory = {}, + this.mapNodeInfoByUserId = {}, + this.mapNodeInfoByNodeId = {}, + this.mapNodeInfoByComponentKey = {}, + this.mapNodeInfoByParameterizedDesc = {}, + this.mapNodeInfoByGeometryId = {}, + this.referencedMeshCache = {}, + this.componentCount = 0, + this.borderLines = {} + }, + $u.prototype.destroyReader = function () { + this.userIdReader = {}, + this.userDataReader = {}, + this.symbolReader = {}, + this.mapSceneReader = {} + }, + $u.prototype.getSceneReaderMap = function () { + return this.mapSceneReader + }, + $u.prototype.isValidScene = function () { + return !uh.isEmptyObject(this.getSceneReaderMap()) || (Bh.log("model load not started!"), + !1) + }, + $u.prototype.parseItemData = function (A) { + var e = this.model; + (ap(e.dataVersion, "2.0.0") || void 0 === e.dataVersion) && (Bh.time("升级几何结构"), + this._updateV1ToV2(e), + e.dataVersion = "2.0.0", + Bh.timeEnd("升级几何结构")), + this._readMaterialBuffer(e), + e.hasAnimation && vc.EnableAnimation ? (this._parseClips(), + this._parseBones()) : this._parseGeo(); + var t = {}, + i = this.referencedMeshCache; + for (var o in Bh.time("_readItemData"), + i.bufferData && Object.keys(i.bufferData).length > 0 || A && A(), + i.components) + this._readItemData(t, o, o, void 0, 0); + e.hasAnimation && vc.EnableAnimation && this._parseNodes(), + Bh.timeEnd("_readItemData"), + t = null, + A && A() + }, + $u.prototype.asyncParseItemData = function (A) { + for (var e = this.getSceneReaderMap(), t = Object.keys(e), i = t.length, o = 0, n = this, r = 0; i > r; r += 1) { + var a = e[t[r]]; + uh.asyncProcess(a, a.header.componentCount, 100, (function (A, e) { + n._parseItemDataBy(A, e) + }), (function () { + (o += 1) === i && A && A() + })) + } + }, + $u.prototype._parseItemDataBy = function (A, e) { + for (var t = A.getComponentInfo(e), i = t.itemIndex; t.itemCount > i; i += 1) + this._readItemData(A, i, e) + }, + $u.prototype.parseItemDataByComponentKey = function (A) { + var e = this.getSceneReaderMap(); + for (var t in e) + this._parseItemDataBy(e[t], A) + }, + $u.prototype._readItemData = function (A, e, t) { + var i = this.referencedMeshCache.components[e]; + void 0 !== i && -1 !== i.geoId && this._readMeshInfo(A, t, i, null) + }, + $u.prototype._readSymbolInfo = function (A, e, t) { + var i = this.symbolReader; + if (i) { + var o = i.header.symbolCount, + n = t.toData, + r = A.getMatrixInfo(t.matrixId).matrix.clone(), + a = { + matrix: r, + ItemId: t.ItemId, + originalId: t.originalId, + userDataId: t.userDataId, + materialId: t.materialId + }; + if (n >= 0 && o > n) + for (var s = i.getSymbolInfo(n), l = s.itemIndex; s.itemCount > l; l += 1) { + var c = i.getItemInfo(l); + c.type !== $u.EnumNodeItemType.SYMBOL && this._readMeshInfo(i, e, c, a) + } + r = null, + a = null, + i = null + } + }, + $u.prototype._readMeshInfo = function (A, e, t, i) { + var o = null, + n = null; + null === i ? (t.userDataId, + o = t.originalId, + n = t.materials || t.matId) : (i.userDataId, + o = i.originalId, + n = i.materialId > -1 ? i.materialId : t.materialId); + var r = null; + if (r = this._getMeshNodeAttr(A, t, i)) { + if (t.buildInCategory && (r.buildInCategory = t.buildInCategory), + r.userId = e, + r.name = t.name, + r.type = t.type, + r.componentKey = e, + r.originalId = o, + r.materialId = n, + r.state = Lc.Visible, + r.material = null, + r.originMId = n, + r.userData = null, + r.categoryId = 0, + r.familyName = t.familyName, + r.familySymbol = t.familySymbol, + this.lightmap) { + var a = t.ItemId; + i && (a = i.ItemId + "_" + t.ItemId), + r.itemIdUV2 = a + } + r.instanceOrNot = !1, + this._classifyNodeInfo(r), + r = null + } + }, + $u.prototype._getMeshNodeAttrOfPipe = function (A, e, t) { + var i = A.getMatrixInfo(e.matrixId).matrix.clone(); + t && i.multiplyMatrices(t.matrix, i); + var o = e.boundingBox.clone(); + o.applyMatrix4(i); + var n = A.getGeomPipeInfo(e.toData), + r = n.startPt, + a = n.endPt, + s = new y; + s.subVectors(a, r); + var l = s.length(); + s.normalize(); + var c = n.radius; + c > 1 || (c = 100); + var h = new y(0, 1, 0), + d = new y(c, l, c), + p = (new f).setFromUnitVectors(h, s), + g = r.clone().addScaledVector(s, .5 * l), + u = (new M).compose(g, p, d); + return i.multiply(u), + n = null, { + nodeId: (t ? t.ItemId + "_" + e.ItemId : e.ItemId) + "_pipe", + geometryId: "pipe", + boundingBox: o, + matrix: i + } + }, + $u.prototype._getMeshNodeAttrOfTube = function (A, e, t) { + var i = this._getMeshNodeAttrOfPipe(A, e, t); + return i.nodeId += "_tube", + i.geometryId = "tube", + i + }, + $u.prototype._getMeshNodeAttrOfBox = function (A, e, t) { + var i = A.getMatrixInfo(e.matrixId).matrix.clone(); + t && i.multiplyMatrices(t.matrix, i); + var o = e.boundingBox.clone(); + o.applyMatrix4(i); + var n = e.boundingBox, + r = n.getSize(), + a = n.getCenter(), + s = (new M).scale(new y(r.x, r.y, r.z)); + return s.setPosition(a), + i.multiply(s), { + nodeId: (t ? t.ItemId + "_" + e.ItemId : e.ItemId) + "_box", + geometryId: "box", + boundingBox: o, + matrix: i + } + }, + $u.prototype._getMeshNodeAttrOfBoxM = function (A, e, t) { + var i = A.getMatrixInfo(e.matrixId).matrix.clone(); + t && i.multiplyMatrices(t.matrix, i); + var o = e.boundingBox.clone(); + return o.applyMatrix4(i), { + nodeId: (t ? t.ItemId + "_" + e.ItemId : e.ItemId) + "_boxM", + geometryId: "boxM", + boundingBox: o, + matrix: i, + uvArrayBuffer: A.getGeomBoxUvInfo(e.toData) + } + }, + $u.prototype._getMeshNodeAttrOfPipeM = function (A, e, t) { + var i = A.getMatrixInfo(e.matrixId).matrix.clone(); + t && i.multiplyMatrices(t.matrix, i); + var o = e.boundingBox.clone(); + return o.applyMatrix4(i), { + nodeId: (t ? t.ItemId + "_" + e.ItemId : e.ItemId) + "_pipeM", + geometryId: "pipeM", + boundingBox: o, + matrix: i, + uvArrayBuffer: A.getGeomPipeUvInfo(e.toData) + } + }, + $u.prototype._getMeshNodeAttrOfMeshRef = function (A, e, t) { + var i = A.getMatrixInfo(e.matrixId).matrix.clone(); + t && i.multiplyMatrices(t.matrix, i); + var o = e.boundingBox.clone(); + return o.applyMatrix4(i), { + nodeId: "refMesh|" + (t ? t.ItemId + "_" + e.ItemId : e.ItemId), + geometryId: e.toData, + boundingBox: o, + matrix: i + } + }, + $u.prototype._getMeshNodeAttr = function (A, e, t, i) { + var o = new M; + o.fromArray(e.matrix || [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]), + vc.DataReduction && o.scale(new y(1e3, 1e3, 1e3)); + var n = t ? e.key + "_" + i : e.key, + r = t ? e.geoId + "_" + i : e.geoId; + if (-1 !== r) { + var a = new ph, + s = this.getReferencedMeshBufferById(e.geoId); + return s && s.position ? (a = Tu.getBoundingBoxByBuffer(s.position)).applyMatrix4(o) : Bh.error("没有找到对应几何"), { + nodeId: n, + guid: e.guid, + geometryId: r, + originalGeometryId: e.geoId, + matrix: o, + boundingBox: a, + model: this.model + } + } + }, + $u.prototype._getComponentNodeAttr = function (A, e) { + var t = new M; + t.fromArray(A.matrix || [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]), + vc.DataReduction && t.scale(new y(1e3, 1e3, 1e3)), + e && t.multiplyMatrices(e.matrix, t); + var i = A.nodeId, + o = A.geoId; + if (-1 !== o) { + var n = A.maxBoundary || e.maxBoundary, + r = A.minBoundary || e.minBoundary, + a = new ph; + return a.set(r, n), { + nodeId: i, + guid: A.guid, + geometryId: o, + originalGeometryId: A.geoId, + matrix: t, + boundingBox: a, + model: this.model + } + } + }, + $u.prototype._getLineNodeAttr = function (A, e, t) { + var i = e.boundingBox.clone(), + o = null; + return -1 !== e.matrixId ? (o = A.getMatrixInfo(e.matrixId).matrix.clone(), + t && o.multiplyMatrices(t.matrix, o), + i.applyMatrix4(o)) : (o = new M, + t && i.applyMatrix4(t.matrix)), { + nodeId: t ? "line-" + t.ItemId + "-" + e.ItemId : "line-" + e.ItemId, + geometryId: "line-" + e.toData, + boundingBox: i, + matrix: o + } + }, + $u.prototype._classifyNodeInfo = function (A) { + this._cacheNodeInfoByComponentKey(A), + this._cacheNodeInfoByNodeId(A), + this._cacheNodeInfoByUserId(A), + this._cacheNodeInfoByCategory(A), + this._cacheNodeInfoByParameterizedDesc(A) + }, + $u.prototype._cacheNodeInfoByComponentKey = function (A) { + void 0 === this.mapNodeInfoByComponentKey[A.componentKey] && (this.mapNodeInfoByComponentKey[A.componentKey] = []), + this.mapNodeInfoByComponentKey[A.componentKey].push(A) + }, + $u.prototype._cacheNodeInfoByUserId = function (A) { + void 0 === this.mapNodeInfoByUserId[A.userId] && (this.mapNodeInfoByUserId[A.userId] = []), + this.mapNodeInfoByUserId[A.userId].push(A) + }, + $u.prototype._cacheNodeInfoByNodeId = function (A) { + this.mapNodeInfoByNodeId[A.nodeId] = A + }, + $u.prototype._cacheNodeInfoByCategory = function (A) { + var e = null; + void 0 === this.mapNodeInfoByCategory[e = A.instanceOrNot ? $u.NodeInfoCategory.INSTANCED : $u.NodeInfoCategory.STANDARD] && (this.mapNodeInfoByCategory[e] = {}), + void 0 === this.mapNodeInfoByCategory[e][A.userId] && (this.mapNodeInfoByCategory[e][A.userId] = []), + this.mapNodeInfoByCategory[e][A.userId].push(A) + }, + $u.prototype._cacheNodeInfoByParameterizedDesc = function (A) { + A.parameterizedDesc && (void 0 === this.mapNodeInfoByParameterizedDesc[A.type] && (this.mapNodeInfoByParameterizedDesc[A.type] = []), + this.mapNodeInfoByParameterizedDesc[A.type].push(A)) + }, + $u.prototype._clearNodeInfoCacheWithParameterizedDesc = function (A) { + if (A) + for (var e = 0, t = A.length; t > e; e += 1) + delete this.mapNodeInfoByParameterizedDesc[A[e]]; + else + this.mapNodeInfoByParameterizedDesc = {} + }, + $u.prototype._clearNodeInfoCacheWithComponentKey = function (A) { + if (A) + for (var e = 0, t = A.length; t > e; e += 1) + delete this.mapNodeInfoByComponentKey[A[e]]; + else + this.mapNodeInfoByComponentKey = {} + }, + $u.prototype._clearNodeInfoCacheWithCategory = function (A) { + if (A) + for (var e = this.mapNodeInfoByCategory[$u.NodeInfoCategory.INSTANCED], t = this.mapNodeInfoByCategory[$u.NodeInfoCategory.STANDARD], i = 0, o = A.length; o > i; i += 1) + e && delete e[A[i]], + t && delete t[A[i]]; + else + this.mapNodeInfoByCategory = {} + }, + $u.prototype.clearNodeInfoCacheByComponentsKey = function (A) { + this._clearNodeInfoCacheWithComponentKey(A), + this._clearNodeInfoCacheWithUserId(A), + this._clearNodeInfoCacheWithCategory(A) + }, + $u.prototype._clearNodeInfoCacheWithUserId = function (A) { + if (A) + for (var e = 0, t = A.length; t > e; e += 1) + delete this.mapNodeInfoByUserId[A[e]], + delete this.mapNodeInfoByNodeId[A[e]]; + else + this.mapNodeInfoByUserId = {}; + this.mapNodeInfoByUserId = {} + }, + $u.prototype.clearNodeInfoCache = function () { + this._clearNodeInfoCacheWithComponentKey(), + this._clearNodeInfoCacheWithUserId(), + this._clearNodeInfoCacheWithCategory() + }, + $u.prototype.getNodeInfosByComponentKey = function (A) { + return this.mapNodeInfoByComponentKey[A] + }, + $u.prototype.getNodeInfosWithComponentKey = function () { + return this.mapNodeInfoByComponentKey + }, + $u.prototype.getAllNodeInfos = function () { + return this.mapNodeInfoByUserId + }, + $u.prototype.getNodeInfosByUserId = function (A) { + return this.mapNodeInfoByUserId[A] + }, + $u.prototype.getNodeInfosByNodeId = function (A) { + return this.mapNodeInfoByNodeId[A] + }, + $u.prototype.getNodeInfosWithUserId = function () { + return this.mapNodeInfoByUserId + }, + $u.prototype.getStandardNodeInfos = function () { + return this.mapNodeInfoByCategory[$u.NodeInfoCategory.STANDARD] + }, + $u.prototype.getInstancedNodeInfos = function () { + return this.mapNodeInfoByCategory[$u.NodeInfoCategory.INSTANCED] + }, + $u.prototype.getStandardUserIds = function () { + return this.getStandardNodeInfos() ? Object.keys(this.getStandardNodeInfos()) : [] + }, + $u.prototype.getInstancedUserIds = function () { + return this.getInstancedNodeInfos() ? Object.keys(this.getInstancedNodeInfos()) : [] + }, + $u.prototype.getStandardNodeInfosById = function (A) { + var e = this.getStandardNodeInfos(); + return e ? e[A] : null + }, + $u.prototype.getInstancedNodeInfosById = function (A) { + var e = this.getInstancedNodeInfos(); + return e ? e[A] : null + }, + $u.prototype._getUserIdsByCategory = function (A, e) { + var t = [], + i = null; + if (i = e === $u.NodeInfoCategory.INSTANCED ? this.getInstancedNodeInfos() : this.getStandardNodeInfos()) + for (var o = 0, n = A.length; n > o; o += 1) + i[A[o]] && t.push(A[o]); + return t + }, + $u.prototype.getInstancedUserIdsByCategory = function (A) { + return this._getUserIdsByCategory(A, $u.NodeInfoCategory.INSTANCED) + }, + $u.prototype.getStandardUserIdsByCategory = function (A) { + return this._getUserIdsByCategory(A, $u.NodeInfoCategory.STANDARD) + }, + $u.prototype._traverseNodeInfosByIds = function (A, e, t) { + for (var i = 0, o = e.length; o > i; i += 1) { + var n = e[i]; + t(n, A[n]) + } + }, + $u.prototype.traverseStandardNodeInfos = function (A, e) { + var t = this.getStandardNodeInfos(); + t && (A = A || this.getStandardUserIds(), + this._traverseNodeInfosByIds(t, A, e)) + }, + $u.prototype.traverseInstancedNodeInfos = function (A, e) { + var t = this.getInstancedNodeInfos(); + t && (A = A || this.getInstancedUserIds(), + this._traverseNodeInfosByIds(t, A, e)) + }, + $u.prototype.traverseNodeInfosByComponent = function (A) { + for (var e = Object.keys(this.mapNodeInfoByComponentKey), t = 0, i = e.length; i > t; t += 1) + for (var o = e[t], n = this.mapNodeInfoByComponentKey[o], r = 0, a = n.length; a > r; r += 1) + A(o, n[r]) + }, + $u.prototype.clearReferencedMeshCache = function () { + if (!vc.DEBUG) { + for (var A in this.referencedMeshCache) + delete this.referencedMeshCache[A]; + this.referencedMeshCache = null + } + }, + $u.prototype.cacheReferencedMeshBufferData = function (A, e) { + this.referencedMeshCache.bufferData || (this.referencedMeshCache.bufferData = {}), + this.referencedMeshCache.bufferData[A] = e + }, + $u.prototype.cacheReferencedMeshComponentNodeData = function (A, e) { + this.referencedMeshCache.componentNode || (this.referencedMeshCache.componentNode = {}), + this.referencedMeshCache.componentNode[A] = e + }, + $u.prototype.cacheReferencedMeshWireframeData = function (A, e) { + this.referencedMeshCache.wireframeData || (this.referencedMeshCache.wireframeData = {}), + this.referencedMeshCache.wireframeData[A] = e + }, + $u.prototype.getReferencedMeshBufferData = function () { + return this.referencedMeshCache.bufferData + }, + $u.prototype.getReferencedMeshBufferById = function (A) { + return this.referencedMeshCache && this.referencedMeshCache.bufferData ? this.referencedMeshCache.bufferData[A] : null + }, + $u.prototype.getReferencedMeshComponentNodeById = function (A) { + return this.referencedMeshCache && this.referencedMeshCache.componentNode ? this.referencedMeshCache.componentNode[A] : null + }, + $u.prototype.getReferencedMeshWireframeDataById = function (A) { + return this.referencedMeshCache && this.referencedMeshCache.wireframeData ? this.referencedMeshCache.wireframeData[A] : null + }, + $u.prototype.cacheReferencedMeshBoneBufferData = function (A, e) { + this.referencedMeshCache.bones || (this.referencedMeshCache.bones = {}), + this.referencedMeshCache.bones[A] = e + }, + $u.prototype.cacheReferencedMeshClipsData = function (A) { + this.referencedMeshCache.clips = A + }, + $u.prototype.cacheReferencedMeshNodesData = function (A) { + this.referencedMeshCache.nodes = A + }, + $u.prototype.cacheReferencedMeshComponentData = function (A, e) { + this.referencedMeshCache.components || (this.referencedMeshCache.components = {}), + this.referencedMeshCache.components[A] = e + }, + $u.prototype.cacheReferencedMeshMaterialData = function (A, e) { + this.referencedMeshCache.materials || (this.referencedMeshCache.materials = {}), + this.referencedMeshCache.materials[A] = e + }, + $u.prototype.cacheReferencedMeshGeoIds = function (A, e) { + this.referencedMeshCache.mpkIds || (this.referencedMeshCache.mpkIds = {}), + this.referencedMeshCache.mpkIds[A] || (this.referencedMeshCache.mpkIds[A] = []), + this.referencedMeshCache.mpkIds[A].push(e) + }, + $u.prototype.clearReferencedMeshCacheByGeopkIdxs = function (A, e) { + if (this.referencedMeshCache.mpkIds) + for (var t = 0, i = A.length; i > t; t += 1) { + var o = A[t], + n = this.referencedMeshCache.mpkIds[o]; + if (n) { + for (var r = 0, a = n.length; a > r; r += 1) + e && e(n[r]), + delete this.referencedMeshCache[n[r]]; + delete this.referencedMeshCache.mpkIds[o] + } + } + }, + $u.prototype.cacheBorderLine = function (A, e) { + var t = A ? "shared" : "unique"; + this.borderLines[t] || (this.borderLines[t] = []), + this.borderLines[t].push(e) + }, + $u.prototype.getSharedBorderLineCache = function () { + return this.borderLines.shared + }, + $u.prototype.getUniqueBorderLineCache = function () { + return this.borderLines.unique + }, + $u.prototype._isRegularShape = function (A) { + return A.type === $u.EnumNodeItemType.TUBE || A.type === $u.EnumNodeItemType.PIPE || A.type === $u.EnumNodeItemType.BOX || A.type === $u.EnumNodeItemType.BOX_M || A.type === $u.EnumNodeItemType.PIPE_M + }, + $u.prototype._isInstancedNode = function (A) { + return !!vc.Instance && (A.type === $u.EnumNodeItemType.MESH_REF ? !!vc.SharedMeshInstanceEnable : !!A.parameterizedDesc) + }, + $u.prototype.getComponentCount = function () { + return this.componentCount + }, + $u.prototype.getOctreeRootNode = function () { + return this.octreeRootNode + }, + $u.prototype.isUseInnerAndOuterOctree = function () { + return !0 + }, + $u.prototype.isOctreeOuter = function (A) { + var e = this.octreeRootNode.inner || this.octreeRootNode.outer; + return !(e.min.x > A.x || A.x > e.max.x || e.min.y > A.y || A.y > e.max.y || e.min.z > A.z || A.z > e.max.z) + }, + $u.prototype.getOctreeRoots = function (A) { + this.octreeRootNode.outer && A.push(this.octreeRootNode.outer), + this.octreeRootNode.inner && A.push(this.octreeRootNode.inner) + }, + $u.prototype.updateOctreeNodeBy = function (A, e) { + var t = new aA; + + function i(A, e) { + t.copy(A.boundingBoxWorld), + t.applyMatrix4(e), + A.min.copy(t.min), + A.max.copy(t.max), + A.center = t.getCenter(), + A.size = t.getSize().lengthSq() + } + i(A, e), + function A(e, t) { + for (var o = 0, n = e.childOctants.length; n > o; o += 1) { + var r = e.childOctants[o]; + i(r, t), + A(r, t) + } + }(A, e) + }, + $u.prototype.updateOctreeNode = function (A) { + var e = this.getOctreeRootNode(); + e.outer && this.updateOctreeNodeBy(e.outer, A), + e.inner && this.updateOctreeNodeBy(e.inner, A) + }, + $u.prototype.removeFromSceneReaderMap = function (A) { + for (var e = 0, t = A.length; t > e; e += 1) + this.mapSceneReader[A[e]] && delete this.mapSceneReader[A[e]] + }, + $u.prototype.isUserIdExist = function (A) { + return !!this.getNodeInfosByUserId(A) + }, + $u.prototype.addToNodeInfoMap = function (A) { + for (var e = 0, t = A.length; t > e; e += 1) + this._cacheNodeInfoByUserId(A[e]) + }, + $u.prototype.removeFromNodeInfoMap = function (A) { + for (var e = this.getAllNodeInfos(), t = 0, i = A.length; i > t; t += 1) { + var o = A[t].userId; + e[o] && delete e[o] + } + }, + $u.prototype.cacheNodeInfosOnGeometryId = function () { + var A = this.getStandardNodeInfos(); + for (var e in this.mapNodeInfoByGeometryId = {}, + A) + for (var t = A[e], i = 0, o = t.length; o > i; i += 1) + t[i].geometryId = this.convertGeometryId(t[i].geometryId), + this.mapNodeInfoByGeometryId[t[i].geometryId] || (this.mapNodeInfoByGeometryId[t[i].geometryId] = []), + this.mapNodeInfoByGeometryId[t[i].geometryId].push(t[i]) + }, + $u.prototype.getNodeInfosOnGeometryId = function () { + return this.mapNodeInfoByGeometryId || this.cacheNodeInfosOnGeometryId(), + this.mapNodeInfoByGeometryId + }, + $u.prototype.clearNodeInfosWithGeometryId = function () { + this.mapNodeInfoByGeometryId = {} + }, + $u.prototype.convertGeometryId = function (A) { + return A + }, + $u.prototype._readMaterialBuffer = function (A) { + var e = A.materialManager, + t = e.materials, + i = e.textures, + o = this.referencedMeshCache.materials; + for (var n in o) { + var r = o[n]; + if (!r) + return null; + var a = Kd.createMaterialByMaterialBufferAndTexture(r, i); + a.refreshUniforms && a.refreshUniforms(), + t[n] = a, + vc.EnableShadow && A.manager.viewerImpl.rendererManager.csm && A.manager.viewerImpl.rendererManager.csm.setupMaterial(a) + } + }, + $u.prototype._updateV1ToV2 = function () { + var A = this.referencedMeshCache.components, + e = this.referencedMeshCache.bufferData, + t = this.referencedMeshCache.materials; + for (var i in A) + if (A.hasOwnProperty(i)) { + var o = A[i], + n = o.matId, + r = e[o.geoId]; + if (o.materials) + continue; + if (o.materials = [], + !r) + continue; + var a = t[n]; + if (!a) + continue; + var s = this._updateMaterialV1ToV2(n, a); + if (s) + for (var l in r.materialIndex = s.materialIndex, + o.materials = s.materialId, + s.materials) + s.materials.hasOwnProperty(l) && (this.referencedMeshCache.materials[l] = s.materials[l]) + } + }, + $u.prototype._updateMaterialV1ToV2 = function (A, e) { + var t = {}, + i = [], + o = {}; + if (!e) + return null; + for (var n = e.color, r = e.colorIndex, a = e.texture, s = e.textureIndex, l = 0; n.length > l; l += 4) { + var c = {}; + c.color = [n[l], n[l + 1], n[l + 2]], + c.opacity = Math.floor(100 * n[l + 3]) / 100, + c.transparent = 1 > n[l + 3]; + var h = (255 * c.color[0] << 16 ^ 255 * c.color[1] << 8 ^ 255 * c.color[2] << 0) + "_" + c.opacity; + o[h] = c, + i.push(h) + } + if (0 !== a.length && r.length === s.length) + for (var d = -1, p = 0; s.length > p; p += 1) + if (d !== r[p] && (d = r[p], + -1 !== s[p])) { + var g = i[r[p]], + u = a[s[p]]; + if (o[g].map = u, + -1 === g.indexOf(u)) { + var f = g + "_" + a[s[p]]; + o[f] = o[g], + i.length > Object.keys(o).length - 1 || delete o[g], + i[r[p]] = f + } + } + return t.materials = o, + t.materialId = i, + t.materialIndex = r, + t + }, + $u.prototype._computeVertexNormalsFromFaceNormals = function (A, e, t) { + for (var i = new Float32Array(t), o = 0, n = 0, r = 0, a = 0, s = 0, l = 0, c = 0; A.length > c; c += 3) + s = A[c + 1], + l = A[c + 2], + n = 3 * e[c + 1], + r = 3 * e[c + 2], + i[o = 3 * e[c]] = a = A[c], + i[o + 1] = s, + i[o + 2] = l, + i[n] = a, + i[n + 1] = s, + i[n + 2] = l, + i[r] = a, + i[r + 1] = s, + i[r + 2] = l; + return i + }, + $u.prototype._computeVertexNormalsFromIndex = function (A, e, t) { + var i = new Float32Array(e.length); + if (e) { + var o = 0, + n = 0, + r = 0, + a = new y, + s = new y, + l = new y, + c = new y, + h = new y; + if (A) + for (var d = A, p = 0; d.length > p; p += 3) + n = 3 * d[p + 1], + r = 3 * d[p + 2], + a.fromArray(e, o = 3 * d[p]), + s.fromArray(e, n), + l.fromArray(e, r), + c.subVectors(l, s), + h.subVectors(a, s), + c.cross(h), + i[o] += c.x, + i[o + 1] += c.y, + i[o + 2] += c.z, + i[n] += c.x, + i[n + 1] += c.y, + i[n + 2] += c.z, + i[r] += c.x, + i[r + 1] += c.y, + i[r + 2] += c.z; + else + for (var g = 0, u = e.length; u > g; g += 9) + a.fromArray(e, g), + s.fromArray(e, g + 3), + l.fromArray(e, g + 6), + c.subVectors(l, s), + h.subVectors(a, s), + c.cross(h), + i[g] = c.x, + i[g + 1] = c.y, + i[g + 2] = c.z, + i[g + 3] = c.x, + i[g + 4] = c.y, + i[g + 5] = c.z, + i[g + 6] = c.x, + i[g + 7] = c.y, + i[g + 8] = c.z + } + return i + }, + $u.prototype.addMeshToInfoMap = function (A, e, t, i, o) { + var n = this.getNodeInfosByComponentKey(A); + Array.isArray(n) && n.forEach((function (A) { + A.nodeId === e && (A.mesh = t, + A.index = i, + A.uv = A.uv || o) + })) + }, + $u.prototype._parseGeo = function () { + Bh.time("处理几何:计算法线"); + var A = this.referencedMeshCache; + for (var e in A.bufferData) { + var t = A.bufferData[e]; + t.position.length !== t.normal.length && (t.normal = t.normal.length === t.index.length ? this._computeVertexNormalsFromFaceNormals(t.normal, t.index, t.position.length) : this._computeVertexNormalsFromIndex(t.index, t.position)) + } + Bh.timeEnd("处理几何:计算法线") + }, + $u.prototype._parseBones = function () { + var A = this.referencedMeshCache; + for (var e in A._offsetMatrix || (A._offsetMatrix = {}), + A.bufferData) { + var t = A.bufferData[e]; + t.position.length !== t.normal.length && (t.normal = t.normal.length === t.index.length ? this._computeVertexNormalsFromFaceNormals(t.normal, t.index, t.position.length) : this._computeVertexNormalsFromIndex(t.index, t.position)); + var i = A.bones[e]; + if (i) { + t.skinIndex = i.skinIndex, + t.skinWeight = i.skinWeight; + var o = i.name; + i.offsetMatrix.length / 16 !== o.length && Bh.debug("bones的name数量与Matrix数量不符!"); + for (var n = 0; o.length > n; n += 1) + A._offsetMatrix[o[n]] = (new M).fromArray(i.offsetMatrix, 16 * n) + } + } + }, + $u.prototype._parseClips = function () { + for (var A = this.referencedMeshCache.clips, e = [], t = 0, i = A.length; i > t; t += 1) { + for (var o = [], n = A[t], r = 0, a = n.tracks.length; a > r; r += 1) { + var s = n.tracks[r], + l = null; + switch (s.type) { + case $u.EnumKeyframeTrackType.weights: + l = Dr; + break; + case $u.EnumKeyframeTrackType.quaternion: + l = Nr; + break; + case $u.EnumKeyframeTrackType.position: + case $u.EnumKeyframeTrackType.scale: + default: + l = Vr + } + if (0 === n.ticksPerSec) { + n.ticksPerSec = 1e3; + for (var c = 0; s.times.length > c; c += 1) + s.times[c] /= n.ticksPerSec + } + var h = new l(Fs.sanitizeNodeName(s.name) + "." + s.type, s.times, s.values, 2301); + o.push(h) + } + var d = new Gr(void 0 !== n.name ? n.name : "animation_" + t, n.duration / n.ticksPerSec, o); + e.push(d) + } + this.model.animations = e + }, + $u.prototype._parseNodes = function () { + var A = this.referencedMeshCache; + A.allBones = [], + A.offsetMatrix = []; + var e = function A(e, t) { + var i = null; + "node" === e.type ? i = new H : "bone" === e.type && (i = new Uo, + t.allBones[e.name] = i), + i.name = Fs.sanitizeNodeName(e.name), + i.matrix.fromArray(e.transformation || [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]), + i.matrix.decompose(i.position, i.quaternion, i.scale); + for (var o = 0; e.children.length > o; o += 1) { + var n = A(e.children[o], t); + n && i.add(n) + } + for (var r = 0; e.meshes.length > r; r += 1) { + var a = e.meshes[r]; + t.model._getHandler().defaultManager.meshManager._readBufferInfo(t.model, [t.model.modelKey + "_" + e.meshes[r]]); + var s = t.model._getHandler().defaultManager.meshManager._makeSkinMesh(t.model, [t.model.modelKey + "_" + e.meshes[r]], (function (A) {})); + t.meshCache[a] = s, + s.name = e.name, + i.add(s) + } + return i + }(A.nodes, this); + for (var t in A.bufferData) { + var i = this.meshCache[t]; + if (i && i.isSkinnedMesh) { + for (var o = [], n = [], r = 0; A.bones[t].name.length > r; r += 1) { + var a = A.bones[t].name[r], + s = A._offsetMatrix[a], + l = this.allBones[a]; + s && l && (o.push(l), + n.push(s)) + } + var c = new bo(o, n); + i.bind(c, i.matrixWorld) + } + } + this.model.nodes = e, + this.model.manager.getScene().onBeforeRender = function (A, e, t, i) { + e.updateMatrixWorld(!0) + }, + this.model.group.add(e), + (c = new _s(e)).visible = !1, + this.model.skeleton = c, + this.model.group.add(c), + this.model.mixer = new Rs(e), + this.model.actions = []; + for (var h = 0; this.model.animations.length > h; h += 1) { + var d = this.model.mixer.clipAction(this.model.animations[h]); + this.model.actions.push(d) + } + }; + var Af = function (A) { + $u.call(this, A), + this.instancedComponent = {} + }; + Object.assign(Af.prototype, $u.prototype), + Af.prototype.parseItemData = function (A) { + var e = this.model; + (ap(e.dataVersion, "2.0.0") || void 0 === e.dataVersion) && (Bh.time("升级几何结构"), + this._updateV1ToV2(e), + e.dataVersion = "2.0.0", + Bh.timeEnd("升级几何结构")), + this._readMaterialBuffer(e), + e.hasAnimation && vc.EnableAnimation ? (this._parseClips(), + this._parseBones()) : (this._parseGeo(), + vc.Instance && sp(e.dataVersion, "2.0.0") && this._parseInstanced()); + var t = {}, + i = this.referencedMeshCache; + if (Bh.time("_readItemData"), + !i.bufferData || 0 >= Object.keys(i.bufferData).length) + return Bh.warn("缺少几何数据"), + !0; + for (var o in i.components) + this._readItemData(t, o, o, void 0, 0); + Bh.timeEnd("_readItemData"), + t = null, + A && A() + }, + Af.prototype._readMeshInfo = function (A, e, t, i) { + var o = this.model.materialManager.materials, + n = null, + r = null, + a = null, + s = this.referencedMeshCache; + if (t.nodes || t.nodeIds) { + r = t.originalId; + var l = t, + c = (new M).fromArray(l.matrix || [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]); + l.matrix = c; + var h = []; + h = l.nodes ? l.nodes : l.nodeIds; + for (var d = 0; h.length > d; d += 1) { + var p = h[d]; + if ("object" !== lc(p) && (p = this.getReferencedMeshComponentNodeById(p)), + p) { + var g, u = null; + if (a = "", + -1 !== p.geoId) + if (u = this._getComponentNodeAttr(p, l, d)) { + if (l.buildInCategory && (u.buildInCategory = l.buildInCategory), + !o[a = p.material]) { + var f = _u[l.type] ? _u[l.type].color : void 0; + f || (Bh.log("Material not found for type: ", l.type), + f = _u.DEFAULT.color), + f || (Bh.log("Default material not found for type: ", l.type), + f = [1, 1, 1, 1]); + var m = new LA(f[0], f[1], f[2]), + C = a || m.getHexString() + "_" + f[3], + y = o[C]; + y || (Bh.warn("缺少材质 " + a), + y = Kd.createStandardMaterial({ + color: m + }), + 1 > f[3] && (y.transparent = !0, + y.opacity = f[3]), + y.side = 2, + o[C] = y), + u.material = a = C + } + if (o[a].aoMap) { + var v = this.getReferencedMeshBufferById(u.geometryId); + v && (v.uv2 = v.uv) + } + g = u.nodeId; + var I = (K = this.userDataReader) ? K.getUserData(n) : null; + u.type = l.type, + u.userId = e, + u.name = l.name, + u.userDataId = n, + u.originalId = r, + u.materialId = a, + u.originMId = a, + u.userData = I, + u.categoryId = 0, + u.componentKey = e, + u.familyName = l.familyName, + u.familySymbol = l.familySymbol; + var E = vc.Instance, + B = s.reuseNodes.hasOwnProperty(g); + u.instanceOrNot = !(!E || !B), + u.isBatched = !0, + u.state = Lc.Visible, + u.material = null, + this._classifyNodeInfo(u), + u = null + } else + Bh.debug("非法node") + } + } + } else if (null === i ? (n = t.userDataId, + r = t.originalId, + a = t.materialId || t.matId) : (n = i.userDataId, + r = i.originalId, + a = i.materialId > -1 ? i.materialId : t.materialId), + t.materials || (t.materials = []), + t.materials.length > 0) + for (d = 0; t.materials.length > d; d += 1) { + var x = null; + if (x = this._getMeshNodeAttr(A, t, t.materials.length > 1, d), + !o[a = t.materials[d]]) { + var S = _u[t.type] ? _u[t.type].color : void 0; + S || (Bh.log("Material not found for type: ", t.type), + S = _u.DEFAULT.color), + S || (Bh.log("Default material not found for type: ", t.type), + S = [1, 1, 1, 1]); + var w = new LA(S[0], S[1], S[2]), + b = a || w.getHexString() + "_" + S[3], + U = o[b]; + U || (Bh.warn("缺少材质 " + a), + U = Kd.createStandardMaterial({ + color: w + }), + 1 > S[3] && (U.transparent = !0, + U.opacity = S[3]), + U.side = 2, + o[b] = U) + } + if (o[a].aoMap) { + var F = this.getReferencedMeshBufferById(x.geometryId); + F && (F.uv2 = F.uv) + } + if (!x) + return; + var K; + I = (K = this.userDataReader) ? K.getUserData(n) : null; + x.type = t.type, + x.userId = e, + x.name = t.name, + x.userDataId = n, + x.originalId = r, + x.materialId = a, + x.originMId = a, + x.userData = I, + x.categoryId = 0, + x.componentKey = e, + x.familyName = t.familyName, + x.familySymbol = t.familySymbol, + vc.Instance && this.instancedComponent[e] ? x.instanceOrNot = !0 : (x.instanceOrNot = !1, + this.instancedGeo[x.originalGeometryId].length > 1 && (x.originalGeometryId = "")), + x.state = Lc.Visible, + x.material = null, + x.isBatched = !0, + this._classifyNodeInfo(x), + x = null + } + else { + var Q = null, + R = _u[t.type] ? _u[t.type].color : void 0; + R || (Bh.log("Material not found for type: ", t.type), + R = _u.DEFAULT.color), + R || (Bh.log("Default material not found for type: ", t.type), + R = [1, 1, 1, 1]); + var T = new LA(R[0], R[1], R[2]), + k = T.getHexString() + "_" + R[3], + D = o[k]; + if (D || (D = Kd.createStandardMaterial({ + color: T + }), + 1 > R[3] && (D.transparent = !0, + D.opacity = R[3]), + D.side = 2, + o[k] = D), + t.materials.push(k), + Q = this._getMeshNodeAttr(A, t, !1, 0), + a = t.materials[0], + !Q) + return; + t.buildInCategory && (Q.buildInCategory = t.buildInCategory); + e = t.key; + Q.type = t.type, + Q.userId = e, + Q.name = t.name, + Q.originalId = r, + Q.materialId = a, + Q.originMId = a, + Q.userData = {}, + Q.categoryId = 0, + Q.componentKey = e, + Q.familyName = t.familyName, + Q.familySymbol = t.familySymbol, + Q.instanceOrNot = !(!vc.Instance || !this.instancedComponent[e]), + Q.isBatched = !0, + Q.state = Lc.Visible, + Q.material = null, + this._classifyNodeInfo(Q), + Q = null + } + }, + Af.prototype._parseGeo = function () { + Bh.time("处理几何:按材质拆分构件"); + var A = this.referencedMeshCache; + for (var e in A.bufferData) { + var t = A.bufferData[e]; + if (t.position.length !== t.normal.length && (t.normal = t.normal.length === t.index.length ? this._computeVertexNormalsFromFaceNormals(t.normal, t.index, t.position.length) : this._computeVertexNormalsFromIndex(t.index, t.position)), + void 0 !== t.materialIndex) { + for (var i = void 0, o = [], n = null, r = 0; t.materialIndex.length > r; r += 1) { + var a = t.materialIndex[r]; + a !== n && (n = a, + void 0 !== i && (i.count = 3 * r - i.start, + o.push(i)), + i = { + start: 3 * r, + materialIndex: n + }) + } + if (void 0 !== i && (i.count = 3 * t.materialIndex.length - i.start, + o.push(i)), + 1 === o.length) { + A.bufferData[e + "_" + o[0].materialIndex] = t + } else { + for (var s = {}, l = 0; o.length > l; l += 1) { + var c = o[l]; + void 0 === s[c.materialIndex] && (s[c.materialIndex] = { + index: [], + count: 0 + }), + s[c.materialIndex].index.push({ + start: c.start, + count: c.count + }), + s[c.materialIndex].count += c.count + } + var h = function () { + p = {}, + g = s[d]; + for (var i = 0, o = new Uint32Array(g.count), n = 0; g.index.length > n; n += 1) { + var r = g.index[n], + a = t.index.slice(r.start, r.start + r.count); + o.set(a, i), + i += r.count + } + u = {}, + o.forEach((function (A, e) { + u[A] || (u[A] = []), + u[A].push(e) + })); + var l = Object.keys(u).length; + f = new Float32Array(3 * l), + m = new Float32Array(3 * l), + C = new Float32Array(2 * l), + y = 0, + v = 0; + var c = 0; + for (var h in u) + if (u.hasOwnProperty(h)) { + h = Number(h); + var I = t.position.slice(3 * h, 3 * h + 3), + E = t.normal.slice(3 * h, 3 * h + 3); + if (t.uv.length > 0) { + var B = t.uv.slice(2 * h, 2 * h + 2); + C.set(B, v), + v += 2 + } + f.set(I, y), + m.set(E, y), + y += 3, + u[h].forEach((function (A) { + o[A] = c + })), + c += 1 + } + p.index = o, + p.position = f, + p.normal = m, + t.uv && t.uv.length > 0 && (p.uv = C), + A.bufferData[e + "_" + d] = p + }; + for (var d in s) { + var p, g, u, f, m, C, y, v; + h() + } + } + } + } + Bh.timeEnd("处理几何:按材质拆分构件") + }, + Af.prototype._parseInstanced = function () { + Bh.time("_parseInstanced"), + this.instancedComponent = {}; + var A = {}, + e = {}, + t = this.referencedMeshCache, + i = this.model.materialManager.materials; + for (var o in t.components) + if (t.components.hasOwnProperty(o)) { + var n = t.components[o]; + if (n.nodeIds || n.nodes) + continue; + var r = n.geoId; + if (-1 === r) { + Bh.debug("实体没有几何"); + continue + } + if (void 0 === A[r] && (A[r] = []), + A[r].push(1), + !n.materials || 1 > n.materials.length) { + n.materials = []; + var a = _u[n.type] ? _u[n.type].color : void 0; + a || (Bh.log("Material not found for type: ", n.type), + a = _u.DEFAULT.color), + a || (Bh.log("Default material not found for type: ", n.type), + a = [1, 1, 1, 1]); + var s = new LA(a[0], a[1], a[2]), + l = s.getHexString() + "_" + a[3], + c = i[l]; + c || (Bh.warn("缺少材质 " + l), + c = Kd.createStandardMaterial({ + color: s + }), + 1 > a[3] && (c.transparent = !0, + c.opacity = a[3]), + c.side = 2, + i[l] = c), + n.materials.push(l) + } + for (var h = 0, d = n.materials.length; d > h; h += 1) { + var p = n.materials[h] + "&" + r; + void 0 === e[p] && (e[p] = []), + e[p].push({ + componentKey: o + }) + } + } + for (var g in this.instancedGeo = A, + e) + if (e.hasOwnProperty(g)) + if (1 < e[g].length) + for (var u = 0; e[g].length > u; u += 1) + this.instancedComponent[e[g][u].componentKey] = !0; + else + delete e[g]; + Bh.timeEnd("_parseInstanced") + }; + var ef = function (A) { + Xu.call(this, A), + this.descriptor = new Af(A.model) + }; + (ef.prototype = Object.assign(ef.prototype, Xu.prototype)).loadSceneAndGeos = function (A) { + var e = A.scene, + t = this.model, + i = e.geometries.length || 0, + o = []; + if (this.map = {}, + ap(this.dataVersion, "2.0.0")) + for (var n = 0; i > n; n += 1) + e.geometries[n].fileKey ? o.push(e.geometries[n].fileKey) : t.dispatchEventEx({ + type: Tc.SCENE_NOT_CLOSE, + modelKey: t.modelKey + }); + else + o = e.geometries; + this.maxLoadTaskCount += i, + this._loadGeo(o) + }, + ef.prototype.getSceneTaskCount = function (A) { + var e = A.scenes; + return e += A.lines, + e += A.mpks, + vc.BorderLineDelayLoaded || (e += this.getAllBorderlineCount()), + e + }; + var tf = function (A) { + this.model = A, + this.defaultManager = null, + this.instancedManager = null, + this.model = A, + this.loader = null, + this.loaded = !1, + this.dataReady = !1, + this.borderlinesLoaded = !1, + this.borderlinesGenerated = !1 + }; + tf.prototype.destroy = function () { + this.model = null, + this.defaultManager.destroy(), + this.defaultManager = null, + this.instancedManager.destroy(), + this.instancedManager = null, + this.loader && (this.loader.destroy(), + this.loader = null) + }, + tf.prototype.load = function (A) { + var e = this, + t = this.model; + this.loader.setNotifyProgress(A), + this.loader.load((function () { + t.manager.dispatchEvent({ + type: Rc.ON_LOAD_START, + modelKey: t.modelKey + }) + }), (function (A) { + t.manager.dispatchEvent({ + type: Rc.ON_LOAD_PROGRESS, + progress: A, + modelKey: t.modelKey + }) + }), (function () { + e.prepareData((function () { + e.processLoadCompleted((function () { + t.manager.dispatchEvent({ + type: Rc.ON_LOAD_COMPLETE, + modelKey: t.modelKey + }) + })) + })) + })) + }, + tf.prototype.processLoadCompleted = function (A) { + var e = this.model; + e.materialManager._updateTextureMapping(), + e.materialManager._updateIBL(e), + e.setLoaded(!0); + var t = e.manager.filter, + i = e.manager.getNodeInfos(); + t.initFilterManager(i), + requestAnimationFrame((function () { + A && A(), + e.hasAnimation && vc.EnableAnimation && e.createPanel(), + e.updateMeshNodes(), + e.applyFilter(), + e.debut(e) + })) + }, + tf.prototype.prepareData = function (A) { + if (!this.dataReady) { + var e = this; + this.loader.getDescriptor().parseItemData((function () { + e.dataReady = !0, + e.settleData(A) + })) + } + }, + tf.prototype.prepareWireframe = function (A, e) { + if (A.isActivateWireframe()) + if (vc.BorderLineDelayLoaded && this.loader.getAllBorderlineCount()) + if (this.borderlinesLoaded) + this.borderlinesGenerated && (this.defaultManager.asyncGenerateWireframe(A), + this.instancedManager.generateWireframe(A)); + else { + this.borderlinesLoaded = !0; + var t = this; + this.loader.delayLoadBorderlines((function () { + t.instancedManager.generateWireframe(A), + t.defaultManager.asyncGenerateWireframe(A, (function () { + t.borderlinesGenerated = !0, + e && e() + })) + })) + } + else + this.defaultManager.generateWireframe(A), + this.instancedManager.generateWireframe(A) + }, + tf.prototype.prepare = function (A) {}, + tf.prototype.needUpdate = function () { + return !0 + }, + tf.prototype.updateNodes = function () { + this.defaultManager.updateNodes(this.model), + vc.Instance && this.instancedManager.updateNodes(this.model) + }, + tf.prototype.isLoaded = function () { + return this.loaded + }, + tf.prototype.isDataReady = function () { + return this.loaded + }, + tf.prototype.isAllReady = function () { + return !0 + }, + tf.prototype.isHidden = function () { + var A = this.model; + return !A.visible && (A.manager.scene.removeGroupByName(A._getWireframeGroupName()), + !0) + }, + tf.prototype.settleData = function (A) {}, + tf.prototype.addNodeInfoToOctantMap = function () {}, + tf.prototype.applyFilter = function () { + console.log('applyFilter :>dfdfdf> '); + this.isLoaded() && (this.defaultManager.applyFilter(this.model), + vc.Instance && this.instancedManager.applyFilter(this.model)) + }, + tf.prototype.applySelection = function () { + console.log('applySelection14') + // debugger; + this.isLoaded() && (this.defaultManager.applySelection(this.model), + vc.Instance && this.instancedManager.applySelection(this.model)) + }, + tf.prototype.clearSelection = function () { + this.isLoaded() && (this.defaultManager.clearSelection(this.model), + vc.Instance && this.instancedManager.clearSelection(this.model)) + }, + tf.prototype.applyHover = function () { + this.isLoaded() && (this.defaultManager.applyHover(this.model), + vc.Instance && this.instancedManager.applyHover(this.model)) + }, + tf.prototype.clearHover = function () { + this.isLoaded() && (this.defaultManager.clearHover(this.model), + vc.Instance && this.instancedManager.clearHover(this.model)) + }, + tf.prototype.applyBlink = function () { + this.isLoaded() && (this.defaultManager.applyBlink(this.model), + vc.Instance && this.instancedManager.applyBlink(this.model)) + }, + tf.prototype.clearBlink = function () { + this.isLoaded() && (this.defaultManager.clearBlink(this.model), + vc.Instance && this.instancedManager.clearBlink(this.model)) + }, + tf.prototype.applyReplacement = function () { + this.isLoaded() && (this.defaultManager.applyReplacement(this.model), + vc.Instance && this.instancedManager.applyReplacement(this.model)) + }, + tf.prototype.getMeshesByUserIds = function (A) { + if (this.isLoaded()) { + var e = this.defaultManager.getMeshesByUserIds(this.model, A), + t = []; + return vc.Instance && (t = this.instancedManager.getMeshesByUserId(this.model, A)), + [].concat(e).concat(t) + } + }, + tf.prototype.rebuildIndicesforLightmap = function () { + this.defaultManager.rebuildIndices(this.model) + }, + tf.prototype.adjustVisibility = function (A) { + this.defaultManager.adjustVisibility(this.model, A) + }, + tf.prototype.changeVisibilityOfSelectedObjects = function (A) { + this.defaultManager.changeVisibilityOfSelectedObjects(this.model, A) + }, + tf.prototype.changeVisibilityOfNonSelectedObjects = function (A) { + this.defaultManager.changeVisibilityOfNonSelectedObjects(this.model, A) + }, + tf.prototype.adjustInstanceVisibility = function (A) { + this.instancedManager.adjustVisibility(this.model, A) + }, + tf.prototype.changeInstanceVisibilityOfSelectedObjects = function (A) { + this.instancedManager.changeVisibilityOfSelectedObjects(this.model, A) + }, + tf.prototype.changeInstanceVisibilityOfNonSelectedObjects = function (A) { + this.instancedManager.changeVisibilityOfNonSelectedObjects(this.model, A) + }, + tf.prototype.restoreVisibilityOfObjects = function () { + this.defaultManager.restoreVisibilityOfObjects(), + this.instancedManager.restoreVisibilityOfObjects() + }, + tf.prototype.getBlinkMaterials = function () { + var A = [], + e = this.model.materialManager.instanceMaterials; + for (var t in e) + for (var i = e[t], o = 0, n = i.length; n > o; o += 1) + A.push(i[o]); + return A = A.concat(this.defaultManager.meshManager.getBlinkMaterials()) + }, + tf.prototype.disposeBufferAfterVbo = function () { + this.isLoaded() && (this.defaultManager.disposeBufferAfterVbo(), + this.instancedManager.disposeBufferAfterVbo()) + }, + tf.prototype.getGeometryBuffersByUserId = function (A) { + if (!this.isLoaded()) + return []; + var e = []; + return e = (e = e.concat(this.defaultManager.getGeometryBuffersByUserId(this.model, A))).concat(this.instancedManager.getGeometryBuffersByUserId(this.model, A)) + }, + tf.prototype.unloadComponents = function (A) {}, + tf.prototype.explosion = function (A) { + this.isLoaded() && (this.defaultManager.explosion(this.model, A), + vc.Instance && this.instancedManager.explosion(this.model, A)) + }, + tf.prototype.closeExplosion = function () { + this.isLoaded() && (this.defaultManager.closeExplosion(this.model), + vc.Instance && this.instancedManager.closeExplosion(this.model)) + }, + tf.prototype.componentsExplosion = function (A) { + this.isLoaded() && (this.defaultManager.componentsExplosion(this.model, A), + vc.Instance && this.instancedManager.componentsExplosion(this.model, A)) + }, + tf.prototype.closeComponentsExplosion = function (A) { + this.isLoaded() && (this.defaultManager.closeComponentsExplosion(this.model, A), + vc.Instance && this.instancedManager.closeComponentsExplosion(this.model, A)) + }, + tf.prototype.isHiddenNode = function (A) { + return this.defaultManager.isHiddenNode(A) || this.instancedManager.isHiddenNode(A) + }, + tf.prototype.moveMeshfromInstancedToDefault = function (A) {}; + var of = function (A) { + this.manager = A, + this.pickingNodeMap = null, + this.pickingNodeGroup = null, + this.nodeGroupName = "PickingNodeGroup" + }; of .prototype.destroy = function () { + this.clearData(), + this.pickingNodeGroup = null, + this.manager = null + }, of .prototype.clearData = function () { + this.clearAllFromPickingNodeGroup(), + this.clearAllFromPickingNodeMap() + }, of .prototype.addToPickingNodeMap = function (A, e) { + this.pickingNodeMap || (this.pickingNodeMap = {}), + this.pickingNodeMap[A] = e, + this.addToPickingNodeGroup(e) + }, of .prototype.removeFromPickingNodeMap = function (A) { + this.pickingNodeMap && this.pickingNodeMap[A] && (this.removeFormPickingNodeGroup(A), + this.disposePickingNodeById(A), + delete this.pickingNodeMap[A]) + }, of .prototype.addToPickingNodeGroup = function (A) { + this.pickingNodeGroup || (this.pickingNodeGroup = new Xi, + this.pickingNodeGroup.name = this.nodeGroupName); + for (var e = 0, t = A.length; t > e; e += 1) + this.pickingNodeGroup.add(A[e]) + }, of .prototype.removeFormPickingNodeGroup = function (A) { + if (this.pickingNodeGroup) + for (var e = this.pickingNodeMap[A], t = 0, i = e.length; i > t; t += 1) + this.pickingNodeGroup.remove(e[t]) + }, of .prototype.disposePickingNodeById = function (A) { + for (var e = this.pickingNodeMap[A], t = 0, i = e.length; i > t; t += 1) + e[t].material = null, + e[t].geometry.dispose(), + e[t] = null + }, of .prototype.clearAllFromPickingNodeMap = function () { + if (this.pickingNodeMap) { + for (var A = Object.keys(this.pickingNodeMap), e = 0, t = A.length; t > e; e += 1) + this.disposePickingNodeById(A[e]); + this.pickingNodeMap = null + } + }, of .prototype.clearAllFromPickingNodeGroup = function () { + this.pickingNodeGroup && (this.pickingNodeGroup.children.length = 0) + }, of .prototype.isPickingMeshesGenerated = function () { + return !!this.pickingNodeMap + }, of .prototype.generatePickingMeshes = function () {}, of .prototype.updatePickingMeshesState = function (A, e, t) {}, of .prototype.resetPickingMeshesState = function () {}, of .prototype.updatePickingMeshes = function (A, e, t) { + return this.isPickingMeshesGenerated() || (this.generatePickingMeshes(), + this.isPickingMeshesGenerated()) ? (this.resetPickingMeshesState(), + this.updatePickingMeshesState(A, e, t), + this.getPickingNodeGroup()) : null + }, of .prototype.getPickingNodeGroup = function () { + return this.pickingNodeGroup + }; + var nf = function (A) { + of .call(this, A), + this.nodeGroupName = "PickingBatchedMeshGroup" + }; + Object.assign(nf.prototype, of .prototype), + eu(nf, [{ + key: "disposePickingNodeById", + value: function (A) { + for (var e = this.pickingNodeMap[A], t = 0, i = e.length; i > t; t += 1) + e[t]._indicesGroup = null, + e[t].material = null, + e[t].geometry.dispose(), + e[t] = null + } + }, { + key: "generatePickingMeshes", + value: function () { + for (var A = this.manager, e = Object.keys(A.mapMaterialIdToMergedNode), t = 0, i = e.length; i > t; t += 1) { + for (var o = e[t], n = A.getPropertyValueByMaterialKey(o), r = A.mapMaterialIdToMergedNode[o], a = [], s = 0, l = r.length; l > s; s += 1) { + var c = r[s], + h = c.geometry, + d = c.indices, + p = c.mesh, + g = new he; + g.setAttribute("position", h.getAttribute("position")), + g.setIndex(h.getIndex()); + var u = new("lines" === n.type ? jo : Ue)(g, Kd.DefaultMaterial); + p.matrixWorld.decompose(u.position, u.quaternion, u.scale), + u.name = o, + u.frustumCulled = !1, + u.renderOrder = 0, + u._indicesGroup = d, + a.push(u) + } + this.addToPickingNodeMap(o, a) + } + } + }, { + key: "_rebuildGeometryGroup", + value: function (A, e, t) { + var i, o = this.manager.manager, + n = 0, + r = 0, + a = 0, + s = A._indicesGroup, + l = Object.keys(s), + c = [], + h = {}; + e.length > l.length ? (c = l, + h = t) : (c = e, + h = s); + var d = []; + for (a = 0, + i = c.length; i > a; a += 1) { + var p = c[a]; + if (o.isPickableNode(p) && h[p]) { + var g = s[p]; + if (g && g.length > 0) + for (n = 0, + r = g.length; r > n; n += 1) + d.push({ + indexStart: g[n].indexStart, + indexCount: g[n].indexCount + }) + } + } + A.visible = !0; + var u = A.geometry; + if (u.clearGroups(), + 0 !== d.length) + for (d.sort((function (A, e) { + return A.indexStart - e.indexStart + })), + n = 0, + r = d.length; r > n; n += 1) { + var f = d[n].indexStart, + m = d[n].indexCount; + if (0 === n) + u.addGroup(f, m, 0); + else + f === d[n - 1].indexStart + d[n - 1].indexCount ? u.groups[u.groups.length - 1].count += m : u.addGroup(f, m, 0) + } + else + A.visible = !1 + } + }, { + key: "updatePickingMeshesState", + value: function (A, e, t) { + for (var i = this.pickingNodeMap, o = Object.keys(i), n = 0, r = o.length; r > n; n += 1) + for (var a = i[o[n]], s = 0, l = a.length; l > s; s += 1) + a[s].material = [A], + a[s].visible = !1, + this._rebuildGeometryGroup(a[s], e, t) + } + }]); + var rf = new aA, + af = new M, + sf = new CA, + lf = new cA, + cf = function () { + jo.call(this), + this.type = "LineSegmentsEx" + }; + cf.prototype.init = function (A) {}, + cf.prototype.destroy = function () {}, + cf.prototype.intersectBoxWithDistance = function (A, e) { + var t = this.geometry, + i = this.matrixWorld; + return e && (i = this.matrixWorld.clone()).multiplyMatrices(this.matrixWorld, e), + t.boundingBox || t.computeBoundingBox(), + rf.copy(t.boundingBox), + rf.applyMatrix4(i), + A.ray.intersectBoxWithDistance(rf) + }, + cf.prototype.intersectBoxWithDistanceByIndices = function (A, e) { + var t = this.geometry.attributes.position.array, + i = 0, + o = t.length; + e && e.indexCount > 0 && (i = e.positionStart, + o = e.positionStart + e.positionCount); + var n = uh.box3FromArrayRange(t, i, o); + return n.applyMatrix4(this.matrixWorld), + A.ray.intersectBoxWithDistance(n) + }, + cf.prototype.raycastByIndices = function (A, e, t, i) { + var o = A.linePrecision; + A.linePrecision = vc.LineSelectRange || 5; + var n = A.linePrecision, + r = n * n, + a = null; + i ? (a = this.matrixWorld.clone()).multiplyMatrices(this.matrixWorld, i) : a = this.matrixWorld; + var s = this.geometry; + if (null === s.boundingSphere && s.computeBoundingSphere(), + lf.copy(s.boundingSphere), + lf.applyMatrix4(a), + !1 !== A.ray.intersectsSphere(lf)) { + af.getInverse(a), + sf.copy(A.ray).applyMatrix4(af); + var l = new y, + c = new y, + h = new y, + d = new y, + p = s.attributes.position.array, + g = s.index.array, + u = 0, + f = g.length; + t && t.indexCount > 0 && (u = t.indexStart, + f = t.indexStart + t.indexCount); + for (var m = u; f - 1 > m; m += 2) { + var C = g[m + 1]; + if (l.fromArray(p, 3 * g[m]), + c.fromArray(p, 3 * C), + r >= sf.distanceSqToSegment(l, c, d, h)) { + d.applyMatrix4(a); + var v = A.ray.origin.distanceTo(d); + A.near > v || v > A.far || e.push({ + distance: v, + point: h.clone().applyMatrix4(a), + index: m, + face: null, + faceIndex: null, + object: this + }) + } + } + A.linePrecision = o + } + }; + var hf = new M, + df = new CA, + pf = new cA, + gf = new y, + uf = new y, + ff = new y, + mf = new y, + Cf = new y, + yf = new y, + vf = new y, + If = new y, + Ef = new y, + Bf = new s, + xf = new s, + Sf = new s, + wf = new y, + Mf = new y; + + function bf(A, e, t, i, o, n, r, a) { + if (null === (Array.isArray(e) ? i.intersectTriangle(o, n, r, !1, a) : 1 === e.side ? i.intersectTriangle(r, n, o, !0, a) : i.intersectTriangle(o, n, r, 2 !== e.side, a))) + return null; + Mf.copy(a), + Mf.applyMatrix4(A.matrixWorld); + var s = t.ray.origin.distanceTo(Mf); + return t.near > s || s > t.far ? null : { + distance: s, + point: Mf.clone(), + object: A + } + } + + function Uf(A, e, t, i, o, n, r, a, l, c, h, d) { + gf.fromBufferAttribute(o, c), + uf.fromBufferAttribute(o, h), + ff.fromBufferAttribute(o, d); + var p = A.morphTargetInfluences; + if (e.morphTargets && n && p) { + vf.set(0, 0, 0), + If.set(0, 0, 0), + Ef.set(0, 0, 0); + for (var g = 0, u = n.length; u > g; g += 1) { + var f = p[g], + m = n[g]; + 0 !== f && (mf.fromBufferAttribute(m, c), + Cf.fromBufferAttribute(m, h), + yf.fromBufferAttribute(m, d), + r ? (vf.addScaledVector(mf, f), + If.addScaledVector(Cf, f), + Ef.addScaledVector(yf, f)) : (vf.addScaledVector(mf.sub(gf), f), + If.addScaledVector(Cf.sub(uf), f), + Ef.addScaledVector(yf.sub(ff), f))) + } + gf.add(vf), + uf.add(If), + ff.add(Ef) + } + var C = bf(A, e, t, i, gf, uf, ff, wf); + if (C) { + a && (Bf.fromBufferAttribute(a, c), + xf.fromBufferAttribute(a, h), + Sf.fromBufferAttribute(a, d), + C.uv = RA.getUV(wf, gf, uf, ff, Bf, xf, Sf, new s)), + l && (Bf.fromBufferAttribute(l, c), + xf.fromBufferAttribute(l, h), + Sf.fromBufferAttribute(l, d), + C.uv2 = RA.getUV(wf, gf, uf, ff, Bf, xf, Sf, new s)); + var y = new GA(c, h, d); + RA.getNormal(gf, uf, ff, y.normal), + C.face = y + } + return C + } + var Ff, Kf = function (A, e) { + Ue.call(this), + this.type = "MeshEx", + this.matrixAutoUpdate = !1, + this.active = !1, + this.guid = "", + this.key = "", + this.typeEx = "", + this.geometry = A || Tu.EmptyGeometry, + this.material = e || Kd.DefaultMaterial, + this.visible = !1, + this.pickable = !0 + }; + (Kf.prototype = Object.create(Ue.prototype)).constructor = Kf, + Kf.prototype.init = function (A) { + A && A.parent && A.parent.add(this) + }, + Kf.prototype.destroy = function () { + this.parent && this.parent.remove(this), + this.userData && (this.userData = null), + this.geometry = null, + this.material = null + }, + Kf.prototype.isVisible = function () { + return this.visible && this.active + }, + Kf.prototype.spawn = function (A) { + void 0 !== A.guid && (this.guid = A.guid), + void 0 !== A.key && (this.key = A.key), + void 0 !== A.name && (this.name = A.name), + void 0 !== A.typeEx && (this.typeEx = A.typeEx), + A.geometry && (this.geometry = A.geometry), + A.material && (this.material = A.material), + A.matrix ? (this.matrix.copy(A.matrix), + this.updateMatrixWorld(!0)) : (this.matrix.identity(), + this.updateMatrixWorld(!0)), + this.modelKey = A.modelKey ? A.modelKey : "", + A.userData ? this.userData = A.userData : this.userData && (this.userData = null), + void 0 !== A.visible && (this.visible = A.visible), + void 0 !== A.isMesh && (this.isMesh = A.isMesh), + void 0 !== A.isLine && (this.isLine = A.isLine), + void 0 !== A.isLineSegments && (this.isLineSegments = A.isLineSegments), + this.pickable = void 0 === A.pickable || A.pickable, + this.renderOrder = A.renderOrder || 0, + this.active = !0, + this.visible = !0, + this.frustumCulled = !1, + this.matChange = !1 + }, + Kf.prototype.clear = function () { + this.geometry = Tu.EmptyGeometry, + this.material = Kd.DefaultMaterial, + this.active = !1, + this.visible = !0, + this.guid = "", + this.key = "", + this.typeEx = "", + this.frustumCulled = !0, + this.material.visible = !1 + }, + Kf.prototype.intersectBoxWithDistance = (Ff = new aA, + function (A, e) { + var t = this.geometry, + i = this.material, + o = this.matrixWorld; + return e && (o = new M).multiplyMatrices(this.matrixWorld, e), + void 0 === i ? -1 : (t.boundingBox || t.computeBoundingBox(), + Ff.copy(t.boundingBox), + Ff.applyMatrix4(o), + A.ray.intersectBoxWithDistance(Ff)) + } + ), + Kf.prototype.intersectBoxWithDistanceByIndices = function (A, e) { + var t = this.matrixWorld, + i = this.computeBoundingBox(e); + return i.applyMatrix4(t), + A.ray.intersectBoxWithDistance(i) + }, + Kf.prototype.intersectBoxWithClipPlane = function (A, e) { + var t = this.matrixWorld, + i = this.computeBoundingBox(e); + return i.applyMatrix4(t), + i.intersectsPlane(A) + }, + Kf.prototype.getIntersectionPoints = function (A, e, t, i) { + var o = new M; + o.getInverse(this.matrixWorld); + var n = A.clone(); + n.constant *= -1, + n = n.applyMatrix4(o); + + function r(A, e) { + var i = e.intersectLine(A); + i && t.push(i.x, i.y, i.z) + } + for (var a, s, l, c = this.geometry.getIndex().array, h = this.geometry.getAttribute("position").array, d = i ? 0 : e.indexStart, p = i ? c.length : e.indexStart + e.indexCount, g = new y, u = new y, f = new y, m = new Hs, C = new Hs, v = new Hs, I = d, E = p; E > I; I += 3) + s = 3 * c[I + 1], + l = 3 * c[I + 2], + g.set(h[a = 3 * c[I]], h[a + 1], h[a + 2]), + u.set(h[s], h[s + 1], h[s + 2]), + f.set(h[l], h[l + 1], h[l + 2]), + i && (g.applyMatrix4(e.matrix), + u.applyMatrix4(e.matrix), + f.applyMatrix4(e.matrix)), + m.set(g, u), + C.set(u, f), + v.set(f, g), + r(m, n), + r(C, n), + r(v, n) + }, + Kf.prototype.raycastByIndices = function () { + var A = new M, + e = new CA, + t = new cA, + i = new y, + o = new y, + n = new y, + r = new s, + a = new s, + l = new s, + c = new y, + h = new y, + d = new y, + p = new M; + + function g(A, e, t, s, g, u, f, m) { + i.fromBufferAttribute(s, u), + o.fromBufferAttribute(s, f), + n.fromBufferAttribute(s, m); + var C = function (A, e, t, i, o, n, r) { + var a = A.material; + if (null === (Array.isArray(a) ? t.intersectTriangle(i, o, n, !1, r) : 1 === a.side ? t.intersectTriangle(n, o, i, !0, r) : t.intersectTriangle(i, o, n, 2 !== a.side, r))) + return null; + d.copy(r), + d.applyMatrix4(p); + var s = e.ray.origin.distanceTo(d); + return e.near > s || s > e.far ? null : { + distance: s, + point: d.clone(), + object: A + } + }(A, e, t, i, o, n, h); + if (C) { + if (g && g.array && g.array.length && (r.fromBufferAttribute(g, u), + a.fromBufferAttribute(g, f), + l.fromBufferAttribute(g, m), + C.uv = function (A, e, t, i, o, n, r) { + return RA.getBarycoord(A, e, t, i, c), + o.multiplyScalar(c.x), + n.multiplyScalar(c.y), + r.multiplyScalar(c.z), + o.add(n).add(r), + o.clone() + }(h, i, o, n, r, a, l)), + s.instanceMatrix) { + var v = i.clone().applyMatrix4(s.instanceMatrix), + I = o.clone().applyMatrix4(s.instanceMatrix), + E = n.clone().applyMatrix4(s.instanceMatrix); + C.face = new GA(u, f, m, RA.getNormal(v, I, E, new y)) + } else + C.face = new GA(u, f, m, RA.getNormal(i, o, n, new y)); + C.faceIndex = u + } + return C + } + return function (i, o, n, r) { + var a = this.geometry, + s = this.material; + if (r) { + a = this.geometry, + s = this.material; + if ((p = new M).multiplyMatrices(this.matrixWorld, r), + void 0 === s) + return; + if (null === a.boundingSphere && a.computeBoundingSphere(), + t.copy(a.boundingSphere), + t.applyMatrix4(p), + !1 === i.ray.intersectsSphere(t)) + return; + if (A.getInverse(p), + e.copy(i.ray).applyMatrix4(A), + null !== a.boundingBox && !1 === e.intersectsBox(a.boundingBox)) + return; + var l = null, + c = null, + h = null, + d = null, + u = a.index; + (I = a.attributes.position).instanceMatrix = r; + var f = a.attributes.uv, + m = null, + C = null; + if (null !== u) + for (m = 0, + C = u.count; C > m; m += 3) + c = u.getX(m), + h = u.getX(m + 1), + d = u.getX(m + 2), + (l = g(this, i, e, I, f, c, h, d)) && (l.faceIndex = Math.floor(m / 3), + o.push(l)); + else + for (m = 0, + C = I.count; C > m; m += 3) + (l = g(this, i, e, I, f, c = m, h = m + 1, d = m + 2)) && (l.index = c, + o.push(l)) + } else { + if (p = this.matrixWorld, + void 0 === s) + return; + if (t.copy(this.computeBoundingSphere(n)), + t.applyMatrix4(p), + !1 === i.ray.intersectsSphere(t)) + return; + A.getInverse(p), + e.copy(i.ray).applyMatrix4(A); + var y = this.computeBoundingBox(n); + if (!1 === e.intersectsBox(y)) + return; + l = null, + c = null, + h = null, + d = null; + var v, I = a.attributes.position, + E = (f = a.attributes.uv, + m = null, + n.indexStart), + B = n.indexStart + n.indexCount, + x = a.getIndex().array; + for (m = E, + v = B; v > m; m += 3) + (l = g(this, i, e, I, f, c = x[m], h = x[m + 1], d = x[m + 2])) && (l.faceIndex = Math.floor(m / 3), + o.push(l)) + } + } + }(), + Kf.prototype.raycastByIndices2 = function () { + var A = new M, + e = new CA, + t = new cA, + i = new y, + o = new y, + n = new y, + r = new s, + a = new s, + l = new s, + c = new y, + h = new y, + d = new y, + p = new M; + + function g(A, e, t, s, g, u, f, m) { + i.fromBufferAttribute(s, u), + o.fromBufferAttribute(s, f), + n.fromBufferAttribute(s, m); + var C = function (A, e, t, i, o, n, r) { + var a = A.material; + if (null === (a instanceof Array ? t.intersectTriangle(i, o, n, !1, r) : 1 === a.side ? t.intersectTriangle(n, o, i, !0, r) : t.intersectTriangle(i, o, n, 2 !== a.side, r))) + return null; + d.copy(r), + d.applyMatrix4(p); + var s = e.ray.origin.distanceTo(d); + return e.near > s || s > e.far ? null : { + distance: s, + point: d.clone(), + object: A + } + }(A, e, t, i, o, n, h); + if (C) { + if (g && g.array && g.array.length && (r.fromBufferAttribute(g, u), + a.fromBufferAttribute(g, f), + l.fromBufferAttribute(g, m), + C.uv = function (A, e, t, i, o, n, r) { + return RA.barycoordFromPoint(A, e, t, i, c), + o.multiplyScalar(c.x), + n.multiplyScalar(c.y), + r.multiplyScalar(c.z), + o.add(n).add(r), + o.clone() + }(h, i, o, n, r, a, l)), + s.instanceMatrix) { + var y = i.clone().applyMatrix4(s.instanceMatrix), + v = o.clone().applyMatrix4(s.instanceMatrix), + I = n.clone().applyMatrix4(s.instanceMatrix); + C.face = new GA(u, f, m, RA.normal(y, v, I)) + } else + C.face = new GA(u, f, m, RA.normal(i, o, n)); + C.faceIndex = u + } + return C + } + return function (i, o, n, r) { + var a = this.geometry, + s = this.material; + if (r = !!r, + n.isInstanced) { + if (void 0 === n.matrix) + return; + if (p.multiplyMatrices(this.matrixWorld, n.matrix), + void 0 === s) + return; + if (r && (null === a.boundingSphere && a.computeBoundingSphere(), + t.copy(a.boundingSphere), + t.applyMatrix4(p), + !1 === i.ray.intersectsSphere(t))) + return; + if (A.getInverse(p), + e.copy(i.ray).applyMatrix4(A), + r && null !== a.boundingBox && !1 === e.intersectsBox(a.boundingBox)) + return; + var l = a.index; + (I = a.attributes.position).instanceMatrix = n.matrix; + var c, h = a.attributes.uv; + if (null !== l) + for (y = 0, + c = l.count; c > y; y += 3) + f = l.getX(y), + m = l.getX(y + 1), + C = l.getX(y + 2), + (u = g(this, i, e, I, h, f, m, C)) && (u.faceIndex = Math.floor(y / 3), + o.push(u)); + else + for (y = 0, + c = I.count; c > y; y += 3) + (u = g(this, i, e, I, h, f = y, m = y + 1, C = y + 2)) && (u.index = f, + o.push(u)) + } else if (n.matrix ? p.multiplyMatrices(this.matrixWorld, n.matrix) : p = this.matrixWorld, + void 0 !== s && (!r || (t.copy(this.computeBoundingSphere(n)), + t.applyMatrix4(p), + !1 !== i.ray.intersectsSphere(t)))) { + if (A.getInverse(p), + e.copy(i.ray).applyMatrix4(A), + r) { + var d = this.computeBoundingBox(n); + if (!1 === e.intersectsBox(d)) + return + } + var u, f, m, C, y, v, I = a.attributes.position, + E = (h = a.attributes.uv, + n.indexStart), + B = n.indexStart + n.indexCount, + x = a.getIndex().array; + for (y = E, + v = B; v > y; y += 3) + (u = g(this, i, e, I, h, f = x[y], m = x[y + 1], C = x[y + 2])) && (u.faceIndex = Math.floor(y / 3), + o.push(u)) + } + } + }(), + Kf.prototype.computeBoundingBox = function (A) { + var e = new aA, + t = this.geometry.attributes.position.array, + i = null, + o = null; + return A ? (i = A.positionStart, + o = A.positionStart + A.positionCount) : (i = 0, + o = t.length), + this.setBoundingBoxFromArray(e, t, i, o), + e + }, + Kf.prototype.computeBoundingSphere = function (A) { + var e = new aA, + t = new y, + i = this.geometry.attributes.position.array, + o = null, + n = null; + A ? (o = A.positionStart, + n = A.positionStart + A.positionCount) : (o = 0, + n = i.length); + var r = new cA, + a = r.center; + this.setBoundingBoxFromArray(e, i, o, n), + e.getCenter(a); + for (var s = 0, l = o, c = n; c > l; l += 3) + t.x = i[l], + t.y = i[l + 1], + t.z = i[l + 2], + s = Math.max(s, a.distanceToSquared(t)); + return r.radius = Math.sqrt(s), + r + }, + Kf.prototype.setBoundingBoxFromArray = function (A, e, t, i) { + for (var o = Number(1 / 0), n = Number(1 / 0), r = Number(1 / 0), a = -1 / 0, s = -1 / 0, l = -1 / 0, c = t, h = i; h > c; c += 3) { + var d = e[c], + p = e[c + 1], + g = e[c + 2]; + o > d && (o = d), + n > p && (n = p), + r > g && (r = g), + d > a && (a = d), + p > s && (s = p), + g > l && (l = g) + } + A.min.set(o, n, r), + A.max.set(a, s, l) + }, + Kf.prototype.raycast = function (A, e) { + var t = this.geometry, + i = this.material, + o = this.matrixWorld; + if (void 0 !== i && (null === t.boundingSphere && t.computeBoundingSphere(), + pf.copy(t.boundingSphere), + pf.applyMatrix4(o), + !1 !== A.ray.intersectsSphere(pf) && (hf.getInverse(o), + df.copy(A.ray).applyMatrix4(hf), + null === t.boundingBox || !1 !== df.intersectsBox(t.boundingBox)))) { + var n = null; + if (t.isBufferGeometry) { + var r = null, + a = null, + l = null, + c = t.index, + h = t.attributes.position, + d = t.morphAttributes.position, + p = t.morphTargetsRelative, + g = t.attributes.uv, + u = t.attributes.uv2, + f = t.groups, + m = t.drawRange, + C = null, + y = null, + v = null, + I = null, + E = null, + B = null; + if (null !== c) + if (Array.isArray(i)) { + for (C = 0, + v = f.length; v > C; C += 1) + if (B = i[(E = f[C]).materialIndex]) + for (y = Math.max(E.start, m.start), + I = Math.min(E.start + E.count, m.start + m.count); I > y; y += 3) + r = c.getX(y), + a = c.getX(y + 1), + l = c.getX(y + 2), + (n = Uf(this, B, A, df, h, d, p, g, u, r, a, l)) && (n.faceIndex = Math.floor(y / 3), + n.face.materialIndex = E.materialIndex, + e.push(n)) + } else + for (C = Math.max(0, m.start), + v = Math.min(c.count, m.start + m.count); v > C; C += 3) + r = c.getX(C), + a = c.getX(C + 1), + l = c.getX(C + 2), + (n = Uf(this, i, A, df, h, d, p, g, u, r, a, l)) && (n.faceIndex = Math.floor(C / 3), + e.push(n)); + else if (void 0 !== h) + if (Array.isArray(i)) { + for (C = 0, + v = f.length; v > C; C += 1) + if (B = i[(E = f[C]).materialIndex]) + for (y = Math.max(E.start, m.start), + I = Math.min(E.start + E.count, m.start + m.count); I > y; y += 3) + (n = Uf(this, B, A, df, h, d, p, g, u, r = y, a = y + 1, l = y + 2)) && (n.faceIndex = Math.floor(y / 3), + n.face.materialIndex = E.materialIndex, + e.push(n)) + } else + for (C = Math.max(0, m.start), + v = Math.min(h.count, m.start + m.count); v > C; C += 3) + (n = Uf(this, i, A, df, h, d, p, g, u, r = C, a = C + 1, l = C + 2)) && (n.faceIndex = Math.floor(C / 3), + e.push(n)) + } else if (t.isGeometry) { + var x = null, + S = null, + w = null, + M = Array.isArray(i), + b = t.vertices, + U = t.faces, + F = null, + K = t.faceVertexUvs[0]; + K.length > 0 && (F = K); + for (var Q = 0, R = U.length; R > Q; Q += 1) { + var T = U[Q], + k = M ? i[T.materialIndex] : i; + if (void 0 !== k && (n = bf(this, k, A, df, x = b[T.a], S = b[T.b], w = b[T.c], wf))) { + if (F && F[Q]) { + var D = F[Q]; + Bf.copy(D[0]), + xf.copy(D[1]), + Sf.copy(D[2]), + n.uv = RA.getUV(wf, x, S, w, Bf, xf, Sf, new s) + } + n.face = T, + n.faceIndex = Q, + e.push(n) + } + } + } + } + }; + var Qf = function (A, e) { + this.model = e, + this.loader = A, + this.mapNodeInfoByCategory = {}, + this.mapNodeInfoByUserId = {}, + this.mapNodeInfoByComponentId = {}, + this.referencedMeshCache = {}, + this.nodeInfosOnGeometryId = null, + this.componentCount = 0, + this.meshCache = {}, + this.allBones = {} + }; + Qf.EnumNodeItemType = { + SYMBOL: 0, + MESH: 1, + TUBE: 2, + PIPE: 3, + BOX: 4, + BOX_M: 5, + PIPE_M: 6, + MESH_REF: 7, + LINE: 8 + }, + Qf.NodeInfoCategory = { + INSTANCED: 0, + STANDARD: 1 + }, + Qf.EnumDataType = { + NONE: 0, + MERGE_DATA: 1, + LAYER: 2, + LAYER_SCENE: 3, + ANIMATION: 4 + }, + Qf.EnumKeyframeTrackType = { + position: "position", + scale: "scale", + quaternion: "quaternion", + weights: "weights" + }, + Qf.prototype.destroy = function () { + this.mapNodeInfoByCategory = null, + this.mapNodeInfoByUserId = null, + this.mapNodeInfoByComponentId = null, + this.referencedMeshCache = null, + this.nodeInfosOnGeometryId = null + }, + Qf.prototype.clearReferencedMeshCache = function () { + if (!vc.DEBUG) { + for (var A in this.referencedMeshCache) + delete this.referencedMeshCache[A]; + this.referencedMeshCache = null + } + }, + Qf.prototype.cacheReferencedMeshBufferData = function (A, e) { + this.referencedMeshCache.geometries || (this.referencedMeshCache.geometries = {}), + this.referencedMeshCache.geometries[A] = e + }, + Qf.prototype.cacheReferencedMeshBoneBufferData = function (A, e) { + this.referencedMeshCache.bones || (this.referencedMeshCache.bones = {}), + this.referencedMeshCache.bones[A] = e + }, + Qf.prototype.cacheReferencedMeshClipsData = function (A) { + this.referencedMeshCache.clips = A + }, + Qf.prototype.cacheReferencedMeshNodesData = function (A) { + this.referencedMeshCache.nodes = A + }, + Qf.prototype.cacheReferencedMeshComponentData = function (A, e) { + this.referencedMeshCache.components || (this.referencedMeshCache.components = {}), + this.referencedMeshCache.components[A] = e + }, + Qf.prototype.cacheReferencedMeshMaterialData = function (A, e) { + this.referencedMeshCache.materials || (this.referencedMeshCache.materials = {}), + this.referencedMeshCache.materials[A] = e + }, + Qf.prototype.getReferencedMeshBufferData = function () { + return this.referencedMeshCache.geometries + }, + Qf.prototype.getReferencedMeshBufferById = function (A) { + return this.referencedMeshCache.geometries ? this.referencedMeshCache.geometries[A] : null + }, + Qf.prototype.cacheReferencedMeshMpkIds = function (A, e) { + this.referencedMeshCache.mpkIds || (this.referencedMeshCache.mpkIds = {}), + this.referencedMeshCache.mpkIds[A] || (this.referencedMeshCache.mpkIds[A] = []), + this.referencedMeshCache.mpkIds[A].push(e) + }, + Qf.prototype.clearReferencedMeshCacheByMpkIdxs = function (A, e) { + if (this.referencedMeshCache.mpkIds) + for (var t = 0, i = A.length; i > t; t += 1) { + var o = A[t], + n = this.referencedMeshCache.mpkIds[o]; + if (n) { + for (var r = 0, a = n.length; a > r; r += 1) + e && e(n[r]), + delete this.referencedMeshCache[n[r]]; + delete this.referencedMeshCache.mpkIds[o] + } + } + }, + Qf.prototype.parseItemData = function (A, e) { + (op(A.dataVersion, "1.0") || void 0 === A.dataVersion) && (Bh.time("升级几何结构"), + this._updateV1ToV2(A), + A.dataVersion = "2.0", + Bh.timeEnd("升级几何结构")), + this._readMaterialBuffer222(A), + A.hasAnimation && vc.EnableAnimation ? (this._parseClips(), + this._parseBones()) : (this._parseGeo(), + this._parseInstanced()); + var t = this.loader.getSceneReaderArray(); + if (!t) + return Bh.log("Empty scene"), + !1; + var i = this.referencedMeshCache; + if (Bh.time("_readItemData"), + !i.geometries || 0 >= Object.keys(i.geometries).length) + return !0; + if (e) + for (var o = 0, n = e.length; n > o; o += 1) + i.components[e[o]] && this._readItemData(t, e[o], e[o], void 0, 0); + else + for (var r in i.components) + this._readItemData(t, r, r, void 0, 0); + return A.hasAnimation && vc.EnableAnimation && this._parseNodes(), + Bh.timeEnd("_readItemData"), + t = null, + !0 + }, + Qf.prototype._readItemData = function (A, e, t) { + var i = this.referencedMeshCache.components[e]; + void 0 !== i && -1 !== i.geoId && (this.model.merged ? this._readMeshInfo(A, t, i, null) : this._readMeshInfo2(A, t, i, null)) + }, + Qf.prototype._readSymbolInfo = function (A, e, t) { + var i = this.loader.getSymbolReader(); + if (i) { + var o = i.header.symbolCount, + n = t.toData, + r = A.getMatrixInfo(t.matrixId).matrix.clone(), + a = { + matrix: r, + ItemId: t.ItemId, + originalId: t.originalId, + userDataId: t.userDataId, + materialId: t.materialId + }; + if (n >= 0 && o > n) + for (var s = i.getSymbolInfo(n), l = s.itemIndex; s.itemCount > l; l += 1) { + var c = i.getItemInfo(l); + c.type !== Qf.EnumNodeItemType.SYMBOL && this._readMeshInfo(i, e, c, a) + } + r = null, + a = null, + i = null + } + }, + Qf.prototype._readMeshInfo = function (A, e, t, i) { + var o = this.loader, + n = this.model.materialManager.materials, + r = null, + a = null, + s = null; + if (null === i ? (r = t.userDataId, + a = t.originalId, + s = t.materialId || t.matId) : (r = i.userDataId, + a = i.originalId, + s = i.materialId > -1 ? i.materialId : t.materialId), + t.materials || (t.materials = []), + t.materials.length > 0) + for (var l = 0; t.materials.length > l; l += 1) { + var c = null; + if (c = this._getMeshNodeAttr(A, t, t.materials.length > 1, l), + !n[s = t.materials[l]]) { + var h = _u[t.type] ? _u[t.type].color : void 0; + h || (Bh.log("Material not found for type: ", t.type), + h = _u.DEFAULT.color), + h || (Bh.log("Default material not found for type: ", t.type), + h = [1, 1, 1, 1]); + var d = new LA(h[0], h[1], h[2]), + p = s || d.getHexString() + "_" + h[3], + g = n[p]; + g || (Bh.warn("缺少材质 " + s), + g = new xr({ + color: d + }), + 1 > h[3] && (g.transparent = !0, + g.opacity = h[3]), + g.side = 2, + n[p] = g) + } + if (n[s].aoMap) { + var u = this.getReferencedMeshBufferById(c.geometryId); + u && (u.uv2 = u.uv) + } + if (!c) + return; + var f = o.getUserDataReader(), + m = f ? f.getUserData(r) : null, + C = t.key; + c.type = t.type, + c.userId = C, + c.name = t.name, + c.userDataId = r, + c.originalId = a, + c.materialId = s, + c.originMId = s, + c.userData = m, + c.categoryId = 0, + c.componentId = C, + c.familyName = t.familyName, + c.familySymbol = t.familySymbol, + c.instanceOrNot = !(!vc.Instance || !this.instancedComponent[C]), + c.state = Lc.Visible, + c.material = null, + this._classifyNodeInfo(c), + c = null + } + else { + var y = null, + v = _u[t.type] ? _u[t.type].color : void 0; + v || (Bh.log("Material not found for type: ", t.type), + v = _u.DEFAULT.color), + v || (Bh.log("Default material not found for type: ", t.type), + v = [1, 1, 1, 1]); + var I = new LA(v[0], v[1], v[2]), + E = I.getHexString() + "_" + v[3], + B = n[E]; + if (B || (B = new xr({ + color: I + }), + 1 > v[3] && (B.transparent = !0, + B.opacity = v[3]), + B.side = 2, + n[E] = B), + t.materials.push(E), + y = this._getMeshNodeAttr(A, t, !1, 0), + s = t.materials[0], + !y) + return; + var x = t.key; + y.type = t.type, + y.userId = x, + y.name = t.name, + y.originalId = a, + y.materialId = s, + y.originMId = s, + y.userData = {}, + y.categoryId = 0, + y.componentId = x, + y.familyName = t.familyName, + y.familySymbol = t.familySymbol, + y.instanceOrNot = !(!vc.Instance || !this.instancedComponent[x]), + y.state = Lc.Visible, + y.material = null, + this._classifyNodeInfo(y), + y = null + } + }, + Qf.prototype._readMeshInfo2 = function (A, e, t, i) { + var o = this.loader, + n = null, + r = null, + a = null; + null === i ? (n = t.userDataId, + r = t.originalId, + a = t.materials || t.matId) : (n = i.userDataId, + r = i.originalId, + a = i.materialId > -1 ? i.materialId : t.materialId); + var s = null; + if (s = this._getMeshNodeAttr(A, t, !1)) { + var l = o.getUserDataReader(), + c = l ? l.getUserData(n) : null, + h = t.key; + s.type = t.type, + s.userId = h, + s.name = t.name, + s.originalId = r, + s.materialId = a, + s.originMId = a, + s.userData = c, + s.categoryId = 0, + s.componentId = h, + s.familyName = t.familyName, + s.familySymbol = t.familySymbol, + s.state = Lc.Visible, + s.material = null, + this._classifyNodeInfo(s), + s = null + } + }, + Qf.prototype._getMeshNodeAttrOfPipe = function (A, e, t) { + var i = A.getMatrixInfo(e.matrixId).matrix.clone(), + o = uh.TemporaryMatrix; + o.copy(i); + var n = A.getGeomPipeInfo(e.toData), + r = n.startPt, + a = n.endPt, + s = new y; + s.subVectors(a, r); + var l = s.length(); + s.normalize(); + var c = n.radius; + c > 1 || (c = 100); + var h = new y(0, 1, 0), + d = new y(c, l, c), + p = (new f).setFromUnitVectors(h, s), + g = r.clone().addScaledVector(s, .5 * l), + u = (new M).compose(g, p, d); + return i.multiply(u), + t && (i.multiplyMatrices(t.matrix, i), + o.multiplyMatrices(t.matrix, o)), + n = null, { + nodeId: (t ? t.ItemId + "_" + e.ItemId : e.ItemId) + "_pipe", + geometryId: "pipe", + boundingBox: e.boundingBox.clone().applyMatrix4(o), + matrix: i, + finalState: !0 + } + }, + Qf.prototype._getMeshNodeAttrOfTube = function (A, e, t) { + var i = this._getMeshNodeAttrOfPipe(A, e, t); + return i.nodeId += "_tube", + i.geometryId = "tube", + i + }, + Qf.prototype._getMeshNodeAttrOfBox = function (A, e, t) { + var i = A.getMatrixInfo(e.matrixId).matrix.clone(), + o = uh.TemporaryMatrix; + o.copy(i); + var n = e.boundingBox, + r = n.getSize(), + a = n.getCenter(), + s = (new M).scale(new y(r.x, r.y, r.z)); + return s.setPosition(a), + i.multiply(s), + t && (i.multiplyMatrices(t.matrix, i), + o.multiplyMatrices(t.matrix, o)), { + nodeId: (t ? t.ItemId + "_" + e.ItemId : e.ItemId) + "_box", + geometryId: "box", + boundingBox: e.boundingBox.clone().applyMatrix4(o), + matrix: i, + finalState: !0 + } + }, + Qf.prototype._getMeshNodeAttrOfBoxM = function (A, e, t) { + var i = A.getMatrixInfo(e.matrixId).matrix.clone(); + return t && i.multiplyMatrices(t.matrix, i), { + nodeId: (t ? t.ItemId + "_" + e.ItemId : e.ItemId) + "_boxM", + geometryId: "boxM", + boundingBox: e.boundingBox.clone().applyMatrix4(i), + matrix: i, + uvArrayBuffer: A.getGeomBoxUvInfo(e.toData), + finalState: !0 + } + }, + Qf.prototype._getMeshNodeAttrOfPipeM = function (A, e, t) { + var i = A.getMatrixInfo(e.matrixId).matrix.clone(); + return t && i.multiplyMatrices(t.matrix, i), { + nodeId: (t ? t.ItemId + "_" + e.ItemId : e.ItemId) + "_pipeM", + geometryId: "pipeM", + boundingBox: e.boundingBox.clone().applyMatrix4(i), + matrix: i, + uvArrayBuffer: A.getGeomPipeUvInfo(e.toData), + finalState: !0 + } + }, + Qf.prototype._getMeshNodeAttrOfMeshRef = function (A, e, t) { + return { + nodeId: "refMesh|" + (t ? t.ItemId + "_" + e.ItemId : e.ItemId), + geometryId: e.toData, + boundingBox: e.boundingBox.clone(), + matrix: A.getMatrixInfo(e.matrixId).matrix.clone(), + matrixParent: t ? t.matrix : null, + finalState: !1, + transformed: !1, + shared: !0 + } + }, + Qf.prototype._getMeshNodeAttr = function (A, e, t, i) { + var o = new M; + o.fromArray(e.matrix || [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]); + var n = t ? e.key + "_" + i : e.key, + r = t ? e.geoId + "_" + i : e.geoId; + if (-1 !== r) { + var a = new aA, + s = this.getReferencedMeshBufferById(e.geoId); + return s && s.position ? (a = Tu.getBoundingBoxByBuffer(s.position)).applyMatrix4(o) : Bh.warn("no position "), { + nodeId: n, + guid: e.guid, + geometryId: r, + originalGeometryId: e.geoId, + matrix: o, + boundingBox: a, + model: this.model + } + } + }, + Qf.prototype._getLineNodeAttr = function (A, e, t) { + var i = null, + o = null; + return -1 !== e.matrixId ? (o = !1, + i = A.getMatrixInfo(e.matrixId).matrix.clone()) : (o = !0, + i = new M), { + nodeId: t ? "line-" + t.ItemId + "-" + e.ItemId : "line-" + e.ItemId, + geometryId: "line-" + e.toData, + boundingBox: e.boundingBox.clone(), + matrix: i, + matrixParent: t ? t.matrix : null, + finalState: !1, + transformed: o + } + }, + Qf.prototype._classifyNodeInfo = function (A) { + this._cacheNodeInfoByComponentId(A), + this._cacheNodeInfoByUserId(A), + this._cacheNodeInfoByCategory(A) + }, + Qf.prototype._cacheNodeInfoByComponentId = function (A) { + void 0 === this.mapNodeInfoByComponentId[A.componentId] && (this.mapNodeInfoByComponentId[A.componentId] = []), + this.mapNodeInfoByComponentId[A.componentId].push(A) + }, + Qf.prototype._clearNodeInfoCacheWithComponentId = function (A) { + if (A) + for (var e = 0, t = A.length; t > e; e += 1) + delete this.mapNodeInfoByComponentId[A[e]]; + else + this.mapNodeInfoByComponentId = {} + }, + Qf.prototype._clearNodeInfoCacheWithUserId = function (A) { + if (A) + for (var e = 0, t = A.length; t > e; e += 1) + delete this.mapNodeInfoByUserId[A[e]]; + else + this.mapNodeInfoByUserId = {} + }, + Qf.prototype._clearNodeInfoCacheWithCategory = function (A) { + if (A) + for (var e = this.mapNodeInfoByCategory[Qf.NodeInfoCategory.INSTANCED], t = this.mapNodeInfoByCategory[Qf.NodeInfoCategory.STANDARD], i = 0, o = A.length; o > i; i += 1) + e && delete e[A[i]], + t && delete t[A[i]]; + else + this.mapNodeInfoByCategory = {} + }, + Qf.prototype.clearNodeInfoCache = function () { + this._clearNodeInfoCacheWithComponentId(), + this._clearNodeInfoCacheWithUserId(), + this._clearNodeInfoCacheWithCategory() + }, + Qf.prototype.clearNodeInfoCacheByComponentsKey = function (A) { + this._clearNodeInfoCacheWithComponentId(A), + this._clearNodeInfoCacheWithUserId(A), + this._clearNodeInfoCacheWithCategory(A) + }, + Qf.prototype.getNodeInfosWithComponentId = function () { + return this.mapNodeInfoByComponentId + }, + Qf.prototype.getNodeInfosByComponentId = function (A) { + return this.mapNodeInfoByComponentId[A] + }, + Qf.prototype._cacheNodeInfoByUserId = function (A) { + void 0 === this.mapNodeInfoByUserId[A.userId] && (this.mapNodeInfoByUserId[A.userId] = []), + this.mapNodeInfoByUserId[A.userId].push(A) + }, + Qf.prototype.getNodeInfosByUserId = function (A) { + return this.mapNodeInfoByUserId[A] + }, + Qf.prototype.getNodeInfosWithUserId = function () { + return this.mapNodeInfoByUserId + }, + Qf.prototype._cacheNodeInfoByCategory = function (A) { + var e = null; + void 0 === this.mapNodeInfoByCategory[e = A.instanceOrNot ? Qf.NodeInfoCategory.INSTANCED : Qf.NodeInfoCategory.STANDARD] && (this.mapNodeInfoByCategory[e] = {}), + void 0 === this.mapNodeInfoByCategory[e][A.userId] && (this.mapNodeInfoByCategory[e][A.userId] = []), + this.mapNodeInfoByCategory[e][A.userId].push(A) + }, + Qf.prototype.getNodeInfosByCategory = function (A) { + return this.mapNodeInfoByCategory[A] + }, + Qf.prototype.getStandardNodeInfos = function () { + return this.getNodeInfosByCategory(Qf.NodeInfoCategory.STANDARD) + }, + Qf.prototype.getInstancedNodeInfos = function () { + return this.getNodeInfosByCategory(Qf.NodeInfoCategory.INSTANCED) + }, + Qf.prototype.getStandardUserIds = function () { + return this.getStandardNodeInfos() ? Object.keys(this.getStandardNodeInfos()) : null + }, + Qf.prototype.getInstancedUserIds = function () { + return this.getInstancedNodeInfos() ? Object.keys(this.getInstancedNodeInfos()) : null + }, + Qf.prototype.traverseNodeInfos = function (A) { + if (A) + for (var e in this.mapNodeInfoByComponentId) + for (var t = this.mapNodeInfoByComponentId[e], i = 0, o = t.length; o > i; i += 1) + A(e, t[i]) + }, + Qf.prototype.getUserIdsByCategory = function (A, e) { + var t = [], + i = null; + if (i = e === Qf.NodeInfoCategory.INSTANCED ? this.getInstancedNodeInfos() : this.getStandardNodeInfos()) + for (var o = 0, n = A.length; n > o; o += 1) + i[A[o]] && t.push(A[o]); + return t + }, + Qf.prototype.getInstancedUserIdsByCategory = function (A) { + return this.getUserIdsByCategory(A, Qf.NodeInfoCategory.INSTANCED) + }, + Qf.prototype.getStandardUserIdsByCategory = function (A) { + return this.getUserIdsByCategory(A, Qf.NodeInfoCategory.STANDARD) + }, + Qf.prototype.getNodeInfosOnBMpkGeometryId = function () { + return this.nodeInfosOnGeometryId || this.cacheNodeInfosOnGeometryId(), + this.nodeInfosOnGeometryId + }, + Qf.prototype.cacheNodeInfosOnGeometryId = function () { + var A = this.getStandardNodeInfos(); + for (var e in this.nodeInfosOnGeometryId = {}, + A) + for (var t = A[e], i = 0, o = t.length; o > i; i += 1) { + var n = this.loader.convertToBMpkGeometryId(t[i].geometryId); + void 0 !== n && (t[i].geometryId = n), + this.nodeInfosOnGeometryId[t[i].geometryId] || (this.nodeInfosOnGeometryId[t[i].geometryId] = []), + this.nodeInfosOnGeometryId[t[i].geometryId].push(t[i]) + } + }, + Qf.prototype.updateNodeInfosByIds = function (A) {}, + Qf.prototype._isRegularShape = function (A) { + var e = A.type === Qf.EnumNodeItemType.TUBE || A.type === Qf.EnumNodeItemType.PIPE || A.type === Qf.EnumNodeItemType.BOX || A.type === Qf.EnumNodeItemType.BOX_M || A.type === Qf.EnumNodeItemType.PIPE_M; + return vc.SharedMeshInstanceEnable && (e = e || A.type === Qf.EnumNodeItemType.MESH_REF), + e + }, + Qf.prototype.getOctreeRoots = function (A) { + var e = this.loader, + t = e.getOctreeRootNodeOuter(); + t && A.push(t); + var i = e.getOctreeRootNodeInner(); + i && A.push(i) + }, + Qf.prototype.getComponentCount = function () { + return this.componentCount + }, + Qf.prototype._parseInstanced = function () { + this.instancedComponent = {}; + var A = {}, + e = {}, + t = this.referencedMeshCache; + for (var i in t.components) + if (t.components.hasOwnProperty(i)) { + var o = t.components[i], + n = o.geoId; + if (-1 === n) { + Bh.debug("实体没有几何"); + continue + } + if (void 0 === A[n] && (A[n] = [], + e[n] = {}), + A[n].push({ + componentId: i + }), + !o.materials) { + o.materials = []; + continue + } + for (var r = 0; o.materials.length > r; r += 1) { + var a = o.materials[r]; + e[n][a] || (e[n][a] = []), + e[n][a].push({ + componentId: i, + matrix: o.matrix + }) + } + } + for (var s in A) + if (A.hasOwnProperty(s)) + if (1 < A[s].length) + for (r = 0; A[s].length > r; r += 1) + this.instancedComponent[A[s][r].componentId] = !0; + else + delete A[s], + delete e[s] + }, + Qf.prototype._parseBones = function () { + var A = this.referencedMeshCache; + for (var e in A._offsetMatrix || (A._offsetMatrix = {}), + A.geometries) { + var t = A.geometries[e]; + t.position.length !== t.normal.length && (t.normal = t.normal.length === t.index.length ? this._computeVertexNormalsFromFaceNormals(t.normal, t.index, t.position.length) : this._computeVertexNormalsFromIndex(t.index, t.position)); + var i = A.bones[e]; + if (i) { + t.skinIndex = i.skinIndex, + t.skinWeight = i.skinWeight; + var o = i.name; + i.offsetMatrix.length / 16 !== o.length && Bh.debug("bones的name数量与Matrix数量不符!"); + for (var n = 0; o.length > n; n += 1) + A._offsetMatrix[o[n]] = (new M).fromArray(i.offsetMatrix, 16 * n) + } + } + }, + Qf.prototype._parseClips = function () { + for (var A = this.referencedMeshCache.clips, e = [], t = 0, i = A.length; i > t; t += 1) { + for (var o = [], n = A[t], r = 0, a = n.tracks.length; a > r; r += 1) { + var s = n.tracks[r], + l = null; + switch (s.type) { + case Qf.EnumKeyframeTrackType.weights: + l = Dr; + break; + case Qf.EnumKeyframeTrackType.quaternion: + l = Nr; + break; + case Qf.EnumKeyframeTrackType.position: + case Qf.EnumKeyframeTrackType.scale: + default: + l = Vr + } + if (0 === n.ticksPerSec) { + n.ticksPerSec = 1e3; + for (var c = 0; s.times.length > c; c += 1) + s.times[c] /= n.ticksPerSec + } + var h = new l(Fs.sanitizeNodeName(s.name) + "." + s.type, s.times, s.values, 2301); + o.push(h) + } + var d = new Gr(void 0 !== n.name ? n.name : "animation_" + t, n.duration / n.ticksPerSec, o); + e.push(d) + } + this.model.animations = e + }, + Qf.prototype._parseNodes = function () { + var A = this.referencedMeshCache; + A.allBones = [], + A.offsetMatrix = []; + var e = function A(e, t) { + var i = null; + "node" === e.type ? i = new H : "bone" === e.type && (i = new Uo, + t.allBones[e.name] = i), + i.name = Fs.sanitizeNodeName(e.name), + i.matrix.fromArray(e.transformation || [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]), + i.matrix.decompose(i.position, i.quaternion, i.scale); + for (var o = 0; e.children.length > o; o += 1) { + var n = A(e.children[o], t); + n && i.add(n) + } + for (var r = 0; e.meshes.length > r; r += 1) { + var a = e.meshes[r]; + t.model._getHandler().defaultManager.meshManager._readBufferInfo(t.model, [t.model.modelKey + "_" + e.meshes[r]]); + var s = t.model._getHandler().defaultManager.meshManager._makeSkinMesh(t.model, [t.model.modelKey + "_" + e.meshes[r]], (function (A) {})); + t.meshCache[a] = s, + s.name = e.name, + i.add(s) + } + return i + }(A.nodes, this); + for (var t in A.geometries) { + var i = this.meshCache[t]; + if (i && i.isSkinnedMesh) { + for (var o = [], n = [], r = 0; A.bones[t].name.length > r; r += 1) { + var a = A.bones[t].name[r], + s = A._offsetMatrix[a], + l = this.allBones[a]; + s && l && (o.push(l), + n.push(s)) + } + var c = new bo(o, n); + i.bind(c, i.matrixWorld) + } + } + this.model.nodes = e, + this.model.manager.getScene().onBeforeRender = function (A, e, t, i) { + e.updateMatrixWorld(!0) + }, + this.model.group.add(e), + (c = new _s(e)).visible = !1, + this.model.skeleton = c, + this.model.group.add(c), + this.model.mixer = new Rs(e), + this.model.actions = []; + for (var h = 0; this.model.animations.length > h; h += 1) { + var d = this.model.mixer.clipAction(this.model.animations[h]); + this.model.actions.push(d) + } + }, + Qf.prototype._parseGeo = function () { + Bh.time("处理几何:按材质拆分构件"); + var A = this.referencedMeshCache; + for (var e in A.geometries) { + var t = A.geometries[e]; + if (t.position.length !== t.normal.length && (t.normal = t.normal.length === t.index.length ? this._computeVertexNormalsFromFaceNormals(t.normal, t.index, t.position.length) : this._computeVertexNormalsFromIndex(t.index, t.position)), + void 0 !== t.materialIndex) { + for (var i = void 0, o = [], n = null, r = 0; t.materialIndex.length > r; r += 1) { + var a = t.materialIndex[r]; + a !== n && (n = a, + void 0 !== i && (i.count = 3 * r - i.start, + o.push(i)), + i = { + start: 3 * r, + materialIndex: n + }) + } + if (void 0 !== i && (i.count = 3 * t.materialIndex.length - i.start, + o.push(i)), + 1 === o.length) { + A.geometries[e + "_" + o[0].materialIndex] = t + } else { + for (var s = {}, l = 0; o.length > l; l += 1) { + var c = o[l]; + void 0 === s[c.materialIndex] && (s[c.materialIndex] = { + index: [], + count: 0 + }), + s[c.materialIndex].index.push({ + start: c.start, + count: c.count + }), + s[c.materialIndex].count += c.count + } + var h = function () { + p = {}, + g = s[d]; + for (var i = 0, o = new Uint32Array(g.count), n = 0; g.index.length > n; n += 1) { + var r = g.index[n], + a = t.index.slice(r.start, r.start + r.count); + o.set(a, i), + i += r.count + } + u = {}, + o.forEach((function (A, e) { + u[A] || (u[A] = []), + u[A].push(e) + })); + var l = Object.keys(u).length; + f = new Float32Array(3 * l), + m = new Float32Array(3 * l), + C = new Float32Array(2 * l), + y = 0, + v = 0; + var c = 0; + for (var h in u) + if (u.hasOwnProperty(h)) { + h = Number(h); + var I = t.position.slice(3 * h, 3 * h + 3), + E = t.normal.slice(3 * h, 3 * h + 3); + if (t.uv.length > 0) { + var B = t.uv.slice(2 * h, 2 * h + 2); + C.set(B, v), + v += 2 + } + f.set(I, y), + m.set(E, y), + y += 3, + u[h].forEach((function (A) { + o[A] = c + })), + c += 1 + } + p.index = o, + p.position = f, + p.normal = m, + t.uv && t.uv.length > 0 && (p.uv = C), + A.geometries[e + "_" + d] = p + }; + for (var d in s) { + var p, g, u, f, m, C, y, v; + h() + } + } + } + } + Bh.timeEnd("处理几何:按材质拆分构件") + }, + Qf.prototype._computeVertexNormalsFromFaceNormals = function (A, e, t) { + for (var i = new Float32Array(t), o = 0, n = 0, r = 0, a = 0, s = 0, l = 0, c = 0; A.length > c; c += 3) + s = A[c + 1], + l = A[c + 2], + n = 3 * e[c + 1], + r = 3 * e[c + 2], + i[o = 3 * e[c]] = a = A[c], + i[o + 1] = s, + i[o + 2] = l, + i[n] = a, + i[n + 1] = s, + i[n + 2] = l, + i[r] = a, + i[r + 1] = s, + i[r + 2] = l; + return i + }, + Qf.prototype._computeVertexNormalsFromIndex = function (A, e) { + var t = new Float32Array(e.length); + if (e) { + var i = 0, + o = 0, + n = 0, + r = new y, + a = new y, + s = new y, + l = new y, + c = new y; + if (A) + for (var h = A, d = 0; h.length > d; d += 3) + o = 3 * h[d + 1], + n = 3 * h[d + 2], + r.fromArray(e, i = 3 * h[d]), + a.fromArray(e, o), + s.fromArray(e, n), + l.subVectors(s, a), + c.subVectors(r, a), + l.cross(c), + t[i] += l.x, + t[i + 1] += l.y, + t[i + 2] += l.z, + t[o] += l.x, + t[o + 1] += l.y, + t[o + 2] += l.z, + t[n] += l.x, + t[n + 1] += l.y, + t[n + 2] += l.z; + else + for (var p = 0, g = e.length; g > p; p += 9) + r.fromArray(e, p), + a.fromArray(e, p + 3), + s.fromArray(e, p + 6), + l.subVectors(s, a), + c.subVectors(r, a), + l.cross(c), + t[p] = l.x, + t[p + 1] = l.y, + t[p + 2] = l.z, + t[p + 3] = l.x, + t[p + 4] = l.y, + t[p + 5] = l.z, + t[p + 6] = l.x, + t[p + 7] = l.y, + t[p + 8] = l.z + } + return t + }, + Qf.prototype._readMaterialBuffer222 = function (A) { + var e = A.materialManager, + t = e.materials, + i = e.textures, + o = this.referencedMeshCache.materials; + for (var n in o) { + var r = o[n]; + if (!r) + return null; + var a = new xr; + if (a.name = r.name || n, + a.key = n, + r.emissive && a.emissive && (1 === r.emissive[0] && 1 === r.emissive[1] && 1 === r.emissive[2] || a.emissive.setRGB(r.emissive[0], r.emissive[1], r.emissive[2])), + r.color ? a.color.setRGB(r.color[0], r.color[1], r.color[2]) : a.color.setRGB(.72, .72, .72), + r.tint && a.color.setRGB(r.tint[0], r.tint[1], r.tint[2]), + r.specular && a.specular && a.specular.setRGB(r.specular[0], r.specular[1], r.specular[2]), + r.map) + if (void 0 !== r.mapOffsetY && 0 !== r.mapOffsetY || void 0 !== r.mapOffsetX && 0 !== r.mapOfsfetX || void 0 !== r.mapScaleX && 1 !== r.mapScaleX || void 0 !== r.mapScaleY && 1 !== r.mapScaleY || void 0 !== r.mapWAngle && 0 !== r.mapWAngle) { + var s = r.mapOffsetX + "_" + r.mapOffsetY + "_" + r.mapScaleX + "_" + r.mapScaleY + "_" + r.mapWAngle + "_" + r.map; + if (i[s]) + a.map = i[s]; + else + (g = new d).wrapS = g.wrapT = 1e3, + g.image = i[r.map].image ? i[r.map].image : null, + g.needsUpdate = !0, + g.image && (g.offset.x = r.mapOffsetX ? r.mapOffsetX : 0, + g.offset.y = r.mapOffsetY ? r.mapOffsetY : 0, + g.repeat.x = r.mapScaleX ? r.mapScaleX : 1, + g.repeat.y = r.mapScaleY ? r.mapScaleY : 1, + g.rotation = r.mapWAngle ? r.mapWAngle : 0, + i[s] = g, + a.map = g) + } else + a.map = i[r.map] ? i[r.map] : null; + if (r.aoMap) + if (void 0 !== r.aoMapOffsetY && 0 !== r.aoMapOffsetY || void 0 !== r.aoMapOffsetX && 0 !== r.aoMapOfsfetX || void 0 !== r.aoMapScaleX && 1 !== r.aoMapScaleX || void 0 !== r.aoMapScaleY && 1 !== r.aoMapScaleY || void 0 !== r.aoMapWAngle && 0 !== r.aoMapWAngle) { + var l = r.aoMapOffsetX + "_" + r.aoMapOffsetY + "_" + r.aoMapScaleX + "_" + r.aoMapScaleY + "_" + r.aoMapWAngle + "_" + r.aoMap; + if (i[l]) + a.aoMap = i[l]; + else + (g = new d).wrapS = g.wrapT = 1e3, + g.image = i[r.aoMap] && i[r.aoMap].image ? i[r.aoMap].image : null, + g.needsUpdate = !0, + g.image && (g.offset.x = r.aoMapOffsetX ? r.aoMapOffsetX : 0, + g.offset.y = r.aoMapOffsetY ? r.aoMapOffsetY : 0, + g.repeat.x = r.aoMapScaleX ? r.aoMapScaleX : 1, + g.repeat.y = r.aoMapScaleY ? r.aoMapScaleY : 1, + g.rotation = r.aoMapWAngle ? r.aoMapWAngle : 0, + i[l] = g, + a.aoMap = g) + } else + a.aoMap = i[r.aoMap] ? i[r.aoMap] : null; + if (void 0 !== r.aoMapIntensity && (a.aoMapIntensity = r.aoMapIntensity), + r.envMap) + if (void 0 !== r.envMapOffsetY && 0 !== r.envMapOffsetY || void 0 !== r.envMapOffsetX && 0 !== r.envMapOfsfetX || void 0 !== r.envMapScaleX && 1 !== r.envMapScaleX || void 0 !== r.envMapScaleY && 1 !== r.envMapScaleY || void 0 !== r.envMapWAngle && 0 !== r.envMapWAngle) { + var c = r.envMapOffsetX + "_" + r.envMapOffsetY + "_" + r.envMapScaleX + "_" + r.envMapScaleY + "_" + r.envMapWAngle + "_" + r.envMap; + if (i[c]) + a.envMap = i[c]; + else + (g = new d).wrapS = g.wrapT = 1e3, + g.image = i[r.envMap].image ? i[r.envMap].image : null, + g.needsUpdate = !0, + g.image && (g.offset.x = r.envMapOffsetX ? r.envMapOffsetX : 0, + g.offset.y = r.envMapOffsetY ? r.envMapOffsetY : 0, + g.repeat.x = r.envMapScaleX ? r.envMapScaleX : 1, + g.repeat.y = r.envMapScaleY ? r.envMapScaleY : 1, + g.rotation = r.envMapWAngle ? r.envMapWAngle : 0, + i[c] = g, + a.envMap = g) + } else + a.envMap = i[r.envMap] ? i[r.envMap] : null; + if (r.lightMap) + if (void 0 !== r.lightMapOffsetY && 0 !== r.lightMapOffsetY || void 0 !== r.lightMapOffsetX && 0 !== r.lightMapOfsfetX || void 0 !== r.lightMapScaleX && 1 !== r.lightMapScaleX || void 0 !== r.lightMapScaleY && 1 !== r.lightMapScaleY || void 0 !== r.lightMapWAngle && 0 !== r.lightMapWAngle) { + var h = r.lightMapOffsetX + "_" + r.lightMapOffsetY + "_" + r.lightMapScaleX + "_" + r.lightMapScaleY + "_" + r.lightMapWAngle + "_" + r.lightMap; + if (i[h]) + a.lightMap = i[h]; + else + (g = new d).wrapS = g.wrapT = 1e3, + g.image = i[r.lightMap].image ? i[r.lightMap].image : null, + g.needsUpdate = !0, + g.image && (g.offset.x = r.lightMapOffsetX ? r.lightMapOffsetX : 0, + g.offset.y = r.lightMapOffsetY ? r.lightMapOffsetY : 0, + g.repeat.x = r.lightMapScaleX ? r.lightMapScaleX : 1, + g.repeat.y = r.lightMapScaleY ? r.lightMapScaleY : 1, + g.rotation = r.lightMapWAngle ? r.lightMapWAngle : 0, + i[h] = g, + a.lightMap = g) + } else + a.lightMap = i[r.lightMap] ? i[r.lightMap] : null; + if (void 0 !== r.lightMapIntensity && (a.lightMapIntensity = r.lightMapIntensity), + r.emissiveMap) + if (void 0 !== r.emissiveMapOffsetY && 0 !== r.emissiveMapOffsetY || void 0 !== r.emissiveMapOffsetX && 0 !== r.emissiveMapOfsfetX || void 0 !== r.emissiveMapScaleX && 1 !== r.emissiveMapScaleX || void 0 !== r.emissiveMapScaleY && 1 !== r.emissiveMapScaleY || void 0 !== r.emissiveMapWAngle && 0 !== r.emissiveMapWAngle) { + var p = r.emissiveMapOffsetX + "_" + r.emissiveMapOffsetY + "_" + r.emissiveMapScaleX + "_" + r.emissiveMapScaleY + "_" + r.emissiveMapWAngle + "_" + r.emissiveMap; + if (i[p]) + a.emissiveMap = i[p]; + else + (g = new d).wrapS = g.wrapT = 1e3, + g.image = i[r.emissiveMap].image ? i[r.emissiveMap].image : null, + g.needsUpdate = !0, + g.image && (g.offset.x = r.emissiveMapOffsetX ? r.emissiveMapOffsetX : 0, + g.offset.y = r.emissiveMapOffsetY ? r.emissiveMapOffsetY : 0, + g.repeat.x = r.emissiveMapScaleX ? r.emissiveMapScaleX : 1, + g.repeat.y = r.emissiveMapScaleY ? r.emissiveMapScaleY : 1, + g.rotation = r.emissiveMapWAngle ? r.emissiveMapWAngle : 0, + i[p] = g, + a.emissiveMap = g) + } else + a.emissiveMap = i[r.emissiveMap] ? i[r.emissiveMap] : null; + if (void 0 !== r.emissiveIntensity && (a.emissiveIntensity = r.emissiveIntensity), + r.specularMap) + if (void 0 !== r.specularMapOffsetY && 0 !== r.specularMapOffsetY || void 0 !== r.specularMapOffsetX && 0 !== r.specularMapOfsfetX || void 0 !== r.specularMapScaleX && 1 !== r.specularMapScaleX || void 0 !== r.specularMapScaleY && 1 !== r.specularMapScaleY || void 0 !== r.specularMapWAngle && 0 !== r.specularMapWAngle) { + var g, u = r.specularMapOffsetX + "_" + r.specularMapOffsetY + "_" + r.specularMapScaleX + "_" + r.specularMapScaleY + "_" + r.specularMapWAngle + "_" + r.specularMap; + if (i[u]) + a.specularMap = i[u]; + else + (g = new d).wrapS = g.wrapT = 1e3, + g.image = i[r.specularMap].image ? i[r.specularMap].image : null, + g.needsUpdate = !0, + g.image && (g.offset.x = r.specularMapOffsetX ? r.specularMapOffsetX : 0, + g.offset.y = r.specularMapOffsetY ? r.specularMapOffsetY : 0, + g.repeat.x = r.specularMapScaleX ? r.specularMapScaleX : 1, + g.repeat.y = r.specularMapScaleY ? r.specularMapScaleY : 1, + g.rotation = r.specularMapWAngle ? r.specularMapWAngle : 0, + i[u] = g, + a.specularMap = g) + } else + a.specularMap = i[r.specularMap] ? i[r.specularMap] : null; + void 0 !== r.shininess && (a.shininess = r.shininess), + void 0 !== r.opacity && (a.opacity = r.opacity, + 1 > r.opacity && (a.transparent = !0), + r.opacity > 0 || (a.opacity = .1)), + a.side = 2, + t[n] = a + } + }, + Qf.prototype._updateV1ToV2 = function (A) { + var e = this.referencedMeshCache.components, + t = this.referencedMeshCache.geometries, + i = this.referencedMeshCache.materials; + for (var o in e) + if (e.hasOwnProperty(o)) { + var n = e[o], + r = n.matId, + a = t[n.geoId]; + if (n.materials) + continue; + if (n.materials = [], + !a) + continue; + var s = i[r]; + if (!s) + continue; + var l = this._updateMaterialV1ToV2(r, s); + if (l) + for (var c in a.materialIndex = l.materialIndex, + n.materials = l.materialId, + l.materials) + l.materials.hasOwnProperty(c) && (this.referencedMeshCache.materials[c] = l.materials[c]) + } + }, + Qf.prototype._updateMaterialV1ToV2 = function (A, e) { + var t = {}, + i = [], + o = {}; + if (!e) + return null; + for (var n = e.color, r = e.colorIndex, a = e.texture, s = e.textureIndex, l = 0; n.length > l; l += 4) { + var c = {}; + c.color = [n[l], n[l + 1], n[l + 2]], + c.opacity = Math.floor(100 * n[l + 3]) / 100, + c.transparent = 1 > n[l + 3]; + var h = (255 * c.color[0] << 16 ^ 255 * c.color[1] << 8 ^ 255 * c.color[2] << 0) + "_" + c.opacity; + o[h] = c, + i.push(h) + } + if (0 !== a.length && r.length === s.length) + for (var d = -1, p = 0; s.length > p; p += 1) { + if (d !== r[p]) + if (d = r[p], + -1 !== s[p]) + o[i[r[p]]].map = a[s[p]] + } + return t.materials = o, + t.materialId = i, + t.materialIndex = r, + t + }, + Qf.prototype.addMeshToInfoMap = function (A, e, t, i) { + var o = this.getNodeInfosByComponentId(A); + Array.isArray(o) && o.forEach((function (A) { + A.nodeId === e && (A.mesh = t, + A.index = i) + })) + }; + var Rf = function () { + this.geometries = {} + }; + Rf.prototype.dispose = function () { + this.disposeGeometries(), + this.geometries = {} + }, + Rf.prototype.destory = function () { + this.dispose() + }, + Rf.prototype.disposeGeometries = function () { + for (var A in this.geometries) + this.disposeGeometry(A) + }, + Rf.prototype.disposeGeometry = function (A) { + var e = this.geometries[A]; + if (e) { + if (Array.isArray(e)) + for (var t = 0, i = e.length; i > t; t += 1) + e[t].dispose(); + else + e.dispose(); + delete this.geometries[A] + } + }, + Rf.prototype._hasGeometry = function (A) { + return !!this.geometries[A] + }, + Rf.prototype._cacheGeometry = function (A, e) { + void 0 === this.geometries[A] && (this.geometries[A] = e) + }, + Rf.prototype.getNodeIdxMapByUserId = function (A) {}, + Rf.prototype.getGeometryById = function (A) { + return this.geometries[A] + }, + Rf.prototype.getGeometryByNodeInfo = function (A, e) { + return this._hasGeometry(e.geometryId) ? this.getGeometryById(e.geometryId) : this._createGeometryByNodeInfo(A, e) + }, + Rf.prototype._createGeometryByNodeInfo = function (A, e) { + return this._createGeometry(e.type, e.geometryId, A.getModelDescriptor().getReferencedMeshBufferById(e.geometryId)) + }, + Rf.prototype._createGeometry = function (A, e, t) { + if (this._hasGeometry(e)) + return this.getGeometryById(e); + var i = this._createBufferGeometry(A, t); + return i ? (i.key = e, + this._cacheGeometry(e, i), + i) : null + }, + Rf.prototype._createBufferGeometry = function (A, e) { + var t = Qf.EnumNodeItemType, + i = null; + switch (1) { + case t.MESH: + case t.MESH_REF: + if (!e) + return null; + if ((i = new he).setIndex(new YA(e.index, 1)), + i.setAttribute("position", new YA(e.position, 3)), + e.normal && e.normal.length > 0 ? i.setAttribute("normal", new YA(e.normal, 3)) : i.computeVertexNormals(), + e.uv && e.uv.length > 0 && i.setAttribute("uv", new YA(e.uv, 2)), + e.uv2 && e.uv2.length > 0 && i.setAttribute("uv2", new YA(e.uv2, 2)), + e.skinIndex && e.skinIndex.length > 0 ? i.setAttribute("skinIndex", new YA(e.skinIndex, 4)) : Bh.debug("skinIndex 长度为0"), + e.skinWeight && e.skinWeight.length > 0 ? i.setAttribute("skinWeight", new YA(e.skinWeight, 4)) : Bh.debug("skinWeight 长度为0"), + void 0 !== e.materialIndex) { + for (var o = null, n = [], r = void 0, a = 0; e.materialIndex.length > a; a += 1) { + var s = e.materialIndex[a]; + s !== r && (r = s, + null != o && (o.count = 3 * a - o.start, + n.push(o)), + o = { + start: 3 * a, + materialIndex: r + }) + } + null != o && (o.count = 3 * e.materialIndex.length - o.start, + n.push(o)), + i.groups = n + } + break; + case t.TUBE: + case t.PIPE: + i = Tu.UnitCylinderInstance; + break; + case t.BOX: + i = Tu.UnitBoxInstance; + break; + case t.BOX_M: + i = Tu.getUnitTextureBox(); + break; + case t.PIPE_M: + i = Tu.getUnitTextureCylinder(); + break; + case t.LINE: + if (!e) + return null; + (i = new he).setIndex(new YA(e.I, 1)), + i.setAttribute("position", new YA(e.P, 3)) + } + return i + }, + Rf.prototype.createBufferByBufferDataWithUV2 = function (A, e, t) { + var i = this.createBufferByBufferData(e, t); + if (!i) + return null; + if (!A.lightmap) + return i; + var o = [], + n = i.index, + r = A.getLoader().getUV2ById(e.itemIdUV2, n.length); + r && (e.lightmapIdx = r.lightmapIdx, + o = r.uv2); + for (var a = i.position, s = i.normal, l = i.uv, c = [], h = [], d = [], p = 0; n.length > p; p += 1) { + var g = n[p]; + c.push(a[3 * g]), + c.push(a[3 * g + 1]), + c.push(a[3 * g + 2]), + s && (h.push(s[3 * g]), + h.push(s[3 * g + 1]), + h.push(s[3 * g + 2])), + l && (d.push(l[2 * g]), + d.push(l[2 * g + 1])), + n[p] = p + } + return a = null, + s = null, + l = null, + i.uv2 = o, + i.position = c, + i.normal = h, + i.uv = d, + i + }, + Rf.prototype.createBufferByBufferData = function (A, e) { + this.cachedComponentGeoBuffer || (this.cachedComponentGeoBuffer = {}); + var t = null, + i = null, + o = null, + n = null, + r = null, + a = Qf.EnumNodeItemType, + s = null; + switch (1) { + case a.MESH: + case a.MESH_REF: + if (!e || !e.buffer) + return Bh.debug("缺少几何buffer"), + null; + var c = e.buffer; + if (i = c.index, + A.geometryId === A.originalGeometryId ? (t = c.position, + o = c.normal, + n = c.uv ? c.uv : null, + r = c.uv2 ? c.uv2 : null) : (t = Float32Array.from(c.position), + o = Float32Array.from(c.normal), + n = c.uv ? Float32Array.from(c.uv) : null, + r = c.uv2 ? Float32Array.from(c.uv2) : null), + c = null, + e.indexInfo) { + i = i.slice(e.indexInfo.indexStart, e.indexInfo.indexStart + e.indexInfo.indexCount), + t = t.slice(e.indexInfo.positionStart, e.indexInfo.positionStart + e.indexInfo.positionCount), + o = o.slice(e.indexInfo.positionStart, e.indexInfo.positionStart + e.indexInfo.positionCount), + n = n ? n.slice(e.indexInfo.uvStart, e.indexInfo.uvStart + e.indexInfo.uvCount) : null, + r = r ? r.slice(e.indexInfo.uvStart, e.indexInfo.uvStart + e.indexInfo.uvCount) : null; + var h = e.indexInfo.positionStart / 3; + i.forEach((function (A, e, t) { + t[e] -= h + })) + } + if (uh.isMirror(A.matrix.elements)) + for (var d = 0, p = i.length; p > d; d += 3) { + var g = i[d + 1]; + i[d + 1] = i[d + 2], + i[d + 2] = g + } + break; + case a.BOX: + case a.PIPE: + s = Tu.UnitCylinderInstance, + i = Uint32Array.from(s.index.array), + t = Float32Array.from(s.attributes.position.array), + o = Float32Array.from(s.attributes.normal.array), + s = null; + break; + case a.TUBE: + case a.BOX_M: + case a.PIPE_M: + s = A.type === a.BOX_M || A.type === a.BOX ? Tu.getBoxMBuffer(A.uvArrayBuffer) : Tu.getPipeMBuffer(A.uvArrayBuffer), + i = Uint32Array.from(s.index), + t = Float32Array.from(s.vertex), + o = Float32Array.from(s.normal), + s.uv && (n = Float32Array.from(s.uv), + delete s.uv), + s = null; + break; + case a.LINE: + if (!e || !e.buffer) + return null; + if (e.isDataView ? (i = Uint32Array.from(e.buffer.I), + t = Float32Array.from(e.buffer.P), + o = null, + n = null) : (i = new Uint32Array(e.buffer.I), + t = new Float32Array(e.buffer.P), + o = null, + n = null), + e.indexInfo) { + i = i.slice(e.indexInfo.indexStart, e.indexInfo.indexStart + e.indexInfo.indexCount), + t = t.slice(e.indexInfo.positionStart, e.indexInfo.positionStart + e.indexInfo.positionCount); + h = e.indexInfo.positionStart / 3; + i.forEach((function (A, e, t) { + t[e] -= h + })) + } + break; + default: + Bh.log("error data!") + } + if (!this.cachedComponentGeoBuffer[A.geometryId] || A.geometryId !== A.originalGeometryId) { + var u = A.matrix; + if (Tu.applyMatrix4ToBuffer(u, t), + o) { + var f = new l; + f.getNormalMatrix(u), + Tu.applyMatrix3ToBuffer(f, o), + Tu.normalizeBuffer(o) + } + this.cachedComponentGeoBuffer[A.geometryId] = !0 + } + return A.uv = !!n, { + index: i, + position: t, + normal: o, + uv: n, + uv2: r + } + }; + var Tf = function (A) { + return Rf.call(this), + this.manager = A, + this._maxIndiceseNum = 0, + this._materialList = [], + this.mapMaterialIdToMergedNode = {}, + this.selectedMeshes = [], + this.nonSelectedMeshes = [], + this.selectedObjectIds = [], + this.blinkMaterials = [], + this.mapDestroyedBufferKey = {}, + this + }; + + function kf(A, e, t, i) { + for (var o = A.getAttribute("position").array, n = e; t > n; n += 3) + o[n] += i.x, + o[n + 1] += i.y, + o[n + 2] += i.z; + A.getAttribute("position").needsUpdate = !0 + } + (Tf.prototype = Object.create(Rf.prototype)).destroy = function () { + this.dispose(), + this.clearData(), + this.mapMaterialIdToMergedNode = {}, + this.manager = null, + this._materialList = [], + this.selectedMeshes = [], + this.nonSelectedMeshes = [], + this.selectedObjectIds = [], + this.blinkMaterials = [], + this.mapDestroyedBufferKey = {} + }, + Tf.prototype.clearData = function () { + this.bufferDestroyed = !1, + this.clearAllNodeBuffer(), + this._disposeMergedGeometries() + }, + Tf.prototype.getMeshesByUserIds = function (A, e) { + var t = []; + for (var i in this.mapMaterialIdToMergedNode) + for (var o = this.mapMaterialIdToMergedNode[i], n = 0, r = o.length; r > n; n += 1) { + var a = o[n], + s = a.indices[e]; + if (s) + for (var l = 0, c = s.length; c > l; l += 1) { + var h = {}; + h.mesh = a.mesh, + h.indexInfo = s[l], + h.matrix = A.getModelMatrix(), + t.push(h) + } + } + return t + }, + Tf.prototype.rebuildIndices = function (A) { + this._materialList.length = 0; + var e = vc.EnableLightmap && A.lightmap; + this.clearSelectedObjectIds(); + var t = this.manager.getFilteredUserIds(), + i = this.manager.getSelectedUserIds(), + o = this.manager.getHoveredUserIds(), + n = this.manager.getBlinkedUserIds(), + r = (A.hasReplacedUserId(), + A.manager.scene.fillClipPlane && vc.ClippingCaps), + a = {}; + for (var s in this.mapMaterialIdToMergedNode) { + var l, c = this.getPropertyValueByMaterialKey(s).materialId, + h = null, + d = null, + p = null, + g = null, + u = null, + f = null, + m = null, + C = null, + y = null; + i && i[c] && (g = i[c]), + o && o[c] && (u = o[c]), + n && n[c] && (f = n[c]), + t && t[c] && (h = t[c][zc.HIDDEN], + d = t[c][zc.OVERRIDED], + p = t[c][zc.TRANSPARENT]); + var v = this.mapMaterialIdToMergedNode[s]; + for (y = 0, + l = v.length; l > y; y += 1) { + var I = v[y], + E = I.indices, + B = I.geometry; + if (B.clearGroups(), + B._visible = !0, + e) + for (var x = A.lightmapNum, S = 0; x > S; S += 1) { + var w = "lightmap|" + S; - + 1 === this._materialList.indexOf(w) && this._materialList.push(w) + } + if (g || h || d || u || p || vc.EnableLightmap || r || f) { + var M = []; + for (var b in E) + if (E.hasOwnProperty(b)) { + if (h && h[b]) + continue; + var U = E[b]; + if (U && U.length > 0) { + if (U.sort((function (A, e) { + return A.indexStart - e.indexStart + })), + p && p[b]) { + for (m = 0, + C = U.length; C > m; m += 1) + M.push({ + indexStart: U[m].indexStart, + indexCount: U[m].indexCount, + state: zc.TRANSPARENT + }); + continue + } + if (A.manager.isSelectPriority()) { + if (g && g[b]) { + if (this.cacheSelectedObjectIds(b, s, y), + vc.PickingEffect) { + if (d && d[b]) { + var F = d[b], + K = this._materialList.indexOf(F); + for (-1 === K && (this._materialList.push(F), + K = this._materialList.length - 1), + m = 0, + C = U.length; C > m; m += 1) + M.push({ + indexStart: U[m].indexStart, + indexCount: U[m].indexCount, + state: zc.OVERRIDED + K + }); + continue + } + for (m = 0, + C = U.length; C > m; m += 1) + M.push({ + indexStart: U[m].indexStart, + indexCount: U[m].indexCount, + state: zc.NONE + }); + continue + } + for (m = 0, + C = U.length; C > m; m += 1) + M.push({ + indexStart: U[m].indexStart, + indexCount: U[m].indexCount, + state: zc.SELECTED + }); + continue + } + if (f && f[b]) { + if (d && d[b]) { + var Q = "blink|" + d[b], + R = this._materialList.indexOf(Q); + for (-1 === R && (this._materialList.push(Q), + R = this._materialList.length - 1), + m = 0, + C = U.length; C > m; m += 1) + M.push({ + indexStart: U[m].indexStart, + indexCount: U[m].indexCount, + state: zc.OVERRIDED + R + }); + continue + } + for (m = 0, + C = U.length; C > m; m += 1) + M.push({ + indexStart: U[m].indexStart, + indexCount: U[m].indexCount, + state: zc.BLINK + }); + continue + } + } else { + if (f && f[b]) { + if (d && d[b]) { + var T = "blink|" + d[b], + k = this._materialList.indexOf(T); + for (-1 === k && (this._materialList.push(T), + k = this._materialList.length - 1), + m = 0, + C = U.length; C > m; m += 1) + M.push({ + indexStart: U[m].indexStart, + indexCount: U[m].indexCount, + state: zc.OVERRIDED + k + }); + continue + } + for (m = 0, + C = U.length; C > m; m += 1) + M.push({ + indexStart: U[m].indexStart, + indexCount: U[m].indexCount, + state: zc.BLINK + }); + continue + } + if (g && g[b]) { + if (this.cacheSelectedObjectIds(b, s, y), + vc.PickingEffect) { + if (d && d[b]) { + var D = d[b], + L = this._materialList.indexOf(D); + for (-1 === L && (this._materialList.push(D), + L = this._materialList.length - 1), + m = 0, + C = U.length; C > m; m += 1) + M.push({ + indexStart: U[m].indexStart, + indexCount: U[m].indexCount, + state: zc.OVERRIDED + L + }); + continue + } + for (m = 0, + C = U.length; C > m; m += 1) + M.push({ + indexStart: U[m].indexStart, + indexCount: U[m].indexCount, + state: zc.NONE + }); + continue + } + for (m = 0, + C = U.length; C > m; m += 1) + M.push({ + indexStart: U[m].indexStart, + indexCount: U[m].indexCount, + state: zc.SELECTED + }); + continue + } + } + if (p && p[b]) { + for (m = 0, + C = U.length; C > m; m += 1) + M.push({ + indexStart: U[m].indexStart, + indexCount: U[m].indexCount, + state: zc.TRANSPARENT + }); + continue + } + if (u && u[b]) { + if (d && d[b]) { + var N = this._materialList.indexOf(O = "hover|" + d[b]); + for (-1 === N && (this._materialList.push(O), + N = this._materialList.length - 1), + m = 0, + C = U.length; C > m; m += 1) + M.push({ + indexStart: U[m].indexStart, + indexCount: U[m].indexCount, + state: zc.OVERRIDED + N + }); + continue + } + for (m = 0, + C = U.length; C > m; m += 1) + M.push({ + indexStart: U[m].indexStart, + indexCount: U[m].indexCount, + state: zc.HOVER + }); + continue + } + if (d && d[b]) { + var O, V = this._materialList.indexOf(O = d[b]); + for (-1 === V && (this._materialList.push(O), + V = this._materialList.length - 1), + m = 0, + C = U.length; C > m; m += 1) + M.push({ + indexStart: U[m].indexStart, + indexCount: U[m].indexCount, + state: zc.OVERRIDED + V + }); + continue + } + if (r && a[b]) { + for (m = 0, + C = U.length; C > m; m += 1) + M.push({ + indexStart: U[m].indexStart, + indexCount: U[m].indexCount, + state: zc.CLIPPING + }); + continue + } + if (vc.EnableLightmap) + for (m = 0, + C = U.length; C > m; m += 1) { + var G = this._materialList.indexOf("lightmap|" + U[m].lightmapIdx); + M.push({ + indexStart: U[m].indexStart, + indexCount: U[m].indexCount, + state: zc.OVERRIDED + G + }) + } + else + for (m = 0, + C = U.length; C > m; m += 1) + M.push({ + indexStart: U[m].indexStart, + indexCount: U[m].indexCount, + state: 0 + }) + } + } + if (M.length > 0) + for (M.sort((function (A, e) { + return A.state === e.state ? A.indexStart - e.indexStart : A.state - e.state + })), + m = 0, + C = M.length; C > m; m += 1) { + var P = M[m].indexStart, + q = M[m].indexCount, + j = M[m].state; + if (0 === m) + B.addGroup(P, q, j); + else + j === M[m - 1].state && P === M[m - 1].indexStart + M[m - 1].indexCount ? B.groups[B.groups.length - 1].count += q : B.addGroup(P, q, j) + } + else + B._visible = !1 + } + } + } + }, + Tf.prototype.update = function (A, e) { + var t = A.manager.filter, + i = A.materialManager.materials, + o = A.selectedMaterial, + n = A.manager.sceneState, + r = null, + a = null, + s = null, + l = null, + c = null, + h = null, + d = vc.EnableLightmap && A.lightmap; + if (A.isOnlyWireframe()) + for (var p in this.mapMaterialIdToMergedNode) { + var g = this.mapMaterialIdToMergedNode[p]; + for (s = 0, + l = g.length; l > s; s += 1) { + var u = g[s].mesh; + u && (u.visible = !1) + } + } + else { + vc.TranslucentDepthDisabled && (o.depthWrite = !o.transparent); + var f = t._getMaterialByName("scene"); + vc.TranslucentDepthDisabled && (f.depthWrite = !1); + var m = []; + this.blinkMaterials.length = 0; + var C = {}; + if (!d) + for (r = 0, + a = this._materialList.length; a > r; r += 1) { + var y = null, + v = this._materialList[r], + I = v.split("|"); + "hover" === I[0] ? (y = t._getMaterialByName(I[1]), + y = n.getHoverMaterial(y)) : "blink" === I[0] ? (y = t._getMaterialByName(I[1]), + y = n.getBlinkMaterial(y), + C[v] || this.blinkMaterials.push(y)) : y = t._getMaterialByName(v) ? t._getMaterialByName(v) : this.manager.model.materialManager.getMaterialById(v), + vc.TranslucentDepthDisabled && (y.depthWrite = !y.transparent), + m[r] = y + } + for (var E in this.mapMaterialIdToMergedNode) { + var B = this.getPropertyValueByMaterialKey(E).materialId, + x = A.manager.getOverrideMaterialByName(B) || i[B] || Kd.getDefaultStandardMaterial(); + if (x) { + if (d) + for (r = 0, + a = this._materialList.length; a > r; r += 1) { + var S = null, + w = this._materialList[r].split("|"); + if ("lightmap" === w[0]) + if (vc.IBL) + S = x.clone(); + else { + var M = Kd.getMaterialParameters(x); + M.lights = !1, + (S = Kd.createStandardMaterial(M)).lightMap = A.materialManager.lightmaps[w[1]], + S.lightMapIntensity = vc.LightmapIntensity + } + vc.TranslucentDepthDisabled && S && (S.depthWrite = !S.transparent), + m[r] = S + } + vc.TranslucentDepthDisabled && (x.depthWrite = !x.transparent); + var b = n.getHoverMaterial(i[B]); + vc.TranslucentDepthDisabled && (b.depthWrite = !b.transparent); + var U = this.mapMaterialIdToMergedNode[E]; + for (s = 0, + l = U.length; l > s; s += 1) { + var F = U[s], + K = F.geometry; + if (null !== K) { + var Q = F.mesh; + if (Q) + if (K._visible) { + if (K.groups.length > 0) { + var R = C[B]; + R || (R = C[B] = n.getBlinkMaterial(x), + this.blinkMaterials.push(R)); + var T = [x, o, R, b, f]; + for (r = 0, + a = m.length; a > r; r += 1) { + if (!m[r].createByBos) { + if (m[r].materialId !== B && !m[r].mapNodeIdToOrigMatId) + continue; + if (!Object.keys(m[r].mapNodeIdToOrigMatId).find((function (A) { + return m[r].mapNodeIdToOrigMatId[A] === B + }))) + continue + } + for (var k in K.attributes.uv || (m[r].map = null), + U[s].indices) + if (this.manager.mapMaterialIdToUserIdsForFilter[B] && this.manager.mapMaterialIdToUserIdsForFilter[B][zc.OVERRIDED]) + for (var D = Object.keys(this.manager.mapMaterialIdToUserIdsForFilter[B][zc.OVERRIDED]), L = 0, N = D.length; N > L; L += 1) + k === D[L] && (T[5 + r] = m[r]) + } + if (e) { + var O = []; + for (c = 0, + h = T.length; h > c; c += 1) + O.push(e); + T = O + } + Q.material = T + } else + Q.material = e || x; + Q.visible = !0 + } else + Q.visible = !1; + else + Bh.error("没有mesh对象") + } + } + x = null + } + } + } + }, + Tf.prototype.explode = function (A, e, t) { + for (var i in this.mapMaterialIdToMergedNode) + for (var o = this.mapMaterialIdToMergedNode[i], n = 0, r = o.length; r > n; n += 1) { + var a = o[n], + s = a.geometry; + if (null !== s) { + var l = a.indices; + for (var c in l) { + var h = A.manager.getComponentInfoByUserId(c).boundingBox, + d = uh.computeExplodeTranslation(e, h, t), + p = l[c]; + if (p) + for (var g = 0, u = p.length; u > g; g += 1) { + var f = p[g].positionStart; + kf(s, f, f + p[g].positionCount, d) + } + } + } + } + }, + Tf.prototype.explosion = function (A, e) { + var t = A.getModelDescriptor().getStandardUserIds(); + e.componentKey = t, + this.componentsExplosion(A, e) + }, + Tf.prototype.closeExplosion = function (A) { + this.explosion(A, {}) + }, + Tf.prototype.componentsExplosion = function (A, e) { + var t = e.coefficientX || 1, + i = e.coefficientY || 1, + o = e.coefficientZ || 1, + n = e.offsetX || 0, + r = e.offsetY || 0, + a = e.offsetZ || 0, + s = null; + if (e.center) + s = (new y).fromArray(e.center); + else if (1 !== t || 1 !== i || 1 !== o || 0 !== n || 0 !== r || 0 !== a) + return; + var l = Array.isArray(e.componentKey) ? e.componentKey : [e.componentKey], + c = new y, + h = new aA, + d = new y(0, 0, 0), + p = new y(0, 0, 0), + g = new y, + u = new M, + m = A.getModelMatrix(); + m && s && (u.getInverse(m), + s.applyMatrix4(u)); + var C = A.manager, + v = !1, + I = new y, + E = new f, + B = new y(1, 1, 1); + uh.isEmptyObject(A.subModel) || (v = !0); + for (var x = 0, S = l.length; S > x; x += 1) { + var w = l[x]; + if (w) { + var b = A.getModelDescriptor().getStandardNodeInfosById(w); + if (b) + for (var U = 0, F = b.length; F > U; U += 1) { + var K = b[U]; + if (K) { + var Q = this._getMaterialKeyByNodeInfo(K), + R = this.mapMaterialIdToMergedNode[Q]; + if (R) + for (var T = 0, k = R.length; k > T; T += 1) { + var D = R[T], + L = D.geometry, + N = D.mesh; + if (L && N) { + var O = D.indices; + if (O) { + var V = O[w]; + if (V) { + h.copy(K.boundingBox), + h.getCenter(c), + K.userData || (K.userData = {}), + d.set(0, 0, 0), + p.set(0, 0, 0); + var G = new y(1, 1, 1); + if (v && (N.matrix.decompose(I, E, B), + G.divide(B)), + 1 !== t || 1 !== i || 1 !== o || K.userData.explosionFactor) { + K.userData.explosionFactor || (K.userData.explosionFactor = new y(1, 1, 1), + K.userData.explosionBaseDifference = c.sub(s).clone().multiply(G)); + var P = K.userData.explosionFactor, + q = K.userData.explosionBaseDifference; + d.set((t - P.x) * q.x, (i - P.y) * q.y, (o - P.z) * q.z), + 1 === t && 1 === i && 1 === o ? (K.userData.explosionFactor = void 0, + K.userData.explosionBaseDifference = void 0) : P.set(t, i, o) + } + if (0 !== n || 0 !== r || 0 !== a || K.userData.explosionOffset) { + K.userData.explosionOffset || (K.userData.explosionOffset = new y(0, 0, 0)); + var j = K.userData.explosionOffset; + p.set(n * G.x - j.x, r * G.y - j.y, a * G.z - j.z), + 0 === n && 0 === r && 0 === a ? K.userData.explosionOffset = void 0 : j.set(n * G.x, r * G.y, a * G.z) + } + if (g.set(d.x + p.x, d.y + p.y, d.z + p.z), + 0 !== g.x || 0 !== g.y || 0 !== g.z) { + K.userData.explosionFactor || K.userData.explosionOffset ? C.explosionList[w] || (C.explosionList[w] = !0) : delete C.explosionList[w]; + var H = g.clone().multiply(B); + u.makeTranslation(H.x, H.y, H.z), + K.userData.changeOffset = g.clone(), + K.transformation || (K.transformation = !0, + K.transformationOriginalMatrix = K.matrix.clone(), + K.applyMatrix = new M, + K.transformationOriginalBoundingBox = K.boundingBox.clone()), + K.matrix.premultiply(u), + K.applyMatrix.premultiply(u), + K.boundingBox.copy(K.transformationOriginalBoundingBox).applyMatrix4(K.applyMatrix); + for (var Y = 0, W = V.length; W > Y; Y += 1) { + var J = V[Y].positionStart; + kf(L, J, J + V[Y].positionCount, g) + } + L.attributes.position.needsUpdate = !0 + } + } + } + } + } + } + } + } + } + }, + Tf.prototype.closeComponentsExplosion = function (A, e) { + e = Array.isArray(e) ? e : [e]; + this.componentsExplosion(A, { + componentKey: e + }) + }, + Tf.prototype._getNodeGroup = function (A) { + return A._getNodeGroup(gp.GEOMETRY, { + globalSpace: !0 + }) + }, + Tf.prototype._hasNodeGroup = function (A) { + return A._hasNodeGroup(gp.GEOMETRY) + }, + Tf.prototype._resetMaxIndicesNumberPerBathSegment = function (A) { + vc.SegmentedBatchMergeEnable && this._maxIndiceseNum > vc.maxIndicesNumberPerBathSegment && (Bh.log("adjust maxIndicesNumberPerBathSegment value from " + vc.maxIndicesNumberPerBathSegment + " to " + this._maxIndiceseNum + "!"), + vc.maxIndicesNumberPerBathSegment = A) + }, + Tf.prototype.asyncCreateMeshNodes = function (A, e, t) { + var i = this; + e && e.length ? this._asyncMergeData(A, e, (function () { + Bh.timeEnd("MergeData"), + i._makeMeshNodes(A), + t && t() + })) : t && t() + }, + Tf.prototype.createBatchedMeshNodes = function (A, e) { + var t = this.mapMaterialIdToMergedNode, + i = A.manager, + o = A.modelKey, + n = A._encodedDatabagId, + r = this._getNodeGroup(A), + a = A.materialManager, + s = e.materialKey, + l = this.getPropertyValueByMaterialKey(s), + c = a.getMaterialById(l.materialId); + if (!c) { + var h = Object.keys(e.componentInfo)[0], + d = e.componentInfo[h][0].nodeId, + p = A.getModelDescriptor().getNodeInfosByNodeId(d); + if (!p) + return; + p.uv = "1" === l.uvProp, + s = this._getMaterialKeyByNodeInfo(p, A), + l = this.getPropertyValueByMaterialKey(s), + c = a.getMaterialById(l.materialId) + } + var g = new he; + if (g._visible = !0, + g.setIndex(new YA(e.index, 1)), + e.position && e.position.length > 0) { + g.setAttribute("position", new YA(e.position, 3)), + e.normal && e.normal.length === e.position.length && g.setAttribute("normal", new YA(e.normal, 3)); + var u = !1; + e.uv && e.uv.length > 0 > 0 && (g.setAttribute("uv", new YA(e.uv, 2)), + u = !0), + c.aoMap && g.setAttribute("uv2", new YA(e.uv, 2)), + g.getAttribute("normal") || g.computeVertexNormals(); + var f = e.componentInfo; + t[s] || (t[s] = []); + var m = null; + if ("lines" === l.type) + (m = new cf(g)).modelKey = o; + else { + var C = { + modelKey: o + }; + (m = new Kf(g, c)).spawn(C) + } + if (t[s].push({ + geometry: g, + indices: f, + mesh: m + }), + m._indicesGroup = f, + !uh.isEmptyObject(A.subModel)) { + var y = Object.keys(f)[0]; + if (y) { + var v = uh.getModelKeyFromComponentKey(y); + A.subModel[v] && m.matrix.copy(A.subModel[v]) + } + } + r.add(m), + i.addMeshToOctantMap(n, s, new Eu(s, m)); + var I = function (e) { + f.hasOwnProperty(e) && f[e].forEach((function (t) { + A.addMeshToInfoMap(e, t.nodeId, m, t, u) + })) + }; + for (var E in f) + I(E); + r.updateMatrixWorld(!0), + f = null, + m = null + } + }, + Tf.prototype._asyncMergeData = function (A, e, t) { + Bh.time("MergeData"); + var i = {}, + o = this, + n = A.getLoader().maxLoadTaskCount, + r = A.progressPercentage.load, + a = A.progressPercentage.collect, + s = e.length, + l = Math.ceil(s / A.progressFrequency), + c = A.getModelDescriptor().getStandardNodeInfos(); + requestAnimationFrame(function h(d) { + var p = d; + return function () { + var d = null, + g = null; + for (g = p + l > s ? s : p + l, + d = p; g > d; d += 1) { + if (o._collectMergedNodeInfosById(A, e[d], c, i), + d === g - 1) + if (g !== s) + A.dispatchEventEx({ + type: Rc.ON_LOAD_PROGRESS, + progress: { + total: n, + loaded: (d / s * a + r) * n, + modelKey: A.modelKey + } + }), + requestAnimationFrame(h(d + 1)); + else + A.dispatchEventEx({ + type: Rc.ON_LOAD_PROGRESS, + progress: { + total: n, + loaded: (a + r) * n, + modelKey: A.modelKey + } + }), + o._asyncMergeGeometry(i, A, t) + } + } + }(0)) + }, + Tf.prototype._asyncMergeGeometry = function (A, e, t) { + var i = []; + for (var o in A) + i.push(o); + if (0 !== i.length) { + this._resetMaxIndicesNumberPerBathSegment(this._maxIndiceseNum); + var n = this, + r = e.getLoader().maxLoadTaskCount, + a = e.progressPercentage.load, + s = e.progressPercentage.collect, + l = e.progressPercentage.merge, + c = i.length, + h = Math.ceil(c / e.progressFrequency), + d = this.mapMaterialIdToMergedNode; + requestAnimationFrame(function o(p) { + var g = p; + return function () { + var p, u = null; + for (u = g + h > c ? c : g + h, + p = g; u > p; p += 1) { + if (n._collectMergedGeometriesById(i[p], A, d), + p === u - 1) + if (u !== i.length) + e.dispatchEventEx({ + type: Rc.ON_LOAD_PROGRESS, + progress: { + total: r, + loaded: (p / c * l + a + s) * r, + modelKey: e.modelKey + }, + modelKey: e.modelKey + }), + requestAnimationFrame(o(p + 1)); + else + t() + } + } + }(0)) + } else + t() + }, + Tf.prototype._collectMergedNodeInfosById = function (A, e, t, i) { + for (var o = t[e], n = 0, r = o.length; r > n; n += 1) { + var a = o[n]; + this._createNodeBuffer(A, a); + var s = this._getNodeBufferBy(a.nodeId); + if (s) { + var l = s.index; + l && l.length > this._maxIndiceseNum && (this._maxIndiceseNum = l.length); + var c = this._getMaterialKeyByNodeInfo(a, A); + void 0 === i[c] && (i[c] = []), + i[c].push(a) + } + } + }, + Tf.prototype._collectMergedGeometriesById = function (A, e, t) { + var i = e[A]; + void 0 === t[A] && (t[A] = []); + for (var o = [], n = Math.max(i.length / 800, 500), r = Math.floor(i.length / n), a = i.length, s = 0; r >= s; s += 1) { + for (var l = 0, c = 0, h = 0, d = 0, p = 0, g = null, u = !1, f = 0, m = 0, C = a > n ? n : a; C > m; m += 1) { + var y = s * n, + v = i[y + m]; + if (!v) + break; + (g = this._getNodeBufferBy(v.nodeId)) ? (c += g.index.length, + l += g.position.length, + g.normal && (h += g.normal.length), + g.uv && g.uv.length > 0 ? (u = !0, + d += g.uv.length) : d += g.position.length / 3 * 2, + g.uv2 && (p += g.uv2.length), + vc.SegmentedBatchMergeEnable && c > vc.maxIndicesNumberPerBathSegment ? (g.normal && (h -= g.normal.length), + g.uv && (d -= g.uv.length), + g.uv2 && (p -= g.uv2.length), + o.push({ + start: f, + end: m, + steps: y, + arrayPositionLength: l -= g.position.length, + arrayIndexLength: c -= g.index.length, + arrayNormalLength: h, + arrayUVLength: d, + arrayUV2Length: p + }), + l = 0, + c = 0, + h = 0, + d = 0, + p = 0, + f = m, + m -= 1) : m === C - 1 && o.push({ + start: f, + end: C, + steps: y, + arrayPositionLength: l, + arrayIndexLength: c, + arrayNormalLength: h, + arrayUVLength: d, + arrayUV2Length: p + }), + g = null) : m === C - 1 && o.push({ + start: f, + end: C, + steps: y, + arrayPositionLength: l, + arrayIndexLength: c, + arrayNormalLength: h, + arrayUVLength: d, + arrayUV2Length: p + }) + } + a -= n + } + for (var I = 0, E = o.length; E > I; I += 1) { + for (var B = o[I], x = new he, S = {}, w = new Float32Array(B.arrayPositionLength), M = new Uint32Array(B.arrayIndexLength), b = new Float32Array(B.arrayNormalLength), U = new Float32Array(B.arrayUVLength), F = new Float32Array(B.arrayUV2Length), K = 0, Q = 0, R = 0, T = 0, k = 0, D = [], L = B.start, N = B.end; N > L; L += 1) { + var O = i[B.steps + L]; + if (g = this._getNodeBufferBy(O.nodeId)) { + D.push(O.nodeId); + var V = g.index, + G = g.position, + P = g.normal, + q = g.uv, + j = g.uv2; + w.set(G, K); + for (var H = new Uint32Array(V), Y = 0, W = H.length; W > Y; Y += 1) + H[Y] += K / 3; + M.set(H, Q), + void 0 === S[O.userId] && (S[O.userId] = []), + S[O.userId].push({ + userId: O.userId, + nodeId: O.nodeId, + positionStart: K, + positionCount: G.length, + indexStart: Q, + indexCount: V.length, + lightmapIdx: O.lightmapIdx, + boundingBox: O.boundingBox + }), + Q += V.length, + K += G.length, + P && (b.set(P, R), + R += P.length), + u && (q ? (U.set(q, T), + T += q.length) : (U.set(new Float32Array(G.length / 3 * 2), T), + T += q.length)), + j && (F.set(j, k), + k += j.length), + V = null, + G = null, + P = null, + q = null, + j = null, + g = null + } + } + this.clearNodeBufferByNodeIds(D), + x._visible = !0, + x.setIndex(new YA(M, 1)), + x.setAttribute("position", new YA(w, 3)), + R > 0 && x.setAttribute("normal", new YA(b, 3)), + T > 0 && x.setAttribute("uv", new YA(U, 2)), + k > 0 && x.setAttribute("uv2", new YA(F, 2)), + t[A].push({ + geometry: x, + indices: S + }) + } + }, + Tf.prototype.clearAllNodeBuffer = function () { + this.cachedNodeBuffer && (this.cachedNodeBuffer = {}) + }, + Tf.prototype.clearNodeBufferByNodeIds = function (A) { + if (this.cachedNodeBuffer) + for (var e = 0, t = A.length; t > e; e += 1) + this.cachedNodeBuffer[A[e]] = null + }, + Tf.prototype._getNodeBufferByNodeInfo = function (A, e) { + return this.cachedNodeBuffer || this._createNodeBuffer(A, e), + this.cachedNodeBuffer[e.nodeId] + }, + Tf.prototype._getNodeBufferBy = function (A) { + return this.cachedNodeBuffer ? this.cachedNodeBuffer[A] : null + }, + Tf.prototype._createNodeBufferForMergedBuffer = function (A, e, t) { + this.cachedNodeBuffer || (this.cachedNodeBuffer = {}), + this.cachedNodeBuffer[e.nodeId] || (this.cachedNodeBuffer[e.nodeId] = this.createBufferByBufferDataWithUV2(A, e, t)) + }, + Tf.prototype._createNodeBuffer = function (A, e) { + this._createNodeBufferForMergedBuffer(A, e, { + buffer: A.getModelDescriptor().getReferencedMeshBufferById(e.geometryId), + isDataView: !0 + }) + }, + Tf.prototype._createGeometries = function (A, e) { + var t = this, + i = A.getModelDescriptor().getNodeInfosOnGeometryId(), + o = A.getModelDescriptor().getReferencedMeshBufferData(), + n = this._getClassifiedMeshes(i, o); + this._dealDataMergedMeshs(A, n, o, i, (function () { + t._dealDataMergeableMeshs(A, n, o, i, e) + })) + }, + Tf.prototype._getClassifiedMeshes = function (A, e) { + var t = [], + i = []; + for (var o in e) { + var n = e[o].IndexInfos, + r = void 0; + if (n) { + if (1 > n.length) + continue; + for (var a = 0, s = n.length; s > a; a += 1) { + if ((l = A[n[a].meshId]) && l.length) { + r = n[a].meshId; + break + } + } + } else { + var l; + (l = A[o]) && l.length && (r = o) + } + if (void 0 !== r) + (l = A[r]) && l.length && (l[0].type === $u.EnumNodeItemType.LINE || !l[0].instanceOrNot && l[0].shared ? t.push(o) : i.push(o)) + } + if (!vc.Instance) + for (var o in A) + i[o] || t[o] || t.push(o); + return { + mergeableIdxs: t, + mergedIdxs: i + } + }, + Tf.prototype._collectMergeableMeshesByIdxId = function (A, e, t, i, o) { + t[e] && t[e].IndexInfos ? this._collectSharedMeshesByIdxId(A, e, t, i, o) : this._collectLineOrIntanceMeshesByIdxId(A, e, t, i, o) + }, + Tf.prototype._collectLineOrIntanceMeshesByIdxId = function (A, e, t, i, o) { + for (var n = i[e], r = { + buffer: A.getModelDescriptor().getReferencedMeshBufferById(e) + }, a = 0, s = n.length; s > a; a += 1) { + var l = n[a]; + this._createNodeBufferByGeoBufferData(A, l, r); + var c = this._getMaterialKeyByNodeInfo(l); + o[c] || (o[c] = []), + o[c].push(l) + } + }, + Tf.prototype._collectSharedMeshesByIdxId = function (A, e, t, i, o) { + for (var n = t[e].IndexInfos, r = 0, a = n.length; a > r; r += 1) { + var s = i[n[r].meshId]; + if (s) + for (var l = { + buffer: A.getModelDescriptor().getReferencedMeshBufferById(e), + indexInfo: n[r] + }, c = 0, h = s.length; h > c; c += 1) { + var d = s[c]; + this._createNodeBufferByGeoBufferData(A, d, l); + var p = this._getMaterialKeyByNodeInfo(d); + o[p] || (o[p] = []), + o[p].push(d) + } + } + }, + Tf.prototype._mergeMergeableMeshes = function (A, e, t, i) { + var o = Object.keys(e); + if (0 !== o.length) { + var n = this, + r = A.getLoader().maxLoadTaskCount, + a = o.length, + s = A.progressPercentage.load, + l = A.progressPercentage.collect, + c = A.progressPercentage.merge, + h = Math.ceil(a / A.progressFrequency); + requestAnimationFrame(function d(p) { + var g = p; + return function () { + var p = null, + u = null; + for (u = g + h > a ? a : g + h, + p = g; u > p; p += 1) + n._collectMergedGeometriesById(o[p], e, t), + p === u - 1 && (u !== a ? (A.dispatchEvent({ + type: Rc.ON_LOAD_PROGRESS, + progress: { + total: r, + loaded: (p / a * c + s + l) * r, + modelKey: A.modelKey + } + }), + requestAnimationFrame(d(p + 1))) : n._makeMeshNodes(A, i)) + } + }(0)) + } else + this._makeMeshNodes(A, i) + }, + Tf.prototype._dealDataMergeableMeshs = function (A, e, t, i, o) { + if (0 !== e.mergeableIdxs.length) { + var n = this, + r = this.mapMaterialIdToMergedNode, + a = {}, + s = e.mergedIdxs.length, + l = e.mergeableIdxs.length, + c = s + l, + h = e.mergeableIdxs, + d = A.getLoader().maxLoadTaskCount, + p = A.progressPercentage.load, + g = A.progressPercentage.collect, + u = Math.ceil(l / A.progressFrequency); + requestAnimationFrame(function e(f) { + var m = f; + return function () { + var f = null, + C = null; + for (C = m + u > l ? l : m + u, + f = m; C > f; f += 1) + n._collectMergeableMeshesByIdxId(A, h[f], t, i, a), + f === C - 1 && (C !== l ? (A.dispatchEvent({ + type: Rc.ON_LOAD_PROGRESS, + progress: { + total: d, + loaded: ((f + s) / c * g + p) * d, + modelKey: A.modelKey + } + }), + requestAnimationFrame(e(f + 1))) : (A.dispatchEvent({ + type: Rc.ON_LOAD_PROGRESS, + progress: { + total: d, + loaded: (g + p) * d, + modelKey: A.modelKey + } + }), + n._mergeMergeableMeshes(A, a, r, o))) + } + }(0)) + } else + this._makeMeshNodes(A, o) + }, + Tf.prototype._collectDataMergedMeshesByIdxId = function (A, e, t, i, o) { + var n = e[A], + r = n.IndexInfos; + if (r && 0 !== r.length) { + var a = !1; + n.UV && (n.UV.byteLength || n.UV.length) && (a = !0), + o.lightmap && (n = this.getAttributeForLightmapWithDataMerged(n, o, A)); + for (var s = void 0, l = 0, c = r.length; c > l; l += 1) { + var h = t[r[l].meshId]; + if (h && 0 !== h.length) { + o.lightmap && (r[l].lightmapIdx = n.lightmapIdx, + r[l].positionStart = 3 * r[l].indexStart, + r[l].positionCount = 3 * r[l].indexCount), + s = r[l].meshId; + for (var d = 0, p = h.length; p > d; d += 1) + h[d].uv = a + } + } + if (void 0 !== s) { + var g = t[s][0], + u = {}, + f = this._getMaterialKeyByNodeInfo(g); + void 0 === i[f] && (i[f] = []); + for (var m = 0, C = r.length; C > m; m += 1) + t[r[m].meshId] && (void 0 === u[(g = t[r[m].meshId][0]).userId] && (u[g.userId] = []), + r[m].userId = g.userId, + r[m].nodeId = g.nodeId, + r[m].boundingBox = g.boundingBox, + u[g.name].push(r[m])); + var y = new he; + y._visible = !0, + y.setIndex(new YA(new Uint32Array(n.I), 1)), + y.setAttribute("position", new YA(new Float32Array(n.P), 3)), + n.N && (n.N.byteLength || n.N.length) && y.setAttribute("normal", new YA(new Float32Array(n.N), 3)), + a && y.setAttribute("uv", new YA(new Float32Array(n.UV), 2)), + n.UV2 && (y.setAttribute("uv2", new YA(new Float32Array(n.UV2), 2)), + y.lightmapIdx = n.lightmapIdx), + i[f].push({ + geometry: y, + indices: u + }) + } + } + }, + Tf.prototype.getAttributeForLightmapWithDataMerged = function (A, e, t) { + var i = [], + o = new Uint32Array(A.I), + n = e.getLoader().getUV2ById("bmpk_" + t, o.length); + if (n) { + var r = n.lightmapIdx; + i = n.uv2 + } + for (var a = new Float32Array(A.P), s = new Float32Array(A.N), l = new Float32Array(A.UV), c = [], h = [], d = [], p = 0; o.length > p; p += 1) { + var g = o[p]; + c.push(a[3 * g]), + c.push(a[3 * g + 1]), + c.push(a[3 * g + 2]), + s.length > 0 && (h.push(s[3 * g]), + h.push(s[3 * g + 1]), + h.push(s[3 * g + 2])), + l.length > 0 && (d.push(l[2 * g]), + d.push(l[2 * g + 1])), + o[p] = p + } + return a = null, + s = null, + l = null, { + I: o, + UV2: i, + P: c, + N: h, + UV: d, + lightmapIdx: r + } + }, + Tf.prototype._dealDataMergedMeshs = function (A, e, t, i, o) { + if (0 !== e.mergedIdxs.length) { + var n = this, + r = this.mapMaterialIdToMergedNode, + a = e.mergedIdxs, + s = a.length, + l = e.mergedIdxs.length + e.mergeableIdxs.length, + c = A.getLoader().maxLoadTaskCount, + h = A.progressPercentage.load, + d = A.progressPercentage.collect, + p = Math.ceil(s / A.progressFrequency); + requestAnimationFrame(function e(g) { + var u = g; + return function () { + var g = null, + f = null; + for (f = u + p > s ? s : u + p, + g = u; f > g; g += 1) + n._collectDataMergedMeshesByIdxId(a[g], t, i, r), + g === f - 1 && (f !== s ? (A.dispatchEvent({ + type: Rc.ON_LOAD_PROGRESS, + progress: { + total: c, + loaded: (g / l * d + h) * c, + modelKey: A.modelKey + } + }), + requestAnimationFrame(e(g + 1))) : (A.dispatchEvent({ + type: Rc.ON_LOAD_PROGRESS, + progress: { + total: c, + loaded: (g / l * d + h) * c, + modelKey: A.modelKey + } + }), + o && o())) + } + }(0)) + } else + o && o() + }, + Tf.prototype._dealUnsharedMeshs = function (A, e, t) { + for (var i = this.mapMaterialIdToMergedNode, o = 0, n = A.length; n > o; o += 1) { + var r = t[A[o]], + a = r.IndexInfos, + s = e[a[0].meshId][0], + l = {}, + c = this._getMaterialKeyByNodeInfo(s); + void 0 === i[c] && (i[c] = []); + for (var h = 0, d = a.length; d > h; h += 1) + void 0 === l[(s = e[a[h].meshId][0]).userId] && (l[s.userId] = []), + a[h].userId = s.userId, + a[h].nodeId = s.nodeId, + l[s.userId].push(a[h]); + var p = new he; + p._visible = !0, + p.setIndex(new YA(new Uint32Array(r.index), 1)), + p.setAttribute("position", new YA(new Float32Array(r.position), 3)), + r.normal && p.setAttribute("normal", new YA(new Float32Array(r.normal), 3)), + r.uv && p.setAttribute("uv", new YA(new Float32Array(r.uv), 2)), + i[c].push({ + geometry: p, + indices: l + }) + } + }, + Tf.prototype._makeMeshNodes = function (A, e) { + Bh.time("makeMesh"); + var t = A.manager, + i = A.modelKey, + o = A._encodedDatabagId, + n = this._getNodeGroup(A), + r = this.mapMaterialIdToMergedNode; + for (var a in r) + for (var s = this.getPropertyValueByMaterialKey(a), l = r[a], c = 0, h = l.length; h > c; c += 1) { + var d = l[c].geometry, + p = l[c].indices; + if (!l[c].mesh) { + var g = null; + if ("lines" === s.type) + (g = new cf(d)).modelKey = i; + else { + var u = { + modelKey: i + }; + (g = new Kf(d)).spawn(u) + } + if (!uh.isEmptyObject(A.subModel)) { + var f = Object.keys(p)[0]; + if (f) { + var m = uh.getModelKeyFromComponentKey(f); + A.subModel[m] && g.matrix.copy(A.subModel[m]) + } + } + g._indicesGroup = p, + n.add(g), + l[c].mesh = g, + t.addMeshToOctantMap(o, a, new Eu(a, g)); + var C = function (e) { + p.hasOwnProperty(e) && p[e].forEach((function (t) { + A.addMeshToInfoMap(e, t.nodeId, g, t) + })) + }; + for (var y in p) + C(y); + p = null, + g = null + } + } + n.updateMatrixWorld(!0), + A.dispatchEvent({ + type: Rc.ON_LOAD_PROGRESS, + progress: { + total: A.getLoader().maxLoadTaskCount, + loaded: A.getLoader().maxLoadTaskCount, + modelKey: A.modelKey + } + }), + e && e(), + Bh.timeEnd("makeMesh") + }, + Tf.prototype.createMeshNodes = function (A, e) { + A.getModelDescriptor().getStandardNodeInfos() ? this._createGeometries(A, e) : e && e() + }, + Tf.prototype.applySelection = function (A) {}, + Tf.prototype.clearSelection = function (A) {}, + Tf.prototype.applyHover = function (A) {}, + Tf.prototype.clearHover = function (A) {}, + Tf.prototype.getMeshNode = function () { + return this.mapMaterialIdToMergedNode + }, + Tf.prototype._disposeMergedGeometries = function () { + for (var A in this.mapMaterialIdToMergedNode) { + for (var e = this.mapMaterialIdToMergedNode[A], t = 0, i = e.length; i > t; t += 1) { + e[t].geometry.dispose(), + delete e[t].geometry, + delete e[t].indices, + delete e[t].mesh + } + delete this.mapMaterialIdToMergedNode[A] + } + }, + Tf.prototype._getMaterialKeyByNodeInfo = function (A, e) { + if (e) { + var t = e.manager.getOverrideMaterialByNodeInfo(A); + A.materialId = t ? t.name : A.originMId + } + return uh.getCombinedKeyString([A.materialId, A.uv ? "1" : "0", A.type === $u.EnumNodeItemType.LINE ? "lines" : "meshes"]) + }, + Tf.prototype.getPropertyValueByMaterialKey = function (A) { + var e = uh.splitCombinedKeyString(A); + return { + materialId: e[0], + uvProp: e[1], + type: e[2] + } + }, + Tf.prototype.clearSelectedObjectIds = function () { + this.selectedObjectIds.length = 0 + }, + Tf.prototype.cacheSelectedObjectIds = function (A, e, t) { + this.selectedObjectIds.push({ + uid: A, + mKey: e, + idx: t + }) + }, + Tf.prototype.adjustVisibility = function (A, e) { + var t = this._getNodeGroup(A), + i = t.visible; + e && !t.bVisible || (t.visible = e), + t.bVisible = i + }, + Tf.prototype.changeVisibilityOfSelectedObjects = function (A, e) { + if (e) + for (var t = 0, i = this.selectedMeshes.length; i > t; t += 1) { + var o = this.selectedMeshes[t].object, + n = this.selectedMeshes[t].indices; + if (o) + for (var r = 0, a = n.length; a > r; r += 1) { + var s = o.geometry.groups[n[r].idx]; + s.start = n[r].start, + s.count = n[r].count + } + } + else { + this.selectedMeshes.length = 0; + for (var l = {}, c = 0, h = this.selectedObjectIds.length; h > c; c += 1) { + var d = this.selectedObjectIds[c].mKey, + p = this.selectedObjectIds[c].idx, + g = uh.getCombinedKeyString([d, p]); + if (!l[g]) { + l[g] = !0; + var u = this.mapMaterialIdToMergedNode[d][p], + f = u.mesh; + if (f) { + for (var m = [], C = u.geometry.groups, y = 0, v = C.length; v > y; y += 1) { + var I = C[y]; + I.materialIndex === zc.SELECTED && (m.push({ + idx: y, + start: I.start, + count: I.count + }), + I.start = 0, + I.count = 0) + } + m.length && this.selectedMeshes.push({ + object: f, + indices: m + }) + } + } + } + } + }, + Tf.prototype.changeVisibilityOfNonSelectedObjects = function (A, e) { + if (e) + for (var t = 0, i = this.nonSelectedMeshes.length; i > t; t += 1) { + var o = this.nonSelectedMeshes[t].object, + n = this.nonSelectedMeshes[t].indices; + if (n) + for (var r = 0, a = n.length; a > r; r += 1) { + var s = o.geometry.groups[n[r].idx]; + s.start = n[r].start, + s.count = n[r].count + } + else + o.visible = this.nonSelectedMeshes[t].visibility + } + else { + this.nonSelectedMeshes.length = 0; + for (var l = {}, c = 0, h = this.selectedObjectIds.length; h > c; c += 1) { + var d = this.selectedObjectIds[c]; + l[d.mKey] || (l[d.mKey] = {}), + l[d.mKey][d.idx] = !0 + } + for (var p in this.mapMaterialIdToMergedNode) { + var g = this.mapMaterialIdToMergedNode[p]; + if (l[p]) + for (var u = 0, f = g.length; f > u; u += 1) { + var m = g[u].mesh; + if (m) { + if (!l[p][u]) { + this.nonSelectedMeshes.push({ + object: m, + indices: null, + visibility: m.visible + }), + m.visible = !1; + continue + } + for (var C = [], y = m.geometry.groups, v = 0, I = y.length; I > v; v += 1) { + var E = y[v]; + E.materialIndex !== zc.SELECTED && (C.push({ + idx: v, + start: E.start, + count: E.count + }), + E.start = 0, + E.count = 0) + } + C.length > 0 && this.nonSelectedMeshes.push({ + object: m, + indices: C + }) + } + } + else + for (var B = 0, x = g.length; x > B; B += 1) { + var S = g[B].mesh; + S && (this.nonSelectedMeshes.push({ + object: S, + indices: null, + visibility: S.visible + }), + S.visible = !1) + } + } + } + }, + Tf.prototype.restoreVisibilityOfObjects = function () { + this.selectedMeshes.length = 0, + this.nonSelectedMeshes.length = 0 + }, + Tf.prototype.getBlinkMaterials = function () { + return this.blinkMaterials + }, + Tf.prototype.disposeBufferAfterVbo = function () { + if (!this.bufferDestroyed) { + var A = 0; + for (var e in this.mapMaterialIdToMergedNode) { + for (var t = this.mapMaterialIdToMergedNode[e], i = 0, o = t.length; o > i; i += 1) { + var n = t[i], + r = n.geometry; + if (null !== r) { + A += 1; + var a = e + "-" + i; + this.mapDestroyedBufferKey[a] || n.mesh.visible && (this.mapDestroyedBufferKey[a] = !0, + Tu.disposeBufferFromGeometry(r, ["normal", "uv", "uv2"])) + } + } + Object.keys(this.mapDestroyedBufferKey).length === A && (this.mapDestroyedBufferKey = {}, + this.bufferDestroyed = !0) + } + } + }, + Tf.prototype._traverseMeshNodeMap = function (A) { + for (var e in this.mapMaterialIdToMergedNode) + for (var t = this.mapMaterialIdToMergedNode[e], i = 0, o = t.length; o > i; i += 1) + A && A(e, t[i]) + }, + Tf.prototype.getGeometryBuffersByUserId = function (A, e) { + var t = [], + i = A.getDatabagId(); + return this._traverseMeshNodeMap((function (A, o) { + var n = o.indices[e]; + if (n) + for (var r = o.geometry, a = r.getIndex().array, s = r.getAttribute("position").array, l = 0, c = n.length; c > l; l += 1) { + var h = n[l], + d = h.indexStart, + p = h.indexStart + h.indexCount, + g = a.slice(d, p), + u = s.slice(d = h.positionStart, p = h.positionStart + h.positionCount); + d /= 3, + g.forEach((function (A, e, t) { + t[e] -= d + })), + t.push({ + databagId: i, + nodeId: h.nodeId, + position: u, + index: g + }) + } + })), + t + }, + Tf.prototype.getPickingNodeGenerator = function () { + return this.pickingNodeGenerator || (this.pickingNodeGenerator = new nf(this)), + this.pickingNodeGenerator + }; + var Df = function (A) { + of .call(this, A), + this.nodeGroupName = "PickingBatchedWireFrameGroup" + }; + Object.assign(Df.prototype, of .prototype), + eu(Df, [{ + key: "disposePickingNodeById", + value: function (A) { + for (var e = this.pickingNodeMap[A], t = 0, i = e.length; i > t; t += 1) + e[t]._indicesGroup = null, + e[t].material = null, + e[t].geometry.dispose(), + e[t] = null + } + }, { + key: "generatePickingMeshes", + value: function () { + var A = this.manager.getWireFrameLineSegments(); + A || (this.manager.generateWireframe(), + A = this.manager.getWireFrameLineSegments()); + for (var e = 0, t = A.length; t > e; e += 1) { + var i = A[e].geometry, + o = new he; + o.setAttribute("position", i.getAttribute("position")), + o.setIndex(i.getIndex()); + var n = new jo(o, Kd.DefaultMaterial); + (new M).copy(A[e].matrix).multiply(this.manager.model.getModelMatrix()).decompose(n.position, n.quaternion, n.scale), + n._indicesGroup = A[e]._indicesGroup, + n.frustumCulled = !1, + n.renderOrder = 1, + this.addToPickingNodeMap(e, [n]) + } + } + }, { + key: "_rebuildGeometryGroup", + value: function (A, e, t) { + var i, o = this.manager.manager, + n = 0, + r = 0, + a = 0, + s = A._indicesGroup, + l = Object.keys(s), + c = [], + h = {}; + e.length > l.length ? (c = l, + h = t) : (c = e, + h = s); + var d = []; + for (a = 0, + i = c.length; i > a; a += 1) { + var p = c[a]; + if (o.isPickableNode(p) && h[p]) { + var g = s[p]; + if (g && g.length > 0) + for (n = 0, + r = g.length; r > n; n += 1) + d.push({ + indexStart: g[n].indexStart, + indexCount: g[n].indexCount + }) + } + } + A.visible = !0; + var u = A.geometry; + if (u.clearGroups(), + 0 !== d.length) + for (d.sort((function (A, e) { + return A.indexStart - e.indexStart + })), + n = 0, + r = d.length; r > n; n += 1) { + var f = d[n].indexStart, + m = d[n].indexCount; + if (0 === n) + u.addGroup(f, m, 0); + else + f === d[n - 1].indexStart + d[n - 1].indexCount ? u.groups[u.groups.length - 1].count += m : u.addGroup(f, m, 0) + } + else + A.visible = !1 + } + }, { + key: "updatePickingMeshesState", + value: function (A, e, t) { + for (var i = this.pickingNodeMap, o = Object.keys(i), n = 0, r = o.length; r > n; n += 1) + for (var a = i[o[n]], s = 0, l = a.length; l > s; s += 1) + a[s].material = [A], + a[s].visible = !1, + this._rebuildGeometryGroup(a[s], e, t) + } + }]); + var Lf = function (A) { + this.manager = A, + this.model = A.model, + this.generated = !1, + this.wireframeLineSegment = null, + this.wireframeGeometryMap = null, + this.wireframeDataMap = null, + this.userIdMapForNoWireFrame = {} + }; + + function Nf(A, e, t, i) { + for (var o = A.getAttribute("position").array, n = e; t > n; n += 1) + o[3 * n] += i.x, + o[3 * n + 1] += i.y, + o[3 * n + 2] += i.z; + A.getAttribute("position").needsUpdate = !0 + } + Lf.prototype.destroy = function () { + this.clearData(), + this.manager = null, + this.userIdMapForNoWireFrame = null, + this.pickingNodeGenerator && (this.pickingNodeGenerator.destroy(), + this.pickingNodeGenerator = null) + }, + Lf.prototype.clearData = function () { + this.generated = !1, + this.bufferDestroyed = !1, + this.wireframeLineSegment && (this.wireframeLineSegment._indicesGroup = null, + this.wireframeLineSegment.geometry.dispose(), + this.wireframeLineSegment = null), + this.pickingNodeGenerator && this.pickingNodeGenerator.clearData(), + this.wireframeGeometryMap = null, + this.userIdMapForNoWireFrame = {} + }, + Lf.prototype._createWireframeGeometry = function (A, e) { + if (this.wireframeGeometryMap || (this.wireframeGeometryMap = {}), + this.wireframeDataMap || (this.wireframeDataMap = {}), + !this.wireframeGeometryMap[e.nodeId]) { + var t = this._getWireframeData(A, e), + i = new he; + i.setIndex(new $A(t.index, 1)), + i.setAttribute("position", new YA(t.buffer, 3)), + i._userId = e.userId, + this.wireframeGeometryMap[e.nodeId] = i + } + }, + Lf.prototype._getWireframeData = function (A, e) { + this.wireframeDataMap || (this.wireframeDataMap = {}); + var t = {}; + if (!this.wireframeDataMap[e.nodeId]) { + for (var i = A.attributes.position.array.slice(e.positionStart, e.positionStart + e.positionCount), o = A.getIndex().array.slice(e.indexStart, e.indexStart + e.indexCount), n = 0, r = o.length; r > n; n += 1) + o[n] -= e.positionStart / 3; + var a = Up(i, o); + return t = Tu.reducedGeometry(i, a), + this.wireframeDataMap[e.nodeId] = t, + t + } + return this.wireframeDataMap[e.nodeId] + }, + Lf.prototype._createWireframeGeometries = function (A) { + A || (A = this.model); + var e = A.manager.filter, + t = A.getModelDescriptor().getStandardNodeInfos(); + + function i(A) { + var i = t[A]; + return !(i && e._hasRenderWithBoardlineFilter() && !e._isRenderWithBoardline(i[0])) + } + var o = this.manager.getMeshNode(); + for (var n in Bh.time("createWireframeGeometry"), + o) { + if ("meshes" === this.manager.getPropertyValueByMaterialKey(n).type) + for (var r = o[n], a = 0, s = r.length; s > a; a += 1) { + var l, c = r[a]; + if (c.RenderTypeChange) { + for (var h = (l = c.geometry.clone()).attributes.position.array, d = [], p = new y, g = c.mesh.matrixWorld, u = 0, f = h.length; f > u; u += 3) + p.set(h[u], h[u + 1], h[u + 2]).applyMatrix4(g), + d.push(p.x, p.y, p.z); + l.setAttribute("position", new YA(new Float32Array(d), 3)) + } else + l = c.geometry; + if (null !== l) { + var m = c.indices; + for (var C in m) { + i(C) || (this.userIdMapForNoWireFrame[C] = !0); + for (var v = m[C], I = 0, E = v.length; E > I; I += 1) + this._createWireframeGeometry(l, v[I]) + } + } + } + } + return Bh.timeEnd("createWireframeGeometry"), + !0 + }, + Lf.prototype._makeWireframe = function (A) { + A || (A = this.model); + var e = {}, + t = A.getWireframeMaterial(); + for (var i in this.wireframeGeometryMap) { + var o = this.wireframeGeometryMap[i], + n = o._userId, + r = new jo(o, t); + r.userId = n, + r.nodeId = i, + e[n] || (e[n] = []), + e[n].push(r), + r = null + } + var a = []; + for (var n in e) + for (var s = e[n], l = 0, c = s.length; c > l; l += 1) + a.push(s[l]); + if (a.length > 0) { + var h = {}, + d = Tu.mergeBufferGeometriesFromMeshs(a, h); + if (d && (this.wireframeLineSegment = new jo(d, A.getWireframeMaterial()), + this.wireframeLineSegment.matrixAutoUpdate = !1, + this.wireframeLineSegment._indicesGroup = h, + !uh.isEmptyObject(A.subModel))) { + var p = Object.keys(h)[0]; + if (p) { + var g = uh.getModelKeyFromComponentKey(p); + A.subModel[g] && this.wireframeLineSegment.matrix.copy(A.subModel[g]) + } + } + } + for (var n in a = null, + e) + delete e[n]; + e = null, + this.wireframeGeometryMap = null + }, + Lf.prototype.generateWireframe = function (A, e) { + A || (A = this.model), + this.generated || (this._createWireframeGeometries(A), + this._makeWireframe(A), + this.generated = !0, + e && e()) + }, + Lf.prototype.update = function (A) { + if (this.manager.hasNodeInfo(A)) + if (A.isActivateWireframe()) { + if (this.generateWireframe(A), + this.wireframeLineSegment) { + var e = this._getNodeGroup(A); + e.clear(), + e.add(this.wireframeLineSegment), + e.updateMatrixWorld(!0) + } + } else + A._hasNodeGroup(gp.WIREFRAME) && A._removeNodeGroup(gp.WIREFRAME) + }, + Lf.prototype.rebuildIndices = function (A) { + if (this.needDealWireframeLine(A)) { + this.wireframeLineSegment.visible = !0; + var e = this.wireframeLineSegment._indicesGroup, + t = this.wireframeLineSegment.geometry; + t.clearGroups(); + var i = A.getWireframeMaterial(); + this.wireframeLineSegment.material = i; + var o = this.manager.getFilteredUserIdsForWireFrame(), + n = Boolean(o && Object.keys(o).length); + if (this._existHiddenUserId() || n) { + var r = [], + a = 0, + s = 0, + l = []; + for (var c in e) + if (!this._isHiddenUserId(c)) { + var h = e[c]; + if (h && h.length > 0) { + if (o[c]) { + var d = o[c], + p = l.indexOf(d); + for (-1 === p && (l.push(d), + p = l.length - 1), + a = 0, + s = h.length; s > a; a += 1) + r.push({ + indexStart: h[a].indexStart, + indexCount: h[a].indexCount, + state: 1 + p + }); + continue + } + for (a = 0, + s = h.length; s > a; a += 1) + r.push({ + indexStart: h[a].indexStart, + indexCount: h[a].indexCount, + state: 0 + }) + } + } + if (0 !== r.length) { + for (r.sort((function (A, e) { + return A.indexStart - e.indexStart + })), + a = 0, + s = r.length; s > a; a += 1) { + var g = r[a].indexStart, + u = r[a].indexCount, + f = r[a].state; + if (0 === a) + t.addGroup(g, u, f); + else + f === r[a - 1].state && g === r[a - 1].indexStart + r[a - 1].indexCount ? t.groups[t.groups.length - 1].count += u : t.addGroup(g, u, f) + } + var m = A.getFilter(), + C = [i]; + for (a = 0, + s = l.length; s > a; a += 1) { + var y = m._getMaterialByName(l[a]); + C.push(y) + } + this.wireframeLineSegment.material = C + } else + this.wireframeLineSegment.visible = !1 + } + } + }, + Lf.prototype.explode = function (A, e, t) {}, + Lf.prototype.explosion = function (A, e) { + if (this.wireframeLineSegment) { + var t = Object.keys(this.wireframeLineSegment._indicesGroup); + e || (e = {}), + e.componentKey = t, + this.componentsExplosion(A, e) + } + }, + Lf.prototype.closeExplosion = function (A) { + this.explosion(A) + }, + Lf.prototype.componentsExplosion = function (A, e) { + if (this.wireframeLineSegment) + for (var t = Array.isArray(e.componentKey) ? e.componentKey : [e.componentKey], i = this.wireframeLineSegment._indicesGroup, o = this.wireframeLineSegment.geometry, n = 0, r = t.length; r > n; n += 1) { + var a = t[n]; + if (a) { + var s = A.getModelDescriptor().getStandardNodeInfosById(a); + if (s) { + var l = i[a]; + if (l) { + var c = s[0]; + if (!c || !c.userData || !c.userData.changeOffset) + continue; + for (var h = 0, d = l.length; d > h; h += 1) { + var p = l[h].positionStart; + Nf(o, p, p + l[h].positionCount, c.userData.changeOffset) + } + c.userData.changeOffset = void 0 + } + } + } + } + }, + Lf.prototype.closeComponentsExplosion = function (A, e) { + this.componentsExplosion(A, { + componentKey: e + }) + }, + Lf.prototype._getNodeGroup = function (A) { + return A._getNodeGroup(gp.WIREFRAME, { + globalSpace: !0 + }) + }, + Lf.prototype.needDealWireframeLine = function (A) { + return !(!A.isActivateWireframe() || !this.wireframeLineSegment) + }, + Lf.prototype.adjustVisibility = function (A, e) { + if (this.needDealWireframeLine(A)) { + var t = this._getNodeGroup(A), + i = t.visible; + e && !t.bVisible || (t.visible = e), + t.bVisible = i + } + }, + Lf.prototype.changeVisibilityOfSelectedObjects = function (A, e) {}, + Lf.prototype.changeVisibilityOfNonSelectedObjects = function (A, e) { + this.adjustVisibility(A, e) + }, + Lf.prototype.restoreVisibilityOfObjects = function () {}, + Lf.prototype.disposeBufferAfterVbo = function () { + this.generated && !this.bufferDestroyed && this.wireframeLineSegment && this.wireframeLineSegment.visible && (this.bufferDestroyed = !0, + Tu.disposeBufferFromGeometry(this.wireframeLineSegment.geometry, ["position", "normal", "uv", "uv2"])) + }, + Lf.prototype._existHiddenUserId = function () { + var A = this.manager.getHiddenUserIds(); + return !!(this.userIdMapForNoWireFrame && Object.keys(this.userIdMapForNoWireFrame).length || A && Object.keys(A).length) + }, + Lf.prototype._isHiddenUserId = function (A) { + if (this.userIdMapForNoWireFrame[A]) + return !0; + var e = this.manager.getHiddenUserIds(); + return !(!e || !e[A]) + }, + Lf.prototype.getWireFrameLineSegments = function () { + return this.wireframeLineSegment ? [this.wireframeLineSegment] : null + }, + Lf.prototype.getPickingNodeGenerator = function () { + return this.pickingNodeGenerator || (this.pickingNodeGenerator = new Df(this)), + this.pickingNodeGenerator + }; + var Of = function (A, e) { + this.model = e, + this.meshManager = new Tf(this), + A || (this.wireframeManager = new Lf(this)) + }; + Of.prototype.destroy = function () { + this.meshManager.destroy(), + this.meshManager = null, + this.wireframeManager.destroy(), + this.wireframeManager = null, + this._clearFilteredState(), + this._clearSelectedState(), + this._clearHoveredState(), + this._clearBlinkedState() + }, + Of.prototype.updateNodes = function (A) { + var e; + e = this._collectModelFiltered(A), + this.meshManager.update(A, e), + this.wireframeManager.update(A) + }, + Of.prototype.generateWireframe = function (A, e) { + this.wireframeManager.generateWireframe(A, e) + }, + Of.prototype.asyncGenerateWireframe = function (A, e) { + this.wireframeManager.asyncGenerateWireframe(A, e) + }, + Of.prototype.rebuildIndices = function (A) { + this._rebuildIndices(A) + }, + Of.prototype.clearData = function () { + this.meshManager.clearData(), + this.wireframeManager.clearData(), + this._clearFilteredState(), + this._clearSelectedState(), + this._clearHoveredState(), + this._clearBlinkedState() + }, + Of.prototype.createMeshNodes = function (A, e) { + this.meshManager.createMeshNodes(A, e) + }, + Of.prototype.createBatchedMeshNodes = function (A, e) { + this.meshManager.createBatchedMeshNodes(A, e) + }, + Of.prototype.asyncCreateMeshNodes = function (A, e, t) { + this.meshManager.asyncCreateMeshNodes(A, e, t) + }, + Of.prototype.hasNodeInfo = function (A) { + return Boolean(A.getModelDescriptor().getStandardNodeInfos()) + }, + Of.prototype.disposeGeometry = function (A) { + this.meshManager.disposeGeometry(A) + }, + Of.prototype.getMeshNode = function () { + return this.meshManager.getMeshNode() + }, + Of.prototype.getPropertyValueByMaterialKey = function (A) { + return this.meshManager.getPropertyValueByMaterialKey(A) + }, + Of.prototype.getFilteredUserIds = function () { + return this.mapMaterialIdToUserIdsForFilter + }, + Of.prototype.getSelectedUserIds = function () { + return this.mapMaterialIdToUserIdsForSelection + }, + Of.prototype.getHoveredUserIds = function () { + return this.mapMaterialIdToUserIdsForHover + }, + Of.prototype.getBlinkedUserIds = function () { + return this.mapBlinkUserIds + }, + Of.prototype.getHiddenUserIds = function () { + return this.hiddenUserIdSetObject + }, + Of.prototype.getTransparentUserIds = function () { + return this.transparentUserIdSetObject + }, + Of.prototype.applyFilter = function (A, e) { + console.log('applyFilter :>>dddddddddd '); + if (this.hasNodeInfo(A)) { + var t = null; + t = e || A.getModelDescriptor().getStandardUserIds(); + var i = A.getModelDescriptor().getStandardNodeInfos(); + this._collectFilteredUserIds(A, t, i), + this._collectFilteredUserIdsForWireFrame(A, t, i), + this._collectSelectedUserIds(A.manager.sceneState.selectionSet, i), + this._collectHoveredUserIds(A.manager.sceneState.hoverId, i), + this._rebuildIndices(A), + this.updateNodes(A) + } + }, + Of.prototype.applySelection = function (A) { + console.log('applySelection16') + if (this.hasNodeInfo(A)) { + var e = A.getModelDescriptor().getStandardNodeInfos(); + this._clearSelectedState(A), + this._clearHoveredState(A), + this._collectSelectedUserIds(A.manager.sceneState.selectionSet, e), + this._collectHoveredUserIds(A.manager.sceneState.hoverId, e), + this._rebuildIndices(A), + this.updateNodes(A) + } + }, + Of.prototype.clearSelection = function (A) { + this._clearSelectedState(A), + this.applyHover(A) + }, + Of.prototype.applyHover = function (A) { + if (this.hasNodeInfo(A)) { + var e = A.getModelDescriptor().getStandardNodeInfos(); + this._clearHoveredState(A), + this._collectHoveredUserIds(A.manager.sceneState.hoverId, e), + this._rebuildIndices(A), + this.updateNodes(A) + } + }, + Of.prototype.clearHover = function (A) { + this._clearHoveredState(A), + this._rebuildIndices(A), + this.updateNodes(A) + }, + Of.prototype.applyBlink = function (A) { + if (this.hasNodeInfo(A)) { + var e = A.getModelDescriptor().getStandardNodeInfos(); + this._clearBlinkedState(A), + this._clearHoveredState(A), + this._collectBlinkedUserIds(A.manager.sceneState.getBlinkComponentsIdMap(), e), + this._collectHoveredUserIds(A.manager.sceneState.hoverId, e), + this._rebuildIndices(A), + this.updateNodes(A) + } + }, + Of.prototype.clearBlink = function (A) { + this._clearBlinkedState(A), + this.applyHover(A) + }, + Of.prototype.applyReplacement = function (A) { + this._rebuildIndices(A), + this.updateNodes(A) + }, + Of.prototype._collectFilteredUserIds = function (A, e, t) { + var i = A.manager.filter, + o = i._hasHiddenFileIdFilter(), + n = i._hasVisibleFilter(), + r = i._hasOverrideMaterialFilter(), + a = i._hasTransparentFilter(), + s = A.hasReplacedUserId(), + l = A.hasHiddenSourceObjectUserId(), + c = this.mapMaterialIdToUserIdsForFilter = {}; + if (this.hiddenUserIdSetObject = {}, + this.overrideUserIdSetObject = {}, + this.transparentUserIdSetObject = {}, + o || n || r || a || s || l) + for (var h = 0; e.length > h; h += 1) { + var d = e[h], + p = t[d]; + if (p && p.length) + for (var g = 0, u = p.length; u > g; g += 1) { + var f = p[g]; + if (o && i._isHiddenFileId(f) || n && !1 === i._isVisible(f) || A.isReplacedUserId(d) || A.isHiddenSourceObjectUserId(d)) + void 0 === c[f.materialId] && (c[f.materialId] = {}), + void 0 === c[f.materialId][zc.HIDDEN] && (c[f.materialId][zc.HIDDEN] = {}), + c[f.materialId][zc.HIDDEN][d] = !0, + this.hiddenUserIdSetObject[d] = !0; + else if (a && i._isTransparent(f)) + void 0 === c[f.materialId] && (c[f.materialId] = {}), + void 0 === c[f.materialId][zc.TRANSPARENT] && (c[f.materialId][zc.TRANSPARENT] = {}), + c[f.materialId][zc.TRANSPARENT][d] = !0, + this.transparentUserIdSetObject[d] = !0; + else if (r && i._hasOverrideMaterial(f)) { + var m = i._getOverrideMaterial(f); + if (Array.isArray(m)) { + var C = g, + y = m.find((function (A) { + return !!A.mapNodeIdToOrigMatId && Object.keys(A.mapNodeIdToOrigMatId).includes(f.nodeId) + })), + v = y ? y.mapNodeIdToOrigMatId[f.nodeId] : m[C].materialId, + I = y ? y.materialId : ""; + "" !== I && (void 0 === c[v] && (c[v] = {}), + void 0 === c[v][zc.OVERRIDED] && (c[v][zc.OVERRIDED] = {})), + c[v] || (c[v] = {}, + c[v][zc.OVERRIDED] = {}), + c[v][zc.OVERRIDED][d] = I, + this.overrideUserIdSetObject[d] || (this.overrideUserIdSetObject[d] = []), + this.overrideUserIdSetObject[d][C] = I + } else { + var E = null !== m ? m.name : ""; + "" !== E && (void 0 === c[f.materialId] && (c[f.materialId] = {}), + void 0 === c[f.materialId][zc.OVERRIDED] && (c[f.materialId][zc.OVERRIDED] = {}), + c[f.materialId][zc.OVERRIDED][d] = E, + this.overrideUserIdSetObject[d] = E) + } + } + } + } + }, + Of.prototype._collectFilteredUserIdsForWireFrame = function (A, e, t) { + var i = A.getFilter(), + o = i._hasOverrideMaterialFilterForWireFrame(); + if (this.mapFilteredUserIdsForWireFrame = {}, + o) + for (var n = 0; e.length > n; n += 1) { + var r = e[n]; + if (!this.hiddenUserIdSetObject[r]) { + var a = t[r]; + if (a && a.length) + for (var s = 0, l = a.length; l > s; s += 1) { + var c = a[s]; + if (i._hasOverrideMaterialForWireFrame(c)) { + var h = i._getOverrideMaterialForWireFrame(c), + d = null !== h ? h.name : ""; + "" !== d && (this.mapFilteredUserIdsForWireFrame[r] = d) + } + } + } + } + }, + Of.prototype._collectModelFiltered = function (A) { + var e = A.manager.filter, + t = A.modelKey, + i = e._hasModelOverrideMaterialFilter(), + o = e._hasModelTransparentFilter(), + n = A.manager.modelState.selectionSet; + return A.manager.modelState.hoverId === t ? A.manager.modelState.getHoverMaterial() : n.hasOwnProperty(A.modelKey) ? A.manager.modelState.selectionMaterial : o && e._isModelTransparent(t) ? e._getMaterialByName("scene") : i && e._hasModelOverrideMaterial(t) ? e._getModelOverrideMaterial(t) : null + }, + Of.prototype._clearFilteredState = function () { + this.mapMaterialIdToUserIdsForFilter = null + }, + Of.prototype._collectSelectedUserIds = function (A, e) { + var t = this.mapMaterialIdToUserIdsForSelection = {}; + for (var i in A) + if (this.model.modelKey === i) + for (var o in A[i]) { + var n = e[o]; + if (n && n.length) + for (var r = 0, a = n.length; a > r; r += 1) + void 0 === t[n[r].materialId] && (t[n[r].materialId] = {}), + void 0 === t[n[r].materialId][o] && (t[n[r].materialId][o] = !0) + } + }, + Of.prototype._clearSelectedState = function () { + this.mapMaterialIdToUserIdsForSelection && (this.mapMaterialIdToUserIdsForSelection = null) + }, + Of.prototype._collectHoveredUserIds = function (A, e) { + var t = this.mapMaterialIdToUserIdsForHover = {}; + if (A && e[A]) + for (var i = e[A], o = 0, n = i.length; n > o; o += 1) + void 0 === t[i[o].materialId] && (t[i[o].materialId] = {}), + void 0 === t[i[o].materialId][A] && (t[i[o].materialId][A] = !0) + }, + Of.prototype._clearHoveredState = function () { + this.mapMaterialIdToUserIdsForHover && (this.mapMaterialIdToUserIdsForHover = null) + }, + Of.prototype._collectBlinkedUserIds = function (A, e) { + var t = this.mapBlinkUserIds = {}; + for (var i in A) { + var o = e[i]; + if (o && o.length) + for (var n = 0, r = o.length; r > n; n += 1) + void 0 === t[o[n].materialId] && (t[o[n].materialId] = {}), + void 0 === t[o[n].materialId][i] && (t[o[n].materialId][i] = !0) + } + }, + Of.prototype.calculateClippingIds = function (A, e) { + this.meshManager.calculateClippingIds(A, e) + }, + Of.prototype._clearBlinkedState = function () { + this.mapBlinkUserIds && (this.mapBlinkUserIds = null) + }, + Of.prototype._rebuildIndices = function (A) { + this.meshManager.rebuildIndices(A), + this.wireframeManager.rebuildIndices(A) + }, + Of.prototype.clearCachedData = function () { + this.meshManager.clearAllNodeBuffer() + }, + Of.prototype.getMeshesByUserIds = function (A, e) { + return this.meshManager.getMeshesByUserIds(A, e) + }, + Of.prototype.adjustVisibility = function (A, e) { + this.meshManager.adjustVisibility(A, e), + this.wireframeManager.adjustVisibility(A, e) + }, + Of.prototype.changeVisibilityOfSelectedObjects = function (A, e) { + this.meshManager.changeVisibilityOfSelectedObjects(A, e), + this.wireframeManager.changeVisibilityOfSelectedObjects(A, e) + }, + Of.prototype.changeVisibilityOfNonSelectedObjects = function (A, e) { + this.meshManager.changeVisibilityOfNonSelectedObjects(A, e), + this.wireframeManager.changeVisibilityOfNonSelectedObjects(A, e) + }, + Of.prototype.restoreVisibilityOfObjects = function () { + this.meshManager.restoreVisibilityOfObjects(), + this.wireframeManager.restoreVisibilityOfObjects() + }, + Of.prototype.disposeBufferAfterVbo = function () { + this.meshManager.disposeBufferAfterVbo(), + this.wireframeManager.disposeBufferAfterVbo() + }, + Of.prototype.getGeometryBuffersByUserId = function (A, e) { + return this.meshManager.getGeometryBuffersByUserId(A, e) + }, + Of.prototype.explosion = function (A, e) { + this.meshManager.explosion(A, e), + this.wireframeManager.explosion(A, e) + }, + Of.prototype.closeExplosion = function (A) { + this.meshManager.closeExplosion(A), + this.wireframeManager.closeExplosion(A) + }, + Of.prototype.componentsExplosion = function (A, e) { + this.meshManager.componentsExplosion(A, e), + this.wireframeManager.componentsExplosion(A, e) + }, + Of.prototype.closeComponentsExplosion = function (A, e) { + this.meshManager.closeComponentsExplosion(A, e), + this.wireframeManager.closeComponentsExplosion(A, e) + }, + Of.prototype.isPickableNode = function (A) { + var e = this.getHiddenUserIds(); + if (e && e[A]) + return !1; + var t = this.getTransparentUserIds(); + return !t || !t[A] + }, + Of.prototype.isHiddenNode = function (A) { + var e = this.getHiddenUserIds(); + return !(!e || !e[A]) + }, + Of.prototype.getMeshManager = function () { + return this.meshManager + }, + Of.prototype.getWireFrameManager = function () { + return this.wireframeManager + }, + Of.prototype.getFilteredUserIdsForWireFrame = function () { + return this.mapFilteredUserIdsForWireFrame + }; + var Vf = function (A) { + of .call(this, A), + this.nodeGroupName = "PickingInstancedMeshGroup" + }; + + function Gf(A, e, t) { + for (var i = A.getAttribute("mcol3").array, o = 0; e.length > o; o += 1) { + var n = e[o]; + i[3 * n] += t.x, + i[3 * n + 1] += t.y, + i[3 * n + 2] += t.z + } + A.getAttribute("mcol3").needsUpdate = !0 + } + Object.assign(Vf.prototype, of .prototype), + eu(Vf, [{ + key: "generatePickingMeshes", + value: function () { + var A = this, + e = this.manager, + t = e.cachedInstance, + i = !vc.BatchMergeEnabled; + e.traverseInstanceNodeMap(null, (function (e, o) { + for (var n = [], r = 0, a = o.length; a > r; r += 1) { + var s = o[r].geometry, + l = o[r], + c = new Na; + c.setAttribute("position", s.getAttribute("position")), + c.setAttribute("mcol0", s.getAttribute("mcol0")), + c.setAttribute("mcol1", s.getAttribute("mcol1")), + c.setAttribute("mcol2", s.getAttribute("mcol2")), + c.setAttribute("mcol3", s.getAttribute("mcol3")), + c.setAttribute("vState", new Oa(new Float32Array(t.vState[e]), 1, !1, 1)), + c.setIndex(s.getIndex()); + var h = new Ue(c, Kd.DefaultMaterial); + l.matrixWorld.decompose(h.position, h.quaternion, h.scale), + h.name = e, + h.frustumCulled = !1, + h.renderOrder = i ? 1 : 0, + n.push(h) + } + A.addToPickingNodeMap(e, n) + })) + } + }, { + key: "updatePickingMeshesState", + value: function (A, e, t) { + if (this.pickingNodeMap) + for (var i = this.manager.manager, o = this.pickingNodeMap, n = 0, r = e.length; r > n; n += 1) { + var a = e[n]; + if (i.isPickableNode(a)) { + var s = i.getMeshManager().getNodeIdxMapByUserId(a); + if (s) + for (var l = Object.keys(s), c = 0, h = l.length; h > c; c += 1) { + var d = l[c], + p = o[d]; + if (p) + for (var g = s[d], u = 0, f = p.length; f > u; u += 1) { + var m = p[u]; + m.material = A, + m.visible = !0; + for (var C = m.geometry, y = C.getAttribute("vState").array, v = 0, I = g.length; I > v; v += 1) + y[g[v]] = Hc.NONE; + C.getAttribute("vState").needsUpdate = !0 + } + } + } + } + } + }, { + key: "resetPickingMeshesState", + value: function () { + if (this.pickingNodeMap) + for (var A = this.pickingNodeMap, e = Object.keys(A), t = 0, i = e.length; i > t; t += 1) + for (var o = A[e[t]], n = 0, r = o.length; r > n; n += 1) + o[n].visible = !1, + o[n].geometry.getAttribute("vState").array.fill(Hc.HIDDEN), + o[n].geometry.getAttribute("vState").needsUpdate = !0 + } + }]); + var Pf = function (A) { + return Rf.call(this), + this.manager = A, + this.instanceGeometryMap = {}, + this.bufferAttributeMap = {}, + this.instanceNodeMap = {}, + this.nodeIdxMapFromUserId = {}, + this.matrixInfoMapFromUserId = {}, + this.cachedInstance = { + vState: {}, + vState2: {}, + vColor: {}, + vMirror: {}, + mcol0: {}, + mcol1: {}, + mcol2: {}, + mcol3: {}, + muvCol0: {}, + muvCol1: {}, + muvCol2: {}, + userId: {}, + nodeId: {} + }, + this.selectedMeshes = [], + this.nonSelectedMeshes = [], + this.selectedObjectIds = [], + this + }; + (Pf.prototype = Object.create(Rf.prototype)).destroy = function () { + this.cachedInstance = {}, + this.instanceNodeMap = {}, + this.bufferAttributeMap = {}, + this.nodeIdxMapFromUserId = {}, + this.matrixInfoMapFromUserId = {}, + this.disposeInstanceGeometries(), + this.instanceGeometryMap = {}, + this.manager = null, + this.selectedMeshes = [], + this.nonSelectedMeshes = [], + this.selectedObjectIds = [] + }, + Pf.prototype.clearData = function () { + this.bufferDestroyed = !1, + this.disposeGeometries(), + this.disposeInstanceGeometries(), + this.clearInstanceCache(), + this.pickingNodeGenerator && this.pickingNodeGenerator.clearData() + }, + Pf.prototype.clearInstanceCache = function () { + this.cachedInstance.vState = {}, + this.cachedInstance.vState2 = {}, + this.cachedInstance.vColor = {}, + this.cachedInstance.vMirror = {}, + this.cachedInstance.mcol0 = {}, + this.cachedInstance.mcol1 = {}, + this.cachedInstance.mcol2 = {}, + this.cachedInstance.mcol3 = {}, + this.cachedInstance.muvCol0 = {}, + this.cachedInstance.muvCol1 = {}, + this.cachedInstance.muvCol2 = {}, + this.bufferAttributeMap = {}, + this.nodeIdxMapFromUserId = {}, + this.instanceNodeMap = {}, + this.instanceGeometryMap = {}, + this.matrixInfoMapFromUserId = {}, + this.geometries = {} + }, + Pf.prototype.updateNodes = function (A) { + this._getNodeGroup(A).visible = !A.isOnlyWireframe() + }, + Pf.prototype.createMeshNodes = function (A, e) { + this._createInstanceGeometries(A, e), + this._makeInstanceNodes(A) + }, + Pf.prototype.disposeInstanceGeometries = function () { + this.traverseInstanceGeometryMap((function (A, e) { + for (var t = 0, i = e.length; i > t; t += 1) + e[t].dispose() + })) + }, + Pf.prototype._createInstanceGeometries = function (A, e) { + Bh.time("createInstanceGeometries"); + var t = this; + A.getModelDescriptor().traverseInstancedNodeInfos(e, (function (e, i) { + for (var o = 0, n = i.length; n > o; o += 1) { + var r = i[o], + a = t.getGeometryByNodeInfo(A, r); + if (a) { + var s = A.manager.getOverrideMaterialByNodeInfo(r); + s && (r.materialId = s.name); + var l = t.getMeshIdByNodeInfo(r), + c = t.cacheInstanceAttributeStateBy(A, l, a, r, s); + t.cacheNodeIdxByUserId(r.userId, l, c), + t.cacheMatrixInfoByUserId(r.userId, l, { + matrix: r.matrix, + boundingBox: r.boundingBox + }), + t.cacheInstanceGeometries(l, a) + } + } + })), + Bh.timeEnd("createInstanceGeometries") + }, + Pf.prototype._createBatchedInstanceGeometries = function (A, e) { + var t = A.materialManager.getMaterialById(e.materialKey), + i = A.getModelDescriptor(); + if (!t) { + var o = i.getNodeInfosByNodeId(e.nodeIdInfo[0]); + if (!o) + return; + e.materialKey = o.materialId, + t = A.materialManager.getMaterialById(e.materialKey), + e.color = []; + for (var n = 0, r = e.nodeIdInfo.length; r > n; n += 1) + e.color.push(t.color.r, t.color.g, t.color.b, t.opacity) + } + var a = !1; + t.aoMap && (a = !0), + e.hasUV2 = a; + var s = uh.getCombinedKeyString([e.materialKey, e.geoId]), + l = this.cachedInstance; + if (e.nodeIdInfo.length < 1) + Bh.error("node 数量为 0 "); + else if (l.vState[s]) + Bh.warn("实例化几何已存在:", s); + else { + l.vState[s] = new Float32Array(e.nodeIdInfo.length), + l.vColor[s] = e.color, + l.vMirror[s] = new Float32Array(e.nodeIdInfo.length), + l.mcol0[s] = e.mcol0, + l.mcol1[s] = e.mcol1, + l.mcol2[s] = e.mcol2, + l.mcol3[s] = e.mcol3, + l.muvCol0[s] = [], + l.muvCol1[s] = [], + l.muvCol2[s] = [], + l.userId[s] = [], + l.nodeId[s] = []; + for (var c = new M, h = [], d = 0, p = e.nodeIdInfo.length; p > d; d += 1) + h = [], + l.userId[s].push(e.componentKeyInfo[d]), + l.nodeId[s].push(e.nodeIdInfo[d]), + h.push(e.mcol0[3 * d]), + h.push(e.mcol0[3 * d + 1]), + h.push(e.mcol0[3 * d + 2]), + h.push(0), + h.push(e.mcol1[3 * d]), + h.push(e.mcol1[3 * d + 1]), + h.push(e.mcol1[3 * d + 2]), + h.push(0), + h.push(e.mcol2[3 * d]), + h.push(e.mcol2[3 * d + 1]), + h.push(e.mcol2[3 * d + 2]), + h.push(0), + h.push(e.mcol3[3 * d]), + h.push(e.mcol3[3 * d + 1]), + h.push(e.mcol3[3 * d + 2]), + h.push(1), + c.fromArray(h), + 0 > c.determinant() && (l.vMirror[s][d] = -1); + this.getBufferAttributesBy(s); + this.cacheBatchedInstanceGeometries(s, e); + for (var g in e.componentInfo) + if (e.componentInfo.hasOwnProperty(g)) + for (var u = 0, f = e.componentInfo[g].length; f > u; u += 1) { + var m = e.componentInfo[g][u]; + this.cacheNodeIdxByUserId(g, s, m); + var C = i.getNodeInfosByNodeId(e.nodeIdInfo[m]); + C && this.cacheMatrixInfoByUserId(g, s, { + matrix: C.matrix, + boundingBox: C.boundingBox + }) + } + this._makeInstanceNodeById(A, s, this.instanceGeometryMap[s]) + } + }, + Pf.prototype.getBufferAttributesBy = function (A) { + if (this.bufferAttributeMap[A]) + return this.bufferAttributeMap[A]; + var e = this.cachedInstance, + t = new Oa(new Float32Array(e.mcol0[A]), 3, !1, 1), + i = new Oa(new Float32Array(e.mcol1[A]), 3, !1, 1), + o = new Oa(new Float32Array(e.mcol2[A]), 3, !1, 1), + n = new Oa(new Float32Array(e.mcol3[A]), 3, !1, 1), + r = [], + a = [], + s = []; + if (e.muvCol0[A]) + for (var l = 0, c = e.muvCol0[A].length; c > l; l += 1) + r.push(new Oa(new Float32Array(e.muvCol0[A][l]), 2, !1, 1)), + a.push(new Oa(new Float32Array(e.muvCol1[A][l]), 2, !1, 1)), + s.push(new Oa(new Float32Array(e.muvCol2[A][l]), 2, !1, 1)); + return this.bufferAttributeMap[A] = { + attributeMcol0: t, + attributeMcol1: i, + attributeMcol2: o, + attributeMcol3: n, + attributeMuvCol0Array: r, + attributeMuvCol1Array: a, + attributeMuvCol2Array: s + }, + this.bufferAttributeMap[A] + }, + Pf.prototype._addInstanceNodeToScene = function (A, e, t) { + this._getNodeGroup(A).add(t), + t.updateMatrixWorld(!0), + A.manager.addMeshToOctantMap(A.modelKey, e, new Bu(e, t)) + }, + Pf.prototype.addAllInstanceNodeToScene = function (A) { + this.traverseInstanceNodeMap(null, (function (e, t) { + for (var i = 0, o = t.length; o > i; i += 1) + A.manager.addMeshToOctantMap(A._encodedDatabagId, e, new Bu(e, t[i])) + })) + }, + Pf.prototype._makeInstanceNodeById = function (A, e, t) { + var i = this.cachedInstance, + o = A.materialManager, + n = this.getMaterialIdByMeshId(e), + r = this.getBufferAttributesBy(e), + a = o.getInstanceMaterialById(n, A); + this.instanceNodeMap[e] || (this.instanceNodeMap[e] = []); + for (var s = this.instanceNodeMap[e], l = 0, c = t.length; c > l; l += 1) { + t[l].setAttribute("mcol0", r.attributeMcol0), + t[l].setAttribute("mcol1", r.attributeMcol1), + t[l].setAttribute("mcol2", r.attributeMcol2), + t[l].setAttribute("mcol3", r.attributeMcol3), + r.attributeMuvCol0Array.length > 0 && (t[l].setAttribute("muvCol0", r.attributeMuvCol0Array[l]), + t[l].setAttribute("muvCol1", r.attributeMuvCol1Array[l]), + t[l].setAttribute("muvCol2", r.attributeMuvCol2Array[l])), + t[l].setAttribute("aColor", new Oa(new Float32Array(i.vColor[e]), 4, !1, 1)), + t[l].setAttribute("vState", new Oa(new Float32Array(i.vState[e]), 1, !1, 1)), + t[l].setAttribute("vState2", new Oa(new Float32Array(i.vState[e]), 1, !1, 1)), + t[l].setAttribute("vMirror", new Oa(new Float32Array(i.vMirror[e]), 1, !1, 1)), + t[l].getAttribute("vState2").array.fill(Hc.HIDDEN); + var h = t[l].index; + t[l].addGroup(0, h.count, 0), + t[l].addGroup(0, h.count, 1), + a[1].visible = !1; + var d = new Kf(t[l], a); + if (d.visible = !0, + d.modelKey = A.modelKey, + d.frustumCulled = !1, + s.push(d), + !uh.isEmptyObject(A.subModel)) { + var p = i.userId[e][0]; + if (p) { + var g = uh.getModelKeyFromComponentKey(p); + A.subModel[g] && d.matrix.copy(A.subModel[g]) + } + } + this._addInstanceNodeToScene(A, e, d) + } + }, + Pf.prototype._makeInstanceNodes = function (A) { + Bh.time("makeInstanceNodes"); + var e = this; + this.traverseInstanceGeometryMap((function (t, i) { + e._makeInstanceNodeById(A, t, i) + })), + Bh.timeEnd("makeInstanceNodes") + }, + Pf.prototype.resetInstanceMaterial = function (A) { + var e = this, + t = A.materialManager; + this.traverseInstanceGeometryMap((function (i, o) { + var n = e.getMaterialIdByMeshId(i), + r = t.getInstanceMaterialById(n, A); + r[0].visible = !0, + r[1].visible = !1, + r.splice(2, 1); + for (var a = 0, s = o.length; s > a; a += 1) { + if (o[a].getAttribute("vState").array.fill(Hc.NONE), + o[0].removed) + for (var l in o[0].removed) + o[a].getAttribute("vState").array[l] = -1; + o[a].getAttribute("vState").needsUpdate = !0, + o[a].getAttribute("vState2").array.fill(Hc.HIDDEN), + o[a].getAttribute("vState2").needsUpdate = !0, + o[a].deleteAttribute("vState3"), + o[a].groups.splice(2, 1) + } + })) + }, + Pf.prototype.clearInstanceStateByUserId = function (A) { + function e(A, e, t, i) { + for (var o = A.getAttribute("vState").array, n = A.getAttribute("vState2").array, r = 0, a = e.length; a > r; r += 1) { + var s = e[r]; + o[s] = t, + n[s] = i + } + A.getAttribute("vState").needsUpdate = !0, + A.getAttribute("vState2").needsUpdate = !0 + } + var t = this, + i = Hc.NONE, + o = Hc.HIDDEN; + this.traverseNodeIdxMapByUserId(A, (function (A, n) { + var r = t.getInstanceGeometries(A); + if (r) + for (var a = 0, s = r.length; s > a; a += 1) + e(r[a], n, i, o) + })) + }, + Pf.prototype.updateInstanceStateByUserId = function (A, e, t, i) { + function o(A, e, t, i, o, n, r) { + var a = A.getAttribute("vState").array, + s = A.getAttribute("vState2").array, + l = A.getAttribute("aColor"), + c = A.getAttribute("vState3"), + h = null; + null !== r && (c ? h = c.array : ((h = (c = A.getAttribute("vState").clone()).array).fill(Hc.HIDDEN), + A.setAttribute("vState3", c))); + for (var d = l ? l.array : null, p = 0; e.length > p; p += 1) { + var g = e[p]; + a[g] = t, + s[g] = i, + h && (h[g] = r), + null !== d && null !== o && (d[4 * g] = o[0], + d[4 * g + 1] = o[1], + d[4 * g + 2] = o[2], + d[4 * g + 3] = o[3]) + } + if (A.getAttribute("vState").needsUpdate = !0, + A.getAttribute("vState2").needsUpdate = !0, + c && (c.needsUpdate = !0), + l && (l.needsUpdate = !0), + n) { + var u = !1, + f = !1; + if (!n[0].visible) + if (t !== Hc.HIDDEN) + n[0].visible = !0; + else { + for (var m = 0, C = a.length; C > m; m += 1) + if (a[m] !== Hc.HIDDEN) { + u = !0; + break + } + n[0].visible = u + } + if (!n[1].visible) + if (i !== Hc.HIDDEN) + n[1].visible = !0; + else { + for (var y = 0, v = s.length; v > y; y += 1) + if (s[y] !== Hc.HIDDEN) { + f = !0; + break + } + n[1].visible = f + } + } + } + var n = A.materialManager, + r = this; + this.traverseNodeIdxMapByUserId(e, (function (a, s) { + var l = r.getInstanceGeometries(a); + r.getInstanceNodesById(a); + if (l) { + var c = null, + h = null, + d = null; + if (t === Hc.HIDDEN) { + c = Hc.HIDDEN, + h = Hc.HIDDEN; + for (var p = 0, g = l.length; g > p; p += 1) + o(l[p], s, c, h, null, null) + } else { + var u = r.getMaterialIdByMeshId(a), + f = r.getUsableMaterialColorParamsBy(A, u, t, i), + m = f.rgbaColor, + C = t; + t === Hc.TRANSPARENT && (C = Hc.OVERRIDED), + t === Hc.SELECTED && r.cacheSelectedObjectIds(e, a); + var y = n.getInstanceMaterialById(u, A), + v = y[0]; + if (v.transparent === f.transparent ? (c = C, + h = Hc.HIDDEN) : (c = Hc.HIDDEN, + h = C), + !0 === f.wireframe) { + var I = y[2] || Kd.createInstanceMaterial(Kd.getMaterialParameters(v)); + I.wireframe = !0, + I.defines.INSTANCE_STATE_TERTIARY = "", + 3 > y.length && y.push(I), + c = Hc.HIDDEN, + h = Hc.HIDDEN, + d = C + } + C === Hc.BLINK && v.setBlinkColor(A.manager.getBlinkColor()); + for (p = 0, + g = l.length; g > p; p += 1) { + if (!0 === f.wireframe) { + var E = l[p].groups[0]; + l[p].groups[2] = { + start: E.start, + count: E.count, + materialIndex: 2 + } + } + o(l[p], s, c, h, m, y, d) + } + } + } + })) + }, + Pf.prototype.getUsableMaterialColorParamsBy = function (A, e, t, i) { + var o = A.selectedMaterial, + n = A.manager.filter._getMaterialByName("scene"), + r = A.materialManager, + a = A.manager.getOverrideMaterialByName(e) || r.getMaterialById(e), + s = null, + l = null; + switch (t) { + case Hc.HOVER: + i ? (s = A.manager.filter._getMaterialByName(i), + l = A.manager.sceneState.getHoverColorByMaterial(s)) : l = A.manager.sceneState.getHoverColorByMaterial(a); + break; + case Hc.SELECTED: + l = Kd.getColorParamsByMaterial(o); + break; + case Hc.TRANSPARENT: + l = Kd.getColorParamsByMaterial(n); + break; + case Hc.OVERRIDED: + case Hc.BLINK: + i ? (s = A.manager.filter._getMaterialByName(i), + l = Kd.getColorParamsByMaterial(s)) : l = Kd.getColorParamsByMaterial(a) + } + return l + }, + Pf.prototype.getInstanceNodesById = function (A) { + return this.instanceNodeMap[A] + }, + Pf.prototype.traverseInstanceNodeMap = function (A, e) { + for (var t = this.instanceNodeMap, i = 0, o = (A = A || Object.keys(this.instanceNodeMap)).length; o > i; i += 1) { + var n = A[i]; + e(n, t[n]) + } + }, + Pf.prototype.getInstanceGeometries = function (A) { + return this.instanceGeometryMap[A] + }, + Pf.prototype.cacheInstanceGeometries = function (A, e) { + if (!this.instanceGeometryMap[A]) { + var t = this.instanceGeometryMap[A] = []; + e instanceof Array || (e = [e]); + for (var i = 0, o = e.length; o > i; i += 1) + t[i] = new Na, + t[i].setIndex(e[i].index), + e[i].attributes.position && t[i].setAttribute("position", e[i].attributes.position), + e[i].attributes.normal && t[i].setAttribute("normal", e[i].attributes.normal), + e[i].attributes.uv && t[i].setAttribute("uv", e[i].attributes.uv), + e[i].attributes.uv2 && t[i].setAttribute("uv2", e[i].attributes.uv2) + } + }, + Pf.prototype.cacheBatchedInstanceGeometries = function (A, e) { + if (this.instanceGeometryMap[A]) + return this.instanceGeometryMap[A][0]; + var t = this.instanceGeometryMap[A] = [], + i = new Na; + return t[0] = i, + i.setIndex(new YA(e.index, 1)), + e.position && e.position.length > 0 && i.setAttribute("position", new YA(e.position, 3)), + e.normal && e.normal.length === e.position.length && i.setAttribute("normal", new YA(e.normal, 3)), + e.uv && e.uv.length > 0 && i.setAttribute("uv", new YA(e.uv, 2)), + e.hasUV2 && i.getAttribute("uv") && i.setAttribute("uv2", i.getAttribute("uv")), + i.getAttribute("normal") || i.computeVertexNormals(), + i + }, + Pf.prototype.traverseInstanceGeometryMap = function (A) { + var e = this.instanceGeometryMap; + for (var t in e) + A(t, e[t]) + }, + Pf.prototype.disposeInstanceGeometries = function () { + this.traverseInstanceGeometryMap((function (A, e) { + for (var t = 0, i = e.length; i > t; t += 1) + e[t].dispose() + })) + }, + Pf.prototype.cacheInstanceAttributeStateBy = function (A, e, t, i, o) { + var n = i.materialId; + t instanceof Array || (t = [t]); + var r = t.length, + a = this.cachedInstance; + if (!a.vState[e]) { + a.vState[e] = [], + a.vColor[e] = [], + a.vMirror[e] = [], + a.mcol0[e] = [], + a.mcol1[e] = [], + a.mcol2[e] = [], + a.mcol3[e] = [], + a.muvCol0[e] = [], + a.muvCol1[e] = [], + a.muvCol2[e] = [], + a.userId[e] = [], + a.nodeId[e] = []; + for (var s = 0; r > s; s += 1) + a.muvCol0[e][s] = [], + a.muvCol1[e][s] = [], + a.muvCol2[e][s] = [] + } + var l = o || A.materialManager.getMaterialById(n); + a.userId[e].push(i.userId), + a.nodeId[e].push(i.nodeId), + a.vColor[e].push(l.color.r, l.color.g, l.color.b, l.opacity), + a.vState[e].push(0); + var c = i.matrix.elements; + return a.mcol0[e].push(c[0], c[1], c[2]), + a.mcol1[e].push(c[4], c[5], c[6]), + a.mcol2[e].push(c[8], c[9], c[10]), + a.mcol3[e].push(c[12], c[13], c[14]), + 0 > i.matrix.determinant() ? a.vMirror[e].push(-1) : a.vMirror[e].push(0), + a.vState[e].length - 1 + }, + Pf.prototype.cacheNodeIdxByUserId = function (A, e, t) { + var i = this.nodeIdxMapFromUserId; + i[A] || (i[A] = {}), + i[A][e] || (i[A][e] = []), + i[A][e].push(t) + }, + Pf.prototype.getNodeIdxMapByUserId = function (A) { + return this.nodeIdxMapFromUserId[A] + }, + Pf.prototype.traverseNodeIdxMapByUserId = function (A, e) { + var t = this.nodeIdxMapFromUserId[A]; + for (var i in t) + e(i, t[i]) + }, + Pf.prototype.traverseNodeIdxMap = function (A, e) { + for (var t = Object.keys(this.nodeIdxMapFromUserId), i = 0, o = t.length; o > i; i += 1) { + var n = t[i], + r = this.nodeIdxMapFromUserId[n]; + if (!e || !e(n)) + for (var a in r) + A(a, r[a]) + } + }, + Pf.prototype.cacheMatrixInfoByUserId = function (A, e, t) { + var i = this.matrixInfoMapFromUserId; + i[A] || (i[A] = {}), + i[A][e] || (i[A][e] = []), + i[A][e].push(t) + }, + Pf.prototype.traverseMatrixInfoMapByUserId = function (A, e) { + var t = this.matrixInfoMapFromUserId[A]; + for (var i in t) + e(i, t[i]) + }, + Pf.prototype.getMeshesByUserId = function (A, e) { + var t = this, + i = []; + return this.traverseMatrixInfoMapByUserId(e, (function (e, o) { + for (var n = t.getInstanceNodesById(e), r = 0, a = o.length; a > r; r += 1) + for (var s = 0, l = n.length; l > s; s += 1) { + var c = {}; + if (c.matrix = A.getModelMatrix().clone().multiply(o[r].matrix), + c.mesh = n[s], + 1 === l) + c.boundingBox = o[r].boundingBox; + else { + var h = c.mesh.geometry.boundingBox; + h ? h = h.clone() : (c.mesh.geometry.computeBoundingBox(), + h = c.mesh.geometry.boundingBox.clone()), + h.applyMatrix4(c.matrix), + c.boundingBox = h + } + i.push(c) + } + })), + i + }, + Pf.prototype._getNodeGroup = function (A) { + return A._getNodeGroup(gp.INSTANCEGEOMETRY, { + globalSpace: !0 + }) + }, + Pf.prototype._hasNodeGroup = function (A) { + return A._hasNodeGroup(gp.INSTANCEGEOMETRY) + }, + Pf.prototype.clearSelectedObjectIds = function () { + this.selectedObjectIds.length = 0 + }, + Pf.prototype.cacheSelectedObjectIds = function (A, e) { + this.selectedObjectIds.push({ + uid: A, + mgId: e + }) + }, + Pf.prototype.adjustVisibility = function (A, e) { + var t = this._getNodeGroup(A), + i = t.visible; + e && !t.bVisible || (t.visible = e), + t.bVisible = i + }, + Pf.prototype.changeVisibilityOfSelectedObjects = function (A, e) { + var t = null; + if (e) + for (var i = 0, o = (t = this.selectedMeshes).length; o > i; i += 1) { + var n = t[i].object, + r = t[i].indices; + if (r) { + if (r.length) { + for (var a = n.geometry.getAttribute("vState").array, s = n.geometry.getAttribute("vState2").array, l = 0, c = r.length; c > l; l += 1) + r[l].state ? a[r[l].idx] = r[l].state : r[l].state2 && (s[r[l].idx] = r[l].state2); + n.geometry.getAttribute("vState").needsUpdate = !0, + n.geometry.getAttribute("vState2").needsUpdate = !0 + } + } else + n.visible = t[i].visibility + } + else { + this.selectedMeshes.length = 0, + t = this.selectedMeshes; + for (var h = {}, d = 0, p = this.selectedObjectIds.length; p > d; d += 1) + h[this.selectedObjectIds[d].mgId] = !0; + var g = Object.keys(h); + this.traverseInstanceNodeMap(g, (function (A, e) { + for (var i = 0, o = e.length; o > i; i += 1) { + for (var n = e[i], r = [], a = n.geometry.getAttribute("vState").array, s = n.geometry.getAttribute("vState2").array, l = 0, c = a.length; c > l; l += 1) + a[l] === Hc.SELECTED ? (r.push({ + idx: l, + state: a[l] + }), + a[l] = Hc.HIDDEN) : s[l] === Hc.SELECTED && (r.push({ + idx: l, + state2: s[l] + }), + s[l] = Hc.HIDDEN); + r.length ? (n.geometry.getAttribute("vState").needsUpdate = !0, + n.geometry.getAttribute("vState2").needsUpdate = !0, + t.push({ + object: n, + indices: r + })) : (t.push({ + object: n, + indices: null, + visibility: n.visible + }), + n.visible = !1) + } + })) + } + }, + Pf.prototype.changeVisibilityOfNonSelectedObjects = function (A, e) { + var t = null; + if (e) + for (var i = 0, o = (t = this.nonSelectedMeshes).length; o > i; i += 1) { + var n = t[i].object, + r = t[i].indices; + if (r) { + if (r.length) { + for (var a = n.geometry.getAttribute("vState").array, s = n.geometry.getAttribute("vState2").array, l = 0, c = r.length; c > l; l += 1) + void 0 !== r[l].state ? a[r[l].idx] = r[l].state : void 0 !== r[l].state2 && (s[r[l].idx] = r[l].state2); + n.geometry.getAttribute("vState").needsUpdate = !0 + } + } else + n.visible = t[i].visibility + } + else { + this.nonSelectedMeshes.length = 0, + t = this.nonSelectedMeshes; + for (var h = {}, d = 0, p = this.selectedObjectIds.length; p > d; d += 1) + h[this.selectedObjectIds[d].mgId] = !0; + this.traverseInstanceNodeMap(null, (function (A, e) { + if (h[A]) + for (var i = 0, o = e.length; o > i; i += 1) { + for (var n = [], r = (p = e[i]).geometry.getAttribute("vState").array, a = p.geometry.getAttribute("vState2").array, s = 0, l = r.length; l > s; s += 1) + r[s] !== Hc.SELECTED && r[s] !== Hc.HIDDEN ? (n.push({ + idx: s, + state: r[s] + }), + r[s] = Hc.HIDDEN) : a[s] !== Hc.SELECTED && a[s] !== Hc.HIDDEN && (n.push({ + idx: s, + state2: a[s] + }), + a[s] = Hc.HIDDEN); + n.length && (p.geometry.getAttribute("vState").needsUpdate = !0, + p.geometry.getAttribute("vState2").needsUpdate = !0, + t.push({ + object: p, + indices: n + })) + } + else + for (var c = 0, d = e.length; d > c; c += 1) { + var p; + t.push({ + object: p = e[c], + indices: null, + visibility: p.visible + }), + p.visible = !1 + } + })) + } + }, + Pf.prototype.restoreVisibilityOfObjects = function () { + this.selectedMeshes.length = 0, + this.nonSelectedMeshes.length = 0 + }, + Pf.prototype.getMeshIdByNodeInfo = function (A) { + return uh.getCombinedKeyString([A.materialId, A.geometryId]) + }, + Pf.prototype.getMaterialIdByMeshId = function (A) { + return uh.splitCombinedKeyString(A)[0] + }, + Pf.prototype.getOriginalMaterialIdByMeshId = function (A) { + var e = uh.splitCombinedKeyString(A); + return uh.splitCombinedKeyString(e[0], "_")[0] + }, + Pf.prototype.disposeBufferAfterVbo = function () { + if (!this.bufferDestroyed) { + this.bufferDestroyed = !0; + var A = ["muvCol0", "muvCol1", "muvCol2", "mcol0", "mcol1", "mcol2", "mcol3"]; + vc.EnableExplosion && A.pop(), + this.traverseInstanceGeometryMap((function (e, t) { + for (var i = 0, o = t.length; o > i; i += 1) + Tu.disposeBufferFromGeometry(t[i], A) + })) + } + }, + Pf.prototype.getGeometryBuffersByUserId = function (A, e) { + var t = A.getModelDescriptor().getInstancedNodeInfosById(e); + if (!t) + return []; + for (var i = [], o = A.getDatabagId(), n = 0, r = t.length; r > n; n += 1) { + var a = t[n], + s = this.getGeometryByNodeInfo(A, a), + l = this._isLines(a); + if (s instanceof Array) + for (var c = 0, h = s.length; h > c; c += 1) + i.push({ + isLines: l, + databagId: o, + nodeId: a.nodeId, + position: s[c].getAttribute("position").array, + index: s[c].getIndex().array, + matrix: a.matrix + }); + else + i.push({ + databagId: o, + nodeId: a.nodeId, + position: s.getAttribute("position").array, + index: s.getIndex().array, + matrix: a.matrix + }) + } + return i + }, + Pf.prototype.explode = function (A, e, t) { + var i = this; + for (var o in i.nodeIdxMapFromUserId) + i.traverseNodeIdxMapByUserId(o, (function (n, r) { + var a = A.manager.getComponentInfoByUserId(o).boundingBox, + s = uh.computeExplodeTranslation(e, a, t), + l = i.getInstanceGeometries(n); + l && Gf(l[0], r, s) + })) + }, + Pf.prototype.explosion = function (A, e) { + var t = Object.keys(this.nodeIdxMapFromUserId); + e.componentKey = t, + this.componentsExplosion(A, e) + }, + Pf.prototype.closeExplosion = function (A) { + this.explosion(A, {}) + }, + Pf.prototype.componentsExplosion = function (A, e) { + var t = e.coefficientX || 1, + i = e.coefficientY || 1, + o = e.coefficientZ || 1, + n = e.offsetX || 0, + r = e.offsetY || 0, + a = e.offsetZ || 0, + s = null; + if (e.center) + s = (new y).fromArray(e.center); + else if (1 !== t || 1 !== i || 1 !== o || 0 !== n || 0 !== r || 0 !== a) + return; + var l = Array.isArray(e.componentKey) ? e.componentKey : [e.componentKey], + c = new y, + h = new aA, + d = new y(0, 0, 0), + p = new y(0, 0, 0), + g = new y, + u = new M, + m = A.getModelMatrix(); + m && s && (u.getInverse(m), + s.applyMatrix4(u)); + var C = A.manager, + v = !1, + I = new y, + E = new f, + B = new y(1, 1, 1); + uh.isEmptyObject(A.subModel) || (v = !0); + for (var x = 0, S = l.length; S > x; x += 1) { + var w = l[x]; + if (w) { + var b = A.getModelDescriptor().getInstancedNodeInfosById(w); + if (b) + for (var U = this.nodeIdxMapFromUserId[w], F = 0, K = b.length; K > F; F += 1) { + var Q = b[F]; + if (Q) { + var R = Q.materialId + "&" + Q.geometryId, + T = new y(1, 1, 1); + if (v) + this.getInstanceNodesById(R)[0].matrix.decompose(I, E, B), + T.divide(B); + if (h.copy(Q.boundingBox), + h.getCenter(c), + Q.userData || (Q.userData = {}), + d.set(0, 0, 0), + p.set(0, 0, 0), + 1 !== t || 1 !== i || 1 !== o || Q.userData.explosionFactor) { + Q.userData.explosionFactor || (Q.userData.explosionFactor = new y(1, 1, 1), + Q.userData.explosionBaseDifference = c.sub(s).clone().multiply(T)); + var k = Q.userData.explosionFactor, + D = Q.userData.explosionBaseDifference; + d.set((t - k.x) * D.x, (i - k.y) * D.y, (o - k.z) * D.z), + 1 === t && 1 === i && 1 === o ? (Q.userData.explosionFactor = void 0, + Q.userData.explosionBaseDifference = void 0) : k.set(t, i, o) + } + if (0 !== n || 0 !== r || 0 !== a || Q.userData.explosionOffset) { + Q.userData.explosionOffset || (Q.userData.explosionOffset = new y(0, 0, 0)); + var L = Q.userData.explosionOffset; + p.set(n * T.x - L.x, r * T.y - L.y, a * T.z - L.z), + 0 === n && 0 === r && 0 === a ? Q.userData.explosionOffset = void 0 : L.set(n * T.x, r * T.y, a * T.z) + } + if (g.set(d.x + p.x, d.y + p.y, d.z + p.z), + 0 !== g.x || 0 !== g.y || 0 !== g.z) { + Q.userData.explosionFactor || Q.userData.explosionOffset ? C.explosionList[w] || (C.explosionList[w] = !0) : delete C.explosionList[w]; + var N = g.clone().multiply(B), + O = u; + v && (O = u.clone()).makeTranslation(g.x, g.y, g.z), + u.makeTranslation(N.x, N.y, N.z), + Q.transformation || (Q.transformation = !0, + Q.transformationOriginalMatrix = Q.matrix.clone(), + Q.applyMatrix = new M, + Q.transformationOriginalBoundingBox = Q.boundingBox.clone()), + Q.matrix.premultiply(O), + Q.applyMatrix.premultiply(u), + Q.boundingBox.copy(Q.transformationOriginalBoundingBox).applyMatrix4(Q.applyMatrix); + var V = Q.matrix, + G = U[R], + P = this.getInstanceGeometries(R); + if (P) { + var q = P[0], + j = q.getAttribute("mcol0"), + H = q.getAttribute("mcol1"), + Y = q.getAttribute("mcol2"), + W = q.getAttribute("mcol3"), + J = G[0]; + j.array[3 * J] = V.elements[0], + j.array[3 * J + 1] = V.elements[1], + j.array[3 * J + 2] = V.elements[2], + j.needsUpdate = !0, + H.array[3 * J] = V.elements[4], + H.array[3 * J + 1] = V.elements[5], + H.array[3 * J + 2] = V.elements[6], + H.needsUpdate = !0, + Y.array[3 * J] = V.elements[8], + Y.array[3 * J + 1] = V.elements[9], + Y.array[3 * J + 2] = V.elements[10], + Y.needsUpdate = !0, + W.array[3 * J] = V.elements[12], + W.array[3 * J + 1] = V.elements[13], + W.array[3 * J + 2] = V.elements[14], + W.needsUpdate = !0 + } + } + } + } + } + } + }, + Pf.prototype.closeComponentsExplosion = function (A, e) { + e = Array.isArray(e) ? e : [e]; + this.componentsExplosion(A, { + componentKey: e + }) + }, + Pf.prototype._isLines = function (A) { + return A.type === $u.EnumNodeItemType.LINE + }, + Pf.prototype.getPickingNodeGenerator = function () { + return this.pickingNodeGenerator || (this.pickingNodeGenerator = new Vf(this)), + this.pickingNodeGenerator + }, + Pf.prototype.calculateClippingIds = function (A, e) { + var t = this; + for (var i in t.nodeIdxMapFromUserId) + this.traverseMatrixInfoMapByUserId(i, (function (i, o) { + for (var n = t.getInstanceNodesById(i), r = 0, a = o.length; a > r; r += 1) + for (var s = 0, l = n.length; l > s; s += 1) + n[s].intersectBoxWithClipPlane(A, o[r]) && n[s].getIntersectionPoints(A, o[r], e, !0) + })) + }; + var qf = function (A) { + of .call(this, A), + this.nodeGroupName = "PickingInstancedWireFrameGroup" + }; + Object.assign(qf.prototype, of .prototype), + eu(qf, [{ + key: "generatePickingMeshes", + value: function () { + this.manager.generateWireframe(), + this.manager.updateNodes(); + var A = this, + e = this.manager, + t = e.manager.getCachedInstanceData(), + i = !vc.BatchMergeEnabled; + e._traverseWireframeGeometryMap((function (o, n) { + for (var r = [], a = e._getWireframeMeshById(o), s = 0, l = n.length; l > s; s += 1) { + var c = n[s], + h = new Na, + d = a[s]; + h.setAttribute("position", c.getAttribute("position")), + h.setAttribute("mcol0", c.getAttribute("mcol0")), + h.setAttribute("mcol1", c.getAttribute("mcol1")), + h.setAttribute("mcol2", c.getAttribute("mcol2")), + h.setAttribute("mcol3", c.getAttribute("mcol3")), + h.setAttribute("vState", new Oa(new Float32Array(t.vState[o]), 1, !1, 1)), + h.setIndex(c.getIndex()); + var p = new jo(h, Kd.DefaultMaterial); + d.matrixWorld.decompose(p.position, p.quaternion, p.scale), + p.name = o, + p.frustumCulled = !1, + p.renderOrder = i ? 0 : 1, + r.push(p) + } + A.addToPickingNodeMap(o, r) + })) + } + }, { + key: "updatePickingMeshesState", + value: function (A, e, t) { + if (this.pickingNodeMap) + for (var i = this.manager.manager, o = this.pickingNodeMap, n = 0, r = e.length; r > n; n += 1) { + var a = e[n]; + if (i.isPickableNode(a)) { + var s = i.getMeshManager().getNodeIdxMapByUserId(a); + if (s) + for (var l = Object.keys(s), c = 0, h = l.length; h > c; c += 1) { + var d = l[c], + p = o[d]; + if (p) + for (var g = s[d], u = 0, f = p.length; f > u; u += 1) { + var m = p[u]; + m.material = A, + m.visible = !0; + for (var C = m.geometry, y = C.getAttribute("vState").array, v = 0, I = g.length; I > v; v += 1) + y[g[v]] = Hc.NONE; + C.getAttribute("vState").needsUpdate = !0 + } + } + } + } + } + }, { + key: "resetPickingMeshesState", + value: function () { + if (this.pickingNodeMap) + for (var A = this.pickingNodeMap, e = Object.keys(A), t = 0, i = e.length; i > t; t += 1) + for (var o = A[e[t]], n = 0, r = o.length; r > n; n += 1) + o[n].visible = !1, + o[n].geometry.getAttribute("vState").array.fill(Hc.HIDDEN), + o[n].geometry.getAttribute("vState").needsUpdate = !0 + } + }]); + var jf = function (A) { + this.manager = A, + this.model = A.model, + this.wireframeGeometryMap = {}, + this.wireframeMeshMap = {}, + this.noNeedWireframingIdMap = {}, + this.generated = !1 + }; + jf.prototype.destroy = function () { + this.disposeGeometries(), + this.wireframeGeometryMap = null, + this.noNeedWireframingIdMap = null, + this.manager = null + }, + jf.prototype.clearData = function () { + this.generated = !1, + this.bufferDestroyed = !1, + this.wireframeMesh = {}, + this.disposeGeometries(), + this.wireframeGeometryMap = {}, + this.noNeedWireframingIdMap = {} + }, + jf.prototype.disposeGeometries = function () { + this._traverseWireframeGeometryMap((function (A, e) { + for (var t = 0, i = e.length; i > t; t += 1) + e[t].dispose() + })) + }, + jf.prototype.updateNodes = function (A) { + A || (A = this.model); + var e = null; + A.isActivateWireframe() ? (this.generateWireframe(A), + (e = this._getNodeGroup(A)).updateMatrixWorld(!0), + e.visible = !0) : this._hasNodeGroup(A) && ((e = this._getNodeGroup(A)).visible = !1) + }, + jf.prototype.resetInstanceMaterial = function () { + var A = Hc.NONE; + this._traverseWireframeGeometryMap((function (e, t) { + for (var i = 0, o = t.length; o > i; i += 1) { + for (var n = t[i].getAttribute("vState").array, r = 0, a = n.length; a > r; r += 1) + n[r] = A; + t[i].getAttribute("vState").needsUpdate = !0 + } + })), + this._updateNoWireframingState() + }, + jf.prototype.updateInstanceWireframeByUserId = function (A, e, t, i) { + if (t === Hc.HIDDEN || t === Hc.NONE || t === Hc.OVERRIDED) { + var o = null; + if (i) { + var n = A.getFilter()._getMaterialByName(i), + r = Kd.getColorParamsByMaterial(n); + o = r.rgbaColor + } + var a = this; + this.manager.traverseNodeIdxMapByUserId(e, (function (A, e) { + a._setInstanceWireframeState(A, e, t, o) + })) + } + }, + jf.prototype._updateNoWireframingState = function () { + var A = this, + e = Hc.HIDDEN; + this.manager.traverseNodeIdxMap((function (t, i) { + A._setInstanceWireframeState(t, i, e) + }), (function (e) { + return A._isNeedWireframing(e) + })) + }, + jf.prototype._setInstanceWireframeState = function (A, e, t, i) { + var o = this._getWireframeGeometryById(A); + if (o) + for (var n = 0, r = o.length; r > n; n += 1) { + var a = o[n].getAttribute("vState").array, + s = null, + l = null; + i && (l = (s = o[n].getAttribute("aColor")) ? s.array : null); + for (var c = 0, h = e.length; h > c; c += 1) { + var d = e[c]; + a[d] = t, + null !== l && (l[4 * d] = i[0], + l[4 * d + 1] = i[1], + l[4 * d + 2] = i[2], + l[4 * d + 3] = i[3]) + } + o[n].getAttribute("vState").needsUpdate = !0, + s && (s.needsUpdate = !0) + } + }, + jf.prototype._generateInstanceWireframe = function (A) { + A || (A = this.model), + this._collectNoWireframingIds(A), + this._createInstanceWireframeGeometries(A), + this._makeInstanceWireframe(A), + this._updateNoWireframingState() + }, + jf.prototype.generateWireframe = function (A) { + A || (A = this.model), + this.generated || (Bh.time("createInstancedWireframeGeometry"), + this._generateInstanceWireframe(A), + Bh.timeEnd("createInstancedWireframeGeometry"), + this.generated = !0) + }, + jf.prototype._collectNoWireframingIds = function (A) { + var e = this, + t = A.manager.filter; + A.getModelDescriptor().traverseInstancedNodeInfos(null, (function (A, i) { + i && t._hasRenderWithBoardlineFilter() && !t._isRenderWithBoardline(i[0]) && (e.noNeedWireframingIdMap[A] = !0) + })) + }, + jf.prototype._createInstanceWireframeGeometries = function (A) { + var e = this, + t = {}; + this.manager.traverseInstanceGeometryMap((function (A, i) { + for (var o = e._getWireframeBufferById(A, i, t), n = e.wireframeGeometryMap[A] = [], r = 0, a = o.length; a > r; r += 1) { + var s = new Na; + s.setIndex(o[r].index), + s.setAttribute("position", o[r].position), + n.push(s) + } + })), + t = null + }, + jf.prototype._makeInstanceWireframe = function (A) { + var e = this, + t = this.manager, + i = t.getCachedInstanceData(), + o = this._getWireframeMaterial(A); + this._traverseWireframeGeometryMap((function (n, r) { + for (var a = t.getBufferAttributesBy(n), s = e.wireframeMeshMap[n] = [], l = 0, c = r.length; c > l; l += 1) { + r[l].setAttribute("vState", new Oa(new Float32Array(i.vState[n]), 1, !1, 1)), + r[l].setAttribute("mcol0", a.attributeMcol0), + r[l].setAttribute("mcol1", a.attributeMcol1), + r[l].setAttribute("mcol2", a.attributeMcol2), + r[l].setAttribute("mcol3", a.attributeMcol3); + var h = new jo(r[l], o); + if (h.matrixAutoUpdate = !1, + h.frustumCulled = !1, + !uh.isEmptyObject(A.subModel)) { + var d = i.userId[n][0]; + if (d) { + var p = uh.getModelKeyFromComponentKey(d); + A.subModel[p] && h.matrix.copy(A.subModel[p]) + } + } + s.push(h), + e._addWireframeNodeToScene(A, h) + } + })) + }, + jf.prototype._addWireframeNodeToScene = function (A, e) { + this._getNodeGroup(A).add(e), + e.updateMatrixWorld(!0) + }, + jf.prototype._isNeedWireframing = function (A) { + return !this.noNeedWireframingIdMap || !this.noNeedWireframingIdMap[A] + }, + jf.prototype._getWireframeMaterial = function (A) { + return A.getInstanceWireframeMaterial() + }, + jf.prototype._getWireframeBufferById = function (A, e, t) { + var i = this.getGeometryIdByMeshId(A); + if (t[i]) + return t[i]; + t[i] = []; + for (var o = 0, n = e.length; n > o; o += 1) { + var r = e[o]; + t[i].push({ + index: Up(r.attributes.position.array, r.index.array), + position: r.attributes.position + }) + } + return t[i] + }, + jf.prototype._getWireframeGeometryById = function (A) { + return this.wireframeGeometryMap[A] + }, + jf.prototype._getWireframeMeshById = function (A) { + return this.wireframeMeshMap[A] + }, + jf.prototype._traverseWireframeGeometryMap = function (A) { + var e = this.wireframeGeometryMap; + for (var t in e) + A(t, e[t]) + }, + jf.prototype._getNodeGroup = function (A) { + return A._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { + globalSpace: !0 + }) + }, + jf.prototype._hasNodeGroup = function (A) { + return A._hasNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY) + }, + jf.prototype.getGeometryIdByMeshId = function (A) { + return uh.splitCombinedKeyString(A)[1] + }, + jf.prototype.adjustVisibility = function (A, e) { + if (A.isActivateWireframe()) { + var t = this._getNodeGroup(A), + i = t.visible; + e && !t.bVisible || (t.visible = e), + t.bVisible = i + } + }, + jf.prototype.changeVisibilityOfSelectedObjects = function (A, e) {}, + jf.prototype.changeVisibilityOfNonSelectedObjects = function (A, e) { + this.adjustVisibility(A, e) + }, + jf.prototype.restoreVisibilityOfObjects = function () {}, + jf.prototype.disposeBufferAfterVbo = function () { + if (this.generated && !this.bufferDestroyed) { + this.bufferDestroyed = !0; + var A = ["mcol0", "mcol1", "mcol2", "mcol3"]; + vc.EnableExplosion && A.pop(), + this._traverseWireframeGeometryMap((function (e, t) { + for (var i = 0, o = t.length; o > i; i += 1) + Tu.disposeBufferFromGeometry(t[i], A) + })) + } + }, + jf.prototype.getPickingNodeGenerator = function () { + return this.pickingNodeGenerator || (this.pickingNodeGenerator = new qf(this)), + this.pickingNodeGenerator + }; + var Hf = function (A) { + this.model = A, + this.meshManager = new Pf(this), + this.wireframeManager = new jf(this) + }; + Hf.prototype.destroy = function () { + this.meshManager.destroy(), + this.meshManager = null, + this.wireframeManager.destroy(), + this.wireframeManager = null + }, + Hf.prototype.clearData = function () { + this.meshManager.clearData(), + this.wireframeManager.clearData() + }, + Hf.prototype.getGeometryByNodeInfo = function (A, e) { + return this.meshManager.getGeometryByNodeInfo(A, e) + }, + Hf.prototype.getInstanceGeometries = function () { + return this.meshManager.instanceGeometryMap + }, + Hf.prototype.traverseInstanceGeometryMap = function (A) { + this.meshManager.traverseInstanceGeometryMap(A) + }, + Hf.prototype.getCachedInstanceData = function () { + return this.meshManager.cachedInstance + }, + Hf.prototype.getBufferAttributesBy = function (A) { + return this.meshManager.getBufferAttributesBy(A) + }, + Hf.prototype.traverseNodeIdxMapByUserId = function (A, e) { + this.meshManager.traverseNodeIdxMapByUserId(A, e) + }, + Hf.prototype.traverseNodeIdxMap = function (A, e) { + this.meshManager.traverseNodeIdxMap(A, e) + }, + Hf.prototype.getMeshesByUserId = function (A, e) { + return this.meshManager.getMeshesByUserId(A, e) + }, + Hf.prototype._updateInstanceMaterialByUserId = function (A, e, t, i) { + this.meshManager.updateInstanceStateByUserId(A, e, t, i) + }, + Hf.prototype._updateInstanceMaterialForWireFrameByUserId = function (A, e, t, i) { + this.wireframeManager.updateInstanceWireframeByUserId(A, e, t, i) + }, + Hf.prototype._updateInstanceMaterial = function (A) { + Bh.time("update instance material"); + var e = zc; + for (var t in this.clearSelectedObjectIds(), + this.filteredIds) { + var i = this.filteredIds[t]; + if (i[e.HIDDEN]) + this._updateInstanceMaterialByUserId(A, t, Hc.HIDDEN), + this._updateInstanceMaterialForWireFrameByUserId(A, t, Hc.HIDDEN); + else if (i[e.TRANSPARENT]) + this._updateInstanceMaterialByUserId(A, t, Hc.TRANSPARENT); + else { + if (A.manager.isSelectPriority()) { + if (i[e.SELECTED]) { + this._updateInstanceMaterialByUserId(A, t, Hc.SELECTED); + continue + } + if (i[e.BLINK]) { + i[e.OVERRIDED] ? this._updateInstanceMaterialByUserId(A, t, Hc.BLINK, i[e.OVERRIDED]) : this._updateInstanceMaterialByUserId(A, t, Hc.BLINK); + continue + } + } else { + if (i[e.BLINK]) { + i[e.OVERRIDED] ? this._updateInstanceMaterialByUserId(A, t, Hc.BLINK, i[e.OVERRIDED]) : this._updateInstanceMaterialByUserId(A, t, Hc.BLINK); + continue + } + if (i[e.SELECTED]) { + this._updateInstanceMaterialByUserId(A, t, Hc.SELECTED); + continue + } + } + i[e.HOVER] ? i[e.OVERRIDED] ? this._updateInstanceMaterialByUserId(A, t, Hc.HOVER, i[e.OVERRIDED]) : this._updateInstanceMaterialByUserId(A, t, Hc.HOVER) : i[e.OVERRIDED] && this._updateInstanceMaterialByUserId(A, t, Hc.OVERRIDED, i[e.OVERRIDED]) + } + } + this._updateInstanceMaterialForWireFrame(A), + Bh.timeEnd("update instance material") + }, + Hf.prototype._updateInstanceMaterialForWireFrame = function (A) { + var e = this.mapFilteredUserIdsForWireFrame; + if (e) + for (var t = Object.keys(e), i = 0, o = t.length; o > i; i += 1) { + var n = t[i]; + this.filteredIds && this.filteredIds[n] && this.filteredIds[n][zc.HIDDEN] || this._updateInstanceMaterialForWireFrameByUserId(A, n, Hc.OVERRIDED, e[n]) + } + }, + Hf.prototype._resetInstanceMaterial = function (A) { + this.meshManager.resetInstanceMaterial(A), + this.wireframeManager.resetInstanceMaterial() + }, + Hf.prototype._collectFilteredUserIds = function (A, e, t) { + var i = A.manager.filter, + o = i._hasHiddenFileIdFilter(), + n = i._hasVisibleFilter(), + r = i._hasOverrideMaterialFilter(), + a = i._hasTransparentFilter(), + s = A.hasReplacedUserId(), + l = A.hasHiddenUserId(), + c = this.filteredIds = {}; + if (this.transparentUserIdSetObject = {}, + o || n || r || a || s || l) + for (var h = zc, d = 0; e.length > d; d += 1) { + var p = e[d], + g = t[p]; + if (g && g.length) { + var u = g[0]; + if (o && i._isHiddenFileId(u) || n && !1 === i._isVisible(u) || A.isReplacedUserId(p) || A.isHiddenSourceObjectUserId(p)) + c[p] || (c[p] = {}), + c[p][h.HIDDEN] = !0; + else if (a && i._isTransparent(u)) + c[p] || (c[p] = {}), + c[p][h.TRANSPARENT] = !0, + this.transparentUserIdSetObject[p] = !0; + else if (r && i._hasOverrideMaterial(u)) { + var f = i._getOverrideMaterial(u), + m = null; + if (Array.isArray(f)) { + var C = u.nodeId.replace(u.componentKey + "_", ""), + y = parseInt(C, 10); + "" === (m = null !== f[y] ? f[y].name : "") && (m = u.materialId), + c[p] || (c[p] = {}), + c[p][h.OVERRIDED] || (c[p][h.OVERRIDED] = []), + c[p][h.OVERRIDED][y] = m + } else + "" !== (m = null !== f ? f.name : "") && (c[p] || (c[p] = {}), + c[p][h.OVERRIDED] = m) + } + } + } + }, + Hf.prototype._collectModelFiltered = function (A) { + var e = A.manager.filter, + t = A.modelKey, + i = e._hasModelOverrideMaterialFilter(), + o = e._hasModelTransparentFilter(), + n = A.manager.modelState.selectionSet; + return A.manager.modelState.hoverId === t ? A.manager.modelState.getHoverMaterial() : n.hasOwnProperty(A.modelKey) ? A.manager.modelState.selectionMaterial : o && e._isModelTransparent(t) ? e._getMaterialByName("scene") : i && e._hasModelOverrideMaterial(t) ? e._getModelOverrideMaterial(t) : null + }, + Hf.prototype._collectFilteredUserIdsForWireFrame = function (A, e, t) { + var i = A.getFilter(), + o = i._hasOverrideMaterialFilterForWireFrame(); + if (this.mapFilteredUserIdsForWireFrame = {}, + o) + for (var n = zc, r = 0; e.length > r; r += 1) { + var a = e[r]; + if (!(this.filteredIds && this.filteredIds[a] && this.filteredIds[a][n.HIDDEN])) { + var s = t[a]; + if (s && s.length) { + var l = s[0]; + if (i._hasOverrideMaterialForWireFrame(l)) { + var c = i._getOverrideMaterialForWireFrame(l), + h = null !== c ? c.name : ""; + "" !== h && (this.mapFilteredUserIdsForWireFrame[a] = h) + } + } + } + } + }, + Hf.prototype._collectSelectedUserIds = function (A, e) { + var t = this.filteredIds = this.filteredIds || {}, + i = zc, + o = {}; + for (var n in A) + if (this.model.modelKey === n) + for (var r in A[n]) + e[r] && (t[r] || (t[r] = {}), + t[r][i.SELECTED] = !0, + o[r] = !0); + this.selectedUserIds = Object.keys(o) + }, + Hf.prototype._clearSelectedState = function (A) { + if (this.filteredIds && this.selectedUserIds && this.selectedUserIds.length) { + for (var e = 0, t = this.selectedUserIds.length; t > e; e += 1) { + var i = this.selectedUserIds[e]; + this.filteredIds[i] && (this.meshManager.clearInstanceStateByUserId(i), + delete this.filteredIds[i][zc.SELECTED]) + } + this.selectedUserIds = null + } + }, + Hf.prototype._collectHoveredUserIds = function (A, e) { + var t = this.filteredIds = this.filteredIds || {}; + this.hoverdUserId = void 0, + A && e[A] && (t[A] || (t[A] = {}), + t[A][zc.HOVER] = !0, + this.hoverdUserId = A) + }, + Hf.prototype._clearHoveredState = function (A) { + this.filteredIds && this.hoverdUserId && this.filteredIds[this.hoverdUserId] && (this.meshManager.clearInstanceStateByUserId(this.hoverdUserId), + delete this.filteredIds[this.hoverdUserId][zc.HOVER], + this.hoverdUserId = void 0) + }, + Hf.prototype._collectBlinkedUserIds = function (A, e) { + var t = this.filteredIds = this.filteredIds || {}, + i = zc, + o = {}; + for (var n in A) + e[n] && (t[n] || (t[n] = {}), + t[n][i.BLINK] = !0, + o[n] = !0); + this.blinkUserIds = Object.keys(o) + }, + Hf.prototype._clearBlinkedState = function (A) { + if (this.filteredIds && this.blinkUserIds && this.blinkUserIds.length) { + for (var e = 0, t = this.blinkUserIds.length; t > e; e += 1) { + var i = this.blinkUserIds[e]; + this.filteredIds[i] && (this.meshManager.clearInstanceStateByUserId(i), + delete this.filteredIds[i][zc.BLINK]) + } + this.blinkUserIds = null + } + }, + Hf.prototype.applyFilter = function (A, e) { + console.log('applyFilter :>dfdf> '); + if (this.hasNodeInfo(A)) { + this.updateNodes(A), + this._resetInstanceMaterial(A); + var t = null; + t = e || A.getModelDescriptor().getInstancedUserIds(); + var i = A.getModelDescriptor().getInstancedNodeInfos(); + this._collectFilteredUserIds(A, t, i), + this._collectFilteredUserIdsForWireFrame(A, t, i), + this._collectSelectedUserIds(A.manager.sceneState.selectionSet, i), + this._collectBlinkedUserIds(A.manager.sceneState.getBlinkComponentsIdMap(), i), + this._collectHoveredUserIds(A.manager.sceneState.hoverId, i), + this._updateInstanceMaterial(A), + this.updateNodes(A) + } + }, + Hf.prototype.applySelection = function (A) { + console.log('applySelection17') + if (this.hasNodeInfo(A)) { + var e = A.getModelDescriptor().getInstancedNodeInfos(); + this._clearSelectedState(A), + this._clearHoveredState(A), + this._collectSelectedUserIds(A.manager.sceneState.selectionSet, e), + this._collectHoveredUserIds(A.manager.sceneState.hoverId, e), + this._updateInstanceMaterial(A), + this.updateNodes(A) + } + }, + Hf.prototype.clearSelection = function (A) { + this._clearSelectedState(A), + this.applyHover(A) + }, + Hf.prototype.applyHover = function (A) { + if (this.hasNodeInfo(A)) { + var e = A.getModelDescriptor().getInstancedNodeInfos(); + this._clearHoveredState(A), + this._collectHoveredUserIds(A.manager.sceneState.hoverId, e), + this._updateInstanceMaterial(A), + this.updateNodes(A) + } + }, + Hf.prototype.clearHover = function (A) { + this._clearHoveredState(A), + this._updateInstanceMaterial(A), + this.updateNodes(A) + }, + Hf.prototype.applyBlink = function (A) { + if (this.hasNodeInfo(A)) { + var e = A.getModelDescriptor().getInstancedNodeInfos(); + this._clearBlinkedState(A), + this._clearHoveredState(A), + this._collectBlinkedUserIds(A.manager.sceneState.getBlinkComponentsIdMap(), e), + this._collectHoveredUserIds(A.manager.sceneState.hoverId, e), + this._updateInstanceMaterial(A), + this.updateNodes(A) + } + }, + Hf.prototype.clearBlink = function (A) { + this._clearBlinkedState(A), + this.applyHover(A) + }, + Hf.prototype.applyReplacement = function (A) { + this._updateInstanceMaterial(A), + this.updateNodes(A) + }, + Hf.prototype.hasNodeInfo = function (A) { + return Boolean(A.getModelDescriptor().getInstancedNodeInfos()) + }, + Hf.prototype.updateNodes = function (A) { + if (this.hasNodeInfo(A)) { + var e; + if (e = this._collectModelFiltered(A)) + for (var t = A.getModelDescriptor().getInstancedUserIds(), i = 0; t.length > i; i += 1) + this._updateInstanceMaterialByUserId(A, t[i], Hc.OVERRIDED, e); + this.meshManager.updateNodes(A), + this.wireframeManager.updateNodes(A) + } + }, + Hf.prototype.generateWireframe = function (A, e) { + this.wireframeManager.generateWireframe(A, e) + }, + Hf.prototype.createMeshNodes = function (A, e) { + this.meshManager.createMeshNodes(A, e) + }, + Hf.prototype.createInstancedMeshNodes = function (A, e) { + this.meshManager._createBatchedInstanceGeometries(A, e) + }, + Hf.prototype.clearCachedData = function () { + this.meshManager.disposeGeometries() + }, + Hf.prototype.getMeshesByUserIds = function (A, e) { + this.meshManager.getMeshesByUserId(A, e) + }, + Hf.prototype.clearSelectedObjectIds = function () { + this.meshManager.clearSelectedObjectIds() + }, + Hf.prototype.adjustVisibility = function (A, e) { + this.meshManager.adjustVisibility(A, e), + this.wireframeManager.adjustVisibility(A, e) + }, + Hf.prototype.changeVisibilityOfSelectedObjects = function (A, e) { + this.meshManager.changeVisibilityOfSelectedObjects(A, e), + this.wireframeManager.changeVisibilityOfSelectedObjects(A, e) + }, + Hf.prototype.changeVisibilityOfNonSelectedObjects = function (A, e) { + this.meshManager.changeVisibilityOfNonSelectedObjects(A, e), + this.wireframeManager.changeVisibilityOfNonSelectedObjects(A, e) + }, + Hf.prototype.restoreVisibilityOfObjects = function () { + this.meshManager.restoreVisibilityOfObjects(), + this.wireframeManager.restoreVisibilityOfObjects() + }, + Hf.prototype.disposeBufferAfterVbo = function () { + this.meshManager.disposeBufferAfterVbo(), + this.wireframeManager.disposeBufferAfterVbo() + }, + Hf.prototype.addAllInstanceNodeToScene = function (A) { + this.meshManager.addAllInstanceNodeToScene(A) + }, + Hf.prototype.getGeometryBuffersByUserId = function (A, e) { + return this.meshManager.getGeometryBuffersByUserId(A, e) + }, + Hf.prototype.explode = function (A, e, t) { + this.meshManager.explode(A, e, t) + }, + Hf.prototype.explosion = function (A, e) { + this.meshManager.explosion(A, e) + }, + Hf.prototype.closeExplosion = function (A) { + this.meshManager.closeExplosion(A) + }, + Hf.prototype.componentsExplosion = function (A, e) { + this.meshManager.componentsExplosion(A, e) + }, + Hf.prototype.closeComponentsExplosion = function (A, e) { + this.meshManager.closeComponentsExplosion(A, e) + }, + Hf.prototype.isPickableNode = function (A) { + if (!this.filteredIds || !this.filteredIds[A]) + return !0; + var e = this.filteredIds[A]; + return !e[zc.HIDDEN] && !e[zc.TRANSPARENT] + }, + Hf.prototype.isHiddenNode = function (A) { + return !!(this.filteredIds && this.filteredIds[A] && this.filteredIds[A][zc.HIDDEN]) + }, + Hf.prototype.getMeshManager = function () { + return this.meshManager + }, + Hf.prototype.getWireFrameManager = function () { + return this.wireframeManager + }, + Hf.prototype.getTransparentUserIds = function () { + return this.transparentUserIdSetObject + }; + var Yf = function (A, e) { + tf.call(this, A), + this.defaultManager = new Of(e, A), + this.instancedManager = new Hf(A), + this.loader = new ef(this) + }; + + function Wf(A, e) { + var t = A.__state.conversionName.toString(), + i = Math.round(A.r), + o = Math.round(A.g), + n = Math.round(A.b), + r = A.a, + a = Math.round(A.h), + s = A.s.toFixed(1), + l = A.v.toFixed(1); + if (e || "THREE_CHAR_HEX" === t || "SIX_CHAR_HEX" === t) { + for (var c = A.hex.toString(16); 6 > c.length;) + c = "0" + c; + return "#" + c + } + return "CSS_RGB" === t ? "rgb(" + i + "," + o + "," + n + ")" : "CSS_RGBA" === t ? "rgba(" + i + "," + o + "," + n + "," + r + ")" : "HEX" === t ? "0x" + A.hex.toString(16) : "RGB_ARRAY" === t ? "[" + i + "," + o + "," + n + "]" : "RGBA_ARRAY" === t ? "[" + i + "," + o + "," + n + "," + r + "]" : "RGB_OBJ" === t ? "{r:" + i + ",g:" + o + ",b:" + n + "}" : "RGBA_OBJ" === t ? "{r:" + i + ",g:" + o + ",b:" + n + ",a:" + r + "}" : "HSV_OBJ" === t ? "{h:" + a + ",s:" + s + ",v:" + l + "}" : "HSVA_OBJ" === t ? "{h:" + a + ",s:" + s + ",v:" + l + ",a:" + r + "}" : "unknown format" + } + (Yf.prototype = Object.create(tf.prototype)).prepare = function (A, e) { + if (this.isLoaded() && !this.isHidden()) { + this.prepareWireframe(this.model, e); + this.model.getMaterialManager(); + this.model.getMaterialManager()._updateTextureMapping(), + !this.model.lightmap || this.model.enableLightmap === vc.EnableLightmap && this.model.lightmapIntensity === vc.LightmapIntensity || (this.model.enableLightmap = vc.EnableLightmap, + this.model.lightmapIntensity = vc.LightmapIntensity, + this.rebuildIndicesforLightmap(), + this.updateNodes()) + } + }, + Yf.prototype.settleData = function (A) { + this.addNodeInfoToOctantMap(), + this.createMeshNodes(A) + }, + Yf.prototype.addNodeInfoToOctantMap = function () { + var A = this.model.manager, + e = this.model.getEncodedDatabagId(); + this.loader.getDescriptor().traverseNodeInfosByComponent((function (t, i) { + A.addNodeInfoToOctantMap(e, t, i) + })) + }, + Yf.prototype.createMeshNodes = function (A) { + var e = this, + t = this.model, + i = this.loader.getDescriptor(); + this.instancedManager.createMeshNodes(t, i.getInstancedUserIds()), + this.defaultManager.asyncCreateMeshNodes(t, i.getStandardUserIds(), (function () { + t.getMaterialManager()._updateTextureMapping(), + e.clearCachedData(t), + e.loaded = !0, + A && A() + })) + }, + Yf.prototype.clearCachedData = function (A) { + this.loader.getDescriptor().destroyReader(), + this.loader.getDescriptor().clearReferencedMeshCache(), + this.defaultManager.clearCachedData(), + this.instancedManager.clearCachedData() + }; + var Jf = Array.prototype.forEach, + zf = Array.prototype.slice, + Zf = { + BREAK: {}, + extend: function (A) { + return this.each(zf.call(arguments, 1), (function (e) { + (this.isObject(e) ? Object.keys(e) : []).forEach(function (t) { + this.isUndefined(e[t]) || (A[t] = e[t]) + } + .bind(this)) + }), this), + A + }, + defaults: function (A) { + return this.each(zf.call(arguments, 1), (function (e) { + (this.isObject(e) ? Object.keys(e) : []).forEach(function (t) { + this.isUndefined(A[t]) && (A[t] = e[t]) + } + .bind(this)) + }), this), + A + }, + compose: function () { + var A = zf.call(arguments); + return function () { + for (var e = zf.call(arguments), t = A.length - 1; t >= 0; t--) + e = [A[t].apply(this, e)]; + return e[0] + } + }, + each: function (A, e, t) { + if (A) + if (Jf && A.forEach && A.forEach === Jf) + A.forEach(e, t); + else if (A.length === A.length + 0) { + var i, o = void 0; + for (o = 0, + i = A.length; i > o; o++) + if (o in A && e.call(t, A[o], o) === this.BREAK) + return + } else + for (var n in A) + if (e.call(t, A[n], n) === this.BREAK) + return + }, + defer: function (A) { + setTimeout(A, 0) + }, + debounce: function (A, e, t) { + var i = void 0; + return function () { + var o = this, + n = arguments; + + function r() { + i = null, + t || A.apply(o, n) + } + var a = t || !i; + clearTimeout(i), + i = setTimeout(r, e), + a && A.apply(o, n) + } + }, + toArray: function (A) { + return A.toArray ? A.toArray() : zf.call(A) + }, + isUndefined: function (A) { + return void 0 === A + }, + isNull: function (A) { + return null === A + }, + isNaN: function (A) { + function e() { + return A.apply(this, arguments) + } + return e.toString = function () { + return A.toString() + }, + e + }((function (A) { + return isNaN(A) + })), + isArray: Array.isArray || function (A) { + return A.constructor === Array + }, + isObject: function (A) { + return A === Object(A) + }, + isNumber: function (A) { + return A === A + 0 + }, + isString: function (A) { + return A === A + "" + }, + isBoolean: function (A) { + return !1 === A || !0 === A + }, + isFunction: function (A) { + return "[object Function]" === Object.prototype.toString.call(A) + } + }, + Xf = [{ + litmus: Zf.isString, + conversions: { + THREE_CHAR_HEX: { + read: function (A) { + var e = A.match(/^#([A-F0-9])([A-F0-9])([A-F0-9])$/i); + return null !== e && { + space: "HEX", + hex: parseInt("0x" + e[1].toString() + e[1].toString() + e[2].toString() + e[2].toString() + e[3].toString() + e[3].toString(), 0) + } + }, + write: Wf + }, + SIX_CHAR_HEX: { + read: function (A) { + var e = A.match(/^#([A-F0-9]{6})$/i); + return null !== e && { + space: "HEX", + hex: parseInt("0x" + e[1].toString(), 0) + } + }, + write: Wf + }, + CSS_RGB: { + read: function (A) { + var e = A.match(/^rgb\(\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*\)/); + return null !== e && { + space: "RGB", + r: parseFloat(e[1]), + g: parseFloat(e[2]), + b: parseFloat(e[3]) + } + }, + write: Wf + }, + CSS_RGBA: { + read: function (A) { + var e = A.match(/^rgba\(\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*\)/); + return null !== e && { + space: "RGB", + r: parseFloat(e[1]), + g: parseFloat(e[2]), + b: parseFloat(e[3]), + a: parseFloat(e[4]) + } + }, + write: Wf + } + } + }, { + litmus: Zf.isNumber, + conversions: { + HEX: { + read: function (A) { + return { + space: "HEX", + hex: A, + conversionName: "HEX" + } + }, + write: function (A) { + return A.hex + } + } + } + }, { + litmus: Zf.isArray, + conversions: { + RGB_ARRAY: { + read: function (A) { + return 3 === A.length && { + space: "RGB", + r: A[0], + g: A[1], + b: A[2] + } + }, + write: function (A) { + return [A.r, A.g, A.b] + } + }, + RGBA_ARRAY: { + read: function (A) { + return 4 === A.length && { + space: "RGB", + r: A[0], + g: A[1], + b: A[2], + a: A[3] + } + }, + write: function (A) { + return [A.r, A.g, A.b, A.a] + } + } + } + }, { + litmus: Zf.isObject, + conversions: { + RGBA_OBJ: { + read: function (A) { + return !!(Zf.isNumber(A.r) && Zf.isNumber(A.g) && Zf.isNumber(A.b) && Zf.isNumber(A.a)) && { + space: "RGB", + r: A.r, + g: A.g, + b: A.b, + a: A.a + } + }, + write: function (A) { + return { + r: A.r, + g: A.g, + b: A.b, + a: A.a + } + } + }, + RGB_OBJ: { + read: function (A) { + return !!(Zf.isNumber(A.r) && Zf.isNumber(A.g) && Zf.isNumber(A.b)) && { + space: "RGB", + r: A.r, + g: A.g, + b: A.b + } + }, + write: function (A) { + return { + r: A.r, + g: A.g, + b: A.b + } + } + }, + HSVA_OBJ: { + read: function (A) { + return !!(Zf.isNumber(A.h) && Zf.isNumber(A.s) && Zf.isNumber(A.v) && Zf.isNumber(A.a)) && { + space: "HSV", + h: A.h, + s: A.s, + v: A.v, + a: A.a + } + }, + write: function (A) { + return { + h: A.h, + s: A.s, + v: A.v, + a: A.a + } + } + }, + HSV_OBJ: { + read: function (A) { + return !!(Zf.isNumber(A.h) && Zf.isNumber(A.s) && Zf.isNumber(A.v)) && { + space: "HSV", + h: A.h, + s: A.s, + v: A.v + } + }, + write: function (A) { + return { + h: A.h, + s: A.s, + v: A.v + } + } + } + } + }], + _f = void 0, + $f = void 0, + Am = function () { + $f = !1; + var A = arguments.length > 1 ? Zf.toArray(arguments) : arguments[0]; + return Zf.each(Xf, (function (e) { + if (e.litmus(A)) + return Zf.each(e.conversions, (function (e, t) { + if (_f = e.read(A), + !1 === $f && !1 !== _f) + return $f = _f, + _f.conversionName = t, + _f.conversion = e, + Zf.BREAK + })), + Zf.BREAK + })), + $f + }, + em = void 0, + tm = { + hsv_to_rgb: function (A, e, t) { + var i = Math.floor(A / 60) % 6, + o = A / 60 - Math.floor(A / 60), + n = t * (1 - e), + r = t * (1 - o * e), + a = t * (1 - (1 - o) * e), + s = [ + [t, a, n], + [r, t, n], + [n, t, a], + [n, r, t], + [a, n, t], + [t, n, r] + ][i]; + return { + r: 255 * s[0], + g: 255 * s[1], + b: 255 * s[2] + } + }, + rgb_to_hsv: function (A, e, t) { + var i = Math.min(A, e, t), + o = Math.max(A, e, t), + n = o - i, + r = void 0; + return 0 === o ? { + h: NaN, + s: 0, + v: 0 + } : (r = A === o ? (e - t) / n : e === o ? 2 + (t - A) / n : 4 + (A - e) / n, + 0 > (r /= 6) && (r += 1), { + h: 360 * r, + s: n / o, + v: o / 255 + }) + }, + rgb_to_hex: function (A, e, t) { + var i = this.hex_with_component(0, 2, A); + return i = this.hex_with_component(i, 1, e), + i = this.hex_with_component(i, 0, t) + }, + component_from_hex: function (A, e) { + return A >> 8 * e & 255 + }, + hex_with_component: function (A, e, t) { + return t << (em = 8 * e) | A & ~(255 << em) + } + }, + im = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (A) { + return typeof A + } : + function (A) { + return A && "function" == typeof Symbol && A.constructor === Symbol && A !== Symbol.prototype ? "symbol" : typeof A + }, + om = function (A, e) { + if (!(A instanceof e)) + throw new TypeError("Cannot call a class as a function") + }, + nm = function () { + function A(A, e) { + for (var t = 0; e.length > t; t++) { + var i = e[t]; + i.enumerable = i.enumerable || !1, + i.configurable = !0, + "value" in i && (i.writable = !0), + Object.defineProperty(A, i.key, i) + } + } + return function (e, t, i) { + return t && A(e.prototype, t), + i && A(e, i), + e + } + }(), + rm = function A(e, t, i) { + null === e && (e = Function.prototype); + var o = Object.getOwnPropertyDescriptor(e, t); + if (void 0 === o) { + var n = Object.getPrototypeOf(e); + return null === n ? void 0 : A(n, t, i) + } + if ("value" in o) + return o.value; + var r = o.get; + return void 0 !== r ? r.call(i) : void 0 + }, + am = function (A, e) { + if ("function" != typeof e && null !== e) + throw new TypeError("Super expression must either be null or a function, not " + typeof e); + A.prototype = Object.create(e && e.prototype, { + constructor: { + value: A, + enumerable: !1, + writable: !0, + configurable: !0 + } + }), + e && (Object.setPrototypeOf ? Object.setPrototypeOf(A, e) : A.__proto__ = e) + }, + sm = function (A, e) { + if (!A) + throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + return !e || "object" != typeof e && "function" != typeof e ? A : e + }, + lm = function () { + function A() { + if (om(this, A), + this.__state = Am.apply(this, arguments), + !1 === this.__state) + throw new Error("Failed to interpret color arguments"); + this.__state.a = this.__state.a || 1 + } + return nm(A, [{ + key: "toString", + value: function () { + return Wf(this) + } + }, { + key: "toHexString", + value: function () { + return Wf(this, !0) + } + }, { + key: "toOriginal", + value: function () { + return this.__state.conversion.write(this) + } + }]), + A + }(); + + function cm(A, e, t) { + Object.defineProperty(A, e, { + get: function () { + return "RGB" === this.__state.space || lm.recalculateRGB(this, e, t), + this.__state[e] + }, + set: function (A) { + "RGB" !== this.__state.space && (lm.recalculateRGB(this, e, t), + this.__state.space = "RGB"), + this.__state[e] = A + } + }) + } + + function hm(A, e) { + Object.defineProperty(A, e, { + get: function () { + return "HSV" === this.__state.space || lm.recalculateHSV(this), + this.__state[e] + }, + set: function (A) { + "HSV" !== this.__state.space && (lm.recalculateHSV(this), + this.__state.space = "HSV"), + this.__state[e] = A + } + }) + } + lm.recalculateRGB = function (A, e, t) { + if ("HEX" === A.__state.space) + A.__state[e] = tm.component_from_hex(A.__state.hex, t); + else { + if ("HSV" !== A.__state.space) + throw new Error("Corrupted color state"); + Zf.extend(A.__state, tm.hsv_to_rgb(A.__state.h, A.__state.s, A.__state.v)) + } + }, + lm.recalculateHSV = function (A) { + var e = tm.rgb_to_hsv(A.r, A.g, A.b); + Zf.extend(A.__state, { + s: e.s, + v: e.v + }), + Zf.isNaN(e.h) ? Zf.isUndefined(A.__state.h) && (A.__state.h = 0) : A.__state.h = e.h + }, + lm.COMPONENTS = ["r", "g", "b", "h", "s", "v", "hex", "a"], + cm(lm.prototype, "r", 2), + cm(lm.prototype, "g", 1), + cm(lm.prototype, "b", 0), + hm(lm.prototype, "h"), + hm(lm.prototype, "s"), + hm(lm.prototype, "v"), + Object.defineProperty(lm.prototype, "a", { + get: function () { + return this.__state.a + }, + set: function (A) { + this.__state.a = A + } + }), + Object.defineProperty(lm.prototype, "hex", { + get: function () { + return "HEX" !== !this.__state.space && (this.__state.hex = tm.rgb_to_hex(this.r, this.g, this.b)), + this.__state.hex + }, + set: function (A) { + this.__state.space = "HEX", + this.__state.hex = A + } + }); + var dm = function () { + function A(e, t) { + om(this, A), + this.initialValue = e[t], + this.domElement = document.createElement("div"), + this.object = e, + this.property = t, + this.__onChange = void 0, + this.__onFinishChange = void 0 + } + return nm(A, [{ + key: "onChange", + value: function (A) { + return this.__onChange = A, + this + } + }, { + key: "onFinishChange", + value: function (A) { + return this.__onFinishChange = A, + this + } + }, { + key: "setValue", + value: function (A) { + return this.object[this.property] = A, + this.__onChange && this.__onChange.call(this, A), + this.updateDisplay(), + this + } + }, { + key: "getValue", + value: function () { + return this.object[this.property] + } + }, { + key: "updateDisplay", + value: function () { + return this + } + }, { + key: "isModified", + value: function () { + return this.initialValue !== this.getValue() + } + }]), + A + }(), + pm = {}; + Zf.each({ + HTMLEvents: ["change"], + MouseEvents: ["click", "mousemove", "mousedown", "mouseup", "mouseover"], + KeyboardEvents: ["keydown"] + }, (function (A, e) { + Zf.each(A, (function (A) { + pm[A] = e + })) + })); + var gm = /(\d+(\.\d+)?)px/; + + function um(A) { + if ("0" === A || Zf.isUndefined(A)) + return 0; + var e = A.match(gm); + return Zf.isNull(e) ? 0 : parseFloat(e[1]) + } + var fm = { + makeSelectable: function (A, e) { + void 0 !== A && void 0 !== A.style && (A.onselectstart = e ? function () { + return !1 + } : + function () {}, + A.style.MozUserSelect = e ? "auto" : "none", + A.style.KhtmlUserSelect = e ? "auto" : "none", + A.unselectable = e ? "on" : "off") + }, + makeFullscreen: function (A, e, t) { + var i = t, + o = e; + Zf.isUndefined(o) && (o = !0), + Zf.isUndefined(i) && (i = !0), + A.style.position = "absolute", + o && (A.style.left = 0, + A.style.right = 0), + i && (A.style.top = 0, + A.style.bottom = 0) + }, + fakeEvent: function (A, e, t, i) { + var o = t || {}, + n = pm[e]; + if (!n) + throw new Error("Event type " + e + " not supported."); + var r = document.createEvent(n); + switch (n) { + case "MouseEvents": + r.initMouseEvent(e, o.bubbles || !1, o.cancelable || !0, window, o.clickCount || 1, 0, 0, o.x || o.clientX || 0, o.y || o.clientY || 0, !1, !1, !1, !1, 0, null); + break; + case "KeyboardEvents": + var a = r.initKeyboardEvent || r.initKeyEvent; + Zf.defaults(o, { + cancelable: !0, + ctrlKey: !1, + altKey: !1, + shiftKey: !1, + metaKey: !1, + keyCode: void 0, + charCode: void 0 + }), + a(e, o.bubbles || !1, o.cancelable, window, o.ctrlKey, o.altKey, o.shiftKey, o.metaKey, o.keyCode, o.charCode); + break; + default: + r.initEvent(e, o.bubbles || !1, o.cancelable || !0) + } + Zf.defaults(r, i), + A.dispatchEvent(r) + }, + bind: function (A, e, t, i) { + return A.addEventListener ? A.addEventListener(e, t, i || !1) : A.attachEvent && A.attachEvent("on" + e, t), + fm + }, + unbind: function (A, e, t, i) { + return A.removeEventListener ? A.removeEventListener(e, t, i || !1) : A.detachEvent && A.detachEvent("on" + e, t), + fm + }, + addClass: function (A, e) { + if (void 0 === A.className) + A.className = e; + else if (A.className !== e) { + var t = A.className.split(/ +/); - + 1 === t.indexOf(e) && (t.push(e), + A.className = t.join(" ").replace(/^\s+/, "").replace(/\s+$/, "")) + } + return fm + }, + removeClass: function (A, e) { + if (e) + if (A.className === e) + A.removeAttribute("class"); + else { + var t = A.className.split(/ +/), + i = t.indexOf(e); - + 1 !== i && (t.splice(i, 1), + A.className = t.join(" ")) + } + else + A.className = void 0; + return fm + }, + hasClass: function (A, e) { + return new RegExp("(?:^|\\s+)" + e + "(?:\\s+|$)").test(A.className) || !1 + }, + getWidth: function (A) { + var e = getComputedStyle(A); + return um(e["border-left-width"]) + um(e["border-right-width"]) + um(e["padding-left"]) + um(e["padding-right"]) + um(e.width) + }, + getHeight: function (A) { + var e = getComputedStyle(A); + return um(e["border-top-width"]) + um(e["border-bottom-width"]) + um(e["padding-top"]) + um(e["padding-bottom"]) + um(e.height) + }, + getOffset: function (A) { + var e = A, + t = { + left: 0, + top: 0 + }; + if (e.offsetParent) + do { + t.left += e.offsetLeft, + t.top += e.offsetTop, + e = e.offsetParent + } while (e); + return t + }, + isActive: function (A) { + return A === document.activeElement && (A.type || A.href) + } + }, + mm = function (A) { + function e(A, t) { + om(this, e); + var i = sm(this, (e.__proto__ || Object.getPrototypeOf(e)).call(this, A, t)), + o = i; + return i.__prev = i.getValue(), + i.__checkbox = document.createElement("input"), + i.__checkbox.setAttribute("type", "checkbox"), + fm.bind(i.__checkbox, "change", (function () { + o.setValue(!o.__prev) + }), !1), + i.domElement.appendChild(i.__checkbox), + i.updateDisplay(), + i + } + return am(e, A), + nm(e, [{ + key: "setValue", + value: function (A) { + var t = rm(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "setValue", this).call(this, A); + return this.__onFinishChange && this.__onFinishChange.call(this, this.getValue()), + this.__prev = this.getValue(), + t + } + }, { + key: "updateDisplay", + value: function () { + return !0 === this.getValue() ? (this.__checkbox.setAttribute("checked", "checked"), + this.__checkbox.checked = !0, + this.__prev = !0) : (this.__checkbox.checked = !1, + this.__prev = !1), + rm(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "updateDisplay", this).call(this) + } + }]), + e + }(dm), + Cm = function (A) { + function e(A, t, i) { + om(this, e); + var o = sm(this, (e.__proto__ || Object.getPrototypeOf(e)).call(this, A, t)), + n = i, + r = o; + if (o.__select = document.createElement("select"), + Zf.isArray(n)) { + var a = {}; + Zf.each(n, (function (A) { + a[A] = A + })), + n = a + } + return Zf.each(n, (function (A, e) { + var t = document.createElement("option"); + t.innerHTML = e, + t.setAttribute("value", A), + r.__select.appendChild(t) + })), + o.updateDisplay(), + fm.bind(o.__select, "change", (function () { + r.setValue(this.options[this.selectedIndex].value) + })), + o.domElement.appendChild(o.__select), + o + } + return am(e, A), + nm(e, [{ + key: "setValue", + value: function (A) { + var t = rm(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "setValue", this).call(this, A); + return this.__onFinishChange && this.__onFinishChange.call(this, this.getValue()), + t + } + }, { + key: "updateDisplay", + value: function () { + return fm.isActive(this.__select) ? this : (this.__select.value = this.getValue(), + rm(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "updateDisplay", this).call(this)) + } + }]), + e + }(dm), + ym = function (A) { + function e(A, t) { + om(this, e); + var i = sm(this, (e.__proto__ || Object.getPrototypeOf(e)).call(this, A, t)), + o = i; + + function n() { + o.setValue(o.__input.value) + } + return i.__input = document.createElement("input"), + i.__input.setAttribute("type", "text"), + fm.bind(i.__input, "keyup", n), + fm.bind(i.__input, "change", n), + fm.bind(i.__input, "blur", (function () { + o.__onFinishChange && o.__onFinishChange.call(o, o.getValue()) + })), + fm.bind(i.__input, "keydown", (function (A) { + 13 === A.keyCode && this.blur() + })), + i.updateDisplay(), + i.domElement.appendChild(i.__input), + i + } + return am(e, A), + nm(e, [{ + key: "updateDisplay", + value: function () { + return fm.isActive(this.__input) || (this.__input.value = this.getValue()), + rm(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "updateDisplay", this).call(this) + } + }]), + e + }(dm); + + function vm(A) { + var e = A.toString(); + return e.indexOf(".") > -1 ? e.length - e.indexOf(".") - 1 : 0 + } + var Im = function (A) { + function e(A, t, i) { + om(this, e); + var o = sm(this, (e.__proto__ || Object.getPrototypeOf(e)).call(this, A, t)), + n = i || {}; + return o.__min = n.min, + o.__max = n.max, + o.__step = n.step, + o.__impliedStep = Zf.isUndefined(o.__step) ? 0 === o.initialValue ? 1 : Math.pow(10, Math.floor(Math.log(Math.abs(o.initialValue)) / Math.LN10)) / 10 : o.__step, + o.__precision = vm(o.__impliedStep), + o + } + return am(e, A), + nm(e, [{ + key: "setValue", + value: function (A) { + var t = A; + return void 0 !== this.__min && this.__min > t ? t = this.__min : void 0 !== this.__max && t > this.__max && (t = this.__max), + void 0 !== this.__step && t % this.__step != 0 && (t = Math.round(t / this.__step) * this.__step), + rm(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "setValue", this).call(this, t) + } + }, { + key: "min", + value: function (A) { + return this.__min = A, + this + } + }, { + key: "max", + value: function (A) { + return this.__max = A, + this + } + }, { + key: "step", + value: function (A) { + return this.__step = A, + this.__impliedStep = A, + this.__precision = vm(A), + this + } + }]), + e + }(dm); + var Em = function (A) { + function e(A, t, i) { + om(this, e); + var o = sm(this, (e.__proto__ || Object.getPrototypeOf(e)).call(this, A, t, i)); + o.__truncationSuspended = !1; + var n = o, + r = void 0; + + function a() { + n.__onFinishChange && n.__onFinishChange.call(n, n.getValue()) + } + + function s(A) { + var e = r - A.clientY; + n.setValue(n.getValue() + e * n.__impliedStep), + r = A.clientY + } + + function l() { + fm.unbind(window, "mousemove", s), + fm.unbind(window, "mouseup", l), + a() + } + return o.__input = document.createElement("input"), + o.__input.setAttribute("type", "text"), + fm.bind(o.__input, "change", (function () { + var A = parseFloat(n.__input.value); + Zf.isNaN(A) || n.setValue(A) + })), + fm.bind(o.__input, "blur", (function () { + a() + })), + fm.bind(o.__input, "mousedown", (function (A) { + fm.bind(window, "mousemove", s), + fm.bind(window, "mouseup", l), + r = A.clientY + })), + fm.bind(o.__input, "keydown", (function (A) { + 13 === A.keyCode && (n.__truncationSuspended = !0, + this.blur(), + n.__truncationSuspended = !1, + a()) + })), + o.updateDisplay(), + o.domElement.appendChild(o.__input), + o + } + return am(e, A), + nm(e, [{ + key: "updateDisplay", + value: function () { + var A, t; + return this.__input.value = this.__truncationSuspended ? this.getValue() : (A = this.getValue(), + t = Math.pow(10, this.__precision), + Math.round(A * t) / t), + rm(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "updateDisplay", this).call(this) + } + }]), + e + }(Im); + + function Bm(A, e, t, i, o) { + return i + (A - e) / (t - e) * (o - i) + } + var xm = function (A) { + function e(A, t, i, o, n) { + om(this, e); + var r = sm(this, (e.__proto__ || Object.getPrototypeOf(e)).call(this, A, t, { + min: i, + max: o, + step: n + })), + a = r; + + function s(A) { + A.preventDefault(); + var e = a.__background.getBoundingClientRect(); + return a.setValue(Bm(A.clientX, e.left, e.right, a.__min, a.__max)), + !1 + } + + function l() { + fm.unbind(window, "mousemove", s), + fm.unbind(window, "mouseup", l), + a.__onFinishChange && a.__onFinishChange.call(a, a.getValue()) + } + + function c(A) { + var e = A.touches[0].clientX, + t = a.__background.getBoundingClientRect(); + a.setValue(Bm(e, t.left, t.right, a.__min, a.__max)) + } + + function h() { + fm.unbind(window, "touchmove", c), + fm.unbind(window, "touchend", h), + a.__onFinishChange && a.__onFinishChange.call(a, a.getValue()) + } + return r.__background = document.createElement("div"), + r.__foreground = document.createElement("div"), + fm.bind(r.__background, "mousedown", (function (A) { + document.activeElement.blur(), + fm.bind(window, "mousemove", s), + fm.bind(window, "mouseup", l), + s(A) + })), + fm.bind(r.__background, "touchstart", (function (A) { + if (1 !== A.touches.length) + return; + fm.bind(window, "touchmove", c), + fm.bind(window, "touchend", h), + c(A) + })), + fm.addClass(r.__background, "slider"), + fm.addClass(r.__foreground, "slider-fg"), + r.updateDisplay(), + r.__background.appendChild(r.__foreground), + r.domElement.appendChild(r.__background), + r + } + return am(e, A), + nm(e, [{ + key: "updateDisplay", + value: function () { + var A = (this.getValue() - this.__min) / (this.__max - this.__min); + return this.__foreground.style.width = 100 * A + "%", + rm(e.prototype.__proto__ || Object.getPrototypeOf(e.prototype), "updateDisplay", this).call(this) + } + }]), + e + }(Im), + Sm = function (A) { + function e(A, t, i) { + om(this, e); + var o = sm(this, (e.__proto__ || Object.getPrototypeOf(e)).call(this, A, t)), + n = o; + return o.__button = document.createElement("div"), + o.__button.innerHTML = void 0 === i ? "Fire" : i, + fm.bind(o.__button, "click", (function (A) { + return A.preventDefault(), + n.fire(), + !1 + })), + fm.addClass(o.__button, "button"), + o.domElement.appendChild(o.__button), + o + } + return am(e, A), + nm(e, [{ + key: "fire", + value: function () { + this.__onChange && this.__onChange.call(this), + this.getValue().call(this.object), + this.__onFinishChange && this.__onFinishChange.call(this, this.getValue()) + } + }]), + e + }(dm), + wm = function (A) { + function e(A, t) { + om(this, e); + var i = sm(this, (e.__proto__ || Object.getPrototypeOf(e)).call(this, A, t)); + i.__color = new lm(i.getValue()), + i.__temp = new lm(0); + var o = i; + i.domElement = document.createElement("div"), + fm.makeSelectable(i.domElement, !1), + i.__selector = document.createElement("div"), + i.__selector.className = "selector", + i.__saturation_field = document.createElement("div"), + i.__saturation_field.className = "saturation-field", + i.__field_knob = document.createElement("div"), + i.__field_knob.className = "field-knob", + i.__field_knob_border = "2px solid ", + i.__hue_knob = document.createElement("div"), + i.__hue_knob.className = "hue-knob", + i.__hue_field = document.createElement("div"), + i.__hue_field.className = "hue-field", + i.__input = document.createElement("input"), + i.__input.type = "text", + i.__input_textShadow = "0 1px 1px ", + fm.bind(i.__input, "keydown", (function (A) { + 13 === A.keyCode && h.call(this) + })), + fm.bind(i.__input, "blur", h), + fm.bind(i.__selector, "mousedown", (function () { + fm.addClass(this, "drag").bind(window, "mouseup", (function () { + fm.removeClass(o.__selector, "drag") + })) + })), + fm.bind(i.__selector, "touchstart", (function () { + fm.addClass(this, "drag").bind(window, "touchend", (function () { + fm.removeClass(o.__selector, "drag") + })) + })); + var n, r = document.createElement("div"); + + function a(A) { + p(A), + fm.bind(window, "mousemove", p), + fm.bind(window, "touchmove", p), + fm.bind(window, "mouseup", l), + fm.bind(window, "touchend", l) + } + + function s(A) { + g(A), + fm.bind(window, "mousemove", g), + fm.bind(window, "touchmove", g), + fm.bind(window, "mouseup", c), + fm.bind(window, "touchend", c) + } + + function l() { + fm.unbind(window, "mousemove", p), + fm.unbind(window, "touchmove", p), + fm.unbind(window, "mouseup", l), + fm.unbind(window, "touchend", l), + d() + } + + function c() { + fm.unbind(window, "mousemove", g), + fm.unbind(window, "touchmove", g), + fm.unbind(window, "mouseup", c), + fm.unbind(window, "touchend", c), + d() + } + + function h() { + var A = Am(this.value); + !1 !== A ? (o.__color.__state = A, + o.setValue(o.__color.toOriginal())) : this.value = o.__color.toString() + } + + function d() { + o.__onFinishChange && o.__onFinishChange.call(o, o.__color.toOriginal()) + } + + function p(A) { + -1 === A.type.indexOf("touch") && A.preventDefault(); + var e = o.__saturation_field.getBoundingClientRect(), + t = A.touches && A.touches[0] || A, + i = (t.clientX - e.left) / (e.right - e.left), + n = 1 - (t.clientY - e.top) / (e.bottom - e.top); + return n > 1 ? n = 1 : 0 > n && (n = 0), + i > 1 ? i = 1 : 0 > i && (i = 0), + o.__color.v = n, + o.__color.s = i, + o.setValue(o.__color.toOriginal()), + !1 + } + + function g(A) { + -1 === A.type.indexOf("touch") && A.preventDefault(); + var e = o.__hue_field.getBoundingClientRect(), + t = 1 - ((A.touches && A.touches[0] || A).clientY - e.top) / (e.bottom - e.top); + return t > 1 ? t = 1 : 0 > t && (t = 0), + o.__color.h = 360 * t, + o.setValue(o.__color.toOriginal()), + !1 + } + return Zf.extend(i.__selector.style, { + width: "122px", + height: "102px", + padding: "3px", + backgroundColor: "#222", + boxShadow: "0px 1px 3px rgba(0,0,0,0.3)" + }), + Zf.extend(i.__field_knob.style, { + position: "absolute", + width: "12px", + height: "12px", + border: i.__field_knob_border + (.5 > i.__color.v ? "#fff" : "#000"), + boxShadow: "0px 1px 3px rgba(0,0,0,0.5)", + borderRadius: "12px", + zIndex: 1 + }), + Zf.extend(i.__hue_knob.style, { + position: "absolute", + width: "15px", + height: "2px", + borderRight: "4px solid #fff", + zIndex: 1 + }), + Zf.extend(i.__saturation_field.style, { + width: "100px", + height: "100px", + border: "1px solid #555", + marginRight: "3px", + display: "inline-block", + cursor: "pointer" + }), + Zf.extend(r.style, { + width: "100%", + height: "100%", + background: "none" + }), + bm(r, "top", "rgba(0,0,0,0)", "#000"), + Zf.extend(i.__hue_field.style, { + width: "15px", + height: "100px", + border: "1px solid #555", + cursor: "ns-resize", + position: "absolute", + top: "3px", + right: "3px" + }), + (n = i.__hue_field).style.background = "", + n.style.cssText += "background: -moz-linear-gradient(top, #ff0000 0%, #ff00ff 17%, #0000ff 34%, #00ffff 50%, #00ff00 67%, #ffff00 84%, #ff0000 100%);", + n.style.cssText += "background: -webkit-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);", + n.style.cssText += "background: -o-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);", + n.style.cssText += "background: -ms-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);", + n.style.cssText += "background: linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);", + Zf.extend(i.__input.style, { + outline: "none", + textAlign: "center", + color: "#fff", + border: 0, + fontWeight: "bold", + textShadow: i.__input_textShadow + "rgba(0,0,0,0.7)" + }), + fm.bind(i.__saturation_field, "mousedown", a), + fm.bind(i.__saturation_field, "touchstart", a), + fm.bind(i.__field_knob, "mousedown", a), + fm.bind(i.__field_knob, "touchstart", a), + fm.bind(i.__hue_field, "mousedown", s), + fm.bind(i.__hue_field, "touchstart", s), + i.__saturation_field.appendChild(r), + i.__selector.appendChild(i.__field_knob), + i.__selector.appendChild(i.__saturation_field), + i.__selector.appendChild(i.__hue_field), + i.__hue_field.appendChild(i.__hue_knob), + i.domElement.appendChild(i.__input), + i.domElement.appendChild(i.__selector), + i.updateDisplay(), + i + } + return am(e, A), + nm(e, [{ + key: "updateDisplay", + value: function () { + var A = Am(this.getValue()); + if (!1 !== A) { + var e = !1; + Zf.each(lm.COMPONENTS, (function (t) { + if (!Zf.isUndefined(A[t]) && !Zf.isUndefined(this.__color.__state[t]) && A[t] !== this.__color.__state[t]) + return e = !0, {} + }), this), + e && Zf.extend(this.__color.__state, A) + } + Zf.extend(this.__temp.__state, this.__color.__state), + this.__temp.a = 1; + var t = .5 > this.__color.v || this.__color.s > .5 ? 255 : 0, + i = 255 - t; + Zf.extend(this.__field_knob.style, { + marginLeft: 100 * this.__color.s - 7 + "px", + marginTop: 100 * (1 - this.__color.v) - 7 + "px", + backgroundColor: this.__temp.toHexString(), + border: this.__field_knob_border + "rgb(" + t + "," + t + "," + t + ")" + }), + this.__hue_knob.style.marginTop = 100 * (1 - this.__color.h / 360) + "px", + this.__temp.s = 1, + this.__temp.v = 1, + bm(this.__saturation_field, "left", "#fff", this.__temp.toHexString()), + this.__input.value = this.__color.toString(), + Zf.extend(this.__input.style, { + backgroundColor: this.__color.toHexString(), + color: "rgb(" + t + "," + t + "," + t + ")", + textShadow: this.__input_textShadow + "rgba(" + i + "," + i + "," + i + ",.7)" + }) + } + }]), + e + }(dm), + Mm = ["-moz-", "-o-", "-webkit-", "-ms-", ""]; + + function bm(A, e, t, i) { + A.style.background = "", + Zf.each(Mm, (function (o) { + A.style.cssText += "background: " + o + "linear-gradient(" + e + ", " + t + " 0%, " + i + " 100%); " + })) + } + var Um = function (A, e) { + var t = e || document, + i = document.createElement("style"); + i.type = "text/css", + i.innerHTML = A; + var o = t.getElementsByTagName("head")[0]; + try { + o.appendChild(i) + } catch (A) {} + }, + Fm = '
\n\n Here\'s the new load parameter for your GUI\'s constructor:\n\n \n\n
\n\n Automatically save\n values to localStorage on exit.\n\n
The values saved to localStorage will\n override those passed to dat.GUI\'s constructor. This makes it\n easier to work incrementally, but localStorage is fragile,\n and your friends may not see the same values you do.\n\n
\n\n
\n\n
', + Km = function (A, e) { + var t = A[e]; + return Zf.isArray(arguments[2]) || Zf.isObject(arguments[2]) ? new Cm(A, e, arguments[2]) : Zf.isNumber(t) ? Zf.isNumber(arguments[2]) && Zf.isNumber(arguments[3]) ? Zf.isNumber(arguments[4]) ? new xm(A, e, arguments[2], arguments[3], arguments[4]) : new xm(A, e, arguments[2], arguments[3]) : Zf.isNumber(arguments[4]) ? new Em(A, e, { + min: arguments[2], + max: arguments[3], + step: arguments[4] + }) : new Em(A, e, { + min: arguments[2], + max: arguments[3] + }) : Zf.isString(t) ? new ym(A, e) : Zf.isFunction(t) ? new Sm(A, e, "") : Zf.isBoolean(t) ? new mm(A, e) : null + }; + var Qm = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (A) { + setTimeout(A, 1e3 / 60) + }, + Rm = function () { + function A() { + om(this, A), + this.backgroundElement = document.createElement("div"), + Zf.extend(this.backgroundElement.style, { + backgroundColor: "rgba(0,0,0,0.8)", + top: 0, + left: 0, + display: "none", + zIndex: "1000", + opacity: 0, + WebkitTransition: "opacity 0.2s linear", + transition: "opacity 0.2s linear" + }), + fm.makeFullscreen(this.backgroundElement), + this.backgroundElement.style.position = "fixed", + this.domElement = document.createElement("div"), + Zf.extend(this.domElement.style, { + position: "fixed", + display: "none", + zIndex: "1001", + opacity: 0, + WebkitTransition: "-webkit-transform 0.2s ease-out, opacity 0.2s linear", + transition: "transform 0.2s ease-out, opacity 0.2s linear" + }), + document.body.appendChild(this.backgroundElement), + document.body.appendChild(this.domElement); + var e = this; + fm.bind(this.backgroundElement, "click", (function () { + e.hide() + })) + } + return nm(A, [{ + key: "show", + value: function () { + var A = this; + this.backgroundElement.style.display = "block", + this.domElement.style.display = "block", + this.domElement.style.opacity = 0, + this.domElement.style.webkitTransform = "scale(1.1)", + this.layout(), + Zf.defer((function () { + A.backgroundElement.style.opacity = 1, + A.domElement.style.opacity = 1, + A.domElement.style.webkitTransform = "scale(1)" + })) + } + }, { + key: "hide", + value: function () { + var A = this, + e = function e() { + A.domElement.style.display = "none", + A.backgroundElement.style.display = "none", + fm.unbind(A.domElement, "webkitTransitionEnd", e), + fm.unbind(A.domElement, "transitionend", e), + fm.unbind(A.domElement, "oTransitionEnd", e) + }; + fm.bind(this.domElement, "webkitTransitionEnd", e), + fm.bind(this.domElement, "transitionend", e), + fm.bind(this.domElement, "oTransitionEnd", e), + this.backgroundElement.style.opacity = 0, + this.domElement.style.opacity = 0, + this.domElement.style.webkitTransform = "scale(1.1)" + } + }, { + key: "layout", + value: function () { + this.domElement.style.left = window.innerWidth / 2 - fm.getWidth(this.domElement) / 2 + "px", + this.domElement.style.top = window.innerHeight / 2 - fm.getHeight(this.domElement) / 2 + "px" + } + }]), + A + }(); + Um(function (A) { + if (A && "undefined" != typeof window) { + var e = document.createElement("style"); + return e.setAttribute("type", "text/css"), + e.innerHTML = A, + document.head.appendChild(e), + A + } + }(".dg ul{list-style:none;margin:0;padding:0;width:100%;clear:both}.dg.ac{position:fixed;top:0;left:0;right:0;height:0;z-index:0}.dg:not(.ac) .main{overflow:hidden}.dg.main{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear}.dg.main.taller-than-window{overflow-y:auto}.dg.main.taller-than-window .close-button{opacity:1;margin-top:-1px;border-top:1px solid #2c2c2c}.dg.main ul.closed .close-button{opacity:1 !important}.dg.main:hover .close-button,.dg.main .close-button.drag{opacity:1}.dg.main .close-button{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear;border:0;line-height:19px;height:20px;cursor:pointer;text-align:center;background-color:#000}.dg.main .close-button.close-top{position:relative}.dg.main .close-button.close-bottom{position:absolute}.dg.main .close-button:hover{background-color:#111}.dg.a{float:right;margin-right:15px;overflow-y:visible}.dg.a.has-save>ul.close-top{margin-top:0}.dg.a.has-save>ul.close-bottom{margin-top:27px}.dg.a.has-save>ul.closed{margin-top:0}.dg.a .save-row{top:0;z-index:1002}.dg.a .save-row.close-top{position:relative}.dg.a .save-row.close-bottom{position:fixed}.dg li{-webkit-transition:height .1s ease-out;-o-transition:height .1s ease-out;-moz-transition:height .1s ease-out;transition:height .1s ease-out;-webkit-transition:overflow .1s linear;-o-transition:overflow .1s linear;-moz-transition:overflow .1s linear;transition:overflow .1s linear}.dg li:not(.folder){cursor:auto;height:27px;line-height:27px;padding:0 4px 0 5px}.dg li.folder{padding:0;border-left:4px solid rgba(0,0,0,0)}.dg li.title{cursor:pointer;margin-left:-4px}.dg .closed li:not(.title),.dg .closed ul li,.dg .closed ul li>*{height:0;overflow:hidden;border:0}.dg .cr{clear:both;padding-left:3px;height:27px;overflow:hidden}.dg .property-name{cursor:default;float:left;clear:left;width:40%;overflow:hidden;text-overflow:ellipsis}.dg .c{float:left;width:60%;position:relative}.dg .c input[type=text]{border:0;margin-top:4px;padding:3px;width:100%;float:right}.dg .has-slider input[type=text]{width:30%;margin-left:0}.dg .slider{float:left;width:66%;margin-left:-5px;margin-right:0;height:19px;margin-top:4px}.dg .slider-fg{height:100%}.dg .c input[type=checkbox]{margin-top:7px}.dg .c select{margin-top:5px}.dg .cr.function,.dg .cr.function .property-name,.dg .cr.function *,.dg .cr.boolean,.dg .cr.boolean *{cursor:pointer}.dg .cr.color{overflow:visible}.dg .selector{display:none;position:absolute;margin-left:-9px;margin-top:23px;z-index:10}.dg .c:hover .selector,.dg .selector.drag{display:block}.dg li.save-row{padding:0}.dg li.save-row .button{display:inline-block;padding:0px 6px}.dg.dialogue{background-color:#222;width:460px;padding:15px;font-size:13px;line-height:15px}#dg-new-constructor{padding:10px;color:#222;font-family:Monaco, monospace;font-size:10px;border:0;resize:none;box-shadow:inset 1px 1px 1px #888;word-wrap:break-word;margin:12px 0;display:block;width:440px;overflow-y:scroll;height:100px;position:relative}#dg-local-explain{display:none;font-size:11px;line-height:17px;border-radius:3px;background-color:#333;padding:8px;margin-top:10px}#dg-local-explain code{font-size:10px}#dat-gui-save-locally{display:none}.dg{color:#eee;font:11px 'Lucida Grande', sans-serif;text-shadow:0 -1px 0 #111}.dg.main::-webkit-scrollbar{width:5px;background:#1a1a1a}.dg.main::-webkit-scrollbar-corner{height:0;display:none}.dg.main::-webkit-scrollbar-thumb{border-radius:5px;background:#676767}.dg li:not(.folder){background:#1a1a1a;border-bottom:1px solid #2c2c2c}.dg li.save-row{line-height:25px;background:#dad5cb;border:0}.dg li.save-row select{margin-left:5px;width:108px}.dg li.save-row .button{margin-left:5px;margin-top:1px;border-radius:2px;font-size:9px;line-height:7px;padding:4px 4px 5px 4px;background:#c5bdad;color:#fff;text-shadow:0 1px 0 #b0a58f;box-shadow:0 -1px 0 #b0a58f;cursor:pointer}.dg li.save-row .button.gears{background:#c5bdad url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAANCAYAAAB/9ZQ7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQJJREFUeNpiYKAU/P//PwGIC/ApCABiBSAW+I8AClAcgKxQ4T9hoMAEUrxx2QSGN6+egDX+/vWT4e7N82AMYoPAx/evwWoYoSYbACX2s7KxCxzcsezDh3evFoDEBYTEEqycggWAzA9AuUSQQgeYPa9fPv6/YWm/Acx5IPb7ty/fw+QZblw67vDs8R0YHyQhgObx+yAJkBqmG5dPPDh1aPOGR/eugW0G4vlIoTIfyFcA+QekhhHJhPdQxbiAIguMBTQZrPD7108M6roWYDFQiIAAv6Aow/1bFwXgis+f2LUAynwoIaNcz8XNx3Dl7MEJUDGQpx9gtQ8YCueB+D26OECAAQDadt7e46D42QAAAABJRU5ErkJggg==) 2px 1px no-repeat;height:7px;width:8px}.dg li.save-row .button:hover{background-color:#bab19e;box-shadow:0 -1px 0 #b0a58f}.dg li.folder{border-bottom:0}.dg li.title{padding-left:16px;background:#000 url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat;cursor:pointer;border-bottom:1px solid rgba(255,255,255,0.2)}.dg .closed li.title{background-image:url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==)}.dg .cr.boolean{border-left:3px solid #806787}.dg .cr.color{border-left:3px solid}.dg .cr.function{border-left:3px solid #e61d5f}.dg .cr.number{border-left:3px solid #2FA1D6}.dg .cr.number input[type=text]{color:#2FA1D6}.dg .cr.string{border-left:3px solid #1ed36f}.dg .cr.string input[type=text]{color:#1ed36f}.dg .cr.function:hover,.dg .cr.boolean:hover{background:#111}.dg .c input[type=text]{background:#303030;outline:none}.dg .c input[type=text]:hover{background:#3c3c3c}.dg .c input[type=text]:focus{background:#494949;color:#fff}.dg .c .slider{background:#303030;cursor:ew-resize}.dg .c .slider-fg{background:#2FA1D6;max-width:100%}.dg .c .slider:hover{background:#3c3c3c}.dg .c .slider:hover .slider-fg{background:#44abda}\n")); + var Tm = function () { + try { + return !!window.localStorage + } catch (A) { + return !1 + } + }(), + km = void 0, + Dm = !0, + Lm = void 0, + Nm = !1, + Om = [], + Vm = function A(e) { + var t = this, + i = e || {}; + this.domElement = document.createElement("div"), + this.__ul = document.createElement("ul"), + this.domElement.appendChild(this.__ul), + fm.addClass(this.domElement, "dg"), + this.__folders = {}, + this.__controllers = [], + this.__rememberedObjects = [], + this.__rememberedObjectIndecesToControllers = [], + this.__listening = [], + i = Zf.defaults(i, { + closeOnTop: !1, + autoPlace: !0, + width: A.DEFAULT_WIDTH + }), + i = Zf.defaults(i, { + resizable: i.autoPlace, + hideable: i.autoPlace + }), + Zf.isUndefined(i.load) ? i.load = { + preset: "Default" + } : i.preset && (i.load.preset = i.preset), + Zf.isUndefined(i.parent) && i.hideable && Om.push(this), + i.resizable = Zf.isUndefined(i.parent) && i.resizable, + i.autoPlace && Zf.isUndefined(i.scrollable) && (i.scrollable = !0); + var o = Tm && "true" === localStorage.getItem(Ym(this, "isLocal")), + n = void 0, + r = void 0; + if (Object.defineProperties(this, { + parent: { + get: function () { + return i.parent + } + }, + scrollable: { + get: function () { + return i.scrollable + } + }, + autoPlace: { + get: function () { + return i.autoPlace + } + }, + closeOnTop: { + get: function () { + return i.closeOnTop + } + }, + preset: { + get: function () { + return t.parent ? t.getRoot().preset : i.load.preset + }, + set: function (A) { + t.parent ? t.getRoot().preset = A : i.load.preset = A, + function (A) { + for (var e = 0; A.__preset_select.length > e; e++) + A.__preset_select[e].value === A.preset && (A.__preset_select.selectedIndex = e) + }(this), + t.revert() + } + }, + width: { + get: function () { + return i.width + }, + set: function (A) { + i.width = A, + Xm(t, A) + } + }, + name: { + get: function () { + return i.name + }, + set: function (A) { + i.name = A, + r && (r.innerHTML = i.name) + } + }, + closed: { + get: function () { + return i.closed + }, + set: function (e) { + i.closed = e, + i.closed ? fm.addClass(t.__ul, A.CLASS_CLOSED) : fm.removeClass(t.__ul, A.CLASS_CLOSED), + this.onResize(), + t.__closeButton && (t.__closeButton.innerHTML = e ? A.TEXT_OPEN : A.TEXT_CLOSED) + } + }, + load: { + get: function () { + return i.load + } + }, + useLocalStorage: { + get: function () { + return o + }, + set: function (A) { + Tm && (o = A, + A ? fm.bind(window, "unload", n) : fm.unbind(window, "unload", n), + localStorage.setItem(Ym(t, "isLocal"), A)) + } + } + }), + Zf.isUndefined(i.parent)) { + if (this.closed = i.closed || !1, + fm.addClass(this.domElement, A.CLASS_MAIN), + fm.makeSelectable(this.domElement, !1), + Tm && o) { + t.useLocalStorage = !0; + var a = localStorage.getItem(Ym(this, "gui")); + a && (i.load = JSON.parse(a)) + } + this.__closeButton = document.createElement("div"), + this.__closeButton.innerHTML = A.TEXT_CLOSED, + fm.addClass(this.__closeButton, A.CLASS_CLOSE_BUTTON), + i.closeOnTop ? (fm.addClass(this.__closeButton, A.CLASS_CLOSE_TOP), + this.domElement.insertBefore(this.__closeButton, this.domElement.childNodes[0])) : (fm.addClass(this.__closeButton, A.CLASS_CLOSE_BOTTOM), + this.domElement.appendChild(this.__closeButton)), + fm.bind(this.__closeButton, "click", (function () { + t.closed = !t.closed + })) + } else { + void 0 === i.closed && (i.closed = !0); + var s = document.createTextNode(i.name); + fm.addClass(s, "controller-name"), + r = Gm(t, s); + fm.addClass(this.__ul, A.CLASS_CLOSED), + fm.addClass(r, "title"), + fm.bind(r, "click", (function (A) { + return A.preventDefault(), + t.closed = !t.closed, + !1 + })), + i.closed || (this.closed = !1) + } + i.autoPlace && (Zf.isUndefined(i.parent) && (Dm && (Lm = document.createElement("div"), + fm.addClass(Lm, "dg"), + fm.addClass(Lm, A.CLASS_AUTO_PLACE_CONTAINER), + document.body.appendChild(Lm), + Dm = !1), + Lm.appendChild(this.domElement), + fm.addClass(this.domElement, A.CLASS_AUTO_PLACE)), + this.parent || Xm(t, i.width)), + this.__resizeHandler = function () { + t.onResizeDebounced() + }, + fm.bind(window, "resize", this.__resizeHandler), + fm.bind(this.__ul, "webkitTransitionEnd", this.__resizeHandler), + fm.bind(this.__ul, "transitionend", this.__resizeHandler), + fm.bind(this.__ul, "oTransitionEnd", this.__resizeHandler), + this.onResize(), + i.resizable && Zm(this), + this.saveToLocalStorageIfPossible = n = function () { + Tm && "true" === localStorage.getItem(Ym(t, "isLocal")) && localStorage.setItem(Ym(t, "gui"), JSON.stringify(t.getSaveObject())) + }, + i.parent || function () { + var A = t.getRoot(); + A.width += 1, + Zf.defer((function () { + A.width -= 1 + })) + }() + }; + + function Gm(A, e, t) { + var i = document.createElement("li"); + return e && i.appendChild(e), + t ? A.__ul.insertBefore(i, t) : A.__ul.appendChild(i), + A.onResize(), + i + } + + function Pm(A) { + fm.unbind(window, "resize", A.__resizeHandler), + A.saveToLocalStorageIfPossible && fm.unbind(window, "unload", A.saveToLocalStorageIfPossible) + } + + function qm(A, e) { + var t = A.__preset_select[A.__preset_select.selectedIndex]; + t.innerHTML = e ? t.value + "*" : t.value + } + + function jm(A, e) { + var t = A.getRoot(), + i = t.__rememberedObjects.indexOf(e.object); + if (-1 !== i) { + var o = t.__rememberedObjectIndecesToControllers[i]; + if (void 0 === o && (t.__rememberedObjectIndecesToControllers[i] = o = {}), + o[e.property] = e, + t.load && t.load.remembered) { + var n = t.load.remembered, + r = void 0; + if (n[A.preset]) + r = n[A.preset]; + else { + if (!n.Default) + return; + r = n.Default + } + if (r[i] && void 0 !== r[i][e.property]) { + var a = r[i][e.property]; + e.initialValue = a, + e.setValue(a) + } + } + } + } + + function Hm(A, e, t, i) { + if (void 0 === e[t]) + throw new Error('Object "' + e + '" has no property "' + t + '"'); + var o = void 0; + if (i.color) + o = new wm(e, t); + else { + var n = [e, t].concat(i.factoryArgs); + o = Km.apply(A, n) + } + i.before instanceof dm && (i.before = i.before.__li), + jm(A, o), + fm.addClass(o.domElement, "c"); + var r = document.createElement("span"); + fm.addClass(r, "property-name"), + r.innerHTML = o.property; + var a = document.createElement("div"); + a.appendChild(r), + a.appendChild(o.domElement); + var s = Gm(A, a, i.before); + return fm.addClass(s, Vm.CLASS_CONTROLLER_ROW), + fm.addClass(s, o instanceof wm ? "color" : im(o.getValue())), + function (A, e, t) { + if (t.__li = e, + t.__gui = A, + Zf.extend(t, { + options: function (e) { + if (arguments.length > 1) { + var i = t.__li.nextElementSibling; + return t.remove(), + Hm(A, t.object, t.property, { + before: i, + factoryArgs: [Zf.toArray(arguments)] + }) + } + if (Zf.isArray(e) || Zf.isObject(e)) { + var o = t.__li.nextElementSibling; + return t.remove(), + Hm(A, t.object, t.property, { + before: o, + factoryArgs: [e] + }) + } + }, + name: function (A) { + return t.__li.firstElementChild.firstElementChild.innerHTML = A, + t + }, + listen: function () { + return t.__gui.listen(t), + t + }, + remove: function () { + return t.__gui.remove(t), + t + } + }), + t instanceof xm) { + var i = new Em(t.object, t.property, { + min: t.__min, + max: t.__max, + step: t.__step + }); + Zf.each(["updateDisplay", "onChange", "onFinishChange", "step", "min", "max"], (function (A) { + var e = t[A], + o = i[A]; + t[A] = i[A] = function () { + var A = Array.prototype.slice.call(arguments); + return o.apply(i, A), + e.apply(t, A) + } + })), + fm.addClass(e, "has-slider"), + t.domElement.insertBefore(i.domElement, t.domElement.firstElementChild) + } else if (t instanceof Em) { + var o = function (e) { + if (Zf.isNumber(t.__min) && Zf.isNumber(t.__max)) { + var i = t.__li.firstElementChild.firstElementChild.innerHTML, + o = t.__gui.__listening.indexOf(t) > -1; + t.remove(); + var n = Hm(A, t.object, t.property, { + before: t.__li.nextElementSibling, + factoryArgs: [t.__min, t.__max, t.__step] + }); + return n.name(i), + o && n.listen(), + n + } + return e + }; + t.min = Zf.compose(o, t.min), + t.max = Zf.compose(o, t.max) + } else + t instanceof mm ? (fm.bind(e, "click", (function () { + fm.fakeEvent(t.__checkbox, "click") + })), + fm.bind(t.__checkbox, "click", (function (A) { + A.stopPropagation() + }))) : t instanceof Sm ? (fm.bind(e, "click", (function () { + fm.fakeEvent(t.__button, "click") + })), + fm.bind(e, "mouseover", (function () { + fm.addClass(t.__button, "hover") + })), + fm.bind(e, "mouseout", (function () { + fm.removeClass(t.__button, "hover") + }))) : t instanceof wm && (fm.addClass(e, "color"), + t.updateDisplay = Zf.compose((function (A) { + return e.style.borderLeftColor = t.__color.toString(), + A + }), t.updateDisplay), + t.updateDisplay()); + t.setValue = Zf.compose((function (e) { + return A.getRoot().__preset_select && t.isModified() && qm(A.getRoot(), !0), + e + }), t.setValue) + }(A, s, o), + A.__controllers.push(o), + o + } + + function Ym(A, e) { + return document.location.href + "." + e + } + + function Wm(A, e, t) { + var i = document.createElement("option"); + i.innerHTML = e, + i.value = e, + A.__preset_select.appendChild(i), + t && (A.__preset_select.selectedIndex = A.__preset_select.length - 1) + } + + function Jm(A, e) { + e.style.display = A.useLocalStorage ? "block" : "none" + } + + function zm(A) { + var e = A.__save_row = document.createElement("li"); + fm.addClass(A.domElement, "has-save"), + A.__ul.insertBefore(e, A.__ul.firstChild), + fm.addClass(e, "save-row"); + var t = document.createElement("span"); + t.innerHTML = " ", + fm.addClass(t, "button gears"); + var i = document.createElement("span"); + i.innerHTML = "Save", + fm.addClass(i, "button"), + fm.addClass(i, "save"); + var o = document.createElement("span"); + o.innerHTML = "New", + fm.addClass(o, "button"), + fm.addClass(o, "save-as"); + var n = document.createElement("span"); + n.innerHTML = "Revert", + fm.addClass(n, "button"), + fm.addClass(n, "revert"); + var r = A.__preset_select = document.createElement("select"); + if (A.load && A.load.remembered ? Zf.each(A.load.remembered, (function (e, t) { + Wm(A, t, t === A.preset) + })) : Wm(A, "Default", !1), + fm.bind(r, "change", (function () { + for (var e = 0; A.__preset_select.length > e; e++) + A.__preset_select[e].innerHTML = A.__preset_select[e].value; + A.preset = this.value + })), + e.appendChild(r), + e.appendChild(t), + e.appendChild(i), + e.appendChild(o), + e.appendChild(n), + Tm) { + var a = document.getElementById("dg-local-explain"), + s = document.getElementById("dg-local-storage"); + document.getElementById("dg-save-locally").style.display = "block", + "true" === localStorage.getItem(Ym(0, "isLocal")) && s.setAttribute("checked", "checked"), + Jm(A, a), + fm.bind(s, "change", (function () { + A.useLocalStorage = !A.useLocalStorage, + Jm(A, a) + })) + } + var l = document.getElementById("dg-new-constructor"); + fm.bind(l, "keydown", (function (A) { + !A.metaKey || 67 !== A.which && 67 !== A.keyCode || km.hide() + })), + fm.bind(t, "click", (function () { + l.innerHTML = JSON.stringify(A.getSaveObject(), void 0, 2), + km.show(), + l.focus(), + l.select() + })), + fm.bind(i, "click", (function () { + A.save() + })), + fm.bind(o, "click", (function () { + var e = prompt("Enter a new preset name."); + e && A.saveAs(e) + })), + fm.bind(n, "click", (function () { + A.revert() + })) + } + + function Zm(A) { + var e = void 0; + + function t(t) { + return t.preventDefault(), + A.width += e - t.clientX, + A.onResize(), + e = t.clientX, + !1 + } + + function i() { + fm.removeClass(A.__closeButton, Vm.CLASS_DRAG), + fm.unbind(window, "mousemove", t), + fm.unbind(window, "mouseup", i) + } + + function o(o) { + return o.preventDefault(), + e = o.clientX, + fm.addClass(A.__closeButton, Vm.CLASS_DRAG), + fm.bind(window, "mousemove", t), + fm.bind(window, "mouseup", i), + !1 + } + A.__resize_handle = document.createElement("div"), + Zf.extend(A.__resize_handle.style, { + width: "6px", + marginLeft: "-3px", + height: "200px", + cursor: "ew-resize", + position: "absolute" + }), + fm.bind(A.__resize_handle, "mousedown", o), + fm.bind(A.__closeButton, "mousedown", o), + A.domElement.insertBefore(A.__resize_handle, A.domElement.firstElementChild) + } + + function Xm(A, e) { + A.domElement.style.width = e + "px", + A.__save_row && A.autoPlace && (A.__save_row.style.width = e + "px"), + A.__closeButton && (A.__closeButton.style.width = e + "px") + } + + function _m(A, e) { + var t = {}; + return Zf.each(A.__rememberedObjects, (function (i, o) { + var n = {}; + Zf.each(A.__rememberedObjectIndecesToControllers[o], (function (A, t) { + n[t] = e ? A.initialValue : A.getValue() + })), + t[o] = n + })), + t + } + Vm.toggleHide = function () { + Nm = !Nm, + Zf.each(Om, (function (A) { + A.domElement.style.display = Nm ? "none" : "" + })) + }, + Vm.CLASS_AUTO_PLACE = "a", + Vm.CLASS_AUTO_PLACE_CONTAINER = "ac", + Vm.CLASS_MAIN = "main", + Vm.CLASS_CONTROLLER_ROW = "cr", + Vm.CLASS_TOO_TALL = "taller-than-window", + Vm.CLASS_CLOSED = "closed", + Vm.CLASS_CLOSE_BUTTON = "close-button", + Vm.CLASS_CLOSE_TOP = "close-top", + Vm.CLASS_CLOSE_BOTTOM = "close-bottom", + Vm.CLASS_DRAG = "drag", + Vm.DEFAULT_WIDTH = 245, + Vm.TEXT_CLOSED = "关闭控制器", + Vm.TEXT_OPEN = "打开控制器", + Vm._keydownHandler = function (A) { + "text" === document.activeElement.type || 72 !== A.which && 72 !== A.keyCode || Vm.toggleHide() + }, + fm.bind(window, "keydown", Vm._keydownHandler, !1), + Zf.extend(Vm.prototype, { + add: function (A, e) { + return Hm(this, A, e, { + factoryArgs: Array.prototype.slice.call(arguments, 2) + }) + }, + addColor: function (A, e) { + return Hm(this, A, e, { + color: !0 + }) + }, + remove: function (A) { + this.__ul.removeChild(A.__li), + this.__controllers.splice(this.__controllers.indexOf(A), 1); + var e = this; + Zf.defer((function () { + e.onResize() + })) + }, + destroy: function () { + if (this.parent) + throw new Error("Only the root GUI should be removed with .destroy(). For subfolders, use gui.removeFolder(folder) instead."); + this.autoPlace && Lm.removeChild(this.domElement); + var A = this; + Zf.each(this.__folders, (function (e) { + A.removeFolder(e) + })), + fm.unbind(window, "keydown", Vm._keydownHandler, !1), + Pm(this) + }, + addFolder: function (A) { + if (void 0 !== this.__folders[A]) + throw new Error('You already have a folder in this GUI by the name "' + A + '"'); + var e = { + name: A, + parent: this + }; + e.autoPlace = this.autoPlace, + this.load && this.load.folders && this.load.folders[A] && (e.closed = this.load.folders[A].closed, + e.load = this.load.folders[A]); + var t = new Vm(e); + this.__folders[A] = t; + var i = Gm(this, t.domElement); + return fm.addClass(i, "folder"), + t + }, + removeFolder: function (A) { + this.__ul.removeChild(A.domElement.parentElement), + delete this.__folders[A.name], + this.load && this.load.folders && this.load.folders[A.name] && delete this.load.folders[A.name], + Pm(A); + var e = this; + Zf.each(A.__folders, (function (e) { + A.removeFolder(e) + })), + Zf.defer((function () { + e.onResize() + })) + }, + open: function () { + this.closed = !1 + }, + close: function () { + this.closed = !0 + }, + hide: function () { + this.domElement.style.display = "none" + }, + show: function () { + this.domElement.style.display = "" + }, + onResize: function () { + var A = this.getRoot(); + if (A.scrollable) { + var e = fm.getOffset(A.__ul).top, + t = 0; + Zf.each(A.__ul.childNodes, (function (e) { + A.autoPlace && e === A.__save_row || (t += fm.getHeight(e)) + })), + window.innerHeight - e - 20 < t ? (fm.addClass(A.domElement, Vm.CLASS_TOO_TALL), + A.__ul.style.height = window.innerHeight - e - 20 + "px") : (fm.removeClass(A.domElement, Vm.CLASS_TOO_TALL), + A.__ul.style.height = "auto") + } + A.__resize_handle && Zf.defer((function () { + A.__resize_handle.style.height = A.__ul.offsetHeight + "px" + })), + A.__closeButton && (A.__closeButton.style.width = A.width + "px") + }, + onResizeDebounced: Zf.debounce((function () { + this.onResize() + }), 50), + remember: function () { + if (Zf.isUndefined(km) && ((km = new Rm).domElement.innerHTML = Fm), + this.parent) + throw new Error("You can only call remember on a top level GUI."); + var A = this; + Zf.each(Array.prototype.slice.call(arguments), (function (e) { + 0 === A.__rememberedObjects.length && zm(A), + -1 === A.__rememberedObjects.indexOf(e) && A.__rememberedObjects.push(e) + })), + this.autoPlace && Xm(this, this.width) + }, + getRoot: function () { + for (var A = this; A.parent;) + A = A.parent; + return A + }, + getSaveObject: function () { + var A = this.load; + return A.closed = this.closed, + this.__rememberedObjects.length > 0 && (A.preset = this.preset, + A.remembered || (A.remembered = {}), + A.remembered[this.preset] = _m(this)), + A.folders = {}, + Zf.each(this.__folders, (function (e, t) { + A.folders[t] = e.getSaveObject() + })), + A + }, + save: function () { + this.load.remembered || (this.load.remembered = {}), + this.load.remembered[this.preset] = _m(this), + qm(this, !1), + this.saveToLocalStorageIfPossible() + }, + saveAs: function (A) { + this.load.remembered || (this.load.remembered = {}, + this.load.remembered.Default = _m(this, !0)), + this.load.remembered[A] = _m(this), + this.preset = A, + Wm(this, A, !0), + this.saveToLocalStorageIfPossible() + }, + revert: function (A) { + Zf.each(this.__controllers, (function (e) { + this.getRoot().load.remembered ? jm(A || this.getRoot(), e) : e.setValue(e.initialValue), + e.__onFinishChange && e.__onFinishChange.call(e, e.getValue()) + }), this), + Zf.each(this.__folders, (function (A) { + A.revert(A) + })), + A || qm(this.getRoot(), !1) + }, + listen: function (A) { + var e = 0 === this.__listening.length; + this.__listening.push(A), + e && function A(e) { + 0 !== e.length && Qm.call(window, (function () { + A(e) + })); + Zf.each(e, (function (A) { + A.updateDisplay() + })) + }(this.__listening) + }, + updateDisplay: function () { + Zf.each(this.__controllers, (function (A) { + A.updateDisplay() + })), + Zf.each(this.__folders, (function (A) { + A.updateDisplay() + })) + } + }); + var $m = Vm, + AC = function (A) { + var e = this; + this.indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB; + window.IDBKeyRange || window; + var t = uh.extend({}, { + dbName: "bos3d", + store: "default", + version: 1, + indexes: ["id"], + keyPath: "id" + }, A); + this.IDBOpenDBRequest = null, + this.dbName = t.dbName; + var i = this.version = t.version; + this.storeName = t.store; + var o = t.keyPath, + n = this.indexedDB.open(this.dbName, i); + n.onupgradeneeded = function (A) { + Bh.log("DB version changed to " + i); + var n = A.target.result, + r = null; + if (!1 === n.objectStoreNames.contains(e.storeName)) { + r = n.createObjectStore(e.storeName, { + keyPath: o + }); + for (var a = 0; t.indexes.length > a; a += 1) { + var s = t.indexes[a]; + r.createIndex(s, s, { + unique: !1 + }) + } + } + }, + n.onsuccess = function (A) { + e.IDBOpenDBRequest = A.target.result, + Bh.log("成功建立并打开数据库:" + e.IDBOpenDBRequest.name + " version " + i), + e.dispatchEvent({ + type: Rc.ON_DATABASE_OPEN + }) + }, + n.onerror = function (A) { + Bh.error("IndexedDB", A), + e.dispatchEvent({ + type: Rc.ON_DATABASE_EEEOR + }) + }, + n.onblocked = function (A) { + Bh.warn("Please close all other tabs with this site open!", A) + } + }; + Object.assign(AC.prototype, Ld.prototype), + Object.assign(AC.prototype, { + constructor: AC, + get: function (A, e, t) { + if (this.IDBOpenDBRequest) { + var i = this.IDBOpenDBRequest.transaction([this.storeName]).objectStore(this.storeName).get(A); + i.onsuccess = function (A) { + "function" == typeof e && e(A.target.result ? A.target.result.data : null) + }, + i.onerror = function (A) { + Bh.error("getDataByKey error"), + "function" == typeof t && t(A) + } + } + }, + getBatch: function (A, e, t) { + if (this.IDBOpenDBRequest) { + for (var i = this.IDBOpenDBRequest.transaction([this.storeName]).objectStore(this.storeName), o = {}, n = [], r = 0; A.length > r; r += 1) + n.push(new Promise((function (e, t) { + var o = A[r], + n = i.index("id").get(o); + n.onsuccess = function (A) { + e(A.target.result) + }, + n.onerror = function (A) { + Bh.error(o, "failed", A), + t(A) + } + }))); + Promise.all(n).then((function (A) { + for (var t = 0; A.length > t; t += 1) + A[t] && (o[A[t].id] = A[t].data); + e(o) + })).catch((function (A) { + Bh.debug(A), + A instanceof TypeError ? Bh.error(A) : e(o) + })) + } + }, + setBatch: function (A, e, t) { + if (this.IDBOpenDBRequest) + for (var i = this.IDBOpenDBRequest.transaction([this.storeName], "readwrite").objectStore(this.storeName), o = 0; A.length > o; o += 1) { + i.put({ + id: A[o].key, + data: A[o] + }).onsuccess = function (A) {} + } + }, + set: function (A, e, t, i) { + var o = performance.now(); + if (this.IDBOpenDBRequest) { + var n = this.IDBOpenDBRequest.transaction([this.storeName], "readwrite").objectStore(this.storeName).add([{ + id: A, + data: e + }]); + n.onsuccess = function (A) { + "function" == typeof t && t(A.target.result), + Bh.debug("Saved state to IndexedDB. " + (performance.now() - o).toFixed(2) + "ms") + }, + n.onerror = function (A) { + "function" == typeof i && i(A) + } + } + }, + put: function (A, e, t, i, o) { + if (this.IDBOpenDBRequest) { + var n = performance.now(), + r = this.IDBOpenDBRequest.transaction([t], "readwrite").objectStore(t).put({ + id: A, + data: e + }); + r.onsuccess = function (A) { + "function" == typeof i && i(A.target.result), + Bh.debug("Saved state to IndexedDB. " + (performance.now() - n).toFixed(2) + "ms") + }, + r.onerror = function (A) { + Bh.error("离线存储出错:", A.target.error.name, ":", A.target.error.message), + "function" == typeof o && o(A) + } + } + }, + delete: function (A, e, t) { + if (this.IDBOpenDBRequest) { + var i = this.IDBOpenDBRequest.transaction(this.storeName, "readwrite").objectStore(this.storeName).delete(A); + i.onsuccess = function (A) { + Bh.debug("delete data form IndexedDB."), + "function" == typeof e && e(A.target.result) + }, + i.onerror = function (A) { + Bh.error("IndexedDB", A), + "function" == typeof t && t(A) + } + } + }, + clear: function (A, e) { + if (this.IDBOpenDBRequest) { + var t = this.IDBOpenDBRequest.transaction(this.storeName, "readwrite").objectStore(this.storeName).clear(); + t.onsuccess = function (e) { + Bh.debug("Cleared IndexedDB."), + "function" == typeof A && A(e.target.result) + }, + t.onerror = function (A) { + Bh.error("IndexedDB", A), + "function" == typeof e && e(A) + } + } + }, + deleteDatabase: function (A) { + indexedDB.deleteDatabase(this.dbName), + Bh.debug(this.dbName + "数据库已删除"), + "function" == typeof A && A() + }, + close: function (A) { + this.IDBOpenDBRequest && (this.IDBOpenDBRequest.close(), + Bh.debug("数据库已关闭"), + "function" == typeof A && A()) + }, + getIndex: function (A, e, t, i) { + var o = A.transaction(e, "readwrite").objectStore(e).index("id"); + o.openCursor().onsuccess = function () { + var A = this.result; + A && (Bh.debug(A.value), + A.continue()) + }; + var n = IDBKeyRange.only(2), + r = o.openCursor(n); + r.onsuccess = function () { + var A = r.result; + A && Bh.info(A.value) + } + }, + destroy: function () { + this.close(), + this.IDBOpenDBRequest = null, + this.dbName = null, + this.storeName = null + } + }); + var eC = function (A) { + this.serverUrl = A.serverUrl, + this.modelKey = A.modelKey, + this.dbName = A.dbName, + this.offLine = A.offLine, + this.shareParameter = "" !== A.share ? "&share=" + A.share : "" + }; + eC.prototype.projectUrl = function (A) { + return this.offLine ? this.serverUrl + "/" + this.modelKey + "/resource/scene/scene.json" : this.serverUrl + "/api/" + this.dbName + "/models?modelKey=" + (A || this.modelKey) + this.shareParameter + }, + eC.prototype.sceneUrl = function (A) { + return this.serverUrl + this.modelKey + "/scene/scene_" + (A = A || 0) + vc.ZipResourcePostfix + }, + eC.prototype.sceneIdUrl = function () { + return this.serverUrl + this.modelKey + "/scene/scene_id" + vc.ZipResourcePostfix + }, + eC.prototype.userIdUrl = function () { + return this.serverUrl + this.modelKey + "/scene/user_id" + vc.ZipResourcePostfix + }, + eC.prototype.octreeUrl = function (A) { + return this.serverUrl + this.modelKey + "/scene/octree_" + A + vc.ZipResourcePostfix + }, + eC.prototype.symbolUrl = function () { + return this.serverUrl + this.modelKey + "/symbol/symbol" + vc.ZipResourcePostfix + }, + eC.prototype.mpkUrl = function (A) { + return this.offLine ? this.serverUrl + "/" + this.modelKey + "/resource/data/" + A : np(this.apiVersion, "1.6.0") ? this.serverUrl + "/data?fileKey=" + A : this.serverUrl + "/api/" + this.dbName + "/files?fileKey=" + A + }, + eC.prototype.texUrl = function (A) { + return this.offLine ? this.serverUrl + "/" + this.modelKey + "/resource/data/Texture/" + A : np(this.apiVersion, "1.6.0") ? this.serverUrl + "/data?fileKey=" + A : this.serverUrl + "/api/" + this.dbName + "/files?fileKey=" + A + }, + eC.prototype.bonesUrl = function (A) { + return this.offLine ? this.serverUrl + "/" + this.modelKey + "/resource/data/" + A : np(this.apiVersion, "1.6.0") ? this.serverUrl + "/data?fileKey=" + A : this.serverUrl + "/api/" + this.dbName + "/files?fileKey=" + A + }, + eC.prototype.nodesUrl = function (A) { + return this.offLine ? this.serverUrl + "/" + this.modelKey + "/resource/data/" + A : np(this.apiVersion, "1.6.0") ? this.serverUrl + "/data?fileKey=" + A : this.serverUrl + "/api/" + this.dbName + "/files?fileKey=" + A + }, + eC.prototype.clipsUrl = function (A) { + return this.offLine ? this.serverUrl + "/" + this.modelKey + "/resource/data/" + A : np(this.apiVersion, "1.6.0") ? this.serverUrl + "/data?fileKey=" + A : this.serverUrl + "/api/" + this.dbName + "/files?fileKey=" + A + }, + eC.prototype.kdTreeUrl = function (A) { + return this.offLine ? this.serverUrl + "/" + this.modelKey + "/resource/data/" + A : np(this.apiVersion, "1.6.0") ? this.serverUrl + "/data?fileKey=" + A : this.serverUrl + "/api/" + this.dbName + "/files?fileKey=" + A + }, + eC.prototype.lightUrl = function (A) { + return this.offLine ? this.serverUrl + "/" + this.modelKey + "/resource/data/" + A : np(this.apiVersion, "1.6.0") ? this.serverUrl + "/data?fileKey=" + A : this.serverUrl + "/api/" + this.dbName + "/files?fileKey=" + A + }, + eC.prototype.rootTilesUrl = function (A) { + return this.offLine ? this.serverUrl + "/" + this.modelKey + "/tileset.json" : this.serverUrl + "/api/" + this.dbName + "/geomodels/" + this.modelKey + "/data/tileset.json" + }, + eC.prototype.tilesUrl = function (A) { + return this.offLine ? this.serverUrl + "/" + this.modelKey + "/" + A : this.serverUrl + "/api/" + this.dbName + "/geomodels/" + this.modelKey + "/data/" + A + }, + eC.prototype.b3dmUrl = function (A) { + return this.offLine ? this.serverUrl + "/" + this.modelKey + "/" + A : this.serverUrl + "/api/" + this.dbName + "/geomodels/" + this.modelKey + "/data/" + A + }, + eC.prototype.attributeUrl = function () { + if (this.offLine) + return this.serverUrl + "/" + this.modelKey + "/resource/attribute/attribute.json" + }, + eC.prototype.meshIdUrl = function () { + return this.serverUrl + this.modelKey + "/mpk/mesh_id" + vc.ZipResourcePostfix + }, + eC.prototype.materialUrl = function () { + return this.serverUrl + this.modelKey + "/material/material" + vc.ZipResourcePostfix + }, + eC.prototype.materialIdUrl = function () { + return this.serverUrl + this.modelKey + "/material/material_id" + vc.ZipResourcePostfix + }, + eC.prototype.userDataUrl = function () { + return this.serverUrl + this.modelKey + "/userdata/userdata" + vc.ZipResourcePostfix + }, + eC.prototype.textureUrl = function (A) { + return this.offLine ? this.serverUrl + "/" + this.modelKey + "/resource/data/" + A : np(this.apiVersion, "1.6.0") ? this.serverUrl + "/data?fileKey=" + A : this.serverUrl + "/api/" + this.dbName + "/files?fileKey=" + A + this.shareParameter + }, + eC.prototype.axisNetUrl = function (A) { + return this.offLine ? this.serverUrl + "/" + this.modelKey + "/resource/data/" + A : np(this.apiVersion, "1.6.0") ? this.serverUrl + "/data?fileKey=" + A : this.serverUrl + "/api/" + this.dbName + "/files?fileKey=" + A + }, + eC.prototype.floorInfoUrl = function (A) { + return this.offLine ? this.serverUrl + "/" + A + "/resource/floor/floorKey.json" : this.serverUrl + "/api/" + this.dbName + "/components/floorkeys?modelKey=" + A + this.shareParameter + }, + eC.prototype.floorMapUrl = function (A) { + return this.offLine ? this.serverUrl + "/" + this.modelKey + "/resource/floor/map.json" : this.serverUrl + "/api/" + this.dbName + "/models/maps?modelKey=" + this.modelKey + this.shareParameter + }; + var tC = function (A) { + $u.call(this, A), + this.instancedComponent = {} + }; + Object.assign(tC.prototype, $u.prototype), + tC.prototype.parseItemData = function (A) { + this._readMaterialBuffer(this.model); + var e = {}, + t = this.referencedMeshCache; + for (var i in Bh.time("_readItemData"), + t.components) + t.components.hasOwnProperty(i) && this._readItemData(e, i, i, void 0, 0); + Bh.timeEnd("_readItemData"), + e = null, + A && A() + }, + tC.prototype._readItemData = function (A, e, t) { + var i = this.referencedMeshCache.components[e]; + void 0 !== i && this._readMeshInfo(A, t, i, null) + }, + tC.prototype._readMeshInfo = function (A, e, t, i) { + var o = this.referencedMeshCache, + n = this.model.materialManager.materials, + r = null; + if (t.nodes || t.nodeIds) { + r = t.originalId; + var a = (new M).fromArray(t.matrix || [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]); + t.matrix = a; + var s = []; + s = t.nodes ? t.nodes : t.nodeIds; + for (var l = 0; s.length > l; l += 1) { + var c = s[l]; + if ("object" !== lc(c) && (c = this.getReferencedMeshComponentNodeById(c)), + c) { + var h, d = null, + p = ""; + if (-1 !== c.geoId) + if (d = this._getComponentNodeAttr(c, t, l)) { + if (t.buildInCategory && (d.buildInCategory = t.buildInCategory), + !n[p = c.material]) { + var g = _u[t.type] ? _u[t.type].color : void 0; + g || (Bh.log("Material not found for type: ", t.type), + g = _u.DEFAULT.color), + g || (Bh.log("Default material not found for type: ", t.type), + g = [1, 1, 1, 1]); + var u = new LA(g[0], g[1], g[2]), + f = p || u.getHexString() + "_" + g[3], + m = n[f]; + m || (Bh.warn("缺少材质 " + p), + m = Kd.createStandardMaterial({ + color: u + }), + 1 > g[3] && (m.transparent = !0, + m.opacity = g[3]), + m.side = 2, + n[f] = m), + d.material = p = f + } + if (n[p].aoMap) { + var C = this.getReferencedMeshBufferById(d.geometryId); + C && (C.uv2 = C.uv) + } + h = d.nodeId; + var y = this.userDataReader, + v = y ? y.getUserData(null) : null; + d.type = t.type, + d.userId = e, + d.name = t.name, + d.userDataId = null, + d.originalId = r, + d.materialId = p, + d.originMId = p, + d.userData = v, + d.categoryId = 0, + d.componentKey = e, + d.familyName = t.familyName, + d.familySymbol = t.familySymbol; + var I = vc.Instance, + E = o.reuseNodes.hasOwnProperty(h); + d.instanceOrNot = !(!I || !E), + d.isBatched = !0, + d.state = Lc.Visible, + d.material = null, + this._classifyNodeInfo(d), + d = null + } else + Bh.debug("非法node") + } + } + } + }, + tC.prototype._parseInstanced = function () { + Bh.time("_parseInstanced"), + this.instancedComponent = {}, + this.instancedNode = {}; + var A = {}, + e = this.referencedMeshCache, + t = e.componentNodes, + i = this.model.materialManager.materials; + for (var o in e.components) + if (e.components.hasOwnProperty(o)) + for (var n = e.components[o], r = 0, a = n.Nodes.length; a > r; r += 1) { + var s = n.Nodes[r], + l = t[s], + c = l.geometry, + h = l.material; + if (-1 !== c) { + if (!h && 0 !== h) { + var d = _u[n.type] ? _u[n.type].color : void 0; + d || (Bh.log("Material not found for type: ", n.type), + d = _u.DEFAULT.color), + d || (Bh.log("Default material not found for type: ", n.type), + d = [1, 1, 1, 1]); + var p = new LA(d[0], d[1], d[2]), + g = p.getHexString() + "_" + d[3], + u = i[g]; + u || (Bh.warn("缺少材质 " + g), + u = Kd.createStandardMaterial({ + color: p + }), + 1 > d[3] && (u.transparent = !0, + u.opacity = d[3]), + u.side = 2, + i[g] = u), + l.material = g, + h = g + } + var f = h + "&" + c; + void 0 === A[f] && (A[f] = []), + A[f].push({ + nodeId: s + }) + } else + Bh.debug("实体没有几何") + } + for (var m in A) + if (A.hasOwnProperty(m)) + if (1 < A[m].length) + for (var C = 0; A[m].length > C; C += 1) + this.instancedComponent[A[m][C].nodeId] = !0; + else + delete A[m]; + Bh.timeEnd("_parseInstanced") + }; + var iC = function (A) { + Xu.call(this, A), + this.maxGeoLoadTaskCount = 0, + this.geoLoadTaskCount = 0, + this.taskInstancedGeometrieManager = new Ou(this, "geometrie"), + this.descriptor = new tC(A.model) + }; + (iC.prototype = Object.assign(iC.prototype, Xu.prototype))._parseMaterial = function (A, e) { + if (A) { + var t = this.descriptor; + if (t) + for (var i in A) + t.cacheReferencedMeshMaterialData(i, A[i]) + } else + Bh.error("没有数据") + }, + iC.prototype.loadBatchedGeometrie = function (A, e) { + var t = this, + i = this.loader, + o = this.url, + n = this.model; + i.setResponseType("arraybuffer"), + i.setCacheViable(!this.offLine); + var r = i.load(o.mpkUrl(A), (function (i) { + t._parseBatchedGeometrie(i, A), + Bh.debug("geo load from online"), + t._onGeoTaskFinished(), + e() + }), void 0, (function (A) { + n.dispatchEventEx({ + type: Tc.LOAD_GEOMETRY_ERROR, + modelKey: n.modelKey + }), + e(), + t._onGeoTaskFinished() + })); + t.requests.loadGeometrie = r + }, + iC.prototype.loadInstancedGeometrie = function (A, e) { + var t = this, + i = this.loader, + o = this.url, + n = this.model; + i.setResponseType("arraybuffer"), + i.setCacheViable(!this.offLine); + var r = i.load(o.mpkUrl(A), (function (i) { + t._parseInstancedGeometrie(i, A), + Bh.debug("geo load from online"), + t._onGeoTaskFinished(), + e() + }), void 0, (function (A) { + n.dispatchEventEx({ + type: Tc.LOAD_GEOMETRY_ERROR, + modelKey: n.modelKey + }), + e(), + t._onGeoTaskFinished() + })); + t.requests.loadGeometrie = r + }, + iC.prototype._parseGeometrie = function (A, e) { + if (A) { + var t = this.descriptor; + if (t) + for (var i in A) + A.hasOwnProperty(i) && (A[i].position = new Float32Array(A[i].positions), + delete A[i].positions, + A[i].index = new Uint32Array(A[i].indices), + delete A[i].indices, + A[i].normal = new Float32Array(A[i].normals), + A[i].uv = new Float32Array(A[i].uv), + delete A[i].normals, + t.cacheReferencedMeshBufferData(i, A[i])) + } else + Bh.error("没有数据") + }, + iC.prototype._parseBatchedGeometrie = function (A, e) { + var t = new ku.BatchedGeometryReader(A, this.dataVersion), + i = this.descriptor; + if (i) { + var o = t.geoCount; + Bh.time("createBatchedMeshNodes"); + for (var n = 0; o > n; n += 1) { + var r = t.geomMap[n]; + void 0 !== r.position && void 0 !== r.index && void 0 !== r.normal ? (i.cacheReferencedMeshBufferData(r.geoId, r), + this.handler.createBatchedMeshNodes(r)) : Bh.error("Error Geometry!") + } + this.model.manager.viewerImpl.render(), + Bh.timeEnd("createBatchedMeshNodes"), + t = null + } + }, + iC.prototype._parseInstancedGeometrie = function (A, e) { + var t = new ku.InstancedGeometryReader(A, this.dataVersion), + i = this.descriptor; + if (i) { + var o = t.geoCount; + Bh.time("createInstancedMeshNodes"); + for (var n = 0; o > n; n += 1) { + var r = t.geomMap[n]; + void 0 !== r.position && void 0 !== r.index && void 0 !== r.normal ? (i.cacheReferencedMeshBufferData(r.geoId, r), + this.handler.createInstancedMeshNodes(r)) : Bh.error("Error Geometry!") + } + this.model.manager.viewerImpl.render(), + t = null, + Bh.timeEnd("createInstancedMeshNodes") + } + }, + iC.prototype.startLoadSceneAndGeos = function (A) { + Bh.time("几何数据加载时间"); + var e = A.scene, + t = e.instancedGeometries.length || 0, + i = e.batchedGeometries, + o = e.instancedGeometries; + this.maxGeoLoadTaskCount += e.batchedGeometries.length || 0, + this.maxGeoLoadTaskCount += t, + this._loadBatchedGeo(i), + this._loadInstancedGeo(o) + }, + iC.prototype._loadBatchedGeo = function (A) { + var e = this; + if (vc.getDataFromIndexedDB && !this.offLine) { + for (var t = this.url, i = [], o = 0; A.length > o; o += 1) + i.push(t.mpkUrl(A[o])); + var n = this.model.getStorage(); + if (n) + for (var r = function () { + var t = i.splice(0, 30); + n.getBatch(t, (function (A) { + for (var i = function (i) { + if (A[t[i]]) + if (!0 === A[t[i]].split) { + var o = A[t[i]].list, + s = new Uint8Array(A[t[i]].length); + n.getBatch(o, (function (A) { + for (var n = !0, r = 0; o.length > r; r += 1) + A[o[r]] ? s.set(new Uint8Array(A[o[r]]), 4e7 * r) : (n = !1, + Bh.error("获取分割几何失败")); + if (n) { + var a = t[i].indexOf("fileKey="); + e._parseBatchedGeometrie(s.buffer, t[i].slice(a + 8)), + e._onGeoTaskFinished(), + Bh.debug("load geo from local") + } else { + var l = e.taskGeometrieManager, + c = t[i].indexOf("fileKey="); + if (-1 === c) + return void Bh.error("url is not has fileKey"); + l.addTask(t[i].slice(c + 8)), + Bh.debug("load geo from net"), + e.taskGeometrieManager.processTasks(e.loadBatchedGeometrie.bind(e)) + } + }), (function () { + Bh.error("获取分割几何失败") + })) + } else + a = t[i].indexOf("fileKey="), + e._parseBatchedGeometrie(A[t[i]], t[i].slice(a + 8)), + e._onGeoTaskFinished(), + Bh.debug("load geo from local"); + else { + if (r = e.taskGeometrieManager, + -1 === (a = t[i].indexOf("fileKey="))) + return Bh.error("url is not has fileKey"), { + v: void 0 + }; + r.addTask(t[i].slice(a + 8)), + Bh.debug("load geo from net") + } + }, o = 0; t.length > o; o += 1) { + var r, a, s = i(o); + if ("object" === lc(s)) + return s.v + } + e.taskGeometrieManager.processTasks(e.loadBatchedGeometrie.bind(e)) + }), (function () { + for (var t = e.taskGeometrieManager, i = 0; A.length > i; i += 1) + t.addTask(A[i]); + t.processTasks(e.loadBatchedGeometrie.bind(e)) + })) + }; i.length > 0;) + r() + } else { + for (var a = this.taskGeometrieManager, s = 0; A.length > s; s += 1) + a.addTask(A[s]); + a.processTasks(e.loadBatchedGeometrie.bind(e)) + } + }, + iC.prototype._loadInstancedGeo = function (A) { + var e = this; + if (vc.getDataFromIndexedDB && !this.offLine) { + for (var t = this.url, i = [], o = 0; A.length > o; o += 1) + i.push(t.mpkUrl(A[o])); + var n = this.model.getStorage(); + if (n) + for (var r = function () { + var t = i.splice(0, 30); + n.getBatch(t, (function (A) { + for (var i = function (i) { + if (A[t[i]]) + if (!0 === A[t[i]].split) { + var o = A[t[i]].list, + s = new Uint8Array(A[t[i]].length); + n.getBatch(o, (function (A) { + for (var n = 0; o.length > n; n += 1) + A[o[n]] ? s.set(new Uint8Array(A[o[n]]), 4e7 * n) : Bh.error("获取分割几何失败"); + var r = t[i].indexOf("fileKey="); + e._parseInstancedGeometrie(s.buffer, t[i].slice(r + 8)), + e._onGeoTaskFinished(), + Bh.debug("load geo from local") + }), (function () { + Bh.error("获取分割几何失败") + })) + } else + a = t[i].indexOf("fileKey="), + e._parseInstancedGeometrie(A[t[i]], t[i].slice(a + 8)), + e._onGeoTaskFinished(), + Bh.debug("load geo from local"); + else { + if (r = e.taskInstancedGeometrieManager, + -1 === (a = t[i].indexOf("fileKey="))) + return Bh.error("url is not has fileKey"), { + v: void 0 + }; + r.addTask(t[i].slice(a + 8)), + Bh.debug("load geo from net") + } + }, o = 0; t.length > o; o += 1) { + var r, a, s = i(o); + if ("object" === lc(s)) + return s.v + } + e.taskInstancedGeometrieManager.processTasks(e.loadInstancedGeometrie.bind(e)) + }), (function () { + for (var t = e.taskInstancedGeometrieManager, i = 0; A.length > i; i += 1) + t.addTask(A[i]); + t.processTasks(e.loadInstancedGeometrie.bind(e)) + })) + }; i.length > 0;) + r() + } else { + for (var a = this.taskInstancedGeometrieManager, s = 0; A.length > s; s += 1) + a.addTask(A[s]); + a.processTasks(e.loadInstancedGeometrie.bind(e)) + } + }, + iC.prototype._onGeoTaskFinished = function () { + (this.geoLoadTaskCount += 1, + this.notifyProgress) && (this.progressCallback && this.progressCallback({ + total: this.maxLoadTaskCount + this.maxGeoLoadTaskCount, + loaded: .8 * (this.loadTaskCount + this.geoLoadTaskCount), + modelKey: this.model.modelKey + })); + this.maxGeoLoadTaskCount > this.geoLoadTaskCount || (this.dataLoaded = !0, + Bh.timeEnd("几何数据加载时间"), + this.geoFinishCallback && this.geoFinishCallback()) + }, + iC.prototype.getSceneTaskCount = function (A) { + var e = A.scenes; + return e += A.lines, + e += A.mpks, + vc.BorderLineDelayLoaded || (e += this.getAllBorderlineCount()), + e + }; + var oC = function (A, e) { + tf.call(this, A), + this.defaultManager = new Of(e, A), + this.instancedManager = new Hf(A), + this.loader = new iC(this) + }; + (oC.prototype = Object.create(tf.prototype)).prepare = function (A, e) { + if (this.isLoaded() && !this.isHidden()) { + this.prepareWireframe(this.model, e); + this.model.getMaterialManager(); + this.model.getMaterialManager()._updateTextureMapping(), + !this.model.lightmap || this.model.enableLightmap === vc.EnableLightmap && this.model.lightmapIntensity === vc.LightmapIntensity || (this.model.enableLightmap = vc.EnableLightmap, + this.model.lightmapIntensity = vc.LightmapIntensity, + this.rebuildIndicesforLightmap(), + this.updateNodes()) + } + }, + oC.prototype.settleData = function (A) { + var e = this; + this.addNodeInfoToOctantMap(), + e.model.setLoaded(!0); + this.loader.geoFinishCallback = function () { + e.loaded = !0, + e.model.getMaterialManager()._updateTextureMapping(), + e.clearCachedData(e.model), + A && A() + }, + this.loader.startLoadSceneAndGeos(this.model.getConfig()) + }, + oC.prototype.addNodeInfoToOctantMap = function () { + var A = this.model.manager, + e = this.model.getEncodedDatabagId(); + this.loader.getDescriptor().traverseNodeInfosByComponent((function (t, i) { + A.addNodeInfoToOctantMap(e, t, i) + })) + }, + oC.prototype.createMeshNodes = function (A) { + var e = this, + t = this.model; + vc.stepLoad && t.setLoaded(!0); + var i = this.loader.getDescriptor(); + this.instancedManager.createMeshNodes(t, i.getInstancedUserIds()), + this.defaultManager.asyncCreateMeshNodes(t, i.getStandardUserIds(), (function () { + t.getMaterialManager()._updateTextureMapping(), + e.clearCachedData(t), + e.loaded = !0, + A && A() + })) + }, + oC.prototype.clearCachedData = function (A) { + this.loader.getDescriptor().destroyReader(), + this.loader.getDescriptor().clearReferencedMeshCache(), + this.defaultManager.clearCachedData(), + this.instancedManager.clearCachedData() + }, + oC.prototype.createBatchedMeshNodes = function (A) { + this.defaultManager.createBatchedMeshNodes(this.model, A) + }, + oC.prototype.createInstancedMeshNodes = function (A) { + this.instancedManager.createInstancedMeshNodes(this.model, A) + }; + var nC = function (A) { + Xu.call(this, A), + this._loadingOnDemand = !1 + }; + (nC.prototype = Object.assign(nC.prototype, Xu.prototype)).loadGeopkOnDemand = function (A, e, t) { + this.loadTaskCount = 0, + this.maxLoadTaskCount = A.length, + this._loadingOnDemand = !0, + this.finishCallback = t; + var i = this; + if (vc.getDataFromIndexedDB && !this.offLine) { + for (var o = this.url, n = [], r = 0; A.length > r; r += 1) + n.push(o.mpkUrl(A[r])); + var a = this.model.getStorage(); + a && a.getBatch(n, (function (A) { + for (var t = function (e) { + if (A[n[e]]) + if (!0 === A[n[e]].split) { + var t = A[n[e]].list, + o = new Uint8Array(A[n[e]].length); + a.getBatch(t, (function (A) { + for (var r = 0; t.length > r; r += 1) + A[t[r]] ? o.set(new Uint8Array(A[t[r]]), 4e7 * r) : Bh.error("获取分割几何失败"); + var a = n[e].indexOf("fileKey="); + i._parseGeometrie(o.buffer, n[e].slice(a + 8)), + Bh.debug("load geo from local"), + i._onTaskFinished() + }), (function () { + Bh.error("获取分割几何失败") + })) + } else + s = n[e].indexOf("fileKey="), + i._parseGeometrie(A[n[e]], n[e].slice(s + 8)), + Bh.debug("load geo from local"), + i._onTaskFinished(); + else { + if (r = i.taskGeometrieManager, + -1 === (s = n[e].indexOf("fileKey="))) + return Bh.error("url is not has fileKey"), { + v: void 0 + }; + r.addTask(n[e].slice(s + 8)), + Bh.debug("load geo from net") + } + }, o = 0; n.length > o; o += 1) { + var r, s, l = t(o); + if ("object" === lc(l)) + return l.v + } + i.taskGeometrieManager.processTasks(i.loadGeometrie.bind(i), e) + }), (function () { + for (var t = i.taskGeometrieManager, o = 0; A.length > o; o += 1) + t.addTask(A[o]); + t.processTasks(i.loadGeometrie.bind(i), e) + })) + } else { + for (var s = this.taskGeometrieManager, l = 0; A.length > l; l += 1) + s.addTask(A[l]); + s.processTasks(i.loadGeometrie.bind(i), e, t) + } + }, + nC.prototype.resetProcessState = function (A) { + this.loadTaskCount = 0, + this.maxLoadTaskCount = A, + this._loadingOnDemand = !0 + }, + nC.prototype.dealProgressSegment = function (A, e) { + return vc.MergeComponent && this._loadingOnDemand ? e * A.progressPercentage.load : e + }, + nC.prototype._loadLayerKey = function () { + var A = this, + e = this.fileLoader, + t = this.url, + i = this.model, + o = this.handler.getLayerProvider(); + e.setResponseType(""), + e.load(t.layerKeyUrl(), (function (e) { + var t = new LayerKeyReader(e), + i = [], + n = t.getData(); + o.cacheLayerKeys(n); + for (var r = 0, a = t.getCount(); a > r; ++r) { + var s = t.getLayerKey(r), + l = o.formatLayerIds(s); + i.push(l[0]) + } + A._loadLayer(i) + }), void 0, (function (e) { + i.dispatchEvent({ + type: Tc.LOAD_ERROR, + errorType: Tc.LOAD_MPK_ERROR, + event: e + }), + A._onTaskFinished() + })) + }, + nC.prototype._loadLayer = function (A) { + var e = this, + t = this.fileLoader, + i = this.url, + o = this.model, + n = this.handler.getLayerProvider(); + t.setResponseType("arraybuffer"), + t.load(i.layerUrl(), (function (t) { + for (var i = new LayerReader(t), o = 0, r = i.getLayerCount(); r > o; ++o) + if (void 0 !== A[o]) { + for (var a = [], s = i.getLayerData(o), l = i.getGeopkList(o), c = 0, h = l.length; h > c; c += 1) + a.push(l[c]); + n.cacheLayerData(A[o], { + layerId: s.layer_id, + boundingBox: s.boundingBox, + mpkIdxs: a + }) + } + e._onTaskFinished() + }), void 0, (function (A) { + o.dispatchEvent({ + type: Tc.LOAD_ERROR, + errorType: Tc.LOAD_MPK_ERROR, + event: A + }), + e._onTaskFinished() + })) + }, + nC.prototype.delayLoadResources = function (A) { + var e = this.model.getConfig().metadata; + e && 0 !== e.lines ? (this.startCallback = null, + this.progressCallback = null, + this.finishCallback = A, + this.loadTaskCount = 0, + this.maxLoadTaskCount = 0, + this.maxLoadTaskCount += e.lines, + e.lines && this._loadLine()) : A && A() + }; + var rC = function (A) { + Af.call(this, A) + }; + (rC.prototype = Object.assign(rC.prototype, Af.prototype)).parseItemData = function (A, e) { + var t = this.model; + (ap(t.dataVersion, "2.0.0") || void 0 === t.dataVersion) && (Bh.time("升级几何结构"), + this._updateV1ToV2(t), + t.dataVersion = "2.0.0", + Bh.timeEnd("升级几何结构")), + this._readMaterialBuffer(t), + t.hasAnimation && vc.EnableAnimation ? (this._parseClips(), + this._parseBones()) : (this._parseGeo(), + vc.Instance && sp(t.dataVersion, "2.0.0") && this._parseInstanced()); + var i = {}; + if (!i) + return Bh.log("Empty scene"), + !1; + var o = this.referencedMeshCache; + if (Bh.time("_readItemData"), + !o.bufferData || 0 >= Object.keys(o.bufferData).length) + return !0; + if (A) + for (var n = 0, r = A.length; r > n; n += 1) + o.components[A[n]] && this._readItemData(i, A[n], A[n], void 0, 0); + else + for (var a in o.components) + this._readItemData(i, a, a, void 0, 0); + t.hasAnimation && vc.EnableAnimation && this._parseNodes(), + Bh.timeEnd("_readItemData"), + i = null, + e && e() + }; + var aC = function (A) { + nC.call(this, A), + this.descriptor = new rC(A.model) + }; + (aC.prototype = Object.assign(aC.prototype, nC.prototype)).loadSceneAndMpks = function (A) { + this._loadScene(0), + this._loadLayerKey(), + vc.BorderLineDelayLoaded || this._loadAllBorderlines(A) + }, + aC.prototype.getSceneTaskCount = function (A) { + var e = 2; + return vc.BorderLineDelayLoaded || (e += this.getAllBorderlineCount()), + e + }; + var sC = function (A) { + tf.call(this, A), + this.layerDataLoaded = !1, + this.loadedUserIdsObject = null, + this.loadedUserIds = null, + this.layerProvider = null, + this.firstToLoad = !1 + }; + (sC.prototype = Object.assign(sC.prototype, tf.prototype)).destroy = function () { + sC.prototype.destroy.call(this), + this.loadedUserIdsObject = null, + this.loadedUserIds = null, + this.layerProvider.destroy(), + this.layerProvider = null + }, + sC.prototype.getLayerProvider = function () { + return this.layerProvider + }, + sC.prototype.load = function (A) { + var e = this, + t = this.model; + this.loader.setNotifyProgress(A), + this.loader.load((function () { + t.manager.dispatchEvent({ + type: Rc.ON_LOAD_START + }) + }), (function (A) { + t.manager.dispatchEvent({ + type: Rc.ON_LOAD_PROGRESS, + progress: A + }) + }), (function () { + e.processLoadCompleted((function () { + t.manager.dispatchEvent({ + type: Rc.ON_LOAD_COMPLETE, + modelKey: e.model.modelKey + }) + })) + })) + }, + sC.prototype.unload = function (A, e) {}, + sC.prototype.loadGeopkOnDemand = function (A, e, t, i) { + var o = this, + n = this.model, + r = !A, + a = function (A) { + n.manager.dispatchEvent({ + type: Rc.ON_LOAD_PROGRESS, + progress: A + }) + }; + this.firstToLoad ? this.loader.delayLoadResources((function () { + o.firstToLoad = !1, + o.loader.finishCallback = null, + o.prepareData((function () { + o.loader.progressCallback = a, + o.getLayerProvider().setConditionsOnDemandLoad(A), + o._loadGeopkOnDemand(r, e, t, i) + })) + })) : (o.loader.progressCallback = a, + o.getLayerProvider().setConditionsOnDemandLoad(A), + o._loadGeopkOnDemand(r, e, t, i)) + }, + sC.prototype._loadGeopkOnDemand = function (A, e, t, i) { + var o = this, + n = this.model; + this.layerDataLoaded = !1, + e && e(), + n.manager.dispatchEvent({ + type: Rc.ON_LOAD_START + }), + this.getLayerProvider().loadGeopkOnDemand(A, (function (A) { + o.dealData(A) + }), (function (A, e) {}), t, (function () { + o.layerDataLoaded = !0, + n.manager.updateFilterManager(), + Bh.log("load finish"), + n.dispatchEventEx({ + type: Rc.ON_DEMAND_LOAD_COMPLETE, + data: { + boundingBox: n.manager.getLoadOnDemandDirector().getBoundingBoxForUsedComponent() + }, + modelKey: o.model.modelKey + }), + i && i() + })) + }, + sC.prototype.processLoadCompleted = function (A) { + var e = this.model; + e.materialManager._updateTextureMapping(), + e.materialManager._updateIBL(e), + e.loaded = !0, + e.updateOctreeNode(), + requestAnimationFrame((function () { + A && A(), + e.debut(e) + })) + }, + sC.prototype.isAllReady = function () { + return !(!this.isLoaded() || this.isHidden() || !this.isLayerDataLoaded()) + }, + sC.prototype.applyFilter = function () { + console.log('applyFilter :>erqwer> '); + if (this.isLoaded() && this.isLayerDataLoaded()) { + var A = this.model.getModelDescriptor().getStandardUserIdsByCategory(this.loadedUserIds); + if (A.length && this.defaultManager.applyFilter(this.model, A), + vc.Instance) { + var e = this.model.getModelDescriptor().getInstancedUserIdsByCategory(this.loadedUserIds); + e.length && this.instancedManager.applyFilter(this.model, e) + } + } + }, + sC.prototype.needUpdate = function () { + return !!this.isLayerDataLoaded() + }, + sC.prototype.clearData = function () {}, + sC.prototype.initData = function (A) {}, + sC.prototype.dealMeshNodes = function (A) {}, + sC.prototype.dealData = function (A) { + var e = this; + this.initData((function () { + e.model.manager.loadOverrideMaterialsByDemand((function () { + e.dealMeshNodes(A) + }), (function () { + e.dealMeshNodes(A) + })) + })) + }, + sC.prototype.getLoadedUserIdsObject = function () { + return this.loadedUserIdsObject + }, + sC.prototype.isLayerDataLoaded = function () { + return this.layerDataLoaded + }, + sC.prototype.clearLoadedState = function () { + this.layerDataLoaded = !1, + this.loadedUserIdsObject = null, + this.loadedUserIds = null + }; + var lC = function (A) { + this.model = A, + this.conditionsChanged = !0, + this.nodeInfosWithLayerKey = {}, + this.cachedLayerData = {}, + this.cacheAttributes = null, + this.cacheSpecialtysLevels = {}, + this.mapLayerKeys = {}, + this.lastUsedGeopkIdxsObject = null, + this.lastUsedLayerIdsObject = null, + this.lastUsedLayerData = null, + this.mapNeededConditions = null + }; + lC.prototype.destroy = function () { + this.cachedLayerData = null, + this.nodeInfosWithLayerKey = null, + this.cacheAttributes = null, + this.cacheSpecialtysLevels = null, + this.mapLayerKeys = null, + this.lastUsedLayerData = null, + this.lastUsedGeopkIdxsObject = null, + this.lastUsedLayerIdsObject = null, + this.mapNeededConditions = null + }, + lC.prototype.clearData = function () {}, + lC.prototype.loadLayerDataByIdxs = function (A, e, t, i) {}, + lC.prototype.dealLayerDataLoading = function (A, e, t, i, o) {}, + lC.prototype.loadGeopkOnDemand = function (A, e, t, i, o) { + var n = A ? this.getAllLayerIdxData() : this.getUsedLayerIdxData(); + this.dealLayerDataLoading(this.getLayerIdxInfoByLayerData(n), e, t, i, o) + }, + lC.prototype.getUsedIdxsInfoFrom = function (A, e) { + var t = null, + i = {}, + o = {}, + n = {}, + r = {}; + if (A && A.length) + for (var a = 0, s = A.length; s > a; a += 1) + i[t = A[a]] = !0; + if (e) + if (uh.isEmptyObject(i)) + n = e; + else { + for (t in e) + i[t] && (r[t] = !0); + if (uh.isEmptyObject(r)) + o = i, + n = e; + else { + for (t in e) + r[t] || (n[t] = !0); + for (t in i) + r[t] || (o[t] = !0) + } + } + else + uh.isEmptyObject(i) || (o = i); + return { + objCurrUsedIdxs: i, + addIdxs: Object.keys(o), + removeIdxs: Object.keys(n) + } + }, + lC.prototype.getLayerIdxInfoByLayerData = function (A) { + var e = null, + t = null; + A ? (e = A.layerIds, + t = A.mpkIdxs) : (e = null, + t = null); + var i = this.getUsedIdxsInfoFrom(e, this.lastUsedLayerIdsObject); + this.lastUsedLayerIdsObject = i.objCurrUsedIdxs; + var o = this.getUsedIdxsInfoFrom(t, this.lastUsedGeopkIdxsObject); + return this.lastUsedGeopkIdxsObject = o.objCurrUsedIdxs, { + layerScene: i, + mpk: o + } + }, + lC.prototype.getUsedLayerIdxData = function () { + if (!this.isConditionsChanged() && this.lastUsedLayerData) + return this.lastUsedLayerData; + this.setConditionsChanged(!1); + var A = this.getConditionsOnDemand(); + if (!A) + return this.lastUsedLayerData = null, + null; + this.getCachedLayerData(); + for (var e = [], t = A, i = this.model.getModelDescriptor().referencedMeshCache.components, o = this.model.getModelDescriptor(), n = 0, r = t.length; r > n; n += 1) { + var a = t[n], + s = i[a]; + if (s) + if (s.nodes || s.nodeIds) + for (var l = null, c = 0, h = (l = s.nodes ? s.nodes : s.nodeIds).length; h > c; c += 1) { + var d = l[c]; + if ("object" !== lc(d) && (d = o.getReferencedMeshComponentNodeById(d)), + d) { + var p = this.getFileKeyByGeoId(d.geoId); + p && e.push(p) + } + } + else { + var g = this.getFileKeyByGeoId(i[a].geoId); + g && e.push(g) + } + } + return this.lastUsedLayerData = { + layerIds: [], + layerKeys: [], + boundingBoxes: [], + mpkIdxs: e + }, + this.lastUsedLayerData + }, + lC.prototype.getFileKeyByGeoId = function (A) { + for (var e in this.cachedLayerData) + if (this.cachedLayerData.hasOwnProperty(e)) { + var t = this.cachedLayerData[e]; + if (A >= t[0] && t[1] >= A) + return e + } + return window.geoidToFileKeyMap ? window.geoidToFileKeyMap[A] : null + }, + lC.prototype.getAllLayerIdxData = function () { + this.setConditionsChanged(!1); + var A = this.getCachedLayerData(); + if (!A) + return null; + var e = [], + t = [], + i = [], + o = []; + for (var n in A) { + for (var r = A[n].mpkIdxs, a = 0, s = r.length; s > a; a += 1) + i.push(r[a]); + e.push(n), + t.push(A[n].layerId), + o.push(A[n].boundingBox) + } + return { + layerIds: t, + layerKeys: e, + boundingBoxes: o, + mpkIdxs: i + } + }, + lC.prototype.getUserIdsOnDemand = function () { + var A = {}, + e = this.getConditionsOnDemand(); + if (e) + for (var t in e) + A[e[t]] = !0; + return A + }, + lC.prototype.cacheLayerData = function (A, e) { + this.cachedLayerData[A] = e + }, + lC.prototype.getCachedLayerData = function () { + return this.cachedLayerData + }, + lC.prototype.clearNodeInfoCacheWithLayerKey = function () { + this.nodeInfosWithLayerKey = {} + }, + lC.prototype.cacheNodeInfoByLayerKey = function (A, e) { + this.nodeInfosWithLayerKey[A] || (this.nodeInfosWithLayerKey[A] = []), + this.nodeInfosWithLayerKey[A].push(e) + }, + lC.prototype.cacheNodeInfosWithLayerKey = function () { + var A = this.model.getModelDescriptor().getAllNodeInfos(); + for (var e in A) + for (var t = A[e], i = 0, o = t.length; o > i; i += 1) { + var n = t[i], + r = this.formatLayerIds(n.userData); + this.cacheNodeInfoByLayerKey(r[0], n) + } + }, + lC.prototype.cacheLayerKeys = function (A) { + this.mapLayerKeys = A; + var e = {}, + t = this.getLayerKeyAttributes(); + for (var i in A) { + var o = A[i], + n = o[t[0]], + r = o[t[1]]; + e.hasOwnProperty(n) || (e[n] = []), + e.hasOwnProperty(r) || (e[r] = []), + e[n].push(r), + e[r].push(n) + } + this.cacheSpecialtysLevels = e + }, + lC.prototype.getLayerKeyAttributes = function () { + if (this.cacheAttributes) + return this.cacheAttributes; + var A = [], + e = Object.keys(this.mapLayerKeys), + t = this.mapLayerKeys[e[0]]; + for (var i in t) + t.hasOwnProperty(i) && A.push(i); + return this.cacheAttributes = A, + this.cacheAttributes + }, + lC.prototype.formatLayerIds = function (A) { + var e = []; + if (!A) + return e.push("unknown"), + e; + var t = this.getFileKeyByGeoId(A.originalGeometryId); + return e.push(t || "unknown"), + e + }, + lC.prototype.getLevelsOrSpecialtys = function (A) { + return this.cacheSpecialtysLevels.hasOwnProperty(A) ? this.cacheSpecialtysLevels[A] : (Bh.warn("Attribute " + A + "has no according levels or specialtys."), + []) + }, + lC.prototype.getUnionBoundingBoxOnDemand = function () { + var A = this.getBoundingBoxesOnDemand(); + if (A && A.length > 0) { + for (var e = new aA, t = 0, i = A.length; i > t; t += 1) + e.union(A[t]); + return e + } + return null + }, + lC.prototype.getBoundingBoxesOnDemand = function () { + var A = this.getUsedLayerIdxData(); + return A ? A.boundingBoxes : null + }, + lC.prototype.setConditionsOnDemandLoad = function (A) { + this.mapNeededConditions = A, + this.setConditionsChanged(!0) + }, + lC.prototype.setConditionsChanged = function (A) { + this.conditionsChanged = A + }, + lC.prototype.getConditionsOnDemand = function () { + return this.mapNeededConditions + }, + lC.prototype.isConditionsChanged = function () { + return this.conditionsChanged + }; + var cC = function (A) { + lC.call(this, A) + }; + (cC.prototype = Object.assign(cC.prototype, lC.prototype)).loadLayerDataByIdxs = function (A, e, t, i) { + this.model.getLoader().resetProcessState(e.length), + this.model.getLoader().loadGeopkOnDemand(e, (function (A, e) { + t && t(e - A, e) + }), i) + }, + cC.prototype.dealLayerDataLoading = function (A, e, t, i, o) { + var n = A.mpk; + if (0 !== n.addIdxs.length || 0 !== n.removeIdxs.length) { + var r = !1; + n.removeIdxs.length > 0 && (r = !0, + t && t(null, n.removeIdxs)), + n.addIdxs.length > 0 ? this.loadLayerDataByIdxs(null, n.addIdxs, i, (function () { + e && e(o) + })) : r ? e && e(o) : o && o() + } else + e && e(o) + }; + var hC = function (A) { + return sC.call(this, A), + this.layerProvider = new cC(A), + this + }; + (hC.prototype = Object.assign(hC.prototype, sC.prototype)).settleData = function (A) { + this.addNodeInfoToOctantMap(), + this.getLayerProvider().cacheNodeInfosWithLayerKey(), + this.loaded = !0, + A && A() + }, + hC.prototype.clearData = function () { + this.model.clearNodeGroup(), + this.model.clearMeshFromOctantMap(), + this.getLayerProvider().clearData(), + this.model.clearWireframeElementCount(), + this.defaultManager.clearData(), + this.instancedManager.clearData(), + this.clearLoadedState() + }, + hC.prototype.addNodeInfoToOctantMap = function () { + var A = this.model.manager, + e = this.model.getEncodedDatabagId(); + this.model.getModelDescriptor().traverseNodeInfosByComponent((function (t, i) { + A.addNodeInfoToOctantMap(e, t, i) + })) + }, + hC.prototype.initData = function (A) { + var e = this; + e.model.getModelDescriptor().parseItemData(e.layerProvider.getConditionsOnDemand(), (function () { + e.settleData(), + e.loadedUserIdsObject = e.getLayerProvider().getUserIdsOnDemand(), + e.loadedUserIds = Object.keys(e.loadedUserIdsObject), + A && A() + })) + }, + hC.prototype.unload = function (A, e) { + var t = this; + this.model.getModelDescriptor().clearReferencedMeshCacheByGeopkIdxs(e, (function (A) { + t.defaultManager.disposeGeometry(A) + })) + }; + var dC = function (A, e) { + return hC.call(this, A, e), + this.tag = "layer", + this.defaultManager = new Of(e, A), + this.instancedManager = new Hf(A), + this.loader = new aC(this), + this + }; + (dC.prototype = Object.assign(dC.prototype, hC.prototype)).prepare = function (A, e) { + this.isAllReady() && (this.prepareWireframe(this.model, e), + this.model.getMaterialManager()._updateTextureMapping(this.model)) + }, + dC.prototype.dealMeshNodes = function (A) { + delete this.model.manager.octantToObjectMap[this.model.modelKey], + this.addNodeInfoToOctantMap(); + var e = this.model.getModelDescriptor().getInstancedUserIdsByCategory(this.loadedUserIds); + this.model._removeNodeGroup(gp.INSTANCEGEOMETRY), + this.model._removeNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY), + this.instancedManager.meshManager.dispose(), + this.instancedManager.meshManager.disposeInstanceGeometries(), + e.length && this.instancedManager.createMeshNodes(this.model, e); + var t = this.model.getModelDescriptor().getStandardUserIdsByCategory(this.loadedUserIds); + this.model._removeNodeGroup(gp.GEOMETRY), + this.model._removeNodeGroup(gp.WIREFRAME), + this.defaultManager.meshManager.dispose(), + this.defaultManager.meshManager.clearData(), + t.length ? this.defaultManager.asyncCreateMeshNodes(this.model, t, A) : A && A() + }, + dC.prototype.unloadComponents = function (A, e) { + for (var t = this.model.modelKey, i = 0, o = A.length; o > i; i += 1) + this.model.manager.removeBatchedMeshFromOctantMap(t, A[i]); + this.model.getModelDescriptor().clearNodeInfoCacheByComponentsKey(A), + this.dealMeshNodes(e) + }; + var pC = function (A) { + $u.call(this, A) + }; + (pC.prototype = Object.assign(pC.prototype, $u.prototype)).parseItemData = function (A, e) { + var t = this.model; + (ap(t.dataVersion, "2.0.0") || void 0 === t.dataVersion) && (Bh.time("升级几何结构"), + this._updateV1ToV2(t), + t.dataVersion = "2.0.0", + Bh.timeEnd("升级几何结构")), + this._readMaterialBuffer(t), + t.hasAnimation && vc.EnableAnimation ? (this._parseClips(), + this._parseBones()) : this._parseGeo(); + var i = {}; + if (!i) + return Bh.log("Empty scene"), + !1; + var o = this.referencedMeshCache; + if (Bh.time("_readItemData"), + !o.bufferData || 0 >= Object.keys(o.bufferData).length) + return !0; + if (A) + for (var n = 0, r = A.length; r > n; n += 1) + o.components[A[n]] && this._readItemData(i, A[n], A[n], void 0, 0); + else + for (var a in o.components) + this._readItemData(i, a, a, void 0, 0); + t.hasAnimation && vc.EnableAnimation && this._parseNodes(), + Bh.timeEnd("_readItemData"), + i = null, + e && e() + }; + var gC = function (A) { + nC.call(this, A), + this.descriptor = new pC(A.model) + }; + (gC.prototype = Object.assign(gC.prototype, nC.prototype)).loadSceneAndMpks = function (A) { + this._loadScene(0), + this._loadLayerKey(), + vc.BorderLineDelayLoaded || this._loadAllBorderlines(A) + }, + gC.prototype.getSceneTaskCount = function (A) { + var e = 2; + return vc.BorderLineDelayLoaded || (e += this.getAllBorderlineCount()), + e + }; + var uC = function (A) { + of .call(this, A), + this.nodeGroupName = "PickingMeshGroup" + }; + Object.assign(uC.prototype, of .prototype), + eu(uC, [{ + key: "disposePickingNodeById", + value: function (A) { + for (var e = Object.keys(this.pickingNodeMap[A]), t = 0, i = e.length; i > t; t += 1) + for (var o = this.pickingNodeMap[A][e[t]], n = 0, r = o.length; r > n; n += 1) + o[n].material = null, + o[n].geometry.dispose(), + o[n] = null + } + }, { + key: "removeFormPickingNodeGroup", + value: function (A) { + if (this.pickingNodeGroup) + for (var e = Object.keys(this.pickingNodeMap[A]), t = 0, i = e.length; i > t; t += 1) + for (var o = this.pickingNodeMap[A][e[t]], n = 0, r = o.length; r > n; n += 1) + this.pickingNodeGroup.remove(o[n]) + } + }, { + key: "addToPickingNodeMap", + value: function (A, e, t) { + this.pickingNodeMap || (this.pickingNodeMap = {}), + this.pickingNodeMap[A] || (this.pickingNodeMap[A] = {}), + this.pickingNodeMap[A][e] = t, + this.addToPickingNodeGroup(t) + } + }, { + key: "generatePickingMeshes", + value: function (A) { + var e = this; + this.manager.traverseActiveMeshMap(A, (function (A, t, i) { + if (!e._isExistNode(A, t)) { + for (var o = [], n = 0, r = i.length; r > n; n += 1) { + var a = i[n], + s = new he; + s.setAttribute("position", a.geometry.getAttribute("position")), + s.setIndex(a.geometry.getIndex()), + s._withDrawRange && s.setDrawRange(a.geometry.drawRange.start, a.geometry.drawRange.count); + var l = new(a.isLineSegments ? jo : Ue)(s, Kd.DefaultMaterial); + Tu.copyMeshProperties(l, a), + l.renderOrder = 1, + o.push(l) + } + e.addToPickingNodeMap(A, t, o) + } + })) + } + }, { + key: "_isExistNode", + value: function (A, e) { + return !!(this.pickingNodeMap && this.pickingNodeMap[A] && this.pickingNodeMap[A][e]) + } + }, { + key: "updatePickingMeshesState", + value: function (A, e, t) { + if (this.pickingNodeMap) + for (var i = this.pickingNodeMap, o = this.manager, n = 0, r = e.length; r > n; n += 1) { + var a = e[n]; + if (i[a] && o.isPickableNode(a)) { + var s = o.getActiveMeshMapById(a); + if (s) + for (var l = Object.keys(i[a]), c = 0, h = l.length; h > c; c += 1) { + var d = l[c]; + if (s[d]) { + var p = i[a][d]; + if (p) + for (var g = 0, u = p.length; u > g; g += 1) + p[g].material = A, + p[g].visible = !0 + } + } + } + } + } + }, { + key: "resetPickingMeshesState", + value: function () { + if (this.pickingNodeMap) + for (var A = this.pickingNodeMap, e = Object.keys(A), t = 0, i = e.length; i > t; t += 1) + for (var o = e[t], n = Object.keys(A[o]), r = 0, a = n.length; a > r; r += 1) + for (var s = A[o][n[r]], l = 0, c = s.length; c > l; l += 1) + s[l].visible = !1 + } + }, { + key: "updatePickingMeshes", + value: function (A, e, t) { + return this.generatePickingMeshes(e), + this.resetPickingMeshesState(), + this.updatePickingMeshesState(A, e, t), + this.getPickingNodeGroup() + } + }]); + var fC = function (A, e) { + So.call(this), + this.type = "SkinnedMeshEx", + this.matrixAutoUpdate = !0, + this.active = !1, + this.guid = "", + this.key = "", + this.typeEx = "", + this.geometry = A || Tu.EmptyGeometry, + this.material = e || Kd.DefaultMaterial, + this.visible = !1, + this.castShadow = vc.EnableShadow, + this.receiveShadow = vc.EnableShadow + }; + (fC.prototype = Object.create(So.prototype)).constructor = fC, + fC.prototype.init = function (A) { + A && A.parent && A.parent.add(this) + }, + fC.prototype.destroy = function () { + this.parent && this.parent.remove(this), + this.userData && (this.userData = null), + this.geometry = null, + this.material = null + }, + fC.prototype.isVisible = function () { + return this.visible && this.active + }, + fC.prototype.spawn = function (A) { + void 0 !== A.guid && (this.guid = A.guid), + void 0 !== A.key && (this.key = A.key), + void 0 !== A.name && (this.name = A.name), + void 0 !== A.typeEx && (this.typeEx = A.typeEx), + A.geometry && (this.geometry = A.geometry), + A.material && (this.material = A.material), + A.matrix ? (this.matrix.copy(A.matrix), + this.updateMatrixWorld(!0)) : (this.matrix.identity(), + this.updateMatrixWorld(!0)), + this.modelKey = A.modelKey ? A.modelKey : "", + A.userData ? this.userData = A.userData : this.userData && (this.userData = null), + void 0 !== A.visible && (this.visible = A.visible), + this.renderOrder = A.renderOrder || 0, + this.active = !0, + this.visible = !0, + this.frustumCulled = !1, + this.matChange = !1 + }, + fC.prototype.clear = function () { + this.geometry = Tu.EmptyGeometry, + this.material = Kd.DefaultMaterial, + this.active = !1, + this.visible = !0, + this.guid = "", + this.key = "", + this.typeEx = "", + this.frustumCulled = !0, + this.material.visible = !1 + }, + fC.prototype.intersectBoxWithDistance = function () { + var A = new aA; + return function (e, t) { + var i = this.geometry, + o = this.material, + n = this.matrixWorld; + return t && (n = new M).multiplyMatrices(this.matrixWorld, t), + void 0 === o ? -1 : (i.boundingBox || i.computeBoundingBox(), + A.copy(i.boundingBox), + A.applyMatrix4(n), + e.ray.intersectBoxWithDistance(A)) + } + }(), + fC.prototype.intersectBoxWithDistanceByIndices = function (A, e) { + var t = this.matrixWorld, + i = this.computeBoundingBox(e); + return i.applyMatrix4(t), + A.ray.intersectBoxWithDistance(i) + }, + fC.prototype.intersectBoxWithClipPlane = function (A, e) { + var t = this.matrixWorld, + i = this.computeBoundingBox(e); + return i.applyMatrix4(t), + i.intersectsPlane(A) + }, + fC.prototype.raycastByIndices = function () { + var A = new M, + e = new CA, + t = new cA, + i = new y, + o = new y, + n = new y, + r = new s, + a = new s, + l = new s, + c = new y, + h = new y, + d = new y, + p = new M; + + function g(A, e, t, s, g, u, f, m) { + i.fromBufferAttribute(s, u), + o.fromBufferAttribute(s, f), + n.fromBufferAttribute(s, m); + var C = function (A, e, t, i, o, n, r) { + var a = A.material; + if (null === (Array.isArray(a) ? t.intersectTriangle(i, o, n, !1, r) : 1 === a.side ? t.intersectTriangle(n, o, i, !0, r) : t.intersectTriangle(i, o, n, 2 !== a.side, r))) + return null; + d.copy(r), + d.applyMatrix4(p); + var s = e.ray.origin.distanceTo(d); + return e.near > s || s > e.far ? null : { + distance: s, + point: d.clone(), + object: A + } + }(A, e, t, i, o, n, h); + if (C) { + if (g && g.array && g.array.length && (r.fromBufferAttribute(g, u), + a.fromBufferAttribute(g, f), + l.fromBufferAttribute(g, m), + C.uv = function (A, e, t, i, o, n, r) { + return RA.getBarycoord(A, e, t, i, c), + o.multiplyScalar(c.x), + n.multiplyScalar(c.y), + r.multiplyScalar(c.z), + o.add(n).add(r), + o.clone() + }(h, i, o, n, r, a, l)), + s.instanceMatrix) { + var v = i.clone().applyMatrix4(s.instanceMatrix), + I = o.clone().applyMatrix4(s.instanceMatrix), + E = n.clone().applyMatrix4(s.instanceMatrix); + C.face = new GA(u, f, m, RA.getNormal(v, I, E, new y)) + } else + C.face = new GA(u, f, m, RA.getNormal(i, o, n, new y)); + C.faceIndex = u + } + return C + } + return function (i, o, n, r) { + var a = this.geometry, + s = this.material; + if (r) { + a = this.geometry, + s = this.material; + if ((p = new M).multiplyMatrices(this.matrixWorld, r), + void 0 === s) + return; + if (null === a.boundingSphere && a.computeBoundingSphere(), + t.copy(a.boundingSphere), + t.applyMatrix4(p), + !1 === i.ray.intersectsSphere(t)) + return; + if (A.getInverse(p), + e.copy(i.ray).applyMatrix4(A), + null !== a.boundingBox && !1 === e.intersectsBox(a.boundingBox)) + return; + var l = null, + c = null, + h = null, + d = null, + u = a.index; + (I = a.attributes.position).instanceMatrix = r; + var f = a.attributes.uv, + m = null, + C = null; + if (null !== u) + for (m = 0, + C = u.count; C > m; m += 3) + c = u.getX(m), + h = u.getX(m + 1), + d = u.getX(m + 2), + (l = g(this, i, e, I, f, c, h, d)) && (l.faceIndex = Math.floor(m / 3), + o.push(l)); + else + for (m = 0, + C = I.count; C > m; m += 3) + (l = g(this, i, e, I, f, c = m, h = m + 1, d = m + 2)) && (l.index = c, + o.push(l)) + } else { + if (p = this.matrixWorld, + void 0 === s) + return; + if (t.copy(this.computeBoundingSphere(n)), + t.applyMatrix4(p), + !1 === i.ray.intersectsSphere(t)) + return; + A.getInverse(p), + e.copy(i.ray).applyMatrix4(A); + var y = this.computeBoundingBox(n); + if (!1 === e.intersectsBox(y)) + return; + l = null, + c = null, + h = null, + d = null; + var v, I = a.attributes.position, + E = (f = a.attributes.uv, + m = null, + n.indexStart), + B = n.indexStart + n.indexCount, + x = a.getIndex().array; + for (m = E, + v = B; v > m; m += 3) + (l = g(this, i, e, I, f, c = x[m], h = x[m + 1], d = x[m + 2])) && (l.faceIndex = Math.floor(m / 3), + o.push(l)) + } + } + }(), + fC.prototype.minDistanceToTri = function (A, e, t) { + function i(A, e) { + return new y(A.x - e.x, A.y - e.y, A.z - e.z) + } + + function o(A, e) { + return new y(A.x + e.x, A.y + e.y, A.z + e.z) + } + + function n(A, e, t) { + return new y(A.x + e.x * t, A.y + e.y * t, A.z + e.z * t) + } + + function r(A, e) { + return A.x * e.x + A.y * e.y + A.z * e.z + } + + function a(A, e) { + return new y(A.y * e.z - A.z * e.y, A.z * e.x - A.x * e.z, A.x * e.y - A.y * e.x) + } + + function s(A, e, t, s) { + var l, c = r(e, s), + h = r(e, e), + d = r(s, s), + p = i(t, A), + g = r(e, p), + u = r(s, p), + f = null; + 0 > (f = (g * d - u * c) / (h * d - c * c)) || isNaN(f) ? f = 0 : f > 1 && (f = 1); + var m = null, + C = null, + y = null, + v = null; + return 0 >= (l = (f * c - u) / d) || isNaN(l) ? (C = t, + 0 >= (f = g / h) || isNaN(f) ? (m = A, + y = i(t, A)) : 1 > f ? (m = n(A, e, f), + v = a(p, e), + y = a(e, v)) : y = i(t, m = o(A, e))) : 1 > l ? (C = n(t, s, l), + 0 >= f || isNaN(f) ? (m = A, + v = a(p, s), + y = a(s, v)) : 1 > f ? (m = n(A, e, f), + 0 > r(y = a(e, s), p) && y.multiplyScalar(-1)) : (v = a(p = i(t, m = o(A, e)), s), + y = a(s, v))) : (C = o(t, s), + 0 >= (f = (c + g) / h) || isNaN(f) ? (m = A, + y = i(C, A)) : 1 > f ? (m = n(A, e, f), + v = a(p = i(C, A), e), + y = a(e, v)) : y = i(C, m = o(A, e))), { + vec: y, + closestP: m, + closestQ: C + } + } + + function l(A, e) { + var t = null, + o = null, + l = [], + c = [], + h = null; + l[0] = i(A[1], A[0]), + l[1] = i(A[2], A[1]), + l[2] = i(A[0], A[2]), + c[0] = i(e[1], e[0]), + c[1] = i(e[2], e[1]), + c[2] = i(e[0], e[2]); + for (var d = null, p = null, g = null, u = 0, f = A[0].distanceToSquared(e[0]) + 1, m = 0; 3 > m; m += 1) + for (var C = 0; 3 > C; C += 1) { + var y = s(A[m], l[m], e[C], c[C]); + h = y.vec; + var v = r(d = i(o = y.closestQ, t = y.closestP), d); + if (f >= v) { + p = t.clone(), + g = o.clone(), + f = v; + var I = r(i(A[(m + 2) % 3], t), h), + E = r(i(e[(C + 2) % 3], o), h); + if (0 >= I && E >= 0) + return { + start: t.clone(), + end: o.clone(), + minDistance: Math.sqrt(v) + }; + 0 > I && (I = 0), + E > 0 && (E = 0), + r(d, h) - I + E > 0 && (u = 1) + } + } + var B = a(l[0], l[1]), + x = r(B, B); + if (x > 1e-15) { + var S = []; + d = i(A[0], e[0]), + S[0] = r(d, B), + d = i(A[0], e[1]), + S[1] = r(d, B), + d = i(A[0], e[2]), + S[2] = r(d, B); + var w = -1; + if (S[0] > 0 && S[1] > 0 && S[2] > 0 ? S[w = S[1] > S[0] ? 0 : 1] > S[2] && (w = 2) : 0 > S[0] && 0 > S[1] && 0 > S[2] && S[2] > S[w = S[0] > S[1] ? 0 : 1] && (w = 2), + w >= 0 && (u = 1, + r(d = i(e[w], A[0]), a(B, l[0])) > 0 && r(d = i(e[w], A[1]), a(B, l[1])) > 0 && r(d = i(e[w], A[2]), a(B, l[2])) > 0)) + return t = n(e[w], B, S[w] / x), + o = e[w].clone(), + t.distanceTo(o) + } + var M = a(c[0], c[1]), + b = r(M, M); + if (b > 1e-15) { + var U = []; + d = i(e[0], A[0]), + U[0] = r(d, M), + d = i(e[0], A[1]), + U[1] = r(d, M), + d = i(e[0], A[2]), + U[2] = r(d, M); + w = -1; + if (U[0] > 0 && U[1] > 0 && U[2] > 0 ? U[w = U[1] > U[0] ? 0 : 1] > U[2] && (w = 2) : 0 > U[0] && 0 > U[1] && 0 > U[2] && U[2] > U[w = U[0] > U[1] ? 0 : 1] && (w = 2), + w >= 0 && (u = 1, + r(d = i(A[w], e[0]), a(M, c[0])) > 0 && r(d = i(A[w], e[1]), a(M, c[1])) > 0 && r(d = i(A[w], e[2]), a(M, c[2])) > 0)) + return { + start: t = A[w].clone(), + end: (o = n(A[w], M, U[w] / b)).clone(), + minDistance: t.distanceTo(o) + } + } + return u ? (t = p, + o = g, { + start: p.clone(), + end: g.clone(), + minDistance: Math.sqrt(f) + }) : { + start: p.clone(), + end: g.clone(), + minDistance: 0 + } + } + var c = new y, + h = new y, + d = new y; + + function p(A, e, t, i, o, n) { + c.fromBufferAttribute(e, t), + h.fromBufferAttribute(e, i), + d.fromBufferAttribute(e, o), + n && (c.applyMatrix4(n), + h.applyMatrix4(n), + d.applyMatrix4(n)), + A.push(c), + A.push(h), + A.push(d) + } + for (var g = { + start: null, + end: null, + minDistance: Number.POSITIVE_INFINITY + }, u = this.geometry, f = u.attributes.position, m = e ? e.indexStart : 0, C = u.getIndex().array, v = m, I = e ? e.indexStart + e.indexCount : C.length; I > v; v += 3) { + var E = []; + p(E, f, C[v], C[v + 1], C[v + 2], t); + var B = l(A, E); + if (0 >= B.minDistance) + return g.minDistance = 0, + g; + g.minDistance > B.minDistance && (g.minDistance = B.minDistance, + g.start = B.start.clone(), + g.end = B.end.clone()) + } + return g + }, + fC.prototype.computeBoundingBox = function (A) { + var e = new aA, + t = this.geometry.attributes.position.array, + i = null, + o = null; + return A ? (i = A.positionStart, + o = A.positionStart + A.positionCount) : (i = 0, + o = t.length), + this.setBoundingBoxFromArray(e, t, i, o), + e + }, + fC.prototype.computeBoundingSphere = function (A) { + var e = new aA, + t = new y, + i = this.geometry.attributes.position.array, + o = null, + n = null; + A ? (o = A.positionStart, + n = A.positionStart + A.positionCount) : (o = 0, + n = i.length); + var r = new cA, + a = r.center; + this.setBoundingBoxFromArray(e, i, o, n), + e.getCenter(a); + for (var s = 0, l = o, c = n; c > l; l += 3) + t.x = i[l], + t.y = i[l + 1], + t.z = i[l + 2], + s = Math.max(s, a.distanceToSquared(t)); + return r.radius = Math.sqrt(s), + r + }, + fC.prototype.setBoundingBoxFromArray = function (A, e, t, i) { + for (var o = Number(1 / 0), n = Number(1 / 0), r = Number(1 / 0), a = -1 / 0, s = -1 / 0, l = -1 / 0, c = t, h = i; h > c; c += 3) { + var d = e[c], + p = e[c + 1], + g = e[c + 2]; + o > d && (o = d), + n > p && (n = p), + r > g && (r = g), + d > a && (a = d), + p > s && (s = p), + g > l && (l = g) + } + A.min.set(o, n, r), + A.max.set(a, s, l) + }; + var mC = function (A) { + return Rf.call(this), + this.manager = A, + this.nodePriority = { + high: [], + medium: [], + low: [] + }, + this.visibleOctant = [], + this.occlusionVisibleOctant = [], + this.usedNodeInfosObject = {}, + this.lineNodes = {}, + this.blinkMaterials = [], + this.selectedMeshes = [], + this.nonSelectedMeshes = [], + this.selectedObjectIds = [], + this.activeMeshMap = {}, + this + }; + (mC.prototype = Object.create(Rf.prototype)).destroy = function () { + this.dispose(), + this.clearData(), + this.pickingNodeGenerator && (this.pickingNodeGenerator.destroy(), + this.pickingNodeGenerator = null), + this.activeMeshMap = null, + this.manager = null, + this.nodePriority = null, + this.visibleOctant = null, + this.occlusionVisibleOctant = null, + this.nodePriority = null, + this.lineNodes = null, + this.blinkMaterials = null + }, + mC.prototype.disposeLineNodes = function () { + for (var A in this.lineNodes) { + var e = this.lineNodes[A]; + e.geometry.dispose(), + e = null, + delete this.lineNodes[A] + } + }, + mC.prototype.clearData = function () { + this.pickingNodeGenerator && this.pickingNodeGenerator.clearData(), + this._clearActiveMeshMap(), + this.disposeGeometries(), + this.disposeLineNodes(), + this._clearNodePriorityData(!0), + this._clearUsedNodeInfosObject(), + this.visibleOctant.length = 0, + this.occlusionVisibleOctant.length = 0 + }, + mC.prototype.update = function (A, e, t) { + this._updateMeshNodes(A, e, t) + }, + mC.prototype.cullNodes = function (A, e) { + this._clearNodePriorityData(!1), + this._adjustLowNodePriorityLength(A); + var t = 0; + return t = vc.EnableOctant ? this._cullNodesWithOctant(A, e) : this._cullNodesWithFull(A), + this._calcPrioritizedNodeCount(A, t) + }, + mC.prototype.getPriorityNodes = function () { + return [this.nodePriority.high, this.nodePriority.medium, this.nodePriority.low] + }, + mC.prototype._cullNodesWithOctant = function (A, e) { + var t = 0, + i = 0, + o = this.manager.getLoader(A).getOctreeRootNodeInner(), + n = this.manager.getLoader(A).getOctreeRootNodeOuter(); + if (this.manager.getContainsCamera(A) || !n) + return this.visibleOctant.length = 0, + o && this._frustumCull(A, e, o), + n && this._frustumCull(A, e, n), + (i = this.visibleOctant.length) > 0 && (this._sortVisibleOctant(e), + t = this._logicCull(A, !0, !0, t, i)), + t; + n && (this.visibleOctant.length = 0, + this._frustumCull(A, e, n), + (i = this.visibleOctant.length) > 0 && (this._sortVisibleOctant(e), + t = this._logicCull(A, !0, !1, t, i))); + var r = this.manager.getFilter(A); + (Object.keys(this.nodePriority.low).length + this.nodePriority.high.length + this.nodePriority.medium.length < this.manager.getRenderableCount(A) || r._hasRenderPromotionFilter()) && ((o = this.manager.getLoader(A).getOctreeRootNodeInner()) && (this.visibleOctant.length = 0, + this._frustumCull(A, e, o), + (i = this.visibleOctant.length) > 0 && (this._sortVisibleOctant(A, e), + t = this._logicCull(A, !0, !1, t, i)))); + return t + }, + mC.prototype._cullNodesWithFull = function (A) { + var e = A.getModelDescriptor().getComponentCount(); + return 0 === e ? 0 : this._logicCullWithFull(A, e) + }, + mC.prototype._calcPrioritizedNodeCount = function (A, e) { + var t = e + this.nodePriority.high.length + this.nodePriority.medium.length; + return t > this.manager.getRenderableCount(A) && (t = this.manager.getRenderableCount(A)), + t + }, + mC.prototype._updateMeshNodes = function (A, e, t) { + if (this.filter = A.getFilter(), + A.isOnlyWireframe()) { + A._getNodeGroup(gp.GEOMETRY).visible = !1 + } else { + var i = A.getModelDescriptor().getStandardNodeInfos(); + if (i) { + this.clearSelectedObjectIds(), + A._getNodeGroup(gp.GEOMETRY).visible = !0; + var o = A.manager.filter, + n = A.selectedMaterial, + r = A.manager.sceneState, + a = A.manager; + if (a.octantToObjectMap && a.octantToObjectMap[A.modelKey]) { + var s = a.octantToObjectMap[A.modelKey].mesh, + l = A.materialManager.materials, + c = this.manager.hiddenUserIdSetObject, + h = this.manager.overrideUserIdSetObject, + d = this.manager.transparentUserIdSetObject, + p = this.manager.selectedUserIdSetObject, + g = this.manager.hoveredUserIdSetObject; + this.blinkMaterials.length = 0, + e || (e = A.getModelDescriptor().getStandardUserIds()), + vc.TranslucentDepthDisabled && (n.depthWrite = !n.transparent); + var u = o._getMaterialByName("scene"); + vc.TranslucentDepthDisabled && (u.depthWrite = !1); + for (var f = 0; e.length > f; f += 1) { + var m = e[f]; + if (i[m]) { + var C = i[m][0]; + if (C) + if (s[m]) { + var y = s[m][0]; + if (y instanceof vu && (y = y.object), + y) + if (c && c[m]) + y.visible = !1; + else { + y.visible = !0; + var v = []; + if (d && d[m] && !vc.EnableSelectionByTranslucent) { + for (var I = 0; C.materialId.length > I; I += 1) + v.push(t || u); + y.material = v + } else if (p && p[m]) + if (this.cacheSelectedObjectIds(m), + vc.PickingEffect) + for (var E = o._getOverrideMaterial(C), B = 0; C.materialId.length > B; B += 1) + v.push(t || E); + else { + for (var x = 0; C.materialId.length > x; x += 1) + v.push(t || n); + y.material = v + } + else if (g && g[m]) { + for (var S = 0; C.materialId.length > S; S += 1) + if (h[m]) { + var w = o._getMaterialByName(h[m]), + M = r.getHoverMaterial(t || w); + v.push(M) + } else { + var b = r.getHoverMaterial(t || l[C.materialId[S]]); + v.push(b) + } + y.material = v + } else if (d && d[m]) { + for (var U = 0; C.materialId.length > U; U += 1) + v.push(t || u); + y.material = v + } else if (h && h[m]) { + for (var F = 0; C.materialId.length > F; F += 1) + if (Array.isArray(h[m])) { + (K = l[C.materialId[F]]) || (K = o._getMaterialByName(h[m][F])), + v.push(t || K) + } else { + var K = o._getMaterialByName(h[m]); + v.push(t || K) + } + y.material = v + } else { + for (var Q = 0; C.materialId.length > Q; Q += 1) { + K = l[C.materialId[Q]]; + v.push(t || K) + } + y.material = v + } + } + } else + Bh.error(m, "没有创建对应的mesh") + } + } + } + } + } + }, + mC.prototype._getUsableMaterial = function (A, e, t, i) { + var o = e.materialId, + n = e.userId, + r = A.materialManager.materials, + a = A.manager.sceneState, + s = A.manager.filter, + l = null, + c = a.isSelected(n); + !0 !== c || s._isPickable(e) || (c = !1), + t ? vc.PickingEffect ? l = s._getOverrideMaterial(e) : (l = s._getOverrideMaterial(e)) && !c || (l = t) : i && (l = s._getOverrideMaterial(e)); + var h = A.manager.getOverrideMaterialByNodeInfo(e); + return l = l || h || r[o], + vc.Hover && !vc.EnableRenderPass && a.hoverId === n && !1 === c && (l = a.getHoverMaterial(l)), + l + }, + mC.prototype._dealMeshes = function (A, e, t, i, o) { + var n = this.getGeometryByNodeInfo(A, e), + r = A.pool, + a = 0; + if (Array.isArray(n)) + for (var s = 0, l = n.length; l > s; s += 1) { + a = r.get({ + modelKey: A.modelKey, + nodeId: e.nodeId, + userId: e.userId, + originalId: e.originalId, + userData: e.userData, + geometry: n[s], + matrix: e.matrix, + material: i, + renderOrder: i.transparent ? 0 : vc.MaximumDepth - e.cellDepth, + visible: t + }), + null + } + else + a = r.get({ + modelKey: A.modelKey, + nodeId: e.nodeId, + userId: e.userId, + originalId: e.originalId, + userData: e.userData, + geometry: n, + matrix: e.matrix, + material: i, + renderOrder: i.transparent ? 0 : vc.MaximumDepth - e.cellDepth, + visible: t + }); + 0 > a || o.curOctantId !== e.octantId && (a > 0 && A.manager.addObjectRangeToOctantMap(o.curOctantId, o.octantStartIndex, a - 1), + o.octantStartIndex = a, + o.curOctantId = e.octantId) + }, + mC.prototype._dealLineSegments = function (A, e, t, i) { + var o = this.getGeometryByNodeInfo(A, e); + if (o) { + var n = this._getLineSegmentsNodeGroup(A), + r = this.lineNodes[e.nodeId]; + r || ((r = new cf(o, i)).nodeId = e.nodeId, + r.name = e.name, + r.geometryId = e.geometryId, + r.modelKey = A.modelKey, + this.lineNodes[e.nodeId] = r), + r.material = i, + r.visible = t, + n.add(r), + r.updateMatrixWorld(!0), + this._cacheActiveMesh(e.userId, e.nodeId, r) + } + }, + mC.prototype._frustumCull = function (A, e, t) { + var i = A.manager, + o = e.getFrustum(), + n = vc.OctantDepth, + r = e.projScreenMatrix, + a = new aA; + + function s(A, e, t, i, o) { + var n = null; + if (e && t > A.depth && (a.set(A.min, A.max), + n = e.intersectsBox(a)), + n) { + if (i) { + var l = a.applyMatrix4(r), + c = l.getSize().length(), + h = l.getCenter().z; + A.priority = c / (h = h > 1e-6 ? h : 1e-6), + o.push(A) + } else + o.push(A); + for (var d = 0, p = A.childOctants.length; p > d; d += 1) + s(A.childOctants[d], e, t, i, o) + } + } + (vc.DEBUG && i.showOctreeBox(t), + s(t, o, n, !0, this.visibleOctant), + vc.OcclusionTranslucentEnabled) && s(t, this.manager.getFrustumFromOcclusionCamera(), n, !1, this.occlusionVisibleOctant); + return !0 + }, + mC.prototype._logicCull = function (A, e, t, i, o) { + var n = A.manager, + r = n.filter, + a = r._hasHiddenFileIdFilter(), + s = r._hasOverrideMaterialFilter(), + l = n.sceneState.selectionSet, + c = r._hasRenderPromotionFilter(), + h = this.nodePriority.high, + d = this.nodePriority.medium, + p = this.nodePriority.low, + g = this.nodePriority.low.length, + u = A.getModelDescriptor().getNodeInfosWithComponentKey(); + + function f(A, e) { + if (!(a && r._isHiddenFileId(A) || !1 === r._isVisible(A))) + if (l.hasOwnProperty(A.userId) || s && r._hasHighPriorityOverrideMaterial(A)) + h.push(A); + else { + var t = !1; + if (c && r._isRenderPromotion(A) && (t = !0), + e) { + var o = A.userData, + n = o ? o.categoryId : void 0; + n && e[n] && (t = !0) + } + t ? d.push(A) : g > i && (p[i] = A, + i += 1) + } + } + var m = n.getCategoriesFromHighPriority("outer"); + !0 === t && (m = n.getCategoriesFromHighPriority("inner")); + for (var C = 0, y = 0, v = 0; o > v; v += 1) { + var I = null, + E = 0; + e ? (I = this.visibleOctant[v].octantId, + E = this.visibleOctant[v].depth) : I = v; + var B = u[I]; + if (B) { + var x = this._getUsedNodeInfosByComponentKey(I); + if (!x) { + for (C = 0, + y = B.length; y > C; C += 1) { + (w = B[C]).octantId = I, + w.cellDepth = E, + this._isSatisfied(A, w) && this._cacheUsedNodeInfosByComponentKey(I, w) + } + x = this._getUsedNodeInfosByComponentKey(I) + } + if (x) { + var S = x.default; + for (C = 0, + y = S.length; y > C; C += 1) { + var w; + f(w = S[C], m) + } + } + } + } + return Bh.timeEnd("collectNodeInfo"), + i + }, + mC.prototype._clearUsedNodeInfosObject = function () { + for (var A in this.usedNodeInfosObject) + delete this.usedNodeInfosObject[A].default, + delete this.usedNodeInfosObject[A].instance, + delete this.usedNodeInfosObject[A]; + this.usedNodeInfosObject = {} + }, + mC.prototype._getUsedNodeInfosByComponentKey = function (A) { + return this.usedNodeInfosObject[A] + }, + mC.prototype._cacheUsedNodeInfosByComponentKey = function (A, e) { + this.usedNodeInfosObject[A] || (this.usedNodeInfosObject[A] = {}, + this.usedNodeInfosObject[A].default = [], + this.usedNodeInfosObject[A].instance = []), + this.usedNodeInfosObject[A].default.push(e) + }, + mC.prototype._isSatisfied = function (A, e) { + var t = A.getLoadedUserIdsObject(); + return !t || Boolean(t[e.userId]) + }, + mC.prototype._logicCullWithFull = function (A, e) { + return this._logicCull(A, !1, !0, 0, e) + }, + mC.prototype._sortVisibleOctant = function (A, e) {}, + mC.prototype._applyOcclusionTranslucent = function (A) { + if (vc.OcclusionTranslucentEnabled) { + var e = A.pool.getObjects(), + t = A.manager.octantToObjectMap, + i = this.occlusionVisibleOctant.length; + if (i > 0) + for (var o = A.manager.getFrustumFromOcclusionCamera(), n = 0; i > n; n += 1) { + var r = t[this.occlusionVisibleOctant[n].octantId]; + if (r && r.length > 0) + for (var a = 0, s = r.length; s > a; a += 2) + for (var l = r[a]; r[a + 1] >= l; l += 1) { + var c = e[l][0]; + Rd.intersectObjectWithFrustum(c, o) && this._overrideOcclusionMaterial(c) + } + } + } + }, + mC.prototype._overrideOcclusionMaterial = function (A, e) { + var t = e.material; + if (t && !1 === t.transparent) { + var i = A.manager.acquireMaterial(), + o = i.material; + t.color ? o.color.copy(t.color) : i.resetColor(), + o.opacity = vc.OcclusionOpacity, + e.material = o, + e.material.needsUpdate = !0 + } + }, + mC.prototype._clearNodePriorityData = function (A) { + var e = this.nodePriority; + e.high.length = 0, + e.medium.length = 0, + A && (e.low.length = 0) + }, + mC.prototype._adjustLowNodePriorityLength = function (A) { + 0 === this.nodePriority.low.length && (this.nodePriority.low.length = this.manager.getRenderableCount(A)) + }, + mC.prototype._clearLineSegmentsNodeGroup = function (A) { + this._getLineSegmentsNodeGroup(A).clear() + }, + mC.prototype._getLineSegmentsNodeGroup = function (A) { + return A._getNodeGroup(gp.LINESEGMENTS, { + globalSpace: !0 + }) + }, + mC.prototype._isLineSegments = function (A) { + return A.type === Qf.EnumNodeItemType.LINE + }, + mC.prototype.getBlinkMaterials = function (A) { + return this.blinkMaterials + }, + mC.prototype._makeMesh = function (A, e, t) { + var i = A.modelKey, + o = A.manager, + n = A.getModelDescriptor().getStandardNodeInfos(); + if (n) { + e || (e = A.getModelDescriptor().getInstancedUserIds()); + for (var r = A.getModelDescriptor(), a = A._getNodeGroup(gp.GEOMETRY, { + globalSpace: !0 + }), s = A.materialManager.materials, l = 0, c = e.length; c > l; l += 1) { + var h = A.getModelDescriptor().getNodeInfosByComponentKey(e[l]); + if (!h || !h[0].mesh) + for (var d = n[e[l]], p = 0, g = d.length; g > p; p += 1) { + var u = d[p]; + if (u) { + var f = u.geometryId, + m = this.getGeometryById(f); + if (m) { + var C = u.materialId || r.referencedMeshCache.components[e[l]].matId, + y = null; + if (y = [], + op(A.dataVersion, "1.0") || void 0 === A.dataVersion) { + var v = s[C]; + if (u.materialId = [], + !v) + continue; + if (Array.isArray(v)) + if (v.length > 1) + for (p = 0; v.length > p; p += 1) + u.materialId.push(C + "_" + p), + s[C + "_" + p] = v[p]; + else + s[C] = v[0], + u.materialId.push(C); + else + u.materialId.push(C); + for (p = 0; u.materialId.length > p; p += 1) + y.push(s[u.materialId[p]]) + } else + for (p = 0; C.length > p; p += 1) { + var I = s[C[p]]; + I || (I = Kd.DefaultMaterial), + y.push(I) + } + if (1 > y.length) { + var E = _u[u.type] ? _u[u.type].color : void 0; + E || (Bh.log("Material not found for type: ", u.type), + E = _u.DEFAULT.color), + E || (Bh.log("Default material not found for type: ", u.type), + E = [1, 1, 1, 1]); + var B = new LA(E[0], E[1], E[2]), + x = B.getHexString() + "_" + E[3], + S = s[x]; + S || (S = new xr({ + color: B + }), + 1 > E[3] && (S.transparent = !0, + S.opacity = E[3]), + S.side = 2, + s[x] = S), + m.groups = [{ + start: 0, + count: m.index.count, + materialIndex: 0 + }], + u.materialId.push(x), + y.push(S) + } + for (var w = 0; y.length > w; w += 1) + y[w].aoMap && m.attributes.uv && (m.attributes.uv2 = m.attributes.uv); + var M = new Kf(m, y), + b = { + matrix: u.matrix, + modelKey: i, + name: u.name, + key: u.componentKey, + userData: {}, + typeEx: u.type + }; + M.spawn(b), + a.add(M), + o.addMeshToOctantMap(i, u.componentKey, new Iu(u.componentKey, M)); + var U = { + indexCount: m.index.count, + indexStart: 0, + lightmapIdx: void 0, + nodeId: u.componentKey, + positionCount: 3 * m.attributes.position.count, + positionStart: 0, + userId: u.componentKey + }; + M._indicesGroup = {}, + M._indicesGroup[u.componentKey] = [U], + A.addMeshToInfoMap(u.componentKey, u.componentKey, M, U), + M.geometryId = u.geometryId, + this._cacheActiveMesh(u.userId, u.nodeId, M), + f = null, + C = null, + b = null, + y = null, + m = null, + M = null + } + } + } + } + a.updateMatrixWorld(!0), + t && t() + } + }, + mC.prototype._makeSkinMesh = function (A, e, t) { + var i = A.modelKey, + o = A.manager, + n = A.getModelDescriptor().getStandardNodeInfos(); + if (n) { + e || (e = A.getModelDescriptor().getInstancedUserIds()); + for (var r = A.getModelDescriptor(), a = A.materialManager.materials, s = 0, l = e.length; l > s; s += 1) + for (var c = n[e[s]], h = 0, d = c.length; d > h; h += 1) { + var p = c[h]; + if (p) { + var g = p.geometryId, + u = this.getGeometryById(g); + if (u) { + var f = p.materialId || r.referencedMeshCache.components[e[s]].matId, + m = null; + m = []; + for (h = 0; f.length > h; h += 1) { + var C = a[f[h]]; + C || (C = Kd.DefaultMaterial), + m.push(C) + } + if (1 > m.length) { + var y = _u[p.type] ? _u[p.type].color : void 0; + y || (Bh.log("Material not found for type: ", p.type), + y = _u.DEFAULT.color), + y || (Bh.log("Default material not found for type: ", p.type), + y = [1, 1, 1, 1]); + var v = new LA(y[0], y[1], y[2]), + I = v.getHexString() + "_" + y[3], + E = a[I]; + E || (E = new xr({ + color: v + }), + 1 > y[3] && (E.transparent = !0, + E.opacity = y[3]), + E.side = 2, + a[I] = E), + u.groups = [{ + start: 0, + count: u.index.count, + materialIndex: 0 + }], + p.materialId.push(I), + m.push(E) + } + for (var B = 0; m.length > B; B += 1) + m[B].aoMap && (u.attributes.uv2 = u.attributes.uv); + var x = null; + if ("skinIndex" in u.attributes && "skinWeight" in u.attributes) { + x = new fC(u, m); + for (var S = 0; m.length > S; S += 1) + m[S].skinning = !0; + console.log("SkinnedMesh 类型mesh") + } else + x = new Kf(u, m); + var w = { + matrix: p.matrix, + modelKey: i, + name: p.name, + key: p.componentKey, + userData: {}, + typeEx: p.type + }; + x.spawn(w), + o.addMeshToOctantMap(i, p.componentKey, new Iu(p.componentKey, x)); + var M = { + indexCount: u.index.count, + indexStart: 0, + lightmapIdx: void 0, + nodeId: p.componentKey, + positionCount: u.attributes.position.count, + positionStart: 0, + userId: p.componentKey + }; + return x._indicesGroup = {}, + x._indicesGroup[p.componentKey] = [M], + A.addMeshToInfoMap(p.componentKey, p.componentKey, x, M), + x.geometryId = p.geometryId, + this._cacheActiveMesh(p.userId, p.nodeId, x), + g = null, + f = null, + w = null, + m = null, + u = null, + x + } + } + } + } + }, + mC.prototype._readBufferInfo = function (A, e) { + var t = A.getModelDescriptor().getStandardNodeInfos(); + if (t) { + e || (e = A.getModelDescriptor().getInstancedUserIds()); + for (var i = A.getModelDescriptor(), o = A.materialManager.materials, n = A.materialManager.textures, r = 0, a = e.length; a > r; r += 1) + for (var s = t[e[r]], l = 0, c = s.length; c > l; l += 1) { + var h = i.referencedMeshCache.components[s[l].componentKey], + d = h.type; + if (-1 !== h.geoId) { + var p = this.getGeometryById(h.geoId); + if (p || (p = this.getGeometryByNodeInfo(A, s[l]))) + if (np(A.dataVersion, "2.0.0")) + ; + else { + var g = o[h.matId]; + if (g) { + if (A.textureNeedsUpdate && void 0 !== A.dataVersion && ap(A.dataVersion, "2.0.0") && (A.textureNeedsUpdate = !1, + g.textures.length > 0)) + if (g.materials.length > 1) + for (l = 0; g.UVgroup.length > l; l += 1) + for (m = (f = g.UVgroup[l]).start, + C = f.count, + y = f.textureIndex, + r = 0; g.groups.length > r; r += 1) { + E = (v = g.groups[r]).count, + B = v.materialIndex; + if ((m === (I = v.start) || m + C === I + E || I > m && C > E) && C >= E) { + S = g.materials[B]; + (x = n[g.textures[y]]) && S && (S.map = x) + } + } + else + g.materials[0].map = n[g.textures[0]] + } else if (g = this._readMaterialBuffer(h.matId, A)) { + if (0 === g.materials.length) { + (v = _u[d] ? _u[d].color : void 0) || (Bh.log("Material not found for type: ", d), + v = _u.DEFAULT.color), + v || Bh.log("Default material not found for type: ", d); + var u = new xr({ + color: new LA(v[0], v[1], v[2]) + }); + 1 > v[3] && (u.transparent = !0, + u.opacity = v[3]), + u.side = 2, + g.materials.push(u), + g.groups.push({ + start: 0, + count: c = p.index.count, + materialIndex: 0 + }) + } + if (g.textures.length > 0) + if (g.materials.length > 1) + for (var l = 0; g.UVgroup.length > l; l += 1) + for (var f, m = (f = g.UVgroup[l]).start, C = f.count, y = f.textureIndex, r = 0; g.groups.length > r; r += 1) { + var v, I, E = (v = g.groups[r]).count, + B = v.materialIndex; + if ((m === (I = v.start) || m + C === I + E || I > m && C > E) && C >= E) { + var x, S = g.materials[B]; + (x = n[g.textures[y]]) && S && (S.map = x) + } + } + else + g.materials[0].map = n[g.textures[0]]; + p && g && (p.groups = g.groups), + o[h.matId] = g.materials + } + } + } else + Bh.debug("实体没有几何") + } + } + }, + mC.prototype.createMeshNodes = function (A, e) { + this._readBufferInfo(A, e), + A.hasAnimation && vc.EnableAnimation ? this._makeSkinMesh(A) : this._makeMesh(A) + }, + mC.prototype.asyncCreateMeshNodes = function (A, e, t) { + this._readBufferInfo(A, e), + A.hasAnimation && vc.EnableAnimation ? t && t() : this._makeMesh(A, e, t) + }, + mC.prototype._readMaterialBuffer = function (A, e) { + var t = e.getModelDescriptor().referencedMeshCache.materials[A]; + if (!t) + return null; + var i = t.color, + o = t.colorIndex, + n = t.texture, + r = t.textureIndex, + a = [], + s = [], + l = []; + new Aa; + if (i.length > 4) { + for (var c = 0; i.length / 4 > c; c += 1) { + var h = new xr({ + color: new LA(i[4 * c], i[4 * c + 1], i[4 * c + 2]) + }); + 1 > i[4 * c + 3] && (h.transparent = !0, + h.opacity = i[4 * c + 3]), + h.side = 2, + a.push(h), + h = null + } + for (var d = null, p = void 0, g = 0; o.length > g; g += 1) { + var u = o[g]; + u !== p && (p = u, + null != d && (d.count = 3 * g - d.start, + s.push(d)), + d = { + start: 3 * g, + materialIndex: p + }) + } + null != d && (d.count = 3 * o.length - d.start, + s.push(d)) + } else if (4 === i.length) { + var f = new xr({ + color: new LA(i[0], i[1], i[2]) + }); + 1 > i[3] && (f.transparent = !0, + f.opacity = i[3]), + f.side = 2, + a.push(f), + s.push({ + start: 0, + count: 3 * o.length, + materialIndex: 0 + }) + } + for (var m = null, C = void 0, y = r, v = 0; y.length > v; v += 1) { + var I = y[v]; + I !== C && (C = I, + null != m && (m.count = 3 * v - m.start, + l.push(m)), + m = { + start: 3 * v, + textureIndex: C + }) + } + return null != m && (m.count = 3 * y.length - m.start, + l.push(m)), { + materials: a, + groups: s, + textures: n, + UVgroup: l + } + }, + mC.prototype.clearSelectedObjectIds = function () { + this.selectedObjectIds.length = 0 + }, + mC.prototype.cacheSelectedObjectIds = function (A) { + this.selectedObjectIds.push(A) + }, + mC.prototype.adjustVisibility = function (A, e) { + var t = this._getNodeGroup(A), + i = t.visible; + e && !t.bVisible || (t.visible = e), + t.bVisible = i + }, + mC.prototype.changeVisibilityOfSelectedObjects = function (A, e) { + var t = A.manager, + i = t.octantToObjectMap[A.modelKey].mesh; + this.selectedMeshes.length = 0; + for (var o = 0, n = this.selectedObjectIds.length; n > o; o += 1) { + var r = this.selectedObjectIds[o], + a = i[r][0]; + a && (t.filter._isVisible({ + userId: r + }) && (a.visible = e)) + } + }, + mC.prototype.changeVisibilityOfNonSelectedObjects = function (A, e) { + var t = A.manager, + i = t.octantToObjectMap[A.modelKey].mesh; + this.selectedMeshes.length = 0; + for (var o = {}, n = 0, r = this.selectedObjectIds.length; r > n; n += 1) { + o[this.selectedObjectIds[n]] = !0 + } + for (var a in i) + if (i.hasOwnProperty(a) && !o[a]) { + var s = i[a][0]; + if (!s) + continue; + if (!t.filter._isVisible({ + userId: a + })) + continue; + s.visible = e + } + }, + mC.prototype.restoreVisibilityOfObjects = function () { + this.selectedMeshes.length = 0, + this.nonSelectedMeshes.length = 0 + }, + mC.prototype._getNodeGroup = function (A) { + return A._getNodeGroup(gp.GEOMETRY, { + globalSpace: !0 + }) + }, + mC.prototype.getMeshesByUserIds = function (A, e) { + var t = e, + i = A.getModelDescriptor().getNodeInfosByComponentKey(t); + if (i) { + for (var o = [], n = 0, r = i.length; r > n; n += 1) + for (var a = i[n], s = a.mesh, l = s._indicesGroup[t], c = 0, h = l.length; h > c; c += 1) { + var d = {}; + d.mesh = s, + d.indexInfo = l[c], + d.matrix = s.matrix.clone().multiply(A.getModelMatrix()), + d.boundingBox = a.boundingBox.clone().applyMatrix4(d.matrix), + o.push(d) + } + return o + } + return null + }, + mC.prototype._getUsedGeometry = function (A, e) { + var t = null; + if (!vc.Instance && e.uvArrayBuffer) { + var i = e.geometryId + "|" + e.nodeId; + if (t = this.getGeometryById(i)) + return t; + var o = this._createGeometryByNodeInfo(A, e); + o instanceof Array || (o = [o]), + t = []; + for (var n = new l, r = new y, a = e.uvArrayBuffer, s = 0, c = o.length; c > s; s += 1) { + var h = new he; + h.setIndex(o[s].index), + h.addAttribute("position", o[s].attributes.position), + h.addAttribute("normal", o[s].attributes.normal), + n.set(a[6 * s], a[6 * s + 2], a[6 * s + 4], a[6 * s + 1], a[6 * s + 3], a[6 * s + 5], 0, 0, 1); + for (var d = [], p = o[s].attributes.uv.array, g = 0, u = p.length; u > g; g += 2) + r.set(p[g], p[g + 1], 1), + r.applyMatrix3(n), + d.push(r.x), + d.push(r.y); + h.addAttribute("uv", new Ae(d, 2)), + t.push(h) + } + this._cacheGeometry(i, t) + } else + t = this.getGeometryByNodeInfo(A, e); + return t + }, + mC.prototype.getGeometryBuffersByUserId = function (A, e) { + var t = A.getModelDescriptor().getStandardNodeInfosById(e); + if (!t) + return []; + for (var i = [], o = A.getDatabagId(), n = 0, r = t.length; r > n; n += 1) { + var a = t[n], + s = this.getGeometryByNodeInfo(A, a); + if (s) { + var l = this._isLines(a); + if (s instanceof Array) + for (var c = 0, h = s.length; h > c; c += 1) + i.push({ + isLines: l, + databagId: o, + nodeId: a.nodeId, + position: s[c].getAttribute("position").array, + index: s[c].getIndex().array, + matrix: a.matrix + }); + else + i.push({ + isLines: l, + databagId: o, + nodeId: a.nodeId, + position: s.getAttribute("position").array, + index: s.getIndex().array, + matrix: a.matrix + }) + } + } + return i + }, + mC.prototype.traverseActiveMeshMap = function (A, e) { + for (var t = 0, i = (A = A || Object.keys(this.activeMeshMap)).length; i > t; t += 1) { + var o = A[t]; + if (this.activeMeshMap[o]) + for (var n = Object.keys(this.activeMeshMap[o]), r = 0, a = n.length; a > r; r += 1) { + var s = n[r]; + e(o, s, this.activeMeshMap[o][s]) + } + } + }, + mC.prototype.getActiveMeshMapById = function (A) { + return this.activeMeshMap[A] + }, + mC.prototype._clearActiveMeshMap = function () { + this.activeMeshMap = {} + }, + mC.prototype._cacheActiveMesh = function (A, e, t) { + this.activeMeshMap[A] || (this.activeMeshMap[A] = {}), + this.activeMeshMap[A][e] || (this.activeMeshMap[A][e] = []), + this.activeMeshMap[A][e].push(t) + }, + mC.prototype._isLines = function (A) { + return A.type === $u.EnumNodeItemType.LINE + }, + mC.prototype.getPickingNodeGenerator = function () { + return this.pickingNodeGenerator || (this.pickingNodeGenerator = new uC(this)), + this.pickingNodeGenerator + }, + mC.prototype.isPickableNode = function (A) { + return !this.filter || this.filter._isPickable({ + userId: A + }) + }; + var CC = function (A) { + of .call(this, A), + this.nodeGroupName = "PickingWireFrameGroup" + }; + Object.assign(CC.prototype, of .prototype), + eu(CC, [{ + key: "disposePickingNodeById", + value: function (A) { + for (var e = Object.keys(this.pickingNodeMap[A]), t = 0, i = e.length; i > t; t += 1) + for (var o = this.pickingNodeMap[A][e[t]], n = 0, r = o.length; r > n; n += 1) + o[n].material = null, + o[n].geometry.dispose(), + o[n] = null + } + }, { + key: "addToPickingNodeMap", + value: function (A, e, t) { + this.pickingNodeMap || (this.pickingNodeMap = {}), + this.pickingNodeMap[A] || (this.pickingNodeMap[A] = {}), + this.pickingNodeMap[A][e] = t, + this.addToPickingNodeGroup(t) + } + }, { + key: "removeFormPickingNodeGroup", + value: function (A) { + if (this.pickingNodeGroup) + for (var e = Object.keys(this.pickingNodeMap[A]), t = 0, i = e.length; i > t; t += 1) + for (var o = this.pickingNodeMap[A][e[t]], n = 0, r = o.length; r > n; n += 1) + this.pickingNodeGroup.remove(o[n]) + } + }, { + key: "generatePickingMeshes", + value: function (A) { + var e = this, + t = this.manager; + this.manager.manager.getMeshManager().traverseActiveMeshMap(A, (function (A, i, o) { + if (!(o && o.length && o[0].isLineSegments || e._isExistNode(A, i))) { + var n = 0, + r = 0, + a = o[0].geometryId, + s = []; + for (n = 0, + r = o.length; r > n; n += 1) + s.push(o[n].geometry); + var l = t._getWireframeGeometryById(a, s), + c = []; + for (n = 0, + r = l.length; r > n; n += 1) { + var h = new jo(l[n], Kd.DefaultMaterial); + Tu.copyMeshProperties(h, o[n]), + h.renderOrder = 0, + c.push(h) + } + e.addToPickingNodeMap(A, i, c) + } + })) + } + }, { + key: "_isExistNode", + value: function (A, e) { + return !!(this.pickingNodeMap && this.pickingNodeMap[A] && this.pickingNodeMap[A][e]) + } + }, { + key: "updatePickingMeshesState", + value: function (A, e, t) { + if (this.pickingNodeMap) + for (var i = this.pickingNodeMap, o = this.manager.manager.getMeshManager(), n = 0, r = e.length; r > n; n += 1) { + var a = e[n]; + if (i[a] && o.isPickableNode(a)) { + var s = o.getActiveMeshMapById(a); + if (s) + for (var l = Object.keys(i[a]), c = 0, h = l.length; h > c; c += 1) { + var d = l[c]; + if (s[d]) { + var p = i[a][d]; + if (p) + for (var g = 0, u = p.length; u > g; g += 1) + p[g].material = A, + p[g].visible = !0 + } + } + } + } + } + }, { + key: "resetPickingMeshesState", + value: function () { + if (this.pickingNodeMap) + for (var A = this.pickingNodeMap, e = Object.keys(A), t = 0, i = e.length; i > t; t += 1) + for (var o = e[t], n = Object.keys(A[o]), r = 0, a = n.length; a > r; r += 1) + for (var s = A[o][n[r]], l = 0, c = s.length; c > l; l += 1) + s[l].visible = !1 + } + }, { + key: "updatePickingMeshes", + value: function (A, e, t) { + return this.generatePickingMeshes(e), + this.resetPickingMeshesState(), + this.updatePickingMeshesState(A, e, t), + this.getPickingNodeGroup() + } + }]); + var yC = function (A) { + this.manager = A, + this.wireframeGeometries = {}, + this.wireframeLineMeshes = {} + }; + yC.prototype._disposeGeometries = function () { + for (var A in this.wireframeGeometries) + this._disposeGeometry(A) + }, + yC.prototype.destroy = function () { + this.manager = null, + this._clearWireframeLineMeshes(), + this.wireframeLineMeshes = null, + this._disposeGeometries(), + this.wireframeGeometries = null + }, + yC.prototype.clearData = function () { + this._clearWireframeLineMeshes(), + this._disposeGeometries() + }, + yC.prototype.update = function (A, e) { + this.isActivateWireframe(A) ? (this._clearWireframeGroupNode(A), + this._generateWireframeNodes(A, e), + this._getWireWireframeGroupNode(A).updateMatrixWorld(!0)) : this._removeWireframeGroupNode(A) + }, + yC.prototype._disposeGeometry = function (A) { + var e = this.wireframeGeometries[A]; + if (e) { + if (Array.isArray(e)) + for (var t = 0, i = e.length; i > t; t += 1) + e[t].dispose(); + else + e.dispose(); + delete this.wireframeGeometries[A] + } + }, + yC.prototype._clearWireframeLineMeshes = function () { + for (var A in this.wireframeLineMeshes) + delete this.wireframeLineMeshes[A]; + this.wireframeLineMeshes = {} + }, + yC.prototype._clearWireframeGroupNode = function (A) { + this._getWireWireframeGroupNode(A).clear() + }, + yC.prototype._removeWireframeGroupNode = function (A) { + A._removeNodeGroup(this._getWireframeGroupName(A)) + }, + yC.prototype.isActivateWireframe = function (A) { + return A.isActivateWireframe() + }, + yC.prototype._getWireWireframeGroupNode = function (A) { + return A._getNodeGroup(this._getWireframeGroupName(A), { + globalSpace: !0 + }) + }, + yC.prototype._getWireframeGeometryByNodeInfo = function (A, e) { + return this._getWireframeGeometryById(e.geometryId, this.manager.getGeometryByNodeInfo(A, e), A) + }, + yC.prototype._getWireframeGeometryById = function (A, e, t) { + if (this.wireframeGeometries[A]) + return this.wireframeGeometries[A]; + var i = [], + o = null, + n = null; + if (Array.isArray(e)) + for (var r = 0, a = e.length; a > r; r += 1) + n = Up(e[r].attributes.position.array, e[r].index.array), + (o = new he).setIndex(new $A(n, 1)), + o.setAttribute("position", e[r].attributes.position, 3), + i.push(o); + else + n = Up(e.attributes.position.array, e.index.array), + (o = new he).setIndex(new $A(n, 1)), + o.setAttribute("position", e.attributes.position, 3), + i.push(o); + return this.wireframeGeometries[A] = i, + this.wireframeGeometries[A] + }, + yC.prototype._makeWireframeLineMeshes = function (A, e, t) { + var i = this.wireframeLineMeshes[e.nodeId]; + if (!i) { + i = this.wireframeLineMeshes[e.nodeId] = []; + for (var o = this._getWireframeGeometryByNodeInfo(A, e), n = 0, r = o.length; r > n; n += 1) { + var a = new jo(o[n], this._getWireframeMaterial(A)); + a.name = e.nodeId + "_" + n, + a.applyMatrix4(e.matrix), + a.matrixAutoUpdate = !1, + i.push(a) + } + e.wireframeMeshs = i + } + for (var s = 0, l = i.length; l > s; s += 1) + t.add(i[s]) + }, + yC.prototype._generateWireframeNodes = function (A, e) { + var t = this._getWireWireframeGroupNode(A), + i = A.getModelDescriptor().getStandardNodeInfos(); + e || (e = A.getModelDescriptor().getStandardUserIds()); + for (var o, n, r = this.manager.getHiddenUserIds(), a = 0; e.length > a; a += 1) { + var s = e[a], + l = i[s][0]; + r[s] || (o = l, + n = this._getFilter(A), + o.type === Qf.EnumNodeItemType.LINE || vc.Instance && ("box" === o.geometryId || "boxM" === o.geometryId) || n._hasRenderWithBoardlineFilter() && !n._isRenderWithBoardline(o) || this._makeWireframeLineMeshes(A, l, t)) + } + }, + yC.prototype._getWireframeGroupName = function (A) { + return A._getWireframeGroupName() + }, + yC.prototype._getWireframeMaterial = function (A) { + return A.getWireframeMaterial() + }, + yC.prototype._getFilter = function (A) { + return A.manager.filter + }, + yC.prototype.adjustVisibility = function (A, e) { + if (A.isActivateWireframe()) { + var t = this._getWireWireframeGroupNode(A), + i = t.visible; + e && !t.bVisible || (t.visible = e), + t.bVisible = i + } + }, + yC.prototype.changeVisibilityOfSelectedObjects = function (A, e) {}, + yC.prototype.changeVisibilityOfNonSelectedObjects = function (A, e) { + this.adjustVisibility(A, e) + }, + yC.prototype.restoreVisibilityOfObjects = function () {}, + yC.prototype.getPickingNodeGenerator = function () { + return this.pickingNodeGenerator || (this.pickingNodeGenerator = new CC(this)), + this.pickingNodeGenerator + }; + var vC = function (A) { + this.meshManager = new mC(this), + this.model = A, + this.wireframeManager = new yC(this) + }; + vC.prototype.destroy = function () { + this.meshManager.destroy(), + this.meshManager = null, + this.wireframeManager.destroy(), + this.wireframeManager = null + }, + vC.prototype.clearData = function () { + this.meshManager.clearData(), + this.wireframeManager.clearData() + }, + vC.prototype.disposeGeometry = function (A) { + this.meshManager.disposeGeometry(A) + }, + vC.prototype.cullNodes = function (A, e) { + this.hasNodeInfo(A) && this.meshManager.cullNodes(A, e) + }, + vC.prototype.updateNodes = function (A, e) { + if (this.hasNodeInfo(A)) { + var t; + t = this._collectModelFiltered(A), + this.meshManager.update(A, e, t), + this.wireframeManager.update(A, e) + } + }, + vC.prototype.applyFilter = function (A, e) { + console.log('applyFilter :>dfdfdfdf> '); + if (this.hasNodeInfo(A)) { + var t = null; + t = e || A.getModelDescriptor().getStandardUserIds(); + var i = A.getModelDescriptor().getStandardNodeInfos(); + this._collectFilteredUserIds(A.manager.filter, t, i), + this._collectSelectedUserIds(A.manager.sceneState.selectionSet, i), + this._collectHoveredUserIds(A.manager.sceneState.hoverId, i), + this.updateNodes(A, e) + } + }, + vC.prototype.applySelection = function (A) { + console.log('applySelection18') + if (this.hasNodeInfo(A)) { + var e = A.getModelDescriptor().getStandardNodeInfos(); + this._clearSelectedState(A), + this._clearHoveredState(A), + this._collectSelectedUserIds(A.manager.sceneState.selectionSet, e), + this._collectHoveredUserIds(A.manager.sceneState.hoverId, e), + this.updateNodes(A) + } + }, + vC.prototype.clearSelection = function (A) { + this._clearSelectedState(A), + this.applyHover(A) + }, + vC.prototype.applyHover = function (A) { + if (this.hasNodeInfo(A)) { + var e = A.getModelDescriptor().getStandardNodeInfos(); + this._clearHoveredState(A), + this._collectHoveredUserIds(A.manager.sceneState.hoverId, e), + this.updateNodes(A) + } + }, + vC.prototype.clearHover = function (A) { + this._clearHoveredState(A), + this.updateNodes(A) + }, + vC.prototype.applyBlink = function (A) {}, + vC.prototype.clearBlink = function (A) {}, + vC.prototype.getPriorityNodes = function () { + return this.meshManager.getPriorityNodes() + }, + vC.prototype.getGeometryByNodeInfo = function (A, e) { + return this.meshManager.getGeometryByNodeInfo(A, e) + }, + vC.prototype.getRenderableCount = function (A) { + return A.renderableCount + }, + vC.prototype.getLoader = function (A) { + return A.loader + }, + vC.prototype.getContainsCamera = function (A) { + return A.containsCamera + }, + vC.prototype.getFilter = function (A) { + return A.manager.filter + }, + vC.prototype.hasNodeInfo = function (A) { + return !!A.getModelDescriptor().getStandardNodeInfos() + }, + vC.prototype.createMeshNodes = function (A) { + this.meshManager.createMeshNodes(A) + }, + vC.prototype.asyncCreateMeshNodes = function (A, e, t) { + this.meshManager.asyncCreateMeshNodes(A, e, t) + }, + vC.prototype._collectFilteredUserIds = function (A, e, t) { + var i = A._hasHiddenFileIdFilter(), + o = A._hasVisibleFilter(), + n = A._hasOverrideMaterialFilter(), + r = A._hasTransparentFilter(); + this.mapMaterialIdToUserIdsForFilter = {}; + if (this.hiddenUserIdSetObject = {}, + this.overrideUserIdSetObject = {}, + this.transparentUserIdSetObject = {}, + i || o || n || r) + for (var a = 0; e.length > a; a += 1) { + var s = e[a], + l = t[s]; + if (l && l.length) + for (var c = 0, h = l.length; h > c; c += 1) { + var d = l[c]; + if (i && A._isHiddenFileId(d) || o && !1 === A._isVisible(d)) + this.hiddenUserIdSetObject[s] = !0; + else if (r && A._isTransparent(d)) + this.transparentUserIdSetObject[s] = !0; + else if (n && A._hasOverrideMaterial(d)) { + var p = A._getOverrideMaterial(d); + if (Array.isArray(p)) { + for (var g = [], u = 0, f = p.length; f > u; u++) { + var m = null !== p[u] ? p[u].name : ""; + "" !== m && g.push(m) + } + this.overrideUserIdSetObject[s] = g + } else { + var C = null !== p ? p.name : ""; + "" !== C && (this.overrideUserIdSetObject[s] = C) + } + } + } + } + }, + vC.prototype._collectModelFiltered = function (A) { + var e = A.manager.filter, + t = A.modelKey, + i = e._hasModelOverrideMaterialFilter(), + o = e._hasModelTransparentFilter(), + n = A.manager.modelState.selectionSet; + return A.manager.modelState.hoverId === t ? A.manager.modelState.getHoverMaterial() : n.hasOwnProperty(A.modelKey) ? A.manager.modelState.selectionMaterial : o && e._isModelTransparent(t) ? e._getMaterialByName("scene") : i && e._hasModelOverrideMaterial(t) ? e._getModelOverrideMaterial(t) : null + }, + vC.prototype._clearFilteredState = function () { + this.hiddenUserIdSetObject = {}, + this.overrideUserIdSetObject = {}, + this.transparentUserIdSetObject = {} + }, + vC.prototype.getFilteredUserIds = function () { + return this.mapMaterialIdToUserIdsForFilter + }, + vC.prototype.getSelectedUserIds = function () { + return this.mapMaterialIdToUserIdsForSelection + }, + vC.prototype.getHoveredUserIds = function () { + return this.mapMaterialIdToUserIdsForHover + }, + vC.prototype.getBlinkedUserIds = function () { + return this.mapBlinkUserIds + }, + vC.prototype.getHiddenUserIds = function () { + return this.hiddenUserIdSetObject + }, + vC.prototype._collectSelectedUserIds = function (A, e) { + for (var t in this.selectedUserIdSetObject = {}, + A) + if (A.hasOwnProperty(t)) { + if (!e[t]) + continue; + this.selectedUserIdSetObject[t] = !0 + } + }, + vC.prototype._clearSelectedState = function () { + this.selectedUserIdSetObject = {} + }, + vC.prototype._collectHoveredUserIds = function (A, e) { + if (this.hoveredUserIdSetObject = {}, + A && e[A]) { + var t = e[A]; + this.hoveredUserIdSetObject = {}, + t && (this.hoveredUserIdSetObject[A] = !0) + } + }, + vC.prototype._clearHoveredState = function () { + this.hoveredUserIdSetObject = {} + }, + vC.prototype.getMeshesByUserIds = function (A, e) { + return this.meshManager.getMeshesByUserIds(A, e) + }, + vC.prototype.adjustVisibility = function (A, e) { + this.meshManager.adjustVisibility(A, e), + this.wireframeManager.adjustVisibility(A, e) + }, + vC.prototype.changeVisibilityOfSelectedObjects = function (A, e) { + this.meshManager.changeVisibilityOfSelectedObjects(A, e), + this.wireframeManager.changeVisibilityOfSelectedObjects(A, e) + }, + vC.prototype.changeVisibilityOfNonSelectedObjects = function (A, e) { + this.meshManager.changeVisibilityOfNonSelectedObjects(A, e), + this.wireframeManager.changeVisibilityOfNonSelectedObjects(A, e) + }, + vC.prototype.restoreVisibilityOfObjects = function () { + this.meshManager.restoreVisibilityOfObjects(), + this.wireframeManager.restoreVisibilityOfObjects() + }, + vC.prototype.isPickableNode = function (A) { + var e = this.getHiddenUserIds(); + if (e && e[A]) + return !1; + var t = this.getTransparentUserIds(); + return !t || !t[A] + }, + vC.prototype.isHiddenNode = function (A) { + var e = this.getHiddenUserIds(); + return !(!e || !e[A]) + }, + vC.prototype.getMeshManager = function () { + return this.meshManager + }, + vC.prototype.getWireFrameManager = function () { + return this.wireframeManager + }, + vC.prototype.getTransparentUserIds = function () { + return this.transparentUserIdSetObject + }; + var IC = function (A) { + return hC.call(this, A), + this.tag = "layer", + this.defaultManager = new vC, + this.instancedManager = new Hf, + this.loader = new gC(this), + this + }; + (IC.prototype = Object.assign(IC.prototype, hC.prototype)).destroy = function () { + this.defaultManager.destroy(), + this.defaultManager = null, + this.instancedManager.destroy(), + this.instancedManager = null + }, + IC.prototype.prepareData = function (A) {}, + IC.prototype.prepare = function (A) { + this.isAllReady() && (this.model.getMaterialManager()._updateTextureMapping(), + this.model.clearMeshFromOctantMap()) + }, + IC.prototype.updateNodes = function () {}, + IC.prototype.addNodeInfoToOctantMap = function () {}, + IC.prototype.dealMeshNodes = function (A) { + A && A() + }, + IC.prototype.disposeBufferAfterVbo = function () {}, + IC.prototype.dealMeshNodes = function (A) { + this.model.getModelDescriptor().getInstancedUserIdsByCategory(this._loadedUserIds); + var e = this.model, + t = this; + this.defaultManager.asyncCreateMeshNodes(e, e.getModelDescriptor().getStandardUserIds(), (function () { + t.updateNodes(), + A && A() + })) + }, + IC.prototype.unloadComponents = function (A, e) { + for (var t = this.model.modelKey, i = 0, o = A.length; o > i; i += 1) { + var n = this.model.getModelDescriptor().getNodeInfosByComponentKey(A[i]); + if (n) { + for (var r = 0, a = n.length; a > r; r += 1) { + var s = n[r]; + if (s.mesh) + this.defaultManager.meshManager.disposeGeometry(s.mesh.geometry.key), + s.mesh.destroy() + } + this.model.manager.removeMeshFromOctantMap(t, A[i]) + } + } + this.model.getModelDescriptor().clearNodeInfoCacheByComponentsKey(A), + e && e() + }; + var EC = function (A) { + Af.call(this, A), + this.instancedComponent = {} + }; + Object.assign(EC.prototype, Af.prototype), + EC.prototype.parseItemData = function (A) { + this._readMaterialBuffer(this.model), + this._parseGeo(), + vc.Instance && this._parseInstanced(); + var e = {}, + t = this.referencedMeshCache; + for (var i in Bh.time("_readItemData"), + t.components) + t.components.hasOwnProperty(i) && this._readItemData(e, i, i, void 0, 0); + Bh.timeEnd("_readItemData"), + e = null, + A && A() + }, + EC.prototype._readItemData = function (A, e, t) { + var i = this.referencedMeshCache.components[e]; + void 0 !== i && this._readMeshInfo(A, t, i, null) + }, + EC.prototype._readMeshInfo = function (A, e, t, i) { + var o = this.referencedMeshCache, + n = this.model.materialManager.materials, + r = null, + a = null, + s = this.model.subModel[t.subModel]; + if (t.nodes || t.nodeIds) { + a = t.originalId; + var l = (new M).fromArray(t.matrix || [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]); + t.matrix = l; + var c = []; + c = t.nodes ? t.nodes : t.nodeIds; + for (var h = 0; c.length > h; h += 1) { + var d = c[h]; + if ("object" !== lc(d) && (d = this.getReferencedMeshComponentNodeById(d)), + d) { + var p, g = null, + u = ""; + if (-1 !== d.geoId) + if ((g = this._getMeshNodeAttr(d, t, h)).boundingBox.applyMatrix4(s), + g) { + if (t.buildInCategory && (g.buildInCategory = t.buildInCategory), + !n[u = d.material]) { + var f = _u[t.type] ? _u[t.type].color : void 0; + f || (Bh.log("Material not found for type: ", t.type), + f = _u.DEFAULT.color), + f || (Bh.log("Default material not found for type: ", t.type), + f = [1, 1, 1, 1]); + var m = new LA(f[0], f[1], f[2]), + C = u || m.getHexString() + "_" + f[3], + y = n[C]; + y || (Bh.warn("缺少材质 " + u), + y = Kd.createStandardMaterial({ + color: m + }), + 1 > f[3] && (y.transparent = !0, + y.opacity = f[3]), + y.side = 2, + n[C] = y), + g.material = u = C + } + if (n[u].aoMap) { + var v = this.getReferencedMeshBufferById(g.geometryId); + v && (v.uv2 = v.uv) + } + p = g.nodeId; + var I = (R = this.userDataReader) ? R.getUserData(r) : null; + g.type = t.type, + g.userId = e, + g.name = t.name, + g.userDataId = r, + g.originalId = a, + g.materialId = u, + g.originMId = u, + g.userData = I, + g.categoryId = 0, + g.componentKey = e, + g.familyName = t.familyName, + g.familySymbol = t.familySymbol; + var E = vc.Instance, + B = o.reuseNodes.hasOwnProperty(p); + g.instanceOrNot = !(!E || !B), + g.isBatched = !0, + g.state = Lc.Visible, + g.material = null, + this._classifyNodeInfo(g), + g = null + } else + Bh.debug("非法node") + } + } + } else { + var x = t, + S = ""; + if (null === i ? (r = x.userDataId, + a = x.originalId, + S = x.materialId || x.matId) : (r = i.userDataId, + a = i.originalId, + S = i.materialId > -1 ? i.materialId : x.materialId), + x.materials || (x.materials = []), + x.materials.length > 0) + for (h = 0; x.materials.length > h; h += 1) { + var w = null; + if (w = this._getOldMeshNodeAttr(A, x, x.materials.length > 1, h)) { + if (x.buildInCategory && (w.buildInCategory = x.buildInCategory), + w.boundingBox.applyMatrix4(s), + !n[S = x.materials[h]]) { + var b = _u[x.type] ? _u[x.type].color : void 0; + b || (Bh.log("Material not found for type: ", x.type), + b = _u.DEFAULT.color), + b || (Bh.log("Default material not found for type: ", x.type), + b = [1, 1, 1, 1]); + var U = new LA(b[0], b[1], b[2]), + F = S || U.getHexString() + "_" + b[3], + K = n[F]; + K || (Bh.warn("缺少材质 " + S), + K = Kd.createStandardMaterial({ + color: U + }), + 1 > b[3] && (K.transparent = !0, + K.opacity = b[3]), + K.side = 2, + n[F] = K) + } + if (n[S].aoMap) { + var Q = this.getReferencedMeshBufferById(w.geometryId); + Q && (Q.uv2 = Q.uv) + } + if (!w) + return; + var R; + I = (R = this.userDataReader) ? R.getUserData(r) : null; + w.type = x.type, + w.userId = x.key, + w.name = x.name, + w.userDataId = r, + w.originalId = a, + w.materialId = S, + w.originMId = S, + w.userData = I, + w.categoryId = 0, + w.componentKey = x.key, + w.familyName = x.familyName, + w.familySymbol = x.familySymbol, + vc.Instance && this.instancedComponent[x.key] ? w.instanceOrNot = !0 : (w.instanceOrNot = !1, + this.instancedGeo[w.originalGeometryId].length > 1 && (w.originalGeometryId = "")), + w.state = Lc.Visible, + w.material = null, + w.isBatched = !0, + this._classifyNodeInfo(w), + w = null + } else + Bh.debug("非法node") + } + else { + var T = null, + k = _u[x.type] ? _u[x.type].color : void 0; + k || (Bh.log("Material not found for type: ", x.type), + k = _u.DEFAULT.color), + k || (Bh.log("Default material not found for type: ", x.type), + k = [1, 1, 1, 1]); + var D = new LA(k[0], k[1], k[2]), + L = D.getHexString() + "_" + k[3], + N = n[L]; + if (N || (N = Kd.createStandardMaterial({ + color: D + }), + 1 > k[3] && (N.transparent = !0, + N.opacity = k[3]), + N.side = 2, + n[L] = N), + x.materials.push(L), + (T = this._getOldMeshNodeAttr(A, x, !1, 0)).boundingBox.applyMatrix4(s), + S = x.materials[0], + !T) + return; + e = x.key; + T.type = x.type, + T.userId = e, + T.name = x.name, + T.originalId = a, + T.materialId = S, + T.originMId = S, + T.userData = {}, + T.categoryId = 0, + T.componentKey = e, + T.familyName = x.familyName, + T.familySymbol = x.familySymbol, + T.instanceOrNot = !(!vc.Instance || !this.instancedComponent[e]), + T.isBatched = !0, + T.state = Lc.Visible, + T.material = null, + this._classifyNodeInfo(T), + T = null + } + } + }, + EC.prototype._getMeshNodeAttr = function (A, e, t) { + var i = new M; + i.fromArray(A.matrix || [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]), + vc.DataReduction && i.scale(new y(1e3, 1e3, 1e3)), + e && i.multiplyMatrices(e.matrix, i), + A.geoId = e.subModel + A.geoId; + var o = A.nodeId, + n = A.geoId; + if (-1 !== n) { + var r = A.maxBoundary || e.maxBoundary, + a = A.minBoundary || e.minBoundary, + s = new ph; + return s.set(a, r), { + nodeId: o, + guid: A.guid, + geometryId: n, + originalGeometryId: A.geoId, + matrix: i, + boundingBox: s, + model: this.model + } + } + }, + EC.prototype._getOldMeshNodeAttr = function (A, e, t, i) { + var o = new M; + o.fromArray(e.matrix || [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]), + vc.DataReduction && o.scale(new y(1e3, 1e3, 1e3)); + var n = t ? e.key + "_" + i : e.key, + r = t ? e.geoId + "_" + i : e.geoId; + if (-1 !== r) { + var a = new ph, + s = this.getReferencedMeshBufferById(e.geoId); + return s && s.position ? (a = Tu.getBoundingBoxByBuffer(s.position)).applyMatrix4(o) : Bh.warn("no position "), { + nodeId: n, + guid: e.guid, + geometryId: r, + originalGeometryId: e.geoId, + matrix: o, + boundingBox: a, + model: this.model + } + } + }; + var BC = function (A) { + Xu.call(this, A), + this.maxGeoLoadTaskCount = 0, + this.geoLoadTaskCount = 0, + this.taskInstancedGeometrieManager = new Ou(this, "geometrie"), + this.descriptor = new EC(A.model) + }; + (BC.prototype = Object.assign(BC.prototype, Xu.prototype)).loadData = function () { + for (var A = this, e = this, t = this.model, i = t.getConfig(), o = !1, n = 0, r = 0, a = 0, s = 0, l = [], c = [], h = [], d = [], p = [], g = [], u = [], f = [], m = [], C = function (C, y) { + var v = i.children[C]; + if (E = i.animation, + !(I = i.scene[C]) || !I.components || !I.geometries && (!I.batchedGeometries && !I.instancedGeometries || 1 > I.batchedGeometries.length && 1 > I.instancedGeometries.length) || !I.materials || !I.textures) + return Bh.error("scene is null,modelKey is ", t.modelKey), + t.dispatchEventEx({ + type: Rc.ON_LOAD_EMPTY_SCENE, + modelKey: t.modelKey + }), + "continue"; + if (o = !0, + n += I.components.length || 0, + I.components.forEach((function (A) { + e.fileKeyFromModelKey[A] = v + })), + r += I.materials.length || 0, + a += I.textures.length || 0, + s += I.reuseNodes && I.reuseNodes.length || 0, + u = u.concat(I.textures), + A.map = A.map || [], + 2 > Number(I.geo)) + return Bh.error("不支持1.0版本的几何结构和其他版本混合加载。"), { + v: void 0 + }; + if (l = l.concat(I.components), + h = h.concat(I.materials), + m = m.concat(I.reuseNodes || []), + Array.isArray(I.nodes) && (c = c.concat(I.nodes)), + u = u.concat(I.textures), + I.map && A.map.push(I.map), + I.trees.length > 0) + for (B = 0; I.trees.length > B; B += 1) + "partition" === (x = I.trees[B]).type && (f.push(x.fileKey), + e.fileKeyFromModelKey[x.fileKey] = v); + I.lights && I.lights.length > 0 && (g = g.concat(I.lights)), + E && (E.bones.length, + E.bones, + d.push(E.clips), + p.push(E.nodes)) + }, y = 0, v = i.scene.length; v > y; y += 1) { + var I, E, B, x, S = C(y); + switch (S) { + case "continue": + continue; + default: + if ("object" === lc(S)) + return S.v + } + } + if (t.setEmptyScene(!o), + e.maxLoadTaskCount = 0, + e.maxLoadTaskCount += n, + e.maxLoadTaskCount += r, + e.maxLoadTaskCount += f.length, + e.maxLoadTaskCount += s, + e.maxLoadTaskCount += c.length, + e.maxLoadTaskCount += g.length, + 1 > e.maxLoadTaskCount) + return Bh.info("Nothing to load ", t.modelKey), + void t.dispatchEventEx({ + type: Tc.SCENE_NOTHING_TO_LOAD, + modelKey: t.modelKey + }); + e.progress.total += e.maxLoadTaskCount, + e.startCallback && e.startCallback(), + Bh.time("数据加载时间"), + e._loadComponent(l), + e._loadMaterial(h), + e._loadComponentNode(c), + e._loadReuseNode(m), + vc.EnableTextureLoading && a > 0 ? (e.maxLoadTextureCount += a, + e._loadTextures(u)) : e._onLoadTexture(), + e._loadKDTree(f), + g.length > 0 && e._loadLights(g), + e.offLine && e.loadAttribute(), + e.loadFloorInfo(e.model.modelKey), + e.loadSceneAndGeos(i) + }, + BC.prototype.loadReuseNode = function (A, e) { + var t = this, + i = this.jsonLoader, + o = this.model, + n = this.url; + i.setResponseType("json"), + vc.useGzip && i.setResponseType("arraybuffer"), + i.setCacheViable(!0); + i.load(n.mpkUrl(A), (function (A) { + t._parseReuseNodes(A), + Bh.debug("component load from online"), + e(), + t._onTaskFinished() + }), void 0, (function (A) { + o.dispatchEventEx({ + type: Tc.LOAD_COMPONENT_ERROR, + modelKey: o.modelKey + }) + })) + }, + BC.prototype._parseComponent = function (A, e) { + var t = this.fileKeyFromModelKey[e] || ""; + if (A) { + var i = this.descriptor; + if (i) + for (var o in vc.useGzip && (A = JSON.parse(uh.ab2str(pako.ungzip(A)))), + A) + if (A.hasOwnProperty(o)) { + var n = A[o]; - + 1 !== n.geoId && (n.geoId = t + n.geoId, + n.subModel = t), + i.cacheReferencedMeshComponentData(A[o].key, A[o]) + } + } else + Bh.error("没有数据") + }, + BC.prototype._parseMaterial = function (A, e) { + if (A) { + if (A instanceof ArrayBuffer) + try { + A = JSON.parse(uh.ab2str(A)) + } catch (A) { + Bh.error("处理材质出错") + } + var t = this.descriptor; + if (t) + for (var i in A) + t.cacheReferencedMeshMaterialData(i, A[i]) + } else + Bh.error("没有数据") + }, + BC.prototype.loadBatchedGeometrie = function (A, e) { + var t = this, + i = this.loader, + o = this.url, + n = this.model; + i.setResponseType("arraybuffer"), + i.setCacheViable(!this.offLine); + var r = i.load(o.mpkUrl(A), (function (i) { + t._parseBatchedGeometrie(i, A), + Bh.debug("geo load from online"), + t._onGeoTaskFinished(), + e() + }), void 0, (function (A) { + n.dispatchEventEx({ + type: Tc.LOAD_GEOMETRY_ERROR, + modelKey: n.modelKey + }), + e(), + t._onGeoTaskFinished() + })); + t.requests.loadGeometrie = r + }, + BC.prototype.loadInstancedGeometrie = function (A, e) { + var t = this, + i = this.loader, + o = this.url, + n = this.model; + i.setResponseType("arraybuffer"), + i.setCacheViable(!this.offLine); + var r = i.load(o.mpkUrl(A), (function (i) { + t._parseInstancedGeometrie(i, A), + Bh.debug("geo load from online"), + t._onGeoTaskFinished(), + e() + }), void 0, (function (A) { + n.dispatchEventEx({ + type: Tc.LOAD_GEOMETRY_ERROR, + modelKey: n.modelKey + }), + e(), + t._onGeoTaskFinished() + })); + t.requests.loadGeometrie = r + }, + BC.prototype._parseBatchedGeometrie = function (A, e) { + var t = this.fileKeyFromModelKey[e] || "", + i = new ku.BatchedGeometryReader(A, this.dataVersion), + o = this.descriptor; + if (o) { + for (var n = i.geoCount, r = 0; n > r; r += 1) { + var a = i.geomMap[r]; + void 0 !== a.position && void 0 !== a.index && void 0 !== a.normal ? (a.geoId = t + a.geoId, + o.cacheReferencedMeshBufferData(a.geoId, a), + this.handler.createBatchedMeshNodes(a)) : Bh.error("Error Geometry!") + } + this.model.manager.viewerImpl.render(), + i = null + } + }, + BC.prototype._parseInstancedGeometrie = function (A, e) { + var t = this.fileKeyFromModelKey[e] || "", + i = new ku.InstancedGeometryReader(A, this.dataVersion), + o = this.descriptor; + if (o) { + for (var n = i.geoCount, r = 0; n > r; r += 1) { + var a = i.geomMap[r]; + void 0 !== a.position && void 0 !== a.index && void 0 !== a.normal ? (a.geoId = t + a.geoId, + o.cacheReferencedMeshBufferData(a.geoId, a), + this.handler.createInstancedMeshNodes(a)) : Bh.error("Error Geometry!") + } + this.model.manager.viewerImpl.render(), + i = null + } + }, + BC.prototype._parseReuseNodes = function (A, e) { + if (A) { + vc.useGzip && (A = JSON.parse(uh.ab2str(pako.ungzip(A)))); + var t = this.descriptor; + if (t) + if (t.referencedMeshCache.reuseNodes) + for (var i in A) + t.referencedMeshCache.reuseNodes[i] = A[i]; + else + t.referencedMeshCache.reuseNodes = A + } else + Bh.error("没有数据") + }, + BC.prototype.startLoadSceneAndGeos = function (A) { + Bh.time("几何数据加载时间"); + for (var e = A.scene, t = this, i = 0, o = 0, n = [], r = [], a = function (a, s) { + var l = e[a], + c = A.children[a]; + (l.batchedGeometries && l.batchedGeometries.length > 0 || l.instancedGeometries && l.instancedGeometries.length > 0) && (i += l.batchedGeometries.length || 0, + o += l.instancedGeometries.length || 0, + n = n.concat(l.batchedGeometries), + r = r.concat(l.instancedGeometries), + l.batchedGeometries.forEach((function (A) { + t.fileKeyFromModelKey[A] = c + })), + l.instancedGeometries.forEach((function (A) { + t.fileKeyFromModelKey[A] = c + }))) + }, s = 0, l = e.length; l > s; s += 1) + a(s); + t.maxGeoLoadTaskCount += i, + t.maxGeoLoadTaskCount += o, + t.maxGeoLoadTaskCount > 0 || t._onGeoTaskFinished(), + this._loadBatchedGeo(n), + this._loadInstancedGeo(r) + }, + BC.prototype.loadSceneAndGeos = function (A) { + for (var e = A.scene, t = this, i = 0, o = [], n = function (n, r) { + var a = e[n], + s = A.children[n]; + a.geometries && a.geometries.length > 0 && !(a.batchedGeometries && a.batchedGeometries.length > 0 || a.instancedGeometries && a.instancedGeometries.length > 0) && (i += a.geometries.length || 0, + o = o.concat(a.geometries), + a.geometries.forEach((function (A) { + t.fileKeyFromModelKey[A] = s + }))) + }, r = 0, a = e.length; a > r; r += 1) + n(r); + t.maxLoadTaskCount += i, + this._loadGeo(o) + }, + BC.prototype._loadBatchedGeo = function (A) { + var e = this; + if (vc.getDataFromIndexedDB && !this.offLine) { + for (var t = this.url, i = [], o = 0; A.length > o; o += 1) + i.push(t.mpkUrl(A[o])); + var n = this.model.getStorage(); + n && n.getBatch(i, (function (A) { + for (var t = function (t) { + if (A[i[t]]) + if (!0 === A[i[t]].split) { + var o = A[i[t]].list, + s = new Uint8Array(A[i[t]].length); + n.getBatch(o, (function (A) { + for (var n = !0, r = 0; o.length > r; r += 1) + A[o[r]] ? s.set(new Uint8Array(A[o[r]]), 4e7 * r) : (n = !1, + Bh.error("获取分割几何失败")); + if (n) { + var a = i[t].indexOf("fileKey="); + e._parseBatchedGeometrie(s.buffer, i[t].slice(a + 8)), + e._onGeoTaskFinished(), + Bh.debug("load geo from local") + } else { + var l = e.taskGeometrieManager, + c = i[t].indexOf("fileKey="); + if (-1 === c) + return void Bh.error("url is not has fileKey"); + l.addTask(i[t].slice(c + 8)), + Bh.debug("load geo from net"), + e.taskGeometrieManager.processTasks(e.loadBatchedGeometrie.bind(e)) + } + }), (function () { + Bh.error("获取分割几何失败") + })) + } else + a = i[t].indexOf("fileKey="), + e._parseBatchedGeometrie(A[i[t]], i[t].slice(a + 8)), + e._onGeoTaskFinished(), + Bh.debug("load geo from local"); + else { + if (r = e.taskGeometrieManager, + -1 === (a = i[t].indexOf("fileKey="))) + return Bh.error("url is not has fileKey"), { + v: void 0 + }; + r.addTask(i[t].slice(a + 8)), + Bh.debug("load geo from net") + } + }, o = 0; i.length > o; o += 1) { + var r, a, s = t(o); + if ("object" === lc(s)) + return s.v + } + e.taskGeometrieManager.processTasks(e.loadBatchedGeometrie.bind(e)) + }), (function () { + for (var t = e.taskGeometrieManager, i = 0; A.length > i; i += 1) + t.addTask(A[i]); + t.processTasks(e.loadBatchedGeometrie.bind(e)) + })) + } else { + for (var r = this.taskGeometrieManager, a = 0; A.length > a; a += 1) + r.addTask(A[a]); + r.processTasks(e.loadBatchedGeometrie.bind(e)) + } + }, + BC.prototype._loadInstancedGeo = function (A) { + var e = this; + if (vc.getDataFromIndexedDB && !this.offLine) { + for (var t = this.url, i = [], o = 0; A.length > o; o += 1) + i.push(t.mpkUrl(A[o])); + var n = this.model.getStorage(); + n && n.getBatch(i, (function (A) { + for (var t = function (t) { + if (A[i[t]]) + if (!0 === A[i[t]].split) { + var o = A[i[t]].list, + s = new Uint8Array(A[i[t]].length); + n.getBatch(o, (function (A) { + for (var n = 0; o.length > n; n += 1) + A[o[n]] ? s.set(new Uint8Array(A[o[n]]), 4e7 * n) : Bh.error("获取分割几何失败"); + var r = i[t].indexOf("fileKey="); + e._parseInstancedGeometrie(s.buffer, i[t].slice(r + 8)), + e._onGeoTaskFinished(), + Bh.debug("load geo from local") + }), (function () { + Bh.error("获取分割几何失败") + })) + } else + a = i[t].indexOf("fileKey="), + e._parseInstancedGeometrie(A[i[t]], i[t].slice(a + 8)), + e._onGeoTaskFinished(), + Bh.debug("load geo from local"); + else { + if (r = e.taskInstancedGeometrieManager, + -1 === (a = i[t].indexOf("fileKey="))) + return Bh.error("url is not has fileKey"), { + v: void 0 + }; + r.addTask(i[t].slice(a + 8)), + Bh.debug("load geo from net") + } + }, o = 0; i.length > o; o += 1) { + var r, a, s = t(o); + if ("object" === lc(s)) + return s.v + } + e.taskInstancedGeometrieManager.processTasks(e.loadInstancedGeometrie.bind(e)) + }), (function () { + for (var t = e.taskInstancedGeometrieManager, i = 0; A.length > i; i += 1) + t.addTask(A[i]); + t.processTasks(e.loadInstancedGeometrie.bind(e)) + })) + } else { + for (var r = this.taskInstancedGeometrieManager, a = 0; A.length > a; a += 1) + r.addTask(A[a]); + r.processTasks(e.loadInstancedGeometrie.bind(e)) + } + }, + BC.prototype._onGeoTaskFinished = function () { + (this.geoLoadTaskCount += 1, + this.notifyProgress) && (this.progressCallback && this.progressCallback({ + total: this.maxLoadTaskCount + this.maxGeoLoadTaskCount, + loaded: .8 * (this.loadTaskCount + this.geoLoadTaskCount), + modelKey: this.model.modelKey + })); + this.maxGeoLoadTaskCount > this.geoLoadTaskCount || (this.dataLoaded = !0, + Bh.timeEnd("几何数据加载时间"), + this.geoFinishCallback && this.geoFinishCallback()) + }, + BC.prototype.getSceneTaskCount = function (A) { + var e = A.scenes; + return e += A.lines, + e += A.mpks, + vc.BorderLineDelayLoaded || (e += this.getAllBorderlineCount()), + e + }, + BC.prototype._parseKDTree = function (A, e) { + var t = {}; + t = "string" == typeof A ? JSON.parse(A) : A, + this.model.kdTreeNode = this.model.kdTreeNode || []; + var i = this.fileKeyFromModelKey[e] || ""; + if (t) { + var o = new Zu; + o.modelKey = i, + o.init(t), + this.model.kdTreeNode.push(o) + } + }; + var xC = function (A, e) { + tf.call(this, A), + this.defaultManager = new Of(e, A), + this.instancedManager = new Hf(A), + this.loader = new BC(this) + }; + (xC.prototype = Object.create(tf.prototype)).prepare = function (A, e) { + if (this.isLoaded() && !this.isHidden()) { + this.prepareWireframe(this.model, e); + this.model.getMaterialManager(); + this.model.getMaterialManager()._updateTextureMapping(), + !this.model.lightmap || this.model.enableLightmap === vc.EnableLightmap && this.model.lightmapIntensity === vc.LightmapIntensity || (this.model.enableLightmap = vc.EnableLightmap, + this.model.lightmapIntensity = vc.LightmapIntensity, + this.rebuildIndicesforLightmap(), + this.updateNodes()) + } + }, + xC.prototype.settleData = function (A) { + var e = this; + this.addNodeInfoToOctantMap(); + var t = !1, + i = !1; + this.createMeshNodes((function () { + t = !0, + i && (e.loaded = !0, + e.model.getMaterialManager()._updateTextureMapping(), + e.clearCachedData(e.model), + A && A()) + })), + e.model.setLoaded(!0); + this.loader.geoFinishCallback = function () { + i = !0, + t && (e.loaded = !0, + e.model.getMaterialManager()._updateTextureMapping(), + e.clearCachedData(e.model), + A && A()) + }, + this.loader.startLoadSceneAndGeos(this.model.getConfig()) + }, + xC.prototype.addNodeInfoToOctantMap = function () { + var A = this.model.manager, + e = this.model.getEncodedDatabagId(); + this.loader.getDescriptor().traverseNodeInfosByComponent((function (t, i) { + A.addNodeInfoToOctantMap(e, t, i) + })) + }, + xC.prototype.createMeshNodes = function (A) { + var e = this, + t = this.model; + vc.stepLoad && t.setLoaded(!0); + var i = this.loader.getDescriptor(); + this.instancedManager.createMeshNodes(t, i.getInstancedUserIds()), + this.defaultManager.asyncCreateMeshNodes(t, i.getStandardUserIds(), (function () { + t.getMaterialManager()._updateTextureMapping(), + e.loaded = !0, + A && A() + })) + }, + xC.prototype.clearCachedData = function (A) { + this.loader.getDescriptor().destroyReader(), + this.loader.getDescriptor().clearReferencedMeshCache(), + this.defaultManager.clearCachedData(), + this.instancedManager.clearCachedData() + }, + xC.prototype.createBatchedMeshNodes = function (A) { + this.defaultManager.createBatchedMeshNodes(this.model, A) + }, + xC.prototype.createInstancedMeshNodes = function (A) { + this.instancedManager.createInstancedMeshNodes(this.model, A) + }; + var SC = function (A) { + $u.call(this, A) + }; + Object.assign(SC.prototype, $u.prototype); + var wC = function (A) { + Xu.call(this, A), + this.descriptor = new SC(A.model) + }; + (wC.prototype = Object.assign(wC.prototype, Xu.prototype)).loadSceneAndGeos = function (A) { + var e = A.scene, + t = this.model, + i = e.geometries.length || 0, + o = []; + if (this.map = {}, + ap(this.dataVersion, "2.0.0")) + for (var n = 0; i > n; n += 1) + e.geometries[n].fileKey ? o.push(e.geometries[n].fileKey) : t.dispatchEventEx({ + type: Tc.SCENE_NOT_CLOSE, + modelKey: t.modelKey + }); + else + o = e.geometries; + this.maxLoadTaskCount += i, + this._loadGeo(o) + }, + wC.prototype.getSceneTaskCount = function (A) { + var e = A.scenes; + return e += A.lines, + e += A.mpks, + vc.BorderLineDelayLoaded || (e += this.getAllBorderlineCount()), + e + }; + var MC = function (A, e) { + tf.call(this, A), + this.defaultManager = new vC(e, A), + this.instancedManager = new Hf(A), + this.loader = new wC(this) + }; + Object.assign(MC.prototype, tf.prototype), + MC.prototype.prepare = function (A) { + this.isLoaded() && !this.isHidden() && (this.model.getMaterialManager()._updateTextureMapping(), + this.model.clearMeshFromOctantMap(), + this.instancedManager.addAllInstanceNodeToScene(this.model), + this.defaultManager.cullNodes(this.model, A), + this.prepareWireframe(this.model), + this.updateNodes()) + }, + MC.prototype.prepareWireframe = function (A, e) { + A.isActivateWireframe() && this.instancedManager.generateWireframe(A) + }, + MC.prototype.settleData = function (A) { + this.addNodeInfoToOctantMap(), + this.createMeshNodes(A) + }, + MC.prototype.addNodeInfoToOctantMap = function () { + var A = this.model.manager, + e = this.model.getEncodedDatabagId(); + this.model.getModelDescriptor().traverseNodeInfosByComponent((function (t, i) { + A.addNodeInfoToOctantMap(e, t, i) + })) + }, + MC.prototype.createMeshNodes = function (A) { + var e = this.model, + t = this; + this.instancedManager.createMeshNodes(this.model, this.model.getModelDescriptor().getInstancedUserIds()), + this.defaultManager.asyncCreateMeshNodes(e, e.getModelDescriptor().getStandardUserIds(), (function () { + e.getMaterialManager()._updateTextureMapping(), + t.updateNodes(), + e.getModelDescriptor().clearReferencedMeshCache(), + t.loaded = !0, + A && A() + })) + }, + MC.prototype.disposeBufferAfterVbo = function () {}, + MC.prototype.explosion = function (A) { + if (this.isLoaded()) { + var e = this.model.getComponentlist(); + A.componentKey = e, + this.componentsExplosion(A) + } + }, + MC.prototype.closeExplosion = function () { + this.explosion({}) + }, + MC.prototype.componentsExplosion = function (A) { + if (this.isLoaded()) { + var e = A.coefficientX || 1, + t = A.coefficientY || 1, + i = A.coefficientZ || 1, + o = A.offsetX || 0, + n = A.offsetY || 0, + r = A.offsetZ || 0, + a = null; + if (A.center) + a = (new y).fromArray(A.center); + else if (1 !== e || 1 !== t || 1 !== i || 0 !== o || 0 !== n || 0 !== r) + return; + var s = this.model, + l = s.manager, + c = Array.isArray(A.componentKey) ? A.componentKey : [A.componentKey], + h = new y, + d = new aA, + p = new y(0, 0, 0), + g = new y(0, 0, 0), + u = new y, + f = s.getModelMatrix(), + m = new M; + f && a && (m.getInverse(f), + a.applyMatrix4(m)); + for (var C = 0; c.length > C; C += 1) { + var v = c[C], + I = s.getComponentInfo(v); + if (I && I.length > 0) + for (var E = 0, B = I.length; B > E; E += 1) { + var x = I[E], + S = x.mesh; + if (S) { + if (d.copy(x.boundingBox), + d.getCenter(h), + x.userData || (x.userData = {}), + p.set(0, 0, 0), + g.set(0, 0, 0), + 1 !== e || 1 !== t || 1 !== i || x.userData.explosionFactor) { + x.userData.explosionFactor || (x.userData.explosionFactor = new y(1, 1, 1), + x.userData.explosionBaseDifference = h.sub(a).clone()); + var w = x.userData.explosionFactor, + b = x.userData.explosionBaseDifference; + p.set((e - w.x) * b.x, (t - w.y) * b.y, (i - w.z) * b.z), + 1 === e && 1 === t && 1 === i ? (x.userData.explosionFactor = void 0, + x.userData.explosionBaseDifference = void 0) : w.set(e, t, i) + } + if (0 !== o || 0 !== n || 0 !== r || x.userData.explosionOffset) { + x.userData.explosionOffset || (x.userData.explosionOffset = new y(0, 0, 0)); + var U = x.userData.explosionOffset; + g.set(o - U.x, n - U.y, r - U.z), + 0 === o && 0 === n && 0 === r ? x.userData.explosionOffset = void 0 : U.set(o, n, r) + } + if (u.set(p.x + g.x, p.y + g.y, p.z + g.z), + 0 !== u.x || 0 !== u.y || 0 !== u.z) { + x.userData.explosionFactor || x.userData.explosionOffset ? l.explosionList[v] || (l.explosionList[v] = !0) : delete l.explosionList[v], + m.makeTranslation(u.x, u.y, u.z), + x.transformation || (x.transformation = !0, + x.transformationOriginalMatrix = x.matrix.clone(), + x.applyMatrix = new M, + x.transformationOriginalBoundingBox = x.boundingBox.clone()), + x.matrix.premultiply(m), + x.applyMatrix.premultiply(m), + x.boundingBox.copy(x.transformationOriginalBoundingBox).applyMatrix4(x.applyMatrix); + var F = S.matrixAutoUpdate; + S.matrixAutoUpdate = !1, + S.applyMatrix4(m), + S.updateMatrixWorld(!0), + S.matrixAutoUpdate = F; + var K = x.wireframeMeshs; + if (K) + for (var Q = 0, R = K.length; R > Q; Q += 1) { + var T = K[Q]; + F = T.matrixAutoUpdate, + T.matrixAutoUpdate = !1, + T.matrix.copy(S.matrix), + T.updateMatrixWorld(!0), + T.matrixAutoUpdate = F + } + } + } + } + } + } + }, + MC.prototype.closeComponentsExplosion = function (A) { + var e = Array.isArray(A) ? A : [A]; + this.componentsExplosion({ + componentKey: e + }) + }; + var bC = function (A) { + this.model = A, + this.config = null, + this.statistics = { + renderableCount: 0, + renderableTotal: vc.maxObjectNumInPool, + renderableTotalForPool: vc.maxObjectNumInPool, + numOfElements: 0, + numOfTriangles: 0, + memoeryInfo: null + }, + this.transformInfos = { + octreeTransformed: !0, + originalBoundingBox: null, + boundingBox: null, + position: new y, + rotation: new f, + scale: new y(1, 1, 1), + transformMatrix: new M, + originalMatrix: new M + } + }; + bC.prototype.destroy = function () { + this.model = null, + this.config = null, + this.statistics = null, + this.transformInfos = null + }, + bC.prototype.load = function (A) { + var e = this, + t = this.model, + i = t.dataUrl, + o = function (o) { + var n = {}; + if ("string" == typeof o) + try { + n = JSON.parse(o) + } catch (A) { + return t.setEmptyScene(!0), + void t.dispatchEventEx({ + type: Rc.ON_LOAD_INVALID_SCENE, + modelKey: t.modelKey + }) + } + else + n = o; + if (n && "SUCCESS" === n.code) { + if (vc.offLine) + e.model.getStorage().put(i.projectUrl(), n, e.model.modelKey, (function () {}), (function () {})); + if (-1 === Number(n.data.status)) + return void t.dispatchEventEx({ + type: Tc.PARSEFAILE, + modelKey: t.modelKey + }); + if (3 > Number(n.data.status)) + return void t.dispatchEventEx({ + type: Tc.PARSING, + modelKey: t.modelKey + }); + if (n.data.type === Zc.DWG) + return t.dispatchEventEx({ + type: Tc.IS2D, + modelKey: t.modelKey + }), + void Bh.error("模型 ", t.modelKey, " 是图纸文件,请使用EIMDRAWINGS库加载"); + !n.data.profiles || n.data.children && n.data.children.length > 1 ? (e.dataVersion = "2.0.0", + i.apiVersion = "2.0.0", + e.model.dataVersion = e.dataVersion) : (e.dataVersion = n.data.profiles.geo || "1.0.0", + i.apiVersion = n.data.profiles.api, + e.model.dataVersion = e.dataVersion), + e._parse(n.data), + t.dispatchEventEx({ + type: Rc.ON_LOAD_CONFIG_FINISH, + modelKey: t.modelKey + }), + A && A() + } else + Bh.log(t.modelKey, "config load error! ", n.message), + t.dispatchEventEx({ + type: Rc.ON_LOAD_ERROR, + modelKey: t.modelKey, + code: n.code, + message: n.message + }), + t.manager.unload(t.modelKey) + }; + if (vc.offLine) { + var n = this.model.getStorage(); + n && n.getBatch([i.projectUrl()], (function (A) { + A[i.projectUrl()] ? o(A[i.projectUrl()]) : _d({ + type: "GET", + url: i.projectUrl(), + headers: { + Authorization: t.accessToken + }, + success: o, + error: function (A) { + t.dispatchEventEx({ + type: Rc.ON_NETWORK_ERROR, + modelKey: t.modelKey, + data: A + }) + } + }) + }), (function () {})) + } else + _d({ + type: "GET", + url: i.projectUrl(), + headers: { + Authorization: t.accessToken + }, + success: o, + error: function (A, e) { + switch (A) { + case 401: + t.dispatchEventEx({ + type: Rc.ACCOUNT_NO_EXIST, + modelKey: t.modelKey, + data: e + }); + break; + case 403: + t.dispatchEventEx({ + type: Rc.NO_PERMISSION, + modelKey: t.modelKey, + data: e + }); + break; + default: + t.dispatchEventEx({ + type: Rc.ON_NETWORK_ERROR, + modelKey: t.modelKey, + data: A + }) + } + } + }) + }, + bC.prototype._parse = function (A) { + this.config = A, + A.lengthUnit && (this.model.originalLengthUnit = A.lengthUnit), + vc.AutoMergeComponent && A.componentCount > vc.AutoMergeComponentCount && (vc.MergeComponent = !0), + this._toStatistics(A), + this._setTransformInfos(A), + this._chooseRendering(A), + this._setHandler(A) + }, + bC.prototype._getDataProvider = function (A) { + if (vc.DataProvider === Wc.MERGED && void 0 !== A.bmpks && A.bmpks > 0) + return Bh.debug("data from: merged"), + Wc.MERGED; + if (vc.LoadComponentOnDemand && A.scene && A.scene.map) { + if (vc.DataProvider === Wc.LAYER_SCENE) + return A.layers > 1 ? (Bh.debug("data from: layer scene"), + Wc.LAYER_SCENE) : (Bh.debug("data from: layer"), + Wc.LAYER); + if (vc.DataProvider === Wc.LAYER) + return Bh.debug("data from: layer"), + Wc.LAYER + } + if (vc.DataProvider === Wc.AUTO) { + if (vc.LoadComponentOnDemand && A.scene && A.scene.map) + return np(this.dataVersion, "2.0.0") && (vc.MergeComponent = !0), + Bh.debug("data from: layer"), + Wc.LAYER; + if (!vc.loadBatch && A.scene.geometries && A.scene.geometries.length > 0) + return rp(this.dataVersion, "2.0.0") && (vc.MergeComponent = !0), + Wc.DEFAULT; + if (A.scene.batchedGeometries && A.scene.batchedGeometries.length > 0 || A.scene.instancedGeometries && A.scene.instancedGeometries.length > 0) + return vc.MergeComponent = !0, + Wc.MERGED; + if (vc.MergeComponent && void 0 !== A.bmpks && A.bmpks > 0) + return Bh.debug("data from: merged"), + Wc.MERGED + } + return Bh.debug("data from: default"), + Wc.DEFAULT + }, + bC.prototype._chooseRendering = function (A) { + this.model.manager.chooseRendering(this.statistics.memoeryInfo) + }, + bC.prototype._setHandler = function (A) { + var e = this._getDataProvider(A), + t = null, + i = this.model; + if (Array.isArray(A.scene)) { + for (var o = 0, n = A.children.length; n > o; o += 1) { + var r = A.scene[o]; + r && (i.subModel[A.children[o]] = (new M).fromArray(r.matrix || [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1])) + } + t = new xC(i, !1), + i.merged = !0, + vc.MergeComponent = !0 + } else if (i.hasAnimation && vc.EnableAnimation) + t = new MC(i); + else if (vc.MergeComponent) { + switch (e) { + case Wc.LAYER: + vc.HasLayerData = !0, + vc.LoadGeoOnDemand = !0, + (t = new dC(i, !1)).layerProvider.cachedLayerData = A.scene.map; + break; + case Wc.LAYER_SCENE: + vc.HasLayerData = !0, + vc.LoadGeoOnDemand = !0; + break; + case Wc.MERGED: + t = new oC(i, !1); + break; + default: + t = new Yf(i, !1) + } + i.merged = !0 + } else if (vc.OrganizeNodesByCameraView) + switch (e) { + case Wc.LAYER: + case Wc.LAYER_SCENE: + vc.HasLayerData = !0, + vc.LoadGeoOnDemand = !0 + } + else + switch (e) { + case Wc.LAYER: + vc.HasLayerData = !0, + vc.LoadGeoOnDemand = !0, + (t = new IC(i)).layerProvider.cachedLayerData = A.scene.map; + break; + case Wc.LAYER_SCENE: + vc.HasLayerData = !0, + vc.LoadGeoOnDemand = !0; + break; + case Wc.MERGED: + break; + default: + t = new MC(i) + } + i._handler = t + }, + bC.prototype._setTransformInfos = function (A) { + if (this.model.hasAnimation = A.hasAnimation, + this.transformInfos.octreeTransformed = !1, + this.transformInfos.boundingBox && this.transformInfos.boundingBox.isBox3 || (this.transformInfos.boundingBox = new aA), + this.transformInfos.boundingBox.expandByPoint(new y(A.minBoundary.x, A.minBoundary.y, A.minBoundary.z)), + this.transformInfos.boundingBox.expandByPoint(new y(A.maxBoundary.x, A.maxBoundary.y, A.maxBoundary.z)), + this.transformInfos.transformMatrix.compose(this.transformInfos.position, this.transformInfos.rotation, this.transformInfos.scale), + this.transformInfos.transformMatrix.fromArray(A.matrix || [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]), + A.transform && Array.isArray(A.transform)) { + var e = (new M).fromArray(A.transform || [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]); + this.transformInfos.transformMatrix.multiplyMatrices(this.transformInfos.transformMatrix, e) + } + this.transformInfos.originalMatrix.copy(this.transformInfos.transformMatrix), + this.model.setModelMatrix(this.transformInfos.transformMatrix), + this.model.manager.updateScene() + }, + bC.prototype._toStatistics = function (A) { + A.count = {}, + A.count.texture_pixels && A.count.texture_pixels > vc.MaxTexturePixels && (vc.EnableTextureLoading = !1), + void 0 !== A.count && (void 0 !== A.count.mesh_face && (this.statistics.numOfTriangles += A.count.mesh_face), + this.statistics.renderableTotal = 0, + this.statistics.renderableTotalForPool = 0, + void 0 !== A.count.geom_box && void 0 !== A.count.geom_pipe && void 0 !== A.count.geom_tube && void 0 !== A.count.mesh ? (this.statistics.renderableTotal += A.count.geom_box, + this.statistics.renderableTotal += A.count.geom_pipe, + this.statistics.renderableTotal += A.count.geom_tube, + this.statistics.renderableTotal += A.count.mesh, + this.statistics.renderableTotalForPool += 6 * A.count.geom_box, + this.statistics.renderableTotalForPool += 3 * A.count.geom_pipe, + this.statistics.renderableTotalForPool += A.count.geom_tube, + this.statistics.renderableTotalForPool += A.count.mesh, + this.statistics.numOfTriangles += 12 * A.count.geom_box, + this.statistics.numOfTriangles += 32 * A.count.geom_pipe, + this.statistics.numOfTriangles += 32 * A.count.geom_tube) : void 0 !== A.count.geom && void 0 !== A.count.mesh && (this.statistics.renderableTotal += A.count.geom, + this.statistics.renderableTotal += A.count.mesh, + this.statistics.numOfTriangles += 12 * A.count.geom, + this.statistics.numOfElements = this.statistics.renderableTotal, + this.statistics.renderableTotalForPool = this.statistics.renderableTotal), + void 0 !== A.count.item && (this.statistics.numOfElements = A.count.item)), + this.statistics.memoeryInfo = this._computeApproximateMemoerySize(A) + }, + bC.prototype._computeApproximateMemoerySize = function (A) { + var e = 0, + t = 0, + i = A.count.mesh_vertex || 0, + o = A.count.mesh_face || 0, + n = A.count.geom_box || 0, + r = A.count.geom_pipe || 0, + a = A.count.texture_pixels || 0; + t += 8 * i, + t += 3 * o, + t += 0, + t += 0, + e += 6 * i, + e += 3 * o, + e += 0, + e += 0; + var s = 0; + if (s += o, + n > 0 && (s += 12 * n), + r > 0 && (s += 124 * r), + s += 0, + vc.Instance) { + n > 0 && (t += 192, + t += 36, + t += 24 * n, + e += 144, + e += 36, + e += 18 * n), + r > 0 && (t += 1040, + t += 372, + t += 24 * r, + e += 780, + e += 372, + e += 18 * r) + } else + n > 0 && (t += 24 * n * 8, + t += 12 * n * 3, + e += 24 * n * 6, + e += 12 * n * 3), + r > 0 && (t += 130 * r * 8, + t += 124 * r * 3, + e += 130 * r * 6, + e += 124 * r * 3); + return vc.EnableTextureLoading && (t += 4 * a, + e += 4 * a), + t *= 4, + e *= 4, + t *= 1 / 1048576, + e *= 1 / 1048576, { + maxMemoerySize: t = Math.ceil(t), + minMemoerySize: e = Math.ceil(e), + triangleNumber: s, + instanceEnabled: vc.Instance + } + }, + bC.prototype.getMemoeryInfo = function () { + return this.statistics.memoeryInfo + }, + bC.prototype.getStatistics = function () { + return this.statistics + }, + bC.prototype.getConfig = function () { + return this.config + }, + bC.prototype.getTransforms = function () { + return this.transformInfos + }, + bC.prototype.setRenderableCount = function (A) { + this.statistics.renderableCount = A + }; + var UC = function (A) { + ef.call(this, A), + this.descriptor = new Af(A.model), + this.fileKeyFromModelKey = {} + }; + (UC.prototype = Object.assign(UC.prototype, ef.prototype)).loadData = function () { + var A = this, + e = this.model; + this.modelDataVersion = e.configLoader.modelDataVersion; + e.getConfig(); + var t = e.configLoader.scenes, + i = [], + o = [], + n = [], + r = [], + a = [], + s = [], + l = [], + c = []; + A.maxLoadTaskCount = 0, + A.maxLoadTextureCount = 0; + for (var h = function (h) { + var d = t[h].scene, + F = t[h].dataVersion, + K = t[h].modelKey; + if (!(d && d.components && d.geometries && d.materials && d.textures)) + return e.setEmptyScene(!0), + Bh.error("scene is null,modelKey is ", K), + e.dispatchEventEx({ + type: Rc.ON_LOAD_EMPTY_SCENE, + modelKey: K + }), { + v: void 0 + }; + if (p = d.components.length || 0, + g = d.geometries.length || 0, + u = d.materials.length || 0, + f = d.textures.length || 0, + m = [], + C = [], + y = [], + v = [], + I = [], + E = [], + B = d.textures, + x = [], + op(F, "2.0.0")) + m = d.components, + C = d.geometries, + y = d.materials; + else { + for (S = 0; p > S; S += 1) + d.components[S].fileKey ? m.push(d.components[S].fileKey) : e.dispatchEventEx({ + type: Tc.SCENE_NOT_CLOSE, + modelKey: K + }); + for (w = 0; g > w; w += 1) + d.geometries[w].fileKey ? C.push(d.geometries[w].fileKey) : e.dispatchEventEx({ + type: Tc.SCENE_NOT_CLOSE, + modelKey: K + }); + for (M = 0; u > M; M += 1) + d.materials[M].fileKey ? y.push(d.materials[M].fileKey) : e.dispatchEventEx({ + type: Tc.SCENE_NOT_CLOSE, + modelKey: K + }) + } + if (d.trees.length > 0) + for (b = 0; d.trees.length > b; b += 1) + "partition" === (U = d.trees[b]).type && x.push(U.fileKey); + A.maxLoadTaskCount += p, + A.maxLoadTaskCount += g, + A.maxLoadTaskCount += u, + vc.EnableTextureLoading && (A.maxLoadTextureCount += f), + A.maxLoadTaskCount += 0, + A.maxLoadTaskCount += 0, + A.maxLoadTaskCount += 0, + A.maxLoadTaskCount += x.length, + m.forEach((function (e) { + A.fileKeyFromModelKey[e] = K + })), + C.forEach((function (e) { + A.fileKeyFromModelKey[e] = K + })), + y.forEach((function (e) { + A.fileKeyFromModelKey[e] = K + })), + v.forEach((function (e) { + A.fileKeyFromModelKey[e] = K + })), + I.forEach((function (e) { + A.fileKeyFromModelKey[e] = K + })), + E.forEach((function (e) { + A.fileKeyFromModelKey[e] = K + })), + B.forEach((function (e) { + A.fileKeyFromModelKey[e] = K + })), + x.forEach((function (e) { + A.fileKeyFromModelKey[e] = K + })), + i = i.concat(m), + o = o.concat(C), + n = n.concat(y), + r = r.concat(v), + a = a.concat(I), + s = s.concat(E), + l = l.concat(B), + c = c.concat(x) + }, d = 0; t.length > d; d += 1) { + var p, g, u, f, m, C, y, v, I, E, B, x, S, w, M, b, U, F = h(d); + if ("object" === lc(F)) + return F.v + } + if (A.progress.total += A.maxLoadTaskCount, + 1 > A.maxLoadTaskCount) + return Bh.info("Nothing to load ", e.modelKey), + void e.dispatchEventEx({ + type: Tc.SCENE_NOTHING_TO_LOAD, + modelKey: e.modelKey + }); + Bh.time("数据加载时间"), + A._loadComponent(i), + A._loadMaterial(n), + vc.EnableTextureLoading && A.maxLoadTextureCount.length > 0 ? A._loadTextures(l) : A._onLoadTexture(), + A._loadTextures(l), + A._loadKDTree(c), + A._loadClips(a), + A._loadBones(r), + A._loadNodes(s), + A.offLine && A.loadAttribute(), + A._loadGeo(o) + }, + UC.prototype.loadSceneAndGeos = function (A) { + this._loadGeo(A) + }, + UC.prototype._loadGeometrie = function (A) { + var e = this; + if (vc.getDataFromIndexedDB && !this.offLine) { + var t = this.url, + i = [], + o = []; + i.push(o); + for (var n = 0, r = 0; A.length > r; r += 1) + 50 > n || (i.push(o = []), + n = 0), + n += 1, + o.push(t.mpkUrl(A[r])); + var a = this.model.getStorage(); + if (a) + for (var s = function (t, o) { + var n = i[o]; + a.getBatch(n, (function (A) { + for (var t = function (t) { + if (-1 === (o = n[t].indexOf("fileKey="))) + return Bh.error("url is not has fileKey"), { + v: void 0 + }; + var i = n[t].slice(o + 8); + if (A[n[t]]) + if (!0 === A[n[t]].split) { + var s = A[n[t]].list, + l = new Uint8Array(A[n[t]].length); + a.getBatch(s, (function (A) { + for (var t = 0; s.length > t; t += 1) + A[s[t]] ? l.set(new Uint8Array(A[s[t]]), 4e7 * t) : Bh.error("获取分割几何失败"); + e._parseGeometrie(l.buffer, i), + Bh.debug("load geo from local"), + e._onTaskFinished() + }), (function () { + Bh.error("获取分割几何失败") + })) + } else + e._parseGeometrie(A[n[t]], i), + Bh.debug("load geo from local"), + e._onTaskFinished(); + else { + if (r = e.taskGeometrieManager, + -1 === n[t].indexOf("fileKey=")) + return Bh.error("url is not has fileKey"), { + v: void 0 + }; + r.addTask(i), + Bh.debug("load geo from net") + } + }, i = 0; n.length > i; i += 1) { + var o, r, s = t(i); + if ("object" === lc(s)) + return s.v + } + e.taskGeometrieManager.processTasks(e.loadGeometrie.bind(e)) + }), (function () { + for (var t = e.taskGeometrieManager, i = 0; A.length > i; i += 1) + t.addTask(A[i]); + t.processTasks(e.loadGeometrie.bind(e)) + })) + }, l = 0, c = i.length; c > l; l += 1) + s(0, l) + } else { + for (var h = this.taskGeometrieManager, d = 0; A.length > d; d += 1) + h.addTask(A[d]); + h.processTasks(e.loadGeometrie.bind(e)) + } + }, + UC.prototype._loadKDTree = function (A) { + var e = this; + if (vc.getDataFromIndexedDB && !this.offLine) { + var t = this.url, + i = [], + o = []; + i.push(o); + for (var n = 0, r = 0; A.length > r; r += 1) + 50 > n || (i.push(o = []), + n = 0), + n += 1, + o.push(t.mpkUrl(A[r])); + var a = this.model.getStorage(); + if (a) + for (var s = function (t, o) { + var n = i[o]; + a.getBatch(n, (function (A) { + for (var t = 0; n.length > t; t += 1) { + var i = n[t].indexOf("fileKey="); + if (-1 === i) + return void Bh.error("url is not has fileKey"); + var o = n[t].slice(i + 8); + if (A[n[t]]) + e._parseKDTree(A[n[t]], o), + Bh.debug("load kdtree from local"), + e._onTaskFinished(); + else { + var r = e.taskComponentManager; + if (-1 === n[t].indexOf("fileKey=")) + return void Bh.error("url is not has fileKey"); + r.addTask(o), + r.processTasks(e.loadKDTree.bind(e)), + Bh.debug("load kdtree from net") + } + } + }), (function () { + for (var t = e.taskComponentManager, i = 0; A.length > i; i += 1) + t.addTask(A[i]); + t.processTasks(e.loadKDTree.bind(e)) + })) + }, l = 0, c = i.length; c > l; l += 1) + s(0, l) + } else { + for (var h = this.taskComponentManager, d = 0; A.length > d; d += 1) + h.addTask(A[d]); + h.processTasks(e.loadKDTree.bind(e)) + } + }, + UC.prototype._loadBones = function (A) { + var e = this; + if (vc.getDataFromIndexedDB && !this.offLine) { + for (var t = this.url, i = [], o = 0; A.length > o; o += 1) + i.push(t.bonesUrl(A[o])); + var n = this.model.getStorage(); + n && n.getBatch(i, (function (A) { + for (var t = 0; i.length > t; t += 1) { + var o = i[t].indexOf("fileKey="); + if (-1 === o) + return void Bh.error("url is not has fileKey"); + var n = i[t].slice(o + 8); + if (A[i[t]]) + e._parseBones(A[i[t]], n), + Bh.debug("load Bones from local"), + e._onTaskFinished(); + else { + if (-1 === i[t].indexOf("fileKey=")) + return void Bh.error("url is not has fileKey"); + e.loadBones(i[t].slice(o + 8), (function () {})), + Bh.debug("load Bones from net") + } + } + }), (function () { + for (var t = 0; A.length > t; t += 1) + e.loadBones(A[t], (function () {})) + })) + } else { + for (var r = this.taskComponentManager, a = 0; A.length > a; a += 1) + r.addTask(A[a]); + r.processTasks(e.loadBones.bind(e)) + } + }, + UC.prototype._loadClips = function (A) { + var e = this; + if (vc.getDataFromIndexedDB && !this.offLine) { + for (var t = this.url, i = [], o = 0; A.length > o; o += 1) + i.push(t.clipsUrl(A[o])); + var n = this.model.getStorage(); + n && n.getBatch(i, (function (A) { + for (var t = 0; i.length > t; t += 1) { + var o = i[t].indexOf("fileKey="); + if (-1 === o) + return void Bh.error("url is not has fileKey"); + var n = i[t].slice(o + 8); + if (A[i[t]]) + e._parseClips(A[i[t]], n), + Bh.debug("load Clips from local"), + e._onTaskFinished(); + else { + if (-1 === i[t].indexOf("fileKey=")) + return void Bh.error("url is not has fileKey"); + e.loadClips(i[t].slice(o + 8), (function () {})), + Bh.debug("load Clips from net") + } + } + }), (function () { + for (var t = 0; A.length > t; t += 1) + e.loadClips(A[t], (function () {})) + })) + } else { + for (var r = this.taskComponentManager, a = 0; A.length > a; a += 1) + r.addTask(A[a]); + r.processTasks(e.loadClips.bind(e)) + } + }, + UC.prototype._loadNodes = function (A) { + var e = this; + if (vc.getDataFromIndexedDB && !this.offLine) { + for (var t = this.url, i = [], o = 0; A.length > o; o += 1) + i.push(t.nodesUrl(A[o])); + var n = this.model.getStorage(); + n && n.getBatch(i, (function (A) { + for (var t = 0; i.length > t; t += 1) { + var o = i[t].indexOf("fileKey="); + if (-1 === o) + return void Bh.error("url is not has fileKey"); + var n = i[t].slice(o + 8); + if (A[i[t]]) + e._parseNodes(A[i[t]], n), + Bh.debug("load Nodes from local"), + e._onTaskFinished(); + else { + if (-1 === i[t].indexOf("fileKey=")) + return void Bh.error("url is not has fileKey"); + e.loadNodes(i[t].slice(o + 8), (function () {})), + Bh.debug("load Nodes from net") + } + } + }), (function () { + for (var t = 0; A.length > t; t += 1) + e.loadNodes(A[t], (function () {})) + })) + } else { + for (var r = this.taskComponentManager, a = 0; A.length > a; a += 1) + r.addTask(A[a]); + r.processTasks(e.loadNodes.bind(e)) + } + }, + UC.prototype._loadComponent = function (A) { + var e = this; + if (vc.getDataFromIndexedDB && !this.offLine) { + var t = this.url, + i = [], + o = []; + i.push(o); + for (var n = 0, r = 0; A.length > r; r += 1) + 50 > n || (i.push(o = []), + n = 0), + n += 1, + o.push(t.mpkUrl(A[r])); + var a = this.model.getStorage(); + if (a) + for (var s = function (t, o) { + var n = i[o]; + a.getBatch(n, (function (A) { + for (var t = 0; n.length > t; t += 1) { + var i = n[t].indexOf("fileKey="); + if (-1 === i) + return void Bh.error("url is not has fileKey"); + var o = n[t].slice(i + 8); + if (A[n[t]]) + e._parseComponent(A[n[t]], o), + Bh.debug("load com from local"), + e._onTaskFinished(); + else { + var r = e.taskComponentManager; + if (-1 === n[t].indexOf("fileKey=")) + return void Bh.error("url is not has fileKey"); + r.addTask(o), + r.processTasks(e.loadComponent.bind(e)), + Bh.debug("load com from net") + } + } + }), (function () { + for (var t = e.taskComponentManager, i = 0; A.length > i; i += 1) + t.addTask(A[i]); + t.processTasks(e.loadComponent.bind(e)) + })) + }, l = 0, c = i.length; c > l; l += 1) + s(0, l) + } else { + for (var h = this.taskComponentManager, d = 0; A.length > d; d += 1) + h.addTask(A[d]); + h.processTasks(e.loadComponent.bind(e)) + } + }, + UC.prototype._loadMaterial = function (A) { + var e = this; + if (vc.getDataFromIndexedDB && !this.offLine) { + for (var t = this.url, i = [], o = 0; A.length > o; o += 1) + i.push(t.mpkUrl(A[o])); + var n = this.model.getStorage(); + n && n.getBatch(i, (function (A) { + for (var t = 0; i.length > t; t += 1) { + var o = i[t].indexOf("fileKey="); + if (-1 === o) + return void Bh.error("url is not has fileKey"); + var n = i[t].slice(o + 8); + if (A[i[t]]) + e._parseMaterial(A[i[t]], n), + Bh.debug("load mat from local"), + e._onTaskFinished(); + else { + var r = e.taskMaterialManager; + if (-1 === i[t].indexOf("fileKey=")) + return void Bh.error("url is not has fileKey"); + r.addTask(n), + r.processTasks(e.loadMaterial.bind(e)), + Bh.debug("load mat from net") + } + } + }), (function () { + for (var t = e.taskMaterialManager, i = 0; A.length > i; i += 1) + t.addTask(A[i]); + t.processTasks(e.loadMaterial.bind(e)) + })) + } else { + for (var r = this.taskMaterialManager, a = 0; A.length > a; a += 1) + r.addTask(A[a]); + r.processTasks(e.loadMaterial.bind(e)) + } + }, + UC.prototype._loadTextures = function (A) { + var e = this.model.materialManager.textures, + t = this; + if (vc.getDataFromIndexedDB && !this.offLine) { + for (var i = this.url, o = [], n = 0; A.length > n; n += 1) + o.push(i.mpkUrl(A[n])); + var r = this.model.getStorage(); + r && r.getBatch(o, (function (A) { + for (var i = 0; o.length > i; i += 1) + if (A[o[i]]) { + var n = o[i].indexOf("fileKey="); + if (-1 === n) + return void Bh.error("url is not has fileKey"); + var r = o[i].slice(n + 8), + a = new d; + Bh.debug("load tex from local"), + e[r] = a; + var s = document.createElement("img"); + a.wrapS = a.wrapT = 1e3, + s.onload = function (e) { + "string" != typeof A[o[i]] && window.URL.revokeObjectURL(s.src), + t.model.textureNeedsUpdate = !0, + t._onLoadTexture() + }, + s.onerror = function (A) { + t.model.dispatchEventEx({ + type: Tc.LOAD_TEXTURE_ERROR + }) + }, + s.src = "string" == typeof A[o[i]] ? A[o[i]] : window.URL.createObjectURL(A[o[i]]), + a.image = s, + a.needsUpdate = !0 + } else { + var l = t.taskTexturesManager, + c = o[i].indexOf("fileKey="); + if (-1 === c) + return void Bh.error("url is not has fileKey"); + l.addTask(o[i].slice(c + 8)), + l.processTasks(t.loadTextures.bind(t)), + Bh.debug("load tex from net") + } + }), (function () { + for (var e = t.taskTexturesManager, i = 0; A.length > i; i += 1) + e.addTask(A[i]); + e.processTasks(t.loadTextures.bind(t)) + })) + } else { + for (var a = this.taskTexturesManager, s = 0; A.length > s; s += 1) + a.addTask(A[s]); + a.processTasks(t.loadTextures.bind(t)) + } + }, + UC.prototype._parseGeometrie = function (A, e) { + var t = this.fileKeyFromModelKey[e] || "", + i = new ku.GeometryReader(A, this.modelDataVersion[t]), + o = this.descriptor; + if (o) { + for (var n = i.geoCount, r = 0; n > r; r += 1) { + var a = i.geomMap[r]; + void 0 !== a.position && void 0 !== a.index && void 0 !== a.normal ? o.cacheReferencedMeshBufferData(t + a.geoId, a) : Bh.error("Error Geometry!") + } + i = null + } + }, + UC.prototype._parseMaterial = function (A, e) { + var t = this.descriptor; + if (t) { + var i = new Du(A, this.modelDataVersion[this.fileKeyFromModelKey[e] || ""]); + if (Array.isArray(i.materialMap)) { + var o = i.materialCount; + if (0 > o) + return; + for (var n = 0; o > n; n += 1) { + var r = i.materialMap[n]; + t.cacheReferencedMeshMaterialData(r.matId, r) + } + } else + for (var a in i.materialMap) + t.cacheReferencedMeshMaterialData(a, i.materialMap[a]); + i = null + } + }, + UC.prototype._parseComponent = function (A, e) { + if (A) { + var t = new Uu(A), + i = t.compArr.length, + o = this.descriptor; + if (o) { + for (var n = this.fileKeyFromModelKey[e] || "", r = 0; i > r; r += 1) { + var a = t.compArr[r]; - + 1 !== a.geoId && (a.geoId = n + a.geoId, + -1 !== a.matId && (a.matId = n + a.matId), + this.model.submodel[n] = this.model.submodel[n] || [], + this.model.submodel[n].push(a.key)), + o.cacheReferencedMeshComponentData(a.key, a) + } + t = null + } + } else + Bh.error("没有数据") + }, + UC.prototype._parseKDTree = function (A, e) { + var t = {}; + if (t = "string" == typeof A ? JSON.parse(A) : A, + this.model.kdTreeNode = this.model.kdTreeNode || [], + t) { + var i = new Zu; + i.init(t), + this.model.kdTreeNode.push(i) + } + }, + UC.prototype._parseNodes = function (A, e) { + var t = this.descriptor; + if (t) { + var i = {}; + i = "string" == typeof A ? JSON.parse(A) : A, + Bh.debug("nodes", i), + t.cacheReferencedMeshNodesData(i) + } + }, + UC.prototype._parseClips = function (A, e) { + var t = this.descriptor; + if (t) { + var i = {}; + i = "string" == typeof A ? JSON.parse(A) : A, + Bh.debug("clips", i), + t.cacheReferencedMeshClipsData(i) + } + }, + UC.prototype._parseBones = function (A, e) { + var t = new ku.BoneReader(A), + i = this.descriptor; + if (i) { + for (var o = t.boneCount, n = 0; o > n; n += 1) { + var r = t.boneMap[n]; + Bh.debug("bones", r), + i.cacheReferencedMeshBoneBufferData(r.geoId, r) + } + t = null + } + }, + UC.prototype._loadComponent = function (A) { + var e = this; + if (vc.getDataFromIndexedDB && !this.offLine) { + var t = this.url, + i = [], + o = []; + i.push(o); + for (var n = 0, r = 0; A.length > r; r += 1) + 50 > n || (i.push(o = []), + n = 0), + n += 1, + o.push(t.mpkUrl(A[r])); + var a = this.model.getStorage(); + if (a) + for (var s = function (t, o) { + var n = i[o]; + a.getBatch(n, (function (A) { + for (var t = 0; n.length > t; t += 1) { + var i = n[t].indexOf("fileKey="); + if (-1 === i) + return void Bh.error("url is not has fileKey"); + var o = n[t].slice(i + 8); + if (A[n[t]]) + e._parseComponent(A[n[t]], o), + Bh.debug("load com from local"), + e._onTaskFinished(); + else { + var r = e.taskComponentManager; + if (-1 === n[t].indexOf("fileKey=")) + return void Bh.error("url is not has fileKey"); + r.addTask(o), + r.processTasks(e.loadComponent.bind(e)), + Bh.debug("load com from net") + } + } + }), (function () { + for (var t = e.taskComponentManager, i = 0; A.length > i; i += 1) + t.addTask(A[i]); + t.processTasks(e.loadComponent.bind(e)) + })) + }, l = 0, c = i.length; c > l; l += 1) + s(0, l) + } else { + for (var h = this.taskComponentManager, d = 0; A.length > d; d += 1) + h.addTask(A[d]); + h.processTasks(e.loadComponent.bind(e)) + } + }, + UC.prototype.loadGeometrie = function (A, e) { + var t = this, + i = this.loader, + o = this.url, + n = this.model, + r = vc.GeoWorkerUrl; + vc.UseGeoWorker ? (i.setResponseType("arraybuffer"), + i.load(o.mpkUrl(A), (function (A) { + var i = new Worker(r); + i.onmessage = function (A) { + var i = A.data; + for (var o in i) + i.hasOwnProperty(o); + e(), + t._onTaskFinished() + }, + i.postMessage({ + msg: A + }) + }))) : (i.setResponseType("arraybuffer"), + i.setCacheViable(!this.offLine), + i.load(o.mpkUrl(A), (function (i) { + t._parseGeometrie(i, A, A), + Bh.debug("geo load from online"), + e(), + t._onTaskFinished() + }), void 0, (function (A) { + n.dispatchEventEx({ + type: Tc.LOAD_GEOMETRY_ERROR, + modelKey: n.modelKey + }) + }))) + }, + UC.prototype.loadMaterial = function (A, e) { + var t = this, + i = this.loader, + o = this.url, + n = this.model, + r = vc.GeoWorkerUrl; + vc.UseGeoWorker ? (i.setResponseType("arraybuffer"), + i.load(o.mpkUrl(A), (function (A) { + var i = new Worker(r); + i.onmessage = function (A) { + var i = A.data; + for (var o in i) + i.hasOwnProperty(o); + e(), + t._onTaskFinished() + }, + i.postMessage({ + msg: A + }) + }))) : (i.setResponseType(t.modelDataVersion[t.fileKeyFromModelKey[A] || ""] > 1 ? "json" : "arraybuffer"), + i.setCacheViable(!this.offLine), + i.load(o.mpkUrl(A), (function (i) { + t._parseMaterial(i, A), + Bh.debug("met load from online"), + e(), + t._onTaskFinished() + }), void 0, (function (A) { + n.dispatchEventEx({ + type: Tc.LOAD_MATERIAL_ERROR, + modelKey: n.modelKey + }) + }))) + }, + UC.prototype.loadTextures = function (A, e) { + var t = this.model.materialManager.textures, + i = this, + o = this.Textureloader, + n = this.url, + r = this.model, + a = vc.GeoWorkerUrl; + vc.UseGeoWorker ? o.load(n.mpkUrl(A), (function (A) { + var t = new Worker(a); + t.onmessage = function (A) { + var t = A.data; + for (var o in t) + t.hasOwnProperty(o); + e(), + i._onTaskFinished() + }, + t.postMessage({ + msg: A + }) + })) : (o.setResponseType("blob"), + o.setMimeType("text/plain"), + o.setCacheViable(!this.offLine), + o.load(n.textureUrl(A), (function (o) { + Bh.debug("tex load from online"); + var n = new d; + t[A] = n, + n.wrapS = n.wrapT = 1e3; + var a = document.createElement("img"); + a.onload = function (A) { + "string" != typeof o && window.URL.revokeObjectURL(a.src), + e(), + i.model.textureNeedsUpdate = !0, + i._onLoadTexture() + }, + a.onerror = function (A) { + r.dispatchEventEx({ + type: Tc.LOAD_TEXTURE_ERROR, + modelKey: r.modelKey + }) + }, + a.src = "string" == typeof o ? o : window.URL.createObjectURL(o), + n.image = a, + n.needsUpdate = !0 + }), void 0, (function (A) { + r.dispatchEventEx({ + type: Tc.LOAD_TEXTURE_ERROR, + modelKey: r.modelKey + }) + }))) + }, + UC.prototype.loadComponent = function (A, e) { + var t = this, + i = this.jsonLoader, + o = this.model, + n = this.url, + r = vc.GeoWorkerUrl; + vc.UseGeoWorker ? (i.setResponseType("json"), + i.load(n.mpkUrl(A), (function (A) { + var i = new Worker(r); + i.onmessage = function (A) { + var i = A.data; + for (var o in i) + i.hasOwnProperty(o); + e(), + t._onTaskFinished() + }, + i.postMessage({ + msg: A + }) + }), (function (A) {}))) : (i.setResponseType("json"), + i.setCacheViable(!this.offLine), + i.load(n.mpkUrl(A), (function (i) { + t._parseComponent(i, A), + Bh.debug("component load from online"), + e(), + t._onTaskFinished() + }), void 0, (function (A) { + o.dispatchEventEx({ + type: Tc.LOAD_COMPONENT_ERROR, + modelKey: o.modelKey + }) + }))) + }, + UC.prototype.loadKDTree = function (A, e) { + var t = this, + i = this.loader, + o = this.model, + n = this.url, + r = vc.GeoWorkerUrl; + vc.UseGeoWorker ? (i.setResponseType("json"), + i.load(n.mpkUrl(A), (function (A) { + var i = new Worker(r); + i.onmessage = function (A) { + var i = A.data; + for (var o in i) + i.hasOwnProperty(o); + e(), + t._onTaskFinished() + }, + i.postMessage({ + msg: A + }) + }), (function (A) {}))) : (i.setResponseType("json"), + i.setCacheViable(!this.offLine), + i.load(n.kdTreeUrl(A), (function (i) { + t._parseKDTree(i, A), + Bh.debug("kdtree load from online"), + e(), + t._onTaskFinished() + }), void 0, (function (A) { + o.dispatchEventEx({ + type: Tc.LOAD_COMPONENT_ERROR, + modelKey: o.modelKey + }) + }))) + }, + UC.prototype.loadBones = function (A, e) { + var t = this, + i = this.loader, + o = this.model, + n = this.url, + r = vc.GeoWorkerUrl; + vc.UseGeoWorker ? (i.setResponseType("arraybuffer"), + i.load(n.bonesUrl(A), (function (A) { + var i = new Worker(r); + i.onmessage = function (A) { + var i = A.data; + for (var o in i) + i.hasOwnProperty(o); + e(), + t._onTaskFinished() + }, + i.postMessage({ + msg: A + }) + }), (function (A) {}))) : (i.setResponseType("arraybuffer"), + i.setCacheViable(!this.offLine), + i.load(n.bonesUrl(A), (function (i) { + t._parseBones(i, A), + Bh.debug("bones load from online"), + e(), + t._onTaskFinished() + }), void 0, (function (A) { + o.dispatchEventEx({ + type: Tc.LOAD_COMPONENT_ERROR, + modelKey: o.modelKey + }) + }))) + }, + UC.prototype.loadClips = function (A, e) { + var t = this, + i = this.loader, + o = this.model, + n = this.url, + r = vc.GeoWorkerUrl; + vc.UseGeoWorker ? (i.setResponseType("json"), + i.load(n.mpkUrl(A), (function (A) { + var i = new Worker(r); + i.onmessage = function (A) { + var i = A.data; + for (var o in i) + i.hasOwnProperty(o); + e(), + t._onTaskFinished() + }, + i.postMessage({ + msg: A + }) + }), (function (A) {}))) : (i.setResponseType("json"), + i.setCacheViable(!this.offLine), + i.load(n.clipsUrl(A), (function (i) { + t._parseClips(i, A), + Bh.debug("Clips load from online"), + e(), + t._onTaskFinished() + }), void 0, (function (A) { + o.dispatchEventEx({ + type: Tc.LOAD_COMPONENT_ERROR, + modelKey: o.modelKey + }) + }))) + }, + UC.prototype.loadNodes = function (A, e) { + var t = this, + i = this.loader, + o = this.model, + n = this.url, + r = vc.GeoWorkerUrl; + vc.UseGeoWorker ? (i.setResponseType("json"), + i.load(n.mpkUrl(A), (function (A) { + var i = new Worker(r); + i.onmessage = function (A) { + var i = A.data; + for (var o in i) + i.hasOwnProperty(o); + e(), + t._onTaskFinished() + }, + i.postMessage({ + msg: A + }) + }), (function (A) {}))) : (i.setResponseType("json"), + i.setCacheViable(!this.offLine), + i.load(n.nodesUrl(A), (function (i) { + t._parseNodes(i, A), + Bh.debug("Nodes load from online"), + e(), + t._onTaskFinished() + }), void 0, (function (A) { + o.dispatchEventEx({ + type: Tc.LOAD_COMPONENT_ERROR, + modelKey: o.modelKey + }) + }))) + }; + var FC = function (A, e) { + tf.call(this, A), + this.defaultManager = new Of(e, A), + this.instancedManager = new Hf(A), + this.loader = new UC(this) + }; + FC.prototype = Object.create(Yf.prototype); + var KC = function (A) { + bC.call(this, A), + this.modelDataVersion = {} + }; + (KC.prototype = Object.assign(KC.prototype, bC.prototype)).load = function (A) { + var e = this, + t = this.model; + this.config = {}; + var i = t.dataUrl, + o = function (o) { + var n = {}; + if ("string" == typeof o) + try { + n = JSON.parse(o) + } catch (A) { + return t.setEmptyScene(!0), + void t.dispatchEventEx({ + type: Rc.ON_LOAD_INVALID_SCENE, + modelKey: t.modelKey + }) + } + else + n = o; + if (n && "SUCCESS" === n.code) { + if (vc.offLine) + e.model.getStorage().put(i.projectUrl(), n, e.model.modelKey, (function () {}), (function () {})); + if (-1 === Number(n.data.status)) + return void t.dispatchEventEx({ + type: Tc.PARSEFAILE, + modelKey: t.modelKey + }); + if (3 > Number(n.data.status)) + return void t.dispatchEventEx({ + type: Tc.PARSING, + modelKey: t.modelKey + }); + e.dataVersion = n.data.profiles.geo || "1.0.0", + i.apiVersion = n.data.profiles.api, + e.model.dataVersion = e.dataVersion, + e._parse(n.data), + t.dispatchEventEx({ + type: Rc.ON_LOAD_CONFIG_FINISH, + modelKey: t.modelKey + }), + A && A() + } else + Bh.log(t.modelKey, "config load error! ", n.message), + t.dispatchEventEx({ + type: Rc.ON_LOAD_ERROR, + modelKey: t.modelKey, + code: n.code, + message: n.message + }) + }; + if (vc.offLine) { + var n = this.model.getStorage(); + n && n.getBatch([i.projectUrl()], (function (A) { + A[i.projectUrl()] ? o(A[i.projectUrl()]) : _d({ + type: "GET", + url: i.projectUrl(), + headers: { + Authorization: t.accessToken + }, + success: o, + error: function (A) { + t.dispatchEventEx({ + type: Rc.ON_NETWORK_ERROR, + modelKey: t.modelKey, + data: A + }) + } + }) + }), (function () {})) + } else { + for (var r = [], a = function () { + var A = t.modelKeys[s]; + r.push(new Promise((function (e, o) { + _d({ + type: "GET", + url: i.projectUrl(A), + headers: { + Authorization: t.accessToken + }, + success: function (t) { + e({ + modelKey: A, + data: t + }) + }, + error: function (e, i) { + switch (e) { + case 401: + t.dispatchEventEx({ + type: Rc.ACCOUNT_NO_EXIST, + modelKey: A, + data: i + }); + break; + case 403: + t.dispatchEventEx({ + type: Rc.NO_PERMISSION, + modelKey: A, + data: i + }); + break; + default: + t.dispatchEventEx({ + type: Rc.ON_NETWORK_ERROR, + modelKey: A, + data: e + }) + } + o(e, i) + } + }) + }))) + }, s = 0; t.modelKeys.length > s; s += 1) + a(); + Promise.all(r).then((function (o) { + for (var n = [], r = 0, a = 0; o.length > a; a += 1) + if (o[a]) { + var s = o[a].data, + l = o[a].modelKey, + c = {}; + if ("string" == typeof s) + try { + c = JSON.parse(s) + } catch (A) { + return void t.dispatchEventEx({ + type: Rc.ON_LOAD_INVALID_SCENE, + modelKey: l + }) + } + else + c = s; + if (c && "SUCCESS" === c.code) { + if (vc.offLine) + e.model.getStorage().put(i.projectUrl(), c, e.model.modelKey, (function () {}), (function () {})); + var h = c.data.scene || null, + d = c.data.profiles.geo || "1.0.0"; + if (i.apiVersion = c.data.profiles.api, + n.push({ + scene: h, + modelKey: c.data.key, + dataVersion: d + }), + e.modelDataVersion[c.data.key] = d, + r += c.data.componentCount, + -1 === Number(c.data.status)) + return void t.dispatchEventEx({ + type: Tc.PARSEFAILE, + modelKey: l + }); + if (3 > Number(c.data.status)) + return void t.dispatchEventEx({ + type: Tc.PARSING, + modelKey: l + }); + e.dataVersion = c.data.profiles.geo || "1.0.0", + e.sceneReader = e.sceneReader || [], + t.setConfig(c.data), + e._parse(c.data) + } else + Bh.log(t.modelKey, "config load error! ", c.message), + t.dispatchEventEx({ + type: Rc.ON_LOAD_ERROR, + modelKey: l, + code: c.code, + message: c.message + }) + } + var p = new FC(t, !1); + t._handler = p, + e.model.componentCount = r, + t.dispatchEventEx({ + type: Rc.ON_LOAD_CONFIG_FINISH, + modelKey: t.modelKey + }), + e.scenes = n, + A && A() + })).catch((function (A) { + console.log(A) + })) + } + }, + KC.prototype._parse = function (A) { + this.config = A, + A.lengthUnit && (this.model.originalLengthUnit = A.lengthUnit), + vc.MergeComponent = !0, + this._toStatistics(A), + this._setTransformInfos(A), + this._chooseRendering(A) + }; + var QC = {}; + QC.brdf_vs = ["varying vec2 vUV;", "void main() {", " vUV = uv;", " gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);", "}"].join("\n"), + QC.brdf_fs = ["varying vec2 vUV;", "uniform sampler2D HammersleyTable;", "const float PI = 3.14159265358979;", "float GGX(float NdotV, float alpha)", "{", " float alpha2 = pow(alpha, 2.0);", " return 2.0 * NdotV / (NdotV + sqrt(alpha2 + (1.0 - alpha2) * NdotV * NdotV));", "}", "float G_Smith(float NdotV, float NdotL, float roughness)", "{", " float alpha = pow(roughness, 2.0);", " return GGX(NdotV, alpha) * GGX(NdotL, alpha);", "}", "vec3 ImportanceSampleGGX(vec2 Xi, vec3 N, float roughness)", "{", " float a = roughness * roughness;", " float Phi = 2.0 * PI * Xi.x; ", " float CosTheta = sqrt((1.0 - Xi.y) / (1.0 + (a * a - 1.0) * Xi.y)); ", " float SinTheta = sqrt(1.0 - CosTheta * CosTheta);", " vec3 H;", " H.x = SinTheta * cos(Phi); ", " H.y = SinTheta * sin(Phi); ", " H.z = CosTheta;", " vec3 UpVector = abs(N.z) < 0.999 ? vec3(0.0, 0.0, 1.0) : vec3(1.0, 0.0, 0.0); ", " vec3 TangentX = normalize(cross(UpVector, N)); ", " vec3 TangentY = cross(N, TangentX);", " return normalize(TangentX * H.x + TangentY * H.y + N * H.z);", "}", "vec2 IntegrateBRDF(float NdotV, float roughness)", "{", " vec3 N = vec3(0.0, 0.0, 1.0);", " vec3 V = vec3(sqrt(1.0 - NdotV * NdotV), 0.0, NdotV);", " vec2 result = vec2(0.0, 0.0);", " const int NumSamples = 1024;", " for (int i = 0; i < NumSamples; i++)", " {", " float u = float(i) / float(NumSamples);", " vec2 Xi = vec2(u, texture2D(HammersleyTable, vec2(u)).r);", " vec3 H = ImportanceSampleGGX(Xi, N, roughness);", " vec3 L = 2.0 * dot(V, H) * H - V;", " float NdotL = saturate(L.z);", " float NdotH = saturate(H.z);", " float VdotH = saturate(dot(V, H));", " float NdotV = saturate(dot(N, V));", " if (NdotL > 0.0)", " {", " float G = G_Smith(NdotV, NdotL, roughness);", " float G_Vis = G * VdotH / (NdotH * NdotV); ", " float F = pow(1.0 - VdotH, 5.0);", " result.x += (1.0 - F) * G_Vis;", " result.y += F * G_Vis;", " }", " }", " return result / float(NumSamples);", "}", "void main()", "{", " vec2 brdf = IntegrateBRDF(vUV.x, vUV.y);", " gl_FragColor = vec4(brdf, 0.0, 1.0);", "}"].join("\n"), + QC.BRDFMap = function (A, e) { + this.texture = null, + this.resolution = e || 512, + this.brdfMaterial = new Pe({ + vertexShader: QC.brdf_vs, + fragmentShader: QC.brdf_fs, + uniforms: { + HammersleyTable: { + value: A + } + }, + lights: !1 + }), + this.quad = new Ue(new et(window.innerWidth, window.innerHeight), this.brdfMaterial), + this.quad.position.z = -100 + }, + QC.BRDFMap.prototype.constructor = QC.BRDFMap, + QC.BRDFMap.prototype.generateMap = function (A) { + var e = new Y; + e.add(this.quad); + var t = new Ka(window.innerWidth / -2, window.innerWidth / 2, window.innerHeight / 2, window.innerHeight / -2, -1e4, 1e4); + t.position.z = 100; + var i = new g(this.resolution, this.resolution, { + minFilter: 1006, + magFilter: 1003, + format: 1022 + }); + A.setRenderTarget(i), + A.clear(), + A.render(e, t), + this.texture = i.texture + }; + var RC = function () { + this.instanceMaterials = {}, + this.materials = {}, + this.textures = {}, + this.lightmaps = {}, + this.ensureImagePowerOfTwo = !1 + }; + RC.prototype.changeAllMaterials = function (A, e) {}, + RC.prototype.destroy = function () { + this.instanceMaterials = {}, + this.materials = {}, + this.textures = {}, + this.lightmaps = {} + }, + RC.prototype.disposeInstanceMaterials = function (A) { + var e = this.instanceMaterials; + for (var t in e) { + var i = e[t]; + if (Array.isArray(i)) + for (var o = 0, n = i.length; n > o; o += 1) + i[o].dispose(); + else + i.dispose() + } + }, + RC.prototype.disposeMaterials = function (A) { + for (var e in this.materials) + this.materials[e].dispose(); + this.disposeInstanceMaterials(A) + }, + RC.prototype.updateMaterialsValue = function (A, e, t) { + var i = this.materials, + o = this.instanceMaterials, + n = null; + for (var r in i) + for (var r in (n = i[r]) && n[e] && (n[e] = t, + "function" == typeof n.refreshUniforms && n.refreshUniforms(), + n.needsUpdate = !0), + o) + if (n = o[r]) + if (Array.isArray(n)) + for (var a = 0, s = n.length; s > a; a += 1) + n[a][e] && (n[a][e] = t, + "function" == typeof n[a].refreshUniforms && n[a].refreshUniforms(), + n[a].needsUpdate = !0); + else + n[e] && (n[e] = t, + "function" == typeof n.refreshUniforms && n.refreshUniforms(), + n.needsUpdate = !0) + }, + RC.prototype.enableColorWithoutLight = function (A) { + var e = this.materials, + t = this.instanceMaterials, + i = null; + if (A) { + for (var o in e) + (i = e[o]) && (i.defines.USE_COLORWITHOUTLIGHT = "", + i.needsUpdate = !0); + for (var o in t) + if (i = t[o]) + if (i instanceof Array) + for (var n = 0, r = i.length; r > n; n += 1) + i[n].defines.USE_COLORWITHOUTLIGHT = "", + i[n].needsUpdate = !0; + else + i.defines.USE_COLORWITHOUTLIGHT = "", + i.needsUpdate = !0 + } else { + for (var o in e) + (i = e[o]) && (delete i.defines.USE_COLORWITHOUTLIGHT, + i.needsUpdate = !0); + for (var o in t) + if (i = t[o]) + if (i instanceof Array) + for (n = 0, + r = i.length; r > n; n += 1) + delete i[n].defines.USE_COLORWITHOUTLIGHT, + i[n].needsUpdate = !0; + else + delete i.defines.USE_COLORWITHOUTLIGHT, + i.needsUpdate = !0 + } + }, + RC.prototype._updateTextureMapping = function (A) { + var e = vc.EnableTextureMapping, + t = this.ensureImagePowerOfTwo; + + function i(A, e) { + if (e) { + if (void 0 === e.length) + A.map = e; + else + for (var i = 0; e.length > i; i += 1) + t || (e[i].image = Kd.ensurePowerOfTwo(e[i].image)), + "map" === e[i].texturetype ? A.map = e[i] : "bumpMap" === e[i].texturetype ? e[i].depth && (A.bumpScale = e[i].depth) : "specularMap" === e[i].texturetype ? A.specularMap = e[i] : "alphaMap" === e[i].texturetype ? (A.alphaMap = e[i], + A.alphaTest = .01, + A.map = e[i], + A.transparent = !0) : "emissiveMap" === e[i].texturetype ? A.emissiveMap = e[i] : "environmentMap" === e[i].texturetype ? A.envMap = e[i] : "normalMap" === e[i].texturetype ? (A.normalMap = e[i], + e[i].depth && A.normalScale.set(e[i].depth, e[i].depth)) : Bh.warn("This map type is not supported yet:", e[i].texturetype); + vc.IBL && A.refreshUniforms(), + A.needsUpdate = !0 + } else + A.textureColor && A.color.setStyle(A.textureColor), + A.needsUpdate = !0 + } + if (this.lastTextureEnabled !== e) { + var o = this.textures, + n = this.materials; + if (A) + var r = A.manager.getMaterialOverrideSet(), + a = r ? r.materialsByName : null, + s = r ? r.textures : null; + var l = this.instanceMaterials, + c = null, + h = null; + if (e) { + for (c in n) { + if (h = n[c]) + i(h, d = o[c]) + } + for (c in l) + if (h = l[c]) { + var d = o[c]; + if (s && s[c] && (d = s[c]), + Array.isArray(h)) + for (var p = 0, g = h.length; g > p; p += 1) + i(h[p], d); + else + i(h, d) + } + for (c in a) { + if (h = a[c]) + i(h, d = s[c.split("#")[0]]) + } + this.ensureImagePowerOfTwo = !0 + } else { + if (!r) + for (c in n) + (h = n[c]) && (h.map = null, + h.needsUpdate = !0); + for (c in l) + if (h = l[c]) + if (Array.isArray(h)) + for (p = 0, + g = h.length; g > p; p += 1) + h[p].pureColor && (h[p].color.setStyle(h[p].pureColor), + h[p].map = null, + h[p].needsUpdate = !0), + r || (h[p].map = null, + h[p].needsUpdate = !0); + else + h.pureColor && (h.color.setStyle(h.pureColor), + h.map = null, + h.needsUpdate = !0), + r || (h.map = null, + h.needsUpdate = !0); + for (c in a) + (h = a[c]) && (h.map = null, + h.needsUpdate = !0, + h.pureColor && h.color.setStyle(h.pureColor)) + } + this.lastTextureEnabled = e + } + }, + RC.prototype.updateMaterials = function (A) { + var e = this.materials; + for (var t in e) + if (e.hasOwnProperty(t)) { + var i = e[t]; + i.IBLMaps = A.manager.scene.IBLMaps, + i.refreshUniforms() + } + }, + RC.prototype._updateIBL = function (A) { + var e = A.manager.scene; + if (vc.IBL && null !== e.iblProbe && e.iblProbe.isComputed) { + this.materialManager.updateMaterials(A); + var t = e.IBLcfg, + i = t[Object.keys(t)[e.IBLIndex]]; + for (var o in i) + this.materialManager.updateMaterialsValue(A, o, i[o]) + } + }, + RC.prototype.changeAllMaterials = function (A, e) { + var t = this.materials; + for (var i in t) + if (t.hasOwnProperty(i)) { + var o = Kd.getMaterialParameters(t[i]), + n = null; + e ? (delete o.textureColor, + delete o.pureColor, + delete o.imageFade, + o.lights = !0, + (n = new QC.IBLMaterial(o)).type = "IBL", + n.refreshUniforms()) : (delete o.iblProbe, + (n = Kd.createStandardMaterial(o)).roughness = o.originRoughness, + n.metalness = o.originMetalness, + n.refreshUniforms()), + n.name = i, + t[i] = n, + o = null + } + }, + RC.prototype.switchNewStyleMaterial = function (A, e) { + var t = this.materials; + for (var i in t) + if (t.hasOwnProperty(i)) { + var o = Kd.getMaterialParameters(t[i]), + n = null; + (n = e ? Kd.createNewStyleMaterial(o) : Kd.createStandardMaterial(o)).name = i, + t[i] = n, + o = null + } + }, + RC.prototype.getInstanceMaterialById = function (A, e) { + if (this.instanceMaterials[A]) + return this.instanceMaterials[A]; + var t = Kd.getMaterialParameters(e.manager.getOverrideMaterialByName(A) || this.materials[A]), + i = t.transparent, + o = Kd.createInstanceMaterial(t, !0); + o.transparent = !1; + var n = Kd.createInstanceMaterial(t, !0); + return n.transparent = !0, + vc.TranslucentDepthDisabled && (n.depthWrite = !1), + i === o.transparent ? (this.instanceMaterials[A] = [o, n], + n.defines.INSTANCE_STATE_SECONDARY = "") : (this.instanceMaterials[A] = [n, o], + o.defines.INSTANCE_STATE_SECONDARY = ""), + this.instanceMaterials[A] + }, + RC.prototype.getMaterialById = function (A) { + return this.materials[A] + }; + var TC = function (A, e, t, i) { + var o = this; + this.manager = A, + this.modelKey = e.modelKey, + this.projectKey = e.dbName, + this.offLine = e.offLine, + this.accessToken = e.token || "", + this.shareKey = e.share || "", + this.dataVersion = null, + this.debut = i, + this.dataUrl = new eC(e), + this.submodel = {}, + this.loadingManager = new jr, + this.loadingManager.model = this, + this.fileLoader = new bu(this.loadingManager), + this.configLoader = new bC(this), + this.firstOctreeTransform = !0, + this.numOfElements = 0, + this.numOfTriangles = 0, + this.singleStepMode = !1, + this.sizeOfNextStep = 0, + this.needUpdate = !1, + this.boundingBoxWorld = null, + this.rotation = new f, + this.position = new y, + this.scale = new y(1, 1, 1), + this.transformMatrix = new M, + this.selectedMaterial = this.manager.sceneState.selectionMaterial, + this.materialManager = new RC, + this.wireframeManager = new au, + this.axisNetManager = void 0, + this.floorManager = void 0, + this.containsCamera = !1, + this.loaded = !1, + this.visible = !0, + this.emptyScene = !1, + this.cameraList = [], + this.index = 0, + this.modelConfig = null, + this.kdTreeNode = null, + this.parseCfgFinish = void 0, + this.progressPercentage = { + load: .4, + collect: .5, + merge: .1 + }, + this.progressFrequency = 10, + this._encodedDatabagId = this.modelKey, + this.groupName = gp.MODEL + "|" + this.modelKey, + this.group = this.manager.scene.getOrCreateGroup(this.groupName, { + pickableType: Qc.Geometry, + globalSpace: !0 + }), + this._handler = null, + this.lightmap = !1, + this.lightmapNum = 0, + this.enableLightmap = !1, + this.lightmapIntensity = vc.LightmapIntensity, + this.minDistanceObjects = {}, + this.prioritizedNodeCount = 0, + this.plugins = [], + this.merged = !1, + e.modelKeys && (this.modelGroup = !0, + this.groupKey = e.modelKey, + this.modelKeys = e.modelKeys, + this.progressFrequency = 100, + this.merged = !0, + this.configLoader = new KC(this)), + this.subModel = {}, + mh.isSupportIndexedDB() ? (this.storage = new AC({ + store: this.modelKey, + version: 1, + dbName: this.modelKey + }), + this.storage.addEventListener(Rc.ON_DATABASE_OPEN, (function (A) { + t && t(o, !0) + })), + this.storage.addEventListener(Rc.ON_DATABASE_EEEOR, (function (A) { + o.storage = void 0, + t && t(o, !1) + }))) : (o.storage = void 0, + t && t(this, !1)) + }; + Object.assign(TC.prototype, Ld.prototype), + TC.prototype.getStorage = function () { + return this.storage + }, + TC.prototype.destroy = function () { + this.selectedMaterial = null, + this.cameraList = null, + this.occlusionCamera && (this.occlusionCamera = null), + this._removeMeshNodeGroup(), + this.removeAllFromOctantMap(), + this._handler && (this._handler.destroy(), + this._handler = null), + this.wireframeManager.destroy(), + this.wireframeManager = null, + this.materialManager.disposeMaterials(this), + this.materialManager.destroy(), + this.materialManager = null, + this.manager = null, + this.plugins = null, + this.dataUrl = null, + this.fileLoader = null, + this.configLoader.destroy(), + this.configLoader = null + }, + TC.prototype._getWireframeGroupName = function () { + return gp.WIREFRAME + "|" + this.modelKey + }, + TC.prototype.load = function (A) { + var e = this; + this.configLoader.load((function () { + e.parseCfgFinish && e.parseCfgFinish(), + e.manager.updateScene(), + e._getHandler().load(A) + })) + }, + TC.prototype.setCrossOrigin = function (A) { + this.fileLoader.setCrossOrigin(A) + }, + TC.prototype.prepare = function (A, e) { + var t = this._getHandler(); + t && t.prepare(A, e) + }, + TC.prototype.dispatchEventEx = function (A) { + A.modelKey = this.modelKey, + this.manager.dispatchEvent(A) + }, + TC.prototype.setLoaded = function (A) { + this.loaded = A + }, + TC.prototype.isLoaded = function () { + return this.loaded + }, + TC.prototype.getTransformMatrix = function () { + return this.transformMatrix + }, + TC.prototype.isEmptyScene = function () { + return this.emptyScene + }, + TC.prototype.setEmptyScene = function (A) { + this.emptyScene = A + }, + TC.prototype.isLayerData = function () { + return !(!this._handler || "layer" !== this._handler.tag) + }, + TC.prototype.setConfig = function (A) { + this.configLoader.config = A + }, + TC.prototype.getConfig = function () { + return this.configLoader.config + }, + TC.prototype.isVisible = function () { + return this.manager.filter._isModelVisible(this.modelKey) + }, + TC.prototype.setVisible = function (A) { + A ? this.manager.filter.showModelByIds([this.modelKey]) : this.manager.filter.hideModelByIds([this.modelKey]) + }, + TC.prototype.calculateCameraModelRelation = function (A) { + this.containsCamera = this.getModelDescriptor().isOctreeOuter(A) + }, + TC.prototype.addCamera = function (A) { + this.cameraList.push(A) + }, + TC.prototype.getCameraNameList = function () { + for (var A = [], e = this.cameraList.length - 1; e >= 0; e -= 1) + A.push(this.cameraList[e].name); + return A + }, + TC.prototype.getCamera = function (A) { + for (var e = this.cameraList.length - 1; e >= 0; e -= 1) + if (this.cameraList[e].name === A) + return this.cameraList[e]; + return null + }, + TC.prototype.updateOctreeNode = function (A) { + if (A || this.firstOctreeTransform) { + this.firstOctreeTransform && (this.firstOctreeTransform = !1); + var e = this.manager.scene.getMatrixGlobal(); + this.getModelDescriptor().updateOctreeNode(e) + } + }, + TC.prototype.isDataReady = function () { + var A = this._handler; + return !!A && A.isDataReady() + }, + TC.prototype.updateMeshNodes = function (A) { + var e = this._getHandler(); + if (e) { + if ("layer" === e.tag && !e.layerDataLoaded) + return; + e.updateNodes() + } + }, + TC.prototype._getHandler = function (A) { + return this._handler + }, + TC.prototype.getMeshesByUserIds = function (A) { + if (A) { + var e = this._getHandler(); + return e ? e.getMeshesByUserIds(A) : void 0 + } + }, + TC.prototype.applyFilter = function () { + console.log('applyFilter :>dfdfdf> '); + if (!1 !== this.manager.filter._isModelVisible(this.modelKey)) { + for (var A = 0, e = this.plugins.length; e > A; A += 1) + this.plugins[A].applyFilter(); + this.group.visible = !0; + var t = this._getHandler(); + t && t.applyFilter() + } else + this.group.visible = !1 + }, + TC.prototype.applySelection = function () { + console.log('applySelection11') + for (var A = 0, e = this.plugins.length; e > A; A += 1) + this.plugins[A].applySelection(); + var t = this._getHandler(); + t && t.applySelection() + }, + TC.prototype.clearSelection = function () { + for (var A = 0, e = this.plugins.length; e > A; A += 1) + this.plugins[A].clearSelection(); + var t = this._getHandler(); + t && t.clearSelection() + }, + TC.prototype.applyHover = function () { + for (var A = 0, e = this.plugins.length; e > A; A += 1) + this.plugins[A].applyHover(); + var t = this._getHandler(); + t && t.applyHover() + }, + TC.prototype.clearHover = function () { + for (var A = 0, e = this.plugins.length; e > A; A += 1) + this.plugins[A].clearHover(); + var t = this._getHandler(); + t && t.clearHover() + }, + TC.prototype.applyBlink = function () { + var A = this._getHandler(); + A && A.applyBlink() + }, + TC.prototype.clearBlink = function () { + var A = this._getHandler(); + A && A.clearBlink() + }, + TC.prototype.applyReplacement = function () { + var A = this._getHandler(); + A && A.applyReplacement() + }, + TC.prototype._removeMeshNodeGroup = function () { + this._removeNodeGroup(gp.GEOMETRY), + this._removeNodeGroup(gp.INSTANCEGEOMETRY), + this._removeNodeGroup(gp.WIREFRAME), + this._removeNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY), + this._removeNodeGroup(gp.AXISNET), + this._removeSceneGroup(), + this.group = null + }, + TC.prototype._getNodeGroup = function (A, e) { + for (var t = this.group.children, i = 0, o = t.length; o > i; i += 1) + if (t[i].name === A) + return t[i]; + var n = new ep(A, e); + return this.group.add(n), + n.globalSpace && (n.matrixAutoUpdate = !1, + n.updateMatrixWorld(!0)), + n + }, + TC.prototype._removeNodeGroup = function (A) { + this.group.removeByName(A) + }, + TC.prototype._hasNodeGroup = function (A) { + return this.group.hasChild(A) + }, + TC.prototype._removeSceneGroup = function () { + this.manager.scene.removeGroupByName(this.groupName), + this.manager.scene.removeGroupByName(this._getWireframeGroupName()) + }, + TC.prototype.removeAllFromOctantMap = function () { + this.manager.removeAllFromOctantMap(this.modelKey) + }, + TC.prototype.clearMeshFromOctantMap = function () { + this.manager.removeMeshFromOctantMap(this.modelKey) + }, + TC.prototype.getDatabagId = function () { + return this.modelKey + }, + TC.prototype.getEncodedDatabagId = function () { + return this.modelKey + }, + TC.prototype.getMaterialManager = function () { + return this.materialManager + }, + TC.prototype.clearWireframeElementCount = function () { + this.wireframeElementCount = void 0 + }, + TC.prototype.getWireframeElementCount = function () { + if (void 0 !== this.wireframeElementCount) + return this.wireframeElementCount; + var A = this.getModelDescriptor().getAllNodeInfos(), + e = this.manager.filter, + t = 0; + for (var i in A) { + var o = A[i]; + e._hasRenderWithBoardlineFilter() && !e._isRenderWithBoardline(o[0]) || (t += o.length) + } + return this.wireframeElementCount = t, + t + }, + TC.prototype.isActivateWireframe = function () { + return this.manager.isDrawingBoardlineEnabled() + }, + TC.prototype.isOnlyWireframe = function () { + return this.manager.isOnlyWireframe() + }, + TC.prototype.getLoadedUserIdsObject = function () { + return this._handler && this._handler.getLoadedUserIdsObject ? this._handler.getLoadedUserIdsObject() : null + }, + TC.prototype.clearNodeGroup = function () { + var A = this._getNodeGroup(gp.GEOMETRY, { + globalSpace: !0 + }); + A.clear(), + (A = this._getNodeGroup(gp.WIREFRAME, { + globalSpace: !0 + })).clear(), + (A = this._getNodeGroup(gp.INSTANCEGEOMETRY, { + globalSpace: !0 + })).clear(), + (A = this._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { + globalSpace: !0 + })).clear() + }, + TC.prototype.getWireframeMaterial = function () { + return this.wireframeManager.wireframeMaterial + }, + TC.prototype.getInstanceWireframeMaterial = function () { + return this.wireframeManager.instanceWireframeMaterial + }, + TC.prototype.getMaterialByMaterialId = function (A) { + return this.materialManager.materials[A] + }, + TC.prototype.adjustProgressPercentage = function (A, e, t) { + this.progressPercentage.load = A, + this.progressPercentage.collect = e, + this.progressPercentage.merge = t + }, + TC.prototype.setReplacedUserIdMap = function (A) { + this.replacedUserIdMap = uh.isOwnEmptyObject(A) ? null : A + }, + TC.prototype.hasReplacedUserId = function () { + return !uh.isEmptyObject(this.replacedUserIdMap) + }, + TC.prototype.isReplacedUserId = function (A) { + return this.replacedUserIdMap && this.replacedUserIdMap[A] + }, + TC.prototype.registerPlugin = function (A) { + this.plugins.push(A) + }, + TC.prototype.disposeBufferAfterVbo = function () { + var A = this._getHandler(); + A && A.disposeBufferAfterVbo() + }, + TC.prototype.isHiddenUserId = function (A) { + var e = this._getHandler(); + return !!e && e.isHiddenNode(A) + }, + TC.prototype.hasHiddenUserId = function () { + return this.manager.hasHiddenUserId() + }, + TC.prototype.isHiddenSourceObjectUserId = function (A) { + return this.manager.isHiddenSourceObjectUserId(A) + }, + TC.prototype.hasHiddenSourceObjectUserId = function () { + return this.manager.hasHiddenSourceObjectUserId() + }, + TC.prototype.getModelDescriptor = function () { + return this._handler.loader.getDescriptor() + }, + TC.prototype.getLoader = function () { + return this._handler.loader + }, + TC.prototype.getConfig = function () { + return this.configLoader.getConfig() + }, + TC.prototype.getTransforms = function () { + return this.configLoader.getTransforms() + }, + TC.prototype.getStatistics = function () { + return this.configLoader.getStatistics() + }, + TC.prototype.setRenderableCount = function (A) { + this.configLoader.setRenderableCount(A), + this._handler && this._handler.clearPriorityNodesSet && this._handler.clearPriorityNodesSet(!0) + }, + TC.prototype.getRenderableCount = function () { + return this.configLoader.getStatistics().renderableCount + }, + TC.prototype.getBoundingBoxWorld = function () { + return this.configLoader.getTransforms().boundingBox + }, + TC.prototype.calculateBoundingBox = function () { + var A = this.getModelDescriptor().getAllNodeInfos(), + e = new aA; + for (var t in A) + for (var i = A[t], o = 0, n = i.length; n > o; o += 1) { + var r = i[o]; + r.boundingBox && e.union(r.boundingBox) + } + var a = this.getModelMatrix(); + a && e.applyMatrix4(a), + this.configLoader.getTransforms().boundingBox.copy(e) + }, + TC.prototype.calculateClippingIds = function () { + var A = this._getHandler(); + A && A.calculateClippingIds() + }, + TC.prototype.explode = function (A) { + var e = this.getBoundingBoxWorld().getCenter(), + t = this._getHandler(); + t && t.explode(e, A) + }, + TC.prototype.formatLayerIds = function (A) { + return this.getLayerProvider().formatLayerIds(A) + }, + TC.prototype.getBoundingBoxOfGeometries = function (A) { + for (var e = !A, t = new aA, i = 0; A.length > i; i += 1) { + var o = this.group.getObjectByProperty("guid", A[i]); + if (o) { + var n = o.geometry; + if (n) { + if (e || n) { + n.boundingBox || n.computeBoundingBox(); + var r = n.boundingBox; + if (r) { + var a = r.clone(); + o.matrixWorld && a.applyMatrix4(o.matrixWorld), + t.expandByPoint(a.min), + t.expandByPoint(a.max) + } + } + } else + Bh.log("empty geometry!") + } + } + return t + }, + TC.prototype.setModelMatrix = function (A) { + this.group.matrix.copy(A), + this.group.updateMatrixWorld(!0); + var e = this.configLoader.transformInfos; + e && e.boundingBox && (e.transformMatrix.copy(A), + e.originalBoundingBox ? this.calculateBoundingBox() : (e.originalBoundingBox = e.boundingBox.clone(), + e.boundingBox.applyMatrix4(A))), + this.manager.updateSceneBoundingBox() + }, + TC.prototype.applyModelMatrix = function (A) { + var e = this.configLoader.transformInfos; + e && e.boundingBox && (e.transformMatrix.premultiply(A), + e.originalBoundingBox || (e.originalBoundingBox = e.boundingBox.clone()), + e.boundingBox.applyMatrix4(A)), + this.group.matrix.copy(e.transformMatrix), + this.group.updateMatrixWorld(!0), + this.manager.updateSceneBoundingBox() + }, + TC.prototype.getModelMatrix = function () { + var A = null; + return this.group.matrix && (A = this.group.matrix.clone()), + A + }, + TC.prototype.resetModelMatrix = function () { + var A = this.configLoader.transformInfos.originalMatrix; + A && this.setModelMatrix(A) + }, + TC.prototype.overturnYAndZaxis = function () { + var A = (new M).makeRotationFromEuler(new F(Math.PI / 2, 0, 0)); + this.group.matrix && (A.multiply(this.group.matrix), + this.setModelMatrix(A)) + }, + TC.prototype.hasComponent = function (A) { + return !!this.getModelDescriptor().getNodeInfosByUserId(A) + }, + TC.prototype.getComponentInfo = function (A) { + return this.getModelDescriptor().getNodeInfosByComponentKey(A) + }, + TC.prototype.getComponentlist = function () { + var A = [], + e = this.getModelDescriptor(); + for (var t in e.mapNodeInfoByComponentKey) + e.mapNodeInfoByComponentKey.hasOwnProperty(t) && A.push(t); + return A + }, + TC.prototype.addMeshToInfoMap = function (A, e, t, i, o) { + this.getModelDescriptor().addMeshToInfoMap(A, e, t, i, o) + }, + TC.prototype.loadGeopkOnDemand = function (A, e, t) { + this._handler && "layer" === this._handler.tag && this._handler.loadGeopkOnDemand(A, e, t) + }, + TC.prototype.unloadGeopkOnDemand = function (A, e) { + this._handler && "layer" === this._handler.tag && this._handler.unloadComponents(A, e) + }, + TC.prototype.loadAllGeosOnDemand = function (A, e, t) { + this._handler && "layer" === this._handler.tag && this._handler.loadAllGeosOnDemand(A, e, t) + }, + TC.prototype.getUnionBoundingBoxOnDemand = function () { + return this.getLayerProvider().getUnionBoundingBoxOnDemand() + }, + TC.prototype.setConditionsChangedOnDemand = function (A) { + this.getLayerProvider().setConditionsChanged(A) + }, + TC.prototype.explosion = function (A) { + var e = this._getHandler(); + Bh.time("模型离散用时"), + e && (this.explosioning = !0, + e.explosion(A)), + Bh.timeEnd("模型离散用时"), + this.calculateBoundingBox() + }, + TC.prototype.closeExplosion = function () { + Bh.time("取消模型离散用时"); + var A = this._getHandler(); + A && (A.closeExplosion(), + this.explosioning = !1), + Bh.timeEnd("取消模型离散用时") + }, + TC.prototype.componentsExplosion = function (A) { + var e = this._getHandler(); + if (1 === (A.coefficientX || 1) && 1 === (A.coefficientY || 1) && 1 === (A.coefficientZ || 1) && 0 === (A.offsetX || 0) && 0 === (A.offsetY || 0) && 0 === (A.offsetZ || 0)) + return this.explosioning = !1, + this.closeComponentsExplosion(A.componentKey), + void this.calculateBoundingBox(); + Bh.time("构件离散用时"), + e && (this.explosioning = !0, + e.componentsExplosion(A), + this.calculateBoundingBox()), + Bh.timeEnd("构件离散用时") + }, + TC.prototype.closeComponentsExplosion = function (A) { + Bh.time("取消构件离散用时"); + var e = this._getHandler(); + e && (e.closeComponentsExplosion(A), + this.explosioning = !1), + Bh.timeEnd("取消构件离散用时") + }, + TC.prototype.floorExplosion = function (A) { + if (this.floorManager) { + var e = this.floorManager.floorExplosionInfo; + this.explosioning = !0; + var t = this._getHandler(); + if (!t) + return !1; + if (!e.sortedFloors) { + for (var i = [], o = 0, n = e.floors.length; n > o; o += 1) { + var r = e.floors[o], + a = this.manager.getBoundingBoxByIds(r.componentkeys); + if (!a.isEmpty()) { + r.box = a; + var s = new y; + r.box.getCenter(s), + r.center = s, + i.push(r) + } + } + i.sort((function (A, e) { + return A.center.z - e.center.z + })), + e.sortedFloors = i; + for (var l = 0, c = 1 / 0, h = 0, d = 0, p = i.length; p > d; d += 1) { + var g = Math.abs(i[d].center.z); + c > g && (l = d, + c = g); + var u = new y; + i[d].box.getSize(u), + h += u.z + } + e.baseFloorIndex = l, + e.averageHeight = h / i.length; + var f = i[l].center.toArray(); + e.center = f + } + for (var m = (A - 1) * e.averageHeight, C = 0, v = e.sortedFloors.length; v > C; C += 1) { + if (C !== e.baseFloorIndex) + t.componentsExplosion({ + offsetZ: (C - e.baseFloorIndex) * m, + componentKey: e.sortedFloors[C].componentkeys, + center: e.center + }) + } + return this.calculateBoundingBox(), + !0 + } + return !1 + }, + TC.prototype.closeFloorExplosion = function () { + if (this.floorManager) { + var A = this.floorManager.floorExplosionInfo; + if (A && A.sortedFloors) { + var e = this._getHandler(); + if (e) { + for (var t = 0, i = A.sortedFloors.length; i > t; t += 1) { + e.closeComponentsExplosion(A.sortedFloors[t].componentkeys) + } + this.calculateBoundingBox(), + this.explosioning = !1 + } + } + } + }, + TC.prototype.showModel = function (A) { + this.nodes.visible = A + }, + TC.prototype.updateMaterials = function () { + var A = this.materials; + for (var e in A) + if (A.hasOwnProperty(e)) { + var t = A[e]; + t.IBLMaps = this.manager.scene.IBLMaps, + t.refreshUniforms() + } + }, + TC.prototype.updateMaterialsValue = function (A, e) { + var t = this.materials; + for (var i in t) + if (t.hasOwnProperty(i)) { + var o = t[i]; + o.hasOwnProperty(A) && (o[A] = e, + o.refreshUniforms(), + o.needsUpdate = !0) + } + }, + TC.prototype.changeAllMaterials = function (A) { + var e = this.materials; + for (var t in e) + if (e.hasOwnProperty(t)) { + var i = Kd.getMaterialParameters(e[t]), + o = null; + A ? (delete i.textureColor, + delete i.pureColor, + delete i.imageFade, + i.lights = !0, + (o = new QC.IBLMaterial(i)).type = "IBL", + o.refreshUniforms()) : (delete i.iblProbe, + (o = Kd.createStandardMaterial(i)).roughness = i.originRoughness, + o.metalness = i.originMetalness, + o.refreshUniforms()), + o.name = t, + e[t] = o, + i = null + } + }, + TC.prototype.getAllComponents = function () { + return this.getComponentlist() + }, + TC.prototype.getComponentKeysByTypeFromList = function (A, e) { + for (var t = this.getModelDescriptor(), i = [], o = 0; A.length > o; o += 1) + t.mapNodeInfoByComponentKey.hasOwnProperty(A[o]) && t.mapNodeInfoByComponentKey[A[o]][0].type === e && i.push(A[o]); + return i + }, + TC.prototype.getComponentKeysByType = function (A) { + var e = this.getModelDescriptor(), + t = []; + for (var i in e.mapNodeInfoByComponentKey) + e.mapNodeInfoByComponentKey.hasOwnProperty(i) && e.mapNodeInfoByComponentKey[i][0].type === A && t.push(i); + return t + }, + TC.prototype.getAllComponentKeyType = function () { + var A = {}, + e = [], + t = this.getModelDescriptor(); + for (var i in t.mapNodeInfoByComponentKey) + if (t.mapNodeInfoByComponentKey.hasOwnProperty(i)) { + var o = t.mapNodeInfoByComponentKey[i][0].type; + A[o] || (A[o] = !0, + e.push(o)) + } + return e + }, + TC.prototype.getComponentKeysByName = function (A) { + var e = this.getModelDescriptor(), + t = []; + for (var i in e.mapNodeInfoByComponentKey) + e.mapNodeInfoByComponentKey.hasOwnProperty(i) && e.mapNodeInfoByComponentKey[i][0].name === A && t.push(i); + return t + }, + TC.prototype.getComponentKeysByProperty = function (A, e) { + var t = this.getModelDescriptor(), + i = []; + for (var o in t.mapNodeInfoByComponentKey) + t.mapNodeInfoByComponentKey.hasOwnProperty(o) && t.mapNodeInfoByComponentKey[o][0][A] === e && i.push(o); + return i + }, + TC.prototype._getLayerHandler = function () { + return this._layerHandler + }, + TC.prototype.prepareData = function () { + var A = this; + this.materialManager._updateTextureMapping(), + this.materialManager._updateIBL(this); + var e = this._getHandler(); + e && e.prepareData((function () { + A.loaded = !0, + A.hasAnimation && vc.EnableAnimation && A.createPanel(), + A.debut(A) + })) + }, + TC.prototype.isUserIdExist = function (A) { + return !!this.getModelDescriptor().getNodeInfosByUserId(A) + }, + TC.prototype.getNodeInfosByUserId = function (A) { + return this.getModelDescriptor().getNodeInfosByUserId(A) + }, + TC.prototype.getNodeInfos = function () { + return this.getModelDescriptor().getNodeInfosWithUserId() + }, + TC.prototype.getFilter = function () { + return this.manager.filter + }, + TC.prototype.getOctreeRoots = function (A) { + this.getModelDescriptor().getOctreeRoots(A) + }, + TC.prototype.getPickingMeshes = function (A, e, t, i) { + this._dealNonInstancedNodesForPicking(A, e, t, i), + this._dealInstancedNodesForPicking(A, e, t, i), + this._dealPluginNodesForPicking(A, e, t, i) + }, + TC.prototype._dealNonInstancedNodesForPicking = function (A, e, t, i) { + if (this._handler) { + var o = this._handler.defaultManager; + if (o.hasNodeInfo(this)) { + var n = o.getMeshManager().getPickingNodeGenerator().updatePickingMeshes(A.selectedMaterial, t, i); + n && e.meshes.push(n); + var r = o.getWireFrameManager().getPickingNodeGenerator().updatePickingMeshes(A.wireframeMaterial, t, i); + r && e.meshes.push(r) + } + } + }, + TC.prototype._dealInstancedNodesForPicking = function (A, e, t, i) { + if (this._handler) { + var o = this._handler.instancedManager; + if (o.hasNodeInfo(this)) { + var n = o.getMeshManager().getPickingNodeGenerator().updatePickingMeshes(A.instancedSelectedMaterial, t, i); + n && e.meshes.push(n); + var r = o.getWireFrameManager().getPickingNodeGenerator().updatePickingMeshes(A.instancedWireFrameMaterial, t, i); + r && e.meshes.push(r) + } + } + }, + TC.prototype._dealPluginNodesForPicking = function (A, e, t, i) { + if (this._handler) + for (var o = this.plugins, n = 0, r = o.length; r > n; n += 1) { + var a = o[n].getPickingNodeGenerator().updatePickingMeshes(A.selectedMaterial, t, i); + a && e.meshes.push(a) + } + }, + TC.prototype.onWSWorkerMessage = function () {}, + TC.prototype.onPDWorkerMessage = function () {}, + TC.prototype._overrideOcclusionMaterial = function (A) { + var e = A.material; + if (e && !1 === e.transparent) { + var t = this.manager.acquireMaterial(), + i = t.material; + e.color ? i.color.copy(e.color) : t.resetColor(), + i.opacity = vc.OcclusionOpacity, + A.material = i, + A.material.needsUpdate = !0 + } + }, + TC.prototype.showSkeleton = function (A) { + this.skeleton.visible = A + }, + TC.prototype.deactivateAllActions = function () { + this.needUpdate = !1, + this.actions.forEach((function (A) { + A.stop() + })) + }, + TC.prototype.activateAllActions = function () { + this.needUpdate = !0; + for (var A = 0; this.actions.length > A; A += 1) + this.setWeight(this.actions[A], 0 === A ? 1 : 0); + this.actions.forEach((function (A) { + A.play() + })) + }, + TC.prototype.pauseAllActions = function () { + this.needUpdate = !1, + this.actions.forEach((function (A) { + A.paused = !0 + })) + }, + TC.prototype.toSingleStepMode = function () { + this.unPauseAllActions(), + this.singleStepMode = !0, + this.sizeOfNextStep = this.settings["调整步长"] + }, + TC.prototype.pauseContinue = function () { + this.singleStepMode ? (this.singleStepMode = !1, + this.unPauseAllActions()) : this.paused ? (this.paused = !1, + this.unPauseAllActions()) : (this.paused = !0, + this.pauseAllActions()) + }, + TC.prototype.unPauseAllActions = function () { + this.needUpdate = !0, + this.actions.forEach((function (A) { + A.paused = !1 + })) + }, + TC.prototype.setWeight = function (A, e) { + A.enabled = !0, + A.setEffectiveTimeScale(1), + A.setEffectiveWeight(e) + }, + TC.prototype.modifyTimeScale = function (A) { + this.mixer.timeScale = A + }, + TC.prototype.createPanel = function () { + var A = this, + e = new $m({ + width: 300 + }).addFolder(this.modelKey), + t = e.addFolder("可见性"), + i = e.addFolder("激活/失活"), + o = e.addFolder("暂停/步进"), + n = e.addFolder("混合权重"), + r = e.addFolder("综合速度"); + this.settings = { + "显示模型": !0, + "显示骨骼": !1, + "关闭全部动画": this.deactivateAllActions.bind(A), + "激活所有动画": this.activateAllActions.bind(A), + "暂停/继续": this.pauseContinue.bind(A), + "单步动画": this.toSingleStepMode.bind(A), + "调整步长": .05, + "使用默认持续时间": !0, + "设置自定义持续时间": 3.5, + "modify idle weight": 0, + "modify walk weight": 1, + "modify run weight": 0, + "修改时间尺度": 1 + }; + var a = this.settings; + t.add(a, "显示模型").onChange(this.showModel.bind(A)), + t.add(a, "显示骨骼").onChange(this.showSkeleton.bind(A)), + i.add(a, "关闭全部动画"), + i.add(a, "激活所有动画"), + o.add(a, "暂停/继续"), + o.add(a, "单步动画"), + o.add(a, "调整步长", .01, .1, .001); + for (var s = this.actions, l = function (e) { + var t = s[e]._clip.name; + a[t] = 0 === e ? 1 : 0, + n.add(a, t, 0, 1, .01).listen().onChange((function (t) { + A.setWeight(s[e], t) + })) + }, c = 0; s.length > c; c += 1) + l(c); + r.add(a, "修改时间尺度", 0, 10, .01).onChange(this.modifyTimeScale.bind(A)), + t.open(), + i.open(), + o.open(), + n.open(), + r.open() + }, + TC.prototype.getTransformGroup = function () { + return this.transformGroup || (this.transformGroup = this.manager.scene.getOrCreateGroup(gp.TRANSFORM), + this.group.add(this.transformGroup), + this.transformGroup.updateMatrixWorld(!0)), + this.transformGroup + }, + TC.prototype.getComponentKeysBySubmodelKey = function (A) { + return this.submodel[A] || [] + }, + TC.prototype.getTrianglesCount = function () { + var A = 0, + e = 0, + t = 0, + i = 0, + o = {}; + return this.group.traverse((function (n) { + if (n.isMesh) { + var r = n.geometry, + a = r.getAttribute("position").count, + s = r.index.count / 3, + l = r.getAttribute("vState"); + o[r.id] || (t += a, + i += s, + o[r.id] = !0), + l && (a *= l.count, + s *= l.count), + A += a, + e += s + } + })), + o = null, { + positionsCount: A, + trianglesCount: e, + realPositionCount: t, + realTrianglesCount: i + } + }, + TC.prototype.addLights = function (A) { + this.lightGroup = this.lightGroup || new Xi, + this.group.add(this.lightGroup), + this.lightGroup.visible = !1; + for (var e = 0, t = A.length; t > e; e += 1) + this.lightGroup.add(A[e]), + A[e].updateMatrixWorld() + }, + TC.prototype.hasLights = function () { + return this.lightGroup && this.lightGroup.children.length > 0 + }, + TC.prototype.enabledLights = function () { + this.lightGroup.visible = !0 + }, + TC.prototype.disabledLights = function () { + this.lightGroup.visible = !1 + }, + Object.defineProperties(TC.prototype, { + modelConfig: { + get: function () { + return Bh.warn("EIMMODEL.Model: .modelConfig 现在为 .getConfig()"), + this.getConfig() + }, + set: function (A) { + this.setConfig(A) + } + }, + loader: { + get: function () { + return this._getHandler().loader + } + } + }); + var kC = { + getBoxFromTileBoundingVolumeBox: function (A) { + var e = new aA, + t = (new y).fromArray(A, 0), + i = new y; + return i.fromArray(A, 3), + i.add(t), + e.expandByPoint(i), + i.fromArray(A, 6), + i.add(t), + e.expandByPoint(i), + i.fromArray(A, 9), + i.add(t), + e.expandByPoint(i), + e + }, + getSphereFromTileBoundingVolumeSphere: function (A) { + return new cA((new y).fromArray(A, 0), A[3] || 0) + }, + getTransfrom: function (A) { + return Array.isArray(A) ? (new M).fromArray(A) : new M + }, + getSSE: function (A) { + var e = this.getBoxByComponentsKey(A), + t = this.viewerImpl.camera, + i = e.getCenter(new y), + o = e.getSize().length(), + n = this.viewerImpl.getRenderer().domElement.width, + r = t.fov; + return o * n / (2 * t.position.clone().sub(i).length() * Math.tan(r / 2)) + } + }, + DC = function (A) { + bC.call(this, A) + }; + + function LC(A, e, t) { + if (0 > e) + throw new Error("byteOffset cannot be negative."); + if (0 > t) + throw new Error("byteLength cannot be negative."); + if (e + t > A.byteLength) + throw new Error("sub-region exceeds array bounds."); + return A = A.subarray(e = e || 0, e + (t = t || A.byteLength - e)), + LC.decode(A) + } + + function NC(A, e, t) { + return A >= e && t >= A + } + (DC.prototype = Object.create(bC.prototype)).load = function (A) { + var e = this, + t = this.model, + i = t.dataUrl; + _d({ + type: "GET", + url: i.rootTilesUrl(), + headers: { + Authorization: t.accessToken + }, + success: function (o) { + var n = {}; + if ("string" == typeof o) + try { + n = JSON.parse(o) + } catch (A) { + return t.setEmptyScene(!0), + void t.dispatchEventEx({ + type: Rc.ON_LOAD_INVALID_SCENE, + modelKey: t.modelKey + }) + } + else + n = o; + if (n) { + if (vc.offLine) + e.model.getStorage().put(i.projectUrl(), n, e.model.modelKey, (function () {}), (function () {})); + e._parse(n), + t.dispatchEventEx({ + type: Rc.ON_LOAD_CONFIG_FINISH, + modelKey: t.modelKey + }), + A && A() + } else + Bh.log(t.modelKey, "config load error! ", n.message), + t.dispatchEventEx({ + type: Rc.ON_LOAD_ERROR, + modelKey: t.modelKey, + code: n.code, + message: n.message + }) + }, + error: function (A, e) { + switch (A) { + case 401: + t.dispatchEventEx({ + type: Rc.ACCOUNT_NO_EXIST, + modelKey: t.modelKey, + data: e + }); + break; + case 403: + t.dispatchEventEx({ + type: Rc.NO_PERMISSION, + modelKey: t.modelKey, + data: e + }); + break; + default: + t.dispatchEventEx({ + type: Rc.ON_NETWORK_ERROR, + modelKey: t.modelKey, + data: A + }) + } + } + }) + }, + DC.prototype._parse = function (A) { + this.config = A, + A.lengthUnit && (this.model.originalLengthUnit = A.lengthUnit || "m"), + this._toStatistics(A), + this._setTransformInfos(A), + this._chooseRendering(A) + }, + DC.prototype._setTransformInfos = function (A) { + this.model.hasAnimation = !1, + this.transformInfos.octreeTransformed = !1, + this.transformInfos.boundingBox && this.transformInfos.boundingBox.isBox3 || (this.transformInfos.boundingBox = kC.getBoxFromTileBoundingVolumeBox(A.root.boundingVolume.box)), + this.transformInfos.transformMatrix.compose(this.transformInfos.position, this.transformInfos.rotation, this.transformInfos.scale), + this.transformInfos.transformMatrix.fromArray(A.matrix || [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]), + this.model.setModelMatrix(this.transformInfos.transformMatrix), + this.model.manager.updateScene() + }, + LC.decodeWithTextDecoder = function (A) { + return new TextDecoder("utf-8").decode(A) + }, + LC.decodeWithFromCharCode = function (A) { + for (var e = "", t = function (A) { + for (var e = 0, t = 0, i = 0, o = 128, n = 191, r = [], a = A.length, s = 0; a > s; s += 1) { + var l = A[s]; + if (0 === i) { + if (NC(l, 0, 127)) { + r.push(l); + continue + } + if (NC(l, 194, 223)) { + i = 1, + e = 31 & l; + continue + } + if (NC(l, 224, 239)) { + 224 === l && (o = 160), + 237 === l && (n = 159), + i = 2, + e = 15 & l; + continue + } + if (NC(l, 240, 244)) { + 240 === l && (o = 144), + 244 === l && (n = 143), + i = 3, + e = 7 & l; + continue + } + throw new Error("String decoding failed.") + } + NC(l, o, n) ? (o = 128, + n = 191, + e = e << 6 | 63 & l, + (t += 1) === i && (r.push(e), + e = i = t = 0)) : (e = i = t = 0, + o = 128, + n = 191, + s -= 1) + } + return r + }(A), i = t.length, o = 0; i > o; o += 1) { + var n = t[o]; + n > 65535 ? (n -= 65536, + e += String.fromCharCode(55296 + (n >> 10), 56320 + (1023 & n))) : e += String.fromCharCode(n) + } + return e + }, + LC.decode = "undefined" != typeof TextDecoder ? LC.decodeWithTextDecoder : LC.decodeWithFromCharCode; + var OC = function () { + function A(A) { + Yr.call(this, A), + this.dracoLoader = null, + this.ddsLoader = null + } + + function e() { + var A = {}; + return { + get: function (e) { + return A[e] + }, + add: function (e, t) { + A[e] = t + }, + remove: function (e) { + delete A[e] + }, + removeAll: function () { + A = {} + } + } + } + A.prototype = Object.assign(Object.create(Yr.prototype), { + constructor: A, + load: function (A, e, t, i) { + var o, n = this; + o = "" !== this.resourcePath ? this.resourcePath : "" !== this.path ? this.path : La.extractUrlBase(A), + n.manager.itemStart(A); + var r = function (e) { + i ? i(e) : console.error(e), + n.manager.itemError(A), + n.manager.itemEnd(A) + }, + a = new bu(n.manager); + a.setPath(this.path), + a.setResponseType("arraybuffer"), + "use-credentials" === n.crossOrigin && a.setWithCredentials(!0), + a.load(A, (function (t) { + try { + n.parse(t, o, (function (t) { + e(t), + n.manager.itemEnd(A) + }), r) + } catch (A) { + r(A) + } + }), t, r) + }, + setDRACOLoader: function (A) { + return this.dracoLoader = A, + this + }, + setDDSLoader: function (A) { + return this.ddsLoader = A, + this + }, + parse: function (A, e, a, s) { + var l, c = {}; + if ("string" == typeof A) + l = A; + else { + var g = La.decodeText(new Uint8Array(A, 0, 4)); + if (g === r) { + try { + c[t.KHR_BINARY_GLTF] = new h(A) + } catch (A) { + return void(s && s(A)) + } + l = c[t.KHR_BINARY_GLTF].content + } else if ("b3dm" === g) { + try { + c[t.KHR_BINARY_GLTF] = new h(function (A) { + var e = 0; + e = 0; + var t = Uint32Array.BYTES_PER_ELEMENT, + i = new Uint8Array(A), + o = new DataView(A), + n = o.getUint32(e += t, !0); + if (1 !== n) + throw new Error("Only Batched 3D Model version 1 is supported. Version " + n + " is not."); + var r, a = o.getUint32(e += t, !0), + s = o.getUint32(e += t, !0), + l = o.getUint32(e += t, !0), + c = o.getUint32(e += t, !0), + h = o.getUint32(e += t, !0); + if (e += t, + 570425344 > c ? 570425344 > h || (e -= t, + r = c, + c = s, + h = l, + s = 0, + l = 0) : (e -= 2 * t, + r = s, + c = l, + h = 0, + s = 0, + l = 0), + 0 === s) + ({ + BATCH_LENGTH: r || 0 + }); + else { + var d = LC(i, e, s); + JSON.parse(d), + e += s + } + if (e += l, + c > 0) { + var p = LC(i, e, c); + JSON.parse(p), + e += c, + h > 0 && (e += h) + } + var g = 0 + a - e; + if (0 === g) + throw new Error("glTF byte length must be greater than 0."); + var u = null; + return e % 4 == 0 ? (new Uint8Array(A, e, g), + u = A.slice(e)) : (new Uint8Array(i.subarray(e, e + g)), + u = A.slice(e)), + u + }(A)) + } catch (A) { + return void(s && s(A)) + } + l = c[t.KHR_BINARY_GLTF].content + } else + l = La.decodeText(new Uint8Array(A)) + } + var m = JSON.parse(l); + if (void 0 === m.asset || m.asset.version[0] < 2) + s && s(new Error("THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported.")); + else { + if (m.extensionsUsed) + for (var C = 0; m.extensionsUsed.length > C; ++C) { + var y = m.extensionsUsed[C], + v = m.extensionsRequired || []; + switch (y) { + case t.KHR_LIGHTS_PUNCTUAL: + c[y] = new o(m); + break; + case t.KHR_MATERIALS_UNLIT: + c[y] = new n; + break; + case t.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS: + c[y] = new u; + break; + case t.KHR_DRACO_MESH_COMPRESSION: + c[y] = new d(m, this.dracoLoader); + break; + case t.MSFT_TEXTURE_DDS: + c[y] = new i(this.ddsLoader); + break; + case t.KHR_TEXTURE_TRANSFORM: + c[y] = new p; + break; + case t.KHR_MESH_QUANTIZATION: + c[y] = new f; + break; + default: + 0 > v.indexOf(y) || console.warn('THREE.GLTFLoader: Unknown extension "' + y + '".') + } + } + new q(m, c, { + path: e || this.resourcePath || "", + crossOrigin: this.crossOrigin, + manager: this.manager + }).parse(a, s) + } + } + }); + var t = { + KHR_BINARY_GLTF: "KHR_binary_glTF", + KHR_DRACO_MESH_COMPRESSION: "KHR_draco_mesh_compression", + KHR_LIGHTS_PUNCTUAL: "KHR_lights_punctual", + KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS: "KHR_materials_pbrSpecularGlossiness", + KHR_MATERIALS_UNLIT: "KHR_materials_unlit", + KHR_TEXTURE_TRANSFORM: "KHR_texture_transform", + KHR_MESH_QUANTIZATION: "KHR_mesh_quantization", + MSFT_TEXTURE_DDS: "MSFT_texture_dds" + }; + + function i(A) { + if (!A) + throw new Error("THREE.GLTFLoader: Attempting to load .dds texture without importing DDSLoader"); + this.name = t.MSFT_TEXTURE_DDS, + this.ddsLoader = A + } + + function o(A) { + this.name = t.KHR_LIGHTS_PUNCTUAL, + this.lightDefs = (A.extensions && A.extensions[t.KHR_LIGHTS_PUNCTUAL] || {}).lights || [] + } + + function n() { + this.name = t.KHR_MATERIALS_UNLIT + } + o.prototype.loadLight = function (A) { + var e, t = this.lightDefs[A], + i = new LA(16777215); + void 0 !== t.color && i.fromArray(t.color); + var o = void 0 !== t.range ? t.range : 0; + switch (t.type) { + case "directional": + (e = new Ra(i)).target.position.set(0, 0, -1), + e.add(e.target); + break; + case "point": + (e = new Fa(i)).distance = o; + break; + case "spot": + (e = new ba(i)).distance = o, + t.spot = t.spot || {}, + t.spot.innerConeAngle = void 0 !== t.spot.innerConeAngle ? t.spot.innerConeAngle : 0, + t.spot.outerConeAngle = void 0 !== t.spot.outerConeAngle ? t.spot.outerConeAngle : Math.PI / 4, + e.angle = t.spot.outerConeAngle, + e.penumbra = 1 - t.spot.innerConeAngle / t.spot.outerConeAngle, + e.target.position.set(0, 0, -1), + e.add(e.target); + break; + default: + throw new Error('THREE.GLTFLoader: Unexpected light type, "' + t.type + '".') + } + return e.position.set(0, 0, 0), + e.decay = 2, + void 0 !== t.intensity && (e.intensity = t.intensity), + e.name = t.name || "light_" + A, + Promise.resolve(e) + }, + n.prototype.getMaterialType = function () { + return jA + }, + n.prototype.extendParams = function (A, e, t) { + var i = []; + A.color = new LA(1, 1, 1), + A.opacity = 1; + var o = e.pbrMetallicRoughness; + if (o) { + if (Array.isArray(o.baseColorFactor)) { + var n = o.baseColorFactor; + A.color.fromArray(n), + A.opacity = n[3] + } + void 0 !== o.baseColorTexture && i.push(t.assignTexture(A, "map", o.baseColorTexture)) + } + return Promise.all(i) + }; + var r = "glTF", + l = 1313821514, + c = 5130562; + + function h(A) { + this.name = t.KHR_BINARY_GLTF, + this.content = null, + this.body = null; + var e = new DataView(A, 0, 12); + if (this.header = { + magic: La.decodeText(new Uint8Array(A.slice(0, 4))), + version: e.getUint32(4, !0), + length: e.getUint32(8, !0) + }, + this.header.magic !== r) + throw new Error("THREE.GLTFLoader: Unsupported glTF-Binary header."); + if (2 > this.header.version) + throw new Error("THREE.GLTFLoader: Legacy binary file detected."); + for (var i = new DataView(A, 12), o = 0; i.byteLength > o;) { + var n = i.getUint32(o, !0), + a = i.getUint32(o += 4, !0); + if (o += 4, + a === l) { + var s = new Uint8Array(A, 12 + o, n); + this.content = La.decodeText(s) + } else if (a === c) { + var h = 12 + o; + this.body = A.slice(h, h + n) + } + o += n + } + if (null === this.content) + throw new Error("THREE.GLTFLoader: JSON content not found.") + } + + function d(A, e) { + if (!e) + throw new Error("THREE.GLTFLoader: No DRACOLoader instance provided."); + this.name = t.KHR_DRACO_MESH_COMPRESSION, + this.json = A, + this.dracoLoader = e, + this.dracoLoader.preload() + } + + function p() { + this.name = t.KHR_TEXTURE_TRANSFORM + } + + function g(A) { + yr.call(this), + this.isGLTFSpecularGlossinessMaterial = !0; + var e = ["#ifdef USE_SPECULARMAP", "\tuniform sampler2D specularMap;", "#endif"].join("\n"), + t = ["#ifdef USE_GLOSSINESSMAP", "\tuniform sampler2D glossinessMap;", "#endif"].join("\n"), + i = ["vec3 specularFactor = specular;", "#ifdef USE_SPECULARMAP", "\tvec4 texelSpecular = texture2D( specularMap, vUv );", "\ttexelSpecular = sRGBToLinear( texelSpecular );", "\t// reads channel RGB, compatible with a glTF Specular-Glossiness (RGBA) texture", "\tspecularFactor *= texelSpecular.rgb;", "#endif"].join("\n"), + o = ["float glossinessFactor = glossiness;", "#ifdef USE_GLOSSINESSMAP", "\tvec4 texelGlossiness = texture2D( glossinessMap, vUv );", "\t// reads channel A, compatible with a glTF Specular-Glossiness (RGBA) texture", "\tglossinessFactor *= texelGlossiness.a;", "#endif"].join("\n"), + n = ["PhysicalMaterial material;", "material.diffuseColor = diffuseColor.rgb;", "vec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );", "float geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );", "material.specularRoughness = max( 1.0 - glossinessFactor, 0.0525 );// 0.0525 corresponds to the base mip of a 256 cubemap.", "material.specularRoughness += geometryRoughness;", "material.specularRoughness = min( material.specularRoughness, 1.0 );", "material.specularColor = specularFactor.rgb;"].join("\n"), + r = { + specular: { + value: (new LA).setHex(16777215) + }, + glossiness: { + value: 1 + }, + specularMap: { + value: null + }, + glossinessMap: { + value: null + } + }; + this._extraUniforms = r, + this.onBeforeCompile = function (A) { + for (var a in r) + A.uniforms[a] = r[a]; + A.fragmentShader = A.fragmentShader.replace("uniform float roughness;", "uniform vec3 specular;"), + A.fragmentShader = A.fragmentShader.replace("uniform float metalness;", "uniform float glossiness;"), + A.fragmentShader = A.fragmentShader.replace("#include ", e), + A.fragmentShader = A.fragmentShader.replace("#include ", t), + A.fragmentShader = A.fragmentShader.replace("#include ", i), + A.fragmentShader = A.fragmentShader.replace("#include ", o), + A.fragmentShader = A.fragmentShader.replace("#include ", n) + }, + Object.defineProperties(this, { + specular: { + get: function () { + return r.specular.value + }, + set: function (A) { + r.specular.value = A + } + }, + specularMap: { + get: function () { + return r.specularMap.value + }, + set: function (A) { + r.specularMap.value = A + } + }, + glossiness: { + get: function () { + return r.glossiness.value + }, + set: function (A) { + r.glossiness.value = A + } + }, + glossinessMap: { + get: function () { + return r.glossinessMap.value + }, + set: function (A) { + r.glossinessMap.value = A, + A ? (this.defines.USE_GLOSSINESSMAP = "", + this.defines.USE_ROUGHNESSMAP = "") : (delete this.defines.USE_ROUGHNESSMAP, + delete this.defines.USE_GLOSSINESSMAP) + } + } + }), + delete this.metalness, + delete this.roughness, + delete this.metalnessMap, + delete this.roughnessMap, + this.setValues(A) + } + + function u() { + return { + name: t.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS, + specularGlossinessParams: ["color", "map", "lightMap", "lightMapIntensity", "aoMap", "aoMapIntensity", "emissive", "emissiveIntensity", "emissiveMap", "bumpMap", "bumpScale", "normalMap", "normalMapType", "displacementMap", "displacementScale", "displacementBias", "specularMap", "specular", "glossinessMap", "glossiness", "alphaMap", "envMap", "envMapIntensity", "refractionRatio"], + getMaterialType: function () { + return g + }, + extendParams: function (A, e, t) { + var i = e.extensions[this.name]; + A.color = new LA(1, 1, 1), + A.opacity = 1; + var o = []; + if (Array.isArray(i.diffuseFactor)) { + var n = i.diffuseFactor; + A.color.fromArray(n), + A.opacity = n[3] + } + if (void 0 !== i.diffuseTexture && o.push(t.assignTexture(A, "map", i.diffuseTexture)), + A.emissive = new LA(0, 0, 0), + A.glossiness = void 0 !== i.glossinessFactor ? i.glossinessFactor : 1, + A.specular = new LA(1, 1, 1), + Array.isArray(i.specularFactor) && A.specular.fromArray(i.specularFactor), + void 0 !== i.specularGlossinessTexture) { + var r = i.specularGlossinessTexture; + o.push(t.assignTexture(A, "glossinessMap", r)), + o.push(t.assignTexture(A, "specularMap", r)) + } + return Promise.all(o) + }, + createMaterial: function (A) { + var e = new g(A); + return e.fog = !0, + e.color = A.color, + e.map = void 0 === A.map ? null : A.map, + e.lightMap = null, + e.lightMapIntensity = 1, + e.aoMap = void 0 === A.aoMap ? null : A.aoMap, + e.aoMapIntensity = 1, + e.emissive = A.emissive, + e.emissiveIntensity = 1, + e.emissiveMap = void 0 === A.emissiveMap ? null : A.emissiveMap, + e.bumpMap = void 0 === A.bumpMap ? null : A.bumpMap, + e.bumpScale = 1, + e.normalMap = void 0 === A.normalMap ? null : A.normalMap, + e.normalMapType = 0, + A.normalScale && (e.normalScale = A.normalScale), + e.displacementMap = null, + e.displacementScale = 1, + e.displacementBias = 0, + e.specularMap = void 0 === A.specularMap ? null : A.specularMap, + e.specular = A.specular, + e.glossinessMap = void 0 === A.glossinessMap ? null : A.glossinessMap, + e.glossiness = A.glossiness, + e.alphaMap = null, + e.envMap = void 0 === A.envMap ? null : A.envMap, + e.envMapIntensity = 1, + e.refractionRatio = .98, + e + } + } + } + + function f() { + this.name = t.KHR_MESH_QUANTIZATION + } + + function m(A, e, t, i) { + Ur.call(this, A, e, t, i) + } + d.prototype.decodePrimitive = function (A, e) { + var t = this.json, + i = this.dracoLoader, + o = A.extensions[this.name].bufferView, + n = A.extensions[this.name].attributes, + r = {}, + a = {}, + s = {}; + for (var l in n) { + var c = K[l] || l.toLowerCase(); + r[c] = n[l] + } + for (l in A.attributes) { + c = K[l] || l.toLowerCase(); + if (void 0 !== n[l]) { + var h = t.accessors[A.attributes[l]]; + s[c] = w[h.componentType], + a[c] = !0 === h.normalized + } + } + return e.getDependency("bufferView", o).then((function (A) { + return new Promise((function (e) { + i.decodeDracoFile(A, (function (A) { + for (var t in A.attributes) { + var i = a[t]; + void 0 !== i && (A.attributes[t].normalized = i) + } + e(A) + }), r, s) + })) + })) + }, + p.prototype.extendTexture = function (A, e) { + return A = A.clone(), + void 0 !== e.offset && A.offset.fromArray(e.offset), + void 0 !== e.rotation && (A.rotation = e.rotation), + void 0 !== e.scale && A.repeat.fromArray(e.scale), + void 0 !== e.texCoord && console.warn('THREE.GLTFLoader: Custom UV sets in "' + this.name + '" extension not yet supported.'), + A.needsUpdate = !0, + A + }, + (g.prototype = Object.create(yr.prototype)).constructor = g, + g.prototype.copy = function (A) { + return yr.prototype.copy.call(this, A), + this.specularMap = A.specularMap, + this.specular.copy(A.specular), + this.glossinessMap = A.glossinessMap, + this.glossiness = A.glossiness, + delete this.metalness, + delete this.roughness, + delete this.metalnessMap, + delete this.roughnessMap, + this + }, + (m.prototype = Object.create(Ur.prototype)).constructor = m, + m.prototype.beforeStart_ = m.prototype.copySampleValue_ = function (A) { + for (var e = this.resultBuffer, t = this.sampleValues, i = this.valueSize, o = A * i * 3 + i, n = 0; n !== i; n++) + e[n] = t[o + n]; + return e + }, + m.prototype.afterEnd_ = m.prototype.copySampleValue_, + m.prototype.interpolate_ = function (A, e, t, i) { + for (var o = this.resultBuffer, n = this.sampleValues, r = this.valueSize, a = 2 * r, s = 3 * r, l = i - e, c = (t - e) / l, h = c * c, d = h * c, p = A * s, g = p - s, u = -2 * d + 3 * h, f = d - h, m = 1 - u, C = f - h + c, y = 0; y !== r; y++) { + o[y] = m * n[g + y + r] + C * (n[g + y + a] * l) + u * n[p + y + r] + f * (n[p + y] * l) + } + return o + }; + var C = 0, + v = 1, + I = 2, + E = 3, + B = 4, + x = 5, + S = 6, + w = { + 5120: Int8Array, + 5121: Uint8Array, + 5122: Int16Array, + 5123: Uint16Array, + 5125: Uint32Array, + 5126: Float32Array + }, + b = { + 9728: 1003, + 9729: 1006, + 9984: 1004, + 9985: 1007, + 9986: 1005, + 9987: 1008 + }, + U = { + 33071: 1001, + 33648: 1002, + 10497: 1e3 + }, + F = { + SCALAR: 1, + VEC2: 2, + VEC3: 3, + VEC4: 4, + MAT2: 4, + MAT3: 9, + MAT4: 16 + }, + K = { + POSITION: "position", + NORMAL: "normal", + TANGENT: "tangent", + TEXCOORD_0: "uv", + TEXCOORD_1: "uv2", + COLOR_0: "color", + WEIGHTS_0: "skinWeight", + JOINTS_0: "skinIndex" + }, + Q = { + scale: "scale", + translation: "position", + rotation: "quaternion", + weights: "morphTargetInfluences" + }, + R = { + CUBICSPLINE: void 0, + LINEAR: 2301, + STEP: 2300 + }, + T = "OPAQUE", + k = "MASK", + D = "BLEND", + L = { + "image/png": 1023, + "image/jpeg": 1022 + }; + + function N(A, e) { + return "string" != typeof A || "" === A ? "" : (/^https?:\/\//i.test(e) && /^\//.test(A) && (e = e.replace(/(^https?:\/\/[^\/]+).*/i, "$1")), + /^(https?:)?\/\//i.test(A) || /^data:.*,.*$/i.test(A) || /^blob:.*$/i.test(A) ? A : e + A) + } + + function O(A, e, t) { + for (var i in t.extensions) + void 0 === A[i] && (e.userData.gltfExtensions = e.userData.gltfExtensions || {}, + e.userData.gltfExtensions[i] = t.extensions[i]) + } + + function V(A, e) { + void 0 !== e.extras && ("object" === lc(e.extras) ? Object.assign(A.userData, e.extras) : console.warn("THREE.GLTFLoader: Ignoring primitive type .extras, " + e.extras)) + } + + function G(A, e) { + if (A.updateMorphTargets(), + void 0 !== e.weights) + for (var t = 0, i = e.weights.length; i > t; t++) + A.morphTargetInfluences[t] = e.weights[t]; + if (e.extras && Array.isArray(e.extras.targetNames)) { + var o = e.extras.targetNames; + if (A.morphTargetInfluences.length === o.length) { + A.morphTargetDictionary = {}; + for (t = 0, + i = o.length; i > t; t++) + A.morphTargetDictionary[o[t]] = t + } else + console.warn("THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.") + } + } + + function P(A) { + for (var e = "", t = Object.keys(A).sort(), i = 0, o = t.length; o > i; i++) + e += t[i] + ":" + A[t[i]] + ";"; + return e + } + + function q(A, t, i) { + this.json = A || {}, + this.extensions = t || {}, + this.options = i || {}, + this.cache = new e, + this.primitiveCache = {}, + this.textureLoader = new Aa(this.options.manager), + this.textureLoader.setCrossOrigin(this.options.crossOrigin), + this.fileLoader = new bu(this.options.manager), + this.fileLoader.setResponseType("arraybuffer"), + "use-credentials" === this.options.crossOrigin && this.fileLoader.setWithCredentials(!0) + } + + function j(A, e, t) { + var i = e.attributes, + o = []; + + function n(e, i) { + return t.getDependency("accessor", e).then((function (e) { + A.setAttribute(i, e) + })) + } + for (var r in i) { + var a = K[r] || r.toLowerCase(); + a in A.attributes || o.push(n(i[r], a)) + } + if (void 0 !== e.indices && !A.index) { + var s = t.getDependency("accessor", e.indices).then((function (e) { + A.setIndex(e) + })); + o.push(s) + } + return V(A, e), + function (A, e, t) { + var i = e.attributes, + o = new aA; + if (void 0 !== i.POSITION) { + var n = (h = t.json.accessors[i.POSITION]).max; + if (void 0 !== (d = h.min) && void 0 !== n) { + o.set(new y(d[0], d[1], d[2]), new y(n[0], n[1], n[2])); + var r = e.targets; + if (void 0 !== r) + for (var a = new y, s = 0, l = r.length; l > s; s++) { + var c = r[s]; + if (void 0 !== c.POSITION) { + var h, d; + n = (h = t.json.accessors[c.POSITION]).max; + void 0 !== (d = h.min) && void 0 !== n ? (a.setX(Math.max(Math.abs(d[0]), Math.abs(n[0]))), + a.setY(Math.max(Math.abs(d[1]), Math.abs(n[1]))), + a.setZ(Math.max(Math.abs(d[2]), Math.abs(n[2]))), + o.expandByVector(a)) : console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.") + } + } + A.boundingBox = o; + var p = new cA; + o.getCenter(p.center), + p.radius = o.min.distanceTo(o.max) / 2, + A.boundingSphere = p + } else + console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.") + } + }(A, e, t), + Promise.all(o).then((function () { + return void 0 !== e.targets ? function (A, e, t) { + for (var i = !1, o = !1, n = 0, r = e.length; r > n; n++) { + if (void 0 !== (l = e[n]).POSITION && (i = !0), + void 0 !== l.NORMAL && (o = !0), + i && o) + break + } + if (!i && !o) + return Promise.resolve(A); + var a = [], + s = []; + for (n = 0, + r = e.length; r > n; n++) { + var l = e[n]; + if (i) { + var c = void 0 !== l.POSITION ? t.getDependency("accessor", l.POSITION) : A.attributes.position; + a.push(c) + } + if (o) { + c = void 0 !== l.NORMAL ? t.getDependency("accessor", l.NORMAL) : A.attributes.normal; + s.push(c) + } + } + return Promise.all([Promise.all(a), Promise.all(s)]).then((function (e) { + var t = e[1]; + return i && (A.morphAttributes.position = e[0]), + o && (A.morphAttributes.normal = t), + A.morphTargetsRelative = !0, + A + })) + }(A, e.targets, t) : A + })) + } + + function Y(A, e) { + var t = A.getIndex(); + if (null === t) { + var i = [], + o = A.getAttribute("position"); + if (void 0 === o) + return console.error("THREE.GLTFLoader.toTrianglesDrawMode(): Undefined position attribute. Processing not possible."), + A; + for (var n = 0; o.count > n; n++) + i.push(n); + A.setIndex(i), + t = A.getIndex() + } + var r = t.count - 2, + a = []; + if (2 === e) + for (n = 1; r >= n; n++) + a.push(t.getX(0)), + a.push(t.getX(n)), + a.push(t.getX(n + 1)); + else + for (n = 0; r > n; n++) + n % 2 == 0 ? (a.push(t.getX(n)), + a.push(t.getX(n + 1)), + a.push(t.getX(n + 2))) : (a.push(t.getX(n + 2)), + a.push(t.getX(n + 1)), + a.push(t.getX(n))); + a.length / 3 !== r && console.error("THREE.GLTFLoader.toTrianglesDrawMode(): Unable to generate correct amount of triangles."); + var s = A.clone(); + return s.setIndex(a), + s + } + return q.prototype.parse = function (A, e) { + var t = this, + i = this.json, + o = this.extensions; + this.cache.removeAll(), + this.markDefs(), + Promise.all([this.getDependencies("scene"), this.getDependencies("animation"), this.getDependencies("camera")]).then((function (e) { + var n = { + scene: e[0][i.scene || 0], + scenes: e[0], + animations: e[1], + cameras: e[2], + asset: i.asset, + parser: t, + userData: {} + }; + O(o, n, i), + V(n, i), + A(n) + })).catch(e) + }, + q.prototype.markDefs = function () { + for (var A = this.json.nodes || [], e = this.json.skins || [], t = this.json.meshes || [], i = {}, o = {}, n = 0, r = e.length; r > n; n++) + for (var a = e[n].joints, s = 0, l = a.length; l > s; s++) + A[a[s]].isBone = !0; + for (var c = 0, h = A.length; h > c; c++) { + var d = A[c]; + void 0 !== d.mesh && (void 0 === i[d.mesh] && (i[d.mesh] = o[d.mesh] = 0), + i[d.mesh]++, + void 0 !== d.skin && (t[d.mesh].isSkinnedMesh = !0)) + } + this.json.meshReferences = i, + this.json.meshUses = o + }, + q.prototype.getDependency = function (A, e) { + var i = A + ":" + e, + o = this.cache.get(i); + if (!o) { + switch (A) { + case "scene": + o = this.loadScene(e); + break; + case "node": + o = this.loadNode(e); + break; + case "mesh": + o = this.loadMesh(e); + break; + case "accessor": + o = this.loadAccessor(e); + break; + case "bufferView": + o = this.loadBufferView(e); + break; + case "buffer": + o = this.loadBuffer(e); + break; + case "material": + o = this.loadMaterial(e); + break; + case "texture": + o = this.loadTexture(e); + break; + case "skin": + o = this.loadSkin(e); + break; + case "animation": + o = this.loadAnimation(e); + break; + case "camera": + o = this.loadCamera(e); + break; + case "light": + o = this.extensions[t.KHR_LIGHTS_PUNCTUAL].loadLight(e); + break; + default: + throw new Error("Unknown type: " + A) + } + this.cache.add(i, o) + } + return o + }, + q.prototype.getDependencies = function (A) { + var e = this.cache.get(A); + if (!e) { + var t = this; + e = Promise.all((this.json[A + ("mesh" === A ? "es" : "s")] || []).map((function (e, i) { + return t.getDependency(A, i) + }))), + this.cache.add(A, e) + } + return e + }, + q.prototype.loadBuffer = function (A) { + var e = this.json.buffers[A], + i = this.fileLoader; + if (e.type && "arraybuffer" !== e.type) + throw new Error("THREE.GLTFLoader: " + e.type + " buffer type is not supported."); + if (void 0 === e.uri && 0 === A) + return Promise.resolve(this.extensions[t.KHR_BINARY_GLTF].body); + var o = this.options; + return new Promise((function (A, t) { + i.load(N(e.uri, o.path), A, void 0, (function () { + t(new Error('THREE.GLTFLoader: Failed to load buffer "' + e.uri + '".')) + })) + })) + }, + q.prototype.loadBufferView = function (A) { + var e = this.json.bufferViews[A]; + return this.getDependency("buffer", e.buffer).then((function (A) { + var t = e.byteOffset || 0; + return A.slice(t, t + (e.byteLength || 0)) + })) + }, + q.prototype.loadAccessor = function (A) { + var e = this, + t = this.json, + i = this.json.accessors[A]; + if (void 0 === i.bufferView && void 0 === i.sparse) + return Promise.resolve(null); + var o = []; + return o.push(void 0 !== i.bufferView ? this.getDependency("bufferView", i.bufferView) : null), + void 0 !== i.sparse && (o.push(this.getDependency("bufferView", i.sparse.indices.bufferView)), + o.push(this.getDependency("bufferView", i.sparse.values.bufferView))), + Promise.all(o).then((function (A) { + var o, n = A[0], + r = F[i.type], + a = w[i.componentType], + s = a.BYTES_PER_ELEMENT, + l = i.byteOffset || 0, + c = void 0 !== i.bufferView ? t.bufferViews[i.bufferView].byteStride : void 0, + h = !0 === i.normalized; + if (c && c !== s * r) { + var d = Math.floor(l / c), + p = "InterleavedBuffer:" + i.bufferView + ":" + i.componentType + ":" + d + ":" + i.count, + g = e.cache.get(p); + g || (g = new to(new a(n, d * c, i.count * c / s), c / s), + e.cache.add(p, g)), + o = new no(g, r, l % c / s, h) + } else + o = new YA(null === n ? new a(i.count * r) : new a(n, l, i.count * r), r, h); + if (void 0 !== i.sparse) { + var u = i.sparse.values.byteOffset || 0, + f = new(0, + w[i.sparse.indices.componentType])(A[1], i.sparse.indices.byteOffset || 0, i.sparse.count * F.SCALAR), + m = new a(A[2], u, i.sparse.count * r); + null !== n && (o = new YA(o.array.slice(), o.itemSize, o.normalized)); + for (var C = 0, y = f.length; y > C; C++) { + var v = f[C]; + if (o.setX(v, m[C * r]), + 2 > r || o.setY(v, m[C * r + 1]), + 3 > r || o.setZ(v, m[C * r + 2]), + 4 > r || o.setW(v, m[C * r + 3]), + r >= 5) + throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.") + } + } + return o + })) + }, + q.prototype.loadTexture = function (A) { + var e, i = this, + o = this.json, + n = this.options, + r = this.textureLoader, + a = window.URL || window.webkitURL, + s = o.textures[A], + l = s.extensions || {}, + c = (e = l[t.MSFT_TEXTURE_DDS] ? o.images[l[t.MSFT_TEXTURE_DDS].source] : o.images[s.source]).uri, + h = !1; + return void 0 !== e.bufferView && (c = i.getDependency("bufferView", e.bufferView).then((function (A) { + h = !0; + var t = new Blob([A], { + type: e.mimeType + }); + return c = a.createObjectURL(t) + }))), + Promise.resolve(c).then((function (A) { + var e = n.manager.getHandler(A); + return e || (e = l[t.MSFT_TEXTURE_DDS] ? i.extensions[t.MSFT_TEXTURE_DDS].ddsLoader : r), + new Promise((function (t, i) { + e.load(N(A, n.path), t, void 0, i) + })) + })).then((function (A) { + !0 === h && a.revokeObjectURL(c), + A.flipY = !1, + s.name && (A.name = s.name), + e.mimeType in L && (A.format = L[e.mimeType]); + var t = (o.samplers || {})[s.sampler] || {}; + return A.magFilter = b[t.magFilter] || 1006, + A.minFilter = b[t.minFilter] || 1008, + A.wrapS = U[t.wrapS] || 1e3, + A.wrapT = U[t.wrapT] || 1e3, + A + })) + }, + q.prototype.assignTexture = function (A, e, i) { + var o = this; + return this.getDependency("texture", i.index).then((function (n) { + if (!n.isCompressedTexture) + switch (e) { + case "aoMap": + case "emissiveMap": + case "metalnessMap": + case "normalMap": + case "roughnessMap": + n.format = 1022 + } + if (void 0 === i.texCoord || 0 == i.texCoord || "aoMap" === e && 1 == i.texCoord || console.warn("THREE.GLTFLoader: Custom UV set " + i.texCoord + " for texture " + e + " not yet supported."), + o.extensions[t.KHR_TEXTURE_TRANSFORM]) { + var r = void 0 !== i.extensions ? i.extensions[t.KHR_TEXTURE_TRANSFORM] : void 0; + r && (n = o.extensions[t.KHR_TEXTURE_TRANSFORM].extendTexture(n, r)) + } + A[e] = n + })) + }, + q.prototype.assignFinalMaterial = function (A) { + var e = A.geometry, + t = A.material, + i = void 0 !== e.attributes.tangent, + o = void 0 !== e.attributes.color, + n = void 0 === e.attributes.normal, + r = !0 === A.isSkinnedMesh, + a = Object.keys(e.morphAttributes).length > 0, + s = a && void 0 !== e.morphAttributes.normal; + if (A.isPoints) { + var l = this.cache.get(h = "PointsMaterial:" + t.uuid); + l || (l = new Yo, + qA.prototype.copy.call(l, t), + l.color.copy(t.color), + l.map = t.map, + l.sizeAttenuation = !1, + this.cache.add(h, l)), + t = l + } else if (A.isLine) { + var c = this.cache.get(h = "LineBasicMaterial:" + t.uuid); + c || (c = new ko, + qA.prototype.copy.call(c, t), + c.color.copy(t.color), + this.cache.add(h, c)), + t = c + } + if (i || o || n || r || a) { + var h = "ClonedMaterial:" + t.uuid + ":"; + t.isGLTFSpecularGlossinessMaterial && (h += "specular-glossiness:"), + r && (h += "skinning:"), + i && (h += "vertex-tangents:"), + o && (h += "vertex-colors:"), + n && (h += "flat-shading:"), + a && (h += "morph-targets:"), + s && (h += "morph-normals:"); + var d = this.cache.get(h); + d || (d = t.clone(), + r && (d.skinning = !0), + i && (d.vertexTangents = !0), + o && (d.vertexColors = !0), + n && (d.flatShading = !0), + a && (d.morphTargets = !0), + s && (d.morphNormals = !0), + this.cache.add(h, d)), + t = d + } + t.aoMap && void 0 === e.attributes.uv2 && void 0 !== e.attributes.uv && e.setAttribute("uv2", new YA(e.attributes.uv.array, 2)), + t.normalScale && !i && (t.normalScale.y = -t.normalScale.y), + A.material = t + }, + q.prototype.loadMaterial = function (A) { + var e, i = this.extensions, + o = this.json.materials[A], + n = {}, + r = o.extensions || {}, + a = []; + if (r[t.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS]) { + var l = i[t.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS]; + e = l.getMaterialType(), + a.push(l.extendParams(n, o, this)) + } else if (r[t.KHR_MATERIALS_UNLIT]) { + var c = i[t.KHR_MATERIALS_UNLIT]; + e = c.getMaterialType(), + a.push(c.extendParams(n, o, this)) + } else { + e = yr; + var h = o.pbrMetallicRoughness || {}; + if (n.color = new LA(1, 1, 1), + n.opacity = 1, + Array.isArray(h.baseColorFactor)) { + var d = h.baseColorFactor; + n.color.fromArray(d), + n.opacity = d[3] + } + void 0 !== h.baseColorTexture && a.push(this.assignTexture(n, "map", h.baseColorTexture)), + n.metalness = void 0 !== h.metallicFactor ? h.metallicFactor : 1, + n.roughness = void 0 !== h.roughnessFactor ? h.roughnessFactor : 1, + void 0 !== h.metallicRoughnessTexture && (a.push(this.assignTexture(n, "metalnessMap", h.metallicRoughnessTexture)), + a.push(this.assignTexture(n, "roughnessMap", h.metallicRoughnessTexture))) + }!0 === o.doubleSided && (n.side = 2); + var p = o.alphaMode || T; + return p === D ? (n.transparent = !0, + n.depthWrite = !1) : (n.transparent = !1, + p === k && (n.alphaTest = void 0 !== o.alphaCutoff ? o.alphaCutoff : .5)), + void 0 !== o.normalTexture && e !== jA && (a.push(this.assignTexture(n, "normalMap", o.normalTexture)), + n.normalScale = new s(1, 1), + void 0 !== o.normalTexture.scale && n.normalScale.set(o.normalTexture.scale, o.normalTexture.scale)), + void 0 !== o.occlusionTexture && e !== jA && (a.push(this.assignTexture(n, "aoMap", o.occlusionTexture)), + void 0 !== o.occlusionTexture.strength && (n.aoMapIntensity = o.occlusionTexture.strength)), + void 0 !== o.emissiveFactor && e !== jA && (n.emissive = (new LA).fromArray(o.emissiveFactor)), + void 0 !== o.emissiveTexture && e !== jA && a.push(this.assignTexture(n, "emissiveMap", o.emissiveTexture)), + Promise.all(a).then((function () { + var A; + return A = e === g ? i[t.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS].createMaterial(n) : new e(n), + o.name && (A.name = o.name), + A.map && (A.map.encoding = 3001), + A.emissiveMap && (A.emissiveMap.encoding = 3001), + V(A, o), + o.extensions && O(i, A, o), + A + })) + }, + q.prototype.loadGeometries = function (A) { + var e = this, + i = this.extensions, + o = this.primitiveCache; + + function n(A) { + return i[t.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(A, e).then((function (t) { + return j(t, A, e) + })) + } + for (var r, a, s = [], l = 0, c = A.length; c > l; l++) { + var h, d = A[l], + p = (a = void 0, + (a = (r = d).extensions && r.extensions[t.KHR_DRACO_MESH_COMPRESSION]) ? "draco:" + a.bufferView + ":" + a.indices + ":" + P(a.attributes) : r.indices + ":" + P(r.attributes) + ":" + r.mode), + g = o[p]; + if (g) + s.push(g.promise); + else + h = d.extensions && d.extensions[t.KHR_DRACO_MESH_COMPRESSION] ? n(d) : j(new he, d, e), + o[p] = { + primitive: d, + promise: h + }, + s.push(h) + } + return Promise.all(s) + }, + q.prototype.loadMesh = function (A) { + for (var e, t = this, i = this.json.meshes[A], o = i.primitives, n = [], r = 0, a = o.length; a > r; r++) { + var s = void 0 === o[r].material ? (void 0 === (e = this.cache).DefaultMaterial && (e.DefaultMaterial = new yr({ + color: 16777215, + emissive: 0, + metalness: 1, + roughness: 1, + transparent: !1, + depthTest: !0, + side: 0 + })), + e.DefaultMaterial) : this.getDependency("material", o[r].material); + n.push(s) + } + return n.push(t.loadGeometries(o)), + Promise.all(n).then((function (e) { + for (var n = e.slice(0, e.length - 1), r = e[e.length - 1], a = [], s = 0, l = r.length; l > s; s++) { + var c, h = r[s], + d = o[s], + p = n[s]; + if (d.mode === B || d.mode === x || d.mode === S || void 0 === d.mode) + !0 !== (c = !0 === i.isSkinnedMesh ? new So(h, p) : new Ue(h, p)).isSkinnedMesh || c.geometry.attributes.skinWeight.normalized || c.normalizeSkinWeights(), + d.mode === x ? c.geometry = Y(c.geometry, 1) : d.mode === S && (c.geometry = Y(c.geometry, 2)); + else if (d.mode === v) + c = new jo(h, p); + else if (d.mode === E) + c = new Go(h, p); + else if (d.mode === I) + c = new Ho(h, p); + else { + if (d.mode !== C) + throw new Error("THREE.GLTFLoader: Primitive mode unsupported: " + d.mode); + c = new Xo(h, p) + } + Object.keys(c.geometry.morphAttributes).length > 0 && G(c, i), + c.name = i.name || "mesh_" + A, + r.length > 1 && (c.name += "_" + s), + V(c, i), + t.assignFinalMaterial(c), + a.push(c) + } + if (1 === a.length) + return a[0]; + var g = new Xi; + for (s = 0, + l = a.length; l > s; s++) + g.add(a[s]); + return g + })) + }, + q.prototype.loadCamera = function (A) { + var e, t = this.json.cameras[A], + i = t[t.type]; + if (i) + return "perspective" === t.type ? e = new je(a.radToDeg(i.yfov), i.aspectRatio || 1, i.znear || 1, i.zfar || 2e6) : "orthographic" === t.type && (e = new Ka(i.xmag / -2, i.xmag / 2, i.ymag / 2, i.ymag / -2, i.znear, i.zfar)), + t.name && (e.name = t.name), + V(e, t), + Promise.resolve(e); + console.warn("THREE.GLTFLoader: Missing camera parameters.") + }, + q.prototype.loadSkin = function (A) { + var e = this.json.skins[A], + t = { + joints: e.joints + }; + return void 0 === e.inverseBindMatrices ? Promise.resolve(t) : this.getDependency("accessor", e.inverseBindMatrices).then((function (A) { + return t.inverseBindMatrices = A, + t + })) + }, + q.prototype.loadAnimation = function (A) { + for (var e = this.json.animations[A], t = [], i = [], o = [], n = [], r = [], a = 0, s = e.channels.length; s > a; a++) { + var l = e.channels[a], + c = e.samplers[l.sampler], + h = l.target, + d = void 0 !== e.parameters ? e.parameters[c.input] : c.input, + p = void 0 !== e.parameters ? e.parameters[c.output] : c.output; + t.push(this.getDependency("node", void 0 !== h.node ? h.node : h.id)), + i.push(this.getDependency("accessor", d)), + o.push(this.getDependency("accessor", p)), + n.push(c), + r.push(h) + } + return Promise.all([Promise.all(t), Promise.all(i), Promise.all(o), Promise.all(n), Promise.all(r)]).then((function (t) { + for (var i = t[0], o = t[1], n = t[2], r = t[3], a = t[4], s = [], l = 0, c = i.length; c > l; l++) { + var h = i[l], + d = o[l], + p = n[l], + g = r[l], + u = a[l]; + if (void 0 !== h) { + var f; + switch (h.updateMatrix(), + h.matrixAutoUpdate = !0, + Q[u.path]) { + case Q.weights: + f = Dr; + break; + case Q.rotation: + f = Nr; + break; + case Q.position: + case Q.scale: + default: + f = Vr + } + var C = h.name ? h.name : h.uuid, + y = void 0 !== g.interpolation ? R[g.interpolation] : 2301, + v = []; + Q[u.path] === Q.weights ? h.traverse((function (A) { + !0 === A.isMesh && A.morphTargetInfluences && v.push(A.name ? A.name : A.uuid) + })) : v.push(C); + var I = p.array; + if (p.normalized) { + var E; + if (I.constructor === Int8Array) + E = 1 / 127; + else if (I.constructor === Uint8Array) + E = 1 / 255; + else if (I.constructor == Int16Array) + E = 1 / 32767; + else { + if (I.constructor !== Uint16Array) + throw new Error("THREE.GLTFLoader: Unsupported output accessor component type."); + E = 1 / 65535 + } + for (var B = new Float32Array(I.length), x = 0, S = I.length; S > x; x++) + B[x] = I[x] * E; + I = B + } + for (x = 0, + S = v.length; S > x; x++) { + var w = new f(v[x] + "." + Q[u.path], d.array, I, y); + "CUBICSPLINE" === g.interpolation && (w.createInterpolant = function (A) { + return new m(this.times, this.values, this.getValueSize() / 3, A) + }, + w.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline = !0), + s.push(w) + } + } + } + return new Gr(e.name ? e.name : "animation_" + A, void 0, s) + })) + }, + q.prototype.loadNode = function (A) { + var e, i = this.json, + o = this.extensions, + n = this, + r = i.meshReferences, + a = i.meshUses, + s = i.nodes[A]; + return (e = [], + void 0 !== s.mesh && e.push(n.getDependency("mesh", s.mesh).then((function (A) { + var e; + if (r[s.mesh] > 1) { + var t = a[s.mesh]++; + (e = A.clone()).name += "_instance_" + t + } else + e = A; + return void 0 !== s.weights && e.traverse((function (A) { + if (A.isMesh) + for (var e = 0, t = s.weights.length; t > e; e++) + A.morphTargetInfluences[e] = s.weights[e] + })), + e + }))), + void 0 !== s.camera && e.push(n.getDependency("camera", s.camera)), + s.extensions && s.extensions[t.KHR_LIGHTS_PUNCTUAL] && void 0 !== s.extensions[t.KHR_LIGHTS_PUNCTUAL].light && e.push(n.getDependency("light", s.extensions[t.KHR_LIGHTS_PUNCTUAL].light)), + Promise.all(e)).then((function (A) { + var e; + if ((e = !0 === s.isBone ? new Uo : A.length > 1 ? new Xi : 1 === A.length ? A[0] : new H) !== A[0]) + for (var t = 0, i = A.length; i > t; t++) + e.add(A[t]); + if (s.name && (e.userData.name = s.name, + e.name = Fs.sanitizeNodeName(s.name)), + V(e, s), + s.extensions && O(o, e, s), + void 0 !== s.matrix) { + var n = new M; + n.fromArray(s.matrix), + e.applyMatrix4(n) + } else + void 0 !== s.translation && e.position.fromArray(s.translation), + void 0 !== s.rotation && e.quaternion.fromArray(s.rotation), + void 0 !== s.scale && e.scale.fromArray(s.scale); + return e + })) + }, + q.prototype.loadScene = function () { + function A(e, t, i, o) { + var n = i.nodes[e]; + return o.getDependency("node", e).then((function (A) { + return void 0 === n.skin ? A : o.getDependency("skin", n.skin).then((function (A) { + for (var t = [], i = 0, n = (e = A).joints.length; n > i; i++) + t.push(o.getDependency("node", e.joints[i])); + return Promise.all(t) + })).then((function (t) { + return A.traverse((function (A) { + if (A.isMesh) { + for (var i = [], o = [], n = 0, r = t.length; r > n; n++) { + var a = t[n]; + if (a) { + i.push(a); + var s = new M; + void 0 !== e.inverseBindMatrices && s.fromArray(e.inverseBindMatrices.array, 16 * n), + o.push(s) + } else + console.warn('THREE.GLTFLoader: Joint "%s" could not be found.', e.joints[n]) + } + A.bind(new bo(i, o), A.matrixWorld) + } + })), + A + })); + var e + })).then((function (e) { + t.add(e); + var r = []; + if (n.children) + for (var a = n.children, s = 0, l = a.length; l > s; s++) { + r.push(A(a[s], e, i, o)) + } + return Promise.all(r) + })) + } + return function (e) { + var t = this.json, + i = this.extensions, + o = this.json.scenes[e], + n = new Xi; + o.name && (n.name = o.name), + V(n, o), + o.extensions && O(i, n, o); + for (var r = o.nodes || [], a = [], s = 0, l = r.length; l > s; s++) + a.push(A(r[s], n, t, this)); + return Promise.all(a).then((function () { + return n + })) + } + }(), + A + }(), + VC = "REPLACE", + GC = function A(e, t, i, o) { + H.call(this); + if (this.isRoot = o || !1, + o || (this.matrix = kC.getTransfrom(i.transform)), + this.refine = i.refine || VC, + this.geometricError = i.geometricError || 0, + this.boundingBox = kC.getBoxFromTileBoundingVolumeBox(i.boundingVolume.box), + this.scene = null, + this.model = e, + this.json = i, + this.level = t && t.level + 1 || 0, + this.matrixAutoUpdate = !1, + this.hasB3DM = !1, + i.content && (i.content.url.endsWith("json") ? this.loadContent(i.content.url) : i.content.url.endsWith("b3dm") && (this.hasB3DM = !0, + this.model.tilesList[i.content.url] = this, + t && t.hasB3DM || (this.firstB3DM = !0, + this.loadB3DM(i.content.url)))), + i.children) + for (var n = 0, r = i.children.length; r > n; n += 1) + this.add(new A(e, this, i.children[n])) + }; + (GC.prototype = Object.create(H.prototype)).loadContent = function (A) { + var e = this, + t = e.model, + i = t.dataUrl.tilesUrl(A); + + function o() { + var A = t.fileLoader; + A.setResponseType("json"), + A.setCacheViable(!0), + A.setRequestHeader({ + Authorization: t.accessToken + }), + A.load(i, (function (A) { + var i = {}; + if ("string" == typeof A) + try { + i = JSON.parse(A) + } catch (A) { + return void t.dispatchEventEx({ + type: Rc.ON_LOAD_INVALID_DATA, + modelKey: t.modelKey + }) + } + else + i = A; + e.add(new GC(t, parent, i.root, parent.level + 1, !0)) + }), (function (A, e) { + switch (A) { + case 401: + t.dispatchEventEx({ + type: Rc.ACCOUNT_NO_EXIST, + modelKey: t.modelKey, + data: e + }); + break; + case 403: + t.dispatchEventEx({ + type: Rc.NO_PERMISSION, + modelKey: t.modelKey, + data: e + }); + break; + default: + t.dispatchEventEx({ + type: Rc.ON_NETWORK_ERROR, + modelKey: t.modelKey, + data: A + }) + } + })) + } + if (vc.getDataFromIndexedDB) { + var n = t.getStorage(); + n && n.get(i, (function (A) { + if (A) { + var i = {}; + if ("string" == typeof A) + try { + i = JSON.parse(A) + } catch (A) { + return void t.dispatchEventEx({ + type: Rc.ON_LOAD_INVALID_DATA, + modelKey: t.modelKey + }) + } + else + i = A; + e.add(new GC(t, parent, i.root, !0)) + } else + o() + }), (function () { + o() + })) + } else + o() + }, + GC.prototype.loadB3DM = function (A) { + var e = this, + t = e.model; + e.loaderManager = new wu, + e.loaderManager.model = t; + var i = new OC(e.loaderManager); + + function o(A) { + e.scene = A, + e.loading = !1, + e.loaded = !0, + e.add(A.scene), + t.tileLoadFinish() + } + e.loading = !0; + var n = t.dataUrl.b3dmUrl(A || e.json.content.url); + if (vc.getDataFromIndexedDB) { + var r = t.getStorage(); + r && r.get(n, (function (t) { + t ? i.parse(t, A || e.json.content.url, o) : i.load(n, o) + }), (function () { + i.load(n, o) + })) + } else + i.load(n, o) + }; + var PC = function (A, e, t, i) { + TC.call(this, A, e, t, i), + this.configLoader = new DC(this), + this.tilesList = {}, + this.isTilesModel = !0 + }; + (PC.prototype = Object.create(TC.prototype)).load = function (A) { + var e = this; + this.configLoader.load((function () { + e.parseCfgFinish && e.parseCfgFinish(), + e.manager.updateScene(), + e.group.add(new GC(e, null, e.configLoader.config.root, !0)), + e.loaded = !0 + })) + }, + PC.prototype.tileLoadStart = function () {}, + PC.prototype.tileLoadFinish = function () { + this.group.updateMatrixWorld(!0, !0), + this.manager.viewerImpl.render() + }, + PC.prototype.tileUnloadStart = function () {}, + PC.prototype.tileUnloadFinish = function () {}, + PC.prototype.checkTilesDataChanged = function (A) { + for (var e in Bh.time("checkTilesDataChanged"), + this.tilesList) + if (this.tilesList.hasOwnProperty(e)) { + var t = this.tilesList[e]; + this.tilesNeedLoad(t.boundingBox.getCenter((new y).applyMatrix4(t.parent.matrixWorld).applyMatrix4(t.matrix)), t.boundingBox.getSize(new y).length()) || t.firstB3DM ? t.scene || t.loading ? t.visible = !0 : t.loadB3DM() : A ? (t.remove(t.scene), + t.scene = null) : t.visible = !1 + } + Bh.timeEnd("checkTilesDataChanged") + }, + PC.prototype.tilesNeedLoad = function (A, e) { + var t, i = this.manager.cameraFov; + return t = (e || 0) * this.manager.domElementWidth / (2 * this.manager.cameraPosition.clone().sub(A).length() * Math.tan(i / 2)), + Bh.debug("几何误差:", t), + t > vc.geometricErrorThresholdValue + }; + var qC = function () { + this.size = 0, + this.counter = 0, + this.expansion = 1, + this._pool = null + }; + qC.prototype.init = function (A, e) { + this.classType = A, + this._pool = [], + this._expand(e) + }, + qC.prototype._expand = function (A) { + this.size += A; + for (var e = 0; A > e; e += 1) + this._pool.push(new this.classType) + }, + qC.prototype.acquire = function () { + return this.size > this.counter || (this.expansion = Math.round(1.2 * this.expansion) + 1, + this._expand(this.expansion)), + this._pool[this.counter++] + }, + qC.prototype.clear = function () { + this.counter = 0 + }, + qC.prototype.destroy = function () { + for (var A = 0, e = this.size; e > A; A += 1) + this._pool[A].destroy(); + this.counter = 0, + this.size = 0, + this.expansion = 1, + this._pool = null + }, + qC.prototype.getObjects = function () { + return this._pool + }; + var jC = function (A) { + Pe.call(this), + this.type = "PhoneLightingMaterial", + this.color = new LA(16777215), + this.specular = new LA(1118481), + this.shininess = 30, + this.emissive = new LA(0), + this.map = null, + this.shadowMapEnabled = !1, + this.defines = {}, + this.uniforms = Ge.merge([Xe.common, Xe.lights, { + diffuse: { + value: new LA(16711680) + }, + opacity: { + value: 1 + }, + specular: { + value: new LA(1118481) + }, + shininess: { + value: 30 + }, + emissive: { + value: new LA(0) + } + }]), + this.vertexShader = ["varying vec3 vViewPosition;", "varying vec3 vNormal;", "#include ", "void main() {", " #include ", " #include ", " #include ", " #include ", " #include ", " vNormal = normalize( transformedNormal );", " vViewPosition = - mvPosition.xyz;", "}"].join("\n"), + this.fragmentShader = ["uniform vec3 diffuse;", "uniform float opacity;", "uniform vec3 specular;", "uniform float shininess;", "uniform vec3 emissive;", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "#include ", "void main() {", " vec4 diffuseColor = vec4( diffuse, opacity );", "#ifdef USE_MAP", " vec4 texelColor = texture2D( map, vUv );", " texelColor = mapTexelToLinear( texelColor );", " diffuseColor = vec4(texelColor.rgb, opacity);", "#endif", " ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );", " vec3 totalEmissiveRadiance = emissive;", " float specularStrength = 1.0;", " #include ", " #include ", " gl_FragColor = linearToOutputTexel( diffuseColor );", "}"].join("\n"), + this.lights = !1, + this.defaultAttributeValues = { + color: [1, 1, 1], + uv: [0, 0], + uv2: [0, 0] + }, + void 0 !== A && (void 0 !== A.attributes && console.error("PhoneLightingMaterial: attributes should now be defined in THREE.BufferGeometry instead."), + this.setValues(A)), + this.refreshUniforms() + }; + (jC.prototype = Object.create(Pe.prototype)).constructor = jC, + jC.prototype.isShaderMaterial = !0, + jC.prototype.copy = function (A) { + return Pe.prototype.copy.call(this, A), + this.color.copy(A.color), + this.specular.copy(A.specular), + this.shininess = A.shininess, + this.emissive.copy(A.emissive), + this + }, + jC.prototype.refreshUniforms = function () { + this.uniforms.diffuse.value.set(this.color), + this.uniforms.opacity.value = this.opacity, + this.uniforms.specular.value.set(this.specular), + this.uniforms.shininess.value = this.shininess, + this.uniforms.emissive.value.set(this.emissive), + this.uniforms.map.value = this.map + }; + var HC = function (A, e) { + ep.call(this, gp.CLIPPLANE, { + priority: 20 + }); + var t = []; + t.push("clipPlane_right"), + t.push("clipPlane_left"), + t.push("clipPlane_back"), + t.push("clipPlane_front"), + t.push("clipPlane_top"), + t.push("clipPlane_bottom"), + this.cubeSize = A.clone(), + this.center = e.clone(), + this.visible = !1, + this.rotatable = !1, + this.selectIndex = null, + this.planeOffset = new Array(6), + this.planeRotate = [0, 0, 0], + this.observer = null, + this.uniforms = { + iClipPlane: { + type: "i", + value: 0 + }, + vClipPlane: { + type: "v4v", + value: [new p, new p, new p, new p, new p, new p] + } + }, + this.clipplanes = null, + this.calculation = !0, + this.boundingBox = new aA, + this.calculateClipBoundingBox = function (A) { + this.boundingBox.makeEmpty(); + for (var e = new y, t = 0; A.length > t; t += 1) { + var i = A[t].coplanarPoint(e); + 0 !== i.x && (i.x > this.boundingBox.max.x ? this.boundingBox.max.x = i.x : this.boundingBox.min.x > i.x && (this.boundingBox.min.x = i.x)), + 0 !== i.y && (i.y > this.boundingBox.max.y ? this.boundingBox.max.y = i.y : this.boundingBox.min.y > i.y && (this.boundingBox.min.y = i.y)), + 0 !== i.z && (i.z > this.boundingBox.max.z ? this.boundingBox.max.z = i.z : this.boundingBox.min.z > i.z && (this.boundingBox.min.z = i.z)) + } + }, + this.getClipBoundingBox = function () { + return this.boundingBox + }, + this.isVisible = function () { + return this.visible + }, + this.getPlaneNormal = function (A) { + var e = new p, + t = Math.floor(A / 2); + return e.setComponent(t, Math.pow(-1, A % 2)), + e.w = .5 * -this.cubeSize.getComponent(t), + this.planeOffset[A] = 0, + e + }, + this.planeMaterial = new jC({ + color: 8158334, + opacity: .3, + transparent: !0, + side: 0, + lights: !1 + }), + this.planeHighLightMatrial = new jC({ + color: 255, + opacity: .3, + transparent: !0, + side: 0, + lights: !1 + }), + this.initPlaneModel = function (A) { + var e = Math.floor(A / 2), + i = A % 2, + o = new Ue(new et(0 === e ? this.cubeSize.z : this.cubeSize.x, 1 === e ? this.cubeSize.z : this.cubeSize.y), this.planeMaterial); + switch (o.name = t[A], + o.customTag = !0, + o.position.setComponent(e, Math.pow(-1, i) * this.cubeSize.getComponent(e) * .5), + A) { + case 0: + o.rotation.y = .5 * Math.PI; + break; + case 1: + o.rotation.y = .5 * -Math.PI; + break; + case 2: + o.rotation.x = .5 * -Math.PI; + break; + case 3: + o.rotation.x = .5 * Math.PI; + break; + case 4: + break; + case 5: + o.rotation.x = Math.PI + } + o.renderOrder = 90, + this.add(o) + }, + this.initCapsBox = function () { + if (this.boxMesh) + return this.boxMesh; + var A = new Ne(this.cubeSize.x, this.cubeSize.y, this.cubeSize.z); + A.groups = null; + var e = new Ue(A, new jC({ + color: 16776960, + side: 2, + stencilWrite: !0, + stencilFunc: 515, + stencilRef: 1, + stencilFuncMask: 255, + stencilFail: 7680, + stencilZFail: 7680, + stencilZPass: 7680 + })); + return e.matrixWorld = this.matrixWorld, + e.matrix = this.matrix, + e.name = "capsBox", + this.boxMesh = e, + e + }, + this.initWireframes = function () { + var A = [.5 * -this.cubeSize.x, .5 * -this.cubeSize.y, .5 * -this.cubeSize.z, .5 * this.cubeSize.x, .5 * -this.cubeSize.y, .5 * -this.cubeSize.z, .5 * this.cubeSize.x, .5 * this.cubeSize.y, .5 * -this.cubeSize.z, .5 * -this.cubeSize.x, .5 * this.cubeSize.y, .5 * -this.cubeSize.z, .5 * -this.cubeSize.x, .5 * -this.cubeSize.y, .5 * this.cubeSize.z, .5 * this.cubeSize.x, .5 * -this.cubeSize.y, .5 * this.cubeSize.z, .5 * this.cubeSize.x, .5 * this.cubeSize.y, .5 * this.cubeSize.z, .5 * -this.cubeSize.x, .5 * this.cubeSize.y, .5 * this.cubeSize.z], + e = new he, + t = new jC({ + color: 0, + lights: !0 + }); + e.setIndex([0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 3, 7, 1, 5, 2, 6]), + e.setAttribute("position", new Ae(A, 3)), + e.setAttribute("color", new Ae([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 3)), + e.computeBoundingSphere(); + var i = new jo(e, t); + i.name = "Wireframes", + i.customTag = !0, + this.add(i) + }, + this.updateClippingParams = function (A) {}, + this.enable = function (A, e) { + this.visible = e, + this.uniforms.iClipPlane.value = A ? 6 : 0, + this.updateClippingParams(this.uniforms), + this.boxMesh && (this.boxMesh.visible = e) + }, + this.isEnabled = function () { + return 0 !== this.uniforms.iClipPlane.value + }; + var i = function (A, e, t, i, o, n, r, a, s, l, c, h) { + this.enable = A, + this.visible = e, + this.rotatable = t, + this.calculation = i, + this.planeOffset = o.slice(0), + this.planeRotate = n.slice(0), + this.position = r, + this.scale = a, + this.quaternion = s, + this.cubeSize = l, + this.center = c, + this.boundingBox = h + }; + this.store = function () { + return new i(!!this.uniforms.iClipPlane.value, this.visible, this.rotatable, this.calculation, this.planeOffset, this.planeRotate, this.position.clone(), this.scale.clone(), this.quaternion.clone(), this.cubeSize.clone(), this.center.clone(), this.boundingBox.clone()) + }, + this.restore = function (A) { + this.calculation = !0, + this.calculationPlanes(A.cubeSize, A.center), + this.enable(A.enable, A.visible), + this.rotatable = A.rotatable, + this.calculation = A.calculation; + for (var e = 0; 6 > e; e += 1) + this.planeOffset[e] = A.planeOffset[e]; + for (var t = 0; 3 > t; t += 1) + this.planeRotate[t] = A.planeRotate[t]; + this.position.copy(A.position), + this.scale.copy(A.scale), + this.quaternion._w = A.quaternion._w, + this.quaternion._x = A.quaternion._x, + this.quaternion._y = A.quaternion._y, + this.quaternion._z = A.quaternion._z, + this.update() + }, + this.reset = function () { + this.calculation = !0; + for (var A = 0; 6 > A; A += 1) + this.planeOffset[A] = 0; + for (A = 0; 3 > A; A += 1) + this.planeRotate[A] = 0; + this.position.copy(this.center), + this.scale.copy(new y(1, 1, 1)), + this.quaternion.copy(new f), + this.update() + }, + this.calculationPlanes = function (A, e, t) { + if (this.calculation || t) { + this.cubeSize.copy(A), + this.center.copy(e); + for (var i = this.children.length - 1; i >= 0; i -= 1) + this.remove(this.children[i]); + for (i = 0; 6 > i; i += 1) + this.uniforms.vClipPlane.value[i] = this.getPlaneNormal(i), + this.initPlaneModel(i); + this.initWireframes(), + this.clipplanes = this.uniforms.vClipPlane.value.slice(0), + this.reset() + } + }, + this.update = function () { + this.updateMatrixWorld(); + var A = new M; + A.getInverse(this.matrix), + A.transpose(); + for (var e = 0; 6 > e; e += 1) + this.uniforms.vClipPlane.value[e] = this.clipplanes[e].clone().applyMatrix4(A); + this.updateClippingParams(this.uniforms), + this.observer && this.observer() + }, + this.offset = function (A, e) { + this.calculation = !1; + var t = Math.floor(A / 2); + this.cubeSize.getComponent(t); + A % 2 == 0 && this.planeOffset[A] + e > 0 && (e = -this.planeOffset[A]), + A % 2 == 1 && 0 > this.planeOffset[A] + e && (e = -this.planeOffset[A]), + this.planeOffset[A] += e; + for (var i = new y, o = 0; 6 > o; o += 1) { + var n = this.clipplanes[o].clone(), + r = this.planeOffset[o], + a = new y(n.x * r, n.y * r, n.z * r); + i.add(a) + } + var s = 1 + i.getComponent(t) / this.cubeSize.getComponent(t); + if ((s = 0 === s ? 1e-5 : s) > 0) { + this.scale.setComponent(t, s); + var l = this.uniforms.vClipPlane.value[A].clone(), + c = new y(l.x, l.y, l.z); + c.normalize(); + var h = new y(c.x * (a = e), c.y * a, c.z * a); + A % 2 == 1 ? this.position.sub(h.multiplyScalar(.5)) : this.position.add(h.multiplyScalar(.5)), + this.update() + } else + this.planeOffset[A] -= e + }; + var o = new f, + n = new y(1, 0, 0); + this.rotX = function (A) { + this.calculation = !1, + o.setFromAxisAngle(n, A), + this.quaternion.multiply(o), + this.update() + }; + var r = new y(0, 1, 0); + this.rotY = function (A) { + this.calculation = !1, + o.setFromAxisAngle(r, A), + this.quaternion.multiply(o), + this.update() + }, + this.setSectionBox = function (A, e) { + this.calculation = !0; + var t = new y(e.x - A.x, e.y - A.y, e.z - A.z), + i = new y(.5 * (A.x + e.x), .5 * (A.y + e.y), .5 * (A.z + e.z)); + this.calculationPlanes(t, i) + }, + this.calculateOffsetByBox = function (A, e) { + var t = e.x - this.center.x - .5 * this.cubeSize.x; + this.planeOffset[0] > t ? (this.moveSectionPlane("left", this.center.x - .5 * this.cubeSize.x - A.x), + this.moveSectionPlane("right", t)) : (this.moveSectionPlane("right", t), + this.moveSectionPlane("left", this.center.x - .5 * this.cubeSize.x - A.x)); + var i = e.y - this.center.y - .5 * this.cubeSize.y; + this.planeOffset[2] > i ? (this.moveSectionPlane("bottom", this.center.y - .5 * this.cubeSize.y - A.y), + this.moveSectionPlane("top", i)) : (this.moveSectionPlane("top", i), + this.moveSectionPlane("bottom", this.center.y - .5 * this.cubeSize.y - A.y)); + var o = e.z - this.center.z - .5 * this.cubeSize.z; + this.planeOffset[4] > o ? (this.moveSectionPlane("back", this.center.z - .5 * this.cubeSize.z - A.z), + this.moveSectionPlane("front", o)) : (this.moveSectionPlane("front", o), + this.moveSectionPlane("back", this.center.z - .5 * this.cubeSize.z - A.z)) + }, + this.getPlaneIndexByName = function (A) { + var e = -1; + return "right" === A ? e = 0 : "left" === A ? e = 1 : "top" === A ? e = 2 : "bottom" === A ? e = 3 : "front" === A ? e = 4 : "back" === A && (e = 5), + e + }, + this.moveSectionPlane = function (A, e) { + var t = this.getPlaneIndexByName(A); - + 1 !== t && (t % 2 != 0 && (e = -e), + this.offset(t, e - this.planeOffset[t])) + }, + this.recalculate = function () { + return this.filter.getVisibleComponentsBbox() + }, + this.setProcess = function (A, e) { + var t = this.getPlaneIndexByName(A), + i = 0; + (2 > t ? i = this.cubeSize.x : 4 > t ? i = this.cubeSize.y : 6 > t && (i = this.cubeSize.z), + e > 1 ? e = 1 : 0 > e && (e = 0), + -1 !== t) && (t % 2 != 1 && (e = -e), + this.offset(t, e * i - this.planeOffset[t])) + }, + this.getProcess = function (A) { + var e = this.getPlaneIndexByName(A); - + 1 === e && console.log("faceName is illegal"); + var t = 0; + 2 > e ? t = this.cubeSize.x : 4 > e ? t = this.cubeSize.y : 6 > e && (t = this.cubeSize.z); + var i = 1; + e % 2 != 1 && (i = -1); + var o = i * this.planeOffset[e] / t; + return o > 1 ? o = 1 : 0 > o && (o = 0), + o + }; + var a = new y(0, 0, 1); + this.rotateSectionBox = function (A, e) { + "x" === A ? this.planeRotate[0] = e : "y" === A ? this.planeRotate[1] = e : "z" === A && (this.planeRotate[2] = e), + this.calculation = !0; + var t = new f; + t.setFromAxisAngle(n, this.planeRotate[0]); + var i = new f; + i.setFromAxisAngle(r, this.planeRotate[1]); + var o = new f; + o.setFromAxisAngle(a, this.planeRotate[2]); + var s = new f; + s.multiply(t), + s.multiply(i), + s.multiply(o), + this.quaternion.copy(s), + this.update() + }, + this.highLight = function () { + null !== this.selectIndex && (this.children[this.selectIndex].material = this.planeHighLightMatrial) + }, + this.cancelHighLight = function () { + null !== this.selectIndex && (this.children[this.selectIndex].material = this.planeMaterial, + this.selectIndex = null) + } + }; + (HC.prototype = Object.create(ep.prototype)).constructor = HC, + HC.prototype.init = function () { + this.calculationPlanes(this.cubeSize, this.center) + }, + HC.prototype.hitTest = function (A) { + var e = null, + t = null; + if (this.raycast(A), + null !== this.selectIndex) { + var i = A.ray, + o = new EA, + n = this.uniforms.vClipPlane.value[this.selectIndex]; + o.setComponents(n.x, n.y, n.z, n.w), + e = i.distanceToPlane(o), + t = 0 > i.direction.dot(o.normal) + } + return { + sign: t, + distance: e + } + }, + HC.prototype.raycast = function (A) { + if (this.visible) { + var e = [], + t = null; + this.selectIndex = null; + for (var i = 0; 6 > i; i += 1) + if (this.children[i].raycast(A, e), + e.length > 0) { + var o = e.pop(); + t && o.distance >= t.distance || (t = o, + this.selectIndex = i), + e = [] + } + } + }, + Xe.line = { + linewidth: { + value: 1 + }, + resolution: { + value: new s(1, 1) + }, + dashScale: { + value: 1 + }, + dashSize: { + value: 1 + }, + dashOffset: { + value: 0 + }, + gapSize: { + value: 1 + }, + opacity: { + value: 1 + } + }, + it.line = { + uniforms: Ge.merge([Xe.common, Xe.fog, Xe.line]), + vertexShader: "\n #include \n #include \n #include \n #include \n #include \n\n uniform float linewidth;\n uniform vec2 resolution;\n\n attribute vec3 instanceStart;\n attribute vec3 instanceEnd;\n\n attribute vec3 instanceColorStart;\n attribute vec3 instanceColorEnd;\n\n varying vec2 vUv;\n\n #ifdef USE_DASH\n\n uniform float dashScale;\n attribute float instanceDistanceStart;\n attribute float instanceDistanceEnd;\n varying float vLineDistance;\n\n #endif\n\n void trimSegment( const in vec4 start, inout vec4 end ) {\n\n // trim end segment so it terminates between the camera plane and the near plane\n\n // conservative estimate of the near plane\n float a = projectionMatrix[ 2 ][ 2 ]; // 3nd entry in 3th column\n float b = projectionMatrix[ 3 ][ 2 ]; // 3nd entry in 4th column\n float nearEstimate = - 0.5 * b / a;\n\n float alpha = ( nearEstimate - start.z ) / ( end.z - start.z );\n\n end.xyz = mix( start.xyz, end.xyz, alpha );\n\n }\n\n void main() {\n\n #ifdef USE_COLOR\n\n vColor.xyz = ( position.y < 0.5 ) ? instanceColorStart : instanceColorEnd;\n\n #endif\n\n #ifdef USE_DASH\n\n vLineDistance = ( position.y < 0.5 ) ? dashScale * instanceDistanceStart : dashScale * instanceDistanceEnd;\n\n #endif\n\n float aspect = resolution.x / resolution.y;\n\n vUv = uv;\n\n // camera space\n vec4 start = modelViewMatrix * vec4( instanceStart, 1.0 );\n vec4 end = modelViewMatrix * vec4( instanceEnd, 1.0 );\n\n // special case for perspective projection, and segments that terminate either in, or behind, the camera plane\n // clearly the gpu firmware has a way of addressing this issue when projecting into ndc space\n // but we need to perform ndc-space calculations in the shader, so we must address this issue directly\n // perhaps there is a more elegant solution -- WestLangley\n\n bool perspective = ( projectionMatrix[ 2 ][ 3 ] == - 1.0 ); // 4th entry in the 3rd column\n\n if ( perspective ) {\n\n if ( start.z < 0.0 && end.z >= 0.0 ) {\n\n trimSegment( start, end );\n\n } else if ( end.z < 0.0 && start.z >= 0.0 ) {\n\n trimSegment( end, start );\n\n }\n\n }\n\n // clip space\n vec4 clipStart = projectionMatrix * start;\n vec4 clipEnd = projectionMatrix * end;\n\n // ndc space\n vec2 ndcStart = clipStart.xy / clipStart.w;\n vec2 ndcEnd = clipEnd.xy / clipEnd.w;\n\n // direction\n vec2 dir = ndcEnd - ndcStart;\n\n // account for clip-space aspect ratio\n dir.x *= aspect;\n dir = normalize( dir );\n\n // perpendicular to dir\n vec2 offset = vec2( dir.y, - dir.x );\n\n // undo aspect ratio adjustment\n dir.x /= aspect;\n offset.x /= aspect;\n\n // sign flip\n if ( position.x < 0.0 ) offset *= - 1.0;\n\n // endcaps\n if ( position.y < 0.0 ) {\n\n offset += - dir;\n\n } else if ( position.y > 1.0 ) {\n\n offset += dir;\n\n }\n\n // adjust for linewidth\n offset *= linewidth;\n\n // adjust for clip-space to screen-space conversion // maybe resolution should be based on viewport ...\n offset /= resolution.y;\n\n // select end\n vec4 clip = ( position.y < 0.5 ) ? clipStart : clipEnd;\n\n // back to clip space\n offset *= clip.w;\n\n clip.xy += offset;\n\n gl_Position = clip;\n\n vec4 mvPosition = ( position.y < 0.5 ) ? start : end; // this is an approximation\n\n #include \n #include \n #include \n\n }\n ", + fragmentShader: "\n uniform vec3 diffuse;\n uniform float opacity;\n\n #ifdef USE_DASH\n\n uniform float dashSize;\n uniform float dashOffset;\n uniform float gapSize;\n\n #endif\n\n varying float vLineDistance;\n\n #include \n #include \n #include \n #include \n #include \n\n varying vec2 vUv;\n\n void main() {\n\n #include \n\n #ifdef USE_DASH\n\n if ( vUv.y < - 1.0 || vUv.y > 1.0 ) discard; // discard endcaps\n\n if ( mod( vLineDistance + dashOffset, dashSize + gapSize ) > dashSize ) discard; // todo - FIX\n\n #endif\n\n if ( abs( vUv.y ) > 1.0 ) {\n\n float a = vUv.x;\n float b = ( vUv.y > 0.0 ) ? vUv.y - 1.0 : vUv.y + 1.0;\n float len2 = a * a + b * b;\n\n if ( len2 > 1.0 ) discard;\n\n }\n\n vec4 diffuseColor = vec4( diffuse, opacity );\n\n #include \n #include \n\n gl_FragColor = vec4( diffuseColor.rgb, diffuseColor.a );\n\n #include \n #include \n #include \n #include \n\n }\n " + }; + var YC = function (A) { + Pe.call(this, { + type: "LineMaterial", + uniforms: Ge.clone(it.line.uniforms), + vertexShader: it.line.vertexShader, + fragmentShader: it.line.fragmentShader, + clipping: !0 + }), + this.dashed = !1, + Object.defineProperties(this, { + color: { + enumerable: !0, + get: function () { + return this.uniforms.diffuse.value + }, + set: function (A) { + this.uniforms.diffuse.value = A + } + }, + linewidth: { + enumerable: !0, + get: function () { + return this.uniforms.linewidth.value + }, + set: function (A) { + this.uniforms.linewidth.value = A + } + }, + dashScale: { + enumerable: !0, + get: function () { + return this.uniforms.dashScale.value + }, + set: function (A) { + this.uniforms.dashScale.value = A + } + }, + dashSize: { + enumerable: !0, + get: function () { + return this.uniforms.dashSize.value + }, + set: function (A) { + this.uniforms.dashSize.value = A + } + }, + dashOffset: { + enumerable: !0, + get: function () { + return this.uniforms.dashOffset.value + }, + set: function (A) { + this.uniforms.dashOffset.value = A + } + }, + gapSize: { + enumerable: !0, + get: function () { + return this.uniforms.gapSize.value + }, + set: function (A) { + this.uniforms.gapSize.value = A + } + }, + resolution: { + enumerable: !0, + get: function () { + return this.uniforms.resolution.value + }, + set: function (A) { + this.uniforms.resolution.value.copy(A) + } + }, + opacity: { + enumerable: !0, + get: function () { + return this.uniforms.opacity.value + }, + set: function (A) { + this.uniforms.opacity.value = A + } + } + }), + this.setValues(A) + }; + (YC.prototype = Object.create(Pe.prototype)).constructor = YC, + YC.prototype.isLineMaterial = !0; + var WC, JC = function () { + Na.call(this), + this.type = "LineSegmentsGeometry"; + this.setIndex([0, 2, 1, 2, 3, 1, 2, 4, 3, 4, 5, 3, 4, 6, 5, 6, 7, 5]), + this.setAttribute("position", new Ae([-1, 2, 0, 1, 2, 0, -1, 1, 0, 1, 1, 0, -1, 0, 0, 1, 0, 0, -1, -1, 0, 1, -1, 0], 3)), + this.setAttribute("uv", new Ae([-1, 2, 1, 2, -1, 1, 1, 1, -1, -1, 1, -1, -1, -2, 1, -2], 2)) + }; + JC.prototype = Object.assign(Object.create(Na.prototype), { + constructor: JC, + isLineSegmentsGeometry: !0, + applyMatrix4: function (A) { + var e = this.attributes.instanceStart, + t = this.attributes.instanceEnd; + return void 0 !== e && (e.applyMatrix4(A), + t.applyMatrix4(A), + e.needsUpdate = !0), + null !== this.boundingBox && this.computeBoundingBox(), + null !== this.boundingSphere && this.computeBoundingSphere(), + this + }, + setPositions: function (A) { + var e = null; + A instanceof Float32Array ? e = A : Array.isArray(A) && (e = new Float32Array(A)); + var t = new ks(e, 6, 1); + return this.setAttribute("instanceStart", new no(t, 3, 0)), + this.setAttribute("instanceEnd", new no(t, 3, 3)), + this.computeBoundingBox(), + this.computeBoundingSphere(), + this + }, + setColors: function (A) { + var e = null; + A instanceof Float32Array ? e = A : Array.isArray(A) && (e = new Float32Array(A)); + var t = new ks(e, 6, 1); + return this.setAttribute("instanceColorStart", new no(t, 3, 0)), + this.setAttribute("instanceColorEnd", new no(t, 3, 3)), + this + }, + fromWireframeGeometry: function (A) { + return this.setPositions(A.attributes.position.array), + this + }, + fromEdgesGeometry: function (A) { + return this.setPositions(A.attributes.position.array), + this + }, + fromMesh: function (A) { + return this.fromWireframeGeometry(new on(A.geometry)), + this + }, + fromLineSegements: function (A) { + var e = A.geometry; + return e.isGeometry ? this.setPositions(e.vertices) : e.isBufferGeometry && this.setPositions(e.attributes.position.array), + this + }, + computeBoundingBox: function () { + var A = new aA; + return function () { + null === this.boundingBox && (this.boundingBox = new aA); + var e = this.attributes.instanceStart, + t = this.attributes.instanceEnd; + void 0 !== e && void 0 !== t && (this.boundingBox.setFromBufferAttribute(e), + A.setFromBufferAttribute(t), + this.boundingBox.union(A)) + } + }(), + computeBoundingSphere: (WC = new y, + function () { + null === this.boundingSphere && (this.boundingSphere = new cA), + null === this.boundingBox && this.computeBoundingBox(); + var A = this.attributes.instanceStart, + e = this.attributes.instanceEnd; + if (void 0 !== A && void 0 !== e) { + var t = this.boundingSphere.center; + this.boundingBox.getCenter(t); + for (var i = 0, o = 0, n = A.count; n > o; o += 1) + WC.fromBufferAttribute(A, o), + i = Math.max(i, t.distanceToSquared(WC)), + WC.fromBufferAttribute(e, o), + i = Math.max(i, t.distanceToSquared(WC)); + this.boundingSphere.radius = Math.sqrt(i), + isNaN(this.boundingSphere.radius) && console.error("THREE.LineSegmentsGeometry.computeBoundingSphere(): Computed radius is NaN. The instanced position data is likely to have NaN values.", this) + } + } + ), + toJSON: function () {}, + applyMatrix: function (A) { + return console.warn("THREE.LineSegmentsGeometry: applyMatrix() has been renamed to applyMatrix4()."), + this.applyMatrix4(A) + } + }); + var zC, ZC, XC = function (A, e) { + void 0 === A && (A = new JC), + void 0 === e && (e = new YC({ + color: 16777215 * Math.random() + })), + Ue.call(this, A, e), + this.type = "LineSegments2" + }; + XC.prototype = Object.assign(Object.create(Ue.prototype), { + constructor: XC, + isLineSegments2: !0, + computeLineDistances: (zC = new y, + ZC = new y, + function () { + for (var A = this.geometry, e = A.attributes.instanceStart, t = A.attributes.instanceEnd, i = new Float32Array(2 * e.data.count), o = 0, n = 0, r = e.data.count; r > o; o += 1, + n += 2) + zC.fromBufferAttribute(e, o), + ZC.fromBufferAttribute(t, o), + i[n] = 0 === n ? 0 : i[n - 1], + i[n + 1] = i[n] + zC.distanceTo(ZC); + var a = new ks(i, 2, 1); + return A.setAttribute("instanceDistanceStart", new no(a, 1, 0)), + A.setAttribute("instanceDistanceEnd", new no(a, 1, 1)), + this + } + ), + raycast: function () { + var A = new p, + e = new p, + t = new p, + i = new y, + o = new M, + n = new Hs, + r = new y; + return function (s, l) { + null === s.camera && console.error('LineSegments2: "Raycaster.camera" needs to be set in order to raycast against LineSegments2.'); + var c = s.ray, + h = s.camera, + d = h.projectionMatrix, + p = this.geometry, + g = this.material, + u = g.resolution, + f = g.linewidth + (void 0 !== s.params.Line2 && s.params.Line2.threshold || 0), + m = p.attributes.instanceStart, + C = p.attributes.instanceEnd; + c.at(1, t), + t.w = 1, + t.applyMatrix4(h.matrixWorldInverse), + t.applyMatrix4(d), + t.multiplyScalar(1 / t.w), + t.x *= u.x / 2, + t.y *= u.y / 2, + t.z = 0, + i.copy(t); + var v = this.matrixWorld; + o.multiplyMatrices(h.matrixWorldInverse, v); + for (var I = 0, E = m.count; E > I; I += 1) { + if (A.fromBufferAttribute(m, I), + e.fromBufferAttribute(C, I), + A.w = 1, + e.w = 1, + A.applyMatrix4(o), + e.applyMatrix4(o), + A.applyMatrix4(d), + e.applyMatrix4(d), + A.multiplyScalar(1 / A.w), + e.multiplyScalar(1 / e.w), + !(-1 > A.z && -1 > e.z) && !(A.z > 1 && e.z > 1)) { + A.x *= u.x / 2, + A.y *= u.y / 2, + e.x *= u.x / 2, + e.y *= u.y / 2, + n.start.copy(A), + n.start.z = 0, + n.end.copy(e), + n.end.z = 0; + var B = n.closestPointToPointParameter(i, !0); + n.at(B, r); + var x = a.lerp(A.z, e.z, B), + S = x >= -1 && 1 >= x, + w = i.distanceTo(r) < .5 * f; + if (S && w) { + n.start.fromBufferAttribute(m, I), + n.end.fromBufferAttribute(C, I), + n.start.applyMatrix4(v), + n.end.applyMatrix4(v); + var M = new y, + b = new y; + c.distanceSqToSegment(n.start, n.end, b, M), + l.push({ + point: b, + pointOnLine: M, + distance: c.origin.distanceTo(b), + object: this, + face: null, + faceIndex: I, + uv: null, + uv2: null + }) + } + } + } + } + }() + }); + var _C = function (A, e) { + ep.call(this, gp.FILLCLIPPLANE, { + priority: 20 + }), + this.cubeSize = A.clone(), + this.originBoundingBox = (new aA).setFromCenterAndSize(e, A), + this.boundingBox = this.originBoundingBox.clone(), + this.center = e.clone(), + this.length = .8 * this.originBoundingBox.getSize(new y).length(), + this.planeOffset = 0, + this.normalIndex = 3, + this.visible = !1, + this.rotatable = !1, + this.hit = !1, + this.clipplane = new p, + this.observer = null, + this.renderClipPlane = new EA, + this.angleA = 0, + this.angleB = 0, + this.uniforms = { + iClipPlane: { + value: 0 + }, + vClipPlane: { + value: new Array(new p) + } + }, + this.planeMaterial = new jC({ + color: 6724044, + opacity: .3, + transparent: !0, + side: 2, + lights: !0 + }), + this.planeMaterial.visible = !1, + this.planeHighLightMatrial = new jC({ + color: 6724044, + opacity: .3, + transparent: !0, + side: 2, + lights: !0 + }), + this.initPlaneModel = function () { + for (var A = this.children.length - 1; A >= 0; A -= 1) + this.remove(this.children[A]); + this.planeOffset = 0; + var e = this.length, + t = new Ue(new At(e, e), this.planeMaterial); + t.name = "fillClipPlane", + t.customTag = !0, + t.renderOrder = 90, + this.position.copy(this.center), + this.clipplane.set(0, 0, 1, 0), + this.planeMesh = t, + this.add(t) + }, + this.initWireframes = function () { + var A = .5 * this.length, + e = [-A, A, 0, A, A, 0, -A, -A, 0, A, -A, 0], + t = new he, + i = new jC({ + color: 2003199, + lights: !0 + }); + t.setIndex([0, 1, 1, 3, 3, 2, 2, 0]), + t.setAttribute("position", new Ae(e, 3)); + var o = new jo(t, i); + o.name = "Wireframes", + o.customTag = !0, + this.wireframeMesh = o, + this.add(o) + }, + this.getCoordinate = function () { + var A = .5 * this.length, + e = new y(-A, A, 0); + e.applyMatrix4(this.matrix); + var t = new y(A, A, 0); + t.applyMatrix4(this.matrix); + var i = new y(-A, -A, 0); + return i.applyMatrix4(this.matrix), { + axisX: e.clone().sub(t).normalize(), + axisY: e.clone().sub(i).normalize() + } + }, + this.initCapsPlane = function () { + if (this.capPlane) + return this.capPlane; + this.planeMesh || this.initPlaneModel(); + var A = this.length, + e = new Ue(new At(A, A), new jC({ + color: 16776960, + side: 2, + stencilWrite: !0, + stencilFunc: 515, + stencilRef: 1, + stencilFuncMask: 255, + stencilFail: 7680, + stencilZFail: 7680, + stencilZPass: 7680 + })), + t = this.planeMesh; + e.matrixWorld = t.matrixWorld, + e.matrix = this.matrix; + for (var i = .5 * this.length, o = .01 * this.length, n = [], r = i - o; r > -i; r -= o) + n.push(r, i, 0), + n.push(i, r, 0); + for (r = -i + o; i > r; r += o) + n.push(-i, r, 0), + n.push(r, -i, 0); + var a = new YC({ + color: 2236962, + stencilWrite: !0, + stencilFunc: 515, + stencilRef: 1, + stencilFuncMask: 255, + stencilFail: 7680, + stencilZFail: 7680, + stencilZPass: 7680 + }); + a.linewidth = 1, + a.resolution.set(window.innerWidth, window.innerHeight), + a.depthTest = !1; + var s = new JC; + s.setPositions(n); + var l = new XC(s, a); + return l.matrix = this.matrix, + l.matrixWorld = t.matrixWorld, + this.capPlane = { + planeMesh: e, + lineMesh: l + }, + this.capPlane + }, + this.updateClippingParams = function (A) {}, + this.getFillClipBoundingBox = function () { + return this.boundingBox + }, + this.calculateFillClipBoundingBox = function (A) { + this.boundingBox = this.originBoundingBox.clone(), + 0 !== this.clipplane.x ? 1 === this.clipplane.x ? this.boundingBox.max.x = A.x : this.boundingBox.min.x = A.x : 0 !== this.clipplane.y ? 1 === this.clipplane.y ? this.boundingBox.max.y = A.y : this.boundingBox.min.y = A.y : 0 !== this.clipplane.z && (1 === this.clipplane.z ? this.boundingBox.max.z = A.z : this.boundingBox.min.z = A.z) + }, + this.enable = function (A, e) { + this.visible = e, + this.uniforms.iClipPlane.value = A ? 1 : 0, + this.capPlane && (this.capPlane.lineMesh.visible = e, + this.capPlane.planeMesh.visible = e), + this.update() + }, + this.isEnabled = function () { + return 0 !== this.uniforms.iClipPlane.value + }, + this.update = function () { + this.updateMatrixWorld(); + var A = new M; + A.getInverse(this.matrix), + A.transpose(), + this.uniforms.vClipPlane.value[0] = this.clipplane.clone().applyMatrix4(A), + this.updateClippingParams(this.uniforms), + this.observer && this.observer() + }, + this.getClipPlane = function () { + return this.clipplane.clone() + }, + this.offset = function (A) { + var e = this.cubeSize.length(); + this.planeOffset += A, + Math.abs(this.planeOffset) > .5 * e && (this.planeOffset = this.planeOffset > 0 ? .5 * e : .5 * -e); + var t = this.uniforms.vClipPlane.value[0].clone(), + i = new y(t.x, t.y, t.z); + i.normalize(); + var o = new y(i.x * this.planeOffset, i.y * this.planeOffset, i.z * this.planeOffset); + this.position.copy(this.center).add(o), + this.update() + }, + this.setOffset = function (A) { + var e = this.cubeSize.length(); + this.planeOffset = A, + Math.abs(A) > .5 * e && (this.planeOffset = A > 0 ? .5 * e : .5 * -e); + var t = this.uniforms.vClipPlane.value[0].clone(), + i = new y(t.x, t.y, t.z); + i.normalize(); + var o = new y(i.x * this.planeOffset, i.y * this.planeOffset, i.z * this.planeOffset); + this.position.copy(this.center).add(o), + this.update() + }, + this.changeNormal = function (A) { + this.quaternion.set(0, 0, 0, 1), + this.angleA = 0, + this.angleB = 0, + this.setNormal(A) + }, + this.setNormal = function (A) { + var e = this.planeMesh, + t = this.wireframeMesh; + 0 === A ? (this.clipplane.set(1, 0, 0, 0), + e.rotation.set(0, Math.PI / 2, 0), + t.rotation.set(0, Math.PI / 2, 0)) : 1 === A ? (this.clipplane.set(-1, 0, 0, 0), + e.rotation.set(0, -Math.PI / 2, 0), + t.rotation.set(0, -Math.PI / 2, 0)) : 2 === A ? (this.clipplane.set(0, 0, 1, 0), + e.rotation.set(Math.PI, 0, 0), + t.rotation.set(Math.PI, 0, 0)) : 3 === A ? (this.clipplane.set(0, 0, -1, 0), + e.rotation.set(0, 0, 0), + t.rotation.set(0, 0, 0)) : 4 === A ? (this.clipplane.set(0, 1, 0, 0), + e.rotation.set(-Math.PI / 2, 0, 0), + t.rotation.set(-Math.PI / 2, 0, 0)) : 5 === A && (this.clipplane.set(0, -1, 0, 0), + e.rotation.set(Math.PI / 2, 0, 0), + t.rotation.set(Math.PI / 2, 0, 0)), + this.normalIndex = A, + e.updateMatrixWorld(), + t.updateMatrixWorld(), + this.capPlane && (this.capPlane.planeMesh.matrixWorld = e.matrixWorld, + this.capPlane.lineMesh.matrixWorld = e.matrixWorld), + this.update() + }; + var t = new f, + i = new y(1, 0, 0); + this.rotX = function (A) { + t.setFromAxisAngle(i, A), + this.quaternion.multiply(t), + this.update() + }; + var o = new y(0, 1, 0); + this.rotY = function (A) { + t.setFromAxisAngle(o, A), + this.quaternion.multiply(t), + this.update() + }; + var n = new y(0, 0, 1); + this.rotateByAxis = function (A, e) { + t.setFromAxisAngle(A, e), + this.quaternion.multiply(t) + }, + this.rotateAngleOffset = function (A, e) { + var t = this.normalIndex; + A = A % 360 / 180 * Math.PI, + 0 === t || 1 === t ? ("y" === e && this.rotateByAxis(n, A), + "z" === e && this.rotateByAxis(o, A)) : 2 === t || 3 === t ? ("x" === e && this.rotateByAxis(i, A), + "z" === e && this.rotateByAxis(o, A)) : 4 !== t && 5 !== t || ("x" === e && this.rotateByAxis(i, A), + "y" === e && this.rotateByAxis(n, A)), + this.update() + }, + this.setRotateAngle = function (A, e) { + this.quaternion.set(0, 0, 0, 1); + var t = this.normalIndex; + e = 0 > (e = void 0 === e ? this.angleB : e % 360) ? 360 + e : e, + this.angleA = A = 0 > (A = void 0 === A ? this.angleA : A % 360) ? 360 + A : A, + this.angleB = e, + A = A / 180 * Math.PI, + e = e / 180 * Math.PI, + 0 === t || 1 === t ? (e = 0 === t ? e : -e, + this.rotateByAxis(n, A = 0 === t ? -A : A), + this.rotateByAxis(o, e)) : 2 === t || 3 === t ? (this.rotateByAxis(i, A), + this.rotateByAxis(o, e)) : 4 !== t && 5 !== t || (e = 3 === t ? e : -e, + this.rotateByAxis(i, A = 3 === t ? -A : A), + this.rotateByAxis(n, e)), + this.update() + }, + this.getRotateAngle = function () { + return { + angleA: this.angleA, + angleB: this.angleB + } + }, + this.highLight = function () { + this.planeMesh.material = this.planeHighLightMatrial + }, + this.cancelHighLight = function () { + this.planeMesh.material = this.planeMaterial, + this.hit = !1 + }; + var r = function (A, e, t, i, o, n, r, a, s) { + this.enable = A, + this.visible = e, + this.rotatable = t, + this.planeOffset = i, + this.position = o, + this.scale = n, + this.quaternion = r, + this.cubeSize = a, + this.center = s + }; + this.store = function () { + return new r(!!this.uniforms.iClipPlane.value, this.visible, this.rotatable, this.planeOffset, this.position.clone(), this.scale.clone(), this.quaternion.clone(), this.cubeSize.clone(), this.center.clone()) + }, + this.restore = function (A) { + this.enable(A.enable, A.visible), + this.rotatable = A.rotatable, + this.planeOffset = A.planeOffset, + this.position.copy(A.position), + this.scale.copy(A.scale), + this.quaternion._w = A.quaternion._w, + this.quaternion._x = A.quaternion._x, + this.quaternion._y = A.quaternion._y, + this.quaternion._z = A.quaternion._z, + this.normalIndex = void 0 === A.normalIndex ? this.normalIndex : A.normalIndex, + this.setNormal(this.normalIndex) + }, + this.setProcess = function (A) { + var e = this.cubeSize.length(); + A > 1 ? A = 1 : -1 > A && (A = -1), + this.planeOffset = A * e * .5; + var t = this.uniforms.vClipPlane.value[0].clone(), + i = new y(t.x, t.y, t.z); + i.normalize(); + var o = new y(i.x * this.planeOffset, i.y * this.planeOffset, i.z * this.planeOffset); + this.position.copy(this.center).add(o), + this.update() + }, + this.restoreRotation = function () { + this.quaternion.set(0, 0, 0, 1), + this.update() + }, + this.getProcess = function () { + var A = this.cubeSize.length(); + return this.planeOffset / A * 2 + } + }; + (_C.prototype = Object.create(ep.prototype)).constructor = _C, + _C.prototype.init = function () { + this.initPlaneModel(), + this.initWireframes() + }, + _C.prototype.hitTest = function (A) { + if (this.visible) { + var e = null, + t = null; + if (this.hit = this.raycast(A), + this.hit) { + var i = A.ray, + o = new EA, + n = this.uniforms.vClipPlane.value[0]; + o.setComponents(n.x, n.y, n.z, n.w), + e = i.distanceToPlane(o), + t = 0 > i.direction.dot(o.normal) + } + return { + sign: t, + distance: e + } + } + this.hit = !1 + }, + _C.prototype.raycast = function (A, e) { + var t = []; + return this.planeMesh.raycast(A, t), + t.length > 0 + }, + _C.prototype.resize = function (A, e) { + var t = A.length() / this.length; + this.scale.set(t, t, t), + this.cubeSize.copy(A), + e && (this.center = e.clone(), + this.position.copy(this.center)), + this.offset(0), + this.updateMatrixWorld() + }, + _C.prototype.getSideLength = function () { + return this.length * this.scale.x + }; + var $C = function (A, e) { + this.cls = A, + this.size = e, + this._pool = [], + this.counter = 0 + }; + $C.prototype.init = function (A) { + for (var e = 0, t = this.size; t > e; e += 1) { + var i = new this.cls; + i.init(A), + this._pool[e] = i + } + }, + $C.prototype.resize = function (A, e) { + this.size = A, + this.collect(), + this.init(e) + }, + $C.prototype.get = function (A) { + return this.size > this.counter ? (this._pool[this.counter].spawn(A), + this.counter += 1, + this.counter - 1) : (Bh.log("the pool is full"), + -1) + }, + $C.prototype.clear = function () { + for (var A = 0, e = this.size; e > A; A += 1) + this._pool[A].clear(); + this.counter = 0 + }, + $C.prototype.destroy = function () { + this.collect() + }, + $C.prototype.collect = function () { + this._pool = [], + this.counter = 0 + }, + $C.prototype.getObjects = function () { + return this._pool + }; + var Ay = function (A, e) { + var t = new he; + t.setAttribute("position", new YA(new Float32Array(72), 3)), + jo.call(this, t, new ko({ + color: e + })), + void 0 !== A && this.updateBBox(A) + }; + (Ay.prototype = Object.create(jo.prototype)).constructor = Ay, + Ay.prototype.unload = function () {}, + Ay.prototype.updateBBox = function (A) { + var e = A.min, + t = A.max, + i = this.geometry.attributes.position.array; + i[0] = t.x, + i[1] = t.y, + i[2] = t.z, + i[3] = e.x, + i[4] = t.y, + i[5] = t.z, + i[6] = e.x, + i[7] = t.y, + i[8] = t.z, + i[9] = e.x, + i[10] = e.y, + i[11] = t.z, + i[12] = e.x, + i[13] = e.y, + i[14] = t.z, + i[15] = t.x, + i[16] = e.y, + i[17] = t.z, + i[18] = t.x, + i[19] = e.y, + i[20] = t.z, + i[21] = t.x, + i[22] = t.y, + i[23] = t.z, + i[24] = t.x, + i[25] = t.y, + i[26] = e.z, + i[27] = e.x, + i[28] = t.y, + i[29] = e.z, + i[30] = e.x, + i[31] = t.y, + i[32] = e.z, + i[33] = e.x, + i[34] = e.y, + i[35] = e.z, + i[36] = e.x, + i[37] = e.y, + i[38] = e.z, + i[39] = t.x, + i[40] = e.y, + i[41] = e.z, + i[42] = t.x, + i[43] = e.y, + i[44] = e.z, + i[45] = t.x, + i[46] = t.y, + i[47] = e.z, + i[48] = t.x, + i[49] = t.y, + i[50] = t.z, + i[51] = t.x, + i[52] = t.y, + i[53] = e.z, + i[54] = e.x, + i[55] = t.y, + i[56] = t.z, + i[57] = e.x, + i[58] = t.y, + i[59] = e.z, + i[60] = e.x, + i[61] = e.y, + i[62] = t.z, + i[63] = e.x, + i[64] = e.y, + i[65] = e.z, + i[66] = t.x, + i[67] = e.y, + i[68] = t.z, + i[69] = t.x, + i[70] = e.y, + i[71] = e.z, + this.geometry.attributes.position.needsUpdate = !0, + this.geometry.computeBoundingBox(), + this.geometry.computeBoundingSphere(), + this.matrixAutoUpdate = !1 + }; + var ey = function () { + ep.call(this, gp.EXTERNALSCENEMANAGER, { + pickableType: Qc.Geometry, + priority: 20 + }), + this.globalSpace = !0 + }; + (ey.prototype = Object.create(ep.prototype)).constructor = ey, + ey.prototype.getNode = function (A) { + for (var e = this.children, t = 0, i = e.length; i > t; t += 1) + if (e[t].name === A.toString()) + return e[t]; + return null + }, + ey.prototype.removeNodeByName = function (A) { + var e = this.getNode(A); + return !!e && (this.remove(e), + !0) + }, + ey.prototype.clearNodes = function () { + this.clear() + }, + ey.prototype.setNodeVisibleByName = function (A, e) { + var t = this.getNode(A); + return !!t && (t.visible = e, + !0) + }, + ey.prototype.showAllNodes = function () { + for (var A = this.children, e = 0, t = A.length; t > e; e += 1) + A[e].visible = !0 + }, + ey.prototype.hideAllNodes = function () { + for (var A = this.children, e = 0, t = A.length; t > e; e += 1) + A[e].visible = !1 + }; + var ty = function () { + ep.call(this, gp.EXTRUDEBODYMANAGER, { + pickableType: Qc.Geometry, + priority: 20 + }), + this.globalSpace = !0, + this.mapColorToNodeId = {}, + this.selectionIds = {}, + this.selectionColor = { + red:240 , + green: 224, + blue:50 , + alpha: .3 + }, + this.selectionEdgeColor = { + red: 50, + green: 224, + blue: 240, + alpha: 1 + } + }; + + function iy(A) { + this.scene = A, + this.lightArray = void 0, + this.lightHelperArray = void 0, + this.lightHelper = !1, + this._currentPreset = void 0, + this._intensityFactor = vc.LightIntensityFactor, + this.defaultShadowLightDir = new y(100, -100, -160), + this.defaultLightDir = new y(100, -100, -160), + this.shadowLightDir = new y(100, -100, -160), + this.lightDir = new y(100, -100, -160), + this._ambientLight = void 0, + this.setLightPreset(vc.LightPreset) + } + (ty.prototype = Object.create(ep.prototype)).constructor = ty, + ty.prototype.addNode = function (A, e, t, i, o, n) { + n = void 0 === n || n; + var r = this.getNode(A); + if (r) + return r.material = i, + this.setColorInMap(r.name, i), + void((r = this.getNode("wireframe_" + A)) && (r.material = o, + this.setColorInMap(r.name, o))); + var a = [], + l = 0; + if (e.belong && "user" === e.belong) + a = e.roomBoundary, + l = e.offsetZ; + else { + e.version && "2.0" === e.version && (e = e.loops && e.loops.length > 0 ? e.loops[0] : []); + for (var c = e.length, h = 0; c > h; h += 1) + for (var d = e[h], p = d.length, g = 0; p - 1 > g; g += 1) { + var u = d[g]; + a.push(new s(u.x, u.y)), + 0 === h && 0 === g && (l = u.z) + } + a.length > 0 && a.push(a[0]) + } + var f = new Jn(new Ba(a), { + amount: t + }); + i.depthTest = !n, + f.boundingBox || f.computeBoundingBox(); + var m = new Ue(f, i); + m.name = A.toString(), + m.translateZ(l), + this.setColorInMap(m.name, i), + this.add(m), + this.updateMatrixWorld(!0); + var C = m.geometry.faces, + y = []; + for (h = 0, + p = C.length; p > h; h += 1) + y.push(C[h].a), + y.push(C[h].b), + y.push(C[h].c); + var v = m.geometry.vertices, + I = []; + for (h = 0, + p = v.length; p > h; h += 1) + I.push(v[h].x), + I.push(v[h].y), + I.push(v[h].z); + var E = Up(I, y, Math.PI / 3.5), + B = new he; + B.setIndex(new $A(E, 1)), + B.setAttribute("position", new Ae(I, 3)), + o.depthTest = !n, + o.transparent = !0; + var x = new jo(B, o); + x.translateZ(l), + x.name = "wireframe_" + A, + this.setColorInMap(x.name, o), + this.add(x), + this.updateMatrixWorld(!0) + }, + ty.prototype.setColorInMap = function (A, e) { + console.log(e.color.r); + this.mapColorToNodeId[A] = { + red: 255 * e.color.r, + green: 255 * e.color.g, + blue: 255 * e.color.b, + alpha: e.opacity + } + }, + ty.prototype.createMaterial = function (A) { + return Kd.createStandardMaterial(A) + }, + ty.prototype.setNodeMaterial = function (A, e, t) { + var i = this.getNode(A); + if (i) { + var o = i.material; + for (var n in e) { + o.hasOwnProperty(r = n) && (o[r] = "color" === r ? new LA(e[n]) : e[n]) + } + } + if (i = this.getNode("wireframe_" + A)) { + o = i.material; + for (var n in t) { + var r; + o.hasOwnProperty(r = n) && (o[r] = "color" === r ? new LA(t[n]) : t[n]) + } + } + }, + ty.prototype.getNode = function (A) { + for (var e = this.children, t = 0, i = e.length; i > t; t += 1) + if (e[t].name === A.toString()) + return e[t]; + return null + }, + ty.prototype.removeNodeById = function (A) { + var e = this.getNode(A); + return e && (delete this.mapColorToNodeId[e.name], + this.remove(e)), + !!(e = this.getNode("wireframe_" + A)) && (delete this.mapColorToNodeId[e.name], + this.remove(e), + !0) + }, + ty.prototype.clearNodes = function () { + this.clear(), + this.mapColorToNodeId = {} + }, + ty.prototype.setNodeVisibleById = function (A, e) { + var t = this.getNode(A); + return t && (t.visible = e), + !!(t = this.getNode("wireframe_" + A)) && (t.visible = e, + !0) + }, + ty.prototype.showAllNodes = function () { + for (var A = this.children, e = 0, t = A.length; t > e; e += 1) + A[e].visible = !0 + }, + ty.prototype.hideAllNodes = function () { + for (var A = this.children, e = 0, t = A.length; t > e; e += 1) + A[e].visible = !1 + }, + ty.prototype.setNodeColorById = function (A, e) { + var t = this.getNode(A); + console.log('setNodeColorById...', t); + if (t) { + var i = t.material; + return i.color = new LA(e.red / 255, e.green / 255, e.blue / 255), + i.opacity = e.alpha, + e !== this.selectionColor && e !== this.selectionEdgeColor && this.setColorInMap(t.name, i), + !0 + } + return !1 + }, + ty.prototype.getNodeColorById = function (A) { + return this.mapColorToNodeId[A] + }, + ty.prototype.setWireframeColorById = function (A, e) { + console.log('setWireframeColorById'); + return this.setNodeColorById("wireframe_" + A, e) + }, + ty.prototype.getWireframeColorById = function (A) { + return this.getNodeColorById("wireframe_" + A) + }, + ty.prototype.applySelection = function (A) { + console.log('applySelection77') + console.log(this.selectionColor) + this.clearSelection(); + var e = this.selectionIds, + t = this.mapColorToNodeId, + i = A.sceneState.selectionSet; + + console.log('i>>',i) + // debugger; + for (var o in i) + t[o] && (e[o] = !0, + // this.setNodeColorById(o, this.selectionColor), + this.setNodeColorById(o, { + alpha: 0.3, + blue: 50, + green: 224, + red: 240 + }), + this.setWireframeColorById(o, this.selectionEdgeColor)) + }, + ty.prototype.clearSelection = function () { + console.log('clearSelection') + var A = this.mapColorToNodeId; + console.log('A',A) + if (this.selectionIds) { + console.log(this.selectionIds) + for (var e = this.children, t = 0, i = e.length; i > t; t += 1) { + var o = e[t], + n = A[o.name]; + o.material.color = new LA(n.red / 255, n.green / 255, n.blue / 255), + o.material.opacity = n.alpha + } + this.selectionIds = {} + } + }, + ty.prototype.applyHover = function (A) { + var e = A.sceneState; + if (e.hoverId && !e.isSelected(e.hoverId)) { + var t = this.getNode(e.hoverId); + if (t) { + this.hoveredId = e.hoverId; + var i = this.mapColorToNodeId[this.hoveredId], + o = Kd.getHoverColorByColor({ + r: i.red / 255, + g: i.green / 255, + b: i.blue / 255, + a: i.alpha + }); + t.material.color.setRGB(o.r, o.g, o.b), + t.material.opacity = o.a + } + } + }, + ty.prototype.clearHover = function () { + var A = this.hoveredId; + if (A) + if (this.selectionIds[A]) + this.hoveredId = null; + else { + var e = this.getNode(A); + if (e) { + var t = this.mapColorToNodeId[A]; + e.material.color.setRGB(t.red / 255, t.green / 255, t.blue / 255), + e.material.opacity = t.alpha, + this.hoveredId = null + } else + this.hoveredId = null + } + }, + iy.prototype.destroy = function () { + this.scene = void 0, + this._clearLights(), + this._clearLightHelpers() + }, + iy.prototype.currentLights = function () { + if (this.lightArray) + return [].concat(this.lightArray) + }, + iy.prototype.setLightPreset = function (A) { + this._currentPreset !== A && (vc.LightPreset = A, + this._currentPreset = A, + this._clearLights(), + this._clearLightHelpers(), + this._createLights(), + this.setIntensityFactor(this._intensityFactor), + this.lightHelper && this._createLightHelpers()) + }, + iy.prototype.getLightPreset = function () { + return this._currentPreset + }, + iy.prototype.updateLights = function (A) { + if (this.lightArray) { + var e = new y(0, 0, 1), + t = Math.PI / 4, + i = A.position.clone(); + i.sub(A.target), + i.normalize(); + var o = null; + if (0 === this._currentPreset) { + var n = this.lightArray[1]; + n.position.set(i.x, i.y, i.z), + n.updateMatrixWorld(!0) + } else if (1 === this._currentPreset || 3 === this._currentPreset) { + var r = this.lightArray[2], + a = this.lightArray[3]; + o = i.clone().applyAxisAngle(e, -1.2 * t), + r.position.copy(o).normalize(), + r.position.multiplyScalar(1e3), + r.position.z = 600, + r.updateMatrixWorld(), + o = i.clone().applyAxisAngle(e, Number(t)), + a.position.copy(o).normalize(), + a.position.multiplyScalar(1e3), + a.position.z = 600, + a.updateMatrixWorld() + } else if (2 === this._currentPreset) { + var s = this.lightArray[1], + l = this.scene.getBoundingBox().getCenter(new y), + c = new y(l.x - (o = this.lightDir).x, l.y - o.y, l.z - o.z); + s.position.copy(c), + s.target.position.set(l.x, l.y, l.z), + s.target.updateMatrixWorld(!0), + s.updateMatrixWorld(!0) + } else { + s = this.lightArray[1]; + o = i.clone().applyAxisAngle(e, -2 * t), + s.position.copy(o).normalize(), + s.position.multiplyScalar(1e3), + s.position.z = 600, + s.updateMatrixWorld() + } + this.lightHelperArray && this.updateLightHelper() + } + }, + iy.prototype.updateLightHelper = function () { + for (var A = 0; this.lightHelperArray.length > A; A += 1) { + var e = this.lightHelperArray[A]; + e.update(), + e.updateMatrixWorld(!0) + } + }, + iy.prototype.setIntensityFactor = function (A) { + if (!isNaN(A)) { + var e = Number(A); + if (e >= 0 && (this._intensityFactor = e, + vc.LightIntensityFactor = this._intensityFactor, + this.lightArray)) + for (var t = 0, i = this.lightArray.length; i > t; t += 1) { + var o = this.lightArray[t]; + o.intensity = o.initIntensity * this._intensityFactor + } + } + }, + iy.prototype.getIntensityFactor = function () { + return this._intensityFactor + }, + iy.prototype.setAmbientLightIntensity = function (A) { + if (this._ambientLight) { + if (isNaN(A)) + return; + var e = Number(A); + if (0 > e) + return; + this._ambientLight.intensity = e + } + }, + iy.prototype.getAmbientLightIntensity = function () { + if (this._ambientLight) + return this._ambientLight.intensity + }, + iy.prototype._createLights = function () { + var A = null; + switch (this._currentPreset) { + case 0: + A = this._lightPreset0(); + break; + case 1: + A = this._lightPreset1(); + break; + case 2: + A = this._lightPreset2(); + break; + case 3: + A = this._lightPreset3(); + break; + case 4: + A = this._lightPreset4(); + break; + default: + (A = this._commonLights(.72))[1].color.setHex(16777215) + } + if (this.lightArray = A, + this.scene && this.lightArray) + for (var e = 0, t = this.lightArray.length; t > e; e += 1) + this.scene.add(this.lightArray[e]), + this.lightArray[e].updateMatrixWorld() + }, + iy.prototype._clearLights = function () { + if (this.lightArray) { + for (var A = 0; this.lightArray.length > A; A += 1) { + var e = this.lightArray[A]; + e.parent && e.parent.remove(e) + } + this.lightArray = void 0 + } + this._ambientLight = void 0 + }, + iy.prototype._createLightHelpers = function () { + if (this.lightArray) + for (var A = 0; this.lightArray.length > A; A += 1) { + var e = this.lightArray[A]; + if (e instanceof Ra) { + var t = new ll(e, 6e3); + this.lightHelperArray || (this.lightHelperArray = []), + this.lightHelperArray.push(t), + this.scene && this.scene.add(t) + } + } + }, + iy.prototype._clearLightHelpers = function () { + if (this.lightHelperArray) { + for (var A = 0; this.lightHelperArray.length > A; A += 1) { + var e = this.lightHelperArray[A]; + e.parent && e.parent.remove(e) + } + this.lightHelperArray = void 0 + } + }, + iy.prototype._commonLights = function (A, e) { + var t = [], + i = new Ta(16777215, .6); + i.intensity = .3, + i.initIntensity = i.intensity, + t.push(i), + this._ambientLight = i; + var o = new Ra(16777215, 1); + return o.color.setHex(14800580), + o.position.set(-100, 100, 160), + o.intensity = .72, + o.initIntensity = o.intensity, + o.distance = 300, + o.updateMatrixWorld(), + t.push(o), + vc.EnableShadow && (o.castShadow = !0, + o.shadow.camera.near = 0, + o.shadow.camera.far = 5e6, + o.shadow.camera.left = -2e5, + o.shadow.camera.right = 2e5, + o.shadow.camera.top = 2e5, + o.shadow.camera.bottom = -2e5, + o.distance = 1110, + o.shadow.mapSize.height = 1028, + o.shadow.mapSize.width = 1028), + t + }, + iy.prototype._lightPreset0 = function () { + var A = null; + if (!vc.EnableLightmap) { + A = []; + var e = .3, + t = new Sa(16777215, 16777215, e); + A.push(t), + t.initIntensity = e, + t.position.set(0, 0, 500), + t.updateMatrixWorld(!0); + var i = new Ra(16777215, e = .7); + A.push(i), + i.initIntensity = e, + i.color.setHSL(.1, .95, 1), + i.position.set(-1, 1, .75), + i.position.multiplyScalar(50) + } + return A + }, + iy.prototype._lightPreset1 = function () { + var A = this._commonLights(.4, .56); + A || (A = []); + var e = new Ra(16777215, 1); + A.push(e), + e.color.setHex(16777215), + e.position.set(100, 100, 100), + e.intensity = .4, + e.initIntensity = e.intensity, + e.updateMatrixWorld(); + var t = new Ra(16777215, 1); + return A.push(t), + t.color.setHex(16777215), + t.position.set(-100, -100, 100), + t.intensity = .18, + t.initIntensity = t.intensity, + t.updateMatrixWorld(), + A + }, + iy.prototype._lightPreset2 = function () { + var A = this._commonLights(); + A || (A = []); + var e = new Ra(16777215, 1); + A.push(e), + e.position.set(60, 130, 80), + e.intensity = .28, + e.initIntensity = e.intensity, + e.updateMatrixWorld(); + var t = new Ra(16777215, 1); + A.push(t), + t.color.setHex(8100788), + t.position.set(100, -100, 80), + t.intensity = .22, + t.initIntensity = t.intensity, + t.updateMatrixWorld(); + var i = new Ra(16777215, 1); + return A.push(i), + i.color.setHex(8100788), + i.position.set(-140, -50, 80), + i.intensity = .18, + i.initIntensity = i.intensity, + i.updateMatrixWorld(), + A + }, + iy.prototype._lightPreset3 = function () { + var A = this._commonLights(.4, .56); + A || (A = []); + var e = new Ra(16777215, 1); + A.push(e), + e.color.setHex(16777215), + e.position.set(100, 100, 100), + e.intensity = .22, + e.initIntensity = e.intensity, + e.updateMatrixWorld(); + var t = new Ra(16777215, 1); + return A.push(t), + t.color.setHex(16777215), + t.position.set(-100, -100, 100), + t.intensity = .18, + t.initIntensity = t.intensity, + t.updateMatrixWorld(), + A + }, + iy.prototype._lightPreset4 = function () { + var A = this._commonLights(.4, .56); + A || (A = []); + var e = new Ra(16777215, 1); + A.push(e), + e.color.setHex(16777215), + e.position.set(100, 100, 100), + e.intensity = .4, + e.initIntensity = e.intensity, + e.updateMatrixWorld(); + var t = new Ra(16777215, 1); + return A.push(t), + t.color.setHex(16777215), + t.position.set(-100, -100, 100), + t.intensity = .1, + t.initIntensity = t.intensity, + t.updateMatrixWorld(), + A[0].intensity = .3, + A[1].intensity = .2, + this.enableShadowLight(), + A + }, + iy.prototype.enableShadowLight = function () { + this.lightCastShadow ? this.lightCastShadow.visible = !0 : (this.lightCastShadow = new Ra(16777215, .15), + this.lightCastShadow.intensity = .5, + this.lightCastShadow.initIntensity = .5, + this.lightCastShadow.castShadow = !0, + this.lightCastShadow.shadow.mapSize.width = 1024, + this.lightCastShadow.shadow.mapSize.height = 1024, + this.lightCastShadow.shadow.bias = -9e-4, + this.scene.add(this.lightCastShadow)), + this.lightCastShadow.updateMatrixWorld() + }, + iy.prototype.getLightDirFromAltitudeAndAzimuth = function (A, e) { + var t = Math.sin(e), + i = Math.cos(e); + return e > 0 && (i = -i), + new y(t, i, Math.sin(A) / Math.cos(A)).multiplyScalar(-100) + }, + iy.prototype.disableShadowLight = function () { + this.lightCastShadow && (this.lightCastShadow.visible = !1) + }, + iy.prototype.updateShadowLight = function () { + if (null !== this.scene.geometryGroup.boundingBox && this.lightCastShadow && this.lightCastShadow.visible) { + var A = this.scene.getBoundingBox().clone(), + e = new y, + t = A.getSize(e); + t.multiplyScalar(.2), + A.min.sub(t), + A.max.add(t); + var i = A.getCenter(new y), + o = this.shadowLightDir, + n = new y(i.x - o.x, i.y - o.y, i.z - o.z); + this.lightCastShadow.position.set(n.x, n.y, n.z), + this.lightCastShadow.target.position.set(i.x, i.y, i.z), + this.lightCastShadow.target.updateMatrixWorld(!0), + this.lightCastShadow.updateMatrixWorld(!0); + var r = this.lightCastShadow.shadow.camera; + r.position.set(n.x, n.y, n.z), + r.lookAt(i), + r.updateMatrixWorld(), + r.matrixWorldInverse.getInverse(r.matrixWorld), + t = A.getSize(new y), + A.min.z = A.min.z - .05 * t.z; + var a = new EA(new y(0, 0, 1), -A.min.z), + s = a.normal.dot(o), + l = A.max.clone(), + c = -(l.dot(a.normal) + a.constant) / s, + h = new y; + h.copy(o).multiplyScalar(c).add(l), + A.expandByPoint(h), + A.applyMatrix4(r.matrixWorldInverse), + r.left = A.min.x, + r.right = A.max.x, + r.top = A.max.y, + r.bottom = A.min.y, + r.far = 1.5 * -A.min.z, + r.near = -A.max.z, + r.updateProjectionMatrix() + } + }, + iy.prototype.disableLights = function () { + if (this.lightArray) + for (var A = 0, e = this.lightArray.length; e > A; A += 1) + this.lightArray[A].visible = !1 + }, + iy.prototype.enableLights = function () { + if (this.lightArray) + for (var A = 0, e = this.lightArray.length; e > A; A += 1) + this.lightArray[A].visible = !0 + }; + var oy = function () { + console.log('oy..................') + H.call(this), + this.type = "Scene", + this.autoUpdate = !1, + this.tempVector3 = new y, + this.objectGroups = new ep, + this.add(this.objectGroups), + this.geometryGroup = new ep(gp.GEOMETRY, { + pickableType: Qc.Geometry, + globalSpace: !0 + }), + this.geometryGroup.boundingBox = new aA, + this.pool = new $C(Kf, 0), + this.expandScalar = 1.01, + this.clipPlanes = null, + this.fillClipPlane = null, + this.areaNode = null, + this.extrudeBodyManager = null, + this.externalScene = null, + this.externalComponentManager = null, + this.customPlaneManager = null, + this.axisGridManager = null, + this.lightManager = new iy(this), + this.selectedMeshes = [], + this.nonSelectedMeshes = [], + this.selectedInstanceMeshes = [], + this.nonSelectedInstanceMeshes = [], + this.componentTransformControl = void 0 + }; + (oy.prototype = Object.create(H.prototype)).constructor = oy, + oy.prototype.createCapStencilMaterials = function () { + this.backMaterial || (this.backMaterial = Kd.createStandardMaterial({ + color: 16711680, + colorWrite: !1, + depthWrite: !1, + depthTest: !1, + side: 1, + stencilWrite: !0, + stencilFunc: 519, + stencilRef: 1, + stencilFuncMask: 255, + stencilFail: 7680, + stencilZFail: 7680, + stencilZPass: 7682 + }), + this.frontMaterial = Kd.createStandardMaterial({ + color: 255, + colorWrite: !1, + depthWrite: !1, + depthTest: !1, + side: 0, + stencilWrite: !0, + stencilFunc: 519, + stencilRef: 1, + stencilFuncMask: 255, + stencilFail: 7680, + stencilZFail: 7680, + stencilZPass: 7683 + }), + this.backInstanceMaterial = Kd.createStandardMaterial({ + color: 16711680, + colorWrite: !1, + depthWrite: !1, + depthTest: !1, + side: 1, + stencilWrite: !0, + stencilFunc: 519, + stencilRef: 1, + stencilFuncMask: 255, + stencilFail: 7680, + stencilZFail: 7680, + stencilZPass: 7682 + }), + this.backInstanceMaterial.defines.USE_INSTANCE = "", + this.backInstanceMaterial.defines.USE_INSTANCE_NORMAL = "", + this.frontInstanceMaterial = Kd.createStandardMaterial({ + color: 255, + colorWrite: !1, + depthWrite: !1, + depthTest: !1, + side: 0, + stencilWrite: !0, + stencilFunc: 519, + stencilRef: 1, + stencilFuncMask: 255, + stencilFail: 7680, + stencilZFail: 7680, + stencilZPass: 7683 + }), + this.frontInstanceMaterial.defines.USE_INSTANCE = "", + this.frontInstanceMaterial.defines.USE_INSTANCE_NORMAL = "") + }, + oy.prototype.destroy = function () { + this.lightManager.destroy(), + this.clearAll(), + this.pool.destroy(), + this.pool = null, + this.geometryGroup = null, + this.objectGroups = null, + this.clipPlanes = null, + this.fillClipPlane = null, + this.areaNode = null, + this.extrudeBodyManager = null, + this.externalComponentManager = null, + this.axisGridManager = null, + this.IBLMaps = null, + this.transformMatrix = null, + this.selectedMeshes = null, + this.nonSelectedMeshes = null, + this.selectedInstanceMeshes = null, + this.nonSelectedInstanceMeshes = null + }, + oy.prototype.resizePool = function (A) { + vc.MergeComponent || (this.geometryGroup.clear(), + this.pool.resize(A, { + parent: this.geometryGroup + })) + }, + oy.prototype.clearAll = function () { + this.pool.clear(), + this.autoUpdate = !1 + }, + oy.prototype.getRootNode = function () { + return this.geometryGroup + }, + oy.prototype.getBoundingBox = function () { + var A = this.getBoundingBoxWorld(); + return A.applyMatrix4(this.geometryGroup.matrix), + A + }, + oy.prototype.getGeometryBoundingBox = function () { + var A = new aA; + A.copy(this.geometryGroup.boundingBox); + var e = new y, + t = A.getSize(e); + return t.multiplyScalar(this.expandScalar - 1), + A.min.sub(t), + A.max.add(t), + A.applyMatrix4(this.geometryGroup.matrix), + A + }, + oy.prototype.getBoundingBoxWorld = function () { + var A = new aA, + e = new y; + return function () { + A.copy(this.geometryGroup.boundingBox), + this.componentTransformControl && A.union(this.componentTransformControl.getBoundingBox()); + var t = A.getSize(e); + return t.multiplyScalar(this.expandScalar - 1), + A.min.sub(t), + A.max.add(t), + this.fillClipPlane && this.fillClipPlane.visible ? A.expandByObject(this.fillClipPlane) : this.clipPlanes && this.clipPlanes.visible && A.expandByObject(this.clipPlanes), + A + } + }(), + oy.prototype.setBoundingBoxWorld = function (A) { + this.geometryGroup.boundingBox ? this.geometryGroup.boundingBox.copy(A) : this.geometryGroup.boundingBox = A; + var e = A.clone(); + if (this.clipPlanes && this.clipPlanes.visible) { + var t = e.getSize(new y); + t.multiplyScalar(this.expandScalar - 1), + e.min.sub(t), + e.max.add(t), + this.clipPlanes.setSectionBox(e.min, e.max) + } + if (this.fillClipPlane && this.fillClipPlane.visible) { + var i = new y; + e.getSize(i), + i.multiplyScalar(.05), + e.min.sub(i), + e.max.add(i), + this.fillClipPlane.resize(e.getSize(i), e.getCenter(new y)) + } + }, + oy.prototype.expandBoundingBoxWorldBy = function (A) { + if (A) { + var e = A; + A instanceof Array == !1 && (e = [A]); + for (var t = 0, i = e.length; i > t; t += 1) { + var o = e[t]; + (o instanceof Ue || o instanceof H) && this.geometryGroup.boundingBox.expandByObject(o) + } + } + }, + oy.prototype.getTransformMatrixGlobal = function () { + return this.transformMatrix + }, + oy.prototype.getMatrixGlobal = function () { + return this.geometryGroup.matrix.clone() + }, + oy.prototype.getGlobalScaleFactor = function () { + return this.geometryGroup.matrix.elements[0] + }, + oy.prototype.getMatrixWorldGlobal = function () { + return this.geometryGroup.matrixWorld + }, + oy.prototype.getRotationGlobal = function () { + if (this.geometryGroup.matrix) { + var A = new M; + A.extractRotation(this.geometryGroup.matrix); + var e = new F; + return e.setFromRotationMatrix(A), + e + } + return null + }, + oy.prototype.getTrackingPointFromBoundingBox = function (A, e) { + if (!this.geometryGroup.boundingBox) + return null; + var t = e.origin, + i = this.getBoundingBox(), + o = 0, + n = [new y, new y, new y, new y, new y, new y, new y, new y]; + n[0].set(i.min.x, i.min.y, i.min.z), + n[1].set(i.min.x, i.min.y, i.max.z), + n[2].set(i.min.x, i.max.y, i.min.z), + n[3].set(i.min.x, i.max.y, i.max.z), + n[4].set(i.max.x, i.min.y, i.min.z), + n[5].set(i.max.x, i.min.y, i.max.z), + n[6].set(i.max.x, i.max.y, i.min.z), + n[7].set(i.max.x, i.max.y, i.max.z); + for (var r = 0; 8 > r; r += 1) { + var a = new y; + a.subVectors(n[r], t); + var s = a.dot(A); + s > o && (o = s) + } + var l = A.clone().multiplyScalar(o), + c = t.clone().add(l), + h = new EA; + return h.setFromNormalAndCoplanarPoint(A, c), + e.intersectPlane(h, new y) + }, + oy.prototype.getNearDepthByRect = function () { + var A = new aA, + e = 1 / 0, + t = new M, + i = new y; + + function o(A) { + i.setFromMatrixPosition(A.matrixWorld), + i.applyProjection(t); + var o = i.z; + o >= e || 0 > o || o > 1 || (e = o) + } + return function (i, n) { + function r(e) { + if (e instanceof Kf) { + if (! function (e, t) { + if (!t.boundingBox || t instanceof Ue) { + var i = t.geometry; + null === i.boundingBox && i.computeBoundingBox(), + A.copy(i.boundingBox), + A.applyMatrix4(t.matrixWorld) + } else + A.copy(t.boundingBox), + A.applyMatrix4(t.matrixWorld); + return e.intersectsBox(A) + }(i, e)) + return; + o(e) + } else if (e.worldBoundingBox) { + if (!i.intersectsBox(e.worldBoundingBox)) + return; + o(e) + } + var t = e.children; + if (t) + for (var n = 0, a = t.length; a > n; n += 1) { + var s = t[n]; + s.visible && r(s) + } + } + e = 1 / 0, + t.multiplyMatrices(n.projectionMatrix, n.matrixWorldInverse); + for (var a = this.geometryGroup.children, s = 0, l = a.length; l > s; s += 1) { + var c = a[s]; + c.visible && r(c) + } + return e + } + }(), + oy.prototype.getExpandScalar = function () { + return this.expandScalar + }, + oy.prototype.hasClipPlanes = function () { + return null !== this.clipPlanes + }, + oy.prototype.getClipPlanes = function (A) { + var e = this.getBoundingBox(), + t = e.getSize(new y), + i = e.getCenter(this.tempVector3); + return null === this.clipPlanes ? (this.clipPlanes = new HC(t, i), + this.objectGroups.add(this.clipPlanes)) : A && this.clipPlanes.setSectionBox(e.min, e.max), + this.clipPlanes + }, + oy.prototype.setClipPlanes = function (A) { + if (A) { + var e = this.getClipPlanes(); + A.setFromCenterAndSize(A.getCenter(new y), A.getSize(new y).multiplyScalar(this.expandScalar)), + e.setSectionBox(A.min, A.max) + } + }, + oy.prototype.resetClipPlanes = function () { + var A = this.getClipPlanes(), + e = this.getBoundingBox(); + A.reset(), + e.max.x !== -1 / 0 && e.max.y !== -1 / 0 && e.max.z !== -1 / 0 && e.min.x !== 1 / 0 && e.min.y !== 1 / 0 && e.min.z !== 1 / 0 ? (e.setFromCenterAndSize(e.getCenter(new y), e.getSize(new y)), + A.setSectionBox(e.min, e.max)) : this.clipPlanes = null + }, + oy.prototype.hasFillClipPlanes = function () { + return null != this.fillClipPlane + }, + oy.prototype.getFillClipPlane = function () { + var A = new aA; + A.copy(this.geometryGroup.boundingBox), + A.applyMatrix4(this.geometryGroup.matrix); + var e = A.getSize(new y); + e.multiplyScalar(.05), + A.min.sub(e), + A.max.add(e); + var t = A.getSize(new y), + i = A.getCenter(new y); + return null === this.fillClipPlane ? (this.fillClipPlane = new _C(t, i), + this.objectGroups.add(this.fillClipPlane)) : this.fillClipPlane.cubeSize.equals(t) || this.fillClipPlane.resize(t, i), + this.fillClipPlane + }, + oy.prototype.disableClipPlanes = function () { + null != this.clipPlanes && (this.clipPlanes.enable(!1, !1), + this.clipPlanes.update()), + null != this.fillClipPlane && (this.fillClipPlane.enable(!1, !1), + this.fillClipPlane.update()) + }, + oy.prototype.getAreaNode = function () { + return this.areaNode + }, + oy.prototype.getAxisGridManager = function () { + return this.axisGridManager + }, + oy.prototype.getExtrudeBodyManager = function () { + return null === this.extrudeBodyManager && (this.extrudeBodyManager = new ty, + this.objectGroups.add(this.extrudeBodyManager), + this.extrudeBodyManager.matrix.copy(this.geometryGroup.matrix), + this.extrudeBodyManager.matrixAutoUpdate = !1, + this.extrudeBodyManager.updateMatrixWorld(!0)), + this.extrudeBodyManager + }, + oy.prototype.getCustomPlaneManager = function () { + return this.customPlaneManager + }, + oy.prototype.getExternalScene = function () { + return null === this.externalScene && (this.externalScene = new ey, + this.add(this.externalScene), + this.externalScene.updateMatrixWorld(!0)), + this.externalScene + }, + oy.prototype.shrinkScopeByClipPlane = function (A, e) { + if (this.clipPlanes && this.clipPlanes.isEnabled()) { + var t = this.clipPlanes.hitTest(A); + if (null === t.distance && void 0 === t.distance) + return; + t.sign ? t.distance > e.near && (e.near = t.distance) : e.far > t.distance && (e.far = t.distance) + } + }, + oy.prototype.updateWorldMatrixByMatrix = function (A) { + for (var e = this.objectGroups.children, t = 0, i = e.length; i > t; t += 1) + e[t].globalSpace && (e[t].matrix.copy(A), + e[t].matrixAutoUpdate = !1, + e[t].updateMatrixWorld(!0)) + }, + oy.prototype.currentLights = function () { + return this.lightManager.currentLights() + }, + oy.prototype.setLightPreset = function (A) { + this.lightManager.setLightPreset(A) + }, + oy.prototype.getLightPreset = function () { + return this.lightManager.getLightPreset() + }, + oy.prototype.setLightIntensityFactor = function (A) { + this.lightManager.setIntensityFactor(A) + }, + oy.prototype.updateLights = function (A) { + this.lightManager.updateLights(A) + }, + oy.prototype.setAmbientLightIntensity = function (A) { + this.lightManager.setAmbientLightIntensity(A) + }, + oy.prototype.getAmbientLightIntensity = function () { + return this.lightManager.getAmbientLightIntensity() + }, + oy.prototype.getOrCreateGroup = function (A, e) { + for (var t = this.objectGroups.children, i = 0, o = t.length; o > i; i += 1) + if (t[i].name === A) + return t[i]; + var n = new ep(A, e); + return n.isGlobalSpace() && (n.matrix.copy(this.geometryGroup.matrix), + n.matrixAutoUpdate = !1, + n.updateMatrixWorld(!0)), + this.objectGroups.add(n), + n + }, + oy.prototype.getGroup = function (A) { + for (var e = this.objectGroups.children, t = 0, i = e.length; i > t; t += 1) + if (e[t].name === A) + return e[t]; + return null + }, + oy.prototype.getGroupType = function (A) { + var e = A.split("|"); + return { + groupType: e[0], + modelKey: e.length > 1 ? e[1] : void 0 + } + }, + oy.prototype.getGroups = function () { + return this.objectGroups.children + }, + oy.prototype.removeGroup = function (A) { + this.objectGroups.remove(A) + }, + oy.prototype.removeGroupByName = function (A) { + this.objectGroups.removeByName(A) + }, + oy.prototype.hasGroup = function (A) { + return this.objectGroups.hasChild(A) + }, + oy.prototype.prepareScene = function () {}, + oy.prototype.parseRootNode = function (A) { + var e = this.geometryGroup, + t = uh.box3FromObject(A.minBoundary, A.maxBoundary); + null === e.boundingBox || e.boundingBox.isEmpty() ? e.boundingBox = t : (e.boundingBox.expandByPoint(t.min), + e.boundingBox.expandByPoint(t.max)), + e.updateMatrixWorld(!0) + }, + oy.prototype.intersectToWorld = function (A, e) { + var t = this.getMatrixGlobal(); + A.worldPosition = Tu.getWorldPositionOfMesh(A.point, t); + var i = e.getComponentInfoByUserId(A.userId); + i && (A.worldBoundingBox = i.boundingBox.clone()) + }, + oy.prototype.worldToDrawing = function (A) { + var e = this.getMatrixGlobal(), + t = new y(A.x, A.y, A.z); + return t.applyMatrix4(e), + t + }, + oy.prototype.drawingToWorld = function (A) { + var e = this.getMatrixGlobal(), + t = new M; + t.getInverse(e); + var i = new y(A.x, A.y, A.z); + return i.applyMatrix4(t), + i + }, + oy.prototype.getBoundingBoxWorldByMesh = function (A) { + var e = this.getMatrixGlobal(), + t = A.boundingBox; + t || (A.geometry.boundingBox || A.geometry.computeBoundingBox(), + t = A.geometry.boundingBox); + var i = t.clone(); + i.applyMatrix4(A.matrixWorld); + var o = new M; + return o.getInverse(e), + i.applyMatrix4(o), + i + }, + oy.prototype.getObjectPool = function () { + return this.pool + }, + oy.prototype.getBoundingBoxOfGeometries = function (A) { + var e = new aA, + t = []; + if (Array.isArray(A)) + t = A; + else + for (var i in A) + A.hasOwnProperty(i) && t.push(i); + for (var o = 0, n = t.length; n > o; o += 1) { + var r = this.objectGroups.getObjectByProperty("key", t[o]); + if (r) { + var a = r.geometry; + if (a) { + a.boundingBox || a.computeBoundingBox(); + var s = a.boundingBox; + if (s) { + var l = s.clone(); + r.matrixWorld && l.applyMatrix4(r.matrixWorld), + e.expandByPoint(l.min), + e.expandByPoint(l.max) + } + } else + Bh.log("empty geometry!") + } + } + return e + }, + oy.prototype.adjustInstanceVisibility = function (A) { + this.traverse((function (e) { + if ((e instanceof Ue || e instanceof jo) && e.geometry instanceof Na) { + var t = e.visible; + A && !e.bVisible || (e.visible = A), + e.bVisible = t + } + })) + }, + oy.prototype.adjustVisibility = function (A) { + this.traverse((function (e) { + if ((e instanceof Ue || e instanceof jo) && !(e.geometry instanceof Na)) { + var t = e.visible; + A && !e.bVisible || (e.visible = A), + e.bVisible = t + } + })) + }, + oy.prototype.changeVisibilityOfSelectedObjects = function (A) { + var e = this; + A || (e.selectedMeshes.length = 0, + e.selectedInstanceMeshes.length = 0); + var t = e.selectedMeshes, + i = e.selectedInstanceMeshes; + this.traverse((function (o) { + (o instanceof Ue || o instanceof jo) && (o.geometry instanceof Na ? A ? function (A) { + for (var t = 0, i = e.selectedInstanceMeshes.length; i > t; t += 1) { + if (A === e.selectedInstanceMeshes[t].object) { + for (var o = e.selectedInstanceMeshes[t].indices, n = A.geometry.getAttribute("vState").array, r = 0, a = o.length; a > r; r += 1) + n[o[r]] = Hc.SELECTED; + A.geometry.getAttribute("vState").needsUpdate = !0 + } + } + }(o) : function (A) { + if (A.visible) { + for (var e = [], t = A.geometry.getAttribute("vState").array, o = 0; t.length > o; o += 1) + t[o] === Hc.SELECTED && (e.push(o), + t[o] = Hc.HIDDEN); + e.length && (A.geometry.getAttribute("vState").needsUpdate = !0, + i.push({ + object: A, + indices: e + })) + } + }(o) : A ? function (A) { + for (var t = 0, i = e.selectedMeshes.length; i > t; t += 1) { + if (A === e.selectedMeshes[t].object) + for (var o = e.selectedMeshes[t].indices, n = 0, r = o.length; r > n; n += 1) { + var a = o[n], + s = A.geometry.groups[a.idx]; + s.start = a.start, + s.count = a.count + } + } + }(o) : function (A) { + if (A._indicesGroup && A.visible) { + var e = [], + i = A.geometry.groups; + if (i && i.length) { + for (var o = 0, n = i.length; n > o; o += 1) { + var r = i[o]; + r.materialIndex === zc.SELECTED && (e.push({ + idx: o, + start: r.start, + count: r.count + }), + r.start = 0, + r.count = 0) + } + e.length && t.push({ + object: A, + indices: e + }) + } + } + }(o)) + })) + }, + oy.prototype.changeVisibilityOfNonSelectedObjects = function (A) { + var e = this; + A || (e.nonSelectedMeshes.length = 0, + e.nonSelectedInstanceMeshes.length = 0); + var t = e.nonSelectedMeshes, + i = e.nonSelectedInstanceMeshes; + this.traverse((function (o) { + (o instanceof Ue || o instanceof jo) && (o.geometry instanceof Na ? A ? function (A) { + for (var t = 0, i = e.nonSelectedInstanceMeshes.length; i > t; t += 1) { + if (A === e.nonSelectedInstanceMeshes[t].object) { + for (var o = e.nonSelectedInstanceMeshes[t].indices, n = A.geometry.getAttribute("vState").array, r = 0, a = o.length; a > r; r += 1) + n[o[r].idx] = o[r].state; + A.geometry.getAttribute("vState").needsUpdate = !0 + } + } + }(o) : function (A) { + if (A.visible) { + for (var e = [], t = A.geometry.getAttribute("vState").array, o = 0, n = t.length; n > o; o += 1) + t[o] !== Hc.SELECTED && t[o] !== Hc.HIDDEN && (e.push({ + idx: o, + state: t[o] + }), + t[o] = Hc.HIDDEN); + e.length && (A.geometry.getAttribute("vState").needsUpdate = !0, + i.push({ + object: A, + indices: e + })) + } + }(o) : A ? function (A) { + for (var t = 0, i = e.nonSelectedMeshes.length; i > t; t += 1) { + if (A === e.nonSelectedMeshes[t].object) { + var o = e.nonSelectedMeshes[t].indices; + if (null === o) + A.visible = !0; + else + for (var n = 0, r = o.length; r > n; n += 1) { + var a = o[n], + s = A.geometry.groups[a.idx]; + s.start = a.start, + s.count = a.count + } + } + } + }(o) : function (A) { + if (A._indicesGroup && A.visible) { + var e = [], + i = A.geometry.groups; + if (i && i.length) { + for (var o = 0, n = i.length; n > o; o += 1) { + var r = i[o]; + r.materialIndex !== zc.SELECTED && (e.push({ + idx: o, + start: r.start, + count: r.count + }), + r.start = 0, + r.count = 0) + } + e.length ? t.push({ + object: A, + indices: e + }) : (A.visible = !1, + t.push({ + object: A, + indices: null + })) + } else + A.visible = !1, + t.push({ + object: A, + indices: null + }) + } + }(o)) + })) + }, + oy.prototype.clearSelectedAndNonSelectedMeshes = function () { + this.selectedMeshes.length = 0, + this.nonSelectedMeshes.length = 0, + this.selectedInstanceMeshes.length = 0, + this.nonSelectedInstanceMeshes.length = 0 + }, + oy.prototype.setSkyBox = function (A, e, t, i, o) { + var n = A, + r = e || [Pd.skyBoxLeft, Pd.skyBoxRight, Pd.skyBoxBack, Pd.skyBoxFront, Pd.skyBoxUp, Pd.skyBoxDown], + a = this; + (new $r).setPath(n).load(r, (function (A) { + a.background = A, + t && t() + }), i, o) + }, + oy.prototype.drawBoundingBox = function (A) { + if (A) { + var e = this.getOrCreateGroup("BoundingBox", { + pickable: 0, + priority: 2 + }), + t = this.getBoundingBox(); + void 0 === this.boudingBoxNode ? (this.boudingBoxNode = new Ay(t, 16711680), + e.add(this.boudingBoxNode)) : this.boudingBoxNode.updateBBox(t), + this.boudingBoxNode.updateMatrixWorld(!0) + } else + this.removeGroupByName("BoundingBox") + }, + oy.prototype.calculateGisMapBox = function (A) { + var e = this.getGroup("ExternalComponentManager"), + t = this.getBoundingBoxWorld(), + i = t.clone(); + if (e) { + var o = A.position.clone(), + n = this.getMatrixWorldGlobal(), + r = (new M).getInverse(n); + o.applyMatrix4(r); + var a = 6370856e3, + s = o.z - t.min.z; + s = Math.abs(s); + var l = a * Math.acos(a / (a + s)); + i.min.x = o.x - l, + i.max.x = o.x + l, + i.min.y = o.y - l, + i.max.y = o.y + l, + i.min.z = t.min.z, + i.max.z = t.max.z + } + return i + }, + oy.prototype.getReceivingPlane = function (A) { + if (!this.receivingPlane) { + this.receivingPlane = this.getOrCreateGroup(gp.RECEIVESHADOWPLANE); + var e = new mr; + e.transparent = !0, + e.opacity = .2, + e.side = 2; + var t = new Ue(new et(1e6, 1e6), e); + t.receiveShadow = !0, + this.receivingPlane.add(t), + this.add(this.receivingPlane), + this.receivingPlane.matrixAutoUpdate = !1, + this.updateReceivingPlane() + } + return this.receivingPlane.visible = A, + this.receivingPlane + }, + oy.prototype.updateReceivingPlane = function () { + var A = this.receivingPlane.children[0], + e = this.getBoundingBoxWorld(), + t = e.getCenter(new y), + i = e.getSize(new y); + A.position.z = e.min.z - .05 * i.z, + A.position.x = t.x, + A.position.y = t.y, + A.scale.x = i.x / 1e4, + A.scale.y = i.y / 1e4, + this.receivingPlane.updateMatrixWorld(!0) + }, + Object.defineProperties(oy.prototype, { + lightArray: { + get: function () { + return Bh.warn("EIMMODEL.Scene: .lightArray 现在为 .lightManager.lightArray"), + this.lightManager.lightArray + } + }, + lightHelperArray: { + get: function () { + return Bh.warn("EIMMODEL.Scene: .lightHelperArray 现在为 .lightManager.lightHelperArray"), + this.lightManager.lightHelperArray + } + } + }); + var ny = function (A) { + this.selectionSet = {}, + this.selectionMaterial = Kd.createHighlightMaterial(), + this.selectionMaterial.colorState = Yc.SELECT, + this.selectionMaterial.name = "selection", + this.selectionMaterial.refreshUniforms(), + this.hoverId = void 0, + this.hoverMaterialDefaultParams = { + color: 14540253, + opacity: .9, + transparent: !0, + side: 2 + }, + this.hoverMaterial = Kd.createStandardMaterial(this.hoverMaterialDefaultParams), + this.hoverMaterial.name = "hover", + this.boxMaterialDefaultParams = { + color: 16776960, + opacity: 1, + transparent: !1 + }, + this.boxMaterial = new ko(this.boxMaterialDefaultParams), + this.boxMaterial.name = "box", + this.modelManager = A, + this.blinkComponentIds = {}; + var e = this; + this.filter = A.filter, + this.filter.observerForSceneState = function (t) { + e.removeSelection(t), + e.clearBlinkComponentsById(t), + A.viewerImpl.render() + }, + this.phongHoverMaterial = new Ir(this.hoverMaterialDefaultParams), + this.phongSelectionMaterial = new Ir(vc.SelectionColor) + }; + ny.prototype = { + constructor: ny, + destroy: function () { + this.selectionSet = null, + this.blinkComponentIds = null, + this.modelManager = null, + this.selectionMaterial.destroy(), + this.selectionMaterial = null, + this.hoverMaterial.destroy(), + this.hoverMaterial = null, + this.phongHoverMaterial.dispose(), + this.phongHoverMaterial = null, + this.phongSelectionMaterial.dispose(), + this.phongSelectionMaterial = null + }, + _dispatchChangeEvent: function () { + var A = this.getSelection(); + if (vc.EnableSelectionBoundingBox) { + var e = this.modelManager.scene.getOrCreateGroup("BoundingBox"); + if (A && A.length > 0) { + var t = this.modelManager.viewerImpl.getBoundingBoxByIds(A); + if (t.isEmpty()) + return void(e.visible = !1); + e.visible = !0; + var i = e.getObjectByName("Box"); + if (!i) { + var o = new Uint16Array([0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7]), + n = new Float32Array(24), + r = new he; + r.setIndex(new YA(o, 1)), + r.setAttribute("position", new YA(n, 3)), + (i = new jo(r, this.boxMaterial)).name = "Box", + i.matrixAutoUpdate = !1, + e.add(i) + } + var a = i.geometry.attributes.position, + s = a.array, + l = t.min, + c = t.max; + s[0] = c.x, + s[1] = c.y, + s[2] = c.z, + s[3] = l.x, + s[4] = c.y, + s[5] = c.z, + s[6] = l.x, + s[7] = l.y, + s[8] = c.z, + s[9] = c.x, + s[10] = l.y, + s[11] = c.z, + s[12] = c.x, + s[13] = c.y, + s[14] = l.z, + s[15] = l.x, + s[16] = c.y, + s[17] = l.z, + s[18] = l.x, + s[19] = l.y, + s[20] = l.z, + s[21] = c.x, + s[22] = l.y, + s[23] = l.z, + a.needsUpdate = !0 + } else + e.visible = !1 + } else { + var h = this.modelManager.scene.getObjectByName("BoundingBox"); + h && (h.visible = !1) + } + // debugger; + this.modelManager.dispatchEvent({ + type: Rc.ON_SELECTION_CHANGED, + selectionList: A + }) + }, + clearSelection: function (A) { + var e, t = !1; + if (void 0 === A) { + var i = []; + for (var o in this.selectionSet) { + for (var n in t = !1, + e = this.getSelectionSet(o)) + if (e.hasOwnProperty(n)) { + t = !0; + break + } + t && i.push(o) + } + if (i.length) { + for (var r = 0, a = i.length; a > r; r += 1) + this.selectionSet[i[r]] = {}, + this.modelManager.clearSelection(i[r]); + this._dispatchChangeEvent() + } + } else { + for (var n in e = this.getSelectionSet(A)) + if (e.hasOwnProperty(n)) { + t = !0; + break + } + t && (this.selectionSet[A] = {}, + this.modelManager.clearSelection(A), + this._dispatchChangeEvent()) + } + }, + addSelection: function (A, e) { + console.log('addSelection1111111111111111'); + if (A && A.length >= 1) { + var t, i = [], + o = !1, + n = this.modelManager, + r = this.filter; + if (void 0 === e) { + console.log('addSelection if'); + for (var a = {}, s = n.getModelKeys(), l = [], c = 0, h = s.length; h > c; c += 1) { + // console.log('addSelection22222222222222222222'); + var d = s[c]; + // debugger; + t = this.getSelectionSet(d), + o = !1; + for (var p = A.length - 1; p >= 0; p -= 1) { + // console.log('n.isUserIdExist(f = A[p], d) :>> ', n.isUserIdExist(f = A[p], d)); + // console.log('r.isComponentActive(f, d) :>> ', r.isComponentActive(f, d)); + n.isUserIdExist(f = A[p], d) && + (!t[f] && r.isComponentActive(f, d) && + (t[f] = !0, o = !0), + a[f] = !0) + } + // console.log('d :>> ', d); + o && l.push(d) + } + // for (p = A.length - 1; p >= 0; p -= 1) { + // a[f = A[p]] || i.push(f) + // } + // if (i.length > 0 && n.dispatchEvent({ + // type: Rc.ON_SELECTION_FAILED, + // failedId: i + // }), + // l.length) { + // for (var g = 0, u = l.length; u > g; g += 1) + // this.modelManager.applySelection(l[g]); + // // debugger; + // this._dispatchChangeEvent() + // } + + // debugger; + } else { + console.log('addSelection else'); + t = this.getSelectionSet(e); + for (p = A.length - 1; p >= 0; p -= 1) { + var f; + n.isUserIdExist(f = A[p], e) ? !t[f] && r.isComponentActive(f, e) && (t[f] = !0, + o = !0) : i.push(f) + } + i.length > 0 && n.dispatchEvent({ + type: Rc.ON_SELECTION_FAILED, + failedId: i + }), + o && (this.modelManager.applySelection(e), + this._dispatchChangeEvent()) + } + } + }, + setSelection: function (A, e) { + if (A && A.length >= 1){ + // debugger; + if (void 0 === e) { + console.log('setSelection if') + for (var t in this.selectionSet) + delete this.selectionSet[t]; + // debugger; + this.addSelection(A) + } else + console.log('setSelection else') + this.selectionSet[e] = {}, + this.addSelection(A, e) + } + + }, + removeSelection: function (A, e) { + console.log('removeSelection'); + if (A && A.length >= 1) { + var t = !1; + if (void 0 === e) { + var i = []; + for (var o in this.selectionSet) { + var n = this.getSelectionSet(o); + t = !1; + for (var r = 0, a = A.length; a > r; r += 1) { + var s = A[r]; + n[s] && (delete n[s], + t = !0) + } + t && i.push(o) + } + if (i.length) { + for (var l = 0, c = i.length; c > l; l += 1) + this.modelManager.applySelection(i[l]); + this._dispatchChangeEvent() + } + } else { + for (var h = this.getSelectionSet(e), d = 0, p = A.length; p > d; d += 1) { + var g = A[d]; + h[g] && (delete h[g], + t = !0) + } + t && (this.modelManager.applySelection(e), + this._dispatchChangeEvent()) + } + } + }, + getSelection: function (A) { + var e = {}; + if (void 0 === A) + for (var t in this.selectionSet) + for (var i = this.getSelectionSet(t), o = Object.keys(i), n = 0, r = o.length; r > n; n += 1) + e[o[n]] = !0; + else + e = this.getSelectionSet(t); + return Object.keys(e) + }, + hasSelection: function (A) { + var e, t = !1; + if (void 0 === A) + for (var i in this.selectionSet) { + for (var o in e = this.getSelectionSet(i)) + if (e.hasOwnProperty[o]) { + t = !0; + break + } + if (t) + break + } + else + for (var o in e = this.getSelection(A)) + if (e.hasOwnProperty[o]) { + t = !0; + break + } + return t + }, + getSelectionSet: function (A) { + if (void 0 === A) { + var e = {}; + for (var t in this.selectionSet) + for (var i = this.getSelectionSet(t), o = Object.keys(i), n = 0, r = o.length; r > n; n += 1) + e[o[n]] = !0; + return e + } + return void 0 === this.selectionSet[A] && (this.selectionSet[A] = {}), + this.selectionSet[A] + }, + isSelected: function (A, e) { + var t, i = !1; + if (void 0 === e) { + for (var o in this.selectionSet) + if ((t = this.selectionSet[o]) && t[A]) { + i = !0; + break + } + } else + (t = this.selectionSet[e]) && t[A] && (i = !0); + return i + }, + setHoverId: function (A, e) { + this.hoverId = A, + this.modelManager.applyHover(e) + }, + clearHover: function (A) { + this.hoverId = void 0, + this.modelManager.clearHover(A) + }, + getHoverMaterial: function (A) { + var e = A && A.isMeshPhongMaterial ? this.phongHoverMaterial.clone() : this.hoverMaterial.clone(); + if (A && A.hasOwnProperty("color")) { + var t = A.color.clone(), + i = Math.max(t.r, Math.max(t.g, t.b)); + 0 === i && (i = .5), + t.r += 0 === t.r ? .3 * i : .2 * t.r, + t.g += 0 === t.g ? .3 * i : .2 * t.g, + t.b += 0 === t.b ? .3 * i : .2 * t.b, + t.r > 1 && (t.r = 1), + t.g > 1 && (t.g = 1), + t.b > 1 && (t.b = 1), + 1 === t.r && 1 === t.g && 1 === t.b && (t.r = .87, + t.g = .87, + t.b = .87), + e.color.setHex(t.getHex()), + e.opacity = void 0 !== A.opacity ? A.opacity : this.hoverMaterialDefaultParams.opacity, + e.transparent = void 0 !== A.transparent ? A.transparent : this.hoverMaterialDefaultParams.transparent, + e.side = void 0 !== A.side ? A.side : this.hoverMaterialDefaultParams.side, + void 0 !== A.metalness && (e.metalness = A.metalness), + void 0 !== A.roughness && (e.roughness = A.roughness), + void 0 !== A.bumpMap && (e.bumpMap = A.bumpMap), + void 0 !== A.alphaMap && (e.alphaMap = A.alphaMap), + void 0 !== A.emissiveMap && (e.emissiveMap = A.emissiveMap), + void 0 !== A.envMap && (e.envMap = A.envMap), + void 0 !== A.envMapIntensity && (e.envMapIntensity = A.envMapIntensity), + null != A.map && (e.map = A.map), + e.opacity = Kd.getHoverOpacity(e.opacity), + e.transparent = !0, + e.needsUpdate = !0 + } + return e + }, + getHoverColorByMaterial: function (A) { + var e = void 0 !== A.opacity ? A.opacity : this.hoverMaterialDefaultParams.opacity; + if (e = Kd.getHoverOpacity(e), + !A.hasOwnProperty("color")) + return { + rgbaColor: [this.hoverMaterial.color.r, this.hoverMaterial.color.g, this.hoverMaterial.color.b, e], + transparent: !0 + }; + var t = A.color.clone(); + return { + rgbaColor: [t.r, t.g, t.b, e], + transparent: !0 + } + }, + setSelectionColor: function (A, e) { + console.log('setSelectionColor'); + var t = this.selectionMaterial.opacity; + e = void 0 === e ? t : e, + "0x" + this.selectionMaterial.color.getHexString() === A && t === e || (this.selectionMaterial.color.setHex(A), + e && (this.selectionMaterial.opacity = e), + this.selectionMaterial.needsUpdate = !0) + }, + getSelectionColor: function () { + var A = this.selectionMaterial.opacity; + return new Xh(this.selectionMaterial.color.getHex(), A) + }, + getSelectionMaterial: function () { + return this.selectionMaterial.clone() + }, + setBlinkComponentsById: function (A, e) { + if (this.blinkComponentIds = {}, + A && 0 !== A.length) { + for (var t = A.length - 1; t >= 0; t -= 1) { + this.filter.isComponentActive(A[t], e) && (this.blinkComponentIds[A[t]] = !0) + } + this.modelManager.applyBlink() + } + }, + addBlinkComponentsById: function (A, e) { + if (A && A.length) { + for (var t = this.blinkComponentIds, i = !1, o = A.length - 1; o >= 0; o -= 1) { + var n = A[o]; + !t[n] && this.filter.isComponentActive(n) && (t[n] = !0, + i = !0) + } + i && this.modelManager.applyBlink() + } + }, + clearBlinkComponentsById: function (A, e) { + if (A && A.length) { + for (var t = !1, i = this.blinkComponentIds, o = 0, n = A.length; n > o; o += 1) { + var r = A[o]; + i[r] && (delete i[r], + t = !0) + } + t && this.modelManager.applyBlink() + } + }, + clearAllBlinkComponents: function () { + var A = !1; + uh.isOwnEmptyObject(this.blinkComponentIds) || (A = !0, + this.blinkComponentIds = {}), + A && this.modelManager.clearBlink() + }, + getBlinkComponents: function () { + return Object.keys(this.blinkComponentIds) + }, + getBlinkComponentsIdMap: function (A) { + var e = this; + if (this.modelManager.getBlinkEnabled()) { + if (A) { + var t = this.getBlinkComponents(), + i = {}; + return t.forEach((function (t) { + var o = e.modelManager.filterHelper.distributeId(t), + n = o.modelKey, + r = o.objectId; + n && n.toString() !== A.toString() || (i[r] = e.blinkComponentIds[t]) + })), + i + } + return this.blinkComponentIds + } + return null + }, + getBlinkMaterial: function (A) { + return Kd.getBlinkMaterial(A, this.modelManager.getBlinkColor()) + }, + getBoxMaterial: function () { + return this.boxMaterial.clone() + }, + setBoxColor: function (A, e) { + var t = this.boxMaterial.opacity; + e = void 0 === e ? t : e, + "0x" + this.boxMaterial.color.getHexString() === A && t === e || (this.boxMaterial.color.setHex(A), + e && (this.boxMaterial.opacity = e), + this.boxMaterial.needsUpdate = !0, + this.boxMaterial.color.setHex(A), + this.boxMaterial.needsUpdate = !0) + } + }; + var ry = function () { + this.hiddenUserIdMap = {} + }; + ry.prototype.destroy = function () { + this.hiddenUserIdMap = null + }, + ry.prototype.hideByUserId = function (A, e) { + this.hiddenUserIdMap || (this.hiddenUserIdMap = {}), + this.hiddenUserIdMap[A] = !!e + }, + ry.prototype.cancelHiddenByUserId = function (A) { + this.hiddenUserIdMap && delete this.hiddenUserIdMap[A] + }, + ry.prototype.cancelAllHidden = function () { + this.hiddenUserIdMap = null + }, + ry.prototype.isHidden = function (A) { + return !!this.hiddenUserIdMap[A] + }, + ry.prototype.hasHidden = function () { + return !uh.isEmptyObject(this.hiddenUserIdMap) + }; + var ay = function () { + this.materialDefaultParams = { + color: 14540253, + opacity: .5, + transparent: !0, + side: 0 + }, + this.material = Kd.createPhongMaterial(this.materialDefaultParams) + }; + ay.prototype.destroy = function () { + this.material = null + }, + ay.prototype.resetColor = function () { + this.material.color.setHex(this.materialDefaultParams.color) + }, + ay.prototype.resetOpacity = function () { + this.material.opacity = this.materialDefaultParams.opacity + }, + ay.prototype.reset = function () { + this.material.color.setHex(this.materialDefaultParams.color), + this.material.opacity = this.materialDefaultParams.opacity, + this.material.transparent = this.materialDefaultParams.transparent, + this.material.side = this.materialDefaultParams.side, + this.material.needsUpdate = !0 + }; + var sy = function (A) { + this.manager = A, + this.requestCount = 0, + this.maxRequestCount = 1e5, + this.loading = !1, + this.delayIntervalTime = 300 + }; + sy.prototype.destroy = function () { + this.manager = null, + this.currentConditions = null, + this.delayLoadTimer && (clearTimeout(this.delayLoadTimer), + this.delayLoadTimer = null) + }, + sy.prototype.isValidModel = function (A) { + return !(A.isEmptyScene() || !A.isLayerData()) + }, + sy.prototype.loadGeopkOnDemandByConditionsWithDelay = function (A, e, t, i) { + var o = this, + n = this.delayIntervalTime; + o.delayLoadTimer && clearTimeout(o.delayLoadTimer), + o.delayLoadTimer = setTimeout((function () { + o.loadGeopkOnDemandByConditions(A, e, t, i) + }), n) + }, + sy.prototype.loadGeopkOnDemandByConditions = function (A, e, t, i) { + if (this.currentConditions = A, + this.requestCount += 1, + this.requestCount > this.maxRequestCount && (this.requestCount = 0), + !this.loading) { + this.loading = !0; + var o = this; + requestAnimationFrame(function A(n) { + var r = n, + a = o.currentConditions; + return function () { + o._loadGeopkOnDemandByConditions(a, e, t, (function () { + r !== o.requestCount ? requestAnimationFrame(A(o.requestCount)) : (o.loading = !1, + i && i(a), + a = null) + })) + } + }(this.requestCount)) + } + }, + sy.prototype._loadGeopkOnDemandByConditions = function (A, e, t, i) { + var o = this; + this.manager.traverseModels((function (n) { + o.isValidModel(n) && n._getHandler().loadGeopkOnDemand(A, e, t, i) + })) + }, + sy.prototype.getBoundingBoxOnDemand = function () { + var A = new aA, + e = this; + return this.manager.traverseModels((function (t) { + if (e.isValidModel(t)) { + var i = t._getHandler().getLayerProvider().getUnionBoundingBoxOnDemand(); + i && A.union(i) + } + })), + A.isEmpty() ? null : A + }, + sy.prototype.isLoading = function () { + return this.loading + }, + sy.prototype.getBoundingBoxForUsedComponent = function () { + var A = this.manager, + e = new aA; + return A.traverseModels((function (t) { + var i = t.getLoadedUserIdsObject(); + i && e.union(A.getBoundingBoxByIds(i)) + })), + e.isEmpty() ? null : e + }; + var ly = function (A, e) { + vc.UseWorker && mh.isSupportWorker() && (this.websocketWorker = new Worker("src/worker/WebsocketWorker.js"), + this.prepareDataWorkers = new Worker("src/worker/PrepareDataWorker.js")), + mh.isMobileDevice() && (vc.maxObjectNumInPool = 6e3, + vc.maxDrawCacheNum = 4e3), + this.scene = new oy(this), + this.filter = A, + this.crossOrigin = !0, + this.models = {}, + this.viewerImpl = e, + this.materialPool = null, + this.occlusionCamera = null, + this.containsCamera = !1, + this.highPriorityCategories = { + inner: {}, + outer: {} + }, + this.octantToObjectMap = {}, + this.instanceGeometries = {}, + this.sceneState = new ny(this), + this.modelState = new ny(this), + this.filter.setSceneStateHelper(this.sceneState), + this.rotation = new f, + this.boundingBox = new aA, + this.explosionList = {}, + this.IBLMaterial = !1, + this.clippingCaps = !1, + this.blinkStartTime = null, + this.blinkEnabled = !1, + this.blinkIntervalTime = 600, + this.blinkPermited = !1, + this.defaultBlinkColor = (new LA).setHex(3330982), + this.defaultBlinkAlpha = 1, + this.blinkColor = new p(this.defaultBlinkColor.r, this.defaultBlinkColor.g, this.defaultBlinkColor.b, this.defaultBlinkAlpha), + this.selectPriority = !0, + this.materialOverrideSet = null, + this.plugins = [], + this.cameraFov = 0, + this.cameraPosition = new y, + this.domElementWidth = 1, + this.transformComponent = {} + }; + Object.assign(ly.prototype, Ld.prototype), + ly.prototype.destroy = function () { + for (var A in this.removeAllEventListener(), + this.models) + this.models[A].destroy(); + this.models = null, + this.octantToObjectMap = null, + this.materialPool && (this.materialPool.destroy(), + this.materialPool = null), + this.occlusionCamera && (this.occlusionCamera = null); + for (var e = 0, t = this.plugins.length; t > e; e += 1) + this.plugins[e].destroy(); + this.plugins = null, + this.loadOnDemandDirector && (this.loadOnDemandDirector.destroy(), + this.loadOnDemandDirector = null), + this.highPriorityCategories = null, + this.rotation = null, + this.boundingBox = null, + this.scene.destroy(), + this.scene = null, + this.filter = null, + this.sceneState.destroy(), + this.sceneState = null, + this.modelState.destroy(), + this.modelState = null, + this.blinkStartTime = null, + this.defaultBlinkColor = null, + this.blinkColor = null, + this.floorExplosionList = null, + this.explosionTranslation = null + }, + ly.prototype.registerPlugin = function (A) { + this.plugins.push(A) + }, + ly.prototype.removeAllEventListener = function () { + this._listeners = void 0 + }, + ly.prototype.prepareCapScene = function () { + this.capsScene ? this.clippingCaps || (this.initCapPlane(), + this.initCapBox()) : (this.capsScene = new oy, + this.clippingCaps || (this.initCapPlane(), + this.initCapBox()), + this.scene.createCapStencilMaterials()) + }, + ly.prototype.initCapPlane = function () { + var A = this.scene.getFillClipPlane().initCapsPlane(); + this.capsScene.add(A.planeMesh), + this.capsScene.add(A.lineMesh), + this.clippingCaps = !0 + }, + ly.prototype.initCapBox = function () { + var A = this.scene.getClipPlanes().initCapsBox(); + A.material.needsUpdate = !0, + A.visible = !0, + this.capsScene.add(A), + this.clippingCaps = !0 + }, + ly.prototype.getAllComponents = function () { + return this.scene.pool._pool + }, + ly.prototype.getAllComponentsKey = function () { + var A = []; + for (var e in this.models) + if (this.models.hasOwnProperty(e)) { + var t = this.models[e]; + if (t) { + var i = t.getComponentlist(); + A = A.concat(i) + } + } + return A + }, + ly.prototype.getComponentsKeyByModelKey = function (A) { + var e = []; + if (this.models.hasOwnProperty(A)) { + var t = this.models[A]; + if (t) + e = t.getComponentlist() + } + return e + }, + ly.prototype.getComponent = function (A) { + for (var e in this.models) + if (this.models.hasOwnProperty(e)) { + var t = this.models[e]; + if (t.isLoaded() && t.getComponentInfo(A)) { + var i = t.getComponentInfo(A); + if (i) + return i + } + } + for (var o = 0, n = this.plugins.length; n > o; o += 1) + if (this.plugins[o].getNodeInfosByUserId) { + var r = this.plugins[o].getNodeInfosByUserId(A); + if (r) + return r + } + }, + ly.prototype.getStorage = function () { + return this.storage + }, + ly.prototype.updateTransformComponentList = function (A) { + this.transformComponent[A] = !0 + }, + ly.prototype._updateOcclusionCamera = function (A) { + var e = A.near, + t = A.distanceFromWorldToDrawing(this.getMatrixWorldGlobal(), vc.OcclusionDistanceToCamera); + this.occlusionCamera ? this.occlusionCamera.copy(A) : this.occlusionCamera = A.clone(), + this.occlusionCamera.setNearFar(e, t), + this.occlusionCamera.updateMVP() + }, + ly.prototype._clearMaterialPool = function () { + this.materialPool && this.materialPool.clear() + }, + ly.prototype.acquireMaterial = function () { + return this.materialPool ? this.materialPool.acquire() : null + }, + ly.prototype.getObjectPool = function () { + return this.scene.getObjectPool() + }, + ly.prototype.getFrustumFromOcclusionCamera = function () { + return this.occlusionCamera.getFrustum(!1) + }, + ly.prototype.getOcclusionCamera = function () { + return this.occlusionCamera + }, + ly.prototype.prepareScene = function (A, e) { + var t = this.models; + for (var i in vc.MergeComponent || (this.clearPool(), + this.clearObjectRangeFromOctantMap()), + vc.OcclusionTranslucentEnabled && (null === this.materialPool && (this.materialPool = new qC, + this.materialPool.init(ay, 50)), + this._clearMaterialPool(), + this._updateOcclusionCamera(A)), + t) + if (t.hasOwnProperty(i)) { + var o = t[i]; + !vc.RendererWhenLoad && !o.isLoaded() || o.isEmptyScene() || o.prepare(A, e) + } + this.dealStateChanged() + }, + ly.prototype.clearPool = function () { + this.scene.getObjectPool().clear() + }, + ly.prototype.clearObjectRangeFromOctantMap = function () { + this.octantToObjectMap && this.octantToObjectMap.pool && (this.octantToObjectMap.pool = {}) + }, + ly.prototype.setDrawableModel = function (A) { + this.isDrawableModel = A + }, + ly.prototype.isDrawable = function () { + return this.isDrawableModel + }, + ly.prototype.load = function (A, e, t) { + var i = this.models, + o = i[A.modelKey], + n = this; + if (this.setDrawableModel(!1), + void 0 !== o) + return this.setDrawableModel(!0), + o.isVisible() || (o.setVisible(!0), + o.dispatchEventEx({ + type: Rc.ON_LOAD_COMPLETE + })), + o; + var r = []; + for (var a in i) + i.hasOwnProperty(a) && r.push(i[a].index); + r.sort(); + for (var s = 0; r.length > s && r[s] === s; s += 1) + ; + return o = new("GIS" === A.type ? PC : TC)(this, A, (function (e, t) { + if (vc.UseWorker) { + if (n.websocketWorker && n.prepareDataWorkers) { + var i = JSON.parse(window.localStorage.getItem("bos_IndexedDB")); + i || (i = { + version: 1 + }), + window.localStorage.setItem("bos_IndexedDB", JSON.stringify(i)); + var r = i.version; + n.websocketWorker.postMessage({ + type: "INITIALIZE_DATABASE", + data: { + modelKey: o.modelKey, + dbName: o.projectKey, + version: r + } + }), + n.websocketWorker.onmessage = o.onWSWorkerMessage, + n.prepareDataWorkers.postMessage({ + type: "INITIALIZE_DATABASE", + data: { + modelKey: o.modelKey, + dbName: o.projectKey, + version: r + } + }), + n.prepareDataWorkers.onmessage = o.onPDWorkerMessage + } + } else + e.load(A.notifyProgress) + }), t), + this.filter.addModel(o.modelKey), + this.models[A.modelKey] = o, + o + }, + ly.prototype.loadTiles = function (A, e, t) { + var i = this.models, + o = i[A.modelKey], + n = this; + if (void 0 !== o) + return o.isVisible() || (o.setVisible(!0), + o.dispatchEventEx({ + type: Rc.ON_LOAD_COMPLETE + })), + o; + var r = []; + for (var a in i) + i.hasOwnProperty(a) && r.push(i[a].index); + r.sort(); + for (var s = 0; r.length > s && r[s] === s; s += 1) + ; + return o = new PC(this, A, (function (e, t) { + if (vc.UseWorker) { + if (n.websocketWorker && n.prepareDataWorkers) { + var i = JSON.parse(window.localStorage.getItem("bos_IndexedDB")); + i || (i = { + version: 1 + }), + window.localStorage.setItem("bos_IndexedDB", JSON.stringify(i)); + var r = i.version; + n.websocketWorker.postMessage({ + type: "INITIALIZE_DATABASE", + data: { + modelKey: o.modelKey, + dbName: o.projectKey, + version: r + } + }), + n.websocketWorker.onmessage = o.onWSWorkerMessage, + n.prepareDataWorkers.postMessage({ + type: "INITIALIZE_DATABASE", + data: { + modelKey: o.modelKey, + dbName: o.projectKey, + version: r + } + }), + n.prepareDataWorkers.onmessage = o.onPDWorkerMessage + } + } else + e.load(A.notifyProgress) + }), t), + this.models[A.modelKey] = o, + o + }, + ly.prototype.loadModels = function (A) { + var e = this.models[A.modelKey], + t = this; + return void 0 !== e ? (e.isVisible() || (e.setVisible(!0), + e.dispatchEventEx({ + type: Rc.ON_LOAD_COMPLETE + })), + e) : (e = new TC(this, A, (function () { + if (vc.UseWorker) { + if (t.websocketWorker && t.prepareDataWorkers) { + var i = JSON.parse(window.localStorage.getItem("bos_IndexedDB")); + i || (i = { + version: 1 + }), + window.localStorage.setItem("bos_IndexedDB", JSON.stringify(i)); + var o = i.version; + t.websocketWorker.postMessage({ + type: "INITIALIZE_DATABASE", + data: { + modelKey: e.modelKey, + dbName: e.projectKey, + version: o + } + }), + t.websocketWorker.onmessage = e.onWSWorkerMessage, + t.prepareDataWorkers.postMessage({ + type: "INITIALIZE_DATABASE", + data: { + modelKey: e.modelKey, + dbName: e.projectKey, + version: o + } + }), + t.prepareDataWorkers.onmessage = e.onPDWorkerMessage + } + } else + e.load(A.notifyProgress) + })), + this.models[A.modelKey] = e, + e) + }, + ly.prototype.unload = function (A) { + var e = this.models[A]; + return !!e && (e.destroy(), + delete this.models[A], + this.filter.removeModel(A), + this.filter.reinitFilterManager(this.getNodeInfos()), + this.updateScene(), + this.updateFilterManager(), + this.filter.getObjectInfoManager().calculateVisibleComponentsBbox(), + !0) + }, + ly.prototype.unloadAll = function () { + for (var A = this.getModelKeys(), e = 0, t = A.length; t > e; e += 1) + this.unload(A[e]); + this.clearPool(), + this.models = {} + }, + ly.prototype.showModel = function (A) { + var e = this.models[A]; + return !!e && (e.setVisible(!0), + !0) + }, + ly.prototype.hideModel = function (A) { + var e = this.models[A]; + return !!e && (e.setVisible(!1), + !0) + }, + ly.prototype.getModelKeys = function () { + var A = this.models, + e = []; + for (var t in A) + A.hasOwnProperty(t) && e.push(t); + return e + }, + ly.prototype.updateScene = function () { + this.updateSceneBoundingBox() + }, + ly.prototype.updateSceneBoundingBox = function () { + var A = this.models, + e = this.boundingBox; + for (var t in e.makeEmpty(), + A) + if (A.hasOwnProperty(t)) { + var i = A[t]; + if (!i.isEmptyScene()) { + var o = i.getBoundingBoxWorld(); + if (!o || o.isEmpty()) + continue; + e.isEmpty() ? e.copy(o) : (e.expandByPoint(o.min), + e.expandByPoint(o.max)) + } + } + for (var n = 0, r = this.plugins.length; r > n; n += 1) { + var a = this.plugins[n]; + if ("function" == typeof a.getBoundingBoxWorld) { + var s = a.getBoundingBoxWorld(); + s && e.union(s) + } + } + this.scene.setBoundingBoxWorld(e) + }, + ly.prototype.parseSceneRootNode = function (A) { + this.scene.parseRootNode(A), + this.updateSceneBoundingBox() + }, + ly.prototype.updateSceneRootMatrix = function () { + var A = !1, + e = new M, + t = new M, + i = new f, + o = this.models; + for (var n in this.models) + if (o.hasOwnProperty(n)) { + var r = o[n]; + if (!r.isEmptyScene()) { + i.copy(r.getTransforms().rotation), + e.copy(r.getTransforms().transformMatrix), + A = r.getTransforms().transformed; + break + } + } + if (this.scene.setTransformMatrixGlobal(e), + A) + t.copy(e); + else { + var a = new y(1, 1, 1), + s = vc.SceneSize, + l = this.boundingBox.getSize(new y), + c = Math.max(l.x, l.y, l.z); + a.multiplyScalar(s / c), + t.makeRotationFromQuaternion(i), + t.scale(a) + } + this.scene.updateWorldMatrixByMatrix(t) + }, + ly.prototype.updateSceneRenderable = function () { + var A = this.models, + e = vc.maxObjectNumInPool, + t = [], + i = 0; + for (var o in A) { + if (A.hasOwnProperty(o)) + (a = A[o]).isEmptyScene() || (i += a.model.getStatistics().renderableTotalForPool, + t.push(o)) + } + for (var n = 0, r = t.length; r > n; n += 1) { + var a = A[o = t[n]], + s = Math.floor(a.getStatistics().renderableTotalForPool / i * e); + s > a.getStatistics().renderableTotalForPool && (s = a.getStatistics().renderableTotalForPool), + a.setRenderableCount(s) + } + }, + ly.prototype.updateOctreeNode = function () { + var A = this.models; + for (var e in this.models) + if (A.hasOwnProperty(e)) { + var t = A[e]; + t.isLoaded() && !t.isEmptyScene() && t.updateOctreeNode(!0) + } + }, + ly.prototype.updateMaterials = function () { + var A = this.models; + for (var e in this.models) + if (A.hasOwnProperty(e)) { + var t = A[e]; + t.isLoaded() && !t.isEmptyScene() && t.materialManager.updateMaterials(t) + } + }, + ly.prototype.updateMaterialsValue = function (A, e) { + var t = this.models; + for (var i in this.models) + if (t.hasOwnProperty(i)) { + var o = t[i]; + o.isLoaded() && !o.isEmptyScene() && o.materialManager.updateMaterialsValue(o, A, e) + } + this.materialOverrideSet && this.materialOverrideSet.updateMaterialsValue(A, e) + }, + ly.prototype.enableColorWithoutLight = function (A) { + var e = this.models; + for (var t in this.models) + if (e.hasOwnProperty(t)) { + var i = e[t]; + i.isLoaded() && i.isEmptyScene() + } + }, + ly.prototype.switchNewStyleMaterial = function (A) { + var e = this.models; + for (var t in this.models) + if (e.hasOwnProperty(t)) { + var i = e[t]; + i.isLoaded() && !i.isEmptyScene() && i.materialManager.switchNewStyleMaterial(i, A) + } + }, + ly.prototype.changeAllMaterials = function (A) { + if (this.IBLMaterial !== A) { + var e = this.models; + for (var t in this.models) + if (e.hasOwnProperty(t)) { + var i = e[t]; + i.isEmptyScene() || i.materialManager.changeAllMaterials(i, A) + } + this.IBLMaterial = A + } + }, + ly.prototype.setCrossOrigin = function (A) { + this.crossOrigin = A + }, + ly.prototype.getMatrixWorldGlobal = function () { + return this.scene.getMatrixWorldGlobal() + }, + ly.prototype.hasModel = function () { + var A = this.models; + for (var e in A) { + if (A.hasOwnProperty(e)) + if (A[e].isLoaded()) + return !0 + } + return !1 + }, + ly.prototype.isEmpty = function () { + if (this.hasModel()) + return !1; + for (var A = !1, e = 0, t = this.plugins.length; t > e; e += 1) { + var i = this.plugins[e]; + if ("function" == typeof i.isEmpty && !i.isEmpty()) { + A = !0; + break + } + } + return !A + }, + ly.prototype.hasModelDataReady = function () { + var A = this.models, + e = !1; + for (var t in A) { + if (A.hasOwnProperty(t)) + if (e = !0, + !A[t].isDataReady()) + return !1 + } + return e + }, + ly.prototype.isLayerData = function () { + var A = this.models; + for (var e in A) { + if (A.hasOwnProperty(e)) + if (A[e].isLayerData()) + return !0 + } + return !1 + }, + ly.prototype.getModel = function (A) { + var e = this.models[A]; + return e || null + }, + ly.prototype.getFirstModel = function () { + var A = Object.keys(this.models)[0]; + return this.models[A] + }, + ly.prototype.showOctreeBox = function (A) { + vc.ShowOctant || this.scene.removeGroupByName(gp.OCTREENODE) + }, + ly.prototype.setCategoriesToHighPriority = function (A, e) { + var t = A.length; + if (t >= 1) + for (var i = this.highPriorityCategories[e] = {}, o = 0; t > o; o += 1) + i[A[o]] = !0 + }, + ly.prototype.getCategoriesFromHighPriority = function (A) { + return this.highPriorityCategories[A] + }, + ly.prototype.clearCategoriesFromHighPriority = function (A) { + this.highPriorityCategories[A] = {} + }, + ly.prototype.clearAllCategoriesFromHighPriority = function () { + this.clearCategoriesFromHighPriority("inner"), + this.clearCategoriesFromHighPriority("outer") + }, + ly.prototype.calculateCameraModelRelation = function (A) { + var e = !1, + t = this.models; + for (var i in t) + if (t.hasOwnProperty(i)) { + var o = t[i]; + o && o.isLoaded() && !o.isEmptyScene() && (o.calculateCameraModelRelation(A), + e = e || o.containsCamera) + } + this.containsCamera = e + }, + ly.prototype.getCameraNameList = function () { + var A = this.models, + e = []; + for (var t in A) + if (A.hasOwnProperty(t)) { + var i = A[t]; + i.isEmptyScene() || (e = e.concat(i.getCameraNameList())) + } + return e + }, + ly.prototype.getCamera = function (A) { + var e = this.models, + t = null; + for (var i in e) + if (e.hasOwnProperty(i)) { + var o = e[i]; + if (!o.isEmptyScene() && (t = o.getCamera(A))) + break + } + return t + }, + ly.prototype.getNumOfElements = function () { + var A = this.models, + e = 0; + for (var t in this.models) + if (A.hasOwnProperty(t)) { + var i = A[t]; + i.isEmptyScene() || (e += i.getStatistics().numOfElements) + } + return e + }, + ly.prototype.getNumOfRenderables = function () { + var A = this.models, + e = 0; + for (var t in this.models) + if (A.hasOwnProperty(t)) { + var i = A[t]; + i.isEmptyScene() || (e += i.getStatistics().renderableTotal) + } + return e + }, + ly.prototype.getNumOfTriangles = function () { + var A = this.models, + e = 0; + for (var t in this.models) + if (A.hasOwnProperty(t)) { + var i = A[t]; + i.isEmptyScene() || (e += i.getStatistics().numOfTriangles) + } + return e + }, + ly.prototype.getScene = function () { + return this.scene + }, + ly.prototype.getOctreeRoots = function () { + var A = this.models, + e = {}; + for (var t in A) + if (A.hasOwnProperty(t)) { + var i = A[t]; + if (i.isLoaded() && !i.isEmptyScene()) { + var o = i.getEncodedDatabagId(); + e[o] = [], + i.getModelDescriptor().getOctreeRoots(e[o]) + } + } + return e + }, + ly.prototype.getModelSnapshotPhoto = function () { + return this.viewerImpl.render(), { + imgURL: this.viewerImpl.getRenderer().domElement.toDataURL("image/png"), + height: this.viewerImpl.domElement.offsetHeight, + width: this.viewerImpl.domElement.offsetWidth + } + }, + ly.prototype.addMeshToOctantMap = function (A, e, t) { + var i = this.octantToObjectMap; + i[A] || (i[A] = {}), + i[A].mesh || (i[A].mesh = {}), + i[A].mesh[e] || (i[A].mesh[e] = []), + i[A].mesh[e].push(t) + }, + ly.prototype.addNodeInfoToOctantMap = function (A, e, t) { + var i = this.octantToObjectMap; + i[A] || (i[A] = {}), + i[A].info || (i[A].info = {}), + i[A].info[e] || (i[A].info[e] = []), + i[A].info[e].push(t) + }, + ly.prototype.removeNodeInfoFromOctantMap = function (A, e) { + var t = this.octantToObjectMap; + if (t[A] && t[A].info && t[A].info[e.componentKey]) + for (var i = t[A].info[e.componentKey], o = i.length - 1; o >= 0; o -= 1) + if (e.nodeId === i[o].nodeId) { + i.splice(o); + break + } + }, + ly.prototype.clearNodeInfosFromOctantMap = function (A) { + var e = this.octantToObjectMap; + e[A] && e[A].info && (e[A] = null) + }, + ly.prototype.removeAllFromOctantMap = function (A) { + var e = this.octantToObjectMap; + e[A] && delete e[A] + }, + ly.prototype.clearMeshFromOctantMap = function (A) { + var e = this.octantToObjectMap; + e[A] && e[A].mesh && delete e[A].mesh + }, + ly.prototype.removeMeshFromOctantMap = function (A, e) { + var t = this.octantToObjectMap; + if (t[A] && t[A].mesh) { + var i = 0, + o = t[A].mesh[e]; + for (i = o.length - 1; i >= 0; i -= 1) + delete o[i]; + delete t[A].mesh[e] + } + }, + ly.prototype.removeBatchedMeshFromOctantMap = function (A, e) { + var t = this.octantToObjectMap; + if (t[A] && t[A].mesh && t[A].info) { + var i = 0, + o = t[A].info[e]; + for (i = o.length - 1; i >= 0; i -= 1) + o.splice(i); + delete t[A].info[e] + } + }, + ly.prototype.getOctantMap = function () { + return this.octantToObjectMap + }, + ly.prototype.isFilterApplied = function () { + return this.filterApplied + }, + ly.prototype.setFilterApplied = function (A) { + this.filterApplied = A + }, + ly.prototype.applyFilter = function () { + for (var A in Bh.time("applyFilter"), + this.models) { + this.models[A].applyFilter() + } + for (var e = 0, t = this.plugins.length; t > e; e += 1) + this.plugins[e].applyFilter(); + this.setFilterApplied(!0), + Bh.timeEnd("applyFilter") + }, + ly.prototype.applySelection = function () { + console.log('applySelection22') + for (var A in this.selectPriority = !0, + this.models) { + this.models[A].applySelection() + } + this.scene.getExtrudeBodyManager().applySelection(this); + for (var e = 0, t = this.plugins.length; t > e; e += 1) + this.plugins[e].applySelection() + }, + ly.prototype.clearSelection = function () { + for (var A in this.selectPriority = !0, + this.models) { + this.models[A].clearSelection() + } + this.scene.getExtrudeBodyManager().clearSelection(); + for (var e = 0, t = this.plugins.length; t > e; e += 1) + this.plugins[e].clearSelection() + }, + ly.prototype.applyHover = function () { + if (vc.Hover && !vc.EnableRenderPass) + for (var A in this.models) { + this.models[A].applyHover() + } + this.scene.getExtrudeBodyManager().applyHover(this); + for (var e = 0, t = this.plugins.length; t > e; e += 1) + this.plugins[e].applyHover() + }, + ly.prototype.clearHover = function () { + if (vc.Hover && !vc.EnableRenderPass) + for (var A in this.models) { + this.models[A].clearHover() + } + this.scene.getExtrudeBodyManager().clearHover(); + for (var e = 0, t = this.plugins.length; t > e; e += 1) + this.plugins[e].clearHover() + }, + ly.prototype.chooseRendering = function (A) {}, + ly.prototype.isUserIdExist = function (A) { + var e = !1; + for (var t in this.models) { + if (this.models.hasOwnProperty(t)) + if (this.models[t].getModelDescriptor().isUserIdExist(A)) { + e = !0; + break + } + } + for (var i = 0, o = this.plugins.length; o > i; i += 1) + if (this.plugins[i].isUserIdExist && this.plugins[i].isUserIdExist(A)) { + e = !0; + break + } + return e + }, + ly.prototype.getNodeInfosByUserId = function (A) { + var e = []; + for (var t in this.models) { + var i = this.models[t]; + if (i && i.isLoaded()) { + var o = this.models[t].getModelDescriptor().getNodeInfosByUserId(A); + o && (e = e.concat(o)) + } + } + for (var n = 0, r = this.plugins.length; r > n; n += 1) + if (this.plugins[n].getNodeInfosByUserId) { + var a = this.plugins[n].getNodeInfosByUserId(A); + a && (e = e.concat(a)) + } + return e.length ? e : null + }, + ly.prototype.getNodeInfos = function () { + var A = {}; + for (var e in this.models) + if (this.models[e].isLoaded()) { + var t = this.models[e].getModelDescriptor().getAllNodeInfos(); + t && (A[e] = t) + } + var i = this.getNodeInfosInPlugins(); + return Object.assign(A, i), + A + }, + ly.prototype.getNodeInfosInPlugins = function () { + for (var A = {}, e = 0, t = this.plugins.length; t > e; e += 1) + this.plugins[e].getAllNodeInfos && this.plugins[e].getAllNodeInfos(A); + return A + }, + ly.prototype.getMaterialByNodeId = function (A, e, t) { + var i = this.models[A]; + if (!i) + return null; + for (var o = i.getModelDescriptor().getNodeInfosByUserId(e), n = -1, r = 0, a = o.length; a > r; r += 1) + if (o[r].nodeId === t) { + n = r; + break + } + return -1 !== n ? i.getMaterialByMaterialId(o[n].materialId) : null + }, + ly.prototype.getNodeInfoByNodeId = function (A, e, t) { + var i = this.models[A]; + if (!i) + return null; + for (var o = i.getModelDescriptor().getNodeInfosByUserId(e), n = -1, r = 0, a = o.length; a > r; r += 1) + if (o[r].nodeId === t) { + n = r; + break + } + return -1 !== n ? o[n] : null + }, + ly.prototype.getComponentInfoByUserId = function (A) { + var e = this.getNodeInfosByUserId(A); + if (e && e.length > 0) { + for (var t = new aA, i = [], o = 0, n = e.length; n > o; o += 1) + t.union(e[o].boundingBox), + -1 === i.indexOf(e[o].materialId) && i.push(e[o].materialId); + return { + userId: A, + state: 0, + materials: i, + boundingBox: t, + userData: e[0].userData + } + } + return null + }, + ly.prototype.getBoundingBoxByIds = function (A) { + var e = this.getScene(), + t = new aA; + for (var i in A) + if (!this.isHiddenUserId(i)) { + Array.isArray(A) && (i = A[i]); + var o = this.getComponentInfoByUserId(i); + if (o) + t.union(o.boundingBox); + else { + var n = e.getExtrudeBodyManager().getNode(i); + if (n) { + var r = n.geometry.boundingBox.clone(); + n.matrix && r.applyMatrix4(n.matrix), + t.union(r) + } + } + } + return t + }, + ly.prototype.createMaterialOverrideSet = function (A, e) { + this.materialOverrideSet = new MaterialOverriderSet(A, e), + vc.EnableTextureMapping = !0 + }, + ly.prototype.getMaterialOverrideSet = function () { + return this.materialOverrideSet + }, + ly.prototype.getOverrideMaterialByNodeInfo = function (A) { + return this.materialOverrideSet ? this.materialOverrideSet.getOverrideMaterialByNodeInfo(A) : null + }, + ly.prototype.getOverrideMaterialByName = function (A) { + return this.materialOverrideSet ? this.materialOverrideSet.getOverrideMaterialByName(A) : null + }, + ly.prototype.loadOverrideMaterialsByDemand = function (A, e) { + if (this.materialOverrideSet) { + var t = this.getConditions(); + this.materialOverrideSet.loadByDemand(t, A, e) + } else + e && e() + }, + ly.prototype.getConditions = function () { + var A = {}, + e = {}, + t = {}; + for (var i in this.models) { + var o = this.models[i].getModelDescriptor().getAllNodeInfos(); + if (o) + for (var i in o) + if (o.hasOwnProperty(i)) + for (var n = 0, r = o[i].length; r > n; n += 1) { + var a = o[i][n].userData; + e[o[i][n].userId] = !0, + t[a.systemTypeId] = !0, + A[a.familyId] = !0 + } + } + return { + familyIds: A, + elementIds: e, + systemTypeIds: t + } + }, + ly.prototype.isHiddenUserId = function (A) { + var e = !1; + for (var t in this.models) { + if (this.models.hasOwnProperty(t)) + if ((t = this.models[t]).isHiddenUserId(A)) { + e = !0; + break + } + } + return e + }, + ly.prototype.isHiddenSourceObjectUserId = function (A) { + return !!this.sourceObjectManager && this.sourceObjectManager.isHidden(A) + }, + ly.prototype.hasHiddenSourceObjectUserId = function () { + return !!this.sourceObjectManager && this.sourceObjectManager.hasHidden() + }, + ly.prototype.updateMeshNodes = function () { + for (var A in this.models) { + if (this.models.hasOwnProperty(A)) + (A = this.models[A]).updateMeshNodes() + } + }, + ly.prototype.getMinDistanceObjects = function (A, e) { + var t = this, + i = {}; + for (var o in this.models) + if (this.models.hasOwnProperty(o)) { + (o = this.models[o]).minDistanceObjects = {}; + var n = o.getMeshesByUserIds(A), + r = o.getMeshesByUserIds(e); + if (n && n.length > 0 && (i[A] = n), + r && r.length > 0 && (i[e] = r), + i[A] && i[e]) + return i + } + var a = null, + s = null, + l = null, + c = null, + h = null, + d = function () { + var i = {}, + o = function (A, e, t) { + var o = {}; + o.mesh = A; + var n = new M; + t ? n.multiplyMatrices(t, A.matrix) : n = A.matrix, + o.matrix = n; + var r = A.geometry.boundingBox; + r || (A.geometry.computeBoundingBox(), + r = o.mesh.geometry.boundingBox); + var a = r.clone().applyMatrix4(n); + o.boundingBox = a, + i[e] && (i[e] = []), + i[e].push(o) + }; + if (!(a = t.scene.getGroup("ExternalComponentManager"))) + return { + v: void 0 + }; + for (l = 0, + c = (s = a.children).length; c > l; l += 1) + (h = s[l]).name !== A && h.name !== e || (uh.isGroupObject(h) ? h.traverseVisible((function (A) { + uh.isMeshObject(A) && o(A, h.name, h.matrix) + })) : o(h, h.name)); + return { + v: i + } + }(); + return d && d.v && (d.v[A] && d.v[A].length > 0 && (i[A] = d.v[A]), + d.v[e] && d.v[e].length > 0 && (i[e] = d.v[e]), + i[A] && i[e]) || i[A] && i[e] ? i : null + }, + ly.prototype.getMeshByUserId = function (A) { + for (var e in this.models) + if (this.models.hasOwnProperty(e)) { + var t = (e = this.models[e]).getMeshesByUserIds(A); + if (t) + return t + } + return null + }, + ly.prototype.adjustVisibility = function (A) { + for (var e in this.models) + this.models[e] && this.models[e]._getHandler().adjustVisibility(A); + for (var t = 0, i = this.plugins.length; i > t; t += 1) { + var o = this.plugins[t]; + o.adjustVisibility && "function" == typeof o.adjustVisibility && o.adjustVisibility(A) + } + this.otherAdjustVisibility && this.otherAdjustVisibility(A) + }, + ly.prototype.changeVisibilityOfSelectedObjects = function (A) { + for (var e in this.models) + this.models[e] && this.models[e]._getHandler().changeVisibilityOfSelectedObjects(A); + for (var t = 0, i = this.plugins.length; i > t; t += 1) { + var o = this.plugins[t]; + o.changeVisibilityOfSelectedObjects && "function" == typeof o.changeVisibilityOfSelectedObjects && o.changeVisibilityOfSelectedObjects(A) + } + }, + ly.prototype.changeVisibilityOfNonSelectedObjects = function (A) { + for (var e in this.models) + this.models[e] && this.models[e]._getHandler().changeVisibilityOfNonSelectedObjects(A); + this.otherAdjustVisibility && this.otherAdjustVisibility(A); + for (var t = 0, i = this.plugins.length; i > t; t += 1) { + var o = this.plugins[t]; + o.changeVisibilityOfNonSelectedObjects && "function" == typeof o.changeVisibilityOfNonSelectedObjects && o.changeVisibilityOfNonSelectedObjects(A) + } + }, + ly.prototype.adjustInstanceVisibility = function (A) { + for (var e in this.models) + this.models[e] && this.models[e].merged && this.models[e]._getHandler().adjustInstanceVisibility(A) + }, + ly.prototype.adjustVisibilityOfObjectsWithoutOutline = function (A) { + for (var e in this.models) + if (this.models[e]) { + var t = this.models[e].axisNetManager; + t && t.visibleByUser && (A ? this.models[e].axisNetManager.privateShow() : this.models[e].axisNetManager.privateHide()) + } + for (var i = 0, o = this.plugins.length; o > i; i += 1) { + var n = this.plugins[i]; + n.adjustVisibilityOfObjectsWithoutOutline && "function" == typeof n.adjustVisibilityOfObjectsWithoutOutline && n.adjustVisibilityOfObjectsWithoutOutline(A) + } + var r; + this.scene.hasClipPlanes() && ((r = this.scene.getClipPlanes()).isEnabled() && (!1 === A && r.visible ? (r.visible = !1, + r._hideByModelManager = !0) : !0 === A && r._hideByModelManager && (r.visible = !0, + delete r._hideByModelManager))); + this.scene.hasFillClipPlanes() && ((r = this.scene.getFillClipPlane()).isEnabled() && (!1 === A && r.visible ? (r.visible = !1, + r._hideByModelManager = !0) : !0 === A && r._hideByModelManager && (r.visible = !0, + delete r._hideByModelManager))); + this.scene.receivingPlane && (!1 === A && this.scene.receivingPlane.visible ? (this.scene.receivingPlane.visible = !1, + this.scene.receivingPlane._hideByModelManager = !0) : !0 === A && this.scene.receivingPlane._hideByModelManager && (this.scene.receivingPlane.visible = !0, + delete this.scene.receivingPlane._hideByModelManager)), + this.otherAdjustVisibility && this.otherAdjustVisibility(A); + for (var a = this.scene.children, s = (i = 0, + a.length); s > i; i += 1) { + var l = a[i]; + l !== this.scene.objectGroups && !0 !== l.isLight && !0 === l.isObject3D && (l.visible = A) + } + }, + ly.prototype.changeInstanceVisibilityOfSelectedObjects = function (A) { + for (var e in this.models) + this.models[e] && this.models[e].merged && this.models[e]._getHandler().changeInstanceVisibilityOfSelectedObjects(A) + }, + ly.prototype.changeInstanceVisibilityOfNonSelectedObjects = function (A) { + for (var e in this.models) + this.models[e] && this.models[e].merged && this.models[e]._getHandler().changeInstanceVisibilityOfNonSelectedObjects(A) + }, + ly.prototype.restoreVisibilityOfObjects = function () { + for (var A in this.models) + this.models[A] && this.models[A]._getHandler().restoreVisibilityOfObjects(); + this.otherAdjustVisibility && this.otherAdjustVisibility(!0) + }, + ly.prototype.getComponentKeysByTypeFromList = function (A, e) { + var t = []; + for (var i in this.models) { + if (this.models.hasOwnProperty(i)) + if ((i = this.models[i]).isLoaded()) { + var o = i.getComponentKeysByTypeFromList(A, e); + o && (t = t.concat(o)) + } + } + return t + }, + ly.prototype.getComponentKeysByType = function (A) { + var e = []; + for (var t in this.models) { + if (this.models.hasOwnProperty(t)) + if ((t = this.models[t]).isLoaded()) { + var i = t.getComponentKeysByType(A); + i && (e = e.concat(i)) + } + } + return e + }, + ly.prototype.getComponentKeysByName = function (A) { + var e = []; + for (var t in this.models) + if (this.models.hasOwnProperty(t)) { + var i = (t = this.models[t]).getComponentKeysByName(A); + i && (e = e.concat(i)) + } + return e + }, + ly.prototype.getComponentKeysByProperty = function (A, e) { + var t = []; + for (var i in this.models) + if (this.models.hasOwnProperty(i)) { + var o = (i = this.models[i]).getComponentKeysByProperty(A, e); + o && (t = t.concat(o)) + } + return t + }, + ly.prototype.getBlinkMaterials = function () { + var A = []; + for (var e in this.models) + this.models[e] && this.models[e]._getHandler().getBlinkMaterials && (A = A.concat(this.models[e]._getHandler().getBlinkMaterials())); + return A + }, + ly.prototype.resetBlinkMaterial = function () { + for (var A = this.getBlinkMaterials(), e = 0, t = A.length; t > e; e += 1) + A[e].resetBlinkUniformValue() + }, + ly.prototype.updateBlinkMaterial = function () { + if (null !== this.blinkStartTime) { + if (Date.now() - this.blinkStartTime >= this.blinkIntervalTime) { + this.blinkStartTime = Date.now(), + this.indexSwitch = !this.indexSwitch; + for (var A = this.indexSwitch ? Yc.BLINK : Yc.NONE, e = this.getBlinkMaterials(), t = 0, i = e.length; i > t; t += 1) + e[t].updateBlinkUniformValue(A, this.blinkColor) + } + } else + this.blinkStartTime = Date.now() + }, + ly.prototype.getBlinkColor = function () { + return this.blinkColor + }, + ly.prototype.setBlinkColor = function (A, e) { + if (A) { + var t = uh.hexToRgb(A); + this.blinkColor.fromArray([t.r, t.g, t.b, e || 1]) + } else + this.blinkColor.set(this.defaultBlinkColor.r, this.defaultBlinkColor.g, this.defaultBlinkColor.b, this.defaultBlinkAlpha) + }, + ly.prototype.setBlinkIntervalTime = function (A) { + this.blinkIntervalTime > 0 && (this.blinkIntervalTime = A) + }, + ly.prototype.enableBlink = function (A) { + this.blinkEnabled = A, + A ? null === this.blinkStartTime && (this.blinkStartTime = Date.now()) : (this.blinkStartTime = null, + this.resetBlinkMaterial()), + this.applyBlink() + }, + ly.prototype.getBlinkEnabled = function () { + return !this.isBlinkPermited() && this.blinkEnabled + }, + ly.prototype.getBlinkComponentsIdMap = function () { + return this.isBlinkPermited() ? null : this.sceneState.getBlinkComponentsIdMap() + }, + ly.prototype.applyBlink = function () { + if (!this.isBlinkPermited()) + for (var A in this.selectPriority = !1, + this.models) { + this.models[A].applyBlink() + } + }, + ly.prototype.clearBlink = function () { + if (!this.isBlinkPermited()) + for (var A in this.selectPriority = !1, + this.models) { + this.models[A].clearBlink() + } + }, + ly.prototype.permitBlink = function (A) { + this.blinkPermited = A + }, + ly.prototype.isBlinkPermited = function () { + return this.blinkPermited + }, + ly.prototype.isSelectPriority = function () { + return this.selectPriority + }, + ly.prototype.getSceneState = function () { + return this.sceneState + }, + ly.prototype.getModelSceneState = function () { + return this.modelState + }, + ly.prototype.disposeBufferAfterVbo = function () { + if (vc.EnableDisposeBufferAfterVbo) + for (var A in this.models) { + this.models[A].disposeBufferAfterVbo() + } + }, + ly.prototype.getSourceObjectManager = function () { + return this.sourceObjectManager || (this.sourceObjectManager = new ry), + this.sourceObjectManager + }, + ly.prototype.isHiddenUserId = function (A) { + return !!this.sourceObjectManager && this.sourceObjectManager.isHidden(A) + }, + ly.prototype.hasHiddenUserId = function () { + return !!this.sourceObjectManager && this.sourceObjectManager.hasHidden() + }, + ly.prototype.traverseModels = function (A, e) { + for (var t in this.models) { + var i = this.models[t]; + if (e && e(i)) + break; + A && A(i) + } + }, + ly.prototype.traverseLoadedModels = function (A) { + for (var e in this.models) { + var t = this.models[e]; + t && t.isLoaded() && A(t) + } + }, + ly.prototype.getStatisticsInfo = function () { + var A = 0, + e = 0, + t = 0, + i = 0; + for (var o in this.models) { + var n = this.models[o]; + if (n && n.isLoaded()) { + var r = n.getTrianglesCount(); + A += r.positionsCount, + e += r.trianglesCount, + t += r.realPositionCount, + i += r.realTrianglesCount + } + } + return { + positionsCount: A, + trianglesCount: e, + realPositionCount: t, + realTrianglesCount: i, + componentCount: this.getAllComponentsKey().length + } + }, + ly.prototype.dealStateChanged = function () { + this.hasModelDataReady() && (this.isRenderStateChanged() || this.filter.isStateChanged()) && (this.isRenderStateChanged() && this.setRenderStateChanged(!1), + this.filter.isStateChanged() && this.filter.disableStateChanged(), + this.applyFilter()) + }, + ly.prototype.setRenderStateChanged = function (A) { + this._renderStateChanged = A + }, + ly.prototype.isRenderStateChanged = function () { + return this._renderStateChanged + }, + ly.prototype.hasLoadOnDemandDirector = function () { + return !!this.loadOnDemandDirector + }, + ly.prototype.getLoadOnDemandDirector = function () { + return this.loadOnDemandDirector || (this.loadOnDemandDirector = new sy(this)), + this.loadOnDemandDirector + }, + ly.prototype.checkLayerDataLoading = function () { + return !!(this.isLayerData() && this.hasLoadOnDemandDirector() && this.getLoadOnDemandDirector().isLoading()) && (this.filter.isStateChanged() && this.filter.disableStateChanged(), + !0) + }, + ly.prototype.updateFilterManager = function () { + var A = this.getNodeInfos(), + e = this.filter; + e.clearFilterManager(), + e.initFilterManager(A), + e.isStateChanged() && e.disableStateChanged(), + this.updateMeshNodes(), + this.applyFilter() + }, + ly.prototype.isDrawingBoardlineEnabled = function () { + return !(!vc.DrawingBoardlineEnabled || vc.DrawingStyle !== jc.BOARDLINE && vc.DrawingStyle !== jc.SHADINGWITHLINE) + }, + ly.prototype.isOnlyWireframe = function () { + return vc.DrawingStyle === jc.BOARDLINE + }, + ly.prototype.getExplosionExtent = function () { + return this.explosionExtent + }, + ly.prototype.setExplosionExtent = function (A) { + var e = A - this.explosionExtent; + for (var t in this.models) + this.models[t] && this.models[t].explode(e); + this.explosionExtent = A + }, + ly.prototype.updateAnimation = function () { + var A = this.viewerImpl.clock.getDelta(); + for (var e in this.models) + if (this.models.hasOwnProperty(e)) { + var t = this.models[e]; + if (t.hasAnimation && t.mixer) { + var i = t.mixer; + t.singleStepMode ? (i.update(t.sizeOfNextStep), + t.sizeOfNextStep = 0) : i.update(A) + } + } + }, + ly.prototype.needUpdateAnimation = function () { + for (var A in this.models) + if (this.models.hasOwnProperty(A)) { + var e = this.models[A]; + if (e.hasAnimation && e.mixer && e.needUpdate) + return !0 + } + return !1 + }, + ly.prototype.unloadGeopkOnDemand = function (A, e) { + var t = this.models; + for (var i in t) + if (t.hasOwnProperty(i)) { + var o = t[i]; + o.isLoaded() && !o.isEmptyScene() && o.isLayerData() && o.unloadGeopkOnDemand(A, e) + } + }, + ly.prototype.loadGeopkOnDemand = function (A, e, t, i) { + this.getLoadOnDemandDirector().loadGeopkOnDemandByConditions(A, e, t, i) + }, + ly.prototype.loadAllGeosOnDemand = function (A, e) { + var t = this.models; + for (var i in t) + if (t.hasOwnProperty(i)) { + var o = t[i]; + o.isLoaded() && !o.isEmptyScene() && o.isLayerData() && o.loadAllGeosOnDemand(A, e) + } + }, + ly.prototype.getBoundingBoxOnDemand = function () { + var A = this.models, + e = new aA; + for (var t in A) + if (A.hasOwnProperty(t)) { + var i = A[t]; + if (i.isLoaded() && !i.isEmptyScene() && i.isLayerData()) { + var o = i.getUnionBoundingBoxOnDemand(); + o && e.union(o) + } + } + return e + }, + ly.prototype.setConditionsOnDemandLoad = function (A) { + this.conditionsOnDemandLoad = A; + var e = this.models; + for (var t in e) + if (e.hasOwnProperty(t)) { + var i = e[t]; + i.isLoaded() && !i.isEmptyScene() && i.isLayerData() && i.setConditionsChangedOnDemand(!0) + } + }, + ly.prototype.getConditionsOnDemandLoad = function () { + return this.conditionsOnDemandLoad + }, + ly.prototype.componentsExplosion = function (A) { + var e = this.models; + for (var t in e) { + if (e.hasOwnProperty(t)) + e[t].componentsExplosion(A) + } + }, + ly.prototype.closeComponentsExplosion = function (A) { + var e = this.models; + for (var t in e) { + if (e.hasOwnProperty(t)) + e[t].closeComponentsExplosion(A) + } + }, + ly.prototype.canFloorExplosion = function () { + var A = this.models, + e = !1; + for (var t in A) { + if (A.hasOwnProperty(t)) + A[t].floorManager && (e = !0) + } + return e + }, + ly.prototype.floorExplosion = function (A) { + var e = this.models, + t = !1; + for (var i in e) { + if (e.hasOwnProperty(i)) + e[i].floorExplosion(A) && (this.updateSceneBoundingBox(), + t = !0) + } + return t + }, + ly.prototype.closeFloorExplosion = function () { + var A = this.models; + for (var e in A) { + if (A.hasOwnProperty(e)) + A[e].closeFloorExplosion() + } + }, + ly.prototype.checkTilesDataChanged = function (A, e) { + if (!this.cameraPosition.equals(A.position) || this.cameraFov !== A.fov || this.domElementWidth !== e.domElement.width) { + this.cameraFov = A.fov || 45, + this.cameraPosition = A.position.clone() || new y, + this.domElementWidth = e.domElement.width || 1e3; + var t = !1, + i = this.checkMemory(); + for (var o in i > vc.MaximumAvailableMemory && (t = !0), + this.models) + if (this.models.hasOwnProperty(o)) { + var n = this.models[o]; + n.isTilesModel && n.checkTilesDataChanged(t) + } + } + }, + ly.prototype.checkMemory = function () { + var A = 0, + e = this.viewerImpl.getRenderer().info; + return A += 6 * (e.render.triangles || 0), + A += 1024 * (e.memory.textures || 0) * 1024 / 4, + A += 1024 * (e.render.calls || 0) / 4, + A += 1024 * (e.memory.geometries || 0) / 4, + A *= 1 / 1048576, + A = Math.ceil(A) + }, + ly.prototype.getMeshIdFromOctantMap = function (A) { + return A.single ? A.nodeId : A.instanceOrNot ? uh.getCombinedKeyString(A.uv2Info ? [A.materialId, A.geometryId, A.uv2Info.byteOffset] : [A.materialId, A.geometryId]) : vc.MergeComponent ? uh.getCombinedKeyString([A.materialId, A.uv ? "1" : "0", A.type === $u.EnumNodeItemType.LINE ? "lines" : "meshes"]) : A.nodeId + }; + var cy, hy, dy, py = { + uniforms: { + tDiffuse: { + value: null + }, + opacity: { + value: 1 + } + }, + vertexShader: ["varying vec2 vUv;", "void main() {", "vUv = uv;", "gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );", "}"].join("\n"), + fragmentShader: ["uniform float opacity;", "uniform sampler2D tDiffuse;", "varying vec2 vUv;", "void main() {", "vec4 texel = texture2D( tDiffuse, vUv );", "gl_FragColor = opacity * texel;", "}"].join("\n") + }; + + function gy() { + this.enabled = !0, + this.needsSwap = !0, + this.clear = !1, + this.renderToScreen = !1 + } + Object.assign(gy.prototype, { + setSize: function () {}, + render: function () { + console.error("THREE.Pass: .render() must be implemented in derived pass.") + } + }), + gy.FullScreenQuad = (cy = new Ka(-1, 1, 1, -1, 0, 1), + hy = new et(2, 2), + dy = function (A) { + this._mesh = new Ue(hy, A) + }, + Object.defineProperty(dy.prototype, "material", { + get: function () { + return this._mesh.material + }, + set: function (A) { + this._mesh.material = A + } + }), + Object.assign(dy.prototype, { + render: function (A) { + A.render(this._mesh, cy) + } + }), + dy); + var uy = function (A, e) { + gy.call(this), + this.textureID = void 0 !== e ? e : "tDiffuse", + A instanceof Pe ? (this.uniforms = A.uniforms, + this.material = A) : A && (this.uniforms = Ge.clone(A.uniforms), + this.material = new Pe({ + defines: Object.assign({}, A.defines), + uniforms: this.uniforms, + vertexShader: A.vertexShader, + fragmentShader: A.fragmentShader + })), + this.fsQuad = new gy.FullScreenQuad(this.material) + }; + uy.prototype = Object.assign(Object.create(gy.prototype), { + constructor: uy, + render: function (A, e, t) { + this.uniforms[this.textureID] && (this.uniforms[this.textureID].value = t.texture), + this.fsQuad.material = this.material, + this.renderToScreen ? (A.setRenderTarget(null), + this.fsQuad.render(A)) : (A.setRenderTarget(e), + this.clear && A.clear(A.autoClearColor, A.autoClearDepth, A.autoClearStencil), + this.fsQuad.render(A)) + } + }); + var fy = function (A, e) { + gy.call(this), + this.scene = A, + this.camera = e, + this.clear = !0, + this.needsSwap = !1, + this.inverse = !1 + }; + fy.prototype = Object.assign(Object.create(gy.prototype), { + constructor: fy, + render: function (A, e, t) { + var i = A.getContext(), + o = A.state; + o.buffers.color.setMask(!1), + o.buffers.depth.setMask(!1), + o.buffers.color.setLocked(!0), + o.buffers.depth.setLocked(!0); + var n = null, + r = null; + this.inverse ? (r = 0, + n = 1) : (r = 1, + n = 0), + o.buffers.stencil.setTest(!0), + o.buffers.stencil.setOp(i.REPLACE, i.REPLACE, i.REPLACE), + o.buffers.stencil.setFunc(i.ALWAYS, r, 4294967295), + o.buffers.stencil.setClear(n), + o.buffers.stencil.setLocked(!0), + A.setRenderTarget(t), + this.clear && A.clear(), + A.render(this.scene, this.camera), + A.setRenderTarget(e), + this.clear && A.clear(), + A.render(this.scene, this.camera), + o.buffers.color.setLocked(!1), + o.buffers.depth.setLocked(!1), + o.buffers.stencil.setLocked(!1), + o.buffers.stencil.setFunc(i.EQUAL, 1, 4294967295), + o.buffers.stencil.setOp(i.KEEP, i.KEEP, i.KEEP), + o.buffers.stencil.setLocked(!0) + } + }); + var my = function () { + gy.call(this), + this.needsSwap = !1 + }; + my.prototype = Object.create(gy.prototype), + Object.assign(my.prototype, { + render: function (A) { + A.state.buffers.stencil.setLocked(!1), + A.state.buffers.stencil.setTest(!1) + } + }); + var Cy = function (A, e) { + if (this.renderer = A, + void 0 === e) { + var t = { + minFilter: 1006, + magFilter: 1006, + format: 1023, + stencilBuffer: !1 + }, + i = A.getSize(new s); + this._pixelRatio = A.getPixelRatio(), + this._width = i.width, + this._height = i.height, + (e = new g(this._width * this._pixelRatio, this._height * this._pixelRatio, t)).texture.name = "EffectComposer.rt1" + } else + this._pixelRatio = 1, + this._width = e.width, + this._height = e.height; + this.renderTarget1 = e, + this.renderTarget2 = e.clone(), + this.renderTarget2.texture.name = "EffectComposer.rt2", + this.writeBuffer = this.renderTarget1, + this.readBuffer = this.renderTarget2, + this.renderToScreen = !0, + this.passes = [], + void 0 === py && console.error("THREE.EffectComposer relies on CopyShader"), + void 0 === uy && console.error("THREE.EffectComposer relies on ShaderPass"), + this.copyPass = new uy(py), + this.clock = new as + }; + Object.assign(Cy.prototype, { + swapBuffers: function () { + var A = this.readBuffer; + this.readBuffer = this.writeBuffer, + this.writeBuffer = A + }, + addPass: function (A) { + this.passes.push(A), + A.setSize(this._width * this._pixelRatio, this._height * this._pixelRatio) + }, + insertPass: function (A, e) { + this.passes.splice(e, 0, A) + }, + isLastEnabledPass: function (A) { + for (var e = A + 1; this.passes.length > e; e += 1) + if (this.passes[e].enabled) + return !1; + return !0 + }, + render: function (A) { + void 0 === A && (A = this.clock.getDelta()); + var e = this.renderer.getRenderTarget(), + t = !1, + i = null, + o = null, + n = this.passes.length; + for (o = 0; n > o; o += 1) + if (!1 !== (i = this.passes[o]).enabled) { + if (i.renderToScreen = this.renderToScreen && this.isLastEnabledPass(o), + i.render(this.renderer, this.writeBuffer, this.readBuffer, A, t), + i.needsSwap) { + if (t) { + var r = this.renderer.getContext(), + a = this.renderer.state.buffers.stencil; + a.setFunc(r.NOTEQUAL, 1, 4294967295), + this.copyPass.render(this.renderer, this.writeBuffer, this.readBuffer, A), + a.setFunc(r.EQUAL, 1, 4294967295) + } + this.swapBuffers() + } + void 0 !== fy && (i instanceof fy ? t = !0 : i instanceof my && (t = !1)) + } + this.renderer.setRenderTarget(e) + }, + reset: function (A) { + if (void 0 === A) { + var e = this.renderer.getSize(new s); + this._pixelRatio = this.renderer.getPixelRatio(), + this._width = e.width, + this._height = e.height, + (A = this.renderTarget1.clone()).setSize(this._width * this._pixelRatio, this._height * this._pixelRatio) + } + this.renderTarget1.dispose(), + this.renderTarget2.dispose(), + this.renderTarget1 = A, + this.renderTarget2 = A.clone(), + this.writeBuffer = this.renderTarget1, + this.readBuffer = this.renderTarget2 + }, + setSize: function (A, e) { + this._width = A, + this._height = e; + var t = this._width * this._pixelRatio, + i = this._height * this._pixelRatio; + this.renderTarget1.setSize(t, i), + this.renderTarget2.setSize(t, i); + for (var o = 0; this.passes.length > o; o += 1) + this.passes[o].setSize(t, i) + }, + setPixelRatio: function (A) { + this._pixelRatio = A, + this.setSize(this._width, this._height) + } + }); + var yy = function () { + this.enabled = !0, + this.needsSwap = !0, + this.clear = !1, + this.renderToScreen = !1 + }; + Object.assign(yy.prototype, { + setSize: function () {}, + render: function () { + console.error("THREE.Pass: .render() must be implemented in derived pass.") + } + }), + yy.FullScreenQuad = function () { + var A = new Ka(-1, 1, 1, -1, 0, 1), + e = new et(2, 2), + t = function (A) { + this._mesh = new Ue(e, A) + }; + return Object.defineProperty(t.prototype, "material", { + get: function () { + return this._mesh.material + }, + set: function (A) { + this._mesh.material = A + } + }), + Object.assign(t.prototype, { + render: function (e) { + e.render(this._mesh, A) + } + }), + t + }(); + var vy = { + uniforms: { + tDiffuse: { + value: null + }, + resolution: { + value: new s(1 / 1024, 1 / 512) + } + }, + vertexShader: ["varying vec2 vUv;", "void main() {", "vUv = uv;", "gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );", "}"].join("\n"), + fragmentShader: ["precision highp float;", "", "uniform sampler2D tDiffuse;", "", "uniform vec2 resolution;", "", "varying vec2 vUv;", "", "// FXAA 3.11 implementation by NVIDIA, ported to WebGL by Agost Biro (biro@archilogic.com)", "", "//----------------------------------------------------------------------------------", "// File: es3-kepler FXAA assets shaders/FXAA_DefaultES.frag", "// SDK Version: v3.00", "// Email: gameworks@nvidia.com", "// Site: http://developer.nvidia.com/", "//", "// Copyright (c) 2014-2015, NVIDIA CORPORATION. All rights reserved.", "//", "// Redistribution and use in source and binary forms, with or without", "// modification, are permitted provided that the following conditions", "// are met:", "// * Redistributions of source code must retain the above copyright", "// notice, this list of conditions and the following disclaimer.", "// * Redistributions in binary form must reproduce the above copyright", "// notice, this list of conditions and the following disclaimer in the", "// documentation and/or other materials provided with the distribution.", "// * Neither the name of NVIDIA CORPORATION nor the names of its", "// contributors may be used to endorse or promote products derived", "// from this software without specific prior written permission.", "//", "// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY", "// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE", "// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR", "// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR", "// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,", "// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,", "// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR", "// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY", "// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT", "// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE", "// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.", "//", "//----------------------------------------------------------------------------------", "", "#define FXAA_PC 1", "#define FXAA_GLSL_100 1", "#define FXAA_QUALITY_PRESET 12", "", "#define FXAA_GREEN_AS_LUMA 1", "", "/*--------------------------------------------------------------------------*/", "#ifndef FXAA_PC_CONSOLE", " //", " // The console algorithm for PC is included", " // for developers targeting really low spec machines.", " // Likely better to just run FXAA_PC, and use a really low preset.", " //", " #define FXAA_PC_CONSOLE 0", "#endif", "/*--------------------------------------------------------------------------*/", "#ifndef FXAA_GLSL_120", " #define FXAA_GLSL_120 0", "#endif", "/*--------------------------------------------------------------------------*/", "#ifndef FXAA_GLSL_130", " #define FXAA_GLSL_130 0", "#endif", "/*--------------------------------------------------------------------------*/", "#ifndef FXAA_HLSL_3", " #define FXAA_HLSL_3 0", "#endif", "/*--------------------------------------------------------------------------*/", "#ifndef FXAA_HLSL_4", " #define FXAA_HLSL_4 0", "#endif", "/*--------------------------------------------------------------------------*/", "#ifndef FXAA_HLSL_5", " #define FXAA_HLSL_5 0", "#endif", "/*==========================================================================*/", "#ifndef FXAA_GREEN_AS_LUMA", " //", " // For those using non-linear color,", " // and either not able to get luma in alpha, or not wanting to,", " // this enables FXAA to run using green as a proxy for luma.", " // So with this enabled, no need to pack luma in alpha.", " //", " // This will turn off AA on anything which lacks some amount of green.", " // Pure red and blue or combination of only R and B, will get no AA.", " //", " // Might want to lower the settings for both,", " // fxaaConsoleEdgeThresholdMin", " // fxaaQualityEdgeThresholdMin", " // In order to insure AA does not get turned off on colors", " // which contain a minor amount of green.", " //", " // 1 = On.", " // 0 = Off.", " //", " #define FXAA_GREEN_AS_LUMA 0", "#endif", "/*--------------------------------------------------------------------------*/", "#ifndef FXAA_EARLY_EXIT", " //", " // Controls algorithm's early exit path.", " // On PS3 turning this ON adds 2 cycles to the shader.", " // On 360 turning this OFF adds 10ths of a millisecond to the shader.", " // Turning this off on console will result in a more blurry image.", " // So this defaults to on.", " //", " // 1 = On.", " // 0 = Off.", " //", " #define FXAA_EARLY_EXIT 1", "#endif", "/*--------------------------------------------------------------------------*/", "#ifndef FXAA_DISCARD", " //", " // Only valid for PC OpenGL currently.", " // Probably will not work when FXAA_GREEN_AS_LUMA = 1.", " //", " // 1 = Use discard on pixels which don't need AA.", " // For APIs which enable concurrent TEX+ROP from same surface.", " // 0 = Return unchanged color on pixels which don't need AA.", " //", " #define FXAA_DISCARD 0", "#endif", "/*--------------------------------------------------------------------------*/", "#ifndef FXAA_FAST_PIXEL_OFFSET", " //", " // Used for GLSL 120 only.", " //", " // 1 = GL API supports fast pixel offsets", " // 0 = do not use fast pixel offsets", " //", " #ifdef GL_EXT_gpu_shader4", " #define FXAA_FAST_PIXEL_OFFSET 1", " #endif", " #ifdef GL_NV_gpu_shader5", " #define FXAA_FAST_PIXEL_OFFSET 1", " #endif", " #ifdef GL_ARB_gpu_shader5", " #define FXAA_FAST_PIXEL_OFFSET 1", " #endif", " #ifndef FXAA_FAST_PIXEL_OFFSET", " #define FXAA_FAST_PIXEL_OFFSET 0", " #endif", "#endif", "/*--------------------------------------------------------------------------*/", "#ifndef FXAA_GATHER4_ALPHA", " //", " // 1 = API supports gather4 on alpha channel.", " // 0 = API does not support gather4 on alpha channel.", " //", " #if (FXAA_HLSL_5 == 1)", " #define FXAA_GATHER4_ALPHA 1", " #endif", " #ifdef GL_ARB_gpu_shader5", " #define FXAA_GATHER4_ALPHA 1", " #endif", " #ifdef GL_NV_gpu_shader5", " #define FXAA_GATHER4_ALPHA 1", " #endif", " #ifndef FXAA_GATHER4_ALPHA", " #define FXAA_GATHER4_ALPHA 0", " #endif", "#endif", "", "", "/*============================================================================", " FXAA QUALITY - TUNING KNOBS", "------------------------------------------------------------------------------", "NOTE the other tuning knobs are now in the shader function inputs!", "============================================================================*/", "#ifndef FXAA_QUALITY_PRESET", " //", " // Choose the quality preset.", " // This needs to be compiled into the shader as it effects code.", " // Best option to include multiple presets is to", " // in each shader define the preset, then include this file.", " //", " // OPTIONS", " // -----------------------------------------------------------------------", " // 10 to 15 - default medium dither (10=fastest, 15=highest quality)", " // 20 to 29 - less dither, more expensive (20=fastest, 29=highest quality)", " // 39 - no dither, very expensive", " //", " // NOTES", " // -----------------------------------------------------------------------", " // 12 = slightly faster then FXAA 3.9 and higher edge quality (default)", " // 13 = about same speed as FXAA 3.9 and better than 12", " // 23 = closest to FXAA 3.9 visually and performance wise", " // _ = the lowest digit is directly related to performance", " // _ = the highest digit is directly related to style", " //", " #define FXAA_QUALITY_PRESET 12", "#endif", "", "", "/*============================================================================", "", " FXAA QUALITY - PRESETS", "", "============================================================================*/", "", "/*============================================================================", " FXAA QUALITY - MEDIUM DITHER PRESETS", "============================================================================*/", "#if (FXAA_QUALITY_PRESET == 10)", " #define FXAA_QUALITY_PS 3", " #define FXAA_QUALITY_P0 1.5", " #define FXAA_QUALITY_P1 3.0", " #define FXAA_QUALITY_P2 12.0", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_QUALITY_PRESET == 11)", " #define FXAA_QUALITY_PS 4", " #define FXAA_QUALITY_P0 1.0", " #define FXAA_QUALITY_P1 1.5", " #define FXAA_QUALITY_P2 3.0", " #define FXAA_QUALITY_P3 12.0", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_QUALITY_PRESET == 12)", " #define FXAA_QUALITY_PS 5", " #define FXAA_QUALITY_P0 1.0", " #define FXAA_QUALITY_P1 1.5", " #define FXAA_QUALITY_P2 2.0", " #define FXAA_QUALITY_P3 4.0", " #define FXAA_QUALITY_P4 12.0", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_QUALITY_PRESET == 13)", " #define FXAA_QUALITY_PS 6", " #define FXAA_QUALITY_P0 1.0", " #define FXAA_QUALITY_P1 1.5", " #define FXAA_QUALITY_P2 2.0", " #define FXAA_QUALITY_P3 2.0", " #define FXAA_QUALITY_P4 4.0", " #define FXAA_QUALITY_P5 12.0", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_QUALITY_PRESET == 14)", " #define FXAA_QUALITY_PS 7", " #define FXAA_QUALITY_P0 1.0", " #define FXAA_QUALITY_P1 1.5", " #define FXAA_QUALITY_P2 2.0", " #define FXAA_QUALITY_P3 2.0", " #define FXAA_QUALITY_P4 2.0", " #define FXAA_QUALITY_P5 4.0", " #define FXAA_QUALITY_P6 12.0", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_QUALITY_PRESET == 15)", " #define FXAA_QUALITY_PS 8", " #define FXAA_QUALITY_P0 1.0", " #define FXAA_QUALITY_P1 1.5", " #define FXAA_QUALITY_P2 2.0", " #define FXAA_QUALITY_P3 2.0", " #define FXAA_QUALITY_P4 2.0", " #define FXAA_QUALITY_P5 2.0", " #define FXAA_QUALITY_P6 4.0", " #define FXAA_QUALITY_P7 12.0", "#endif", "", "/*============================================================================", " FXAA QUALITY - LOW DITHER PRESETS", "============================================================================*/", "#if (FXAA_QUALITY_PRESET == 20)", " #define FXAA_QUALITY_PS 3", " #define FXAA_QUALITY_P0 1.5", " #define FXAA_QUALITY_P1 2.0", " #define FXAA_QUALITY_P2 8.0", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_QUALITY_PRESET == 21)", " #define FXAA_QUALITY_PS 4", " #define FXAA_QUALITY_P0 1.0", " #define FXAA_QUALITY_P1 1.5", " #define FXAA_QUALITY_P2 2.0", " #define FXAA_QUALITY_P3 8.0", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_QUALITY_PRESET == 22)", " #define FXAA_QUALITY_PS 5", " #define FXAA_QUALITY_P0 1.0", " #define FXAA_QUALITY_P1 1.5", " #define FXAA_QUALITY_P2 2.0", " #define FXAA_QUALITY_P3 2.0", " #define FXAA_QUALITY_P4 8.0", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_QUALITY_PRESET == 23)", " #define FXAA_QUALITY_PS 6", " #define FXAA_QUALITY_P0 1.0", " #define FXAA_QUALITY_P1 1.5", " #define FXAA_QUALITY_P2 2.0", " #define FXAA_QUALITY_P3 2.0", " #define FXAA_QUALITY_P4 2.0", " #define FXAA_QUALITY_P5 8.0", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_QUALITY_PRESET == 24)", " #define FXAA_QUALITY_PS 7", " #define FXAA_QUALITY_P0 1.0", " #define FXAA_QUALITY_P1 1.5", " #define FXAA_QUALITY_P2 2.0", " #define FXAA_QUALITY_P3 2.0", " #define FXAA_QUALITY_P4 2.0", " #define FXAA_QUALITY_P5 3.0", " #define FXAA_QUALITY_P6 8.0", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_QUALITY_PRESET == 25)", " #define FXAA_QUALITY_PS 8", " #define FXAA_QUALITY_P0 1.0", " #define FXAA_QUALITY_P1 1.5", " #define FXAA_QUALITY_P2 2.0", " #define FXAA_QUALITY_P3 2.0", " #define FXAA_QUALITY_P4 2.0", " #define FXAA_QUALITY_P5 2.0", " #define FXAA_QUALITY_P6 4.0", " #define FXAA_QUALITY_P7 8.0", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_QUALITY_PRESET == 26)", " #define FXAA_QUALITY_PS 9", " #define FXAA_QUALITY_P0 1.0", " #define FXAA_QUALITY_P1 1.5", " #define FXAA_QUALITY_P2 2.0", " #define FXAA_QUALITY_P3 2.0", " #define FXAA_QUALITY_P4 2.0", " #define FXAA_QUALITY_P5 2.0", " #define FXAA_QUALITY_P6 2.0", " #define FXAA_QUALITY_P7 4.0", " #define FXAA_QUALITY_P8 8.0", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_QUALITY_PRESET == 27)", " #define FXAA_QUALITY_PS 10", " #define FXAA_QUALITY_P0 1.0", " #define FXAA_QUALITY_P1 1.5", " #define FXAA_QUALITY_P2 2.0", " #define FXAA_QUALITY_P3 2.0", " #define FXAA_QUALITY_P4 2.0", " #define FXAA_QUALITY_P5 2.0", " #define FXAA_QUALITY_P6 2.0", " #define FXAA_QUALITY_P7 2.0", " #define FXAA_QUALITY_P8 4.0", " #define FXAA_QUALITY_P9 8.0", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_QUALITY_PRESET == 28)", " #define FXAA_QUALITY_PS 11", " #define FXAA_QUALITY_P0 1.0", " #define FXAA_QUALITY_P1 1.5", " #define FXAA_QUALITY_P2 2.0", " #define FXAA_QUALITY_P3 2.0", " #define FXAA_QUALITY_P4 2.0", " #define FXAA_QUALITY_P5 2.0", " #define FXAA_QUALITY_P6 2.0", " #define FXAA_QUALITY_P7 2.0", " #define FXAA_QUALITY_P8 2.0", " #define FXAA_QUALITY_P9 4.0", " #define FXAA_QUALITY_P10 8.0", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_QUALITY_PRESET == 29)", " #define FXAA_QUALITY_PS 12", " #define FXAA_QUALITY_P0 1.0", " #define FXAA_QUALITY_P1 1.5", " #define FXAA_QUALITY_P2 2.0", " #define FXAA_QUALITY_P3 2.0", " #define FXAA_QUALITY_P4 2.0", " #define FXAA_QUALITY_P5 2.0", " #define FXAA_QUALITY_P6 2.0", " #define FXAA_QUALITY_P7 2.0", " #define FXAA_QUALITY_P8 2.0", " #define FXAA_QUALITY_P9 2.0", " #define FXAA_QUALITY_P10 4.0", " #define FXAA_QUALITY_P11 8.0", "#endif", "", "/*============================================================================", " FXAA QUALITY - EXTREME QUALITY", "============================================================================*/", "#if (FXAA_QUALITY_PRESET == 39)", " #define FXAA_QUALITY_PS 12", " #define FXAA_QUALITY_P0 1.0", " #define FXAA_QUALITY_P1 1.0", " #define FXAA_QUALITY_P2 1.0", " #define FXAA_QUALITY_P3 1.0", " #define FXAA_QUALITY_P4 1.0", " #define FXAA_QUALITY_P5 1.5", " #define FXAA_QUALITY_P6 2.0", " #define FXAA_QUALITY_P7 2.0", " #define FXAA_QUALITY_P8 2.0", " #define FXAA_QUALITY_P9 2.0", " #define FXAA_QUALITY_P10 4.0", " #define FXAA_QUALITY_P11 8.0", "#endif", "", "", "", "/*============================================================================", "", " API PORTING", "", "============================================================================*/", "#if (FXAA_GLSL_100 == 1) || (FXAA_GLSL_120 == 1) || (FXAA_GLSL_130 == 1)", " #define FxaaBool bool", " #define FxaaDiscard discard", " #define FxaaFloat float", " #define FxaaFloat2 vec2", " #define FxaaFloat3 vec3", " #define FxaaFloat4 vec4", " #define FxaaHalf float", " #define FxaaHalf2 vec2", " #define FxaaHalf3 vec3", " #define FxaaHalf4 vec4", " #define FxaaInt2 ivec2", " #define FxaaSat(x) clamp(x, 0.0, 1.0)", " #define FxaaTex sampler2D", "#else", " #define FxaaBool bool", " #define FxaaDiscard clip(-1)", " #define FxaaFloat float", " #define FxaaFloat2 float2", " #define FxaaFloat3 float3", " #define FxaaFloat4 float4", " #define FxaaHalf half", " #define FxaaHalf2 half2", " #define FxaaHalf3 half3", " #define FxaaHalf4 half4", " #define FxaaSat(x) saturate(x)", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_GLSL_100 == 1)", " #define FxaaTexTop(t, p) texture2D(t, p, 0.0)", " #define FxaaTexOff(t, p, o, r) texture2D(t, p + (o * r), 0.0)", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_GLSL_120 == 1)", " // Requires,", " // #version 120", " // And at least,", " // #extension GL_EXT_gpu_shader4 : enable", " // (or set FXAA_FAST_PIXEL_OFFSET 1 to work like DX9)", " #define FxaaTexTop(t, p) texture2DLod(t, p, 0.0)", " #if (FXAA_FAST_PIXEL_OFFSET == 1)", " #define FxaaTexOff(t, p, o, r) texture2DLodOffset(t, p, 0.0, o)", " #else", " #define FxaaTexOff(t, p, o, r) texture2DLod(t, p + (o * r), 0.0)", " #endif", " #if (FXAA_GATHER4_ALPHA == 1)", " // use #extension GL_ARB_gpu_shader5 : enable", " #define FxaaTexAlpha4(t, p) textureGather(t, p, 3)", " #define FxaaTexOffAlpha4(t, p, o) textureGatherOffset(t, p, o, 3)", " #define FxaaTexGreen4(t, p) textureGather(t, p, 1)", " #define FxaaTexOffGreen4(t, p, o) textureGatherOffset(t, p, o, 1)", " #endif", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_GLSL_130 == 1)", ' // Requires "#version 130" or better', " #define FxaaTexTop(t, p) textureLod(t, p, 0.0)", " #define FxaaTexOff(t, p, o, r) textureLodOffset(t, p, 0.0, o)", " #if (FXAA_GATHER4_ALPHA == 1)", " // use #extension GL_ARB_gpu_shader5 : enable", " #define FxaaTexAlpha4(t, p) textureGather(t, p, 3)", " #define FxaaTexOffAlpha4(t, p, o) textureGatherOffset(t, p, o, 3)", " #define FxaaTexGreen4(t, p) textureGather(t, p, 1)", " #define FxaaTexOffGreen4(t, p, o) textureGatherOffset(t, p, o, 1)", " #endif", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_HLSL_3 == 1)", " #define FxaaInt2 float2", " #define FxaaTex sampler2D", " #define FxaaTexTop(t, p) tex2Dlod(t, float4(p, 0.0, 0.0))", " #define FxaaTexOff(t, p, o, r) tex2Dlod(t, float4(p + (o * r), 0, 0))", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_HLSL_4 == 1)", " #define FxaaInt2 int2", " struct FxaaTex { SamplerState smpl; Texture2D tex; };", " #define FxaaTexTop(t, p) t.tex.SampleLevel(t.smpl, p, 0.0)", " #define FxaaTexOff(t, p, o, r) t.tex.SampleLevel(t.smpl, p, 0.0, o)", "#endif", "/*--------------------------------------------------------------------------*/", "#if (FXAA_HLSL_5 == 1)", " #define FxaaInt2 int2", " struct FxaaTex { SamplerState smpl; Texture2D tex; };", " #define FxaaTexTop(t, p) t.tex.SampleLevel(t.smpl, p, 0.0)", " #define FxaaTexOff(t, p, o, r) t.tex.SampleLevel(t.smpl, p, 0.0, o)", " #define FxaaTexAlpha4(t, p) t.tex.GatherAlpha(t.smpl, p)", " #define FxaaTexOffAlpha4(t, p, o) t.tex.GatherAlpha(t.smpl, p, o)", " #define FxaaTexGreen4(t, p) t.tex.GatherGreen(t.smpl, p)", " #define FxaaTexOffGreen4(t, p, o) t.tex.GatherGreen(t.smpl, p, o)", "#endif", "", "", "/*============================================================================", " GREEN AS LUMA OPTION SUPPORT FUNCTION", "============================================================================*/", "#if (FXAA_GREEN_AS_LUMA == 0)", " FxaaFloat FxaaLuma(FxaaFloat4 rgba) { return rgba.w; }", "#else", " FxaaFloat FxaaLuma(FxaaFloat4 rgba) { return rgba.y; }", "#endif", "", "", "", "", "/*============================================================================", "", " FXAA3 QUALITY - PC", "", "============================================================================*/", "#if (FXAA_PC == 1)", "/*--------------------------------------------------------------------------*/", "FxaaFloat4 FxaaPixelShader(", " //", " // Use noperspective interpolation here (turn off perspective interpolation).", " // {xy} = center of pixel", " FxaaFloat2 pos,", " //", " // Used only for FXAA Console, and not used on the 360 version.", " // Use noperspective interpolation here (turn off perspective interpolation).", " // {xy_} = upper left of pixel", " // {_zw} = lower right of pixel", " FxaaFloat4 fxaaConsolePosPos,", " //", " // Input color texture.", " // {rgb_} = color in linear or perceptual color space", " // if (FXAA_GREEN_AS_LUMA == 0)", " // {__a} = luma in perceptual color space (not linear)", " FxaaTex tex,", " //", " // Only used on the optimized 360 version of FXAA Console.", ' // For everything but 360, just use the same input here as for "tex".', " // For 360, same texture, just alias with a 2nd sampler.", " // This sampler needs to have an exponent bias of -1.", " FxaaTex fxaaConsole360TexExpBiasNegOne,", " //", " // Only used on the optimized 360 version of FXAA Console.", ' // For everything but 360, just use the same input here as for "tex".', " // For 360, same texture, just alias with a 3nd sampler.", " // This sampler needs to have an exponent bias of -2.", " FxaaTex fxaaConsole360TexExpBiasNegTwo,", " //", " // Only used on FXAA Quality.", " // This must be from a constant/uniform.", " // {x_} = 1.0/screenWidthInPixels", " // {_y} = 1.0/screenHeightInPixels", " FxaaFloat2 fxaaQualityRcpFrame,", " //", " // Only used on FXAA Console.", " // This must be from a constant/uniform.", " // This effects sub-pixel AA quality and inversely sharpness.", " // Where N ranges between,", " // N = 0.50 (default)", " // N = 0.33 (sharper)", " // {x__} = -N/screenWidthInPixels", " // {_y_} = -N/screenHeightInPixels", " // {_z_} = N/screenWidthInPixels", " // {__w} = N/screenHeightInPixels", " FxaaFloat4 fxaaConsoleRcpFrameOpt,", " //", " // Only used on FXAA Console.", " // Not used on 360, but used on PS3 and PC.", " // This must be from a constant/uniform.", " // {x__} = -2.0/screenWidthInPixels", " // {_y_} = -2.0/screenHeightInPixels", " // {_z_} = 2.0/screenWidthInPixels", " // {__w} = 2.0/screenHeightInPixels", " FxaaFloat4 fxaaConsoleRcpFrameOpt2,", " //", " // Only used on FXAA Console.", " // Only used on 360 in place of fxaaConsoleRcpFrameOpt2.", " // This must be from a constant/uniform.", " // {x__} = 8.0/screenWidthInPixels", " // {_y_} = 8.0/screenHeightInPixels", " // {_z_} = -4.0/screenWidthInPixels", " // {__w} = -4.0/screenHeightInPixels", " FxaaFloat4 fxaaConsole360RcpFrameOpt2,", " //", " // Only used on FXAA Quality.", " // This used to be the FXAA_QUALITY_SUBPIX define.", " // It is here now to allow easier tuning.", " // Choose the amount of sub-pixel aliasing removal.", " // This can effect sharpness.", " // 1.00 - upper limit (softer)", " // 0.75 - default amount of filtering", " // 0.50 - lower limit (sharper, less sub-pixel aliasing removal)", " // 0.25 - almost off", " // 0.00 - completely off", " FxaaFloat fxaaQualitySubpix,", " //", " // Only used on FXAA Quality.", " // This used to be the FXAA_QUALITY_EDGE_THRESHOLD define.", " // It is here now to allow easier tuning.", " // The minimum amount of local contrast required to apply algorithm.", " // 0.333 - too little (faster)", " // 0.250 - low quality", " // 0.166 - default", " // 0.125 - high quality", " // 0.063 - overkill (slower)", " FxaaFloat fxaaQualityEdgeThreshold,", " //", " // Only used on FXAA Quality.", " // This used to be the FXAA_QUALITY_EDGE_THRESHOLD_MIN define.", " // It is here now to allow easier tuning.", " // Trims the algorithm from processing darks.", " // 0.0833 - upper limit (default, the start of visible unfiltered edges)", " // 0.0625 - high quality (faster)", " // 0.0312 - visible limit (slower)", " // Special notes when using FXAA_GREEN_AS_LUMA,", " // Likely want to set this to zero.", " // As colors that are mostly not-green", " // will appear very dark in the green channel!", " // Tune by looking at mostly non-green content,", " // then start at zero and increase until aliasing is a problem.", " FxaaFloat fxaaQualityEdgeThresholdMin,", " //", " // Only used on FXAA Console.", " // This used to be the FXAA_CONSOLE_EDGE_SHARPNESS define.", " // It is here now to allow easier tuning.", " // This does not effect PS3, as this needs to be compiled in.", " // Use FXAA_CONSOLE_PS3_EDGE_SHARPNESS for PS3.", " // Due to the PS3 being ALU bound,", " // there are only three safe values here: 2 and 4 and 8.", " // These options use the shaders ability to a free *|/ by 2|4|8.", " // For all other platforms can be a non-power of two.", " // 8.0 is sharper (default!!!)", " // 4.0 is softer", " // 2.0 is really soft (good only for vector graphics inputs)", " FxaaFloat fxaaConsoleEdgeSharpness,", " //", " // Only used on FXAA Console.", " // This used to be the FXAA_CONSOLE_EDGE_THRESHOLD define.", " // It is here now to allow easier tuning.", " // This does not effect PS3, as this needs to be compiled in.", " // Use FXAA_CONSOLE_PS3_EDGE_THRESHOLD for PS3.", " // Due to the PS3 being ALU bound,", " // there are only two safe values here: 1/4 and 1/8.", " // These options use the shaders ability to a free *|/ by 2|4|8.", " // The console setting has a different mapping than the quality setting.", " // Other platforms can use other values.", " // 0.125 leaves less aliasing, but is softer (default!!!)", " // 0.25 leaves more aliasing, and is sharper", " FxaaFloat fxaaConsoleEdgeThreshold,", " //", " // Only used on FXAA Console.", " // This used to be the FXAA_CONSOLE_EDGE_THRESHOLD_MIN define.", " // It is here now to allow easier tuning.", " // Trims the algorithm from processing darks.", " // The console setting has a different mapping than the quality setting.", " // This only applies when FXAA_EARLY_EXIT is 1.", " // This does not apply to PS3,", " // PS3 was simplified to avoid more shader instructions.", " // 0.06 - faster but more aliasing in darks", " // 0.05 - default", " // 0.04 - slower and less aliasing in darks", " // Special notes when using FXAA_GREEN_AS_LUMA,", " // Likely want to set this to zero.", " // As colors that are mostly not-green", " // will appear very dark in the green channel!", " // Tune by looking at mostly non-green content,", " // then start at zero and increase until aliasing is a problem.", " FxaaFloat fxaaConsoleEdgeThresholdMin,", " //", " // Extra constants for 360 FXAA Console only.", " // Use zeros or anything else for other platforms.", " // These must be in physical constant registers and NOT immediates.", " // Immediates will result in compiler un-optimizing.", " // {xyzw} = float4(1.0, -1.0, 0.25, -0.25)", " FxaaFloat4 fxaaConsole360ConstDir", ") {", "/*--------------------------------------------------------------------------*/", " FxaaFloat2 posM;", " posM.x = pos.x;", " posM.y = pos.y;", " #if (FXAA_GATHER4_ALPHA == 1)", " #if (FXAA_DISCARD == 0)", " FxaaFloat4 rgbyM = FxaaTexTop(tex, posM);", " #if (FXAA_GREEN_AS_LUMA == 0)", " #define lumaM rgbyM.w", " #else", " #define lumaM rgbyM.y", " #endif", " #endif", " #if (FXAA_GREEN_AS_LUMA == 0)", " FxaaFloat4 luma4A = FxaaTexAlpha4(tex, posM);", " FxaaFloat4 luma4B = FxaaTexOffAlpha4(tex, posM, FxaaInt2(-1, -1));", " #else", " FxaaFloat4 luma4A = FxaaTexGreen4(tex, posM);", " FxaaFloat4 luma4B = FxaaTexOffGreen4(tex, posM, FxaaInt2(-1, -1));", " #endif", " #if (FXAA_DISCARD == 1)", " #define lumaM luma4A.w", " #endif", " #define lumaE luma4A.z", " #define lumaS luma4A.x", " #define lumaSE luma4A.y", " #define lumaNW luma4B.w", " #define lumaN luma4B.z", " #define lumaW luma4B.x", " #else", " FxaaFloat4 rgbyM = FxaaTexTop(tex, posM);", " #if (FXAA_GREEN_AS_LUMA == 0)", " #define lumaM rgbyM.w", " #else", " #define lumaM rgbyM.y", " #endif", " #if (FXAA_GLSL_100 == 1)", " FxaaFloat lumaS = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 0.0, 1.0), fxaaQualityRcpFrame.xy));", " FxaaFloat lumaE = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 1.0, 0.0), fxaaQualityRcpFrame.xy));", " FxaaFloat lumaN = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 0.0,-1.0), fxaaQualityRcpFrame.xy));", " FxaaFloat lumaW = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2(-1.0, 0.0), fxaaQualityRcpFrame.xy));", " #else", " FxaaFloat lumaS = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 0, 1), fxaaQualityRcpFrame.xy));", " FxaaFloat lumaE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1, 0), fxaaQualityRcpFrame.xy));", " FxaaFloat lumaN = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 0,-1), fxaaQualityRcpFrame.xy));", " FxaaFloat lumaW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 0), fxaaQualityRcpFrame.xy));", " #endif", " #endif", "/*--------------------------------------------------------------------------*/", " FxaaFloat maxSM = max(lumaS, lumaM);", " FxaaFloat minSM = min(lumaS, lumaM);", " FxaaFloat maxESM = max(lumaE, maxSM);", " FxaaFloat minESM = min(lumaE, minSM);", " FxaaFloat maxWN = max(lumaN, lumaW);", " FxaaFloat minWN = min(lumaN, lumaW);", " FxaaFloat rangeMax = max(maxWN, maxESM);", " FxaaFloat rangeMin = min(minWN, minESM);", " FxaaFloat rangeMaxScaled = rangeMax * fxaaQualityEdgeThreshold;", " FxaaFloat range = rangeMax - rangeMin;", " FxaaFloat rangeMaxClamped = max(fxaaQualityEdgeThresholdMin, rangeMaxScaled);", " FxaaBool earlyExit = range < rangeMaxClamped;", "/*--------------------------------------------------------------------------*/", " if(earlyExit)", " #if (FXAA_DISCARD == 1)", " FxaaDiscard;", " #else", " return rgbyM;", " #endif", "/*--------------------------------------------------------------------------*/", " #if (FXAA_GATHER4_ALPHA == 0)", " #if (FXAA_GLSL_100 == 1)", " FxaaFloat lumaNW = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2(-1.0,-1.0), fxaaQualityRcpFrame.xy));", " FxaaFloat lumaSE = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 1.0, 1.0), fxaaQualityRcpFrame.xy));", " FxaaFloat lumaNE = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 1.0,-1.0), fxaaQualityRcpFrame.xy));", " FxaaFloat lumaSW = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2(-1.0, 1.0), fxaaQualityRcpFrame.xy));", " #else", " FxaaFloat lumaNW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1,-1), fxaaQualityRcpFrame.xy));", " FxaaFloat lumaSE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1, 1), fxaaQualityRcpFrame.xy));", " FxaaFloat lumaNE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1,-1), fxaaQualityRcpFrame.xy));", " FxaaFloat lumaSW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 1), fxaaQualityRcpFrame.xy));", " #endif", " #else", " FxaaFloat lumaNE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(1, -1), fxaaQualityRcpFrame.xy));", " FxaaFloat lumaSW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 1), fxaaQualityRcpFrame.xy));", " #endif", "/*--------------------------------------------------------------------------*/", " FxaaFloat lumaNS = lumaN + lumaS;", " FxaaFloat lumaWE = lumaW + lumaE;", " FxaaFloat subpixRcpRange = 1.0/range;", " FxaaFloat subpixNSWE = lumaNS + lumaWE;", " FxaaFloat edgeHorz1 = (-2.0 * lumaM) + lumaNS;", " FxaaFloat edgeVert1 = (-2.0 * lumaM) + lumaWE;", "/*--------------------------------------------------------------------------*/", " FxaaFloat lumaNESE = lumaNE + lumaSE;", " FxaaFloat lumaNWNE = lumaNW + lumaNE;", " FxaaFloat edgeHorz2 = (-2.0 * lumaE) + lumaNESE;", " FxaaFloat edgeVert2 = (-2.0 * lumaN) + lumaNWNE;", "/*--------------------------------------------------------------------------*/", " FxaaFloat lumaNWSW = lumaNW + lumaSW;", " FxaaFloat lumaSWSE = lumaSW + lumaSE;", " FxaaFloat edgeHorz4 = (abs(edgeHorz1) * 2.0) + abs(edgeHorz2);", " FxaaFloat edgeVert4 = (abs(edgeVert1) * 2.0) + abs(edgeVert2);", " FxaaFloat edgeHorz3 = (-2.0 * lumaW) + lumaNWSW;", " FxaaFloat edgeVert3 = (-2.0 * lumaS) + lumaSWSE;", " FxaaFloat edgeHorz = abs(edgeHorz3) + edgeHorz4;", " FxaaFloat edgeVert = abs(edgeVert3) + edgeVert4;", "/*--------------------------------------------------------------------------*/", " FxaaFloat subpixNWSWNESE = lumaNWSW + lumaNESE;", " FxaaFloat lengthSign = fxaaQualityRcpFrame.x;", " FxaaBool horzSpan = edgeHorz >= edgeVert;", " FxaaFloat subpixA = subpixNSWE * 2.0 + subpixNWSWNESE;", "/*--------------------------------------------------------------------------*/", " if(!horzSpan) lumaN = lumaW;", " if(!horzSpan) lumaS = lumaE;", " if(horzSpan) lengthSign = fxaaQualityRcpFrame.y;", " FxaaFloat subpixB = (subpixA * (1.0/12.0)) - lumaM;", "/*--------------------------------------------------------------------------*/", " FxaaFloat gradientN = lumaN - lumaM;", " FxaaFloat gradientS = lumaS - lumaM;", " FxaaFloat lumaNN = lumaN + lumaM;", " FxaaFloat lumaSS = lumaS + lumaM;", " FxaaBool pairN = abs(gradientN) >= abs(gradientS);", " FxaaFloat gradient = max(abs(gradientN), abs(gradientS));", " if(pairN) lengthSign = -lengthSign;", " FxaaFloat subpixC = FxaaSat(abs(subpixB) * subpixRcpRange);", "/*--------------------------------------------------------------------------*/", " FxaaFloat2 posB;", " posB.x = posM.x;", " posB.y = posM.y;", " FxaaFloat2 offNP;", " offNP.x = (!horzSpan) ? 0.0 : fxaaQualityRcpFrame.x;", " offNP.y = ( horzSpan) ? 0.0 : fxaaQualityRcpFrame.y;", " if(!horzSpan) posB.x += lengthSign * 0.5;", " if( horzSpan) posB.y += lengthSign * 0.5;", "/*--------------------------------------------------------------------------*/", " FxaaFloat2 posN;", " posN.x = posB.x - offNP.x * FXAA_QUALITY_P0;", " posN.y = posB.y - offNP.y * FXAA_QUALITY_P0;", " FxaaFloat2 posP;", " posP.x = posB.x + offNP.x * FXAA_QUALITY_P0;", " posP.y = posB.y + offNP.y * FXAA_QUALITY_P0;", " FxaaFloat subpixD = ((-2.0)*subpixC) + 3.0;", " FxaaFloat lumaEndN = FxaaLuma(FxaaTexTop(tex, posN));", " FxaaFloat subpixE = subpixC * subpixC;", " FxaaFloat lumaEndP = FxaaLuma(FxaaTexTop(tex, posP));", "/*--------------------------------------------------------------------------*/", " if(!pairN) lumaNN = lumaSS;", " FxaaFloat gradientScaled = gradient * 1.0/4.0;", " FxaaFloat lumaMM = lumaM - lumaNN * 0.5;", " FxaaFloat subpixF = subpixD * subpixE;", " FxaaBool lumaMLTZero = lumaMM < 0.0;", "/*--------------------------------------------------------------------------*/", " lumaEndN -= lumaNN * 0.5;", " lumaEndP -= lumaNN * 0.5;", " FxaaBool doneN = abs(lumaEndN) >= gradientScaled;", " FxaaBool doneP = abs(lumaEndP) >= gradientScaled;", " if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P1;", " if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P1;", " FxaaBool doneNP = (!doneN) || (!doneP);", " if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P1;", " if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P1;", "/*--------------------------------------------------------------------------*/", " if(doneNP) {", " if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));", " if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));", " if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;", " if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;", " doneN = abs(lumaEndN) >= gradientScaled;", " doneP = abs(lumaEndP) >= gradientScaled;", " if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P2;", " if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P2;", " doneNP = (!doneN) || (!doneP);", " if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P2;", " if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P2;", "/*--------------------------------------------------------------------------*/", " #if (FXAA_QUALITY_PS > 3)", " if(doneNP) {", " if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));", " if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));", " if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;", " if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;", " doneN = abs(lumaEndN) >= gradientScaled;", " doneP = abs(lumaEndP) >= gradientScaled;", " if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P3;", " if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P3;", " doneNP = (!doneN) || (!doneP);", " if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P3;", " if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P3;", "/*--------------------------------------------------------------------------*/", " #if (FXAA_QUALITY_PS > 4)", " if(doneNP) {", " if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));", " if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));", " if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;", " if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;", " doneN = abs(lumaEndN) >= gradientScaled;", " doneP = abs(lumaEndP) >= gradientScaled;", " if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P4;", " if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P4;", " doneNP = (!doneN) || (!doneP);", " if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P4;", " if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P4;", "/*--------------------------------------------------------------------------*/", " #if (FXAA_QUALITY_PS > 5)", " if(doneNP) {", " if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));", " if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));", " if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;", " if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;", " doneN = abs(lumaEndN) >= gradientScaled;", " doneP = abs(lumaEndP) >= gradientScaled;", " if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P5;", " if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P5;", " doneNP = (!doneN) || (!doneP);", " if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P5;", " if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P5;", "/*--------------------------------------------------------------------------*/", " #if (FXAA_QUALITY_PS > 6)", " if(doneNP) {", " if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));", " if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));", " if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;", " if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;", " doneN = abs(lumaEndN) >= gradientScaled;", " doneP = abs(lumaEndP) >= gradientScaled;", " if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P6;", " if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P6;", " doneNP = (!doneN) || (!doneP);", " if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P6;", " if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P6;", "/*--------------------------------------------------------------------------*/", " #if (FXAA_QUALITY_PS > 7)", " if(doneNP) {", " if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));", " if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));", " if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;", " if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;", " doneN = abs(lumaEndN) >= gradientScaled;", " doneP = abs(lumaEndP) >= gradientScaled;", " if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P7;", " if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P7;", " doneNP = (!doneN) || (!doneP);", " if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P7;", " if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P7;", "/*--------------------------------------------------------------------------*/", " #if (FXAA_QUALITY_PS > 8)", " if(doneNP) {", " if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));", " if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));", " if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;", " if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;", " doneN = abs(lumaEndN) >= gradientScaled;", " doneP = abs(lumaEndP) >= gradientScaled;", " if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P8;", " if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P8;", " doneNP = (!doneN) || (!doneP);", " if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P8;", " if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P8;", "/*--------------------------------------------------------------------------*/", " #if (FXAA_QUALITY_PS > 9)", " if(doneNP) {", " if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));", " if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));", " if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;", " if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;", " doneN = abs(lumaEndN) >= gradientScaled;", " doneP = abs(lumaEndP) >= gradientScaled;", " if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P9;", " if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P9;", " doneNP = (!doneN) || (!doneP);", " if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P9;", " if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P9;", "/*--------------------------------------------------------------------------*/", " #if (FXAA_QUALITY_PS > 10)", " if(doneNP) {", " if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));", " if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));", " if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;", " if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;", " doneN = abs(lumaEndN) >= gradientScaled;", " doneP = abs(lumaEndP) >= gradientScaled;", " if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P10;", " if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P10;", " doneNP = (!doneN) || (!doneP);", " if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P10;", " if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P10;", "/*--------------------------------------------------------------------------*/", " #if (FXAA_QUALITY_PS > 11)", " if(doneNP) {", " if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));", " if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));", " if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;", " if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;", " doneN = abs(lumaEndN) >= gradientScaled;", " doneP = abs(lumaEndP) >= gradientScaled;", " if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P11;", " if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P11;", " doneNP = (!doneN) || (!doneP);", " if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P11;", " if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P11;", "/*--------------------------------------------------------------------------*/", " #if (FXAA_QUALITY_PS > 12)", " if(doneNP) {", " if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));", " if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));", " if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;", " if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;", " doneN = abs(lumaEndN) >= gradientScaled;", " doneP = abs(lumaEndP) >= gradientScaled;", " if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P12;", " if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P12;", " doneNP = (!doneN) || (!doneP);", " if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P12;", " if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P12;", "/*--------------------------------------------------------------------------*/", " }", " #endif", "/*--------------------------------------------------------------------------*/", " }", " #endif", "/*--------------------------------------------------------------------------*/", " }", " #endif", "/*--------------------------------------------------------------------------*/", " }", " #endif", "/*--------------------------------------------------------------------------*/", " }", " #endif", "/*--------------------------------------------------------------------------*/", " }", " #endif", "/*--------------------------------------------------------------------------*/", " }", " #endif", "/*--------------------------------------------------------------------------*/", " }", " #endif", "/*--------------------------------------------------------------------------*/", " }", " #endif", "/*--------------------------------------------------------------------------*/", " }", " #endif", "/*--------------------------------------------------------------------------*/", " }", "/*--------------------------------------------------------------------------*/", " FxaaFloat dstN = posM.x - posN.x;", " FxaaFloat dstP = posP.x - posM.x;", " if(!horzSpan) dstN = posM.y - posN.y;", " if(!horzSpan) dstP = posP.y - posM.y;", "/*--------------------------------------------------------------------------*/", " FxaaBool goodSpanN = (lumaEndN < 0.0) != lumaMLTZero;", " FxaaFloat spanLength = (dstP + dstN);", " FxaaBool goodSpanP = (lumaEndP < 0.0) != lumaMLTZero;", " FxaaFloat spanLengthRcp = 1.0/spanLength;", "/*--------------------------------------------------------------------------*/", " FxaaBool directionN = dstN < dstP;", " FxaaFloat dst = min(dstN, dstP);", " FxaaBool goodSpan = directionN ? goodSpanN : goodSpanP;", " FxaaFloat subpixG = subpixF * subpixF;", " FxaaFloat pixelOffset = (dst * (-spanLengthRcp)) + 0.5;", " FxaaFloat subpixH = subpixG * fxaaQualitySubpix;", "/*--------------------------------------------------------------------------*/", " FxaaFloat pixelOffsetGood = goodSpan ? pixelOffset : 0.0;", " FxaaFloat pixelOffsetSubpix = max(pixelOffsetGood, subpixH);", " if(!horzSpan) posM.x += pixelOffsetSubpix * lengthSign;", " if( horzSpan) posM.y += pixelOffsetSubpix * lengthSign;", " #if (FXAA_DISCARD == 1)", " return FxaaTexTop(tex, posM);", " #else", " return FxaaFloat4(FxaaTexTop(tex, posM).xyz, lumaM);", " #endif", "}", "/*==========================================================================*/", "#endif", "", "void main() {", " gl_FragColor = FxaaPixelShader(", " vUv,", " vec4(0.0),", " tDiffuse,", " tDiffuse,", " tDiffuse,", " resolution,", " vec4(0.0),", " vec4(0.0),", " vec4(0.0),", " 0.75,", " 0.166,", " 0.0833,", " 0.0,", " 0.0,", " 0.0,", " vec4(0.0)", " );", "", " // TODO avoid querying texture twice for same texel", " gl_FragColor.a = texture2D(tDiffuse, vUv).a;", "}"].join("\n") + }, + Iy = function (A, e, t, i, o) { + gy.call(this), + this.scene = A, + this.camera = e, + this.overrideMaterial = t, + this.clearColor = i, + this.clearAlpha = void 0 !== o ? o : 0, + this.clear = !0, + this.clearDepth = !1, + this.needsSwap = !1 + }; + Iy.prototype = Object.assign(Object.create(gy.prototype), { + constructor: Iy, + render: function (A, e, t) { + var i = A.autoClear; + A.autoClear = !1, + this.scene.overrideMaterial = this.overrideMaterial; + var o = null, + n = null; + this.clearColor && (n = A.getClearColor().getHex(), + o = A.getClearAlpha(), + A.setClearColor(this.clearColor, this.clearAlpha)), + this.clearDepth && A.clearDepth(), + A.setRenderTarget(this.renderToScreen ? null : t), + this.clear && A.clear(A.autoClearColor, A.autoClearDepth, A.autoClearStencil), + A.render(this.scene, this.camera), + this.clearColor && A.setClearColor(n, o), + this.scene.overrideMaterial = null, + A.autoClear = i + } + }); + var Ey = function (A, e, t, i, o) { + gy.call(this), + this.modelManager = e, + this.renderScene = t, + this.renderCamera = i, + this.selectedObjectIds = void 0 !== o ? o : [], + this.defaultEdgeColor = (new LA).setHex(4173056), + this.defaultEdgeAlpha = .95, + this.edgeColor = new p(this.defaultEdgeColor.r, this.defaultEdgeColor.g, this.defaultEdgeColor.b, this.defaultEdgeAlpha), + this.edgeLength = 2, + this.resolution = void 0 !== A ? new s(A.x, A.y) : new s(256, 256); + var n = { + minFilter: 1006, + magFilter: 1006, + format: 1023 + }; + this.renderTargetDepthBuffer = new g(this.resolution.x, this.resolution.y, n), + this.renderTargetDepthBuffer.texture.name = "OutlinePass.depth", + this.renderTargetDepthBuffer.texture.generateMipmaps = !1, + this.renderTargetMaskBuffer = new g(this.resolution.x, this.resolution.y, n), + this.renderTargetMaskBuffer.texture.name = "OutlinePass.mask", + this.renderTargetMaskBuffer.texture.generateMipmaps = !1, + this.renderTargetMaskDownSampleBuffer = new g(this.resolution.x, this.resolution.y, n), + this.renderTargetMaskDownSampleBuffer.texture.name = "OutlinePass.depthDownSample", + this.renderTargetMaskDownSampleBuffer.texture.generateMipmaps = !1, + this.renderTargetEdgeBuffer = new g(this.resolution.x, this.resolution.y, n), + this.renderTargetEdgeBuffer.texture.name = "OutlinePass.edge", + this.renderTargetEdgeBuffer.texture.generateMipmaps = !1, + this.renderTargetColorBuffer = new g(this.resolution.x, this.resolution.y, n), + this.renderTargetColorBuffer.texture.name = "OutlinePass.color", + this.renderTargetColorBuffer.texture.generateMipmaps = !1, + this.depthMaterial = new ji, + this.depthMaterial.side = 2, + this.depthMaterial.depthPacking = 3201, + this.depthMaterial.blending = 0, + this.InstancedDepthMaterial = new Su, + this.InstancedDepthMaterial.side = 2, + this.InstancedDepthMaterial.depthPacking = 3201, + this.InstancedDepthMaterial.blending = 0, + this.prepareMaskMaterial = this.getPrepareMaskMaterial(), + this.prepareMaskMaterial.side = 2, + this.prepareMaskInstancedMaterial = this.getPrepareMaskInstancedMaterial(), + this.prepareMaskInstancedMaterial.side = 2, + this.edgeDetectionMaterial = this.getEdgeDetectionMaterial(), + this.overlayMaterial = this.getOverlayMaterial(), + void 0 === py && console.error("OutlinePass relies on THREE.CopyShader"); + var r = py; + return this.copyUniforms = Ge.clone(r.uniforms), + this.copyUniforms.opacity.value = 1, + this.materialCopy = new Pe({ + uniforms: this.copyUniforms, + vertexShader: r.vertexShader, + fragmentShader: r.fragmentShader, + blending: 0, + depthTest: !1, + depthWrite: !1, + transparent: !0 + }), + this.enabled = !0, + this.needsSwap = !1, + this.oldClearColor = new LA, + this.oldClearAlpha = 1, + this.camera = new Ka(-1, 1, 1, -1, 0, 1), + this.scene = new Y, + this.quad = new Ue(new et(2, 2), null), + this.quad.frustumCulled = !1, + this.scene.add(this.quad), + this.textureMatrix = new M, + this + }; + Ey.prototype.dispose = function () { + this.renderTargetDepthBuffer.dispose(), + this.renderTargetMaskBuffer.dispose(), + this.renderTargetMaskDownSampleBuffer.dispose(), + this.renderTargetEdgeBuffer.dispose(), + this.renderTargetColorBuffer.dispose() + }, + Ey.prototype.setSize = function (A, e) { + this.renderTargetDepthBuffer.setSize(A, e), + this.renderTargetMaskBuffer.setSize(A, e), + this.renderTargetMaskDownSampleBuffer.setSize(A, e), + this.renderTargetEdgeBuffer.setSize(A, e), + this.renderTargetColorBuffer.setSize(A, e) + }, + Ey.prototype.adjustVisibilityOfObjectsWithoutOutline = function (A) { + this.modelManager.adjustVisibilityOfObjectsWithoutOutline(A) + }, + Ey.prototype.adjustVisibility = function (A) { + this.modelManager.adjustVisibility(A) + }, + Ey.prototype.changeVisibilityOfSelectedObjects = function (A) { + this.modelManager.changeVisibilityOfSelectedObjects(A) + }, + Ey.prototype.changeVisibilityOfNonSelectedObjects = function (A) { + this.modelManager.changeVisibilityOfNonSelectedObjects(A) + }, + Ey.prototype.adjustInstanceVisibility = function (A) { + this.modelManager.adjustInstanceVisibility(A) + }, + Ey.prototype.changeInstanceVisibilityOfSelectedObjects = function (A) { + this.modelManager.changeInstanceVisibilityOfSelectedObjects(A) + }, + Ey.prototype.changeInstanceVisibilityOfNonSelectedObjects = function (A) { + this.modelManager.changeInstanceVisibilityOfNonSelectedObjects(A) + }, + Ey.prototype.restoreVisibilityOfObjects = function () { + this.modelManager.restoreVisibilityOfObjects() + }, + Ey.prototype.updateTextureMatrix = function () { + this.textureMatrix.set(.5, 0, 0, .5, 0, .5, 0, .5, 0, 0, .5, .5, 0, 0, 0, 1), + this.textureMatrix.multiply(this.renderCamera.projectionMatrix), + this.textureMatrix.multiply(this.renderCamera.matrixWorldInverse) + }, + Ey.prototype.render = function (A, e, t, i, o) { + this.oldClearColor.copy(A.getClearColor()), + this.oldClearAlpha = A.getClearAlpha(); + var n = A.autoClear; + A.autoClear = !1, + o && A.state.buffers.stencil.setTest(!1), + A.setClearColor(0, 0), + this.adjustVisibilityOfObjectsWithoutOutline(!1), + this.adjustInstanceVisibility(!1), + this.changeVisibilityOfSelectedObjects(!1), + this.renderScene.overrideMaterial = this.depthMaterial, + A.setRenderTarget(this.renderTargetDepthBuffer), + A.clear(), + A.render(this.renderScene, this.renderCamera), + this.adjustInstanceVisibility(!0), + this.changeVisibilityOfSelectedObjects(!0), + this.adjustVisibility(!1), + this.changeInstanceVisibilityOfSelectedObjects(!1), + this.renderScene.overrideMaterial = this.InstancedDepthMaterial, + A.setRenderTarget(this.renderTargetDepthBuffer), + A.render(this.renderScene, this.renderCamera), + this.adjustVisibility(!0), + this.changeInstanceVisibilityOfSelectedObjects(!0), + this.updateTextureMatrix(), + this.adjustInstanceVisibility(!1), + this.changeVisibilityOfNonSelectedObjects(!1), + this.adjustVisibilityOfObjectsWithoutOutline(!1), + this.renderScene.overrideMaterial = this.prepareMaskMaterial, + this.prepareMaskMaterial.uniforms.cameraNearFar.value = new s(this.renderCamera.near, this.renderCamera.far), + this.prepareMaskMaterial.uniforms.depthTexture.value = this.renderTargetDepthBuffer.texture, + this.prepareMaskMaterial.uniforms.textureMatrix.value = this.textureMatrix, + A.setRenderTarget(this.renderTargetMaskBuffer), + A.clear(), + A.render(this.renderScene, this.renderCamera), + this.adjustInstanceVisibility(!0), + this.changeVisibilityOfNonSelectedObjects(!0), + this.adjustVisibility(!1), + this.changeInstanceVisibilityOfNonSelectedObjects(!1), + this.adjustVisibilityOfObjectsWithoutOutline(!1), + this.renderScene.overrideMaterial = this.prepareMaskInstancedMaterial, + this.prepareMaskInstancedMaterial.uniforms.cameraNearFar.value = new s(this.renderCamera.near, this.renderCamera.far), + this.prepareMaskInstancedMaterial.uniforms.depthTexture.value = this.renderTargetDepthBuffer.texture, + this.prepareMaskInstancedMaterial.uniforms.textureMatrix.value = this.textureMatrix, + A.setRenderTarget(this.renderTargetMaskBuffer), + A.render(this.renderScene, this.renderCamera), + this.renderScene.overrideMaterial = null, + this.adjustVisibility(!0), + this.changeInstanceVisibilityOfNonSelectedObjects(!0), + this.restoreVisibilityOfObjects(), + this.quad.material = this.materialCopy, + this.copyUniforms.tDiffuse.value = this.renderTargetMaskBuffer.texture, + A.setRenderTarget(this.renderTargetMaskDownSampleBuffer), + A.clear(), + A.render(this.scene, this.camera), + this.quad.material = this.edgeDetectionMaterial, + this.edgeDetectionMaterial.uniforms.maskTexture.value = this.renderTargetMaskDownSampleBuffer.texture, + this.edgeDetectionMaterial.uniforms.texSize.value = new s(this.renderTargetMaskDownSampleBuffer.width, this.renderTargetMaskDownSampleBuffer.height), + this.edgeDetectionMaterial.uniforms.edgeColor.value = this.edgeColor, + this.edgeDetectionMaterial.uniforms.edgeLength.value = this.edgeLength, + A.setRenderTarget(this.renderTargetEdgeBuffer), + A.clear(), + A.render(this.scene, this.camera), + this.quad.material = this.overlayMaterial, + this.overlayMaterial.uniforms.colorTexture.value = t.texture, + this.overlayMaterial.uniforms.outlineTexture.value = this.renderTargetEdgeBuffer.texture, + A.setRenderTarget(this.renderTargetColorBuffer), + A.clear(), + A.render(this.scene, this.camera), + this.quad.material = this.materialCopy, + this.copyUniforms.tDiffuse.value = this.renderTargetColorBuffer.texture, + o && A.state.buffers.stencil.setTest(!0), + A.setRenderTarget(t), + A.clear(), + this.adjustVisibilityOfObjectsWithoutOutline(!0), + A.render(this.scene, this.camera), + A.setClearColor(this.oldClearColor, this.oldClearAlpha), + A.autoClear = n + }, + Ey.prototype.getPrepareMaskMaterial = function () { + return new Pe({ + uniforms: { + depthTexture: { + value: null + }, + cameraNearFar: { + value: new s(.5, .5) + }, + textureMatrix: { + value: new M + } + }, + vertexShader: "varying vec2 vUv;\n\t\t\t\tvarying vec4 projTexCoord;\n\t\t\t\tvarying vec4 vPosition;\n\t\t\t\tuniform mat4 textureMatrix;\n\t\t\t\tvoid main() {\n\t\t\t\t\tvUv = uv;\n\t\t\t\t\tvPosition = modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t\tvec4 worldPosition = modelMatrix * vec4( position, 1.0 );\n\t\t\t\t\tprojTexCoord = textureMatrix * worldPosition;\n\t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t}", + fragmentShader: "\n #include \n\t\t\t\tvarying vec2 vUv;\n\t\t\t\tvarying vec4 vPosition;\n\t\t\t\tvarying vec4 projTexCoord;\n\t\t\t\tuniform sampler2D depthTexture;\n\t\t\t\tuniform vec2 cameraNearFar;\n\t\t\t\t\n\t\t\t\tfloat linearDepth(float depth)\n {\n float far = cameraNearFar.y;\n float near = cameraNearFar.x;\n return (2.0 * near) / (far + near - depth * (far - near));\n }\n\t\t\t\t\n\t\t\t\tvoid main() {\n\t\t\t\t\tfloat depth = unpackRGBAToDepth(texture2DProj( depthTexture, projTexCoord ));\t\t\t\t\t\n\t\t\t\t\tgl_FragColor = vec4(depth);\n\t\t\t\t}" + }) + }, + Ey.prototype.getPrepareMaskInstancedMaterial = function () { + return new Pe({ + uniforms: { + depthTexture: { + value: null + }, + cameraNearFar: { + value: new s(.5, .5) + }, + textureMatrix: { + value: new M + } + }, + vertexShader: "\n attribute float vState; \n attribute vec4 aColor; \n attribute vec3 mcol0;\n attribute vec3 mcol1;\n attribute vec3 mcol2;\n attribute vec3 mcol3;\n #if defined(USE_MAP)\n attribute vec2 muvCol0;\n attribute vec2 muvCol1;\n attribute vec2 muvCol2;\n #endif\n \n varying float vfState;\n varying vec2 vUv;\n\t\t\t\tvarying vec4 projTexCoord;\n\t\t\t\tvarying vec4 vPosition;\n\t\t\t\tuniform mat4 textureMatrix;\n\t\t\t\t\n\t\t\t\tvec3 getInstancePosition(vec3 position) {\n return vec3(mat4(vec4(mcol0, 0.0),\n vec4(mcol1, 0.0),\n vec4(mcol2, 0.0),\n vec4(mcol3, 1.0)) * vec4(position, 1.0));\n }\n \n vec2 getInstanceUV(vec2 uv) {\n \n #if defined(USE_MAP)\n return vec2(mat3(vec3(muvCol0, 0.0),\n vec3(muvCol1, 0.0), \n vec3(muvCol2, 1.0)) * vec3(uv, 1.0));\n #else\n return uv;\n #endif \n \n }\n \n\t\t\t\tvoid main() {\n\t\t\t\t vfState = vState;\n\t\t\t\t\tvUv = uv;\n\t\t\t\t\tvPosition = vec4(getInstancePosition(position), 1.0);\n\t\t\t\t\tvec4 worldPosition = modelMatrix * vPosition;\n\t\t\t\t\tprojTexCoord = textureMatrix * worldPosition;\n\t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vPosition;\n\t\t\t\t}", + fragmentShader: "#include \n varying float vfState;\n varying vec2 vUv;\n varying vec4 vPosition;\n varying vec4 projTexCoord;\n uniform sampler2D depthTexture;\n uniform vec2 cameraNearFar;\n \n float linearDepth(float depth)\n {\n float far = cameraNearFar.y;\n float near = cameraNearFar.x;\n return (2.0 * near) / (far + near - depth * (far - near));\n }\n \n void main() {\n if (vfState <= -0.99 && vfState >= -1.01) discard;\n float depth = unpackRGBAToDepth(texture2DProj( depthTexture, projTexCoord ));\n gl_FragColor = vec4(depth);\n }" + }) + }, + Ey.prototype.getEdgeDetectionMaterial = function () { + return new Pe({ + uniforms: { + maskTexture: { + value: null + }, + texSize: { + value: new s(.5, .5) + }, + edgeColor: { + value: new p(1, 1, 1, 1) + }, + edgeLength: { + value: 2 + } + }, + vertexShader: "\n varying vec2 vUv;\n\t\t\t\tvoid main() {\n\t\t\t\t\tvUv = uv;\n\t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t}", + fragmentShader: "\n varying vec2 vUv;\n\t\t\t\tuniform sampler2D maskTexture;\n\t\t\t\tuniform vec2 texSize;\n\t\t\t\tuniform vec4 edgeColor;\n uniform float edgeLength; \n \n void main(void)\n {\n float directions[3];\n directions[0] = -1.0;\n directions[1] = 0.0;\n directions[2] = 1.0;\n \n float scalars[3];\n scalars[0] = 3.0;\n scalars[1] = 10.0;\n scalars[2] = 3.0;\n \n float padx = 1.0 / texSize.x;\n float pady = 1.0 / texSize.y ; \n \n float edgeSize = 0.0; \n float horizEdge = 0.0;\n float vertEdge = 0.0; \n \n for (int i = 0; i < 3; ++i)\n {\n float dir = directions[i];\n float scale = scalars[i];\n \n horizEdge -= texture2D(maskTexture, vUv + vec2(-padx, dir * pady)).x * scale;\n horizEdge += texture2D(maskTexture, vUv + vec2(padx, dir * pady)).x * scale;\n \n vertEdge -= texture2D(maskTexture, vUv + vec2(dir * padx, -pady)).x * scale;\n vertEdge += texture2D(maskTexture, vUv + vec2(dir * padx, pady)).x * scale;\n } \n \n float len = sqrt(horizEdge * horizEdge + vertEdge * vertEdge); \n float alpha = len > edgeLength ? edgeColor.a : (texture2D(maskTexture, vUv).w > 0.1 ? 0.1 : 0.0);\n gl_FragColor = vec4(edgeColor.rgb, alpha);\n }" + }) + }, + Ey.prototype.getOverlayMaterial = function () { + return new Pe({ + uniforms: { + colorTexture: { + value: null + }, + outlineTexture: { + value: null + } + }, + vertexShader: "varying vec2 vUv;\n\t\t\t\tvoid main() {\n\t\t\t\t\tvUv = uv;\n\t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t}", + fragmentShader: "varying vec2 vUv;\n\t\t\t\tuniform sampler2D colorTexture;\n\t\t\t\tuniform sampler2D outlineTexture;\n\t\t\t\t\n\t\t\t\tvoid main() {\n\t\t\t\t\tvec4 outlineColor = texture2D(outlineTexture, vUv);\t\t\t\t\t\n\t\t\t\t\tgl_FragColor = mix(texture2D(colorTexture, vUv), outlineColor, outlineColor.a);\t\t\t\t\t\n\t\t\t\t}", + blending: 2, + depthTest: !1, + depthWrite: !1, + transparent: !0 + }) + }, + Ey.prototype.setOutlineEdgeColor = function (A) { + this.edgeColor.fromArray([A.r, A.g, A.b, A.opacity ? A.opacity : 1]) + }, + Ey.prototype.getOutlineEdgeColor = function (A) { + return (new Xh).fromArray(this.edgeColor.toArray()) + }; + var By = function (A) { + this.renderer = A, + this.composer = null, + this.renderPass = null, + this.outlinePass = null, + this.effectFXAA = null, + this.selectedObjectIds = [] + }; + By.prototype.destroy = function () { + this.renderer = null, + this.composer = null, + this.renderPass = null, + this.outlinePass = null, + this.effectFXAA = null, + this.selectedObjectIds = null + }, + By.prototype.init = function (A, e, t, i, o) { + this.composer = new Cy(this.renderer), + this.renderPass = new Iy(e, t), + this.composer.addPass(this.renderPass), + this.outlinePass = new Ey(new s(i, o), A, e, t), + this.composer.addPass(this.outlinePass), + this.effectFXAA = new uy(vy), + this.effectFXAA.uniforms.resolution.value.set(1 / i, 1 / o), + this.effectFXAA.renderToScreen = !0, + this.composer.addPass(this.effectFXAA) + }, + By.prototype.reinit = function (A, e, t, i, o, n) { + this.renderer = A, + this.composer = new Cy(this.renderer), + this.renderPass = this.renderPass || new Iy(t, i), + this.composer.addPass(this.renderPass), + this.outlinePass = this.outlinePass || new Ey(new s(o, n), e, t, i), + this.composer.addPass(this.outlinePass), + this.effectFXAA = this.effectFXAA || new uy(vy), + this.effectFXAA.uniforms.resolution.value.set(1 / o, 1 / n), + this.effectFXAA.renderToScreen = !0, + this.composer.addPass(this.effectFXAA) + }, + By.prototype.render = function () { + this.composer.render() + }, + By.prototype.setSize = function (A, e) { + this.composer.setSize(A, e), + this.effectFXAA.uniforms.resolution.value.set(1 / A, 1 / e) + }, + By.prototype.addSelectedId = function (A) { + this.selectedObjectIds.push(A) + }, + By.prototype.clearSelectedIds = function () { + this.selectedObjectIds.length = 0 + }, + By.prototype.setSelectedIds = function (A) { + if (this.outlinePass) { + this.clearSelectedIds(); + for (var e = 0, t = A.length; t > e; e += 1) + this.addSelectedId(A[e]); + this.outlinePass.selectedObjectIds = this.selectedObjectIds + } + }, + By.prototype.setOutlineEdgeColor = function (A) { + this.outlinePass.setOutlineEdgeColor(A) + }, + By.prototype.getOutlineEdgeColor = function () { + return this.outlinePass.getOutlineEdgeColor() + }; + var xy = function (A) { + jA.call(this, A), + this.type = "InstancedMeshBasicMaterial", + this.uniforms = it.basic.uniforms, + this.vertexShader = function (A) { + return A.replace("#include ", "\n vec4 mvPosition = modelViewMatrix * vec4(getInstancePosition(transformed), 1.0);\n gl_Position = projectionMatrix * mvPosition;\n ") + }(it.basic.vertexShader.replace("void main() {", "\n attribute float vState; \n attribute vec3 mcol0;\n attribute vec3 mcol1;\n attribute vec3 mcol2;\n attribute vec3 mcol3; \n varying float vfState;\n \n vec3 getInstancePosition(vec3 position) {\n return vec3(mat4(vec4(mcol0, 0.0),\n vec4(mcol1, 0.0),\n vec4(mcol2, 0.0),\n vec4(mcol3, 1.0)) * vec4(position, 1.0));\n }\n \n void main() {\n vfState = vState;\n ")), + this.fragmentShader = it.basic.fragmentShader.replace("void main() {", "\n varying float vfState; \n void main() {\n if (vfState <= -0.99 && vfState >= -1.01) discard;\n \n ") + }; + (xy.prototype = Object.create(jA.prototype)).constructor = xy; + var Sy = function (A) { + this.viewer = A; + var e = vc.SelectionColor.color; + this.wireframeMaterial = new jA({ + color: e, + opacity: 1, + transparent: !0, + blending: 5, + blendSrc: 201, + blendDst: 200, + blendEquation: 100 + }), + this.selectedMaterial = new jA({ + color: e, + opacity: .3, + transparent: !0 + }), + this.skinningWireframeMaterial = new jA({ + color: e, + opacity: 1, + transparent: !0, + blending: 5, + blendSrc: 201, + blendDst: 200, + blendEquation: 100, + skinning: !0 + }), + this.skinningSelectedMaterial = new jA({ + color: e, + opacity: .3, + transparent: !0, + skinning: !0 + }), + this.selectedLineMaterial = new YC({ + color: e, + opacity: 1, + transparent: !0, + linewidth: 2, + dashed: !1 + }), + this.instancedWireFrameMaterial = new xy({ + color: e, + opacity: 1, + transparent: !0, + blending: 5, + blendSrc: 201, + blendDst: 200, + blendEquation: 100 + }), + this.instancedSelectedMaterial = new xy({ + color: e, + opacity: .3, + transparent: !0 + }), + this.selectionScene = new Y, + this.selectionScene.autoUpdate = !1, + this.selectionObjectGroup = new ep, + this.selectionObjectGroup.name = "PickingObjectGroup", + this.selectionObjectGroup.matrixAutoUpdate = !1, + this.selectionScene.add(this.selectionObjectGroup), + this.lastSelectedUserIdMap = null, + this.lastSelectedUserIds = null + }; + Sy.prototype.destroy = function () { + this.wireframeMaterial.dispose(), + this.wireframeMaterial = null, + this.selectedMaterial.dispose(), + this.selectedMaterial = null, + this.skinningWireframeMaterial.dispose(), + this.skinningWireframeMaterial = null, + this.skinningSelectedMaterial.dispose(), + this.skinningSelectedMaterial = null, + this.selectedLineMaterial.dispose(), + this.selectedLineMaterial = null, + this.instancedWireFrameMaterial.dispose(), + this.instancedWireFrameMaterial = null, + this.instancedSelectedMaterial.dispose(), + this.instancedSelectedMaterial = null, + this.selectionObjectGroup.clear(), + this.selectionObjectGroup = null, + this.selectionScene = null, + this.lastSelectedUserIdMap = null, + this.lastSelectedUserIds = null, + this.viewer = null + }, + Sy.prototype.apply = function (A) { + var e = this.viewer, + t = e.getSelection(); + if (!t || !t.length) + return this._clearSelectedUserIdsCache(), + void this._clearMeshesFromScene(); + (A || this._isSelectionsChanged()) && (this._cacheSelectedUserIds(t), + this._updateScene(t)), + this._render(e.rendererManager.getRenderer(), e.camera) + }, + Sy.prototype._isSelectionsChanged = function () { + var A = this.lastSelectedUserIds; + if (!A) + return !0; + var e = this.viewer.getSelection(), + t = e.length; + if (t !== A.length) + return !0; + for (var i = !1, o = this.lastSelectedUserIdMap, n = t - 1; n >= 0; n -= 1) + if (!o[e[n]]) { + i = !0; + break + } + return i + }, + Sy.prototype._cacheSelectedUserIds = function (A) { + this.lastSelectedUserIds = A.slice(0), + this.lastSelectedUserIdMap = uh.arrayToMap(A) + }, + Sy.prototype._clearSelectedUserIdsCache = function () { + this.lastSelectedUserIds = null, + this.lastSelectedUserIdMap = null + }, + Sy.prototype._render = function (A, e) { + var t = A.autoClearColor, + i = A.autoClearDepth, + o = A.autoClearStencil; + A.autoClearColor = !1, + A.autoClearDepth = !0, + A.autoClearStencil = !1, + A.render(this.selectionScene, e), + A.autoClearColor = t, + A.autoClearDepth = i, + A.autoClearStencil = o + }, + Sy.prototype._updateScene = function (A) { + this._clearMeshesFromScene(), + this._addMeshesToScene(this._getSelectedMeshes(A)), + this._updateMatrixWorldForScene(), + this._updateSelectedLineMaterial() + }, + Sy.prototype._clearMeshesFromScene = function () { + this.selectionObjectGroup.clear() + }, + Sy.prototype._addMeshesToScene = function (A) { + for (var e = 0, t = A.length; t > e; e += 1) + this.selectionObjectGroup.add(A[e]) + }, + Sy.prototype._updateMatrixWorldForScene = function () { + this.selectionObjectGroup.matrix.copy(this.viewer.getScene().getMatrixGlobal()), + this.selectionObjectGroup.updateMatrixWorld(!0) + }, + Sy.prototype._getSelectedMeshes = function (A) { + var e = { + meshes: [] + }, + t = this, + i = uh.arrayToMap(A); + return this.viewer.getModelManager().traverseLoadedModels((function (o) { + o.getPickingMeshes(t, e, A, i) + })), + e.meshes + }, + Sy.prototype._updateSelectedLineMaterial = function () { + vc.PickingLineWidthEnabled && this.selectedLineMaterial.resolution.set(this.viewer.domElement.offsetWidth, this.viewer.domElement.offsetHeight) + }, + Sy.prototype.setSelectionColor = function (A, e) { + var t = this.selectedMaterial.opacity; + e = void 0 === e ? t : e, + "0x" + this.selectedMaterial.color.getHexString() === A && t === e || (this.selectedMaterial.color.setHex(A), + this.skinningSelectedMaterial.color.setHex(A), + this.instancedSelectedMaterial.color.setHex(A), + void 0 === e && null === e || (this.selectedMaterial.opacity = e, + this.skinningSelectedMaterial.opacity = e, + this.instancedSelectedMaterial.opacity = e, + 1 > e ? (this.selectedMaterial.transparent = !0, + this.skinningSelectedMaterial.transparent = !0, + this.instancedSelectedMaterial.transparent = !0) : (this.selectedMaterial.transparent = !1, + this.skinningSelectedMaterial.transparent = !1, + this.instancedSelectedMaterial.transparent = !1)), + this.selectedMaterial.needsUpdate = !0, + this.skinningSelectedMaterial.needsUpdate = !0, + this.instancedSelectedMaterial.needsUpdate = !0) + }, + Sy.prototype.getSelectionColor = function (A, e) { + var t = this.selectedMaterial.opacity; + return new Xh(this.selectedMaterial.color.getHex(), t) + }, + Sy.prototype.setLineSelectionColor = function (A, e) { + var t = this.wireframeMaterial.opacity; + e = void 0 === e ? t : e, + "0x" + this.wireframeMaterial.color.getHexString() === A && t === e || (this.wireframeMaterial.color.setHex(A), + this.skinningWireframeMaterial.color.setHex(A), + this.selectedLineMaterial.color.setHex(A), + this.instancedWireFrameMaterial.color.setHex(A), + void 0 === e && null === e || (this.wireframeMaterial.opacity = e, + this.skinningWireframeMaterial.opacity = e, + this.selectedLineMaterial.opacity = e, + this.instancedWireFrameMaterial.opacity = e, + 1 > e ? (this.wireframeMaterial.transparent = !0, + this.skinningWireframeMaterial.transparent = !0, + this.selectedLineMaterial.transparent = !0, + this.instancedWireFrameMaterial.transparent = !0) : (this.wireframeMaterial.transparent = !1, + this.skinningWireframeMaterial.transparent = !1, + this.selectedLineMaterial.transparent = !1, + this.instancedWireFrameMaterial.transparent = !1)), + this.wireframeMaterial.needsUpdate = !0, + this.skinningWireframeMaterial.needsUpdate = !0, + this.selectedLineMaterial.needsUpdate = !0, + this.instancedWireFrameMaterial.needsUpdate = !0) + }, + Sy.prototype.getLineSelectionColor = function () { + var A = this.wireframeMaterial.opacity; + return new Xh(this.wireframeMaterial.color.getHex(), A) + }; + var wy = new M, + My = function () { + function A(e) { + cc(this, A), + e = e || {}, + this.vertices = { + near: [new y, new y, new y, new y], + far: [new y, new y, new y, new y] + }, + void 0 !== e.projectionMatrix && this.setFromProjectionMatrix(e.projectionMatrix, e.maxFar || 1e4) + } + return dc(A, [{ + key: "setFromProjectionMatrix", + value: function (A, e) { + var t = 0 === A.elements[11]; + return wy.getInverse(A), + this.vertices.near[0].set(1, 1, -1), + this.vertices.near[1].set(1, -1, -1), + this.vertices.near[2].set(-1, -1, -1), + this.vertices.near[3].set(-1, 1, -1), + this.vertices.near.forEach((function (A) { + A.applyMatrix4(wy) + })), + this.vertices.far[0].set(1, 1, 1), + this.vertices.far[1].set(1, -1, 1), + this.vertices.far[2].set(-1, -1, 1), + this.vertices.far[3].set(-1, 1, 1), + this.vertices.far.forEach((function (A) { + A.applyMatrix4(wy); + var i = Math.abs(A.z); + t ? A.z *= Math.min(e / i, 1) : A.multiplyScalar(Math.min(e / i, 1)) + })), + this.vertices + } + }, { + key: "split", + value: function (e, t) { + for (; e.length > t.length;) + t.push(new A); + t.length = e.length; + for (var i = 0; e.length > i; i += 1) { + var o = t[i]; + if (0 === i) + for (var n = 0; 4 > n; n += 1) + o.vertices.near[n].copy(this.vertices.near[n]); + else + for (var r = 0; 4 > r; r += 1) + o.vertices.near[r].lerpVectors(this.vertices.near[r], this.vertices.far[r], e[i - 1]); + if (i === e - 1) + for (var a = 0; 4 > a; a += 1) + o.vertices.far[a].copy(this.vertices.far[a]); + else + for (var s = 0; 4 > s; s += 1) + o.vertices.far[s].lerpVectors(this.vertices.near[s], this.vertices.far[s], e[i]) + } + } + }, { + key: "toSpace", + value: function (A, e) { + for (var t = 0; 4 > t; t += 1) + e.vertices.near[t].copy(this.vertices.near[t]).applyMatrix4(A), + e.vertices.far[t].copy(this.vertices.far[t]).applyMatrix4(A) + } + }]), + A + }(), + by = { + lights_fragment_begin: "\nGeometricContext geometry;\n\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n\n#ifdef CLEARCOAT\n\n\tgeometry.clearcoatNormal = clearcoatNormal;\n\n#endif\n\nIncidentLight directLight;\n\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\n\t\tpointLight = pointLights[ i ];\n\n\t\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\n\t}\n\n#endif\n\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\n\tSpotLight spotLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\n\t\tspotLight = spotLights[ i ];\n\n\t\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\n\t}\n\n#endif\n\n#if ( NUM_DIR_LIGHTS > 0) && defined( RE_Direct ) && defined( USE_CSM ) && defined( CSM_CASCADES )\n\n\tDirectionalLight directionalLight;\n\tfloat linearDepth = (vViewPosition.z) / (shadowFar - cameraNear);\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\n\t#if defined( USE_SHADOWMAP ) && defined( CSM_FADE )\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\n\t\t// NOTE: Depth gets larger away from the camera.\n\t\t// cascade.x is closer, cascade.y is further\n\t\tvec2 cascade = CSM_cascades[ i ];\n\t\tfloat cascadeCenter = ( cascade.x + cascade.y ) / 2.0;\n\t\tfloat closestEdge = linearDepth < cascadeCenter ? cascade.x : cascade.y;\n\t\tfloat margin = 0.25 * pow( closestEdge, 2.0 );\n\t\tfloat csmx = cascade.x - margin / 2.0;\n\t\tfloat csmy = cascade.y + margin / 2.0;\n\t\tif( i < NUM_DIR_LIGHT_SHADOWS && linearDepth >= csmx && ( linearDepth < csmy || i == CSM_CASCADES - 1 ) ) {\n\n\t\t\tfloat dist = min( linearDepth - csmx, csmy - linearDepth );\n\t\t\tfloat ratio = clamp( dist / margin, 0.0, 1.0 );\n\t\t\tif( i < NUM_DIR_LIGHT_SHADOWS ) {\n\n\t\t\t\tvec3 prevColor = directLight.color;\n\t\t\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\t\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\n\t\t\t\tbool shouldFadeLastCascade = i == CSM_CASCADES - 1 && linearDepth > cascadeCenter;\n\t\t\t\tdirectLight.color = mix( prevColor, directLight.color, shouldFadeLastCascade ? ratio : 1.0 );\n\n\t\t\t}\n\n\t\t\tReflectedLight prevLight = reflectedLight;\n\t\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\n\t\t\tbool shouldBlend = i != CSM_CASCADES - 1 || i == CSM_CASCADES - 1 && linearDepth < cascadeCenter;\n\t\t\tfloat blendRatio = shouldBlend ? ratio : 1.0;\n\n\t\t\treflectedLight.directDiffuse = mix( prevLight.directDiffuse, reflectedLight.directDiffuse, blendRatio );\n\t\t\treflectedLight.directSpecular = mix( prevLight.directSpecular, reflectedLight.directSpecular, blendRatio );\n\t\t\treflectedLight.indirectDiffuse = mix( prevLight.indirectDiffuse, reflectedLight.indirectDiffuse, blendRatio );\n\t\t\treflectedLight.indirectSpecular = mix( prevLight.indirectSpecular, reflectedLight.indirectSpecular, blendRatio );\n\n\t\t}\n\n\t}\n\t#else\n\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tif(linearDepth >= CSM_cascades[UNROLLED_LOOP_INDEX].x && linearDepth < CSM_cascades[UNROLLED_LOOP_INDEX].y) directLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\n\t\t#endif\n\n\t\tif(linearDepth >= CSM_cascades[UNROLLED_LOOP_INDEX].x && (linearDepth < CSM_cascades[UNROLLED_LOOP_INDEX].y || UNROLLED_LOOP_INDEX == CSM_CASCADES - 1)) RE_Direct( directLight, geometry, material, reflectedLight );\n\n\t}\n\n\t#endif\n\n#endif\n\n\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct ) && !defined( USE_CSM ) && !defined( CSM_CASCADES )\n\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\n\t\tdirectionalLight = directionalLights[ i ];\n\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\n\t}\n\n#endif\n\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\n\tRectAreaLight rectAreaLight;\n\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\n\t}\n\n#endif\n\n#if defined( RE_IndirectDiffuse )\n\n\tvec3 iblIrradiance = vec3( 0.0 );\n\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\n\tirradiance += getLightProbeIrradiance( lightProbe, geometry );\n\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\n\t\t#pragma unroll_loop\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\n\t\t}\n\n\t#endif\n\n#endif\n\n#if defined( RE_IndirectSpecular )\n\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n\n#endif\n", + lights_pars_begin: "\n#if defined( USE_CSM ) && defined( CSM_CASCADES )\nuniform vec2 CSM_cascades[CSM_CASCADES];\nuniform float cameraNear;\nuniform float shadowFar;\n#endif\n\t" + tt.lights_pars_begin + }, + Uy = new M, + Fy = new My, + Ky = new My, + Qy = new y, + Ry = new aA, + Ty = [], + ky = [], + Dy = function () { + function A(e) { + cc(this, A), + this.camera = (e = e || {}).camera, + this.parent = e.parent, + this.cascades = e.cascades || 3, + this.maxFar = e.maxFar || 1e5, + this.mode = e.mode || "practical", + this.shadowMapSize = e.shadowMapSize || 2048, + this.shadowBias = e.shadowBias || 1e-6, + this.lightDirection = e.lightDirection || new y(1, -1, 1).normalize(), + this.lightIntensity = e.lightIntensity || 1, + this.lightNear = e.lightNear || 1, + this.lightFar = e.lightFar || 2e3, + this.lightMargin = e.lightMargin || 200, + this.customSplitsCallback = e.customSplitsCallback, + this.fade = !1, + this.mainFrustum = new My, + this.frustums = [], + this.breaks = [], + this.lights = [], + this.shaders = new Map, + this.createLights(), + this.getBreaks(), + this.initCascades(), + this.injectInclude() + } + return dc(A, [{ + key: "createLights", + value: function () { + for (var A = 0; this.cascades > A; A++) { + var e = new Ra(16777215, this.lightIntensity); + e.castShadow = !0, + e.intensity = .72, + e.distance = 300, + e.color.setHex(14800580), + e.position.set(-100, 100, 160), + e.shadow.mapSize.width = this.shadowMapSize, + e.shadow.mapSize.height = this.shadowMapSize, + e.shadow.camera.near = this.lightNear, + e.shadow.camera.far = this.lightFar, + e.shadow.bias = this.shadowBias, + e.updateMatrixWorld(), + this.parent.add(e), + this.parent.add(e.target), + this.lights.push(e) + } + } + }, { + key: "initCascades", + value: function () { + var A = this.camera; + A.updateProjectionMatrix(), + this.mainFrustum.setFromProjectionMatrix(A.projectionMatrix, this.maxFar), + this.mainFrustum.split(this.breaks, this.frustums) + } + }, { + key: "getBreaks", + value: function () { + var A = this.camera, + e = Math.min(A.far, this.maxFar); + switch (this.breaks.length = 0, + this.mode) { + case "uniform": + t(this.cascades, A.near, e, this.breaks); + break; + case "logarithmic": + i(this.cascades, A.near, e, this.breaks); + break; + case "practical": + ! function (A, e, o, n, r) { + Ty.length = 0, + ky.length = 0, + i(A, e, o, ky), + t(A, e, o, Ty); + for (var s = 1; A > s; s++) + r.push(a.lerp(Ty[s - 1], ky[s - 1], n)); + r.push(1) + }(this.cascades, A.near, e, .5, this.breaks); + break; + case "custom": + void 0 === this.customSplitsCallback && console.error("CSM: Custom split scheme callback not defined."), + this.customSplitsCallback(this.cascades, A.near, e, this.breaks) + } + + function t(A, e, t, i) { + for (var o = 1; A > o; o++) + i.push((e + (t - e) * o / A) / t); + i.push(1) + } + + function i(A, e, t, i) { + for (var o = 1; A > o; o++) + i.push(e * (t / e) * (o / A) / t); + i.push(1) + } + } + }, { + key: "update", + value: function (A) { + for (var e = this.frustums, t = 0; e.length > t; t++) { + var i = this.lights[t]; + i.shadow.camera.updateMatrixWorld(!0), + Uy.multiplyMatrices(i.shadow.camera.matrixWorldInverse, A), + e[t].toSpace(Uy, Fy); + var o = Fy.vertices.near, + n = Fy.vertices.far, + r = n[0], + a = void 0; + a = r.distanceTo(n[2]) > r.distanceTo(o[2]) ? n[2] : o[2]; + var s = r.distanceTo(a); + Ry.makeEmpty(); + for (var l = 0; 4 > l; l++) + Ry.expandByPoint(o[l]), + Ry.expandByPoint(n[l]); + if (this.fade) { + var c = this.camera, + h = Math.max(c.far, this.maxFar); + s += .25 * Math.pow(e[t].vertices.far[0].z / (h - c.near), 2) * (h - c.near) + } + var d = s / this.shadowMapSize; + Ry.getCenter(Qy), + Qy.z = Ry.max.z + this.lightMargin, + Qy.x = Math.floor(Qy.x / d) * d, + Qy.y = Math.floor(Qy.y / d) * d, + Qy.applyMatrix4(i.shadow.camera.matrixWorld), + i.shadow.camera.left = -s / 2, + i.shadow.camera.right = s / 2, + i.shadow.camera.top = s / 2, + i.shadow.camera.bottom = -s / 2, + i.position.copy(Qy), + i.target.position.copy(Qy), + i.target.position.x += this.lightDirection.x, + i.target.position.y += this.lightDirection.y, + i.target.position.z += this.lightDirection.z, + i.shadow.camera.updateProjectionMatrix(), + i.shadow.camera.updateMatrixWorld() + } + } + }, { + key: "injectInclude", + value: function () { + tt.lights_fragment_begin = by.lights_fragment_begin, + tt.lights_pars_begin = by.lights_pars_begin + } + }, { + key: "setupMaterial", + value: function (A) { + A.defines = A.defines || {}, + A.defines.USE_CSM = 1, + A.defines.CSM_CASCADES = this.cascades, + this.fade && (A.defines.CSM_FADE = ""); + var e = [], + t = this, + i = this.shaders; + A.onBeforeCompile = function (o) { + var n = Math.min(t.camera.far, t.maxFar); + t.getExtendedBreaks(e), + console.log("www", e, e.length), + o.uniforms.CSM_cascades = { + value: e + }, + o.uniforms.cameraNear = { + value: t.camera.near + }, + o.uniforms.shadowFar = { + value: n + }, + i.set(A, o) + }, + i.set(A, null) + } + }, { + key: "updateUniforms", + value: function () { + var A = Math.min(this.camera.far, this.maxFar); + this.shaders.forEach((function (e, t) { + if (null !== e) { + var i = e.uniforms; + this.getExtendedBreaks(i.CSM_cascades.value), + i.cameraNear.value = this.camera.near, + i.shadowFar.value = A + }!this.fade && "CSM_FADE" in t.defines ? (delete t.defines.CSM_FADE, + t.needsUpdate = !0) : this.fade && !("CSM_FADE" in t.defines) && (t.defines.CSM_FADE = "", + t.needsUpdate = !0) + }), this) + } + }, { + key: "getExtendedBreaks", + value: function (A) { + for (; this.breaks.length > A.length;) + A.push(new s); + A.length = this.breaks.length; + for (var e = 0; this.cascades > e; e++) { + var t = this.breaks[e]; + A[e].x = this.breaks[e - 1] || 0, + A[e].y = t + } + } + }, { + key: "updateFrustums", + value: function () { + this.getBreaks(), + this.initCascades(), + this.updateUniforms() + } + }, { + key: "helper", + value: function (A) { + for (var e, t, i = new ko({ + color: 16777215 + }), o = new H, n = 0; this.frustums.length > n; n++) { + this.frustums[n].toSpace(A, Ky), + e = new he, + t = []; + for (var r = 0; 5 > r; r++) { + var a = Ky.vertices.near[4 === r ? 0 : r]; + t.push(a.x, a.y, a.z) + } + e.setAttribute("position", new YA(new Float32Array(t), 3)), + o.add(new Go(e, i)), + e = new he, + t = []; + for (var s = 0; 5 > s; s++) { + var l = Ky.vertices.far[4 === s ? 0 : s]; + t.push(l.x, l.y, l.z) + } + e.setAttribute("position", new YA(new Float32Array(t), 3)), + o.add(new Go(e, i)); + for (var c = 0; 4 > c; c++) { + e = new he; + var h = Ky.vertices.near[c], + d = Ky.vertices.far[c]; + (t = []).push(h.x, h.y, h.z), + t.push(d.x, d.y, d.z), + e.setAttribute("position", new YA(new Float32Array(t), 3)), + o.add(new Go(e, i)) + } + } + return o + } + }, { + key: "remove", + value: function () { + for (var A = 0; this.lights.length > A; A++) + this.parent.remove(this.lights[A]) + } + }, { + key: "dispose", + value: function () { + var A = this.shaders; + A.forEach((function (A, e) { + delete e.onBeforeCompile, + delete e.defines.USE_CSM, + delete e.defines.CSM_CASCADES, + delete e.defines.CSM_FADE, + delete A.uniforms.CSM_cascades, + delete A.uniforms.cameraNear, + delete A.uniforms.shadowFar, + e.needsUpdate = !0 + })), + A.clear() + } + }]), + A + }(), + Ly = function (A) { + this.viewer = A, + this.renderer = null, + this.countRenderRequest = 0, + this.maxCountRenderRequest = 1e4, + this.rendering = !1, + this.incrementRenderHandle = 0, + this.composer = null, + this.blinkHandle = 0, + this.transparentSort = function (A, e) { + return A.groupOrder !== e.groupOrder ? A.groupOrder - e.groupOrder : A.renderOrder !== e.renderOrder ? A.renderOrder - e.renderOrder : A.z !== e.z ? e.z - A.z : A.id - e.id + } + }; + Ly.prototype.destroy = function () { + this.incrementRenderHandle > 0 && cancelAnimationFrame(this.incrementRenderHandle), + this.blinkHandle > 0 && cancelAnimationFrame(this.blinkHandle), + this.composer && (this.composer.destroy(), + this.composer = null), + this.renderer && (this.renderer.destroy && this.orderedRenderer && (this.renderer.destroy(), + this.renderer.setRenderer && this.renderer.setRenderer(null), + this.orderedRenderer = null), + this.renderer.dispose(), + this.renderer.domElement.parentNode && this.renderer.domElement.parentNode.removeChild(this.renderer.domElement)), + this.renderer = null, + this.pickingEffecter && (this.pickingEffecter.destroy(), + this.pickingEffecter = null), + this.viewer = null + }, + Ly.prototype.setupRenderer = function (A) { + if (!this.renderer) { + var e = this.viewer; + this.renderer = new $i(A); + var t = e.domElement.offsetWidth, + i = e.domElement.offsetHeight; + this.renderer.toneMapping = 1, + this.renderer.setTransparentSort(this.transparentSort), + this.renderer.setClearColor(0, 0), + this.renderer.setPixelRatio(window.devicePixelRatio || 1), + this.renderer.setSize(t, i), + this.renderer.sortObjects = !0, + this.renderer.domElement.setAttribute("tabindex", "0"), + this.renderer.domElement.setAttribute("class", "main-canvas"), + e.domElement.appendChild(this.renderer.domElement), + this.composer = new By(this.renderer), + this.composer.init(e.modelManager, e.getScene(), e.camera, t, i), + this.composer.setOutlineEdgeColor(new Xh(vc.SelectionColor.color, vc.SelectionColor.opacity)) + } + }, + Ly.prototype.resetupRenderer = function (A) { + var e = this.viewer; + A.context = this.renderer.getContext(); + var t = new $i(A); + t.setClearColor(this.renderer.getClearColor(), this.renderer.getClearAlpha()), + t.setPixelRatio(this.renderer.getPixelRatio()); + var i = this.renderer.getSize(new s); + t.setSize(i.x, i.y), + t.gammaFactor = this.renderer.gammaFactor, + t.sortObjects = this.renderer.sortObjects, + t.domElement = this.renderer.domElement, + t.toneMapping = this.renderer.toneMapping, + t.shadowMap.enabled = this.renderer.shadowMap.enabled, + t.clippingPlanes = this.renderer.clippingPlanes, + t.shadowMap.enabled = this.renderer.shadowMap.enabled, + t.shadowMap.type = this.renderer.shadowMap.type, + t.shadowMap.autoUpdate = this.renderer.shadowMap.autoUpdate, + t.shadowMap.needsUpdate = this.renderer.shadowMap.needsUpdate, + t.setTransparentSort(this.transparentSort), + this.renderer = t, + this.composer.reinit(this.renderer, e.modelManager, e.getScene(), e.camera, i.x, i.y) + }, + Ly.prototype.setupShadowMap = function (A) { + var e = this.viewer, + t = new Dy({ + maxFar: A.far, + cascades: 4, + mode: A.mode, + parent: e.getScene().getExternalScene(), + shadowMapSize: 1024, + lightDirection: new y(A.lightX, A.lightY, A.lightZ).normalize(), + camera: e.camera + }); + this.csm = t; + var i = new $m; + i.add(A, "orthographic").onChange((function (A) {})), + i.add(A, "fade").onChange((function (A) { + t.fade = A, + t.updateFrustums() + })), + i.add(A, "far", 1, 5e7).step(1).name("shadow far").onChange((function (A) { + t.maxFar = A, + t.updateFrustums() + })), + i.add(A, "mode", ["uniform", "logarithmic", "practical"]).name("frustum split mode").onChange((function (A) { + t.mode = A, + t.updateFrustums() + })), + i.add(A, "lightX", -1, 1).name("light direction x").onChange((function (A) { + t.lightDirection.x = A + })), + i.add(A, "lightY", -1, 1).name("light direction y").onChange((function (A) { + t.lightDirection.y = A + })), + i.add(A, "lightZ", -1, 1).name("light direction z").onChange((function (A) { + t.lightDirection.z = A + })), + i.add(A, "margin", 0, 2e6).name("light margin").onChange((function (A) { + t.lightMargin = A + })), + i.add(A, "lightNear", 1, 1e7).name("light near").onChange((function (A) { + for (var e = 0; t.lights.length > e; e += 1) + t.lights[e].shadow.camera.near = A, + t.lights[e].shadow.camera.updateProjectionMatrix() + })), + i.add(A, "lightFar", 1, 1e8).name("light far").onChange((function (A) { + for (var e = 0; t.lights.length > e; e += 1) + t.lights[e].shadow.camera.far = A, + t.lights[e].shadow.camera.updateProjectionMatrix() + })) + }, + Ly.prototype._applyPickingEffectForIncrement = function () { + if (this.getPickingEffecter()) { + var A = this.viewer.modelManager.isFilterApplied(); + this.orderedRenderer.restart(), + this.orderedRenderer.setNonBreakingRender(!0), + this.pickingEffecter.apply(A), + this.orderedRenderer.setNonBreakingRender(!1) + } + }, + Ly.prototype._applyPickingEffect = function () { + if (this.getPickingEffecter()) { + var A = this.viewer.modelManager.isFilterApplied(); + this.pickingEffecter.apply(A) + } + }, + Ly.prototype._forceRenderOneFrame = function () { + var A = this.viewer, + e = A.camera, + t = A.modelManager.getScene(); + this.orderedRenderer ? (this.orderedRenderer.restart(), + this.orderedRenderer.setNonBreakingRender(!0), + this.renderer.render(t, e, null, !0), + this.orderedRenderer.setNonBreakingRender(!1)) : (this.renderer.setRenderTarget(null), + this.renderer.clear(), + this.renderer.render(t, e)) + }, + Ly.prototype.incrementRender = function (A) { + if (this.countRenderRequest += 1, + this.countRenderRequest > this.maxCountRenderRequest && (this.countRenderRequest = 0), + !this.rendering && !this.pickingEffectRendering) { + this.rendering = !0; + var e = this, + t = this.viewer, + i = t.camera, + o = t.modelManager, + n = t.editorManager, + r = t.getScene(), + a = this.renderer; + o.calculateCameraModelRelation(i.position), + t.cameraControl.updateCamera(), + t.calculateNearFar(), + r.updateLights(i); + var s = n.isUpdateRenderList; + a.resetIncrementRender(), + a.setObjectListUpdateState(s), + s && o.prepareScene(i), + this.incrementRenderHandle = requestAnimationFrame(function A(s, l) { + var c = s; + return function () { + a.autoClear = l, + n.cameraChange ? (a.resetIncrementRender(), + a.autoClear = !0, + n.cameraChange = !1) : a.autoClear = l, + a.render(r, i) || c !== e.countRenderRequest ? (e.rendering = !1, + c !== e.countRenderRequest ? t.render() : (e.pickingEffectRendering = !0, + e._applyPickingEffectForIncrement(), + o.setFilterApplied(!1), + t.onRenderFinishedCallback(), + o.disposeBufferAfterVbo(), + e.pickingEffectRendering = !1)) : e.incrementRenderHandle = requestAnimationFrame(A(c, !1)) + } + }(e.countRenderRequest, !0)), + t.onRenderCallback(), + t.cameraControl.setCameraChanging(!1) + } + }, + Ly.prototype.fullRender = function () { + var A = this, + e = this.viewer, + t = e.camera, + i = e.modelManager, + o = e.getScene(), + n = this.renderer; + this.blinkHandle > 0 && cancelAnimationFrame(this.blinkHandle), + function r() { + e.cameraControl.updateCamera(), + e.calculateNearFar(), + o.updateLights(t), + i.getBlinkEnabled() && i.updateBlinkMaterial(); + var a = o.fillClipPlane && o.fillClipPlane.visible, + s = o.clipPlanes && o.clipPlanes.visible && vc.EnableBoxClippingCaps; + if (vc.ClippingCaps && (a || s) && vc.EnableClippingCaps) { + if (a || s) { + var l = o.getFillClipPlane(), + c = o.getClipPlanes(), + h = e.modelManager.getModelKeys(); + i.prepareCapScene(), + n.clear(), + n.autoClear = !1, + a ? (l.capPlane.planeMesh.visible = !0, + l.capPlane.lineMesh.visible = !0, + c.boxMesh.visible = !1) : (l.capPlane.planeMesh.visible = !1, + l.capPlane.lineMesh.visible = !1, + c.boxMesh.visible = !0), + l.planeHighLightMatrial.visible = !1, + c.planeHighLightMatrial.visible = !1, + c.planeMaterial.visible = !1, + o.overrideMaterial = o.backMaterial; + for (var d = {}, p = 0, g = h.length; g > p; p += 1) { + var u = h[p], + f = e.modelManager.getModel(u); + if (d[u] = {}, + f) { + var m = f._getNodeGroup(gp.GEOMETRY, { + globalSpace: !0 + }); + d[u][gp.GEOMETRY] = m.visible, + m = f._getNodeGroup(gp.WIREFRAME, { + globalSpace: !0 + }), + d[u][gp.WIREFRAME] = m.visible, + m = f._getNodeGroup(gp.INSTANCEGEOMETRY, { + globalSpace: !0 + }), + d[u][gp.INSTANCEGEOMETRY] = m.visible, + m.visible = !1, + m = f._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { + globalSpace: !0 + }), + d[u][gp.INSTANCEWIREFRAMEGEOMETRY] = m.visible, + m.visible = !1 + } + } + n.render(o, t), + o.overrideMaterial = o.backInstanceMaterial; + for (var C = 0, y = h.length; y > C; C += 1) { + var v = h[C], + I = e.modelManager.getModel(v); + if (I) { + var E = I._getNodeGroup(gp.GEOMETRY, { + globalSpace: !0 + }); + E.visible = !1, + (E = I._getNodeGroup(gp.WIREFRAME, { + globalSpace: !0 + })).visible = !1, + (E = I._getNodeGroup(gp.INSTANCEGEOMETRY, { + globalSpace: !0 + })).visible = d[v][gp.INSTANCEGEOMETRY], + (E = I._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { + globalSpace: !0 + })).visible = d[v][gp.INSTANCEWIREFRAMEGEOMETRY] + } + } + n.render(o, t), + o.overrideMaterial = o.frontMaterial; + for (var B = 0, x = h.length; x > B; B += 1) { + var S = h[B], + w = e.modelManager.getModel(S); + if (w) { + var M = w._getNodeGroup(gp.GEOMETRY, { + globalSpace: !0 + }); + M.visible = d[S][gp.GEOMETRY], + (M = w._getNodeGroup(gp.WIREFRAME, { + globalSpace: !0 + })).visible = d[S][gp.WIREFRAME], + M = w._getNodeGroup(gp.INSTANCEGEOMETRY, { + globalSpace: !0 + }), + d[S][gp.INSTANCEGEOMETRY] = M.visible, + M.visible = !1, + M = w._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { + globalSpace: !0 + }), + d[S][gp.INSTANCEWIREFRAMEGEOMETRY] = M.visible, + M.visible = !1 + } + } + n.render(o, t), + o.overrideMaterial = o.frontInstanceMaterial; + for (var b = 0, U = h.length; U > b; b += 1) { + var F = h[b], + K = e.modelManager.getModel(F); + if (K) { + var Q = K._getNodeGroup(gp.GEOMETRY, { + globalSpace: !0 + }); + Q.visible = !1, + (Q = K._getNodeGroup(gp.WIREFRAME, { + globalSpace: !0 + })).visible = !1, + (Q = K._getNodeGroup(gp.INSTANCEGEOMETRY, { + globalSpace: !0 + })).visible = d[F][gp.INSTANCEGEOMETRY], + (Q = K._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { + globalSpace: !0 + })).visible = d[F][gp.INSTANCEWIREFRAMEGEOMETRY] + } + } + n.render(o, t), + n.render(i.capsScene, t), + o.overrideMaterial = null, + l.planeHighLightMatrial.visible = !0, + c.planeHighLightMatrial.visible = !0, + c.planeMaterial.visible = !0; + for (var R = 0, T = h.length; T > R; R += 1) { + var k = h[R], + D = e.modelManager.getModel(k); + if (D) { + var L = D._getNodeGroup(gp.GEOMETRY, { + globalSpace: !0 + }); + L.visible = d[k][gp.GEOMETRY], + (L = D._getNodeGroup(gp.WIREFRAME, { + globalSpace: !0 + })).visible = d[k][gp.WIREFRAME], + (L = D._getNodeGroup(gp.INSTANCEGEOMETRY, { + globalSpace: !0 + })).visible = d[k][gp.INSTANCEGEOMETRY], + (L = D._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { + globalSpace: !0 + })).visible = d[k][gp.INSTANCEWIREFRAMEGEOMETRY] + } + } + d = null, + n.render(o, t) + } + } else + !vc.PickingEffect && vc.EnableSelectionOutline && A.composer && e.getSelection().length > 0 ? A.composer.render() : (n.setRenderTarget(null), + n.clear(), + n.render(o, t)); + A._applyPickingEffect(), + i.setFilterApplied(!1), + e.onRenderListener(), + e.onRenderFinishedListener(), + e.cameraControl.isCameraChanging() && i.dispatchEvent({ + type: Rc.ON_CAMERA_CHANGED_AND_RENDERED + }), + e.cameraControl.setCameraChanging(!1), + i.getBlinkEnabled() && (A.blinkHandle = requestAnimationFrame(r)), + i.disposeBufferAfterVbo() + }() + }, + Ly.prototype.fillCavityRender = function (A) { + var e = this.viewer, + t = e.camera, + i = e.modelManager, + o = this.renderer, + n = e.getScene(); + + function r(A, e, t, i) { + var o = new Xi, + n = new jA; + n.depthWrite = !1, + n.depthTest = !1, + n.colorWrite = !1, + n.stencilWrite = !0, + n.stencilFunc = 519; + var r = n.clone(); + r.side = 1, + r.clippingPlanes = [e], + r.stencilFail = 34055, + r.stencilZFail = 34055, + r.stencilZPass = 34055; + var a = new Ue(A, r); + a.matrixWorld = i.matrixWorld, + a.renderOrder = t, + o.add(a); + var s = n.clone(); + s.side = 0, + s.clippingPlanes = [e], + s.stencilFail = 34056, + s.stencilZFail = 34056, + s.stencilZPass = 34056; + var l = new Ue(A, s); + return l.renderOrder = t, + l.matrixWorld = i.matrixWorld, + o.add(l), + o + } + this.blinkHandle > 0 && cancelAnimationFrame(this.blinkHandle), + function A() { + e.cameraControl.updateCamera(), + e.calculateNearFar(), + n.updateLights(t), + i.getBlinkEnabled() && i.updateBlinkMaterial(); + var a = n.fillClipPlane && n.fillClipPlane.visible, + s = n.clipPlanes && n.clipPlanes.visible, + l = o.autoClear, + c = o.sortObjects; + if (vc.ClippingCaps && (a || s)) { + if (a) { + var h = n.getFillClipPlane(), + d = n.getClipPlanes(), + p = e.modelManager.getModelKeys(); + i.prepareCapScene(), + o.clear(), + o.autoClear = !1, + a ? (h.capPlane.planeMesh.visible = !0, + h.capPlane.lineMesh.visible = !0, + d.boxMesh.visible = !1) : (h.capPlane.planeMesh.visible = !1, + h.capPlane.lineMesh.visible = !1, + d.boxMesh.visible = !0), + h.planeHighLightMatrial.visible = !1, + d.planeHighLightMatrial.visible = !1, + d.planeMaterial.visible = !1, + n.overrideMaterial = n.backMaterial; + for (var g = {}, u = 0, f = p.length; f > u; u += 1) { + var m = p[u], + C = e.modelManager.getModel(m); + if (g[m] = {}, + C) { + var y = C._getNodeGroup(gp.GEOMETRY, { + globalSpace: !0 + }); + g[m][gp.GEOMETRY] = y.visible, + y = C._getNodeGroup(gp.WIREFRAME, { + globalSpace: !0 + }), + g[m][gp.WIREFRAME] = y.visible, + y = C._getNodeGroup(gp.INSTANCEGEOMETRY, { + globalSpace: !0 + }), + g[m][gp.INSTANCEGEOMETRY] = y.visible, + y.visible = !1, + y = C._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { + globalSpace: !0 + }), + g[m][gp.INSTANCEWIREFRAMEGEOMETRY] = y.visible, + y.visible = !1 + } + } + o.render(n, t), + n.overrideMaterial = n.backInstanceMaterial; + for (var v = 0, I = p.length; I > v; v += 1) { + var E = p[v], + B = e.modelManager.getModel(E); + if (B) { + var x = B._getNodeGroup(gp.GEOMETRY, { + globalSpace: !0 + }); + x.visible = !1, + (x = B._getNodeGroup(gp.WIREFRAME, { + globalSpace: !0 + })).visible = !1, + (x = B._getNodeGroup(gp.INSTANCEGEOMETRY, { + globalSpace: !0 + })).visible = g[E][gp.INSTANCEGEOMETRY], + (x = B._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { + globalSpace: !0 + })).visible = g[E][gp.INSTANCEWIREFRAMEGEOMETRY] + } + } + o.render(n, t), + n.overrideMaterial = n.frontMaterial; + for (var S = 0, w = p.length; w > S; S += 1) { + var M = p[S], + b = e.modelManager.getModel(M); + if (b) { + var U = b._getNodeGroup(gp.GEOMETRY, { + globalSpace: !0 + }); + U.visible = g[M][gp.GEOMETRY], + (U = b._getNodeGroup(gp.WIREFRAME, { + globalSpace: !0 + })).visible = g[M][gp.WIREFRAME], + U = b._getNodeGroup(gp.INSTANCEGEOMETRY, { + globalSpace: !0 + }), + g[M][gp.INSTANCEGEOMETRY] = U.visible, + U.visible = !1, + U = b._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { + globalSpace: !0 + }), + g[M][gp.INSTANCEWIREFRAMEGEOMETRY] = U.visible, + U.visible = !1 + } + } + o.render(n, t), + n.overrideMaterial = n.frontInstanceMaterial; + for (var F = 0, K = p.length; K > F; F += 1) { + var Q = p[F], + R = e.modelManager.getModel(Q); + if (R) { + var T = R._getNodeGroup(gp.GEOMETRY, { + globalSpace: !0 + }); + T.visible = !1, + (T = R._getNodeGroup(gp.WIREFRAME, { + globalSpace: !0 + })).visible = !1, + (T = R._getNodeGroup(gp.INSTANCEGEOMETRY, { + globalSpace: !0 + })).visible = g[Q][gp.INSTANCEGEOMETRY], + (T = R._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { + globalSpace: !0 + })).visible = g[Q][gp.INSTANCEWIREFRAMEGEOMETRY] + } + } + o.render(n, t), + o.render(i.capsScene, t), + n.overrideMaterial = null, + a ? h.planeHighLightMatrial.visible = !0 : (d.planeHighLightMatrial.visible = !0, + d.planeMaterial.visible = !0); + for (var k = 0, D = p.length; D > k; k += 1) { + var L = p[k], + N = e.modelManager.getModel(L); + if (N) { + var O = N._getNodeGroup(gp.GEOMETRY, { + globalSpace: !0 + }); + O.visible = g[L][gp.GEOMETRY], + (O = N._getNodeGroup(gp.WIREFRAME, { + globalSpace: !0 + })).visible = g[L][gp.WIREFRAME], + (O = N._getNodeGroup(gp.INSTANCEGEOMETRY, { + globalSpace: !0 + })).visible = g[L][gp.INSTANCEGEOMETRY], + (O = N._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { + globalSpace: !0 + })).visible = g[L][gp.INSTANCEWIREFRAMEGEOMETRY] + } + } + g = null, + o.render(n, t) + } + if (s) { + o.clear(), + o.autoClear = !1, + o.sortObjects = !0, + o.localClippingEnabled = !0; + var V = e.modelManager.getModelKeys(), + G = o.clippingPlanes; + o.clippingPlanes = []; + var P = n.getClipPlanes(), + q = new Y; + q.autoUpdate = !1; + for (var j = 0, H = n.lightArray.length; H > j; j += 1) + q.add(n.lightArray[j].clone()); + for (var W = [], J = 0; 6 > J; J += 1) + W[J] = P.children[J].clone(); + for (var z = 0, Z = V.length; Z > z; z += 1) { + var X = e.modelManager.getModel(V[z]); + if (X) + for (var _ = X._getNodeGroup(gp.GEOMETRY, { + globalSpace: !0 + }), $ = 0, AA = _.children.length; AA > $; $ += 1) { + var eA = new Xi; + eA.name = "object"; + var tA = [], + iA = []; + q.add(eA); + var oA = _.children[$]; + if (oA.visible) { + for (var nA = oA.geometry, rA = [], aA = 0; 6 > aA; aA += 1) + rA[aA] = G[aA].clone(); + for (var sA = function (A) { + (cA = new Xi).name = "poGroup"; + var e = rA[A]; + (hA = r(nA, e, A + 1, oA)).name = "stencilGroup", + dA = new yr({ + color: oA.material[0].color, + metalness: .1, + roughness: .75, + clippingPlanes: rA.filter((function (A) { + return A !== e + })), + stencilWrite: !0, + stencilRef: 0, + stencilFunc: 517, + stencilFail: 7681, + stencilZFail: 7681, + stencilZPass: 7681 + }); + var t = W[A].clone(); + t.material = dA, + t.testNumber = A, + t.onAfterRender = function () { + o.clearStencil() + }, + t.renderOrder = A + 1.1, + eA.add(hA), + cA.add(t), + tA.push(t), + q.add(cA), + iA.push(cA) + }, lA = 0; 6 > lA; lA += 1) { + var cA, hA, dA; + sA(lA) + } + for (var pA = oA.clone(), gA = 0, uA = pA.material.length; uA > gA; gA += 1) + pA.material[gA].clippingPlanes = rA; + pA.renderOrder = 6, + eA.add(pA), + o.render(q, t), + q.remove(eA); + for (var fA = 0, mA = iA.length; mA > fA; fA += 1) + q.remove(iA[fA]); + tA = null + } + } + } + o.sortObjects = c, + o.clippingPlanes = G, + o.autoClear = l, + o.localClippingEnabled = !1 + } + } else + vc.EnableSelectionOutline && e.composer && e.getSelection().length > 0 ? e.composer.render() : (o.setRenderTarget(null), + o.clear(), + o.render(n, t)); + e.onRenderListener(), + e.onRenderFinishedListener(), + e.cameraControl.setCameraChanging(!1), + i.getBlinkEnabled() && (e.blinkHandle = requestAnimationFrame(A)), + i.disposeBufferAfterVbo() + }() + }, + Ly.prototype.fillCavityRender2 = function (A) { + var e = this.viewer, + t = e.camera, + i = e.modelManager, + o = this.renderer, + n = e.getScene(); + this.blinkHandle > 0 && cancelAnimationFrame(this.blinkHandle), + function A() { + e.cameraControl.updateCamera(), + e.calculateNearFar(), + n.updateLights(t), + i.getBlinkEnabled() && i.updateBlinkMaterial(); + var r = n.fillClipPlane && n.fillClipPlane.visible, + a = n.clipPlanes && n.clipPlanes.visible, + s = o.autoClear; + if (vc.ClippingCaps && (r || a)) { + if (r) { + var l = n.getFillClipPlane(), + c = n.getClipPlanes(), + h = e.modelManager.getModelKeys(); + i.prepareCapScene(), + o.clear(), + o.autoClear = !1, + r ? (l.capPlane.planeMesh.visible = !0, + l.capPlane.lineMesh.visible = !0, + c.boxMesh.visible = !1) : (l.capPlane.planeMesh.visible = !1, + l.capPlane.lineMesh.visible = !1, + c.boxMesh.visible = !0), + l.planeHighLightMatrial.visible = !1, + c.planeHighLightMatrial.visible = !1, + c.planeMaterial.visible = !1, + n.overrideMaterial = n.backMaterial; + for (var d = {}, p = 0, g = h.length; g > p; p += 1) { + var u = h[p], + f = e.modelManager.getModel(u); + if (d[u] = {}, + f) { + var m = f._getNodeGroup(gp.GEOMETRY, { + globalSpace: !0 + }); + d[u][gp.GEOMETRY] = m.visible, + m = f._getNodeGroup(gp.WIREFRAME, { + globalSpace: !0 + }), + d[u][gp.WIREFRAME] = m.visible, + m = f._getNodeGroup(gp.INSTANCEGEOMETRY, { + globalSpace: !0 + }), + d[u][gp.INSTANCEGEOMETRY] = m.visible, + m.visible = !1, + m = f._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { + globalSpace: !0 + }), + d[u][gp.INSTANCEWIREFRAMEGEOMETRY] = m.visible, + m.visible = !1 + } + } + o.render(n, t), + n.overrideMaterial = n.backInstanceMaterial; + for (var C = 0, y = h.length; y > C; C += 1) { + var v = h[C], + I = e.modelManager.getModel(v); + if (I) { + var E = I._getNodeGroup(gp.GEOMETRY, { + globalSpace: !0 + }); + E.visible = !1, + (E = I._getNodeGroup(gp.WIREFRAME, { + globalSpace: !0 + })).visible = !1, + (E = I._getNodeGroup(gp.INSTANCEGEOMETRY, { + globalSpace: !0 + })).visible = d[v][gp.INSTANCEGEOMETRY], + (E = I._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { + globalSpace: !0 + })).visible = d[v][gp.INSTANCEWIREFRAMEGEOMETRY] + } + } + o.render(n, t), + n.overrideMaterial = n.frontMaterial; + for (var B = 0, x = h.length; x > B; B += 1) { + var S = h[B], + w = e.modelManager.getModel(S); + if (w) { + var M = w._getNodeGroup(gp.GEOMETRY, { + globalSpace: !0 + }); + M.visible = d[S][gp.GEOMETRY], + (M = w._getNodeGroup(gp.WIREFRAME, { + globalSpace: !0 + })).visible = d[S][gp.WIREFRAME], + M = w._getNodeGroup(gp.INSTANCEGEOMETRY, { + globalSpace: !0 + }), + d[S][gp.INSTANCEGEOMETRY] = M.visible, + M.visible = !1, + M = w._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { + globalSpace: !0 + }), + d[S][gp.INSTANCEWIREFRAMEGEOMETRY] = M.visible, + M.visible = !1 + } + } + o.render(n, t), + n.overrideMaterial = n.frontInstanceMaterial; + for (var b = 0, U = h.length; U > b; b += 1) { + var F = h[b], + K = e.modelManager.getModel(F); + if (K) { + var Q = K._getNodeGroup(gp.GEOMETRY, { + globalSpace: !0 + }); + Q.visible = !1, + (Q = K._getNodeGroup(gp.WIREFRAME, { + globalSpace: !0 + })).visible = !1, + (Q = K._getNodeGroup(gp.INSTANCEGEOMETRY, { + globalSpace: !0 + })).visible = d[F][gp.INSTANCEGEOMETRY], + (Q = K._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { + globalSpace: !0 + })).visible = d[F][gp.INSTANCEWIREFRAMEGEOMETRY] + } + } + o.render(n, t), + o.render(i.capsScene, t), + n.overrideMaterial = null, + r ? l.planeHighLightMatrial.visible = !0 : (c.planeHighLightMatrial.visible = !0, + c.planeMaterial.visible = !0); + for (var R = 0, T = h.length; T > R; R += 1) { + var k = h[R], + D = e.modelManager.getModel(k); + if (D) { + var L = D._getNodeGroup(gp.GEOMETRY, { + globalSpace: !0 + }); + L.visible = d[k][gp.GEOMETRY], + (L = D._getNodeGroup(gp.WIREFRAME, { + globalSpace: !0 + })).visible = d[k][gp.WIREFRAME], + (L = D._getNodeGroup(gp.INSTANCEGEOMETRY, { + globalSpace: !0 + })).visible = d[k][gp.INSTANCEGEOMETRY], + (L = D._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { + globalSpace: !0 + })).visible = d[k][gp.INSTANCEWIREFRAMEGEOMETRY] + } + } + d = null, + o.render(n, t) + } + if (a) { + o.clear(), + o.autoClear = !1; + for (var N = e.modelManager.getModelKeys(), O = o.clippingPlanes, V = o.tempPlanes || [], G = 0; 6 > G; G += 1) { + if (V[G]) { + if (V[G].equals(O[G])) + continue; + V[G] = O[G].clone() + } else + V[G] = O[G].clone(); + for (var P = 0, q = N.length; q > P; P += 1) { + var j = e.modelManager.getModel(N[P]); + if (j) { + var H = j._getNodeGroup(gp.GEOMETRY, { + globalSpace: !0 + }), + Y = j._getNodeGroup("sectionFill_" + G); + Y.clear(); + for (var W = 0, J = H.children.length; J > W; W += 1) { + var z = H.children[W]; + if (z.visible) { + var Z = V[G].clone().applyMatrix4(z.matrixWorld), + X = z.geometry; + if (X.boundingBox || X.computeBoundingBox(), + X.boundingBox.intersectsPlane(Z)) { + var _ = Tu.getShapeGeometryFromGeometryAndPlane(X, Z); + if (_) { + var $ = new Ue(_, z.material[0]); + Y.add($), + $.matrixWorld.copy(z.matrixWorld) + } + } + } + } + } + } + } + o.tempPlanes = V, + o.autoClear = s, + o.setRenderTarget(null), + o.clear(), + o.render(n, t) + } + } else + vc.EnableSelectionOutline && e.composer && e.getSelection().length > 0 ? e.composer.render() : (o.setRenderTarget(null), + o.clear(), + o.render(n, t)); + e.onRenderListener(), + e.onRenderFinishedListener(), + e.cameraControl.setCameraChanging(!1), + i.getBlinkEnabled() && (e.blinkHandle = requestAnimationFrame(A)), + i.disposeBufferAfterVbo() + }() + }, + Ly.prototype.render = function (A) { + if (this.renderer) { + var e = this.viewer, + t = e.modelManager; + if (t.isEmpty()) + return Bh.log("model not loaded!"), + void this._forceRenderOneFrame(); + if (!t.checkLayerDataLoading()) { + e._checkDataChanged(); + e.getScene(); + e.camera.updateMatrixWorld(), + this.csm && (this.csm.update(e.camera.matrixWorld), + this.csm.updateFrustums()), + vc.IncrementRender ? this.incrementRender(A) : vc.FillCavity ? this.fillCavityRender2(A) : this.fullRender(A) + } + } + }, + Ly.prototype.getRenderer = function () { + return this.renderer + }, + Ly.prototype.setSize = function (A, e) { + this.renderer.setSize(A, e), + this.composer && this.composer.setSize(A, e) + }, + Ly.prototype.getRendererSize = function () { + return this.renderer ? this.renderer.getSize() : { + width: 0, + height: 0 + } + }, + Ly.prototype.getPickingEffecter = function () { + return vc.PickingEffect ? (this.pickingEffecter || (this.pickingEffecter = new Sy(this.viewer)), + this.pickingEffecter) : null + }; + var Ny = function (A, e) { + jo.call(this, A, e), + this.type = "SkinnedMesh", + this.bindMode = "attached", + this.bindMatrix = new M, + this.bindMatrixInverse = new M; + var t = new bo(this.initBones()); + this.bind(t, this.matrixWorld), + this.normalizeSkinWeights() + }; + Ny.prototype = Object.assign(Object.create(jo.prototype), { + constructor: Ny, + isSkinnedMesh: !0, + initBones: function () { + var A = [], + e = null, + t = null, + i = null, + o = null; + if (this.geometry && void 0 !== this.geometry.bones) { + for (i = 0, + o = this.geometry.bones.length; o > i; i += 1) + t = this.geometry.bones[i], + e = new Uo, + A.push(e), + e.name = t.name, + e.position.fromArray(t.pos), + e.quaternion.fromArray(t.rotq), + void 0 !== t.scl && e.scale.fromArray(t.scl); + for (i = 0, + o = this.geometry.bones.length; o > i; i += 1) + - + 1 !== (t = this.geometry.bones[i]).parent && null !== t.parent && void 0 !== A[t.parent] ? A[t.parent].add(A[i]) : this.add(A[i]) + } + return this.updateMatrixWorld(!0), + A + }, + bind: function (A, e) { + this.skeleton = A, + void 0 === e && (this.updateMatrixWorld(!0), + this.skeleton.calculateInverses(), + e = this.matrixWorld), + this.bindMatrix.copy(e), + this.bindMatrixInverse.getInverse(e) + }, + pose: function () { + this.skeleton.pose() + }, + normalizeSkinWeights: function () { + var A = null, + e = null; + if (this.geometry && this.geometry.isGeometry) + for (e = 0; this.geometry.skinWeights.length > e; e += 1) { + var t = this.geometry.skinWeights[e]; + (A = 1 / t.lengthManhattan()) !== 1 / 0 ? t.multiplyScalar(A) : t.set(1, 0, 0, 0) + } + else if (this.geometry && this.geometry.isBufferGeometry) { + var i = new p, + o = this.geometry.attributes.skinWeight; + for (e = 0; o.count > e; e += 1) + i.x = o.getX(e), + i.y = o.getY(e), + i.z = o.getZ(e), + i.w = o.getW(e), + (A = 1 / i.lengthManhattan()) !== 1 / 0 ? i.multiplyScalar(A) : i.set(1, 0, 0, 0), + o.setXYZW(e, i.x, i.y, i.z, i.w) + } + }, + updateMatrixWorld: function (A) { + jo.prototype.updateMatrixWorld.call(this, A), + "attached" === this.bindMode ? this.bindMatrixInverse.getInverse(this.matrixWorld) : "detached" === this.bindMode ? this.bindMatrixInverse.getInverse(this.bindMatrix) : console.warn("THREE.SkinnedMesh: Unrecognized bindMode: " + this.bindMode) + }, + clone: function () { + return new this.constructor(this.geometry, this.material).copy(this) + } + }); + var Oy = function (A) { + of .call(this, A), + this.nodeGroupName = "PickingExternalMeshGroup", + this.pickingEffecter = this.manager.viewer.rendererManager.getPickingEffecter() + }; + Object.assign(Oy.prototype, of .prototype), + eu(Oy, [{ + key: "destroy", + value: function () { + this.pickingEffecter = null + } + }, { + key: "_disposeGeometryByNode", + value: function (A) { + A.traverseVisible((function (e) { + e !== A && (e.isMesh || e.isLine) && (e.material = null, + e.geometry.dispose()) + })) + } + }, { + key: "disposePickingNodeById", + value: function (A) { + for (var e = this.pickingNodeMap[A], t = 0, i = e.length; i > t; t += 1) + this._disposeGeometryByNode(e[t]), + e[t] = null + } + }, { + key: "updatePickingMeshes", + value: function (A, e, t) { + if (this.pickingNodeMap) { + for (var i = Object.keys(this.pickingNodeMap), o = 0, n = i.length; n > o; o += 1) { + var r = i[o], + a = this.pickingNodeMap[r], + s = 0, + l = 0; + if (t[r] && this.manager.isPickableNode({ + userId: r, + name: r + })) + for (s = 0, + l = a.length; l > s; s += 1) + a[s].visible = !0; + else + for (s = 0, + l = a.length; l > s; s += 1) + a[s].visible = !1 + } + return this.getPickingNodeGroup() + } + } + }, { + key: "addNode", + value: function (A, e) { + this.addToPickingNodeMap(A, e) + } + }, { + key: "removeNodeById", + value: function (A) { + this.removeFromPickingNodeMap(A) + } + }, { + key: "clearNodes", + value: function () { + this.clearData() + } + }, { + key: "addToPickingNodeMap", + value: function (A, e) { + for (var t = [], i = !vc.BatchMergeEnabled, o = 0, n = e.length; n > o; o += 1) { + var r = this._createPickingNodeBy(e[o], i); + if (r) + if (Array.isArray(r)) + for (var a = 0, s = r.length; s > a; a += 1) + r[a].name = A, + t.push(r[a]); + else + r.name = A, + t.push(r) + } + this.pickingNodeMap || (this.pickingNodeMap = {}), + this.pickingNodeMap[A] = t, + this.addToPickingNodeGroup(t) + } + }, { + key: "_createPickingNodeBy", + value: function (A, e) { + var t = this, + i = {}, + o = {}; + if ("Object3D" === A.type || A instanceof Xi || A instanceof ep) { + var n = new Xi; + n.copy(A, !1), + A.animations && (n.animations = A.animations), + A.traverseVisible((function (n) { + if (n !== A) { + var r = null; + if ("Object3D" === n.type || n instanceof Xi || n instanceof ep || n instanceof Uo) + (r = n instanceof Uo ? new Uo : new Xi).copy(n, !1), + i[n.uuid] = { + destination: r, + source: n + }; + else { + if (!n.isMesh && !n.isLine) + return; + (r = t._createPickingMeshesBy(n, e)) && (o[n.uuid] = { + destination: r, + source: n + }) + } + r = null + } + })); + var r = 0, + a = 0, + s = null, + l = Object.keys(i); + for (r = 0, + a = l.length; a > r; r += 1) { + var c = i[l[r]]; + c.source.parent !== A ? i[s = c.source.parent.uuid].destination.add(c.destination) : n.add(c.destination) + } + var h = Object.keys(o); + for (r = 0, + a = h.length; a > r; r += 1) { + var d = o[h[r]], + p = 0, + g = 0; + if (d.source.parent === A) + if (Array.isArray(d.destination)) + for (p = 0, + g = d.destination.length; g > p; p += 1) + n.add(d.destination[p]); + else + n.add(d.destination); + else if (s = d.source.parent.uuid, + Array.isArray(d.destination)) + for (p = 0, + g = d.destination.length; g > p; p += 1) + i[s].destination.add(d.destination[p]); + else + i[s].destination.add(d.destination) + } + return n + } + return A.isMesh || A.isLine ? t._createPickingMeshesBy(A, e) : null + } + }, { + key: "_createLineMeshBy", + value: function (A, e, t) { + var i = null, + o = null, + n = this.pickingEffecter; + if (vc.PickingLineWidthEnabled) { + i = n.selectedLineMaterial; + var r = new JC; + A.isLineSegments ? r.fromLineSegments(A) : A.isLineLoop ? r.fromLineLoop(A) : r.fromLine(A), + o = new XC(r, i), + Tu.copyMeshProperties(o, A), + o.renderOrder = t ? 1 : 0 + } else + i = n.selectedMaterial, + o = A.isLineSegments ? new jo(e, i) : A.isLineLoop ? new Ho(e, i) : new Go(e, i), + Tu.copyMeshProperties(o, A), + o.renderOrder = t ? 1 : 0; + return o + } + }, { + key: "_createMeshBy", + value: function (A, e, t) { + var i = new Ue(e, this.pickingEffecter.selectedMaterial); + return Tu.copyMeshProperties(i, A), + i.renderOrder = t ? 1 : 0, + i + } + }, { + key: "_createSkinnedMeshBy", + value: function (A, e, t) { + var i = new So(e, this.pickingEffecter.skinningSelectedMaterial); + return Tu.copyMeshProperties(i, A), + i.renderOrder = t ? 1 : 0, + i.bindMatrix.copy(A.bindMatrix), + i.bindMatrixInverse.copy(A.bindMatrixInverse), + i.bindMode = A.bindMode, + i.userData = A.userData, + i.skeleton = A.skeleton, + i + } + }, { + key: "_createSkinnedWireFrameBy", + value: function (A, e, t) { + if (!e.index) + return null; + var i = this.pickingEffecter.skinningWireframeMaterial, + o = Up(e.attributes.position.array, e.index.array), + n = new he; + n.setIndex(new $A(o, 1)), + n.setAttribute("position", e.getAttribute("position")), + n.setAttribute("skinIndex", e.getAttribute("skinIndex")), + n.setAttribute("skinWeight", e.getAttribute("skinWeight")); + var r = new Ny(n, i); + return Tu.copyMeshProperties(r, A), + r.bindMatrix.copy(A.bindMatrix), + r.bindMatrixInverse.copy(A.bindMatrixInverse), + r.bindMode = A.bindMode, + r.userData = A.userData, + r.skeleton = A.skeleton, + r.renderOrder = t ? 0 : 1, + r + } + }, { + key: "_createWireFrameBy", + value: function (A, e, t) { + if (!e.index) + return null; + var i = this.pickingEffecter.wireframeMaterial, + o = Up(e.attributes.position.array, e.index.array), + n = new he; + n.setIndex(new $A(o, 1)), + n.setAttribute("position", e.getAttribute("position")); + var r = new jo(n, i); + return Tu.copyMeshProperties(r, A), + r.renderOrder = t ? 0 : 1, + r + } + }, { + key: "_createPickingMeshesBy", + value: function (A, e) { + var t = Tu.createBufferGeometryWithPosAndSkin(A.geometry); + if (!t) + return null; + if (A.isLineSegments) + return this._createLineMeshBy(A, t, e); + var i = null, + o = null; + return A.isSkinnedMesh ? (i = this._createSkinnedMeshBy(A, t, e), + o = this._createSkinnedWireFrameBy(A, t, e)) : (i = this._createMeshBy(A, t, e), + o = this._createWireFrameBy(A, t, e)), + o ? [i, o] : i + } + }, { + key: "setAccumulateTransform", + value: function (A, e, t, i) { + if (this.pickingNodeMap && this.pickingNodeMap[A]) + for (var o = this.pickingNodeMap[A], n = 0, r = o.length; r > n; n += 1) { + var a = o[n]; + e && (a.position.x += e.x, + a.position.y += e.y, + a.position.z += e.z), + t && (a.scale.x *= t.x, + a.scale.y *= t.y, + a.scale.z *= t.z), + i && (a.rotation.x += i.x, + a.rotation.y += i.y, + a.rotation.z += i.z), + a.updateMatrixWorld() + } + } + }, { + key: "setTransform", + value: function (A, e, t, i, o) { + if (this.pickingNodeMap && this.pickingNodeMap[A]) + for (var n = this.pickingNodeMap[A], r = 0, a = n.length; a > r; r += 1) { + var s = n[r]; + o ? this.manager.setTransformForClonedMesh(s, e, t, i) : this.manager.setTransformForMesh(s, e, t, i) + } + } + }, { + key: "rotateOnBasePoint", + value: function (A, e, t, i) { + if (this.pickingNodeMap && this.pickingNodeMap[A]) { + var o = this.pickingNodeMap[A]; + if (o) + for (var n = 0, r = o.length; r > n; n += 1) { + var a = o[n], + s = (new f).setFromAxisAngle(t, i); + a.quaternion.premultiply(s), + a.position.sub(e), + a.position.applyQuaternion(s), + a.position.add(e), + a.updateMatrixWorld() + } + } + } + }, { + key: "applyTransform", + value: function (A, e, t, i) { + if (this.pickingNodeMap && this.pickingNodeMap[A]) { + var o = this.manager.getTransformMatrix(e, t, i); + this.applyTransformMatrix(A, o) + } + } + }, { + key: "applyTransformMatrix", + value: function (A, e) { + if (this.pickingNodeMap && this.pickingNodeMap[A]) + for (var t = this.pickingNodeMap[A], i = 0, o = t.length; o > i; i += 1) + this.manager.updateMatrixWorldForMesh(t[i], e) + } + }]); + var Vy = function (A) { + this.viewer = A, + this.viewer.modelManager.registerPlugin(this), + this.meshes = {}, + this.customSelectMaterials = {}, + this.databagId = "ExternalComponent", + this.objectIds = null, + this.lastFilteredIds = null, + this.firstAnimation = !0, + this.animationIds = {}, + this.animationLength = 0, + this.animationId = 0, + this.invalidObjectType = ["invalidPlane"], + this.floorExplosion = !1, + this.boundingBoxWorld = void 0 + }; + Vy.prototype.destroy = function () { + this.pickingNodeGenerator && (this.pickingNodeGenerator.destroy(), + this.pickingNodeGenerator = null), + this._removeNodeGroup(), + this.meshes = null, + this.customSelectMaterials = null, + this.objectIds = null, + this.lastFilteredIds = null, + this._cancelAnimate(), + this.firstAnimation = null, + this.animationIds = null, + this.invalidObjectType = null, + this.viewer = null + }, + Vy.prototype.addExternalObject = function (A) { + if (A && (A instanceof Xi || A instanceof Ue)) { + var e = uh.createUUID(); + this.meshes[e] = [A]; + var t = { + name: e, + userId: e, + nodeId: e, + state: Lc.Visible, + mesh: [A], + isExternalComponent: !0, + matrix: A.matrixWorld.clone() + }, + i = new aA; + return i.setFromObject(A), + t.boundingBox = i, + A.key = e, + this._getNodeGroup().add(A), + this._addToNodeInfoMap(t), + this._cacheNodeMaterial(A), + this.boundingBoxWorld ? this.boundingBoxWorld.union(i) : this.boundingBoxWorld = i.clone(), + this.viewer.modelManager.updateSceneBoundingBox(), + this._updateFilterManager(), + this.objectIds = Object.keys(this.meshes), { + nodeId: e + } + } + }, + Vy.prototype.getObjectCenterAndMatrixByNodeId = function (A) { + var e = void 0, + t = this.getNodeInfosByUserId(A); + if (t && t.length > 0) { + e = { + matrix: [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], + center: [0, 0, 0] + }; + var i = t[0]; + if (i.matrix && (e.matrix = i.matrix.toArray()), + i.boundingBox) { + var o = new y; + i.boundingBox.getCenter(o), + e.center = o.toArray() + } + } + return e + }, + Vy.prototype.addNode = function (A, e, t, i) { + if (this.meshes[A]) + Bh.error("Warning: name is already exist, please change name "); + else if (-1 === this.invalidObjectType.indexOf(e.type)) { + e instanceof Array || (e = [e]), + this.meshes[A] = e, + this._isPickingEffectEnabled() && this.getPickingNodeGenerator().addNode(A, e), + void 0 === t && (t = !1), + i && (this.customSelectMaterials[A] = i); + for (var o = new aA, n = 0, r = e.length; r > n; n += 1) { + var a = new aA; + a.setFromObject(e[n]), + a.isEmpty() && a.min.x === 1 / 0 && e[n].position && (a.min.copy(e[n].position), + a.max.copy(e[n].position)), + o.union(a), + e[n].box = a, + e[n].originBox = a.clone(); + var s = new M; + s.getInverse(e[n].matrix), + e[n].originBox.applyMatrix4(s), + this._initializeAnimation(e[n], A); + var l = e[n]; + l.key = A, + this._getNodeGroup().add(l), + l.updateMatrixWorld(!0), + t || this._cacheNodeMaterial(l) + } + var c = { + name: A, + userId: A, + state: Lc.Visible, + boundingBox: o, + mesh: e, + isExternalComponent: !0 + }; + 1 === e.length && (c.matrix = e[0].matrixWorld.clone()), + this._addToNodeInfoMap(c), + this.boundingBoxWorld ? this.boundingBoxWorld.union(o) : this.boundingBoxWorld = o.clone(), + this.viewer.modelManager.updateSceneBoundingBox(), + this._updateFilterManager(), + this.objectIds = Object.keys(this.meshes) + } else + Bh.error("Warning: the object is invalid") + }, + Vy.prototype.getNodeById = function (A) { + var e = this.meshes[A]; + return e && 1 === e.length ? e[0] : e + }, + Vy.prototype.removeNodeById = function (A) { + var e = this.meshes[A]; + if (!e) + return !1; + e[0].autoAnimation && (delete this.animationIds[A], + this.animationLength -= 1, + 0 === this.animationLength && this._cancelAnimate()), + delete this.meshes[A], + this._isPickingEffectEnabled() && this.getPickingNodeGenerator().removeNodeById(A), + this.customSelectMaterials[A] && delete this.customSelectMaterials[A]; + for (var t = this._getNodeGroup(), i = 0, o = e.length; o > i; i += 1) + t.remove(e[i]); + return this.filteredIds && this.filteredIds[A] && delete this.filteredIds[A], + this.lastFilteredIds && this.lastFilteredIds[A] && delete this.lastFilteredIds[A], + this.viewer.removeFromSelection([A]), + this.viewer.cancelTransformComponentByKey(A), + this._removeFromNodeInfoMap(A), + this._updateFilterManager(), + this.objectIds = Object.keys(this.meshes), + !0 + }, + Vy.prototype.clearNodes = function () { + this._isPickingEffectEnabled() && this.getPickingNodeGenerator().clearNodes(), + this._getNodeGroup().clear(), + this._clearNodeInfoMap(), + this.meshes = {}, + this.customSelectMaterials = {}, + this.objectIds = null, + this.animationIds = {}, + this.animationLength = 0, + this._cancelAnimate() + }, + Vy.prototype.getAllNodes = function () { + return this.meshes + }, + Vy.prototype.isEmpty = function () { + return !this._hasNode() + }, + Vy.prototype.setTransform = function (A, e, t, i, o) { + if (this.floorExplosion && o) + o(); + else { + var n = this.meshes[A]; + if (n) { + for (var r = 0, a = n.length; a > r; r += 1) { + var s = n[r]; + s.position.x = (e = e || s.position).x, + s.position.y = e.y, + s.position.z = e.z, + s.scale.x = (t = t || s.scale).x, + s.scale.y = t.y, + s.scale.z = t.z, + s.setRotationFromQuaternion(i = i || s.quaternion), + s.updateMatrixWorld(); + var l = s.originBox.clone(); + s.box = l.applyMatrix4(s.matrix), + s.levelName = null + } + this._isPickingEffectEnabled() && this.getPickingNodeGenerator().setTransform(A, e, t, i) + } + } + }, + Vy.prototype.getTransform = function (A) { + var e = this.meshes[A]; + return e ? { + position: e[0].position, + scale: e[0].scale, + rotate: e[0].quaternion + } : null + }, + Vy.prototype.applyTransform = function (A, e, t, i) { + if (this.meshes[A]) { + e = e || new y, + t = t || new y(1, 1, 1), + i = i || new f; + var o = new M; + o.compose(e, i, t), + this.applyTransformMatrix(A, o), + this._isPickingEffectEnabled() && this.getPickingNodeGenerator().applyTransformMatrix(A, o) + } + }, + Vy.prototype.applyTransformMatrix = function (A, e) { + var t = this.meshes[A]; + if (t) + for (var i = 0, o = t.length; o > i; i += 1) { + var n = t[i]; + n._oriMatrix || (n._oriMatrix = n.matrix.clone()), + n.matrix.multiplyMatrices(e, n._oriMatrix), + n.updateMatrixWorld(!0); + var r = n.originBox.clone(); + n.box = r.applyMatrix4(n.matrix) + } + }, + Vy.prototype.applyFilter = function () { + this._hasNode() && (this._collectFilteredIds(), + this._collectSelectedIds(), + this._collectHoveredIds(), + this._updateNodes()) + }, + Vy.prototype.applySelection = function () { + console.log('applySelection13') + this._hasNode() && (this._collectSelectedIds(), + this._collectHoveredIds(), + this._updateNodes()) + }, + Vy.prototype.clearSelection = function () { + this._hasNode() && (this._clearSelectedIds(), + this.applyHover()) + }, + Vy.prototype.applyHover = function () { + this._hasNode() && (this._collectHoveredIds(), + this._updateNodes()) + }, + Vy.prototype.clearHover = function () { + this._hasNode() && (this._clearHoveredIds(), + this._updateNodes()) + }, + Vy.prototype.getNodeInfosByUserId = function (A) { + if (this.nodeInfoMap) + return this.nodeInfoMap[A] + }, + Vy.prototype.getAllNodeInfos = function (A) { + A[this.databagId] = this.nodeInfoMap || {} + }, + Vy.prototype.calculateBoundingBox = function () { + if (this.nodeInfoMap) { + var A = new aA, + e = new aA; + for (var t in this.nodeInfoMap) + for (var i = this.nodeInfoMap[t], o = 0, n = i.length; n > o; o += 1) { + var r = i[o], + a = r.mesh, + s = new aA; + for (o = 0, + n = a.length; n > o; o += 1) + e.makeEmpty(), + e.setFromObject(a[o]), + e.isEmpty() && e.min.x === 1 / 0 && a[o].position && (e.min.copy(a[o].position), + e.max.copy(a[o].position)), + s.union(e); + r.boundingBox.copy(s), + A.union(r.boundingBox) + } + this.boundingBoxWorld ? this.boundingBoxWorld.copy(A) : this.boundingBoxWorld = A + } + }, + Vy.prototype.recalculateComponentBoundingbox = function (A) { + var e = this.getNodeInfosByUserId(A); + if (e) + for (var t = 0, i = e.length; i > t; t += 1) { + var o = e[t], + n = o.mesh, + r = new aA, + a = new aA; + for (t = 0, + i = n.length; i > t; t += 1) + a.setFromObject(n[t]), + a.isEmpty() && a.min.x === 1 / 0 && n[t].position && (a.min.copy(n[t].position), + a.max.copy(n[t].position)), + r.union(a); + o.boundingBox.copy(r) + } + }, + Vy.prototype.getBoundingBoxWorld = function () { + if (this.boundingBoxWorld) + return this.boundingBoxWorld.clone() + }, + Vy.prototype.adjustVisibility = function (A) { + this._getNodeGroup().visible = A + }, + Vy.prototype.changeVisibilityOfSelectedObjects = function (A) { + if (this.selectedIds) + for (var e = this.viewer.modelManager.filter, t = 0, i = this.selectedIds.length; i > t; t += 1) { + var o = this.selectedIds[t], + n = this.meshes[o]; + if (n && e._isVisible({ + userId: o + })) + for (var r = 0, a = n.length; a > r; r += 1) + n[r].visible = A + } + }, + Vy.prototype.changeVisibilityOfNonSelectedObjects = function (A) { + if (this.objectIds) { + var e = {}; + if (this.selectedIds) + for (var t = 0, i = this.selectedIds.length; i > t; t += 1) + e[this.selectedIds[t]] = !0; + for (var o = this.viewer.modelManager.filter, n = 0, r = this.objectIds.length; r > n; n += 1) { + var a = this.objectIds[n]; + if (!e[a] && o._isVisible({ + userId: a + })) + for (var s = this.meshes[a], l = 0, c = s.length; c > l; l += 1) + s[l].visible = A + } + } + }, + Vy.prototype.adjustVisibilityOfObjectsWithoutOutline = function (A) { + if (this.objectIds) + for (var e = this.viewer.modelManager.filter, t = 0, i = this.objectIds.length; i > t; t += 1) { + var o = this.objectIds[t]; + if (e._isVisible({ + userId: o + })) + for (var n = this.meshes[o], r = 0, a = n.length; a > r; r += 1) + n[r].isSprite && (n[r].visible = A) + } + }, + Vy.prototype._addToNodeInfoMap = function (A) { + this.nodeInfoMap || (this.nodeInfoMap = {}), + this.nodeInfoMap[A.userId] || (this.nodeInfoMap[A.userId] = []), + this.nodeInfoMap[A.userId].push(A) + }, + Vy.prototype._removeFromNodeInfoMap = function (A) { + this.nodeInfoMap && this.nodeInfoMap[A] && delete this.nodeInfoMap[A] + }, + Vy.prototype._clearNodeInfoMap = function () { + this.nodeInfoMap = null + }, + Vy.prototype._updateFilterManager = function () { + var A = this.viewer.modelManager; + A.filter.reinitFilterManager(A.getNodeInfos()) + }, + Vy.prototype._canBePick = function (A) { + return !!A._oriMaterial + }, + Vy.prototype._getNodeGroup = function () { + return this.viewer.modelManager.scene.getOrCreateGroup(gp.EXTERNALCOMPONENTMANAGER, { + pickableType: Qc.Geometry, + globalSpace: !0 + }) + }, + Vy.prototype._removeNodeGroup = function () { + this.viewer.modelManager.scene.removeGroupByName(gp.EXTERNALCOMPONENTMANAGER) + }, + Vy.prototype._cacheNodeMaterial = function (A) { + uh.isGroupObject(A) ? A.traverse((function (A) { + if (uh.isMeshObject(A) && !A._oriMaterial && (A._oriMaterial = A.material, + !A.geometry.index && A.geometry.attributes && A.geometry.attributes.position)) { + for (var e = [], t = 0, i = A.geometry.attributes.position.array.length / 3; i > t; t += 1) + e.push(t); + A.geometry.setIndex(new YA(new Uint32Array(e), 1)) + } + })) : A._oriMaterial || (A._oriMaterial = A.material) + }, + Vy.prototype._collectFilteredIds = function () { + var A = this.filteredIds = {}, + e = this.viewer.modelManager.filter, + t = e._hasHiddenFileIdFilter(), + i = e._hasVisibleFilter(), + o = e._hasOverrideMaterialFilter(), + n = e._hasTransparentFilter(); + if (t || i || o || n) + for (var r = this.objectIds, a = zc, s = 0, l = r.length; l > s; s += 1) { + var c = r[s], + h = { + userId: c + }; + if (i && !1 === e._isVisible(h)) + A[c] || (A[c] = {}), + A[c][a.HIDDEN] = !0; + else if (n && e._isTransparent(h)) + A[c] || (A[c] = {}), + A[c][a.TRANSPARENT] = !0; + else if (o && e._hasOverrideMaterial(h)) { + var d = e._getOverrideMaterial(h), + p = d ? d.name : ""; + A[c] || (A[c] = {}), + A[c][a.OVERRIDED] = p + } + } + }, + Vy.prototype._collectSelectedIds = function () { + var A = this.filteredIds = this.filteredIds || {}, + e = zc, + t = this.viewer.modelManager.sceneState.getSelection(), + i = {}; + this._clearSelectedIds(); + for (var o = 0, n = t.length; n > o; o += 1) { + var r = t[o]; + this.canBeSelectedId(r) && (A[r] || (A[r] = {}), + A[r][e.SELECTED] = !0, + i[r] = !0) + } + this.selectedIds = Object.keys(i) + }, + Vy.prototype._clearSelectedIds = function () { + if (this.filteredIds && this.selectedIds && this.selectedIds.length) { + for (var A = 0, e = this.selectedIds.length; e > A; A += 1) { + var t = this.selectedIds[A]; + this.filteredIds[t] && delete this.filteredIds[t][zc.SELECTED] + } + this.selectedIds = null + } + }, + Vy.prototype._collectHoveredIds = function () { + var A = this.viewer.modelManager.sceneState.hoverId; + if (A && this._hasObjectId(A)) { + var e = this.filteredIds = this.filteredIds || {}; + this.hoveredId = A, + e[A] || (e[A] = {}), + e[A][zc.HOVER] = !0 + } + }, + Vy.prototype._clearHoveredIds = function () { + this.filteredIds && this.hoveredId && this.filteredIds[this.hoveredId] && (delete this.filteredIds[this.hoveredId][zc.HOVER], + this.hoveredId = void 0) + }, + Vy.prototype._hasObjectId = function (A) { + return !!this.meshes[A] + }, + Vy.prototype.isUserIdExist = function (A) { + return this._hasObjectId(A) + }, + Vy.prototype.canBeSelectedId = function (A) { + var e = this.meshes[A]; + return !(!e || e[0].disPickable) + }, + Vy.prototype._hasNode = function () { + return !(!this.objectIds || !this.objectIds.length) + }, + Vy.prototype._traverseNodeById = function (A, e) { + if (this._hasObjectId(A)) + for (var t = this, i = this.meshes[A], o = 0, n = i.length; n > o; o += 1) { + var r = i[o]; + uh.isGroupObject(r) ? r.traverseVisible((function (A) { + uh.isMeshObject(A) && t._canBePick(A) && e && e(A) + })) : (uh.isMeshObject(r) || r.isSprite) && t._canBePick(r) && e && e(r) + } + }, + Vy.prototype._resetNodeMaterial = function () { + var A = this.lastFilteredIds; + if (A && A.length) + for (var e = 0, t = A.length; t > e; e += 1) + this._updateNodeVisible(A[e], !0), + this._traverseNodeById(A[e], (function (A) { + A.material = A._oriMaterial + })) + }, + Vy.prototype._updateNodeVisible = function (A, e) { + if (this._hasObjectId(A)) + for (var t = this.meshes[A], i = 0, o = t.length; o > i; i += 1) + t[i].visible = e + }, + Vy.prototype._updateNodeById = function (A, e) { + if (this._hasObjectId(A)) { + var t = this.viewer.modelManager.sceneState, + i = zc, + o = this.filteredIds[A]; + if (o) + if (o[i.HIDDEN]) + this._updateNodeVisible(A, !1); + else { + var n = function (A, e) { + if (A._oriMaterial instanceof Array) { + for (var t = [], i = 0, o = A._oriMaterial.length; o > i; i += 1) { + var n = A._oriMaterial[i]; + n instanceof ld ? t.push(e) : t.push = Kd.cloneMaterialBaseOnColor(n, e) + } + A.material = t + } else + A.material = A._oriMaterial instanceof ld ? e : Kd.cloneMaterialBaseOnColor(A._oriMaterial, e) + }; + if (o[i.TRANSPARENT]) { + var r = e._getMaterialByName("scene"); + this._traverseNodeById(A, (function (A) { + n(A, r) + })) + } else if (this._isPickingEffectEnabled() || !o[i.SELECTED]) { + if (o[i.HOVER]) + if (o[i.OVERRIDED]) { + var a = t.getHoverMaterial(e._getMaterialByName(o[i.OVERRIDED])); + this._traverseNodeById(A, (function (A) { + n(A, a) + })) + } else + this._traverseNodeById(A, (function (A) { + var e = t.getHoverMaterial(A._oriMaterial); + n(A, e) + })); + else if (o[i.OVERRIDED]) { + var s = e._getMaterialByName(o[i.OVERRIDED]); + this._traverseNodeById(A, (function (A) { + n(A, s) + })) + } + } else { + var l = t.selectionMaterial, + c = this.customSelectMaterials[A]; + this._traverseNodeById(A, (function (A) { + c ? A.material = c : A._oriMaterial.isMeshPhongMaterial ? (A.material = t.phongSelectionMaterial, + A.material.skinning = A._oriMaterial.skinning) : n(A, l) + })) + } + } + } + }, + Vy.prototype._updateNodes = function () { + var A = this.viewer.modelManager.filter; + if (this._resetNodeMaterial(), + this.filteredIds) { + for (var e in this.filteredIds) + this._updateNodeById(e, A); + this.lastFilteredIds = Object.keys(this.filteredIds) + } + }, + Vy.prototype._initializeAnimation = function (A, e) { + if (A.autoAnimation) { + if ("fire" === A.type) { + var t = vc.SceneSize, + i = this.viewer.getBoundingBoxWorld().getSize(), + o = Math.max(i.x, i.y, i.z); + A._initializeSizetween(t / o / .01421) + } + this.firstAnimation && (this._animate(), + this.firstAnimation = !1), + this.animationIds[e] = !0, + this.animationLength += 1 + } + }, + Vy.prototype._animate = function () { + var A = this; + ! function e() { + for (var t in A.animationId = requestAnimationFrame(e), + A.animationIds) + for (var i = A.meshes[t], o = 0, n = i.length; n > o; o += 1) + i[o].autoAnimation && i[o].update && i[o].update(); + A.viewer.render() + }() + }, + Vy.prototype._cancelAnimate = function () { + this.firstAnimation = !0, + cancelAnimationFrame(this.animationId), + this.animationId = 0 + }, + Vy.prototype.isPickableNode = function (A) { + if (!this.canBeSelectedId(A.userId)) + return !1; + var e = this.viewer.modelManager.filter; + return !e._isHiddenFileId(A) && !1 !== e._isVisible(A) && !e._isTransparent(A) + }, + Vy.prototype._isPickingEffectEnabled = function () { + return !1 + }, + Vy.prototype.getPickingNodeGenerator = function () { + return this.pickingNodeGenerator || (this.pickingNodeGenerator = new Oy(this)), + this.pickingNodeGenerator + }, + Vy.prototype.setCloneComponentMaterialsByKey = function (A, e, t) { + var i = this.meshes[A][0]; + if (!i) + return { + result: !1, + message: "mesh isn`t exist", + code: -1 + }; + if (!i.byClone) + return { + result: !1, + message: "mesh isn`t qualified", + code: -2 + }; + var o = 0 === t || Boolean(t); + if (Array.isArray(e) || (e = [e]), + o && (Array.isArray(t) || (t = [t])), + Array.isArray(i.material)) + if (o) { + var n = 0, + r = !0, + a = !1, + s = void 0; + try { + for (var l, c = t[Symbol.iterator](); !(r = (l = c.next()).done); r = !0) { + var h = l.value; + if (!i.material[h] || !e[n]) + break; + i.material[h] = e[n], + n += 1 + } + } catch (A) { + a = !0, + s = A + } finally { + try { + r || null == c.return || c.return() + } finally { + if (a) + throw s + } + } + } else { + var d = 0, + p = !0, + g = !1, + u = void 0; + try { + for (var f, m = e[Symbol.iterator](); !(p = (f = m.next()).done); p = !0) { + var C = f.value; + if (!i.material[d]) + break; + i.material[d] = C, + d += 1 + } + } catch (A) { + g = !0, + u = A + } finally { + try { + p || null == m.return || m.return() + } finally { + if (g) + throw u + } + } + } + else + i.material = e[0] + }, + Vy.prototype.getModelManager = function () { + return this.viewer.modelManager + }; + var Gy = function () { + this.domElement = null, + this.camera = null, + this.highlightManager = null, + this.controller = document.getElementById("viewerController"), + this.countRenderRequest = 0, + this.maxCountRenderRequest = 1e4, + this.rendering = !1, + this.incrementRenderHandle = 0, + this.callbacks = {}, + this.tempBox = new aA, + this.tempVector3 = new y, + this.enableCameraNearFar = !0, + this.currentHomeView = Uc.Home, + this.initialView = Uc.Home, + this.filter = new xu, + this.modelManager = new ly(this.filter, this), + this.isRecalculationPlanes = !1, + this.calculationPlanesBind = this.calculationPlanes.bind(this), + this.addRenderFinishedListener(this.calculationPlanesBind), + this.uuid = "", + this.transitionAnimationState = !0, + this.animator = new dp, + this._renderStateChanged = !1; + var A = this; + this._renderTimer = null, + this.blinkHandle = 0, + this.needCheckTilesDataChange = !1, + this.clock = new as, + this.rendererManager = new Ly(this), + this.cameraStateWithFrustum = !1, + this.checkNeedRender = function () { + (A.needRender || A.modelManager.needUpdateAnimation()) && (A.needRender = vc.continueRender || !1, + A.modelManager.updateAnimation(), + A._render()), + A._renderTimer = requestAnimationFrame(A.checkNeedRender) + }, + this.checkNeedApplyFilter = function () { + A.needApplyFilter && (A.needApplyFilter = !1, + A.modelManager.applyFilter(), + A.render()), + A._applyFilterTimer = requestAnimationFrame(A.checkNeedApplyFilter) + }, + this.blink = {} + }; + Object.assign(Gy.prototype, Ld.prototype), + Object.assign(Gy.prototype, { + constructor: Gy, + addRenderListener: function (A) { + this.addEventListener("render", A) + }, + removeRenderListener: function (A) { + this.removeEventListener("render", A) + }, + onRenderListener: function () { + this.dispatchEvent("render") + }, + addRenderFinishedListener: function (A) { + this.addEventListener("renderFinished", A) + }, + removeRenderFinishedListener: function (A) { + this.removeEventListener("renderFinished", A) + }, + onRenderFinishedListener: function () { + this.dispatchEvent("renderFinished") + }, + removeAllListeners: function () { + this.removeAllEventListener() + }, + destroy: function () { + if (this.stopRedner(), + this.stopApplyFilter(), + this.removeAllListeners(), + this.controlManager.unregisterDomEventListeners(this.domElement), + this.renderer) { + var A = document.getElementById(this.uuid); + this.domElement.contains(this.getRenderer().domElement) && this.domElement.removeChild(A) + } + this.domElement = null, + this.renderSettings.canvas = null, + this.renderSettings.context = null, + this.renderSettings = null, + this.rendererManager.destroy(), + this.rendererManager = null, + this.camera = null, + this.defaultCamera = null, + this.cameraControl.destroy(), + this.cameraControl = null, + this.controlManager.destroy(), + this.modelManager.destroy(), + this.modelManager = null, + this.controlManager = null, + this.tmpBox = null, + this.filter = null, + this.calculationPlanesBind = null, + this.animator = null + }, + init: function (A) { + var e = this; + e.uuid = a.generateUUID(), + this.domElement = A, + this.resetBackgroundColor(); + var t = { + alpha: !0, + preserveDrawingBuffer: !0, + antialias: !0, + depth: !0, + maxDrawCacheNum: vc.maxDrawCacheNum, + logarithmicDepthBuffer: !1, + stencil: !0 + }; + vc.logarithmicDepthBuffer && (t.logarithmicDepthBuffer = !0), + vc.DisableAntialias && (t.antialias = !1); + var i = null; + try { + (i = document.createElement("canvas")).style.outline = "none", + i.getContext("webgl", t) || i.getContext("experimental-webgl", t) || (t.antialias = !1) + } catch (A) { + return !1 + } + Tu.initializeUnitInstances(); + var o = document.createElement("div"); + o.setAttribute("id", e.uuid), + o.style.width = "100%", + o.style.height = "100%", + t.canvas = i, + this.renderSettings = t, + this.camera = this.defaultCamera = new cp(45, A.offsetWidth, A.offsetHeight, .1, 200 * vc.SceneSize), + this.camera.up = new y(0, 0, 1), + this.camera.realUp = new y(0, 0, 1), + this.camera.lookAt(this.camera.target), + this.cameraControl = new mp(this, this.camera, A, (function (A) { + e.render(A) + })), + this.controlManager = new Og, + this.controlManager.setControlMode(this, "pick"), + this.setOrbitButton("left"), + this.setReverseWheelDirection(!1), + this.registerDomEventListener(Rc.ON_CONTROL_END, (function () { + e.needCheckTilesDataChange = !0 + })), + this.registerDomEventListener(Rc.ON_CONTROL_ZOOM, (function () { + e.needCheckTilesDataChange = !0 + })), + e.rendererManager.setupRenderer(e.renderSettings), + o.appendChild(this.getRenderer().domElement), + this.domElement.appendChild(o), + this.controlManager.registerDomEventListeners(o), + this.startRender(), + this.startApplyFilter() + }, + getDomElement: function () { + return this.domElement ? this.domElement : null + }, + getRendererDomElement: function () { + return this.getRenderer() && this.getRenderer().domElement ? this.getRenderer().domElement : null + }, + render: function () { + this.needRender = !0 + }, + startRender: function () { + this._renderTimer = requestAnimationFrame(this.checkNeedRender) + }, + stopRedner: function () { + cancelAnimationFrame(this._renderTimer) + }, + startApplyFilter: function () { + this._applyFilterTimer = requestAnimationFrame(this.checkNeedApplyFilter) + }, + stopApplyFilter: function () { + cancelAnimationFrame(this._applyFilterTimer) + }, + _render: function (A) { + this.rendererManager.render(A) + }, + incrementRender: function (A) { + var e = this, + t = this.camera, + i = this.modelManager, + o = this.getRenderer(), + n = this.getScene(); + if (this.countRenderRequest += 1, + this.countRenderRequest > this.maxCountRenderRequest && (this.countRenderRequest = 0), + !this.rendering) { + this.rendering = !0, + i.calculateCameraModelRelation(t.position), + this.ar(), + this.cameraControl.updateCamera(), + n.updateLights(t); + var r = this.controlManager.isUpdateRenderList; + o.resetIncrementRender(), + o.setObjectListUpdateState(r), + this.incrementRenderHandle = requestAnimationFrame(function A(i, r) { + var a = i; + return function () { + o.autoClear = r, + e.controlManager.cameraChange ? (o.resetIncrementRender(), + o.autoClear = !0, + e.controlManager.cameraChange = !1) : o.autoClear = r, + o.render(n, t) || a !== e.countRenderRequest ? (e.rendering = !1, + a !== e.countRenderRequest ? e.render() : e.onRenderFinishedListener()) : e.incrementRenderHandle = requestAnimationFrame(A(a, !1)) + } + }(e.countRenderRequest, !0)), + r && i.prepareScene(t), + this.onRenderFinishedListener(), + this.cameraControl.setCameraChanging(!1) + } + }, + fullRender: function (A) { + var e = this, + t = this.camera, + i = this.modelManager, + o = this.getRenderer(), + n = this.getScene(); + this.blinkHandle > 0 && cancelAnimationFrame(this.blinkHandle), + function A() { + e.calculateNearFar(), + e.cameraControl.updateCamera(), + n.updateLights(t), + i.getBlinkEnabled() && i.updateBlinkMaterial(); + var r = n.fillClipPlane && n.fillClipPlane.visible, + a = n.clipPlanes && n.clipPlanes.visible && vc.EnableBoxClippingCaps; + if (vc.ClippingCaps && (r || a) && vc.EnableClippingCaps) { + if (r || a) { + var s = n.getFillClipPlane(), + l = n.getClipPlanes(), + c = e.modelManager.getModelKeys(); + i.prepareCapScene(), + o.clear(), + o.autoClear = !1, + r ? (s.capPlane.planeMesh.visible = !0, + s.capPlane.lineMesh.visible = !0, + l.boxMesh.visible = !1) : (s.capPlane.planeMesh.visible = !1, + s.capPlane.lineMesh.visible = !1, + l.boxMesh.visible = !0), + s.planeHighLightMatrial.visible = !1, + l.planeHighLightMatrial.visible = !1, + l.planeMaterial.visible = !1, + n.overrideMaterial = n.backMaterial; + for (var h = {}, d = 0, p = c.length; p > d; d += 1) { + var g = c[d], + u = e.modelManager.getModel(g); + if (h[g] = {}, + u) { + var f = u._getNodeGroup(gp.GEOMETRY, { + globalSpace: !0 + }); + h[g][gp.GEOMETRY] = f.visible, + f = u._getNodeGroup(gp.WIREFRAME, { + globalSpace: !0 + }), + h[g][gp.WIREFRAME] = f.visible, + f = u._getNodeGroup(gp.INSTANCEGEOMETRY, { + globalSpace: !0 + }), + h[g][gp.INSTANCEGEOMETRY] = f.visible, + f.visible = !1, + f = u._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { + globalSpace: !0 + }), + h[g][gp.INSTANCEWIREFRAMEGEOMETRY] = f.visible, + f.visible = !1 + } + } + o.render(n, t), + n.overrideMaterial = n.backInstanceMaterial; + for (var m = 0, C = c.length; C > m; m += 1) { + var y = c[m], + v = e.modelManager.getModel(y); + if (v) { + var I = v._getNodeGroup(gp.GEOMETRY, { + globalSpace: !0 + }); + I.visible = !1, + (I = v._getNodeGroup(gp.WIREFRAME, { + globalSpace: !0 + })).visible = !1, + (I = v._getNodeGroup(gp.INSTANCEGEOMETRY, { + globalSpace: !0 + })).visible = h[y][gp.INSTANCEGEOMETRY], + (I = v._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { + globalSpace: !0 + })).visible = h[y][gp.INSTANCEWIREFRAMEGEOMETRY] + } + } + o.render(n, t), + n.overrideMaterial = n.frontMaterial; + for (var E = 0, B = c.length; B > E; E += 1) { + var x = c[E], + S = e.modelManager.getModel(x); + if (S) { + var w = S._getNodeGroup(gp.GEOMETRY, { + globalSpace: !0 + }); + w.visible = h[x][gp.GEOMETRY], + (w = S._getNodeGroup(gp.WIREFRAME, { + globalSpace: !0 + })).visible = h[x][gp.WIREFRAME], + w = S._getNodeGroup(gp.INSTANCEGEOMETRY, { + globalSpace: !0 + }), + h[x][gp.INSTANCEGEOMETRY] = w.visible, + w.visible = !1, + w = S._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { + globalSpace: !0 + }), + h[x][gp.INSTANCEWIREFRAMEGEOMETRY] = w.visible, + w.visible = !1 + } + } + o.render(n, t), + n.overrideMaterial = n.frontInstanceMaterial; + for (var M = 0, b = c.length; b > M; M += 1) { + var U = c[M], + F = e.modelManager.getModel(U); + if (F) { + var K = F._getNodeGroup(gp.GEOMETRY, { + globalSpace: !0 + }); + K.visible = !1, + (K = F._getNodeGroup(gp.WIREFRAME, { + globalSpace: !0 + })).visible = !1, + (K = F._getNodeGroup(gp.INSTANCEGEOMETRY, { + globalSpace: !0 + })).visible = h[U][gp.INSTANCEGEOMETRY], + (K = F._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { + globalSpace: !0 + })).visible = h[U][gp.INSTANCEWIREFRAMEGEOMETRY] + } + } + o.render(n, t), + o.render(i.capsScene, t), + n.overrideMaterial = null, + s.planeHighLightMatrial.visible = !0, + l.planeHighLightMatrial.visible = !0, + l.planeMaterial.visible = !0; + for (var Q = 0, R = c.length; R > Q; Q += 1) { + var T = c[Q], + k = e.modelManager.getModel(T); + if (k) { + var D = k._getNodeGroup(gp.GEOMETRY, { + globalSpace: !0 + }); + D.visible = h[T][gp.GEOMETRY], + (D = k._getNodeGroup(gp.WIREFRAME, { + globalSpace: !0 + })).visible = h[T][gp.WIREFRAME], + (D = k._getNodeGroup(gp.INSTANCEGEOMETRY, { + globalSpace: !0 + })).visible = h[T][gp.INSTANCEGEOMETRY], + (D = k._getNodeGroup(gp.INSTANCEWIREFRAMEGEOMETRY, { + globalSpace: !0 + })).visible = h[T][gp.INSTANCEWIREFRAMEGEOMETRY] + } + } + h = null, + o.render(n, t) + } + } else + vc.EnableSelectionOutline && e.composer && e.getSelection().length > 0 ? e.composer.render() : (o.setRenderTarget(null), + o.clear(), + o.render(n, t)); + e.onRenderListener(), + e.onRenderFinishedListener(), + e.cameraControl.setCameraChanging(!1), + i.getBlinkEnabled() && (e.blinkHandle = requestAnimationFrame(A)), + i.disposeBufferAfterVbo() + }() + }, + resize: function (A, e) { + if (this.camera && this.getRenderer()) { + var t = this.getDomElement(); + t && (t.style.height = e + "px", + t.style.width = A + "px"), + this.camera.setSize(A, e), + this.camera.updateProjectionMatrix(), + this.rendererManager.setSize(A, e), + this.dispatchEvent({ + type: "resize", + data: { + width: A, + height: e + } + }), + this.render() + } + }, + resizeByFrustum: function (A, e) { + this.camera && this.getRenderer() && (this.camera.updateProjectionMatrixByFrustum = !0, + this.camera.setSizeByFrustum(A, e), + this.render(), + this.camera.updateProjectionMatrixByFrustum = !1) + }, + calculateNearFar: function () { + this.calculateNearFar2() + }, + calculateNearFar2: function () { + var A = this.getScene(), + e = A.getBoundingBoxWorld(), + t = this.getRenderer(); + if (this.enableCameraNearFar) { + var i = this.camera, + o = i.position.clone().sub(A.getBoundingBoxWorld().getCenter(new y)).length(), + n = A.getBoundingBoxWorld().getSize(new y).length(); + if (null !== e && !e.isEmpty()) { + e.expandByScalar(1.1); + e.applyMatrix4(i.matrixWorldInverse); + var r = e.getSize(new y).length() / 1e3, + a = 100; + 1e-4 > r ? a = .001 : .001 > r ? a = .01 : .01 > r ? a = .1 : .1 > r ? a = 1 : 1 > r && (a = 10); + var s = 1, + l = 0; + e.max.z > 0 && 0 > e.min.z ? (l = -e.min.z, + s = Math.min(r / 2, a / 2)) : (l = -e.min.z, + s = Math.max(Math.min(r, a), -e.max.z)), + t.shadowMap.enabled && (l *= 3, + s /= 3), + l = Math.max(s + 1, l), + .1 > (l = Math.min(l, o + n)) - s && (s /= 2), + i.setNearFar(s, l) + } + } + }, + resetSelectionColor: function (A, e) { + this.modelManager.sceneState.setSelectionColor(A, e) + }, + calculateMinDistance: function (A, e) { + if (Bh.time("计算最小距离"), + A === e) { + var t = this.getBoundingBoxByIds([A]).getCenter(new y); + return { + start: t, + end: t, + minDistance: 0 + } + } + + function i(A, e) { + for (var t = 0, i = 0, o = 0; 3 > o; o += 1) { + var n = A.min.getComponent(o), + r = A.max.getComponent(o), + a = e.min.getComponent(o), + s = e.max.getComponent(o), + l = 0; + n > s ? l = n - s : a > r && (l = a - r), + t += l * l; + var c = Math.max(s, r) - Math.min(n, a); + i += c * c + } + return { + minDis: Math.sqrt(t), + maxDis: Math.sqrt(i) + } + } + var o = new y, + n = new y, + r = new y; + + function a(A, e, t, i, o, n, r, a, s) { + r.fromBufferAttribute(e, t), + a.fromBufferAttribute(e, i), + s.fromBufferAttribute(e, o), + n && (r.applyMatrix4(n), + a.applyMatrix4(n), + s.applyMatrix4(n)), + A.push(r), + A.push(a), + A.push(s) + } + + function s(A, e, t) { + var i = { + start: null, + end: null, + minDistance: t + }, + s = A.mesh, + l = A.indexInfo, + c = s.matrix.clone().multiply(A.matrix), + h = s.geometry, + d = h.attributes.position, + p = l ? l.indexStart : 0, + g = h.getIndex().array, + u = l ? l.indexStart + l.indexCount : g.length, + f = e.mesh, + m = e.indexInfo, + C = f.matrix.clone().multiply(e.matrix), + v = f.geometry, + I = v.attributes.position, + E = m ? m.indexStart : 0, + B = v.getIndex().array, + x = m ? m.indexStart + m.indexCount : B.length, + S = A.boundingBox, + w = e.boundingBox; + if (S.intersectsBox(w)) { + for (var M = p, b = u; b > M; M += 3) { + var U = []; + a(U, d, g[M], g[M + 1], g[M + 2], c, o, n, r); + var F = Tu.minDistanceBetweenTriToMesh(U, f, m, C); + i.minDistance > F.minDistance && (i.minDistance = F.minDistance, + i.start = F.start, + i.end = F.end) + } + return i + } + var K = S.getSize(new y), + Q = w.getSize(new y), + R = S.min.x - w.max.x, + T = S.min.y - w.max.y, + k = S.min.z - w.max.z, + D = w.min.x - S.max.x, + L = w.min.y - S.max.y, + N = w.min.z - S.max.z, + O = w.min.x > S.min.x ? S.min.x : w.min.x, + V = w.min.y > S.min.y ? S.min.y : w.min.y, + G = w.min.z > S.min.z ? S.min.z : w.min.z, + P = S.max.x > w.max.x ? S.max.x : w.max.x, + q = S.max.y > w.max.y ? S.max.y : w.max.y, + j = S.max.z > w.max.z ? S.max.z : w.max.z, + H = R; + switch (T > H && (H = T), + k > H && (H = k), + D > H && (H = D), + L > H && (H = L), + N > H && (H = N), + H) { + case R: + O += Q.x / 2, + P -= K.x / 2; + break; + case T: + V += Q.y / 2, + q -= K.y / 2; + break; + case k: + G += Q.z / 2, + j -= K.z / 2; + break; + case D: + O += K.x / 2, + P -= Q.x / 2; + break; + case L: + V += K.y / 2, + q -= Q.y / 2; + break; + case N: + G += K.z / 2, + j -= Q.z / 2 + } + for (var Y = new aA(new y(O, V, G), new y(P, q, j)), W = [], J = [], z = [], Z = [], X = p, _ = u; _ > X; X += 3) { + var $ = []; + a($, d, g[X], g[X + 1], g[X + 2], c, new y, new y, new y), + z.push($); + for (var AA = 0, eA = $.length; eA > AA; AA += 1) + if (Y.containsPoint($[AA])) { + W.push($); + break + } + } + for (var tA = E, iA = x; iA > tA; tA += 3) { + var oA = []; + a(oA, I, B[tA], B[tA + 1], B[tA + 2], C, new y, new y, new y), + Z.push(oA); + for (var nA = 0, rA = oA.length; rA > nA; nA += 1) + if (Y.containsPoint(oA[nA])) { + J.push(oA); + break + } + } + W.length || (W = z), + J.length || (J = Z); + var sA = Tu.minDistanceBetweenTriToTri(W, J); + return i.minDistance > sA.minDistance && (i.minDistance = sA.minDistance, + i.start = sA.start, + i.end = sA.end), + i + } + var l = this.modelManager.getMinDistanceObjects(A, e); + if (!l) + return -1; + var c = [], + h = { + start: null, + end: null, + minDistance: Number.POSITIVE_INFINITY + }; + for (var d in l) { + if (!l[d].boundingBox) { + var p = this.getBoundingBoxByIds([d]); + l[d].boundingBox = p + } + c.push(l[d]) + } + if (1 > c[0].length || 1 > c[1].length) + return Bh.timeEnd("计算最小距离"), + -1; + var g = c[0], + u = c[1], + f = g.length, + m = u.length, + C = null, + v = Number.POSITIVE_INFINITY; + if (f > 1 || m > 1) { + C = {}; + for (var I = 0; f > I; I += 1) + for (var E = g[I], B = 0; m > B; B += 1) { + var x = u[B]; + x.boundingBox = u.boundingBox, + E.boundingBox = g.boundingBox; + var S = i(E.boundingBox, x.boundingBox); + v = S.maxDis > v ? v : S.maxDis, + C[I + "_" + B] = S + } + } + for (var w = 0; f > w; w += 1) + for (var M = g[w], b = 0; m > b; b += 1) { + if (C) { + var U = C[w + "_" + b].minDis; + if (U > v || U > h.minDistance) + continue + } + var F = u[b]; + F.boundingBox = u.boundingBox, + M.boundingBox = g.boundingBox; + var K = s(M, F, h.minDistance); + if (h.minDistance > K.minDistance && (h.minDistance = K.minDistance, + h.start = K.start, + h.end = K.end), + 0 === h.minDistance) + return Bh.timeEnd("计算最小距离"), + h + } + return C = null, + Bh.timeEnd("计算最小距离"), + h + }, + registerDomEventListeners: function () { + this.domElement && this.controlManager.registerDomEventListeners(this.domElement) + }, + unregisterDomEventListeners: function () { + this.domElement && this.controlManager.unregisterDomEventListeners(this.domElement) + }, + registerEventListener: function (A, e) { + this.modelManager.addEventListener(A, e) + }, + unregisterEventListener: function (A, e) { + this.modelManager.removeEventListener(A, e) + }, + registerCameraEventListener: function (A, e) { + this.cameraControl.addEventListener(A, e) + }, + unregisterCameraEventListener: function (A, e) { + this.cameraControl.removeEventListener(A, e) + }, + registerDomEventListener: function (A, e) { + this.controlManager.addEventListener(A, e) + }, + unregisterDomEventListener: function (A, e) { + this.controlManager.removeEventListener(A, e) + }, + load: function (A) { + var e = this; + return this.modelManager.load(A, (function () {}), (function (A) { + Bh.time("Rendering: "), + e.camera.dirty = !0, + e.camera.dirty ? e.render() : (e.zoomAll(), + e.goToInitialView()), + Bh.timeEnd("Rendering: ") + })) + }, + loadWithType: function () {}, + loadTiles: function (A) { + var e = this; + return this.modelManager.loadTiles(A, (function () { + void 0 === e._useBatchMerge && (e._useBatchMerge = e.modelManager.shouldUseBatchRendering(), + vc.MergeComponent = e._useBatchMerge, + e._setupRenderer()) + }), (function (A) { + Bh.time("Rendering: "), + e.camera.dirty = !0, + e.camera.dirty ? e.render() : (e.zoomAll(), + e.goToInitialView()), + Bh.timeEnd("Rendering: ") + })) + }, + unload: function (A) { + var e = this.modelManager.unload(A); + return e && (vc.UserControlView || this.zoomAll(), + this.render()), + e + }, + unloadAll: function () { + this.modelManager.unloadAll(), + this.render() + }, + showModel: function (A) { + this.modelManager.showModel(A) && this.render() + }, + hideModel: function (A) { + this.modelManager.hideModel(A) && this.render() + }, + translateModel: function (A) { + var e = this._transformModelByKey(A); + e && e.switchToTranslateMode() + }, + rotateModel: function (A) { + var e = this._transformModelByKey(A); + e && e.switchToRotateMode() + }, + scaleModel: function (A) {}, + showScene: function (A, e) { + A && (A.setVisible(e), + this.render()) + }, + clearAll: function () { + this.getScene().clearAll() + }, + restore: function () { + this.getFilter().clear(), + this.getScene().disableClipPlanes(), + this.modelManager.dispatchEvent({ + type: Rc.ON_VIEWER_RESTORED + }) + }, + getScene: function () { + return this.modelManager.scene + }, + getCapsScene: function () { + return this.modelManager.capsScene + }, + getControlManager: function () { + return this.controlManager + }, + getUserdataByUserId: function (A) { + var e = this.modelManager.getNodeInfosByUserId(A); + return e && e instanceof Array ? e[0].userData : null + }, + getFilter: function () { + return this.filter + }, + getCurrentControlName: function () { + return this.controlManager.getCurrentControlName() + }, + getCurrentControlMode: function () { + return this.controlManager.getCurrentControlMode() + }, + setControlMode: function (A) { + this.controlManager.setControlMode(this, A), + this.render() + }, + setControlDefault: function () { + this.setControlMode(Gc.PICK) + }, + getBoundingBoxWorld: function () { + return this.getScene().getBoundingBoxWorld() + }, + getBoundingBox: function () { + return this.getScene().getBoundingBox() + }, + getModel: function (A) { + return this.modelManager.getModel(A) + }, + getModelManager: function () { + return this.modelManager + }, + setModelMatrix: function (A, e) { + var t = this.getModel(e); + t && t.setModelMatrix(A) + }, + getModelMatrix: function (A) { + var e = null, + t = this.getModel(A); + return t && (e = t.getModelMatrix()), + e + }, + overturnYAndZaxis: function (A) { + var e = this.getModel(A); + e && e.overturnYAndZaxis() + }, + zoomIn: function (A) { + void 0 === A && (A = .1), + 0 > A && (A = 0), + this.cameraControl.zoom(A) + }, + zoomOut: function (A) { + void 0 === A && (A = .1), + A > 0 ? A *= -1 : A = 0, + this.cameraControl.zoom(A) + }, + zoomAll: function (A, e, t) { + var i = this.getScene().getBoundingBox(); + this._zoomToLocalBox(i, A, e, t) + }, + zoomToBuilding: function (A, e, t) { + this.zoomAll(A, e, t) + }, + zoomToSelection: function (A, e, t) { + var i = this.getScene(), + o = this.getBoundingBoxByIds(this.modelManager.sceneState.getSelection()); + o.isEmpty() && (o = i.getBoundingBox()), + !0 === this.getTransitionAnimationState() ? this.animator.setStandardView(Uc.Keep, this, o, A) : this._zoomToLocalBox(o, A, e, t) + }, + _zoomToLocalBox: function (A, e, t, i) { + this.camera.zoomToBox(A, e, t, i), + this.cameraControl.update(!0, !0), + this.cameraControl.dirtyCamera(!0) + }, + zoomToBox: function (A, e, t, i) { + var o = new aA; + A ? (o.copy(A), + o.applyMatrix4(this.getScene().getMatrixGlobal())) : o.copy(this.getScene().getBoundingBox()), + !0 === this.getTransitionAnimationState() ? this.animator.setStandardView(Uc.Keep, this, o, e) : this._zoomToLocalBox(o, e, t, i) + }, + zoomToBoxByDirection: function (A, e, t, i) { + if (e) { + if (e && A) { + var o = A.clone(), + n = o.getCenter(new y).clone().add(e); + o.applyMatrix4(this.getScene().getMatrixGlobal()), + n.applyMatrix4(this.getScene().getMatrixGlobal()); + var r = n.clone().sub(o.getCenter(new y)); + r.length() > 1e-4 ? (r.normalize(), + this.camera.realUp.copy(H.DefaultUp), + this._zoomToLocalBox(o, t, i, r)) : this._zoomToLocalBox(o, t, i) + } + } else + this.zoomToBox(A, t, i) + }, + zoomToBoxWithOuterBox: function (A, e, t, i) { + if (e) { + if (e && A) { + var o = A.clone(), + n = e.getCenter(new y); + o.applyMatrix4(this.getScene().getMatrixGlobal()), + n.applyMatrix4(this.getScene().getMatrixGlobal()); + var r = n.clone().sub(o.getCenter(new y)); + r.length() > 1e-4 ? (r.normalize(), + this.camera.realUp.copy(H.DefaultUp), + this.controlManager.zoomToBox(this, o, t, i, r)) : this.controlManager.zoomToBox(this, o, t, i) + } + } else + this.zoomToBox(A, t, i) + }, + getObjectsInBox: function (A, e) { + var t = new aA; + return t.copy(A), + t.applyMatrix4(this.getScene().getMatrixGlobal()), + wg.getObjectsInBox(this.getScene(), t, this.modelManager, this, e) + }, + setStandardView: function (A, e, t, i) { + var o = this.camera, + n = this.getScene().getBoundingBox(); + if (this.transitionAnimationState) + this.animator.setStandardView(A, this, n, e, t, i); + else { + o.setStandardView(A, n); + this.camera.zoomToBox(n, e); + this.cameraControl.update(!0, !0), + i && i() + } + }, + rotateCameraByViewCubeSide: function (A) { + this._viewCubeAnimator && (this._viewCubeAnimator.cancelAnimation(), + this._viewCubeAnimator = void 0); + var e = this.camera, + t = this.getScene().getGeometryBoundingBox(), + i = new Cp, + o = this; + i.rotateCameraByViewCubeSide(e, t, A, (function (A, e, t, i) { + o.camera.position.copy(t); + var n = new y(0, 1, 0); + n.applyQuaternion(e), + o.camera.up = n, + o.camera.realUp = n.clone(), + o.camera.lookAt(i), + o.camera.target = i, + 1 > A || o.camera.quaternion.copy(e), + o.cameraControl.update(!0) + })), + this._viewCubeAnimator = i + }, + cancelCurrentAnimationByViewCube: function () { + this._viewCubeAnimator && (this._viewCubeAnimator.cancelAnimation(), + this._viewCubeAnimator = void 0) + }, + getLineSelectRange: function () { + return vc.LineSelectRange + }, + setLineSelectRange: function (A) { + vc.LineSelectRange = A + }, + _setStandardView: function (A, e) { + var t = this.camera, + i = this.getScene().getBoundingBox(); + t.setStandardView(A, i), + t.zoomToBox(i, e) + }, + setStandardViewWithBox: function (A, e, t, i) { + if (e ? e.applyMatrix4(this.getScene().getMatrixGlobal()) : e = this.getScene().getBoundingBox(), + this.transitionAnimationState) + this.animator.setStandardView(A, this, e, t); + else { + var o = this.camera; + o.setStandardView(A, e), + o.zoomToBox(e, t, i), + this.cameraControl.update(!0, !0) + } + }, + setTopView: function (A, e, t) { + this.setStandardViewWithBox(Uc.Top, A, e, t) + }, + setInitialView: function (A) { + this.initialView = A, + this._setStandardView(A) + }, + goToInitialView: function (A) { + this.setStandardView(this.initialView, A, null) + }, + setHomeView: function (A) { + this.currentHomeView = A, + this._setStandardView(A) + }, + getHomeView: function () { + return this.currentHomeView + }, + goToHomeView: function (A) { + this.setStandardView(this.currentHomeView, A, null) + }, + rotateByAxis: function (A, e, t) { + var i = t || this.cameraControl.calculatePivot(kc.CENTER, null), + o = 2 * Math.PI / 60 / 60 * A; + if (e && "x" !== e) { + if ("y" !== e) + return void Bh.warn("Illegal rotation axis for ViewerImpl.rotateByAxis()."); + this.cameraControl.handleRotation(0, -o, i) + } else + this.cameraControl.handleRotation(-o, 0, i); + this.cameraControl.update(!0) + }, + lookAt: function (A, e, t) { + var i = new y; + i.subVectors(e, A), + this.camera.lookAtEx(e, i, t), + this.cameraControl.updateCamera(e), + this.render() + }, + setImageResPath: function (A) { + vc.TextureResRoot = A + }, + setLimitFrameTime: function (A) { + vc.IncrementRender && (A > 0 || (A = 30), + vc.LimitFrameTime = A) + }, + limitFrameRate: function (A) { + vc.IncrementRender && (A > 0 || (A = 4), + vc.LimitFrameTime = 1e3 / A) + }, + transformCamera: function (A) { + return Rd.transformCamera(A, this.modelManager.scene) + }, + getCamera: function () { + var A = this.getScene().getMatrixGlobal(), + e = this.cameraControl.getCamera(), + t = this.cameraControl.getCameraName(), + i = new Qd(t, e.position, e.target, e.up); + i = cp.drawingToWorld(i, A); + var o = {}; + if (this.cameraStateWithFrustum) { + var n = 2 * (e.near * Math.tan(.5 * a.DEG2RAD * e.fov) / e.zoom); + o = new Qd(t, i.position, i.target, i.up, e.fov, void 0, e.aspect * n, n) + } else + o = new Qd(t, i.position, i.target, i.up, e.fov, void 0); + return JSON.stringify(o) + }, + setCameraStateWithFrustum: function (A) { + this.cameraStateWithFrustum = A + }, + setCamera: function (A, e, t) { + this.camera.dirty = !0; + var i = this, + o = Rd.parseCameraInfo(A); + if (null === o) + Bh.log("Invalid camera info string. Fail to set camera."); + else if (this.switchToCamera(o.name)) { + var n = this.getScene().getMatrixGlobal(), + r = cp.worldToDrawing(o, n); + if (this.transitionAnimationState) { + var a = { + position: this.camera.position.clone(), + target: this.camera.target.clone(), + up: this.camera.realUp.clone() || this.camera.up.clone() + }; + this.animator.active(a, r, this, (function (A) { + i.cameraControl.update(!0, !0) + }), (function () { + o.frustumWidth && o.frustumHeight && i.resizeByFrustum(o.frustumWidth, o.frustumHeight), + t && t() + })) + } else { + var s = new y; + s.subVectors(r.target, r.position), + this.camera.lookAtEx(r.target, s, r.up), + e && this.cameraControl.updateCamera(), + o.frustumWidth && o.frustumHeight && (i.cameraControl.update(!0, !0), + i.resizeByFrustum(o.frustumWidth, o.frustumHeight)), + t && t() + } + } + }, + getRenderBufferScreenShot: function (A, e, t, i) { + this._render(); + var o = this.getRenderer().domElement, + n = o.toDataURL("image/png"), + r = o.width, + a = o.height, + s = window.devicePixelRatio || 1, + l = e || r / s, + c = t || a / s; + if (!l || !c) + return i ? (i(n), + null) : n; + var h, d = null, + p = null, + g = 0, + u = 0; + if (l > c || l / c > r / a ? (d = l, + u = c / 2 - (p = a / r * l) / 2) : (p = c, + g = l / 2 - (d = r / a * c) / 2), + i) + return (h = new Image).onload = function () { + var e = document.createElement("canvas"), + t = e.getContext("2d"); + e.width = l, + e.height = c, + A && (t.fillStyle = A, + t.fillRect(0, 0, l, c)), + t.drawImage(h, g, u, d, p); + var o = e.toDataURL("image/png"); + i(o) + }, + h.src = n, + null; + (h = new Image).src = n; + var f = document.createElement("canvas"), + m = f.getContext("2d"); + return f.width = l, + f.height = c, + A && (m.fillStyle = A, + m.fillRect(0, 0, l, c)), + m.drawImage(h, g, u, d, p), + f.toDataURL("image/png") + }, + screenShot: function (A, e, t) { + var i = this; + return this._render(), + function () { + var o = i.getRenderer().domElement, + n = o.toDataURL("image/png"), + r = o.width, + a = o.height, + s = (window, + A), + l = e; + if (!s || !l) + return t ? (t(n), + null) : n; + var c = null, + h = null, + d = 0, + p = 0; + if (s > l || s / l > r / a ? (c = s, + p = l / 2 - (h = a / r * s) / 2) : (h = l, + d = s / 2 - (c = r / a * l) / 2), + t) { + var g = new Image; + return g.onload = function () { + var A = document.createElement("canvas"), + e = A.getContext("2d"); + A.width = s, + A.height = l, + e.drawImage(g, d, p, c, h); + var i = A.toDataURL("image/png"); + t(i) + }, + g.src = n, + null + } + }() + }, + canvas2image: function (A, e, t, i) { + var o = null, + n = this; + return i ? (this.getRenderBufferScreenShot(A, e, t, (function (A) { + i(A), + n.render() + })), + null) : (o = this.getRenderBufferScreenShot(A, e, t), + this.render(), + o) + }, + lockAxisZ: function (A, e) { + var t = this.cameraControl; + if (t) { + var i = t.getZenith(), + o = this.getBoundingBox().getCenter().clone(); + if (A && void 0 !== e || (e = null), + e) { + var n = e[0], + r = e[1]; + i > r ? t.handleRotation(0, r - i, o) : n > i && t.handleRotation(0, n - i, o), + this.render() + } + this.cameraControl.lockAxisZ(A), + this.cameraControl.setLockAxisZRange(e) + } + }, + isLockedAxisZ: function () { + return this.cameraControl.isLockedAxisZ() + }, + enableTranslucentByDClick: function (A) { + vc.EnableDemolishByDClick = A + }, + enableHitDetection: function (A) { + vc.EnableHitDetection = A + }, + enableRotate: function (A) { + jh.NoRotate = !A + }, + rotateCamera: function (A, e) { + this.cameraControl.processRotate(A, e), + this.cameraControl.update() + }, + getActiveCameraInfo: function () { + var A = {}; + A.up = new y, + A.dir = new y; + var e = this.camera, + t = e.getWorldDirection(new y); + return A.up.copy(e.realUp || e.up), + A.dir.copy(t), + A.quaternion = e.quaternion.clone(), + A + }, + calculationPlanes: function () { + if (this.isRecalculationPlanes) { + this.isRecalculationPlanes = !1; + var A = this.getScene(), + e = this.getBoundingBoxByIds(); + e.isEmpty() && (e = A.getBoundingBox()), + A.getClipPlanes().calculationPlanes(e.getSize(new y), e.getCenter(new y)), + this.render() + } + }, + recalculationPlanes: function () { + this.isRecalculationPlanes = !0 + }, + setOctantDepth: function (A) { + vc.OctantDepth = A + }, + resizePool: function (A) { + vc.maxObjectNumInPool = A, + this.modelManager.updateSceneRenderable(), + this.render() + }, + setCategoriesToHighPriority: function (A, e) { + this.modelManager.setCategoriesToHighPriority(A, 0 === e ? "inner" : "outer") + }, + clearCategoriesFromHighPriority: function (A) { + this.modelManager.clearCategoriesFromHighPriority(0 === A ? "inner" : "outer") + }, + clearAllCategoriesFromHighPriority: function () { + this.modelManager.clearAllCategoriesFromHighPriority() + }, + isolate: function (A, e) { + var t = this.getFilter(); + switch (e) { + case "hide": + t.setIsolateConditions(A, Nc.HIDDEN_OTHERS); + break; + case "translucent": + t.setIsolateConditions(A, Nc.TRANSLUCENT_OTHERS); + break; + default: + Bh.warn("no this isolate state : " + e) + } + }, + setIsolateMaterial: function (A) { + this.getFilter().setIsolateMaterial(A) + }, + resetIsolateMaterial: function () { + this.getFilter().resetIsolateMaterial() + }, + setOrbitButton: function (A) { + var e = this.controlManager._getControlByName(this, Gc.ORBIT), + i = this.controlManager._getControlByName(this, Gc.PICK), + o = {}; + "left" === A ? o = { + ORBIT: t.LEFT, + PAN2: t.MIDDLE, + PAN: t.RIGHT + } : "right" === A && (o = { + ORBIT: t.RIGHT, + PAN2: t.MIDDLE, + PAN: t.LEFT + }), + e && e.updateButtons(o), + i && i.updateButtons(o) + }, + showPickedInformation: function (A) {}, + setOrbitEnabled: function (A) { + jh.NoRotate = !0 !== A + }, + getOrbitEnabled: function () { + return !jh.NoRotate + }, + setSelectPadCallback: function (A) { + var e = this.controlManager.getCurrentControlMode(); + e && e.selectPad && (e.selectPad.callback = A) + }, + setDeviceMobile: function (A) { + vc.IsMobile = A || !1 + }, + setPointRotateMode: function (A) { + jh.RotatePivotMode = A + }, + worldToDrawing: function (A) { + if (!this.cameraControl) + return Bh.warn("camera is not initialized!!!"), + null; + var e = this.getScene().worldToDrawing(A); + return { + x: e.x, + y: e.y, + z: e.z + } + }, + drawingToWorld: function (A) { + if (!this.cameraControl) + return Bh.warn("camera is not initialized!!!"), + null; + var e = this.getScene().drawingToWorld(A); + return { + x: e.x, + y: e.y, + z: e.z + } + }, + worldToCanvas: function (A) { + var e = this.cameraControl; + if (!e) + return Bh.warn("camera is not initialized!!!"), + null; + var t = e.getContainerDimensions(); + if (!t) + return null; + var i = e.getCamera(), + o = this.getScene().worldToDrawing(A); + return Rd.drawingToCanvas(i, o, t.width, t.height) + }, + canvasToWorld: function (A) { + var e = this.cameraControl; + if (!e) + return Bh.warn("camera is not initialized!!!"), + null; + var t = e.getContainerDimensions(); + if (!t) + return null; + var i = e.getCamera(), + o = this.getScene(), + n = Rd.canvasToDrawing(i, A, t.width, t.height), + r = o.drawingToWorld(n); + return { + x: r.x, + y: r.y, + z: r.z + } + }, + worldToClient: function (A) { + var e = this.cameraControl; + if (!e) + return Bh.warn("camera is not initialized!!!"), + null; + var t = e.getContainerDimensions(); + if (!t) + return null; + var i = e.getCamera(), + o = this.getScene().worldToDrawing(A), + n = Rd.drawingToCanvas(i, o, t.width, t.height); + return n ? (n.x += t.left, + n.y += t.top, + n) : null + }, + worldPointsToClient: function (A, e) { + var t = this.cameraControl; + if (!t) + return Bh.warn("camera is not initialized!!!"), + null; + var i = t.getContainerDimensions(); + if (!i) + return null; + var o = t.getCamera(), + n = this.getScene(), + r = n.worldToDrawing(A), + a = n.worldToDrawing(e), + s = Rd.drawingPointsToCanvas(o, r, a, i.width, i.height); + return s ? (s.start.x += i.left, + s.start.y += i.top, + s.end.x += i.left, + s.end.y += i.top, + s) : null + }, + clientToWorld: function (A) { + var e = this.cameraControl; + if (!e) + return Bh.warn("camera is not initialized!!!"), + null; + var t = e.getContainerDimensions(); + if (!t) + return null; + (n = { + x: A.x, + y: A.y, + z: A.z + }).x -= t.left, + n.y -= t.top; + var i = e.getCamera(), + o = this.getScene(), + n = Rd.canvasToDrawing(i, n, t.width, t.height), + r = o.drawingToWorld(n); + return { + x: r.x, + y: r.y, + z: r.z + } + }, + insideCamera: function (A) { + var e = this.cameraControl; + if (!e) + return Bh.warn("camera is not initialized!!!"), + !1; + var t = this.getScene().worldToDrawing(A); + return e.getFrustum().containsPoint(t) + }, + locateToPointWithParallelEye: function (A) { + var e = this.cameraControl; + if (!e) + return Bh.warn("camera is not initialized!!!"), + !1; + var t = this.getScene().worldToDrawing(A); + e.flyToPointWithParallelEye(t) + }, + locateToPoint: function (A) { + var e = this.cameraControl; + if (!e) + return Bh.warn("camera is not initialized!!!"), + !1; + var t = this.getScene().worldToDrawing(A); + e.flyToPoint(t) + }, + enableHover: function (A) { + vc.Hover = A + }, + getObjectsByClientCoordinates: function (A) { + return new fp(this).getObjectsByClientCoordinates(A) + }, + getIBLManager: function () { + return this.IBLManager + }, + loadEnvMap: function (A) { + for (var e = ["posx.hdr", "negx.hdr", "posy.hdr", "negy.hdr", "posz.hdr", "negz.hdr"], t = [], i = 0; 6 > i; i += 1) + t.push("/" + A + "/" + e[i]); + var o = this; + (new(void 0)).load(1015, t, (function (A) { + o.environmentCubeMap = A, + o.modelManager.updateMaterialsValue("envMap", A), + o.render() + })) + }, + setEnvMapIntensity: function (A) { + this.modelManager.updateMaterialsValue("envMapIntensity", A), + this.setRenderStateChanged(!0), + this.render() + }, + closeEnvMap: function () { + this.modelManager.updateMaterialsValue("envMap", null), + this.render() + }, + enableSSAO: function (A) { + return !vc.IncrementRender && (vc.EnableRenderPass = A, + vc.SSAO = A, + this.setRenderStateChanged(!0), + this.render(), + !0) + }, + switchNewStyleMaterial: function (A) { + this.modelManager.switchNewStyleMaterial(A), + this.setRenderStateChanged(!0), + this.render() + }, + enableColorWithoutLight: function (A) { + this.modelManager.enableColorWithoutLight(A), + this.setRenderStateChanged(!0), + this.render() + }, + addPlane: function (A, e, t, i) { + var o = new y; + o.addVectors(new y(A.x, A.y, A.z), new y(e.x, e.y, e.z)), + o.multiplyScalar(.5); + var n = new Ue(new et(e.x - A.x, e.y - A.y), new jA({ + side: 2, + transparent: !0, + depthTest: !0 + })); + n.position.copy(o), + n.renderOrder = 10, + this.getScene().getOrCreateGroup(gp.CUSTOMPLANE, { + globalSpace: !0 + }).add(n), + n.updateMatrixWorld(!0); + var r = this; + return (new Aa).load(t, (function (A) { + n.material.map = A, + n.material.needsUpdate = !0, + r.setRenderStateChanged(!0), + i && i() + })), + n + }, + removePlane: function (A) { + var e = this.getScene().getGroup(gp.CUSTOMPLANE); + e && e.remove(A) + }, + clearPlane: function () { + var A = this.getScene().getGroup(gp.CUSTOMPLANE); + A && A.clear() + }, + enableTextureMapping: function (A) { + vc.EnableTextureMapping = A + }, + enableLightmap: function (A) { + vc.EnableLightmap !== A && (vc.EnableLightmap = A) + }, + setLightmapIntensity: function (A) { + vc.LightmapIntensity !== A && (vc.LightmapIntensity = A) + }, + setReverseWheelDirection: function (A) { + jh.ReverseWheelDirection = Boolean(A) + }, + getReverseWheelDirection: function () { + return jh.ReverseWheelDirection + }, + setMovementSpeedRate: function (A) { + void 0 !== A && (jh.MovementSpeedRate = A) + }, + getMovementSpeedRate: function () { + return jh.MovementSpeedRate + }, + moveTo: function (A, e, t) { + var i = this.controlManager.control; + i && i.moveTo(A, e, t) + }, + rotateTo: function (A) { + var e = this.controlManager.control; + e && e.rotateTo(A) + }, + enableOcclusionTranslucent: function (A) { + vc.OcclusionTranslucentEnabled = Boolean(A) + }, + setOcclusionOpacity: function (A) { + vc.OcclusionOpacity = A + }, + setOcclusionDistanceToCamera: function (A) { + vc.OcclusionDistanceToCamera = A + }, + fitAndRotateBySelection: function () { + this.cameraControl && this.cameraControl.fitAndRotateBySelection() + }, + setRoamingWalkHeight: function (A, e, t) { + if (Array.isArray(A)) { + var i = this.cameraControl; + if (!i) + return Bh.log("camera is not initialized!!!"), + !1; + if (e > 0 || (e = 1750), + void 0 === t && (t = !0), + i.setCameraHeight(A, e), + t) { + var o = this.controlManager.getCurrentControl(); + o && o.name === Gc.WALK && o.update && i.flyOnWorld() + } + } else + Bh.log("elevations is not arry") + }, + setRoamingWalkAbsoluteHeight: function (A, e) { + var t = this.cameraControl; + if (!t) + return Bh.log("camera is not initialized!!!"), + !1; + if (void 0 === e && (e = !0), + t.setCameraAbsoluteHeight(A), + e) { + var i = this.controlManager.getCurrentControl(); + i && i.name === Gc.WALK && i.update && t.flyOnWorld() + } + }, + cameraToWorld: function (A) { + return this.camera ? cp.drawingToWorld(A, this.getScene().getMatrixGlobal()) : null + }, + cameraToDrawing: function (A) { + return this.camera ? cp.worldToDrawing(A, this.getScene().getMatrixGlobal()) : null + }, + clearSelection: function () { + this.modelManager.sceneState.clearSelection() + }, + clearModelSelection: function () { + this.modelManager.modelState.clearSelection() + }, + addToSelection: function (A) { + this.modelManager.sceneState.addSelection(A) + }, + addToModelSelection: function (A) { + this.modelManager.modelState.addSelection(A) + }, + removeFromSelection: function (A) { + this.modelManager.sceneState.removeSelection(A) + }, + removeFromModelSelection: function (A) { + this.modelManager.modelState.removeSelection(A) + }, + setSelection: function (A) { + this.modelManager.sceneState.setSelection(A) + }, + setModelSelection: function (A) { + this.modelManager.modelState.setSelection(A) + }, + getSelection: function () { + return this.modelManager.sceneState.getSelection() + }, + getModelSelection: function () { + return this.modelManager.modelState.getSelection() + }, + setSelectionColor: function (A, e) { + var t = A, + i = e; + A instanceof Xh && (t = A.getHex(), + i = A.getAlpha()), + this.modelManager.sceneState.setSelectionColor(t, i); + var o = this.rendererManager.getPickingEffecter(); + o && o.setSelectionColor(t, i) + }, + getSelectionColor: function () { + return this.modelManager.sceneState.getSelectionColor() + }, + restoreSelectionColor: function () { + this.setSelectionColor(new Xh(vc.SelectionColor.color, vc.SelectionColor.opacity)) + }, + setModelSelectionColor: function (A, e) { + this.modelManager.modelState.setSelectionColor(A, e) + }, + getScreenCoordFromSceneCoordAndCheckCover: function (A) { + var e = void 0, + t = !1; + if ("[object Array]" == Object.prototype.toString.call(A)) + e = new y(A[0], A[1], A[2]); + else { + if ("[object Object]" != Object.prototype.toString.call(A)) + return; + e = new y(A.x, A.y, A.z) + } + if (e) { + var i = this.camera.position, + o = i.distanceTo(e), + n = new Ds(i, e.clone().sub(i).normalize()), + r = this.cameraControl.getIntersectContext({ + x: 100, + y: 100 + }), + a = this.cameraControl.intersector.getIntersectByRay(r, n.ray); + if (!a) + return; + t = o - 300 > i.distanceTo(a.point) + } + return { + screenCoord: this.getScreenCoordFromSceneCoord(e), + cover: t + } + }, + pickByPoint: function (A) { + var e = this.cameraControl; + if (!1 === e.enabled) + return !1; + var t = new s(A.x, A.y), + i = e.getIntersectContext(t), + o = e.intersector.pick(i), + n = this.getScene(); + if (o) { + n.intersectToWorld(o, this); + var r = {}; + return r.faceIndex = o.faceIndex, + r.componentKey = o.userId, + r.worldPosition = o.worldPosition, + r.worldBoundingBox = o.worldBoundingBox, + r + } + return null + }, + pickByPointWithNormal: function (A) { + var e = this.getScene(), + t = this.cameraControl; + if (!1 === t.enabled) + return null; + var i = new s(A.x, A.y), + o = t.getIntersectContext(i), + n = t.intersector.pick(o); + if (!n) + return null; + e.intersectToWorld(n, this), + n.cx = i.x, + n.cy = i.y; + var r = []; + r.push(n); + var a = e.getMatrixGlobal(), + l = n.face.normal.clone(), + c = new CA(n.worldPosition.clone(), l); + c.applyMatrix4(a); + var h = t.intersector.getIntersectByRay(o, c); + return h && (e.intersectToWorld(h, this), + r.push(h)), + r + }, + toDefaultOrthographicCamera: function (A) { + this.switchToCamera(Ec.ORTHOGRAPHIC), + (A || void 0 === A) && this.render() + }, + toDefaultPerspectiveCamera: function (A) { + this.switchToCamera(Ec.PERSPECTIVE), + (A || void 0 === A) && this.render() + }, + getCameraNameList: function () { + return ["pesp", "orth"].concat(this.modelManager.getCameraNameList()) + }, + switchToCamera: function (A) { + var e = !0; + if (A === Ec.PERSPECTIVE) + this.camera = this.defaultCamera, + this.camera.toPerspective(); + else if (A === Ec.ORTHOGRAPHIC) + this.camera = this.defaultCamera, + this.camera.toOrthographic(); + else { + var t = this.modelManager.getCamera(A); + t ? this.camera = t : (Bh.log("Fail to switch because not found camera '" + A + "'"), + e = !1) + } + return e && this.cameraControl.setCamera(this.camera), + this.render(), + e + }, + getNumOfElements: function () { + return this.modelManager.getNumOfElements() + }, + getNumOfRenderables: function () { + return this.modelManager.getNumOfRenderables() + }, + getNumOfTriangles: function () { + return this.modelManager.getNumOfTriangles() + }, + setLightPreset: function (A) { + this.getScene().setLightPreset(A), + this.setRenderStateChanged(!0) + }, + getLightPreset: function () { + return this.getScene().getLightPreset() + }, + setLightIntensityFactor: function (A) { + this.getScene().setLightIntensityFactor(A), + this.render() + }, + setAmbientLightIntensity: function (A) { + this.getScene().setAmbientLightIntensity(A), + this.render() + }, + getAmbientLightIntensity: function () { + return this.getScene().getAmbientLightIntensity() + }, + setWalkHeightLocked: function (A) { + var e = this.controlManager.getCurrentControl(); + e && e.name === Gc.WALK && e.setHeightLocked(A) + }, + setWalkLookMousePressed: function (A) { + var e = this.controlManager.getCurrentControl(); + e && e.name === Gc.WALK && e.setDragLook(A) + }, + setWalkSpeedRate: function (A) { + var e = this.controlManager.getCurrentControl(); + e && e.name === Gc.WALK && (jh.MovementSpeedRate = A) + }, + getWalkSpeedRate: function () { + return jh.WalkSpeedRate + }, + setDrawingStyle: function (A) { + vc.DrawingStyle = A, + this.modelManager.applyFilter(), + this.setRenderStateChanged(!0) + }, + getWireframeColor: function (A) { + var e = this.modelManager; + if (A && e.models[A]) + return e.models[A].wireframeManager.getWireframeColor(); + for (var t in e.models) { + return e.models[t].wireframeManager.getWireframeColor() + } + }, + setWireframeColor: function (A, e) { + var t = this.modelManager; + if (e && t.models[e]) + t.models[e].wireframeManager.setWireframeColor(new LA(A), A.a || 1); + else + for (var i in t.models) + t.models[i].wireframeManager.setWireframeColor(new LA(A), A.a || 1); + this.setRenderStateChanged(!0) + }, + restoreWireframeColor: function (A) { + var e = this.modelManager; + if (A && e.models[A]) + e.models[A].wireframeManager.restoreWireframeColor(); + else + for (var t in e.models) + e.models[t].wireframeManager.restoreWireframeColor(); + this.setRenderStateChanged(!0) + }, + setInstanceMode: function (A) { + !vc.Instance === A && (vc.Instance = A, + this.getScene().getOrCreateGroup(gp.INSTANCEGEOMETRY, { + globalSpace: !0 + }).visible = !!A) + }, + setTransitionAnimationState: function (A) { + this.transitionAnimationState = A + }, + getTransitionAnimationState: function () { + return this.transitionAnimationState + }, + clipPoint: function (A) { + var e = this.getRenderer().clippingPlanes; + if (e && e.length > 0) + for (var t = 0; e.length > t; t += 1) { + var i = e[t]; + if (A.dot(i.normal) < -i.constant) + return !0 + } + return !1 + }, + setExposureShift: function (A) { + vc.ToneMapping = 1, + this.modelManager.updateMaterialsValue("shift", A > 0 ? -.4 * A + .5 : -4 * A + .5), + this.setRenderStateChanged(!0) + }, + setRenderStateChanged: function (A) { + this.modelManager && this.modelManager.setRenderStateChanged(A) + }, + isRenderStateChanged: function () { + return this.modelManager._renderStateChanged + }, + getComponentInfoByUserId: function (A) { + return this.modelManager.getComponentInfoByUserId(A) + }, + getBoundingBoxByIds: function (A) { + var e = new aA; + if (Array.isArray(A)) { + for (var t = 0; A.length > t; t += 1) + if (!this.modelManager.isHiddenUserId(A[t])) { + var i = this.getModelByComponentKey(A[t]), + o = this.getComponentInfoByUserId(A[t]); + if (o) + if (i) { + var n = o.boundingBox.clone().applyMatrix4(i.getModelMatrix()); + e.union(n) + } else + e.union(o.boundingBox) + } + } else + for (var r in A) + if (!this.modelManager.isHiddenUserId(r)) { + var a = this.getModelByComponentKey(r), + s = this.getComponentInfoByUserId(r); + if (s) + if (a) { + var l = s.boundingBox.clone().applyMatrix4(a.getModelMatrix()); + e.union(l) + } else + e.union(s.boundingBox) + } + return e.isEmpty() || e.applyMatrix4(this.getScene().getMatrixGlobal()), + e + }, + setConditionsOnDemandLoad: function (A, e, t, i) { + e = e || !0, + this.modelManager.setConditionsOnDemandLoad(A), + e && this.modelManager.loadGeopkOnDemand(t, i) + }, + loadGeopkOnDemand: function (A, e, t, i) { + var o = this; + this.modelManager.loadGeopkOnDemand(A, e, t, (function () { + var A = o.modelManager.getNodeInfos(); + o.filter.reinitFilterManager(A), + o.setRenderStateChanged(!0), + o.render(), + i && i() + })) + }, + unloadGeopkOnDemand: function (A, e) { + var t = this; + this.filter._hasVisibleFilter() && (this.filter.showByIds(A), + this.filter.removeFromIsolateList(A)), + this.filter._hasOverrideMaterialFilter() && (this.filter.addToOverrideListByColor(A, null), + this.filter.addToWireframeByWireframe(A, null)), + this.filter._hasTransparentFilter() && this.filter.opaqueByIds(A), + this.removeFromSelection(A); + for (var i = 0, o = A.length; o > i; i += 1) + ; + this.modelManager.unloadGeopkOnDemand(A, (function () { + var A = t.modelManager.getNodeInfos(); + t.filter.reinitFilterManager(A), + t.setRenderStateChanged(!0), + t.render(), + e && e() + })) + }, + getBoundingBoxOnDemand: function () { + return this.modelManager.getBoundingBoxOnDemand() + }, + getScreenCoordFromSceneCoord: function (A) { + var e = []; + if (A.isVector3) { + var t = A.clone(); + t.applyMatrix4(this.camera.matrixWorldInverse); + var i = t.z > 0; + return t.applyMatrix4(this.camera.projectionMatrix), + e[0] = (t.x + 1) * this.domElement.clientWidth / 2, + e[1] = (1 - t.y) * this.domElement.clientHeight / 2, + e[2] = i ? 1 : 0, + e + } + if (Array.isArray(A)) { + var o = new y(A[0], A[1], A[2]); + o.applyMatrix4(this.camera.matrixWorldInverse); + i = o.z > 0; + return o.applyMatrix4(this.camera.projectionMatrix), + e[0] = (o.x + 1) * this.domElement.clientWidth / 2, + e[1] = (1 - o.y) * this.domElement.clientHeight / 2, + e[2] = i ? 1 : 0, + o = null, + e + } + }, + _checkDataChanged: function () { + var A = this.modelManager; + A.hasModelDataReady() && (this.getFilter().isStateChanged() || this.isRenderStateChanged()) && (this.isRenderStateChanged() && this.setRenderStateChanged(!1), + this.getFilter().isStateChanged() && this.getFilter().disableStateChanged(), + this.needApplyFilter = !0), + this.needCheckTilesDataChange && (this.needCheckTilesDataChange = !1, + A.checkTilesDataChanged(this.camera, this.getRenderer())) + }, + _checkLayerDataLoading: function () { + return !(!this.modelManager.isLayerData() || !this._layerDataLoading) && (this.getFilter().isStateChanged() && this.getFilter().disableStateChanged(), + !0) + }, + setOutlineEdgeColor: function (A) { + this.rendererManager.composer && this.rendererManager.composer.setOutlineEdgeColor(A); + var e = this.rendererManager.getPickingEffecter(); + e && e.setLineSelectionColor(A.getHex(), A.opacity) + }, + getOutlineEdgeColor: function () { + if (this.rendererManager.composer) + return this.rendererManager.composer.getOutlineEdgeColor(); + var A = this.rendererManager.getPickingEffecter(); + return A ? A.getLineSelectionColor() : void 0 + }, + restoreOutlineEdgeColor: function (A) { + this.setOutlineEdgeColor(new Xh(vc.SelectionColor.color, vc.SelectionColor.opacity)) + }, + enableSelectedColorIsAffectedByLight: function (A) { + vc.InfluencedByLight = A, + vc.InfluencedByLight ? delete this.modelManager.getSceneState().selectionMaterial.defines.NOTAFFECTEDBYLIGHT : this.modelManager.getSceneState().selectionMaterial.defines.NOTAFFECTEDBYLIGHT = "" + }, + enableLogarithmicDepthBuffer: function (A) { + vc.logarithmicDepthBuffer !== A && (vc.logarithmicDepthBuffer = A, + this.renderSettings.logarithmicDepthBuffer = A, + this.rendererManager.resetupRenderer(this.renderSettings || {}), + this._render(), + this.updateShadowLight()) + }, + enableBlinkComponents: function (A) { + this.modelManager.isBlinkPermited() || (this.modelManager.enableBlink(A), + this.render()) + }, + setBlinkComponentsById: function (A) { + this.modelManager.isBlinkPermited() || this.modelManager.sceneState.setBlinkComponentsById(A) + }, + addBlinkComponentsById: function (A) { + this.modelManager.isBlinkPermited() || this.modelManager.sceneState.addBlinkComponentsById(A) + }, + clearBlinkComponentsById: function (A) { + this.modelManager.isBlinkPermited() || this.modelManager.sceneState.clearBlinkComponentsById(A) + }, + clearAllBlinkComponents: function () { + this.modelManager.isBlinkPermited() || this.modelManager.sceneState.clearAllBlinkComponents() + }, + getBlinkComponents: function () { + return this.modelManager.isBlinkPermited() ? null : this.modelManager.sceneState.getBlinkComponents() + }, + setBlinkColor: function (A) { + this.modelManager.isBlinkPermited() || this.modelManager.setBlinkColor(A.color, A.opacity) + }, + setBlinkIntervalTime: function (A) { + this.modelManager.isBlinkPermited() || this.modelManager.setBlinkIntervalTime(A) + }, + getModelByComponentKey: function (A) { + var e = null; + for (var t in this.modelManager.models) + if (this.modelManager.models.hasOwnProperty(t) && (e = this.modelManager.getModel(t)) && e.isLoaded() && e.hasComponent(A)) + return e + }, + getSceneState: function () { + return { + state: this.getFilter().saveState(), + camera: this.getCamera(), + selection: this.getSelection(), + modelSelection: this.getModelSelection() + } + }, + setSceneState: function (A) { + void 0 !== A.camera && "object" !== lc(A.camera) || (A.camera = JSON.stringify(A.camera)), + this.setCamera(A.camera, !1), + this.setSelection(A.selection), + this.setModelSelection(A.modelSelection), + this.getFilter().loadState(A.state) + }, + setComponentPositionByKey: function (A, e) { + var t = (new y).fromArray(e), + i = (this.getModelManager(), + new M, + this.modelManager.getComponent(A)); + if (i && i.length >= 1) { + for (var o = new aA, n = 0, r = i.length; r > n; n += 1) { + o && o.union(i[n].boundingBox) + } + var a = new y; + o.getCenter(a); + var s = this.getModelByComponentKey(A); + if (s) { + var l = s.getModelMatrix(); + if (l) { + var c = new M; + c.getInverse(l), + t.applyMatrix4(c) + } + } + t.sub(a); + var h = (new M).makeTranslation(t.x, t.y, t.z); + this.componentApplyMatrix2(A, h, !0), + this.updateTransformControlIfBindingComKeyEqual(A) + } + }, + setBackgroundColor: function (A, e) { + if (e) + this.setBackgroundColors([{ + color: A, + stop: "0%" + }, { + color: e, + stop: "100%" + }], "180deg"); + else { + var t = this.getDomElement(); + t && (t.style.background = A.getRGBA()) + } + }, + setBackgroundColors: function (A, e) { + var t = this.getDomElement(), + i = e || "0deg", + o = []; + if (A && A.length > 0) { + 1 === A.length && this.setBackgroundColor(A[0].color || A[0]); + for (var n = 0; A.length > n; n += 1) { + var r = A[n].color.getRGBA() + " " + A[n].stop; + o.push(r) + } + var a = i + ", " + o.join(","); + t && (t.style.background = "linear-gradient(" + a + ")") + } + }, + resetBackgroundColor: function () { + this.getDomElement() && (this.domElement.style.background = "linear-gradient(rgb(135,206,250) 0%, rgb(245, 245, 245) 100%)") + }, + getComponentLocalMatrixByKey: function (A) { + if (A) { + var e = this.modelManager.getComponent(A); + if (e && e.length > 0 && e[0].matrix) + return e[0].matrix.clone() + } + }, + getComponentWorldMatrixByKey: function (A) { + var e = this.getComponentLocalMatrixByKey(A); + if (e) { + var t = this.getModelByComponentKey(A); + if (t) { + var i = t.getModelMatrix(); + e.premultiply(i) + } + return e + } + }, + setComponentLocalMatrixByKey: function (A, e) { + if (A) { + var t = this.modelManager.getComponent(A); + if (t && t.length > 0) { + var i = t[0].mesh; + return i.matrix.fromArray(e), + i.updateMatrixWorld(!0), + this.render(), + !0 + } + } + return !1 + }, + _transformComponentByKey: function (A, e, t) { + var i = this; + if (A) { + var o = this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM); + if (o && o.bindingComponentKey === A) + return o; + var n = this.getModelByComponentKey(A), + r = function (A) { + i.render() + }, + a = function (t) { + "string" == typeof A && t.matrix && t.object && (i.componentApplyMatrix2(A, t.matrix, !1), + i.getScene().expandBoundingBoxWorldBy(t.object)), + e && e(A) + }; + if ("string" != typeof A) { + if (A instanceof H) { + var s = A; + return this.controlManager.enableTool(this, Pc.COMPONENT_TRANSFORM), + (o = this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM)).transformComponent(s, r, a), + o.bindingComponentKey = void 0, + o + } + return + } + var l = this.modelManager.getComponent(A); + if (l && l.length > 0) { + var c = i.externalComponentManager; + c && c.getNodeInfosByUserId(A) && c.recalculateComponentBoundingbox(A); + for (var h = new aA, d = 0, p = l.length; p > d; d += 1) + h.union(l[d].transformationOriginalBoundingBox ? l[d].transformationOriginalBoundingBox : l[d].boundingBox); + var g = new Ue(Tu.getGeometryFromBox3(h)); + if (g.matrixAutoUpdate = !1, + l[0].transformation && g.matrix.copy(l[0].applyMatrix), + n) { + var u = n.getModelMatrix(); + if (u) { + var f = new Xi; + f.matrixAutoUpdate = !1, + f.matrix.copy(u), + f.updateMatrixWorld(!0), + f.add(g) + } + } + return g.updateMatrixWorld(!0), + this.controlManager.enableTool(this, Pc.COMPONENT_TRANSFORM), + (o = this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM)).transformComponent(g, r, a, void 0, (function (e) { + if (n) + n.calculateBoundingBox(); + else { + var o = i.externalComponentManager; + o && o.getNodeInfosByUserId(A) && o.calculateBoundingBox() + } + i.modelManager.updateSceneBoundingBox(), + t && t(A) + })), + o.bindingComponentKey = A, + this.modelManager.updateTransformComponentList(A), + o + } + } + }, + _transformModelByKey: function (A) { + if (A && "string" == typeof A) { + var e = this.getModel(A); + if (e && e.isLoaded() && e.isVisible()) { + var t = this, + i = e.getBoundingBoxWorld(); + if (i.isEmpty()) + return; + var o = new Ue(Tu.getGeometryFromBox3(i)); + o.matrixAutoUpdate = !1, + o.updateMatrixWorld(!0), + this.controlManager.enableTool(this, Pc.COMPONENT_TRANSFORM); + var n = this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM); + return n.transformComponent(o, (function (A) { + t.render() + }), (function (A) { + A && A.matrix && e.applyModelMatrix(A.matrix) + })), + n + } + } + }, + translateComponentByKey: function (A, e, t) { + var i = this._transformComponentByKey(A, e, t); + i && i.switchToTranslateMode() + }, + scaleComponentByKey: function (A, e, t) { + var i = this._transformComponentByKey(A, e, t); + i && i.switchToScaleMode() + }, + rotateComponentByKey: function (A, e, t) { + var i = this._transformComponentByKey(A, e, t); + i && i.switchToRotateMode() + }, + cancelTransformComponent: function (A) { + var e = this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM); + e && (A && this.restoreComponentTransform(), + e.cancelTransformComponent(), + this.controlManager.disableTool(e.name)) + }, + cancelTransformComponentByKey: function (A) { + if (A && "string" == typeof A) { + var e = this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM); + e && e.bindingComponentKey === A && (e.cancelTransformComponent(), + this.controlManager.disableTool(e.name)) + } + }, + restoreComponentTransform: function () { + var A = this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM); + A && (A.bindingComponentKey ? this.restoreComponentTransformByKey(A.bindingComponentKey) : A.restoreComponentOriginalTransformState() && this.render()) + }, + restoreComponentTransformByKey: function (A) { + A && "string" == typeof A && (this.resetComponentMatrix(A), + this.updateTransformControlIfBindingComKeyEqual(A)) + }, + updateTransformControlIfBindingComKeyEqual: function (A) { + var e = this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM); + e && e.bindingComponentKey === A && (e.cancelTransformComponent(), + this._transformComponentByKey(A)) + }, + increaseComponentTransformControlSize: function () { + var A = this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM); + A && A.increaseTransformControlSize() && this.render() + }, + decreaseComponentTransformControlSize: function () { + var A = this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM); + A && A.decreaseTransformControlSize() && this.render() + }, + setComponentTransformSpaceToLocalSpace: function () { + var A = this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM); + A && A.setTransformSpaceToLocalSpace() && this.render() + }, + setComponentTransformSpaceToWorldSpace: function () { + var A = this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM); + A && A.setTransformSpaceToWorldSpace() && this.render() + }, + switchComponentTransformSpaceBetweenLocalAndWorld: function () { + var A = this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM); + A && A.switchTransformSpace() && this.render() + }, + showComponentTransformOnAxis: function (A) { + var e = this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM); + e && e.showTransformOnAxis(A) && this.render() + }, + hideComponentTransformOnAxis: function (A) { + var e = this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM); + e && e.hideTransformOnAxis(A) && this.render() + }, + disableComponentTransform: function () { + var A = this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM); + A && A.disableTransform() && this.render() + }, + enableComponentTransform: function () { + var A = this.controlManager.getToolByName(Pc.COMPONENT_TRANSFORM); + A && A.enableTransform() && this.render() + }, + componentApplyMatrix: function (A, e) { + var t = this.getModelManager(), + i = this.getModelByComponentKey(A); + if (i) { + t.explosionList[A] || (t.explosionList[A] = !0); + var o = i._getHandler(); + if (o instanceof MC) { + var n = this.modelManager.getComponent(A); + if (n && n[0] && n[0].mesh) { + var r = n[0].mesh; + if (r) { + r.userData.originalMatrix || (r.userData.originalMatrix = r.matrixWorld.clone()); + var a = new y(r.userData.originalMatrix.elements[12], r.userData.originalMatrix.elements[13], r.userData.originalMatrix.elements[14]), + s = new M; + s.setPosition(a); + var l = new M; + l.setPosition(a.multiplyScalar(-1)), + r.matrixWorld.multiply(l).multiply(e).multiply(s) + } + } + } else if (o instanceof Yf) { + var c = i.getModelDescriptor(), + h = c.mapNodeInfoByCategory[1], + d = c.mapNodeInfoByCategory[0]; + if (h.hasOwnProperty(A)) + for (var p = h[A], g = 0; p.length > g; g += 1) { + var u = p[g], + f = u.mesh; + if (f) { + var m = u.index, + C = f.geometry.attributes.position; + Tu.applyMatrix4ToBuffer(e, C.array, m.positionStart, m.positionStart + m.positionCount), + C.needsUpdate = !0 + } + } + if (d.hasOwnProperty(A)) + for (var v = d[A], I = o.instancedManager.meshManager, E = 0; v.length > E; E += 1) + for (var B = v[E], x = I.getMeshIdByNodeInfo(B), S = I.nodeIdxMapFromUserId[A][x], w = 0, b = S.length; b > w; w += 1) { + var U = S[w], + F = I.instanceGeometryMap[x][w], + K = F.getAttribute("mcol0"), + Q = F.getAttribute("mcol1"), + R = F.getAttribute("mcol2"), + T = F.getAttribute("mcol3"); + B.transformation || (B.transformation = !0, + B.transformationOriginalMatrix = B.matrix.clone()); + var k = (new y).fromArray(B.transformationOriginalMatrix.elements, 12), + D = new M; + D.setPosition(k); + var L = new M; + L.setPosition(k.multiplyScalar(-1)); + var N = new M; + N.fromArray([K.array[3 * U], K.array[3 * U + 1], K.array[3 * U + 2], 0, Q.array[3 * U], Q.array[3 * U + 1], Q.array[3 * U + 2], 0, R.array[3 * U], R.array[3 * U + 1], R.array[3 * U + 2], 0, T.array[3 * U], T.array[3 * U + 1], T.array[3 * U + 2], 1], 0), + N.multiply(L).multiply(e).multiply(D), + K.array[3 * U] = N.elements[0], + K.array[3 * U + 1] = N.elements[1], + K.array[3 * U + 2] = N.elements[2], + K.needsUpdate = !0, + Q.array[3 * U] = N.elements[4], + Q.array[3 * U + 1] = N.elements[5], + Q.array[3 * U + 2] = N.elements[6], + Q.needsUpdate = !0, + R.array[3 * U] = N.elements[8], + R.array[3 * U + 1] = N.elements[9], + R.array[3 * U + 2] = N.elements[10], + R.needsUpdate = !0, + T.array[3 * U] = N.elements[12], + T.array[3 * U + 1] = N.elements[13], + T.array[3 * U + 2] = N.elements[14], + T.needsUpdate = !0, + B.matrix = N + } + } else + Bh.warn("当前模式下暂不支持构件变换") + } + this.render() + }, + componentApplyMatrix2: function (A, e, t) { + var i = this.getModelByComponentKey(A), + o = this.getModelManager().getComponent(A); + if (o && o.length > 0) { + for (var n = 0; o.length > n; n += 1) { + var r = o[n]; + if (r.matrix || (r.matrix = new M), + r.transformation || (r.transformation = !0, + r.transformationOriginalMatrix = r.matrix.clone(), + r.applyMatrix = new M, + r.boundingBox && (r.transformationOriginalBoundingBox = r.boundingBox.clone())), + r.matrix.premultiply(e), + r.applyMatrix.premultiply(e), + r.boundingBox && r.boundingBox.copy(r.transformationOriginalBoundingBox).applyMatrix4(r.applyMatrix), + r.isBatched) { + var a = i._getHandler(); + if (!0 === r.instanceOrNot) + for (var s = a.instancedManager.meshManager, l = s.getMeshIdByNodeInfo(r), c = s.nodeIdxMapFromUserId[A][l], h = 0, d = c.length; d > h; h += 1) { + var p = c[h], + g = s.instanceGeometryMap[l][h], + u = g.getAttribute("mcol0"), + f = g.getAttribute("mcol1"), + m = g.getAttribute("mcol2"), + C = g.getAttribute("mcol3"), + y = r.matrix; + u.array[3 * p] = y.elements[0], + u.array[3 * p + 1] = y.elements[1], + u.array[3 * p + 2] = y.elements[2], + u.needsUpdate = !0, + f.array[3 * p] = y.elements[4], + f.array[3 * p + 1] = y.elements[5], + f.array[3 * p + 2] = y.elements[6], + f.needsUpdate = !0, + m.array[3 * p] = y.elements[8], + m.array[3 * p + 1] = y.elements[9], + m.array[3 * p + 2] = y.elements[10], + m.needsUpdate = !0, + C.array[3 * p] = y.elements[12], + C.array[3 * p + 1] = y.elements[13], + C.array[3 * p + 2] = y.elements[14], + C.needsUpdate = !0 + } + else { + var v = r.mesh; + if (!v) + continue; + var I = r.index, + E = v.geometry; + v.geometry.boundingBox = null; + var B = E.attributes.position; + Tu.applyMatrix4ToBuffer(e, B.array, I.positionStart, I.positionStart + I.positionCount), + B.needsUpdate = !0; + var x = a.defaultManager.wireframeManager.wireframeLineSegment; + if (x) + for (var S = x._indicesGroup[A], w = 0, b = S.length; b > w; w += 1) { + var U = S[w]; + if (S[w].nodeId === r.nodeId) { + var F = x.geometry.attributes.position; + Tu.applyMatrix4ToBuffer(e, F.array, 3 * U.positionStart, 3 * (U.positionStart + U.positionCount)), + F.needsUpdate = !0; + break + } + } + } + } else { + var K = null; + if (r.mesh instanceof Array) + K = r.mesh; + else { + if (!(r.mesh instanceof H)) + continue; + K = [r.mesh] + } + for (var Q = 0, R = K.length; R > Q; Q += 1) { + var T = K[Q]; + r.isExternalComponent && (T.userData.originalMatrix || (T.userData.originalMatrix = T.matrix.clone())); + var k = T.matrixAutoUpdate; + T.matrixAutoUpdate = !1, + T.applyMatrix4(e), + T.matrixAutoUpdate = k, + T.updateMatrixWorld(!0) + } + var D = r.wireframeMeshs; + if (D) + for (var L = 0, N = D.length; N > L; L += 1) { + var O = D[L]; + k = O.matrixAutoUpdate, + O.matrixAutoUpdate = !1, + O.matrix.copy(r.matrix), + O.updateMatrixWorld(!0), + O.matrixAutoUpdate = k + } + } + } + if (void 0 === t && (t = !0), + t) { + if (i) + i.calculateBoundingBox(); + else { + var V = this.externalComponentManager; + V && V.getNodeInfosByUserId(A) && V.calculateBoundingBox() + } + this.modelManager.updateSceneBoundingBox() + } + } + this.modelManager.updateTransformComponentList(A), + this.render() + }, + setComponentMatrix: function (A, e) { + this.setComponentMatrix2(A, e) + }, + setComponentMatrix2: function (A, e, t) { + var i = this.getModelManager().getComponent(A); + if (i && i.length > 0) + for (var o = 0; i.length > o; o += 1) { + var n = i[o]; + n.matrix || (n.matrix = new M); + var r = null; + n.transformation ? r = (new M).getInverse(n.applyMatrix) : (n.transformation = !0, + n.transformationOriginalMatrix = n.matrix.clone(), + n.applyMatrix = new M, + n.boundingBox && (n.transformationOriginalBoundingBox = n.boundingBox.clone())), + n.matrix.copy(n.transformationOriginalMatrix).premultiply(e), + n.applyMatrix.copy(e), + n.boundingBox && n.boundingBox.copy(n.transformationOriginalBoundingBox).applyMatrix4(n.applyMatrix); + var a = this.getModelByComponentKey(A); + if (n.isBatched) { + var s = a._getHandler(); + if (!0 === n.instanceOrNot) + for (var l = s.instancedManager.meshManager, c = l.getMeshIdByNodeInfo(n), h = l.nodeIdxMapFromUserId[A][c], d = 0, p = h.length; p > d; d += 1) { + var g = h[d], + u = l.instanceGeometryMap[c][d], + f = u.getAttribute("mcol0"), + m = u.getAttribute("mcol1"), + C = u.getAttribute("mcol2"), + y = u.getAttribute("mcol3"), + v = n.matrix; + f.array[3 * g] = v.elements[0], + f.array[3 * g + 1] = v.elements[1], + f.array[3 * g + 2] = v.elements[2], + f.needsUpdate = !0, + m.array[3 * g] = v.elements[4], + m.array[3 * g + 1] = v.elements[5], + m.array[3 * g + 2] = v.elements[6], + m.needsUpdate = !0, + C.array[3 * g] = v.elements[8], + C.array[3 * g + 1] = v.elements[9], + C.array[3 * g + 2] = v.elements[10], + C.needsUpdate = !0, + y.array[3 * g] = v.elements[12], + y.array[3 * g + 1] = v.elements[13], + y.array[3 * g + 2] = v.elements[14], + y.needsUpdate = !0 + } + else { + var I = n.mesh; + if (!I) + continue; + var E = n.index, + B = I.geometry.attributes.position; + r && Tu.applyMatrix4ToBuffer(r, B.array, E.positionStart, E.positionStart + E.positionCount), + Tu.applyMatrix4ToBuffer(n.applyMatrix, B.array, E.positionStart, E.positionStart + E.positionCount), + B.needsUpdate = !0; + var x = s.defaultManager.wireframeManager.wireframeLineSegment; + if (x) + for (var S = x._indicesGroup[A], w = 0, b = S.length; b > w; w += 1) { + var U = S[w]; + if (S[w].nodeId === n.nodeId) { + var F = x.geometry.attributes.position; + r && Tu.applyMatrix4ToBuffer(r, F.array, 3 * U.positionStart, 3 * (U.positionStart + U.positionCount)), + Tu.applyMatrix4ToBuffer(e, F.array, 3 * U.positionStart, 3 * (U.positionStart + U.positionCount)), + F.needsUpdate = !0; + break + } + } + } + } else { + var K = null; + if (n.mesh instanceof Array) + K = n.mesh; + else { + if (!(n.mesh instanceof H)) + continue; + K = [n.mesh] + } + for (var Q = 0, R = K.length; R > Q; Q += 1) { + var T = K[o]; + n.isExternalComponent && (T.userData.originalMatrix || (T.userData.originalMatrix = T.matrix.clone())); + var k = T.matrixAutoUpdate; + T.matrixAutoUpdate = !1, + T.matrix.copy(n.matrix), + T.applyMatrix4(new M), + T.matrixAutoUpdate = k, + T.updateMatrixWorld(!0) + } + var D = n.wireframeMeshs; + if (D) + for (var L = 0, N = D.length; N > L; L += 1) { + var O = D[L]; + k = O.matrixAutoUpdate, + O.matrixAutoUpdate = !1, + O.matrix.copy(n.matrix), + O.updateMatrixWorld(!0), + O.matrixAutoUpdate = k + } + } + if (void 0 === t && (t = !0), + t) { + if (a) + a.calculateBoundingBox(); + else { + var V = this.externalComponentManager; + V && V.getNodeInfosByUserId(A) && V.calculateBoundingBox() + } + this.modelManager.updateSceneBoundingBox() + } + } + this.render() + }, + resetComponentMatrix: function (A, e) { + var t = this.getModelManager().getComponent(A); + if (t && t.length > 0) + for (var i = 0; t.length > i; i += 1) { + var o = t[i]; + if (o.transformation) { + o.matrix.copy(o.transformationOriginalMatrix), + o.transformationOriginalBoundingBox && (o.boundingBox = o.transformationOriginalBoundingBox.clone()); + var n = (new M).getInverse(o.applyMatrix), + r = this.getModelByComponentKey(A); + if (o.isBatched) { + var a = r._getHandler(); + if (!0 === o.instanceOrNot) + for (var s = a.instancedManager.meshManager, l = s.getMeshIdByNodeInfo(o), c = s.nodeIdxMapFromUserId[A][l], h = 0, d = c.length; d > h; h += 1) { + var p = c[h], + g = s.instanceGeometryMap[l][h], + u = g.getAttribute("mcol0"), + f = g.getAttribute("mcol1"), + m = g.getAttribute("mcol2"), + C = g.getAttribute("mcol3"), + y = o.matrix; + u.array[3 * p] = y.elements[0], + u.array[3 * p + 1] = y.elements[1], + u.array[3 * p + 2] = y.elements[2], + u.needsUpdate = !0, + f.array[3 * p] = y.elements[4], + f.array[3 * p + 1] = y.elements[5], + f.array[3 * p + 2] = y.elements[6], + f.needsUpdate = !0, + m.array[3 * p] = y.elements[8], + m.array[3 * p + 1] = y.elements[9], + m.array[3 * p + 2] = y.elements[10], + m.needsUpdate = !0, + C.array[3 * p] = y.elements[12], + C.array[3 * p + 1] = y.elements[13], + C.array[3 * p + 2] = y.elements[14], + C.needsUpdate = !0 + } + else { + var v = o.mesh; + if (!v) + continue; + var I = o.index, + E = v.geometry.attributes.position; + n && (Tu.applyMatrix4ToBuffer(n, E.array, I.positionStart, I.positionStart + I.positionCount), + E.needsUpdate = !0); + var B = a.defaultManager.wireframeManager.wireframeLineSegment; + if (B) + for (var x = B._indicesGroup[A], S = 0, w = x.length; w > S; S += 1) { + var b = x[S]; + if (x[S].nodeId === o.nodeId) { + var U = B.geometry.attributes.position; + n && (Tu.applyMatrix4ToBuffer(n, U.array, 3 * b.positionStart, 3 * (b.positionStart + b.positionCount)), + U.needsUpdate = !0); + break + } + } + } + } else { + var F = null; + if (o.mesh instanceof Array) + F = o.mesh; + else { + if (!(o.mesh instanceof H)) + continue; + F = [o.mesh] + } + for (var K = 0, Q = F.length; Q > K; K += 1) { + var R = F[i], + T = void 0; + if (T = o.isExternalComponent ? R.userData.originalMatrix : o.matrix) { + var k = R.matrixAutoUpdate; + R.matrixAutoUpdate = !1, + R.matrix.copy(T), + R.applyMatrix4(new M), + R.matrixAutoUpdate = k, + R.updateMatrixWorld(!0), + R.userData.originalMatrix = void 0 + } + } + var D = o.wireframeMeshs; + if (D) + for (var L = 0, N = D.length; N > L; L += 1) { + var O = D[L]; + k = O.matrixAutoUpdate, + O.matrixAutoUpdate = !1, + O.matrix.copy(o.matrix), + O.updateMatrixWorld(!0), + O.matrixAutoUpdate = k + } + } + if (void 0 === e && (e = !0), + e) { + if (r) + r.calculateBoundingBox(); + else { + var V = this.externalComponentManager; + V && V.getNodeInfosByUserId(A) && V.calculateBoundingBox() + } + this.modelManager.updateSceneBoundingBox() + } + o.transformationOriginalMatrix = void 0, + o.transformationOriginalBoundingBox = void 0, + o.applyMatrix = void 0, + o.transformation = void 0 + } + } + this.render() + }, + calculateComponentVolume: function (A) { + var e = this.modelManager.getComponent(A), + t = this.modelManager.getMeshByUserId(A); + if (e && e.length > 0) { + Bh.time("计算体积"); + for (var i = 0, o = 0, n = e.length; n > o; o += 1) { + var r = e[o]; + if (r.isExternalComponent) + for (var a = r.mesh, s = 0, l = a.length; l > s; s += 1) { + var c = a[s].geometry, + h = Tu.calculateVolumeOfGeometry(c.attributes.position.array, c.index.array); + h && (i += h) + } + else if (t) { + var d = r.mesh || t[o].mesh; + if (d) { + var p = d.geometry, + g = d._indicesGroup; + if (g && !r.instanceOrNot) + for (var u = g[A], f = 0, m = u.length; m > f; f += 1) { + var C = u[f], + v = Tu.calculateVolumeOfGeometry(p.attributes.position.array, p.index.array, C.indexStart, C.indexCount); + v && (i += v) + } + else { + var I = Tu.calculateVolumeOfGeometry(p.attributes.position.array, p.index.array); + I && (i += I) + } + } + } + } + var E = this.getBoundingBoxByIds([A]), + B = new y; + return E.getCenter(B), + Bh.timeEnd("计算体积"), { + volume: i, + position: B.toArray() + } + } + }, + setAxisNetColor: function (A, e) { + var t = !1, + i = this.modelManager; + for (var o in i.models) { + var n = i.models[o]; + n.axisNetManager && (n.axisNetManager.setupColor(A, e), + t = !0) + } + t && this.render(!0) + }, + showAxisNet: function () { + var A = !1, + e = this.modelManager; + for (var t in e.models) { + var i = e.models[t]; + i.axisNetManager && (i.axisNetManager.show(), + A = !0) + } + A && this.render(!0) + }, + hideAxisNet: function () { + var A = !1, + e = this.modelManager; + for (var t in e.models) { + var i = e.models[t]; + i.axisNetManager && (i.axisNetManager.hide(), + A = !0) + } + A && this.render(!0) + }, + enableAxisNetStayInFront: function () { + var A = !1, + e = this.modelManager; + for (var t in e.models) { + var i = e.models[t]; + i.axisNetManager && (i.axisNetManager.enableStayInFront(), + A = !0) + } + A && this.render(!0) + }, + disableAxisNetStayInFront: function () { + var A = !1, + e = this.modelManager; + for (var t in e.models) { + var i = e.models[t]; + i.axisNetManager && (i.axisNetManager.disableStayInFront(), + A = !0) + } + A && this.render(!0) + }, + enableSnap: function (A) { + this.controlManager.getToolByName(Pc.PICK_BY_RECT).enableSnap(A) + }, + pickToPoint: function (A, e) { + return this.controlManager.control.pickHelper.pickToPoint(A, e) + }, + getViewportSize: function () { + return this.rendererManager.getRendererSize() + }, + getRenderer: function () { + return this.rendererManager.getRenderer() + }, + getExternalComponentManager: function () { + return this.externalComponentManager || (this.externalComponentManager = new Vy(this)), + this.externalComponentManager + }, + addExternalObject: function (A, e, t, i) { + A = A || uh.createUUID(); + this.getExternalComponentManager().addNode(A, e, t, i), + this.render() + }, + addExternalObjects: function (A, e, t) { + for (var i = this.getExternalComponentManager(), o = [], n = 0; A.length > n; n += 1) { + var r = uh.createUUID(); + i.addNode(r, A[n], e, t), + o.push(r) + } + return this.render(), + o + }, + removeExternalObjectByName: function (A) { + this.getExternalComponentManager().removeNodeById(A), + this.render() + }, + clearExternalObjects: function () { + this.getExternalComponentManager().clearNodes(), + this.render() + }, + getExternalObjectByName: function (A) { + return this.getExternalComponentManager().getNodeById(A) + }, + getAllExternalObjects: function () { + return Object.values(this.getExternalComponentManager().getAllNodes()) + }, + getModelFloorMapsByKey: function (A, e) { + var t = this.modelManager.models[A]; + if (t && t.floorManager) { + if ("function" != typeof e) + return t.floorManager.getMimiMaps(); + t.floorManager.getServerMimiMaps(e) + } + }, + getReceivingPlane: function (A) { + return this.getScene().getReceivingPlane(A) + }, + enableShadow: function (A) { + this.getReceivingPlane(A), + A ? this.getScene().lightManager.enableShadowLight() : this.getScene().lightManager.disableShadowLight(); + var e = this.getRenderer(); + e.shadowMap.enabled = A, + e.shadowMap.type = 2, + e.shadowMap.autoUpdate = !1, + e.shadowMap.needsUpdate = !0; + for (var t = this.getScene().getGroups(), i = this.getScene(), o = 0; t.length > o; o += 1) { + var n = i.getGroupType(t[o].name); + n.groupType !== gp.IBLCUBE && ("ClipPlane" !== n.groupType && this.traverseGroupEnableShadow(t[o], A)) + } + this.updateShadowLight() + }, + updateShadowLight: function () { + this.getScene().lightManager.updateShadowLight(), + this.getRenderer().shadowMap.needsUpdate = !0, + this._render(), + this.rendererManager.renderer.setClearColor(0, 0), + this._render() + }, + traverseGroupEnableShadow: function (A, e) { + var t = this; + this.getRenderer(); + ! function (A) { + if (A instanceof Ue) { + var i = A.material; + if (i instanceof Array) { + var o = null; + if ("PhoneLightingMaterial" === i[0].type) + return; + A.castShadow = e, + A.receiveShadow = e; + for (var n = 0; i.length > n; n += 1) + i[n].needsUpdate = !0, + o = i[n].defines; + A.customDepthMaterial = e && o && o.hasOwnProperty("USE_INSTANCE") ? t.getInstanceDepthMaterial() : void 0 + } else { + if ("PhoneLightingMaterial" === i.type) + return; + A.castShadow = e, + A.receiveShadow = e, + i.needsUpdate = !0; + var r = i.defines; + A.customDepthMaterial = e && r && r.hasOwnProperty("USE_INSTANCE") ? t.getInstanceDepthMaterial() : void 0, + i.needsUpdate = !0 + } + } + }(A); + for (var i = A.children, o = 0, n = i.length; n > o; o += 1) + this.traverseGroupEnableShadow(i[o], e) + }, + getInstanceDepthMaterial: function () { + if (this.instanceDepthMaterial) + return this.instanceDepthMaterial; + var A = new Su; + return A.depthPacking = 3201, + this.instanceDepthMaterial = A, + this.instanceDepthMaterial + }, + updateShadowMap: function () { + 4 === vc.LightPreset && (this.getRenderer().shadowMap.needsUpdate = !0) + }, + cloneComponent: function (A) { + function e(A) { + for (var e in A) + A.hasOwnProperty(e) && (A[e] instanceof d || A[e] instanceof ut) && (A[e] = A[e].clone(), + A[e].needsUpdate = !0) + } + var t, i = this.modelManager.getComponent(A), + o = new he, + n = i[0].model, + r = n.materialManager, + a = this.getExternalComponentManager(), + s = []; + if (i[0].isBatched && !i[0].instanceOrNot) + ! function () { + var A = [], + n = [], + l = [], + c = [], + h = [], + d = 0, + p = 0, + g = [], + u = 0, + f = !0, + m = !1, + C = void 0; + try { + for (var y, v = function () { + var t, i, a, f, m = y.value, + C = m.index, + v = m.mesh.geometry, + I = m.mesh.geometry.attributes, + E = I.position.array.slice(C.positionStart, C.positionStart + C.positionCount), + B = I.normal.array.slice(C.positionStart, C.positionStart + C.positionCount), + x = void 0; + if (I.uv) + x = I.uv.array.slice(C.positionStart / 3 * 2, (C.positionStart + C.positionCount) / 3 * 2); + else { + var S = E.length / 3 * 2; + (x = new Array(S)).fill(0, 0, S) + } + var w = void 0; + if (I.uv2) + w = I.uv2.array.slice(C.positionStart / 3 * 2, (C.positionStart + C.positionCount) / 3 * 2); + else { + var M = x.length; + (w = new Array(M)).fill(0, 0, M) + } + var b = C.positionStart / 3, + U = v.index.array, + F = C.indexCount, + K = m.originMId; + s.push(K); + var Q = Kd.getMaterialParameters(r.getMaterialById(K)), + R = Kd.createStandardMaterial(Q); + e(R), + g.push(R), + h.push.apply(h, yc(U.slice(C.indexStart, C.indexStart + C.indexCount).map((function (A) { + return A - b + p + })))), + A = (t = A).concat.apply(t, yc(E)), + n = (i = n).concat.apply(i, yc(B)), + l = (a = l).concat.apply(a, yc(x)), + c = (f = c).concat.apply(f, yc(w)), + o.groups.push({ + start: d, + count: F, + materialIndex: u + }), + d += F, + p += C.positionCount / 3, + u += 1 + }, I = i[Symbol.iterator](); !(f = (y = I.next()).done); f = !0) + v() + } catch (A) { + m = !0, + C = A + } finally { + try { + f || null == I.return || I.return() + } finally { + if (m) + throw C + } + } + o.setAttribute("position", new YA(new Float32Array(A), 3)), + o.setAttribute("uv", new YA(new Float32Array(l), 2)), + o.setAttribute("uv2", new YA(new Float32Array(c), 2)), + o.setAttribute("normal", new YA(new Float32Array(n), 3)), + o.setIndex(new YA(new Uint32Array(h), 1)), + t = new Ue(o, g), + a.addExternalObject(t) + }(); + else if (i[0].isBatched && i[0].instanceOrNot) + ! function () { + var i = n._handler.instancedManager.meshManager, + r = i.getNodeIdxMapByUserId(A), + l = [], + c = [], + h = [], + d = [], + p = i.matrixInfoMapFromUserId[A][Object.keys(i.matrixInfoMapFromUserId[A])[0]][0].matrix, + g = 0, + u = 0, + f = 0, + m = [], + C = 0; + for (var y in r) { + var v, I, E, B = i.getInstanceGeometries(y), + x = B[0].index.array; + if (u = B[0].index.count, + l = (v = l).concat.apply(v, yc(B[0].attributes.position.array)), + c = (I = c).concat.apply(I, yc(B[0].attributes.normal.array)), + B[0].attributes.uv) { + var S; + h = (S = h).concat.apply(S, yc(B[0].attributes.uv.array)) + } else { + var w = 2 * u, + M = new Array(w); + M.fill(0, 0, w), + h = h.concat(M) + } + d = (E = d).concat.apply(E, yc(x.map((function (A) { + return A + g + })))), + g = l.length / 3; + var b = i.getMaterialIdByMeshId(y), + U = i.manager.model.materialManager.getInstanceMaterialById(b)[0], + F = Kd.getMaterialParameters(U), + K = Kd.createStandardMaterial(F); + s.push(b), + e(K), + m.push(K), + o.groups.push({ + start: f, + count: u, + materialIndex: C + }), + f += u, + C += 1 + } + o.setAttribute("position", new YA(new Float32Array(l), 3)), + o.setAttribute("uv", new YA(new Float32Array(h), 2)), + o.setAttribute("normal", new YA(new Float32Array(c), 3)), + o.setIndex(new YA(new Uint32Array(d), 1)), + (t = new Ue(o, m)).applyMatrix4(p), + t.updateMatrixWorld(), + a.addExternalObject(t) + }(); + else { + var l = n.getModelDescriptor().getNodeInfosByComponentKey(A)[0].originMId; + if (s = l, + t = i[0].mesh.clone(), + Array.isArray(l)) + t.material = l.map((function (A) { + var t = r.getMaterialById(A), + i = Kd.getMaterialParameters(t), + o = Kd.createStandardMaterial(i); + return e(o), + o + })); + else { + var c = r.getMaterialById(l), + h = Kd.getMaterialParameters(c), + p = Kd.createStandardMaterial(h); + e(p), + t.material = p + } + a.addExternalObject(t) + } + return t ? (t.byClone = !0, + t.originMId = s, + t.originComponentKey = A, + t) : null + }, + setComponentsBlink: function () {} + }), + Object.defineProperties(Gy.prototype, { + renderer: { + get: function () { + return console.warn("EIMMODEL.ViewerImpl: .renderer 现在为 .getRenderer()"), + this.getRenderer() + } + }, + composer: { + get: function () { + return console.warn("EIMMODEL.ViewerImpl: .composer 现在为 .rendererManager.composer"), + this.rendererManager.composer + } + } + }); + var Py = function (A) { + var e = window.performance.timing; + Ch.PERFORMANCE > Bh.level || Bh.warn("页面加载时间:", e.domInteractive - e.navigationStart, "ms"); + var t = mh.detectWebGL(); + if (1 === t) { + vc.language = mh.language(), + H.DefaultUp.set(0, 0, 1); + var i = uh.extend({}, { + host: "https://bos3d.bimwinner.com", + viewport: "" + }, A); + this.host = i.host, + this.viewerImpl = new Gy; + var o = document.getElementById(i.viewport); + o.style.position = "relative"; + var n = this; + this.getViewerImpl().init(o), + vc.EnableViewController && !mh.isMobileDevice() && (this.viewController = new lp(this, (function () { + return !0 + })), + this.viewController.init(this.getViewerImpl().getDomElement()), + this.viewController.render(), + this.getViewerImpl().addRenderFinishedListener((function () { + n.viewController.render() + }))), + this.filter = this.getViewerImpl().filter, + this.SVGRect = new tp(this), + this.SVGRect.creatSVG(), + this.viewport = A.viewport, + this.viewportDiv = document.getElementById(A.viewport), + this.getViewerImpl().modelManager.addEventListener(Rc.ON_LOAD_CONFIG_FINISH, (function (A) { + Bh.time("模型".concat(A.modelKey, "加载时间")); + var e = n.getViewerImpl().getBoundingBox(), + t = n.getViewerImpl().getModel(A.modelKey), + i = t.getConfig(); + i.type !== Zc.I_MODEL && i.type !== Zc.OBJ || n.setLightIntensityFactor(1), + op(t.dataVersion, "1.0"); + var o = e.getCenter(new y), + r = e.getSize(new y), + a = new y(o.x + r.x, o.y + r.y, o.z + r.z); + n.originalView && vc.UserControlView ? n.viewerImpl.lookAt(n.originalView.position, n.originalView.target, n.originalView.up) : (n.viewerImpl.lookAt(a, o, n.viewerImpl.camera.up), + n.setOriginalView(a, o, n.viewerImpl.camera.up)) + })), + this.getViewerImpl().modelManager.addEventListener(Rc.ON_LOAD_PROGRESS, (function (A) { + Bh.log(A.progress) + })), + this.getViewerImpl().modelManager.addEventListener(Rc.ON_LOAD_COMPLETE, (function (A) { + Bh.log(A.modelKey, " is load "), + Bh.timeEnd("模型".concat(A.modelKey, "加载时间")); + var e = n.getViewerImpl().getModel(A.modelKey); + for (var t in e.floorManager && vc.EnableCreateMiniMap && (Bh.time("小地图生成"), + e.floorManager.generateMiniMap(n.getViewerImpl()), + Bh.timeEnd("小地图生成")), + e && e.getConfig() && n.getViewerImpl().cameraControl.setSceneUnit(e.getConfig().lengthUnit), + bc) + if (e && bc.hasOwnProperty(t) && !0 === bc[t]) { + var i = t, + o = e.getComponentKeysByType(i), + r = e.getConfig(), + a = []; + !r || r.type !== Zc.RVT && r.type !== Zc.MERGE || (a = e.getComponentKeysByProperty("buildInCategory", i)), + n.deactivateComponentsByKey(o.concat(a)) + } + n.getViewerImpl().getBoundingBox().isEmpty() && (n.getViewerImpl().zoomAll(), + n.getViewerImpl().goToInitialView()) + })), + this.getViewerImpl().modelManager.addEventListener(Rc.ON_CLICK_PICK, (function (A) { + if (A.intersectInfo) { + Bh.log("构件key", A.intersectInfo.selectedObjectId); + var e = A.intersectInfo.object; + e && Bh.log(e) + } + })), + this.getViewerImpl().getControlManager().addEventListener(Rc.ON_CONTROL_EXIST, (function (A) { + if (A.name === Pc.CLIP_BY_BOX) + for (var e = n.getViewerImpl().modelManager.getModelKeys(), t = 0, i = e.length; i > t; t += 1) { + var o = n.getViewerImpl().modelManager.getModel(e[t]); + if (o) + for (var r = 0; 6 > r; r += 1) { + o._getNodeGroup("sectionFill_" + r).clear() + } + } + })), + this.viewerImpl.modelManager.addEventListener(Rc.ON_CONTROL_UPDATEUI, (function (A) { + n.SVGRect.creatRect(A) + })) + } else + mh.showWebGLMessage(t) + }; + Object.assign(Py.prototype, Ld.prototype), + Object.assign(Py.prototype, { + constructor: Py, + addView: function (A, e, t, i) { + this.getViewerImpl().load({ + serverUrl: this.host, + modelKey: A, + dbName: e, + token: t, + share: i || "", + notifyProgress: !0, + type: A.startsWith("G") ? "GIS" : "" + }) + }, + addViews: function (A, e, t, i) { + vc.AutoMergeComponent = !1, + vc.MergeComponent = !0, + this.getViewerImpl().load({ + serverUrl: this.host, + modelKey: A, + modelKeys: e, + dbName: t, + token: i, + notifyProgress: !0 + }) + }, + addTilesView: function (A, e, t) { + this.getViewerImpl().loadTiles({ + serverUrl: this.host, + modelKey: A, + dbName: e, + token: t, + notifyProgress: !0 + }) + }, + addTilesViewFromLocal: function (A) { + this.getViewerImpl().loadTiles({ + serverUrl: ".", + modelKey: A, + dbName: "", + token: "", + notifyProgress: !0, + offLine: !0 + }) + }, + getSSE: function (A) { + var e = this.getBoxByComponentsKey(A), + t = this.viewerImpl.camera, + i = e.getCenter(new y), + o = e.getSize().length(), + n = this.viewerImpl.getRenderer().domElement.width, + r = t.fov; + return o * n / (2 * t.position.clone().sub(i).length() * Math.tan(r / 2)) + }, + removeView: function (A) { + return this.getViewerImpl().unload(A) + }, + removeAllView: function () { + this.getViewerImpl().unloadAll() + }, + addViewFromLocal: function (A) { + this.getViewerImpl().load({ + serverUrl: ".", + modelKey: A, + dbName: "", + notifyProgress: !0, + offLine: !0 + }) + }, + loadComponents: function (A, e, t, i) { + Array.isArray(A) || (A = [A]), + this.getViewerImpl().loadGeopkOnDemand(A, e, t, i) + }, + unloadCompomemts: function (A, e) { + Array.isArray(A) || (A = [A]), + this.getViewerImpl().unloadGeopkOnDemand(A, e) + }, + getOriginalView: function () { + return this.originalView + }, + setOriginalView: function (A, e, t) { + A && e && t ? (this.originalView || (this.originalView = {}), + this.originalView.position = Array.isArray(A) ? new y(A[0], A[1], A[2]) : new y(A.x, A.y, A.z), + this.originalView.target = Array.isArray(e) ? new y(e[0], e[1], e[2]) : new y(e.x, e.y, e.z), + this.originalView.up = Array.isArray(t) ? new y(t[0], t[1], t[2]) : new y(t.x, t.y, t.z)) : this.originalView = void 0 + }, + getViewerImpl: function () { + return this.viewerImpl + }, + getAllComponents: function () { + return this.getViewerImpl().getModelManager().getAllComponents() + }, + getAllComponentsKey: function () { + return this.getViewerImpl().getModelManager().getAllComponentsKey() + }, + getComponentsKeyByModelKey: function (A) { + return this.getViewerImpl().getModelManager().getComponentsKeyByModelKey(A) + }, + getComponentKeysByName: function (A) { + return this.getViewerImpl().getModelManager().getComponentKeysByName(A) + }, + getComponentKeysByType: function (A) { + return this.getViewerImpl().getModelManager().getComponentKeysByType(A) + }, + getComponentKeysByProperty: function (A, e) { + return this.getViewerImpl().getModelManager().getComponentKeysByProperty(A, e) + }, + getScreenCoordFromSceneCoordAndCheckCover: function (A) { + return this.getViewerImpl().getScreenCoordFromSceneCoordAndCheckCover(A) + }, + pickByPoint: function (A) { + return this.getViewerImpl().pickByPoint(A) + }, + calculateMinDistance: function (A, e) { + return this.getViewerImpl().calculateMinDistance(A, e) + }, + otherObjectsInScene: function (A) {}, + getComponentsByKey: function (A) { + Array.isArray(A) || (A = [A]); + var e = [], + t = this; + return A.forEach((function (A) { + var i = t.getViewerImpl().modelManager.getComponent(A); + if (i) { + var o = {}; + o[A] = i, + e.push(o) + } + })), + e + }, + getModelFloorMapsByKey: function (A, e) { + var t = this.getViewerImpl().getModel(A); + if (!t) + return { + msg: "没有此模型" + }; + var i = t.getConfig().type; + return i !== Zc.RVT && i !== Zc.IFC && i !== Zc.MERGE ? { + msg: "该模型不支持小地图" + } : t.floorManager ? this.getViewerImpl().getModelFloorMapsByKey(A, e) : { + msg: "该模型不支持小地图" + } + }, + showComponentsById: function (A, e) { + Array.isArray(A) || (A = [A]); + for (var t = [], i = 0; A.length > i; i += 1) + t[i] = e + "_" + A[i]; + this.getViewerImpl().getFilter().showByIds(t), + this.render() + }, + showComponentsByKey: function (A) { + Array.isArray(A) || (A = [A]), + this.getViewerImpl().getFilter().showByIds(A), + this.render() + }, + hideComponentsById: function (A, e) { + Array.isArray(A) || (A = [A]); + for (var t = [], i = 0; A.length > i; i += 1) + t[i] = e + "_" + A[i]; + this.filter.hideByIds(t), + this.render() + }, + hideComponentsByKey: function (A) { + Array.isArray(A) || (A = [A]), + this.filter.hideByIds(A), + this.render() + }, + activateComponentsByKey: function (A) { + Array.isArray(A) || (A = [A]), + this.filter.activateByIds(A), + this.render() + }, + deactivateComponentsByKey: function (A) { + Array.isArray(A) || (A = [A]), + this.filter.deactivateByIds(A), + this.render() + }, + hideAllComponents: function () { + this.getViewerImpl().getFilter().hideAll(), + this.render() + }, + showAllComponents: function () { + this.getViewerImpl().getFilter().showAll(), + this.render() + }, + highlightComponentsById: function (A, e) { + Array.isArray(A) || (A = [A]); + for (var t = [], i = 0; A.length > i; i += 1) + t[i] = e + "_" + A[i]; + this.getViewerImpl().setSelection(t), + this.render() + }, + highlightComponentsByKey: function (A, e) { + Array.isArray(A) || (A = [A]), + this.getViewerImpl().setSelection(A); + var t = e; + "boolean" != typeof e && (t = !0), + t && this.render() + }, + addHighlightComponentsByKey: function (A) { + Array.isArray(A) || (A = [A]), + this.getViewerImpl().addToSelection(A), + this.render() + }, + closeHighlightComponentsById: function (A, e) { + Array.isArray(A) || (A = [A]); + for (var t = [], i = 0; A.length > i; i += 1) + t[i] = e + "_" + A[i]; + this.getViewerImpl().removeFromSelection(t), + this.render() + }, + closeHighlightComponentsByKey: function (A) { + Array.isArray(A) || (A = [A]), + this.getViewerImpl().removeFromSelection(A), + this.render() + }, + getHighlightComponentsKey: function () { + return this.getViewerImpl().getSelection() + }, + clearHighlightList: function () { + this.getViewerImpl().clearSelection(), + this.render() + }, + getHighlightComponents: function () { + var A = this.getHighlightComponentsKey(), + e = [], + t = this; + return A.forEach((function (A) { + var i = t.getViewerImpl().modelManager.getComponent(A); + if (i) { + var o = {}; + o[A] = i, + e.push(o) + } + })), + e + }, + setComponentsOpacityState: function (A, e) { + Array.isArray(A) || (A = [A]), + e === Oc.TRANSLUCENT ? this.transparentComponentsByKey(A) : e === Oc.OPAQUE && this.closeTransparentComponentsByKey(A) + }, + transparentComponentsById: function (A, e) { + Array.isArray(A) || (A = [A]); + for (var t = [], i = 0; A.length > i; i += 1) + t[i] = e + "_" + A[i]; + this.getViewerImpl().getFilter().makeTranslucentByIds(t), + this.render() + }, + transparentComponentsByKey: function (A, e) { + Array.isArray(A) || (A = [A]); + var t = this.getViewerImpl().getFilter(); + if (e) { + var i = this.getComponentsByKey(A); + if (Array.isArray(A) && i.length !== A.length) { + i = []; + var o = !0, + n = !1, + r = void 0; + try { + for (var a, s = A[Symbol.iterator](); !(o = (a = s.next()).done); o = !0) { + var l = this.getComponentsByKey(a.value); + l.length > 0 && i.push(l[0]) + } + } catch (A) { + n = !0, + r = A + } finally { + try { + o || null == s.return || s.return() + } finally { + if (n) + throw r + } + } + } + t.transparentComponentsByKey(this.getViewerImpl().getModelManager(), i, e) + } else + t.makeTranslucentByIds(A); + this.render() + }, + transparentOtherComponentsByKey: function (A) { + Array.isArray(A) || (A = [A]), + this.getViewerImpl().getFilter().makeTranslucentOthersByIds(A), + this.render() + }, + transparentAllComponents: function () { + this.getViewerImpl().getFilter().makeTranslucentOthersByIds([]), + this.render() + }, + closeTransparentComponentsById: function (A, e) { + Array.isArray(A) || (A = [A]); + for (var t = [], i = 0; A.length > i; i += 1) + t[i] = e + "_" + A[i]; + this.getViewerImpl().getFilter().opaqueByIds(t), + this.render() + }, + closeTransparentComponentsByKey: function (A) { + Array.isArray(A) || (A = [A]), + this.getViewerImpl().getFilter().opaqueByIds(A), + this.render() + }, + clearTransparentList: function () { + this.clearComponentTransparentList(), + this.clearModelTransparentList() + }, + clearComponentTransparentList: function () { + var A = this.getViewerImpl().getFilter(); + A.opaqueAll(), + A.opaqueByIds([]), + this.render() + }, + colorfulComponentsById: function (A, e, t, i) { + Array.isArray(A) || (A = [A]); + for (var o = [], n = 0; A.length > n; n += 1) + o[n] = e + "_" + A[n]; + var r = this.getViewerImpl().getFilter(), + a = {}; + a.color = t, + "number" == typeof i && (a.opacity = i), + r.addToOverrideListByColor(o, a), + this.render() + }, + colorfulComponentsByKey: function (A, e, t) { + Array.isArray(A) || (A = [A]); + var i = this.getViewerImpl().getFilter(), + o = {}; + o.color = e, + "number" == typeof t && (o.opacity = t), + i.addToOverrideListByColor(A, o), + this.render() + }, + setComponentsMaterialByKey: function (A, e, t, i) { + var o = this.getComponentsByKey(A); + if (Array.isArray(e)) { + var n = 0, + r = !0, + a = !1, + s = void 0; + try { + for (var l, c = e[Symbol.iterator](); !(r = (l = c.next()).done); r = !0) { + var h = l.value; + "" === h.name && (h.name = "custMat_" + (new Date).getTime() + "_" + n, + n += 1) + } + } catch (A) { + a = !0, + s = A + } finally { + try { + r || null == c.return || c.return() + } finally { + if (a) + throw s + } + } + } else + "" === e.name && (e.name = "custMat_" + (new Date).getTime()); + var d = this.getViewerImpl().getFilter().addToOverrideListByCustomerMaterial(this.getViewerImpl().getModelManager(), o, e, t, i); + return this.render(), + d + }, + closeMaterialByKey: function (A) { + var e = this; + Array.isArray(A) ? A.forEach((function (A) { + var t = e.getComponentsByKey(A)[0][A][0]; + if (!t.isBatched && !t.instanceOrNot && !t.RenderTypeChange) { + var i = t.originMId; + e.getComponentsByKey(A)[0][A][0].materialId = Array.isArray(i) ? [].concat(i) : i + } + e.closeColorfulComponentsByKey(A) + })) : this.closeColorfulComponentsByKey(A) + }, + closeColorfulComponentsById: function (A, e) { + Array.isArray(A) || (A = [A]); + for (var t = [], i = 0; A.length > i; i += 1) + t[i] = e + "_" + A[i]; + this.getViewerImpl().getFilter().addToOverrideListByColor(t, null), + this.render() + }, + closeColorfulComponentsByKey: function (A) { + Array.isArray(A) || (A = [A]), + this.getViewerImpl().getFilter().addToOverrideListByColor(A, null), + this.render() + }, + clearColorfulList: function () { + this.getViewerImpl().getFilter().clearAllOverrideList(), + this.render() + }, + wireFrameComponentsById: function (A, e) { + Array.isArray(A) || (A = [A]); + for (var t = [], i = 0; A.length > i; i += 1) + t[i] = e + "_" + A[i]; + this.getViewerImpl().getFilter().addToWireframeByWireframe(t, { + wireframe: !0 + }), + this.render() + }, + wireFrameComponentsByKey: function (A) { + Array.isArray(A) || (A = [A]); + this.getViewerImpl().getFilter().addToWireframeByWireframe(A, { + wireframe: !0 + }), + this.render() + }, + closeWireFrameComponentsById: function (A, e) { + Array.isArray(A) || (A = [A]); + for (var t = [], i = 0; A.length > i; i += 1) + t[i] = e + "_" + A[i]; + this.getViewerImpl().getFilter().addToWireframeByWireframe(t, null), + this.render() + }, + closeWireFrameComponentsByKey: function (A) { + Array.isArray(A) || (A = [A]), + this.getViewerImpl().getFilter().addToWireframeByWireframe(A, null), + this.render() + }, + clearWireframeList: function () { + this.getViewerImpl().getFilter().clearAllWireframeList(), + this.render() + }, + isolateComponentsById: function (A, e, t) { + Array.isArray(A) || (A = [A]); + for (var i = [], o = 0; A.length > o; o += 1) + i[o] = e + "_" + A[o]; + this.getViewerImpl().getFilter().setIsolateList(i, !1 !== t), + this.render() + }, + isolateComponentsByKey: function (A, e) { + Array.isArray(A) || (A = [A]), + this.getViewerImpl().getFilter().setIsolateList(A, !1 !== e), + this.render() + }, + closeIsolateComponentsById: function (A, e) { + Array.isArray(A) || (A = [A]); + for (var t = [], i = 0; A.length > i; i += 1) + t[i] = e + "_" + A[i]; + this.getViewerImpl().getFilter().removeFromIsolateList(t), + this.render() + }, + closeIsolateComponentsByKey: function (A) { + Array.isArray(A) || (A = [A]), + this.getViewerImpl().getFilter().removeFromIsolateList(A), + this.render() + }, + clearIsolation: function () { + this.getViewerImpl().getFilter().clearIsolation() + }, + showModelsByKey: function (A) { + Array.isArray(A) || (A = [A]), + this.getViewerImpl().getFilter().showModelByIds(A), + this.render() + }, + hideModelsByKey: function (A) { + Array.isArray(A) || (A = [A]), + this.filter.hideModelByIds(A), + this.render() + }, + hideAllModels: function () { + this.getViewerImpl().getFilter().hideAllModel(), + this.render() + }, + showAllModels: function () { + this.getViewerImpl().getFilter().showAllModel(), + this.render() + }, + highlightModelsByKey: function (A) { + Array.isArray(A) || (A = [A]), + this.getViewerImpl().setModelSelection(A), + this.render() + }, + addHighlightModelsByKey: function (A) { + Array.isArray(A) || (A = [A]), + this.getViewerImpl().addToModelSelection(A), + this.render() + }, + closeHighlightModelsByKey: function (A) { + Array.isArray(A) || (A = [A]), + this.getViewerImpl().removeFromModelSelection(A), + this.render() + }, + getHighlightModelsKey: function () { + return this.getViewerImpl().getModelSelection() + }, + clearModelHighlightList: function () { + this.getViewerImpl().clearModelSelection(), + this.render() + }, + transparentModelsByKey: function (A, e, t) { + var i = this; + Array.isArray(A) || (A = [A]), + this.closeTransparentModelsByKey(A); + var o = this.getViewerImpl().getFilter(); + e ? A.forEach((function (A) { + o.transparentModelOrigMatByKey(i.getViewerImpl().getModelManager(), A, t) + })) : o.makeModelTranslucentByIds(A), + this.render() + }, + transparentOtherModelsByKey: function (A, e, t) { + Array.isArray(A) || (A = [A]); + for (var i = Object.keys(this.viewerImpl.modelManager.models), o = [], n = 0; i.length > n; n++) { + var r = i[n]; + A.includes(r) || o.push(r) + } + (this.closeTransparentModelsByKey(o), + e) ? this.transparentModelsByKey(o, e, t): this.getViewerImpl().getFilter().makeTranslucentOthersModelByIds(A); + this.render() + }, + transparentAllModels: function (A, e) { + if (this.clearModelTransparentList(), + A) { + var t = Object.keys(this.viewerImpl.modelManager.models); + this.transparentModelsByKey(t, A, e) + } else { + this.getViewerImpl().getFilter().makeTranslucentOthersModelByIds([]) + } + this.render() + }, + closeTransparentModelsByKey: function (A) { + var e = this, + t = this.getViewerImpl().getFilter(); + Array.isArray(A) || (A = [A]), + A.forEach((function (A) { + t.closeOrigMatModelTransparent(e.viewerImpl.modelManager, A) + })), + t.opaqueModelByIds(A), + this.render() + }, + clearModelTransparentList: function () { + var A = this, + e = this.getViewerImpl().getFilter(); + Object.keys(this.viewerImpl.modelManager.models).forEach((function (t) { + e.closeOrigMatModelTransparent(A.viewerImpl.modelManager, t) + })), + e.opaqueAllModel(), + e.opaqueModelByIds([]), + this.render() + }, + colorfulModelsByKey: function (A, e, t) { + Array.isArray(A) || (A = [A]); + var i = this.getViewerImpl().getFilter(), + o = {}; + o.color = e, + "number" == typeof t && (o.opacity = t), + i.addToModelOverrideListByColor(A, o), + this.render() + }, + closeColorfulModelsByKey: function (A) { + Array.isArray(A) || (A = [A]), + this.getViewerImpl().getFilter().addToModelOverrideListByColor(A, null), + this.render() + }, + clearModelColorfulList: function () { + this.getViewerImpl().getFilter().clearModelAllOverrideList(), + this.render() + }, + isolateModelsByKey: function (A, e) { + Array.isArray(A) || (A = [A]), + this.getViewerImpl().getFilter().setModelIsolateList(A, !1 !== e), + this.render() + }, + closeIsolateModelsByKey: function (A) { + Array.isArray(A) || (A = [A]), + this.getViewerImpl().getFilter().removeModelFromIsolateList(A), + this.render() + }, + clearModelIsolation: function () { + this.getViewerImpl().getFilter().clearModelIsolation(), + this.render() + }, + setModelMatrix: function (A, e) { + this.getViewerImpl().setModelMatrix(e, A) + }, + getModelMatrix: function (A) { + return this.getViewerImpl().getModelMatrix(A) + }, + disableComponentsSelectionByKey: function (A) { + Array.isArray(A) || (A = [A]), + this.filter.addToFrozenList(A) + }, + enableComponentsSelectionByKey: function (A) { + Array.isArray(A) || (A = [A]), + this.filter.removeFromFrozenList(A) + }, + clearDisableSelectionList: function () { + this.filter.clearFrozen() + }, + overturnYAndZaxis: function (A) { + this.getViewerImpl().overturnYAndZaxis(A), + this.render() + }, + translateModel: function (A) { + this.getViewerImpl().translateModel(A) + }, + rotateModel: function (A) { + this.getViewerImpl().rotateModel(A) + }, + scaleModel: function (A) { + this.getViewerImpl().scaleModel(A) + }, + modelsExplosion: function (A) { + for (var e = { + modelKey: [], + coefficientX: 1, + coefficientY: 1, + coefficientZ: 1, + center: this.getViewerImpl().getScene().getBoundingBoxWorld().getCenter(new y).toArray() + }, t = uh.extend(!0, {}, e, A), i = Array.isArray(t.modelKey) ? t.modelKey : [t.modelKey], o = 0; i.length > o; o += 1) { + var n = this.getViewerImpl().getModel(i[o]); + n && n.explosion(t) + } + this.getViewerImpl().getModelManager().updateSceneBoundingBox(), + this.render() + }, + closeModelsExplosion: function (A) { + var e = Array.isArray(A) ? A : [A]; + this.modelsExplosion({ + modelKey: e + }), + this.render() + }, + componentsExplosion: function (A) { + var e = { + componentKey: [], + coefficientX: 1, + coefficientY: 1, + coefficientZ: 1, + offsetX: 0, + offsetY: 0, + offsetZ: 0, + center: this.getViewerImpl().getScene().getBoundingBoxWorld().getCenter(new y).toArray() + }, + t = uh.extend(!0, {}, e, A), + i = this.getViewerImpl().getModelManager(); + i.componentsExplosion(t), + i.updateSceneBoundingBox(), + this.render() + }, + closeComponentsExplosion: function (A) { + var e = Array.isArray(A) ? A : [A]; + this.getViewerImpl().getModelManager().componentsExplosion({ + componentKey: e + }), + this.render() + }, + canFloorExplosion: function () { + return this.getViewerImpl().getModelManager().canFloorExplosion() + }, + floorExplosion: function (A) { + return !!this.getViewerImpl().getModelManager().floorExplosion(A) && (this.render(), + !0) + }, + closeFloorExplosion: function () { + var A = this.getViewerImpl().getModelManager(); + A.closeFloorExplosion(), + A.updateSceneBoundingBox(), + this.render() + }, + componentApplyMatrix: function (A, e) { + return !(!e || !e.isMatrix4) && (this.getViewerImpl().componentApplyMatrix2(A, e), + this.render(), + !0) + }, + getMatrix4FromEuler: function (A, e, t) { + var i = 0, + o = 0, + n = 0; + Array.isArray(A) ? (i = A[0], + o = A[1], + n = A[2]) : (i = A.x, + o = A.y, + n = A.z); + var r = e || [0, 0, 0], + a = 0, + s = 0, + l = 0; + Array.isArray(r) ? (a = r[0], + s = r[1], + l = r[2]) : (a = r.x, + s = r.y, + l = r.z); + var c = new M; + c.setPosition(-a, -s, -l); + var h = new M, + d = new F(i, o, n, t || "XYZ"); + h.makeRotationFromEuler(d); + var p = new M; + return p.setPosition(a, s, l), + p.multiply(h).multiply(c), + p + }, + isolateComponentsByIdForJDS: function (A, e) { + Array.isArray(A) || (A = [A]); + for (var t = [], i = 0; A.length > i; i += 1) + t[i] = e + "_" + A[i]; + this.filter.addToIsolateList(Nc.HIDDEN_OTHERS, t); + for (var o = this.getViewerImpl().modelManager.getScene().pool._pool, n = 0; o.length > n; n += 1) { + o[n].visible = !1; + for (var r = 0; t.length > r; r += 1) + o[n].key === t[r] && (o[n].visible = !0) + } + return this.render(), + !0 + }, + sortComponentsById: function (A, e, t) { + Array.isArray(A) || (A = [A]); + for (var i = this.getViewerImpl().getModel(e), o = [], n = 0; A.length > n; n += 1) + o[n] = e + "_" + A[n]; + return i ? i.getComponentKeysByTypeFromList(o, t) : [] + }, + sortComponentsByKey: function (A, e) { + return Array.isArray(A) || (A = [A]), + this.getViewerImpl().modelManager.getComponentKeysByTypeFromList(A, e) + }, + conditionSortComponentsById: function (A, e, t, i, o) { + var n = this.filter.setConditions(A, e); + Array.isArray(t) || (t = [t]); + for (var r = [], a = 0; t.length > a; a += 1) + r[a] = i + "_" + t[a]; + var s = this.getComponentsByKey(r), + l = []; + if (null !== n) + switch (A) { + case 0: + for (var c = 0; s.length > c; c += 1) + n.match(s[c]) && l.push(s[c].key); + this.isolateComponentsByKey(l); + break; + case 1: + for (var h = 0; s.length > h; h += 1) + n.match(s[h]) && l.push(s[h].key); + var d = this.otherObjectsInScene(l); + this.transparentComponentsByKey(d, .5, !1); + break; + case 2: + for (var p = 0; s.length > p; p += 1) + null !== n.getMatchItem(s[p]) && l.push(s[p].key); + !0 === o.highLight ? this.highlightComponentsByKey(l) : this.colorfulComponentsByKey(l, o.color) + } + return l + }, + conditionSortComponentsByKey: function (A, e, t, i) { + var o = this.filter.setConditions(A, e); + Array.isArray(t) || (t = [t]); + var n = this.getComponentsByKey(t), + r = []; + if (null !== o) + switch (A) { + case 0: + for (var a = 0; n.length > a; a += 1) + o.match(n[a]) && r.push(n[a].key); + this.isolateComponentsByKey(r); + break; + case 1: + for (var s = 0; n.length > s; s += 1) + o.match(n[s]) && r.push(n[s].key); + var l = this.otherObjectsInScene(r); + this.transparentComponentsByKey(l, .5, !1); + break; + case 2: + for (var c = 0; n.length > c; c += 1) + null !== o.getMatchItem(n[c]) && r.push(n[c].key); + !0 === i.highLight ? this.highlightComponentsByKey(r) : this.colorfulComponentsByKey(r, i.color) + } + return r + }, + resetScene: function (A) { + if (A = A || {}, + this.getViewerImpl().getModelManager().dispatchEvent({ + type: Rc.BEFORE_RESETSCENE, + data: A + }), + uh.isEmptyObject(A)) { + this.clearIsolation(), + this.clearModelIsolation(), + this.clearHighlightList(), + this.clearModelHighlightList(), + this.showAllComponents(), + this.showAllModels(), + this.clearWireframeList(), + this.clearTransparentList(), + this.clearModelTransparentList(), + this.clearColorfulList(), + this.clearModelColorfulList(); + var e = this.viewerImpl.modelManager.scene.getBoundingBox(), + t = e.getCenter(new y), + i = e.getSize(new y), + o = new y(t.x + i.x, t.y + i.y, t.z + i.z); + this.originalView ? this.viewerImpl.lookAt(this.originalView.position, this.originalView.target, this.originalView.up) : this.viewerImpl.lookAt(o, t, new y(0, 0, 1)) + } else if (A.visible && (this.clearIsolation(), + this.clearModelIsolation(), + this.showAllComponents(), + this.showAllModels()), + A.selected && (this.clearHighlightList(), + this.clearModelHighlightList()), + A.transparent && (this.clearTransparentList(), + this.clearModelTransparentList()), + A.wireframed && this.clearWireframeList(), + A.colorfully && (this.clearColorfulList(), + this.clearModelColorfulList()), + A.view) + if (this.originalView) + this.viewerImpl.lookAt(this.originalView.position, this.originalView.target, this.originalView.up); + else { + var n = this.viewerImpl.modelManager.scene.getBoundingBox(), + r = n.getCenter(new y), + a = n.getSize(new y), + s = new y(r.x + a.x, r.y + a.y, r.z + a.z); + this.viewerImpl.lookAt(s, r, new y(0, 0, 1)) + } + this.getViewerImpl().getModelManager().dispatchEvent({ + type: Rc.AFTER_RESETSCENE, + data: A + }), + this.render() + }, + getScreenCoordFromSceneCoord: function (A) { + return this.getViewerImpl().getScreenCoordFromSceneCoord(A) + }, + getWorldPositionFromLocalPositionByModelKey: function (A, e) { + var t = this.getModelMatrix(e); + if (t) { + if (A.isVector3) { + var i = A.clone(); + return i.applyMatrix4(t), + i.toArray() + } + if (Array.isArray(A)) { + var o = (new y).fromArray(A); + return o.applyMatrix4(t), + o.toArray() + } + } else + Bh.error("模型key无效") + }, + getLocalPositionFromWorldPositionByModelKey: function (A, e) { + var t = this.getModelMatrix(e); + if (t) { + var i = (new M).getInverse(t); + if (A.isVector3) { + var o = A.clone(); + return o.applyMatrix4(i), + o.toArray() + } + if (Array.isArray(A)) { + var n = (new y).fromArray(A); + return n.applyMatrix4(i), + n.toArray() + } + } else + Bh.error("模型key无效") + }, + getWorldPositionListFromLocalPositionListByModelKey: function (A, e) { + var t = this.getModelMatrix(e); + if (t) { + for (var i = [], o = 0, n = A.length; n > o; o += 1) { + var r = A[o]; + if (r.isVector3) { + var a = r.clone(); + a.applyMatrix4(t), + i.push(a.toArray()) + } else if (Array.isArray(r)) { + var s = (new y).fromArray(r); + s.applyMatrix4(t), + i.push(s.toArray()) + } + } + return i + } + Bh.error("模型key无效") + }, + getLocalPositionListFromWorldPositionListByModelKey: function (A, e) { + var t = this.getModelMatrix(e); + if (t) { + for (var i = (new M).getInverse(t), o = [], n = 0, r = A.length; r > n; n += 1) { + var a = A[n]; + if (a.isVector3) { + var s = a.clone(); + s.applyMatrix4(i), + o.push(s.toArray()) + } else if (Array.isArray(a)) { + var l = (new y).fromArray(a); + l.applyMatrix4(i), + o.push(l.toArray()) + } + } + return o + } + Bh.error("模型key无效") + }, + getWorldPositionArrayFromLocalPositionArrayByModelKey: function (A, e) { + var t = this.getModelMatrix(e); + if (t) { + for (var i = [], o = 0, n = A.length; n > o; o += 3) { + var r = (new y).fromArray(A, o); + r.applyMatrix4(t), + i.push.apply(i, yc(r.toArray())) + } + return i + } + Bh.error("模型key无效") + }, + getLocalPositionArrayFromWorldPositionArrayByModelKey: function (A, e) { + var t = this.getModelMatrix(e); + if (t) { + for (var i = (new M).getInverse(t), o = [], n = 0, r = A.length; r > n; n += 3) { + var a = (new y).fromArray(A, n); + a.applyMatrix4(i), + o.push.apply(o, yc(a.toArray())) + } + return o + } + Bh.error("模型key无效") + }, + render: function () { + this.getViewerImpl().render() + }, + syncRender: function () { + this.getViewerImpl()._render() + }, + resize: function (A, e) { + this.getViewerImpl().resize(A, e) + }, + autoResize: function () { + this.getViewerImpl().resize(window.innerWidth - 5, window.innerHeight - 5) + }, + setSceneBackGroundColor: function (A, e) { + this.getViewerImpl().setBackgroundColor(new Xh(A, e)) + }, + resetSceneBackgroundColor: function () { + this.getViewerImpl().resetBackgroundColor() + }, + getComponentsAttributeById: function (A, e, t) { + this.getComponentsAttributeByKey(e + "_" + A, t) + }, + getComponentsAttributeByKey: function (A, e) { + var t = this.getViewerImpl().getModelByComponentKey(A); + if (t) { + if (t.offLine) { + if (t.attributes && t.attributes[A]) + return void e({ + attribute: t.attributes[A] + }); + e(null) + } + _d({ + type: "GET", + url: (t.loader.url.serverUrl || this.host) + "/api/" + t.projectKey + "/components?componentKey=" + A + ("" === t.shareKey ? "" : "&share=" + t.shareKey), + headers: { + Authorization: t.accessToken + }, + success: function (A) { + try { + A = JSON.parse(A) + } catch (A) { + Bh.log("解析属性失败") + } + e("SUCCESS" === A.code ? A.data : null) + }, + error: function (A) { + e(null) + } + }) + } else + e(null) + }, + mergeMesh: function (A, e) { + var t = this.getViewerImpl().modelManager.getModel(e); + if (!t) + return null; + var i = new ep("mergeGroup"); + i.modelKey = e; + for (var o = new he, n = [], r = [], a = [], s = [], l = [], c = [], h = t.cache, d = [], p = [], g = null, u = 0, f = 0; A.length > f; f += 1) + if (t.cache.components.hasOwnProperty(A)) { + u += 1; + var m = {}, + C = r.length, + y = n.length / 3; + m.start = C; + var v = l.length, + I = t.cache.components[A], + E = h.geometries[I.geoId]; + if (!E) + continue; + var B = E.clone(), + x = new M; + x.fromArray(I.matrix); + var S = B.attributes; + B.applyMatrix(x); + for (var w = 0; S.position.array.length > w; w += 1) + n.push(S.position.array[w]); + for (var b = 0; S.normal.array.length > b; b += 1) + s.push(S.normal.array[b]); + if (S.uv) + for (var U = 0; S.uv.array.length > U; U += 1) + a.push(S.uv.array[U]); + for (var F = 0; B.index.array.length > F; F += 1) + r.push(B.index.array[F] + y); + if (B.groups.length > 0) + for (var K = 0; B.groups.length > K; K += 1) { + var Q = {}; + Q.start = B.groups[K].start + C, + Q.count = B.groups[K].count, + -1 !== B.groups[K].materialIndex && (Q.materialIndex = B.groups[K].materialIndex + v), + c.push(Q) + } + else { + var R = {}; + R.start = C, + R.count = B.index.count, + R.materialIndex = v, + c.push(R) + } + var T = h.materials[I.matId]; + if (!T) + continue; + for (F = 0; T.materials.length > F; F += 1) + l.push(T.materials[F]); + if (m.end = r.length / 3, + m.guid = I.guid, + u > vc.MaxMergeCount) { + if (u = 0, + o.setAttribute("position", new YA(new Float32Array(n), 3)), + o.setAttribute("normal", new YA(new Float32Array(s), 3)), + o.setAttribute("uv", new YA(new Float32Array(a), 2)), + d = [], + Array.fill) + d = Array(n.length).fill(1); + else + for (var k = 0; n.length > k; k += 1) + d.push(1); + p = new Float32Array(d), + o.setAttribute("color", new YA(p, 3, !0)), + o.setIndex(r), + o.groups = c, + g = new Ue(o, l), + i.add(g), + o = new he, + n = [], + r = [], + a = [], + s = [], + l = [], + c = [] + } + } + if (o.setAttribute("position", new YA(new Float32Array(n), 3)), + o.setAttribute("normal", new YA(new Float32Array(s), 3)), + o.setAttribute("uv", new YA(new Float32Array(a), 2)), + d = [], + Array.fill) + d = Array(n.length).fill(1); + else + for (k = 0; n.length > k; k += 1) + d.push(1); + return p = new Float32Array(d), + o.setAttribute("color", new YA(p, 3, !0)), + o.setIndex(r), + o.groups = c, + g = new Ue(o, l), + i.add(g), + d = null, + n = null, + r = null, + a = null, + s = null, + l = null, + c = null, + i + }, + setComponentPositionByKey: function (A, e) { + this.getViewerImpl().setComponentPositionByKey(A, e), + this.render() + }, + setComponentPositionById: function (A, e, t) {}, + getBoxByComponentsKey: function (A) { + return Array.isArray(A) || (A = [A]), + this.getViewerImpl().getBoundingBoxByIds(A) + }, + getAttributeByComponentKey: function () {}, + zoomToBox: function (A, e, t) { + this.getViewerImpl().zoomToBox(A, e, t) + }, + zoomIn: function (A, e, t) { + this.getViewerImpl().zoomIn(A, e, t) + }, + zoomOut: function (A, e, t) { + this.getViewerImpl().zoomOut(A, e, t) + }, + flyToStandardView: function (A, e, t, i) { + this.getViewerImpl().setStandardView(A, e, t, i) + }, + setStandardViewWithBox: function (A, e, t, i) { + this.getViewerImpl().setStandardViewWithBox(A, e, t, i) + }, + adaptiveSize: function () { + this.getViewerImpl().zoomToSelection() + }, + adaptiveSizeByKey: function (A) { + Array.isArray(A) || (A = [A]); + var e = this.getViewerImpl().getBoundingBoxByIds(A); + e && !e.isEmpty() && this.getViewerImpl().zoomToBox(e) + }, + flyTo: function (A, e) { + var t = this; + this.getViewerImpl().animator.slerpFlyTo(A, this.viewerImpl, (function (A) { + t.viewerImpl.cameraControl.update(!0, !0) + }), e) + }, + linearFlyTo: function (A, e) { + var t = this; + this.getViewerImpl().animator.linearFlyTo(A, this.viewerImpl, (function (A) { + t.viewerImpl.cameraControl.update(!0, !0) + }), e) + }, + slerpFlyTo: function (A, e) { + var t = this; + this.getViewerImpl().animator.slerpFlyTo(A, this.viewerImpl, (function (A) { + t.viewerImpl.cameraControl.update(!0, !0) + }), e) + }, + setAnimatorDuration: function (A) { + var e = this.getViewerImpl().animator; + return !(!e || "number" != typeof A) && (e.setDuration(A), + !0) + }, + getAnimatorDuration: function () { + var A = this.getViewerImpl().animator; + if (A) + return A.getDuration() + }, + enableViewController: function () { + var A = this; + return this.viewController ? (this.viewController.enable(), + !0) : (this.viewController = new lp(this.viewerImpl, (function () { + return !0 + })), + this.viewController.init(this.getViewerImpl().getDomElement()), + this.viewController.render(), + this.getViewerImpl().addRenderFinishedListener((function () { + A.viewController.render() + })), + !0) + }, + disableViewController: function () { + return !!this.viewController && (this.viewController.disable(), + !0) + }, + enabledCameraRotateOfVerticalPolarAngle: function (A) { + this.getViewerImpl().cameraControl.enabledPolar(A), + Bh.warn("请改用 lockAxisZ 方法") + }, + lockAxisZ: function (A, e) { + this.getViewerImpl().lockAxisZ(A, e) + }, + setMinPolarAngle: function (A) { + this.getViewerImpl().cameraControl.setMinPolarAngle(A), + Bh.warn("请改用 lockAxisZ 方法") + }, + setMaxPolarAngle: function (A) { + this.getViewerImpl().cameraControl.setMaxPolarAngle(A), + Bh.warn("请改用 lockAxisZ 方法") + }, + getMinPolarAngle: function () { + return this.getViewerImpl().cameraControl.getMinPolarAngle() + }, + getMaxPolarAngle: function () { + return this.getViewerImpl().cameraControl.getMaxPolarAngle() + }, + enableRotate: function (A) { + return jh.NoRotate = !A, + !jh.NoRotate + }, + enablePan: function (A) { + return jh.NoPan = !A, + !jh.NoPan + }, + enableZoom: function (A) { + return jh.NoZoom = !A, + !jh.NoZoom + }, + setPointRotateMode: function (A) { + return this.getViewerImpl().setPointRotateMode(A), + jh.RotatePivotMode + }, + rotateCamera: function (A, e) { + var t = new s, + i = new y; + Array.isArray(A) ? t.set(A[0], A[1]) : t.set(A.x, A.y), + e ? Array.isArray(e) ? i.fromArray(e) : i.set(e.x, e.y, e.z) : i = this.getViewerImpl().getScene().getBoundingBoxWorld().getCenter(i), + this.getViewerImpl().rotateCamera(t, i) + }, + requestPointerLock: function () { + this.getViewerImpl().getControlManager().requestPointerLock() + }, + translateComponentByKey: function (A, e, t) { + this.getViewerImpl().translateComponentByKey(A, e, t) + }, + scaleComponentByKey: function (A, e, t) { + this.getViewerImpl().scaleComponentByKey(A, e, t) + }, + rotateComponentByKey: function (A, e, t) { + this.getViewerImpl().rotateComponentByKey(A, e, t) + }, + cancelTransformComponent: function (A) { + this.getViewerImpl().cancelTransformComponent(A) + }, + restoreComponentTransform: function () { + this.getViewerImpl().restoreComponentTransform() + }, + getComponentLocalMatrixByKey: function (A) { + return this.getViewerImpl().getComponentLocalMatrixByKey(A) + }, + getComponentWorldMatrixByKey: function (A) { + return this.getViewerImpl().getComponentWorldMatrixByKey(A) + }, + setComponentLocalMatrixByKey: function (A, e) { + return this.getViewerImpl().setComponentLocalMatrixByKey(A, e) + }, + resetComponentMatrix: function (A, e) { + return this.getViewerImpl().resetComponentMatrix(A, e) + }, + increaseComponentTransformControlSize: function () { + this.getViewerImpl().increaseComponentTransformControlSize() + }, + decreaseComponentTransformControlSize: function () { + this.getViewerImpl().decreaseComponentTransformControlSize() + }, + setComponentTransformSpaceToLocalSpace: function () { + this.getViewerImpl().setComponentTransformSpaceToLocalSpace() + }, + setComponentTransformSpaceToWorldSpace: function () { + this.getViewerImpl().setComponentTransformSpaceToWorldSpace() + }, + switchComponentTransformSpaceBetweenLocalAndWorld: function () { + this.getViewerImpl().switchComponentTransformSpaceBetweenLocalAndWorld() + }, + showComponentTransformOnAxis: function (A) { + this.getViewerImpl().showComponentTransformOnAxis(A) + }, + hideComponentTransformOnAxis: function (A) { + this.getViewerImpl().hideComponentTransformOnAxis(A) + }, + disableComponentTransform: function () { + this.getViewerImpl().disableComponentTransform() + }, + enableComponentTransform: function () { + this.getViewerImpl().enableComponentTransform() + }, + enableSectionBox: function () { + var A = this.getViewerImpl(); + A.controlManager.enableTool(A, Pc.CLIP_BY_BOX), + this._sectionTool = new Ap(A), + this._sectionTool.toggle(!0, !0), + this._sectionTool.setVisible(!0), + this._sectionTool.reset(), + this._isSection = !0, + this.render() + }, + disableSectionBox: function () { + this.getViewerImpl().controlManager.disableTool(Pc.CLIP_BY_BOX), + this._isSection = !1, + this.render() + }, + resetSectionBox: function () { + this._isSection ? (this.showSectionBox(), + this.setSectionBoxMode(), + this._sectionTool.reset("Rotate")) : Bh.log(fh[vc.language].SectionBoxLockHint) + }, + setSectionBoxMode: function (A) { + this._isSection ? this._sectionTool.setRotatable("Rotate" === A) : Bh.log(fh[vc.language].SectionBoxLockHint) + }, + showSectionBox: function () { + this._isSection ? (this._sectionTool.setVisible(!0), + this.render()) : Bh.log(fh[vc.language].SectionBoxLockHint) + }, + hideSectionBox: function () { + this._isSection ? (this._sectionTool.setVisible(!1), + this.render()) : Bh.log(fh[vc.language].SectionBoxLockHint) + }, + setSectionBox: function (A) { + var e = this.getViewerImpl(), + t = e.getScene().getClipPlanes(), + i = e.worldToDrawing(A.min), + o = e.worldToDrawing(A.max); + this.enableSectionBox(), + t.setSectionBox(i, o), + this.hideSectionBox() + }, + getSectionBoxState: function () { + if (this._isSection) + return this._sectionTool.saveState(); + Bh.log(fh[vc.language].SectionBoxLockHint) + }, + setSectionBoxState: function (A) { + this._isSection ? (this._sectionTool.loadState(A), + this.render()) : Bh.log(fh[vc.language].SectionBoxLockHint) + }, + getSceneState: function () { + return this.getViewerImpl().getSceneState() + }, + setSceneState: function (A) { + this.getViewerImpl().setSceneState(A) + }, + getScreenShot: function (A) { + var e, t, i, o; + return A.color && A.color instanceof Xh && (e = A.color.getRGBA()), + A.width > 0 && A.height > 0 && (i = A.width, + o = A.height), + "function" == typeof A.callback && (t = A.callback), + this.getViewerImpl().canvas2image(e, i, o, t) + }, + registerModelEventListener: function (A, e) { + this.getViewerImpl().registerEventListener(A, e) + }, + unregisterModelEventListener: function (A, e) { + this.getViewerImpl().unregisterEventListener(A, e) + }, + registerControlEventListener: function (A, e) { + this.getViewerImpl().registerDomEventListener(A, e) + }, + unregisterControlEventListener: function (A, e) { + this.getViewerImpl().unregisterDomEventListener(A, e) + }, + registerCameraEventListener: function (A, e) { + this.getViewerImpl().registerCameraEventListener(A, e) + }, + unregisterCameraEventListener: function (A, e) { + this.getViewerImpl().unregisterCameraEventListener(A, e) + }, + enableLogarithmicDepthBuffer: function (A) { + this.getViewerImpl().enableLogarithmicDepthBuffer(A) + }, + setSkyBox: function (A, e, t, i) { + var o = this.getRootScene(); + o && (A ? o.setSkyBox(void 0, A, e, t, i) : o.background = null) + }, + setDrawingStyle: function (A) { + this.getViewerImpl().setDrawingStyle(A), + this.render() + }, + setExposure: function (A) { + this.getViewerImpl().setExposureShift(A), + this.render() + }, + getBoardlineColor: function (A) { + var e = this.getViewerImpl().getWireframeColor(A); + return new Xh(e, e.opacity) + }, + setBoardlineColor: function (A, e) { + var t = null; + t = A instanceof Xh ? A : new Xh(A), + this.getViewerImpl().setWireframeColor(t, e) + }, + restoreBoardlineColor: function (A) { + this.getViewerImpl().restoreWireframeColor(A) + }, + getSelectionBoardlineColor: function () { + return this.getViewerImpl().getOutlineEdgeColor() || new Xh + }, + setSelectionBoardlineColor: function (A) { + var e = null; + e = A instanceof Xh ? A : new Xh(A), + this.getViewerImpl().setOutlineEdgeColor(e) + }, + restoreSelectionBoardlineColor: function () { + this.getViewerImpl().restoreOutlineEdgeColor() + }, + getSelectionColor: function () { + return this.getViewerImpl().getSelectionColor() + }, + setSelectionColor: function (A) { + var e = null; + e = A instanceof Xh ? A : new Xh(A), + this.getViewerImpl().setSelectionColor(e) + }, + restoreSelectionColor: function () { + this.getViewerImpl().restoreSelectionColor() + }, + setAxisNetColor: function (A, e) { + this.viewerImpl.setAxisNetColor(A, e) + }, + showAxisNet: function () { + this.viewerImpl.showAxisNet() + }, + hideAxisNet: function () { + this.viewerImpl.hideAxisNet() + }, + enableAxisNetStayInFront: function () { + this.viewerImpl.enableAxisNetStayInFront() + }, + disableAxisNetStayInFront: function () { + this.viewerImpl.disableAxisNetStayInFront() + }, + getScene: function () { + return this.getViewerImpl().getScene().getExternalScene() + }, + getRootScene: function () { + return this.getViewerImpl().getScene() + }, + updateSceneBoundingBox: function () { + this.getExternalComponentManager().calculateBoundingBox(), + this.getViewerImpl().modelManager.updateSceneBoundingBox() + }, + getCurrentControlName: function () { + return this.getViewerImpl().getCurrentControlName() + }, + setControlMode: function (A) { + this.getViewerImpl().setControlMode(A), + this.render() + }, + setControlDefault: function () { + this.setControlMode(Gc.PICK) + }, + setZoomSpeed: function (A) { + this.getViewerImpl().cameraControl.setZoomSpeed(A) + }, + getZoomSpeed: function () { + return this.getViewerImpl().cameraControl.getZoomSpeed() + }, + setZoomOutLimitRate: function (A) { + this.getViewerImpl().cameraControl.setZoomOutLimitRate(A) + }, + getZoomOutLimitRate: function () { + return this.getViewerImpl().cameraControl.getZoomOutLimitRate() + }, + setLightIntensityFactor: function (A) { + this.getViewerImpl().setLightIntensityFactor(A) + }, + enableShadow: function (A) { + this.getViewerImpl().enableShadow(A) + }, + updateShadowLight: function () { + this.getViewerImpl().updateShadowLight() + }, + setShadowLightDir: function (A) { + var e; + A ? (e = Array.isArray(A) ? (new y).fromArray(A) : A.isVector3 ? A : new y(A.x, A.y, A.z), + this.getViewerImpl().getScene().lightManager.shadowLightDir = e) : Bh.error("无效参数") + }, + getShadowLightDir: function () { + return this.getViewerImpl().getScene().lightManager.shadowLightDir.clone() + }, + getLightDirFromAltitudeAndAzimuth: function (A, e) { + if (void 0 !== A && void 0 !== e) + return this.getViewerImpl().getScene().lightManager.getLightDirFromAltitudeAndAzimuth(A, e); + Bh.error("参数不合法") + }, + getExternalComponentManager: function () { + return this.getViewerImpl().getExternalComponentManager() + }, + addExternalObject: function (A, e, t, i) { + this.getViewerImpl().addExternalObject(A, e, t, i) + }, + addExternalObjects: function (A, e, t) { + return this.getViewerImpl().addExternalObjects(A, e, t) + }, + removeExternalObjectByName: function (A) { + this.getViewerImpl().removeExternalObjectByName(A) + }, + clearExternalObjects: function () { + this.getViewerImpl().clearExternalObjects() + }, + getExternalObjectByName: function (A) { + return this.getViewerImpl().getExternalObjectByName(A) + }, + getAllExternalObjects: function () { + return this.getViewerImpl().getAllExternalObjects() + }, + showFPS: function () { + this.fpsStats = new $d; + var A = this; + this.viewportDiv.appendChild(this.fpsStats.dom), + this.fpsStats.listener = function () { + A.fpsStats.update() + }, + this.getViewerImpl().addRenderListener(this.fpsStats.listener) + }, + hideFPS: function () { + this.fpsStats && (this.viewportDiv.removeChild(this.fpsStats.dom), + this.getViewerImpl().removeRenderListener(this.fpsStats.listener)), + this.fpsStats = null + }, + cloneComponentByKey: function (A, e) { + var t = this.getViewerImpl().cloneComponent(A); + return "translate" === e ? this.translateComponentByKey(t.key) : "scale" === e ? this.scaleComponentByKey(t.key) : "rotate" === e && this.rotateComponentByKey(t.key), + null !== t ? { + mesh: t, + key: t.key + } : null + }, + setCloneComponentMaterialsByKey: function (A, e, t) { + return this.getViewerImpl().getExternalComponentManager().setCloneComponentMaterialsByKey(A, e, t) + }, + createSmoothCurve: function (A) { + return this.getViewerImpl().catmullRomCurve(A) + }, + destroy: function () { + this.getViewerImpl().destroy(), + this.viewController && (this.viewController.destroy(), + this.viewController = null) + } + }); + var qy, jy, Hy, Yy, Wy = function (A) { + var e = A.lobibox, + t = A.toolId, + i = A.Flag, + o = document.createElement("div"); + return o.className = "tab-body", + o.id = "tab-compare-" + t, + e.window({ + title: ("old" === t ? "新-旧" : "旧-新") + "模型对比结果", + width: 334, + height: 705, + closeOnEsc: !1, + closeButton: !0, + afterWindowHide: function () { + var A = document.getElementById("modelCompares" + t); + i.modelCompares = !1, + A && (A.style.backgroundColor = "", + A.querySelector(".yj-icon").className = "yj-icon modelCompares-icon") + }, + afterWindowShow: function () { + var A = document.getElementById("modelCompares" + t); + i.modelCompares = !0, + A && (A.style.backgroundColor = "#1f89de", + A.querySelector(".yj-icon").className = "yj-icon modelCompares-icon active") + }, + content: o + }) + }, + Jy = function (A) { + var e = A.lobibox, + t = A.toolId, + i = document.createElement("div"); + i.className = "tab-body", + i.id = "tab-compare-properties-" + t; + var o = document.createElement("table"); + o.classList.add("sx-table"), + o.classList.add("table-no-top"), + i.appendChild(o); + var n = document.createElement("thead"); + o.appendChild(n); + var r = document.createElement("tbody"); + o.appendChild(r); + var a = document.createElement("tr"); + a.className = "noprop", + r.appendChild(a); + var s = document.createElement("td"); + return s.innerText = "尚未选择构件", + a.appendChild(s), + e.window({ + title: "属性对比详情", + width: 500, + height: 400, + closeOnEsc: !1, + closeButton: !0, + afterWindowHide: function () {}, + content: i + }) + }, + zy = { + AGGREGATION: "AGGREGATION", + SEPARATION: "SEPARATION", + MULTIWINDOW: "MULTIWINDOW" + }, + Zy = { + added: "added", + deleted: "deleted", + changed: "changed", + noChanged: "noChanged", + oldChanged: "oldChanged", + newChanged: "newChanged", + oldNoChanged: "oldNoChanged", + newNoChanged: "newNoChanged" + }, + Xy = { + addedColor: { + color: 32768, + opacity: 1 + }, + deletedColor: { + color: 16711680, + opacity: 1 + }, + changedColor: { + color: 16753920, + opacity: 1 + } + }, + _y = { + ACCOUNT_NO_EXIST: "ACCOUNT_NO_EXIST", + NO_PERMISSION: "NO_PERMISSION", + ON_NETWORK_ERROR: "ON_NETWORK_ERROR", + ON_LOAD_INVALID_COMPARES: "ON_LOAD_INVALID_COMPARES", + ON_LOAD_INVALID_CONTRASTDETAILS: "ON_LOAD_INVALID_CONTRASTDETAILS", + ON_LOAD_INVALID_STATE: "ON_LOAD_INVALID_STATE", + ON_LOAD_ERROR: "ON_LOAD_ERROR" + }, + $y = function (A, e) { + var t = this, + i = uh.extend({}, { + host: "https://bos3d.bimwinner.com", + viewport: "", + toolbar: !0, + coloringImmediately: !1, + showPanel: !1 + }, A); + this.host = i.host, + this.coloringImmediately = i.coloringImmediately, + this.domElement = document.getElementById(i.viewport), + this.domElement.style.position = "relative", + this.oldModelKey = "", + this.newModelKey = "", + this.displayModel = e || zy.SEPARATION, + t.oldNoChangedList = [], + t.newNoChangedList = [], + t.oldChangedList = [], + t.newChangedList = [], + t.deletedList = [], + t.addedList = [], + this.useNewUI = Boolean(window.EIMMODELUI); + var o = { + modelCompares: i.showPanel + }, + n = { + modelCompares: i.showPanel + }; + switch (this.displayModel) { + case zy.AGGREGATION: + case zy.SEPARATION: + if (this.firstViewer = new Py(A), + this.secondViewer = this.firstViewer, + t.oldLobibox = new bh, + t.oldLobibox.viewport = document.querySelector("#" + t.firstViewer.viewport), + t.newLobibox = t.oldLobibox, + i.toolbar) { + this.useNewUI ? this.firstTool = new window.EIMMODELUI({ + viewer3D: this.firstViewer, + EIM: window.EIM, + EIMMODEL: window.EIMMODEL + }) : (this.firstTool = new Xd(this.firstViewer), + this.firstTool.createTool()), + this.secondTool = this.firstTool, + this.oldCompareWindow = Wy({ + toolId: "old", + lobibox: t.oldLobibox, + Flag: o + }), + this.newCompareWindow = this.oldCompareWindow, + this.oldContrastDetailsWindow = Jy({ + toolId: "old", + lobibox: t.oldLobibox + }), + this.newContrastDetailsWindow = this.oldContrastDetailsWindow, + this.oldCompareWindow.setPosition({ + left: "", + right: 5, + top: 60 + }), + this.oldContrastDetailsWindow.setPosition({ + left: t.domElement.offsetWidth / 2 + t.domElement.offsetLeft / 2 - 250, + top: 200 + }), + t.oldContrastDetailsWindow.windowHide(); + var r = document.createElement("div"); + r.className = "yj-group", + this.useNewUI ? this.firstTool.plugin.addIcon("topRight", r) : this.firstTool.toolbarTop.appendChild(r); + var a = document.createElement("button"); + a.className = "yj-but", + a.title = "模型对比结果", + a.id = "modelComparesold"; + var s = document.createElement("div"); + s.classList.add("yj-icon"), + s.classList.add("modelCompares-icon"), + a.appendChild(s), + r.appendChild(a), + a.addEventListener("click", (function (A) { + o.modelCompares ? t.oldCompareWindow.windowHide() : (o.modelCompares = !o.modelCompares, + t.oldCompareWindow.windowShow()) + })) + } + break; + case zy.MULTIWINDOW: + var l = document.createElement("div"); + l.setAttribute("id", "firstViewer"), + l.style.width = "50%", + l.style.height = "100%", + l.style.float = "left", + this.domElement.appendChild(l); + var c = document.createElement("div"); + if (c.setAttribute("id", "secondViewer"), + c.style.width = "50%", + c.style.height = "100%", + c.style.float = "left", + this.domElement.appendChild(l), + this.domElement.appendChild(c), + this.firstViewer = new Py({ + host: this.host, + viewport: "firstViewer" + }), + this.secondViewer = new Py({ + host: this.host, + viewport: "secondViewer" + }), + t.oldLobibox = new bh, + t.oldLobibox.viewport = document.querySelector("#" + t.firstViewer.viewport), + t.newLobibox = new bh, + t.newLobibox.viewport = document.querySelector("#" + t.secondViewer.viewport), + i.toolbar) { + this.useNewUI ? (this.firstTool = new window.EIMMODELUI({ + viewer3D: this.firstViewer, + EIM: window.EIM, + EIMMODEL: window.EIMMODEL + }), + this.secondTool = new window.EIMMODELUI({ + viewer3D: this.secondViewer, + EIM: window.EIM, + EIMMODEL: window.EIMMODEL + })) : (this.firstTool = new Xd(this.firstViewer), + this.firstTool.createTool(), + this.secondTool = new Xd(this.secondViewer), + this.secondTool.createTool()), + this.oldCompareWindow = Wy({ + toolId: "old", + lobibox: t.oldLobibox, + Flag: o + }), + this.newCompareWindow = Wy({ + toolId: "new", + lobibox: t.newLobibox, + Flag: n + }), + this.oldContrastDetailsWindow = Jy({ + toolId: "old", + lobibox: t.oldLobibox + }), + this.newContrastDetailsWindow = Jy({ + toolId: "new", + lobibox: t.newLobibox + }), + t.oldContrastDetailsWindow.windowHide(), + t.newContrastDetailsWindow.windowHide(), + this.oldContrastDetailsWindow.setTitle("旧-新属性对比详情"), + this.newContrastDetailsWindow.setTitle("新-旧属性对比详情"), + this.oldCompareWindow.setPosition({ + left: "", + right: 5 + t.domElement.offsetWidth / 2 + t.domElement.offsetLeft / 2, + top: 60 + }), + this.oldContrastDetailsWindow.setPosition({ + left: t.domElement.offsetWidth / 4 + t.domElement.offsetLeft / 4 - 250, + top: 200 + }), + this.newCompareWindow.setPosition({ + left: "", + right: 5, + top: 60 + }), + this.newContrastDetailsWindow.setPosition({ + left: t.domElement.offsetWidth / 4 * 3 + t.domElement.offsetLeft / 4 * 3 - 250, + top: 200 + }); + var h = document.createElement("div"); + h.className = "yj-group", + this.useNewUI ? this.firstTool.plugin.addIcon("topRight", h) : this.firstTool.toolbarTop.appendChild(h); + var d = document.createElement("button"); + d.className = "yj-but", + d.title = "模型对比结果", + d.id = "modelComparesold"; + var p = document.createElement("div"); + p.classList.add("yj-icon"), + p.classList.add("modelCompares-icon"), + d.appendChild(p), + h.appendChild(d), + d.addEventListener("click", (function (A) { + o.modelCompares ? t.oldCompareWindow.windowHide() : (o.modelCompares = !o.modelCompares, + t.oldCompareWindow.windowShow()) + })); + var g = document.createElement("div"); + g.className = "yj-group", + this.useNewUI ? this.secondTool.plugin.addIcon("topRight", g) : this.secondTool.toolbarTop.appendChild(g); + var u = document.createElement("button"); + u.className = "yj-but", + u.title = "模型对比结果", + u.id = "modelComparesnew"; + var f = document.createElement("div"); + f.classList.add("yj-icon"), + f.classList.add("modelCompares-icon"), + u.appendChild(f), + g.appendChild(u), + u.addEventListener("click", (function (A) { + n.modelCompares ? t.newCompareWindow.windowHide() : (n.modelCompares = !n.modelCompares, + t.newCompareWindow.windowShow()) + })) + } + break; + default: + Bh.error("无效的显示模式!") + } + i.showPanel || (t.newCompareWindow && t.newCompareWindow.windowHide(), + t.oldCompareWindow && t.oldCompareWindow.windowHide()), + this.firstViewer.getViewerImpl().modelManager.addEventListener(Rc.ON_LOAD_COMPLETE, (function (A) { + A.modelKey === t.oldModelKey && (t.oldModelLoaded = !0, + t._applyCompareData(), + t._initCompareResultPlane(t.compareData)) + })), + this.secondViewer.getViewerImpl().modelManager.addEventListener(Rc.ON_LOAD_COMPLETE, (function (A) { + A.modelKey === t.newModelKey && (t.newModelLoaded = !0, + t._applyCompareData(), + t._initCompareResultPlane(t.compareData)) + })) + }; + Object.assign($y.prototype, Ld.prototype), + Object.assign($y.prototype, { + resize: function (A, e) { + switch (this.domElement && (this.domElement.style.height = e + "px", + this.domElement.style.width = A + "px"), + this.displayModel) { + case zy.AGGREGATION: + case zy.SEPARATION: + this.firstViewer.resize(A, e); + break; + case zy.MULTIWINDOW: + this.firstViewer.resize(A / 2, e), + this.secondViewer.resize(A / 2, e); + break; + default: + this.firstViewer.resize(A, e) + } + }, + autoResize: function () { + this.resize(this.getClientWidth(), this.getClientHeight()) + }, + getClientHeight: function () { + return xh.getClientHeight() + }, + getClientWidth: function () { + return xh.getClientWidth() + }, + resetOldScene: function (A) { + this.firstViewer.resetScene(A) + }, + resetNewScene: function (A) { + this.secondViewer.resetScene(A) + }, + resetScene: function (A) { + this.firstViewer.resetScene(A), + this.secondViewer.resetScene(A), + this._applyCompareData() + }, + transparentComponentsByType: function (A) { + var e = this._getDataByType(A); + this.firstViewer.transparentComponentsByKey(e.oldList), + this.secondViewer.transparentComponentsByKey(e.newList) + }, + transparentOtherComponentsByType: function (A) { + var e = this._getDataByType(A); + switch (this.displayModel) { + case zy.AGGREGATION: + case zy.SEPARATION: + this.firstViewer.transparentOtherComponentsByKey([].concat(e.oldList).concat(e.newList)); + break; + case zy.MULTIWINDOW: + this.firstViewer.transparentOtherComponentsByKey(e.oldList), + this.secondViewer.transparentOtherComponentsByKey(e.newList) + } + }, + closeTransparentComponentsByType: function (A) { + var e = this._getDataByType(A); + switch (this.displayModel) { + case zy.AGGREGATION: + case zy.SEPARATION: + this.firstViewer.closeTransparentComponentsByKey([].concat(e.oldList).concat(e.newList)); + break; + case zy.MULTIWINDOW: + this.firstViewer.closeTransparentComponentsByKey(e.oldList), + this.secondViewer.closeTransparentComponentsByKey(e.newList) + } + }, + clearComponentTransparentList: function () { + switch (this.displayModel) { + case zy.AGGREGATION: + case zy.SEPARATION: + this.firstViewer.clearComponentTransparentList(); + break; + case zy.MULTIWINDOW: + this.firstViewer.clearComponentTransparentList(), + this.secondViewer.clearComponentTransparentList() + } + }, + showComponentsByType: function (A) { + var e = this._getDataByType(A); + switch (this.displayModel) { + case zy.AGGREGATION: + case zy.SEPARATION: + this.firstViewer.showComponentsByKey([].concat(e.oldList).concat(e.newList)); + break; + case zy.MULTIWINDOW: + this.firstViewer.showComponentsByKey(e.oldList), + this.secondViewer.showComponentsByKey(e.newList) + } + }, + hideComponentsByType: function (A) { + var e = this._getDataByType(A); + switch (this.displayModel) { + case zy.AGGREGATION: + case zy.SEPARATION: + this.firstViewer.hideComponentsByKey([].concat(e.oldList).concat(e.newList)); + break; + case zy.MULTIWINDOW: + this.firstViewer.hideComponentsByKey(e.oldList), + this.secondViewer.hideComponentsByKey(e.newList) + } + }, + highlightComponentsByType: function (A) { + var e = this._getDataByType(A); + switch (this.displayModel) { + case zy.AGGREGATION: + case zy.SEPARATION: + this.firstViewer.highlightComponentsByKey([].concat(e.oldList).concat(e.newList)); + break; + case zy.MULTIWINDOW: + this.firstViewer.highlightComponentsByKey(e.oldList), + this.secondViewer.highlightComponentsByKey(e.newList) + } + }, + addHighlightComponentsByType: function (A) { + var e = this._getDataByType(A); + switch (this.displayModel) { + case zy.AGGREGATION: + case zy.SEPARATION: + this.firstViewer.addHighlightComponentsByKey([].concat(e.oldList).concat(e.newList)); + break; + case zy.MULTIWINDOW: + this.firstViewer.addHighlightComponentsByKey(e.oldList), + this.secondViewer.addHighlightComponentsByKey(e.newList) + } + }, + closeHighlightComponentsByType: function (A) { + var e = this._getDataByType(A); + switch (this.displayModel) { + case zy.AGGREGATION: + case zy.SEPARATION: + this.firstViewer.closeHighlightComponentsByKey([].concat(e.oldList).concat(e.newList)); + break; + case zy.MULTIWINDOW: + this.firstViewer.closeHighlightComponentsByKey(e.oldList), + this.secondViewer.closeHighlightComponentsByKey(e.newList) + } + }, + getHighlightComponentsKey: function () { + switch (this.displayModel) { + case zy.AGGREGATION: + case zy.SEPARATION: + return this.firstViewer.getHighlightComponentsKey(); + case zy.MULTIWINDOW: + return [].concat(this.firstViewer.getHighlightComponentsKey()).concat(this.secondViewer.getHighlightComponentsKey()); + default: + return [] + } + }, + clearHighlightList: function () { + switch (this.displayModel) { + case zy.AGGREGATION: + case zy.SEPARATION: + this.firstViewer.clearHighlightList(); + break; + case zy.MULTIWINDOW: + this.firstViewer.clearHighlightList(), + this.secondViewer.clearHighlightList() + } + }, + getHighlightComponents: function () { + switch (this.displayModel) { + case zy.AGGREGATION: + case zy.SEPARATION: + return this.firstViewer.getHighlightComponents(); + case zy.MULTIWINDOW: + return [].concat(this.firstViewer.getHighlightComponents()).concat(this.secondViewer.getHighlightComponents()); + default: + return [] + } + }, + colorfulComponentsByType: function (A, e, t) { + var i = this._getDataByType(A); + switch (this.displayModel) { + case zy.AGGREGATION: + case zy.SEPARATION: + this.firstViewer.colorfulComponentsByKey([].concat(i.oldList).concat(i.newList), e, t); + break; + case zy.MULTIWINDOW: + this.firstViewer.colorfulComponentsByKey(i.oldList, e, t), + this.secondViewer.colorfulComponentsByKey(i.newList, e, t) + } + }, + closeColorfulComponentsByType: function (A) { + var e = this._getDataByType(A); + switch (this.displayModel) { + case zy.AGGREGATION: + case zy.SEPARATION: + this.firstViewer.closeColorfulComponentsByKey([].concat(e.oldList).concat(e.newList)); + break; + case zy.MULTIWINDOW: + this.firstViewer.closeColorfulComponentsByKey(e.oldList), + this.secondViewer.closeColorfulComponentsByKey(e.newList) + } + }, + clearColorfulList: function () { + switch (this.displayModel) { + case zy.AGGREGATION: + case zy.SEPARATION: + this.firstViewer.clearColorfulList(); + break; + case zy.MULTIWINDOW: + this.firstViewer.clearColorfulList(), + this.secondViewer.clearColorfulList() + } + }, + wireFrameComponentsByType: function (A) { + var e = this._getDataByType(A); + switch (this.displayModel) { + case zy.AGGREGATION: + case zy.SEPARATION: + this.firstViewer.wireFrameComponentsByKey([].concat(e.oldList).concat(e.newList)); + break; + case zy.MULTIWINDOW: + this.firstViewer.wireFrameComponentsByKey(e.oldList), + this.secondViewer.wireFrameComponentsByKey(e.newList) + } + }, + closeWireFrameComponentsByType: function (A) { + var e = this._getDataByType(A); + switch (this.displayModel) { + case zy.AGGREGATION: + case zy.SEPARATION: + this.firstViewer.closeWireFrameComponentsByKey([].concat(e.oldList).concat(e.newList)); + break; + case zy.MULTIWINDOW: + this.firstViewer.closeWireFrameComponentsByKey(e.oldList), + this.secondViewer.closeWireFrameComponentsByKey(e.newList) + } + }, + clearWireframeList: function () { + switch (this.displayModel) { + case zy.AGGREGATION: + case zy.SEPARATION: + this.firstViewer.clearWireframeList(); + break; + case zy.MULTIWINDOW: + this.firstViewer.clearWireframeList(), + this.secondViewer.clearWireframeList() + } + }, + isolateComponentsByType: function (A, e) { + var t = this._getDataByType(A); + switch (this.displayModel) { + case zy.AGGREGATION: + case zy.SEPARATION: + this.firstViewer.isolateComponentsByKey([].concat(t.oldList).concat(t.newList), e); + break; + case zy.MULTIWINDOW: + this.firstViewer.isolateComponentsByKey(t.oldList, e), + this.secondViewer.isolateComponentsByKey(t.newList, e) + } + }, + closeIsolateComponentsByType: function (A) { + var e = this._getDataByType(A); + switch (this.displayModel) { + case zy.AGGREGATION: + case zy.SEPARATION: + this.firstViewer.closeIsolateComponentsByKey([].concat(e.oldList).concat(e.newList)); + break; + case zy.MULTIWINDOW: + this.firstViewer.closeIsolateComponentsByKey(e.oldList), + this.secondViewer.closeIsolateComponentsByKey(e.newList) + } + }, + clearIsolation: function () { + switch (this.displayModel) { + case zy.AGGREGATION: + case zy.SEPARATION: + this.firstViewer.clearIsolation(); + break; + case zy.MULTIWINDOW: + this.firstViewer.clearIsolation(), + this.secondViewer.clearIsolation() + } + }, + getAddedList: function () { + return this.addedList + }, + getDeletedList: function () { + return this.deletedList + }, + getChangedList: function () { + return [].concat(this.oldChangedList).concat(this.newChangedList) + }, + getNoChangedList: function () { + return [].concat(this.oldNoChangedList).concat(this.newNoChangedList) + }, + getNewChangedList: function () { + return this.newChangedList + }, + getOldChangedList: function () { + return this.oldChangedList + }, + getNewNoChangedList: function () { + return this.newNoChangedList + }, + getOldNoChangedList: function () { + return this.oldNoChangedList + }, + setAddedColor: function (A, e) { + Xy.addedColor.color = A, + Xy.addedColor.opacity = e + }, + setChangedColor: function (A, e) { + Xy.changedColor.color = A, + Xy.changedColor.opacity = e + }, + setDeletedColor: function (A, e) { + Xy.deletedColor.color = A, + Xy.deletedColor.opacity = e + }, + getAddedColor: function () { + return Xy.addedColor + }, + getChangedColor: function () { + return Xy.changedColor + }, + getDeletedColor: function () { + return Xy.deletedColor + }, + getOldViewer: function () { + return this.firstViewer + }, + getNewViewer: function () { + return this.secondViewer + }, + getOldToolbar: function () { + return this.firstTool + }, + getNewToolbar: function () { + return this.secondTool + }, + getComponentAttribute: function (A, e) { + var t = this.firstViewer.viewerImpl.getModelByComponentKey(A), + i = this.secondViewer.viewerImpl.getModelByComponentKey(A); + t ? this.firstViewer.getComponentsAttributeByKey(A, (function (A) { + A && e(A.attribute) + })) : i && this.secondViewer.getComponentsAttributeByKey(A, (function (A) { + A && e(A.attribute) + })) + }, + getContrastDetails: function (A, e, t) { + var i = this; + _d({ + type: "GET", + url: this.host + "/api/" + this.projectKey + "/compares/changes?compareKey=" + this.compareKey + "&newComponentKey=" + e + "&oldComponentKey=" + A, + headers: { + Authorization: this.accessToken + }, + success: function (A) { + var e = {}; + if ("string" == typeof A) + try { + e = JSON.parse(A) + } catch (A) { + return void i.dispatchEvent({ + type: _y.ON_LOAD_INVALID_CONTRASTDETAILS, + compareKey: i.compareKey + }) + } + else + e = A; + e && "SUCCESS" === e.code ? t && t(e.data) : (Bh.log(i.compareKey, "获取对比详情出错! ", e.message), + i.dispatchEvent({ + type: _y.ON_LOAD_ERROR, + compareKey: i.compareKey, + code: e.code, + message: e.message + })) + }, + error: function (A, e) { + switch (A) { + case 401: + i.dispatchEvent({ + type: _y.ACCOUNT_NO_EXIST, + compareKey: i.compareKey, + data: e + }); + break; + case 403: + i.dispatchEvent({ + type: _y.NO_PERMISSION, + compareKey: i.compareKey, + data: e + }); + break; + default: + i.dispatchEvent({ + type: _y.ON_NETWORK_ERROR, + compareKey: i.compareKey, + data: A + }) + } + } + }) + }, + showOldContrastDetails: (qy = "", + jy = document.getElementById("tab-compare-properties-old"), + Hy = function (A, e, t, i, o) { + var n = document.createElement("tr"); + i.parentNode.appendChild(n), + n.classList.add(o); + var r = document.createElement("td"); + r.innerText = A || "", + n.appendChild(r); + var a = document.createElement("td"); + a.innerText = e || "", + n.appendChild(a); + var s = document.createElement("td"); + s.innerText = t || "", + n.appendChild(s) + }, + Yy = function (A, e, t, i) { + var o = document.createElement("tr"); + o.className = "sx-active", + jy.querySelector("table tbody").appendChild(o); + var n = document.createElement("td"); + for (var r in n.colSpan = 2, + n.style.fontSize = "14px", + o.appendChild(n), + n.appendChild(document.createElement("b")), + n.firstElementChild.innerHTML = A, + e) + if (e.hasOwnProperty(r)) { + if (!(t && t[r] || i && i[r])) { + Hy(r, e[r], e[r], o, "compares_noChanged"); + continue + } + if (t && t[r] && i && i[r]) { + Hy(r, e[r], i[r], o, "compares_changed"), + delete i[r]; + continue + } + if ((!t || !t[r]) && i && i[r]) { + Hy(r, "", i[r], o, "compares_added"), + delete i[r]; + continue + }!t || !t[r] || i && i[r] || Hy(r, e[r], "", o, "compares_deleted") + } + for (var a in i) + i.hasOwnProperty(a) && (void 0 !== e[a] ? Hy(a, e[a], i[a], o, "compares_changed") : Hy(a, "", i[a], o, "compares_added")) + }, + function (A) { + var e = this; + if ((jy = document.querySelector("#tab-compare-properties-old")) && (e.showOldContrastDetailsWindow(), + A !== qy)) { + if (void 0 === A) { + var t = jy.querySelectorAll("table tbody tr"); + jy.querySelector("table tbody").removeChild(t[0]), + jy.querySelector("table tbody").innerHTML = ""; + var i = document.createElement("tr"); + i.className = "noprop"; + var o = document.createElement("td"); + return o.setAttribute("colspan", "2"), + o.innerHTML = "未选中构件", + i.appendChild(o), + jy.querySelector("table tbody").appendChild(i), + void(qy = A) + } + qy = A; + var n = jy.querySelectorAll("table tbody tr"); + jy.querySelector("table tbody").removeChild(n[0]), + e.getComponentAttribute(qy, (function (A) { + if (jy.querySelector("table tbody").innerHTML = "", + null === A) { + var t = document.createElement("tr"); + t.className = "noprop"; + var i = document.createElement("td"); + return i.innerHTML = "没有属性", + t.appendChild(i), + void jy.querySelector("table tbody").appendChild(t) + } + if (void 0 === A) { + var o = document.createElement("tr"); + o.className = "noprop"; + var n = document.createElement("td"); + return n.innerHTML = "属性加载失败", + o.appendChild(n), + void jy.querySelector("table tbody").appendChild(o) + } + var r = qy.indexOf("_"); + if (-1 !== r) { + var a = e.newModelKey + qy.slice(r); + e.getContrastDetails(qy, a, (function (e) { + var t = e.old.attribute, + i = e.new.attribute, + o = document.createElement("tr"); + o.className = "noprop"; + var n = document.createElement("th"); + o.appendChild(n); + var r = document.createElement("span"); + r.classList.add("value"), + r.classList.add("nonEditable"), + r.innerHTML = "属性名", + n.appendChild(r); + var a = document.createElement("th"); + o.appendChild(a); + var s = document.createElement("span"); + s.classList.add("value"), + s.classList.add("nonEditable"), + s.innerHTML = "修改前", + a.appendChild(s); + var l = document.createElement("th"); + o.appendChild(l); + var c = document.createElement("span"); + c.classList.add("value"), + c.classList.add("nonEditable"), + c.innerHTML = "修改后", + l.appendChild(c), + jy.querySelector("table tbody").appendChild(o); + var h = A; + for (var d in h) + "object" === lc(h[d]) ? (Yy(d, h[d], t[d], i[d]), + delete i[d]) : "string" == typeof h[d] && Hy(d, h[d], i[d], o); + for (var p in i) + "object" === lc(h[p]) ? Yy(p, h[p], t[p], i[p]) : "string" == typeof h[p] && Hy(p, h[p], i[p], o) + })) + } + })) + } + } + ), + showNewContrastDetails: function () { + var A = "", + e = document.getElementById("tab-compare-properties-new"), + t = function (A, e, t, i, o) { + var n = document.createElement("tr"); + i.parentNode.appendChild(n), + n.classList.add(o); + var r = document.createElement("td"); + r.innerText = A || "", + n.appendChild(r); + var a = document.createElement("td"); + a.innerText = e || "", + n.appendChild(a); + var s = document.createElement("td"); + s.innerText = t || "", + n.appendChild(s) + }, + i = function (A, i, o, n) { + var r = document.createElement("tr"); + r.className = "sx-active", + e.querySelector("table tbody").appendChild(r); + var a = document.createElement("td"); + for (var s in a.colSpan = 2, + a.style.fontSize = "14px", + r.appendChild(a), + a.appendChild(document.createElement("b")), + a.firstElementChild.innerHTML = A, + i) + if (i.hasOwnProperty(s)) { + if (!(o && o[s] || n && n[s])) { + t(s, i[s], i[s], r, "compares_noChanged"); + continue + } + if (o && o[s] && n && n[s]) { + t(s, i[s], n[s], r, "compares_changed"), + delete n[s]; + continue + } + if ((!o || !o[s]) && n && n[s]) { + t(s, "", n[s], r, "compares_added"), + delete n[s]; + continue + }!o || !o[s] || n && n[s] || t(s, i[s], "", r, "compares_deleted") + } + for (var l in n) + n.hasOwnProperty(l) && (void 0 !== i[l] ? t(l, i[l], n[l], r, "compares_changed") : t(l, "", n[l], r, "compares_added")) + }; + return function (o) { + var n = this; + if ((e = document.querySelector("#tab-compare-properties-new")) && (n.showNewContrastDetailsWindow(), + o !== A)) { + if (void 0 === o) { + var r = e.querySelectorAll("table tbody tr"); + e.querySelector("table tbody").removeChild(r[0]), + e.querySelector("table tbody").innerHTML = ""; + var a = document.createElement("tr"); + a.className = "noprop"; + var s = document.createElement("td"); + return s.setAttribute("colspan", "2"), + s.innerHTML = "未选中构件", + a.appendChild(s), + e.querySelector("table tbody").appendChild(a), + void(A = o) + } + A = o; + var l = e.querySelectorAll("table tbody tr"); + e.querySelector("table tbody").removeChild(l[0]), + n.getComponentAttribute(A, (function (o) { + if (e.querySelector("table tbody").innerHTML = "", + null === o) { + var r = document.createElement("tr"); + r.className = "noprop"; + var a = document.createElement("td"); + return a.innerHTML = "没有属性", + r.appendChild(a), + void e.querySelector("table tbody").appendChild(r) + } + if (void 0 === o) { + var s = document.createElement("tr"); + s.className = "noprop"; + var l = document.createElement("td"); + return l.innerHTML = "属性加载失败", + s.appendChild(l), + void e.querySelector("table tbody").appendChild(s) + } + var c = A.indexOf("_"); + if (-1 !== c) { + var h = n.oldModelKey + A.slice(c); + n.getContrastDetails(h, A, (function (A) { + var n = A.new.attribute, + r = A.old.attribute, + a = document.createElement("tr"); + a.className = "noprop"; + var s = document.createElement("th"); + a.appendChild(s); + var l = document.createElement("span"); + l.classList.add("value"), + l.classList.add("nonEditable"), + l.innerHTML = "属性名", + s.appendChild(l); + var c = document.createElement("th"); + a.appendChild(c); + var h = document.createElement("span"); + h.classList.add("value"), + h.classList.add("nonEditable"), + h.innerHTML = "修改前", + c.appendChild(h); + var d = document.createElement("th"); + a.appendChild(d); + var p = document.createElement("span"); + p.classList.add("value"), + p.classList.add("nonEditable"), + p.innerHTML = "修改后", + d.appendChild(p), + e.querySelector("table tbody").appendChild(a); + var g = o; + for (var u in g) + "object" === lc(g[u]) ? (i(u, g[u], n[u], r[u]), + delete r[u]) : "string" == typeof g[u] && t(u, g[u], r[u], a); + for (var f in r) + "object" === lc(g[f]) ? i(f, g[f], n[f], r[f]) : "string" == typeof g[f] && t(f, g[f], r[f], a) + })) + } + })) + } + } + }(), + showOldContrastDetailsWindow: function () { + this.oldContrastDetailsWindow && this.oldContrastDetailsWindow.windowShow && this.oldContrastDetailsWindow.windowShow() + }, + showNewContrastDetailsWindow: function () { + this.newContrastDetailsWindow && this.newContrastDetailsWindow.windowShow && this.newContrastDetailsWindow.windowShow() + }, + hideOldContrastDetailsWindow: function () { + this.oldContrastDetailsWindow && this.oldContrastDetailsWindow.windowHide && this.oldContrastDetailsWindow.windowHide() + }, + hideNewContrastDetailsWindow: function () { + this.newContrastDetailsWindow && this.newContrastDetailsWindow.windowHide() && this.newContrastDetailsWindow.windowHide() + }, + showContrastDetailsWindow: function () { + this.showOldContrastDetailsWindow(), + this.showNewContrastDetailsWindow() + }, + hideContrastDetailsWindow: function () { + this.hideOldContrastDetailsWindow(), + this.hideNewContrastDetailsWindow() + }, + showOldCompareWindow: function () { + this.oldCompareWindow && this.oldCompareWindow.windowShow && this.oldCompareWindow.windowShow() + }, + showNewCompareWindow: function () { + this.newCompareWindow && this.newCompareWindow.windowShow && this.newCompareWindow.windowShow() + }, + hideOldCompareWindow: function () { + this.oldCompareWindow && this.oldCompareWindow.windowHide && this.oldCompareWindow.windowHide() + }, + hideNewCompareWindow: function () { + this.newCompareWindow && this.newCompareWindow.windowHide() && this.newCompareWindow.windowHide() + }, + showCompareWindow: function () { + this.showOldCompareWindow(), + this.showNewCompareWindow() + }, + hideCompareWindow: function () { + this.hideOldCompareWindow(), + this.hideNewCompareWindow() + } + }), + $y.prototype.addView = function (A, e, t) { + var i = this; + this.compareKey = A, + this.projectKey = e, + this.accessToken = t || "", + _d({ + type: "GET", + url: this.host + "/api/" + e + "/compares/status?compareKey=" + A, + headers: { + Authorization: this.accessToken + }, + success: i._loadSuccess.bind(i), + error: function (e, t) { + switch (e) { + case 401: + i.dispatchEvent({ + type: _y.ACCOUNT_NO_EXIST, + compareKey: A, + data: t + }); + break; + case 403: + i.dispatchEvent({ + type: _y.NO_PERMISSION, + compareKey: A, + data: t + }); + break; + default: + i.dispatchEvent({ + type: _y.ON_NETWORK_ERROR, + compareKey: A, + data: e + }) + } + } + }), + i._loadCompares() + }, + $y.prototype._loadCompares = function () { + var A = this; + _d({ + type: "GET", + url: this.host + "/api/" + this.projectKey + "/compares?compareKey=" + this.compareKey, + headers: { + Authorization: this.accessToken + }, + success: A._loadComparesSuccess.bind(A), + error: function (e, t) { + switch (e) { + case 401: + A.dispatchEvent({ + type: _y.ACCOUNT_NO_EXIST, + compareKey: A.compareKey, + data: t + }); + break; + case 403: + A.dispatchEvent({ + type: _y.NO_PERMISSION, + compareKey: A.compareKey, + data: t + }); + break; + default: + A.dispatchEvent({ + type: _y.ON_NETWORK_ERROR, + compareKey: A.compareKey, + data: e + }) + } + } + }) + }, + $y.prototype._loadComparesSuccess = function (A) { + var e = {}; + if ("string" == typeof A) + try { + e = JSON.parse(A) + } catch (A) { + return void this.dispatchEvent({ + type: _y.ON_LOAD_INVALID_COMPARES, + compareKey: this.compareKey + }) + } + else + e = A; + if (e && "SUCCESS" === e.code) { + this.compareData = e.data, + this.compareDataLoaded = !0; + for (var t = [], i = [], o = [], n = [], r = null, a = 0, s = this.compareData.changed.categories.length; s > a; a += 1) + for (var l = 0, c = this.compareData.changed.categories[a].elements.length; c > l; l += 1) + t.push((r = this.compareData.changed.categories[a].elements[l]).oldComponentKey), + i.push(r.newComponentKey); + for (var h = 0, d = this.compareData.added.categories.length; d > h; h += 1) + for (var p = 0, g = this.compareData.added.categories[h].elements.length; g > p; p += 1) + o.push((r = this.compareData.added.categories[h].elements[p]).componentKey); + for (var u = 0, f = this.compareData.deleted.categories.length; f > u; u += 1) + for (var m = 0, C = this.compareData.deleted.categories[u].elements.length; C > m; m += 1) + n.push((r = this.compareData.deleted.categories[u].elements[m]).componentKey); + this.oldChangedList = t, + this.newChangedList = i, + this.deletedList = n, + this.addedList = o, + this._initCompareResultPlane(e.data), + this._applyCompareData() + } else + Bh.log(this.compareKey, "config load error! ", e.message), + this.dispatchEvent({ + type: _y.ON_LOAD_ERROR, + compareKey: this.compareKey, + code: e.code, + message: e.message + }) + }, + $y.prototype._loadSuccess = function (A) { + var e = {}; + if ("string" == typeof A) + try { + e = JSON.parse(A) + } catch (A) { + return void this.dispatchEvent({ + type: _y.ON_LOAD_INVALID_STATE, + compareKey: this.compareKey + }) + } + else + e = A; + if (e && "SUCCESS" === e.code) + if ("1" !== e.data.status) + ; + else + switch (this.oldModelKey = e.data.old, + this.newModelKey = e.data.new, + this.name = e.data.name, + this.displayModel) { + case zy.AGGREGATION: + case zy.SEPARATION: + this.firstViewer.addView(this.oldModelKey, this.projectKey, this.accessToken), + this.firstViewer.addView(this.newModelKey, this.projectKey, this.accessToken); + break; + case zy.MULTIWINDOW: + this.firstViewer.addView(this.oldModelKey, this.projectKey, this.accessToken), + this.secondViewer.addView(this.newModelKey, this.projectKey, this.accessToken); + break; + default: + this.firstViewer.addView(this.oldModelKey, this.projectKey, this.accessToken), + this.firstViewer.addView(this.newModelKey, this.projectKey, this.accessToken) + } + else + Bh.log(this.compareKey, "config load error! ", e.message), + this.dispatchEvent({ + type: _y.ON_LOAD_ERROR, + compareKey: this.compareKey, + code: e.code, + message: e.message + }) + }, + $y.prototype._applyCompareData = function () { + if (this.oldModelLoaded && this.newModelLoaded && this.compareDataLoaded) { + var A = this.firstViewer.getViewerImpl().getModel(this.oldModelKey), + e = null, + t = null; + if (A) { + var i = A.getComponentlist(); + e = this.firstViewer.getBoxByComponentsKey(i); + for (var o = 0, n = this.deletedList.length; n > o; o += 1) + i.remove(this.deletedList[o]); + for (var r = 0, a = this.oldChangedList.length; a > r; r += 1) + i.remove(this.oldChangedList[r]); + this.oldNoChangedList = i + } + var s = this.secondViewer.getViewerImpl().getModel(this.newModelKey); + if (s) { + var l = s.getComponentlist(); + t = this.firstViewer.getBoxByComponentsKey(l); + for (var c = 0, h = this.addedList.length; h > c; c += 1) + l.remove(this.addedList[c]); + for (var d = 0, p = this.newChangedList.length; p > d; d += 1) + l.remove(this.newChangedList[d]); + this.newNoChangedList = l + } + if (this.displayModel === zy.SEPARATION && !e.isEmpty() && !t.isEmpty()) { + var g = e.getSize(), + u = t.getSize(), + f = 1, + m = 1, + C = 0; + f = u.x > g.x ? g.x : u.x, + m = u.y > g.y ? g.y : u.y; + var y = s.getModelMatrix(), + v = this.firstViewer.viewerImpl.modelManager.scene.getBoundingBoxWorld(); + f > m ? (y.elements[14] += C = 1.5 * m, + v.min.y -= C / 2, + v.max.y += C / 2) : (y.elements[13] += C = 1.5 * f, + v.min.x -= C / 2, + v.max.x += C / 2), + s.setModelMatrix(y), + this.firstViewer.viewerImpl.modelManager.scene.setBoundingBoxWorld(v), + this.firstViewer.adaptiveSize() + } + this.coloringImmediately && (this.firstViewer.colorfulComponentsByKey(this.deletedList, Xy.deletedColor.color, Xy.deletedColor.opacity), + this.secondViewer.colorfulComponentsByKey(this.addedList, Xy.addedColor.color, Xy.addedColor.opacity), + this.firstViewer.colorfulComponentsByKey(this.oldChangedList, Xy.changedColor.color, Xy.changedColor.opacity), + this.secondViewer.colorfulComponentsByKey(this.newChangedList, Xy.changedColor.color, Xy.changedColor.opacity)) + } + }, + $y.prototype._getDataByType = function (A) { + var e = [], + t = []; + switch (A) { + case Zy.added: + t = this.addedList; + break; + case Zy.deleted: + e = this.deletedList; + break; + case Zy.changed: + e = this.oldChangedList, + t = this.newChangedList; + break; + case Zy.noChanged: + e = this.oldNoChangedList, + t = this.newNoChangedList; + break; + case Zy.oldChanged: + e = this.oldChangedList; + break; + case Zy.newChanged: + t = this.newChangedList; + break; + case Zy.oldNoChanged: + e = this.oldNoChangedList; + break; + case Zy.newNoChanged: + t = this.newNoChangedList + } + return { + oldList: e, + newList: t + } + }, + $y.prototype._addProperty = function (A, e, t) { + var i = this, + o = document.createElement("tr"); + o.classList.add("compares_list_tr"); + var n = document.createElement("td"); + n.innerText = A || "", + o.appendChild(n); + var r = document.createElement("td"); + if (r.innerText = e || "", + o.appendChild(r), + void 0 !== t) { + var a = document.createElement("td"), + s = document.createElement("a"); + s.classList.add("showDetails"), + t ? (s.innerHTML = "查看详情", + s.addEventListener("click", (function (A) { + A.stopPropagation(); + for (var e = A.target.parentNode.parentNode.oldKey, t = A.target.parentNode.parentNode.newKey, o = 0, n = A.path.length; n > o; o += 1) { + if ("tab-compare-old" === A.path[o].id) { + i.showOldContrastDetails(e); + break + } + if ("tab-compare-new" === A.path[o].id) { + i.showNewContrastDetails(t); + break + } + } + }))) : s.innerHTML = "无", + a.appendChild(s), + o.appendChild(a) + } + return o + }, + $y.prototype._initCompareResultPlane = function (A) { + if (this.oldModelLoaded && this.newModelLoaded && this.compareDataLoaded) + switch (this.displayModel) { + case zy.AGGREGATION: + case zy.SEPARATION: + var e = document.getElementById("tab-compare-old"); + if (!e) + return; + this._createPanel(e, A); + break; + case zy.MULTIWINDOW: + var t = document.getElementById("tab-compare-old"); + if (!t) + return; + this._createInversionPanel(t, A); + var i = document.getElementById("tab-compare-new"); + if (!i) + return; + this._createPanel(i, A) + } + }, + $y.prototype._createPanel = function (A, e) { + var t = this; + if (A) { + var i = document.createElement("div"); + i.classList.add("compares_list_body"), + A.appendChild(i); + var o = document.createElement("div"); + o.classList.add("compares_list_title"), + o.innerText = "新增构件列表(" + t.addedList.length + ")", + o.addEventListener("click", (function (A) { + for (var e = A.target.parentNode.querySelectorAll("tr"), i = [], o = 0, n = e.length; n > o; o += 1) + e[o].newKey && i.push(e[o].newKey); + t.secondViewer.adaptiveSizeByKey(i), + t.secondViewer.clearColorfulList(), + t.secondViewer.clearTransparentList(), + t.secondViewer.transparentOtherComponentsByKey(i), + t.secondViewer.colorfulComponentsByKey(i, Xy.addedColor.color, Xy.addedColor.opacity) + })), + i.appendChild(o); + var n = document.createElement("table"); + n.classList.add("sx-table"), + n.classList.add("compares_list_table"), + n.classList.add("table-no-top"), + i.appendChild(n); + var r = document.createElement("thead"); + n.appendChild(r); + var a = document.createElement("tbody"); + n.appendChild(a); + var s = document.createElement("tr"); + s.style.backgroundColor = "rgba(0, 128, 0, 0.8)", + s.className = "noprop"; + var l = document.createElement("th"); + s.appendChild(l); + var c = document.createElement("span"); + c.classList.add("value"), + c.classList.add("nonEditable"), + c.innerHTML = "名称", + l.appendChild(c); + var h = document.createElement("th"); + s.appendChild(h); + var d = document.createElement("span"); + d.classList.add("value"), + d.classList.add("nonEditable"), + d.innerHTML = "类型", + h.appendChild(d), + r.appendChild(s); + for (var p = 0, g = t.addedList.length; g > p; p += 1) { + var u = t.secondViewer.getComponentsByKey(t.addedList[p]); + if (u && u[0] && u[0][t.addedList[p]] && u[0][t.addedList[p]][0]) { + var f = t._addProperty(u[0][t.addedList[p]][0].name, u[0][t.addedList[p]][0].type); + f.oldKey = "", + f.newKey = t.addedList[p], + f.addEventListener("click", (function (A) { + var e = A.target.parentNode.newKey; + e && (t.secondViewer.adaptiveSizeByKey(e), + t.secondViewer.clearColorfulList(), + t.secondViewer.clearTransparentList(), + t.secondViewer.transparentOtherComponentsByKey(e), + t.secondViewer.colorfulComponentsByKey(e, Xy.addedColor.color, Xy.addedColor.opacity)) + })), + a.appendChild(f) + } + } + var m = t.oldChangedList, + C = t.newChangedList, + y = document.createElement("div"); + y.classList.add("compares_list_body"), + A.appendChild(y); + var v = document.createElement("div"); + v.classList.add("compares_list_title"), + v.innerText = "变更构件列表(" + m.length + ")", + v.addEventListener("click", (function (A) { + for (var e = A.target.parentNode.querySelectorAll("tr"), i = [], o = [], n = 0, r = e.length; r > n; n += 1) + e[n].oldKey && o.push(e[n].oldKey), + e[n].newKey && i.push(e[n].newKey); + switch (t.displayModel) { + case zy.AGGREGATION: + case zy.SEPARATION: + t.secondViewer.adaptiveSizeByKey(i.concat(o)), + t.secondViewer.clearColorfulList(), + t.secondViewer.clearTransparentList(), + t.secondViewer.transparentOtherComponentsByKey(i.concat(o)), + t.secondViewer.colorfulComponentsByKey(i.concat(o), Xy.changedColor.color, Xy.changedColor.opacity); + break; + case zy.MULTIWINDOW: + t.firstViewer.adaptiveSizeByKey(o), + t.firstViewer.clearColorfulList(), + t.firstViewer.clearTransparentList(), + t.firstViewer.transparentOtherComponentsByKey(o), + t.firstViewer.colorfulComponentsByKey(o, Xy.changedColor.color, Xy.changedColor.opacity), + t.secondViewer.adaptiveSizeByKey(i), + t.secondViewer.clearColorfulList(), + t.secondViewer.clearTransparentList(), + t.secondViewer.transparentOtherComponentsByKey(i), + t.secondViewer.colorfulComponentsByKey(i, Xy.changedColor.color, Xy.changedColor.opacity) + } + })), + y.appendChild(v); + var I = document.createElement("table"); + I.classList.add("sx-table"), + I.classList.add("compares_list_table"), + I.classList.add("table-no-top"), + y.appendChild(I); + var E = document.createElement("thead"); + I.appendChild(E); + var B = document.createElement("tbody"); + I.appendChild(B); + var x = document.createElement("tr"); + x.style.backgroundColor = "rgba(255, 165, 0, 0.8)", + x.className = "noprop"; + var S = document.createElement("th"); + x.appendChild(S); + var w = document.createElement("span"); + w.classList.add("value"), + w.classList.add("nonEditable"), + w.innerHTML = "名称", + S.appendChild(w); + var M = document.createElement("th"); + x.appendChild(M); + var b = document.createElement("span"); + b.classList.add("value"), + b.classList.add("nonEditable"), + b.innerHTML = "类型", + M.appendChild(b); + var U = document.createElement("th"); + x.appendChild(U); + var F = document.createElement("span"); + F.classList.add("value"), + F.classList.add("nonEditable"), + F.innerHTML = "操作", + U.appendChild(F), + E.appendChild(x); + for (var K = 0, Q = C.length; Q > K; K += 1) { + var R = t.secondViewer.getComponentsByKey(C[K]); + if (R && R[0] && R[0][C[K]] && R[0][C[K]][0]) { + var T = t._addProperty(R[0][C[K]][0].name, R[0][C[K]][0].type, "geometry" !== C[K].type); + T.oldKey = m[K], + T.newKey = C[K], + T.addEventListener("click", (function (A) { + var e = A.target.parentNode.oldKey, + i = A.target.parentNode.newKey; + if (e && i) + switch (t.displayModel) { + case zy.AGGREGATION: + case zy.SEPARATION: + t.secondViewer.adaptiveSizeByKey([e, i]), + t.secondViewer.clearColorfulList(), + t.secondViewer.clearTransparentList(), + t.secondViewer.transparentOtherComponentsByKey([e, i]), + t.secondViewer.colorfulComponentsByKey([e, i], Xy.changedColor.color, Xy.changedColor.opacity); + break; + case zy.MULTIWINDOW: + t.firstViewer.adaptiveSizeByKey(e), + t.firstViewer.clearColorfulList(), + t.firstViewer.clearTransparentList(), + t.firstViewer.transparentOtherComponentsByKey(e), + t.firstViewer.colorfulComponentsByKey(e, Xy.changedColor.color, Xy.changedColor.opacity), + t.secondViewer.adaptiveSizeByKey(i), + t.secondViewer.clearColorfulList(), + t.secondViewer.clearTransparentList(), + t.secondViewer.transparentOtherComponentsByKey(i), + t.secondViewer.colorfulComponentsByKey(i, Xy.changedColor.color, Xy.changedColor.opacity) + } + })), + B.appendChild(T) + } + } + var k = document.createElement("div"); + k.classList.add("compares_list_body"), + A.appendChild(k); + var D = document.createElement("div"); + D.classList.add("compares_list_title"), + D.innerText = "移除构件列表(" + t.deletedList.length + ")", + D.addEventListener("click", (function (A) { + for (var e = A.target.parentNode.querySelectorAll("tr"), i = [], o = 0, n = e.length; n > o; o += 1) + e[o].oldKey && i.push(e[o].oldKey); + t.secondViewer.adaptiveSizeByKey(i), + t.secondViewer.clearColorfulList(), + t.secondViewer.clearTransparentList(), + t.secondViewer.transparentOtherComponentsByKey(i), + t.secondViewer.colorfulComponentsByKey(i, Xy.deletedColor.color, Xy.deletedColor.opacity) + })), + k.appendChild(D); + var L = document.createElement("table"); + L.classList.add("sx-table"), + L.classList.add("compares_list_table"), + L.classList.add("table-no-top"), + k.appendChild(L); + var N = document.createElement("thead"); + L.appendChild(N); + var O = document.createElement("tbody"); + L.appendChild(O); + var V = document.createElement("tr"); + V.style.backgroundColor = "rgba(255, 0, 0, 0.8)", + V.className = "noprop"; + var G = document.createElement("th"); + V.appendChild(G); + var P = document.createElement("span"); + P.classList.add("value"), + P.classList.add("nonEditable"), + P.innerHTML = "名称", + G.appendChild(P); + var q = document.createElement("th"); + V.appendChild(q); + var j = document.createElement("span"); + j.classList.add("value"), + j.classList.add("nonEditable"), + j.innerHTML = "类型", + q.appendChild(j), + N.appendChild(V); + for (var H = 0, Y = t.deletedList.length; Y > H; H += 1) { + var W = t.firstViewer.getComponentsByKey(t.deletedList[H]); + if (W && W[0] && W[0][t.deletedList[H]] && W[0][t.deletedList[H]][0]) { + var J = t._addProperty(W[0][t.deletedList[H]][0].name, W[0][t.deletedList[H]][0].type); + J.oldKey = t.deletedList[H], + J.newKey = "", + J.addEventListener("click", (function (A) { + var e = A.target.parentNode.oldKey; + e && (t.firstViewer.adaptiveSizeByKey(e), + t.firstViewer.clearColorfulList(), + t.firstViewer.clearTransparentList(), + t.firstViewer.transparentOtherComponentsByKey(e), + t.firstViewer.colorfulComponentsByKey(e, Xy.deletedColor.color, Xy.deletedColor.opacity)) + })), + O.appendChild(J) + } + } + } + }, + $y.prototype._createInversionPanel = function (A, e) { + var t = this; + if (A) { + var i = t.deletedList, + o = t.addedList, + n = document.createElement("div"); + n.classList.add("compares_list_body"), + A.appendChild(n); + var r = document.createElement("div"); + r.classList.add("compares_list_title"), + r.innerText = "新增构件列表(" + i.length + ")", + r.addEventListener("click", (function (A) { + for (var e = A.target.parentNode.querySelectorAll("tr"), i = [], o = 0, n = e.length; n > o; o += 1) + e[o].newKey && i.push(e[o].newKey); + t.firstViewer.adaptiveSizeByKey(i), + t.firstViewer.clearColorfulList(), + t.firstViewer.clearTransparentList(), + t.firstViewer.transparentOtherComponentsByKey(i), + t.firstViewer.colorfulComponentsByKey(i, Xy.addedColor.color, Xy.addedColor.opacity) + })), + n.appendChild(r); + var a = document.createElement("table"); + a.classList.add("sx-table"), + a.classList.add("compares_list_table"), + a.classList.add("table-no-top"), + n.appendChild(a); + var s = document.createElement("thead"); + a.appendChild(s); + var l = document.createElement("tbody"); + a.appendChild(l); + var c = document.createElement("tr"); + c.style.backgroundColor = "rgba(0, 128, 0, 0.8)", + c.className = "noprop"; + var h = document.createElement("th"); + c.appendChild(h); + var d = document.createElement("span"); + d.classList.add("value"), + d.classList.add("nonEditable"), + d.innerHTML = "名称", + h.appendChild(d); + var p = document.createElement("th"); + c.appendChild(p); + var g = document.createElement("span"); + g.classList.add("value"), + g.classList.add("nonEditable"), + g.innerHTML = "类型", + p.appendChild(g), + s.appendChild(c); + for (var u = 0, f = i.length; f > u; u += 1) { + var m = t.firstViewer.getComponentsByKey(i[u]); + if (m && m[0] && m[0][i[u]] && m[0][i[u]][0]) { + var C = t._addProperty(m[0][i[u]][0].name, m[0][i[u]][0].type); + C.oldKey = "", + C.newKey = i[u], + C.addEventListener("click", (function (A) { + var e = A.target.parentNode.newKey; + e && (t.firstViewer.adaptiveSizeByKey(e), + t.firstViewer.clearColorfulList(), + t.firstViewer.clearTransparentList(), + t.firstViewer.transparentOtherComponentsByKey(e), + t.firstViewer.colorfulComponentsByKey(e, Xy.addedColor.color, Xy.addedColor.opacity)) + })), + l.appendChild(C) + } + } + var y = t.oldChangedList, + v = t.newChangedList, + I = document.createElement("div"); + I.classList.add("compares_list_body"), + A.appendChild(I); + var E = document.createElement("div"); + E.classList.add("compares_list_title"), + E.innerText = "变更构件列表(" + y.length + ")", + E.addEventListener("click", (function (A) { + for (var e = A.target.parentNode.querySelectorAll("tr"), i = [], o = [], n = 0, r = e.length; r > n; n += 1) + e[n].oldKey && o.push(e[n].oldKey), + e[n].newKey && i.push(e[n].newKey); + switch (t.displayModel) { + case zy.AGGREGATION: + case zy.SEPARATION: + t.secondViewer.adaptiveSizeByKey(i.concat(o)), + t.secondViewer.clearColorfulList(), + t.secondViewer.clearTransparentList(), + t.secondViewer.transparentOtherComponentsByKey(i.concat(o)), + t.secondViewer.colorfulComponentsByKey(i.concat(o), Xy.changedColor.color, Xy.changedColor.opacity); + break; + case zy.MULTIWINDOW: + t.firstViewer.adaptiveSizeByKey(o), + t.firstViewer.clearColorfulList(), + t.firstViewer.clearTransparentList(), + t.firstViewer.transparentOtherComponentsByKey(o), + t.firstViewer.colorfulComponentsByKey(o, Xy.changedColor.color, Xy.changedColor.opacity), + t.secondViewer.adaptiveSizeByKey(i), + t.secondViewer.clearColorfulList(), + t.secondViewer.clearTransparentList(), + t.secondViewer.transparentOtherComponentsByKey(i), + t.secondViewer.colorfulComponentsByKey(i, Xy.changedColor.color, Xy.changedColor.opacity) + } + })), + I.appendChild(E); + var B = document.createElement("table"); + B.classList.add("sx-table"), + B.classList.add("compares_list_table"), + B.classList.add("table-no-top"), + I.appendChild(B); + var x = document.createElement("thead"); + B.appendChild(x); + var S = document.createElement("tbody"); + B.appendChild(S); + var w = document.createElement("tr"); + w.style.backgroundColor = "rgba(255, 165, 0, 0.8)", + w.className = "noprop"; + var M = document.createElement("th"); + w.appendChild(M); + var b = document.createElement("span"); + b.classList.add("value"), + b.classList.add("nonEditable"), + b.innerHTML = "名称", + M.appendChild(b); + var U = document.createElement("th"); + w.appendChild(U); + var F = document.createElement("span"); + F.classList.add("value"), + F.classList.add("nonEditable"), + F.innerHTML = "类型", + U.appendChild(F); + var K = document.createElement("th"); + w.appendChild(K); + var Q = document.createElement("span"); + Q.classList.add("value"), + Q.classList.add("nonEditable"), + Q.innerHTML = "操作", + K.appendChild(Q), + x.appendChild(w); + for (var R = 0, T = v.length; T > R; R += 1) { + var k = t.secondViewer.getComponentsByKey(v[R]); + if (k && k[0] && k[0][v[R]] && k[0][v[R]][0]) { + var D = t._addProperty(k[0][v[R]][0].name, k[0][v[R]][0].type, "geometry" !== v[R].type); + D.oldKey = y[R], + D.newKey = v[R], + D.addEventListener("click", (function (A) { + var e = A.target.parentNode.oldKey, + i = A.target.parentNode.newKey; + if (e && i) + switch (t.displayModel) { + case zy.AGGREGATION: + case zy.SEPARATION: + t.secondViewer.adaptiveSizeByKey([e, i]), + t.secondViewer.clearColorfulList(), + t.secondViewer.clearTransparentList(), + t.secondViewer.transparentOtherComponentsByKey([e, i]), + t.secondViewer.colorfulComponentsByKey([e, i], Xy.changedColor.color, Xy.changedColor.opacity); + break; + case zy.MULTIWINDOW: + t.firstViewer.adaptiveSizeByKey(e), + t.firstViewer.clearColorfulList(), + t.firstViewer.clearTransparentList(), + t.firstViewer.transparentOtherComponentsByKey(e), + t.firstViewer.colorfulComponentsByKey(e, Xy.changedColor.color, Xy.changedColor.opacity), + t.secondViewer.adaptiveSizeByKey(i), + t.secondViewer.clearColorfulList(), + t.secondViewer.clearTransparentList(), + t.secondViewer.transparentOtherComponentsByKey(i), + t.secondViewer.colorfulComponentsByKey(i, Xy.changedColor.color, Xy.changedColor.opacity) + } + })), + S.appendChild(D) + } + } + var L = document.createElement("div"); + L.classList.add("compares_list_body"), + A.appendChild(L); + var N = document.createElement("div"); + N.classList.add("compares_list_title"), + N.innerText = "移除构件列表(" + o.length + ")", + N.addEventListener("click", (function (A) { + for (var e = A.target.parentNode.querySelectorAll("tr"), i = [], o = 0, n = e.length; n > o; o += 1) + e[o].oldKey && i.push(e[o].oldKey); + t.secondViewer.adaptiveSizeByKey(i), + t.secondViewer.clearColorfulList(), + t.secondViewer.clearTransparentList(), + t.secondViewer.transparentOtherComponentsByKey(i), + t.secondViewer.colorfulComponentsByKey(i, Xy.deletedColor.color, Xy.deletedColor.opacity) + })), + L.appendChild(N); + var O = document.createElement("table"); + O.classList.add("sx-table"), + O.classList.add("compares_list_table"), + O.classList.add("table-no-top"), + L.appendChild(O); + var V = document.createElement("thead"); + O.appendChild(V); + var G = document.createElement("tbody"); + O.appendChild(G); + var P = document.createElement("tr"); + P.style.backgroundColor = "rgba(255, 0, 0, 0.8)", + P.className = "noprop"; + var q = document.createElement("th"); + P.appendChild(q); + var j = document.createElement("span"); + j.classList.add("value"), + j.classList.add("nonEditable"), + j.innerHTML = "名称", + q.appendChild(j); + var H = document.createElement("th"); + P.appendChild(H); + var Y = document.createElement("span"); + Y.classList.add("value"), + Y.classList.add("nonEditable"), + Y.innerHTML = "类型", + H.appendChild(Y), + V.appendChild(P); + for (var W = 0, J = o.length; J > W; W += 1) { + var z = t.secondViewer.getComponentsByKey(o[W]); + if (z && z[0] && z[0][o[W]] && z[0][o[W]][0]) { + var Z = t._addProperty(z[0][o[W]][0].name, z[0][o[W]][0].type); + Z.oldKey = o[W], + Z.newKey = "", + Z.addEventListener("click", (function (A) { + var e = A.target.parentNode.oldKey; + e && (t.secondViewer.adaptiveSizeByKey(e), + t.secondViewer.clearColorfulList(), + t.secondViewer.clearTransparentList(), + t.secondViewer.transparentOtherComponentsByKey(e), + t.secondViewer.colorfulComponentsByKey(e, Xy.deletedColor.color, Xy.deletedColor.opacity)) + })), + G.appendChild(Z) + } + } + } + }; + var Av = "ON_VIEWER3D_CAMERA_CHANGE", + ev = function (A, e) { + this.viewer2D = e, + this.viewer3D = A, + this.enableFocus(), + this.show3DCameraOn2DViewer() + }; + ev.prototype.enableFocus = function () { + var A = this.viewer2D, + e = this.viewer3D; + e && A && (A.setOnSelectComponentCallback((function (A) { + A && A.length > 0 ? (e.highlightComponentsByKey(A), + e.adaptiveSizeByKey(A)) : e.clearHighlightList() + })), + e.registerModelEventListener(Rc.ON_CLICK_PICK, (function (e) { + e.intersectInfo && e.intersectInfo.selectedObjectId && A.focusOnComponentByKey(e.intersectInfo.selectedObjectId, !0) + }))) + }, + ev.prototype.enableMove2DCamera = function () { + this.viewer2D.getViewerImpl().controlManager.enableTool(this.viewer2D.getViewerImpl(), "viewer3DCameraControl") + }, + ev.prototype.disableMove2DCamera = function () { + this.viewer2D.getViewerImpl().controlManager.disableTool("viewer3DCameraControl") + }, + ev.prototype.show3DCameraOn2DViewer = function () { + var A = this.viewer2D, + e = this.viewer3D; + if (e && A) { + var t = e.getViewerImpl(); + e.registerCameraEventListener(Rc.ON_CAMERA_CHANGE, (function (e) { + var t = e.camera, + i = t.getWorldPosition(new y), + o = t.getWorldDirection(new y); + A.show3DCamera([i.x, i.y], [o.x, o.y]) + })), + A.getViewerImpl().cameraControl.addEventListener(Av, (function (A) { + var e = A.position; + t.locateToPoint({ + x: e[0], + y: e[1], + z: t.camera.position.z + }) + })) + } + }; + var tv = function A(e, t) { + Ue.call(this, e), + this.type = "Reflector"; + var i = this, + o = new LA(void 0 !== (t = t || {}).color ? t.color : 16777215), + n = t.textureWidth || 512, + r = t.textureHeight || 512, + s = t.clipBias || 0, + l = t.shader || A.ReflectorShader, + c = void 0 !== t.recursion ? t.recursion : 0, + h = new EA, + d = new y, + u = new y, + f = new y, + m = new M, + C = new y(0, 0, -1), + v = new p, + I = new y, + E = new y, + B = new p, + x = new M, + S = new je, + w = new g(n, r, { + minFilter: 1006, + magFilter: 1006, + format: 1022, + stencilBuffer: !1 + }); + a.isPowerOfTwo(n) && a.isPowerOfTwo(r) || (w.texture.generateMipmaps = !1); + var b = new Pe({ + uniforms: Ge.clone(l.uniforms), + fragmentShader: l.fragmentShader, + vertexShader: l.vertexShader + }); + b.uniforms.tDiffuse.value = w.texture, + b.uniforms.color.value = o, + b.uniforms.textureMatrix.value = x, + this.material = b, + this.onBeforeRender = function (A, e, t) { + if ("recursion" in t.userData) { + if (t.userData.recursion === c) + return; + t.userData.recursion += 1 + } + if (u.setFromMatrixPosition(i.matrixWorld), + f.setFromMatrixPosition(t.matrixWorld), + m.extractRotation(i.matrixWorld), + d.set(0, 0, 1), + d.applyMatrix4(m), + I.subVectors(u, f), + 0 >= I.dot(d)) { + I.reflect(d).negate(), + I.add(u), + m.extractRotation(t.matrixWorld), + C.set(0, 0, -1), + C.applyMatrix4(m), + C.add(f), + E.subVectors(u, C), + E.reflect(d).negate(), + E.add(u), + S.position.copy(I), + S.up.set(0, 1, 0), + S.up.applyMatrix4(m), + S.up.reflect(d), + S.lookAt(E), + S.far = t.far, + S.updateMatrixWorld(), + S.matrixWorldInverse.getInverse(S.matrixWorld), + S.projectionMatrix.copy(t.projectionMatrix), + S.userData.recursion = 0, + x.set(.5, 0, 0, .5, 0, .5, 0, .5, 0, 0, .5, .5, 0, 0, 0, 1), + x.multiply(S.projectionMatrix), + x.multiply(S.matrixWorldInverse), + x.multiply(i.matrixWorld), + h.setFromNormalAndCoplanarPoint(d, u), + h.applyMatrix4(S.matrixWorldInverse), + v.set(h.normal.x, h.normal.y, h.normal.z, h.constant); + var o = S.projectionMatrix; + B.x = (Math.sign(v.x) + o.elements[8]) / o.elements[0], + B.y = (Math.sign(v.y) + o.elements[9]) / o.elements[5], + B.z = -1, + B.w = (1 + o.elements[10]) / o.elements[14], + v.multiplyScalar(2 / v.dot(B)), + o.elements[2] = v.x, + o.elements[6] = v.y, + o.elements[10] = v.z + 1 - s, + o.elements[14] = v.w, + w.texture.encoding = A.outputEncoding, + i.visible = !1; + var n = A.getRenderTarget(), + r = A.xr.enabled, + a = A.shadowMap.autoUpdate; + A.xr.enabled = !1, + A.shadowMap.autoUpdate = !1, + A.setRenderTarget(w), + A.state.buffers.depth.setMask(!0), + !1 === A.autoClear && A.clear(), + A.render(e, S), + A.xr.enabled = r, + A.shadowMap.autoUpdate = a, + A.setRenderTarget(n); + var l = t.viewport; + void 0 !== l && A.state.viewport(l), + i.visible = !0 + } + }, + this.getRenderTarget = function () { + return w + } + }; + (tv.prototype = Object.create(Ue.prototype)).constructor = tv, + tv.ReflectorShader = { + uniforms: { + color: { + value: null + }, + tDiffuse: { + value: null + }, + textureMatrix: { + value: null + } + }, + vertexShader: ["uniform mat4 textureMatrix;", "varying vec4 vUv;", "void main() {", " vUv = textureMatrix * vec4( position, 1.0 );", " gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );", "}"].join("\n"), + fragmentShader: ["uniform vec3 color;", "uniform sampler2D tDiffuse;", "varying vec4 vUv;", "float blendOverlay( float base, float blend ) {", " return( base < 0.5 ? ( 2.0 * base * blend ) : ( 1.0 - 2.0 * ( 1.0 - base ) * ( 1.0 - blend ) ) );", "}", "vec3 blendOverlay( vec3 base, vec3 blend ) {", " return vec3( blendOverlay( base.r, blend.r ), blendOverlay( base.g, blend.g ), blendOverlay( base.b, blend.b ) );", "}", "void main() {", " vec4 base = texture2DProj( tDiffuse, vUv );", " gl_FragColor = vec4( blendOverlay( base.rgb, color ), 1.0 );", "}"].join("\n") + }; + var iv = function A(e, t) { + Ue.call(this, e), + this.type = "Refractor"; + var i = this, + o = new LA(void 0 !== (t = t || {}).color ? t.color : 8355711), + n = t.textureWidth || 512, + r = t.textureHeight || 512, + s = t.clipBias || 0, + l = t.shader || A.RefractorShader, + c = new je; + c.matrixAutoUpdate = !1, + c.userData.refractor = !0; + var h = new EA, + d = new M, + u = new g(n, r, { + minFilter: 1006, + magFilter: 1006, + format: 1022, + stencilBuffer: !1 + }); + a.isPowerOfTwo(n) && a.isPowerOfTwo(r) || (u.texture.generateMipmaps = !1), + this.material = new Pe({ + uniforms: Ge.clone(l.uniforms), + vertexShader: l.vertexShader, + fragmentShader: l.fragmentShader, + transparent: !0 + }), + this.material.uniforms.color.value = o, + this.material.uniforms.tDiffuse.value = u.texture, + this.material.uniforms.textureMatrix.value = d; + var m, C, v, I = function () { + var A = new y, + e = new y, + t = new M, + o = new y, + n = new y; + return function (r) { + return A.setFromMatrixPosition(i.matrixWorld), + e.setFromMatrixPosition(r.matrixWorld), + o.subVectors(A, e), + t.extractRotation(i.matrixWorld), + n.set(0, 0, 1), + n.applyMatrix4(t), + 0 > o.dot(n) + } + }(), + E = function () { + var A = new y, + e = new y, + t = new f, + o = new y; + return function () { + i.matrixWorld.decompose(e, t, o), + A.set(0, 0, 1).applyQuaternion(t).normalize(), + A.negate(), + h.setFromNormalAndCoplanarPoint(A, e) + } + }(), + B = (m = new EA, + C = new p, + v = new p, + function (A) { + c.matrixWorld.copy(A.matrixWorld), + c.matrixWorldInverse.getInverse(c.matrixWorld), + c.projectionMatrix.copy(A.projectionMatrix), + c.far = A.far, + m.copy(h), + m.applyMatrix4(c.matrixWorldInverse), + C.set(m.normal.x, m.normal.y, m.normal.z, m.constant); + var e = c.projectionMatrix; + v.x = (Math.sign(C.x) + e.elements[8]) / e.elements[0], + v.y = (Math.sign(C.y) + e.elements[9]) / e.elements[5], + v.z = -1, + v.w = (1 + e.elements[10]) / e.elements[14], + C.multiplyScalar(2 / C.dot(v)), + e.elements[2] = C.x, + e.elements[6] = C.y, + e.elements[10] = C.z + 1 - s, + e.elements[14] = C.w + } + ); + this.onBeforeRender = function (A, e, t) { + u.texture.encoding = A.outputEncoding, + !0 !== t.userData.refractor && !0 != !I(t) && (E(), + function (A) { + d.set(.5, 0, 0, .5, 0, .5, 0, .5, 0, 0, .5, .5, 0, 0, 0, 1), + d.multiply(A.projectionMatrix), + d.multiply(A.matrixWorldInverse), + d.multiply(i.matrixWorld) + }(t), + B(t), + function (A, e, t) { + i.visible = !1; + var o = A.getRenderTarget(), + n = A.xr.enabled, + r = A.shadowMap.autoUpdate; + A.xr.enabled = !1, + A.shadowMap.autoUpdate = !1, + A.setRenderTarget(u), + !1 === A.autoClear && A.clear(), + A.render(e, c), + A.xr.enabled = n, + A.shadowMap.autoUpdate = r, + A.setRenderTarget(o); + var a = t.viewport; + void 0 !== a && A.state.viewport(a), + i.visible = !0 + }(A, e, t)) + }, + this.getRenderTarget = function () { + return u + } + }; + (iv.prototype = Object.create(Ue.prototype)).constructor = iv, + iv.RefractorShader = { + uniforms: { + color: { + value: null + }, + tDiffuse: { + value: null + }, + textureMatrix: { + value: null + } + }, + vertexShader: ["uniform mat4 textureMatrix;", "varying vec4 vUv;", "void main() {", " vUv = textureMatrix * vec4( position, 1.0 );", " gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );", "}"].join("\n"), + fragmentShader: ["uniform vec3 color;", "uniform sampler2D tDiffuse;", "varying vec4 vUv;", "float blendOverlay( float base, float blend ) {", " return( base < 0.5 ? ( 2.0 * base * blend ) : ( 1.0 - 2.0 * ( 1.0 - base ) * ( 1.0 - blend ) ) );", "}", "vec3 blendOverlay( vec3 base, vec3 blend ) {", " return vec3( blendOverlay( base.r, blend.r ), blendOverlay( base.g, blend.g ), blendOverlay( base.b, blend.b ) );", "}", "void main() {", " vec4 base = texture2DProj( tDiffuse, vUv );", " gl_FragColor = vec4( blendOverlay( base.rgb, color ), 1.0 );", "}"].join("\n") + }; + var ov = function (A) { + return he.call(this), + this.points = A, + this.handlePoints = [], + this.minX = 0, + this.minY = 0, + this.maxX = 0, + this.maxY = 0, + this.invalid = !1, + this._createPlaneGeometry(), + this + }; + (ov.prototype = Object.create(he.prototype)).constructor = he, + ov.prototype._createPlaneGeometry = function () { + if (this._RemoveDuplicatePoints(this.points)) + this.invalid = !0; + else { + if (3 > this.handlePoints.length) + return Bh.warn("Failed to create plane, the number of the points must be more than three."), + void(this.invalid = !0); + if (3 === this.handlePoints.length && 0 === this._area(this.handlePoints[0], this.handlePoints[1], this.handlePoints[2])) + return Bh.warn("Failed to create plane, points are collinear."), + void(this.invalid = !0); + if (this._checkIntersect()) + return Bh.warn("Failed to create plane, the plane border is self-intersecting."), + void(this.invalid = !0); + this.handlePoints.push(new s(this.points[0].x, this.points[0].y)); + var A = new ar(new Ba(this.handlePoints)), + e = new Float32Array(this._updateUv(A)); + A.setAttribute("uv", new YA(e, 2)), + this.attributes = A.attributes, + this.groups = A.groups, + this.index = A.index + } + }, + ov.prototype._updateUv = function (A) { + for (var e = [], t = A.attributes.position.array, i = 0; t.length > i; i += 3) { + var o = (t[i + 1] - this.minY) / (this.maxY - this.minY); + e.push((t[i] - this.minX) / (this.maxX - this.minX)), + e.push(o) + } + return e + }, + ov.prototype._RemoveDuplicatePoints = function (A) { + var e = new s(A[0].x, A[0].y); + this.handlePoints.push(e), + this.minX = e.x, + this.maxX = e.x, + this.minY = e.y, + this.maxY = e.y; + for (var t = 1; A.length > t; t += 1) { + var i = !1; + if (void 0 === A[t].x || void 0 === A[t].y) + return Bh.log("Failed to create plane, the format of plane is not right, please follow [{x:,y:},...]"), + !0; + for (var o = 0; this.handlePoints.length > o; o += 1) + if (A[t].x === this.handlePoints[o].x && A[t].y === this.handlePoints[o].y) { + i = !0; + break + } + if (!1 === i) { + e = new s(A[t].x, A[t].y); + this.handlePoints.push(e), + this.minX > e.x && (this.minX = e.x), + this.minY > e.y && (this.minY = e.y), + e.x > this.maxX && (this.maxX = e.x), + e.y > this.maxY && (this.maxY = e.y) + } + } + return !1 + }, + ov.prototype._checkIntersect = function () { + for (var A = null, e = null, t = this.handlePoints.length, i = 0; t > i; i += 1) { + A = this.handlePoints[i], + e = this.handlePoints[i === t - 1 ? 0 : i + 1]; + for (var o = i + 2; t > o; o += 1) + if ((0 !== i || o !== t - 1) && this._intersectSegments(A, e, this.handlePoints[o], this.handlePoints[o === t - 1 ? 0 : o + 1])) + return !0 + } + return !1 + }, + ov.prototype._area = function (A, e, t) { + return (e.x - A.x) * (t.y - A.y) - (t.x - A.x) * (e.y - A.y) + }, + ov.prototype._collinearIntersectCheck = function (A, e, t, i) { + return (Math.min(A.x, e.x) > t.x || t.x > Math.max(A.x, e.x) || Math.min(A.y, e.y) > t.y || t.y > Math.max(A.y, e.y)) && (Math.min(A.x, e.x) > i.x || i.x > Math.max(A.x, e.x) || Math.min(A.y, e.y) > i.y || i.y > Math.max(A.y, e.y)) + }, + ov.prototype._intersectSegments = function (A, e, t, i) { + var o = this._area(A, e, t) * this._area(A, e, i), + n = this._area(t, i, A) * this._area(t, i, e); + return 0 >= o && (0 >= n && (0 !== o || 0 !== n || !this._collinearIntersectCheck(A, e, t, i))) + }; + var nv = "data:image/jpeg;base64,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", + rv = "data:image/jpeg;base64,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", + av = function A(e, t) { + Ue.call(this, e), + this.type = "Water"; + var i = this, + o = t || {}, + n = void 0 !== o.color ? o.color : new p(1, 1, 1, 1), + r = o.textureWidth || 512, + a = o.textureHeight || 512, + l = o.clipBias || 0, + c = o.flowDirection || new s(1, 0), + h = o.flowSpeed || .03, + d = o.reflectivity || 1, + g = o.scale || 1, + u = o.shader || A.WaterShader; + this.reflectorTexturePosition = o.reflectorTexturePosition, + this.refractorTexturePosition = o.refractorTexturePosition; + var f = new Aa, + m = o.flowMap || void 0, + C = o.normalMap0 || f.load(nv), + y = o.normalMap1 || f.load(rv), + v = new M, + I = new as; + if (void 0 !== tv) + if (void 0 !== iv) { + var E = new tv(e, { + textureWidth: r, + textureHeight: a, + clipBias: l + }); + E.position.copy(this.reflectorTexturePosition), + E.updateMatrixWorld(!0); + var B = new iv(e, { + textureWidth: r, + textureHeight: a, + clipBias: l + }); + B.position.copy(this.refractorTexturePosition), + B.updateMatrixWorld(!0), + this.material = new Pe({ + uniforms: Ge.merge([u.uniforms]), + vertexShader: u.vertexShader, + fragmentShader: u.fragmentShader, + transparent: !0 + }), + this.material.clipping = !0, + this.material.side = 2, + void 0 !== m ? (this.material.defines.USE_FLOWMAP = "", + this.material.uniforms.tFlowMap = { + type: "t", + value: m + }) : this.material.uniforms.flowDirection = { + type: "v2", + value: c + }, + C.wrapS = 1e3, + C.wrapT = 1e3, + y.wrapS = 1e3, + y.wrapT = 1e3, + this.material.uniforms.tReflectionMap.value = E.getRenderTarget().texture, + this.material.uniforms.tRefractionMap.value = B.getRenderTarget().texture, + this.material.uniforms.tNormalMap0.value = C, + this.material.uniforms.tNormalMap1.value = y, + this.material.uniforms.color.value = n, + this.material.uniforms.reflectivity.value = d, + this.material.uniforms.textureMatrix.value = v, + this.material.uniforms.config.value.x = 0, + this.material.uniforms.config.value.y = .075, + this.material.uniforms.config.value.z = .075, + this.material.uniforms.config.value.w = g, + this.onBeforeRender = function (A, e, t) { + var o, n; + ! function (A) { + v.set(.5, 0, 0, .5, 0, .5, 0, .5, 0, 0, .5, .5, 0, 0, 0, 1), + v.multiply(A.projectionMatrix), + v.multiply(A.matrixWorldInverse), + v.multiply(i.matrixWorld) + }(t), + o = I.getDelta(), + (n = i.material.uniforms.config).value.x += h * o, + n.value.y = n.value.x + .075, + .15 > n.value.x ? .15 > n.value.y || (n.value.y = n.value.y - .15) : (n.value.x = 0, + n.value.y = .075), + i.visible = !1, + E.position.equals(this.reflectorTexturePosition) || (E.position.copy(this.reflectorTexturePosition), + E.updateMatrixWorld(!0)), + B.position.equals(this.refractorTexturePosition) || (B.position.copy(this.refractorTexturePosition), + B.updateMatrixWorld(!0)), + i.cameraProjectionMatrix || (i.cameraProjectionMatrix = t.projectionMatrix.clone()), + t.projectionMatrix.equals(i.cameraProjectionMatrix) || (i.needUpdate = !0), + i.waterMatrixWorld || (i.waterMatrixWorld = i.matrixWorld.clone()), + i.matrixWorld.equals(i.waterMatrixWorld) || (i.needUpdate = !0), + i.needUpdate && (E.onBeforeRender(A, e, t), + B.onBeforeRender(A, e, t), + i.needUpdate = !1), + i.material.uniforms.tReflectionMap.value = E.getRenderTarget().texture, + i.material.uniforms.tRefractionMap.value = B.getRenderTarget().texture, + i.visible = !0 + } + } else + Bh.error("THREE.Water: Required component THREE.Refractor not found."); + else + Bh.error("THREE.Water: Required component THREE.Reflector not found.") + }; + (av.prototype = Object.create(Ue.prototype)).constructor = av, + av.WaterShader = { + uniforms: { + color: { + type: "v4", + value: null + }, + reflectivity: { + type: "f", + value: 0 + }, + tReflectionMap: { + type: "t", + value: null + }, + tRefractionMap: { + type: "t", + value: null + }, + tNormalMap0: { + type: "t", + value: null + }, + tNormalMap1: { + type: "t", + value: null + }, + textureMatrix: { + type: "m4", + value: null + }, + config: { + type: "v4", + value: new p + } + }, + vertexShader: ["#include ", "uniform mat4 textureMatrix;", "varying vec4 vCoord;", "varying vec2 vUv;", "varying vec3 vToEye;", "#include ", "void main() {", " vUv = uv;", " vCoord = textureMatrix * vec4( position, 1.0 );", " vec4 worldPosition = modelMatrix * vec4( position, 1.0 );", " vToEye = cameraPosition - worldPosition.xyz;", " vec4 mvPosition = viewMatrix * worldPosition;", " gl_Position = projectionMatrix * mvPosition;", " #include ", " #include ", "}"].join("\n"), + fragmentShader: ["#include ", "#include ", "uniform sampler2D tReflectionMap;", "uniform sampler2D tRefractionMap;", "uniform sampler2D tNormalMap0;", "uniform sampler2D tNormalMap1;", "#ifdef USE_FLOWMAP", " uniform sampler2D tFlowMap;", "#else", " uniform vec2 flowDirection;", "#endif", "uniform vec4 color;", "uniform float reflectivity;", "uniform vec4 config;", "#include ", "varying vec4 vCoord;", "varying vec2 vUv;", "varying vec3 vToEye;", "void main() {", " #include ", " float flowMapOffset0 = config.x;", " float flowMapOffset1 = config.y;", " float halfCycle = config.z;", " float scale = config.w;", " vec3 toEye = normalize( vToEye );", " vec2 flow;", " #ifdef USE_FLOWMAP", " flow = texture2D( tFlowMap, vUv ).rg * 2.0 - 1.0;", " #else", " flow = flowDirection;", " #endif", " flow.x *= - 1.0;", " vec4 normalColor0 = texture2D( tNormalMap0, ( vUv * scale ) + flow * flowMapOffset0 );", " vec4 normalColor1 = texture2D( tNormalMap1, ( vUv * scale ) + flow * flowMapOffset1 );", " float flowLerp = abs( halfCycle - flowMapOffset0 ) / halfCycle;", " vec4 normalColor = mix( normalColor0, normalColor1, flowLerp );", " vec3 normal = normalize( vec3( normalColor.r * 2.0 - 1.0, normalColor.b, normalColor.g * 2.0 - 1.0 ) );", " float theta = max( dot( toEye, normal ), 0.0 );", " float reflectance = reflectivity + ( 1.0 - reflectivity ) * pow( ( 1.0 - theta ), 5.0 );", " vec3 coord = vCoord.xyz / vCoord.w;", " vec2 uv = coord.xy + coord.z * normal.xz * 0.05;", " vec4 reflectColor = texture2D( tReflectionMap, vec2( 1.0 - uv.x, uv.y ) );", " vec4 refractColor = texture2D( tRefractionMap, uv );", " gl_FragColor = color * mix( refractColor, reflectColor, reflectance );", " #include ", " #include ", " #include ", "}"].join("\n") + }; + var sv = function (A) { + A ? (this.boundary = A.boundary, + this.color = A.color, + this.viewer = A.viewer, + this.scale = A.scale, + this.xDirection = A.xDirection, + this.yDirection = A.yDirection, + this.reflectivity = A.reflectivity, + A.reflectorTexturePosition ? "number" == typeof A.reflectorTexturePosition.x ? "number" == typeof A.reflectorTexturePosition.y ? "number" == typeof A.reflectorTexturePosition.z ? (this.reflectorTexturePosition = (new y).copy(A.reflectorTexturePosition), + A.refractorTexturePosition ? "number" == typeof A.refractorTexturePosition.x ? "number" == typeof A.refractorTexturePosition.y ? "number" == typeof A.refractorTexturePosition.z ? (this.refractorTexturePosition = (new y).copy(A.refractorTexturePosition), + this.viewer && this.viewer instanceof Gy ? (A.geometry || 0 !== this.boundary.length) && (this.geometry = A.geometry || new ov(this.boundary), + this.water = new av(this.geometry, { + color: new p(this.color.r, this.color.g, this.color.b, this.color.a), + scale: this.scale, + reflectivity: this.reflectivity, + flowDirection: new s(this.xDirection, this.yDirection), + textureWidth: 1024, + textureHeight: 1024, + reflectorTexturePosition: this.reflectorTexturePosition, + refractorTexturePosition: this.refractorTexturePosition + }), + this.height = A.height, + this.water.translateZ(this.height), + this.water.renderOrder = -1, + this.water.disPickable = !0, + this.id = uh.createUUID(), + this.water.name = this.id, + this.water.autoAnimation = !0, + this.viewer.addExternalObject(this.id, this.water)) : Bh.log("ERROR::viewer must not support.")) : Bh.error("缺少参数 reflectorTexturePosition.z") : Bh.error("缺少参数 reflectorTexturePosition.y") : Bh.error("缺少参数 reflectorTexturePosition.x") : Bh.error("缺少参数 reflectorTexturePosition")) : Bh.error("缺少参数 reflectorTexturePosition.z") : Bh.error("缺少参数 reflectorTexturePosition.y") : Bh.error("缺少参数 reflectorTexturePosition.x") : Bh.error("缺少参数 reflectorTexturePosition")) : Bh.error("ERROR::waterEffectConfig 不能为空.") + }; + sv.prototype.getBoundary = function () { + return this.boundary + }, + sv.prototype.getColor = function () { + return this.color + }, + sv.prototype.getScale = function () { + return this.scale + }, + sv.prototype.getXDirection = function () { + return this.xDirection + }, + sv.prototype.getYDirection = function () { + return this.yDirection + }, + sv.prototype.setColor = function (A) { + A instanceof Xh ? (this.color = A, + this.water.material.uniforms.color.value.set(this.color.r, this.color.g, this.color.b, this.color.a)) : Bh.log("ERROR::color should be instance of EIMMODEL.Color") + }, + sv.prototype.setScale = function (A) { + this.scale = A, + this.water.material.uniforms.config.value.w = A + }, + sv.prototype.setReflectivity = function (A) { + this.reflectivity = A, + this.water.material.uniforms.reflectivity.value = A + }, + sv.prototype.getReflectivity = function () { + return this.reflectivity + }, + sv.prototype.getReflectorTexturePosition = function () { + return this.reflectorTexturePosition.clone() + }, + sv.prototype.getRefractorTexturePosition = function () { + return this.refractorTexturePosition.clone() + }, + sv.prototype.setReflectorTexturePosition = function (A) { + A ? "number" == typeof A.x ? "number" == typeof A.y ? "number" == typeof A.z ? (this.reflectorTexturePosition = new y(A.x, A.y, A.z), + this.water.reflectorTexturePosition = this.reflectorTexturePosition) : Bh.error("缺少参数 position.z") : Bh.error("缺少参数 position.y") : Bh.error("缺少参数 position.x") : Bh.error("缺少参数 position") + }, + sv.prototype.setRefractorTexturePosition = function (A) { + A ? "number" == typeof A.x ? "number" == typeof A.y ? "number" == typeof A.z ? (this.refractorTexturePosition = new y(A.x, A.y, A.z), + this.water.refractorTexturePosition = this.refractorTexturePosition) : Bh.error("缺少参数 position.z") : Bh.error("缺少参数 position.y") : Bh.error("缺少参数 position.x") : Bh.error("缺少参数 position") + }, + sv.prototype.setXDirection = function (A) { + this.xDirection = A, + this.water.material.uniforms.flowDirection.value.x = A + }, + sv.prototype.setYDirection = function (A) { + this.yDirection = A, + this.water.material.uniforms.flowDirection.value.y = A + }, + sv.prototype.remove = function () { + this.viewer.removeExternalObjectByName(this.id) + }, + sv.prototype.setHeight = function (A) { + this.height = A, + this.water.translateZ(A), + this.water.updateMatrixWorld(!0) + }, + sv.prototype.getHeight = function () { + return this.height + }, + sv.prototype.setGeometry = function (A) { + A.isGeometry || A.isBufferGeometry ? (this.geometry = A, + this.water.geometry = A) : Bh.log("ERROR::geometry type not support") + }, + sv.prototype.getGeometry = function () { + return this.geometry + }, + sv.prototype.getWaterObject = function () { + return this.water + }; + var lv = Symbol("_flowing"), + cv = function () { + function A(e) { + cc(this, A), + this.viewer = e.viewer3D; + var t = e.opt; + this.arrowParameters = t, + this.arrowParameters.speed = this.arrowParameters.speed || 5, + this.arrowParameters.spacing = this.arrowParameters.spacing || 100, + this.arrowArray = [], + this.pathNumb = 0, + this.totalLength = 0, + this.path = [], + !0 === t.customizeMesh ? this.geometricModelLength = t.meshLength : t.arrowShape ? (t.arrowShape.rectangleLength = t.arrowShape.rectangleLength || 500, + t.arrowShape.triangleBottomHeight = t.arrowShape.triangleBottomHeight || 260, + this.geometricModelLength = t.arrowShape.rectangleLength + t.arrowShape.triangleBottomHeight ? t.arrowShape.triangleBottomHeight : 260) : this.geometricModelLength = 760, + this.intervalLength = this.geometricModelLength + t.spacing, + this.materialObject = {}, + this.materialsInit = this.arrowParameters.materialsInit || "default", + this.materialsUpdate = this.arrowParameters.materialsUpdate || "fixed", + this.isFlowing = !1, + t.callback && (t.callback.enter && (this.callbackEnter = t.callback.enter), + t.callback.out && (this.callbackOut = t.callback.out)), + this.meshGroupId = (new Date).getTime(), + this.meshGroup ? this.meshGroup.children = [] : this.meshGroup = new Xi + } + return dc(A, [{ + key: "calculationPathOffset", + value: function () { + for (var A = this.path, e = 0; A.length > e; e += 1) { + var t = (new y).copy(A[e].startingPoint), + i = new f, + o = new f, + n = new y(1, 1, 1); + if (A[e].offset) { + var r = (new y).copy(A[e].offset.pathDepthAxis).applyQuaternion(i); + t.add(r.multiplyScalar(A[e].offset.depth)), + o.setFromAxisAngle(A[e].startPoint2EndPointAxis, A[e].angle), + i.premultiply(o), + o.setFromAxisAngle(A[e].vectorNormalize, A[e].offset.angle), + i.premultiply(o) + } else + o.setFromAxisAngle(A[e].startPoint2EndPointAxis, A[e].angle), + i.premultiply(o); + A[e].rotationComponent = {}, + A[e].rotationComponent.position = t, + A[e].rotationComponent.quaternion = i, + A[e].rotationComponent.scale = n + } + } + }, { + key: "translationPath", + value: function () { + var A = new y(1, 0, 0), + e = this.arrowParameters.points, + t = e.length - 1, + i = []; + this.totalLength = 0; + for (var o = 0; t > o; o += 1) { + var n = {}; + if (n.startingPoint = new y(e[o].x, e[o].y, e[o].z), + n.endingPoint = new y(e[o + 1].x, e[o + 1].y, e[o + 1].z), + n.length = n.startingPoint.distanceTo(n.endingPoint), + n.vector = (new y).subVectors(n.endingPoint, n.startingPoint), + n.vectorNormalize = (new y).subVectors(n.endingPoint, n.startingPoint).normalize(), + n.startPoint2EndPointAxis = (new y).crossVectors(A, n.vectorNormalize).normalize(), + n.numb = o, + n.angle = A.angleTo(n.vectorNormalize), + this.arrowParameters.offset && this.arrowParameters.offset[o + 1]) { + var r = {}, + a = this.arrowParameters.offset[o + 1], + s = a.depth, + l = a.angle, + c = void 0 === l ? 0 : l; + r.depth = void 0 === s ? 0 : s, + r.angle = Math.PI / 180 * c, + r.pathDepthAxis = new y(0, 1, 0).applyAxisAngle(n.startPoint2EndPointAxis, n.angle), + r.pathDepthAxis.applyAxisAngle(n.vectorNormalize, r.angle).normalize(), + n.offset = r + } + this.totalLength += n.length, + i.push(n) + } + this.path = i, + this.pathNumb = this.path.length + } + }, { + key: "calculationArrowAmount", + value: function () { + var A = this.arrowParameters, + e = 0; + if (A.createMode && "number" === A.createMode && A.arrowAmount && A.arrowAmount > 0) + if (A.intervalMode && "strict" === A.intervalMode) { + if (e = Math.floor(this.totalLength / this.intervalLength), + A.arrowAmount > e) + return { + code: "001", + message: "Too many arrows,over the length of the path" + }; + this.arrowAmount = A.arrowAmount, + this.CreateMode = "number", + this.IntervalMode = "strict" + } else { + if (e = Math.floor(this.totalLength / this.geometricModelLength), + A.arrowAmount > e) + return { + code: "001", + message: "Too many arrows,over the length of the path" + }; + this.arrowAmount = A.arrowAmount, + this.CreateMode = "number"; + var t = Math.floor(100 * (this.totalLength - this.intervalLength * A.arrowAmount) / A.arrowAmount) / 100; + this.intervalLength += t, + this.IntervalMode = "free" + } + else { + if (A.createMode && "number" === A.createMode && A.arrowAmount && 1 > A.arrowAmount) + return { + code: "002", + message: "the number is error" + }; + if (e = Math.floor(this.totalLength / this.intervalLength), + A.intervalMode && "strict" === A.intervalMode) + this.IntervalMode = "strict"; + else { + var i = Math.floor(100 * (this.totalLength % this.intervalLength) / e) / 100; + this.intervalLength += i, + this.IntervalMode = "free" + } + this.arrowAmount = e, + this.CreateMode = "space" + } + } + }, { + key: "createArrowArray", + value: function () { + var A = this.arrowAmount; + if (!0 === this.arrowParameters.customizeMesh) + for (var e = 0; A > e; e += 1) { + var t = this.arrowParameters.mesh.clone(); + t.material = this.materialObject.default, + this.arrowArray.push(t), + this.meshGroup.add(t) + } + else + for (var i = this.arrowParameters.arrowShape, o = void 0 === i ? {} : i, n = o.triangleBottomLength || 400, r = o.triangleBottomHeight || 260, a = o.rectangleWidth || 180, s = o.rectangleLength || 500, l = o.arrowHeight || 80, c = new Float32Array([r + s, l, 0, s, l, n / 2, s, l, -n / 2, r + s, 0, 0, s, 0, n / 2, s, 0, -n / 2, s, l, -a / 2, s, l, a / 2, 0, l, a / 2, 0, l, -a / 2, s, 0, -a / 2, s, 0, a / 2, 0, 0, a / 2, 0, 0, -a / 2]), h = [2, 1, 0, 3, 4, 5, 0, 1, 4, 0, 4, 3, 1, 2, 4, 4, 2, 5, 5, 2, 0, 3, 5, 0, 8, 7, 6, 9, 8, 6, 13, 9, 6, 10, 13, 6, 12, 8, 9, 9, 13, 12, 12, 13, 10, 12, 10, 11, 7, 8, 12, 11, 7, 12], d = 0; A > d; d += 1) { + var p = this.createArrowMesh(c, h); + p.arrowID = d, + this.arrowArray.push(p), + this.meshGroup.add(p) + } + } + }, { + key: "createArrowMesh", + value: function (A, e) { + var t = new he; + t.setIndex(e); + var i = new YA(A, 3); + return t.attributes.position = i, + new Ue(t, this.materialObject.default) + } + }, { + key: "createMaterialArray", + value: function () { + for (var A = this.arrowParameters.colors, e = this.arrowParameters.materials, t = this.path.length, i = 1; t >= i; i += 1) + e && e[i] ? this.materialObject[i] = e[i] : A && A[i] && (this.materialObject[i] = new jA({ + color: A[i] + })); + e && e.default ? this.materialObject.default = e.default : A && A.default ? this.materialObject.default = new jA({ + color: A.default + }) : (this.materialObject.default = new jA({ + color: 10606038 + }), + this.materialObject.default.transparent = !0, + this.materialObject.default.opacity = .8) + } + }, { + key: "initPostition", + value: function () { + var A = this.arrowArray, + e = this.path, + t = A.length, + i = 0, + o = this.intervalLength, + n = 0, + r = new f; + if (this.arrowParameters.enterSceMod && "progressive" === this.arrowParameters.enterSceMod) + for (var a = 0; t > a; a += 1) { + var s = A[a]; + s.quaternion.copy(r), + s.position.x = e[i].startingPoint.x, + s.position.y = e[i].startingPoint.y, + s.position.z = e[i].startingPoint.z, + s.pathOrder = i, + e[i].offset ? (s.translateOnAxis(e[i].vectorNormalize, -o * n), + s.translateOnAxis(e[i].offset.pathDepthAxis, e[i].offset.depth), + s.rotateOnWorldAxis(e[i].startPoint2EndPointAxis, e[i].angle), + s.rotateOnWorldAxis(e[i].vectorNormalize, e[i].offset.angle)) : (s.translateOnAxis(e[i].vectorNormalize, -o * n), + s.rotateOnWorldAxis(e[i].startPoint2EndPointAxis, e[i].angle)), + s.visible = !1, + s.userData.BosArrowExt = {}, + s.userData.BosArrowExt.enterState = "unenter", + "path" === this.materialsInit && this.materialObject[i + 1] && (s.material = this.materialObject[i + 1]), + s.updateMatrixWorld(), + n += 1 + } + else + for (var l = 0, c = 0; t > c; c += 1) { + var h = A[c]; + h.quaternion.copy(r); + var d = e[i]; + d.offset ? (h.position.x = d.startingPoint.x, + h.position.y = d.startingPoint.y, + h.position.z = d.startingPoint.z, + h.translateOnAxis(d.vectorNormalize, o * n + l), + h.translateOnAxis(d.offset.pathDepthAxis, d.offset.depth), + h.rotateOnWorldAxis(d.startPoint2EndPointAxis, d.angle), + h.rotateOnWorldAxis(d.vectorNormalize, d.offset.angle)) : (h.position.x = d.startingPoint.x, + h.position.y = d.startingPoint.y, + h.position.z = d.startingPoint.z, + h.translateOnAxis(d.vectorNormalize, o * n + l), + h.rotateOnWorldAxis(d.startPoint2EndPointAxis, d.angle)), + h.pathOrder = i, + "path" === this.materialsInit && this.materialObject[i + 1] && (h.material = this.materialObject[i + 1]), + d.length - l > o * (n + 1) || (l = o * (n + 1) - d.length + l, + i += 1, + n = -1), + h.updateMatrixWorld(), + n += 1 + } + this.viewer.removeExternalObjectByName(this.meshGroupId), + this.viewer.addExternalObject(this.meshGroupId, this.meshGroup) + } + }, { + key: "setSpeed", + value: function (A) { + this.isFlowing ? (this.stopFlow(), + this.arrowParameters.speed = A, + this.startFlow()) : this.arrowParameters.speed = A + } + }, { + key: "init", + value: function () { + this.translationPath(), + this.calculationPathOffset(), + this.calculationArrowAmount(), + this.createMaterialArray(), + this.createArrowArray(), + this.initPostition() + } + }, { + key: "updatePosition", + value: function () { + var A = this, + e = this.path, + t = this.arrowParameters.speed; + this.arrowArray.forEach((function (i) { + if (!i.lockPosUpDate || !0 !== i.lockPosUpDate) { + var o = 0; + if (i.userData.BosArrowExt && i.userData.BosArrowExt.enterState && "unenter" === i.userData.BosArrowExt.enterState) { + var n = i.position.distanceTo(e[0].endingPoint); + return e[0].length > n && ("fixed" !== A.materialsUpdate && A.materialObject[0] ? i.material = A.materialObject[0] : "fixed" === A.materialsUpdate || A.materialObject[0] || (i.material = A.materialObject.default), + A.callbackEnter && "function" == typeof A.callbackEnter && A.callbackEnter(i, e[0]), + i.visible = !0, + i.userData.BosArrowExt.enterState = "enter", + "fixed" !== A.materialsUpdate && A.materialObject[1] ? i.material = A.materialObject[1] : "fixed" === A.materialsUpdate || A.materialObject[1] || (i.material = A.materialObject.default)), + i.translateX(t + o), + void i.updateMatrixWorld() + } + var r = i.position.distanceTo(e[i.pathOrder].startingPoint); + r > e[i.pathOrder].length - A.geometricModelLength && !1 !== i.visible && (i.visible = !1, + A.callbackOut && "function" == typeof A.callbackOut && A.callbackOut(i, e[i.pathOrder])), + !1 === i.visible && (i.pathOrder + 1 === A.pathNumb ? e[i.pathOrder].length > r || (o = r - e[i.pathOrder].length, + i.pathOrder = 0, + i.position.copy(e[i.pathOrder].rotationComponent.position), + i.scale.copy(e[i.pathOrder].rotationComponent.scale), + i.setRotationFromQuaternion(e[i.pathOrder].rotationComponent.quaternion), + "fixed" !== A.materialsUpdate && A.materialObject[1] ? i.material = A.materialObject[1] : "fixed" === A.materialsUpdate || A.materialObject[1] || (i.material = A.materialObject.default), + A.callbackEnter && "function" == typeof A.callbackEnter && A.callbackEnter(i, e[i.pathOrder]), + i.visible = !0) : e[i.pathOrder].length > r || (o = r - e[i.pathOrder].length, + i.pathOrder += 1, + i.position.copy(e[i.pathOrder].rotationComponent.position), + i.scale.copy(e[i.pathOrder].rotationComponent.scale), + i.setRotationFromQuaternion(e[i.pathOrder].rotationComponent.quaternion), + "fixed" !== A.materialsUpdate && A.materialObject[i.pathOrder + 1] ? i.material = A.materialObject[i.pathOrder + 1] : "fixed" === A.materialsUpdate || A.materialObject[i.pathOrder + 1] || (i.material = A.materialObject.default), + i.visible = !0, + A.callbackEnter && "function" == typeof A.callbackEnter && A.callbackEnter(i, e[i.pathOrder]))), + i.translateX(t + o), + i.updateMatrixWorld() + } + })), + this.viewer.render() + } + }, { + key: lv, + value: function () { + this.requestAnimationFrameID = requestAnimationFrame(this[lv].bind(this)), + this.updatePosition() + } + }, { + key: "startFlow", + value: function () { + if (this.isFlowing) + return { + code: "003", + message: "Do not open repeatedly" + }; + this.isFlowing = !0, + this.requestAnimationFrameID = requestAnimationFrame(this[lv].bind(this)) + } + }, { + key: "stopFlow", + value: function () { + cancelAnimationFrame(this.requestAnimationFrameID), + this.isFlowing = !1 + } + }, { + key: "hide", + value: function () { + this.viewer.removeExternalObjectByName(this.meshGroupId) + } + }, { + key: "show", + value: function () { + this.hide(), + this.viewer.addExternalObject(this.meshGroupId, this.meshGroup) + } + }, { + key: "clear", + value: function () { + this.hide(), + this.meshGroup.children = [], + this.arrowArray = [] + } + }]), + A + }(); + + function hv(A, e) { + return A === e || A != A && e != e + } + + function dv(A, e) { + for (var t = A.length; t--;) + if (hv(A[t][0], e)) + return t; + return -1 + } + var pv = Array.prototype.splice; + + function gv(A) { + var e = -1, + t = null == A ? 0 : A.length; + for (this.clear(); ++e < t;) { + var i = A[e]; + this.set(i[0], i[1]) + } + } + gv.prototype.clear = function () { + this.__data__ = [], + this.size = 0 + }, + gv.prototype.delete = function (A) { + var e = this.__data__, + t = dv(e, A); + return t >= 0 && (t == e.length - 1 ? e.pop() : pv.call(e, t, 1), + --this.size, + !0) + }, + gv.prototype.get = function (A) { + var e = this.__data__, + t = dv(e, A); + return 0 > t ? void 0 : e[t][1] + }, + gv.prototype.has = function (A) { + return dv(this.__data__, A) > -1 + }, + gv.prototype.set = function (A, e) { + var t = this.__data__, + i = dv(t, A); + return 0 > i ? (++this.size, + t.push([A, e])) : t[i][1] = e, + this + }; + var uv = "object" == typeof global && global && global.Object === Object && global, + fv = "object" == typeof self && self && self.Object === Object && self, + mv = uv || fv || Function("return this")(), + Cv = mv.Symbol, + yv = Object.prototype, + vv = yv.hasOwnProperty, + Iv = yv.toString, + Ev = Cv ? Cv.toStringTag : void 0; + var Bv = Object.prototype.toString; + var xv = Cv ? Cv.toStringTag : void 0; + + function Sv(A) { + return null == A ? void 0 === A ? "[object Undefined]" : "[object Null]" : xv && xv in Object(A) ? function (A) { + var e = vv.call(A, Ev), + t = A[Ev]; + try { + A[Ev] = void 0; + var i = !0 + } catch (A) {} + var o = Iv.call(A); + return i && (e ? A[Ev] = t : delete A[Ev]), + o + }(A) : function (A) { + return Bv.call(A) + }(A) + } + + function wv(A) { + var e = typeof A; + return null != A && ("object" == e || "function" == e) + } + + function Mv(A) { + if (!wv(A)) + return !1; + var e = Sv(A); + return "[object Function]" == e || "[object GeneratorFunction]" == e || "[object AsyncFunction]" == e || "[object Proxy]" == e + } + var bv, Uv = mv["__core-js_shared__"], + Fv = (bv = /[^.]+$/.exec(Uv && Uv.keys && Uv.keys.IE_PROTO || "")) ? "Symbol(src)_1." + bv : ""; + var Kv = Function.prototype.toString; + + function Qv(A) { + if (null != A) { + try { + return Kv.call(A) + } catch (A) {} + try { + return A + "" + } catch (A) {} + } + return "" + } + var Rv = /^\[object .+?Constructor\]$/, + Tv = RegExp("^" + Function.prototype.toString.call(Object.prototype.hasOwnProperty).replace(/[\\^$.*+?()[\]{}|]/g, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$"); + + function kv(A) { + return !(!wv(A) || (e = A, + Fv && Fv in e)) && (Mv(A) ? Tv : Rv).test(Qv(A)); + var e + } + + function Dv(A, e) { + var t = function (A, e) { + return null == A ? void 0 : A[e] + }(A, e); + return kv(t) ? t : void 0 + } + var Lv = Dv(mv, "Map"), + Nv = Dv(Object, "create"); + var Ov = Object.prototype.hasOwnProperty; + var Vv = Object.prototype.hasOwnProperty; + + function Gv(A) { + var e = -1, + t = null == A ? 0 : A.length; + for (this.clear(); ++e < t;) { + var i = A[e]; + this.set(i[0], i[1]) + } + } + + function Pv(A, e) { + var t, i, o = A.__data__; + return ("string" == (i = typeof (t = e)) || "number" == i || "symbol" == i || "boolean" == i ? "__proto__" !== t : null === t) ? o["string" == typeof e ? "string" : "hash"] : o.map + } + + function qv(A) { + var e = -1, + t = null == A ? 0 : A.length; + for (this.clear(); ++e < t;) { + var i = A[e]; + this.set(i[0], i[1]) + } + } + Gv.prototype.clear = function () { + this.__data__ = Nv ? Nv(null) : {}, + this.size = 0 + }, + Gv.prototype.delete = function (A) { + var e = this.has(A) && delete this.__data__[A]; + return this.size -= e ? 1 : 0, + e + }, + Gv.prototype.get = function (A) { + var e = this.__data__; + if (Nv) { + var t = e[A]; + return "__lodash_hash_undefined__" === t ? void 0 : t + } + return Ov.call(e, A) ? e[A] : void 0 + }, + Gv.prototype.has = function (A) { + var e = this.__data__; + return Nv ? void 0 !== e[A] : Vv.call(e, A) + }, + Gv.prototype.set = function (A, e) { + var t = this.__data__; + return this.size += this.has(A) ? 0 : 1, + t[A] = Nv && void 0 === e ? "__lodash_hash_undefined__" : e, + this + }, + qv.prototype.clear = function () { + this.size = 0, + this.__data__ = { + hash: new Gv, + map: new(Lv || gv), + string: new Gv + } + }, + qv.prototype.delete = function (A) { + var e = Pv(this, A).delete(A); + return this.size -= e ? 1 : 0, + e + }, + qv.prototype.get = function (A) { + return Pv(this, A).get(A) + }, + qv.prototype.has = function (A) { + return Pv(this, A).has(A) + }, + qv.prototype.set = function (A, e) { + var t = Pv(this, A), + i = t.size; + return t.set(A, e), + this.size += t.size == i ? 0 : 1, + this + }; + + function jv(A) { + var e = this.__data__ = new gv(A); + this.size = e.size + } + jv.prototype.clear = function () { + this.__data__ = new gv, + this.size = 0 + }, + jv.prototype.delete = function (A) { + var e = this.__data__, + t = e.delete(A); + return this.size = e.size, + t + }, + jv.prototype.get = function (A) { + return this.__data__.get(A) + }, + jv.prototype.has = function (A) { + return this.__data__.has(A) + }, + jv.prototype.set = function (A, e) { + var t = this.__data__; + if (t instanceof gv) { + var i = t.__data__; + if (!Lv || 199 > i.length) + return i.push([A, e]), + this.size = ++t.size, + this; + t = this.__data__ = new qv(i) + } + return t.set(A, e), + this.size = t.size, + this + }; + var Hv = function () { + try { + var A = Dv(Object, "defineProperty"); + return A({}, "", {}), + A + } catch (A) {} + }(); + + function Yv(A, e, t) { + "__proto__" == e && Hv ? Hv(A, e, { + configurable: !0, + enumerable: !0, + value: t, + writable: !0 + }) : A[e] = t + } + var Wv = Object.prototype.hasOwnProperty; + + function Jv(A, e, t) { + var i = A[e]; + Wv.call(A, e) && hv(i, t) && (void 0 !== t || e in A) || Yv(A, e, t) + } + + function zv(A, e, t, i) { + var o = !t; + t || (t = {}); + for (var n = -1, r = e.length; ++n < r;) { + var a = e[n], + s = i ? i(t[a], A[a], a, t, A) : void 0; + void 0 === s && (s = A[a]), + o ? Yv(t, a, s) : Jv(t, a, s) + } + return t + } + + function Zv(A) { + return null != A && "object" == typeof A + } + + function Xv(A) { + return Zv(A) && "[object Arguments]" == Sv(A) + } + var _v = Object.prototype, + $v = _v.hasOwnProperty, + AI = _v.propertyIsEnumerable, + eI = Xv(function () { + return arguments + }()) ? Xv : function (A) { + return Zv(A) && $v.call(A, "callee") && !AI.call(A, "callee") + }, + tI = Array.isArray; + var iI = "object" == typeof A && A && !A.nodeType && A, + oI = iI && "object" == typeof module && module && !module.nodeType && module, + nI = oI && oI.exports === iI ? mv.Buffer : void 0, + rI = (nI ? nI.isBuffer : void 0) || function () { + return !1 + }, + aI = /^(?:0|[1-9]\d*)$/; + + function sI(A, e) { + var t = typeof A; + return !!(e = null == e ? 9007199254740991 : e) && ("number" == t || "symbol" != t && aI.test(A)) && A > -1 && A % 1 == 0 && e > A + } + + function lI(A) { + return "number" == typeof A && A > -1 && A % 1 == 0 && 9007199254740991 >= A + } + var cI = {}; + + function hI(A) { + return function (e) { + return A(e) + } + } + cI["[object Float32Array]"] = cI["[object Float64Array]"] = cI["[object Int8Array]"] = cI["[object Int16Array]"] = cI["[object Int32Array]"] = cI["[object Uint8Array]"] = cI["[object Uint8ClampedArray]"] = cI["[object Uint16Array]"] = cI["[object Uint32Array]"] = !0, + cI["[object Arguments]"] = cI["[object Array]"] = cI["[object ArrayBuffer]"] = cI["[object Boolean]"] = cI["[object DataView]"] = cI["[object Date]"] = cI["[object Error]"] = cI["[object Function]"] = cI["[object Map]"] = cI["[object Number]"] = cI["[object Object]"] = cI["[object RegExp]"] = cI["[object Set]"] = cI["[object String]"] = cI["[object WeakMap]"] = !1; + var dI = "object" == typeof A && A && !A.nodeType && A, + pI = dI && "object" == typeof module && module && !module.nodeType && module, + gI = pI && pI.exports === dI && uv.process, + uI = function () { + try { + var A = pI && pI.require && pI.require("util").types; + return A || gI && gI.binding && gI.binding("util") + } catch (A) {} + }(), + fI = uI && uI.isTypedArray, + mI = fI ? hI(fI) : function (A) { + return Zv(A) && lI(A.length) && !!cI[Sv(A)] + }, + CI = Object.prototype.hasOwnProperty; + + function yI(A, e) { + var t = tI(A), + i = !t && eI(A), + o = !t && !i && rI(A), + n = !t && !i && !o && mI(A), + r = t || i || o || n, + a = r ? function (A, e) { + for (var t = -1, i = Array(A); ++t < A;) + i[t] = e(t); + return i + }(A.length, String) : [], + s = a.length; + for (var l in A) + !e && !CI.call(A, l) || r && ("length" == l || o && ("offset" == l || "parent" == l) || n && ("buffer" == l || "byteLength" == l || "byteOffset" == l) || sI(l, s)) || a.push(l); + return a + } + var vI = Object.prototype; + + function II(A) { + var e = A && A.constructor; + return A === ("function" == typeof e && e.prototype || vI) + } + + function EI(A, e) { + return function (t) { + return A(e(t)) + } + } + var BI = EI(Object.keys, Object), + xI = Object.prototype.hasOwnProperty; + + function SI(A) { + return null != A && lI(A.length) && !Mv(A) + } + + function wI(A) { + return SI(A) ? yI(A) : function (A) { + if (!II(A)) + return BI(A); + var e = []; + for (var t in Object(A)) + xI.call(A, t) && "constructor" != t && e.push(t); + return e + }(A) + } + var MI = Object.prototype.hasOwnProperty; + + function bI(A) { + if (!wv(A)) + return function (A) { + var e = []; + if (null != A) + for (var t in Object(A)) + e.push(t); + return e + }(A); + var e = II(A), + t = []; + for (var i in A) + ("constructor" != i || !e && MI.call(A, i)) && t.push(i); + return t + } + + function UI(A) { + return SI(A) ? yI(A, !0) : bI(A) + } + var FI = "object" == typeof A && A && !A.nodeType && A, + KI = FI && "object" == typeof module && module && !module.nodeType && module, + QI = KI && KI.exports === FI ? mv.Buffer : void 0, + RI = QI ? QI.allocUnsafe : void 0; + + function TI() { + return [] + } + var kI = Object.prototype.propertyIsEnumerable, + DI = Object.getOwnPropertySymbols, + LI = DI ? function (A) { + return null == A ? [] : (A = Object(A), + function (A, e) { + for (var t = -1, i = null == A ? 0 : A.length, o = 0, n = []; ++t < i;) { + var r = A[t]; + e(r, t, A) && (n[o++] = r) + } + return n + }(DI(A), (function (e) { + return kI.call(A, e) + }))) + } : + TI; + + function NI(A, e) { + for (var t = -1, i = e.length, o = A.length; ++t < i;) + A[o + t] = e[t]; + return A + } + var OI = EI(Object.getPrototypeOf, Object), + VI = Object.getOwnPropertySymbols ? function (A) { + for (var e = []; A;) + NI(e, LI(A)), + A = OI(A); + return e + } : + TI; + + function GI(A, e, t) { + var i = e(A); + return tI(A) ? i : NI(i, t(A)) + } + + function PI(A) { + return GI(A, wI, LI) + } + + function qI(A) { + return GI(A, UI, VI) + } + var jI = Dv(mv, "DataView"), + HI = Dv(mv, "Promise"), + YI = Dv(mv, "Set"), + WI = Dv(mv, "WeakMap"), + JI = Qv(jI), + zI = Qv(Lv), + ZI = Qv(HI), + XI = Qv(YI), + _I = Qv(WI), + $I = Sv; + (jI && "[object DataView]" != $I(new jI(new ArrayBuffer(1))) || Lv && "[object Map]" != $I(new Lv) || HI && "[object Promise]" != $I(HI.resolve()) || YI && "[object Set]" != $I(new YI) || WI && "[object WeakMap]" != $I(new WI)) && ($I = function (A) { + var e = Sv(A), + t = "[object Object]" == e ? A.constructor : void 0, + i = t ? Qv(t) : ""; + if (i) + switch (i) { + case JI: + return "[object DataView]"; + case zI: + return "[object Map]"; + case ZI: + return "[object Promise]"; + case XI: + return "[object Set]"; + case _I: + return "[object WeakMap]" + } + return e + }); + var AE = $I, + eE = Object.prototype.hasOwnProperty; + var tE = mv.Uint8Array; + + function iE(A) { + var e = new A.constructor(A.byteLength); + return new tE(e).set(new tE(A)), + e + } + var oE = /\w*$/; + var nE = Cv ? Cv.prototype : void 0, + rE = nE ? nE.valueOf : void 0; + + function aE(A, e, t) { + var i, o = A.constructor; + switch (e) { + case "[object ArrayBuffer]": + return iE(A); + case "[object Boolean]": + case "[object Date]": + return new o(+A); + case "[object DataView]": + return function (A, e) { + var t = e ? iE(A.buffer) : A.buffer; + return new A.constructor(t, A.byteOffset, A.byteLength) + }(A, t); + case "[object Float32Array]": + case "[object Float64Array]": + case "[object Int8Array]": + case "[object Int16Array]": + case "[object Int32Array]": + case "[object Uint8Array]": + case "[object Uint8ClampedArray]": + case "[object Uint16Array]": + case "[object Uint32Array]": + return function (A, e) { + var t = e ? iE(A.buffer) : A.buffer; + return new A.constructor(t, A.byteOffset, A.length) + }(A, t); + case "[object Map]": + return new o; + case "[object Number]": + case "[object String]": + return new o(A); + case "[object RegExp]": + return function (A) { + var e = new A.constructor(A.source, oE.exec(A)); + return e.lastIndex = A.lastIndex, + e + }(A); + case "[object Set]": + return new o; + case "[object Symbol]": + return i = A, + rE ? Object(rE.call(i)) : {} + } + } + var sE = Object.create, + lE = function () { + function A() {} + return function (e) { + if (!wv(e)) + return {}; + if (sE) + return sE(e); + A.prototype = e; + var t = new A; + return A.prototype = void 0, + t + } + }(); + var cE = uI && uI.isMap, + hE = cE ? hI(cE) : function (A) { + return Zv(A) && "[object Map]" == AE(A) + }; + var dE = uI && uI.isSet, + pE = dE ? hI(dE) : function (A) { + return Zv(A) && "[object Set]" == AE(A) + }, + gE = {}; + + function uE(A, e, t, i, o, n) { + var r, a = 1 & e, + s = 2 & e, + l = 4 & e; + if (t && (r = o ? t(A, i, o, n) : t(A)), + void 0 !== r) + return r; + if (!wv(A)) + return A; + var c = tI(A); + if (c) { + if (r = function (A) { + var e = A.length, + t = new A.constructor(e); + return e && "string" == typeof A[0] && eE.call(A, "index") && (t.index = A.index, + t.input = A.input), + t + }(A), + !a) + return function (A, e) { + var t = -1, + i = A.length; + for (e || (e = Array(i)); ++t < i;) + e[t] = A[t]; + return e + }(A, r) + } else { + var h = AE(A), + d = "[object Function]" == h || "[object GeneratorFunction]" == h; + if (rI(A)) + return function (A, e) { + if (e) + return A.slice(); + var t = A.length, + i = RI ? RI(t) : new A.constructor(t); + return A.copy(i), + i + }(A, a); + if ("[object Object]" == h || "[object Arguments]" == h || d && !o) { + if (r = s || d ? {} : function (A) { + return "function" != typeof A.constructor || II(A) ? {} : lE(OI(A)) + }(A), + !a) + return s ? function (A, e) { + return zv(A, VI(A), e) + }(A, function (A, e) { + return A && zv(e, UI(e), A) + }(r, A)) : function (A, e) { + return zv(A, LI(A), e) + }(A, function (A, e) { + return A && zv(e, wI(e), A) + }(r, A)) + } else { + if (!gE[h]) + return o ? A : {}; + r = aE(A, h, a) + } + } + n || (n = new jv); + var p = n.get(A); + if (p) + return p; + n.set(A, r), + pE(A) ? A.forEach((function (i) { + r.add(uE(i, e, t, i, A, n)) + })) : hE(A) && A.forEach((function (i, o) { + r.set(o, uE(i, e, t, o, A, n)) + })); + var g = l ? s ? qI : PI : s ? keysIn : wI, + u = c ? void 0 : g(A); + return function (A, e) { + for (var t = -1, i = null == A ? 0 : A.length; ++t < i && !1 !== e(A[t], t, A);) + ; + }(u || A, (function (i, o) { + u && (i = A[o = i]), + Jv(r, o, uE(i, e, t, o, A, n)) + })), + r + } + gE["[object Arguments]"] = gE["[object Array]"] = gE["[object ArrayBuffer]"] = gE["[object DataView]"] = gE["[object Boolean]"] = gE["[object Date]"] = gE["[object Float32Array]"] = gE["[object Float64Array]"] = gE["[object Int8Array]"] = gE["[object Int16Array]"] = gE["[object Int32Array]"] = gE["[object Map]"] = gE["[object Number]"] = gE["[object Object]"] = gE["[object RegExp]"] = gE["[object Set]"] = gE["[object String]"] = gE["[object Symbol]"] = gE["[object Uint8Array]"] = gE["[object Uint8ClampedArray]"] = gE["[object Uint16Array]"] = gE["[object Uint32Array]"] = !0, + gE["[object Error]"] = gE["[object Function]"] = gE["[object WeakMap]"] = !1; + + function fE(A) { + return uE(A, 5) + } + var mE = function () { + var A, e = { + defaultRadius: 40, + defaultRenderer: "canvas2d", + defaultGradient: { + .25: "rgb(0,0,255)", + .55: "rgb(0,255,0)", + .85: "yellow", + 1: "rgb(255,0,0)" + }, + defaultMaxOpacity: 1, + defaultMinOpacity: 0, + defaultBlur: .85, + defaultXField: "x", + defaultYField: "y", + defaultValueField: "value", + plugins: {} + }, + t = function () { + var A = function (A) { + this._coordinator = {}, + this._data = [], + this._radi = [], + this._min = 10, + this._max = 1, + this._xField = A.xField || A.defaultXField, + this._yField = A.yField || A.defaultYField, + this._valueField = A.valueField || A.defaultValueField, + A.radius && (this._cfgRadius = A.radius) + }, + t = e.defaultRadius; + return A.prototype = { + _organiseData: function (A, e) { + var i = A[this._xField], + o = A[this._yField], + n = this._radi, + r = this._data, + a = this._max, + s = this._min, + l = A[this._valueField] || 1, + c = A.radius || this._cfgRadius || t; + r[i] || (r[i] = [], + n[i] = []), + r[i][o] ? r[i][o] += l : (r[i][o] = l, + n[i][o] = c); + var h = r[i][o]; + return h > a ? (e ? this.setDataMax(h) : this._max = h, + !1) : s > h ? (e ? this.setDataMin(h) : this._min = h, + !1) : { + x: i, + y: o, + value: l, + radius: c, + min: s, + max: a + } + }, + _unOrganizeData: function () { + var A = [], + e = this._data, + t = this._radi; + for (var i in e) + for (var o in e[i]) + A.push({ + x: i, + y: o, + radius: t[i][o], + value: e[i][o] + }); + return { + min: this._min, + max: this._max, + data: A + } + }, + _onExtremaChange: function () { + this._coordinator.emit("extremachange", { + min: this._min, + max: this._max + }) + }, + addData: function () { + if (arguments[0].length > 0) + for (var A = arguments[0], e = A.length; e--;) + this.addData.call(this, A[e]); + else { + var t = this._organiseData(arguments[0], !0); + t && (0 === this._data.length && (this._min = this._max = t.value), + this._coordinator.emit("renderpartial", { + min: this._min, + max: this._max, + data: [t] + })) + } + return this + }, + setData: function (A) { + var e = A.data, + t = e.length; + this._data = [], + this._radi = []; + for (var i = 0; t > i; i++) + this._organiseData(e[i], !1); + return this._max = A.max, + this._min = A.min || 0, + this._onExtremaChange(), + this._coordinator.emit("renderall", this._getInternalData()), + this + }, + removeData: function () {}, + setDataMax: function (A) { + return this._max = A, + this._onExtremaChange(), + this._coordinator.emit("renderall", this._getInternalData()), + this + }, + setDataMin: function (A) { + return this._min = A, + this._onExtremaChange(), + this._coordinator.emit("renderall", this._getInternalData()), + this + }, + setCoordinator: function (A) { + this._coordinator = A + }, + _getInternalData: function () { + return { + max: this._max, + min: this._min, + data: this._data, + radi: this._radi + } + }, + getData: function () { + return this._unOrganizeData() + } + }, + A + }(), + i = function () { + var A = function (A) { + var e = A.gradient || A.defaultGradient, + t = document.createElement("canvas"), + i = t.getContext("2d"); + t.width = 256, + t.height = 1; + var o = i.createLinearGradient(0, 0, 256, 1); + for (var n in e) + o.addColorStop(n, e[n]); + return i.fillStyle = o, + i.fillRect(0, 0, 256, 1), + i.getImageData(0, 0, 256, 1).data + }, + e = function (A, e) { + var t = document.createElement("canvas"), + i = t.getContext("2d"), + o = A, + n = A; + if (t.width = t.height = 2 * A, + 1 == e) + i.beginPath(), + i.arc(o, n, A, 0, 2 * Math.PI, !1), + i.fillStyle = "rgba(0,0,0,1)", + i.fill(); + else { + var r = i.createRadialGradient(o, n, A * e, o, n, A); + r.addColorStop(0, "rgba(0,0,0,1)"), + r.addColorStop(1, "rgba(0,0,0,0)"), + i.fillStyle = r, + i.fillRect(0, 0, 2 * A, 2 * A) + } + return t + }; + + function t(e) { + var t = e.container, + i = this.shadowCanvas = document.createElement("canvas"), + o = this.canvas = e.canvas || document.createElement("canvas"), + n = (this._renderBoundaries = [1e4, 1e4, 0, 0], + getComputedStyle(e.container) || {}); + o.className = "heatmap-canvas", + this._width = o.width = i.width = e.width || +n.width.replace(/px/, ""), + this._height = o.height = i.height = e.height || +n.height.replace(/px/, ""), + this.shadowCtx = i.getContext("2d"), + this.ctx = o.getContext("2d"), + o.style.cssText = i.style.cssText = "position:absolute;left:0;top:0;", + t.style.position = "relative", + t.appendChild(o), + this._palette = A(e), + this._templates = {}, + this._setStyles(e) + } + return t.prototype = { + renderPartial: function (A) { + A.data.length > 0 && (this._drawAlpha(A), + this._colorize()) + }, + renderAll: function (A) { + this._clear(), + A.data.length > 0 && (this._drawAlpha(function (A) { + for (var e = [], t = A.min, i = A.max, o = A.radi, n = (A = A.data, + Object.keys(A)), r = n.length; r--;) + for (var a = n[r], s = Object.keys(A[a]), l = s.length; l--;) { + var c = s[l]; + e.push({ + x: a, + y: c, + value: A[a][c], + radius: o[a][c] + }) + } + return { + min: t, + max: i, + data: e + } + }(A)), + this._colorize()) + }, + _updateGradient: function (e) { + this._palette = A(e) + }, + updateConfig: function (A) { + A.gradient && this._updateGradient(A), + this._setStyles(A) + }, + setDimensions: function (A, e) { + this._width = A, + this._height = e, + this.canvas.width = this.shadowCanvas.width = A, + this.canvas.height = this.shadowCanvas.height = e + }, + _clear: function () { + this.shadowCtx.clearRect(0, 0, this._width, this._height), + this.ctx.clearRect(0, 0, this._width, this._height) + }, + _setStyles: function (A) { + this._blur = 0 == A.blur ? 0 : A.blur || A.defaultBlur, + A.backgroundColor && (this.canvas.style.backgroundColor = A.backgroundColor), + this._width = this.canvas.width = this.shadowCanvas.width = A.width || this._width, + this._height = this.canvas.height = this.shadowCanvas.height = A.height || this._height, + this._opacity = 255 * (A.opacity || 0), + this._maxOpacity = 255 * (A.maxOpacity || A.defaultMaxOpacity), + this._minOpacity = 255 * (A.minOpacity || A.defaultMinOpacity), + this._useGradientOpacity = !!A.useGradientOpacity + }, + _drawAlpha: function (A) { + for (var t = this._min = A.min, i = this._max = A.max, o = (A = A.data || []).length, n = 1 - this._blur; o--;) { + var r, a = A[o], + s = a.x, + l = a.y, + c = a.radius, + h = Math.min(a.value, i), + d = s - c, + p = l - c, + g = this.shadowCtx; + this._templates[c] ? r = this._templates[c] : this._templates[c] = r = e(c, n); + var u = (h - t) / (i - t); + g.globalAlpha = .01 > u ? .01 : u, + g.drawImage(r, d, p), + this._renderBoundaries[0] > d && (this._renderBoundaries[0] = d), + this._renderBoundaries[1] > p && (this._renderBoundaries[1] = p), + d + 2 * c > this._renderBoundaries[2] && (this._renderBoundaries[2] = d + 2 * c), + p + 2 * c > this._renderBoundaries[3] && (this._renderBoundaries[3] = p + 2 * c) + } + }, + _colorize: function () { + var A = this._renderBoundaries[0], + e = this._renderBoundaries[1], + t = this._renderBoundaries[2] - A, + i = this._renderBoundaries[3] - e, + o = this._width, + n = this._height, + r = this._opacity, + a = this._maxOpacity, + s = this._minOpacity, + l = this._useGradientOpacity; + 0 > A && (A = 0), + 0 > e && (e = 0), + A + t > o && (t = o - A), + e + i > n && (i = n - e); + for (var c = this.shadowCtx.getImageData(A, e, t, i), h = c.data, d = h.length, p = this._palette, g = 3; d > g; g += 4) { + var u, f = h[g], + m = 4 * f; + if (m) + u = r > 0 ? r : a > f ? s > f ? s : f : a, + h[g - 3] = p[m], + h[g - 2] = p[m + 1], + h[g - 1] = p[m + 2], + h[g] = l ? p[m + 3] : u + } + this.shadowCtx.putImageData(c, A, e), + this.ctx.putImageData(c, A, e), + this._renderBoundaries = [1e3, 1e3, 0, 0] + }, + getValueAt: function (A) { + var e = this.shadowCtx.getImageData(A.x, A.y, 1, 1).data[3]; + return Math.abs(this._max - this._min) * (e / 255) >> 0 + }, + getDataURL: function () { + return this.canvas.toDataURL() + } + }, + t + }(), + o = (A = !1, + "canvas2d" === e.defaultRenderer && (A = i), + A), + n = function () { + for (var A = {}, e = arguments.length, t = 0; e > t; t++) { + var i = arguments[t]; + for (var o in i) + A[o] = i[o] + } + return A + }, + r = function () { + var A = function () { + function A() { + this.cStore = {} + } + return A.prototype = { + on: function (A, e, t) { + var i = this.cStore; + i[A] || (i[A] = []), + i[A].push((function (A) { + return e.call(t, A) + })) + }, + emit: function (A, e) { + var t = this.cStore; + if (t[A]) + for (var i = t[A].length, o = 0; i > o; o++) { + (0, + t[A][o])(e) + } + } + }, + A + }(), + i = function (A) { + var e = A._renderer, + t = A._coordinator, + i = A._store; + t.on("renderpartial", e.renderPartial, e), + t.on("renderall", e.renderAll, e), + t.on("extremachange", (function (e) { + A._config.onExtremaChange && A._config.onExtremaChange({ + min: e.min, + max: e.max, + gradient: A._config.gradient || A._config.defaultGradient + }) + })), + i.setCoordinator(t) + }; + + function r() { + var r = this._config = n(e, arguments[0] || {}); + if (this._coordinator = new A, + r.plugin) { + var a = r.plugin; + if (!e.plugins[a]) + throw new Error("Plugin '" + a + "' not found. Maybe it was not registered."); + var s = e.plugins[a]; + this._renderer = new s.renderer(r), + this._store = new s.store(r) + } else + this._renderer = new o(r), + this._store = new t(r); + i(this) + } + return r.prototype = { + addData: function () { + return this._store.addData.apply(this._store, arguments), + this + }, + removeData: function () { + return this._store.removeData && this._store.removeData.apply(this._store, arguments), + this + }, + setData: function () { + return this._store.setData.apply(this._store, arguments), + this + }, + setDataMax: function () { + return this._store.setDataMax.apply(this._store, arguments), + this + }, + setDataMin: function () { + return this._store.setDataMin.apply(this._store, arguments), + this + }, + configure: function (A) { + return this._config = n(this._config, A), + this._renderer.updateConfig(this._config), + this._coordinator.emit("renderall", this._store._getInternalData()), + this + }, + repaint: function () { + return this._coordinator.emit("renderall", this._store._getInternalData()), + this + }, + getData: function () { + return this._store.getData() + }, + getDataURL: function () { + return this._renderer.getDataURL() + }, + getValueAt: function (A) { + return this._store.getValueAt ? this._store.getValueAt(A) : this._renderer.getValueAt ? this._renderer.getValueAt(A) : null + } + }, + r + }(); + return { + create: function (A) { + return new r(A) + }, + register: function (A, t) { + e.plugins[A] = t + } + } + }(), + CE = function () { + function A(e) { + cc(this, A), + this.viewer = e.viewer3D, + this.id = e.id, + this.boundary = [], + this.quaternion = new f, + this.xMin = 1 / 0, + this.yMax = -1 / 0, + this.zoomRate = .05 + } + return dc(A, [{ + key: "createInstance", + value: function (A, e) { + var t = document.createElement("div"); + t.id = "heatmap-" + this.id || (new Date).getTime(), + t.style.width = "10px", + t.style.height = "10px", + t.style.position = "absolute", + t.style.top = "0", + t.style.left = "0", + t.style.zIndex = "-10", + t.style.overflow = "scroll"; + var i = document.createElement("div"); + i.style.width = A + "px", + i.style.height = e + "px", + t.appendChild(i), + this.viewer.viewportDiv.appendChild(t), + this.container = t, + this.heatmap = mE.create({ + container: i + }) + } + }, { + key: "getHeatmap", + value: function () { + return this.heatmap + } + }, { + key: "isPlane", + value: function (A) { + if (3 > A.length) + return !1; + if (3 === A.length) + return !0; + for (var e = !0, t = (new y).subVectors(A[0], A[1]), i = (new y).subVectors(A[1], A[2]), o = t.cross(i).normalize(), n = 3; A.length > n; n++) { + var r = (new y).subVectors(A[n - 1], A[n]).cross(i).normalize(), + a = .001; + if (Math.abs(Math.abs(o.x) - Math.abs(r.x)) > a || Math.abs(Math.abs(o.y) - Math.abs(r.y)) > a || Math.abs(Math.abs(o.z) - Math.abs(r.z)) > a) { + e = !1; + break + } + } + return e + } + }, { + key: "addHeatmap", + value: function (A, e) { + var t = fE(e.boundary); + if (e.data.data.forEach((function (A) { + t.push(A.point) + })), + this.isPlane(t)) { + this.boundary = fE(e.boundary); + var i = new f, + o = (new y).subVectors(e.boundary[1], e.boundary[0]).cross((new y).subVectors(e.boundary[2], e.boundary[1])); + i.setFromUnitVectors(o.normalize(), new y(0, 0, 1)); + var n = fE(e.boundary).map((function (A) { + return A.applyQuaternion(i) + })); + this.quaternion = i.clone(); + var r = 1 / 0, + a = -1 / 0, + s = 1 / 0, + l = -1 / 0; + n.forEach((function (A) { + r > A.x && (r = A.x), + A.x > a && (a = A.x), + s > A.y && (s = A.y), + A.y > l && (l = A.y) + })); + var c = a - r, + h = l - s; + this.xMin = r, + this.yMax = l; + var d = e.quality || .05; + this.zoomRate = d, + this.createInstance(Math.round(c * d), Math.round(h * d)); + var p = e.data.data.map((function (A) { + return A.point.applyQuaternion(i) + })), + g = []; + e.data.data.forEach((function (A, e) { + var t = p[e]; + g.push({ + x: Math.round((t.x - r) * d), + y: Math.round((l - t.y) * d), + value: A.value, + radius: (A.radius || 1e3) * d + }) + })), + this.heatmap.setData({ + min: e.data.min, + max: e.data.max, + data: g + }); + var u = new ov(n), + m = new jA({ + map: new en(this.container.querySelector("canvas")), + side: 2, + transparent: !0, + polygonOffset: !0, + polygonOffsetFactor: -1, + polygonOffsetUnits: -1 + }), + C = new Kf(u, m); + C.visible = !0; + var v = new M; + v.elements[14] = n[0].z; + var I = new M; + return I.makeRotationFromQuaternion(i.inverse()), + C.applyMatrix4(I.multiply(v)), + this.viewer.addExternalObject(A, C), + C.disPickable = !0, + this.viewer.disableComponentsSelectionByKey(A), + !0 + } + return !1 + } + }, { + key: "updateHeatmap", + value: function (A) { + var e = this, + t = fE(this.boundary); + if (A.data.data.forEach((function (A) { + t.push(A.point) + })), + this.isPlane(t)) { + var i = [], + o = A.data.data.map((function (A) { + return new y(A.point.x, A.point.y, A.point.z).applyQuaternion(e.quaternion) + })), + n = this.zoomRate; + return A.data.data.forEach((function (A, t) { + var r = o[t]; + i.push({ + x: Math.round((r.x - e.xMin) * n), + y: Math.round((e.yMax - r.y) * n), + value: A.value, + radius: (A.radius || 1e3) * n + }) + })), + this.heatmap.setData({ + min: A.data.min, + max: A.data.max, + data: i + }), + this.viewer.getExternalObjectByName(A.id).material.map.needsUpdate = !0, + this.viewer.render(), + !0 + } + return !1 + } + }, { + key: "removeHeatmap", + value: function (A) { + this.viewer.removeExternalObjectByName(A), + this.viewer.viewportDiv.removeChild(this.container) + } + }]), + A + }(), + yE = function (A) { + this.maxEdgeLength = A + }; + yE.prototype.modify = function (A) { + for (var e, t = [], i = [], o = this.maxEdgeLength * this.maxEdgeLength, n = 0, r = A.faceVertexUvs.length; r > n; n++) + i[n] = []; + for (n = 0, + r = A.faces.length; r > n; n++) { + var a = A.faces[n]; + if (a instanceof GA) { + var s = a.a, + l = a.b, + c = a.c, + h = A.vertices[s], + d = A.vertices[l], + p = A.vertices[c], + g = h.distanceToSquared(d), + u = d.distanceToSquared(p), + f = h.distanceToSquared(p); + if (g > o || u > o || f > o) { + var m = A.vertices.length, + C = a.clone(), + y = a.clone(); + if (g < u || g < f) + if (u < g || u < f) { + if ((v = h.clone()).lerp(p, .5), + C.a = s, + C.b = l, + C.c = m, + y.a = m, + y.b = l, + y.c = c, + 3 === a.vertexNormals.length) + (I = a.vertexNormals[0].clone()).lerp(a.vertexNormals[2], .5), + C.vertexNormals[2].copy(I), + y.vertexNormals[0].copy(I); + if (3 === a.vertexColors.length) + (E = a.vertexColors[0].clone()).lerp(a.vertexColors[2], .5), + C.vertexColors[2].copy(E), + y.vertexColors[0].copy(E); + e = 2 + } else { + if ((v = d.clone()).lerp(p, .5), + C.a = s, + C.b = l, + C.c = m, + y.a = m, + y.b = c, + y.c = s, + 3 === a.vertexNormals.length) + (I = a.vertexNormals[1].clone()).lerp(a.vertexNormals[2], .5), + C.vertexNormals[2].copy(I), + y.vertexNormals[0].copy(I), + y.vertexNormals[1].copy(a.vertexNormals[2]), + y.vertexNormals[2].copy(a.vertexNormals[0]); + if (3 === a.vertexColors.length) + (E = a.vertexColors[1].clone()).lerp(a.vertexColors[2], .5), + C.vertexColors[2].copy(E), + y.vertexColors[0].copy(E), + y.vertexColors[1].copy(a.vertexColors[2]), + y.vertexColors[2].copy(a.vertexColors[0]); + e = 1 + } + else { + var v, I, E; + if ((v = h.clone()).lerp(d, .5), + C.a = s, + C.b = m, + C.c = c, + y.a = m, + y.b = l, + y.c = c, + 3 === a.vertexNormals.length) + (I = a.vertexNormals[0].clone()).lerp(a.vertexNormals[1], .5), + C.vertexNormals[1].copy(I), + y.vertexNormals[0].copy(I); + if (3 === a.vertexColors.length) + (E = a.vertexColors[0].clone()).lerp(a.vertexColors[1], .5), + C.vertexColors[1].copy(E), + y.vertexColors[0].copy(E); + e = 0 + } + t.push(C, y), + A.vertices.push(v); + for (var B = 0, x = A.faceVertexUvs.length; x > B; B++) + if (A.faceVertexUvs[B].length) { + var S = A.faceVertexUvs[B][n], + w = S[0], + M = S[1], + b = S[2]; + if (0 === e) { + (K = w.clone()).lerp(M, .5); + var U = [w.clone(), K.clone(), b.clone()], + F = [K.clone(), M.clone(), b.clone()] + } else if (1 === e) { + (K = M.clone()).lerp(b, .5); + U = [w.clone(), M.clone(), K.clone()], + F = [K.clone(), b.clone(), w.clone()] + } else { + var K; + (K = w.clone()).lerp(b, .5); + U = [w.clone(), M.clone(), K.clone()], + F = [K.clone(), M.clone(), b.clone()] + } + i[B].push(U, F) + } + } else { + t.push(a); + for (B = 0, + x = A.faceVertexUvs.length; x > B; B++) + i[B].push(A.faceVertexUvs[B][n]) + } + } + } + A.faces = t, + A.faceVertexUvs = i + }; + var vE = function () { + function A(e) { + cc(this, A), + this.viewer = e.viewer3D, + this.id = e.id, + this.boundary = [], + this.quaternion = new f, + this.xMin = 1 / 0, + this.yMax = -1 / 0, + this.zoomRate = .05, + this._canvasSize = new s, + this.detailFactor = .5, + this._offsetToNagZ = !1, + this._mesh = void 0, + this._originalGeo = void 0, + this._currentGeo = void 0 + } + return dc(A, [{ + key: "createInstance", + value: function (A, e) { + var t = document.createElement("div"); + t.id = "heatmap-" + this.id || (new Date).getTime(), + t.style.width = "10px", + t.style.height = "10px", + t.style.position = "absolute", + t.style.top = "0", + t.style.left = "0", + t.style.zIndex = "-10", + t.style.overflow = "scroll"; + var i = document.createElement("div"); + i.style.width = A + "px", + i.style.height = e + "px", + this._canvas = i, + t.appendChild(i), + this.viewer.viewportDiv.appendChild(t), + this.container = t, + this.heatmap = mE.create({ + container: i + }), + this._canvasSize.set(A, e) + } + }, { + key: "getHeatmap", + value: function () { + return this.heatmap + } + }, { + key: "isPlane", + value: function (A) { + if (3 > A.length) + return !1; + if (3 === A.length) + return !0; + for (var e = !0, t = (new y).subVectors(A[0], A[1]), i = (new y).subVectors(A[1], A[2]), o = t.cross(i).normalize(), n = 3; A.length > n; n += 1) { + var r = (new y).subVectors(A[n - 1], A[n]).cross(i).normalize(), + a = .001; + if (Math.abs(Math.abs(o.x) - Math.abs(r.x)) > a || Math.abs(Math.abs(o.y) - Math.abs(r.y)) > a || Math.abs(Math.abs(o.z) - Math.abs(r.z)) > a) { + e = !1; + break + } + } + return e + } + }, { + key: "addHeatmap", + value: function (A, e) { + var t = fE(e.boundary); + if (e.data.data.forEach((function (A) { + t.push(A.point) + })), + this.isPlane(t)) { + this.boundary = fE(e.boundary); + var i = new f, + o = (new y).subVectors(e.boundary[1], e.boundary[0]).cross((new y).subVectors(e.boundary[2], e.boundary[1])); + i.setFromUnitVectors(o.normalize(), new y(0, 0, 1)), + 2 * o.angleTo(new y(0, 0, 1)) > Math.PI && (this._offsetToNagZ = !0); + var n = fE(e.boundary).map((function (A) { + return A.applyQuaternion(i) + })); + this.quaternion = i.clone(); + var r = 1 / 0, + a = -1 / 0, + s = 1 / 0, + l = -1 / 0; + n.forEach((function (A) { + r > A.x && (r = A.x), + A.x > a && (a = A.x), + s > A.y && (s = A.y), + A.y > l && (l = A.y) + })); + var c = a - r, + h = l - s; + this.xMin = r, + this.yMax = l; + var d = e.quality || .05; + this.zoomRate = d, + this.createInstance(Math.round(c * d), Math.round(h * d)); + var p = e.data.data.map((function (A) { + return A.point.applyQuaternion(i) + })), + g = []; + e.data.data.forEach((function (A, e) { + var t = p[e]; + g.push({ + x: Math.round((t.x - r) * d), + y: Math.round((l - t.y) * d), + value: A.value, + radius: (A.radius || 1e3) * d + }) + })), + this.heatmap.setData({ + min: e.data.min, + max: e.data.max, + data: g + }); + var u = new ov(n), + m = new De; + m.fromBufferGeometry(u), + this._originalGeo = m.clone(); + var C = this._tessellateGeometry(m); + u = (new he).fromGeometry(C), + this._offsetZ(u); + var v = new jA({ + map: new en(this.container.querySelector("canvas")), + transparent: !0, + side: 2, + polygonOffset: !0, + polygonOffsetFactor: -1, + polygonOffsetUnits: -1, + wireframe: !1 + }), + I = new Kf(u, v); + I.visible = !0; + var E = new M; + E.elements[14] = n[0].z; + var B = new M; + return B.makeRotationFromQuaternion(i.inverse()), + I.applyMatrix4(B.multiply(E)), + this.viewer.addExternalObject(A, I), + I.disPickable = !0, + this.viewer.disableComponentsSelectionByKey(A), + this._mesh = I, + !0 + } + return !1 + } + }, { + key: "updateHeatmap", + value: function (A) { + var e = this, + t = fE(this.boundary); + if (A.data.data.forEach((function (A) { + t.push(A.point) + })), + this.isPlane(t)) { + var i = [], + o = A.data.data.map((function (A) { + return new y(A.point.x, A.point.y, A.point.z).applyQuaternion(e.quaternion) + })), + n = this.zoomRate; + A.data.data.forEach((function (A, t) { + var r = o[t]; + i.push({ + x: Math.round((r.x - e.xMin) * n), + y: Math.round((e.yMax - r.y) * n), + value: A.value, + radius: (A.radius || 1e3) * n + }) + })), + this.heatmap.setData({ + min: A.data.min, + max: A.data.max, + data: i + }); + var r = this.viewer.getExternalObjectByName(A.id); + if (r) + return r.material.map.needsUpdate = !0, + this.viewer.render(), + !0 + } + return !1 + } + }, { + key: "removeHeatmap", + value: function (A) { + this.viewer.removeExternalObjectByName(A), + this.viewer.viewportDiv.removeChild(this.container) + } + }, { + key: "setDetailFactor", + value: function (A) { + if (this.detailFactor !== A && (this.detailFactor = A, + this._originalGeo && this._mesh)) { + var e = this._originalGeo.clone(), + t = this._tessellateGeometry(e), + i = (new he).fromGeometry(t); + this._offsetZ(i), + this._mesh.geometry = i + } + } + }, { + key: "_tessellateGeometry", + value: function (A) { + for (var e = new yE(100), t = 10 + Math.round(10 * this.detailFactor), i = 0; t > i; i += 1) + e.modify(A); + return A + } + }, { + key: "_easeInOutQuad", + value: function (A) { + return 1 - (1 - A) * (1 - A) + } + }, { + key: "_offsetZ", + value: function (A) { + for (var e = A.getAttribute("uv").array, t = A.getAttribute("position").array, i = this.heatmap.getData(), o = 0, n = e.length; n > o; o += 2) { + var r = (this.heatmap.getValueAt({ + x: e[o] * this._canvasSize.x, + y: (1 - e[o + 1]) * this._canvasSize.y + }) - i.min) / (i.max - i.min); + r = this._easeInOutQuad(r), + t[o / 2 * 3 + 2] = 1e3 * r * (this._offsetToNagZ ? -1 : 1) + } + A.getAttribute("position").needsUpdate = !0 + } + }]), + A + }(), + IE = function () { + function A(e, t) { + cc(this, A), + this.viewer = t, + this.maxHeatValue = 1 / 0, + this.minHeatValue = -1 / 0, + this._init(e) + } + return dc(A, [{ + key: "show", + value: function (A) { + var e = this; + + function t(A) { + if (0 === A.uniforms.heatmapPoints.value.length) + A.fragmentShader = "#define HEATMAPPOINTSCOUNT " + e.shaderData.heatmapPoints.length + "\n" + A.fragmentShader, + A.vertexShader = "#define HEATMAPPOINTSCOUNT " + e.shaderData.heatmapPoints.length + "\n" + A.vertexShader; + else { + var t = "#define HEATMAPPOINTSCOUNT " + A.uniforms.heatmapPoints.value.length; + A.fragmentShader = A.fragmentShader.replace(t, "#define HEATMAPPOINTSCOUNT " + e.shaderData.heatmapPoints.length), + A.vertexShader = A.vertexShader.replace(t, "#define HEATMAPPOINTSCOUNT " + e.shaderData.heatmapPoints.length) + } + A.uniforms.heatmapPoints.value = e.shaderData.heatmapPoints, + A.uniforms.heatmapTexture.value = e.shaderData.heatmapTexture, + A.needsUpdate = !0 + } + if (A) { + if (!this.viewer.getViewerImpl().getModelByComponentKey(A)) + return; + var i = this.viewer.getViewerImpl().modelManager.getComponent(A); + if (i && i.length > 0) + for (var o = i[0].mesh.material, n = 0, r = o.length; r > n; n += 1) + o[n] = o[n].clone(), + t(o[n]) + } else + this.shaderData.heatmapPoints && this.shaderData.heatmapTexture && (this.viewer.getViewerImpl().getModelManager().traverseModels((function (A) { + var e = A.materialManager.materials; + for (var i in e) { + t(e[i]) + } + })), + this.viewer.syncRender()) + } + }, { + key: "hide", + value: function () { + var A = this; + this.shaderData.heatmapPoints && this.shaderData.heatmapTexture && (this.viewer.getViewerImpl().getModelManager().traverseModels((function (e) { + var t = e.materialManager.materials; + for (var i in t) { + var o = t[i]; + if (o.uniforms.heatmapPoints.value.length > 0) { + o.uniforms.heatmapPoints.value = [], + o.uniforms.heatmapTexture.value = null; + var n = "#define HEATMAPPOINTSCOUNT " + A.shaderData.heatmapPoints.length; + o.fragmentShader = o.fragmentShader.replace(n, ""), + o.vertexShader = o.vertexShader.replace(n, ""), + o.needsUpdate = !0 + } + } + })), + this.viewer.render()) + } + }, { + key: "removeHeatmap", + value: function () { + this.hide(), + this.shaderData.heatmapPoints && delete this.shaderData.heatmapPoints, + this.shaderData.heatmapTexture && delete this.shaderData.heatmapTexture + } + }, { + key: "updateHeatmap", + value: function (A) { + var e = A.data; + this.maxHeatValue = e.max ? e.max : 1 / 0, + this.minHeatValue = e.min ? e.min : -1 / 0, + this.shaderData.heatmapPoints = this._createHeatmapBuffer(A.data), + this.show() + } + }, { + key: "_init", + value: function (A) { + var e = A.data; + this.maxHeatValue = e.max ? e.max : 1 / 0, + this.minHeatValue = e.min ? e.min : -1 / 0, + this.shaderData = { + heatmapPoints: this._createHeatmapBuffer(e), + heatmapTexture: this._createHeatmapTexture() + } + } + }, { + key: "_createHeatmapBuffer", + value: function (A) { + if (A.data && 0 !== A.data.length) { + if (this.maxHeatValue === 1 / 0 || this.minHeatValue === -1 / 0) + for (var e = 0, t = A.data.length; t > e; e += 1) { + var i = A.data[e]; + i.value > this.maxHeatValue && (this.maxHeatValue = i.value), + this.minHeatValue > i.value && (this.minHeatValue = i.value) + } + for (var o = [], n = 0, r = A.data.length; r > n; n += 1) { + var a = A.data[n], + s = Math.max(this.minHeatValue, Math.min(a.value, this.maxHeatValue)); + o.push(a.point.x, a.point.y, a.point.z, (s - this.minHeatValue) / (this.maxHeatValue - this.minHeatValue), a.radius ? a.radius : 1e3) + } + return new Float32Array(o) + } + } + }, { + key: "_createHeatmapTexture", + value: function () { + var A = document.createElement("canvas"); + A.width = 256, + A.height = 1; + var e = A.getContext("2d"), + t = e.createLinearGradient(0, 0, 256, 1), + i = { + 0: "#44f", + .1: "#0ff", + .2: "#0f0", + .4: "#ff0", + 1: "#f00" + }; + for (var o in i) + t.addColorStop(o, i[o]); + return e.fillStyle = t, + e.fillRect(0, 0, 256, 1), + new en(A) + } + }]), + A + }(), + EE = function () { + function A(e, t) { + cc(this, A), + this.heatSpheres = [], + this.viewer = t, + this.maxHeatValue = 1 / 0, + this.minHeatValue = -1 / 0, + this._animating = !1, + this._lastAnimateTime = void 0, + this._localTime = 0, + this._duration = 2e3, + this._init(e) + } + return dc(A, [{ + key: "getColorIndexAndValueOfHeatValue", + value: function (e) { + A.colorBoard || (A.colorBoard = this._createColorBoard()); + var t = (Math.max(this.minHeatValue, Math.min(e, this.maxHeatValue)) - this.minHeatValue) / (this.maxHeatValue - this.minHeatValue) * 255, + i = 4 * (t = Math.round(t)); + return { + color: new LA(A.colorBoard[i] / 255, A.colorBoard[i + 1] / 255, A.colorBoard[i + 2] / 255), + index: t + } + } + }, { + key: "updateHeatmap", + value: function (A) { + this.removeHeatmap(), + this._init(A), + this.startAnimation(this._duration) + } + }, { + key: "startAnimation", + value: function (A) { + var e = this; + this._animating || (this._animating = !0, + A && (this._duration = A), + requestAnimationFrame((function (A) { + return e._animate(A) + }))) + } + }, { + key: "stopAnimation", + value: function () { + this._animating = !1, + this._lastAnimateTime = void 0, + this._localTime = 0 + } + }, { + key: "removeHeatmap", + value: function () { + var A = this; + this.stopAnimation(), + this.heatSpheres.forEach((function (e) { + A.viewer.removeExternalObjectByName(e.uuid) + })) + } + }, { + key: "_animate", + value: function (e) { + var t = this, + i = this._lastAnimateTime ? e - this._lastAnimateTime : 0; + if (!this._lastAnimateTime || i > 100) { + this._localTime += i / this._duration, + 1 > this._localTime || (this._localTime = 0); + var o = this._easeOutSine(this._localTime); + this.heatSpheres.forEach((function (e) { + e.scale.set(o, o, o), + e.updateMatrixWorld(!0); + var i = e.userData._heatColorIndex; + i = 4 * Math.round(i * (1 - t._localTime)), + e.material.color.setRGB(A.colorBoard[i] / 255, A.colorBoard[i + 1] / 255, A.colorBoard[i + 2] / 255), + e.material.needsUpdate = !0 + })), + this.viewer.render(), + this._lastAnimateTime = e + } + this._animating && requestAnimationFrame((function (A) { + return t._animate(A) + })) + } + }, { + key: "_init", + value: function (A) { + var e = A.data; + if (this.maxHeatValue = e.max ? e.max : 1 / 0, + this.minHeatValue = e.min ? e.min : -1 / 0, + this._sphereOpacity = e.alpha ? e.alpha : .7, + this.maxHeatValue === 1 / 0 || this.minHeatValue === -1 / 0) + for (var t = 0, i = e.data.length; i > t; t += 1) { + var o = e.data[t]; + o.value > this.maxHeatValue && (this.maxHeatValue = o.value), + this.minHeatValue > o.value && (this.minHeatValue = o.value) + } + for (var n = 0, r = e.data.length; r > n; n += 1) + this._addHeatPoint(e.data[n]) + } + }, { + key: "_addHeatPoint", + value: function (A) { + var e = A, + t = e.radius ? e.radius : 1e3, + i = 10 * Math.log10(t), + o = new er(t, i, i), + n = this.getColorIndexAndValueOfHeatValue(e.value), + r = n.index, + a = new Ue(o, new xr({ + color: n.color, + depthTest: !0, + transparent: !0, + opacity: this._sphereOpacity + })); + a.position.set(e.point.x, e.point.y, e.point.z), + a.updateMatrixWorld(!0), + a.userData._heatValue = e.value, + a.userData._heatColorIndex = r, + a.disPickable = !0, + this.viewer.disableComponentsSelectionByKey(a.uuid), + this.heatSpheres.push(a), + this.viewer.addExternalObject(a.uuid, a) + } + }, { + key: "_createColorBoard", + value: function () { + var A = document.createElement("canvas"); + A.width = 256, + A.height = 1; + var e = A.getContext("2d"), + t = e.createLinearGradient(0, 0, 256, 1), + i = { + 0: "#44f", + .1: "#0ff", + .2: "#0f0", + .4: "#ff0", + 1: "#f00" + }; + for (var o in i) + t.addColorStop(o, i[o]); + return e.fillStyle = t, + e.fillRect(0, 0, 256, 1), + e.getImageData(0, 0, 256, 1).data + } + }, { + key: "_easeOutCubic", + value: function (A) { + return 1 - Math.pow(1 - A, 3) + } + }, { + key: "_easeOutSine", + value: function (A) { + return Math.sin(A * Math.PI / 2) + } + }, { + key: "_easeInCubic", + value: function (A) { + return A * A * A + } + }]), + A + }(), + BE = function () { + function A(e) { + cc(this, A), + this.viewer = e.viewer3D, + this.mapCollection = {} + } + return dc(A, [{ + key: "createHeatmap", + value: function (A) { + var e = ((new Date).getTime() * (Math.random() + 1)).toString(36).slice(0, 8), + t = new CE({ + viewer3D: this.viewer, + id: e + }), + i = fE(A); + return i.data.data.forEach((function (A) { + A.point = new y(A.point.x, A.point.y, A.point.z) + })), + i.boundary = i.boundary.map((function (A) { + return new y(A.x, A.y, A.z) + })), + t.addHeatmap(e, i) ? (this.mapCollection[e] = t, { + code: "success", + id: e + }) : { + code: "error", + message: "输入的点不共面" + } + } + }, { + key: "updateHeatmap", + value: function (A) { + var e = this.mapCollection[A.id]; + if (e && e.updateHeatmap) + return e.updateHeatmap(A) + } + }, { + key: "removeHeatmap", + value: function (A) { + return !!this.mapCollection[A] && (this.mapCollection[A].removeHeatmap(A), + delete this.mapCollection[A], + !0) + } + }, { + key: "createHeatmap3D", + value: function (A) { + var e = ((new Date).getTime() * (Math.random() + 1)).toString(36).slice(0, 8), + t = new vE({ + viewer3D: this.viewer, + id: e + }), + i = fE(A); + return i.data.data.forEach((function (A) { + A.point = new y(A.point.x, A.point.y, A.point.z) + })), + i.boundary = i.boundary.map((function (A) { + return new y(A.x, A.y, A.z) + })), + t.addHeatmap(e, i) ? (this.mapCollection[e] = t, { + code: "success", + id: e, + map: t + }) : { + code: "error", + message: "输入的点不共面" + } + } + }, { + key: "createSphereHeatmap", + value: function (A) { + if (A.data && A.data.data) { + var e = ((new Date).getTime() * (Math.random() + 1)).toString(36).slice(0, 8), + t = new EE(A, this.viewer); + return t.startAnimation(5e3), + this.mapCollection[e] = t, { + code: "success", + id: e, + map: t + } + } + return { + code: "error", + message: "参数错误" + } + } + }, { + key: "createSphereColorOverrideHeatmap", + value: function (A) { + if (A.data && A.data.data) { + if (A.data.data.length > 150) + return { + code: "error", + message: "热力源个数不能超过150" + }; + var e = new IE(A, this.viewer), + t = ((new Date).getTime() * (Math.random() + 1)).toString(36).slice(0, 8); + return this.mapCollection[t] = e, + e.show(), { + code: "success", + id: t, + map: e + } + } + return { + code: "error", + message: "参数错误" + } + } + }]), + A + }(), + xE = function (A, e) { + Xo.call(this, A, e), + this.pointIds = [] + }; + (xE.prototype = Object.create(Xo.prototype)).constructor = xE, + xE.prototype.raycast = function () { + var A = new M, + e = new CA, + t = new cA; + return function (i, o) { + var n = this, + r = this.geometry, + a = this.matrixWorld, + s = this.size, + l = i.camera || i._camera, + c = i.viewportSize.height, + h = this.pointIds; + + function d(e, t) { + var i = e.clone(); + return i.applyMatrix4(a), + i.project(l), + i.y += t / c, + i.unproject(l), + i.applyMatrix4(A), + i + } + A.getInverse(a), + null === r.boundingSphere && r.computeBoundingSphere(), + t.copy(r.boundingSphere); + var p = t.center, + g = d(p, s), + u = g.distanceToSquared(p); + if (t.radius += u, + t.center.copy(g), + t.applyMatrix4(a), + !1 !== i.ray.intersectsSphere(t)) { + e.copy(i.ray).applyMatrix4(A); + var f = new y, + m = s; + if (r.isBufferGeometry) { + var C = r.index, + v = r.attributes, + I = v.position.array, + E = !1, + B = null; + if (v.attrSize && (E = !0, + B = v.attrSize.array), + null !== C) + for (var x = C.array, S = 0, w = x.length; w > S; S += 1) { + var M = x[S]; + f.fromArray(I, 3 * M), + E && (m = B[M]), + F(f, m, M) + } + else { + S = 0; + for (var b = I.length / 3; b > S; S += 1) + f.fromArray(I, 3 * S), + E && (m = B[S]), + F(f, m, S) + } + } else { + var U = r.vertices; + for (S = 0, + b = U.length; b > S; S += 1) + F(U[S], m, S) + } + } + + function F(A, t, r) { + var s = d(A, t), + l = s.distanceToSquared(A), + c = e.distanceSqToPoint(s); + if (l > c) { + var p = e.closestPointToPoint(s); + p.applyMatrix4(a); + var g = i.ray.origin.distanceTo(p); + if (i.near > g || g > i.far) + return; + o.push({ + id: h[r], + distance: g, + distanceToRay: Math.sqrt(c), + point: p.clone(), + index: r, + face: null, + object: n + }) + } + } + } + }(), + xE.prototype.setAttributeSize = function (A, e) { + var t = this.geometry.attributes; + t.attrSize && (t.attrSize.array[A] = e, + t.attrSize.needsUpdate = !0) + }, + xE.prototype.getAttributeSize = function (A) { + var e = this.geometry.attributes, + t = this.size; + return e.attrSize && (t = e.attrSize.array[A]), + t + }; + var SE = ["attribute vec3 customColor;", "attribute float customOpacity;", "attribute float customSize;", "attribute float customAngle;", "attribute float customVisible;", "varying vec4 vColor;", "varying float vAngle;", "void main()", "{", "if ( customVisible > 0.5 )", "vColor = vec4( customColor, customOpacity );", "else", "vColor = vec4(0.0, 0.0, 0.0, 0.0);", "vAngle = customAngle;", "vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );", "gl_PointSize = customSize * ( 3000.0 / length( mvPosition.xyz ) );", "gl_Position = projectionMatrix * mvPosition;", "}"].join("\n"), + wE = ["uniform sampler2D texture;", "varying vec4 vColor;", "varying float vAngle;", "void main()", "{", "gl_FragColor = vColor;", "float c = cos(vAngle);", "float s = sin(vAngle);", "vec2 rotatedUV = vec2(c * (gl_PointCoord.x - 0.5) + s * (gl_PointCoord.y - 0.5) + 0.5,", "c * (gl_PointCoord.y - 0.5) - s * (gl_PointCoord.x - 0.5) + 0.5);", "vec4 rotatedTexture = texture2D( texture, rotatedUV );", "gl_FragColor = gl_FragColor * rotatedTexture;", "}"].join("\n"); + + function ME(A, e) { + this.times = A || [], + this.values = e || [] + } + + function bE() { + this.position = new y, + this.velocity = new y, + this.acceleration = new y, + this.angle = 0, + this.angleVelocity = 0, + this.angleAcceleration = 0, + this.size = 16, + this.color = new LA, + this.opacity = 1, + this.age = 0, + this.alive = 0 + } + + function UE() { + this.positionStyle = 1, + this.positionBase = new y, + this.positionSpread = new y, + this.positionRadius = 0, + this.velocityStyle = 1, + this.velocityBase = new y, + this.velocitySpread = new y, + this.speedBase = 0, + this.speedSpread = 0, + this.accelerationBase = new y, + this.accelerationSpread = new y, + this.angleBase = 0, + this.angleSpread = 0, + this.angleVelocityBase = 0, + this.angleVelocitySpread = 0, + this.angleAccelerationBase = 0, + this.angleAccelerationSpread = 0, + this.sizeBase = 0, + this.sizeSpread = 0, + this.sizeTween = new ME, + this.colorBase = new y(0, 1, .5), + this.colorSpread = new y(0, 0, 0), + this.colorTween = new ME, + this.opacityBase = 1, + this.opacitySpread = 0, + this.opacityTween = new ME, + this.blendStyle = 1, + this.particleArray = [], + this.particlesPerSecond = 100, + this.particleDeathAge = 1, + this.emitterAge = 0, + this.emitterAlive = !0, + this.emitterDeathAge = 60, + this.particleCount = this.particlesPerSecond * Math.min(this.particleDeathAge, this.emitterDeathAge) + } + ME.prototype.lerp = function (A) { + for (var e = 0, t = this.times.length; t > e && A > this.times[e];) + e += 1; + if (0 === e) + return this.values[0]; + if (e === t) + return this.values[t - 1]; + var i = (A - this.times[e - 1]) / (this.times[e] - this.times[e - 1]); + return this.values[0] instanceof y ? this.values[e - 1].clone().lerp(this.values[e], i) : this.values[e - 1] + i * (this.values[e] - this.values[e - 1]) + }, + bE.prototype.update = function (A) { + if (this.position.add(this.velocity.clone().multiplyScalar(A)), + this.velocity.add(this.acceleration.clone().multiplyScalar(A)), + this.angle += .01745329251 * this.angleVelocity * A, + this.angleVelocity += .01745329251 * this.angleAcceleration * A, + this.age += A, + this.sizeTween.times.length > 0 && (this.size = this.sizeTween.lerp(this.age)), + this.colorTween.times.length > 0) { + var e = this.colorTween.lerp(this.age); + this.color = (new LA).setHSL(e.x, e.y, e.z) + } + this.opacityTween.times.length > 0 && (this.opacity = this.opacityTween.lerp(this.age)) + }, + UE.prototype.setValues = function (A) { + if (void 0 !== A) { + for (var e in this.sizeTween = new ME, + this.colorTween = new ME, + this.opacityTween = new ME, + A) + this[e] = A[e]; + this.particleArray = [], + this.emitterAlive = !0, + this.particleCount = this.particlesPerSecond * Math.min(this.particleDeathAge, this.emitterDeathAge), + this.particleGeometry = new he, + this.particleMaterial = new Pe({ + uniforms: { + texture: { + value: this.particleTexture + } + }, + vertexShader: SE, + fragmentShader: wE, + transparent: !0, + blending: 1, + depthWrite: !1 + }), + this.particleMesh = new xE + } + }, + UE.prototype.randomValue = function (A, e) { + return A + e * (Math.random() - .5) + }, + UE.prototype.randomVector3 = function (A, e) { + var t = new y(Math.random() - .5, Math.random() - .5, Math.random() - .5); + return (new y).addVectors(A, t.multiplyVectors(e, t)) + }, + UE.prototype.updateVector3 = function (A, e, t) { + var i = new y(Math.random() - .5, Math.random() - .5, Math.random() - .5); + A.set(0, 0, 0), + A.addVectors(e, i.multiplyVectors(t, i)) + }, + UE.prototype.createParticle = function () { + var A = new bE; + if (1 === this.positionStyle && (A.position = this.randomVector3(this.positionBase, this.positionSpread)), + 2 === this.positionStyle) { + var e = 2 * Math.random() - 1, + t = 6.2832 * Math.random(), + i = Math.sqrt(1 - e * e), + o = new y(i * Math.cos(t), i * Math.sin(t), e); + A.position = (new y).addVectors(this.positionBase, o.multiplyScalar(this.positionRadius)) + } + if (1 === this.velocityStyle && (A.velocity = this.randomVector3(this.velocityBase, this.velocitySpread)), + 2 === this.velocityStyle) { + var n = (new y).subVectors(A.position, this.positionBase), + r = this.randomValue(this.speedBase, this.speedSpread); + A.velocity = n.normalize().multiplyScalar(r) + } + A.acceleration = this.randomVector3(this.accelerationBase, this.accelerationSpread), + A.angle = this.randomValue(this.angleBase, this.angleSpread), + A.angleVelocity = this.randomValue(this.angleVelocityBase, this.angleVelocitySpread), + A.angleAcceleration = this.randomValue(this.angleAccelerationBase, this.angleAccelerationSpread), + A.size = this.randomValue(this.sizeBase, this.sizeSpread); + var a = this.randomVector3(this.colorBase, this.colorSpread); + return A.color = (new LA).setHSL(a.x, a.y, a.z), + A.opacity = this.randomValue(this.opacityBase, this.opacitySpread), + A.age = 0, + A.alive = 0, + A.sizeTween = this.sizeTween, + A.colorTween = this.colorTween, + A.opacityTween = this.opacityTween, + A + }, + UE.prototype.updateParticle = function (A) { + if (1 === this.positionStyle && this.updateVector3(A.position, this.positionBase, this.positionSpread), + 2 === this.positionStyle) { + var e = 2 * Math.random() - 1, + t = 6.2832 * Math.random(), + i = Math.sqrt(1 - e * e), + o = new y(i * Math.cos(t), i * Math.sin(t), e); + A.position = (new y).addVectors(this.positionBase, o.multiplyScalar(this.positionRadius)) + } + if (1 === this.velocityStyle && this.updateVector3(A.velocity, this.velocityBase, this.velocitySpread), + 2 === this.velocityStyle) { + var n = (new y).subVectors(A.position, this.positionBase), + r = this.randomValue(this.speedBase, this.speedSpread); + A.velocity = n.normalize().multiplyScalar(r) + } + this.updateVector3(A.acceleration, this.accelerationBase, this.accelerationSpread), + A.angle = this.randomValue(this.angleBase, this.angleSpread), + A.angleVelocity = this.randomValue(this.angleVelocityBase, this.angleVelocitySpread), + A.angleAcceleration = this.randomValue(this.angleAccelerationBase, this.angleAccelerationSpread), + A.size = this.randomValue(this.sizeBase, this.sizeSpread); + var a = this.randomVector3(this.colorBase, this.colorSpread); + A.color = A.color.setHSL(a.x, a.y, a.z), + A.opacity = this.randomValue(this.opacityBase, this.opacitySpread), + A.age = 0, + A.alive = 0 + }, + UE.prototype.initialize = function () { + this.sortArray = [], + this.positions = new Float32Array(3 * this.particleCount), + this.customVisible = new Float32Array(this.particleCount), + this.customSize = new Float32Array(this.particleCount), + this.customColor = new Float32Array(3 * this.particleCount), + this.customOpacity = new Float32Array(this.particleCount), + this.maxSize = 200; + for (var A = 0; this.particleCount > A; A += 1) + this.particleArray[A] = this.createParticle(), + this.positions[3 * A] = this.particleArray[A].position.x, + this.positions[3 * A + 1] = this.particleArray[A].position.y, + this.positions[3 * A + 2] = this.particleArray[A].position.z, + this.customVisible[A] = this.particleArray[A].alive, + this.customColor[3 * A] = this.particleArray[A].color.r, + this.customColor[3 * A + 1] = this.particleArray[A].color.g, + this.customColor[3 * A + 2] = this.particleArray[A].color.b, + this.customOpacity[A] = this.particleArray[A].opacity, + this.customSize[A] = this.particleArray[A].size, + this.maxSize = this.maxSize > this.customSize[A] ? this.maxSize : this.customSize[A]; + this.particleMaterial.blending = this.blendStyle, + this.particleGeometry.setAttribute("position", new YA(this.positions, 3)), + this.particleGeometry.setAttribute("customColor", new YA(this.customColor, 3)), + this.particleGeometry.setAttribute("customVisible", new YA(this.customVisible, 1)), + this.particleGeometry.setAttribute("customSize", new YA(this.customSize, 1)), + this.particleGeometry.setAttribute("customOpacity", new YA(this.customOpacity, 1)), + this.particleMesh = new xE(this.particleGeometry, this.particleMaterial), + this.particleMesh.dynamic = !0, + this.particleMesh.size = this.maxSize, + this.particleMesh.renderOrder = -1 + }, + UE.prototype.update = function (A) { + A = void 0 === A ? .015 : A; + for (var e = [], t = 0; this.particleCount > t; t += 1) + this.particleArray[t].alive && (this.particleArray[t].update(A), + this.particleArray[t].age > this.particleDeathAge && (this.particleArray[t].alive = 0, + e.push(t)), + this.customVisible[t] = this.particleArray[t].alive, + this.customOpacity[t] = this.particleArray[t].opacity, + this.customSize[t] = this.particleArray[t].size, + this.customColor[3 * t] = this.particleArray[t].color.r, + this.customColor[3 * t + 1] = this.particleArray[t].color.g, + this.customColor[3 * t + 2] = this.particleArray[t].color.b, + this.positions[3 * t] = this.particleArray[t].position.x, + this.positions[3 * t + 1] = this.particleArray[t].position.y, + this.positions[3 * t + 2] = this.particleArray[t].position.z, + this.maxSize = this.maxSize > this.customSize[t] ? this.maxSize : this.customSize[t]); + if (this.particleGeometry.getAttribute("customVisible").needsUpdate = !0, + this.particleGeometry.getAttribute("customOpacity").needsUpdate = !0, + this.particleGeometry.getAttribute("customSize").needsUpdate = !0, + this.particleGeometry.getAttribute("customColor").needsUpdate = !0, + this.particleGeometry.getAttribute("position").needsUpdate = !0, + this.emitterAlive) { + var i = Math.round(this.particlesPerSecond * (this.emitterAge + 0)), + o = Math.round(this.particlesPerSecond * (this.emitterAge + A)); + o > this.particleCount && (o = this.particleCount); + for (t = i; o > t; t += 1) + this.particleArray[t].alive = 1; + for (var n = 0; e.length > n; n += 1) { + this.updateParticle(this.particleArray[t = e[n]]), + this.particleArray[t].alive = 1, + this.positions[3 * t] = this.particleArray[t].position.x, + this.positions[3 * t + 1] = this.particleArray[t].position.y, + this.positions[3 * t + 2] = this.particleArray[t].position.z + } + this.emitterAge += A + } + }, + UE.prototype.setScale = function (A) { + for (var e = 0, t = this.sizeTween.values.length; t > e; e += 1) + this.sizeTween.values[e] = this.sizeTween.values[e] * A; + this.maxSize *= A + }, + UE.prototype.initializeSizetween = function (A) { + for (var e = 0, t = this.sizeTween.values.length; t > e; e += 1) + this.sizeTween.values[e] = this.sizeTween.values[e] * A; + for (e = 0; this.particleCount > e; e += 1) + this.particleArray[e].size *= A, + this.customSize[e] = this.particleArray[e].size, + this.maxSize = this.maxSize > this.customSize[e] ? this.maxSize : this.customSize[e]; + this.particleGeometry.getAttribute("customSize").needsUpdate = !0 + }, + UE.prototype.destroy = function () {}; + var FE = function () { + return Xi.call(this), + this.firePosition = { + x: 0, + y: 0, + z: 0 + }, + this.position.set(this.firePosition.x, this.firePosition.y, this.firePosition.z), + this.fireScale = 1, + this.type = "fire", + this.disPickable = !0, + this.autoAnimation = !0, + this._loadTexture(), + this._initialize(), + this + }; + (FE.prototype = Object.create(Xi.prototype)).constructor = Xi.prototype, + FE.prototype._initialize = function () { + this.fire = new UE, + this.fire.setValues({ + positionStyle: 1, + positionBase: new y(0, 0, 600), + positionSpread: new y(1500, 1500, 600), + velocityStyle: 1, + velocityBase: new y(0, 0, 4600), + velocitySpread: new y(1e3, 1e3, 4600), + accelerationBase: new y(0, 0, 2600), + particleTexture: this.fireParticle, + sizeTween: new ME([0, .1], [32, 200]), + opacityTween: new ME([.7, 1], [.8, 0]), + colorBase: new y(.04, 1, .4), + blendStyle: 2, + particlesPerSecond: 80, + particleDeathAge: 1.5 + }), + this.fire.initialize(), + this.smoke = new UE, + this.smoke.setValues({ + positionStyle: 1, + positionBase: new y(0, 0, 2600), + positionSpread: new y(1500, 1500, 600), + velocityStyle: 1, + velocityBase: new y(0, 0, 3600), + velocitySpread: new y(1800, 1800, 1100), + accelerationBase: new y(0, 0, 2600), + particleTexture: this.smokeParticle, + sizeTween: new ME([0, 1], [32, 200]), + opacityTween: new ME([.5, 1, 1.7], [0, .3, 0]), + colorTween: new ME([.4, 1], [new y(0, 0, 0), new y(0, 0, .2)]), + blendStyle: 1, + particlesPerSecond: 40, + particleDeathAge: 2 + }), + this.smoke.initialize(), + this.add(this.fire.particleMesh), + this.add(this.smoke.particleMesh) + }, + FE.prototype._initializeSizetween = function (A) { + this.fire.initializeSizetween(A), + this.smoke.initializeSizetween(A) + }, + FE.prototype.update = function () { + this.fire.update(), + this.smoke.update() + }, + FE.prototype.getPosition = function () { + return this.firePosition + }, + FE.prototype.setPosition = function (A) { + if (A) + if ("number" == typeof A.x) + if ("number" == typeof A.y) + if ("number" == typeof A.z) { + if (this.firePosition = A, + this.position.set(this.firePosition.x, this.firePosition.y, this.firePosition.z), + this.updateMatrixWorld(), + this.originBox) { + var e = this.originBox.clone(); + this.box = e.applyMatrix4(this.matrix), + this.levelName = null + } + } else + Bh.error("缺少参数 position.z"); + else + Bh.error("缺少参数 position.y"); + else + Bh.error("缺少参数 position.x"); + else + Bh.error("缺少参数 position") + }, + FE.prototype.getScale = function () { + return this.fireScale + }, + FE.prototype.setScale = function (A) { + this.scale.set(A, A, A), + this.updateMatrixWorld(), + this.fire.setScale(A / this.fireScale), + this.smoke.setScale(A / this.fireScale), + this.fireScale = A + }, + FE.prototype._loadTexture = function () { + var A = new Aa; + this.fireParticle = A.load("data:image/png;base64,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"), + this.smokeParticle = A.load("data:image/png;base64,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") + }; + var KE = function () { + JC.call(this), + this.type = "LineGeometry" + }; + KE.prototype = Object.assign(Object.create(JC.prototype), { + constructor: KE, + isLineGeometry: !0, + setPositions: function (A) { + for (var e = A.length - 3, t = new Float32Array(2 * e), i = 0; e > i; i += 3) + t[2 * i] = A[i], + t[2 * i + 1] = A[i + 1], + t[2 * i + 2] = A[i + 2], + t[2 * i + 3] = A[i + 3], + t[2 * i + 4] = A[i + 4], + t[2 * i + 5] = A[i + 5]; + return JC.prototype.setPositions.call(this, t), + this + }, + setColors: function (A) { + for (var e = A.length - 3, t = new Float32Array(2 * e), i = 0; e > i; i += 3) + t[2 * i] = A[i], + t[2 * i + 1] = A[i + 1], + t[2 * i + 2] = A[i + 2], + t[2 * i + 3] = A[i + 3], + t[2 * i + 4] = A[i + 4], + t[2 * i + 5] = A[i + 5]; + return JC.prototype.setColors.call(this, t), + this + }, + fromLine: function (A) { + var e = A.geometry; + return e.isGeometry ? this.setPositions(e.vertices) : e.isBufferGeometry && this.setPositions(e.position.array), + this + }, + copy: function () { + return this + } + }); + var QE = function (A, e) { + XC.call(this), + this.type = "Line2", + this.geometry = void 0 !== A ? A : new KE, + this.material = void 0 !== e ? e : new YC({ + color: 16777215 * Math.random() + }) + }; + QE.prototype = Object.assign(Object.create(XC.prototype), { + constructor: QE, + isLine2: !0, + copy: function () { + return this + } + }); + + function RE(A) { + return "symbol" == typeof A || Zv(A) && "[object Symbol]" == Sv(A) + } + var TE = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + kE = /^\w*$/; + + function DE(A, e) { + if ("function" != typeof A || null != e && "function" != typeof e) + throw new TypeError("Expected a function"); + var t = function () { + var i = arguments, + o = e ? e.apply(this, i) : i[0], + n = t.cache; + if (n.has(o)) + return n.get(o); + var r = A.apply(this, i); + return t.cache = n.set(o, r) || n, + r + }; + return t.cache = new(DE.Cache || qv), + t + } + DE.Cache = qv; + var LE = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g, + NE = /\\(\\)?/g, + OE = function (A) { + var e = DE(A, (function (A) { + return 500 === t.size && t.clear(), + A + })), + t = e.cache; + return e + }((function (A) { + var e = []; + return 46 === A.charCodeAt(0) && e.push(""), + A.replace(LE, (function (A, t, i, o) { + e.push(i ? o.replace(NE, "$1") : t || A) + })), + e + })); + var VE = Cv ? Cv.prototype : void 0, + GE = VE ? VE.toString : void 0; + + function PE(A) { + if ("string" == typeof A) + return A; + if (tI(A)) + return function (A, e) { + for (var t = -1, i = null == A ? 0 : A.length, o = Array(i); ++t < i;) + o[t] = e(A[t], t, A); + return o + }(A, PE) + ""; + if (RE(A)) + return GE ? GE.call(A) : ""; + var e = A + ""; + return "0" == e && 1 / A == -1 / 0 ? "-0" : e + } + + function qE(A, e) { + return tI(A) ? A : function (A, e) { + if (tI(A)) + return !1; + var t = typeof A; + return !("number" != t && "symbol" != t && "boolean" != t && null != A && !RE(A)) || (kE.test(A) || !TE.test(A) || null != e && A in Object(e)) + }(A, e) ? [A] : OE(function (A) { + return null == A ? "" : PE(A) + }(A)) + } + + function jE(A) { + if ("string" == typeof A || RE(A)) + return A; + var e = A + ""; + return "0" == e && 1 / A == -1 / 0 ? "-0" : e + } + + function HE(A, e, t) { + var i = null == A ? void 0 : function (A, e) { + for (var t = 0, i = (e = qE(e, A)).length; null != A && i > t;) + A = A[jE(e[t++])]; + return t && t == i ? A : void 0 + }(A, e); + return void 0 === i ? t : i + } + var YE = { + height: 0, + speed: 1e3, + frameTime: 14 + }, + WE = new hp, + JE = function () { + function A(e) { + cc(this, A), + this.roadnet = {}, + this.shortestPathLineMap = {}, + this.roadNetLineMap = {}, + this.roadNetPointMap = {}, + this.roadNetInfoMap = {}, + this.roadNetEdgeMap = {}, + this.roadNetPointMap = {}, + this.mapRoadNetListByModelKey = {}, + this.mapModelKeyByRoadNetKey = {}, + this.modelInfo = {}, + this.viewer3D = e + } + return dc(A, [{ + key: "_getRoadNetListByModelKey", + value: function (A) { + var e = this, + t = this; + return new Promise((function (i, o) { + (function (A) { + var e = A.viewer3D.getViewerImpl().getModel(A.modelKey), + t = HE(e, ["loader", "url", "serverUrl"]) || HE(A, ["viewer3D", "host"], ""), + i = e.projectKey, + o = e.accessToken, + n = ""; + e.share && (n = "&share=" + e.share); + var r = { + url: "".concat(t, "/").concat(A.apiVersion || "api", "/").concat(i, "/routes/list?modelKey=").concat(A.modelKey).concat(n) + }; + return o && (r.headers = { + Authorization: o + }), + _d(r) + })({ + viewer3D: e.viewer3D, + modelKey: A + }).then((function (e) { + var n, r = t.viewer3D.getViewerImpl().getModel(A); + if (!r) + return Bh.error(A + "模型不存在"), + void o(A + "模型不存在"); + if (t.modelInfo[A] = r, + "SUCCESS" === (n = "string" == typeof e ? JSON.parse(e) : e).code) { + var a = t.mapRoadNetListByModelKey; + a[A] = {}; + for (var s = 0, l = n.data.length; l > s; s += 1) { + var c = n.data[s], + h = c.key; + a[A][h] = c, + t.roadNetInfoMap[h] = c, + t.mapModelKeyByRoadNetKey[h] = A + } + i() + } else + o(n.message) + })).catch((function () { + Bh.error("获取模型路网列表失败"), + o("获取模型路网列表失败") + })) + })) + } + }, { + key: "_getRoadNetDataByRouteKey", + value: function (A, e, t) { + var i = this, + o = this, + n = [], + r = this.mapModelKeyByRoadNetKey[A]; + if (r) + return n.push(new Promise((function (e, t) { + (function (A) { + var e = A.viewer3D.getViewerImpl().getModel(A.modelKey), + t = HE(e, ["loader", "url", "serverUrl"]) || HE(A, ["viewer3D", "host"], ""), + i = e.projectKey, + o = e.accessToken, + n = ""; + e.share && (n = "&share=" + e.share); + var r = { + url: "".concat(t, "/").concat(A.apiVersion || "api", "/").concat(i, "/routes/points?routeKey=").concat(A.routeKey).concat(n) + }; + return o && (r.headers = { + Authorization: o + }), + _d(r) + })({ + viewer3D: i.viewer3D, + routeKey: A, + modelKey: r + }).then((function (i) { + var n; + if ("SUCCESS" === (n = "string" == typeof i ? JSON.parse(i) : i).code) { + var r = o.roadNetPointMap; + r[A] = {}; + for (var a = 0, s = n.data.length; s > a; a += 1) { + var l = n.data[a]; + r[A][l.key] = l + } + e() + } else + t(n.message) + })).catch((function () { + Bh.error("获取模型路网列表失败"), + t("获取模型路网列表失败") + })) + }))), + n.push(new Promise((function (e, t) { + (function (A) { + var e = A.viewer3D.getViewerImpl().getModel(A.modelKey), + t = HE(e, ["loader", "url", "serverUrl"]) || HE(A, ["viewer3D", "host"], ""), + i = e.projectKey, + o = e.accessToken, + n = ""; + e.share && (n = "&share=" + e.share); + var r = { + url: "".concat(t, "/").concat(A.apiVersion || "api", "/").concat(i, "/routes/edges?routeKey=").concat(A.routeKey).concat(n) + }; + return o && (r.headers = { + Authorization: o + }), + _d(r) + })({ + viewer3D: i.viewer3D, + routeKey: A, + modelKey: r + }).then((function (i) { + var n; + "SUCCESS" === (n = "string" == typeof i ? JSON.parse(i) : i).code ? (o.roadNetEdgeMap[A] = n.data, + e()) : t(n.message) + })).catch((function () { + Bh.error("获取模型路网列表失败"), + t("获取模型路网列表失败") + })) + }))), + Promise.all(n); + Bh.error("模型路网未初始化") + } + }, { + key: "initRoadNetByModelKey", + value: function (A) { + var e = this; + return new Promise((function (t, i) { + e._getRoadNetListByModelKey(A).then(t).catch(i) + })) + } + }, { + key: "getRoadNetInfoListByModelKey", + value: function (A) { + return this.mapRoadNetListByModelKey[A] + } + }, { + key: "addRoadNetByKey", + value: function (A, e) { + var t = this, + i = this, + o = e.color, + n = e.width, + r = void 0 === n ? 1 : n, + a = e.block, + s = void 0 === a || a; + return new Promise((function (e, n) { + return o instanceof Xh ? "number" != typeof r ? (Bh.error("width 参数非法"), + void n("width 参数非法")) : void(i.roadNetLineMap[A] ? e() : t._getRoadNetDataByRouteKey(A).then((function () { + for (var t = i.roadNetEdgeMap[A], a = i.roadNetPointMap[A], l = [], c = 0, h = t.length; h > c; c += 1) { + var d = t[c], + p = d._from.split("/")[1], + g = d._to.split("/")[1], + u = a[p].xyz; + u || (Bh.error("点", p, "不存在"), + n("点" + p + "不存在")), + l.push.apply(l, yc(u)); + var f = a[g].xyz; + f || (Bh.error("点", g, "不存在"), + n("点" + g + "不存在")), + l.push.apply(l, yc(f)) + } + var m = new JC; + m.setPositions(l); + var C = new YC({ + color: o.getHex(), + linewidth: r / 1e3 + }); + s || (C.depthTest = !1, + C.transparent = !0); + var y = new XC(m, C); + y.matrixAutoUpdate = !1; + var v = i.mapModelKeyByRoadNetKey[A]; + if (!v) + return Bh.error("模型路网未初始化"), + void n("模型路网未初始化"); + var I = i.viewer3D.getModelMatrix(v); + y.matrix.copy(I), + i.viewer3D.getScene().add(y), + y.updateMatrixWorld(!0), + i.roadNetLineMap[A] = y, + i.viewer3D.render(), + e() + })).catch((function (A) { + n(A) + }))) : (Bh.error("color 参数非法"), + void n("color 参数非法")) + })) + } + }, { + key: "removeRoadNetByKey", + value: function (A) { + this.roadNetLineMap[A] ? (this.viewer3D.getScene().remove(this.roadNetLineMap[A]), + delete this.roadNetLineMap[A], + this.viewer3D.render()) : Bh.warn("路网", A, "不存在") + } + }, { + key: "showRoadNetByKey", + value: function (A) { + this.roadNetLineMap[A] ? (this.roadNetLineMap[A].visible = !0, + this.viewer3D.render()) : Bh.warn("路网", A, "不存在") + } + }, { + key: "hideRoadNetByKey", + value: function (A) { + this.roadNetLineMap[A] ? (this.roadNetLineMap[A].visible = !1, + this.viewer3D.render()) : Bh.warn("路网", A, "不存在") + } + }, { + key: "setRoadNetColorByKey", + value: function (A, e) { + if (this.roadNetLineMap[A]) { + if (!(e instanceof Xh)) + return void Bh.warn("color 参数非法"); + this.roadNetLineMap[A].material.color = e.getHex(), + this.viewer3D.render() + } else + Bh.warn("路网", A, "不存在") + } + }, { + key: "setRoadNetBlockByKey", + value: function (A, e) { + this.roadNetLineMap[A] ? (e ? (this.roadNetLineMap[A].material.depthTest = !0, + this.roadNetLineMap[A].material.transparent = !1) : (this.roadNetLineMap[A].material.depthTest = !1, + this.roadNetLineMap[A].material.transparent = !0), + this.viewer3D.render()) : Bh.warn("路网", A, "不存在") + } + }, { + key: "setRoadNetLineWidthByKey", + value: function (A, e) { + this.roadNetLineMap[A] ? (this.roadNetLineMap[A].material.linewidth = e / 1e3, + this.viewer3D.render()) : Bh.warn("路网", A, "不存在") + } + }, { + key: "update", + value: function () { + for (var A in this.roadNetLineMap) + if (this.roadNetLineMap.hasOwnProperty(A)) { + var e = this.roadNetLineMap[A], + t = this.viewer3D.getModelMatrix(this.mapModelKeyByRoadNetKey[A]); + e.matrix.copy(t), + e.updateMatrixWorld(!0) + } + for (var i in this.shortestPathLineMap) + if (this.shortestPathLineMap.hasOwnProperty(i)) { + var o = this.shortestPathLineMap[i], + n = this.viewer3D.getModelMatrix(o.userData.modelKey); + o.matrix.copy(n), + o.updateMatrixWorld(!0) + } + this.viewer3D.render() + } + }, { + key: "getShortestPath", + value: function (A, e, t, i) { + var o = this, + n = this; + return new Promise((function (i, r) { + o.roadNetInfoMap[A] || r({ + code: "error", + detail: "路网".concat(A, "未初始化"), + start: e, + end: t + }); + var a = o.mapModelKeyByRoadNetKey[A]; + if (!a) + return Bh.error("模型路网未初始化"), + void r("模型路网未初始化"); + (function (A) { + var e = A.viewer3D.getViewerImpl().getModel(A.modelKey), + t = HE(e, ["loader", "url", "serverUrl"]) || HE(A, ["viewer3D", "host"], ""), + i = e.projectKey, + o = e.accessToken, + n = ""; + e.share && (n = "&share=" + e.share); + var r = { + url: "".concat(t, "/").concat(A.apiVersion || "api", "/").concat(i, "/routes/shortestPath?routeKey=").concat(A.routeKey, "&start=").concat(A.start.toString(), "&end=").concat(A.end.toString()).concat(n) + }; + return o && (r.headers = { + Authorization: o + }), + _d(r) + })({ + modelKey: a, + viewer3D: n.viewer3D, + routeKey: A, + start: e, + end: t + }).then((function (o) { + var n; + "SUCCESS" === (n = "string" == typeof o ? JSON.parse(o) : o).code && i({ + code: "success", + data: { + routeKey: A, + points: n.data + }, + start: e, + end: t + }) + })).catch((function (A) { + r({ + code: "error", + detail: A, + start: e, + end: t + }) + })) + })) + } + }, { + key: "addShortestPathByPoints", + value: function (A, e) { + var t = this, + i = e.color, + o = e.width, + n = void 0 === o ? 1 : o, + r = e.block, + a = void 0 === r || r; + return new Promise((function (e, o) { + if (!A.routeKey) + return Bh.error("缺少参数routeKey"), + void o("缺少参数routeKey"); + if (!A.points) + return Bh.error("缺少参数points"), + void o("缺少参数points"); + if (!(i instanceof Xh)) + return Bh.error("color 参数非法"), + void o("color 参数非法"); + if ("number" != typeof n) + return Bh.error("width 参数非法"), + void o("width 参数非法"); + A.key || (A.key = uh.createUUID()); + for (var r = [], s = 0, l = A.points.length; l > s; s += 1) + r.push.apply(r, yc(A.points[s])); + var c = new KE; + c.setPositions(r); + var h = new YC({ + color: i.getHex(), + linewidth: n / 1e3 + }); + a || (h.depthTest = !1, + h.transparent = !0); + var d = new QE(c, h); + d.matrixAutoUpdate = !1; + var p = t.mapModelKeyByRoadNetKey[A.routeKey]; + if (!p) + return Bh.error("模型路网未初始化"), + void o("模型路网未初始化"); + var g = t.viewer3D.getModelMatrix(p); + d.matrix.copy(g), + d.userData.modelKey = p, + d.userData.routeKey = A.routeKey, + t.viewer3D.getScene().add(d), + d.updateMatrixWorld(!0), + t.shortestPathLineMap[A.key] = d, + t.viewer3D.render(), + e(A) + })) + } + }, { + key: "showShortestPathByKey", + value: function (A) { + this.shortestPathLineMap[A] ? (this.shortestPathLineMap[A].visible = !0, + this.viewer3D.render()) : Bh.warn("最短路径", A, "不存在") + } + }, { + key: "hideShortestPathByKey", + value: function (A) { + this.shortestPathLineMap[A] ? (this.shortestPathLineMap[A].visible = !1, + this.viewer3D.render()) : Bh.warn("最短路径", A, "不存在") + } + }, { + key: "removeShortestPathByKey", + value: function (A) { + this.shortestPathLineMap[A] ? (this.viewer3D.getScene().remove(this.shortestPathLineMap[A]), + delete this.shortestPathLineMap[A], + this.viewer3D.render()) : Bh.warn("最短路径", A, "不存在") + } + }, { + key: "setShortestPathColorByKey", + value: function (A, e) { + if (this.shortestPathLineMap[A]) { + if (!(e instanceof Xh)) + return void Bh.warn("color 参数非法"); + this.shortestPathLineMap[A].material.color = e.getHex(), + this.viewer3D.render() + } else + Bh.warn("最短路径", A, "不存在") + } + }, { + key: "setShortestPathBlockByKey", + value: function (A, e) { + this.shortestPathLineMap[A] ? (e ? (this.shortestPathLineMap[A].material.depthTest = !0, + this.shortestPathLineMap[A].material.transparent = !1) : (this.shortestPathLineMap[A].material.depthTest = !1, + this.shortestPathLineMap[A].material.transparent = !0), + this.viewer3D.render()) : Bh.warn("最短路径", A, "不存在") + } + }, { + key: "setShortestPathLineWidthByKey", + value: function (A, e) { + this.shortestPathLineMap[A] ? (this.shortestPathLineMap[A].material.linewidth = e / 1e3, + this.viewer3D.render()) : Bh.warn("最短路径", A, "不存在") + } + }, { + key: "roamByShortestPathData", + value: function (A, e) { + var t = this, + i = uh.extend({}, YE, e); + if (A.routeKey) + if (A.points) + if (i.speed) { + var o = t.viewer3D.getModelMatrix(t.mapModelKeyByRoadNetKey[A.routeKey]); + if (o) { + var n = this.viewer3D.getViewerImpl().camera; + ! function A(e, r) { + if (e.length - 1 > r) { + var a, s = new y(e[r][0], e[r][1], e[r][2] + i.height).applyMatrix4(o), + l = new y(e[r + 1][0], e[r + 1][1], e[r + 1][2] + i.height).applyMatrix4(o), + c = new y(e[r + 1][0], e[r + 1][1], e[r + 1][2] + i.height).applyMatrix4(o); + if (r > e.length - 3 || (a = new y(e[r + 2][0], e[r + 2][1], e[r + 2][2] + i.height).applyMatrix4(o)), + r === e.length - 2) { + var h = new y(e[r + 1][0], e[r + 1][1], e[r + 1][2] + i.height).sub(new y(e[r][0], e[r][1], e[r][2] + i.height)).setLength(.1); + a = new y(e[r + 1][0], e[r + 1][1], e[r + 1][2] + i.height).add(h).applyMatrix4(o) + } + var d = s.distanceTo(c) / i.speed * 1e3; + t.viewer3D.getViewerImpl().getControlManager().setInteractiveState(!1), + WE.from({ + animPosition: s, + animTarget: l, + animUp: n.up + }).to({ + animPosition: c, + animTarget: a, + animUp: n.up + }, d).onUpdate((function (A) { + var e = A.animPosition; + n.lookAtEXForTargetPositionUp(A.animTarget, e, n.up), + t.viewer3D.getViewerImpl().cameraControl.update(!0, !0), + i.callbackProcess && i.callbackProcess(e) + })).onComplete((function () { + n.lookAtEXForTargetPositionUp(a, c, n.up), + t.viewer3D.getViewerImpl().cameraControl.update(!0, !0), + i.callbackProcess && i.callbackProcess(c), + i.callbackFinish && i.callbackFinish(), + t.viewer3D.getViewerImpl().getControlManager().setInteractiveState(!0), + A(e, r += 1) + })).start(i.frameTime, !0) + } else + i.callbackAllFinish && i.callbackAllFinish() + }(A.points, 0) + } else + Bh.error("无法获取路径对应的模型矩阵") + } else + Bh.error("speed参数非法"); + else + Bh.error("缺少参数points"); + else + Bh.error("缺少参数routeKey") + } + }]), + A + }(), + zE = { + fontSize: 100, + color: "#ff0000", + opacity: 1, + side: 2, + transparent: !0 + }, + ZE = function () { + function A() { + cc(this, A) + } + return dc(A, [{ + key: "createMesh", + value: function (A, e) { + var t = Object.assign({}, zE, e), + i = A.generateShapes(t.text, t.fontSize), + o = new jA(t), + n = new Ue(new ar(i), o); + return t.position && this.setPos(n, t.position), + t.rotation && this.setRotation(n, t.rotation), + t.matrix && this.setMat(n, t.matrix), + n + } + }, { + key: "setPos", + value: function (A, e) { + var t; + (t = A.position).set.apply(t, yc(e)), + A.updateMatrixWorld(!0) + } + }, { + key: "setMat", + value: function (A, e) { + A.applyMatrix4(e), + A.updateMatrixWorld(!0) + } + }, { + key: "setRotation", + value: function (A, e) { + var t; + (t = A.rotation).set.apply(t, yc(e)), + A.updateMatrixWorld(!0) + } + }]), + A + }(), + XE = function () { + function A(e) { + cc(this, A), + this.fonts = {}, + this.host = e.host + } + return dc(A, [{ + key: "loadFont", + value: function (A, e) { + var t = this; + return new Promise((function (i, o) { + _d({ + type: "POST", + url: "".concat(t.host, "/api/fonts"), + headers: { + "Content-type": "application/json;charset=UTF-8" + }, + data: JSON.stringify({ + font: A, + text: e + }), + responseType: "json", + success: function (e) { + "success" === e.code.toLowerCase() ? (t.fonts[A] ? Object.assign(t.fonts[A].data.glyphs, e.data.glyphs) : (t.fonts[A] = {}, + t.fonts[A].data = e.data), + t.fonts[A].font = new za(t.fonts[A].data), + i(t.fonts[A].font)) : o(e) + }, + error: function (A, e) { + o(e) + } + }) + })) + } + }, { + key: "getFont", + value: function (A, e) { + var t = this; + return new Promise((function (i, o) { + if (t.fonts[A]) { + for (var n = e.length, r = "", a = 0; n > a; a += 1) + t.fonts[A].data.glyphs[e[a]] || (r += e[a]); + r ? t.loadFont(A, r).then(i).catch(o) : i(t.fonts[A].font) + } else + t.loadFont(A, e).then(i).catch(o) + })) + } + }]), + A + }(), + _E = function () { + function A(e) { + cc(this, A), + this.viewer = e.viewer.getViewerImpl(), + this.meshes = {}, + this.fontLib = new XE({ + host: e.viewer.host + }), + this.text = new ZE, + this.draggingId = "" + } + return dc(A, [{ + key: "addText", + value: function (A) { + var e = this; + return this.fontLib.getFont(A.fontName, A.text).then((function (t) { + var i = e.text.createMesh(t, A), + o = uh.createUUID(); + return e.meshes[o] = i, + e.viewer.getScene().add(i), + e.viewer.render(), { + code: "success", + id: o + } + })).catch((function (A) { + return { + code: "error", + err: A + } + })) + } + }, { + key: "removeText", + value: function (A) { + if (this.draggingId !== A) { + var e = this.meshes[A]; + e && (this.viewer.getScene().remove(e), + delete this.meshes[A], + this.viewer.render()) + } + } + }, { + key: "setPosition", + value: function (A, e) { + if (this.draggingId !== A) { + var t = this.meshes[A]; + t && (this.text.setPos(t, e), + this.viewer.render()) + } + } + }, { + key: "setMatrix", + value: function (A, e) { + if (this.draggingId !== A) { + var t = this.meshes[A]; + t && (this.text.setMat(t, e), + this.viewer.render()) + } + } + }, { + key: "setRotation", + value: function (A, e) { + if (this.draggingId !== A) { + var t = this.meshes[A]; + t && (this.text.setRotation(t, e), + this.viewer.render()) + } + } + }, { + key: "getTextIDs", + value: function () { + return Object.keys(this.meshes) + } + }, { + key: "dragText", + value: function (A) { + if ("" === this.draggingId) { + var e = this.meshes[A]; + e && (this.viewer.translateComponentByKey(e), + this.draggingId = A) + } + } + }, { + key: "saveDragText", + value: function () { + "" !== this.draggingId && (this.viewer.cancelTransformComponent(!1), + this.draggingId = "") + } + }]), + A + }(), + $E = function () { + function A(e) { + cc(this, A), + this.curves = {}, + this.viewer = e.viewer3D, + this.modelKey = e.modelKey + } + return dc(A, [{ + key: "getId", + value: function (A) { + return Bd(JSON.stringify(A)).slice(0, 8) + } + }, { + key: "getCurve", + value: function (A) { + return this.curves[A] + } + }, { + key: "_setCurve", + value: function (A, e) { + this.curves[A] = e + } + }, { + key: "_rmCurve", + value: function (A) { + delete this.curves[A] + } + }, { + key: "genTHREELine", + value: function (A) { + var e = A.num, + t = void 0 === e ? 100 : e, + i = A.debug, + o = void 0 !== i && i, + n = new la(A.points, A.closed, A.curveType, A.tension), + r = this.getId(A), + a = new De; + a.vertices = n.getSpacedPoints(t); + var s = new Go(a, new ko({ + color: A.color || 16777215 * Math.random(), + linewidth: 6.18, + depthTest: !0, + transparent: !1 + })); + o && (this.viewer.getViewerImpl().modelManager.getModel(this.modelKey).group.add(s), + s.updateMatrixWorld(), + this.viewer.render()); + return this._setCurve(r, { + curve: n, + num: t, + line: s + }), + r + } + }, { + key: "rmCurve", + value: function (A) { + var e = this.getCurve(A).line; + this.viewer.getViewerImpl().modelManager.getModel(this.modelKey).group.remove(e), + e.updateMatrixWorld(), + this.viewer.render(), + this._rmCurve(A) + } + }]), + A + }(), + AB = function () { + function A(e) { + cc(this, A), + this.trackSet = {}, + this.lineManager = new $E(e), + this.viewer = e.viewer3D + } + return dc(A, [{ + key: "_genLine", + value: function (A) { + return this.lineManager.genTHREELine(A) + } + }, { + key: "addTrack", + value: function (A) { + var e = ((new Date).getTime() * (Math.random() + 1)).toString(36).slice(0, 8), + t = this._genLine(A); + return this.trackSet[e] = { + componentKey: A.componentKey, + lineId: [t] + }, + e + } + }, { + key: "appendTrack", + value: function (A) { + var e = this.trackSet[A.trackId]; + if (e) { + var t = this._genLine(A); + e.lineId.push(t) + } + } + }, { + key: "removeTrack", + value: function (A) { + var e = this, + t = this.trackSet[A]; + t && (t.lineId.forEach((function (A) { + e.lineManager.rmCurve(A) + })), + delete this.trackSet[A]) + } + }, { + key: "startMove", + value: function (A) { + var e = this, + t = A.trackId, + i = A.startDir, + o = A.pointFn; + return new Promise((function (A, n) { + var r = e.trackSet[t]; + if (r) { + var a = r.lineId, + s = r.componentKey, + l = new M, + c = a.length, + h = e.lineManager.getCurve(a[0]).curve.getPoint(0), + d = e.viewer.getBoxByComponentsKey(s), + p = d.min, + g = d.max, + u = (new y).addVectors(p, g).divideScalar(2); + l.elements[12] = h.x - u.x, + l.elements[13] = h.y - u.y, + l.elements[14] = h.z - u.z, + e.viewer.componentApplyMatrix(s, l); + var m = 0, + C = new M, + v = i.clone().normalize(), + I = function i(n) { + var r = e.lineManager.getCurve(a[Math.trunc(m)]).curve.getPoint(m - Math.trunc(m)), + h = c > n ? e.lineManager.getCurve(a[Math.trunc(n)]).curve.getPoint(n - Math.trunc(n)) : e.lineManager.getCurve(a[c - 1]).curve.getPoint(1), + d = new M; + d.elements[12] = -r.x, + d.elements[13] = -r.y, + d.elements[14] = -r.z; + var p = new f, + g = new y(h.x - r.x, h.y - r.y, h.z - r.z).normalize(); + p.setFromUnitVectors(v, g), + v.applyQuaternion(p); + var u = (new M).makeRotationFromQuaternion(p), + I = new M; + I.elements[12] = h.x, + I.elements[13] = h.y, + I.elements[14] = h.z, + l.elements = C.elements, + e.viewer.componentApplyMatrix(s, I.multiply(u).multiply(d)), + m = n, + c > n ? "function" == typeof o ? requestAnimationFrame((function () { + i(o(t, n, h)) + })) : requestAnimationFrame((function () { + return i(parseFloat((n + .01).toFixed(2))) + })) : A({ + code: "success", + trackId: t + }) + }; + "function" == typeof o ? requestAnimationFrame((function () { + I(o(t, 0, h)) + })) : requestAnimationFrame((function () { + return I(.01) + })) + } else + n({ + code: "error", + message: "找不到指定轨迹" + }) + })) + } + }]), + A + }(), + eB = function (A, e) { + Ue.call(this, A); + var t = this, + i = void 0 !== (e = e || {}).textureWidth ? e.textureWidth : 512, + o = void 0 !== e.textureHeight ? e.textureHeight : 512, + n = void 0 !== e.clipBias ? e.clipBias : 0, + r = void 0 !== e.alpha ? e.alpha : 1, + s = void 0 !== e.time ? e.time : 0, + l = void 0 !== e.waterNormals ? e.waterNormals : null, + c = void 0 !== e.sunDirection ? e.sunDirection : new y(.70707, .70707, 0), + h = new LA(void 0 !== e.sunColor ? e.sunColor : 16777215), + d = new LA(void 0 !== e.waterColor ? e.waterColor : 8355711), + u = void 0 !== e.eye ? e.eye : new y(0, 0, 0), + f = void 0 !== e.distortionScale ? e.distortionScale : 20, + m = void 0 !== e.side ? e.side : 0, + C = void 0 !== e.fog && e.fog, + v = new EA, + I = new y, + E = new y, + B = new y, + x = new M, + S = new y(0, 0, -1), + w = new p, + b = new y, + U = new y, + F = new p, + K = new M, + Q = new je, + R = new g(i, o, { + minFilter: 1006, + magFilter: 1006, + format: 1022, + stencilBuffer: !1 + }); + a.isPowerOfTwo(i) && a.isPowerOfTwo(o) || (R.texture.generateMipmaps = !1); + var T = { + uniforms: Ge.merge([Xe.fog, Xe.lights, { + normalSampler: { + value: null + }, + mirrorSampler: { + value: null + }, + alpha: { + value: 1 + }, + time: { + value: 0 + }, + size: { + value: 1 + }, + distortionScale: { + value: 20 + }, + textureMatrix: { + value: new M + }, + sunColor: { + value: new LA(8355711) + }, + sunDirection: { + value: new y(.70707, .70707, 0) + }, + eye: { + value: new y + }, + waterColor: { + value: new LA(5592405) + } + }]), + vertexShader: ["uniform mat4 textureMatrix;", "uniform float time;", "varying vec4 mirrorCoord;", "varying vec4 worldPosition;", tt.fog_pars_vertex, tt.shadowmap_pars_vertex, "void main() {", " mirrorCoord = modelMatrix * vec4( position, 1.0 );", " worldPosition = mirrorCoord.xyzw;", " mirrorCoord = textureMatrix * mirrorCoord;", " vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );", " gl_Position = projectionMatrix * mvPosition;", tt.fog_vertex, tt.shadowmap_vertex, "}"].join("\n"), + fragmentShader: ["uniform sampler2D mirrorSampler;", "uniform float alpha;", "uniform float time;", "uniform float size;", "uniform float distortionScale;", "uniform sampler2D normalSampler;", "uniform vec3 sunColor;", "uniform vec3 sunDirection;", "uniform vec3 eye;", "uniform vec3 waterColor;", "varying vec4 mirrorCoord;", "varying vec4 worldPosition;", "vec4 getNoise( vec2 uv ) {", " vec2 uv0 = ( uv / 103.0 ) + vec2(time / 17.0, time / 29.0);", " vec2 uv1 = uv / 107.0-vec2( time / -19.0, time / 31.0 );", " vec2 uv2 = uv / vec2( 8907.0, 9803.0 ) + vec2( time / 101.0, time / 97.0 );", " vec2 uv3 = uv / vec2( 1091.0, 1027.0 ) - vec2( time / 109.0, time / -113.0 );", " vec4 noise = texture2D( normalSampler, uv0 ) +", " texture2D( normalSampler, uv1 ) +", " texture2D( normalSampler, uv2 ) +", " texture2D( normalSampler, uv3 );", " return noise * 0.5 - 1.0;", "}", "void sunLight( const vec3 surfaceNormal, const vec3 eyeDirection, float shiny, float spec, float diffuse, inout vec3 diffuseColor, inout vec3 specularColor ) {", " vec3 reflection = normalize( reflect( -sunDirection, surfaceNormal ) );", " float direction = max( 0.0, dot( eyeDirection, reflection ) );", " specularColor += pow( direction, shiny ) * sunColor * spec;", " diffuseColor += max( dot( sunDirection, surfaceNormal ), 0.0 ) * sunColor * diffuse;", "}", tt.common, tt.packing, tt.bsdfs, tt.fog_pars_fragment, tt.lights_pars_begin, tt.shadowmap_pars_fragment, tt.shadowmask_pars_fragment, "void main() {", " vec4 noise = getNoise( worldPosition.xz * size );", " vec3 surfaceNormal = normalize( noise.xzy * vec3( 1.5, 1.0, 1.5 ) );", " vec3 diffuseLight = vec3(0.0);", " vec3 specularLight = vec3(0.0);", " vec3 worldToEye = eye-worldPosition.xyz;", " vec3 eyeDirection = normalize( worldToEye );", " sunLight( surfaceNormal, eyeDirection, 100.0, 2.0, 0.5, diffuseLight, specularLight );", " float distance = length(worldToEye);", " vec2 distortion = surfaceNormal.xz * ( 0.001 + 1.0 / distance ) * distortionScale;", " vec3 reflectionSample = vec3( texture2D( mirrorSampler, mirrorCoord.xy / mirrorCoord.w + distortion ) );", " float theta = max( dot( eyeDirection, surfaceNormal ), 0.0 );", " float rf0 = 0.3;", " float reflectance = rf0 + ( 1.0 - rf0 ) * pow( ( 1.0 - theta ), 5.0 );", " vec3 scatter = max( 0.0, dot( surfaceNormal, eyeDirection ) ) * waterColor;", " vec3 albedo = mix( ( sunColor * diffuseLight * 0.3 + scatter ) * getShadowMask(), ( vec3( 0.1 ) + reflectionSample * 0.9 + reflectionSample * specularLight ), reflectance);", " vec3 outgoingLight = albedo;", " gl_FragColor = vec4( outgoingLight, alpha );", tt.tonemapping_fragment, tt.fog_fragment, "}"].join("\n") + }, + k = new Pe({ + fragmentShader: T.fragmentShader, + vertexShader: T.vertexShader, + uniforms: Ge.clone(T.uniforms), + transparent: 1 > r, + lights: !0, + side: m, + fog: C + }); + k.uniforms.mirrorSampler.value = R.texture, + k.uniforms.textureMatrix.value = K, + k.uniforms.alpha.value = r, + k.uniforms.time.value = s, + k.uniforms.normalSampler.value = l, + k.uniforms.sunColor.value = h, + k.uniforms.waterColor.value = d, + k.uniforms.sunDirection.value = c, + k.uniforms.distortionScale.value = f, + k.uniforms.eye.value = u, + t.material = k, + t.onBeforeRender = function (A, e, i) { + if (E.setFromMatrixPosition(t.matrixWorld), + B.setFromMatrixPosition(i.matrixWorld), + x.extractRotation(t.matrixWorld), + I.set(0, 0, 1), + I.applyMatrix4(x), + b.subVectors(E, B), + 0 >= b.dot(I)) { + b.reflect(I).negate(), + b.add(E), + x.extractRotation(i.matrixWorld), + S.set(0, 0, -1), + S.applyMatrix4(x), + S.add(B), + U.subVectors(E, S), + U.reflect(I).negate(), + U.add(E), + Q.position.copy(b), + Q.up.set(0, 1, 0), + Q.up.applyMatrix4(x), + Q.up.reflect(I), + Q.lookAt(U), + Q.far = i.far, + Q.updateMatrixWorld(), + Q.projectionMatrix.copy(i.projectionMatrix), + K.set(.5, 0, 0, .5, 0, .5, 0, .5, 0, 0, .5, .5, 0, 0, 0, 1), + K.multiply(Q.projectionMatrix), + K.multiply(Q.matrixWorldInverse), + v.setFromNormalAndCoplanarPoint(I, E), + v.applyMatrix4(Q.matrixWorldInverse), + w.set(v.normal.x, v.normal.y, v.normal.z, v.constant); + var o = Q.projectionMatrix; + F.x = (Math.sign(w.x) + o.elements[8]) / o.elements[0], + F.y = (Math.sign(w.y) + o.elements[9]) / o.elements[5], + F.z = -1, + F.w = (1 + o.elements[10]) / o.elements[14], + w.multiplyScalar(2 / w.dot(F)), + o.elements[2] = w.x, + o.elements[6] = w.y, + o.elements[10] = w.z + 1 - n, + o.elements[14] = w.w, + u.setFromMatrixPosition(i.matrixWorld); + var r = A.getRenderTarget(), + a = A.xr.enabled, + s = A.shadowMap.autoUpdate; + t.visible = !1, + A.xr.enabled = !1, + A.shadowMap.autoUpdate = !1, + A.setRenderTarget(R), + A.clear(), + A.render(e, Q), + t.visible = !0, + A.xr.enabled = a, + A.shadowMap.autoUpdate = s, + A.setRenderTarget(r) + } + } + }; + (eB.prototype = Object.create(Ue.prototype)).constructor = eB; + var tB = function (A) { + this.name = A.name || "", + this.id = A.id || "", + this.keyFrameList = [], + this.roamTime = 5, + this.interpolateType = 1, + this.fps = 50, + this.parts = 100, + this.rotateSpeed = Math.PI / this.roamTime / this.fps / 4, + this.parameters = { + segments: this.roamTime * this.fps * this.parts, + closed: !1, + curveType: "centripetal", + tension: .25 + }, + this.modificationId = 0, + this.mapDeltaAngle = {}, + this.mapDeltaOffset = {}, + this.allocateSegmentList = null, + this.positionCurve = void 0, + this.init(A) + }; + tB.prototype.init = function (A) { + this.setKeyFrameList(A.keyFrameList), + this.setParameters(A.parameters), + this.setInterpolateType(A.type), + this.setFps(A.fps), + this.setRoamTime(A.roamTime) + }, + tB.prototype.addKeyFrame = function (A) { + var e = new y(A.position.x, A.position.y, A.position.z), + t = new y(A.target.x, A.target.y, A.target.z), + i = new y(A.up.x, A.up.y, A.up.z), + o = null; + if (A.quaternion) + o = new f(A.quaternion.x, A.quaternion.y, A.quaternion.z, A.quaternion.w); + else { + var n = new M; + n.lookAt(e, t, i), + o = (new f).setFromRotationMatrix(n) + } + this.keyFrameList.push({ + position: e, + target: t, + up: i, + id: A.id, + quaternion: o, + curve: A.curve + }), + this.modificationId += 1 + }, + tB.prototype.setKeyFrameList = function (A) { + this.keyFrameList = []; + for (var e = 0, t = A.length; t > e; e += 1) + this.addKeyFrame(A[e]); + this.calRotateSpeed() + }, + tB.prototype.removeKeyFrame = function (A) { + A >= 0 && this.keyFrameList.length > A && (this.keyFrameList.splice(A, 1), + this.modificationId += 1) + }, + tB.prototype.getKeyFrames = function () { + return this.keyFrameList + }, + tB.prototype.getKeyFrameCount = function () { + return this.keyFrameList.length + }, + tB.prototype.clearFrames = function () { + this.keyFrameList = [] + }, + tB.prototype.getJumpCounts = function (A) { + var e = A / (1e3 / this.fps) * this.parts; + return e = parseInt(e, 0) + }, + tB.prototype.setRoamTime = function (A) { + this.roamTime = A, + this.setSegments(A * this.fps * this.parts), + this.calRotateSpeed() + }, + tB.prototype.calRotateSpeed = function () { + var A = this.getKeyFrames().length; + A > 1 && (this.rotateSpeed = Math.PI * (A - 1) / this.roamTime / this.fps / 4) + }, + tB.prototype.setInterpolateType = function (A) { + this.interpolateType = A || 1, + 1 === this.interpolateType && this.setSplineTension(0) + }, + tB.prototype.getInterpolateType = function () { + return this.interpolateType + }, + tB.prototype.setName = function (A) { + this.name = A + }, + tB.prototype.getName = function () { + return this.name + }, + tB.prototype.getId = function () { + return this.id + }, + tB.prototype.getKeyFramePositions = function () { + for (var A = [], e = 0, t = this.keyFrameList.length; t > e; e += 1) { + A.push(this.keyFrameList[e].position) + } + return A + }, + tB.prototype.getKeyFramePosition = function (A) { + return this.keyFrameList[A].position + }, + tB.prototype.getKeyFrameDirection = function (A) { + var e = this.keyFrameList[A]; + return e.target.clone().sub(e.position) + }, + tB.prototype.getKeyFrameTarget = function (A) { + return this.keyFrameList[A].target + }, + tB.prototype.getKeyFrameUp = function (A) { + return this.keyFrameList[A].up + }, + tB.prototype.allocateSegments = function () { + for (var A = [], e = 0, t = this.keyFrameList.length; t - 1 > e; e += 1) { + var i = this.keyFrameList[e].position; + A.push(this.keyFrameList[e + 1].position.clone().sub(i).length()) + } + for (var o = 0, n = 0, r = A.length; r > n; n += 1) + o += A[n]; + for (var a = this.getSegments(), s = 0, l = A.length; 0 !== o && l > s; s += 1) + A[s] /= o, + A[s] *= this.getSegments(), + A[s] = Math.floor(A[s]), + a -= A[s]; + for (var c = 0; a > c; c += 1) + A[c] > 0 && (A[c] += 1); + this.allocateSegmentList = A + }, + tB.prototype.getAllocateSegmentCount = function (A) { + return null === this.allocateSegmentList && this.allocateSegments(), + this.allocateSegmentList[A] + }, + tB.prototype.getSplineParam = function (A, e) { + return null === this.allocateSegmentList && this.allocateSegments(), + (A + e / this.allocateSegmentList[A]) / this.allocateSegmentList.length + }, + tB.prototype.getDeltaAngle = function (A) { + return this.mapDeltaAngle[A] + }, + tB.prototype.calculateDeltaAngle = function () { + for (var A = this.allocateSegmentList, e = 0; A.length > e; e += 1) { + var t = 0; + if (this.keyFrameList[e].quaternion && this.keyFrameList[e + 1].quaternion) { + var i = this.keyFrameList[e].quaternion, + o = this.keyFrameList[e + 1].quaternion, + n = (new f).multiplyQuaternions(o, i.clone().inverse()); + n.normalize(), + t = 2 * Math.acos(n.w) + } else { + var r = this.getKeyFrameDirection(e), + a = this.getKeyFrameDirection(e + 1); + t = r.angleTo(a) + } + var s = A[e]; + if (0 === s) { + var l = Math.floor(t / this.rotateSpeed) * this.parts; + A[e] = l, + this.mapDeltaAngle[e] = t / l + } else + this.mapDeltaAngle[e] = t / s + } + }, + tB.prototype.getRotateAxis = function (A) { + var e = this.keyFrameList[A].quaternion, + t = this.keyFrameList[A + 1].quaternion; + if (e && t) { + var i = (new f).multiplyQuaternions(t, e.clone().inverse()); + return i.normalize(), + new y(i.x, i.y, i.z).normalize() + } + var o = this.getKeyFrameDirection(A), + n = this.getKeyFrameDirection(A + 1); + return o.clone().cross(n.clone()).normalize() + }, + tB.prototype.getDeltaOffset = function (A) { + return this.mapDeltaOffset[A] + }, + tB.prototype.getPositionAtCurve = function (A, e) { + var t = this.keyFrameList[A + 1]; + if (t && t.curve) + return t.curve.getPointAt(e) + }, + tB.prototype.getPositionAtCurve = function (A, e) { + var t = this.keyFrameList[A + 1]; + if (t && t.curve) + return t.curve.getPointAt(e) + }, + tB.prototype.getLatestPositionAtCurve = function (A) { + var e = this.keyFrameList[A]; + if (e && e.curve) + return e.position + }, + tB.prototype.calculateDeltaOffset = function () { + for (var A = this.allocateSegmentList, e = this.getKeyFramePositions(), t = 0; A.length > t; t += 1) { + var i = e[t], + o = e[t + 1], + n = this.allocateSegmentList[t]; + this.mapDeltaOffset[t] = 0 === n ? new y : o.clone().sub(i).divideScalar(n) + } + }, + tB.prototype.setSplineTension = function (A) { + 0 > A || A > 1 || (this.parameters.tension = A, + this.modificationId += 1) + }, + tB.prototype.setSegments = function (A) { + this.parameters.segments = A, + this.modificationId += 1 + }, + tB.prototype.getSegments = function () { + return this.parameters.segments + }, + tB.prototype.setParameters = function (A) { + A && (this.parameters = A, + this.modificationId += 1) + }, + tB.prototype.getParameters = function () { + return this.parameters + }, + tB.prototype.setFps = function (A) { + this.fps = A || 50, + this.calRotateSpeed(), + this.modificationId += 1 + }, + tB.prototype.getFps = function () { + return this.fps + }, + tB.prototype.getModificationId = function () { + return this.modificationId + }, + tB.prototype.export = function () { + return { + name: this.name, + id: this.id, + fps: this.fps, + roamTime: this.roamTime, + type: this.interpolateType, + keyFrameList: this.keyFrameList + } + }; + var iB = function (A) { + this.viewer = A.viewer, + this.roam = null, + this.bPause = !1, + this.bContinue = !1, + this.spline = null, + this.reqid = 0, + this.playBinded = this._play.bind(this), + this.recordId = -1, + this.keyFrameIdx = 0, + this.count = -1, + this.camera = this.viewer.cameraControl.camera, + this.pausePlayCallback = [], + this.stopPlayCallback = [], + this.keyFrameCallback = [], + this.timeRecorder = { + last: 0, + pause: 0, + deltaTime: 0 + }, + this.setRoam(A.roamData) + }; + iB.prototype.setRoam = function (A) { + this.roam = A, + this.bPause = !1, + this.recordId = -1, + this.spline = null, + this.keyFrameIdx = 0, + this.count = -1 + }, + iB.prototype.updateCamera = function (A, e, t) { + this.camera.position.add(A), + this.camera.target.addVectors(this.camera.position, e), + this.camera.up.copy(t) + }, + iB.prototype.updateCameraToFrame = function (A) { + var e = this.roam.getKeyFramePosition(A), + t = this.roam.getKeyFrameTarget(A), + i = this.roam.getKeyFrameUp(A); + this.camera.position.copy(e), + this.camera.target.copy(t), + this.camera.up.copy(i) + }, + iB.prototype.reAllocate = function () { + this.recordId !== this.roam.getModificationId() && (this.roam.allocateSegments(), + this.roam.calculateDeltaOffset(), + this.roam.calculateDeltaAngle(), + this.recordId = this.roam.getModificationId()) + }, + iB.prototype._play = function () { + var A = new f, + e = new f, + t = new y, + i = new y(0, 1, 0), + o = new y; + return function () { + this.reqid = setTimeout(this.playBinded, this.roam.getFps()), + !1 === this.bContinue ? (this.bContinue = !0, + this.timeRecorder.deltaTime = this.timeRecorder.pause - this.timeRecorder.last) : this.timeRecorder.deltaTime = performance.now() - this.timeRecorder.last, + this.timeRecorder.last = performance.now(); + var n = this.roam.getJumpCounts(this.timeRecorder.deltaTime); + if (this.reAllocate(), + this.bPause) + return this.timeRecorder.pause = performance.now(), + clearTimeout(this.reqid), + this.triggerPausePlayCallback(), + this.bPause = !1, + void(this.bContinue = !1); + var r = this.roam.getKeyFrameCount(), + a = this.roam.getAllocateSegmentCount(this.keyFrameIdx); + if (0 === a) + this.keyFrameIdx += 1, + this.triggerKeyFrameCallback(this.keyFrameIdx), + this.count = -1; + else if (this.keyFrameIdx === r - 1) + this.updateCameraToFrame(this.keyFrameIdx), + this.stop(); + else if (-1 === this.count) + this.timeStart = performance.now(), + 0 === this.keyFrameIdx && this.triggerKeyFrameCallback(0), + this.updateCameraToFrame(this.keyFrameIdx), + this.count = 0; + else if (a > this.count) { + this.count + n > a && (n = a - this.count); + var s = this.count / a, + l = this.roam.keyFrameList[this.keyFrameIdx].quaternion, + c = this.roam.keyFrameList[this.keyFrameIdx + 1].quaternion; + A.copy(c), + l.equals(c) || f.slerp(l, c, A, s); + var h = this.roam.keyFrameList[this.keyFrameIdx]; + t.subVectors(h.target, h.position), + t.applyQuaternion(e.copy(l).inverse()), + t.applyQuaternion(A), + i.set(0, 1, 0), + i.applyQuaternion(A); + var d = this.roam.getPositionAtCurve(this.keyFrameIdx, s); + if (d) + this.camera.position.copy(d); + else { + var p = this.roam.getDeltaOffset(this.keyFrameIdx); + o.copy(p).multiplyScalar(n), + this.camera.position.add(o) + } + if (this.camera.target.addVectors(this.camera.position, t), + this.camera.up.copy(i), + a > this.count + n) + this.count += n; + else { + this.keyFrameIdx += 1; + var g = this.roam.getLatestPositionAtCurve(this.keyFrameIdx); + g && this.camera.position.copy(g), + this.triggerKeyFrameCallback(this.keyFrameIdx), + this.count = 0 + } + } + this.viewer.render() + } + }(), + iB.prototype.play = function () { + this.bPause = !1, + this._play() + }, + iB.prototype.pause = function () { + this.bPause = !0 + }, + iB.prototype.continue = function () { + this.bContinue = !0, + this.bPause = !1, + this._play() + }, + iB.prototype.stop = function () { + this.bPause = !1, + this.keyFrameIdx = 0, + this.count = -1, + clearTimeout(this.reqid), + this.triggerStopPlayCallback() + }, + iB.prototype.startFrom = function (A) { + for (var e = this.roam, t = e.getKeyFrameCount(), i = e.getKeyFrames(), o = 0; t > o; o += 1) + if (i[o].id === A) + return this.keyFrameIdx = o, + void(this.count = -1) + }, + iB.prototype.addKeyFrameCallback = function (A) { + this.keyFrameCallback.push(A) + }, + iB.prototype.addPausePlayCallback = function (A) { + this.pausePlayCallback.push(A) + }, + iB.prototype.addStopPlayCallback = function (A) { + this.stopPlayCallback.push(A) + }, + iB.prototype.triggerKeyFrameCallback = function (A) { + this.keyFrameCallback.forEach((function (e) { + e(A) + })) + }, + iB.prototype.triggerPausePlayCallback = function () { + this.pausePlayCallback.forEach((function (A) { + A() + })) + }, + iB.prototype.triggerStopPlayCallback = function () { + this.stopPlayCallback.forEach((function (A) { + A() + })) + }, + iB.prototype.updataSpline = function () { + var A = this.roam.getKeyFramePositions(), + e = this.roam.getParameters(); + this.spline = new la(A, e.closed, e.curveType, e.tension) + }; + var oB = function () { + this.roamList = [] + }; + oB.prototype.clear = function () { + this.roamList = [] + }, + oB.prototype.add = function (A) { + this.roamList.push(A) + }, + oB.prototype.remove = function (A) { + for (var e = 0, t = this.roamList.length; t > e; e += 1) { + if (this.roamList[e].getName() === A) + return void this.roamList.splice(e, 1) + } + }, + oB.prototype.save = function () { + return JSON.stringify(this.roamList) + }, + oB.prototype.load = function (A) { + this.clear(); + for (var e = JSON.parse(A), t = 0, i = e.length; i > t; t += 1) { + var o = new tB({ + name: e[t].name, + keyFrameList: e[t].keyFrameList, + parameters: e[t].parameters, + roamTime: e[t].roamTime, + type: e[t].type, + fps: e[t].fps + }); + this.add(o) + } + return this.roamList + }; + var nB = function (A, e) { + this.coordinateSystem = A, + this.viewer = A.viewer, + this.drawingImpl = e, + this.viewportOffset = this.viewer.domElement.getBoundingClientRect(), + this.cameraControl = this.viewer.cameraControl, + this.fillClipPlane = this.viewer.getScene().getFillClipPlane(), + this.initialize() + }; + nB.prototype.initialize = function () { + this.arrowMouseDown = !1, + this.circleXMouseDown = !1, + this.circleYMouseDown = !1, + this.firstClickDown = !0, + this.firstRotate = !0, + this.lineOut = !0, + this.arrowOut = !0, + this.translateStartPt = new s, + this.translateEndPt = new s, + this.rotateAngleA = 0, + this.rotateAngleB = 0, + this.config = this.coordinateSystem.config + }, + nB.prototype.registerArrowEvents = function () { + var A = this.drawingImpl.getDrawable("axisZ"), + e = this, + t = this.config.colors; + A.onmouseover = function () { + !0 !== e.circleXMouseDown && !0 !== e.circleYMouseDown && (e.drawingImpl.setColor("axisZ", t.highLight), + e.drawingImpl.fill("arrow", t.highLight), + e.drawingImpl.setColor("tipArcX", t.default), + e.drawingImpl.fill("cubeX", t.default), + e.drawingImpl.setColor("tipArcY", t.default), + e.drawingImpl.fill("cubeY", t.default), + e.lineOut = !1) + }, + A.onmouseout = function () { + !0 !== e.circleXMouseDown && !0 !== e.circleYMouseDown && !1 === e.arrowMouseDown && !0 === e.arrowOut && (e.drawingImpl.setColor("axisZ", t.arrow), + e.drawingImpl.fill("arrow", t.arrow), + e.drawingImpl.setColor("tipArcX", t.tipArcX), + e.drawingImpl.fill("cubeX", t.cubeX), + e.drawingImpl.setColor("tipArcY", t.tipArcY), + e.drawingImpl.fill("cubeY", t.cubeY), + e.lineOut = !0) + }, + A.onmousedown = function (A) { + e.arrowMouseDown = !0, + e.lineOut = !1; + var t = e.config.colors; + e.drawingImpl.setColor("axisZ", t.highLight), + e.drawingImpl.fill("arrow", t.highLight), + e.coordinateSystem.colorUpdate = !1, + e.translateStartPt.set(A.clientX, A.clientY) + }; + var i = this.drawingImpl.getDrawable("arrow"); + i.onmouseover = function () { + if (!0 !== e.circleXMouseDown && !0 !== e.circleYMouseDown) { + e.arrowOut = !1; + var A = e.config.colors; + e.drawingImpl.fill("arrow", A.highLight), + e.drawingImpl.setColor("axisZ", A.highLight), + e.drawingImpl.setColor("tipArcX", A.default), + e.drawingImpl.fill("cubeX", A.default), + e.drawingImpl.setColor("tipArcY", A.default), + e.drawingImpl.fill("cubeY", A.default) + } + }, + i.onmouseout = function () { + if (!0 !== e.circleXMouseDown && !0 !== e.circleYMouseDown && !1 === e.arrowMouseDown && !0 === e.lineOut) { + e.arrowOut = !0; + var A = e.config.colors; + e.drawingImpl.setColor("axisZ", A.arrow), + e.drawingImpl.fill("arrow", A.arrow), + e.drawingImpl.setColor("tipArcX", A.tipArcX), + e.drawingImpl.fill("cubeX", A.cubeX), + e.drawingImpl.setColor("tipArcY", A.tipArcY), + e.drawingImpl.fill("cubeY", A.cubeY) + } + }, + i.onmousedown = function (A) { + e.arrowMouseDown = !0, + e.arrowOut = !1; + var t = e.config.colors; + e.drawingImpl.setColor("axisZ", t.highLight), + e.drawingImpl.fill("arrow", t.highLight), + e.translateStartPt.set(A.clientX, A.clientY) + }, + document.onmousemove = function (A) { + if (!0 === e.arrowMouseDown) { + if (!(A.clientX === e.translateStartPt.x && A.clientY === e.translateStartPt.y)) { + var t = e.fillClipPlane.renderClipPlane, + i = t.normal.clone(); + i.w = t.constant; + var o = e.cameraControl.movePlane(i, A, e.translateStartPt, !1, e.fillClipPlane.position.clone()); + null !== o && e.fillClipPlane.offset(o), + e.translateStartPt.set(A.clientX, A.clientY), + e.cameraControl.update(!0) + } + e.coordinateSystem.update(); + var n = e.config.colors; + e.drawingImpl.setColor("axisZ", n.highLight), + e.drawingImpl.fill("arrow", n.highLight), + e.drawingImpl.setColor("tipArcX", n.default), + e.drawingImpl.fill("cubeX", n.default), + e.drawingImpl.setColor("tipArcY", n.default), + e.drawingImpl.fill("cubeY", n.default), + A.preventDefault(), + A.stopPropagation() + } + }, + document.onmouseup = function () { + if (!1 !== e.arrowMouseDown) { + e.arrowMouseDown = !1, + e.coordinateSystem.colorUpdate = !0; + var A = e.config.colors; + e.drawingImpl.setColor("axisZ", A.arrow), + e.drawingImpl.fill("arrow", A.arrow), + e.drawingImpl.setColor("tipArcX", A.tipArcX), + e.drawingImpl.fill("cubeX", A.cubeX), + e.drawingImpl.setColor("tipArcY", A.tipArcY), + e.drawingImpl.fill("cubeY", A.cubeY), + vc.ClippingCaps = !0, + e.viewer.render() + } + } + }, + nB.prototype.registerCircleXEvents = function () { + var A = this, + e = this.config.colors, + t = this.drawingImpl.getDrawable("tipArcX"); + t.onmousedown = function () { + A.circleXMouseDown = !0, + A.drawingImpl.setColor("axisZ", e.default), + A.drawingImpl.fill("arrow", e.default), + A.enableCircleXMovement() + }, + t.onmouseout = function () { + !1 === A.circleXMouseDown && (A.drawingImpl.setColor("axisZ", e.arrow), + A.drawingImpl.fill("arrow", e.arrow), + A.drawingImpl.setColor("tipArcY", e.tipArcY), + A.drawingImpl.fill("cubeY", e.cubeY), + A.coordinateSystem.circleToArc("tipArcX")) + }, + document.addEventListener("mouseup", (function () { + !0 === A.circleXMouseDown && (vc.ClippingCaps = !0, + A.viewer.render()), + A.circleXMouseDown = !1, + A.firstClickDown = !0, + A.firstRotate = !1, + A.lastRotateX = 0, + A.lastRotateY = 0, + A.drawingImpl.show("tipArcY", !0), + A.drawingImpl.show("axisY", !0), + A.drawingImpl.show("axisZ", !0), + A.drawingImpl.show("cubeY", !0), + A.coordinateSystem.update(), + A.drawingImpl.show("dashLineX", !1), + A.drawingImpl.setColor("axisZ", e.arrow), + A.drawingImpl.fill("arrow", e.arrow) + })) + }, + nB.prototype.registerCircleYEvents = function () { + var A = this, + e = this.config.colors, + t = this.drawingImpl.getDrawable("tipArcY"); + t.onmousedown = function () { + A.circleYMouseDown = !0, + A.drawingImpl.setColor("axisZ", e.default), + A.drawingImpl.fill("arrow", e.default), + A.enableCircleYMovement() + }, + t.onmouseout = function () { + !1 === A.circleYMouseDown && (A.drawingImpl.setColor("axisZ", e.arrow), + A.drawingImpl.fill("arrow", e.arrow), + A.coordinateSystem.circleToArc("tipArcY"), + A.drawingImpl.setColor("tipArcX", e.tipArcX), + A.drawingImpl.fill("cubeX", e.cubeX)) + }, + document.addEventListener("mouseup", (function () { + !0 === A.circleYMouseDown && (vc.ClippingCaps = !0, + A.viewer.render()), + A.circleYMouseDown = !1, + A.drawingImpl.show("tipArcX", !0), + A.drawingImpl.show("cubeX", !0), + A.coordinateSystem.update(), + A.drawingImpl.show("dashLineY", !1), + A.drawingImpl.setColor("axisZ", e.arrow), + A.drawingImpl.fill("arrow", e.arrow) + })) + }, + nB.prototype.enableCircleXMovement = function () { + var A = this, + e = this.config.colors; + document.addEventListener("mousemove", (function (t) { + if (!0 === A.circleXMouseDown) { + A.drawingImpl.show("dashLineX", !0), + A.drawingImpl.setColor("axisZ", e.default), + A.drawingImpl.fill("arrow", e.default), + vc.ClippingCaps = !1; + var i = A.fillClipPlane.normalIndex, + o = A.viewportOffset, + n = new s(t.clientX - o.left, t.clientY - o.top), + r = A.calcRotateAngleIndex(n, A.coordinateSystem.discretePointsX); + !0 === A.firstClickDown && (A.lastIndex = r); + var a = 2 * (r - A.lastIndex); + i > 3 && (a = -a), + A.drawingImpl.show("tipArcY", !1), + A.coordinateSystem.updateAxisZ(); + var l = A.fillClipPlane.renderClipPlane.normal.clone(), + c = A.coordinateSystem.getCoordinateAxis(), + h = A.config.styles; + A.coordinateSystem.drawClipPlaneCircle("tipArcZ", c.start.clone(), h.auxCircleRadius, A.coordinateSystem.dirX, l); + var d = A.coordinateSystem.drawingToCanvas(c.start.clone()), + p = A.coordinateSystem.drawingToCanvas(c.endY.clone()); + A.coordinateSystem.drawAxisY(d, p, e.highLight), + A.coordinateSystem.drawCubeX("cubeX", p, h.cubeRadius), + A.drawingImpl.show("cubeY", !1); + var g = "x"; + 2 > i && (g = "y"), + A.fillClipPlane.rotateAngleOffset(a, g), + A.coordinateSystem.backwardCoordinate(), + !0 === A.firstClickDown ? A.firstClickDown = !1 : A.lastIndex = r, + A.translateStartPt.set(t.clientX, t.clientY), + A.viewer.render(), + t.preventDefault(), + t.stopPropagation() + } + })) + }, + nB.prototype.enableCircleYMovement = function () { + var A = this, + e = this.config.colors; + document.addEventListener("mousemove", (function (t) { + if (!0 === A.circleYMouseDown) { + A.drawingImpl.show("dashLineY", !0), + A.drawingImpl.setColor("axisZ", e.default), + A.drawingImpl.fill("arrow", e.default), + vc.ClippingCaps = !1; + var i = A.fillClipPlane.normalIndex, + o = A.viewportOffset, + n = new s(t.clientX - o.left, t.clientY - o.top), + r = A.calcRotateAngleIndex(n, A.coordinateSystem.discretePointsY); + !0 === A.firstClickDown && (A.lastIndex = r); + var a = 2 * (r - A.lastIndex); + i > 3 && (a = -a), + A.drawingImpl.show("tipArcX", !1), + A.coordinateSystem.updateAxisZ(); + var l = A.fillClipPlane.renderClipPlane.normal.clone(), + c = A.coordinateSystem.getCoordinateAxis(), + h = A.config.styles; + A.coordinateSystem.drawClipPlaneCircle("tipArcZ", c.start.clone(), h.auxCircleRadius, A.coordinateSystem.dirX.clone(), l.clone()); + var d = A.coordinateSystem.drawingToCanvas(c.start.clone()), + p = A.coordinateSystem.drawingToCanvas(c.endX.clone()); + A.coordinateSystem.drawAxisX(d, p, e.highLight), + A.coordinateSystem.drawCubeY("cubeY", p, h.cubeRadius), + A.drawingImpl.show("cubeX", !1); + var g = "z"; + i > 3 && (g = "y"), + A.fillClipPlane.rotateAngleOffset(a, g), + A.coordinateSystem.backwardCoordinate(), + !0 === A.firstClickDown ? A.firstClickDown = !1 : A.lastIndex = r, + A.translateStartPt.set(t.clientX, t.clientY), + A.viewer.render(), + t.preventDefault(), + t.stopPropagation() + } + })) + }, + nB.prototype.registerTipArcXEvents = function () { + var A = this, + e = this.config.colors, + t = this.drawingImpl.getDrawable("tipArcX"); + t.onmouseover = function () { + !1 === A.circleYMouseDown && (A.coordinateSystem.arcToCircle("tipArcX"), + A.drawingImpl.setColor("tipArcY", e.default), + A.drawingImpl.fill("cubeY", e.default), + A.drawingImpl.setColor("axisZ", e.default), + A.drawingImpl.fill("arrow", e.default), + A.registerCircleXEvents()) + }, + t.onmouseout = function () { + !1 === A.circleXMouseDown && A.coordinateSystem.circleToArc("tipArcX") + } + }, + nB.prototype.registerTipArcYEvents = function () { + var A = this, + e = this.config.colors, + t = this.drawingImpl.getDrawable("tipArcY"); + t.onmouseover = function () { + !1 === A.circleXMouseDown && (A.coordinateSystem.arcToCircle("tipArcY"), + A.drawingImpl.setColor("tipArcX", e.default), + A.drawingImpl.fill("cubeX", e.default), + A.drawingImpl.setColor("axisZ", e.default), + A.drawingImpl.fill("arrow", e.default), + A.registerCircleYEvents()) + }, + t.onmouseout = function () { + !1 === A.circleYMouseDown && A.coordinateSystem.circleToArc("tipArcY") + } + }, + nB.prototype.calcRotateAngleIndex = function (A, e) { + for (var t = this.createLine(A, this.coordinateSystem.cOrigin), i = -1, o = Number.POSITIVE_INFINITY, n = 0; 90 > n; n += 1) { + var r = e[n].clone(), + a = this.disPointToLine(r, t); + o > a && (o = a, + i = n) + } + var s = 90 + i, + l = e[i].clone().distanceTo(A); + return e[s].clone().distanceTo(A) > l ? i : s + }, + nB.prototype.createLine = function (A, e) { + var t = {}; + if (A.x === e.x) + t.A = 1, + t.B = 0, + t.C = -A.x; + else { + var i = (e.y - A.y) / (e.x - A.x), + o = e.y - i * e.x; + t.A = i, + t.B = -1, + t.C = o + } + return t + }, + nB.prototype.disPointToLine = function (A, e) { + return Math.abs(e.A * A.x + e.B * A.y + e.C) / Math.sqrt(e.A * e.A + e.B * e.B) + }; + var rB = function () { + return { + colors: { + tipArcX: "#0000FF", + cubeX: "#0000FF", + tipArcY: "#FF0000", + cubeY: "#FF0000", + highLight: "#FFFF00", + tipLine: "#4dc0ff", + arrow: "#4dc0ff", + default: "#A9A9A9" + }, + styles: { + dashArray: "10 8", + originRadius: 5, + auxCircleRadius: .1, + tipLineLength: .1, + cubeRadius: 5, + axisXWidth: 2, + axisYWidth: 2, + axisZWidth: 3, + axisXLength: .1, + axisYLength: .1, + axisZLength: .14, + segments: 180, + tipArcLeftCounts: 45, + tipArcRightCounts: 45 + } + } + }, + aB = function (A, e) { + this.coordinateSystem = A, + this.viewer = e, + this.container = this.viewer.domElement.querySelector("div:first-child"), + this.mapDrawables = {}, + this.initialize() + }; + aB.prototype.initialize = function () { + this.xmlns = "http://www.w3.org/2000/svg"; + var A = document.createElement("div"); + A.style.left = "0px", + A.style.top = "0px", + A.style.width = this.container.offsetWidth + "px", + A.style.height = this.container.offsetHeight + "px", + A.style.position = "absolute", + this.group = document.createElementNS(this.xmlns, "svg"), + this.group.setAttribute("width", String(this.container.offsetWidth)), + this.group.setAttribute("height", String(this.container.offsetHeight)), + A.appendChild(this.group), + this.container.appendChild(A) + }, + aB.prototype.makeCircle = function (A, e) { + var t = this.mapDrawables; + void 0 === t[A] && (t[A] = document.createElementNS(this.xmlns, "circle"), + this.group.appendChild(t[A])); + var i = t[A]; + i.style.fill = e.color || "#FF0000", + i.setAttribute("r", String(e.radius)), + i.setAttribute("transform", "translate(" + e.center.x + "," + e.center.y + ")") + }, + aB.prototype.show = function (A, e) { + var t = this.getDrawable(A); + t && (t.style.display = e ? "block" : "none") + }, + aB.prototype.fill = function (A, e) { + this.getDrawable(A).style.fill = e ? "block" : "none" + }, + aB.prototype.makeLine = function (A, e) { + var t = this.mapDrawables; + void 0 === t[A] && (t[A] = document.createElementNS(this.xmlns, "line"), + this.group.appendChild(t[A])); + var i = t[A]; + i.setAttribute("stroke", e.color || "#000000"), + i.setAttribute("stroke-width", e.width || 3), + i.setAttribute("x1", String(e.start.x)), + i.setAttribute("y1", String(e.start.y)), + i.setAttribute("x2", String(e.end.x)), + i.setAttribute("y2", String(e.end.y)) + }, + aB.prototype.makeDashLine = function (A, e) { + this.makeLine(A, e), + this.mapDrawables[A].setAttribute("stroke-dasharray", e.dashArray) + }, + aB.prototype.makePolyline = function (A, e) { + var t = null, + i = this.mapDrawables; + void 0 === i[A] && (i[A] = document.createElementNS(this.xmlns, "polyline"), + this.group.appendChild(i[A])), + (t = i[A]).setAttribute("stroke", e.color || "#A9A9A9"), + t.setAttribute("stroke-width", e.width || 3), + t.style.fill = "none", + t.setAttribute("points", e.points) + }, + aB.prototype.makeDefs = function (A) { + var e = this.mapDrawables; + void 0 === e[A] && (e[A] = document.createElementNS(this.xmlns, "defs"), + void 0 === e.marker && (e.marker = this.makeMarker(), + e[A].appendChild(e.marker)), + this.group.appendChild(e[A])) + }, + aB.prototype.makeMarker = function () { + var A = document.createElementNS(this.xmlns, "marker"); + A.setAttribute("id", "arrow"), + A.setAttribute("viewBox", "0 0 10 10"), + A.setAttribute("refX", "5"), + A.setAttribute("refY", "5"), + A.setAttribute("markerWidth", "6"), + A.setAttribute("markerHeight", "6"), + A.setAttribute("orient", "auto-start-reverse"); + var e = document.createElementNS(this.xmlns, "path"); + return e.setAttribute("d", "M 0 0 L 10 5 L 0 10 z"), + e.style.fill = "#11DAB7", + this.mapDrawables.arrow = e, + A.appendChild(e), + A + }, + aB.prototype.getDrawable = function (A) { + return this.mapDrawables[A] + }, + aB.prototype.attach = function () { + this.getDrawable("axisZ").setAttribute("marker-end", "url(#arrow)") + }, + aB.prototype.setColor = function (A, e) { + this.getDrawable(A).setAttribute("stroke", e) + }, + aB.prototype.fill = function (A, e) { + this.getDrawable(A).style.fill = e + }, + aB.prototype.hideAll = function (A) { + this.group.style.display = !0 === A ? "none" : "block" + }, + aB.prototype.destroy = function () { + for (var A = this.group.children, e = 0; A.length > e; e += 1) + this.group.removeChild(A[e]); + this.group.parentNode.removeChild(this.group) + }; + var sB = function (A) { + this.viewer = A, + this.enable = !0, + this.cameraControl = A.cameraControl, + this.fillClipPlane = A.getScene().getFillClipPlane(), + this.container = A.domElement.querySelector("div:first-child"), + this.config = new rB, + this.drawingImpl = new aB(this, A), + this.coordinateAction = new nB(this, this.drawingImpl), + this.initialize() + }; + sB.prototype.initialize = function () { + this.enable = !0, + this.boundingBox = new Ps, + this.bRegisterArrowEvent = !1, + this.bRegisterAuxCircleEvent = !1, + this.mapDrawableName = { + ORIGIN: "origin", + AXISX: "axisX", + AXISY: "axisY", + CUBEX: "cubeX", + CUBEY: "cubeY", + AXISZ: "axisZ", + ARROW: "arrow", + DASHLINE: "dashLine", + TIPARC_X: "tipArcX", + TIPARC_Y: "tipArcY", + TIPARC_Z: "tipArcZ", + DASHLINE_X: "dashLineX", + DASHLINE_Y: "dashLineY" + } + }, + sB.prototype.saveTransform = function (A) { + this.savedCamera = A.clone() + }, + sB.prototype.drawingToCanvas = function (A) { + var e = Rd.drawingToCanvas(this.cameraControl.camera, A, this.container.offsetWidth, this.container.offsetHeight); + return new s(e.x, e.y) + }, + sB.prototype.getCoordinateAxis = function () { + var A = this.fillClipPlane.renderClipPlane.normal.clone(), + e = this.fillClipPlane.getCoordinate(), + t = e.axisY.clone(), + i = A.clone().cross(t.clone()); + this.fillClipPlane.normalIndex > 3 && (t = (i = e.axisX.clone()).clone().cross(A.clone())); + var o = this.config.styles, + n = this.fillClipPlane.position.clone(), + r = this.cameraControl.getCamera().position.clone().sub(n).length(), + a = n.clone().add(i.clone().multiplyScalar(o.axisXLength * r)), + s = n.clone().add(t.clone().multiplyScalar(o.axisYLength * r)), + l = n.clone().add(A.clone().multiplyScalar(o.axisZLength * r)); + return this.dirX = i, + this.dirY = t, { + start: n, + endX: a, + endY: s, + endZ: l + } + }, + sB.prototype.drawOrigin = function (A, e) { + this.drawingImpl.makeCircle(this.mapDrawableName.ORIGIN, { + center: A, + radius: e, + color: this.config.colors.default + }) + }, + sB.prototype.drawAxisX = function (A, e, t) { + this.drawingImpl.makeLine(this.mapDrawableName.AXISX, { + start: A, + end: e, + width: this.config.styles.axisXWidth, + color: t || this.config.colors.default + }) + }, + sB.prototype.drawAxisY = function (A, e, t) { + var i = this.config; + this.drawingImpl.makeLine(this.mapDrawableName.AXISY, { + start: A, + end: e, + width: i.styles.axisYWidth, + color: t || i.colors.default + }) + }, + sB.prototype.drawAxisZ = function (A, e) { + var t = this.config; + this.drawingImpl.makeLine(this.mapDrawableName.AXISZ, { + start: A, + end: e, + width: t.styles.axisZWidth, + color: t.colors.arrow + }), + this.drawingImpl.attach(), + !1 === this.bRegisterArrowEvent && (this.coordinateAction.registerArrowEvents(), + this.bRegisterArrowEvent = !0) + }, + sB.prototype.updateAxisZ = function () { + var A = this.getCoordinateAxis(), + e = this.drawingToCanvas(A.start.clone()), + t = this.drawingToCanvas(A.endZ.clone()); + this.drawingImpl.makeLine(this.mapDrawableName.AXISZ, { + start: e, + end: t, + color: this.config.colors.default + }) + }, + sB.prototype.drawArrow = function (A, e) { + var t = this.mapDrawableName; + this.drawingImpl.makeLine(t.AXISZ, { + start: A, + end: e + }), + this.drawingImpl.attach(), + this.drawingImpl.setColor(t.AXISZ, this.config.colors.default), + !1 === this.bRegisterArrowEvent && (this.coordinateAction.registerArrowEvents(), + this.bRegisterArrowEvent = !0) + }, + sB.prototype.drawClipPlaneCircle = function (A, e, t, i, o) { + for (var n = { + center: e.clone(), + radius: t, + normal: i.clone(), + rotateAxis: o.clone() + }, r = this.config.styles.segments, a = this.discreteCircle(n, r), s = "", l = 0; r > l; l += 1) + s += a[l].x + "," + a[l].y, + s += " "; + s += a[0].x + "," + a[0].y, + this.drawingImpl.makePolyline(A, { + points: s += " ", + color: this.config.colors.default, + width: 2 + }) + }, + sB.prototype.drawTipArc = function (A, e, t, i, o) { + var n = { + center: e.clone(), + radius: t, + normal: i.clone(), + rotateAxis: o.clone() + }, + r = this.config.styles, + a = r.tipArcRightCounts, + s = r.tipArcLeftCounts, + l = r.segments, + c = this.discreteCircle(n, l); + A === this.mapDrawableName.TIPARC_X ? (this.discretePointsX = c, + a = r.tipArcLeftCounts, + s = r.tipArcRightCounts) : this.discretePointsY = c; + for (var h = "", d = l - a - 1; l > d; d += 1) + h += c[d].x + "," + c[d].y, + h += " "; + for (var p = 0; s >= p; p += 1) + h += c[p].x + "," + c[p].y, + h += " "; + var g = { + points: h, + color: this.config.colors.tipArcX + }; + A === this.mapDrawableName.TIPARC_X ? (this.drawingImpl.makePolyline(A, g), + this.coordinateAction.registerTipArcXEvents()) : A === this.mapDrawableName.TIPARC_Y && (g.color = this.config.colors.tipArcY, + this.drawingImpl.makePolyline(A, g), + this.coordinateAction.registerTipArcYEvents()) + }, + sB.prototype.drawTipLine = function (A, e, t) { + var i = this.drawingToCanvas(e.clone()), + o = this.drawingToCanvas(t.clone()), + n = this.config; + this.drawingImpl.makeDashLine(A, { + start: i, + end: o, + color: n.colors.tipLine, + dashArray: n.styles.dashArray + }), + this.drawingImpl.show(A, !1) + }, + sB.prototype.drawCubeX = function (A, e, t) { + this.drawingImpl.makeCircle(A, { + center: e, + radius: t, + color: this.config.colors.cubeX + }) + }, + sB.prototype.drawCubeY = function (A, e, t, i) { + this.drawingImpl.makeCircle(A, { + center: e, + radius: t, + color: i || this.config.colors.cubeY + }) + }, + sB.prototype.discreteCircle = function (A, e) { + for (var t = A.center.clone(), i = A.radius, o = A.rotateAxis.clone(), n = A.normal.clone(), r = [], a = 0; e > a; a += 1) { + n.applyAxisAngle(o, 2 * Math.PI / e); + var s = t.clone().add(n.clone().multiplyScalar(i)), + l = this.drawingToCanvas(s.clone()); + r.push(l) + } + return r + }, + sB.prototype.arcToCircle = function (A) { + var e = "", + t = this.discretePointsX; + A === this.mapDrawableName.TIPARC_Y && (t = this.discretePointsY); + for (var i = 0, o = t.length; o > i; i += 1) + e += t[i].x + "," + t[i].y, + e += " "; + e += t[0].x + "," + t[0].y, + this.drawingImpl.makePolyline(A, { + points: e += " ", + color: this.config.colors.highLight + }) + }, + sB.prototype.circleToArc = function (A) { + var e = this.config.styles, + t = e.tipArcLeftCounts, + i = e.tipArcRightCounts, + o = e.segments, + n = this.discretePointsX, + r = { + color: this.config.colors.tipArcX + }; + A === this.mapDrawableName.TIPARC_Y && (n = this.discretePointsY, + r.color = this.config.colors.tipArcY, + t = e.tipArcRightCounts, + i = e.tipArcLeftCounts); + for (var a = "", s = o - t - 1; o > s; s += 1) + a += n[s].x + "," + n[s].y, + a += " "; + for (var l = 0; i >= l; l += 1) + a += n[l].x + "," + n[l].y, + a += " "; + r.points = a, + this.drawingImpl.makePolyline(A, r) + }, + sB.prototype.update = function () { + if (this.enable) { + var A = this.fillClipPlane.position.clone(), + e = this.cameraControl.getCamera().position.clone().sub(A).length(), + t = this.getCoordinateAxis(), + i = this.drawingToCanvas(t.start.clone()), + o = this.drawingToCanvas(t.endX.clone()), + n = this.drawingToCanvas(t.endY.clone()), + r = this.drawingToCanvas(t.endZ.clone()); + void 0 === this.createRefs && (this.drawingImpl.makeDefs("refs"), + this.createRefs = !0), + this.cOrigin = i.clone(), + this.drawAxisZ(i, r), + this.drawAxisX(i, o), + this.drawAxisY(i, n); + var a = this.config.styles, + s = this.mapDrawableName, + l = this.fillClipPlane.renderClipPlane.normal.clone(); + this.drawClipPlaneCircle(s.TIPARC_Z, t.start.clone(), a.auxCircleRadius * e, this.dirX, l), + this.drawTipArc(s.TIPARC_X, t.start.clone(), a.auxCircleRadius * e, l, this.dirX), + this.drawTipArc(s.TIPARC_Y, t.start.clone(), a.auxCircleRadius * e, l, this.dirY); + var c = t.start.clone().add(this.dirX.clone().multiplyScalar(a.tipLineLength * e)), + h = t.start.clone().sub(this.dirX.clone().multiplyScalar(a.tipLineLength * e)); + this.drawTipLine(s.DASHLINE_X, c, h); + var d = t.start.clone().add(this.dirY.clone().multiplyScalar(a.tipLineLength * e)), + p = t.start.clone().sub(this.dirY.clone().multiplyScalar(a.tipLineLength * e)); + this.drawTipLine(s.DASHLINE_Y, d, p), + this.drawOrigin(i, a.originRadius); + var g = this.discretePointsX[44].clone(); + this.drawCubeX(s.CUBEX, g, a.cubeRadius); + var u = this.discretePointsY[134].clone(); + this.drawCubeY(s.CUBEY, u, a.cubeRadius), + this.updateBbox() + } else + this.hide(!0) + }, + sB.prototype.hide = function (A) { + this.drawingImpl.hideAll(A) + }, + sB.prototype.enabled = function (A) { + this.enable = A + }, + sB.prototype.destroy = function () { + this.drawingImpl.destroy() + }, + sB.prototype.updateBbox = function () { + this.boundingBox.makeEmpty(); + for (var A = 0; this.discretePointsX.length > A; A += 1) { + var e = this.discretePointsX[A].clone(); + this.boundingBox.expandByPoint(e) + } + for (A = 0; this.discretePointsY.length > A; A += 1) { + e = this.discretePointsY[A].clone(); + this.boundingBox.expandByPoint(e) + } + var t = this.getCoordinateAxis(), + i = this.drawingToCanvas(t.start.clone()), + o = this.drawingToCanvas(t.endZ.clone()); + this.boundingBox.expandByPoint(i), + this.boundingBox.expandByPoint(o), + this.boundingBox.expandByScalar(5) + }, + sB.prototype.insideBoundingBox = function (A) { + return this.boundingBox.containsPoint(A.clone()) + }, + sB.prototype.backwardCoordinate = function () { + var A = this.cameraControl.camera.position, + e = this.cameraControl.camera.target.clone().sub(A.clone()).normalize(), + t = this.fillClipPlane.renderClipPlane.normal.clone(); + e.angleTo(t); + Math + }; + var lB = { + Forward: 0, + Reverse: 1 + }, + cB = { + X: 0, + Y: 4, + Z: 2 + }, + hB = function (A) { + var e = A.viewer; + if (e) { + if (e._sectionBox && e._sectionBox.exit(), + e._sectionPlane) + return e._sectionPlane; + e._sectionPlane = this, + this.id = A.id, + this._opt = A, + this.mode = A.mode, + this._plane = A.plane, + this._direction = A.direction, + this._progress = A.progress, + this.init(), + this.setPlane(A.plane) + } else + Bh.log("domElement must not be empty.") + }; + hB.prototype = { + init: function () { + this.enableCoordinate = !0; + var A = this._opt.viewer.getViewerImpl(); + this.coordinateSystem = new sB(A), + A.controlManager.enableTool(A, Pc.CLIP_FILL), + this._sectionTool = A.getScene().getFillClipPlane(), + this._sectionTool.enable(!0, !0), + this.hookEvens() + }, + hookEvens: function () { + var A = this, + e = this.coordinateSystem, + t = this._opt.viewer.getViewerImpl(); + t.getDomElement(); + t.registerEventListener(Rc.ON_CLIP_HOVER, (function (t) { + if (!1 !== A.enableCoordinate) + if (t.onClipPlane) + e.enable && (e.update(), + e.hide(!1)); + else { + var i = new s(t.event.clientX, t.event.clientY); + e.insideBoundingBox(i) ? e.hide(!1) : e.hide(!0) + } + })), + t.registerEventListener(Rc.ON_CLIP_MOUSE_DOWN, (function (A) {})), + t.registerEventListener(Rc.ON_CLIP_MOUSE_MOVE, (function (A) { + e.update() + })), + t.registerDomEventListener(Rc.ON_CONTROL_ZOOM, (function (A) { + e.update() + })) + }, + exit: function () { + var A = this._opt.viewer.getViewerImpl(), + e = A.getScene().getFillClipPlane(); + A.controlManager.disableTool(Pc.CLIP_FILL), + e.enable(!1, !1), + this.coordinateSystem.destroy(), + this._sectionTool = null, + this._opt.viewer._sectionPlane = null + }, + setProgress: function (A) { + var e = 1 - A / 50; + this._progress = A, + this._sectionTool.setProcess(e) + }, + getProgress: function () { + return 50 * (1 - this._sectionTool.getProcess()) + }, + setPlane: function (A) { + var e = lB[this._direction] + cB[A]; + this._plane = A, + this._sectionTool.changeNormal(e), + this.setProgress(this._opt.progress) + }, + getPlane: function () { + return this._plane + }, + setDirection: function (A) { + var e = lB[A] + cB[this._plane]; + this._direction = A, + this._sectionTool.changeNormal(e), + this.setProgress(this._opt.progress) + }, + getDirection: function () { + return this._direction + }, + setRotateAngle: function (A, e) { + this._sectionTool.setRotateAngle(A, e) + }, + getRotateAngle: function () { + return this._sectionTool.getRotateAngle() + }, + hidePlane: function () { + this._sectionTool.visible = !1, + this.enableCoordinate = !1, + this.coordinateSystem.hide(!0) + }, + showPlane: function () { + this._sectionTool.visible = !0, + this.enableCoordinate = !0 + }, + reset: function () { + this.setPlane(this._opt.plane), + this.setDirection(this._opt.direction), + this.setProgress(this._opt.progress) + }, + getState: function () { + return this._sectionTool.store() + }, + setState: function (A) { + this._sectionTool.restore(A) + } + }; + var dB = function (A) { + var e = this, + t = A; + "function" == typeof A.getViewerImpl && (t = A.getViewerImpl()), + this.marks = {}, + this.SelectedMark = {}, + this.components = {}, + this.allOids = []; + var i = { + id: "", + name: "mark", + scale: 20, + alwaysVisible: !1, + color: [99, 99, 99], + wordColor: [0, 0, 0], + position: [0, 0, 0] + }, + o = new s, + n = 0, + r = 0; + + function a(A) { + var e = [0, 0]; + if (A) { + for (var t = A.target, i = 0, o = 0; t.offsetParent;) + i += t.offsetLeft, + o += t.offsetTop, + t = t.offsetParent; + e[0] = A.pageX - i, + e[1] = A.pageY - o + } else + A = window.event, + e.x = A.x, + e.y = A.y; + return e + } + + function l(A) { + var i = new Dd, + n = new y(o.x / t.domElement.clientWidth * 2 - 1, -o.y / t.domElement.clientHeight * 2 + 1, .5); + i.setFromCamera(n, t.camera), + i.camera = t.camera, + i._camera = t.camera; + var r = Object.values(e.components), + a = i.intersectObjects(r); + a && a.length > 0 && e.SelectedMark !== a[0].object ? (e.SelectedMark = a[0].object, + e.dispatchEvent("updated", { + added: { + objects: e.SelectedMark + } + })) : (e.SelectedMark = {}, + e.dispatchEvent("updated", { + removed: { + objects: e.SelectedMark + } + })) + } + + function c(A) { + var e = a(A); + o.x = n = e[0], + o.y = r = e[1] + } + + function h(A) { + var e = a(A); + (e[0] > n ? 5 > e[0] - n : 5 > n - e[0]) && (e[1] > r ? 5 > e[1] - r : 5 > r - e[1]) && (o.x = n = e[0], + o.y = r = e[1], + l()) + } + + function p(A) { + o.x = n = A.changedTouches[0].clientX, + o.y = r = A.changedTouches[0].clientY + } + + function g(A) { + (A.changedTouches[0].clientX > n ? 5 > A.changedTouches[0].clientX - n : 5 > n - A.changedTouches[0].clientX) && (A.changedTouches[0].clientY > r ? 5 > A.changedTouches[0].clientY - r : 5 > r - A.changedTouches[0].clientY) && (o.x = n = A.changedTouches[0].clientX, + o.y = r = A.changedTouches[0].clientY, + l()) + } + this.active = !0, + e.domElement = t.domElement, + this.enabled = function () { + this.mousedown = t.domElement.addEventListener("mousedown", c, !1), + this.mouseup = t.domElement.addEventListener("mouseup", h, !1) + }, + this.disabled = function () { + this.mousedown = t.domElement.removeEventListener("mousedown", c, !1), + this.mouseup = t.domElement.removeEventListener("mouseup", h, !1) + }, + this.touchEnabled = function () { + this.touchstart = t.domElement.addEventListener("touchstart", p, !1), + this.touchend = t.domElement.addEventListener("touchend", g, !1) + }, + this.touchDisabled = function () { + this.touchstart = t.domElement.removeEventListener("touchstart", p, !1), + this.touchend = t.domElement.removeEventListener("touchend", g, !1) + }, + this.enabled(), + this.add = function (A, t) { + var o = Object.assign({}, i, A); + if ("" !== o.id) + for (var n = 0; e.allOids.length > n; n += 1) + if (o.id === e.allOids[n]) + return { + data: "标签id重复" + }; + (o.position.isVector3 || (o.position = new y(o.position[0], o.position[1], o.position[2])), + Array.isArray(o.color)) && (o.color = "rgb(" + o.color[0] + "," + o.color[1] + "," + o.color[2] + ")"); + Array.isArray(o.wordColor) && (o.wordColor = "rgb(" + o.wordColor[0] + "," + o.wordColor[1] + "," + o.wordColor[2] + ")"); + var r = document.createElement("canvas"); + r.width = 28 * o.name.length, + r.height = 150; + var a = r.getContext("2d"); + a.fillStyle = "rgba(255, 255, 255, 0)", + a.lineWidth = 2, + a.strokeStyle = o.color, + a.strokeRect(5, 0, r.width - 5, 30), + a.moveTo(5, 141), + a.lineTo(5, 30), + a.stroke(), + a.fillStyle = o.color, + a.beginPath(), + a.arc(5, 145, 4, 0, 2 * Math.PI), + a.fill(), + a.fillRect(10, 5, r.width - 15, 20), + a.font = "bold 18px Arial", + a.fillStyle = o.wordColor, + a.textAlign = "center", + a.fillText(o.name, r.width / 2, 20); + var s = new d(r); + s.needsUpdate = !0; + var l = new ro({ + map: s, + color: 16777215, + depthTest: o.alwaysVisible + }), + c = new vo(l); + c.center.x = 0, + c.center.y = 0, + c.scale.set(o.scale * l.map.image.width, o.scale * l.map.image.height, 1), + c.position.copy(o.position), + c.updateMatrixWorld(), + c.key = "" !== o.id ? o.id : c.uuid, + e.addObjectToScene(o, c), + "function" == typeof t && t(c.key) + }, + this.addObjectToScene = function (A, e) { + A && A.id && e && (this.components[A.id] = e, + this.allOids.push(A.id), + this.marks[A.id] = A, + t.addExternalObject(A.id, e)) + }, + this.updateMark = function (A, i) { + if (e.marks[A]) { + var o = Object.assign({}, e.marks[A], i), + n = this.components[A]; + if (n) { + if (o.position.isVector3 || (o.position = new y(o.position[0], o.position[1], o.position[2])), + Array.isArray(o.color)) + o.color = "rgb(" + o.color[0] + "," + o.color[1] + "," + o.color[2] + ")"; + if (Array.isArray(o.wordColor)) + o.wordColor = "rgb(" + o.color[0] + "," + o.color[1] + "," + o.color[2] + ")"; + var r = document.createElement("canvas"); + r.width = 28 * o.name.length, + r.height = 150; + var a = r.getContext("2d"); + a.fillStyle = "rgba(255, 255, 255, 0)", + a.lineWidth = 2, + a.strokeStyle = o.color, + a.strokeRect(5, 0, r.width - 5, 30), + a.moveTo(5, 141), + a.lineTo(5, 30), + a.stroke(), + a.fillStyle = o.color, + a.beginPath(), + a.arc(5, 145, 4, 0, 2 * Math.PI), + a.fill(), + a.fillRect(10, 5, r.width - 15, 20), + a.font = "bold 18px Arial", + a.fillStyle = o.wordColor, + a.textAlign = "center", + a.fillText(o.name, r.width / 2, 20); + var s = new d(r); + s.needsUpdate = !0; + var l = new ro({ + map: s, + color: 16777215, + depthTest: o.alwaysVisible + }); + n.material = l, + n.scale.set(o.scale * n.material.map.image.width, o.scale * n.material.map.image.height, 1), + n.position.copy(o.position), + n.updateMatrixWorld(), + t.render(), + e.marks[A] = o + } + } + }, + this.remove = function (A) { + if (null == A) + return { + data: "未选中mark" + }; + Array.isArray(A) || (A = [A]); + for (var i = 0; A.length > i; i += 1) { + var o = e.allOids.indexOf(A[i]); + e.allOids.splice(o, 1), + delete e.components[A[i]], + t.removeExternalObjectByName(A[i]) + } + }, + this.hide = function (A) { + if (null == A) + return { + data: "未选中mark" + }; + Array.isArray(A) || (A = [A]); + for (var e = null, t = 0; A.length > t; t += 1) + (e = this.components[A[t]]) && (e.visible = !1) + }, + this.show = function (A) { + var t = null; + if (A) { + Array.isArray(A) || (A = [A]); + for (var i = 0; A.length > i; i += 1) + (t = this.components[A[i]]) && (t.visible = !0) + } else + for (var o in e.components) + (t = e.components[o]) && (t.visible = !0) + }, + this.isolation = function (A) { + if (null == A) + return { + data: "未选中mark" + }; + if (e.show(), + e.allOids.length > 0) { + var t = e.allOids.concat(); + Array.isArray(A) || (A = [A]); + for (var i = 0; A.length > i; i += 1) { + var o = A[i]; + if (-1 === e.allOids.indexOf(o)) + return { + data: "mark不存在" + }; + for (var n = 0; t.length > n; n += 1) + if (o === t[n]) { + t.splice(n, 1); + break + } + } + var r = null; + for (n = 0; t.length > n; n += 1) + (r = e.components[t[n]]) && (r.visible = !1) + } + }, + this.listentoSelectMarks = function (A) { + e.addEventListener("updated", (function () { + e.SelectedMark !== {} ? A(e.SelectedMark.key ? e.SelectedMark.key : e.SelectedMark.uuid, e.SelectedMark) : A(null, null) + })) + } + }; + Object.assign(dB.prototype, Ld.prototype); + var pB = function (A) { + var e = this; + this.Marks = new H, + A.modelManager.scene.add(e.Marks), + this.SelectedMark = {}, + this.components = {}, + this.allOids = []; + var t = { + id: "", + name: "mark", + scale: 20, + width: 1, + height: 1, + alwaysVisible: !1, + useImageSize: !0, + color: "#000000", + position: [0, 0, 0] + }, + i = new s, + o = 0, + n = 0; + + function r(A) { + var e = [0, 0]; + if (A) { + for (var t = A.target, i = 0, o = 0; t.offsetParent;) + i += t.offsetLeft, + o += t.offsetTop, + t = t.offsetParent; + e[0] = A.pageX - i, + e[1] = A.pageY - o + } else + A = window.event, + e.x = A.x, + e.y = A.y; + return e + } + + function a(t) { + var o = new Dd, + n = new y(i.x / A.domElement.clientWidth * 2 - 1, -i.y / A.domElement.clientHeight * 2 + 1, .5); + o.setFromCamera(n, A.camera); + var r = o.intersectObjects(e.Marks.children); + r && r.length > 0 && e.SelectedMark !== r[0].object ? (e.SelectedMark = r[0].object, + e.dispatchEvent("updated", { + added: { + objects: e.SelectedMark + } + })) : (e.SelectedMark = {}, + e.dispatchEvent("updated", { + removed: { + objects: e.SelectedMark + } + })) + } + + function l(A) { + var e = r(A); + i.x = o = e[0], + i.y = n = e[1] + } + + function c(A) { + var e = r(A); + (e[0] > o ? 5 > e[0] - o : 5 > o - e[0]) && (e[1] > n ? 5 > e[1] - n : 5 > n - e[1]) && (i.x = o = e[0], + i.y = n = e[1], + a()) + } + + function h(A) { + i.x = o = A.changedTouches[0].clientX, + i.y = n = A.changedTouches[0].clientY + } + + function p(A) { + (A.changedTouches[0].clientX > o ? 5 > A.changedTouches[0].clientX - o : 5 > o - A.changedTouches[0].clientX) && (A.changedTouches[0].clientY > n ? 5 > A.changedTouches[0].clientY - n : 5 > n - A.changedTouches[0].clientY) && (i.x = o = A.changedTouches[0].clientX, + i.y = n = A.changedTouches[0].clientY, + a()) + } + this.active = !0, + e.domElement = A.domElement, + this.enabled = function () { + this.mousedown = A.domElement.addEventListener("mousedown", l, !1), + this.mouseup = A.domElement.addEventListener("mouseup", c, !1) + }, + this.disabled = function () { + this.mousedown = A.domElement.removeEventListener("mousedown", l, !1), + this.mouseup = A.domElement.removeEventListener("mouseup", c, !1) + }, + this.touchEnabled = function () { + this.touchstart = A.domElement.addEventListener("touchstart", h, !1), + this.touchend = A.domElement.addEventListener("touchend", p, !1) + }, + this.touchDisabled = function () { + this.touchstart = A.domElement.removeEventListener("touchstart", h, !1), + this.touchend = A.domElement.removeEventListener("touchend", p, !1) + }, + this.enabled(), + this.add = function (i, o) { + var n = Object.assign({}, t, i); + if ("" !== n.id) + for (var r = 0; e.allOids.length > r; r += 1) + if (n.id === e.allOids[r]) + return { + data: "标签id重复" + }; + var a = document.createElement("canvas"); + a.width = 24 * n.name.length, + a.height = 32; + var s = a.getContext("2d"); + s.lineWidth = 3, + s.strokeStyle = "#0000FF", + s.strokeRect(0, 0, a.width, 32), + s.fillStyle = "#FFFFFF", + s.fillRect(3, 3, a.width - 6, 26), + s.font = " bold 24px Arial", + s.fillStyle = n.color, + s.textAlign = "center", + s.fillText(n.name, a.width / 2, 26), + console.log(a.width); + var l = new d(a); + l.needsUpdate = !0; + var c = new ro({ + map: l, + color: 16777215, + depthTest: n.alwaysVisible + }), + h = new vo(c); + h.scale.set(n.scale * c.map.image.width, n.scale * c.map.image.height, 1), + n.position.isVector3 ? h.position.copy(n.position) : h.position.set(n.position[0], n.position[1], n.position[2]), + h.updateMatrixWorld(), + e.Marks.add(h), + A.render(), + "" !== n.id ? (h.key = n.id, + e.components[n.id] = h, + e.allOids.push(n.id)) : (h.key = h.uuid, + e.components[h.uuid] = h, + e.allOids.push(h.uuid)), + "function" == typeof o && o(h.key) + }, + this.updateMark = function (i, o) { + var n = Object.assign({}, t, o), + r = null; + if (e.components[i]) { + r = e.components[i]; + var a = document.createElement("canvas"); + a.width = 24 * n.name.length, + a.height = 32; + var s = a.getContext("2d"); + s.lineWidth = 3, + s.strokeStyle = "#0000FF", + s.strokeRect(0, 0, a.width, 32), + s.fillStyle = "#FFFFFF", + s.fillRect(3, 3, a.width - 6, 26), + s.font = " bold 24px Arial", + s.fillStyle = n.color, + s.textAlign = "center", + s.fillText(n.name, a.width / 2, 26); + var l = new d(a); + l.needsUpdate = !0; + var c = new ro({ + map: l, + color: 16777215, + depthTest: n.alwaysVisible + }); + r.material = c, + r.scale.set(n.scale * r.material.map.image.width, n.scale * r.material.map.image.height, 1), + n.position.isVector3 ? r.position.copy(n.position) : r.position.set(n.position[0], n.position[1], n.position[2]), + r.updateMatrixWorld(), + A.render() + } + }, + this.remove = function (A) { + if (null == A) + return { + data: "未选中mark" + }; + Array.isArray(A) || (A = [A]); + for (var t = null, i = 0; A.length > i; i += 1) { + t = e.components[A[i]]; + var o = e.allOids.indexOf(A[i]); + e.allOids.splice(o, 1), + e.Marks.remove(t) + } + }, + this.hide = function (A) { + if (null == A) + return { + data: "未选中mark" + }; + Array.isArray(A) || (A = [A]); + for (var t = null, i = 0; A.length > i; i += 1) + (t = e.components[A[i]]) && (t.visible = !1) + }, + this.show = function (A) { + var t = null; + if (A) { + Array.isArray(A) || (A = [A]); + for (var i = 0; A.length > i; i += 1) + (t = e.components[A[i]]) && (t.visible = !0) + } else + for (var o in e.components) + (t = e.components[o]) && (t.visible = !0) + }, + this.isolation = function (A) { + if (null == A) + return { + data: "未选中mark" + }; + if (e.show(), + e.allOids.length > 0) { + var t = e.allOids.concat(); + Array.isArray(A) || (A = [A]); + for (var i = 0; A.length > i; i += 1) { + var o = A[i]; + if (-1 === e.allOids.indexOf(o)) + return { + data: "mark不存在" + }; + for (var n = 0; t.length > n; n += 1) + if (o === t[n]) { + t.splice(n, 1); + break + } + } + var r = null; + for (n = 0; t.length > n; n += 1) + (r = e.components[t[n]]) && (r.visible = !1) + } + }, + this.listentoSelectMarks = function (A) { + e.addEventListener("updated", (function () { + e.SelectedMark !== {} ? A(e.SelectedMark.key ? e.SelectedMark.key : e.SelectedMark.uuid, e.SelectedMark) : A(null, null) + })) + } + }; + Object.assign(pB.prototype, Ld.prototype); + var gB = function A() { + cc(this, A), + this.type = "circle", + this.lineHeight = 2, + this.color = "#ff0000", + this.titleColor = "#000000", + this.titleBackgroundColor = "#ff0000", + this.lineTitleBackgroundColor = "#ffffff" + }, + uB = function () { + function A(e, t, i, o, n, r) { + cc(this, A), + this.lineTitle = t, + this.icon = o, + this.title = i, + this.type = e.type, + this.lineHeight = e.lineHeight, + this.color = e.color, + this.titleBackgroundColor = e.titleBackgroundColor, + this.titleColor = e.titleColor, + this.lineTitleBackgroundColor = e.lineTitleBackgroundColor, + this.id = n, + this.scenePoint = r, + this.rootDiv = void 0, + this.lineTitleDiv = void 0, + this.contentDiv = void 0, + this.lineStartPosition = { + x: 0, + y: 0 + }, + this.lineEndPosition = { + x: 100, + y: 100 + }, + this._iconSize = 30, + this._marginLeft = 10, + this._dragStart = this._dragStart.bind(this), + this._dragMove = this._dragMove.bind(this), + this._dragEnd = this._dragEnd.bind(this), + this._lastDragPoint = void 0, + this._init() + } + return dc(A, [{ + key: "_init", + value: function () { + this.rootDiv = document.createElement("div"), + this.rootDiv.style.cssText = "position:absolute; left: 0px; top: 0px;-moz-user-select: none; -webkit-user-select: none; -ms-user-select: none; -khtml-user-select: none; user-select: none;"; + var A = document.createElementNS("http://www.w3.org/2000/svg", "svg"); + A.setAttribute("xmlns", "http://www.w3.org/2000/svg"), + A.style.overflow = "visible", + this.svg = A; + var e = document.createElementNS("http://www.w3.org/2000/svg", "path"); + e.style.fill = this.color, + this.arrow = e, + this.svg.appendChild(e), + this.rootDiv.appendChild(A); + var t = document.createElement("div"); + t.style.position = "absolute", + t.style.backgroundColor = "#ffffff", + t.style.color = this.titleColor, + t.innerText = this.lineTitle, + this.lineTitleDiv = t, + this.rootDiv.appendChild(t); + var i = document.createElement("div"); + this.contentDiv = i, + this.contentDiv.addEventListener("mousedown", this._dragStart); + var o = document.createElement("div"); + if (this.titleDiv = o, + o.style.display = "inline-block", + o.style.color = this.titleColor, + o.style.whiteSpace = "nowrap", + o.style.overflow = "hidden", + o.style.textOverflow = "ellipsis", + o.style.maxWidth = "150px", + o.style.position = "absolute", + o.style.top = "50%", + this.icon ? "circle" === this.type ? (o.style.left = "50%", + o.style.transform = "translate(-50%, 5px)") : (o.style.left = "".concat(this._marginLeft + this._iconSize + 5, "px"), + o.style.transform = "translate(0px, -50%)") : (o.style.left = "50%", + o.style.transform = "translate(-50%, -50%)"), + o.innerText = this.title, + this.contentDiv.appendChild(o), + this.icon) { + var n = document.createElement("img"); + n.style.width = "".concat(this._iconSize, "px"), + n.style.height = "".concat(this._iconSize, "px"), + n.style.position = "absolute", + n.style.pointerEvents = "none", + "circle" === this.type ? (n.style.left = "50%", + n.style.top = "50%", + n.style.transform = "translate(-50%, -100%)") : (n.style.left = "".concat(this._marginLeft, "px"), + n.style.top = "50%", + n.style.transform = "translate(0px, -50%)"), + n.src = this.icon, + this.contentDiv.appendChild(n) + } + this.rootDiv.appendChild(i) + } + }, { + key: "setLineStartPosition", + value: function (A, e) { + this.lineStartPosition.x = A, + this.lineStartPosition.y = e, + this.update() + } + }, { + key: "setLineEndPosition", + value: function (A, e) { + this.lineEndPosition.x = A, + this.lineEndPosition.y = e, + this.update() + } + }, { + key: "setLineStartAndEndPoint", + value: function (A, e, t, i) { + this.lineStartPosition.x = A, + this.lineStartPosition.y = e, + this.lineEndPosition.x = t, + this.lineEndPosition.y = i, + this.update() + } + }, { + key: "update", + value: function () { + var A = this.titleDiv.getBoundingClientRect(); + A.width += 2 * this._marginLeft, + "rectangle" === this.type && (this.icon && (A.width += this._iconSize, + A.width += 5), + A.height = 40); + var e = this.lineEndPosition.x - this.lineStartPosition.x, + t = this.lineEndPosition.y - this.lineStartPosition.y, + i = Math.atan2(t, e); + i > 0 || (i += 2 * Math.PI); + var o = i / Math.PI * 180, + n = Math.sqrt(e * e + t * t); + if ("circle" === this.type) + n -= A.width / 2; + else { + var r = Math.tan(i); + Math.abs(r) > A.height / A.width ? n -= A.height / 2 / Math.abs(Math.sin(i)) : n -= A.width / 2 / Math.abs(Math.cos(i)) + } + n = Math.max(15, n); + var a = 0, + s = 0, + l = "M".concat(a, " ").concat(s); + l += "L".concat(a, " ").concat(s - this.lineHeight / 2), + l += "L".concat(a + n - 10, " ").concat(s - this.lineHeight / 2), + l += "A".concat(20, " ").concat(20, " 0 0 0 ").concat(a + n - 15, " ").concat(s - this.lineHeight / 2 - 10), + l += "L".concat(a + n, " ").concat(s), + l += "L".concat(a + n - 15, " ").concat(s + this.lineHeight / 2 + 10), + l += "A".concat(20, " ").concat(20, " 0 0 0 ").concat(a + n - 10, " ").concat(s + this.lineHeight / 2), + l += "L".concat(a, " ").concat(s + this.lineHeight / 2, "Z"), + this.arrow.setAttributeNS(null, "d", l); + var c = "translate(".concat(this.lineStartPosition.x, ", ").concat(this.lineStartPosition.y, ") rotate(").concat(o, ")"); + this.arrow.setAttributeNS(null, "transform", c); + var h = (this.lineStartPosition.y + this.lineEndPosition.y) / 2, + d = "\n left:".concat((this.lineStartPosition.x + this.lineEndPosition.x) / 2, "px;top:").concat(h, "px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width:150px;\n position:absolute;\n transform:translate(-50%, -50%);\n background-color: ").concat(this.lineTitleBackgroundColor, ";\n "); + this.lineTitleDiv.style.cssText = d; + var p = this.lineEndPosition.x, + g = this.lineEndPosition.y; + d = "\n background-color:".concat(this.titleBackgroundColor, ";\n position: absolute;\n left:").concat(p, "px;\n top:").concat(g, "px;\n transform:translate(-50%,-50%);\n width:").concat(A.width, "px;\n cursor: move;\n "), + d += "circle" === this.type ? "\n height:".concat(A.width, "px;\n border-radius:").concat(A.width, "px;\n ") : "\n height:".concat(A.height, "px;\n border-radius:4px;\n "), + this.contentDiv.style.cssText = d + } + }, { + key: "_dragStart", + value: function (A) { + 0 === A.button && (document.addEventListener("mousemove", this._dragMove), + document.addEventListener("mouseup", this._dragEnd), + this._lastDragPoint = { + x: A.clientX, + y: A.clientY + }) + } + }, { + key: "_dragMove", + value: function (A) { + if (this._lastDragPoint) { + var e = A.clientY - this._lastDragPoint.y; + this.lineEndPosition.x += A.clientX - this._lastDragPoint.x, + this.lineEndPosition.y += e, + this.update(), + this._lastDragPoint.x = A.clientX, + this._lastDragPoint.y = A.clientY + } else + this._lastDragPoint = { + x: A.clientX, + y: A.clientY + } + } + }, { + key: "_dragEnd", + value: function (A) { + this._lastDragPoint = void 0, + document.removeEventListener("mousemove", this._dragMove), + document.removeEventListener("mouseup", this._dragEnd) + } + }]), + A + }(), + fB = function () { + function A(e, t) { + cc(this, A), + this.viewer3D = e, + this.EIMMODEL = t, + this.THREE = t.THREE, + this.marks = {}, + this.arrowConfig = new gB, + this.flag = 1, + this.update = this.update.bind(this), + e.registerCameraEventListener(this.EIMMODEL.EVENTS.ON_CAMERA_CHANGE, this.update) + } + return dc(A, [{ + key: "testData", + value: function () { + return [{ + lineTitle: "测试1", + title: "测试1胜利大街发", + icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACoAAAAoCAYAAACIC2hQAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAKqADAAQAAAABAAAAKAAAAACu2vZrAAAFXElEQVRYCe1YX0ybVRQvMB1ghyImq7CMxITyH8nmNPAwfDFb4iRj7mU+7GFbgEIIYMiWaaIsDpSwPQCJMDCYAZkvgEENGSEwQdbZEalCZjeB8bBRDIaAyYCFUurvfLmnu7RfW5AWXnaSH+fcc8495/Te+91zg0bznPy7AkH+DOdwOFIRLxmIFnGt4PeCgoLGxHjnGIrTAp8BDwFPRDby0e5IpUh8HPgb2CiR7/FtLRYJLwJrUoWPIF8F3gfeFCCZdGRjojkXt6VYJMrlrOArwAVgt6fkZBM+5MuU68nfL3pkSQc44RPIh+XAGMcAOcARWU8ydFkAzSGiGOmuPn4bI3gvZRGUw4Ex3gN8A9DWUjHvsU3m0NOPYOqVbX6TEf0QZwDv5MCQo4BJyXaFbcxhC5HkTsn3EOu98WBvRhXbCUn3pSTXQn5DGj+WZBY/QnH7xOArVoLLMSX1FkQkMomVmAZXmgX4QaGT2S3XNDDeBK6RHjwIoBhEJlffLY8R1KqExjnlYBjTF69GN6DMAN4GWoSDRZrHZ32add74Lm9GFVuU0M1JNtZJKkU8hb8EmfQoOAQt1Q4lx3hNdvAkb/aM/iMCycXdF7qn4COAQ4zV2L+iSLJxDI6p5u/UbbZQs5iZhJXhB81vQvcuijgIudoZ3V1QjoyYmyTMHNPdW9JsttAfxVx6HSnXCor7A/L3wIvCxlwMnWwJ0qdiRHP5hfWD08NfAlaCLvV5gEi+R1/HeAqwAGpkh/Ic1wGZ71GKtYf1fuUIfBlgkjtTJJTfsUHi9yFncBGQ5c70Bev9zpGI3p+PASK1Xr8f+hPAKeAtgM8y3Z+HAe71FCOw71MkOAkw0ePi/7yeTvp9FdUCorjrXKng9Oa8Ari+R0knv0fJ/bpazIDokIyOwF+UdZNEcwK75a6/GAkTgYVNFEq+ia5xNjJ2HnRPzqWlpa8uLS3pyB4cHLzLbrdbGhsbbeyPxEch/wQ4n3Fsc+HUNo/h3r3J+qKiot2IRz+W5kYCj+rr6x+wXeZee31hYWFUZmbmjZSUlAMhIAR9OjAw0J2bm2vgYikxEhkQtFEOrCIb5CLJHh0d/W12dvZRrVZLV5vGZDJNRkREfFhVVUVNZOPU1NT0ydzcHGI8o87Ozj8LCgrctg8e5595uUnnXbMWFxfvbWtrM8qei4uLjtbW1mvl5eUb75jYln2Dg4O/UyCbzebo7+8f6+3t/aWysrLCNSmP4VohJxayR/+KioozKOxWe3v7rzhe1L0cIyMjD7GTeo7pkzc0NHw8Ozur5BoaGrqXl5cXhy33+STDBLlzXfaVqKys7CXE3d/T03N7bW3NMT8/72hubr7ka55ix9bq+vr67lKVVCwOuNvWeQuEaZcI3nxcbTU1NedmZmaUVcV3YM7Pz4+RfVTPQlJSUk5ycjK1P83o6OjdsbGxFnmSLxkfzecEX36yfWJiogu57lDOhISE9LS0tA9ku5tM24ttUA759PS0rba29oybU4AUdXV1Z61Wq52OQHd3988lJSWvcCq3FU1MTDyWmpr6Dq4ijdlsHrBYLPTW3BbCznUBdygZdjRDp9NlqSY2GAyR9EvoF01NTS1VV1c7n3GqEwKgpB3Eqq7STdPR0dGFqyqU0qy78OPi4o5gNTNpNY1G4wNcxDp8/fkBqMdjyOXlZe3w8PAkGoEetWThujoAZ+O6QuPj40/HxMS8gA9BA8f0lZWVrz1GDKAhLCxMiR4bG/uyXq+nf6atL3RhYWEvrSZRaGioAmWwA39WV1c1OIIaXFlKF1y3ouPj4xdaWlpOh4eH70Bp7ilxTp+ghV91tzzXbH0F/gPRY0VbSFn/swAAAABJRU5ErkJggg==", + type: "rectangle" + }, { + lineTitle: "测试2", + title: "测试2胜利大街发", + icon: void 0, + type: "rectangle" + }, { + lineTitle: "测试3", + title: "测试3胜利大街发", + icon: void 0, + type: "rectangle" + }, { + lineTitle: "测试4", + title: "测试4胜利大街发", + icon: "data:image/png;base64,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", + type: "circle" + }, { + lineTitle: "测试5", + title: "测试5胜利大街发", + icon: void 0, + type: "rectangle" + }, { + lineTitle: "测试6", + title: "测试6胜利大街发", + icon: void 0, + type: "circle" + }, { + lineTitle: "测试7", + title: "测试7胜利大街发", + icon: "data:image/png;base64,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", + type: "rectangle" + }] + } + }, { + key: "addMarksAtComponent", + value: function (A, e, t) { + var i = this.viewer3D.getBoxByComponentsKey(A), + o = new this.THREE.Vector3; + i.getCenter(o); + var n = o.toArray(), + r = this.viewer3D.getViewerImpl().domElement, + a = r.getBoundingClientRect(), + s = this.viewer3D.getScreenCoordFromSceneCoord(o), + l = e || this.arrowConfig, + c = l.type, + h = 0, + d = [s[0] + 250, s[1]], + p = 250, + g = 0, + u = 0; + this.marks[A] || (this.marks[A] = []); + for (var f = 0, m = t.length; m > f; f += 1) { + var C = t[f]; + l.type = C.type || c; + var y = new uB(l, C.lineTitle, C.title, C.icon, this.flag, n); + r.appendChild(y.rootDiv), + y.setLineStartAndEndPoint(s[0], s[1], d[0], d[1]); + var v = y.contentDiv.getBoundingClientRect(); + if (f > 0) { + u += 2 * Math.asin((v.height / 2 + h / 2) / 2 / 250), + u += .1; + var I = Math.cos(u), + E = Math.sin(u), + B = p * I + g * -E + s[0], + x = p * E + g * I + s[1]; + 0 > B ? B = v.width / 2 : B > a.width && (B = a.width - v.width / 2), + 0 > x ? x = v.height / 2 : x > a.height && (x = a.height - v.height / 2), + y.setLineEndPosition(B, x) + } + h = v.height, + this.flag += 1, + this.marks[A].push(y) + } + } + }, { + key: "addMarkAt", + value: function (A, e, t, i, o) { + var n = parseInt(A.x, 10).toString() + "_" + parseInt(A.y, 10).toString() + "_" + parseInt(A.z, 10).toString(), + r = new uB(o || this.arrowConfig, e, t, i, this.flag, A), + a = this.viewer3D.getViewerImpl().domElement; + a.appendChild(r.rootDiv); + var s = a.getBoundingClientRect(), + l = this.viewer3D.getScreenCoordFromSceneCoord(A), + c = [l[0], l[1]]; + return l.x > s.width / 2 ? c[0] -= 250 : c[0] += 250, + r.setLineStartAndEndPoint(l[0], l[1], c[0], c[1]), + this.flag += 1, + this.marks[n] || (this.marks[n] = []), + this.marks[n].push(r), + r + } + }, { + key: "update", + value: function () { + var A = this, + e = (new Date).getTime(); + this._lastTime && e - this._lastTime < 25 || (this._lastTime = e, + Object.keys(this.marks).forEach((function (e) { + var t = A.marks[e], + i = A.viewer3D.getScreenCoordFromSceneCoord(t[0].scenePoint); + t.forEach((function (A) { + A.setLineStartPosition(i[0], i[1]) + })) + }))) + } + }, { + key: "destroy", + value: function () { + this.viewer3D.unregisterCameraEventListener(this.EIMMODEL.EVENTS.ON_CAMERA_CHANGE, this.update) + } + }]), + A + }(), + mB = function (A) { + this.Measurement = { + pointMove: new y, + pointPick: [], + pointPickToScreen: [], + pointAssist: [], + pointAssistToScreen: [], + needUpdatedObjects: [], + pickLineP1: new y, + pickLineP2: new y, + planeSquare: {}, + planeVolume: {}, + measureWindow: {} + }, + this.renderer = A.viewerImpl.modelManager.renderer, + this.scene = A.viewerImpl.modelManager.scene, + this.camera = A.viewerImpl.camera.cameraPerspective, + this.cameraControl = A.viewerImpl.cameraControl, + this.intersect = null, + this.domElement = A.viewerImpl.domElement, + this.viewer = A.viewerImpl, + this.SVG = document.getElementById("svgid" + A.getViewerImpl().uuid), + this.SVGRect = A.SVGRect; + var e = this; + + function t() { + e.updatePos() + } + + function i() { + var t = A.getScreenCoordFromSceneCoord(e.Measurement.pickLineP1), + i = A.getScreenCoordFromSceneCoord(e.Measurement.pickLineP2), + o = new s(t[0], t[1]), + n = new s(i[0], i[1]); + e.SVGRect.createMoveLine(o, n) + } + this.movePoint = function (t) { + if (t.pickLine || t.pickPlane || t.pickPoint) { + e.SVGRect.deleteCircle(); + var i = A.viewerImpl.cameraControl.screenToCanvas(t.event.clientX, t.event.clientY); + e.SVGRect.creatMoveCircle(i); + var o = e.cameraControl.getIntersectContext(new s(t.event.clientX, t.event.clientY)); + if (e.cameraControl.intersector.pick(o, (function (t) { + for (var o = t.object.geometry, n = o.attributes.position.array, r = o.attributes.position.count, a = 0; r > a; a += 1) { + var s = new y(n[3 * a], n[3 * a + 1], n[3 * a + 2]); + s.applyMatrix4(t.object.matrixWorld); + var l = A.getScreenCoordFromSceneCoord(s); + 15 > Math.sqrt((l[0] - i.x) * (l[0] - i.x) + (l[1] - i.y) * (l[1] - i.y)) && (e.Measurement.pointMove = s, + e.SVGRect.changeMoveCircleStyle(l)) + } + })), + t.pickLine) { + e.Measurement.pickLineP1 = t.pickLine[0], + e.Measurement.pickLineP2 = t.pickLine[1]; + var n = A.getScreenCoordFromSceneCoord(t.pickLine[0].clone()), + r = A.getScreenCoordFromSceneCoord(t.pickLine[1].clone()), + a = new s(n[0], n[1]), + l = new s(r[0], r[1]); + e.SVGRect.createMoveLine(a, l) + } + } + }, + this.pickPoint = function (t) { + if (t.pickLine || t.pickPlane || t.pickPoint) { + 1 > e.Measurement.needUpdatedObjects.length || (e.SVGRect.deleteCircle(), + e.SVGRect.deleteMoveLine(), + e.SVGRect.deleteLineAndCircle(), + e.Measurement.pointPick = [], + e.Measurement.pointPickToScreen = [], + e.Measurement.pointAssist = [], + e.Measurement.pointAssistToScreen = [], + e.Measurement.needUpdatedObjects = [], + e.updatePos()); + new y, + new y, + new y, + new y; + var i = null, + o = t.pickPoint, + n = (new s).fromArray(A.getScreenCoordFromSceneCoord(o)); + e.Measurement.pointPick.push(o), + e.Measurement.pointPickToScreen.push(n); + var r = e.Measurement.pointPickToScreen.length; + if (e.SVGRect.creatPickCircle(n, r - 1), + r % 2 == 0 && r > 0) { + var a = new y(e.Measurement.pointPick[r - 1].x, e.Measurement.pointPick[r - 2].y, e.Measurement.pointPick[r - 2].z), + l = new y(e.Measurement.pointPick[r - 1].x, e.Measurement.pointPick[r - 2].y, e.Measurement.pointPick[r - 1].z); + e.Measurement.pointAssist.push(a), + e.Measurement.pointAssist.push(l); + var c = A.getScreenCoordFromSceneCoord(a), + h = A.getScreenCoordFromSceneCoord(l), + d = new s(c[0], c[1]), + p = new s(h[0], h[1]); + e.SVGRect.creatLine(e.Measurement.pointPickToScreen[r - 2], d, "red", "red" + (r - 1)), + e.SVGRect.creatLine(p, e.Measurement.pointPickToScreen[r - 1], "green", "green" + (r - 1)), + e.SVGRect.creatLine(d, p, "blue", "blue" + (r - 1)), + e.SVGRect.creatLine(e.Measurement.pointPickToScreen[r - 1], e.Measurement.pointPickToScreen[r - 2], "yellow", "yellow" + (r - 1)), + e.Measurement.needUpdatedObjects.push({ + point1: e.Measurement.pointPick[r - 2], + point2: e.Measurement.pointPick[r - 1], + asPot1: e.Measurement.pointAssist[r - 2], + asPot2: e.Measurement.pointAssist[r - 1] + }); + var g = Math.abs(e.Measurement.pointPick[r - 1].x - e.Measurement.pointPick[r - 2].x), + u = Math.abs(e.Measurement.pointPick[r - 1].y - e.Measurement.pointPick[r - 2].y), + f = Math.abs(e.Measurement.pointPick[r - 1].z - e.Measurement.pointPick[r - 2].z), + m = e.Measurement.pointPick[r - 1].distanceTo(e.Measurement.pointPick[r - 2]); + i = { + dx: g.toFixed(3), + dy: u.toFixed(3), + dz: f.toFixed(3), + dis: m.toFixed(3) + } + } + return i + } + }, + this.clear = function () { + e.SVGRect.deleteCircle(), + e.SVGRect.deleteMoveLine(), + e.SVGRect.deleteLineAndCircle(), + e.Measurement.pointPick = [], + e.Measurement.pointPickToScreen = [], + e.Measurement.pointAssist = [], + e.Measurement.pointAssistToScreen = [], + e.Measurement.needUpdatedObjects = [], + e.cameraControl.removeEventListener(Rc.ON_CAMERA_CHANGE, t), + e.cameraControl.removeEventListener(Rc.ON_CAMERA_CHANGE, i) + }, + this.updatePos = function () { + var t = e.Measurement.pointPick.length, + i = e.Measurement.pointAssist.length, + o = e.Measurement.needUpdatedObjects; + if (i) + for (var n = 0; o.length > n; n += 1) { + var r = 2 * n, + a = A.getScreenCoordFromSceneCoord(o[n].point1), + l = A.getScreenCoordFromSceneCoord(o[n].point2), + c = new s(a[0], a[1]), + h = new s(l[0], l[1]); + e.Measurement.pointPickToScreen[r] = c, + e.Measurement.pointPickToScreen[r + 1] = h; + var d = A.getScreenCoordFromSceneCoord(o[n].asPot1), + p = A.getScreenCoordFromSceneCoord(o[n].asPot2), + g = new s(d[0], d[1]), + u = new s(p[0], p[1]); + e.Measurement.pointAssistToScreen[r] = g, + e.Measurement.pointAssistToScreen[r + 1] = u; + var f = e.Measurement.pointPickToScreen[r].x, + m = e.Measurement.pointPickToScreen[r].y, + C = e.Measurement.pointPickToScreen[r + 1].x, + y = e.Measurement.pointPickToScreen[r + 1].y, + v = e.Measurement.pointAssistToScreen[r].x, + I = e.Measurement.pointAssistToScreen[r].y, + E = e.Measurement.pointAssistToScreen[r + 1].x, + B = e.Measurement.pointAssistToScreen[r + 1].y, + x = document.getElementById("circlePick" + A.getViewerImpl().uuid + r), + S = document.getElementById("circlePick" + A.getViewerImpl().uuid + (r + 1)); + x.setAttribute("cx", f), + x.setAttribute("cy", m), + S.setAttribute("cx", C), + S.setAttribute("cy", y); + var w = document.getElementById("pickline" + A.getViewerImpl().uuid + "red" + (r + 1)), + M = document.getElementById("pickline" + A.getViewerImpl().uuid + "green" + (r + 1)), + b = document.getElementById("pickline" + A.getViewerImpl().uuid + "blue" + (r + 1)), + U = document.getElementById("pickline" + A.getViewerImpl().uuid + "yellow" + (r + 1)); + w.setAttribute("x1", f), + w.setAttribute("y1", m), + w.setAttribute("x2", v), + w.setAttribute("y2", I), + M.setAttribute("x1", E), + M.setAttribute("y1", B), + M.setAttribute("x2", C), + M.setAttribute("y2", y), + b.setAttribute("x1", v), + b.setAttribute("y1", I), + b.setAttribute("x2", E), + b.setAttribute("y2", B), + U.setAttribute("x1", f), + U.setAttribute("y1", m), + U.setAttribute("x2", C), + U.setAttribute("y2", y) + } + if (t % 2 == 1 && t !== i) { + var F = A.getScreenCoordFromSceneCoord(e.Measurement.pointPick[t - 1]), + K = new s(F[0], F[1]); + e.Measurement.pointPickToScreen[t - 1] = K; + f = K.x, + m = K.y; + (x = document.getElementById("circlePick" + A.getViewerImpl().uuid + (t - 1))).setAttribute("cx", f), + x.setAttribute("cy", m) + } + }, + this.addEventListener = function () { + e.cameraControl.addEventListener(Rc.ON_CAMERA_CHANGE, t), + e.cameraControl.addEventListener(Rc.ON_CAMERA_CHANGE, i) + } + }; + Object.assign(mB.prototype, Ld.prototype); + var CB = function () { + function A(e) { + cc(this, A), + this.coef = e.coef || .5, + this.controlPoints = e.controlPoints || [], + this.pointCountRecord = e.pointCountRecord, + this.formatConPoints = [], + this.matrix = [], + this.update = !0, + this.points = [], + this.controlPointsIndex = [], + this.straightLineDistance = 0, + this.curveLength = 0, + this.updateCurveLength = !0, + this.updateList = [], + this.setCoef(this.coef), + this._forMatConPoints() + } + return dc(A, [{ + key: "setControlPoints", + value: function (A) { + this.controlPoints = A, + this._forMatConPoints(), + this.update = !0, + this.updateList.push("controlPoints"), + this.updateStraightLineDistance = !0 + } + }, { + key: "getPoints", + value: function () { + return this.update && this._createPoints(this.pointCountRecord), + this.points + } + }, { + key: "setPointsCount", + value: function (A) { + this.updateList.push("count"), + this.update = !0, + this.pointCountRecord = A + } + }, { + key: "getCurveLength", + value: function () { + return this.update ? { + info: "参数已修改,请先更新曲线", + code: -1, + updateList: this.updateList + } : (this.updateCurveLength && function () { + var A = this.points, + e = A.length; + this.curveLength = A.reduce((function (A, t, i, o) { + return e > i + 1 && (A += o[i].distanceTo(o[i + 1])), + A + }), 0), + this.updateCurveLength = !1 + } + .bind(this)(), + this.curveLength) + } + }, { + key: "getStraightLineDistance", + value: function () { + return this.updateStraightLineDistance && function () { + var A = this.controlPoints, + e = A.length; + this.straightLineDistance = A.reduce((function (A, t, i, o) { + return e > i + 1 && (A += o[i].distanceTo(o[i + 1])), + A + }), 0), + this.updateStraightLineDistance = !1 + } + .bind(this)(), + this.straightLineDistance + } + }, { + key: "setCoef", + value: function (A) { + this.updateList.push("coef"), + this.update = !0, + this.matrix = [ + [-A, 2 - A, A - 2, A], + [2 * A, A - 3, 3 - 2 * A, -A], + [-A, 0, A, 0], + [0, 1, 0, 0] + ] + } + }, { + key: "updateCurve", + value: function () { + return this.getPoints() + } + }, { + key: "getPointsInfo", + value: function () { + return this.update ? { + info: "参数已修改,请先更新曲线", + code: -1, + updateList: this.updateList + } : { + points: this.getPoints(), + controlPointsIndex: this.controlPointsIndex, + curveLength: this.getCurveLength(), + straightLineDistance: this.getStraightLineDistance() + } + } + }, { + key: "_forMatConPoints", + value: function () { + var A = this.controlPoints; + this.formatConPoints = []; + for (var e = 0, t = A.length; t > e; e += 1) + 0 === e ? this.formatConPoints.push(A[e].clone(), A[e].clone()) : t > e + 1 ? this.formatConPoints.push(A[e].clone()) : this.formatConPoints.push(A[e].clone(), A[e].clone()) + } + }, { + key: "_createPoints", + value: function (A) { + var e = [], + t = this.matrix; + + function i(A) { + e[0] = new y, + e[1] = new y, + e[2] = new y, + e[3] = new y; + var i = []; + i[0] = [], + i[1] = [], + i[2] = [], + i[3] = [], + i[0][0] = A[0].clone().multiplyScalar(t[0][0]), + i[0][1] = A[1].clone().multiplyScalar(t[0][1]), + i[0][2] = A[2].clone().multiplyScalar(t[0][2]), + i[0][3] = A[3].clone().multiplyScalar(t[0][3]), + i[1][0] = A[0].clone().multiplyScalar(t[1][0]), + i[1][1] = A[1].clone().multiplyScalar(t[1][1]), + i[1][2] = A[2].clone().multiplyScalar(t[1][2]), + i[1][3] = A[3].clone().multiplyScalar(t[1][3]), + i[2][0] = A[0].clone().multiplyScalar(t[2][0]), + i[2][1] = A[1].clone().multiplyScalar(t[2][1]), + i[2][2] = A[2].clone().multiplyScalar(t[2][2]), + i[2][3] = A[3].clone().multiplyScalar(t[2][3]), + i[3][0] = A[0].clone().multiplyScalar(t[3][0]), + i[3][1] = A[1].clone().multiplyScalar(t[3][1]), + i[3][2] = A[2].clone().multiplyScalar(t[3][2]), + i[3][3] = A[3].clone().multiplyScalar(t[3][3]); + for (var o = 0; 4 > o; o += 1) + for (var n = 0; 4 > n; n += 1) + e[o].add(i[o][n]) + } + + function o(A) { + var t = A * A, + i = t * A; + return e[0].clone().multiplyScalar(i).add(e[1].clone().multiplyScalar(t)).add(e[2].clone().multiplyScalar(A)).add(e[3].clone()) + } + var n = this.formatConPoints, + r = this.points = [], + a = this.controlPointsIndex = [], + s = this.controlPoints; + if (A) { + for (var l = this.getStraightLineDistance(), c = 1 / A, h = 0, d = 0, p = 0, g = s.length - 1; g > p; p += 1) { + h += s[p].distanceTo(s[p + 1]); + var u = Math.floor(h / l / c) - d; + i([n[p], n[p + 1], n[p + 2], n[p + 3]]); + for (var f = 1 / u, m = 0; u > m; m += 1) { + r.push(o(f * m)) + } + d += u + } + r.push(s[s.length - 1]) + } else + for (var C = 0, v = n.length; v > C; C += 1) { + var I = 0 === C ? 0 : 1; + if (C + 3 >= v) { + r.push(n[C + 2]), + a.push({ + j: n[C + 1], + order: -1 + }); + break + } + r.push(n[C + 1]), + a.push({ + j: n[C + 1], + order: 100 * C + I + }), + i([n[C], n[C + 1], n[C + 2], n[C + 3]]); + for (var E = 1; 100 > E; E += 1) + r.push(o(E / 100)) + } + this.update = !1, + this.updateCurveLength = !0, + this.updateList = [] + } + }]), + A + }(), + yB = function () { + function A(e) { + cc(this, A), + this.coef = e.coef || .5, + this.points = e.controlPoints || [], + this.pointCountRecord = e.pointCountRecord, + this.formatConPoints = [], + this.matrix = [], + this._points = [], + this.controlPointsIndex = [], + this.straightLineDistance = 0, + this.count = 0, + this.setCoef(this.coef), + this._forMatConPoints(), + this._calCount(), + this.update = !0 + } + return dc(A, [{ + key: "setControlPoints", + value: function (A) { + this.points = A, + this._forMatConPoints(), + this._calCount(), + this._createPoints(), + this.update = !0 + } + }, { + key: "getPointAt", + value: function (A) { + this.update && this.getPoints(); + var e = Math.ceil(A * this.count); + return this._points[e > this.count ? this.count : e] + } + }, { + key: "getPoints", + value: function () { + return this.update && this._createPoints(this.pointCountRecord), + this._points + } + }, { + key: "setCoef", + value: function (A) { + this.update = !0, + this.matrix = [ + [-A, 2 - A, A - 2, A], + [2 * A, A - 3, 3 - 2 * A, -A], + [-A, 0, A, 0], + [0, 1, 0, 0] + ] + } + }, { + key: "getPointsInfo", + value: function () { + return { + points: this.getPoints(), + controlPointsIndex: this.controlPointsIndex + } + } + }, { + key: "_forMatConPoints", + value: function () { + var A = this.points; + this.formatConPoints = []; + for (var e = 0, t = A.length; t > e; e += 1) + 0 === e ? this.formatConPoints.push(A[e].clone(), A[e].clone()) : t > e + 1 ? this.formatConPoints.push(A[e].clone()) : this.formatConPoints.push(A[e].clone(), A[e].clone()) + } + }, { + key: "_calCount", + value: function () { + var A, e, t = this, + i = 1 / 0; + e = (A = t.points).length, + t.straightLineDistance = A.reduce((function (A, t, o, n) { + if (e > o + 1) { + var r = n[o].distanceTo(n[o + 1]); + i = r > i ? i : r, + A += r + } + return A + }), 0), + t.updateStraightLineDistance = !1; + var o = Math.ceil(t.straightLineDistance / i); + this.count = o > 100 ? o : 100 + } + }, { + key: "_createPoints", + value: function () { + var A = [], + e = this.matrix; + + function t(t) { + A[0] = new y, + A[1] = new y, + A[2] = new y, + A[3] = new y; + var i = []; + i[0] = [], + i[1] = [], + i[2] = [], + i[3] = [], + i[0][0] = t[0].clone().multiplyScalar(e[0][0]), + i[0][1] = t[1].clone().multiplyScalar(e[0][1]), + i[0][2] = t[2].clone().multiplyScalar(e[0][2]), + i[0][3] = t[3].clone().multiplyScalar(e[0][3]), + i[1][0] = t[0].clone().multiplyScalar(e[1][0]), + i[1][1] = t[1].clone().multiplyScalar(e[1][1]), + i[1][2] = t[2].clone().multiplyScalar(e[1][2]), + i[1][3] = t[3].clone().multiplyScalar(e[1][3]), + i[2][0] = t[0].clone().multiplyScalar(e[2][0]), + i[2][1] = t[1].clone().multiplyScalar(e[2][1]), + i[2][2] = t[2].clone().multiplyScalar(e[2][2]), + i[2][3] = t[3].clone().multiplyScalar(e[2][3]), + i[3][0] = t[0].clone().multiplyScalar(e[3][0]), + i[3][1] = t[1].clone().multiplyScalar(e[3][1]), + i[3][2] = t[2].clone().multiplyScalar(e[3][2]), + i[3][3] = t[3].clone().multiplyScalar(e[3][3]); + for (var o = 0; 4 > o; o += 1) + for (var n = 0; 4 > n; n += 1) + A[o].add(i[o][n]) + } + for (var i, o, n, r = this.formatConPoints, a = this._points = [], s = this.controlPointsIndex = [], l = this.points, c = this.straightLineDistance, h = 0, d = 0, p = 0, g = l.length - 1; g > p; p += 1) { + var u = (h += l[p].distanceTo(l[p + 1])) / c * this.count - d; + t([r[p], r[p + 1], r[p + 2], r[p + 3]]), + a.push(r[p + 1]), + s.push({ + j: r[p + 1], + order: d + }), + d += 1; + for (var f = 1; u > f; f += 1) + a.push((o = void 0, + n = void 0, + n = (o = (i = f / u) * i) * i, + A[0].clone().multiplyScalar(n).add(A[1].clone().multiplyScalar(o)).add(A[2].clone().multiplyScalar(i)).add(A[3].clone()))), + d += 1 + } + a.push(l[l.length - 1]), + s.push({ + to: r[l.length - 1], + order: -1 + }), + this.update = !1 + } + }]), + A + }(), + vB = function () { + function A(e) { + return cc(this, A), + A.shareInstance || (A.shareInstance = this, + this.maxRequestCount = e || 300, + this.currentPendingCount = 0, + this._requests = [], + this._requestDidLoad = this._requestDidLoad.bind(this), + this._requestDidError = this._requestDidError.bind(this), + this._requestDidAbort = this._requestDidAbort.bind(this), + this._requestDidTimeout = this._requestDidTimeout.bind(this)), + A.shareInstance + } + return dc(A, [{ + key: "addRequest", + value: function (A, e) { + A.addEventListener("load", this._requestDidLoad), + A.addEventListener("error", this._requestDidError), + A.addEventListener("abort", this._requestDidAbort), + A.addEventListener("timeout", this._requestDidTimeout), + this.maxRequestCount > this.currentPendingCount ? (A.send(e), + this.currentPendingCount += 1) : this._requests.push({ + request: A, + dataToSend: e + }) + } + }, { + key: "_sendNextRequest", + value: function () { + if (this._requests.length > 0) { + var A = this._requests.shift(); + A.request.send(A.dataToSend), + this.currentPendingCount += 1 + } + } + }, { + key: "_requestDidLoad", + value: function () { + this.currentPendingCount -= 1, + this._sendNextRequest() + } + }, { + key: "_requestDidError", + value: function () { + this.currentPendingCount -= 1, + this._sendNextRequest() + } + }, { + key: "_requestDidAbort", + value: function () { + this.currentPendingCount -= 1, + this._sendNextRequest() + } + }, { + key: "_requestDidTimeout", + value: function () { + this.currentPendingCount -= 1, + this._sendNextRequest() + } + }]), + A + }(), + IB = { + group: "group", + model: "model", + component: "component", + components: "components" + }, + EB = function A() { + cc(this, A), + this.type = void 0, + this.nodeId = void 0, + this.matrix = void 0, + this.center = void 0, + this.modelKey = void 0, + this.componentKey = void 0, + this.componentsKey = void 0, + this.children = void 0 + }, + BB = function () { + function A(e, t, i, o) { + cc(this, A), + this.host = e, + this.projectUrl = t, + this.accessToken = i, + this._cachedComponents = {}, + this._cachedMaterials = {}, + this._cachedGeometries = {}, + this._cachedFile = {}, + this._requestQueue = new vB(o) + } + return dc(A, [{ + key: "destroy", + value: function () { + delete this._cachedComponents, + delete this._cachedMaterials, + delete this._cachedGeometries, + delete this._cachedFile + } + }, { + key: "getExternalObjectByModelKey", + value: function (A) { + var e = this; + return "string" != typeof A ? Promise.reject("参数不合法") : this._loadModelInfo(A).then((function () { + return e._loadComponentsListIn(A) + })).then((function (A) { + return e.getExternalObjectByComponentsKey(A) + })) + } + }, { + key: "getExternalObjectByComponentKey", + value: function (A) { + var e = this; + if ("string" != typeof A) + return Promise.reject("参数不合法"); + var t = this._cachedComponents[A]; + return t ? Promise.resolve(this._createMesh(t, !0)) : this._loadComponentsInfo([A]).then((function (A) { + return e._generateMeshByComponentInfo(A[0]) + })).then((function (A) { + return A + })) + } + }, { + key: "getExternalObjectByComponentsKeyBackup", + value: function (A) { + var e = this; + if (A instanceof Array == !1) + return Promise.reject("参数不合法"); + for (var t = [], i = [], o = {}, n = function (n, r) { + var a = e.getExternalObjectByComponentKey(A[n]).then((function (A) { + i.push(A) + })).catch((function (e) { + o[A[n]] = e + })); + t.push(a) + }, r = 0, a = A.length; a > r; r += 1) + n(r); + return Promise.all(t).then((function () { + if (i.length > 0) { + i.length !== A.length && Bh.error(o); + for (var e = new Xi, t = 0, n = i.length; n > t; t += 1) + e.add(i[t]); + return e + } + return Promise.reject(o) + })) + } + }, { + key: "getExternalObjectByComponentsKey", + value: function (A) { + var e = this; + if (A instanceof Array == !1) + return Promise.reject("参数不合法"); + for (var t = [], i = {}, o = [], n = 0, r = A.length; r > n; n += 1) { + var a = A[n], + s = this._cachedComponents[a]; + s ? t.push(this._createMesh(s, !0)) : o.push(a) + } + if (o.length > 0) + return this._loadComponentsInfo(o).then((function (o) { + for (var n = [], r = 0, a = o.length; a > r; r += 1) { + var s = e._generateMeshByComponentInfo(o[r]).then((function (A) { + t.push(A) + })).catch((function (A) { + i[A.componentKey] = A.message + })); + n.push(s) + } + return Promise.all(n).then((function () { + if (t.length > 0) { + t.length !== A.length && Bh.error(i); + for (var e = new Xi, o = 0, n = t.length; n > o; o += 1) + e.add(t[o]); + return e + } + return Promise.reject(i) + })) + })); + for (var l = new Xi, c = 0, h = t.length; h > c; c += 1) + l.add(t[c]); + return Promise.resolve(l) + } + }, { + key: "testData", + value: function () { + var A = new EB; + A.type = IB.group; + var e = new EB; + e.type = IB.component, + e.componentKey = "M1577676674083_265272"; + var t = new EB; + t.type = IB.component, + t.componentKey = "M1577676674083_265916"; + var i = new EB; + i.type = IB.component, + i.componentKey = "M1577676674083_244449"; + var o = (new M).makeTranslation(0, 0, 5e3); + i.matrix = o.toArray(); + var n = new EB; + n.type = IB.group; + var r = new EB; + r.type = IB.component, + r.componentKey = "M1577676674083_246705"; + var a = new EB; + a.type = IB.component, + a.componentKey = "M1577676674083_247372", + a.matrix = o.makeTranslation(0, 0, 7e3).toArray(); + var s = new EB; + return s.type = IB.component, + s.componentKey = "M1577676674083_244910", + A.children = [e, t, i, n], + n.children = [r, a, s], + A + } + }, { + key: "getExternalObjectByNodeInfo", + value: function (A) { + var e = this, + t = void 0; + return A.type === IB.component && A.componentKey ? t = this.getExternalObjectByComponentKey(A.componentKey) : A.type === IB.components && A.componentsKey && A.componentsKey instanceof Array && A.componentsKey.length > 0 ? t = this.getExternalObjectByComponentsKey(A.componentsKey) : A.type === IB.model && A.modelKey ? t = this.getExternalObjectByModelKey(A.modelKey) : A.type === IB.group && A.children && A.children.length > 0 ? function () { + for (var i = new Xi, o = [], n = function (t, n) { + var r = A.children[t], + a = e.getExternalObjectByNodeInfo(r).then((function (A) { + i.add(A) + })).catch((function (A) { + return Bh.error(r, A), + A + })); + o.push(a) + }, r = 0, a = A.children.length; a > r; r += 1) + n(r); + t = Promise.all(o).then((function () { + return i + })) + }() : t = Promise.reject("参数不合法"), + t.then((function (e) { + if (A.matrix) { + var t = (new M).fromArray(A.matrix); + e.matrix.identity(), + e.applyMatrix4(t), + e.updateMatrixWorld(!0) + } + if (A.center) { + var i = (new aA).setFromObject(e), + o = new y; + if (i.getCenter(o), + parseInt(A.center[0], 10) !== parseInt(o.x, 10) || parseInt(A.center[1], 10) !== parseInt(o.y, 10) || parseInt(A.center[2], 10) !== parseInt(o.z, 10)) { + var n = (new y).fromArray(A.center).sub(o), + r = (new M).makeTranslation(n.x, n.y, n.z); + e.applyMatrix4(r), + e.updateMatrixWorld(!0) + } + } + return e + })) + } + }, { + key: "exportNodeInfoByComponents", + value: function (A, e) { + if (e) { + var t = new EB; + return 1 === e.length ? (t.type = IB.component, + t.componentKey = e[0]) : (t.type = IB.components, + t.componentsKey = e), + t.nodeId = A, + t + } + } + }, { + key: "exportNodeInfoByModelKey", + value: function (A, e) { + if (e) { + var t = new EB; + return t.type = IB.model, + t.modelKey = e, + t.nodeId = A, + t + } + } + }, { + key: "_loadModelInfo", + value: function (A) { + return this._httpGet(this.host + "/api/" + this.projectUrl + "/models?modelKey=" + A) + } + }, { + key: "_loadComponentsListIn", + value: function (A) { + return this._httpGet(this.host + "/api/" + this.projectUrl + "/components/keys?modelKey=" + A) + } + }, { + key: "_loadComponentsInfo", + value: function (A, e, t) { + return this._httpPost(this.host + "/api/" + this.projectUrl + "/components/geometry", { + components: A + }) + } + }, { + key: "_generateMeshByComponentInfo", + value: function (A) { + var e = this; + if (!A.geometry) + return Promise.reject({ + componentKey: A.component, + message: "几何为空" + }); + var t = {}; + if (t.componentKey = A.component, + A.matrix) { + var i = (new M).fromArray(A.matrix); + t.matrix = i + } + var o = A.materials, + n = [], + r = []; + if (A.materials.length > 0) + for (var a = function (t, i) { + n.push(e._loadMaterial(o[t]).then((function (A) { + r[t] = A + })).catch((function (i) { + Bh.error(i, "用默认材质代替"), + r[t] = e._loadMaterialByType(A.type) + }))) + }, s = 0, l = o.length; l > s; s += 1) + a(s); + else { + var c = this._loadMaterialByType(A.type); + r.push(c), + n.push(Promise.resolve(c)) + } + return Promise.all(n).then((function () { + return t.materials = r, + e._loadGeometry(A.geometry) + })).then((function (A) { + t.geometry = A; + for (var i = 0, o = t.materials.length; o > i; i += 1) { + var n = t.materials[i]; + if (n.aoMap || n.lightMap) { + t.geometry.setAttribute("uv2", new YA(t.geometry.attributes.uv.array, 2)); + break + } + } + return e._cachedComponents[t.componentKey] = t, + e._createMesh(t, !1) + })) + } + }, { + key: "_loadMaterial", + value: function (A) { + var e = this, + t = this._cachedMaterials[A.key]; + if (t) + return Promise.resolve(t.clone()); + var i = A.data; + return this._loadAllTextures(i).then((function (t) { + var o = e._createMaterial(i, t); + return e._cachedMaterials[A.key] = o, + o + })) + } + }, { + key: "_loadMaterialByType", + value: function (A) { + var e = _u[A] ? _u[A].color : void 0; + e || (e = _u.DEFAULT.color); + var t = new LA(e[0], e[1], e[2]), + i = t.getHexString() + "_" + e[3], + o = this._cachedMaterials[i]; + return o || ((o = Kd.createStandardMaterial({ + color: t + })).side = 2, + this._cachedMaterials[i] = o), + o + } + }, { + key: "_loadGeometry", + value: function (A) { + var e = this, + t = this._cachedGeometries[A]; + return t ? Promise.resolve(t) : this._loadFile(A).then((function (t) { + try { + var i = new TextDecoder("utf-8").decode(t), + o = JSON.parse(i), + n = e._createGeometry(o); + return n ? (e._cachedGeometries[A] = n, + n) : Promise.reject("几何为空") + } catch (A) { + return Promise.reject(A.message) + } + })) + } + }, { + key: "_loadAllTextures", + value: function (A) { + for (var e = this, t = [], i = this._getAllTextureFileKey(A), o = {}, n = function (A, n) { + var r = i[A]; + t.push(e._loadFile(r).then((function (A) { + var t = e._createTexture(A); + o[r] = t + })).catch((function (A) { + Bh.error(A) + }))) + }, r = 0, a = i.length; a > r; r += 1) + n(r); + return t.length > 0 ? new Promise((function (A, e) { + Promise.all(t).then((function () { + Object.keys(o).length > 0 ? A(o) : e("加载纹理失败") + })) + })) : Promise.resolve(o) + } + }, { + key: "_getAllTextureFileKey", + value: function (A) { + var e = {}; + return A.map && (e[A.map] = !0), + A.aoMap && (e[A.aoMap] = !0), + A.alphaMap && (e[A.alphaMap] = !0), + A.envMap && (e[A.envMap] = !0), + A.lightMap && (e[A.lightMap] = !0), + A.emissiveMap && (e[A.emissiveMap] = !0), + A.specularMap && (e[A.specularMap] = !0), + A.specularMap && (e[A.specularMap] = !0), + Object.keys(e) + } + }, { + key: "_createTexture", + value: function (A) { + var e = new d, + t = document.createElement("img"); + e.wrapS = e.wrapT = 1e3, + t.onerror = function (A) { + Bh.error("加载纹理出错") + }, + t.onload = function (i) { + "string" != typeof A && window.URL.revokeObjectURL(t.src), + e.image = t, + e.needsUpdate = !0 + }; + var i = new Blob([A]); + return t.src = window.URL.createObjectURL(i), + e + } + }, { + key: "_createGeometry", + value: function (A) { + if (A.positions && 0 !== A.positions.length) { + var e = null; + e = new he; + var t = new Float32Array(A.positions); + e.setAttribute("position", new YA(t, 3)); + var i = new Uint32Array(A.indices); + if (e.setIndex(new YA(i, 1)), + A.normals && A.normals.length > 0) { + var o = new Float32Array(A.normals); + e.setAttribute("normal", new YA(o, 3)) + } else + e.computeVertexNormals(); + if (A.uv && A.uv.length > 0) { + var n = new Float32Array(A.uv); + e.setAttribute("uv", new YA(n, 2)) + } + if (void 0 !== A.materialIndices) { + for (var r = null, a = [], s = void 0, l = 0; A.materialIndices.length > l; l += 1) { + var c = A.materialIndices[l]; + c !== s && (s = c, + null != r && (r.count = 3 * l - r.start, + a.push(r)), + r = { + start: 3 * l, + materialIndex: s + }) + } + null != r && (r.count = 3 * A.materialIndices.length - r.start, + a.push(r)), + e.groups = a + } + return e + } + } + }, { + key: "_createMaterial", + value: function (A, e) { + return Kd.createMaterialByMaterialBufferAndTexture(A, e) + } + }, { + key: "_createMesh", + value: function (A, e) { + var t = null; + if (e) { + t = []; + for (var i = 0, o = A.materials.length; o > i; i += 1) + t.push(A.materials[i].clone()) + } else + t = A.materials; + var n = new Kf(A.geometry, t); + return n.visible = !0, + n.key = A.componentKey, + A.matrix && (n.applyMatrix4(A.matrix), + n.updateMatrixWorld(!0)), + n + } + }, { + key: "_loadFile", + value: function (A) { + var e = this._cachedFile[A]; + return e ? Promise.resolve(e) : this._http("GET", this.host + "/api/" + this.projectUrl + "/files?fileKey=" + A, "arraybuffer").then((function (A) { + return A + })) + } + }, { + key: "_httpGet", + value: function (A) { + return this._http("GET", A) + } + }, { + key: "_httpPost", + value: function (A, e) { + return this._http("POST", A, void 0, e) + } + }, { + key: "_http", + value: function (A, e, t, i) { + var o = this; + return new Promise((function (n, r) { + var a = {}; + "POST" === A && (a["Content-type"] = "application/json;charset=UTF-8"), + o.accessToken && (a.Authorization = o.accessToken), + _d({ + type: A, + url: e, + headers: a, + data: JSON.stringify(i), + responseType: t || "json", + requestQueue: o._requestQueue, + success: function (A) { + if (A) + try { + t && "json" !== t ? n(A) : A.data ? n(A.data) : "success" !== A.code.toLowerCase() && r(A.message ? A.message : "未知错误") + } catch (A) { + r(A.message) + } + else + r("数据为空") + }, + error: function (A, e) { + r(e) + } + }) + })) + } + }]), + A + }(), + xB = {}; + xB.ToolBar = Xd; + var SB = {}; + SB.ModelCompares = $y, + SB.DISPLAYMODEL = zy, + SB.CompareGlobalData = Xy, + SB.CompareComponentType = Zy, + SB.COMPAREEVENTS = _y, + SB.ViewerConnector = ev, + SB.RoadNetManager = JE, + SB.TextLoader = _E, + SB.TrackSimulator = AB, + SB.Heatmap = BE, + SB.Fire = FE, + SB.Water = eB, + SB.WaterEffect = sv, + SB.WaterEffectConfig = function () { + this.boundary = [], + this.color = new Xh("#80FDFF", .8), + this.scale = 4, + this.viewer = null, + this.xDirection = 1, + this.yDirection = 1, + this.reflectivity = 1, + this.reflectorTexturePosition = new y, + this.refractorTexturePosition = new y, + this.height = 0, + this.geometry = null + }, + SB.ArrowManager = cv; + var wB = {}; + wB.Line2 = QE, + wB.LineMaterial = YC, + wB.LineGeometry = KE; + for (var MB = {}, bB = Object.keys(sc), UB = 0; bB.length > UB; UB += 1) { + var FB = bB[UB]; + Object.defineProperty(MB, FB, { + value: sc[FB], + enumerable: !0, + configurable: !0, + writable: !1 + }) + } + A.Animation = hp, + A.ArrowDomMark = uB, + A.ArrowDomMarkManager = fB, + A.BOSCatmullRomCurve3 = CB, + A.BOSCatmullRomCurve3ForFrameEdit = yB, + A.BaseControl = Fg, + A.CAMERATYPE = Ec, + A.Camera = cp, + A.CameraAnimator = dp, + A.CameraControl = mp, + A.CameraInfo = Qd, + A.CameraUtil = Rd, + A.ClipPlaneService = Ap, + A.ClipPlanes = HC, + A.ClipPlanesTool = vp, + A.CollisionDetection = function (A) { + this.cameraControl = A, + this.intersector = A.intersector; + var e = new Dd, + t = new Dd, + i = new Dd, + o = new Dd, + n = new Dd, + r = new Dd; + this.run = function (a, s) { + var l = {}, + c = this.cameraControl.getIntersectContext(null); + e.set(a, new y(0, 0, 1)), + t.set(a, new y(0, 0, -1)), + n.set(a, s), + r.set(a, new y(-s.x, -s.y, -s.z)), + i.set(a, new y(-s.y, s.x, s.z)), + o.set(a, new y(s.y, -s.x, s.z)), + l.top = this.intersector.getIntersectByRay(c, e.ray), + l.down = this.intersector.getIntersectByRay(c, t.ray), + l.front = this.intersector.getIntersectByRay(c, n.ray), + l.back = this.intersector.getIntersectByRay(c, r.ray), + l.left = this.intersector.getIntersectByRay(c, i.ray), + l.right = this.intersector.getIntersectByRay(c, o.ray); + var h = new y(a.x, a.y, a.z - .8 * A.manHeight), + d = new Dd; + d.set(h, s); + var p = new Dd; + p.set(h, new y(-s.x, -s.y, -s.z)); + var g = new Dd; + g.set(h, new y(-s.y, s.x, s.z)); + var u = new Dd; + return u.set(h, new y(s.y, -s.x, s.z)), + l.frontMiddle = this.intersector.getIntersectByRay(c, d.ray), + l.backMiddle = this.intersector.getIntersectByRay(c, p.ray), + l.leftMiddle = this.intersector.getIntersectByRay(c, g.ray), + l.rightMiddle = this.intersector.getIntersectByRay(c, u.ray), + l + } + }, + A.Color = Xh, + A.ColorPicker = Hh, + A.ControlConfig = jh, + A.ControlManager = Og, + A.ControlMode = Gc, + A.DOMMark = Od, + A.DefaultInvisibleComponentType = bc, + A.DefaultMaterial = _u, + A.DeviceTest = mh, + A.DomUtil = xh, + A.DrawingStyle = jc, + A.EIMMODELMaterial = ld, + A.EVENTS = Rc, + A.Edge = wp, + A.EnumCesiumImageryLayerType = { + AUTO: 0, + BAIDU: 1, + GAODE: 2, + MAPBOX: 3, + ARCGIS: 4, + GOOGLE: 5 + }, + A.EnumConditionType = { + HIDDEN_OTHERS: 0, + TRANSLUCENT_OTHERS: 1, + OVERRIDE: 2, + BORDERLINE: 3 + }, + A.EnumDataProvider = Wc, + A.EnumFilterState = zc, + A.EnumIdBasedType = Dc, + A.EnumInstanceState = Hc, + A.EnumIsolateState = Nc, + A.EnumObjectState = Lc, + A.EnumRenderType = { + RENDER: 0, + RENDER_FINISHED: 1, + RESIZE: 2 + }, + A.EnumRendererType = { + AUTO: 0, + FULL: 1, + INCREMENT: 2 + }, + A.EnumSceneState = Vc, + A.EnumShaderColorState = Yc, + A.EnumTransparentState = Oc, + A.EnumUserType = { + HIDDEN_DATA: 0, + OVERRIDE_DATA: 1, + WITH_BOARDLINE: 2 + }, + A.EventDispatcher = Ld, + A.ExternalObjectConverter = BB, + A.ExternalObjectNodeInfo = EB, + A.ExternalObjectNodeInfoType = IB, + A.ExternalScene = ey, + A.FillClipPlane = _C, + A.FillClipPlaneTool = Sp, + A.FilterResultMode = Jc, + A.FullScreen = Wh, + A.GLTFLoader = OC, + A.GeomUtil = Tu, + A.GlobalData = vc, + A.Group = ep, + A.IDENTITYMATRIX3 = xc, + A.IDENTITYMATRIX4 = Bc, + A.ImageResources = Pd, + A.IntersectHelper = fp, + A.KDNode = Zu, + A.LOADERROREVENTS = Tc, + A.LightType = Fc, + A.LineSegmentsEx = cf, + A.Lobibox = bh, + A.LogLevels = Ch, + A.MarkObject = Hd, + A.MaterialEx = ay, + A.MaterialUtil = Kd, + A.MeasureTool = Eg, + A.MeasurementManager = mB, + A.MeshEx = Kf, + A.ModelType = Zc, + A.MoveDirection = qc, + A.NodeItemType = { + SYMBOL: 0, + MESH: 1, + TUBE: 2, + PIPE: 3, + BOX: 4, + BOX_M: 5, + PIPE_M: 6, + MESH_REF: 7, + LINE: 8 + }, + A.NoiseTextureType = xd, + A.NormalControl = Qg, + A.OPSELECTIONTYPE = Kc, + A.OrbitControl = Rg, + A.PICKABLETYPE = Qc, + A.PhongLightingMaterial = jC, + A.PickControl = kg, + A.PickHelper = kp, + A.PickUtil = wg, + A.PlaneMark = Vd, + A.Plugins = SB, + A.PostilObject = Jd, + A.PrimitiveCount = { + vertexCount: 0, + triangleCount: 0 + }, + A.Raycaster = Dd, + A.RectOpTool = Mg, + A.RectPickTool = bg, + A.RectZoomTool = Ug, + A.Roam = tB, + A.RoamManager = oB, + A.RoamPlayer = iB, + A.RotatePivotMode = kc, + A.RotationOrders = Ic, + A.SVGRect = tp, + A.Scene = oy, + A.SceneStateHelper = ny, + A.SectionPlane = hB, + A.SelectPad = Dg, + A.Snapshot = Zd, + A.SpriteMark = Gd, + A.StorageCache = AC, + A.THREE = MB, + A.THREEEX = wB, + A.ThreeMark = dB, + A.Tool = yp, + A.ToolBar = Xd, + A.ToolMode = Pc, + A.UI = xB, + A.Utils = uh, + A.Version = "4.18.0", + A.ViewController = lp, + A.Viewer = Py, + A.ViewerImpl = Gy, + A.WalkControl = Lg, + A.WordPlaneMark = pB, + A.ajax = _d, + A.buildEdge = Up, + A.createNoiseTexture = Fd, + A.getFaceIndex = Fp, + A.getScript = function (A, e) { + var t = {}; + if (t[A]) + e && e(); + else { + var i = document.createElement("script"); + i.type = "text/javascript", + i.src = A, + document.head.appendChild(i), + t[A] = !0, + i.readyState ? i.onreadystatechange = function () { + "loaded" !== i.readyState && "complete" !== i.readyState || (i.onreadystatechange = null, + e && e()) + } : + i.onload = function () { + e && e() + } + } + }, + A.i18nMessage = fh, + A.logger = Bh, + A.message = jd, + A.removeDuplicateIndex = Mp, + A.removeDuplicateVertex = bp, + A.standardView = Uc, + Object.defineProperty(A, "__esModule", { + value: !0 + }) +})); +//# sourceMappingURL=EIMMODEL.min.js.map \ No newline at end of file diff --git a/public/eim-0225/bar-custom.css b/public/eim-0225/bar-custom.css new file mode 100644 index 0000000..31c544d --- /dev/null +++ b/public/eim-0225/bar-custom.css @@ -0,0 +1,29 @@ +.toolComponentDiv>.yj-but, +.toolModelDiv>.yj-but, +.toolPostilDiv>.yj-but, +.homeViewer-div>.yj-but, +.yj-group:last-child>.yj-but { + border-bottom-right-radius: 0 !important; + background-image: url("./corner.png"); + background-repeat: no-repeat; + background-size: 6px; + background-position: right bottom; +} + +.setModal { + background-color: unset; +} + +.sceneColorDiv, +.fullScreenDiv { + background-color: rgba(0, 0, 0, .5); + border-style: outset; + margin: 0; + border-color: #767676; + border-width: 2px; + padding: 0 6px; + display: flex; + justify-content: center; + align-items: center; + border-radius: 6px; +} \ No newline at end of file diff --git a/public/eim-0225/corner.png b/public/eim-0225/corner.png new file mode 100644 index 0000000..c844e7f Binary files /dev/null and b/public/eim-0225/corner.png differ diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000..e745aa9 Binary files /dev/null and b/public/favicon.ico differ diff --git a/public/index.html b/public/index.html new file mode 100644 index 0000000..785769a --- /dev/null +++ b/public/index.html @@ -0,0 +1,45 @@ + + + + + + + + + + <%= htmlWebpackPlugin.options.title %> + + + + + +
+ + + + \ No newline at end of file diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000..2171435 --- /dev/null +++ b/src/App.vue @@ -0,0 +1,58 @@ + + + + + + \ No newline at end of file diff --git a/src/api/Rbac/UserLogin.js b/src/api/Rbac/UserLogin.js new file mode 100644 index 0000000..4991e82 --- /dev/null +++ b/src/api/Rbac/UserLogin.js @@ -0,0 +1,50 @@ +/* + * @Author: Billy + * @Date: 2021-09-22 09:42:40 + * @LastEditors: Billy + * @LastEditTime: 2021-09-22 23:15:29 + * @Description: 请输入 + */ + +import BaseAxios from "./_BaseAxios.js"; +import ResHelper from "../_ResponseHelper.js" + +/** + * @description 登录方法 + * @param {string} username 用户名(必填) + * @param {string} password 密码(必填) + * @param {string} captcha 验证码(非必填) + * @param {string} checkKey 验证码key(非必填) + */ +function login({ + username, + password, + captcha, + checkKey +}) { + return BaseAxios({ + url: `/sys/login`, + method: "post", + data: { + username, + password, + captcha, + checkKey + } + }).then(ResHelper.handler); +} + +/** + * @description 退出登录方法 + */ +function logout() { + return BaseAxios({ + url: `/sys/logout`, + method: "post" + }).then(ResHelper.handler); +} + +export default { + login, // 登录方法 + logout // 退出登录方法 +} \ No newline at end of file diff --git a/src/api/Rbac/_BaseAxios.js b/src/api/Rbac/_BaseAxios.js new file mode 100644 index 0000000..602fc05 --- /dev/null +++ b/src/api/Rbac/_BaseAxios.js @@ -0,0 +1,25 @@ +/* + * @Author: Billy + * @Date: 2020-06-23 08:44:33 + * @LastEditors: Billy + * @LastEditTime: 2021-09-22 09:41:08 + * @Description: 基础api的Axios的基类 + */ + +import axios from "axios"; +import AxiosInterceptors from '../_AxiosInterceptors.js' + +import { + BASE_URL, + TIMEOUT +} from '../../const.js' + +let requestConfig = { + baseURL: BASE_URL, // `baseURL` will be prepended to `url` unless `url` is absolute. + timeout: TIMEOUT +} + +const baseAxios = axios.create(requestConfig); +AxiosInterceptors.setInterceptors(baseAxios); + +export default baseAxios; \ No newline at end of file diff --git a/src/api/_AxiosInterceptors.js b/src/api/_AxiosInterceptors.js new file mode 100644 index 0000000..a2ee528 --- /dev/null +++ b/src/api/_AxiosInterceptors.js @@ -0,0 +1,95 @@ +/* + * @Author: Billy + * @Date: 2021-06-19 02:43:26 + * @LastEditors: Billy + * @LastEditTime: 2021-12-20 01:00:36 + * @Description: Axios拦截器 + */ + +import router from '../router/_index.js' +import LoginInfo from "../storage/login-info.js"; +import SysCode from "../sys/SysCode.js" +import { + TOKEY_ATTR_NAME +} from "../const.js" + +function setInterceptors(axios) { + // 在被then()和catch()方法处理之前,把 客户端请求 拦截下来优先处理 + axios.interceptors.request.use(function (config) { + // api 返回的数据均为json,如果请求没有指明,则默认视为json + if (!config.responseType) { + config.responseType = 'json'; + } + + let regex1 = /\/([A-Za-z0-9_-]+\/)+login/; // 登录系统(含登录系统后台及eim后台) + let regex2 = /\/system(\/\S+)+(\/)?/; // rbac后台里的system route下的所有接口 + // let regex5 = /\/(\w+\/)+register/; // 注册用户 + + if ( + !regex1.test(config.url) && + !regex2.test(config.url) + ) { + // 只要已登录,默认都把 token 加到对后端服务请求的 header 里 + let user = LoginInfo.getUserInfo(); + + if (user !== null) + config.headers[TOKEY_ATTR_NAME] = user.token; + else + console.log('本地用户信息为空'); + } + + return config; + }, function (error) { + return Promise.reject(error); + }); + + // 在被then()和catch()方法处理之前,把 服务器返回结果 拦截下来优先处理 + axios.interceptors.response.use(function (response) { + return response; + }, function (error) { + if (error.response) { // 请求已经发送,并且服务器携带着一个http状态码返回了数据,而这个状态码不包括2xx + if (error.response.status === 401 && + ( + error.response.data.code === SysCode.TOKEN_EXPIRED || + error.response.data.code === SysCode.TOKEN_FORCED_INVALID || + error.response.data.code === SysCode.TOKEN_ERROR + )) { + if (router.currentRoute.name !== "Login") { + router.push({ + name: 'Login' + }).catch(e => { }); + } + } else { + if (!( + router.currentRoute.name === "Error" && + router.currentRoute.params.code === error.response.data.code && + router.currentRoute.params.message === error.response.data.message + )) { + if (process.env.NODE_ENV !== 'development') { + router.push({ + name: 'Error', + params: { + code: error.response.data.code, + message: error.response.data.message + } + }); + } else { + console.log('后端接口返回非2XX状态码 :>> ', error.response.data); + } + } + return Promise.reject(new Error(error.response.data.message)); + } + } else if (error.request) { // 请求已经发出,但并无收到来自服务器的任何返回 + console.log('请求已经发出,但并无收到来自服务器的任何返回:', error.message); + } else { // 在建立一个请求的时候发生了错误 + console.log('在建立一个请求的时候发生了错误:', error.message); + } + return Promise.reject(error); + }); + + return axios; +} + +export default { + setInterceptors +} \ No newline at end of file diff --git a/src/api/_ResponseHelper.js b/src/api/_ResponseHelper.js new file mode 100644 index 0000000..6e38cd8 --- /dev/null +++ b/src/api/_ResponseHelper.js @@ -0,0 +1,29 @@ +/* + * @Author: Billy + * @Date: 2021-07-10 20:49:58 + * @LastEditors: Billy + * @LastEditTime: 2021-09-22 15:22:02 + * @Description: 针对服务器返回值的一些处理方法 + */ + +import SysCode from "../sys/SysCode.js" +import SysError from "../sys/SysError.js" + +// 一般处理方法 +function handler(res) { + if (res.data.success) { + return res.data.result; + } else { + throw new SysError( + res.data.code, + res.data.message, + res.data.result, + res.data.success, + res.data.timestamp + ); + } +} + +export default { + handler +} \ No newline at end of file diff --git a/src/assets/MenuIcons/Main/Alarm.png b/src/assets/MenuIcons/Main/Alarm.png new file mode 100644 index 0000000..c349d28 Binary files /dev/null and b/src/assets/MenuIcons/Main/Alarm.png differ diff --git a/src/assets/MenuIcons/Main/Demonstrations1.png b/src/assets/MenuIcons/Main/Demonstrations1.png new file mode 100644 index 0000000..7dc077a Binary files /dev/null and b/src/assets/MenuIcons/Main/Demonstrations1.png differ diff --git a/src/assets/MenuIcons/Main/Demonstrations2.png b/src/assets/MenuIcons/Main/Demonstrations2.png new file mode 100644 index 0000000..c7be654 Binary files /dev/null and b/src/assets/MenuIcons/Main/Demonstrations2.png differ diff --git a/src/assets/MenuIcons/Main/Download.png b/src/assets/MenuIcons/Main/Download.png new file mode 100644 index 0000000..37facf1 Binary files /dev/null and b/src/assets/MenuIcons/Main/Download.png differ diff --git a/src/assets/MenuIcons/Main/More1.png b/src/assets/MenuIcons/Main/More1.png new file mode 100644 index 0000000..77988d2 Binary files /dev/null and b/src/assets/MenuIcons/Main/More1.png differ diff --git a/src/assets/MenuIcons/Main/More2.png b/src/assets/MenuIcons/Main/More2.png new file mode 100644 index 0000000..7910f75 Binary files /dev/null and b/src/assets/MenuIcons/Main/More2.png differ diff --git a/src/assets/MenuIcons/Main/PersonalSpace1.png b/src/assets/MenuIcons/Main/PersonalSpace1.png new file mode 100644 index 0000000..5cded33 Binary files /dev/null and b/src/assets/MenuIcons/Main/PersonalSpace1.png differ diff --git a/src/assets/MenuIcons/Main/PersonalSpace2.png b/src/assets/MenuIcons/Main/PersonalSpace2.png new file mode 100644 index 0000000..0183068 Binary files /dev/null and b/src/assets/MenuIcons/Main/PersonalSpace2.png differ diff --git a/src/assets/MenuIcons/Main/ProductAndCases1.png b/src/assets/MenuIcons/Main/ProductAndCases1.png new file mode 100644 index 0000000..7b5e18b Binary files /dev/null and b/src/assets/MenuIcons/Main/ProductAndCases1.png differ diff --git a/src/assets/MenuIcons/Main/ProductAndCases2.png b/src/assets/MenuIcons/Main/ProductAndCases2.png new file mode 100644 index 0000000..52c1d61 Binary files /dev/null and b/src/assets/MenuIcons/Main/ProductAndCases2.png differ diff --git a/src/assets/MenuIcons/Main/SalesResources1.png b/src/assets/MenuIcons/Main/SalesResources1.png new file mode 100644 index 0000000..063bba9 Binary files /dev/null and b/src/assets/MenuIcons/Main/SalesResources1.png differ diff --git a/src/assets/MenuIcons/Main/SalesResources2.png b/src/assets/MenuIcons/Main/SalesResources2.png new file mode 100644 index 0000000..8d11bad Binary files /dev/null and b/src/assets/MenuIcons/Main/SalesResources2.png differ diff --git a/src/assets/MenuIcons/Main/Solutions1.png b/src/assets/MenuIcons/Main/Solutions1.png new file mode 100644 index 0000000..33badac Binary files /dev/null and b/src/assets/MenuIcons/Main/Solutions1.png differ diff --git a/src/assets/MenuIcons/Main/Solutions2.png b/src/assets/MenuIcons/Main/Solutions2.png new file mode 100644 index 0000000..278486d Binary files /dev/null and b/src/assets/MenuIcons/Main/Solutions2.png differ diff --git a/src/assets/MenuIcons/Main/Upload.png b/src/assets/MenuIcons/Main/Upload.png new file mode 100644 index 0000000..10d94a6 Binary files /dev/null and b/src/assets/MenuIcons/Main/Upload.png differ diff --git a/src/assets/MenuIcons/Secondary/Clients.png b/src/assets/MenuIcons/Secondary/Clients.png new file mode 100644 index 0000000..03b1874 Binary files /dev/null and b/src/assets/MenuIcons/Secondary/Clients.png differ diff --git a/src/assets/MenuIcons/Secondary/CloudDesktop.png b/src/assets/MenuIcons/Secondary/CloudDesktop.png new file mode 100644 index 0000000..64632f0 Binary files /dev/null and b/src/assets/MenuIcons/Secondary/CloudDesktop.png differ diff --git a/src/assets/MenuIcons/Secondary/Partners.png b/src/assets/MenuIcons/Secondary/Partners.png new file mode 100644 index 0000000..1c0d702 Binary files /dev/null and b/src/assets/MenuIcons/Secondary/Partners.png differ diff --git a/src/assets/MenuIcons/Secondary/PersonalComputer.png b/src/assets/MenuIcons/Secondary/PersonalComputer.png new file mode 100644 index 0000000..f491e74 Binary files /dev/null and b/src/assets/MenuIcons/Secondary/PersonalComputer.png differ diff --git a/src/assets/MenuIcons/Secondary/QuickDemonstrations.png b/src/assets/MenuIcons/Secondary/QuickDemonstrations.png new file mode 100644 index 0000000..418df64 Binary files /dev/null and b/src/assets/MenuIcons/Secondary/QuickDemonstrations.png differ diff --git a/src/assets/MenuIcons/Secondary/QuickFavorites.png b/src/assets/MenuIcons/Secondary/QuickFavorites.png new file mode 100644 index 0000000..3f70ee1 Binary files /dev/null and b/src/assets/MenuIcons/Secondary/QuickFavorites.png differ diff --git a/src/assets/MenuIcons/蓝猫.png b/src/assets/MenuIcons/蓝猫.png new file mode 100644 index 0000000..32d2123 Binary files /dev/null and b/src/assets/MenuIcons/蓝猫.png differ diff --git a/src/assets/MenuIcons/蓝白猫.png b/src/assets/MenuIcons/蓝白猫.png new file mode 100644 index 0000000..62e62e2 Binary files /dev/null and b/src/assets/MenuIcons/蓝白猫.png differ diff --git a/src/assets/MenuIcons/银渐层.png b/src/assets/MenuIcons/银渐层.png new file mode 100644 index 0000000..dfd8aed Binary files /dev/null and b/src/assets/MenuIcons/银渐层.png differ diff --git a/src/assets/login.png b/src/assets/login.png new file mode 100644 index 0000000..fd4b19d Binary files /dev/null and b/src/assets/login.png differ diff --git a/src/assets/logos/i3v-logo-single-flat.png b/src/assets/logos/i3v-logo-single-flat.png new file mode 100644 index 0000000..69f0e69 Binary files /dev/null and b/src/assets/logos/i3v-logo-single-flat.png differ diff --git a/src/assets/logos/i3v-logo-single.png b/src/assets/logos/i3v-logo-single.png new file mode 100644 index 0000000..e866f94 Binary files /dev/null and b/src/assets/logos/i3v-logo-single.png differ diff --git a/src/assets/logos/i3v-logo.png b/src/assets/logos/i3v-logo.png new file mode 100644 index 0000000..7f1f822 Binary files /dev/null and b/src/assets/logos/i3v-logo.png differ diff --git a/src/auth/AuthHelper.js b/src/auth/AuthHelper.js new file mode 100644 index 0000000..9cf595c --- /dev/null +++ b/src/auth/AuthHelper.js @@ -0,0 +1,38 @@ +/* + * @Author: Billy + * @Date: 2021-09-12 21:49:24 + * @LastEditors: Billy + * @LastEditTime: 2021-09-17 09:22:22 + * @Description: 请输入 + */ + +import LoginInfo from "../storage/login-info.js" + +/** + * 检查当前用户是否具有某种权限,或某几种权限中的一种 + * @param {string|Array.} paramValue 权限code或权限code的数组 + * @returns + */ +function checkAuth(paramValue) { + if (paramValue) { + let auths = LoginInfo.getRbacFromToken().getCleanAuths(); + + if (typeof paramValue === 'string') { + if (auths.includes(paramValue)) return true; + else return false; + } else if (Array.isArray(paramValue)) { + for (const pv of paramValue) { + if (auths.includes(pv)) return true; + } + return false; + } else { + return false; + } + } else { + return true; + } +} + +export default { + checkAuth +} \ No newline at end of file diff --git a/src/biz/Back/Log.js b/src/biz/Back/Log.js new file mode 100644 index 0000000..1a85be9 --- /dev/null +++ b/src/biz/Back/Log.js @@ -0,0 +1,70 @@ +/* + * @Author: Guanghao + * @Date: 2022-01-05 18:48:51 + * @LastEditors: Guanghao + * @LastEditTime: 2022-01-05 18:53:10 + * @Description: 日志相关数据请求和处理逻辑 + */ + +/** + * @description 查询操作日志列表 + * @returns {Array.} 日志对象数组 + */ + +async function findByAction() { + return [ + { + user: '张三', + time: '2021-12-31 18:40:11', + module: '演示方案', + position: '101主题', + action: '编辑' + }, + { + user: '张三', + time: '2021-12-31 18:40:11', + module: '演示方案', + position: '101主题', + action: '编辑' + }, + { + user: '张三', + time: '2021-12-31 18:40:11', + module: '演示方案', + position: '101主题', + action: '编辑' + }, + ] +} + +/** + * @description 查询登录日志列表 + * @returns {Array.} 日志对象数组 + */ +async function findByLogin() { + return [ + { + user: '张三', + time: '2021-12-31 18:43:55', + result: '成功', + ip: '192.168.0.0.228' + }, + { + user: '张三', + time: '2021-12-31 18:43:55', + result: '成功', + ip: '192.168.0.0.228' + }, + { + user: '张三', + time: '2021-12-31 18:43:55', + result: '成功', + ip: '192.168.0.0.228' + }, + ] +} + +export default { + findByAction, + findByLogin +} diff --git a/src/biz/Back/_Menu.js b/src/biz/Back/_Menu.js new file mode 100644 index 0000000..e00e32e --- /dev/null +++ b/src/biz/Back/_Menu.js @@ -0,0 +1,67 @@ +/* + * @Author: Billy + * @Date: 2021-12-31 14:31:45 + * @LastEditors: Billy + * @LastEditTime: 2022-01-04 14:00:53 + * @Description: 请输入 + */ +import MenuItem from "../../entity/Ui/Menu/MenuItem.js"; + +async function getBackMenuItems() { + return [ + new MenuItem({ + title: '组织架构', + iconClass: 'el-icon-s-operation', + routerName: 'Org', + }), + new MenuItem({ + title: '角色管理', + iconClass: 'el-icon-user', + routerName: 'Role', + }), + new MenuItem({ + title: '分类管理', + iconClass: 'el-icon-film', + routerName: 'Classification', + }), + new MenuItem({ + title: '数据统计', + iconClass: 'el-icon-s-data', + routerName: 'Statistics', + }), + new MenuItem({ + title: '专题管理', + iconClass: 'el-icon-edit-outline', + routerName: 'Topic', + }), + new MenuItem({ + title: '平台设置', + iconClass: 'el-icon-setting', + routerName: 'PlatformSetting', + }), + new MenuItem({ + title: '授权管理', + iconClass: 'el-icon-finished', + routerName: 'Authorization', + children: [ + new MenuItem({ + title: '合作伙伴授权管理', + routerName: 'Authorization4Partner', + }), + new MenuItem({ + title: '客户授权管理', + routerName: 'Authorization4Customer', + }) + ] + }), + new MenuItem({ + title: '系统日志', + iconClass: 'el-icon-notebook-2', + routerName: 'Log', + }), + ]; +} + +export default { + getBackMenuItems +}; \ No newline at end of file diff --git a/src/biz/Menu.js b/src/biz/Menu.js new file mode 100644 index 0000000..ceb1904 --- /dev/null +++ b/src/biz/Menu.js @@ -0,0 +1,118 @@ +/* + * @Author: Billy + * @Date: 2021-12-18 02:20:09 + * @LastEditors: Billy + * @LastEditTime: 2022-01-07 16:40:08 + * @Description: 请输入 + */ + +import MenuItem from "../entity/Ui/Menu/MenuItem.js"; + +async function getMainMenuItems() { + return [ + // 内部标签 + new MenuItem({ + id: 'ProductAndCases', + title: '产品案例', + iconSrc: require("../assets/MenuIcons/Main/ProductAndCases1.png"), + iconSrcInactive: require("../assets/MenuIcons/Main/ProductAndCases2.png"), + routerName: 'ProductAndCases', + }), + // 内部标签 + new MenuItem({ + id: 'Solutions', + title: '解决方案', + iconSrc: require("../assets/MenuIcons/Main/Solutions1.png"), + iconSrcInactive: require("../assets/MenuIcons/Main/Solutions2.png"), + routerName: 'Solutions', + }), + // 内部标签 + new MenuItem({ + id: 'Demonstrations', + title: '演示方案', + iconSrc: require("../assets/MenuIcons/Main/Demonstrations1.png"), + iconSrcInactive: require("../assets/MenuIcons/Main/Demonstrations2.png"), + routerName: 'Demonstrations', + }), + // 内部标签 + new MenuItem({ + id: 'SalesResources', + title: '销售资源', + iconSrc: require("../assets/MenuIcons/Main/SalesResources1.png"), + iconSrcInactive: require("../assets/MenuIcons/Main/SalesResources2.png"), + routerName: 'SalesResources', + }), + // 内部标签 + new MenuItem({ + id: 'PersonalSpace', + title: '个人空间', + iconSrc: require("../assets/MenuIcons/Main/PersonalSpace1.png"), + iconSrcInactive: require("../assets/MenuIcons/Main/PersonalSpace2.png"), + routerName: 'PersonalSpace', + }), + // popover + new MenuItem({ + id: 'More', + title: '更多', + iconSrc: require("../assets/MenuIcons/Main/More1.png"), + iconSrcInactive: require("../assets/MenuIcons/Main/More2.png"), + // routerName: 'More', + }), + ] +} + +async function getSecondaryMenuItems() { + return [ + // 抽屉 + new MenuItem({ + id: 'QuickFavorites', + title: '快捷收藏', + iconSrc: require("../assets/MenuIcons/Secondary/QuickFavorites.png"), + // routerName: 'QuickFavorites', + drawerName: 'QuickFavorites' + }), + // 内部标签 + new MenuItem({ + id: 'QuickDemonstrations', + title: '快捷演示方案', + iconSrc: require("../assets/MenuIcons/Secondary/QuickDemonstrations.png"), + routerName: 'QuickDemonstrations', + }), + // 抽屉 + new MenuItem({ + id: 'Clients', + title: '客户列表', + iconSrc: require("../assets/MenuIcons/Secondary/Clients.png"), + // routerName: 'Clients', + drawerName: 'Clients' + }), + // 抽屉 + new MenuItem({ + id: 'Partners', + title: '合作伙伴', + iconSrc: require("../assets/MenuIcons/Secondary/Partners.png"), + // routerName: 'Partners', + drawerName: 'Partners' + }), + // 抽屉 + new MenuItem({ + id: 'PersonalComputer', + title: '我的电脑', + iconSrc: require("../assets/MenuIcons/Secondary/PersonalComputer.png"), + // routerName: 'PersonalComputer', + drawerName: 'PersonalComputer' + }), + // 内部标签 + new MenuItem({ + id: 'CloudDesktop', + title: '云桌面', + iconSrc: require("../assets/MenuIcons/Secondary/CloudDesktop.png"), + routerName: 'CloudDesktop', + }), + ] +} + +export default { + getMainMenuItems, + getSecondaryMenuItems +}; \ No newline at end of file diff --git a/src/biz/Rbac/OrgAndUser.js b/src/biz/Rbac/OrgAndUser.js new file mode 100644 index 0000000..64c71ee --- /dev/null +++ b/src/biz/Rbac/OrgAndUser.js @@ -0,0 +1,59 @@ +/* + * @Author: Billy + * @Date: 2022-01-04 17:33:57 + * @LastEditors: Billy + * @LastEditTime: 2022-01-05 10:44:18 + * @Description: 请输入 + */ + +import User from "../../entity/Rbac/User.js"; +import PageResult from "../../entity/_Common/PageResult.js" + +/** + * @description 某部门添加一个已存在的用户/移动用户(移动用户:把某用户从某部门移动到另一部门) + * @param {string} orgId 目标部门id + * @param {string} userId 用户id + * @returns {User} 用户对象 + */ +async function relateUser(orgId, userId) { + return new User({ + id: 'a', + token: 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2NDA2Mjc3ODMsInVzZXJuYW1lIjoiMTcxNTk2NTMzOTAifQ.V9Bf0nlpf-QYdEGP2Eu6-U0VXZvuwFEN0fNtmeQxmUI', + username: '张三', + realname: '张三', + }); +} + +/** + * @description 根据部门id分页查找部门内用户列表(也可获取到不在组织架构内的用户) + * @param {string} orgId 部门id(可以传null或者不传,这样会获取到不在组织架构内的用户) + * @param {number} pageSize 每页大小 + * @param {number} pageNum 第几页 + * @param {string} orderBy 排序依据字段 + * @param {string} direction 排序顺序(ASC, DESC) + * @returns {Array.} 用户列表 + */ +async function findUsersByOrgIdAndByPage(orgId, pageSize = 10, pageNum = 1, orderBy = 'id', direction = 'ASC') { + return new PageResult([ + new User({ + id: 'a', + createTime: '2022-01-01 10:00:00', + token: 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2NDA2Mjc3ODMsInVzZXJuYW1lIjoiMTcxNTk2NTMzOTAifQ.V9Bf0nlpf-QYdEGP2Eu6-U0VXZvuwFEN0fNtmeQxmUI', + username: '张三', + realname: '张三', + }), + new User({ + id: 'b', + createTime: '2022-01-02 10:00:00', + token: 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2NDA2Mjc3ODMsInVzZXJuYW1lIjoiMTcxNTk2NTMzOTAifQ.V9Bf0nlpf-QYdEGP2Eu6-U0VXZvuwFEN0fNtmeQxmUI', + username: '李四', + realname: '李四', + }) + ], 20); +} + + +export default { + relateUser, + findUsersByOrgIdAndByPage +} \ No newline at end of file diff --git a/src/biz/Rbac/Organization.js b/src/biz/Rbac/Organization.js new file mode 100644 index 0000000..bd9b645 --- /dev/null +++ b/src/biz/Rbac/Organization.js @@ -0,0 +1,99 @@ +/* + * @Author: Billy + * @Date: 2022-01-04 16:49:56 + * @LastEditors: Billy + * @LastEditTime: 2022-01-05 00:56:05 + * @Description: 请输入 + */ + +import Organization from "../../entity/Rbac/Organization.js"; + +/** + * @description 创建一个部门 + * @param {string} parentId 父部门id(null代表根节点) + * @param {string} name 部门名称 + * @returns {Organization} 部门对象 + */ +async function add(parentId, name) { + return new Organization({ + id: 'a', + name: '新部门' + }); +} + +/** + * @description 修改一个部门信息 + * @param {string} id 部门id + * @param {string} name 部门名称 + * @returns {number} 成功操作的个数 + */ +async function update(id, name) { + return 1; +} + +/** + * @description 移动部门到其它父部门 + * @param {string} id 部门id + * @param {string} parentId 目标父部门id + * @returns {Organization} 部门对象 + */ +async function move(id, parentId) { + return new Organization({ + id: 'a', + name: '开发部' + }); +} + +/** + * @description 通过name获取部门数组 + * @param {string} name 部门id + * @returns {Array.} 部门对象数组 + */ +async function findByName(name) { + return [ + new Organization({ + id: 'a', + name: '开发部' + }), + ]; +} + +/** + * @description 获取某部门下所有层级的子部门 + * @param {number} id 部门id + * @returns {Array.} 部门对象数组 + */ +async function getAllNodes(id) { + return [ + new Organization({ + id: 'a', + name: '开发部' + }), + new Organization({ + id: 'b', + name: '产品部' + }), + new Organization({ + id: 'c', + name: '测试部' + }) + ]; +} + +/** + * @description 通过id删除某部门 + * @param {string} id 部门id + * @returns {number} 成功操作的个数 + */ +async function delById(id) { + return 1; +} + +export default { + add, + update, + move, + findByName, + getAllNodes, + delById +} \ No newline at end of file diff --git a/src/biz/Rbac/Role.js b/src/biz/Rbac/Role.js new file mode 100644 index 0000000..2527350 --- /dev/null +++ b/src/biz/Rbac/Role.js @@ -0,0 +1,74 @@ +/* + * @Author: Guanghao + * @Date: 2022-01-04 18:01:37 + * @LastEditors: Guanghao + * @LastEditTime: 2022-01-05 18:10:49 + * @Description: 角色相关数据请求和处理逻辑 + */ + +import Role from '../../entity/Rbac/Role.js' + +/** + * @description 按角色名称模糊查询,不传或传''可查所有角色 + * @returns {Array.} 角色对象数组 + */ +async function findByName(name = '') { + return [ + new Role({ + id: 1, + name: '产品管理员', + description: '产品管理员说明' + }), + new Role({ + id: 2, + name: '超级管理员', + description: '超级管理员说明' + }), + new Role({ + id: 3, + name: '方案管理员', + description: '方案管理员说明' + }), + ] +} + +/** + * @description 新建角色 + * @param {string} name 角色名称 + * @param {string} description 角色说明 + * @returns {Role} 返回新建的角色 + */ +async function add(name, description) { + return new Role({ + id: 4, + name, + description + }) +} + +/** + * @description 编辑角色 + * @param {number} id 角色id + * @param {string} name 角色名称 + * @param {string} description 角色说明 + * @returns {number} 成功更新个数 + */ +async function update(id, name, description) { + return 1 +} + +/** + * @description 删除角色 + * @param {number} id 角色id + * @returns {number} 成功删除个数 + */ +async function delById(id) { + return 1 +} + +export default { + findByName, + add, + update, + delById +} \ No newline at end of file diff --git a/src/biz/Rbac/User.js b/src/biz/Rbac/User.js new file mode 100644 index 0000000..e84bfd8 --- /dev/null +++ b/src/biz/Rbac/User.js @@ -0,0 +1,171 @@ +/* + * @Author: Billy + * @Date: 2022-01-04 16:50:54 + * @LastEditors: Billy + * @LastEditTime: 2022-01-10 20:28:39 + * @Description: 请输入 + */ + +import User from "../../entity/Rbac/User.js"; +import CommonResult from "../../entity/_Common/CommonResult.js"; +import UserLoginApi from "../../api/Rbac/UserLogin.js" + +/** + * @description 登录方法 + * @param {string} username 用户名(必填) + * @param {string} password 密码(必填) + * @param {string} captcha 验证码(非必填) + * @param {string} checkKey 验证码key(非必填) + * @returns {User} 用户类 + */ +async function login({ + username, + password, + captcha, + checkKey +}) { + // ----------以下是测试数据---------- + + const user = new User({ + id: 'a', + token: 't-o-k-e-n', + username: 'tom', + realname: '张三', + }); + + return user; + + // ----------以上是测试数据---------- + + // const _user = await UserLoginApi.login({ + // username, + // password, + // captcha, + // checkKey + // }); + + // const user = new User({ + // id: _user.userInfo.id, + // token: _user.token, + // username: _user.userInfo.username, + // realname: _user.userInfo.realname, + // }); + + // return user; +} + +/** + * @description 退出登录方法 + */ +async function logout() { + // ----------以下是测试数据---------- + + return new CommonResult(true, '退出登录成功'); + + // ----------以上是测试数据---------- + + // const _result = await UserLoginApi.logout(); + // return new CommonResult(_result.success, _result.message); +} + +/** + * @description 根据用户名称模糊查询(不传或传''可查所有用户) + * @param {string} name 用户名 + * @returns {Array.} 用户列表 + */ +async function findByName(name = '') { + return [{ + name: "李杰", + department: "战略支持部", + role: "系统管理员", + status: "正常", + }, + { + name: "李杰", + department: "战略支持部", + role: "系统管理员", + status: "正常", + }, + { + name: "李杰", + department: "战略支持部", + role: "系统管理员", + status: "正常", + }, + { + name: "李杰", + department: "战略支持部", + role: "系统管理员", + status: "异常", + }, + ] +} + +/** + * @description 添加一个用户 + * @param {string} name 用户名 + * @param {string} password 密码(5-18位,可由数字、大小写字母组成) + * @param {string} realName 真实姓名 + * @param {string} telephone 手机号 + * @param {string} email 邮箱号 + * @param {string} orgId 组织架构id(不传或传null则新建的用户不在组织架构内) + * @returns {string} 添加成功后的用户的id + */ +async function add({ + name, + password, + realName, + telephone, + email, + orgId +}) { + return 'a'; +} + +/** + * @description 修改用户信息 + * @param {string} id 用户id + * @param {string} name 用户名 + * @param {string} password 密码(5-18位,可由数字、大小写字母组成) + * @param {string} realName 真实姓名 + * @param {string} telephone 手机号 + * @param {string} email 邮箱号 + * @returns 成功修改的个数 + */ +async function update({ + id, + name, + softDelete, + realName, + telephone, + email +}) { + return 1; +} + +/** + * @description 通过id删除用户 + * @param {string} id 用户id + * @returns 成功删除的个数 + */ +async function delById(id) { + return 1; +} + +/** + * @description 获取所有用户数量 + * @returns 用户数量 + */ +async function countAll() { + return 3; +} + +export default { + login, + logout, + findByName, + add, + update, + delById, + countAll +} \ No newline at end of file diff --git a/src/biz/readme.txt b/src/biz/readme.txt new file mode 100644 index 0000000..faef3ee --- /dev/null +++ b/src/biz/readme.txt @@ -0,0 +1,9 @@ + + +如果一个常用业务需要用到多个api函数,建议在此封装 \ No newline at end of file diff --git a/src/components/Back/Header.vue b/src/components/Back/Header.vue new file mode 100644 index 0000000..afcc323 --- /dev/null +++ b/src/components/Back/Header.vue @@ -0,0 +1,218 @@ + + + + diff --git a/src/components/Back/Menu(backup).vue b/src/components/Back/Menu(backup).vue new file mode 100644 index 0000000..8663a4b --- /dev/null +++ b/src/components/Back/Menu(backup).vue @@ -0,0 +1,195 @@ + + + + + + \ No newline at end of file diff --git a/src/components/Back/Menu.vue b/src/components/Back/Menu.vue new file mode 100644 index 0000000..fbb96c6 --- /dev/null +++ b/src/components/Back/Menu.vue @@ -0,0 +1,96 @@ + + + + + \ No newline at end of file diff --git a/src/components/Home/Header.vue b/src/components/Home/Header.vue new file mode 100644 index 0000000..1421a1f --- /dev/null +++ b/src/components/Home/Header.vue @@ -0,0 +1,294 @@ + + + + + + + diff --git a/src/components/Home/Header2.vue b/src/components/Home/Header2.vue new file mode 100644 index 0000000..b7f77cd --- /dev/null +++ b/src/components/Home/Header2.vue @@ -0,0 +1,113 @@ + + + + + + diff --git a/src/components/Home/Menu.vue b/src/components/Home/Menu.vue new file mode 100644 index 0000000..ce96d12 --- /dev/null +++ b/src/components/Home/Menu.vue @@ -0,0 +1,186 @@ + + + + + + \ No newline at end of file diff --git a/src/components/Home/SysInfo.vue b/src/components/Home/SysInfo.vue new file mode 100644 index 0000000..0811529 --- /dev/null +++ b/src/components/Home/SysInfo.vue @@ -0,0 +1,39 @@ + + + + \ No newline at end of file diff --git a/src/components/Home/UserInfo.vue b/src/components/Home/UserInfo.vue new file mode 100644 index 0000000..5572a9b --- /dev/null +++ b/src/components/Home/UserInfo.vue @@ -0,0 +1,11 @@ + + + \ No newline at end of file diff --git a/src/components/Rbac/Organization/OrgAdd.vue b/src/components/Rbac/Organization/OrgAdd.vue new file mode 100644 index 0000000..f3573d7 --- /dev/null +++ b/src/components/Rbac/Organization/OrgAdd.vue @@ -0,0 +1,99 @@ + + + + \ No newline at end of file diff --git a/src/components/Rbac/Organization/OrgEdit.vue b/src/components/Rbac/Organization/OrgEdit.vue new file mode 100644 index 0000000..6e739c5 --- /dev/null +++ b/src/components/Rbac/Organization/OrgEdit.vue @@ -0,0 +1,105 @@ + + + + \ No newline at end of file diff --git a/src/components/Rbac/Organization/OrgMove.vue b/src/components/Rbac/Organization/OrgMove.vue new file mode 100644 index 0000000..e727b28 --- /dev/null +++ b/src/components/Rbac/Organization/OrgMove.vue @@ -0,0 +1,161 @@ + + + + \ No newline at end of file diff --git a/src/components/Rbac/Role/RoleAdd.vue b/src/components/Rbac/Role/RoleAdd.vue new file mode 100644 index 0000000..6ed427e --- /dev/null +++ b/src/components/Rbac/Role/RoleAdd.vue @@ -0,0 +1,80 @@ + + + + + + + diff --git a/src/components/Rbac/Role/RoleEdit.vue b/src/components/Rbac/Role/RoleEdit.vue new file mode 100644 index 0000000..b19734b --- /dev/null +++ b/src/components/Rbac/Role/RoleEdit.vue @@ -0,0 +1,93 @@ + + + + + + + diff --git a/src/components/Rbac/User/UserAdd.vue b/src/components/Rbac/User/UserAdd.vue new file mode 100644 index 0000000..9917d60 --- /dev/null +++ b/src/components/Rbac/User/UserAdd.vue @@ -0,0 +1,121 @@ + + + + + + + diff --git a/src/components/Rbac/User/UserList4Org.vue b/src/components/Rbac/User/UserList4Org.vue new file mode 100644 index 0000000..a1547a0 --- /dev/null +++ b/src/components/Rbac/User/UserList4Org.vue @@ -0,0 +1,381 @@ + + + + + + diff --git a/src/components/Rbac/User/UserMove.vue b/src/components/Rbac/User/UserMove.vue new file mode 100644 index 0000000..11b86c7 --- /dev/null +++ b/src/components/Rbac/User/UserMove.vue @@ -0,0 +1,157 @@ + + + + \ No newline at end of file diff --git a/src/components/SystemViews/Error.vue b/src/components/SystemViews/Error.vue new file mode 100644 index 0000000..76f7d85 --- /dev/null +++ b/src/components/SystemViews/Error.vue @@ -0,0 +1,84 @@ + + + \ No newline at end of file diff --git a/src/components/SystemViews/NotFound.vue b/src/components/SystemViews/NotFound.vue new file mode 100644 index 0000000..7f7d518 --- /dev/null +++ b/src/components/SystemViews/NotFound.vue @@ -0,0 +1,74 @@ + + + \ No newline at end of file diff --git a/src/components/_Common/Ckeditor4.vue b/src/components/_Common/Ckeditor4.vue new file mode 100644 index 0000000..87be379 --- /dev/null +++ b/src/components/_Common/Ckeditor4.vue @@ -0,0 +1,81 @@ + + + + + + \ No newline at end of file diff --git a/src/components/_Common/Dialog.vue b/src/components/_Common/Dialog.vue new file mode 100644 index 0000000..f0e3b05 --- /dev/null +++ b/src/components/_Common/Dialog.vue @@ -0,0 +1,47 @@ + + + + + + + diff --git a/src/components/_Common/Drag/Draggable.vue b/src/components/_Common/Drag/Draggable.vue new file mode 100644 index 0000000..4ff30a1 --- /dev/null +++ b/src/components/_Common/Drag/Draggable.vue @@ -0,0 +1,327 @@ + + + + + \ No newline at end of file diff --git a/src/components/_Common/Drag/DraggableDialog.vue b/src/components/_Common/Drag/DraggableDialog.vue new file mode 100644 index 0000000..a8241a0 --- /dev/null +++ b/src/components/_Common/Drag/DraggableDialog.vue @@ -0,0 +1,196 @@ + + + + \ No newline at end of file diff --git a/src/components/_Common/Icon.vue b/src/components/_Common/Icon.vue new file mode 100644 index 0000000..564fd4f --- /dev/null +++ b/src/components/_Common/Icon.vue @@ -0,0 +1,75 @@ + + + + + \ No newline at end of file diff --git a/src/components/_Common/LightSplit.vue b/src/components/_Common/LightSplit.vue new file mode 100644 index 0000000..ba98913 --- /dev/null +++ b/src/components/_Common/LightSplit.vue @@ -0,0 +1,107 @@ + + + + + + + \ No newline at end of file diff --git a/src/components/_Common/Sliders.vue b/src/components/_Common/Sliders.vue new file mode 100644 index 0000000..d1c825f --- /dev/null +++ b/src/components/_Common/Sliders.vue @@ -0,0 +1,386 @@ + + + + + \ No newline at end of file diff --git a/src/components/_Common/Tab/TabViewer2.vue b/src/components/_Common/Tab/TabViewer2.vue new file mode 100644 index 0000000..feae8c7 --- /dev/null +++ b/src/components/_Common/Tab/TabViewer2.vue @@ -0,0 +1,162 @@ + + + + + \ No newline at end of file diff --git a/src/components/_Common/Tree/TreeNodeWith3Dots.vue b/src/components/_Common/Tree/TreeNodeWith3Dots.vue new file mode 100644 index 0000000..1830dcd --- /dev/null +++ b/src/components/_Common/Tree/TreeNodeWith3Dots.vue @@ -0,0 +1,172 @@ + + + + \ No newline at end of file diff --git a/src/components/_Common/UploadBtn.vue b/src/components/_Common/UploadBtn.vue new file mode 100644 index 0000000..243800b --- /dev/null +++ b/src/components/_Common/UploadBtn.vue @@ -0,0 +1,173 @@ + + + + + \ No newline at end of file diff --git a/src/components/_Common/UploadPane.vue b/src/components/_Common/UploadPane.vue new file mode 100644 index 0000000..cf306c6 --- /dev/null +++ b/src/components/_Common/UploadPane.vue @@ -0,0 +1,88 @@ + + + + + \ No newline at end of file diff --git a/src/components/_Common/Videojs.vue b/src/components/_Common/Videojs.vue new file mode 100644 index 0000000..2270a75 --- /dev/null +++ b/src/components/_Common/Videojs.vue @@ -0,0 +1,208 @@ + + + + + + + diff --git a/src/const.js b/src/const.js new file mode 100644 index 0000000..3dcf83a --- /dev/null +++ b/src/const.js @@ -0,0 +1,62 @@ +/* + * @Author: Billy + * @Date: 2020-09-10 09:49:13 + * @LastEditors: Billy + * @LastEditTime: 2022-01-10 20:46:06 + * @Description: 配置文件 + */ +export const PROJECT_NAME = '销售'; +export const TOKEY_ATTR_NAME = 'X-Access-Token'; // TOKEN的属性名(即客户端传token到服务端,token的属性名) +export const IS_LOGIN_NEEDED = true; // 系统是否需要登录后使用 + +let baseUrl; // 基础API地址 +switch (process.env.NODE_ENV) { + case "production": // 发布到服务器 npm run build + baseUrl = 'http://ty.y68.fun/sales-expo-saas'; // swagger http://ty.y68.fun/sales-expo-saas/#/ + break; + case "preview": // 发布前预览 npm run preview + baseUrl = 'http://ty.y68.fun/sales-expo-saas'; // swagger http://ty.y68.fun/sales-expo-saas/#/ + break; + case "development": // 本机前端开发调试 npm run serve + default: + baseUrl = 'http://ty.y68.fun/sales-show-3'; // swagger http://ty.y68.fun/sales-expo-saas/#/ + // baseUrl = '/api'; + break; +} +export const BASE_URL = baseUrl; + +export const TIMEOUT = 10000; // 一般请求超时时间 +export const UPLOAD_TIMEOUT = 0; // 指定文件上传请求超时的毫秒数(0 表示无超时时间) + +// ---------- EIM -------------------------------------------------- +// export const BASE_BOS_URL = 'http://eim.beta.i3vgroup.cn:8080'; +// export const BASE_3D_URL = 'http://eim.beta.i3vgroup.cn:82'; +// export const APP_KEY = 'k4718b198e0b41c2abf4069dcb47eecf'; +// export const EIM_USER_NAME = 'test01'; +// export const EIM_PASSWORD = '123456'; + +// export const IFRAME_NAME = "iframe-viewer-eim-0225.html"; // iframe的html的名称 +// export const IFRAME_2D_NAME = "iframe-viewer-2d.html"; // iframe的html的名称 + +// export const UPLOAD_MODEL_MAX_SIZE = 100; // 上传模型的最大允许大小,单位mb +// export const DOWNLOAD_CANCEL = "DOWNLOAD_CANCEL"; // 用于专门指示axios的cancel token取消下载的操作 + +// // 示例模型的信息 +// export const EXAMPLE_MODEL_INFO = { +// base3dUrl: 'http://eim.i3vgroup.cn:8081', +// appKey: 'fd5ba6a10c4b429faef65117aba2a25a', +// projectKey: 'p30faf7851d042a08290fb8ea5e18841', +// modelKeys: ['M1616334467556'], +// } +// ---------- EIM -------------------------------------------------- + +export const DEFAULT_HOME_LAYOUT = ['top-bottom', 'left-right'][0]; // 网站前台是上下布局还是左右布局 +export const DEFAULT_BACK_LAYOUT = ['top-bottom', 'left-right'][0]; // 网站后台是上下布局还是左右布局 +export const HEADER_THICKNESS = 48; // 首页头部尺寸(单位:像素) +export const HIDE_DRAWER_WHEN_PUSH = false; // 当跳转页面时,抽屉是否隐藏 + +// 弹框类型 +export const DIALOG_TYPE = { + ADD: 'add', // 添加(新建) + EDIT: 'edit', // 编辑(更新) +} \ No newline at end of file diff --git a/src/entity/Rbac/Organization.js b/src/entity/Rbac/Organization.js new file mode 100644 index 0000000..464999e --- /dev/null +++ b/src/entity/Rbac/Organization.js @@ -0,0 +1,25 @@ +/* + * @Author: Billy + * @Date: 2021-12-29 17:46:53 + * @LastEditors: Billy + * @LastEditTime: 2022-01-05 15:43:38 + * @Description: 请输入 + */ + +import Parent from '../_Common/Parent.js' + +class Organization extends Parent { + /** + * @description 组织架构的节点 + * @param {string} name 部门名称 + */ + constructor({ + name, + ...rest + }) { + super(rest); + this.name = name; + } +} + +export default Organization \ No newline at end of file diff --git a/src/entity/Rbac/Role.js b/src/entity/Rbac/Role.js new file mode 100644 index 0000000..e0dab3f --- /dev/null +++ b/src/entity/Rbac/Role.js @@ -0,0 +1,28 @@ +/* + * @Author: Guanghao + * @Date: 2022-01-04 18:07:13 + * @LastEditors: Guanghao + * @LastEditTime: 2022-01-04 18:36:29 + * @Description: 角色类定义 + */ + +class Role { + /** + * @description 创建角色类 + * @param {number} id 角色id + * @param {string} name 角色名称 + * @param {string} description 角色说明 + * @param {string} auths 角色权限 + */ + constructor({ + id, + name, + description + }) { + this.id = id + this.name = name + this.description = description + } +} + +export default Role \ No newline at end of file diff --git a/src/entity/Rbac/TokenPayload.js b/src/entity/Rbac/TokenPayload.js new file mode 100644 index 0000000..0d0c04a --- /dev/null +++ b/src/entity/Rbac/TokenPayload.js @@ -0,0 +1,32 @@ +/* + * @Author: Billy + * @Date: 2021-07-11 22:41:51 + * @LastEditors: Billy + * @LastEditTime: 2022-01-05 00:45:33 + * @Description: Json Web Token 的 payload 的格式(v1.0) + */ + +class TokenPayload { + /** + * @description Json Web Token 的 payload 的格式 + * @param {string} uid 用户的id + * @param {Array.} roles 角色id的数组 + * @param {Array.>} auths 权限code的二维数组,内层数组与角色id的数组元素一一对应 + */ + constructor(uid, roles = [], auths = []) { + this.uid = uid; + this.roles = roles; + this.auths = auths; + } + + /** + * 二维数组转一维,并去重 + */ + getCleanAuths() { + let arr = []; + this.auths.forEach(_auths => arr = arr.concat(_auths)); + return [...new Set(arr)]; + } +} + +module.exports = TokenPayload \ No newline at end of file diff --git a/src/entity/Rbac/User.js b/src/entity/Rbac/User.js new file mode 100644 index 0000000..08d3616 --- /dev/null +++ b/src/entity/Rbac/User.js @@ -0,0 +1,34 @@ +/* + * @Author: Billy + * @Date: 2021-06-20 01:04:22 + * @LastEditors: Billy + * @LastEditTime: 2022-01-05 15:40:14 + * @Description: 用户类 + */ + +import Parent from '../_Common/Parent.js' + +class User extends Parent { + /** + * @description 创建用户类 + * @param {string} token 登录凭据 + * @param {string} username 登录用户名 + * @param {string} realname 登录用户名 + * @param {boolean} isRememberMe 是否记住我 + */ + constructor({ + token, + username, + realname, + isRememberMe = true, // 是否记住我,是则记在localStorage,否则记在sessionStorage + ...rest + }) { + super(rest); + this.token = token; + this.username = username; + this.realname = realname; + this.isRememberMe = isRememberMe; + } +} + +export default User \ No newline at end of file diff --git a/src/entity/Ui/Menu/MenuItem.js b/src/entity/Ui/Menu/MenuItem.js new file mode 100644 index 0000000..9f25596 --- /dev/null +++ b/src/entity/Ui/Menu/MenuItem.js @@ -0,0 +1,45 @@ +/* + * @Author: Billy + * @Date: 2021-12-18 01:56:48 + * @LastEditors: Billy + * @LastEditTime: 2022-01-07 16:39:27 + * @Description: 请输入 + */ + +class MenuItem { + /** + * 菜单栏按钮对象类 + * @param {string} id 全局唯一标记 + * @param {string} title 标题 + * @param {string} iconSrc 主图标图片的加载地址 + * @param {string} iconSrcInactive 非激活图标图片的加载地址 + * @param {string} iconClass 图标的类名(包括 element ui 的图标的类名) + * @param {string} routerName 按钮对应的路由名称(点击后跳转的目标路由名称) + * @param {string} drawerName 按钮对应的抽屉名称(点击后加载的目标抽屉名称) + * @param {object} params 路由param + * @param {Array.} children 子菜单栏对象数组 + */ + constructor({ + id, + title, + iconSrc, + iconSrcInactive, + iconClass, + routerName, + drawerName, + params, + children = [] + }) { + this.id = id; + this.title = title; + this.iconSrc = iconSrc; + this.iconSrcInactive = iconSrcInactive; + this.iconClass = iconClass; + this.routerName = routerName; + this.drawerName = drawerName; + this.params = params; + this.children = children; + } +} + +export default MenuItem \ No newline at end of file diff --git a/src/entity/Ui/Menu/readme.md b/src/entity/Ui/Menu/readme.md new file mode 100644 index 0000000..1cb2c12 --- /dev/null +++ b/src/entity/Ui/Menu/readme.md @@ -0,0 +1,9 @@ + + +本文件夹存放与系统的菜单栏有关的对象类型 \ No newline at end of file diff --git a/src/entity/Ui/Tab/Tab.js b/src/entity/Ui/Tab/Tab.js new file mode 100644 index 0000000..fc8b3f5 --- /dev/null +++ b/src/entity/Ui/Tab/Tab.js @@ -0,0 +1,21 @@ +/* + * @Author: Billy + * @Date: 2021-12-23 01:22:12 + * @LastEditors: Billy + * @LastEditTime: 2022-01-04 22:02:35 + * @Description: 请输入 + */ + +class Tab { + /** + * @description 标签栏的每个标签 + * @param {string} title 标题 + */ + constructor({ + title + }) { + this.title = title; + } +} + +export default Tab; \ No newline at end of file diff --git a/src/entity/_Common/CommonResult.js b/src/entity/_Common/CommonResult.js new file mode 100644 index 0000000..824b8a5 --- /dev/null +++ b/src/entity/_Common/CommonResult.js @@ -0,0 +1,21 @@ +/* + * @Author: Billy + * @Date: 2022-01-10 17:00:37 + * @LastEditors: Billy + * @LastEditTime: 2022-01-10 17:05:18 + * @Description: 请输入 + */ + +class CommonResult { + /** + * @description 通用数据格式类 + * @param {object|Array.} data 数据 + * @param {string} message 操作信息(一般由后端返回) + */ + constructor(data, message) { + this.data = data; + this.message = message; + } +} + +export default CommonResult; \ No newline at end of file diff --git a/src/entity/_Common/PageResult.js b/src/entity/_Common/PageResult.js new file mode 100644 index 0000000..729d849 --- /dev/null +++ b/src/entity/_Common/PageResult.js @@ -0,0 +1,21 @@ +/* + * @Author: Billy + * @Date: 2022-01-05 01:14:29 + * @LastEditors: Billy + * @LastEditTime: 2022-01-05 10:29:12 + * @Description: 请输入 + */ + +class PageResult { + /** + * @description 分页获取数据的格式类 + * @param {Array.} rows 数据集合 + * @param {number} count 数据总条数 + */ + constructor(rows, count) { + this.rows = rows; + this.count = count; + } +} + +export default PageResult; \ No newline at end of file diff --git a/src/entity/_Common/Parent.js b/src/entity/_Common/Parent.js new file mode 100644 index 0000000..2d21137 --- /dev/null +++ b/src/entity/_Common/Parent.js @@ -0,0 +1,33 @@ +/* + * @Author: Billy + * @Date: 2022-01-05 01:21:58 + * @LastEditors: Billy + * @LastEditTime: 2022-01-05 10:41:46 + * @Description: 请输入 + */ + +class Parent { + /** + * @description 所有业务对象的父类 + * @param {string} id 对象的全局唯一id + * @param {Date|string} createTime 对象数据的创建时间 + * @param {Date|string} modifyTime 对象数据的最近一次修改时间 + * @param {boolean} softDelete 是否软删除 + * @param {string} createUserId 对象的创建者id + */ + constructor({ + id, + createTime, + modifyTime, + softDelete, + createUserId + }) { + this.id = id; + this.createTime = typeof (createTime) === 'string' ? Date(createTime) : createTime; + this.modifyTime = typeof (modifyTime) === 'string' ? Date(modifyTime) : modifyTime; + this.softDelete = softDelete; + this.createUserId = createUserId; + } +} + +export default Parent; \ No newline at end of file diff --git a/src/main.js b/src/main.js new file mode 100644 index 0000000..7e21204 --- /dev/null +++ b/src/main.js @@ -0,0 +1,64 @@ +/* + * @Author: Billy + * @Date: 2020-09-10 09:12:00 + * @LastEditors: Billy + * @LastEditTime: 2022-01-01 05:26:15 + * @Description: 请输入 + */ +import Vue from 'vue'; +import App from './App.vue'; +import router from './router/_index.js'; +import store from './store'; +import ElementUI from 'element-ui'; +import './scss/element-variables.scss'; +import "./svgicon/index.js"; +import Event from './util/Event'; +import AuthHelper from "./auth/AuthHelper.js"; +import SafePush from './util/SafePush'; + +Vue.config.productionTip = false; +Vue.use(ElementUI, { + size: 'medium' +}); + +Vue.prototype.$safePush = SafePush; + +// 注册一个全局自定义指令 `v-auth`,用于验证权限 +Vue.directive('auth', { + bind: function (el, param) { }, + // 当被绑定的元素插入到 DOM 中时…… + inserted: function (el, param) { + let pass = AuthHelper.checkAuth(param.value); + if (!pass) { + el.remove() + } + }, + update: function (el, param) { }, + componentUpdated: function (el, param) { }, + unbind: function (el, param) { } +}); + +// 全局事件总线 +// 参考:https://zhuanlan.zhihu.com/p/72777951 +// 不到必要时,不建议使用,否则容易增加全局代码复杂度 +let EventBus = new Vue(); +Object.defineProperties(Vue.prototype, { + $bus: { + get: function () { + return EventBus; + } + } +}); + +new Vue({ + router, + store, + render: h => h(App), + created: function () { + // 如果用原生的resize事件,将会损耗大量资源,因为resize事件触发的次数非常多 + // 因此把连续触发的resize事件转化为optimizedResize自定义事件,节约资源,并且组件也有足够时间重新渲染 + // 在此监听resize事件即可,不要在别处重复监听resize事件 + // 参考:https://stackoverflow.com/questions/28056716/check-if-an-element-has-event-listener-on-it-no-jquery + Event.throttle('resize', 'optimizedResize', 500) + } +}).$mount('#app') \ No newline at end of file diff --git a/src/router/_index.js b/src/router/_index.js new file mode 100644 index 0000000..2bbe565 --- /dev/null +++ b/src/router/_index.js @@ -0,0 +1,120 @@ +/* + * @Author: Billy + * @Date: 2020-09-10 09:12:00 + * @LastEditors: Billy + * @LastEditTime: 2022-01-10 20:27:12 + * @Description: 静态路由 + */ +import Vue from 'vue' +import VueRouter from 'vue-router' +import Qs from "qs"; +import Home from '../views/Home.vue' +import { + PROJECT_NAME, + IS_LOGIN_NEEDED +} from '../const.js' +import LoginInfo from "../storage/login-info.js"; +import TestChildren from "./test.js"; +import MainChildren from "./main.js"; +import SecondaryChildren from "./secondary.js"; +import BackChildren from "./back.js"; + +Vue.use(VueRouter) + +const routes = [{ + path: '/', + name: 'Default', + redirect: { + name: 'Home' + }, +}, { + path: '/home', + // alias: '/home', + name: 'Home', + redirect: { + name: 'ProductAndCases' + }, + component: Home, + meta: { + title: '' + }, + children: [ + ...MainChildren, + ...SecondaryChildren, + ...TestChildren + ] +}, { + path: '/back', + name: 'Back', + redirect: { + name: 'Org' + }, + component: () => import( /* webpackChunkName: "Back" */ '../views/Back.vue'), + meta: { + title: '' + }, + children: [ + ...BackChildren + ] +}, { + path: '/login', + name: 'Login', + component: () => import( /* webpackChunkName: "Login" */ '../views/SystemViews/Login.vue'), + meta: { + title: '登录页' + } +}, { + path: '/error/:code/:message', + name: 'Error', + component: () => import( /* webpackChunkName: "Error" */ '../views/SystemViews/Error.vue'), + meta: { + title: '出错了' + } +}, { + // 其它情况,全都跳转到404页 + path: '*', + name: 'NotFound', + component: () => import( /* webpackChunkName: "NotFound" */ '../views/SystemViews/NotFound.vue'), + meta: { + title: '404' + } +}] + +const router = new VueRouter({ + routes +}) + +// 路由导航守卫 +router.beforeEach((to, from, next) => { + if (to.meta.title) { + // 组装完整的页面title + document.title = PROJECT_NAME + '-' + to.meta.title + } + + if (IS_LOGIN_NEEDED) { + if (to.name === 'Register' || to.name === 'ResetPassword' || to.name === 'NotFound' || to.name === 'Error') { + // 用户尝试访问注册页、重置密码页、一个不存在的页面 或者 错误页 + next() + } else if ( + to.name !== 'Login' && + !LoginInfo.getUserInfo() + ) { + // 用户不是访问登录页,并且用户状态为未登录 + let queryString = Qs.stringify(to.query, { + encode: false + }); + + next({ + name: 'Login', + query: { + routeName: to.name, + queryString: queryString ? queryString : undefined + } + }); + } + } + + next() +}) + +export default router \ No newline at end of file diff --git a/src/router/back.js b/src/router/back.js new file mode 100644 index 0000000..360cc20 --- /dev/null +++ b/src/router/back.js @@ -0,0 +1,117 @@ +/* + * @Author: Billy + * @Date: 2021-12-29 17:34:21 + * @LastEditors: Billy + * @LastEditTime: 2022-01-04 13:59:15 + * @Description: 请输入 + */ + +export default [{ + path: 'org', + name: 'Org', + component: () => import( + /* webpackChunkName: "Org" */ + '../views/BackViews/Org.vue' + ), + meta: { + title: '组织架构', + // headerActiveIndex: '1', + // keepAlive: false + } +}, { + path: 'role', + name: 'Role', + component: () => import( + /* webpackChunkName: "Role" */ + '../views/BackViews/Role.vue' + ), + meta: { + title: '角色管理', + // headerActiveIndex: '1', + // keepAlive: false + } +}, { + path: 'classification', + name: 'Classification', + component: () => import( + /* webpackChunkName: "Classification" */ + '../views/BackViews/Classification.vue' + ), + meta: { + title: '分类管理', + // headerActiveIndex: '1', + // keepAlive: false + } +}, { + path: 'statistics', + name: 'Statistics', + component: () => import( + /* webpackChunkName: "Statistics" */ + '../views/BackViews/Statistics.vue' + ), + meta: { + title: '数据统计', + // headerActiveIndex: '1', + // keepAlive: false + } +}, { + path: 'topic', + name: 'Topic', + component: () => import( + /* webpackChunkName: "Topic" */ + '../views/BackViews/Topic.vue' + ), + meta: { + title: '专题管理', + // headerActiveIndex: '1', + // keepAlive: false + } +}, { + path: 'platformsetting', + name: 'PlatformSetting', + component: () => import( + /* webpackChunkName: "PlatformSetting" */ + '../views/BackViews/PlatformSetting.vue' + ), + meta: { + title: '平台设置', + // headerActiveIndex: '1', + // keepAlive: false + } +}, { + path: 'authorization-for-partner', + name: 'Authorization4Partner', + component: () => import( + /* webpackChunkName: "Authorization4Partner" */ + '../views/BackViews/Authorization4Partner.vue' + ), + meta: { + title: '合作伙伴授权管理', + // headerActiveIndex: '1', + // keepAlive: false + } +}, { + path: 'authorization-for-customer', + name: 'Authorization4Customer', + component: () => import( + /* webpackChunkName: "Authorization4Customer" */ + '../views/BackViews/Authorization4Customer.vue' + ), + meta: { + title: '客户授权管理', + // headerActiveIndex: '1', + // keepAlive: false + } +}, { + path: 'log', + name: 'Log', + component: () => import( + /* webpackChunkName: "Log" */ + '../views/BackViews/Log.vue' + ), + meta: { + title: '系统日志', + // headerActiveIndex: '1', + // keepAlive: false + } +}] \ No newline at end of file diff --git a/src/router/main.js b/src/router/main.js new file mode 100644 index 0000000..18746b4 --- /dev/null +++ b/src/router/main.js @@ -0,0 +1,69 @@ +/* + * @Author: Billy + * @Date: 2021-12-20 11:09:19 + * @LastEditors: Billy + * @LastEditTime: 2022-01-10 20:55:52 + * @Description: 请输入 + */ + +export default [{ + path: '/product-and-cases', + name: 'ProductAndCases', + component: () => import( + /* webpackChunkName: "ProductAndCases" */ + '../views/HomeSubViews/Main/ProductAndCases.vue' + ), + meta: { + title: '产品案例', + // headerActiveIndex: '1', + keepAlive: true + } +}, { + path: '/solutions', + name: 'Solutions', + component: () => import( + /* webpackChunkName: "Solutions" */ + '../views/HomeSubViews/Main/Solutions.vue' + ), + meta: { + title: '解决方案', + // headerActiveIndex: '1', + keepAlive: true + } +}, { + path: '/demonstrations', + name: 'Demonstrations', + component: () => import( + /* webpackChunkName: "Demonstrations" */ + '../views/HomeSubViews/Main/Demonstrations.vue' + ), + meta: { + title: '演示方案', + // headerActiveIndex: '1', + keepAlive: true + } +}, { + path: '/sales-resources', + name: 'SalesResources', + component: () => import( + /* webpackChunkName: "SalesResources" */ + '../views/HomeSubViews/Main/SalesResources.vue' + ), + meta: { + title: '销售资源', + // headerActiveIndex: '1', + keepAlive: true + } +}, { + path: '/personal-space', + name: 'PersonalSpace', + component: () => import( + /* webpackChunkName: "PersonalSpace" */ + '../views/HomeSubViews/Main/PersonalSpace.vue' + ), + meta: { + title: '个人空间', + // headerActiveIndex: '1', + keepAlive: true + } +}] \ No newline at end of file diff --git a/src/router/secondary.js b/src/router/secondary.js new file mode 100644 index 0000000..3264781 --- /dev/null +++ b/src/router/secondary.js @@ -0,0 +1,33 @@ +/* + * @Author: Billy + * @Date: 2022-01-06 18:23:05 + * @LastEditors: Billy + * @LastEditTime: 2022-01-06 18:28:19 + * @Description: 请输入 + */ + +export default [{ + path: '/quick-demonstrations', + name: 'QuickDemonstrations', + component: () => import( + /* webpackChunkName: "QuickDemonstrations" */ + '../views/HomeSubViews/Secondary/QuickDemonstrations.vue' + ), + meta: { + title: '快捷演示方案', + // headerActiveIndex: '1', + keepAlive: true + } +}, { + path: '/cloud-desktop', + name: 'CloudDesktop', + component: () => import( + /* webpackChunkName: "CloudDesktop" */ + '../views/HomeSubViews/Secondary/CloudDesktop.vue' + ), + meta: { + title: '云桌面', + // headerActiveIndex: '1', + keepAlive: true + } +}] \ No newline at end of file diff --git a/src/router/test.js b/src/router/test.js new file mode 100644 index 0000000..f149252 --- /dev/null +++ b/src/router/test.js @@ -0,0 +1,33 @@ +/* + * @Author: Billy + * @Date: 2021-07-15 14:34:11 + * @LastEditors: Billy + * @LastEditTime: 2021-12-20 11:16:48 + * @Description: 用户角色权限相关路由 + */ + +export default [{ + path: '/test', + name: 'Test', + component: () => import( + /* webpackChunkName: "Test" */ + '../views/HomeSubViews/Test/Test.vue' + ), + meta: { + title: '测试1', + // headerActiveIndex: '1', + keepAlive: false + } +}, { + path: '/test2', + name: 'Test2', + component: () => import( + /* webpackChunkName: "Test2" */ + '../views/HomeSubViews/Test/Test2.vue' + ), + meta: { + title: '测试2', + // headerActiveIndex: '2', + keepAlive: false + } +}] \ No newline at end of file diff --git a/src/scss/Back/back.scss b/src/scss/Back/back.scss new file mode 100644 index 0000000..5544381 --- /dev/null +++ b/src/scss/Back/back.scss @@ -0,0 +1,61 @@ +@import "../variables.scss"; + +// 自定义类 +// 水平两列结构(左列溢出可垂直滚动,右列溢出隐藏) +.back-column-two { + display: flex; + height: 100%; + + .column-left { + width: calc(100% * 0.186); + min-width: 300px; + padding: 20px; + box-sizing: border-box; + overflow: hidden; + overflow-y: auto; + } + + .column-right { + flex: 1; + padding: 20px; + border-left: 2px solid $theme-background-light; + box-sizing: border-box; + } +} + +// 水平一列结构 +.back-column-one { + padding: 20px; +} + +// 标题区域变量 +$title-height: 36; // 标题区域高度(不包含外边距) +$title-margin-bottom: 20; // 标题下外边距 + +// 标题区域样式 +.back-title { + height: #{$title-height + px}; // 减掉外边距 + margin-bottom: #{$title-margin-bottom + px}; + font-size: 16px; + font-weight: 700; + line-height: 16px; + color: #25262b; + box-sizing: border-box; + overflow: hidden; +} + +.pagination { + margin-top: 20px; + overflow: hidden; + + .el-pagination { + float: right; + } +} + +// 清除默认样式 +ul { + list-style: none; + margin: 0; + padding: 0; +} \ No newline at end of file diff --git a/src/scss/Back/element-ui-reset.scss b/src/scss/Back/element-ui-reset.scss new file mode 100644 index 0000000..aa87540 --- /dev/null +++ b/src/scss/Back/element-ui-reset.scss @@ -0,0 +1,38 @@ +@import "./back.scss"; + +// 暗色背景输入框 +.bg-dark.el-input::v-deep { + .el-input__icon { + line-height: 36px; + } + + .el-input__inner { + height: 36px; + background-color: #e5e7ed; + } +} + +.back-title-el-tabs.el-tabs::v-deep { + height: 100%; + + .el-tabs__header { + margin-bottom: #{$title-margin-bottom + px}; + } + + .el-tabs__nav-wrap::after { + background-color: $theme-background-light; + } + + .el-tabs__item { + height: #{$title-height + px}; + font-size: 16px; + line-height: 16px; + box-sizing: border-box; + + // 取消当前tab默认样式,否则电脑切换应用后会显示 + &.is-active { + box-shadow: none !important; + border-radius: 0 !important; + } + } +} \ No newline at end of file diff --git a/src/scss/_Common/el-tab-reset.scss b/src/scss/_Common/el-tab-reset.scss new file mode 100644 index 0000000..fcc1951 --- /dev/null +++ b/src/scss/_Common/el-tab-reset.scss @@ -0,0 +1,24 @@ +@import "~@/scss/_variables.scss"; + +.el-tabs__header { + background-color: $theme-background-dark; + + .el-tabs__nav { + border-radius: 0; + padding-left: 6px; + + .el-tabs__item { + height: 36px; + line-height: 36px; + + &.is-active { + border-radius: 8px 8px 0 0; + background-color: white; + } + + &:not(.is-active) { + // background-color: $theme-background-dark; + } + } + } +} \ No newline at end of file diff --git a/src/scss/_variables.scss b/src/scss/_variables.scss new file mode 100644 index 0000000..dfe9f58 --- /dev/null +++ b/src/scss/_variables.scss @@ -0,0 +1,12 @@ +// $header-thin: 48; // 首页头部尺寸 + +$body-min-width: 1024px; // 页面最小宽度,当浏览器小于此宽度时,出现横向滚动条 +$body-min-height: 576px; // 页面最小高度,当浏览器小于此高度时,出现竖向滚动条 + + +$font-color-dark:#303133; +$font-color-light:#909399; +$theme-main-color: #347EFF; // 主题主色 RURIKON +$theme-background-dark: #E3EAF4; //后台背景色 +$theme-background-light: #F2F5F9; //后台背景色 +$theme-background-dark2: #E6E6E6; //后台背景色 \ No newline at end of file diff --git a/src/scss/element-ui-reset.scss b/src/scss/element-ui-reset.scss new file mode 100644 index 0000000..a047356 --- /dev/null +++ b/src/scss/element-ui-reset.scss @@ -0,0 +1,25 @@ +// element ui 的 Form 组件的表单元素之间间隔太大,占空间,调小 +.el-form { + &.el-form--label-top { + .el-form-item { + .el-form-item__label { + box-sizing: content-box; + line-height: 32px; + height: 32px; + padding-bottom: 4px; + } + } + } + + .el-form-item { + margin-bottom: 16px; + + .el-form-item__error { + padding-top: 2px; + } + } +} + +.el-popover { + min-width: 120px !important; // 弹出框默认最小宽度150px,修改一下 +} \ No newline at end of file diff --git a/src/scss/element-variables.scss b/src/scss/element-variables.scss new file mode 100644 index 0000000..62d8420 --- /dev/null +++ b/src/scss/element-variables.scss @@ -0,0 +1,11 @@ +// 用法:https://element.eleme.cn/#/zh-CN/component/custom-theme#zai-xiang-mu-zhong-gai-bian-scss-bian-liang + +@import "./_variables.scss"; + +/* 改变主题色变量 */ +$--color-primary: $theme-main-color; + +/* 改变 icon 字体路径变量,必需 */ +$--font-path: '~element-ui/lib/theme-chalk/fonts'; + +@import "~element-ui/packages/theme-chalk/src/index"; \ No newline at end of file diff --git a/src/scss/scrollbar.scss b/src/scss/scrollbar.scss new file mode 100644 index 0000000..ce157e4 --- /dev/null +++ b/src/scss/scrollbar.scss @@ -0,0 +1,23 @@ +// Simple +::-webkit-scrollbar { + width: 10px; + height: 10px; +} + +::-webkit-scrollbar-track { + border-radius: 10px; + background: rgba(0, 0, 0, 0.05); +} + +::-webkit-scrollbar-thumb { + border-radius: 10px; + background: rgba(0, 0, 0, 0.15); +} + +::-webkit-scrollbar-thumb:hover { + background: rgba(0, 0, 0, 0.3); +} + +::-webkit-scrollbar-thumb:active { + background: rgba(0, 0, 0, 0.5); +} \ No newline at end of file diff --git a/src/storage/login-info.js b/src/storage/login-info.js new file mode 100644 index 0000000..5e6fec5 --- /dev/null +++ b/src/storage/login-info.js @@ -0,0 +1,93 @@ +/* + * @Author: Billy + * @Date: 2021-07-11 00:39:24 + * @LastEditors: Billy + * @LastEditTime: 2021-12-20 01:04:31 + * @Description: 用户登录信息的保存和获取 + */ + +import router from '../router/_index.js' +import UserEntity from "../entity/Rbac/User.js" + +const ITEM_KEY = "current-user-info"; + +function setLocalStorage(user) { + let stringifiedUser = JSON.stringify(user); + window.localStorage.setItem(ITEM_KEY, stringifiedUser); +} + +function setSessionStorage(user) { + let stringifiedUser = JSON.stringify(user); + window.sessionStorage.setItem(ITEM_KEY, stringifiedUser); +} + +function removeLocalStorage() { + window.localStorage.removeItem(ITEM_KEY); +} + +function removeSessionStorage() { + window.sessionStorage.removeItem(ITEM_KEY); +} + +/** + * @description 判断用户是否处于登录状态,未登录返回null,如果已登录则获取用户信息 + */ +function getUserInfo() { + let stringifiedUser; + stringifiedUser = window.localStorage.getItem(ITEM_KEY); + if (!stringifiedUser) stringifiedUser = window.sessionStorage.getItem(ITEM_KEY); + + if (stringifiedUser) { + try { + let _user = JSON.parse(stringifiedUser); + let user = new UserEntity({ + id: _user.id, + token: _user.token, + username: _user.username, + realname: _user.realname, + cdmsSid: _user.cdmsSid, + }); + return user; + } catch (e) { + // 用户信息损坏,需要重新登录 + console.log('当前用户信息损坏'); + if (router.currentRoute.name !== "Login") { + router.push({ + name: 'Login' + }).catch(e => { }); + } + return null; + } + } else { + return null; + } +} + +/** + * @description 新增(未有)或更新(已有旧的)token,并将token存入 localStorage 或 sessionStorage + * @param {UserEntity} user 用户实体类对象 + */ +function saveUser(user) { + if (user instanceof UserEntity) { + removeUser(); + if (user.isRememberMe) { + setLocalStorage(user); + } else { + setSessionStorage(user); + } + } else throw new Error('参数user的类型错误'); +} + +/** + * @description 清空 localStorage 和 sessionStorage 中的登录信息 + */ +function removeUser() { + removeLocalStorage(); + removeSessionStorage(); +} + +export default { + getUserInfo, + saveUser, + removeUser, +} \ No newline at end of file diff --git a/src/storage/login-info2.js b/src/storage/login-info2.js new file mode 100644 index 0000000..09256b6 --- /dev/null +++ b/src/storage/login-info2.js @@ -0,0 +1,104 @@ +/* + * @Author: Billy + * @Date: 2021-07-11 00:39:24 + * @LastEditors: Billy + * @LastEditTime: 2021-12-19 23:25:43 + * @Description: 用户登录信息的保存和获取 + */ + +import UserEntity from "../entity/Rbac/User.js" + +function setLocalStorage(user) { + for (const key in user) { + const item = user[key]; + window.localStorage.setItem(key, String(item)); + } +} + +function setSessionStorage(user) { + for (const key in user) { + const item = user[key]; + window.sessionStorage.setItem(key, String(item)); + } +} + +function removeLocalStorage(user = new UserEntity()) { + for (const key in user) { + window.localStorage.removeItem(key); + } +} + +function removeSessionStorage(user = new UserEntity()) { + for (const key in user) { + window.sessionStorage.removeItem(key); + } +} + +/** + * @description 判断用户是否处于登录状态,未登录返回null,如果已登录则获取用户信息 + */ +function getUserInfo() { + let user = new UserEntity({ + id: '', + token: '', + username: '', + realname: '', + cdmsSid: '', + }); + + let isLocal, isSession; + for (const key in user) { + isLocal = !!window.localStorage.getItem(key); + if (!isLocal) break; + } + + for (const key in user) { + isSession = !!window.sessionStorage.getItem(key); + if (!isSession) break; + } + + if (isLocal) + for (const key in user) + user[key] = window.localStorage.getItem(key); + else if (isSession) + for (const key in user) + user[key] = window.sessionStorage.getItem(key); + else user = null; + + return user; +} + +/** + * @description 新增(未有)或更新(已有旧的)token,并将token存入 localStorage 或 sessionStorage + * @param {UserEntity} user 用户实体类对象 + */ +function saveUser(user) { + if (user instanceof UserEntity) { + removeUser(); + if (user.isRememberMe) { + setLocalStorage(user); + } else { + setSessionStorage(user); + } + } else throw new Error('参数user的类型错误'); +} + +/** + * @description 清空 localStorage 和 sessionStorage 中的登录信息 + */ +function removeUser(user = new UserEntity({ + id: '', + token: '', + username: '', + realname: '', + cdmsSid: '', +})) { + removeLocalStorage(user); + removeSessionStorage(user); +} + +export default { + getUserInfo, + saveUser, + removeUser, +} \ No newline at end of file diff --git a/src/store/index.js b/src/store/index.js new file mode 100644 index 0000000..332b916 --- /dev/null +++ b/src/store/index.js @@ -0,0 +1,15 @@ +import Vue from 'vue' +import Vuex from 'vuex' + +Vue.use(Vuex) + +export default new Vuex.Store({ + state: { + }, + mutations: { + }, + actions: { + }, + modules: { + } +}) diff --git a/src/svgicon/SvgIcon.vue b/src/svgicon/SvgIcon.vue new file mode 100644 index 0000000..052856a --- /dev/null +++ b/src/svgicon/SvgIcon.vue @@ -0,0 +1,67 @@ + + + + + + + + + diff --git a/src/svgicon/common/add.svg b/src/svgicon/common/add.svg new file mode 100644 index 0000000..bd2e707 --- /dev/null +++ b/src/svgicon/common/add.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/svgicon/common/copy.svg b/src/svgicon/common/copy.svg new file mode 100644 index 0000000..b301b37 --- /dev/null +++ b/src/svgicon/common/copy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/svgicon/common/delete.svg b/src/svgicon/common/delete.svg new file mode 100644 index 0000000..3d84c9b --- /dev/null +++ b/src/svgicon/common/delete.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/svgicon/common/edit.svg b/src/svgicon/common/edit.svg new file mode 100644 index 0000000..b592661 --- /dev/null +++ b/src/svgicon/common/edit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/svgicon/common/move.svg b/src/svgicon/common/move.svg new file mode 100644 index 0000000..d353b5c --- /dev/null +++ b/src/svgicon/common/move.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/svgicon/common/vertical-more.svg b/src/svgicon/common/vertical-more.svg new file mode 100644 index 0000000..0d8aaac --- /dev/null +++ b/src/svgicon/common/vertical-more.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/svgicon/index.js b/src/svgicon/index.js new file mode 100644 index 0000000..a7409a1 --- /dev/null +++ b/src/svgicon/index.js @@ -0,0 +1,19 @@ +/* + * @Author: Aardpro + * @Date: 2021-07-01 10:24:35 + * @LastEditors: Billy + * @LastEditTime: 2021-09-23 01:01:49 + * @Description: 自动加载当前目录和所有子目录下的svg文件 + * 使用说明 + * 把svg图标文件分门别类地存在本目录下(子目录) + * 在vue的template部分使用 + */ + +import Vue from 'vue'; +import SvgIcon from './SvgIcon.vue'; // svg component + +// 全局注册组件 +Vue.component('svg-icon', SvgIcon); + +const req = require.context('./', true, /\.svg$/); +((requireContext) => requireContext.keys().map(requireContext))(req); // 参考:https://segmentfault.com/a/1190000019723837 \ No newline at end of file diff --git a/src/sys/SysCode.js b/src/sys/SysCode.js new file mode 100644 index 0000000..fb5711c --- /dev/null +++ b/src/sys/SysCode.js @@ -0,0 +1,15 @@ +/* + * @Author: Billy + * @Date: 2020-09-07 13:34:39 + * @LastEditors: Billy + * @LastEditTime: 2021-09-22 16:29:03 + * @Description: v1.2 + */ +class SysCode { + static SUCCESS = 0; // 成功 + static COMMON_ERROR = 500; // 通用的错误码 + static ACCESS_AUTH_FAILED = 510; // 访问权限认证未通过 + static RESET_PASSWORD_TOKEN_FAILED = 1001; // 找回密码token(不是登录的token)已失效,请再次获取验证码 +} + +export default SysCode; \ No newline at end of file diff --git a/src/sys/SysError.js b/src/sys/SysError.js new file mode 100644 index 0000000..5ed7443 --- /dev/null +++ b/src/sys/SysError.js @@ -0,0 +1,18 @@ +/* + * @Author: Billy + * @Date: 2020-08-30 23:07:45 + * @LastEditors: Billy + * @LastEditTime: 2021-09-22 10:55:19 + * @Description: 网盘报错类 + */ +class SysError extends Error { + constructor(code, message, data, success, timestamp) { + super(message); + this.code = code; + this.data = data; + this.success = success; + this.timestamp = timestamp; + } +} + +module.exports = SysError; \ No newline at end of file diff --git a/src/util/BrowserVersion.js b/src/util/BrowserVersion.js new file mode 100644 index 0000000..cf92fa8 --- /dev/null +++ b/src/util/BrowserVersion.js @@ -0,0 +1,46 @@ +/* + * @Author: Billy + * @Date: 2020-09-22 17:44:24 + * @LastEditors: Billy + * @LastEditTime: 2021-06-06 01:58:59 + * @Description: 请输入 + */ + +/** + * @description 获取浏览器版本(例如:chrome 64) + * @see https://stackoverflow.com/questions/5916900/how-can-you-detect-the-version-of-a-browser + * @param userAgent 传参则解析参数的内容,否则读取本机浏览器信息 + * @returns {object} 形如 {name: chrome, version: 64} + */ +function getVersion(userAgent) { + var ua = userAgent || navigator.userAgent, + tem, M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || []; + if (/trident/i.test(M[1])) { + tem = /\brv[ :]+(\d+)/g.exec(ua) || []; + return { + name: 'IE', + version: (tem[1] || '') + }; + } + if (M[1] === 'Chrome') { + tem = ua.match(/\bOPR|Edge\/(\d+)/) + if (tem != null) { + return { + name: 'Opera', + version: tem[1] + }; + } + } + M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?']; + if ((tem = ua.match(/version\/(\d+)/i)) != null) { + M.splice(1, 1, tem[1]); + } + return { + name: M[0], + version: M[1] + }; +} + +export default { + getVersion +} \ No newline at end of file diff --git a/src/util/DateHelper.js b/src/util/DateHelper.js new file mode 100644 index 0000000..befd7c1 --- /dev/null +++ b/src/util/DateHelper.js @@ -0,0 +1,133 @@ +/* + * @Author: CiFong + * @Date: 2020-06-16 18:20:21 + * @LastEditors: Billy + * @LastEditTime: 2020-10-08 12:43:01 + * @Description: 请输入 + */ +/** + * @description + * 将 Date 转化为指定格式的String + * 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符, + * 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字) + * @param {Date} date 要格式化的日期时间对象 + * @param {String} fmt 描述格式的字符串 + * @returns {String} 格式化后的日期字符串 + * @see https://www.haorooms.com/post/js_date_format_func + * @example + * (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423 + * (new Date()).Format("yyyy-M-d h:m:s.S") ==> 2006-7-2 8:9:4.18 + */ +function format(date, fmt) { + var o = { + 'M+': date.getMonth() + 1, //月份 + 'd+': date.getDate(), //日 + 'h+': date.getHours(), //小时 + 'm+': date.getMinutes(), //分 + 's+': date.getSeconds(), //秒 + 'q+': Math.floor((date.getMonth() + 3) / 3), //季度 + S: date.getMilliseconds() //毫秒 + } + if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length)) + for (var k in o) + if (new RegExp('(' + k + ')').test(fmt)) + fmt = fmt.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length)) + return fmt +} + +/** + * @description 传入两个毫秒数得到相隔天数(传入的毫秒数无大小顺序) + * @param {Number} timeA 传入的毫秒数A + * @param {Number} timeB 传入的毫秒数B + * @returns {Number} 相隔天数 + */ +// function getGapDate(timeA, timeB) { +// if (!(timeA && timeB)) { +// return +// } +// let absTime = Math.abs(timeA - timeB) +// return parseInt(absTime / 1000 / 60 / 60 / 24) +// } + +/** + * @description 传入两个时间得到相隔时长 + * @param {Date} startTime 传入的开始时间 + * @param {Date} endTime 传入的结束时间 + * @param {number} pointLength 小数点后的位数(默认0位) + * @returns {string} 时间间隔,返回:如 1天/3分钟/2秒;如果endTime小于startTime,时间间隔将会是负数 + */ +function formatDateGap(startTime, endTime, pointLength = 0) { + const units = [{ + unit: "毫秒", + multiple: 1000 + }, { + unit: "秒", + multiple: 60 + }, { + unit: "分钟", + multiple: 60 + }, { + unit: "小时", + multiple: 24 + }, { + unit: "天" + }]; + let firstUnit = units[0].unit; + let gap = endTime - startTime; + if (gap === 0) return 0; + + let item; + while ((item = units.shift()) && item.multiple && gap > item.multiple) { + gap = gap / item.multiple; + } + return (item.unit === firstUnit ? gap : gap.toFixed(pointLength)) + item.unit; +} + +/** + * @description 获取某年某月的总天数 + * @param {Number} year 年份 + * @param {Number} month 月份 + */ +function getDaysInOneMonth(year, month) { + // month = parseInt(month, 10); + var d = new Date(year, month, 0) + return d.getDate() +} + +/** + * @description 验证是否为时间戳 + * @param {Number} time 时间戳 + */ +function timeRules(time) { + if (parseInt(time) && time.toString().length === 13) { + return true + } else { + return false + } +} + +/** + * @description 获取当天时间0点的时间戳 + * @param {Number} time 时间戳 + */ +function setHour0(time) { + return new Date(new Date(time).setHours(0, 0, 0, 0)).getTime() +} + +/** + * @description 获取当天时间24点的时间戳 + * @param {Number} time 时间戳 + */ +function setHour24(time) { + return new Date(new Date(time).setHours(23, 59, 59, 999)).getTime() +} + +export default { + format, + // getGapDate, + formatDateGap, + getDaysInOneMonth, + timeRules, + setHour0, + setHour24 +} \ No newline at end of file diff --git a/src/util/DeepClone.js b/src/util/DeepClone.js new file mode 100644 index 0000000..7aba913 --- /dev/null +++ b/src/util/DeepClone.js @@ -0,0 +1,51 @@ +/* + * @Author: ChileeHong + * @Date: 2021-08-19 16:30:10 + * @LastEditTime: 2021-08-19 16:30:11 + * @LastEditors: ChileeHong + * @Description: 深克隆 + */ + +// 深拷贝对象 +export function deepClone(obj) { + const _toString = Object.prototype.toString; + // null, undefined, non-object, function + if (!obj || typeof obj !== 'object') { + return obj; + } + + // DOM Node + if (obj.nodeType && 'cloneNode' in obj) { + return obj.cloneNode(true); + } + + // Date + if (_toString.call(obj) === '[object Date]') { + return new Date(obj.getTime()); + } + + // RegExp + if (_toString.call(obj) === '[object RegExp]') { + const flags = []; + if (obj.global) { + flags.push('g'); + } + if (obj.multiline) { + flags.push('m'); + } + if (obj.ignoreCase) { + flags.push('i'); + } + + return new RegExp(obj.source, flags.join('')); + } + + const result = Array.isArray(obj) ? [] : + obj.constructor ? + new obj.constructor() : {}; + + for (const key in obj) { + result[key] = deepClone(obj[key]); + } + return result; +} \ No newline at end of file diff --git a/src/util/DownloadHelper.js b/src/util/DownloadHelper.js new file mode 100644 index 0000000..1827deb --- /dev/null +++ b/src/util/DownloadHelper.js @@ -0,0 +1,23 @@ +/* + * @Author: Billy + * @Date: 2020-09-16 08:55:25 + * @LastEditors: Billy + * @LastEditTime: 2021-06-06 01:59:30 + * @Description: 下载工具函数 + */ + +/** + * @description 弹窗下载文件方法 + * @param {string} filePath 将要下载的文件的网址 + * @param {string} fileName 下载的文件保存本地时的文件名(含后缀) + */ +function downloadByAnchorTag(filePath, fileName = '') { + let anchorTag = document.createElement('a'); + anchorTag.setAttribute('href', filePath); + anchorTag.setAttribute('download', fileName); + anchorTag.click(); +} + +export default { + downloadByAnchorTag +} \ No newline at end of file diff --git a/src/util/Event.js b/src/util/Event.js new file mode 100644 index 0000000..d4a2371 --- /dev/null +++ b/src/util/Event.js @@ -0,0 +1,25 @@ +/** + * @description 减少事件触发频率的慢速事件触发方式 + * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Window/resize_event + * @param {String} eventType 触发速率较高的原生事件名称 + * @param {String} customEventName 重新自定义的触发速率较低的事件名称 + * @param {Number} interval 事件触发的间隔时间,单位毫秒 + * @param {Object} dom 触发原生事件的 dom 对象,默认为 window 对象 + */ +function throttle(eventType, customEventName, interval, dom) { + dom = dom || window; + var resizeTimeout; + var callback = function () { + if (!resizeTimeout) { + resizeTimeout = setTimeout(function () { + resizeTimeout = null; + dom.dispatchEvent(new CustomEvent(customEventName)); + }, interval); + } + }; + dom.addEventListener(eventType, callback, false); +} + +export default { + throttle +} \ No newline at end of file diff --git a/src/util/FileHelper.js b/src/util/FileHelper.js new file mode 100644 index 0000000..a34775c --- /dev/null +++ b/src/util/FileHelper.js @@ -0,0 +1,31 @@ +/* + * @Author: Billy + * @Date: 2020-09-15 10:05:45 + * @LastEditors: Billy + * @LastEditTime: 2021-10-18 15:16:42 + * @Description: 文件相关帮助方法 + */ + +/** + * 格式化输出文件尺寸 + * @param {Number} size 文件尺寸的数字(单位为Byte) + * @param {Number} pointLength 小数点后的位数 + * @param {Array} units 自定义单位数组 + * 返回:字符串如 1M + */ +function formatFileSize( + size, + pointLength = 2, + units = ["B", "K", "M", "G", "TB"] +) { + // 格式化输出文件尺寸 + let unit; + while ((unit = units.shift()) && size > 1024) { + size = size / 1024; + } + return (unit === "B" ? size : size.toFixed(pointLength)) + unit; +} + +export default { + formatFileSize +}; \ No newline at end of file diff --git a/src/util/FormatHelper.js b/src/util/FormatHelper.js new file mode 100644 index 0000000..f795d8f --- /dev/null +++ b/src/util/FormatHelper.js @@ -0,0 +1,23 @@ +/* + * @Author: Billy + * @Date: 2021-05-05 17:36:21 + * @LastEditors: Billy + * @LastEditTime: 2021-08-24 16:59:56 + * @Description: 工具函数集 + */ + +/** + * @description 检验数字字符串是否为正确的正整数 + * @param {String} strNum 数字字符串 + * @returns {Boolean} 检验结果 + */ +function isPositiveInt(strNum) { + if (typeof strNum === "number") { + strNum += ''; + } + return /^[1-9][0-9]*$/.test(strNum); +} + +export default { + isPositiveInt +} \ No newline at end of file diff --git a/src/util/GetBase64Image.js b/src/util/GetBase64Image.js new file mode 100644 index 0000000..e7f34ce --- /dev/null +++ b/src/util/GetBase64Image.js @@ -0,0 +1,21 @@ +/* + * @Author: aqi + * @Date: 2021-09-07 09:49:06 + * @LastEditors: aqi + * @LastEditTime: 2021-09-07 09:55:54 + * @Description: 根据url获取base64图片 + */ +import LoginInfo from "../storage/login-info.js"; +import { + BIZ_BASE_URL, + TOKEY_ATTR_NAME +} from "../const.js" +/** + * @description 根据接口和id,返回图片 + * @param {string} 不带服务器域名/ip的接口url 如/device-base64/find-icon + * @param {*} id 图片id 如1 + * @returns {Blob} + */ +export function getBase64Image(url, id) { + return `${BIZ_BASE_URL}/${url}?id=${id}&${TOKEY_ATTR_NAME}=${LoginInfo.getUserInfo().token}` +} \ No newline at end of file diff --git a/src/util/IframeViewer/src.js b/src/util/IframeViewer/src.js new file mode 100644 index 0000000..f630195 --- /dev/null +++ b/src/util/IframeViewer/src.js @@ -0,0 +1,80 @@ +/* + * @Author: Billy + * @Date: 2021-03-08 15:56:33 + * @LastEditors: Billy + * @LastEditTime: 2021-07-20 09:40:16 + * @Description: 请输入 + */ + +import Qs from "qs"; +import { + IFRAME_NAME, + IFRAME_2D_NAME +} from "../../const.js" + +/** + * 生成iframe的src的方法(3d) + * @param {string} projectKey 即modelDb key + * @param {Array.} modelKeys 模型key的数组(可包含多个模型的意思) + * @param {string} base3dUrl 3d url + * @param {boolean} hasToolBar 是否显示工具栏 + * @param {boolean} hasController 控制是否显示viewer右上角的6面体 + * @param {number} iframeTimeStamp 用时间作为iframe的id(用于刷新iframe(原理是只要url有改变,iframe即自动重新加载)) + * @param {boolean} isShare 是否显示右下角”联系我们“ + */ +function InitSrc(projectKey, modelKeys, base3dUrl, hasToolBar, hasController, iframeTimeStamp, isShare = false) { + // 把初始化viewer及模型所需的参数以get方式传递给iframe + let iframeFileName = IFRAME_NAME; + let _src = `./3d-viewer/${iframeFileName}?`; + + let params = { + projectKey: projectKey, + modelKeys: modelKeys.join(","), + host: base3dUrl, + hasToolBar: hasToolBar, + hasController: hasController, + timeStamp: iframeTimeStamp + }; + + if (isShare) params.share = true; + + let paramStr = Qs.stringify(params, { + encode: false + }); + _src += paramStr; + return _src; +} + +/** + * 生成iframe的src的方法(2d) + * @param {string} projectKey 即modelDb key + * @param {Array.} modelKeys 模型key的数组(可包含多个模型的意思) + * @param {string} base3dUrl 3d url + * @param {number} iframeTimeStamp 用时间作为iframe的id(用于刷新iframe(原理是只要url有改变,iframe即自动重新加载)) + * @param {boolean} isShare 是否显示右下角”联系我们“ + */ +function InitSrcFor2d(projectKey, modelKeys, base3dUrl, iframeTimeStamp, isShare = false) { + // 把初始化viewer及模型所需的参数以get方式传递给iframe + let iframeFileName = IFRAME_2D_NAME; + let _src = `./2d-viewer/${iframeFileName}?`; + + let params = { + projectKey: projectKey, + modelKeys: modelKeys.join(","), + host: base3dUrl, + timeStamp: iframeTimeStamp + }; + + if (isShare) params.share = true; + + let paramStr = Qs.stringify(params, { + encode: false + }); + _src += paramStr; + return _src; +} + +export default { + InitSrc, + InitSrcFor2d +} \ No newline at end of file diff --git a/src/util/JsonHelper.js b/src/util/JsonHelper.js new file mode 100644 index 0000000..b8b12a9 --- /dev/null +++ b/src/util/JsonHelper.js @@ -0,0 +1,69 @@ +/* + * @Author: Billy + * @Date: 2021-06-21 23:06:25 + * @LastEditors: Please set LastEditors + * @LastEditTime: 2021-08-28 11:17:03 + * @Description: 请输入 + */ + +// 递归方式求对象最大深度 +function maxDepth(obj) { + let results = []; + for (let key in obj) { + if (typeof (obj[key]) == 'object' && obj[key] != null) { + results.push(maxDepth(obj[key])); + } + } + if (results.length === 0) { + return 1; + } else { + return Math.max(...results) + 1; + } +} + +// DFS剪枝方式求对象最大深度 +function maxDepth2(root) { + var stack = []; + if (typeof (root) == 'object' && root != null) { + stack.unshift([root, 1]); + } + var depth = 0; + while (stack.length !== 0) { + var current = stack.shift(); + root = current[0]; + var current_depth = current[1]; + if (typeof (root) == 'object' && root != null) { + depth = Math.max(depth, current_depth); + for (const key in root) { + stack.unshift([root[key], current_depth + 1]); + } + } + } + return depth; +} +// 安全的JSON.parse方法 +function safeParse(str, def = false) { + try { + const res = JSON.parse(str) + return res + } catch (err) { + console.error(err.message) + } + return def +} +// 安全的JSON.stringify方法 +function safeStringify(mixedVar) { + try { + return JSON.stringify(mixedVar) + } catch (err) { + console.error(err.message) + } + return '' +} + +module.exports = { + maxDepth, + maxDepth2, + safeParse, + safeStringify +} \ No newline at end of file diff --git a/src/util/JwtHelper.js b/src/util/JwtHelper.js new file mode 100644 index 0000000..56273bc --- /dev/null +++ b/src/util/JwtHelper.js @@ -0,0 +1,24 @@ +/* + * @Author: Billy + * @Date: 2021-06-06 18:57:16 + * @LastEditors: Billy + * @LastEditTime: 2021-07-29 17:28:16 + * @Description: 生成jwt和验证jwt + */ + +const jwt = require('jsonwebtoken'); + +/** + * 获取token对应的payload + * @param {string} token + * @returns {object} payload + */ +function decodeJwt(token) { + return jwt.decode(token, { + // complete: true + }); +} + +module.exports = { + decodeJwt +} \ No newline at end of file diff --git a/src/util/MakeKml.js b/src/util/MakeKml.js new file mode 100644 index 0000000..7e3845c --- /dev/null +++ b/src/util/MakeKml.js @@ -0,0 +1,45 @@ +/* + * @Author: ChileeHong + * @Date: 2021-07-30 11:46:04 + * @LastEditTime: 2021-08-23 18:14:31 + * @LastEditors: ChileeHong + * @Description: 创建KML字符串 + */ +/** + * @description 创建kml字符串 + * */ +export function makeKml(records = []) { + const contents = []; + records.forEach((item) => { + if (!item.name || item.longitude === undefined || item.latitude === undefined || item.height === undefined) { + return; + } + if (!item.description) { + item.description = ""; + } + contents.push(` + + + + device id + ${item.id} + + + ${item.name} + ${item.id} + + absolute + ${+item.longitude},${+item.latitude},${+item.height} + + + `); + }); + const kmlContent = ` + + + Surveys.kml${contents.join("")} + + + `; + return new DOMParser().parseFromString(kmlContent, "text/xml"); +} \ No newline at end of file diff --git a/src/util/Md5Helper.js b/src/util/Md5Helper.js new file mode 100644 index 0000000..09da40b --- /dev/null +++ b/src/util/Md5Helper.js @@ -0,0 +1,49 @@ +/* + * @Author: Billy + * @Date: 2021-07-17 14:26:25 + * @LastEditors: Billy + * @LastEditTime: 2021-07-17 18:05:56 + * @Description: 请输入 + */ + +import SparkMD5 from "spark-md5" + +function fileToMd5(file) { + let blobSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice, + // file = this.files[0], + chunkSize = 2097152, // Read in chunks of 2MB + chunks = Math.ceil(file.size / chunkSize), + currentChunk = 0, + spark = new SparkMD5.ArrayBuffer(), + fileReader = new FileReader(); + + fileReader.onload = function (e) { + console.log('read chunk nr', currentChunk + 1, 'of', chunks); + spark.append(e.target.result); // Append array buffer + currentChunk++; + + if (currentChunk < chunks) { + loadNext(); + } else { + console.log('finished loading'); + console.info('computed hash', spark.end()); // Compute hash + } + }; + + fileReader.onerror = function () { + console.warn('oops, something went wrong.'); + }; + + function loadNext() { + var start = currentChunk * chunkSize, + end = ((start + chunkSize) >= file.size) ? file.size : start + chunkSize; + + fileReader.readAsArrayBuffer(blobSlice.call(file, start, end)); + } + + loadNext(); +} + +export default { + fileToMd5 +} \ No newline at end of file diff --git a/src/util/Regexp.js b/src/util/Regexp.js new file mode 100644 index 0000000..32e8118 --- /dev/null +++ b/src/util/Regexp.js @@ -0,0 +1,64 @@ +/* + * @Author: Billy + * @Date: 2021-05-03 02:31:05 + * @LastEditors: Billy + * @LastEditTime: 2021-08-24 17:02:16 + * @Description: 请输入 + */ + +/** + * @description 验证手机号是否是有效手机号 + * @param {String} telephone 需要验证的手机号码 + * @returns {Boolean} + * @see https://blog.csdn.net/u011415782/article/details/85601655 + */ +const TEL_REG_EXP = /^[1](([3][0-9])|([4][5-9])|([5][0-3,5-9])|([6][5,6])|([7][0-8])|([8][0-9])|([9][1,8,9]))[0-9]{8}$/; + +function isTelephoneValid(telephone) { + return TEL_REG_EXP.test(telephone); +} + +/** + * @description 验证邮箱是否为有效邮箱格式 + * @param {String} email 需要验证的邮箱 + * @returns {Boolean} + * @see https://www.cnblogs.com/stellar/p/5888163.html + */ +const EMAIL_REG_EXP = /^[A-Za-z\d]+([-_.][A-Za-z\d]+)*@([A-Za-z\d]+[-.])+[A-Za-z\d]{2,4}$/; + +function isEmailValid(email) { + return EMAIL_REG_EXP.test(email); +} + +const PW_REG_EXP = /^[A-Za-z\d]{5,18}$/; + +/** + * @description 验证密码是否正确 + * @param {string} password 密码 + * @returns {Boolean} + */ +function isPasswordValid(password) { + return PW_REG_EXP.test(password); +} + +// 经纬度参考 https://developer.aliyun.com/article/618783 + +const LONGITUDE_REGEX = /^[\-\+]?(0(\.\d{1,10})?|([1-9](\d)?)(\.\d{1,10})?|1[0-7]\d{1}(\.\d{1,10})?|180\.0{1,10})$/; + +function isLongitudeCorrect(value) { + return LONGITUDE_REGEX.test(value); +} + +const LATITUDE_REGEX = /^[\-\+]?((0|([1-8]\d?))(\.\d{1,10})?|90(\.0{1,10})?)$/; + +function isLatitudeCorrect(value) { + return LATITUDE_REGEX.test(value); +} + +export default { + isTelephoneValid, + isEmailValid, + isPasswordValid, + isLongitudeCorrect, + isLatitudeCorrect +} \ No newline at end of file diff --git a/src/util/SafePush.js b/src/util/SafePush.js new file mode 100644 index 0000000..8fed3ba --- /dev/null +++ b/src/util/SafePush.js @@ -0,0 +1,44 @@ +/* + * @Author: ChileeHong + * @Date: 2021-03-01 17:10:55 + * @LastEditors: Billy + * @LastEditTime: 2022-01-07 14:23:39 + * @Description: 安全的route.push方法 + */ +import router from '../router/_index' + +// 跟this.$router.push() 用法一致 +function savePush(location, onComplete, onAbort) { + const current = router.currentRoute; + const { + resolved + } = router.resolve(location); + + // console.log('current.path :>> ', current.path); + // console.log(' resolved.path :>> ', resolved.path); + // console.log('current.query :>> ', current.query); + // console.log('resolved.query :>> ', resolved.query); + // console.log('current.params :>> ', current.params); + // console.log('resolved.params :>> ', resolved.params); + + // 判断当前路由跟目标路由是否一致,如是则取消,避免重复路由 + if ( + current.path === resolved.path && + JSON.stringify(current.query) === JSON.stringify(resolved.query) && + JSON.stringify(current.params) === JSON.stringify(resolved.params) + ) { + return; + } + + router.push( + location, + success => { + onComplete && onComplete(success); + }, + err => { + onAbort && onAbort(err); + } + ); +} + +export default savePush \ No newline at end of file diff --git a/src/util/TreeHelper.js b/src/util/TreeHelper.js new file mode 100644 index 0000000..6702610 --- /dev/null +++ b/src/util/TreeHelper.js @@ -0,0 +1,127 @@ +/* + * @Author: Billy + * @Date: 2021-07-23 01:56:55 + * @LastEditors: Billy + * @LastEditTime: 2022-01-04 09:54:37 + * @Description: 树状结构帮助方法(v1.1) + */ + +/** + * @description 把树结构数组转化为指定属性组成的数组(N叉树的前序遍历) + * @param {Array} nodes 树结构数组 + * @param {string} keyName 需要收集的树节点的属性名 + * @param {string} childAttrName 子树节点数组的属性名 + * @param {Array} arr 需要收集的树节点的属性名的数组 + * @returns {Array} 所有树节点的指定属性组成的数组 + */ +function treeNodesToArray(nodes = [], keyName = 'id', childAttrName = 'children', arr = []) { + for (let node of nodes) { + arr.push(node[keyName]); + if (node[childAttrName] && node[childAttrName].length) + treeNodesToArray(node[childAttrName], keyName, childAttrName, arr) + } + return arr +} + +/** + * @description 获取树结构数组内的某一层的所有元素的指定属性(N叉树的层序遍历) + * @param {Array} nodes 树结构数组 + * @param {string} keyName 需要收集的树节点的属性名 + * @param {string} childAttrName 子树节点数组的属性名 + * @param {number} levelNo 要获取的层级(从1开始,小于1时本方法只会返回[]) + * @returns {Array} 符合条件的树节点的指定属性组成的数组 + */ +function getLevelOfTree(nodes = [], keyName = 'id', childAttrName = 'children', levelNo = 1) { + if (!nodes) { + return []; + } + + const queue = nodes.slice(); + let tmp = []; + + while (levelNo--) { + tmp = []; + let count = queue.length; + if (count === 0) { + break; + } + // 本while循环一周代表一层 + while (count--) { + const node = queue.shift(); + tmp.push(node[keyName]); + if (node[childAttrName] && node[childAttrName].length) { + for (let i = 0; i < node[childAttrName].length; i++) { + queue.push(node[childAttrName][i]); + } + } + } + } + + return tmp; +} + +/** + * @description 根据数组的某个字段分组数组节点 + * @param {Array} 数组 + * @param {string} 字段名(分组依据) + * @returns [{key:key, value:obj}] + */ +function arrayToGroup(array, attrName) { + let map = new Map(); + for (const item of array) { + if (map[item[attrName]]) { + map[item[attrName]].push(item); + } else { + map[item[attrName]] = [item]; + } + } + let newArray = []; + for (const key in map) { + newArray.push({ + key, + value: map[key] + }); + } + return newArray; +} + +/** + * @description 针对树结构数组的每一层的每个元素(节点)进行一些操作(N叉树的层序遍历) + * @param {Array} nodes 树结构数组 + * @param {string} childAttrName 子树节点数组的属性名 + * @param {Function} func 操作函数(两个参数:level:层级(从1开始),node:节点) + * @returns + */ +function setEveryLevelOfTree(nodes = [], childAttrName = "children", func) { + if (!nodes) { + return; + } + + const queue = nodes.slice(); + let level = 0; + const imTrue = true; // eslint:no-constant-condition + while (imTrue) { + level++; + let count = queue.length; + if (count === 0) { + break; + } + // 本while循环一周代表一层 + while (count--) { + const node = queue.shift(); + func(level, node); + if (node[childAttrName] && node[childAttrName].length) { + for (let i = 0; i < node[childAttrName].length; i++) { + queue.push(node[childAttrName][i]); + } + } + } + } +} + +module.exports = { + treeNodesToArray, + getLevelOfTree, + arrayToGroup, + setEveryLevelOfTree +} \ No newline at end of file diff --git a/src/util/TreeNodeFunctions.js b/src/util/TreeNodeFunctions.js new file mode 100644 index 0000000..c134c38 --- /dev/null +++ b/src/util/TreeNodeFunctions.js @@ -0,0 +1,135 @@ +/* + * @Author: ChileeHong + * @Date: 2021-01-11 08:44:52 + * @LastEditors: Billy + * @LastEditTime: 2021-09-06 03:37:48 + * @Description: 从树形节点数据中查找记录 + */ +/** + * @description 根据value值从多级cascade数据对象中取出数据链 + * @param {Array} arr 如: + * [ + * { label:'部门1',value:'1' + * children:[ + * { label:'组11',value:'11' + * children:[ + * { label:'用户1',value:'111'} + * ] + * } + * ] + * } + * ] + * @param {String} key value的键名,如'value' + * @param {String} name name的键名,如'name' + * @returns {Array} 带上parentId链接的扁平数组 + */ +import { deepClone } from "./DeepClone.js" + +export function flatten(tree, key = 'id', parentName = 'parentId', childrenName = 'children') { + let arr = deepClone(tree instanceof Array ? tree : [tree]) + let data = []; + function recursive(arr, parentId = null) { + let results = []; + for (let i in arr) { + let ele = basicCopy(arr[i]); + ele[parentName] = parentId; + ele[key] = arr[i][key]; + results.push(ele); + if (arr[i][childrenName] instanceof Array) { + recursive(arr[i][childrenName], arr[i][key]); + } + } + data.push(...results); + } + recursive(arr); + return data; +} + +// 根据一个value值找到其祖先 +/** + * @description 从带有parentId链接的扁平数组中,根据关键值查找到祖先的所有元素 + * @param {Array} arr 扁平数组 + * @param {Mixed} currentId 查找的值 + * @param {String} key 键名字段 + * @param {String} parentId 指向父节点的键名 + * @returns 包含从根节点到搜索节点的元素数组 + */ +export function getAncestors(arr, currentId, key = 'id', parentId = 'parentId') { + let i = 0; + function recursive(currentId, arr) { + if (i > 100) { + return; + } + i++; + const results = []; + let item = arr.find((item) => item[key] === currentId); + if (!item) { + return []; + } + results.push(item); + if (item[parentId]) { + results.push(...recursive(item[parentId], arr)); + } + return results; + } + let data = recursive(currentId, arr); + return data ? data.reverse() : data; +} + +/** + * @description 根据平坦数组的元素获取包含它自己的所有后代树形结构 + * @param {String/Number} currentId 当前元素的key值 + * @param {Array} flatArr 平坦数组 + * @param {String} key 数组中主键字段名(如id,key等等) + * @param {String} parentId 数组中指向父节点字段名 + * @param {String} childrenName 存放后代节点的字段名 + * @return {Array} 扁平数组 + * */ +export function getOffspring(currentId, flatArr = [], key = 'id', parentId = 'parentId', childrenName = 'children') { + let data = flatArr.find(item => item[key] === currentId) + function getChildren(curItem, flatArr) { + const children = flatArr.filter(item => item[parentId] === curItem[key]) + if (children.length < 1) { + return false + } + children.forEach(item => { + getChildren(item, flatArr) + }) + curItem[childrenName] = children + } + getChildren(data, flatArr) + return data ? flatten(data, key, parentId, childrenName) : [] +} + +/** + * @description 把带parentId链结构的平级数组转换成树形结构 + * @param {Array} arr 数组 + * @param {String} key 保存关键值的键名 + * @param {String} parentId 指向父记录值的键名 + */ +export function makeTree(arr, key = 'id', parentId = 'parentId', childrenName = 'children') { + var flat = deepClone(arr.filter(item => !Object.prototype.hasOwnProperty.call(item, childrenName))); + const root = []; + flat.forEach((node) => { + if (!node[parentId]) return root.push(node); + const parentIndex = flat.findIndex((el) => el[key] === node[parentId]); + if (!flat[parentIndex][childrenName]) { + return (flat[parentIndex][childrenName] = [node]); + } + + flat[parentIndex][childrenName].push(node); + }); + return root; +} + +// 浅复制,只复制基本类型的属性 +function basicCopy(obj) { + let data = {}; + for (let i in obj) { + if (typeof obj[i] === 'object' && obj[i]) { + continue; + } + data[i] = obj[i]; + } + return data; +} \ No newline at end of file diff --git a/src/util/UploadHelper.js b/src/util/UploadHelper.js new file mode 100644 index 0000000..807f502 --- /dev/null +++ b/src/util/UploadHelper.js @@ -0,0 +1,42 @@ +/* + * @Author: Billy + * @Date: 2020-09-18 14:04:17 + * @LastEditors: Billy + * @LastEditTime: 2021-06-06 02:02:30 + * @Description: 上传工具函数(弃用,有一点参考价值,暂时保留不删除) + */ + +/** + * @description 弹窗上传文件方法 + * @param {string} actionPath 上传文件的接口网址 + * @param {string} filePath 将要上传文件的目录的相对路径 + */ +function uploadByForm(actionPath, filePath) { + let formTag = document.createElement('form'); + formTag.setAttribute("enctype", "multipart/form-data"); + formTag.setAttribute("method", "post"); + formTag.setAttribute("action", actionPath); + + let inputPath = document.createElement('input'); + inputPath.setAttribute("type", "text"); + inputPath.value = filePath; + + let inputFile = document.createElement('input'); + inputFile.setAttribute("type", "file") + + formTag.appendChild(inputPath); + formTag.appendChild(inputFile); + // inputFile.click(); + formTag.style.display = "none"; + document.body.appendChild(formTag); + + formTag.addEventListener("submit", function (event) { + event.preventDefault(); + }, false); + + formTag.submit(); +} + +export default { + uploadByForm +} \ No newline at end of file diff --git a/src/util/readme.txt b/src/util/readme.txt new file mode 100644 index 0000000..c13bfe2 --- /dev/null +++ b/src/util/readme.txt @@ -0,0 +1,9 @@ + + +网上查到的工具函数,必须要在函数头部注释处写上出处地址 \ No newline at end of file diff --git a/src/views/Back.vue b/src/views/Back.vue new file mode 100644 index 0000000..0a9bb57 --- /dev/null +++ b/src/views/Back.vue @@ -0,0 +1,136 @@ + + + + + + + + \ No newline at end of file diff --git a/src/views/BackViews/Authorization4Customer.vue b/src/views/BackViews/Authorization4Customer.vue new file mode 100644 index 0000000..d545d6b --- /dev/null +++ b/src/views/BackViews/Authorization4Customer.vue @@ -0,0 +1,211 @@ + + + + + + + diff --git a/src/views/BackViews/Authorization4Partner.vue b/src/views/BackViews/Authorization4Partner.vue new file mode 100644 index 0000000..7fd2343 --- /dev/null +++ b/src/views/BackViews/Authorization4Partner.vue @@ -0,0 +1,211 @@ + + + + + + + diff --git a/src/views/BackViews/Classification.vue b/src/views/BackViews/Classification.vue new file mode 100644 index 0000000..e258d40 --- /dev/null +++ b/src/views/BackViews/Classification.vue @@ -0,0 +1,84 @@ + + + + + + + diff --git a/src/views/BackViews/Log.vue b/src/views/BackViews/Log.vue new file mode 100644 index 0000000..c728c15 --- /dev/null +++ b/src/views/BackViews/Log.vue @@ -0,0 +1,108 @@ + + + + + + + diff --git a/src/views/BackViews/Org.vue b/src/views/BackViews/Org.vue new file mode 100644 index 0000000..57ef724 --- /dev/null +++ b/src/views/BackViews/Org.vue @@ -0,0 +1,390 @@ + + + + \ No newline at end of file diff --git a/src/views/BackViews/PlatformSetting.vue b/src/views/BackViews/PlatformSetting.vue new file mode 100644 index 0000000..6b47ace --- /dev/null +++ b/src/views/BackViews/PlatformSetting.vue @@ -0,0 +1,112 @@ + + + + + + + diff --git a/src/views/BackViews/Role.vue b/src/views/BackViews/Role.vue new file mode 100644 index 0000000..31b62a3 --- /dev/null +++ b/src/views/BackViews/Role.vue @@ -0,0 +1,519 @@ + + + + + + + diff --git a/src/views/BackViews/Statistics.vue b/src/views/BackViews/Statistics.vue new file mode 100644 index 0000000..135bf53 --- /dev/null +++ b/src/views/BackViews/Statistics.vue @@ -0,0 +1,23 @@ + + + + + + + diff --git a/src/views/BackViews/Topic.vue b/src/views/BackViews/Topic.vue new file mode 100644 index 0000000..0865581 --- /dev/null +++ b/src/views/BackViews/Topic.vue @@ -0,0 +1,23 @@ + + + + + + + diff --git a/src/views/Home.vue b/src/views/Home.vue new file mode 100644 index 0000000..806fddd --- /dev/null +++ b/src/views/Home.vue @@ -0,0 +1,97 @@ + + + + + + + + \ No newline at end of file diff --git a/src/views/HomeSubViews/Main/Demonstrations.vue b/src/views/HomeSubViews/Main/Demonstrations.vue new file mode 100644 index 0000000..3a287d3 --- /dev/null +++ b/src/views/HomeSubViews/Main/Demonstrations.vue @@ -0,0 +1,10 @@ + + \ No newline at end of file diff --git a/src/views/HomeSubViews/Main/PersonalSpace.vue b/src/views/HomeSubViews/Main/PersonalSpace.vue new file mode 100644 index 0000000..3a287d3 --- /dev/null +++ b/src/views/HomeSubViews/Main/PersonalSpace.vue @@ -0,0 +1,10 @@ + + \ No newline at end of file diff --git a/src/views/HomeSubViews/Main/ProductAndCases.vue b/src/views/HomeSubViews/Main/ProductAndCases.vue new file mode 100644 index 0000000..19bcef1 --- /dev/null +++ b/src/views/HomeSubViews/Main/ProductAndCases.vue @@ -0,0 +1,70 @@ + + + + + \ No newline at end of file diff --git a/src/views/HomeSubViews/Main/SalesResources.vue b/src/views/HomeSubViews/Main/SalesResources.vue new file mode 100644 index 0000000..3a287d3 --- /dev/null +++ b/src/views/HomeSubViews/Main/SalesResources.vue @@ -0,0 +1,10 @@ + + \ No newline at end of file diff --git a/src/views/HomeSubViews/Main/Solutions.vue b/src/views/HomeSubViews/Main/Solutions.vue new file mode 100644 index 0000000..3a287d3 --- /dev/null +++ b/src/views/HomeSubViews/Main/Solutions.vue @@ -0,0 +1,10 @@ + + \ No newline at end of file diff --git a/src/views/HomeSubViews/Secondary/CloudDesktop.vue b/src/views/HomeSubViews/Secondary/CloudDesktop.vue new file mode 100644 index 0000000..3a287d3 --- /dev/null +++ b/src/views/HomeSubViews/Secondary/CloudDesktop.vue @@ -0,0 +1,10 @@ + + \ No newline at end of file diff --git a/src/views/HomeSubViews/Secondary/QuickDemonstrations.vue b/src/views/HomeSubViews/Secondary/QuickDemonstrations.vue new file mode 100644 index 0000000..3a287d3 --- /dev/null +++ b/src/views/HomeSubViews/Secondary/QuickDemonstrations.vue @@ -0,0 +1,10 @@ + + \ No newline at end of file diff --git a/src/views/HomeSubViews/Test/Test.vue b/src/views/HomeSubViews/Test/Test.vue new file mode 100644 index 0000000..b4e1c63 --- /dev/null +++ b/src/views/HomeSubViews/Test/Test.vue @@ -0,0 +1,80 @@ + + + + + \ No newline at end of file diff --git a/src/views/HomeSubViews/Test/Test2.vue b/src/views/HomeSubViews/Test/Test2.vue new file mode 100644 index 0000000..a7c7117 --- /dev/null +++ b/src/views/HomeSubViews/Test/Test2.vue @@ -0,0 +1,26 @@ + + + + + \ No newline at end of file diff --git a/src/views/SystemViews/Error.vue b/src/views/SystemViews/Error.vue new file mode 100644 index 0000000..76f7d85 --- /dev/null +++ b/src/views/SystemViews/Error.vue @@ -0,0 +1,84 @@ + + + \ No newline at end of file diff --git a/src/views/SystemViews/Login.vue b/src/views/SystemViews/Login.vue new file mode 100644 index 0000000..3b501a4 --- /dev/null +++ b/src/views/SystemViews/Login.vue @@ -0,0 +1,311 @@ + + + + \ No newline at end of file diff --git a/src/views/SystemViews/NotFound.vue b/src/views/SystemViews/NotFound.vue new file mode 100644 index 0000000..83e2312 --- /dev/null +++ b/src/views/SystemViews/NotFound.vue @@ -0,0 +1,78 @@ + + + \ No newline at end of file diff --git a/tests/unit/example.spec.js b/tests/unit/example.spec.js new file mode 100644 index 0000000..c585ea3 --- /dev/null +++ b/tests/unit/example.spec.js @@ -0,0 +1,13 @@ +import { expect } from 'chai' +import { shallowMount } from '@vue/test-utils' +import HelloWorld from '@/components/HelloWorld.vue' + +describe('HelloWorld.vue', () => { + it('renders props.msg when passed', () => { + const msg = 'new message' + const wrapper = shallowMount(HelloWorld, { + propsData: { msg } + }) + expect(wrapper.text()).to.include(msg) + }) +}) diff --git a/vue.config.js b/vue.config.js new file mode 100644 index 0000000..fbb71ca --- /dev/null +++ b/vue.config.js @@ -0,0 +1,60 @@ +/* + * @Author: Billy + * @Date: 2020-06-03 09:47:31 + * @LastEditors: Billy + * @LastEditTime: 2022-01-10 13:49:17 + * @Description: 请输入 + */ + +const path = require('path'); + +function resolve(dir) { + return path.join(__dirname, dir); +} + +/** + * @see https://cli.vuejs.org/zh/config/#vue-config-js + */ + +module.exports = { + devServer: { + port: 8030, + proxy: { + '/api': { + target: 'http://ty.y68.fun/sales-show-3', + ws: true, + changeOrigin: true, // false:请求头中host仍然是浏览器发送过来的host;true:请求头中host会设置成target + // secure: false, // 如果是https接口,需要配置这个参数 + pathRewrite: { + '^/api': '', // 重写请求路径 + }, + } + } + }, + /** + * @see https://cli.vuejs.org/zh/config/#publicpath + */ + publicPath: "./", + configureWebpack: { + plugins: [] + }, + + chainWebpack(config) { + // set svg-sprite-loader + config.module + .rule('svg') + .exclude.add(resolve('src/svgicon')) + .end(); + config.module + .rule('icons') + .test(/\.svg$/) + .include.add(resolve('src/svgicon')) + .end() + .use('svg-sprite-loader') + .loader('svg-sprite-loader') + .options({ + symbolId: 'icon-[name]', + }) + .end(); + }, +}; \ No newline at end of file